Repository: otya128/winevdm Branch: master Commit: bd4c7b6cd0da Files: 1307 Total size: 21.0 MB Directory structure: gitextract__5xouun8/ ├── .gitattributes ├── .github/ │ └── ISSUE_TEMPLATE/ │ └── bug_report.md ├── .gitignore ├── BuildToolProperty.props ├── CMakeLists.txt ├── LICENSE ├── PropertySheet.props ├── README.md ├── READMEJP.md ├── appveyor.yml ├── avifile/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── avifile.def │ ├── avifile.dll16.spec │ ├── avifile.vcxproj │ └── main.c ├── comm/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── comm.def │ ├── comm.drv16.spec │ └── comm.vcxproj ├── commctrl/ │ ├── CMakeLists.txt │ ├── commctrl.c │ ├── commctrl.def │ ├── commctrl.dll16.spec │ └── commctrl.vcxproj ├── commdlg/ │ ├── CMakeLists.txt │ ├── cdlg16.h │ ├── colordlg.c │ ├── commdlg.def │ ├── commdlg.dll16.spec │ ├── commdlg.rc │ ├── commdlg.vcxproj │ ├── commdlg.vcxproj.filters │ ├── filedlg.c │ ├── finddlg.c │ ├── fontdlg.c │ ├── printdlg.c │ └── resource.h ├── compobj/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── compobj.c │ ├── compobj.def │ ├── compobj.dll16.spec │ └── compobj.vcxproj ├── convertwinefile/ │ ├── convertwinefile.vcxproj │ ├── convertwinefile.vcxproj.filters │ └── main.c ├── convspec/ │ ├── CMakeLists.txt │ ├── build.h │ ├── convspec.c │ ├── convspec.vcxproj │ ├── convspec.vcxproj.filters │ ├── import.c │ ├── main.c.h │ ├── parser.c │ ├── relay.c │ ├── res16.c │ ├── res32.c │ ├── spec16.c │ ├── spec32.c │ ├── utils.c │ └── ver.h ├── ctl3d/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ctl3d.c │ ├── ctl3d.def │ ├── ctl3d.dll16.spec │ └── ctl3d.vcxproj ├── ctl3dv2/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ctl3d.c │ ├── ctl3dv2.def │ ├── ctl3dv2.dll16.spec │ └── ctl3dv2.vcxproj ├── ddeml/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ddeml.c │ ├── ddeml.def │ ├── ddeml.dll16.spec │ └── ddeml.vcxproj ├── dispdib/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── dispdib.c │ ├── dispdib.def │ ├── dispdib.dll16.spec │ └── dispdib.vcxproj ├── display/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── display.c │ ├── display.def │ ├── display.drv16.spec │ ├── display.rc │ └── display.vcxproj ├── dummy.c ├── dummydll/ │ └── vgaoem.fon ├── gdi/ │ ├── CMakeLists.txt │ ├── bidi.c │ ├── env.c │ ├── gdi.c │ ├── gdi.def │ ├── gdi.exe16.spec │ ├── gdi.vcxproj │ ├── gdi.vcxproj.filters │ ├── metafile.c │ └── printdrv.c ├── gvm/ │ ├── CMakeLists.txt │ ├── gvm-interface.h │ ├── gvm.c │ ├── gvm.def │ ├── gvm.h │ ├── gvm.vcxproj │ └── gvm.vcxproj.filters ├── haxmvm/ │ ├── CMakeLists.txt │ ├── haxmvm.c │ ├── haxmvm.h │ ├── haxmvm.vcxproj │ └── haxmvm.vcxproj.filters ├── install (no console).lnk ├── install.inf ├── install.lnk ├── installw.inf ├── keyboard/ │ ├── CMakeLists.txt │ ├── keyboard.c │ ├── keyboard.def │ ├── keyboard.drv16.spec │ ├── keyboard.vcxproj │ └── keyboard.vcxproj.filters ├── krnl386/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── atom.c │ ├── compat.c │ ├── conf.c │ ├── dma.c │ ├── dosaspi.c │ ├── dosdev.c │ ├── dosexe.c │ ├── dosexe.h │ ├── dosmem.c │ ├── dosvm.c │ ├── error.c │ ├── file.c │ ├── fpu.c │ ├── global.c │ ├── instr.c │ ├── int09.c │ ├── int10.c │ ├── int13.c │ ├── int15.c │ ├── int16.c │ ├── int21.c │ ├── int25.c │ ├── int26.c │ ├── int2f.c │ ├── int31.c │ ├── int33.c │ ├── int67.c │ ├── interrupts.c │ ├── ioports.c │ ├── kernel.c │ ├── kernel16_private.h │ ├── krnl386.def │ ├── krnl386.exe16.spec │ ├── krnl386.vcxproj │ ├── krnl386.vcxproj.filters │ ├── local.c │ ├── ne_module.c │ ├── ne_segment.c │ ├── registry.c │ ├── relay.c │ ├── resource.c │ ├── selector.c │ ├── snoop.c │ ├── soundblaster.c │ ├── stub.c │ ├── syslevel.c │ ├── task.c │ ├── thunk.c │ ├── timer.c │ ├── utthunk.c │ ├── vdd.c │ ├── version.rc │ ├── vga.c │ ├── vga.h │ ├── vxd.c │ ├── wow_handle.c │ └── wowthunk.c ├── lzexpand/ │ ├── CMakeLists.txt │ ├── lzexpand.c │ ├── lzexpand.def │ ├── lzexpand.dll16.spec │ ├── lzexpand.vcxproj │ ├── lzexpand.vcxproj.filters │ └── wine_lzexpand.c ├── mmsystem/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── driver.c │ ├── mci16.c │ ├── message16.c │ ├── mmio16.c │ ├── mmsystem.c │ ├── mmsystem.def │ ├── mmsystem.dll16.spec │ ├── mmsystem.vcxproj │ ├── playsound.c │ └── winemm16.h ├── mouse/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── mouse.c │ ├── mouse.def │ ├── mouse.drv16.spec │ ├── mouse.rc │ └── mouse.vcxproj ├── msacm/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── msacm.c │ ├── msacm.def │ ├── msacm.dll16.spec │ ├── msacm.vcxproj │ └── wineacm16.h ├── msvideo/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── msvideo.def │ ├── msvideo.dll16.spec │ ├── msvideo.vcxproj │ ├── msvideo16.c │ └── vfw16.h ├── nddeapi/ │ ├── CMakeLists.txt │ ├── nddeapi.c │ ├── nddeapi.def │ ├── nddeapi.dll16.spec │ └── nddeapi.vcxproj ├── netapi/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── netapi.c │ ├── netapi.def │ ├── netapi.dll16.spec │ └── netapi.vcxproj ├── ntvdm/ │ ├── CMakeLists.txt │ ├── main.c │ ├── ntvdm.def │ ├── ntvdm.dll.spec │ └── ntvdm.vcxproj ├── ole2/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── hglobalstream.c │ ├── ifs.h │ ├── ifs.idl │ ├── ifs_thunk.c │ ├── ifs_thunk.h │ ├── memlockbytes.c │ ├── ole2.c │ ├── ole2.def │ ├── ole2.dll16.spec │ └── ole2.vcxproj ├── ole2conv/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ole2conv.def │ ├── ole2conv.dll16.spec │ └── ole2conv.vcxproj ├── ole2disp/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ole2disp.c │ ├── ole2disp.def │ ├── ole2disp.dll16.spec │ ├── ole2disp.h │ ├── ole2disp.vcxproj │ ├── var/ │ │ ├── resource.h │ │ ├── varformat.c │ │ ├── variant.c │ │ ├── variant.h │ │ └── vartype.c │ ├── wine_typelib.c │ └── wine_typelib.h ├── ole2nls/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ole2nls.c │ ├── ole2nls.def │ ├── ole2nls.dll16.spec │ ├── ole2nls.vcxproj │ └── version.rc ├── ole2prox/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ole2prox.def │ ├── ole2prox.dll16.spec │ └── ole2prox.vcxproj ├── ole2thk/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ole2thk.def │ ├── ole2thk.dll16.spec │ └── ole2thk.vcxproj ├── olecli/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── olecli.c │ ├── olecli.def │ ├── olecli.dll16.spec │ ├── olecli.h │ └── olecli.vcxproj ├── olesvr/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── olesvr.c │ ├── olesvr.def │ ├── olesvr.dll16.spec │ ├── olesvr.vcxproj │ └── olesvr.vcxproj.filters ├── otvdm/ │ ├── CMakeLists.txt │ ├── otvdm.rc │ ├── otvdm.vcxproj │ ├── otvdm.vcxproj.filters │ ├── otvdmw.vcxproj │ ├── otvdmw.vcxproj.filters │ ├── resource.h │ ├── visualstyle.manifest │ └── winevdm.c ├── otvdm.ini ├── otvdm.sln ├── regedit/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── regedit.c │ ├── regedit.def │ ├── regedit.exe16.spec │ └── regedit.vcxproj ├── rmpatch/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── instr.c │ ├── rmpatch.c │ ├── rmpatch.def │ ├── rmpatch.dll16.spec │ └── rmpatch.vcxproj ├── shell/ │ ├── CMakeLists.txt │ ├── shell.c │ ├── shell.def │ ├── shell.dll16.spec │ ├── shell.vcxproj │ └── shell.vcxproj.filters ├── sound/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── sound.c │ ├── sound.def │ ├── sound.drv16.spec │ └── sound.vcxproj ├── storage/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ifs.h │ ├── storage.c │ ├── storage.def │ ├── storage.dll16.spec │ └── storage.vcxproj ├── system/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── system.c │ ├── system.def │ ├── system.drv16.spec │ └── system.vcxproj ├── timer/ │ ├── CMakeLists.txt │ ├── timer.c │ ├── timer.def │ ├── timer.drv16.spec │ └── timer.vcxproj ├── toolhelp/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── toolhelp.c │ ├── toolhelp.def │ ├── toolhelp.dll16.spec │ ├── toolhelp.h │ └── toolhelp.vcxproj ├── tools/ │ └── package.ps1 ├── typelib/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── typelib.c │ ├── typelib.def │ ├── typelib.dll16.spec │ └── typelib.vcxproj ├── uninstall.reg ├── user/ │ ├── CMakeLists.txt │ ├── bidi.c │ ├── comm.c │ ├── dde.c │ ├── dialog.c │ ├── hook.c │ ├── message.c │ ├── message_table.h │ ├── network.c │ ├── stub.c │ ├── user.c │ ├── user.def │ ├── user.exe16.spec │ ├── user.rc │ ├── user.vcxproj │ ├── user.vcxproj.filters │ ├── user_private.h │ ├── window.c │ └── winhelp.c ├── ver/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── ver.def │ ├── ver.dll16.spec │ ├── ver.vcxproj │ └── version.c ├── vm86/ │ ├── CMakeLists.txt │ ├── COPYING.txt │ ├── mame/ │ │ ├── emu/ │ │ │ └── cpu/ │ │ │ ├── i386/ │ │ │ │ ├── cycles.h │ │ │ │ ├── i386.c │ │ │ │ ├── i386.h │ │ │ │ ├── i386dasm.c │ │ │ │ ├── i386op16.c │ │ │ │ ├── i386op32.c │ │ │ │ ├── i386ops.c │ │ │ │ ├── i386ops.h │ │ │ │ ├── i386priv.h │ │ │ │ ├── i486ops.c │ │ │ │ ├── pentops.c │ │ │ │ ├── readme_msdos_player.txt │ │ │ │ └── x87ops.c │ │ │ ├── i386.old/ │ │ │ │ ├── cycles.h │ │ │ │ ├── i386.c │ │ │ │ ├── i386.h │ │ │ │ ├── i386dasm.c │ │ │ │ ├── i386op16.c │ │ │ │ ├── i386op32.c │ │ │ │ ├── i386ops.c │ │ │ │ ├── i386ops.h │ │ │ │ ├── i386priv.h │ │ │ │ ├── i486ops.c │ │ │ │ ├── pentops.c │ │ │ │ ├── readme_msdos_player.txt │ │ │ │ └── x87ops.c │ │ │ ├── i86/ │ │ │ │ ├── ea.h │ │ │ │ ├── host.h │ │ │ │ ├── i286.c │ │ │ │ ├── i286.h │ │ │ │ ├── i86.c │ │ │ │ ├── i86.h │ │ │ │ ├── i86.txt │ │ │ │ ├── i86priv.h │ │ │ │ ├── i86time.c │ │ │ │ ├── instr186.c │ │ │ │ ├── instr186.h │ │ │ │ ├── instr286.c │ │ │ │ ├── instr286.h │ │ │ │ ├── instr86.c │ │ │ │ ├── instr86.h │ │ │ │ ├── modrm.h │ │ │ │ ├── modrm286.h │ │ │ │ ├── readme_msdos_player.txt │ │ │ │ ├── table186.h │ │ │ │ ├── table286.h │ │ │ │ └── table86.h │ │ │ ├── readme_msdos_player.txt │ │ │ ├── vtlb.c │ │ │ └── vtlb.h │ │ └── lib/ │ │ └── softfloat/ │ │ ├── README.txt │ │ ├── f2xm1.c │ │ ├── fpatan.c │ │ ├── fpu_constant.h │ │ ├── fsincos.c │ │ ├── fyl2x.c │ │ ├── mamesf.h │ │ ├── milieu.h │ │ ├── readme_msdos_player.txt │ │ ├── softfloat-macros │ │ ├── softfloat-specialize │ │ ├── softfloat.c │ │ └── softfloat.h │ ├── msdos.cpp │ ├── msdos.h │ ├── vm86.def │ ├── vm86.vcxproj │ └── vm86.vcxproj.filters ├── whpxvm/ │ ├── CMakeLists.txt │ ├── whpxvm.c │ ├── whpxvm.def │ ├── whpxvm.h │ └── whpxvm.vcxproj ├── widl/ │ ├── CMakeLists.txt │ ├── client.c │ ├── expr.c │ ├── expr.h │ ├── getopt.c │ ├── getopt_msvc.h │ ├── hash.c │ ├── hash.h │ ├── header.c │ ├── header.h │ ├── parser.h │ ├── parser.l │ ├── parser.y │ ├── proxy.c │ ├── register.c │ ├── relay16.c │ ├── server.c │ ├── typegen.c │ ├── typegen.h │ ├── typelib.c │ ├── typelib.h │ ├── typelib_struct.h │ ├── typetree.c │ ├── typetree.h │ ├── utils.c │ ├── utils.h │ ├── widl.c │ ├── widl.h │ ├── widl.vcxproj │ ├── widltypes.h │ └── write_msft.c ├── wifeman/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── wifeman.c │ ├── wifeman.def │ ├── wifeman.dll16.spec │ └── wifeman.vcxproj ├── win87em/ │ ├── CMakeLists.txt │ ├── win87em.c │ ├── win87em.def │ ├── win87em.dll16.spec │ ├── win87em.vcxproj │ └── win87em.vcxproj.filters ├── wine/ │ ├── CMakeLists.txt │ ├── casemap.c │ ├── config.c │ ├── config.h │ ├── debug.c │ ├── ldt.c │ ├── ldt2.c │ ├── port.h │ ├── string.c │ ├── wctype.c │ ├── windows/ │ │ ├── Makefile.in │ │ ├── accctrl.h │ │ ├── access.idl │ │ ├── aclapi.h │ │ ├── aclui.h │ │ ├── activation.idl │ │ ├── activaut.idl │ │ ├── activdbg.idl │ │ ├── activscp.idl │ │ ├── adshlp.h │ │ ├── advpub.h │ │ ├── af_irda.h │ │ ├── amaudio.h │ │ ├── amstream.idl │ │ ├── amvideo.idl │ │ ├── appcompatapi.h │ │ ├── appmgmt.h │ │ ├── appmodel.h │ │ ├── asptlb.idl │ │ ├── asynot.idl │ │ ├── asysta.idl │ │ ├── atlbase.h │ │ ├── atlcom.h │ │ ├── atliface.idl │ │ ├── atlwin.h │ │ ├── audevcod.h │ │ ├── audioclient.idl │ │ ├── audiopolicy.idl │ │ ├── audiosessiontypes.h │ │ ├── austream.idl │ │ ├── authz.h │ │ ├── aviriff.h │ │ ├── avrt.h │ │ ├── axcore.idl │ │ ├── axextend.idl │ │ ├── basetsd.h │ │ ├── basetyps.h │ │ ├── bcrypt.h │ │ ├── bdaiface.idl │ │ ├── bdaiface_enums.h │ │ ├── bdatypes.h │ │ ├── binres.idl │ │ ├── bits.idl │ │ ├── bits1_5.idl │ │ ├── bits2_0.idl │ │ ├── bits2_5.idl │ │ ├── bits3_0.idl │ │ ├── bitsmsg.h │ │ ├── bluetoothapis.h │ │ ├── bthsdpdef.h │ │ ├── cderr.h │ │ ├── cfgmgr32.h │ │ ├── cguid.h │ │ ├── chprst.idl │ │ ├── cierror.h │ │ ├── clusapi.h │ │ ├── cmdbas.idl │ │ ├── cmdtxt.idl │ │ ├── cmnquery.idl │ │ ├── colinf.idl │ │ ├── comcat.idl │ │ ├── commctrl.h │ │ ├── commctrl.rh │ │ ├── commdlg.h │ │ ├── commoncontrols.idl │ │ ├── compobj.h │ │ ├── comsvcs.idl │ │ ├── config.h │ │ ├── config.h.in │ │ ├── control.idl │ │ ├── cor.idl │ │ ├── cordebug.idl │ │ ├── corerror.h │ │ ├── corhdr.h │ │ ├── cpl.h │ │ ├── crtrow.idl │ │ ├── cryptdlg.h │ │ ├── cryptuiapi.h │ │ ├── ctfutb.idl │ │ ├── ctxtcall.idl │ │ ├── custcntl.h │ │ ├── cvconst.h │ │ ├── d2d1.idl │ │ ├── d2d1_1.idl │ │ ├── d2dbasetypes.h │ │ ├── d2derr.h │ │ ├── d3d.h │ │ ├── d3d10.idl │ │ ├── d3d10_1.idl │ │ ├── d3d10_1shader.h │ │ ├── d3d10effect.h │ │ ├── d3d10misc.h │ │ ├── d3d10sdklayers.idl │ │ ├── d3d10shader.h │ │ ├── d3d11.idl │ │ ├── d3d11_1.idl │ │ ├── d3d11_2.idl │ │ ├── d3d11_3.idl │ │ ├── d3d11_4.idl │ │ ├── d3d11on12.idl │ │ ├── d3d11sdklayers.idl │ │ ├── d3d11shader.h │ │ ├── d3d12.idl │ │ ├── d3d8.h │ │ ├── d3d8caps.h │ │ ├── d3d8types.h │ │ ├── d3d9.h │ │ ├── d3d9caps.h │ │ ├── d3d9types.h │ │ ├── d3dcaps.h │ │ ├── d3dcommon.idl │ │ ├── d3dcompiler.h │ │ ├── d3dhal.h │ │ ├── d3drm.h │ │ ├── d3drmdef.h │ │ ├── d3drmobj.h │ │ ├── d3drmwin.h │ │ ├── d3dtypes.h │ │ ├── d3dukmdt.h │ │ ├── d3dvec.inl │ │ ├── d3dx10.h │ │ ├── d3dx10async.h │ │ ├── d3dx10core.idl │ │ ├── d3dx10math.h │ │ ├── d3dx10tex.h │ │ ├── d3dx11.h │ │ ├── d3dx11async.h │ │ ├── d3dx11core.idl │ │ ├── d3dx11tex.h │ │ ├── d3dx9.h │ │ ├── d3dx9anim.h │ │ ├── d3dx9core.h │ │ ├── d3dx9effect.h │ │ ├── d3dx9math.h │ │ ├── d3dx9math.inl │ │ ├── d3dx9mesh.h │ │ ├── d3dx9shader.h │ │ ├── d3dx9shape.h │ │ ├── d3dx9tex.h │ │ ├── d3dx9xof.h │ │ ├── davclnt.h │ │ ├── dbccmd.idl │ │ ├── dbcses.idl │ │ ├── dbdsad.idl │ │ ├── dbghelp.h │ │ ├── dbinit.idl │ │ ├── dbprop.idl │ │ ├── dbs.idl │ │ ├── dbt.h │ │ ├── dciddi.h │ │ ├── dciman.h │ │ ├── dcommon.idl │ │ ├── dde.h │ │ ├── dde.rh │ │ ├── ddeml.h │ │ ├── ddraw.h │ │ ├── ddrawgdi.h │ │ ├── ddrawi.h │ │ ├── ddstream.idl │ │ ├── delayloadhandler.h │ │ ├── devenum.idl │ │ ├── devguid.h │ │ ├── devicetopology.idl │ │ ├── devpkey.h │ │ ├── devpropdef.h │ │ ├── dhcpcsdk.h │ │ ├── dhtmldid.h │ │ ├── dhtmled.idl │ │ ├── difxapi.h │ │ ├── digitalv.h │ │ ├── dimm.idl │ │ ├── dinput.h │ │ ├── dinputd.h │ │ ├── dispdib.h │ │ ├── dispex.idl │ │ ├── dlgs.h │ │ ├── dls1.h │ │ ├── dls2.h │ │ ├── dmdls.h │ │ ├── dmerror.h │ │ ├── dmksctrl.h │ │ ├── dmo.h │ │ ├── dmoreg.h │ │ ├── dmort.h │ │ ├── dmplugin.h │ │ ├── dmusbuff.h │ │ ├── dmusicc.h │ │ ├── dmusicf.h │ │ ├── dmusici.h │ │ ├── dmusics.h │ │ ├── docobj.idl │ │ ├── docobjectservice.idl │ │ ├── downloadmgr.idl │ │ ├── dpaddr.h │ │ ├── dplay.h │ │ ├── dplay8.h │ │ ├── dplobby.h │ │ ├── dplobby8.h │ │ ├── dpnathlp.h │ │ ├── drmexternals.idl │ │ ├── dsconf.h │ │ ├── dsgetdc.h │ │ ├── dshow.h │ │ ├── dsound.h │ │ ├── dsrole.h │ │ ├── dvdmedia.h │ │ ├── dvoice.h │ │ ├── dwmapi.h │ │ ├── dwrite.idl │ │ ├── dwrite_1.idl │ │ ├── dwrite_2.idl │ │ ├── dwrite_3.idl │ │ ├── dxdiag.h │ │ ├── dxerr8.h │ │ ├── dxerr9.h │ │ ├── dxfile.h │ │ ├── dxgi.idl │ │ ├── dxgi1_2.idl │ │ ├── dxgi1_3.idl │ │ ├── dxgi1_4.idl │ │ ├── dxgi1_5.idl │ │ ├── dxgi1_6.idl │ │ ├── dxgicommon.idl │ │ ├── dxgiformat.idl │ │ ├── dxgitype.idl │ │ ├── dxva2api.idl │ │ ├── dyngraph.idl │ │ ├── endpointvolume.idl │ │ ├── errorrep.h │ │ ├── errors.h │ │ ├── errrec.idl │ │ ├── evcode.h │ │ ├── evntprov.h │ │ ├── evntrace.h │ │ ├── evr.idl │ │ ├── excpt.h │ │ ├── exdisp.idl │ │ ├── exdispid.h │ │ ├── fci.h │ │ ├── fdi.h │ │ ├── fileapi.h │ │ ├── fltdefs.h │ │ ├── fontsub.h │ │ ├── fusion.idl │ │ ├── gameux.idl │ │ ├── gdiplus.h │ │ ├── gdipluscolor.h │ │ ├── gdipluscolormatrix.h │ │ ├── gdipluseffects.h │ │ ├── gdiplusenums.h │ │ ├── gdiplusflat.h │ │ ├── gdiplusgpstubs.h │ │ ├── gdiplusimaging.h │ │ ├── gdiplusinit.h │ │ ├── gdiplusmem.h │ │ ├── gdiplusmetaheader.h │ │ ├── gdipluspixelformats.h │ │ ├── gdiplustypes.h │ │ ├── guiddef.h │ │ ├── hidusage.h │ │ ├── highlevelmonitorconfigurationapi.h │ │ ├── hlguids.h │ │ ├── hlink.idl │ │ ├── hstring.idl │ │ ├── htiface.idl │ │ ├── htiframe.idl │ │ ├── htmlhelp.h │ │ ├── http.h │ │ ├── httprequest.idl │ │ ├── httprequestid.h │ │ ├── i_cryptasn1tls.h │ │ ├── iads.idl │ │ ├── icftypes.idl │ │ ├── icm.h │ │ ├── icmpapi.h │ │ ├── idispids.h │ │ ├── ieautomation.idl │ │ ├── iextag.idl │ │ ├── ifdef.h │ │ ├── ifmib.h │ │ ├── iimgctx.idl │ │ ├── imagehlp.h │ │ ├── ime.h │ │ ├── imm.h │ │ ├── imnact.idl │ │ ├── imnxport.idl │ │ ├── in6addr.h │ │ ├── inaddr.h │ │ ├── indexsrv.idl │ │ ├── initguid.h │ │ ├── inputscope.idl │ │ ├── inseng.idl │ │ ├── inspectable.idl │ │ ├── interactioncontext.h │ │ ├── intshcut.h │ │ ├── ipexport.h │ │ ├── iphlpapi.h │ │ ├── ipifcons.h │ │ ├── ipmib.h │ │ ├── iprtrmib.h │ │ ├── iptypes.h │ │ ├── isguids.h │ │ ├── knownfolders.h │ │ ├── ks.h │ │ ├── ksguid.h │ │ ├── ksmedia.h │ │ ├── ksuuids.h │ │ ├── libloaderapi.h │ │ ├── lm.h │ │ ├── lmaccess.h │ │ ├── lmapibuf.h │ │ ├── lmat.h │ │ ├── lmbrowsr.h │ │ ├── lmcons.h │ │ ├── lmerr.h │ │ ├── lmjoin.h │ │ ├── lmmsg.h │ │ ├── lmserver.h │ │ ├── lmshare.h │ │ ├── lmstats.h │ │ ├── lmuse.h │ │ ├── lmuseflg.h │ │ ├── lmwksta.h │ │ ├── loadperf.h │ │ ├── lowlevelmonitorconfigurationapi.h │ │ ├── lzexpand.h │ │ ├── mapi.h │ │ ├── mapicode.h │ │ ├── mapidefs.h │ │ ├── mapiform.h │ │ ├── mapiguid.h │ │ ├── mapitags.h │ │ ├── mapiutil.h │ │ ├── mapival.h │ │ ├── mapix.h │ │ ├── mciavi.h │ │ ├── mcx.h │ │ ├── mediaerr.h │ │ ├── mediaobj.idl │ │ ├── metahost.idl │ │ ├── mfapi.h │ │ ├── mferror.h │ │ ├── mfidl.idl │ │ ├── mfobjects.idl │ │ ├── mfreadwrite.idl │ │ ├── mftransform.idl │ │ ├── midles.h │ │ ├── mimeinfo.idl │ │ ├── mimeole.idl │ │ ├── minmax.h │ │ ├── mlang.idl │ │ ├── mmc.idl │ │ ├── mmddk.h │ │ ├── mmdeviceapi.idl │ │ ├── mmreg.h │ │ ├── mmstream.idl │ │ ├── mmsystem.h │ │ ├── mprapi.h │ │ ├── mprerror.h │ │ ├── msacm.h │ │ ├── msacmdlg.h │ │ ├── msacmdrv.h │ │ ├── msasn1.h │ │ ├── mscat.h │ │ ├── mscoree.idl │ │ ├── msctf.idl │ │ ├── msdadc.idl │ │ ├── msdaguid.h │ │ ├── msdasc.idl │ │ ├── mshtmcid.h │ │ ├── mshtmdid.h │ │ ├── mshtmhst.idl │ │ ├── mshtml.idl │ │ ├── msi.h │ │ ├── msidefs.h │ │ ├── msident.idl │ │ ├── msinkaut.idl │ │ ├── msiquery.h │ │ ├── msopc.idl │ │ ├── mssip.h │ │ ├── msstkppg.h │ │ ├── mstask.idl │ │ ├── mstcpip.h │ │ ├── mswsock.h │ │ ├── msxml.idl │ │ ├── msxml2.idl │ │ ├── msxml2did.h │ │ ├── msxml6.idl │ │ ├── msxml6did.h │ │ ├── msxmldid.h │ │ ├── mtxdm.h │ │ ├── multimon.h │ │ ├── nb30.h │ │ ├── ncrypt.h │ │ ├── ndrtypes.h │ │ ├── netcfgx.idl │ │ ├── netcon.idl │ │ ├── netfw.idl │ │ ├── netioapi.h │ │ ├── netlistmgr.idl │ │ ├── nldef.h │ │ ├── npapi.h │ │ ├── nserror.h │ │ ├── nspapi.h │ │ ├── ntddcdrm.h │ │ ├── ntddndis.h │ │ ├── ntddscsi.h │ │ ├── ntddstor.h │ │ ├── ntdef.h │ │ ├── ntdsapi.h │ │ ├── ntlsa.h │ │ ├── ntquery.h │ │ ├── ntsecapi.h │ │ ├── ntsecpkg.h │ │ ├── ntstatus.h │ │ ├── oaidl.idl │ │ ├── objbase.h │ │ ├── objectarray.idl │ │ ├── objidl.idl │ │ ├── objsafe.idl │ │ ├── objsel.h │ │ ├── ocidl.idl │ │ ├── ocmm.idl │ │ ├── odbcinst.h │ │ ├── ole2.h │ │ ├── ole2ver.h │ │ ├── oleacc.idl │ │ ├── oleauto.h │ │ ├── olectl.h │ │ ├── oledb.idl │ │ ├── oledberr.h │ │ ├── oledlg.h │ │ ├── oleidl.idl │ │ ├── opcbase.idl │ │ ├── opcobjectmodel.idl │ │ ├── opcparturi.idl │ │ ├── opnrst.idl │ │ ├── optary.idl │ │ ├── patchapi.h │ │ ├── pathcch.h │ │ ├── pdh.h │ │ ├── pdhmsg.h │ │ ├── perflib.h │ │ ├── perhist.idl │ │ ├── physicalmonitorenumerationapi.h │ │ ├── pktdef.h │ │ ├── poppack.h │ │ ├── powrprof.h │ │ ├── prntvpt.h │ │ ├── profinfo.h │ │ ├── propidl.idl │ │ ├── propkey.h │ │ ├── propkeydef.h │ │ ├── propsys.idl │ │ ├── propvarutil.h │ │ ├── prsht.h │ │ ├── psapi.h │ │ ├── pshpack1.h │ │ ├── pshpack2.h │ │ ├── pshpack4.h │ │ ├── pshpack8.h │ │ ├── pstore.idl │ │ ├── qedit.idl │ │ ├── ras.h │ │ ├── rasdlg.h │ │ ├── raserror.h │ │ ├── reason.h │ │ ├── regstr.h │ │ ├── restartmanager.h │ │ ├── richedit.h │ │ ├── richole.idl │ │ ├── rmxfguid.h │ │ ├── rmxftmpl.x │ │ ├── roapi.h │ │ ├── roparameterizediid.idl │ │ ├── row.idl │ │ ├── rowchg.idl │ │ ├── rowpos.idl │ │ ├── rowpsc.idl │ │ ├── rpc.h │ │ ├── rpcasync.h │ │ ├── rpcdce.h │ │ ├── rpcdcep.h │ │ ├── rpcndr.h │ │ ├── rpcnterr.h │ │ ├── rpcproxy.h │ │ ├── rpcsal.h │ │ ├── rstbas.idl │ │ ├── rstinf.idl │ │ ├── rstloc.idl │ │ ├── rstnot.idl │ │ ├── rtutils.h │ │ ├── sal.h │ │ ├── sapi.idl │ │ ├── sapiddk.idl │ │ ├── scarderr.h │ │ ├── schannel.h │ │ ├── schemadef.h │ │ ├── schnlsp.h │ │ ├── sddl.h │ │ ├── secext.h │ │ ├── security.h │ │ ├── sensapi.h │ │ ├── sensevts.idl │ │ ├── servprov.idl │ │ ├── sesprp.idl │ │ ├── setupapi.h │ │ ├── sfc.h │ │ ├── shdeprecated.idl │ │ ├── shdispid.h │ │ ├── shellapi.h │ │ ├── shellscalingapi.h │ │ ├── shimgdata.idl │ │ ├── shldisp.idl │ │ ├── shlguid.h │ │ ├── shlobj.h │ │ ├── shlwapi.h │ │ ├── shobjidl.idl │ │ ├── shtypes.idl │ │ ├── sipbase.h │ │ ├── slerror.h │ │ ├── slpublic.h │ │ ├── snmp.h │ │ ├── softpub.h │ │ ├── sperror.h │ │ ├── sql.h │ │ ├── sqlext.h │ │ ├── sqltypes.h │ │ ├── sqlucode.h │ │ ├── srcrst.idl │ │ ├── srrestoreptapi.h │ │ ├── sspi.h │ │ ├── stamp-h │ │ ├── stamp-h.in │ │ ├── stdole2.idl │ │ ├── stgprop.h │ │ ├── sti.h │ │ ├── storage.h │ │ ├── strmif.idl │ │ ├── strsafe.h │ │ ├── structuredquerycondition.idl │ │ ├── svrapi.h │ │ ├── t2embapi.h │ │ ├── tapi.h │ │ ├── taskschd.idl │ │ ├── tchar.h │ │ ├── tcpestats.h │ │ ├── tcpmib.h │ │ ├── textserv.h │ │ ├── textstor.idl │ │ ├── tlhelp32.h │ │ ├── tlogstg.idl │ │ ├── tmschema.h │ │ ├── tom.idl │ │ ├── traffic.h │ │ ├── transact.idl │ │ ├── twain.h │ │ ├── txcoord.idl │ │ ├── txdtc.idl │ │ ├── udpmib.h │ │ ├── uianimation.idl │ │ ├── uiautomation.h │ │ ├── uiautomationclient.idl │ │ ├── uiautomationcore.idl │ │ ├── uiautomationcoreapi.h │ │ ├── uiribbon.idl │ │ ├── unknwn.idl │ │ ├── urlhist.idl │ │ ├── urlmon.idl │ │ ├── userenv.h │ │ ├── usp10.h │ │ ├── uuids.h │ │ ├── uxtheme.h │ │ ├── vdmdbg.h │ │ ├── ver.h │ │ ├── verrsrc.h │ │ ├── vfw.h │ │ ├── vfwmsgs.h │ │ ├── virtdisk.h │ │ ├── vmr9.idl │ │ ├── vmrender.idl │ │ ├── vss.idl │ │ ├── vsstyle.h │ │ ├── vssym32.h │ │ ├── vswriter.h │ │ ├── wbemcli.idl │ │ ├── wbemdisp.idl │ │ ├── wbemprov.idl │ │ ├── wct.h │ │ ├── webservices.h │ │ ├── werapi.h │ │ ├── wfext.h │ │ ├── wia.h │ │ ├── wia_lh.idl │ │ ├── wia_xp.idl │ │ ├── wiadef.h │ │ ├── wimgapi.h │ │ ├── winbase.h │ │ ├── wincodec.idl │ │ ├── wincodecsdk.idl │ │ ├── wincon.h │ │ ├── wincred.h │ │ ├── wincrypt.h │ │ ├── windef.h │ │ ├── windns.h │ │ ├── windows.foundation.idl │ │ ├── windows.h │ │ ├── windowsx.h │ │ ├── winerror.h │ │ ├── winevt.h │ │ ├── wingdi.h │ │ ├── winhttp.h │ │ ├── wininet.h │ │ ├── winineti.h │ │ ├── winioctl.h │ │ ├── winldap.h │ │ ├── winnetwk.h │ │ ├── winnls.h │ │ ├── winnls32.h │ │ ├── winnt.h │ │ ├── winnt.rh │ │ ├── winperf.h │ │ ├── winreg.h │ │ ├── winresrc.h │ │ ├── winsafer.h │ │ ├── winscard.h │ │ ├── winsmcrd.h │ │ ├── winsnmp.h │ │ ├── winsock.h │ │ ├── winsock2.h │ │ ├── winspool.h │ │ ├── winstring.h │ │ ├── winsvc.h │ │ ├── winsxs.idl │ │ ├── wintab.h │ │ ├── wintabx.h │ │ ├── winternl.h │ │ ├── wintrust.h │ │ ├── winuser.h │ │ ├── winuser.rh │ │ ├── winver.h │ │ ├── wlanapi.h │ │ ├── wmcodecdsp.idl │ │ ├── wmdrmsdk.idl │ │ ├── wmistr.h │ │ ├── wmium.h │ │ ├── wmiutils.idl │ │ ├── wmp.idl │ │ ├── wmpids.h │ │ ├── wmsbuffer.idl │ │ ├── wmsdk.h │ │ ├── wmsdkidl.idl │ │ ├── wnaspi32.h │ │ ├── wownt32.h │ │ ├── wpcapi.idl │ │ ├── ws2def.h │ │ ├── ws2ipdef.h │ │ ├── ws2spi.h │ │ ├── ws2tcpip.h │ │ ├── wsdapi.h │ │ ├── wsdbase.idl │ │ ├── wsddisco.idl │ │ ├── wsdtypes.h │ │ ├── wsdutil.h │ │ ├── wsdxml.idl │ │ ├── wsdxmldom.h │ │ ├── wshisotp.h │ │ ├── wsipx.h │ │ ├── wsnwlink.h │ │ ├── wtsapi32.h │ │ ├── wtypes.idl │ │ ├── wuapi.idl │ │ ├── x3daudio.h │ │ ├── xapo.idl │ │ ├── xapofx.h │ │ ├── xaudio2.idl │ │ ├── xaudio2fx.idl │ │ ├── xcmc.h │ │ ├── xinput.h │ │ ├── xmldom.h │ │ ├── xmldom.idl │ │ ├── xmldomdid.h │ │ ├── xmldso.idl │ │ ├── xmldsodid.h │ │ ├── xmllite.idl │ │ └── zmouse.h │ ├── wine/ │ │ ├── config.h │ │ ├── debug.h │ │ ├── exception.h │ │ ├── heap.h │ │ ├── library.h │ │ ├── list.h │ │ ├── mmsystem16.h │ │ ├── port.h │ │ ├── server.h │ │ ├── server_protocol.h │ │ ├── unicode.h │ │ ├── winaspi.h │ │ ├── winbase16.h │ │ ├── windef16.h │ │ ├── wine_common_ver.rc │ │ ├── wingdi16.h │ │ ├── winnet16.h │ │ ├── winuser16.h │ │ └── wpp.h │ ├── wine.def │ ├── wine.vcxproj │ ├── wine.vcxproj.filters │ └── winuser.rh ├── winecrt0/ │ ├── CMakeLists.txt │ ├── crt0_private.h │ ├── dll_entry.c │ ├── exception.c │ ├── exe16_entry.c │ ├── init.c │ ├── stub.c │ ├── winecrt0.vcxproj │ └── winecrt0.vcxproj.filters ├── wing/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── wing.c │ ├── wing.def │ ├── wing.dll16.spec │ └── wing.vcxproj ├── winhlp32/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── REOLEStorage1 │ ├── callback.c │ ├── hlpfile.c │ ├── hlpfile.h │ ├── macro.c │ ├── macro.h │ ├── macro.lex.l │ ├── string.c │ ├── tom.h │ ├── winhelp.c │ ├── winhelp.h │ ├── winhelp_res.h │ ├── winhlp32.rc │ ├── winhlp32.vcxproj │ └── winhlp32.vcxproj.filters ├── winnls/ │ ├── CMakeLists.txt │ ├── winnls.c │ ├── winnls.def │ ├── winnls.dll16.spec │ ├── winnls.vcxproj │ └── winnls.vcxproj.filters ├── winoldap/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── winoldap.c │ ├── winoldap.def │ ├── winoldap.mod16.spec │ └── winoldap.vcxproj ├── winsock/ │ ├── CMakeLists.txt │ ├── Makefile.in │ ├── socket.c │ ├── winsock.def │ ├── winsock.dll16.spec │ ├── winsock.vcxproj │ └── winsock16.h ├── winspool/ │ ├── CMakeLists.txt │ ├── winspool.c │ ├── winspool.def │ ├── winspool.drv16.spec │ └── winspool.vcxproj ├── wow32/ │ ├── CMakeLists.txt │ ├── wow32.def │ ├── wow32.spec │ ├── wow32.vcxproj │ ├── wow32.vcxproj.filters │ ├── wow_main.c │ └── wownt32.h └── wpp/ ├── CMakeLists.txt ├── ppl.l ├── ppy.y ├── preproc.c ├── wpp.c ├── wpp.vcxproj └── wpp_private.h ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ ############################################################################### # Set default behavior to automatically normalize line endings. ############################################################################### * text=auto ############################################################################### # Set default behavior for command prompt diff. # # This is need for earlier builds of msysgit that does not have it on by # default for csharp files. # Note: This is only used by command line ############################################################################### #*.cs diff=csharp ############################################################################### # Set the merge driver for project and solution files # # Merging from the command prompt will add diff markers to the files if there # are conflicts (Merging from VS is not affected by the settings below, in VS # the diff markers are never inserted). Diff markers may cause the following # file extensions to fail to load in VS. An alternative would be to treat # these files as binary and thus will always conflict and require user # intervention with every merge. To do so, just uncomment the entries below ############################################################################### #*.sln merge=binary #*.csproj merge=binary #*.vbproj merge=binary #*.vcxproj merge=binary #*.vcproj merge=binary #*.dbproj merge=binary #*.fsproj merge=binary #*.lsproj merge=binary #*.wixproj merge=binary #*.modelproj merge=binary #*.sqlproj merge=binary #*.wwaproj merge=binary ############################################################################### # behavior for image files # # image files are treated as binary by default. ############################################################################### #*.jpg binary #*.png binary #*.gif binary ############################################################################### # diff behavior for common document formats # # Convert binary document formats to text before diffing them. This feature # is only available from the command line. Turn it on by uncommenting the # entries below. ############################################################################### #*.doc diff=astextplain #*.DOC diff=astextplain #*.docx diff=astextplain #*.DOCX diff=astextplain #*.dot diff=astextplain #*.DOT diff=astextplain #*.pdf diff=astextplain #*.PDF diff=astextplain #*.rtf diff=astextplain #*.RTF diff=astextplain *.reg text eol=crlf *.ini text eol=crlf README.md text eol=crlf ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- Try the latest version first. Go [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. **Describe the bug** A clear and concise description of what the bug is. **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Environment (please complete the following information):** - OS: [e.g. Windows 10 1903] - Version [e.g. version: 1523] **Additional context** Add any other context about the problem here. It is very helpful to provide a trace file if possible. Please note that this file contains detailed information about the program. **Procedure** 1. Run the command prompt. 2. Set the environment variable: ```cmd set WINEDEBUG=+all,-snoop,-ldt,-fixup,-module,-global,-local,-disasm,-syslevel,-thunk ``` 3. ```cmd *old-executable-file* 2> trace.txt ``` 4. Upload trace.txt here. ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.sln.docstates # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ w[Dd]ebug/ x64/ build/ bld/ [Bb]in/ [Oo]bj/ # Roslyn cache directories *.ide/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* #NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opensdf *.sdf *.cachefile # Visual Studio profiler *.psess *.vsp *.vspx # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding addin-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch _NCrunch_* .*crunch*.local.xml # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml ## TODO: Comment the next line if you want to checkin your ## web deploy settings but do note that will include unencrypted ## passwords #*.pubxml # NuGet Packages Directory packages/* ## TODO: If the tool you use requires repositories.config ## uncomment the next line #!packages/repositories.config # Enable "build/" folder in the NuGet Packages folder since # NuGet packages use it for MSBuild targets. # This line needs to be after the ignore of the build folder # (and the packages folder if the line above has been uncommented) !packages/build/ # Windows Azure Build Output csx/ *.build.csdef # Windows Store app package directory AppPackages/ # Others sql/ *.Cache ClientBin/ [Ss]tyle[Cc]op.* ~$* *~ *.dbmdl *.dbproj.schemaview *.pfx *.publishsettings node_modules/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ # LightSwitch generated files GeneratedArtifacts/ _Pvt_Extensions/ ModelManifest.xml *.db *.opendb *.tlog /.vs *16.asm *.i ================================================ FILE: BuildToolProperty.props ================================================ $(AsmPath) $(AsmPath) <_PropertySheetDisplayName>BuildToolProperty $(BisonPath) $(FlexPath) ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.10.2) #-Dinline=__inline project(winevdm) set(ASM_TOOL_DIR ) # prevent wine error if (NOT(MSVC)) string(APPEND CMAKE_CXX_FLAGS " -Wno-narrowing ") else() add_definitions(-DUSE_COMPILER_EXCEPTIONS -Dinline=__inline) endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) macro(def_file_build32 file) get_filename_component(name_we ${file} NAME_WE) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def DEPENDS ${file}.spec convspec COMMAND convspec ${CMAKE_CURRENT_LIST_DIR}/${file}.spec -DEF -32 > ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def) add_custom_target(generate_def_${name_we} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def) endmacro() macro(def_file_build file) get_filename_component(name_we ${file} NAME_WE) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def DEPENDS ${file}.spec convspec COMMAND convspec ${CMAKE_CURRENT_LIST_DIR}/${file}.spec -DEF > ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def) add_custom_target(generate_def_${name_we} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def) endmacro() macro(spec_build file modname) string(TOUPPER modname modname) get_filename_component(name_we ${file} NAME_WE) cmake_parse_arguments(SPEC_BUILD "" "" "ARG" ${ARGN}) add_custom_command(OUTPUT ${file}.obj ${file}.asm DEPENDS ${file}.spec convspec COMMAND convspec ${CMAKE_CURRENT_LIST_DIR}/${file}.spec ${SPEC_BUILD_ARG} ${modname} > ${file}.asm && ${ASM_TOOL_DIR}as --32 -o ${file}.obj ${file}.asm) add_custom_target(generate_asm_${name_we} DEPENDS ${file}.obj) if (MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") endif() def_file_build(${file}) add_dependencies(${name_we} generate_asm_${name_we}) add_dependencies(${name_we} generate_def_${name_we}) set_target_properties(${name_we} PROPERTIES PREFIX "") endmacro() macro(widl_build file_idl file_c file_h) get_filename_component(name_we ${file_idl} NAME_WE) add_custom_command(OUTPUT ${file_c} ${file_h} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file_idl} widl COMMAND $/widl.exe ${CMAKE_CURRENT_SOURCE_DIR}/${file_idl} -o ${file_c} && $/widl.exe ${CMAKE_CURRENT_SOURCE_DIR}/${file_idl} -o ${file_h} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) add_custom_target(generate_ifs_${name_we} DEPENDS ${file_c} ${file_h}) endmacro() INCLUDE(CheckIncludeFiles) CHECK_INCLUDE_FILES(WinHvPlatform.h HAVE_WINHVPLATFORM_H) include_directories(BEFORE wow32) find_package(BISON) find_package(FLEX) add_subdirectory(wine) add_subdirectory(convspec) add_subdirectory(winecrt0) add_subdirectory(wow32) add_subdirectory(krnl386) add_subdirectory(user) add_subdirectory(gdi) add_subdirectory(win87em) add_subdirectory(shell) add_subdirectory(vm86) add_subdirectory(avifile) add_subdirectory(comm) add_subdirectory(commctrl) add_subdirectory(commdlg) add_subdirectory(compobj) add_subdirectory(ctl3d) add_subdirectory(ctl3dv2) add_subdirectory(ddeml) add_subdirectory(dispdib) add_subdirectory(display) add_subdirectory(haxmvm) add_subdirectory(keyboard) add_subdirectory(lzexpand) add_subdirectory(mmsystem) add_subdirectory(mouse) add_subdirectory(msacm) add_subdirectory(msvideo) add_subdirectory(nddeapi) add_subdirectory(ole2) add_subdirectory(ole2conv) add_subdirectory(ole2disp) add_subdirectory(ole2nls) add_subdirectory(ole2prox) add_subdirectory(ole2thk) add_subdirectory(olecli) add_subdirectory(olesvr) add_subdirectory(regedit) add_subdirectory(rmpatch) add_subdirectory(sound) add_subdirectory(storage) add_subdirectory(system) add_subdirectory(timer) add_subdirectory(toolhelp) add_subdirectory(typelib) add_subdirectory(ver) add_subdirectory(widl) add_subdirectory(wifeman) add_subdirectory(wing) add_subdirectory(winhlp32) add_subdirectory(winnls) add_subdirectory(winoldap) add_subdirectory(winsock) add_subdirectory(winspool) add_subdirectory(wpp) add_subdirectory(otvdm) add_subdirectory(gvm) add_subdirectory(ntvdm) if (HAVE_WINHVPLATFORM_H) add_subdirectory(whpxvm) endif() ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ================================================ FILE: PropertySheet.props ================================================ C:\msys32\usr\bin\ <_PropertySheetDisplayName>MacroPropertySheet $(SolutionDir)wow32;$(IncludePath) $(AsmPath) ================================================ FILE: README.md ================================================ # winevdm on 64-bit Windows ![screenshot](screenshot.PNG) [Download stable version](https://github.com/otya128/winevdm/releases) [Download latest version (unstable)](https://ci.appveyor.com/project/otya128/winevdm/) 16-bit Windows (Windows 1.x, 2.x, 3.0, 3.1, etc.) on 64-bit Windows An altered version of winevdm (a 16-bit Windows emulator), ported to 64-bit Windows. # How to run + 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) + Drag and drop Win16 executable file to otvdm.exe or execute otvdmw.exe. # How to install + Download or compile + Run "install" shortcut or right-click on install.inf and select "Install" + You can execute Win16 binaries directly! If the registry is initialized by Windows Update, perform the above procedure again. You can uninstall it by running uninstall.reg. # Configuration See [otvdm.ini](otvdm.ini). # How to compile(Visual Studio) + Install Visual Studio 2017 + Edit PropertySheet.props + Compile # How to compile(cmake) ```sh git clone https://github.com/otya128/winevdm.git cd winevdm mkdir build cd build cmake .. make ``` # How does it work? This program contains the following items + CPU Emulator + 64-bit Windows cannot modify LDT(NtSetInformationProcess(,ProcessLdtInformation,,) always returns error) + wine based Win16->Win32 conversion codes: ```c BOOL16 WINAPI DestroyWindow16( HWND16 hwnd ) { return DestroyWindow( WIN_Handle32(hwnd) ); } ``` Relay routines from 16-bit to 32-bit are autogenerated by convspec ```spec 53 pascal -ret16 DestroyWindow(word) DestroyWindow16 ``` + DOS emulation for Win16 + 16-bit <=> native HANDLE conversion + Fix compatibility problems, fix compatibility problems ## install.inf When 64-bit Windows detects a 16-bit installer, it has a mechanism to start an alternative installer which is not 16-bit. This program uses it. ## WINDOWS directory redirection Some Win16 programs try to save their settings in %WINDIR%\.ini In recent Windows, it is not allowed to save to %WINDIR%, so it redirects. # winevdm ```bat winevdm.exe [--app-name app.exe] command line winevdm.exe CALC.EXE ``` It can also run DOS executables (DOS emulator-like). You can set the DOS version with the VDMDOSVER environment variable. DOS emulation is incomplete and it is recommended to use DOSBox or [MS-DOS Player](http://takeda-toshiya.my.coocan.jp/msdos/). ================================================ FILE: READMEJP.md ================================================ # winevdm on windows(64bit) [Download](https://github.com/otya128/winevdm/releases) winevdm on windows(64bit) 16bit用Windowsのプログラムを動かすプログラム winevdmの移植版 # コンパイルに必要そうなもの + VC++ + gas # winevdm ```bat winevdm.exe [--app-name app.exe] command line winevdm.exe CALC.EXE ``` DOS実行ファイルを実行することも可能(ただしDOSエミュレータは他に存在するためそれを使った方が確実) VDMDOSVER環境変数を設定するとDOSのバージョンを指定できる # convspec convert wine spec file winebuildから必要な部分を取り出しVC++で動かせるようにし、関数名の扱いなどを変え出力されたassemblyをVC++で扱えるようにした ```bat convspec .specfile modulename > asm convspec .specfile -DEF > def convspec commdlg.dll16.spec COMMDLG > commdlg.dll16.asm convspec commdlg.dll16.spec -DEF > commdlg.def as --32 -o commdlg.dll16.obj commdlg.dll16.asm ``` # gdi GDI.EXE # krnl386 KRNL386.EXE # user USER.EXE # vm86 CPU emulator # wine libwine # wow32 wow32.dll ================================================ FILE: appveyor.yml ================================================ version: dev{build} image: Visual Studio 2017 configuration: Release environment: matrix: - THIS_BUILD_IS_RECOMMENDED__VCXPROJ_BUILD: 1 - THIS_BUILD_IS_NOT_RECOMMENDED__GCC_CMAKE_BUILD: 1 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 build: parallel: true verbosity: quiet for: - matrix: only: - THIS_BUILD_IS_NOT_RECOMMENDED__GCC_CMAKE_BUILD: 1 build_script: ps: | mkdir build cd build $env:MSYSTEM = "MINGW32" $env:MSYSTEM_CARCH = "i686" $env:MSYSTEM_CHOST = "i686-w64-mingw32" $env:MSYSTEM_PREFIX = "C:/msys64/mingw32" $env:Path = "C:\msys64\mingw32\bin;C:\msys64\usr\local\bin;C:\msys64\usr\bin;" + $env:Path cmake -G"MSYS Makefiles" .. -DCMAKE_CXX_FLAGS=-w -DCMAKE_C_FLAGS=-w if (0 -ne $LastExitCode) { throw "Failed to execute cmake" } make -j 2 if (0 -ne $LastExitCode) { throw "Failed to execute make" } mkdir otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER} ..\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} copy C:\msys64\mingw32\bin\libgcc_s_dw2-1.dll otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\ copy C:\msys64\mingw32\bin\libstdc++-6.dll otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\ 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}\ 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} - matrix: only: - THIS_BUILD_IS_RECOMMENDED__VCXPROJ_BUILD: 1 before_build: ps: | C:\msys64\usr\bin\as --version echo " C:\msys64\usr\bin\ `$(UniversalCRTSdkDir)Lib\10.0.17134.0\um\x86\ <_PropertySheetDisplayName>MacroPropertySheet `$(SolutionDir)wow32;`$(IncludePath) MultiThreadedDLL __CI_VERSION=${env:APPVEYOR_BUILD_NUMBER};%(PreprocessorDefinitions) TurnOffAllWarnings `$(AsmPath) `$(NtDllLibPath) " > C:\projects\winevdm\PropertySheet.props before_package: ps: | .\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" 7z a otvdm-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}.zip otvdm-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER} artifacts: - path: '*.zip' name: otvdm-Debug ================================================ FILE: avifile/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(avifile SHARED ${SOURCE} ${CMAKE_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/avifile.def avifile.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(avifile.dll16 avifile) target_link_libraries(avifile libwine winecrt0 krnl386 avifil32.lib) set_target_properties(avifile PROPERTIES SUFFIX ".dll16") ================================================ FILE: avifile/Makefile.in ================================================ MODULE = avifile.dll16 IMPORTS = avifil32 EXTRADLLFLAGS = -m16 -Wb,--main-module,avifil32.dll ================================================ FILE: avifile/avifile.def ================================================ ; File generated automatically from avifile\avifile.dll16.spec; do not edit! LIBRARY avifile.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: avifile/avifile.dll16.spec ================================================ # I'm just using "long" instead of "ptr" for the interface pointers, # because they are 32-bit pointers, not converted to 16-bit format, # but the app doesn't really need to know, it should never need to # dereference the interface pointer itself (if we're lucky)... #1 stub WEP 2 stub DLLGETCLASSOBJECT 3 stub DLLCANUNLOADNOW 4 stub ___EXPORTEDSTUB 10 variable _IID_IAVIStream(0x00020021 0x00000000 0x000000c0 0x46000000) 11 variable _IID_IAVIFile(0x00020020 0x00000000 0x000000c0 0x46000000) 12 variable _IID_IAVIEditStream(0x00020024 0x00000000 0x000000c0 0x46000000) 13 variable _IID_IGetFrame(0x00020023 0x00000000 0x000000c0 0x46000000) 14 variable _CLSID_AVISimpleUnMarshal(0x00020009 0x00000000 0x000000c0 0x46000000) 100 pascal AVIFileInit() AVIFileInit 101 pascal AVIFileExit() AVIFileExit 102 pascal AVIFileOpen(ptr str word ptr) AVIFileOpenA 103 pascal AVIStreamOpenFromFile(ptr str long long word ptr) AVIStreamOpenFromFileA 104 pascal AVIStreamCreate(ptr long long ptr) AVIStreamCreate 105 stub AVIMAKECOMPRESSEDSTREAM 106 stub AVIMAKEFILEFROMSTREAMS 107 stub AVIMAKESTREAMFROMCLIPBOARD 110 pascal AVIStreamGetFrame(long long) AVIStreamGetFrame16 111 pascal AVIStreamGetFrameClose(long) AVIStreamGetFrameClose16 112 pascal AVIStreamGetFrameOpen(long ptr) AVIStreamGetFrameOpen16 120 stub _AVISAVE 121 stub AVISAVEV 122 stub AVISAVEOPTIONS 123 pascal AVIBuildFilter(str long word) AVIBuildFilterA 124 pascal AVISaveOptionsFree(word ptr) AVISaveOptionsFree 130 pascal AVIStreamStart(long) AVIStreamStart 131 pascal AVIStreamLength(long) AVIStreamLength 132 pascal AVIStreamTimeToSample(long long) AVIStreamTimeToSample 133 pascal AVIStreamSampleToTime(long long) AVIStreamSampleToTime 140 pascal AVIFileAddRef(long) AVIFileAddRef 141 pascal AVIFileRelease(long) AVIFileRelease 142 pascal AVIFileInfo(long ptr long) AVIFileInfoA 143 pascal AVIFileGetStream(long ptr long long) AVIFileGetStream 144 pascal AVIFileCreateStream(long ptr ptr) AVIFileCreateStream16 146 pascal AVIFileWriteData(long long ptr long) AVIFileWriteData 147 pascal AVIFileReadData(long long ptr ptr) AVIFileReadData 148 pascal AVIFileEndRecord(long) AVIFileEndRecord 160 pascal AVIStreamAddRef(long) AVIStreamAddRef 161 pascal AVIStreamRelease(long) AVIStreamRelease 162 pascal AVIStreamInfo(long ptr long) AVIStreamInfo16 163 pascal AVIStreamFindSample(long long long) AVIStreamFindSample 164 pascal AVIStreamReadFormat(long long ptr ptr) AVIStreamReadFormat 165 pascal AVIStreamReadData(long long ptr ptr) AVIStreamReadData 166 pascal AVIStreamWriteData(long long ptr long) AVIStreamWriteData 167 pascal AVIStreamRead(long long long ptr long ptr ptr) AVIStreamRead 168 pascal AVIStreamWrite(long long long ptr long long ptr ptr) AVIStreamWrite 169 pascal AVIStreamSetFormat(long long ptr long) AVIStreamSetFormat 180 stub EDITSTREAMCOPY 181 stub EDITSTREAMCUT 182 stub EDITSTREAMPASTE 184 stub CREATEEDITABLESTREAM 185 stub AVIPUTFILEONCLIPBOARD 187 stub AVIGETFROMCLIPBOARD 188 stub AVICLEARCLIPBOARD 190 stub EDITSTREAMCLONE 191 stub EDITSTREAMSETNAME 192 stub EDITSTREAMSETINFO 200 stub AVISTREAMBEGINSTREAMING 201 stub AVISTREAMENDSTREAMING ================================================ FILE: avifile/avifile.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 avifile {3825B17A-681F-48CF-B9AD-5337B1F521C8} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; avifil32.lib true avifile.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false avifile.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; avifil32.lib Document "$(OutDir)convspec" "%(Filename).spec" AVIFILE > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: avifile/main.c ================================================ /* * Wrapper for 16 bit avifile functions * * Copyright 2016 Michael Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "wine/winbase16.h" #include "winternl.h" #include "wingdi.h" #include "vfw.h" typedef struct _AVISTREAMINFO16 { DWORD fccType; DWORD fccHandler; DWORD dwFlags; DWORD dwCaps; WORD wPriority; WORD wLanguage; DWORD dwScale; DWORD dwRate; DWORD dwStart; DWORD dwLength; DWORD dwInitialFrames; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; RECT16 rcFrame; DWORD dwEditCount; DWORD dwFormatChangeCount; CHAR szName[64]; } AVISTREAMINFO16, *LPAVISTREAMINFO16, *PAVISTREAMINFO16; struct frame_wrapper16 { PGETFRAME pg; PVOID ptr; DWORD size; WORD sel; WORD count; }; static void free_segptr_frame(struct frame_wrapper16 *wrapper) { int i; if (!wrapper->sel) return; for (i = 0; i < wrapper->count; i++) FreeSelector16(wrapper->sel + (i << __AHSHIFT)); wrapper->sel = 0; } static SEGPTR alloc_segptr_frame(struct frame_wrapper16 *wrapper, void *ptr, DWORD size) { int i; if (wrapper->sel) { if (wrapper->ptr == ptr && wrapper->size == size) return MAKESEGPTR(wrapper->sel, 0); free_segptr_frame(wrapper); } wrapper->ptr = ptr; wrapper->size = size; wrapper->count = (size + 0xffff) / 0x10000; wrapper->sel = AllocSelectorArray16(wrapper->count); if (!wrapper->sel) return 0; for (i = 0; i < wrapper->count; i++) { SetSelectorBase(wrapper->sel + (i << __AHSHIFT), (DWORD)ptr + i * 0x10000); SetSelectorLimit16(wrapper->sel + (i << __AHSHIFT), size - 1); size -= 0x10000; } return MAKESEGPTR(wrapper->sel, 0); } /*********************************************************************** * AVIStreamGetFrameOpen (AVIFILE.112) */ PGETFRAME WINAPI AVIStreamGetFrameOpen16(PAVISTREAM pstream, LPBITMAPINFOHEADER lpbiWanted) { struct frame_wrapper16 *wrapper; PGETFRAME pg; pg = AVIStreamGetFrameOpen(pstream, lpbiWanted); if (!pg) return NULL; wrapper = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wrapper)); if (!wrapper) { AVIStreamGetFrameClose(pg); return NULL; } wrapper->pg = pg; return (PGETFRAME)wrapper; } /*********************************************************************** * AVIStreamGetFrame (AVIFILE.110) */ SEGPTR WINAPI AVIStreamGetFrame16(PGETFRAME pg, LONG pos) { struct frame_wrapper16 *wrapper = (void *)pg; BITMAPINFOHEADER *bih; if (!pg) return 0; bih = AVIStreamGetFrame(wrapper->pg, pos); if (bih) { DWORD size = bih->biSize + bih->biSizeImage; return alloc_segptr_frame(wrapper, bih, size); } return 0; } /*********************************************************************** * AVIStreamGetFrameClose (AVIFILE.111) */ HRESULT WINAPI AVIStreamGetFrameClose16(PGETFRAME pg) { struct frame_wrapper16 *wrapper = (void *)pg; HRESULT hr; if (!pg) return S_OK; hr = AVIStreamGetFrameClose(wrapper->pg); free_segptr_frame(wrapper); HeapFree(GetProcessHeap(), 0, wrapper); return hr; } /*********************************************************************** * AVIFileCreateStream (AVIFILE.144) */ HRESULT WINAPI AVIFileCreateStream16(PAVIFILE pfile, PAVISTREAM *ppavi, LPAVISTREAMINFO16 asi16) { AVISTREAMINFOA asi; if (!asi16) return AVIFileCreateStreamA(pfile, ppavi, NULL); asi.fccType = asi16->fccType; asi.fccHandler = asi16->fccHandler; asi.dwFlags = asi16->dwFlags; asi.dwCaps = asi16->dwCaps; asi.wPriority = asi16->wPriority; asi.wLanguage = asi16->wLanguage; asi.dwScale = asi16->dwScale; asi.dwRate = asi16->dwRate; asi.dwStart = asi16->dwStart; asi.dwLength = asi16->dwLength; asi.dwInitialFrames = asi16->dwInitialFrames; asi.dwSuggestedBufferSize = asi16->dwSuggestedBufferSize; asi.dwQuality = asi16->dwQuality; asi.dwSampleSize = asi16->dwSampleSize; asi.rcFrame.left = asi16->rcFrame.left; asi.rcFrame.top = asi16->rcFrame.top; asi.rcFrame.right = asi16->rcFrame.right; asi.rcFrame.bottom = asi16->rcFrame.bottom; asi.dwEditCount = asi16->dwEditCount; asi.dwFormatChangeCount = asi16->dwFormatChangeCount; strcpy( asi.szName, asi16->szName ); return AVIFileCreateStreamA(pfile, ppavi, &asi); } /*********************************************************************** * AVIStreamInfo (AVIFILE.162) */ HRESULT WINAPI AVIStreamInfo16(PAVISTREAM pstream, LPAVISTREAMINFO16 asi16, LONG size) { AVISTREAMINFOA asi; HRESULT hr; if (!asi16) return AVIStreamInfoA(pstream, NULL, size); if (size < sizeof(AVISTREAMINFO16)) return AVIERR_BADSIZE; hr = AVIStreamInfoA(pstream, &asi, sizeof(asi)); if (SUCCEEDED(hr)) { asi16->fccType = asi.fccType; asi16->fccHandler = asi.fccHandler; asi16->dwFlags = asi.dwFlags; asi16->dwCaps = asi.dwCaps; asi16->wPriority = asi.wPriority; asi16->wLanguage = asi.wLanguage; asi16->dwScale = asi.dwScale; asi16->dwRate = asi.dwRate; asi16->dwStart = asi.dwStart; asi16->dwLength = asi.dwLength; asi16->dwInitialFrames = asi.dwInitialFrames; asi16->dwSuggestedBufferSize = asi.dwSuggestedBufferSize; asi16->dwQuality = asi.dwQuality; asi16->dwSampleSize = asi.dwSampleSize; asi16->rcFrame.left = asi.rcFrame.left; asi16->rcFrame.top = asi.rcFrame.top; asi16->rcFrame.right = asi.rcFrame.right; asi16->rcFrame.bottom = asi.rcFrame.bottom; asi16->dwEditCount = asi.dwEditCount; asi16->dwFormatChangeCount = asi.dwFormatChangeCount; strcpy( asi16->szName, asi.szName ); } return hr; } ================================================ FILE: comm/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(comm SHARED ${SOURCE} ${PROJECT_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/comm.def comm.drv16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(comm.drv16 comm) target_link_libraries(comm libwine winecrt0 krnl386) set_target_properties(comm PROPERTIES SUFFIX ".drv16") ================================================ FILE: comm/Makefile.in ================================================ MODULE = comm.drv16 EXTRADLLFLAGS = -m16 ================================================ FILE: comm/comm.def ================================================ ; File generated automatically from comm\comm.drv16.spec; do not edit! LIBRARY comm.drv16 EXPORTS _wine_spec_dos_header; @1 DATA PRIVATE ================================================ FILE: comm/comm.drv16.spec ================================================ 1 stub INICOM 2 stub SETCOM 3 stub SETQUE 4 stub RECCOM 5 stub SNDCOM 6 stub CTX 7 stub TRMCOM 8 stub STACOM 9 stub CEXTFCN 10 stub CFLUSH 11 stub CEVT 12 stub CEVTGET 13 stub CSETBRK 14 stub CCLRBRK 15 stub GETDCB #16 stub WEP 17 stub SUSPENDOPENCOMMPORTS # win3.1 18 stub REACTIVATEOPENCOMMPORTS # win3.1 19 stub COMMWRITESTRING 20 stub READCOMMSTRING 100 stub ENABLENOTIFICATION 101 stub ordinal_only__win31 ================================================ FILE: comm/comm.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj comm {3D889B37-09C8-4030-B815-830566CD57A3} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .drv16 false Release .drv16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; true comm.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false comm.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; Document "$(OutDir)convspec" "%(Filename).spec" COMM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" COMM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: commctrl/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(commctrl SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/commctrl.def commctrl.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(commctrl.dll16 commctrl) target_link_libraries(commctrl libwine winecrt0 krnl386 user comctl32.lib) set_target_properties(commctrl PROPERTIES SUFFIX ".dll16") ================================================ FILE: commctrl/commctrl.c ================================================ #include #include #include "wine/windef16.h" #include "wine/winbase16.h" #include "wine/winuser16.h" #include "wine/debug.h" #include WINE_DEFAULT_DEBUG_CHANNEL(commctrl); /* FIXME: CreateWindow("ToolbarWindow") fail */ #include typedef struct { INT16 iBitmap; INT16 idCommand; BYTE fsState; BYTE fsStyle; INT16 idsHelp; /* ? */ } TBBUTTON16, NEAR* PTBBUTTON16, *LPTBBUTTON16; typedef struct { SEGPTR ini_section; SEGPTR ini_file; } TBSAVEPARAMS16, *LPTBSAVEPARAMS16; #include #define TOOLBARCLASSNAME16 "ToolbarWindow" #define STATUSCLASSNAME16 "msctls_statusbar" HINSTANCE16 hInstance16; WNDCLASSEXA toolbar_window_class = { sizeof(WNDCLASSEXA) }; WNDCLASSEXA status_window_class = { sizeof(WNDCLASSEXA) }; LRESULT WINAPI ToolbarWindowProc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); LRESULT WINAPI StatusWindowProc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); void WINAPI InitCommonControls16(void) { static BOOL init; if (init) return; init = TRUE; InitCommonControls(); if (GetClassInfoExA(NULL, TOOLBARCLASSNAMEA, &toolbar_window_class)) { WNDCLASSEXA cls16 = toolbar_window_class; cls16.hInstance = hInstance16 = LoadLibrary16("COMMCTRL"); cls16.lpszClassName = TOOLBARCLASSNAME16; cls16.lpfnWndProc = ToolbarWindowProc16; if (!RegisterClassExA(&cls16)) { ERR("\n"); } } if (GetClassInfoExA(NULL, STATUSCLASSNAMEA, &status_window_class)) { WNDCLASSEXA cls16 = status_window_class; cls16.hInstance = hInstance16; cls16.lpszClassName = STATUSCLASSNAME16; cls16.lpfnWndProc = StatusWindowProc16; if (!RegisterClassExA(&cls16)) { ERR("\n"); } } } LRESULT WINAPI StatusWindowProc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case SB_GETTEXTA: case SB_SETTEXTA: { LPCSTR str = (LPCSTR)MapSL(lParam); if (!HIWORD(str)) { str = (LPCSTR)lParam; } return CallWindowProcA(status_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)str); } case SB_GETPARTS: case SB_SETPARTS: { LPINT16 ary = (LPINT16)MapSL(lParam); LRESULT result; INT ary32[256]; if (wParam > 256) return FALSE; if (!HIWORD(ary)) { break; } for (int i = 0; i < wParam; i++) { ary32[i] = ary[i]; } result = CallWindowProcA(status_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&ary32); for (int i = 0; i < wParam; i++) { ary[i] = ary32[i]; } return result; } case SB_GETBORDERS: { INT borders32[3]; INT16 *borders = MapSL(lParam); LRESULT result; int i; if (!HIWORD(borders)) break; result = CallWindowProcA(status_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&borders32); for (i = 0; i < 3; i++) borders[i] = borders32[i]; return result; } } return CallWindowProcA(status_window_class.lpfnWndProc, hwnd, msg, wParam, lParam); } void TBBUTTON16_32(LPTBBUTTON btn32, LPTBBUTTON16 lpButtons) { btn32->iBitmap = lpButtons->iBitmap; btn32->idCommand = lpButtons->idCommand; btn32->fsState = lpButtons->fsState; btn32->fsStyle = lpButtons->fsStyle; btn32->dwData = lpButtons->idsHelp; btn32->iString = 0; } void TBBUTTON32_16(LPTBBUTTON btn32, LPTBBUTTON16 lpButtons) { lpButtons->iBitmap = btn32->iBitmap; lpButtons->idCommand = btn32->idCommand; lpButtons->fsState = btn32->fsState; lpButtons->fsStyle = btn32->fsStyle; lpButtons->idsHelp = btn32->dwData; } LRESULT WINAPI ToolbarWindowProc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LRESULT result; switch (msg) { case TB_BUTTONSTRUCTSIZE: { SetPropW(hwnd, L"TB_BUTTONSTRUCTSIZE", wParam); wParam = sizeof(TBBUTTON); break; } break; case TB_ADDBITMAP: { HINSTANCE16 hInst16 = LOWORD(lParam); WORD nID16 = HIWORD(lParam); TBADDBITMAP tb32 = { 0 }; if (!hInst16) { tb32.nID = HBITMAP_32(nID16); } else { tb32.nID = HBITMAP_32(LoadBitmap16(hInst16, (LPCSTR)nID16)); } lParam = &tb32; return CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, lParam); } case TB_ADDBUTTONSA: { LPTBBUTTON16 btn = (LPTBBUTTON16)MapSL(lParam); LPTBBUTTON btn32; SIZE_T button_struct_size; if (!HIWORD(btn)) break; button_struct_size = GetPropW(hwnd, L"TB_BUTTONSTRUCTSIZE"); btn32 = HeapAlloc(GetProcessHeap(), 0, sizeof(TBBUTTON) * wParam); for (int i = 0; i < wParam; i++) { TBBUTTON16_32(btn32 + i, (LPTBBUTTON16)((LPBYTE)btn + button_struct_size * i)); } result = CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)btn32); HeapFree(GetProcessHeap(), 0, btn32); return result; } case TB_SAVERESTOREA: { LPTBSAVEPARAMS16 sp = (LPTBSAVEPARAMS16)MapSL(lParam); TBSAVEPARAMSA sp32 = { 0 }; if (!HIWORD(sp)) break; if (!wParam) { sp32.hkr = NULL; sp32.pszSubKey = (LPCSTR)MapSL(sp->ini_section); sp32.pszValueName = (LPCSTR)MapSL(sp->ini_file); } /* ini file?? */ FIXME("TB_SAVERESTORE\n"); result = 0; /* result = CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&sp32); */ if (wParam) { sp->ini_section = MapLS(sp32.pszSubKey); sp->ini_file = MapLS(sp32.pszValueName); } return result; } case TB_INSERTBUTTONA: { TBBUTTON btn; TBBUTTON16_32(&btn, (LPTBBUTTON16)MapSL(lParam)); result = CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&btn); return result; } case TB_GETBUTTON: { TBBUTTON btn; result = CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&btn); TBBUTTON32_16(&btn, (LPTBBUTTON16)MapSL(lParam)); return result; } case TB_GETBUTTONTEXTA: return CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)MapSL(lParam)); default: break; } return CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, lParam); } /* based on wine */ HWND16 WINAPI CreateToolbarEx16(HWND16 hwnd, DWORD style /* window style */, UINT16 wID /* control id */, INT16 nBitmaps, HINSTANCE16 hBMInst, WORD wBMID /* bitmap resource id or bitmap handle(hBMInst == NULL) */, LPTBBUTTON16 lpButtons, INT16 iNumButtons, INT16 dxButton, INT16 dyButton, INT16 dxBitmap, INT16 dyBitmap, UINT16 uStructSize) { TBBUTTON buttons32 = { 0 }; HWND hwndTB; HBITMAP bitmap32 = NULL; InitCommonControls16(); hwndTB = CreateWindowExA(0, TOOLBARCLASSNAME16, NULL, style|WS_CHILD, 0,0,100,30, HWND_32(hwnd), (HMENU)(DWORD_PTR)wID, hInstance16, NULL); if(hwndTB) { SendMessageA (hwndTB, TB_BUTTONSTRUCTSIZE, uStructSize, 0); /* set bitmap and button size */ /*If CreateToolbarEx receives 0, windows sets default values*/ if (dxBitmap < 0) dxBitmap = 16; if (dyBitmap < 0) dyBitmap = 16; if (dxBitmap == 0 || dyBitmap == 0) dxBitmap = dyBitmap = 16; SendMessageA(hwndTB, TB_SETBITMAPSIZE, 0, MAKELPARAM(dxBitmap, dyBitmap)); if (dxButton < 0) dxButton = dxBitmap; if (dyButton < 0) dyButton = dyBitmap; /* TB_SETBUTTONSIZE -> TB_SETBITMAPSIZE bug introduced for Windows compatibility */ if (dxButton != 0 && dyButton != 0) SendMessageA(hwndTB, TB_SETBITMAPSIZE, 0, MAKELPARAM(dxButton, dyButton)); /* add bitmaps */ if (nBitmaps > 0 || hBMInst == HINST_COMMCTRL) { SendMessageA (hwndTB, TB_ADDBITMAP, nBitmaps, MAKELONG(hBMInst, wBMID)); } /* add buttons */ if(iNumButtons > 0) SendMessageA (hwndTB, TB_ADDBUTTONSA, iNumButtons, (LPARAM)MapLS(lpButtons)); } return HWND_16(hwndTB); } HWND16 WINAPI CreateStatusWindow16(LONG style, LPCSTR text, HWND16 hwndParent, UINT16 wid) { HWND parent = HWND_32(hwndParent); return HWND_16(CreateWindowA(STATUSCLASSNAME16, text, style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, parent, (HMENU)(DWORD_PTR)wid, 0, 0)); } LPRECT RECT16_32(LPRECT rect32, LPRECT16 lprc) { if (!lprc) return NULL; rect32->left = lprc->left; rect32->right = lprc->right; rect32->top = lprc->top; rect32->bottom = lprc->bottom; return rect32; } LPRECT16 RECT32_16(LPRECT rect32, LPRECT16 lprc) { if (!lprc) return NULL; lprc->left = rect32->left; lprc->right = rect32->right; lprc->top = rect32->top; lprc->bottom = rect32->bottom; return lprc; } void WINAPI GetEffectiveClientRect16(HWND16 hWnd, LPRECT16 lprc, const INT16 *lpInfo) { HWND hWnd32 = HWND_32(hWnd); RECT rect32; SIZE_T len = 0; LPINT info32; const INT16 *lpRun = lpInfo; do { lpRun += 2; if (*lpRun == 0) break; lpRun += 2; } while (*lpRun); len = (lpRun - lpInfo) + 1; info32 = (LPINT)HeapAlloc(GetProcessHeap(), 0, len * sizeof(INT)); for (int i = 0; i < len; i++) { info32[i] = lpInfo[i]; } GetEffectiveClientRect(hWnd32, RECT16_32(&rect32, lprc), info32); RECT32_16(&rect32, lprc); HeapFree(GetProcessHeap(), 0, info32); } static int find_sub_menu( HMENU *hmenu, HMENU16 target ) { int i, pos, count = GetMenuItemCount( *hmenu ); for (i = 0; i < count; i++) { HMENU sub = GetSubMenu( *hmenu, i ); if (!sub) continue; if (HMENU_16(sub) == target) return i; if ((pos = find_sub_menu( &sub, target )) != -1) { *hmenu = sub; return pos; } } return -1; } #include typedef struct { WORD command_id_off; WORD menu_id_off; struct { WORD popup_id; HMENU16 hPopup; } popup_ids[1]; } MENUHELP16; #include static int get_menu_off(HMENU hMainMenu, HMENU hSubMenu) { int i = 0; int count = GetMenuItemCount(hMainMenu); for (i = 0; i < count; i++) { HMENU s = GetSubMenu(hMainMenu, i); if (s == hSubMenu) { return i; } } return -1; } /* based on wine */ VOID WINAPI MenuHelp16 (UINT16 uMsg, WPARAM16 wParam, LPARAM lParam, HMENU16 hMainMenu, HINSTANCE16 hInst, HWND16 hwndStatus, MENUHELP16 *lpwIDs) { UINT uMenuID = 0; WORD wIDItem = wParam; WORD fwMenu = LOWORD(lParam); HMENU hMenu = HMENU_32(HIWORD(lParam)); if (!IsWindow (HWND_32(hwndStatus))) return; switch (uMsg) { case WM_MENUSELECT: TRACE("WM_MENUSELECT wParam=0x%lX lParam=0x%lX\n", wParam, lParam); if ((fwMenu == 0xFFFF) && (hMenu == 0)) { /* menu was closed */ TRACE("menu was closed!\n"); SendMessageA (HWND_32(hwndStatus), SB_SIMPLE, FALSE, 0); } else { /* menu item was selected */ if (fwMenu & MF_POPUP) { if (!uMenuID) { int i = 0; HMENU hMainMenu32 = HMENU_32(hMainMenu); HMENU hSubMenu = HMENU_32(wParam); int off = get_menu_off(hMainMenu32, hSubMenu); if (off != -1) { uMenuID = off + lpwIDs->menu_id_off; } else { while (TRUE) { if (lpwIDs->popup_ids[i].hPopup == 0 && lpwIDs->popup_ids[i].popup_id == 0) break; if (lpwIDs->popup_ids[i].hPopup == wIDItem) { uMenuID = lpwIDs->popup_ids[i].popup_id; break; } i++; } } } } else uMenuID = lpwIDs->command_id_off + (UINT)wIDItem; TRACE("uMenuID = %u\n", uMenuID); if (uMenuID) { CHAR szText[256]; if (!LoadString16 (hInst, uMenuID, szText, ARRAYSIZE(szText))) szText[0] = '\0'; SendMessageA (HWND_32(hwndStatus), SB_SETTEXTA, 255 | SBT_NOBORDERS, (LPARAM)szText); SendMessageA (HWND_32(hwndStatus), SB_SIMPLE, TRUE, 0); } } break; case WM_COMMAND : TRACE("WM_COMMAND wParam=0x%lX lParam=0x%lX\n", wParam, lParam); /* WM_COMMAND is not invalid since it is documented * in the windows api reference. So don't output * any FIXME for WM_COMMAND */ WARN("We don't care about the WM_COMMAND\n"); break; default: FIXME("Invalid Message 0x%x!\n", uMsg); break; } } HBITMAP16 WINAPI CreateMappedBitmap16(HINSTANCE16 hInstance, INT16 idBitmap, UINT16 wFlags, LPCOLORMAP lpColorMap, INT16 iNumMaps) { /* wine */ HGLOBAL16 hglb; HRSRC16 hRsrc; const BITMAPINFOHEADER *lpBitmap; LPBITMAPINFOHEADER lpBitmapInfo; UINT nSize, nColorTableSize, iColor; RGBQUAD *pColorTable; INT i, iMaps, nWidth, nHeight; HDC hdcScreen; HBITMAP hbm; LPCOLORMAP sysColorMap; COLORREF cRef; COLORMAP internalColorMap[4] = {{0x000000, 0}, {0x808080, 0}, {0xC0C0C0, 0}, {0xFFFFFF, 0}}; /* initialize pointer to colortable and default color table */ if (lpColorMap) { iMaps = iNumMaps; sysColorMap = lpColorMap; } else { internalColorMap[0].to = GetSysColor (COLOR_BTNTEXT); internalColorMap[1].to = GetSysColor (COLOR_BTNSHADOW); internalColorMap[2].to = GetSysColor (COLOR_BTNFACE); internalColorMap[3].to = GetSysColor (COLOR_BTNHIGHLIGHT); iMaps = 4; sysColorMap = internalColorMap; } hRsrc = FindResource16 (hInstance, (LPSTR)idBitmap, (LPSTR)RT_BITMAP); if (hRsrc == 0) return 0; hglb = LoadResource16 (hInstance, hRsrc); if (hglb == 0) return 0; lpBitmap = LockResource16 (hglb); if (lpBitmap == NULL) return 0; if (lpBitmap->biSize >= sizeof(BITMAPINFOHEADER) && lpBitmap->biClrUsed) nColorTableSize = lpBitmap->biClrUsed; else if (lpBitmap->biBitCount <= 8) nColorTableSize = (1 << lpBitmap->biBitCount); else nColorTableSize = 0; nSize = lpBitmap->biSize; if (nSize == sizeof(BITMAPINFOHEADER) && lpBitmap->biCompression == BI_BITFIELDS) nSize += 3 * sizeof(DWORD); nSize += nColorTableSize * sizeof(RGBQUAD); lpBitmapInfo = GlobalAlloc (GMEM_FIXED, nSize); if (lpBitmapInfo == NULL) return 0; RtlMoveMemory (lpBitmapInfo, lpBitmap, nSize); pColorTable = (RGBQUAD*)(((LPBYTE)lpBitmapInfo) + lpBitmapInfo->biSize); for (iColor = 0; iColor < nColorTableSize; iColor++) { for (i = 0; i < iMaps; i++) { cRef = RGB(pColorTable[iColor].rgbRed, pColorTable[iColor].rgbGreen, pColorTable[iColor].rgbBlue); if ( cRef == sysColorMap[i].from) { #if 0 if (wFlags & CBS_MASKED) { if (sysColorMap[i].to != COLOR_BTNTEXT) pColorTable[iColor] = RGB(255, 255, 255); } else #endif pColorTable[iColor].rgbBlue = GetBValue(sysColorMap[i].to); pColorTable[iColor].rgbGreen = GetGValue(sysColorMap[i].to); pColorTable[iColor].rgbRed = GetRValue(sysColorMap[i].to); break; } } } nWidth = lpBitmapInfo->biWidth; nHeight = lpBitmapInfo->biHeight; hdcScreen = GetDC (NULL); hbm = CreateCompatibleBitmap (hdcScreen, nWidth, nHeight); if (hbm) { HDC hdcDst = CreateCompatibleDC (hdcScreen); HBITMAP hbmOld = SelectObject (hdcDst, hbm); const BYTE *lpBits = (const BYTE *)lpBitmap + nSize; StretchDIBits (hdcDst, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight, lpBits, (LPBITMAPINFO)lpBitmapInfo, DIB_RGB_COLORS, SRCCOPY); SelectObject (hdcDst, hbmOld); DeleteDC (hdcDst); } ReleaseDC (NULL, hdcScreen); GlobalFree (lpBitmapInfo); FreeResource16 (hglb); return HBITMAP_16(hbm); } HWND16 WINAPI CreateToolbar16(HWND16 hwnd, DWORD style, UINT16 wID, INT16 nBitmaps, HINSTANCE16 hBMInst, UINT16 wBMID, LPTBBUTTON16 lpButtons, INT16 iNumButtons) { return CreateToolbarEx16(hwnd, style | CCS_NODIVIDER, wID, nBitmaps, hBMInst, wBMID, lpButtons, iNumButtons, 0, 0, 0, 0, sizeof(TBBUTTON16)); } BOOL16 WINAPI MakeDragList16(HWND16 hLB) { return MakeDragList(HWND_32(hLB)); } HWND16 WINAPI CreateHeaderWindow16(LONG a1, LPSTR a2, HWND16 a3, WORD a4) { FIXME("(%08x,%s,%04x,%04x)\n", a1, debugstr_a(a2), a3, a4); return 0; } ================================================ FILE: commctrl/commctrl.def ================================================ ; File generated automatically from commctrl\commctrl.dll16.spec; do not edit! LIBRARY commctrl.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: commctrl/commctrl.dll16.spec ================================================ 16 stub CREATEUPDOWNCONTROL 44 stub IMAGELIST_SETBKCOLOR 339 stub DPA_SEARCH 332 stub DPA_GETPTR 336 stub DPA_DELETEPTR 329 stub DPA_DESTROY 334 stub DPA_INSERTPTR 13 pascal -ret16 MakeDragList(word) MakeDragList16 15 stub DRAWINSERT 335 stub DPA_SETPTR 20 pascal -ret16 CreateToolbarEx(word long word word word word ptr word word word word word word) CreateToolbarEx16 328 stub DPA_CREATE 4 pascal -ret16 GetEffectiveClientRect(word ptr ptr) GetEffectiveClientRect16 45 stub IMAGELIST_GETBKCOLOR 42 stub IMAGELIST_GETIMAGECOUNT 333 stub DPA_GETPTRINDEX 40 stub IMAGELIST_CREATE 2 pascal -ret16 MenuHelp(word word long word word word ptr) MenuHelp16 49 stub IMAGELIST_DRAW 43 stub IMAGELIST_SETOVERLAYIMAGE 160 stub CREATEPROPERTYSHEETPAGE 5 stub DRAWSTATUSTEXT 338 stub DPA_SORT 8 pascal -ret16 CreateMappedBitmap(word word word ptr word) CreateMappedBitmap16 3 stub SHOWHIDEMENUCTL 161 stub DESTROYPROPERTYSHEETPAGE 41 stub IMAGELIST_DESTROY 17 pascal -ret16 InitCommonControls() InitCommonControls16 14 stub LBITEMFROMPT 6 pascal -ret16 CreateStatusWindow(long str word word) CreateStatusWindow16 159 stub PROPERTYSHEET 7 pascal -ret16 CreateToolbar(word long word word word word ptr word) CreateToolbar16 331 stub DPA_CLONE 54 stub IMAGELIST_REPLACEICON 337 stub DPA_DELETEALLPTRS 330 stub DPA_GROW 46 stub IMAGELIST_ADD 53 stub IMAGELIST_ADDICON 9 pascal -ret16 CreateHeaderWindow(long str word word) CreateHeaderWindow16 10 pascal -ret16 WritePrivateProfileStruct(str str ptr word str) WritePrivateProfileStruct16 11 pascal -ret16 GetPrivateProfileStruct(str str ptr word str) GetPrivateProfileStruct16 ================================================ FILE: commctrl/commctrl.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 commctrl {CB9C6113-15AB-4DB9-A323-C2094A9A6E92} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; $(OutDir)user.lib;comctl32.lib;user32.lib;gdi32.lib true commctrl.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false commctrl.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; $(OutDir)user.lib;comctl32.lib;user32.lib;gdi32.lib Document "$(OutDir)convspec" "%(Filename).spec" COMMCTRL > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: commdlg/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(commdlg SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/commdlg.def commdlg.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(commdlg.dll16 commdlg) target_link_libraries(commdlg libwine winecrt0 krnl386 user comdlg32.lib) set_target_properties(commdlg PROPERTIES SUFFIX ".dll16") ================================================ FILE: commdlg/cdlg16.h ================================================ /* * Common Dialog Boxes interface (16 bit implementation) * * Copyright 1994 Martin Ayotte * Copyright 1996 Albrecht Kleine * Copyright 1998 Bertho A. Stultiens * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINE_DLL_CDLG16_H #define _WINE_DLL_CDLG16_H #include "dlgs.h" #include "wine/windef16.h" #include "wine/winbase16.h" #include "wine/winuser16.h" #include "wownt32.h" /* 16 bit api */ #include "pshpack1.h" typedef UINT16 (CALLBACK *LPOFNHOOKPROC16)(HWND16,UINT16,WPARAM16,LPARAM); typedef struct { DWORD lStructSize; HWND16 hwndOwner; HINSTANCE16 hInstance; SEGPTR lpstrFilter; SEGPTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; SEGPTR lpstrFile; DWORD nMaxFile; SEGPTR lpstrFileTitle; DWORD nMaxFileTitle; SEGPTR lpstrInitialDir; SEGPTR lpstrTitle; DWORD Flags; UINT16 nFileOffset; UINT16 nFileExtension; SEGPTR lpstrDefExt; LPARAM lCustData; LPOFNHOOKPROC16 lpfnHook; SEGPTR lpTemplateName; } OPENFILENAME16,*LPOPENFILENAME16; typedef UINT16 (CALLBACK *LPCCHOOKPROC16) (HWND16, UINT16, WPARAM16, LPARAM); typedef struct { DWORD lStructSize; HWND16 hwndOwner; HWND16 hInstance; COLORREF rgbResult; SEGPTR lpCustColors; DWORD Flags; LPARAM lCustData; LPCCHOOKPROC16 lpfnHook; SEGPTR lpTemplateName; } CHOOSECOLOR16; typedef CHOOSECOLOR16 *LPCHOOSECOLOR16; typedef UINT16 (CALLBACK *LPFRHOOKPROC16)(HWND16,UINT16,WPARAM16,LPARAM); typedef struct { DWORD lStructSize; /* size of this struct 0x20 */ HWND16 hwndOwner; /* handle to owner's window */ HINSTANCE16 hInstance; /* instance handle of.EXE that */ /* contains cust. dlg. template */ DWORD Flags; /* one or more of the FR_?? */ SEGPTR lpstrFindWhat; /* ptr. to search string */ SEGPTR lpstrReplaceWith; /* ptr. to replace string */ UINT16 wFindWhatLen; /* size of find buffer */ UINT16 wReplaceWithLen; /* size of replace buffer */ LPARAM lCustData; /* data passed to hook fn. */ LPFRHOOKPROC16 lpfnHook; SEGPTR lpTemplateName; /* custom template name */ } FINDREPLACE16, *LPFINDREPLACE16; typedef UINT16 (CALLBACK *LPCFHOOKPROC16)(HWND16,UINT16,WPARAM16,LPARAM); typedef struct { DWORD lStructSize; HWND16 hwndOwner; /* caller's window handle */ HDC16 hDC; /* printer DC/IC or NULL */ SEGPTR lpLogFont; /* ptr. to a LOGFONT struct */ short iPointSize; /* 10 * size in points of selected font */ DWORD Flags; /* enum. type flags */ COLORREF rgbColors; /* returned text color */ LPARAM lCustData; /* data passed to hook fn. */ LPCFHOOKPROC16 lpfnHook; SEGPTR lpTemplateName; /* custom template name */ HINSTANCE16 hInstance; /* instance handle of.EXE that */ /* contains cust. dlg. template */ SEGPTR lpszStyle; /* return the style field here */ /* must be LF_FACESIZE or bigger */ UINT16 nFontType; /* same value reported to the */ /* EnumFonts callback with the */ /* extra FONTTYPE_ bits added */ short nSizeMin; /* minimum pt size allowed & */ short nSizeMax; /* max pt size allowed if */ /* CF_LIMITSIZE is used */ } CHOOSEFONT16, *LPCHOOSEFONT16; typedef UINT16 (CALLBACK *LPPRINTHOOKPROC16) (HWND16, UINT16, WPARAM16, LPARAM); typedef UINT16 (CALLBACK *LPSETUPHOOKPROC16) (HWND16, UINT16, WPARAM16, LPARAM); typedef struct { DWORD lStructSize; HWND16 hwndOwner; HGLOBAL16 hDevMode; HGLOBAL16 hDevNames; HDC16 hDC; DWORD Flags; WORD nFromPage; WORD nToPage; WORD nMinPage; WORD nMaxPage; WORD nCopies; HINSTANCE16 hInstance; LPARAM lCustData; LPPRINTHOOKPROC16 lpfnPrintHook; LPSETUPHOOKPROC16 lpfnSetupHook; SEGPTR lpPrintTemplateName; SEGPTR lpSetupTemplateName; HGLOBAL16 hPrintTemplate; HGLOBAL16 hSetupTemplate; } PRINTDLG16, *LPPRINTDLG16; BOOL16 WINAPI ChooseColor16(LPCHOOSECOLOR16 lpChCol); HWND16 WINAPI FindText16( SEGPTR find); BOOL16 WINAPI GetOpenFileName16(SEGPTR ofn); BOOL16 WINAPI GetSaveFileName16(SEGPTR ofn); BOOL16 WINAPI PrintDlg16( SEGPTR print); HWND16 WINAPI ReplaceText16( SEGPTR find); BOOL16 WINAPI ChooseFont16(SEGPTR); BOOL16 CALLBACK ColorDlgProc16( HWND16 hDlg16, UINT16 message, WPARAM16 wParam, LPARAM lParam ); BOOL16 CALLBACK FileSaveDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); BOOL16 CALLBACK FileOpenDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); INT16 WINAPI FontFamilyEnumProc16( SEGPTR logfont, SEGPTR metrics, UINT16 nFontType, LPARAM lParam ); INT16 WINAPI FontStyleEnumProc16( SEGPTR logfont, SEGPTR metrics, UINT16 nFontType, LPARAM lParam); BOOL16 CALLBACK FormatCharDlgProc16(HWND16 hDlg16, UINT16 message, WPARAM16 wParam, LPARAM lParam); short WINAPI GetFileTitle16(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf); BOOL16 CALLBACK PrintDlgProc16(HWND16 hDlg16, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam); BOOL16 CALLBACK PrintSetupDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam); typedef struct { BYTE pop_eax; //58 BYTE push; //68 DWORD this_; BYTE push_eax; //50 BYTE mov_eax; //B8 DWORD address; BYTE jmp; //FF E0 BYTE eax; //E0 BOOL used; SEGPTR segofn16; SEGPTR func; union { OPENFILENAME16 ofn16; PRINTDLGA pd; }; } COMMDLGTHUNK; COMMDLGTHUNK *allocate_thunk(SEGPTR ofnseg, SEGPTR func); void delete_thunk(LPVOID func); #include "poppack.h" typedef struct { HMENU16 hMenu16; DLGPROC16 dlgProc; } dialog_data; DLGTEMPLATE *WINAPI dialog_template16_to_template32(HINSTANCE16 hInst, SEGPTR dlgTemplate16, DWORD *size, dialog_data *paramd); #endif /* _WINE_DLL_CDLG16_H */ ================================================ FILE: commdlg/colordlg.c ================================================ /* * COMMDLG - Color Dialog * * Copyright 1994 Martin Ayotte * Copyright 1996 Albrecht Kleine * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* BUGS : still seems to not refresh correctly sometimes, especially when 2 instances of the dialog are loaded at the same time */ #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "commdlg.h" #include "wine/debug.h" #include "cdlg16.h" WINE_DEFAULT_DEBUG_CHANNEL(commdlg); /*********************************************************************** * ColorDlgProc (COMMDLG.8) */ BOOL16 CALLBACK ColorDlgProc16( HWND16 hDlg16, UINT16 message, WPARAM16 wParam, LPARAM lParam ) { FIXME( "%04x %04x %04x %08lx: stub\n", hDlg16, message, wParam, lParam ); return FALSE; } /*********************************************************************** * ChooseColor (COMMDLG.5) */ BOOL16 WINAPI ChooseColor16( LPCHOOSECOLOR16 cc16 ) { CHOOSECOLORA cc32; BOOL ret; cc32.lStructSize = sizeof(cc32); cc32.hwndOwner = HWND_32( cc16->hwndOwner ); cc32.rgbResult = cc16->rgbResult; cc32.lpCustColors = MapSL( cc16->lpCustColors ); cc32.Flags = cc16->Flags & ~(CC_ENABLETEMPLATE | CC_ENABLETEMPLATEHANDLE | CC_ENABLEHOOK); cc32.lCustData = cc16->lCustData; cc32.hInstance = NULL; cc32.lpfnHook = NULL; cc32.lpTemplateName = NULL; if (cc16->Flags & (CC_ENABLETEMPLATE | CC_ENABLETEMPLATEHANDLE)) FIXME( "custom templates no longer supported, using default\n" ); if (cc16->Flags & CC_ENABLEHOOK) FIXME( "custom hook %p no longer supported\n", cc16->lpfnHook ); if ((ret = ChooseColorA( &cc32 ))) { cc16->rgbResult = cc32.rgbResult; } return ret; } ================================================ FILE: commdlg/commdlg.def ================================================ ; File generated automatically from commdlg.dll16.spec; do not edit! LIBRARY commdlg.dll16 EXPORTS _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE ================================================ FILE: commdlg/commdlg.dll16.spec ================================================ 1 pascal -ret16 GetOpenFileName(segptr) GetOpenFileName16 2 pascal -ret16 GetSaveFileName(segptr) GetSaveFileName16 5 pascal -ret16 ChooseColor(ptr) ChooseColor16 6 pascal FileOpenDlgProc(word word word long) FileOpenDlgProc16 7 pascal FileSaveDlgProc(word word word long) FileSaveDlgProc16 8 pascal ColorDlgProc(word word word long) ColorDlgProc16 #9 pascal LOADALTERBITMAP exported, shared data 11 pascal -ret16 FindText(segptr) FindText16 12 pascal -ret16 ReplaceText(segptr) ReplaceText16 13 pascal FindTextDlgProc(word word word long) FindTextDlgProc16 14 pascal ReplaceTextDlgProc(word word word long) ReplaceTextDlgProc16 15 pascal -ret16 ChooseFont(segptr) ChooseFont16 16 pascal -ret16 FormatCharDlgProc(word word word long) FormatCharDlgProc16 18 pascal -ret16 FontStyleEnumProc(ptr ptr word long) FontStyleEnumProc16 19 pascal -ret16 FontFamilyEnumProc(ptr ptr word long) FontFamilyEnumProc16 20 pascal -ret16 PrintDlg(segptr) PrintDlg16 21 pascal PrintDlgProc(word word word long) PrintDlgProc16 22 pascal PrintSetupDlgProc(word word word long) PrintSetupDlgProc16 #23 pascal EDITINTEGERONLY exported, shared data #25 pascal WANTARROWS exported, shared data 26 pascal CommDlgExtendedError() CommDlgExtendedError16 27 pascal -ret16 GetFileTitle(str ptr word) GetFileTitle16 #28 pascal WEP exported, shared data #29 pascal DWLBSUBCLASS exported, shared data #30 pascal DWUPARROWHACK exported, shared data #31 pascal DWOKSUBCLASS exported, shared data ================================================ FILE: commdlg/commdlg.rc ================================================ #include "resource.h" #include "winresrc.h" /* 64 KiB dummy resource */ IDB_BITMAP1 BITMAP "dummy.bmp" #define OPEN_FILE 1536 #define SAVE_FILE 1537 #define PRINT 1538 #define PRINT_SETUP 1539 #define FIND 1540 #define REPLACE 1541 #define CHOOSE_FONT 1543 #define CHOOSE_COLOR CHOOSECOLOR OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Open" FONT 8, "MS Shell Dlg" { LTEXT "File &Name:", stc3, 6, 6, 76, 9 EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP LISTBOX lst1, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "&Directories:", -1, 110, 6, 92, 9 LTEXT "", stc1, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "List Files of &Type:", stc2, 6, 104, 90, 9 COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP LTEXT "Dri&ves:", stc4, 110, 104, 92, 9 COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Open", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancel", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Help", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP CHECKBOX "&Read Only", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Save As..." FONT 8, "MS Shell Dlg" { LTEXT "File &Name:", stc3, 6, 6, 76, 9 EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP LISTBOX lst1, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "&Directories:", -1, 110, 6, 92, 9 LTEXT "", stc1, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "List Files of &Type:", stc2, 6, 104, 90, 9 COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP LTEXT "Dri&ves:", stc4, 110, 104, 92, 9 COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Save As", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancel", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Help", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP CHECKBOX "&Read Only", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Print" FONT 8, "MS Shell Dlg" { LTEXT "Printer:", stc6, 6, 6, 40, 9 LTEXT "", stc1, 60, 6, 150, 9 GROUPBOX "Print range", grp1, 6, 30, 160, 65, BS_GROUPBOX RADIOBUTTON "&All", rad1, 16, 45, 60, 12 RADIOBUTTON "S&election", rad2, 16, 60, 60, 12 RADIOBUTTON "&Pages", rad4, 16, 75, 60, 12 DEFPUSHBUTTON "Print", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancel", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Setup", psh1, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Help", psh15, 206, 75, 56, 14, WS_GROUP | WS_TABSTOP LTEXT "&From:", stc2, 60, 80, 30, 9 EDITTEXT edt1, 80, 78, 26, 12, ES_RIGHT | WS_BORDER | WS_TABSTOP LTEXT "&To:", stc3, 120, 80, 30, 9 EDITTEXT edt2, 135, 78, 26, 12, ES_RIGHT | WS_BORDER | WS_TABSTOP LTEXT "Print &Quality:", stc4, 6, 100, 76, 9 LTEXT "&Copies:", stc5, 180, 100, 29, 9 EDITTEXT edt3, 205, 98, 26, 12, ES_RIGHT | WS_BORDER | WS_TABSTOP COMBOBOX cmb1, 80, 100, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP CHECKBOX "Print to Fi&le", chx1, 20, 120, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP CHECKBOX "Condensed", chx2, 160, 120, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Print Setup" FONT 8, "MS Shell Dlg" { GROUPBOX "Printer", grp3, 6, 6, 180, 72, BS_GROUPBOX RADIOBUTTON "&Default Printer", rad3, 16, 16, 150, 12 LTEXT "[none]", stc1, 35, 30, 120, 9 RADIOBUTTON "Specific &Printer", rad4, 16, 44, 150, 12 COMBOBOX cmb1, 35, 58, 145, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancel", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Setup", psh1, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP GROUPBOX "Orientation", grp1, 6, 82, 100, 50, BS_GROUPBOX RADIOBUTTON "Po&rtrait", rad1, 50, 95, 50, 12 RADIOBUTTON "&Landscape", rad2, 50, 110, 50, 12 ICON "LANDSCAP", ico1, 10, 95, 32, 32 GROUPBOX "Paper", grp2, 116, 82, 178, 50, BS_GROUPBOX LTEXT "Si&ze", stc2, 126, 95, 35, 9 LTEXT "&Source", stc3, 126, 110, 35, 9 COMBOBOX cmb2, 155, 95, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP COMBOBOX cmb3, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP } CHOOSE_FONT DIALOG 13, 54, 274, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Font" FONT 8, "MS Shell Dlg" { LTEXT "&Font:",stc1 ,6,3,90,9 COMBOBOX cmb1, 6,13,94,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Font St&yle:",stc2 ,108,3,60,9 COMBOBOX cmb2,108,13,64,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "&Size:",stc3,179,3,32,9 COMBOBOX cmb3,179,13,32,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT DEFPUSHBUTTON "OK",IDOK,218,6,50,14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON PUSHBUTTON "Cancel",IDCANCEL,218,23,50,14,WS_GROUP | WS_TABSTOP PUSHBUTTON "&Apply", psh3,218,40,50,14,WS_GROUP | WS_TABSTOP PUSHBUTTON "&Help" , pshHelp,218,57,50,14,WS_GROUP | WS_TABSTOP GROUPBOX "Effects",grp1,6,72,84,36,WS_GROUP CHECKBOX "Stri&keout", chx1, 10,82,78,10, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "&Underline", chx2, 10,94,78,10, BS_AUTOCHECKBOX LTEXT "&Color:", stc4 ,6,114,80,9 COMBOBOX cmb4,6,124,84,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP GROUPBOX "Sample",grp2,98,72,120,36,WS_GROUP CTEXT "",stc5,103,81,109,24,SS_NOPREFIX | NOT WS_VISIBLE CTEXT "",stc6,98,123,120,90,SS_NOPREFIX | NOT WS_GROUP // LTEXT "Scr&ipt:",stc7 ,98,114,40,9 // COMBOBOX cmb5,98,124,120,90,CBS_DROPDOWNLIST | CBS_HASSTRINGS | // CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP } /* Color dialog controls */ #define IDC_COLOR_LUMBAR 702 #define IDC_COLOR_EDIT_H 703 #define IDC_COLOR_EDIT_S 704 #define IDC_COLOR_EDIT_L 705 #define IDC_COLOR_EDIT_R 706 #define IDC_COLOR_EDIT_G 707 #define IDC_COLOR_EDIT_B 708 #define IDC_COLOR_RESULT 709 #define IDC_COLOR_GRAPH 710 #define IDC_COLOR_ADD 712 #define IDC_COLOR_RES 713 #define IDC_COLOR_DEFINE 719 #define IDC_COLOR_PREDEF 720 #define IDC_COLOR_USRDEF 721 #define IDC_COLOR_HL 723 #define IDC_COLOR_SL 724 #define IDC_COLOR_LL 725 #define IDC_COLOR_RL 726 #define IDC_COLOR_GL 727 #define IDC_COLOR_BL 728 CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Color" FONT 8, "MS Shell Dlg" { LTEXT "&Basic Colors:", stc1, 4, 4, 140, 10 LTEXT "&Custom Colors:", stc2, 4, 106, 140, 10 LTEXT "Color | Sol&id", stc3, 150, 151, 48, 10 LTEXT "&Red:", IDC_COLOR_RL /*1094*/,247,126,27,10 EDITTEXT IDC_COLOR_EDIT_R, 275,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP LTEXT "&Green:", IDC_COLOR_GL /*1095*/,247,140,27,10 EDITTEXT IDC_COLOR_EDIT_G, 275,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP LTEXT "&Blue:", IDC_COLOR_BL /*1096*/,247,154,27,10 EDITTEXT IDC_COLOR_EDIT_B, 275,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP LTEXT "&Hue:" , IDC_COLOR_HL /*1091*/,200,126,24,10 EDITTEXT IDC_COLOR_EDIT_H, 224,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP LTEXT "#msgctxt#Saturation#&Sat:", IDC_COLOR_SL /*1092*/,200,140,24,10 EDITTEXT IDC_COLOR_EDIT_S, 224,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP LTEXT "#msgctxt#Luminance#&Lum:", IDC_COLOR_LL /*1093*/,200,154,24,10 EDITTEXT IDC_COLOR_EDIT_L, 224,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP CONTROL "" , IDC_COLOR_PREDEF, "STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,14,140,86 CONTROL "" , IDC_COLOR_USRDEF, "STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,116,140,28 CONTROL "" , IDC_COLOR_GRAPH, "STATIC",WS_BORDER|SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,4,118,116 CONTROL "" , IDC_COLOR_LUMBAR, "STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 278,4,8,116 CONTROL "" , IDC_COLOR_RESULT, "STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26 DEFPUSHBUTTON "OK", IDOK, 4, 167, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancel", IDCANCEL, 58, 167, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Help", pshHelp,100,166, 44, 14 PUSHBUTTON "&Add to Custom Colors", IDC_COLOR_ADD /*1024*/, 152, 167, 144, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Define Custom Colors >>", IDC_COLOR_DEFINE /*1025*/, 4, 149, 142, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Color | Sol&id", IDC_COLOR_RES, 300,200,4,14 /* just a dummy */ } ================================================ FILE: commdlg/commdlg.vcxproj ================================================  Debug Win32 Release Win32 {8914D84A-84BD-4F85-99AC-723F8AEABAEB} Win32Proj commdlg 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;COMMDLG_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;comdlg32.lib;user32.lib commdlg.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;COMMDLG_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true commdlg.def $(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;comdlg32.lib;user32.lib false Document "$(OutDir)convspec" "%(Filename).spec" COMMDLG > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" COMMDLG > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: commdlg/commdlg.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ヘッダー ファイル ヘッダー ファイル ソース ファイル ソース ファイル ソース ファイル リソース ファイル リソース ファイル ================================================ FILE: commdlg/filedlg.c ================================================ /* * COMMDLG - File Dialogs * * Copyright 1994 Martin Ayotte * Copyright 1996 Albrecht Kleine * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "wingdi.h" #include "winuser.h" #include "winternl.h" #include "commdlg.h" #include "cdlg16.h" #include "wine/debug.h" #include #include "resource.h" #include WINE_DEFAULT_DEBUG_CHANNEL(commdlg); #define MAX_THUNK 5 COMMDLGTHUNK *thunk_array; UINT WMFILEOK; UINT WMHELPMSG; UINT WMFINDMSG; UINT WMCOLOROK; UINT WMSHAREVI; UINT WMWOWDirChange; LPDLGTEMPLATEA resource_to_dialog32(HINSTANCE16 hInst, LPCSTR name, WORD *res); LPDLGTEMPLATEA handle_to_dialog32(HGLOBAL16 hg, WORD *res); LRESULT WINAPI DIALOG_CallDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC16 proc); static UINT_PTR CALLBACK thunk_hook(COMMDLGTHUNK *thunk, HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { /* window message hook? */ if (msg == WM_INITDIALOG || msg == WMFILEOK || msg == WMHELPMSG || msg == WMFINDMSG || msg == WMCOLOROK || msg == WMSHAREVI) { lp = thunk->segofn16; } UINT_PTR result = DIALOG_CallDialogProc(hwnd, msg, wp, lp, (WNDPROC16)thunk->func); return result; } static void init_thunk() { if (thunk_array) return; WMFILEOK = RegisterWindowMessageW(FILEOKSTRINGW); WMHELPMSG = RegisterWindowMessageW(HELPMSGSTRINGW); WMFINDMSG = RegisterWindowMessageW(FINDMSGSTRINGW); WMCOLOROK = RegisterWindowMessageW(COLOROKSTRINGW); WMSHAREVI = RegisterWindowMessageW(SHAREVISTRINGW); /* undocumented */ WMWOWDirChange = RegisterWindowMessageW(L"WOWDirChange"); thunk_array = VirtualAlloc(NULL, MAX_THUNK * sizeof(COMMDLGTHUNK), MEM_COMMIT, PAGE_EXECUTE_READWRITE); } void delete_thunk(LPVOID func) { if (func && (SIZE_T)thunk_array <= (SIZE_T)func && (SIZE_T)func <= (SIZE_T)(thunk_array + MAX_THUNK)) { ((COMMDLGTHUNK*)func)->used = FALSE; } } COMMDLGTHUNK *allocate_thunk(SEGPTR ofnseg, SEGPTR func) { init_thunk(); for (int i = 0; i < MAX_THUNK; i++) { if (!thunk_array[i].used) { thunk_array[i].pop_eax = 0x58; thunk_array[i].push = 0x68; thunk_array[i].this_ = (DWORD)(thunk_array + i); thunk_array[i].push_eax = 0x50; thunk_array[i].mov_eax = 0xB8; thunk_array[i].address = (DWORD)thunk_hook; thunk_array[i].jmp = 0xFF; thunk_array[i].eax = 0xE0; thunk_array[i].used = TRUE; thunk_array[i].func = func; thunk_array[i].segofn16 = ofnseg; return thunk_array + i; } } return NULL; } static inline WORD get_word( const char **ptr ) { WORD ret = *(WORD *)*ptr; *ptr += sizeof(WORD); return ret; } static inline void copy_string( WORD **out, const char **in, DWORD maxlen ) { DWORD len = MultiByteToWideChar( CP_ACP, 0, *in, -1, *out, maxlen ); *in += strlen(*in) + 1; *out += len; } static inline void copy_dword( WORD **out, const char **in ) { *(DWORD *)*out = *(DWORD *)*in; *in += sizeof(DWORD); *out += sizeof(DWORD) / sizeof(WORD); } static LPDLGTEMPLATEA convert_dialog( const char *p, DWORD size ) { LPDLGTEMPLATEA dlg; WORD len, count, *out, *end; if (!(dlg = HeapAlloc( GetProcessHeap(), 0, size * 2 ))) return NULL; out = (WORD *)dlg; end = out + size; copy_dword( &out, &p ); /* style */ *out++ = 0; *out++ = 0; /* exstyle */ *out++ = count = (BYTE)*p++; /* count */ *out++ = get_word( &p ); /* x */ *out++ = get_word( &p ); /* y */ *out++ = get_word( &p ); /* cx */ *out++ = get_word( &p ); /* cy */ if ((BYTE)*p == 0xff) /* menu */ { p++; *out++ = 0xffff; *out++ = get_word( &p ); } else copy_string( &out, &p, end - out ); copy_string( &out, &p, end - out ); /* class */ copy_string( &out, &p, end - out ); /* caption */ if (dlg->style & DS_SETFONT) { *out++ = get_word( &p ); /* point size */ copy_string( &out, &p, end - out ); /* face name */ } /* controls */ while (count--) { WORD x = get_word( &p ); WORD y = get_word( &p ); WORD cx = get_word( &p ); WORD cy = get_word( &p ); WORD id = get_word( &p ); out = (WORD *)(((UINT_PTR)out + 3) & ~3); copy_dword( &out, &p ); /* style */ *out++ = 0; *out++ = 0; /* exstyle */ *out++ = x; *out++ = y; *out++ = cx; *out++ = cy; *out++ = id; if (*p & 0x80) /* class */ { *out++ = 0xffff; *out++ = (BYTE)*p++; } else copy_string( &out, &p, end - out ); if (*p & 0x80) /* window */ { *out++ = 0xffff; *out++ = get_word( &p ); } else copy_string( &out, &p, end - out ); len = (BYTE)*p++; /* data */ *out++ = (len + 1) & ~1; memcpy( out, p, len ); p += len; out += (len + 1) / sizeof(WORD); } assert( out <= end ); return dlg; } static UINT_PTR CALLBACK dummy_hook( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) { return FALSE; } /*********************************************************************** * FileOpenDlgProc (COMMDLG.6) */ BOOL16 CALLBACK FileOpenDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { FIXME( "%04x %04x %04x %08lx: stub\n", hWnd16, wMsg, wParam, lParam ); return FALSE; } /*********************************************************************** * FileSaveDlgProc (COMMDLG.7) */ BOOL16 CALLBACK FileSaveDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { FIXME( "%04x %04x %04x %08lx: stub\n", hWnd16, wMsg, wParam, lParam ); return FALSE; } DWORD get_ofn_flag(DWORD flag) { return (flag | OFN_NOLONGNAMES) & ~OFN_ENABLETEMPLATE; } /*********************************************************************** * GetOpenFileName (COMMDLG.1) * * Creates a dialog box for the user to select a file to open. * * RETURNS * TRUE on success: user selected a valid file * FALSE on cancel, error, close or filename-does-not-fit-in-buffer. * * BUGS * unknown, there are some FIXMEs left. */ BOOL16 WINAPI GetOpenFileName16( SEGPTR ofn ) /* [in/out] address of structure with data*/ { LPOPENFILENAME16 lpofn = MapSL(ofn); LPDLGTEMPLATEA template = NULL; OPENFILENAMEA ofn32; BOOL ret; DWORD count; WORD res = NULL; if (!lpofn) return FALSE; OPENFILENAME16 ofn16 = *lpofn; ofn32.lStructSize = OPENFILENAME_SIZE_VERSION_400A; ofn32.hwndOwner = HWND_32( lpofn->hwndOwner ); ofn32.lpstrFilter = MapSL( lpofn->lpstrFilter ); ofn32.lpstrCustomFilter = MapSL( lpofn->lpstrCustomFilter ); ofn32.nMaxCustFilter = lpofn->nMaxCustFilter; ofn32.nFilterIndex = lpofn->nFilterIndex; ofn32.lpstrFile = MapSL( lpofn->lpstrFile ); ofn32.nMaxFile = lpofn->nMaxFile; ofn32.lpstrFileTitle = MapSL( lpofn->lpstrFileTitle ); ofn32.nMaxFileTitle = lpofn->nMaxFileTitle; ofn32.lpstrInitialDir = MapSL( lpofn->lpstrInitialDir ); ofn32.lpstrTitle = MapSL( lpofn->lpstrTitle ); ofn32.Flags = get_ofn_flag(lpofn->Flags | OFN_ENABLEHOOK); ofn32.nFileOffset = lpofn->nFileOffset; ofn32.nFileExtension = lpofn->nFileExtension; ofn32.lpstrDefExt = MapSL( lpofn->lpstrDefExt ); ofn32.lCustData = lpofn->lCustData; ofn32.lpfnHook = dummy_hook; /* this is to force old 3.1 dialog style */ ofn32.lpTemplateName = NULL; ofn32.hInstance = GetModuleHandleW(L"commdlg.dll16"); if ((lpofn->Flags & OFN_ENABLETEMPLATE) || (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE)) { if (lpofn->Flags & OFN_ENABLETEMPLATE) template = resource_to_dialog32(lpofn->hInstance, MapSL(lpofn->lpTemplateName), &res); else template = handle_to_dialog32(lpofn->hInstance, &res); ofn32.hInstance = template; ofn32.Flags |= OFN_ENABLETEMPLATEHANDLE; } if (lpofn->Flags & OFN_ENABLEHOOK) { ofn32.lpfnHook = (LPOFNHOOKPROC)allocate_thunk(ofn, (SEGPTR)lpofn->lpfnHook); ((COMMDLGTHUNK*)ofn32.lpfnHook)->ofn16 = ofn16; if (!ofn32.lpfnHook) { ERR("could not allocate GetOpenFileName16 thunk\n"); ofn32.lpfnHook = dummy_hook; } } if (ofn32.lpstrFile && ofn32.lpstrFile[0]) CharUpperBuffA(ofn32.lpstrFile, min(strlen(ofn32.lpstrFile), ofn32.nMaxFile)); ReleaseThunkLock(&count); if ((ret = GetOpenFileNameA( &ofn32 ))) { lpofn->nFilterIndex = ofn32.nFilterIndex; lpofn->nFileOffset = ofn32.nFileOffset; lpofn->nFileExtension = ofn32.nFileExtension; if (ofn32.lpstrFile && ofn32.lpstrFile[0]) CharUpperBuffA(ofn32.lpstrFile, min(strlen(ofn32.lpstrFile), ofn32.nMaxFile)); } RestoreThunkLock(count); if (res) { if (lpofn->Flags & OFN_ENABLETEMPLATE) FreeResource16(res); else if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) WOWGlobalUnlock16(res); } delete_thunk(ofn32.lpfnHook); HeapFree( GetProcessHeap(), 0, template ); return ret; } /*********************************************************************** * GetSaveFileName (COMMDLG.2) * * Creates a dialog box for the user to select a file to save. * * RETURNS * TRUE on success: user enters a valid file * FALSE on cancel, error, close or filename-does-not-fit-in-buffer. * * BUGS * unknown. There are some FIXMEs left. */ BOOL16 WINAPI GetSaveFileName16( SEGPTR ofn ) /* [in/out] address of structure with data*/ { LPOPENFILENAME16 lpofn = MapSL(ofn); LPDLGTEMPLATEA template = NULL; OPENFILENAMEA ofn32; BOOL ret; DWORD count; WORD res = NULL; if (!lpofn) return FALSE; OPENFILENAME16 ofn16 = *lpofn; ofn32.lStructSize = OPENFILENAME_SIZE_VERSION_400A; ofn32.hwndOwner = HWND_32( lpofn->hwndOwner ); ofn32.lpstrFilter = MapSL( lpofn->lpstrFilter ); ofn32.lpstrCustomFilter = MapSL( lpofn->lpstrCustomFilter ); ofn32.nMaxCustFilter = lpofn->nMaxCustFilter; ofn32.nFilterIndex = lpofn->nFilterIndex; ofn32.lpstrFile = MapSL( lpofn->lpstrFile ); ofn32.nMaxFile = lpofn->nMaxFile; ofn32.lpstrFileTitle = MapSL( lpofn->lpstrFileTitle ); ofn32.nMaxFileTitle = lpofn->nMaxFileTitle; ofn32.lpstrInitialDir = MapSL( lpofn->lpstrInitialDir ); ofn32.lpstrTitle = MapSL( lpofn->lpstrTitle ); ofn32.Flags = get_ofn_flag(lpofn->Flags | OFN_ENABLEHOOK); ofn32.nFileOffset = lpofn->nFileOffset; ofn32.nFileExtension = lpofn->nFileExtension; ofn32.lpstrDefExt = MapSL( lpofn->lpstrDefExt ); ofn32.lCustData = lpofn->lCustData; ofn32.lpfnHook = dummy_hook; /* this is to force old 3.1 dialog style */ ofn32.lpTemplateName = NULL; ofn32.hInstance = GetModuleHandleW(L"commdlg.dll16"); if ((lpofn->Flags & OFN_ENABLETEMPLATE) || (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE)) { if (lpofn->Flags & OFN_ENABLETEMPLATE) template = resource_to_dialog32(lpofn->hInstance, MapSL(lpofn->lpTemplateName), &res); else template = handle_to_dialog32(lpofn->hInstance, &res); ofn32.hInstance = template; ofn32.Flags |= OFN_ENABLETEMPLATEHANDLE; } if (lpofn->Flags & OFN_ENABLEHOOK) { ofn32.lpfnHook = (LPOFNHOOKPROC)allocate_thunk(ofn, (SEGPTR)lpofn->lpfnHook); ((COMMDLGTHUNK*)ofn32.lpfnHook)->ofn16 = ofn16; if (!ofn32.lpfnHook) { ERR("could not allocate GetOpenFileName16 thunk\n"); ofn32.lpfnHook = dummy_hook; } } if (ofn32.lpstrFile && ofn32.lpstrFile[0]) CharUpperBuffA(ofn32.lpstrFile, min(strlen(ofn32.lpstrFile), ofn32.nMaxFile)); ReleaseThunkLock(&count); if ((ret = GetSaveFileNameA( &ofn32 ))) { lpofn->nFilterIndex = ofn32.nFilterIndex; lpofn->nFileOffset = ofn32.nFileOffset; lpofn->nFileExtension = ofn32.nFileExtension; if (ofn32.lpstrFile && ofn32.lpstrFile[0]) CharUpperBuffA(ofn32.lpstrFile, min(strlen(ofn32.lpstrFile), ofn32.nMaxFile)); } RestoreThunkLock(count); if (res) { if (lpofn->Flags & OFN_ENABLETEMPLATE) FreeResource16(res); else if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) WOWGlobalUnlock16(res); } delete_thunk(ofn32.lpfnHook); HeapFree( GetProcessHeap(), 0, template ); return ret; } /*********************************************************************** * GetFileTitle (COMMDLG.27) */ short WINAPI GetFileTitle16(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf) { return GetFileTitleA(lpFile, lpTitle, cbBuf); } ================================================ FILE: commdlg/finddlg.c ================================================ /* * COMMDLG - 16 bits Find & Replace Text Dialogs * * Copyright 1994 Martin Ayotte * Copyright 1996 Albrecht Kleine * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "wine/winuser16.h" #include "wingdi.h" #include "winuser.h" #include "commdlg.h" #include "cderr.h" #include "cdlg16.h" LRESULT WINAPI DIALOG_CallDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC16 proc); LPDLGTEMPLATEA resource_to_dialog32(HINSTANCE16 hInst, LPCSTR name, WORD *res); LPDLGTEMPLATEA handle_to_dialog32(HGLOBAL16 hg, WORD *res); /*********************************************************************** * FINDDLG_WMCommand [internal] */ static LRESULT FINDDLG_WMCommand(HWND hWnd, WPARAM wParam, HWND hwndOwner, LPDWORD lpFlags, LPSTR lpstrFindWhat, WORD wFindWhatLen) { int uFindReplaceMessage = RegisterWindowMessageA( FINDMSGSTRINGA ); int uHelpMessage = RegisterWindowMessageA( HELPMSGSTRINGA ); switch (LOWORD(wParam)) { case IDOK: GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen); if (IsDlgButtonChecked(hWnd, rad2)) *lpFlags |= FR_DOWN; else *lpFlags &= ~FR_DOWN; if (IsDlgButtonChecked(hWnd, chx1)) *lpFlags |= FR_WHOLEWORD; else *lpFlags &= ~FR_WHOLEWORD; if (IsDlgButtonChecked(hWnd, chx2)) *lpFlags |= FR_MATCHCASE; else *lpFlags &= ~FR_MATCHCASE; *lpFlags &= ~(FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM); *lpFlags |= FR_FINDNEXT; SendMessageW( hwndOwner, uFindReplaceMessage, 0, GetWindowLongPtrW(hWnd, DWLP_USER) ); return TRUE; case IDCANCEL: *lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL); *lpFlags |= FR_DIALOGTERM; SendMessageW( hwndOwner, uFindReplaceMessage, 0, GetWindowLongPtrW(hWnd, DWLP_USER) ); DestroyWindow(hWnd); return TRUE; case pshHelp: /* FIXME : should lpfr structure be passed as an argument ??? */ SendMessageA(hwndOwner, uHelpMessage, 0, 0); return TRUE; } return FALSE; } /*********************************************************************** * find_text_dlgproc (internal) */ static INT_PTR CALLBACK find_text_dlgproc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { LPFINDREPLACE16 lpfr; DWORD lpFlags; LRESULT ret = FALSE; if (wMsg == WM_INITDIALOG) { lpfr = MapSL(lParam); SetWindowLongPtrW(hWnd, DWLP_USER, lParam); lpfr->Flags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM); lpFlags = lpfr->Flags; /* * FIXME : If the initial FindWhat string is empty, we should disable the * FindNext (IDOK) button. Only after typing some text, the button should be * enabled. */ SetDlgItemTextA(hWnd, edt1, lpfr->lpstrFindWhat); CheckRadioButton(hWnd, rad1, rad2, (lpFlags & FR_DOWN) ? rad2 : rad1); if (lpFlags & (FR_HIDEUPDOWN | FR_NOUPDOWN)) { EnableWindow(GetDlgItem(hWnd, rad1), FALSE); EnableWindow(GetDlgItem(hWnd, rad2), FALSE); } if (lpFlags & FR_HIDEUPDOWN) { ShowWindow(GetDlgItem(hWnd, rad1), SW_HIDE); ShowWindow(GetDlgItem(hWnd, rad2), SW_HIDE); ShowWindow(GetDlgItem(hWnd, grp1), SW_HIDE); } CheckDlgButton(hWnd, chx1, (lpFlags & FR_WHOLEWORD) ? 1 : 0); if (lpFlags & (FR_HIDEWHOLEWORD | FR_NOWHOLEWORD)) EnableWindow(GetDlgItem(hWnd, chx1), FALSE); if (lpFlags & FR_HIDEWHOLEWORD) ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE); CheckDlgButton(hWnd, chx2, (lpFlags & FR_MATCHCASE) ? 1 : 0); if (lpFlags & (FR_HIDEMATCHCASE | FR_NOMATCHCASE)) EnableWindow(GetDlgItem(hWnd, chx2), FALSE); if (lpFlags & FR_HIDEMATCHCASE) ShowWindow(GetDlgItem(hWnd, chx2), SW_HIDE); if (!(lpFlags & FR_SHOWHELP)) { EnableWindow(GetDlgItem(hWnd, pshHelp), FALSE); ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE); } ret = TRUE; if (lpFlags & FR_ENABLEHOOK) ret = DIALOG_CallDialogProc(hWnd, wMsg, wParam, lParam, lpfr->lpfnHook); if (ret) ShowWindow(hWnd, SW_SHOWNORMAL); return TRUE; } lpfr = MapSL(GetWindowLongPtrW(hWnd, DWLP_USER)); if (lpfr && (lpfr->Flags & FR_ENABLEHOOK)) ret = DIALOG_CallDialogProc(hWnd, wMsg, wParam, lParam, lpfr->lpfnHook); if (!ret) { switch (wMsg) { case WM_COMMAND: return FINDDLG_WMCommand(hWnd, wParam, HWND_32(lpfr->hwndOwner), &lpfr->Flags, MapSL(lpfr->lpstrFindWhat), lpfr->wFindWhatLen); } } return FALSE; } /*********************************************************************** * FindText (COMMDLG.11) */ HWND16 WINAPI FindText16( SEGPTR find ) { FINDREPLACE16 *fr16 = MapSL( find ); LPDLGTEMPLATEA template = NULL; HWND16 ret; if ((fr16->Flags & FR_ENABLETEMPLATE) || (fr16->Flags & FR_ENABLETEMPLATEHANDLE)) { if (fr16->Flags & FR_ENABLETEMPLATE) template = resource_to_dialog32(fr16->hInstance, MapSL(fr16->lpTemplateName), NULL); else template = handle_to_dialog32(fr16->hInstance, NULL); ret = HWND_16(CreateDialogIndirectParamA(fr16->hInstance, template, HWND_32(fr16->hwndOwner), find_text_dlgproc, find)); HeapFree(GetProcessHeap(), 0, template); } else ret = HWND_16( CreateDialogParamA( GetModuleHandleA("comdlg32.dll"), MAKEINTRESOURCEA(FINDDLGORD), HWND_32(fr16->hwndOwner), find_text_dlgproc, find )); return ret; } /*********************************************************************** * FindTextDlgProc (COMMDLG.13) */ BOOL16 CALLBACK FindTextDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { return find_text_dlgproc( HWND_32(hWnd16), wMsg, wParam, lParam ); } /*********************************************************************** * REPLACEDLG_WMInitDialog [internal] */ static LRESULT REPLACEDLG_WMInitDialog(HWND hWnd, LPARAM lParam, LPDWORD lpFlags, LPCSTR lpstrFindWhat, LPCSTR lpstrReplaceWith) { } /*********************************************************************** * REPLACEDLG_WMCommand [internal] */ static LRESULT REPLACEDLG_WMCommand(HWND hWnd, WPARAM wParam, HWND hwndOwner, LPDWORD lpFlags, LPSTR lpstrFindWhat, WORD wFindWhatLen, LPSTR lpstrReplaceWith, WORD wReplaceWithLen) { int uFindReplaceMessage = RegisterWindowMessageA( FINDMSGSTRINGA ); int uHelpMessage = RegisterWindowMessageA( HELPMSGSTRINGA ); switch (LOWORD(wParam)) { case IDOK: GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen); GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen); if (IsDlgButtonChecked(hWnd, chx1)) *lpFlags |= FR_WHOLEWORD; else *lpFlags &= ~FR_WHOLEWORD; if (IsDlgButtonChecked(hWnd, chx2)) *lpFlags |= FR_MATCHCASE; else *lpFlags &= ~FR_MATCHCASE; *lpFlags &= ~(FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM); *lpFlags |= FR_FINDNEXT; SendMessageW( hwndOwner, uFindReplaceMessage, 0, GetWindowLongPtrW(hWnd, DWLP_USER) ); return TRUE; case IDCANCEL: *lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL); *lpFlags |= FR_DIALOGTERM; SendMessageW( hwndOwner, uFindReplaceMessage, 0, GetWindowLongPtrW(hWnd, DWLP_USER) ); DestroyWindow(hWnd); return TRUE; case psh1: GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen); GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen); if (IsDlgButtonChecked(hWnd, chx1)) *lpFlags |= FR_WHOLEWORD; else *lpFlags &= ~FR_WHOLEWORD; if (IsDlgButtonChecked(hWnd, chx2)) *lpFlags |= FR_MATCHCASE; else *lpFlags &= ~FR_MATCHCASE; *lpFlags &= ~(FR_FINDNEXT | FR_REPLACEALL | FR_DIALOGTERM); *lpFlags |= FR_REPLACE; SendMessageW( hwndOwner, uFindReplaceMessage, 0, GetWindowLongPtrW(hWnd, DWLP_USER) ); return TRUE; case psh2: GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen); GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen); if (IsDlgButtonChecked(hWnd, chx1)) *lpFlags |= FR_WHOLEWORD; else *lpFlags &= ~FR_WHOLEWORD; if (IsDlgButtonChecked(hWnd, chx2)) *lpFlags |= FR_MATCHCASE; else *lpFlags &= ~FR_MATCHCASE; *lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_DIALOGTERM); *lpFlags |= FR_REPLACEALL; SendMessageW( hwndOwner, uFindReplaceMessage, 0, GetWindowLongPtrW(hWnd, DWLP_USER) ); return TRUE; case pshHelp: /* FIXME : should lpfr structure be passed as an argument ??? */ SendMessageA(hwndOwner, uHelpMessage, 0, 0); return TRUE; } return FALSE; } /*********************************************************************** * replace_text_dlgproc */ static INT_PTR CALLBACK replace_text_dlgproc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { LPFINDREPLACE16 lpfr; DWORD lpFlags; LRESULT ret = FALSE; if (wMsg == WM_INITDIALOG) { lpfr=MapSL(lParam); SetWindowLongPtrW(hWnd, DWLP_USER, lParam); lpfr->Flags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM); lpFlags = lpfr->Flags; /* * FIXME : If the initial FindWhat string is empty, we should disable the FindNext / * Replace / ReplaceAll buttons. Only after typing some text, the buttons should be * enabled. */ SetDlgItemTextA(hWnd, edt1, lpfr->lpstrFindWhat); SetDlgItemTextA(hWnd, edt2, lpfr->lpstrReplaceWith); CheckDlgButton(hWnd, chx1, (lpFlags & FR_WHOLEWORD) ? 1 : 0); if (lpFlags & (FR_HIDEWHOLEWORD | FR_NOWHOLEWORD)) EnableWindow(GetDlgItem(hWnd, chx1), FALSE); if (lpFlags & FR_HIDEWHOLEWORD) ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE); CheckDlgButton(hWnd, chx2, (lpFlags & FR_MATCHCASE) ? 1 : 0); if (lpFlags & (FR_HIDEMATCHCASE | FR_NOMATCHCASE)) EnableWindow(GetDlgItem(hWnd, chx2), FALSE); if (lpFlags & FR_HIDEMATCHCASE) ShowWindow(GetDlgItem(hWnd, chx2), SW_HIDE); if (!(lpFlags & FR_SHOWHELP)) { EnableWindow(GetDlgItem(hWnd, pshHelp), FALSE); ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE); } ret = TRUE; if (lpFlags & FR_ENABLEHOOK) ret = DIALOG_CallDialogProc(hWnd, wMsg, wParam, lParam, lpfr->lpfnHook); if (ret) ShowWindow(hWnd, SW_SHOWNORMAL); return TRUE; } lpfr = MapSL(GetWindowLongPtrW(hWnd, DWLP_USER)); if (lpfr && (lpfr->Flags & FR_ENABLEHOOK)) ret = DIALOG_CallDialogProc(hWnd, wMsg, wParam, lParam, lpfr->lpfnHook); if (!ret) { switch (wMsg) { case WM_COMMAND: return REPLACEDLG_WMCommand(hWnd, wParam, HWND_32(lpfr->hwndOwner), &lpfr->Flags, MapSL(lpfr->lpstrFindWhat), lpfr->wFindWhatLen, MapSL(lpfr->lpstrReplaceWith), lpfr->wReplaceWithLen); } } return FALSE; } /*********************************************************************** * ReplaceText (COMMDLG.12) */ HWND16 WINAPI ReplaceText16( SEGPTR find ) { FINDREPLACE16 *fr16 = MapSL( find ); LPDLGTEMPLATEA template = NULL; HWND16 ret; if ((fr16->Flags & FR_ENABLETEMPLATE) || (fr16->Flags & FR_ENABLETEMPLATEHANDLE)) { if (fr16->Flags & FR_ENABLETEMPLATE) template = resource_to_dialog32(fr16->hInstance, MapSL(fr16->lpTemplateName), NULL); else template = handle_to_dialog32(fr16->hInstance, NULL); ret = HWND_16(CreateDialogIndirectParamA(fr16->hInstance, template, HWND_32(fr16->hwndOwner), replace_text_dlgproc, find)); HeapFree(GetProcessHeap(), 0, template); } else ret = HWND_16( CreateDialogParamA( GetModuleHandleA("comdlg32.dll"), MAKEINTRESOURCEA(FINDDLGORD), HWND_32(fr16->hwndOwner), replace_text_dlgproc, find )); return ret; } /*********************************************************************** * ReplaceTextDlgProc (COMMDLG.14) */ BOOL16 CALLBACK ReplaceTextDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { return replace_text_dlgproc( HWND_32(hWnd16), wMsg, wParam, lParam ); } /*********************************************************************** * CommDlgExtendedError (COMMDLG.26) */ DWORD WINAPI CommDlgExtendedError16(void) { return CommDlgExtendedError(); } ================================================ FILE: commdlg/fontdlg.c ================================================ /* * COMMDLG - Font Dialog * * Copyright 1994 Martin Ayotte * Copyright 1996 Albrecht Kleine * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "wine/winbase16.h" #include "wine/winuser16.h" #include "commdlg.h" #include "wine/debug.h" #include "cderr.h" #include "cdlg16.h" WINE_DEFAULT_DEBUG_CHANNEL(commdlg); LPDLGTEMPLATEA resource_to_dialog32(HINSTANCE16 hInst, LPCSTR name, WORD *res); LPDLGTEMPLATEA handle_to_dialog32(HGLOBAL16 hg, WORD *res); /*********************************************************************** * FontFamilyEnumProc (COMMDLG.19) */ INT16 WINAPI FontFamilyEnumProc16( SEGPTR logfont, SEGPTR metrics, UINT16 nFontType, LPARAM lParam ) { FIXME( "%08x %08x %u %lx\n", logfont, metrics, nFontType, lParam ); return 0; } /*********************************************************************** * FontStyleEnumProc (COMMDLG.18) */ INT16 WINAPI FontStyleEnumProc16( SEGPTR logfont, SEGPTR metrics, UINT16 nFontType, LPARAM lParam ) { FIXME( "%08x %08x %u %lx\n", logfont, metrics, nFontType, lParam ); return 0; } /*********************************************************************** * ChooseFont (COMMDLG.15) */ BOOL16 WINAPI ChooseFont16(SEGPTR cf) { LPCHOOSEFONT16 lpChFont = MapSL(cf); CHOOSEFONTA cf32; LOGFONTA lf32; LOGFONT16 *font16; LPDLGTEMPLATEA template = NULL; if (!lpChFont) return FALSE; font16 = MapSL(lpChFont->lpLogFont); cf32.lStructSize = sizeof(CHOOSEFONTA); cf32.hwndOwner = HWND_32(lpChFont->hwndOwner); cf32.hDC = HDC_32(lpChFont->hDC); cf32.iPointSize = lpChFont->iPointSize; cf32.Flags = lpChFont->Flags & ~(CF_ENABLETEMPLATEHANDLE | CF_ENABLETEMPLATE | CF_ENABLEHOOK); cf32.rgbColors = lpChFont->rgbColors; cf32.lCustData = lpChFont->lCustData; cf32.lpfnHook = NULL; cf32.hInstance = GetModuleHandleA("comdlg32.dll"); cf32.nFontType = lpChFont->nFontType; cf32.nSizeMax = lpChFont->nSizeMax; cf32.nSizeMin = lpChFont->nSizeMin; cf32.lpLogFont = &lf32; lf32.lfHeight = font16->lfHeight; lf32.lfWidth = font16->lfWidth; lf32.lfEscapement = font16->lfEscapement; lf32.lfOrientation = font16->lfOrientation; lf32.lfWeight = font16->lfWeight; lf32.lfItalic = font16->lfItalic; lf32.lfUnderline = font16->lfUnderline; lf32.lfStrikeOut = font16->lfStrikeOut; lf32.lfCharSet = font16->lfCharSet; lf32.lfOutPrecision = font16->lfOutPrecision; lf32.lfClipPrecision = font16->lfClipPrecision; lf32.lfQuality = font16->lfQuality; lf32.lfPitchAndFamily = font16->lfPitchAndFamily; lstrcpynA( lf32.lfFaceName, font16->lfFaceName, LF_FACESIZE ); if ((lpChFont->Flags & CF_ENABLETEMPLATE) || (lpChFont->Flags & CF_ENABLETEMPLATEHANDLE)) { if (lpChFont->Flags & CF_ENABLETEMPLATE) template = resource_to_dialog32(lpChFont->hInstance, MapSL(lpChFont->lpTemplateName), NULL); else template = handle_to_dialog32(lpChFont->hInstance, NULL); cf32.hInstance = (HGLOBAL)template; cf32.Flags |= CF_ENABLETEMPLATEHANDLE; } if (lpChFont->Flags & CF_ENABLEHOOK) { COMMDLGTHUNK *thunk = allocate_thunk(cf, (SEGPTR)lpChFont->lpfnHook); cf32.Flags |= CF_ENABLEHOOK; cf32.lpfnHook = (LPCFHOOKPROC)thunk; } if (!ChooseFontA( &cf32 )) return FALSE; lpChFont->iPointSize = cf32.iPointSize; lpChFont->Flags = cf32.Flags; lpChFont->rgbColors = cf32.rgbColors; lpChFont->lCustData = cf32.lCustData; lpChFont->nFontType = cf32.nFontType; font16->lfHeight = lf32.lfHeight; font16->lfWidth = lf32.lfWidth; font16->lfEscapement = lf32.lfEscapement; font16->lfOrientation = lf32.lfOrientation; font16->lfWeight = lf32.lfWeight; font16->lfItalic = lf32.lfItalic; font16->lfUnderline = lf32.lfUnderline; font16->lfStrikeOut = lf32.lfStrikeOut; font16->lfCharSet = lf32.lfCharSet; font16->lfOutPrecision = lf32.lfOutPrecision; font16->lfClipPrecision = lf32.lfClipPrecision; font16->lfQuality = lf32.lfQuality; font16->lfPitchAndFamily = lf32.lfPitchAndFamily; lstrcpynA( font16->lfFaceName, lf32.lfFaceName, LF_FACESIZE ); delete_thunk(cf32.lpfnHook); HeapFree(GetProcessHeap(), 0, template); return TRUE; } /*********************************************************************** * FormatCharDlgProc (COMMDLG.16) FIXME: 1. some strings are "hardcoded", but it's better load from sysres 2. some CF_.. flags are not supported 3. some TType extensions */ BOOL16 CALLBACK FormatCharDlgProc16(HWND16 hDlg16, UINT16 message, WPARAM16 wParam, LPARAM lParam) { FIXME( "%04x %04x %04x %08lx: stub\n", hDlg16, message, wParam, lParam ); return FALSE; } ================================================ FILE: commdlg/printdlg.c ================================================ /* * COMMDLG - Print Dialog * * Copyright 1994 Martin Ayotte * Copyright 1996 Albrecht Kleine * Copyright 1999 Klaas van Gend * Copyright 2000 Huw D M Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "wine/wingdi16.h" #include "winuser.h" #include "wine/winuser16.h" #include "commdlg.h" #include "dlgs.h" #include "wine/debug.h" #include "cderr.h" #include "winspool.h" #include "cdlg16.h" WINE_DEFAULT_DEBUG_CHANNEL(commdlg); /* Maximum length of a device name */ #define CCHDEVICENAME16 32 /* Maximum length of a paper name */ #define CCHPAPERNAME16 64 #pragma pack(push, 1) typedef struct { char dmDeviceName[CCHDEVICENAME16]; UINT16 dmSpecVersion; UINT16 dmDriverVersion; UINT16 dmSize; UINT16 dmDriverExtra; DWORD dmFields; INT16 dmOrientation; INT16 dmPaperSize; INT16 dmPaperLength; INT16 dmPaperWidth; INT16 dmScale; INT16 dmCopies; INT16 dmDefaultSource; INT16 dmPrintQuality; INT16 dmColor; INT16 dmDuplex; INT16 dmYResolution; INT16 dmTTOption; } DEVMODE16, *LPDEVMODE16; #pragma pack(pop) //sizeof(DEVMODE16) != sizeof(DEVMODEA) void DEVMODE16To32(CONST DEVMODE16 *src, LPDEVMODEA dst) { memcpy(dst->dmDeviceName, src->dmDeviceName, min(CCHDEVICENAME16, CCHDEVICENAME)); dst->dmDeviceName[CCHDEVICENAME - 1] = 0; dst->dmSpecVersion = 0x30a; dst->dmDriverVersion = src->dmDriverVersion; dst->dmSize = sizeof(DEVMODEA); dst->dmDriverExtra = 0; dst->dmFields = src->dmFields & 0x7fbf; dst->dmOrientation = src->dmOrientation; dst->dmPaperSize = src->dmPaperSize; dst->dmPaperLength = src->dmPaperLength; dst->dmPaperWidth = src->dmPaperWidth; dst->dmScale = src->dmScale; dst->dmCopies = src->dmCopies; dst->dmDefaultSource = src->dmDefaultSource; dst->dmPrintQuality = src->dmPrintQuality; dst->dmColor = src->dmColor; dst->dmDuplex = src->dmDuplex; dst->dmYResolution = src->dmYResolution; dst->dmTTOption = src->dmTTOption; } void DEVMODE32To16(LPDEVMODE16 dst, const LPDEVMODEA src) { memcpy(dst->dmDeviceName, src->dmDeviceName, min(CCHDEVICENAME16, CCHDEVICENAME)); dst->dmDeviceName[CCHDEVICENAME16 - 1] = 0; dst->dmSpecVersion = 0x30a; dst->dmDriverVersion = src->dmDriverVersion; dst->dmSize = sizeof(DEVMODE16); dst->dmDriverExtra = 0; dst->dmFields = src->dmFields & 0x7fbf; dst->dmOrientation = src->dmOrientation; dst->dmPaperSize = src->dmPaperSize; dst->dmPaperLength = src->dmPaperLength; dst->dmPaperWidth = src->dmPaperWidth; dst->dmScale = src->dmScale; dst->dmCopies = src->dmCopies; dst->dmDefaultSource = src->dmDefaultSource; dst->dmPrintQuality = src->dmPrintQuality; dst->dmColor = src->dmColor; dst->dmDuplex = src->dmDuplex; dst->dmYResolution = src->dmYResolution; dst->dmTTOption = src->dmTTOption; } static void global_handle_to_16( HGLOBAL16 *h16, HGLOBAL handle ) { DWORD size; HGLOBAL16 ret; if (!handle) return; size = GlobalSize( handle ); if (*h16) ret = GlobalReAlloc16( *h16, size, GMEM_MOVEABLE ); else ret = GlobalAlloc16( GMEM_MOVEABLE, size ); if (ret) { void *src = GlobalLock( handle ); void *dst = GlobalLock16( ret ); memcpy( dst, src, size ); GlobalUnlock( handle ); GlobalUnlock16( ret ); *h16 = ret; } } static HGLOBAL global_handle_from_16( HGLOBAL16 handle ) { DWORD size; HGLOBAL ret; if (!handle) return 0; size = GlobalSize16( handle ); if ((ret = GlobalAlloc( GMEM_MOVEABLE, size ))) { void *src = GlobalLock16( handle ); void *dst = GlobalLock( ret ); memcpy( dst, src, size ); GlobalUnlock16( handle ); GlobalUnlock( ret ); } return ret; } LPDLGTEMPLATEA resource_to_dialog32(HINSTANCE16 hInst, LPCSTR name, WORD *res) { HRSRC16 reso = FindResource16(hInst, name, (LPCSTR)RT_DIALOG); HGLOBAL16 handle = LoadResource16(hInst, reso); DWORD size = SizeofResource16(hInst, reso); SEGPTR ptr16 = WOWGlobalLock16(handle); DWORD size2; LPDLGTEMPLATEA r = dialog_template16_to_template32(hInst, ptr16, &size2, NULL); if (!res) FreeResource16(handle); else res = ptr16; return r; } LPDLGTEMPLATEA handle_to_dialog32(HGLOBAL16 hg, WORD *res) { DWORD size2; SEGPTR ptr16 = WOWGlobalLock16(hg); LPDLGTEMPLATEA r = dialog_template16_to_template32(NULL, ptr16, &size2, NULL); if (!res) WOWGlobalUnlock16(hg); else res = ptr16; return r; } /********************************************************************** * * 16 bit commdlg */ /*********************************************************************** * PrintDlg (COMMDLG.20) * * Displays the PRINT dialog box, which enables the user to specify * specific properties of the print job. * * RETURNS * nonzero if the user pressed the OK button * zero if the user cancelled the window or an error occurred * * BUGS * * calls up to the 32-bit versions of the Dialogs, which look different * * Customizing is *not* implemented. */ BOOL16 WINAPI PrintDlg16( SEGPTR pd ) { LPPRINTDLG16 lppd = MapSL(pd); PRINTDLGA pd32; BOOL ret; HINSTANCE16 hInst; LPDLGTEMPLATEA template_setup = NULL; LPDLGTEMPLATEA template_print = NULL; HGLOBAL *hdma = NULL; if (lppd->hDevMode) { hdma = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, sizeof(DEVMODEA)); DEVMODE16To32(GlobalLock16(lppd->hDevMode), GlobalLock(hdma)); GlobalUnlock(hdma); GlobalUnlock16(lppd->hDevMode); } if (!lppd) return PrintDlgA(NULL); /* generate failure with CDERR_INITIALIZATION */ pd32.lStructSize = sizeof(pd32); pd32.Flags = lppd->Flags & ~(PD_ENABLEPRINTTEMPLATE | PD_ENABLEPRINTTEMPLATEHANDLE | PD_ENABLESETUPTEMPLATE | PD_ENABLESETUPTEMPLATEHANDLE | PD_ENABLEPRINTHOOK | PD_ENABLESETUPHOOK); pd32.hwndOwner = HWND_32(lppd->hwndOwner); pd32.hDevMode = hdma; pd32.hDevNames = global_handle_from_16( lppd->hDevNames ); pd32.nFromPage = lppd->nFromPage; pd32.nToPage = lppd->nToPage; pd32.nMinPage = lppd->nMinPage; pd32.nMaxPage = lppd->nMaxPage; pd32.nCopies = lppd->nCopies; pd32.lpfnPrintHook = NULL; pd32.lpfnSetupHook = NULL; hInst = lppd->hInstance; if ((lppd->Flags & PD_ENABLEPRINTTEMPLATE) || (lppd->Flags & PD_ENABLEPRINTTEMPLATEHANDLE)) { if (lppd->Flags & PD_ENABLEPRINTTEMPLATE) template_print = resource_to_dialog32(hInst, MapSL(lppd->lpPrintTemplateName), NULL); else template_print = handle_to_dialog32(lppd->hPrintTemplate, NULL); pd32.hPrintTemplate = (HGLOBAL)template_print; pd32.Flags |= PD_ENABLEPRINTTEMPLATEHANDLE; } if ((lppd->Flags & PD_ENABLESETUPTEMPLATE) || (lppd->Flags & PD_ENABLESETUPTEMPLATEHANDLE)) { if (lppd->Flags & PD_ENABLESETUPTEMPLATE) template_setup = resource_to_dialog32(hInst, MapSL(lppd->lpSetupTemplateName), NULL); else template_setup = handle_to_dialog32(lppd->hSetupTemplate, NULL); pd32.hSetupTemplate = (HGLOBAL)template_setup; pd32.Flags |= PD_ENABLESETUPTEMPLATEHANDLE; } if (lppd->Flags & PD_ENABLEPRINTHOOK) { COMMDLGTHUNK *thunk = allocate_thunk(pd, (SEGPTR)lppd->lpfnPrintHook); pd32.Flags |= PD_ENABLEPRINTHOOK; pd32.lpfnPrintHook = (LPPRINTHOOKPROC)thunk; } if (lppd->Flags & PD_ENABLESETUPHOOK) { COMMDLGTHUNK *thunk = allocate_thunk(pd, (SEGPTR)lppd->lpfnSetupHook); pd32.Flags |= PD_ENABLESETUPHOOK; pd32.lpfnSetupHook = (LPSETUPHOOKPROC)thunk; } /* Generate failure with CDERR_STRUCTSIZE, when needed */ if (lppd->lStructSize != sizeof(PRINTDLG16)) pd32.lStructSize--; if ((ret = PrintDlgA( &pd32 ))) { lppd->hDC = HDC_16( pd32.hDC ); global_handle_to_16( &lppd->hDevNames, pd32.hDevNames ); lppd->nFromPage = pd32.nFromPage; lppd->nToPage = pd32.nToPage; lppd->nMinPage = pd32.nMinPage; lppd->nMaxPage = pd32.nMaxPage; lppd->nCopies = pd32.nCopies; if (pd32.hDevMode) { if (!lppd->hDevMode) lppd->hDevMode = GlobalAlloc16(GMEM_MOVEABLE, sizeof(DEVMODE16)); DEVMODE32To16(GlobalLock16(lppd->hDevMode), GlobalLock(pd32.hDevMode)); GlobalUnlock(pd32.hDevMode); GlobalUnlock16(lppd->hDevMode); } } GlobalFree( pd32.hDevNames ); GlobalFree( pd32.hDevMode ); delete_thunk(pd32.lpfnPrintHook); delete_thunk(pd32.lpfnSetupHook); HeapFree(GetProcessHeap(), 0, template_setup); HeapFree(GetProcessHeap(), 0, template_print); return ret; } /*********************************************************************** * PrintDlgProc (COMMDLG.21) */ BOOL16 CALLBACK PrintDlgProc16(HWND16 hDlg16, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam) { FIXME( "%04x %04x %04x %08lx: stub\n", hDlg16, uMsg, wParam, lParam ); return FALSE; } /*********************************************************************** * PrintSetupDlgProc (COMMDLG.22) */ BOOL16 CALLBACK PrintSetupDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam) { HWND hWnd = HWND_32(hWnd16); switch (wMsg) { case WM_INITDIALOG: TRACE("WM_INITDIALOG lParam=%08lX\n", lParam); ShowWindow(hWnd, SW_SHOWNORMAL); return (TRUE); case WM_COMMAND: switch (wParam) { case IDOK: EndDialog(hWnd, TRUE); return(TRUE); case IDCANCEL: EndDialog(hWnd, FALSE); return(TRUE); } return(FALSE); } return FALSE; } ================================================ FILE: commdlg/resource.h ================================================ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ ŐꂽCN[h t@CB // commdlg.rc Ŏgp // #define IDB_BITMAP1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif ================================================ FILE: compobj/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(compobj SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/compobj.def compobj.dll16.obj) include_directories(../wine ${CMAKE_BINARY_DIR}) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(compobj.dll16 compobj) target_link_libraries(compobj libwine winecrt0 krnl386 ole2 ole32.lib) set_target_properties(compobj PROPERTIES SUFFIX ".dll16") ================================================ FILE: compobj/Makefile.in ================================================ MODULE = compobj.dll16 IMPORTS = uuid ole32 advapi32 EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll C_SRCS = compobj.c ================================================ FILE: compobj/compobj.c ================================================ /* * 16 bit ole functions * * Copyright 1995 Martin von Loewis * Copyright 1998 Justin Bradford * Copyright 1999 Francis Beaudet * Copyright 1999 Sylvain St-Germain * Copyright 2002 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "winuser.h" #include "objbase.h" #include "ole2.h" #include "rpc.h" #include "winerror.h" #include "winreg.h" #include "wownt32.h" #include "wtypes.h" #include "wine/unicode.h" #include "wine/winbase16.h" #include "wine/debug.h" #include "../ole2/ifs.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); WINE_DECLARE_DEBUG_CHANNEL(olemalloc); #define CHARS_IN_GUID 39 static HTASK16 hETask = 0; static WORD Table_ETask[62]; static LPMALLOC16 currentMalloc16=NULL; /* --- IMalloc16 implementation */ typedef struct { IMalloc16 IMalloc16_iface; DWORD ref; } IMalloc16Impl; static inline IMalloc16Impl *impl_from_IMalloc16(IMalloc16 *iface) { return CONTAINING_RECORD(iface, IMalloc16Impl, IMalloc16_iface); } /****************************************************************************** * IMalloc16_QueryInterface [COMPOBJ.500] */ HRESULT CDECL IMalloc16_fnQueryInterface(IMalloc16* iface,REFIID refiid,LPVOID *obj) { IMalloc16Impl *This = impl_from_IMalloc16(iface); TRACE_(olemalloc)("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj); if ( !memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) || !memcmp(&IID_IMalloc,refiid,sizeof(IID_IMalloc)) ) { *obj = This; return 0; } return OLE_E_ENUM_NOMORE; } /****************************************************************************** * IMalloc16_AddRef [COMPOBJ.501] */ ULONG CDECL IMalloc16_fnAddRef(IMalloc16* iface) { IMalloc16Impl *This = impl_from_IMalloc16(iface); TRACE_(olemalloc)("(%p)->AddRef()\n",This); return 1; /* cannot be freed */ } /****************************************************************************** * IMalloc16_Release [COMPOBJ.502] */ ULONG CDECL IMalloc16_fnRelease(IMalloc16* iface) { IMalloc16Impl *This = impl_from_IMalloc16(iface); TRACE_(olemalloc)("(%p)->Release()\n",This); return 1; /* cannot be freed */ } /****************************************************************************** * IMalloc16_Alloc [COMPOBJ.503] */ SEGPTR CDECL IMalloc16_fnAlloc(IMalloc16* iface,DWORD cb) { IMalloc16Impl *This = impl_from_IMalloc16(iface); LPVOID a = HeapAlloc( GetProcessHeap(), 0, cb ); SEGPTR s = MapLS(a); TRACE_(olemalloc)("(%p)->Alloc(%d)=>%p(%04x:%04x)\n",This,cb,a,SELECTOROF(s),OFFSETOF(s)); return s; } /****************************************************************************** * IMalloc16_Free [COMPOBJ.505] */ VOID CDECL IMalloc16_fnFree(IMalloc16* iface,SEGPTR pv) { void *ptr = MapSL(pv); IMalloc16Impl *This = impl_from_IMalloc16(iface); TRACE_(olemalloc)("(%p)->Free(%p(%04x:%04x))\n",This,ptr,SELECTOROF(pv),OFFSETOF(pv)); // UnMapLS(pv); /* * Corel Move 5.0 passes the allocated pointer plus 4 bytes. * https://support.microsoft.com/en-us/help/286470/how-to-use-pageheap-exe-in-windows-xp-windows-2000-and-windows-server * The Windows heap managers (all versions) have always guaranteed that the * heap allocations have a start address that is 8-byte aligned (on 64-bit * platforms the alignment is 16-bytes). */ HeapFree( GetProcessHeap(), 0, (LPVOID)((SIZE_T)ptr & ~7) ); } /****************************************************************************** * IMalloc16_Realloc [COMPOBJ.504] */ SEGPTR CDECL IMalloc16_fnRealloc(IMalloc16* iface,SEGPTR pv,DWORD cb) { SEGPTR ret; IMalloc16Impl *This = impl_from_IMalloc16(iface); TRACE_(olemalloc)("(%p)->Realloc(%08x,%d)\n",This,pv,cb); if (!pv) ret = IMalloc16_fnAlloc(iface, cb); else if (cb) { ret = MapLS( HeapReAlloc( GetProcessHeap(), 0, MapSL(pv), cb ) ); UnMapLS(pv); } else { IMalloc16_fnFree(iface, pv); ret = 0; } return ret; } /****************************************************************************** * IMalloc16_GetSize [COMPOBJ.506] */ DWORD CDECL IMalloc16_fnGetSize(IMalloc16* iface,SEGPTR pv) { IMalloc16Impl *This = impl_from_IMalloc16(iface); TRACE_(olemalloc)("(%p)->GetSize(%08x)\n",This,pv); return HeapSize( GetProcessHeap(), 0, MapSL(pv) ); } /****************************************************************************** * IMalloc16_DidAlloc [COMPOBJ.507] */ INT16 CDECL IMalloc16_fnDidAlloc(IMalloc16* iface,LPVOID pv) { IMalloc16Impl *This = impl_from_IMalloc16(iface); TRACE_(olemalloc)("(%p)->DidAlloc(%p)\n",This,pv); return (INT16)-1; } /****************************************************************************** * IMalloc16_HeapMinimize [COMPOBJ.508] */ LPVOID CDECL IMalloc16_fnHeapMinimize(IMalloc16* iface) { IMalloc16Impl *This = impl_from_IMalloc16(iface); TRACE_(olemalloc)("(%p)->HeapMinimize()\n",This); return NULL; } /****************************************************************************** * IMalloc16_Constructor [VTABLE] */ static LPMALLOC16 IMalloc16_Constructor(void) { static IMalloc16Vtbl vt16; static SEGPTR msegvt16; IMalloc16Impl* This; HMODULE16 hcomp = GetModuleHandle16("COMPOBJ"); This = HeapAlloc( GetProcessHeap(), 0, sizeof(IMalloc16Impl) ); if (!msegvt16) { #define VTENT(x) vt16.x = (void*)GetProcAddress16(hcomp,"IMalloc16_"#x);assert(vt16.x) VTENT(QueryInterface); VTENT(AddRef); VTENT(Release); VTENT(Alloc); VTENT(Realloc); VTENT(Free); VTENT(GetSize); VTENT(DidAlloc); VTENT(HeapMinimize); #undef VTENT msegvt16 = MapLS( &vt16 ); } This->IMalloc16_iface.lpVtbl = (const IMalloc16Vtbl*)msegvt16; This->ref = 1; return (LPMALLOC16)MapLS( This ); } /****************************************************************************** * CoBuildVersion [COMPOBJ.1] */ DWORD WINAPI CoBuildVersion16(void) { return CoBuildVersion(); } typedef struct { SEGPTR malloc16; } ole16_task_data; static BOOL init_current_task_tls; static DWORD current_task_tls; static ole16_task_data *get_current_task_data() { ole16_task_data *d; if (!init_current_task_tls) { current_task_tls = TlsAlloc(); init_current_task_tls = TRUE; } d = (ole16_task_data*)TlsGetValue(current_task_tls); if (!d) { d = (ole16_task_data*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ole16_task_data)); TlsSetValue(current_task_tls, d); } return d; } SEGPTR shared_malloc16; HRESULT WINAPI get_task_imalloc16(SEGPTR *lpMalloc) { ole16_task_data *d = get_current_task_data(); if (!d->malloc16) { *lpMalloc = 0; ERR("CO_E_NOTINITIALIZED\n"); return CO_E_NOTINITIALIZED; } *lpMalloc = d->malloc16; return S_OK; } /*********************************************************************** * CoGetMalloc [COMPOBJ.4] * * Retrieve the current win16 IMalloc interface. * * RETURNS * The current win16 IMalloc */ HRESULT WINAPI CoGetMalloc16( MEMCTX dwMemContext, /* [in] memory context */ SEGPTR * lpMalloc /* [out] current win16 malloc interface */ ) { ole16_task_data *d; if (dwMemContext == MEMCTX_SHARED) { if (!shared_malloc16) { shared_malloc16 = IMalloc16_Constructor(); } *lpMalloc = shared_malloc16; return S_OK; } d = get_current_task_data(); if (!d->malloc16) { *lpMalloc = 0; ERR("CO_E_NOTINITIALIZED\n"); return CO_E_NOTINITIALIZED; } if (dwMemContext == MEMCTX_TASK) { *lpMalloc = d->malloc16; IMalloc16_AddRef(d->malloc16); return S_OK; } *lpMalloc = 0; return E_INVALIDARG16; } /*********************************************************************** * CoCreateStandardMalloc [COMPOBJ.71] */ HRESULT WINAPI CoCreateStandardMalloc16(MEMCTX dwMemContext, SEGPTR *lpMalloc) { /* FIXME: docu says we shouldn't return the same allocator as in * CoGetMalloc16 */ *lpMalloc = IMalloc16_Constructor(); return S_OK; } /****************************************************************************** * CoInitialize [COMPOBJ.2] * Set the win16 IMalloc used for memory management */ HRESULT WINAPI CoInitialize16( SEGPTR lpReserved /* [in] pointer to win16 malloc interface */ ) { ole16_task_data *d = get_current_task_data(); if (d->malloc16) return S_FALSE; if (!lpReserved) { lpReserved = IMalloc16_Constructor(); } d->malloc16 = (LPMALLOC16)lpReserved; TRACE("IMalloc->QueryInterface: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, QueryInterface)); TRACE("IMalloc->AddRef: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, AddRef)); TRACE("IMalloc->Release: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, Release)); TRACE("IMalloc->Alloc: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, Alloc)); TRACE("IMalloc->Realloc: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, Realloc)); TRACE("IMalloc->Free: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, Free)); TRACE("IMalloc->GetSize: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, GetSize)); TRACE("IMalloc->DidAlloc: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, DidAlloc)); TRACE("IMalloc->HeapMinimize: %08x\n", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, HeapMinimize)); IMalloc16_AddRef(d->malloc16); return S_OK; } /*********************************************************************** * CoUninitialize [COMPOBJ.3] * Don't know what it does. * 3-Nov-98 -- this was originally misspelled, I changed it to what I * believe is the correct spelling */ void WINAPI CoUninitialize16(void) { ole16_task_data *d = get_current_task_data(); TRACE("()\n"); if (d->malloc16) { IMalloc16_Release(d->malloc16); } CoFreeAllLibraries(); } /*********************************************************************** * CoFreeUnusedLibraries [COMPOBJ.17] */ void WINAPI CoFreeUnusedLibraries16(void) { CoFreeUnusedLibraries(); } /*********************************************************************** * IsEqualGUID [COMPOBJ.18] * * Compares two Unique Identifiers. * * RETURNS * TRUE if equal */ BOOL16 WINAPI IsEqualGUID16( GUID* g1, /* [in] unique id 1 */ GUID* g2) /* [in] unique id 2 */ { return !memcmp( g1, g2, sizeof(GUID) ); } HRESULT WINAPI guid_str_to_clsid(LPCOLESTR16 idstr, CLSID *id); HRESULT WINAPI progid_to_clsid(LPCOLESTR16 idstr, CLSID *id); HRESULT WINAPI IIDFromString16(LPSTR lpsz, LPIID lpiid) { HRESULT r; if (!lpiid) return E_INVALIDARG16; if (!lpsz) { memset(lpiid, 0, sizeof(CLSID)); return S_OK; } r = guid_str_to_clsid((LPCOLESTR16)lpsz, (CLSID*)lpiid); if (r == CO_E_CLASSSTRING) r = CO_E_IIDSTRING; return r; } /****************************************************************************** * CLSIDFromString [COMPOBJ.20] * Converts a unique identifier from its string representation into * the GUID struct. * * Class id: DWORD-WORD-WORD-BYTES[2]-BYTES[6] * * RETURNS * the converted GUID */ HRESULT WINAPI CLSIDFromString16( LPCOLESTR16 idstr, /* [in] string representation of (guid or ProgId) */ CLSID *id) /* [out] GUID converted from string */ { HRESULT r = guid_str_to_clsid(idstr, id); if (SUCCEEDED(r)) return r; return progid_to_clsid(idstr, id); } HRESULT WINAPI guid_str_to_clsid(LPCOLESTR16 idstr, CLSID *id) { const BYTE *s; int i; BYTE table[256]; /* validate the CLSID string */ if (strlen(idstr) != 38) goto invalid_guid; s = (const BYTE *) idstr; if ((s[0]!='{') || (s[9]!='-') || (s[14]!='-') || (s[19]!='-') || (s[24]!='-') || (s[37]!='}')) goto invalid_guid; for (i=1; i<37; i++) { if ((i == 9)||(i == 14)||(i == 19)||(i == 24)) continue; if (!(((s[i] >= '0') && (s[i] <= '9')) || ((s[i] >= 'a') && (s[i] <= 'f')) || ((s[i] >= 'A') && (s[i] <= 'F')))) goto invalid_guid; } TRACE("%s -> %p\n", s, id); /* quick lookup table */ memset(table, 0, 256); for (i = 0; i < 10; i++) { table['0' + i] = i; } for (i = 0; i < 6; i++) { table['A' + i] = i+10; table['a' + i] = i+10; } /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */ id->Data1 = (table[s[1]] << 28 | table[s[2]] << 24 | table[s[3]] << 20 | table[s[4]] << 16 | table[s[5]] << 12 | table[s[6]] << 8 | table[s[7]] << 4 | table[s[8]]); id->Data2 = table[s[10]] << 12 | table[s[11]] << 8 | table[s[12]] << 4 | table[s[13]]; id->Data3 = table[s[15]] << 12 | table[s[16]] << 8 | table[s[17]] << 4 | table[s[18]]; /* these are just sequential bytes */ id->Data4[0] = table[s[20]] << 4 | table[s[21]]; id->Data4[1] = table[s[22]] << 4 | table[s[23]]; id->Data4[2] = table[s[25]] << 4 | table[s[26]]; id->Data4[3] = table[s[27]] << 4 | table[s[28]]; id->Data4[4] = table[s[29]] << 4 | table[s[30]]; id->Data4[5] = table[s[31]] << 4 | table[s[32]]; id->Data4[6] = table[s[33]] << 4 | table[s[34]]; id->Data4[7] = table[s[35]] << 4 | table[s[36]]; return S_OK; invalid_guid: return CO_E_CLASSSTRING; } HRESULT WINAPI progid_to_clsid(LPCOLESTR16 idstr, CLSID *id) { HKEY hkey = NULL; CHAR clsid[50]; DWORD cbclsid = sizeof(clsid); LPOLESTR w; HRESULT r; if (RegOpenKey16(HKEY_CLASSES_ROOT, idstr, &hkey)) { goto error; } if (RegQueryValue16(hkey, "CLSID", clsid, &cbclsid)) { RegCloseKey16(hkey); goto error; } RegCloseKey16(hkey); return guid_str_to_clsid(clsid, id); error: w = strdupAtoW(idstr); r = CLSIDFromString(w, id); HeapFree(GetProcessHeap(), 0, w); return hresult32_16(r); } /****************************************************************************** * _xmalloc16 [internal] * Allocates size bytes from the standard ole16 allocator. * * RETURNS * the allocated segmented pointer and a HRESULT */ static HRESULT _xmalloc16(DWORD size, SEGPTR *ptr) { LPMALLOC16 mllc; DWORD args[2]; if (get_task_imalloc16(&mllc)) return E_OUTOFMEMORY; args[0] = (DWORD)mllc; args[1] = size; /* No need for a Callback entry, we have WOWCallback16Ex which does * everything we need. */ if (!WOWCallback16Ex( (DWORD)((const IMalloc16Vtbl*)MapSL( (SEGPTR)((LPMALLOC16)MapSL((SEGPTR)mllc))->lpVtbl ) )->Alloc, WCB16_CDECL, 2*sizeof(DWORD), (LPVOID)args, (LPDWORD)ptr )) { ERR("CallTo16 IMalloc16 (%d) failed\n",size); return E_FAIL; } return S_OK; } /****************************************************************************** * StringFromCLSID [COMPOBJ.19] * StringFromIID [COMPOBJ.14] * Converts a GUID into the respective string representation. * The target string is allocated using the OLE IMalloc. * * RETURNS * the string representation and HRESULT */ HRESULT WINAPI StringFromCLSID16( REFCLSID id, /* [in] the GUID to be converted */ LPOLESTR16 *idstr ) /* [out] a pointer to a to-be-allocated segmented pointer pointing to the resulting string */ { WCHAR buffer[40]; HRESULT ret; ret = _xmalloc16(40,(SEGPTR*)idstr); if (ret != S_OK) return ret; StringFromGUID2( id, buffer, 40 ); WideCharToMultiByte( CP_ACP, 0, buffer, -1, MapSL((SEGPTR)*idstr), 40, NULL, NULL ); return ret; } /****************************************************************************** * ProgIDFromCLSID [COMPOBJ.62] * * Converts a class id into the respective Program ID. (By using a registry lookup) * * RETURNS * S_OK on success * riid associated with the progid */ HRESULT WINAPI ProgIDFromCLSID16( REFCLSID clsid, /* [in] class id as found in registry */ LPOLESTR16 *lplpszProgID )/* [out] associated Program ID */ { LPOLESTR progid; HRESULT ret; if (!lplpszProgID) { return E_INVALIDARG16; } ret = ProgIDFromCLSID( clsid, &progid ); if (ret == S_OK) { INT len = WideCharToMultiByte( CP_ACP, 0, progid, -1, NULL, 0, NULL, NULL ); ret = _xmalloc16(len, (SEGPTR*)lplpszProgID); if (ret == S_OK) WideCharToMultiByte( CP_ACP, 0, progid, -1, MapSL((SEGPTR)*lplpszProgID), len, NULL, NULL ); CoTaskMemFree( progid ); } else { *lplpszProgID = 0; } return ret; } /*********************************************************************** * LookupETask (COMPOBJ.94) */ HRESULT WINAPI LookupETask16(HTASK16 *hTask,LPVOID p) { FIXME("(%p,%p),stub!\n",hTask,p); if ((*hTask = GetCurrentTask()) == hETask) { memcpy(p, Table_ETask, sizeof(Table_ETask)); } return 0; } /*********************************************************************** * SetETask (COMPOBJ.95) */ HRESULT WINAPI SetETask16(HTASK16 hTask, LPVOID p) { FIXME("(%04x,%p),stub!\n",hTask,p); hETask = hTask; return 0; } /*********************************************************************** * CALLOBJECTINWOW (COMPOBJ.201) */ HRESULT WINAPI CallObjectInWOW(LPVOID p1,LPVOID p2) { FIXME("(%p,%p),stub!\n",p1,p2); return 0; } /****************************************************************************** * CoRegisterClassObject [COMPOBJ.5] * * Don't know where it registers it ... */ HRESULT WINAPI CoRegisterClassObject16( REFCLSID rclsid, /*LPUNKNOWN16*/SEGPTR pUnk, DWORD dwClsContext, /* [in] CLSCTX flags indicating the context in which to run the executable */ DWORD flags, /* [in] REGCLS flags indicating how connections are made */ LPDWORD lpdwRegister ) { HRESULT result; TRACE("(%s,%p,0x%08x,0x%08x,%p)\n", debugstr_guid(rclsid),pUnk,dwClsContext,flags,lpdwRegister ); result = hresult32_16(CoRegisterClassObject(rclsid, (IUnknown*)iface16_32(&IID_IUnknown, pUnk), dwClsContext, flags, lpdwRegister)); TRACE("%08x\n", result); return result; } /****************************************************************************** * CoRevokeClassObject [COMPOBJ.6] * */ HRESULT WINAPI CoRevokeClassObject16(DWORD dwRegister) /* [in] token on class obj */ { TRACE("(0x%08x)\n", dwRegister); return hresult32_16(CoRevokeClassObject(dwRegister)); } /****************************************************************************** * IsValidInterface [COMPOBJ.23] * * Determines whether a pointer is a valid interface. * * PARAMS * punk [I] Interface to be tested. * * RETURNS * TRUE, if the passed pointer is a valid interface, or FALSE otherwise. */ BOOL WINAPI IsValidInterface16(SEGPTR punk) { DWORD **ptr; if (IsBadReadPtr16(punk,4)) return FALSE; ptr = MapSL(punk); if (IsBadReadPtr16((SEGPTR)ptr[0],4)) /* check vtable ptr */ return FALSE; ptr = MapSL((SEGPTR)ptr[0]); /* ptr to first method */ if (IsBadReadPtr16((SEGPTR)ptr[0],2)) return FALSE; return TRUE; } /****************************************************************************** * CoFileTimeToDosDateTime [COMPOBJ.30] */ BOOL16 WINAPI CoFileTimeToDosDateTime16(const FILETIME *ft, LPWORD lpDosDate, LPWORD lpDosTime) { return FileTimeToDosDateTime(ft, lpDosDate, lpDosTime); } /****************************************************************************** * CoDosDateTimeToFileTime [COMPOBJ.31] */ BOOL16 WINAPI CoDosDateTimeToFileTime16(WORD wDosDate, WORD wDosTime, FILETIME *ft) { return DosDateTimeToFileTime(wDosDate, wDosTime, ft); } /****************************************************************************** * CoGetCurrentProcess [COMPOBJ.34] */ DWORD WINAPI CoGetCurrentProcess16(void) { return CoGetCurrentProcess(); } /****************************************************************************** * CoRegisterMessageFilter [COMPOBJ.27] */ HRESULT WINAPI CoRegisterMessageFilter16( SEGPTR lpMessageFilter, SEGPTR *lplpMessageFilter ) { HRESULT result; LPMESSAGEFILTER lpmsgf = NULL; TRACE("(%p,%p)\n",lpMessageFilter,lplpMessageFilter); result = hresult32_16(CoRegisterMessageFilter((IMessageFilter*)iface16_32(&IID_IMessageFilter, lpMessageFilter), lplpMessageFilter ? &lpmsgf : NULL)); if (lplpMessageFilter) *lplpMessageFilter = iface32_16(&IID_IMessageFilter, lpmsgf); return result; } /****************************************************************************** * CoLockObjectExternal [COMPOBJ.63] */ HRESULT WINAPI CoLockObjectExternal16( /*LPUNKNOWN*/SEGPTR pUnk, /* [in] object to be locked */ BOOL16 fLock, /* [in] do lock */ BOOL16 fLastUnlockReleases /* [in] ? */ ) { TRACE("(%p,%d,%d)\n",pUnk,fLock,fLastUnlockReleases); return CoLockObjectExternal((IUnknown*)iface16_32(&IID_IUnknown, pUnk), fLock, fLastUnlockReleases); } /*********************************************************************** * CoGetState [COMPOBJ.115] */ HRESULT WINAPI CoGetState16(LPDWORD state) { FIXME("(%p),stub!\n", state); *state = 0; return S_OK; } /*********************************************************************** * DllEntryPoint [COMPOBJ.116] * * Initialization code for the COMPOBJ DLL * * RETURNS: */ BOOL WINAPI COMPOBJ_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst, WORD ds, WORD HeapSize, DWORD res1, WORD res2) { TRACE("(%08x, %04x, %04x, %04x, %08x, %04x)\n", Reason, hInst, ds, HeapSize, res1, res2); return TRUE; } /*********************************************************************** * CoMemAlloc [COMPOBJ.151] */ SEGPTR WINAPI CoMemAlloc(DWORD size, MEMCTX dwMemContext, DWORD x) { HRESULT hres; SEGPTR segptr; /* FIXME: check context handling */ TRACE("(%d, 0x%08x, 0x%08x)\n", size, dwMemContext, x); hres = _xmalloc16(size, &segptr); if (hres != S_OK) return 0; return segptr; } /****************************************************************************** * CLSIDFromProgID [COMPOBJ.61] * * Converts a program ID into the respective GUID. * * PARAMS * progid [I] program id as found in registry * riid [O] associated CLSID * * RETURNS * Success: S_OK * Failure: CO_E_CLASSSTRING - the given ProgID cannot be found. */ HRESULT WINAPI CLSIDFromProgID16(LPCOLESTR16 progid, LPCLSID riid) { char *buf,buf2[80]; LONG buf2len; HKEY xhkey; buf = HeapAlloc(GetProcessHeap(),0,strlen(progid)+8); sprintf(buf,"%s\\CLSID",progid); if (RegOpenKey16(HKEY_CLASSES_ROOT,buf,&xhkey)) { HeapFree(GetProcessHeap(),0,buf); return CO_E_CLASSSTRING; } HeapFree(GetProcessHeap(),0,buf); buf2len = sizeof(buf2); if (RegQueryValue16(xhkey,NULL,buf2,&buf2len)) { RegCloseKey(xhkey); return CO_E_CLASSSTRING; } RegCloseKey(xhkey); return CLSIDFromString16(buf2,riid); } /****************************************************************************** * StringFromGUID2 [COMPOBJ.76] */ INT16 WINAPI StringFromGUID216(REFGUID id, LPOLESTR16 str, INT16 cmax) { static const char format[] = "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"; if (!id || cmax < CHARS_IN_GUID) return 0; sprintf( str, format, id->Data1, id->Data2, id->Data3, id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3], id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] ); return CHARS_IN_GUID; } /*********************************************************************** * CoFileTimeNow [COMPOBJ.82] */ HRESULT WINAPI CoFileTimeNow16( FILETIME *lpFileTime ) { return CoFileTimeNow( lpFileTime ); } /*********************************************************************** * CoGetClassObject [COMPOBJ.7] * */ HRESULT WINAPI CoGetClassObject16( SEGPTR rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, SEGPTR riid, SEGPTR ppv) { LPVOID *ppvl = MapSL(ppv); char idstr[CHARS_IN_GUID]; char buf_key[CHARS_IN_GUID+190], dllpath[MAX_PATH+1]; LONG dllpath_len = sizeof(dllpath); HRESULT err_last = E_NOTIMPL16; TRACE("CLSID: %s, IID: %s\n", debugstr_guid(MapSL(rclsid)), debugstr_guid(MapSL(riid))); *ppvl = NULL; StringFromGUID216(MapSL(rclsid), idstr, CHARS_IN_GUID); if (pServerInfo) { FIXME("pServerInfo->name=%s pAuthInfo=%p\n", debugstr_w(pServerInfo->pwszName), pServerInfo->pAuthInfo); } if (CLSCTX_INPROC_SERVER & dwClsContext) { HMODULE16 dll; FARPROC16 DllGetClassObject; WORD args[6]; DWORD dwRet; sprintf(buf_key, "CLSID\\%s\\InprocServer", idstr); if (RegQueryValue16(HKEY_CLASSES_ROOT, buf_key, dllpath, &dllpath_len)) { /* 64-bit COM...? */ sprintf(buf_key, "CLSID\\%s\\InprocServer32", idstr); dllpath_len = sizeof(dllpath); if (!RegQueryValue16(HKEY_CLASSES_ROOT, buf_key, dllpath, &dllpath_len)) { PVOID pv = NULL; HRESULT result; result = CoGetClassObject((REFCLSID)MapSL(rclsid), CLSCTX_INPROC_SERVER, pServerInfo, (REFIID)MapSL(riid), &pv); *(SEGPTR*)MapSL(ppv) = iface32_16((REFIID)MapSL(riid), pv); return hresult32_16(result); } ERR("class %s not registered\n", debugstr_guid(MapSL(rclsid))); err_last = REGDB_E_CLASSNOTREG; goto fail_inproc; } dll = LoadLibrary16(dllpath); if (dll < 32) { ERR("couldn't load in-process dll %s\n", debugstr_a(dllpath)); err_last = E_ACCESSDENIED16; /* FIXME: or should this be CO_E_DLLNOTFOUND? */ goto fail_inproc; } DllGetClassObject = GetProcAddress16(dll, "DllGetClassObject"); if (!DllGetClassObject) { ERR("couldn't find function DllGetClassObject in %s\n", debugstr_a(dllpath)); FreeLibrary16(dll); err_last = CO_E_DLLNOTFOUND; goto fail_inproc; } TRACE("calling DllGetClassObject %p\n", DllGetClassObject); args[5] = SELECTOROF(rclsid); args[4] = OFFSETOF(rclsid); args[3] = SELECTOROF(riid); args[2] = OFFSETOF(riid); args[1] = SELECTOROF(ppv); args[0] = OFFSETOF(ppv); WOWCallback16Ex((DWORD) DllGetClassObject, WCB16_PASCAL, sizeof(args), args, &dwRet); if (dwRet != S_OK) { ERR("DllGetClassObject returned error 0x%08x\n", dwRet); FreeLibrary16(dll); return dwRet; } return S_OK; } fail_inproc: if (CLSCTX_LOCAL_SERVER & dwClsContext) { HRESULT result; PVOID pv = NULL; result = CoGetClassObject((REFCLSID)MapSL(rclsid), dwClsContext, pServerInfo, (REFIID)MapSL(riid), &pv); *(SEGPTR*)MapSL(ppv) = iface32_16((REFCLSID)MapSL(riid), pv); return hresult32_16(result); } fail_svr: FIXME("semi-stub\n"); return err_last; } /****************************************************************************** * CoCreateGuid [COMPOBJ.73] */ HRESULT WINAPI CoCreateGuid16(GUID *pguid) { return CoCreateGuid( pguid ); } /*********************************************************************** * CoCreateInstance [COMPOBJ.13] */ HRESULT WINAPI CoCreateInstance16( /* REFCLSID */SEGPTR srclsid, SEGPTR pUnkOuter, DWORD dwClsContext, /* REFIID */SEGPTR siid, /* SEGPTR* */SEGPTR sppv) { LPVOID pv; HRESULT result; REFCLSID rclsid = (REFCLSID)MapSL(srclsid); REFIID iid = (REFIID)MapSL(siid); SEGPTR *ppv = (SEGPTR*)MapSL(sppv); TRACE("(%s, %p, %x, %s, %p)\n", debugstr_guid(rclsid), pUnkOuter, dwClsContext, debugstr_guid(iid), ppv ); result = CoCreateInstance(rclsid, (IUnknown*)iface16_32(&IID_IUnknown, pUnkOuter), dwClsContext, iid, &pv); if (result == REGDB_E_CLASSNOTREG) { SEGPTR cf; result = CoGetClassObject16(srclsid, dwClsContext, NULL, MapLS(&IID_IClassFactory), MapLS(&cf)); if (SUCCEEDED(result)) { result = IClassFactory16_CreateInstance(cf, pUnkOuter, siid, sppv); IClassFactory16_Release(cf); return result; } return hresult32_16(result); } *ppv = iface32_16(iid, pv); return hresult32_16(result); } /*********************************************************************** * CoDisconnectObject [COMPOBJ.15] */ HRESULT WINAPI CoDisconnectObject16( /*LPUNKNOWN*/SEGPTR lpUnk, DWORD reserved ) { TRACE("(%p, 0x%08x)\n", lpUnk, reserved); return hresult32_16(CoDisconnectObject((IUnknown*)iface16_32(&IID_IUnknown, lpUnk), reserved)); } HRESULT WINAPI CoIsOle1Class16(REFCLSID rclsid) { TRACE("(%p)\n", rclsid); return hresult32_16(CoIsOle1Class(rclsid)); } HRESULT WINAPI FnAssert16(LPCSTR expr, LPCSTR msg, LPCSTR file, WORD line) { TRACE("(%s,%s,%s,%d)\n", debugstr_a(expr), debugstr_a(msg), debugstr_a(msg), line); return S_OK; } HRESULT WINAPI CoGetTreatAsClass16(REFCLSID clsidOld, LPCLSID pClsidNew) { HRESULT r; TRACE("(%s,%p)\n", debugstr_guid(clsidOld), pClsidNew); r = CoGetTreatAsClass(clsidOld, pClsidNew); return hresult32_16(r); } HRESULT WINAPI CoTreatAsClass16(REFCLSID clsidOld, REFCLSID clsidNew) { HRESULT r; TRACE("(%s,%p)\n", debugstr_guid(clsidOld), debugstr_guid(clsidNew)); r = CoTreatAsClass(clsidOld, clsidNew); if (r == REGDB_E_WRITEREGDB) { ERR("REGDB_E_WRITEREGDB\n"); } return hresult32_16(r); } ================================================ FILE: compobj/compobj.def ================================================ ; File generated automatically from ..\compobj\compobj.dll16.spec; do not edit! LIBRARY compobj.dll16 EXPORTS _wine_spec_dos_header @1 DATA get_task_imalloc16 @2 CoInitialize16 @3 CoUninitialize16 @4 StringFromGUID216 @5 CoCreateInstance16 ================================================ FILE: compobj/compobj.dll16.spec ================================================ 1 pascal CoBuildVersion() CoBuildVersion16 2 pascal CoInitialize(long) CoInitialize16 3 pascal CoUninitialize() CoUninitialize16 4 pascal CoGetMalloc(long ptr) CoGetMalloc16 5 pascal CoRegisterClassObject(ptr segptr long long ptr) CoRegisterClassObject16 6 pascal CoRevokeClassObject(long) CoRevokeClassObject16 7 pascal CoGetClassObject(segptr long ptr segptr segptr) CoGetClassObject16 8 stub COMARSHALINTERFACE 9 stub COUNMARSHALINTERFACE 10 stub COLOADLIBRARY 11 stub COFREELIBRARY 12 stub COFREEALLLIBRARIES 13 pascal CoCreateInstance(segptr segptr long segptr segptr) CoCreateInstance16 14 pascal StringFromIID(ptr ptr) StringFromCLSID16 15 pascal CoDisconnectObject(segptr long) CoDisconnectObject16 16 stub CORELEASEMARSHALDATA 17 pascal -ret16 CoFreeUnusedLibraries() CoFreeUnusedLibraries16 18 pascal -ret16 IsEqualGUID(ptr ptr) IsEqualGUID16 19 pascal StringFromCLSID(ptr ptr) StringFromCLSID16 20 pascal CLSIDFromString(str ptr) CLSIDFromString16 21 stub ISVALIDPTRIN 22 stub ISVALIDPTROUT 23 pascal IsValidInterface(segptr) IsValidInterface16 24 stub ISVALIDIID 25 stub RESULTFROMSCODE 26 stub GETSCODE 27 pascal CoRegisterMessageFilter(segptr ptr) CoRegisterMessageFilter16 28 stub COISHANDLERCONNECTED 29 stub SHRADDREF 30 pascal -ret16 CoFileTimeToDosDateTime(ptr ptr ptr) CoFileTimeToDosDateTime16 31 pascal -ret16 CoDosDateTimeToFileTime(word word ptr) CoDosDateTimeToFileTime16 32 stub COMARSHALHRESULT 33 stub COUNMARSHALHRESULT 34 pascal CoGetCurrentProcess() CoGetCurrentProcess16 35 stub SHRCREATE 36 pascal CoIsOle1Class(ptr) CoIsOle1Class16 37 variable _GUID_NULL(0x00000000 0x00000000 0x00000000 0x00000000) 38 variable _IID_IUnknown(0x00000000 0x00000000 0x000000c0 0x46000000) 39 variable _IID_IClassFactory(0x00000001 0x00000000 0x000000c0 0x46000000) 40 variable _IID_IMalloc(0x00000002 0x00000000 0x000000c0 0x46000000) 41 variable _IID_IMarshal(0x00000003 0x00000000 0x000000c0 0x46000000) 42 variable _IID_IRpcChannel(0x00000004 0x00000000 0x000000c0 0x46000000) 43 variable _IID_IRpcStub(0x00000005 0x00000000 0x000000c0 0x46000000) 44 variable _IID_IStubManager(0x00000006 0x00000000 0x000000c0 0x46000000) 45 variable _IID_IRpcProxy(0x00000007 0x00000000 0x000000c0 0x46000000) 46 variable _IID_IProxyManager(0x00000008 0x00000000 0x000000c0 0x46000000) 47 variable _IID_IPSFactory(0x00000009 0x00000000 0x000000c0 0x46000000) 48 variable _IID_ILockBytes(0x0000000a 0x00000000 0x000000c0 0x46000000) 49 variable _IID_IStorage(0x0000000b 0x00000000 0x000000c0 0x46000000) 50 variable _IID_IStream(0x0000000c 0x00000000 0x000000c0 0x46000000) 51 variable _IID_IEnumSTATSTG(0x0000000d 0x00000000 0x000000c0 0x46000000) 52 variable _IID_IBindCtx(0x0000000e 0x00000000 0x000000c0 0x46000000) 53 variable _IID_IMoniker(0x0000000f 0x00000000 0x000000c0 0x46000000) 54 variable _IID_IRunningObjectTable(0x00000010 0x00000000 0x000000c0 0x46000000) 55 variable _IID_IInternalMoniker(0x00000011 0x00000000 0x000000c0 0x46000000) 56 variable _IID_IRootStorage(0x00000012 0x00000000 0x000000c0 0x46000000) 57 variable _IID_IDfReserved1(0x00000013 0x00000000 0x000000c0 0x46000000) 58 variable _IID_IDfReserved2(0x00000014 0x00000000 0x000000c0 0x46000000) 59 variable _IID_IDfReserved3(0x00000015 0x00000000 0x000000c0 0x46000000) 60 variable _IID_IMessageFilter(0x00000016 0x00000000 0x000000c0 0x46000000) 61 pascal CLSIDFromProgID(str ptr) CLSIDFromProgID16 62 pascal ProgIDFromCLSID(ptr ptr) ProgIDFromCLSID16 63 pascal CoLockObjectExternal(segptr word word) CoLockObjectExternal16 64 variable _CLSID_StdMarshal(0x00000017 0x00000000 0x000000c0 0x46000000) 65 pascal CoGetTreatAsClass(ptr ptr) CoGetTreatAsClass16 66 pascal CoTreatAsClass(ptr ptr) CoTreatAsClass16 67 stub COGETSTANDARDMARSHAL 68 stub PROPAGATERESULT 69 pascal IIDFromString(str ptr) IIDFromString16 70 variable _IID_IStdMarshalInfo(0x00000018 0x00000000 0x000000c0 0x46000000) 71 pascal CoCreateStandardMalloc(long ptr) CoCreateStandardMalloc16 72 variable _IID_IExternalConnection(0x00000019 0x00000000 0x000000c0 0x46000000) 73 pascal CoCreateGuid(ptr) CoCreateGuid16 75 pascal FnAssert(str str str word) FnAssert16 76 pascal -ret16 StringFromGUID2(ptr ptr word) StringFromGUID216 77 stub COGETCLASSEXT 78 stub OLE1CLASSFROMCLSID2 79 stub CLSIDFROMOLE1CLASS 80 stub COOPENCLASSKEY 81 stub GUIDFROMSTRING 82 pascal CoFileTimeNow(ptr) CoFileTimeNow16 83 stub REMALLOCOID 84 stub REMFREEOID 85 stub REMCREATEREMOTEHANDLER 86 stub REMCONNECTTOOBJECT 87 stub REMGETINFOFORCID 88 stub LRPCCALL 89 stub LRPCDISPATCH 90 stub LRPCREGISTERMONITOR 91 stub LRPCREVOKEMONITOR 92 stub LRPCGETTHREADWINDOW 93 stub TIMERCALLBACKPROC 94 pascal LookupETask(ptr ptr) LookupETask16 95 pascal -ret16 SetETask(word ptr) SetETask16 96 stub LRPCFREEMONITORDATA 97 stub REMLOOKUPSHUNK 98 stub SHRGETSIZE 99 stub CALLTHKMGRUNINITIALIZE 100 stub ??0CARRAYFVALUE@@REC@KI@Z 101 stub ??1CARRAYFVALUE@@REC@XZ 102 stub ?ASSERTVALID@CARRAYFVALUE@@RFCXXZ 103 stub ?FREEEXTRA@CARRAYFVALUE@@RECXXZ 104 stub ?_GETAT@CARRAYFVALUE@@RFCPEXH@Z 105 stub ?GETSIZE@CARRAYFVALUE@@RFCHXZ 106 stub ?REMOVEALL@CARRAYFVALUE@@RECXXZ 107 stub SHRDESTROY 108 stub ?INDEXOF@CARRAYFVALUE@@RECHPEXII@Z 109 stub ?INSERTAT@CARRAYFVALUE@@RECHHPEXH@Z 110 stub COSETSTATE 111 stub ?REMOVEAT@CARRAYFVALUE@@RECXHH@Z 112 stub ?SETAT@CARRAYFVALUE@@RECXHPEX@Z 113 stub ?SETATGROW@CARRAYFVALUE@@RECHHPEX@Z 114 stub ?SETSIZE@CARRAYFVALUE@@RECHHH@Z 115 pascal CoGetState(ptr) CoGetState16 116 pascal DllEntryPoint(long word word word long word) COMPOBJ_DllEntryPoint 117 stub ?RELEASE@CSTDMALLOC@@VEAKXZ 118 stub ?ALLOC@CSTDMALLOC@@VEAPEXK@Z 119 stub SHRRELEASE 120 stub ?GETASSOCAT@CMAPKEYTOVALUE@@BFCPEUCASSOC@1@PEXIAEI@Z 121 stub ?SETASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z 122 stub ??1CMAPKEYTOVALUE@@REC@XZ 123 stub ?GETASSOCKEYPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEXPEI@Z 124 stub ?NEWASSOC@CMAPKEYTOVALUE@@BECPEUCASSOC@1@IPEXI0@Z 125 stub ?SIZEASSOC@CMAPKEYTOVALUE@@BFCIXZ 126 stub ?FREEASSOC@CMAPKEYTOVALUE@@BECXPEUCASSOC@1@@Z 127 stub ?GETSTARTPOSITION@CMAPKEYTOVALUE@@RFCPEXXZ 128 stub ?GETNEXTASSOC@CMAPKEYTOVALUE@@RFCXPEPEXPEXPEI1@Z 129 stub ?COMPAREASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z 130 stub ?REMOVEHKEY@CMAPKEYTOVALUE@@RECHK@Z 131 stub ?GETHKEY@CMAPKEYTOVALUE@@RFCKPEXI@Z 132 stub ?GETCOUNT@CMAPKEYTOVALUE@@RFCHXZ 133 stub ?LOOKUP@CMAPKEYTOVALUE@@RFCHPEXI0@Z 134 stub ?GETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z 135 stub ?REMOVEKEY@CMAPKEYTOVALUE@@RECHPEXI@Z 136 stub ?REMOVEALL@CMAPKEYTOVALUE@@RECXXZ 137 stub SHRALLOC 138 stub ?FREEASSOCKEY@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@@Z 139 stub ?SETAT@CMAPKEYTOVALUE@@RECHPEXI0@Z 140 stub ?LOOKUPHKEY@CMAPKEYTOVALUE@@RFCHKPEX@Z 141 stub ?ASSERTVALID@CMAPKEYTOVALUE@@RFCXXZ 142 stub ?SETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z 143 stub ?SETATHKEY@CMAPKEYTOVALUE@@RECHKPEX@Z 144 stub ??0CMAPKEYTOVALUE@@REC@KIIHP7CIPEXI@ZI@Z 145 stub ?INITHASHTABLE@CMAPKEYTOVALUE@@BECHXZ 146 stub ?GETASSOCVALUEPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEX@Z 147 stub ?LOOKUPADD@CMAPKEYTOVALUE@@RFCHPEXI0@Z 148 stub MKVDEFAULTHASHKEY 149 stub DELETE16 150 stub COMEMCTXOF 151 pascal CoMemAlloc(long long long) 152 stub COMEMFREE 153 stub SHRREALLOC 154 stub ___EXPORTEDSTUB 155 stub LRPCREGISTERWIN32SMONITOR 156 stub MYREMGETINFOFORCID 157 stub SHRFREE 158 stub OPNEW16 159 stub ADDCOINFO 160 stub CORUNMODALLOOP 161 stub COHANDLEINCOMINGCALL 162 stub COSETACKSTATE 163 stub SHRDIDALLOC 164 stub ?GETAT@CARRAYFVALUE@@RFCPEXH@Z 165 stub ?GETUPPERBOUND@CARRAYFVALUE@@RFCHXZ 166 stub OPDELETE16 167 stub ?GETSIZEVALUE@CARRAYFVALUE@@RFCHXZ 168 stub ?PROXY1632ADDREF@@ZAKPEVCPROXY1632@@@Z # FIXME: 169 is a duplicate of 97 169 stub REMLOOKUPSHUNK_dup 170 stub ?ISEMPTY@CMAPKEYTOVALUE@@RFCHXZ 171 stub ?FREE@CSTDMALLOC@@VEAXPEX@Z 172 stub CALLTHKMGRINITIALIZE 173 stub ?REALLOC@CSTDMALLOC@@VEAPEXPEXK@Z 174 stub ?SM16RHQI@@ZAPEXPEVCSM16RELEASEHANDLER@@AFUGUID@@PEPEX@Z 175 stub ?PROXY1632METHOD10@@ZAKPEVCPROXY1632@@@Z # FIXME: 176 is a duplicate of 154 176 stub ___EXPORTEDSTUB_dup 177 stub ?PROXY1632METHOD20@@ZAKPEVCPROXY1632@@@Z 178 stub ?PROXY1632METHOD11@@ZAKPEVCPROXY1632@@@Z 179 stub ?PROXY1632METHOD30@@ZAKPEVCPROXY1632@@@Z 180 stub ?PROXY1632METHOD21@@ZAKPEVCPROXY1632@@@Z 181 stub ?PROXY1632METHOD12@@ZAKPEVCPROXY1632@@@Z 182 stub ?PROXY1632METHOD31@@ZAKPEVCPROXY1632@@@Z 183 stub ?PROXY1632METHOD22@@ZAKPEVCPROXY1632@@@Z 184 stub ?PROXY1632METHOD13@@ZAKPEVCPROXY1632@@@Z 185 stub ?GETSIZE@CSTDMALLOC@@VEAKPEX@Z 186 stub ?PROXY1632METHOD23@@ZAKPEVCPROXY1632@@@Z 187 stub ?PROXY1632METHOD14@@ZAKPEVCPROXY1632@@@Z 188 stub ?PROXY1632METHOD24@@ZAKPEVCPROXY1632@@@Z 189 stub ?PROXY1632METHOD15@@ZAKPEVCPROXY1632@@@Z 190 stub ?PROXY1632METHOD25@@ZAKPEVCPROXY1632@@@Z 191 stub ?PROXY1632METHOD16@@ZAKPEVCPROXY1632@@@Z 192 stub ?PROXY1632METHOD26@@ZAKPEVCPROXY1632@@@Z 193 stub ?PROXY1632METHOD17@@ZAKPEVCPROXY1632@@@Z 194 stub ?PROXY1632METHOD27@@ZAKPEVCPROXY1632@@@Z 195 stub ?PROXY1632METHOD18@@ZAKPEVCPROXY1632@@@Z 196 stub ?PROXY1632METHOD28@@ZAKPEVCPROXY1632@@@Z 197 stub ?ADDREF@CSTDMALLOC@@VEAKXZ 198 stub ?PROXY1632METHOD19@@ZAKPEVCPROXY1632@@@Z 199 stub ?PROXY1632METHOD29@@ZAKPEVCPROXY1632@@@Z 200 stub CALL32INITIALIZE 201 pascal CALLOBJECTINWOW(ptr ptr) CallObjectInWOW 203 stub CALLOBJECTINWOWCHECKINIT 204 stub CALLOBJECTINWOWCHECKTHKMGR 205 stub CONVERTHR1632 206 stub CONVERTHR3216 207 stub ADDAPPCOMPATFLAG # WINE internal relays (for Win16 interfaces) 500 cdecl IMalloc16_QueryInterface(ptr ptr ptr) IMalloc16_fnQueryInterface 501 cdecl IMalloc16_AddRef(ptr) IMalloc16_fnAddRef 502 cdecl IMalloc16_Release(ptr) IMalloc16_fnRelease 503 cdecl IMalloc16_Alloc(ptr long) IMalloc16_fnAlloc 504 cdecl IMalloc16_Realloc(ptr segptr long) IMalloc16_fnRealloc 505 cdecl IMalloc16_Free(ptr segptr) IMalloc16_fnFree 506 cdecl IMalloc16_GetSize(ptr segptr) IMalloc16_fnGetSize 507 cdecl IMalloc16_DidAlloc(ptr segptr) IMalloc16_fnDidAlloc 508 cdecl IMalloc16_HeapMinimize(ptr) IMalloc16_fnHeapMinimize @ stdcall -arch=win32 get_task_imalloc16(ptr) @ stdcall -arch=win32 CoInitialize16(long) @ stdcall -arch=win32 CoUninitialize16() @ stdcall -arch=win32 StringFromGUID216(ptr ptr long) @ stdcall -arch=win32 CoCreateInstance16(long long long long long) ================================================ FILE: compobj/compobj.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 compobj {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; uuid.lib;ole32.lib;advapi32.lib;%(AdditionalDependencies) true compobj.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false compobj.def $(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; uuid.lib;ole32.lib;advapi32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" COMPOBJ > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: convertwinefile/convertwinefile.vcxproj ================================================  Debug Win32 Release Win32 Debug x64 Release x64 {782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7} Win32Proj convertwinefile 10.0.17134.0 Application true v141 Unicode Application false v141 true Unicode Application true v141 Unicode Application false v141 true Unicode true .exe $(ProjectName) true false false Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) Console true 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) Level3 Disabled _DEBUG;_CONSOLE;%(PreprocessorDefinitions) Console true Level3 MaxSpeed true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) Console true true true 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) Level3 MaxSpeed true true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) Console true true true ================================================ FILE: convertwinefile/convertwinefile.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ================================================ FILE: convertwinefile/main.c ================================================ /* * Converts wine DLL source Makefiles to MSVC projects. * * Copyright (C) 2017 otya */ #include #include #include #include #include #include const char * getdirname(const char *path) { const char *a = strpbrk(path, "\\/"); if (!a) return path; while (1) { a++; path = a; if (!*a) return path; a = strpbrk(path, "\\/"); if (!a) return path; } } inline static size_t memcount(const char* begin, char c, size_t n) { size_t r = 0; for (size_t i = 0; i < n; i++) if (begin[i] == c) r++; return r; } /** Escape for cmd and xcopy MSVCRT command-line * JS: `"${arg.replace(/(\\*)($|")/g, '$1$1$2').replace(/"/g, '""')}"`; */ char * escape(const char* op) { // estimate size size_t l = strlen(op); size_t bufsz = 2 + l + memcount(op, '\\', l) + memcount(op, '"', l) + 1; char* ret = malloc(bufsz); if (!ret) return ret; size_t spos = 0, tpos = 0; ret[tpos++]='"'; // find quotes or end const char* quote = NULL; while ((quote = memchr(&op[spos], '"', l)) || (quote = op + l)) { // Count consec backslash const char* k; for (k = quote - 1; *k == '\\'; k--) { /* PASS */ } // Copy up to and including k size_t stertch = (k - op) - spos + 1; memcpy(&ret[tpos], &op[spos], stertch); spos += stertch; tpos += stertch; // Double backslashes for (const char* s = k + 1; s < quote; s++) { ret[tpos++]='\\'; ret[tpos++]='\\'; spos++; } assert(&op[spos] == quote); // Double the quote if (spos != l) { ret[tpos++] = '"'; ret[tpos++] = '"'; spos++; } else { break; } } ret[tpos++] = '"'; ret[tpos] = '\0'; return ret; } #define ESCAPE(Var) const char* e ## Var = escape(Var) #define E(Var) (e ## Var) #define FESC(Var) free(e ## Var) void copy(const char * src, const char *dst) { char buf[512]; ESCAPE(src); ESCAPE(dst); int c = snprintf(buf, sizeof(buf), "xcopy %s %s /I", E(src), E(dst)); FESC(src); FESC(dst); assert(c < sizeof(buf) - 1); system(buf); } typedef struct { char module[100]; char imports[32][32]; char csrcs[32][32]; char rcsrcs[32][32]; } makein; char *fgetsex(char *buffer, size_t bufsiz, FILE *fp) { if (!fgets(buffer, bufsiz, fp)) return NULL; size_t len = strlen(buffer); if (buffer[len - 2] == '\\') { fgetsex(buffer + len - 3, bufsiz - len - 1, fp); return buffer; } return buffer; } const char *skipspaces(const char *in) { while (*in) { if (!isspace(*in)) return in; in++; } return in; } const char *getitem(const char *in, char *buf, size_t bufsiz) { in = skipspaces(in); if (*in == '\0') return 0; size_t buflen = 0; while (1) { if (isspace(*in)) break; buflen++; if (buflen < bufsiz) { buf[buflen - 1] = *in; } in++; } if (buflen < bufsiz) { buf[buflen] = '\0'; } else { buf[bufsiz - 1] = '\0'; } in = skipspaces(in); return in; } void parsemakein(FILE *fp, makein *in) { char line[2048]; while (fgetsex(line, sizeof(line), fp)) { const char *linebuf = line; char buf[128]; linebuf = getitem(linebuf, buf, sizeof(buf)); if (!linebuf) continue; if (*linebuf != '=') { continue; } linebuf++; linebuf = skipspaces(linebuf); if (!strcmp(buf, "MODULE")) { linebuf = getitem(linebuf, buf, sizeof(buf)); strncpy(in->module, buf, sizeof(in->module)); } if (!strcmp(buf, "IMPORTS")) { for (int i = 0; i < sizeof(in->imports); i++) { linebuf = getitem(linebuf, buf, sizeof(buf)); if (!linebuf) break; strncpy(in->imports[i], buf, sizeof(in->imports[0])); } } if (!strcmp(buf, "C_SRCS")) { for (int i = 0; i < sizeof(in->csrcs); i++) { linebuf = getitem(linebuf, buf, sizeof(buf)); if (!linebuf) break; strncpy(in->csrcs[i], buf, sizeof(in->csrcs[0])); } } if (!strcmp(buf, "RC_SRCS")) { for (int i = 0; i < sizeof(in->rcsrcs); i++) { linebuf = getitem(linebuf, buf, sizeof(buf)); if (!linebuf) break; strncpy(in->rcsrcs[i], buf, sizeof(in->rcsrcs[0])); } } } } typedef enum { TEMPLATE_NONE, TEMPLATE_TargetExt, TEMPLATE_ClCompile_PreprocessorDefinitions, TEMPLATE_Link_AdditionalDependencies, TEMPLATE_C_SRCS, TEMPLATE_DEF_FILE, TEMPLATE_OBJ_FILE, TEMPLATE_RootNamespace, TEMPLATE_CUSTOM_SPEC, TEMPLATE_CUSTOM_COMMAND, TEMPLATE_DEF_FILE2 } vcxpojlineattr; typedef struct { vcxpojlineattr attr; const char *line; }vcxpojline; vcxpojline vcxtemplate[] = { { TEMPLATE_NONE,"" }, { TEMPLATE_NONE,"" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," Debug" }, { TEMPLATE_NONE," Win32" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," Release" }, { TEMPLATE_NONE," Win32" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, //{ TEMPLATE_NONE," {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}" }, { TEMPLATE_NONE," Win32Proj" }, { TEMPLATE_NONE," 10.0.17134.0"}, { TEMPLATE_RootNamespace," keyboard" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," DynamicLibrary" }, { TEMPLATE_NONE," true" }, { TEMPLATE_NONE," v141" }, { TEMPLATE_NONE," Unicode" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," DynamicLibrary" }, { TEMPLATE_NONE," false" }, { TEMPLATE_NONE," v141" }, { TEMPLATE_NONE," true" }, { TEMPLATE_NONE," Unicode" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," "}, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," true" }, { TEMPLATE_TargetExt,"" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," false" }, { TEMPLATE_NONE," Release\" }, { TEMPLATE_TargetExt,"" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," Level3" }, { TEMPLATE_NONE," Disabled" }, { TEMPLATE_ClCompile_PreprocessorDefinitions," WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)" }, { TEMPLATE_NONE," ../wine" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," Windows" }, { TEMPLATE_NONE," true" }, { TEMPLATE_NONE," $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)wow32.lib;$(OutDir)krnl386.lib;" }, { TEMPLATE_Link_AdditionalDependencies,"" }, { TEMPLATE_NONE,"%(AdditionalDependencies)" }, { TEMPLATE_NONE," true" }, { TEMPLATE_NONE," " }, { TEMPLATE_DEF_FILE,"" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," Level3" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," MaxSpeed" }, { TEMPLATE_NONE," true" }, { TEMPLATE_NONE," true" }, { TEMPLATE_ClCompile_PreprocessorDefinitions," WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)" }, { TEMPLATE_NONE," ../wine" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," Windows" }, { TEMPLATE_NONE," true" }, { TEMPLATE_NONE," true" }, { TEMPLATE_NONE," true" }, { TEMPLATE_NONE," false" }, { TEMPLATE_NONE," " }, { TEMPLATE_DEF_FILE,"" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)wow32.lib;$(OutDir)krnl386.lib;" }, { TEMPLATE_Link_AdditionalDependencies,"" }, { TEMPLATE_NONE,"%(AdditionalDependencies)" }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_C_SRCS," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_OBJ_FILE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE, " " }, { TEMPLATE_CUSTOM_SPEC, " " }, { TEMPLATE_NONE, " Document" }, { TEMPLATE_CUSTOM_COMMAND, " \"$(OutDir)convspec\" \"%%(Filename).spec\" %s > \"%%(Filename).asm\" && \"$(AsmPath)as\" --32 -o \"%%(Filename).obj\" \"%%(Filename).asm\"" }, { TEMPLATE_NONE, " %(Filename).obj" }, { TEMPLATE_NONE, " " }, { TEMPLATE_NONE, " " }, { TEMPLATE_NONE, " " }, { TEMPLATE_DEF_FILE2, " \n" }, { TEMPLATE_NONE, " " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE," " }, { TEMPLATE_NONE,"" } }; #define GetArrayLength(A) (sizeof(A) / sizeof(A[0])) void generateVCproject(makein *in, FILE *out) { const char * targetext = PathFindExtensionA(in->module); const char target[128] = { 0 }; strncpy(target, in->module, strlen(in->module) - strlen(targetext)); for (int i = 0; i < GetArrayLength(vcxtemplate); i++) { if (vcxtemplate[i].attr == TEMPLATE_RootNamespace) { fprintf(out, " %s\n", target); } else if (vcxtemplate[i].attr == TEMPLATE_TargetExt) { fprintf(out, "%s\n", targetext); } else if (vcxtemplate[i].attr == TEMPLATE_Link_AdditionalDependencies) { for (int j = 0; j < GetArrayLength(in->imports); j++) { if (!strlen(in->imports[j])) break; fprintf(out, "%s.lib;", in->imports[j]); } } else if (vcxtemplate[i].attr == TEMPLATE_C_SRCS) { for (int j = 0; j < GetArrayLength(in->csrcs); j++) { if (!strlen(in->csrcs[j])) break; fprintf(out, " \n", in->csrcs[j]); } } else if (vcxtemplate[i].attr == TEMPLATE_DEF_FILE) { fprintf(out, "%s.def\n", target); } else if (vcxtemplate[i].attr == TEMPLATE_OBJ_FILE) { fprintf(out, " \n", in->module); } else if (vcxtemplate[i].attr == TEMPLATE_CUSTOM_SPEC) { fprintf(out, vcxtemplate[i].line, in->module); fprintf(out, "\n"); } else if (vcxtemplate[i].attr == TEMPLATE_CUSTOM_COMMAND) { char mod[2445]; for (int j = 0; target[j]; j++) { mod[j] = toupper(target[j]); if (!target[j + 1]) mod[j + 1] = 0; } fprintf(out, vcxtemplate[i].line, mod); fprintf(out, "\n"); } else if (vcxtemplate[i].attr == TEMPLATE_DEF_FILE2) { fprintf(out, vcxtemplate[i].line, target); } else { fprintf(out, "%s\n", vcxtemplate[i].line); } } } void generateDEF(makein *makedata, const char *spec, const char *path) { char buf[512]; ESCAPE(spec); int c = snprintf(buf, sizeof(buf), "convspec %s -DEF > \"%s\"", E(spec), path); FESC(spec); assert(c < sizeof(buf) - 1); system(buf); } void generateASM(makein *makedata, const char *spec, const char *path, const char *mod) { char buf[512]; ESCAPE(spec); ESCAPE(mod); int c = snprintf(buf, sizeof(buf), "convspec %s %s > \"%s\"", E(spec), E(mod), path); FESC(spec); FESC(mod); assert(c < sizeof(buf) - 1); system(buf); } int main(int argc, char **argv) { if (argc != 3) { puts("Converts wine DLL source Makefiles to MSVC projects."); puts("usage: convertwinefile <2>"); return 0; } char *dir = argv[1]; char *dir2 = argv[2]; copy(dir, dir2); makein makedata = { 0 }; char makefile_in_path[MAX_PATH] = { 0 }; strncpy(makefile_in_path, dir2, sizeof(makefile_in_path)); strncat(makefile_in_path, "/Makefile.in", sizeof(makefile_in_path)); FILE *makefile_in = fopen(makefile_in_path, "r"); parsemakein(makefile_in, &makedata); fclose(makefile_in); char proj_in_path[MAX_PATH] = { 0 }; strncpy(proj_in_path, dir2, sizeof(proj_in_path)); strncat(makefile_in_path, "/", sizeof(makefile_in_path)); strncat(makefile_in_path, "/Makefile.in", sizeof(makefile_in_path)); char projname[MAX_PATH] = { 0 }; strncpy(projname, PathFindFileNameA(dir2), sizeof(projname)); PathRemoveExtensionA(projname); char projpath[MAX_PATH] = { 0 }; strncpy(projpath, dir2, sizeof(projpath)); PathAddBackslashA(projpath); strncat(projpath, projname, MAX_PATH);//PathAppendA(projpath, projpath, projname); PathAddExtensionA(projpath, ".vcxproj"); FILE *proj = fopen(projpath, "w+"); generateVCproject(&makedata, proj); fclose(proj); char specpath[MAX_PATH] = { 0 }; strncpy(specpath, dir2, sizeof(specpath)); PathAddBackslashA(specpath); strncat(specpath, makedata.module, MAX_PATH);// PathAppendA(asmpath, asmpath, makedata.module); strncat(specpath, ".spec", MAX_PATH); char defpath[MAX_PATH] = { 0 }; strncpy(defpath, dir2, sizeof(defpath)); PathAddBackslashA(defpath); strncat(defpath, projname, MAX_PATH);// PathAppendA(defpath, defpath, projname); PathAddExtensionA(defpath, ".def"); generateDEF(&makedata, specpath, defpath); return 0; } ================================================ FILE: convspec/CMakeLists.txt ================================================ file(GLOB SOURCE *.c) add_executable(convspec ${SOURCE}) include_directories(../wine) add_definitions(-D__i386__ -Dpopen=_popen -Dpclose=_pclose -Dstrncasecmp=_strnicmp -Dstrcasecmp=_stricmp) if (MSVC) add_definitions(-DWINEBUILD_MSVC) endif() ================================================ FILE: convspec/build.h ================================================ /* * Copyright 1993 Robert J. Amstadt * Copyright 1995 Martin von Loewis * Copyright 1995, 1996, 1997 Alexandre Julliard * Copyright 1997 Eric Youngdale * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_BUILD_H #define __WINE_BUILD_H #ifndef __WINE_CONFIG_H # error You must include config.h to use this header #endif #include #include #include #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif typedef enum { TYPE_VARIABLE, /* variable */ TYPE_PASCAL, /* pascal function (Win16) */ TYPE_ABS, /* absolute value (Win16) */ TYPE_STUB, /* unimplemented stub */ TYPE_STDCALL, /* stdcall function (Win32) */ TYPE_CDECL, /* cdecl function (Win32) */ TYPE_VARARGS, /* varargs function (Win32) */ TYPE_THISCALL, /* thiscall function (Win32 on i386) */ TYPE_EXTERN, /* external symbol (Win32) */ TYPE_NBTYPES } ORD_TYPE; typedef enum { SPEC_WIN16, SPEC_WIN32 } SPEC_TYPE; enum arg_type { ARG_WORD, /* 16-bit word */ ARG_SWORD, /* 16-bit signed word */ ARG_SEGPTR, /* segmented pointer */ ARG_SEGSTR, /* segmented pointer to Ansi string */ ARG_LONG, /* long */ ARG_PTR, /* pointer */ ARG_STR, /* pointer to Ansi string */ ARG_WSTR, /* pointer to Unicode string */ ARG_INT64, /* 64-bit integer */ ARG_INT128, /* 128-bit integer */ ARG_FLOAT, /* 32-bit float */ ARG_DOUBLE, /* 64-bit float */ ARG_MAXARG = ARG_DOUBLE }; #define MAX_ARGUMENTS 32 typedef struct { int n_values; unsigned int *values; } ORD_VARIABLE; typedef struct { int nb_args; int args_str_offset; enum arg_type args[MAX_ARGUMENTS]; } ORD_FUNCTION; typedef struct { unsigned short value; } ORD_ABS; typedef struct { ORD_TYPE type; int ordinal; int lineno; int flags; char *name; /* public name of this function */ char *link_name; /* name of the C symbol to link to */ char *export_name; /* name exported under for noname exports */ union { ORD_VARIABLE var; ORD_FUNCTION func; ORD_ABS abs; } u; } ORDDEF; typedef struct { char *src_name; /* file name of the source spec file */ char *file_name; /* file name of the dll */ char *dll_name; /* internal name of the dll */ char *c_name; /* internal name of the dll, as a C-compatible identifier */ char *init_func; /* initialization routine */ char *main_module; /* main Win32 module for Win16 specs */ SPEC_TYPE type; /* type of dll (Win16/Win32) */ int base; /* ordinal base */ int limit; /* ordinal limit */ int stack_size; /* exe stack size */ int heap_size; /* exe heap size */ int nb_entry_points; /* number of used entry points */ int alloc_entry_points; /* number of allocated entry points */ int nb_names; /* number of entry points with names */ unsigned int nb_resources; /* number of resources */ int characteristics; /* characteristics for the PE header */ int dll_characteristics;/* DLL characteristics for the PE header */ int subsystem; /* subsystem id */ int subsystem_major; /* subsystem version major number */ int subsystem_minor; /* subsystem version minor number */ ORDDEF *entry_points; /* dll entry points */ ORDDEF **names; /* array of entry point names (points into entry_points) */ ORDDEF **ordinals; /* array of dll ordinals (points into entry_points) */ struct resource *resources; /* array of dll resources (format differs between Win16/Win32) */ } DLLSPEC; enum target_cpu { CPU_x86, CPU_x86_64, CPU_POWERPC, CPU_ARM, CPU_ARM64, CPU_LAST = CPU_ARM64 }; enum target_platform { PLATFORM_UNSPECIFIED, PLATFORM_APPLE, PLATFORM_FREEBSD, PLATFORM_SOLARIS, PLATFORM_WINDOWS }; extern char *target_alias; extern enum target_cpu target_cpu; extern enum target_platform target_platform; struct strarray { const char **str; unsigned int count; unsigned int max; }; /* entry point flags */ #define FLAG_NORELAY 0x01 /* don't use relay debugging for this function */ #define FLAG_NONAME 0x02 /* don't export function by name */ #define FLAG_RET16 0x04 /* function returns a 16-bit value */ #define FLAG_RET64 0x08 /* function returns a 64-bit value */ #define FLAG_REGISTER 0x10 /* use register calling convention */ #define FLAG_PRIVATE 0x20 /* function is private (cannot be imported) */ #define FLAG_ORDINAL 0x40 /* function should be imported by ordinal */ #define FLAG_STKPROLOG 0x80 /* add stack adjust prolog for programs that hook exports */ #define FLAG_FORWARD 0x100 /* function is a forwarded name */ #define FLAG_EXT_LINK 0x200 /* function links to an external symbol */ #define FLAG_EXPORT32 0x400 /* 32-bit export in 16-bit spec file */ #define FLAG_CPU(cpu) (0x01000 << (cpu)) #define FLAG_CPU_MASK (FLAG_CPU(CPU_LAST + 1) - FLAG_CPU(0)) #define FLAG_CPU_WIN64 (FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM64)) #define FLAG_CPU_WIN32 (FLAG_CPU_MASK & ~FLAG_CPU_WIN64) #define MAX_ORDINALS 65535 /* some Windows constants */ #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */ #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 #define IMAGE_FILE_16BIT_MACHINE 0x0040 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 #define IMAGE_FILE_32BIT_MACHINE 0x0100 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 #define IMAGE_FILE_SYSTEM 0x1000 #define IMAGE_FILE_DLL 0x2000 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100 #define IMAGE_SUBSYSTEM_NATIVE 1 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* global functions */ #ifndef __GNUC__ #define __attribute__(X) #endif #ifndef DECLSPEC_NORETURN # if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS) # define DECLSPEC_NORETURN __declspec(noreturn) # else # define DECLSPEC_NORETURN __attribute__((noreturn)) # endif #endif extern void *xmalloc (size_t size); extern void *xrealloc (void *ptr, size_t size); extern char *xstrdup( const char *str ); extern char *strupper(char *s); extern int strendswith(const char* str, const char* end); extern char *strmake(const char* fmt, ...) __attribute__((__format__ (__printf__, 1, 2 ))); extern struct strarray strarray_fromstring( const char *str, const char *delim ); extern void strarray_add( struct strarray *array, ... ); extern void strarray_addv( struct strarray *array, char * const *argv ); extern void strarray_addall( struct strarray *array, struct strarray args ); extern DECLSPEC_NORETURN void fatal_error( const char *msg, ... ) __attribute__ ((__format__ (__printf__, 1, 2))); extern DECLSPEC_NORETURN void fatal_perror( const char *msg, ... ) __attribute__ ((__format__ (__printf__, 1, 2))); extern void error( const char *msg, ... ) __attribute__ ((__format__ (__printf__, 1, 2))); extern void warning( const char *msg, ... ) __attribute__ ((__format__ (__printf__, 1, 2))); extern int output( const char *format, ... ) __attribute__ ((__format__ (__printf__, 1, 2))); extern void output_cfi( const char *format, ... ) __attribute__ ((__format__ (__printf__, 1, 2))); extern void spawn( struct strarray array ); extern struct strarray find_tool( const char *name, const char * const *names ); extern struct strarray get_as_command(void); extern struct strarray get_ld_command(void); extern const char *get_nm_command(void); extern void cleanup_tmp_files(void); extern char *get_temp_file_name( const char *prefix, const char *suffix ); extern void output_standard_file_header(void); extern FILE *open_input_file( const char *srcdir, const char *name ); extern void close_input_file( FILE *file ); extern void dump_bytes( const void *buffer, unsigned int size ); extern int remove_stdcall_decoration( char *name ); extern void assemble_file( const char *src_file, const char *obj_file ); extern DLLSPEC *alloc_dll_spec(void); extern void free_dll_spec( DLLSPEC *spec ); extern char *make_c_identifier( const char *str ); extern const char *get_stub_name( const ORDDEF *odp, const DLLSPEC *spec ); extern int get_cpu_from_name( const char *name ); extern unsigned int get_alignment(unsigned int align); extern unsigned int get_page_size(void); extern unsigned int get_ptr_size(void); extern unsigned int get_args_size( const ORDDEF *odp ); extern const char *asm_name( const char *func ); extern const char *func_declaration( const char *func ); extern const char *asm_globl( const char *func ); extern const char *get_asm_ptr_keyword(void); extern const char *get_asm_string_keyword(void); extern const char *get_asm_rodata_section(void); extern const char *get_asm_string_section(void); extern void output_function_size( const char *name ); extern void output_gnu_stack_note(void); extern void add_import_dll( const char *name, const char *filename ); extern void add_delayed_import( const char *name ); extern void add_extra_ld_symbol( const char *name ); extern void read_undef_symbols( DLLSPEC *spec, char **argv ); extern void resolve_imports( DLLSPEC *spec ); extern int is_undefined( const char *name ); extern int has_imports(void); extern void output_get_pc_thunk(void); extern void output_module( DLLSPEC *spec ); extern void output_stubs( DLLSPEC *spec ); extern void output_imports( DLLSPEC *spec ); extern void output_import_lib( DLLSPEC *spec, char **argv ); extern void output_exports( DLLSPEC *spec ); extern int load_res32_file( const char *name, DLLSPEC *spec ); extern void output_resources( DLLSPEC *spec ); extern void output_bin_resources( DLLSPEC *spec, unsigned int start_rva ); extern void output_fake_module( DLLSPEC *spec ); extern void output_def_file( DLLSPEC *spec, int include_private ); extern void load_res16_file( const char *name, DLLSPEC *spec ); extern void load_res16_from_buf( const unsigned char *buf, int size, DLLSPEC *spec ); extern void output_res16_data( DLLSPEC *spec ); extern void output_bin_res16_data( DLLSPEC *spec ); extern void output_res16_directory( DLLSPEC *spec ); extern void output_bin_res16_directory( DLLSPEC *spec, unsigned int data_offset ); extern void output_spec16_file( DLLSPEC *spec ); extern void output_fake_module16( DLLSPEC *spec16 ); extern void output_res_o_file( DLLSPEC *spec ); extern void output_asm_relays16(void); extern void BuildSpec32File( DLLSPEC *spec ); extern void add_16bit_exports( DLLSPEC *spec32, DLLSPEC *spec16 ); extern int parse_spec_file( FILE *file, DLLSPEC *spec ); extern int parse_def_file( FILE *file, DLLSPEC *spec ); /* buffer management */ extern int byte_swapped; extern const char *input_buffer_filename; extern const unsigned char *input_buffer; extern size_t input_buffer_pos; extern size_t input_buffer_size; extern unsigned char *output_buffer; extern size_t output_buffer_pos; extern size_t output_buffer_size; extern void init_input_buffer( const char *file ); extern void init_output_buffer(void); extern void flush_output_buffer(void); extern unsigned char get_byte(void); extern unsigned short get_word(void); extern unsigned int get_dword(void); extern void put_data( const void *data, size_t size ); extern void put_byte( unsigned char val ); extern void put_word( unsigned short val ); extern void put_dword( unsigned int val ); extern void put_qword( unsigned int val ); extern void put_pword( unsigned int val ); extern void align_output( unsigned int align ); /* global variables */ extern int current_line; extern int UsePIC; extern int nb_errors; extern int display_warnings; extern int kill_at; extern int verbose; extern int link_ext_symbols; extern int force_pointer_size; extern int unwind_tables; extern char *input_file_name; extern char *spec_file_name; extern FILE *output_file; extern const char *output_file_name; extern struct strarray lib_path; extern struct strarray as_command; extern struct strarray cc_command; extern struct strarray ld_command; extern struct strarray nm_command; extern char *cpu_option; extern char *arch_option; extern const char *float_abi_option; extern int thumb_mode; extern int needs_get_pc_thunk; extern const char *asm_name_stdcall16(const char *sym, ORDDEF *ord); const char *asm_name_stdcall32(const char *sym, ORDDEF *ord); #endif /* __WINE_BUILD_H */ ================================================ FILE: convspec/convspec.c ================================================ // -*- tab-width: 4 -*- // # vim: set expandtab: ts=4 // Converts Win32 wine spec files to Win16 specs. Based on winebuild. // otya 2018 #include /* Stubs */ static char *optarg; static int optind; static int opterr; static int optopt; struct option; struct option { const char *name; int has_arg; int *flag; int val; }; static int getopt_long(int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) { fprintf(stderr, "getopt_long: stub\n"); return 0; } static int getopt_long_only(int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) { fprintf(stderr, "getopt_long_only: stub\n"); return 0; } int mkstemps(char *template, int suffix_len) { fprintf(stderr, "mkstemps: stub\n"); return 0; } #define main __main #include "main.c.h" #include "ver.h" char *nb_lib_paths; #undef main static int parse_input_file(DLLSPEC *spec); int main(int argc, char* argv[]) { int add_ver = 0; if (argc <= 1) { printf("wine spec file convert tool\nusage: %s specfile(16bit only) module name [-EXE]\n%s specfile(16bit only) -DEF\n", argv[0], argv[0]); fatal_error("file argument '%s' not allowed in this mode\n", argv[0]); } DLLSPEC *spec = alloc_dll_spec(); spec_file_name = argv[1]; exec_mode = MODE_DLL; spec->type = SPEC_WIN16; spec->file_name = spec_file_name; /* remove dir */ if (strrchr(spec->file_name, '\\')) { spec->file_name = strrchr(spec->file_name, '\\') + 1; } if (strrchr(spec->file_name, '/')) { spec->file_name = strrchr(spec->file_name, '/') + 1; } /* remove spec extension */ if (strstr(spec->file_name, ".spec")) { spec->file_name = xstrdup(spec->file_name); strstr(spec->file_name, ".spec")[0] = '\0'; } output_file = stdout; target_cpu = CPU_x86; init_dll_name(spec); if (argc > 2) { for (int i = 2; i < argc; i++) { if (!strcmp(argv[i], "--heap") && argc > i + 1) { spec->heap_size = atoi(argv[++i]); } else if (!strcmp(argv[i], "-DEF")) { exec_mode = MODE_DEF; } else if (!strcmp(argv[i], "-EXE")) { exec_mode = MODE_EXE; } else if (!strcmp(argv[i], "-32")) { spec->type = SPEC_WIN32; } else if (!strcmp(argv[i], "-ver")) { add_ver = 1; } else if (argv[i][0] != '-') { spec->main_module = xstrdup(argv[i]); spec->dll_name = xstrdup(argv[i]); } } } else { init_dll_name(spec); } switch (exec_mode) { case MODE_DEF: if (!spec_file_name) fatal_error("missing .spec file\n"); if (!parse_input_file(spec)) break; output_def_file(spec, 1); break; case MODE_DLL: if (spec->subsystem != IMAGE_SUBSYSTEM_NATIVE) spec->characteristics |= IMAGE_FILE_DLL; /* fall through */ case MODE_EXE: load_resources(argv, spec); load_import_libs(argv); if (spec_file_name && !parse_input_file(spec)) break; if (add_ver) { char outname[13] = {0}; strncpy(outname, spec->dll_name, 12); strcpy(ver_res + 0x144, outname); load_res16_from_buf(ver_res, ver_res_len, spec); } if (fake_module) { if (spec->type == SPEC_WIN16) output_fake_module16(spec); else output_fake_module(spec); break; } //read_undef_symbols(spec, argv); if (spec->type == SPEC_WIN16 && exec_mode == MODE_EXE) spec->init_func = xstrdup("__wine_spec_exe16_entry"); switch (spec->type) { case SPEC_WIN16: output_spec16_file(spec); break; case SPEC_WIN32: BuildSpec32File(spec); break; default: assert(0); } break; } if (nb_errors) exit(1); return EXIT_SUCCESS; } ================================================ FILE: convspec/convspec.vcxproj ================================================  Debug Win32 Release Win32 {DC6BA231-C318-436F-8F5C-5E2CC73779E2} Win32Proj convspec 10.0.17134.0 Application true v141 Unicode Application false v141 true Unicode true false Level3 Disabled WINEBUILD_MSVC;WIN32;_DEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose ;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions) ../wine Console true $(OutDir)libwine.lib;%(AdditionalDependencies) Level3 MaxSpeed true true WINEBUILD_MSVC;WIN32;NDEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose ;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions) ../wine Console true true true 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) ================================================ FILE: convspec/convspec.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ヘッダー ファイル ヘッダー ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: convspec/import.c ================================================ /* * DLL imports support * * Copyright 2000, 2004 Alexandre Julliard * Copyright 2000 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #include "wine/list.h" #include "build.h" struct import_func { const char *name; const char *export_name; int ordinal; }; struct import { struct list entry; /* entry in global dll list */ char *dll_name; /* exported file name of the dll */ char *c_name; /* dll name as a C-compatible identifier */ char *full_name; /* full name of the input file */ dev_t dev; /* device/inode of the input file */ ino_t ino; ORDDEF **exports; /* functions exported from this dll */ int nb_exports; /* number of exported functions */ struct import_func *imports; /* functions we want to import from this dll */ int nb_imports; /* number of imported functions */ int max_imports; /* size of imports array */ }; static struct strarray undef_symbols; /* list of undefined symbols */ static struct strarray extra_ld_symbols; /* list of extra symbols that ld should resolve */ static struct strarray delayed_imports; /* list of delayed import dlls */ static struct strarray ext_link_imports; /* list of external symbols to link to */ static struct list dll_imports = LIST_INIT( dll_imports ); static struct list dll_delayed = LIST_INIT( dll_delayed ); static struct strarray as_files; static const char import_func_prefix[] = "__wine$func$"; static const char import_ord_prefix[] = "__wine$ord$"; static inline const char *ppc_reg( int reg ) { static const char * const ppc_regs[32] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10","r11","r12","r13","r14","r15", "r16","r17","r18","r19","r20","r21","r22","r23", "r24","r25","r26","r27","r28","r29","r30","r31" }; if (target_platform == PLATFORM_APPLE) return ppc_regs[reg]; return ppc_regs[reg] + 1; /* skip the 'r' */ } /* compare function names; helper for resolve_imports */ static int name_cmp( const void *name, const void *entry ) { return strcmp( *(const char* const *)name, *(const char* const *)entry ); } /* compare function names; helper for resolve_imports */ static int func_cmp( const void *func1, const void *func2 ) { const ORDDEF *odp1 = *(const ORDDEF * const *)func1; const ORDDEF *odp2 = *(const ORDDEF * const *)func2; return strcmp( odp1->name ? odp1->name : odp1->export_name, odp2->name ? odp2->name : odp2->export_name ); } /* remove a name from a name table */ static inline void remove_name( struct strarray *table, unsigned int idx ) { assert( idx < table->count ); memmove( table->str + idx, table->str + idx + 1, (table->count - idx - 1) * sizeof(*table->str) ); table->count--; } /* locate a name in a (sorted) list */ static inline const char *find_name( const char *name, const struct strarray *table ) { char **res = NULL; if (table->count) res = bsearch( &name, table->str, table->count, sizeof(*table->str), name_cmp ); return res ? *res : NULL; } /* sort a name table */ static inline void sort_names( struct strarray *table ) { if (table->count) qsort( table->str, table->count, sizeof(*table->str), name_cmp ); } /* locate an export in a (sorted) export list */ static inline ORDDEF *find_export( const char *name, ORDDEF **table, int size ) { ORDDEF func, *odp, **res = NULL; func.name = xstrdup(name); func.ordinal = -1; odp = &func; if (table) res = bsearch( &odp, table, size, sizeof(*table), func_cmp ); free( func.name ); return res ? *res : NULL; } /* free an import structure */ static void free_imports( struct import *imp ) { free( imp->exports ); free( imp->imports ); free( imp->dll_name ); free( imp->c_name ); free( imp->full_name ); free( imp ); } /* check whether a given dll is imported in delayed mode */ static int is_delayed_import( const char *name ) { unsigned int i; for (i = 0; i < delayed_imports.count; i++) { if (!strcmp( delayed_imports.str[i], name )) return 1; } return 0; } /* find an imported dll from its name */ static struct import *find_import_dll( const char *name ) { struct import *import; LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry ) if (!strcasecmp( import->dll_name, name )) return import; LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) if (!strcasecmp( import->dll_name, name )) return import; return NULL; } /* open the .so library for a given dll in a specified path */ static char *try_library_path( const char *path, const char *name ) { char *buffer; int fd; buffer = strmake( "%s/lib%s.def", path, name ); /* check if the file exists */ if ((fd = open( buffer, O_RDONLY )) != -1) { close( fd ); return buffer; } free( buffer ); return NULL; } /* find the .def import library for a given dll */ static char *find_library( const char *name ) { char *fullname; unsigned int i; for (i = 0; i < lib_path.count; i++) { if ((fullname = try_library_path( lib_path.str[i], name ))) return fullname; } fatal_error( "could not open .def file for %s\n", name ); return NULL; } /* read in the list of exported symbols of an import library */ static DLLSPEC *read_import_lib( struct import *imp ) { FILE *f; int i; struct stat stat; struct import *prev_imp; DLLSPEC *spec = alloc_dll_spec(); f = open_input_file( NULL, imp->full_name ); fstat( fileno(f), &stat ); imp->dev = stat.st_dev; imp->ino = stat.st_ino; if (!parse_def_file( f, spec )) exit( 1 ); close_input_file( f ); /* check if we already imported that library from a different file */ if ((prev_imp = find_import_dll( spec->file_name ))) { if (prev_imp->dev != imp->dev || prev_imp->ino != imp->ino) fatal_error( "%s and %s have the same export name '%s'\n", prev_imp->full_name, imp->full_name, spec->file_name ); free_dll_spec( spec ); return NULL; /* the same file was already loaded, ignore this one */ } if (spec->nb_entry_points) { imp->exports = xmalloc( spec->nb_entry_points * sizeof(*imp->exports) ); for (i = 0; i < spec->nb_entry_points; i++) imp->exports[imp->nb_exports++] = &spec->entry_points[i]; qsort( imp->exports, imp->nb_exports, sizeof(*imp->exports), func_cmp ); } return spec; } /* build the dll exported name from the import lib name or path */ static char *get_dll_name( const char *name, const char *filename ) { char *ret; if (filename) { const char *basename = strrchr( filename, '/' ); if (!basename) basename = filename; else basename++; if (!strncmp( basename, "lib", 3 )) basename += 3; ret = xmalloc( strlen(basename) + 5 ); strcpy( ret, basename ); if (strendswith( ret, ".def" )) ret[strlen(ret)-4] = 0; } else { ret = xmalloc( strlen(name) + 5 ); strcpy( ret, name ); } if (!strchr( ret, '.' )) strcat( ret, ".dll" ); return ret; } /* add a dll to the list of imports */ void add_import_dll( const char *name, const char *filename ) { DLLSPEC *spec; char *dll_name = get_dll_name( name, filename ); struct import *imp = xmalloc( sizeof(*imp) ); memset( imp, 0, sizeof(*imp) ); if (filename) imp->full_name = xstrdup( filename ); else imp->full_name = find_library( name ); if (!(spec = read_import_lib( imp ))) { free_imports( imp ); return; } imp->dll_name = spec->file_name ? spec->file_name : dll_name; imp->c_name = make_c_identifier( imp->dll_name ); if (is_delayed_import( dll_name )) list_add_tail( &dll_delayed, &imp->entry ); else list_add_tail( &dll_imports, &imp->entry ); } /* add a library to the list of delayed imports */ void add_delayed_import( const char *name ) { struct import *imp; char *fullname = get_dll_name( name, NULL ); strarray_add( &delayed_imports, fullname, NULL ); if ((imp = find_import_dll( fullname ))) { list_remove( &imp->entry ); list_add_tail( &dll_delayed, &imp->entry ); } } /* add a symbol to the list of extra symbols that ld must resolve */ void add_extra_ld_symbol( const char *name ) { strarray_add( &extra_ld_symbols, name, NULL ); } /* retrieve an imported dll, adding one if necessary */ struct import *add_static_import_dll( const char *name ) { struct import *import; char *dll_name = get_dll_name( name, NULL ); if ((import = find_import_dll( dll_name ))) return import; import = xmalloc( sizeof(*import) ); memset( import, 0, sizeof(*import) ); import->dll_name = dll_name; import->full_name = xstrdup( dll_name ); import->c_name = make_c_identifier( dll_name ); if (is_delayed_import( dll_name )) list_add_tail( &dll_delayed, &import->entry ); else list_add_tail( &dll_imports, &import->entry ); return import; } /* add a function to the list of imports from a given dll */ static void add_import_func( struct import *imp, const char *name, const char *export_name, int ordinal ) { if (imp->nb_imports == imp->max_imports) { imp->max_imports *= 2; if (imp->max_imports < 32) imp->max_imports = 32; imp->imports = xrealloc( imp->imports, imp->max_imports * sizeof(*imp->imports) ); } imp->imports[imp->nb_imports].name = name; imp->imports[imp->nb_imports].export_name = export_name; imp->imports[imp->nb_imports].ordinal = ordinal; imp->nb_imports++; } /* add an import for an undefined function of the form __wine$func$ */ static void add_undef_import( const char *name, int is_ordinal ) { char *p, *dll_name = xstrdup( name ); int ordinal = 0; struct import *import; if (!(p = strchr( dll_name, '$' ))) return; *p++ = 0; while (*p >= '0' && *p <= '9') ordinal = 10 * ordinal + *p++ - '0'; if (*p != '$') return; p++; import = add_static_import_dll( dll_name ); if (is_ordinal) add_import_func( import, NULL, xstrdup( p ), ordinal ); else add_import_func( import, xstrdup( p ), NULL, ordinal ); } /* get the default entry point for a given spec file */ static const char *get_default_entry_point( const DLLSPEC *spec ) { if (spec->characteristics & IMAGE_FILE_DLL) return "__wine_spec_dll_entry"; if (spec->subsystem == IMAGE_SUBSYSTEM_NATIVE) return "__wine_spec_drv_entry"; if (spec->type == SPEC_WIN16) return "__wine_spec_exe16_entry"; return "__wine_spec_exe_entry"; } /* check if the spec file exports any stubs */ static int has_stubs( const DLLSPEC *spec ) { int i; for (i = 0; i < spec->nb_entry_points; i++) { ORDDEF *odp = &spec->entry_points[i]; if (odp->type == TYPE_STUB) return 1; } return 0; } /* add the extra undefined symbols that will be contained in the generated spec file itself */ static void add_extra_undef_symbols( DLLSPEC *spec ) { if (!spec->init_func) spec->init_func = xstrdup( get_default_entry_point(spec) ); add_extra_ld_symbol( spec->init_func ); if (has_stubs( spec )) add_extra_ld_symbol( "__wine_spec_unimplemented_stub" ); if (delayed_imports.count) add_extra_ld_symbol( "__wine_spec_delay_load" ); } /* check if a given imported dll is not needed, taking forwards into account */ static int check_unused( const struct import* imp, const DLLSPEC *spec ) { int i; const char *file_name = imp->dll_name; size_t len = strlen( file_name ); const char *p = strchr( file_name, '.' ); if (p && !strcasecmp( p, ".dll" )) len = p - file_name; for (i = spec->base; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (!odp || !(odp->flags & FLAG_FORWARD)) continue; if (!strncasecmp( odp->link_name, file_name, len ) && odp->link_name[len] == '.') return 0; /* found a forward, it is used */ } return 1; } /* check if a given forward does exist in one of the imported dlls */ static void check_undefined_forwards( DLLSPEC *spec ) { struct import *imp; char *link_name, *api_name, *dll_name, *p; int i; for (i = 0; i < spec->nb_entry_points; i++) { ORDDEF *odp = &spec->entry_points[i]; if (!(odp->flags & FLAG_FORWARD)) continue; link_name = xstrdup( odp->link_name ); p = strrchr( link_name, '.' ); *p = 0; api_name = p + 1; dll_name = get_dll_name( link_name, NULL ); if ((imp = find_import_dll( dll_name ))) { if (!find_export( api_name, imp->exports, imp->nb_exports )) warning( "%s:%d: forward '%s' not found in %s\n", spec->src_name, odp->lineno, odp->link_name, imp->dll_name ); } else warning( "%s:%d: forward '%s' not found in the imported dll list\n", spec->src_name, odp->lineno, odp->link_name ); free( link_name ); free( dll_name ); } } /* flag the dll exports that link to an undefined symbol */ static void check_undefined_exports( DLLSPEC *spec ) { int i; for (i = 0; i < spec->nb_entry_points; i++) { ORDDEF *odp = &spec->entry_points[i]; if (odp->type == TYPE_STUB || odp->type == TYPE_ABS || odp->type == TYPE_VARIABLE) continue; if (odp->flags & FLAG_FORWARD) continue; if (find_name( odp->link_name, &undef_symbols )) { switch(odp->type) { case TYPE_PASCAL: case TYPE_STDCALL: case TYPE_CDECL: case TYPE_VARARGS: case TYPE_THISCALL: if (link_ext_symbols) { odp->flags |= FLAG_EXT_LINK; strarray_add( &ext_link_imports, odp->link_name, NULL ); } else error( "%s:%d: function '%s' not defined\n", spec->src_name, odp->lineno, odp->link_name ); break; default: error( "%s:%d: external symbol '%s' is not a function\n", spec->src_name, odp->lineno, odp->link_name ); break; } } } } /* create a .o file that references all the undefined symbols we want to resolve */ static char *create_undef_symbols_file( DLLSPEC *spec ) { char *as_file, *obj_file; int i; unsigned int j; FILE *f; as_file = get_temp_file_name( output_file_name, ".s" ); if (!(f = fopen( as_file, "w" ))) fatal_error( "Cannot create %s\n", as_file ); fprintf( f, "\t.data\n" ); for (i = 0; i < spec->nb_entry_points; i++) { ORDDEF *odp = &spec->entry_points[i]; if (odp->type == TYPE_STUB || odp->type == TYPE_ABS || odp->type == TYPE_VARIABLE) continue; if (odp->flags & FLAG_FORWARD) continue; fprintf( f, "\t%s %s\n", get_asm_ptr_keyword(), asm_name(odp->link_name) ); } for (j = 0; j < extra_ld_symbols.count; j++) fprintf( f, "\t%s %s\n", get_asm_ptr_keyword(), asm_name(extra_ld_symbols.str[j]) ); fclose( f ); obj_file = get_temp_file_name( output_file_name, ".o" ); assemble_file( as_file, obj_file ); return obj_file; } /* combine a list of object files with ld into a single object file */ /* returns the name of the combined file */ static const char *ldcombine_files( DLLSPEC *spec, char **argv ) { char *ld_tmp_file, *undef_file; struct strarray args = get_ld_command(); undef_file = create_undef_symbols_file( spec ); ld_tmp_file = get_temp_file_name( output_file_name, ".o" ); strarray_add( &args, "-r", "-o", ld_tmp_file, undef_file, NULL ); strarray_addv( &args, argv ); spawn( args ); return ld_tmp_file; } /* read in the list of undefined symbols */ void read_undef_symbols( DLLSPEC *spec, char **argv ) { size_t prefix_len; FILE *f; const char *prog = get_nm_command(); char *cmd, buffer[1024], name_prefix[16]; int err; const char *name; if (!argv[0]) return; add_extra_undef_symbols( spec ); strcpy( name_prefix, asm_name("") ); prefix_len = strlen( name_prefix ); name = ldcombine_files( spec, argv ); cmd = strmake( "%s -u %s", prog, name ); if (!(f = popen( cmd, "r" ))) fatal_error( "Cannot execute '%s'\n", cmd ); while (fgets( buffer, sizeof(buffer), f )) { char *p = buffer + strlen(buffer) - 1; if (p < buffer) continue; if (*p == '\n') *p-- = 0; p = buffer; while (*p == ' ') p++; if (p[0] == 'U' && p[1] == ' ' && p[2]) p += 2; if (prefix_len && !strncmp( p, name_prefix, prefix_len )) p += prefix_len; if (!strncmp( p, import_func_prefix, strlen(import_func_prefix) )) add_undef_import( p + strlen( import_func_prefix ), 0 ); else if (!strncmp( p, import_ord_prefix, strlen(import_ord_prefix) )) add_undef_import( p + strlen( import_ord_prefix ), 1 ); else strarray_add( &undef_symbols, xstrdup( p ), NULL ); } if ((err = pclose( f ))) warning( "%s failed with status %d\n", cmd, err ); free( cmd ); } void resolve_dll_imports( DLLSPEC *spec, struct list *list ) { unsigned int j; struct import *imp, *next; ORDDEF *odp; LIST_FOR_EACH_ENTRY_SAFE( imp, next, list, struct import, entry ) { for (j = 0; j < undef_symbols.count; j++) { odp = find_export( undef_symbols.str[j], imp->exports, imp->nb_exports ); if (odp) { if (odp->flags & FLAG_PRIVATE) continue; if (odp->type != TYPE_STDCALL && odp->type != TYPE_CDECL) warning( "winebuild: Data export '%s' cannot be imported from %s\n", odp->link_name, imp->dll_name ); else { add_import_func( imp, (odp->flags & FLAG_NONAME) ? NULL : odp->name, odp->export_name, odp->ordinal ); remove_name( &undef_symbols, j-- ); } } } if (!imp->nb_imports) { /* the dll is not used, get rid of it */ if (check_unused( imp, spec )) warning( "winebuild: %s imported but no symbols used\n", imp->dll_name ); list_remove( &imp->entry ); free_imports( imp ); } } } /* resolve the imports for a Win32 module */ void resolve_imports( DLLSPEC *spec ) { check_undefined_forwards( spec ); resolve_dll_imports( spec, &dll_imports ); resolve_dll_imports( spec, &dll_delayed ); sort_names( &undef_symbols ); check_undefined_exports( spec ); } /* check if symbol is still undefined */ int is_undefined( const char *name ) { return find_name( name, &undef_symbols ) != NULL; } /* output the get_pc thunk if needed */ void output_get_pc_thunk(void) { assert( target_cpu == CPU_x86 ); output( "\n\t.text\n" ); output( "\t.align %d\n", get_alignment(4) ); output( "\t%s\n", func_declaration("__wine_spec_get_pc_thunk_eax") ); output( "%s:\n", asm_name("__wine_spec_get_pc_thunk_eax") ); output_cfi( ".cfi_startproc" ); output( "\tmovl (%%esp),%%eax\n" ); output( "\tret\n" ); output_cfi( ".cfi_endproc" ); output_function_size( "__wine_spec_get_pc_thunk_eax" ); } /* output a single import thunk */ static void output_import_thunk( const char *name, const char *table, int pos ) { output( "\n\t.align %d\n", get_alignment(4) ); output( "\t%s\n", func_declaration(name) ); output( "%s\n", asm_globl(name) ); output_cfi( ".cfi_startproc" ); switch(target_cpu) { case CPU_x86: if (!UsePIC) { output( "\tjmp *(%s+%d)\n", table, pos ); } else { output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") ); output( "1:\tjmp *%s+%d-1b(%%eax)\n", table, pos ); needs_get_pc_thunk = 1; } break; case CPU_x86_64: output( "\tjmpq *%s+%d(%%rip)\n", table, pos ); break; case CPU_ARM: output( "\tldr IP,1f\n"); output( "\tldr PC,[PC,IP]\n" ); output( "1:\t.long %s+%u-(1b+4)\n", table, pos ); break; case CPU_ARM64: output( "\tadrp x9, %s\n", table ); output( "\tadd x9, x9, #:lo12:%s\n", table ); if (pos & 0xf000) output( "\tadd x9, x9, #%u\n", pos & 0xf000 ); if (pos & 0x0f00) output( "\tadd x9, x9, #%u\n", pos & 0x0f00 ); if (pos & 0x00f0) output( "\tadd x9, x9, #%u\n", pos & 0x00f0 ); if (pos & 0x000f) output( "\tadd x9, x9, #%u\n", pos & 0x000f ); output( "\tldur x9, [x9, #0]\n" ); output( "\tbr x9\n" ); break; case CPU_POWERPC: output( "\tmr %s, %s\n", ppc_reg(0), ppc_reg(31) ); if (target_platform == PLATFORM_APPLE) { output( "\tlis %s, ha16(%s+%d+32768)\n", ppc_reg(31), table, pos ); output( "\tla %s, lo16(%s+%d)(%s)\n", ppc_reg(31), table, pos, ppc_reg(31) ); } else { output( "\tlis %s, (%s+%d+32768)@h\n", ppc_reg(31), table, pos ); output( "\tla %s, (%s+%d)@l(%s)\n", ppc_reg(31), table, pos, ppc_reg(31) ); } output( "\tlwz %s, 0(%s)\n", ppc_reg(31), ppc_reg(31) ); output( "\tmtctr %s\n", ppc_reg(31) ); output( "\tmr %s, %s\n", ppc_reg(31), ppc_reg(0) ); output( "\tbctr\n" ); break; } output_cfi( ".cfi_endproc" ); output_function_size( name ); } /* check if we need an import directory */ int has_imports(void) { return !list_empty( &dll_imports ); } /* output the import table of a Win32 module */ static void output_immediate_imports(void) { int i, j; struct import *import; if (list_empty( &dll_imports )) return; /* no immediate imports */ /* main import header */ output( "\n/* import table */\n" ); output( "\n\t.data\n" ); output( "\t.align %d\n", get_alignment(4) ); output( ".L__wine_spec_imports:\n" ); /* list of dlls */ j = 0; LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry ) { output( "\t.long .L__wine_spec_import_data_names+%d-.L__wine_spec_rva_base\n", /* OriginalFirstThunk */ j * get_ptr_size() ); output( "\t.long 0\n" ); /* TimeDateStamp */ output( "\t.long 0\n" ); /* ForwarderChain */ output( "\t.long .L__wine_spec_import_name_%s-.L__wine_spec_rva_base\n", /* Name */ import->c_name ); output( "\t.long .L__wine_spec_import_data_ptrs+%d-.L__wine_spec_rva_base\n", /* FirstThunk */ j * get_ptr_size() ); j += import->nb_imports + 1; } output( "\t.long 0\n" ); /* OriginalFirstThunk */ output( "\t.long 0\n" ); /* TimeDateStamp */ output( "\t.long 0\n" ); /* ForwarderChain */ output( "\t.long 0\n" ); /* Name */ output( "\t.long 0\n" ); /* FirstThunk */ output( "\n\t.align %d\n", get_alignment(get_ptr_size()) ); /* output the names twice, once for OriginalFirstThunk and once for FirstThunk */ for (i = 0; i < 2; i++) { output( ".L__wine_spec_import_data_%s:\n", i ? "ptrs" : "names" ); LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry ) { for (j = 0; j < import->nb_imports; j++) { struct import_func *func = &import->imports[j]; if (func->name) output( "\t%s .L__wine_spec_import_data_%s_%s-.L__wine_spec_rva_base\n", get_asm_ptr_keyword(), import->c_name, func->name ); else { if (get_ptr_size() == 8) output( "\t.quad 0x800000000000%04x\n", func->ordinal ); else output( "\t.long 0x8000%04x\n", func->ordinal ); } } output( "\t%s 0\n", get_asm_ptr_keyword() ); } } output( ".L__wine_spec_imports_end:\n" ); LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry ) { for (j = 0; j < import->nb_imports; j++) { struct import_func *func = &import->imports[j]; if (!func->name) continue; output( "\t.align %d\n", get_alignment(2) ); output( ".L__wine_spec_import_data_%s_%s:\n", import->c_name, func->name ); output( "\t.short %d\n", func->ordinal ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), func->name ); } } LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry ) { output( ".L__wine_spec_import_name_%s:\n\t%s \"%s\"\n", import->c_name, get_asm_string_keyword(), import->dll_name ); } } /* output the import thunks of a Win32 module */ static void output_immediate_import_thunks(void) { int j, pos; struct import *import; static const char import_thunks[] = "__wine_spec_import_thunks"; if (list_empty( &dll_imports )) return; output( "\n/* immediate import thunks */\n\n" ); output( "\t.text\n" ); output( "\t.align %d\n", get_alignment(8) ); output( "%s:\n", asm_name(import_thunks)); pos = 0; LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry ) { for (j = 0; j < import->nb_imports; j++, pos += get_ptr_size()) { struct import_func *func = &import->imports[j]; output_import_thunk( func->name ? func->name : func->export_name, ".L__wine_spec_import_data_ptrs", pos ); } pos += get_ptr_size(); } output_function_size( import_thunks ); } /* output the delayed import table of a Win32 module */ static void output_delayed_imports( const DLLSPEC *spec ) { int j, mod; struct import *import; if (list_empty( &dll_delayed )) return; output( "\n/* delayed imports */\n\n" ); output( "\t.data\n" ); output( "\t.align %d\n", get_alignment(get_ptr_size()) ); output( "%s\n", asm_globl("__wine_spec_delay_imports") ); /* list of dlls */ j = mod = 0; LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) { output( "\t%s 0\n", get_asm_ptr_keyword() ); /* grAttrs */ output( "\t%s .L__wine_delay_name_%s\n", /* szName */ get_asm_ptr_keyword(), import->c_name ); output( "\t%s .L__wine_delay_modules+%d\n", /* phmod */ get_asm_ptr_keyword(), mod * get_ptr_size() ); output( "\t%s .L__wine_delay_IAT+%d\n", /* pIAT */ get_asm_ptr_keyword(), j * get_ptr_size() ); output( "\t%s .L__wine_delay_INT+%d\n", /* pINT */ get_asm_ptr_keyword(), j * get_ptr_size() ); output( "\t%s 0\n", get_asm_ptr_keyword() ); /* pBoundIAT */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* pUnloadIAT */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* dwTimeStamp */ j += import->nb_imports; mod++; } output( "\t%s 0\n", get_asm_ptr_keyword() ); /* grAttrs */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* szName */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* phmod */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* pIAT */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* pINT */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* pBoundIAT */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* pUnloadIAT */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* dwTimeStamp */ output( "\n.L__wine_delay_IAT:\n" ); LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) { for (j = 0; j < import->nb_imports; j++) { struct import_func *func = &import->imports[j]; const char *name = func->name ? func->name : func->export_name; output( "\t%s .L__wine_delay_imp_%s_%s\n", get_asm_ptr_keyword(), import->c_name, name ); } } output( "\n.L__wine_delay_INT:\n" ); LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) { for (j = 0; j < import->nb_imports; j++) { struct import_func *func = &import->imports[j]; if (!func->name) output( "\t%s %d\n", get_asm_ptr_keyword(), func->ordinal ); else output( "\t%s .L__wine_delay_data_%s_%s\n", get_asm_ptr_keyword(), import->c_name, func->name ); } } output( "\n.L__wine_delay_modules:\n" ); LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) { output( "\t%s 0\n", get_asm_ptr_keyword() ); } LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) { output( ".L__wine_delay_name_%s:\n", import->c_name ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), import->dll_name ); } LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) { for (j = 0; j < import->nb_imports; j++) { struct import_func *func = &import->imports[j]; if (!func->name) continue; output( ".L__wine_delay_data_%s_%s:\n", import->c_name, func->name ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), func->name ); } } output_function_size( "__wine_spec_delay_imports" ); } /* output the delayed import thunks of a Win32 module */ static void output_delayed_import_thunks( const DLLSPEC *spec ) { int idx, j, pos, extra_stack_storage = 0; struct import *import; static const char delayed_import_loaders[] = "__wine_spec_delayed_import_loaders"; static const char delayed_import_thunks[] = "__wine_spec_delayed_import_thunks"; if (list_empty( &dll_delayed )) return; output( "\n/* delayed import thunks */\n\n" ); output( "\t.text\n" ); output( "\t.align %d\n", get_alignment(8) ); output( "%s:\n", asm_name(delayed_import_loaders)); output( "\t%s\n", func_declaration("__wine_delay_load_asm") ); output( "%s:\n", asm_name("__wine_delay_load_asm") ); output_cfi( ".cfi_startproc" ); switch(target_cpu) { case CPU_x86: output( "\tpushl %%ecx\n" ); output_cfi( ".cfi_adjust_cfa_offset 4" ); output( "\tpushl %%edx\n" ); output_cfi( ".cfi_adjust_cfa_offset 4" ); output( "\tpushl %%eax\n" ); output_cfi( ".cfi_adjust_cfa_offset 4" ); output( "\tcall %s\n", asm_name("__wine_spec_delay_load") ); output_cfi( ".cfi_adjust_cfa_offset -4" ); output( "\tpopl %%edx\n" ); output_cfi( ".cfi_adjust_cfa_offset -4" ); output( "\tpopl %%ecx\n" ); output_cfi( ".cfi_adjust_cfa_offset -4" ); output( "\tjmp *%%eax\n" ); break; case CPU_x86_64: output( "\tsubq $0x98,%%rsp\n" ); output_cfi( ".cfi_adjust_cfa_offset 0x98" ); output( "\tmovq %%rdx,0x88(%%rsp)\n" ); output( "\tmovq %%rcx,0x80(%%rsp)\n" ); output( "\tmovq %%r8,0x78(%%rsp)\n" ); output( "\tmovq %%r9,0x70(%%rsp)\n" ); output( "\tmovq %%r10,0x68(%%rsp)\n" ); output( "\tmovq %%r11,0x60(%%rsp)\n" ); output( "\tmovups %%xmm0,0x50(%%rsp)\n" ); output( "\tmovups %%xmm1,0x40(%%rsp)\n" ); output( "\tmovups %%xmm2,0x30(%%rsp)\n" ); output( "\tmovups %%xmm3,0x20(%%rsp)\n" ); output( "\tmovq %%rax,%%rcx\n" ); output( "\tcall %s\n", asm_name("__wine_spec_delay_load") ); output( "\tmovups 0x20(%%rsp),%%xmm3\n" ); output( "\tmovups 0x30(%%rsp),%%xmm2\n" ); output( "\tmovups 0x40(%%rsp),%%xmm1\n" ); output( "\tmovups 0x50(%%rsp),%%xmm0\n" ); output( "\tmovq 0x60(%%rsp),%%r11\n" ); output( "\tmovq 0x68(%%rsp),%%r10\n" ); output( "\tmovq 0x70(%%rsp),%%r9\n" ); output( "\tmovq 0x78(%%rsp),%%r8\n" ); output( "\tmovq 0x80(%%rsp),%%rcx\n" ); output( "\tmovq 0x88(%%rsp),%%rdx\n" ); output( "\taddq $0x98,%%rsp\n" ); output_cfi( ".cfi_adjust_cfa_offset -0x98" ); output( "\tjmp *%%rax\n" ); break; case CPU_ARM: output( "\tpush {r0-r3,FP,LR}\n" ); output( "\tmov r0,IP\n" ); output( "\tldr IP,2f\n"); output( "\tadd IP,PC\n"); output( "\tblx IP\n"); output( "1:\tmov IP,r0\n"); output( "\tpop {r0-r3,FP,LR}\n" ); output( "\tbx IP\n"); output( "2:\t.long %s-1b\n", asm_name("__wine_spec_delay_load") ); break; case CPU_ARM64: output( "\tstp x29, x30, [sp,#-16]!\n" ); output( "\tmov x29, sp\n" ); output( "\tadrp x9, %s\n", asm_name("__wine_spec_delay_load") ); output( "\tadd x9, x9, #:lo12:%s\n", asm_name("__wine_spec_delay_load") ); output( "\tblr x9\n" ); output( "\tmov x9, x0\n" ); output( "\tldp x29, x30, [sp],#16\n" ); output( "\tldp x0, x1, [sp,#16]\n" ); output( "\tldp x2, x3, [sp,#32]\n" ); output( "\tldp x4, x5, [sp,#48]\n" ); output( "\tldp x6, x7, [sp],#80\n" ); output( "\tbr x9\n" ); /* or "ret x9" */ break; case CPU_POWERPC: if (target_platform == PLATFORM_APPLE) extra_stack_storage = 56; /* Save all callee saved registers into a stackframe. */ output( "\tstwu %s, -%d(%s)\n",ppc_reg(1), 48+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(3), 4+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(4), 8+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(5), 12+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(6), 16+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(7), 20+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(8), 24+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(9), 28+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(10),32+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(11),36+extra_stack_storage, ppc_reg(1)); output( "\tstw %s, %d(%s)\n", ppc_reg(12),40+extra_stack_storage, ppc_reg(1)); /* r0 -> r3 (arg1) */ output( "\tmr %s, %s\n", ppc_reg(3), ppc_reg(0)); /* save return address */ output( "\tmflr %s\n", ppc_reg(0)); output( "\tstw %s, %d(%s)\n", ppc_reg(0), 44+extra_stack_storage, ppc_reg(1)); /* Call the __wine_delay_load function, arg1 is arg1. */ output( "\tbl %s\n", asm_name("__wine_spec_delay_load") ); /* Load return value from call into ctr register */ output( "\tmtctr %s\n", ppc_reg(3)); /* restore all saved registers and drop stackframe. */ output( "\tlwz %s, %d(%s)\n", ppc_reg(3), 4+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(4), 8+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(5), 12+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(6), 16+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(7), 20+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(8), 24+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(9), 28+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(10),32+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(11),36+extra_stack_storage, ppc_reg(1)); output( "\tlwz %s, %d(%s)\n", ppc_reg(12),40+extra_stack_storage, ppc_reg(1)); /* Load return value from call into return register */ output( "\tlwz %s, %d(%s)\n", ppc_reg(0), 44+extra_stack_storage, ppc_reg(1)); output( "\tmtlr %s\n", ppc_reg(0)); output( "\taddi %s, %s, %d\n", ppc_reg(1), ppc_reg(1), 48+extra_stack_storage); /* branch to ctr register. */ output( "\tbctr\n"); break; } output_cfi( ".cfi_endproc" ); output_function_size( "__wine_delay_load_asm" ); output( "\n" ); idx = 0; LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) { for (j = 0; j < import->nb_imports; j++) { struct import_func *func = &import->imports[j]; const char *name = func->name ? func->name : func->export_name; output( ".L__wine_delay_imp_%s_%s:\n", import->c_name, name ); output_cfi( ".cfi_startproc" ); switch(target_cpu) { case CPU_x86: output( "\tmovl $%d, %%eax\n", (idx << 16) | j ); output( "\tjmp %s\n", asm_name("__wine_delay_load_asm") ); break; case CPU_x86_64: output( "\tmovq $%d,%%rax\n", (idx << 16) | j ); output( "\tjmp %s\n", asm_name("__wine_delay_load_asm") ); break; case CPU_ARM: { unsigned int mask, count = 0, val = (idx << 16) | j; for (mask = 0xff; mask; mask <<= 8) if (val & mask) output( "\t%s IP,#%u\n", count++ ? "add" : "mov", val & mask ); if (!count) output( "\tmov IP,#0\n" ); output( "\tb %s\n", asm_name("__wine_delay_load_asm") ); break; } case CPU_ARM64: output( "\tstp x6, x7, [sp,#-80]!\n" ); output( "\tstp x4, x5, [sp,#48]\n" ); output( "\tstp x2, x3, [sp,#32]\n" ); output( "\tstp x0, x1, [sp,#16]\n" ); output( "\tmov x0, #%d\n", idx ); output( "\tmov x1, #16384\n" ); output( "\tmul x1, x0, x1\n" ); output( "\tmov x0, x1\n" ); output( "\tmov x1, #4\n" ); output( "\tmul x1, x0, x1\n" ); output( "\tmov x0, x1\n" ); output( "\tadd x0, x0, #%d\n", j ); output( "\tadr x9, %s\n", asm_name("__wine_delay_load_asm") ); output( "\tbr x9\n" ); break; case CPU_POWERPC: switch(target_platform) { case PLATFORM_APPLE: /* On Darwin we can use r0 and r2 */ /* Upper part in r2 */ output( "\tlis %s, %d\n", ppc_reg(2), idx); /* Lower part + r2 -> r0, Note we can't use r0 directly */ output( "\taddi %s, %s, %d\n", ppc_reg(0), ppc_reg(2), j); output( "\tb %s\n", asm_name("__wine_delay_load_asm") ); break; default: /* On linux we can't use r2 since r2 is not a scratch register (hold the TOC) */ /* Save r13 on the stack */ output( "\taddi %s, %s, -0x4\n", ppc_reg(1), ppc_reg(1)); output( "\tstw %s, 0(%s)\n", ppc_reg(13), ppc_reg(1)); /* Upper part in r13 */ output( "\tlis %s, %d\n", ppc_reg(13), idx); /* Lower part + r13 -> r0, Note we can't use r0 directly */ output( "\taddi %s, %s, %d\n", ppc_reg(0), ppc_reg(13), j); /* Restore r13 */ output( "\tstw %s, 0(%s)\n", ppc_reg(13), ppc_reg(1)); output( "\taddic %s, %s, 0x4\n", ppc_reg(1), ppc_reg(1)); output( "\tb %s\n", asm_name("__wine_delay_load_asm") ); break; } break; } output_cfi( ".cfi_endproc" ); } idx++; } output_function_size( delayed_import_loaders ); output( "\n\t.align %d\n", get_alignment(get_ptr_size()) ); output( "%s:\n", asm_name(delayed_import_thunks)); pos = 0; LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry ) { for (j = 0; j < import->nb_imports; j++, pos += get_ptr_size()) { struct import_func *func = &import->imports[j]; output_import_thunk( func->name ? func->name : func->export_name, ".L__wine_delay_IAT", pos ); } } output_function_size( delayed_import_thunks ); } /* output import stubs for exported entry points that link to external symbols */ static void output_external_link_imports( DLLSPEC *spec ) { unsigned int i, pos; if (!ext_link_imports.count) return; /* nothing to do */ sort_names( &ext_link_imports ); /* get rid of duplicate names */ for (i = 1; i < ext_link_imports.count; i++) { if (!strcmp( ext_link_imports.str[i-1], ext_link_imports.str[i] )) remove_name( &ext_link_imports, i-- ); } output( "\n/* external link thunks */\n\n" ); output( "\t.data\n" ); output( "\t.align %d\n", get_alignment(get_ptr_size()) ); output( ".L__wine_spec_external_links:\n" ); for (i = 0; i < ext_link_imports.count; i++) output( "\t%s %s\n", get_asm_ptr_keyword(), asm_name(ext_link_imports.str[i]) ); output( "\n\t.text\n" ); output( "\t.align %d\n", get_alignment(get_ptr_size()) ); output( "%s:\n", asm_name("__wine_spec_external_link_thunks") ); for (i = pos = 0; i < ext_link_imports.count; i++) { char *buffer = strmake( "__wine_spec_ext_link_%s", ext_link_imports.str[i] ); output_import_thunk( buffer, ".L__wine_spec_external_links", pos ); free( buffer ); pos += get_ptr_size(); } output_function_size( "__wine_spec_external_link_thunks" ); } /******************************************************************* * output_stubs * * Output the functions for stub entry points */ void output_stubs( DLLSPEC *spec ) { const char *name, *exp_name; int i, count; if (!has_stubs( spec )) return; output( "\n/* stub functions */\n\n" ); output( "\t.text\n" ); for (i = count = 0; i < spec->nb_entry_points; i++) { ORDDEF *odp = &spec->entry_points[i]; if (odp->type != TYPE_STUB) continue; name = get_stub_name( odp, spec ); exp_name = odp->name ? odp->name : odp->export_name; output( "\t.align %d\n", get_alignment(4) ); output( "\t%s\n", func_declaration(name) ); output( "%s:\n", (name) ); output_cfi( ".cfi_startproc" ); switch (target_cpu) { case CPU_x86: /* flesh out the stub a bit to make safedisc happy */ output(" \tnop\n" ); output(" \tnop\n" ); output(" \tnop\n" ); output(" \tnop\n" ); output(" \tnop\n" ); output(" \tnop\n" ); output(" \tnop\n" ); output(" \tnop\n" ); output(" \tnop\n" ); output( "\tsubl $12,%%esp\n" ); output_cfi( ".cfi_adjust_cfa_offset 12" ); if (UsePIC) { output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") ); output( "1:" ); needs_get_pc_thunk = 1; if (exp_name) { output( "\tleal .L%s_string-1b(%%eax),%%ecx\n", name ); output( "\tmovl %%ecx,4(%%esp)\n" ); count++; } else output( "\tmovl $%d,4(%%esp)\n", odp->ordinal ); output( "\tleal .L__wine_spec_file_name-1b(%%eax),%%ecx\n" ); output( "\tmovl %%ecx,(%%esp)\n" ); } else { if (exp_name) { output( "\tmovl $.L%s_string,4(%%esp)\n", name ); count++; } else output( "\tmovl $%d,4(%%esp)\n", odp->ordinal ); output( "\tmovl $.L__wine_spec_file_name,(%%esp)\n" ); } output( "\tcall %s\n", asm_name("__wine_spec_unimplemented_stub") ); break; case CPU_x86_64: output( "\tsubq $8,%%rsp\n" ); output_cfi( ".cfi_adjust_cfa_offset 8" ); output( "\tleaq .L__wine_spec_file_name(%%rip),%%rdi\n" ); if (exp_name) { output( "leaq .L%s_string(%%rip),%%rsi\n", name ); count++; } else output( "\tmovq $%d,%%rsi\n", odp->ordinal ); output( "\tcall %s\n", asm_name("__wine_spec_unimplemented_stub") ); break; case CPU_ARM: output( "\tldr r0,2f\n"); output( "\tadd r0,PC\n"); output( "\tldr r1,2f+4\n"); output( "1:" ); if (exp_name) { output( "\tadd r1,PC\n"); count++; } output( "\tbl %s\n", asm_name("__wine_spec_unimplemented_stub") ); output( "2:\t.long .L__wine_spec_file_name-1b\n" ); if (exp_name) output( "\t.long .L%s_string-2b\n", name ); else output( "\t.long %u\n", odp->ordinal ); break; case CPU_ARM64: output( "\tadrp x0, %s\n", asm_name("__wine_spec_file_name") ); output( "\tadd x0, x0, #:lo12:%s\n", asm_name("__wine_spec_file_name") ); if (exp_name) { output( "\tadrp x1, .L%s_string\n", name ); output( "\tadd x1, x1, #:lo12:.L%s_string\n", name ); count++; } else output( "\tmov x1, %u\n", odp->ordinal ); output( "\tadrp x2, %s\n", asm_name("__wine_spec_unimplemented_stub") ); output( "\tadd x2, x2, #:lo12:%s\n", asm_name("__wine_spec_unimplemented_stub") ); output( "\tblr x2\n" ); break; default: assert(0); } output_cfi( ".cfi_endproc" ); output_function_size( name ); } if (count) { output( "\t%s\n", get_asm_string_section() ); for (i = 0; i < spec->nb_entry_points; i++) { ORDDEF *odp = &spec->entry_points[i]; if (odp->type != TYPE_STUB) continue; exp_name = odp->name ? odp->name : odp->export_name; if (exp_name) { name = get_stub_name( odp, spec ); output( ".L%s_string:\n", name ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), exp_name ); } } } } /* output the import and delayed import tables of a Win32 module */ void output_imports( DLLSPEC *spec ) { output_immediate_imports(); output_delayed_imports( spec ); output_immediate_import_thunks(); output_delayed_import_thunks( spec ); output_external_link_imports( spec ); } /* create a new asm temp file */ static void new_output_as_file( const char *prefix ) { char *name = get_temp_file_name( prefix, ".s" ); if (output_file) fclose( output_file ); if (!(output_file = fopen( name, "w" ))) fatal_error( "Unable to create output file '%s'\n", name ); strarray_add( &as_files, name, NULL ); } /* assemble all the asm files */ static void assemble_files( const char *prefix ) { unsigned int i; if (output_file) fclose( output_file ); output_file = NULL; for (i = 0; i < as_files.count; i++) { char *obj = get_temp_file_name( prefix, ".o" ); assemble_file( as_files.str[i], obj ); as_files.str[i] = obj; } } /* build a library from the current asm files and any additional object files in argv */ static void build_library( const char *output_name, char **argv, int create ) { struct strarray args = find_tool( "ar", NULL ); struct strarray ranlib = find_tool( "ranlib", NULL ); strarray_add( &args, create ? "rc" : "r", output_name, NULL ); strarray_addall( &args, as_files ); strarray_addv( &args, argv ); if (create) unlink( output_name ); spawn( args ); strarray_add( &ranlib, output_name, NULL ); spawn( ranlib ); } /* create a Windows-style import library */ static void build_windows_import_lib( DLLSPEC *spec ) { struct strarray args; char *def_file; const char *as_flags, *m_flag; def_file = get_temp_file_name( output_file_name, ".def" ); fclose( output_file ); if (!(output_file = fopen( def_file, "w" ))) fatal_error( "Unable to create output file '%s'\n", def_file ); output_def_file( spec, 0 ); fclose( output_file ); output_file = NULL; args = find_tool( "dlltool", NULL ); switch (target_cpu) { case CPU_x86: m_flag = "i386"; as_flags = "--as-flags=--32"; break; case CPU_x86_64: m_flag = "i386:x86-64"; as_flags = "--as-flags=--64"; break; default: m_flag = NULL; break; } strarray_add( &args, "-k", "-l", output_file_name, "-d", def_file, NULL ); if (m_flag) strarray_add( &args, "-m", m_flag, as_flags, NULL ); spawn( args ); } /* create a Unix-style import library */ static void build_unix_import_lib( DLLSPEC *spec ) { static const char valid_chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._@"; int i, total; const char *name, *prefix; char *dll_name = xstrdup( spec->file_name ); if (strendswith( dll_name, ".dll" )) dll_name[strlen(dll_name) - 4] = 0; if (strspn( dll_name, valid_chars ) < strlen( dll_name )) fatal_error( "%s contains invalid characters\n", spec->file_name ); /* entry points */ for (i = total = 0; i < spec->nb_entry_points; i++) { const ORDDEF *odp = &spec->entry_points[i]; if (odp->name) name = odp->name; else if (odp->export_name) name = odp->export_name; else continue; if (odp->flags & FLAG_PRIVATE) continue; total++; /* C++ mangled names cannot be imported */ if (strpbrk( name, "?@" )) continue; switch(odp->type) { case TYPE_VARARGS: case TYPE_CDECL: case TYPE_STDCALL: case TYPE_THISCALL: prefix = (!odp->name || (odp->flags & FLAG_ORDINAL)) ? import_ord_prefix : import_func_prefix; new_output_as_file( spec->file_name ); output( "\t.text\n" ); output( "\n\t.align %d\n", get_alignment( get_ptr_size() )); output( "\t%s\n", func_declaration( name ) ); output( "%s\n", asm_globl( name ) ); output( "\t%s %s%s$%u$%s\n", get_asm_ptr_keyword(), asm_name( prefix ), dll_name, odp->ordinal, name ); output_function_size( name ); output_gnu_stack_note(); break; default: break; } } if (!total) warning( "%s: Import library doesn't export anything\n", spec->file_name ); if (!as_files.count) /* create a dummy file to avoid empty import libraries */ { new_output_as_file( spec->file_name ); output( "\t.text\n" ); } assemble_files( spec->file_name ); free( dll_name ); } /* output an import library for a Win32 module and additional object files */ void output_import_lib( DLLSPEC *spec, char **argv ) { if (target_platform == PLATFORM_WINDOWS) { build_windows_import_lib( spec ); if (argv[0]) build_library( output_file_name, argv, 0 ); } else { build_unix_import_lib( spec ); build_library( output_file_name, argv, 1 ); } output_file_name = NULL; } ================================================ FILE: convspec/main.c.h ================================================ /* * winebuild main function * * Copyright 1993 Robert J. Amstadt * Copyright 1995 Martin von Loewis * Copyright 1995, 1996, 1997 Alexandre Julliard * Copyright 1997 Eric Youngdale * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include #ifdef HAVE_GETOPT_H # include #endif #include "build.h" int UsePIC = 0; int nb_errors = 0; int display_warnings = 0; int kill_at = 0; int verbose = 0; int link_ext_symbols = 0; int force_pointer_size = 0; int unwind_tables = 0; #ifdef __i386__ enum target_cpu target_cpu = CPU_x86; #elif defined(__x86_64__) enum target_cpu target_cpu = CPU_x86_64; #elif defined(__powerpc__) enum target_cpu target_cpu = CPU_POWERPC; #elif defined(__arm__) enum target_cpu target_cpu = CPU_ARM; #elif defined(__aarch64__) enum target_cpu target_cpu = CPU_ARM64; #else #error Unsupported CPU #endif #ifdef __APPLE__ enum target_platform target_platform = PLATFORM_APPLE; #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) enum target_platform target_platform = PLATFORM_FREEBSD; #elif defined(__sun) enum target_platform target_platform = PLATFORM_SOLARIS; #elif defined(_WIN32) enum target_platform target_platform = PLATFORM_WINDOWS; #else enum target_platform target_platform = PLATFORM_UNSPECIFIED; #endif char *target_alias = NULL; char *input_file_name = NULL; char *spec_file_name = NULL; FILE *output_file = NULL; const char *output_file_name = NULL; static const char *output_file_source_name; static int fake_module; struct strarray lib_path = { 0 }; struct strarray as_command = { 0 }; struct strarray cc_command = { 0 }; struct strarray ld_command = { 0 }; struct strarray nm_command = { 0 }; char *cpu_option = NULL; char *arch_option = NULL; #ifdef __SOFTFP__ const char *float_abi_option = "soft"; #else const char *float_abi_option = "softfp"; #endif #ifdef __thumb__ int thumb_mode = 1; #else int thumb_mode = 0; #endif static struct strarray res_files; /* execution mode */ enum exec_mode_values { MODE_NONE, MODE_DLL, MODE_EXE, MODE_DEF, MODE_IMPLIB, MODE_RESOURCES }; static enum exec_mode_values exec_mode = MODE_NONE; static const struct { const char *name; enum target_platform platform; } platform_names[] = { { "macos", PLATFORM_APPLE }, { "darwin", PLATFORM_APPLE }, { "freebsd", PLATFORM_FREEBSD }, { "solaris", PLATFORM_SOLARIS }, { "mingw32", PLATFORM_WINDOWS }, { "windows", PLATFORM_WINDOWS }, { "winnt", PLATFORM_WINDOWS } }; /* set the dll file name from the input file name */ static void set_dll_file_name( const char *name, DLLSPEC *spec ) { char *p; if (spec->file_name) return; if ((p = strrchr( name, '\\' ))) name = p + 1; if ((p = strrchr( name, '/' ))) name = p + 1; spec->file_name = xmalloc( strlen(name) + 5 ); strcpy( spec->file_name, name ); if ((p = strrchr( spec->file_name, '.' ))) { if (!strcmp( p, ".spec" ) || !strcmp( p, ".def" )) *p = 0; } } /* set the dll name from the file name */ static void init_dll_name( DLLSPEC *spec ) { if (!spec->file_name && output_file_name) { char *p; spec->file_name = xstrdup( output_file_name ); if ((p = strrchr( spec->file_name, '.' ))) *p = 0; } if (!spec->dll_name && spec->file_name) /* set default name from file name */ { char *p; spec->dll_name = xstrdup( spec->file_name ); if ((p = strrchr( spec->dll_name, '.' ))) *p = 0; } spec->c_name = make_c_identifier( spec->dll_name ); } /* set the dll subsystem */ static void set_subsystem( const char *subsystem, DLLSPEC *spec ) { char *major, *minor, *str = xstrdup( subsystem ); if ((major = strchr( str, ':' ))) *major++ = 0; if (!strcmp( str, "native" )) spec->subsystem = IMAGE_SUBSYSTEM_NATIVE; else if (!strcmp( str, "windows" )) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI; else if (!strcmp( str, "console" )) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI; else if (!strcmp( str, "wince" )) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_CE_GUI; else if (!strcmp( str, "win16" )) spec->type = SPEC_WIN16; else fatal_error( "Invalid subsystem name '%s'\n", subsystem ); if (major) { if ((minor = strchr( major, '.' ))) { *minor++ = 0; spec->subsystem_minor = atoi( minor ); } spec->subsystem_major = atoi( major ); } free( str ); } /* set the target CPU and platform */ static void set_target( const char *target ) { unsigned int i; char *p, *platform, *spec = xstrdup( target ); /* target specification is in the form CPU-MANUFACTURER-OS or CPU-MANUFACTURER-KERNEL-OS */ target_alias = xstrdup( target ); /* get the CPU part */ if ((p = strchr( spec, '-' ))) { int cpu; *p++ = 0; cpu = get_cpu_from_name( spec ); if (cpu == -1) fatal_error( "Unrecognized CPU '%s'\n", spec ); target_cpu = cpu; platform = p; if ((p = strrchr( p, '-' ))) platform = p + 1; } else if (!strcmp( spec, "mingw32" )) { target_cpu = CPU_x86; platform = spec; } else fatal_error( "Invalid target specification '%s'\n", target ); /* get the OS part */ target_platform = PLATFORM_UNSPECIFIED; /* default value */ for (i = 0; i < sizeof(platform_names)/sizeof(platform_names[0]); i++) { if (!strncmp( platform_names[i].name, platform, strlen(platform_names[i].name) )) { target_platform = platform_names[i].platform; break; } } free( spec ); } /* cleanup on program exit */ static void cleanup(void) { if (output_file_name) unlink( output_file_name ); } /* clean things up when aborting on a signal */ static void exit_on_signal( int sig ) { exit(1); /* this will call atexit functions */ } /******************************************************************* * command-line option handling */ static const char usage_str[] = "Usage: winebuild [OPTIONS] [FILES]\n\n" "Options:\n" " --as-cmd=AS Command to use for assembling (default: as)\n" " -b, --target=TARGET Specify target CPU and platform for cross-compiling\n" " --cc-cmd=CC C compiler to use for assembling (default: fall back to --as-cmd)\n" " -d, --delay-lib=LIB Import the specified library in delayed mode\n" " -D SYM Ignored for C flags compatibility\n" " -e, --entry=FUNC Set the DLL entry point function (default: DllMain)\n" " -E, --export=FILE Export the symbols defined in the .spec or .def file\n" " --external-symbols Allow linking to external symbols\n" " -f FLAGS Compiler flags (-fPIC and -fasynchronous-unwind-tables are supported)\n" " -F, --filename=DLLFILE Set the DLL filename (default: from input file name)\n" " --fake-module Create a fake binary module\n" " -h, --help Display this help message\n" " -H, --heap=SIZE Set the heap size for a Win16 dll\n" " -I DIR Ignored for C flags compatibility\n" " -k, --kill-at Kill stdcall decorations in generated .def files\n" " -K, FLAGS Compiler flags (only -KPIC is supported)\n" " --large-address-aware Support an address space larger than 2Gb\n" " --ld-cmd=LD Command to use for linking (default: ld)\n" " -l, --library=LIB Import the specified library\n" " -L, --library-path=DIR Look for imports libraries in DIR\n" " -m16, -m32, -m64 Force building 16-bit, 32-bit resp. 64-bit code\n" " -M, --main-module=MODULE Set the name of the main module for a Win16 dll\n" " --nm-cmd=NM Command to use to get undefined symbols (default: nm)\n" " --nxcompat=y|n Set the NX compatibility flag (default: yes)\n" " -N, --dll-name=DLLNAME Set the DLL name (default: from input file name)\n" " -o, --output=NAME Set the output file name (default: stdout)\n" " -r, --res=RSRC.RES Load resources from RSRC.RES\n" " --save-temps Do not delete the generated intermediate files\n" " --subsystem=SUBSYS Set the subsystem (one of native, windows, console, wince)\n" " -u, --undefined=SYMBOL Add an undefined reference to SYMBOL when linking\n" " -v, --verbose Display the programs invoked\n" " --version Print the version and exit\n" " -w, --warnings Turn on warnings\n" "\nMode options:\n" " --dll Build a .c file from a .spec or .def file\n" " --def Build a .def file from a .spec file\n" " --exe Build a .c file for an executable\n" " --implib Build an import library\n" " --resources Build a .o file for the resource files\n\n" "The mode options are mutually exclusive; you must specify one and only one.\n\n"; enum long_options_values { LONG_OPT_DLL = 1, LONG_OPT_DEF, LONG_OPT_EXE, LONG_OPT_IMPLIB, LONG_OPT_ASCMD, LONG_OPT_CCCMD, LONG_OPT_EXTERNAL_SYMS, LONG_OPT_FAKE_MODULE, LONG_OPT_LARGE_ADDRESS_AWARE, LONG_OPT_LDCMD, LONG_OPT_NMCMD, LONG_OPT_NXCOMPAT, LONG_OPT_RESOURCES, LONG_OPT_SAVE_TEMPS, LONG_OPT_SUBSYSTEM, LONG_OPT_VERSION }; static const char short_options[] = "C:D:E:F:H:I:K:L:M:N:b:d:e:f:hkl:m:o:r:u:vw"; static const struct option long_options[] = { { "dll", 0, 0, LONG_OPT_DLL }, { "def", 0, 0, LONG_OPT_DEF }, { "exe", 0, 0, LONG_OPT_EXE }, { "implib", 0, 0, LONG_OPT_IMPLIB }, { "as-cmd", 1, 0, LONG_OPT_ASCMD }, { "cc-cmd", 1, 0, LONG_OPT_CCCMD }, { "external-symbols", 0, 0, LONG_OPT_EXTERNAL_SYMS }, { "fake-module", 0, 0, LONG_OPT_FAKE_MODULE }, { "large-address-aware", 0, 0, LONG_OPT_LARGE_ADDRESS_AWARE }, { "ld-cmd", 1, 0, LONG_OPT_LDCMD }, { "nm-cmd", 1, 0, LONG_OPT_NMCMD }, { "nxcompat", 1, 0, LONG_OPT_NXCOMPAT }, { "resources", 0, 0, LONG_OPT_RESOURCES }, { "save-temps", 0, 0, LONG_OPT_SAVE_TEMPS }, { "subsystem", 1, 0, LONG_OPT_SUBSYSTEM }, { "version", 0, 0, LONG_OPT_VERSION }, /* aliases for short options */ { "target", 1, 0, 'b' }, { "delay-lib", 1, 0, 'd' }, { "export", 1, 0, 'E' }, { "entry", 1, 0, 'e' }, { "filename", 1, 0, 'F' }, { "help", 0, 0, 'h' }, { "heap", 1, 0, 'H' }, { "kill-at", 0, 0, 'k' }, { "library", 1, 0, 'l' }, { "library-path", 1, 0, 'L' }, { "main-module", 1, 0, 'M' }, { "dll-name", 1, 0, 'N' }, { "output", 1, 0, 'o' }, { "res", 1, 0, 'r' }, { "undefined", 1, 0, 'u' }, { "verbose", 0, 0, 'v' }, { "warnings", 0, 0, 'w' }, { NULL, 0, 0, 0 } }; static void usage( int exit_code ) { fprintf( stderr, "%s", usage_str ); exit( exit_code ); } static void set_exec_mode( enum exec_mode_values mode ) { if (exec_mode != MODE_NONE) usage(1); exec_mode = mode; } /* parse options from the argv array and remove all the recognized ones */ static char **parse_options( int argc, char **argv, DLLSPEC *spec ) { char *p; int optc; int save_temps = 0; while ((optc = getopt_long( argc, argv, short_options, long_options, NULL )) != -1) { switch(optc) { case 'D': /* ignored */ break; case 'E': spec_file_name = xstrdup( optarg ); set_dll_file_name( optarg, spec ); break; case 'F': spec->file_name = xstrdup( optarg ); break; case 'H': if (!isdigit(optarg[0])) fatal_error( "Expected number argument with -H option instead of '%s'\n", optarg ); spec->heap_size = atoi(optarg); if (spec->heap_size > 65535) fatal_error( "Invalid heap size %d, maximum is 65535\n", spec->heap_size ); break; case 'I': /* ignored */ break; case 'K': /* ignored, because cc generates correct code. */ break; case 'L': strarray_add( &lib_path, xstrdup( optarg ), NULL ); break; case 'm': if (!strcmp( optarg, "16" )) spec->type = SPEC_WIN16; else if (!strcmp( optarg, "32" )) force_pointer_size = 4; else if (!strcmp( optarg, "64" )) force_pointer_size = 8; else if (!strcmp( optarg, "arm" )) thumb_mode = 0; else if (!strcmp( optarg, "thumb" )) thumb_mode = 1; else if (!strncmp( optarg, "cpu=", 4 )) cpu_option = xstrdup( optarg + 4 ); else if (!strncmp( optarg, "arch=", 5 )) arch_option = xstrdup( optarg + 5 ); else if (!strncmp( optarg, "float-abi=", 10 )) float_abi_option = xstrdup( optarg + 10 ); else fatal_error( "Unknown -m option '%s'\n", optarg ); break; case 'M': spec->main_module = xstrdup( optarg ); break; case 'N': spec->dll_name = xstrdup( optarg ); break; case 'b': set_target( optarg ); break; case 'd': add_delayed_import( optarg ); break; case 'e': spec->init_func = xstrdup( optarg ); if ((p = strchr( spec->init_func, '@' ))) *p = 0; /* kill stdcall decoration */ break; case 'f': if (!strcmp( optarg, "PIC") || !strcmp( optarg, "pic")) UsePIC = 1; else if (!strcmp( optarg, "asynchronous-unwind-tables")) unwind_tables = 1; else if (!strcmp( optarg, "no-asynchronous-unwind-tables")) unwind_tables = 0; /* ignore all other flags */ break; case 'h': usage(0); break; case 'k': kill_at = 1; break; case 'l': add_import_dll( optarg, NULL ); break; case 'o': { char *ext = strrchr( optarg, '.' ); if (unlink( optarg ) == -1 && errno != ENOENT) fatal_error( "Unable to create output file '%s'\n", optarg ); if (ext && !strcmp( ext, ".o" )) { output_file_source_name = get_temp_file_name( optarg, ".s" ); if (!(output_file = fopen( output_file_source_name, "w" ))) fatal_error( "Unable to create output file '%s'\n", optarg ); } else { if (!(output_file = fopen( optarg, "w" ))) fatal_error( "Unable to create output file '%s'\n", optarg ); } output_file_name = xstrdup(optarg); atexit( cleanup ); /* make sure we remove the output file on exit */ } break; case 'r': strarray_add( &res_files, xstrdup( optarg ), NULL ); break; case 'u': add_extra_ld_symbol( optarg ); break; case 'v': verbose++; break; case 'w': display_warnings = 1; break; case LONG_OPT_DLL: set_exec_mode( MODE_DLL ); break; case LONG_OPT_DEF: set_exec_mode( MODE_DEF ); break; case LONG_OPT_EXE: set_exec_mode( MODE_EXE ); if (!spec->subsystem) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI; break; case LONG_OPT_IMPLIB: set_exec_mode( MODE_IMPLIB ); break; case LONG_OPT_ASCMD: as_command = strarray_fromstring( optarg, " " ); break; case LONG_OPT_CCCMD: cc_command = strarray_fromstring( optarg, " " ); break; case LONG_OPT_FAKE_MODULE: fake_module = 1; break; case LONG_OPT_EXTERNAL_SYMS: link_ext_symbols = 1; break; case LONG_OPT_LARGE_ADDRESS_AWARE: spec->characteristics |= IMAGE_FILE_LARGE_ADDRESS_AWARE; break; case LONG_OPT_LDCMD: ld_command = strarray_fromstring( optarg, " " ); break; case LONG_OPT_NMCMD: nm_command = strarray_fromstring( optarg, " " ); break; case LONG_OPT_NXCOMPAT: if (optarg[0] == 'n' || optarg[0] == 'N') spec->dll_characteristics &= ~IMAGE_DLLCHARACTERISTICS_NX_COMPAT; break; case LONG_OPT_RESOURCES: set_exec_mode( MODE_RESOURCES ); break; case LONG_OPT_SAVE_TEMPS: save_temps = 1; break; case LONG_OPT_SUBSYSTEM: set_subsystem( optarg, spec ); break; case LONG_OPT_VERSION: printf( "winebuild version " PACKAGE_VERSION "\n" ); exit(0); case '?': usage(1); break; } } if (!save_temps) atexit( cleanup_tmp_files ); if (spec->file_name && !strchr( spec->file_name, '.' )) strcat( spec->file_name, exec_mode == MODE_EXE ? ".exe" : ".dll" ); init_dll_name( spec ); switch (target_cpu) { case CPU_x86: if (force_pointer_size == 8) target_cpu = CPU_x86_64; break; case CPU_x86_64: if (force_pointer_size == 4) target_cpu = CPU_x86; break; default: if (force_pointer_size == 8) fatal_error( "Cannot build 64-bit code for this CPU\n" ); break; } return &argv[optind]; } /* load all specified resource files */ static void load_resources( char *argv[], DLLSPEC *spec ) { int i; char **ptr, **last; switch (spec->type) { case SPEC_WIN16: for (i = 0; i < res_files.count; i++) load_res16_file( res_files.str[i], spec ); break; case SPEC_WIN32: for (i = 0; i < res_files.count; i++) { if (!load_res32_file( res_files.str[i], spec )) fatal_error( "%s is not a valid Win32 resource file\n", res_files.str[i] ); } /* load any resource file found in the remaining arguments */ for (ptr = last = argv; *ptr; ptr++) { if (!load_res32_file( *ptr, spec )) *last++ = *ptr; /* not a resource file, keep it in the list */ } *last = NULL; break; } } /* add input files that look like import libs to the import list */ static void load_import_libs( char *argv[] ) { char **ptr, **last; for (ptr = last = argv; *ptr; ptr++) { if (strendswith( *ptr, ".def" )) add_import_dll( NULL, *ptr ); else *last++ = *ptr; /* not an import dll, keep it in the list */ } *last = NULL; } static int parse_input_file( DLLSPEC *spec ) { FILE *input_file = open_input_file( NULL, spec_file_name ); char *extension = strrchr( spec_file_name, '.' ); int result; spec->src_name = xstrdup( input_file_name ); if (extension && !strcmp( extension, ".def" )) result = parse_def_file( input_file, spec ); else result = parse_spec_file( input_file, spec ); close_input_file( input_file ); return result; } /******************************************************************* * main */ int maiAn(int argc, char **argv) { DLLSPEC *spec = alloc_dll_spec(); #ifdef SIGHUP signal( SIGHUP, exit_on_signal ); #endif signal( SIGTERM, exit_on_signal ); signal( SIGINT, exit_on_signal ); output_file = stdout; argv = parse_options( argc, argv, spec ); switch(exec_mode) { case MODE_DLL: if (spec->subsystem != IMAGE_SUBSYSTEM_NATIVE) spec->characteristics |= IMAGE_FILE_DLL; /* fall through */ case MODE_EXE: load_resources( argv, spec ); load_import_libs( argv ); if (spec_file_name && !parse_input_file( spec )) break; if (fake_module) { if (spec->type == SPEC_WIN16) output_fake_module16( spec ); else output_fake_module( spec ); break; } read_undef_symbols( spec, argv ); switch (spec->type) { case SPEC_WIN16: output_spec16_file( spec ); break; case SPEC_WIN32: BuildSpec32File( spec ); break; default: assert(0); } break; case MODE_DEF: if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] ); if (!spec_file_name) fatal_error( "missing .spec file\n" ); if (!parse_input_file( spec )) break; output_def_file( spec, 1 ); break; case MODE_IMPLIB: if (!spec_file_name) fatal_error( "missing .spec file\n" ); if (!parse_input_file( spec )) break; output_import_lib( spec, argv ); break; case MODE_RESOURCES: load_resources( argv, spec ); output_res_o_file( spec ); break; default: usage(1); break; } if (nb_errors) exit(1); if (output_file_name) { if (fclose( output_file ) < 0) fatal_perror( "fclose" ); if (output_file_source_name) assemble_file( output_file_source_name, output_file_name ); output_file_name = NULL; } return 0; } ================================================ FILE: convspec/parser.c ================================================ /* * Spec file parser * * Copyright 1993 Robert J. Amstadt * Copyright 1995 Martin von Loewis * Copyright 1995, 1996, 1997, 2004 Alexandre Julliard * Copyright 1997 Eric Youngdale * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include "build.h" int current_line = 0; static char ParseBuffer[512]; static char TokenBuffer[512]; static char *ParseNext = ParseBuffer; static FILE *input_file; static const char *separator_chars; static const char *comment_chars; /* valid characters in ordinal names */ static const char valid_ordname_chars[] = "/$:-_@?<>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; static const char * const TypeNames[TYPE_NBTYPES] = { "variable", /* TYPE_VARIABLE */ "pascal", /* TYPE_PASCAL */ "equate", /* TYPE_ABS */ "stub", /* TYPE_STUB */ "stdcall", /* TYPE_STDCALL */ "cdecl", /* TYPE_CDECL */ "varargs", /* TYPE_VARARGS */ "thiscall", /* TYPE_THISCALL */ "extern" /* TYPE_EXTERN */ }; static const char * const FlagNames[] = { "norelay", /* FLAG_NORELAY */ "noname", /* FLAG_NONAME */ "ret16", /* FLAG_RET16 */ "ret64", /* FLAG_RET64 */ "register", /* FLAG_REGISTER */ "private", /* FLAG_PRIVATE */ "ordinal", /* FLAG_ORDINAL */ "stkprolog", /* FLAG_STKPROLOG */ NULL }; static const char * const ArgNames[ARG_MAXARG + 1] = { "word", /* ARG_WORD */ "s_word", /* ARG_SWORD */ "segptr", /* ARG_SEGPTR */ "segstr", /* ARG_SEGSTR */ "long", /* ARG_LONG */ "ptr", /* ARG_PTR */ "str", /* ARG_STR */ "wstr", /* ARG_WSTR */ "int64", /* ARG_INT64 */ "int128", /* ARG_INT128 */ "float", /* ARG_FLOAT */ "double" /* ARG_DOUBLE */ }; static int IsNumberString(const char *s) { while (*s) if (!isdigit(*s++)) return 0; return 1; } static inline int is_token_separator( char ch ) { return strchr( separator_chars, ch ) != NULL; } static inline int is_token_comment( char ch ) { return strchr( comment_chars, ch ) != NULL; } /* get the next line from the input file, or return 0 if at eof */ static int get_next_line(void) { ParseNext = ParseBuffer; current_line++; return (fgets(ParseBuffer, sizeof(ParseBuffer), input_file) != NULL); } static const char * GetToken( int allow_eol ) { char *p; char *token = TokenBuffer; for (;;) { /* remove initial white space */ p = ParseNext; while (isspace(*p)) p++; if (*p == '\\' && p[1] == '\n') /* line continuation */ { if (!get_next_line()) { if (!allow_eol) error( "Unexpected end of file\n" ); return NULL; } } else break; } if ((*p == '\0') || is_token_comment(*p)) { if (!allow_eol) error( "Declaration not terminated properly\n" ); return NULL; } /* * Find end of token. */ if (is_token_separator(*p)) { /* a separator is always a complete token */ *token++ = *p++; } else while (*p != '\0' && !is_token_separator(*p) && !isspace(*p)) { if (*p == '\\') p++; if (*p) *token++ = *p++; } *token = '\0'; ParseNext = p; return TokenBuffer; } static ORDDEF *add_entry_point( DLLSPEC *spec ) { ORDDEF *ret; if (spec->nb_entry_points == spec->alloc_entry_points) { spec->alloc_entry_points += 128; spec->entry_points = xrealloc( spec->entry_points, spec->alloc_entry_points * sizeof(*spec->entry_points) ); } ret = &spec->entry_points[spec->nb_entry_points++]; memset( ret, 0, sizeof(*ret) ); return ret; } /******************************************************************* * parse_spec_variable * * Parse a variable definition in a .spec file. */ static int parse_spec_variable( ORDDEF *odp, DLLSPEC *spec ) { char *endptr; unsigned int *value_array; int n_values; int value_array_size; const char *token; if (spec->type == SPEC_WIN32) { error( "'variable' not supported in Win32, use 'extern' instead\n" ); return 0; } if (!(token = GetToken(0))) return 0; if (*token != '(') { error( "Expected '(' got '%s'\n", token ); return 0; } n_values = 0; value_array_size = 25; value_array = xmalloc(sizeof(*value_array) * value_array_size); for (;;) { if (!(token = GetToken(0))) { free( value_array ); return 0; } if (*token == ')') break; value_array[n_values++] = strtoul(token, &endptr, 0); if (n_values == value_array_size) { value_array_size += 25; value_array = xrealloc(value_array, sizeof(*value_array) * value_array_size); } if (endptr == NULL || *endptr != '\0') { error( "Expected number value, got '%s'\n", token ); free( value_array ); return 0; } } odp->u.var.n_values = n_values; odp->u.var.values = xrealloc(value_array, sizeof(*value_array) * n_values); return 1; } /******************************************************************* * parse_spec_arguments * * Parse the arguments of an entry point. */ static int parse_spec_arguments( ORDDEF *odp, DLLSPEC *spec, int optional ) { const char *token; unsigned int i, arg; int is_win32 = (spec->type == SPEC_WIN32) || (odp->flags & FLAG_EXPORT32); if (!(token = GetToken( optional ))) return optional; if (*token != '(') { error( "Expected '(' got '%s'\n", token ); return 0; } odp->u.func.nb_args = 0; for (i = 0; i < MAX_ARGUMENTS; i++) { if (!(token = GetToken(0))) return 0; if (*token == ')') break; for (arg = 0; arg <= ARG_MAXARG; arg++) if (!strcmp( ArgNames[arg], token )) break; if (arg > ARG_MAXARG) { error( "Unknown argument type '%s'\n", token ); return 0; } if (is_win32) switch (arg) { case ARG_WORD: case ARG_SWORD: case ARG_SEGPTR: case ARG_SEGSTR: error( "Argument type '%s' only allowed for Win16\n", token ); return 0; } odp->u.func.args[i] = arg; } if (*token != ')') { error( "Too many arguments\n" ); return 0; } odp->u.func.nb_args = i; if (odp->type == TYPE_THISCALL && (!i || odp->u.func.args[0] != ARG_PTR)) { error( "First argument of a thiscall function must be a pointer\n" ); return 0; } return 1; } /******************************************************************* * parse_spec_export * * Parse an exported function definition in a .spec file. */ static int parse_spec_export( ORDDEF *odp, DLLSPEC *spec ) { const char *token; int is_win32 = (spec->type == SPEC_WIN32) || (odp->flags & FLAG_EXPORT32); if (!is_win32 && odp->type == TYPE_STDCALL) { error( "'stdcall' not supported for Win16\n" ); return 0; } if (!is_win32 && odp->type == TYPE_THISCALL) { error( "'thiscall' not supported for Win16\n" ); return 0; } if (is_win32 && odp->type == TYPE_PASCAL) { error( "'pascal' not supported for Win32\n" ); return 0; } if (!parse_spec_arguments( odp, spec, 0 )) return 0; if (odp->type == TYPE_VARARGS) odp->flags |= FLAG_NORELAY; /* no relay debug possible for varags entry point */ if (!(token = GetToken(1))) { if (!strcmp( odp->name, "@" )) { error( "Missing handler name for anonymous function\n" ); return 0; } odp->link_name = xstrdup( odp->name ); } else { odp->link_name = xstrdup( token ); if (strchr( odp->link_name, '.' )) { if (!is_win32) { error( "Forwarded functions not supported for Win16\n" ); return 0; } odp->flags |= FLAG_FORWARD; } } if (target_cpu == CPU_x86 && odp->type == TYPE_THISCALL && !(odp->flags & FLAG_FORWARD)) { char *link_name = strmake( "__thiscall_%s", odp->link_name ); free( odp->link_name ); odp->link_name = link_name; } return 1; } /******************************************************************* * parse_spec_equate * * Parse an 'equate' definition in a .spec file. */ static int parse_spec_equate( ORDDEF *odp, DLLSPEC *spec ) { char *endptr; int value; const char *token; if (spec->type == SPEC_WIN32) { error( "'equate' not supported for Win32\n" ); return 0; } if (!(token = GetToken(0))) return 0; value = strtol(token, &endptr, 0); if (endptr == NULL || *endptr != '\0') { error( "Expected number value, got '%s'\n", token ); return 0; } if (value < -0x8000 || value > 0xffff) { error( "Value %d for absolute symbol doesn't fit in 16 bits\n", value ); value = 0; } odp->u.abs.value = value; return 1; } /******************************************************************* * parse_spec_stub * * Parse a 'stub' definition in a .spec file */ static int parse_spec_stub( ORDDEF *odp, DLLSPEC *spec ) { odp->u.func.nb_args = -1; odp->link_name = xstrdup(""); /* don't bother generating stubs for Winelib */ if (odp->flags & FLAG_CPU_MASK) odp->flags &= FLAG_CPU(CPU_x86) | FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM) | FLAG_CPU(CPU_ARM64); else odp->flags |= FLAG_CPU(CPU_x86) | FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM) | FLAG_CPU(CPU_ARM64); return parse_spec_arguments( odp, spec, 1 ); } /******************************************************************* * parse_spec_extern * * Parse an 'extern' definition in a .spec file. */ static int parse_spec_extern( ORDDEF *odp, DLLSPEC *spec ) { const char *token; if (spec->type == SPEC_WIN16) { error( "'extern' not supported for Win16, use 'variable' instead\n" ); return 0; } if (!(token = GetToken(1))) { if (!strcmp( odp->name, "@" )) { error( "Missing handler name for anonymous extern\n" ); return 0; } odp->link_name = xstrdup( odp->name ); } else { odp->link_name = xstrdup( token ); if (strchr( odp->link_name, '.' )) odp->flags |= FLAG_FORWARD; } return 1; } /******************************************************************* * parse_spec_flags * * Parse the optional flags for an entry point in a .spec file. */ static const char *parse_spec_flags( DLLSPEC *spec, ORDDEF *odp ) { unsigned int i; const char *token; do { if (!(token = GetToken(0))) break; if (!strncmp( token, "arch=", 5)) { char *args = xstrdup( token + 5 ); char *cpu_name = strtok( args, "," ); while (cpu_name) { if (!strcmp( cpu_name, "win32" )) { if (spec->type == SPEC_WIN32) odp->flags |= FLAG_CPU_WIN32; else odp->flags |= FLAG_EXPORT32; } else if (!strcmp( cpu_name, "win64" )) odp->flags |= FLAG_CPU_WIN64; else { int cpu = get_cpu_from_name( cpu_name ); if (cpu == -1) { error( "Unknown architecture '%s'\n", cpu_name ); return NULL; } odp->flags |= FLAG_CPU( cpu ); } cpu_name = strtok( NULL, "," ); } free( args ); } else if (!strcmp( token, "i386" )) /* backwards compatibility */ { odp->flags |= FLAG_CPU(CPU_x86); } else { for (i = 0; FlagNames[i]; i++) if (!strcmp( FlagNames[i], token )) break; if (!FlagNames[i]) { error( "Unknown flag '%s'\n", token ); return NULL; } switch (1 << i) { case FLAG_RET16: case FLAG_REGISTER: case FLAG_STKPROLOG: if (spec->type == SPEC_WIN32) error( "Flag '%s' is not supported in Win32\n", FlagNames[i] ); break; case FLAG_RET64: if (spec->type == SPEC_WIN16) error( "Flag '%s' is not supported in Win16\n", FlagNames[i] ); break; } odp->flags |= 1 << i; } token = GetToken(0); } while (token && *token == '-'); return token; } /******************************************************************* * parse_spec_ordinal * * Parse an ordinal definition in a .spec file. */ static int parse_spec_ordinal( int ordinal, DLLSPEC *spec ) { const char *token; size_t len; ORDDEF *odp = add_entry_point( spec ); if (!(token = GetToken(0))) goto error; for (odp->type = 0; odp->type < TYPE_NBTYPES; odp->type++) if (TypeNames[odp->type] && !strcmp( token, TypeNames[odp->type] )) break; if (odp->type >= TYPE_NBTYPES) { error( "Expected type after ordinal, found '%s' instead\n", token ); goto error; } if (!(token = GetToken(0))) goto error; if (*token == '-' && !(token = parse_spec_flags( spec, odp ))) goto error; if (ordinal == -1 && spec->type != SPEC_WIN32 && !(odp->flags & FLAG_EXPORT32)) { error( "'@' ordinals not supported for Win16\n" ); goto error; } odp->name = xstrdup( token ); odp->lineno = current_line; odp->ordinal = ordinal; len = strspn( odp->name, valid_ordname_chars ); if (len < strlen( odp->name )) { error( "Character '%c' is not allowed in exported name '%s'\n", odp->name[len], odp->name ); goto error; } switch(odp->type) { case TYPE_VARIABLE: if (!parse_spec_variable( odp, spec )) goto error; break; case TYPE_PASCAL: case TYPE_STDCALL: case TYPE_VARARGS: case TYPE_CDECL: case TYPE_THISCALL: if (!parse_spec_export( odp, spec )) goto error; break; case TYPE_ABS: if (!parse_spec_equate( odp, spec )) goto error; break; case TYPE_STUB: if (!parse_spec_stub( odp, spec )) goto error; break; case TYPE_EXTERN: if (!parse_spec_extern( odp, spec )) goto error; break; default: assert( 0 ); } if ((odp->flags & FLAG_CPU_MASK) && !(odp->flags & FLAG_CPU(target_cpu))) { /* ignore this entry point */ spec->nb_entry_points--; return 1; } if (ordinal != -1) { if (!ordinal) { error( "Ordinal 0 is not valid\n" ); goto error; } if (ordinal >= MAX_ORDINALS) { error( "Ordinal number %d too large\n", ordinal ); goto error; } if (ordinal > spec->limit) spec->limit = ordinal; if (ordinal < spec->base) spec->base = ordinal; odp->ordinal = ordinal; } if (odp->type == TYPE_STDCALL && !(odp->flags & FLAG_PRIVATE)) { if (!strcmp( odp->name, "DllRegisterServer" ) || !strcmp( odp->name, "DllUnregisterServer" ) || !strcmp( odp->name, "DllMain" ) || !strcmp( odp->name, "DllGetClassObject" ) || !strcmp( odp->name, "DllGetVersion" ) || !strcmp( odp->name, "DllInstall" ) || !strcmp( odp->name, "DllCanUnloadNow" )) { warning( "Function %s should be marked private\n", odp->name ); if (strcmp( odp->name, odp->link_name )) warning( "Function %s should not use a different internal name (%s)\n", odp->name, odp->link_name ); } } if (!strcmp( odp->name, "@" ) || odp->flags & (FLAG_NONAME | FLAG_ORDINAL)) { if (ordinal == -1) { if (!strcmp( odp->name, "@" )) error( "Nameless function needs an explicit ordinal number\n" ); else error( "Function imported by ordinal needs an explicit ordinal number\n" ); goto error; } if (spec->type != SPEC_WIN32) { error( "Nameless functions not supported for Win16\n" ); goto error; } if (!strcmp( odp->name, "@" )) { free( odp->name ); odp->name = NULL; } else if (!(odp->flags & FLAG_ORDINAL)) /* -ordinal only affects the import library */ { odp->export_name = odp->name; odp->name = NULL; } } return 1; error: spec->nb_entry_points--; free( odp->name ); return 0; } static int name_compare( const void *ptr1, const void *ptr2 ) { const ORDDEF *odp1 = *(const ORDDEF * const *)ptr1; const ORDDEF *odp2 = *(const ORDDEF * const *)ptr2; const char *name1 = odp1->name ? odp1->name : odp1->export_name; const char *name2 = odp2->name ? odp2->name : odp2->export_name; return strcmp( name1, name2 ); } /******************************************************************* * assign_names * * Build the name array and catch duplicates. */ static void assign_names( DLLSPEC *spec ) { int i, j, nb_exp_names = 0; ORDDEF **all_names; spec->nb_names = 0; for (i = 0; i < spec->nb_entry_points; i++) if (spec->entry_points[i].name) spec->nb_names++; else if (spec->entry_points[i].export_name) nb_exp_names++; if (!spec->nb_names && !nb_exp_names) return; /* check for duplicates */ all_names = xmalloc( (spec->nb_names + nb_exp_names) * sizeof(all_names[0]) ); for (i = j = 0; i < spec->nb_entry_points; i++) if (spec->entry_points[i].name || spec->entry_points[i].export_name) all_names[j++] = &spec->entry_points[i]; qsort( all_names, j, sizeof(all_names[0]), name_compare ); for (i = 0; i < j - 1; i++) { const char *name1 = all_names[i]->name ? all_names[i]->name : all_names[i]->export_name; const char *name2 = all_names[i+1]->name ? all_names[i+1]->name : all_names[i+1]->export_name; if (!strcmp( name1, name2 ) && !((all_names[i]->flags ^ all_names[i+1]->flags) & FLAG_EXPORT32)) { current_line = max( all_names[i]->lineno, all_names[i+1]->lineno ); error( "'%s' redefined\n%s:%d: First defined here\n", name1, input_file_name, min( all_names[i]->lineno, all_names[i+1]->lineno ) ); } } free( all_names ); if (spec->nb_names) { spec->names = xmalloc( spec->nb_names * sizeof(spec->names[0]) ); for (i = j = 0; i < spec->nb_entry_points; i++) if (spec->entry_points[i].name) spec->names[j++] = &spec->entry_points[i]; /* sort the list of names */ qsort( spec->names, spec->nb_names, sizeof(spec->names[0]), name_compare ); } } /******************************************************************* * assign_ordinals * * Build the ordinal array. */ static void assign_ordinals( DLLSPEC *spec ) { int i, count, ordinal; /* start assigning from base, or from 1 if no ordinal defined yet */ spec->base = MAX_ORDINALS; spec->limit = 0; for (i = 0; i < spec->nb_entry_points; i++) { ordinal = spec->entry_points[i].ordinal; if (ordinal == -1) continue; if (ordinal > spec->limit) spec->limit = ordinal; if (ordinal < spec->base) spec->base = ordinal; } if (spec->base == MAX_ORDINALS) spec->base = 1; if (spec->limit < spec->base) spec->limit = spec->base; count = max( spec->limit + 1, spec->base + spec->nb_entry_points ); spec->ordinals = xmalloc( count * sizeof(spec->ordinals[0]) ); memset( spec->ordinals, 0, count * sizeof(spec->ordinals[0]) ); /* fill in all explicitly specified ordinals */ for (i = 0; i < spec->nb_entry_points; i++) { ordinal = spec->entry_points[i].ordinal; if (ordinal == -1) continue; if (spec->ordinals[ordinal]) { current_line = max( spec->entry_points[i].lineno, spec->ordinals[ordinal]->lineno ); error( "ordinal %d redefined\n%s:%d: First defined here\n", ordinal, input_file_name, min( spec->entry_points[i].lineno, spec->ordinals[ordinal]->lineno ) ); } else spec->ordinals[ordinal] = &spec->entry_points[i]; } /* now assign ordinals to the rest */ for (i = 0, ordinal = spec->base; i < spec->nb_entry_points; i++) { if (spec->entry_points[i].ordinal != -1) continue; while (spec->ordinals[ordinal]) ordinal++; if (ordinal >= MAX_ORDINALS) { current_line = spec->entry_points[i].lineno; fatal_error( "Too many functions defined (max %d)\n", MAX_ORDINALS ); } spec->entry_points[i].ordinal = ordinal; spec->ordinals[ordinal] = &spec->entry_points[i]; } if (ordinal > spec->limit) spec->limit = ordinal; } /******************************************************************* * add_16bit_exports * * Add the necessary exports to the 32-bit counterpart of a 16-bit module. */ void add_16bit_exports( DLLSPEC *spec32, DLLSPEC *spec16 ) { int i; ORDDEF *odp; spec32->file_name = xstrdup( spec16->file_name ); if (spec16->characteristics & IMAGE_FILE_DLL) { spec32->characteristics = IMAGE_FILE_DLL; spec32->init_func = xstrdup( "__wine_spec_dll_entry" ); } /* add an export for the NE module */ odp = add_entry_point( spec32 ); odp->type = TYPE_EXTERN; odp->flags = FLAG_PRIVATE; odp->name = xstrdup( "__wine_spec_dos_header" ); odp->lineno = 0; odp->ordinal = 1; odp->link_name = xstrdup( ".L__wine_spec_dos_header" ); if (spec16->main_module) { odp = add_entry_point( spec32 ); odp->type = TYPE_EXTERN; odp->flags = FLAG_PRIVATE; odp->name = xstrdup( "__wine_spec_main_module" ); odp->lineno = 0; odp->ordinal = 2; odp->link_name = xstrdup( ".L__wine_spec_main_module" ); } /* add the explicit win32 exports */ for (i = 1; i <= spec16->limit; i++) { ORDDEF *odp16 = spec16->ordinals[i]; if (!odp16 || !odp16->name) continue; if (!(odp16->flags & FLAG_EXPORT32)) continue; odp = add_entry_point( spec32 ); odp->flags = odp16->flags & ~FLAG_EXPORT32; odp->type = odp16->type; odp->name = xstrdup( odp16->name ); odp->lineno = odp16->lineno; odp->ordinal = -1; odp->link_name = xstrdup( odp16->link_name ); odp->u.func.nb_args = odp16->u.func.nb_args; if (odp->u.func.nb_args > 0) memcpy( odp->u.func.args, odp16->u.func.args, odp->u.func.nb_args * sizeof(odp->u.func.args[0]) ); } assign_names( spec32 ); assign_ordinals( spec32 ); } /******************************************************************* * parse_spec_file * * Parse a .spec file. */ int parse_spec_file( FILE *file, DLLSPEC *spec ) { const char *token; input_file = file; current_line = 0; comment_chars = "#;"; separator_chars = "()-"; while (get_next_line()) { if (!(token = GetToken(1))) continue; if (strcmp(token, "@") == 0) { if (!parse_spec_ordinal( -1, spec )) continue; } else if (IsNumberString(token)) { if (!parse_spec_ordinal( atoi(token), spec )) continue; } else { error( "Expected ordinal declaration, got '%s'\n", token ); continue; } if ((token = GetToken(1))) error( "Syntax error near '%s'\n", token ); } current_line = 0; /* no longer parsing the input file */ assign_names( spec ); assign_ordinals( spec ); return !nb_errors; } /******************************************************************* * parse_def_library * * Parse a LIBRARY declaration in a .def file. */ static int parse_def_library( DLLSPEC *spec ) { const char *token = GetToken(1); if (!token) return 1; if (strcmp( token, "BASE" )) { free( spec->file_name ); spec->file_name = xstrdup( token ); if (!(token = GetToken(1))) return 1; } if (strcmp( token, "BASE" )) { error( "Expected library name or BASE= declaration, got '%s'\n", token ); return 0; } if (!(token = GetToken(0))) return 0; if (strcmp( token, "=" )) { error( "Expected '=' after BASE, got '%s'\n", token ); return 0; } if (!(token = GetToken(0))) return 0; /* FIXME: do something with base address */ return 1; } /******************************************************************* * parse_def_stack_heap_size * * Parse a STACKSIZE or HEAPSIZE declaration in a .def file. */ static int parse_def_stack_heap_size( int is_stack, DLLSPEC *spec ) { const char *token = GetToken(0); char *end; unsigned long size; if (!token) return 0; size = strtoul( token, &end, 0 ); if (*end) { error( "Invalid number '%s'\n", token ); return 0; } if (is_stack) spec->stack_size = size / 1024; else spec->heap_size = size / 1024; if (!(token = GetToken(1))) return 1; if (strcmp( token, "," )) { error( "Expected ',' after size, got '%s'\n", token ); return 0; } if (!(token = GetToken(0))) return 0; /* FIXME: do something with reserve size */ return 1; } /******************************************************************* * parse_def_export * * Parse an export declaration in a .def file. */ static int parse_def_export( char *name, DLLSPEC *spec ) { int i, args; const char *token = GetToken(1); ORDDEF *odp = add_entry_point( spec ); odp->lineno = current_line; odp->ordinal = -1; odp->name = name; args = remove_stdcall_decoration( odp->name ); if (args == -1) { odp->type = TYPE_CDECL; args = 0; } else { odp->type = TYPE_STDCALL; args /= get_ptr_size(); if (args >= MAX_ARGUMENTS) { error( "Too many arguments in stdcall function '%s'\n", odp->name ); return 0; } for (i = 0; i < args; i++) odp->u.func.args[i] = ARG_LONG; } odp->u.func.nb_args = args; /* check for optional internal name */ if (token && !strcmp( token, "=" )) { if (!(token = GetToken(0))) goto error; odp->link_name = xstrdup( token ); remove_stdcall_decoration( odp->link_name ); token = GetToken(1); } else { odp->link_name = xstrdup( name ); } /* check for optional ordinal */ if (token && token[0] == '@') { int ordinal; if (!IsNumberString( token+1 )) { error( "Expected number after '@', got '%s'\n", token+1 ); goto error; } ordinal = atoi( token+1 ); if (!ordinal) { error( "Ordinal 0 is not valid\n" ); goto error; } if (ordinal >= MAX_ORDINALS) { error( "Ordinal number %d too large\n", ordinal ); goto error; } odp->ordinal = ordinal; token = GetToken(1); } /* check for other optional keywords */ while (token) { if (!strcmp( token, "NONAME" )) { if (odp->ordinal == -1) { error( "NONAME requires an ordinal\n" ); goto error; } odp->export_name = odp->name; odp->name = NULL; odp->flags |= FLAG_NONAME; } else if (!strcmp( token, "PRIVATE" )) { odp->flags |= FLAG_PRIVATE; } else if (!strcmp( token, "DATA" )) { odp->type = TYPE_EXTERN; } else { error( "Garbage text '%s' found at end of export declaration\n", token ); goto error; } token = GetToken(1); } return 1; error: spec->nb_entry_points--; free( odp->name ); return 0; } /******************************************************************* * parse_def_file * * Parse a .def file. */ int parse_def_file( FILE *file, DLLSPEC *spec ) { const char *token; int in_exports = 0; input_file = file; current_line = 0; comment_chars = ";"; separator_chars = ",="; while (get_next_line()) { if (!(token = GetToken(1))) continue; if (!strcmp( token, "LIBRARY" ) || !strcmp( token, "NAME" )) { if (!parse_def_library( spec )) continue; goto end_of_line; } else if (!strcmp( token, "STACKSIZE" )) { if (!parse_def_stack_heap_size( 1, spec )) continue; goto end_of_line; } else if (!strcmp( token, "HEAPSIZE" )) { if (!parse_def_stack_heap_size( 0, spec )) continue; goto end_of_line; } else if (!strcmp( token, "EXPORTS" )) { in_exports = 1; if (!(token = GetToken(1))) continue; } else if (!strcmp( token, "IMPORTS" )) { in_exports = 0; if (!(token = GetToken(1))) continue; } else if (!strcmp( token, "SECTIONS" )) { in_exports = 0; if (!(token = GetToken(1))) continue; } if (!in_exports) continue; /* ignore this line */ if (!parse_def_export( xstrdup(token), spec )) continue; end_of_line: if ((token = GetToken(1))) error( "Syntax error near '%s'\n", token ); } current_line = 0; /* no longer parsing the input file */ assign_names( spec ); assign_ordinals( spec ); return !nb_errors; } ================================================ FILE: convspec/relay.c ================================================ /* * Relay calls helper routines * * Copyright 1993 Robert J. Amstadt * Copyright 1995 Martin von Loewis * Copyright 1995, 1996, 1997 Alexandre Julliard * Copyright 1997 Eric Youngdale * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include "build.h" /* offset of the stack pointer relative to %fs:(0) */ #define STACKOFFSET (0xe10 + 0x20 * 0x4) /* FIELD_OFFSET(TEB,TlsSlots) + WOW32RESERVED_TLS_INDEX * 4*/ /* 0xc0 */ /* FIELD_OFFSET(TEB,WOW32Reserved) */ /* fix this if the x86_thread_data structure is changed */ #define GS_OFFSET 0x1d8 /* FIELD_OFFSET(TEB,SystemReserved2) + FIELD_OFFSET(struct x86_thread_data,gs) */ static void function_header( const char *name ) { output( "\n\t.align %d\n", get_alignment(4) ); output( "\t%s\n", func_declaration(strmake("_%s", name)) ); output( "%s\n", asm_globl(name) ); } /******************************************************************* * BuildCallFrom16Core * * This routine builds the core routines used in 16->32 thunks: * CallFrom16Word, CallFrom16Long, CallFrom16Register, and CallFrom16Thunk. * * These routines are intended to be called via a far call (with 32-bit * operand size) from 16-bit code. The 16-bit code stub must push %bp, * the 32-bit entry point to be called, and the argument conversion * routine to be used (see stack layout below). * * The core routine completes the STACK16FRAME on the 16-bit stack and * switches to the 32-bit stack. Then, the argument conversion routine * is called; it gets passed the 32-bit entry point and a pointer to the * 16-bit arguments (on the 16-bit stack) as parameters. (You can either * use conversion routines automatically generated by BuildCallFrom16, * or write your own for special purposes.) * * The conversion routine must call the 32-bit entry point, passing it * the converted arguments, and return its return value to the core. * After the conversion routine has returned, the core switches back * to the 16-bit stack, converts the return value to the DX:AX format * (CallFrom16Long), and returns to the 16-bit call stub. All parameters, * including %bp, are popped off the stack. * * The 16-bit call stub now returns to the caller, popping the 16-bit * arguments if necessary (pascal calling convention). * * In the case of a 'register' function, CallFrom16Register fills a * CONTEXT86 structure with the values all registers had at the point * the first instruction of the 16-bit call stub was about to be * executed. A pointer to this CONTEXT86 is passed as third parameter * to the argument conversion routine, which typically passes it on * to the called 32-bit entry point. * * CallFrom16Thunk is a special variant used by the implementation of * the Win95 16->32 thunk functions C16ThkSL and C16ThkSL01 and is * implemented as follows: * On entry, the EBX register is set up to contain a flat pointer to the * 16-bit stack such that EBX+22 points to the first argument. * Then, the entry point is called, while EBP is set up to point * to the return address (on the 32-bit stack). * The called function returns with CX set to the number of bytes * to be popped of the caller's stack. * * Stack layout upon entry to the core routine (STACK16FRAME): * ... ... * (sp+24) word first 16-bit arg * (sp+22) word cs * (sp+20) word ip * (sp+18) word bp * (sp+14) long 32-bit entry point (reused for Win16 mutex recursion count) * (sp+12) word ip of actual entry point (necessary for relay debugging) * (sp+8) long relay (argument conversion) function entry point * (sp+4) long cs of 16-bit entry point * (sp) long ip of 16-bit entry point * * Added on the stack: * (sp-2) word saved gs * (sp-4) word saved fs * (sp-6) word saved es * (sp-8) word saved ds * (sp-12) long saved ebp * (sp-16) long saved ecx * (sp-20) long saved edx * (sp-24) long saved previous stack */ static void BuildCallFrom16Core( int reg_func, int thunk ) { /* Function header */ if (thunk) function_header( "__wine_call_from_16_thunk" ); else if (reg_func) function_header( "__wine_call_from_16_regs" ); else function_header( "__wine_call_from_16" ); /* Create STACK16FRAME (except STACK32FRAME link) */ output( "\tpushw %%gs\n" ); output( "\tpushw %%fs\n" ); output( "\tpushw %%es\n" ); output( "\tpushw %%ds\n" ); output( "\tpushl %%ebp\n" ); output( "\tpushl %%ecx\n" ); output( "\tpushl %%edx\n" ); /* Save original EFlags register */ if (reg_func) output( "\tpushfl\n" ); if ( UsePIC ) { output( "\tcall 1f\n" ); output( "1:\tpopl %%ecx\n" ); output( "\t.byte 0x2e\n\tmovl %s-1b(%%ecx),%%edx\n", asm_name("CallTo16_DataSelector") ); } else output( "\t.byte 0x2e\n\tmovl %s,%%edx\n", asm_name("CallTo16_DataSelector") ); /* Load 32-bit segment registers */ output( "\tmovw %%dx, %%ds\n" ); output( "\tmovw %%dx, %%es\n" ); if ( UsePIC ) output( "\tmovw %s-1b(%%ecx), %%fs\n", asm_name("CallTo16_TebSelector") ); else output( "\tmovw %s, %%fs\n", asm_name("CallTo16_TebSelector") ); output( "\t.byte 0x64\n\tmov (%d),%%gs\n", GS_OFFSET ); /* Translate STACK16FRAME base to flat offset in %edx */ output( "\tmovw %%ss, %%dx\n" ); output( "\tandl $0xfff8, %%edx\n" ); output( "\tshrl $1, %%edx\n" ); if (UsePIC) { output( "\taddl wine_ldt_copy_ptr-1b(%%ecx),%%edx\n" ); output( "\tmovl (%%edx), %%edx\n" ); } else { output( "\tmovl %s, %%ecx\n", asm_name("_imp__wine_ldt_copy") ); output( "\tmovl 0(%%ecx,%%edx), %%edx\n" ); } output( "\tmovzwl %%sp, %%ebp\n" ); output( "\tleal %d(%%ebp,%%edx), %%edx\n", reg_func ? 0 : -4 ); /* Get saved flags into %ecx */ if (reg_func) output( "\tpopl %%ecx\n" ); /* Get the 32-bit stack pointer from the TEB and complete STACK16FRAME */ output( "\t.byte 0x64\n\tmovl (%d), %%ebp\n", STACKOFFSET ); output( "\tpushl %%ebp\n" ); /* Switch stacks */ output( "\t.byte 0x64\n\tmovw %%ss, (%d)\n", STACKOFFSET + 2 ); output( "\t.byte 0x64\n\tmovw %%sp, (%d)\n", STACKOFFSET ); output( "\tpushl %%ds\n" ); output( "\tpopl %%ss\n" ); output( "\tmovl %%ebp, %%esp\n" ); output( "\taddl $0x20,%%ebp\n"); /* FIELD_OFFSET(STACK32FRAME,ebp) */ /* At this point: STACK16FRAME is completely set up DS, ES, SS: flat data segment FS: current TEB ESP: points to last STACK32FRAME EBP: points to ebp member of last STACK32FRAME EDX: points to current STACK16FRAME ECX: contains saved flags all other registers: unchanged */ /* Special case: C16ThkSL stub */ if ( thunk ) { /* Set up registers as expected and call thunk */ output( "\tleal 0x1a(%%edx),%%ebx\n" ); /* sizeof(STACK16FRAME)-22 */ output( "\tleal -4(%%esp), %%ebp\n" ); output( "\tcall *0x26(%%edx)\n"); /* FIELD_OFFSET(STACK16FRAME,entry_point) */ /* Switch stack back */ output( "\t.byte 0x64\n\tmovw (%d), %%ss\n", STACKOFFSET+2 ); output( "\t.byte 0x64\n\tmovzwl (%d), %%esp\n", STACKOFFSET ); output( "\t.byte 0x64\n\tpopl (%d)\n", STACKOFFSET ); /* Restore registers and return directly to caller */ output( "\taddl $8, %%esp\n" ); output( "\tpopl %%ebp\n" ); output( "\tpopw %%ds\n" ); output( "\tpopw %%es\n" ); output( "\tpopw %%fs\n" ); output( "\tpopw %%gs\n" ); output( "\taddl $20, %%esp\n" ); output( "\txorb %%ch, %%ch\n" ); output( "\tpopl %%ebx\n" ); output( "\taddw %%cx, %%sp\n" ); output( "\tpush %%ebx\n" ); output( "\t.byte 0x66\n" ); output( "\tlret\n" ); output_function_size( "__wine_call_from_16_thunk" ); return; } /* Build register CONTEXT */ if ( reg_func ) { output( "\tsubl $0x2cc,%%esp\n" ); /* sizeof(CONTEXT86) */ output( "\tmovl %%ecx,0xc0(%%esp)\n" ); /* EFlags */ output( "\tmovl %%eax,0xb0(%%esp)\n" ); /* Eax */ output( "\tmovl %%ebx,0xa4(%%esp)\n" ); /* Ebx */ output( "\tmovl %%esi,0xa0(%%esp)\n" ); /* Esi */ output( "\tmovl %%edi,0x9c(%%esp)\n" ); /* Edi */ output( "\tmovl 0x0c(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,ebp) */ output( "\tmovl %%eax,0xb4(%%esp)\n" ); /* Ebp */ output( "\tmovl 0x08(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,ecx) */ output( "\tmovl %%eax,0xac(%%esp)\n" ); /* Ecx */ output( "\tmovl 0x04(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,edx) */ output( "\tmovl %%eax,0xa8(%%esp)\n" ); /* Edx */ output( "\tmovzwl 0x10(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,ds) */ output( "\tmovl %%eax,0x98(%%esp)\n" ); /* SegDs */ output( "\tmovzwl 0x12(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,es) */ output( "\tmovl %%eax,0x94(%%esp)\n" ); /* SegEs */ output( "\tmovzwl 0x14(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,fs) */ output( "\tmovl %%eax,0x90(%%esp)\n" ); /* SegFs */ output( "\tmovzwl 0x16(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,gs) */ output( "\tmovl %%eax,0x8c(%%esp)\n" ); /* SegGs */ output( "\tmovzwl 0x2e(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,cs) */ output( "\tmovl %%eax,0xbc(%%esp)\n" ); /* SegCs */ output( "\tmovzwl 0x2c(%%edx),%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,ip) */ output( "\tmovl %%eax,0xb8(%%esp)\n" ); /* Eip */ output( "\t.byte 0x64\n\tmovzwl (%d), %%eax\n", STACKOFFSET+2 ); output( "\tmovl %%eax,0xc8(%%esp)\n" ); /* SegSs */ output( "\t.byte 0x64\n\tmovzwl (%d), %%eax\n", STACKOFFSET ); output( "\taddl $0x2c,%%eax\n"); /* FIELD_OFFSET(STACK16FRAME,ip) */ output( "\tmovl %%eax,0xc4(%%esp)\n" ); /* Esp */ #if 0 output( "\tfsave 0x1c(%%esp)\n" ); /* FloatSave */ #endif /* Push address of CONTEXT86 structure -- popped by the relay routine */ output( "\tmovl %%esp,%%eax\n" ); output( "\tandl $~15,%%esp\n" ); output( "\tsubl $4,%%esp\n" ); output( "\tpushl %%eax\n" ); } else { output( "\tsubl $8,%%esp\n" ); output( "\tandl $~15,%%esp\n" ); output( "\taddl $8,%%esp\n" ); } /* Call relay routine (which will call the API entry point) */ output( "\tleal 0x30(%%edx),%%eax\n" ); /* sizeof(STACK16FRAME) */ output( "\tpushl %%eax\n" ); output( "\tpushl 0x26(%%edx)\n"); /* FIELD_OFFSET(STACK16FRAME,entry_point) */ output( "\tcall *0x20(%%edx)\n"); /* FIELD_OFFSET(STACK16FRAME,relay) */ if ( reg_func ) { output( "\tleal -748(%%ebp),%%ebx\n" ); /* sizeof(CONTEXT) + FIELD_OFFSET(STACK32FRAME,ebp) */ /* Switch stack back */ output( "\t.byte 0x64\n\tmovw (%d), %%ss\n", STACKOFFSET+2 ); output( "\t.byte 0x64\n\tmovzwl (%d), %%esp\n", STACKOFFSET ); output( "\t.byte 0x64\n\tpopl (%d)\n", STACKOFFSET ); /* Get return address to CallFrom16 stub */ output( "\taddw $0x14,%%sp\n" ); /* FIELD_OFFSET(STACK16FRAME,callfrom_ip)-4 */ output( "\tpopl %%eax\n" ); output( "\tpopl %%edx\n" ); /* Restore all registers from CONTEXT */ output( "\tmovw 0xc8(%%ebx),%%ss\n"); /* SegSs */ output( "\tmovl 0xc4(%%ebx),%%esp\n"); /* Esp */ output( "\taddl $4, %%esp\n" ); /* room for final return address */ output( "\tpushw 0xbc(%%ebx)\n"); /* SegCs */ output( "\tpushw 0xb8(%%ebx)\n"); /* Eip */ output( "\tpushl %%edx\n" ); output( "\tpushl %%eax\n" ); output( "\tpushl 0xc0(%%ebx)\n"); /* EFlags */ output( "\tpushl 0x98(%%ebx)\n"); /* SegDs */ output( "\tpushl 0x94(%%ebx)\n"); /* SegEs */ output( "\tpopl %%es\n" ); output( "\tpushl 0x90(%%ebx)\n"); /* SegFs */ output( "\tpopl %%fs\n" ); output( "\tpushl 0x8c(%%ebx)\n"); /* SegGs */ output( "\tpopl %%gs\n" ); output( "\tmovl 0xb4(%%ebx),%%ebp\n"); /* Ebp */ output( "\tmovl 0xa0(%%ebx),%%esi\n"); /* Esi */ output( "\tmovl 0x9c(%%ebx),%%edi\n"); /* Edi */ output( "\tmovl 0xb0(%%ebx),%%eax\n"); /* Eax */ output( "\tmovl 0xa8(%%ebx),%%edx\n"); /* Edx */ output( "\tmovl 0xac(%%ebx),%%ecx\n"); /* Ecx */ output( "\tmovl 0xa4(%%ebx),%%ebx\n"); /* Ebx */ output( "\tpopl %%ds\n" ); output( "\tpopfl\n" ); output( "\tlret\n" ); output_function_size( "__wine_call_from_16_regs" ); } else { /* Switch stack back */ output( "\t.byte 0x64\n\tmovw (%d), %%ss\n", STACKOFFSET+2 ); output( "\t.byte 0x64\n\tmovzwl (%d), %%esp\n", STACKOFFSET ); output( "\t.byte 0x64\n\tpopl (%d)\n", STACKOFFSET ); /* Restore registers */ output( "\tpopl %%edx\n" ); output( "\tpopl %%ecx\n" ); output( "\tpopl %%ebp\n" ); output( "\tpopw %%ds\n" ); output( "\tpopw %%es\n" ); output( "\tpopw %%fs\n" ); output( "\tpopw %%gs\n" ); /* Return to return stub which will return to caller */ output( "\tlret $12\n" ); output_function_size( "__wine_call_from_16" ); } } /******************************************************************* * BuildCallTo16Core * * This routine builds the core routines used in 32->16 thunks: * * extern DWORD WINAPI wine_call_to_16( FARPROC16 target, DWORD cbArgs, PEXCEPTION_HANDLER handler ); * extern void WINAPI wine_call_to_16_regs( CONTEXT86 *context, DWORD cbArgs, PEXCEPTION_HANDLER handler ); * * These routines can be called directly from 32-bit code. * * All routines expect that the 16-bit stack contents (arguments) and the * return address (segptr to CallTo16_Ret) were already set up by the * caller; nb_args must contain the number of bytes to be conserved. The * 16-bit SS:SP will be set accordingly. * * All other registers are either taken from the CONTEXT86 structure * or else set to default values. The target routine address is either * given directly or taken from the CONTEXT86. */ static void BuildCallTo16Core( int reg_func ) { const char *name = reg_func ? "__wine_call_to_16_regs" : "__wine_call_to_16"; /* Function header */ function_header( name ); /* Function entry sequence */ output_cfi( ".cfi_startproc" ); output( "\tpushl %%ebp\n" ); output_cfi( ".cfi_adjust_cfa_offset 4" ); output_cfi( ".cfi_rel_offset %%ebp,0" ); output( "\tmovl %%esp, %%ebp\n" ); output_cfi( ".cfi_def_cfa_register %%ebp" ); /* Save the 32-bit registers */ output( "\tpushl %%ebx\n" ); output_cfi( ".cfi_rel_offset %%ebx,-4" ); output( "\tpushl %%esi\n" ); output_cfi( ".cfi_rel_offset %%esi,-8" ); output( "\tpushl %%edi\n" ); output_cfi( ".cfi_rel_offset %%edi,-12" ); output( "\t.byte 0x64\n\tmov %%gs,(%d)\n", GS_OFFSET ); /* Setup exception frame */ output( "\t.byte 0x64\n\tpushl (%d)\n", STACKOFFSET ); output( "\tpushl 16(%%ebp)\n" ); /* handler */ output( "\t.byte 0x64\n\tpushl (0)\n" ); output( "\t.byte 0x64\n\tmovl %%esp,(0)\n" ); /* Call the actual CallTo16 routine (simulate a lcall) */ output( "\tpushl %%cs\n" ); output( "\tcall .L%s\n", name ); /* Remove exception frame */ output( "\t.byte 0x64\n\tpopl (0)\n" ); output( "\taddl $4, %%esp\n" ); output( "\t.byte 0x64\n\tpopl (%d)\n", STACKOFFSET ); if ( !reg_func ) { /* Convert return value */ output( "\tandl $0xffff,%%eax\n" ); output( "\tshll $16,%%edx\n" ); output( "\torl %%edx,%%eax\n" ); } else { /* * Modify CONTEXT86 structure to contain new values * * NOTE: We restore only EAX, EBX, EDX, EDX, EBP, and ESP. * The segment registers as well as ESI and EDI should * not be modified by a well-behaved 16-bit routine in * any case. [If necessary, we could restore them as well, * at the cost of a somewhat less efficient return path.] */ output( "\tmovl 0x14(%%esp),%%edi\n" ); /* FIELD_OFFSET(STACK32FRAME,target) - FIELD_OFFSET(STACK32FRAME,edi) */ /* everything above edi has been popped already */ output( "\tmovl %%eax,0xb0(%%edi)\n"); /* Eax */ output( "\tmovl %%ebx,0xa4(%%edi)\n"); /* Ebx */ output( "\tmovl %%ecx,0xac(%%edi)\n"); /* Ecx */ output( "\tmovl %%edx,0xa8(%%edi)\n"); /* Edx */ output( "\tmovl %%ebp,0xb4(%%edi)\n"); /* Ebp */ output( "\tmovl %%esi,0xc4(%%edi)\n"); /* Esp */ /* The return glue code saved %esp into %esi */ } /* Restore the 32-bit registers */ output( "\tpopl %%edi\n" ); output_cfi( ".cfi_same_value %%edi" ); output( "\tpopl %%esi\n" ); output_cfi( ".cfi_same_value %%esi" ); output( "\tpopl %%ebx\n" ); output_cfi( ".cfi_same_value %%ebx" ); /* Function exit sequence */ output( "\tpopl %%ebp\n" ); output_cfi( ".cfi_def_cfa %%esp,4" ); output_cfi( ".cfi_same_value %%ebp" ); output( "\tret $12\n" ); output_cfi( ".cfi_endproc" ); /* Start of the actual CallTo16 routine */ output( ".L%s:\n", name ); /* Switch to the 16-bit stack */ output( "\tmovl %%esp,%%edx\n" ); output( "\t.byte 0x64\n\tmovw (%d),%%ss\n", STACKOFFSET + 2); output( "\t.byte 0x64\n\tmovw (%d),%%sp\n", STACKOFFSET ); output( "\t.byte 0x64\n\tmovl %%edx,(%d)\n", STACKOFFSET ); /* Make %bp point to the previous stackframe (built by CallFrom16) */ output( "\tmovzwl %%sp,%%ebp\n" ); output( "\tleal 0x2a(%%ebp),%%ebp\n"); /* FIELD_OFFSET(STACK16FRAME,bp) */ /* Add the specified offset to the new sp */ output( "\tsubw 0x2c(%%edx), %%sp\n"); /* FIELD_OFFSET(STACK32FRAME,nb_args) */ if (reg_func) { /* Push the called routine address */ output( "\tmovl 0x28(%%edx),%%edx\n"); /* FIELD_OFFSET(STACK32FRAME,target) */ output( "\tpushw 0xbc(%%edx)\n"); /* SegCs */ output( "\tpushw 0xb8(%%edx)\n"); /* Eip */ /* Get the registers */ output( "\tpushw 0x98(%%edx)\n"); /* SegDs */ output( "\tpushl 0x94(%%edx)\n"); /* SegEs */ output( "\tpopl %%es\n" ); output( "\tpushl 0x90(%%edx)\n"); /* SegFs */ output( "\tpopl %%fs\n" ); output( "\tpushl 0x8c(%%edx)\n"); /* SegGs */ output( "\tpopl %%gs\n" ); output( "\tmovl 0xb4(%%edx),%%ebp\n"); /* Ebp */ output( "\tmovl 0xa0(%%edx),%%esi\n"); /* Esi */ output( "\tmovl 0x9c(%%edx),%%edi\n"); /* Edi */ output( "\tmovl 0xb0(%%edx),%%eax\n"); /* Eax */ output( "\tmovl 0xa4(%%edx),%%ebx\n"); /* Ebx */ output( "\tmovl 0xac(%%edx),%%ecx\n"); /* Ecx */ output( "\tmovl 0xa8(%%edx),%%edx\n"); /* Edx */ /* Get the 16-bit ds */ output( "\tpopw %%ds\n" ); } else /* not a register function */ { /* Push the called routine address */ output( "\tpushl 0x28(%%edx)\n"); /* FIELD_OFFSET(STACK32FRAME,target) */ /* Set %fs and %gs to the value saved by the last CallFrom16 */ output( "\tpushw -22(%%ebp)\n" ); /* FIELD_OFFSET(STACK16FRAME,fs)-FIELD_OFFSET(STACK16FRAME,bp) */ output( "\tpopw %%fs\n" ); output( "\tpushw -20(%%ebp)\n" ); /* FIELD_OFFSET(STACK16FRAME,gs)-FIELD_OFFSET(STACK16FRAME,bp) */ output( "\tpopw %%gs\n" ); /* Set %ds and %es (and %ax just in case) equal to %ss */ output( "\tmovw %%ss,%%ax\n" ); output( "\tmovw %%ax,%%ds\n" ); output( "\tmovw %%ax,%%es\n" ); } /* Jump to the called routine */ output( "\t.byte 0x66\n" ); output( "\tlret\n" ); /* Function footer */ output_function_size( name ); } /******************************************************************* * BuildRet16Func * * Build the return code for 16-bit callbacks */ static void BuildRet16Func(void) { function_header( "__wine_call_to_16_ret" ); /* Save %esp into %esi */ output( "\tmovl %%esp,%%esi\n" ); /* Restore 32-bit segment registers */ output( "\t.byte 0x2e\n\tmovl %s", asm_name("CallTo16_DataSelector") ); output( "-%s,%%edi\n", asm_name("__wine_call16_start") ); output( "\tmovw %%di,%%ds\n" ); output( "\tmovw %%di,%%es\n" ); output( "\t.byte 0x2e\n\tmov %s", asm_name("CallTo16_TebSelector") ); output( "-%s,%%fs\n", asm_name("__wine_call16_start") ); output( "\t.byte 0x64\n\tmov (%d),%%gs\n", GS_OFFSET ); /* Restore the 32-bit stack */ output( "\tmovw %%di,%%ss\n" ); output( "\t.byte 0x64\n\tmovl (%d),%%esp\n", STACKOFFSET ); /* Return to caller */ output( "\tlret\n" ); output_function_size( "__wine_call_to_16_ret" ); } /******************************************************************* * BuildCallTo32CBClient * * Call a CBClient relay stub from 32-bit code (KERNEL.620). * * Since the relay stub is itself 32-bit, this should not be a problem; * unfortunately, the relay stubs are expected to switch back to a * 16-bit stack (and 16-bit code) after completion :-( * * This would conflict with our 16- vs. 32-bit stack handling, so * we simply switch *back* to our 32-bit stack before returning to * the caller ... * * The CBClient relay stub expects to be called with the following * 16-bit stack layout, and with ebp and ebx pointing into the 16-bit * stack at the designated places: * * ... * (ebp+14) original arguments to the callback routine * (ebp+10) far return address to original caller * (ebp+6) Thunklet target address * (ebp+2) Thunklet relay ID code * (ebp) BP (saved by CBClientGlueSL) * (ebp-2) SI (saved by CBClientGlueSL) * (ebp-4) DI (saved by CBClientGlueSL) * (ebp-6) DS (saved by CBClientGlueSL) * * ... buffer space used by the 16-bit side glue for temp copies * * (ebx+4) far return address to 16-bit side glue code * (ebx) saved 16-bit ss:sp (pointing to ebx+4) * * The 32-bit side glue code accesses both the original arguments (via ebp) * and the temporary copies prepared by the 16-bit side glue (via ebx). * After completion, the stub will load ss:sp from the buffer at ebx * and perform a far return to 16-bit code. * * To trick the relay stub into returning to us, we replace the 16-bit * return address to the glue code by a cs:ip pair pointing to our * return entry point (the original return address is saved first). * Our return stub thus called will then reload the 32-bit ss:esp and * return to 32-bit code (by using and ss:esp value that we have also * pushed onto the 16-bit stack before and a cs:eip values found at * that position on the 32-bit stack). The ss:esp to be restored is * found relative to the 16-bit stack pointer at: * * (ebx-4) ss (flat) * (ebx-8) sp (32-bit stack pointer) * * The second variant of this routine, CALL32_CBClientEx, which is used * to implement KERNEL.621, has to cope with yet another problem: Here, * the 32-bit side directly returns to the caller of the CBClient thunklet, * restoring registers saved by CBClientGlueSL and cleaning up the stack. * As we have to return to our 32-bit code first, we have to adapt the * layout of our temporary area so as to include values for the registers * that are to be restored, and later (in the implementation of KERNEL.621) * we *really* restore them. The return stub restores DS, DI, SI, and BP * from the stack, skips the next 8 bytes (CBClient relay code / target), * and then performs a lret NN, where NN is the number of arguments to be * removed. Thus, we prepare our temporary area as follows: * * (ebx+22) 16-bit cs (this segment) * (ebx+20) 16-bit ip ('16-bit' return entry point) * (ebx+16) 32-bit ss (flat) * (ebx+12) 32-bit sp (32-bit stack pointer) * (ebx+10) 16-bit bp (points to ebx+24) * (ebx+8) 16-bit si (ignored) * (ebx+6) 16-bit di (ignored) * (ebx+4) 16-bit ds (we actually use the flat DS here) * (ebx+2) 16-bit ss (16-bit stack segment) * (ebx+0) 16-bit sp (points to ebx+4) * * Note that we ensure that DS is not changed and remains the flat segment, * and the 32-bit stack pointer our own return stub needs fits just * perfectly into the 8 bytes that are skipped by the Windows stub. * One problem is that we have to determine the number of removed arguments, * as these have to be really removed in KERNEL.621. Thus, the BP value * that we place in the temporary area to be restored, contains the value * that SP would have if no arguments were removed. By comparing the actual * value of SP with this value in our return stub we can compute the number * of removed arguments. This is then returned to KERNEL.621. * * The stack layout of this function: * (ebp+20) nArgs pointer to variable receiving nr. of args (Ex only) * (ebp+16) esi pointer to caller's esi value * (ebp+12) arg ebp value to be set for relay stub * (ebp+8) func CBClient relay stub address * (ebp+4) ret addr * (ebp) ebp */ static void BuildCallTo32CBClient( int isEx ) { function_header( isEx ? "CALL32_CBClientEx" : "CALL32_CBClient" ); /* Entry code */ output_cfi( ".cfi_startproc" ); output( "\tpushl %%ebp\n" ); output_cfi( ".cfi_adjust_cfa_offset 4" ); output_cfi( ".cfi_rel_offset %%ebp,0" ); output( "\tmovl %%esp,%%ebp\n" ); output_cfi( ".cfi_def_cfa_register %%ebp" ); output( "\tpushl %%edi\n" ); output_cfi( ".cfi_rel_offset %%edi,-4" ); output( "\tpushl %%esi\n" ); output_cfi( ".cfi_rel_offset %%esi,-8" ); output( "\tpushl %%ebx\n" ); output_cfi( ".cfi_rel_offset %%ebx,-12" ); /* Get pointer to temporary area and save the 32-bit stack pointer */ output( "\tmovl 16(%%ebp), %%ebx\n" ); output( "\tleal -8(%%esp), %%eax\n" ); if ( !isEx ) output( "\tmovl %%eax, -8(%%ebx)\n" ); else output( "\tmovl %%eax, 12(%%ebx)\n" ); /* Set up registers and call CBClient relay stub (simulating a far call) */ output( "\tmovl 20(%%ebp), %%esi\n" ); output( "\tmovl (%%esi), %%esi\n" ); output( "\tmovl 8(%%ebp), %%eax\n" ); output( "\tmovl 12(%%ebp), %%ebp\n" ); output( "\tpushl %%cs\n" ); output( "\tcall *%%eax\n" ); /* Return new esi value to caller */ output( "\tmovl 32(%%esp), %%edi\n" ); output( "\tmovl %%esi, (%%edi)\n" ); /* Return argument size to caller */ if ( isEx ) { output( "\tmovl 36(%%esp), %%ebx\n" ); output( "\tmovl %%ebp, (%%ebx)\n" ); } /* Restore registers and return */ output( "\tpopl %%ebx\n" ); output_cfi( ".cfi_same_value %%ebx" ); output( "\tpopl %%esi\n" ); output_cfi( ".cfi_same_value %%esi" ); output( "\tpopl %%edi\n" ); output_cfi( ".cfi_same_value %%edi" ); output( "\tpopl %%ebp\n" ); output_cfi( ".cfi_def_cfa %%esp,4" ); output_cfi( ".cfi_same_value %%ebp" ); output( "\tret\n" ); output_cfi( ".cfi_endproc" ); output_function_size( isEx ? "CALL32_CBClientEx" : "CALL32_CBClient" ); /* '16-bit' return stub */ function_header( isEx ? "CALL32_CBClientEx_Ret" : "CALL32_CBClient_Ret" ); if ( !isEx ) { output( "\tmovzwl %%sp, %%ebx\n" ); output( "\tlssl %%ss:-16(%%ebx), %%esp\n" ); } else { output( "\tmovzwl %%bp, %%ebx\n" ); output( "\tsubw %%bp, %%sp\n" ); output( "\tmovzwl %%sp, %%ebp\n" ); output( "\tlssl %%ss:-12(%%ebx), %%esp\n" ); } output( "\tlret\n" ); output_function_size( isEx ? "CALL32_CBClientEx_Ret" : "CALL32_CBClient_Ret" ); } /******************************************************************* * output_asm_relays16 * * Build all the 16-bit relay callbacks */ void output_asm_relays16(void) { /* File header */ output( "\t.text\n" ); output( "%s:\n\n", asm_name("__wine_spec_thunk_text_16") ); output( "%s\n", asm_globl("__wine_call16_start") ); /* Standard CallFrom16 routine */ BuildCallFrom16Core( 0, 0 ); /* Register CallFrom16 routine */ BuildCallFrom16Core( 1, 0 ); /* C16ThkSL CallFrom16 routine */ BuildCallFrom16Core( 0, 1 ); /* Standard CallTo16 routine */ BuildCallTo16Core( 0 ); /* Register CallTo16 routine */ BuildCallTo16Core( 1 ); /* Standard CallTo16 return stub */ BuildRet16Func(); /* CBClientThunkSL routine */ BuildCallTo32CBClient( 0 ); /* CBClientThunkSLEx routine */ BuildCallTo32CBClient( 1 ); output( "%s\n", asm_globl("__wine_call16_end") ); output_function_size( "__wine_spec_thunk_text_16" ); /* Declare the return address and data selector variables */ output( "\n\t.data\n\t.align %d\n", get_alignment(4) ); output( "%s\n\t.long 0\n", asm_globl("CallTo16_DataSelector") ); output( "%s\n\t.long 0\n", asm_globl("CallTo16_TebSelector") ); output("%s\n\t.long %s\n", asm_globl("__wine_call16_start_p"), asm_name("__wine_call16_start") ); output("%s\n\t.long %s\n", asm_globl("__wine_call16_end_p"), asm_name("__wine_call16_end") ); output("%s\n\t.long %s\n", asm_globl("__wine_call_to_16_ret_p"), asm_name("__wine_call_to_16_ret") ); } ================================================ FILE: convspec/res16.c ================================================ /* * Builtin dlls resource support * * Copyright 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H # include #endif #include #include "build.h" /* Unicode string or integer id */ struct string_id { char *str; /* ptr to string */ unsigned short id; /* integer id if str is NULL */ }; /* descriptor for a resource */ struct resource { struct string_id type; struct string_id name; const void *data; unsigned int name_offset; unsigned int data_size; unsigned int memopt; }; /* type level of the resource tree */ struct res_type { const struct string_id *type; /* type name */ struct resource *res; /* first resource of this type */ unsigned int name_offset; /* name offset if string */ unsigned int nb_names; /* total number of names */ }; /* top level of the resource tree */ struct res_tree { struct res_type *types; /* types array */ unsigned int nb_types; /* total number of types */ }; static inline struct resource *add_resource( DLLSPEC *spec ) { spec->resources = xrealloc( spec->resources, (spec->nb_resources + 1) * sizeof(*spec->resources) ); return &spec->resources[spec->nb_resources++]; } static struct res_type *add_type( struct res_tree *tree, struct resource *res ) { struct res_type *type; tree->types = xrealloc( tree->types, (tree->nb_types + 1) * sizeof(*tree->types) ); type = &tree->types[tree->nb_types++]; type->type = &res->type; type->res = res; type->nb_names = 0; return type; } /* get a string from the current resource file */ static void get_string( struct string_id *str ) { unsigned char c = get_byte(); if (c == 0xff) { str->str = NULL; str->id = get_word(); } else { str->str = (char *)input_buffer + input_buffer_pos - 1; str->id = 0; while (get_byte()) /* nothing */; } } /* load the next resource from the current file */ static void load_next_resource( DLLSPEC *spec ) { struct resource *res = add_resource( spec ); get_string( &res->type ); get_string( &res->name ); res->memopt = get_word(); res->data_size = get_dword(); res->data = input_buffer + input_buffer_pos; input_buffer_pos += res->data_size; if (input_buffer_pos > input_buffer_size) fatal_error( "%s is a truncated/corrupted file\n", input_buffer_filename ); } /* load a Win16 .res file */ void load_res16_file( const char *name, DLLSPEC *spec ) { init_input_buffer( name ); while (input_buffer_pos < input_buffer_size) load_next_resource( spec ); } void load_res16_from_buf( const unsigned char *buf, int size, DLLSPEC *spec ) { input_buffer = buf; input_buffer_size = size; input_buffer_pos = 0; while (input_buffer_pos < input_buffer_size) load_next_resource( spec ); } /* compare two strings/ids */ static int cmp_string( const struct string_id *str1, const struct string_id *str2 ) { if (!str1->str) { if (!str2->str) return str1->id - str2->id; return 1; /* an id compares larger than a string */ } if (!str2->str) return -1; return strcasecmp( str1->str, str2->str ); } /* compare two resources for sorting the resource directory */ /* resources are stored first by type, then by name */ static int cmp_res( const void *ptr1, const void *ptr2 ) { const struct resource *res1 = ptr1; const struct resource *res2 = ptr2; int ret; if ((ret = cmp_string( &res1->type, &res2->type ))) return ret; return cmp_string( &res1->name, &res2->name ); } /* build the 2-level (type,name) resource tree */ static struct res_tree *build_resource_tree( DLLSPEC *spec ) { unsigned int i, j, offset; struct res_tree *tree; struct res_type *type = NULL; struct resource *res; qsort( spec->resources, spec->nb_resources, sizeof(*spec->resources), cmp_res ); offset = 2; /* alignment */ tree = xmalloc( sizeof(*tree) ); tree->types = NULL; tree->nb_types = 0; for (i = 0; i < spec->nb_resources; i++) { if (!i || cmp_string( &spec->resources[i].type, &spec->resources[i-1].type )) /* new type */ { type = add_type( tree, &spec->resources[i] ); offset += 8; } type->nb_names++; offset += 12; } offset += 2; /* terminator */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { if (type->type->str) { type->name_offset = offset; offset += strlen(type->type->str) + 1; } else type->name_offset = type->type->id | 0x8000; for (j = 0, res = type->res; j < type->nb_names; j++, res++) { if (res->name.str) { res->name_offset = offset; offset += strlen(res->name.str) + 1; } else res->name_offset = res->name.id | 0x8000; } } return tree; } /* free the resource tree */ static void free_resource_tree( struct res_tree *tree ) { free( tree->types ); free( tree ); } /* output a string preceded by its length */ static void output_string( const char *str ) { unsigned int i, len = strlen(str); output( "\t.byte 0x%02x", len ); for (i = 0; i < len; i++) output( ",0x%02x", (unsigned char)str[i] ); output( " /* %s */\n", str ); } /* output a string preceded by its length in binary format*/ static void output_bin_string( const char *str ) { put_byte( strlen(str) ); while (*str) put_byte( *str++ ); } /* output the resource data */ void output_res16_data( DLLSPEC *spec ) { const struct resource *res; unsigned int i; for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++) { output( ".L__wine_spec_resource_%u:\n", i ); dump_bytes( res->data, res->data_size ); } } /* output the resource definitions */ void output_res16_directory( DLLSPEC *spec ) { unsigned int i, j; struct res_tree *tree; const struct res_type *type; const struct resource *res; tree = build_resource_tree( spec ); output( "\n.L__wine_spec_ne_rsrctab:\n" ); output( "\t.short 0\n" ); /* alignment */ /* type and name structures */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { output( "\t.short 0x%04x,%u,0,0\n", type->name_offset, type->nb_names ); for (j = 0, res = type->res; j < type->nb_names; j++, res++) { output( "\t.short .L__wine_spec_resource_%lu-.L__wine_spec_dos_header,%u\n", (unsigned long)(res - spec->resources), res->data_size ); output( "\t.short 0x%04x,0x%04x,0,0\n", res->memopt, res->name_offset ); } } output( "\t.short 0\n" ); /* terminator */ /* name strings */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { if (type->type->str) output_string( type->type->str ); for (j = 0, res = type->res; j < type->nb_names; j++, res++) if (res->name.str) output_string( res->name.str ); } output( "\t.byte 0\n" ); /* names terminator */ free_resource_tree( tree ); } /* output the resource data in binary format */ void output_bin_res16_data( DLLSPEC *spec ) { const struct resource *res; unsigned int i; for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++) put_data( res->data, res->data_size ); } /* output the resource definitions in binary format */ void output_bin_res16_directory( DLLSPEC *spec, unsigned int data_offset ) { unsigned int i, j; struct res_tree *tree; const struct res_type *type; const struct resource *res; tree = build_resource_tree( spec ); put_word( 0 ); /* alignment */ /* type and name structures */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { put_word( type->name_offset ); put_word( type->nb_names ); put_word( 0 ); put_word( 0 ); for (j = 0, res = type->res; j < type->nb_names; j++, res++) { put_word( data_offset ); put_word( res->data_size ); put_word( res->memopt ); put_word( res->name_offset ); put_word( 0 ); put_word( 0 ); data_offset += res->data_size; } } put_word( 0 ); /* terminator */ /* name strings */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { if (type->type->str) output_bin_string( type->type->str ); for (j = 0, res = type->res; j < type->nb_names; j++, res++) if (res->name.str) output_bin_string( res->name.str ); } put_byte( 0 ); /* names terminator */ free_resource_tree( tree ); } ================================================ FILE: convspec/res32.c ================================================ /* * Builtin dlls resource support * * Copyright 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H # include #endif #include #include "build.h" typedef unsigned short WCHAR; /* Unicode string or integer id */ struct string_id { WCHAR *str; /* ptr to Unicode string */ unsigned short id; /* integer id if str is NULL */ }; /* descriptor for a resource */ struct resource { struct string_id type; struct string_id name; const void *data; unsigned int data_size; unsigned int data_offset; unsigned short mem_options; unsigned short lang; unsigned int version; }; /* name level of the resource tree */ struct res_name { const struct string_id *name; /* name */ struct resource *res; /* resource */ int nb_languages; /* number of languages */ unsigned int dir_offset; /* offset of directory in resource dir */ unsigned int name_offset; /* offset of name in resource dir */ }; /* type level of the resource tree */ struct res_type { const struct string_id *type; /* type name */ struct res_name *names; /* names array */ unsigned int nb_names; /* total number of names */ unsigned int nb_id_names; /* number of names that have a numeric id */ unsigned int dir_offset; /* offset of directory in resource dir */ unsigned int name_offset; /* offset of type name in resource dir */ }; /* top level of the resource tree */ struct res_tree { struct res_type *types; /* types array */ unsigned int nb_types; /* total number of types */ }; /* size of a resource directory with n entries */ #define RESOURCE_DIR_SIZE (4 * sizeof(unsigned int)) #define RESOURCE_DIR_ENTRY_SIZE (2 * sizeof(unsigned int)) #define RESOURCE_DATA_ENTRY_SIZE (4 * sizeof(unsigned int)) #define RESDIR_SIZE(n) (RESOURCE_DIR_SIZE + (n) * RESOURCE_DIR_ENTRY_SIZE) static inline struct resource *add_resource( DLLSPEC *spec ) { spec->resources = xrealloc( spec->resources, (spec->nb_resources + 1) * sizeof(spec->resources[0]) ); return &spec->resources[spec->nb_resources++]; } static inline unsigned int strlenW( const WCHAR *str ) { const WCHAR *s = str; while (*s) s++; return s - str; } static inline int strcmpW( const WCHAR *str1, const WCHAR *str2 ) { while (*str1 && (*str1 == *str2)) { str1++; str2++; } return *str1 - *str2; } static struct res_name *add_name( struct res_type *type, struct resource *res ) { struct res_name *name; type->names = xrealloc( type->names, (type->nb_names + 1) * sizeof(*type->names) ); name = &type->names[type->nb_names++]; name->name = &res->name; name->res = res; name->nb_languages = 1; if (!name->name->str) type->nb_id_names++; return name; } static struct res_type *add_type( struct res_tree *tree, struct resource *res ) { struct res_type *type; tree->types = xrealloc( tree->types, (tree->nb_types + 1) * sizeof(*tree->types) ); type = &tree->types[tree->nb_types++]; type->type = &res->type; type->names = NULL; type->nb_names = 0; type->nb_id_names = 0; return type; } /* get a string from the current resource file */ static void get_string( struct string_id *str ) { WCHAR wc = get_word(); if (wc == 0xffff) { str->str = NULL; str->id = get_word(); } else { WCHAR *p = xmalloc( (strlenW( (const WCHAR *)(input_buffer + input_buffer_pos) - 1) + 1) * sizeof(WCHAR) ); str->str = p; str->id = 0; if ((*p++ = wc)) while ((*p++ = get_word())); } } /* put a string into the resource file */ static void put_string( const struct string_id *str ) { if (str->str) { const WCHAR *p = str->str; while (*p) put_word( *p++ ); put_word( 0 ); } else { put_word( 0xffff ); put_word( str->id ); } } static void dump_res_data( const struct resource *res ) { unsigned int i = 0; unsigned int size = (res->data_size + 3) & ~3; if (!size) return; input_buffer = res->data; input_buffer_pos = 0; input_buffer_size = size; output( "\t.long " ); while (size > 4) { if ((i++ % 16) == 15) output( "0x%08x\n\t.long ", get_dword() ); else output( "0x%08x,", get_dword() ); size -= 4; } output( "0x%08x\n", get_dword() ); assert( input_buffer_pos == input_buffer_size ); } /* check the file header */ /* all values must be zero except header size */ static int check_header(void) { unsigned int size; if (get_dword()) return 0; /* data size */ size = get_dword(); /* header size */ if (size == 0x20000000) byte_swapped = 1; else if (size != 0x20) return 0; if (get_word() != 0xffff || get_word()) return 0; /* type, must be id 0 */ if (get_word() != 0xffff || get_word()) return 0; /* name, must be id 0 */ if (get_dword()) return 0; /* data version */ if (get_word()) return 0; /* mem options */ if (get_word()) return 0; /* language */ if (get_dword()) return 0; /* version */ if (get_dword()) return 0; /* characteristics */ return 1; } /* load the next resource from the current file */ static void load_next_resource( DLLSPEC *spec ) { unsigned int hdr_size; struct resource *res = add_resource( spec ); res->data_size = get_dword(); hdr_size = get_dword(); if (hdr_size & 3) fatal_error( "%s header size not aligned\n", input_buffer_filename ); if (hdr_size < 32) fatal_error( "%s invalid header size %u\n", input_buffer_filename, hdr_size ); res->data = input_buffer + input_buffer_pos - 2*sizeof(unsigned int) + hdr_size; if ((const unsigned char *)res->data < input_buffer || (const unsigned char *)res->data >= input_buffer + input_buffer_size) fatal_error( "%s invalid header size %u\n", input_buffer_filename, hdr_size ); get_string( &res->type ); get_string( &res->name ); if (input_buffer_pos & 2) get_word(); /* align to dword boundary */ get_dword(); /* skip data version */ res->mem_options = get_word(); res->lang = get_word(); res->version = get_dword(); get_dword(); /* skip characteristics */ input_buffer_pos = ((const unsigned char *)res->data - input_buffer) + ((res->data_size + 3) & ~3); input_buffer_pos = (input_buffer_pos + 3) & ~3; if (input_buffer_pos > input_buffer_size) fatal_error( "%s is a truncated file\n", input_buffer_filename ); } /* load a Win32 .res file */ int load_res32_file( const char *name, DLLSPEC *spec ) { int ret; init_input_buffer( name ); if ((ret = check_header())) { while (input_buffer_pos < input_buffer_size) load_next_resource( spec ); } return ret; } /* compare two unicode strings/ids */ static int cmp_string( const struct string_id *str1, const struct string_id *str2 ) { if (!str1->str) { if (!str2->str) return str1->id - str2->id; return 1; /* an id compares larger than a string */ } if (!str2->str) return -1; return strcmpW( str1->str, str2->str ); } /* compare two resources for sorting the resource directory */ /* resources are stored first by type, then by name, then by language */ static int cmp_res( const void *ptr1, const void *ptr2 ) { const struct resource *res1 = ptr1; const struct resource *res2 = ptr2; int ret; if ((ret = cmp_string( &res1->type, &res2->type ))) return ret; if ((ret = cmp_string( &res1->name, &res2->name ))) return ret; if ((ret = res1->lang - res2->lang)) return ret; return res1->version - res2->version; } static char *format_res_string( const struct string_id *str ) { int i, len = str->str ? strlenW(str->str) + 1 : 5; char *ret = xmalloc( len ); if (!str->str) sprintf( ret, "%04x", str->id ); else for (i = 0; i < len; i++) ret[i] = str->str[i]; /* dumb W->A conversion */ return ret; } /* get rid of duplicate resources with different versions */ static void remove_duplicate_resources( DLLSPEC *spec ) { unsigned int i, n; for (i = n = 0; i < spec->nb_resources; i++, n++) { if (i && !cmp_string( &spec->resources[i].type, &spec->resources[i-1].type ) && !cmp_string( &spec->resources[i].name, &spec->resources[i-1].name ) && spec->resources[i].lang == spec->resources[i-1].lang) { if (spec->resources[i].version == spec->resources[i-1].version) { char *type_str = format_res_string( &spec->resources[i].type ); char *name_str = format_res_string( &spec->resources[i].name ); error( "winebuild: duplicate resource type %s name %s language %04x version %08x\n", type_str, name_str, spec->resources[i].lang, spec->resources[i].version ); } else n--; /* replace the previous one */ } if (n < i) spec->resources[n] = spec->resources[i]; } spec->nb_resources = n; } /* build the 3-level (type,name,language) resource tree */ static struct res_tree *build_resource_tree( DLLSPEC *spec, unsigned int *dir_size ) { unsigned int i, k, n, offset, data_offset; struct res_tree *tree; struct res_type *type = NULL; struct res_name *name = NULL; struct resource *res; qsort( spec->resources, spec->nb_resources, sizeof(*spec->resources), cmp_res ); remove_duplicate_resources( spec ); tree = xmalloc( sizeof(*tree) ); tree->types = NULL; tree->nb_types = 0; for (i = 0; i < spec->nb_resources; i++) { if (!i || cmp_string( &spec->resources[i].type, &spec->resources[i-1].type )) /* new type */ { type = add_type( tree, &spec->resources[i] ); name = add_name( type, &spec->resources[i] ); } else if (cmp_string( &spec->resources[i].name, &spec->resources[i-1].name )) /* new name */ { name = add_name( type, &spec->resources[i] ); } else { name->nb_languages++; } } /* compute the offsets */ offset = RESDIR_SIZE( tree->nb_types ); for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { type->dir_offset = offset; offset += RESDIR_SIZE( type->nb_names ); for (n = 0, name = type->names; n < type->nb_names; n++, name++) { name->dir_offset = offset; offset += RESDIR_SIZE( name->nb_languages ); } } data_offset = offset; offset += spec->nb_resources * RESOURCE_DATA_ENTRY_SIZE; for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { if (type->type->str) { type->name_offset = offset | 0x80000000; offset += (strlenW(type->type->str)+1) * sizeof(WCHAR); } else type->name_offset = type->type->id; for (n = 0, name = type->names; n < type->nb_names; n++, name++) { if (name->name->str) { name->name_offset = offset | 0x80000000; offset += (strlenW(name->name->str)+1) * sizeof(WCHAR); } else name->name_offset = name->name->id; for (k = 0, res = name->res; k < name->nb_languages; k++, res++) { unsigned int entry_offset = (res - spec->resources) * RESOURCE_DATA_ENTRY_SIZE; res->data_offset = data_offset + entry_offset; } } } if (dir_size) *dir_size = (offset + 3) & ~3; return tree; } /* free the resource tree */ static void free_resource_tree( struct res_tree *tree ) { unsigned int i; for (i = 0; i < tree->nb_types; i++) free( tree->types[i].names ); free( tree->types ); free( tree ); } /* output a Unicode string */ static void output_string( const WCHAR *name ) { int i, len = strlenW(name); output( "\t.short 0x%04x", len ); for (i = 0; i < len; i++) output( ",0x%04x", name[i] ); output( " /* " ); for (i = 0; i < len; i++) output( "%c", isprint((char)name[i]) ? (char)name[i] : '?' ); output( " */\n" ); } /* output a resource directory */ static inline void output_res_dir( unsigned int nb_names, unsigned int nb_ids ) { output( "\t.long 0\n" ); /* Characteristics */ output( "\t.long 0\n" ); /* TimeDateStamp */ output( "\t.short 0,0\n" ); /* Major/MinorVersion */ output( "\t.short %u,%u\n", /* NumberOfNamed/IdEntries */ nb_names, nb_ids ); } /* output the resource definitions */ void output_resources( DLLSPEC *spec ) { int k, nb_id_types; unsigned int i, n; struct res_tree *tree; struct res_type *type; struct res_name *name; const struct resource *res; if (!spec->nb_resources) return; tree = build_resource_tree( spec, NULL ); /* output the resource directories */ output( "\n/* resources */\n\n" ); output( "\t.data\n" ); output( "\t.align %d\n", get_alignment(get_ptr_size()) ); output( ".L__wine_spec_resources:\n" ); for (i = nb_id_types = 0, type = tree->types; i < tree->nb_types; i++, type++) if (!type->type->str) nb_id_types++; output_res_dir( tree->nb_types - nb_id_types, nb_id_types ); /* dump the type directory */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) output( "\t.long 0x%08x,0x%08x\n", type->name_offset, type->dir_offset | 0x80000000 ); /* dump the names and languages directories */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { output_res_dir( type->nb_names - type->nb_id_names, type->nb_id_names ); for (n = 0, name = type->names; n < type->nb_names; n++, name++) output( "\t.long 0x%08x,0x%08x\n", name->name_offset, name->dir_offset | 0x80000000 ); for (n = 0, name = type->names; n < type->nb_names; n++, name++) { output_res_dir( 0, name->nb_languages ); for (k = 0, res = name->res; k < name->nb_languages; k++, res++) output( "\t.long 0x%08x,0x%08x\n", res->lang, res->data_offset ); } } /* dump the resource data entries */ for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++) output( "\t.long .L__wine_spec_res_%d-.L__wine_spec_rva_base,%u,0,0\n", i, res->data_size ); /* dump the name strings */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { if (type->type->str) output_string( type->type->str ); for (n = 0, name = type->names; n < type->nb_names; n++, name++) if (name->name->str) output_string( name->name->str ); } /* resource data */ for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++) { output( "\n\t.align %d\n", get_alignment(get_ptr_size()) ); output( ".L__wine_spec_res_%d:\n", i ); dump_res_data( res ); } output( ".L__wine_spec_resources_end:\n" ); output( "\t.byte 0\n" ); free_resource_tree( tree ); } /* output a Unicode string in binary format */ static void output_bin_string( const WCHAR *name ) { int i, len = strlenW(name); put_word( len ); for (i = 0; i < len; i++) put_word( name[i] ); } /* output a resource directory in binary format */ static inline void output_bin_res_dir( unsigned int nb_names, unsigned int nb_ids ) { put_dword( 0 ); /* Characteristics */ put_dword( 0 ); /* TimeDateStamp */ put_word( 0 ); /* MajorVersion */ put_word( 0 ); /* MinorVersion */ put_word( nb_names ); /* NumberOfNamedEntries */ put_word( nb_ids ); /* NumberOfIdEntries */ } /* output the resource definitions in binary format */ void output_bin_resources( DLLSPEC *spec, unsigned int start_rva ) { int k, nb_id_types; unsigned int i, n, data_offset; struct res_tree *tree; struct res_type *type; struct res_name *name; const struct resource *res; if (!spec->nb_resources) return; tree = build_resource_tree( spec, &data_offset ); init_output_buffer(); /* output the resource directories */ for (i = nb_id_types = 0, type = tree->types; i < tree->nb_types; i++, type++) if (!type->type->str) nb_id_types++; output_bin_res_dir( tree->nb_types - nb_id_types, nb_id_types ); /* dump the type directory */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { put_dword( type->name_offset ); put_dword( type->dir_offset | 0x80000000 ); } /* dump the names and languages directories */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { output_bin_res_dir( type->nb_names - type->nb_id_names, type->nb_id_names ); for (n = 0, name = type->names; n < type->nb_names; n++, name++) { put_dword( name->name_offset ); put_dword( name->dir_offset | 0x80000000 ); } for (n = 0, name = type->names; n < type->nb_names; n++, name++) { output_bin_res_dir( 0, name->nb_languages ); for (k = 0, res = name->res; k < name->nb_languages; k++, res++) { put_dword( res->lang ); put_dword( res->data_offset ); } } } /* dump the resource data entries */ for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++) { put_dword( data_offset + start_rva ); put_dword( res->data_size ); put_dword( 0 ); put_dword( 0 ); data_offset += (res->data_size + 3) & ~3; } /* dump the name strings */ for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) { if (type->type->str) output_bin_string( type->type->str ); for (n = 0, name = type->names; n < type->nb_names; n++, name++) if (name->name->str) output_bin_string( name->name->str ); } /* resource data */ align_output( 4 ); for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++) { put_data( res->data, res->data_size ); align_output( 4 ); } free_resource_tree( tree ); } static unsigned int get_resource_header_size( const struct resource *res ) { unsigned int size = 5 * sizeof(unsigned int) + 2 * sizeof(unsigned short); if (!res->type.str) size += 2 * sizeof(unsigned short); else size += (strlenW(res->type.str) + 1) * sizeof(WCHAR); if (!res->name.str) size += 2 * sizeof(unsigned short); else size += (strlenW(res->name.str) + 1) * sizeof(WCHAR); return size; } /* output the resources into a .o file */ void output_res_o_file( DLLSPEC *spec ) { unsigned int i; char *res_file = NULL; const char *format; int fd; struct strarray args; if (!spec->nb_resources) fatal_error( "--resources mode needs at least one resource file as input\n" ); if (!output_file_name) fatal_error( "No output file name specified\n" ); qsort( spec->resources, spec->nb_resources, sizeof(*spec->resources), cmp_res ); remove_duplicate_resources( spec ); byte_swapped = 0; init_output_buffer(); put_dword( 0 ); /* ResSize */ put_dword( 32 ); /* HeaderSize */ put_word( 0xffff ); /* ResType */ put_word( 0x0000 ); put_word( 0xffff ); /* ResName */ put_word( 0x0000 ); put_dword( 0 ); /* DataVersion */ put_word( 0 ); /* Memory options */ put_word( 0 ); /* Language */ put_dword( 0 ); /* Version */ put_dword( 0 ); /* Characteristics */ for (i = 0; i < spec->nb_resources; i++) { unsigned int header_size = get_resource_header_size( &spec->resources[i] ); put_dword( spec->resources[i].data_size ); put_dword( (header_size + 3) & ~3 ); put_string( &spec->resources[i].type ); put_string( &spec->resources[i].name ); align_output( 4 ); put_dword( 0 ); put_word( spec->resources[i].mem_options ); put_word( spec->resources[i].lang ); put_dword( spec->resources[i].version ); put_dword( 0 ); put_data( spec->resources[i].data, spec->resources[i].data_size ); align_output( 4 ); } /* if the output file name is a .res too, don't run the results through windres */ if (strendswith( output_file_name, ".res")) { flush_output_buffer(); return; } res_file = get_temp_file_name( output_file_name, ".res" ); if ((fd = open( res_file, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0600 )) == -1) fatal_error( "Cannot create %s\n", res_file ); if (write( fd, output_buffer, output_buffer_pos ) != output_buffer_pos) fatal_error( "Error writing to %s\n", res_file ); close( fd ); free( output_buffer ); args = find_tool( "windres", NULL ); switch (target_cpu) { case CPU_x86: format = "pe-i386"; break; case CPU_x86_64: format = "pe-x86-64"; break; default: format = NULL; break; } strarray_add( &args, "-i", res_file, "-o", output_file_name, NULL ); if (format) strarray_add( &args, "-F", format, NULL ); spawn( args ); output_file_name = NULL; /* so we don't try to assemble it */ } ================================================ FILE: convspec/spec16.c ================================================ /* * 16-bit spec files * * Copyright 1993 Robert J. Amstadt * Copyright 1995 Martin von Loewis * Copyright 1995, 1996, 1997 Alexandre Julliard * Copyright 1997 Eric Youngdale * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include "build.h" #define NE_FFLAGS_SINGLEDATA 0x0001 #define NE_FFLAGS_LIBMODULE 0x8000 /* argument type flags for relay debugging */ enum arg_types { ARG16_NONE = 0, /* indicates end of arg list */ ARG16_WORD, /* unsigned word */ ARG16_SWORD, /* signed word */ ARG16_LONG, /* long or segmented pointer */ ARG16_PTR, /* linear pointer */ ARG16_STR, /* linear pointer to null-terminated string */ ARG16_SEGSTR, /* segmented pointer to null-terminated string */ ARG16_VARARG /* start of varargs */ }; /* sequences of nops to fill a certain number of words */ static const char * const nop_sequence[5] = { ".byte 0x89,0xf6", /* mov %esi,%esi */ ".byte 0x8d,0x74,0x26,0x00", /* lea 0x00(%esi),%esi */ ".byte 0x8d,0xb6,0x00,0x00,0x00,0x00", /* lea 0x00000000(%esi),%esi */ ".byte 0x8d,0x74,0x26,0x00,0x8d,0x74,0x26,0x00", /* lea 0x00(%esi),%esi; lea 0x00(%esi),%esi */ ".byte 0x8d,0x74,0x26,0x00,0x8d,0xb6,0x00,0x00,0x00,0x00" /* lea 0x00(%esi),%esi; lea 0x00000000(%esi),%esi */ }; static inline int is_function( const ORDDEF *odp ) { if (odp->flags & FLAG_EXPORT32) return 0; return (odp->type == TYPE_CDECL || odp->type == TYPE_PASCAL || odp->type == TYPE_VARARGS || odp->type == TYPE_STUB); } static const char *get_args_str( const ORDDEF *odp ) { static char buffer[MAX_ARGUMENTS*2+1]; int i; buffer[0] = 0; for (i = 0; i < odp->u.func.nb_args; i++) { switch (odp->u.func.args[i]) { case ARG_WORD: strcat( buffer, "w" ); break; case ARG_SWORD: strcat( buffer, "s" ); break; case ARG_SEGSTR: strcat( buffer, "T" ); break; case ARG_STR: strcat( buffer, "t" ); break; case ARG_LONG: case ARG_FLOAT: case ARG_SEGPTR: strcat( buffer, "l" ); break; case ARG_PTR: case ARG_WSTR: case ARG_INT128: strcat( buffer, "p" ); break; case ARG_INT64: case ARG_DOUBLE: strcat( buffer, "ll" ); break; } } return buffer; } /******************************************************************* * output_entries * * Output entries for individual symbols in the entry table. */ static void output_entries( DLLSPEC *spec, int first, int count ) { int i; for (i = 0; i < count; i++) { ORDDEF *odp = spec->ordinals[first + i]; output( "\t.byte 0x03\n" ); /* flags: exported & public data */ switch (odp->type) { case TYPE_CDECL: case TYPE_PASCAL: case TYPE_VARARGS: case TYPE_STUB: output( "\t.short .L__wine_%s_%u-.L__wine_spec_code_segment\n", spec->c_name, first + i ); break; case TYPE_VARIABLE: output( "\t.short .L__wine_%s_%u-.L__wine_spec_data_segment\n", spec->c_name, first + i ); break; case TYPE_ABS: output( "\t.short 0x%04x /* %s */\n", odp->u.abs.value, odp->name ); break; default: assert(0); } } } /******************************************************************* * output_entry_table */ static void output_entry_table( DLLSPEC *spec ) { int i, prev = 0, prev_sel = -1, bundle_count = 0; for (i = 1; i <= spec->limit; i++) { int selector = 0; ORDDEF *odp = spec->ordinals[i]; if (!odp) continue; if (odp->flags & FLAG_EXPORT32) continue; switch (odp->type) { case TYPE_CDECL: case TYPE_PASCAL: case TYPE_VARARGS: case TYPE_STUB: selector = 1; /* Code selector */ break; case TYPE_VARIABLE: selector = 2; /* Data selector */ break; case TYPE_ABS: selector = 0xfe; /* Constant selector */ break; default: continue; } if (prev + 1 != i || prev_sel != selector || bundle_count == 255) { /* need to start a new bundle */ /* flush previous bundle */ if (bundle_count) { output( "\t/* %s.%d - %s.%d */\n", spec->dll_name, prev - bundle_count + 1, spec->dll_name, prev ); output( "\t.byte 0x%02x,0x%02x\n", bundle_count, prev_sel ); output_entries( spec, prev - bundle_count + 1, bundle_count ); } if (prev + 1 != i) { int skip = i - (prev + 1); while (skip > 255) { output( "\t.byte 0xff,0x00\n" ); skip -= 255; } output( "\t.byte 0x%02x,0x00\n", skip ); } bundle_count = 0; prev_sel = selector; } bundle_count++; prev = i; } /* flush last bundle */ if (bundle_count) { output( "\t.byte 0x%02x,0x%02x\n", bundle_count, prev_sel ); output_entries( spec, prev - bundle_count + 1, bundle_count ); } output( "\t.byte 0x00\n" ); } /******************************************************************* * output_resident_name */ static void output_resident_name( const char *string, int ordinal ) { unsigned int i, len = strlen(string); output( "\t.byte 0x%02x", len ); for (i = 0; i < len; i++) output( ",0x%02x", (unsigned char)toupper(string[i]) ); output( " /* %s */\n", string ); output( "\t.short %u\n", ordinal ); } /******************************************************************* * get_callfrom16_name */ static const char *get_callfrom16_name( const ORDDEF *odp ) { static char *buffer; free( buffer ); buffer = strmake( "%s_%s_%s_%d", (odp->type == TYPE_PASCAL) ? "p" : (odp->type == TYPE_VARARGS) ? "v" : "c", (odp->flags & FLAG_REGISTER) ? "regs" : (odp->flags & FLAG_RET16) ? "word" : "long", get_args_str(odp), odp->ordinal ); return buffer; } /******************************************************************* * get_relay_name */ static const char *get_relay_name( const ORDDEF *odp ) { static char buffer[80]; char *p; switch(odp->type) { case TYPE_PASCAL: strcpy( buffer, "p_" ); break; case TYPE_VARARGS: strcpy( buffer, "v_" ); break; case TYPE_CDECL: case TYPE_STUB: strcpy( buffer, "c_" ); break; default: assert(0); } strcat( buffer, get_args_str(odp) ); for (p = buffer + 2; *p; p++) { /* map string types to the corresponding plain pointer type */ if (*p == 't') *p = 'p'; else if (*p == 'T') *p = 'l'; } if (odp->flags & FLAG_REGISTER) strcat( buffer, "_regs" ); snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "_%d", odp->ordinal); return buffer; } /******************************************************************* * get_function_argsize */ static int get_function_argsize( const ORDDEF *odp ) { int i, argsize = 0; for (i = 0; i < odp->u.func.nb_args; i++) { switch (odp->u.func.args[i]) { case ARG_WORD: case ARG_SWORD: argsize += 2; break; case ARG_SEGPTR: case ARG_SEGSTR: case ARG_LONG: case ARG_PTR: case ARG_STR: case ARG_WSTR: case ARG_FLOAT: case ARG_INT128: argsize += 4; break; case ARG_INT64: case ARG_DOUBLE: argsize += 8; break; } } return argsize; } /******************************************************************* * output_call16_function * * Build a 16-bit-to-Wine callback glue function. * * The generated routines are intended to be used as argument conversion * routines to be called by the CallFrom16... core. Thus, the prototypes of * the generated routines are (see also CallFrom16): * * extern WORD WINAPI __wine_spec_call16_C_xxx( FARPROC func, LPBYTE args ); * extern LONG WINAPI __wine_spec_call16_C_xxx( FARPROC func, LPBYTE args ); * extern void WINAPI __wine_spec_call16_C_xxx_regs( FARPROC func, LPBYTE args, CONTEXT86 *context ); * * where 'C' is the calling convention ('p' for pascal or 'c' for cdecl), * and each 'x' is an argument ('w'=word, 's'=signed word, 'l'=long, * 'p'=linear pointer, 't'=linear pointer to null-terminated string, * 'T'=segmented pointer to null-terminated string). * * The generated routines fetch the arguments from the 16-bit stack (pointed * to by 'args'); the offsets of the single argument values are computed * according to the calling convention and the argument types. Then, the * 32-bit entry point is called with these arguments. * * For register functions, the arguments (if present) are converted just * the same as for normal functions, but in addition the CONTEXT86 pointer * filled with the current register values is passed to the 32-bit routine. */ static void output_call16_function( ORDDEF *odp ) { char *name; int i, pos, stack_words; int argsize = get_function_argsize( odp ); int needs_ldt = (strpbrk( get_args_str( odp ), "pt" ) != NULL); name = strmake( ".L__wine_spec_call16_%s", get_relay_name(odp) ); output( "\t.align %d\n", get_alignment(4) ); output( "\t%s\n", func_declaration(name) ); output( "%s:\n", name ); output_cfi( ".cfi_startproc" ); output( "\tpushl %%ebp\n" ); output_cfi( ".cfi_adjust_cfa_offset 4" ); output_cfi( ".cfi_rel_offset %%ebp,0" ); output( "\tmovl %%esp,%%ebp\n" ); output_cfi( ".cfi_def_cfa_register %%ebp" ); stack_words = 2; if (needs_ldt) { output( "\tpushl %%esi\n" ); output_cfi( ".cfi_rel_offset %%esi,-4" ); stack_words++; if (UsePIC) { output( "\tcalll %s\n", asm_name("__wine_spec_get_pc_thunk_eax") ); output( "1:\tmovl wine_ldt_copy_ptr-1b(%%eax),%%esi\n" ); needs_get_pc_thunk = 1; } else output( "\tmovl $%s,%%esi\n", asm_name("_imp__wine_ldt_copy") ); } /* preserve 16-byte stack alignment */ stack_words += odp->u.func.nb_args; for (i = 0; i < odp->u.func.nb_args; i++) if (odp->u.func.args[i] == ARG_DOUBLE || odp->u.func.args[i] == ARG_INT64) stack_words++; if ((odp->flags & FLAG_REGISTER) || (odp->type == TYPE_VARARGS)) stack_words++; if (stack_words % 4) output( "\tsubl $%d,%%esp\n", 16 - 4 * (stack_words % 4) ); if (odp->u.func.nb_args || odp->type == TYPE_VARARGS) output( "\tmovl 12(%%ebp),%%ecx\n" ); /* args */ if (odp->flags & FLAG_REGISTER) { output( "\tpushl 16(%%ebp)\n" ); /* context */ } else if (odp->type == TYPE_VARARGS) { output( "\tleal %d(%%ecx),%%eax\n", argsize ); output( "\tpushl %%eax\n" ); /* va_list16 */ } pos = (odp->type == TYPE_PASCAL) ? 0 : argsize; for (i = odp->u.func.nb_args - 1; i >= 0; i--) { switch (odp->u.func.args[i]) { case ARG_WORD: if (odp->type != TYPE_PASCAL) pos -= 2; output( "\tmovzwl %d(%%ecx),%%eax\n", pos ); output( "\tpushl %%eax\n" ); if (odp->type == TYPE_PASCAL) pos += 2; break; case ARG_SWORD: if (odp->type != TYPE_PASCAL) pos -= 2; output( "\tmovswl %d(%%ecx),%%eax\n", pos ); output( "\tpushl %%eax\n" ); if (odp->type == TYPE_PASCAL) pos += 2; break; case ARG_INT64: case ARG_DOUBLE: if (odp->type != TYPE_PASCAL) pos -= 4; output( "\tpushl %d(%%ecx)\n", pos ); if (odp->type == TYPE_PASCAL) pos += 4; /* fall through */ case ARG_LONG: case ARG_FLOAT: case ARG_SEGPTR: case ARG_SEGSTR: if (odp->type != TYPE_PASCAL) pos -= 4; output( "\tpushl %d(%%ecx)\n", pos ); if (odp->type == TYPE_PASCAL) pos += 4; break; case ARG_PTR: case ARG_STR: case ARG_WSTR: case ARG_INT128: if (odp->type != TYPE_PASCAL) pos -= 4; output( "\tmovzwl %d(%%ecx),%%edx\n", pos + 2 ); /* sel */ output( "\tshr $3,%%edx\n" ); output( "\tmovzwl %d(%%ecx),%%eax\n", pos ); /* offset */ output( "\taddl (%%esi,%%edx,4),%%eax\n" ); output( "\tpushl %%eax\n" ); if (odp->type == TYPE_PASCAL) pos += 4; break; } } output( "\tcalll *8(%%ebp)\n" ); if (needs_ldt) { output( "\tmovl -4(%%ebp),%%esi\n" ); output_cfi( ".cfi_same_value %%esi" ); } output( "\tleave\n" ); output_cfi( ".cfi_def_cfa %%esp,4" ); output_cfi( ".cfi_same_value %%ebp" ); output( "\tret\n" ); output_cfi( ".cfi_endproc" ); output_function_size( name ); free( name ); } /******************************************************************* * callfrom16_type_compare * * Compare two callfrom16 sequences. */ static int callfrom16_type_compare( const void *e1, const void *e2 ) { const ORDDEF *odp1 = *(const ORDDEF * const *)e1; const ORDDEF *odp2 = *(const ORDDEF * const *)e2; int retval; int type1 = odp1->type; int type2 = odp2->type; char args1[80]; if (type1 == TYPE_STUB) type1 = TYPE_CDECL; if (type2 == TYPE_STUB) type2 = TYPE_CDECL; if ((retval = type1 - type2) != 0) return retval; type1 = odp1->flags & (FLAG_RET16|FLAG_REGISTER); type2 = odp2->flags & (FLAG_RET16|FLAG_REGISTER); if ((retval = type1 - type2) != 0) return retval; strcpy( args1, get_args_str( odp1 )); return strcmp( args1, get_args_str( odp2 )); } /******************************************************************* * relay_type_compare * * Same as callfrom16_type_compare but ignores differences that don't affect the resulting relay function. */ static int relay_type_compare( const void *e1, const void *e2 ) { const ORDDEF *odp1 = *(const ORDDEF * const *)e1; const ORDDEF *odp2 = *(const ORDDEF * const *)e2; char name1[80]; strcpy( name1, get_relay_name(odp1) ); return strcmp( name1, get_relay_name(odp2) ); } /******************************************************************* * sort_func_list * * Sort a list of functions, removing duplicates. */ static int sort_func_list( ORDDEF **list, int count, int (*compare)(const void *, const void *) ) { int i, j; if (!count) return 0; qsort( list, count, sizeof(*list), compare ); for (i = j = 0; i < count; i++) { if (compare( &list[j], &list[i] )) list[++j] = list[i]; } return j + 1; } /******************************************************************* * output_module16 * * Output code for a 16-bit module. */ static void output_module16( DLLSPEC *spec ) { ORDDEF **typelist; ORDDEF *entry_point = NULL; int i, j, nb_funcs; /* store the main entry point as ordinal 0 */ if (!spec->ordinals) { assert(spec->limit == 0); spec->ordinals = xmalloc( sizeof(spec->ordinals[0]) ); spec->ordinals[0] = NULL; } if (spec->init_func && !(spec->characteristics & IMAGE_FILE_DLL)) { entry_point = xmalloc( sizeof(*entry_point) ); entry_point->type = TYPE_PASCAL; entry_point->ordinal = 0; entry_point->lineno = 0; entry_point->flags = FLAG_REGISTER; entry_point->name = NULL; entry_point->link_name = xstrdup( spec->init_func ); entry_point->export_name = NULL; entry_point->u.func.nb_args = 0; assert( !spec->ordinals[0] ); spec->ordinals[0] = entry_point; } /* Build sorted list of all argument types, without duplicates */ typelist = xmalloc( (spec->limit + 1) * sizeof(*typelist) ); for (i = nb_funcs = 0; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (!odp) continue; if (is_function( odp )) typelist[nb_funcs++] = odp; } /* nb_funcs = sort_func_list( typelist, nb_funcs, callfrom16_type_compare ); */ /* Output the module structure */ output( "\n/* module data */\n\n" ); output( "\t.data\n" ); output( "\t.align %d\n", get_alignment(4) ); output( "__wine_spec_dos_header:\n" ); #ifdef WINEBUILD_MSVC output( "\t.globl __wine_spec_dos_header\n" ); output( ".L__wine_spec_dos_header:\n" ); output( "\t.globl ___wine_spec_dos_header\n" ); output( ".L___wine_spec_dos_header:\n" ); output( "___wine_spec_dos_header:\n" ); #else output( ".globl ___wine_spec_dos_header\n" ); output( ".L__wine_spec_dos_header:\n" ); output( "___wine_spec_dos_header:\n" ); #endif output( "\t.short 0x5a4d\n" ); /* e_magic */ output( "\t.short 0x0040\n" ); /* e_cblp */ output( "\t.short 0x0001\n" ); /* e_cp */ output( "\t.short (.L__wine_spec_ne_header-.L__wine_spec_dos_header)/16\n" );/* e_crlc */ output( "\t.short 0\n" ); /* e_cparhdr */ output( "\t.short 0xffff\n" ); /* e_minalloc */ output( "\t.short 0\n" ); /* e_maxalloc */ output( "\t.short 0x00b8\n" ); /* e_ss */ output( "\t.short 0\n" ); /* e_sp */ output( "\t.short 0\n" ); /* e_csum */ output( "\t.short 0\n" ); /* e_ip */ output( "\t.short 0\n" ); /* e_cs */ output( "\t.short .L__wine_spec_ne_header-.L__wine_spec_dos_header\n" );/* e_lfarlc */ output( "\t.short 0\n" ); /* e_ovno */ output( "\t.short 0,0,0,0\n" ); /* e_res */ output( "\t.short 0\n" ); /* e_oemid */ output( "\t.short 0\n" ); /* e_oeminfo */ output( "\t.short 0,0,0,0,0,0,0,0,0,0\n" ); /* e_res2 */ output( "\t.long .L__wine_spec_ne_header-.L__wine_spec_dos_header\n" );/* e_lfanew */ output( ".L__wine_spec_ne_header:\n" ); output( "\t.short 0x454e\n" ); /* ne_magic */ output( "\t.byte 0\n" ); /* ne_ver */ output( "\t.byte 0\n" ); /* ne_rev */ output( "\t.short .L__wine_spec_ne_enttab-.L__wine_spec_ne_header\n" );/* ne_enttab */ output( "\t.short .L__wine_spec_ne_enttab_end-.L__wine_spec_ne_enttab\n" );/* ne_cbenttab */ output( "\t.long 0\n" ); /* ne_crc */ output( "\t.short 0x%04x\n", NE_FFLAGS_SINGLEDATA | /* ne_flags */ ((spec->characteristics & IMAGE_FILE_DLL) ? NE_FFLAGS_LIBMODULE : 0) ); output( "\t.short 2\n" ); /* ne_autodata */ output( "\t.short %u\n", spec->heap_size ); /* ne_heap */ output( "\t.short 0\n" ); /* ne_stack */ if (!entry_point) output( "\t.long 0\n" ); /* ne_csip */ else output( "\t.short .L__wine_%s_0-.L__wine_spec_code_segment,1\n", spec->c_name ); output( "\t.short 0,2\n" ); /* ne_sssp */ output( "\t.short 2\n" ); /* ne_cseg */ output( "\t.short 0\n" ); /* ne_cmod */ output( "\t.short 0\n" ); /* ne_cbnrestab */ output( "\t.short .L__wine_spec_ne_segtab-.L__wine_spec_ne_header\n" );/* ne_segtab */ output( "\t.short .L__wine_spec_ne_rsrctab-.L__wine_spec_ne_header\n" ); /* ne_rsrctab */ output( "\t.short .L__wine_spec_ne_restab-.L__wine_spec_ne_header\n" ); /* ne_restab */ output( "\t.short .L__wine_spec_ne_modtab-.L__wine_spec_ne_header\n" ); /* ne_modtab */ output( "\t.short .L__wine_spec_ne_imptab-.L__wine_spec_ne_header\n" ); /* ne_imptab */ output( "\t.long 0\n" ); /* ne_nrestab */ output( "\t.short 0\n" ); /* ne_cmovent */ output( "\t.short 0\n" ); /* ne_align */ output( "\t.short 0\n" ); /* ne_cres */ output( "\t.byte 0x02\n" ); /* ne_exetyp = NE_OSFLAGS_WINDOWS */ output( "\t.byte 0x08\n" ); /* ne_flagsothers = NE_AFLAGS_FASTLOAD */ output( "\t.short 0\n" ); /* ne_pretthunks */ output( "\t.short 0\n" ); /* ne_psegrefbytes */ output( "\t.short 0\n" ); /* ne_swaparea */ output( "\t.short 0\n" ); /* ne_expver */ /* segment table */ output( "\n.L__wine_spec_ne_segtab:\n" ); /* code segment entry */ output( "\t.short .L__wine_spec_code_segment-.L__wine_spec_dos_header\n" ); /* filepos */ output( "\t.short .L__wine_spec_code_segment_end-.L__wine_spec_code_segment\n" ); /* size */ output( "\t.short 0x0000\n" ); /* flags */ output( "\t.short .L__wine_spec_code_segment_end-.L__wine_spec_code_segment\n" ); /* minsize */ /* data segment entry */ output( "\t.short .L__wine_spec_data_segment-.L__wine_spec_dos_header\n" ); /* filepos */ output( "\t.short .L__wine_spec_data_segment_end-.L__wine_spec_data_segment\n" ); /* size */ output( "\t.short 0x0001\n" ); /* flags = NE_SEGFLAGS_DATA */ output( "\t.short .L__wine_spec_data_segment_end-.L__wine_spec_data_segment\n" ); /* minsize */ /* resource directory */ output_res16_directory( spec ); /* resident names table */ output( "\n\t.align %d\n", get_alignment(2) ); output( ".L__wine_spec_ne_restab:\n" ); output_resident_name( spec->dll_name, 0 ); for (i = 1; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (!odp || !odp->name[0]) continue; if (odp->flags & FLAG_EXPORT32) continue; output_resident_name( odp->name, i ); } output( "\t.byte 0\n" ); /* imported names table */ output( "\n\t.align %d\n", get_alignment(2) ); output( ".L__wine_spec_ne_modtab:\n" ); output( ".L__wine_spec_ne_imptab:\n" ); output( "\t.byte 0,0\n" ); /* entry table */ output( "\n.L__wine_spec_ne_enttab:\n" ); output_entry_table( spec ); output( ".L__wine_spec_ne_enttab_end:\n" ); /* code segment */ output( "\n\t.align %d\n", get_alignment(2) ); output( ".code16\n" ); output( ".L__wine_spec_code_segment:\n" ); for ( i = 0; i < nb_funcs; i++ ) { unsigned int arg_types[2]; int nop_words, pos, argsize = 0; if ( typelist[i]->type == TYPE_PASCAL ) argsize = get_function_argsize( typelist[i] ); /* build the arg types bit fields */ arg_types[0] = arg_types[1] = 0; for (j = pos = 0; j < typelist[i]->u.func.nb_args && pos < 20; j++, pos++) { int type = 0; switch (typelist[i]->u.func.args[j]) { case ARG_WORD: type = ARG16_WORD; break; case ARG_SWORD: type = ARG16_SWORD; break; case ARG_SEGPTR: type = ARG16_LONG; break; case ARG_SEGSTR: type = ARG16_SEGSTR; break; case ARG_LONG: type = ARG16_LONG; break; case ARG_PTR: type = ARG16_PTR; break; case ARG_STR: type = ARG16_STR; break; case ARG_WSTR: type = ARG16_PTR; break; case ARG_FLOAT: type = ARG16_LONG; break; case ARG_INT128: type = ARG16_PTR; break; case ARG_INT64: case ARG_DOUBLE: type = ARG16_LONG; arg_types[pos / 10] |= type << (3 * (pos % 10)); pos++; break; } if (pos < 20) arg_types[pos / 10] |= type << (3 * (pos % 10)); } if (typelist[i]->type == TYPE_VARARGS && pos < 20) arg_types[pos / 10] |= ARG16_VARARG << (3 * (pos % 10)); output( ".L__wine_spec_callfrom16_%s:\n", get_callfrom16_name(typelist[i]) ); output( "\tpushl $.L__wine_spec_call16_%s\n", get_relay_name(typelist[i]) ); output( "\tlcalll $0,$0\n" ); if (typelist[i]->flags & FLAG_REGISTER) { nop_words = 5; } else if (typelist[i]->flags & FLAG_RET16) { output( "\torw %%ax,%%ax\n" ); nop_words = 4; } else { output( "\tshld $16,%%eax,%%edx\n" ); output( "\torl %%eax,%%eax\n" ); nop_words = 1; } if (argsize) { output( "\tlretw $%u\n", argsize ); nop_words--; } else output( "\tlretw\n" ); output( "\tnop\n" ); /* so that the lretw is aligned */ if (nop_words) output( "\t%s\n", nop_sequence[nop_words-1] ); /* the movl is here so that the code contains only valid instructions, */ /* it's never actually executed, we only care about the arg_types[] values */ output( "\t.short 0x86c7\n" ); output( "\t.long 0x%08x,0x%08x\n", arg_types[0], arg_types[1] ); } for (i = 0; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (!odp || !is_function( odp )) continue; output( ".L__wine_%s_%u:\n", spec->c_name, i ); output( "\tpushw %%bp\n" ); if (odp->flags & FLAG_STKPROLOG) { output( "\tmovw %%sp, %%bp\n" ); output( "\tpushw $0x1234\n" ); output( "\tpopw %%bp\n" ); output( "\tpopw %%bp\n" ); output( "\tpushw %%bp\n" ); } output( "\tpushl $%s\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 ))); output( "\tcallw .L__wine_spec_callfrom16_%s\n", get_callfrom16_name( odp ) ); } output( ".L__wine_spec_code_segment_end:\n" ); /* data segment */ output( "\n.L__wine_spec_data_segment:\n" ); output( "\t.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n" ); /* instance data */ for (i = 0; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (!odp || odp->type != TYPE_VARIABLE) continue; output( ".L__wine_%s_%u:\n", spec->c_name, i ); output( "\t.long " ); for (j = 0; j < odp->u.var.n_values-1; j++) output( "0x%08x,", odp->u.var.values[j] ); output( "0x%08x\n", odp->u.var.values[j] ); } output( ".L__wine_spec_data_segment_end:\n" ); /* resource data */ if (spec->nb_resources) { output( "\n.L__wine_spec_resource_data:\n" ); output_res16_data( spec ); } output( "\t.byte 0\n" ); /* make sure the last symbol points to something */ /* relay functions */ nb_funcs = sort_func_list( typelist, nb_funcs, relay_type_compare ); if (nb_funcs) { output( "\n/* relay functions */\n\n" ); output( "\t.text\n" ); for ( i = 0; i < nb_funcs; i++ ) output_call16_function( typelist[i] ); output( "\t.data\n" ); output( "wine_ldt_copy_ptr:\n" ); output( "\t.long %s\n", asm_name("_imp__wine_ldt_copy") ); } output( ".code32\n" ); free( typelist ); } /******************************************************************* * output_spec16_file * * Output the complete data for a spec 16-bit file. */ void output_spec16_file( DLLSPEC *spec16 ) { DLLSPEC *spec32 = alloc_dll_spec(); resolve_imports( spec16 ); add_16bit_exports( spec32, spec16 ); needs_get_pc_thunk = 0; output_standard_file_header(); //output_module( spec32 ); output_module16( spec16 ); output_stubs( spec16 ); //output_exports( spec32 ); //output_imports( spec16 ); output( "\n\t%s\n", get_asm_string_section() ); output( "%s\n", asm_globl("__wine_spec_file_name") ); output( ".L__wine_spec_file_name:\n" ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), spec16->file_name ); if (1||is_undefined( "__wine_call_from_16" )) output_asm_relays16(); if (needs_get_pc_thunk) output_get_pc_thunk(); if (spec16->main_module) { output( "\n\t%s\n", get_asm_string_section() ); output( ".L__wine_spec_main_module:\n" ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), spec16->main_module ); } output_gnu_stack_note(); free_dll_spec( spec32 ); output("%s:/*?*/\n", asm_name("_end")); flush_output_buffer(); } /******************************************************************* * output_fake_module16 * * Create a fake 16-bit binary module. */ void output_fake_module16( DLLSPEC *spec ) { static const unsigned char code_segment[] = { 0x90, 0xc3 }; static const unsigned char data_segment[16] = { 0 }; static const char fakedll_signature[] = "Wine placeholder DLL"; const unsigned int cseg = 2; const unsigned int lfanew = (0x40 + sizeof(fakedll_signature) + 15) & ~15; const unsigned int segtab = lfanew + 0x40; unsigned int i, rsrctab, restab, namelen, modtab, imptab, enttab, cbenttab, codeseg, dataseg, rsrcdata; init_output_buffer(); rsrctab = lfanew; restab = segtab + 8 * cseg; if (spec->nb_resources) { output_bin_res16_directory( spec, 0 ); align_output( 2 ); rsrctab = restab; restab += output_buffer_pos; free( output_buffer ); init_output_buffer(); } namelen = strlen( spec->dll_name ); modtab = restab + ((namelen + 3) & ~1); imptab = modtab; enttab = modtab + 2; cbenttab = 1; codeseg = (enttab + cbenttab + 1) & ~1; dataseg = codeseg + sizeof(code_segment); rsrcdata = dataseg + sizeof(data_segment); init_output_buffer(); put_word( 0x5a4d ); /* e_magic */ put_word( 0x40 ); /* e_cblp */ put_word( 0x01 ); /* e_cp */ put_word( 0 ); /* e_crlc */ put_word( lfanew / 16 ); /* e_cparhdr */ put_word( 0x0000 ); /* e_minalloc */ put_word( 0xffff ); /* e_maxalloc */ put_word( 0x0000 ); /* e_ss */ put_word( 0x00b8 ); /* e_sp */ put_word( 0 ); /* e_csum */ put_word( 0 ); /* e_ip */ put_word( 0 ); /* e_cs */ put_word( lfanew ); /* e_lfarlc */ put_word( 0 ); /* e_ovno */ put_dword( 0 ); /* e_res */ put_dword( 0 ); put_word( 0 ); /* e_oemid */ put_word( 0 ); /* e_oeminfo */ put_dword( 0 ); /* e_res2 */ put_dword( 0 ); put_dword( 0 ); put_dword( 0 ); put_dword( 0 ); put_dword( lfanew ); put_data( fakedll_signature, sizeof(fakedll_signature) ); align_output( 16 ); put_word( 0x454e ); /* ne_magic */ put_byte( 0 ); /* ne_ver */ put_byte( 0 ); /* ne_rev */ put_word( enttab - lfanew ); /* ne_enttab */ put_word( cbenttab ); /* ne_cbenttab */ put_dword( 0 ); /* ne_crc */ put_word( NE_FFLAGS_SINGLEDATA | /* ne_flags */ ((spec->characteristics & IMAGE_FILE_DLL) ? NE_FFLAGS_LIBMODULE : 0) ); put_word( 2 ); /* ne_autodata */ put_word( spec->heap_size ); /* ne_heap */ put_word( 0 ); /* ne_stack */ put_word( 0 ); put_word( 0 ); /* ne_csip */ put_word( 0 ); put_word( 2 ); /* ne_sssp */ put_word( cseg ); /* ne_cseg */ put_word( 0 ); /* ne_cmod */ put_word( 0 ); /* ne_cbnrestab */ put_word( segtab - lfanew ); /* ne_segtab */ put_word( rsrctab - lfanew ); /* ne_rsrctab */ put_word( restab - lfanew ); /* ne_restab */ put_word( modtab - lfanew ); /* ne_modtab */ put_word( imptab - lfanew ); /* ne_imptab */ put_dword( 0 ); /* ne_nrestab */ put_word( 0 ); /* ne_cmovent */ put_word( 0 ); /* ne_align */ put_word( 0 ); /* ne_cres */ put_byte( 2 /*NE_OSFLAGS_WINDOWS*/ ); /* ne_exetyp */ put_byte( 8 /*NE_AFLAGS_FASTLOAD*/ ); /* ne_flagsothers */ put_word( 0 ); /* ne_pretthunks */ put_word( 0 ); /* ne_psegrefbytes */ put_word( 0 ); /* ne_swaparea */ put_word( 0 ); /* ne_expver */ /* segment table */ put_word( codeseg ); put_word( sizeof(code_segment) ); put_word( 0x0000 ); put_word( sizeof(code_segment) ); put_word( dataseg ); put_word( sizeof(data_segment) ); put_word( 0x0001 /* NE_SEGFLAGS_DATA */ ); put_word( sizeof(data_segment) ); /* resource directory */ if (spec->nb_resources) { output_bin_res16_directory( spec, rsrcdata ); align_output( 2 ); } /* resident names table */ put_byte( namelen ); for (i = 0; i < namelen; i++) put_byte( toupper(spec->dll_name[i]) ); put_byte( 0 ); align_output( 2 ); /* imported names table */ put_word( 0 ); /* entry table */ put_byte( 0 ); align_output( 2 ); /* code segment */ put_data( code_segment, sizeof(code_segment) ); /* data segment */ put_data( data_segment, sizeof(data_segment) ); /* resource data */ output_bin_res16_data( spec ); flush_output_buffer(); } ================================================ FILE: convspec/spec32.c ================================================ /* * 32-bit spec files * * Copyright 1993 Robert J. Amstadt * Copyright 1995 Martin von Loewis * Copyright 1995, 1996, 1997 Alexandre Julliard * Copyright 1997 Eric Youngdale * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include "build.h" #define IMAGE_FILE_MACHINE_UNKNOWN 0 #define IMAGE_FILE_MACHINE_I386 0x014c #define IMAGE_FILE_MACHINE_POWERPC 0x01f0 #define IMAGE_FILE_MACHINE_AMD64 0x8664 #define IMAGE_FILE_MACHINE_ARMNT 0x01C4 #define IMAGE_FILE_MACHINE_ARM64 0xaa64 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 int needs_get_pc_thunk = 0; /* check if entry point needs a relay thunk */ static inline int needs_relay( const ORDDEF *odp ) { /* skip nonexistent entry points */ if (!odp) return 0; /* skip non-functions */ switch (odp->type) { case TYPE_STDCALL: case TYPE_CDECL: case TYPE_THISCALL: break; case TYPE_STUB: if (odp->u.func.nb_args != -1) break; /* fall through */ default: return 0; } /* skip norelay and forward entry points */ if (odp->flags & (FLAG_NORELAY|FLAG_FORWARD)) return 0; return 1; } static int is_float_arg( const ORDDEF *odp, int arg ) { if (arg >= odp->u.func.nb_args) return 0; return (odp->u.func.args[arg] == ARG_FLOAT || odp->u.func.args[arg] == ARG_DOUBLE); } /* check if dll will output relay thunks */ static int has_relays( DLLSPEC *spec ) { int i; if (target_cpu != CPU_x86 && target_cpu != CPU_x86_64 && target_cpu != CPU_ARM && target_cpu != CPU_ARM64) return 0; for (i = spec->base; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (needs_relay( odp )) return 1; } return 0; } static int cmp_func_args( const void *p1, const void *p2 ) { const ORDDEF *odp1 = *(const ORDDEF **)p1; const ORDDEF *odp2 = *(const ORDDEF **)p2; return odp2->u.func.nb_args - odp1->u.func.nb_args; } static void get_arg_string( ORDDEF *odp, char str[MAX_ARGUMENTS + 1] ) { int i; for (i = 0; i < odp->u.func.nb_args; i++) { switch (odp->u.func.args[i]) { case ARG_STR: str[i] = 's'; break; case ARG_WSTR: str[i] = 'w'; break; case ARG_FLOAT: str[i] = 'f'; break; case ARG_DOUBLE: str[i] = 'd'; break; case ARG_INT64: case ARG_INT128: if (get_ptr_size() == 4) { str[i] = (odp->u.func.args[i] == ARG_INT64) ? 'j' : 'k'; break; } /* fall through */ case ARG_LONG: case ARG_PTR: default: str[i] = 'i'; break; } } if (target_cpu == CPU_x86 && odp->type == TYPE_THISCALL) str[0] = 't'; /* append return value */ if (get_ptr_size() == 4 && (odp->flags & FLAG_RET64)) strcpy( str + i, "J" ); else strcpy( str + i, "I" ); } /******************************************************************* * build_args_string */ static char *build_args_string( DLLSPEC *spec ) { int i, count = 0, len = 1; char *p, *buffer; char str[MAX_ARGUMENTS + 2]; ORDDEF **funcs; funcs = xmalloc( (spec->limit + 1 - spec->base) * sizeof(*funcs) ); for (i = spec->base; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (!needs_relay( odp )) continue; funcs[count++] = odp; len += odp->u.func.nb_args + 1; } /* sort functions by decreasing number of arguments */ qsort( funcs, count, sizeof(*funcs), cmp_func_args ); buffer = xmalloc( len ); buffer[0] = 0; /* build the arguments string, reusing substrings where possible */ for (i = 0; i < count; i++) { get_arg_string( funcs[i], str ); if (!(p = strstr( buffer, str ))) { p = buffer + strlen( buffer ); strcpy( p, str ); } funcs[i]->u.func.args_str_offset = p - buffer; } free( funcs ); return buffer; } /******************************************************************* * output_relay_debug * * Output entry points for relay debugging */ static void output_relay_debug( DLLSPEC *spec ) { int i; /* first the table of entry point offsets */ output( "\t%s\n", get_asm_rodata_section() ); output( "\t.align %d\n", get_alignment(4) ); output( ".L__wine_spec_relay_entry_point_offsets:\n" ); for (i = spec->base; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (needs_relay( odp )) output( "\t.long .L__wine_spec_relay_entry_point_%d-__wine_spec_relay_entry_points\n", i ); else output( "\t.long 0\n" ); } /* then the strings of argument types */ output( ".L__wine_spec_relay_args_string:\n" ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), build_args_string( spec )); /* then the relay thunks */ output( "\t.text\n" ); output( "__wine_spec_relay_entry_points:\n" ); output( "\tnop\n" ); /* to avoid 0 offset */ for (i = spec->base; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (!needs_relay( odp )) continue; output( "\t.align %d\n", get_alignment(4) ); output( ".L__wine_spec_relay_entry_point_%d:\n", i ); output_cfi( ".cfi_startproc" ); switch (target_cpu) { case CPU_x86: if (odp->type == TYPE_THISCALL) /* add the this pointer */ { output( "\tpopl %%eax\n" ); output( "\tpushl %%ecx\n" ); output( "\tpushl %%eax\n" ); } output( "\tpushl $%u\n", (odp->u.func.args_str_offset << 16) | (i - spec->base) ); output_cfi( ".cfi_adjust_cfa_offset 4" ); if (UsePIC) { output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") ); output( "1:\tleal .L__wine_spec_relay_descr-1b(%%eax),%%eax\n" ); needs_get_pc_thunk = 1; } else output( "\tmovl $.L__wine_spec_relay_descr,%%eax\n" ); output( "\tpushl %%eax\n" ); output_cfi( ".cfi_adjust_cfa_offset 4" ); output( "\tcall *4(%%eax)\n" ); output_cfi( ".cfi_adjust_cfa_offset -8" ); if (odp->type == TYPE_STDCALL || odp->type == TYPE_THISCALL) output( "\tret $%u\n", get_args_size( odp )); else output( "\tret\n" ); break; case CPU_ARM: { unsigned int mask, val, count = 0; int j, has_float = 0; if (strcmp( float_abi_option, "soft" )) for (j = 0; j < odp->u.func.nb_args && !has_float; j++) has_float = is_float_arg( odp, j ); val = (odp->u.func.args_str_offset << 16) | (i - spec->base); output( "\tpush {r0-r3}\n" ); output( "\tmov r2, SP\n"); if (has_float) output( "\tvpush {s0-s15}\n" ); output( "\tpush {LR}\n" ); output( "\tsub SP, #4\n"); for (mask = 0xff; mask; mask <<= 8) if (val & mask) output( "\t%s r1,#%u\n", count++ ? "add" : "mov", val & mask ); if (!count) output( "\tmov r1,#0\n" ); output( "\tldr r0, 2f\n"); output( "\tadd r0, PC\n"); output( "\tldr IP, [r0, #4]\n"); output( "1:\tblx IP\n"); output( "\tldr IP, [SP, #4]\n" ); output( "\tadd SP, #%u\n", 24 + (has_float ? 64 : 0) ); output( "\tbx IP\n"); output( "2:\t.long .L__wine_spec_relay_descr-1b\n" ); break; } case CPU_ARM64: switch (odp->u.func.nb_args) { default: case 8: case 7: output( "\tstp x6, x7, [SP,#-16]!\n" ); /* fall through */ case 6: case 5: output( "\tstp x4, x5, [SP,#-16]!\n" ); /* fall through */ case 4: case 3: output( "\tstp x2, x3, [SP,#-16]!\n" ); /* fall through */ case 2: case 1: output( "\tstp x0, x1, [SP,#-16]!\n" ); /* fall through */ case 0: break; } output( "\tmov x2, SP\n"); output( "\tstp x29, x30, [SP,#-16]!\n" ); output( "\tstp x8, x9, [SP,#-16]!\n" ); output( "\tmov w1, #%u\n", odp->u.func.args_str_offset << 16 ); if (i - spec->base) output( "\tadd w1, w1, #%u\n", i - spec->base ); output( "\tadrp x0, .L__wine_spec_relay_descr\n"); output( "\tadd x0, x0, #:lo12:.L__wine_spec_relay_descr\n"); output( "\tldr x3, [x0, #8]\n"); output( "\tblr x3\n"); output( "\tadd SP, SP, #16\n" ); output( "\tldp x29, x30, [SP], #16\n" ); if (odp->u.func.nb_args) output( "\tadd SP, SP, #%u\n", 8 * ((min(odp->u.func.nb_args, 8) + 1) & ~1) ); output( "\tret\n"); break; case CPU_x86_64: switch (odp->u.func.nb_args) { default: output( "\tmovq %%%s,32(%%rsp)\n", is_float_arg( odp, 3 ) ? "xmm3" : "r9" ); /* fall through */ case 3: output( "\tmovq %%%s,24(%%rsp)\n", is_float_arg( odp, 2 ) ? "xmm2" : "r8" ); /* fall through */ case 2: output( "\tmovq %%%s,16(%%rsp)\n", is_float_arg( odp, 1 ) ? "xmm1" : "rdx" ); /* fall through */ case 1: output( "\tmovq %%%s,8(%%rsp)\n", is_float_arg( odp, 0 ) ? "xmm0" : "rcx" ); /* fall through */ case 0: break; } output( "\tmovl $%u,%%edx\n", (odp->u.func.args_str_offset << 16) | (i - spec->base) ); output( "\tleaq .L__wine_spec_relay_descr(%%rip),%%rcx\n" ); output( "\tcallq *8(%%rcx)\n" ); output( "\tret\n" ); break; default: assert(0); } output_cfi( ".cfi_endproc" ); } } /******************************************************************* * output_exports * * Output the export table for a Win32 module. */ void output_exports( DLLSPEC *spec ) { int i, fwd_size = 0; int nr_exports = spec->base <= spec->limit ? spec->limit - spec->base + 1 : 0; if (!nr_exports) return; output( "\n/* export table */\n\n" ); output( "\t.data\n" ); output( "\t.align %d\n", get_alignment(4) ); output( ".L__wine_spec_exports:\n" ); /* export directory header */ output( "\t.long 0\n" ); /* Characteristics */ output( "\t.long 0\n" ); /* TimeDateStamp */ output( "\t.long 0\n" ); /* MajorVersion/MinorVersion */ output( "\t.long .L__wine_spec_exp_names-.L__wine_spec_rva_base\n" ); /* Name */ output( "\t.long %u\n", spec->base ); /* Base */ output( "\t.long %u\n", nr_exports ); /* NumberOfFunctions */ output( "\t.long %u\n", spec->nb_names ); /* NumberOfNames */ output( "\t.long .L__wine_spec_exports_funcs-.L__wine_spec_rva_base\n" ); /* AddressOfFunctions */ if (spec->nb_names) { output( "\t.long .L__wine_spec_exp_name_ptrs-.L__wine_spec_rva_base\n" ); /* AddressOfNames */ output( "\t.long .L__wine_spec_exp_ordinals-.L__wine_spec_rva_base\n" ); /* AddressOfNameOrdinals */ } else { output( "\t.long 0\n" ); /* AddressOfNames */ output( "\t.long 0\n" ); /* AddressOfNameOrdinals */ } /* output the function pointers */ output( "\n.L__wine_spec_exports_funcs:\n" ); for (i = spec->base; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (!odp) output( "\t%s 0\n", get_asm_ptr_keyword() ); else switch(odp->type) { case TYPE_EXTERN: case TYPE_STDCALL: case TYPE_VARARGS: case TYPE_CDECL: case TYPE_THISCALL: if (odp->flags & FLAG_FORWARD) { output( "\t%s .L__wine_spec_forwards+%u\n", get_asm_ptr_keyword(), fwd_size ); fwd_size += strlen(odp->link_name) + 1; } else if (odp->flags & FLAG_EXT_LINK) { output( "\t%s %s_%s\n", get_asm_ptr_keyword(), asm_name("__wine_spec_ext_link"), odp->link_name ); } else { 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) ); } break; case TYPE_STUB: output( "\t%s %s\n", get_asm_ptr_keyword(), asm_name( get_stub_name( odp, spec )) ); break; default: assert(0); } } if (spec->nb_names) { /* output the function name pointers */ int namepos = strlen(spec->file_name) + 1; output( "\n.L__wine_spec_exp_name_ptrs:\n" ); for (i = 0; i < spec->nb_names; i++) { output( "\t.long .L__wine_spec_exp_names+%u-.L__wine_spec_rva_base\n", namepos ); namepos += strlen(spec->names[i]->name) + 1; } /* output the function ordinals */ output( "\n.L__wine_spec_exp_ordinals:\n" ); for (i = 0; i < spec->nb_names; i++) { output( "\t.short %d\n", spec->names[i]->ordinal - spec->base ); } if (spec->nb_names % 2) { output( "\t.short 0\n" ); } } /* output the export name strings */ output( "\n.L__wine_spec_exp_names:\n" ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), spec->file_name ); for (i = 0; i < spec->nb_names; i++) output( "\t%s \"%s\"\n", get_asm_string_keyword(), spec->names[i]->name ); /* output forward strings */ if (fwd_size) { output( "\n.L__wine_spec_forwards:\n" ); for (i = spec->base; i <= spec->limit; i++) { ORDDEF *odp = spec->ordinals[i]; if (odp && (odp->flags & FLAG_FORWARD)) output( "\t%s \"%s\"\n", get_asm_string_keyword(), odp->link_name ); } } output( "\t.align %d\n", get_alignment(get_ptr_size()) ); output( ".L__wine_spec_exports_end:\n" ); /* output relays */ if (!has_relays( spec )) { output( "\t%s 0\n", get_asm_ptr_keyword() ); return; } output( ".L__wine_spec_relay_descr:\n" ); output( "\t%s 0xdeb90002\n", get_asm_ptr_keyword() ); /* magic */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* relay func */ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* private data */ output( "\t%s __wine_spec_relay_entry_points\n", get_asm_ptr_keyword() ); output( "\t%s .L__wine_spec_relay_entry_point_offsets\n", get_asm_ptr_keyword() ); output( "\t%s .L__wine_spec_relay_args_string\n", get_asm_ptr_keyword() ); output_relay_debug( spec ); } /******************************************************************* * output_asm_constructor * * Output code for calling a dll constructor. */ static void output_asm_constructor( const char *constructor ) { if (target_platform == PLATFORM_APPLE) { /* Mach-O doesn't have an init section */ output( "\n\t.mod_init_func\n" ); output( "\t.align %d\n", get_alignment(get_ptr_size()) ); output( "\t%s %s\n", get_asm_ptr_keyword(), asm_name(constructor) ); } else { switch(target_cpu) { case CPU_x86: case CPU_x86_64: output( "\n\t.section \".init\",\"ax\"\n" ); output( "\tcall %s\n", asm_name(constructor) ); break; case CPU_ARM: output( "\n\t.section \".text\",\"ax\"\n" ); output( "\tblx %s\n", asm_name(constructor) ); break; case CPU_ARM64: case CPU_POWERPC: output( "\n\t.section \".init\",\"ax\"\n" ); output( "\tbl %s\n", asm_name(constructor) ); break; } } } /******************************************************************* * output_module * * Output the module data. */ void output_module( DLLSPEC *spec ) { int machine = 0; unsigned int page_size = get_page_size(); /* Reserve some space for the PE header */ switch (target_platform) { case PLATFORM_APPLE: output( "\t.text\n" ); output( "\t.align %d\n", get_alignment(page_size) ); output( "__wine_spec_pe_header:\n" ); output( "\t.space 65536\n" ); break; case PLATFORM_SOLARIS: output( "\n\t.section \".text\",\"ax\"\n" ); output( "__wine_spec_pe_header:\n" ); output( "\t.skip %u\n", 65536 + page_size ); break; default: switch(target_cpu) { case CPU_x86: case CPU_x86_64: output( "\n\t.section \".init\",\"ax\"\n" ); output( "\tjmp 1f\n" ); break; case CPU_ARM: output( "\n\t.section \".text\",\"ax\"\n" ); output( "\tb 1f\n" ); break; case CPU_ARM64: case CPU_POWERPC: output( "\n\t.section \".init\",\"ax\"\n" ); output( "\tb 1f\n" ); break; } output( "__wine_spec_pe_header:\n" ); output( "\t.skip %u\n", 65536 + page_size ); output( "1:\n" ); break; } /* Output the NT header */ output( "\n\t.data\n" ); output( "\t.align %d\n", get_alignment(get_ptr_size()) ); output( "%s\n", asm_globl("__wine_spec_nt_header") ); output( ".L__wine_spec_rva_base:\n" ); output( "\t.long 0x4550\n" ); /* Signature */ switch(target_cpu) { case CPU_x86: machine = IMAGE_FILE_MACHINE_I386; break; case CPU_x86_64: machine = IMAGE_FILE_MACHINE_AMD64; break; case CPU_POWERPC: machine = IMAGE_FILE_MACHINE_POWERPC; break; case CPU_ARM: machine = IMAGE_FILE_MACHINE_ARMNT; break; case CPU_ARM64: machine = IMAGE_FILE_MACHINE_ARM64; break; } output( "\t.short 0x%04x\n", /* Machine */ machine ); output( "\t.short 0\n" ); /* NumberOfSections */ output( "\t.long 0\n" ); /* TimeDateStamp */ output( "\t.long 0\n" ); /* PointerToSymbolTable */ output( "\t.long 0\n" ); /* NumberOfSymbols */ output( "\t.short %d\n", /* SizeOfOptionalHeader */ get_ptr_size() == 8 ? IMAGE_SIZEOF_NT_OPTIONAL64_HEADER : IMAGE_SIZEOF_NT_OPTIONAL32_HEADER ); output( "\t.short 0x%04x\n", /* Characteristics */ spec->characteristics ); output( "\t.short 0x%04x\n", /* Magic */ get_ptr_size() == 8 ? IMAGE_NT_OPTIONAL_HDR64_MAGIC : IMAGE_NT_OPTIONAL_HDR32_MAGIC ); output( "\t.byte 7\n" ); /* MajorLinkerVersion */ output( "\t.byte 10\n" ); /* MinorLinkerVersion */ output( "\t.long 0\n" ); /* SizeOfCode */ output( "\t.long 0\n" ); /* SizeOfInitializedData */ output( "\t.long 0\n" ); /* SizeOfUninitializedData */ /* note: we expand the AddressOfEntryPoint field on 64-bit by overwriting the BaseOfCode field */ output( "\t%s %s\n", /* AddressOfEntryPoint */ get_asm_ptr_keyword(), spec->init_func ? asm_name(spec->init_func) : "0" ); if (get_ptr_size() == 4) { output( "\t.long 0\n" ); /* BaseOfCode */ output( "\t.long 0\n" ); /* BaseOfData */ } output( "\t%s __wine_spec_pe_header\n", /* ImageBase */ get_asm_ptr_keyword() ); output( "\t.long %u\n", page_size ); /* SectionAlignment */ output( "\t.long %u\n", page_size ); /* FileAlignment */ output( "\t.short 1,0\n" ); /* Major/MinorOperatingSystemVersion */ output( "\t.short 0,0\n" ); /* Major/MinorImageVersion */ output( "\t.short %u,%u\n", /* Major/MinorSubsystemVersion */ spec->subsystem_major, spec->subsystem_minor ); output( "\t.long 0\n" ); /* Win32VersionValue */ output( "\t.long %s-.L__wine_spec_rva_base\n", /* SizeOfImage */ asm_name("_end") ); output( "\t.long %u\n", page_size ); /* SizeOfHeaders */ output( "\t.long 0\n" ); /* CheckSum */ output( "\t.short 0x%04x\n", /* Subsystem */ spec->subsystem ); output( "\t.short 0x%04x\n", /* DllCharacteristics */ spec->dll_characteristics ); output( "\t%s %u,%u\n", /* SizeOfStackReserve/Commit */ get_asm_ptr_keyword(), (spec->stack_size ? spec->stack_size : 1024) * 1024, page_size ); output( "\t%s %u,%u\n", /* SizeOfHeapReserve/Commit */ get_asm_ptr_keyword(), (spec->heap_size ? spec->heap_size : 1024) * 1024, page_size ); output( "\t.long 0\n" ); /* LoaderFlags */ output( "\t.long 16\n" ); /* NumberOfRvaAndSizes */ if (spec->base <= spec->limit) /* DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT] */ output( "\t.long .L__wine_spec_exports-.L__wine_spec_rva_base," ".L__wine_spec_exports_end-.L__wine_spec_exports\n" ); else output( "\t.long 0,0\n" ); if (has_imports()) /* DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] */ output( "\t.long .L__wine_spec_imports-.L__wine_spec_rva_base," ".L__wine_spec_imports_end-.L__wine_spec_imports\n" ); else output( "\t.long 0,0\n" ); if (spec->nb_resources) /* DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE] */ output( "\t.long .L__wine_spec_resources-.L__wine_spec_rva_base," ".L__wine_spec_resources_end-.L__wine_spec_resources\n" ); else output( "\t.long 0,0\n" ); output( "\t.long 0,0\n" ); /* DataDirectory[3] */ output( "\t.long 0,0\n" ); /* DataDirectory[4] */ output( "\t.long 0,0\n" ); /* DataDirectory[5] */ output( "\t.long 0,0\n" ); /* DataDirectory[6] */ output( "\t.long 0,0\n" ); /* DataDirectory[7] */ output( "\t.long 0,0\n" ); /* DataDirectory[8] */ output( "\t.long 0,0\n" ); /* DataDirectory[9] */ output( "\t.long 0,0\n" ); /* DataDirectory[10] */ output( "\t.long 0,0\n" ); /* DataDirectory[11] */ output( "\t.long 0,0\n" ); /* DataDirectory[12] */ output( "\t.long 0,0\n" ); /* DataDirectory[13] */ output( "\t.long 0,0\n" ); /* DataDirectory[14] */ output( "\t.long 0,0\n" ); /* DataDirectory[15] */ output( "\n\t%s\n", get_asm_string_section() ); output( "%s\n", asm_globl("__wine_spec_file_name") ); output( ".L__wine_spec_file_name:\n" ); output( "\t%s \"%s\"\n", get_asm_string_keyword(), spec->file_name ); if (target_platform == PLATFORM_APPLE) output( "\t.lcomm %s,4\n", asm_name("_end") ); output_asm_constructor( "__wine_spec_init_ctor" ); } /******************************************************************* * BuildSpec32File * * Build a Win32 C file from a spec file. */ void BuildSpec32File( DLLSPEC *spec ) { needs_get_pc_thunk = 0; resolve_imports( spec ); output_standard_file_header(); output_module( spec ); output_stubs( spec ); output_exports( spec ); output_imports( spec ); if (needs_get_pc_thunk) output_get_pc_thunk(); output_resources( spec ); output_gnu_stack_note(); } /******************************************************************* * output_fake_module * * Build a fake binary module from a spec file. */ void output_fake_module( DLLSPEC *spec ) { static const unsigned char dll_code_section[] = { 0x31, 0xc0, /* xor %eax,%eax */ 0xc2, 0x0c, 0x00 }; /* ret $12 */ static const unsigned char exe_code_section[] = { 0xb8, 0x01, 0x00, 0x00, 0x00, /* movl $1,%eax */ 0xc2, 0x04, 0x00 }; /* ret $4 */ static const char fakedll_signature[] = "Wine placeholder DLL"; const unsigned int page_size = get_page_size(); const unsigned int section_align = page_size; const unsigned int file_align = 0x200; const unsigned int reloc_size = 8; const unsigned int lfanew = (0x40 + sizeof(fakedll_signature) + 15) & ~15; const unsigned int nb_sections = 2 + (spec->nb_resources != 0); const unsigned int text_size = (spec->characteristics & IMAGE_FILE_DLL) ? sizeof(dll_code_section) : sizeof(exe_code_section); unsigned char *resources; unsigned int resources_size; unsigned int image_size = 3 * section_align; resolve_imports( spec ); output_bin_resources( spec, 3 * section_align ); resources = output_buffer; resources_size = output_buffer_pos; if (resources_size) image_size += (resources_size + section_align - 1) & ~(section_align - 1); init_output_buffer(); put_word( 0x5a4d ); /* e_magic */ put_word( 0x40 ); /* e_cblp */ put_word( 0x01 ); /* e_cp */ put_word( 0 ); /* e_crlc */ put_word( lfanew / 16 ); /* e_cparhdr */ put_word( 0x0000 ); /* e_minalloc */ put_word( 0xffff ); /* e_maxalloc */ put_word( 0x0000 ); /* e_ss */ put_word( 0x00b8 ); /* e_sp */ put_word( 0 ); /* e_csum */ put_word( 0 ); /* e_ip */ put_word( 0 ); /* e_cs */ put_word( lfanew ); /* e_lfarlc */ put_word( 0 ); /* e_ovno */ put_dword( 0 ); /* e_res */ put_dword( 0 ); put_word( 0 ); /* e_oemid */ put_word( 0 ); /* e_oeminfo */ put_dword( 0 ); /* e_res2 */ put_dword( 0 ); put_dword( 0 ); put_dword( 0 ); put_dword( 0 ); put_dword( lfanew ); put_data( fakedll_signature, sizeof(fakedll_signature) ); align_output( 16 ); put_dword( 0x4550 ); /* Signature */ switch(target_cpu) { case CPU_x86: put_word( IMAGE_FILE_MACHINE_I386 ); break; case CPU_x86_64: put_word( IMAGE_FILE_MACHINE_AMD64 ); break; case CPU_POWERPC: put_word( IMAGE_FILE_MACHINE_POWERPC ); break; case CPU_ARM: put_word( IMAGE_FILE_MACHINE_ARMNT ); break; case CPU_ARM64: put_word( IMAGE_FILE_MACHINE_ARM64 ); break; } put_word( nb_sections ); /* NumberOfSections */ put_dword( 0 ); /* TimeDateStamp */ put_dword( 0 ); /* PointerToSymbolTable */ put_dword( 0 ); /* NumberOfSymbols */ put_word( get_ptr_size() == 8 ? IMAGE_SIZEOF_NT_OPTIONAL64_HEADER : IMAGE_SIZEOF_NT_OPTIONAL32_HEADER ); /* SizeOfOptionalHeader */ put_word( spec->characteristics ); /* Characteristics */ put_word( get_ptr_size() == 8 ? IMAGE_NT_OPTIONAL_HDR64_MAGIC : IMAGE_NT_OPTIONAL_HDR32_MAGIC ); /* Magic */ put_byte( 7 ); /* MajorLinkerVersion */ put_byte( 10 ); /* MinorLinkerVersion */ put_dword( text_size ); /* SizeOfCode */ put_dword( 0 ); /* SizeOfInitializedData */ put_dword( 0 ); /* SizeOfUninitializedData */ put_dword( section_align ); /* AddressOfEntryPoint */ put_dword( section_align ); /* BaseOfCode */ if (get_ptr_size() == 4) put_dword( 0 ); /* BaseOfData */ put_pword( 0x10000000 ); /* ImageBase */ put_dword( section_align ); /* SectionAlignment */ put_dword( file_align ); /* FileAlignment */ put_word( 1 ); /* MajorOperatingSystemVersion */ put_word( 0 ); /* MinorOperatingSystemVersion */ put_word( 0 ); /* MajorImageVersion */ put_word( 0 ); /* MinorImageVersion */ put_word( spec->subsystem_major ); /* MajorSubsystemVersion */ put_word( spec->subsystem_minor ); /* MinorSubsystemVersion */ put_dword( 0 ); /* Win32VersionValue */ put_dword( image_size ); /* SizeOfImage */ put_dword( file_align ); /* SizeOfHeaders */ put_dword( 0 ); /* CheckSum */ put_word( spec->subsystem ); /* Subsystem */ put_word( spec->dll_characteristics ); /* DllCharacteristics */ put_pword( (spec->stack_size ? spec->stack_size : 1024) * 1024 ); /* SizeOfStackReserve */ put_pword( page_size ); /* SizeOfStackCommit */ put_pword( (spec->heap_size ? spec->heap_size : 1024) * 1024 ); /* SizeOfHeapReserve */ put_pword( page_size ); /* SizeOfHeapCommit */ put_dword( 0 ); /* LoaderFlags */ put_dword( 16 ); /* NumberOfRvaAndSizes */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] */ if (resources_size) /* DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE] */ { put_dword( 3 * section_align ); put_dword( resources_size ); } else { put_dword( 0 ); put_dword( 0 ); } put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY] */ put_dword( 2 * section_align ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC] */ put_dword( reloc_size ); put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_COPYRIGHT] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_GLOBALPTR] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR] */ put_dword( 0 ); put_dword( 0 ); /* DataDirectory[15] */ /* .text section */ put_data( ".text\0\0", 8 ); /* Name */ put_dword( section_align ); /* VirtualSize */ put_dword( section_align ); /* VirtualAddress */ put_dword( text_size ); /* SizeOfRawData */ put_dword( file_align ); /* PointerToRawData */ put_dword( 0 ); /* PointerToRelocations */ put_dword( 0 ); /* PointerToLinenumbers */ put_word( 0 ); /* NumberOfRelocations */ put_word( 0 ); /* NumberOfLinenumbers */ put_dword( 0x60000020 /* CNT_CODE|MEM_EXECUTE|MEM_READ */ ); /* Characteristics */ /* .reloc section */ put_data( ".reloc\0", 8 ); /* Name */ put_dword( section_align ); /* VirtualSize */ put_dword( 2 * section_align );/* VirtualAddress */ put_dword( reloc_size ); /* SizeOfRawData */ put_dword( 2 * file_align ); /* PointerToRawData */ put_dword( 0 ); /* PointerToRelocations */ put_dword( 0 ); /* PointerToLinenumbers */ put_word( 0 ); /* NumberOfRelocations */ put_word( 0 ); /* NumberOfLinenumbers */ put_dword( 0x42000040 /* CNT_INITIALIZED_DATA|MEM_DISCARDABLE|MEM_READ */ ); /* Characteristics */ /* .rsrc section */ if (resources_size) { put_data( ".rsrc\0\0", 8 ); /* Name */ put_dword( (resources_size + section_align - 1) & ~(section_align - 1) ); /* VirtualSize */ put_dword( 3 * section_align );/* VirtualAddress */ put_dword( resources_size ); /* SizeOfRawData */ put_dword( 3 * file_align ); /* PointerToRawData */ put_dword( 0 ); /* PointerToRelocations */ put_dword( 0 ); /* PointerToLinenumbers */ put_word( 0 ); /* NumberOfRelocations */ put_word( 0 ); /* NumberOfLinenumbers */ put_dword( 0x40000040 /* CNT_INITIALIZED_DATA|MEM_READ */ ); /* Characteristics */ } /* .text contents */ align_output( file_align ); if (spec->characteristics & IMAGE_FILE_DLL) put_data( dll_code_section, sizeof(dll_code_section) ); else put_data( exe_code_section, sizeof(exe_code_section) ); /* .reloc contents */ align_output( file_align ); put_dword( 0 ); /* VirtualAddress */ put_dword( 0 ); /* SizeOfBlock */ /* .rsrc contents */ if (resources_size) { align_output( file_align ); put_data( resources, resources_size ); } flush_output_buffer(); } /******************************************************************* * output_def_file * * Build a Win32 def file from a spec file. */ void output_def_file( DLLSPEC *spec, int include_private ) { DLLSPEC *spec32 = NULL; const char *name; int i, total; if (spec->type == SPEC_WIN16) { spec32 = alloc_dll_spec(); add_16bit_exports( spec32, spec ); spec = spec32; } if (spec_file_name) output( "; File generated automatically from %s; do not edit!\n\n", spec_file_name ); else output( "; File generated automatically; do not edit!\n\n" ); output( "LIBRARY %s\n\n", spec->file_name); output( "EXPORTS\n"); #ifdef WINEBUILD_MSVC kill_at = 1; #endif /* Output the exports and relay entry points */ for (i = total = 0; i < spec->nb_entry_points; i++) { const ORDDEF *odp = &spec->entry_points[i]; int is_data = 0; if (odp->name) name = odp->name; else if (odp->export_name) name = odp->export_name; else continue; if (!(odp->flags & FLAG_PRIVATE)) total++; else if (!include_private) continue; if (odp->type == TYPE_STUB) continue; #ifndef WINEBUILD_MSVC output( " %s", name ); #else /* FIXME: workaround */ if (name && *name == '_') { output(" %s", name); } else { output(" %s", name); } #endif switch(odp->type) { case TYPE_EXTERN: is_data = 1; /* fall through */ case TYPE_VARARGS: case TYPE_CDECL: case TYPE_THISCALL: /* try to reduce output */ #ifndef WINEBUILD_MSVC #if 0 if(strcmp(name, odp->link_name) || (odp->flags & FLAG_FORWARD)) output( "=%s", odp->link_name ); #endif #endif break; case TYPE_STDCALL: { int at_param = get_args_size( odp ); if (!kill_at && target_cpu == CPU_x86) output( "@%d", at_param ); if (odp->flags & FLAG_FORWARD) { output( "=%s", odp->link_name ); } else if (strcmp(name, odp->link_name)) /* try to reduce output */ { output( "=%s", odp->link_name ); if (!kill_at && target_cpu == CPU_x86) output( "@%d", at_param ); } else { #ifndef WINEBUILD_MSVC /* add-stdcall-alias */ if (!odp->name || (odp->flags & FLAG_ORDINAL)) output( " NONAME" ); if (is_data) output( " DATA" ); /* PRIVATE */ #ifndef WINEBUILD_MSVC if (odp->flags & FLAG_PRIVATE) output( " PRIVATE" ); #endif output( "\n" ); output( " %s=%s", name, name ); if (!kill_at && target_cpu == CPU_x86) output( "@%d", at_param ); #endif } break; } default: assert(0); } output( " @%d", odp->ordinal ); if (!odp->name || (odp->flags & FLAG_ORDINAL)) output( " NONAME" ); if (is_data) output( " DATA" ); /* PRIVATE */ #ifndef WINEBUILD_MSVC if (odp->flags & FLAG_PRIVATE) output( " PRIVATE" ); #endif output( "\n" ); } if (!total) warning( "%s: Import library doesn't export anything\n", spec->file_name ); if (spec32) free_dll_spec( spec32 ); } ================================================ FILE: convspec/utils.c ================================================ /* * Small utility functions for winebuild * * Copyright 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_SYS_MMAN_H #include #endif #include "build.h" #if defined(_WIN32) && !defined(__CYGWIN__) # define PATH_SEPARATOR ';' #else # define PATH_SEPARATOR ':' #endif static struct strarray tmp_files; static struct strarray empty_strarray; static const struct { const char *name; enum target_cpu cpu; } cpu_names[] = { { "i386", CPU_x86 }, { "i486", CPU_x86 }, { "i586", CPU_x86 }, { "i686", CPU_x86 }, { "i786", CPU_x86 }, { "amd64", CPU_x86_64 }, { "x86_64", CPU_x86_64 }, { "powerpc", CPU_POWERPC }, { "arm", CPU_ARM }, { "armv5", CPU_ARM }, { "armv6", CPU_ARM }, { "armv7", CPU_ARM }, { "arm64", CPU_ARM64 }, { "aarch64", CPU_ARM64 }, }; /* atexit handler to clean tmp files */ void cleanup_tmp_files(void) { unsigned int i; for (i = 0; i < tmp_files.count; i++) if (tmp_files.str[i]) unlink( tmp_files.str[i] ); } void *xmalloc (size_t size) { void *res; res = malloc (size ? size : 1); if (res == NULL) { fprintf (stderr, "Virtual memory exhausted.\n"); exit (1); } return res; } void *xrealloc (void *ptr, size_t size) { void *res = realloc (ptr, size); if (size && res == NULL) { fprintf (stderr, "Virtual memory exhausted.\n"); exit (1); } return res; } char *xstrdup( const char *str ) { char *res = strdup( str ); if (!res) { fprintf (stderr, "Virtual memory exhausted.\n"); exit (1); } return res; } char *strupper(char *s) { char *p; for (p = s; *p; p++) *p = toupper(*p); return s; } int strendswith(const char* str, const char* end) { int l = strlen(str); int m = strlen(end); return l >= m && strcmp(str + l - m, end) == 0; } char *strmake( const char* fmt, ... ) { int n; size_t size = 100; va_list ap; for (;;) { char *p = xmalloc( size ); va_start( ap, fmt ); n = vsnprintf( p, size, fmt, ap ); va_end( ap ); if (n == -1) size *= 2; else if ((size_t)n >= size) size = n + 1; else return p; free( p ); } } static struct strarray strarray_copy( struct strarray src ) { struct strarray array; array.count = src.count; array.max = src.max; array.str = xmalloc( array.max * sizeof(*array.str) ); memcpy( array.str, src.str, array.count * sizeof(*array.str) ); return array; } static void strarray_add_one( struct strarray *array, const char *str ) { if (array->count == array->max) { array->max *= 2; if (array->max < 16) array->max = 16; array->str = xrealloc( array->str, array->max * sizeof(*array->str) ); } array->str[array->count++] = str; } void strarray_add( struct strarray *array, ... ) { va_list valist; const char *str; va_start( valist, array ); while ((str = va_arg( valist, const char *))) strarray_add_one( array, str ); va_end( valist ); } void strarray_addv( struct strarray *array, char * const *argv ) { while (*argv) strarray_add_one( array, *argv++ ); } void strarray_addall( struct strarray *array, struct strarray args ) { unsigned int i; for (i = 0; i < args.count; i++) strarray_add_one( array, args.str[i] ); } struct strarray strarray_fromstring( const char *str, const char *delim ) { const char *tok; struct strarray array = empty_strarray; char *buf = xstrdup( str ); for (tok = strtok( buf, delim ); tok; tok = strtok( NULL, delim )) strarray_add_one( &array, strdup( tok )); free( buf ); return array; } void fatal_error( const char *msg, ... ) { va_list valist; va_start( valist, msg ); if (input_file_name) { fprintf( stderr, "%s:", input_file_name ); if (current_line) fprintf( stderr, "%d:", current_line ); fputc( ' ', stderr ); } else fprintf( stderr, "winebuild: " ); vfprintf( stderr, msg, valist ); va_end( valist ); exit(1); } void fatal_perror( const char *msg, ... ) { va_list valist; va_start( valist, msg ); if (input_file_name) { fprintf( stderr, "%s:", input_file_name ); if (current_line) fprintf( stderr, "%d:", current_line ); fputc( ' ', stderr ); } vfprintf( stderr, msg, valist ); perror( " " ); va_end( valist ); exit(1); } void error( const char *msg, ... ) { va_list valist; va_start( valist, msg ); if (input_file_name) { fprintf( stderr, "%s:", input_file_name ); if (current_line) fprintf( stderr, "%d:", current_line ); fputc( ' ', stderr ); } vfprintf( stderr, msg, valist ); va_end( valist ); nb_errors++; } void warning( const char *msg, ... ) { va_list valist; if (!display_warnings) return; va_start( valist, msg ); if (input_file_name) { fprintf( stderr, "%s:", input_file_name ); if (current_line) fprintf( stderr, "%d:", current_line ); fputc( ' ', stderr ); } fprintf( stderr, "warning: " ); vfprintf( stderr, msg, valist ); va_end( valist ); } int output( const char *format, ... ) { int ret; va_list valist; va_start( valist, format ); ret = vfprintf( output_file, format, valist ); va_end( valist ); if (ret < 0) fatal_perror( "Output error" ); return ret; } void spawn( struct strarray args ) { unsigned int i; int status; strarray_add_one( &args, NULL ); if (verbose) for (i = 0; args.str[i]; i++) fprintf( stderr, "%s%c", args.str[i], args.str[i+1] ? ' ' : '\n' ); if ((status = _spawnvp( _P_WAIT, args.str[0], args.str ))) { if (status > 0) fatal_error( "%s failed with status %u\n", args.str[0], status ); else fatal_perror( "winebuild" ); exit( 1 ); } } /* find a build tool in the path, trying the various names */ struct strarray find_tool( const char *name, const char * const *names ) { static char **dirs; static unsigned int count, maxlen; char *p, *file; const char *alt_names[2]; unsigned int i, len; struct stat st; if (!dirs) { char *path; /* split the path in directories */ if (!getenv( "PATH" )) fatal_error( "PATH not set, cannot find required tools\n" ); path = xstrdup( getenv( "PATH" )); for (p = path, count = 2; *p; p++) if (*p == PATH_SEPARATOR) count++; dirs = xmalloc( count * sizeof(*dirs) ); count = 0; dirs[count++] = p = path; while (*p) { while (*p && *p != PATH_SEPARATOR) p++; if (!*p) break; *p++ = 0; dirs[count++] = p; } for (i = 0; i < count; i++) maxlen = max( maxlen, strlen(dirs[i])+2 ); } if (!names) { alt_names[0] = name; alt_names[1] = NULL; names = alt_names; } while (*names) { len = strlen(*names) + sizeof(EXEEXT) + 1; if (target_alias) len += strlen(target_alias) + 1; file = xmalloc( maxlen + len ); for (i = 0; i < count; i++) { strcpy( file, dirs[i] ); p = file + strlen(file); if (p == file) *p++ = '.'; if (p[-1] != '/') *p++ = '/'; if (target_alias) { strcpy( p, target_alias ); p += strlen(p); *p++ = '-'; } strcpy( p, *names ); strcat( p, EXEEXT ); if (!stat( file, &st ) && S_ISREG(st.st_mode) && (st.st_mode & 0111)) { struct strarray ret = empty_strarray; strarray_add_one( &ret, file ); return ret; } } free( file ); names++; } fatal_error( "cannot find the '%s' tool\n", name ); } struct strarray get_as_command(void) { struct strarray args; if (cc_command.count) { args = strarray_copy( cc_command ); strarray_add( &args, "-xassembler", "-c", NULL ); if (force_pointer_size) strarray_add_one( &args, (force_pointer_size == 8) ? "-m64" : "-m32" ); if (cpu_option) strarray_add_one( &args, strmake("-mcpu=%s", cpu_option) ); if (arch_option) strarray_add_one( &args, strmake("-march=%s", arch_option) ); return args; } if (!as_command.count) { static const char * const commands[] = { "gas", "as", NULL }; as_command = find_tool( "as", commands ); } args = strarray_copy( as_command ); if (force_pointer_size) { switch (target_platform) { case PLATFORM_APPLE: strarray_add( &args, "-arch", (force_pointer_size == 8) ? "x86_64" : "i386", NULL ); break; default: switch(target_cpu) { case CPU_POWERPC: strarray_add_one( &args, (force_pointer_size == 8) ? "-a64" : "-a32" ); break; default: strarray_add_one( &args, (force_pointer_size == 8) ? "--64" : "--32" ); break; } break; } } if (cpu_option) strarray_add_one( &args, strmake("-mcpu=%s", cpu_option) ); return args; } struct strarray get_ld_command(void) { struct strarray args; if (!ld_command.count) { static const char * const commands[] = { "ld", "gld", NULL }; ld_command = find_tool( "ld", commands ); } args = strarray_copy( ld_command ); if (force_pointer_size) { switch (target_platform) { case PLATFORM_APPLE: strarray_add( &args, "-arch", (force_pointer_size == 8) ? "x86_64" : "i386", NULL ); break; case PLATFORM_FREEBSD: strarray_add( &args, "-m", (force_pointer_size == 8) ? "elf_x86_64_fbsd" : "elf_i386_fbsd", NULL ); break; default: switch(target_cpu) { case CPU_POWERPC: strarray_add( &args, "-m", (force_pointer_size == 8) ? "elf64ppc" : "elf32ppc", NULL ); break; default: strarray_add( &args, "-m", (force_pointer_size == 8) ? "elf_x86_64" : "elf_i386", NULL ); break; } break; } } return args; } const char *get_nm_command(void) { if (!nm_command.count) { static const char * const commands[] = { "nm", "gnm", NULL }; nm_command = find_tool( "nm", commands ); } if (nm_command.count > 1) fatal_error( "multiple arguments in nm command not supported yet\n" ); return nm_command.str[0]; } /* get a name for a temp file, automatically cleaned up on exit */ char *get_temp_file_name( const char *prefix, const char *suffix ) { char *name; const char *ext, *basename; int fd; if (!prefix || !prefix[0]) prefix = "winebuild"; if (!suffix) suffix = ""; if ((basename = strrchr( prefix, '/' ))) basename++; else basename = prefix; if (!(ext = strchr( basename, '.' ))) ext = prefix + strlen(prefix); name = xmalloc( sizeof("/tmp/") + (ext - prefix) + sizeof(".XXXXXX") + strlen(suffix) ); memcpy( name, prefix, ext - prefix ); strcpy( name + (ext - prefix), ".XXXXXX" ); strcat( name, suffix ); if ((fd = mkstemps( name, strlen(suffix) )) == -1) { strcpy( name, "/tmp/" ); memcpy( name + 5, basename, ext - basename ); strcpy( name + 5 + (ext - basename), ".XXXXXX" ); strcat( name, suffix ); if ((fd = mkstemps( name, strlen(suffix) )) == -1) fatal_error( "could not generate a temp file\n" ); } close( fd ); strarray_add_one( &tmp_files, name ); return name; } /******************************************************************* * buffer management * * Function for reading from/writing to a memory buffer. */ int byte_swapped = 0; const char *input_buffer_filename; const unsigned char *input_buffer; size_t input_buffer_pos; size_t input_buffer_size; unsigned char *output_buffer; size_t output_buffer_pos; size_t output_buffer_size; static void check_output_buffer_space( size_t size ) { if (output_buffer_pos + size >= output_buffer_size) { output_buffer_size = max( output_buffer_size * 2, output_buffer_pos + size ); output_buffer = xrealloc( output_buffer, output_buffer_size ); } } void init_input_buffer( const char *file ) { int fd; struct stat st; if ((fd = open( file, O_RDONLY | O_BINARY )) == -1) fatal_perror( "Cannot open %s", file ); if ((fstat( fd, &st ) == -1)) fatal_perror( "Cannot stat %s", file ); if (!st.st_size) fatal_error( "%s is an empty file\n", file ); #ifdef HAVE_MMAP if ((input_buffer = mmap( NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0 )) == (void*)-1) #endif { unsigned char *buffer = xmalloc( st.st_size ); if (read( fd, buffer, st.st_size ) != st.st_size) fatal_error( "Cannot read %s\n", file ); input_buffer = buffer; } close( fd ); input_buffer_filename = xstrdup( file ); input_buffer_size = st.st_size; input_buffer_pos = 0; byte_swapped = 0; } void init_output_buffer(void) { output_buffer_size = 1024; output_buffer_pos = 0; output_buffer = xmalloc( output_buffer_size ); } void flush_output_buffer(void) { if (fwrite( output_buffer, 1, output_buffer_pos, output_file ) != output_buffer_pos) fatal_error( "Error writing to %s\n", output_file_name ); free( output_buffer ); } unsigned char get_byte(void) { if (input_buffer_pos >= input_buffer_size) fatal_error( "%s is a truncated file\n", input_buffer_filename ); return input_buffer[input_buffer_pos++]; } unsigned short get_word(void) { unsigned short ret; if (input_buffer_pos + sizeof(ret) > input_buffer_size) fatal_error( "%s is a truncated file\n", input_buffer_filename ); memcpy( &ret, input_buffer + input_buffer_pos, sizeof(ret) ); if (byte_swapped) ret = (ret << 8) | (ret >> 8); input_buffer_pos += sizeof(ret); return ret; } unsigned int get_dword(void) { unsigned int ret; if (input_buffer_pos + sizeof(ret) > input_buffer_size) fatal_error( "%s is a truncated file\n", input_buffer_filename ); memcpy( &ret, input_buffer + input_buffer_pos, sizeof(ret) ); if (byte_swapped) ret = ((ret << 24) | ((ret << 8) & 0x00ff0000) | ((ret >> 8) & 0x0000ff00) | (ret >> 24)); input_buffer_pos += sizeof(ret); return ret; } void put_data( const void *data, size_t size ) { check_output_buffer_space( size ); memcpy( output_buffer + output_buffer_pos, data, size ); output_buffer_pos += size; } void put_byte( unsigned char val ) { check_output_buffer_space( 1 ); output_buffer[output_buffer_pos++] = val; } void put_word( unsigned short val ) { if (byte_swapped) val = (val << 8) | (val >> 8); put_data( &val, sizeof(val) ); } void put_dword( unsigned int val ) { if (byte_swapped) val = ((val << 24) | ((val << 8) & 0x00ff0000) | ((val >> 8) & 0x0000ff00) | (val >> 24)); put_data( &val, sizeof(val) ); } void put_qword( unsigned int val ) { if (byte_swapped) { put_dword( 0 ); put_dword( val ); } else { put_dword( val ); put_dword( 0 ); } } /* pointer-sized word */ void put_pword( unsigned int val ) { if (get_ptr_size() == 8) put_qword( val ); else put_dword( val ); } void align_output( unsigned int align ) { size_t size = align - (output_buffer_pos % align); if (size == align) return; check_output_buffer_space( size ); memset( output_buffer + output_buffer_pos, 0, size ); output_buffer_pos += size; } /* output a standard header for generated files */ void output_standard_file_header(void) { if (spec_file_name) output( "/* File generated automatically from %s; do not edit! */\n", spec_file_name ); else output( "/* File generated automatically; do not edit! */\n" ); output( "/* This file can be copied, modified and distributed without restriction. */\n\n" ); } /* dump a byte stream into the assembly code */ void dump_bytes( const void *buffer, unsigned int size ) { unsigned int i; const unsigned char *ptr = buffer; if (!size) return; output( "\t.byte " ); for (i = 0; i < size - 1; i++, ptr++) { if ((i % 16) == 15) output( "0x%02x\n\t.byte ", *ptr ); else output( "0x%02x,", *ptr ); } output( "0x%02x\n", *ptr ); } /******************************************************************* * open_input_file * * Open a file in the given srcdir and set the input_file_name global variable. */ FILE *open_input_file( const char *srcdir, const char *name ) { char *fullname; FILE *file = fopen( name, "r" ); if (!file && srcdir) { fullname = strmake( "%s/%s", srcdir, name ); file = fopen( fullname, "r" ); } else fullname = xstrdup( name ); if (!file) fatal_error( "Cannot open file '%s'\n", fullname ); input_file_name = fullname; current_line = 1; return file; } /******************************************************************* * close_input_file * * Close the current input file (must have been opened with open_input_file). */ void close_input_file( FILE *file ) { fclose( file ); free( input_file_name ); input_file_name = NULL; current_line = 0; } /******************************************************************* * remove_stdcall_decoration * * Remove a possible @xx suffix from a function name. * Return the numerical value of the suffix, or -1 if none. */ int remove_stdcall_decoration( char *name ) { char *p, *end = strrchr( name, '@' ); if (!end || !end[1] || end == name) return -1; if (target_cpu != CPU_x86) return -1; /* make sure all the rest is digits */ for (p = end + 1; *p; p++) if (!isdigit(*p)) return -1; *end = 0; return atoi( end + 1 ); } /******************************************************************* * assemble_file * * Run a file through the assembler. */ void assemble_file( const char *src_file, const char *obj_file ) { struct strarray args = get_as_command(); strarray_add( &args, "-o", obj_file, src_file, NULL ); spawn( args ); } /******************************************************************* * alloc_dll_spec * * Create a new dll spec file descriptor */ DLLSPEC *alloc_dll_spec(void) { DLLSPEC *spec; spec = xmalloc( sizeof(*spec) ); memset( spec, 0, sizeof(*spec) ); spec->type = SPEC_WIN32; spec->base = MAX_ORDINALS; spec->characteristics = IMAGE_FILE_EXECUTABLE_IMAGE; spec->subsystem = 0; spec->subsystem_major = 4; spec->subsystem_minor = 0; if (get_ptr_size() > 4) spec->characteristics |= IMAGE_FILE_LARGE_ADDRESS_AWARE; else spec->characteristics |= IMAGE_FILE_32BIT_MACHINE; spec->dll_characteristics = IMAGE_DLLCHARACTERISTICS_NX_COMPAT; return spec; } /******************************************************************* * free_dll_spec * * Free dll spec file descriptor */ void free_dll_spec( DLLSPEC *spec ) { int i; for (i = 0; i < spec->nb_entry_points; i++) { ORDDEF *odp = &spec->entry_points[i]; free( odp->name ); free( odp->export_name ); free( odp->link_name ); } free( spec->file_name ); free( spec->dll_name ); free( spec->c_name ); free( spec->init_func ); free( spec->entry_points ); free( spec->names ); free( spec->ordinals ); free( spec->resources ); free( spec ); } /******************************************************************* * make_c_identifier * * Map a string to a valid C identifier. */ char *make_c_identifier( const char *str ) { char *p, buffer[256]; for (p = buffer; *str && p < buffer+sizeof(buffer)-1; p++, str++) { if (isalnum(*str)) *p = *str; else *p = '_'; } *p = 0; return xstrdup( buffer ); } /******************************************************************* * get_stub_name * * Generate an internal name for a stub entry point. */ const char *get_stub_name( const ORDDEF *odp, const DLLSPEC *spec ) { static char *buffer; free( buffer ); if (odp->name || odp->export_name) { char *p; buffer = strmake( "__wine_stub_%s", odp->name ? odp->name : odp->export_name ); /* make sure name is a legal C identifier */ for (p = buffer; *p; p++) if (!isalnum(*p) && *p != '_') break; if (!*p) return buffer; free( buffer ); } buffer = strmake( "__wine_stub_%s_%d", make_c_identifier(spec->file_name), odp->ordinal ); return buffer; } /* parse a cpu name and return the corresponding value */ int get_cpu_from_name( const char *name ) { unsigned int i; for (i = 0; i < sizeof(cpu_names)/sizeof(cpu_names[0]); i++) if (!strcmp( cpu_names[i].name, name )) return cpu_names[i].cpu; return -1; } /***************************************************************** * Function: get_alignment * * Description: * According to the info page for gas, the .align directive behaves * differently on different systems. On some architectures, the * argument of a .align directive is the number of bytes to pad to, so * to align on an 8-byte boundary you'd say * .align 8 * On other systems, the argument is "the number of low-order zero bits * that the location counter must have after advancement." So to * align on an 8-byte boundary you'd say * .align 3 * * The reason gas is written this way is that it's trying to mimic * native assemblers for the various architectures it runs on. gas * provides other directives that work consistently across * architectures, but of course we want to work on all arches with or * without gas. Hence this function. * * * Parameters: * align -- the number of bytes to align to. Must be a power of 2. */ unsigned int get_alignment(unsigned int align) { unsigned int n; assert( !(align & (align - 1)) ); switch(target_cpu) { case CPU_x86: case CPU_x86_64: if (target_platform != PLATFORM_APPLE) return align; /* fall through */ case CPU_POWERPC: case CPU_ARM: case CPU_ARM64: n = 0; while ((1u << n) != align) n++; return n; } /* unreached */ assert(0); return 0; } /* return the page size for the target CPU */ unsigned int get_page_size(void) { switch(target_cpu) { case CPU_x86: case CPU_x86_64: case CPU_POWERPC: case CPU_ARM: return 0x1000; case CPU_ARM64: return 0x10000; } /* unreached */ assert(0); return 0; } /* return the size of a pointer on the target CPU */ unsigned int get_ptr_size(void) { switch(target_cpu) { case CPU_x86: case CPU_POWERPC: case CPU_ARM: return 4; case CPU_x86_64: case CPU_ARM64: return 8; } /* unreached */ assert(0); return 0; } /* return the total size in bytes of the arguments on the stack */ unsigned int get_args_size( const ORDDEF *odp ) { int i, size; for (i = size = 0; i < odp->u.func.nb_args; i++) { switch (odp->u.func.args[i]) { case ARG_INT64: case ARG_DOUBLE: size += 8; break; case ARG_INT128: /* int128 is passed as pointer on x86_64 */ if (target_cpu != CPU_x86_64) { size += 16; break; } /* fall through */ default: size += get_ptr_size(); break; } } return size; } static int get_function_argsize16(const ORDDEF *odp) { int i, argsize = 0; for (i = 0; i < odp->u.func.nb_args; i++) { switch (odp->u.func.args[i]) { case ARG_WORD: case ARG_SWORD: argsize += 2 + 2; break; case ARG_SEGPTR: case ARG_SEGSTR: case ARG_LONG: case ARG_PTR: case ARG_STR: case ARG_WSTR: case ARG_FLOAT: case ARG_INT128: argsize += 4; break; case ARG_INT64: case ARG_DOUBLE: argsize += 8; break; } } if (odp->flags & FLAG_REGISTER) return argsize + 4;//ARG_PTR return argsize; } const char *asm_name_stdcall16(const char *sym, ORDDEF *ord) { static char *buffer; switch (target_platform) { case PLATFORM_APPLE: case PLATFORM_WINDOWS: if (sym[0] == '.' && sym[1] == 'L') return sym; free(buffer); if (ord->type == TYPE_VARARGS || strstr(sym, "__wine_stub") == sym) { buffer = strmake("_%s", sym); } else { buffer = strmake("_%s@%d", sym, get_function_argsize16(ord)); } return buffer; default: return sym; } } const char *asm_name_stdcall32(const char *sym, ORDDEF *ord) { static char *buffer; switch (target_platform) { case PLATFORM_APPLE: case PLATFORM_WINDOWS: if (sym[0] == '.' && sym[1] == 'L') return sym; free(buffer); if (ord->type == TYPE_VARARGS || strstr(sym, "__wine_stub") == sym) { buffer = strmake("_%s", sym); } else { buffer = strmake("_%s@%d", sym, get_function_argsize16(ord)); } return buffer; default: return sym; } } /* return the assembly name for a C symbol */ const char *asm_name( const char *sym ) { static char *buffer; switch (target_platform) { case PLATFORM_APPLE: case PLATFORM_WINDOWS: if (sym[0] == '.' && sym[1] == 'L') return sym; free( buffer ); buffer = strmake( "_%s", sym ); return buffer; default: return sym; } } /* return an assembly function declaration for a C function name */ const char *func_declaration( const char *func ) { static char *buffer; switch (target_platform) { case PLATFORM_APPLE: return ""; case PLATFORM_WINDOWS: free( buffer ); buffer = strmake( ".def %s; .scl 2; .type 32; .endef", func ); break; default: free( buffer ); switch(target_cpu) { case CPU_ARM: case CPU_ARM64: buffer = strmake( ".type %s,%%function", func ); break; default: buffer = strmake( ".type %s,@function", func ); break; } break; } return buffer; } /* output a size declaration for an assembly function */ void output_function_size( const char *name ) { switch (target_platform) { case PLATFORM_APPLE: case PLATFORM_WINDOWS: break; default: output( "\t.size %s, .-%s\n", name, name ); break; } } /* output a .cfi directive */ void output_cfi( const char *format, ... ) { va_list valist; if (!unwind_tables) return; va_start( valist, format ); fputc( '\t', output_file ); vfprintf( output_file, format, valist ); fputc( '\n', output_file ); va_end( valist ); } /* output the GNU note for non-exec stack */ void output_gnu_stack_note(void) { switch (target_platform) { case PLATFORM_WINDOWS: case PLATFORM_APPLE: break; default: switch(target_cpu) { case CPU_ARM: case CPU_ARM64: output( "\t.section .note.GNU-stack,\"\",%%progbits\n" ); break; default: output( "\t.section .note.GNU-stack,\"\",@progbits\n" ); break; } break; } } /* return a global symbol declaration for an assembly symbol */ const char *asm_globl( const char *func ) { static char *buffer; free( buffer ); switch (target_platform) { case PLATFORM_APPLE: buffer = strmake( "\t.globl _%s\n\t.private_extern _%s\n_%s:", func, func, func ); break; case PLATFORM_WINDOWS: buffer = strmake( "\t.globl _%s\n_%s:", func, func ); break; default: buffer = strmake( "\t.globl %s\n\t.hidden %s\n%s:", func, func, func ); break; } return buffer; } const char *get_asm_ptr_keyword(void) { switch(get_ptr_size()) { case 4: return ".long"; case 8: return ".quad"; } assert(0); return NULL; } const char *get_asm_string_keyword(void) { switch (target_platform) { case PLATFORM_APPLE: return ".asciz"; default: return ".string"; } } const char *get_asm_rodata_section(void) { switch (target_platform) { case PLATFORM_APPLE: return ".const"; default: return ".section .rodata"; } } const char *get_asm_string_section(void) { switch (target_platform) { case PLATFORM_APPLE: return ".cstring"; default: return ".section .rodata"; } } ================================================ FILE: convspec/ver.h ================================================ unsigned char ver_res[] = { 0xff, 0x10, 0x00, 0xff, 0x01, 0x00, 0x30, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x34, 0x00, 0x56, 0x53, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x00, 0xbd, 0x04, 0xef, 0xfe, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x03, 0x00, 0xe7, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x03, 0x00, 0xe7, 0x03, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xc6, 0xc0, 0x5b, 0x54, 0x01, 0x00, 0x00, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x30, 0x34, 0x31, 0x31, 0x30, 0x33, 0x41, 0x34, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x13, 0x00, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x00, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x0a, 0x00, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x20, 0x44, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x06, 0x00, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x33, 0x2e, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x06, 0x00, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x00, 0x00, 0x00, 0x00, 0x44, 0x55, 0x4d, 0x4d, 0x59, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x25, 0x00, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x00, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x2e, 0x20, 0x31, 0x39, 0x39, 0x31, 0x2d, 0x31, 0x39, 0x39, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x0d, 0x00, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x00, 0x00, 0x00, 0x00, 0x44, 0x55, 0x4d, 0x4d, 0x59, 0x44, 0x4c, 0x4c, 0x2e, 0x44, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x26, 0x00, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x00, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x20, 0x28, 0x52, 0x29, 0x20, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x28, 0x54, 0x4d, 0x29, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x06, 0x00, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x33, 0x2e, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x56, 0x61, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x00, 0x14, 0x00, 0x04, 0x00, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x11, 0x04, 0xa4, 0x03 }; unsigned int ver_res_len = 460; ================================================ FILE: ctl3d/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(ctl3d SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ctl3d.def ctl3d.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ctl3d.dll16 ctl3d) target_link_libraries(ctl3d libwine winecrt0 krnl386 ctl3dv2) set_target_properties(ctl3d PROPERTIES SUFFIX ".dll16") ================================================ FILE: ctl3d/Makefile.in ================================================ MODULE = ctl3d.dll16 IMPORTS = user32 EXTRADLLFLAGS = -m16 -Wb,--main-module,ctl3d32.dll C_SRCS = ctl3d.c ================================================ FILE: ctl3d/ctl3d.c ================================================ /* * 16-bit CTL3D and CTL3DV2 API stubs. * * Copyright (c) 2003 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "wine/winbase16.h" #include "wine/winuser16.h" #include ================================================ FILE: ctl3d/ctl3d.def ================================================ ; File generated automatically from ..\ctl3d\ctl3d.dll16.spec; do not edit! LIBRARY ctl3d.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: ctl3d/ctl3d.dll16.spec ================================================ 1 pascal -ret16 Ctl3dGetVer() Ctl3dGetVer16 2 pascal -ret16 Ctl3dSubclassDlg(word word) Ctl3dSubclassDlg16 3 pascal -ret16 Ctl3dSubclassCtl(word) Ctl3dSubclassCtl16 4 pascal -ret16 Ctl3dCtlColor(word long) Ctl3dCtlColor16 5 pascal -ret16 Ctl3dEnabled() Ctl3dEnabled16 6 pascal -ret16 Ctl3dColorChange() Ctl3dColorChange16 7 pascal BtnWndProc3d(word word word long) BtnWndProc3d16 8 pascal EditWndProc3d(word word word long) EditWndProc3d16 9 pascal ListWndProc3d(word word word long) ListWndProc3d16 10 pascal ComboWndProc3d(word word word long) ComboWndProc3d16 11 pascal StaticWndProc3d(word word word long) StaticWndProc3d16 12 pascal -ret16 Ctl3dRegister(word) Ctl3dRegister16 13 pascal -ret16 Ctl3dUnregister(word) Ctl3dUnregister16 16 pascal -ret16 Ctl3dAutoSubclass(word) Ctl3dAutoSubclass16 17 pascal Ctl3dDlgProc(word word word long) Ctl3dDlgProc16 18 pascal -ret16 Ctl3dCtlColorEx(word word long) Ctl3dCtlColorEx16 19 pascal -ret16 Ctl3dSetStyle(word long word) Ctl3dSetStyle16 20 pascal Ctl3dDlgFramePaint(word word word long) Ctl3dDlgFramePaint16 21 pascal -ret16 Ctl3dSubclassDlgEx(word long) Ctl3dSubclassDlgEx16 22 pascal -ret16 Ctl3dWinIniChange() Ctl3dWinIniChange16 23 pascal -ret16 Ctl3dIsAutoSubclass() Ctl3dIsAutoSubclass16 24 pascal -ret16 Ctl3dUnAutoSubclass() Ctl3dUnAutoSubclass16 25 pascal -ret16 Ctl3dSubclassCtlEx(word word) Ctl3dSubclassCtlEx16 26 pascal -ret16 Ctl3dUnsubclassCtl(word) Ctl3dUnsubclassCtl16 27 pascal -ret16 Ctl3dAutoSubclassEx(word long) Ctl3dAutoSubclassEx16 ================================================ FILE: ctl3d/ctl3d.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj ctl3d {B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)ctl3dv2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib true ctl3d.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ctl3d.def $(OutDir)ctl3dv2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib Document "$(OutDir)convspec" "%(Filename).spec" CTL3D > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" CTL3D > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: ctl3dv2/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(ctl3dv2 SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ctl3dv2.def ctl3dv2.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ctl3dv2.dll16 ctl3dv2) target_link_libraries(ctl3dv2 libwine winecrt0 krnl386 user) set_target_properties(ctl3dv2 PROPERTIES SUFFIX ".dll16") ================================================ FILE: ctl3dv2/Makefile.in ================================================ MODULE = ctl3dv2.dll16 IMPORTS = user32 EXTRADLLFLAGS = -m16 -Wb,--main-module,ctl3d32.dll C_SRCS = ctl3d.c ================================================ FILE: ctl3dv2/ctl3d.c ================================================ /* * 16-bit CTL3D and CTL3DV2 API stubs. * * Copyright (c) 2003 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "wine/winbase16.h" #include "wine/winuser16.h" #include /* Ctl3dSubclassDlg */ #define CTL3D_BUTTONS 0x0001 #define CTL3D_LISTBOXES 0x0002 #define CTL3D_EDITS 0x0004 #define CTL3D_COMBOS 0x0008 #define CTL3D_STATICTEXTS 0x0010 #define CTL3D_STATICFRAMES 0x0020 #define CTL3D_ALL 0xffff /* resource */ #define CTL3D_3DCHECK 26567 /* Ctl3dSubclassDlgEx */ #define CTL3D_NODLGWINDOW 0x00010000 /* WM_DLGBORDER result */ #define WM_DLGBORDER (WM_USER + 3567) #define CTL3D_NOBORDER 0 #define CTL3D_BORDER 1 /* WM_DLGSUBCLASS result */ #define WM_DLGSUBCLASS (WM_USER + 3568) #define CTL3D_NOSUBCLASS 0 #define CTL3D_SUBCLASS 1 #define CTLMSGOFFSET 3569 #define CTL3D_CTLCOLOR (WM_USER + CTLMSGOFFSET) struct autosubclass { HHOOK hook; DWORD type; }; static DWORD autosubclass_index = NULL; static WNDPROC listbox_proc; static WNDPROC button_proc; static WNDPROC static_proc; static WNDPROC combo_proc; static WNDPROC edit_proc; static WNDPROC dialog_proc; LRESULT WINAPI __wine_call_wndproc(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, WNDPROC proc); BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, LPVOID lpvReserved) { WNDCLASSA cls; switch (reason) { case DLL_PROCESS_ATTACH: if (GetClassInfoA(hinstDLL, "LISTBOX", &cls)) listbox_proc = cls.lpfnWndProc; if (GetClassInfoA(hinstDLL, "BUTTON", &cls)) button_proc = cls.lpfnWndProc; if (GetClassInfoA(hinstDLL, "STATIC", &cls)) static_proc = cls.lpfnWndProc; if (GetClassInfoA(hinstDLL, "COMBOBOX", &cls)) combo_proc = cls.lpfnWndProc; if (GetClassInfoA(hinstDLL, "EDIT", &cls)) edit_proc = cls.lpfnWndProc; if (GetClassInfoA(hinstDLL, "#32770", &cls)) dialog_proc = cls.lpfnWndProc; autosubclass_index = TlsAlloc(); break; case DLL_PROCESS_DETACH: TlsFree(autosubclass_index); break; case DLL_THREAD_DETACH: { struct autosubclass *asc = TlsGetValue(autosubclass_index); if (asc) { UnhookWindowsHookEx(asc->hook); HeapFree(GetProcessHeap(), 0, asc); } break; } } return TRUE; } static void ctl3d_static(DWORD type, DWORD *style, DWORD *exstyle) { switch (*style & 0xf) { case SS_BLACKFRAME: if (type & CTL3D_STATICFRAMES) { *style &= ~SS_BLACKFRAME; *exstyle |= WS_EX_CLIENTEDGE; } break; case SS_GRAYFRAME: if (type & CTL3D_STATICFRAMES) { *style &= ~SS_GRAYFRAME; *style |= SS_ETCHEDFRAME; } break; case SS_WHITEFRAME: if (type & CTL3D_STATICFRAMES) { *style &= ~SS_WHITEFRAME; *exstyle |= WS_EX_DLGMODALFRAME; } break; case SS_BLACKRECT: if (type & CTL3D_STATICTEXTS) { *style &= ~SS_BLACKRECT; *exstyle |= WS_EX_CLIENTEDGE; } break; case SS_GRAYRECT: if (type & CTL3D_STATICTEXTS) { *style &= ~SS_GRAYRECT; *style |= SS_ETCHEDFRAME; } break; case SS_WHITERECT: if (type & CTL3D_STATICTEXTS) { *style &= ~SS_WHITERECT; *exstyle |= WS_EX_DLGMODALFRAME; } break; } } static LRESULT CALLBACK subclassproc(INT code, WPARAM wp, LPARAM lp) { struct autosubclass *asc = TlsGetValue(autosubclass_index); if (code == HCBT_CREATEWND) { CBT_CREATEWNDA *cbt_cw = (CBT_CREATEWNDA *)lp; char *cls = cbt_cw->lpcs->lpszClass; if ((DWORD)cls & 0xffff0000) { if ((asc->type & CTL3D_EDITS) && (!strcmpi(cls, "EDIT")) || ((asc->type & CTL3D_LISTBOXES) && !strcmpi(cls, "LISTBOX"))) { DWORD exstyle = cbt_cw->lpcs->dwExStyle | WS_EX_CLIENTEDGE; SetWindowLongA(wp, GWL_EXSTYLE, exstyle); } if (!strcmpi(cls, "STATIC")) { DWORD style = cbt_cw->lpcs->style; DWORD exstyle = cbt_cw->lpcs->dwExStyle; ctl3d_static(asc->type, &style, &exstyle); cbt_cw->lpcs->style = style; cbt_cw->lpcs->dwExStyle = exstyle; SetWindowLongA(wp, GWL_STYLE, style); SetWindowLongA(wp, GWL_EXSTYLE, exstyle); } } } return CallNextHookEx(asc->hook, code, wp, lp); } /*********************************************************************** * Ctl3dAutoSubclassEx (CTL3DV2.27) */ BOOL16 WINAPI Ctl3dAutoSubclassEx16(HINSTANCE16 hInst, DWORD type) { struct autosubclass *asc = TlsGetValue(autosubclass_index); if (!asc) { asc = (struct autosubclass *)HeapAlloc(GetProcessHeap(), 0, sizeof(struct autosubclass)); asc->hook = SetWindowsHookExA(WH_CBT, subclassproc, NULL, GetCurrentThreadId()); TlsSetValue(autosubclass_index, asc); } asc->type = type; return TRUE; } /*********************************************************************** * Ctl3dAutoSubclass (CTL3DV2.16) */ BOOL16 WINAPI Ctl3dAutoSubclass16(HINSTANCE16 hInst) { Ctl3dAutoSubclassEx16(hInst, CTL3D_ALL); return TRUE; } /*********************************************************************** * Ctl3dColorChange (CTL3DV2.6) */ BOOL16 WINAPI Ctl3dColorChange16(void) { return TRUE; } /*********************************************************************** * Ctl3dCtlColor (CTL3DV2.4) */ HBRUSH WINAPI Ctl3dCtlColor16(HDC16 hdc, LONG hwnd) { return 0; } /*********************************************************************** * Ctl3dCtlColorEx (CTL3DV2.18) */ HBRUSH WINAPI Ctl3dCtlColorEx16(UINT16 msg, WPARAM16 wParam, LPARAM lParam) { return 0; } /*********************************************************************** * Ctl3dDlgFramePaint (CTL3DV2.20) */ LRESULT WINAPI Ctl3dDlgFramePaint16(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam) { return __wine_call_wndproc(hwnd, msg, wParam, lParam, DefWindowProcA); } /*********************************************************************** * Ctl3dEnabled (CTL3DV2.5) */ BOOL16 WINAPI Ctl3dEnabled16(void) { return FALSE; } /*********************************************************************** * Ctl3dGetVer (CTL3DV2.1) */ WORD WINAPI Ctl3dGetVer16(void) { return MAKEWORD(31,2); } /*********************************************************************** * Ctl3dIsAutoSubclass (CTL3DV2.23) */ BOOL16 WINAPI Ctl3dIsAutoSubclass16(void) { return TlsGetValue(autosubclass_index) ? TRUE : FALSE; } /*********************************************************************** * Ctl3dRegister (CTL3DV2.12) */ BOOL16 WINAPI Ctl3dRegister16(HINSTANCE16 hInst) { return TRUE; } /*********************************************************************** * Ctl3dSubclassCtlEx (CTL3DV2.25) */ BOOL16 WINAPI Ctl3dSubclassCtlEx16(HWND16 hwnd, INT16 type) { HWND hwnd32 = HWND_32(hwnd); char buf[200] = { 0 }; GetClassNameA(hwnd32, buf, sizeof(buf)); if ((type & CTL3D_EDITS) && (!strcmpi(buf, "EDIT")) || ((type & CTL3D_LISTBOXES) && !strcmpi(buf, "LISTBOX"))) { SetWindowLongA(hwnd32, GWL_EXSTYLE, GetWindowLongA(hwnd32, GWL_EXSTYLE) | WS_EX_CLIENTEDGE); SetWindowPos(hwnd32, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_DRAWFRAME); } else if (!strcmpi(buf, "STATIC")) { DWORD style = GetWindowLongA(hwnd32, GWL_STYLE); DWORD exstyle = GetWindowLongA(hwnd32, GWL_EXSTYLE); ctl3d_static(type, &style, &exstyle); SetWindowLongA(hwnd32, GWL_STYLE, style); SetWindowLongA(hwnd32, GWL_EXSTYLE, exstyle); } return TRUE; } /*********************************************************************** * Ctl3dSubclassCtl (CTL3DV2.3) */ BOOL16 WINAPI Ctl3dSubclassCtl16(HWND16 hwnd) { return Ctl3dSubclassCtlEx16(hwnd, CTL3D_ALL); } struct ctl3d_enumproc { HWND parent; DWORD types; }; BOOL CALLBACK ctl3d_enumproc(HWND hwnd, LPARAM lparam) { struct ctl3d_enumproc *data = (struct ctl3d_enumproc*)lparam; if (GetParent(hwnd) != data->parent) return TRUE; Ctl3dSubclassCtlEx16(HWND_16(hwnd), data->types); } /*********************************************************************** * Ctl3dSubclassDlgEx (CTL3DV2.21) */ BOOL16 WINAPI Ctl3dSubclassDlgEx16(HWND16 hwnd, DWORD types) { struct ctl3d_enumproc data = { 0 }; data.parent = HWND_32(hwnd); data.types = types; EnumChildWindows(data.parent, ctl3d_enumproc, (LPARAM)&data); return FALSE; } /*********************************************************************** * Ctl3dSubclassDlg (CTL3DV2.2) */ BOOL16 WINAPI Ctl3dSubclassDlg16(HWND16 hwnd, WORD types) { return Ctl3dSubclassDlgEx16(hwnd, types); } /*********************************************************************** * Ctl3dUnAutoSubclass (CTL3DV2.24) */ BOOL16 WINAPI Ctl3dUnAutoSubclass16(void) { struct autosubclass *asc = TlsGetValue(autosubclass_index); if (asc) { UnhookWindowsHookEx(asc->hook); HeapFree(GetProcessHeap(), 0, asc); TlsSetValue(autosubclass_index, 0); } return FALSE; } /*********************************************************************** * Ctl3dUnregister (CTL3DV2.13) */ BOOL16 WINAPI Ctl3dUnregister16(HINSTANCE16 hInst) { Ctl3dUnAutoSubclass16(); return TRUE; } /*********************************************************************** * Ctl3dUnsubclassCtl (CTL3DV2.26) */ BOOL16 WINAPI Ctl3dUnsubclassCtl16(HWND16 hwnd) { return FALSE; } /*********************************************************************** * Ctl3dWinIniChange (CTL3DV2.22) */ void WINAPI Ctl3dWinIniChange16(void) { } /*********************************************************************** * ComboWndProc3d (CTL3DV2.10) */ LRESULT WINAPI ComboWndProc3d16(HWND16 hwnd, UINT16 msg,WPARAM16 wparam, LPARAM lparam) { return __wine_call_wndproc(hwnd, msg, wparam, lparam, combo_proc); } /*********************************************************************** * BtnWndProc3d (CTL3DV2.7) */ LRESULT WINAPI BtnWndProc3d16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam) { return __wine_call_wndproc(hwnd, msg, wparam, lparam, button_proc); } /*********************************************************************** * StaticWndProc3d (CTL3DV2.11) */ LRESULT WINAPI StaticWndProc3d16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam) { return __wine_call_wndproc(hwnd, msg, wparam, lparam, static_proc); } /*********************************************************************** * EditWndProc3d (CTL3DV2.8) */ LRESULT WINAPI EditWndProc3d16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam) { return __wine_call_wndproc(hwnd, msg, wparam, lparam, edit_proc); } /*********************************************************************** * ListWndProc3d (CTL3DV2.9) */ LRESULT WINAPI ListWndProc3d16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam) { return __wine_call_wndproc(hwnd, msg, wparam, lparam, listbox_proc); } /*********************************************************************** * Ctl3dDlgProc (CTL3DV2.17) */ LRESULT WINAPI Ctl3dDlgProc16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam) { return __wine_call_wndproc(hwnd, msg, wparam, lparam, dialog_proc); } WORD WINAPI Ctl3dSetStyle16(WORD a1, SEGPTR a2, WORD a3) { return 0; } ================================================ FILE: ctl3dv2/ctl3dv2.def ================================================ ; File generated automatically from ..\ctl3dv2\ctl3dv2.dll16.spec; do not edit! LIBRARY ctl3dv2.dll16 EXPORTS _wine_spec_dos_header @1 DATA Ctl3dGetVer16 Ctl3dSubclassDlg16 Ctl3dSubclassCtl16 Ctl3dCtlColor16 Ctl3dEnabled16 Ctl3dColorChange16 BtnWndProc3d16 EditWndProc3d16 ListWndProc3d16 ComboWndProc3d16 StaticWndProc3d16 Ctl3dRegister16 Ctl3dUnregister16 Ctl3dAutoSubclass16 Ctl3dDlgProc16 Ctl3dCtlColorEx16 Ctl3dSetStyle16 Ctl3dDlgFramePaint16 Ctl3dSubclassDlgEx16 Ctl3dWinIniChange16 Ctl3dIsAutoSubclass16 Ctl3dUnAutoSubclass16 Ctl3dSubclassCtlEx16 Ctl3dUnsubclassCtl16 Ctl3dAutoSubclassEx16 ================================================ FILE: ctl3dv2/ctl3dv2.dll16.spec ================================================ 1 pascal -ret16 Ctl3dGetVer() Ctl3dGetVer16 2 pascal -ret16 Ctl3dSubclassDlg(word word) Ctl3dSubclassDlg16 3 pascal -ret16 Ctl3dSubclassCtl(word) Ctl3dSubclassCtl16 4 pascal -ret16 Ctl3dCtlColor(word long) Ctl3dCtlColor16 5 pascal -ret16 Ctl3dEnabled() Ctl3dEnabled16 6 pascal -ret16 Ctl3dColorChange() Ctl3dColorChange16 7 pascal BtnWndProc3d(word word word long) BtnWndProc3d16 8 pascal EditWndProc3d(word word word long) EditWndProc3d16 9 pascal ListWndProc3d(word word word long) ListWndProc3d16 10 pascal ComboWndProc3d(word word word long) ComboWndProc3d16 11 pascal StaticWndProc3d(word word word long) StaticWndProc3d16 12 pascal -ret16 Ctl3dRegister(word) Ctl3dRegister16 13 pascal -ret16 Ctl3dUnregister(word) Ctl3dUnregister16 16 pascal -ret16 Ctl3dAutoSubclass(word) Ctl3dAutoSubclass16 17 pascal Ctl3dDlgProc(word word word long) Ctl3dDlgProc16 18 pascal -ret16 Ctl3dCtlColorEx(word word long) Ctl3dCtlColorEx16 19 pascal -ret16 Ctl3dSetStyle(word long word) Ctl3dSetStyle16 20 pascal Ctl3dDlgFramePaint(word word word long) Ctl3dDlgFramePaint16 21 pascal -ret16 Ctl3dSubclassDlgEx(word long) Ctl3dSubclassDlgEx16 22 pascal -ret16 Ctl3dWinIniChange() Ctl3dWinIniChange16 23 pascal -ret16 Ctl3dIsAutoSubclass() Ctl3dIsAutoSubclass16 24 pascal -ret16 Ctl3dUnAutoSubclass() Ctl3dUnAutoSubclass16 25 pascal -ret16 Ctl3dSubclassCtlEx(word word) Ctl3dSubclassCtlEx16 26 pascal -ret16 Ctl3dUnsubclassCtl(word) Ctl3dUnsubclassCtl16 27 pascal -ret16 Ctl3dAutoSubclassEx(word long) Ctl3dAutoSubclassEx16 @ stdcall -arch=win32 Ctl3dGetVer16() @ stdcall -arch=win32 Ctl3dSubclassDlg16(long long) @ stdcall -arch=win32 Ctl3dSubclassCtl16(long) @ stdcall -arch=win32 Ctl3dCtlColor16(long long) @ stdcall -arch=win32 Ctl3dEnabled16() @ stdcall -arch=win32 Ctl3dColorChange16() @ stdcall -arch=win32 BtnWndProc3d16(long long long long) @ stdcall -arch=win32 EditWndProc3d16(long long long long) @ stdcall -arch=win32 ListWndProc3d16(long long long long) @ stdcall -arch=win32 ComboWndProc3d16(long long long long) @ stdcall -arch=win32 StaticWndProc3d16(long long long long) @ stdcall -arch=win32 Ctl3dRegister16(long) @ stdcall -arch=win32 Ctl3dUnregister16(long) @ stdcall -arch=win32 Ctl3dAutoSubclass16(long) @ stdcall -arch=win32 Ctl3dDlgProc16(long long long long) @ stdcall -arch=win32 Ctl3dCtlColorEx16(long long long) @ stdcall -arch=win32 Ctl3dSetStyle16(long long long) @ stdcall -arch=win32 Ctl3dDlgFramePaint16(long long long long) @ stdcall -arch=win32 Ctl3dSubclassDlgEx16(long long) @ stdcall -arch=win32 Ctl3dWinIniChange16() @ stdcall -arch=win32 Ctl3dIsAutoSubclass16() @ stdcall -arch=win32 Ctl3dUnAutoSubclass16() @ stdcall -arch=win32 Ctl3dSubclassCtlEx16(long long) @ stdcall -arch=win32 Ctl3dUnsubclassCtl16(long) @ stdcall -arch=win32 Ctl3dAutoSubclassEx16(long long) ================================================ FILE: ctl3dv2/ctl3dv2.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj ctl3dv2 {7F73550E-724D-4F7A-B192-35A764AC24D6} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib true ctl3dv2.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ctl3dv2.def $(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib Document "$(OutDir)convspec" "%(Filename).spec" CTL3DV2 > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" CTL3DV2 > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: ddeml/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(ddeml SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ddeml.def ddeml.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ddeml.dll16 ddeml) target_link_libraries(ddeml libwine winecrt0 krnl386) set_target_properties(ddeml PROPERTIES SUFFIX ".dll16") ================================================ FILE: ddeml/Makefile.in ================================================ MODULE = ddeml.dll16 IMPORTS = user32 EXTRADLLFLAGS = -m16 C_SRCS = ddeml.c ================================================ FILE: ddeml/ddeml.c ================================================ /* * DDEML library * * Copyright 1997 Alexandre Julliard * Copyright 1997 Len White * Copyright 1999 Keith Matthews * Copyright 2000 Corel * Copyright 2001,2002,2009 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include "windef.h" #include "winbase.h" #include "wine/windef16.h" #include "wine/winbase16.h" #include "wownt32.h" #include "dde.h" #include "ddeml.h" #include "winuser.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ddeml); typedef HDDEDATA (CALLBACK *PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ,HDDEDATA, DWORD,DWORD); typedef struct { UINT16 cb; UINT16 wFlags; UINT16 wCountryID; INT16 iCodePage; DWORD dwLangID; DWORD dwSecurity; } CONVCONTEXT16, *LPCONVCONTEXT16; typedef struct { DWORD cb; DWORD hUser; HCONV hConvPartner; HSZ hszSvcPartner; HSZ hszServiceReq; HSZ hszTopic; HSZ hszItem; UINT16 wFmt; UINT16 wType; UINT16 wStatus; UINT16 wConvst; UINT16 wLastError; HCONVLIST hConvList; CONVCONTEXT16 ConvCtxt; } CONVINFO16, *LPCONVINFO16; static void map1632_conv_context(CONVCONTEXT* cc32, const CONVCONTEXT16* cc16) { cc32->cb = sizeof(*cc32); cc32->wFlags = cc16->wFlags; cc32->wCountryID = cc16->wCountryID; cc32->iCodePage = cc16->iCodePage; cc32->dwLangID = cc16->dwLangID; cc32->dwSecurity = cc16->dwSecurity; } static void map3216_conv_context(CONVCONTEXT16* cc16, const CONVCONTEXT* cc32) { cc16->cb = sizeof(*cc16); cc16->wFlags = cc32->wFlags; cc16->wCountryID = cc32->wCountryID; cc16->iCodePage = cc32->iCodePage; cc16->dwLangID = cc32->dwLangID; cc16->dwSecurity = cc32->dwSecurity; } /****************************************************************** * WDML_InvokeCallback16 * * */ static HDDEDATA CALLBACK WDML_InvokeCallback16(DWORD pfn16, UINT uType, UINT uFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hdata, ULONG_PTR dwData1, ULONG_PTR dwData2) { DWORD d1 = 0; HDDEDATA ret; CONVCONTEXT16 cc16; WORD args[14]; switch (uType) { case XTYP_CONNECT: case XTYP_WILDCONNECT: if (dwData1) { map3216_conv_context(&cc16, (const CONVCONTEXT*)dwData1); d1 = MapLS(&cc16); } break; default: d1 = dwData1; break; } args[13] = uType; args[12] = uFmt; args[11] = HIWORD(hConv); args[10] = LOWORD(hConv); args[9] = HIWORD(hsz1); args[8] = LOWORD(hsz1); args[7] = HIWORD(hsz2); args[6] = LOWORD(hsz2); args[5] = HIWORD(hdata); args[4] = LOWORD(hdata); args[3] = HIWORD(d1); args[2] = LOWORD(d1); args[1] = HIWORD(dwData2); args[0] = LOWORD(dwData2); WOWCallback16Ex(pfn16, WCB16_PASCAL, sizeof(args), args, (DWORD *)&ret); switch (uType) { case XTYP_CONNECT: case XTYP_WILDCONNECT: if (d1 != 0) UnMapLS(d1); break; } return ret; } #define MAX_THUNKS 32 /* As DDEML doesn't provide a way to get back to an InstanceID when * a callback is run, we use thunk in order to implement simply the * 32bit->16bit callback mechanism. * For each 16bit instance, we create a thunk, which will be passed as * a 32bit callback. This thunk also stores (in the code!) the 16bit * address of the 16bit callback, and passes it back to * WDML_InvokeCallback16. * The code below is mainly to create the thunks themselves */ #include "pshpack1.h" static struct ddeml_thunk { BYTE popl_eax; /* popl %eax (return address) */ BYTE pushl_func; /* pushl $pfn16 (16bit callback function) */ SEGPTR pfn16; BYTE pushl_eax; /* pushl %eax */ BYTE jmp; /* ljmp WDML_InvokeCallback16 */ DWORD callback; DWORD instId; /* instance ID */ } *DDEML16_Thunks; #include "poppack.h" static CRITICAL_SECTION ddeml_cs; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &ddeml_cs, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": ddeml_cs") } }; static CRITICAL_SECTION ddeml_cs = { &critsect_debug, -1, 0, 0, 0, 0 }; static struct ddeml_thunk* DDEML_AddThunk(DWORD instId, DWORD pfn16) { struct ddeml_thunk* thunk; if (!DDEML16_Thunks) { DDEML16_Thunks = VirtualAlloc(NULL, MAX_THUNKS * sizeof(*DDEML16_Thunks), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (!DDEML16_Thunks) return NULL; for (thunk = DDEML16_Thunks; thunk < &DDEML16_Thunks[MAX_THUNKS]; thunk++) { thunk->popl_eax = 0x58; /* popl %eax */ thunk->pushl_func = 0x68; /* pushl $pfn16 */ thunk->pfn16 = 0; thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->jmp = 0xe9; /* jmp WDML_InvokeCallback16 */ thunk->callback = (char *)WDML_InvokeCallback16 - (char *)(&thunk->callback + 1); thunk->instId = 0; } } for (thunk = DDEML16_Thunks; thunk < &DDEML16_Thunks[MAX_THUNKS]; thunk++) { /* either instId is 0, and we're looking for an empty slot, or * instId is an already existing instance, and we should find its thunk */ if (thunk->instId == instId) { thunk->pfn16 = pfn16; return thunk; } } FIXME("Out of ddeml-thunks. Bump MAX_THUNKS\n"); return NULL; } HSZ hsz_progman; HSZ hsz_progman16; static void init_hsz() { if (!hsz_progman) { hsz_progman = (HSZ)(ULONG_PTR)AddAtomA("Progman"); } if (!hsz_progman16) { hsz_progman16 = (HSZ)(ULONG_PTR)AddAtomA("Progman16"); } } static HSZ service16_32(HSZ hsz) { init_hsz(); if (hsz_progman == hsz) return hsz_progman16; return hsz; } static HSZ service32_16(HSZ hsz) { init_hsz(); if (hsz_progman16 == hsz) return hsz_progman; return hsz; } static HSZ topic16_32(HSZ hsz) { init_hsz(); if (hsz_progman == hsz) return hsz_progman16; return hsz; } static HSZ topic32_16(HSZ hsz) { init_hsz(); if (hsz_progman16 == hsz) return hsz_progman; return hsz; } /****************************************************************************** * DdeInitialize (DDEML.2) */ UINT16 WINAPI DdeInitialize16(LPDWORD pidInst, PFNCALLBACK16 pfnCallback, DWORD afCmd, DWORD ulRes) { UINT16 ret; DWORD count; struct ddeml_thunk* thunk; // Undocumented 0x800 causes DdeClientTransaction to call DdeUninitialize which will likely // create a deadlock with XTYP_EXECUTE if the client and server are in the same process afCmd &= ~0x800; // MF_POSTMSGS causes also deadlocks in DdeDisconnect in the client thread afCmd &= ~MF_POSTMSGS; ReleaseThunkLock(&count); EnterCriticalSection(&ddeml_cs); if ((thunk = DDEML_AddThunk(*pidInst, (DWORD)pfnCallback))) { ret = DdeInitializeA(pidInst, (PFNCALLBACK)thunk, afCmd, ulRes); if (ret == DMLERR_NO_ERROR) thunk->instId = *pidInst; } else ret = DMLERR_SYS_ERROR; LeaveCriticalSection(&ddeml_cs); RestoreThunkLock(count); return ret; } /***************************************************************** * DdeUninitialize (DDEML.3) */ BOOL16 WINAPI DdeUninitialize16(DWORD idInst) { struct ddeml_thunk* thunk; BOOL16 ret = FALSE; if (!DdeUninitialize(idInst)) return FALSE; EnterCriticalSection(&ddeml_cs); for (thunk = DDEML16_Thunks; thunk < &DDEML16_Thunks[MAX_THUNKS]; thunk++) { if (thunk->instId == idInst) { thunk->instId = 0; ret = TRUE; break; } } LeaveCriticalSection(&ddeml_cs); if (!ret) FIXME("Should never happen\n"); return ret; } /***************************************************************** * DdeConnectList [DDEML.4] */ HCONVLIST WINAPI DdeConnectList16(DWORD idInst, HSZ hszService, HSZ hszTopic, HCONVLIST hConvList, LPCONVCONTEXT16 pCC16) { CONVCONTEXT cc; CONVCONTEXT* pCC = NULL; if (pCC16) map1632_conv_context(pCC = &cc, pCC16); return DdeConnectList(idInst, service16_32(hszService), topic16_32(hszTopic), hConvList, pCC); } /***************************************************************** * DdeQueryNextServer [DDEML.5] */ HCONV WINAPI DdeQueryNextServer16(HCONVLIST hConvList, HCONV hConvPrev) { return DdeQueryNextServer(hConvList, hConvPrev); } /***************************************************************** * DdeDisconnectList (DDEML.6) */ BOOL16 WINAPI DdeDisconnectList16(HCONVLIST hConvList) { return (BOOL16)DdeDisconnectList(hConvList); } /***************************************************************** * DdeQueryString (DDEML.23) */ DWORD WINAPI DdeQueryString16(DWORD idInst, HSZ hsz, LPSTR lpsz, DWORD cchMax, INT16 codepage) { if (codepage != CP_WINANSI) { if (!codepage || (codepage == GetKBCodePage())) WARN("Codepage %x supplied but only CP_WINANSI is supported\n", codepage); else { ERR("Invalid codepage %x\n", codepage); return DMLERR_INVALIDPARAMETER; } } return DdeQueryStringA(idInst, hsz, lpsz, cchMax, CP_WINANSI); } /***************************************************************** * DdeConnect (DDEML.7) */ HCONV WINAPI DdeConnect16(DWORD idInst, HSZ hszService, HSZ hszTopic, LPCONVCONTEXT16 pCC16) { CONVCONTEXT cc; CONVCONTEXT* pCC = NULL; if (pCC16) map1632_conv_context(pCC = &cc, pCC16); DWORD count; ReleaseThunkLock(&count); HCONV result = DdeConnect(idInst, service16_32(hszService), topic16_32(hszTopic), pCC); RestoreThunkLock(count); return result; } /***************************************************************** * DdeDisconnect (DDEML.8) */ BOOL16 WINAPI DdeDisconnect16(HCONV hConv) { return (BOOL16)DdeDisconnect(hConv); } /***************************************************************** * DdeSetUserHandle (DDEML.10) */ BOOL16 WINAPI DdeSetUserHandle16(HCONV hConv, DWORD id, DWORD hUser) { return DdeSetUserHandle(hConv, id, hUser); } /***************************************************************** * DdeCreateDataHandle (DDEML.14) */ HDDEDATA WINAPI DdeCreateDataHandle16(DWORD idInst, LPBYTE pSrc, DWORD cb, DWORD cbOff, HSZ hszItem, UINT16 wFmt, UINT16 afCmd) { return DdeCreateDataHandle(idInst, pSrc, cb, cbOff, hszItem, wFmt, afCmd); } /***************************************************************** * DdeCreateStringHandle (DDEML.21) */ HSZ WINAPI DdeCreateStringHandle16(DWORD idInst, LPCSTR str, INT16 codepage) { if (codepage != CP_WINANSI) { if (!codepage || (codepage == GetKBCodePage())) WARN("Codepage %x supplied but only CP_WINANSI is supported\n", codepage); else { ERR("Invalid codepage %x\n", codepage); return DMLERR_INVALIDPARAMETER; } } if (str && !stricmp(str, "Progman")) str = "Progman16"; return DdeCreateStringHandleA(idInst, str, CP_WINANSI); } /***************************************************************** * DdeFreeStringHandle (DDEML.22) */ BOOL16 WINAPI DdeFreeStringHandle16(DWORD idInst, HSZ hsz) { return (BOOL16)DdeFreeStringHandle(idInst, hsz); } /***************************************************************** * DdeFreeDataHandle (DDEML.19) */ BOOL16 WINAPI DdeFreeDataHandle16(HDDEDATA hData) { return (BOOL16)DdeFreeDataHandle(hData); } /***************************************************************** * DdeKeepStringHandle (DDEML.24) */ BOOL16 WINAPI DdeKeepStringHandle16(DWORD idInst, HSZ hsz) { return DdeKeepStringHandle(idInst, hsz); } /***************************************************************** * DdeClientTransaction (DDEML.11) */ HDDEDATA WINAPI DdeClientTransaction16(LPVOID pData, DWORD cbData, HCONV hConv, HSZ hszItem, UINT16 wFmt, UINT16 wType, DWORD dwTimeout, LPDWORD pdwResult) { if (cbData != (DWORD)-1) { /* pData is not a pointer if cbData is -1, so we linearize the address * here rather than in the calling code. */ pData = MapSL((SEGPTR)pData); } HDDEDATA ret; DWORD count; ReleaseThunkLock(&count); ret = DdeClientTransaction(pData, cbData, hConv, hszItem, wFmt, wType, dwTimeout, pdwResult); RestoreThunkLock(count); return ret; } /***************************************************************** * * DdeAbandonTransaction (DDEML.12) * */ BOOL16 WINAPI DdeAbandonTransaction16(DWORD idInst, HCONV hConv, DWORD idTransaction) { return (BOOL16)DdeAbandonTransaction(idInst, hConv, idTransaction); } /***************************************************************** * DdePostAdvise [DDEML.13] */ BOOL16 WINAPI DdePostAdvise16(DWORD idInst, HSZ hszTopic, HSZ hszItem) { return (BOOL16)DdePostAdvise(idInst, topic16_32(hszTopic), hszItem); } /***************************************************************** * DdeAddData (DDEML.15) */ HDDEDATA WINAPI DdeAddData16(HDDEDATA hData, LPBYTE pSrc, DWORD cb, DWORD cbOff) { return DdeAddData(hData, pSrc, cb, cbOff); } /***************************************************************** * DdeGetData [DDEML.16] */ DWORD WINAPI DdeGetData16(HDDEDATA hData, LPBYTE pDst, DWORD cbMax, DWORD cbOff) { return DdeGetData(hData, pDst, cbMax, cbOff); } /***************************************************************** * DdeAccessData (DDEML.17) */ LPBYTE WINAPI DdeAccessData16(HDDEDATA hData, LPDWORD pcbDataSize) { FIXME("expect trouble\n"); /* FIXME: there's a memory leak here... */ return (LPBYTE)MapLS(DdeAccessData(hData, pcbDataSize)); } /***************************************************************** * DdeUnaccessData (DDEML.18) */ BOOL16 WINAPI DdeUnaccessData16(HDDEDATA hData) { return DdeUnaccessData(hData); } /***************************************************************** * DdeEnableCallback (DDEML.26) */ BOOL16 WINAPI DdeEnableCallback16(DWORD idInst, HCONV hConv, UINT16 wCmd) { return DdeEnableCallback(idInst, hConv, wCmd); } /***************************************************************** * DdeNameService (DDEML.27) */ HDDEDATA WINAPI DdeNameService16(DWORD idInst, HSZ hsz1, HSZ hsz2, UINT16 afCmd) { return DdeNameService(idInst, service16_32(hsz1), hsz2, afCmd); } /***************************************************************** * DdeGetLastError (DDEML.20) */ UINT16 WINAPI DdeGetLastError16(DWORD idInst) { return (UINT16)DdeGetLastError(idInst); } /***************************************************************** * DdeCmpStringHandles (DDEML.36) */ INT16 WINAPI DdeCmpStringHandles16(HSZ hsz1, HSZ hsz2) { return DdeCmpStringHandles(hsz1, hsz2); } /****************************************************************** * DdeQueryConvInfo (DDEML.9) * */ UINT16 WINAPI DdeQueryConvInfo16(HCONV hConv, DWORD idTransaction, LPCONVINFO16 lpConvInfo) { CONVINFO ci32; CONVINFO16 ci16; UINT ret; ci32.cb = sizeof(ci32); ci32.ConvCtxt.cb = sizeof(ci32.ConvCtxt); ret = DdeQueryConvInfo(hConv, idTransaction, &ci32); if (ret == 0) return 0; ci16.cb = lpConvInfo->cb; ci16.hUser = ci32.hUser; ci16.hConvPartner = service32_16(ci32.hConvPartner); ci16.hszSvcPartner = service32_16(ci32.hszSvcPartner); ci16.hszServiceReq = service32_16(ci32.hszServiceReq); ci16.hszTopic = topic32_16(ci32.hszTopic); ci16.hszItem = topic32_16(ci32.hszItem); ci16.wFmt = ci32.wFmt; ci16.wType = ci32.wType; ci16.wStatus = ci32.wStatus; ci16.wConvst = ci32.wConvst; ci16.wLastError = ci32.wLastError; ci16.hConvList = ci32.hConvList; map3216_conv_context(&ci16.ConvCtxt, &ci32.ConvCtxt); memcpy(lpConvInfo, &ci16, lpConvInfo->cb); return lpConvInfo->cb; } ================================================ FILE: ddeml/ddeml.def ================================================ ; File generated automatically from ..\ddeml\ddeml.dll16.spec; do not edit! LIBRARY ddeml.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: ddeml/ddeml.dll16.spec ================================================ 2 pascal -ret16 DdeInitialize(ptr segptr long long) DdeInitialize16 3 pascal -ret16 DdeUninitialize(long) DdeUninitialize16 4 pascal DdeConnectList(long long long long ptr) DdeConnectList16 5 pascal DdeQueryNextServer(long long) DdeQueryNextServer16 6 pascal -ret16 DdeDisconnectList(long) DdeDisconnectList16 7 pascal DdeConnect(long long long ptr) DdeConnect16 8 pascal -ret16 DdeDisconnect(long) DdeDisconnect16 9 pascal -ret16 DdeQueryConvInfo(long long ptr) DdeQueryConvInfo16 10 pascal -ret16 DdeSetUserHandle(long long long) DdeSetUserHandle16 11 pascal DdeClientTransaction(long long long long word word long ptr) DdeClientTransaction16 12 pascal -ret16 DdeAbandonTransaction(long long long) DdeAbandonTransaction16 13 pascal -ret16 DdePostAdvise(long long long) DdePostAdvise16 14 pascal DdeCreateDataHandle(long ptr long long long word word) DdeCreateDataHandle16 15 pascal DdeAddData(long ptr long long) DdeAddData16 16 pascal DdeGetData(long ptr long long) DdeGetData16 17 pascal DdeAccessData(long ptr) DdeAccessData16 18 pascal -ret16 DdeUnaccessData(long) DdeUnaccessData16 19 pascal -ret16 DdeFreeDataHandle(long) DdeFreeDataHandle16 20 pascal -ret16 DdeGetLastError(long) DdeGetLastError16 21 pascal DdeCreateStringHandle(long str s_word) DdeCreateStringHandle16 22 pascal -ret16 DdeFreeStringHandle(long long) DdeFreeStringHandle16 23 pascal DdeQueryString(long long ptr long s_word) DdeQueryString16 24 pascal -ret16 DdeKeepStringHandle(long long) DdeKeepStringHandle16 26 pascal -ret16 DdeEnableCallback(long long word) DdeEnableCallback16 27 pascal DdeNameService(long long long word) DdeNameService16 36 pascal -ret16 DdeCmpStringHandles(long long) DdeCmpStringHandles16 37 pascal DdeReconnect(long) DdeReconnect ================================================ FILE: ddeml/ddeml.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj ddeml {D4EED8A5-2B15-4299-9F65-D56383AC7848} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib; true ddeml.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ddeml.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib; Document as --32 -o ddeml.dll16.obj ddeml.dll16.asm ddeml.dll16.asm;%(AdditionalInputs) Document "$(OutDir)convspec" "%(Filename).spec" DDEML > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" DDEML > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: dispdib/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(dispdib SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/dispdib.def dispdib.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(dispdib.dll16 dispdib) target_link_libraries(dispdib libwine winecrt0 krnl386) set_target_properties(dispdib PROPERTIES SUFFIX ".dll16") ================================================ FILE: dispdib/Makefile.in ================================================ MODULE = dispdib.dll16 EXTRADLLFLAGS = -m16 C_SRCS = dispdib.c ================================================ FILE: dispdib/dispdib.c ================================================ /* * DISPDIB.dll * * Copyright 1998 Ove Kåven (with some help from Marcus Meissner) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "mmsystem.h" #include "wine/wingdi16.h" #include "windows/dispdib.h" #include "wine/debug.h" #include "../krnl386/dosexe.h" WINE_DEFAULT_DEBUG_CHANNEL(ddraw); #define width 320 static HTASK16 owner = 0; static HDC dddc; static int height; static HWND ddhwnd; static INTPROC oldproc; static OUTPROC oldout[0x20]; static INPROC oldin[0x20]; static HANDLE running = 0; static BOOL vsync = FALSE; static BOOL hsync = FALSE; static LPVOID vram; static void draw() { RECT rect; int new_width, new_height; const double r = 4.0 / 3.0; HDC dc = GetDC(ddhwnd); GetClientRect(ddhwnd, &rect); /* aspect */ if (rect.right / r > rect.bottom) { new_height = rect.bottom; new_width = rect.bottom * r; RECT frect = rect; frect.left = 0; frect.right = (rect.right - new_width) / 2; FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH)); frect.left = rect.right - (rect.right - new_width) / 2; frect.right = rect.right; FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH)); } else { new_width = rect.right; new_height = rect.right / r; RECT frect = rect; frect.top = 0; frect.bottom = (rect.bottom - new_height) / 2; FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH)); frect.top = rect.bottom - (rect.bottom - new_height) / 2; frect.bottom = rect.bottom; FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH)); } StretchBlt(dc, (rect.right - new_width) / 2, (rect.bottom - new_height) / 2, new_width, new_height, dddc, 0, 0, width, height, SRCCOPY); ReleaseDC(ddhwnd, dc); } static LRESULT CALLBACK ddwndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static BOOL focus = FALSE, showcur = TRUE; HWND parhwnd = (HWND)GetWindowLongA(hwnd, GWL_HWNDPARENT); switch (uMsg) { case WM_KILLFOCUS: if (!showcur) { ShowCursor(TRUE); showcur = TRUE; } case WM_SETFOCUS: focus = uMsg == WM_SETFOCUS; case WM_KEYDOWN: case WM_KEYUP: case WM_CHAR: case WM_DEADCHAR: case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_SYSCHAR: case WM_SYSDEADCHAR: case WM_UNICHAR: case WM_TIMER: case WM_CLOSE: return CallWindowProcA((WNDPROC)GetWindowLongA(parhwnd, GWL_WNDPROC), parhwnd, uMsg, wParam, lParam); case WM_SETCURSOR: if ((LOWORD(lParam) == HTCLIENT) && focus && showcur) { ShowCursor(FALSE); showcur = FALSE; } else if (((LOWORD(lParam) != HTCLIENT) || !focus) && !showcur) { ShowCursor(TRUE); showcur = TRUE; } break; } if ((uMsg >= WM_MOUSEMOVE && uMsg <= WM_MBUTTONDOWN) || uMsg >= MM_JOY1MOVE) return CallWindowProcA((WNDPROC)GetWindowLongA(parhwnd, GWL_WNDPROC), parhwnd, uMsg, wParam, lParam); return DefWindowProcA(hwnd, uMsg, wParam, lParam); } static void CALLBACK retrace_cb(LPVOID arg, DWORD low, DWORD high) { vsync = TRUE; if (WaitForSingleObject(running, 0)) { SetEvent(running); ExitThread(0); } SetBitmapBits(GetCurrentObject(dddc, OBJ_BITMAP), width * height, vram); draw(); } static DWORD CALLBACK retrace_th(LPVOID arg) { LARGE_INTEGER when; HANDLE timer; if (!(timer = CreateWaitableTimerA( NULL, FALSE, NULL ))) return 0; when.u.LowPart = when.u.HighPart = 0; SetWaitableTimer(timer, &when, 17, retrace_cb, arg, FALSE); for (;;) SleepEx(INFINITE, TRUE); } static void start_retrace_timer() { if (running) return; if (height == 240) FIXME("240 px height doesn't work properly with direct fb access\n"); running = CreateEventA(NULL, TRUE, TRUE, NULL); vram = MapSL((DWORD)GetProcAddress16(GetModuleHandle16("KERNEL"), (LPCSTR)174) << 16); CloseHandle(CreateThread(NULL, 0, retrace_th, NULL, 0, NULL)); } static void WINAPI ddInt10Handler(CONTEXT *context) { if (GetCurrentTask() != owner) { oldproc(context); return; } switch (AH_reg(context)) { case 0x00: start_retrace_timer(); switch (AL_reg(context)) { case 0x13: height = 200; break; default: FIXME("Vid mode %#x not supported\n", AL_reg(context)); break; } break; case 0x10: switch (AL_reg(context)) { case 0x12: { BYTE *ptr = MapSL(MAKESEGPTR(context->SegEs, DX_reg(context))); for (int i = BX_reg(context); i < CX_reg(context); i++) { RGBQUAD color; color.rgbRed = (ptr[i * 3] << 2) | (ptr[i * 3] >> 4); color.rgbGreen = (ptr[i * 3 + 1] << 2) | (ptr[i * 3 + 1] >> 4); color.rgbBlue = (ptr[i * 3 + 2] << 2) | (ptr[i * 3 + 2] >> 4); color.rgbReserved = 0; SetDIBColorTable(dddc, i & 0xff, 1, &color); } } } break; default: FIXME("Int 10 func: %#x unimplemented\n", AH_reg(context)); break; } } static DWORD WINAPI ddVGAinHandler(int port, int size) { if (GetCurrentTask() != owner) return oldin[port - 0x3c0] ? oldin[port - 0x3c0](port, size) : 0; DWORD ret = -1; switch (port) { case 0x3da: { start_retrace_timer(); ret = vsync ? 9 : 0; vsync = FALSE; hsync = !hsync; if (!ret) ret = hsync ? 1 : 0; break; } default: FIXME("vga port %#x unimplemented\n", port); break; } return ret; } static void WINAPI ddVGAoutHandler(int port, int size, DWORD value) { if (GetCurrentTask() != owner) { if (oldout[port - 0x3c0]) oldout[port - 0x3c0](port, size, value); return; } if ((port & ~3) != 0x3c8) start_retrace_timer(); static BYTE dacidx; static BYTE dacclr = 0; switch (port) { case 0x3c8: dacidx = value & 0xff; dacclr = 0; if (size == 1) break; value >>= 8; case 0x3c9: { RGBQUAD color; GetDIBColorTable(dddc, dacidx, 1, &color); switch (dacclr++) { case 0: color.rgbRed = (BYTE)value << 2; break; case 1: color.rgbGreen = (BYTE)value << 2; break; case 2: color.rgbBlue = (BYTE)value << 2; dacclr = 0; break; } SetDIBColorTable(dddc, dacidx, 1, &color); if (!dacclr) dacidx++; break; } default: FIXME("vga port %#x unimplemented\n", port); break; } } /********************************************************************* * DisplayDib (DISPDIB.1) * * Disables GDI and takes over the VGA screen to show DIBs in full screen. * * FLAGS * * DISPLAYDIB_NOPALETTE: don't change palette * DISPLAYDIB_NOCENTER: don't center bitmap * DISPLAYDIB_NOWAIT: don't wait (for keypress) before returning * DISPLAYDIB_BEGIN: start of multiple calls (does not restore the screen) * DISPLAYDIB_END: end of multiple calls (restores the screen) * DISPLAYDIB_MODE_DEFAULT: default display mode * DISPLAYDIB_MODE_320x200x8: Standard VGA 320x200 256 colors * DISPLAYDIB_MODE_320x240x8: Tweaked VGA 320x240 256 colors * * RETURNS * * DISPLAYDIB_NOERROR: success * DISPLAYDIB_NOTSUPPORTED: function not supported * DISPLAYDIB_INVALIDDIB: null or invalid DIB header * DISPLAYDIB_INVALIDFORMAT: invalid DIB format * DISPLAYDIB_INVALIDTASK: not called from current task * * BUGS * * Waiting for keypresses is not implemented. */ WORD WINAPI DisplayDib( LPBITMAPINFO lpbi, /* [in] DIB header with resolution and palette */ LPSTR lpBits, /* [in] Bitmap bits to show */ WORD wFlags /* [in] */ ) { HTASK16 task = GetCurrentTask(); if ((wFlags & DISPLAYDIB_BEGIN) && !owner) { switch (wFlags & DISPLAYDIB_MODE) { default: return DISPLAYDIB_NOTSUPPORTED; case DISPLAYDIB_MODE_DEFAULT: case DISPLAYDIB_MODE_320x200x8: height = 200; break; case DISPLAYDIB_MODE_320x240x8: height = 240; break; } WNDCLASSA wc; if (!GetClassInfoA(GetModuleHandleA(NULL), "DispDibClass", &wc)) { WNDCLASSA ddwc = {0}; ddwc.style = CS_HREDRAW | CS_VREDRAW; ddwc.lpfnWndProc = ddwndproc; ddwc.hInstance = GetModuleHandleA(NULL); ddwc.lpszClassName = "DispDibClass"; if (!RegisterClassA(&ddwc)) return DISPLAYDIB_NOTSUPPORTED; } owner = task; dddc = CreateCompatibleDC(0); BITMAPINFO *bmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256*4 + sizeof(BITMAPINFOHEADER)); VOID *section; bmap->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmap->bmiHeader.biWidth = width; bmap->bmiHeader.biHeight = height; bmap->bmiHeader.biPlanes = 1; bmap->bmiHeader.biBitCount = 8; HBITMAP ddbmap = CreateDIBSection(dddc, bmap, DIB_RGB_COLORS, §ion, NULL, 0); HeapFree(GetProcessHeap(), 0, bmap); SelectObject(dddc, ddbmap); char title[32] = "\0"; HWND parhwnd = GetActiveWindow(); GetWindowTextA(parhwnd, title, 32); if (title[0] == '\0') GetModuleName16(GetCurrentTask(), title, 32); ddhwnd = CreateWindowExA(0, "DispDibClass", title, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, parhwnd, NULL, GetModuleHandleA(NULL), NULL); if (!ddhwnd) { owner = 0; return DISPLAYDIB_NOTSUPPORTED; } oldproc = DOSVM_SetBuiltinVector(0x10, ddInt10Handler); for (int i = 0; i < 0x20; i++) DOSVM_setportcb(ddVGAoutHandler, ddVGAinHandler, i + 0x3c0, &oldout[i], &oldin[i]); return DISPLAYDIB_NOERROR; } else if ((owner != task) || !owner) return DISPLAYDIB_INVALIDTASK; else if (wFlags & DISPLAYDIB_END) { DestroyWindow(ddhwnd); DeleteDC(dddc); DOSVM_SetBuiltinVector(0x10, oldproc); for (int i = 0; i < 0x20; i++) DOSVM_setportcb(oldout[i], oldin[i], i + 0x3c0, &oldout[i], &oldin[i]); if (running) { ResetEvent(running); WaitForSingleObject(running, INFINITE); CloseHandle(running); running = 0; } owner = 0; return DISPLAYDIB_NOERROR; } if (!(wFlags & DISPLAYDIB_NOPALETTE)) { if (!lpbi) return DISPLAYDIB_INVALIDDIB; SetDIBColorTable(dddc, 0, lpbi->bmiHeader.biClrUsed, (RGBQUAD *)&lpbi->bmiColors); } if(!(wFlags & /*DISPLAYDIB_NOIMAGE*/ 0x80)) { if (!lpBits) return DISPLAYDIB_INVALIDDIB; SetDIBitsToDevice(dddc, 0, 0, width, height, 0, 0, 0, height, lpBits, lpbi, DIB_RGB_COLORS); draw(); } return DISPLAYDIB_NOERROR; } ================================================ FILE: dispdib/dispdib.def ================================================ ; File generated automatically from dispdib\dispdib.dll16.spec; do not edit! LIBRARY dispdib.dll16 EXPORTS _wine_spec_dos_header; @1 DATA PRIVATE ================================================ FILE: dispdib/dispdib.dll16.spec ================================================ 1 pascal -ret16 DisplayDib(ptr ptr word) DisplayDib ================================================ FILE: dispdib/dispdib.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj dispdib {3D889B37-09C8-4030-B815-830566CD57A4} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) true dispdib.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false dispdib.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) Document as --32 -o dispdib.dll16.obj ddeml.dll16.asm dispdib.dll16.asm;%(AdditionalInputs) Document "$(OutDir)convspec" "%(Filename).spec" DISPDIB > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" DISPDIB > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: display/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(display SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/display.def display.drv16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(display.drv16 display) target_link_libraries(display libwine winecrt0 krnl386) set_target_properties(display PROPERTIES SUFFIX ".drv16") ================================================ FILE: display/Makefile.in ================================================ MODULE = display.drv16 IMPORTS = user32 EXTRADLLFLAGS = -m16 C_SRCS = display.c RC_SRCS = display.rc ================================================ FILE: display/display.c ================================================ /* * DISPLAY driver * * Copyright 1998 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "wine/debug.h" #include "windef.h" #include "winbase.h" #include "wine/winuser16.h" WINE_DEFAULT_DEBUG_CHANNEL(cursor); #include "pshpack1.h" typedef struct tagCURSORINFO16 { WORD wXMickeys; WORD wYMickeys; } CURSORINFO16, *PCURSORINFO16, *LPCURSORINFO16; #include "poppack.h" /*********************************************************************** * Inquire (DISPLAY.101) */ WORD WINAPI Inquire16(LPCURSORINFO16 lpCursorInfo) { lpCursorInfo->wXMickeys = 1; lpCursorInfo->wYMickeys = 1; return sizeof(CURSORINFO16); } /*********************************************************************** * SetCursor (DISPLAY.102) */ VOID WINAPI DISPLAY_SetCursor( struct tagCURSORICONINFO *lpCursor ) { FIXME("stub\n" ); } /*********************************************************************** * MoveCursor (DISPLAY.103) */ VOID WINAPI MoveCursor16( WORD wAbsX, WORD wAbsY ) { SetCursorPos( wAbsX, wAbsY ); } /*********************************************************************** * CheckCursor (DISPLAY.104) */ VOID WINAPI CheckCursor16( void ) { TRACE("stub\n" ); } /*********************************************************************** * GetDriverResourceID (DISPLAY.450) * * Used by USER to check if driver contains better version of a builtin * resource than USER (yes, our DISPLAY does !). * wQueriedResID is the ID USER asks about. * lpsResName does often contain "OEMBIN". */ DWORD WINAPI GetDriverResourceID16( WORD wQueriedResID, LPSTR lpsResName ) { if (wQueriedResID == 3) return (DWORD)1; return (DWORD)wQueriedResID; } /*********************************************************************** * UserRepaintDisable (DISPLAY.500) */ VOID WINAPI UserRepaintDisable16( BOOL16 disable ) { FIXME("stub\n"); } WORD WINAPI SetPaletteTranslate16( WORD wNumEntries, LPBYTE lpTranslate) { WARN("stub\n"); return 0; } ================================================ FILE: display/display.def ================================================ ; File generated automatically from display\display.drv16.spec; do not edit! LIBRARY display.drv16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: display/display.drv16.spec ================================================ 1 stub BitBlt 2 stub ColorInfo 3 stub Control 4 stub Disable 5 stub Enable 6 stub EnumFonts 7 stub EnumObj 8 stub Output 9 stub Pixel 10 stub RealizeObject 11 stub StrBlt 12 stub ScanLR 13 stub DeviceMode 14 stub ExtTextOut 15 stub GetCharWidth 16 stub DeviceBitmap 17 stub FastBorder 18 stub SetAttribute 19 stub DeviceBitmapBits 20 stub CreateBitmap 21 stub DIBScreenBlt # ATI driver exports 22 stub SetPalette 23 stub GetPalette 24 pascal -ret16 SetPaletteTranslate(word ptr) SetPaletteTranslate16 25 stub GetPaletteTranslate 26 stub UpdateColors 27 stub StretchBlt 28 stub StretchDIBits 29 stub SelectBitmap 30 stub BitmapBits 31 stub ReEnable # these conflict with ordinals 19-21, thus relocated to 39-41 ! 39 stub DIBBlt 40 stub CreateDIBitmap 41 stub DIBToDevice # ATI driver end 90 stub Do_Polylines 91 stub Do_Scanlines 92 stub SaveScreenBitmap 101 pascal -ret16 Inquire(ptr) Inquire16 102 pascal -ret16 SetCursor(ptr) DISPLAY_SetCursor 103 pascal -ret16 MoveCursor(word word) MoveCursor16 104 pascal -ret16 CheckCursor() CheckCursor16 400 stub PExtTextOut 401 stub PStrBlt 402 stub RExtTextOut 403 stub RStrBlt 450 pascal GetDriverResourceID(word str) GetDriverResourceID16 500 pascal -ret16 UserRepaintDisable(word) UserRepaintDisable16 501 stub ORDINAL_ONLY1 502 stub ORDINAL_ONLY2 600 stub InkReady 601 stub GetLPDevice ================================================ FILE: display/display.rc ================================================ /* * resource file for DISPLAY driver dll * * Copyright 1999 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ 1 OEMBIN { 0x11, /* vertical thumb height (in pixels) */ 0x11, /* horizontal thumb width (in pixels) */ 0x02, /* icon width (in pixels) */ 0x02, /* icon height (in pixels) */ 0x01, /* cursor width (in pixels) */ 0x01, /* cursor height (in pixels) */ 0x00, /* reserved */ 0x01, /* vertical-line width */ 0x01, /* horizontal-line width */ /* default system color values */ 0x00d4d0c8L, /* scrollbar */ 0x00d4d0c8L, /* desktop */ 0x00800000L, /* active caption */ 0x00ffffffL, /* inactive caption */ 0x00ffffffL, /* menu */ 0x00ffffffL, /* window */ 0x00000000L, /* window frame */ 0x00000000L, /* menu text */ 0x00000000L, /* window text */ 0x00ffffffL, /* caption text */ 0x00d4d0c8L, /* active border */ 0x00d4d0c8L, /* inactive border */ 0x00ffffffL, /* app workspace */ 0x00800000L, /* hilite bk */ 0x00ffffffL, /* hilite text */ 0x00d4d0c8L, /* btn face */ 0x00808080L, /* btn shadow */ 0x00c0c0c0L, /* gray text */ 0x00000000L, /* btn text */ 0x00000000L /* inactive caption text */ } /* @makedep: oic_hand.ico */ 1 ICON oic_hand.ico ================================================ FILE: display/display.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 display {E0AF9E72-F364-481A-A6E5-63EA88DF684E} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .drv16 false Release .drv16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib true display.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false display.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib Document "$(OutDir)convspec" "%(Filename).spec" DISPLAY > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: dummy.c ================================================ ================================================ FILE: gdi/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp) add_library(gdi SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/gdi.def gdi.exe16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(gdi.exe16 GDI ARG --heap 65520) target_link_libraries(gdi libwine winecrt0 krnl386 user winspool) set_target_properties(gdi PROPERTIES SUFFIX ".exe16") ================================================ FILE: gdi/bidi.c ================================================ /* * Win16 BiDi functions * Copyright 2000 Erez Volk * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * NOTE: Right now, most of these functions do nothing. */ #include #include "windef.h" #include "winbase.h" #include "wine/wingdi16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(gdi); /*********************************************************************** * RawTextOut (GDI.530) */ LONG WINAPI RawTextOut16(HDC16 hdc, INT16 x, INT16 y, LPCSTR str, INT16 count) { FIXME("(%04x,%d,%d,%s,%d)\n", hdc, x, y, debugstr_an(str, count), count); return TextOut16(hdc, x, y, str, count); } /*********************************************************************** * RawExtTextOut (GDI.531) */ LONG WINAPI RawExtTextOut16( HDC16 hdc, INT16 x, INT16 y, UINT16 flags, const RECT16 *lprect, LPCSTR str, UINT16 count, const INT16 *lpDx ) { FIXME("(%04x,%d,%d,%04x,%p,%s,%d,%p)\n", hdc, x, y, flags, lprect, debugstr_an(str, count), count, lpDx); return ExtTextOut16(hdc, x, y, flags, lprect, str, count, lpDx); } /*********************************************************************** * RawGetTextExtent (GDI.532) */ LONG WINAPI RawGetTextExtent16(HDC16 hdc, LPCSTR lpszString, INT16 cbString ) { FIXME("(%04hx, %p, %hd): stub\n", hdc, lpszString, cbString); return GetTextExtent16(hdc, lpszString, cbString); } /*********************************************************************** * RawGetTextExtentEx (GDI.533) */ LONG WINAPI RawGetTextExtentEx16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiLayout (GDI.536) */ LONG WINAPI BiDiLayout16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCreateTabString (GDI.537) */ LONG WINAPI BiDiCreateTabString16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCreateString (GDI.538) */ LONG WINAPI BiDiCreateString16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiStringOut (GDI.539) */ LONG WINAPI BiDiStringOut16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiGlyphOut (GDI.540) */ LONG WINAPI BiDiGlyphOut16(WORD a1, WORD a2, WORD a3, WORD a4, LPCSTR a5, WORD a6, WORD a7, WORD a8) { FIXME("stub(%04x,%04x,%04x,%04x,%s,%04x,%04x,%04x)\n", a1, a2, a3, a4, debugstr_a(a5), a6, a7, a8); return 0; } /*********************************************************************** * BiDiJustifyString (GDI.541) */ LONG WINAPI BiDiJustifyString16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiSetStringTabs (GDI.542) */ LONG WINAPI BiDiSetStringTabs16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiGetStringExtent (GDI.543) */ LONG WINAPI BiDiGetStringExtent16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiGetNextGlyph (GDI.544) */ LONG WINAPI BiDiGetNextGlyph16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiGetPrevGlyph (GDI.545) */ LONG WINAPI BiDiGetPrevGlyph16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiIsStringRTL (GDI.546) */ LONG WINAPI BiDiIsStringRTL16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiGlyphLength (GDI.547) */ LONG WINAPI BiDiGlyphLength16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCaretStringToPel (GDI.548) */ LONG WINAPI BiDiCaretStringTopel16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCaretPelToString (GDI.549) */ LONG WINAPI BiDiCaretPelToString16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiStringToGlyph (GDI.550) */ LONG WINAPI BiDiStringToGlyph16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiGlyphToString (GDI.551) */ LONG WINAPI BiDiGlyphToString16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiPelToGlyph (GDI.552) */ LONG WINAPI BiDiPelToGlyph16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiGlyphToPel (GDI.553) */ LONG WINAPI BiDiGlyphToPel16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiBounds (GDI.554) */ LONG WINAPI BiDiBounds16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiDeleteString (GDI.555) */ LONG WINAPI BiDiDeleteString16(WORD a1) { FIXME("stub(%04x)\n", a1); return 0; } /*********************************************************************** * BiDiSetDefaults (GDI.556) */ LONG WINAPI BiDiSetDefaults16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiGetDefaults (GDI.558) */ LONG WINAPI BiDiGetDefaults16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCalcString16 (GDI.559) */ LONG WINAPI BiDiCalcString16(WORD a1, WORD a2, LPCSTR a3, WORD a4, WORD a5, WORD a6, WORD a7, WORD a8) { FIXME("stub(%04x,%04x,%p,%04x,%04x,%04x,%04x,%04x)\n", a1, a2, a3, a4, a5, a6, a7, a8); return 0; } /*********************************************************************** * BiDiShape (GDI.560) */ LONG WINAPI BiDiShape16(WORD a1, WORD a2, WORD a3, WORD a4, WORD a5, WORD a6, WORD a7, WORD a8, WORD a9, WORD a10, WORD a11, WORD a12, LPCSTR a13, WORD a14, WORD a15, WORD a16, WORD a17, WORD a18, WORD a19, WORD a20) { FIXME("stub(%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,", a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); FIXME("%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x)\n", a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); return 0; } /*********************************************************************** * BiDiFontComplement (GDI.561) */ LONG WINAPI BiDiFontComplement16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCalcTabString (GDI.563) */ LONG WINAPI BiDiCalcTabString16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiSetKashida (GDI.564) */ LONG WINAPI BiDiSetKashida16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiKExtTextOut (GDI.565) */ LONG WINAPI BiDiKExtTextOut16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiShapeEx (GDI.566) */ LONG WINAPI BiDiShapeEx16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCreateStringEx (GDI.569) */ LONG WINAPI BiDiCreateStringEx16(WORD a1, WORD a2, WORD a3, LPVOID a4, WORD a5, WORD a6, WORD a7, WORD a8, WORD a9) { FIXME("stub(%04x,%04x,%04x,%p,%04x,%04x,%04x,%04x,%04x)\n", a1, a2, a3, a4, a5, a6, a7, a8, a9); return 0; } /*********************************************************************** * GetUnicodeMap (GDI.570) */ LONG WINAPI GetUnicodeMap16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * GetTextExtentRtoL (GDI.571) */ LONG WINAPI GetTextExtentRtoL16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * GetHDCCharSet (GDI.572) */ LONG WINAPI GetHDCCharSet16(HDC16 a1) { FIXME("stub(%04x)\n", a1); return 0; } /*********************************************************************** * BiDiLayoutEx (GDI.573) */ LONG 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) { 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); return 0; } /*********************************************************************** * BiDiCreateTabStringEx (GDI.574) */ LONG WINAPI BiDiCreateTabStringEx16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCalcTabStringEx (GDI.575) */ LONG WINAPI BiDiCalcTabStringEx16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * BiDiCalcStringEx (GDI.576) */ LONG WINAPI BiDiCalcStringEx16(void) { FIXME("stub (no prototype)\n"); return 0; } /*********************************************************************** * SetTextCodePage (GDI.588) */ LONG WINAPI SetTextCodePage16(WORD a1, WORD a2) { FIXME("stub(%04x,%04x)\n", a1, a2); return 0; } /*********************************************************************** * GetTextCodePage (GDI.589) */ LONG WINAPI GetTextCodePage16() { FIXME("stub(np)\n"); return 0; } ================================================ FILE: gdi/env.c ================================================ /* * Driver Environment functions * * Note: This has NOTHING to do with the task/process environment! * * Copyright 1997 Marcus Meissner * Copyright 1998 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "wine/wingdi16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(gdi); typedef struct { ATOM atom; HGLOBAL16 handle; } ENVTABLE; static ENVTABLE EnvTable[20]; static ENVTABLE *SearchEnvTable(ATOM atom) { INT16 i; for (i = 19; i >= 0; i--) { if (EnvTable[i].atom == atom) return &EnvTable[i]; } return NULL; } static ATOM GDI_GetNullPortAtom(void) { static ATOM NullPortAtom = 0; if (!NullPortAtom) { char NullPort[256]; GetProfileStringA( "windows", "nullport", "none", NullPort, sizeof(NullPort) ); NullPortAtom = AddAtomA( NullPort ); } return NullPortAtom; } static ATOM PortNameToAtom(LPCSTR lpPortName, BOOL16 add) { char buffer[256]; lstrcpynA( buffer, lpPortName, sizeof(buffer) ); if (buffer[0] && buffer[strlen(buffer)-1] == ':') buffer[strlen(buffer)-1] = 0; if (add) return AddAtomA(buffer); else return FindAtomA(buffer); } /*********************************************************************** * GetEnvironment (GDI.133) */ INT16 WINAPI GetEnvironment16(LPCSTR lpPortName, LPDEVMODEA lpdev, UINT16 nMaxSize) { ATOM atom; LPCSTR p; ENVTABLE *env; WORD size; TRACE("('%s', %p, %d)\n", lpPortName, lpdev, nMaxSize); if (!(atom = PortNameToAtom(lpPortName, FALSE))) return 0; if (atom == GDI_GetNullPortAtom()) if (!(atom = FindAtomA((LPCSTR)lpdev))) return 0; if (!(env = SearchEnvTable(atom))) return 0; size = GlobalSize16(env->handle); if (!lpdev) return 0; if (size < nMaxSize) nMaxSize = size; if (!(p = GlobalLock16(env->handle))) return 0; memcpy(lpdev, p, nMaxSize); GlobalUnlock16(env->handle); return nMaxSize; } /*********************************************************************** * SetEnvironment (GDI.132) */ INT16 WINAPI SetEnvironment16(LPCSTR lpPortName, LPDEVMODEA lpdev, UINT16 nCount) { ATOM atom; BOOL16 nullport = FALSE; LPCSTR port_name; LPSTR device_mode; ENVTABLE *env; HGLOBAL16 handle; TRACE("('%s', %p, %d)\n", lpPortName, lpdev, nCount); if ((atom = PortNameToAtom(lpPortName, FALSE))) { if (atom == GDI_GetNullPortAtom()) { nullport = TRUE; atom = FindAtomA((LPCSTR)lpdev); } env = SearchEnvTable(atom); GlobalFree16(env->handle); env->atom = 0; } if (nCount) { /* store DEVMODE struct */ if (nullport) port_name = (LPSTR)lpdev; else port_name = lpPortName; if ((atom = PortNameToAtom(port_name, TRUE)) && (env = SearchEnvTable(0)) && (handle = GlobalAlloc16(GMEM_SHARE|GMEM_MOVEABLE, nCount))) { if (!(device_mode = GlobalLock16(handle))) { GlobalFree16(handle); return 0; } env->atom = atom; env->handle = handle; memcpy(device_mode, lpdev, nCount); GlobalUnlock16(handle); return handle; } else return 0; } else return -1; } ================================================ FILE: gdi/gdi.c ================================================ /* * GDI 16-bit functions * * Copyright 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "wownt32.h" #define ExtDeviceMode WINAPI ExtDeviceMode #include "winspool.h" #undef ExtDeviceMode #include "wine/wingdi16.h" #include "wine/list.h" #if 0 #include "wine/gdi_driver.h" #endif #include "wine/debug.h" #include "wine/exception.h" #define STRSAFE_NO_DEPRECATE #include #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define DIBINDEX(n) MAKELONG((n),0x10FF) WINE_DEFAULT_DEBUG_CHANNEL(gdi); //#define HGDIOBJ_32(handle16) ((HGDIOBJ)(ULONG_PTR)(handle16)) //#define HGDIOBJ_16(handle32) ((HGDIOBJ16)(ULONG_PTR)(handle32)) __declspec(dllimport) HGDIOBJ16 K32HGDIOBJ_16(HGDIOBJ handle); __declspec(dllimport) HGDIOBJ K32HGDIOBJ_32(HGDIOBJ16 handle); #define HGDIOBJ_32(handle16) (K32HGDIOBJ_32(handle16)) #define HGDIOBJ_16(handle32) (K32HGDIOBJ_16(handle32)) void WINAPI K32WOWHandle16Destroy(HANDLE handle, WOW_HANDLE_TYPE type); static BYTE fix_font_charset(BYTE charset); int WINAPI set_realized_palette(HDC hdc); HPALETTE WINAPI get_realized_palette(); struct saved_visrgn { struct list entry; HDC hdc; HRGN hrgn; }; static struct list saved_regions = LIST_INIT( saved_regions ); static HPALETTE16 hPrimaryPalette; static UINT16 syspaluse = SYSPAL_STATIC; static HGDIOBJ16 stock[STOCK_LAST + 2] = {0}; void WINAPI DibMapGlobalMemory(WORD sel, void *base, DWORD size); void WINAPI DibUnmapGlobalMemory(void *base, DWORD size); void WINAPI GlobalMapInternal(WORD sel, void *base, DWORD size); struct dib_driver { struct list entry; HDC hdc; HANDLE hSection; LPVOID map; HBITMAP bitmap; WORD selector; DWORD size; DWORD padding; }; static struct list dib_drivers = LIST_INIT(dib_drivers); // on windows 3.1 in 8bit color mode: // RGB() is matched to the 20 system colors // PALETTEINDEX() is a direct index to the dc palette, 0 if out of range // PALETTERGB() is matched to the dc palette // DIBINDEX() only applies to dib.drv dcs // color is treated as RGB() unless high byte is exactly 1, 2 or high word 0x10ff for DIBINDEX() // // on windows 10 in 24bit color mode: // RGB() is the direct color // PALETTEINDEX() is a direct index to the dc palette, 0 if out of range // PALETTERGB() is the direct color // DIBINDEX() is 0 for non-dib dcs // color is treated as PALETTEINDEX() if bit 16 is set else DIBINDEX() if bit 24 is set and byte 3 is 0xff // // ntvdm in 8bit color mode behaves like win3.1 with DIBINDEX() static COLORREF check_colorref(COLORREF color) { int type = color >> 16; if ((type != 0x10ff) && ((type & 0xff00) != 0x100) && ((type & 0xff00) != 0x200)) color &= 0xffffff; return color; } // convert the colorref to a 8bpp dib compatible index value using the rules above // GDI should just look up PALETTERGB in the dib palette static COLORREF convert_colorref(COLORREF color) { int type = color >> 24; int index; switch (type) { case 0: index = GetNearestPaletteIndex(GetStockObject(DEFAULT_PALETTE), color); if (index >= 10) index += 236; return DIBINDEX(index); case 1: return DIBINDEX(color & 0xff); } return color; } static void set_dib_colors(HDC hdc) { PALETTEENTRY pal[256] = {0}; GetPaletteEntries(GetCurrentObject(hdc, OBJ_PAL), 0, 256, &pal); for (int i = 0; i < 256; i++) { BYTE tmp = pal[i].peRed; pal[i].peRed = pal[i].peBlue; pal[i].peBlue = tmp; } SetDIBColorTable(hdc, 0, 256, &pal); } // some programs such as pirates use a palette with start offset 0 // but the bitmap offsets every pixel by 10. this is used to shortcut the // foreground palette reindex after realization. it works because windows // will store the bitmap using foreground indexes but createbitmap and // setbitmapbits bypasses that. other programs such as darkseed // check the value of the foreground indexes before calling setbitmapbits. // to make it work we'd have to reimplement all of gdi so just add a hack here static void set_dib_colors_for_screen(HDC hdc) { char modulename[32]; GetModuleName16(GetCurrentTask(), modulename, 32); if (strcmp(modulename, "WINPIR")) return set_dib_colors(hdc); PALETTEENTRY pal[256] = {0}; PALETTEENTRY syspal[10]; PALETTEENTRY tmp; GetPaletteEntries(GetCurrentObject(hdc, OBJ_PAL), 0, 256, &pal); GetSystemPaletteEntries(hdc, 0, 10, &syspal); for (int i = 235; i >= 0; i--) { tmp.peBlue = pal[i].peRed; tmp.peGreen = pal[i].peGreen; tmp.peRed = pal[i].peBlue; pal[i + 10].peRed = tmp.peRed; pal[i + 10].peGreen = tmp.peGreen; pal[i + 10].peBlue = tmp.peBlue; } for (int i = 0; i < 10; i++) { pal[i].peBlue = syspal[i].peRed; pal[i].peGreen = syspal[i].peGreen; pal[i].peRed = syspal[i].peBlue; } SetDIBColorTable(hdc, 0, 256, &pal); } // hack so pirates won't read from the screen when the palette is blank static BOOL is_blank_palette(HPALETTE hpal) { PALETTEENTRY pal[236]; int count = GetPaletteEntries(hpal, 0, 236, &pal); for (int i = 0; i < count; i++) { if (((DWORD *)pal)[i] & 0xffffff) return FALSE; } return TRUE; } /* * ############################################################################ */ #include #define GDI_MAX_THUNKS 32 static struct gdi_thunk { BYTE popl_eax; /* popl %eax (return address) */ BYTE pushl_pfn16; /* pushl pfn16 */ DWORD pfn16; /* pfn16 */ BYTE pushl_eax; /* pushl %eax */ BYTE jmp; /* ljmp GDI_Callback3216 */ DWORD callback; HDC16 hdc; } *GDI_Thunks; #include /********************************************************************** * GDI_Callback3216 */ static BOOL CALLBACK GDI_Callback3216( DWORD pfn16, HDC hdc, INT code ) { if (pfn16) { WORD args[2]; DWORD ret; args[1] = HDC_16(hdc); args[0] = code; WOWCallback16Ex( pfn16, WCB16_PASCAL, sizeof(args), args, &ret ); return LOWORD(ret); } return TRUE; } /****************************************************************** * GDI_AddThunk * */ static struct gdi_thunk* GDI_AddThunk(HDC16 dc16, ABORTPROC16 pfn16) { struct gdi_thunk* thunk; if (!GDI_Thunks) { GDI_Thunks = VirtualAlloc(NULL, GDI_MAX_THUNKS * sizeof(*GDI_Thunks), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (!GDI_Thunks) { return NULL; } for (thunk = GDI_Thunks; thunk < &GDI_Thunks[GDI_MAX_THUNKS]; thunk++) { thunk->popl_eax = 0x58; /* popl %eax */ thunk->pushl_pfn16 = 0x68; /* pushl pfn16 */ thunk->pfn16 = 0; thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->jmp = 0xe9; /* jmp GDI_Callback3216 */ thunk->callback = (char *)GDI_Callback3216 - (char *)(&thunk->callback + 1); } } for (thunk = GDI_Thunks; thunk < &GDI_Thunks[GDI_MAX_THUNKS]; thunk++) { if (thunk->pfn16 == 0) { thunk->pfn16 = (DWORD)pfn16; thunk->hdc = dc16; return thunk; } } FIXME("Out of mmdrv-thunks. Bump GDI_MAX_THUNKS\n"); return NULL; } /****************************************************************** * GDI_DeleteThunk */ static void GDI_DeleteThunk(struct gdi_thunk* thunk) { thunk->pfn16 = 0; } /****************************************************************** * GDI_FindThunk */ static struct gdi_thunk* GDI_FindThunk(HDC16 hdc) { struct gdi_thunk* thunk; if (!GDI_Thunks) return NULL; for (thunk = GDI_Thunks; thunk < &GDI_Thunks[GDI_MAX_THUNKS]; thunk++) { if (thunk->hdc == hdc) return thunk; } return NULL; } /********************************************************************** * QueryAbort (GDI.155) * * Calls the app's AbortProc function if avail. * * RETURNS * TRUE if no AbortProc avail or AbortProc wants to continue printing. * FALSE if AbortProc wants to abort printing. */ BOOL16 WINAPI QueryAbort16(HDC16 hdc16, INT16 reserved) { struct gdi_thunk* thunk = GDI_FindThunk(hdc16); if (!thunk) { ERR("Invalid hdc 0x%x\n", hdc16); return FALSE; } return GDI_Callback3216( thunk->pfn16, HDC_32(hdc16), 0 ); } /********************************************************************** * SetAbortProc (GDI.381) */ INT16 WINAPI SetAbortProc16(HDC16 hdc16, ABORTPROC16 abrtprc) { struct gdi_thunk* thunk; thunk = GDI_AddThunk(hdc16, abrtprc); if (!thunk) return FALSE; if (!SetAbortProc(HDC_32( hdc16 ), (ABORTPROC)thunk)) { GDI_DeleteThunk(thunk); return FALSE; } return TRUE; } /* * ############################################################################ */ struct callback16_info { FARPROC16 proc; LPARAM param; INT result; }; /* callback for LineDDA16 */ static void CALLBACK linedda_callback( INT x, INT y, LPARAM param ) { const struct callback16_info *info = (struct callback16_info *)param; WORD args[4]; args[3] = x; args[2] = y; args[1] = HIWORD(info->param); args[0] = LOWORD(info->param); WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, NULL ); } /* callback for EnumObjects16 */ static INT CALLBACK enum_pens_callback( void *ptr, LPARAM param ) { const struct callback16_info *info = (struct callback16_info *)param; LOGPEN *pen = ptr; LOGPEN16 pen16; SEGPTR segptr; DWORD ret; WORD args[4]; pen16.lopnStyle = pen->lopnStyle; pen16.lopnWidth.x = pen->lopnWidth.x; pen16.lopnWidth.y = pen->lopnWidth.y; pen16.lopnColor = pen->lopnColor; segptr = MapLS( &pen16 ); args[3] = SELECTOROF(segptr); args[2] = OFFSETOF(segptr); args[1] = HIWORD(info->param); args[0] = LOWORD(info->param); WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret ); UnMapLS( segptr ); return LOWORD(ret); } /* callback for EnumObjects16 */ static INT CALLBACK enum_brushes_callback( void *ptr, LPARAM param ) { const struct callback16_info *info = (struct callback16_info *)param; LOGBRUSH *brush = ptr; LOGBRUSH16 brush16; SEGPTR segptr; DWORD ret; WORD args[4]; brush16.lbStyle = brush->lbStyle; brush16.lbColor = brush->lbColor; brush16.lbHatch = brush->lbHatch; segptr = MapLS( &brush16 ); args[3] = SELECTOROF(segptr); args[2] = OFFSETOF(segptr); args[1] = HIWORD(info->param); args[0] = LOWORD(info->param); WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret ); UnMapLS( segptr ); return ret; } static BYTE fix_font_quality(LOGFONT16 *font16) { static BOOL init_enable_antialias; static BOOL enable_antialias; static BYTE force_font_quality; if (!init_enable_antialias) { init_enable_antialias = TRUE; enable_antialias = krnl386_get_config_int("otvdm", "EnableFontAntialias", FALSE); force_font_quality = (BYTE)krnl386_get_config_int("otvdm", "ForceFontQuality", -1); } if (font16->lfWidth && font16->lfHeight) return font16->lfQuality; if (force_font_quality != (BYTE)-1) return force_font_quality; if (enable_antialias) return font16->lfQuality; return NONANTIALIASED_QUALITY; } /* convert a LOGFONT16 to a LOGFONTA */ static void logfont_16_to_A( const LOGFONT16 *font16, LPLOGFONTA font32 ) { font32->lfHeight = font16->lfHeight; font32->lfWidth = font16->lfWidth; font32->lfEscapement = font16->lfEscapement; font32->lfOrientation = font16->lfOrientation; font32->lfWeight = font16->lfWeight; font32->lfItalic = font16->lfItalic; font32->lfUnderline = font16->lfUnderline; font32->lfStrikeOut = font16->lfStrikeOut; font32->lfCharSet = fix_font_charset(font16->lfCharSet); font32->lfOutPrecision = font16->lfOutPrecision; font32->lfClipPrecision = font16->lfClipPrecision; font32->lfQuality = fix_font_quality(font16); font32->lfPitchAndFamily = font16->lfPitchAndFamily; memcpy(font32->lfFaceName, font16->lfFaceName, LF_FACESIZE); font32->lfFaceName[LF_FACESIZE-1] = 0; } /* convert a LOGFONTA to a LOGFONT16 */ static void logfont_A_to_16( const LOGFONTA* font32, LPLOGFONT16 font16 ) { font16->lfHeight = font32->lfHeight; font16->lfWidth = font32->lfWidth; font16->lfEscapement = font32->lfEscapement; font16->lfOrientation = font32->lfOrientation; font16->lfWeight = font32->lfWeight; font16->lfItalic = font32->lfItalic; font16->lfUnderline = font32->lfUnderline; font16->lfStrikeOut = font32->lfStrikeOut; font16->lfCharSet = font32->lfCharSet; font16->lfOutPrecision = font32->lfOutPrecision; font16->lfClipPrecision = font32->lfClipPrecision; font16->lfQuality = font32->lfQuality; font16->lfPitchAndFamily = font32->lfPitchAndFamily; memcpy(font16->lfFaceName, font32->lfFaceName, LF_FACESIZE); font16->lfFaceName[LF_FACESIZE-1] = 0; } /* convert a ENUMLOGFONTEXA to a ENUMLOGFONTEX16 */ static void enumlogfontex_A_to_16( const ENUMLOGFONTEXA *fontA, LPENUMLOGFONTEX16 font16 ) { logfont_A_to_16( (const LOGFONTA *)fontA, (LPLOGFONT16)font16); memcpy(font16->elfFullName, fontA->elfFullName, LF_FULLFACESIZE); font16->elfFullName[LF_FULLFACESIZE-1] = '\0'; memcpy(font16->elfStyle, fontA->elfStyle, LF_FACESIZE); font16->elfStyle[LF_FACESIZE-1] = '\0'; memcpy(font16->elfScript, fontA->elfScript, LF_FACESIZE); font16->elfScript[LF_FACESIZE-1] = '\0'; } /* convert a NEWTEXTMETRICEXA to a NEWTEXTMETRICEX16 */ static void newtextmetricex_A_to_16( const NEWTEXTMETRICEXA *ptmA, LPNEWTEXTMETRICEX16 ptm16 ) { ptm16->ntmTm.tmHeight = ptmA->ntmTm.tmHeight; ptm16->ntmTm.tmAscent = ptmA->ntmTm.tmAscent; ptm16->ntmTm.tmDescent = ptmA->ntmTm.tmDescent; ptm16->ntmTm.tmInternalLeading = ptmA->ntmTm.tmInternalLeading; ptm16->ntmTm.tmExternalLeading = ptmA->ntmTm.tmExternalLeading; ptm16->ntmTm.tmAveCharWidth = ptmA->ntmTm.tmAveCharWidth; ptm16->ntmTm.tmMaxCharWidth = ptmA->ntmTm.tmMaxCharWidth; ptm16->ntmTm.tmWeight = ptmA->ntmTm.tmWeight; ptm16->ntmTm.tmOverhang = ptmA->ntmTm.tmOverhang; ptm16->ntmTm.tmDigitizedAspectX = ptmA->ntmTm.tmDigitizedAspectX; ptm16->ntmTm.tmDigitizedAspectY = ptmA->ntmTm.tmDigitizedAspectY; ptm16->ntmTm.tmFirstChar = ptmA->ntmTm.tmFirstChar; ptm16->ntmTm.tmLastChar = ptmA->ntmTm.tmLastChar; ptm16->ntmTm.tmDefaultChar = ptmA->ntmTm.tmDefaultChar; ptm16->ntmTm.tmBreakChar = ptmA->ntmTm.tmBreakChar; ptm16->ntmTm.tmItalic = ptmA->ntmTm.tmItalic; ptm16->ntmTm.tmUnderlined = ptmA->ntmTm.tmUnderlined; ptm16->ntmTm.tmStruckOut = ptmA->ntmTm.tmStruckOut; ptm16->ntmTm.tmPitchAndFamily = ptmA->ntmTm.tmPitchAndFamily; ptm16->ntmTm.tmCharSet = ptmA->ntmTm.tmCharSet; ptm16->ntmTm.ntmFlags = ptmA->ntmTm.ntmFlags; ptm16->ntmTm.ntmSizeEM = ptmA->ntmTm.ntmSizeEM; ptm16->ntmTm.ntmCellHeight = ptmA->ntmTm.ntmCellHeight; ptm16->ntmTm.ntmAvgWidth = ptmA->ntmTm.ntmAvgWidth; ptm16->ntmFontSig = ptmA->ntmFontSig; } static const char *font_list[] = { "\x82\x6c\x82\x72 \x83\x53\x83\x56\x83\x62\x83\x4e", /* MS Gothic (Japanese font) */ "\x82\x6c\x82\x72 \x96\xbe\x92\xa9", /* MS Mincho (Japanese font) */ "Arial", "Courier New", "Times New Roman", "Wingdings", "Symbol", "CenturyOldst", "Arial Narrow", "Book Antiqua", "Bookman Old Style", "Century Gothic", "Century Schoolbook", "Monotype Corsiva", "Monotype Sorts", "Fences", "MT Extra", "Monotype Sorts", "System", "FixedSys", "Modern", "Script", "Terminal", "Roman", "Small Fonts", "MS Serif", "MS Dialog", "MS Sans Serif", "MS LineDraw", "Century", "Algerian", "Arial Rounded MT Bold", "Braggadocio", "Britannic Bold", "Brush Script MT", "Colonna MT", "Desdemona", "Footlight MT Light", "Impact", "Kino MT", "Wide Latin", "Matura MT Script Capitals", "Playbill", "Courier", "Helvetica", "Helv", "Times", "ITC Avant Garde Gothic", "ITC Bookman", "New Century Schoolbook", "Palatino", "ITC Zapf Chancery", "ITC Zapf Dingbats", "AvantGarde", "Bookman", "NewCenturySchlbk", "Palatino", "ZapfChancery", "ZapfDingbats", "AvantGarde", "Bookman", "NewCenturySchlbk", "Palatino", "ZapfChancery", "ZapfDingbats", NULL }; static struct list font_allowed_list = LIST_INIT(font_allowed_list); static struct list font_disallowed_list = LIST_INIT(font_disallowed_list); struct font_entry { struct list entry; const char *font_name; }; static void construct_allowed_font_list() { int buf_size = 2048; LPSTR font = HeapAlloc(GetProcessHeap(), 0, buf_size); while (TRUE) { DWORD size = krnl386_get_config_string("EnumFontLimitation", NULL, "", font, buf_size); if (size < buf_size) { break; } buf_size *= 2; font = HeapReAlloc(GetProcessHeap(), 0, font, buf_size); } while (TRUE) { size_t len = strlen(font); struct font_entry *elem; BOOL allowed; if (len == 0) break; elem = (struct font_entry*)HeapAlloc(GetProcessHeap(), 0, sizeof(*elem)); allowed = krnl386_get_config_int("EnumFontLimitation", font, 1); elem->font_name = font; if (allowed) { list_add_tail(&font_allowed_list, &elem->entry); } else { list_add_tail(&font_disallowed_list, &elem->entry); } font += len + 1; } } /* * callback for EnumFontFamiliesEx16 * Note: plf is really an ENUMLOGFONTEXA, and ptm is a NEWTEXTMETRICEXA. * We have to use other types because of the FONTENUMPROCA definition. */ static INT CALLBACK enum_font_callback( const LOGFONTA *plf, const TEXTMETRICA *ptm, DWORD fType, LPARAM param ) { struct callback16_info *info = (struct callback16_info *)param; ENUMLOGFONTEX16 elfe16; NEWTEXTMETRICEX16 ntm16; SEGPTR segelfe16; SEGPTR segntm16; WORD args[7]; DWORD ret; static BOOL enum_font_limitation_init; static BOOL enum_font_limitation; enumlogfontex_A_to_16((const ENUMLOGFONTEXA *)plf, &elfe16); newtextmetricex_A_to_16((const NEWTEXTMETRICEXA *)ptm, &ntm16); /* some old programs can not process many fonts(1000+) */ if (!enum_font_limitation_init) { enum_font_limitation_init = TRUE; enum_font_limitation = krnl386_get_config_int("otvdm", "EnumFontLimitation", FALSE); if (enum_font_limitation) { construct_allowed_font_list(); } } if (enum_font_limitation) { /* TODO: configurable */ int i; BOOL found = FALSE; struct font_entry *font; BOOL disallow = FALSE; LIST_FOR_EACH_ENTRY(font, &font_disallowed_list, struct font_entry, entry) { if (!stricmp(elfe16.elfLogFont.lfFaceName, font->font_name)) { disallow = TRUE; break; } } if (!disallow) { for (i = 0; font_list[i]; i++) { if (!stricmp(elfe16.elfLogFont.lfFaceName, font_list[i])) { found = TRUE; break; } } } if (!found && !disallow) { LIST_FOR_EACH_ENTRY(font, &font_allowed_list, struct font_entry, entry) { if (!stricmp(elfe16.elfLogFont.lfFaceName, font->font_name)) { found = TRUE; break; } } } if (!found) { TRACE("font %s skipped.\n", elfe16.elfLogFont.lfFaceName); return info->result; } } segelfe16 = MapLS( &elfe16 ); segntm16 = MapLS( &ntm16 ); args[6] = SELECTOROF(segelfe16); args[5] = OFFSETOF(segelfe16); args[4] = SELECTOROF(segntm16); args[3] = OFFSETOF(segntm16); args[2] = fType; args[1] = HIWORD(info->param); args[0] = LOWORD(info->param); WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret ); UnMapLS( segelfe16 ); UnMapLS( segntm16 ); return info->result = LOWORD(ret); } struct dib_segptr_bits { struct list entry; HBITMAP16 bmp; WORD sel; WORD count; }; static struct list dib_segptr_list = LIST_INIT( dib_segptr_list ); static SEGPTR alloc_segptr_bits( HBITMAP bmp, void *bits32 ) { DIBSECTION dib; unsigned int i, size; struct dib_segptr_bits *bits; if (!(bits = HeapAlloc( GetProcessHeap(), 0, sizeof(*bits) ))) return 0; GetObjectW( bmp, sizeof(dib), &dib ); size = dib.dsBm.bmHeight * dib.dsBm.bmWidthBytes; /* calculate number of sel's needed for size with 64K steps */ bits->bmp = HBITMAP_16( bmp ); bits->count = (size + 0xffff) / 0x10000; bits->sel = AllocSelectorArray16( bits->count ); GlobalMapInternal(bits->sel, bits32, size); for (i = 0; i < bits->count; i++) { SetSelectorBase(bits->sel + (i << __AHSHIFT), (DWORD)bits32 + i * 0x10000); SetSelectorLimit16(bits->sel + (i << __AHSHIFT), size - 1); /* yep, limit is correct */ size -= 0x10000; } list_add_head( &dib_segptr_list, &bits->entry ); return MAKESEGPTR( bits->sel, 0 ); } static void free_segptr_bits( HBITMAP16 bmp ) { unsigned int i; struct dib_segptr_bits *bits; LIST_FOR_EACH_ENTRY( bits, &dib_segptr_list, struct dib_segptr_bits, entry ) { if (bits->bmp != bmp) continue; for (i = 0; i < bits->count; i++) FreeSelector16( bits->sel + (i << __AHSHIFT) ); GlobalMapInternal(bits->sel, NULL, 0); list_remove( &bits->entry ); HeapFree( GetProcessHeap(), 0, bits ); return; } } #if 0 /* window surface used to implement the DIB.DRV driver */ struct dib_window_surface { struct window_surface header; RECT bounds; void *bits; UINT info_size; BITMAPINFO info; /* variable size, must be last */ }; static struct dib_window_surface *get_dib_surface( struct window_surface *surface ) { return (struct dib_window_surface *)surface; } /*********************************************************************** * dib_surface_lock */ static void dib_surface_lock( struct window_surface *window_surface ) { /* nothing to do */ } /*********************************************************************** * dib_surface_unlock */ static void dib_surface_unlock( struct window_surface *window_surface ) { /* nothing to do */ } /*********************************************************************** * dib_surface_get_bitmap_info */ static void *dib_surface_get_bitmap_info( struct window_surface *window_surface, BITMAPINFO *info ) { struct dib_window_surface *surface = get_dib_surface( window_surface ); memcpy( info, &surface->info, surface->info_size ); return surface->bits; } /*********************************************************************** * dib_surface_get_bounds */ static RECT *dib_surface_get_bounds( struct window_surface *window_surface ) { struct dib_window_surface *surface = get_dib_surface( window_surface ); return &surface->bounds; } /*********************************************************************** * dib_surface_set_region */ static void dib_surface_set_region( struct window_surface *window_surface, HRGN region ) { /* nothing to do */ } /*********************************************************************** * dib_surface_flush */ static void dib_surface_flush( struct window_surface *window_surface ) { /* nothing to do */ } /*********************************************************************** * dib_surface_destroy */ static void dib_surface_destroy( struct window_surface *window_surface ) { struct dib_window_surface *surface = get_dib_surface( window_surface ); TRACE( "freeing %p\n", surface ); HeapFree( GetProcessHeap(), 0, surface ); } static const struct window_surface_funcs dib_surface_funcs = { dib_surface_lock, dib_surface_unlock, dib_surface_get_bitmap_info, dib_surface_get_bounds, dib_surface_set_region, dib_surface_flush, dib_surface_destroy }; /*********************************************************************** * create_surface */ static struct window_surface *create_surface( const BITMAPINFO *info ) { struct dib_window_surface *surface; int color = 0; if (info->bmiHeader.biBitCount <= 8) color = info->bmiHeader.biClrUsed ? info->bmiHeader.biClrUsed : (1 << info->bmiHeader.biBitCount); else if (info->bmiHeader.biCompression == BI_BITFIELDS) color = 3; surface = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, offsetof( struct dib_window_surface, info.bmiColors[color] )); if (!surface) return NULL; surface->header.funcs = &dib_surface_funcs; surface->header.rect.left = 0; surface->header.rect.top = 0; surface->header.rect.right = info->bmiHeader.biWidth; surface->header.rect.bottom = abs(info->bmiHeader.biHeight); surface->header.ref = 1; surface->info_size = offsetof( BITMAPINFO, bmiColors[color] ); surface->bits = (char *)info + surface->info_size; memcpy( &surface->info, info, surface->info_size ); TRACE( "created %p %ux%u for info %p bits %p\n", surface, surface->header.rect.right, surface->header.rect.bottom, info, surface->bits ); return &surface->header; } #endif /*********************************************************************** * SetBkColor (GDI.1) */ COLORREF WINAPI SetBkColor16( HDC16 hdc, COLORREF color ) { return SetBkColor( HDC_32(hdc), check_colorref(color) ); } /*********************************************************************** * SetBkMode (GDI.2) */ INT16 WINAPI SetBkMode16( HDC16 hdc, INT16 mode ) { return SetBkMode( HDC_32(hdc), mode ); } /*********************************************************************** * SetMapMode (GDI.3) */ INT16 WINAPI SetMapMode16( HDC16 hdc, INT16 mode ) { return SetMapMode( HDC_32(hdc), mode ); } /*********************************************************************** * SetROP2 (GDI.4) */ INT16 WINAPI SetROP216( HDC16 hdc, INT16 mode ) { return SetROP2( HDC_32(hdc), mode ); } INT WINAPI SetRelAbs(HDC hdc, INT Mode ); /*********************************************************************** * SetRelAbs (GDI.5) */ INT16 WINAPI SetRelAbs16( HDC16 hdc, INT16 mode ) { return SetRelAbs( HDC_32(hdc), mode ); } /*********************************************************************** * SetPolyFillMode (GDI.6) */ INT16 WINAPI SetPolyFillMode16( HDC16 hdc, INT16 mode ) { return SetPolyFillMode( HDC_32(hdc), mode ); } /*********************************************************************** * SetStretchBltMode (GDI.7) */ INT16 WINAPI SetStretchBltMode16( HDC16 hdc, INT16 mode ) { return SetStretchBltMode( HDC_32(hdc), mode ); } /*********************************************************************** * SetTextCharacterExtra (GDI.8) */ INT16 WINAPI SetTextCharacterExtra16( HDC16 hdc, INT16 extra ) { return SetTextCharacterExtra( HDC_32(hdc), extra ); } /*********************************************************************** * SetTextColor (GDI.9) */ COLORREF WINAPI SetTextColor16( HDC16 hdc, COLORREF color ) { return SetTextColor( HDC_32(hdc), check_colorref(color) ); } /*********************************************************************** * SetTextJustification (GDI.10) */ INT16 WINAPI SetTextJustification16( HDC16 hdc, INT16 extra, INT16 breaks ) { return SetTextJustification( HDC_32(hdc), extra, breaks ); } /*********************************************************************** * SetWindowOrg (GDI.11) */ DWORD WINAPI SetWindowOrg16( HDC16 hdc, INT16 x, INT16 y ) { POINT pt; if (!SetWindowOrgEx( HDC_32(hdc), x, y, &pt )) return 0; return MAKELONG( pt.x, pt.y ); } /*********************************************************************** * SetWindowExt (GDI.12) */ DWORD WINAPI SetWindowExt16( HDC16 hdc, INT16 x, INT16 y ) { SIZE size; if (!SetWindowExtEx( HDC_32(hdc), x, y, &size )) return 0; return MAKELONG( size.cx, size.cy ); } /*********************************************************************** * SetViewportOrg (GDI.13) */ DWORD WINAPI SetViewportOrg16( HDC16 hdc, INT16 x, INT16 y ) { POINT pt; if (!SetViewportOrgEx( HDC_32(hdc), x, y, &pt )) return 0; return MAKELONG( pt.x, pt.y ); } /*********************************************************************** * SetViewportExt (GDI.14) */ DWORD WINAPI SetViewportExt16( HDC16 hdc, INT16 x, INT16 y ) { SIZE size; if (!SetViewportExtEx( HDC_32(hdc), x, y, &size )) return 0; return MAKELONG( size.cx, size.cy ); } /*********************************************************************** * OffsetWindowOrg (GDI.15) */ DWORD WINAPI OffsetWindowOrg16( HDC16 hdc, INT16 x, INT16 y ) { POINT pt; if (!OffsetWindowOrgEx( HDC_32(hdc), x, y, &pt )) return 0; return MAKELONG( pt.x, pt.y ); } /*********************************************************************** * ScaleWindowExt (GDI.16) */ DWORD WINAPI ScaleWindowExt16( HDC16 hdc, INT16 xNum, INT16 xDenom, INT16 yNum, INT16 yDenom ) { SIZE size; if (!ScaleWindowExtEx( HDC_32(hdc), xNum, xDenom, yNum, yDenom, &size )) return FALSE; return MAKELONG( size.cx, size.cy ); } /*********************************************************************** * OffsetViewportOrg (GDI.17) */ DWORD WINAPI OffsetViewportOrg16( HDC16 hdc, INT16 x, INT16 y ) { POINT pt; if (!OffsetViewportOrgEx( HDC_32(hdc), x, y, &pt )) return 0; return MAKELONG( pt.x, pt.y ); } /*********************************************************************** * ScaleViewportExt (GDI.18) */ DWORD WINAPI ScaleViewportExt16( HDC16 hdc, INT16 xNum, INT16 xDenom, INT16 yNum, INT16 yDenom ) { SIZE size; if (!ScaleViewportExtEx( HDC_32(hdc), xNum, xDenom, yNum, yDenom, &size )) return FALSE; return MAKELONG( size.cx, size.cy ); } /*********************************************************************** * LineTo (GDI.19) */ BOOL16 WINAPI LineTo16( HDC16 hdc, INT16 x, INT16 y ) { return LineTo( HDC_32(hdc), x, y ); } /*********************************************************************** * MoveTo (GDI.20) */ DWORD WINAPI MoveTo16( HDC16 hdc, INT16 x, INT16 y ) { POINT pt; if (!MoveToEx( HDC_32(hdc), x, y, &pt )) return 0; return MAKELONG(pt.x,pt.y); } /*********************************************************************** * ExcludeClipRect (GDI.21) */ INT16 WINAPI ExcludeClipRect16( HDC16 hdc, INT16 left, INT16 top, INT16 right, INT16 bottom ) { return ExcludeClipRect( HDC_32(hdc), left, top, right, bottom ); } /*********************************************************************** * IntersectClipRect (GDI.22) */ INT16 WINAPI IntersectClipRect16( HDC16 hdc, INT16 left, INT16 top, INT16 right, INT16 bottom ) { return IntersectClipRect( HDC_32(hdc), left, top, right, bottom ); } /*********************************************************************** * Arc (GDI.23) */ BOOL16 WINAPI Arc16( HDC16 hdc, INT16 left, INT16 top, INT16 right, INT16 bottom, INT16 xstart, INT16 ystart, INT16 xend, INT16 yend ) { return Arc( HDC_32(hdc), left, top, right, bottom, xstart, ystart, xend, yend ); } /*********************************************************************** * Ellipse (GDI.24) */ BOOL16 WINAPI Ellipse16( HDC16 hdc, INT16 left, INT16 top, INT16 right, INT16 bottom ) { return Ellipse( HDC_32(hdc), left, top, right, bottom ); } /********************************************************************** * FloodFill (GDI.25) */ BOOL16 WINAPI FloodFill16( HDC16 hdc, INT16 x, INT16 y, COLORREF color ) { return ExtFloodFill( HDC_32(hdc), x, y, check_colorref(color), FLOODFILLBORDER ); } /*********************************************************************** * Pie (GDI.26) */ BOOL16 WINAPI Pie16( HDC16 hdc, INT16 left, INT16 top, INT16 right, INT16 bottom, INT16 xstart, INT16 ystart, INT16 xend, INT16 yend ) { return Pie( HDC_32(hdc), left, top, right, bottom, xstart, ystart, xend, yend ); } /*********************************************************************** * Rectangle (GDI.27) */ BOOL16 WINAPI Rectangle16( HDC16 hdc, INT16 left, INT16 top, INT16 right, INT16 bottom ) { return Rectangle( HDC_32(hdc), left, top, right, bottom ); } /*********************************************************************** * RoundRect (GDI.28) */ BOOL16 WINAPI RoundRect16( HDC16 hdc, INT16 left, INT16 top, INT16 right, INT16 bottom, INT16 ell_width, INT16 ell_height ) { return RoundRect( HDC_32(hdc), left, top, right, bottom, ell_width, ell_height ); } /*********************************************************************** * PatBlt (GDI.29) */ BOOL16 WINAPI PatBlt16( HDC16 hdc, INT16 left, INT16 top, INT16 width, INT16 height, DWORD rop) { return PatBlt( HDC_32(hdc), left, top, width, height, rop ); } /*********************************************************************** * SaveDC (GDI.30) */ INT16 WINAPI SaveDC16( HDC16 hdc ) { return SaveDC( HDC_32(hdc) ); } /*********************************************************************** * SetPixel (GDI.31) */ COLORREF WINAPI SetPixel16( HDC16 hdc, INT16 x, INT16 y, COLORREF color ) { return SetPixel( HDC_32(hdc), x, y, check_colorref(color) ); } /*********************************************************************** * OffsetClipRgn (GDI.32) */ INT16 WINAPI OffsetClipRgn16( HDC16 hdc, INT16 x, INT16 y ) { return OffsetClipRgn( HDC_32(hdc), x, y ); } /*********************************************************************** * TextOut (GDI.33) */ BOOL16 WINAPI TextOut16( HDC16 hdc, INT16 x, INT16 y, LPCSTR str, INT16 count ) { return TextOutA( HDC_32(hdc), x, y, str, count ); } /*********************************************************************** * BitBlt (GDI.34) */ BOOL16 WINAPI BitBlt16( HDC16 hdcDst, INT16 xDst, INT16 yDst, INT16 width, INT16 height, HDC16 hdcSrc, INT16 xSrc, INT16 ySrc, DWORD rop ) { return StretchBlt16(hdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc, width, height, rop); } /*********************************************************************** * StretchBlt (GDI.35) */ BOOL16 WINAPI StretchBlt16( HDC16 hdcDst, INT16 xDst, INT16 yDst, INT16 widthDst, INT16 heightDst, HDC16 hdcSrc, INT16 xSrc, INT16 ySrc, INT16 widthSrc, INT16 heightSrc, DWORD rop ) { HDC hdcsrc32 = HDC_32(hdcSrc); HDC hdcdst32 = HDC_32(hdcDst); if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (GetDeviceCaps(hdcsrc32, TECHNOLOGY) == DT_RASDISPLAY)) { DIBSECTION dib, dibdst; HBITMAP hbmp = GetCurrentObject(hdcsrc32, OBJ_BITMAP); int count = GetObject(hbmp, sizeof(DIBSECTION), &dib); HBITMAP hbmpdst = GetCurrentObject(hdcdst32, OBJ_BITMAP); int countdst = GetObject(hbmpdst, sizeof(DIBSECTION), &dibdst); BOOL srcdib, dstdib; if ((count == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(hbmp), 1) == 0xd1b00001)) srcdib = TRUE; if ((countdst == sizeof(DIBSECTION)) && (dibdst.dsBmih.biBitCount == 8) && !dibdst.dshSection && (GetPtr16(HBITMAP_16(hbmpdst), 1) == 0xd1b00001)) dstdib = TRUE; if (srcdib && (GetObjectType(hdcdst32) == OBJ_DC)) { HPALETTE realpal = get_realized_palette(); if (realpal != GetStockObject(DEFAULT_PALETTE)) { HPALETTE oldpal = SelectPalette(hdcsrc32, realpal, FALSE); set_dib_colors_for_screen(hdcsrc32); BOOL16 ret = StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop); SelectPalette(hdcsrc32, oldpal, FALSE); set_dib_colors(hdcsrc32); return ret; } } if (dstdib && (GetObjectType(hdcsrc32) == OBJ_DC)) { HPALETTE realpal = get_realized_palette(); if (realpal != GetStockObject(DEFAULT_PALETTE)) { if (is_blank_palette(realpal)) return 0; HPALETTE oldpal = SelectPalette(hdcdst32, realpal, FALSE); set_dib_colors_for_screen(hdcdst32); BOOL16 ret = StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop); SelectPalette(hdcdst32, oldpal, FALSE); set_dib_colors(hdcdst32); return ret; } } if (dstdib && (dib.dsBm.bmBitsPixel == 1)) { COLORREF txcolor = GetTextColor(hdcdst32); COLORREF bkcolor = GetBkColor(hdcdst32); SetTextColor(hdcdst32, convert_colorref(txcolor)); SetBkColor(hdcdst32, convert_colorref(bkcolor)); BOOL16 ret = StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop); SetTextColor(hdcdst32, txcolor); SetBkColor(hdcdst32, bkcolor); return ret; } if (srcdib && (dibdst.dsBm.bmBitsPixel == 1)) { COLORREF bkcolor = GetBkColor(hdcsrc32); SetBkColor(hdcsrc32, convert_colorref(bkcolor)); BOOL16 ret = StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop); SetBkColor(hdcsrc32, bkcolor); return ret; } } return StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop); } /********************************************************************** * Polygon (GDI.36) */ BOOL16 WINAPI Polygon16( HDC16 hdc, const POINT16* pt, INT16 count ) { int i; BOOL ret; LPPOINT pt32 = HeapAlloc( GetProcessHeap(), 0, count*sizeof(POINT) ); if (!pt32) return FALSE; for (i=count;i--;) { pt32[i].x = pt[i].x; pt32[i].y = pt[i].y; } ret = Polygon(HDC_32(hdc),pt32,count); HeapFree( GetProcessHeap(), 0, pt32 ); return ret; } /********************************************************************** * Polyline (GDI.37) */ BOOL16 WINAPI Polyline16( HDC16 hdc, const POINT16* pt, INT16 count ) { int i; BOOL16 ret; LPPOINT pt32 = HeapAlloc( GetProcessHeap(), 0, count*sizeof(POINT) ); if (!pt32) return FALSE; for (i=count;i--;) { pt32[i].x = pt[i].x; pt32[i].y = pt[i].y; } ret = Polyline(HDC_32(hdc),pt32,count); HeapFree( GetProcessHeap(), 0, pt32 ); return ret; } /*********************************************************************** * Escape (GDI.38) */ INT16 WINAPI Escape16( HDC16 hdc, INT16 escape, INT16 in_count, SEGPTR in_data, LPVOID out_data ) { INT ret; switch(escape) { /* Escape(hdc,CLIP_TO_PATH,LPINT16,NULL) */ /* Escape(hdc,DRAFTMODE,LPINT16,NULL) */ /* Escape(hdc,ENUMPAPERBINS,LPINT16,LPSTR); */ /* Escape(hdc,EPSPRINTING,LPINT16,NULL) */ /* Escape(hdc,EXT_DEVICE_CAPS,LPINT16,LPDWORD) */ /* Escape(hdc,GETCOLORTABLE,LPINT16,LPDWORD) */ /* Escape(hdc,MOUSETRAILS,LPINT16,NULL) */ /* Escape(hdc,POSTSCRIPT_IGNORE,LPINT16,NULL) */ /* Escape(hdc,QUERYESCSUPPORT,LPINT16,NULL) */ /* Escape(hdc,SET_ARC_DIRECTION,LPINT16,NULL) */ /* Escape(hdc,SET_POLY_MODE,LPINT16,NULL) */ /* Escape(hdc,SET_SCREEN_ANGLE,LPINT16,NULL) */ /* Escape(hdc,SET_SPREAD,LPINT16,NULL) */ case CLIP_TO_PATH: case DRAFTMODE: case ENUMPAPERBINS: case EPSPRINTING: case EXT_DEVICE_CAPS: case GETCOLORTABLE: case MOUSETRAILS: case POSTSCRIPT_IGNORE: case QUERYESCSUPPORT: case SET_ARC_DIRECTION: case SET_POLY_MODE: case SET_SCREEN_ANGLE: case SET_SPREAD: { INT16 *ptr = MapSL(in_data); INT data = *ptr; return Escape( HDC_32(hdc), escape, sizeof(data), (LPCSTR)&data, out_data ); } /* Escape(hdc,ENABLEDUPLEX,LPUINT16,NULL) */ case ENABLEDUPLEX: { UINT16 *ptr = MapSL(in_data); UINT data = *ptr; return Escape( HDC_32(hdc), escape, sizeof(data), (LPCSTR)&data, NULL ); } /* Escape(hdc,GETPHYSPAGESIZE,NULL,LPPOINT16) */ /* Escape(hdc,GETPRINTINGOFFSET,NULL,LPPOINT16) */ /* Escape(hdc,GETSCALINGFACTOR,NULL,LPPOINT16) */ case GETPHYSPAGESIZE: case GETPRINTINGOFFSET: case GETSCALINGFACTOR: { POINT16 *ptr = out_data; POINT pt32; ret = Escape( HDC_32(hdc), escape, 0, NULL, &pt32 ); ptr->x = pt32.x; ptr->y = pt32.y; return ret; } /* Escape(hdc,ENABLEPAIRKERNING,LPINT16,LPINT16); */ /* Escape(hdc,ENABLERELATIVEWIDTHS,LPINT16,LPINT16); */ /* Escape(hdc,SETCOPYCOUNT,LPINT16,LPINT16) */ /* Escape(hdc,SETKERNTRACK,LPINT16,LPINT16) */ /* Escape(hdc,SETLINECAP,LPINT16,LPINT16) */ /* Escape(hdc,SETLINEJOIN,LPINT16,LPINT16) */ /* Escape(hdc,SETMITERLIMIT,LPINT16,LPINT16) */ case ENABLEPAIRKERNING: case ENABLERELATIVEWIDTHS: case SETCOPYCOUNT: case SETKERNTRACK: case SETLINECAP: case SETLINEJOIN: case SETMITERLIMIT: case SETCHARSET: { INT16 *new = MapSL(in_data); INT16 *old = out_data; INT out, in = *new; ret = Escape( HDC_32(hdc), escape, sizeof(in), (LPCSTR)&in, &out ); if (old) *old = out; return ret; } /* Escape(hdc,SETABORTPROC,ABORTPROC,NULL); */ case SETABORTPROC: return SetAbortProc16( hdc, (ABORTPROC16)in_data ); /* Escape(hdc,STARTDOC,LPSTR,LPDOCINFO16); * lpvOutData is actually a pointer to the DocInfo structure and used as * a second input parameter */ case STARTDOC: if (out_data) { ret = StartDoc16( hdc, out_data ); if (ret > 0) ret = StartPage( HDC_32(hdc) ); return ret; } return Escape( HDC_32(hdc), escape, in_count, MapSL(in_data), NULL ); /* Escape(hdc,SET_BOUNDS,LPRECT16,NULL); */ /* Escape(hdc,SET_CLIP_BOX,LPRECT16,NULL); */ case SET_BOUNDS: case SET_CLIP_BOX: { RECT16 *rc16 = MapSL(in_data); RECT rc; rc.left = rc16->left; rc.top = rc16->top; rc.right = rc16->right; rc.bottom = rc16->bottom; return Escape( HDC_32(hdc), escape, sizeof(rc), (LPCSTR)&rc, NULL ); } /* Escape(hdc,NEXTBAND,NULL,LPRECT16); */ case NEXTBAND: { RECT rc; RECT16 *rc16 = out_data; ret = Escape( HDC_32(hdc), escape, 0, NULL, &rc ); rc16->left = rc.left; rc16->top = rc.top; rc16->right = rc.right; rc16->bottom = rc.bottom; return ret; } /* Escape(hdc,DRAWPATTERNRECT,PRECT_STRUCT*,NULL); */ case DRAWPATTERNRECT: { DRAWPATRECT pr; DRAWPATRECT16 *pr16 = MapSL(in_data); pr.ptPosition.x = pr16->ptPosition.x; pr.ptPosition.y = pr16->ptPosition.y; pr.ptSize.x = pr16->ptSize.x; pr.ptSize.y = pr16->ptSize.y; pr.wStyle = pr16->wStyle; pr.wPattern = pr16->wPattern; return Escape( HDC_32(hdc), escape, sizeof(pr), (LPCSTR)&pr, NULL ); } /* Escape(hdc,ABORTDOC,NULL,NULL); */ /* Escape(hdc,BANDINFO,BANDINFOSTRUCT*,BANDINFOSTRUCT*); */ /* Escape(hdc,BEGIN_PATH,NULL,NULL); */ /* Escape(hdc,ENDDOC,NULL,NULL); */ /* Escape(hdc,END_PATH,PATHINFO,NULL); */ /* Escape(hdc,EXTTEXTOUT,EXTTEXT_STRUCT*,NULL); */ /* Escape(hdc,FLUSHOUTPUT,NULL,NULL); */ /* Escape(hdc,GETFACENAME,NULL,LPSTR); */ /* Escape(hdc,GETPAIRKERNTABLE,NULL,KERNPAIR*); */ /* Escape(hdc,GETSETPAPERBINS,BinInfo*,BinInfo*); */ /* Escape(hdc,GETSETPRINTORIENT,ORIENT*,NULL); */ /* Escape(hdc,GETSETSCREENPARAMS,SCREENPARAMS*,SCREENPARAMS*); */ /* Escape(hdc,GETTECHNOLOGY,NULL,LPSTR); */ /* Escape(hdc,GETTRACKKERNTABLE,NULL,KERNTRACK*); */ /* Escape(hdc,MFCOMMENT,LPSTR,NULL); */ /* Escape(hdc,NEWFRAME,NULL,NULL); */ /* Escape(hdc,PASSTHROUGH,LPSTR,NULL); */ /* Escape(hdc,RESTORE_CTM,NULL,NULL); */ /* Escape(hdc,SAVE_CTM,NULL,NULL); */ /* Escape(hdc,SETALLJUSTVALUES,EXTTEXTDATA*,NULL); */ /* Escape(hdc,SETCOLORTABLE,COLORTABLE_STRUCT*,LPDWORD); */ /* Escape(hdc,SET_BACKGROUND_COLOR,LPDWORD,LPDWORD); */ /* Escape(hdc,TRANSFORM_CTM,LPSTR,NULL); */ case ABORTDOC: case BANDINFO: case BEGIN_PATH: case ENDDOC: case END_PATH: case EXTTEXTOUT: case FLUSHOUTPUT: case GETFACENAME: case GETPAIRKERNTABLE: case GETSETPAPERBINS: case GETSETPRINTORIENT: case GETSETSCREENPARAMS: case GETTECHNOLOGY: case GETTRACKKERNTABLE: case MFCOMMENT: case NEWFRAME: case PASSTHROUGH: case RESTORE_CTM: case SAVE_CTM: case SETALLJUSTVALUES: case SETCOLORTABLE: case SET_BACKGROUND_COLOR: case TRANSFORM_CTM: /* pass it unmodified to the 32-bit function */ return Escape( HDC_32(hdc), escape, in_count, MapSL(in_data), out_data ); /* Escape(hdc,ENUMPAPERMETRICS,LPINT16,LPRECT16); */ /* Escape(hdc,GETEXTENDEDTEXTMETRICS,LPUINT16,EXTTEXTMETRIC*); */ /* Escape(hdc,GETEXTENTTABLE,LPSTR,LPINT16); */ /* Escape(hdc,GETSETPAPERMETRICS,LPRECT16,LPRECT16); */ /* Escape(hdc,GETVECTORBRUSHSIZE,LPLOGBRUSH16,LPPOINT16); */ /* Escape(hdc,GETVECTORPENSIZE,LPLOGPEN16,LPPOINT16); */ case ENUMPAPERMETRICS: case GETEXTENDEDTEXTMETRICS: case GETEXTENTTABLE: case GETSETPAPERMETRICS: case GETVECTORBRUSHSIZE: case GETVECTORPENSIZE: default: FIXME("unknown/unsupported 16-bit escape %x (%d,%p,%p)\n", escape, in_count, MapSL(in_data), out_data ); return Escape( HDC_32(hdc), escape, in_count, MapSL(in_data), out_data ); case 0xA1D: { /* get EUDC font size */ TEXTMETRICW tm; SIZE16 *size = (SIZE16*)out_data; if (GetTextMetricsW(HDC_32(hdc), &tm)) { size->cx = size->cy = tm.tmHeight; return TRUE; } return FALSE; } } } /*********************************************************************** * RestoreDC (GDI.39) */ BOOL16 WINAPI RestoreDC16( HDC16 hdc, INT16 level ) { return RestoreDC( HDC_32(hdc), level ); } /*********************************************************************** * FillRgn (GDI.40) */ BOOL16 WINAPI FillRgn16( HDC16 hdc, HRGN16 hrgn, HBRUSH16 hbrush ) { return FillRgn( HDC_32(hdc), HRGN_32(hrgn), HBRUSH_32(hbrush) ); } /*********************************************************************** * FrameRgn (GDI.41) */ BOOL16 WINAPI FrameRgn16( HDC16 hdc, HRGN16 hrgn, HBRUSH16 hbrush, INT16 nWidth, INT16 nHeight ) { return FrameRgn( HDC_32(hdc), HRGN_32(hrgn), HBRUSH_32(hbrush), nWidth, nHeight ); } /*********************************************************************** * InvertRgn (GDI.42) */ BOOL16 WINAPI InvertRgn16( HDC16 hdc, HRGN16 hrgn ) { return InvertRgn( HDC_32(hdc), HRGN_32(hrgn) ); } /*********************************************************************** * PaintRgn (GDI.43) */ BOOL16 WINAPI PaintRgn16( HDC16 hdc, HRGN16 hrgn ) { return PaintRgn( HDC_32(hdc), HRGN_32(hrgn) ); } /*********************************************************************** * SelectClipRgn (GDI.44) */ INT16 WINAPI SelectClipRgn16( HDC16 hdc, HRGN16 hrgn ) { return SelectClipRgn( HDC_32(hdc), HRGN_32(hrgn) ); } /*********************************************************************** * SelectObject (GDI.45) */ HGDIOBJ16 WINAPI SelectObject16( HDC16 hdc, HGDIOBJ16 handle ) { HDC hdc32 = HDC_32(hdc); HGDIOBJ handle32 = HGDIOBJ_32(handle); HGDIOBJ result = SelectObject( hdc32, handle32 ); DWORD type = GetObjectType(handle32); if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && result && (type == OBJ_BITMAP) && (GetCurrentObject(hdc32, OBJ_PAL) != GetStockObject(DEFAULT_PALETTE))) { DIBSECTION dib; int count = GetObject(handle32, sizeof(DIBSECTION), &dib); if ((count == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(handle, 1) == 0xd1b00001)) set_dib_colors(hdc32); } return HGDIOBJ_16( result ); } /*********************************************************************** * CombineRgn (GDI.47) */ INT16 WINAPI CombineRgn16(HRGN16 hDest, HRGN16 hSrc1, HRGN16 hSrc2, INT16 mode) { return CombineRgn( HRGN_32(hDest), HRGN_32(hSrc1), HRGN_32(hSrc2), mode ); } /*********************************************************************** * CreateBitmap (GDI.48) */ HBITMAP16 WINAPI CreateBitmap16( INT16 width, INT16 height, UINT16 planes, UINT16 bpp, LPCVOID bits ) { if (krnl386_get_compat_mode("256color") && (bpp == 8) && (planes == 1)) { HBITMAP16 ret; if (krnl386_get_config_int("otvdm", "DIBPalette", FALSE)) { HDC16 dc = CreateCompatibleDC16(NULL); ret = CreateCompatibleBitmap16(dc, width, height); if (bits) SetBitmapBits(HBITMAP_32(ret), width * height, bits); DeleteDC16(dc); } else { HDC dc = GetDC(NULL); HBITMAP ret32 = CreateCompatibleBitmap(dc, width, height); if (bits) { BITMAPINFO *bmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256*2 + sizeof(BITMAPINFOHEADER)); UINT16 *colors = (UINT16 *)bmap->bmiColors; VOID *section; bmap->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmap->bmiHeader.biWidth = width; bmap->bmiHeader.biHeight = -height; bmap->bmiHeader.biPlanes = 1; bmap->bmiHeader.biBitCount = 8; for (int i = 0; i < 256; i++) colors[i] = i; SetDIBits(dc, ret, 0, height, bits, bmap, DIB_PAL_COLORS); HeapFree(GetProcessHeap(), 0, bmap); } ret = HBITMAP_16(ret32); ReleaseDC(NULL, dc); } return ret; } else if ((planes == 1) && (bpp > 8)) { HDC dc = GetDC(NULL); if (bpp == GetDeviceCaps(dc, BITSPIXEL)) { BITMAPINFO bmpinfo = {0}; VOID *bmp; HDC16 dc16 = HDC_16(dc); bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmpinfo.bmiHeader.biWidth = width; bmpinfo.bmiHeader.biHeight = -height; bmpinfo.bmiHeader.biPlanes = 1; bmpinfo.bmiHeader.biBitCount = bpp; HBITMAP16 ret = CreateDIBSection16(dc16, &bmpinfo, DIB_RGB_COLORS, &bmp, NULL, NULL); if (bits) SetDIBits(dc, HBITMAP_32(ret), 0, height, bits, &bmpinfo, DIB_RGB_COLORS); ReleaseDC(NULL, dc); return ret; } ReleaseDC(NULL, dc); } return HBITMAP_16( CreateBitmap( width, height, planes & 0xff, bpp & 0xff, bits ) ); } /*********************************************************************** * CreateBitmapIndirect (GDI.49) */ HBITMAP16 WINAPI CreateBitmapIndirect16( const BITMAP16 * bmp ) { return CreateBitmap16( bmp->bmWidth, bmp->bmHeight, bmp->bmPlanes, bmp->bmBitsPixel, MapSL( bmp->bmBits ) ); } /*********************************************************************** * CreateBrushIndirect (GDI.50) */ HBRUSH16 WINAPI CreateBrushIndirect16( const LOGBRUSH16 * brush ) { LOGBRUSH brush32; if (brush->lbStyle == BS_DIBPATTERN || brush->lbStyle == BS_DIBPATTERN8X8) return CreateDIBPatternBrush16( brush->lbHatch, brush->lbColor ); if (brush->lbStyle == BS_NULL) return GetStockObject16(NULL_BRUSH); brush32.lbStyle = brush->lbStyle; brush32.lbColor = brush->lbColor; if (brush->lbStyle == BS_PATTERN) { brush32.lbHatch = HBITMAP_32(brush->lbHatch); } else brush32.lbHatch = brush->lbHatch; return HBRUSH_16( CreateBrushIndirect(&brush32) ); } /*********************************************************************** * CreateCompatibleBitmap (GDI.51) */ HBITMAP16 WINAPI CreateCompatibleBitmap16( HDC16 hdc, INT16 width, INT16 height ) { HDC hdc32 = HDC_32(hdc); if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY)) { HBITMAP16 ret; VOID *section; BITMAPINFO *bmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256*2 + sizeof(BITMAPINFOHEADER)); UINT16 *colors = (UINT16 *)bmap->bmiColors; bmap->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmap->bmiHeader.biWidth = width; bmap->bmiHeader.biHeight = -height; bmap->bmiHeader.biPlanes = 1; bmap->bmiHeader.biBitCount = 8; for (int i = 0; i < 256; i++) colors[i] = i; ret = HBITMAP_16(CreateDIBSection(hdc32, bmap, DIB_PAL_COLORS, §ion, NULL, NULL)); SetPtr16(ret, 0xd1b00001, 1); HeapFree(GetProcessHeap(), 0, bmap); return ret; } return HBITMAP_16( CreateCompatibleBitmap( hdc32, width, height ) ); } BOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst); BYTE get_aflags(HMODULE16 hModule); HPALETTE16 WINAPI SelectPalette16(HDC16 hdc, HPALETTE16 hpal, BOOL16 bForceBackground); /*********************************************************************** * CreateCompatibleDC (GDI.52) */ HDC16 WINAPI CreateCompatibleDC16( HDC16 hdc ) { HDC hdc32 = CreateCompatibleDC( HDC_32(hdc) ); if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE) && (GetCurrentObject(hdc32, OBJ_FONT) == GetStockObject(SYSTEM_FONT))) SelectObject(hdc32, GetStockObject(SYSTEM_FIXED_FONT)); if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY)) SelectPalette16(HDC_16(hdc32), HPALETTE_16(get_realized_palette()), FALSE); return HDC_16(hdc32); } void add_dib_driver_entry(HBITMAP bitmap, HDC dc, HANDLE hSection, LPVOID bits, WORD selector, DWORD size, DWORD padding) { struct dib_driver *drv = (struct dib_driver*)HeapAlloc(GetProcessHeap(), 0, sizeof(struct dib_driver)); drv->bitmap = bitmap; drv->hdc = dc; drv->hSection = hSection; drv->map = bits; drv->selector = selector; drv->size = size; drv->padding = padding; list_add_head(&dib_drivers, &drv->entry); } struct dib_driver *find_dib_driver(WORD selector) { struct dib_driver *dib, *next; LIST_FOR_EACH_ENTRY_SAFE(dib, next, &dib_drivers, struct dib_driver, entry) { if (dib->selector == selector) return dib; } return NULL; } struct { BITMAPINFOHEADER bmi; RGBQUAD colors[16]; } dib_pal_colors_hack = { {0x28, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, {{0, 0, 0}, {0, 0, 0x80}, {0, 0x80, 0}, {0, 0x80, 0x80}, {0x80, 0, 0}, {0x80, 0, 0x80}, {0x80, 0x80, 0}, {0xc0, 0xc0, 0xc0}, {0x80, 0x80, 0x80}, {0, 0, 0xff}, {0, 0xff, 0}, {0, 0xff, 0xff}, {0xff, 0, 0}, {0xff, 0, 0xff}, {0xff, 0xff, 0}, {0xff, 0xff, 0xff}} }; /*********************************************************************** * CreateDC (GDI.53) */ HDC16 WINAPI CreateDC16( LPCSTR driver, LPCSTR device, LPCSTR output, SEGPTR segInitData ) { const DEVMODEA *initData = (const DEVMODEA*)MapSL(segInitData); HDC16 dc; HINSTANCE16 drv; char tmp[256]; if (device && !strcmp(device, "DefaultPrinter")) { int len = 256; if (GetDefaultPrinterA(tmp, &len)) device = tmp; } #if 0 if (!lstrcmpiA( driver, "dib" ) || !lstrcmpiA( driver, "dirdib" )) { struct window_surface *surface; HDC hdc; if (!(surface = create_surface( (const BITMAPINFO *)initData ))) return 0; if ((hdc = CreateDCA( "DISPLAY", NULL, NULL, NULL ))) { __wine_set_visible_region( hdc, CreateRectRgnIndirect( &surface->rect ), &surface->rect, &surface->rect, surface ); TRACE( "returning hdc %p surface %p\n", hdc, surface ); } window_surface_release( surface ); return HDC_16( hdc ); } #else if (!lstrcmpiA(driver, "dib") || !lstrcmpiA(driver, "dirdib") || !lstrcmpiA(driver, "dib.drv") || !lstrcmpiA(driver, "dirdib.drv")) { void *pvBits; HDC memdc = CreateCompatibleDC(NULL); HBITMAP bitmap; WORD selector = SELECTOROF(segInitData); WORD offset = OFFSETOF(segInitData); LPVOID base = MapSL(MAKESEGPTR(selector, 0)); DWORD limit = wine_ldt_copy.limit[selector >> __AHSHIFT] + 1; volatile BITMAPINFO *bmi = (const BITMAPINFO *)initData; HANDLE hSection = INVALID_HANDLE_VALUE; LPBYTE bits = NULL; DWORD avail_size; DWORD offset_align; DWORD offset_bits; if (segInitData == 0) { return HDC_16(memdc); } if (find_dib_driver(selector)) { FIXME("Multiple DIB mappings on the same segment are not supported.\n"); return HDC_16(memdc); } // check for dib_pal_colors hack if (bmi->bmiHeader.biBitCount <= 8) // does dib.drv support direct color modes? { int maxcolor = bmi->bmiHeader.biClrUsed ? bmi->bmiHeader.biClrUsed : 1 << bmi->bmiHeader.biBitCount; offset_bits = offset + bmi->bmiHeader.biSize + maxcolor * sizeof(RGBQUAD); int chkcolor = bmi->bmiHeader.biClrImportant ? bmi->bmiHeader.biClrImportant : maxcolor; for (int i = 0; i < chkcolor; i++) { if (((WORD *)bmi->bmiColors)[i] != i) break; if (i == (chkcolor - 1)) { dib_pal_colors_hack.bmi.biWidth = bmi->bmiHeader.biWidth; dib_pal_colors_hack.bmi.biHeight = bmi->bmiHeader.biHeight; dib_pal_colors_hack.bmi.biBitCount = bmi->bmiHeader.biBitCount; dib_pal_colors_hack.bmi.biClrUsed = min(maxcolor, 16); bmi = (BITMAPINFO *)&dib_pal_colors_hack; break; } } } else offset_bits = offset + bmi->bmiHeader.biSize; #define DWORD_PADDING(x) (((x) + 3) & -4) offset_align = DWORD_PADDING(offset_bits) - offset_bits; avail_size = max(0x10000, limit); hSection = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, avail_size + offset_align, NULL); bits = (LPBYTE)MapViewOfFile(hSection, FILE_MAP_WRITE, 0, 0, 0); memcpy(bits + offset_align, base, limit); bitmap = CreateDIBSection(NULL, bmi, DIB_RGB_COLORS, &pvBits, hSection, offset_align + offset_bits); SelectObject(memdc, bitmap); DibMapGlobalMemory(selector, (LPBYTE)bits + offset_align, avail_size); if (bmi->bmiHeader.biClrUsed) SetDIBColorTable(memdc, 0, bmi->bmiHeader.biClrUsed, &bmi->bmiColors); add_dib_driver_entry(bitmap, memdc, hSection, bits, selector, avail_size, offset_align); return HDC_16(memdc); } #endif if (!driver || !stricmp(driver, "winspool")) { if (!initData || !IsValidDevmodeA(initData, initData->dmSize + initData->dmDriverExtra)) { LONG size = ExtDeviceMode(NULL, NULL, NULL, device, output, NULL, NULL, 0); char *dma = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); ExtDeviceMode(NULL, NULL, (LPDEVMODEA)dma, device, output, NULL, NULL, DM_COPY); HDC16 ret = HDC_16(CreateDCA(driver, device, output, (LPDEVMODEA)dma)); HeapFree(GetProcessHeap(), 0, (LPVOID)dma); return ret; } else { DEVMODEA dma = {0}; memcpy(&dma, initData, initData->dmSize); dma.dmSize = sizeof(DEVMODEA); dma.dmDriverExtra = 0; return HDC_16( CreateDCA( driver, device, output, &dma ) ); } } dc = HDC_16( CreateDCA( driver, device, output, initData ) ); if (dc) return dc; drv = LoadLibrary16(driver); if (drv == 2) { char buf[MAX_PATH]; *buf = 0; StringCchCatA(buf, ARRAYSIZE(buf), driver); StringCchCatA(buf, ARRAYSIZE(buf), ".DRV"); drv = LoadLibrary16(buf); } if (drv < 32) { ERR("DC driver %s not found\n", debugstr_a(driver)); return 0; } FIXME("DC driver %s not supported\n", debugstr_a(driver)); return CreateDC16("DIB", NULL, NULL, NULL); } /*********************************************************************** * CreateEllipticRgn (GDI.54) */ HRGN16 WINAPI CreateEllipticRgn16( INT16 left, INT16 top, INT16 right, INT16 bottom ) { return HRGN_16( CreateEllipticRgn( left, top, right, bottom ) ); } /*********************************************************************** * CreateEllipticRgnIndirect (GDI.55) */ HRGN16 WINAPI CreateEllipticRgnIndirect16( const RECT16 *rect ) { return HRGN_16( CreateEllipticRgn( rect->left, rect->top, rect->right, rect->bottom ) ); } static BYTE fix_font_charset(BYTE charset) { //windows 3.1(JP) behaviour if (GetACP() == 932/*sjis*/) { if (charset != ANSI_CHARSET && charset != DEFAULT_CHARSET && charset != SYMBOL_CHARSET && charset != OEM_CHARSET) { charset = SHIFTJIS_CHARSET; } } return charset; } /*********************************************************************** * CreateFontIndirect (GDI.57) */ HFONT16 WINAPI CreateFontIndirect16( const LOGFONT16 *plf16 ) { HFONT ret; if (plf16) { LOGFONTA lfA; logfont_16_to_A( plf16, &lfA ); if (lfA.lfCharSet == 0xfe) lfA.lfCharSet = 0xfd; ret = CreateFontIndirectA( &lfA ); 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 , plf16->lfItalic, plf16->lfUnderline, plf16->lfStrikeOut, plf16->lfCharSet, plf16->lfOutPrecision, plf16->lfClipPrecision , plf16->lfPitchAndFamily, debugstr_a(plf16->lfFaceName), (int)HFONT_16(ret)); } else ret = CreateFontIndirectA( NULL ); return HFONT_16(ret); } /*********************************************************************** * CreateFont (GDI.56) */ HFONT16 WINAPI CreateFont16(INT16 height, INT16 width, INT16 esc, INT16 orient, INT16 weight, BYTE italic, BYTE underline, BYTE strikeout, BYTE charset, BYTE outpres, BYTE clippres, BYTE quality, BYTE pitch, LPCSTR name) { LOGFONT16 lf16 = { 0 }; lf16.lfHeight = height; lf16.lfWidth = width; lf16.lfEscapement = esc; lf16.lfOrientation = orient; lf16.lfWeight = weight; lf16.lfItalic = italic; lf16.lfUnderline = underline; lf16.lfStrikeOut = strikeout; lf16.lfCharSet = charset; lf16.lfOutPrecision = outpres; lf16.lfClipPrecision = clippres; lf16.lfQuality = quality; lf16.lfPitchAndFamily = pitch; if (name) memcpy(lf16.lfFaceName, name, min(LF_FACESIZE - 1, strlen(name) + 1)); return CreateFontIndirect16(&lf16); } /*********************************************************************** * CreateHatchBrush (GDI.58) */ HBRUSH16 WINAPI CreateHatchBrush16( INT16 style, COLORREF color ) { return HBRUSH_16( CreateHatchBrush( style, check_colorref(color) ) ); } /*********************************************************************** * CreatePatternBrush (GDI.60) */ HBRUSH16 WINAPI CreatePatternBrush16( HBITMAP16 hbitmap ) { return HBRUSH_16( CreatePatternBrush( HBITMAP_32(hbitmap) )); } /*********************************************************************** * CreatePen (GDI.61) */ HPEN16 WINAPI CreatePen16( INT16 style, INT16 width, COLORREF color ) { LOGPEN logpen; if (style == PS_NULL) return GetStockObject16(NULL_PEN); logpen.lopnStyle = style; logpen.lopnWidth.x = width; logpen.lopnWidth.y = 0; logpen.lopnColor = check_colorref(color); return HPEN_16( CreatePenIndirect( &logpen ) ); } /*********************************************************************** * CreatePenIndirect (GDI.62) */ HPEN16 WINAPI CreatePenIndirect16( const LOGPEN16 * pen ) { LOGPEN logpen; if (pen->lopnStyle == PS_NULL) return GetStockObject16(NULL_PEN); if (pen->lopnStyle > PS_INSIDEFRAME) return 0; logpen.lopnStyle = pen->lopnStyle; logpen.lopnWidth.x = pen->lopnWidth.x; logpen.lopnWidth.y = pen->lopnWidth.y; logpen.lopnColor = pen->lopnColor; return HPEN_16( CreatePenIndirect( &logpen ) ); } /*********************************************************************** * CreatePolygonRgn (GDI.63) */ HRGN16 WINAPI CreatePolygonRgn16( const POINT16 * points, INT16 count, INT16 mode ) { return CreatePolyPolygonRgn16( points, &count, 1, mode ); } /*********************************************************************** * CreateRectRgn (GDI.64) * * NOTE: cf. SetRectRgn16 */ HRGN16 WINAPI CreateRectRgn16( INT16 left, INT16 top, INT16 right, INT16 bottom ) { HRGN hrgn; if (left < right) hrgn = CreateRectRgn( left, top, right, bottom ); else hrgn = CreateRectRgn( 0, 0, 0, 0 ); return HRGN_16(hrgn); } /*********************************************************************** * CreateRectRgnIndirect (GDI.65) */ HRGN16 WINAPI CreateRectRgnIndirect16( const RECT16* rect ) { return CreateRectRgn16( rect->left, rect->top, rect->right, rect->bottom ); } /*********************************************************************** * CreateSolidBrush (GDI.66) */ HBRUSH16 WINAPI CreateSolidBrush16( COLORREF color ) { return HBRUSH_16( CreateSolidBrush( check_colorref(color) ) ); } void delete_dib_driver(HDC hdc) { struct dib_driver *dib, *next; LIST_FOR_EACH_ENTRY_SAFE(dib, next, &dib_drivers, struct dib_driver, entry) { if (dib->hdc != hdc) continue; list_remove(&dib->entry); DibUnmapGlobalMemory((LPBYTE)dib->map + dib->padding, dib->size); DeleteObject(dib->bitmap); UnmapViewOfFile(dib->map); CloseHandle(dib->hSection); HeapFree(GetProcessHeap(), 0, dib); } } /*********************************************************************** * DeleteDC (GDI.68) */ BOOL16 WINAPI DeleteDC16( HDC16 hdc ) { HDC hdc32 = HDC_32(hdc); if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY)) SelectPalette(hdc32, GetStockObject(DEFAULT_PALETTE), FALSE); if (DeleteDC( hdc32 )) { struct saved_visrgn *saved, *next; struct gdi_thunk* thunk; if ((thunk = GDI_FindThunk(hdc))) GDI_DeleteThunk(thunk); LIST_FOR_EACH_ENTRY_SAFE( saved, next, &saved_regions, struct saved_visrgn, entry ) { if (saved->hdc != hdc32) continue; list_remove( &saved->entry ); DeleteObject( saved->hrgn ); HeapFree( GetProcessHeap(), 0, saved ); } delete_dib_driver(hdc32); K32WOWHandle16Destroy(hdc32, WOW_TYPE_HDC /* GDIOBJ */); return TRUE; } else if (!GetObjectType(hdc32)) return TRUE; // Assume object was already released, dc cache may make this unnecessary return FALSE; } /*********************************************************************** * DeleteObject (GDI.69) * SysDeleteObject (GDI.605) */ BOOL16 WINAPI DeleteObject16( HGDIOBJ16 obj ) { HANDLE object = HGDIOBJ_32(obj); BOOL result; int type = GetObjectType(object); static BOOL (*haxmvm_DeleteObject)(HGDIOBJ); static BOOL init; if (!init) { HMODULE haxmvm = GetModuleHandleW(L"haxmvm"); haxmvm_DeleteObject = haxmvm ? (BOOL(*)(HGDIOBJ))GetProcAddress(haxmvm, "haxmvm_DeleteObject") : NULL; init = TRUE; } for (int i = 0; i <= STOCK_LAST + 1; i++) if (obj == stock[i]) return TRUE; if (type == OBJ_BITMAP) free_segptr_bits( obj ); else if ((type == OBJ_PAL) && GetPtr16(object, 1)) { HeapFree(GetProcessHeap(), 0, GetPtr16(object, 1)); SetPtr16(object, NULL, 1); } if (haxmvm_DeleteObject) { result = haxmvm_DeleteObject(object); } else { result = DeleteObject( object ); } if (result) { K32WOWHandle16Destroy(object, WOW_TYPE_HDC /* GDIOBJ */); } else { if (type == OBJ_PAL) return TRUE; } return result; } /*********************************************************************** * EnumFonts (GDI.70) */ INT16 WINAPI EnumFonts16( HDC16 hDC, LPCSTR lpName, FONTENUMPROC16 efproc, LPARAM lpData ) { struct callback16_info info; info.proc = (FARPROC16)efproc; info.param = lpData; info.result = 1; /* Don't call EnumFontFamilies! */ return EnumFontsA(HDC_32(hDC), lpName, enum_font_callback, (LPARAM)&info); } /*********************************************************************** * EnumObjects (GDI.71) */ INT16 WINAPI EnumObjects16( HDC16 hdc, INT16 obj, GOBJENUMPROC16 proc, LPARAM lParam ) { struct callback16_info info; info.proc = (FARPROC16)proc; info.param = lParam; switch(obj) { case OBJ_PEN: return EnumObjects( HDC_32(hdc), OBJ_PEN, enum_pens_callback, (LPARAM)&info ); case OBJ_BRUSH: return EnumObjects( HDC_32(hdc), OBJ_BRUSH, enum_brushes_callback, (LPARAM)&info ); } return 0; } /*********************************************************************** * EqualRgn (GDI.72) */ BOOL16 WINAPI EqualRgn16( HRGN16 rgn1, HRGN16 rgn2 ) { return EqualRgn( HRGN_32(rgn1), HRGN_32(rgn2) ); } /*********************************************************************** * GetBitmapBits (GDI.74) */ LONG WINAPI GetBitmapBits16( HBITMAP16 hbitmap, LONG count, LPVOID buffer ) { return GetBitmapBits( HBITMAP_32(hbitmap), count, buffer ); } /*********************************************************************** * GetBkColor (GDI.75) */ COLORREF WINAPI GetBkColor16( HDC16 hdc ) { return GetBkColor( HDC_32(hdc) ); } /*********************************************************************** * GetBkMode (GDI.76) */ INT16 WINAPI GetBkMode16( HDC16 hdc ) { return GetBkMode( HDC_32(hdc) ); } /*********************************************************************** * GetClipBox (GDI.77) */ INT16 WINAPI GetClipBox16( HDC16 hdc, LPRECT16 rect ) { RECT rect32; INT ret = GetClipBox( HDC_32(hdc), &rect32 ); if (ret != ERROR) { rect->left = rect32.left; rect->top = rect32.top; rect->right = rect32.right; rect->bottom = rect32.bottom; } return ret; } /*********************************************************************** * GetCurrentPosition (GDI.78) */ DWORD WINAPI GetCurrentPosition16( HDC16 hdc ) { POINT pt32; if (!GetCurrentPositionEx( HDC_32(hdc), &pt32 )) return 0; return MAKELONG( pt32.x, pt32.y ); } /*********************************************************************** * GetDCOrg (GDI.79) */ DWORD WINAPI GetDCOrg16( HDC16 hdc ) { POINT pt; if (GetDCOrgEx( HDC_32(hdc), &pt )) return MAKELONG( pt.x, pt.y ); return 0; } /*********************************************************************** * GetDeviceCaps (GDI.80) */ INT16 WINAPI GetDeviceCaps16( HDC16 hdc, INT16 cap ) { HDC hdc32 = HDC_32(hdc); INT16 ret = GetDeviceCaps( hdc32, cap ); /* some apps don't expect -1 and think it's a B&W screen */ if (krnl386_get_compat_mode("256color") && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY)) { switch (cap) { case BITSPIXEL: ret = 8; break; case SIZEPALETTE: ret = 256; break; case RASTERCAPS: ret |= RC_PALETTE; break; case NUMCOLORS: ret = 20; break; } } else if (((cap == NUMCOLORS) || (cap == NUMPENS)) && (ret == -1)) ret = 2048; else if (cap == VREFRESH) ret = 1; if (krnl386_get_compat_mode("640X480") && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY)) { switch (cap) { case HORZRES: ret = 640; break; case VERTRES: ret = 480; break; case HORZSIZE: ret = 169; break; case VERTSIZE: ret = 127; break; } } int newdpi = krnl386_get_config_int("otvdm", "AdjustDPI", FALSE); if (newdpi) { switch (cap) { case LOGPIXELSX: ret = newdpi; break; case LOGPIXELSY: ret = newdpi; break; } } return ret; } /*********************************************************************** * GetMapMode (GDI.81) */ INT16 WINAPI GetMapMode16( HDC16 hdc ) { return GetMapMode( HDC_32(hdc) ); } /*********************************************************************** * GetObject (GDI.82) */ INT16 WINAPI GetObject16( HGDIOBJ16 handle16, INT16 count, LPVOID buffer ) { HGDIOBJ handle = HGDIOBJ_32( handle16 ); switch( GetObjectType( handle )) { case OBJ_PEN: if (buffer) { LOGPEN16 *pen16 = buffer; LOGPEN pen; if (count < sizeof(LOGPEN16)) return 0; if (!GetObjectW( handle, sizeof(pen), &pen )) return 0; pen16->lopnStyle = pen.lopnStyle; pen16->lopnColor = pen.lopnColor; pen16->lopnWidth.x = pen.lopnWidth.x; pen16->lopnWidth.y = pen.lopnWidth.y; } return sizeof(LOGPEN16); case OBJ_BRUSH: if (buffer) { LOGBRUSH brush; LOGBRUSH16 brush16; if (!GetObjectW( handle, sizeof(brush), &brush )) return 0; brush16.lbStyle = brush.lbStyle; brush16.lbColor = brush.lbColor; brush16.lbHatch = brush.lbHatch; if (count > sizeof(brush16)) count = sizeof(brush16); memcpy( buffer, &brush16, count ); return count; } return sizeof(LOGBRUSH16); case OBJ_PAL: return GetObjectW( handle, count, buffer ); case OBJ_FONT: if (buffer) { LOGFONTA font; LOGFONT16 font16; if (!GetObjectA( handle, sizeof(font), &font )) return 0; logfont_A_to_16( &font, &font16 ); if (count > sizeof(font16)) count = sizeof(font16); memcpy( buffer, &font16, count ); return count; } return sizeof(LOGFONT16); case OBJ_BITMAP: { DIBSECTION dib; INT size; BITMAP16 bmp16; if (!(size = GetObjectW( handle, sizeof(dib), &dib ))) return 0; if (size == sizeof(DIBSECTION) && count > sizeof(BITMAP16)) { FIXME("not implemented for DIBs: count %d\n", count); return 0; } else { if (!buffer) return sizeof(BITMAP16); bmp16.bmType = dib.dsBm.bmType; bmp16.bmWidth = dib.dsBm.bmWidth; bmp16.bmHeight = dib.dsBm.bmHeight; bmp16.bmWidthBytes = dib.dsBm.bmWidthBytes; bmp16.bmPlanes = dib.dsBm.bmPlanes; bmp16.bmBitsPixel = dib.dsBm.bmBitsPixel; bmp16.bmBits = 0; memcpy(buffer, &bmp16, count); return count; } } default: return 0; } } /*********************************************************************** * GetPixel (GDI.83) */ COLORREF WINAPI GetPixel16( HDC16 hdc, INT16 x, INT16 y ) { return GetPixel( HDC_32(hdc), x, y ); } /*********************************************************************** * GetPolyFillMode (GDI.84) */ INT16 WINAPI GetPolyFillMode16( HDC16 hdc ) { return GetPolyFillMode( HDC_32(hdc) ); } /*********************************************************************** * GetROP2 (GDI.85) */ INT16 WINAPI GetROP216( HDC16 hdc ) { return GetROP2( HDC_32(hdc) ); } DWORD WINAPI GetRelAbs(_In_ HDC hdc, _In_ DWORD dwIgnore ); /*********************************************************************** * GetRelAbs (GDI.86) */ INT16 WINAPI GetRelAbs16( HDC16 hdc ) { return GetRelAbs( HDC_32(hdc), 0 ); } /*********************************************************************** * GetStockObject (GDI.87) */ HGDIOBJ16 WINAPI GetStockObject16( INT16 obj ) { if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE) && (obj == SYSTEM_FONT)) obj = SYSTEM_FIXED_FONT; HGDIOBJ16 ret = HGDIOBJ_16( GetStockObject( obj ) ); if (ret && (obj <= STOCK_LAST)) stock[obj] = ret; return ret; } /*********************************************************************** * GetStretchBltMode (GDI.88) */ INT16 WINAPI GetStretchBltMode16( HDC16 hdc ) { return GetStretchBltMode( HDC_32(hdc) ); } /*********************************************************************** * GetTextCharacterExtra (GDI.89) */ INT16 WINAPI GetTextCharacterExtra16( HDC16 hdc ) { return GetTextCharacterExtra( HDC_32(hdc) ); } /*********************************************************************** * GetTextColor (GDI.90) */ COLORREF WINAPI GetTextColor16( HDC16 hdc ) { return GetTextColor( HDC_32(hdc) ); } // for old fon vector fonts // Windows 10 only returns the extent based on the relative angle between the orientation and escapement // but ignores the absolute angles // Windows XP is mostly the same but calculates the full extent when the relative angle is 0 // Windows 3.1 returns the full extent but rounds the relative angle down to 0, 90, 180 or 270 degrees static void check_font_rotation(HDC hdc, SIZE16 *box) { if (LOWORD(LOBYTE(GetVersion())) >= 0x6) { TEXTMETRICA tm; GetTextMetricsA(hdc, &tm); if((tm.tmPitchAndFamily & (TMPF_VECTOR | TMPF_TRUETYPE)) != TMPF_VECTOR) return; HFONT hfont = GetCurrentObject(hdc, OBJ_FONT); LOGFONT lfont; GetObject(hfont, sizeof(LOGFONT), &lfont); if (lfont.lfEscapement == lfont.lfOrientation) { int angle = lfont.lfEscapement % 1800; const float d2r = 3.14159265358979323846 / 1800; if (angle) { int x = box->cx, y = box->cy; box->cx = (y * cosf((900 - angle) * d2r)) + (x * fabsf(cosf(angle * d2r))); box->cy = (x * cosf((900 - angle) * d2r)) + (y * fabsf(cosf(angle * d2r))); } } } } /*********************************************************************** * GetTextExtent (GDI.91) */ DWORD WINAPI GetTextExtent16( HDC16 hdc, LPCSTR str, INT16 count ) { SIZE16 size; DWORD ret; __TRY { if (!GetTextExtentPoint16( hdc, str, count, &size )) { ret = 0; } else { ret = MAKELONG( size.cx, size.cy ); } } __EXCEPT_ALL { return 0; } __ENDTRY return ret; } /*********************************************************************** * GetTextFace (GDI.92) */ INT16 WINAPI GetTextFace16( HDC16 hdc, INT16 count, LPSTR name ) { return GetTextFaceA( HDC_32(hdc), count, name ); } /*********************************************************************** * GetTextMetrics (GDI.93) */ BOOL16 WINAPI GetTextMetrics16( HDC16 hdc, TEXTMETRIC16 *tm ) { TEXTMETRICA tm32; if (!tm) return FALSE; if (!GetTextMetricsA( HDC_32(hdc), &tm32 )) return FALSE; tm->tmHeight = tm32.tmHeight; tm->tmAscent = tm32.tmAscent; tm->tmDescent = tm32.tmDescent; tm->tmInternalLeading = tm32.tmInternalLeading; tm->tmExternalLeading = tm32.tmExternalLeading; tm->tmAveCharWidth = tm32.tmAveCharWidth; tm->tmMaxCharWidth = tm32.tmMaxCharWidth; tm->tmWeight = tm32.tmWeight; tm->tmOverhang = tm32.tmOverhang; tm->tmDigitizedAspectX = tm32.tmDigitizedAspectX; tm->tmDigitizedAspectY = tm32.tmDigitizedAspectY; tm->tmFirstChar = tm32.tmFirstChar; tm->tmLastChar = tm32.tmLastChar; tm->tmDefaultChar = tm32.tmDefaultChar; tm->tmBreakChar = tm32.tmBreakChar; tm->tmItalic = tm32.tmItalic; tm->tmUnderlined = tm32.tmUnderlined; tm->tmStruckOut = tm32.tmStruckOut; tm->tmPitchAndFamily = tm32.tmPitchAndFamily; tm->tmCharSet = tm32.tmCharSet; return TRUE; } /*********************************************************************** * GetViewportExt (GDI.94) */ DWORD WINAPI GetViewportExt16( HDC16 hdc ) { SIZE size; if (!GetViewportExtEx( HDC_32(hdc), &size )) return 0; return MAKELONG( size.cx, size.cy ); } /*********************************************************************** * GetViewportOrg (GDI.95) */ DWORD WINAPI GetViewportOrg16( HDC16 hdc ) { POINT pt; if (!GetViewportOrgEx( HDC_32(hdc), &pt )) return 0; return MAKELONG( pt.x, pt.y ); } /*********************************************************************** * GetWindowExt (GDI.96) */ DWORD WINAPI GetWindowExt16( HDC16 hdc ) { SIZE size; if (!GetWindowExtEx( HDC_32(hdc), &size )) return 0; return MAKELONG( size.cx, size.cy ); } /*********************************************************************** * GetWindowOrg (GDI.97) */ DWORD WINAPI GetWindowOrg16( HDC16 hdc ) { POINT pt; if (!GetWindowOrgEx( HDC_32(hdc), &pt )) return 0; return MAKELONG( pt.x, pt.y ); } /********************************************************************** * LineDDA (GDI.100) */ void WINAPI LineDDA16( INT16 nXStart, INT16 nYStart, INT16 nXEnd, INT16 nYEnd, LINEDDAPROC16 proc, LPARAM lParam ) { struct callback16_info info; info.proc = (FARPROC16)proc; info.param = lParam; LineDDA( nXStart, nYStart, nXEnd, nYEnd, linedda_callback, (LPARAM)&info ); } /*********************************************************************** * OffsetRgn (GDI.101) */ INT16 WINAPI OffsetRgn16( HRGN16 hrgn, INT16 x, INT16 y ) { return OffsetRgn( HRGN_32(hrgn), x, y ); } /*********************************************************************** * PtVisible (GDI.103) */ BOOL16 WINAPI PtVisible16( HDC16 hdc, INT16 x, INT16 y ) { return PtVisible( HDC_32(hdc), x, y ); } /*********************************************************************** * SelectVisRgn (GDI.105) */ INT16 WINAPI SelectVisRgn16( HDC16 hdc, HRGN16 hrgn ) { FIXME( "%04x %04x no longer supported\n", hdc, hrgn ); return ERROR; } /*********************************************************************** * SetBitmapBits (GDI.106) */ LONG WINAPI SetBitmapBits16( HBITMAP16 hbitmap, LONG count, LPCVOID buffer ) { HBITMAP hbmp32 = HBITMAP_32(hbitmap); BITMAP bmp; if (GetObject(hbmp32, sizeof(BITMAP), &bmp) != sizeof(BITMAP)) return 0; if (krnl386_get_compat_mode("256color") && (bmp.bmBitsPixel > 8)) { HDC dc = CreateCompatibleDC(NULL); BITMAPINFO *bmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256*2 + sizeof(BITMAPINFOHEADER)); UINT16 *colors = (UINT16 *)bmap->bmiColors; bmap->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmap->bmiHeader.biWidth = bmp.bmWidth; bmap->bmiHeader.biHeight = -(count / bmp.bmWidth); bmap->bmiHeader.biPlanes = 1; bmap->bmiHeader.biBitCount = 8; for (int i = 0; i < 256; i++) colors[i] = i; HPALETTE oldpal = GetCurrentObject(dc, OBJ_PAL); if (krnl386_get_config_int("otvdm", "DIBPalette", FALSE)) SelectPalette(dc, get_realized_palette(), FALSE); int ret = SetDIBits(dc, hbmp32, 0, abs(bmap->bmiHeader.biHeight), buffer, bmap, DIB_PAL_COLORS); HeapFree(GetProcessHeap(), 0, bmap); SelectPalette(dc, oldpal, FALSE); DeleteDC(dc); return ret * bmp.bmWidth; } DWORD size = bmp.bmHeight * bmp.bmWidthBytes; return SetBitmapBits( hbmp32, min(size, count), buffer ); } #include typedef struct { SHORT dfVersion; /* Version */ LONG dfSize; /* Total File Size */ char dfCopyright[60]; /* Copyright notice */ FONTINFO16 fi; /* FONTINFO structure */ } WINFNT; #include LPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin); NE_TYPEINFO *get_resource_table(HMODULE16 hmod, LPCSTR type, LPBYTE *restab); /*********************************************************************** * AddFontResource (GDI.119) */ INT16 WINAPI AddFontResource16( LPCSTR filename ) { int ret = 0; LPCSTR filenameold = filename; char filebuf[MAX_PATH]; char module[MAX_PATH]; if (!HIWORD(filename)) { if (!GetModuleFileName16(filename, module, MAX_PATH)) return 0; filename = module; } filename = krnl386_search_executable_file(filename, filebuf, MAX_PATH, FALSE); TRACE("(%s(%s))\n", debugstr_a(filenameold), debugstr_a(filename)); ret = AddFontResourceExA(filename, FR_PRIVATE, 0); if (ret) return ret; // try to load 0x100 version bitmap font by converting to a 0x200 font // which Windows can load HINSTANCE16 mod = 0; HANDLE fh, mh; NE_NAMEINFO *name; int count = 0; LPVOID font; if ((mod = LoadLibrary16(filename)) >= 32) { NE_TYPEINFO *type = get_resource_table(mod, RT_FONT, NULL); if (!type) { FreeLibrary16(mod); return 0; } count = type->count; name = (NE_NAMEINFO*)(type + 1); } else { fh = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(fh == INVALID_HANDLE_VALUE) return 0; mh = CreateFileMappingA(fh, filename, PAGE_READONLY, 0, 0, NULL); font = MapViewOfFile(mh, FILE_MAP_READ, 0, 0, 0); count = 1; mod = 0; } char *dst = HeapAlloc(GetProcessHeap(), 0, 65536); HGLOBAL16 mem = 0; __TRY { for(int num = 0; num < count; num++) { WINFNT *fnt; int size; if(mod) { if (mem) FreeResource16(mem); HRSRC16 res = FindResource16(mod, name->id, 8); mem = LoadResource16(mod, res); font = LockResource16(mem); size = SizeofResource16(mod, res); name++; } else size = GetFileSize(fh, NULL); fnt = font; if (fnt->dfVersion != 0x100) { int fnum; if (AddFontMemResourceEx(font, fnt->dfSize, 0, &fnum)) { TRACE("Added %d fonts\n", fnum); ret += fnum; } continue; } if((size < 117) || (fnt->fi.dfType & 1)) continue; memcpy(dst, font, 118); int fontsize = (unsigned char)fnt->fi.dfLastChar - (unsigned char)fnt->fi.dfFirstChar + 2; WORD *charoff = (char *)font + 117; WORD *ncharoff = dst + 118; int hdrsize = 118 + (fontsize * 4); if(size < (117 + (fnt->fi.dfPixWidth ? (fontsize * 2) : 0) + (fnt->fi.dfWidthBytes * fnt->fi.dfPixHeight))) { TRACE("Font corrupt\n"); continue; } for(int i = 0; i < (fontsize - 1); i++) { ncharoff[i * 2] = fnt->fi.dfPixWidth ? fnt->fi.dfPixWidth : charoff[i + 1] - charoff[i]; ncharoff[(i * 2) + 1] = i ? (((ncharoff[(i * 2) - 2] + 7) / 8) * fnt->fi.dfPixHeight) + ncharoff[(i * 2) - 1] : hdrsize; } ncharoff[(fontsize - 1) * 2] = ncharoff[((fontsize - 1) * 2) + 1] = 0; int rowwid = fnt->fi.dfWidthBytes; int nbitsize = ncharoff[(fontsize * 2) - 3] + (((ncharoff[(fontsize * 2) - 4] + 7) / 8) * fnt->fi.dfPixHeight) - hdrsize; char *bitdata = (char *)font + fnt->fi.dfBitsOffset; char *nbitdata = dst + hdrsize; for(int i = 0; i < (fontsize - 1); i++) { int addr = ncharoff[(i * 2) + 1] - hdrsize; int bytewid = (ncharoff[i * 2] + 7) / 8; for(int j = 0; j < fnt->fi.dfPixHeight; j++) { for(int k = 0; k < bytewid; k++) { WORD bits = *(WORD *)(bitdata + (rowwid * j) + ((fnt->fi.dfPixWidth ? fnt->fi.dfPixWidth : charoff[i]) / 8) + k); bits = (bits >> 8) | (bits << 8); bits <<= charoff[i] % 8; nbitdata[addr + j + (k * fnt->fi.dfPixHeight)] = bits >> 8; } } } strncpy(dst + hdrsize + nbitsize, (char *)font + fnt->fi.dfFace, 256); int namelen = strlen(dst + hdrsize + nbitsize); if (namelen > 256) namelen = 256; fnt = dst; fnt->dfVersion = 0x200; fnt->fi.dfBitsOffset = hdrsize; fnt->fi.dfFace = hdrsize + nbitsize; fnt->dfSize = fnt->fi.dfFace + namelen + 1; if (fnt->fi.dfCharSet == 0xfe) // pagemaker fonts have charset 0xfe which windows 10 treats as utf-8 fnt->fi.dfCharSet = 0xfd; int fnum; if (AddFontMemResourceEx(dst, fnt->dfSize, 0, &fnum)) { TRACE("Added %d fonts\n", fnum); ret += fnum; } } } __EXCEPT_ALL { ERR("Failed to load old font\n"); } __ENDTRY if(mod) { if (mem) FreeResource16(mem); FreeLibrary16(mod); } else { UnmapViewOfFile(font); CloseHandle(mh); CloseHandle(fh); } HeapFree(GetProcessHeap(), 0, dst); return ret; } /*********************************************************************** * Death (GDI.121) * * Disables GDI, switches back to text mode. * We don't have to do anything here, * just let console support handle everything */ void WINAPI Death16(HDC16 hdc) { MESSAGE("Death(%04x) called. Application enters text mode...\n", hdc); } /*********************************************************************** * Resurrection (GDI.122) * * Restores GDI functionality */ void WINAPI Resurrection16(HDC16 hdc, WORD w1, WORD w2, WORD w3, WORD w4, WORD w5, WORD w6) { MESSAGE("Resurrection(%04x, %04x, %04x, %04x, %04x, %04x, %04x) called. Application left text mode.\n", hdc, w1, w2, w3, w4, w5, w6); } /*********************************************************************** * MulDiv (GDI.128) */ INT16 WINAPI MulDiv16( INT16 nMultiplicand, INT16 nMultiplier, INT16 nDivisor) { INT ret; if (!nDivisor) return -32768; /* We want to deal with a positive divisor to simplify the logic. */ if (nDivisor < 0) { nMultiplicand = - nMultiplicand; nDivisor = -nDivisor; } /* If the result is positive, we "add" to round. else, * we subtract to round. */ if ( ( (nMultiplicand < 0) && (nMultiplier < 0) ) || ( (nMultiplicand >= 0) && (nMultiplier >= 0) ) ) ret = (((int)nMultiplicand * nMultiplier) + (nDivisor/2)) / nDivisor; else ret = (((int)nMultiplicand * nMultiplier) - (nDivisor/2)) / nDivisor; if ((ret > 32767) || (ret < -32767)) return -32768; return (INT16) ret; } /*********************************************************************** * GetRgnBox (GDI.134) */ INT16 WINAPI GetRgnBox16( HRGN16 hrgn, LPRECT16 rect ) { RECT r; INT16 ret = GetRgnBox( HRGN_32(hrgn), &r ); rect->left = r.left; rect->top = r.top; rect->right = r.right; rect->bottom = r.bottom; return ret; } /*********************************************************************** * RemoveFontResource (GDI.136) */ BOOL16 WINAPI RemoveFontResource16( LPCSTR filename) { char filebuf[MAX_PATH]; char module[MAX_PATH]; if (!HIWORD(filename)) { if (!GetModuleFileName16(filename, module, MAX_PATH)) return 0; filename = module; } filename = krnl386_search_executable_file(filename, filebuf, MAX_PATH, FALSE); return RemoveFontResourceExA(filename, FR_PRIVATE, 0); } /*********************************************************************** * SetBrushOrg (GDI.148) */ DWORD WINAPI SetBrushOrg16( HDC16 hdc, INT16 x, INT16 y ) { POINT dcpt; POINT pt; if (GetDCOrgEx(HDC_32(hdc), &dcpt)) { x -= dcpt.x; y -= dcpt.y; if (!SetBrushOrgEx(HDC_32(hdc), x, y, &pt)) return 0; pt.x += dcpt.x; pt.y += dcpt.y; } return MAKELONG( pt.x, pt.y ); } /*********************************************************************** * GetBrushOrg (GDI.149) */ DWORD WINAPI GetBrushOrg16( HDC16 hdc ) { POINT dcpt; POINT pt; if (GetDCOrgEx(HDC_32(hdc), &dcpt)) { if (!GetBrushOrgEx(HDC_32(hdc), &pt)) return 0; pt.x += dcpt.x; pt.y += dcpt.y; } return MAKELONG( pt.x, pt.y ); } /*********************************************************************** * UnrealizeObject (GDI.150) */ BOOL16 WINAPI UnrealizeObject16( HGDIOBJ16 obj ) { return UnrealizeObject( HGDIOBJ_32(obj) ); } /*********************************************************************** * CreateIC (GDI.153) */ HDC16 WINAPI CreateIC16( LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODEA* initData ) { char tmp[256]; if (device && !strcmp(device, "DefaultPrinter")) { int len = 256; if (GetDefaultPrinterA(tmp, &len)) device = tmp; } if (initData && (!driver || !stricmp(driver, "winspool"))) { DEVMODEA dma = {0}; if (!IsValidDevmodeA(initData, initData->dmSize + initData->dmDriverExtra)) initData = NULL; else { memcpy(&dma, initData, initData->dmSize); dma.dmSize = sizeof(DEVMODEA); dma.dmDriverExtra = 0; return HDC_16( CreateICA( driver, device, output, &dma ) ); } } else if (!stricmp(driver, "dib")) driver = "DISPLAY"; return HDC_16( CreateICA( driver, device, output, initData ) ); } /*********************************************************************** * GetNearestColor (GDI.154) */ COLORREF WINAPI GetNearestColor16( HDC16 hdc, COLORREF color ) { return GetNearestColor( HDC_32(hdc), check_colorref(color) ); } /*********************************************************************** * CreateDiscardableBitmap (GDI.156) */ HBITMAP16 WINAPI CreateDiscardableBitmap16( HDC16 hdc, INT16 width, INT16 height ) { return HBITMAP_16( CreateDiscardableBitmap( HDC_32(hdc), width, height ) ); } /*********************************************************************** * PtInRegion (GDI.161) */ BOOL16 WINAPI PtInRegion16( HRGN16 hrgn, INT16 x, INT16 y ) { return PtInRegion( HRGN_32(hrgn), x, y ); } /*********************************************************************** * GetBitmapDimension (GDI.162) */ DWORD WINAPI GetBitmapDimension16( HBITMAP16 hbitmap ) { SIZE16 size; if (!GetBitmapDimensionEx16( hbitmap, &size )) return 0; return MAKELONG( size.cx, size.cy ); } /*********************************************************************** * SetBitmapDimension (GDI.163) */ DWORD WINAPI SetBitmapDimension16( HBITMAP16 hbitmap, INT16 x, INT16 y ) { SIZE16 size; if (!SetBitmapDimensionEx16( hbitmap, x, y, &size )) return 0; return MAKELONG( size.cx, size.cy ); } /*********************************************************************** * SetRectRgn (GDI.172) * * NOTE: Win 3.1 sets region to empty if left > right */ void WINAPI SetRectRgn16( HRGN16 hrgn, INT16 left, INT16 top, INT16 right, INT16 bottom ) { if (left < right) SetRectRgn( HRGN_32(hrgn), left, top, right, bottom ); else SetRectRgn( HRGN_32(hrgn), 0, 0, 0, 0 ); } /****************************************************************** * PlayMetaFileRecord (GDI.176) */ void WINAPI PlayMetaFileRecord16( HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, UINT16 handles ) { HANDLETABLE *ht32 = HeapAlloc( GetProcessHeap(), 0, FIELD_OFFSET(HANDLETABLE, objectHandle[handles] )); unsigned int i; for (i = 0; i < handles; i++) ht32->objectHandle[i] = HGDIOBJ_32(ht->objectHandle[i]); PlayMetaFileRecord( HDC_32(hdc), ht32, mr, handles ); for (i = 0; i < handles; i++) ht->objectHandle[i] = HGDIOBJ_16(ht32->objectHandle[i]); HeapFree( GetProcessHeap(), 0, ht32 ); } /*********************************************************************** * SetDCHook (GDI.190) */ BOOL16 WINAPI SetDCHook16( HDC16 hdc16, FARPROC16 hookProc, DWORD dwHookData ) { FIXME( "%04x %p %x: not supported\n", hdc16, hookProc, dwHookData ); return FALSE; } /*********************************************************************** * GetDCHook (GDI.191) */ DWORD WINAPI GetDCHook16( HDC16 hdc16, FARPROC16 *phookProc ) { FIXME( "%04x: not supported\n", hdc16 ); return 0; } /*********************************************************************** * SetHookFlags (GDI.192) */ WORD WINAPI SetHookFlags16( HDC16 hdc, WORD flags ) { FIXME( "%04x %x: not supported\n", hdc, flags ); return 0; } /*********************************************************************** * SetBoundsRect (GDI.193) */ UINT16 WINAPI SetBoundsRect16( HDC16 hdc, const RECT16* rect, UINT16 flags ) { if (rect) { RECT rect32; rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; return SetBoundsRect( HDC_32( hdc ), &rect32, flags ); } else return SetBoundsRect( HDC_32( hdc ), NULL, flags ); } /*********************************************************************** * GetBoundsRect (GDI.194) */ UINT16 WINAPI GetBoundsRect16( HDC16 hdc, LPRECT16 rect, UINT16 flags) { RECT rect32; UINT ret = GetBoundsRect( HDC_32( hdc ), &rect32, flags ); if (rect) { rect->left = rect32.left; rect->top = rect32.top; rect->right = rect32.right; rect->bottom = rect32.bottom; } return ret; } /*********************************************************************** * EngineEnumerateFont (GDI.300) */ WORD WINAPI EngineEnumerateFont16(LPSTR fontname, FARPROC16 proc, DWORD data ) { FIXME("(%s,%p,%x),stub\n",fontname,proc,data); return 0; } /*********************************************************************** * EngineDeleteFont (GDI.301) */ WORD WINAPI EngineDeleteFont16(LPFONTINFO16 lpFontInfo) { WORD handle; /* untested, don't know if it works. We seem to access some structure that is located after the FONTINFO. The FONTINFO documentation says that there may follow some char-width table or font bitmap or vector info. I think it is some kind of font bitmap that begins at offset 0x52, as FONTINFO goes up to 0x51. If this is correct, everything should be implemented correctly. */ if ( ((lpFontInfo->dfType & (RASTER_FONTTYPE|DEVICE_FONTTYPE)) == (RASTER_FONTTYPE|DEVICE_FONTTYPE)) && (LOWORD(lpFontInfo->dfFace) == LOWORD(lpFontInfo)+0x6e) && (handle = *(WORD *)(lpFontInfo+0x54)) ) { *(WORD *)(lpFontInfo+0x54) = 0; GlobalFree16(handle); } return 1; } /*********************************************************************** * EngineRealizeFont (GDI.302) */ WORD WINAPI EngineRealizeFont16(LPLOGFONT16 lplogFont, LPTEXTXFORM16 lptextxform, LPFONTINFO16 lpfontInfo) { FIXME("(%p,%p,%p),stub\n",lplogFont,lptextxform,lpfontInfo); return 0; } /*********************************************************************** * EngineRealizeFontExt (GDI.315) */ WORD WINAPI EngineRealizeFontExt16(LONG l1, LONG l2, LONG l3, LONG l4) { FIXME("(%08x,%08x,%08x,%08x),stub\n",l1,l2,l3,l4); return 0; } /*********************************************************************** * EngineGetCharWidth (GDI.303) */ WORD WINAPI EngineGetCharWidth16(LPFONTINFO16 lpFontInfo, BYTE firstChar, BYTE lastChar, LPINT16 buffer) { int i; for (i = firstChar; i <= lastChar; i++) FIXME(" returns font's average width for range %d to %d\n", firstChar, lastChar); *buffer++ = lpFontInfo->dfAvgWidth; /* insert some charwidth functionality here; use average width for now */ return 1; } /*********************************************************************** * EngineSetFontContext (GDI.304) */ WORD WINAPI EngineSetFontContext16(LPFONTINFO16 lpFontInfo, WORD data) { FIXME("stub?\n"); return 0; } /*********************************************************************** * EngineGetGlyphBMP (GDI.305) */ WORD WINAPI EngineGetGlyphBMP16(WORD word, LPFONTINFO16 lpFontInfo, WORD w1, WORD w2, LPSTR string, DWORD dword, /*LPBITMAPMETRICS16*/ LPVOID metrics) { FIXME("stub?\n"); return 0; } /*********************************************************************** * EngineMakeFontDir (GDI.306) */ DWORD WINAPI EngineMakeFontDir16(HDC16 hdc, LPFONTDIR16 fontdir, LPCSTR string) { FIXME(" stub! (always fails)\n"); return ~0UL; /* error */ } /*********************************************************************** * GetCharABCWidths (GDI.307) */ BOOL16 WINAPI GetCharABCWidths16( HDC16 hdc, UINT16 firstChar, UINT16 lastChar, LPABC16 abc ) { BOOL ret; UINT i; LPABC abc32 = HeapAlloc( GetProcessHeap(), 0, sizeof(ABC) * (lastChar - firstChar + 1) ); if ((ret = GetCharABCWidthsA( HDC_32(hdc), firstChar, lastChar, abc32 ))) { for (i = firstChar; i <= lastChar; i++) { abc[i-firstChar].abcA = abc32[i-firstChar].abcA; abc[i-firstChar].abcB = abc32[i-firstChar].abcB; abc[i-firstChar].abcC = abc32[i-firstChar].abcC; } } HeapFree( GetProcessHeap(), 0, abc32 ); return ret; } /*********************************************************************** * GetOutlineTextMetrics (GDI.308) * * Gets metrics for TrueType fonts. * * PARAMS * hdc [In] Handle of device context * cbData [In] Size of metric data array * lpOTM [Out] Address of metric data array * * RETURNS * Success: Non-zero or size of required buffer * Failure: 0 * * NOTES * lpOTM should be LPOUTLINETEXTMETRIC */ UINT16 WINAPI GetOutlineTextMetrics16( HDC16 hdc, UINT16 cbData, LPOUTLINETEXTMETRIC16 lpOTM ) { HDC hdc32 = HDC_32(hdc); int offset = sizeof(OUTLINETEXTMETRICA) - sizeof(*lpOTM); if (!lpOTM) { UINT buf_size = GetOutlineTextMetricsA(hdc32, NULL, NULL); if (buf_size == 0) return 0; return buf_size - offset; } if (cbData < sizeof(OUTLINETEXTMETRIC16)) return 0; /* extra data size for strings */ SIZE_T exsize = cbData - sizeof(*lpOTM); LPOUTLINETEXTMETRICA otm32 = HeapAlloc(GetProcessHeap(), 0, sizeof(OUTLINETEXTMETRICA) + exsize); otm32->otmSize = sizeof(*otm32) + exsize; UINT result = GetOutlineTextMetricsA(hdc32, sizeof(*otm32) + exsize, otm32); if (result == 0) { HeapFree(GetProcessHeap(), 0, otm32); return 0; } lpOTM->otmSize = otm32->otmSize - offset; lpOTM->otmTextMetrics.tmHeight = otm32->otmTextMetrics.tmHeight; lpOTM->otmTextMetrics.tmAscent = otm32->otmTextMetrics.tmAscent; lpOTM->otmTextMetrics.tmDescent = otm32->otmTextMetrics.tmDescent; lpOTM->otmTextMetrics.tmInternalLeading = otm32->otmTextMetrics.tmInternalLeading; lpOTM->otmTextMetrics.tmExternalLeading = otm32->otmTextMetrics.tmExternalLeading; lpOTM->otmTextMetrics.tmAveCharWidth = otm32->otmTextMetrics.tmAveCharWidth; lpOTM->otmTextMetrics.tmMaxCharWidth = otm32->otmTextMetrics.tmMaxCharWidth; lpOTM->otmTextMetrics.tmWeight = otm32->otmTextMetrics.tmWeight; lpOTM->otmTextMetrics.tmOverhang = otm32->otmTextMetrics.tmOverhang; lpOTM->otmTextMetrics.tmDigitizedAspectX = otm32->otmTextMetrics.tmDigitizedAspectX; lpOTM->otmTextMetrics.tmDigitizedAspectY = otm32->otmTextMetrics.tmDigitizedAspectY; lpOTM->otmTextMetrics.tmFirstChar = otm32->otmTextMetrics.tmFirstChar; lpOTM->otmTextMetrics.tmLastChar = otm32->otmTextMetrics.tmLastChar; lpOTM->otmTextMetrics.tmDefaultChar = otm32->otmTextMetrics.tmDefaultChar; lpOTM->otmTextMetrics.tmBreakChar = otm32->otmTextMetrics.tmBreakChar; lpOTM->otmTextMetrics.tmItalic = otm32->otmTextMetrics.tmItalic; lpOTM->otmTextMetrics.tmUnderlined = otm32->otmTextMetrics.tmUnderlined; lpOTM->otmTextMetrics.tmStruckOut = otm32->otmTextMetrics.tmStruckOut; lpOTM->otmTextMetrics.tmPitchAndFamily = otm32->otmTextMetrics.tmPitchAndFamily; lpOTM->otmTextMetrics.tmCharSet = otm32->otmTextMetrics.tmCharSet; lpOTM->otmFiller = otm32->otmFiller; lpOTM->otmPanoseNumber = otm32->otmPanoseNumber; lpOTM->otmfsSelection = otm32->otmfsSelection; lpOTM->otmfsType = otm32->otmfsType; lpOTM->otmsCharSlopeRise = otm32->otmsCharSlopeRise; lpOTM->otmsCharSlopeRun = otm32->otmsCharSlopeRun; lpOTM->otmItalicAngle = otm32->otmItalicAngle; lpOTM->otmEMSquare = otm32->otmEMSquare; lpOTM->otmAscent = otm32->otmAscent; lpOTM->otmDescent = otm32->otmDescent; lpOTM->otmLineGap = otm32->otmLineGap; lpOTM->otmsCapEmHeight = otm32->otmsCapEmHeight; lpOTM->otmsXHeight = otm32->otmsXHeight; lpOTM->otmrcFontBox.left = otm32->otmrcFontBox.left; lpOTM->otmrcFontBox.top = otm32->otmrcFontBox.top; lpOTM->otmrcFontBox.right = otm32->otmrcFontBox.right; lpOTM->otmrcFontBox.bottom = otm32->otmrcFontBox.bottom; lpOTM->otmMacAscent = otm32->otmMacAscent; lpOTM->otmMacDescent = otm32->otmMacDescent; lpOTM->otmMacLineGap = otm32->otmMacLineGap; lpOTM->otmusMinimumPPEM = otm32->otmusMinimumPPEM; lpOTM->otmptSubscriptSize.x = otm32->otmptSubscriptSize.x; lpOTM->otmptSubscriptSize.y = otm32->otmptSubscriptSize.y; lpOTM->otmptSubscriptOffset.x = otm32->otmptSubscriptOffset.x; lpOTM->otmptSubscriptOffset.y = otm32->otmptSubscriptOffset.y; lpOTM->otmptSuperscriptSize.x = otm32->otmptSuperscriptSize.x; lpOTM->otmptSuperscriptSize.y = otm32->otmptSuperscriptSize.y; lpOTM->otmptSuperscriptOffset.x = otm32->otmptSuperscriptOffset.x; lpOTM->otmptSuperscriptOffset.y = otm32->otmptSuperscriptOffset.y; lpOTM->otmsStrikeoutSize = otm32->otmsStrikeoutSize; lpOTM->otmsStrikeoutPosition = otm32->otmsStrikeoutPosition; lpOTM->otmsUnderscorePosition = otm32->otmsUnderscorePosition; lpOTM->otmsUnderscoreSize = otm32->otmsUnderscoreSize; lpOTM->otmpFamilyName = otm32->otmpFamilyName ? (SIZE_T)otm32->otmpFamilyName - offset : 0; lpOTM->otmpFaceName = otm32->otmpFaceName ? (SIZE_T)otm32->otmpFaceName - offset : 0; lpOTM->otmpStyleName = otm32->otmpStyleName ? (SIZE_T)otm32->otmpStyleName - offset : 0; lpOTM->otmpFullName = otm32->otmpFullName ? (SIZE_T)otm32->otmpFullName - offset : 0; memcpy((LPBYTE)lpOTM + sizeof(*lpOTM), (LPBYTE)otm32 + sizeof(*otm32), result - sizeof(*otm32)); HeapFree(GetProcessHeap(), 0, otm32); return result - offset; } /*********************************************************************** * GetGlyphOutline (GDI.309) */ DWORD WINAPI GetGlyphOutline16( HDC16 hdc, UINT16 uChar, UINT16 fuFormat, LPGLYPHMETRICS16 lpgm, DWORD cbBuffer, LPVOID lpBuffer, const MAT2 *lpmat2 ) { DWORD ret; GLYPHMETRICS gm32; ret = GetGlyphOutlineA( HDC_32(hdc), uChar, fuFormat, &gm32, cbBuffer, lpBuffer, lpmat2); if (ret && ret != GDI_ERROR) { lpgm->gmBlackBoxX = gm32.gmBlackBoxX; lpgm->gmBlackBoxY = gm32.gmBlackBoxY; lpgm->gmptGlyphOrigin.x = gm32.gmptGlyphOrigin.x; lpgm->gmptGlyphOrigin.y = gm32.gmptGlyphOrigin.y; lpgm->gmCellIncX = gm32.gmCellIncX; lpgm->gmCellIncY = gm32.gmCellIncY; } return ret; } /*********************************************************************** * CreateScalableFontResource (GDI.310) */ BOOL16 WINAPI CreateScalableFontResource16( UINT16 fHidden, LPCSTR lpszResourceFile, LPCSTR fontFile, LPCSTR path ) { return CreateScalableFontResourceA( fHidden, lpszResourceFile, fontFile, path ); } /************************************************************************* * GetFontData (GDI.311) * */ DWORD WINAPI GetFontData16( HDC16 hdc, DWORD table, DWORD offset, LPVOID buffer, DWORD count ) { return GetFontData( HDC_32(hdc), table, offset, buffer, count ); } /************************************************************************* * GetRasterizerCaps (GDI.313) */ BOOL16 WINAPI GetRasterizerCaps16( LPRASTERIZER_STATUS lprs, UINT16 cbNumBytes ) { /* LPRASTERIZER_STATUS must be aligned */ BYTE caps_buf[100] = { 0 }; LPRASTERIZER_STATUS cap = caps_buf + (sizeof(SIZE_T) - (SIZE_T)caps_buf % sizeof(SIZE_T)); if (GetRasterizerCaps(cap, cbNumBytes)) { memcpy(lprs, cap, min(cbNumBytes, sizeof(RASTERIZER_STATUS))); return TRUE; } else { return FALSE; } } /*********************************************************************** * EnumFontFamilies (GDI.330) */ INT16 WINAPI EnumFontFamilies16( HDC16 hDC, LPCSTR lpFamily, FONTENUMPROC16 efproc, LPARAM lpData ) { struct callback16_info info; info.proc = (FARPROC16)efproc; info.param = lpData; info.result = 1; return EnumFontFamiliesA(HDC_32(hDC), lpFamily, enum_font_callback, (LPARAM)&info); } /************************************************************************* * GetKerningPairs (GDI.332) * */ INT16 WINAPI GetKerningPairs16( HDC16 hdc, INT16 count, LPKERNINGPAIR16 pairs ) { KERNINGPAIR *pairs32; INT i, ret; if (!count) return 0; if (!(pairs32 = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pairs32) ))) return 0; if ((ret = GetKerningPairsA( HDC_32(hdc), count, pairs32 ))) { for (i = 0; i < ret; i++) { pairs->wFirst = pairs32->wFirst; pairs->wSecond = pairs32->wSecond; pairs->iKernAmount = pairs32->iKernAmount; } } HeapFree( GetProcessHeap(), 0, pairs32 ); return ret; } /*********************************************************************** * GetTextAlign (GDI.345) */ UINT16 WINAPI GetTextAlign16( HDC16 hdc ) { return GetTextAlign( HDC_32(hdc) ); } /*********************************************************************** * SetTextAlign (GDI.346) */ UINT16 WINAPI SetTextAlign16( HDC16 hdc, UINT16 align ) { return SetTextAlign( HDC_32(hdc), align ); } /*********************************************************************** * Chord (GDI.348) */ BOOL16 WINAPI Chord16( HDC16 hdc, INT16 left, INT16 top, INT16 right, INT16 bottom, INT16 xstart, INT16 ystart, INT16 xend, INT16 yend ) { return Chord( HDC_32(hdc), left, top, right, bottom, xstart, ystart, xend, yend ); } /*********************************************************************** * SetMapperFlags (GDI.349) */ DWORD WINAPI SetMapperFlags16( HDC16 hdc, DWORD flags ) { return SetMapperFlags( HDC_32(hdc), flags ); } /*********************************************************************** * GetCharWidth (GDI.350) */ BOOL16 WINAPI GetCharWidth16( HDC16 hdc, UINT16 firstChar, UINT16 lastChar, LPINT16 buffer ) { BOOL retVal = FALSE; TEXTMETRIC tm = {0}; HDC hdc32 = HDC_32(hdc); GetTextMetricsA(hdc32, &tm); if( firstChar != lastChar ) { LPINT buf32 = HeapAlloc(GetProcessHeap(), 0, sizeof(INT)*(1 + (lastChar - firstChar))); if( buf32 ) { LPINT obuf32 = buf32; UINT i; retVal = GetCharWidth32A( hdc32, firstChar, lastChar, buf32); if (retVal) { for (i = firstChar; i <= lastChar; i++) *buffer++ = (*buf32++) + tm.tmOverhang; } HeapFree(GetProcessHeap(), 0, obuf32); } } else /* happens quite often to warrant a special treatment */ { INT chWidth; retVal = GetCharWidth32A( hdc32, firstChar, lastChar, &chWidth ); *buffer = chWidth + tm.tmOverhang; } return retVal; } /*********************************************************************** * ExtTextOut (GDI.351) */ BOOL16 WINAPI ExtTextOut16( HDC16 hdc, INT16 x, INT16 y, UINT16 flags, const RECT16 *lprect, LPCSTR str, UINT16 count, const INT16 *lpDx ) { BOOL ret; int i; RECT rect32; LPINT lpdx32 = NULL; if (lpDx) { lpdx32 = HeapAlloc( GetProcessHeap(),0, sizeof(INT)*count ); if(lpdx32 == NULL) return FALSE; for (i=count;i--;) lpdx32[i]=lpDx[i]; } if (lprect) { rect32.left = lprect->left; rect32.top = lprect->top; rect32.right = lprect->right; rect32.bottom = lprect->bottom; } ret = ExtTextOutA(HDC_32(hdc), x, y, flags, lprect ? &rect32 : NULL, str, count, lpdx32); HeapFree( GetProcessHeap(), 0, lpdx32 ); return ret; } /*********************************************************************** * CreatePalette (GDI.360) */ HPALETTE16 WINAPI CreatePalette16( const LOGPALETTE* palette ) { return HPALETTE_16( CreatePalette( palette ) ); } /*********************************************************************** * GDISelectPalette (GDI.361) */ HPALETTE16 WINAPI GDISelectPalette16( HDC16 hdc, HPALETTE16 hpalette, WORD wBkg ) { HPALETTE16 ret = HPALETTE_16( SelectPalette( HDC_32(hdc), HPALETTE_32(hpalette), wBkg )); if (ret && !wBkg) hPrimaryPalette = hpalette; return ret; } /*********************************************************************** * GDIRealizePalette (GDI.362) */ UINT16 WINAPI GDIRealizePalette16( HDC16 hdc ) { HDC hdc32 = HDC_32(hdc); if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY) && (GetObjectType(hdc32) == OBJ_DC)) set_realized_palette(hdc32); return RealizePalette(hdc32); } /*********************************************************************** * GetPaletteEntries (GDI.363) */ UINT16 WINAPI GetPaletteEntries16( HPALETTE16 hpalette, UINT16 start, UINT16 count, LPPALETTEENTRY entries ) { return GetPaletteEntries( HPALETTE_32(hpalette), start, count, entries ); } static WINAPI paint_all_windows(HWND hwnd, LPARAM lparam) { BOOL found = FALSE; DWORD *wndlist = (DWORD *)lparam; for (int j = 1; j <= wndlist[0]; j++) { if (wndlist[j] == hwnd) { found = TRUE; break; } } if (!found) RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW); return FALSE; } BOOL update_palette(HPALETTE16 hpalette) { HPALETTE hpal32 = HPALETTE_32(hpalette); if (GetObjectType(hpal32) != OBJ_PAL) return; DWORD *dclist = GetPtr16(hpalette, 1); DWORD *wndlist = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (dclist[0] + 1) * 4); for (int i = 1; i < dclist[0]; i++) { if (dclist[i]) { HDC hdc32 = HDC_32(dclist[i] & 0xffff); if (!GetObjectType(hdc32) || (GetCurrentObject(hdc32, OBJ_PAL) != hpal32)) { dclist[i] = 0; continue; } HWND hwnd = WindowFromDC(hdc32); if (hwnd) { BOOL found = FALSE; for (int j = 1; j <= wndlist[0]; j++) { if (wndlist[j] == hwnd) { found = TRUE; break; } } if (!found) { wndlist[wndlist[0] + 1] = hwnd; wndlist[0]++; RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW); } } else if (krnl386_get_config_int("otvdm", "DIBPalette", FALSE)) { DIBSECTION dib; HBITMAP bitmap = GetCurrentObject(hdc32, OBJ_BITMAP); int ret = GetObject(bitmap, sizeof(DIBSECTION), &dib); if ((ret == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(bitmap), 1) == 0xd1b00001)) set_dib_colors(hdc32); } } } if (krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (hpal32 == get_realized_palette())) EnumThreadWindows(GetCurrentThreadId(), paint_all_windows, wndlist); HeapFree(GetProcessHeap(), 0, wndlist); } /*********************************************************************** * SetPaletteEntries (GDI.364) */ UINT16 WINAPI SetPaletteEntries16( HPALETTE16 hpalette, UINT16 start, UINT16 count, const PALETTEENTRY *entries ) { UINT16 ret = SetPaletteEntries( HPALETTE_32(hpalette), start, count, entries ); if (GetPtr16(hpalette, 1)) update_palette(hpalette); return ret; } /********************************************************************** * UpdateColors (GDI.366) */ INT16 WINAPI UpdateColors16( HDC16 hdc ) { UpdateColors( HDC_32(hdc) ); return TRUE; } /*********************************************************************** * AnimatePalette (GDI.367) */ void WINAPI AnimatePalette16( HPALETTE16 hpalette, UINT16 StartIndex, UINT16 NumEntries, const PALETTEENTRY* PaletteColors) { AnimatePalette(HPALETTE_32(hpalette), StartIndex, NumEntries, PaletteColors); if (GetPtr16(hpalette, 1)) update_palette(hpalette); } /*********************************************************************** * ResizePalette (GDI.368) */ BOOL16 WINAPI ResizePalette16( HPALETTE16 hpalette, UINT16 cEntries ) { return ResizePalette( HPALETTE_32(hpalette), cEntries ); } /*********************************************************************** * GetNearestPaletteIndex (GDI.370) */ UINT16 WINAPI GetNearestPaletteIndex16( HPALETTE16 hpalette, COLORREF color ) { return GetNearestPaletteIndex( HPALETTE_32(hpalette), check_colorref(color) ); } /********************************************************************** * ExtFloodFill (GDI.372) */ BOOL16 WINAPI ExtFloodFill16( HDC16 hdc, INT16 x, INT16 y, COLORREF color, UINT16 fillType ) { return ExtFloodFill( HDC_32(hdc), x, y, check_colorref(color), fillType ); } /*********************************************************************** * SetSystemPaletteUse (GDI.373) */ UINT16 WINAPI SetSystemPaletteUse16( HDC16 hdc, UINT16 use ) { syspaluse = use; return SetSystemPaletteUse( HDC_32(hdc), use ); } /*********************************************************************** * GetSystemPaletteUse (GDI.374) */ UINT16 WINAPI GetSystemPaletteUse16( HDC16 hdc ) { UINT16 ret = GetSystemPaletteUse( HDC_32(hdc) ); if (!ret && krnl386_get_compat_mode("256color")) ret = syspaluse; return ret; } /*********************************************************************** * GetSystemPaletteEntries (GDI.375) */ UINT16 WINAPI GetSystemPaletteEntries16( HDC16 hdc, UINT16 start, UINT16 count, LPPALETTEENTRY entries ) { if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE)) { HPALETTE hpal = get_realized_palette(); if (hpal == GetStockObject(DEFAULT_PALETTE)) { GetSystemPaletteEntries( HDC_32(hdc), start, count, entries ); return min(count, 256 - start); } UINT ret = GetPaletteEntries(hpal, start, count, entries); return ret; } return GetSystemPaletteEntries( HDC_32(hdc), start, count, entries ); } /*********************************************************************** * ResetDC (GDI.376) */ HDC16 WINAPI ResetDC16( HDC16 hdc, const DEVMODEA *devmode ) { DEVMODEA dma = {0}; if (!IsValidDevmodeA(devmode, devmode->dmSize + devmode->dmDriverExtra)) return NULL; memcpy(&dma, devmode, devmode->dmSize); dma.dmSize = sizeof(DEVMODEA); dma.dmDriverExtra = 0; if (!dma.dmDeviceName[0]) dma.dmDeviceName[0] = '.'; return HDC_16( ResetDCA( HDC_32(hdc), &dma ) ); } /****************************************************************** * StartDoc (GDI.377) */ INT16 WINAPI StartDoc16( HDC16 hdc, const DOCINFO16 *lpdoc ) { DOCINFOA docA; DWORD count; INT16 ret; docA.cbSize = sizeof(DOCINFOA); docA.lpszDocName = MapSL(lpdoc->lpszDocName); docA.lpszOutput = MapSL(lpdoc->lpszOutput); if(lpdoc->cbSize > offsetof(DOCINFO16,lpszDatatype)) docA.lpszDatatype = MapSL(lpdoc->lpszDatatype); else docA.lpszDatatype = NULL; if(lpdoc->cbSize > offsetof(DOCINFO16,fwType)) docA.fwType = lpdoc->fwType; else docA.fwType = 0; ReleaseThunkLock(&count); ret = StartDocA( HDC_32(hdc), &docA ); // if startdoc tries to show a save file dialog but the active window // disappears then it'll fail, try again and it should find a new window if ((ret < 0) && (GetLastError() == ERROR_INVALID_WINDOW_HANDLE)) ret = StartDocA( HDC_32(hdc), &docA ); RestoreThunkLock(count); return ret; } /****************************************************************** * EndDoc (GDI.378) */ INT16 WINAPI EndDoc16( HDC16 hdc ) { return EndDoc( HDC_32(hdc) ); } /****************************************************************** * StartPage (GDI.379) */ INT16 WINAPI StartPage16( HDC16 hdc ) { return StartPage( HDC_32(hdc) ); } /****************************************************************** * EndPage (GDI.380) */ INT16 WINAPI EndPage16( HDC16 hdc ) { return EndPage( HDC_32(hdc) ); } /****************************************************************************** * AbortDoc (GDI.382) */ INT16 WINAPI AbortDoc16( HDC16 hdc ) { return AbortDoc( HDC_32(hdc) ); } /*********************************************************************** * FastWindowFrame (GDI.400) */ BOOL16 WINAPI FastWindowFrame16( HDC16 hdc, const RECT16 *rect, INT16 width, INT16 height, DWORD rop ) { HDC hdc32 = HDC_32(hdc); HBRUSH hbrush = SelectObject( hdc32, GetStockObject( GRAY_BRUSH ) ); PatBlt( hdc32, rect->left, rect->top, rect->right - rect->left - width, height, rop ); PatBlt( hdc32, rect->left, rect->top + height, width, rect->bottom - rect->top - height, rop ); PatBlt( hdc32, rect->left + width, rect->bottom - 1, rect->right - rect->left - width, -height, rop ); PatBlt( hdc32, rect->right - 1, rect->top, -width, rect->bottom - rect->top - height, rop ); SelectObject( hdc32, hbrush ); return TRUE; } /*********************************************************************** * GdiInit2 (GDI.403) * * See "Undocumented Windows" * * PARAMS * h1 [I] GDI object * h2 [I] global data */ HANDLE16 WINAPI GdiInit216( HANDLE16 h1, HANDLE16 h2 ) { FIXME("(%04x, %04x), stub.\n", h1, h2); if (h2 == 0xffff) return 0xffff; /* undefined return value */ return h1; /* FIXME: should be the memory handle of h1 */ } /*********************************************************************** * FinalGdiInit (GDI.405) */ void WINAPI FinalGdiInit16( HBRUSH16 hPattern /* [in] fill pattern of desktop */ ) { } /*********************************************************************** * CreateUserBitmap (GDI.407) */ HBITMAP16 WINAPI CreateUserBitmap16( INT16 width, INT16 height, UINT16 planes, UINT16 bpp, LPCVOID bits ) { return CreateBitmap16( width, height, planes, bpp, bits ); } /*********************************************************************** * CreateUserDiscardableBitmap (GDI.409) */ HBITMAP16 WINAPI CreateUserDiscardableBitmap16( WORD dummy, INT16 width, INT16 height ) { HDC hdc = CreateDCA( "DISPLAY", NULL, NULL, NULL ); HBITMAP ret = CreateCompatibleBitmap( hdc, width, height ); DeleteDC( hdc ); return HBITMAP_16(ret); } /*********************************************************************** * GetCurLogFont (GDI.411) */ HFONT16 WINAPI GetCurLogFont16( HDC16 hdc ) { return HFONT_16( GetCurrentObject( HDC_32(hdc), OBJ_FONT ) ); } static DWORD rle_size(int type, const VOID *bits) { DWORD ret = 0; __TRY { DWORD offset = 0; BYTE *data = (BYTE *)bits; BOOL loop = TRUE; do { if (!data[offset++]) { BYTE byte = data[offset++]; switch (byte) { case 0: break; case 1: ret = offset; loop = FALSE; break; default: offset += byte / type; offset = (offset + 1) & ~1; break; } } else offset++; } while (loop); } __EXCEPT_ALL { ERR("bad bitmap, type %d", type); } __ENDTRY return ret; } /*********************************************************************** * StretchDIBits (GDI.439) */ INT16 WINAPI StretchDIBits16( HDC16 hdc, INT16 xDst, INT16 yDst, INT16 widthDst, INT16 heightDst, INT16 xSrc, INT16 ySrc, INT16 widthSrc, INT16 heightSrc, const VOID *bits, const BITMAPINFO *info, UINT16 wUsage, DWORD dwRop ) { BITMAPINFO *bmp = NULL; INT16 ret; HDC hdc32 = HDC_32(hdc); if ((info->bmiHeader.biCompression == BI_RLE4) || (info->bmiHeader.biCompression == BI_RLE8)) { int hdrsize = info->bmiHeader.biSize + ((info->bmiHeader.biClrUsed ? info->bmiHeader.biClrUsed : (info->bmiHeader.biBitCount == 4 ? 16 : 256)) * (wUsage == DIB_PAL_COLORS ? 2 : 4)); bmp = HeapAlloc(GetProcessHeap(), 0, hdrsize); memcpy(bmp, info, hdrsize); bmp->bmiHeader.biSizeImage = rle_size(info->bmiHeader.biCompression, bits); } 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 { DIBSECTION dib; HBITMAP hbmp = GetCurrentObject(hdc32, OBJ_BITMAP); int count = GetObject(hbmp, sizeof(DIBSECTION), &dib); if ((count == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(hbmp), 1) == 0xd1b00001)) { char *section; HPALETTE hpal = GetCurrentObject(hdc32, OBJ_PAL); HBITMAP hbmpsrc = CreateDIBSection(hdc32, info, wUsage, §ion, NULL, 0); HDC hdcsrc = CreateCompatibleDC(hdc32); HPALETTE oldpal = SelectPalette(hdcsrc, hpal, FALSE); HBITMAP oldbmp = SelectObject(hdcsrc, hbmpsrc); memcpy(section, bits, ((info->bmiHeader.biWidth + 3) & ~3) * (ySrc + heightSrc)); INT16 ret = StretchBlt(hdc32, xDst, yDst, widthDst, heightDst, hdcsrc, xSrc, ySrc, widthSrc, heightSrc, dwRop); SelectPalette(hdcsrc, oldpal, FALSE); SelectObject(hdcsrc, oldbmp); DeleteObject(hbmpsrc); DeleteDC(hdcsrc); return ret; } } ret = StretchDIBits( hdc32, xDst, yDst, widthDst, heightDst, xSrc, ySrc, widthSrc, heightSrc, bits, bmp ? bmp : info, wUsage, dwRop ); if (bmp) HeapFree(GetProcessHeap(), 0, bmp); return ret; } /*********************************************************************** * SetDIBits (GDI.440) */ INT16 WINAPI SetDIBits16( HDC16 hdc, HBITMAP16 hbitmap, UINT16 startscan, UINT16 lines, LPCVOID bits, const BITMAPINFO *info, UINT16 coloruse ) { HBITMAP hbitmap32 = HBITMAP_32(hbitmap); if (krnl386_get_compat_mode("256color")) { // the conversion from 8bpp->1bpp on winxp+ (even in 256 color mode) is different than win31/95 and wine // the problem shows in The Even More Incredible Machine where the sprites are almost completely masked out // the cause is that nt scans the dib pallette for the back color and marks the first found match as the // only index to be 1 and all others are 0, win31 does the match by checking every pixel so if there are // multiple colors that match the back color nt will ignore all but one while win31 will find them all // TEMIM hits this problem, by converting to 32bpp the issue is bypassed // TODO: SetDIBitsFromDevice, 4bpp dibs may also be affected BITMAP bmap; int ret = GetObject(hbitmap32, sizeof(BITMAP), &bmap); if ((bmap.bmPlanes == 1) && (bmap.bmBitsPixel == 1) && (info->bmiHeader.biBitCount == 8)) { HDC hdcscr = GetDC(NULL); HDC hdcsrc = CreateCompatibleDC(hdcscr); HDC hdcdst = HDC_32(hdc); HBITMAP hbmp = CreateCompatibleBitmap(hdcscr, info->bmiHeader.biWidth, info->bmiHeader.biHeight); HBITMAP origbmp1 = SelectObject(hdcsrc, hbmp); int start = info->bmiHeader.biHeight - lines - startscan; ReleaseDC(hdcscr, NULL); SaveDC(hdcdst); SelectObject(hdcdst, hbitmap32); SetDIBits(hdcsrc, hbmp, startscan, lines, bits, info, coloruse); BitBlt(hdcdst, 0, start, info->bmiHeader.biWidth, lines, hdcsrc, 0, start, SRCCOPY); SelectObject(hdcsrc, origbmp1); DeleteObject(hbmp); DeleteDC(hdcsrc); RestoreDC(hdcdst, -1); return lines; } } BITMAPINFO *bmp = NULL; INT16 ret; if (((info->bmiHeader.biCompression == BI_RLE4) || (info->bmiHeader.biCompression == BI_RLE8)) && !info->bmiHeader.biSizeImage) { int hdrsize = info->bmiHeader.biSize + ((info->bmiHeader.biClrUsed ? info->bmiHeader.biClrUsed : (info->bmiHeader.biBitCount == 4 ? 16 : 256)) * (coloruse == DIB_PAL_COLORS ? 2 : 4)); bmp = HeapAlloc(GetProcessHeap(), 0, hdrsize); memcpy(bmp, info, hdrsize); bmp->bmiHeader.biSizeImage = rle_size(info->bmiHeader.biCompression, bits); } ret = SetDIBits( HDC_32(hdc), hbitmap32, startscan, lines, bits, bmp ? bmp : info, coloruse ); if (bmp) HeapFree(GetProcessHeap(), 0, bmp); return ret; } /*********************************************************************** * GetDIBits (GDI.441) */ INT16 WINAPI GetDIBits16( HDC16 hdc, HBITMAP16 hbitmap, UINT16 startscan, UINT16 lines, LPVOID bits, BITMAPINFO * info, UINT16 coloruse ) { if (lines > info->bmiHeader.biHeight) { lines = info->bmiHeader.biHeight; } return GetDIBits( HDC_32(hdc), HBITMAP_32(hbitmap), startscan, lines, bits, info, coloruse ); } /*********************************************************************** * CreateDIBitmap (GDI.442) */ HBITMAP16 WINAPI CreateDIBitmap16( HDC16 hdc, const BITMAPINFOHEADER * header, DWORD init, LPCVOID bits, const BITMAPINFO * data, UINT16 coloruse ) { BITMAPINFO *bmp = NULL; HBITMAP16 ret; if (data && ((data->bmiHeader.biCompression == BI_RLE4) || (data->bmiHeader.biCompression == BI_RLE8))) { int hdrsize = data->bmiHeader.biSize + ((data->bmiHeader.biClrUsed ? data->bmiHeader.biClrUsed : (data->bmiHeader.biBitCount == 4 ? 16 : 256)) * (coloruse == DIB_PAL_COLORS ? 2 : 4)); bmp = HeapAlloc(GetProcessHeap(), 0, hdrsize); memcpy(bmp, data, hdrsize); bmp->bmiHeader.biSizeImage = rle_size(data->bmiHeader.biCompression, bits); } if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE)) { HDC16 hdc2 = CreateCompatibleDC16(hdc); HDC hdc232 = HDC_32(hdc2); ret = CreateCompatibleBitmap16(hdc2, header->biWidth, header->biHeight); HBITMAP hbmp = HDC_32(ret); HBITMAP oldbmp = SelectObject(hdc232, hbmp); if (GetObjectType(HDC_32(hdc)) == OBJ_DC) set_dib_colors(hdc232); SetDIBits(hdc232, hbmp, 0, data->bmiHeader.biHeight, bits, bmp ? bmp : data, coloruse); SelectObject(hdc232, oldbmp); DeleteDC16(hdc2); } else ret = HBITMAP_16( CreateDIBitmap( HDC_32(hdc), header, init, bits, bmp ? bmp : data, coloruse ) ); if (bmp) HeapFree(GetProcessHeap(), 0, bmp); return ret; } /*********************************************************************** * SetDIBitsToDevice (GDI.443) */ INT16 WINAPI SetDIBitsToDevice16( HDC16 hdc, INT16 xDest, INT16 yDest, INT16 cx, INT16 cy, INT16 xSrc, INT16 ySrc, UINT16 startscan, UINT16 lines, LPCVOID bits, const BITMAPINFO *info, UINT16 coloruse ) { return SetDIBitsToDevice( HDC_32(hdc), xDest, yDest, cx, cy, xSrc, ySrc, startscan, lines, bits, info, coloruse ); } /*********************************************************************** * CreateRoundRectRgn (GDI.444) * * If either ellipse dimension is zero we call CreateRectRgn16 for its * `special' behaviour. -ve ellipse dimensions can result in GPFs under win3.1 * we just let CreateRoundRectRgn convert them to +ve values. */ HRGN16 WINAPI CreateRoundRectRgn16( INT16 left, INT16 top, INT16 right, INT16 bottom, INT16 ellipse_width, INT16 ellipse_height ) { if( ellipse_width == 0 || ellipse_height == 0 ) return CreateRectRgn16( left, top, right, bottom ); else return HRGN_16( CreateRoundRectRgn( left, top, right, bottom, ellipse_width, ellipse_height )); } /*********************************************************************** * CreateDIBPatternBrush (GDI.445) */ HBRUSH16 WINAPI CreateDIBPatternBrush16( HGLOBAL16 hbitmap, UINT16 coloruse ) { BITMAPINFO *bmi; HBRUSH16 ret; if (!(bmi = GlobalLock16( hbitmap ))) return 0; ret = HBRUSH_16( CreateDIBPatternBrushPt( bmi, coloruse )); GlobalUnlock16( hbitmap ); return ret; } /********************************************************************** * PolyPolygon (GDI.450) */ BOOL16 WINAPI PolyPolygon16( HDC16 hdc, const POINT16* pt, const INT16* counts, UINT16 polygons ) { int i,nrpts; LPPOINT pt32; LPINT counts32; BOOL16 ret; nrpts=0; for (i=polygons;i--;) nrpts+=counts[i]; pt32 = HeapAlloc( GetProcessHeap(), 0, sizeof(POINT)*nrpts); if(pt32 == NULL) return FALSE; for (i=nrpts;i--;) { pt32[i].x = pt[i].x; pt32[i].y = pt[i].y; } counts32 = HeapAlloc( GetProcessHeap(), 0, polygons*sizeof(INT) ); if(counts32 == NULL) { HeapFree( GetProcessHeap(), 0, pt32 ); return FALSE; } for (i=polygons;i--;) counts32[i]=counts[i]; ret = PolyPolygon(HDC_32(hdc),pt32,counts32,polygons); HeapFree( GetProcessHeap(), 0, counts32 ); HeapFree( GetProcessHeap(), 0, pt32 ); return ret; } /*********************************************************************** * CreatePolyPolygonRgn (GDI.451) */ HRGN16 WINAPI CreatePolyPolygonRgn16( const POINT16 *points, const INT16 *count, INT16 nbpolygons, INT16 mode ) { HRGN hrgn; int i, npts = 0; INT *count32; POINT *points32; for (i = 0; i < nbpolygons; i++) npts += count[i]; points32 = HeapAlloc( GetProcessHeap(), 0, npts * sizeof(POINT) ); for (i = 0; i < npts; i++) { points32[i].x = points[i].x; points32[i].y = points[i].y; } count32 = HeapAlloc( GetProcessHeap(), 0, nbpolygons * sizeof(INT) ); for (i = 0; i < nbpolygons; i++) count32[i] = count[i]; hrgn = CreatePolyPolygonRgn( points32, count32, nbpolygons, mode ); HeapFree( GetProcessHeap(), 0, count32 ); HeapFree( GetProcessHeap(), 0, points32 ); return HRGN_16(hrgn); } /*********************************************************************** * GdiSeeGdiDo (GDI.452) */ DWORD WINAPI GdiSeeGdiDo16( WORD wReqType, WORD wParam1, WORD wParam2, WORD wParam3 ) { DWORD ret = ~0U; switch (wReqType) { case 0x0001: /* LocalAlloc */ WARN("LocalAlloc16(%x, %x): ignoring\n", wParam1, wParam3); ret = 0; break; case 0x0002: /* LocalFree */ WARN("LocalFree16(%x): ignoring\n", wParam1); ret = 0; break; case 0x0003: /* LocalCompact */ WARN("LocalCompact16(%x): ignoring\n", wParam3); ret = 65000; /* lie about the amount of free space */ break; case 0x0103: /* LocalHeap */ WARN("LocalHeap16(): ignoring\n"); break; default: WARN("(wReqType=%04x): Unknown\n", wReqType); break; } return ret; } /*********************************************************************** * SetObjectOwner (GDI.461) */ void WINAPI SetObjectOwner16( HGDIOBJ16 handle, HANDLE16 owner ) { /* Nothing to do */ } /*********************************************************************** * IsGDIObject (GDI.462) * * returns type of object if valid (W95 system programming secrets p. 264-5) */ BOOL16 WINAPI IsGDIObject16( HGDIOBJ16 handle16 ) { static const BYTE type_map[] = { 0, /* bad */ 1, /* OBJ_PEN */ 2, /* OBJ_BRUSH */ 7, /* OBJ_DC */ 9, /* OBJ_METADC */ 4, /* OBJ_PAL */ 3, /* OBJ_FONT */ 5, /* OBJ_BITMAP */ 6, /* OBJ_REGION */ 10, /* OBJ_METAFILE */ 7, /* OBJ_MEMDC */ 0, /* OBJ_EXTPEN */ 9, /* OBJ_ENHMETADC */ 12, /* OBJ_ENHMETAFILE */ 0 /* OBJ_COLORSPACE */ }; UINT type = GetObjectType( HGDIOBJ_32( handle16 )); if (type >= ARRAY_SIZE(type_map)) return FALSE; return type_map[type]; } /*********************************************************************** * RectVisible (GDI.465) * RectVisibleOld (GDI.104) */ BOOL16 WINAPI RectVisible16( HDC16 hdc, const RECT16* rect16 ) { RECT rect; rect.left = rect16->left; rect.top = rect16->top; rect.right = rect16->right; rect.bottom = rect16->bottom; return RectVisible( HDC_32(hdc), &rect ); } /*********************************************************************** * RectInRegion (GDI.466) * RectInRegionOld (GDI.181) */ BOOL16 WINAPI RectInRegion16( HRGN16 hrgn, const RECT16 *rect ) { RECT r32; r32.left = rect->left; r32.top = rect->top; r32.right = rect->right; r32.bottom = rect->bottom; return RectInRegion( HRGN_32(hrgn), &r32 ); } /*********************************************************************** * GetBitmapDimensionEx (GDI.468) */ BOOL16 WINAPI GetBitmapDimensionEx16( HBITMAP16 hbitmap, LPSIZE16 size ) { SIZE size32; BOOL ret = GetBitmapDimensionEx( HBITMAP_32(hbitmap), &size32 ); if (ret) { size->cx = size32.cx; size->cy = size32.cy; } return ret; } /*********************************************************************** * GetBrushOrgEx (GDI.469) */ BOOL16 WINAPI GetBrushOrgEx16( HDC16 hdc, LPPOINT16 pt ) { POINT pt32; if (!GetBrushOrgEx( HDC_32(hdc), &pt32 )) return FALSE; pt->x = pt32.x; pt->y = pt32.y; return TRUE; } /*********************************************************************** * GetCurrentPositionEx (GDI.470) */ BOOL16 WINAPI GetCurrentPositionEx16( HDC16 hdc, LPPOINT16 pt ) { POINT pt32; if (!GetCurrentPositionEx( HDC_32(hdc), &pt32 )) return FALSE; pt->x = pt32.x; pt->y = pt32.y; return TRUE; } /*********************************************************************** * GetTextExtentPoint (GDI.471) * * FIXME: Should this have a bug for compatibility? * Original Windows versions of GetTextExtentPoint{A,W} have documented * bugs (-> MSDN KB q147647.txt). */ BOOL16 WINAPI GetTextExtentPoint16( HDC16 hdc, LPCSTR str, INT16 count, LPSIZE16 size ) { SIZE size32; HDC hdc32 = HDC_32(hdc); TEXTMETRICA tm; GetTextMetricsA(hdc32, &tm); BOOL ret = GetTextExtentPoint32A( hdc32, str, count, &size32 ); if (ret) { size->cx = size32.cx + tm.tmOverhang; size->cy = size32.cy; check_font_rotation( hdc32, size ); } return ret; } /*********************************************************************** * GetViewportExtEx (GDI.472) */ BOOL16 WINAPI GetViewportExtEx16( HDC16 hdc, LPSIZE16 size ) { SIZE size32; if (!GetViewportExtEx( HDC_32(hdc), &size32 )) return FALSE; size->cx = size32.cx; size->cy = size32.cy; return TRUE; } /*********************************************************************** * GetViewportOrgEx (GDI.473) */ BOOL16 WINAPI GetViewportOrgEx16( HDC16 hdc, LPPOINT16 pt ) { POINT pt32; if (!GetViewportOrgEx( HDC_32(hdc), &pt32 )) return FALSE; pt->x = pt32.x; pt->y = pt32.y; return TRUE; } /*********************************************************************** * GetWindowExtEx (GDI.474) */ BOOL16 WINAPI GetWindowExtEx16( HDC16 hdc, LPSIZE16 size ) { SIZE size32; if (!GetWindowExtEx( HDC_32(hdc), &size32 )) return FALSE; size->cx = size32.cx; size->cy = size32.cy; return TRUE; } /*********************************************************************** * GetWindowOrgEx (GDI.475) */ BOOL16 WINAPI GetWindowOrgEx16( HDC16 hdc, LPPOINT16 pt ) { POINT pt32; if (!GetWindowOrgEx( HDC_32(hdc), &pt32 )) return FALSE; pt->x = pt32.x; pt->y = pt32.y; return TRUE; } /*********************************************************************** * OffsetViewportOrgEx (GDI.476) */ BOOL16 WINAPI OffsetViewportOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt) { POINT pt32; BOOL16 ret = OffsetViewportOrgEx( HDC_32(hdc), x, y, &pt32 ); if (pt) { pt->x = pt32.x; pt->y = pt32.y; } return ret; } /*********************************************************************** * OffsetWindowOrgEx (GDI.477) */ BOOL16 WINAPI OffsetWindowOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt ) { POINT pt32; BOOL16 ret = OffsetWindowOrgEx( HDC_32(hdc), x, y, &pt32 ); if (pt) { pt->x = pt32.x; pt->y = pt32.y; } return ret; } /*********************************************************************** * SetBitmapDimensionEx (GDI.478) */ BOOL16 WINAPI SetBitmapDimensionEx16( HBITMAP16 hbitmap, INT16 x, INT16 y, LPSIZE16 prevSize ) { SIZE size32; BOOL ret = SetBitmapDimensionEx( HBITMAP_32(hbitmap), x, y, &size32 ); if (ret && prevSize) { prevSize->cx = size32.cx; prevSize->cy = size32.cy; } return ret; } /*********************************************************************** * SetViewportExtEx (GDI.479) */ BOOL16 WINAPI SetViewportExtEx16( HDC16 hdc, INT16 x, INT16 y, LPSIZE16 size ) { SIZE size32; BOOL16 ret = SetViewportExtEx( HDC_32(hdc), x, y, &size32 ); if (size) { size->cx = size32.cx; size->cy = size32.cy; } return ret; } /*********************************************************************** * SetViewportOrgEx (GDI.480) */ BOOL16 WINAPI SetViewportOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt ) { POINT pt32; BOOL16 ret = SetViewportOrgEx( HDC_32(hdc), x, y, &pt32 ); if (pt) { pt->x = pt32.x; pt->y = pt32.y; } return ret; } /*********************************************************************** * SetWindowExtEx (GDI.481) */ BOOL16 WINAPI SetWindowExtEx16( HDC16 hdc, INT16 x, INT16 y, LPSIZE16 size ) { SIZE size32; BOOL16 ret = SetWindowExtEx( HDC_32(hdc), x, y, &size32 ); if (size) { size->cx = size32.cx; size->cy = size32.cy; } return ret; } /*********************************************************************** * SetWindowOrgEx (GDI.482) */ BOOL16 WINAPI SetWindowOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt ) { POINT pt32; BOOL16 ret = SetWindowOrgEx( HDC_32(hdc), x, y, &pt32 ); if (pt) { pt->x = pt32.x; pt->y = pt32.y; } return ret; } /*********************************************************************** * MoveToEx (GDI.483) */ BOOL16 WINAPI MoveToEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt ) { POINT pt32; if (!MoveToEx( HDC_32(hdc), x, y, &pt32 )) return FALSE; if (pt) { pt->x = pt32.x; pt->y = pt32.y; } return TRUE; } /*********************************************************************** * ScaleViewportExtEx (GDI.484) */ BOOL16 WINAPI ScaleViewportExtEx16( HDC16 hdc, INT16 xNum, INT16 xDenom, INT16 yNum, INT16 yDenom, LPSIZE16 size ) { SIZE size32; BOOL16 ret = ScaleViewportExtEx( HDC_32(hdc), xNum, xDenom, yNum, yDenom, &size32 ); if (size) { size->cx = size32.cx; size->cy = size32.cy; } return ret; } /*********************************************************************** * ScaleWindowExtEx (GDI.485) */ BOOL16 WINAPI ScaleWindowExtEx16( HDC16 hdc, INT16 xNum, INT16 xDenom, INT16 yNum, INT16 yDenom, LPSIZE16 size ) { SIZE size32; BOOL16 ret = ScaleWindowExtEx( HDC_32(hdc), xNum, xDenom, yNum, yDenom, &size32 ); if (size) { size->cx = size32.cx; size->cy = size32.cy; } return ret; } /*********************************************************************** * GetAspectRatioFilterEx (GDI.486) */ BOOL16 WINAPI GetAspectRatioFilterEx16( HDC16 hdc, LPSIZE16 pAspectRatio ) { FIXME("(%04x, %p): -- Empty Stub !\n", hdc, pAspectRatio); return FALSE; } /****************************************************************************** * PolyBezier (GDI.502) */ BOOL16 WINAPI PolyBezier16( HDC16 hdc, const POINT16* lppt, INT16 cPoints ) { int i; BOOL16 ret; LPPOINT pt32 = HeapAlloc( GetProcessHeap(), 0, cPoints*sizeof(POINT) ); if(!pt32) return FALSE; for (i=cPoints;i--;) { pt32[i].x = lppt[i].x; pt32[i].y = lppt[i].y; } ret= PolyBezier(HDC_32(hdc), pt32, cPoints); HeapFree( GetProcessHeap(), 0, pt32 ); return ret; } /****************************************************************************** * PolyBezierTo (GDI.503) */ BOOL16 WINAPI PolyBezierTo16( HDC16 hdc, const POINT16* lppt, INT16 cPoints ) { int i; BOOL16 ret; LPPOINT pt32 = HeapAlloc( GetProcessHeap(), 0, cPoints*sizeof(POINT) ); if(!pt32) return FALSE; for (i=cPoints;i--;) { pt32[i].x = lppt[i].x; pt32[i].y = lppt[i].y; } ret= PolyBezierTo(HDC_32(hdc), pt32, cPoints); HeapFree( GetProcessHeap(), 0, pt32 ); return ret; } /****************************************************************************** * ExtSelectClipRgn (GDI.508) */ INT16 WINAPI ExtSelectClipRgn16( HDC16 hdc, HRGN16 hrgn, INT16 fnMode ) { return ExtSelectClipRgn( HDC_32(hdc), HRGN_32(hrgn), fnMode); } /*********************************************************************** * AbortPath (GDI.511) */ BOOL16 WINAPI AbortPath16(HDC16 hdc) { return AbortPath( HDC_32(hdc) ); } /*********************************************************************** * BeginPath (GDI.512) */ BOOL16 WINAPI BeginPath16(HDC16 hdc) { return BeginPath( HDC_32(hdc) ); } /*********************************************************************** * CloseFigure (GDI.513) */ BOOL16 WINAPI CloseFigure16(HDC16 hdc) { return CloseFigure( HDC_32(hdc) ); } /*********************************************************************** * EndPath (GDI.514) */ BOOL16 WINAPI EndPath16(HDC16 hdc) { return EndPath( HDC_32(hdc) ); } /*********************************************************************** * FillPath (GDI.515) */ BOOL16 WINAPI FillPath16(HDC16 hdc) { return FillPath( HDC_32(hdc) ); } /******************************************************************* * FlattenPath (GDI.516) */ BOOL16 WINAPI FlattenPath16(HDC16 hdc) { return FlattenPath( HDC_32(hdc) ); } /*********************************************************************** * GetPath (GDI.517) */ INT16 WINAPI GetPath16(HDC16 hdc, LPPOINT16 pPoints, LPBYTE pTypes, INT16 nSize) { FIXME("(%d,%p,%p): stub\n",hdc,pPoints,pTypes); return 0; } /*********************************************************************** * PathToRegion (GDI.518) */ HRGN16 WINAPI PathToRegion16(HDC16 hdc) { return HRGN_16( PathToRegion( HDC_32(hdc) )); } /*********************************************************************** * SelectClipPath (GDI.519) */ BOOL16 WINAPI SelectClipPath16(HDC16 hdc, INT16 iMode) { return SelectClipPath( HDC_32(hdc), iMode ); } /******************************************************************* * StrokeAndFillPath (GDI.520) */ BOOL16 WINAPI StrokeAndFillPath16(HDC16 hdc) { return StrokeAndFillPath( HDC_32(hdc) ); } /******************************************************************* * StrokePath (GDI.521) */ BOOL16 WINAPI StrokePath16(HDC16 hdc) { return StrokePath( HDC_32(hdc) ); } /******************************************************************* * WidenPath (GDI.522) */ BOOL16 WINAPI WidenPath16(HDC16 hdc) { return WidenPath( HDC_32(hdc) ); } /*********************************************************************** * GetArcDirection (GDI.524) */ INT16 WINAPI GetArcDirection16( HDC16 hdc ) { return GetArcDirection( HDC_32(hdc) ); } /*********************************************************************** * SetArcDirection (GDI.525) */ INT16 WINAPI SetArcDirection16( HDC16 hdc, INT16 nDirection ) { return SetArcDirection( HDC_32(hdc), (INT)nDirection ); } /*********************************************************************** * CreateHalftonePalette (GDI.529) */ HPALETTE16 WINAPI CreateHalftonePalette16( HDC16 hdc ) { return HPALETTE_16( CreateHalftonePalette( HDC_32(hdc) )); } /*********************************************************************** * SetDIBColorTable (GDI.602) */ UINT16 WINAPI SetDIBColorTable16( HDC16 hdc, UINT16 startpos, UINT16 entries, RGBQUAD *colors ) { return SetDIBColorTable( HDC_32(hdc), startpos, entries, colors ); } /*********************************************************************** * GetDIBColorTable (GDI.603) */ UINT16 WINAPI GetDIBColorTable16( HDC16 hdc, UINT16 startpos, UINT16 entries, RGBQUAD *colors ) { return GetDIBColorTable( HDC_32(hdc), startpos, entries, colors ); } /*********************************************************************** * GetRegionData (GDI.607) * * FIXME: is LPRGNDATA the same in Win16 and Win32 ? */ DWORD WINAPI GetRegionData16( HRGN16 hrgn, DWORD count, LPRGNDATA rgndata ) { return GetRegionData( HRGN_32(hrgn), count, rgndata ); } /*********************************************************************** * GdiFreeResources (GDI.609) */ WORD WINAPI GdiFreeResources16( DWORD reserve ) { return 90; /* lie about it, it shouldn't matter */ } /*********************************************************************** * GdiSignalProc32 (GDI.610) */ WORD WINAPI GdiSignalProc( UINT uCode, DWORD dwThreadOrProcessID, DWORD dwFlags, HMODULE16 hModule ) { return 0; } /*********************************************************************** * GetTextCharset (GDI.612) */ UINT16 WINAPI GetTextCharset16( HDC16 hdc ) { return GetTextCharset( HDC_32(hdc) ); } /*********************************************************************** * EnumFontFamiliesEx (GDI.613) */ INT16 WINAPI EnumFontFamiliesEx16( HDC16 hdc, LPLOGFONT16 plf, FONTENUMPROC16 proc, LPARAM lParam, DWORD dwFlags) { struct callback16_info info; LOGFONTA lfA, *plfA; info.proc = (FARPROC16)proc; info.param = lParam; info.result = 1; if (plf) { logfont_16_to_A(plf, &lfA); plfA = &lfA; } else plfA = NULL; return EnumFontFamiliesExA( HDC_32(hdc), plfA, enum_font_callback, (LPARAM)&info, dwFlags ); } /************************************************************************* * GetFontLanguageInfo (GDI.616) */ DWORD WINAPI GetFontLanguageInfo16( HDC16 hdc ) { return GetFontLanguageInfo( HDC_32(hdc) ); } /*********************************************************************** * SetLayout (GDI.1000) * * Sets left->right or right->left text layout flags of a dc. */ BOOL16 WINAPI SetLayout16( HDC16 hdc, DWORD layout ) { return SetLayout( HDC_32(hdc), layout ); } /*********************************************************************** * SetSolidBrush (GDI.604) * * Change the color of a solid brush. * * PARAMS * hBrush [I] Brush to change the color of * newColor [I] New color for hBrush * * RETURNS * Success: TRUE. The color of hBrush is set to newColor. * Failure: FALSE. * * FIXME * This function is undocumented and untested. The implementation may * not be correct. */ BOOL16 WINAPI SetSolidBrush16(HBRUSH16 hBrush, COLORREF newColor ) { FIXME( "%04x %08x no longer supported\n", hBrush, newColor ); return FALSE; } /*********************************************************************** * Copy (GDI.250) */ void WINAPI Copy16( LPVOID src, LPVOID dst, WORD size ) { memcpy( dst, src, size ); } /*********************************************************************** * RealizeDefaultPalette (GDI.365) */ UINT16 WINAPI RealizeDefaultPalette16( HDC16 hdc ) { FIXME( "%04x semi-stub\n", hdc ); return GDIRealizePalette16( hdc ); } /*********************************************************************** * IsDCCurrentPalette (GDI.412) */ BOOL16 WINAPI IsDCCurrentPalette16(HDC16 hDC) { return HPALETTE_16( GetCurrentObject( HDC_32(hDC), OBJ_PAL )) == hPrimaryPalette; } /********************************************************************* * SetMagicColors (GDI.606) */ VOID WINAPI SetMagicColors16(HDC16 hDC, COLORREF color, UINT16 index) { FIXME("(hDC %04x, color %04x, index %04x): stub\n", hDC, (int)color, index); } /*********************************************************************** * DPtoLP (GDI.67) */ BOOL16 WINAPI DPtoLP16( HDC16 hdc, LPPOINT16 points, INT16 count ) { POINT points32[8], *pt32 = points32; int i; BOOL ret; if (count > 8) { if (!(pt32 = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pt32) ))) return FALSE; } for (i = 0; i < count; i++) { pt32[i].x = points[i].x; pt32[i].y = points[i].y; } if ((ret = DPtoLP( HDC_32(hdc), pt32, count ))) { for (i = 0; i < count; i++) { if (pt32[i].x >= 0x8000) points[i].x = 0x7fff; else if (pt32[i].x < (LONG)0xffff8000) points[i].x = 0x8000; else points[i].x = pt32[i].x; if (pt32[i].y >= 0x8000) points[i].y = 0x7fff; else if (pt32[i].y < (LONG)0xffff8000) points[i].y = 0x8000; else points[i].y = pt32[i].y; } } if (pt32 != points32) HeapFree( GetProcessHeap(), 0, pt32 ); return ret; } /*********************************************************************** * LPtoDP (GDI.99) */ BOOL16 WINAPI LPtoDP16( HDC16 hdc, LPPOINT16 points, INT16 count ) { POINT points32[8], *pt32 = points32; int i; BOOL ret; if (count > 8) { if (!(pt32 = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pt32) ))) return FALSE; } for (i = 0; i < count; i++) { pt32[i].x = points[i].x; pt32[i].y = points[i].y; } if ((ret = LPtoDP( HDC_32(hdc), pt32, count ))) { for (i = 0; i < count; i++) { if (pt32[i].x >= 0x8000) points[i].x = 0x7fff; else if (pt32[i].x < (LONG)0xffff8000) points[i].x = 0x8000; else points[i].x = pt32[i].x; if (pt32[i].y >= 0x8000) points[i].y = 0x7fff; else if (pt32[i].y < (LONG)0xffff8000) points[i].y = 0x8000; else points[i].y = pt32[i].y; } } if (pt32 != points32) HeapFree( GetProcessHeap(), 0, pt32 ); return ret; } /*********************************************************************** * GetDCState (GDI.179) */ HDC16 WINAPI GetDCState16( HDC16 hdc ) { ERR( "no longer supported\n" ); return 0; } /*********************************************************************** * SetDCState (GDI.180) */ void WINAPI SetDCState16( HDC16 hdc, HDC16 hdcs ) { ERR( "no longer supported\n" ); } /*********************************************************************** * SetDCOrg (GDI.117) */ DWORD WINAPI SetDCOrg16( HDC16 hdc16, INT16 x, INT16 y ) { FIXME( "%04x %d,%d no longer supported\n", hdc16, x, y ); return 0; } /*********************************************************************** * InquireVisRgn (GDI.131) */ HRGN16 WINAPI InquireVisRgn16( HDC16 hdc ) { static HRGN hrgn; if (!hrgn) hrgn = CreateRectRgn( 0, 0, 0, 0 ); GetRandomRgn( HDC_32(hdc), hrgn, SYSRGN ); return HRGN_16(hrgn); } /*********************************************************************** * OffsetVisRgn (GDI.102) */ INT16 WINAPI OffsetVisRgn16( HDC16 hdc16, INT16 x, INT16 y ) { FIXME( "%04x %d,%d no longer supported\n", hdc16, x, y ); return ERROR; } /*********************************************************************** * ExcludeVisRect (GDI.73) */ INT16 WINAPI ExcludeVisRect16( HDC16 hdc16, INT16 left, INT16 top, INT16 right, INT16 bottom ) { FIXME( "%04x %d,%d-%d,%d no longer supported\n", hdc16, left, top, right, bottom ); return ERROR; } /*********************************************************************** * IntersectVisRect (GDI.98) */ INT16 WINAPI IntersectVisRect16( HDC16 hdc16, INT16 left, INT16 top, INT16 right, INT16 bottom ) { FIXME( "%04x %d,%d-%d,%d no longer supported\n", hdc16, left, top, right, bottom ); return ERROR; } /*********************************************************************** * SaveVisRgn (GDI.129) */ HRGN16 WINAPI SaveVisRgn16( HDC16 hdc16 ) { FIXME( "%04x no longer supported\n", hdc16 ); return 0; } /*********************************************************************** * RestoreVisRgn (GDI.130) */ INT16 WINAPI RestoreVisRgn16( HDC16 hdc16 ) { FIXME( "%04x no longer supported\n", hdc16 ); return ERROR; } /*********************************************************************** * GetClipRgn (GDI.173) */ HRGN16 WINAPI GetClipRgn16( HDC16 hdc ) { static HRGN hrgn; if (!hrgn) hrgn = CreateRectRgn( 0, 0, 0, 0 ); GetClipRgn( HDC_32(hdc), hrgn ); return HRGN_16(hrgn); } /*********************************************************************** * MakeObjectPrivate (GDI.463) * * What does that mean ? * Some little docu can be found in "Undocumented Windows", * but this is basically useless. */ void WINAPI MakeObjectPrivate16( HGDIOBJ16 handle16, BOOL16 private ) { FIXME( "stub: %x %u\n", handle16, private ); } /*********************************************************************** * CreateDIBSection (GDI.489) */ HBITMAP16 WINAPI CreateDIBSection16 (HDC16 hdc, const BITMAPINFO *bmi, UINT16 usage, SEGPTR *bits16, HANDLE section, DWORD offset) { LPVOID bits32; HBITMAP hbitmap; hbitmap = CreateDIBSection( HDC_32(hdc), bmi, usage, &bits32, section, offset ); if (hbitmap && bits32 && bits16) *bits16 = alloc_segptr_bits( hbitmap, bits32 ); return HBITMAP_16(hbitmap); } void WINAPI GdiTaskTermination16(WORD arg1) { FIXME("(%04x)\n", arg1); } WORD WINAPI GetPhysicalFontHandle16(WORD arg1/* dc? */) { FIXME("(%04x)\n", arg1); return 0; } WORD WINAPI GdiMoveBitmap16(WORD arg1) { FIXME("(%04x)\n", arg1); return 0; } BOOL16 WINAPI IsDCDirty16(WORD arg1, SEGPTR arg2) { FIXME("(%04x,%08x)\n", arg1, arg2); return 0; } void WINAPI UnicodeToAnsi16(SEGPTR arg1, SEGPTR arg2) { FIXME("(%08x,%08x)\n", arg1, arg2); return 0; } void WINAPI ShrinkGdiHeap16() { FIXME("()\n"); } DWORD WINAPI GetAspectRatioFilter16(WORD arg1) { FIXME("(%04x)\n", arg1); return 0; } WORD WINAPI SelectBitmap16(WORD arg1, WORD arg2) { FIXME("(%04x)\n", arg1); return SelectObject16(arg1, arg2); } WORD WINAPI GetFontAssocStatus16(HDC16 hdc) { static BOOL load; static FARPROC GetFontAssocStatus; if (!load) { load = TRUE; GetFontAssocStatus = GetProcAddress(GetModuleHandleW(L"GDI32"), "GetFontAssocStatus"); } if (!GetFontAssocStatus) { ERR("(%04x)\n", hdc); return 0; } return ((ULONG(WINAPI*)(HDC))GetFontAssocStatus)(HDC_32(hdc)); } // style // bit 1: scan direction 0 = left to right 1 = right to left // bit 7: match type 0 = color 1 = not color WORD WINAPI ScanLR16(HDC16 hdc, WORD x, WORD y, DWORD color, WORD style) { HDC hdc32 = HDC_32(hdc); if (!hdc32 || (GetDeviceCaps(hdc32, TECHNOLOGY) != DT_RASDISPLAY)) { ERR("Invalid DC (%04x)\n", hdc); return -1; } COLORREF pixel = GetPixel(hdc32, x, y); if (pixel == CLR_INVALID) return 0x8000; // out of range for (int i = x; (i <= 0xffff) && (i >= 0); (style & 2) ? i-- : i++) { pixel = GetPixel(hdc32, i, y); if (pixel == CLR_INVALID) return -1; if ((style & 0x80) ? (pixel != color) : (pixel == color)) return i; } return -1; } LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len); BOOL WINAPI DllEntryPoint(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds, WORD wHeapSize, DWORD dwReserved1, WORD wReserved2) { switch (fdwReason) { case DLL_PROCESS_ATTACH: { static BOOL init = FALSE; if (init == TRUE) break; init = TRUE; WIN32_FIND_DATAA fileinfo = {0}; char syspath[MAX_PATH]; char fonfile[MAX_PATH]; char origsyspath[MAX_PATH]; GetWindowsDirectoryA(origsyspath, MAX_PATH); StringCchCatA(origsyspath, MAX_PATH, "\\system\\"); RedirectSystemDir(origsyspath, syspath, MAX_PATH); strcpy(fonfile, syspath); StringCchCatA(fonfile, MAX_PATH, "*.*"); HANDLE file = FindFirstFileA(fonfile, &fileinfo); if (file == INVALID_HANDLE_VALUE) break; BOOL ret; do { LPCSTR *ext = fileinfo.cFileName + strlen(fileinfo.cFileName) - 4; if (!stricmp(ext, ".ttf") || !stricmp(ext, ".fon")) { strcpy(fonfile, syspath); strcat(fonfile, fileinfo.cFileName); AddFontResource16(fonfile); } ret = FindNextFileA(file, &fileinfo); } while (ret); for (int i = 0; i <= STOCK_LAST; i++) GetStockObject16(i); HDC dc = CreateCompatibleDC(NULL); stock[STOCK_LAST + 1] = HGDIOBJ_16(GetCurrentObject(dc, OBJ_BITMAP)); DeleteDC(dc); FindClose(file); break; } case DLL_PROCESS_DETACH: break; } return TRUE; } HFONT16 WINAPI GetSystemIconFont16() { // only known to be used by Simplified Chinese progman // uses SPI_GETICONTITLELOGFONT if this returns 0 return 0; } ================================================ FILE: gdi/gdi.def ================================================ ; File generated automatically from gdi.exe16.spec; do not edit! LIBRARY gdi.exe16 EXPORTS _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE ================================================ FILE: gdi/gdi.exe16.spec ================================================ 1 pascal SetBkColor(word long) SetBkColor16 2 pascal -ret16 SetBkMode(word word) SetBkMode16 3 pascal -ret16 SetMapMode(word word) SetMapMode16 4 pascal -ret16 SetROP2(word word) SetROP216 5 pascal -ret16 SetRelAbs(word word) SetRelAbs16 6 pascal -ret16 SetPolyFillMode(word word) SetPolyFillMode16 7 pascal -ret16 SetStretchBltMode(word word) SetStretchBltMode16 8 pascal -ret16 SetTextCharacterExtra(word s_word) SetTextCharacterExtra16 9 pascal SetTextColor(word long) SetTextColor16 10 pascal -ret16 SetTextJustification(word s_word s_word) SetTextJustification16 11 pascal SetWindowOrg(word s_word s_word) SetWindowOrg16 12 pascal SetWindowExt(word s_word s_word) SetWindowExt16 13 pascal SetViewportOrg(word s_word s_word) SetViewportOrg16 14 pascal SetViewportExt(word s_word s_word) SetViewportExt16 15 pascal OffsetWindowOrg(word s_word s_word) OffsetWindowOrg16 16 pascal ScaleWindowExt(word s_word s_word s_word s_word) ScaleWindowExt16 17 pascal OffsetViewportOrg(word s_word s_word) OffsetViewportOrg16 18 pascal ScaleViewportExt(word s_word s_word s_word s_word) ScaleViewportExt16 19 pascal -ret16 LineTo(word s_word s_word) LineTo16 20 pascal MoveTo(word s_word s_word) MoveTo16 21 pascal -ret16 ExcludeClipRect(word s_word s_word s_word s_word) ExcludeClipRect16 22 pascal -ret16 IntersectClipRect(word s_word s_word s_word s_word) IntersectClipRect16 23 pascal -ret16 Arc(word s_word s_word s_word s_word s_word s_word s_word s_word) Arc16 24 pascal -ret16 Ellipse(word s_word s_word s_word s_word) Ellipse16 25 pascal -ret16 FloodFill(word s_word s_word long) FloodFill16 26 pascal -ret16 Pie(word s_word s_word s_word s_word s_word s_word s_word s_word) Pie16 27 pascal -ret16 Rectangle(word s_word s_word s_word s_word) Rectangle16 28 pascal -ret16 RoundRect(word s_word s_word s_word s_word s_word s_word) RoundRect16 29 pascal -ret16 PatBlt(word s_word s_word s_word s_word long) PatBlt16 30 pascal -ret16 SaveDC(word) SaveDC16 31 pascal SetPixel(word s_word s_word long) SetPixel16 32 pascal -ret16 OffsetClipRgn(word s_word s_word) OffsetClipRgn16 33 pascal -ret16 TextOut(word s_word s_word str word) TextOut16 34 pascal -ret16 BitBlt( word s_word s_word s_word s_word word s_word s_word long) BitBlt16 35 pascal -ret16 StretchBlt(word s_word s_word s_word s_word word s_word s_word s_word s_word long) StretchBlt16 36 pascal -ret16 Polygon (word ptr word) Polygon16 37 pascal -ret16 Polyline (word ptr word) Polyline16 38 pascal Escape(word word word segptr ptr) Escape16 39 pascal -ret16 RestoreDC(word s_word) RestoreDC16 40 pascal -ret16 FillRgn(word word word) FillRgn16 41 pascal -ret16 FrameRgn(word word word word word) FrameRgn16 42 pascal -ret16 InvertRgn(word word) InvertRgn16 43 pascal -ret16 PaintRgn(word word) PaintRgn16 44 pascal -ret16 SelectClipRgn(word word) SelectClipRgn16 45 pascal -ret16 SelectObject(word word) SelectObject16 46 stub BITMAPBITS # W1.1, W2.0 47 pascal -ret16 CombineRgn(word word word s_word) CombineRgn16 48 pascal -ret16 CreateBitmap(word word word word ptr) CreateBitmap16 49 pascal -ret16 CreateBitmapIndirect(ptr) CreateBitmapIndirect16 50 pascal -ret16 CreateBrushIndirect(ptr) CreateBrushIndirect16 51 pascal -ret16 CreateCompatibleBitmap(word word word) CreateCompatibleBitmap16 52 pascal -ret16 CreateCompatibleDC(word) CreateCompatibleDC16 53 pascal -ret16 CreateDC(str str str segptr) CreateDC16 54 pascal -ret16 CreateEllipticRgn(s_word s_word s_word s_word) CreateEllipticRgn16 55 pascal -ret16 CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect16 56 pascal -ret16 CreateFont(s_word s_word s_word s_word s_word word word word word word word word word str) CreateFont16 57 pascal -ret16 CreateFontIndirect(ptr) CreateFontIndirect16 58 pascal -ret16 CreateHatchBrush(word long) CreateHatchBrush16 #59 ??? (not even in W1.1, W2.0) 60 pascal -ret16 CreatePatternBrush(word) CreatePatternBrush16 61 pascal -ret16 CreatePen(s_word s_word long) CreatePen16 62 pascal -ret16 CreatePenIndirect(ptr) CreatePenIndirect16 63 pascal -ret16 CreatePolygonRgn(ptr word word) CreatePolygonRgn16 64 pascal -ret16 CreateRectRgn(s_word s_word s_word s_word) CreateRectRgn16 65 pascal -ret16 CreateRectRgnIndirect(ptr) CreateRectRgnIndirect16 66 pascal -ret16 CreateSolidBrush(long) CreateSolidBrush16 67 pascal -ret16 DPtoLP(word ptr s_word) DPtoLP16 68 pascal -ret16 DeleteDC(word) DeleteDC16 69 pascal -ret16 DeleteObject(word) DeleteObject16 70 pascal -ret16 EnumFonts(word str segptr long) EnumFonts16 71 pascal -ret16 EnumObjects(word word segptr long) EnumObjects16 72 pascal -ret16 EqualRgn(word word) EqualRgn16 73 pascal -ret16 ExcludeVisRect(word s_word s_word s_word s_word) ExcludeVisRect16 74 pascal GetBitmapBits(word long ptr) GetBitmapBits16 75 pascal GetBkColor(word) GetBkColor16 76 pascal -ret16 GetBkMode(word) GetBkMode16 77 pascal -ret16 GetClipBox(word ptr) GetClipBox16 78 pascal GetCurrentPosition(word) GetCurrentPosition16 79 pascal GetDCOrg(word) GetDCOrg16 80 pascal -ret16 GetDeviceCaps(word s_word) GetDeviceCaps16 81 pascal -ret16 GetMapMode(word) GetMapMode16 82 pascal -ret16 GetObject(word s_word ptr) GetObject16 83 pascal GetPixel(word s_word s_word) GetPixel16 84 pascal -ret16 GetPolyFillMode(word) GetPolyFillMode16 85 pascal -ret16 GetROP2(word) GetROP216 86 pascal -ret16 GetRelAbs(word) GetRelAbs16 87 pascal -ret16 GetStockObject(word) GetStockObject16 88 pascal -ret16 GetStretchBltMode(word) GetStretchBltMode16 89 pascal -ret16 GetTextCharacterExtra(word) GetTextCharacterExtra16 90 pascal GetTextColor(word) GetTextColor16 91 pascal GetTextExtent(word ptr s_word) GetTextExtent16 92 pascal -ret16 GetTextFace(word s_word ptr) GetTextFace16 93 pascal -ret16 GetTextMetrics(word ptr) GetTextMetrics16 94 pascal GetViewportExt(word) GetViewportExt16 95 pascal GetViewportOrg(word) GetViewportOrg16 96 pascal GetWindowExt(word) GetWindowExt16 97 pascal GetWindowOrg(word) GetWindowOrg16 98 pascal -ret16 IntersectVisRect(word s_word s_word s_word s_word) IntersectVisRect16 99 pascal -ret16 LPtoDP(word ptr s_word) LPtoDP16 100 pascal -ret16 LineDDA(s_word s_word s_word s_word segptr long) LineDDA16 101 pascal -ret16 OffsetRgn(word s_word s_word) OffsetRgn16 102 pascal -ret16 OffsetVisRgn(word s_word s_word) OffsetVisRgn16 103 pascal -ret16 PtVisible(word s_word s_word) PtVisible16 104 pascal -ret16 RectVisibleOld(word ptr) RectVisible16 # also named RECTVISIBLE 105 pascal -ret16 SelectVisRgn(word word) SelectVisRgn16 106 pascal SetBitmapBits(word long ptr) SetBitmapBits16 # ??? (not even in W1.1) 117 pascal SetDCOrg(word s_word s_word) SetDCOrg16 # 118 stub InternalCreateDC # W1.1, W2.0 118 pascal -ret16 GetSystemIconFont() GetSystemIconFont16 119 pascal -ret16 AddFontResource(str) AddFontResource16 120 stub GetContinuingTextExtent # W1.1, W2.0 121 pascal -ret16 Death(word) Death16 122 pascal -ret16 Resurrection(word word word word word word word) Resurrection16 123 pascal -ret16 PlayMetaFile(word word) PlayMetaFile16 124 pascal -ret16 GetMetaFile(str) GetMetaFile16 125 pascal -ret16 CreateMetaFile(str) CreateMetaFile16 126 pascal -ret16 CloseMetaFile(word) CloseMetaFile16 127 pascal -ret16 DeleteMetaFile(word) DeleteMetaFile16 128 pascal -ret16 MulDiv(s_word s_word s_word) MulDiv16 129 pascal -ret16 SaveVisRgn(word) SaveVisRgn16 130 pascal -ret16 RestoreVisRgn(word) RestoreVisRgn16 131 pascal -ret16 InquireVisRgn(word) InquireVisRgn16 132 pascal -ret16 SetEnvironment(str str word) SetEnvironment16 133 pascal -ret16 GetEnvironment(str str word) GetEnvironment16 134 pascal -ret16 GetRgnBox(word ptr) GetRgnBox16 135 pascal -ret16 ScanLR(word word word long word) ScanLR16 136 pascal -ret16 RemoveFontResource(str) RemoveFontResource16 #137 - 147 removed sometime after W2.0 137 stub GSV 138 stub DPXlate 139 stub SetWinViewExt 140 stub ScaleExt 141 stub WordSet 142 stub RectStuff 143 stub OffsetOrg 144 stub LockDC # < W2.0 145 stub UnlockDC # < W2.0 146 stub LockUnlock # < W2.0 147 stub GDI_FarFrame 148 pascal SetBrushOrg(word s_word s_word) SetBrushOrg16 149 pascal GetBrushOrg(word) GetBrushOrg16 150 pascal -ret16 UnrealizeObject(word) UnrealizeObject16 151 pascal -ret16 CopyMetaFile(word str) CopyMetaFile16 152 stub GDIInitApp # W1.1, W2.0 153 pascal -ret16 CreateIC(str str str ptr) CreateIC16 154 pascal GetNearestColor(word long) GetNearestColor16 155 pascal -ret16 QueryAbort(word word) QueryAbort16 156 pascal -ret16 CreateDiscardableBitmap(word word word) CreateDiscardableBitmap16 157 stub CompatibleBitmap # W1.1, W2.0 158 stub EnumCallback 159 pascal -ret16 GetMetaFileBits(word) GetMetaFileBits16 160 pascal -ret16 SetMetaFileBits(word) SetMetaFileBits16 161 pascal -ret16 PtInRegion(word s_word s_word) PtInRegion16 162 pascal GetBitmapDimension(word) GetBitmapDimension16 163 pascal SetBitmapDimension(word s_word s_word) SetBitmapDimension16 164 stub PixToLine # W1.1, W2.0 #165 - 200 not in W1.1 169 pascal -ret16 IsDCDirty(word segptr) IsDCDirty16 170 stub SetDCStatus 171 stub LVBUNION # W2.0 (only ?) 172 pascal -ret16 SetRectRgn(word s_word s_word s_word s_word) SetRectRgn16 173 pascal -ret16 GetClipRgn(word) GetClipRgn16 174 stub BLOAT # W2.0 (only ?) ROTFL ! ;-)) 175 pascal -ret16 EnumMetaFile(word word segptr long) EnumMetaFile16 176 pascal -ret16 PlayMetaFileRecord(word ptr ptr word) PlayMetaFileRecord16 177 stub RCOS # W2.0 (only ?) 178 stub RSIN # W2.0 (only ?) 179 pascal -ret16 GetDCState(word) GetDCState16 180 pascal -ret16 SetDCState(word word) SetDCState16 181 pascal -ret16 RectInRegionOld(word ptr) RectInRegion16 # also named RECTINREGION 182 stub REQUESTSEM # W2.0 (only ?) 183 stub CLEARSEM # W2.0 (only ?) 184 stub STUFFVISIBLE # W2.0 (only ?) 185 stub STUFFINREGION # W2.0 (only ?) 186 stub DELETEABOVELINEFONTS # W2.0 (only ?) 188 stub GetTextExtentEx 190 pascal -ret16 SetDCHook(word segptr long) SetDCHook16 191 pascal GetDCHook(word ptr) GetDCHook16 192 pascal -ret16 SetHookFlags(word word) SetHookFlags16 193 pascal -ret16 SetBoundsRect(word ptr word) SetBoundsRect16 194 pascal -ret16 GetBoundsRect(word ptr word) GetBoundsRect16 195 pascal -ret16 SelectBitmap(word word) SelectBitmap16 196 pascal -ret16 SetMetaFileBitsBetter(word) SetMetaFileBitsBetter16 201 stub DMBITBLT 202 stub DMCOLORINFO 206 stub dmEnumDFonts 207 stub DMENUMOBJ 208 stub DMOUTPUT 209 stub DMPIXEL 210 stub dmRealizeObject 211 stub DMSTRBLT 212 stub DMSCANLR 213 stub BRUTE 214 stub DMEXTTEXTOUT 215 stub DMGETCHARWIDTH 216 stub DMSTRETCHBLT 217 stub DMDIBBITS 218 stub DMSTRETCHDIBITS 219 stub DMSETDIBTODEV 220 stub DMTRANSPOSE 230 pascal -ret16 CreatePQ(word) CreatePQ16 231 pascal -ret16 MinPQ(word) MinPQ16 232 pascal -ret16 ExtractPQ(word) ExtractPQ16 233 pascal -ret16 InsertPQ(word word word) InsertPQ16 234 pascal -ret16 SizePQ(word word) SizePQ16 235 pascal -ret16 DeletePQ(word) DeletePQ16 240 pascal -ret16 OpenJob(str str word) OpenJob16 241 pascal -ret16 WriteSpool(word ptr word) WriteSpool16 242 pascal -ret16 WriteDialog(word str word) WriteDialog16 243 pascal -ret16 CloseJob(word) CloseJob16 244 pascal -ret16 DeleteJob(word word) DeleteJob16 245 pascal GetSpoolJob(word ptr) GetSpoolJob16 246 pascal -ret16 StartSpoolPage(word) StartSpoolPage16 247 pascal -ret16 EndSpoolPage(word) EndSpoolPage16 248 stub QueryJob 250 pascal -ret16 Copy(ptr ptr word) Copy16 253 stub DeleteSpoolPage 254 pascal -ret16 SpoolFile(ptr ptr ptr ptr) SpoolFile16 267 stub StartDocPrintEra 268 stub StartPagePrinter 269 stub WritePrinter 270 stub EndPagePrinter 271 stub AbortPrinter 272 stub EndDocPrinter 274 stub ClosePrinter 280 stub GetRealDriverInfo 281 pascal DrvSetPrinterData(str str long ptr long) DrvSetPrinterData16 282 pascal DrvGetPrinterData(str str ptr ptr long ptr) DrvGetPrinterData16 299 stub ENGINEGETCHARWIDTHEX 300 pascal EngineEnumerateFont(str segptr long) EngineEnumerateFont16 301 pascal -ret16 EngineDeleteFont(ptr) EngineDeleteFont16 302 pascal EngineRealizeFont(ptr ptr ptr) EngineRealizeFont16 303 pascal -ret16 EngineGetCharWidth(ptr word word ptr) EngineGetCharWidth16 304 pascal -ret16 EngineSetFontContext(ptr word) EngineSetFontContext16 305 pascal -ret16 EngineGetGlyphBMP(word ptr word word ptr long ptr) EngineGetGlyphBMP16 306 pascal EngineMakeFontDir(word ptr ptr) EngineMakeFontDir16 307 pascal -ret16 GetCharABCWidths(word word word ptr) GetCharABCWidths16 308 pascal -ret16 GetOutlineTextMetrics(word word ptr) GetOutlineTextMetrics16 309 pascal GetGlyphOutline(word word word ptr long ptr ptr) GetGlyphOutline16 310 pascal -ret16 CreateScalableFontResource(word str str str) CreateScalableFontResource16 311 pascal GetFontData(word long long ptr long) GetFontData16 312 stub ConvertOutLineFontFile 313 pascal -ret16 GetRasterizerCaps(ptr word) GetRasterizerCaps16 314 stub EngineExtTextOut 315 pascal EngineRealizeFontExt(long long long long) EngineRealizeFontExt16 316 stub EngineGetCharWidthStr 317 stub EngineGetGlyphBmpExt 330 pascal -ret16 EnumFontFamilies(word str segptr long) EnumFontFamilies16 332 pascal -ret16 GetKerningPairs(word word ptr) GetKerningPairs16 345 pascal -ret16 GetTextAlign(word) GetTextAlign16 346 pascal -ret16 SetTextAlign(word word) SetTextAlign16 347 stub MFDRAWTEXT # W2.0 (only ?) 348 pascal -ret16 Chord(word s_word s_word s_word s_word s_word s_word s_word s_word) Chord16 349 pascal SetMapperFlags(word long) SetMapperFlags16 350 pascal -ret16 GetCharWidth(word word word ptr) GetCharWidth16 351 pascal -ret16 ExtTextOut(word s_word s_word word ptr str word ptr) ExtTextOut16 352 pascal -ret16 GetPhysicalFontHandle(word) GetPhysicalFontHandle16 353 pascal GetAspectRatioFilter(word) GetAspectRatioFilter16 354 pascal -ret16 ShrinkGDIHeap() ShrinkGdiHeap16 355 stub FTrapping0 360 pascal -ret16 CreatePalette(ptr) CreatePalette16 361 pascal -ret16 GDISelectPalette(word word word) GDISelectPalette16 362 pascal -ret16 GDIRealizePalette(word) GDIRealizePalette16 363 pascal -ret16 GetPaletteEntries(word word word ptr) GetPaletteEntries16 364 pascal -ret16 SetPaletteEntries(word word word ptr) SetPaletteEntries16 365 pascal -ret16 RealizeDefaultPalette(word) RealizeDefaultPalette16 366 pascal -ret16 UpdateColors(word) UpdateColors16 367 pascal -ret16 AnimatePalette(word word word ptr) AnimatePalette16 368 pascal -ret16 ResizePalette(word word) ResizePalette16 370 pascal -ret16 GetNearestPaletteIndex(word long) GetNearestPaletteIndex16 372 pascal -ret16 ExtFloodFill(word s_word s_word long word) ExtFloodFill16 373 pascal -ret16 SetSystemPaletteUse(word word) SetSystemPaletteUse16 374 pascal -ret16 GetSystemPaletteUse(word) GetSystemPaletteUse16 375 pascal -ret16 GetSystemPaletteEntries(word word word ptr) GetSystemPaletteEntries16 376 pascal -ret16 ResetDC(word ptr) ResetDC16 377 pascal -ret16 StartDoc(word ptr) StartDoc16 378 pascal -ret16 EndDoc(word) EndDoc16 379 pascal -ret16 StartPage(word) StartPage16 380 pascal -ret16 EndPage(word) EndPage16 381 pascal -ret16 SetAbortProc(word segptr) SetAbortProc16 382 pascal -ret16 AbortDoc(word) AbortDoc16 400 pascal -ret16 FastWindowFrame(word ptr s_word s_word long) FastWindowFrame16 401 pascal -ret16 GdiMoveBitmap(word) GdiMoveBitmap16 402 stub GDIGETBITSGLOBAL # W2.0 (only ?) 403 pascal -ret16 GdiInit2(word word) GdiInit216 404 stub GetTTGlyphIndexMap 405 pascal -ret16 FinalGdiInit(word) FinalGdiInit16 406 stub CREATEREALBITMAPINDIRECT # W2.0 (only ?) 407 pascal -ret16 CreateUserBitmap(word word word word ptr) CreateUserBitmap16 408 stub CREATEREALBITMAP # W2.0 (only ?) 409 pascal -ret16 CreateUserDiscardableBitmap(word word word) CreateUserDiscardableBitmap16 410 pascal -ret16 IsValidMetaFile (word) IsValidMetaFile16 411 pascal -ret16 GetCurLogFont(word) GetCurLogFont16 412 pascal -ret16 IsDCCurrentPalette(word) IsDCCurrentPalette16 439 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 440 pascal -ret16 SetDIBits(word word word word ptr ptr word) SetDIBits16 441 pascal -ret16 GetDIBits(word word word word ptr ptr word) GetDIBits16 442 pascal -ret16 CreateDIBitmap(word ptr long ptr ptr word) CreateDIBitmap16 443 pascal -ret16 SetDIBitsToDevice(word s_word s_word s_word s_word s_word s_word word word ptr ptr word) SetDIBitsToDevice16 444 pascal -ret16 CreateRoundRectRgn(s_word s_word s_word s_word s_word s_word) CreateRoundRectRgn16 445 pascal -ret16 CreateDIBPatternBrush(word word) CreateDIBPatternBrush16 449 stub DEVICECOLORMATCH 450 pascal -ret16 PolyPolygon(word ptr ptr word) PolyPolygon16 451 pascal -ret16 CreatePolyPolygonRgn(ptr ptr word word) CreatePolyPolygonRgn16 452 pascal GdiSeeGdiDo(word word word word) GdiSeeGdiDo16 460 pascal -ret16 GdiTaskTermination(word) GdiTaskTermination16 461 pascal -ret16 SetObjectOwner(word word) SetObjectOwner16 462 pascal -ret16 IsGDIObject(word) IsGDIObject16 463 pascal -ret16 MakeObjectPrivate(word word) MakeObjectPrivate16 464 stub FIXUPBOGUSPUBLISHERMETAFILE 465 pascal -ret16 RectVisible(word ptr) RectVisible16 # RECTVISIBLE_EHH ?? 466 pascal -ret16 RectInRegion(word ptr) RectInRegion16 # RECTINREGION_EHH ?? 467 pascal -ret16 UnicodeToAnsi(segptr segptr) UnicodeToAnsi16 468 pascal -ret16 GetBitmapDimensionEx(word ptr) GetBitmapDimensionEx16 469 pascal -ret16 GetBrushOrgEx(word ptr) GetBrushOrgEx16 470 pascal -ret16 GetCurrentPositionEx(word ptr) GetCurrentPositionEx16 471 pascal -ret16 GetTextExtentPoint(word ptr s_word ptr) GetTextExtentPoint16 472 pascal -ret16 GetViewportExtEx(word ptr) GetViewportExtEx16 473 pascal -ret16 GetViewportOrgEx(word ptr) GetViewportOrgEx16 474 pascal -ret16 GetWindowExtEx(word ptr) GetWindowExtEx16 475 pascal -ret16 GetWindowOrgEx(word ptr) GetWindowOrgEx16 476 pascal -ret16 OffsetViewportOrgEx(word s_word s_word ptr) OffsetViewportOrgEx16 477 pascal -ret16 OffsetWindowOrgEx(word s_word s_word ptr) OffsetWindowOrgEx16 478 pascal -ret16 SetBitmapDimensionEx(word s_word s_word ptr) SetBitmapDimensionEx16 479 pascal -ret16 SetViewportExtEx(word s_word s_word ptr) SetViewportExtEx16 480 pascal -ret16 SetViewportOrgEx(word s_word s_word ptr) SetViewportOrgEx16 481 pascal -ret16 SetWindowExtEx(word s_word s_word ptr) SetWindowExtEx16 482 pascal -ret16 SetWindowOrgEx(word s_word s_word ptr) SetWindowOrgEx16 483 pascal -ret16 MoveToEx(word s_word s_word ptr) MoveToEx16 484 pascal -ret16 ScaleViewportExtEx(word s_word s_word s_word s_word ptr) ScaleViewportExtEx16 485 pascal -ret16 ScaleWindowExtEx(word s_word s_word s_word s_word ptr) ScaleWindowExtEx16 486 pascal -ret16 GetAspectRatioFilterEx(word ptr) GetAspectRatioFilterEx16 488 pascal -ret16 GetFontAssocStatus(word) GetFontAssocStatus16 489 pascal -ret16 CreateDIBSection(word ptr word ptr long long) CreateDIBSection16 490 stub CloseEnhMetafile #490 stub POLYLINEWOW # conflicts with CloseEnhMetaFile !! 491 stub CopyEnhMetafile 492 stub CreateEnhMetafile 493 stub DeleteEnhMetafile 495 stub GDIComment 496 stub GetEnhMetafile 497 stub GetEnhMetafileBits 498 stub GetEnhMetafileDescription 499 stub GetEnhMetafileHeader 501 stub GetEnhMetafilePaletteEntries 502 pascal -ret16 PolyBezier(word ptr word) PolyBezier16 503 pascal -ret16 PolyBezierTo(word ptr word) PolyBezierTo16 504 stub PlayEnhMetafileRecord 505 stub SetEnhMetafileBits 506 stub SetMetaRgn 508 pascal -ret16 ExtSelectClipRgn(word word word) ExtSelectClipRgn16 511 pascal -ret16 AbortPath(word) AbortPath16 512 pascal -ret16 BeginPath(word) BeginPath16 513 pascal -ret16 CloseFigure(word) CloseFigure16 514 pascal -ret16 EndPath(word) EndPath16 515 pascal -ret16 FillPath(word) FillPath16 516 pascal -ret16 FlattenPath(word) FlattenPath16 517 pascal -ret16 GetPath(word ptr ptr word) GetPath16 518 pascal -ret16 PathToRegion(word) PathToRegion16 519 pascal -ret16 SelectClipPath(word word) SelectClipPath16 520 pascal -ret16 StrokeAndFillPath(word) StrokeAndFillPath16 521 pascal -ret16 StrokePath(word) StrokePath16 522 pascal -ret16 WidenPath(word) WidenPath16 523 stub ExtCreatePen 524 pascal -ret16 GetArcDirection(word) GetArcDirection16 525 pascal -ret16 SetArcDirection(word word) SetArcDirection16 526 stub GetMiterLimit 527 stub SetMiterLimit 528 stub GDIParametersInfo 529 pascal -ret16 CreateHalftonePalette(word) CreateHalftonePalette16 # Hebrew version API's 530 pascal -ret16 RawTextOut(word s_word s_word str word) RawTextOut16 531 pascal -ret16 RawExtTextOut(word s_word s_word word ptr str word ptr) RawExtTextOut16 532 pascal -ret16 RawGetTextExtent(word str word) RawGetTextExtent16 533 pascal -ret16 RawGetTextExtentEx() RawGetTextExtentEx16 536 pascal -ret16 BiDiLayout() BiDiLayout16 537 pascal -ret16 BiDiCreateTabString() BiDiCreateTabString16 538 pascal -ret16 BiDiCreateString() BiDiCreateString16 539 pascal -ret16 BiDiStringOut() BiDiStringOut16 540 pascal -ret16 BiDiGlyphOut(word word word word str word word word) BiDiGlyphOut16 541 pascal -ret16 BiDiJustifyString() BiDiJustifyString16 542 pascal -ret16 BiDiSetStringTabs() BiDiSetStringTabs16 543 pascal -ret16 BiDiGetStringExtent() BiDiGetStringExtent16 544 pascal -ret16 BiDiGetNextGlyph() BiDiGetNextGlyph16 545 pascal -ret16 BiDiGetPrevGlyph() BiDiGetPrevGlyph16 546 pascal -ret16 BiDiIsStringRTL() BiDiIsStringRTL16 547 pascal -ret16 BiDiGlyphLength() BiDiGlyphLength16 548 pascal -ret16 BiDiCaretStringToPel() BiDiCaretStringTopel16 549 pascal -ret16 BiDiCaretPelToString() BiDiCaretPelToString16 550 pascal -ret16 BiDiStringToGlyph() BiDiStringToGlyph16 551 pascal -ret16 BiDiGlyphToString() BiDiGlyphToString16 552 pascal -ret16 BiDiPelToGlyph() BiDiPelToGlyph16 553 pascal -ret16 BiDiGlyphToPel() BiDiGlyphToPel16 554 pascal -ret16 BiDiBounds() BiDiBounds16 555 pascal -ret16 BiDiDeleteString(word) BiDiDeleteString16 556 pascal -ret16 BiDiSetDefaults() BiDiSetDefaults16 558 pascal -ret16 BiDiGetDefaults() BiDiGetDefaults16 559 pascal -ret16 BiDiCalcString(word word ptr word word word word word) BiDiCalcString16 560 pascal -ret16 BiDiShape(word word word word word word word word word word word word word word word word word word word word) BiDiShape16 561 pascal -ret16 BiDiFontComplement() BiDiFontComplement16 563 pascal -ret16 BiDiCalcTabString() BiDiCalcTabString16 564 pascal -ret16 BiDiSetKashida() BiDiSetKashida16 565 pascal -ret16 BiDiKExtTextOut() BiDiKExtTextOut16 566 pascal -ret16 BiDiShapeEx() BiDiShapeEx16 569 pascal -ret16 BiDiCreateStringEx(word word word ptr word word word word word) BiDiCreateStringEx16 570 pascal -ret16 GetUnicodeMap() GetUnicodeMap16 571 pascal -ret16 GetTextExtentRtoL() GetTextExtentRtoL16 572 pascal -ret16 GetHDCCharSet(word) GetHDCCharSet16 573 pascal -ret16 BiDiLayoutEx(ptr word word word ptr word word word word ptr ptr word word word) BiDiLayoutEx16 574 pascal -ret16 BiDiCreateTabStringEx() BiDiCreateTabStringEx16 575 pascal -ret16 BiDiCalcTabStringEx() BiDiCalcTabStringEx16 576 pascal -ret16 BiDiCalcStringEx() BiDiCalcStringEx16 588 pascal -ret16 SetTextCodePage(word word) SetTextCodePage16 589 pascal -ret16 GetTextCodePage() GetTextCodePage16 602 pascal -ret16 SetDIBColorTable(word word word ptr) SetDIBColorTable16 603 pascal -ret16 GetDIBColorTable(word word word ptr) GetDIBColorTable16 604 pascal -ret16 SetSolidBrush(word long) SetSolidBrush16 605 pascal -ret16 SysDeleteObject(word) DeleteObject16 # ??? 606 pascal -ret16 SetMagicColors(word long word) SetMagicColors16 607 pascal GetRegionData(word long ptr) GetRegionData16 608 stub ExtCreateRegion 609 pascal -ret16 GdiFreeResources(long) GdiFreeResources16 610 pascal -ret16 GdiSignalProc32(long long long word) GdiSignalProc 611 stub GetRandomRgn 612 pascal -ret16 GetTextCharset(word) GetTextCharset16 613 pascal -ret16 EnumFontFamiliesEx(word ptr segptr long long) EnumFontFamiliesEx16 614 stub AddLpkToGDI 615 stub GetCharacterPlacement 616 pascal GetFontLanguageInfo(word) GetFontLanguageInfo16 650 stub BuildInverseTableDIB 701 stub GDITHKCONNECTIONDATALS 702 stub FT_GDIFTHKTHKCONNECTIONDATA 703 stub FDTHKCONNECTIONDATASL 704 stub ICMTHKCONNECTIONDATASL 820 stub ICMCreateTransform 821 stub ICMDeleteTransform 822 stub ICMTranslateRGB 823 stub ICMTranslateRGBs 824 stub ICMCheckColorsInGamut 1000 pascal -ret16 SetLayout(word long) SetLayout16 1001 stub GetLayout 5000 pascal DllEntryPoint(long word word word long word) DllEntryPoint ================================================ FILE: gdi/gdi.vcxproj ================================================  Debug Win32 Release Win32 {0EBCFB5B-3092-4E06-A007-CA50B1DA3298} Win32Proj gdi 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .exe16 false .exe16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;GDI_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)krnl386.lib;$(OutDir)user.lib;$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;advapi32.lib;winspool.lib gdi.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;GDI_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true gdi.def false $(OutDir)winecrt0.lib;$(OutDir)krnl386.lib;$(OutDir)user.lib;$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;advapi32.lib;winspool.lib Document "$(OutDir)convspec" "%(Filename).spec" --heap 65520 GDI > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" --heap 65520 GDI > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: gdi/gdi.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: gdi/metafile.c ================================================ /* * Metafile functions * * Copyright David W. Metcalfe, 1994 * Copyright Niels de Carpentier, 1996 * Copyright Albrecht Kleine, 1996 * Copyright Huw Davies, 1996 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include "wine/winbase16.h" #include "wine/wingdi16.h" #include "wownt32.h" #include "winreg.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(metafile); #define METAFILE_MEMORY 1 #define METAFILE_DISK 2 #define MFHEADERSIZE (sizeof(METAHEADER)) #define MFVERSION 0x300 /****************************************************************** * MF_GetMetaHeader16 * * Returns ptr to METAHEADER associated with HMETAFILE16 * Should be followed by call to MF_ReleaseMetaHeader16 */ static METAHEADER *MF_GetMetaHeader16( HMETAFILE16 hmf ) { return GlobalLock16(hmf); } /****************************************************************** * MF_ReleaseMetaHeader16 * * Releases METAHEADER associated with HMETAFILE16 */ static BOOL16 MF_ReleaseMetaHeader16( HMETAFILE16 hmf ) { return GlobalUnlock16( hmf ); } /****************************************************************** * create_metafile16 * * Create a 16-bit metafile from a 32-bit one. The 32-bit one is deleted. */ static HMETAFILE16 create_metafile16( HMETAFILE hmf ) { UINT size; HMETAFILE16 hmf16; if (!hmf) return 0; size = GetMetaFileBitsEx( hmf, 0, NULL ); hmf16 = GlobalAlloc16( GMEM_MOVEABLE, size ); if (hmf16) { void *buffer = GlobalLock16( hmf16 ); GetMetaFileBitsEx( hmf, size, buffer ); GlobalUnlock16( hmf16 ); } DeleteMetaFile( hmf ); return hmf16; } /****************************************************************** * create_metafile32 * * Create a 32-bit metafile from a 16-bit one. */ static HMETAFILE create_metafile32( HMETAFILE16 hmf16 ) { METAHEADER *mh = MF_GetMetaHeader16( hmf16 ); if (!mh) return 0; return SetMetaFileBitsEx( /*mh->mtSize * 2*/GlobalSize16(hmf16), (BYTE *)mh ); } /********************************************************************** * CreateMetaFile (GDI.125) */ HDC16 WINAPI CreateMetaFile16( LPCSTR filename ) { return HDC_16( CreateMetaFileA( filename ) ); } /****************************************************************** * CloseMetaFile (GDI.126) */ HMETAFILE16 WINAPI CloseMetaFile16(HDC16 hdc) { return create_metafile16( CloseMetaFile( HDC_32(hdc) )); } /****************************************************************** * DeleteMetaFile (GDI.127) */ BOOL16 WINAPI DeleteMetaFile16( HMETAFILE16 hmf ) { return !GlobalFree16( hmf ); } /****************************************************************** * GetMetaFile (GDI.124) */ HMETAFILE16 WINAPI GetMetaFile16( LPCSTR lpFilename ) { return create_metafile16( GetMetaFileA( lpFilename )); } /****************************************************************** * CopyMetaFile (GDI.151) */ HMETAFILE16 WINAPI CopyMetaFile16( HMETAFILE16 hSrcMetaFile, LPCSTR lpFilename) { HMETAFILE hmf = create_metafile32( hSrcMetaFile ); HMETAFILE hmf2 = CopyMetaFileA( hmf, lpFilename ); DeleteMetaFile( hmf ); return create_metafile16( hmf2 ); } /****************************************************************** * IsValidMetaFile (GDI.410) * * Attempts to check if a given metafile is correctly formatted. * Currently, the only things verified are several properties of the * header. * * RETURNS * TRUE if hmf passes some tests for being a valid metafile, FALSE otherwise. * * BUGS * This is not exactly what windows does, see _Undocumented_Windows_ * for details. */ BOOL16 WINAPI IsValidMetaFile16(HMETAFILE16 hmf) { BOOL16 res=FALSE; METAHEADER *mh = MF_GetMetaHeader16(hmf); if (mh) { if (mh->mtType == METAFILE_MEMORY || mh->mtType == METAFILE_DISK) if (mh->mtHeaderSize == MFHEADERSIZE/sizeof(INT16)) if (mh->mtVersion == MFVERSION) res=TRUE; MF_ReleaseMetaHeader16(hmf); } TRACE("IsValidMetaFile %x => %d\n",hmf,res); return res; } /****************************************************************** * PlayMetaFile (GDI.123) * */ BOOL16 WINAPI PlayMetaFile16( HDC16 hdc, HMETAFILE16 hmf16 ) { HMETAFILE hmf = create_metafile32( hmf16 ); BOOL ret = PlayMetaFile( HDC_32(hdc), hmf ); DeleteMetaFile( hmf ); return ret; } #define META_EOF 0x0000 typedef struct { LPARAM lpData; SEGPTR spht; WORD seg; WORD offset; SEGPTR record; HMETAFILE hmf32; SEGPTR lpEnumFunc; WORD max; } enum_metafile_data; int CALLBACK EnumMetaFileCallback(HDC hdc, HANDLETABLE *lpht, METARECORD *lpMR, int nObj, LPARAM param) { enum_metafile_data *d = (enum_metafile_data*)param; HANDLETABLE16 *lpht16; int i; WORD args[8]; DWORD ret; lpht16 = MapSL(d->spht); for (i = 0; i < nObj; i++) { lpht16->objectHandle[i] = HDC_16(lpht->objectHandle[i]); } if (lpMR->rdSize > d->max) { ERR("\n"); } DWORD siz = lpMR->rdSize * 2; memcpy(MapSL(d->record), lpMR, siz); args[7] = HDC_16(hdc); args[6] = SELECTOROF(d->spht); args[5] = OFFSETOF(d->spht); args[4] = SELECTOROF(d->record); args[3] = OFFSETOF(d->record); args[2] = nObj; args[1] = HIWORD(d->lpData); args[0] = LOWORD(d->lpData); WOWCallback16Ex((DWORD)d->lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &ret); memcpy(lpMR, MapSL(d->record), siz); lpht16 = MapSL(d->spht); for (i = 0; i < nObj; i++) { lpht->objectHandle[i] = HDC_32(lpht16->objectHandle[i]); } return LOWORD(ret); } /****************************************************************** * EnumMetaFile (GDI.175) * */ BOOL16 WINAPI EnumMetaFile16( HDC16 hdc16, HMETAFILE16 hmf, MFENUMPROC16 lpEnumFunc, LPARAM lpData ) { #if 1 METAHEADER *mh = MF_GetMetaHeader16(hmf); HMETAFILE hmf32 = create_metafile32(hmf); enum_metafile_data param; BOOL r; HGLOBAL16 hHT; param.lpData = lpData; hHT = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT, FIELD_OFFSET(HANDLETABLE16, objectHandle[mh->mtNoObjects])); HGLOBAL16 record = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT, mh->mtMaxRecord * 2); param.max = mh->mtMaxRecord; param.spht = WOWGlobalLock16(hHT); param.lpEnumFunc = lpEnumFunc; param.seg = hmf | 7; param.hmf32 = hmf32; param.record = WOWGlobalLock16(record); r = EnumMetaFile(HDC_32(hdc16), hmf32, EnumMetaFileCallback, ¶m); DeleteMetaFile(hmf32); GlobalFree16(hHT); GlobalFree16(record); /* twice */ MF_ReleaseMetaHeader16(hmf); MF_ReleaseMetaHeader16(hmf); return r; #else METAHEADER *mh = MF_GetMetaHeader16(hmf); METARECORD *mr; HANDLETABLE16 *ht; HDC hdc = HDC_32(hdc16); HGLOBAL16 hHT; SEGPTR spht; unsigned int offset = 0; WORD i, seg; HPEN hPen; HBRUSH hBrush; HFONT hFont; WORD args[8]; BOOL16 result = TRUE; TRACE("(%p, %04x, %p, %08lx)\n", hdc, hmf, lpEnumFunc, lpData); if(!mh) return FALSE; /* save the current pen, brush and font */ hPen = GetCurrentObject(hdc, OBJ_PEN); hBrush = GetCurrentObject(hdc, OBJ_BRUSH); hFont = GetCurrentObject(hdc, OBJ_FONT); /* create the handle table */ hHT = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT, FIELD_OFFSET(HANDLETABLE16, objectHandle[mh->mtNoObjects])); spht = WOWGlobalLock16(hHT); seg = hmf | 7; offset = mh->mtHeaderSize * 2; /* loop through metafile records */ args[7] = hdc16; args[6] = SELECTOROF(spht); args[5] = OFFSETOF(spht); args[4] = seg + (HIWORD(offset) << __AHSHIFT); args[3] = LOWORD(offset); args[2] = mh->mtNoObjects; args[1] = HIWORD(lpData); args[0] = LOWORD(lpData); while (offset < (mh->mtSize * 2)) { DWORD ret; mr = (METARECORD *)((char *)mh + offset); if (mr->rdFunction == META_EOF) { TRACE("Got META_EOF so stopping\n"); break; } WOWCallback16Ex( (DWORD)lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &ret ); if (!LOWORD(ret)) { result = FALSE; break; } offset += (mr->rdSize * 2); args[4] = seg + (HIWORD(offset) << __AHSHIFT); args[3] = LOWORD(offset); } SelectObject(hdc, hBrush); SelectObject(hdc, hPen); SelectObject(hdc, hFont); ht = GlobalLock16(hHT); /* free objects in handle table */ for(i = 0; i < mh->mtNoObjects; i++) if(*(ht->objectHandle + i) != 0) DeleteObject( (HGDIOBJ)(ULONG_PTR)(*(ht->objectHandle + i) )); /* free handle table */ GlobalFree16(hHT); MF_ReleaseMetaHeader16(hmf); return result; #endif } /****************************************************************** * GetMetaFileBits (GDI.159) * * Trade in a metafile object handle for a handle to the metafile memory. * * PARAMS * hmf [I] metafile handle */ HGLOBAL16 WINAPI GetMetaFileBits16( HMETAFILE16 hmf ) { TRACE("hMem out: %04x\n", hmf); return hmf; } /****************************************************************** * SetMetaFileBits (GDI.160) * * Trade in a metafile memory handle for a handle to a metafile object. * The memory region should hold a proper metafile, otherwise * problems will occur when it is used. Validity of the memory is not * checked. The function is essentially just the identity function. * * PARAMS * hMem [I] handle to a memory region holding a metafile * * RETURNS * Handle to a metafile on success, NULL on failure.. */ HMETAFILE16 WINAPI SetMetaFileBits16( HGLOBAL16 hMem ) { TRACE("hmf out: %04x\n", hMem); return hMem; } /****************************************************************** * SetMetaFileBitsBetter (GDI.196) * * Trade in a metafile memory handle for a handle to a metafile object, * making a cursory check (using IsValidMetaFile()) that the memory * handle points to a valid metafile. * * RETURNS * Handle to a metafile on success, NULL on failure.. */ HMETAFILE16 WINAPI SetMetaFileBitsBetter16( HMETAFILE16 hMeta ) { if( IsValidMetaFile16( hMeta ) ) return GlobalReAlloc16( hMeta, 0, GMEM_SHARE | GMEM_NODISCARD | GMEM_MODIFY); return 0; } ================================================ FILE: gdi/printdrv.c ================================================ /* * Implementation of some printer driver bits * * Copyright 1996 John Harvey * Copyright 1998 Huw Davies * Copyright 1998 Andreas Mohr * Copyright 1999 Klaas van Gend * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include #ifdef HAVE_IO_H # include #endif #ifdef HAVE_SYS_WAIT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #include #include "windef.h" #include "winbase.h" #include "winuser.h" #include "wine/winbase16.h" #include "wine/wingdi16.h" #include "winspool.h" #include "winerror.h" #include "winreg.h" #include "wownt32.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(print); static const char PrinterModel[] = "Printer Model"; static const char DefaultDevMode[] = "Default DevMode"; static const char PrinterDriverData[] = "PrinterDriverData"; static const char Printers[] = "System\\CurrentControlSet\\Control\\Print\\Printers\\"; /****************** misc. printer related functions */ /* * The following function should implement a queuing system */ struct hpq { struct hpq *next; int tag; int key; }; static struct hpq *hpqueue; /********************************************************************** * CreatePQ (GDI.230) * */ HPQ16 WINAPI CreatePQ16(INT16 size) { #if 0 HGLOBAL16 hpq = 0; WORD tmp_size; LPWORD pPQ; tmp_size = size << 2; if (!(hpq = GlobalAlloc16(GMEM_SHARE|GMEM_MOVEABLE, tmp_size + 8))) return 0xffff; pPQ = GlobalLock16(hpq); *pPQ++ = 0; *pPQ++ = tmp_size; *pPQ++ = 0; *pPQ++ = 0; GlobalUnlock16(hpq); return (HPQ16)hpq; #else FIXME("(%d): stub\n",size); return 1; #endif } /********************************************************************** * DeletePQ (GDI.235) * */ INT16 WINAPI DeletePQ16(HPQ16 hPQ) { return GlobalFree16(hPQ); } /********************************************************************** * ExtractPQ (GDI.232) * */ INT16 WINAPI ExtractPQ16(HPQ16 hPQ) { struct hpq *queue, *prev, *current, *currentPrev; int key = 0, tag = -1; prev = NULL; queue = current = hpqueue; if (current) key = current->key; while (current) { currentPrev = current; current = current->next; if (current) { if (current->key < key) { queue = current; prev = currentPrev; } } } if (queue) { tag = queue->tag; if (prev) prev->next = queue->next; else hpqueue = queue->next; HeapFree(GetProcessHeap(), 0, queue); } TRACE("%x got tag %d key %d\n", hPQ, tag, key); return tag; } /********************************************************************** * InsertPQ (GDI.233) * */ INT16 WINAPI InsertPQ16(HPQ16 hPQ, INT16 tag, INT16 key) { struct hpq *queueItem = HeapAlloc(GetProcessHeap(), 0, sizeof(struct hpq)); if(queueItem == NULL) { ERR("Memory exhausted!\n"); return FALSE; } queueItem->next = hpqueue; hpqueue = queueItem; queueItem->key = key; queueItem->tag = tag; FIXME("(%x %d %d): stub???\n", hPQ, tag, key); return TRUE; } /********************************************************************** * MinPQ (GDI.231) * */ INT16 WINAPI MinPQ16(HPQ16 hPQ) { FIXME("(%x): stub\n", hPQ); return 0; } /********************************************************************** * SizePQ (GDI.234) * */ INT16 WINAPI SizePQ16(HPQ16 hPQ, INT16 sizechange) { FIXME("(%x %d): stub\n", hPQ, sizechange); return -1; } /* * The following functions implement part of the spooling process to * print manager. I would like to see wine have a version of print managers * that used LPR/LPD. For simplicity print jobs will be sent to a file for * now. */ #ifdef HAVE_UNISTD_H typedef struct PRINTJOB { char *pszOutput; char *pszTitle; HDC16 hDC; HANDLE16 hHandle; int nIndex; int fd; pid_t pid; } PRINTJOB, *PPRINTJOB; #define MAX_PRINT_JOBS 1 #define SP_OK 1 static PPRINTJOB gPrintJobsTable[MAX_PRINT_JOBS]; static PPRINTJOB FindPrintJobFromHandle(HANDLE16 hHandle) { return gPrintJobsTable[0]; } #endif #ifdef HAVE_UNISTD_H static int CreateSpoolFile(LPCSTR pszOutput, pid_t *out_pid) { int fd=-1; char psCmd[1024]; const char *psCmdP = psCmd; HKEY hkey; /* TTD convert the 'output device' into a spool file name */ if (pszOutput == NULL || *pszOutput == '\0' || out_pid == NULL) return -1; *out_pid = -1; psCmd[0] = 0; /* @@ Wine registry key: HKCU\Software\Wine\Printing\Spooler */ if(!RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Printing\\Spooler", &hkey)) { DWORD type, count = sizeof(psCmd); RegQueryValueExA(hkey, pszOutput, 0, &type, (LPBYTE)psCmd, &count); RegCloseKey(hkey); } if (!psCmd[0] && !strncmp("LPR:",pszOutput,4)) sprintf(psCmd,"|lpr -P'%s'",pszOutput+4); TRACE("Got printerSpoolCommand '%s' for output device '%s'\n", psCmd, pszOutput); if (!*psCmd) psCmdP = pszOutput; else { while (*psCmdP && isspace(*psCmdP)) { psCmdP++; } if (!*psCmdP) return -1; } TRACE("command: '%s'\n", psCmdP); #ifdef HAVE_FORK if (*psCmdP == '|') { int fds[2]; if (pipe(fds)) { ERR("pipe() failed!\n"); return -1; } if ((*out_pid = fork()) == 0) { psCmdP++; TRACE("In child need to exec %s\n",psCmdP); close(0); dup2(fds[0],0); close (fds[1]); /* reset signals that we previously set to SIG_IGN */ signal( SIGPIPE, SIG_DFL ); execl("/bin/sh", "/bin/sh", "-c", psCmdP, NULL); _exit(1); } close (fds[0]); fd = fds[1]; TRACE("Need to execute a cmnd and pipe the output to it\n"); } else #endif { char *buffer; WCHAR psCmdPW[MAX_PATH]; TRACE("Just assume it's a file\n"); /** * The file name can be dos based, we have to find its * corresponding Unix file name. */ MultiByteToWideChar(CP_ACP, 0, psCmdP, -1, psCmdPW, MAX_PATH); if ((buffer = wine_get_unix_file_name(psCmdPW))) { if ((fd = open(buffer, O_CREAT | O_TRUNC | O_WRONLY, 0666)) < 0) { ERR("Failed to create spool file '%s' ('%s'). (error %s)\n", buffer, psCmdP, strerror(errno)); } HeapFree(GetProcessHeap(), 0, buffer); } } return fd; } static int FreePrintJob(HANDLE16 hJob) { int nRet = SP_ERROR; PPRINTJOB pPrintJob; pPrintJob = FindPrintJobFromHandle(hJob); if (pPrintJob != NULL) { nRet = SP_OK; gPrintJobsTable[pPrintJob->nIndex] = NULL; HeapFree(GetProcessHeap(), 0, pPrintJob->pszOutput); HeapFree(GetProcessHeap(), 0, pPrintJob->pszTitle); if (pPrintJob->fd >= 0) close(pPrintJob->fd); if (pPrintJob->pid > 0) { pid_t wret; int status; do { wret = waitpid(pPrintJob->pid, &status, 0); } while (wret < 0 && errno == EINTR); if (wret < 0 || !WIFEXITED(status) || WEXITSTATUS(status)) nRet = SP_ERROR; } HeapFree(GetProcessHeap(), 0, pPrintJob); } return nRet; } #endif /********************************************************************** * OpenJob (GDI.240) * */ HPJOB16 WINAPI OpenJob16(LPCSTR lpOutput, LPCSTR lpTitle, HDC16 hDC) { #ifdef HAVE_UNISTD_H HPJOB16 hHandle = (HPJOB16)SP_ERROR; PPRINTJOB pPrintJob; TRACE("'%s' '%s' %04x\n", lpOutput, lpTitle, hDC); pPrintJob = gPrintJobsTable[0]; if (pPrintJob == NULL) { int fd; pid_t pid; /* Try and create a spool file */ fd = CreateSpoolFile(lpOutput, &pid); if (fd >= 0) { pPrintJob = HeapAlloc(GetProcessHeap(), 0, sizeof(PRINTJOB)); if(pPrintJob == NULL) { WARN("Memory exhausted!\n"); return hHandle; } hHandle = 1; pPrintJob->pszOutput = HeapAlloc(GetProcessHeap(), 0, strlen(lpOutput)+1); strcpy( pPrintJob->pszOutput, lpOutput ); if(lpTitle) { pPrintJob->pszTitle = HeapAlloc(GetProcessHeap(), 0, strlen(lpTitle)+1); strcpy( pPrintJob->pszTitle, lpTitle ); } pPrintJob->hDC = hDC; pPrintJob->fd = fd; pPrintJob->pid = pid; pPrintJob->nIndex = 0; pPrintJob->hHandle = hHandle; gPrintJobsTable[pPrintJob->nIndex] = pPrintJob; } } TRACE("return %04x\n", hHandle); return hHandle; #endif FIXME("stub"); } /********************************************************************** * CloseJob (GDI.243) * */ INT16 WINAPI CloseJob16(HPJOB16 hJob) { #ifdef HAVE_UNISTD_H int nRet = SP_ERROR; PPRINTJOB pPrintJob; TRACE("%04x\n", hJob); pPrintJob = FindPrintJobFromHandle(hJob); if (pPrintJob != NULL) { FreePrintJob(hJob); nRet = 1; } return nRet; #endif } /********************************************************************** * WriteSpool (GDI.241) * */ INT16 WINAPI WriteSpool16(HPJOB16 hJob, LPSTR lpData, INT16 cch) { #ifdef HAVE_UNISTD_H int nRet = SP_ERROR; PPRINTJOB pPrintJob; TRACE("%04x %p %04x\n", hJob, lpData, cch); pPrintJob = FindPrintJobFromHandle(hJob); if (pPrintJob != NULL && pPrintJob->fd >= 0 && cch) { if (write(pPrintJob->fd, lpData, cch) != cch) nRet = SP_OUTOFDISK; else nRet = cch; #if 0 /* FIXME: We just cannot call 16 bit functions from here, since we * have acquired several locks (DC). And we do not really need to. */ if (pPrintJob->hDC == 0) { TRACE("hDC == 0 so no QueryAbort\n"); } else if (!(QueryAbort16(pPrintJob->hDC, (nRet == SP_OUTOFDISK) ? nRet : 0 ))) { CloseJob16(hJob); /* printing aborted */ nRet = SP_APPABORT; } #endif } return nRet; #endif } typedef INT (WINAPI *MSGBOX_PROC)( HWND, LPCSTR, LPCSTR, UINT ); /********************************************************************** * WriteDialog (GDI.242) * */ INT16 WINAPI WriteDialog16(HPJOB16 hJob, LPSTR lpMsg, INT16 cchMsg) { HMODULE mod; MSGBOX_PROC pMessageBoxA; INT16 ret = 0; TRACE("%04x %04x '%s'\n", hJob, cchMsg, lpMsg); if ((mod = GetModuleHandleA("user32.dll"))) { if ((pMessageBoxA = (MSGBOX_PROC)GetProcAddress( mod, "MessageBoxA" ))) ret = pMessageBoxA(0, lpMsg, "Printing Error", MB_OKCANCEL); } return ret; } /********************************************************************** * DeleteJob (GDI.244) * */ INT16 WINAPI DeleteJob16(HPJOB16 hJob, INT16 nNotUsed) { int nRet; TRACE("%04x\n", hJob); //nRet = FreePrintJob(hJob); return nRet; } /* * The following two function would allow a page to be sent to the printer * when it has been processed. For simplicity they haven't been implemented. * This means a whole job has to be processed before it is sent to the printer. */ /********************************************************************** * StartSpoolPage (GDI.246) * */ INT16 WINAPI StartSpoolPage16(HPJOB16 hJob) { FIXME("StartSpoolPage GDI.246 unimplemented\n"); return 1; } /********************************************************************** * EndSpoolPage (GDI.247) * */ INT16 WINAPI EndSpoolPage16(HPJOB16 hJob) { FIXME("EndSpoolPage GDI.247 unimplemented\n"); return 1; } /********************************************************************** * GetSpoolJob (GDI.245) * */ DWORD WINAPI GetSpoolJob16(int nOption, LONG param) { DWORD retval = 0; TRACE("In GetSpoolJob param 0x%x noption %d\n",param, nOption); return retval; } /****************************************************************** * DrvGetPrinterDataInternal * * Helper for DrvGetPrinterData */ static DWORD DrvGetPrinterDataInternal(LPCSTR RegStr_Printer, LPBYTE lpPrinterData, int cbData, int what) { DWORD res = -1; HKEY hkey; DWORD dwType, cbQueryData; if (!(RegOpenKeyA(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey))) { if (what == INT_PD_DEFAULT_DEVMODE) { /* "Default DevMode" */ if (!(RegQueryValueExA(hkey, DefaultDevMode, 0, &dwType, 0, &cbQueryData))) { if (!lpPrinterData) res = cbQueryData; else if ((cbQueryData) && (cbQueryData <= cbData)) { cbQueryData = cbData; if (RegQueryValueExA(hkey, DefaultDevMode, 0, &dwType, lpPrinterData, &cbQueryData)) res = cbQueryData; } } } else { /* "Printer Driver" */ cbQueryData = 32; RegQueryValueExA(hkey, "Printer Driver", 0, &dwType, lpPrinterData, &cbQueryData); res = cbQueryData; } } if (hkey) RegCloseKey(hkey); return res; } /****************************************************************** * DrvGetPrinterData (GDI.282) * */ DWORD WINAPI DrvGetPrinterData16(LPSTR lpPrinter, LPSTR lpProfile, LPDWORD lpType, LPBYTE lpPrinterData, int cbData, LPDWORD lpNeeded) { LPSTR RegStr_Printer; HKEY hkey = 0, hkey2 = 0; DWORD res = 0; DWORD dwType, PrinterAttr, cbPrinterAttr, SetData, size; if (HIWORD(lpPrinter)) TRACE("printer %s\n",lpPrinter); else TRACE("printer %p\n",lpPrinter); if (HIWORD(lpProfile)) TRACE("profile %s\n",lpProfile); else TRACE("profile %p\n",lpProfile); TRACE("lpType %p\n",lpType); if ((!lpPrinter) || (!lpProfile) || (!lpNeeded)) return ERROR_INVALID_PARAMETER; RegStr_Printer = HeapAlloc(GetProcessHeap(), 0, strlen(Printers) + strlen(lpPrinter) + 2); strcpy(RegStr_Printer, Printers); strcat(RegStr_Printer, lpPrinter); if ((PtrToUlong(lpProfile) == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) && (!strcmp(lpProfile, DefaultDevMode)))) { size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData, INT_PD_DEFAULT_DEVMODE); if (size+1) { *lpNeeded = size; if ((lpPrinterData) && (*lpNeeded > cbData)) res = ERROR_MORE_DATA; } else res = ERROR_INVALID_PRINTER_NAME; } else if ((PtrToUlong(lpProfile) == INT_PD_DEFAULT_MODEL) || (HIWORD(lpProfile) && (!strcmp(lpProfile, PrinterModel)))) { *lpNeeded = 32; if (!lpPrinterData) goto failed; if (cbData < 32) { res = ERROR_MORE_DATA; goto failed; } size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData, INT_PD_DEFAULT_MODEL); if ((size+1) && (lpType)) *lpType = REG_SZ; else res = ERROR_INVALID_PRINTER_NAME; } else { if ((res = RegOpenKeyA(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey))) goto failed; cbPrinterAttr = 4; if ((res = RegQueryValueExA(hkey, "Attributes", 0, &dwType, (LPBYTE)&PrinterAttr, &cbPrinterAttr))) goto failed; if ((res = RegOpenKeyA(hkey, PrinterDriverData, &hkey2))) goto failed; *lpNeeded = cbData; res = RegQueryValueExA(hkey2, lpProfile, 0, lpType, lpPrinterData, lpNeeded); if ((res != ERROR_CANTREAD) && ((PrinterAttr & (PRINTER_ATTRIBUTE_ENABLE_BIDI|PRINTER_ATTRIBUTE_NETWORK)) == PRINTER_ATTRIBUTE_NETWORK)) { if (!(res) && (*lpType == REG_DWORD) && (*(LPDWORD)lpPrinterData == -1)) res = ERROR_INVALID_DATA; } else { SetData = -1; RegSetValueExA(hkey2, lpProfile, 0, REG_DWORD, (LPBYTE)&SetData, 4); /* no result returned */ } } failed: if (hkey2) RegCloseKey(hkey2); if (hkey) RegCloseKey(hkey); HeapFree(GetProcessHeap(), 0, RegStr_Printer); return res; } /****************************************************************** * DrvSetPrinterData (GDI.281) * */ DWORD WINAPI DrvSetPrinterData16(LPSTR lpPrinter, LPSTR lpProfile, DWORD lpType, LPBYTE lpPrinterData, DWORD dwSize) { LPSTR RegStr_Printer; HKEY hkey = 0; DWORD res = 0; if (HIWORD(lpPrinter)) TRACE("printer %s\n",lpPrinter); else TRACE("printer %p\n",lpPrinter); if (HIWORD(lpProfile)) TRACE("profile %s\n",lpProfile); else TRACE("profile %p\n",lpProfile); TRACE("lpType %08x\n",lpType); if ((!lpPrinter) || (!lpProfile) || (PtrToUlong(lpProfile) == INT_PD_DEFAULT_MODEL) || (HIWORD(lpProfile) && (!strcmp(lpProfile, PrinterModel)))) return ERROR_INVALID_PARAMETER; RegStr_Printer = HeapAlloc(GetProcessHeap(), 0, strlen(Printers) + strlen(lpPrinter) + 2); strcpy(RegStr_Printer, Printers); strcat(RegStr_Printer, lpPrinter); if ((PtrToUlong(lpProfile) == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) && (!strcmp(lpProfile, DefaultDevMode)))) { if ( RegOpenKeyA(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey) != ERROR_SUCCESS || RegSetValueExA(hkey, DefaultDevMode, 0, REG_BINARY, lpPrinterData, dwSize) != ERROR_SUCCESS ) res = ERROR_INVALID_PRINTER_NAME; } else { strcat(RegStr_Printer, "\\"); if( (res = RegOpenKeyA(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)) == ERROR_SUCCESS ) { if (!lpPrinterData) res = RegDeleteValueA(hkey, lpProfile); else res = RegSetValueExA(hkey, lpProfile, 0, lpType, lpPrinterData, dwSize); } } if (hkey) RegCloseKey(hkey); HeapFree(GetProcessHeap(), 0, RegStr_Printer); return res; } HANDLE16 WINAPI SpoolFile16(LPCSTR printer, LPCSTR port, LPCSTR job, LPCSTR file) { HANDLE hprinter; HANDLE16 ret = SP_ERROR; if (!OpenPrinterA(printer, &hprinter, NULL)) return SP_ERROR; DOC_INFO_1 dinfo; dinfo.pDocName = job; dinfo.pOutputFile = NULL; dinfo.pDatatype = "RAW"; if (!StartDocPrinterA(hprinter, 1, &dinfo)) goto outprn; HFILE fd = CreateFileA(file, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (fd == INVALID_HANDLE_VALUE) goto outfile; while (1) { char buf[1024]; int read, write; if (!ReadFile(fd, &buf, 1024, &read, NULL) || !read) break; if (!WritePrinter(hprinter, &buf, read, &write)) goto outfile; } ret = 1; outfile: CloseHandle(fd); EndDocPrinter(hprinter); outprn: ClosePrinter(hprinter); return ret; } ================================================ FILE: gvm/CMakeLists.txt ================================================ add_library(gvm SHARED gvm.c) include_directories(../wine) add_definitions(-D__i386__ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN=) target_link_libraries(gvm libwine) set_target_properties(gvm PROPERTIES PREFIX "") ================================================ FILE: gvm/gvm-interface.h ================================================ /* * QEMU GVM support * * Copyright IBM, Corp. 2008 * * Authors: * Anthony Liguori * * Copyright (c) 2017 Intel Corporation * Written by: * Haitao Shan * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. * */ #ifndef GVM_INTERFACE_H #define GVM_INTERFACE_H #ifdef _WIN32 #include #include #include #endif #include #include #include #include #define __u8 uint8_t #define __u16 uint16_t #define __u32 uint32_t #define __u64 uint64_t #define __s8 int8_t #define __s16 int16_t #define __s32 int32_t #define __s64 int64_t /* * GVM x86 specific structures and definitions * */ #define DE_VECTOR 0 #define DB_VECTOR 1 #define BP_VECTOR 3 #define OF_VECTOR 4 #define BR_VECTOR 5 #define UD_VECTOR 6 #define NM_VECTOR 7 #define DF_VECTOR 8 #define TS_VECTOR 10 #define NP_VECTOR 11 #define SS_VECTOR 12 #define GP_VECTOR 13 #define PF_VECTOR 14 #define MF_VECTOR 16 #define AC_VECTOR 17 #define MC_VECTOR 18 #define XM_VECTOR 19 #define VE_VECTOR 20 /* Architectural interrupt line count. */ #define GVM_NR_INTERRUPTS 256 struct gvm_memory_alias { __u32 slot; /* this has a different namespace than memory slots */ __u32 flags; __u64 guest_phys_addr; __u64 memory_size; __u64 target_phys_addr; }; /* for GVM_GET_IRQCHIP and GVM_SET_IRQCHIP */ struct gvm_pic_state { __u8 last_irr; /* edge detection */ __u8 irr; /* interrupt request register */ __u8 imr; /* interrupt mask register */ __u8 isr; /* interrupt service register */ __u8 priority_add; /* highest irq priority */ __u8 irq_base; __u8 read_reg_select; __u8 poll; __u8 special_mask; __u8 init_state; __u8 auto_eoi; __u8 rotate_on_auto_eoi; __u8 special_fully_nested_mode; __u8 init4; /* true if 4 byte init */ __u8 elcr; /* PIIX edge/trigger selection */ __u8 elcr_mask; }; #define GVM_IOAPIC_NUM_PINS 24 struct gvm_ioapic_state { __u64 base_address; __u32 ioregsel; __u32 id; __u32 irr; __u32 pad; union { __u64 bits; struct { __u8 vector; __u8 delivery_mode:3; __u8 dest_mode:1; __u8 delivery_status:1; __u8 polarity:1; __u8 remote_irr:1; __u8 trig_mode:1; __u8 mask:1; __u8 reserve:7; __u8 reserved[4]; __u8 dest_id; } fields; } redirtbl[GVM_IOAPIC_NUM_PINS]; }; #define GVM_IRQCHIP_PIC_MASTER 0 #define GVM_IRQCHIP_PIC_SLAVE 1 #define GVM_IRQCHIP_IOAPIC 2 #define GVM_NR_IRQCHIPS 3 #define GVM_RUN_X86_SMM (1 << 0) /* for GVM_GET_REGS and GVM_SET_REGS */ struct gvm_regs { /* out (GVM_GET_REGS) / in (GVM_SET_REGS) */ __u64 rax, rbx, rcx, rdx; __u64 rsi, rdi, rsp, rbp; __u64 r8, r9, r10, r11; __u64 r12, r13, r14, r15; __u64 rip, rflags; }; /* for GVM_GET_LAPIC and GVM_SET_LAPIC */ #define GVM_APIC_REG_SIZE 0x400 struct gvm_lapic_state { char regs[GVM_APIC_REG_SIZE]; }; struct gvm_segment { __u64 base; __u32 limit; __u16 selector; __u8 type; __u8 present, dpl, db, s, l, g, avl; __u8 unusable; __u8 padding; }; struct gvm_dtable { __u64 base; __u16 limit; __u16 padding[3]; }; /* for GVM_GET_SREGS and GVM_SET_SREGS */ struct gvm_sregs { /* out (GVM_GET_SREGS) / in (GVM_SET_SREGS) */ struct gvm_segment cs, ds, es, fs, gs, ss; struct gvm_segment tr, ldt; struct gvm_dtable gdt, idt; __u64 cr0, cr2, cr3, cr4, cr8; __u64 efer; __u64 apic_base; __u64 interrupt_bitmap[(GVM_NR_INTERRUPTS + 63) / 64]; }; /* for GVM_GET_FPU and GVM_SET_FPU */ struct gvm_fpu { __u8 fpr[8][16]; __u16 fcw; __u16 fsw; __u8 ftwx; /* in fxsave format */ __u8 pad1; __u16 last_opcode; __u64 last_ip; __u64 last_dp; __u8 xmm[16][16]; __u32 mxcsr; __u32 pad2; }; struct gvm_msr_entry { __u32 index; __u32 reserved; __u64 data; }; /* for GVM_GET_MSRS and GVM_SET_MSRS */ struct gvm_msrs { __u32 nmsrs; /* number of msrs in entries */ __u32 pad; struct gvm_msr_entry entries[0]; }; /* for GVM_GET_MSR_INDEX_LIST */ struct gvm_msr_list { __u32 nmsrs; /* number of msrs in entries */ __u32 indices[0]; }; struct gvm_cpuid_entry { __u32 function; __u32 index; __u32 flags; __u32 eax; __u32 ebx; __u32 ecx; __u32 edx; __u32 padding[3]; }; #define GVM_CPUID_FLAG_SIGNIFCANT_INDEX (1 << 0) #define GVM_CPUID_FLAG_STATEFUL_FUNC (1 << 1) #define GVM_CPUID_FLAG_STATE_READ_NEXT (1 << 2) /* for GVM_SET_CPUID */ struct gvm_cpuid { __u32 nent; __u32 padding; struct gvm_cpuid_entry entries[0]; }; struct gvm_debug_exit_arch { __u32 exception; __u32 pad; __u64 pc; __u64 dr6; __u64 dr7; }; #define GVM_GUESTDBG_USE_SW_BP 0x00010000 #define GVM_GUESTDBG_USE_HW_BP 0x00020000 #define GVM_GUESTDBG_INJECT_DB 0x00040000 #define GVM_GUESTDBG_INJECT_BP 0x00080000 /* for GVM_SET_GUEST_DEBUG */ struct gvm_guest_debug_arch { __u64 debugreg[8]; }; /* When set in flags, include corresponding fields on GVM_SET_VCPU_EVENTS */ #define GVM_VCPUEVENT_VALID_NMI_PENDING 0x00000001 #define GVM_VCPUEVENT_VALID_SIPI_VECTOR 0x00000002 #define GVM_VCPUEVENT_VALID_SHADOW 0x00000004 #define GVM_VCPUEVENT_VALID_SMM 0x00000008 /* Interrupt shadow states */ #define GVM_X86_SHADOW_INT_MOV_SS 0x01 #define GVM_X86_SHADOW_INT_STI 0x02 /* for GVM_GET/SET_VCPU_EVENTS */ struct gvm_vcpu_events { struct { __u8 injected; __u8 nr; __u8 has_error_code; __u8 pad; __u32 error_code; } exception; struct { __u8 injected; __u8 nr; __u8 soft; __u8 shadow; } interrupt; struct { __u8 injected; __u8 pending; __u8 masked; __u8 pad; } nmi; __u32 sipi_vector; __u32 flags; struct { __u8 smm; __u8 pending; __u8 smm_inside_nmi; __u8 latched_init; } smi; __u32 reserved[9]; }; /* for GVM_GET/SET_DEBUGREGS */ struct gvm_debugregs { __u64 db[4]; __u64 dr6; __u64 dr7; __u64 flags; __u64 reserved[9]; }; /* for GVM_CAP_XSAVE */ struct gvm_xsave { __u32 region[1024]; }; #define GVM_MAX_XCRS 16 struct gvm_xcr { __u32 xcr; __u32 reserved; __u64 value; }; struct gvm_xcrs { __u32 nr_xcrs; __u32 flags; struct gvm_xcr xcrs[GVM_MAX_XCRS]; __u64 padding[16]; }; /* definition of registers in gvm_run */ struct gvm_sync_regs { __u32 dummy[0]; }; #define GVM_X86_QUIRK_LINT0_REENABLED (1 << 0) #define GVM_X86_QUIRK_CD_NW_CLEARED (1 << 1) #define FILE_DEVICE_GVM 0xE3E3 /* Macros to convert Linux style ioctl to Windows */ #define __IO(a,b) CTL_CODE(FILE_DEVICE_GVM, b, METHOD_BUFFERED, FILE_ANY_ACCESS) #define __IOR(a,b,c) __IO(a,b) #define __IOW(a,b,c) __IO(a,b) #define __IOWR(a,b,c) __IO(a,b) #define GVM_API_VERSION 1 /* for GVM_CREATE_MEMORY_REGION */ struct gvm_memory_region { __u32 slot; __u32 flags; __u64 guest_phys_addr; __u64 memory_size; /* bytes */ }; /* for GVM_SET_USER_MEMORY_REGION */ struct gvm_userspace_memory_region { __u32 slot; __u32 flags; __u64 guest_phys_addr; __u64 memory_size; /* bytes */ __u64 userspace_addr; /* start of the userspace allocated memory */ }; /* * The bit 0 ~ bit 15 of gvm_memory_region::flags are visible for userspace, * other bits are reserved for gvm internal use which are defined in * include/linux/gvm_host.h. */ #define GVM_MEM_LOG_DIRTY_PAGES (1UL << 0) #define GVM_MEM_READONLY (1UL << 1) /* for GVM_IRQ_LINE */ struct gvm_irq_level { /* * ACPI gsi notion of irq. * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47.. * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23.. * For ARM: See Documentation/virtual/gvm/api.txt */ union { __u32 irq; __s32 status; }; __u32 level; }; struct gvm_irqchip { __u32 chip_id; __u32 pad; union { char dummy[512]; /* reserving space */ struct gvm_pic_state pic; struct gvm_ioapic_state ioapic; } chip; }; #define GVM_EXIT_UNKNOWN 0 #define GVM_EXIT_EXCEPTION 1 #define GVM_EXIT_IO 2 #define GVM_EXIT_HYPERCALL 3 #define GVM_EXIT_DEBUG 4 #define GVM_EXIT_HLT 5 #define GVM_EXIT_MMIO 6 #define GVM_EXIT_IRQ_WINDOW_OPEN 7 #define GVM_EXIT_SHUTDOWN 8 #define GVM_EXIT_FAIL_ENTRY 9 #define GVM_EXIT_INTR 10 #define GVM_EXIT_SET_TPR 11 #define GVM_EXIT_TPR_ACCESS 12 #define GVM_EXIT_NMI 16 #define GVM_EXIT_INTERNAL_ERROR 17 #define GVM_EXIT_OSI 18 #define GVM_EXIT_PAPR_HCALL 19 #define GVM_EXIT_WATCHDOG 21 #define GVM_EXIT_EPR 23 #define GVM_EXIT_SYSTEM_EVENT 24 #define GVM_EXIT_IOAPIC_EOI 26 /* For GVM_EXIT_INTERNAL_ERROR */ /* Emulate instruction failed. */ #define GVM_INTERNAL_ERROR_EMULATION 1 /* Encounter unexpected simultaneous exceptions. */ #define GVM_INTERNAL_ERROR_SIMUL_EX 2 /* Encounter unexpected vm-exit due to delivery event. */ #define GVM_INTERNAL_ERROR_DELIVERY_EV 3 /* for GVM_RUN, returned by mmap(vcpu_fd, offset=0) */ struct gvm_run { /* in */ __u8 request_interrupt_window; __u8 user_event_pending; __u8 padding1[6]; /* out */ __u32 exit_reason; __u8 ready_for_interrupt_injection; __u8 if_flag; __u16 flags; /* in (pre_gvm_run), out (post_gvm_run) */ __u64 cr8; __u64 apic_base; union { /* GVM_EXIT_UNKNOWN */ struct { __u64 hardware_exit_reason; } hw; /* GVM_EXIT_FAIL_ENTRY */ struct { __u64 hardware_entry_failure_reason; } fail_entry; /* GVM_EXIT_EXCEPTION */ struct { __u32 exception; __u32 error_code; } ex; /* GVM_EXIT_IO */ struct { #define GVM_EXIT_IO_IN 0 #define GVM_EXIT_IO_OUT 1 __u8 direction; __u8 size; /* bytes */ __u16 port; __u32 count; __u64 data_offset; /* relative to gvm_run start */ } io; /* GVM_EXIT_DEBUG */ struct { struct gvm_debug_exit_arch arch; } debug; /* GVM_EXIT_MMIO */ struct { __u64 phys_addr; __u8 data[8]; __u32 len; __u8 is_write; } mmio; /* GVM_EXIT_HYPERCALL */ struct { __u64 nr; __u64 args[6]; __u64 ret; __u32 longmode; __u32 pad; } hypercall; /* GVM_EXIT_TPR_ACCESS */ struct { __u64 rip; __u32 is_write; __u32 pad; } tpr_access; /* GVM_EXIT_INTERNAL_ERROR */ struct { __u32 suberror; /* Available with GVM_CAP_INTERNAL_ERROR_DATA: */ __u32 ndata; __u64 data[16]; } internal; /* GVM_EXIT_OSI */ struct { __u64 gprs[32]; } osi; /* GVM_EXIT_PAPR_HCALL */ struct { __u64 nr; __u64 ret; __u64 args[9]; } papr_hcall; /* GVM_EXIT_EPR */ struct { __u32 epr; } epr; /* GVM_EXIT_SYSTEM_EVENT */ struct { #define GVM_SYSTEM_EVENT_SHUTDOWN 1 #define GVM_SYSTEM_EVENT_RESET 2 #define GVM_SYSTEM_EVENT_CRASH 3 __u32 type; __u64 flags; } system_event; /* GVM_EXIT_IOAPIC_EOI */ struct { __u8 vector; } eoi; /* Fix the size of the union. */ char padding[256]; }; /* * shared registers between gvm and userspace. * gvm_valid_regs specifies the register classes set by the host * gvm_dirty_regs specified the register classes dirtied by userspace * struct gvm_sync_regs is architecture specific, as well as the * bits for gvm_valid_regs and gvm_dirty_regs */ __u64 gvm_valid_regs; __u64 gvm_dirty_regs; union { struct gvm_sync_regs regs; char padding[2048]; } s; }; /* for GVM_TRANSLATE */ struct gvm_translation { /* in */ __u64 linear_address; /* out */ __u64 physical_address; __u8 valid; __u8 writeable; __u8 usermode; __u8 pad[5]; }; /* for GVM_INTERRUPT */ struct gvm_interrupt { /* in */ __u32 irq; }; /* for GVM_GET_DIRTY_LOG */ struct gvm_dirty_log { __u32 slot; __u32 padding1; union { void *dirty_bitmap; /* one bit per page */ __u64 padding2; }; }; /* for GVM_TPR_ACCESS_REPORTING */ struct gvm_tpr_access_ctl { __u32 enabled; __u32 flags; __u32 reserved[8]; }; /* for GVM_SET_VAPIC_ADDR */ struct gvm_vapic_addr { __u64 vapic_addr; }; /* for GVM_SET_MP_STATE */ /* not all states are valid on all architectures */ #define GVM_MP_STATE_RUNNABLE 0 #define GVM_MP_STATE_UNINITIALIZED 1 #define GVM_MP_STATE_INIT_RECEIVED 2 #define GVM_MP_STATE_HALTED 3 #define GVM_MP_STATE_SIPI_RECEIVED 4 #define GVM_MP_STATE_STOPPED 5 #define GVM_MP_STATE_CHECK_STOP 6 #define GVM_MP_STATE_OPERATING 7 #define GVM_MP_STATE_LOAD 8 struct gvm_mp_state { __u32 mp_state; }; /* for GVM_SET_GUEST_DEBUG */ #define GVM_GUESTDBG_ENABLE 0x00000001 #define GVM_GUESTDBG_SINGLESTEP 0x00000002 struct gvm_guest_debug { __u32 control; __u32 pad; struct gvm_guest_debug_arch arch; }; /* for GVM_ENABLE_CAP */ struct gvm_enable_cap { /* in */ __u32 cap; __u32 flags; __u64 args[4]; __u8 pad[64]; }; /* * ioctls for /dev/gvm fds: */ #define GVM_GET_API_VERSION __IO(GVMIO, 0x00) #define GVM_CREATE_VM __IO(GVMIO, 0x01) /* returns a VM fd */ #define GVM_GET_MSR_INDEX_LIST __IOWR(GVMIO, 0x02, struct gvm_msr_list) /* * Check if a gvm extension is available. Argument is extension number, * return is 1 (yes) or 0 (no, sorry). */ #define GVM_CHECK_EXTENSION __IO(GVMIO, 0x03) /* * Get size for mmap(vcpu_fd) */ #define GVM_GET_VCPU_MMAP_SIZE __IO(GVMIO, 0x04) /* in bytes */ #define GVM_GET_SUPPORTED_CPUID __IOWR(GVMIO, 0x05, struct gvm_cpuid) #define GVM_GET_EMULATED_CPUID __IOWR(GVMIO, 0x09, struct gvm_cpuid) /* * Extension capability list. */ #define GVM_CAP_IRQCHIP 0 #define GVM_CAP_HLT 1 #define GVM_CAP_MMU_SHADOW_CACHE_CONTROL 2 #define GVM_CAP_VAPIC 6 #define GVM_CAP_NR_VCPUS 9 /* returns recommended max vcpus per vm */ #define GVM_CAP_NR_MEMSLOTS 10 /* returns max memory slots per vm */ #define GVM_CAP_SYNC_MMU 16 /* Changes to host mmap are reflected in guest */ #define GVM_CAP_IOMMU 18 #define GVM_CAP_USER_NMI 22 #define GVM_CAP_IRQ_ROUTING 25 #define GVM_CAP_SET_BOOT_CPU_ID 34 #define GVM_CAP_SET_IDENTITY_MAP_ADDR 37 #define GVM_CAP_PCI_SEGMENT 47 #define GVM_CAP_INTR_SHADOW 49 #define GVM_CAP_ENABLE_CAP 54 #define GVM_CAP_XSAVE 55 #define GVM_CAP_XCRS 56 #define GVM_CAP_MAX_VCPUS 66 /* returns max vcpus per vm */ #define GVM_CAP_SW_TLB 69 #define GVM_CAP_SYNC_REGS 74 #define GVM_CAP_READONLY_MEM 81 #define GVM_CAP_EXT_EMUL_CPUID 95 #define GVM_CAP_IOAPIC_POLARITY_IGNORED 97 #define GVM_CAP_ENABLE_CAP_VM 98 #define GVM_CAP_VM_ATTRIBUTES 101 #define GVM_CAP_CHECK_EXTENSION_VM 105 #define GVM_CAP_DISABLE_QUIRKS 116 #define GVM_CAP_X86_SMM 117 #define GVM_CAP_MULTI_ADDRESS_SPACE 118 #define GVM_CAP_GUEST_DEBUG_HW_BPS 119 #define GVM_CAP_GUEST_DEBUG_HW_WPS 120 #define GVM_CAP_VCPU_ATTRIBUTES 127 #define GVM_CAP_MAX_VCPU_ID 128 #define GVM_CAP_X2APIC_API 129 #define GVM_CAP_MSI_DEVID 131 struct gvm_irq_routing_irqchip { __u32 irqchip; __u32 pin; }; struct gvm_irq_routing_msi { __u32 address_lo; __u32 address_hi; __u32 data; union { __u32 pad; __u32 devid; }; }; struct gvm_irq_routing_hv_sint { __u32 vcpu; __u32 sint; }; /* gsi routing entry types */ #define GVM_IRQ_ROUTING_IRQCHIP 1 #define GVM_IRQ_ROUTING_MSI 2 #define GVM_IRQ_ROUTING_HV_SINT 4 struct gvm_irq_routing_entry { __u32 gsi; __u32 type; __u32 flags; __u32 pad; union { struct gvm_irq_routing_irqchip irqchip; struct gvm_irq_routing_msi msi; struct gvm_irq_routing_hv_sint hv_sint; __u32 pad[8]; } u; }; struct gvm_irq_routing { __u32 nr; __u32 flags; struct gvm_irq_routing_entry entries[0]; }; /* For GVM_CAP_SW_TLB */ #define GVM_MMU_FSL_BOOKE_NOHV 0 #define GVM_MMU_FSL_BOOKE_HV 1 struct gvm_config_tlb { __u64 params; __u64 array; __u32 mmu_type; __u32 array_len; }; struct gvm_dirty_tlb { __u64 bitmap; __u32 num_dirty; }; /* Available with GVM_CAP_ONE_REG */ #define GVM_REG_ARCH_MASK 0xff00000000000000ULL #define GVM_REG_GENERIC 0x0000000000000000ULL /* * Architecture specific registers are to be defined in arch headers and * ORed with the arch identifier. */ #define GVM_REG_PPC 0x1000000000000000ULL #define GVM_REG_X86 0x2000000000000000ULL #define GVM_REG_IA64 0x3000000000000000ULL #define GVM_REG_ARM 0x4000000000000000ULL #define GVM_REG_S390 0x5000000000000000ULL #define GVM_REG_ARM64 0x6000000000000000ULL #define GVM_REG_MIPS 0x7000000000000000ULL #define GVM_REG_SIZE_SHIFT 52 #define GVM_REG_SIZE_MASK 0x00f0000000000000ULL #define GVM_REG_SIZE_U8 0x0000000000000000ULL #define GVM_REG_SIZE_U16 0x0010000000000000ULL #define GVM_REG_SIZE_U32 0x0020000000000000ULL #define GVM_REG_SIZE_U64 0x0030000000000000ULL #define GVM_REG_SIZE_U128 0x0040000000000000ULL #define GVM_REG_SIZE_U256 0x0050000000000000ULL #define GVM_REG_SIZE_U512 0x0060000000000000ULL #define GVM_REG_SIZE_U1024 0x0070000000000000ULL struct gvm_reg_list { __u64 n; /* number of regs */ __u64 reg[0]; }; struct gvm_one_reg { __u64 id; __u64 addr; }; #define GVM_MSI_VALID_DEVID (1U << 0) struct gvm_msi { __u32 address_lo; __u32 address_hi; __u32 data; __u32 flags; __u32 devid; __u8 pad[12]; }; /* * ioctls for VM fds */ #define GVM_SET_MEMORY_REGION __IOW(GVMIO, 0x40, struct gvm_memory_region) /* * GVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns * a vcpu fd. */ #define GVM_CREATE_VCPU __IO(GVMIO, 0x41) #define GVM_GET_DIRTY_LOG __IOW(GVMIO, 0x42, struct gvm_dirty_log) /* GVM_SET_MEMORY_ALIAS is obsolete: */ #define GVM_SET_MEMORY_ALIAS __IOW(GVMIO, 0x43, struct gvm_memory_alias) #define GVM_SET_NR_MMU_PAGES __IO(GVMIO, 0x44) #define GVM_GET_NR_MMU_PAGES __IO(GVMIO, 0x45) #define GVM_SET_USER_MEMORY_REGION __IOW(GVMIO, 0x46, \ struct gvm_userspace_memory_region) #define GVM_SET_TSS_ADDR __IO(GVMIO, 0x47) #define GVM_SET_IDENTITY_MAP_ADDR __IOW(GVMIO, 0x48, __u64) #define GVM_KICK_VCPU __IO(GVMIO, 0x49) /* Device model IOC */ #define GVM_CREATE_IRQCHIP __IO(GVMIO, 0x60) #define GVM_GET_IRQCHIP __IOWR(GVMIO, 0x62, struct gvm_irqchip) #define GVM_SET_IRQCHIP __IOR(GVMIO, 0x63, struct gvm_irqchip) #define GVM_IRQ_LINE_STATUS __IOWR(GVMIO, 0x67, struct gvm_irq_level) #define GVM_SET_GSI_ROUTING __IOW(GVMIO, 0x6a, struct gvm_irq_routing) /* deprecated, replaced by GVM_ASSIGN_DEV_IRQ */ #define GVM_ASSIGN_IRQ __GVM_DEPRECATED_VM_R_0x70 #define GVM_ASSIGN_DEV_IRQ __IOW(GVMIO, 0x70, struct gvm_assigned_irq) #define GVM_REINJECT_CONTROL __IO(GVMIO, 0x71) #define GVM_SET_BOOT_CPU_ID __IO(GVMIO, 0x78) /* * ioctls for vcpu fds */ #define GVM_RUN __IO(GVMIO, 0x80) #define GVM_VCPU_MMAP __IO(GVMIO, 0x87) #define GVM_GET_REGS __IOR(GVMIO, 0x81, struct gvm_regs) #define GVM_SET_REGS __IOW(GVMIO, 0x82, struct gvm_regs) #define GVM_GET_SREGS __IOR(GVMIO, 0x83, struct gvm_sregs) #define GVM_SET_SREGS __IOW(GVMIO, 0x84, struct gvm_sregs) #define GVM_TRANSLATE __IOWR(GVMIO, 0x85, struct gvm_translation) #define GVM_INTERRUPT __IOW(GVMIO, 0x86, struct gvm_interrupt) #define GVM_GET_MSRS __IOWR(GVMIO, 0x88, struct gvm_msrs) #define GVM_SET_MSRS __IOW(GVMIO, 0x89, struct gvm_msrs) #define GVM_GET_FPU __IOR(GVMIO, 0x8c, struct gvm_fpu) #define GVM_SET_FPU __IOW(GVMIO, 0x8d, struct gvm_fpu) #define GVM_GET_LAPIC __IOR(GVMIO, 0x8e, struct gvm_lapic_state) #define GVM_SET_LAPIC __IOW(GVMIO, 0x8f, struct gvm_lapic_state) #define GVM_SET_CPUID __IOW(GVMIO, 0x90, struct gvm_cpuid) #define GVM_GET_CPUID __IOWR(GVMIO, 0x91, struct gvm_cpuid) /* Available with GVM_CAP_VAPIC */ #define GVM_TPR_ACCESS_REPORTING __IOWR(GVMIO, 0x92, struct gvm_tpr_access_ctl) /* Available with GVM_CAP_VAPIC */ #define GVM_SET_VAPIC_ADDR __IOW(GVMIO, 0x93, struct gvm_vapic_addr) #define GVM_GET_MP_STATE __IOR(GVMIO, 0x98, struct gvm_mp_state) #define GVM_SET_MP_STATE __IOW(GVMIO, 0x99, struct gvm_mp_state) /* Available with GVM_CAP_USER_NMI */ #define GVM_NMI __IO(GVMIO, 0x9a) /* Available with GVM_CAP_SET_GUEST_DEBUG */ #define GVM_SET_GUEST_DEBUG __IOW(GVMIO, 0x9b, struct gvm_guest_debug) /* Available with GVM_CAP_VCPU_EVENTS */ #define GVM_GET_VCPU_EVENTS __IOR(GVMIO, 0x9f, struct gvm_vcpu_events) #define GVM_SET_VCPU_EVENTS __IOW(GVMIO, 0xa0, struct gvm_vcpu_events) /* Available with GVM_CAP_DEBUGREGS */ #define GVM_GET_DEBUGREGS __IOR(GVMIO, 0xa1, struct gvm_debugregs) #define GVM_SET_DEBUGREGS __IOW(GVMIO, 0xa2, struct gvm_debugregs) /* * vcpu version available with GVM_ENABLE_CAP * vm version available with GVM_CAP_ENABLE_CAP_VM */ #define GVM_ENABLE_CAP __IOW(GVMIO, 0xa3, struct gvm_enable_cap) /* Available with GVM_CAP_XSAVE */ #define GVM_GET_XSAVE __IOR(GVMIO, 0xa4, struct gvm_xsave) #define GVM_SET_XSAVE __IOW(GVMIO, 0xa5, struct gvm_xsave) /* Available with GVM_CAP_XCRS */ #define GVM_GET_XCRS __IOR(GVMIO, 0xa6, struct gvm_xcrs) #define GVM_SET_XCRS __IOW(GVMIO, 0xa7, struct gvm_xcrs) /* Available with GVM_CAP_SW_TLB */ #define GVM_DIRTY_TLB __IOW(GVMIO, 0xaa, struct gvm_dirty_tlb) /* Available with GVM_CAP_X86_SMM */ #define GVM_SMI __IO(GVMIO, 0xb7) #define GVM_X2APIC_API_USE_32BIT_IDS (1ULL << 0) #define GVM_X2APIC_API_DISABLE_BROADCAST_QUIRK (1ULL << 1) #endif /*GVM_INTERFACE_H */ ================================================ FILE: gvm/gvm.c ================================================ #include "gvm.h" #include "../krnl386/kernel16_private.h" #include "wownt32.h" BOOL initflag; UINT8 *mem; #define KRNL386 "krnl386.exe16" BOOL is_single_step = FALSE; DWORD WINAPI panic_msgbox(LPVOID data) { MessageBoxA(NULL, (LPCSTR)data, "GVM Hypervisor error", MB_OK | MB_ICONERROR); HeapFree(GetProcessHeap(), 0, data); return 0; } #define PANIC_HRESULT(msg, hresult) panic_hresult(msg, hresult, __FUNCTION__, __LINE__) #ifdef _MSC_VER #define PANIC(msg, ...) panic("%s:%d\n" msg, __FUNCTION__, __LINE__, __VA_ARGS__) #else #define PANIC(msg, ...) panic("%s:%d\n" msg, __FUNCTION__, __LINE__ __VA_OPT__(,) __VA_ARGS__) #endif /* _Noreturn */ void panic(const char *msg, ...) { LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512); DWORD threadId; va_list arg; va_start(arg, msg); vsnprintf(buffer, 512, msg, arg); va_end(arg); HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId); WaitForSingleObject(hThread, INFINITE); ExitThread(1); return; } /* _Noreturn */ void panic_hresult(const char *msg, HRESULT result, const char *func, int line) { LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512); DWORD threadId; LPSTR err_str = NULL; FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, result, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&err_str, 0, NULL); snprintf(buffer, 512, "%s:%d\n%s HRESULT=%s(%08x)", func, line, msg, err_str, result); LocalFree(err_str); HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId); WaitForSingleObject(hThread, INFINITE); ExitThread(1); return; } static HMODULE krnl386 = 0; PVOID dynamic_setWOW32Reserved(PVOID w) { static PVOID(*setWOW32Reserved)(PVOID); if (!setWOW32Reserved) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); setWOW32Reserved = (PVOID(*)(PVOID))GetProcAddress(krnl386, "setWOW32Reserved"); } return setWOW32Reserved(w); } PVOID dynamic_getWOW32Reserved() { static PVOID(*getWOW32Reserved)(); if (!getWOW32Reserved) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); getWOW32Reserved = (PVOID(*)())GetProcAddress(krnl386, "getWOW32Reserved"); } return getWOW32Reserved(); } WINE_VM86_TEB_INFO *dynamic_getGdiTebBatch() { static WINE_VM86_TEB_INFO*(*getGdiTebBatch)(); if (!getGdiTebBatch) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); getGdiTebBatch = (WINE_VM86_TEB_INFO*(*)())GetProcAddress(krnl386, "getGdiTebBatch"); } return getGdiTebBatch(); } void dynamic__wine_call_int_handler(CONTEXT *context, BYTE intnum) { static void(*__wine_call_int_handler)(CONTEXT *context, BYTE intnum); if (!__wine_call_int_handler) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); __wine_call_int_handler = (void(*)(CONTEXT *context, BYTE intnum))GetProcAddress(krnl386, "__wine_call_int_handler"); } __wine_call_int_handler(context, intnum); } /*********************************************************************** * SELECTOR_SetEntries * * Set the LDT entries for an array of selectors. */ static BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags) { LDT_ENTRY entry; WORD i, count; wine_ldt_set_base(&entry, base); wine_ldt_set_limit(&entry, size - 1); wine_ldt_set_flags(&entry, flags); count = (size + 0xffff) / 0x10000; for (i = 0; i < count; i++) { if (wine_ldt_set_entry(sel + (i << 3), &entry) < 0) return FALSE; wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000); /* yep, Windows sets limit like that, not 64K sel units */ wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000); } return TRUE; } void wine_ldt_free_entries(unsigned short sel, int count); /*********************************************************************** * SELECTOR_AllocBlock * * Allocate selectors for a block of linear memory. */ WORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags) { WORD sel, count; if (!size) return 0; count = (size + 0xffff) / 0x10000; if ((sel = wine_ldt_alloc_entries(count))) { if (SELECTOR_SetEntries(sel, base, size, flags)) return sel; wine_ldt_free_entries(sel, count); sel = 0; } return sel; } __declspec(dllimport) LDT_ENTRY wine_ldt[8192]; LDT_ENTRY gdt[]; void load_seg(struct gvm_segment *segment, WORD sel) { const LDT_ENTRY *entry = (sel & 0x4 || (sel >> 3) >= 512) ? wine_ldt : gdt; segment->selector = sel; segment->base = (UINT64)wine_ldt_get_base(entry + (sel >> 3)); segment->limit = (UINT64)wine_ldt_get_limit(entry + (sel >> 3)); segment->type = entry[sel >> 3].HighWord.Bits.Type & 15; segment->s = entry[sel >> 3].HighWord.Bits.Type >> 4; segment->dpl = entry[sel >> 3].HighWord.Bits.Dpl; segment->present = entry[sel >> 3].HighWord.Bits.Pres; segment->avl = entry[sel >> 3].HighWord.Bits.Sys; segment->l = entry[sel >> 3].HighWord.Bits.Reserved_0; segment->db = entry[sel >> 3].HighWord.Bits.Default_Big; segment->g = entry[sel >> 3].HighWord.Bits.Granularity; } void set_eflags(struct gvm_vcpu_state *state, DWORD eflags) { *(uint32*)&state->regs.rflags = eflags | 2 | 0x3000 | (is_single_step ? 0x100 : 0) | 0x200; } void load_context_to_state(CONTEXT *context, vcpu_state *state) { load_seg(get_gs(state), (WORD)context->SegGs); load_seg(get_fs(state), (WORD)context->SegFs); load_seg(get_es(state), (WORD)context->SegEs); load_seg(get_ds(state), (WORD)context->SegDs); load_seg(get_cs(state), (WORD)context->SegCs); load_seg(get_ss(state), (WORD)context->SegSs); set_edi(state, context->Edi); set_esi(state, context->Esi); set_ebx(state, context->Ebx); set_edx(state, context->Edx); set_ecx(state, context->Ecx); set_eax(state, context->Eax); set_ebp(state, context->Ebp); set_eip(state, context->Eip); set_eflags(state, context->EFlags); set_esp(state, context->Esp); } void save_context_from_state(CONTEXT *context, vcpu_state *state) { context->SegGs = get_seg_selector(get_gs(state)); context->SegFs = get_seg_selector(get_fs(state)); context->SegEs = get_seg_selector(get_es(state)); context->SegDs = get_seg_selector(get_ds(state)); context->SegCs = get_seg_selector(get_cs(state)); context->SegSs = get_seg_selector(get_ss(state)); context->Edi = get_edi(state); context->Esi = get_esi(state); context->Ebx = get_ebx(state); context->Edx = get_edx(state); context->Ecx = get_ecx(state); context->Eax = get_eax(state); context->Ebp = get_ebp(state); context->Eip = get_eip(state); context->EFlags = get_eflags(state) & ~2; context->Esp = get_esp(state); dynamic_setWOW32Reserved((PVOID)(get_seg_selector(get_ss(state)) << 16 | get_sp(state))); } #include typedef enum { INT_GATE_TASK = 5, INT_GATE_INT16 = 6, INT_GATE_TRAP16 = 7, INT_GATE_INT32 = 0xE, INT_GATE_TRAP32 = 0xF, } interrupt_gate_type; typedef struct { WORD offset_low; WORD selector; BYTE reserved; union { struct { BYTE type : 4 /* INT_GATE_TASK */, S : 1, DPL : 2, P : 1; }; BYTE data; }; WORD offset_high; } interrupt_gate; _STATIC_ASSERT(sizeof(interrupt_gate) == 8); #include LPVOID trap_int; #ifdef _MSC_VER __declspec(align(4096)) #endif interrupt_gate idt[256]; #ifdef __GNUC__ __attribute__ ((aligned(4096))) #endif ; #ifdef _MSC_VER __declspec(align(4096)) #endif LDT_ENTRY gdt[512] = { 0 }; #ifdef __GNUC__ __attribute__ ((aligned(4096))) #endif ; WORD seg_cs; WORD seg_ds; typedef DWORD (*DOSVM_inport_t)(int port, int size); typedef void (*DOSVM_outport_t)(int port, int size, DWORD value); DOSVM_inport_t DOSVM_inport; DOSVM_outport_t DOSVM_outport; HANDLE inject_event; CRITICAL_SECTION inject_crit_section; typedef VOID (WINAPI *GetpWin16Lock_t)(SYSLEVEL **lock); GetpWin16Lock_t pGetpWin16Lock; SYSLEVEL *win16_syslevel; typedef BOOL(WINAPI *WOWCallback16Ex_t)(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); WOWCallback16Ex_t pWOWCallback16Ex; typedef BOOL (WINAPI *vm_inject_t)(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); __declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih); static CRITICAL_SECTION running_critical_section; static HANDLE hDevice; static HANDLE hVM; #ifdef _MSC_VER __declspec(thread) #elif defined(__GUNC__) __thread #else _Thread_local #endif HANDLE hVCPU; static void init_vcpu(); static HANDLE get_vcpu_handle() { if (!hVCPU) { init_vcpu(); } return hVCPU; } #ifdef _MSC_VER __declspec(thread) #elif defined(__GUNC__) __thread #else _Thread_local #endif struct gvm_run *gvm_run; static void get_vcpu_regs(vcpu_state *state) { if (!DeviceIoControl(get_vcpu_handle(), GVM_GET_REGS, NULL, 0, &state->regs, sizeof(state->regs), NULL, NULL)) { PANIC("GVM_GET_REGS"); return; } if (!DeviceIoControl(get_vcpu_handle(), GVM_GET_SREGS, NULL, 0, &state->sregs, sizeof(state->sregs), NULL, NULL)) { PANIC("GVM_GET_SREGS"); return; } } static void set_vcpu_regs(vcpu_state *state) { if (!DeviceIoControl(get_vcpu_handle(), GVM_SET_REGS, &state->regs, sizeof(state->regs), NULL, 0, NULL, NULL)) { PANIC("GVM_SET_REGS"); return; } if (!DeviceIoControl(get_vcpu_handle(), GVM_SET_SREGS, &state->sregs, sizeof(state->sregs), NULL, 0, NULL, NULL)) { PANIC("GVM_SET_SREGS"); return; } } unsigned long vcpu_id = 0; static void init_vcpu() { struct gvm_vcpu_state state; LONGLONG handle64; if (!DeviceIoControl(hVM, GVM_CREATE_VCPU, &vcpu_id, sizeof(vcpu_id), &handle64, sizeof(handle64), NULL, NULL)) { PANIC("failed to create vcpu"); return; } InterlockedAdd(&vcpu_id, 1); hVCPU = (HANDLE)handle64; if (!DeviceIoControl(get_vcpu_handle(), GVM_VCPU_MMAP, NULL, 0, &handle64, sizeof(handle64), NULL, NULL)) { PANIC("GVM_VCPU_MMAP"); return; } gvm_run = (struct gvm_run*)handle64; get_vcpu_regs(&state); /* setup initial states */ state.sregs.gdt.base = (UINT64)gdt; state.sregs.gdt.limit = 0x7ff; state.sregs.ldt.selector = 0x18; state.sregs.ldt.base = (UINT64)&wine_ldt[0]; state.sregs.ldt.limit = 65535; UINT32 *tss = (UINT32 *)gdt + 0x200; state.sregs.tr.selector = 0x18; state.sregs.tr.base = (UINT64)tss; state.sregs.tr.limit = 0x64; state.sregs.tr.type = 11; state.sregs.tr.present = 1; state.sregs.idt.limit = 0x8 * 256 - 1; state.sregs.idt.base = (SIZE_T)&idt[0]; state.sregs.cr0 |= 1; state.regs.rflags |= 0x200; set_vcpu_regs(&state); } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { if (fdwReason != DLL_THREAD_DETACH) { return TRUE; } if (hVCPU) { CloseHandle(hVCPU); hVCPU = NULL; gvm_run = NULL; } return TRUE; } BOOL init_vm86(BOOL vm86) { int type = 0; LONGLONG handle64; InitializeCriticalSection(&running_critical_section); #ifdef _MSC_VER __asm { mov seg_cs, cs mov seg_ds, ds } #else seg_cs = wine_get_cs(); seg_ds = wine_get_ds(); #endif hDevice = CreateFileA("\\\\.\\gvm", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (!hDevice) { PANIC("failed to open gvm"); return FALSE; } if (!DeviceIoControl(hDevice, GVM_CREATE_VM, &type, sizeof(type), &handle64, sizeof(handle64), NULL, NULL)) { PANIC("failed to create vm"); return FALSE; } hVM = (HANDLE)handle64; trap_int = VirtualAlloc(NULL, 0x10000, MEM_COMMIT, PAGE_READWRITE); DWORD trap_addr = (DWORD)trap_int; gdt[1].BaseLow = trap_addr & 0xffff; gdt[1].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff; gdt[1].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff; gdt[1].LimitLow = 0xffff; gdt[1].HighWord.Bytes.Flags1 = 0x9b; gdt[1].HighWord.Bytes.Flags2 = 0x40; gdt[2].BaseLow = trap_addr & 0xffff; gdt[2].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff; gdt[2].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff; gdt[2].LimitLow = 0xffff; gdt[2].HighWord.Bytes.Flags1 = 0x93; gdt[2].HighWord.Bytes.Flags2 = 0x40; GetThreadSelectorEntry(GetCurrentThread(), seg_cs, gdt + (seg_cs >> 3)); GetThreadSelectorEntry(GetCurrentThread(), seg_ds, gdt + (seg_ds >> 3)); UINT32 *tss = (UINT32 *)gdt + 0x200; tss[1] = 0x10000; // SP0 tss[2] = 0x10; // SS0 for (int i = 0; i < 256; i++) { idt[i].DPL = 3; idt[i].type = INT_GATE_INT32; idt[i].selector = 0x0b; idt[i].P = 1; idt[i].offset_low = i; idt[i].offset_high = 0; } memset(trap_int, 0xF4, 256); /* hlt */ ((char *)trap_int)[256] = 0xcf; /* iret */ if (!krnl386) krnl386 = LoadLibraryA(KRNL386); pWOWCallback16Ex = (WOWCallback16Ex_t)GetProcAddress(krnl386, "K32WOWCallback16Ex"); void(WINAPI *set_vm_inject_cb)(vm_inject_t) = (void(WINAPI *)(vm_inject_t))GetProcAddress(krnl386, "set_vm_inject_cb"); set_vm_inject_cb(vm_inject); inject_event = CreateEventW(NULL, TRUE, FALSE, NULL); InitializeCriticalSection(&inject_crit_section); pGetpWin16Lock = (GetpWin16Lock_t)GetProcAddress(krnl386, "GetpWin16Lock"); pGetpWin16Lock(&win16_syslevel); DOSVM_inport = (DOSVM_inport_t)GetProcAddress(krnl386, "DOSVM_inport"); DOSVM_outport = (DOSVM_outport_t)GetProcAddress(krnl386, "DOSVM_outport"); return TRUE; } void PUSH16(struct gvm_vcpu_state *state, WORD val) { if (state->sregs.ss.db) { *(uint32*)&state->regs.rsp -= 2; LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint32)state->regs.rsp); *stack = val; } else { *(uint16*)&state->regs.rsp -= 2; LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint16)state->regs.rsp); *stack = val; } } void PUSH32(struct gvm_vcpu_state *state, DWORD val) { if (state->sregs.ss.db) { *(uint32*)&state->regs.rsp -= 4; LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint32)state->regs.rsp); *stack = val; } else { *(uint16*)&state->regs.rsp -= 4; LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint16)state->regs.rsp); *stack = val; } } WORD POP16(struct gvm_vcpu_state *state) { if (state->sregs.ss.db) { LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint32)state->regs.rsp); *(uint32*)&state->regs.rsp += 2; return *stack; } else { LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint16)state->regs.rsp); *(uint16*)&state->regs.rsp += 2; return *stack; } } DWORD POP32(struct gvm_vcpu_state *state) { if (state->sregs.ss.db) { LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint32)state->regs.rsp); *(uint32*)&state->regs.rsp += 4; return *stack; } else { LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint16)state->regs.rsp); *(uint16*)&state->regs.rsp += 4; return *stack; } } WORD PEEK16(struct gvm_vcpu_state *state, int i) { if (state->sregs.ss.db) { LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint32)state->regs.rsp); return stack[i]; } else { LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint16)state->regs.rsp); return stack[i]; } } DWORD PEEK32(struct gvm_vcpu_state *state, int i) { if (state->sregs.ss.db) { LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint32)state->regs.rsp); return stack[i]; } else { LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint16)state->regs.rsp); return stack[i]; } } void relay(LPVOID relay_func, BOOL reg, vcpu_state *state, DWORD ret_addr, DWORD cbArgs, PEXCEPTION_HANDLER handler, DWORD old_frame16) { unsigned char *stack1 = (unsigned char*)(get_seg_base(get_ss(state))+ get_sp(state)); unsigned char *stack = stack1; /* * (sp+24) word first 16-bit arg * (sp+22) word cs * (sp+20) word ip * (sp+18) word bp * (sp+14) long 32-bit entry point (reused for Win16 mutex recursion count) * (sp+12) word ip of actual entry point (necessary for relay debugging) * (sp+8) long relay (argument conversion) function entry point * (sp+4) long cs of 16-bit entry point * (sp) long ip of 16-bit entry point */ DWORD ip = *(DWORD*)stack; stack += sizeof(DWORD); DWORD cs = *(DWORD*)stack; stack += sizeof(DWORD); DWORD relay = *(DWORD*)stack; stack += sizeof(DWORD); WORD ip2 = *(WORD*)stack; stack += sizeof(WORD); DWORD entry = *(DWORD*)stack; //for debug void *entryf = (void*)entry; stack += sizeof(DWORD); WORD bp = *(WORD*)stack; stack += sizeof(WORD); WORD ip19 = *(WORD*)stack; stack += sizeof(WORD); WORD cs16 = *(WORD*)stack; stack += sizeof(WORD); WORD *args = (WORD*)stack; set_eip(state, ip); load_seg(get_cs(state), (WORD)cs); #include /* 16-bit stack layout after __wine_call_from_16() */ typedef struct _STACK16FRAME { struct STACK32FRAME *frame32; /* 00 32-bit frame from last CallTo16() */ DWORD edx; /* 04 saved registers */ DWORD ecx; /* 08 */ DWORD ebp; /* 0c */ WORD ds; /* 10 */ WORD es; /* 12 */ WORD fs; /* 14 */ WORD gs; /* 16 */ DWORD callfrom_ip; /* 18 callfrom tail IP */ DWORD module_cs; /* 1c module code segment */ DWORD relay; /* 20 relay function address */ WORD entry_ip; /* 22 entry point IP */ DWORD entry_point; /* 26 API entry point to call, reused as mutex count */ WORD bp; /* 2a 16-bit stack frame chain */ WORD ip; /* 2c return address */ WORD cs; /* 2e */ } STACK16FRAME; #include CONTEXT context; STACK32FRAME dummy_stack32 = { 0 }; dummy_stack32.retaddr = ret_addr; dummy_stack32.nb_args = cbArgs; dummy_stack32.frame.Handler = handler; DWORD osp = get_esp(state); PUSH16(state, get_seg_selector(get_gs(state))); PUSH16(state, get_seg_selector(get_fs(state))); PUSH16(state, get_seg_selector(get_es(state))); PUSH16(state, get_seg_selector(get_ds(state))); PUSH32(state, get_ebp(state)); PUSH32(state, get_ecx(state)); PUSH32(state, get_edx(state)); PUSH32(state, osp); save_context_from_state(&context, state); STACK16FRAME *oa = (STACK16FRAME*)wine_ldt_get_ptr((WORD)context.SegSs, context.Esp); DWORD ooo = (WORD)context.Esp; int off = 0; if (reg) { context.Esp = osp + (SIZE_T)stack - (SIZE_T)stack1 - 4; off = ooo - context.Esp; context.Ebp = (context.Ebp & ~0xffff) | bp; context.Eip = ip19; context.SegCs = cs16; } int fret; LPVOID old; PCONTEXT pctx = NULL; #if _MSC_VER __asm { mov old, esp push cbArgs push old /* target(esp) */ push retaddr /* retaddr */ push ebp push ebx push esi push edi push old_frame16 /* frame16 */ /* set up exception handler */ push handler mov eax, fs:[0] push eax mov dummy_stack32.frame.Next, eax mov fs : [0], esp push cs push 0 mov eax, [oa] mov[eax], esp lea eax, [context] push eax push args push entry call relay_func add esp, 12 + 8 mov fret, eax pop dword ptr fs : [0] pop eax jmp skip retaddr : mov pctx, ecx skip: mov esp, old } #else fret = ((int(*)(void *entry_point, unsigned char *args16, CONTEXT *context))relay_func)((void*)entry, (unsigned char*)args, &context); #endif if (!reg) { set_eax(state, fret); } if (pctx) { /* Throw16 */ context = *pctx; reg = TRUE; } if (!reg) { set_eax(state, fret); context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF; context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF; oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp); } else { oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp + off); } if (reg) set_eax(state, (DWORD)context.Eax); set_ecx(state, reg ? (DWORD)context.Ecx : (DWORD)oa->ecx); if (reg) set_edx(state, (DWORD)context.Edx); else set_edx(state, (DWORD)oa->edx); set_ebx(state, (DWORD)context.Ebx); set_esp(state, (DWORD)context.Esp); set_ebp(state, (DWORD)context.Ebp); set_esi(state, (DWORD)context.Esi); set_edi(state, (DWORD)context.Edi); load_seg(get_es(state), reg ? (WORD)context.SegEs : (WORD)oa->es); load_seg(get_ss(state), (WORD)context.SegSs); load_seg(get_ds(state), reg ? (WORD)context.SegDs : (WORD)oa->ds); //ES, CS, SS, DS, FS, GS /* Some programs expect that gs is not a valid selector! */ /* Some programs expect that fs is not a valid selector! */ /* win16 sets 0? */ load_seg(get_fs(state), 0); load_seg(get_gs(state), 0); if (reg) { if (!(ip19 != context.Eip || cs16 != context.SegCs)) { context.Eip = oa->callfrom_ip; context.SegCs = oa->module_cs; } else { /* CS:IP changed! */ context.Eip = context.Eip; } set_esp(state, context.Esp); set_ebp(state, context.Ebp); } else { set_sp(state, context.Esp + 0x2c); set_bp(state, bp); } set_eflags(state, context.EFlags); set_eip(state, context.Eip); load_seg(get_cs(state), (WORD)context.SegCs); } LPBYTE get_base_addr(WORD sel) { return wine_ldt_get_base(wine_ldt + (sel >> 3)); } typedef int disassemble_debug_t(char *buffer, UINT8 *oprom, BOOL op_size, UINT64 eip); static disassemble_debug_t *disassemble_debug; static void trace(vcpu_state *state, uint16 cs, uint32 eip, uint16 ss, uint32 esp, uint32 eflags) { char buf[512]; UINT8 *d = get_base_addr(cs) + eip; if (!disassemble_debug) { disassemble_debug = (disassemble_debug_t*)GetProcAddress(LoadLibraryA("vm86.dll"), "disassemble_debug"); } int len = disassemble_debug(buf, d, (wine_ldt_get_flags(wine_ldt + (cs >> 3)) & WINE_LDT_FLAGS_32BIT) == WINE_LDT_FLAGS_32BIT, eip); int i; fprintf(stderr, "%04x:%04x\t", cs, eip); for (i = 0; i < len; i++) { fprintf(stderr, "%02x", d[i]); } fprintf(stderr, "\t%s\n", buf); eflags &= ~2; eflags &= ~0x100; if (get_seg_selector(get_fs(state)) || get_seg_selector(get_gs(state))) { fprintf(stderr, "EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X," "ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X," "ES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04x,GS:%04x," "IP:%04X,stack:%08X," "EFLAGS:%08X" "\n", get_eax(state), get_ecx(state), get_edx(state), get_ebx(state), esp, get_ebp(state), get_esi(state), get_edi(state), 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)), eip, *(LPDWORD)(get_base_addr(ss) + esp), eflags ); } else { fprintf(stderr, "EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X," "ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X," "ES:%04X,CS:%04X,SS:%04X,DS:%04X," "IP:%04X,stack:%08X," "EFLAGS:%08X" "\n", get_eax(state), get_ecx(state), get_edx(state), get_ebx(state), esp, get_ebp(state), get_esi(state), get_edi(state), get_seg_selector(get_es(state)), cs, ss, get_seg_selector(get_ds(state)), eip, *(LPDWORD)(get_base_addr(ss) + esp), eflags ); } } BOOL has_x86_exception_err(WORD num) { switch (num) { case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7: return FALSE; case 8: return TRUE; case 9: return FALSE; case 10:case 11:case 12:case 13:case 14: return TRUE; case 15:case 16: return FALSE; case 17: return TRUE; case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29: return FALSE; case 30: return TRUE; case 31: return FALSE; } return FALSE; } volatile struct { BOOL inject; DWORD vpfn16; DWORD dwFlags; DWORD cbArgs; LPVOID pArgs; LPDWORD pdwRetCode; } vm_inject_state; BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode) { /* FIXME */ return TRUE; } void vm_inject_call(SEGPTR ret_addr, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, pm_interrupt_handler pih, CONTEXT *context) { DWORD ret; EnterCriticalSection(&inject_crit_section); static char intstack[4096]; static WORD intstksel = 0; if (!intstksel) intstksel = SELECTOR_AllocBlock(intstack, 4096, WINE_LDT_FLAGS_DATA); WORD sp = context->Esp; DWORD ss_base = get_base_addr(context->SegSs); if (wine_ldt_get_flags(wine_ldt + (context->SegSs >> 3)) & WINE_LDT_FLAGS_32BIT) // don't call int handler on a large stack { ss_base = (DWORD)intstack; sp = 4096; dynamic_setWOW32Reserved((PVOID)MAKESEGPTR(intstksel, 4096)); } { char *stack = ss_base + sp - vm_inject_state.cbArgs; vm_inject_state.inject = FALSE; memcpy(stack, vm_inject_state.pArgs, vm_inject_state.cbArgs); /* push return address */ stack -= sizeof(SEGPTR); *((SEGPTR *)stack) = ret_addr; vm_inject_state.cbArgs += sizeof(SEGPTR); } LeaveCriticalSection(&inject_crit_section); 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); if (vm_inject_state.pdwRetCode) *vm_inject_state.pdwRetCode = ret; SetEvent(inject_event); } BOOL syscall_init = FALSE; static int compare(const void *a1, const void *a2) { SIZE_T lhs = *(const SIZE_T*)a1; SIZE_T rhs = *(const SIZE_T*)a2; if (lhs == rhs) return 0; if (lhs < rhs) return -1; return 1; } void vm86main(CONTEXT *context, DWORD csip, DWORD sssp, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, pm_interrupt_handler pih ) { DWORD old_frame16 = PtrToUlong(dynamic_getWOW32Reserved()); EnterCriticalSection(&running_critical_section); if (!syscall_init) { 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 }; int i; SIZE_T map_addr = 0x000; qsort((void*)pages, sizeof(pages) / sizeof(pages[0]), sizeof(pages[0]), compare); for (i = 0; i < sizeof(pages) / sizeof(pages[0]); i++) { SIZE_T len = pages[i] - map_addr; struct gvm_userspace_memory_region mem; if (pages[i] > map_addr) { mem.slot = i; mem.guest_phys_addr = map_addr; mem.userspace_addr = map_addr; mem.memory_size = len; mem.flags = 0; if (!DeviceIoControl(hVM, GVM_SET_USER_MEMORY_REGION, &mem, sizeof(mem), NULL, 0, NULL, NULL)) { PANIC("GVM_SET_USER_MEMORY_REGION"); return; } } map_addr = pages[i] + 4096; } syscall_init = TRUE; } is_single_step = dasm; DWORD ret_addr; vcpu_state state; { get_vcpu_regs(&state); load_seg(get_gs(&state), (WORD)0); load_seg(get_fs(&state), (WORD)0); if (!csip) { load_seg(get_es(&state), (WORD)context->SegEs); load_seg(get_ds(&state), (WORD)context->SegDs); load_seg(get_cs(&state), (WORD)context->SegCs); load_seg(get_ss(&state), (WORD)context->SegSs); set_edi(&state, context->Edi); set_esi(&state, context->Esi); set_ebx(&state, context->Ebx); set_edx(&state, context->Edx); set_ecx(&state, context->Ecx); set_eax(&state, context->Eax); set_ebp(&state, context->Ebp); set_eip(&state, context->Eip); set_eflags(&state, context->EFlags); set_esp(&state, context->Esp - cbArgs); } else { load_seg(get_cs(&state), (WORD)SELECTOROF(csip)); load_seg(get_ss(&state), (WORD)SELECTOROF(sssp)); set_eip(&state, OFFSETOF(csip)); set_esp(&state, OFFSETOF(sssp) - cbArgs); } set_vcpu_regs(&state); unsigned char *stack = (unsigned char*)get_seg_base(get_ss(&state))+ get_esp(&state); ret_addr = (*(LPDWORD)stack); } vcpu_state state2 = state; if (is_single_step) { trace(&state2, get_seg_selector(get_cs(&state2)), get_eip(&state2), get_seg_selector(get_ss(&state2)), get_esp(&state2), get_eflags(&state2)); } while (TRUE) { if (get_seg_selector(get_cs(&state2)) == (ret_addr >> 16) && get_ip(&state2) == (ret_addr & 0xFFFF)) { set_vcpu_regs(&state2); break; } if (!DeviceIoControl(get_vcpu_handle(), GVM_RUN, NULL, 0, NULL, 0, NULL, NULL)) { LeaveCriticalSection(&running_critical_section); PANIC("GVM_RUN"); return; } get_vcpu_regs(&state2); UINT32 ptr = get_seg_base(get_cs(&state2)) + get_eip(&state2); /* TODO: PIO */ switch (gvm_run->exit_reason) { case GVM_EXIT_INTERNAL_ERROR: case GVM_EXIT_HLT: if (((DWORD)ptr >= (DWORD)trap_int) && ((DWORD)ptr <= ((DWORD)trap_int + 256))) { int intvec = ((DWORD)ptr & 0xff) - 1; BOOL has_err = has_x86_exception_err(intvec); DWORD err = has_err ? PEEK32(&state2, 0) : 0; DWORD eip = PEEK32(&state2, (has_err ? 1 : 0) + 0); DWORD cs = PEEK32(&state2, (has_err ? 1 : 0) + 1); DWORD flags = PEEK32(&state2, (has_err ? 1 : 0) + 2); DWORD old_esp = PEEK32(&state2, (has_err ? 1 : 0) + 3); DWORD old_ss = PEEK32(&state2, (has_err ? 1 : 0) + 4); if (intvec == 6 /* #UD??????? */ && cs == (ret_addr >> 16) && eip == (ret_addr & 0xFFFF) || eip == from16_reg || eip == __wine_call_from_16) { if (has_err) { err = POP32(&state2); } DWORD eip = POP32(&state2); DWORD cs = POP32(&state2); DWORD eflags = POP32(&state2); DWORD esp = POP32(&state2); DWORD ss = POP32(&state2); load_seg(get_cs(&state2), (WORD)cs); set_eip(&state2, eip); load_seg(get_ss(&state2), (WORD)ss); set_esp(&state2, esp); set_eflags(&state2, flags); ptr = get_seg_base(get_cs(&state2)) + get_eip(&state2); if (get_seg_selector(get_cs(&state2)) == (ret_addr >> 16) && get_ip(&state2) == (ret_addr & 0xFFFF)) { set_vcpu_regs(&state2); break; } if (ptr == from16_reg || ptr == __wine_call_from_16) { LeaveCriticalSection(&running_critical_section); relay(relay_call_from_16, ptr == from16_reg, &state2, ret_addr, cbArgs, handler, old_frame16); EnterCriticalSection(&running_critical_section); } else { PANIC(""); } set_vcpu_regs(&state2); break; } const char *name = NULL; switch (intvec) { case 0: name = "#DE"; break; case 2: name = "int 2h"; break; case 4: name = "#OF"; break; case 6: name = "#UD"; break; case 7: name = "#NM"; break; case 8: name = "#DF"; break; case 10: name = "#TS"; break; case 11: name = "#NP"; break; case 12: name = "#SS"; break; case 13: name = "#GP"; break; case 14: name = "#PF"; break; } set_eip(&state2, 256); if (name) { DWORD cpusig[4]; #ifdef _MSC_VER __cpuid(cpusig, 0); #else __cpuid(0, cpusig[0], cpusig[1], cpusig[2], cpusig[3]); #endif fprintf(stderr, "cpu type %x %x %x %x\n", cpusig[0], cpusig[1], cpusig[2], cpusig[3]); trace(&state2, cs, eip, (WORD)old_ss, old_esp, flags); PANIC("exception %s", name); } else { DWORD eip = POP32(&state2); DWORD cs = POP32(&state2); DWORD eflags = POP32(&state2); DWORD esp = POP32(&state2); DWORD ss = POP32(&state2); load_seg(get_cs(&state2), (WORD)cs); set_eip(&state2, eip); load_seg(get_ss(&state2), (WORD)ss); set_esp(&state2, esp); CONTEXT ctx; save_context_from_state(&ctx, &state2); set_vcpu_regs(&state2); LeaveCriticalSection(&running_critical_section); dynamic__wine_call_int_handler(&ctx, intvec); EnterCriticalSection(&running_critical_section); load_context_to_state(&ctx, &state2); set_vcpu_regs(&state2); } } break; default: PANIC("%d", gvm_run->exit_reason); break; } } save_context_from_state(context, &state2); LeaveCriticalSection(&running_critical_section); } __declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih) { mem = vm86 ? (UINT8*)memory_base : NULL; if (!initflag) initflag = init_vm86(vm86); CONTEXT context = { 0 }; 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); return (context.Eax & 0xffff) | context.Edx << 16; } __declspec(dllexport) void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih ) { mem = vm86 ? (UINT8*)memory_base : NULL; if (!initflag) initflag = init_vm86(vm86); vm86main(context, 0, 0, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih); } ================================================ FILE: gvm/gvm.def ================================================ ================================================ FILE: gvm/gvm.h ================================================ #pragma once #include #include "gvm-interface.h" #include #include struct gvm_vcpu_state { struct gvm_regs regs; struct gvm_sregs sregs; }; typedef UINT16 uint16; typedef UINT32 uint32; typedef UINT64 uint64; /* register utils */ typedef struct gvm_vcpu_state vcpu_state; typedef struct gvm_segment segment; /* 16-bit regs */ static inline uint16 get_ax(vcpu_state *state) { return (uint16)state->regs.rax; } static inline uint16 get_cx(vcpu_state *state) { return (uint16)state->regs.rcx; } static inline uint16 get_dx(vcpu_state *state) { return (uint16)state->regs.rdx; } static inline uint16 get_bx(vcpu_state *state) { return (uint16)state->regs.rbx; } static inline uint16 get_sp(vcpu_state *state) { return (uint16)state->regs.rsp; } static inline uint16 get_bp(vcpu_state *state) { return (uint16)state->regs.rbp; } static inline uint16 get_si(vcpu_state *state) { return (uint16)state->regs.rsi; } static inline uint16 get_di(vcpu_state *state) { return (uint16)state->regs.rdi; } static inline uint16 get_ip(vcpu_state *state) { return (uint16)state->regs.rip; } static inline uint16 get_flags(vcpu_state *state) { return (uint16)state->regs.rflags; } static inline uint16 set_ax(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rax = val; } static inline uint16 set_cx(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rcx = val; } static inline uint16 set_dx(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rdx = val; } static inline uint16 set_bx(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rbx = val; } static inline uint16 set_sp(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rsp = val; } static inline uint16 set_bp(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rbp = val; } static inline uint16 set_si(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rsi = val; } static inline uint16 set_di(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rdi = val; } static inline uint16 set_ip(vcpu_state *state, uint16 val) { return *(uint16*)&state->regs.rip = val; } static inline segment *get_es(vcpu_state *state) { return &state->sregs.es; } static inline segment *get_cs(vcpu_state *state) { return &state->sregs.cs; } static inline segment *get_ss(vcpu_state *state) { return &state->sregs.ss; } static inline segment *get_ds(vcpu_state *state) { return &state->sregs.ds; } static inline segment *get_fs(vcpu_state *state) { return &state->sregs.fs; } static inline segment *get_gs(vcpu_state *state) { return &state->sregs.gs; } static inline uint16 get_seg_selector(segment *seg) { return seg->selector; } static inline uint32 get_seg_base(segment *seg) { return (uint32)seg->base; } static inline uint32 get_seg_limit(segment *seg) { return seg->limit; } /* 32-bit regs */ static inline uint32 get_eax(vcpu_state *state) { return (uint32)state->regs.rax; } static inline uint32 get_ecx(vcpu_state *state) { return (uint32)state->regs.rcx; } static inline uint32 get_edx(vcpu_state *state) { return (uint32)state->regs.rdx; } static inline uint32 get_ebx(vcpu_state *state) { return (uint32)state->regs.rbx; } static inline uint32 get_esp(vcpu_state *state) { return (uint32)state->regs.rsp; } static inline uint32 get_ebp(vcpu_state *state) { return (uint32)state->regs.rbp; } static inline uint32 get_esi(vcpu_state *state) { return (uint32)state->regs.rsi; } static inline uint32 get_edi(vcpu_state *state) { return (uint32)state->regs.rdi; } static inline uint32 get_eip(vcpu_state *state) { return (uint32)state->regs.rip; } static inline uint32 get_eflags(vcpu_state *state) { return (uint32)state->regs.rflags; } static inline uint32 set_eax(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rax = val; } static inline uint32 set_ecx(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rcx = val; } static inline uint32 set_edx(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rdx = val; } static inline uint32 set_ebx(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rbx = val; } static inline uint32 set_esp(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rsp = val; } static inline uint32 set_ebp(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rbp = val; } static inline uint32 set_esi(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rsi = val; } static inline uint32 set_edi(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rdi = val; } static inline uint32 set_eip(vcpu_state *state, uint32 val) { return *(uint32*)&state->regs.rip = val; } ================================================ FILE: gvm/gvm.vcxproj ================================================ Debug Win32 Release Win32 15.0 Win32Proj gvm 10.0.17134.0 {258FD007-046D-4625-BB5A-B7934B71934F} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode false true NotUsing Level3 MaxSpeed true true true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true true true $(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) gvm.def NotUsing Level3 Disabled true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true $(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) gvm.def ================================================ FILE: gvm/gvm.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;ipp;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ヘッダー ファイル ヘッダー ファイル ソース ファイル ソース ファイル ================================================ FILE: haxmvm/CMakeLists.txt ================================================ add_library(haxmvm SHARED haxmvm.c) include_directories(../wine) add_definitions(-D__i386__ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN=) target_link_libraries(haxmvm libwine) set_target_properties(haxmvm PROPERTIES PREFIX "") ================================================ FILE: haxmvm/haxmvm.c ================================================ #include "haxmvm.h" #include "../krnl386/kernel16_private.h" BOOL initflag; UINT8 *mem; #define KRNL386 "krnl386.exe16" BOOL is_single_step = FALSE; DWORD WINAPI panic_msgbox(LPVOID data) { MessageBoxA(NULL, (LPCSTR)data, "Hypervisor error", MB_OK | MB_ICONERROR); HeapFree(GetProcessHeap(), 0, data); return 0; } void haxmvm_panic(const char *fmt, ...) { LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512); DWORD threadId; va_list arg; va_start(arg, fmt); vsnprintf(buffer, 512, fmt, arg); va_end(arg); buffer[512 - 1] = '\0'; HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId); WaitForSingleObject(hThread, INFINITE); ExitThread(1); } PVOID dynamic_setWOW32Reserved(PVOID w) { static PVOID(*setWOW32Reserved)(PVOID); if (!setWOW32Reserved) { HMODULE krnl386 = LoadLibraryA(KRNL386); setWOW32Reserved = (PVOID(*)(PVOID))GetProcAddress(krnl386, "setWOW32Reserved"); } return setWOW32Reserved(w); } PVOID dynamic_getWOW32Reserved() { static PVOID(*getWOW32Reserved)(); if (!getWOW32Reserved) { HMODULE krnl386 = LoadLibraryA(KRNL386); getWOW32Reserved = (PVOID(*)())GetProcAddress(krnl386, "getWOW32Reserved"); } return getWOW32Reserved(); } WINE_VM86_TEB_INFO *dynamic_getGdiTebBatch() { static WINE_VM86_TEB_INFO*(*getGdiTebBatch)(); if (!getGdiTebBatch) { HMODULE krnl386 = LoadLibraryA(KRNL386); getGdiTebBatch = (WINE_VM86_TEB_INFO*(*)())GetProcAddress(krnl386, "getGdiTebBatch"); } return getGdiTebBatch(); } void dynamic__wine_call_int_handler(CONTEXT *context, BYTE intnum) { static void(*__wine_call_int_handler)(CONTEXT *context, BYTE intnum); if (!__wine_call_int_handler) { HMODULE krnl386 = LoadLibraryA(KRNL386); __wine_call_int_handler = (void(*)(CONTEXT *context, BYTE intnum))GetProcAddress(krnl386, "__wine_call_int_handler"); } __wine_call_int_handler(context, intnum); } /*********************************************************************** * SELECTOR_SetEntries * * Set the LDT entries for an array of selectors. */ static BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags) { LDT_ENTRY entry; WORD i, count; wine_ldt_set_base(&entry, base); wine_ldt_set_limit(&entry, size - 1); wine_ldt_set_flags(&entry, flags); count = (size + 0xffff) / 0x10000; for (i = 0; i < count; i++) { if (wine_ldt_set_entry(sel + (i << 3), &entry) < 0) return FALSE; wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000); /* yep, Windows sets limit like that, not 64K sel units */ wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000); } return TRUE; } void wine_ldt_free_entries(unsigned short sel, int count); /*********************************************************************** * SELECTOR_AllocBlock * * Allocate selectors for a block of linear memory. */ WORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags) { WORD sel, count; if (!size) return 0; count = (size + 0xffff) / 0x10000; if ((sel = wine_ldt_alloc_entries(count))) { if (SELECTOR_SetEntries(sel, base, size, flags)) return sel; wine_ldt_free_entries(sel, count); sel = 0; } return sel; } __declspec(dllimport) LDT_ENTRY wine_ldt[8192]; HANDLE hSystem; HANDLE hVM; HANDLE hVCPU; struct hax_tunnel *tunnel; // 2MB is enough for 0x00000000-0x7fffffff plus 1 page for the pagedir #ifdef _MSC_VER __declspec(align(4096)) #endif DWORD #ifdef __GNUC__ __attribute__ ((aligned(4096))) #endif guestpt[0x80400] = {0} ; LDT_ENTRY gdt[]; void load_seg(segment_desc_t *segment, WORD sel) { const LDT_ENTRY *entry = (sel & 0x4 || (sel >> 3) >= 512) ? wine_ldt : gdt; segment->selector = sel; segment->base = (uint64)wine_ldt_get_base(entry + (sel >> 3)); segment->limit = (uint64)wine_ldt_get_limit(entry + (sel >> 3)); segment->type = entry[sel >> 3].HighWord.Bits.Type; segment->present = entry[sel >> 3].HighWord.Bits.Pres; segment->operand_size = entry[sel >> 3].HighWord.Bits.Default_Big; segment->dpl = entry[sel >> 3].HighWord.Bits.Dpl; segment->granularity = entry[sel >> 3].HighWord.Bits.Granularity; segment->null = 0; segment->desc = entry[sel >> 3].HighWord.Bits.Type >> 4; if (!sel || !segment->type || !segment->present) segment->ar = 0; } void set_eflags(struct vcpu_state_t *state, DWORD eflags) { state->_eflags = eflags | 2 | 0x3000 | (is_single_step ? 0x100 : 0); } void load_context_to_state(CONTEXT *context, struct vcpu_state_t *state) { DWORD bytes; load_seg(&state->_gs, (WORD)context->SegGs); load_seg(&state->_fs, (WORD)context->SegFs); load_seg(&state->_es, (WORD)context->SegEs); load_seg(&state->_ds, (WORD)context->SegDs); load_seg(&state->_cs, (WORD)context->SegCs); load_seg(&state->_ss, (WORD)context->SegSs); state->_edi = context->Edi; state->_esi = context->Esi; state->_ebx = context->Ebx; state->_edx = context->Edx; state->_ecx = context->Ecx; state->_eax = context->Eax; state->_ebp = context->Ebp; state->_eip = context->Eip; set_eflags(state, context->EFlags); state->_esp = context->Esp; } void load_context(CONTEXT *context) { DWORD bytes; struct vcpu_state_t state; if (!DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL)) return; load_seg(&state._gs, (WORD)context->SegGs); load_seg(&state._fs, (WORD)context->SegFs); load_seg(&state._es, (WORD)context->SegEs); load_seg(&state._ds, (WORD)context->SegDs); load_seg(&state._cs, (WORD)context->SegCs); load_seg(&state._ss, (WORD)context->SegSs); state._edi = context->Edi; state._esi = context->Esi; state._ebx = context->Ebx; state._edx = context->Edx; state._ecx = context->Ecx; state._eax = context->Eax; state._ebp = context->Ebp; state._eip = context->Eip; set_eflags(&state, context->EFlags); state._esp = context->Esp; if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state, sizeof(state), NULL, 0, &bytes, NULL)) return; } void save_context_from_state(CONTEXT *context, struct vcpu_state_t *state) { context->SegGs = state->_gs.selector; context->SegFs = state->_fs.selector; context->SegEs = state->_es.selector; context->SegDs = state->_ds.selector; context->SegCs = state->_cs.selector; context->SegSs = state->_ss.selector; context->Edi = state->_edi; context->Esi = state->_esi; context->Ebx = state->_ebx; context->Edx = state->_edx; context->Ecx = state->_ecx; context->Eax = state->_eax; context->Ebp = state->_ebp; context->Eip = state->_eip; context->EFlags = state->_eflags & ~2; context->Esp = state->_esp; dynamic_setWOW32Reserved((PVOID)(state->_ss.selector << 16 | state->_sp)); } void save_context(CONTEXT *context) { DWORD bytes; struct vcpu_state_t state; if (!DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL)) return; save_context_from_state(context, &state); context->EFlags &= ~0x200; } #include typedef enum { INT_GATE_TASK = 5, INT_GATE_INT16 = 6, INT_GATE_TRAP16 = 7, INT_GATE_INT32 = 0xE, INT_GATE_TRAP32 = 0xF, } interrupt_gate_type; typedef struct { WORD offset_low; WORD selector; BYTE reserved; union { struct { BYTE type : 4 /* INT_GATE_TASK */, S : 1, DPL : 2, P : 1; }; BYTE data; }; WORD offset_high; } interrupt_gate; _STATIC_ASSERT(sizeof(interrupt_gate) == 8); #include #define HAXMVM_STR2(s) #s #define HAXMVM_STR(s) HAXMVM_STR2(s) #ifdef _MSC_VER #define HAXMVM_ERR fprintf(stderr, __FUNCTION__ "(" HAXMVM_STR(__LINE__) ") HAXM err.\n"); #define HAXMVM_ERRF(fmt, ...) fprintf(stderr, __FUNCTION__ "(" HAXMVM_STR(__LINE__) ") " fmt "\n", __VA_ARGS__); #else #define HAXMVM_ERR fprintf(stderr, "%s(" HAXMVM_STR(__LINE__) ") HAXM err.\n", __FUNCTION__); #define HAXMVM_ERRF(fmt, ...) fprintf(stderr, "%s(" HAXMVM_STR(__LINE__) ") " fmt "\n", __FUNCTION__, ##__VA_ARGS__); #endif LPVOID trap_int; #ifdef _MSC_VER __declspec(align(4096)) #endif interrupt_gate idt[256]; #ifdef __GNUC__ __attribute__ ((aligned(4096))) #endif ; #ifdef _MSC_VER __declspec(align(4096)) #endif LDT_ENTRY gdt[512] = { 0 }; #ifdef __GNUC__ __attribute__ ((aligned(4096))) #endif ; WORD seg_cs; WORD seg_ds; static BOOL set_ram(struct hax_set_ram_info *pram) { DWORD bytes; struct hax_set_ram_info ram = *pram; ram.flags = HAX_RAM_INFO_STANDALONE; if (!DeviceIoControl(hVM, HAX_VM_IOCTL_SET_RAM, &ram, sizeof(struct hax_set_ram_info), NULL, 0, &bytes, NULL)) return FALSE; DWORD physaddr = ram.pa_start / 4096; for (DWORD i = 0; i < (ram.size / 4096); i++) { DWORD pte = physaddr + i; guestpt[pte] = (pte << 12) | 7; } return TRUE; } #define dprintf(...) //fprintf(stderr, __VA_ARGS__) static CRITICAL_SECTION crst; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &crst, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": crst") } }; static CRITICAL_SECTION crst = { &critsect_debug, -1, 0, 0, 0, 0 }; void alloc_ram(uint32_t addr, uint32_t size) { MEMORY_BASIC_INFORMATION mbi; struct hax_set_ram_info ram = { 0 }; BOOL protect = 0; DWORD old = 0; ram.pa_start = addr; ram.size = size; ram.va = addr; if (VirtualQuery(ram.va, &mbi, sizeof(MEMORY_BASIC_INFORMATION))) { if (!(mbi.Protect & PAGE_EXECUTE_READWRITE) && !(mbi.Protect & PAGE_READWRITE)) { protect = VirtualProtect(ram.va, 4096, PAGE_EXECUTE_READWRITE, &old); } } dprintf("alloc = %08x\n", ram.va); if (!set_ram(&ram)) { HAXMVM_ERRF("SET_RAM"); } if (protect && 0) { VirtualProtect(ram.va, 4096, old, &old); } } static void intel_vt_x_workaround_update_entry(int sel, const LDT_ENTRY *entry) { DWORD bytes; uint32 start = ((uint32)wine_ldt_get_base(entry) & ~0xfff); uint32 size = 0; EnterCriticalSection(&crst); for (uint32 i = start; i <= ((uint32)wine_ldt_get_base(entry) + wine_ldt_get_limit(entry)); i += 4096) { if (!i || guestpt[i / 4096]) { continue; } alloc_ram(i, 4096); } LeaveCriticalSection(&crst); } /* * WOW64 syscall entry: * B8 XX XX XX XX mov eax,XXXXX * BA XX XX XX XX mov edx,_Wow64SystemServiceCall@0 * FF D2 call edx * C2 XX XX ret xx * 90 nop */ #include struct wow64_syscall { BYTE mov_eax; DWORD num; BYTE mov_edx; DWORD Wow64SystemServiceCall; WORD call_edx; BYTE ret; WORD ret_n; BYTE nop; }; struct hooked_syscall { BYTE jmp_rel; DWORD address; }; #include BOOL hook_nt_syscall(struct wow64_syscall **old_syscall, LPVOID hook_func, LPCSTR hook_dll, LPCSTR hook_func_name) { HMODULE dll = GetModuleHandleA(hook_dll); LPVOID func = (LPVOID)GetProcAddress(dll, hook_func_name); struct wow64_syscall *syscall = (struct wow64_syscall*)func; MEMORY_BASIC_INFORMATION mbi; DWORD old; if (!func) { return FALSE; } if (syscall->mov_eax != 0xb8 || syscall->mov_edx != 0xba || syscall->call_edx != 0xd2ff || syscall->ret != 0xc2 || syscall->nop != 0x90) { return FALSE; } if (!VirtualQuery(syscall, &mbi, sizeof(mbi))) { return FALSE; } VirtualProtect(mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &old); *old_syscall = VirtualAlloc(NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE); **old_syscall = *syscall; ((struct hooked_syscall*)syscall)->jmp_rel = 0xe9; ((struct hooked_syscall*)syscall)->address = (char*)hook_func - (char*)(&((struct hooked_syscall*)syscall)->address + 1); VirtualProtect(mbi.BaseAddress, mbi.RegionSize, old, &old); return TRUE; } static void discard_memory(PVOID BaseAddress, ULONG RegionSize) { DWORD physaddr = (DWORD)BaseAddress / 4096; for (DWORD i = 0; i < (RegionSize / 4096); i++) { DWORD pte = physaddr + i; if (sizeof(guestpt) / sizeof(guestpt[0]) <= pte) *(int*)0 = 0; if (guestpt[pte]) { struct hax_set_ram_info ram = { pte * 4096, 4096, HAX_RAM_INFO_INVALID }; if (!DeviceIoControl(hVM, HAX_VM_IOCTL_SET_RAM, &ram, sizeof(ram), NULL, 0, NULL, NULL)) { HAXMVM_ERRF("Failed to discard memory %p", pte); } guestpt[pte] = 0; } } } struct wow64_syscall *old_NtFreeVirtualMemory; NTSTATUS NTAPI hook_NtFreeVirtualMemory(HANDLE ProcessHandle, PVOID *BaseAddress, PULONG RegionSize, ULONG FreeType) { NTSTATUS result = ((NTSTATUS(NTAPI*)(HANDLE, PVOID*, PULONG, ULONG))old_NtFreeVirtualMemory)(ProcessHandle, BaseAddress, RegionSize, FreeType); if (NT_SUCCESS(result)) { discard_memory(*BaseAddress, *RegionSize); } return result; } __declspec(dllexport) BOOL haxmvm_DeleteObject(HANDLE hobj) { DIBSECTION dib; BOOL discard = FALSE; MEMORY_BASIC_INFORMATION mbi; BOOL result; if (GetObjectType(hobj) == OBJ_BITMAP && GetObjectW(hobj, sizeof(dib), &dib) == sizeof(dib)) { if (VirtualQuery(dib.dsBm.bmBits, &mbi, sizeof(mbi))) { discard = mbi.State == MEM_COMMIT; } } result = DeleteObject(hobj); if (result && discard) { discard_memory(mbi.BaseAddress, mbi.RegionSize); } return result; } BOOL init_vm86(BOOL vm86) { if (!hook_nt_syscall(&old_NtFreeVirtualMemory, hook_NtFreeVirtualMemory, "ntdll", "NtFreeVirtualMemory")) { HAXMVM_ERRF("Failed to hook NtFreeVirtualMemory."); } #ifdef _MSC_VER __asm { mov seg_cs, cs mov seg_ds, ds } #else seg_cs = wine_get_cs(); seg_ds = wine_get_ds(); #endif hSystem = CreateFileW(L"\\\\.\\HAX", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hSystem == INVALID_HANDLE_VALUE) { HAXMVM_ERRF("HAXM is not installed.\n"); return FALSE; } struct hax_module_version ver; DWORD bytes; if (!DeviceIoControl(hSystem, HAX_IOCTL_VERSION, NULL, NULL, &ver, sizeof(ver), &bytes, NULL)) { HAXMVM_ERRF("VERSION"); return FALSE; } uint32_t vm_id; if (!DeviceIoControl(hSystem, HAX_IOCTL_CREATE_VM, NULL, NULL, &vm_id, sizeof(vm_id), &bytes, NULL)) { HAXMVM_ERRF("CREATE_VM"); return FALSE; } WCHAR buf[1000]; swprintf_s(buf, RTL_NUMBER_OF(buf), L"\\\\.\\hax_vm%02d", vm_id); hVM = CreateFileW(buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hVM == INVALID_HANDLE_VALUE) { HAXMVM_ERRF("Could not create vm."); return FALSE; } uint32_t vcpu_id; struct hax_qemu_version verq; /* 3~ enable fast mmio */ verq.cur_version = 1; verq.least_version = 0; if (!DeviceIoControl(hVM, HAX_VM_IOCTL_NOTIFY_QEMU_VERSION, &verq, sizeof(verq), NULL, 0, &bytes, NULL)) { } vcpu_id = 1; if (!DeviceIoControl(hVM, HAX_VM_IOCTL_VCPU_CREATE, &vcpu_id, sizeof(vcpu_id), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("could not create vcpu."); return FALSE; } swprintf_s(buf, RTL_NUMBER_OF(buf), L"\\\\.\\hax_vm%02d_vcpu%02d", vm_id, vcpu_id); hVCPU = CreateFileW(buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); struct hax_tunnel_info tunnel_info; if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_SETUP_TUNNEL, NULL, 0, &tunnel_info, sizeof(tunnel_info), &bytes, NULL)) { HAXMVM_ERRF("SETUP_TUNNEL"); return FALSE; } /* memory mapping */ struct hax_alloc_ram_info alloc_ram = { 0 }; struct hax_set_ram_info ram = { 0 }; MEMORY_BASIC_INFORMATION mbi = { 0 }; trap_int = VirtualAlloc(NULL, 0x10000, MEM_COMMIT, PAGE_READWRITE); alloc_ram.size = 0x201000; alloc_ram.va = (uint64_t)guestpt; if (!DeviceIoControl(hVM, HAX_VM_IOCTL_ALLOC_RAM, &alloc_ram, sizeof(alloc_ram), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("ALLOC_RAM"); return FALSE; } ram.pa_start = (uint64_t)guestpt; ram.size = 0x201000; ram.va = (uint64_t)guestpt; if (!DeviceIoControl(hVM, HAX_VM_IOCTL_SET_RAM, &ram, sizeof(ram), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("SET_RAM"); return FALSE; } // fill in the pagedir for (int i = 0; i < 512; i++) guestpt[0x80000 + i] = ((DWORD)guestpt + 4096 * i) | 7; tunnel = (struct hax_tunnel*)tunnel_info.va; struct vcpu_state_t state; if (!DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL)) { HAXMVM_ERRF("GET_REGS"); return FALSE; } /* setup initial states */ state._gdt.base = (uint64)gdt; state._gdt.limit = 0x7ff; DWORD trap_addr = (DWORD)trap_int; gdt[1].BaseLow = trap_addr & 0xffff; gdt[1].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff; gdt[1].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff; gdt[1].LimitLow = 0xffff; gdt[1].HighWord.Bytes.Flags1 = 0x9b; gdt[1].HighWord.Bytes.Flags2 = 0x40; gdt[2].BaseLow = trap_addr & 0xffff; gdt[2].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff; gdt[2].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff; gdt[2].LimitLow = 0xffff; gdt[2].HighWord.Bytes.Flags1 = 0x93; gdt[2].HighWord.Bytes.Flags2 = 0x40; GetThreadSelectorEntry(GetCurrentThread(), seg_cs, gdt + (seg_cs >> 3)); GetThreadSelectorEntry(GetCurrentThread(), seg_ds, gdt + (seg_ds >> 3)); state._ldt.selector = 0x18; state._ldt.base = (uint64)&wine_ldt[0]; state._ldt.limit = 65535; UINT32 *tss = (UINT32 *)gdt + 0x200; state._tr.selector = 0x18; state._tr.base = (uint64)tss; state._tr.limit = 0x64; state._tr.ar = 0x8b; tss[1] = 0x10000; // SP0 tss[2] = 0x10; // SS0 state._idt.limit = 0x8 * 256 - 1; state._idt.base = (SIZE_T)&idt[0]; state._cr3 = guestpt + 0x80000; state._cr0 |= 0x80000001; state._eflags |= 0x200; for (int i = 0; i < 256; i++) { idt[i].DPL = 3; idt[i].type = INT_GATE_INT32; idt[i].selector = 0x0b; idt[i].P = 1; idt[i].offset_low = i; idt[i].offset_high = 0; } memset(trap_int, 0xF4, 256); /* hlt */ ((char *)trap_int)[256] = 0xcf; /* iret */ ram.pa_start = (uint64_t)&idt; ram.size = 4096; ram.va = (uint64_t)&idt; if (!set_ram(&ram)) { HAXMVM_ERRF("SET_RAM\n"); return FALSE; } ram.pa_start = (uint64_t)&wine_ldt & ~0xfff; ram.size = 65536 + 4096; ram.va = (uint64_t)&wine_ldt & ~0xfff; if (!set_ram(&ram)) { HAXMVM_ERRF("SET_RAM\n"); return FALSE; } ram.pa_start = (uint64_t)trap_int; ram.size = 0x10000; ram.va = (uint64_t)trap_int; if (!set_ram(&ram)) { HAXMVM_ERRF("SET_RAM"); return FALSE; } ram.pa_start = (uint64_t)&gdt; ram.size = 0x1000; ram.va = (uint64_t)&gdt; if (!set_ram(&ram)) { HAXMVM_ERRF("SET_RAM"); return FALSE; } if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state, sizeof(state), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("SET_REGS"); return FALSE; } ((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); return TRUE; } BOOL vm_exit() { CloseHandle(hVCPU); CloseHandle(hVM); CloseHandle(hSystem); return TRUE; } void PUSH16(struct vcpu_state_t *state, WORD val) { if (state->_ss.operand_size) { state->_esp -= 2; unsigned char *stack = (unsigned char*)(state->_ss.base + state->_esp); *(LPWORD)stack = val; } else { state->_sp -= 2; unsigned char *stack = (unsigned char*)(state->_ss.base + state->_sp); *(LPWORD)stack = val; } } void PUSH32(struct vcpu_state_t *state, DWORD val) { if (state->_ss.operand_size) { state->_esp -= 4; unsigned char *stack = (unsigned char*)(state->_ss.base + state->_esp); *(LPDWORD)stack = val; } else { state->_sp -= 4; unsigned char *stack = (unsigned char*)(state->_ss.base + state->_sp); *(LPDWORD)stack = val; } } WORD POP16(struct vcpu_state_t *state) { if (state->_ss.operand_size) { LPWORD stack = (LPWORD)(state->_ss.base + state->_esp); state->_esp += 2; return *stack; } else { LPWORD stack = (LPWORD)(state->_ss.base + state->_sp); state->_sp += 2; return *stack; } } DWORD POP32(struct vcpu_state_t *state) { if (state->_ss.operand_size) { LPDWORD stack = (LPDWORD)(state->_ss.base + state->_esp); state->_esp += 4; return *stack; } else { LPDWORD stack = (LPDWORD)(state->_ss.base + state->_sp); state->_sp += 4; return *stack; } } WORD PEEK16(struct vcpu_state_t *state, int i) { if (state->_ss.operand_size) { LPWORD stack = (LPWORD)(state->_ss.base + state->_esp); return stack[i]; } else { LPWORD stack = (LPWORD)(state->_ss.base + state->_sp); return stack[i]; } } DWORD PEEK32(struct vcpu_state_t *state, int i) { if (state->_ss.operand_size) { LPDWORD stack = (LPDWORD)(state->_ss.base + state->_esp); return stack[i]; } else { LPDWORD stack = (LPDWORD)(state->_ss.base + state->_sp); return stack[i]; } } void relay(LPVOID relay_func, BOOL reg, struct vcpu_state_t *state, DWORD ret_addr, DWORD cbArgs, PEXCEPTION_HANDLER handler, DWORD old_frame16) { unsigned char *stack1 = (unsigned char*)(state->_ss.base + state->_sp); unsigned char *stack = stack1; /* * (sp+24) word first 16-bit arg * (sp+22) word cs * (sp+20) word ip * (sp+18) word bp * (sp+14) long 32-bit entry point (reused for Win16 mutex recursion count) * (sp+12) word ip of actual entry point (necessary for relay debugging) * (sp+8) long relay (argument conversion) function entry point * (sp+4) long cs of 16-bit entry point * (sp) long ip of 16-bit entry point */ DWORD ip = *(DWORD*)stack; stack += sizeof(DWORD); DWORD cs = *(DWORD*)stack; stack += sizeof(DWORD); DWORD relay = *(DWORD*)stack; stack += sizeof(DWORD); WORD ip2 = *(WORD*)stack; stack += sizeof(WORD); DWORD entry = *(DWORD*)stack; //for debug void *entryf = (void*)entry; stack += sizeof(DWORD); WORD bp = *(WORD*)stack; stack += sizeof(WORD); WORD ip19 = *(WORD*)stack; stack += sizeof(WORD); WORD cs16 = *(WORD*)stack; stack += sizeof(WORD); WORD *args = (WORD*)stack; state->_eip = ip; load_seg(&state->_cs, (WORD)cs); #include /* 16-bit stack layout after __wine_call_from_16() */ typedef struct _STACK16FRAME { struct STACK32FRAME *frame32; /* 00 32-bit frame from last CallTo16() */ DWORD edx; /* 04 saved registers */ DWORD ecx; /* 08 */ DWORD ebp; /* 0c */ WORD ds; /* 10 */ WORD es; /* 12 */ WORD fs; /* 14 */ WORD gs; /* 16 */ DWORD callfrom_ip; /* 18 callfrom tail IP */ DWORD module_cs; /* 1c module code segment */ DWORD relay; /* 20 relay function address */ WORD entry_ip; /* 22 entry point IP */ DWORD entry_point; /* 26 API entry point to call, reused as mutex count */ WORD bp; /* 2a 16-bit stack frame chain */ WORD ip; /* 2c return address */ WORD cs; /* 2e */ } STACK16FRAME; #include CONTEXT context; STACK32FRAME dummy_stack32 = { 0 }; dummy_stack32.retaddr = ret_addr; dummy_stack32.nb_args = cbArgs; dummy_stack32.frame.Handler = handler; DWORD osp = state->_esp; PUSH16(state, state->_gs.selector); PUSH16(state, state->_fs.selector); PUSH16(state, state->_es.selector); PUSH16(state, state->_ds.selector); PUSH32(state, state->_ebp); PUSH32(state, state->_ecx); PUSH32(state, state->_edx); PUSH32(state, osp); save_context_from_state(&context, state); STACK16FRAME *oa = (STACK16FRAME*)wine_ldt_get_ptr((WORD)context.SegSs, context.Esp); DWORD ooo = (WORD)context.Esp; int off = 0; if (reg) { context.Esp = osp + (SIZE_T)stack - (SIZE_T)stack1 - 4; off = ooo - context.Esp; context.Ebp = (context.Ebp & ~0xffff) | bp; context.Eip = ip19; context.SegCs = cs16; } int fret; LPVOID old; PCONTEXT pctx = NULL; #if _MSC_VER __asm { mov old, esp push cbArgs push old /* target(esp) */ push retaddr /* retaddr */ push ebp push ebx push esi push edi push old_frame16 /* frame16 */ /* set up exception handler */ push handler mov eax, fs:[0] push eax mov dummy_stack32.frame.Next, eax mov fs : [0], esp push cs push 0 mov eax, [oa] mov[eax], esp lea eax, [context] push eax push args push entry call relay_func add esp, 12 + 8 mov fret, eax pop dword ptr fs : [0] pop eax jmp skip retaddr : mov pctx, ecx skip: mov esp, old } #else fret = ((int(*)(void *entry_point, unsigned char *args16, CONTEXT *context))relay_func)((void*)entry, (unsigned char*)args, &context); #endif if (!reg) { state->_eax = fret; } if (pctx) { /* Throw16 */ context = *pctx; reg = TRUE; } if (!reg) { state->_eax = fret; context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF; context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF; oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp); } else { oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp + off); } if (reg) state->_eax = (DWORD)context.Eax; state->_ecx = reg ? (DWORD)context.Ecx : (DWORD)oa->ecx; if (reg) state->_edx = (DWORD)context.Edx; else state->_edx = (DWORD)oa->edx; state->_ebx = (DWORD)context.Ebx; state->_esp = (DWORD)context.Esp; state->_ebp = (DWORD)context.Ebp; state->_esi = (DWORD)context.Esi; state->_edi = (DWORD)context.Edi; load_seg(&state->_es, reg ? (WORD)context.SegEs : (WORD)oa->es); load_seg(&state->_ss, (WORD)context.SegSs); load_seg(&state->_ds, reg ? (WORD)context.SegDs : (WORD)oa->ds); //ES, CS, SS, DS, FS, GS /* Some programs expect that gs is not a valid selector! */ /* Some programs expect that fs is not a valid selector! */ /* win16 sets 0? */ load_seg(&state->_fs, 0);//(WORD)context.SegFs == reg_fs ? 0 : context.SegFs; load_seg(&state->_gs, 0);//(WORD)context.SegGs == reg_gs ? 0 : context.SegGs; if (reg) { if (!(ip19 != context.Eip || cs16 != context.SegCs)) { context.Eip = oa->callfrom_ip; context.SegCs = oa->module_cs; } else { /* CS:IP changed! */ context.Eip = context.Eip; } state->_esp = context.Esp; state->_ebp = context.Ebp; } else { state->_esp = osp + 18 + 2; state->_esp -= (ooo - context.Esp); WORD bpp = state->_esp; state->_esp = context.Esp + 0x2c; state->_bp = bp; } set_eflags(state, context.EFlags); state->_eip = context.Eip; load_seg(&state->_cs, (WORD)context.SegCs); } LPBYTE get_base_addr(WORD sel) { return wine_ldt_get_base(wine_ldt + (sel >> 3)); } static uint64 dr7; void set_break_point(struct vcpu_state_t *state, WORD sel, DWORD addr, int breakpoint) { LPBYTE base = get_base_addr(sel); if (!base) return; if (wine_ldt_get_limit(wine_ldt + (sel >> 3)) < addr) return; uint64 linear = (uint64)base + addr; switch (breakpoint) { case 0: state->_dr0 = linear; break; case 1: state->_dr1 = linear; break; case 2: state->_dr2 = linear; break; case 3: state->_dr3 = linear; break; default: return; } state->_dr7 |= (1 << (2 * breakpoint + 1)) | (0 << (18 + 4 * breakpoint)); state->_dr6 = 0; } typedef int disassemble_debug_t(char *buffer, UINT8 *oprom, BOOL op_size, UINT64 eip); static disassemble_debug_t *disassemble_debug; static void trace(struct vcpu_state_t *state, uint16 cs, uint32 eip, uint16 ss, uint32 esp, uint32 eflags) { char buf[512]; UINT8 *d = get_base_addr(cs) + eip; if (!disassemble_debug) { disassemble_debug = (disassemble_debug_t*)GetProcAddress(LoadLibraryA("vm86.dll"), "disassemble_debug"); } int len = disassemble_debug(buf, d, (wine_ldt_get_flags(wine_ldt + (cs >> 3)) & WINE_LDT_FLAGS_32BIT) == WINE_LDT_FLAGS_32BIT, eip); int i; fprintf(stderr, "%04x:%04x\t", cs, eip); for (i = 0; i < len; i++) { fprintf(stderr, "%02x", d[i]); } fprintf(stderr, "\t%s\n", buf); eflags &= ~2; eflags &= ~0x100; eflags |= 0x200; if (state->_fs.selector || state->_gs.selector) { fprintf(stderr, "EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X," "ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X," "ES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04x,GS:%04x," "IP:%04X,stack:%08X," "EFLAGS:%08X" "\n", state->_eax, state->_ecx, state->_edx, state->_ebx, esp, state->_ebp, state->_esi, state->_edi, state->_es.selector, cs, ss, state->_ds.selector, state->_fs.selector, state->_gs.selector, eip, *(LPDWORD)(get_base_addr(ss) + esp), eflags ); } else { fprintf(stderr, "EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X," "ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X," "ES:%04X,CS:%04X,SS:%04X,DS:%04X," "IP:%04X,stack:%08X," "EFLAGS:%08X" "\n", state->_eax, state->_ecx, state->_edx, state->_ebx, esp, state->_ebp, state->_esi, state->_edi, state->_es.selector, cs, ss, state->_ds.selector, eip, *(LPDWORD)(get_base_addr(ss) + esp), eflags ); } } BOOL has_x86_exception_err(WORD num) { switch (num) { case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7: return FALSE; case 8: return TRUE; case 9: return FALSE; case 10:case 11:case 12:case 13:case 14: return TRUE; case 15:case 16: return FALSE; case 17: return TRUE; case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29: return FALSE; case 30: return TRUE; case 31: return FALSE; } return FALSE; } BOOL workaround_watcom(struct vcpu_state_t *state, uint16 cs, uint32 eip) { /* workaround for Watcom C 8.5 win386 startup */ const unsigned char startup[] = { 0xbf, 0x02, 0x00, 0x26, 0x8a, 0x2f, 0x26, 0x8a, 0x0f, 0x3a, 0xe9, 0x74, 0xf9, 0x26, 0x8a, 0x0f, 0x26, 0x3a, 0x0f, 0x75, 0x10, 0x2d, 0x01, 0x00, 0x83, 0xda, 0x00, 0x8a, 0xec, 0x0a, 0xe8, 0x0a, 0xee, 0x0a, 0xea, 0x75, 0xeb, 0x4f, 0x75, 0xe5, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0xb9, 0x6e, 0x00, }; const unsigned char *code = get_base_addr(cs) + eip; if (!memcmp(code - sizeof(startup), startup, sizeof(startup)) && code[0] == 0xf7 && code[1] == 0xf1) /* div ax, cx */ { state->_dx = 0; return TRUE; } return FALSE; } BOOL syscall_init = FALSE; LPBYTE syscall_trap = FALSE; void fstsw(WORD* a); void vm86main(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, pm_interrupt_handler pih ) { DWORD old_frame16 = PtrToUlong(dynamic_getWOW32Reserved()); if (!initflag) { haxmvm_panic("Could not initialize the hypervisor.\nHAXM may not be installed.\n"); } if (tunnel->_exit_status == HAX_EXIT_STATECHANGE) { haxmvm_panic("hypervisor is panicked!!!"); } if (!syscall_init) { SIZE_T page1 = (SIZE_T)from16_reg / 4096 * 4096; SIZE_T page2 = (SIZE_T)__wine_call_from_16 / 4096 * 4096; SIZE_T page3 = (SIZE_T)__wine_call_to_16_ret / 4096 * 4096; LPBYTE trap = syscall_trap = (LPBYTE)VirtualAlloc(NULL, 4096, MEM_COMMIT, PAGE_READWRITE); memset(trap, 0xEE, 4096); /* out forces a vmexit from user mode without modifing any registers */ struct hax_alloc_ram_info alloc_ram = { 0 }; struct hax_set_ram_info ram = { 0 }; alloc_ram.size = 4096; alloc_ram.va = trap; DWORD bytes; if (!DeviceIoControl(hVM, HAX_VM_IOCTL_ALLOC_RAM, &alloc_ram, sizeof(alloc_ram), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("ALLOC_RAM"); } ram.pa_start = (SIZE_T)trap; ram.size = (SIZE_T)4096; ram.va = (SIZE_T)trap; if (!DeviceIoControl(hVM, HAX_VM_IOCTL_SET_RAM, &ram, sizeof(ram), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("SET_RAM\n"); } guestpt[page1 >> 12] = (DWORD)trap | 7; guestpt[page2 >> 12] = (DWORD)trap | 7; guestpt[page3 >> 12] = (DWORD)trap | 7; syscall_init = TRUE; } is_single_step = dasm; MEMORY_BASIC_INFORMATION mbi; DWORD bytes; DWORD ret_addr; struct vcpu_state_t state_ini; { DWORD bytes; struct vcpu_state_t state; if (!DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL)) HAXMVM_ERRF("GET_REGS"); load_seg(&state._gs, (WORD)0); load_seg(&state._fs, (WORD)0); load_seg(&state._es, (WORD)context->SegEs); load_seg(&state._ds, (WORD)context->SegDs); load_seg(&state._cs, (WORD)context->SegCs); load_seg(&state._ss, (WORD)context->SegSs); state._edi = context->Edi; state._esi = context->Esi; state._ebx = context->Ebx; state._edx = context->Edx; state._ecx = context->Ecx; state._eax = context->Eax; state._ebp = context->Ebp; state._eip = context->Eip; set_eflags(&state, context->EFlags); state._esp = context->Esp - cbArgs; if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state, sizeof(state), NULL, 0, &bytes, NULL)) HAXMVM_ERRF("SET_REGS"); unsigned char *stack = (unsigned char*)state._ss.base + state._esp; ret_addr = (*(LPDWORD)stack) + 1; } struct vcpu_state_t state2; DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state2, sizeof(state2), &bytes, NULL); if (is_single_step) { trace(&state2, state2._cs.selector, state2._eip, state2._ss.selector, state2._esp, state2._eflags); } while (TRUE) { 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); if (state2._cs.selector == (ret_addr >> 16) && state2._eip == (ret_addr & 0xFFFF)) { if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("SET_REGS"); } break; } if (is_single_step) { /* Debug exception */ fprintf(stderr, "%04x:%04x EAX:%04x EDX:%04x EF:%04x %p\n", state2._cs.selector, state2._eip, state2._eax, state2._edx, state2._eflags, (LPBYTE)state2._cs.base + state2._eip); } if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_RUN, NULL, 0, NULL, 0, &bytes, NULL)) return; DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state2, sizeof(state2), &bytes, NULL); dprintf("end %04X:%04X(base:%04llX) ESP:%08X F:%08X\n", state2._cs.selector, state2._eip, state2._cs.base, state2._esp, state2._eflags); if (state2._cs.selector == (ret_addr >> 16) && state2._eip == (ret_addr & 0xFFFF)) { if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("SET_REGS"); } break; } LPVOID ptr = (LPBYTE)state2._cs.base + state2._eip; switch(tunnel->_exit_status) { case HAX_EXIT_IO: if (tunnel->io._direction == HAX_IO_OUT) { LPBYTE ptr2 = (LPBYTE)ptr - 1; BOOL is_reg = ptr2 == from16_reg; if (is_reg || ptr2 == __wine_call_from_16) { relay(relay_call_from_16, is_reg, &state2, ret_addr, cbArgs, handler, old_frame16); if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("SET_REGS"); } break; } } else if (tunnel->io._direction == HAX_IO_IN) { printf(""); } break; case HAX_EXIT_HLT: if (((DWORD)ptr >= (DWORD)trap_int) && ((DWORD)ptr <= ((DWORD)trap_int + 256))) { int intvec = ((DWORD)ptr & 0xff) - 1; BOOL has_err = has_x86_exception_err(intvec); DWORD err = has_err ? PEEK32(&state2, 0) : 0; DWORD eip = PEEK32(&state2, (has_err ? 1 : 0) + 0); DWORD cs = PEEK32(&state2, (has_err ? 1 : 0) + 1); DWORD flags = PEEK32(&state2, (has_err ? 1 : 0) + 2); DWORD old_esp = PEEK32(&state2, (has_err ? 1 : 0) + 3); DWORD old_ss = PEEK32(&state2, (has_err ? 1 : 0) + 4); const char *name = NULL; switch (intvec) { case 0: name = "#DE"; break; case 2: name = "int 2h"; break; case 4: name = "#OF"; break; case 6: name = "#UD"; break; case 7: name = "#NM"; break; case 8: name = "#DF"; break; case 10: name = "#TS"; break; case 11: name = "#NP"; break; case 12: name = "#SS"; break; case 13: name = "#GP"; break; case 14: name = "#PF"; break; } state2._eip = 256; if (intvec == 1 && (state2._dr6 & 15 || is_single_step)) { if (state2._dr6 & 15) { if (state2._dr6 & 1) { fprintf(stderr, "breakpoint 0\n"); } if (state2._dr6 & 2) { fprintf(stderr, "breakpoint 1\n"); } if (state2._dr6 & 4) { fprintf(stderr, "breakpoint 2\n"); } if (state2._dr6 & 8) { fprintf(stderr, "breakpoint 3\n"); } state2._dr6 = 0; flags |= 0x100; dr7 = state2._dr7; state2._dr7 = 0; /* breakpoint -> disable -> step -> enable */ } else if (!is_single_step) { flags &= ~0x100; state2._dr7 = dr7; } trace(&state2, cs, eip, old_ss, old_esp, flags); state2._eip = 256; break; } dprintf("err:%X flg:%08X %04X:%04X\n", err, flags, cs, eip); if (intvec == 0x0e) { alloc_ram(state2._cr2 & ~0xfff, 4096); state2._esp += 4; } else if (name) { if (intvec == 0) { if (workaround_watcom(&state2, cs, eip)) { break; } } if (intvec == 0x0d) { if (err == 0x40) { /* many startups access the BDA directly */ static WORD dosmem_0040H = 0; if (!dosmem_0040H) { DWORD(WINAPI *GetProcAddress16)(HMODULE16, LPCSTR); HMODULE16(WINAPI *GetModuleHandle16)(LPCSTR); static HMODULE krnl386; if (!krnl386) krnl386 = LoadLibraryA(KRNL386); GetProcAddress16 = (DWORD(WINAPI *)(HMODULE16, LPCSTR))GetProcAddress(krnl386, "GetProcAddress16"); GetModuleHandle16 = (HMODULE16(WINAPI *)(LPCSTR))GetProcAddress(krnl386, "GetModuleHandle16"); dosmem_0040H = (WORD)GetProcAddress16(GetModuleHandle16("KERNEL"), (LPCSTR)193); (void(*)(void))GetProcAddress(krnl386, "DOSVM_start_bios_timer")(); } err = POP32(&state2); eip = POP32(&state2); cs = POP32(&state2); flags = POP32(&state2); old_esp = POP32(&state2); old_ss = POP32(&state2); /* allocate segment 40h */ LPLDT_ENTRY entry = wine_ldt + (dosmem_0040H >> __AHSHIFT); gdt[0x40 >> __AHSHIFT] = *entry; load_seg(&state2._cs, cs); state2._eip = eip; set_eflags(&state2, flags & ~0x10000); load_seg(&state2._ss, old_ss); state2._esp = old_esp; break; } } DWORD handler = pih(intvec, MAKESEGPTR(cs, eip)); if (!handler) { trace(&state2, cs, eip, old_ss, old_esp, flags); HAXMVM_ERRF("%s %02x %04x %04x:%04x %04x:%04x", name, intvec, err, cs, eip, old_ss, old_esp); HAXMVM_ERRF("%04X:%04X(base:%04llX) ESP:%08X", state2._cs.selector, state2._eip, state2._cs.base, state2._esp); HAXMVM_ERRF("exception"); haxmvm_panic("exception %s", name); } if (has_err) { err = POP32(&state2); } eip = POP32(&state2); cs = POP32(&state2); flags = POP32(&state2); old_esp = POP32(&state2); old_ss = POP32(&state2); state2._eip = OFFSETOF(handler); set_eflags(&state2, flags); load_seg(&state2._cs, SELECTOROF(handler)); load_seg(&state2._ss, old_ss); state2._esp = old_esp; } else { DWORD eip = POP32(&state2); DWORD cs = POP32(&state2); DWORD eflags = POP32(&state2); DWORD esp = POP32(&state2); DWORD ss = POP32(&state2); load_seg(&state2._cs, (WORD)cs); state2._eip = eip; load_seg(&state2._ss, (WORD)ss); state2._esp = esp; CONTEXT ctx; save_context_from_state(&ctx, &state2); if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("SET_REGS"); } if (intvec == 0x10) // redirect fpu errors to int 13h { WORD sw; fstsw(&sw); if (sw & 0x80) intvec = 2; } dynamic__wine_call_int_handler(&ctx, intvec); load_context_to_state(&ctx, &state2); } } break; case HAX_EXIT_INTERRUPT: //TODO: vm_inject break; case HAX_EXIT_STATECHANGE: default: HAXMVM_ERRF("%04X:%04X(base:%04llX) ESP:%08X", state2._cs.selector, state2._eip, state2._cs.base, state2._esp); HAXMVM_ERRF("hypervisor is panicked!!!"); haxmvm_panic("hypervisor is panicked!!!"); } if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL)) { HAXMVM_ERRF("SET_REGS"); } } save_context(context); } __declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih) { mem = vm86 ? (UINT8*)memory_base : NULL; if (!initflag) initflag = init_vm86(vm86); CONTEXT context; PVOID oldstack = dynamic_getWOW32Reserved(); save_context(&context); //why?? dynamic_setWOW32Reserved(oldstack); context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF; context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF; context.SegCs = target >> 16; context.Eip = target & 0xFFFF;//i386_jmp_far(target >> 16, target & 0xFFFF); vm86main(&context, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih); return (context.Eax & 0xffff) | context.Edx << 16; } __declspec(dllexport) void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih ) { mem = vm86 ? (UINT8*)memory_base : NULL; if (!initflag) initflag = init_vm86(vm86); vm86main(context, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih); } SIZE_T base = 0; SIZE_T x87func = 0x200 - 0x10; void callx87(const char *addr, LPCVOID eax) { DWORD bytes; struct vcpu_state_t state; DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL); state._rip = addr; state._eax = eax; load_seg(&state._cs, seg_cs); load_seg(&state._ds, seg_ds); while (TRUE) { DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state, sizeof(state), NULL, 0, &bytes, NULL); if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_RUN, NULL, 0, NULL, 0, &bytes, NULL)) return; DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL); if (tunnel->_exit_status == HAX_EXIT_HLT) { struct vcpu_state_t state2 = state; LPVOID ptr = (LPBYTE)state2._cs.base + state2._eip; if (((DWORD)ptr >= (DWORD)trap_int) && ((DWORD)ptr <= ((DWORD)trap_int + 256))) { int intvec = ((DWORD)ptr & 0xff) - 1; state2._eip = 256; if (intvec == 0x0e) { alloc_ram(state2._cr2 & ~0xfff, 4096); state2._esp += 4; } else break; } else break; state = state2; } else break; } if (tunnel->_exit_status == HAX_EXIT_STATECHANGE) { HAXMVM_ERRF("hypervisor is panicked!!!"); haxmvm_panic("win87em: hypervisor is panicked!!!"); } } /* x87 service functions */ static BOOL get_fpu_regs(struct fx_layout *fx) { if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_GET_FPU, NULL, 0, fx, sizeof(*fx), NULL, NULL)) { HAXMVM_ERRF("HAX_VCPU_IOCTL_GET_FPU"); return FALSE; } return TRUE; } static BOOL set_fpu_regs(struct fx_layout *fx) { if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_SET_FPU, fx, sizeof(*fx), NULL, 0, NULL, NULL)) { HAXMVM_ERRF("HAX_VCPU_IOCTL_SET_FPU"); return FALSE; } return TRUE; } void fldcw(WORD a) { struct fx_layout fx; if (!get_fpu_regs(&fx)) { return; } fx.fcw = a; if (!set_fpu_regs(&fx)) { return; } } void wait() { char instr[] = { 0x9b, 0xee }; /* wait */ callx87(instr, NULL); } void fninit() { char instr[] = { 0xdb, 0xe3, 0xee }; /* fninit */ callx87(instr, NULL); } void fstcw(WORD* a) { struct fx_layout fx; if (!get_fpu_regs(&fx)) { return; } *a = fx.fcw; } void fstsw(WORD* a) { struct fx_layout fx; if (!get_fpu_regs(&fx)) { return; } *a = fx.fsw; } void frndint() { char instr[] = { 0xd9, 0xfc, 0xee }; /* frndint */ callx87(instr, NULL); } void fclex() { char instr[] = { 0xdb, 0xe2, 0xee }; /* fnclex */ callx87(instr, NULL); } void fsave(char* a) { char instr[] = { 0xdd, 0x30, 0xee }; /* fnsave [eax] */ callx87(instr, a); } void frstor(const char* a) { char instr[] = { 0xdd, 0x20, 0xee }; /* frstor [eax] */ callx87(instr, a); } void fstenv32(char* a) { const char instr[] = { 0xd9, 0x30, 0xee }; /* fnstenv dword ptr [eax] */ callx87(instr, a); } typedef void(*fldcw_t)(WORD); typedef void(*wait_t)(); typedef void(*fninit_t)(); typedef void(*fstcw_t)(WORD*); typedef void(*fstsw_t)(WORD*); typedef void(*frndint_t)(); typedef void(*fclex_t)(); typedef void(*fsave_t)(char*); typedef void(*fstenv32_t)(char*); typedef void(*frstor_t)(const char*); typedef DWORD(*fistp_t)(WORD); typedef struct { fldcw_t fldcw; wait_t wait; fninit_t fninit; fstcw_t fstcw; fstsw_t fstsw; frndint_t frndint; fclex_t fclex; fsave_t fsave; frstor_t frstor; fstenv32_t fstenv32; fistp_t fistp; } x87function; __declspec(dllexport) void load_x87function(x87function *func) { func->fclex = fclex; func->fldcw = fldcw; func->fninit = fninit; func->frndint = frndint; func->frstor = frstor; func->fsave = fsave; func->fstcw = fstcw; func->fstsw = fstsw; func->wait = wait; func->fstenv32 = fstenv32; } ================================================ FILE: haxmvm/haxmvm.h ================================================ #pragma once #include #include #include // Signed Types typedef signed char int8; typedef signed short int16; typedef signed int int32; typedef signed long long int64; // Unsigned Types typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; typedef unsigned int uint; typedef unsigned long long uint64; typedef unsigned long ulong; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned long long uint64_t; typedef unsigned long ulong_t; /* Common typedef for all platform */ typedef uint64 hax_pa_t; typedef uint64 hax_pfn_t; typedef uint64 paddr_t; typedef uint64 vaddr_t; #include struct hax_module_version { uint32_t compat_version; uint32_t cur_version; }; struct vmx_msr { uint64_t entry; uint64_t value; }; #define HAX_MAX_MSR_ARRAY 0x20 struct hax_msr_data { uint16_t nr_msr; uint16_t done; uint16_t pad[2]; struct vmx_msr entries[HAX_MAX_MSR_ARRAY]; }; struct hax_set_ram_info { uint64_t pa_start; uint32_t size; uint8_t flags; uint8_t pad[3]; uint64_t va; }; struct hax_alloc_ram_info { uint32_t size; uint32_t pad; uint64_t va; }; union interruptibility_state_t { uint32 raw; struct { uint32 sti_blocking : 1; uint32 movss_blocking : 1; uint32 smi_blocking : 1; uint32 nmi_blocking : 1; uint32 reserved : 28; }; uint64_t pad; }; typedef union interruptibility_state_t interruptibility_state_t; struct segment_desc_t { uint16 selector; uint16 _dummy; uint32 limit; uint64 base; union { struct { uint32 type : 4; uint32 desc : 1; uint32 dpl : 2; uint32 present : 1; uint32 : 4; uint32 available : 1; uint32 long_mode : 1; uint32 operand_size : 1; uint32 granularity : 1; uint32 null : 1; uint32 : 15; }; uint32 ar; }; uint32 ipad; }; typedef struct segment_desc_t segment_desc_t; struct vcpu_state_t { union { uint64 _regs[16]; struct { union { struct { uint8 _al, _ah; }; uint16 _ax; uint32 _eax; uint64 _rax; }; union { struct { uint8 _cl, _ch; }; uint16 _cx; uint32 _ecx; uint64 _rcx; }; union { struct { uint8 _dl, _dh; }; uint16 _dx; uint32 _edx; uint64 _rdx; }; union { struct { uint8 _bl, _bh; }; uint16 _bx; uint32 _ebx; uint64 _rbx; }; union { uint16 _sp; uint32 _esp; uint64 _rsp; }; union { uint16 _bp; uint32 _ebp; uint64 _rbp; }; union { uint16 _si; uint32 _esi; uint64 _rsi; }; union { uint16 _di; uint32 _edi; uint64 _rdi; }; uint64 _r8; uint64 _r9; uint64 _r10; uint64 _r11; uint64 _r12; uint64 _r13; uint64 _r14; uint64 _r15; }; }; union { uint32 _eip; uint64 _rip; }; union { uint32 _eflags; uint64 _rflags; }; segment_desc_t _cs; segment_desc_t _ss; segment_desc_t _ds; segment_desc_t _es; segment_desc_t _fs; segment_desc_t _gs; segment_desc_t _ldt; segment_desc_t _tr; segment_desc_t _gdt; segment_desc_t _idt; uint64 _cr0; uint64 _cr2; uint64 _cr3; uint64 _cr4; uint64 _dr0; uint64 _dr1; uint64 _dr2; uint64 _dr3; uint64 _dr6; uint64 _dr7; uint64 _pde; uint32 _efer; uint32 _sysenter_cs; uint64 _sysenter_eip; uint64 _sysenter_esp; uint32 _activity_state; uint32 pad; interruptibility_state_t _interruptibility_state; }; /* This interface is support only after API version 2 */ struct hax_qemu_version { /* Current API version in QEMU*/ uint32_t cur_version; /* The least API version supported by QEMU */ uint32_t least_version; }; #define HAX_IO_OUT 0 #define HAX_IO_IN 1 struct hax_tunnel_info { uint64_t va; uint64_t io_va; uint16_t size; uint16_t pad[3]; }; typedef enum exit_status { HAX_EXIT_IO = 1, HAX_EXIT_MMIO, HAX_EXIT_REALMODE, HAX_EXIT_INTERRUPT, HAX_EXIT_UNKNOWN, HAX_EXIT_HLT, HAX_EXIT_STATECHANGE, HAX_EXIT_PAUSED, HAX_EXIT_FAST_MMIO, HAX_EXIT_PAGEFAULT } exit_status; typedef enum exit_reason { EXIT_INTERRUPT_WIN = 0x07, EXIT_HLT = 0x0c, EXIT_INTERRUPT = 0x30 } exit_reason; struct hax_tunnel { exit_reason _exit_reason; uint32_t pad0; exit_status _exit_status;/* exit_status */ uint32_t user_event_pending; int ready_for_interrupt_injection; int request_interrupt_window; union { struct { uint8_t _direction; uint8_t _df; uint16_t _size; uint16_t _port; uint16_t _count; /* Followed owned by HAXM, QEMU should not touch them */ /* bit 1 is 1 means string io */ uint8_t _flags; uint8_t _pad0; uint16_t _pad1; uint32_t _pad2; vaddr_t _vaddr; } io; struct { paddr_t gla; } mmio; struct { paddr_t gpa; #define HAX_PAGEFAULT_ACC_R (1 << 0) #define HAX_PAGEFAULT_ACC_W (1 << 1) #define HAX_PAGEFAULT_ACC_X (1 << 2) #define HAX_PAGEFAULT_PERM_R (1 << 4) #define HAX_PAGEFAULT_PERM_W (1 << 5) #define HAX_PAGEFAULT_PERM_X (1 << 6) uint32_t flags; uint32_t reserved1; uint64_t reserved2; } pagefault; struct { paddr_t dummy; } state; }; uint64_t apic_base; }; enum run_flag { HAX_EXIT = 0, HAX_RESUME = 1 }; #define HAX_RAM_INFO_ROM (1 << 0) #define HAX_RAM_INFO_STANDALONE (1 << 6) #define HAX_RAM_INFO_INVALID (1 << 7) #include struct hax_vcpu_mem { uint32_t size; uint64_t uva; void *kva; void *hinfo; }; #include struct fx_layout { uint16 fcw; uint16 fsw; uint8 ftw; uint8 res1; uint16 fop; union { struct { uint32 fip; uint16 fcs; uint16 res2; }; uint64 fpu_ip; }; union { struct { uint32 fdp; uint16 fds; uint16 res3; }; uint64 fpu_dp; }; uint32 mxcsr; uint32 mxcsr_mask; uint8 st_mm[8][16]; uint8 mmx_1[8][16]; uint8 mmx_2[8][16]; uint8 pad[96]; }; #include #define HAX_CAP_STATUS_WORKING (1 << 0) #define HAX_CAP_MEMQUOTA (1 << 1) #define HAX_CAP_WORKSTATUS_MASK 0x01 #define HAX_CAP_FAILREASON_VT (1 << 0) #define HAX_CAP_FAILREASON_NX (1 << 1) #define HAX_CAP_EPT (1 << 0) #define HAX_CAP_FASTMMIO (1 << 1) #define HAX_CAP_UG (1 << 2) #define HAX_CAP_64BIT_RAMBLOCK (1 << 3) #define HAX_CAP_64BIT_SETRAM (1 << 4) #define HAX_CAP_TUNNEL_PAGE (1 << 5) #define HAX_CAP_RAM_PROTECTION (1 << 6) #define HAX_CAP_DEBUG (1 << 7) #define HAX_CAP_IMPLICIT_RAMBLOCK (1 << 8) #include struct hax_capabilityinfo { /* * bit 0: 1 - working, 0 - not working, possibly because NT/NX disabled * bit 1: 1 - memory limitation working, 0 - no memory limitation */ uint16_t wstatus; /* * valid when not working * bit0: VT not enabeld * bit1: NX not enabled */ /* * valid when working * bit0: EPT enabled * bit1: fastMMIO */ uint16_t winfo; uint32_t win_refcount; uint64_t mem_quota; }; #include #define HAX_DEVICE_TYPE 0x4000 #define HAX_IOCTL_VERSION \ CTL_CODE(HAX_DEVICE_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_IOCTL_CREATE_VM \ CTL_CODE(HAX_DEVICE_TYPE, 0x901, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_IOCTL_CAPABILITY \ CTL_CODE(HAX_DEVICE_TYPE, 0x910, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_IOCTL_SET_MEMLIMIT \ CTL_CODE(HAX_DEVICE_TYPE, 0x911, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VM_IOCTL_VCPU_CREATE \ CTL_CODE(HAX_DEVICE_TYPE, 0x902, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VM_IOCTL_ALLOC_RAM \ CTL_CODE(HAX_DEVICE_TYPE, 0x903, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VM_IOCTL_SET_RAM \ CTL_CODE(HAX_DEVICE_TYPE, 0x904, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VM_IOCTL_VCPU_DESTROY \ CTL_CODE(HAX_DEVICE_TYPE, 0x905, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VM_IOCTL_ADD_RAMBLOCK \ CTL_CODE(HAX_DEVICE_TYPE, 0x913, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VM_IOCTL_SET_RAM2 \ CTL_CODE(HAX_DEVICE_TYPE, 0x914, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VM_IOCTL_PROTECT_RAM \ CTL_CODE(HAX_DEVICE_TYPE, 0x915, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_IOCTL_RUN \ CTL_CODE(HAX_DEVICE_TYPE, 0x906, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_IOCTL_SET_MSRS \ CTL_CODE(HAX_DEVICE_TYPE, 0x907, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_IOCTL_GET_MSRS \ CTL_CODE(HAX_DEVICE_TYPE, 0x908, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_IOCTL_SET_FPU \ CTL_CODE(HAX_DEVICE_TYPE, 0x909, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_IOCTL_GET_FPU \ CTL_CODE(HAX_DEVICE_TYPE, 0x90a, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_IOCTL_SETUP_TUNNEL \ CTL_CODE(HAX_DEVICE_TYPE, 0x90b, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_IOCTL_INTERRUPT \ CTL_CODE(HAX_DEVICE_TYPE, 0x90c, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_SET_REGS \ CTL_CODE(HAX_DEVICE_TYPE, 0x90d, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_GET_REGS \ CTL_CODE(HAX_DEVICE_TYPE, 0x90e, METHOD_BUFFERED, FILE_ANY_ACCESS) #define HAX_VCPU_IOCTL_KICKOFF \ CTL_CODE(HAX_DEVICE_TYPE, 0x90f, METHOD_BUFFERED, FILE_ANY_ACCESS) /* API version 2.0 */ #define HAX_VM_IOCTL_NOTIFY_QEMU_VERSION \ CTL_CODE(HAX_DEVICE_TYPE, 0x910, METHOD_BUFFERED, FILE_ANY_ACCESS) ================================================ FILE: haxmvm/haxmvm.vcxproj ================================================ Debug Win32 Release Win32 Debug x64 Release x64 15.0 {55AC3B70-9AFB-498C-BEC6-F56AF538FEDF} Win32Proj haxmvm 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode false true true false NotUsing Level3 MaxSpeed true true true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true true true $(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) NotUsing Level3 Disabled true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true $(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) NotUsing Level3 Disabled true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true $(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) NotUsing Level3 MaxSpeed true true true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true true true $(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) ================================================ FILE: haxmvm/haxmvm.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;ipp;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ヘッダー ファイル ソース ファイル ================================================ FILE: install.inf ================================================ [Version] Signature="$Windows NT$" [DefaultInstall.ntamd64] DelReg=DefaultInstall.ntamd64.DelReg AddReg=DefaultInstall.ntamd64.AddReg [DefaultInstall.ntamd64.DelReg] HKLM,%NtVdm64%\OTVDM HKLM,%NtVdm64%\OTVDM,,0x4000 [DefaultInstall.ntamd64.AddReg] HKLM,%NtVdm64%\0OTVDM,CommandLine,,%CommandLine% HKLM,%NtVdm64%\0OTVDM,InternalName,,* HKLM,%NtVdm64%\0OTVDM,ProductName,,* HKLM,%NtVdm64%\0OTVDM,ProductVersion,,* HKLM,%NtVdm64%\0OTVDM,MappedExeName,,%01%\%MappedExeName% HKLM,%NtVdm64%\0OTVDM,CommandLine,0x4000,%CommandLine% HKLM,%NtVdm64%\0OTVDM,InternalName,0x4000,* HKLM,%NtVdm64%\0OTVDM,ProductName,0x4000,* HKLM,%NtVdm64%\0OTVDM,ProductVersion,0x4000,* HKLM,%NtVdm64%\0OTVDM,MappedExeName,0x4000,%01%\%MappedExeName% [Strings] NtVdm64=SOFTWARE\Microsoft\Windows NT\CurrentVersion\NtVdm64 CommandLine=" --ntvdm64: ""%m"" --ntvdm64-args: %c" ;If you want to hide the console window, change otvdm.exe to otvdmw.exe MappedExeName=otvdm.exe ================================================ FILE: installw.inf ================================================ [Version] Signature="$Windows NT$" [DefaultInstall.ntamd64] DelReg=DefaultInstall.ntamd64.DelReg AddReg=DefaultInstall.ntamd64.AddReg [DefaultInstall.ntamd64.DelReg] HKLM,%NtVdm64%\OTVDM HKLM,%NtVdm64%\OTVDM,,0x4000 [DefaultInstall.ntamd64.AddReg] HKLM,%NtVdm64%\0OTVDM,CommandLine,,%CommandLine% HKLM,%NtVdm64%\0OTVDM,InternalName,,* HKLM,%NtVdm64%\0OTVDM,ProductName,,* HKLM,%NtVdm64%\0OTVDM,ProductVersion,,* HKLM,%NtVdm64%\0OTVDM,MappedExeName,,%01%\%MappedExeName% HKLM,%NtVdm64%\0OTVDM,CommandLine,0x4000,%CommandLine% HKLM,%NtVdm64%\0OTVDM,InternalName,0x4000,* HKLM,%NtVdm64%\0OTVDM,ProductName,0x4000,* HKLM,%NtVdm64%\0OTVDM,ProductVersion,0x4000,* HKLM,%NtVdm64%\0OTVDM,MappedExeName,0x4000,%01%\%MappedExeName% [Strings] NtVdm64=SOFTWARE\Microsoft\Windows NT\CurrentVersion\NtVdm64 CommandLine=" --ntvdm64: ""%m"" --ntvdm64-args: %c" ;If you want to hide the console window, change otvdm.exe to otvdmw.exe MappedExeName=otvdmw.exe ================================================ FILE: keyboard/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(keyboard SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/keyboard.def keyboard.drv16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(keyboard.drv16 keyboard) target_link_libraries(keyboard libwine winecrt0 krnl386) set_target_properties(keyboard PROPERTIES SUFFIX ".drv16") ================================================ FILE: keyboard/keyboard.c ================================================ /* * KEYBOARD driver * * Copyright 1993 Bob Amstadt * Copyright 1996 Albrecht Kleine * Copyright 1997 David Faure * Copyright 1998 Morten Welinder * Copyright 1998 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "winerror.h" #include "wine/winuser16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(keyboard); #include "pshpack1.h" typedef struct _KBINFO { BYTE Begin_First_Range; BYTE End_First_Range; BYTE Begin_Second_Range; BYTE End_Second_Range; WORD StateSize; } KBINFO, *LPKBINFO; #include "poppack.h" static FARPROC16 DefKeybEventProc; static LPBYTE pKeyStateTable; /*********************************************************************** * Inquire (KEYBOARD.1) */ WORD WINAPI Inquire16(LPKBINFO kbInfo) { kbInfo->Begin_First_Range = 0; kbInfo->End_First_Range = 0; kbInfo->Begin_Second_Range = 0; kbInfo->End_Second_Range = 0; kbInfo->StateSize = 16; return sizeof(KBINFO); } /*********************************************************************** * Enable (KEYBOARD.2) */ VOID WINAPI Enable16( FARPROC16 proc, LPBYTE lpKeyState ) { DefKeybEventProc = proc; pKeyStateTable = lpKeyState; memset( lpKeyState, 0, 256 ); /* all states to false */ } /*********************************************************************** * Disable (KEYBOARD.3) */ VOID WINAPI Disable16(VOID) { DefKeybEventProc = NULL; pKeyStateTable = NULL; } /**************************************************************************** * ToAscii (KEYBOARD.4) */ INT16 WINAPI ToAscii16(UINT16 virtKey,UINT16 scanCode, LPBYTE lpKeyState, LPVOID lpChar, UINT16 flags) { return ToAscii( virtKey, scanCode, lpKeyState, lpChar, flags ); } /*********************************************************************** * AnsiToOem (KEYBOARD.5) */ INT16 WINAPI AnsiToOem16( LPCSTR s, LPSTR d ) { CharToOemA( s, d ); return -1; } /*********************************************************************** * OemToAnsi (KEYBOARD.6) */ INT16 WINAPI OemToAnsi16( LPCSTR s, LPSTR d ) { OemToCharA( s, d ); return -1; } /********************************************************************** * SetSpeed (KEYBOARD.7) */ WORD WINAPI SetSpeed16(WORD unused) { FIXME("(%04x): stub\n", unused); return 0xffff; } /********************************************************************** * ScreenSwitchEnable (KEYBOARD.100) */ VOID WINAPI ScreenSwitchEnable16(WORD unused) { FIXME("(%04x): stub\n", unused); } /********************************************************************** * OemKeyScan (KEYBOARD.128) */ DWORD WINAPI OemKeyScan16(WORD wOemChar) { return OemKeyScan( wOemChar ); } /********************************************************************** * VkKeyScan (KEYBOARD.129) */ WORD WINAPI VkKeyScan16(CHAR cChar) { return VkKeyScanA( cChar ); } /****************************************************************************** * GetKeyboardType (KEYBOARD.130) */ INT16 WINAPI GetKeyboardType16(INT16 nTypeFlag) { return GetKeyboardType( nTypeFlag ); } /****************************************************************************** * MapVirtualKey (KEYBOARD.131) * * MapVirtualKey translates keycodes from one format to another */ UINT16 WINAPI MapVirtualKey16(UINT16 wCode, UINT16 wMapType) { return MapVirtualKeyA(wCode,wMapType); } /**************************************************************************** * GetKBCodePage (KEYBOARD.132) */ INT16 WINAPI GetKBCodePage16(void) { return GetKBCodePage(); } /**************************************************************************** * GetKeyNameText (KEYBOARD.133) */ INT16 WINAPI GetKeyNameText16(LONG lParam, LPSTR lpBuffer, INT16 nSize) { return GetKeyNameTextA( lParam, lpBuffer, nSize ); } /*********************************************************************** * AnsiToOemBuff (KEYBOARD.134) */ void WINAPI AnsiToOemBuff16( LPCSTR s, LPSTR d, UINT16 len ) { if (len != 0) CharToOemBuffA( s, d, len ); } /*********************************************************************** * OemToAnsiBuff (KEYBOARD.135) */ void WINAPI OemToAnsiBuff16( LPCSTR s, LPSTR d, UINT16 len ) { if (len != 0) OemToCharBuffA( s, d, len ); } ================================================ FILE: keyboard/keyboard.def ================================================ ; File generated automatically from keyboard.drv16.spec; do not edit! LIBRARY keyboard.drv16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: keyboard/keyboard.drv16.spec ================================================ 1 pascal -ret16 Inquire(ptr) Inquire16 2 pascal -ret16 Enable(segptr ptr) Enable16 3 pascal -ret16 Disable() Disable16 4 pascal -ret16 ToAscii(word word ptr ptr word) ToAscii16 5 pascal -ret16 AnsiToOem(str ptr) AnsiToOem16 6 pascal -ret16 OemToAnsi(str ptr) OemToAnsi16 7 pascal -ret16 SetSpeed(word) SetSpeed16 #8 stub WEP 9 stub INQUIREEX 10 stub TOASCIIEX 11 stub VKKEYSCANEX 12 stub MAPVIRTUALKEYEX 13 stub NEWTABLEEX 14 stub __EXPORTEDSTUB 100 pascal ScreenSwitchEnable(word) ScreenSwitchEnable16 #126 pascal GetTableSeg #127 pascal NewTable 128 pascal OemKeyScan(word) OemKeyScan16 129 pascal -ret16 VkKeyScan(word) VkKeyScan16 130 pascal -ret16 GetKeyboardType(word) GetKeyboardType16 131 pascal -ret16 MapVirtualKey(word word) MapVirtualKey16 132 pascal -ret16 GetKBCodePage() GetKBCodePage16 133 pascal -ret16 GetKeyNameText(long ptr word) GetKeyNameText16 134 pascal -ret16 AnsiToOemBuff(ptr ptr word) AnsiToOemBuff16 135 pascal -ret16 OemToAnsiBuff(ptr ptr word) OemToAnsiBuff16 #136 pascal EnableKbSysReq #137 pascal GetBiosKeyProc ================================================ FILE: keyboard/keyboard.vcxproj ================================================  Debug Win32 Release Win32 {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2} Win32Proj keyboard 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .drv16 false .drv16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;KEYBOARD_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;kernel32.lib;user32.lib keyboard.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;KEYBOARD_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false keyboard.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;kernel32.lib;user32.lib Document "$(OutDir)convspec" "%(Filename).spec" KEYBOARD > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" KEYBOARD > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: keyboard/keyboard.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: krnl386/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp) add_library(krnl386 SHARED ${SOURCE} krnl386.exe16.obj ${CMAKE_CURRENT_BINARY_DIR}/krnl386.def) include_directories(../wine) add_definitions(-DMZ_SUPPORTED -DENABLEREDIRECTSYSTEMDIR -D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(krnl386.exe16 KERNEL ARG --heap 65520) target_link_libraries(krnl386 libwine winecrt0 lz32.lib ntdll.lib ddraw.lib dsound.lib) set_target_properties(krnl386 PROPERTIES SUFFIX ".exe16") ================================================ FILE: krnl386/Makefile.in ================================================ MODULE = krnl386.exe16 IMPORTLIB = kernel IMPORTS = winecrt0 kernel32 ntdll DELAYIMPORTS = ddraw dsound user32 EXTRADLLFLAGS = -m16 -nodefaultlibs -Wb,--dll-name,kernel C_SRCS = \ atom.c \ dma.c \ dosaspi.c \ dosdev.c \ dosexe.c \ dosmem.c \ dosvm.c \ error.c \ file.c \ fpu.c \ global.c \ instr.c \ int09.c \ int10.c \ int13.c \ int15.c \ int16.c \ int21.c \ int25.c \ int26.c \ int2f.c \ int31.c \ int33.c \ int67.c \ interrupts.c \ ioports.c \ kernel.c \ local.c \ ne_module.c \ ne_segment.c \ registry.c \ relay.c \ resource.c \ selector.c \ snoop.c \ soundblaster.c \ syslevel.c \ task.c \ thunk.c \ timer.c \ utthunk.c \ vga.c \ vxd.c \ wowthunk.c RC_SRCS = version.rc ================================================ FILE: krnl386/atom.c ================================================ /* * Atom table functions - 16 bit variant * * Copyright 1993, 1994, 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* * Warning: The code assumes that LocalAlloc() returns a block aligned * on a 4-bytes boundary (because of the shifting done in * HANDLETOATOM). If this is not the case, the allocation code will * have to be changed. */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "winerror.h" #include "winternl.h" #include "wine/unicode.h" #include "wine/winbase16.h" #include "kernel16_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(atom); #define DEFAULT_ATOMTABLE_SIZE 37 #define MAX_ATOM_LEN 255 #define ATOMTOHANDLE(atom) ((HANDLE16)(atom) << 2) #define HANDLETOATOM(handle) ((ATOM)(0xc000 | ((handle) >> 2))) typedef struct { HANDLE16 next; WORD refCount; BYTE length; CHAR str[1]; } ATOMENTRY; typedef struct { WORD size; HANDLE16 entries[1]; } ATOMTABLE; /*********************************************************************** * ATOM_GetTable * * Return a pointer to the atom table of a given segment, creating * it if necessary. * * RETURNS * Pointer to table: Success * NULL: Failure */ static ATOMTABLE *ATOM_GetTable( BOOL create /* [in] Create */ ) { INSTANCEDATA *ptr = MapSL( MAKESEGPTR( CURRENT_DS, 0 ) ); if (ptr->atomtable) { ATOMTABLE *table = (ATOMTABLE *)((char *)ptr + ptr->atomtable); if (table->size) return table; } if (!create) return NULL; if (!InitAtomTable16( 0 )) return NULL; /* Reload ptr in case it moved in linear memory */ ptr = MapSL( MAKESEGPTR( CURRENT_DS, 0 ) ); return (ATOMTABLE *)((char *)ptr + ptr->atomtable); } /*********************************************************************** * ATOM_Hash * RETURNS * The hash value for the input string */ static WORD ATOM_Hash( WORD entries, /* [in] Total number of entries */ LPCSTR str, /* [in] Pointer to string to hash */ WORD len /* [in] Length of string */ ) { WORD i, hash = 0; TRACE("%x, %s, %x\n", entries, str, len); for (i = 0; i < len; i++) hash ^= toupper(str[i]) + i; return hash % entries; } /*********************************************************************** * ATOM_IsIntAtomA */ static BOOL ATOM_IsIntAtomA(LPCSTR atomstr,WORD *atomid) { UINT atom = 0; if (!HIWORD(atomstr)) atom = LOWORD(atomstr); else { if (*atomstr++ != '#') return FALSE; while (*atomstr >= '0' && *atomstr <= '9') { atom = atom * 10 + *atomstr - '0'; atomstr++; } if (*atomstr) return FALSE; } if (atom >= MAXINTATOM) { SetLastError( ERROR_INVALID_PARAMETER ); atom = 0; } *atomid = atom; return TRUE; } /*********************************************************************** * ATOM_MakePtr * * Make an ATOMENTRY pointer from a handle (obtained from GetAtomHandle()). */ static inline ATOMENTRY *ATOM_MakePtr( HANDLE16 handle /* [in] Handle */ ) { return MapSL( MAKESEGPTR( CURRENT_DS, handle ) ); } /*********************************************************************** * InitAtomTable (KERNEL.68) */ WORD WINAPI InitAtomTable16( WORD entries ) { int i; HANDLE16 handle; ATOMTABLE *table; /* Allocate the table */ if (!entries) entries = DEFAULT_ATOMTABLE_SIZE; /* sanity check */ handle = LocalAlloc16( LMEM_FIXED, FIELD_OFFSET( ATOMTABLE, entries[entries] )); if (!handle) return 0; table = MapSL( MAKESEGPTR( CURRENT_DS, handle ) ); table->size = entries; for (i = 0; i < entries; i++) table->entries[i] = 0; /* Store a pointer to the table in the instance data */ ((INSTANCEDATA *)MapSL( MAKESEGPTR( CURRENT_DS, 0 )))->atomtable = handle; return handle; } /*********************************************************************** * GetAtomHandle (KERNEL.73) */ HANDLE16 WINAPI GetAtomHandle16( ATOM atom ) { if (atom < MAXINTATOM) return 0; return ATOMTOHANDLE( atom ); } /*********************************************************************** * AddAtom (KERNEL.70) * * Windows DWORD aligns the atom entry size. * The remaining unused string space created by the alignment * gets padded with '\0's in a certain way to ensure * that at least one trailing '\0' remains. * * RETURNS * Atom: Success * 0: Failure */ ATOM WINAPI AddAtom16( LPCSTR str ) { char buffer[MAX_ATOM_LEN+1]; WORD hash; HANDLE16 entry; ATOMENTRY * entryPtr; ATOMTABLE * table; int len, ae_len; WORD iatom; if (ATOM_IsIntAtomA( str, &iatom )) return iatom; TRACE("%s\n",debugstr_a(str)); if (strlen(str) >= 256) return INVALID_ATOM; if (!(table = ATOM_GetTable( TRUE ))) return 0; /* Make a copy of the string to be sure it doesn't move in linear memory. */ lstrcpynA( buffer, str, sizeof(buffer) ); len = strlen( buffer ); hash = ATOM_Hash( table->size, buffer, len ); entry = table->entries[hash]; while (entry) { entryPtr = ATOM_MakePtr( entry ); if ((entryPtr->length == len) && (!strncasecmp( entryPtr->str, buffer, len ))) { entryPtr->refCount++; TRACE("-- existing 0x%x\n", entry); return HANDLETOATOM( entry ); } entry = entryPtr->next; } ae_len = (sizeof(ATOMENTRY)+len+3) & ~3; entry = LocalAlloc16( LMEM_FIXED, ae_len ); if (!entry) return 0; /* Reload the table ptr in case it moved in linear memory */ table = ATOM_GetTable( FALSE ); entryPtr = ATOM_MakePtr( entry ); entryPtr->next = table->entries[hash]; entryPtr->refCount = 1; entryPtr->length = len; memcpy( entryPtr->str, buffer, len); /* Some applications _need_ the '\0' padding provided by memset */ /* Note that 1 byte of the str is accounted for in the ATOMENTRY struct */ memset( entryPtr->str+len, 0, ae_len - sizeof(ATOMENTRY) - (len - 1)); table->entries[hash] = entry; TRACE("-- new 0x%x\n", entry); return HANDLETOATOM( entry ); } /*********************************************************************** * DeleteAtom (KERNEL.71) */ ATOM WINAPI DeleteAtom16( ATOM atom ) { ATOMENTRY * entryPtr; ATOMTABLE * table; HANDLE16 entry, *prevEntry; WORD hash; if (atom < MAXINTATOM) return 0; /* Integer atom */ TRACE("0x%x\n",atom); if (!(table = ATOM_GetTable( FALSE ))) return 0; entry = ATOMTOHANDLE( atom ); entryPtr = ATOM_MakePtr( entry ); /* Find previous atom */ hash = ATOM_Hash( table->size, entryPtr->str, entryPtr->length ); prevEntry = &table->entries[hash]; while (*prevEntry && *prevEntry != entry) { ATOMENTRY * prevEntryPtr = ATOM_MakePtr( *prevEntry ); prevEntry = &prevEntryPtr->next; } if (!*prevEntry) return atom; /* Delete atom */ if (--entryPtr->refCount == 0) { *prevEntry = entryPtr->next; LocalFree16( entry ); } return 0; } /*********************************************************************** * FindAtom (KERNEL.69) */ ATOM WINAPI FindAtom16( LPCSTR str ) { ATOMTABLE * table; WORD hash,iatom; HANDLE16 entry; int len; TRACE("%s\n",debugstr_a(str)); if (ATOM_IsIntAtomA( str, &iatom )) return iatom; if ((len = strlen( str )) > 255) len = 255; if (!(table = ATOM_GetTable( FALSE ))) return 0; hash = ATOM_Hash( table->size, str, len ); entry = table->entries[hash]; while (entry) { ATOMENTRY * entryPtr = ATOM_MakePtr( entry ); if ((entryPtr->length == len) && (!strncasecmp( entryPtr->str, str, len ))) { TRACE("-- found %x\n", entry); return HANDLETOATOM( entry ); } entry = entryPtr->next; } TRACE("-- not found\n"); return 0; } /*********************************************************************** * GetAtomName (KERNEL.72) */ UINT16 WINAPI GetAtomName16( ATOM atom, LPSTR buffer, INT16 count ) { ATOMENTRY * entryPtr; HANDLE16 entry; char * strPtr; INT len; char text[8]; TRACE("%x\n",atom); if (!count) return 0; if (atom == INVALID_ATOM) return 0; if (atom < MAXINTATOM) { sprintf( text, "#%d", atom ); len = strlen(text); strPtr = text; } else { if (!ATOM_GetTable( FALSE )) return 0; entry = ATOMTOHANDLE( atom ); entryPtr = ATOM_MakePtr( entry ); len = entryPtr->length; strPtr = entryPtr->str; } if (len >= count) len = count-1; memcpy( buffer, strPtr, len ); buffer[len] = '\0'; return len; } ================================================ FILE: krnl386/compat.c ================================================ #include #include "kernel16_private.h" // this only currently will get the flags for the first task // it might be work on a per-task basis static char modes[256]; BOOL WINAPI krnl386_get_compat_mode(const LPCSTR mode) { int size = strlen(mode); if (size >= 256) return FALSE; char lowermode[256]; for (int i = 0; i < size; i++) lowermode[i] = tolower(mode[i]); lowermode[size] = '\0'; return strstr(modes, lowermode) ? TRUE : FALSE; } void WINAPI krnl386_set_compat_path(const LPCSTR path) { HKEY hkey; LSTATUS stat = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers", &hkey); modes[0] = '\0'; if (stat) return; int size = 256; int type; char drive[MAX_PATH]; char smvalue[256]; char *value = path; strncpy(drive, path, 3); drive[3] = '\0'; type = GetDriveTypeA(drive); if ((type == DRIVE_CDROM) || (type == DRIVE_REMOVABLE) || (type == DRIVE_REMOTE)) { // Based on reactos layer.c HANDLE FindHandle; WIN32_FIND_DATAA FindData; DWORD SignMedia = 0; char *filepath = strrchr(path, '\\'); if (!filepath) return; int len = filepath - path + 1; strncpy(drive, path, len); int count = 9; drive[len] = '*'; drive[len + 1] = '\0'; FindHandle = FindFirstFileA(drive, &FindData); if (FindHandle != INVALID_HANDLE_VALUE) { do { if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && FindData.nFileSizeLow) { SignMedia = ((SignMedia << 1) | (SignMedia >> 31)) ^ FindData.nFileSizeLow; count--; } } while (FindNextFileA(FindHandle, &FindData) && count); FindClose(FindHandle); } drive[len - 1] = '\0'; filepath = strrchr(drive, '\\'); if (!filepath) filepath = path + 3; else filepath = path + (filepath - drive) + 1; snprintf(smvalue, 256, "SIGN.MEDIA=%X %s", SignMedia, filepath); value = smvalue; } stat = RegQueryValueExA(hkey, value, 0, &type, &modes, &size); RegCloseKey(hkey); if (stat || (type != REG_SZ)) { modes[0] = '\0'; return; } for (int i = 0; i < size; i++) modes[i] = tolower(modes[i]); return; } ULONG WINAPI get_windows_build() { static ULONG build = 0; if (build) return build; RTL_OSVERSIONINFOEXW winver; if (RtlGetVersion(&winver)) return 0; build = winver.dwBuildNumber; return build; } ================================================ FILE: krnl386/conf.c ================================================ #include static BOOL init; static CHAR filename[MAX_PATH]; static CRITICAL_SECTION critical_section; DWORD WINAPI krnl386_get_config_string(LPCSTR appname, LPCSTR keyname, LPCSTR def, LPSTR ret, DWORD size); DWORD WINAPI krnl386_get_config_int(LPCSTR appname, LPCSTR keyname, INT def); void init_config() { init = TRUE; InitializeCriticalSection(&critical_section); EnterCriticalSection(&critical_section); DWORD filename_len; filename_len = GetModuleFileNameA(GetModuleHandleA(NULL), filename, MAX_PATH); if (!filename_len) return 0; CHAR ininame[] = "otvdm.ini"; if (_countof(ininame) + filename_len >= MAX_PATH) return 0; LPSTR last = strrchr(filename, '\\'); memcpy(last + 1, ininame, sizeof(ininame)); LeaveCriticalSection(&critical_section); } DWORD WINAPI krnl386_get_config_string(LPCSTR appname, LPCSTR keyname, LPCSTR def, LPSTR ret, DWORD size) { if (!init) init_config(); EnterCriticalSection(&critical_section); DWORD result = GetPrivateProfileStringA(appname, keyname, def, ret, size, filename); LeaveCriticalSection(&critical_section); return result; } DWORD WINAPI krnl386_get_config_int(LPCSTR appname, LPCSTR keyname, INT def) { if (!init) init_config(); EnterCriticalSection(&critical_section); DWORD result = GetPrivateProfileIntA(appname, keyname, def, filename); LeaveCriticalSection(&critical_section); return result; } ================================================ FILE: krnl386/dma.c ================================================ /* * DMA Emulation * * Copyright 2002 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include "windef.h" #include "winbase.h" #include "dosexe.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(dma); /* Internal registers of the 2 DMA chips which control 8 DMA channels */ static DWORD DMA_BaseAddress[8]; static WORD DMA_ByteCount[8]; static DWORD DMA_CurrentBaseAddress[8]; static WORD DMA_CurrentByteCount[8]; static BYTE DMA_Command[8]; static BYTE DMA_Mask[2]={0x0F,0x0F}; static BYTE DMA_Status[2]={0x00,0x00}; static BOOL DMA_Toggle[2]={FALSE,FALSE}; /* * DMA_Transfer : Try to perform a transfer of reqlen elements (8 or 16 bits) * on the specified channel and return the elements transferred */ int DMA_Transfer(int channel,int reqlen,void* buffer) { int i,size,ret=0; int opmode,increment,autoinit,trmode,dmachip; int regmode = DMA_Command[channel]; char *p,*dmabuf; dmabuf = buffer; dmachip = (channel<4) ? 0 : 1; TRACE("DMA_Command = %x reqlen=%d\n",regmode,reqlen); /* Exit if channel is masked */ if (DMA_Mask[dmachip]&(1<<(channel&3))) return 0; opmode = (regmode & 0xC0) >> 6; increment = !(regmode & 0x20); autoinit = regmode & 0x10; trmode = (regmode & 0x0C) >> 2; /* Transfer size : 8 bits for channels 0..3, 16 bits for channels 4..7 */ size = (channel<4) ? 1 : 2; /* Process operating mode */ switch(opmode) { case 0: /* Request mode */ FIXME("Request Mode - Not Implemented\n"); return 0; case 1: /* Single Mode */ break; case 2: /* Request mode */ FIXME("Block Mode - Not Implemented\n"); return 0; case 3: /* Cascade Mode */ ERR("Cascade Mode should not be used by regular apps\n"); return 0; } /* Perform one the 4 transfer modes */ if (trmode == 4) { /* Illegal */ ERR("DMA Transfer Type Illegal\n"); return 0; } ret = min(DMA_CurrentByteCount[channel],reqlen); /* Update DMA registers */ DMA_CurrentByteCount[channel]-=ret; if (increment) DMA_CurrentBaseAddress[channel] += ret * size; else DMA_CurrentBaseAddress[channel] -= ret * size; switch(trmode) { case 0: /* Verification (no real transfer)*/ TRACE("Verification DMA operation\n"); break; case 1: /* Write */ TRACE("Perform Write transfer of %d bytes at %x with count %x\n",ret, DMA_CurrentBaseAddress[channel],DMA_CurrentByteCount[channel]); if (increment) memcpy((void*)DMA_CurrentBaseAddress[channel],dmabuf,ret*size); else for(i=0,p=(char*)DMA_CurrentBaseAddress[channel];i>2):(port>>1); dmachip = (channel<4) ? 0 : 1; if (!DMA_Toggle[dmachip]) DMA_BaseAddress[channel]=(DMA_BaseAddress[channel] & ~0xFF)|(val & 0xFF); else { DMA_BaseAddress[channel]=(DMA_BaseAddress[channel] & (~(0xFF << 8)))|((val & 0xFF) << 8); DMA_CurrentBaseAddress[channel] = DMA_BaseAddress[channel]; TRACE("Write Base Address = %x\n",DMA_BaseAddress[channel]); } DMA_Toggle[dmachip] = !DMA_Toggle[dmachip]; break; case 0x01: case 0x03: case 0x05: case 0x07: case 0xC2: case 0xC6: case 0xCA: case 0xCE: /* Count*/ channel = ((port-1)&0xC0)?(((port-1)-0xC0)>>2):(port>>1); dmachip = (channel<4) ? 0 : 1; if (!DMA_Toggle[dmachip]) DMA_ByteCount[channel]=(DMA_ByteCount[channel] & ~0xFF)|((val+1) & 0xFF); else { DMA_ByteCount[channel]=(DMA_ByteCount[channel] & (~(0xFF << 8)))|(((val+1) & 0xFF) << 8); DMA_CurrentByteCount[channel] = DMA_ByteCount[channel]; TRACE("Write Count = %x.\n",DMA_ByteCount[channel]); } DMA_Toggle[dmachip] = !DMA_Toggle[dmachip]; break; /* Low Page Base Address */ case 0x87: DMA_BaseAddress[0]=(DMA_BaseAddress[0] & 0xFF00FFFF)|((val & 0xFF) << 16); break; case 0x83: DMA_BaseAddress[1]=(DMA_BaseAddress[1] & 0xFF00FFFF)|((val & 0xFF) << 16); break; case 0x81: DMA_BaseAddress[2]=(DMA_BaseAddress[2] & 0xFF00FFFF)|((val & 0xFF) << 16); break; case 0x82: DMA_BaseAddress[3]=(DMA_BaseAddress[3] & 0xFF00FFFF)|((val & 0xFF) << 16); break; case 0x8B: DMA_BaseAddress[5]=(DMA_BaseAddress[5] & 0xFF00FFFF)|((val & 0xFF) << 16); break; case 0x89: DMA_BaseAddress[6]=(DMA_BaseAddress[6] & 0xFF00FFFF)|((val & 0xFF) << 16); break; case 0x8A: DMA_BaseAddress[7]=(DMA_BaseAddress[7] & 0xFF00FFFF)|((val & 0xFF) << 16); break; /* Low Page Base Address (only 4 lower bits are significant) */ case 0x487: DMA_BaseAddress[0]=(DMA_BaseAddress[0] & 0x00FFFFFF)|((val & 0x0F) << 24); break; case 0x483: DMA_BaseAddress[1]=(DMA_BaseAddress[1] & 0x00FFFFFF)|((val & 0x0F) << 24); break; case 0x481: DMA_BaseAddress[2]=(DMA_BaseAddress[2] & 0x00FFFFFF)|((val & 0x0F) << 24); break; case 0x482: DMA_BaseAddress[3]=(DMA_BaseAddress[3] & 0x00FFFFFF)|((val & 0x0F) << 24); break; case 0x48B: DMA_BaseAddress[5]=(DMA_BaseAddress[5] & 0x00FFFFFF)|((val & 0x0F) << 24); break; case 0x489: DMA_BaseAddress[6]=(DMA_BaseAddress[6] & 0x00FFFFFF)|((val & 0x0F) << 24); break; case 0x48A: DMA_BaseAddress[7]=(DMA_BaseAddress[7] & 0x00FFFFFF)|((val & 0x0F) << 24); break; case 0x08: case 0xD0: /* Command */ FIXME("Write Command (%x) - Not Implemented\n",val); break; case 0x0B: case 0xD6: /* Mode */ TRACE("Write Mode (%x)\n",val); DMA_Command[((port==0xD6)?4:0)+(val&0x3)]=val; switch(val>>6) { case 0: /* Request mode */ FIXME("Request Mode - Not Implemented\n"); break; case 1: /* Single Mode */ break; case 2: /* Block mode */ FIXME("Block Mode - Not Implemented\n"); break; case 3: /* Cascade Mode */ ERR("Cascade Mode should not be used by regular apps\n"); break; } break; case 0x0A: case 0xD4: /* Write Single Mask Bit */ TRACE("Write Single Mask Bit (%x)\n",val); dmachip = (port==0x0A) ? 0 : 1; if (val&4) DMA_Mask[dmachip] |= 1<<(val&3); else DMA_Mask[dmachip] &= ~(1<<(val&3)); break; case 0x0F: case 0xDE: /* Write All Mask Bits (only 4 lower bits are significant */ FIXME("Write All Mask Bits (%x)\n",val); dmachip = (port==0x0F) ? 0 : 1; DMA_Mask[dmachip] = val & 0x0F; break; case 0x09: case 0xD2: /* Software DRQx Request */ FIXME("Software DRQx Request (%x) - Not Implemented\n",val); break; case 0x0C: case 0xD8: /* Reset DMA Pointer Flip-Flop */ TRACE("Reset Flip-Flop\n"); DMA_Toggle[port==0xD8]=FALSE; break; case 0x0D: case 0xDA: /* Master Reset */ TRACE("Master Reset\n"); dmachip = (port==0x0D) ? 0 : 1; /* Reset DMA Pointer Flip-Flop */ DMA_Toggle[dmachip]=FALSE; /* Mask all channels */ DMA_Mask[dmachip] = 0x0F; break; case 0x0E: case 0xDC: /* Reset Mask Register */ FIXME("Reset Mask Register\n"); dmachip = (port==0x0E) ? 0 : 1; /* Unmask all channels */ DMA_Mask[dmachip] = 0x00; break; } } BYTE DMA_ioport_in( WORD port ) { int channel,dmachip; BYTE res = 0; switch(port) { case 0x00: case 0x02: case 0x04: case 0x06: case 0xC0: case 0xC4: case 0xC8: case 0xCC: /* Base Address*/ channel = (port&0xC0)?((port-0xC0)>>2):(port>>1); dmachip = (channel<4) ? 0 : 1; if (!DMA_Toggle[dmachip]) res = DMA_CurrentBaseAddress[channel] & 0xFF; else { res = (DMA_CurrentBaseAddress[channel] & (0xFF << 8))>>8; TRACE("Read Current Base Address = %x\n",DMA_CurrentBaseAddress[channel]); } DMA_Toggle[dmachip] = !DMA_Toggle[dmachip]; break; case 0x01: case 0x03: case 0x05: case 0x07: case 0xC2: case 0xC6: case 0xCA: case 0xCE: /* Count*/ channel = ((port-1)&0xC0)?(((port-1)-0xC0)>>2):(port>>1); dmachip = (channel<4) ? 0 : 1; if (!DMA_Toggle[dmachip]) res = DMA_CurrentByteCount[channel]; else { res = DMA_CurrentByteCount[channel] >> 8; TRACE("Read Current Count = %x.\n",DMA_CurrentByteCount[channel]); } DMA_Toggle[dmachip] = !DMA_Toggle[dmachip]; break; /* Low Page Base Address */ case 0x87: res = DMA_BaseAddress[0] >> 16; break; case 0x83: res = DMA_BaseAddress[1] >> 16; break; case 0x81: res = DMA_BaseAddress[2] >> 16; break; case 0x82: res = DMA_BaseAddress[3] >> 16; break; case 0x8B: res = DMA_BaseAddress[5] >> 16; break; case 0x89: res = DMA_BaseAddress[6] >> 16; break; case 0x8A: res = DMA_BaseAddress[7] >> 16; break; /* High Page Base Address */ case 0x487: res = DMA_BaseAddress[0] >> 24; break; case 0x483: res = DMA_BaseAddress[1] >> 24; break; case 0x481: res = DMA_BaseAddress[2] >> 24; break; case 0x482: res = DMA_BaseAddress[3] >> 24; break; case 0x48B: res = DMA_BaseAddress[5] >> 24; break; case 0x489: res = DMA_BaseAddress[6] >> 24; break; case 0x48A: res = DMA_BaseAddress[7] >> 24; break; case 0x08: case 0xD0: /* Status */ TRACE("Status Register Read\n"); res = DMA_Status[(port==0x08)?0:1]; break; case 0x0D: case 0xDA: /* Temporary */ FIXME("Temporary Register Read- Not Implemented\n"); break; } return res; } ================================================ FILE: krnl386/dosaspi.c ================================================ /* * Copyright 2000 David Elliott * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include "windef.h" #include "winbase.h" #include "wine/windef16.h" #include "wine/winaspi.h" #include "wine/debug.h" #include "dosexe.h" #include "winerror.h" WINE_DEFAULT_DEBUG_CHANNEL(aspi); static HINSTANCE hWNASPI32 = INVALID_HANDLE_VALUE; static DWORD (__cdecl *pSendASPI32Command) (LPSRB) = NULL; static void DOSASPI_PostProc( SRB_ExecSCSICmd *lpPRB ) { DWORD ptrSRB; LPSRB16 lpSRB16; memcpy(&ptrSRB,lpPRB->SenseArea + lpPRB->SRB_SenseLen,sizeof(DWORD)); TRACE("Copying data back to DOS client at 0x%8x\n",ptrSRB); lpSRB16 = PTR_REAL_TO_LIN(SELECTOROF(ptrSRB),OFFSETOF(ptrSRB)); lpSRB16->cmd.SRB_TargStat = lpPRB->SRB_TargStat; lpSRB16->cmd.SRB_HaStat = lpPRB->SRB_HaStat; memcpy(lpSRB16->cmd.CDBByte + lpSRB16->cmd.SRB_CDBLen,lpPRB->SenseArea,lpSRB16->cmd.SRB_SenseLen); /* Now do posting */ if( lpPRB->SRB_Status == SS_SECURITY_VIOLATION ) { /* SS_SECURITY_VIOLATION isn't defined in DOS ASPI */ TRACE("Returning SS_NO_DEVICE for SS_SECURITY_VIOLATION\n"); lpPRB->SRB_Status = SS_NO_DEVICE; } lpSRB16->cmd.SRB_Status = lpPRB->SRB_Status; TRACE("SRB_Status = 0x%x\n", lpPRB->SRB_Status); HeapFree(GetProcessHeap(),0,lpPRB); if( (lpSRB16->cmd.SRB_Flags & SRB_POSTING) && lpSRB16->cmd.SRB_PostProc ) { CONTEXT ctx; /* The stack should look like this on entry to proc * NOTE: the SDK draws the following diagram bass awkwardly, use this one * to avoid being confused. Remember, the act of pushing something on * an intel stack involves decreasing the stack pointer by the size of * the data, and then copying the data at the new SP. */ /*************************** * ... Other crap that is already on the stack ... * Segment of SRB Pointer <- SP+6 * Offset of SRB Pointer <- SP+4 * Segment of return address <- SP+2 * Offset of return address <- SP+0 */ /* FIXME: I am about 99% sure what is here is correct, * but this code has never been tested (and probably * won't be either until someone finds a DOS program * that actually uses a Post Routine) */ /* Zero everything */ memset(&ctx, 0, sizeof(ctx)); ctx.EFlags |= V86_FLAG; /* CS:IP is routine to call */ ctx.SegCs = SELECTOROF(lpSRB16->cmd.SRB_PostProc); ctx.Eip = OFFSETOF(lpSRB16->cmd.SRB_PostProc); /* DPMI_CallRMProc will push the pointer to the stack * it is given (in this case &ptrSRB) with length * 2*sizeof(WORD), that is, it copies the contents * of ptrSRB onto the stack, and decs sp by 2*sizeof(WORD). * After doing that, it pushes the return address * onto the stack (so we don't need to worry about that) * So the stack should be okay for the PostProc */ if(DPMI_CallRMProc(&ctx, (LPWORD)&ptrSRB, 2, FALSE)) { TRACE("DPMI_CallRMProc returned nonzero (error) status\n"); } } /* if ((SRB_Flags&SRB_POSTING) && SRB_PostProc) */ } static DWORD ASPI_SendASPIDOSCommand(DWORD ptrSRB) { PSRB_ExecSCSICmd lpPRB; DWORD retval; union tagSRB16 * lpSRB16; lpSRB16 = PTR_REAL_TO_LIN(SELECTOROF(ptrSRB),OFFSETOF(ptrSRB)); retval = SS_ERR; switch( lpSRB16->common.SRB_Cmd ) { case SC_HA_INQUIRY: TRACE("SC_HA_INQUIRY\n"); /* Format is identical in this case */ retval = (*pSendASPI32Command)((LPSRB)lpSRB16); break; case SC_GET_DEV_TYPE: TRACE("SC_GET_DEV_TYPE\n"); /* Format is identical in this case */ retval = (*pSendASPI32Command)((LPSRB)lpSRB16); break; case SC_EXEC_SCSI_CMD: TRACE("SC_EXEC_SCSI_CMD\n"); TRACE("Copying data from DOS client at 0x%8x\n",ptrSRB); lpPRB = HeapAlloc(GetProcessHeap(),0,sizeof(SRB)+lpSRB16->cmd.SRB_SenseLen+sizeof(DWORD)); #define srb_dos_to_w32(name) \ lpPRB->SRB_##name = lpSRB16->cmd.SRB_##name srb_dos_to_w32(Cmd); srb_dos_to_w32(Status); srb_dos_to_w32(HaId); srb_dos_to_w32(BufLen); srb_dos_to_w32(SenseLen); srb_dos_to_w32(CDBLen); srb_dos_to_w32(Target); srb_dos_to_w32(Lun); #undef srb_dos_to_w32 /* Allow certain flags to go on to WNASPI32, we also need * to make sure SRB_POSTING is enabled */ lpPRB->SRB_Flags = SRB_POSTING | (lpSRB16->cmd.SRB_Flags&(SRB_DIR_IN|SRB_DIR_OUT|SRB_ENABLE_RESIDUAL_COUNT)); /* Pointer to data buffer */ lpPRB->SRB_BufPointer = PTR_REAL_TO_LIN(SELECTOROF(lpSRB16->cmd.SRB_BufPointer), OFFSETOF(lpSRB16->cmd.SRB_BufPointer)); /* Copy CDB in */ memcpy(&lpPRB->CDBByte[0],&lpSRB16->cmd.CDBByte[0],lpSRB16->cmd.SRB_CDBLen); /* Set post proc to our post proc */ lpPRB->SRB_PostProc = DOSASPI_PostProc; /* Stick the DWORD after all the sense info */ memcpy(lpPRB->SenseArea + lpPRB->SRB_SenseLen,&ptrSRB,sizeof(DWORD)); retval = (*pSendASPI32Command)((LPSRB)lpPRB); break; case SC_ABORT_SRB: TRACE("SC_ABORT_SRB\n"); /* Would need some sort of table of active shit */ break; case SC_RESET_DEV: TRACE("SC_RESET_DEV\n"); break; default: TRACE("Unknown command code\n"); break; } TRACE("Returning %x\n", retval ); return retval; } static void WINAPI ASPI_DOS_func(CONTEXT *context) { WORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); DWORD ptrSRB = *(DWORD *)&stack[2]; ASPI_SendASPIDOSCommand(ptrSRB); /* simulate a normal RETF sequence as required by DPMI CallRMProcFar */ context->Eip = *(stack++); context->SegCs = *(stack++); context->Esp += 2*sizeof(WORD); } /********************************************************************** * ASPIHandler * * returns the address of a real mode callback to ASPI_DOS_func() */ void DOSVM_ASPIHandler( CONTEXT *context ) { FARPROC16 *p = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); TRACE("DOS ASPI opening\n"); if ((CX_reg(context) == 4) || (CX_reg(context) == 5)) { if( hWNASPI32 == INVALID_HANDLE_VALUE ) { TRACE("Loading WNASPI32\n"); hWNASPI32 = LoadLibraryExA("WNASPI32", 0, 0); } if( hWNASPI32 == INVALID_HANDLE_VALUE ) { ERR("Error loading WNASPI32\n"); goto error_exit; } /* Get SendASPI32Command by Ordinal 2 */ /* Cast to correct argument/return types */ pSendASPI32Command = (DWORD (*)(LPSRB))GetProcAddress(hWNASPI32, (LPCSTR)2); if( !pSendASPI32Command ) { ERR("Error getting ordinal 2 from WNASPI32\n"); goto error_exit; } *p = DPMI_AllocInternalRMCB(ASPI_DOS_func); TRACE("allocated real mode proc %p\n", *p); SET_AX( context, CX_reg(context) ); return; } error_exit: /* Return some error... General Failure sounds okay */ SET_AX( context, ERROR_GEN_FAILURE ); SET_CFLAG(context); } ================================================ FILE: krnl386/dosdev.c ================================================ /* * DOS devices * * Copyright 1999 Ove Kåven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include "wine/winbase16.h" #include "dosexe.h" #include "wine/debug.h" #include "pshpack1.h" /* Warning: need to return LOL ptr w/ offset 0 (&ptr_first_DPB) to programs ! */ typedef struct _DOS_LISTOFLISTS { WORD CX_Int21_5e01; /* -24d contents of CX from INT 21/AX=5E01h */ WORD LRU_count_FCB_cache; /* -22d */ WORD LRU_count_FCB_open; /* -20d */ DWORD OEM_func_handler; /* -18d OEM function of INT 21/AH=F8h */ WORD INT21_offset; /* -14d offset in DOS CS of code to return from INT 21 call */ WORD sharing_retry_count; /* -12d */ WORD sharing_retry_delay; /* -10d */ DWORD ptr_disk_buf; /* -8d ptr to current disk buf */ WORD offs_unread_CON; /* -4d pointer in DOS data segment of unread CON input */ WORD seg_first_MCB; /* -2d */ DWORD ptr_first_DPB; /* 00 */ DWORD ptr_first_SysFileTable; /* 04 */ DWORD ptr_clock_dev_hdr; /* 08 */ DWORD ptr_CON_dev_hdr; /* 0C */ WORD max_byte_per_sec; /* 10 maximum bytes per sector of any block device */ DWORD ptr_disk_buf_info; /* 12 */ DWORD ptr_array_CDS; /* 16 current directory structure */ DWORD ptr_sys_FCB; /* 1A */ WORD nr_protect_FCB; /* 1E */ BYTE nr_block_dev; /* 20 */ BYTE nr_avail_drive_letters; /* 21 */ DOS_DEVICE_HEADER NUL_dev; /* 22 */ BYTE nr_drives_JOINed; /* 34 */ WORD ptr_spec_prg_names; /* 35 */ DWORD ptr_SETVER_prg_list; /* 37 */ WORD DOS_HIGH_A20_func_offs;/* 3B */ WORD PSP_last_exec; /* 3D if DOS in HMA: PSP of program executed last; if DOS low: 0000h */ WORD BUFFERS_val; /* 3F */ WORD BUFFERS_nr_lookahead; /* 41 */ BYTE boot_drive; /* 43 */ BYTE flag_DWORD_moves; /* 44 01h for 386+, 00h otherwise */ WORD size_extended_mem; /* 45 size of extended mem in KB */ SEGPTR wine_rm_lol; /* -- wine: Real mode pointer to LOL */ SEGPTR wine_pm_lol; /* -- wine: Protected mode pointer to LOL */ } DOS_LISTOFLISTS; #include "poppack.h" #define CON_BUFFER 128 enum strategy { SYSTEM_STRATEGY_NUL, SYSTEM_STRATEGY_CON, NB_SYSTEM_STRATEGIES }; static void *strategy_data[NB_SYSTEM_STRATEGIES]; #define LJMP 0xea /* prototypes */ static void WINAPI nul_strategy(CONTEXT*ctx); static void WINAPI nul_interrupt(CONTEXT*ctx); static void WINAPI con_strategy(CONTEXT*ctx); static void WINAPI con_interrupt(CONTEXT*ctx); /* devices */ static const WINEDEV devs[] = { { "NUL ", ATTR_CHAR|ATTR_NUL|ATTR_DEVICE, nul_strategy, nul_interrupt }, { "CON ", ATTR_CHAR|ATTR_STDIN|ATTR_STDOUT|ATTR_FASTCON|ATTR_NOTEOF|ATTR_DEVICE, con_strategy, con_interrupt } }; #define NR_DEVS (sizeof(devs)/sizeof(WINEDEV)) /* DOS data segment */ typedef struct { DOS_LISTOFLISTS lol; DOS_DEVICE_HEADER dev[NR_DEVS-1]; DOS_DEVICE_HEADER *last_dev; /* ptr to last registered device driver */ WINEDEV_THUNK thunk[NR_DEVS]; REQ_IO req; BYTE buffer[CON_BUFFER]; } DOS_DATASEG; #define DOS_DATASEG_OFF(xxx) FIELD_OFFSET(DOS_DATASEG, xxx) static DWORD DOS_LOLSeg; static struct _DOS_LISTOFLISTS * DOSMEM_LOL(void) { return PTR_REAL_TO_LIN(HIWORD(DOS_LOLSeg),0); } /* the device implementations */ static void do_lret(CONTEXT*ctx) { WORD *stack = CTX_SEG_OFF_TO_LIN(ctx, ctx->SegSs, ctx->Esp); ctx->Eip = *(stack++); ctx->SegCs = *(stack++); ctx->Esp += 2*sizeof(WORD); } static void do_strategy(CONTEXT*ctx, int id, int extra) { REQUEST_HEADER *hdr = CTX_SEG_OFF_TO_LIN(ctx, ctx->SegEs, ctx->Ebx); void **hdr_ptr = strategy_data[id]; if (!hdr_ptr) { hdr_ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(void *)+extra); strategy_data[id] = hdr_ptr; } *hdr_ptr = hdr; do_lret(ctx); } static REQUEST_HEADER * get_hdr(int id, void**extra) { void **hdr_ptr = strategy_data[id]; if (extra) *extra = hdr_ptr ? (void*)(hdr_ptr+1) : NULL; return hdr_ptr ? *hdr_ptr : NULL; } static void WINAPI nul_strategy(CONTEXT*ctx) { do_strategy(ctx, SYSTEM_STRATEGY_NUL, 0); } static void WINAPI nul_interrupt(CONTEXT*ctx) { REQUEST_HEADER *hdr = get_hdr(SYSTEM_STRATEGY_NUL, NULL); /* eat everything and recycle nothing */ switch (hdr->command) { case CMD_INPUT: ((REQ_IO*)hdr)->count = 0; hdr->status = STAT_DONE; break; case CMD_SAFEINPUT: hdr->status = STAT_DONE|STAT_BUSY; break; default: hdr->status = STAT_DONE; } do_lret(ctx); } static void WINAPI con_strategy(CONTEXT*ctx) { do_strategy(ctx, SYSTEM_STRATEGY_CON, sizeof(int)); } static void WINAPI con_interrupt(CONTEXT*ctx) { int *scan; REQUEST_HEADER *hdr = get_hdr(SYSTEM_STRATEGY_CON,(void **)&scan); BIOSDATA *bios = DOSVM_BiosData(); WORD CurOfs = bios->NextKbdCharPtr; DOS_LISTOFLISTS *lol = DOSMEM_LOL(); DOS_DATASEG *dataseg = (DOS_DATASEG *)lol; BYTE *linebuffer = dataseg->buffer; BYTE *curbuffer = (lol->offs_unread_CON) ? (((BYTE*)dataseg) + lol->offs_unread_CON) : NULL; DOS_DEVICE_HEADER *con = dataseg->dev; DWORD w; switch (hdr->command) { case CMD_INPUT: { REQ_IO *io = (REQ_IO *)hdr; WORD count = io->count, len = 0; BYTE *buffer = CTX_SEG_OFF_TO_LIN(ctx, SELECTOROF(io->buffer), (DWORD)OFFSETOF(io->buffer)); hdr->status = STAT_BUSY; /* first, check whether we already have data in line buffer */ if (curbuffer) { /* yep, copy as much as we can */ BYTE data = 0; while ((lenoffs_unread_CON = 0; curbuffer = NULL; /* if we're not in raw mode, call it a day */ if (!(con->attr & ATTR_RAW)) { hdr->status = STAT_DONE; io->count = len; break; } } else { /* still some data left */ lol->offs_unread_CON = curbuffer - (BYTE*)lol; /* but buffer was filled, we're done */ hdr->status = STAT_DONE; io->count = len; break; } } /* if we're in raw mode, we just need to fill the buffer */ if (con->attr & ATTR_RAW) { while (lenFirstKbdCharPtr) { /* no input available yet, so wait... */ DOSVM_Wait( ctx ); } /* read from keyboard queue (call int16?) */ data = ((WORD*)bios)[CurOfs]; CurOfs += 2; if (CurOfs >= bios->KbdBufferEnd) CurOfs = bios->KbdBufferStart; bios->NextKbdCharPtr = CurOfs; /* if it's an extended key, save scancode */ if (LOBYTE(data) == 0) *scan = HIBYTE(data); /* store ASCII char in buffer */ buffer[len++] = LOBYTE(data); } } else { /* we're not in raw mode, so we need to do line input... */ while (TRUE) { WORD data; /* check for new keyboard input */ while (CurOfs == bios->FirstKbdCharPtr) { /* no input available yet, so wait... */ DOSVM_Wait( ctx ); } /* read from keyboard queue (call int16?) */ data = ((WORD*)bios)[CurOfs]; CurOfs += 2; if (CurOfs >= bios->KbdBufferEnd) CurOfs = bios->KbdBufferStart; bios->NextKbdCharPtr = CurOfs; if (LOBYTE(data) == '\r') { /* it's the return key, we're done */ linebuffer[len++] = LOBYTE(data); break; } else if (LOBYTE(data) >= ' ') { /* a character */ if ((len+1)0) { len--; WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), "\b \b", 3, &w, NULL); } break; } } if (len > count) { /* save rest of line for later */ lol->offs_unread_CON = linebuffer - (BYTE*)lol + count; len = count; } memcpy(buffer, linebuffer, len); } hdr->status = STAT_DONE; io->count = len; } break; case CMD_SAFEINPUT: if (curbuffer) { /* some line input waiting */ hdr->status = STAT_DONE; ((REQ_SAFEINPUT*)hdr)->data = *curbuffer; } else if (con->attr & ATTR_RAW) { if (CurOfs == bios->FirstKbdCharPtr) { /* no input */ hdr->status = STAT_DONE|STAT_BUSY; } else { /* some keyboard input waiting */ hdr->status = STAT_DONE; ((REQ_SAFEINPUT*)hdr)->data = ((BYTE*)bios)[CurOfs]; } } else { /* no line input */ hdr->status = STAT_DONE|STAT_BUSY; } break; case CMD_INSTATUS: if (curbuffer) { /* we have data */ hdr->status = STAT_DONE; } else if (con->attr & ATTR_RAW) { if (CurOfs == bios->FirstKbdCharPtr) { /* no input */ hdr->status = STAT_DONE|STAT_BUSY; } else { /* some keyboard input waiting */ hdr->status = STAT_DONE; } } else { /* no line input */ hdr->status = STAT_DONE|STAT_BUSY; } break; case CMD_INFLUSH: /* flush line and keyboard queue */ lol->offs_unread_CON = 0; bios->NextKbdCharPtr = bios->FirstKbdCharPtr; break; case CMD_OUTPUT: case CMD_SAFEOUTPUT: { REQ_IO *io = (REQ_IO *)hdr; BYTE *buffer = CTX_SEG_OFF_TO_LIN(ctx, SELECTOROF(io->buffer), (DWORD)OFFSETOF(io->buffer)); DWORD result = 0; WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), buffer, io->count, &result, NULL); io->count = result; hdr->status = STAT_DONE; } break; default: hdr->status = STAT_DONE; } do_lret(ctx); } static void InitListOfLists(DOS_LISTOFLISTS *DOS_LOL) { /* Output of DOS 6.22: 0133:0020 6A 13-33 01 CC 00 33 01 59 00 j.3...3.Y. 0133:0030 70 00 00 00 72 02 00 02-6D 00 33 01 00 00 2E 05 p...r...m.3..... 0133:0040 00 00 FC 04 00 00 03 08-92 21 11 E0 04 80 C6 0D .........!...... 0133:0050 CC 0D 4E 55 4C 20 20 20-20 20 00 00 00 00 00 00 ..NUL ...... 0133:0060 00 4B BA C1 06 14 00 00-00 03 01 00 04 70 CE FF .K...........p.. 0133:0070 FF 00 00 00 00 00 00 00-00 01 00 00 0D 05 00 00 ................ 0133:0080 00 FF FF 00 00 00 00 FE-00 00 F8 03 FF 9F 70 02 ..............p. 0133:0090 D0 44 C8 FD D4 44 C8 FD-D4 44 C8 FD D0 44 C8 FD .D...D...D...D.. 0133:00A0 D0 44 C8 FD D0 44 .D...D */ DOS_LOL->CX_Int21_5e01 = 0x0; DOS_LOL->LRU_count_FCB_cache = 0x0; DOS_LOL->LRU_count_FCB_open = 0x0; DOS_LOL->OEM_func_handler = -1; /* not available */ DOS_LOL->INT21_offset = 0x0; DOS_LOL->sharing_retry_count = 3; DOS_LOL->sharing_retry_delay = 1; DOS_LOL->ptr_disk_buf = 0x0; DOS_LOL->offs_unread_CON = 0x0; DOS_LOL->seg_first_MCB = 0x0; DOS_LOL->ptr_first_DPB = 0x0; DOS_LOL->ptr_first_SysFileTable = 0x0; DOS_LOL->ptr_clock_dev_hdr = 0x0; DOS_LOL->ptr_CON_dev_hdr = 0x0; DOS_LOL->max_byte_per_sec = 512; DOS_LOL->ptr_disk_buf_info = 0x0; DOS_LOL->ptr_array_CDS = 0x0; DOS_LOL->ptr_sys_FCB = 0x0; DOS_LOL->nr_protect_FCB = 0x0; DOS_LOL->nr_block_dev = 0x0; DOS_LOL->nr_avail_drive_letters = 26; /* A - Z */ DOS_LOL->nr_drives_JOINed = 0x0; DOS_LOL->ptr_spec_prg_names = 0x0; DOS_LOL->ptr_SETVER_prg_list = 0x0; /* no SETVER list */ DOS_LOL->DOS_HIGH_A20_func_offs = 0x0; DOS_LOL->PSP_last_exec = 0x0; DOS_LOL->BUFFERS_val = 99; /* maximum: 99 */ DOS_LOL->BUFFERS_nr_lookahead = 8; /* maximum: 8 */ DOS_LOL->boot_drive = 3; /* C: */ DOS_LOL->flag_DWORD_moves = 0x01; /* i386+ */ DOS_LOL->size_extended_mem = 0xf000; /* very high value */ } void DOSDEV_SetupDevice(const WINEDEV * devinfo, WORD seg, WORD off_dev, WORD off_thunk) { DOS_DEVICE_HEADER *dev = PTR_REAL_TO_LIN(seg, off_dev); WINEDEV_THUNK *thunk = PTR_REAL_TO_LIN(seg, off_thunk); DOS_DATASEG *dataseg = (DOS_DATASEG*)DOSMEM_LOL(); dev->attr = devinfo->attr; dev->strategy = off_thunk + FIELD_OFFSET(WINEDEV_THUNK, ljmp1); dev->interrupt = off_thunk + FIELD_OFFSET(WINEDEV_THUNK, ljmp2); memcpy(dev->name, devinfo->name, 8); thunk->ljmp1 = LJMP; thunk->strategy = DPMI_AllocInternalRMCB(devinfo->strategy); thunk->ljmp2 = LJMP; thunk->interrupt = DPMI_AllocInternalRMCB(devinfo->interrupt); dev->next_dev = NONEXT; if (dataseg->last_dev) dataseg->last_dev->next_dev = MAKESEGPTR(seg, off_dev); dataseg->last_dev = dev; } void DOSDEV_InstallDOSDevices(void) { DOS_DATASEG *dataseg; WORD seg; WORD selector; unsigned int n; /* allocate DOS data segment or something */ dataseg = DOSVM_AllocDataUMB( sizeof(DOS_DATASEG), &seg, &selector ); DOS_LOLSeg = MAKESEGPTR( seg, 0 ); DOSMEM_LOL()->wine_rm_lol = MAKESEGPTR( seg, FIELD_OFFSET(DOS_LISTOFLISTS, ptr_first_DPB) ); DOSMEM_LOL()->wine_pm_lol = MAKESEGPTR( selector, FIELD_OFFSET(DOS_LISTOFLISTS, ptr_first_DPB) ); /* initialize the magnificent List Of Lists */ InitListOfLists(&dataseg->lol); /* Set up first device (NUL) */ dataseg->last_dev = NULL; DOSDEV_SetupDevice( &devs[0], seg, DOS_DATASEG_OFF(lol.NUL_dev), DOS_DATASEG_OFF(thunk[0]) ); /* Set up the remaining devices */ for (n = 1; n < NR_DEVS; n++) DOSDEV_SetupDevice( &devs[n], seg, DOS_DATASEG_OFF(dev[n-1]), DOS_DATASEG_OFF(thunk[n]) ); /* CON is device 1 */ dataseg->lol.ptr_CON_dev_hdr = MAKESEGPTR(seg, DOS_DATASEG_OFF(dev[0])); } void DOSDEV_SetSharingRetry(WORD delay, WORD count) { DOSMEM_LOL()->sharing_retry_delay = delay; if (count) DOSMEM_LOL()->sharing_retry_count = count; } SEGPTR DOSDEV_GetLOL(BOOL v86) { if (v86) return DOSMEM_LOL()->wine_rm_lol; else return DOSMEM_LOL()->wine_pm_lol; } ================================================ FILE: krnl386/dosexe.c ================================================ /* * DOS (MZ) loader * * Copyright 1998 Ove Kåven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * Note: This code hasn't been completely cleaned up yet. */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_SYS_TIME_H # include #endif #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "wingdi.h" #include "winuser.h" #include "winerror.h" #include "wine/debug.h" #include "kernel16_private.h" #include "dosexe.h" #include "vga.h" #include "../toolhelp/toolhelp.h" WINE_DEFAULT_DEBUG_CHANNEL(module); static BOOL DOSVM_isdosexe; /********************************************************************** * DOSVM_IsWin16 * * Return TRUE if we are in Windows process. */ BOOL DOSVM_IsWin16(void) { return !DOSVM_isdosexe; } /********************************************************************** * DOSVM_Exit */ void DOSVM_Exit( WORD retval ) { DWORD count; TOOLHELP_CallNotify(NFY_EXITTASK, retval); ReleaseThunkLock( &count ); ExitThread( retval ); } #ifdef MZ_SUPPORTED #define BIOS_DATA_SEGMENT 0x40 #define PSP_SIZE 0x10 #define SEG16(ptr,seg) ((LPVOID)((BYTE*)ptr+((DWORD)(seg)<<4))) #define SEGPTR16(ptr,segptr) ((LPVOID)((BYTE*)ptr+((DWORD)SELECTOROF(segptr)<<4)+OFFSETOF(segptr))) /* structures for EXEC */ #include "pshpack1.h" typedef struct { WORD env_seg; DWORD cmdline; DWORD fcb1; DWORD fcb2; WORD init_sp; WORD init_ss; WORD init_ip; WORD init_cs; } ExecBlock; typedef struct { WORD load_seg; WORD rel_seg; } OverlayBlock; #include "poppack.h" /* global variables */ pid_t dosvm_pid; static WORD init_cs,init_ip,init_ss,init_sp; static HANDLE dosvm_thread, loop_thread; static DWORD dosvm_tid, loop_tid; static DWORD MZ_Launch( LPCSTR cmdtail, int length ); static BOOL MZ_InitTask(void); static void MZ_CreatePSP( LPVOID lpPSP, WORD env, WORD par ) { PDB16*psp=lpPSP; psp->int20=0x20CD; /* int 20 */ /* some programs use this to calculate how much memory they need */ psp->nextParagraph=0x9FFF; /* FIXME: use a real value */ /* FIXME: dispatcher */ psp->savedint22 = DOSVM_GetRMHandler(0x22); psp->savedint23 = DOSVM_GetRMHandler(0x23); psp->savedint24 = DOSVM_GetRMHandler(0x24); psp->parentPSP=par; psp->environment=env; /* FIXME: more PSP stuff */ } extern char *DOSMEM_dosmem; static void MZ_FillPSP( LPVOID lpPSP, LPCSTR cmdtail, int length ) { PDB16 *psp = (PDB16*)lpPSP; if(length > 127) { WARN( "Command tail truncated! (length %d)\n", length ); length = 126; } psp->cmdLine[0] = length; /* * Length of exactly 127 bytes means that full command line is * stored in environment variable CMDLINE and PSP contains * command tail truncated to 126 bytes. */ if(length == 127) length = 126; if(length > 0) memmove(psp->cmdLine+1, cmdtail, length); psp->cmdLine[length+1] = '\r'; /* FIXME: more PSP stuff */ } static WORD MZ_InitEnvironment( LPCSTR env, LPCSTR name ) { unsigned sz=0; unsigned i=0; WORD seg; LPSTR envblk; if (env) { /* get size of environment block */ while (env[sz++]) sz+=strlen(env+sz)+1; } else sz++; /* allocate it */ envblk=DOSMEM_AllocBlock(sz+sizeof(WORD)+strlen(name)+1,&seg); /* fill it */ if (env) { memcpy(envblk,env,sz); } else envblk[0]=0; /* DOS environment variables are uppercase */ while (envblk[i]){ while (envblk[i] != '='){ if (envblk[i]>='a' && envblk[i] <= 'z'){ envblk[i] -= 32; } i++; } i += strlen(envblk+i) + 1; } /* DOS 3.x: the block contains 1 additional string */ *(WORD*)(envblk+sz)=1; /* being the program name itself */ strcpy(envblk+sz+sizeof(WORD),name); return seg; } static BOOL MZ_InitMemory(void) { /* initialize the memory */ TRACE("Initializing DOS memory structures\n"); DOSMEM_MapDosLayout(); DOSDEV_InstallDOSDevices(); MSCDEX_InstallCDROM(); return TRUE; } static BOOL MZ_DoLoadImage( HANDLE hFile, LPCSTR filename, OverlayBlock *oblk, WORD par_env_seg ) { IMAGE_DOS_HEADER mz_header; DWORD image_start,image_size,min_size,max_size,avail; BYTE*psp_start,*load_start; LPSTR oldenv = 0; int x, old_com=0, alloc; SEGPTR reloc; WORD env_seg, load_seg, rel_seg, oldpsp_seg; DWORD len; if (DOSVM_psp) { /* DOS process already running, inherit from it */ PDB16* par_psp; alloc=0; oldpsp_seg = DOSVM_psp; if( !par_env_seg) { par_psp = (PDB16*)PTR_REAL_TO_LIN(DOSVM_psp, 0); oldenv = (LPSTR)((DWORD)PTR_REAL_TO_LIN(par_psp->environment, 0)); } } else { /* allocate new DOS process, inheriting from Wine environment */ alloc=1; oldpsp_seg = 0; if( !par_env_seg) oldenv = GetEnvironmentStringsA(); } SetFilePointer(hFile,0,NULL,FILE_BEGIN); if ( !ReadFile(hFile,&mz_header,sizeof(mz_header),&len,NULL) || len != sizeof(mz_header) || mz_header.e_magic != IMAGE_DOS_SIGNATURE) { const char *p = strrchr( filename, '.' ); if (!p || strcasecmp( p, ".com" )) /* check for .COM extension */ { SetLastError(ERROR_BAD_FORMAT); goto load_error; } old_com=1; /* assume .COM file */ image_start=0; image_size=GetFileSize(hFile,NULL); min_size=0x10000; max_size=0x100000; mz_header.e_crlc=0; mz_header.e_ss=0; mz_header.e_sp=0xFFFE; mz_header.e_cs=0; mz_header.e_ip=0x100; } else { /* calculate load size */ image_start=mz_header.e_cparhdr<<4; image_size=mz_header.e_cp<<9; /* pages are 512 bytes */ /* From Ralf Brown Interrupt List: If the word at offset 02h is 4, it should * be treated as 00h, since pre-1.10 versions of the MS linker set it that * way. */ if ((mz_header.e_cblp!=0)&&(mz_header.e_cblp!=4)) image_size-=512-mz_header.e_cblp; image_size-=image_start; min_size=image_size+((DWORD)mz_header.e_minalloc<<4)+(PSP_SIZE<<4); max_size=image_size+((DWORD)mz_header.e_maxalloc<<4)+(PSP_SIZE<<4); } if (alloc) MZ_InitMemory(); if (oblk) { /* load overlay into preallocated memory */ load_seg=oblk->load_seg; rel_seg=oblk->rel_seg; load_start=(LPBYTE)((DWORD)load_seg<<4); } else { /* allocate environment block */ if( par_env_seg) env_seg = par_env_seg; else env_seg=MZ_InitEnvironment(oldenv, filename); if (alloc) FreeEnvironmentStringsA( oldenv); /* allocate memory for the executable */ TRACE("Allocating DOS memory (min=%d, max=%d)\n",min_size,max_size); avail=DOSMEM_Available(); if (availmax_size) avail=max_size; psp_start=DOSMEM_AllocBlock(avail,&DOSVM_psp); if (!psp_start) { ERR("error allocating DOS memory\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); goto load_error; } load_seg=DOSVM_psp+(old_com?0:PSP_SIZE); rel_seg=load_seg; load_start=psp_start+(PSP_SIZE<<4); MZ_CreatePSP(psp_start, env_seg, oldpsp_seg); } /* load executable image */ TRACE("loading DOS %s image, %08x bytes\n",old_com?"COM":"EXE",image_size); SetFilePointer(hFile,image_start,NULL,FILE_BEGIN); if (!ReadFile(hFile,load_start,image_size,&len,NULL) || len != image_size) { /* check if this is due to the workaround for the pre-1.10 MS linker and we really had only 4 bytes on the last page */ if (mz_header.e_cblp != 4 || image_size - len != 512 - 4) { SetLastError(ERROR_BAD_FORMAT); goto load_error; } } if (mz_header.e_crlc) { /* load relocation table */ TRACE("loading DOS EXE relocation table, %d entries\n",mz_header.e_crlc); /* FIXME: is this too slow without read buffering? */ SetFilePointer(hFile,mz_header.e_lfarlc,NULL,FILE_BEGIN); for (x=0; x 126) { char *cmd = HeapAlloc( GetProcessHeap(), 0, dos_length + strlen(filename) + 4 ); char *ptr = cmd; if (!cmd) return; /* * Append filename. If path includes spaces, quote the path. */ if (strchr(filename, ' ')) { *ptr++ = '\"'; strcpy( ptr, filename ); ptr += strlen(filename); *ptr++ = '\"'; } else { strcpy( ptr, filename ); ptr += strlen(filename); } /* * Append command tail. */ if (cmdline[0] != ' ') *ptr++ = ' '; strcpy( ptr, cmdline ); /* * Set environment variable. This will be passed to * new DOS process. */ if (!SetEnvironmentVariableA( "CMDLINE", cmd )) { HeapFree(GetProcessHeap(), 0, cmd ); return; } HeapFree(GetProcessHeap(), 0, cmd ); dos_length = 127; } } AllocConsole(); SetConsoleTitleA(filename); if (MZ_DoLoadImage( hFile, filename, NULL, 0 )) { DWORD err = MZ_Launch( dos_cmdtail, dos_length ); /* if we get back here it failed */ SetLastError( err ); } } /*********************************************************************** * MZ_Exec * * this may only be called from existing DOS processes */ BOOL MZ_Exec( CONTEXT *context, LPCSTR filename, BYTE func, LPVOID paramblk ) { DWORD binType; STARTUPINFOA st; PROCESS_INFORMATION pe; HANDLE hFile; BOOL ret = FALSE; if(!GetBinaryTypeA(filename, &binType)) /* determine what kind of binary this is */ { return FALSE; /* binary is not an executable */ } /* handle non-dos executables */ if(binType != SCS_DOS_BINARY) { if(func == 0) /* load and execute */ { LPSTR fullCmdLine; WORD fullCmdLength; LPBYTE psp_start = (LPBYTE)PTR_REAL_TO_LIN(DOSVM_psp, 0); PDB16 *psp = (PDB16 *)psp_start; ExecBlock *blk = paramblk; LPBYTE cmdline = PTR_REAL_TO_LIN(SELECTOROF(blk->cmdline),OFFSETOF(blk->cmdline)); LPBYTE envblock = PTR_REAL_TO_LIN(psp->environment, 0); int cmdLength = cmdline[0]; /* * If cmdLength is 127, command tail is truncated and environment * variable CMDLINE should contain full command line * (this includes filename). */ if (cmdLength == 127) { FIXME( "CMDLINE argument passing is unimplemented.\n" ); cmdLength = 126; /* FIXME */ } fullCmdLength = (strlen(filename) + 1) + cmdLength + 1; /* filename + space + cmdline + terminating null character */ fullCmdLine = HeapAlloc(GetProcessHeap(), 0, fullCmdLength); if(!fullCmdLine) return FALSE; /* return false on memory alloc failure */ /* build the full command line from the executable file and the command line being passed in */ snprintf(fullCmdLine, fullCmdLength, "%s ", filename); /* start off with the executable filename and a space */ memcpy(fullCmdLine + strlen(fullCmdLine), cmdline + 1, cmdLength); /* append cmdline onto the end */ fullCmdLine[fullCmdLength - 1] = 0; /* null terminate string */ ZeroMemory (&st, sizeof(STARTUPINFOA)); st.cb = sizeof(STARTUPINFOA); ret = CreateProcessA (NULL, fullCmdLine, NULL, NULL, TRUE, 0, envblock, NULL, &st, &pe); /* wait for the app to finish and clean up PROCESS_INFORMATION handles */ if(ret) { WaitForSingleObject(pe.hProcess, INFINITE); /* wait here until the child process is complete */ CloseHandle(pe.hProcess); CloseHandle(pe.hThread); } HeapFree(GetProcessHeap(), 0, fullCmdLine); /* free the memory we allocated */ } else { FIXME("EXEC type of %d not implemented for non-dos executables\n", func); ret = FALSE; } return ret; } /* if(binType != SCS_DOS_BINARY) */ /* handle dos executables */ hFile = CreateFileA( filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if (hFile == INVALID_HANDLE_VALUE) return FALSE; switch (func) { case 0: /* load and execute */ case 1: /* load but don't execute */ { /* save current process's return SS:SP now */ LPBYTE psp_start = (LPBYTE)PTR_REAL_TO_LIN(DOSVM_psp, 0); PDB16 *psp = (PDB16 *)psp_start; psp->saveStack = (DWORD)MAKESEGPTR(context->SegSs, LOWORD(context->Esp)); } ret = MZ_DoLoadImage( hFile, filename, NULL, ((ExecBlock *)paramblk)->env_seg ); if (ret) { /* MZ_LoadImage created a new PSP and loaded new values into it, * let's work on the new values now */ LPBYTE psp_start = (LPBYTE)PTR_REAL_TO_LIN(DOSVM_psp, 0); ExecBlock *blk = paramblk; LPBYTE cmdline = PTR_REAL_TO_LIN(SELECTOROF(blk->cmdline),OFFSETOF(blk->cmdline)); /* First character contains the length of the command line. */ MZ_FillPSP(psp_start, (LPSTR)cmdline + 1, cmdline[0]); /* the lame MS-DOS engineers decided that the return address should be in int22 */ DOSVM_SetRMHandler(0x22, (FARPROC16)MAKESEGPTR(context->SegCs, LOWORD(context->Eip))); if (func) { /* don't execute, just return startup state */ /* * From Ralph Brown: * For function 01h, the AX value to be passed to the child program * is put on top of the child's stack */ LPBYTE stack; init_sp -= 2; stack = CTX_SEG_OFF_TO_LIN(context, init_ss, init_sp); /* FIXME: push AX correctly */ stack[0] = 0x00; /* push AL */ stack[1] = 0x00; /* push AH */ blk->init_cs = init_cs; blk->init_ip = init_ip; blk->init_ss = init_ss; blk->init_sp = init_sp; } else { /* execute by making us return to new process */ context->SegCs = init_cs; context->Eip = init_ip; context->SegSs = init_ss; context->Esp = init_sp; context->SegDs = DOSVM_psp; context->SegEs = DOSVM_psp; context->Eax = 0; } } break; case 3: /* load overlay */ { OverlayBlock *blk = paramblk; ret = MZ_DoLoadImage( hFile, filename, blk, 0); } break; default: FIXME("EXEC load type %d not implemented\n", func); SetLastError(ERROR_INVALID_FUNCTION); break; } CloseHandle(hFile); return ret; } /*********************************************************************** * MZ_AllocDPMITask */ void MZ_AllocDPMITask( void ) { MZ_InitMemory(); MZ_InitTask(); } /*********************************************************************** * MZ_RunInThread */ void MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg ) { if (loop_thread) { DOS_SPC spc; HANDLE event; spc.proc = proc; spc.arg = arg; event = CreateEventW(NULL, TRUE, FALSE, NULL); PostThreadMessageA(loop_tid, WM_USER + 1, (WPARAM)event, (LPARAM)&spc); WaitForSingleObject(event, INFINITE); CloseHandle(event); } else proc(arg); } void *dosvm_vm86_teb_info; static DWORD WINAPI MZ_DOSVM( LPVOID lpExtra ) { CONTEXT context; INT ret; dosvm_pid = getpid(); memset( &context, 0, sizeof(context) ); context.SegCs = init_cs; context.Eip = init_ip; context.SegSs = init_ss; context.Esp = init_sp; context.SegDs = DOSVM_psp; context.SegEs = DOSVM_psp; context.EFlags = V86_FLAG | VIF_MASK; DOSVM_SetTimer(0x10000); dosvm_vm86_teb_info = get_vm86_teb_info(); ret = DOSVM_Enter( &context ); if (ret == -1) ret = GetLastError(); dosvm_pid = 0; return ret; } static BOOL MZ_InitTask(void) { if (!DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &loop_thread, 0, FALSE, DUPLICATE_SAME_ACCESS)) return FALSE; dosvm_thread = CreateThread(NULL, 0, MZ_DOSVM, NULL, CREATE_SUSPENDED, &dosvm_tid); if (!dosvm_thread) { CloseHandle(loop_thread); loop_thread = 0; return FALSE; } loop_tid = GetCurrentThreadId(); return TRUE; } static DWORD MZ_Launch( LPCSTR cmdtail, int length ) { TDB *pTask = GlobalLock16( GetCurrentTask() ); BYTE *psp_start = PTR_REAL_TO_LIN( DOSVM_psp, 0 ); DWORD rv; SYSLEVEL *lock; MSG msg; MZ_FillPSP(psp_start, cmdtail, length); pTask->flags |= TDBF_WINOLDAP; /* DTA is set to PSP:0080h when a program is started. */ pTask->dta = MAKESEGPTR( DOSVM_psp, 0x80 ); GetpWin16Lock( &lock ); _LeaveSysLevel( lock ); /* force the message queue to be created */ PeekMessageW(&msg, NULL, WM_USER + 1, WM_USER + 1, PM_NOREMOVE); ResumeThread(dosvm_thread); rv = DOSVM_Loop(dosvm_thread); CloseHandle(dosvm_thread); dosvm_thread = 0; dosvm_tid = 0; CloseHandle(loop_thread); loop_thread = 0; loop_tid = 0; if (rv) return rv; VGA_Clean(); ExitProcess(0); } /*********************************************************************** * MZ_Exit */ void MZ_Exit( CONTEXT *context, BOOL cs_psp, WORD retval ) { if (DOSVM_psp) { WORD psp_seg = cs_psp ? context->SegCs : DOSVM_psp; LPBYTE psp_start = (LPBYTE)PTR_REAL_TO_LIN(psp_seg, 0); PDB16 *psp = (PDB16 *)psp_start; WORD parpsp = psp->parentPSP; /* check for parent DOS process */ if (parpsp) { /* retrieve parent's return address */ FARPROC16 retaddr = DOSVM_GetRMHandler(0x22); /* restore interrupts */ DOSVM_SetRMHandler(0x22, psp->savedint22); DOSVM_SetRMHandler(0x23, psp->savedint23); DOSVM_SetRMHandler(0x24, psp->savedint24); /* FIXME: deallocate file handles etc */ /* free process's associated memory * FIXME: walk memory and deallocate all blocks owned by process */ DOSMEM_FreeBlock( PTR_REAL_TO_LIN(psp->environment,0) ); DOSMEM_FreeBlock( PTR_REAL_TO_LIN(DOSVM_psp,0) ); /* switch to parent's PSP */ DOSVM_psp = parpsp; psp_start = (LPBYTE)((DWORD)PTR_REAL_TO_LIN(parpsp, 0)); psp = (PDB16 *)psp_start; /* now return to parent */ DOSVM_retval = retval; context->SegCs = SELECTOROF(retaddr); context->Eip = OFFSETOF(retaddr); context->SegSs = SELECTOROF(psp->saveStack); context->Esp = OFFSETOF(psp->saveStack); return; } else TRACE("killing DOS task\n"); } DOSVM_Exit( retval ); } /*********************************************************************** * MZ_Current */ BOOL MZ_Current( void ) { return (dosvm_pid != 0); /* FIXME: do a better check */ } #else /* !MZ_SUPPORTED */ /*********************************************************************** * __wine_load_dos_exe (KERNEL.@) */ void __wine_load_dos_exe( LPCSTR filename, LPCSTR cmdline ) { SetLastError( ERROR_NOT_SUPPORTED ); } /*********************************************************************** * MZ_Exec */ BOOL MZ_Exec( CONTEXT *context, LPCSTR filename, BYTE func, LPVOID paramblk ) { /* can't happen */ SetLastError(ERROR_BAD_FORMAT); return FALSE; } /*********************************************************************** * MZ_AllocDPMITask */ void MZ_AllocDPMITask( void ) { FIXME("Actual real-mode calls not supported on this platform!\n"); } /*********************************************************************** * MZ_RunInThread */ void MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg ) { proc(arg); } /*********************************************************************** * MZ_Exit */ void MZ_Exit( CONTEXT *context, BOOL cs_psp, WORD retval ) { DOSVM_Exit( retval ); } /*********************************************************************** * MZ_Current */ BOOL MZ_Current( void ) { return FALSE; } #endif /* !MZ_SUPPORTED */ ================================================ FILE: krnl386/dosexe.h ================================================ /* * DOS EXE loader * * Copyright 1998 Ove Kåven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DOSEXE_H #define __WINE_DOSEXE_H #include #include #include "windef.h" #include "wine/library.h" #include "wine/windef16.h" #include "winbase.h" #include "winnt.h" /* for PCONTEXT */ #include "wincon.h" /* for MOUSE_EVENT_RECORD */ #ifndef DECLSPEC_HIDDEN #define DECLSPEC_HIDDEN #endif #define MAX_DOS_DRIVES 26 struct _DOSEVENT; typedef struct { PAPCFUNC proc; ULONG_PTR arg; } DOS_SPC; typedef int pid_t; extern pid_t dosvm_pid DECLSPEC_HIDDEN; /* amount of space reserved for relay stack */ #define DOSVM_RELAY_DATA_SIZE 4096 /* various real-mode code stubs */ struct DPMI_segments { WORD wrap_seg; WORD xms_seg; WORD dpmi_seg; WORD dpmi_sel; WORD int48_sel; WORD int16_sel; WORD relay_code_sel; WORD relay_data_sel; }; /* 48-bit segmented pointers for DOS DPMI32 */ typedef struct { WORD selector; DWORD offset; } SEGPTR48, FARPROC48; typedef void (*DOSRELAY)(CONTEXT*,void*); typedef void (WINAPI *RMCBPROC)(CONTEXT*); typedef void (WINAPI *INTPROC)(CONTEXT*); typedef void (WINAPI *OUTPROC)(int port, int size, DWORD value); typedef DWORD (WINAPI *INPROC)(int port, int size); #define DOS_PRIORITY_REALTIME 0 /* IRQ0 */ #define DOS_PRIORITY_KEYBOARD 1 /* IRQ1 */ #define DOS_PRIORITY_VGA 2 /* IRQ9 */ #define DOS_PRIORITY_MOUSE 5 /* IRQ12 */ #define DOS_PRIORITY_SERIAL 10 /* IRQ4 */ extern WORD DOSVM_psp DECLSPEC_HIDDEN; /* psp of current DOS task */ extern WORD DOSVM_retval DECLSPEC_HIDDEN; /* return value of previous DOS task */ extern struct DPMI_segments *DOSVM_dpmi_segments DECLSPEC_HIDDEN; #if defined(linux) && defined(__i386__) && defined(HAVE_SYS_VM86_H) # define MZ_SUPPORTED #endif /* linux-i386 */ /* * Declare some CONTEXT.EFlags bits. * IF_MASK is only pushed into real mode stack. */ #define V86_FLAG 0x00020000 #define TF_MASK 0x00000100 #define IF_MASK 0x00000200 #define VIF_MASK 0x00080000 #define VIP_MASK 0x00100000 #define ADD_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val))) #define PTR_REAL_TO_LIN(seg,off) ((void*)(((unsigned int)(seg) << 4) + LOWORD(off) + (size_t)DOSMEM_dosmem)) /* NOTE: Interrupts might get called from four modes: real mode, 16-bit, * 32-bit segmented (DPMI32) and 32-bit linear (via DeviceIoControl). * For automatic conversion of pointer * parameters, interrupt handlers should use CTX_SEG_OFF_TO_LIN with * the contents of a segment register as second and the contents of * a *32-bit* general register as third parameter, e.g. * CTX_SEG_OFF_TO_LIN( context, DS_reg(context), EDX_reg(context) ) * This will generate a linear pointer in all three cases: * Real-Mode: Seg*16 + LOWORD(Offset) * 16-bit: convert (Seg, LOWORD(Offset)) to linear * 32-bit segmented: convert (Seg, Offset) to linear * 32-bit linear: use Offset as linear address (DeviceIoControl!) * * Real-mode is recognized by checking the V86 bit in the flags register, * 32-bit linear mode is recognized by checking whether 'seg' is * a system selector (0 counts also as 32-bit segment) and 32-bit * segmented mode is recognized by checking whether 'seg' is 32-bit * selector which is neither system selector nor zero. */ #define CTX_SEG_OFF_TO_LIN(context,seg,off) \ (ISV86(context) ? PTR_REAL_TO_LIN((seg),(off)) : wine_ldt_get_ptr((seg),(off))) #define INT_BARF(context,num) \ ERR( "int%x: unknown/not implemented parameters:\n" \ "int%x: AX %04x, BX %04x, CX %04x, DX %04x, " \ "SI %04x, DI %04x, DS %04x, ES %04x\n", \ (num), (num), LOWORD((context)->Eax), LOWORD((context)->Ebx), \ LOWORD((context)->Ecx), LOWORD((context)->Edx), LOWORD((context)->Esi), \ LOWORD((context)->Edi), (WORD)(context)->SegDs, (WORD)(context)->SegEs ) /* pushing on stack in 16 bit needs segment wrap around */ #define PUSH_WORD16(context,val) \ *((WORD*)CTX_SEG_OFF_TO_LIN((context), \ (context)->SegSs, ADD_LOWORD( context->Esp, -2 ) )) = (val) /* Macros for easier access to i386 context registers */ #define AX_reg(context) ((WORD)(context)->Eax) #define BX_reg(context) ((WORD)(context)->Ebx) #define CX_reg(context) ((WORD)(context)->Ecx) #define DX_reg(context) ((WORD)(context)->Edx) #define SI_reg(context) ((WORD)(context)->Esi) #define DI_reg(context) ((WORD)(context)->Edi) #define AL_reg(context) ((BYTE)(context)->Eax) #define AH_reg(context) ((BYTE)((context)->Eax >> 8)) #define BL_reg(context) ((BYTE)(context)->Ebx) #define BH_reg(context) ((BYTE)((context)->Ebx >> 8)) #define CL_reg(context) ((BYTE)(context)->Ecx) #define CH_reg(context) ((BYTE)((context)->Ecx >> 8)) #define DL_reg(context) ((BYTE)(context)->Edx) #define DH_reg(context) ((BYTE)((context)->Edx >> 8)) #define SET_CFLAG(context) ((context)->EFlags |= 0x0001) #define RESET_CFLAG(context) ((context)->EFlags &= ~0x0001) #define SET_ZFLAG(context) ((context)->EFlags |= 0x0040) #define RESET_ZFLAG(context) ((context)->EFlags &= ~0x0040) #define ISV86(context) ((context)->EFlags & 0x00020000) #define SET_AX(context,val) ((void)((context)->Eax = ((context)->Eax & ~0xffff) | (WORD)(val))) #define SET_BX(context,val) ((void)((context)->Ebx = ((context)->Ebx & ~0xffff) | (WORD)(val))) #define SET_CX(context,val) ((void)((context)->Ecx = ((context)->Ecx & ~0xffff) | (WORD)(val))) #define SET_DX(context,val) ((void)((context)->Edx = ((context)->Edx & ~0xffff) | (WORD)(val))) #define SET_SI(context,val) ((void)((context)->Esi = ((context)->Esi & ~0xffff) | (WORD)(val))) #define SET_DI(context,val) ((void)((context)->Edi = ((context)->Edi & ~0xffff) | (WORD)(val))) #define SET_AL(context,val) ((void)((context)->Eax = ((context)->Eax & ~0xff) | (BYTE)(val))) #define SET_BL(context,val) ((void)((context)->Ebx = ((context)->Ebx & ~0xff) | (BYTE)(val))) #define SET_CL(context,val) ((void)((context)->Ecx = ((context)->Ecx & ~0xff) | (BYTE)(val))) #define SET_DL(context,val) ((void)((context)->Edx = ((context)->Edx & ~0xff) | (BYTE)(val))) #define SET_AH(context,val) ((void)((context)->Eax = ((context)->Eax & ~0xff00) | (((BYTE)(val)) << 8))) #define SET_BH(context,val) ((void)((context)->Ebx = ((context)->Ebx & ~0xff00) | (((BYTE)(val)) << 8))) #define SET_CH(context,val) ((void)((context)->Ecx = ((context)->Ecx & ~0xff00) | (((BYTE)(val)) << 8))) #define SET_DH(context,val) ((void)((context)->Edx = ((context)->Edx & ~0xff00) | (((BYTE)(val)) << 8))) #include typedef struct { WORD Com1Addr; /* 00: COM1 I/O address */ WORD Com2Addr; /* 02: COM2 I/O address */ WORD Com3Addr; /* 04: COM3 I/O address */ WORD Com4Addr; /* 06: COM4 I/O address */ WORD Lpt1Addr; /* 08: LPT1 I/O address */ WORD Lpt2Addr; /* 0a: LPT2 I/O address */ WORD Lpt3Addr; /* 0c: LPT3 I/O address */ WORD Lpt4Addr; /* 0e: LPT4 I/O address */ WORD InstalledHardware; /* 10: Installed hardware flags */ BYTE POSTstatus; /* 12: Power-On Self Test status */ WORD MemSize; /* 13: Base memory size in Kb */ WORD unused1; /* 15: Manufacturing test scratch pad */ BYTE KbdFlags1; /* 17: Keyboard flags 1 */ BYTE KbdFlags2; /* 18: Keyboard flags 2 */ BYTE unused2; /* 19: Keyboard driver workspace */ WORD NextKbdCharPtr; /* 1a: Next character in kbd buffer */ WORD FirstKbdCharPtr; /* 1c: First character in kbd buffer */ WORD KbdBuffer[16]; /* 1e: Keyboard buffer */ BYTE DisketteStatus1; /* 3e: Diskette recalibrate status */ BYTE DisketteStatus2; /* 3f: Diskette motor status */ BYTE DisketteStatus3; /* 40: Diskette motor timeout */ BYTE DisketteStatus4; /* 41: Diskette last operation status */ BYTE DiskStatus[7]; /* 42: Disk status/command bytes */ BYTE VideoMode; /* 49: Video mode */ WORD VideoColumns; /* 4a: Number of columns */ WORD VideoPageSize; /* 4c: Video page size in bytes */ WORD VideoPageStartAddr; /* 4e: Video page start address */ BYTE VideoCursorPos[16]; /* 50: Cursor position for 8 pages, column/row order */ WORD VideoCursorType; /* 60: Video cursor type */ BYTE VideoCurPage; /* 62: Video current page */ WORD VideoCtrlAddr; /* 63: Video controller address */ BYTE VideoReg1; /* 65: Video mode select register */ BYTE VideoReg2; /* 66: Video CGA palette register */ DWORD ResetEntry; /* 67: Warm reset entry point */ BYTE LastIRQ; /* 6b: Last unexpected interrupt */ DWORD Ticks; /* 6c: Ticks since midnight */ BYTE TicksOverflow; /* 70: Timer overflow if past midnight */ BYTE CtrlBreakFlag; /* 71: Ctrl-Break flag */ WORD ResetFlag; /* 72: POST Reset flag */ BYTE DiskOpStatus; /* 74: Last hard-disk operation status */ BYTE NbHardDisks; /* 75: Number of hard disks */ BYTE DiskCtrlByte; /* 76: Disk control byte */ BYTE DiskIOPort; /* 77: Disk I/O port offset */ BYTE LptTimeout[4]; /* 78: Timeouts for parallel ports */ BYTE ComTimeout[4]; /* 7c: Timeouts for serial ports */ WORD KbdBufferStart; /* 80: Keyboard buffer start */ WORD KbdBufferEnd; /* 82: Keyboard buffer end */ BYTE RowsOnScreenMinus1; /* 84: EGA only */ WORD BytesPerChar; /* 85: EGA only */ BYTE ModeOptions; /* 87: EGA only */ BYTE FeatureBitsSwitches; /* 88: EGA only */ BYTE VGASettings; /* 89: VGA misc settings */ BYTE DisplayCombination; /* 8A: VGA display combinations */ BYTE DiskDataRate; /* 8B: Last disk data rate selected */ } BIOSDATA; #include /* Device driver header */ #define NONEXT ((DWORD)-1) #define ATTR_STDIN 0x0001 #define ATTR_STDOUT 0x0002 #define ATTR_NUL 0x0004 #define ATTR_CLOCK 0x0008 #define ATTR_FASTCON 0x0010 #define ATTR_RAW 0x0020 #define ATTR_NOTEOF 0x0040 #define ATTR_DEVICE 0x0080 #define ATTR_REMOVABLE 0x0800 #define ATTR_NONIBM 0x2000 /* block devices */ #define ATTR_UNTILBUSY 0x2000 /* char devices */ #define ATTR_IOCTL 0x4000 #define ATTR_CHAR 0x8000 #include typedef struct { DWORD next_dev; WORD attr; WORD strategy; WORD interrupt; char name[8]; } DOS_DEVICE_HEADER; #include /* DOS Device requests */ #define CMD_INIT 0 #define CMD_MEDIACHECK 1 /* block devices */ #define CMD_BUILDBPB 2 /* block devices */ #define CMD_INIOCTL 3 #define CMD_INPUT 4 /* read data */ #define CMD_SAFEINPUT 5 /* "non-destructive input no wait", char devices */ #define CMD_INSTATUS 6 /* char devices */ #define CMD_INFLUSH 7 /* char devices */ #define CMD_OUTPUT 8 /* write data */ #define CMD_SAFEOUTPUT 9 /* write data with verify */ #define CMD_OUTSTATUS 10 /* char devices */ #define CMD_OUTFLUSH 11 /* char devices */ #define CMD_OUTIOCTL 12 #define CMD_DEVOPEN 13 #define CMD_DEVCLOSE 14 #define CMD_REMOVABLE 15 /* block devices */ #define CMD_UNTILBUSY 16 /* output until busy */ #define STAT_MASK 0x00FF #define STAT_DONE 0x0100 #define STAT_BUSY 0x0200 #define STAT_ERROR 0x8000 #include typedef struct { BYTE size; /* length of header + data */ BYTE unit; /* unit (block devices only) */ BYTE command; WORD status; BYTE reserved[8]; } REQUEST_HEADER; typedef struct { REQUEST_HEADER hdr; BYTE media; /* media descriptor from BPB */ SEGPTR buffer; WORD count; /* byte/sector count */ WORD sector; /* starting sector (block devices) */ DWORD volume; /* volume ID (block devices) */ } REQ_IO; typedef struct { REQUEST_HEADER hdr; BYTE data; } REQ_SAFEINPUT; /* WINE device driver thunk from RM */ typedef struct { BYTE ljmp1; FARPROC16 strategy; BYTE ljmp2; FARPROC16 interrupt; } WINEDEV_THUNK; #include /* Device driver info (used for initialization) */ typedef struct { char name[8]; WORD attr; RMCBPROC strategy; RMCBPROC interrupt; } WINEDEV; /* dosexe.c */ extern BOOL MZ_Exec( CONTEXT *context, LPCSTR filename, BYTE func, LPVOID paramblk ) DECLSPEC_HIDDEN; extern void MZ_Exit( CONTEXT *context, BOOL cs_psp, WORD retval ) DECLSPEC_HIDDEN; extern BOOL MZ_Current( void ) DECLSPEC_HIDDEN; extern void MZ_AllocDPMITask( void ) DECLSPEC_HIDDEN; extern void MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg ) DECLSPEC_HIDDEN; extern BOOL DOSVM_IsWin16(void) DECLSPEC_HIDDEN; extern void DOSVM_Exit( WORD retval ) DECLSPEC_HIDDEN; /* dosvm.c */ extern void DOSVM_SendQueuedEvents( CONTEXT * ) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_AcknowledgeIRQ( CONTEXT * ) DECLSPEC_HIDDEN; extern INT DOSVM_Enter( CONTEXT *context ) DECLSPEC_HIDDEN; extern void DOSVM_Wait( CONTEXT * ) DECLSPEC_HIDDEN; extern DWORD DOSVM_Loop( HANDLE hThread ) DECLSPEC_HIDDEN; extern void DOSVM_QueueEvent( INT irq, INT priority, DOSRELAY relay, LPVOID data ) DECLSPEC_HIDDEN; extern void DOSVM_PIC_ioport_out( WORD port, BYTE val ) DECLSPEC_HIDDEN; extern void DOSVM_SetTimer( UINT ticks ) DECLSPEC_HIDDEN; extern LPVOID DOSVM_AllocDataUMB(DWORD, WORD *, WORD *) DECLSPEC_HIDDEN; extern void DOSVM_InitSegments(void) DECLSPEC_HIDDEN; /* devices.c */ extern void DOSDEV_InstallDOSDevices(void) DECLSPEC_HIDDEN; extern void DOSDEV_SetupDevice(const WINEDEV * devinfo, WORD seg, WORD off_dev, WORD off_thunk) DECLSPEC_HIDDEN; extern void DOSDEV_SetSharingRetry(WORD delay, WORD count) DECLSPEC_HIDDEN; extern SEGPTR DOSDEV_GetLOL(BOOL v86) DECLSPEC_HIDDEN; /* dma.c */ extern int DMA_Transfer(int channel,int reqlength,void* buffer) DECLSPEC_HIDDEN; extern void DMA_ioport_out( WORD port, BYTE val ) DECLSPEC_HIDDEN; extern BYTE DMA_ioport_in( WORD port ) DECLSPEC_HIDDEN; /* dosaspi.c */ extern void DOSVM_ASPIHandler(CONTEXT*) DECLSPEC_HIDDEN; /* dosmem.c */ extern BIOSDATA *DOSVM_BiosData( void ) DECLSPEC_HIDDEN; __declspec(dllexport) extern void DOSVM_start_bios_timer(void) DECLSPEC_HIDDEN; /* fpu.c */ extern void WINAPI DOSVM_Int34Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int35Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int36Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int37Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int38Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int39Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int3aHandler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int3bHandler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int3cHandler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int3dHandler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_Int3eHandler(CONTEXT*) DECLSPEC_HIDDEN; /* int09.c */ extern void WINAPI DOSVM_Int09Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void DOSVM_Int09SendScan(BYTE scan,BYTE ascii) DECLSPEC_HIDDEN; extern BYTE DOSVM_Int09ReadScan(BYTE*ascii) DECLSPEC_HIDDEN; /* int10.c */ extern void WINAPI DOSVM_Int10Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void DOSVM_PutChar(BYTE ascii) DECLSPEC_HIDDEN; /* int13.c */ extern void WINAPI DOSVM_Int13Handler(CONTEXT*) DECLSPEC_HIDDEN; /* int15.c */ extern void WINAPI DOSVM_Int15Handler(CONTEXT*) DECLSPEC_HIDDEN; /* int16.c */ extern void WINAPI DOSVM_Int16Handler(CONTEXT*) DECLSPEC_HIDDEN; extern BOOL DOSVM_Int16ReadChar( BYTE *, BYTE *, CONTEXT * ) DECLSPEC_HIDDEN; extern BOOL DOSVM_Int16AddChar(BYTE ascii, BYTE scan) DECLSPEC_HIDDEN; /* int21.c */ extern void WINAPI DOSVM_Int21Handler(CONTEXT*) DECLSPEC_HIDDEN; /* int25.c */ BOOL DOSVM_RawRead( BYTE, DWORD, DWORD, BYTE *, BOOL ) DECLSPEC_HIDDEN; void WINAPI DOSVM_Int25Handler( CONTEXT * ) DECLSPEC_HIDDEN; /* int26.c */ BOOL DOSVM_RawWrite( BYTE, DWORD, DWORD, BYTE *, BOOL ) DECLSPEC_HIDDEN; void WINAPI DOSVM_Int26Handler( CONTEXT * ) DECLSPEC_HIDDEN; /* int2f.c */ extern void WINAPI DOSVM_Int2fHandler(CONTEXT*) DECLSPEC_HIDDEN; extern void MSCDEX_InstallCDROM(void) DECLSPEC_HIDDEN; /* int31.c */ extern void WINAPI DOSVM_Int31Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void WINAPI DOSVM_RawModeSwitchHandler(CONTEXT*) DECLSPEC_HIDDEN; extern BOOL DOSVM_IsDos32(void) DECLSPEC_HIDDEN; extern FARPROC16 DPMI_AllocInternalRMCB(RMCBPROC) DECLSPEC_HIDDEN; extern int DPMI_CallRMProc(CONTEXT*,LPWORD,int,int) DECLSPEC_HIDDEN; extern BOOL DOSVM_CheckWrappers(CONTEXT*) DECLSPEC_HIDDEN; /* int33.c */ extern void WINAPI DOSVM_Int33Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void DOSVM_Int33Message(UINT,WPARAM,LPARAM) DECLSPEC_HIDDEN; extern void DOSVM_Int33Console(MOUSE_EVENT_RECORD*) DECLSPEC_HIDDEN; /* int67.c */ extern void WINAPI DOSVM_Int67Handler(CONTEXT*) DECLSPEC_HIDDEN; extern void EMS_Ioctl_Handler(CONTEXT*) DECLSPEC_HIDDEN; /* interrupts.c */ extern void __wine_call_int_handler( CONTEXT *, BYTE ) DECLSPEC_HIDDEN; extern void DOSVM_CallBuiltinHandler( CONTEXT *, BYTE ) DECLSPEC_HIDDEN; extern BOOL DOSVM_EmulateInterruptPM( CONTEXT *, BYTE ) DECLSPEC_HIDDEN; extern BOOL DOSVM_EmulateInterruptRM( CONTEXT *, BYTE ) DECLSPEC_HIDDEN; extern FARPROC16 DOSVM_GetPMHandler16( BYTE ) DECLSPEC_HIDDEN; extern FARPROC48 DOSVM_GetPMHandler48( BYTE ) DECLSPEC_HIDDEN; extern FARPROC16 DOSVM_GetRMHandler( BYTE ) DECLSPEC_HIDDEN; extern void DOSVM_HardwareInterruptPM( CONTEXT *, BYTE ) DECLSPEC_HIDDEN; extern void DOSVM_HardwareInterruptRM( CONTEXT *, BYTE ) DECLSPEC_HIDDEN; extern void DOSVM_SetPMHandler16( BYTE, FARPROC16 ) DECLSPEC_HIDDEN; extern void DOSVM_SetPMHandler48( BYTE, FARPROC48 ) DECLSPEC_HIDDEN; extern void DOSVM_SetRMHandler( BYTE, FARPROC16 ) DECLSPEC_HIDDEN; /* ioports.c */ extern DWORD DOSVM_inport( int port, int size, CONTEXT *ctx ) DECLSPEC_HIDDEN; extern void DOSVM_outport( int port, int size, DWORD value, CONTEXT *ctx ) DECLSPEC_HIDDEN; extern void DOSVM_setportcb(OUTPROC outproc, INPROC inproc, int port, OUTPROC *oldout, INPROC* oldin) DECLSPEC_HIDDEN; /* relay.c */ void DOSVM_RelayHandler( CONTEXT * ) DECLSPEC_HIDDEN; void DOSVM_BuildCallFrame( CONTEXT *, DOSRELAY, LPVOID ) DECLSPEC_HIDDEN; /* soundblaster.c */ extern void SB_ioport_out( WORD port, BYTE val ) DECLSPEC_HIDDEN; extern BYTE SB_ioport_in( WORD port ) DECLSPEC_HIDDEN; /* timer.c */ extern void WINAPI DOSVM_Int08Handler(CONTEXT*) DECLSPEC_HIDDEN; extern char *DOSMEM_dosmem; extern void *dosvm_vm86_teb_info; #endif /* __WINE_DOSEXE_H */ ================================================ FILE: krnl386/dosmem.c ================================================ /* * DOS memory emulation * * Copyright 1995 Alexandre Julliard * Copyright 1996 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #ifdef HAVE_SYS_MMAN_H # include #endif #include "windef.h" #include "winbase.h" #include "excpt.h" #include "winternl.h" #include "wine/winbase16.h" #include "kernel16_private.h" #include "dosexe.h" #include "wine/debug.h" #include "windows/wownt32.h" WINE_DEFAULT_DEBUG_CHANNEL(dosmem); WINE_DECLARE_DEBUG_CHANNEL(selector); WORD DOSMEM_0000H; /* segment at 0:0 */ WORD DOSMEM_BiosDataSeg; /* BIOS data segment at 0x40:0 */ WORD DOSMEM_BiosSysSeg; /* BIOS ROM segment at 0xf000:0 */ /* DOS memory highest address (including HMA) */ #define DOSMEM_SIZE 0x110000 #define DOSMEM_64KB 0x10000 /* * Memory Control Block (MCB) definition * FIXME: implement Allocation Strategy */ #define MCB_DUMP(mc) \ TRACE ("MCB_DUMP base=%p type=%02xh psp=%04xh size=%04xh\n", mc, mc->type, mc->psp , mc->size ) #define MCB_NEXT(mc) \ (MCB*) ((mc->type==MCB_TYPE_LAST) ? NULL : (char*)(mc) + ((mc->size + 1) << 4) ) /* FIXME: should we check more? */ #define MCB_VALID(mc) \ ((mc->type==MCB_TYPE_NORMAL) || (mc->type==MCB_TYPE_LAST)) #define MCB_TYPE_NORMAL 0x4d #define MCB_TYPE_LAST 0x5a #define MCB_PSP_DOS 0x0060 #define MCB_PSP_FREE 0 #include "pshpack1.h" typedef struct { BYTE type; WORD psp; /* segment of owner psp */ WORD size; /* in paragraphs */ BYTE pad[3]; BYTE name[8]; } MCB; #include "poppack.h" /* #define __DOSMEM_DEBUG__ */ #define VM_STUB(x) (0x90CF00CD|(x<<8)) /* INT x; IRET; NOP */ #define VM_STUB_SEGMENT 0xf000 /* BIOS segment */ /* FIXME: this should be moved to the LOL */ static MCB* DOSMEM_root_block; /* when looking at DOS and real mode memory, we activate in three different * modes, depending the situation. * 1/ By default (protected mode), the first MB of memory (actually 0x110000, * when you also look at the HMA part) is always reserved, whatever you do. * We allocated some PM selectors to this memory, even if this area is not * committed at startup * 2/ if a program tries to use the memory through the selectors, we actually * commit this memory, made of: BIOS segment, but also some system * information, usually low in memory that we map for the circumstance also * in the BIOS segment, so that we keep the low memory protected (for NULL * pointer deref catching for example). In this case, we're still in PM * mode, accessing part of the "physical" real mode memory. In fact, we don't * map all the first meg, we keep 64k uncommitted to still catch NULL * pointers dereference * 3/ if the process enters the real mode, then we (also) commit the full first * MB of memory (and also initialize the DOS structures in it). */ /* DOS memory base (linear in process address space) */ /*static*/ char *DOSMEM_dosmem; static char *DOSMEM_sysmem; /* number of bytes protected from _dosmem. 0 when DOS memory is initialized, * 64k otherwise to trap NULL pointers deref */ static DWORD DOSMEM_protect; static LONG WINAPI dosmem_handler(EXCEPTION_POINTERS* except); static void *vectored_handler; /*********************************************************************** * DOSMEM_FillIsrTable * * Fill the interrupt table with fake BIOS calls to BIOSSEG (0xf000). * * NOTES: * Linux normally only traps INTs performed from or destined to BIOSSEG * for us to handle, if the int_revectored table is empty. Filling the * interrupt table with calls to INT stubs in BIOSSEG allows DOS programs * to hook interrupts, as well as use their familiar retf tricks to call * them, AND let Wine handle any unhooked interrupts transparently. */ static void DOSMEM_FillIsrTable(void) { SEGPTR *isr = (SEGPTR*)DOSMEM_sysmem; int x; for (x=0; x<256; x++) isr[x]=MAKESEGPTR(VM_STUB_SEGMENT,x*4); } static void DOSMEM_MakeIsrStubs(void) { DWORD *stub = (DWORD*)(DOSMEM_dosmem + (VM_STUB_SEGMENT << 4)); int x; for (x=0; x<256; x++) stub[x]=VM_STUB(x); } BIOSDATA* DOSVM_BiosData(void) { return (BIOSDATA *)(DOSMEM_sysmem + 0x400); } /********************************************************************** * DOSMEM_GetTicksSinceMidnight * * Return number of clock ticks since midnight. */ static DWORD DOSMEM_GetTicksSinceMidnight(void) { SYSTEMTIME time; /* This should give us the (approximately) correct * 18.206 clock ticks per second since midnight. */ GetLocalTime( &time ); return (((time.wHour * 3600 + time.wMinute * 60 + time.wSecond) * 18206) / 1000) + (time.wMilliseconds * 1000 / 54927); } /*********************************************************************** * DOSMEM_FillBiosSegments * * Fill the BIOS data segment with dummy values. */ static void DOSMEM_FillBiosSegments(void) { BYTE *pBiosSys = (BYTE*)DOSMEM_dosmem + 0xf0000; BYTE *pBiosROMTable = pBiosSys+0xe6f5; BIOSDATA *pBiosData = DOSVM_BiosData(); static const char bios_date[] = "13/01/99"; /* Clear all unused values */ memset( pBiosData, 0, sizeof(*pBiosData) ); /* FIXME: should check the number of configured drives and ports */ pBiosData->Com1Addr = 0x3f8; pBiosData->Com2Addr = 0x2f8; pBiosData->Lpt1Addr = 0x378; pBiosData->Lpt2Addr = 0x278; pBiosData->InstalledHardware = 0x5463; pBiosData->MemSize = 640; pBiosData->NextKbdCharPtr = 0x1e; pBiosData->FirstKbdCharPtr = 0x1e; pBiosData->VideoMode = 3; pBiosData->VideoColumns = 80; pBiosData->VideoPageSize = 80 * 25 * 2; pBiosData->VideoPageStartAddr = 0xb800; pBiosData->VideoCtrlAddr = 0x3d4; pBiosData->Ticks = DOSMEM_GetTicksSinceMidnight(); pBiosData->NbHardDisks = 2; pBiosData->KbdBufferStart = 0x1e; pBiosData->KbdBufferEnd = 0x3e; pBiosData->RowsOnScreenMinus1 = 24; pBiosData->BytesPerChar = 0x10; pBiosData->ModeOptions = 0x64; pBiosData->FeatureBitsSwitches = 0xf9; pBiosData->VGASettings = 0x51; pBiosData->DisplayCombination = 0x08; pBiosData->DiskDataRate = 0; /* fill ROM configuration table (values from Award) */ *(pBiosROMTable+0x0) = 0x08; /* number of bytes following LO */ *(pBiosROMTable+0x1) = 0x00; /* number of bytes following HI */ *(pBiosROMTable+0x2) = 0xfc; /* model */ *(pBiosROMTable+0x3) = 0x01; /* submodel */ *(pBiosROMTable+0x4) = 0x00; /* BIOS revision */ *(pBiosROMTable+0x5) = 0x74; /* feature byte 1 */ *(pBiosROMTable+0x6) = 0x00; /* feature byte 2 */ *(pBiosROMTable+0x7) = 0x00; /* feature byte 3 */ *(pBiosROMTable+0x8) = 0x00; /* feature byte 4 */ *(pBiosROMTable+0x9) = 0x00; /* feature byte 5 */ /* BIOS date string */ memcpy(pBiosSys+0xfff5, bios_date, sizeof bios_date); /* BIOS ID */ *(pBiosSys+0xfffe) = 0xfc; /* Reboot vector (f000:fff0 or ffff:0000) */ *(DWORD*)(pBiosSys + 0xfff0) = VM_STUB(0x19); } BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); /*********************************************************************** * BiosTick * * Increment the BIOS tick counter. Called by timer signal handler. */ static void CALLBACK BiosTick( LPVOID arg, DWORD low, DWORD high ) { FARPROC16 tickhndlr = DOSVM_GetPMHandler16(8); BIOSDATA *pBiosData = arg; pBiosData->Ticks++; // TODO: fix PIT if (tickhndlr && (tickhndlr != (FARPROC16)MAKESEGPTR(DOSVM_dpmi_segments->int16_sel, 5 * 8))) { DWORD ret; WORD dummyflags; vm_inject(tickhndlr, WCB16_PASCAL, 2, &dummyflags, &ret); } } /*********************************************************************** * timer_thread */ static DWORD CALLBACK timer_thread( void *arg ) { LARGE_INTEGER when; HANDLE timer; if (!(timer = CreateWaitableTimerA( NULL, FALSE, NULL ))) return 0; when.u.LowPart = when.u.HighPart = 0; SetWaitableTimer( timer, &when, 55 /* actually 54.925 */, BiosTick, arg, FALSE ); for (;;) SleepEx( INFINITE, TRUE ); } /*********************************************************************** * DOSVM_start_bios_timer * * Start the BIOS ticks timer when the app accesses selector 0x40. */ __declspec(dllexport) void DOSVM_start_bios_timer(void) { static LONG running; if (!InterlockedExchange( &running, 1 )) CloseHandle( CreateThread( NULL, 0, timer_thread, DOSVM_BiosData(), 0, NULL )); } /*********************************************************************** * DOSMEM_Collapse * * Helper function for internal use only. * Attach all following free blocks to this one, even if this one is not free. */ static void DOSMEM_Collapse( MCB* mcb ) { MCB* next = MCB_NEXT( mcb ); while (next && next->psp == MCB_PSP_FREE) { mcb->size = mcb->size + next->size + 1; mcb->type = next->type; /* make sure keeping MCB_TYPE_LAST */ next = MCB_NEXT( next ); } } /****************************************************************** * DOSMEM_InitDosMemory */ BOOL DOSMEM_InitDosMemory(void) { //FIXME //emulatorgasubeki //ERR("NOTIMPL"); //return TRUE; static BOOL done; static HANDLE hRunOnce; DWORD old_prot; if (done) return TRUE; /* FIXME: this isn't 100% thread safe, as we won't catch accesses while initializing */ if (hRunOnce == 0) { HANDLE hEvent = CreateEventW( NULL, TRUE, FALSE, NULL ); if (InterlockedCompareExchangePointer( &hRunOnce, hEvent, 0 ) == 0) { BOOL ret; DWORD reserve; /* ok, we're the winning thread */ if (!(ret = VirtualProtect( DOSMEM_dosmem + DOSMEM_protect, DOSMEM_SIZE - DOSMEM_protect, PAGE_READWRITE, &old_prot ))) ERR("Cannot load access low 1Mb, DOS subsystem unavailable\n"); RemoveVectoredExceptionHandler( vectored_handler ); /* * Reserve either: * - lowest 64k for NULL pointer catching (Win16) * - lowest 1k for interrupt handlers and * another 0.5k for BIOS, DOS and intra-application * areas (DOS) */ if (DOSMEM_dosmem != DOSMEM_sysmem) reserve = 0x10000; /* 64k */ else reserve = 0x600; /* 1.5k */ /* * Set DOS memory base and initialize conventional memory. */ DOSMEM_FillBiosSegments(); DOSMEM_FillIsrTable(); /* align root block to paragraph */ DOSMEM_root_block = (MCB*)(DOSMEM_dosmem + reserve); DOSMEM_root_block->type = MCB_TYPE_LAST; DOSMEM_root_block->psp = MCB_PSP_FREE; DOSMEM_root_block->size = (DOSMEM_dosmem + 0x9fffc - ((char*)DOSMEM_root_block)) >> 4; TRACE("DOS conventional memory initialized, %d bytes free.\n", DOSMEM_Available()); DOSVM_InitSegments(); SetEvent( hRunOnce ); done = TRUE; return ret; } /* someone beat us here... */ CloseHandle( hEvent ); } /* and wait for the winner to have finished */ WaitForSingleObject( hRunOnce, INFINITE ); return TRUE; } /****************************************************************** * dosmem_handler * * Handler to catch access to our 1MB address space reserved for real memory */ static LONG WINAPI dosmem_handler(EXCEPTION_POINTERS* except) { if (except->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { char *addr = (char *)except->ExceptionRecord->ExceptionInformation[1]; if (addr >= DOSMEM_dosmem + DOSMEM_protect && addr < DOSMEM_dosmem + DOSMEM_SIZE) { if (DOSMEM_InitDosMemory()) return EXCEPTION_CONTINUE_EXECUTION; } } return EXCEPTION_CONTINUE_SEARCH; } /*********************************************************************** * DOSMEM_Init * * Create the dos memory segments, and store them into the KERNEL * exported values. */ BOOL DOSMEM_Init(void) { void *addr = (void *)1; SIZE_T size = DOSMEM_SIZE - 1; if (NtAllocateVirtualMemory( GetCurrentProcess(), &addr, 0, &size, MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS )) { addr = 0; if (NtAllocateVirtualMemory(GetCurrentProcess(), &addr, 0, &size, MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS)) { ERR("Cannot allocate DOS memory\n"); //ExitProcess(1); } } if (addr <= (void *)DOSMEM_64KB) { DOSMEM_dosmem = 0; DOSMEM_protect = DOSMEM_64KB; DOSMEM_sysmem = (char *)0xf0000; /* store sysmem in high addresses for now */ } else { WARN( "First megabyte not available for DOS address space.\n" ); DOSMEM_dosmem = addr; DOSMEM_protect = 0; DOSMEM_sysmem = DOSMEM_dosmem; } vectored_handler = AddVectoredExceptionHandler(FALSE, dosmem_handler); DOSMEM_0000H = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_sysmem, DOSMEM_64KB, 0, WINE_LDT_FLAGS_DATA, 0 ); DOSMEM_BiosDataSeg = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_sysmem + 0x400, 0x100, 0, WINE_LDT_FLAGS_DATA, 0 ); DOSMEM_BiosSysSeg = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_dosmem + 0xf0000, DOSMEM_64KB, 0, WINE_LDT_FLAGS_DATA, 0 ); return TRUE; } /*********************************************************************** * DOSMEM_MapLinearToDos * * Linear address to the DOS address space. */ UINT DOSMEM_MapLinearToDos(LPVOID ptr) { if (((char*)ptr >= DOSMEM_dosmem) && ((char*)ptr < DOSMEM_dosmem + DOSMEM_SIZE)) return (char *)ptr - DOSMEM_dosmem; return (UINT)ptr; } /*********************************************************************** * DOSMEM_MapDosToLinear * * DOS linear address to the linear address space. */ LPVOID DOSMEM_MapDosToLinear(UINT ptr) { if (ptr < DOSMEM_SIZE) return DOSMEM_dosmem + ptr; return (LPVOID)ptr; } /*********************************************************************** * DOSMEM_MapRealToLinear * * Real mode DOS address into a linear pointer */ LPVOID DOSMEM_MapRealToLinear(DWORD x) { LPVOID lin; lin = DOSMEM_dosmem + HIWORD(x) * 16 + LOWORD(x); TRACE_(selector)("(0x%08x) returns %p.\n", x, lin ); return lin; } /*********************************************************************** * DOSMEM_AllocBlock * * Carve a chunk of the DOS memory block (without selector). */ LPVOID DOSMEM_AllocBlock(UINT size, UINT16* pseg) { MCB *curr; MCB *next = NULL; WORD psp; DOSMEM_InitDosMemory(); curr = DOSMEM_root_block; if (!(psp = DOSVM_psp)) psp = MCB_PSP_DOS; if (pseg) *pseg = 0; TRACE( "(%04xh)\n", size ); /* round up to paragraph */ size = (size + 15) >> 4; #ifdef __DOSMEM_DEBUG__ DOSMEM_Available(); /* checks the whole MCB list */ #endif /* loop over all MCB and search the next large enough MCB */ while (curr) { if (!MCB_VALID (curr)) { ERR( "MCB List Corrupt\n" ); MCB_DUMP( curr ); return NULL; } if (curr->psp == MCB_PSP_FREE) { DOSMEM_Collapse( curr ); /* is it large enough (one paragraph for the MCB)? */ if (curr->size >= size) { if (curr->size > size) { /* split curr */ next = (MCB *) ((char*) curr + ((size+1) << 4)); next->psp = MCB_PSP_FREE; next->size = curr->size - (size+1); next->type = curr->type; curr->type = MCB_TYPE_NORMAL; curr->size = size; } /* curr is the found block */ curr->psp = psp; if( pseg ) *pseg = (((char*)curr) + 16 - DOSMEM_dosmem) >> 4; return (LPVOID) ((char*)curr + 16); } } curr = MCB_NEXT(curr); } return NULL; } /*********************************************************************** * DOSMEM_FreeBlock */ BOOL DOSMEM_FreeBlock(void* ptr) { MCB* mcb = (MCB*) ((char*)ptr - 16); TRACE( "(%p)\n", ptr ); #ifdef __DOSMEM_DEBUG__ DOSMEM_Available(); #endif if (!MCB_VALID (mcb)) { ERR( "MCB invalid\n" ); MCB_DUMP( mcb ); return FALSE; } mcb->psp = MCB_PSP_FREE; DOSMEM_Collapse( mcb ); return TRUE; } /*********************************************************************** * DOSMEM_ResizeBlock * * Resize DOS memory block in place. Returns block size or -1 on error. * * If exact is TRUE, returned value is either old or requested block * size. If exact is FALSE, block is expanded even if there is not * enough space for full requested block size. * * TODO: return also biggest block size */ UINT DOSMEM_ResizeBlock(void *ptr, UINT size, BOOL exact) { MCB* mcb = (MCB*) ((char*)ptr - 16); MCB* next; TRACE( "(%p,%04xh,%s)\n", ptr, size, exact ? "TRUE" : "FALSE" ); /* round up to paragraph */ size = (size + 15) >> 4; #ifdef __DOSMEM_DEBUG__ DOSMEM_Available(); #endif if (!MCB_VALID (mcb)) { ERR( "MCB invalid\n" ); MCB_DUMP( mcb ); return -1; } /* resize needed? */ if (mcb->size == size) return size << 4; /* collapse free blocks */ DOSMEM_Collapse( mcb ); /* shrink mcb ? */ if (mcb->size > size) { next = (MCB *) ((char*)mcb + ((size+1) << 4)); next->type = mcb->type; next->psp = MCB_PSP_FREE; next->size = mcb->size - (size+1); mcb->type = MCB_TYPE_NORMAL; mcb->size = size; return size << 4; } if (!exact) { return mcb->size << 4; } return -1; } /*********************************************************************** * DOSMEM_Available */ UINT DOSMEM_Available(void) { UINT available = 0; UINT total = 0; MCB *curr = DOSMEM_root_block; /* loop over all MCB and search the largest free MCB */ while (curr) { #ifdef __DOSMEM_DEBUG__ MCB_DUMP( curr ); #endif if (!MCB_VALID (curr)) { ERR( "MCB List Corrupt\n" ); MCB_DUMP( curr ); return 0; } if (curr->psp == MCB_PSP_FREE && curr->size > available ) available = curr->size; total += curr->size + 1; curr = MCB_NEXT( curr ); } TRACE( " %04xh of %04xh paragraphs available\n", available, total ); return available << 4; } /****************************************************************** * DOSMEM_MapDosLayout * * Initialize the first MB of memory to look like a real DOS setup */ BOOL DOSMEM_MapDosLayout(void) { static BOOL already_mapped; DWORD old_prot; if (!already_mapped) { if (DOSMEM_dosmem || !VirtualProtect( NULL, DOSMEM_SIZE, PAGE_EXECUTE_READWRITE, &old_prot )) { //ERR( "Need full access to the first megabyte for DOS mode\n" ); //ExitProcess(1); WARN( "Need full access to the first megabyte for DOS mode\n" ); } /* copy the BIOS and ISR area down */ memcpy( DOSMEM_dosmem, DOSMEM_sysmem, 0x400 + 0x100 ); DOSMEM_sysmem = DOSMEM_dosmem; SetSelectorBase( DOSMEM_0000H, 0 ); SetSelectorBase( DOSMEM_BiosDataSeg, 0x400 ); /* we may now need the actual interrupt stubs, and since we've just moved the * interrupt vector table away, we can fill the area with stubs instead... */ DOSMEM_MakeIsrStubs(); already_mapped = TRUE; } return TRUE; } ================================================ FILE: krnl386/dosvm.c ================================================ /* * DOS Virtual Machine * * Copyright 1998 Ove Kåven * Copyright 2002 Jukka Heinonen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * Note: This code hasn't been completely cleaned up yet. */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_SYS_TIME_H # include #endif #include #include "wine/winbase16.h" #include "wine/exception.h" #include "windef.h" #include "winbase.h" #include "winternl.h" #include "wingdi.h" #include "winuser.h" #include "windows/wownt32.h" #include "winnt.h" #include "wincon.h" #include "dosexe.h" #include "wine/debug.h" #include "excpt.h" #include "kernel16_private.h" WINE_DEFAULT_DEBUG_CHANNEL(int); #ifdef MZ_SUPPORTED WINE_DECLARE_DEBUG_CHANNEL(module); WINE_DECLARE_DEBUG_CHANNEL(relay); #endif WORD DOSVM_psp = 0; WORD DOSVM_retval = 0; /* * Wine DOS memory layout above 640k: * * a0000 - affff : VGA graphics (vga.c) * b0000 - bffff : Monochrome text (unused) * b8000 - bffff : VGA text (vga.c) * c0000 - cffff : EMS frame (int67.c) * d0000 - effff : Free memory for UMBs (himem.c) * f0000 - fffff : BIOS stuff (msdos/dosmem.c) * 100000 -10ffff : High memory area (unused) */ /* * Table of real mode segments and protected mode selectors * for code stubs and other miscellaneous storage. */ struct DPMI_segments *DOSVM_dpmi_segments = NULL; /* * First and last address available for upper memory blocks. */ #define DOSVM_UMB_BOTTOM 0xd0000 #define DOSVM_UMB_TOP 0xeffff /* * First free address for upper memory blocks. */ static DWORD DOSVM_umb_free = DOSVM_UMB_BOTTOM; typedef struct _DOSEVENT { int irq,priority; DOSRELAY relay; void *data; struct _DOSEVENT *next; } DOSEVENT, *LPDOSEVENT; static struct _DOSEVENT *pending_event, *current_event; static HANDLE event_notifier; static CRITICAL_SECTION qcrit; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &qcrit, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": qcrit") } }; static CRITICAL_SECTION qcrit = { &critsect_debug, -1, 0, 0, 0, 0 }; /*********************************************************************** * DOSVM_HasPendingEvents * * Return true if there are pending events that are not * blocked by currently active event. */ static BOOL DOSVM_HasPendingEvents( void ) { if (!pending_event) return FALSE; if (!current_event) return TRUE; if (pending_event->priority < current_event->priority) return TRUE; return FALSE; } /*********************************************************************** * DOSVM_SendOneEvent * * Process single pending event. * * This function should be called with queue critical section locked. * The function temporarily releases the critical section if it is * possible that internal interrupt handler or user procedure will * be called. This is because we may otherwise get a deadlock if * another thread is waiting for the same critical section. */ static void DOSVM_SendOneEvent( CONTEXT *context ) { LPDOSEVENT event = pending_event; /* Remove from pending events list. */ pending_event = event->next; /* Process active event. */ if (event->irq >= 0) { BYTE intnum = (event->irq < 8) ? (event->irq + 8) : (event->irq - 8 + 0x70); /* Event is an IRQ, move it to current events list. */ event->next = current_event; current_event = event; TRACE( "Dispatching IRQ %d.\n", event->irq ); if (ISV86(context)) { /* * Note that if DOSVM_HardwareInterruptRM calls an internal * interrupt directly, current_event might be cleared * (and event freed) in this call. */ LeaveCriticalSection(&qcrit); DOSVM_HardwareInterruptRM( context, intnum ); EnterCriticalSection(&qcrit); } else { /* * This routine only modifies current context so it is * not necessary to release critical section. */ DOSVM_HardwareInterruptPM( context, intnum ); } } else { /* Callback event. */ TRACE( "Dispatching callback event.\n" ); if (ISV86(context)) { /* * Call relay immediately in real mode. */ LeaveCriticalSection(&qcrit); (*event->relay)( context, event->data ); EnterCriticalSection(&qcrit); } else { /* * Force return to relay code. We do not want to * call relay directly because we may be inside a signal handler. */ DOSVM_BuildCallFrame( context, event->relay, event->data ); } HeapFree(GetProcessHeap(), 0, event); } } /*********************************************************************** * DOSVM_SendQueuedEvents * * As long as context instruction pointer stays unmodified, * process all pending events that are not blocked by currently * active event. * * This routine assumes that caller has already cleared TEB.vm86_pending * and checked that interrupts are enabled. */ void DOSVM_SendQueuedEvents( CONTEXT *context ) { DWORD old_cs = context->SegCs; DWORD old_ip = context->Eip; EnterCriticalSection(&qcrit); TRACE( "Called in %s mode %s events pending (time=%d)\n", ISV86(context) ? "real" : "protected", DOSVM_HasPendingEvents() ? "with" : "without", GetTickCount() ); TRACE( "cs:ip=%04x:%08x, ss:sp=%04x:%08x\n", context->SegCs, context->Eip, context->SegSs, context->Esp); while (context->SegCs == old_cs && context->Eip == old_ip && DOSVM_HasPendingEvents()) { DOSVM_SendOneEvent(context); /* * Event handling may have turned pending events flag on. * We disable it here because this prevents some * unnecessary calls to this function. */ get_vm86_teb_info()->vm86_pending = 0; } #ifdef MZ_SUPPORTED if (DOSVM_HasPendingEvents()) { /* * Interrupts disabled, but there are still * pending events, make sure that pending flag is turned on. */ TRACE( "Another event is pending, setting VIP flag.\n" ); get_vm86_teb_info()->vm86_pending |= VIP_MASK; } #else FIXME("No DOS .exe file support on this platform (yet)\n"); #endif /* MZ_SUPPORTED */ LeaveCriticalSection(&qcrit); } #ifdef MZ_SUPPORTED /*********************************************************************** * DOSVM_QueueEvent */ void DOSVM_QueueEvent( INT irq, INT priority, DOSRELAY relay, LPVOID data) { LPDOSEVENT event, cur, prev; BOOL old_pending; if (MZ_Current()) { event = HeapAlloc(GetProcessHeap(), 0, sizeof(DOSEVENT)); if (!event) { ERR("out of memory allocating event entry\n"); return; } event->irq = irq; event->priority = priority; event->relay = relay; event->data = data; EnterCriticalSection(&qcrit); old_pending = DOSVM_HasPendingEvents(); /* insert event into linked list, in order *after* * all earlier events of higher or equal priority */ cur = pending_event; prev = NULL; while (cur && cur->priority<=priority) { prev = cur; cur = cur->next; } event->next = cur; if (prev) prev->next = event; else pending_event = event; if (!old_pending && DOSVM_HasPendingEvents()) { TRACE("new event queued, signalling (time=%d)\n", GetTickCount()); /* Alert VM86 thread about the new event. */ //ERR("kill(%d, %d)\n", dosvm_pid, 12); //see dlls/ntdll/signal_i386.c //get vm's thread teb ((WINE_VM86_TEB_INFO*)dosvm_vm86_teb_info)->vm86_pending |= VIP_MASK; //=> VM thread //kill(dosvm_pid,SIGUSR2); /* Wake up DOSVM_Wait so that it can serve pending events. */ SetEvent(event_notifier); } else { TRACE("new event queued (time=%d)\n", GetTickCount()); } LeaveCriticalSection(&qcrit); } else { /* DOS subsystem not running */ /* (this probably means that we're running a win16 app * which uses DPMI to thunk down to DOS services) */ if (irq<0) { /* callback event, perform it with dummy context */ CONTEXT context; memset(&context,0,sizeof(context)); (*relay)(&context,data); } else { ERR("IRQ without DOS task: should not happen\n"); } } } static void DOSVM_ProcessConsole(void) { INPUT_RECORD msg; DWORD res; BYTE scan, ascii; if (ReadConsoleInputA(GetStdHandle(STD_INPUT_HANDLE),&msg,1,&res)) { switch (msg.EventType) { case KEY_EVENT: scan = msg.Event.KeyEvent.wVirtualScanCode; ascii = msg.Event.KeyEvent.uChar.AsciiChar; TRACE("scan %02x, ascii %02x\n", scan, ascii); /* set the "break" (release) flag if key released */ if (!msg.Event.KeyEvent.bKeyDown) scan |= 0x80; /* check whether extended bit is set, * and if so, queue the extension prefix */ if (msg.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY) { DOSVM_Int09SendScan(0xE0,0); } DOSVM_Int09SendScan(scan, ascii); break; case MOUSE_EVENT: DOSVM_Int33Console(&msg.Event.MouseEvent); break; case WINDOW_BUFFER_SIZE_EVENT: FIXME("unhandled WINDOW_BUFFER_SIZE_EVENT.\n"); break; case MENU_EVENT: FIXME("unhandled MENU_EVENT.\n"); break; case FOCUS_EVENT: FIXME("unhandled FOCUS_EVENT.\n"); break; default: FIXME("unknown console event: %d\n", msg.EventType); } } } static void DOSVM_ProcessMessage(MSG *msg) { BYTE scan = 0; TRACE("got message %04x, wparam=%08lx, lparam=%08lx\n",msg->message,msg->wParam,msg->lParam); if ((msg->message>=WM_MOUSEFIRST)&& (msg->message<=WM_MOUSELAST)) { DOSVM_Int33Message(msg->message,msg->wParam,msg->lParam); } else { switch (msg->message) { case WM_KEYUP: scan = 0x80; case WM_KEYDOWN: scan |= (msg->lParam >> 16) & 0x7f; /* check whether extended bit is set, * and if so, queue the extension prefix */ if (msg->lParam & 0x1000000) { /* FIXME: some keys (function keys) have * extended bit set even when they shouldn't, * should check for them */ DOSVM_Int09SendScan(0xE0,0); } DOSVM_Int09SendScan(scan,0); break; } } } /*********************************************************************** * DOSVM_Wait * * Wait for asynchronous events. This routine temporarily enables * interrupts and waits until some asynchronous event has been * processed. */ void DOSVM_Wait( CONTEXT *waitctx ) { if (DOSVM_HasPendingEvents()) { CONTEXT context = *waitctx; /* * If DOSVM_Wait is called from protected mode we emulate * interrupt reflection and convert context into real mode context. * This is actually the correct thing to do as long as DOSVM_Wait * is only called from those interrupt functions that DPMI reflects * to real mode. * * FIXME: Need to think about where to place real mode stack. * FIXME: If DOSVM_Wait calls are nested stack gets corrupted. * Can this really happen? */ if (!ISV86(&context)) { context.EFlags |= V86_FLAG; context.SegSs = 0xffff; context.Esp = 0; } context.EFlags |= VIF_MASK; context.SegCs = 0; context.Eip = 0; DOSVM_SendQueuedEvents(&context); if(context.SegCs || context.Eip) DPMI_CallRMProc( &context, NULL, 0, TRUE ); } else { HANDLE objs[2]; int objc = DOSVM_IsWin16() ? 2 : 1; DWORD waitret; objs[0] = event_notifier; objs[1] = GetStdHandle(STD_INPUT_HANDLE); waitret = MsgWaitForMultipleObjects( objc, objs, FALSE, INFINITE, QS_ALLINPUT ); if (waitret == WAIT_OBJECT_0) { /* * New pending event has been queued, we ignore it * here because it will be processed on next call to * DOSVM_Wait. */ } else if (objc == 2 && waitret == WAIT_OBJECT_0 + 1) { DOSVM_ProcessConsole(); } else if (waitret == WAIT_OBJECT_0 + objc) { MSG msg; while (PeekMessageA(&msg,0,0,0,PM_REMOVE|PM_NOYIELD)) { /* got a message */ DOSVM_ProcessMessage(&msg); /* we don't need a TranslateMessage here */ DispatchMessageA(&msg); } } else { ERR_(module)( "dosvm wait error=%d\n", GetLastError() ); } } } DWORD DOSVM_Loop( HANDLE hThread ) { HANDLE objs[2]; int count = 0; MSG msg; DWORD waitret; objs[count++] = hThread; DWORD ununsed; if (GetConsoleMode( GetStdHandle(STD_INPUT_HANDLE), &ununsed)) objs[count++] = GetStdHandle(STD_INPUT_HANDLE); for(;;) { TRACE_(int)("waiting for action\n"); waitret = MsgWaitForMultipleObjects(count, objs, FALSE, INFINITE, QS_ALLINPUT); if (waitret == WAIT_OBJECT_0) { DWORD rv; if(!GetExitCodeThread(hThread, &rv)) { ERR("Failed to get thread exit code!\n"); rv = 0; } return rv; } else if (waitret == WAIT_OBJECT_0 + count) { while (PeekMessageA(&msg,0,0,0,PM_REMOVE)) { if (msg.hwnd) { /* it's a window message */ DOSVM_ProcessMessage(&msg); DispatchMessageA(&msg); } else { /* it's a thread message */ switch (msg.message) { case WM_QUIT: /* stop this madness!! */ return 0; case WM_USER + 1: /* run passed procedure in this thread */ /* (sort of like APC, but we signal the completion) */ { DOS_SPC *spc = (DOS_SPC *)msg.lParam; TRACE_(int)("calling %p with arg %08lx\n", spc->proc, spc->arg); (spc->proc)(spc->arg); TRACE_(int)("done, signalling event %lx\n", msg.wParam); SetEvent( (HANDLE)msg.wParam ); } break; default: DispatchMessageA(&msg); } } } } else if (waitret == WAIT_OBJECT_0 + 1) { DOSVM_ProcessConsole(); } else { ERR_(int)("MsgWaitForMultipleObjects returned unexpected value.\n"); return 0; } } } static LONG WINAPI exception_handler(EXCEPTION_POINTERS *eptr) { EXCEPTION_RECORD *rec = eptr->ExceptionRecord; CONTEXT *context = eptr->ContextRecord; int arg = rec->ExceptionInformation[0]; BOOL ret; context = *(CONTEXT**)(&rec->ExceptionInformation[1]); switch(rec->ExceptionCode) { case EXCEPTION_VM86_INTx: TRACE_(relay)("Call DOS int 0x%02x ret=%04x:%04x\n" " eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x\n" " ebp=%08x esp=%08x ds=%04x es=%04x fs=%04x gs=%04x flags=%08x\n", arg, context->SegCs, context->Eip, context->Eax, context->Ebx, context->Ecx, context->Edx, context->Esi, context->Edi, context->Ebp, context->Esp, context->SegDs, context->SegEs, context->SegFs, context->SegGs, context->EFlags ); ret = DOSVM_EmulateInterruptRM( context, arg ); TRACE_(relay)("Ret DOS int 0x%02x ret=%04x:%04x\n" " eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x\n" " ebp=%08x esp=%08x ds=%04x es=%04x fs=%04x gs=%04x flags=%08x\n", arg, context->SegCs, context->Eip, context->Eax, context->Ebx, context->Ecx, context->Edx, context->Esi, context->Edi, context->Ebp, context->Esp, context->SegDs, context->SegEs, context->SegFs, context->SegGs, context->EFlags ); return ret ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_EXECUTE_HANDLER; case EXCEPTION_VM86_STI: /* case EXCEPTION_VM86_PICRETURN: */ if (!ISV86(context)) ERR( "Protected mode STI caught by real mode handler!\n" ); DOSVM_SendQueuedEvents(context); return EXCEPTION_CONTINUE_EXECUTION; case EXCEPTION_SINGLE_STEP: ret = DOSVM_EmulateInterruptRM( context, 1 ); return ret ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_EXECUTE_HANDLER; case EXCEPTION_BREAKPOINT: ret = DOSVM_EmulateInterruptRM( context, 3 ); return ret ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_EXECUTE_HANDLER; } return EXCEPTION_CONTINUE_SEARCH; } INT DOSVM_Enter( CONTEXT *context ) { INT ret = 0; if (!ISV86(context)) ERR( "Called with protected mode context!\n" ); __TRY { if (!WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)context )) ret = -1; TRACE_(module)( "ret %d err %u\n", ret, GetLastError() ); } __EXCEPT(exception_handler) { TRACE_(module)( "leaving vm86 mode\n" ); } __ENDTRY return ret; } /*********************************************************************** * DOSVM_PIC_ioport_out */ void DOSVM_PIC_ioport_out( WORD port, BYTE val) { if (port != 0x20) { FIXME( "Unsupported PIC port %04x\n", port ); } else if (val == 0x20 || (val >= 0x60 && val <= 0x67)) { EnterCriticalSection(&qcrit); if (!current_event) { WARN( "%s without active IRQ\n", val == 0x20 ? "EOI" : "Specific EOI" ); } else if (val != 0x20 && val - 0x60 != current_event->irq) { WARN( "Specific EOI but current IRQ %d is not %d\n", current_event->irq, val - 0x60 ); } else { LPDOSEVENT event = current_event; TRACE( "Received %s for current IRQ %d, clearing event\n", val == 0x20 ? "EOI" : "Specific EOI", event->irq ); current_event = event->next; if (event->relay) (*event->relay)(NULL,event->data); HeapFree(GetProcessHeap(), 0, event); if (DOSVM_HasPendingEvents()) { TRACE( "Another event pending, setting pending flag\n" ); get_vm86_teb_info()->vm86_pending |= VIP_MASK; } } LeaveCriticalSection(&qcrit); } else { FIXME( "Unrecognized PIC command %02x\n", val ); } } #else /* !MZ_SUPPORTED */ /*********************************************************************** * DOSVM_Enter */ INT DOSVM_Enter( CONTEXT *context ) { SetLastError( ERROR_NOT_SUPPORTED ); return -1; } /*********************************************************************** * DOSVM_Wait */ void DOSVM_Wait( CONTEXT *waitctx ) { } /*********************************************************************** * DOSVM_PIC_ioport_out */ void DOSVM_PIC_ioport_out( WORD port, BYTE val) {} /*********************************************************************** * DOSVM_QueueEvent */ void DOSVM_QueueEvent( INT irq, INT priority, DOSRELAY relay, LPVOID data) { if (irq<0) { /* callback event, perform it with dummy context */ CONTEXT context; memset(&context,0,sizeof(context)); (*relay)(&context,data); } else { ERR("IRQ without DOS task: should not happen\n"); } } #endif /* MZ_SUPPORTED */ /********************************************************************** * DOSVM_AcknowledgeIRQ * * This routine should be called by all internal IRQ handlers. */ void WINAPI DOSVM_AcknowledgeIRQ( CONTEXT *context ) { /* * Send EOI to PIC. */ DOSVM_PIC_ioport_out( 0x20, 0x20 ); /* * Protected mode IRQ handlers are supposed * to turn VIF flag on before they return. */ if (!ISV86(context)) get_vm86_teb_info()->dpmi_vif = 1; } /*********************************************************************** * DOSVM_AllocUMB * * Allocate upper memory block (UMB) from upper memory. * Returned pointer is aligned to 16-byte (paragraph) boundary. * * This routine is only for allocating static storage for * Wine internal uses. Allocated memory can be accessed from * real mode, memory is taken from area already mapped and reserved * by Wine and the allocation has very little memory and speed * overhead. Use of this routine also preserves precious DOS * conventional memory. */ LPVOID DOSVM_umb_bottom = DOSVM_UMB_BOTTOM; LPVOID DOSVM_umb_top = DOSVM_UMB_TOP; static LPVOID DOSVM_AllocUMB( DWORD size ) { //not wine if (DOSVM_UMB_BOTTOM == DOSVM_umb_free) { DOSVM_umb_free = (size_t)DOSMEM_dosmem + DOSVM_umb_free; //DOSVM_umb_free = malloc(DOSVM_UMB_TOP - DOSVM_UMB_BOTTOM); DOSVM_umb_bottom = DOSVM_umb_free; DOSVM_umb_top = (BYTE*)DOSVM_umb_bottom + DOSVM_UMB_TOP - DOSVM_UMB_BOTTOM; //LPVOID ret = VirtualAlloc(DOSVM_UMB_BOTTOM, DOSVM_UMB_TOP - DOSVM_UMB_BOTTOM, MEM_COMMIT, PAGE_READWRITE);//DOSVM_UMB_TOP 0xeffff } if (DOSVM_umb_bottom != DOSVM_UMB_BOTTOM) { LPVOID ptr = (LPVOID)DOSVM_umb_free; size = ((size + 15) >> 4) << 4; if (DOSVM_umb_free + size - 1 > DOSVM_umb_top) { ERR("Out of upper memory area.\n"); return 0; } DOSVM_umb_free += size; return ptr; } // LPVOID ptr = (LPVOID)DOSVM_umb_free; size = ((size + 15) >> 4) << 4; if(DOSVM_umb_free + size - 1 > DOSVM_UMB_TOP) { ERR("Out of upper memory area.\n"); return 0; } DOSVM_umb_free += size; return ptr; } /********************************************************************** * alloc_selector * * Allocate a selector corresponding to a real mode address. * size must be < 64k. */ static WORD alloc_selector( void *base, DWORD size, unsigned char flags ) { WORD sel = wine_ldt_alloc_entries( 1 ); if (sel) { LDT_ENTRY entry; wine_ldt_set_base( &entry, base ); wine_ldt_set_limit( &entry, size - 1 ); wine_ldt_set_flags( &entry, flags ); wine_ldt_set_entry( sel, &entry ); } return sel; } /*********************************************************************** * DOSVM_AllocCodeUMB * * Allocate upper memory block for storing code stubs. * Initializes real mode segment and 16-bit protected mode selector * for the allocated code block. * * FIXME: should allocate a single PM selector for the whole UMB range. */ static LPVOID DOSVM_AllocCodeUMB( DWORD size, WORD *segment, WORD *selector ) { LPVOID ptr = DOSVM_AllocUMB( size ); if (segment) *segment = ((DWORD)ptr - (DWORD)DOSMEM_dosmem) >> 4; if (selector) *selector = alloc_selector( ptr, size, WINE_LDT_FLAGS_CODE ); return ptr; } /*********************************************************************** * DOSVM_AllocDataUMB * * Allocate upper memory block for storing data. * Initializes real mode segment and 16-bit protected mode selector * for the allocated data block. */ LPVOID DOSVM_AllocDataUMB( DWORD size, WORD *segment, WORD *selector ) { LPVOID ptr = DOSVM_AllocUMB( size ); if (segment) *segment = ((DWORD)ptr - (DWORD)DOSMEM_dosmem) >> 4; if (selector) *selector = alloc_selector( ptr, size, WINE_LDT_FLAGS_DATA ); return ptr; } /*********************************************************************** * DOSVM_InitSegments * * Initializes DOSVM_dpmi_segments. Allocates required memory and * sets up segments and selectors for accessing the memory. */ void DOSVM_InitSegments(void) { DWORD old_prot; LPSTR ptr; int i; static const char wrap_code[]={ 0xCD,0x31, /* int $0x31 */ 0xCB /* lret */ }; static const char enter_xms[]= { /* XMS hookable entry point */ 0xEB,0x03, /* jmp entry */ 0x90,0x90,0x90, /* nop;nop;nop */ /* entry: */ /* real entry point */ /* for simplicity, we'll just use the same hook as DPMI below */ 0xCD,0x31, /* int $0x31 */ 0xCB /* lret */ }; static const char enter_pm[]= { 0x50, /* pushw %ax */ 0x52, /* pushw %dx */ 0x55, /* pushw %bp */ 0x89,0xE5, /* movw %sp,%bp */ /* get return CS */ 0x8B,0x56,0x08, /* movw 8(%bp),%dx */ /* just call int 31 here to get into protected mode... */ /* it'll check whether it was called from dpmi_seg... */ 0xCD,0x31, /* int $0x31 */ /* we are now in the context of a 16-bit relay call */ /* need to fixup our stack; * 16-bit relay return address will be lost, * but we won't worry quite yet */ 0x8E,0xD0, /* movw %ax,%ss */ 0x66,0x0F,0xB7,0xE5, /* movzwl %bp,%esp */ /* set return CS */ 0x89,0x56,0x08, /* movw %dx,8(%bp) */ 0x5D, /* popw %bp */ 0x5A, /* popw %dx */ 0x58, /* popw %ax */ 0xfb, /* sti, enable and check virtual interrupts */ 0xCB /* lret */ }; static const char relay[]= { 0xca, 0x04, 0x00, /* 16-bit far return and pop 4 bytes (relay void* arg) */ 0xcd, 0x31, /* int 31 */ 0xfb, 0x66, 0xcb /* sti and 32-bit far return */ }; /* * Allocate pointer array. */ DOSVM_dpmi_segments = DOSVM_AllocUMB( sizeof(struct DPMI_segments) ); /* * RM / offset 0: Exit from real mode. * RM / offset 2: Points to lret opcode. */ ptr = DOSVM_AllocCodeUMB( sizeof(wrap_code), &DOSVM_dpmi_segments->wrap_seg, 0 ); memcpy( ptr, wrap_code, sizeof(wrap_code) ); /* * RM / offset 0: XMS driver entry. */ ptr = DOSVM_AllocCodeUMB( sizeof(enter_xms), &DOSVM_dpmi_segments->xms_seg, 0 ); memcpy( ptr, enter_xms, sizeof(enter_xms) ); /* * RM / offset 0: Switch to DPMI. * PM / offset 8: DPMI raw mode switch. */ ptr = DOSVM_AllocCodeUMB( sizeof(enter_pm), &DOSVM_dpmi_segments->dpmi_seg, &DOSVM_dpmi_segments->dpmi_sel ); memcpy( ptr, enter_pm, sizeof(enter_pm) ); /* * PM / offset N*6: Interrupt N in DPMI32. */ ptr = DOSVM_AllocCodeUMB( 6 * 256, 0, &DOSVM_dpmi_segments->int48_sel ); for(i=0; i<256; i++) { /* * Each 32-bit interrupt handler is 6 bytes: * 0xCD, = int (nested 16-bit interrupt) * 0x66,0xCA,0x04,0x00 = ret 4 (32-bit far return and pop 4 bytes / eflags) */ ptr[i * 6 + 0] = 0xCD; ptr[i * 6 + 1] = i; ptr[i * 6 + 2] = 0x66; ptr[i * 6 + 3] = 0xCA; ptr[i * 6 + 4] = 0x04; ptr[i * 6 + 5] = 0x00; } /* * PM / offset N*5: Interrupt N in 16-bit protected mode. */ ptr = DOSVM_AllocCodeUMB( 5 * 256, 0, &DOSVM_dpmi_segments->int16_sel ); for(i=0; i<256; i++) { /* * Each 16-bit interrupt handler is 5 bytes: * 0xCD, = int (interrupt) * 0xCA,0x02,0x00 = ret 2 (16-bit far return and pop 2 bytes / eflags) */ ptr[i * 5 + 0] = 0xCD; ptr[i * 5 + 1] = i; ptr[i * 5 + 2] = 0xCA; ptr[i * 5 + 3] = 0x02; ptr[i * 5 + 4] = 0x00; } // replace int 8 with a far ret so it doesn't cause a DF trap ptr[8 * 5 + 0] = 0xCA; ptr[8 * 5 + 1] = 0x02; ptr[8 * 5 + 2] = 0x00; /* * PM / offset 0: Stub where __wine_call_from_16_regs returns. * PM / offset 3: Stub which swaps back to 32-bit application code/stack. * PM / offset 5: Stub which enables interrupts */ ptr = DOSVM_AllocCodeUMB( sizeof(relay), 0, &DOSVM_dpmi_segments->relay_code_sel); memcpy( ptr, relay, sizeof(relay) ); /* * Space for 16-bit stack used by relay code. */ ptr = DOSVM_AllocDataUMB( DOSVM_RELAY_DATA_SIZE, 0, &DOSVM_dpmi_segments->relay_data_sel); memset( ptr, 0, DOSVM_RELAY_DATA_SIZE ); /* * As we store code in UMB we should make sure it is executable */ VirtualProtect((void *)DOSVM_UMB_BOTTOM, DOSVM_UMB_TOP - DOSVM_UMB_BOTTOM, PAGE_EXECUTE_READWRITE, &old_prot); event_notifier = CreateEventW(NULL, FALSE, FALSE, NULL); } ================================================ FILE: krnl386/error.c ================================================ /* * Log internal errors * * Copyright 1997 Andrew Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include "windef.h" #include "wine/winbase16.h" #include "wine/debug.h" #include "kernel16_private.h" /* LogParamError and LogError values */ /* Error modifier bits */ #define ERR_WARNING 0x8000 #define ERR_PARAM 0x4000 #define ERR_SIZE_MASK 0x3000 #define ERR_BYTE 0x1000 #define ERR_WORD 0x2000 #define ERR_DWORD 0x3000 /* LogParamError() values */ /* Generic parameter values */ #define ERR_BAD_VALUE 0x6001 #define ERR_BAD_FLAGS 0x6002 #define ERR_BAD_INDEX 0x6003 #define ERR_BAD_DVALUE 0x7004 #define ERR_BAD_DFLAGS 0x7005 #define ERR_BAD_DINDEX 0x7006 #define ERR_BAD_PTR 0x7007 #define ERR_BAD_FUNC_PTR 0x7008 #define ERR_BAD_SELECTOR 0x6009 #define ERR_BAD_STRING_PTR 0x700a #define ERR_BAD_HANDLE 0x600b /* KERNEL parameter errors */ #define ERR_BAD_HINSTANCE 0x6020 #define ERR_BAD_HMODULE 0x6021 #define ERR_BAD_GLOBAL_HANDLE 0x6022 #define ERR_BAD_LOCAL_HANDLE 0x6023 #define ERR_BAD_ATOM 0x6024 #define ERR_BAD_HFILE 0x6025 /* USER parameter errors */ #define ERR_BAD_HWND 0x6040 #define ERR_BAD_HMENU 0x6041 #define ERR_BAD_HCURSOR 0x6042 #define ERR_BAD_HICON 0x6043 #define ERR_BAD_HDWP 0x6044 #define ERR_BAD_CID 0x6045 #define ERR_BAD_HDRVR 0x6046 /* GDI parameter errors */ #define ERR_BAD_COORDS 0x7060 #define ERR_BAD_GDI_OBJECT 0x6061 #define ERR_BAD_HDC 0x6062 #define ERR_BAD_HPEN 0x6063 #define ERR_BAD_HFONT 0x6064 #define ERR_BAD_HBRUSH 0x6065 #define ERR_BAD_HBITMAP 0x6066 #define ERR_BAD_HRGN 0x6067 #define ERR_BAD_HPALETTE 0x6068 #define ERR_BAD_HMETAFILE 0x6069 /* LogError() values */ /* KERNEL errors */ #define ERR_GALLOC 0x0001 #define ERR_GREALLOC 0x0002 #define ERR_GLOCK 0x0003 #define ERR_LALLOC 0x0004 #define ERR_LREALLOC 0x0005 #define ERR_LLOCK 0x0006 #define ERR_ALLOCRES 0x0007 #define ERR_LOCKRES 0x0008 #define ERR_LOADMODULE 0x0009 /* USER errors */ #define ERR_CREATEDLG 0x0040 #define ERR_CREATEDLG2 0x0041 #define ERR_REGISTERCLASS 0x0042 #define ERR_DCBUSY 0x0043 #define ERR_CREATEWND 0x0044 #define ERR_STRUCEXTRA 0x0045 #define ERR_LOADSTR 0x0046 #define ERR_LOADMENU 0x0047 #define ERR_NESTEDBEGINPAINT 0x0048 #define ERR_BADINDEX 0x0049 #define ERR_CREATEMENU 0x004a /* GDI errors */ #define ERR_CREATEDC 0x0080 #define ERR_CREATEMETA 0x0081 #define ERR_DELOBJSELECTED 0x0082 #define ERR_SELBITMAP 0x0083 #define ErrorString(manifest) { manifest, # manifest } static const struct { int constant; const char *name; } ErrorStrings[] = { ErrorString(ERR_GALLOC), ErrorString(ERR_GREALLOC), ErrorString(ERR_GLOCK), ErrorString(ERR_LALLOC), ErrorString(ERR_LREALLOC), ErrorString(ERR_LLOCK), ErrorString(ERR_ALLOCRES), ErrorString(ERR_LOCKRES), ErrorString(ERR_LOADMODULE), ErrorString(ERR_CREATEDLG), ErrorString(ERR_CREATEDLG2), ErrorString(ERR_REGISTERCLASS), ErrorString(ERR_DCBUSY), ErrorString(ERR_CREATEWND), ErrorString(ERR_STRUCEXTRA), ErrorString(ERR_LOADSTR), ErrorString(ERR_LOADMENU), ErrorString(ERR_NESTEDBEGINPAINT), ErrorString(ERR_BADINDEX), ErrorString(ERR_CREATEMENU), ErrorString(ERR_CREATEDC), ErrorString(ERR_CREATEMETA), ErrorString(ERR_DELOBJSELECTED), ErrorString(ERR_SELBITMAP) }; static const struct { int constant; const char *name; } ParamErrorStrings[] = { ErrorString(ERR_BAD_VALUE), ErrorString(ERR_BAD_FLAGS), ErrorString(ERR_BAD_INDEX), ErrorString(ERR_BAD_DVALUE), ErrorString(ERR_BAD_DFLAGS), ErrorString(ERR_BAD_DINDEX), ErrorString(ERR_BAD_PTR), ErrorString(ERR_BAD_FUNC_PTR), ErrorString(ERR_BAD_SELECTOR), ErrorString(ERR_BAD_STRING_PTR), ErrorString(ERR_BAD_HANDLE), ErrorString(ERR_BAD_HINSTANCE), ErrorString(ERR_BAD_HMODULE), ErrorString(ERR_BAD_GLOBAL_HANDLE), ErrorString(ERR_BAD_LOCAL_HANDLE), ErrorString(ERR_BAD_ATOM), ErrorString(ERR_BAD_HFILE), ErrorString(ERR_BAD_HWND), ErrorString(ERR_BAD_HMENU), ErrorString(ERR_BAD_HCURSOR), ErrorString(ERR_BAD_HICON), ErrorString(ERR_BAD_HDWP), ErrorString(ERR_BAD_CID), ErrorString(ERR_BAD_HDRVR), ErrorString(ERR_BAD_COORDS), ErrorString(ERR_BAD_GDI_OBJECT), ErrorString(ERR_BAD_HDC), ErrorString(ERR_BAD_HPEN), ErrorString(ERR_BAD_HFONT), ErrorString(ERR_BAD_HBRUSH), ErrorString(ERR_BAD_HBITMAP), ErrorString(ERR_BAD_HRGN), ErrorString(ERR_BAD_HPALETTE), ErrorString(ERR_BAD_HMETAFILE) }; #undef ErrorString /*********************************************************************** * GetErrorString (internal) */ static const char *GetErrorString(UINT16 uErr) { static char buffer[80]; unsigned int n; for (n = 0; n < ARRAY_SIZE(ErrorStrings); n++) { if (uErr == ErrorStrings[n].constant) return ErrorStrings[n].name; } sprintf(buffer, "%x", uErr); return buffer; } /*********************************************************************** * GetParamErrorString (internal) */ static const char *GetParamErrorString(UINT16 uErr) { static char buffer[80]; if (uErr & ERR_WARNING) { strcpy(buffer, "ERR_WARNING | "); uErr &= ~ERR_WARNING; } else buffer[0] = '\0'; { unsigned int n; for (n = 0; n < ARRAY_SIZE(ParamErrorStrings); n++) { if (uErr == ParamErrorStrings[n].constant) { strcat(buffer, ParamErrorStrings[n].name); return buffer; } } } sprintf(buffer + strlen(buffer), "%x", uErr); return buffer; } /*********************************************************************** * SetLastError (KERNEL.147) */ void WINAPI SetLastError16( DWORD error ) { SetLastError( error ); } /*********************************************************************** * GetLastError (KERNEL.148) */ DWORD WINAPI GetLastError16(void) { return GetLastError(); } /*********************************************************************** * LogError (KERNEL.324) */ VOID WINAPI LogError16(UINT16 uErr, LPVOID lpvInfo) { MESSAGE("(%s, %p)\n", GetErrorString(uErr), lpvInfo); } /*********************************************************************** * LogParamError (KERNEL.325) */ void WINAPI LogParamError16(UINT16 uErr, FARPROC16 lpfn, LPVOID lpvParam) { /* FIXME: is it possible to get the module name/function * from the lpfn param? */ MESSAGE("(%s, %p, %p)\n", GetParamErrorString(uErr), lpfn, lpvParam); } /*********************************************************************** * K327 (KERNEL.327) */ void WINAPI HandleParamError( CONTEXT *context ) { UINT16 uErr = LOWORD(context->Ebx); FARPROC16 lpfn = (FARPROC16)MAKESEGPTR( context->SegCs, context->Eip ); LPVOID lpvParam = (LPVOID)MAKELONG( LOWORD(context->Eax), LOWORD(context->Ecx) ); LogParamError16( uErr, lpfn, lpvParam ); if (!(uErr & ERR_WARNING)) { /* Abort current procedure: Unwind stack frame and jump to error handler (location at [bp-2]) */ WORD *stack = MapSL( MAKESEGPTR( context->SegSs, LOWORD(context->Ebp) )); context->Esp = LOWORD(context->Ebp) - 2; context->Ebp = stack[0] & 0xfffe; context->Eip = stack[-1]; context->Eax = context->Ecx = context->Edx = 0; context->SegEs = 0; } } ================================================ FILE: krnl386/file.c ================================================ /* * File handling functions * * Copyright 1993 John Burton * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * TODO: * Fix the CopyFileEx methods to implement the "extended" functionality. * Right now, they simply call the CopyFile method. */ #include "config.h" #include "wine/port.h" #include #include #include #include "winerror.h" #include "windef.h" #include "winbase.h" #include "winternl.h" #include "wine/winbase16.h" #include "kernel16_private.h" #include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(file); #include #include #include #pragma comment(lib, "imagehlp.lib") #pragma comment(lib, "shlwapi.lib") #ifdef ENABLEREDIRECTSYSTEMDIR BOOL EnableRedirectSystemDir = TRUE; #else BOOL EnableRedirectSystemDir = FALSE; #endif const char *GetRedirectWindowsDir(); static void RedirectPrivateProfileStringWindowsDir(LPCSTR filename, LPCSTR output); NTSYSAPI NTSTATUS NTAPI NtAccessCheck(IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN HANDLE TokenHandle, IN ACCESS_MASK DesiredAccess, IN PGENERIC_MAPPING GenericMapping, OUT PPRIVILEGE_SET PrivilegeSet OPTIONAL, IN OUT PULONG PrivilegeSetLength, OUT PACCESS_MASK GrantedAccess, OUT PNTSTATUS AccessStatus); BOOL can_write_directory(LPCSTR path) { HANDLE hToken = INVALID_HANDLE_VALUE, hTokenImpersonation = INVALID_HANDLE_VALUE; PSECURITY_DESCRIPTOR pSecurityDescriptor = NULL; GENERIC_MAPPING genericMapping = { 0 }; PRIVILEGE_SET privilegeSet = { 0 }; NTSTATUS accessStatus = 0; DWORD dwDesiredAccess = FILE_GENERIC_WRITE; DWORD dwSize = sizeof(PRIVILEGE_SET); DWORD dwGrantedAccess = 0; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &hToken)) goto fail; if (!DuplicateTokenEx(hToken, GENERIC_ALL, NULL, SecurityImpersonation, TokenImpersonation, &hTokenImpersonation)) goto fail; if (GetNamedSecurityInfoA(path, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSecurityDescriptor) != ERROR_SUCCESS) goto fail; genericMapping.GenericRead = FILE_GENERIC_READ; genericMapping.GenericWrite = FILE_GENERIC_WRITE; genericMapping.GenericExecute = FILE_GENERIC_EXECUTE; genericMapping.GenericAll = FILE_ALL_ACCESS; MapGenericMask(&dwDesiredAccess, &genericMapping); /* Because app compatibility layer hooks AccessCheck and returns incorrect result, call NtAccessCheck. (NS_WRPMitigation::APIHook_AccessCheck) */ if (!NT_SUCCESS(NtAccessCheck(pSecurityDescriptor, hTokenImpersonation, dwDesiredAccess, &genericMapping, &privilegeSet, &dwSize, &dwGrantedAccess, &accessStatus))) goto fail; fail: CloseHandle(hToken); CloseHandle(hTokenImpersonation); LocalFree(pSecurityDescriptor); return NT_SUCCESS(accessStatus); } BOOL is_readonly_directory(LPCSTR path) { DWORD attr = GetFileAttributesA(path); if (attr == -1) return FALSE; if (GetDriveTypeA(path) == DRIVE_CDROM) return TRUE; return (attr & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY; } __declspec(dllexport) LPCSTR RedirectDriveRoot(LPCSTR path, LPSTR to, size_t max_len, BOOL silence) { LPCSTR path_old = path; enum WRITABLE_CACHE { NOTCACHED, ALLOWED, DENIED, READONLY, }; static enum WRITABLE_CACHE writable_cache[26]; char drive = path ? path[0] : 0; char root[4] = { drive, ':', '\\', 0 }; char drive_buf[5] = { '.', '.', '\\', drive, 0 }; if (!path) return NULL; if (!(path[0] && path[1] == ':' && (path[2] == 0 || path[2] == '\\' || path[2] == '/'))) return path; if (!((path[0] >= 'A' && path[0] <= 'Z') || (path[0] >= 'a' && path[0] <= 'z'))) return path; if (drive >= 'a' && drive <= 'z') { drive -= 'a' - 'A'; } path += 2; if (path[0]) path += 1; if (strchr(path, '\\')) return path_old; if (strchr(path, '/')) return path_old; if (writable_cache[drive - 'A'] == NOTCACHED) { if (is_readonly_directory(root)) { writable_cache[drive - 'A'] = READONLY; return path_old; } if (can_write_directory(root)) { writable_cache[drive - 'A'] = ALLOWED; return path_old; } else { writable_cache[drive - 'A'] = DENIED; } } else { if (writable_cache[drive - 'A'] == ALLOWED || writable_cache[drive - 'A'] == READONLY) { return path_old; } } PathCombineA(to, GetRedirectWindowsDir(), drive_buf); CreateDirectoryA(to, NULL); PathCombineA(to, to, path); if (!silence) { ERR("%s => %s\n", path_old, to); } return to; } /* buf: X:\XXX\YYY\C\ZZZ => C:\ZZZ */ void UnredirectDriveRoot(LPSTR buf, SIZE_T buf_len) { char drive_root[MAX_PATH]; PathCombineA(drive_root, GetRedirectWindowsDir(), "..\\"); if (memcmp(drive_root, buf, min(strlen(buf), strlen(drive_root))) == 0) { LPCSTR drive_dir = buf + strlen(drive_root); if (drive_dir[0] >= 'A' && drive_dir[0] <= 'Z' && drive_dir[1] == '\\') { buf[0] = drive_dir[0]; buf[1] = ':'; buf[2] = '\\'; memmove(buf + 3, drive_dir + 2, strlen(drive_dir + 2) + 1); } return; } return; } /* * C:\WINDOWS-> redirected windows dir * C:\WINDOWS\SYSTEM32 -> redirected windows dir\SYSTEM */ __declspec(dllexport) LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len) { char dirbuf[240]; if (!EnableRedirectSystemDir) return path; char buf[MAX_PATH]; if (!PathCanonicalizeA(buf, path)) { return path; } char bufwdir[MAX_PATH]; GetWindowsDirectoryA(bufwdir, MAX_PATH); size_t windir_len = strlen(bufwdir); if (PathCommonPrefixA(buf, bufwdir, NULL) < windir_len) { return path; } if (!PathAppendA(bufwdir, "system32")) { return path; } //system32->system if (PathCommonPrefixA(buf, bufwdir, NULL) >= strlen(bufwdir)) { memcpy(buf + strlen(bufwdir) - 2, buf + strlen(bufwdir), strlen(buf) - strlen(bufwdir) + 1); } //.\windir\ dirbuf[0] = '\0'; char *dir = &dirbuf[0]; GetModuleFileNameA(GetModuleHandleA("otvdm.exe"), dir, MAX_PATH); char *file = PathFindFileNameA(dir); if (file != dir) *file = '\0'; if (!PathAppendA(dir, GetRedirectWindowsDir())) return path; if (!PathAppendA(dir, buf + windir_len)) return path; if (strlen(dir) >= max_len) return path; file = PathFindFileNameA(dir); char f = *file; *file = '\0'; GetShortPathNameA(dir, to, max_len); *file = f; PathCombineA(to, to, file); return to; } NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeStringToOemString( POEM_STRING DestinationString, PCUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString ); static LPWSTR strdupAtoW(LPCSTR str) { LPWSTR ret; INT len; if (!str) return NULL; len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); if (ret) MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len); return ret; } static LPWSTR strdupOEMtoW(LPCSTR str) { LPWSTR ret; INT len; if (!str) return NULL; len = MultiByteToWideChar(CP_OEMCP, 0, str, -1, NULL, 0); ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); if (ret) MultiByteToWideChar(CP_OEMCP, 0, str, -1, ret, len); return ret; } static LPCSTR strdupWtoOEM(LPCWSTR str) { LPSTR ret; INT len; if (!str) return NULL; len = WideCharToMultiByte(CP_OEMCP, 0, str, -1, NULL, 0, NULL, NULL); ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(CHAR)); if (ret) WideCharToMultiByte(CP_OEMCP, 0, str, -1, ret, len, NULL, NULL); return ret; } #define DOS_TABLE_SIZE 256 static HANDLE *FILE_GetTable() { static DWORD dos_handles_index = NULL; if (!dos_handles_index) dos_handles_index = TlsAlloc(); HANDLE *dos_handles = TlsGetValue(dos_handles_index); if (!dos_handles) { dos_handles = (HANDLE *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(HANDLE)*256); TlsSetValue(dos_handles_index, dos_handles); } return dos_handles; } // only call at task exit void FILE_CloseAll() { HANDLE *dos_handles = FILE_GetTable(); for (int i = 0; i < 256; i++) { if (dos_handles[i]) CloseHandle(dos_handles[i]); } HeapFree(GetProcessHeap(), 0, dos_handles); } /*********************************************************************** * FILE_InitProcessDosHandles * * Allocates the default DOS handles for a process. Called either by * Win32HandleToDosFileHandle below or by the DOSVM stuff. */ static void FILE_InitProcessDosHandles( void ) { HANDLE hStdInput, hStdOutput, hStdError, hNull; static BOOL init_done /* = FALSE */; HANDLE cp = GetCurrentProcess(); if (init_done) return; HANDLE *dos_handles = FILE_GetTable(); init_done = TRUE; hStdInput = GetStdHandle(STD_INPUT_HANDLE); hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); hStdError = GetStdHandle(STD_ERROR_HANDLE); hNull = CreateFileA("NUL", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); /* Invalid console handles need to translate to real DOS handles in a new process */ if (!hStdInput) hStdInput = hNull; if (!hStdOutput) hStdOutput = hNull; if (!hStdError) hStdError = hNull; DuplicateHandle(cp, hStdInput, cp, &dos_handles[0], 0, TRUE, DUPLICATE_SAME_ACCESS); DuplicateHandle(cp, hStdOutput, cp, &dos_handles[1], 0, TRUE, DUPLICATE_SAME_ACCESS); DuplicateHandle(cp, hStdError, cp, &dos_handles[2], 0, TRUE, DUPLICATE_SAME_ACCESS); DuplicateHandle(cp, hStdError, cp, &dos_handles[3], 0, TRUE, DUPLICATE_SAME_ACCESS); DuplicateHandle(cp, hStdError, cp, &dos_handles[4], 0, TRUE, DUPLICATE_SAME_ACCESS); CloseHandle(hNull); } /*********************************************************************** * DosFileHandleToWin32Handle (KERNEL32.20) * * Return the Win32 handle for a DOS handle. * * Note: this is not exactly right, since on Win95 the Win32 handles * are on top of DOS handles and we do it the other way * around. Should be good enough though. */ HANDLE WINAPI DosFileHandleToWin32Handle( HFILE handle ) { HFILE16 hfile = (HFILE16)handle; if (hfile < 5) FILE_InitProcessDosHandles(); HANDLE *dos_handles = FILE_GetTable(); if ((hfile >= DOS_TABLE_SIZE) || !dos_handles[hfile]) { SetLastError( ERROR_INVALID_HANDLE ); return INVALID_HANDLE_VALUE; } return dos_handles[hfile]; } /*********************************************************************** * Win32HandleToDosFileHandle (KERNEL32.21) * * Allocate a DOS handle for a Win32 handle. The Win32 handle is no * longer valid after this function (even on failure). * * Note: this is not exactly right, since on Win95 the Win32 handles * are on top of DOS handles and we do it the other way * around. Should be good enough though. */ HFILE WINAPI Win32HandleToDosFileHandle( HANDLE handle ) { int i; if (!handle || (handle == INVALID_HANDLE_VALUE)) return HFILE_ERROR; HANDLE *dos_handles = FILE_GetTable(); for (i = 5; i < DOS_TABLE_SIZE; i++) if (dos_handles[i] == handle) return (HFILE)i; for (i = 5; i < DOS_TABLE_SIZE; i++) if (!dos_handles[i]) { dos_handles[i] = handle; TRACE("Got %d for h32 %p\n", i, handle ); return (HFILE)i; } CloseHandle( handle ); SetLastError( ERROR_TOO_MANY_OPEN_FILES ); return HFILE_ERROR; } /*********************************************************************** * DisposeLZ32Handle (KERNEL32.22) * * Note: this is not entirely correct, we should only close the * 32-bit handle and not the 16-bit one, but we cannot do * this because of the way our DOS handles are implemented. * It shouldn't break anything though. */ BOOL16 WINAPI DeleteDosFileHandle( HANDLE handle ) { int i; if (!handle || (handle == INVALID_HANDLE_VALUE)) return; HANDLE *dos_handles = FILE_GetTable(); for (i = 5; i < DOS_TABLE_SIZE; i++) if (dos_handles[i] == handle) { dos_handles[i] = 0; return TRUE; } return FALSE; } /*********************************************************************** * GetProfileInt (KERNEL.57) */ UINT16 WINAPI GetProfileInt16( LPCSTR section, LPCSTR entry, INT16 def_val ) { return GetPrivateProfileInt16( section, entry, def_val, "win.ini" ); } int CALLBACK enum_ini_font(const LOGFONT *lf, const TEXTMETRIC *tm, DWORD type, LPARAM lParam) { char *name = (char *)lParam; return strncmp(name, lf->lfFaceName, strlen(lf->lfFaceName)); } /*********************************************************************** * GetProfileString (KERNEL.58) */ INT16 WINAPI GetProfileString16( LPCSTR section, LPCSTR entry, LPCSTR def_val, LPSTR buffer, UINT16 len ) { char tmp[256]; int tmplen = 256; if (section && entry && !stricmp(section, "devices") && !stricmp(entry, "DefaultPrinter")) { if (GetDefaultPrinterA(tmp, &tmplen)) entry = tmp; } INT16 ret = GetPrivateProfileString16( section, entry, def_val, buffer, len, "win.ini" ); if (ret && section && entry && !stricmp(section, "windows") && !stricmp(entry, "device")) { char *comma = strchr(buffer, ','); if (!comma && ((len - 1) == ret)) { ret = GetPrivateProfileString16( section, entry, def_val, tmp, tmplen, "win.ini" ); comma = strchr(tmp, ','); if (comma && (len > (strlen(comma) + 14))) { strcpy(buffer, "DefaultPrinter"); strcpy(buffer + 14, comma); } } else if (comma && ((comma - buffer) > 32)) { strcpy(buffer, "DefaultPrinter"); strcpy(buffer + 14, comma); } ret = strlen(buffer); } else if (!ret && section && !stricmp(section, "fonts")) { LOGFONTA lf; HDC hdc = GetDC(0); lf.lfCharSet = DEFAULT_CHARSET; lf.lfPitchAndFamily = 0; lf.lfFaceName[0] = 0; ret = EnumFontFamiliesExA(hdc, &lf, enum_ini_font, entry, 0); ReleaseDC(0, hdc); if (!ret) strncpy(buffer, "vgaoem.fon", len); // actual filename is unavailable return !ret ? strnlen(buffer, len) : 0; } else if (ret && !PathIsRelativeA(buffer) && PathFileExistsA(buffer)) { int cnt = GetShortPathNameA(buffer, tmp, len <= 256 ? len : 256); if (cnt) strcpy(buffer, tmp); } return ret; } /*********************************************************************** * WriteProfileString (KERNEL.59) */ BOOL16 WINAPI WriteProfileString16( LPCSTR section, LPCSTR entry, LPCSTR string ) { return WritePrivateProfileString16( section, entry, string, "win.ini" ); } /* get the search path for the current module; helper for OpenFile16 */ /*static */char *get_search_path(void) { UINT len, i; char *ret, *p, module[OFS_MAXPATHNAME]; module[0] = 0; if (GetCurrentTask() && GetModuleFileName16( GetCurrentTask(), module, sizeof(module) )) { if (!(p = strrchr( module, '\\' ))) p = module; *p = 0; } char windir[MAX_PATH]; char windir2[MAX_PATH]; char realwinsys[MAX_PATH]; char *windir3; GetWindowsDirectoryA(windir, MAX_PATH); windir3 = RedirectSystemDir(windir, windir2, MAX_PATH); char vdmpath[MAX_PATH]; GetModuleFileNameA(GetModuleHandleA(NULL), vdmpath, MAX_PATH); PathRemoveFileSpecA(vdmpath); GetShortPathNameA(vdmpath, vdmpath, MAX_PATH); strcpy(realwinsys, windir); strcat(realwinsys, "\\SYSTEM"); len = (strlen(vdmpath) + 1 + 2 + /* search order: first current dir */ GetSystemDirectory16( NULL, 0 ) + 1 + /* then system dir */ strlen(windir3) + 1 + /* then windows dir */ strlen( module ) + 1 + /* then module path */ GetEnvironmentVariableA( "PATH16", NULL, 0 ) + 1 + /* then look in PATH */ strlen(realwinsys) + 1); /* then the real windows system dir */ if (!(ret = HeapAlloc( GetProcessHeap(), 0, len ))) return NULL; strcpy(ret, ".;"); p = ret + 2; strcpy(p, vdmpath); p += strlen(vdmpath); *p++ = ';'; GetSystemDirectory16( p, ret + len - p ); p += strlen( p ); *p++ = ';'; strcpy(p, windir3);//GetWindowsDirectoryA( p, ret + len - p ); p += strlen( p ); *p++ = ';'; if (module[0]) { strcpy( p, module ); p += strlen( p ); *p++ = ';'; } i = GetEnvironmentVariableA("PATH16", p, ret + len - p); if (i) { p += i; *p++ = ';'; } strcpy(p, realwinsys); return ret; } char *krnl386_get_search_path(void) { return get_search_path(); } #define STRSAFE_NO_DEPRECATE #include LPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin) { char *path = krnl386_get_search_path(); LPCSTR result = lpFile; if (SearchPathA(path, lpFile, NULL, size, buf, NULL)) { result = buf; } else { char dlldir[MAX_PATH]; GetDllDirectoryA(MAX_PATH, dlldir); if (SearchPathA(dlldir, lpFile, NULL, size, buf, NULL)) { result = buf; } } if (result == lpFile && search_builtin) { char filewin32[MAX_PATH]; LPSTR ext = PathFindExtensionA(lpFile); if (ext && !stricmp(ext, ".dll") || !stricmp(ext, ".exe") || !stricmp(ext, ".drv")) { filewin32[0] = '\0'; if (StringCbCatA(filewin32, ARRAYSIZE(filewin32), lpFile) == S_OK && StringCbCatA(filewin32, ARRAYSIZE(filewin32), "16") == S_OK) { if (SearchPathA(path, filewin32, NULL, size, buf, NULL)) { result = buf; } else { char dlldir[MAX_PATH]; GetDllDirectoryA(MAX_PATH, dlldir); if (SearchPathA(dlldir, filewin32, NULL, size, buf, NULL)) { result = buf; } } } } } HeapFree(GetProcessHeap(), 0, path); return result; } /*********************************************************************** * create_file_OF * * Wrapper for CreateFile that takes OF_* mode flags. */ static HANDLE create_file_OF( LPCWSTR path, INT mode ) { DWORD access, sharing, creation; if (mode & OF_CREATE) { creation = CREATE_ALWAYS; access = GENERIC_READ | GENERIC_WRITE; } else { creation = OPEN_EXISTING; switch(mode & 0x03) { case OF_READ: access = GENERIC_READ; break; case OF_WRITE: access = GENERIC_WRITE; break; case OF_READWRITE: access = GENERIC_READ | GENERIC_WRITE; break; default: access = 0; break; } } switch(mode & 0x70) { case OF_SHARE_EXCLUSIVE: sharing = 0; break; case OF_SHARE_DENY_WRITE: sharing = FILE_SHARE_READ; break; case OF_SHARE_DENY_READ: sharing = FILE_SHARE_WRITE; break; case OF_SHARE_DENY_NONE: case OF_SHARE_COMPAT: default: sharing = FILE_SHARE_READ | FILE_SHARE_WRITE; break; } return CreateFileW( path, access, sharing | FILE_SHARE_DELETE, NULL, creation, FILE_ATTRIBUTE_NORMAL, 0 ); } /*********************************************************************** * OpenFile (KERNEL.74) * OpenFileEx (KERNEL.360) */ HFILE16 WINAPI WIN16_OpenFile16( LPCSTR name, SEGPTR ofs, UINT16 mode ) { CURRENT_STACK16->es = SELECTOROF(ofs); return OpenFile16(name, MapSL(ofs), mode); } HFILE16 WINAPI OpenFile16( LPCSTR name, OFSTRUCT *ofs, UINT16 mode ) { HFILE hFileRet = 0; HANDLE handle = INVALID_HANDLE_VALUE; FILETIME filetime; WORD filedatetime[2]; OEM_STRING oem; UNICODE_STRING uni; FILETIME lfiletime; WCHAR pathname[sizeof(ofs->szPathName)]; LPWSTR namew; const WCHAR *p, *filename; CHAR buf[OFS_MAXPATHNAME]; CHAR redir[MAX_PATH]; BOOL result; oem.Buffer = ofs->szPathName; oem.Length = 0; oem.MaximumLength = sizeof(ofs->szPathName); if (!ofs) return HFILE_ERROR; TRACE("%s %s %s %s%s%s%s%s%s%s%s%s\n",debugstr_a(name), ((mode & 0x3 )==OF_READ)?"OF_READ": ((mode & 0x3 )==OF_WRITE)?"OF_WRITE": ((mode & 0x3 )==OF_READWRITE)?"OF_READWRITE":"unknown", ((mode & 0x70 )==OF_SHARE_COMPAT)?"OF_SHARE_COMPAT": ((mode & 0x70 )==OF_SHARE_DENY_NONE)?"OF_SHARE_DENY_NONE": ((mode & 0x70 )==OF_SHARE_DENY_READ)?"OF_SHARE_DENY_READ": ((mode & 0x70 )==OF_SHARE_DENY_WRITE)?"OF_SHARE_DENY_WRITE": ((mode & 0x70 )==OF_SHARE_EXCLUSIVE)?"OF_SHARE_EXCLUSIVE":"unknown", ((mode & OF_PARSE )==OF_PARSE)?"OF_PARSE ":"", ((mode & OF_DELETE )==OF_DELETE)?"OF_DELETE ":"", ((mode & OF_VERIFY )==OF_VERIFY)?"OF_VERIFY ":"", ((mode & OF_SEARCH )==OF_SEARCH)?"OF_SEARCH ":"", ((mode & OF_CANCEL )==OF_CANCEL)?"OF_CANCEL ":"", ((mode & OF_CREATE )==OF_CREATE)?"OF_CREATE ":"", ((mode & OF_PROMPT )==OF_PROMPT)?"OF_PROMPT ":"", ((mode & OF_EXIST )==OF_EXIST)?"OF_EXIST ":"", ((mode & OF_REOPEN )==OF_REOPEN)?"OF_REOPEN ":"" ); name = RedirectSystemDir(name, redir, MAX_PATH); if ((mode & (OF_CREATE | OF_SHARE_EXCLUSIVE)) == (OF_CREATE | OF_SHARE_EXCLUSIVE)) { mode &= ~OF_SHARE_EXCLUSIVE; } { ofs->cBytes = sizeof(OFSTRUCT); ofs->nErrCode = 0; if (mode & OF_REOPEN) name = ofs->szPathName; if (!name) { return HFILE_ERROR; } name = RedirectDriveRoot(name, buf, ARRAY_SIZE(buf), FALSE); if (mode & OF_REOPEN) namew = strdupOEMtoW(name); else namew = strdupAtoW(name); /* the watcom 10.6 IDE relies on a valid path returned in ofs->szPathName Are there any cases where getting the path here is wrong? Uwe Bonnes 1997 Apr 2 */ if (!*namew) { /* empty path => cwd */ result = GetCurrentDirectoryW(sizeof(ofs->szPathName), pathname); if (result) { size_t len = wcslen(pathname); if (len < sizeof(ofs->szPathName) - 1 && pathname[len - 1] != '\\' && pathname[len - 1] != '/') { pathname[len] = '\\'; pathname[len + 1] = 0; } } if (result && !(mode & OF_PARSE)) { SetLastError(ERROR_FILE_NOT_FOUND); RtlInitUnicodeString(&uni, pathname); if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE))) { ERR("RtlUpcaseUnicodeStringToOemString failed\n"); ofs->szPathName[0] = '\0'; } goto error; } } else { result = GetFullPathNameW(namew, sizeof(ofs->szPathName), pathname, NULL); } if (!result) { RtlInitUnicodeString(&uni, namew); if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE))) { ERR("RtlUpcaseUnicodeStringToOemString failed\n"); ofs->szPathName[0] = '\0'; } goto error; } /* If OF_SEARCH is set, ignore the given path */ filename = namew; if ((mode & OF_SEARCH) && !(mode & OF_REOPEN)) { /* First try the file name as is */ if (GetFileAttributesW( filename ) != INVALID_FILE_ATTRIBUTES) filename = NULL; else { /* Now remove the path */ if (filename[0] && (filename[1] == ':')) filename += 2; if ((p = wcsrchr( filename, '\\' ))) filename = p + 1; if ((p = wcsrchr( filename, '/' ))) filename = p + 1; if (!filename[0]) { RtlInitUnicodeString(&uni, filename); if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE))) { ERR("RtlUpcaseUnicodeStringToOemString failed\n"); ofs->szPathName[0] = '\0'; } SetLastError( ERROR_FILE_NOT_FOUND ); goto error; } } } /* Now look for the file */ if (!(mode & OF_PARSE) && !(mode & OF_CREATE) && filename) { BOOL found; char *path = get_search_path(); WCHAR *pathw; if (!path) { RtlInitUnicodeString(&uni, filename); if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE))) { ERR("RtlUpcaseUnicodeStringToOemString failed\n"); ofs->szPathName[0] = '\0'; } goto error; } if (!wcsicmp(pathname, L"\\\\.\\nul")) found = TRUE; else { pathw = strdupAtoW(path); found = SearchPathW( pathw, filename, NULL, sizeof(ofs->szPathName), pathname, NULL ); HeapFree( GetProcessHeap(), 0, path ); HeapFree( GetProcessHeap(), 0, pathw ); } if (!found) { RtlInitUnicodeString(&uni, pathname); if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE))) { ERR("RtlUpcaseUnicodeStringToOemString failed\n"); ofs->szPathName[0] = '\0'; } goto error; } } TRACE("found %s\n", debugstr_w(pathname) ); if (mode & OF_DELETE) { RtlInitUnicodeString(&uni, pathname); if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE))) { ERR("RtlUpcaseUnicodeStringToOemString failed\n"); ofs->szPathName[0] = '\0'; } if (!DeleteFileW(pathname)) goto error; TRACE("(%s): OF_DELETE return = OK\n", name); HeapFree(GetProcessHeap(), 0, namew); return 1; } GetShortPathNameW(pathname, pathname, ARRAY_SIZE(pathname)); if (pathname[0] && pathname[wcslen(pathname) - 1] == '\\') { SetLastError(ERROR_FILE_NOT_FOUND); handle = INVALID_HANDLE_VALUE; hFileRet = HFILE_ERROR16; } else if (!(mode & OF_PARSE)) { handle = create_file_OF(pathname, mode); } RtlInitUnicodeString(&uni, pathname); if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE))) { ERR("RtlUpcaseUnicodeStringToOemString failed\n"); ofs->szPathName[0] = '\0'; } UnredirectDriveRoot(ofs->szPathName, ARRAY_SIZE(ofs->szPathName)); if (!(mode & OF_PARSE)) { if (handle == INVALID_HANDLE_VALUE) goto error; } if (mode & OF_PARSE) { SYSTEMTIME systime; GetSystemTime(&systime); SystemTimeToFileTime(&systime, &filetime); } else { GetFileTime( handle, NULL, NULL, &filetime ); } FileTimeToLocalFileTime(&filetime, &lfiletime); FileTimeToDosDateTime( &lfiletime, &filedatetime[0], &filedatetime[1] ); if ((mode & OF_VERIFY) && (mode & OF_REOPEN)) { if (ofs->Reserved1 != filedatetime[0] || ofs->Reserved2 != filedatetime[1] ) { CloseHandle( handle ); WARN("(%s): OF_VERIFY failed\n", name ); /* FIXME: what error here? */ SetLastError( ERROR_FILE_NOT_FOUND ); goto error; } } ofs->Reserved1 = filedatetime[0]; ofs->Reserved2 = filedatetime[1]; } if (!(mode & OF_PARSE)) { hFileRet = Win32HandleToDosFileHandle(handle); TRACE("(%s): OK, return = %p\n", name, handle); } if (hFileRet == HFILE_ERROR16) goto error; HeapFree(GetProcessHeap(), 0, namew); if (!(mode & OF_PARSE) && mode & OF_EXIST) _lclose16( hFileRet ); /* Return the handle, but close it first */ return hFileRet; error: /* We get here if there was an error opening the file */ ofs->nErrCode = GetLastError(); WARN("(%s): return = HFILE_ERROR error= %d\n", name,ofs->nErrCode ); HeapFree(GetProcessHeap(), 0, namew); return HFILE_ERROR16; } /*********************************************************************** * _lclose (KERNEL.81) */ HFILE16 WINAPI _lclose16( HFILE16 hFile ) { HANDLE *dos_handles = FILE_GetTable(); if ((hFile >= DOS_TABLE_SIZE) || !dos_handles[hFile]) { SetLastError( ERROR_INVALID_HANDLE ); return HFILE_ERROR16; } TRACE("%d (handle32=%p)\n", hFile, dos_handles[hFile] ); CloseHandle( dos_handles[hFile] ); dos_handles[hFile] = 0; return 0; } /*********************************************************************** * _lcreat (KERNEL.83) */ HFILE16 WINAPI _lcreat16( LPCSTR path, INT16 attr ) { CHAR buf[MAX_PATH]; path = RedirectSystemDir(path, buf, MAX_PATH); path = RedirectDriveRoot(path, buf, MAX_PATH, FALSE); return Win32HandleToDosFileHandle( (HANDLE)_lcreat( path, attr ) ); } /*********************************************************************** * _llseek (KERNEL.84) */ LONG WINAPI _llseek16( HFILE16 hFile, LONG lOffset, INT16 nOrigin ) { HANDLE fd = DosFileHandleToWin32Handle(hFile); LONG high = 0; DWORD offset = (DWORD)lOffset; switch (nOrigin) { case FILE_BEGIN: break; case FILE_END: offset += GetFileSize(fd, NULL); break; case FILE_CURRENT: offset += SetFilePointer(fd, 0, NULL, FILE_CURRENT); break; default: SetLastError(ERROR_INVALID_PARAMETER); return -1; } return SetFilePointer(fd, offset, &high, FILE_BEGIN); } /*********************************************************************** * _lopen (KERNEL.85) */ HFILE16 WINAPI _lopen16( LPCSTR path, INT16 mode ) { CHAR buf[MAX_PATH]; path = RedirectSystemDir(path, buf, MAX_PATH); path = RedirectDriveRoot(path, buf, MAX_PATH, FALSE); return Win32HandleToDosFileHandle( (HANDLE)_lopen( path, mode ) ); } /*********************************************************************** * _lread16 (internal) */ UINT16 WINAPI _lread16( HFILE16 hFile, LPVOID buffer, UINT16 count ) { return (UINT16)_lread((HFILE)DosFileHandleToWin32Handle(hFile), buffer, (LONG)count ); } /*********************************************************************** * _lwrite (KERNEL.86) */ UINT16 WINAPI _lwrite16( HFILE16 hFile, LPCSTR buffer, UINT16 count ) { return (UINT16)_hwrite( (HFILE)DosFileHandleToWin32Handle(hFile), buffer, (LONG)count ); } /*********************************************************************** * _hread (KERNEL.349) */ LONG WINAPI WIN16_hread( HFILE16 hFile, SEGPTR buffer, LONG count ) { LONG maxlen; TRACE("%d %08x %d\n", hFile, (DWORD)buffer, count ); /* Some programs pass a count larger than the allocated buffer */ maxlen = GetSelectorLimit16( SELECTOROF(buffer) ) - OFFSETOF(buffer) + 1; if (count > maxlen) { LPVOID temp_buffer = HeapAlloc(GetProcessHeap(), 0, count); HFILE result = _lread((HFILE)DosFileHandleToWin32Handle(hFile), temp_buffer, count ); if (result != HFILE_ERROR) { memcpy(MapSL(buffer), temp_buffer, (size_t)result); } HeapFree(GetProcessHeap(), 0, temp_buffer); return result; } return _lread((HFILE)DosFileHandleToWin32Handle(hFile), MapSL(buffer), count ); } /*********************************************************************** * _lread (KERNEL.82) */ UINT16 WINAPI WIN16_lread( HFILE16 hFile, SEGPTR buffer, UINT16 count ) { return (UINT16)WIN16_hread( hFile, buffer, (LONG)count ); } /*********************************************************************** * _hwrite (KERNEL.350) */ LONG WINAPI _hwrite16( HFILE16 hFile, LPCSTR buffer, LONG count ) { return _hwrite( (HFILE)DosFileHandleToWin32Handle(hFile), buffer, count ); } /*********************************************************************** * GetTempDrive (KERNEL.92) * A closer look at krnl386.exe shows what the SDK doesn't mention: * * returns: * AL: driveletter * AH: ':' - yes, some kernel code even does stosw with * the returned AX. * DX: 1 for success */ UINT WINAPI GetTempDrive( BYTE ignored ) { WCHAR buffer[MAX_PATH]; BYTE ret; if (GetTempPathW( MAX_PATH, buffer )) ret = (BYTE)toupperW(buffer[0]); else ret = 'C'; return MAKELONG( ret | (':' << 8), 1 ); } #define MAX_TEMP_PATH 144 /*********************************************************************** * GetTempFileName (KERNEL.97) */ UINT16 WINAPI GetTempFileName16( BYTE drive, LPCSTR prefix, UINT16 unique, LPSTR buffer ) { char temppath[MAX_TEMP_PATH]; char *unique_buf; if (!(drive & ~TF_FORCEDRIVE)) /* drive 0 means current default drive */ { WCHAR curdir[MAX_PATH]; DWORD r = GetCurrentDirectoryW(MAX_PATH, curdir); if (r >= MAX_PATH || r == 0 || curdir[1] != ':') { ERR("could not get current drive\n"); return 0; } drive |= curdir[0]; } if (drive & TF_FORCEDRIVE) { /* C:~preuuuu.TMP */ sprintf(temppath, "%c:", drive & ~TF_FORCEDRIVE); } else { DWORD r = GetTempPathA(MAX_TEMP_PATH, temppath); if (r >= MAX_TEMP_PATH) { ERR("temp path is too long\n"); return 0; } if (r < 3) { return 0; } } GetShortPathNameA(temppath, temppath, MAX_TEMP_PATH); if (strlen(temppath) + 12 /* ~preuuuu.TMP */ >= MAX_TEMP_PATH - 1) { ERR("temp path is too long\n"); return 0; } unique_buf = temppath + strlen(temppath); *unique_buf++ = '~'; if (prefix[0]) { *unique_buf++ = prefix[0]; if (prefix[1]) { *unique_buf++ = prefix[1]; if (prefix[2]) { *unique_buf++ = prefix[2]; } } } if (!unique) { int num = GetTickCount() & 0xffff; if (num == 0) { num = 1; } unique = num; do { HANDLE handle; sprintf(unique_buf, "%04X.TMP", unique); handle = CreateFileA(temppath, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); if (handle != INVALID_HANDLE_VALUE) { CloseHandle(handle); break; } if (GetLastError() == ERROR_ACCESS_DENIED) { ERR("%s ERROR_ACCESS_DENIED\n", temppath); } if (GetLastError() != ERROR_FILE_EXISTS && GetLastError() != ERROR_SHARING_VIOLATION) break; if (!(++unique & 0xffff)) unique = 1; } while (unique != num); } else { sprintf(unique_buf, "%04X.TMP", unique); } if (strlen(temppath) + 1 > MAX_TEMP_PATH) { ERR("temp path is too long\n"); return 0; } else { strcpy(buffer, temppath); } return unique; } typedef const char* (*ini_redirect_str_func)(); typedef int(*ini_redirect_int_func)(); struct ini_redirect_data { const char *file; const char *section; const char *entry; const char *value; ini_redirect_str_func get_str; ini_redirect_int_func get_int; BOOL overwrite_section; }; int system_ini_keyboard_type() { return GetKeyboardType(0); } int system_ini_keyboard_subtype() { return GetKeyboardType(1); } static const char *system_ini_boot_language_dll() { switch (GetUserDefaultUILanguage()) { case 1030: case 1035: case 1039: case 1044: case 1053: return "langsca.dll"; case 1043: return "langdut.dll"; case 2057: case 3084: case 1040: case 2070: case 3082: return "langeng.dll"; case 1036: return "langfrn.dll"; case 1031: return "langger.dll"; case 1034: return "langspa.dll"; case 1033: default: return ""; } } const char *system_init_boot_description_language_dll() { LANGID lang = GetUserDefaultUILanguage(); static char buf[256]; if (GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SNATIVELANGNAME, buf, ARRAY_SIZE(buf))) { return buf; } return "English (American)"; } const char *system_init_boot_description_keyboard_typ() { char buf[KL_NAMELENGTH]; if (GetKeyboardLayoutNameA(buf)) { HKEY hkey; HKEY hkey2; static char buf2[256]; DWORD cb = ARRAY_SIZE(buf2); if (RegOpenKeyA(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\", &hkey) == ERROR_SUCCESS) { if (RegOpenKeyA(hkey, buf, &hkey2) == ERROR_SUCCESS) { LRESULT result = RegQueryValueExA(hkey2, "Layout Text", NULL, NULL, buf2, &cb); RegCloseKey(hkey2); RegCloseKey(hkey); if (result == ERROR_SUCCESS) { return buf2; } } else { RegCloseKey(hkey); } } } return "Enhanced 101 or 102 key US and Non US keyboards"; } int system_init_boot_description_codepage() { return GetACP(); } /* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WOW */ /* HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\IniFileMapping */ /* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping */ struct ini_redirect_data ini_redirect_list[] = { {"system.ini", "boot", "sound.drv", "sound.drv"}, {"system.ini", "boot", "comm.drv", "comm.drv"}, {"system.ini", "boot", "keyboard.drv", "keyboard.drv"}, {"system.ini", "boot", "system.drv", "system.drv"}, {"system.ini", "boot", "display.drv", "display.drv"}, {"system.ini", "boot", "shell", "progman.exe"}, {"system.ini", "boot", "mouse.drv", "mouse.drv"}, {"system.ini", "boot", "network.drv", "network.drv"}, {"system.ini", "boot", "language.dll", NULL, system_ini_boot_language_dll}, {"system.ini", "boot", "drivers", "mmsystem.dll"}, /* {"system.ini", "boot", "oemfonts.fon", "", NULL}, */ /* {"system.ini", "boot", "fixedfon.fon", "", NULL}, */ /* {"system.ini", "boot", "fonts.fon", "", NULL}, */ {"system.ini", "keyboard", "type", NULL, NULL, system_ini_keyboard_type}, {"system.ini", "keyboard", "subtype", NULL, NULL, system_ini_keyboard_subtype}, {"system.ini", "keyboard", "keyboard.dll", ""}, {"system.ini", "boot.description", "system.drv", "MS-DOS or PC-DOS System"}, /* {"system.ini", "boot.description", "aspect", "100,96,96"}, */ {"system.ini", "boot.description", "display.drv", "VGA"}, {"system.ini", "boot.description", "keyboard.typ", NULL, system_init_boot_description_keyboard_typ}, {"system.ini", "boot.description", "mouse.drv", "Microsoft, or IBM PS/2"}, {"system.ini", "boot.description", "network.drv", "LAN Support"}, {"system.ini", "boot.description", "language.dll", NULL, system_init_boot_description_language_dll}, {"system.ini", "boot.description", "codepage", NULL, NULL, system_init_boot_description_codepage}, /* {"system.ini", "boot.description", "woafont.fon", ""}, */ /* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI (Only available in 32-bit windows) */ {"system.ini", "mci", "AVIVideo", "mciavi.drv"}, {"system.ini", "mci", "Sequencer", "mciseq.drv"}, {"system.ini", "mci", "CDAudio", "mcicda.drv"}, {"system.ini", "mci", "WaveAudio", "mciwave.drv"}, /* MPEGVideo! */ {"system.ini", "mci", "MPEGVideo", "mciqtz.drv"}, /* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\MCI Extensions */ #if 0 {"win.ini", "mci extensions", "aiff", "MPEGVideo"}, {"win.ini", "mci extensions", "dat", "MPEGVideo"}, {"win.ini", "mci extensions", "m2t", "MPEGVideo"}, {"win.ini", "mci extensions", "mpa", "MPEGVideo"}, {"win.ini", "mci extensions", "wmx", "MPEGVideo"}, {"win.ini", "mci extensions", "Mid", "MPEGVideo"}, {"win.ini", "mci extensions", "wmv", "MPEGVideo"}, {"win.ini", "mci extensions", "m3u", "MPEGVideo"}, {"win.ini", "mci extensions", "avi", "MPEGVideo"}, {"win.ini", "mci extensions", "ivf", "MPEGVideo"}, {"win.ini", "mci extensions", "wvx", "MPEGVideo"}, {"win.ini", "mci extensions", "m4v", "MPEGVideo"}, {"win.ini", "mci extensions", "mts", "MPEGVideo"}, {"win.ini", "mci extensions", "mp4v", "MPEGVideo"}, {"win.ini", "mci extensions", "mp2v", "MPEGVideo"}, {"win.ini", "mci extensions", "adts", "MPEGVideo"}, {"win.ini", "mci extensions", "wma", "MPEGVideo"}, {"win.ini", "mci extensions", "mpeg", "MPEGVideo"}, {"win.ini", "mci extensions", "tts", "MPEGVideo"}, {"win.ini", "mci extensions", "mpv2", "MPEGVideo"}, {"win.ini", "mci extensions", "au", "MPEGVideo"}, {"win.ini", "mci extensions", "3gpp", "MPEGVideo"}, {"win.ini", "mci extensions", "m4a", "MPEGVideo"}, {"win.ini", "mci extensions", "wax", "MPEGVideo"}, {"win.ini", "mci extensions", "aif", "MPEGVideo"}, {"win.ini", "mci extensions", "asx", "MPEGVideo"}, {"win.ini", "mci extensions", "Wav", "MPEGVideo"}, {"win.ini", "mci extensions", "m2ts", "MPEGVideo"}, {"win.ini", "mci extensions", "mov", "MPEGVideo"}, {"win.ini", "mci extensions", "wpl", "MPEGVideo"}, {"win.ini", "mci extensions", "aac", "MPEGVideo"}, {"win.ini", "mci extensions", "3gp2", "MPEGVideo"}, {"win.ini", "mci extensions", "mp4", "MPEGVideo"}, {"win.ini", "mci extensions", "mp3", "MPEGVideo"}, {"win.ini", "mci extensions", "mp2", "MPEGVideo"}, {"win.ini", "mci extensions", "wm", "MPEGVideo"}, {"win.ini", "mci extensions", "adt", "MPEGVideo"}, {"win.ini", "mci extensions", "cda", "MPEGVideo"}, {"win.ini", "mci extensions", "3g2", "MPEGVideo"}, {"win.ini", "mci extensions", "asf", "MPEGVideo"}, {"win.ini", "mci extensions", "mod", "MPEGVideo"}, {"win.ini", "mci extensions", "m1v", "MPEGVideo"}, {"win.ini", "mci extensions", "ts", "MPEGVideo"}, {"win.ini", "mci extensions", "rmi", "MPEGVideo"}, {"win.ini", "mci extensions", "mpg", "MPEGVideo"}, {"win.ini", "mci extensions", "3gp", "MPEGVideo"}, {"win.ini", "mci extensions", "aifc", "MPEGVideo"}, {"win.ini", "mci extensions", "mpe", "MPEGVideo"}, {"win.ini", "mci extensions", "m2v", "MPEGVideo"}, {"win.ini", "mci extensions", "snd", "MPEGVideo"}, #else {"win.ini", "mci extensions", "Mid", "Sequencer"}, {"win.ini", "mci extensions", "Wav", "WaveAudio"}, {"win.ini", "mci extensions", "avi", "avivideo"}, {"win.ini", "mci extensions", "cda", "CDAudio"}, {"win.ini", "mci extensions", "rmi", "Sequencer"}, {"win.ini", "mci extensions", "wma", "MPEGVideo"}, {"win.ini", "mci extensions", "m4v", "MPEGVideo"}, {"win.ini", "mci extensions", "m4a", "MPEGVideo"}, {"win.ini", "mci extensions", "aac", "MPEGVideo"}, {"win.ini", "mci extensions", "mp4", "MPEGVideo"}, {"win.ini", "mci extensions", "mov", "MPEGVideo"}, {"win.ini", "mci extensions", "mp3", "MPEGVideo"}, {"win.ini", "mci extensions", "mpg", "MPEGVideo"}, {"win.ini", "mci extensions", "mp2", "MPEGVideo"}, {"win.ini", "mci extensions", "dat", "MPEGVideo"}, {"win.ini", "mci extensions", "m2t", "MPEGVideo"}, {"win.ini", "mci extensions", "mpa", "MPEGVideo"}, {"win.ini", "mci extensions", "wmx", "MPEGVideo"}, {"win.ini", "mci extensions", "wmv", "MPEGVideo"}, {"win.ini", "mci extensions", "m3u", "MPEGVideo"}, {"win.ini", "mci extensions", "ivf", "MPEGVideo"}, {"win.ini", "mci extensions", "mts", "MPEGVideo"}, {"win.ini", "mci extensions", "au", "MPEGVideo"}, {"win.ini", "mci extensions", "mpe", "MPEGVideo"}, {"win.ini", "mci extensions", "mod", "MPEGVideo"}, {"win.ini", "mci extensions", "aif", "MPEGVideo"}, /* When there are many extensions, MPLAYER causes buffer overflow. */ /* {"win.ini", "mci extensions", "wax", "MPEGVideo"}, {"win.ini", "mci extensions", "asx", "MPEGVideo"}, {"win.ini", "mci extensions", "wpl", "MPEGVideo"}, {"win.ini", "mci extensions", "wm", "MPEGVideo"}, {"win.ini", "mci extensions", "adt", "MPEGVideo"}, {"win.ini", "mci extensions", "3g2", "MPEGVideo"}, {"win.ini", "mci extensions", "asf", "MPEGVideo"}, {"win.ini", "mci extensions", "m1v", "MPEGVideo"}, {"win.ini", "mci extensions", "tts", "MPEGVideo"}, {"win.ini", "mci extensions", "ts", "MPEGVideo"}, {"win.ini", "mci extensions", "wvx", "MPEGVideo"}, {"win.ini", "mci extensions", "3gp", "MPEGVideo"}, {"win.ini", "mci extensions", "m2v", "MPEGVideo"}, {"win.ini", "mci extensions", "snd", "MPEGVideo"}, {"win.ini", "mci extensions", "mpeg", "MPEGVideo"}, {"win.ini", "mci extensions", "mp4v", "MPEGVideo"}, {"win.ini", "mci extensions", "mp2v", "MPEGVideo"}, {"win.ini", "mci extensions", "adts", "MPEGVideo"}, {"win.ini", "mci extensions", "aifc", "MPEGVideo"}, {"win.ini", "mci extensions", "3gp2", "MPEGVideo"}, {"win.ini", "mci extensions", "m2ts", "MPEGVideo"}, {"win.ini", "mci extensions", "aiff", "MPEGVideo"}, {"win.ini", "mci extensions", "mpv2", "MPEGVideo"}, {"win.ini", "mci extensions", "3gpp", "MPEGVideo"}, */ #endif /* overwrite section */ {"win.ini", "mci extensions", NULL, NULL, NULL, NULL, TRUE}, }; /*********************************************************************** * GetPrivateProfileInt (KERNEL.127) */ UINT16 WINAPI GetPrivateProfileInt16( LPCSTR section, LPCSTR entry, INT16 def_val, LPCSTR filename ) { /* we used to have some elaborate return value limitation (<= -32768 etc.) * here, but Win98SE doesn't care about this at all, so I deleted it. * AFAIR versions prior to Win9x had these limits, though. */ char ini[MAX_PATH]; LPCSTR filename_file = PathFindFileNameA(filename); for (int i = 0; i < ARRAY_SIZE(ini_redirect_list); i++) { if (!ini_redirect_list[i].entry) { continue; } if (!stricmp(ini_redirect_list[i].file, filename_file) && !stricmp(section, ini_redirect_list[i].section) && !stricmp(entry, ini_redirect_list[i].entry)) { if (ini_redirect_list[i].get_int) return ini_redirect_list[i].get_int(); } } RedirectPrivateProfileStringWindowsDir(filename,ini); return (INT16)GetPrivateProfileIntA(section,entry,def_val,ini); } char windowsPath[MAX_PATH]; const char *GetRedirectWindowsDir() { if (*windowsPath != '\0') return windowsPath; #ifdef ENABLEREDIRECTSYSTEMDIR GetModuleFileNameA(GetModuleHandleA(NULL), windowsPath, MAX_PATH); PathRemoveFileSpecA(windowsPath); char ini[MAX_PATH]; krnl386_get_config_string("otvdm", "WINDIR", "WINDOWS", ini, sizeof(ini)); PathCombineA(windowsPath, windowsPath, ini); GetShortPathNameA(windowsPath, windowsPath, sizeof(windowsPath)); PathRemoveBackslashA(windowsPath); if (strstr(windowsPath, "\\\\") || strstr(windowsPath, "/")) { ERR("WINDIR %s is not a correct path.\n", windowsPath); } return windowsPath; #else GetWindowsDirectoryA(windowsPath, sizeof(windowsPath)); GetShortPathNameA(windowsPath, windowsPath, sizeof(windowsPath)); return windowsPath; #endif } static void RedirectPrivateProfileStringWindowsDir(LPCSTR filename, LPCSTR output) { if (!filename) filename = "win.ini"; if (PathIsFileSpecA(filename) && !strchr(filename, '/')) { PathCombineA(output, GetRedirectWindowsDir(), filename); } else { strcpy(output, filename); } } static BOOL append_ini_section(LPSTR data, SIZE_T *buf_pos, SIZE_T len, LPCSTR entry) { SIZE_T ent_len = strlen(entry) + 1; memcpy(data + *buf_pos, entry, min(ent_len, len - *buf_pos - 2)); *buf_pos += min(ent_len, len - *buf_pos - 2); data[*buf_pos] = '\0'; data[*buf_pos + 1] = '\0'; return TRUE; } static int construct_redirected_ini_section(LPCSTR section, LPSTR data, UINT16 size, LPCSTR filename) { LPCSTR filename_file = PathFindFileNameA(filename); SIZE_T buf_pos = 0; if (size == 0) { return 0; } if (size == 1) { data[0] = '\0'; return 0; } data[0] = '\0'; data[1] = '\0'; if (size == 2) { return 0; } for (int i = 0; i < ARRAY_SIZE(ini_redirect_list); i++) { if (!ini_redirect_list[i].entry) { continue; } if (!stricmp(ini_redirect_list[i].file, filename_file) && !stricmp(section, ini_redirect_list[i].section)) { if (!append_ini_section(data, &buf_pos, size, ini_redirect_list[i].entry)) { break; } } } return buf_pos; } /*********************************************************************** * GetPrivateProfileString (KERNEL.128) */ INT16 WINAPI GetPrivateProfileString16( LPCSTR section, LPCSTR entry, LPCSTR def_val, LPSTR buffer, UINT16 len, LPCSTR filename ) { char filenamebuf[MAX_PATH]; BOOL overwrite_section = FALSE; TRACE("%s %s %s\n", filename, section, entry); if (!section || !filename) { if (buffer && len) buffer[0] = 0; return 0; } LPCSTR filename_file = PathFindFileNameA(filename); if (entry) { for (int i = 0; i < ARRAY_SIZE(ini_redirect_list); i++) { if (!ini_redirect_list[i].entry) { continue; } if (!stricmp(ini_redirect_list[i].file, filename_file) && !stricmp(section, ini_redirect_list[i].section) && !stricmp(entry, ini_redirect_list[i].entry)) { LPCSTR val = ini_redirect_list[i].value; SIZE_T size; if (!val && ini_redirect_list[i].get_str) { val = ini_redirect_list[i].get_str(); } if (!val) { break; } if (len == 0) { return 0; } else if (len == 1) { buffer[0] = '\0'; return 0; } size = min(strlen(val), len - 1); memcpy(buffer, val, size); buffer[size] = '\0'; return strlen(buffer); } } } else { for (int i = 0; i < ARRAY_SIZE(ini_redirect_list); i++) { if (ini_redirect_list[i].entry) { continue; } if (ini_redirect_list[i].overwrite_section && !stricmp(ini_redirect_list[i].file, filename_file) && !stricmp(section, ini_redirect_list[i].section)) { overwrite_section = TRUE; } } } RedirectPrivateProfileStringWindowsDir(filename, filenamebuf); filename = filenamebuf; TRACE("(%s, %s, %s, %p, %u, %s)\n", debugstr_a(section), debugstr_a(entry), debugstr_a(def_val), buffer, len, debugstr_a(filename)); /* len = 0 means unlimited buffer length (windows bug?) */ if (!entry && len == 0) { len = 0xffff; } if (!entry) { /* We have to return the list of keys in the section but without the values * so we need to massage the results of GetPrivateProfileSectionA. */ UINT ret, oldlen = len, size = min( len, 1024 ); LPSTR data, src; if (overwrite_section) return construct_redirected_ini_section(section, buffer, oldlen, filename); for (;;) { if (!(data = HeapAlloc(GetProcessHeap(), 0, size ))) return 0; ret = GetPrivateProfileSectionA( section, data, size, filename ); if (!ret) { HeapFree( GetProcessHeap(), 0, data ); ret = construct_redirected_ini_section(section, buffer, oldlen, filename); if (!ret) ret = GetPrivateProfileStringA(section, entry, def_val, buffer, len, filename); return ret; } if (ret != size - 2) break; /* overflow, try again */ size *= 2; HeapFree( GetProcessHeap(), 0, data ); } src = data; while (len && *src) { char *p = strchr( src, '=' ); /* A valid entry is formed by name = value */ if (!p) { src += strlen(src) + 1; continue; } if (p - src < len) { memcpy( buffer, src, p - src ); buffer += p - src; *buffer++ = 0; len -= (p - src) + 1; src += strlen(src) + 1; } else /* overflow */ { memcpy( buffer, src, len ); buffer += len; len = 0; } } HeapFree( GetProcessHeap(), 0, data ); if (len) { *buffer = 0; return oldlen - len; } if (oldlen > 2) { buffer[-2] = 0; buffer[-1] = 0; return oldlen - 2; } return 0; } return GetPrivateProfileStringA( section, entry, def_val, buffer, len, filename ); } static BOOL16 check_write_profile_error(LPCSTR filename, DWORD error) { if (error == ERROR_ACCESS_DENIED) { OFSTRUCT ofstr; HFILE ret = OpenFile(filename, &ofstr, OF_EXIST); if (ret != HFILE_ERROR) { WARN("Failed to write profile data because it was redirected to the registry"); return TRUE; // fake success, any written data can't be read anyway } } return FALSE; } /*********************************************************************** * WritePrivateProfileString (KERNEL.129) */ BOOL16 WINAPI WritePrivateProfileString16( LPCSTR section, LPCSTR entry, LPCSTR string, LPCSTR filename ) { char filenamebuf[MAX_PATH]; RedirectPrivateProfileStringWindowsDir(filename, &filenamebuf); filename = filenamebuf; BOOL ret = WritePrivateProfileStringA(section,entry,string,filename); if (!ret) return check_write_profile_error(filename, GetLastError()); return ret; } /*********************************************************************** * GetWindowsDirectory (KERNEL.134) */ UINT16 WINAPI GetWindowsDirectory16( LPSTR path, UINT16 count ) { const char *w = GetRedirectWindowsDir(); UINT16 len = strlen(w); if (len + 1 > count) return strlen(w) + 1; strcpy(path, w); return len; //return GetWindowsDirectoryA( path, count ); } /*********************************************************************** * GetSystemDirectory (KERNEL.135) */ UINT16 WINAPI GetSystemDirectory16( LPSTR path, UINT16 count ) { static const char system16[] = "\\SYSTEM"; char windir[MAX_PATH]; UINT16 len; len = GetWindowsDirectory16(windir, sizeof(windir) - sizeof(system16) + 1) + sizeof(system16); if (count >= len) { lstrcpyA(path, windir); lstrcatA(path, system16); len--; /* space for the terminating zero is not included on success */ } return len; } /*********************************************************************** * GetDriveType (KERNEL.136) * Get the type of a drive in Win16. * * RETURNS * The type of the Drive. For a list see GetDriveTypeW from kernel32. * * NOTES * Note that it returns DRIVE_REMOTE for CD-ROMs, since MSCDEX uses the * remote drive API. The return value DRIVE_REMOTE for CD-ROMs has been * verified on Win 3.11 and Windows 95. Some programs rely on it, so don't * do any pseudo-clever changes. */ UINT16 WINAPI GetDriveType16( UINT16 drive ) /* [in] number (NOT letter) of drive */ { UINT type; WCHAR root[3]; root[0] = 'A' + drive; root[1] = ':'; root[2] = 0; type = GetDriveTypeW( root ); if (type == DRIVE_CDROM) type = DRIVE_REMOTE; else if (type == DRIVE_NO_ROOT_DIR) type = DRIVE_UNKNOWN; return type; } /*********************************************************************** * GetProfileSectionNames (KERNEL.142) */ WORD WINAPI GetProfileSectionNames16(LPSTR buffer, WORD size) { return GetPrivateProfileSectionNamesA(buffer,size,"win.ini"); } /*********************************************************************** * GetPrivateProfileSectionNames (KERNEL.143) */ WORD WINAPI GetPrivateProfileSectionNames16( LPSTR buffer, WORD size, LPCSTR filename ) { return GetPrivateProfileSectionNamesA(buffer,size,filename); } /*********************************************************************** * CreateDirectory (KERNEL.144) */ BOOL16 WINAPI CreateDirectory16( LPCSTR path, LPVOID dummy ) { return CreateDirectoryA( path, NULL ); } /*********************************************************************** * RemoveDirectory (KERNEL.145) */ BOOL16 WINAPI RemoveDirectory16( LPCSTR path ) { return RemoveDirectoryA( path ); } /*********************************************************************** * DeleteFile (KERNEL.146) */ BOOL16 WINAPI DeleteFile16( LPCSTR path ) { return DeleteFileA( path ); } /*********************************************************************** * SetHandleCount (KERNEL.199) */ UINT16 WINAPI SetHandleCount16( UINT16 count ) { return SetHandleCount( count ); } /*********************************************************************** * GetShortPathName (KERNEL.274) */ WORD WINAPI GetShortPathName16( LPCSTR longpath, LPSTR shortpath, WORD len ) { return GetShortPathNameA( longpath, shortpath, len ); } /*********************************************************************** * WriteOutProfiles (KERNEL.315) */ void WINAPI WriteOutProfiles16(void) { WritePrivateProfileSectionW( NULL, NULL, NULL ); } /*********************************************************************** * WritePrivateProfileStruct (KERNEL.406) */ BOOL16 WINAPI WritePrivateProfileStruct16 (LPCSTR section, LPCSTR key, LPVOID buf, UINT16 bufsize, LPCSTR filename) { char filenamebuf[MAX_PATH]; RedirectPrivateProfileStringWindowsDir(filename, &filenamebuf); filename = filenamebuf; return WritePrivateProfileStructA( section, key, buf, bufsize, filename ); } /*********************************************************************** * GetPrivateProfileStruct (KERNEL.407) */ BOOL16 WINAPI GetPrivateProfileStruct16(LPCSTR section, LPCSTR key, LPVOID buf, UINT16 len, LPCSTR filename) { char filenamebuf[MAX_PATH]; RedirectPrivateProfileStringWindowsDir(filename, &filenamebuf); filename = filenamebuf; return GetPrivateProfileStructA( section, key, buf, len, filename ); } /*********************************************************************** * GetCurrentDirectory (KERNEL.411) */ UINT16 WINAPI GetCurrentDirectory16( UINT16 buflen, LPSTR buf ) { return GetCurrentDirectoryA( buflen, buf ); } /*********************************************************************** * SetCurrentDirectory (KERNEL.412) */ BOOL16 WINAPI SetCurrentDirectory16( LPCSTR dir ) { char fulldir[MAX_PATH]; if (!GetFullPathNameA( dir, MAX_PATH, fulldir, NULL )) return FALSE; if (!SetCurrentDirectoryA( dir )) return FALSE; if (fulldir[0] && fulldir[1] == ':') { TDB *pTask = GlobalLock16( GetCurrentTask() ); char env_var[4] = "=A:"; env_var[1] = fulldir[0]; SetEnvironmentVariableA( env_var, fulldir ); /* update the directory in the TDB */ if (pTask) { pTask->curdrive = 0x80 | (fulldir[0] - 'A'); GetShortPathNameA( fulldir + 2, pTask->curdir, sizeof(pTask->curdir) ); } } return TRUE; } /************************************************************************* * FindFirstFile (KERNEL.413) */ HANDLE16 WINAPI FindFirstFile16( LPCSTR path, WIN32_FIND_DATAA *data ) { HGLOBAL16 h16; HANDLE handle, *ptr; if (!(h16 = GlobalAlloc16( GMEM_MOVEABLE, sizeof(handle) ))) return INVALID_HANDLE_VALUE16; ptr = GlobalLock16( h16 ); *ptr = handle = FindFirstFileA( path, data ); GlobalUnlock16( h16 ); if (handle == INVALID_HANDLE_VALUE) { GlobalFree16( h16 ); h16 = INVALID_HANDLE_VALUE16; } return h16; } /************************************************************************* * FindNextFile (KERNEL.414) */ BOOL16 WINAPI FindNextFile16( HANDLE16 handle, WIN32_FIND_DATAA *data ) { HANDLE *ptr; BOOL ret = FALSE; if ((handle == INVALID_HANDLE_VALUE16) || !(ptr = GlobalLock16( handle ))) { SetLastError( ERROR_INVALID_HANDLE ); return ret; } ret = FindNextFileA( *ptr, data ); GlobalUnlock16( handle ); return ret; } /************************************************************************* * FindClose (KERNEL.415) */ BOOL16 WINAPI FindClose16( HANDLE16 handle ) { HANDLE *ptr; if ((handle == INVALID_HANDLE_VALUE16) || !(ptr = GlobalLock16( handle ))) { SetLastError( ERROR_INVALID_HANDLE ); return FALSE; } FindClose( *ptr ); GlobalUnlock16( handle ); GlobalFree16( handle ); return TRUE; } /*********************************************************************** * WritePrivateProfileSection (KERNEL.416) */ BOOL16 WINAPI WritePrivateProfileSection16( LPCSTR section, LPCSTR string, LPCSTR filename ) { return WritePrivateProfileSectionA( section, string, filename ); } /*********************************************************************** * WriteProfileSection (KERNEL.417) */ BOOL16 WINAPI WriteProfileSection16( LPCSTR section, LPCSTR keys_n_values) { return WritePrivateProfileSection16( section, keys_n_values, "win.ini"); } /*********************************************************************** * GetPrivateProfileSection (KERNEL.418) */ INT16 WINAPI GetPrivateProfileSection16( LPCSTR section, LPSTR buffer, UINT16 len, LPCSTR filename ) { return GetPrivateProfileSectionA( section, buffer, len, filename ); } /*********************************************************************** * GetProfileSection (KERNEL.419) */ INT16 WINAPI GetProfileSection16( LPCSTR section, LPSTR buffer, UINT16 len ) { return GetPrivateProfileSection16( section, buffer, len, "win.ini" ); } /************************************************************************** * GetFileAttributes (KERNEL.420) */ DWORD WINAPI GetFileAttributes16( LPCSTR name ) { return GetFileAttributesA( name ); } /************************************************************************** * SetFileAttributes (KERNEL.421) */ BOOL16 WINAPI SetFileAttributes16( LPCSTR lpFileName, DWORD attributes ) { return SetFileAttributesA( lpFileName, attributes ); } /*********************************************************************** * GetDiskFreeSpace (KERNEL.422) */ BOOL16 WINAPI GetDiskFreeSpace16( LPCSTR root, LPDWORD cluster_sectors, LPDWORD sector_bytes, LPDWORD free_clusters, LPDWORD total_clusters ) { return GetDiskFreeSpaceA( root, cluster_sectors, sector_bytes, free_clusters, total_clusters ); } /*********************************************************************** * FileCDR (KERNEL.130) */ FARPROC16 WINAPI FileCDR16(FARPROC16 x) { FIXME("(%p): stub\n", x); return (FARPROC16)TRUE; } ================================================ FILE: krnl386/fpu.c ================================================ /* * DOS interrupt 34->3e handlers. All FPU interrupt code should be * moved into this file. * * Copyright 2002 Robert 'Admiral' Coeyman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "dosexe.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /* * The actual work is done by a single routine. */ static void FPU_ModifyCode(CONTEXT *context, BYTE Opcode); /********************************************************************** * DOSVM_Int34Handler * * Handler for int 34 (FLOATING POINT EMULATION - Opcode 0xd8). * * The interrupt list isn't specific about what this interrupt * actually does. [ interrup.m ] */ void WINAPI DOSVM_Int34Handler(CONTEXT *context) { TRACE("Int 0x34 called-- FP opcode 0xd8\n"); FPU_ModifyCode(context, 0xd8); } /********************************************************************** * DOSVM_Int35Handler * * Handler for int 35 (FLOATING POINT EMULATION - Opcode 0xd9). * * The interrupt list isn't specific about what this interrupt * actually does. [ interrup.m ] */ void WINAPI DOSVM_Int35Handler(CONTEXT *context) { TRACE("Int 0x35 called-- FP opcode 0xd9\n"); FPU_ModifyCode(context, 0xd9); } /********************************************************************** * DOSVM_Int36Handler * * Handler for int 36 (FLOATING POINT EMULATION - Opcode 0xda). * * The interrupt list isn't specific about what this interrupt * actually does. [ interrup.m ] */ void WINAPI DOSVM_Int36Handler(CONTEXT *context) { TRACE("Int 0x36 called-- FP opcode 0xda\n"); FPU_ModifyCode(context, 0xda); } /********************************************************************** * DOSVM_Int37Handler * * Handler for int 37 (FLOATING POINT EMULATION - Opcode 0xdb). * * The interrupt list isn't specific about what this interrupt * actually does. [ interrup.m ] */ void WINAPI DOSVM_Int37Handler(CONTEXT *context) { TRACE("Int 0x37 called-- FP opcode 0xdb\n"); FPU_ModifyCode(context, 0xdb); } /********************************************************************** * DOSVM_Int38Handler * * Handler for int 38 (FLOATING POINT EMULATION - Opcode 0xdc). * * Between versions 3.0 and 5.01, the original PC-MOS API call that * was here was moved to int 0xd4. * * The interrupt list isn't specific about what this interrupt * actually does. [ interrup.m ] */ void WINAPI DOSVM_Int38Handler(CONTEXT *context) { TRACE("Int 0x38 called-- FP opcode 0xdc\n"); FPU_ModifyCode(context, 0xdc); } /********************************************************************** * DOSVM_Int39Handler * * Handler for int 39 (FLOATING POINT EMULATION - Opcode 0xdd). * * The interrupt list isn't specific about what this interrupt * actually does. [ interrup.m ] */ void WINAPI DOSVM_Int39Handler(CONTEXT *context) { TRACE("Int 0x39 called-- FP opcode 0xdd\n"); FPU_ModifyCode(context, 0xdd); } /********************************************************************** * DOSVM_Int3aHandler * * Handler for int 3a (FLOATING POINT EMULATION - Opcode 0xde). * * The interrupt list isn't specific about what this interrupt * actually does. [ interrup.m ] */ void WINAPI DOSVM_Int3aHandler(CONTEXT *context) { TRACE("Int 0x3a called-- FP opcode 0xde\n"); FPU_ModifyCode(context, 0xde); } /********************************************************************** * DOSVM_Int3bHandler * * Handler for int 3B (FLOATING POINT EMULATION - Opcode 0xdf). * * The interrupt list isn't specific about what this interrupt * actually does. [ interrup.m ] */ void WINAPI DOSVM_Int3bHandler(CONTEXT *context) { TRACE("Int 0x3b called-- FP opcode 0xdf\n"); FPU_ModifyCode(context, 0xdf); } /********************************************************************** * DOSVM_Int3cHandler * * Handler for int 3C (FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE). * * Generated code is CD 3C xy mm ... (CD = int | 3C = this interrupt) * xy is a modified ESC code and mm is the modR/M byte. * xy byte seems to be encoded as ss011xxx or ss000xxx * ss= segment override. * 00 -> DS * 01 -> SS * 10 -> CS * 11 -> ES * * 11011xxx should be the opcode instruction. */ void WINAPI DOSVM_Int3cHandler(CONTEXT *context) { FIXME("Int 3C NOT Implemented\n"); INT_BARF(context, 0x3c); } /********************************************************************** * DOSVM_Int3dHandler * * Handler for int 3D (FLOATING POINT EMULATION - Standalone FWAIT). * * Opcode 0x90 is a NOP. It just fills space where the 3D was. */ void WINAPI DOSVM_Int3dHandler(CONTEXT *context) { TRACE("Int 0x3d called-- Standalone FWAIT\n"); FPU_ModifyCode(context, 0x90); } /********************************************************************** * DOSVM_Int3eHandler * * FLOATING POINT EMULATION -- Borland "Shortcut" call. * The two bytes following the int 3E instruction are * the subcode and a NOP ( 0x90 ), except for subcodes DC and DE * where the second byte is the register count. * * Direct access 4.0 modifies and does not restore this vector. * */ void WINAPI DOSVM_Int3eHandler(CONTEXT *context) { FIXME("Int 3E NOT Implemented\n"); INT_BARF(context, 0x3e); } /********************************************************************** * FPU_ModifyCode * * This is the function that inserts the 0x9b fwait instruction * and the actual FPU opcode into the program. * -A.C. * * Code thanks to Ove Kaaven */ static void FPU_ModifyCode(CONTEXT *context, BYTE Opcode) { BYTE *code = CTX_SEG_OFF_TO_LIN(context, context->SegCs, context->Eip); /* * All *NIX systems should have a real or kernel emulated FPU. */ code[-2] = 0x9b; /* The fwait instruction */ code[-1] = Opcode; /* Insert the opcode */ if ( ISV86(context) && LOWORD(context->Eip) < 2 ) FIXME("Backed up over a real mode segment boundary in FPU code.\n"); context->Eip -= 2; /* back up the return address 2 bytes */ TRACE("Modified code in FPU int call to 0x9b 0x%x\n",Opcode); } ================================================ FILE: krnl386/global.c ================================================ /* * Global heap functions * * Copyright 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* 0xffff sometimes seems to mean: CURRENT_DS */ #include "config.h" #include "wine/port.h" #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SYSCTL_H #include #endif #include "wine/winbase16.h" #include "winternl.h" #include "kernel16_private.h" #include "wine/debug.h" #include "winuser.h" #include "wingdi.h" WINE_DEFAULT_DEBUG_CHANNEL(global); /* Global arena block */ typedef struct { void *base; /* Base address (0 if discarded) */ DWORD size; /* Size in bytes (0 indicates a free block) */ HGLOBAL16 handle; /* Handle for this block */ HGLOBAL16 hOwner; /* Owner of this block */ BYTE lockCount; /* Count of GlobalFix() calls */ BYTE pageLockCount; /* Count of GlobalPageLock() calls */ BYTE flags; /* Allocation flags */ BYTE selCount; /* Number of selectors allocated for this block */ DWORD dib_avail_size; WORD wSeg; WORD wType; HGLOBAL link_hndl; BYTE pad[0x10 - 4 - 2 - 2 - 4]; /* win31 GLOBALARENA size = 0x20 */ } GLOBALARENA; /* Flags definitions */ #define GA_MOVEABLE 0x02 /* same as GMEM_MOVEABLE */ #define GA_DGROUP 0x04 #define GA_DISCARDABLE 0x08 #define GA_IPCSHARE 0x10 /* same as GMEM_DDESHARE */ #define GA_DOSMEM 0x20 /* Arena array (FIXME) */ static GLOBALARENA *pGlobalArena; static int globalArenaSize; static DWORD *selTable; #define GLOBAL_MAX_ALLOC_SIZE 0x00ff0000 /* Largest allocation is 16M - 64K */ #define GLOBAL_MAX_COUNT 8192 /* Max number of allocated blocks */ #define VALID_HANDLE(handle) (((handle)&4)&&(((handle)>>__AHSHIFT)> __AHSHIFT)) static HANDLE get_win16_heap(void) { static HANDLE win16_heap; /* we create global memory block with execute permission. The access can be limited * for 16-bit code on selector level */ if (!win16_heap) win16_heap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0); return win16_heap; } static void clear_sel_table(WORD sel, WORD selcount) { for (int i = 0; i < selcount; i++) { selTable[(sel + i) >> __AHSHIFT] = 0; } } static void set_sel_table(WORD sel, WORD selcount) { for (int i = 0; i < selcount; i++) { selTable[(sel + i) >> __AHSHIFT] = (sel >> __AHSHIFT) * sizeof(GLOBALARENA); } } /*********************************************************************** * GLOBAL_GetArena * * Return the arena for a given selector, growing the arena array if needed. */ static GLOBALARENA *GLOBAL_GetArena( WORD sel, WORD selcount ) { if (((sel >> __AHSHIFT) + selcount) > globalArenaSize) { int newsize = ((sel >> __AHSHIFT) + selcount + 0xff) & ~0xff; if (!pGlobalArena) { SIZE_T size; pThhook->SelTableLen = GLOBAL_MAX_COUNT * sizeof(DWORD); size = GLOBAL_MAX_COUNT * sizeof(GLOBALARENA) + 0x80 /* unknown */ + pThhook->SelTableLen; pGlobalArena = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, size); if (!pGlobalArena) return 0; WORD sel = SELECTOR_AllocBlock(pGlobalArena, 0x10000, WINE_LDT_FLAGS_DATA); SetSelectorLimit16(sel, size - 1); pThhook->hGlobalHeap = sel; pThhook->pGlobalHeap = sel; pThhook->SelTableStart = GLOBAL_MAX_COUNT * sizeof(GLOBALARENA) + 0x80; /* 0x00040080; */ selTable = (DWORD*)((BYTE*)(pGlobalArena) + pThhook->SelTableStart); set_sel_table(sel, 1); } if (newsize > GLOBAL_MAX_COUNT) return 0; globalArenaSize = newsize; } return pGlobalArena + (sel >> __AHSHIFT); } void debug_handles(void) { int printed=0; int i; for (i = globalArenaSize-1 ; i>=0 ; i--) { if (pGlobalArena[i].size!=0 && (pGlobalArena[i].handle & 0x8000)){ printed=1; DPRINTF("0x%08x, ",pGlobalArena[i].handle); } } if (printed) DPRINTF("\n"); } /*********************************************************************** * GLOBAL_CreateBlock * * Create a global heap block for a fixed range of linear memory. */ HGLOBAL16 GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size, HGLOBAL16 hOwner, unsigned char selflags, WORD sel ) { WORD selcount; GLOBALARENA *pArena; /* Allocate the selector(s) */ if (sel) { if (size > 65536) { ERR("prealloced sel must not be larger than 65536"); return 0; } WORD descflags = selflags & 0x40 ? (selflags & ~0x40) | 0x4000 : selflags; SELECTOR_ReallocBlock(sel, ptr, size); SelectorAccessRights16(sel, 1, descflags); } else sel = SELECTOR_AllocBlock( ptr, size, selflags ); if (!sel) return 0; selcount = (size + 0xffff) / 0x10000; if (!(pArena = GLOBAL_GetArena( sel, selcount ))) { SELECTOR_FreeBlock( sel ); return 0; } /* Fill the arena block */ pArena->base = ptr; pArena->size = size == 1 && ptr == NULL ? 0 : GetSelectorLimit16(sel) + 1; pArena->handle = (flags & GMEM_MOVEABLE) ? sel - 1 : sel; pArena->hOwner = hOwner; pArena->lockCount = 0; pArena->pageLockCount = 0; pArena->wSeg = 0; pArena->wType = GT_UNKNOWN; pArena->flags = flags & GA_MOVEABLE; pArena->link_hndl = NULL; if (flags & GMEM_DISCARDABLE) pArena->flags |= GA_DISCARDABLE; if (flags & GMEM_DDESHARE) pArena->flags |= GA_IPCSHARE; if (!(selflags & (WINE_LDT_FLAGS_CODE^WINE_LDT_FLAGS_DATA))) pArena->flags |= GA_DGROUP; pArena->selCount = selcount; if (selcount > 1) /* clear the next arena blocks */ memset( pArena + 1, 0, (selcount - 1) * sizeof(GLOBALARENA) ); set_sel_table(sel, selcount); return pArena->handle; } /*********************************************************************** * GLOBAL_FreeBlock * * Free a block allocated by GLOBAL_CreateBlock, without touching * the associated linear memory range. */ BOOL16 GLOBAL_FreeBlock( HGLOBAL16 handle ) { WORD sel; GLOBALARENA *pArena; if (!handle) return TRUE; sel = GlobalHandleToSel16( handle ); if (!VALID_HANDLE(sel)) return FALSE; pArena = GET_ARENA_PTR(sel); SELECTOR_FreeBlock( sel ); clear_sel_table(sel, pArena->selCount); memset( pArena, 0, sizeof(GLOBALARENA) ); return TRUE; } /*********************************************************************** * GLOBAL_MoveBlock */ BOOL16 GLOBAL_MoveBlock( HGLOBAL16 handle, void *ptr, DWORD size ) { WORD sel; GLOBALARENA *pArena; if (!handle) return TRUE; sel = GlobalHandleToSel16( handle ); if (!VALID_HANDLE(sel)) return FALSE; pArena = GET_ARENA_PTR(sel); if (pArena->selCount != 1) return FALSE; pArena->base = ptr; pArena->size = size; SELECTOR_ReallocBlock( sel, ptr, size ); return TRUE; } /*********************************************************************** * GLOBAL_Alloc * * Implementation of GlobalAlloc16() */ HGLOBAL16 GLOBAL_Alloc( UINT16 flags, DWORD size, HGLOBAL16 hOwner, unsigned char selflags, WORD sel ) { void *ptr; HGLOBAL16 handle; TRACE("%d flags=%04x\n", size, flags ); /* If size is 0, create a discarded block */ if (size == 0) return GLOBAL_CreateBlock( flags, NULL, 1, hOwner, selflags, sel ); /* Fixup the size */ DWORD fixup_size = (size < 0x10000) ? 0x1f : 0xfff; // selectors larger than 64k need page granularity if (size > GLOBAL_MAX_ALLOC_SIZE) return 0; size = (size + fixup_size) & ~fixup_size; /* Allocate the linear memory */ ptr = HeapAlloc( get_win16_heap(), 0, size); /* FIXME: free discardable blocks and try again? */ if (!ptr) return 0; /* Allocate the selector(s) */ handle = GLOBAL_CreateBlock( flags, ptr, size, hOwner, selflags, sel ); if (!handle) { HeapFree( get_win16_heap(), 0, ptr ); return 0; } if (flags & GMEM_ZEROINIT) memset( ptr, 0, size ); else if (size > 100) // some programs depend on the block not being cleared also work around bug in procyan2 { for (int i = 1; i < 22; i++) ((char *)ptr)[size - i] = 0xff; } else ((char *)ptr)[size - 1] = 0xff; return handle; } WORD GLOBAL_GetSegNum(HGLOBAL16 hg) { return GET_ARENA_PTR(hg)->wSeg; } void GLOBAL_SetSeg(HGLOBAL16 hg, WORD wSeg, WORD type) { GET_ARENA_PTR(hg)->wSeg = wSeg; GET_ARENA_PTR(hg)->wType = type; } HGLOBAL GLOBAL_GetLink(HGLOBAL16 hg) { return GET_ARENA_PTR(hg)->link_hndl; } void GLOBAL_SetLink(HGLOBAL16 hg16, HGLOBAL hg) { GET_ARENA_PTR(hg16)->link_hndl = hg; } HGLOBAL16 GLOBAL_FindLink(HGLOBAL hg) { int i; GLOBALARENA *pArena = pGlobalArena; for (i = 0; i < globalArenaSize; i++, pArena++) { if ((pArena->size != 0) && (pArena->link_hndl == hg)) return pArena->handle; } return 0; } /*********************************************************************** * GlobalAlloc (KERNEL.15) * GlobalAlloc16 (KERNEL32.24) * * Allocate a global memory object. * * RETURNS * Handle: Success * NULL: Failure */ HGLOBAL16 WINAPI GlobalAlloc16( UINT16 flags, /* [in] Object allocation attributes */ DWORD size /* [in] Number of bytes to allocate */ ) { HANDLE16 owner = GetCurrentPDB16(); if (flags & GMEM_DDESHARE) { /* make it owned by the calling module */ STACK16FRAME *frame = CURRENT_STACK16; owner = GetExePtr( frame->cs ); } HGLOBAL16 handle = GLOBAL_Alloc( flags, size, owner, WINE_LDT_FLAGS_DATA, 0 ); if (!handle) { ERR("Could not allocate %04X,%08X\n", flags, size); } return handle; } /*********************************************************************** * GlobalReAlloc (KERNEL.16) * * Change the size or attributes of a global memory object. * * RETURNS * Handle: Success * NULL: Failure */ HGLOBAL16 WINAPI GlobalReAlloc16( HGLOBAL16 handle, /* [in] Handle of global memory object */ DWORD size, /* [in] New size of block */ UINT16 flags /* [in] How to reallocate object */ ) { WORD selcount; DWORD oldsize; void *ptr, *newptr; GLOBALARENA *pArena, *pNewArena; WORD sel = GlobalHandleToSel16( handle ); HANDLE heap = get_win16_heap(); TRACE("%04x %d flags=%04x\n", handle, size, flags ); if (!handle) return 0; if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x!\n", handle); return 0; } pArena = GET_ARENA_PTR( handle ); if (pArena->wType == GT_INTERNAL) return 0; /* Discard the block if requested */ if ((size == 0) && (flags & GMEM_MOVEABLE) && !(flags & GMEM_MODIFY)) { if (!(pArena->flags & GA_MOVEABLE) || !(pArena->flags & GA_DISCARDABLE) || (pArena->lockCount > 0) || (pArena->pageLockCount > 0)) return 0; if (pArena->dib_avail_size) { FIXME("DIB.DRV\n"); } else if (pArena->flags & GA_DOSMEM) DOSMEM_FreeBlock( pArena->base ); else HeapFree( heap, 0, pArena->base ); pArena->base = 0; /* Note: we rely on the fact that SELECTOR_ReallocBlock won't * change the selector if we are shrinking the block. * FIXME: shouldn't we keep selectors until the block is deleted? */ SELECTOR_ReallocBlock( sel, 0, 1 ); return handle; } /* Change the flags */ if (flags & GMEM_MODIFY) { /* Change the flags, leaving GA_DGROUP alone */ pArena->flags = (pArena->flags & GA_DGROUP) | (flags & GA_MOVEABLE); if (flags & GMEM_DISCARDABLE) pArena->flags |= GA_DISCARDABLE; return handle; } /* Fixup the size */ DWORD fixup_size = 0x1f; BOOL old = IsOldWindowsTask(GetCurrentTask()); DWORD add_size = old ? 0x100 : 0; if (size + add_size > 0x10000) add_size = 0; if (size > GLOBAL_MAX_ALLOC_SIZE - (fixup_size + 1)) return 0; if (size == 0) size = fixup_size + 1; else size = (size + fixup_size) & ~fixup_size; /* Reallocate the linear memory */ ptr = pArena->base; oldsize = pArena->size; TRACE("oldbase %p oldsize %08x newsize %08x\n", ptr,oldsize,size); if (ptr && (size == oldsize)) return handle; /* Nothing to do */ if (pArena->dib_avail_size) { if (size > pArena->dib_avail_size) { ERR("could not realloc dib memory\n"); return 0; } pArena->size = size; SetSelectorLimit16(sel, size - 1); return handle; } if (pArena->flags & GA_DOSMEM) { if (DOSMEM_ResizeBlock(ptr, size, TRUE) == size) newptr = ptr; else if(pArena->pageLockCount > 0) newptr = 0; else { newptr = DOSMEM_AllocBlock( size, NULL ); if (newptr) { memcpy( newptr, ptr, oldsize ); DOSMEM_FreeBlock( ptr ); } } } else { /* * if more than one reader (e.g. some pointer has been * given out by GetVDMPointer32W16), * only try to realloc in place */ if (ptr) newptr = HeapReAlloc( heap, (pArena->pageLockCount > 0) ? HEAP_REALLOC_IN_PLACE_ONLY : 0, ptr, size + add_size ); else newptr = HeapAlloc( heap, 0, size + add_size ); } if (!newptr) { FIXME("Realloc failed lock %d\n",pArena->pageLockCount); if (pArena->pageLockCount <1) { if (pArena->flags & GA_DOSMEM) DOSMEM_FreeBlock( pArena->base ); else HeapFree( heap, 0, ptr ); SELECTOR_FreeBlock( sel ); memset( pArena, 0, sizeof(GLOBALARENA) ); } return 0; } ptr = newptr; /* Reallocate the selector(s) */ sel = SELECTOR_ReallocBlock( sel, ptr, size + add_size); if (!sel) { if (pArena->flags & GA_DOSMEM) DOSMEM_FreeBlock( pArena->base ); else HeapFree( heap, 0, ptr ); memset( pArena, 0, sizeof(GLOBALARENA) ); return 0; } selcount = (size + 0xffff) / 0x10000; if (!(pNewArena = GLOBAL_GetArena( sel, selcount ))) { if (pArena->flags & GA_DOSMEM) DOSMEM_FreeBlock( pArena->base ); else HeapFree( heap, 0, ptr ); SELECTOR_FreeBlock( sel ); return 0; } /* Fill the new arena block As we may have used HEAP_REALLOC_IN_PLACE_ONLY, areas may overlap*/ if (pNewArena != pArena) { clear_sel_table( handle, pArena->selCount ); memmove( pNewArena, pArena, sizeof(GLOBALARENA) ); memset( pArena, 0, sizeof(GLOBALARENA) ); set_sel_table( pNewArena->handle, selcount ); } pNewArena->base = ptr; pNewArena->size = GetSelectorLimit16(sel) + 1 - add_size; pNewArena->selCount = selcount; pNewArena->handle = (pNewArena->flags & GA_MOVEABLE) ? sel - 1 : sel; if (selcount > 1) /* clear the next arena blocks */ memset( pNewArena + 1, 0, (selcount - 1) * sizeof(GLOBALARENA) ); if ((oldsize < size) && (flags & GMEM_ZEROINIT)) memset( (char *)ptr + oldsize, 0, size - oldsize ); return !(pNewArena->handle ^ handle & ~1) ? handle : pNewArena->handle; } static void check_gptr(HANDLE src) { BOOL valid = FALSE; if ((DWORD)src & 4) { if (GlobalFlags(src) != GMEM_INVALID_HANDLE) valid = TRUE; } else { if (HeapValidate(GetProcessHeap(), 0, src)) valid = TRUE; } if (valid) GlobalFree(src); } /*********************************************************************** * GlobalFree (KERNEL.17) * GlobalFree16 (KERNEL32.31) * RETURNS * NULL: Success * Handle: Failure */ HGLOBAL16 WINAPI GlobalFree16( HGLOBAL16 handle /* [in] Handle of global memory object */ ) { void *ptr; if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalFree16!\n",handle); return 0; } GLOBALARENA *pArena = GET_ARENA_PTR(handle); ptr = pArena->base; if (pArena->wType == GT_INTERNAL) return 0; TRACE("%04x\n", handle ); if (pArena->dib_avail_size) { FIXME("DIB.DRV\n"); return 0; } HGLOBAL ddehndl = GLOBAL_GetLink(handle); if (!GLOBAL_FreeBlock( handle )) return handle; /* failed */ HeapFree( get_win16_heap(), 0, ptr ); if (ddehndl) check_gptr(ddehndl); return 0; } /********************************************************************** * K32WOWGlobalLock16 (KERNEL32.60) */ SEGPTR WINAPI K32WOWGlobalLock16( HGLOBAL16 handle ) { WORD sel = GlobalHandleToSel16( handle ); TRACE("(%04x) -> %08x\n", handle, MAKELONG( 0, sel ) ); if (handle) { if (handle == (HGLOBAL16)-1) handle = CURRENT_DS; if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to WIN16_GlobalLock16!\n",handle); sel = 0; } else if (!GET_ARENA_PTR(handle)->base) sel = 0; else if ((GET_ARENA_PTR(handle)->flags & GA_DISCARDABLE) || IsOldWindowsTask(GetCurrentTask())) GET_ARENA_PTR(handle)->lockCount++; } return MAKESEGPTR( sel, 0 ); } /* WOW32 GLOBALALLOC gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=000016ce,edx=00040002,ecx=000016ce,eax=000016ce GLOBALLOCK gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=000016cf,ecx=000016cf,eax=00000000 GLOBALUNLOCK gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=000016ce,ecx=00000000,eax=00000000 GLOBALREALLOC gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=000002a0,edx=00000000,ecx=000016ce,eax=000016ce GLOBALSIZE gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=0000267e,edx=00000000,ecx=00000200,eax=00002000 GLOBALHANDLE gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00002676,edx=000016cf,ecx=00000000,eax=000016ce GLOBALFLAGS gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=0000267e,edx=000016cf,ecx=00000000,eax=00000000 GLOBALFREE gs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=00000fc0,edx=00000000,ecx=00000000,eax=00000000 GLOBALALLOC gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=000016ce,edx=00040002,ecx=000016ce,eax=000016ce GLOBALLOCK gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcd16cf,ecx=cdcd16cf,eax=00000000 GLOBALUNLOCK gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcd16ce,ecx=cdcd0000,eax=00000000 GLOBALREALLOC gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=000002a0,edx=00000000,ecx=000016ce,eax=000016ce GLOBALSIZE gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd267e,edx=cdcd0000,ecx=cdcd0200,eax=00002000 GLOBALHANDLE gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd2676,edx=cdcd16cf,ecx=cdcdcdcd,eax=000016ce GLOBALFLAGS gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd267e,edx=cdcd16cf,ecx=cdcd0000,eax=00000000 GLOBALFREE gs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=00000fc0,edx=00000000,ecx=cdcd0000,eax=00000000 WIN31 GLOBALALLOC gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00001dce,edx=810b0002,ecx=00001dce,eax=00001dce GLOBALLOCK gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00001dcf,ecx=00001dcf,eax=00000000 GLOBALUNLOCK gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00001dce,ecx=00000000,eax=00000000 GLOBALREALLOC gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00001dce,eax=00001dce GLOBALSIZE gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=0000267e,edx=00000000,ecx=00000200,eax=00002000 GLOBALHANDLE gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00002676,edx=00001dcf,ecx=00000000,eax=00001dce GLOBALFLAGS gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=0000267e,edx=00001dcf,ecx=00000000,eax=00000000 GLOBALFREE gs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000 gs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00004c20,edx=00000000,ecx=00000000,eax=00000000 GLOBALALLOC gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=00001dce,edx=810b0002,ecx=00001dce,eax=00001dce GLOBALLOCK gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcd1dcf,ecx=cdcd1dcf,eax=00000000 GLOBALUNLOCK gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcd1dce,ecx=cdcd0000,eax=00000000 GLOBALREALLOC gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=00000000,edx=00000000,ecx=00001dce,eax=00001dce GLOBALSIZE gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd267e,edx=cdcd0000,ecx=cdcd0200,eax=00002000 GLOBALHANDLE gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd2676,edx=cdcd1dcf,ecx=cdcdcdcd,eax=00001dce GLOBALFLAGS gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd267e,edx=cdcd1dcf,ecx=cdcd0000,eax=00000000 GLOBALFREE gs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd gs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=00004bc0,edx=00000000,ecx=cdcd0000,eax=00000000 GLOBALALLOC es=0 ecx=ebx=eax=handle edx=??? GLOBALLOCK es=0 cx=dx=segment eax=offset GLOBALUNLOCK es=0 dx=handle eax=result cx=0?result? GLOBALREALLOC es=0 ecx=eax=handle edx=0? ebx=??? GLOBALSIZE es=0 eax=size(low) cx=size>>4? dx=size(high) bx=??? GLOBALHANDLE es=es eax=handle dx=segment bx=??? GLOBALFLAGS es=0 eax=result cx=0?result? dx=segment bx=??? GLOBALFREE es=0 eax=result cx=0?result? edx=0?result? ebx=??? */ /* yes, win16 sets es to 0 */ void WINAPI WIN16_GlobalAlloc16(UINT16 flags, DWORD size, CONTEXT *context) { context->SegEs= 0; context->Ecx = context->Ebx = context->Eax = GlobalAlloc16(flags, size); } /*********************************************************************** * GlobalLock (KERNEL.18) * * This is the GlobalLock16() function used by 16-bit code. */ SEGPTR WINAPI WIN16_GlobalLock16(HGLOBAL16 handle) { SEGPTR ret = K32WOWGlobalLock16(handle); CURRENT_STACK16->ecx &= ~0xffff; CURRENT_STACK16->ecx |= SELECTOROF(ret); /* selector must be returned in CX as well */ CURRENT_STACK16->es = 0; return ret; } HGLOBAL16 WINAPI WIN16_GlobalReAlloc16(HGLOBAL16 handle, DWORD size, UINT16 flags) { CURRENT_STACK16->es = 0; return CURRENT_STACK16->ecx = GlobalReAlloc16(handle, size, flags); } DWORD WINAPI WIN16_GlobalSize16(HGLOBAL16 handle) { DWORD size = GlobalSize16(handle); CURRENT_STACK16->es = 0; CURRENT_STACK16->ecx &= ~0xffff; CURRENT_STACK16->ecx |= (WORD)((size >> 4) & 0xffff); return size; } DWORD WINAPI WIN16_GlobalFlags16(HGLOBAL16 handle) { CURRENT_STACK16->es = 0; return MAKELONG(GlobalFlags16(handle), GlobalHandleToSel16(handle)); } DWORD WINAPI WIN16_GlobalFree16(HGLOBAL16 handle) { CURRENT_STACK16->es = 0; CURRENT_STACK16->fs = 0; CURRENT_STACK16->gs = 0; return GlobalFree16(handle); } void regen_icon(HICON16 icon); DWORD WINAPI WIN16_GlobalUnlock16(HGLOBAL16 handle) { DWORD ret = MAKELONG(GlobalUnlock16(handle), handle); CURRENT_STACK16->es = 0; if (!ret) return 0; GLOBALARENA *pArena = GET_ARENA_PTR(handle); if (pArena->wType == (GT_RESOURCE | (12 << 4))) // GD_CURSOR { static void (*regen_icon)(HICON16) = 0; if (!regen_icon) regen_icon = (void (*)(HICON16))GetProcAddress(GetModuleHandle("user.exe16"), "regen_icon"); regen_icon((HICON16)handle); } return ret; } /*********************************************************************** * GlobalLock16 (KERNEL32.25) * * This is the GlobalLock16() function used by 32-bit code. * * RETURNS * Pointer to first byte of memory block * NULL: Failure */ LPVOID WINAPI GlobalLock16( HGLOBAL16 handle /* [in] Handle of global memory object */ ) { if (!handle) return 0; if (!VALID_HANDLE(handle)) return 0; // don't use IsOldWindowsTask here as it'll cause an infinite loop if (GET_ARENA_PTR(handle)->flags & GA_DISCARDABLE) GET_ARENA_PTR(handle)->lockCount++; return GET_ARENA_PTR(handle)->base; } /*********************************************************************** * GlobalUnlock (KERNEL.19) * GlobalUnlock16 (KERNEL32.26) * NOTES * Should the return values be cast to booleans? * * RETURNS * TRUE: Object is still locked * FALSE: Object is unlocked */ BOOL16 WINAPI GlobalUnlock16( HGLOBAL16 handle /* [in] Handle of global memory object */ ) { GLOBALARENA *pArena = GET_ARENA_PTR(handle); if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalUnlock16!\n",handle); return FALSE; } TRACE("%04x\n", handle ); if (pArena->lockCount) pArena->lockCount--; if (CURRENT_STACK16) CURRENT_STACK16->es = 0; return pArena->lockCount; } BOOL16 WINAPI WIN32_GlobalUnlock16( HGLOBAL16 handle /* [in] Handle of global memory object */ ) { GLOBALARENA *pArena = GET_ARENA_PTR(handle); if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalUnlock16!\n",handle); return FALSE; } TRACE("%04x\n", handle ); if (pArena->lockCount) pArena->lockCount--; return pArena->lockCount; } /*********************************************************************** * GlobalChangeLockCount (KERNEL.365) * * This is declared as a register function as it has to preserve * *all* registers, even AX/DX ! * */ void WINAPI GlobalChangeLockCount16( HGLOBAL16 handle, INT16 delta, CONTEXT *context ) { if ( delta == 1 ) GlobalLock16( handle ); else if ( delta == -1 ) GlobalUnlock16( handle ); else ERR("(%04X, %d): strange delta value\n", handle, delta ); } /*********************************************************************** * GlobalSize (KERNEL.20) * GlobalSize16 (KERNEL32.32) * * Get the current size of a global memory object. * * RETURNS * Size in bytes of object * 0: Failure */ DWORD WINAPI GlobalSize16( HGLOBAL16 handle /* [in] Handle of global memory object */ ) { TRACE("%04x\n", handle ); if (!handle) return 0; if (!VALID_HANDLE(handle)) return 0; return GET_ARENA_PTR(handle)->size; } /*********************************************************************** * GlobalHandle (KERNEL.21) * * Get the handle associated with a pointer to the global memory block. * * NOTES * Why is GlobalHandleToSel used here with the sel as input? * * RETURNS * Handle: Success * NULL: Failure */ DWORD WINAPI GlobalHandle16( WORD sel /* [in] Address of global memory block */ ) { TRACE("%04x\n", sel ); if (!VALID_HANDLE(sel)) { WARN("Invalid handle 0x%04x passed to GlobalHandle16!\n",sel); return 0; } WORD handle = GET_ARENA_PTR(sel)->handle; if (!handle) return 0; return MAKELONG( handle, GlobalHandleToSel16(sel) ); } /*********************************************************************** * GlobalHandleNoRIP (KERNEL.159) */ DWORD WINAPI GlobalHandleNoRIP16( WORD sel ) { int i; for (i = globalArenaSize-1 ; i>=0 ; i--) { if (pGlobalArena[i].size!=0 && pGlobalArena[i].handle == sel) return MAKELONG( GET_ARENA_PTR(sel)->handle, GlobalHandleToSel16(sel) ); } return 0; } /*********************************************************************** * GlobalFlags (KERNEL.22) * * Get information about a global memory object. * * NOTES * Should this return GMEM_INVALID_HANDLE instead of 0 on invalid * handle? * * RETURNS * Value specifying flags and lock count * GMEM_INVALID_HANDLE: Invalid handle */ UINT16 WINAPI GlobalFlags16( HGLOBAL16 handle /* [in] Handle of global memory object */ ) { GLOBALARENA *pArena; TRACE("%04x\n", handle ); if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalFlags16!\n",handle); return 0; } pArena = GET_ARENA_PTR(handle); return pArena->lockCount | ((pArena->flags & GA_DISCARDABLE) ? GMEM_DISCARDABLE : 0) | ((pArena->base == 0) ? GMEM_DISCARDED : 0); } /*********************************************************************** * LockSegment (KERNEL.23) */ HGLOBAL16 WINAPI LockSegment16( HGLOBAL16 handle ) { TRACE("%04x\n", handle ); if (handle == (HGLOBAL16)-1) handle = CURRENT_DS; if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to LockSegment16!\n",handle); return 0; } if ((GET_ARENA_PTR(handle)->flags & GA_DISCARDABLE) || IsOldWindowsTask(GetCurrentTask())) GET_ARENA_PTR(handle)->lockCount++; return handle; } /*********************************************************************** * UnlockSegment (KERNEL.24) */ void WINAPI UnlockSegment16( HGLOBAL16 handle ) { TRACE("%04x\n", handle ); if (handle == (HGLOBAL16)-1) handle = CURRENT_DS; if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to UnlockSegment16!\n",handle); return; } if(GET_ARENA_PTR(handle)->lockCount) GET_ARENA_PTR(handle)->lockCount--; /* FIXME: this ought to return the lock count in CX (go figure...) */ } /*********************************************************************** * GlobalCompact (KERNEL.25) */ DWORD WINAPI GlobalCompact16( DWORD desired ) { return GLOBAL_MAX_ALLOC_SIZE; } /*********************************************************************** * GlobalFreeAll (KERNEL.26) */ void WINAPI GlobalFreeAll16( HGLOBAL16 owner ) { int i; GLOBALARENA *pArena; pArena = pGlobalArena; for (i = 0; i < globalArenaSize; i++, pArena++) { if ((pArena->size != 0) && (pArena->hOwner == owner)) GlobalFree16( pArena->handle ); } } /*********************************************************************** * GlobalWire (KERNEL.111) * GlobalWire16 (KERNEL32.29) */ SEGPTR WINAPI GlobalWire16( HGLOBAL16 handle ) { return WIN16_GlobalLock16( handle ); } /*********************************************************************** * GlobalUnWire (KERNEL.112) * GlobalUnWire16 (KERNEL32.30) */ BOOL16 WINAPI GlobalUnWire16( HGLOBAL16 handle ) { return !GlobalUnlock16( handle ); } /*********************************************************************** * SetSwapAreaSize (KERNEL.106) */ LONG WINAPI SetSwapAreaSize16( WORD size ) { FIXME("(%d) - stub!\n", size ); return MAKELONG( size, 0xffff ); } /*********************************************************************** * GlobalLRUOldest (KERNEL.163) */ HGLOBAL16 WINAPI GlobalLRUOldest16( HGLOBAL16 handle ) { TRACE("%04x\n", handle ); if (handle == (HGLOBAL16)-1) handle = CURRENT_DS; return handle; } /*********************************************************************** * GlobalLRUNewest (KERNEL.164) */ HGLOBAL16 WINAPI GlobalLRUNewest16( HGLOBAL16 handle ) { TRACE("%04x\n", handle ); if (handle == (HGLOBAL16)-1) handle = CURRENT_DS; return handle; } /*********************************************************************** * GetFreeSpace (KERNEL.169) */ DWORD WINAPI GetFreeSpace16( UINT16 wFlags ) { MEMORYSTATUS ms; GlobalMemoryStatus( &ms ); return min(ms.dwAvailVirtual, 102400000); } /*********************************************************************** * GlobalDOSAlloc (KERNEL.184) * * Allocate memory in the first MB. * * RETURNS * Address (HW=Paragraph segment; LW=Selector) */ DWORD WINAPI GlobalDOSAlloc16( DWORD size /* [in] Number of bytes to be allocated */ ) { UINT16 uParagraph; LPVOID lpBlock; DWORD fixup_size = 0x1f; size = (size + fixup_size) & ~fixup_size; lpBlock = DOSMEM_AllocBlock(size, &uParagraph); if( lpBlock ) { HMODULE16 hModule = GetModuleHandle16("KERNEL"); WORD wSelector; GLOBALARENA *pArena; wSelector = GLOBAL_CreateBlock(GMEM_FIXED, lpBlock, size, hModule, WINE_LDT_FLAGS_DATA, 0 ); pArena = GET_ARENA_PTR(wSelector); pArena->flags |= GA_DOSMEM; return MAKELONG(wSelector,uParagraph); } return 0; } /*********************************************************************** * GlobalDOSFree (KERNEL.185) * * Free memory allocated with GlobalDOSAlloc * * RETURNS * NULL: Success * sel: Failure */ WORD WINAPI GlobalDOSFree16( WORD sel /* [in] Selector */ ) { DWORD block = GetSelectorBase(sel); if( block && block < 0x100000 ) { LPVOID lpBlock = DOSMEM_MapDosToLinear( block ); if( DOSMEM_FreeBlock( lpBlock ) ) GLOBAL_FreeBlock( sel ); sel = 0; } return sel; } /*********************************************************************** * GlobalPageLock (KERNEL.191) * GlobalSmartPageLock(KERNEL.230) */ WORD WINAPI GlobalPageLock16( HGLOBAL16 handle ) { TRACE("%04x\n", handle ); if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalPageLock!\n",handle); return 0; } return ++(GET_ARENA_PTR(handle)->pageLockCount); } /*********************************************************************** * GlobalPageUnlock (KERNEL.192) * GlobalSmartPageUnlock(KERNEL.231) */ WORD WINAPI GlobalPageUnlock16( HGLOBAL16 handle ) { TRACE("%04x\n", handle ); if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalPageUnlock!\n",handle); return 0; } return --(GET_ARENA_PTR(handle)->pageLockCount); } /*********************************************************************** * GlobalFix (KERNEL.197) * GlobalFix16 (KERNEL32.27) */ WORD WINAPI GlobalFix16( HGLOBAL16 handle ) { TRACE("%04x\n", handle ); if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalFix16!\n",handle); return 0; } if ((GET_ARENA_PTR(handle)->flags & GA_DISCARDABLE) || IsOldWindowsTask(GetCurrentTask())) GET_ARENA_PTR(handle)->lockCount++; return GlobalHandleToSel16(handle); } /*********************************************************************** * GlobalUnfix (KERNEL.198) * GlobalUnfix16 (KERNEL32.28) */ void WINAPI GlobalUnfix16( HGLOBAL16 handle ) { TRACE("%04x\n", handle ); if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalUnfix16!\n",handle); return; } if (GET_ARENA_PTR(handle)->lockCount) GET_ARENA_PTR(handle)->lockCount--; } /*********************************************************************** * FarSetOwner (KERNEL.403) */ void WINAPI FarSetOwner16( HGLOBAL16 handle, HANDLE16 hOwner ) { if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to FarSetOwner!\n",handle); return; } GET_ARENA_PTR(handle)->hOwner = hOwner; } /*********************************************************************** * FarGetOwner (KERNEL.404) */ HANDLE16 WINAPI FarGetOwner16( HGLOBAL16 handle ) { if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to FarGetOwner!\n",handle); return 0; } return GET_ARENA_PTR(handle)->hOwner; } /************************************************************************ * GlobalMasterHandle (KERNEL.28) * * * Should return selector and handle of the information structure for * the global heap. selector and handle are stored in the THHOOK as * pGlobalHeap and hGlobalHeap. * As Wine doesn't have this structure, we return both values as zero * Applications should interpret this as "No Global Heap" */ DWORD WINAPI GlobalMasterHandle16(void) { DWORD ret = 0; FIXME(": stub\n"); // some real mode programs don't check for null, provide enough to prevent crashes if (IsOldWindowsTask(GetCurrentTask())) { // this is an early form of LOCALHEAPINFO static WORD dummyheap[0x18]; static WORD sel = 0; if (!sel) { sel = AllocSelector16(0); SetSelectorBase(sel, (DWORD)dummyheap); SetSelectorLimit16(sel, 0x30); SelectorAccessRights16(sel, 1, 0); // data, readonly dummyheap[0] = 'Z'; // check value don't care so pretend MCB end of chain dummyheap[2] = 0; // count is 0 dummyheap[3] = sel; // start of chain dummyheap[4] = sel; // pretend MCB pointer dummyheap[18] = -1; // unknown } ret = sel << 16; } return ret; } /*********************************************************************** * GlobalHandleToSel (TOOLHELP.50) * * FIXME: This is in TOOLHELP but we keep a copy here for now. */ WORD WINAPI GlobalHandleToSel16( HGLOBAL16 handle ) { if (!handle) return 0; if (!VALID_HANDLE(handle)) { WARN("Invalid handle 0x%04x passed to GlobalHandleToSel!\n",handle); return 0; } if (!(handle & 7)) { WARN("Program attempted invalid selector conversion\n" ); return handle - 1; } return handle | 7; } /*********************************************************************** * GetFreeMemInfo (KERNEL.316) */ DWORD WINAPI GetFreeMemInfo16(void) { SYSTEM_BASIC_INFORMATION info; MEMORYSTATUS status; NtQuerySystemInformation( SystemBasicInformation, &info, sizeof(info), NULL ); GlobalMemoryStatus( &status ); return MAKELONG( status.dwTotalVirtual / info.PageSize, status.dwAvailVirtual / info.PageSize ); } /*********************************************************************** * A20Proc (KERNEL.165) */ void WINAPI A20Proc16( WORD unused ) { /* this is also a NOP in Windows */ } /*********************************************************************** * LimitEMSPages (KERNEL.156) */ DWORD WINAPI LimitEMSPages16( DWORD unused ) { return 0; } void WINAPI DibMapGlobalMemory(WORD sel, void *base, DWORD size) { GLOBALARENA *pArena = GET_ARENA_PTR(sel); int i; if (!sel) /* not hglobal */ { SetSelectorBase(sel, base); return; } pArena->dib_avail_size = size; pArena->base = base; for (i = 0; i < pArena->selCount; i++) { SetSelectorBase(sel + i * 8, (LPBYTE)base + i * 0x10000); } } void WINAPI DibUnmapGlobalMemory(void *base, DWORD size) { int i; LPVOID heap = HeapAlloc(get_win16_heap(), 0, size); memcpy(heap, base, size); for (i = 0; i < globalArenaSize; i++) { GLOBALARENA *pArena = pGlobalArena + i; if (!pArena->dib_avail_size) continue; if (pArena->base >= base && (LPBYTE)pArena->base < (LPBYTE)base + size) { pArena->dib_avail_size = 0; pArena->base = (LPBYTE)heap + ((SIZE_T)pArena->base - (SIZE_T)base); for (i = 0; i < pArena->selCount; i++) SetSelectorBase(pArena->handle + i * 8, (LPBYTE)pArena->base + i * 0x10000); } } } void WINAPI GlobalMapInternal(WORD sel, void *base, DWORD size) { GLOBALARENA *pArena = GET_ARENA_PTR(sel); if (!sel) return; if (!base || !size) { memset(pArena, 0, sizeof(GLOBALARENA)); return; } pArena->base = base; pArena->size = size; pArena->wType = GT_INTERNAL; } ================================================ FILE: krnl386/instr.c ================================================ /* * Emulation of privileged instructions * * Copyright 1995 Alexandre Julliard * Copyright 2005 Ivan Leo Puoti * Copyright 2005 Laurent Pinchart * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include "windef.h" #include "winbase.h" #include "winternl.h" #include "wine/winuser16.h" #include "excpt.h" #include "wine/debug.h" #include "kernel16_private.h" #include "dosexe.h" #include "wine/exception.h" WINE_DEFAULT_DEBUG_CHANNEL(int); WINE_DECLARE_DEBUG_CHANNEL(io); /* macros to set parts of a DWORD */ #define SET_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD(val)) #define SET_LOBYTE(dw,val) ((dw) = ((dw) & 0xffffff00) | LOBYTE(val)) #define ADD_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val))) #define ISV86(context) ((context)->EFlags & 0x00020000) static inline void add_stack( CONTEXT *context, int offset ) { if (ISV86(context) || !IS_SELECTOR_32BIT(context->SegSs)) ADD_LOWORD( context->Esp, offset ); else context->Esp += offset; } static inline void *make_ptr( CONTEXT *context, DWORD seg, DWORD off, int long_addr ) { if (ISV86(context)) return (void *)((seg << 4) + LOWORD(off)); if (wine_ldt_is_system(seg)) return (void *)off; if (!long_addr) off = LOWORD(off); return (char *) MapSL( MAKESEGPTR( seg, 0 ) ) + off; } static inline void *get_stack( CONTEXT *context ) { if (ISV86(context)) return (void *)((context->SegSs << 4) + LOWORD(context->Esp)); return wine_ldt_get_ptr( context->SegSs, context->Esp ); } #include "pshpack1.h" struct idtr { WORD limit; BYTE *base; }; #include "poppack.h" static LDT_ENTRY idt[256]; static inline struct idtr get_idtr(void) { struct idtr ret; #if defined(__i386__) && defined(__GNUC__) __asm__( "sidtl %0" : "=m" (ret) ); #else ret.base = (BYTE *)idt; ret.limit = sizeof(idt) - 1; #endif return ret; } /*********************************************************************** * INSTR_ReplaceSelector * * Try to replace an invalid selector by a valid one. * The only selector where it is allowed to do "mov ax,40;mov es,ax" * is the so called 'bimodal' selector 0x40, which points to the BIOS * data segment. Used by (at least) Borland products (and programs compiled * using Borland products). * * See Undocumented Windows, Chapter 5, __0040. */ static BOOL INSTR_ReplaceSelector( CONTEXT *context, WORD *sel ) { if (*sel == 0x40) { DOSVM_start_bios_timer(); *sel = DOSMEM_BiosDataSeg; return TRUE; } return FALSE; /* Can't replace selector, crashdump */ } /* store an operand into a register */ static void store_reg_word( CONTEXT *context, BYTE regmodrm, const BYTE *addr, int long_op ) { switch((regmodrm >> 3) & 7) { case 0: if (long_op) context->Eax = *(const DWORD *)addr; else SET_LOWORD(context->Eax, *(const WORD *)addr); break; case 1: if (long_op) context->Ecx = *(const DWORD *)addr; else SET_LOWORD(context->Ecx, *(const WORD *)addr); break; case 2: if (long_op) context->Edx = *(const DWORD *)addr; else SET_LOWORD(context->Edx, *(const WORD *)addr); break; case 3: if (long_op) context->Ebx = *(const DWORD *)addr; else SET_LOWORD(context->Ebx, *(const WORD *)addr); break; case 4: if (long_op) context->Esp = *(const DWORD *)addr; else SET_LOWORD(context->Esp, *(const WORD *)addr); break; case 5: if (long_op) context->Ebp = *(const DWORD *)addr; else SET_LOWORD(context->Ebp, *(const WORD *)addr); break; case 6: if (long_op) context->Esi = *(const DWORD *)addr; else SET_LOWORD(context->Esi, *(const WORD *)addr); break; case 7: if (long_op) context->Edi = *(const DWORD *)addr; else SET_LOWORD(context->Edi, *(const WORD *)addr); break; } } /* store an operand into a byte register */ static void store_reg_byte( CONTEXT *context, BYTE regmodrm, const BYTE *addr ) { switch((regmodrm >> 3) & 7) { case 0: context->Eax = (context->Eax & 0xffffff00) | *addr; break; case 1: context->Ecx = (context->Ecx & 0xffffff00) | *addr; break; case 2: context->Edx = (context->Edx & 0xffffff00) | *addr; break; case 3: context->Ebx = (context->Ebx & 0xffffff00) | *addr; break; case 4: context->Eax = (context->Eax & 0xffff00ff) | (*addr << 8); break; case 5: context->Ecx = (context->Ecx & 0xffff00ff) | (*addr << 8); break; case 6: context->Edx = (context->Edx & 0xffff00ff) | (*addr << 8); break; case 7: context->Ebx = (context->Ebx & 0xffff00ff) | (*addr << 8); break; } } /*********************************************************************** * INSTR_GetOperandAddr * * Return the address of an instruction operand (from the mod/rm byte). */ static BYTE *INSTR_GetOperandAddr( CONTEXT *context, BYTE *instr, int long_addr, int segprefix, int *len ) { int mod, rm, base = 0, index = 0, ss = 0, seg = 0, off; LDT_ENTRY entry; #define GET_VAL(val,type) \ { *val = *(type *)instr; instr += sizeof(type); *len += sizeof(type); } *len = 0; GET_VAL( &mod, BYTE ); rm = mod & 7; mod >>= 6; if (mod == 3) { switch(rm) { case 0: return (BYTE *)&context->Eax; case 1: return (BYTE *)&context->Ecx; case 2: return (BYTE *)&context->Edx; case 3: return (BYTE *)&context->Ebx; case 4: return (BYTE *)&context->Esp; case 5: return (BYTE *)&context->Ebp; case 6: return (BYTE *)&context->Esi; case 7: return (BYTE *)&context->Edi; } } if (long_addr) { if (rm == 4) { BYTE sib; GET_VAL( &sib, BYTE ); rm = sib & 7; ss = sib >> 6; switch((sib >> 3) & 7) { case 0: index = context->Eax; break; case 1: index = context->Ecx; break; case 2: index = context->Edx; break; case 3: index = context->Ebx; break; case 4: index = 0; break; case 5: index = context->Ebp; break; case 6: index = context->Esi; break; case 7: index = context->Edi; break; } } switch(rm) { case 0: base = context->Eax; seg = context->SegDs; break; case 1: base = context->Ecx; seg = context->SegDs; break; case 2: base = context->Edx; seg = context->SegDs; break; case 3: base = context->Ebx; seg = context->SegDs; break; case 4: base = context->Esp; seg = context->SegSs; break; case 5: base = context->Ebp; seg = context->SegSs; break; case 6: base = context->Esi; seg = context->SegDs; break; case 7: base = context->Edi; seg = context->SegDs; break; } switch (mod) { case 0: if (rm == 5) /* special case: ds:(disp32) */ { GET_VAL( &base, DWORD ); seg = context->SegDs; } break; case 1: /* 8-bit disp */ GET_VAL( &off, BYTE ); base += (signed char)off; break; case 2: /* 32-bit disp */ GET_VAL( &off, DWORD ); base += (signed long)off; break; } } else /* short address */ { switch(rm) { case 0: /* ds:(bx,si) */ base = LOWORD(context->Ebx) + LOWORD(context->Esi); seg = context->SegDs; break; case 1: /* ds:(bx,di) */ base = LOWORD(context->Ebx) + LOWORD(context->Edi); seg = context->SegDs; break; case 2: /* ss:(bp,si) */ base = LOWORD(context->Ebp) + LOWORD(context->Esi); seg = context->SegSs; break; case 3: /* ss:(bp,di) */ base = LOWORD(context->Ebp) + LOWORD(context->Edi); seg = context->SegSs; break; case 4: /* ds:(si) */ base = LOWORD(context->Esi); seg = context->SegDs; break; case 5: /* ds:(di) */ base = LOWORD(context->Edi); seg = context->SegDs; break; case 6: /* ss:(bp) */ base = LOWORD(context->Ebp); seg = context->SegSs; break; case 7: /* ds:(bx) */ base = LOWORD(context->Ebx); seg = context->SegDs; break; } switch(mod) { case 0: if (rm == 6) /* special case: ds:(disp16) */ { GET_VAL( &base, WORD ); seg = context->SegDs; } break; case 1: /* 8-bit disp */ GET_VAL( &off, BYTE ); base += (signed char)off; break; case 2: /* 16-bit disp */ GET_VAL( &off, WORD ); base += (signed short)off; break; } base &= 0xffff; } if (segprefix != -1) seg = segprefix; /* Make sure the segment and offset are valid */ if (wine_ldt_is_system(seg)) return (BYTE *)(base + (index << ss)); if ((seg & 7) != 7) return NULL; wine_ldt_get_entry( seg, &entry ); if (wine_ldt_is_empty( &entry )) return NULL; if (wine_ldt_get_limit(&entry) < (base + (index << ss))) return NULL; return (BYTE *)wine_ldt_get_base(&entry) + base + (index << ss); #undef GET_VAL } /*********************************************************************** * INSTR_EmulateLDS * * Emulate the LDS (and LES,LFS,etc.) instruction. */ static BOOL INSTR_EmulateLDS( CONTEXT *context, BYTE *instr, int long_op, int long_addr, int segprefix, int *len ) { WORD seg; BYTE *regmodrm = instr + 1 + (*instr == 0x0f); BYTE *addr = INSTR_GetOperandAddr( context, regmodrm, long_addr, segprefix, len ); if (!addr) return FALSE; /* Unable to emulate it */ seg = *(WORD *)(addr + (long_op ? 4 : 2)); if (!INSTR_ReplaceSelector( context, &seg )) return FALSE; /* Unable to emulate it */ /* Now store the offset in the correct register */ store_reg_word( context, *regmodrm, addr, long_op ); /* Store the correct segment in the segment register */ switch(*instr) { case 0xc4: context->SegEs = seg; break; /* les */ case 0xc5: context->SegDs = seg; break; /* lds */ case 0x0f: switch(instr[1]) { case 0xb2: context->SegSs = seg; break; /* lss */ case 0xb4: context->SegFs = seg; break; /* lfs */ case 0xb5: context->SegGs = seg; break; /* lgs */ } break; } /* Add the opcode size to the total length */ *len += 1 + (*instr == 0x0f); return TRUE; } /*********************************************************************** * INSTR_inport * * input on an I/O port */ static DWORD INSTR_inport( WORD port, int size, CONTEXT *context ) { DWORD res = DOSVM_inport( port, size, context ); if (TRACE_ON(io)) { switch(size) { case 1: TRACE_(io)( "0x%x < %02x @ %04x:%04x\n", port, LOBYTE(res), (WORD)context->SegCs, LOWORD(context->Eip)); break; case 2: TRACE_(io)( "0x%x < %04x @ %04x:%04x\n", port, LOWORD(res), (WORD)context->SegCs, LOWORD(context->Eip)); break; case 4: TRACE_(io)( "0x%x < %08x @ %04x:%04x\n", port, res, (WORD)context->SegCs, LOWORD(context->Eip)); break; } } return res; } /*********************************************************************** * INSTR_outport * * output on an I/O port */ static void INSTR_outport( WORD port, int size, DWORD val, CONTEXT *context ) { DOSVM_outport( port, size, val, context ); if (TRACE_ON(io)) { switch(size) { case 1: TRACE_(io)("0x%x > %02x @ %04x:%04x\n", port, LOBYTE(val), (WORD)context->SegCs, LOWORD(context->Eip)); break; case 2: TRACE_(io)("0x%x > %04x @ %04x:%04x\n", port, LOWORD(val), (WORD)context->SegCs, LOWORD(context->Eip)); break; case 4: TRACE_(io)("0x%x > %08x @ %04x:%04x\n", port, val, (WORD)context->SegCs, LOWORD(context->Eip)); break; } } } /*********************************************************************** * __wine_emulate_instruction * * Emulate a privileged instruction. * Returns exception continuation status. */ DWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context ) { int prefix, segprefix, prefixlen, len, repX, long_op, long_addr; BYTE *instr; long_op = long_addr = (!ISV86(context) && IS_SELECTOR_32BIT(context->SegCs)); instr = make_ptr( context, context->SegCs, context->Eip, TRUE ); if (!instr) return ExceptionContinueSearch; /* First handle any possible prefix */ segprefix = -1; /* no prefix */ prefix = 1; repX = 0; prefixlen = 0; while(prefix) { switch(*instr) { case 0x2e: segprefix = context->SegCs; break; case 0x36: segprefix = context->SegSs; break; case 0x3e: segprefix = context->SegDs; break; case 0x26: segprefix = context->SegEs; break; case 0x64: segprefix = context->SegFs; break; case 0x65: segprefix = context->SegGs; break; case 0x66: long_op = !long_op; /* opcode size prefix */ break; case 0x67: long_addr = !long_addr; /* addr size prefix */ break; case 0xf0: /* lock */ break; case 0xf2: /* repne */ repX = 1; break; case 0xf3: /* repe */ repX = 2; break; default: prefix = 0; /* no more prefixes */ break; } if (prefix) { instr++; prefixlen++; } } /* Now look at the actual instruction */ switch(*instr) { case 0x07: /* pop es */ case 0x17: /* pop ss */ case 0x1f: /* pop ds */ { WORD seg = *(WORD *)get_stack( context ); if (INSTR_ReplaceSelector( context, &seg )) { switch(*instr) { case 0x07: context->SegEs = seg; break; case 0x17: context->SegSs = seg; break; case 0x1f: context->SegDs = seg; break; } add_stack(context, long_op ? 4 : 2); context->Eip += prefixlen + 1; return ExceptionContinueExecution; } } break; /* Unable to emulate it */ case 0x0f: /* extended instruction */ switch(instr[1]) { case 0x22: /* mov %eax, %crX */ switch (instr[2]) { case 0xc0: FIXME("mov %%eax, %%cr0 at 0x%08x, EAX=0x%08x\n", context->Eip,context->Eax ); context->Eip += prefixlen+3; return ExceptionContinueExecution; default: break; /* Fallthrough to bad instruction handling */ } break; /* Fallthrough to bad instruction handling */ case 0x20: /* mov %crX, %eax */ switch (instr[2]) { case 0xe0: /* mov %cr4, %eax */ /* CR4 register: See linux/arch/i386/mm/init.c, X86_CR4_ defs * bit 0: VME Virtual Mode Exception ? * bit 1: PVI Protected mode Virtual Interrupt * bit 2: TSD Timestamp disable * bit 3: DE Debugging extensions * bit 4: PSE Page size extensions * bit 5: PAE Physical address extension * bit 6: MCE Machine check enable * bit 7: PGE Enable global pages * bit 8: PCE Enable performance counters at IPL3 */ FIXME("mov %%cr4, %%eax at 0x%08x\n",context->Eip); context->Eax = 0; context->Eip += prefixlen+3; return ExceptionContinueExecution; case 0xc0: /* mov %cr0, %eax */ FIXME("mov %%cr0, %%eax at 0x%08x\n",context->Eip); context->Eax = 0x10; /* FIXME: set more bits ? */ context->Eip += prefixlen+3; return ExceptionContinueExecution; default: /* Fallthrough to illegal instruction */ break; } /* Fallthrough to illegal instruction */ break; case 0x21: /* mov %drX, %eax */ switch (instr[2]) { case 0xc8: /* mov %dr1, %eax */ TRACE("mov %%dr1, %%eax at 0x%08x\n",context->Eip); context->Eax = context->Dr1; context->Eip += prefixlen+3; return ExceptionContinueExecution; case 0xf8: /* mov %dr7, %eax */ TRACE("mov %%dr7, %%eax at 0x%08x\n",context->Eip); context->Eax = 0x400; context->Eip += prefixlen+3; return ExceptionContinueExecution; } FIXME("Unsupported DR register, eip+2 is %02x\n", instr[2]); /* fallthrough to illegal instruction */ break; case 0x23: /* mov %eax, %drX */ switch (instr[2]) { case 0xc8: /* mov %eax, %dr1 */ context->Dr1 = context->Eax; context->Eip += prefixlen+3; return ExceptionContinueExecution; } FIXME("Unsupported DR register, eip+2 is %02x\n", instr[2]); /* fallthrough to illegal instruction */ break; case 0xa1: /* pop fs */ { WORD seg = *(WORD *)get_stack( context ); if (INSTR_ReplaceSelector( context, &seg )) { context->SegFs = seg; add_stack(context, long_op ? 4 : 2); context->Eip += prefixlen + 2; return ExceptionContinueExecution; } } break; case 0xa9: /* pop gs */ { WORD seg = *(WORD *)get_stack( context ); if (INSTR_ReplaceSelector( context, &seg )) { context->SegGs = seg; add_stack(context, long_op ? 4 : 2); context->Eip += prefixlen + 2; return ExceptionContinueExecution; } } break; case 0xb2: /* lss addr,reg */ case 0xb4: /* lfs addr,reg */ case 0xb5: /* lgs addr,reg */ if (INSTR_EmulateLDS( context, instr, long_op, long_addr, segprefix, &len )) { context->Eip += prefixlen + len; return ExceptionContinueExecution; } break; } break; /* Unable to emulate it */ case 0x6c: /* insb */ case 0x6d: /* insw/d */ case 0x6e: /* outsb */ case 0x6f: /* outsw/d */ { int typ = *instr; /* Just in case it's overwritten. */ int outp = (typ >= 0x6e); unsigned long count = repX ? (long_addr ? context->Ecx : LOWORD(context->Ecx)) : 1; int opsize = (typ & 1) ? (long_op ? 4 : 2) : 1; int step = (context->EFlags & 0x400) ? -opsize : +opsize; int seg; if (outp) { /* Check if there is a segment prefix override and honour it */ seg = segprefix == -1 ? context->SegDs : segprefix; /* FIXME: Check segment is readable. */ } else { seg = context->SegEs; /* FIXME: Check segment is writable. */ } if (repX) { if (long_addr) context->Ecx = 0; else SET_LOWORD(context->Ecx,0); } while (count-- > 0) { void *data; WORD dx = LOWORD(context->Edx); if (outp) { data = make_ptr( context, seg, context->Esi, long_addr ); if (long_addr) context->Esi += step; else ADD_LOWORD(context->Esi,step); } else { data = make_ptr( context, seg, context->Edi, long_addr ); if (long_addr) context->Edi += step; else ADD_LOWORD(context->Edi,step); } switch (typ) { case 0x6c: *(BYTE *)data = INSTR_inport( dx, 1, context ); break; case 0x6d: if (long_op) *(DWORD *)data = INSTR_inport( dx, 4, context ); else *(WORD *)data = INSTR_inport( dx, 2, context ); break; case 0x6e: INSTR_outport( dx, 1, *(BYTE *)data, context ); break; case 0x6f: if (long_op) INSTR_outport( dx, 4, *(DWORD *)data, context ); else INSTR_outport( dx, 2, *(WORD *)data, context ); break; } } context->Eip += prefixlen + 1; } return ExceptionContinueExecution; case 0x8a: /* mov Eb, Gb */ case 0x8b: /* mov Ev, Gv */ { BYTE *data = INSTR_GetOperandAddr(context, instr + 1, long_addr, segprefix, &len); unsigned int data_size = (*instr == 0x8b) ? (long_op ? 4 : 2) : 1; struct idtr idtr = get_idtr(); unsigned int offset = data - idtr.base; if (offset <= idtr.limit + 1 - data_size) { idt[1].LimitLow = 0x100; /* FIXME */ idt[2].LimitLow = 0x11E; /* FIXME */ idt[3].LimitLow = 0x500; /* FIXME */ switch (*instr) { case 0x8a: store_reg_byte( context, instr[1], (BYTE *)idt + offset ); break; case 0x8b: store_reg_word( context, instr[1], (BYTE *)idt + offset, long_op ); break; } context->Eip += prefixlen + len + 1; return ExceptionContinueExecution; } } break; /* Unable to emulate it */ case 0x8e: /* mov XX,segment_reg */ { WORD seg; BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, long_addr, segprefix, &len ); if (!addr) break; /* Unable to emulate it */ seg = *(WORD *)addr; if (!INSTR_ReplaceSelector( context, &seg )) break; /* Unable to emulate it */ switch((instr[1] >> 3) & 7) { case 0: context->SegEs = seg; context->Eip += prefixlen + len + 1; return ExceptionContinueExecution; case 1: /* cs */ break; case 2: context->SegSs = seg; context->Eip += prefixlen + len + 1; return ExceptionContinueExecution; case 3: context->SegDs = seg; context->Eip += prefixlen + len + 1; return ExceptionContinueExecution; case 4: context->SegFs = seg; context->Eip += prefixlen + len + 1; return ExceptionContinueExecution; case 5: context->SegGs = seg; context->Eip += prefixlen + len + 1; return ExceptionContinueExecution; case 6: /* unused */ case 7: /* unused */ break; } } break; /* Unable to emulate it */ case 0xc4: /* les addr,reg */ case 0xc5: /* lds addr,reg */ if (INSTR_EmulateLDS( context, instr, long_op, long_addr, segprefix, &len )) { context->Eip += prefixlen + len; return ExceptionContinueExecution; } break; /* Unable to emulate it */ case 0xcd: /* int */ context->Eip += prefixlen + 2; if (DOSVM_EmulateInterruptPM( context, instr[1] )) return ExceptionContinueExecution; context->Eip -= prefixlen + 2; /* restore eip */ break; /* Unable to emulate it */ case 0xcf: /* iret */ if (wine_ldt_is_system(context->SegCs)) break; /* don't emulate it in 32-bit code */ if (long_op) { DWORD *stack = get_stack( context ); context->Eip = *stack++; context->SegCs = *stack++; context->EFlags = *stack; add_stack(context, 3*sizeof(DWORD)); /* Pop the return address and flags */ } else { WORD *stack = get_stack( context ); context->Eip = *stack++; context->SegCs = *stack++; SET_LOWORD(context->EFlags,*stack); add_stack(context, 3*sizeof(WORD)); /* Pop the return address and flags */ } return ExceptionContinueExecution; case 0xe4: /* inb al,XX */ SET_LOBYTE(context->Eax,INSTR_inport( instr[1], 1, context )); context->Eip += prefixlen + 2; return ExceptionContinueExecution; case 0xe5: /* in (e)ax,XX */ if (long_op) context->Eax = INSTR_inport( instr[1], 4, context ); else SET_LOWORD(context->Eax, INSTR_inport( instr[1], 2, context )); context->Eip += prefixlen + 2; return ExceptionContinueExecution; case 0xe6: /* outb XX,al */ INSTR_outport( instr[1], 1, LOBYTE(context->Eax), context ); context->Eip += prefixlen + 2; return ExceptionContinueExecution; case 0xe7: /* out XX,(e)ax */ if (long_op) INSTR_outport( instr[1], 4, context->Eax, context ); else INSTR_outport( instr[1], 2, LOWORD(context->Eax), context ); context->Eip += prefixlen + 2; return ExceptionContinueExecution; case 0xec: /* inb al,dx */ SET_LOBYTE(context->Eax, INSTR_inport( LOWORD(context->Edx), 1, context ) ); context->Eip += prefixlen + 1; return ExceptionContinueExecution; case 0xed: /* in (e)ax,dx */ if (long_op) context->Eax = INSTR_inport( LOWORD(context->Edx), 4, context ); else SET_LOWORD(context->Eax, INSTR_inport( LOWORD(context->Edx), 2, context )); context->Eip += prefixlen + 1; return ExceptionContinueExecution; case 0xee: /* outb dx,al */ INSTR_outport( LOWORD(context->Edx), 1, LOBYTE(context->Eax), context ); context->Eip += prefixlen + 1; return ExceptionContinueExecution; case 0xef: /* out dx,(e)ax */ if (long_op) INSTR_outport( LOWORD(context->Edx), 4, context->Eax, context ); else INSTR_outport( LOWORD(context->Edx), 2, LOWORD(context->Eax), context ); context->Eip += prefixlen + 1; return ExceptionContinueExecution; case 0xfa: /* cli */ get_vm86_teb_info()->dpmi_vif = 0; context->Eip += prefixlen + 1; return ExceptionContinueExecution; case 0xfb: /* sti */ get_vm86_teb_info()->dpmi_vif = 1; context->Eip += prefixlen + 1; if (get_vm86_teb_info()->vm86_pending) { get_vm86_teb_info()->vm86_pending = 0; rec->ExceptionCode = EXCEPTION_VM86_STI; break; /* Handle the pending event. */ } return ExceptionContinueExecution; } return ExceptionContinueSearch; /* Unable to emulate it */ } /*********************************************************************** * INSTR_vectored_handler * * Vectored exception handler used to emulate protected instructions * from 32-bit code. */ LONG CALLBACK INSTR_vectored_handler( EXCEPTION_POINTERS *ptrs ) { EXCEPTION_RECORD *record = ptrs->ExceptionRecord; CONTEXT *context = ptrs->ContextRecord; if (wine_ldt_is_system(context->SegCs) && (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION || record->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION)) { if (__wine_emulate_instruction( record, context ) == ExceptionContinueExecution) return EXCEPTION_CONTINUE_EXECUTION; } return EXCEPTION_CONTINUE_SEARCH; } /*********************************************************************** * DOS3Call (KERNEL.102) */ void WINAPI DOS3Call( CONTEXT *context ) { __wine_call_int_handler( context, 0x21 ); } /*********************************************************************** * NetBIOSCall (KERNEL.103) */ void WINAPI NetBIOSCall16( CONTEXT *context ) { __wine_call_int_handler( context, 0x5c ); } /*********************************************************************** * GetSetKernelDOSProc (KERNEL.311) */ FARPROC16 WINAPI GetSetKernelDOSProc16( FARPROC16 DosProc ) { FIXME("(DosProc=%p): stub\n", DosProc); return NULL; } ================================================ FILE: krnl386/int09.c ================================================ /* * DOS interrupt 09h handler (IRQ1 - KEYBOARD) * * Copyright 1999 Ove Kåven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "wine/debug.h" #include "dosexe.h" WINE_DEFAULT_DEBUG_CHANNEL(int); #define QUEUELEN 31 static struct { BYTE queuelen,queue[QUEUELEN],ascii[QUEUELEN]; } kbdinfo; /* * Update the BIOS data segment's keyboard status flags (mem 0x40:0x17/0x18) * if modifier/special keys have been pressed. * FIXME: we merely toggle key status and don't actively set it instead, * so we might be out of sync with the real current system status of these keys. * Probably doesn't matter too much, though. */ static void DOSVM_Int09UpdateKbdStatusFlags(BYTE scan, BOOL extended, BIOSDATA *data, BOOL *modifier) { BYTE realscan = scan & 0x7f; /* remove 0x80 make/break flag */ BYTE bit1 = 255, bit2 = 255; INPUT_RECORD msg; DWORD res; *modifier = TRUE; switch (realscan) { case 0x36: /* r shift */ bit1 = 0; break; case 0x2a: /* l shift */ bit1 = 1; break; case 0x1d: /* l/r control */ bit1 = 2; if (!extended) /* left control only */ bit2 = 0; break; case 0x37: /* SysRq inner parts */ /* SysRq scan code sequence: 38, e0, 37, e0, b7, b8 */ FIXME("SysRq not handled yet.\n"); break; case 0x38: /* l/r menu/alt, SysRq outer parts */ bit1 = 3; if (!extended) /* left alt only */ bit2 = 1; break; case 0x46: /* scroll lock */ bit1 = 4; if (!extended) /* left ctrl only */ bit2 = 4; break; case 0x45: /* num lock, pause */ if (extended) /* distinguish from non-extended Pause key */ { /* num lock */ bit1 = 5; bit2 = 5; } else { /* pause */ if (!(scan & 0x80)) /* "make" code */ bit2 = 3; } break; case 0x3a: /* caps lock */ bit1 = 6; bit2 = 6; break; case 0x52: /* insert */ bit1 = 7; bit2 = 7; *modifier = FALSE; /* insert is no modifier: thus pass to int16 */ break; } /* now that we know which bits to set, update them */ if (!(scan & 0x80)) /* "make" code (keypress) */ { if (bit2 != 255) { if (bit2 == 3) { data->KbdFlags2 |= 1 << bit2; /* set "Pause" flag */ TRACE("PAUSE key, sleeping !\n"); /* wait for keypress to unlock pause */ do { Sleep(55); } while (!(ReadConsoleInputA(GetStdHandle(STD_INPUT_HANDLE),&msg,1,&res) && (msg.EventType == KEY_EVENT))); data->KbdFlags2 &= ~(1 << bit2); /* release "Pause" flag */ } else data->KbdFlags2 |= 1 << bit2; } if (bit1 != 255) { if (bit1 < 4) /* key "pressed" flag */ data->KbdFlags1 |= 1 << bit1; else /* key "active" flag */ data->KbdFlags1 ^= 1 << bit1; } } else /* "break" / release */ { if (bit2 != 255) data->KbdFlags2 &= ~(1 << bit2); if (bit1 < 4) /* is it a key "pressed" bit ? */ data->KbdFlags1 &= ~(1 << bit1); } TRACE("ext. %d, bits %d/%d, KbdFlags %02x/%02x\n", extended, bit1, bit2, data->KbdFlags1, data->KbdFlags2); } /********************************************************************** * DOSVM_Int09Handler * * Handler for int 09h. * See http://www.execpc.com/~geezer/osd/kbd/ for a very good description * of keyboard mapping modes. */ void WINAPI DOSVM_Int09Handler( CONTEXT *context ) { BIOSDATA *data = DOSVM_BiosData(); BYTE ascii, scan = DOSVM_Int09ReadScan(&ascii); BYTE realscan = scan & 0x7f; /* remove 0x80 make/break flag */ BOOL modifier = FALSE; static BOOL extended = FALSE; /* indicates start of extended key sequence */ BYTE ch[2]; int cnt, c2; TRACE("scan=%02x, ascii=%02x[%c]\n",scan, ascii, ascii ? ascii : ' '); if (scan == 0xe0) /* extended keycode */ extended = TRUE; /* check for keys concerning keyboard status flags */ if ((realscan == 0x52 /* insert */) || (realscan == 0x3a /* caps lock */) || (realscan == 0x45 /* num lock (extended) or pause/break */) || (realscan == 0x46 /* scroll lock */) || (realscan == 0x2a /* l shift */) || (realscan == 0x36 /* r shift */) || (realscan == 0x37 /* SysRq */) || (realscan == 0x38 /* l/r menu/alt, SysRq */) || (realscan == 0x1d /* l/r control */)) DOSVM_Int09UpdateKbdStatusFlags(scan, extended, data, &modifier); if (scan != 0xe0) extended = FALSE; /* reset extended flag now */ /* only interested in "make" (press) codes, not "break" (release), * and also not in "modifier key only" (w/o ascii) notifications */ if (!(scan & 0x80) && !(modifier && !ascii)) { if (ascii) { /* we already have an ASCII code, no translation necessary */ if (data->KbdFlags1 & 8) /* Alt key ? */ ch[0] = 0; /* ASCII code needs to be 0 if Alt also pressed */ else ch[0] = ascii; /* FIXME: need to handle things such as Shift-F1 etc. */ cnt = 1; } else { /* translate */ UINT vkey = MapVirtualKeyA(scan&0x7f, 1); BYTE keystate[256]; GetKeyboardState(keystate); cnt = ToAscii(vkey, scan, keystate, (LPWORD)ch, 0); } if (cnt>0) { for (c2=0; c2 #include #include "vga.h" #include "wine/debug.h" #include "dosexe.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /* * Display combination code for active display. * * Values (hex): * 00 - no display * 01 - monochrome adapter w/ monochrome display * 02 - CGA w/ color display * 03 - reserved * 04 - EGA w/ color display * 05 - EGA w/ monochrome display * 06 - PGA w/ color display * 07 - VGA w/ monochrome analog display * 08 - VGA w/ color analog display * 09 - reserved * 0A - MCGA w/ digital color display * 0B - MCGA w/ monochrome analog display * 0C - MCGA w/ color analog display * FF - unknown display type */ #define INT10_DCC 0x08 #include "pshpack1.h" /* * Structure for DOS data that can be accessed directly from applications. * This structure must be correctly packed. */ typedef struct _INT10_HEAP { BYTE StaticModeSupport[7]; /* modes supported 1..7 */ BYTE StaticScanlineSupport; /* scan lines supported */ BYTE StaticNumberCharBlocks; /* total number of char blocks */ BYTE StaticActiveCharBlocks; /* max number of active char blocks */ WORD StaticMiscFlags; /* misc function support flags */ WORD StaticReserved1; /* reserved */ BYTE StaticSavePointerFlags; /* save pointer function flags */ BYTE StaticReserved2; /* reserved */ WORD VesaCurrentMode; WORD VesaModeList[64]; char VesaOEMName[32]; char VesaProductName[32]; char VesaProductRev[32]; char VesaVendorName[32]; WORD WineHeapSegment; } INT10_HEAP; /* * Structure for VBE Mode Info Block. See the VBE 3.0 standard for details. * This structure must be correctly packed. */ struct _ModeInfoBlock { WORD ModeAttributes; /* 0x00 */ BYTE WinAAttributes; /* 0x02 */ BYTE WinBAttributes; /* 0x03 */ WORD WinGranularity; /* 0x04 */ WORD WinSize; /* 0x06 */ WORD WinASegment; /* 0x08 */ WORD WinBSegment; /* 0x0A */ DWORD WinFuncPtr; /* 0x0C */ WORD BytesPerScanLine; /* 0x10 */ /* mandatory for VBE 1.2+ */ WORD XResolution; /* 0x12 */ WORD YResolution; /* 0x14 */ BYTE XCharSize; /* 0x16 */ BYTE YCharSize; /* 0x17 */ BYTE NumberOfPlanes; /* 0x18 */ BYTE BitsPerPixel; /* 0x19 */ BYTE NumberOfBanks; /* 0x1A */ BYTE MemoryModel; /* 0x1B */ BYTE BankSize; /* 0x1C */ BYTE NumberOfImagePages; /* 0x1D */ BYTE Reserved1; /* 0x1E */ BYTE RedMaskSize; /* 0x1F */ BYTE RedFieldPosition; /* 0x20 */ BYTE GreenMaskSize; /* 0x21 */ BYTE GreenFieldPosition; /* 0x22 */ BYTE BlueMaskSize; /* 0x23 */ BYTE BlueFieldPosition; /* 0x24 */ BYTE RsvdMaskSize; /* 0x25 */ BYTE RsvdFieldPosition; /* 0x26 */ BYTE DirectColorModeInfo; /* 0x27 */ /* mandatory for VBE 2.0+ */ DWORD PhysBasePtr; /* 0x28 */ DWORD Reserved2; /* 0x2C */ WORD Reserved3; /* 0x30 */ /* mandatory for VBE 3.0+ */ WORD LinBytesPerScanLine; /* 0x32 */ BYTE BnkNumberOfImagePages;/* 0x34 */ BYTE LinNumberOfImagePages;/* 0x35 */ BYTE LinRedMaskSize; /* 0x36 */ BYTE LinRedFieldPosition; /* 0x37 */ BYTE LinGreenMaskSize; /* 0x38 */ BYTE LinGreenFieldPosition;/* 0x39 */ BYTE LinBlueMaskSize; /* 0x3A */ BYTE LinBlueFieldPosition; /* 0x3B */ BYTE LinRsvdMaskSize; /* 0x3C */ BYTE LinRsvdFieldPosition; /* 0x3D */ DWORD MaxPixelClock; /* 0x3E */ BYTE Reserved4[190]; /* 0x42 */ }; #include "poppack.h" /* True if video mode is a vesa mode, false otherwise. * More correct would be to use something like (x > 0xff || x == 0x6a) * but as long as we have only the standard VGA and VESA modes this is ok too */ #define IS_VESA_MODE(x) ((x) >= 0x6a) /* Forward declarations. */ static INT10_HEAP *INT10_GetHeap(void); static void INT10_SetCursorPos(BIOSDATA*, unsigned, unsigned, unsigned); /********************************************************************** * INT10_FillControllerInformation * * Fill 256-byte (VBE1.x) or 512-byte buffer (VBE2.0+) with * capabilities of the video controller. */ static void INT10_FillControllerInformation( BYTE *buffer ) { INT10_HEAP *heap = INT10_GetHeap(); /* 00 - BYTE[4]: signature */ memmove( buffer, "VESA", 4 ); /* 04 - WORD: version number */ *(WORD*)(buffer + 4) = 0x0300; /* version 3.0 */ /* 06 - DWORD: pointer to OEM name */ *(SEGPTR*)(buffer + 6) = MAKESEGPTR( heap->WineHeapSegment, offsetof(INT10_HEAP, VesaOEMName) ); /* * 10 - DWORD: capabilities flags * Bits: * 0 - DAC can be switched into 8-bit mode * 1 - non-VGA controller * 2 - programmed DAC with blank bit * 3 - controller supports hardware stereoscopic signalling * 4 - =0 stereo signalling via external VESA stereo connector * =1 stereo signalling via VESA EVC connector * 5 - controller supports hardware mouse cursor * 6 - controller supports hardware clipping * 7 - controller supports transparent BitBLT * 8-31 - reserved (0) */ *(DWORD*)(buffer + 10) = 0; /* FIXME */ /* 14 - DWORD: pointer to list of supported VESA and OEM video modes */ *(SEGPTR*)(buffer + 14) = MAKESEGPTR( heap->WineHeapSegment, offsetof(INT10_HEAP, VesaModeList) ); /* 18 - WORD: total amount of video memory in 64K blocks */ *(WORD*)(buffer + 18) = 16; /* FIXME */ /* 20 - WORD: OEM software version (BCD, high byte = major) */ *(WORD*)(buffer + 20) = 0x0100; /* version 1.0 */ /* 22 - DWORD: pointer to vendor name */ *(SEGPTR*)(buffer + 22) = MAKESEGPTR( heap->WineHeapSegment, offsetof(INT10_HEAP, VesaVendorName) ); /* 26 - DWORD: pointer to product name */ *(SEGPTR*)(buffer + 26) = MAKESEGPTR( heap->WineHeapSegment, offsetof(INT10_HEAP, VesaProductName) ); /* 30 - DWORD: pointer to product revision string */ *(SEGPTR*)(buffer + 30) = MAKESEGPTR( heap->WineHeapSegment, offsetof(INT10_HEAP, VesaProductRev) ); /* 34 - WORD: VBE/AF version (if capabilities bit 3 set) */ *(WORD*)(buffer + 34) = 0; /* * 36 - DWORD: pointer to list of accelerated modes * (if capabilities bit 3 set) */ *(SEGPTR*)(buffer + 36) = 0; /* 40 - BYTE[216]: reserved for VBE implementation, set to zero */ memset( buffer + 40, 0, 216 ); /* * 256 - BYTE[256]: reserved for VBE3.0 implementation, * ignored in order to support older programs */ } extern int vga_fb_size; extern char *vga_fb_data; /********************************************************************** * INT10_FillModeInformation * * Fill 256-byte buffer with extended information about display mode. * * Returns FALSE if mode is unknown and TRUE is mode is known * even if it is not supported. */ static BOOL INT10_FillModeInformation( struct _ModeInfoBlock *mib, WORD mode ) { const VGA_MODE *ptr = VGA_GetModeInfo( mode ); if (!ptr) return FALSE; /* * 00 - WORD: mode attributes * Bits: * 0 - Mode supported by present hardware configuration. * 1 - Optional information available. Must be =1 for VBE v1.2+. * 2 - BIOS output supported. * Int10 functions 01, 02, 06, 07, 09, 0a and 0e are supported. * 3 - Set if color, clear if monochrome. * 4 - Set if graphics mode, clear if text mode. * 5 - Mode is not VGA-compatible if set. * VGA-compatible modes support standard VGA I/O ports. * 6 - Bank-switched (or windowed) mode is not supported if set. * 7 - Linear framebuffer mode supported. * 8 - Double scanning supported. * 9 - Interlaced operation supported. * 10 - Triple buffering supported. * 11 - Stereoscopic display supported. * 12 - Dual display start address supported. * 13-15 - Reserved. */ { WORD attr = 0x0082; /* set optional info available */ /* Enable color mode - if both Colors & Depth are 0, then assume monochrome*/ if (ptr->Colors || ptr->Depth) { attr |= 0x0008; } /* * FIXME: Attribute handling is incomplete. */ /* Mode supported? */ if (ptr->Supported) { attr |= 0x0001; /* set display mode supported */ } /* Graphical mode? */ if (ptr->ModeType != TEXT) { attr |= 0x0010; /* set graphics mode on (text mode off) */ } /* Not VGA-compatible? */ if (IS_VESA_MODE(mode)) attr |= 0x0020; /* disable VGA ports */ mib->ModeAttributes = attr; } /* * 02 - BYTE[2]: window attributes, window A and window B * Bits: * 0 - Window exists. * 1 - Window is readable. * 2 - Window is writable. * 3-7 - Reserved. */ mib->WinAAttributes = 0x07; /* window A exists, readable and writable */ mib->WinBAttributes = 0x00; /* window B not supported */ /* 04 - WORD: window granularity in KB */ mib->WinGranularity = 64; /* 06 - WORD: window size in KB */ mib->WinSize = 64; /* 08 - WORD[2]: start segments, window A and window B */ mib->WinASegment = 0xa000; /* window A segment */ mib->WinBSegment = 0x0000; /* window B not supported */ /* 12 - DWORD: window positioning function */ mib->WinFuncPtr = 0; /* not supported */ /* 16 - WORD: bytes per scan line */ /* FIXME: is this always correct? */ mib->BytesPerScanLine = ptr->Width * (ptr->Depth ? (ptr->Depth + 7) / 8 : 1); /* 18 - WORD: width in pixels (graphics) or characters (text) */ if (ptr->ModeType == TEXT) { mib->XResolution = ptr->TextCols; } else { mib->XResolution = ptr->Width; } /* 20 - WORD: height in pixels (graphics) or characters (text) */ if (ptr->ModeType == TEXT) { mib->YResolution = ptr->TextRows; } else { mib->YResolution = ptr->Height; } /* 22 - BYTE: width of character cell in pixels */ mib->XCharSize = ptr->CharWidth; /* 23 - BYTE: height of character cell in pixels */ mib->YCharSize = ptr->CharHeight; /* 24 - BYTE: number of memory planes */ mib->NumberOfPlanes = 1; /* FIXME */ /* 25 - BYTE: number of bits per pixel */ mib->BitsPerPixel = ptr->Depth; /* FIXME: text modes? reserved bits? */ /* 26 - BYTE: number of banks */ mib->NumberOfBanks = 1; /* FIXME */ /* * 27 - BYTE: memory model type * Values (hex): * 00 - Text mode * 01 - CGA graphics * 02 - Hercules graphics * 03 - Planar * 04 - Packed pixel * 05 - Non-chain 4, 256 color * 06 - Direct color * 07 - YUV * 08-0F - Reserved for VESA. * 10-FF - OEM memory models. */ if (ptr->ModeType == TEXT) mib->MemoryModel = 0; /* text mode */ else mib->MemoryModel = 3; /* FIXME */ /* 28 - BYTE: size of bank in KB */ mib->BankSize = 0; /* FIXME */ /* 29 - BYTE: number of image pages (less one) in video RAM */ mib->NumberOfImagePages = (ptr->ScreenPages)-1; /* 30 - BYTE: reserved (0x00 for VBE 1.0-2.0, 0x01 for VBE 3.0) */ mib->Reserved1 = 0x01; /* * 31,33,35 - BYTE: red/green/blue mask size * Size of red/green/blue color component in bits. * 32,34,36 - BYTE: red/green/blue field position * Bit position of the least significant bit of red/green/blue color * component. * Both should be only used when the memory model is direct color or YUV * but "Imperium Romanum" uses this field even when the memory model is * planar. So always fill this field when we have a depth bigger than 8, * otherwise set them to zero. */ switch (ptr->Depth) { case 24: mib->RedMaskSize = 8; mib->GreenMaskSize = 8; mib->BlueMaskSize = 8; mib->RsvdMaskSize = 0; mib->RedFieldPosition = 16; mib->GreenFieldPosition = 8; mib->BlueFieldPosition = 0; mib->RsvdFieldPosition = 0; break; case 16: mib->RedMaskSize = 5; mib->GreenMaskSize = 6; mib->BlueMaskSize = 5; mib->RsvdMaskSize = 0; mib->RedFieldPosition = 11; mib->GreenFieldPosition = 5; mib->BlueFieldPosition = 0; mib->RsvdFieldPosition = 0; break; case 15: mib->RedMaskSize = 5; mib->GreenMaskSize = 5; mib->BlueMaskSize = 5; mib->RsvdMaskSize = 1; mib->RedFieldPosition = 10; mib->GreenFieldPosition = 5; mib->BlueFieldPosition = 0; mib->RsvdFieldPosition = 15; break; default: mib->RedMaskSize = 0; mib->GreenMaskSize = 0; mib->BlueMaskSize = 0; mib->RsvdMaskSize = 0; mib->RedFieldPosition = 0; mib->GreenFieldPosition = 0; mib->BlueFieldPosition = 0; mib->RsvdFieldPosition = 0; break; } /* * 39 - BYTE: direct color mode info * Bits: * 0 - Set if color ramp is programmable. * 1 - Set if bytes in reserved field may be used by application. */ mib->DirectColorModeInfo = 0; /* not supported */ /* 40 - DWORD: physical address of linear video buffer */ if (!vga_fb_data) { vga_fb_data = VirtualAlloc(NULL, 4*1024*1024, MEM_COMMIT, PAGE_READWRITE); vga_fb_size = 4*1024*1024; // enough to fix largest resolution } mib->PhysBasePtr = vga_fb_data; /* 44 - DWORD: reserved, always zero */ mib->Reserved2 = 0; /* 48 - WORD: reserved, always zero */ mib->Reserved3 = 0; /* 50 - WORD: bytes per scan line in linear modes */ mib->LinBytesPerScanLine = mib->BytesPerScanLine; /* 52 - BYTE: number of images (less one) for banked video modes */ mib->BnkNumberOfImagePages = 0; /* FIXME */ /* 53 - BYTE: number of images (less one) for linear video modes */ mib->LinNumberOfImagePages = mib->BnkNumberOfImagePages; /* 54 - BYTE: red mask size (linear modes) */ mib->LinRedMaskSize = mib->RedMaskSize; /* 55 - BYTE: red field position (linear modes) */ mib->LinRedFieldPosition = mib->RedFieldPosition; /* 56 - BYTE: green mask size (linear modes) */ mib->LinGreenMaskSize = mib->GreenMaskSize; /* 57 - BYTE: green field size (linear modes) */ mib->LinGreenFieldPosition = mib->GreenFieldPosition; /* 58 - BYTE: blue mask size (linear modes) */ mib->LinBlueMaskSize = mib->BlueMaskSize; /* 59 - BYTE: blue field position (linear modes) */ mib->LinBlueFieldPosition = mib->BlueFieldPosition; /* 60 - BYTE: reserved mask size (linear modes) */ mib->LinRsvdMaskSize = mib->RsvdMaskSize; /* 61 - BYTE: reserved mask position (linear modes) */ mib->LinRsvdFieldPosition = mib->RsvdFieldPosition; /* 62 - DWORD: maximum pixel clock for graphics video mode, in Hz */ mib->MaxPixelClock = 0; /* FIXME */ /* 66 - BYTE[190]: reserved, set to zero */ memset( mib->Reserved4, 0, 190 ); return TRUE; } /********************************************************************** * INT10_FillStateInformation * * Fill 64-byte buffer with VGA state and functionality information. */ static void INT10_FillStateInformation( BYTE *buffer, BIOSDATA *data ) { INT10_HEAP *heap = INT10_GetHeap(); /* 00 - DWORD: address of static functionality table */ *(SEGPTR*)(buffer + 0) = MAKESEGPTR( heap->WineHeapSegment, offsetof(INT10_HEAP, StaticModeSupport) ); /* 04 - BYTE[30]: copy of BIOS data starting from 0x49 (VideoMode) */ memmove( buffer + 4, &data->VideoMode, 30 ); /* 34 - BYTE: number of rows - 1 */ buffer[34] = data->RowsOnScreenMinus1; /* 35 - WORD: bytes/character */ *(WORD*)(buffer + 35) = data->BytesPerChar; /* 37 - BYTE: display combination code of active display */ buffer[37] = INT10_DCC; /* 38 - BYTE: DCC of alternate display */ buffer[38] = 0; /* no secondary display */ /* 39 - WORD: number of colors supported in current mode (0000h = mono) */ *(WORD*)(buffer + 39) = 16; /* FIXME */ /* 41 - BYTE: number of pages supported in current mode */ buffer[41] = 1; /* FIXME */ /* * 42 - BYTE: number of scan lines active * Values (hex): * 00 = 200 * 01 = 350 * 02 = 400 * 03 = 480 */ buffer[42] = 3; /* FIXME */ /* 43 - BYTE: primary character block */ buffer[43] = 0; /* FIXME */ /* 44 - BYTE: secondary character block */ buffer[44] = 0; /* FIXME */ /* * 45 - BYTE: miscellaneous flags * Bits: * 0 - all modes on all displays on * 1 - gray summing on * 2 - monochrome display attached * 3 - default palette loading disabled * 4 - cursor emulation enabled * 5 - 0 = intensity; 1 = blinking * 6 - flat-panel display is active * 7 - unused (0) */ /* FIXME: Correct value? */ buffer[45] = (data->VGASettings & 0x0f) | ((data->ModeOptions & 1) << 4); /* cursor emulation */ /* * 46 - BYTE: non-VGA mode support * Bits: * 0 - BIOS supports information return for adapter interface * 1 - adapter interface driver required * 2 - 16-bit VGA graphics present * 3 - =1 MFI attributes enabled * =0 VGA attributes enabled * 4 - 132-column mode supported * 5-7 - reserved */ buffer[46] = 0; /* FIXME: correct value? */ /* 47 - BYTE[2]: reserved, set to zero */ memset( buffer + 47, 0, 2 ); /* * 49 - BYTE: video memory available * Values (hex): * 00 - 64K * 01 - 128K * 02 - 192K * 03 - 256K */ buffer[49] = (data->ModeOptions & 0x60) >> 5; /* FIXME */ /* * 50 - BYTE: save pointer state flags * Bits: * 0 - 512 character set active * 1 - dynamic save area present * 2 - alpha font override active * 3 - graphics font override active * 4 - palette override active * 5 - DCC override active * 6-7 - unused (0) */ buffer[50] = heap->StaticSavePointerFlags; /* * 51 - BYTE: display information and status * Bits: * 0 - flat-panel display attached * 1 - flat-panel display active * 2 - color display * 3-6 - reserved * 7 - 640x480 flat-panel can be used simultaneously with CRT */ buffer[51] = 4; /* FIXME: correct value? */ /* 52 - BYTE[12]: reserved, set to zero */ memset( buffer + 52, 0, 12 ); } /********************************************************************** * INT10_GetHeap */ static INT10_HEAP *INT10_GetHeap( void ) { static INT10_HEAP *heap_pointer = 0; if (!heap_pointer) { WORD segment; int i; heap_pointer = DOSVM_AllocDataUMB( sizeof(INT10_HEAP), &segment, 0 ); for (i = 0; i < 7; i++) heap_pointer->StaticModeSupport[i] = 0xff; /* FIXME */ heap_pointer->StaticScanlineSupport = 7; /* FIXME */ heap_pointer->StaticNumberCharBlocks = 0; /* FIXME */ heap_pointer->StaticActiveCharBlocks = 0; /* FIXME */ heap_pointer->StaticMiscFlags = 0x8ff; /* FIXME */ heap_pointer->StaticReserved1 = 0; heap_pointer->StaticSavePointerFlags = 0x3f; /* FIXME */ heap_pointer->StaticReserved2 = 0; for (i=0; TRUE; i++) { heap_pointer->VesaModeList[i] = VGA_modelist[i].Mode; if (VGA_modelist[i].Mode == 0xffff) break; } strcpy( heap_pointer->VesaOEMName, "WINE SVGA BOARD" ); strcpy( heap_pointer->VesaVendorName, "WINE" ); strcpy( heap_pointer->VesaProductName, "WINE SVGA" ); strcpy( heap_pointer->VesaProductRev, "2008" ); heap_pointer->VesaCurrentMode = 0; /* Initialized later. */ heap_pointer->WineHeapSegment = segment; } return heap_pointer; } /********************************************************************** * INT10_SetVideoMode * * Change current video mode to any VGA or VESA mode. * Returns TRUE if mode is supported. * * Mode bitfields: * 0-6: .. Mode number (combined with bit 8). * 7: =0 Clear screen. * =1 Preserve display memory on mode change (VGA modes). * 8: =0 VGA mode. * =1 VESA mode. * 9: .. Reserved, must be zero. * 10: .. Reserved, must be zero. * 11: =0 Use default refresh rate. * =1 Use user specified refresh rate. * 12: .. Reserved, must be zero. * 13: .. Reserved, must be zero. * 14: =0 Use windowed frame buffer model. * =1 Use linear frame buffer model. * 15: =0 Clear screen. * =1 Preserve display memory on mode change (VESA modes). */ static BOOL INT10_SetVideoMode( BIOSDATA *data, WORD mode ) { const VGA_MODE *ptr = VGA_GetModeInfo( mode ); INT10_HEAP *heap = INT10_GetHeap(); BOOL clearScreen = TRUE; if (!ptr) return FALSE; /* * Check for VGA and VESA preserve video memory flag. */ if ((mode & 0x0080) || (mode & 0x8000)) clearScreen = FALSE; /* * Note that we do not mask out flags here on purpose. */ heap->VesaCurrentMode = mode; if (mode <= 0xff) data->VideoMode = mode; else data->VideoMode = 0; if (ptr->ModeType == TEXT) { /* Text mode. */ TRACE( "Setting %s %dx%d text mode (screen %s)\n", IS_VESA_MODE(mode) ? "VESA" : "VGA", ptr->TextCols, ptr->TextRows, clearScreen ? "cleared" : "preserved" ); /* * FIXME: We should check here if alpha mode could be set. */ VGA_SetAlphaMode( ptr->TextCols, ptr->TextRows ); data->VideoColumns = ptr->TextCols; data->RowsOnScreenMinus1 = ptr->TextRows - 1; if (clearScreen) { VGA_ClearText( 0, 0, ptr->TextCols-1, ptr->TextRows-1, 0x07 ); INT10_SetCursorPos( data, 0, 0, 0 ); VGA_SetCursorPos( 0, 0 ); } } else { /* Graphics mode. */ TRACE( "Setting %s %dx%dx%d graphics mode (screen %s)\n", IS_VESA_MODE(mode) ? "VESA" : "VGA", ptr->Width, ptr->Height, ptr->Depth, clearScreen ? "cleared" : "preserved" ); if (!VGA_SetMode(mode)) return FALSE; } return TRUE; } /********************************************************************** * INT10_GetCursorPos */ static void INT10_GetCursorPos(BIOSDATA*data,unsigned page,unsigned*X,unsigned*Y) { *X = data->VideoCursorPos[page*2]; /* column */ *Y = data->VideoCursorPos[page*2+1]; /* row */ } /********************************************************************** * INT10_SetCursorPos */ static void INT10_SetCursorPos(BIOSDATA*data,unsigned page,unsigned X,unsigned Y) { data->VideoCursorPos[page*2] = X; data->VideoCursorPos[page*2+1] = Y; } /********************************************************************** * INT10_InitializeVideoMode * * The first time this function is called VGA emulation is set to the * default text mode. */ static void INT10_InitializeVideoMode( BIOSDATA *data ) { static BOOL already_initialized = FALSE; unsigned width; unsigned height; if(already_initialized) return; already_initialized = TRUE; VGA_InitAlphaMode(&width, &height); /* * FIXME: Add more mappings between initial size and * text modes. */ if (width >= 80 && height >= 25) INT10_SetVideoMode( data, 0x03 ); else INT10_SetVideoMode( data, 0x01 ); } /********************************************************************** * INT10_HandleVESA * * Handler for VESA functions (int10 function 0x4f). */ static void INT10_HandleVESA( CONTEXT *context ) { BIOSDATA *data = DOSVM_BiosData(); switch(AL_reg(context)) { case 0x00: /* RETURN CONTROLLER INFORMATION */ TRACE( "VESA RETURN CONTROLLER INFORMATION\n" ); { BYTE *ptr = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi); INT10_FillControllerInformation( ptr ); SET_AL( context, 0x4f ); SET_AH( context, 0x00 ); /* 0x00 = successful 0x01 = failed */ } break; case 0x01: /* RETURN MODE INFORMATION */ TRACE( "VESA RETURN MODE INFORMATION %04x\n", CX_reg(context) ); { struct _ModeInfoBlock *ptr = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi); SET_AL( context, 0x4f ); if (INT10_FillModeInformation( ptr, CX_reg(context) )) SET_AH( context, 0x00 ); /* status: success */ else SET_AH( context, 0x01 ); /* status: failed */ } break; case 0x02: /* SET SuperVGA VIDEO MODE */ TRACE( "Set VESA video mode %04x\n", BX_reg(context) ); SET_AL( context, 0x4f ); /* function supported */ if (INT10_SetVideoMode( data, BX_reg(context) )) SET_AH( context, 0x00 ); /* success */ else SET_AH( context, 0x01 ); /* failed */ break; case 0x03: /* VESA SuperVGA BIOS - GET CURRENT VIDEO MODE */ SET_AL( context, 0x4f ); SET_AH( context, 0x00 ); SET_BX( context, INT10_GetHeap()->VesaCurrentMode ); break; case 0x04: /* VESA SuperVGA BIOS - SAVE/RESTORE SuperVGA VIDEO STATE */ ERR("VESA SAVE/RESTORE Video State - Not Implemented\n"); /* AL_reg(context) = 0x4f; = supported so not set since not implemented */ /* maybe we should do this instead ? */ /* AH_reg(context = 0x01; not implemented so just fail */ break; case 0x05: /* VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL */ /* * This subfunction supports only Window A (BL_reg == 0) and * it assumes that window granularity is 64k. */ switch(BH_reg(context)) { case 0x00: /* select video memory window */ SET_AL( context, 0x4f ); /* function supported */ if(BL_reg(context) == 0) { VGA_SetWindowStart(DX_reg(context) * 64 * 1024); SET_AH( context, 0x00 ); /* status: successful */ } else SET_AH( context, 0x01 ); /* status: failed */ break; case 0x01: /* get video memory window */ SET_AL( context, 0x4f ); /* function supported */ if(BL_reg(context) == 0) { SET_DX( context, VGA_GetWindowStart() / 64 / 1024 ); SET_AH( context, 0x00 ); /* status: successful */ } else SET_AH( context, 0x01 ); /* status: failed */ break; default: INT_BARF( context, 0x10 ); } break; case 0x06: /* VESA GET/SET LOGICAL SCAN LINE LENGTH */ ERR("VESA GET/SET LOGICAL SCAN LINE LENGTH - Not Implemented\n"); /* AL_reg(context) = 0x4f; = supported so not set since not implemented */ /* maybe we should do this instead ? */ /* AH_reg(context = 0x001; not implemented so just fail */ break; case 0x07: /* GET/SET DISPLAY START */ ERR("VESA GET/SET DISPLAY START - Not Implemented\n"); /* AL_reg(context) = 0x4f; = supported so not set since not implemented */ /* maybe we should do this instead ? */ /* AH_reg(context = 0x001; not implemented so just fail */ break; case 0x08: /* GET/SET DAC PALETTE CONTROL */ ERR("VESA GET/SET DAC PALETTE CONTROL- Not Implemented\n"); /* AL_reg(context) = 0x4f; = supported so not set since not implemented */ /* maybe we should do this instead ? */ /* AH_reg(context = 0x001; not implemented so just fail */ break; case 0x09: /* SET PALETTE ENTRIES */ FIXME("VESA Set palette entries - not implemented\n"); break; case 0x0a: /* GET PROTECTED-MODE CODE */ FIXME("VESA Get protected-mode code - not implemented\n"); break; case 0x10: /* Display Power Management Extensions */ FIXME("VESA Display Power Management Extensions - not implemented\n"); break; case 0xef: /* get video mode for hercules-compatibles */ /* There's no reason to really support this */ /* is there?....................(A.C.) */ TRACE("Just report the video not hercules compatible\n"); SET_DX( context, 0xffff ); break; case 0xff: /* Turn VESA ON/OFF */ /* I don't know what to do */ break; default: FIXME("VESA Function (0x%x) - Not Supported\n", AH_reg(context)); break; } } /********************************************************************** * DOSVM_Int10Handler * * Handler for int 10h (video). * * NOTE: * Most INT 10 functions for text-mode, CGA, EGA, and VGA cards * are present in this list. (SVGA and XGA are not) That is not * to say that all these functions should be supported, but if * anyone is brain-damaged enough to want to emulate one of these * beasts then this should get you started. * * NOTE: * Several common graphical extensions used by Microsoft hook * off of here. I have *not* added them to this list (yet). They * include: * * MSHERC.COM - More functionality for Hercules cards. * EGA.SYS (also MOUSE.COM) - More for EGA cards. * * Yes, MS also added this support into their mouse driver. Don't * ask me, I don't work for them. * * Joseph Pranevich - 9/98 * * Jess Haas 2/99 * Added support for Vesa. It is not complete but is a start. * NOTE: Im not sure if I did all this right or if any of it works. * Currently I don't have a program that uses Vesa that actually gets far * enough without crashing to do vesa stuff. * * Added additional vga graphic support - 3/99 */ void WINAPI DOSVM_Int10Handler( CONTEXT *context ) { BIOSDATA *data = DOSVM_BiosData(); INT10_InitializeVideoMode( data ); switch(AH_reg(context)) { case 0x00: /* SET VIDEO MODE */ TRACE( "Set VGA video mode %02x\n", AL_reg(context) ); if (!INT10_SetVideoMode( data, AL_reg(context) )) FIXME( "Unsupported VGA video mode requested: %#x\n", AL_reg(context) ); break; case 0x01: /* SET CURSOR SHAPE */ TRACE("Set Cursor Shape start %d end %d options %d\n", CH_reg(context) & 0x1f, CL_reg(context) & 0x1f, CH_reg(context) & 0xe0); data->VideoCursorType = CX_reg(context); /* direct copy */ VGA_SetCursorShape(CH_reg(context), CL_reg(context)); break; case 0x02: /* SET CURSOR POSITION */ /* BH = Page Number */ /* Not supported */ /* DH = Row */ /* 0 is left */ /* DL = Column */ /* 0 is top */ INT10_SetCursorPos(data,BH_reg(context),DL_reg(context),DH_reg(context)); if (BH_reg(context)) { FIXME("Set Cursor Position: Cannot set to page %d\n", BH_reg(context)); } else { VGA_SetCursorPos(DL_reg(context), DH_reg(context)); TRACE("Set Cursor Position: %d/%d\n", DL_reg(context), DH_reg(context)); } break; case 0x03: /* GET CURSOR POSITION AND SIZE */ { unsigned row, col; TRACE("Get cursor position and size (page %d)\n", BH_reg(context)); SET_CX( context, data->VideoCursorType ); INT10_GetCursorPos(data,BH_reg(context),&col,&row); SET_DH( context, row ); SET_DL( context, col ); TRACE("Cursor Position: %d/%d\n", DL_reg(context), DH_reg(context)); } break; case 0x04: /* READ LIGHT PEN POSITION */ FIXME("Read Light Pen Position - Not Supported\n"); SET_AH( context, 0x00 ); /* Not down */ break; case 0x05: /* SELECT ACTIVE DISPLAY PAGE */ FIXME("Select Active Display Page (%d) - Not Supported\n", AL_reg(context)); data->VideoCurPage = AL_reg(context); break; case 0x06: /* SCROLL UP WINDOW */ /* AL = Lines to scroll */ /* BH = Attribute */ /* CH,CL = row, col upper-left */ /* DH,DL = row, col lower-right */ TRACE("Scroll Up Window %d\n", AL_reg(context)); if (AL_reg(context) == 0) VGA_ClearText( CH_reg(context), CL_reg(context), DH_reg(context), DL_reg(context), BH_reg(context) ); else VGA_ScrollUpText( CH_reg(context), CL_reg(context), DH_reg(context), DL_reg(context), AL_reg(context), BH_reg(context) ); break; case 0x07: /* SCROLL DOWN WINDOW */ /* AL = Lines to scroll */ /* BH = Attribute */ /* CH,CL = row, col upper-left */ /* DH,DL = row, col lower-right */ TRACE("Scroll Down Window %d\n", AL_reg(context)); if (AL_reg(context) == 0) VGA_ClearText( CH_reg(context), CL_reg(context), DH_reg(context), DL_reg(context), BH_reg(context) ); else VGA_ScrollDownText( CH_reg(context), CL_reg(context), DH_reg(context), DL_reg(context), AL_reg(context), BH_reg(context) ); break; case 0x08: /* READ CHARACTER AND ATTRIBUTE AT CURSOR POSITION */ { if (BH_reg(context)) /* Write to different page */ { FIXME("Read character and attribute at cursor position -" " Can't read from non-0 page\n"); SET_AL( context, ' ' ); /* That page is blank */ SET_AH( context, 7 ); } else { BYTE ascii, attr; TRACE("Read Character and Attribute at Cursor Position\n"); VGA_GetCharacterAtCursor(&ascii, &attr); SET_AL( context, ascii ); SET_AH( context, attr ); } } break; case 0x09: /* WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION */ case 0x0a: /* WRITE CHARACTER ONLY AT CURSOR POSITION */ /* AL = Character to display. */ /* BH = Page Number */ /* We can't write to non-0 pages, yet. */ /* BL = Attribute / Color */ /* CX = Times to Write Char */ /* Note here that the cursor is not advanced. */ { unsigned row, col; INT10_GetCursorPos(data,BH_reg(context),&col,&row); VGA_WriteChars(col, row, AL_reg(context), (AH_reg(context) == 0x09) ? BL_reg(context) : -1, CX_reg(context)); if (CX_reg(context) > 1) TRACE("Write Character%s at Cursor Position (Rep. %d): %c\n", (AH_reg(context) == 0x09) ? " and Attribute" : "", CX_reg(context), AL_reg(context)); else TRACE("Write Character%s at Cursor Position: %c\n", (AH_reg(context) == 0x09) ? " and Attribute" : "", AL_reg(context)); } break; case 0x0b: switch (BH_reg(context)) { case 0x00: /* SET BACKGROUND/BORDER COLOR */ /* In text modes, this sets only the border... */ /* According to the interrupt list and one of my books. */ /* Funny though that Beyond Zork seems to indicate that it also sets up the default background attributes for clears and scrolls... */ /* Bear in mind here that we do not want to change, apparently, the foreground or attribute of the background with this call, so we should check first to see what the foreground already is... FIXME */ /* For CGA modes, background color change is the same as writing to I/O address 0x3d9 bit 4 */ if(data->VideoMode >= 4 && data->VideoMode <= 6) { VGA_SetBright((BL_reg(context) & 0x10) != 0); VGA_UpdatePalette(); } else FIXME("Set Background/Border Color: %d/%d\n", BH_reg(context), BL_reg(context)); break; case 0x01: /* SET PALETTE */ /* For CGA modes, palette color change is the same as writing to I/O address 0x3d9 bit 5 */ if(data->VideoMode >= 4 && data->VideoMode <= 6) { VGA_SetPaletteIndex(BL_reg(context) & 1); VGA_UpdatePalette(); } else FIXME("Set Palette - Not Supported: %02X\n", BL_reg(context)); break; default: FIXME("INT 10 AH = 0x0b BH = 0x%x - Unknown\n", BH_reg(context)); break; } break; case 0x0c: /* WRITE GRAPHICS PIXEL */ /* Only supported in CGA mode for now */ if(data->VideoMode >= 4 && data->VideoMode <= 6) { VGA_WritePixel(AL_reg(context), BH_reg(context), CX_reg(context), DX_reg(context)); } else FIXME("Write pixel not implemented for current mode\n"); break; case 0x0d: /* READ GRAPHICS PIXEL */ /* Not in graphics mode, can ignore w/o error */ FIXME("Read Graphics Pixel - Not Supported\n"); break; case 0x0e: /* TELETYPE OUTPUT */ TRACE("Teletype Output\n"); DOSVM_PutChar(AL_reg(context)); break; case 0x0f: /* GET CURRENT VIDEO MODE */ TRACE("Get current video mode: -> mode %d, columns %d\n", data->VideoMode, data->VideoColumns); /* Note: This should not be a constant value. */ SET_AL( context, data->VideoMode ); SET_AH( context, data->VideoColumns ); SET_BH( context, 0 ); /* Display page 0 */ break; case 0x10: switch (AL_reg(context)) { case 0x00: /* SET SINGLE PALETTE REGISTER - A.C. */ TRACE("Set Single Palette Register - Reg 0x0%x Value 0x0%x\n", BL_reg(context),BH_reg(context)); /* BH is the value BL is the register */ VGA_SetColor16((int)BL_reg(context),(int)BH_reg(context)); break; case 0x01: /* SET BORDER (OVERSCAN) */ /* Text terminals have no overscan */ /* I'm setting it anyway. - A.C. */ TRACE("Set Border (Overscan) - Ignored but set.\n"); VGA_SetColor16(16,(int)BH_reg(context)); break; case 0x02: /* SET ALL PALETTE REGISTERS - A.C.*/ TRACE("Set all palette registers\n"); /* ES:DX points to a 17 byte table of colors */ /* No return data listed */ /* I'll have to update my table and the default palette */ VGA_Set16Palette(CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edx)); break; case 0x03: /* TOGGLE INTENSITY/BLINKING BIT */ FIXME("Toggle Intensity/Blinking Bit - Not Supported\n"); break; case 0x07: /* GET INDIVIDUAL PALETTE REGISTER - A.C.*/ TRACE("Get Individual Palette Register 0x0%x\n",BL_reg(context)); /* BL is register to read [ 0-15 ] BH is return value */ SET_BH( context, VGA_GetColor16((int)BL_reg(context)) ); break; case 0x08: /* READ OVERSCAN (BORDER COLOR) REGISTER - A.C. */ TRACE("Read Overscan (Border Color) Register\n"); SET_BH( context, VGA_GetColor16(16) ); break; case 0x09: /* READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER - A.C.*/ TRACE("Read All Palette Registers and Overscan Register\n"); /* ES:DX points to a 17 byte table where the results */ /* of this call should be stored. */ VGA_Get16Palette(CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edx)); break; case 0x10: /* SET INDIVIDUAL DAC REGISTER */ { PALETTEENTRY paldat; TRACE("Set Individual DAC register\n"); paldat.peRed = DH_reg(context); paldat.peGreen = CH_reg(context); paldat.peBlue = CL_reg(context); paldat.peFlags = 0; VGA_SetPalette(&paldat,BX_reg(context)&0xFF,1); } break; case 0x12: /* SET BLOCK OF DAC REGISTERS */ { int i; PALETTEENTRY paldat; BYTE *pt; TRACE("Set Block of DAC registers\n"); pt = CTX_SEG_OFF_TO_LIN(context,context->SegEs,context->Edx); for (i=0;iModeOptions >> 5 ); /* EGA memory size */ SET_CX( context, data->FeatureBitsSwitches ); break; case 0x20: /* ALTERNATE PRTSC */ FIXME("Install Alternate Print Screen - Not Supported\n"); break; case 0x30: /* SELECT VERTICAL RESOLUTION */ FIXME("Select vertical resolution - not supported\n"); break; case 0x31: /* ENABLE/DISABLE DEFAULT PALETTE LOADING */ FIXME("Default palette loading - not supported\n"); data->VGASettings = (data->VGASettings & 0xf7) | ((AL_reg(context) == 1) << 3); break; case 0x32: /* ENABLE/DISABLE VIDEO ADDRESSING */ FIXME("Video Addressing - Not Supported\n"); break; case 0x33: /* ENABLE/DISABLE GRAY SCALE SUMMING */ FIXME("Gray Scale Summing - Not Supported\n"); break; case 0x34: /* ENABLE/DISABLE CURSOR EMULATION */ TRACE("Set cursor emulation to %d\n", AL_reg(context)); data->ModeOptions = (data->ModeOptions & 0xfe)|(AL_reg(context) == 1); break; case 0x36: /* VIDEO ADDRESS CONTROL */ FIXME("Video Address Control - Not Supported\n"); break; default: FIXME("INT 10 AH = 0x11 AL = 0x%x - Unknown\n", AL_reg(context)); break; } break; case 0x13: /* WRITE STRING */ /* This one does not imply that string be at cursor. */ FIXME("Write String - Not Supported\n"); break; case 0x1a: switch (AL_reg(context)) { case 0x00: /* GET DISPLAY COMBINATION CODE */ TRACE("Get Display Combination Code\n"); SET_AL( context, 0x1a ); /* Function supported */ SET_BL( context, INT10_DCC ); /* Active display */ SET_BH( context, 0x00 ); /* No alternate display */ break; case 0x01: /* SET DISPLAY COMBINATION CODE */ FIXME("Set Display Combination Code - Not Supported\n"); break; default: FIXME("INT 10 AH = 0x1a AL = 0x%x - Unknown\n", AL_reg(context)); break; } break; case 0x1b: /* FUNCTIONALITY/STATE INFORMATION */ TRACE("Get functionality/state information\n"); if (BX_reg(context) == 0x0000) { BYTE *ptr = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi); SET_AL( context, 0x1b ); /* Function is supported */ INT10_FillStateInformation( ptr, data ); } break; case 0x1c: /* SAVE/RESTORE VIDEO STATE */ FIXME("Save/Restore Video State - Not Supported\n"); break; case 0xef: /* get video mode for hercules-compatibles */ /* There's no reason to really support this */ /* is there?....................(A.C.) */ TRACE("Just report the video not hercules compatible\n"); SET_DX( context, 0xffff ); break; case 0x4f: /* VESA */ INT10_HandleVESA(context); break; case 0xfe: /* GET SHADOW BUFFER */ TRACE( "GET SHADOW BUFFER %x:%x - ignored\n", context->SegEs, DI_reg(context) ); break; default: FIXME("Unknown - 0x%x\n", AH_reg(context)); INT_BARF( context, 0x10 ); } } /********************************************************************** * DOSVM_PutChar * * Write single character to VGA console at the current * cursor position and updates the BIOS cursor position. */ void DOSVM_PutChar( BYTE ascii ) { BIOSDATA *data = DOSVM_BiosData(); unsigned xpos, ypos; TRACE("char: 0x%02x(%c)\n", ascii, ascii); INT10_InitializeVideoMode( data ); VGA_PutChar( ascii ); VGA_GetCursorPos( &xpos, &ypos ); INT10_SetCursorPos( data, 0, xpos, ypos ); } ================================================ FILE: krnl386/int13.c ================================================ /* * BIOS interrupt 13h handler * * Copyright 1997 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_SYS_IOCTL_H # include #endif #include #ifdef linux #ifdef HAVE_LINUX_COMPILER_H #include #endif # include #endif #include "dosexe.h" #include "wine/server.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /* * Status of last int13 operation. */ static BYTE INT13_last_status; /********************************************************************** * INT13_SetStatus * * Write status to AH register and set carry flag on error (AH != 0). * * Despite what Ralf Brown says, at least functions 0x06 and 0x07 * seem to set carry, too. */ static void INT13_SetStatus( CONTEXT *context, BYTE status ) { INT13_last_status = status; SET_AH( context, status ); if (status) SET_CFLAG( context ); else RESET_CFLAG( context ); } /********************************************************************** * INT13_ReadFloppyParams * * Read floppy disk parameters. */ static void INT13_ReadFloppyParams( CONTEXT *context ) { #ifdef linux static const BYTE floppy_params[2][13] = { { 0xaf, 0x02, 0x25, 0x02, 0x12, 0x1b, 0xff, 0x6c, 0xf6, 0x0f, 0x08 }, { 0xaf, 0x02, 0x25, 0x02, 0x12, 0x1b, 0xff, 0x6c, 0xf6, 0x0f, 0x08 } }; static const DWORD drive_type_info[7]={ 0x0000, /* none */ 0x2709, /* 360 K */ 0x4f0f, /* 1.2 M */ 0x4f09, /* 720 K */ 0x4f12, /* 1.44 M */ 0x4f24, /* 2.88 M */ 0x4f24 /* 2.88 M */ }; unsigned int i; unsigned int nr_of_drives = 0; BYTE drive_nr = DL_reg( context ); int floppy_fd; int r; struct floppy_drive_params floppy_parm; WCHAR root[] = {'A',':','\\',0}, drive_root[] = {'\\','\\','.','\\','A',':',0}; HANDLE h; TRACE("in [ EDX=%08x ]\n", context->Edx ); SET_AL( context, 0 ); SET_BX( context, 0 ); SET_CX( context, 0 ); SET_DH( context, 0 ); for (i = 0; i < MAX_DOS_DRIVES; i++, root[0]++) if (GetDriveTypeW(root) == DRIVE_REMOVABLE) nr_of_drives++; SET_DL( context, nr_of_drives ); if (drive_nr > 1) { /* invalid drive ? */ INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */ return; } drive_root[4] = 'A' + drive_nr; h = CreateFileW(drive_root, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (h == INVALID_HANDLE_VALUE || wine_server_handle_to_fd(h, FILE_READ_DATA, &floppy_fd, NULL)) { WARN("Can't determine floppy geometry !\n"); INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */ return; } r = ioctl(floppy_fd, FDGETDRVPRM, &floppy_parm); wine_server_release_fd( h, floppy_fd ); CloseHandle(h); if(r<0) { INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */ return; } SET_BL( context, floppy_parm.cmos ); /* * CH = low eight bits of max cyl * CL = max sec nr (bits 5-0), * hi two bits of max cyl (bits 7-6) * DH = max head nr */ if(BL_reg( context ) && BL_reg( context ) < 7) { SET_DH( context, 0x01 ); SET_CX( context, drive_type_info[BL_reg( context )] ); } context->Edi = (DWORD)floppy_params[drive_nr]; if(!context->Edi) { ERR("Get floppy params failed for drive %d\n", drive_nr); INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */ return; } TRACE("out [ EAX=%08x EBX=%08x ECX=%08x EDX=%08x EDI=%08x ]\n", context->Eax, context->Ebx, context->Ecx, context->Edx, context->Edi); INT13_SetStatus( context, 0x00 ); /* success */ /* FIXME: Word exits quietly if we return with no error. Why? */ FIXME("Returned ERROR!\n"); SET_CFLAG( context ); #else INT13_SetStatus( context, 0x01 ); /* invalid function */ #endif } /********************************************************************** * DOSVM_Int13Handler * * Handler for int 13h (disk I/O). */ void WINAPI DOSVM_Int13Handler( CONTEXT *context ) { TRACE( "AH=%02x\n", AH_reg( context ) ); switch( AH_reg( context ) ) { case 0x00: /* RESET DISK SYSTEM */ INT13_SetStatus( context, 0x00 ); /* success */ break; case 0x01: /* STATUS OF DISK SYSTEM */ INT13_SetStatus( context, INT13_last_status ); break; case 0x02: /* READ SECTORS INTO MEMORY */ SET_AL( context, 0 ); /* number of sectors transferred */ INT13_SetStatus( context, 0x00 ); /* success */ break; case 0x03: /* WRITE SECTORS FROM MEMORY */ SET_AL( context, 0 ); /* number of sectors transferred */ INT13_SetStatus( context, 0x00 ); /* success */ break; case 0x04: /* VERIFY DISK SECTOR(S) */ SET_AL( context, 0 ); /* number of sectors verified */ INT13_SetStatus( context, 0x00 ); /* success */ break; case 0x05: /* FORMAT TRACK */ case 0x06: /* FORMAT TRACK AND SET BAD SECTOR FLAGS */ case 0x07: /* FORMAT DRIVE STARTING AT GIVEN TRACK */ INT13_SetStatus( context, 0x0c ); /* unsupported track or invalid media */ break; case 0x08: /* GET DRIVE PARAMETERS */ if (DL_reg( context ) & 0x80) { /* hard disk ? */ INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */ } else { /* floppy disk */ INT13_ReadFloppyParams( context ); } break; case 0x09: /* INITIALIZE CONTROLLER WITH DRIVE PARAMETERS */ case 0x0a: /* FIXED DISK - READ LONG */ case 0x0b: /* FIXED DISK - WRITE LONG */ case 0x0c: /* SEEK TO CYLINDER */ case 0x0d: /* ALTERNATE RESET HARD DISK */ INT13_SetStatus( context, 0x00 ); /* success */ break; case 0x0e: /* READ SECTOR BUFFER */ case 0x0f: /* WRITE SECTOR BUFFER */ INT13_SetStatus( context, 0x01 ); /* invalid function */ break; case 0x10: /* CHECK IF DRIVE READY */ case 0x11: /* RECALIBRATE DRIVE */ INT13_SetStatus( context, 0x00 ); /* success */ break; case 0x12: /* CONTROLLER RAM DIAGNOSTIC */ case 0x13: /* DRIVE DIAGNOSTIC */ INT13_SetStatus( context, 0x01 ); /* invalid function */ break; case 0x14: /* CONTROLLER INTERNAL DIAGNOSTIC */ INT13_SetStatus( context, 0x00 ); /* success */ break; case 0x15: /* GET DISK TYPE */ if (DL_reg( context ) & 0x80) { /* hard disk ? */ INT13_SetStatus( context, 0x00 ); /* success */ /* type is fixed disk, overwrites status */ SET_AH( context, 0x03 ); } else { /* floppy disk */ INT13_SetStatus( context, 0x00 ); /* success */ /* type is floppy with change detection, overwrites status */ SET_AH( context, 0x02 ); } break; case 0x16: /* FLOPPY - CHANGE OF DISK STATUS */ INT13_SetStatus( context, 0x00 ); /* success */ break; case 0x17: /* SET DISK TYPE FOR FORMAT */ if (DL_reg( context ) < 4) INT13_SetStatus( context, 0x00 ); /* successful completion */ else INT13_SetStatus( context, 0x01 ); /* error */ break; case 0x18: /* SET MEDIA TYPE FOR FORMAT */ if (DL_reg( context ) < 4) INT13_SetStatus( context, 0x00 ); /* success */ else INT13_SetStatus( context, 0x01 ); /* error */ break; case 0x19: /* FIXED DISK - PARK HEADS */ INT13_SetStatus( context, 0x00 ); /* success */ break; default: INT_BARF( context, 0x13 ); INT13_SetStatus( context, 0x01 ); /* invalid function */ } } ================================================ FILE: krnl386/int15.c ================================================ /* * BIOS interrupt 15h handler * * Copyright 1997 Jan Willamowius * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "dosexe.h" #include "wine/debug.h" #include "wine/winbase16.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /********************************************************************** * DOSVM_Int15Handler * * Handler for int 15h */ void WINAPI DOSVM_Int15Handler( CONTEXT *context ) { switch(AH_reg(context)) { case 0x4f: /*catch keyboard*/ FIXME("INT15: intercept keyboard not handled yet\n"); break; case 0x83: /* start timer*/ switch(AL_reg(context)) { case 0x00: /* Start Timer*/ FIXME("INT15: Start Timer not handled yet\n"); break; case 0x01: /* stop timer*/ FIXME("INT15: Stop Timer not handled yet\n"); break; } break; case 0x84: /* read joystick information */ FIXME("Read joystick information not implemented\n"); /* FIXME: report status as if no game port exists */ switch(DX_reg(context)) { case 0x0: /* read joystick switches */ SET_AL( context, 0x0 ); /* all switches open */ break; case 0x1: /* read joystick position */ SET_AX( context, 0x0 ); SET_BX( context, 0x0 ); SET_CX( context, 0x0 ); SET_DX( context, 0x0 ); break; default: INT_BARF( context, 0x15 ); break; } RESET_CFLAG(context); break; case 0x85: /* sysreq - key used*/ FIXME("INT15: SysReq - Key not handled yet\n"); break; case 0x86: /* wait*/ FIXME("INT15: Wait not correctly handled yet\n"); if ( AL_reg( context ) != 0x00 ) ERR("Invalid Input to Int15 function 0x86h AL != 0x00\n"); break; case 0x87: /* move memory regions*/ FIXME("INT15: Move memory regions not implemented\n"); break; case 0x88: /* get size of memory above 1 M */ SET_AX( context, 64 ); /* FIXME: are 64K ok? */ RESET_CFLAG(context); break; case 0x89: /* Switch to protected mode*/ FIXME("INT15: switching to protected mode not supported\n"); break; case 0x90:/* OS hook - Device busy*/ FIXME("INT15: OS hook - device busy\n"); break; case 0x91: /* OS hook - Device post*/ FIXME("INT15: OS hook - device post\n"); break; case 0xc0: /* GET CONFIGURATION */ if (ISV86(context)) { /* real mode segment */ context->SegEs = 0xf000; } else { /* KERNEL.194: __F000H - protected mode selector */ FARPROC16 proc = GetProcAddress16( GetModuleHandle16("KERNEL"), (LPCSTR)(ULONG_PTR)194 ); context->SegEs = LOWORD(proc); } SET_BX( context, 0xe6f5 ); SET_AH( context, 0x0 ); RESET_CFLAG(context); break; case 0xc2: switch(AL_reg(context)) { case 0x00: /* Enable-Disable Pointing Device (mouse) */ /* BH = newstate, 00h = disabled 01h = enabled */ switch(BH_reg(context)) { case 0x00: FIXME("Disable Pointing Device - not implemented\n"); break; case 0x01: FIXME("Enable Pointing Device - not implemented\n"); break; default: INT_BARF( context, 0x15 ); break; } SET_AH( context, 0x00 ); /* successful */ break; case 0x02: /* Set Sampling Rate */ /* BH = sampling rate */ FIXME("Set Sampling Rate - not implemented\n"); SET_AH( context, 0x00 ); /* successful */ break; case 0x04: /* Get Pointing Device Type */ FIXME("Get Pointing Device Type - not implemented\n"); /* FIXME: BH = Device id, What is it supposed to be? */ SET_BH( context, 0x01 ); break; default: INT_BARF( context, 0x15 ); } break; case 0xc3: /* set carry flag, so BorlandRTM doesn't assume a Vectra/PS2*/ FIXME("INT15: 0xc3\n"); SET_AH( context , 0x86 ); break; case 0xc4: /* BIOS POS Program option select */ FIXME("INT15: option 0xc4 not handled!\n"); break; default: INT_BARF( context, 0x15 ); } } ================================================ FILE: krnl386/int16.c ================================================ /* * DOS interrupt 16h handler * * Copyright 1998 Joseph Pranevich * Copyright 1999 Ove Kåven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #ifdef HAVE_UNISTD_H # include #endif #include "dosexe.h" #include "wincon.h" #include "wine/debug.h" #include "windef.h" #include "wingdi.h" #include "winuser.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /********************************************************************** * DOSVM_Int16Handler * * Handler for int 16h (keyboard) * * NOTE: * * KEYB.COM (DOS >3.2) adds functions to this interrupt, they are * not currently listed here. */ void WINAPI DOSVM_Int16Handler( CONTEXT *context ) { BIOSDATA *data = NULL; BYTE ascii, scan; switch (AH_reg(context)) { case 0x00: /* Get Keystroke */ /* Returns: AH = Scan code AL = ASCII character */ TRACE("Get Keystroke\n"); DOSVM_Int16ReadChar(&ascii, &scan, context); SET_AL( context, ascii ); SET_AH( context, scan ); break; case 0x01: /* Check for Keystroke */ /* Returns: ZF set if no keystroke */ /* AH = Scan code */ /* AL = ASCII character */ TRACE("Check for Keystroke\n"); if (!DOSVM_Int16ReadChar(&ascii, &scan, NULL)) { SET_ZFLAG(context); } else { SET_AL( context, ascii ); SET_AH( context, scan ); RESET_ZFLAG(context); } /* don't miss the opportunity to break some tight timing loop in DOS * programs causing 100% CPU usage (by doing a Sleep here) */ Sleep(5); break; case 0x02: /* Get Shift Flags */ /* read value from BIOS data segment's keyboard status flags field */ data = DOSVM_BiosData(); SET_AL( context, data->KbdFlags1 ); TRACE("Get Shift Flags: returning 0x%02x\n", AL_reg(context)); break; case 0x03: /* Set Typematic Rate and Delay */ FIXME("Set Typematic Rate and Delay - Not Supported\n"); break; case 0x05:/*simulate Keystroke*/ FIXME("Simulating a keystroke is not supported yet\n"); break; case 0x09: /* Get Keyboard Functionality */ FIXME("Get Keyboard Functionality - Not Supported\n"); /* As a temporary measure, say that "nothing" is supported... */ SET_AL( context, 0 ); break; case 0x0a: /* Get Keyboard ID */ FIXME("Get Keyboard ID - Not Supported\n"); break; case 0x10: /* Get Enhanced Keystroke */ TRACE("Get Enhanced Keystroke - Partially supported\n"); /* Returns: AH = Scan code AL = ASCII character */ DOSVM_Int16ReadChar(&ascii, &scan, context); SET_AL( context, ascii ); SET_AH( context, scan ); break; case 0x11: /* Check for Enhanced Keystroke */ /* Returns: ZF set if no keystroke */ /* AH = Scan code */ /* AL = ASCII character */ TRACE("Check for Enhanced Keystroke - Partially supported\n"); if (!DOSVM_Int16ReadChar(&ascii, &scan, NULL)) { SET_ZFLAG(context); } else { SET_AL( context, ascii ); SET_AH( context, scan ); RESET_ZFLAG(context); } break; case 0x12: /* Get Extended Shift States */ FIXME("Get Extended Shift States - Not Supported\n"); break; default: FIXME("Unknown INT 16 function - 0x%x\n", AH_reg(context)); break; } } /********************************************************************** * DOSVM_Int16ReadChar * * Either peek into keyboard buffer or wait for next keystroke. * * If waitctx is NULL, return TRUE if buffer had keystrokes and * FALSE if buffer is empty. Returned keystroke will be left into buffer. * * If waitctx is non-NULL, wait until keystrokes are available. * Return value will always be TRUE and returned keystroke will be * removed from buffer. */ BOOL DOSVM_Int16ReadChar(BYTE *ascii, BYTE *scan, CONTEXT *waitctx) { BIOSDATA *data = DOSVM_BiosData(); WORD CurOfs = data->NextKbdCharPtr; /* check if there's data in buffer */ if (waitctx) { /* wait until input is available... */ while (CurOfs == data->FirstKbdCharPtr) DOSVM_Wait( waitctx ); } else { if (CurOfs == data->FirstKbdCharPtr) return FALSE; } /* read from keyboard queue */ TRACE( "(%p,%p,%p) -> %02x %02x\n", ascii, scan, waitctx, ((BYTE*)data)[CurOfs], ((BYTE*)data)[CurOfs+1] ); if (ascii) *ascii = ((BYTE*)data)[CurOfs]; if (scan) *scan = ((BYTE*)data)[CurOfs+1]; if (waitctx) { CurOfs += 2; if (CurOfs >= data->KbdBufferEnd) CurOfs = data->KbdBufferStart; data->NextKbdCharPtr = CurOfs; } return TRUE; } BOOL DOSVM_Int16AddChar(BYTE ascii,BYTE scan) { BIOSDATA *data = DOSVM_BiosData(); WORD CurOfs = data->FirstKbdCharPtr; WORD NextOfs = CurOfs + 2; TRACE("(%02x,%02x)\n",ascii,scan); if (NextOfs >= data->KbdBufferEnd) NextOfs = data->KbdBufferStart; /* check if buffer is full */ if (NextOfs == data->NextKbdCharPtr) return FALSE; /* okay, insert character in ring buffer */ ((BYTE*)data)[CurOfs] = ascii; ((BYTE*)data)[CurOfs+1] = scan; data->FirstKbdCharPtr = NextOfs; return TRUE; } ================================================ FILE: krnl386/int21.c ================================================ /* * DOS interrupt 21h handler * * Copyright 1993, 1994 Erik Bos * Copyright 1996 Alexandre Julliard * Copyright 1997 Andreas Mohr * Copyright 1998 Uwe Bonnes * Copyright 1998, 1999 Ove Kaaven * Copyright 2003 Thomas Mertes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #include "windef.h" #include "winbase.h" #include "winreg.h" #include "winternl.h" #include "wine/winbase16.h" #include "kernel16_private.h" #include "dosexe.h" #include "winerror.h" #include "winuser.h" #include "wine/unicode.h" #include "wine/server.h" #include "wine/debug.h" #include "wine/exception.h" BOOL WINAPI VerifyConsoleIoHandle(HANDLE); /* * Note: * - Most of the file related functions are wrong. NT's kernel32 * doesn't maintain a per drive current directory, while DOS does. * We should in fact keep track in here of those per drive * directories, and use this info while dealing with partial paths * (drive defined, but only relative paths). This could even be * created as an array of CDS (there should be an entry for that in * the LOL) */ /* * Forward declarations. */ static BOOL INT21_RenameFile( CONTEXT *context ); WINE_DEFAULT_DEBUG_CHANNEL(int21); #include "pshpack1.h" /* * Extended Drive Parameter Block. * This structure is compatible with standard DOS4+ DPB and * extended DOS7 DPB. */ typedef struct _INT21_DPB { BYTE drive; /* 00 drive number (0=A, ...) */ BYTE unit; /* 01 unit number within device driver */ WORD sector_bytes; /* 02 bytes per sector */ BYTE cluster_sectors; /* 04 highest sector number within a cluster */ BYTE shift; /* 05 shift count to convert clusters into sectors */ WORD num_reserved; /* 06 reserved sectors at beginning of drive */ BYTE num_FAT; /* 08 number of FATs */ WORD num_root_entries; /* 09 number of root directory entries */ WORD first_data_sector; /* 0b number of first sector containing user data */ WORD num_clusters1; /* 0d highest cluster number (number of data clusters + 1) */ WORD sectors_per_FAT; /* 0f number of sectors per FAT */ WORD first_dir_sector; /* 11 sector number of first directory sector */ SEGPTR driver_header; /* 13 address of device driver header */ BYTE media_ID; /* 17 media ID byte */ BYTE access_flag; /* 18 0x00 if disk accessed, 0xff if not */ SEGPTR next; /* 19 pointer to next DPB */ WORD search_cluster1; /* 1d cluster at which to start search for free space */ WORD free_clusters_lo; /* 1f number of free clusters on drive or 0xffff if unknown */ WORD free_clusters_hi; /* 21 hiword of clusters_free */ WORD mirroring_flags; /* 23 active FAT/mirroring flags */ WORD info_sector; /* 25 sector number of file system info sector or 0xffff for none */ WORD spare_boot_sector; /* 27 sector number of backup boot sector or 0xffff for none */ DWORD first_cluster_sector; /* 29 sector number of the first cluster */ DWORD num_clusters2; /* 2d maximum cluster number */ DWORD fat_clusters; /* 31 number of clusters occupied by FAT */ DWORD root_cluster; /* 35 cluster number of start of root directory */ DWORD search_cluster2; /* 39 cluster at which to start searching for free space */ } INT21_DPB; /* * Structure for DOS data that can be accessed directly from applications. * Real and protected mode pointers will be returned to this structure so * the structure must be correctly packed. */ typedef struct _INT21_HEAP { WORD uppercase_size; /* Size of the following table in bytes */ BYTE uppercase_table[128]; /* Uppercase equivalents of chars from 0x80 to 0xff. */ WORD lowercase_size; /* Size of the following table in bytes */ BYTE lowercase_table[256]; /* Lowercase equivalents of chars from 0x00 to 0xff. */ WORD collating_size; /* Size of the following table in bytes */ BYTE collating_table[256]; /* Values used to sort characters from 0x00 to 0xff. */ WORD filename_size; /* Size of the following filename data in bytes */ BYTE filename_reserved1; /* 0x01 for MS-DOS 3.30-6.00 */ BYTE filename_lowest; /* Lowest permissible character value for filename */ BYTE filename_highest; /* Highest permissible character value for filename */ BYTE filename_reserved2; /* 0x00 for MS-DOS 3.30-6.00 */ BYTE filename_exclude_first; /* First illegal character in permissible range */ BYTE filename_exclude_last; /* Last illegal character in permissible range */ BYTE filename_reserved3; /* 0x02 for MS-DOS 3.30-6.00 */ BYTE filename_illegal_size; /* Number of terminators in the following table */ BYTE filename_illegal_table[16]; /* Characters which terminate a filename */ WORD dbcs_size; /* Number of valid ranges in the following table */ BYTE dbcs_table[16]; /* Start/end bytes for N ranges and 00/00 as terminator */ BYTE misc_indos; /* Interrupt 21 nesting flag */ WORD misc_segment; /* Real mode segment for INT21_HEAP */ WORD misc_selector; /* Protected mode selector for INT21_HEAP */ INT21_DPB misc_dpb_list[MAX_DOS_DRIVES]; /* Drive parameter blocks for all drives */ } INT21_HEAP; struct FCB { BYTE drive_number; CHAR file_name[8]; CHAR file_extension[3]; WORD current_block_number; WORD logical_record_size; DWORD file_size; WORD date_of_last_write; WORD time_of_last_write; BYTE file_number; BYTE attributes; WORD starting_cluster; WORD sequence_number; BYTE file_attributes; BYTE unused; BYTE record_within_current_block; BYTE random_access_record_number[4]; }; struct XFCB { BYTE xfcb_signature; BYTE reserved[5]; BYTE xfcb_file_attribute; BYTE fcb[37]; }; /* DTA layout for FindFirst/FindNext */ typedef struct { BYTE drive; /* 00 drive letter */ char mask[11]; /* 01 search template */ BYTE search_attr; /* 0c search attributes */ WORD count; /* 0d entry count within directory */ WORD cluster; /* 0f cluster of parent directory */ WCHAR *fullPath; /* 11 full path (was: reserved) */ BYTE fileattr; /* 15 file attributes */ WORD filetime; /* 16 file time */ WORD filedate; /* 18 file date */ DWORD filesize; /* 1a file size */ char filename[13]; /* 1e file name + extension */ } FINDFILE_DTA; /* FCB layout for FindFirstFCB/FindNextFCB */ typedef struct { BYTE drive; /* 00 drive letter */ char filename[11]; /* 01 filename 8+3 format */ int count; /* 0c entry count (was: reserved) */ WCHAR *fullPath; /* 10 full path (was: reserved) */ } FINDFILE_FCB; /* DOS directory entry for FindFirstFCB/FindNextFCB */ typedef struct { char filename[11]; /* 00 filename 8+3 format */ BYTE fileattr; /* 0b file attributes */ BYTE reserved[10]; /* 0c reserved */ WORD filetime; /* 16 file time */ WORD filedate; /* 18 file date */ WORD cluster; /* 1a file first cluster */ DWORD filesize; /* 1c file size */ } DOS_DIRENTRY_LAYOUT; #include "poppack.h" /* dos file attributes */ #define FA_NORMAL 0x00 /* Normal file, no attributes */ #define FA_RDONLY 0x01 /* Read only attribute */ #define FA_HIDDEN 0x02 /* Hidden file */ #define FA_SYSTEM 0x04 /* System file */ #define FA_LABEL 0x08 /* Volume label */ #define FA_DIRECTORY 0x10 /* Directory */ #define FA_ARCHIVE 0x20 /* Archive */ #define FA_UNUSED 0x40 /* Unused */ /* Error codes */ #define ER_NoNetwork 0x49 /* Error classes */ #define EC_OutOfResource 0x01 #define EC_Temporary 0x02 #define EC_AccessDenied 0x03 #define EC_InternalError 0x04 #define EC_HardwareFailure 0x05 #define EC_SystemFailure 0x06 #define EC_ProgramError 0x07 #define EC_NotFound 0x08 #define EC_MediaError 0x0b #define EC_Exists 0x0c #define EC_Unknown 0x0d /* Suggested actions */ #define SA_Retry 0x01 #define SA_DelayedRetry 0x02 #define SA_Prompt 0x03 #define SA_Abort 0x04 #define SA_Ignore 0x06 #define SA_Ask4Retry 0x07 /* Error locus */ #define EL_Unknown 0x01 #define EL_Disk 0x02 #define EL_Network 0x03 #define EL_Serial 0x04 #define EL_Memory 0x05 /* BIOS Keyboard Scancodes */ #define KEY_LEFT 0x4B #define KEY_RIGHT 0x4D #define KEY_UP 0x48 #define KEY_DOWN 0x50 #define KEY_IC 0x52 /* insert char */ #define KEY_DC 0x53 /* delete char */ #define KEY_BACKSPACE 0x0E #define KEY_HOME 0x47 #define KEY_END 0x4F #define KEY_NPAGE 0x49 #define KEY_PPAGE 0x51 static int brk_flag; struct magic_device { WCHAR name[10]; HANDLE handle; LARGE_INTEGER index; void (*ioctl_handler)(CONTEXT *); }; static void INT21_IoctlScsiMgrHandler( CONTEXT * ); static void INT21_IoctlHPScanHandler( CONTEXT * ); BOOL16 WINAPI WIN32_GlobalUnlock16(HGLOBAL16 handle); static struct magic_device magic_devices[] = { { {'s','c','s','i','m','g','r','$',0}, NULL, { { 0, 0 } }, INT21_IoctlScsiMgrHandler }, { {'e','m','m','x','x','x','x','0',0}, NULL, { { 0, 0 } }, EMS_Ioctl_Handler }, { {'h','p','s','c','a','n',0}, NULL, { { 0, 0 } }, INT21_IoctlHPScanHandler }, }; /* Many calls translate a drive argument like this: drive number (00h = default, 01h = A:, etc) */ /****************************************************************** * INT21_DriveName * * Many calls translate a drive argument like this: * drive number (00h = default, 01h = A:, etc) */ static const char *INT21_DriveName(int drive) { if (drive > 0) { if (drive <= 26) return wine_dbg_sprintf("%c:", 'A' + drive - 1); else return wine_dbg_sprintf( "", drive); } return "default"; } /*********************************************************************** * INT21_GetCurrentDrive * * Return current drive using scheme (0=A:, 1=B:, 2=C:, ...) or * MAX_DOS_DRIVES on error. */ static BYTE INT21_GetCurrentDrive(void) { WCHAR current_directory[MAX_PATH]; if (!GetCurrentDirectoryW( MAX_PATH, current_directory ) || current_directory[1] != ':') { TRACE( "Failed to get current drive.\n" ); return MAX_DOS_DRIVES; } return toupperW( current_directory[0] ) - 'A'; } /*********************************************************************** * INT21_MapDrive * * Convert drive number from scheme (0=default, 1=A:, 2=B:, ...) into * scheme (0=A:, 1=B:, 2=C:, ...) or MAX_DOS_DRIVES on error. */ static BYTE INT21_MapDrive( BYTE drive ) { if (drive) { WCHAR drivespec[] = {'A', ':', 0}; UINT drivetype; drivespec[0] += drive - 1; drivetype = GetDriveTypeW( drivespec ); if (drivetype == DRIVE_UNKNOWN || drivetype == DRIVE_NO_ROOT_DIR) return MAX_DOS_DRIVES; return drive - 1; } return INT21_GetCurrentDrive(); } /*********************************************************************** * INT21_SetCurrentDrive * * Set current drive. Uses scheme (0=A:, 1=B:, 2=C:, ...). */ static void INT21_SetCurrentDrive( BYTE drive ) { WCHAR drivespec[] = {'A', ':', 0}; drivespec[0] += drive; if (!SetCurrentDirectoryW( drivespec )) TRACE( "Failed to set current drive.\n" ); } /*********************************************************************** * INT21_ReadChar * * Reads a character from the standard input. * Extended keycodes will be returned as two separate characters. */ static BOOL INT21_ReadChar( BYTE *input, CONTEXT *waitctx ) { static BYTE pending_scan = 0; if (pending_scan) { if (input) *input = pending_scan; if (waitctx) pending_scan = 0; return TRUE; } else { BYTE ascii; BYTE scan; if (!DOSVM_Int16ReadChar( &ascii, &scan, waitctx )) return FALSE; if (input) *input = ascii; if (waitctx && !ascii) pending_scan = scan; return TRUE; } } /*********************************************************************** * INT21_GetSystemCountryCode * * Return DOS country code for default system locale. */ static WORD INT21_GetSystemCountryCode( void ) { LCID locale = LOCALE_USER_DEFAULT; char LCdata[80]; GetLocaleInfoA(locale, LOCALE_ICOUNTRY, LCdata, sizeof(LCdata)); return atoi(LCdata); } #pragma pack(1) typedef struct { UINT16 date_format; char currency_symbol[5]; char thou_sep[2]; char dec_sep[2]; char date_sep[2]; char time_sep[2]; char currency_format; char currency_dec_digits; char time_format; DWORD case_map; char list_sep[2]; char reserved[10]; } country_info_t; #pragma pack() /*********************************************************************** * INT21_FillCountryInformation * * Fill 34-byte buffer with country information data using * default system locale. */ static int INT21_FillCountryInformation( BYTE *dst, int size ) { BYTE buffer[0x22] = { 0 }; static DWORD casemap; LCID locale = LOCALE_USER_DEFAULT; char LCdata[80]; country_info_t *ci = (country_info_t*)buffer; if (!casemap) { /* in AL: char (80h <= AL) out AL: upper case char (80h <= AL) */ static char casemap_routine[] = { /* FIXME: Get from locale */ 0xcb /* retf */ }; WORD seg; LPVOID ptr = DOSMEM_AllocBlock(sizeof(casemap_routine), &seg); memcpy(ptr, casemap_routine, sizeof(casemap_routine)); casemap = MAKESEGPTR(seg, 0); } GetLocaleInfoA(locale, LOCALE_ICURRDIGITS, LCdata, sizeof(LCdata)); ci->currency_dec_digits = atoi(LCdata); GetLocaleInfoA(locale, LOCALE_ICURRENCY, LCdata, sizeof(LCdata)); ci->currency_format = *LCdata - '0'; GetLocaleInfoA(locale, LOCALE_IDATE, LCdata, sizeof(LCdata)); ci->date_format = *LCdata - '0'; GetLocaleInfoA(locale, LOCALE_SCURRENCY, LCdata, sizeof(LCdata)); memcpy(&ci->currency_symbol, LCdata, 4); GetLocaleInfoA(locale, LOCALE_SDATE, LCdata, sizeof(LCdata)); *ci->date_sep = *LCdata; GetLocaleInfoA(locale, LOCALE_SDECIMAL, LCdata, sizeof(LCdata)); *ci->dec_sep = *LCdata; GetLocaleInfoA(locale, LOCALE_SLIST, LCdata, sizeof(LCdata)); *ci->list_sep = *LCdata; GetLocaleInfoA(locale, LOCALE_STHOUSAND, LCdata, sizeof(LCdata)); *ci->thou_sep = *LCdata; GetLocaleInfoA(locale, LOCALE_STIME, LCdata, sizeof(LCdata)); *ci->time_sep = *LCdata; GetLocaleInfoA(locale, LOCALE_STIMEFORMAT, LCdata, sizeof(LCdata)); if (strchr(LCdata, 'H') != NULL) { ci->time_format = 1; } ci->case_map = casemap; /* 24 - BYTE[10]: Reserved */ memset( buffer + 24, 0, 10 ); memcpy( dst, buffer, size ); } void msdos_dbcs_table_update(LPBYTE tbl) { #define DBCS_SIZE 0x12 int active_code_page = GetConsoleCP(); UINT8 dbcs_data[DBCS_SIZE]; memset(dbcs_data, 0, sizeof(dbcs_data)); CPINFO info; GetCPInfo(active_code_page, &info); if (info.MaxCharSize != 1) { for (int i = 0;; i += 2) { UINT8 lo = info.LeadByte[i + 0]; UINT8 hi = info.LeadByte[i + 1]; dbcs_data[2 + i + 0] = lo; dbcs_data[2 + i + 1] = hi; if (lo == 0 && hi == 0) { dbcs_data[0] = i + 2; break; } } } else { dbcs_data[0] = 2; // ??? } memcpy(tbl, dbcs_data, sizeof(dbcs_data)); } /*********************************************************************** * INT21_FillHeap * * Initialize DOS heap. * * Filename Terminator Table of w2k DE NTVDM: * 16 00 01 00 FF 00 00 20-02 0E 2E 22 2F 5C 5B 5D ....... ..."/\[] * 3A 7C 3C 3E 2B 3D 3B 2C-00 :|<>+=;, */ static void INT21_FillHeap( INT21_HEAP *heap ) { static const char terminators[] = ".\"/\\[]:|<>+=;,"; int i; /* * Uppercase table. */ heap->uppercase_size = 128; for (i = 0; i < 128; i++) heap->uppercase_table[i] = toupper( 128 + i ); /* * Lowercase table. */ heap->lowercase_size = 256; for (i = 0; i < 256; i++) heap->lowercase_table[i] = tolower( i ); /* * Collating table. */ heap->collating_size = 256; for (i = 0; i < 256; i++) heap->collating_table[i] = i; /* * Filename table. */ heap->filename_size = 8 + strlen(terminators); heap->filename_illegal_size = strlen(terminators); memcpy( heap->filename_illegal_table, terminators, heap->filename_illegal_size ); heap->filename_reserved1 = 0x01; heap->filename_lowest = 0x00; heap->filename_highest = 0xff; heap->filename_reserved2 = 0x00; heap->filename_exclude_first = 0x00; heap->filename_exclude_last = 0x20; heap->filename_reserved3 = 0x02; /* * DBCS lead byte table. This table is empty. */ msdos_dbcs_table_update( &heap->dbcs_size ); /* * Initialize InDos flag. */ heap->misc_indos = 0; /* * FIXME: Should drive parameter blocks (DPB) be * initialized here and linked to DOS LOL? */ } /*********************************************************************** * INT21_GetHeapPointer * * Get pointer for DOS heap (INT21_HEAP). * Creates and initializes heap on first call. */ static INT21_HEAP *INT21_GetHeapPointer( void ) { static INT21_HEAP *heap_pointer = NULL; if (!heap_pointer) { WORD heap_segment; WORD heap_selector; heap_pointer = DOSVM_AllocDataUMB( sizeof(INT21_HEAP), &heap_segment, &heap_selector ); heap_pointer->misc_segment = heap_segment; heap_pointer->misc_selector = heap_selector; INT21_FillHeap( heap_pointer ); } return heap_pointer; } /*********************************************************************** * INT21_GetHeapSelector * * Get segment/selector for DOS heap (INT21_HEAP). * Creates and initializes heap on first call. */ static WORD INT21_GetHeapSelector( CONTEXT *context ) { INT21_HEAP *heap = INT21_GetHeapPointer(); if (!ISV86(context) && DOSVM_IsWin16()) return heap->misc_selector; else return heap->misc_segment; } /*********************************************************************** * INT21_FillDrivePB * * Fill DOS heap drive parameter block for the specified drive. * Return TRUE if drive was valid and there were * no errors while reading drive information. */ static BOOL INT21_FillDrivePB( BYTE drive ) { WCHAR drivespec[] = {'A', ':', 0}; INT21_HEAP *heap = INT21_GetHeapPointer(); INT21_DPB *dpb; UINT drivetype; DWORD cluster_sectors; DWORD sector_bytes; DWORD free_clusters; DWORD total_clusters; if (drive >= MAX_DOS_DRIVES) return FALSE; dpb = &heap->misc_dpb_list[drive]; drivespec[0] += drive; drivetype = GetDriveTypeW( drivespec ); /* * FIXME: Does this check work correctly with floppy/cdrom drives? */ if (drivetype == DRIVE_NO_ROOT_DIR || drivetype == DRIVE_UNKNOWN) return FALSE; /* * FIXME: Does this check work correctly with floppy/cdrom drives? */ if (!GetDiskFreeSpaceW( drivespec, &cluster_sectors, §or_bytes, &free_clusters, &total_clusters )) return FALSE; /* * FIXME: Most of the values listed below are incorrect. * All values should be validated. */ dpb->drive = drive; dpb->unit = 0; dpb->sector_bytes = sector_bytes; dpb->cluster_sectors = cluster_sectors - 1; dpb->shift = 0; while (cluster_sectors > 1) { cluster_sectors /= 2; dpb->shift++; } dpb->num_reserved = 0; dpb->num_FAT = (drivetype == DRIVE_FIXED) ? 2 : 1; dpb->num_root_entries = 2; dpb->first_data_sector = 2; dpb->num_clusters1 = total_clusters; dpb->sectors_per_FAT = 1; dpb->first_dir_sector = 1; dpb->driver_header = 0; dpb->media_ID = (drivetype == DRIVE_FIXED) ? 0xF8 : 0xF0; dpb->access_flag = 0; dpb->next = 0; dpb->search_cluster1 = 0; dpb->free_clusters_lo = LOWORD(free_clusters); dpb->free_clusters_hi = HIWORD(free_clusters); dpb->mirroring_flags = 0; dpb->info_sector = 0xffff; dpb->spare_boot_sector = 0xffff; dpb->first_cluster_sector = 0; dpb->num_clusters2 = total_clusters; dpb->fat_clusters = 32; dpb->root_cluster = 0; dpb->search_cluster2 = 0; return TRUE; } /*********************************************************************** * INT21_GetCurrentDirectory * * Handler for: * - function 0x47 * - subfunction 0x47 of function 0x71 */ static BOOL INT21_GetCurrentDirectory( CONTEXT *context, BOOL islong ) { char *buffer = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi); BYTE drive = INT21_MapDrive( DL_reg(context) ); WCHAR pathW[MAX_PATH]; char pathA[MAX_PATH]; WCHAR *ptr = pathW; size_t len; TRACE( "drive %d\n", DL_reg(context) ); if (drive == MAX_DOS_DRIVES) { SetLastError(ERROR_INVALID_DRIVE); return FALSE; } /* * Grab current directory. */ if (!GetCurrentDirectoryW( MAX_PATH, pathW )) return FALSE; if (toupperW(pathW[0]) - 'A' != drive || pathW[1] != ':') { /* cwd is not on the requested drive, get the environment string instead */ WCHAR env_var[4]; env_var[0] = '='; env_var[1] = 'A' + drive; env_var[2] = ':'; env_var[3] = 0; if (!GetEnvironmentVariableW( env_var, pathW, MAX_PATH )) { pathW[0] = 'A' + drive; pathW[1] = ':'; pathW[2] = '\\'; pathW[3] = '\0'; } } /* * Convert into short format. */ if (!islong) { DWORD result = GetShortPathNameW( pathW, pathW, MAX_PATH ); if (!result) return FALSE; if (result > MAX_PATH) { WARN( "Short path too long!\n" ); SetLastError(ERROR_NETWORK_BUSY); /* Internal Wine error. */ return FALSE; } } /* * The returned pathname does not include * the drive letter, colon or leading backslash. */ if (ptr[0] == '\\') { /* * FIXME: We should probably just strip host part from name... */ FIXME( "UNC names are not supported.\n" ); SetLastError(ERROR_NETWORK_BUSY); /* Internal Wine error. */ return FALSE; } else if (!ptr[0] || ptr[1] != ':' || ptr[2] != '\\') { WARN( "Path is neither UNC nor DOS path: %s\n", wine_dbgstr_w(ptr) ); SetLastError(ERROR_NETWORK_BUSY); /* Internal Wine error. */ return FALSE; } else { /* Remove drive letter, colon and leading backslash. */ ptr += 3; } /* * Convert into OEM string. */ if (!WideCharToMultiByte(CP_OEMCP, 0, ptr, -1, pathA, MAX_PATH, NULL, NULL)) { WARN( "Cannot convert path!\n" ); SetLastError(ERROR_NETWORK_BUSY); /* Internal Wine error. */ return FALSE; } /* * Success. */ if (!islong) { /* Undocumented success code. */ SET_AX( context, 0x0100 ); /* Truncate buffer to 64 bytes. */ pathA[63] = 0; } TRACE( "%c:=%s\n", 'A' + drive, pathA ); strcpy( buffer, pathA ); while (*buffer) { *buffer = toupper(*buffer); buffer++; } return TRUE; } /*********************************************************************** * INT21_SetCurrentDirectory * * Handler for: * - function 0x3b * - subfunction 0x3b of function 0x71 */ static BOOL INT21_SetCurrentDirectory( CONTEXT *context ) { WCHAR dirW1[MAX_PATH]; WCHAR dirW[MAX_PATH]; WCHAR env_var[4]; DWORD attr; char *dirA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); BYTE drive = INT21_GetCurrentDrive(); BOOL result; TRACE( "SET CURRENT DIRECTORY %s\n", dirA ); MultiByteToWideChar(CP_OEMCP, 0, dirA, -1, dirW1, MAX_PATH); if (!GetFullPathNameW( dirW1, MAX_PATH, dirW, NULL )) return FALSE; attr = GetFileAttributesW( dirW ); if (attr == INVALID_FILE_ATTRIBUTES || !(attr & FILE_ATTRIBUTE_DIRECTORY)) { SetLastError( ERROR_PATH_NOT_FOUND ); return FALSE; } env_var[0] = '='; env_var[1] = dirW[0]; env_var[2] = ':'; env_var[3] = 0; result = SetEnvironmentVariableW( env_var, dirW ); /* only set current directory if on the current drive */ if (result && (toupperW(dirW[0]) - 'A' == drive)) result = SetCurrentDirectoryW( dirW ); return result; } /*********************************************************************** * INT21_CreateMagicDeviceHandle * * Create a dummy file handle for a "magic" device. */ static HANDLE INT21_CreateMagicDeviceHandle( LPCWSTR name ) { static const WCHAR prefixW[] = {'\\','?','?','\\','u','n','i','x'}; const char *dir = wine_get_server_dir(); int len; HANDLE ret; NTSTATUS status; OBJECT_ATTRIBUTES attr; UNICODE_STRING nameW; IO_STATUS_BLOCK io; len = MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, NULL, 0 ); nameW.Length = sizeof(prefixW) + (len + strlenW( name )) * sizeof(WCHAR); nameW.MaximumLength = nameW.Length + sizeof(WCHAR); if (!(nameW.Buffer = HeapAlloc( GetProcessHeap(), 0, nameW.MaximumLength ))) { SetLastError( ERROR_NOT_ENOUGH_MEMORY ); return 0; } memcpy( nameW.Buffer, prefixW, sizeof(prefixW) ); MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, nameW.Buffer + ARRAY_SIZE(prefixW), len ); len += ARRAY_SIZE(prefixW); nameW.Buffer[len-1] = '/'; strcpyW( nameW.Buffer + len, name ); attr.Length = sizeof(attr); attr.RootDirectory = 0; attr.Attributes = 0; attr.ObjectName = &nameW; attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL; status = NtCreateFile( &ret, GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE, &attr, &io, NULL, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_ALERT, NULL, 0 ); if (status) { ret = 0; SetLastError( RtlNtStatusToDosError(status) ); } RtlFreeUnicodeString( &nameW ); return ret; } /*********************************************************************** * INT21_OpenMagicDevice * * Open a file handle for "magic" devices like EMMXXXX0. */ static HANDLE INT21_OpenMagicDevice( LPCWSTR name, DWORD access ) { unsigned int i; const WCHAR *p; HANDLE handle; if (name[0] && (name[1] == ':')) name += 2; if ((p = strrchrW( name, '/' ))) name = p + 1; if ((p = strrchrW( name, '\\' ))) name = p + 1; for (i = 0; i < ARRAY_SIZE(magic_devices); i++) { int len = strlenW( magic_devices[i].name ); if (!strncmpiW( magic_devices[i].name, name, len ) && (!name[len] || name[len] == '.' || name[len] == ':')) break; } if (i == ARRAY_SIZE(magic_devices)) return 0; if (!magic_devices[i].handle) /* need to open it */ { IO_STATUS_BLOCK io; FILE_INTERNAL_INFORMATION info; if (!(handle = INT21_CreateMagicDeviceHandle( magic_devices[i].name ))) return 0; NtQueryInformationFile( handle, &io, &info, sizeof(info), FileInternalInformation ); magic_devices[i].index = info.IndexNumber; magic_devices[i].handle = handle; } if (!DuplicateHandle( GetCurrentProcess(), magic_devices[i].handle, GetCurrentProcess(), &handle, access, FALSE, 0 )) handle = 0; return handle; } /*********************************************************************** * INT21_CreateFile * * Handler for: * - function 0x3c * - function 0x3d * - function 0x5b * - function 0x6c * - subfunction 0x6c of function 0x71 */ static BOOL INT21_CreateFile( CONTEXT *context, DWORD pathSegOff, BOOL returnStatus, WORD dosAccessShare, BYTE dosAction ) { WORD dosStatus; char *pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, pathSegOff); WCHAR pathW[MAX_PATH]; DWORD winAccess; DWORD winAttributes; HANDLE winHandle; DWORD winMode; DWORD winSharing; char redir_buf[MAX_PATH]; BOOL retry = FALSE; TRACE( "CreateFile called: function=%02x, action=%02x, access/share=%04x, " "create flags=%04x, file=%s.\n", AH_reg(context), dosAction, dosAccessShare, CX_reg(context), pathA ); /* * Application tried to create/open a file whose name * ends with a backslash. This is not allowed. * * FIXME: This needs to be validated, especially the return value. */ if (pathA[strlen(pathA) - 1] == '/') { SetLastError( ERROR_FILE_NOT_FOUND ); return FALSE; } /* * Convert DOS action flags into Win32 creation disposition parameter. */ switch(dosAction) { case 0x01: winMode = OPEN_EXISTING; break; case 0x02: winMode = TRUNCATE_EXISTING; break; case 0x10: winMode = CREATE_NEW; break; case 0x11: winMode = OPEN_ALWAYS; break; case 0x12: winMode = CREATE_ALWAYS; break; default: SetLastError( ERROR_INVALID_PARAMETER ); return FALSE; } /* * Convert DOS access/share flags into Win32 desired access parameter. */ switch(dosAccessShare & 0x07) { case OF_READ: winAccess = GENERIC_READ; break; case OF_WRITE: winAccess = GENERIC_WRITE; break; case OF_READWRITE: winAccess = GENERIC_READ | GENERIC_WRITE; break; case 0x04: /* * Read-only, do not modify file's last-access time (DOS7). * * FIXME: How to prevent modification of last-access time? */ winAccess = GENERIC_READ; break; default: winAccess = 0; } /* * Convert DOS access/share flags into Win32 share mode parameter. */ switch(dosAccessShare & 0x70) { case OF_SHARE_EXCLUSIVE: winSharing = 0; break; case OF_SHARE_DENY_WRITE: winSharing = FILE_SHARE_READ; break; case OF_SHARE_DENY_READ: winSharing = FILE_SHARE_WRITE; break; case OF_SHARE_DENY_NONE: case OF_SHARE_COMPAT: default: winSharing = FILE_SHARE_READ | FILE_SHARE_WRITE; } /* * FIXME: Bit (dosAccessShare & 0x80) represents inheritance. * What to do with this bit? * FIXME: Bits in the high byte of dosAccessShare are not supported. * See both function 0x6c and subfunction 0x6c of function 0x71 for * definition of these bits. */ /* * Convert DOS create attributes into Win32 flags and attributes parameter. */ if (winMode == OPEN_EXISTING || winMode == TRUNCATE_EXISTING) { winAttributes = 0; } else { WORD dosAttributes = CX_reg(context); if (dosAttributes & FA_LABEL) { /* * Application tried to create volume label entry. * This is difficult to support so we do not allow it. * * FIXME: If volume does not already have a label, * this function is supposed to succeed. */ SetLastError( ERROR_ACCESS_DENIED ); return TRUE; } winAttributes = dosAttributes & (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE); } pathA = RedirectSystemDir(pathA, redir_buf, MAX_PATH); /* * Open the file. */ if (winMode == CREATE_NEW || winMode == CREATE_ALWAYS) { pathA = RedirectDriveRoot(pathA, redir_buf, MAX_PATH, FALSE); } retry: MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH); if (dosAction == 0x12) DeleteFileW(pathW); if ((winHandle = INT21_OpenMagicDevice( pathW, winAccess ))) { dosStatus = 1; } else { winHandle = CreateFileW( pathW, winAccess, winSharing, NULL, winMode, winAttributes, 0 ); /* DOS allows opening files on a CDROM R/W */ if( winHandle == INVALID_HANDLE_VALUE && (GetLastError() == ERROR_WRITE_PROTECT || GetLastError() == ERROR_ACCESS_DENIED)) { winHandle = CreateFileW( pathW, winAccess & ~GENERIC_WRITE, winSharing, NULL, winMode, winAttributes, 0 ); } if (winHandle == INVALID_HANDLE_VALUE) { if (retry) return FALSE; pathA = RedirectDriveRoot(pathA, redir_buf, MAX_PATH, FALSE); retry = TRUE; goto retry; } /* * Determine DOS file status. * * 1 = file opened * 2 = file created * 3 = file replaced */ switch(winMode) { case OPEN_EXISTING: dosStatus = 1; break; case TRUNCATE_EXISTING: dosStatus = 3; break; case CREATE_NEW: dosStatus = 2; break; case OPEN_ALWAYS: dosStatus = (GetLastError() == ERROR_ALREADY_EXISTS) ? 1 : 2; break; case CREATE_ALWAYS: dosStatus = (GetLastError() == ERROR_ALREADY_EXISTS) ? 3 : 2; break; default: dosStatus = 0; } } /* * Return DOS file handle and DOS status. */ SET_AX( context, Win32HandleToDosFileHandle(winHandle) ); if (returnStatus) SET_CX( context, dosStatus ); TRACE( "CreateFile finished: handle=%d, status=%d.\n", AX_reg(context), dosStatus ); return TRUE; } /*********************************************************************** * INT21_BufferedInput * * Handler for function 0x0a and reading from console using * function 0x3f. * * Reads a string of characters from standard input until * enter key is pressed. Returns either number of characters * read from console including terminating CR or * zero if capacity was zero. */ static WORD INT21_BufferedInput( CONTEXT *context, BYTE *ptr, WORD capacity ) { BYTE length = 0; /* * Return immediately if capacity is zero. */ if (capacity == 0) return 0; while(TRUE) { BYTE ascii; BYTE scan; DOSVM_Int16ReadChar( &ascii, &scan, context ); if (ascii == '\r' || ascii == '\n') { ptr[length] = '\r'; return length + 1; } /* * DOS handles only backspace and KEY_LEFT * perhaps we should do more */ if (ascii == '\b' || scan == KEY_LEFT) { if (length==0) continue; DOSVM_PutChar( '\b' ); length--; continue; } /* * If the buffer becomes filled to within one byte of * capacity, DOS rejects all further characters up to, * but not including, the terminating carriage return. */ if (ascii != 0 && length < capacity-1) { DOSVM_PutChar( ascii ); ptr[length] = ascii; length++; } } } /*********************************************************************** * INT21_GetCurrentDTA */ static BYTE *INT21_GetCurrentDTA( CONTEXT *context ) { TDB *pTask = GlobalLock16(GetCurrentTask()); /* FIXME: This assumes DTA was set correctly! */ return CTX_SEG_OFF_TO_LIN( context, SELECTOROF(pTask->dta), OFFSETOF(pTask->dta) ); } /*********************************************************************** * INT21_OpenFileUsingFCB * * Handler for function 0x0f. * * PARAMS * DX:DX [I/O] File control block (FCB or XFCB) of unopened file * * RETURNS (in AL) * 0x00: successful * 0xff: failed * * NOTES * Opens a FCB file for read/write in compatibility mode. Upon calling * the FCB must have the drive_number, file_name, and file_extension * fields filled and all other bytes cleared. */ static void INT21_OpenFileUsingFCB( CONTEXT *context ) { struct FCB *fcb; struct XFCB *xfcb; char file_path[16]; char *pos; HANDLE handle; HFILE16 hfile16; BY_HANDLE_FILE_INFORMATION info; BYTE AL_result; fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (fcb->drive_number == 0xff) { xfcb = (struct XFCB *) fcb; fcb = (struct FCB *) xfcb->fcb; } /* if */ AL_result = 0; file_path[0] = 'A' + INT21_MapDrive( fcb->drive_number ); if (AL_result == 0) { file_path[1] = ':'; pos = &file_path[2]; memcpy(pos, fcb->file_name, 8); pos[8] = ' '; pos[9] = '\0'; pos = strchr(pos, ' '); *pos = '.'; pos++; memcpy(pos, fcb->file_extension, 3); pos[3] = ' '; pos[4] = '\0'; pos = strchr(pos, ' '); *pos = '\0'; handle = (HANDLE) _lopen(file_path, OF_READWRITE); if (handle == INVALID_HANDLE_VALUE) { TRACE("_lopen(\"%s\") failed: INVALID_HANDLE_VALUE\n", file_path); AL_result = 0xff; /* failed */ } else { hfile16 = Win32HandleToDosFileHandle(handle); if (hfile16 == HFILE_ERROR16) { TRACE("Win32HandleToDosFileHandle(%p) failed: HFILE_ERROR\n", handle); CloseHandle(handle); AL_result = 0xff; /* failed */ } else if (hfile16 > 255) { TRACE("hfile16 (=%d) larger than 255 for \"%s\"\n", hfile16, file_path); _lclose16(hfile16); AL_result = 0xff; /* failed */ } else { if (!GetFileInformationByHandle(handle, &info)) { TRACE("GetFileInformationByHandle(%d, %p) for \"%s\" failed\n", hfile16, handle, file_path); _lclose16(hfile16); AL_result = 0xff; /* failed */ } else { fcb->drive_number = file_path[0] - 'A' + 1; fcb->current_block_number = 0; fcb->logical_record_size = 128; fcb->file_size = info.nFileSizeLow; FileTimeToDosDateTime(&info.ftLastWriteTime, &fcb->date_of_last_write, &fcb->time_of_last_write); fcb->file_number = hfile16; fcb->attributes = 0xc2; fcb->starting_cluster = 0; /* don't know correct init value */ fcb->sequence_number = 0; /* don't know correct init value */ fcb->file_attributes = info.dwFileAttributes; /* The following fields are not initialized */ /* by the native function: */ /* unused */ /* record_within_current_block */ /* random_access_record_number */ TRACE("successful opened file \"%s\" as %d (handle %p)\n", file_path, hfile16, handle); AL_result = 0x00; /* successful */ } /* if */ } /* if */ } /* if */ } /* if */ SET_AL(context, AL_result); } /*********************************************************************** * INT21_CloseFileUsingFCB * * Handler for function 0x10. * * PARAMS * DX:DX [I/O] File control block (FCB or XFCB) of open file * * RETURNS (in AL) * 0x00: successful * 0xff: failed * * NOTES * Closes a FCB file. */ static void INT21_CloseFileUsingFCB( CONTEXT *context ) { struct FCB *fcb; struct XFCB *xfcb; BYTE AL_result; fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (fcb->drive_number == 0xff) { xfcb = (struct XFCB *) fcb; fcb = (struct FCB *) xfcb->fcb; } /* if */ if (_lclose16((HFILE16) fcb->file_number) != 0) { TRACE("_lclose16(%d) failed\n", fcb->file_number); AL_result = 0xff; /* failed */ } else { TRACE("successful closed file %d\n", fcb->file_number); AL_result = 0x00; /* successful */ } /* if */ SET_AL(context, AL_result); } /*********************************************************************** * INT21_SequentialReadFromFCB * * Handler for function 0x14. * * PARAMS * DX:DX [I/O] File control block (FCB or XFCB) of open file * * RETURNS (in AL) * 0: successful * 1: end of file, no data read * 2: segment wrap in DTA, no data read (not returned now) * 3: end of file, partial record read * * NOTES * Reads a record with the size FCB->logical_record_size from the FCB * to the disk transfer area. The position of the record is specified * with FCB->current_block_number and FCB->record_within_current_block. * Then FCB->current_block_number and FCB->record_within_current_block * are updated to point to the next record. If a partial record is * read, it is filled with zeros up to the FCB->logical_record_size. */ static void INT21_SequentialReadFromFCB( CONTEXT *context ) { struct FCB *fcb; struct XFCB *xfcb; HANDLE handle; DWORD record_number; DWORD position; BYTE *disk_transfer_area; UINT bytes_read; BYTE AL_result; fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (fcb->drive_number == 0xff) { xfcb = (struct XFCB *) fcb; fcb = (struct FCB *) xfcb->fcb; } /* if */ handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number); if (handle == INVALID_HANDLE_VALUE) { TRACE("DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\n", fcb->file_number); AL_result = 0x01; /* end of file, no data read */ } else { record_number = 128 * fcb->current_block_number + fcb->record_within_current_block; position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0); if (position != record_number * fcb->logical_record_size) { TRACE("seek(%d, %d, 0) failed with %u\n", fcb->file_number, record_number * fcb->logical_record_size, position); AL_result = 0x01; /* end of file, no data read */ } else { disk_transfer_area = INT21_GetCurrentDTA(context); bytes_read = _lread((HFILE) handle, disk_transfer_area, fcb->logical_record_size); if (bytes_read != fcb->logical_record_size) { TRACE("_lread(%d, %p, %d) failed with %d\n", fcb->file_number, disk_transfer_area, fcb->logical_record_size, bytes_read); if (bytes_read == 0) { AL_result = 0x01; /* end of file, no data read */ } else { memset(&disk_transfer_area[bytes_read], 0, fcb->logical_record_size - bytes_read); AL_result = 0x03; /* end of file, partial record read */ } /* if */ } else { TRACE("successful read %d bytes from record %d (position %u) of file %d (handle %p)\n", bytes_read, record_number, position, fcb->file_number, handle); AL_result = 0x00; /* successful */ } /* if */ } /* if */ } /* if */ if (AL_result == 0x00 || AL_result == 0x03) { if (fcb->record_within_current_block == 127) { fcb->record_within_current_block = 0; fcb->current_block_number++; } else { fcb->record_within_current_block++; } /* if */ } /* if */ SET_AL(context, AL_result); } /*********************************************************************** * INT21_SequentialWriteToFCB * * Handler for function 0x15. * * PARAMS * DX:DX [I/O] File control block (FCB or XFCB) of open file * * RETURNS (in AL) * 0: successful * 1: disk full * 2: segment wrap in DTA (not returned now) * * NOTES * Writes a record with the size FCB->logical_record_size from the disk * transfer area to the FCB. The position of the record is specified * with FCB->current_block_number and FCB->record_within_current_block. * Then FCB->current_block_number and FCB->record_within_current_block * are updated to point to the next record. */ static void INT21_SequentialWriteToFCB( CONTEXT *context ) { struct FCB *fcb; struct XFCB *xfcb; HANDLE handle; DWORD record_number; DWORD position; BYTE *disk_transfer_area; UINT bytes_written; BYTE AL_result; fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (fcb->drive_number == 0xff) { xfcb = (struct XFCB *) fcb; fcb = (struct FCB *) xfcb->fcb; } /* if */ handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number); if (handle == INVALID_HANDLE_VALUE) { TRACE("DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\n", fcb->file_number); AL_result = 0x01; /* disk full */ } else { record_number = 128 * fcb->current_block_number + fcb->record_within_current_block; position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0); if (position != record_number * fcb->logical_record_size) { TRACE("seek(%d, %d, 0) failed with %u\n", fcb->file_number, record_number * fcb->logical_record_size, position); AL_result = 0x01; /* disk full */ } else { disk_transfer_area = INT21_GetCurrentDTA(context); bytes_written = _lwrite((HFILE) handle, (LPCSTR)disk_transfer_area, fcb->logical_record_size); if (bytes_written != fcb->logical_record_size) { TRACE("_lwrite(%d, %p, %d) failed with %d\n", fcb->file_number, disk_transfer_area, fcb->logical_record_size, bytes_written); AL_result = 0x01; /* disk full */ } else { TRACE("successful written %d bytes from record %d (position %u) of file %d (handle %p)\n", bytes_written, record_number, position, fcb->file_number, handle); AL_result = 0x00; /* successful */ } /* if */ } /* if */ } /* if */ if (AL_result == 0x00) { if (fcb->record_within_current_block == 127) { fcb->record_within_current_block = 0; fcb->current_block_number++; } else { fcb->record_within_current_block++; } /* if */ } /* if */ SET_AL(context, AL_result); } /*********************************************************************** * INT21_ReadRandomRecordFromFCB * * Handler for function 0x21. * * PARAMS * DX:DX [I/O] File control block (FCB or XFCB) of open file * * RETURNS (in AL) * 0: successful * 1: end of file, no data read * 2: segment wrap in DTA, no data read (not returned now) * 3: end of file, partial record read * * NOTES * Reads a record with the size FCB->logical_record_size from * the FCB to the disk transfer area. The position of the record * is specified with FCB->random_access_record_number. The * FCB->random_access_record_number is not updated. If a partial record * is read, it is filled with zeros up to the FCB->logical_record_size. */ static void INT21_ReadRandomRecordFromFCB( CONTEXT *context ) { struct FCB *fcb; struct XFCB *xfcb; HANDLE handle; DWORD record_number; DWORD position; BYTE *disk_transfer_area; UINT bytes_read; BYTE AL_result; fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (fcb->drive_number == 0xff) { xfcb = (struct XFCB *) fcb; fcb = (struct FCB *) xfcb->fcb; } /* if */ memcpy(&record_number, fcb->random_access_record_number, 4); handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number); if (handle == INVALID_HANDLE_VALUE) { TRACE("DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\n", fcb->file_number); AL_result = 0x01; /* end of file, no data read */ } else { position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0); if (position != record_number * fcb->logical_record_size) { TRACE("seek(%d, %d, 0) failed with %u\n", fcb->file_number, record_number * fcb->logical_record_size, position); AL_result = 0x01; /* end of file, no data read */ } else { disk_transfer_area = INT21_GetCurrentDTA(context); bytes_read = _lread((HFILE) handle, disk_transfer_area, fcb->logical_record_size); if (bytes_read != fcb->logical_record_size) { TRACE("_lread(%d, %p, %d) failed with %d\n", fcb->file_number, disk_transfer_area, fcb->logical_record_size, bytes_read); if (bytes_read == 0) { AL_result = 0x01; /* end of file, no data read */ } else { memset(&disk_transfer_area[bytes_read], 0, fcb->logical_record_size - bytes_read); AL_result = 0x03; /* end of file, partial record read */ } /* if */ } else { TRACE("successful read %d bytes from record %d (position %u) of file %d (handle %p)\n", bytes_read, record_number, position, fcb->file_number, handle); AL_result = 0x00; /* successful */ } /* if */ } /* if */ } /* if */ fcb->current_block_number = record_number / 128; fcb->record_within_current_block = record_number % 128; SET_AL(context, AL_result); } /*********************************************************************** * INT21_WriteRandomRecordToFCB * * Handler for function 0x22. * * PARAMS * DX:DX [I/O] File control block (FCB or XFCB) of open file * * RETURNS (in AL) * 0: successful * 1: disk full * 2: segment wrap in DTA (not returned now) * * NOTES * Writes a record with the size FCB->logical_record_size from * the disk transfer area to the FCB. The position of the record * is specified with FCB->random_access_record_number. The * FCB->random_access_record_number is not updated. */ static void INT21_WriteRandomRecordToFCB( CONTEXT *context ) { struct FCB *fcb; struct XFCB *xfcb; HANDLE handle; DWORD record_number; DWORD position; BYTE *disk_transfer_area; UINT bytes_written; BYTE AL_result; fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (fcb->drive_number == 0xff) { xfcb = (struct XFCB *) fcb; fcb = (struct FCB *) xfcb->fcb; } /* if */ memcpy(&record_number, fcb->random_access_record_number, 4); handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number); if (handle == INVALID_HANDLE_VALUE) { TRACE("DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\n", fcb->file_number); AL_result = 0x01; /* disk full */ } else { position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0); if (position != record_number * fcb->logical_record_size) { TRACE("seek(%d, %d, 0) failed with %u\n", fcb->file_number, record_number * fcb->logical_record_size, position); AL_result = 0x01; /* disk full */ } else { disk_transfer_area = INT21_GetCurrentDTA(context); bytes_written = _lwrite((HFILE) handle, (LPCSTR)disk_transfer_area, fcb->logical_record_size); if (bytes_written != fcb->logical_record_size) { TRACE("_lwrite(%d, %p, %d) failed with %d\n", fcb->file_number, disk_transfer_area, fcb->logical_record_size, bytes_written); AL_result = 0x01; /* disk full */ } else { TRACE("successful written %d bytes from record %d (position %u) of file %d (handle %p)\n", bytes_written, record_number, position, fcb->file_number, handle); AL_result = 0x00; /* successful */ } /* if */ } /* if */ } /* if */ fcb->current_block_number = record_number / 128; fcb->record_within_current_block = record_number % 128; SET_AL(context, AL_result); } /*********************************************************************** * INT21_RandomBlockReadFromFCB * * Handler for function 0x27. * * PARAMS * CX [I/O] Number of records to read * DX:DX [I/O] File control block (FCB or XFCB) of open file * * RETURNS (in AL) * 0: successful * 1: end of file, no data read * 2: segment wrap in DTA, no data read (not returned now) * 3: end of file, partial record read * * NOTES * Reads several records with the size FCB->logical_record_size from * the FCB to the disk transfer area. The number of records to be * read is specified in the CX register. The position of the first * record is specified with FCB->random_access_record_number. The * FCB->random_access_record_number, the FCB->current_block_number * and FCB->record_within_current_block are updated to point to the * next record after the records read. If a partial record is read, * it is filled with zeros up to the FCB->logical_record_size. The * CX register is set to the number of successfully read records. */ static void INT21_RandomBlockReadFromFCB( CONTEXT *context ) { struct FCB *fcb; struct XFCB *xfcb; HANDLE handle; DWORD record_number; DWORD position; BYTE *disk_transfer_area; UINT records_requested; UINT bytes_requested; UINT bytes_read; UINT records_read; BYTE AL_result; fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (fcb->drive_number == 0xff) { xfcb = (struct XFCB *) fcb; fcb = (struct FCB *) xfcb->fcb; } /* if */ memcpy(&record_number, fcb->random_access_record_number, 4); handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number); if (handle == INVALID_HANDLE_VALUE) { TRACE("DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\n", fcb->file_number); records_read = 0; AL_result = 0x01; /* end of file, no data read */ } else { position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0); if (position != record_number * fcb->logical_record_size) { TRACE("seek(%d, %d, 0) failed with %u\n", fcb->file_number, record_number * fcb->logical_record_size, position); records_read = 0; AL_result = 0x01; /* end of file, no data read */ } else { disk_transfer_area = INT21_GetCurrentDTA(context); records_requested = CX_reg(context); bytes_requested = records_requested * fcb->logical_record_size; bytes_read = _lread((HFILE) handle, disk_transfer_area, bytes_requested); if (bytes_read != bytes_requested) { TRACE("_lread(%d, %p, %d) failed with %d\n", fcb->file_number, disk_transfer_area, bytes_requested, bytes_read); records_read = bytes_read / fcb->logical_record_size; if (bytes_read % fcb->logical_record_size == 0) { AL_result = 0x01; /* end of file, no data read */ } else { records_read++; memset(&disk_transfer_area[bytes_read], 0, records_read * fcb->logical_record_size - bytes_read); AL_result = 0x03; /* end of file, partial record read */ } /* if */ } else { TRACE("successful read %d bytes from record %d (position %u) of file %d (handle %p)\n", bytes_read, record_number, position, fcb->file_number, handle); records_read = records_requested; AL_result = 0x00; /* successful */ } /* if */ } /* if */ } /* if */ record_number += records_read; memcpy(fcb->random_access_record_number, &record_number, 4); fcb->current_block_number = record_number / 128; fcb->record_within_current_block = record_number % 128; SET_CX(context, records_read); SET_AL(context, AL_result); } /*********************************************************************** * INT21_RandomBlockWriteToFCB * * Handler for function 0x28. * * PARAMS * CX [I/O] Number of records to write * DX:DX [I/O] File control block (FCB or XFCB) of open file * * RETURNS (in AL) * 0: successful * 1: disk full * 2: segment wrap in DTA (not returned now) * * NOTES * Writes several records with the size FCB->logical_record_size from * the disk transfer area to the FCB. The number of records to be * written is specified in the CX register. The position of the first * record is specified with FCB->random_access_record_number. The * FCB->random_access_record_number, the FCB->current_block_number * and FCB->record_within_current_block are updated to point to the * next record after the records written. The CX register is set to * the number of successfully written records. */ static void INT21_RandomBlockWriteToFCB( CONTEXT *context ) { struct FCB *fcb; struct XFCB *xfcb; HANDLE handle; DWORD record_number; DWORD position; BYTE *disk_transfer_area; UINT records_requested; UINT bytes_requested; UINT bytes_written; UINT records_written; BYTE AL_result; fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (fcb->drive_number == 0xff) { xfcb = (struct XFCB *) fcb; fcb = (struct FCB *) xfcb->fcb; } /* if */ memcpy(&record_number, fcb->random_access_record_number, 4); handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number); if (handle == INVALID_HANDLE_VALUE) { TRACE("DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\n", fcb->file_number); records_written = 0; AL_result = 0x01; /* disk full */ } else { position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0); if (position != record_number * fcb->logical_record_size) { TRACE("seek(%d, %d, 0) failed with %u\n", fcb->file_number, record_number * fcb->logical_record_size, position); records_written = 0; AL_result = 0x01; /* disk full */ } else { disk_transfer_area = INT21_GetCurrentDTA(context); records_requested = CX_reg(context); bytes_requested = records_requested * fcb->logical_record_size; bytes_written = _lwrite((HFILE) handle, (LPCSTR)disk_transfer_area, bytes_requested); if (bytes_written != bytes_requested) { TRACE("_lwrite(%d, %p, %d) failed with %d\n", fcb->file_number, disk_transfer_area, bytes_requested, bytes_written); records_written = bytes_written / fcb->logical_record_size; AL_result = 0x01; /* disk full */ } else { TRACE("successful write %d bytes from record %d (position %u) of file %d (handle %p)\n", bytes_written, record_number, position, fcb->file_number, handle); records_written = records_requested; AL_result = 0x00; /* successful */ } /* if */ } /* if */ } /* if */ record_number += records_written; memcpy(fcb->random_access_record_number, &record_number, 4); fcb->current_block_number = record_number / 128; fcb->record_within_current_block = record_number % 128; SET_CX(context, records_written); SET_AL(context, AL_result); } /*********************************************************************** * INT21_CreateDirectory * * Handler for: * - function 0x39 * - subfunction 0x39 of function 0x71 * - subfunction 0xff of function 0x43 (CL == 0x39) */ static BOOL INT21_CreateDirectory( CONTEXT *context ) { WCHAR dirW[MAX_PATH]; char *dirA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); TRACE( "CREATE DIRECTORY %s\n", dirA ); MultiByteToWideChar(CP_OEMCP, 0, dirA, -1, dirW, MAX_PATH); if (CreateDirectoryW(dirW, NULL)) return TRUE; /* * FIXME: CreateDirectory's LastErrors will clash with the ones * used by DOS. AH=39 only returns 3 (path not found) and * 5 (access denied), while CreateDirectory return several * ones. Remap some of them. -Marcus */ switch (GetLastError()) { case ERROR_ALREADY_EXISTS: case ERROR_FILENAME_EXCED_RANGE: case ERROR_DISK_FULL: SetLastError(ERROR_ACCESS_DENIED); break; default: break; } return FALSE; } /*********************************************************************** * INT21_ExtendedCountryInformation * * Handler for function 0x65. */ static void INT21_ExtendedCountryInformation( CONTEXT *context ) { BYTE *dataptr = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); BYTE buffsize = CX_reg (context); TRACE( "GET EXTENDED COUNTRY INFORMATION, subfunction %02x\n", AL_reg(context) ); /* * Check subfunctions that are passed country and code page. */ if (AL_reg(context) >= 0x01 && AL_reg(context) <= 0x07) { WORD country = DX_reg(context); WORD codepage = BX_reg(context); if (country != 0xffff && country != INT21_GetSystemCountryCode()) FIXME( "Requested info on non-default country %04x\n", country ); if (codepage != 0xffff && codepage != GetOEMCP()) FIXME( "Requested info on non-default code page %04x\n", codepage ); } switch (AL_reg(context)) { case 0x00: /* SET GENERAL INTERNATIONALIZATION INFO */ INT_BARF( context, 0x21 ); SET_CFLAG( context ); break; case 0x01: /* GET GENERAL INTERNATIONALIZATION INFO */ TRACE( "Get general internationalization info\n" ); dataptr[0] = AL_reg(context); /* Info ID */ *(WORD*)(dataptr+1) = 38; /* Size of the following info */ *(WORD*)(dataptr+3) = INT21_GetSystemCountryCode(); /* Country ID */ *(WORD*)(dataptr+5) = GetOEMCP(); /* Code page */ /* FIXME: fill buffer partially up to buffsize bytes*/ if (buffsize > 8){ INT21_FillCountryInformation( dataptr + 7, buffsize >= 0x29 ? 0x22 : buffsize - 0x7); SET_CX( context, buffsize >= 0x29 ? 0x29 : buffsize); /* Size of returned info */ }else{ SET_CX( context, 0x07 ); /* Size of returned info */ } break; case 0x02: /* GET POINTER TO UPPERCASE TABLE */ case 0x04: /* GET POINTER TO FILENAME UPPERCASE TABLE */ TRACE( "Get pointer to uppercase table\n" ); dataptr[0] = AL_reg(context); /* Info ID */ *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ), offsetof(INT21_HEAP, uppercase_size) ); SET_CX( context, 5 ); /* Size of returned info */ break; case 0x03: /* GET POINTER TO LOWERCASE TABLE */ TRACE( "Get pointer to lowercase table\n" ); dataptr[0] = 0x03; /* Info ID */ *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ), offsetof(INT21_HEAP, lowercase_size) ); SET_CX( context, 5 ); /* Size of returned info */ break; case 0x05: /* GET POINTER TO FILENAME TERMINATOR TABLE */ TRACE("Get pointer to filename terminator table\n"); dataptr[0] = 0x05; /* Info ID */ *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ), offsetof(INT21_HEAP, filename_size) ); SET_CX( context, 5 ); /* Size of returned info */ break; case 0x06: /* GET POINTER TO COLLATING SEQUENCE TABLE */ TRACE("Get pointer to collating sequence table\n"); dataptr[0] = 0x06; /* Info ID */ *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ), offsetof(INT21_HEAP, collating_size) ); SET_CX( context, 5 ); /* Size of returned info */ break; case 0x07: /* GET POINTER TO DBCS LEAD BYTE TABLE */ TRACE("Get pointer to DBCS lead byte table\n"); dataptr[0] = 0x07; /* Info ID */ *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ), offsetof(INT21_HEAP, dbcs_size) ); SET_CX( context, 5 ); /* Size of returned info */ break; case 0x20: /* CAPITALIZE CHARACTER */ case 0xa0: /* CAPITALIZE FILENAME CHARACTER */ TRACE("Convert char to uppercase\n"); SET_DL( context, toupper(DL_reg(context)) ); break; case 0x21: /* CAPITALIZE STRING */ case 0xa1: /* CAPITALIZE COUNTED FILENAME STRING */ TRACE("Convert string to uppercase with length\n"); { char *ptr = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Edx ); WORD len = CX_reg(context); while (len--) { *ptr = toupper(*ptr); ptr++; } } break; case 0x22: /* CAPITALIZE ASCIIZ STRING */ case 0xa2: /* CAPITALIZE ASCIIZ FILENAME */ TRACE("Convert ASCIIZ string to uppercase\n"); { char *p = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Edx ); for ( ; *p; p++) *p = toupper(*p); } break; case 0x23: /* DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE */ INT_BARF( context, 0x21 ); SET_CFLAG( context ); break; default: INT_BARF( context, 0x21 ); SET_CFLAG(context); break; } } /*********************************************************************** * INT21_FileAttributes * * Handler for: * - function 0x43 * - subfunction 0x43 of function 0x71 */ static BOOL INT21_FileAttributes( CONTEXT *context, BYTE subfunction, BOOL islong ) { WCHAR fileW[MAX_PATH]; char *fileA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); CHAR filebuf[MAX_PATH]; fileA = RedirectSystemDir(fileA, filebuf, MAX_PATH); HANDLE handle; BOOL status; FILETIME filetime; DWORD result; WORD date, time; int len; switch (subfunction) { case 0x00: /* GET FILE ATTRIBUTES */ TRACE( "GET FILE ATTRIBUTES for %s\n", fileA ); len = MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); /* Winbench 96 Disk Test fails if we don't complain * about a filename that ends in \ */ if (!len || (fileW[len-1] == '/') || (fileW[len-1] == '\\')) return FALSE; result = GetFileAttributesW( fileW ); if (result == INVALID_FILE_ATTRIBUTES) return FALSE; else { result &= 0xff; SET_CX( context, (WORD)result ); if (!islong) SET_AX( context, (WORD)result ); /* DR DOS */ } break; case 0x01: /* SET FILE ATTRIBUTES */ TRACE( "SET FILE ATTRIBUTES 0x%02x for %s\n", CX_reg(context), fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); if (!SetFileAttributesW( fileW, CX_reg(context) )) return FALSE; break; case 0x02: /* GET COMPRESSED FILE SIZE */ TRACE( "GET COMPRESSED FILE SIZE for %s\n", fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); result = GetCompressedFileSizeW( fileW, NULL ); if (result == INVALID_FILE_SIZE) return FALSE; else { SET_AX( context, LOWORD(result) ); SET_DX( context, HIWORD(result) ); } break; case 0x03: /* SET FILE LAST-WRITTEN DATE AND TIME */ if (!islong) INT_BARF( context, 0x21 ); else { TRACE( "SET FILE LAST-WRITTEN DATE AND TIME, file %s\n", fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); handle = CreateFileW( fileW, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (handle == INVALID_HANDLE_VALUE) return FALSE; DosDateTimeToFileTime( DI_reg(context), CX_reg(context), &filetime ); status = SetFileTime( handle, NULL, NULL, &filetime ); CloseHandle( handle ); return status; } break; case 0x04: /* GET FILE LAST-WRITTEN DATE AND TIME */ if (!islong) INT_BARF( context, 0x21 ); else { TRACE( "GET FILE LAST-WRITTEN DATE AND TIME, file %s\n", fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); handle = CreateFileW( fileW, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (handle == INVALID_HANDLE_VALUE) return FALSE; status = GetFileTime( handle, NULL, NULL, &filetime ); if (status) { FileTimeToDosDateTime( &filetime, &date, &time ); SET_DI( context, date ); SET_CX( context, time ); } CloseHandle( handle ); return status; } break; case 0x05: /* SET FILE LAST ACCESS DATE */ if (!islong) INT_BARF( context, 0x21 ); else { TRACE( "SET FILE LAST ACCESS DATE, file %s\n", fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); handle = CreateFileW( fileW, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (handle == INVALID_HANDLE_VALUE) return FALSE; DosDateTimeToFileTime( DI_reg(context), 0, &filetime ); status = SetFileTime( handle, NULL, &filetime, NULL ); CloseHandle( handle ); return status; } break; case 0x06: /* GET FILE LAST ACCESS DATE */ if (!islong) INT_BARF( context, 0x21 ); else { TRACE( "GET FILE LAST ACCESS DATE, file %s\n", fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); handle = CreateFileW( fileW, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (handle == INVALID_HANDLE_VALUE) return FALSE; status = GetFileTime( handle, NULL, &filetime, NULL ); if (status) { FileTimeToDosDateTime( &filetime, &date, NULL ); SET_DI( context, date ); } CloseHandle( handle ); return status; } break; case 0x07: /* SET FILE CREATION DATE AND TIME */ if (!islong) INT_BARF( context, 0x21 ); else { TRACE( "SET FILE CREATION DATE AND TIME, file %s\n", fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); handle = CreateFileW( fileW, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (handle == INVALID_HANDLE_VALUE) return FALSE; /* * FIXME: SI has number of 10-millisecond units past time in CX. */ DosDateTimeToFileTime( DI_reg(context), CX_reg(context), &filetime ); status = SetFileTime( handle, &filetime, NULL, NULL ); CloseHandle( handle ); return status; } break; case 0x08: /* GET FILE CREATION DATE AND TIME */ if (!islong) INT_BARF( context, 0x21 ); else { TRACE( "GET FILE CREATION DATE AND TIME, file %s\n", fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); handle = CreateFileW( fileW, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (handle == INVALID_HANDLE_VALUE) return FALSE; status = GetFileTime( handle, &filetime, NULL, NULL ); if (status) { FileTimeToDosDateTime( &filetime, &date, &time ); SET_DI( context, date ); SET_CX( context, time ); /* * FIXME: SI has number of 10-millisecond units past * time in CX. */ SET_SI( context, 0 ); } CloseHandle(handle); return status; } break; case 0xff: /* EXTENDED-LENGTH FILENAME OPERATIONS */ if (islong || context->Ebp != 0x5053) INT_BARF( context, 0x21 ); else { switch(CL_reg(context)) { case 0x39: if (!INT21_CreateDirectory( context )) return FALSE; break; case 0x56: if (!INT21_RenameFile( context )) return FALSE; break; default: INT_BARF( context, 0x21 ); } } break; default: INT_BARF( context, 0x21 ); } return TRUE; } /*********************************************************************** * INT21_FileDateTime * * Handler for function 0x57. */ static BOOL INT21_FileDateTime( CONTEXT *context ) { HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context)); FILETIME filetime; WORD date, time; switch (AL_reg(context)) { case 0x00: /* Get last-written stamp */ TRACE( "GET FILE LAST-WRITTEN DATE AND TIME, handle %d\n", BX_reg(context) ); { if (!GetFileTime( handle, NULL, NULL, &filetime )) return FALSE; FileTimeToDosDateTime( &filetime, &date, &time ); SET_DX( context, date ); SET_CX( context, time ); break; } case 0x01: /* Set last-written stamp */ TRACE( "SET FILE LAST-WRITTEN DATE AND TIME, handle %d\n", BX_reg(context) ); { DWORD typ = GetFileType(handle); /* is device file */ if (typ != FILE_TYPE_DISK || BX_reg(context) < 5 /* dup? */) { /* always success */ break; } DosDateTimeToFileTime( DX_reg(context), CX_reg(context), &filetime ); if (!SetFileTime( handle, NULL, NULL, &filetime )) return FALSE; break; } case 0x04: /* Get last access stamp, DOS 7 */ TRACE( "GET FILE LAST ACCESS DATE AND TIME, handle %d\n", BX_reg(context) ); { if (!GetFileTime( handle, NULL, &filetime, NULL )) return FALSE; FileTimeToDosDateTime( &filetime, &date, &time ); SET_DX( context, date ); SET_CX( context, time ); break; } case 0x05: /* Set last access stamp, DOS 7 */ TRACE( "SET FILE LAST ACCESS DATE AND TIME, handle %d\n", BX_reg(context) ); { DosDateTimeToFileTime( DX_reg(context), CX_reg(context), &filetime ); if (!SetFileTime( handle, NULL, &filetime, NULL )) return FALSE; break; } case 0x06: /* Get creation stamp, DOS 7 */ TRACE( "GET FILE CREATION DATE AND TIME, handle %d\n", BX_reg(context) ); { if (!GetFileTime( handle, &filetime, NULL, NULL )) return FALSE; FileTimeToDosDateTime( &filetime, &date, &time ); SET_DX( context, date ); SET_CX( context, time ); /* * FIXME: SI has number of 10-millisecond units past time in CX. */ SET_SI( context, 0 ); break; } case 0x07: /* Set creation stamp, DOS 7 */ TRACE( "SET FILE CREATION DATE AND TIME, handle %d\n", BX_reg(context) ); { /* * FIXME: SI has number of 10-millisecond units past time in CX. */ DosDateTimeToFileTime( DX_reg(context), CX_reg(context), &filetime ); if (!SetFileTime( handle, &filetime, NULL, NULL )) return FALSE; break; } default: INT_BARF( context, 0x21 ); break; } return TRUE; } /*********************************************************************** * INT21_GetPSP * * Handler for functions 0x51 and 0x62. */ static void INT21_GetPSP( CONTEXT *context ) { TRACE( "GET CURRENT PSP ADDRESS (%02x)\n", AH_reg(context) ); /* * FIXME: should we return the original DOS PSP upon * Windows startup ? */ if (!ISV86(context) && DOSVM_IsWin16()) SET_BX( context, LOWORD(GetCurrentPDB16()) ); else SET_BX( context, DOSVM_psp ); } static inline void setword( BYTE *ptr, WORD w ) { ptr[0] = (BYTE)w; ptr[1] = (BYTE)(w >> 8); } static void CreateBPB(int drive, BYTE *data, BOOL16 limited) /* limited == TRUE is used with INT 0x21/0x440d */ { /* FIXME: we're forcing some values without checking that those are valid */ if (drive > 1) { setword(data, 512); data[2] = 2; setword(&data[3], 0); data[5] = 2; setword(&data[6], 240); setword(&data[8], 64000); data[0x0a] = 0xf8; setword(&data[0x0b], 40); setword(&data[0x0d], 56); setword(&data[0x0f], 2); setword(&data[0x11], 0); if (!limited) { setword(&data[0x1f], 800); data[0x21] = 5; setword(&data[0x22], 1); } } else { /* 1.44mb */ setword(data, 512); data[2] = 2; setword(&data[3], 0); data[5] = 2; setword(&data[6], 240); setword(&data[8], 2880); data[0x0a] = 0xf8; setword(&data[0x0b], 6); setword(&data[0x0d], 18); setword(&data[0x0f], 2); setword(&data[0x11], 0); if (!limited) { setword(&data[0x1f], 80); data[0x21] = 7; setword(&data[0x22], 2); } } } static inline DWORD INT21_Ioctl_CylHeadSect2Lin(DWORD cyl, WORD head, WORD sec, WORD cyl_cnt, WORD head_cnt, WORD sec_cnt) { DWORD res = (cyl * head_cnt*sec_cnt + head * sec_cnt + sec); return res; } /*********************************************************************** * INT21_Ioctl_Block * * Handler for block device IOCTLs. */ static void INT21_Ioctl_Block( CONTEXT *context ) { BYTE *dataptr; BYTE drive = INT21_MapDrive( BL_reg(context) ); WCHAR drivespec[] = {'A', ':', '\\', 0}; UINT drivetype; drivespec[0] += drive; drivetype = GetDriveTypeW( drivespec ); RESET_CFLAG(context); if (drivetype == DRIVE_UNKNOWN || drivetype == DRIVE_NO_ROOT_DIR) { TRACE( "IOCTL - SUBFUNCTION %d - INVALID DRIVE %c:\n", AL_reg(context), 'A' + drive ); SetLastError( ERROR_INVALID_DRIVE ); SET_AX( context, ERROR_INVALID_DRIVE ); SET_CFLAG( context ); return; } switch (AL_reg(context)) { case 0x04: /* READ FROM BLOCK DEVICE CONTROL CHANNEL */ case 0x05: /* WRITE TO BLOCK DEVICE CONTROL CHANNEL */ INT_BARF( context, 0x21 ); break; case 0x08: /* CHECK IF BLOCK DEVICE REMOVABLE */ TRACE( "IOCTL - CHECK IF BLOCK DEVICE REMOVABLE - %c:\n", 'A' + drive ); if (drivetype == DRIVE_REMOVABLE) SET_AX( context, 0 ); /* removable */ else SET_AX( context, 1 ); /* not removable */ break; case 0x09: /* CHECK IF BLOCK DEVICE REMOTE */ TRACE( "IOCTL - CHECK IF BLOCK DEVICE REMOTE - %c:\n", 'A' + drive ); if (drivetype == DRIVE_REMOTE) SET_DX( context, (1<<9) | (1<<12) ); /* remote + no direct IO */ else if (drivetype == DRIVE_CDROM) /* CDROM should be set to remote. If it set the app will * call int2f to check if it cdrom or remote drive. */ SET_DX( context, (1<<12) ); else if (drivetype == DRIVE_FIXED) /* This should define if drive support 0x0d, 0x0f and 0x08 * requests. The local fixed drive should do. */ SET_DX( context, (1<<11) ); else SET_DX( context, 0 ); /* FIXME: use driver attr here */ break; case 0x0d: /* GENERIC BLOCK DEVICE REQUEST */ /* Get pointer to IOCTL parameter block */ dataptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); switch (CX_reg(context)) { case 0x0841: /* write logical device track */ TRACE( "GENERIC IOCTL - Write logical device track - %c:\n", 'A' + drive); { WORD head = *(WORD *)(dataptr+1); WORD cyl = *(WORD *)(dataptr+3); WORD sect = *(WORD *)(dataptr+5); WORD nrsect = *(WORD *)(dataptr+7); BYTE *data = CTX_SEG_OFF_TO_LIN(context, *(WORD *)(dataptr+11), *(WORD *)(dataptr+9)); WORD cyl_cnt, head_cnt, sec_cnt; /* FIXME: we're faking some values here */ if (drive > 1) { /* cyl_cnt = 0x300; head_cnt = 16; sec_cnt = 255; */ SET_AX( context, ERROR_WRITE_FAULT ); SET_CFLAG(context); break; } else { /* floppy */ cyl_cnt = 80; head_cnt = 2; sec_cnt = 18; } if (!DOSVM_RawWrite(drive, INT21_Ioctl_CylHeadSect2Lin(cyl, head, sect, cyl_cnt, head_cnt, sec_cnt), nrsect, data, FALSE)) { SET_AX( context, ERROR_WRITE_FAULT ); SET_CFLAG(context); } } break; case 0x084a: /* lock logical volume */ TRACE( "GENERIC IOCTL - Lock logical volume, level %d mode %d - %c:\n", BH_reg(context), DX_reg(context), 'A' + drive ); break; case 0x0860: /* get device parameters */ /* FIXME: we're faking some values here */ /* used by w4wgrp's winfile */ memset(dataptr, 0, 0x20); /* DOS 6.22 uses 0x20 bytes */ dataptr[0] = 0x04; dataptr[6] = 0; /* media type */ if (drive > 1) { dataptr[1] = 0x05; /* fixed disk */ setword(&dataptr[2], 0x01); /* non removable */ setword(&dataptr[4], 0x300); /* # of cylinders */ } else { dataptr[1] = 0x07; /* block dev, floppy */ setword(&dataptr[2], 0x02); /* removable */ setword(&dataptr[4], 80); /* # of cylinders */ } CreateBPB(drive, &dataptr[7], TRUE); RESET_CFLAG(context); break; case 0x0861: /* read logical device track */ TRACE( "GENERIC IOCTL - Read logical device track - %c:\n", 'A' + drive); { WORD head = *(WORD *)(dataptr+1); WORD cyl = *(WORD *)(dataptr+3); WORD sect = *(WORD *)(dataptr+5); WORD nrsect = *(WORD *)(dataptr+7); BYTE *data = CTX_SEG_OFF_TO_LIN(context, *(WORD *)(dataptr+11), *(WORD *)(dataptr+9)); WORD cyl_cnt, head_cnt, sec_cnt; /* FIXME: we're faking some values here */ if (drive > 1) { cyl_cnt = 0x300; head_cnt = 16; sec_cnt = 255; } else { /* floppy */ cyl_cnt = 80; head_cnt = 2; sec_cnt = 18; } if (!DOSVM_RawRead(drive, INT21_Ioctl_CylHeadSect2Lin(cyl, head, sect, cyl_cnt, head_cnt, sec_cnt), nrsect, data, FALSE)) { SET_AX( context, ERROR_READ_FAULT ); SET_CFLAG(context); } } break; case 0x0866: /* get volume serial number */ { WCHAR label[12],fsname[9]; DWORD serial; TRACE( "GENERIC IOCTL - Get media id - %c:\n", 'A' + drive ); GetVolumeInformationW(drivespec, label, 12, &serial, NULL, NULL, fsname, 9); *(WORD*)dataptr = 0; memcpy(dataptr+2,&serial,4); WideCharToMultiByte(CP_OEMCP, 0, label, 11, (LPSTR)dataptr + 6, 11, NULL, NULL); WideCharToMultiByte(CP_OEMCP, 0, fsname, 8, (LPSTR)dataptr + 17, 8, NULL, NULL); } break; case 0x086a: /* unlock logical volume */ TRACE( "GENERIC IOCTL - Logical volume unlocked - %c:\n", 'A' + drive ); break; case 0x086f: /* get drive map information */ memset(dataptr+1, '\0', dataptr[0]-1); dataptr[1] = dataptr[0]; dataptr[2] = 0x07; /* protected mode driver; no eject; no notification */ dataptr[3] = 0xFF; /* no physical drive */ break; case 0x0872: /* Trial and error implementation */ SET_AX( context, drivetype == DRIVE_UNKNOWN ? 0x0f : 0x01 ); SET_CFLAG(context); /* Seems to be set all the time */ break; default: INT_BARF( context, 0x21 ); } break; case 0x0e: /* GET LOGICAL DRIVE MAP */ TRACE( "IOCTL - GET LOGICAL DRIVE MAP - %c:\n", 'A' + drive ); /* FIXME: this is not correct if drive has mappings */ SET_AL( context, 0 ); /* drive has no mapping */ break; case 0x0f: /* SET LOGICAL DRIVE MAP */ TRACE("IOCTL - SET LOGICAL DRIVE MAP for drive %s\n", INT21_DriveName( BL_reg(context))); /* FIXME: as of today, we don't support logical drive mapping... */ SET_AL( context, 0 ); break; case 0x11: /* QUERY GENERIC IOCTL CAPABILITY */ default: INT_BARF( context, 0x21 ); } } /*********************************************************************** * INT21_IoctlScsiMgrHandler * * IOCTL handler for the SCSIMGR device. */ static void INT21_IoctlScsiMgrHandler( CONTEXT *context ) { switch (AL_reg(context)) { case 0x00: /* GET DEVICE INFORMATION */ SET_DX( context, 0xc0c0 ); break; case 0x02: /* READ FROM CHARACTER DEVICE CONTROL CHANNEL */ DOSVM_ASPIHandler(context); break; case 0x0a: /* CHECK IF HANDLE IS REMOTE */ SET_DX( context, 0 ); break; case 0x01: /* SET DEVICE INFORMATION */ case 0x03: /* WRITE TO CHARACTER DEVICE CONTROL CHANNEL */ case 0x06: /* GET INPUT STATUS */ case 0x07: /* GET OUTPUT STATUS */ case 0x0c: /* GENERIC CHARACTER DEVICE REQUEST */ case 0x10: /* QUERY GENERIC IOCTL CAPABILITY */ default: INT_BARF( context, 0x21 ); break; } } /*********************************************************************** * INT21_IoctlHPScanHandler * * IOCTL handler for the HPSCAN device. */ static void INT21_IoctlHPScanHandler( CONTEXT *context ) { switch (AL_reg(context)) { case 0x00: /* GET DEVICE INFORMATION */ SET_DX( context, 0xc0c0 ); break; case 0x0a: /* CHECK IF HANDLE IS REMOTE */ SET_DX( context, 0 ); break; case 0x01: /* SET DEVICE INFORMATION */ case 0x02: /* READ FROM CHARACTER DEVICE CONTROL CHANNEL */ case 0x03: /* WRITE TO CHARACTER DEVICE CONTROL CHANNEL */ case 0x06: /* GET INPUT STATUS */ case 0x07: /* GET OUTPUT STATUS */ case 0x0c: /* GENERIC CHARACTER DEVICE REQUEST */ case 0x10: /* QUERY GENERIC IOCTL CAPABILITY */ default: INT_BARF( context, 0x21 ); break; } } /*********************************************************************** * INT21_Ioctl_Char * * Handler for character device IOCTLs. */ static void INT21_Ioctl_Char( CONTEXT *context ) { int status; BOOL IsConsoleIOHandle = FALSE; IO_STATUS_BLOCK io; FILE_INTERNAL_INFORMATION info; DWORD mode; HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context)); status = NtQueryInformationFile( handle, &io, &info, sizeof(info), FileInternalInformation ); if (status) { if( GetConsoleMode(handle, &mode) ) IsConsoleIOHandle = TRUE; else { SET_AX( context, RtlNtStatusToDosError(status) ); SET_CFLAG( context ); return; } } else { UINT i; for (i = 0; i < ARRAY_SIZE(magic_devices); i++) { if (!magic_devices[i].handle) continue; if (magic_devices[i].index.QuadPart == info.IndexNumber.QuadPart) { /* found it */ magic_devices[i].ioctl_handler( context ); return; } } } /* no magic device found, do default handling */ switch (AL_reg(context)) { case 0x00: /* GET DEVICE INFORMATION */ TRACE( "IOCTL - GET DEVICE INFORMATION - %d\n", BX_reg(context) ); if (IsConsoleIOHandle || GetFileType(handle) == FILE_TYPE_CHAR) { /* * Returns attribute word in DX: * Bit 14 - Device driver can process IOCTL requests. * Bit 13 - Output until busy supported. * Bit 11 - Driver supports OPEN/CLOSE calls. * Bit 8 - Unknown. * Bit 7 - Set (indicates device). * Bit 6 - EOF on input. * Bit 5 - Raw (binary) mode. * Bit 4 - Device is special (uses int29). * Bit 3 - Clock device. * Bit 2 - NUL device. * Bit 1 - Console output device. * Bit 0 - Console input device. */ SET_DX( context, IsConsoleIOHandle ? 0x80c3 : 0x80c0 /* FIXME */ ); } else { /* * Returns attribute word in DX: * Bit 15 - File is remote. * Bit 14 - Don't set file date/time on closing. * Bit 11 - Media not removable. * Bit 8 - Generate int24 if no disk space on write * or read past end of file * Bit 7 - Clear (indicates file). * Bit 6 - File has not been written. * Bit 5..0 - Drive number (0=A:,...) * * FIXME: Should check if file is on remote or removable drive. * FIXME: Should use drive file is located on (and not current). */ SET_DX( context, 0x0140 + INT21_GetCurrentDrive() ); } break; case 0x0a: /* CHECK IF HANDLE IS REMOTE */ TRACE( "IOCTL - CHECK IF HANDLE IS REMOTE - %d\n", BX_reg(context) ); /* * Returns attribute word in DX: * Bit 15 - Set if remote. * Bit 14 - Set if date/time not set on close. * * FIXME: Should check if file is on remote drive. */ SET_DX( context, 0 ); break; case 0x01: /* SET DEVICE INFORMATION */ case 0x02: /* READ FROM CHARACTER DEVICE CONTROL CHANNEL */ case 0x03: /* WRITE TO CHARACTER DEVICE CONTROL CHANNEL */ case 0x06: /* GET INPUT STATUS */ case 0x07: /* GET OUTPUT STATUS */ case 0x0c: /* GENERIC CHARACTER DEVICE REQUEST */ case 0x10: /* QUERY GENERIC IOCTL CAPABILITY */ default: INT_BARF( context, 0x21 ); break; } } /*********************************************************************** * INT21_Ioctl * * Handler for function 0x44. */ static void INT21_Ioctl( CONTEXT *context ) { switch (AL_reg(context)) { case 0x00: case 0x01: case 0x02: case 0x03: INT21_Ioctl_Char( context ); break; case 0x04: case 0x05: INT21_Ioctl_Block( context ); break; case 0x06: case 0x07: INT21_Ioctl_Char( context ); break; case 0x08: case 0x09: INT21_Ioctl_Block( context ); break; case 0x0a: INT21_Ioctl_Char( context ); break; case 0x0b: /* SET SHARING RETRY COUNT */ TRACE( "SET SHARING RETRY COUNT: Pause %d, retries %d.\n", CX_reg(context), DX_reg(context) ); if (!CX_reg(context)) { SET_AX( context, 1 ); SET_CFLAG( context ); } else { DOSDEV_SetSharingRetry( CX_reg(context), DX_reg(context) ); RESET_CFLAG( context ); } break; case 0x0c: INT21_Ioctl_Char( context ); break; case 0x0d: case 0x0e: case 0x0f: INT21_Ioctl_Block( context ); break; case 0x10: INT21_Ioctl_Char( context ); break; case 0x11: INT21_Ioctl_Block( context ); break; case 0x12: /* DR DOS - DETERMINE DOS TYPE (OBSOLETE FUNCTION) */ TRACE( "DR DOS - DETERMINE DOS TYPE (OBSOLETE FUNCTION)\n" ); SET_CFLAG(context); /* Error / This is not DR DOS. */ SET_AX( context, 0x0001 ); /* Invalid function */ break; case 0x52: /* DR DOS - DETERMINE DOS TYPE */ TRACE( "DR DOS - DETERMINE DOS TYPE\n" ); SET_CFLAG(context); /* Error / This is not DR DOS. */ SET_AX( context, 0x0001 ); /* Invalid function */ break; case 0xe0: /* Sun PC-NFS API */ TRACE( "Sun PC-NFS API\n" ); /* not installed */ break; default: INT_BARF( context, 0x21 ); } } /*********************************************************************** * INT21_Fat32 * * Handler for function 0x73. */ static BOOL INT21_Fat32( CONTEXT *context ) { switch (AL_reg(context)) { case 0x02: /* FAT32 - GET EXTENDED DPB */ { BYTE drive = INT21_MapDrive( DL_reg(context) ); WORD *ptr = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi); INT21_DPB *target = (INT21_DPB*)(ptr + 1); INT21_DPB *source; TRACE( "FAT32 - GET EXTENDED DPB %d\n", DL_reg(context) ); if ( CX_reg(context) < sizeof(INT21_DPB) + 2 || *ptr < sizeof(INT21_DPB) ) { SetLastError( ERROR_BAD_LENGTH ); return FALSE; } if ( !INT21_FillDrivePB( drive ) ) { SetLastError( ERROR_INVALID_DRIVE ); return FALSE; } source = &INT21_GetHeapPointer()->misc_dpb_list[drive]; *ptr = sizeof(INT21_DPB); *target = *source; if (LOWORD(context->Esi) != 0xF1A6) { target->driver_header = 0; target->next = 0; } else { FIXME( "Caller requested driver and next DPB pointers!\n" ); } } break; case 0x03: /* FAT32 - GET EXTENDED FREE SPACE ON DRIVE */ { WCHAR dirW[MAX_PATH]; char *dirA = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Edx ); BYTE *data = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); DWORD cluster_sectors; DWORD sector_bytes; DWORD free_clusters; DWORD total_clusters; TRACE( "FAT32 - GET EXTENDED FREE SPACE ON DRIVE %s\n", dirA ); MultiByteToWideChar(CP_OEMCP, 0, dirA, -1, dirW, MAX_PATH); if (CX_reg(context) < 44) { SetLastError( ERROR_BAD_LENGTH ); return FALSE; } if (!GetDiskFreeSpaceW( dirW, &cluster_sectors, §or_bytes, &free_clusters, &total_clusters )) return FALSE; *(WORD*) (data + 0) = 44; /* size of structure */ *(WORD*) (data + 2) = 0; /* version */ *(DWORD*)(data + 4) = cluster_sectors; *(DWORD*)(data + 8) = sector_bytes; *(DWORD*)(data + 12) = free_clusters; *(DWORD*)(data + 16) = total_clusters; /* * Below we have free/total sectors and * free/total allocation units without adjustment * for compression. We fake both using cluster information. */ *(DWORD*)(data + 20) = free_clusters * cluster_sectors; *(DWORD*)(data + 24) = total_clusters * cluster_sectors; *(DWORD*)(data + 28) = free_clusters; *(DWORD*)(data + 32) = total_clusters; /* * Between (data + 36) and (data + 43) there * are eight reserved bytes. */ } break; default: INT_BARF( context, 0x21 ); } return TRUE; } static void INT21_ConvertFindDataWtoA(WIN32_FIND_DATAA *dataA, const WIN32_FIND_DATAW *dataW) { dataA->dwFileAttributes = dataW->dwFileAttributes; dataA->ftCreationTime = dataW->ftCreationTime; dataA->ftLastAccessTime = dataW->ftLastAccessTime; dataA->ftLastWriteTime = dataW->ftLastWriteTime; dataA->nFileSizeHigh = dataW->nFileSizeHigh; dataA->nFileSizeLow = dataW->nFileSizeLow; WideCharToMultiByte( CP_OEMCP, 0, dataW->cFileName, -1, dataA->cFileName, sizeof(dataA->cFileName), NULL, NULL ); WideCharToMultiByte( CP_OEMCP, 0, dataW->cAlternateFileName, -1, dataA->cAlternateFileName, sizeof(dataA->cAlternateFileName), NULL, NULL ); } /*********************************************************************** * INT21_LongFilename * * Handler for function 0x71. */ static void INT21_LongFilename( CONTEXT *context ) { BOOL bSetDOSExtendedError = FALSE; WCHAR pathW[MAX_PATH]; char* pathA; switch (AL_reg(context)) { case 0x0d: /* RESET DRIVE */ INT_BARF( context, 0x21 ); break; case 0x39: /* LONG FILENAME - MAKE DIRECTORY */ if (!INT21_CreateDirectory( context )) bSetDOSExtendedError = TRUE; break; case 0x3a: /* LONG FILENAME - REMOVE DIRECTORY */ pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); TRACE( "LONG FILENAME - REMOVE DIRECTORY %s\n", pathA); MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH); if (!RemoveDirectoryW( pathW )) bSetDOSExtendedError = TRUE; break; case 0x3b: /* LONG FILENAME - CHANGE DIRECTORY */ if (!INT21_SetCurrentDirectory( context )) bSetDOSExtendedError = TRUE; break; case 0x41: /* LONG FILENAME - DELETE FILE */ pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); TRACE( "LONG FILENAME - DELETE FILE %s\n", pathA ); MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH); if (!DeleteFileW( pathW )) bSetDOSExtendedError = TRUE; break; case 0x43: /* LONG FILENAME - EXTENDED GET/SET FILE ATTRIBUTES */ if (!INT21_FileAttributes( context, BL_reg(context), TRUE )) bSetDOSExtendedError = TRUE; break; case 0x47: /* LONG FILENAME - GET CURRENT DIRECTORY */ if (!INT21_GetCurrentDirectory( context, TRUE )) bSetDOSExtendedError = TRUE; break; case 0x4e: /* LONG FILENAME - FIND FIRST MATCHING FILE */ { HANDLE handle; HGLOBAL16 h16; WIN32_FIND_DATAW dataW; WIN32_FIND_DATAA* dataA; pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs,context->Edx); TRACE(" LONG FILENAME - FIND FIRST MATCHING FILE for %s\n", pathA); MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH); handle = FindFirstFileW(pathW, &dataW); dataA = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi); if (handle != INVALID_HANDLE_VALUE && (h16 = GlobalAlloc16(GMEM_MOVEABLE, sizeof(handle)))) { HANDLE* ptr = GlobalLock16( h16 ); *ptr = handle; WIN32_GlobalUnlock16( h16 ); SET_AX( context, h16 ); INT21_ConvertFindDataWtoA(dataA, &dataW); } else { if (handle != INVALID_HANDLE_VALUE) FindClose(handle); SET_AX( context, INVALID_HANDLE_VALUE16); bSetDOSExtendedError = TRUE; } } break; case 0x4f: /* LONG FILENAME - FIND NEXT MATCHING FILE */ { HGLOBAL16 h16 = BX_reg(context); HANDLE* ptr; WIN32_FIND_DATAW dataW; WIN32_FIND_DATAA* dataA; TRACE("LONG FILENAME - FIND NEXT MATCHING FILE for handle %d\n", BX_reg(context)); dataA = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi); if (h16 != INVALID_HANDLE_VALUE16 && (ptr = GlobalLock16( h16 ))) { if (!FindNextFileW(*ptr, &dataW)) bSetDOSExtendedError = TRUE; else INT21_ConvertFindDataWtoA(dataA, &dataW); WIN32_GlobalUnlock16( h16 ); } else { SetLastError( ERROR_INVALID_HANDLE ); bSetDOSExtendedError = TRUE; } } break; case 0x56: /* LONG FILENAME - RENAME FILE */ if (!INT21_RenameFile(context)) bSetDOSExtendedError = TRUE; break; case 0x60: /* LONG FILENAME - CONVERT PATH */ { WCHAR res[MAX_PATH]; switch (CL_reg(context)) { case 0x00: /* "truename" - Canonicalize path */ /* * FIXME: This is not 100% equal to 0x01 case, * if you fix this, fix int21 subfunction 0x60, too. */ case 0x01: /* Get short filename or path */ MultiByteToWideChar(CP_OEMCP, 0, CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi), -1, pathW, MAX_PATH); if (!GetShortPathNameW(pathW, res, 67)) bSetDOSExtendedError = TRUE; else { SET_AX( context, 0 ); WideCharToMultiByte(CP_OEMCP, 0, res, -1, CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi), 67, NULL, NULL); } break; case 0x02: /* Get canonical long filename or path */ MultiByteToWideChar(CP_OEMCP, 0, CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi), -1, pathW, MAX_PATH); if (!GetFullPathNameW(pathW, 128, res, NULL)) bSetDOSExtendedError = TRUE; else { SET_AX( context, 0 ); WideCharToMultiByte(CP_OEMCP, 0, res, -1, CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi), 128, NULL, NULL); } break; default: FIXME("Unimplemented long file name function:\n"); INT_BARF( context, 0x21 ); SET_CFLAG(context); SET_AL( context, 0 ); break; } } break; case 0x6c: /* LONG FILENAME - CREATE OR OPEN FILE */ if (!INT21_CreateFile( context, context->Esi, TRUE, BX_reg(context), DL_reg(context) )) bSetDOSExtendedError = TRUE; break; case 0xa0: /* LONG FILENAME - GET VOLUME INFORMATION */ { DWORD filename_len, flags; WCHAR dstW[8]; pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs,context->Edx); TRACE("LONG FILENAME - GET VOLUME INFORMATION for drive having root dir '%s'.\n", pathA); SET_AX( context, 0 ); MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH); if (!GetVolumeInformationW( pathW, NULL, 0, NULL, &filename_len, &flags, dstW, 8 )) { INT_BARF( context, 0x21 ); SET_CFLAG(context); break; } SET_BX( context, flags | 0x4000 ); /* support for LFN functions */ SET_CX( context, filename_len ); SET_DX( context, MAX_PATH ); /* FIXME: which len if DRIVE_SHORT_NAMES ? */ WideCharToMultiByte(CP_OEMCP, 0, dstW, -1, CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi), 8, NULL, NULL); } break; case 0xa1: /* LONG FILENAME - "FindClose" - TERMINATE DIRECTORY SEARCH */ { HGLOBAL16 h16 = BX_reg(context); HANDLE* ptr; TRACE("LONG FILENAME - FINDCLOSE for handle %d\n", BX_reg(context)); if (h16 != INVALID_HANDLE_VALUE16 && (ptr = GlobalLock16( h16 ))) { if (!FindClose( *ptr )) bSetDOSExtendedError = TRUE; WIN32_GlobalUnlock16( h16 ); GlobalFree16( h16 ); } else { SetLastError( ERROR_INVALID_HANDLE ); bSetDOSExtendedError = TRUE; } } break; case 0xa6: /* LONG FILENAME - GET FILE INFO BY HANDLE */ { HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context)); BY_HANDLE_FILE_INFORMATION *info = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); TRACE( "LONG FILENAME - GET FILE INFO BY HANDLE\n" ); if (!GetFileInformationByHandle(handle, info)) bSetDOSExtendedError = TRUE; } break; case 0xa7: /* LONG FILENAME - CONVERT TIME */ switch (BL_reg(context)) { case 0x00: /* FILE TIME TO DOS TIME */ { WORD date, time; FILETIME *filetime = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi); TRACE( "LONG FILENAME - FILE TIME TO DOS TIME\n" ); FileTimeToDosDateTime( filetime, &date, &time ); SET_DX( context, date ); SET_CX( context, time ); /* * FIXME: BH has number of 10-millisecond units * past time in CX. */ SET_BH( context, 0 ); } break; case 0x01: /* DOS TIME TO FILE TIME */ { FILETIME *filetime = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi); TRACE( "LONG FILENAME - DOS TIME TO FILE TIME\n" ); /* * FIXME: BH has number of 10-millisecond units * past time in CX. */ DosDateTimeToFileTime( DX_reg(context), CX_reg(context), filetime ); } break; default: INT_BARF( context, 0x21 ); break; } break; case 0xa8: /* LONG FILENAME - GENERATE SHORT FILENAME */ case 0xa9: /* LONG FILENAME - SERVER CREATE OR OPEN FILE */ case 0xaa: /* LONG FILENAME - SUBST */ default: FIXME("Unimplemented long file name function:\n"); INT_BARF( context, 0x21 ); SET_CFLAG(context); SET_AL( context, 0 ); break; } if (bSetDOSExtendedError) { SET_AX( context, GetLastError() ); SET_CFLAG( context ); } } /*********************************************************************** * INT21_RenameFile * * Handler for: * - function 0x56 * - subfunction 0x56 of function 0x71 * - subfunction 0xff of function 0x43 (CL == 0x56) */ static BOOL INT21_RenameFile( CONTEXT *context ) { WCHAR fromW[MAX_PATH]; WCHAR toW[MAX_PATH]; char *fromA = CTX_SEG_OFF_TO_LIN(context, context->SegDs,context->Edx); char *toA = CTX_SEG_OFF_TO_LIN(context, context->SegEs,context->Edi); TRACE( "RENAME FILE %s to %s\n", fromA, toA ); MultiByteToWideChar(CP_OEMCP, 0, fromA, -1, fromW, MAX_PATH); MultiByteToWideChar(CP_OEMCP, 0, toA, -1, toW, MAX_PATH); return MoveFileW( fromW, toW ); } /*********************************************************************** * INT21_NetworkFunc * * Handler for: * - function 0x5e */ static BOOL INT21_NetworkFunc (CONTEXT *context) { switch (AL_reg(context)) { case 0x00: /* Get machine name. */ { WCHAR dstW[MAX_COMPUTERNAME_LENGTH + 1]; DWORD s = ARRAY_SIZE(dstW); int len; char *dst = CTX_SEG_OFF_TO_LIN (context,context->SegDs,context->Edx); TRACE("getting machine name to %p\n", dst); if (!GetComputerNameW(dstW, &s) || !WideCharToMultiByte(CP_OEMCP, 0, dstW, -1, dst, 16, NULL, NULL)) { WARN("failed!\n"); SetLastError( ER_NoNetwork ); return TRUE; } for (len = strlen(dst); len < 15; len++) dst[len] = ' '; dst[15] = 0; SET_CH( context, 1 ); /* Valid */ SET_CL( context, 1 ); /* NETbios number??? */ TRACE("returning %s\n", debugstr_an(dst, 16)); return FALSE; } default: SetLastError( ER_NoNetwork ); return TRUE; } } /****************************************************************** * INT21_GetDiskSerialNumber * */ static int INT21_GetDiskSerialNumber( CONTEXT *context ) { BYTE *dataptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); WCHAR path[] = {'A',':','\\',0}, label[11]; DWORD serial; path[0] += INT21_MapDrive(BL_reg(context)); if (!GetVolumeInformationW( path, label, 11, &serial, NULL, NULL, NULL, 0)) { SetLastError( ERROR_INVALID_DRIVE ); return 0; } *(WORD *)dataptr = 0; memcpy(dataptr + 2, &serial, sizeof(DWORD)); WideCharToMultiByte(CP_OEMCP, 0, label, 11, (LPSTR)dataptr + 6, 11, NULL, NULL); memcpy(dataptr + 17, "FAT16 ", 8); return 1; } /****************************************************************** * INT21_SetDiskSerialNumber * */ static BOOL INT21_SetDiskSerialNumber( CONTEXT *context ) { #if 0 BYTE *dataptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); int drive = INT21_MapDrive(BL_reg(context)); if (!is_valid_drive(drive)) { SetLastError( ERROR_INVALID_DRIVE ); return FALSE; } DRIVE_SetSerialNumber( drive, *(DWORD *)(dataptr + 2) ); return TRUE; #else FIXME("Setting drive serial number is no longer supported\n"); SetLastError( ERROR_NOT_SUPPORTED ); return FALSE; #endif } /****************************************************************** * INT21_GetFreeDiskSpace * */ static BOOL INT21_GetFreeDiskSpace( CONTEXT *context ) { DWORD cluster_sectors, sector_bytes, free_clusters, total_clusters; WCHAR root[] = {'A',':','\\',0}; const DWORD max_clusters = 0x3d83; const DWORD max_sectors_per_cluster = 0x7f; const DWORD max_bytes_per_sector = 0x200; root[0] += INT21_MapDrive(DL_reg(context)); if (!GetDiskFreeSpaceW( root, &cluster_sectors, §or_bytes, &free_clusters, &total_clusters )) return FALSE; /* Some old win31 apps (Lotus SmartSuite 5.1) crap out if there's too * much disk space, so Windows XP seems to apply the following limits: * cluster_sectors <= 0x7f * sector size <= 0x200 * clusters <= 0x3D83 * This means total reported space is limited to about 1GB. */ /* Make sure bytes-per-sector is in [, max] */ while (sector_bytes > max_bytes_per_sector) { sector_bytes >>= 1; free_clusters <<= 1; total_clusters <<= 1; } /* Then make sure sectors-per-cluster is in [max/2, max]. */ while (cluster_sectors <= max_sectors_per_cluster/2) { cluster_sectors <<= 1; free_clusters >>= 1; total_clusters >>= 1; } while (cluster_sectors > max_sectors_per_cluster) { cluster_sectors >>= 1; free_clusters <<= 1; total_clusters <<= 1; } /* scale up sectors_per_cluster to exactly max_sectors_per_cluster. * We could skip this, but that would impose an artificially low * limit on reported disk space. * To avoid overflow, first apply a preliminary cap on sector count; * this will not affect the correctness of the final result, * because if the preliminary cap hits, the final one will, too. */ if (total_clusters > 4 * max_clusters) total_clusters = 4 * max_clusters; if (free_clusters > 4 * max_clusters) free_clusters = 4 * max_clusters; if (cluster_sectors < max_sectors_per_cluster) { free_clusters *= cluster_sectors; free_clusters /= max_sectors_per_cluster; total_clusters *= cluster_sectors; total_clusters /= max_sectors_per_cluster; cluster_sectors = max_sectors_per_cluster; } /* Finally, apply real cluster count cap. */ if (total_clusters > max_clusters) total_clusters = max_clusters; if (free_clusters > max_clusters) free_clusters = max_clusters; SET_AX( context, cluster_sectors ); SET_BX( context, free_clusters ); SET_CX( context, sector_bytes ); SET_DX( context, total_clusters ); return TRUE; } /****************************************************************** * INT21_GetDriveAllocInfo * */ static BOOL INT21_GetDriveAllocInfo( CONTEXT *context, BYTE drive ) { INT21_DPB *dpb; drive = INT21_MapDrive( drive ); if (!INT21_FillDrivePB( drive )) return FALSE; dpb = &(INT21_GetHeapPointer()->misc_dpb_list[drive]); SET_AL( context, dpb->cluster_sectors + 1 ); SET_CX( context, dpb->sector_bytes ); SET_DX( context, dpb->num_clusters1 ); context->SegDs = INT21_GetHeapSelector( context ); SET_BX( context, offsetof( INT21_HEAP, misc_dpb_list[drive].media_ID ) ); return TRUE; } /*********************************************************************** * INT21_GetExtendedError */ static void INT21_GetExtendedError( CONTEXT *context ) { BYTE class, action, locus; WORD error = GetLastError(); switch(error) { case ERROR_SUCCESS: class = action = locus = 0; break; case ERROR_DIR_NOT_EMPTY: class = EC_Exists; action = SA_Ignore; locus = EL_Disk; break; case ERROR_ACCESS_DENIED: class = EC_AccessDenied; action = SA_Abort; locus = EL_Disk; break; case ERROR_CANNOT_MAKE: class = EC_AccessDenied; action = SA_Abort; locus = EL_Unknown; break; case ERROR_DISK_FULL: case ERROR_HANDLE_DISK_FULL: class = EC_MediaError; action = SA_Abort; locus = EL_Disk; break; case ERROR_FILE_EXISTS: case ERROR_ALREADY_EXISTS: class = EC_Exists; action = SA_Abort; locus = EL_Disk; break; case ERROR_FILE_NOT_FOUND: case ERROR_PATH_NOT_FOUND: case ERROR_INVALID_NAME: class = EC_NotFound; action = SA_Abort; locus = EL_Disk; break; case ERROR_GEN_FAILURE: class = EC_SystemFailure; action = SA_Abort; locus = EL_Unknown; break; case ERROR_INVALID_DRIVE: class = EC_MediaError; action = SA_Abort; locus = EL_Disk; break; case ERROR_INVALID_HANDLE: class = EC_ProgramError; action = SA_Abort; locus = EL_Disk; break; case ERROR_LOCK_VIOLATION: class = EC_AccessDenied; action = SA_Abort; locus = EL_Disk; break; case ERROR_NO_MORE_FILES: class = EC_NotFound; action = SA_Prompt; locus = EL_Disk; break; case ER_NoNetwork: class = EC_NotFound; action = SA_Abort; locus = EL_Network; break; case ERROR_NOT_ENOUGH_MEMORY: class = EC_OutOfResource; action = SA_Abort; locus = EL_Memory; break; case ERROR_SEEK: class = EC_NotFound; action = SA_Ignore; locus = EL_Disk; break; case ERROR_SHARING_VIOLATION: class = EC_Temporary; action = SA_Retry; locus = EL_Disk; break; case ERROR_TOO_MANY_OPEN_FILES: class = EC_ProgramError; action = SA_Abort; locus = EL_Disk; break; default: FIXME("Unknown error %d\n", error ); class = EC_SystemFailure; action = SA_Abort; locus = EL_Unknown; break; } TRACE("GET EXTENDED ERROR code 0x%02x class 0x%02x action 0x%02x locus %02x\n", error, class, action, locus ); SET_AX( context, error ); SET_BH( context, class ); SET_BL( context, action ); SET_CH( context, locus ); } static BOOL INT21_CreateTempFile( CONTEXT *context ) { static int counter = 0; char *name = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx ); char *p = name + strlen(name); /* despite what Ralf Brown says, some programs seem to call without * ending backslash (DOS accepts that, so we accept it too) */ if ((p == name) || (p[-1] != '\\')) *p++ = '\\'; for (;;) { sprintf( p, "wine%04x.%03d", (int)getpid(), counter ); counter = (counter + 1) % 1000; SET_AX( context, Win32HandleToDosFileHandle( CreateFileA( name, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_NEW, 0, 0 ) ) ); if (AX_reg(context) != HFILE_ERROR16) { TRACE("created %s\n", name ); return TRUE; } if (GetLastError() != ERROR_FILE_EXISTS) return FALSE; } } /*********************************************************************** * DOSFS_ToDosFCBFormat * * Convert a file name to DOS FCB format (8+3 chars, padded with blanks), * expanding wild cards and converting to upper-case in the process. * File name can be terminated by '\0', '\\' or '/'. * Return FALSE if the name is not a valid DOS name. * 'buffer' must be at least 12 characters long. */ /* Chars we don't want to see in DOS file names */ static BOOL INT21_ToDosFCBFormat( LPCWSTR name, LPWSTR buffer ) { static const WCHAR invalid_chars[] = {'*','?','<','>','|','\\','"','+','=',',',';','[',']',' ','\345',0}; LPCWSTR p = name; int i; /* Check for "." and ".." */ if (*p == '.') { p++; buffer[0] = '.'; for(i = 1; i < 11; i++) buffer[i] = ' '; buffer[11] = 0; if (*p == '.') { buffer[1] = '.'; p++; } return (!*p || (*p == '/') || (*p == '\\')); } for (i = 0; i < 8; i++) { switch(*p) { case '\0': case '\\': case '/': case '.': buffer[i] = ' '; break; case '?': p++; /* fall through */ case '*': buffer[i] = '?'; break; default: if (strchrW( invalid_chars, *p )) return FALSE; buffer[i] = toupperW(*p); p++; break; } } if (*p == '*') { /* Skip all chars after wildcard up to first dot */ while (*p && (*p != '/') && (*p != '\\') && (*p != '.')) p++; } else { /* Check if name too long */ if (*p && (*p != '/') && (*p != '\\') && (*p != '.')) return FALSE; } if (*p == '.') p++; /* Skip dot */ for (i = 8; i < 11; i++) { switch(*p) { case '\0': case '\\': case '/': buffer[i] = ' '; break; case '.': return FALSE; /* Second extension not allowed */ case '?': p++; /* fall through */ case '*': buffer[i] = '?'; break; default: if (strchrW( invalid_chars, *p )) return FALSE; buffer[i] = toupperW(*p); p++; break; } } buffer[11] = '\0'; /* at most 3 character of the extension are processed * is something behind this ? */ while (*p == '*' || *p == ' ') p++; /* skip wildcards and spaces */ return (!*p || (*p == '/') || (*p == '\\')); } static HANDLE INT21_FindHandle; static const WCHAR *INT21_FindPath; /* will point to current dta->fullPath search */ /****************************************************************** * INT21_FindFirst */ static BOOL INT21_FindFirst( CONTEXT *context ) { WCHAR *p, *q; const char *path; FINDFILE_DTA *dta = (FINDFILE_DTA *)INT21_GetCurrentDTA(context); WCHAR maskW[12], pathW[MAX_PATH]; static const WCHAR wildcardW[] = {'*','.','*',0}; path = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); MultiByteToWideChar(CP_OEMCP, 0, path, -1, pathW, MAX_PATH); p = strrchrW( pathW, '\\'); q = strrchrW( pathW, '/'); if (q>p) p = q; if (!p) { if (pathW[0] && pathW[1] == ':') p = pathW + 2; else p = pathW; } else p++; /* Note: terminating NULL in dta->mask overwrites dta->search_attr * (doesn't matter as it is set below anyway) */ if (!INT21_ToDosFCBFormat( p, maskW )) { SetLastError( ERROR_NO_MORE_FILES ); SET_AX( context, ERROR_NO_MORE_FILES ); SET_CFLAG(context); return FALSE; } WideCharToMultiByte(CP_OEMCP, 0, maskW, 12, dta->mask, sizeof(dta->mask), NULL, NULL); dta->fullPath = HeapAlloc( GetProcessHeap(), 0, sizeof(wildcardW) + (p - pathW)*sizeof(WCHAR) ); memcpy( dta->fullPath, pathW, (p - pathW) * sizeof(WCHAR) ); memcpy( dta->fullPath + (p - pathW), wildcardW, sizeof(wildcardW) ); /* we must have a fully qualified file name in dta->fullPath * (we could have a UNC path, but this would lead to some errors later on) */ dta->drive = toupperW(dta->fullPath[0]) - 'A'; dta->count = 0; dta->search_attr = CL_reg(context); return TRUE; } /****************************************************************** * match_short * * Check is a short path name (DTA unicode) matches a mask (FCB ansi) */ static BOOL match_short(LPCWSTR shortW, LPCSTR maskA) { WCHAR mask[11], file[12]; int i; if (!INT21_ToDosFCBFormat( shortW, file )) return FALSE; MultiByteToWideChar(CP_OEMCP, 0, maskA, 11, mask, 11); for (i = 0; i < 11; i++) if (mask[i] != '?' && mask[i] != file[i]) return FALSE; return TRUE; } static unsigned INT21_FindHelper(LPCWSTR fullPath, unsigned drive, unsigned count, LPCSTR mask, unsigned search_attr, WIN32_FIND_DATAW* entry) { unsigned ncalls; const int attr_win32 = (-1 & ~(FA_NORMAL | FA_RDONLY | FA_HIDDEN | FA_SYSTEM | FA_LABEL | FA_DIRECTORY | FA_ARCHIVE | FA_UNUSED)); const WCHAR croot[] = {'C',':','\\','*','.','*','\0'}; char name[9] = {0}; GetModuleName16(GetCurrentTask(), name, 9); BOOL skip_large = !stricmp(name, "acmsetup") && !wcsicmp(fullPath, croot); if ((search_attr & ~(FA_UNUSED | FA_ARCHIVE | FA_RDONLY | attr_win32)) == FA_LABEL) { WCHAR path[] = {' ',':','\\',0}; WCHAR volname[MAX_PATH]; if (count) return 0; path[0] = drive + 'A'; volname[0] = '\0'; entry->cAlternateFileName[0] = '\0'; if (!GetVolumeInformationW(path, volname, MAX_PATH, NULL, NULL, NULL, NULL, 0)) return 0; if (!volname[0]) return 0; RtlSecondsSince1970ToTime( 0, (LARGE_INTEGER *)&entry->ftCreationTime ); RtlSecondsSince1970ToTime( 0, (LARGE_INTEGER *)&entry->ftLastAccessTime ); RtlSecondsSince1970ToTime( 0, (LARGE_INTEGER *)&entry->ftLastWriteTime ); entry->dwFileAttributes = FA_LABEL; entry->nFileSizeHigh = entry->nFileSizeLow = 0; entry->cAlternateFileName[12] = '\0'; wcsncpy(entry->cAlternateFileName, volname, 8); if (wcslen(volname) > 8) { entry->cAlternateFileName[8] = '.'; wcsncpy(entry->cAlternateFileName + 9, volname + 8, 3); } TRACE("returning %s as label\n", debugstr_w(entry->cAlternateFileName)); return 1; } if (!INT21_FindHandle || INT21_FindPath != fullPath || count == 0) { if (INT21_FindHandle) FindClose(INT21_FindHandle); INT21_FindHandle = FindFirstFileW(fullPath, entry); if (INT21_FindHandle == INVALID_HANDLE_VALUE) { INT21_FindHandle = 0; return 0; } INT21_FindPath = fullPath; /* we need to resync search */ ncalls = count; } else ncalls = 1; while (ncalls-- != 0) { if (!FindNextFileW(INT21_FindHandle, entry)) { FindClose(INT21_FindHandle); INT21_FindHandle = 0; return 0; } } while (count < 0xffff) { if (skip_large && (entry->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { const WCHAR *skip_dirs[] = {(const WCHAR []){'U','s','e','r','s','\0'}, (const WCHAR []){'P','r','o','g','r','a','m',' ','F','i','l','e','s',' ','(','x','8','6',')','\0'}, (const WCHAR []){'P','r','o','g','r','a','m',' ','F','i','l','e','s','\0'}, (const WCHAR []){'P','r','o','g','r','a','m','D','a','t','a','\0'}, (const WCHAR []){'W','i','n','d','o','w','s','\0'}, (const WCHAR []){'D','o','c','u','m','e','n','t','s',' ','a','n','d',' ','S','e','t','t','i','n','g','s','\0'}}; for (int i = 0; i < ARRAY_SIZE(skip_dirs); i++) { if (!wcscmp(entry->cFileName, skip_dirs[i])) { if (!FindNextFileW(INT21_FindHandle, entry)) { FindClose(INT21_FindHandle); INT21_FindHandle = 0; return 0; } if (!(entry->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) break; i = -1; } } } count++; /* Check the file attributes, and path */ if (!(entry->dwFileAttributes & ~attr_win32 & ~search_attr) && match_short(entry->cAlternateFileName[0] ? entry->cAlternateFileName : entry->cFileName, mask)) { entry->dwFileAttributes &= ~attr_win32; return count; } if (!FindNextFileW(INT21_FindHandle, entry)) { FindClose(INT21_FindHandle); INT21_FindHandle = 0; return 0; } } WARN("Too many directory entries in %s\n", debugstr_w(fullPath) ); return 0; } /****************************************************************** * INT21_FindNext */ static BOOL INT21_FindNext( CONTEXT *context ) { FINDFILE_DTA *dta = (FINDFILE_DTA *)INT21_GetCurrentDTA(context); DWORD attr = dta->search_attr | FA_UNUSED | FA_ARCHIVE | FA_RDONLY; WIN32_FIND_DATAW entry; int n; if (!dta->fullPath) return FALSE; n = INT21_FindHelper(dta->fullPath, dta->drive, dta->count, dta->mask, attr, &entry); if (n) { dta->fileattr = entry.dwFileAttributes; dta->filesize = entry.nFileSizeLow; FileTimeToDosDateTime( entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ? &entry.ftCreationTime : &entry.ftLastWriteTime, &dta->filedate, &dta->filetime ); memset(dta->filename, 0, 13); if (entry.cAlternateFileName[0]) { /* shoud be UPPER CASE */ for (int i = 0; i < 13; i++) entry.cAlternateFileName[i] = toupperW(entry.cAlternateFileName[i]); WideCharToMultiByte(CP_OEMCP, 0, entry.cAlternateFileName, -1, dta->filename, 13, NULL, NULL); } else { /* shoud be UPPER CASE */ for (int i = 0; i < 13; i++) entry.cFileName[i] = toupperW(entry.cFileName[i]); WideCharToMultiByte(CP_OEMCP, 0, entry.cFileName, -1, dta->filename, 13, NULL, NULL); } if (!memchr(dta->mask,'?',11)) { /* wildcardless search, release resources in case no findnext will * be issued, and as a workaround in case file creation messes up * findnext, as sometimes happens with pkunzip */ HeapFree( GetProcessHeap(), 0, dta->fullPath ); INT21_FindPath = dta->fullPath = NULL; } dta->count = n; return TRUE; } HeapFree( GetProcessHeap(), 0, dta->fullPath ); INT21_FindPath = dta->fullPath = NULL; return FALSE; } /* microsoft's programmers should be shot for using CP/M style int21 calls in Windows for Workgroup's winfile.exe */ /****************************************************************** * INT21_FindFirstFCB * */ static BOOL INT21_FindFirstFCB( CONTEXT *context ) { BYTE *fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); FINDFILE_FCB *pFCB; int drive; WCHAR p[] = {' ',':',}; if (*fcb == 0xff) pFCB = (FINDFILE_FCB *)(fcb + 7); else pFCB = (FINDFILE_FCB *)fcb; drive = INT21_MapDrive( pFCB->drive ); if (drive == MAX_DOS_DRIVES) return FALSE; p[0] = 'A' + drive; pFCB->fullPath = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); if (!pFCB->fullPath) return FALSE; GetLongPathNameW(p, pFCB->fullPath, MAX_PATH); pFCB->count = 0; return TRUE; } /****************************************************************** * INT21_FindNextFCB * */ static BOOL INT21_FindNextFCB( CONTEXT *context ) { BYTE *fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); FINDFILE_FCB *pFCB; LPBYTE pResult = INT21_GetCurrentDTA(context); DOS_DIRENTRY_LAYOUT *ddl; WIN32_FIND_DATAW entry; BYTE attr; int n; WCHAR nameW[12]; if (*fcb == 0xff) /* extended FCB ? */ { attr = fcb[6]; pFCB = (FINDFILE_FCB *)(fcb + 7); } else { attr = 0; pFCB = (FINDFILE_FCB *)fcb; } if (!pFCB->fullPath) return FALSE; n = INT21_FindHelper(pFCB->fullPath, INT21_MapDrive( pFCB->drive ), pFCB->count, pFCB->filename, attr, &entry); if (!n) { HeapFree( GetProcessHeap(), 0, pFCB->fullPath ); INT21_FindPath = pFCB->fullPath = NULL; return FALSE; } pFCB->count += n; if (*fcb == 0xff) { /* place extended FCB header before pResult if called with extended FCB */ *pResult = 0xff; pResult += 6; /* leave reserved field behind */ *pResult++ = entry.dwFileAttributes; } *pResult++ = INT21_MapDrive( pFCB->drive ); /* DOS_DIRENTRY_LAYOUT after current drive number */ ddl = (DOS_DIRENTRY_LAYOUT*)pResult; ddl->fileattr = entry.dwFileAttributes; ddl->cluster = 0; /* what else? */ ddl->filesize = entry.nFileSizeLow; memset( ddl->reserved, 0, sizeof(ddl->reserved) ); FileTimeToDosDateTime( &entry.ftLastWriteTime, &ddl->filedate, &ddl->filetime ); /* Convert file name to FCB format */ if (entry.cAlternateFileName[0]) { if (entry.dwFileAttributes == FA_LABEL) { wcsncpy(nameW, entry.cAlternateFileName, 8); if (entry.cAlternateFileName[8] == '.') wcsncpy(nameW + 8, entry.cAlternateFileName + 9, 3); } else INT21_ToDosFCBFormat( entry.cAlternateFileName, nameW ); } else INT21_ToDosFCBFormat( entry.cFileName, nameW ); WideCharToMultiByte(CP_OEMCP, 0, nameW, 11, ddl->filename, 11, NULL, NULL); return TRUE; } /****************************************************************** * INT21_ParseFileNameIntoFCB * */ static void INT21_ParseFileNameIntoFCB( CONTEXT *context ) { char *filename = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi ); char *fcb = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi ); char *s; WCHAR *buffer; WCHAR fcbW[12]; INT buffer_len, len; SET_AL( context, 0xff ); /* failed */ TRACE("filename: '%s'\n", filename); s = filename; while (*s && (*s != ' ') && (*s != '\r') && (*s != '\n')) s++; len = filename - s; buffer_len = MultiByteToWideChar(CP_OEMCP, 0, filename, len, NULL, 0); buffer = HeapAlloc( GetProcessHeap(), 0, (buffer_len + 1) * sizeof(WCHAR)); len = MultiByteToWideChar(CP_OEMCP, 0, filename, len, buffer, buffer_len); buffer[len] = 0; INT21_ToDosFCBFormat(buffer, fcbW); HeapFree(GetProcessHeap(), 0, buffer); WideCharToMultiByte(CP_OEMCP, 0, fcbW, 12, fcb + 1, 12, NULL, NULL); *fcb = 0; TRACE("FCB: '%s'\n", fcb + 1); SET_AL( context, ((strchr(filename, '*')) || (strchr(filename, '$'))) != 0 ); /* point DS:SI to first unparsed character */ SET_SI( context, context->Esi + (int)s - (int)filename ); } static BOOL INT21_Dup2(HFILE16 hFile1, HFILE16 hFile2) { HFILE16 res = HFILE_ERROR16; HANDLE handle, new_handle; #define DOS_TABLE_SIZE 256 DWORD map[DOS_TABLE_SIZE / 32]; int i; handle = DosFileHandleToWin32Handle(hFile1); if (handle == INVALID_HANDLE_VALUE) return FALSE; _lclose16(hFile2); /* now loop to allocate the same one... */ memset(map, 0, sizeof(map)); for (i = 0; i < DOS_TABLE_SIZE; i++) { if (!DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), &new_handle, 0, FALSE, DUPLICATE_SAME_ACCESS)) { res = HFILE_ERROR16; break; } res = Win32HandleToDosFileHandle(new_handle); if (res == HFILE_ERROR16 || res == hFile2) break; map[res / 32] |= 1 << (res % 32); } /* clean up the allocated slots */ for (i = 0; i < DOS_TABLE_SIZE; i++) { if (map[i / 32] & (1 << (i % 32))) _lclose16((HFILE16)i); } return res == hFile2; } /*********************************************************************** * DOSVM_Int21Handler * * Interrupt 0x21 handler. */ void WINAPI DOSVM_Int21Handler( CONTEXT *context ) { BOOL bSetDOSExtendedError = FALSE; TRACE( "AX=%04x BX=%04x CX=%04x DX=%04x " "SI=%04x DI=%04x DS=%04x ES=%04x EFL=%08x\n", AX_reg(context), BX_reg(context), CX_reg(context), DX_reg(context), SI_reg(context), DI_reg(context), (WORD)context->SegDs, (WORD)context->SegEs, context->EFlags ); /* * Extended error is used by (at least) functions 0x2f to 0x62. * Function 0x59 returns extended error and error should not * be cleared before handling the function. */ if (AH_reg(context) >= 0x2f && AH_reg(context) != 0x59) SetLastError(0); RESET_CFLAG(context); /* Not sure if this is a good idea. */ switch(AH_reg(context)) { case 0x00: /* TERMINATE PROGRAM */ TRACE("TERMINATE PROGRAM\n"); if (DOSVM_IsWin16()) DOSVM_Exit( 0 ); else if(ISV86(context)) MZ_Exit( context, FALSE, 0 ); else ERR( "Called from DOS protected mode\n" ); break; case 0x01: /* READ CHARACTER FROM STANDARD INPUT, WITH ECHO */ { BYTE ascii; TRACE("DIRECT CHARACTER INPUT WITH ECHO\n"); INT21_ReadChar( &ascii, context ); SET_AL( context, ascii ); /* * FIXME: What to echo when extended keycodes are read? */ DOSVM_PutChar(AL_reg(context)); } break; case 0x02: /* WRITE CHARACTER TO STANDARD OUTPUT */ TRACE("Write Character to Standard Output\n"); DOSVM_PutChar(DL_reg(context)); break; case 0x04: /* WRITE CHARACTER TO STDAUX */ { static BOOL fixme_once; if (!fixme_once) { fixme_once = TRUE; FIXME("WRITE CHARACTER TO STDAUX\n"); } DPRINTF("%c", DL_reg(context)); } break; case 0x03: /* READ CHARACTER FROM STDAUX */ case 0x05: /* WRITE CHARACTER TO PRINTER */ INT_BARF( context, 0x21 ); break; case 0x06: /* DIRECT CONSOLE IN/OUTPUT */ if (DL_reg(context) == 0xff) { TRACE("Direct Console Input\n"); if (INT21_ReadChar( NULL, NULL )) { BYTE ascii; INT21_ReadChar( &ascii, context ); SET_AL( context, ascii ); RESET_ZFLAG( context ); } else { /* no character available */ SET_AL( context, 0 ); SET_ZFLAG( context ); } } else { TRACE("Direct Console Output\n"); DOSVM_PutChar(DL_reg(context)); /* * At least DOS versions 2.1-7.0 return character * that was written in AL register. */ SET_AL( context, DL_reg(context) ); } break; case 0x07: /* DIRECT CHARACTER INPUT WITHOUT ECHO */ { BYTE ascii; TRACE("DIRECT CHARACTER INPUT WITHOUT ECHO\n"); INT21_ReadChar( &ascii, context ); SET_AL( context, ascii ); } break; case 0x08: /* CHARACTER INPUT WITHOUT ECHO */ { BYTE ascii; TRACE("CHARACTER INPUT WITHOUT ECHO\n"); INT21_ReadChar( &ascii, context ); SET_AL( context, ascii ); } break; case 0x09: /* WRITE STRING TO STANDARD OUTPUT */ TRACE("WRITE '$'-terminated string from %04X:%04X to stdout\n", context->SegDs, DX_reg(context) ); { LPSTR data = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Edx ); LPSTR p = data; DWORD w; /* * Do NOT use strchr() to calculate the string length, * as '\0' is valid string content, too! * Maybe we should check for non-'$' strings, but DOS doesn't. */ while (*p != '$') p++; if (DOSVM_IsWin16()) WriteFile( DosFileHandleToWin32Handle(1), data, p - data, &w, NULL ); else for(; data != p; data++) DOSVM_PutChar( *data ); SET_AL( context, '$' ); /* yes, '$' (0x24) gets returned in AL */ } break; case 0x0a: /* BUFFERED INPUT */ { BYTE *ptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); WORD result; TRACE( "BUFFERED INPUT (size=%d)\n", ptr[0] ); /* * FIXME: Some documents state that * ptr[1] holds number of chars from last input which * may be recalled on entry, other documents do not mention * this at all. */ if (ptr[1]) TRACE( "Handle old chars in buffer!\n" ); /* * ptr[0] - capacity (includes terminating CR) * ptr[1] - characters read (excludes terminating CR) */ result = INT21_BufferedInput( context, ptr + 2, ptr[0] ); if (result > 0) ptr[1] = (BYTE)result - 1; else ptr[1] = 0; } break; case 0x0b: /* GET STDIN STATUS */ TRACE( "GET STDIN STATUS\n" ); { if (INT21_ReadChar( NULL, NULL )) SET_AL( context, 0xff ); /* character available */ else SET_AL( context, 0 ); /* no character available */ } break; case 0x0c: /* FLUSH BUFFER AND READ STANDARD INPUT */ { BYTE al = AL_reg(context); /* Input function to execute after flush. */ TRACE( "FLUSH BUFFER AND READ STANDARD INPUT - 0x%02x\n", al ); /* FIXME: buffers are not flushed */ /* * If AL is one of 0x01, 0x06, 0x07, 0x08, or 0x0a, * int21 function identified by AL will be called. */ if(al == 0x01 || al == 0x06 || al == 0x07 || al == 0x08 || al == 0x0a) { SET_AH( context, al ); DOSVM_Int21Handler( context ); } } break; case 0x0d: /* DISK BUFFER FLUSH */ TRACE("DISK BUFFER FLUSH ignored\n"); break; case 0x0e: /* SELECT DEFAULT DRIVE */ TRACE( "SELECT DEFAULT DRIVE - %c:\n", 'A' + DL_reg(context) ); INT21_SetCurrentDrive( DL_reg(context) ); SET_AL( context, MAX_DOS_DRIVES ); break; case 0x0f: /* OPEN FILE USING FCB */ INT21_OpenFileUsingFCB( context ); break; case 0x10: /* CLOSE FILE USING FCB */ INT21_CloseFileUsingFCB( context ); break; case 0x11: /* FIND FIRST MATCHING FILE USING FCB */ TRACE("FIND FIRST MATCHING FILE USING FCB %p\n", CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx)); if (!INT21_FindFirstFCB(context)) { SET_AL( context, 0xff ); break; } /* else fall through */ case 0x12: /* FIND NEXT MATCHING FILE USING FCB */ SET_AL( context, INT21_FindNextFCB(context) ? 0x00 : 0xff ); break; case 0x13: /* DELETE FILE USING FCB */ INT_BARF( context, 0x21 ); break; case 0x14: /* SEQUENTIAL READ FROM FCB FILE */ INT21_SequentialReadFromFCB( context ); break; case 0x15: /* SEQUENTIAL WRITE TO FCB FILE */ INT21_SequentialWriteToFCB( context ); break; case 0x16: /* CREATE OR TRUNCATE FILE USING FCB */ case 0x17: /* RENAME FILE USING FCB */ INT_BARF( context, 0x21 ); break; case 0x18: /* NULL FUNCTION FOR CP/M COMPATIBILITY */ SET_AL( context, 0 ); break; case 0x19: /* GET CURRENT DEFAULT DRIVE */ SET_AL( context, INT21_GetCurrentDrive() ); TRACE( "GET CURRENT DRIVE -> %c:\n", 'A' + AL_reg( context ) ); break; case 0x1a: /* SET DISK TRANSFER AREA ADDRESS */ TRACE( "SET DISK TRANSFER AREA ADDRESS %04X:%04X\n", context->SegDs, DX_reg(context) ); { TDB *task = GlobalLock16( GetCurrentTask() ); task->dta = MAKESEGPTR( context->SegDs, DX_reg(context) ); } break; case 0x1b: /* GET ALLOCATION INFORMATION FOR DEFAULT DRIVE */ if (!INT21_GetDriveAllocInfo(context, 0)) SET_AX( context, 0xffff ); break; case 0x1c: /* GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE */ if (!INT21_GetDriveAllocInfo(context, DL_reg(context))) SET_AX( context, 0xffff ); break; case 0x1d: /* NULL FUNCTION FOR CP/M COMPATIBILITY */ case 0x1e: /* NULL FUNCTION FOR CP/M COMPATIBILITY */ SET_AL( context, 0 ); break; case 0x1f: /* GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE */ { BYTE drive = INT21_MapDrive( 0 ); TRACE( "GET DPB FOR DEFAULT DRIVE\n" ); if (INT21_FillDrivePB( drive )) { SET_AL( context, 0x00 ); /* success */ SET_BX( context, offsetof( INT21_HEAP, misc_dpb_list[drive] ) ); context->SegDs = INT21_GetHeapSelector( context ); } else { SET_AL( context, 0xff ); /* invalid or network drive */ } } break; case 0x20: /* NULL FUNCTION FOR CP/M COMPATIBILITY */ SET_AL( context, 0 ); break; case 0x21: /* READ RANDOM RECORD FROM FCB FILE */ INT21_ReadRandomRecordFromFCB( context ); break; case 0x22: /* WRITE RANDOM RECORD TO FCB FILE */ INT21_WriteRandomRecordToFCB( context ); break; case 0x23: /* GET FILE SIZE FOR FCB */ case 0x24: /* SET RANDOM RECORD NUMBER FOR FCB */ INT_BARF( context, 0x21 ); break; case 0x25: /* SET INTERRUPT VECTOR */ TRACE("SET INTERRUPT VECTOR 0x%02x\n",AL_reg(context)); { FARPROC16 ptr = (FARPROC16)MAKESEGPTR( context->SegDs, DX_reg(context) ); if (AL_reg(context) == 8) DOSVM_start_bios_timer(); if (!ISV86(context) && DOSVM_IsWin16()) DOSVM_SetPMHandler16( AL_reg(context), ptr ); else DOSVM_SetRMHandler( AL_reg(context), ptr ); } break; case 0x26: /* CREATE NEW PROGRAM SEGMENT PREFIX */ INT_BARF( context, 0x21 ); break; case 0x27: /* RANDOM BLOCK READ FROM FCB FILE */ INT21_RandomBlockReadFromFCB( context ); break; case 0x28: /* RANDOM BLOCK WRITE TO FCB FILE */ INT21_RandomBlockWriteToFCB( context ); break; case 0x29: /* PARSE FILENAME INTO FCB */ INT21_ParseFileNameIntoFCB(context); break; case 0x2a: /* GET SYSTEM DATE */ TRACE( "GET SYSTEM DATE\n" ); { SYSTEMTIME systime; GetLocalTime( &systime ); SET_CX( context, systime.wYear ); SET_DH( context, systime.wMonth ); SET_DL( context, systime.wDay ); SET_AL( context, systime.wDayOfWeek ); } break; case 0x2b: /* SET SYSTEM DATE */ TRACE( "SET SYSTEM DATE\n" ); { WORD year = CX_reg(context); BYTE month = DH_reg(context); BYTE day = DL_reg(context); if (year >= 1980 && year <= 2099 && month >= 1 && month <= 12 && day >= 1 && day <= 31) { FIXME( "SetSystemDate(%02d/%02d/%04d): not allowed\n", day, month, year ); SET_AL( context, 0 ); /* Let's pretend we succeeded */ } else { SET_AL( context, 0xff ); /* invalid date */ TRACE( "SetSystemDate(%02d/%02d/%04d): invalid date\n", day, month, year ); } } break; case 0x2c: /* GET SYSTEM TIME */ TRACE( "GET SYSTEM TIME\n" ); { SYSTEMTIME systime; GetLocalTime( &systime ); SET_CH( context, systime.wHour ); SET_CL( context, systime.wMinute ); SET_DH( context, systime.wSecond ); SET_DL( context, systime.wMilliseconds / 10 ); } break; case 0x2d: /* SET SYSTEM TIME */ if( CH_reg(context) >= 24 || CL_reg(context) >= 60 || DH_reg(context) >= 60 || DL_reg(context) >= 100 ) { TRACE("SetSystemTime(%02d:%02d:%02d.%02d): wrong time\n", CH_reg(context), CL_reg(context), DH_reg(context), DL_reg(context) ); SET_AL( context, 0xFF ); } else { FIXME("SetSystemTime(%02d:%02d:%02d.%02d): not allowed\n", CH_reg(context), CL_reg(context), DH_reg(context), DL_reg(context) ); SET_AL( context, 0 ); /* Let's pretend we succeeded */ } break; case 0x2e: /* SET VERIFY FLAG */ TRACE("SET VERIFY FLAG ignored\n"); /* we cannot change the behaviour anyway, so just ignore it */ break; case 0x2f: /* GET DISK TRANSFER AREA ADDRESS */ TRACE( "GET DISK TRANSFER AREA ADDRESS\n" ); { TDB *task = GlobalLock16( GetCurrentTask() ); context->SegEs = SELECTOROF( task->dta ); SET_BX( context, OFFSETOF( task->dta ) ); } break; case 0x30: /* GET DOS VERSION */ TRACE( "GET DOS VERSION - %s requested\n", (AL_reg(context) == 0x00) ? "OEM number" : "version flag" ); if (AL_reg(context) == 0x00) SET_BH( context, 0xff ); /* OEM number => undefined */ else SET_BH( context, 0x08 ); /* version flag => DOS is in ROM */ SET_AL( context, HIBYTE(HIWORD(GetVersion16())) ); /* major version */ SET_AH( context, LOBYTE(HIWORD(GetVersion16())) ); /* minor version */ SET_BL( context, 0x12 ); /* 0x123456 is 24-bit Wine's serial # */ SET_CX( context, 0x3456 ); break; case 0x31: /* TERMINATE AND STAY RESIDENT */ FIXME("TERMINATE AND STAY RESIDENT stub\n"); break; case 0x32: /* GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE */ { BYTE drive = INT21_MapDrive( DL_reg(context) ); TRACE( "GET DPB FOR SPECIFIC DRIVE %d\n", DL_reg(context) ); if (INT21_FillDrivePB( drive )) { SET_AL( context, 0x00 ); /* success */ SET_BX( context, offsetof( INT21_HEAP, misc_dpb_list[drive] ) ); context->SegDs = INT21_GetHeapSelector( context ); } else { SET_AL( context, 0xff ); /* invalid or network drive */ } } break; case 0x33: /* MULTIPLEXED */ switch (AL_reg(context)) { case 0x00: /* GET CURRENT EXTENDED BREAK STATE */ TRACE("GET CURRENT EXTENDED BREAK STATE\n"); SET_DL( context, brk_flag ); break; case 0x01: /* SET EXTENDED BREAK STATE */ TRACE("SET CURRENT EXTENDED BREAK STATE\n"); brk_flag = (DL_reg(context) > 0) ? 1 : 0; break; case 0x02: /* GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE*/ TRACE("GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE\n"); /* ugly coding in order to stay reentrant */ if (DL_reg(context)) { SET_DL( context, brk_flag ); brk_flag = 1; } else { SET_DL( context, brk_flag ); brk_flag = 0; } break; case 0x05: /* GET BOOT DRIVE */ TRACE("GET BOOT DRIVE\n"); SET_DL( context, 3 ); /* c: is Wine's bootdrive (a: is 1)*/ break; case 0x06: /* GET TRUE VERSION NUMBER */ TRACE("GET TRUE VERSION NUMBER\n"); SET_BL( context, HIBYTE(HIWORD(GetVersion16())) ); /* major */ SET_BH( context, LOBYTE(HIWORD(GetVersion16())) ); /* minor */ SET_DL( context, 0x00 ); /* revision */ SET_DH( context, 0x08 ); /* DOS is in ROM */ break; default: INT_BARF( context, 0x21 ); break; } break; case 0x34: /* GET ADDRESS OF INDOS FLAG */ TRACE( "GET ADDRESS OF INDOS FLAG\n" ); context->SegEs = INT21_GetHeapSelector( context ); SET_BX( context, offsetof(INT21_HEAP, misc_indos) ); break; case 0x35: /* GET INTERRUPT VECTOR */ TRACE("GET INTERRUPT VECTOR 0x%02x\n",AL_reg(context)); { FARPROC16 addr; if (!ISV86(context) && DOSVM_IsWin16()) addr = DOSVM_GetPMHandler16( AL_reg(context) ); else addr = DOSVM_GetRMHandler( AL_reg(context) ); context->SegEs = SELECTOROF(addr); SET_BX( context, OFFSETOF(addr) ); } break; case 0x36: /* GET FREE DISK SPACE */ TRACE("GET FREE DISK SPACE FOR DRIVE %s (limited to about 1GB)\n", INT21_DriveName( DL_reg(context) )); if (!INT21_GetFreeDiskSpace(context)) SET_AX( context, 0xffff ); break; case 0x37: /* SWITCHAR */ { switch (AL_reg(context)) { case 0x00: /* "SWITCHAR" - GET SWITCH CHARACTER */ TRACE( "SWITCHAR - GET SWITCH CHARACTER\n" ); SET_AL( context, 0x00 ); /* success*/ SET_DL( context, '/' ); break; case 0x01: /*"SWITCHAR" - SET SWITCH CHARACTER*/ FIXME( "SWITCHAR - SET SWITCH CHARACTER: %c\n", DL_reg( context )); SET_AL( context, 0x00 ); /* success*/ break; default: INT_BARF( context, 0x21 ); break; } } break; case 0x38: /* GET COUNTRY-SPECIFIC INFORMATION */ TRACE( "GET COUNTRY-SPECIFIC INFORMATION\n" ); if (AL_reg(context)) { WORD country = AL_reg(context); if (country == 0xff) country = BX_reg(context); if (country != INT21_GetSystemCountryCode()) { FIXME( "Requested info on non-default country %04x\n", country ); SET_AX(context, 2); SET_CFLAG(context); } } if(AX_reg(context) != 2 ) { INT21_FillCountryInformation( CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx), 0x22 ); SET_AX( context, INT21_GetSystemCountryCode() ); SET_BX( context, INT21_GetSystemCountryCode() ); RESET_CFLAG(context); } break; case 0x39: /* "MKDIR" - CREATE SUBDIRECTORY */ if (!INT21_CreateDirectory( context )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x3a: /* "RMDIR" - REMOVE DIRECTORY */ { WCHAR dirW[MAX_PATH]; char *dirA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); TRACE( "REMOVE DIRECTORY %s\n", dirA ); MultiByteToWideChar(CP_OEMCP, 0, dirA, -1, dirW, MAX_PATH); if (!RemoveDirectoryW( dirW )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); } break; case 0x3b: /* "CHDIR" - SET CURRENT DIRECTORY */ if (!INT21_SetCurrentDirectory( context )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x3c: /* "CREAT" - CREATE OR TRUNCATE FILE */ if (!INT21_CreateFile( context, context->Edx, FALSE, OF_READWRITE | OF_SHARE_COMPAT, 0x12 )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x3d: /* "OPEN" - OPEN EXISTING FILE */ if (!INT21_CreateFile( context, context->Edx, FALSE, AL_reg(context), 0x01 )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x3e: /* "CLOSE" - CLOSE FILE */ TRACE( "CLOSE handle %d\n", BX_reg(context) ); if (_lclose16( BX_reg(context) ) == HFILE_ERROR16) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x3f: /* "READ" - READ FROM FILE OR DEVICE */ TRACE( "READ from %d to %04X:%04X for %d bytes\n", BX_reg(context), context->SegDs, DX_reg(context), CX_reg(context) ); { DWORD result; WORD count = CX_reg(context); BYTE *buffer = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Edx ); /* Some programs pass a count larger than the allocated buffer */ if (DOSVM_IsWin16()) { WORD sel = context->SegDs; if (!sel) { buffer = MapSL(MAKELONG(context->Edx & 0xffff, DOSMEM_0000H)); sel = DOSMEM_0000H; } DWORD maxcount = GetSelectorLimit16( sel ) - DX_reg(context) + 1; if (count > maxcount) count = maxcount; } /* * FIXME: Reading from console (BX=1) in DOS mode * does not work as it is supposed to work. */ RESET_CFLAG(context); /* set if error */ if (!DOSVM_IsWin16() && BX_reg(context) == 0) { result = INT21_BufferedInput( context, buffer, count ); SET_AX( context, (WORD)result ); } else if (ReadFile( DosFileHandleToWin32Handle(BX_reg(context)), buffer, count, &result, NULL )) SET_AX( context, (WORD)result ); else bSetDOSExtendedError = TRUE; } break; case 0x40: /* "WRITE" - WRITE TO FILE OR DEVICE */ TRACE( "WRITE from %04X:%04X to handle %d for %d byte\n", context->SegDs, DX_reg(context), BX_reg(context), CX_reg(context) ); { char *ptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); if (!DOSVM_IsWin16() && (BX_reg(context) == 1 || BX_reg(context) == 2)) { int i; for(i=0; iSegDs) ptr = MapSL(MAKELONG(context->Edx & 0xffff, DOSMEM_0000H)); LONG result = _hwrite( handle, ptr, CX_reg(context) ); if (result == HFILE_ERROR) bSetDOSExtendedError = TRUE; else { SET_AX( context, (WORD)result ); RESET_CFLAG(context); } } } break; case 0x41: /* "UNLINK" - DELETE FILE */ { WCHAR fileW[MAX_PATH]; CHAR buf[MAX_PATH]; int count = 0; char *fileA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); retry: TRACE( "UNLINK %s\n", fileA ); MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH); if (!DeleteFileW( fileW )) { if (!count) { fileA = RedirectSystemDir(fileA, buf, MAX_PATH); fileA = RedirectDriveRoot(fileA, buf, MAX_PATH, FALSE); count = 1; goto retry; } bSetDOSExtendedError = TRUE; } else RESET_CFLAG(context); } break; case 0x42: /* "LSEEK" - SET CURRENT FILE POSITION */ TRACE( "LSEEK handle %d offset %d from %s\n", BX_reg(context), MAKELONG( DX_reg(context), CX_reg(context) ), (AL_reg(context) == 0) ? "start of file" : ((AL_reg(context) == 1) ? "current file position" : "end of file") ); { HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context)); LONG offset = MAKELONG( DX_reg(context), CX_reg(context) ); DWORD status = SetFilePointer( handle, offset, NULL, AL_reg(context) ); if (status == INVALID_SET_FILE_POINTER) bSetDOSExtendedError = TRUE; else { SET_AX( context, LOWORD(status) ); SET_DX( context, HIWORD(status) ); RESET_CFLAG(context); } } break; case 0x43: /* FILE ATTRIBUTES */ if (!INT21_FileAttributes( context, AL_reg(context), FALSE )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x44: /* IOCTL */ INT21_Ioctl( context ); break; case 0x45: /* "DUP" - DUPLICATE FILE HANDLE */ TRACE( "DUPLICATE FILE HANDLE %d\n", BX_reg(context) ); { HANDLE handle32; HFILE handle16 = HFILE_ERROR; if (DuplicateHandle( GetCurrentProcess(), DosFileHandleToWin32Handle(BX_reg(context)), GetCurrentProcess(), &handle32, 0, TRUE, DUPLICATE_SAME_ACCESS )) handle16 = Win32HandleToDosFileHandle(handle32); if (handle16 == HFILE_ERROR) bSetDOSExtendedError = TRUE; else { SET_AX( context, handle16 ); RESET_CFLAG(context); } } break; case 0x46: /* "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE */ TRACE( "FORCEDUP - FORCE DUPLICATE FILE HANDLE %d to %d\n", BX_reg(context), CX_reg(context) ); if (!INT21_Dup2(BX_reg(context), CX_reg(context))) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x47: /* "CWD" - GET CURRENT DIRECTORY */ if (!INT21_GetCurrentDirectory( context, FALSE )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x48: /* ALLOCATE MEMORY */ TRACE( "ALLOCATE MEMORY for %d paragraphs\n", BX_reg(context) ); { WORD selector = 0; DWORD bytes = (DWORD)BX_reg(context) << 4; if (!ISV86(context) && DOSVM_IsWin16()) selector = GlobalAlloc16( GMEM_FIXED, bytes ); else DOSMEM_AllocBlock( bytes, &selector ); if (selector) { SET_AX( context, selector ); RESET_CFLAG(context); } else { SET_CFLAG(context); SET_AX( context, 0x0008 ); /* insufficient memory */ SET_BX( context, DOSMEM_Available() >> 4 ); } } break; case 0x49: /* FREE MEMORY */ TRACE( "FREE MEMORY segment %04X\n", context->SegEs ); { BOOL ok; if (!ISV86(context) && DOSVM_IsWin16()) { ok = !GlobalFree16( context->SegEs ); /* If we don't reset ES_reg, we will fail in the relay code */ if (ok) context->SegEs = 0; } else ok = context->SegEs && DOSMEM_FreeBlock( PTR_REAL_TO_LIN(context->SegEs, 0) ); if (!ok) { TRACE("FREE MEMORY failed\n"); SET_CFLAG(context); SET_AX( context, 0x0009 ); /* memory block address invalid */ } } break; case 0x4a: /* RESIZE MEMORY BLOCK */ TRACE( "RESIZE MEMORY segment %04X to %d paragraphs\n", context->SegEs, BX_reg(context) ); { DWORD newsize = (DWORD)BX_reg(context) << 4; if (!ISV86(context) && DOSVM_IsWin16()) { FIXME( "Resize memory block - unsupported under Win16\n" ); SET_CFLAG(context); } else { LPVOID address = (size_t)(context->SegEs << 4) + DOSMEM_dosmem; UINT blocksize = DOSMEM_ResizeBlock( address, newsize, FALSE ); RESET_CFLAG(context); if (blocksize == (UINT)-1) { SET_CFLAG( context ); SET_AX( context, 0x0009 ); /* illegal address */ } else if(blocksize != newsize) { SET_CFLAG( context ); SET_AX( context, 0x0008 ); /* insufficient memory */ SET_BX( context, blocksize >> 4 ); /* new block size */ } } } break; case 0x4b: /* "EXEC" - LOAD AND/OR EXECUTE PROGRAM */ { char *program = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); BYTE *paramblk = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx); TRACE( "EXEC %s\n", program ); RESET_CFLAG(context); if (DOSVM_IsWin16()) { HINSTANCE16 instance = WinExec16( program, SW_NORMAL ); if (instance < 32) { SET_CFLAG( context ); SET_AX( context, instance ); } } else { if (!MZ_Exec( context, program, AL_reg(context), paramblk)) bSetDOSExtendedError = TRUE; } } break; case 0x4c: /* "EXIT" - TERMINATE WITH RETURN CODE */ TRACE( "EXIT with return code %d\n", AL_reg(context) ); if (DOSVM_IsWin16()) DOSVM_Exit( AL_reg(context) ); else if(ISV86(context)) MZ_Exit( context, FALSE, AL_reg(context) ); else { /* * Exit from DPMI. */ ULONG_PTR rv = AL_reg(context); RaiseException( EXCEPTION_VM86_INTx, 0, 1, &rv ); } break; case 0x4d: /* GET RETURN CODE */ TRACE("GET RETURN CODE (ERRORLEVEL)\n"); SET_AX( context, DOSVM_retval ); DOSVM_retval = 0; break; case 0x4e: /* "FINDFIRST" - FIND FIRST MATCHING FILE */ TRACE("FINDFIRST mask 0x%04x spec %s\n",CX_reg(context), (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx)); if (!INT21_FindFirst(context)) break; /* fall through */ case 0x4f: /* "FINDNEXT" - FIND NEXT MATCHING FILE */ TRACE("FINDNEXT\n"); if (!INT21_FindNext(context)) { DWORD err = ERROR_NO_MORE_FILES; if (GetLastError() == ERROR_PATH_NOT_FOUND) { /* other errors? */ err = ERROR_PATH_NOT_FOUND; } SetLastError(err); SET_AX( context, err ); SET_CFLAG(context); } else SET_AX( context, 0 ); /* OK */ break; case 0x50: /* SET CURRENT PROCESS ID (SET PSP ADDRESS) */ TRACE("SET CURRENT PROCESS ID (SET PSP ADDRESS)\n"); DOSVM_psp = BX_reg(context); break; case 0x51: /* GET PSP ADDRESS */ INT21_GetPSP( context ); break; case 0x52: /* "SYSVARS" - GET LIST OF LISTS */ { SEGPTR ptr = DOSDEV_GetLOL( ISV86(context) || !DOSVM_IsWin16() ); context->SegEs = SELECTOROF(ptr); SET_BX( context, OFFSETOF(ptr) ); } break; case 0x54: /* Get Verify Flag */ TRACE("Get Verify Flag - Not Supported\n"); SET_AL( context, 0x00 ); /* pretend we can tell. 00h = off 01h = on */ break; case 0x56: /* "RENAME" - RENAME FILE */ if (!INT21_RenameFile( context )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x57: /* FILE DATE AND TIME */ if (!INT21_FileDateTime( context )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x58: /* GET OR SET MEMORY ALLOCATION STRATEGY */ switch (AL_reg(context)) { case 0x00: /* GET MEMORY ALLOCATION STRATEGY */ TRACE( "GET MEMORY ALLOCATION STRATEGY\n" ); SET_AX( context, 0 ); /* low memory first fit */ break; case 0x01: /* SET ALLOCATION STRATEGY */ TRACE( "SET MEMORY ALLOCATION STRATEGY to %d - ignored\n", BL_reg(context) ); break; case 0x02: /* GET UMB LINK STATE */ TRACE( "GET UMB LINK STATE\n" ); SET_AL( context, 0 ); /* UMBs not part of DOS memory chain */ break; case 0x03: /* SET UMB LINK STATE */ TRACE( "SET UMB LINK STATE to %d - ignored\n", BX_reg(context) ); break; default: INT_BARF( context, 0x21 ); } break; case 0x59: /* GET EXTENDED ERROR INFO */ INT21_GetExtendedError( context ); break; case 0x5a: /* CREATE TEMPORARY FILE */ TRACE("CREATE TEMPORARY FILE\n"); bSetDOSExtendedError = !INT21_CreateTempFile(context); break; case 0x5b: /* CREATE NEW FILE */ if (!INT21_CreateFile( context, context->Edx, FALSE, OF_READWRITE | OF_SHARE_COMPAT, 0x10 )) bSetDOSExtendedError = TRUE; else RESET_CFLAG(context); break; case 0x5c: /* "FLOCK" - RECORD LOCKING */ { DWORD offset = MAKELONG(DX_reg(context), CX_reg(context)); DWORD length = MAKELONG(DI_reg(context), SI_reg(context)); HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context)); RESET_CFLAG(context); switch (AL_reg(context)) { case 0x00: /* LOCK */ TRACE( "lock handle %d offset %d length %d\n", BX_reg(context), offset, length ); if (!LockFile( handle, offset, 0, length, 0 )) bSetDOSExtendedError = TRUE; break; case 0x01: /* UNLOCK */ TRACE( "unlock handle %d offset %d length %d\n", BX_reg(context), offset, length ); if (!UnlockFile( handle, offset, 0, length, 0 )) bSetDOSExtendedError = TRUE; break; default: INT_BARF( context, 0x21 ); } } break; case 0x5d: /* NETWORK 5D */ FIXME( "Network function 5D not implemented.\n" ); SetLastError( ER_NoNetwork ); bSetDOSExtendedError = TRUE; break; case 0x5e: /* NETWORK 5E */ bSetDOSExtendedError = INT21_NetworkFunc( context); break; case 0x5f: /* NETWORK 5F */ /* FIXME: supporting this would need to 1: * - implement per drive current directory (as kernel32 doesn't) * - assign enabled/disabled flag on a per drive basis */ /* network software not installed */ TRACE("NETWORK function AX=%04x not implemented\n",AX_reg(context)); SetLastError( ER_NoNetwork ); bSetDOSExtendedError = TRUE; break; case 0x60: /* "TRUENAME" - CANONICALIZE FILENAME OR PATH */ { WCHAR pathW[MAX_PATH], res[MAX_PATH]; /* FIXME: likely to be broken */ TRACE("TRUENAME %s\n", (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs,context->Esi)); MultiByteToWideChar(CP_OEMCP, 0, CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi), -1, pathW, MAX_PATH); if (!GetFullPathNameW( pathW, 128, res, NULL )) bSetDOSExtendedError = TRUE; else { SET_AX( context, 0 ); WideCharToMultiByte(CP_OEMCP, 0, res, -1, CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi), 128, NULL, NULL); } } break; case 0x61: /* UNUSED */ SET_AL( context, 0 ); break; case 0x62: /* GET PSP ADDRESS */ INT21_GetPSP( context ); break; case 0x63: /* MISC. LANGUAGE SUPPORT */ switch (AL_reg(context)) { case 0x00: /* GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE */ TRACE( "GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE\n" ); context->SegDs = INT21_GetHeapSelector( context ); SET_SI( context, offsetof(INT21_HEAP, dbcs_table) ); SET_AL( context, 0 ); /* success */ break; } break; case 0x64: /* OS/2 DOS BOX */ INT_BARF( context, 0x21 ); SET_CFLAG(context); break; case 0x65: /* EXTENDED COUNTRY INFORMATION */ INT21_ExtendedCountryInformation( context ); break; case 0x66: /* GLOBAL CODE PAGE TABLE */ switch (AL_reg(context)) { case 0x01: TRACE( "GET GLOBAL CODE PAGE TABLE\n" ); SET_BX( context, GetOEMCP() ); SET_DX( context, GetOEMCP() ); break; case 0x02: FIXME( "SET GLOBAL CODE PAGE TABLE, active %d, system %d - ignored\n", BX_reg(context), DX_reg(context) ); break; } break; case 0x67: /* SET HANDLE COUNT */ TRACE( "SET HANDLE COUNT to %d\n", BX_reg(context) ); if (SetHandleCount( BX_reg(context) ) < BX_reg(context) ) bSetDOSExtendedError = TRUE; break; case 0x68: /* "FFLUSH" - COMMIT FILE */ TRACE( "FFLUSH - handle %d\n", BX_reg(context) ); if (!FlushFileBuffers( DosFileHandleToWin32Handle(BX_reg(context)) ) && GetLastError() != ERROR_ACCESS_DENIED) bSetDOSExtendedError = TRUE; break; case 0x69: /* DISK SERIAL NUMBER */ switch (AL_reg(context)) { case 0x00: TRACE("GET DISK SERIAL NUMBER for drive %s\n", INT21_DriveName(BL_reg(context))); if (!INT21_GetDiskSerialNumber(context)) bSetDOSExtendedError = TRUE; else SET_AX( context, 0 ); break; case 0x01: TRACE("SET DISK SERIAL NUMBER for drive %s\n", INT21_DriveName(BL_reg(context))); if (!INT21_SetDiskSerialNumber(context)) bSetDOSExtendedError = TRUE; else SET_AX( context, 1 ); break; } break; case 0x6a: /* COMMIT FILE */ TRACE( "COMMIT FILE - handle %d\n", BX_reg(context) ); if (!FlushFileBuffers( DosFileHandleToWin32Handle(BX_reg(context)) ) && GetLastError() != ERROR_ACCESS_DENIED) bSetDOSExtendedError = TRUE; break; case 0x6b: /* NULL FUNCTION FOR CP/M COMPATIBILITY */ SET_AL( context, 0 ); break; case 0x6c: /* EXTENDED OPEN/CREATE */ if (!INT21_CreateFile( context, context->Esi, TRUE, BX_reg(context), DL_reg(context) )) bSetDOSExtendedError = TRUE; break; case 0x70: /* MSDOS 7 - GET/SET INTERNATIONALIZATION INFORMATION */ FIXME( "MS-DOS 7 - GET/SET INTERNATIONALIZATION INFORMATION\n" ); SET_CFLAG( context ); SET_AL( context, 0 ); break; case 0x71: /* MSDOS 7 - LONG FILENAME FUNCTIONS */ INT21_LongFilename( context ); break; case 0x73: /* MSDOS7 - FAT32 */ RESET_CFLAG( context ); if (!INT21_Fat32( context )) bSetDOSExtendedError = TRUE; break; case 0xdc: /* CONNECTION SERVICES - GET CONNECTION NUMBER */ TRACE( "CONNECTION SERVICES - GET CONNECTION NUMBER - ignored\n" ); break; case 0xea: /* NOVELL NETWARE - RETURN SHELL VERSION */ TRACE( "NOVELL NETWARE - RETURN SHELL VERSION - ignored\n" ); break; case 0xff: /* DOS32 EXTENDER (DOS/4GW) - API */ /* we don't implement a DOS32 extender */ TRACE( "DOS32 EXTENDER API - ignored\n" ); break; default: INT_BARF( context, 0x21 ); break; } /* END OF SWITCH */ /* Set general error condition. */ if (bSetDOSExtendedError) { SET_AX( context, GetLastError() ); SET_CFLAG( context ); } /* Print error code if carry flag is set. */ if (context->EFlags & 0x0001) TRACE("failed, error %d\n", GetLastError() ); TRACE( "returning: AX=%04x BX=%04x CX=%04x DX=%04x " "SI=%04x DI=%04x DS=%04x ES=%04x EFL=%08x\n", AX_reg(context), BX_reg(context), CX_reg(context), DX_reg(context), SI_reg(context), DI_reg(context), (WORD)context->SegDs, (WORD)context->SegEs, context->EFlags ); } ================================================ FILE: krnl386/int25.c ================================================ /* * DOS interrupt 25h handler * * Copyright 1997 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include "dosexe.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /*********************************************************************** * DOSVM_RawRead * * Read raw sectors from a device. */ BOOL DOSVM_RawRead(BYTE drive, DWORD begin, DWORD nr_sect, BYTE *dataptr, BOOL fake_success) { WCHAR root[] = {'\\','\\','.','\\','A',':',0}; HANDLE h; TRACE( "abs diskread, drive %d, sector %d, " "count %d, buffer %p\n", drive, begin, nr_sect, dataptr ); root[4] += drive; h = CreateFileW(root, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (h != INVALID_HANDLE_VALUE) { DWORD r; SetFilePointer(h, begin * 512, NULL, SEEK_SET ); /* FIXME: check errors */ ReadFile(h, dataptr, nr_sect * 512, &r, NULL ); CloseHandle(h); } else { memset( dataptr, 0, nr_sect * 512 ); if (fake_success) { /* FIXME: explain what happens here */ if (begin == 0 && nr_sect > 1) *(dataptr + 512) = 0xf8; if (begin == 1) *dataptr = 0xf8; } else return FALSE; } return TRUE; } /********************************************************************** * DOSVM_Int25Handler * * Handler for int 25h (absolute disk read). */ void WINAPI DOSVM_Int25Handler( CONTEXT *context ) { WCHAR drivespec[] = {'A', ':', '\\', 0}; BYTE *dataptr = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Ebx ); DWORD begin; DWORD length; PUSH_WORD16(context, (WORD)context->EFlags); drivespec[0] += AL_reg( context ); if (GetDriveTypeW( drivespec ) == DRIVE_NO_ROOT_DIR || GetDriveTypeW( drivespec ) == DRIVE_UNKNOWN) { SET_CFLAG( context ); SET_AX( context, 0x0201 ); /* unknown unit */ return; } if (CX_reg( context ) == 0xffff) { begin = *(DWORD *)dataptr; length = *(WORD *)(dataptr + 4); dataptr = (BYTE *)CTX_SEG_OFF_TO_LIN( context, *(WORD *)(dataptr + 8), *(DWORD *)(dataptr + 6) ); } else { begin = DX_reg( context ); length = CX_reg( context ); } DOSVM_RawRead( AL_reg( context ), begin, length, dataptr, TRUE ); RESET_CFLAG( context ); } ================================================ FILE: krnl386/int26.c ================================================ /* * DOS interrupt 26h handler * * Copyright 1997 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include "dosexe.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /*********************************************************************** * DOSVM_RawWrite * * Write raw sectors to a device. */ BOOL DOSVM_RawWrite(BYTE drive, DWORD begin, DWORD nr_sect, BYTE *dataptr, BOOL fake_success) { WCHAR root[] = {'\\','\\','.','\\','A',':',0}; HANDLE h; DWORD w; TRACE( "abs diskwrite, drive %d, sector %d, " "count %d, buffer %p\n", drive, begin, nr_sect, dataptr ); root[4] += drive; h = CreateFileW(root, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (h != INVALID_HANDLE_VALUE) { SetFilePointer(h, begin * 512, NULL, SEEK_SET ); /* FIXME: check errors */ WriteFile( h, dataptr, nr_sect * 512, &w, NULL ); CloseHandle( h ); } else if (!fake_success) return FALSE; return TRUE; } /********************************************************************** * DOSVM_Int26Handler * * Handler for int 26h (absolute disk write). */ void WINAPI DOSVM_Int26Handler( CONTEXT *context ) { WCHAR drivespec[] = {'A', ':', '\\', 0}; BYTE *dataptr = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Ebx ); DWORD begin; DWORD length; drivespec[0] += AL_reg( context ); if (GetDriveTypeW( drivespec ) == DRIVE_NO_ROOT_DIR || GetDriveTypeW( drivespec ) == DRIVE_UNKNOWN) { SET_CFLAG( context ); SET_AX( context, 0x0201 ); /* unknown unit */ return; } if (CX_reg( context ) == 0xffff) { begin = *(DWORD *)dataptr; length = *(WORD *)(dataptr + 4); dataptr = (BYTE *)CTX_SEG_OFF_TO_LIN( context, *(WORD *)(dataptr + 8), *(DWORD *)(dataptr + 6) ); } else { begin = DX_reg( context ); length = CX_reg( context ); } DOSVM_RawWrite( AL_reg( context ), begin, length, dataptr, TRUE ); RESET_CFLAG( context ); } ================================================ FILE: krnl386/int2f.c ================================================ /* -*- tab-width: 8; c-basic-offset: 4 -*- */ /* * DOS interrupt 2fh handler * * Cdrom - device driver emulation - Audio features. * Copyright (c) 1998 Petr Tomasek * Copyright (c) 1999,2002 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include "ntstatus.h" #define WIN32_NO_STATUS #define NONAMELESSUNION #include "wine/winbase16.h" #include "wine/debug.h" #include "winternl.h" #include "winioctl.h" #include "ntddstor.h" #include "ntddcdrm.h" #include "dosexe.h" #include "kernel16_private.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /* base KERNEL ordinal number for VxDs */ #define VXD_BASE 900 typedef struct { DOS_DEVICE_HEADER hdr; WORD reserved; /* must be 0 */ BYTE drive; /* drive letter (0=A:, 1=B:, ...) */ BYTE units; /* number of supported units */ } CDROM_DEVICE_HEADER; typedef struct { CDROM_DEVICE_HEADER hdr; WINEDEV_THUNK thunk; WORD cdrom_segment; /* Real mode segment for CDROM_HEAP */ WORD cdrom_selector; /* Protected mode selector for CDROM_HEAP */ } CDROM_HEAP; static void do_int2f_16( CONTEXT *context ); static void MSCDEX_Handler( CONTEXT *context ); /********************************************************************** * DOSVM_Int2fHandler * * Handler for int 2fh (multiplex). */ void WINAPI DOSVM_Int2fHandler( CONTEXT *context ) { TRACE("Subfunction 0x%X\n", AX_reg(context)); switch(AH_reg(context)) { case 0x10: SET_AL( context, 0xff ); /* share is installed */ break; case 0x11: /* Network Redirector / IFSFUNC */ switch (LOBYTE(context->Eax)) { case 0x00: /* Install check */ /* not installed */ break; case 0x80: /* Enhanced services - Install check */ /* not installed */ break; default: INT_BARF( context, 0x2f ); break; } break; case 0x12: switch (LOBYTE(context->Eax)) { case 0x2e: /* get or set DOS error table address */ switch (DL_reg(context)) { /* Four tables: even commands are 'get', odd are 'set' */ /* DOS 5.0+ ignores "set" commands */ case 0x01: case 0x03: case 0x05: case 0x07: case 0x09: break; /* Instead of having a message table in DOS-space, */ /* we can use a special case for MS-DOS to force */ /* the secondary interface. */ case 0x00: case 0x02: case 0x04: case 0x06: context->SegEs = 0x0001; SET_DI( context, 0x0000 ); break; case 0x08: FIXME("No real-mode handler for errors yet! (bye!)\n"); break; default: INT_BARF(context, 0x2f); } break; default: INT_BARF(context, 0x2f); } break; case 0x15: /* mscdex */ MSCDEX_Handler(context); break; case 0x16: do_int2f_16( context ); break; case 0x1a: /* ANSI.SYS / AVATAR.SYS Install Check */ /* Not supported yet, do nothing */ break; case 0x43: #if 1 switch (LOBYTE(context->Eax)) { case 0x00: /* XMS v2+ installation check */ WARN("XMS is not fully implemented\n"); SET_AL( context, 0x80 ); break; case 0x10: /* XMS v2+ get driver address */ { context->SegEs = DOSVM_dpmi_segments->xms_seg; SET_BX( context, 0 ); break; } default: INT_BARF( context, 0x2f ); } #else FIXME("check for XMS (not supported)\n"); SET_AL( context, 0x42 ); /* != 0x80 */ #endif break; case 0x45: switch (LOBYTE(context->Eax)) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: /* Microsoft Profiler - not installed */ break; default: INT_BARF( context, 0x2f ); } break; case 0x4a: switch(LOBYTE(context->Eax)) { case 0x10: /* smartdrv */ break; /* not installed */ case 0x11: /* dblspace */ break; /* not installed */ case 0x12: /* realtime compression interface */ break; /* not installed */ case 0x32: /* patch IO.SYS (???) */ break; /* we have no IO.SYS, so we can't patch it :-/ */ default: INT_BARF( context, 0x2f ); } break; case 0x4b: switch(LOBYTE(context->Eax)) { case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: FIXME("Task Switcher - not implemented\n"); break; default: INT_BARF( context, 0x2f ); } break; case 0x4f: switch (LOBYTE(context->Eax)) { case 0x01: /*get code page*/ SET_AX(context, 0); SET_BX(context, GetConsoleCP()); break; default: INT_BARF(context, 0x2f); SET_AX(context, 1); SET_CFLAG(context); } break; case 0x56: /* INTERLNK */ switch(LOBYTE(context->Eax)) { case 0x01: /* check if redirected drive */ SET_AL( context, 0 ); /* not redirected */ break; default: INT_BARF( context, 0x2f ); } break; case 0x7a: /* NOVELL NetWare */ switch (LOBYTE(context->Eax)) { case 0x0: /* Low-level Netware installation check AL=0 not installed.*/ SET_AL( context, 0 ); break; case 0x20: /* Get VLM Call Address */ /* return nothing -> NetWare not installed */ break; default: INT_BARF( context, 0x2f ); break; } break; case 0xb7: /* append */ SET_AL( context, 0 ); /* not installed */ break; case 0xb8: /* network */ switch (LOBYTE(context->Eax)) { case 0x00: /* Install check */ /* not installed */ break; default: INT_BARF( context, 0x2f ); break; } break; case 0xbc: if (AL_reg(context) == 0x00 && BX_reg(context) == 0x3f3f) { /* MVSOUND.SYS - Install check: not installed */ } else { INT_BARF( context, 0x2f ); } break; case 0xbd: /* some Novell network install check ??? */ SET_AX( context, 0xa5a5 ); /* pretend to have Novell IPX installed */ break; case 0xbf: /* REDIRIFS.EXE */ switch (LOBYTE(context->Eax)) { case 0x00: /* Install check */ /* not installed */ break; default: INT_BARF( context, 0x2f ); break; } break; case 0xd2: switch(LOBYTE(context->Eax)) { case 0x01: /* Quarterdeck RPCI - QEMM/QRAM - PCL-838.EXE functions */ if(BX_reg(context) == 0x5145 && CX_reg(context) == 0x4D4D && DX_reg(context) == 0x3432) TRACE("Check for QEMM v5.0+ (not installed)\n"); break; default: INT_BARF( context, 0x2f ); break; } break; case 0xd7: /* Banyan Vines */ switch (LOBYTE(context->Eax)) { case 0x01: /* Install check - Get Int Number */ /* not installed */ break; default: INT_BARF( context, 0x2f ); break; } break; case 0xde: switch(LOBYTE(context->Eax)) { case 0x01: /* Quarterdeck QDPMI.SYS - DESQview */ if(BX_reg(context) == 0x4450 && CX_reg(context) == 0x4d49 && DX_reg(context) == 0x8f4f) TRACE("Check for QDPMI.SYS (not installed)\n"); break; default: INT_BARF( context, 0x2f ); break; } break; case 0xfa: /* Watcom debugger check, returns 0x666 if installed */ break; case 0x40: switch (LOBYTE(context->Eax)) { case 0x00: SET_AL(context, 0xff); break; default: INT_BARF( context, 0x2f ); break; } break; default: INT_BARF( context, 0x2f ); break; } } /********************************************************************** * do_int2f_16 */ static void do_int2f_16( CONTEXT *context ) { DWORD addr; switch(LOBYTE(context->Eax)) { case 0x00: /* Windows enhanced mode installation check */ SET_AX( context, LOWORD(GetVersion16()) ); break; case 0x0a: /* Get Windows version and type */ SET_AX( context, 0 ); SET_BX( context, (LOWORD(GetVersion16()) << 8) | (LOWORD(GetVersion16()) >> 8) ); SET_CX( context, 3 ); break; case 0x0b: /* Identify Windows-aware TSRs */ /* we don't have any pre-Windows TSRs */ break; case 0x11: /* Get Shell Parameters - (SHELL= in CONFIG.SYS) */ /* We can mock this up. But not today... */ FIXME("Get Shell Parameters\n"); break; case 0x80: /* Release time-slice */ /* Linux sched_yield() still keeps burning CPU cycles * if the current process is the only one in highest priority list * (as Linux will immediately return to this process to waste * more CPU cycles), so sched_yield() is essentially useless for us * (poor API, if you ask me: its return code should indicate * whether other processes did run in between, in order for us * to be able to decide whether to do an additional Sleep() or not...) * Thus we better unconditionally use a well-balanced Sleep() * instead to really make sure the process calling int 0x2f/0x1680 * *doesn't* use 100% CPU... */ Sleep(55); /* just wait 55ms (one "timer tick") for now. */ SET_AL( context, 0 ); break; case 0x81: /* Begin critical section. */ /* FIXME? */ break; case 0x82: /* End critical section. */ /* FIXME? */ break; case 0x83: /* Return Current Virtual Machine ID */ /* Virtual Machines are usually created/destroyed when Windows runs * DOS programs. Since we never do, we are always in the System VM. * According to Ralf Brown's Interrupt List, never return 0. But it * seems to work okay (returning 0), just to be sure we return 1. */ SET_BX( context, 1 ); /* VM 1 is probably the System VM */ break; case 0x84: /* Get device API entry point */ { HMODULE16 mod = GetModuleHandle16("kernel"); addr = (DWORD)GetProcAddress16( mod, (LPCSTR)(VXD_BASE + BX_reg(context)) ); if (!addr) /* not supported */ ERR("Accessing unknown VxD %04x - Expect a failure now.\n", BX_reg(context) ); context->SegEs = SELECTOROF(addr); SET_DI( context, OFFSETOF(addr) ); } break; case 0x86: /* DPMI detect mode */ SET_AX( context, 0 ); /* Running under DPMI */ break; case 0x87: /* DPMI installation check */ { SYSTEM_INFO si; GetSystemInfo(&si); SET_AX( context, 0x0000 ); /* DPMI Installed */ SET_BX( context, 0x0001 ); /* 32bits available */ SET_CL( context, si.wProcessorLevel ); SET_DX( context, 0x005a ); /* DPMI major/minor 0.90 */ SET_SI( context, 0 ); /* # of para. of DOS extended private data */ context->SegEs = DOSVM_dpmi_segments->dpmi_seg; SET_DI( context, 0 ); /* ES:DI is DPMI switch entry point */ break; } case 0x8a: /* DPMI get vendor-specific API entry point. */ /* The 1.0 specs say this should work with all 0.9 hosts. */ break; default: INT_BARF( context, 0x2f ); } } /* FIXME: this macro may have to be changed on architectures where reads/writes * must be aligned * could be WORD, DWORD... * in this case, we would need two macros, one for read, the other one for write * Note: PTR_AT can be used as an l-value */ #define PTR_AT(_ptr, _ofs, _typ) (*((_typ*)(((char*)_ptr)+(_ofs)))) /* Use #if 1 if you want full int 2f debug... normal users can leave it at 0 */ #if 0 /********************************************************************** * MSCDEX_Dump [internal] * * Dumps mscdex requests to int debug channel. */ static void MSCDEX_Dump(char* pfx, BYTE* req, int dorealmode) { int i; BYTE buf[2048]; BYTE* ptr; BYTE* ios; ptr = buf; ptr += sprintf(ptr, "%s\tCommand => ", pfx); for (i = 0; i < req[0]; i++) { ptr += sprintf(ptr, "%02x ", req[i]); } switch (req[2]) { case 3: case 12: ptr += sprintf(ptr, "\n\t\t\t\tIO_struct => "); ios = (dorealmode) ? PTR_REAL_TO_LIN( PTR_AT(req, 16, WORD), PTR_AT(req, 14, WORD)) : MapSL(MAKESEGPTR(PTR_AT(req, 16, WORD), PTR_AT(req, 14, WORD))); for (i = 0; i < PTR_AT(req, 18, WORD); i++) { ptr += sprintf(ptr, "%02x ", ios[i]); if ((i & 0x1F) == 0x1F) { *ptr++ = '\n'; *ptr = 0; } } break; } TRACE("%s\n", buf); } #else #define MSCDEX_Dump(pfx, req, drm) #endif #define CDFRAMES_PERSEC 75 #define CDFRAMES_PERMIN (CDFRAMES_PERSEC * 60) #define FRAME_OF_ADDR(a) ((a)[1] * CDFRAMES_PERMIN + (a)[2] * CDFRAMES_PERSEC + (a)[3]) #define FRAME_OF_TOC(toc, idx) FRAME_OF_ADDR((toc).TrackData[idx - (toc).FirstTrack].Address) #define CTRL_OF_TOC(toc, idx) (((toc).TrackData[idx - (toc).FirstTrack].Control << 4) | \ (toc).TrackData[idx - (toc).FirstTrack].Adr) static void MSCDEX_StoreMSF(DWORD frame, BYTE* val) { val[3] = 0; /* zero */ val[2] = frame / CDFRAMES_PERMIN; /* minutes */ val[1] = (frame / CDFRAMES_PERSEC) % 60; /* seconds */ val[0] = frame % CDFRAMES_PERSEC; /* frames */ } static BOOL is_cdrom(int drive) { char root[] = "A:\\"; root[0] += drive; return (GetDriveTypeA(root) == DRIVE_CDROM); } /*********************************************************************** * CDROM_FillHeap * * Initialize CDROM heap. * */ static void CDROM_FillHeap( CDROM_HEAP *heap ) { int drive, count; /* Count the number of contiguous CDROM drives */ for (drive = count = 0; drive < 26; drive++) { if (is_cdrom(drive)) { while (is_cdrom(drive + count)) count++; break; } } TRACE("Installation check: %d cdroms, starting at %d\n", count, drive); heap->hdr.drive = (drive < 26) ? drive : 0; heap->hdr.units = count; heap->hdr.reserved = 0; } /********************************************************************** * CDROM_GetHeap * * Get pointer for CDROM heap (CDROM_HEAP). * Creates and initializes heap on first call. */ static CDROM_HEAP *CDROM_GetHeap( void ) { static CDROM_HEAP *heap_pointer = NULL; if ( !heap_pointer ) { WORD heap_segment; WORD heap_selector; /* allocate a new DOS data segment */ heap_pointer = DOSVM_AllocDataUMB( sizeof(CDROM_HEAP), &heap_segment, &heap_selector ); heap_pointer->cdrom_segment = heap_segment; heap_pointer->cdrom_selector = heap_selector; CDROM_FillHeap( heap_pointer ); } return heap_pointer; } static void MSCDEX_Request(BYTE *driver_request, BOOL dorealmode) { BYTE* io_stru; BYTE Error = 255; /* No Error */ char devName[] = "\\\\.\\@:"; HANDLE h; CDROM_TOC toc; CDROM_SUB_Q_DATA_FORMAT fmt; SUB_Q_CHANNEL_DATA data; DWORD br; BOOL present = TRUE; /* FIXME * the following tests are wrong because lots of functions don't require the * tray to be closed with a CD inside */ TRACE("CDROM device driver -> command <%d>\n", driver_request[2]); MSCDEX_Dump("Beg", driver_request, dorealmode); /* set status to 0 */ PTR_AT(driver_request, 3, WORD) = 0; devName[4] = 'A' + CDROM_GetHeap()->hdr.drive + driver_request[1]; h = CreateFileA(devName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if (h == INVALID_HANDLE_VALUE) { WARN("Couldn't open cdrom handle\n"); driver_request[4] |= 0x80; driver_request[3] = 1; /* unknown unit */ return; } fmt.Format = IOCTL_CDROM_CURRENT_POSITION; if (!DeviceIoControl(h, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(toc), &br, NULL) || !DeviceIoControl(h, IOCTL_CDROM_READ_Q_CHANNEL, &fmt, sizeof(fmt), &data, sizeof(data), &br, NULL)) { if (GetLastError() == STATUS_NO_MEDIA_IN_DEVICE) { if (driver_request[2] != 6 && driver_request[2] != 15) { driver_request[4] |= 0x80; driver_request[3] = 2; /* drive not ready */ CloseHandle(h); return; } present = FALSE; } else { driver_request[4] |= 0x80; driver_request[3] = 1; /* unknown unit */ CloseHandle(h); return; } } switch (driver_request[2]) { case 3: io_stru = (dorealmode) ? PTR_REAL_TO_LIN( PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD) ) : MapSL( MAKESEGPTR(PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD))); TRACE(" --> IOCTL INPUT <%d>\n", io_stru[0]); switch (io_stru[0]) { #if 0 case 0: /* Get device Header */ { static LPSTR ptr = 0; if (ptr == 0) { ptr = SEGPTR_ALLOC(22); PTR_AT(ptr, 0, DWORD) = ~1; /* Next Device Driver */ PTR_AT(ptr, 4, WORD) = 0xC800; /* Device attributes */ PTR_AT(ptr, 6, WORD) = 0x1234; /* Pointer to device strategy routine: FIXME */ PTR_AT(ptr, 8, WORD) = 0x3142; /* Pointer to device interrupt routine: FIXME */ PTR_AT(ptr, 10, char) = 'W'; /* 8-byte character device name field */ PTR_AT(ptr, 11, char) = 'I'; PTR_AT(ptr, 12, char) = 'N'; PTR_AT(ptr, 13, char) = 'E'; PTR_AT(ptr, 14, char) = '_'; PTR_AT(ptr, 15, char) = 'C'; PTR_AT(ptr, 16, char) = 'D'; PTR_AT(ptr, 17, char) = '_'; PTR_AT(ptr, 18, WORD) = 0; /* Reserved (must be zero) */ PTR_AT(ptr, 20, BYTE) = 0; /* Drive letter (must be zero) */ PTR_AT(ptr, 21, BYTE) = 1; /* Number of units supported (one or more) FIXME*/ } PTR_AT(io_stru, DWORD, 0) = SEGPTR_GET(ptr); } break; #endif case 1: /* location of head */ switch (io_stru[1]) { case 0: PTR_AT(io_stru, 2, DWORD) = FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress); break; case 1: MSCDEX_StoreMSF(FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress), io_stru + 2); break; default: ERR("CD-ROM driver: unsupported addressing mode !!\n"); Error = 0x0c; } TRACE(" ----> HEAD LOCATION <%d>\n", PTR_AT(io_stru, 2, DWORD)); break; case 4: /* Audio channel info */ io_stru[1] = 0; io_stru[2] = 0xff; io_stru[3] = 1; io_stru[4] = 0xff; io_stru[5] = 2; io_stru[6] = 0; io_stru[7] = 3; io_stru[8] = 0; TRACE(" ----> AUDIO CHANNEL INFO\n"); break; case 6: /* device status */ PTR_AT(io_stru, 1, DWORD) = 0x00000290; /* 290 => * 1 Supports HSG and Red Book addressing modes * 0 Supports audio channel manipulation * * 1 Supports prefetching requests * 0 Reserved * 0 No interleaving * 1 Data read and plays audio/video tracks * * 0 Read only * 0 Supports only cooked reading * 0 Door locked * 0 see below (Door closed/opened) */ if (!present) PTR_AT(io_stru, 1, DWORD) |= 1; TRACE(" ----> DEVICE STATUS <0x%08x>\n", PTR_AT(io_stru, 1, DWORD)); break; case 8: /* Volume size */ PTR_AT(io_stru, 1, DWORD) = FRAME_OF_TOC(toc, toc.LastTrack + 1) - FRAME_OF_TOC(toc, toc.FirstTrack) - 1; TRACE(" ----> VOLUME SIZE <%d>\n", PTR_AT(io_stru, 1, DWORD)); break; case 9: /* media changed ? */ /* answers don't know... -1/1 for yes/no would be better */ io_stru[1] = 0; /* FIXME? 1? */ TRACE(" ----> MEDIA CHANGED <%d>\n", io_stru[1]); break; case 10: /* audio disk info */ io_stru[1] = toc.FirstTrack; /* starting track of the disc */ io_stru[2] = toc.LastTrack; /* ending track */ MSCDEX_StoreMSF(FRAME_OF_TOC(toc, toc.LastTrack + 1) - FRAME_OF_TOC(toc, toc.FirstTrack) - 1, io_stru + 3); TRACE(" ----> AUDIO DISK INFO <%d-%d/%08x>\n", io_stru[1], io_stru[2], PTR_AT(io_stru, 3, DWORD)); break; case 11: /* audio track info */ if (io_stru[1] >= toc.FirstTrack && io_stru[1] <= toc.LastTrack) { MSCDEX_StoreMSF(FRAME_OF_TOC(toc, io_stru[1]), io_stru + 2); /* starting point if the track */ io_stru[6] = CTRL_OF_TOC(toc, io_stru[1]); } else { PTR_AT(io_stru, 2, DWORD) = 0; io_stru[6] = 0; } TRACE(" ----> AUDIO TRACK INFO[%d] = [%08x:%d]\n", io_stru[1], PTR_AT(io_stru, 2, DWORD), io_stru[6]); break; case 12: /* get Q-Channel info */ io_stru[1] = CTRL_OF_TOC(toc, data.CurrentPosition.TrackNumber); io_stru[2] = data.CurrentPosition.TrackNumber; io_stru[3] = 0; /* FIXME ?? */ /* why the heck did MS use another format for 0MSF information... sigh */ { BYTE bTmp[4]; MSCDEX_StoreMSF(FRAME_OF_ADDR(data.CurrentPosition.TrackRelativeAddress), bTmp); io_stru[ 4] = bTmp[2]; io_stru[ 5] = bTmp[1]; io_stru[ 6] = bTmp[0]; io_stru[ 7] = 0; MSCDEX_StoreMSF(FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress), bTmp); io_stru[ 8] = bTmp[2]; io_stru[ 9] = bTmp[1]; io_stru[10] = bTmp[0]; io_stru[11] = 0; } TRACE("Q-Channel info: Ctrl/adr=%02x TNO=%02x X=%02x rtt=%02x:%02x:%02x rtd=%02x:%02x:%02x (cf=%08x, tp=%08x)\n", io_stru[ 1], io_stru[ 2], io_stru[ 3], io_stru[ 4], io_stru[ 5], io_stru[ 6], io_stru[ 8], io_stru[ 9], io_stru[10], FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress), FRAME_OF_TOC(toc, data.CurrentPosition.TrackNumber)); break; case 15: /* Audio status info */ /* !!!! FIXME FIXME FIXME !! */ PTR_AT(io_stru, 1, WORD) = 2 | ((data.CurrentPosition.Header.AudioStatus == AUDIO_STATUS_PAUSED) ? 1 : 0); if (!present) { PTR_AT(io_stru, 3, DWORD) = 0; PTR_AT(io_stru, 7, DWORD) = 0; } else { PTR_AT(io_stru, 3, DWORD) = FRAME_OF_TOC(toc, toc.FirstTrack); PTR_AT(io_stru, 7, DWORD) = FRAME_OF_TOC(toc, toc.LastTrack + 1); } TRACE("Audio status info: status=%04x startLoc=%d endLoc=%d\n", PTR_AT(io_stru, 1, WORD), PTR_AT(io_stru, 3, DWORD), PTR_AT(io_stru, 7, DWORD)); break; default: FIXME("IOCTL INPUT: Unimplemented <%d>!!\n", io_stru[0]); Error = 0x0c; break; } break; case 12: io_stru = (dorealmode) ? PTR_REAL_TO_LIN( PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD)) : MapSL( MAKESEGPTR(PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD))); TRACE(" --> IOCTL OUTPUT <%d>\n", io_stru[0]); switch (io_stru[0]) { case 0: /* eject */ DeviceIoControl(h, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &br, NULL); TRACE(" ----> EJECT\n"); break; case 2: /* reset drive */ DeviceIoControl(h, IOCTL_STORAGE_RESET_DEVICE, NULL, 0, NULL, 0, &br, NULL); TRACE(" ----> RESET\n"); break; case 3: /* Audio Channel Control */ FIXME(" ----> AUDIO CHANNEL CONTROL (NIY)\n"); break; case 5: /* close tray */ DeviceIoControl(h, IOCTL_STORAGE_LOAD_MEDIA, NULL, 0, NULL, 0, &br, NULL); TRACE(" ----> CLOSE TRAY\n"); break; default: FIXME(" IOCTL OUTPUT: Unimplemented <%d>!!\n", io_stru[0]); Error = 0x0c; break; } break; case 128: /* read long */ { LPVOID dst = MapSL(MAKESEGPTR(PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD))); DWORD at = PTR_AT(driver_request, 20, DWORD); WORD num = PTR_AT(driver_request, 18, WORD); RAW_READ_INFO rri; switch (driver_request[13]) { case 1: /* Red book addressing mode = 0:m:s:f */ /* FIXME : frame <=> msf conversion routines could be shared * between mscdex and mcicda */ at = LOBYTE(HIWORD(at)) * CDFRAMES_PERMIN + HIBYTE(LOWORD(at)) * CDFRAMES_PERSEC + LOBYTE(LOWORD(at)); /* fall through */ case 0: /* HSG addressing mode */ switch (PTR_AT(driver_request, 24, BYTE)) { case 0: /* cooked */ ReadFile(h, dst, num * 2048, &br, NULL); break; case 1: /* FIXME: computation is wrong */ rri.DiskOffset.u.HighPart = 0; rri.DiskOffset.u.LowPart = at << 11; rri.TrackMode = YellowMode2; rri.SectorCount = num; DeviceIoControl(h, IOCTL_CDROM_RAW_READ, &rri, sizeof(rri), dst, num * 2352, &br, NULL); break; default: ERR("Unsupported read mode !!\n"); Error = 0x0c; break; } break; default: ERR("Unsupported address mode !!\n"); Error = 0x0c; break; } } break; case 131: /* seek */ { DWORD at; CDROM_SEEK_AUDIO_MSF seek; at = PTR_AT(driver_request, 20, DWORD); TRACE(" --> SEEK AUDIO mode :<0x%02X>, [%d]\n", driver_request[13], at); switch (driver_request[13]) { case 1: /* Red book addressing mode = 0:m:s:f */ /* FIXME : frame <=> msf conversion routines could be shared * between mscdex and mcicda */ at = LOBYTE(HIWORD(at)) * CDFRAMES_PERMIN + HIBYTE(LOWORD(at)) * CDFRAMES_PERSEC + LOBYTE(LOWORD(at)); /* fall through */ case 0: /* HSG addressing mode */ seek.M = at / CDFRAMES_PERMIN; seek.S = (at / CDFRAMES_PERSEC) % 60; seek.F = at % CDFRAMES_PERSEC; DeviceIoControl(h, IOCTL_CDROM_SEEK_AUDIO_MSF, &seek, sizeof(seek), NULL, 0, &br, NULL); break; default: ERR("Unsupported address mode !!\n"); Error = 0x0c; break; } } break; case 132: /* play */ { DWORD beg, end; CDROM_PLAY_AUDIO_MSF play; beg = end = PTR_AT(driver_request, 14, DWORD); end += PTR_AT(driver_request, 18, DWORD); TRACE(" --> PLAY AUDIO mode :<0x%02X>, [%d-%d]\n", driver_request[13], beg, end); switch (driver_request[13]) { case 1: /* Red book addressing mode = 0:m:s:f */ /* FIXME : frame <=> msf conversion routines could be shared * between mscdex and mcicda */ beg = LOBYTE(LOWORD(beg)) * CDFRAMES_PERMIN + HIBYTE(LOWORD(beg)) * CDFRAMES_PERSEC + LOBYTE(HIWORD(beg)); end = LOBYTE(LOWORD(end)) * CDFRAMES_PERMIN + HIBYTE(LOWORD(end)) * CDFRAMES_PERSEC + LOBYTE(HIWORD(end)); /* fall through */ case 0: /* HSG addressing mode */ play.StartingM = beg / CDFRAMES_PERMIN; play.StartingS = (beg / CDFRAMES_PERSEC) % 60; play.StartingF = beg % CDFRAMES_PERSEC; play.EndingM = end / CDFRAMES_PERMIN; play.EndingS = (end / CDFRAMES_PERSEC) % 60; play.EndingF = end % CDFRAMES_PERSEC; DeviceIoControl(h, IOCTL_CDROM_PLAY_AUDIO_MSF, &play, sizeof(play), NULL, 0, &br, NULL); break; default: ERR("Unsupported address mode !!\n"); Error = 0x0c; break; } } break; case 133: if (data.CurrentPosition.Header.AudioStatus == AUDIO_STATUS_IN_PROGRESS) { DeviceIoControl(h, IOCTL_CDROM_PAUSE_AUDIO, NULL, 0, NULL, 0, &br, NULL); TRACE(" --> STOP AUDIO (Paused)\n"); } else { DeviceIoControl(h, IOCTL_CDROM_STOP_AUDIO, NULL, 0, NULL, 0, &br, NULL); TRACE(" --> STOP AUDIO (Stopped)\n"); } break; case 136: TRACE(" --> RESUME AUDIO\n"); DeviceIoControl(h, IOCTL_CDROM_PAUSE_AUDIO, NULL, 0, NULL, 0, &br, NULL); break; default: FIXME(" ioctl unimplemented <%d>\n", driver_request[2]); Error = 0x0c; } /* setting error codes if any */ if (Error < 255) { driver_request[4] |= 0x80; driver_request[3] = Error; } CloseHandle(h); /* setting status bits * 3 == playing && done * 1 == done */ driver_request[4] |= (data.CurrentPosition.Header.AudioStatus == AUDIO_STATUS_IN_PROGRESS) ? 3 : 1; MSCDEX_Dump("End", driver_request, dorealmode); } static void MSCDEX_Handler(CONTEXT* context) { int drive, count; char* p; switch (LOBYTE(context->Eax)) { case 0x00: /* Installation check */ /* Count the number of contiguous CDROM drives */ for (drive = count = 0; drive < 26; drive++) { if (is_cdrom(drive)) { while (is_cdrom(drive + count)) count++; break; } } TRACE("Installation check: %d cdroms, starting at %d\n", count, drive); SET_BX( context, count ); SET_CX( context, (drive < 26) ? drive : 0 ); break; case 0x01: /* get drive device list */ { CDROM_HEAP* cdrom_heap = CDROM_GetHeap(); CDROM_DEVICE_HEADER* dev = &cdrom_heap->hdr; SEGPTR ptr_dev = ISV86(context) ? MAKESEGPTR( cdrom_heap->cdrom_segment, FIELD_OFFSET(CDROM_HEAP, hdr) ) : MAKESEGPTR( cdrom_heap->cdrom_selector, FIELD_OFFSET(CDROM_HEAP, hdr) ); p = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx); for (drive = 0; drive < dev->units; drive++) { *p = drive; /* subunit */ ++p; *(DWORD*)p = ptr_dev; p += sizeof(DWORD); } TRACE("Get drive device list\n"); } break; case 0x0B: /* drive check */ SET_AX( context, is_cdrom(CX_reg(context)) ); SET_BX( context, 0xADAD ); break; case 0x0C: /* get version */ SET_BX( context, 0x020a ); TRACE("Version number => %04x\n", BX_reg(context)); break; case 0x0D: /* get drive letters */ p = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx); for (drive = 0; drive < 26; drive++) { if (is_cdrom(drive)) *p++ = drive; } TRACE("Get drive letters\n"); break; case 0x10: /* direct driver access */ { BYTE* driver_request; CDROM_HEAP* cdrom_heap = CDROM_GetHeap(); if (!is_cdrom(CX_reg(context))) { WARN("Request made doesn't match a CD ROM drive (%d)\n", CX_reg(context)); SET_CFLAG( context ); SET_AX( context, 0x000f ); /* invalid drive */ return; } driver_request = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx); if (!driver_request) { /* FIXME - to be deleted ?? */ ERR("ES:BX==0 ! SEGFAULT ?\n"); ERR("-->BX=0x%04x, ES=0x%04x, DS=0x%04x, CX=0x%04x\n", BX_reg(context), context->SegEs, context->SegDs, CX_reg(context)); driver_request[4] |= 0x80; driver_request[3] = 5; /* bad request length */ return; } driver_request[1] = CX_reg(context) - cdrom_heap->hdr.drive; MSCDEX_Request(driver_request, ISV86(context)); } break; default: FIXME("Unimplemented MSCDEX function 0x%02X.\n", LOBYTE(context->Eax)); break; } } /* prototypes */ static void WINAPI cdrom_strategy(CONTEXT*ctx); static void WINAPI cdrom_interrupt(CONTEXT*ctx); /* device info */ static const WINEDEV cdromdev = { "WINE_CD_", ATTR_CHAR|ATTR_REMOVABLE|ATTR_IOCTL, cdrom_strategy, cdrom_interrupt }; static REQUEST_HEADER *cdrom_driver_request; /* Return to caller */ static void do_lret(CONTEXT*ctx) { WORD *stack = CTX_SEG_OFF_TO_LIN(ctx, ctx->SegSs, ctx->Esp); ctx->Eip = *(stack++); ctx->SegCs = *(stack++); ctx->Esp += 2*sizeof(WORD); } static void WINAPI cdrom_strategy(CONTEXT*ctx) { cdrom_driver_request = CTX_SEG_OFF_TO_LIN(ctx, ctx->SegEs, ctx->Ebx); do_lret( ctx ); } static void WINAPI cdrom_interrupt(CONTEXT*ctx) { if (cdrom_driver_request->unit > CDROM_GetHeap()->hdr.units) cdrom_driver_request->status = STAT_ERROR | 1; /* unknown unit */ else MSCDEX_Request((BYTE*)cdrom_driver_request, ISV86(ctx)); do_lret( ctx ); } /********************************************************************** * MSCDEX_InstallCDROM [internal] * * Install the CDROM driver into the DOS device driver chain. */ void MSCDEX_InstallCDROM(void) { CDROM_HEAP *cdrom_heap = CDROM_GetHeap(); DOSDEV_SetupDevice( &cdromdev, cdrom_heap->cdrom_segment, FIELD_OFFSET(CDROM_HEAP, hdr), FIELD_OFFSET(CDROM_HEAP, thunk) ); } ================================================ FILE: krnl386/int31.c ================================================ /* * DPMI 0.9 emulation * * Copyright 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include "windef.h" #include "winbase.h" #include "winternl.h" #include "wine/winbase16.h" #include "windows/wownt32.h" #include "kernel16_private.h" #include "dosexe.h" #include "excpt.h" #include "wine/debug.h" #include "wine/exception.h" WINE_DEFAULT_DEBUG_CHANNEL(int31); /* Structure for real-mode callbacks */ typedef struct { DWORD edi; DWORD esi; DWORD ebp; DWORD reserved; DWORD ebx; DWORD edx; DWORD ecx; DWORD eax; WORD fl; WORD es; WORD ds; WORD fs; WORD gs; WORD ip; WORD cs; WORD sp; WORD ss; } REALMODECALL; typedef struct tagRMCB { DWORD address; DWORD proc_ofs,proc_sel; DWORD regs_ofs,regs_sel; struct tagRMCB *next; } RMCB; static RMCB *FirstRMCB = NULL; static WORD dpmi_flag; static void* lastvalloced = NULL; static BYTE DPMI_retval; #include "pshpack1.h" typedef struct { WORD Handle; DWORD Offset; } MOVEOFS; typedef struct { DWORD Length; MOVEOFS Source; MOVEOFS Dest; } MOVESTRUCT; #include "poppack.h" /********************************************************************** * DOSVM_IsDos32 * * Return TRUE if we are in 32-bit protected mode DOS process. */ BOOL DOSVM_IsDos32(void) { return (dpmi_flag & 1) != 0; } /********************************************************************** * alloc_pm_selector * * Allocate a 64k sized selector corresponding to a real mode segment. */ static WORD alloc_pm_selector( WORD seg, unsigned char flags ) { WORD sel = wine_ldt_alloc_entries( 1 ); if (sel) { LDT_ENTRY entry; wine_ldt_set_base( &entry, PTR_REAL_TO_LIN(seg, 0) ); wine_ldt_set_limit( &entry, 0xffff ); wine_ldt_set_flags( &entry, flags ); wine_ldt_set_entry( sel, &entry ); } return sel; } /********************************************************************** * dpmi_exception_handler * * Handle EXCEPTION_VM86_STI exceptions generated * when there are pending asynchronous events. */ static LONG WINAPI dpmi_exception_handler(EXCEPTION_POINTERS *eptr) { EXCEPTION_RECORD *rec = eptr->ExceptionRecord; CONTEXT *context = eptr->ContextRecord; if (rec->ExceptionCode == EXCEPTION_VM86_STI) { if (ISV86(context)) ERR( "Real mode STI caught by protected mode handler!\n" ); DOSVM_SendQueuedEvents(context); return EXCEPTION_CONTINUE_EXECUTION; } else if (rec->ExceptionCode == EXCEPTION_VM86_INTx) { if (ISV86(context)) ERR( "Real mode INTx caught by protected mode handler!\n" ); DPMI_retval = (BYTE)rec->ExceptionInformation[0]; return EXCEPTION_EXECUTE_HANDLER; } return EXCEPTION_CONTINUE_SEARCH; } /********************************************************************** * INT_GetRealModeContext */ static void INT_GetRealModeContext( REALMODECALL *call, CONTEXT *context ) { context->Eax = call->eax; context->Ebx = call->ebx; context->Ecx = call->ecx; context->Edx = call->edx; context->Esi = call->esi; context->Edi = call->edi; context->Ebp = call->ebp; context->EFlags = call->fl | V86_FLAG; context->Eip = call->ip; context->Esp = call->sp; context->SegCs = call->cs; context->SegDs = call->ds; context->SegEs = call->es; context->SegFs = call->fs; context->SegGs = call->gs; context->SegSs = call->ss; } /********************************************************************** * INT_SetRealModeContext */ static void INT_SetRealModeContext( REALMODECALL *call, CONTEXT *context, BOOL mod_csip_ssssp ) { call->eax = context->Eax; call->ebx = context->Ebx; call->ecx = context->Ecx; call->edx = context->Edx; call->esi = context->Esi; call->edi = context->Edi; call->ebp = context->Ebp; call->fl = LOWORD(context->EFlags); if (mod_csip_ssssp) { call->ip = LOWORD(context->Eip); call->sp = LOWORD(context->Esp); call->cs = context->SegCs; call->ss = context->SegSs; } call->ds = context->SegDs; call->es = context->SegEs; call->fs = context->SegFs; call->gs = context->SegGs; } /********************************************************************** * DPMI_xalloc * special virtualalloc, allocates linearly monoton growing memory. * (the usual VirtualAlloc does not satisfy that restriction) */ static LPVOID DPMI_xalloc( DWORD len ) { LPVOID ret; LPVOID oldlastv = lastvalloced; if (lastvalloced) { int xflag = 0; ret = NULL; while (!ret) { ret = VirtualAlloc( lastvalloced, len, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE ); if (!ret) lastvalloced = (char *) lastvalloced + 0x10000; /* we failed to allocate one in the first round. * try non-linear */ if (!xflag && (lastvalloced= oldlastv)) xflag++; if ((xflag==2) && (lastvalloced < oldlastv)) { FIXME( "failed to allocate any memory of %u bytes!\n", len ); return NULL; } } } else { ret = VirtualAlloc( NULL, len, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE ); } lastvalloced = (LPVOID)(((DWORD)ret+len+0xffff)&~0xffff); return ret; } /********************************************************************** * DPMI_xfree */ static void DPMI_xfree( LPVOID ptr ) { VirtualFree( ptr, 0, MEM_RELEASE ); } /********************************************************************** * DPMI_xrealloc * * FIXME: perhaps we could grow this mapped area... */ static LPVOID DPMI_xrealloc( LPVOID ptr, DWORD newsize ) { MEMORY_BASIC_INFORMATION mbi; if (ptr) { LPVOID newptr; if (!VirtualQuery(ptr,&mbi,sizeof(mbi))) { FIXME( "realloc of DPMI_xallocd region %p?\n", ptr ); return NULL; } if (mbi.State == MEM_FREE) { FIXME( "realloc of DPMI_xallocd region %p?\n", ptr ); return NULL; } /* We do not shrink allocated memory. most reallocs * only do grows anyway */ if (newsize <= mbi.RegionSize) return ptr; newptr = DPMI_xalloc( newsize ); if (!newptr) return NULL; memcpy( newptr, ptr, mbi.RegionSize ); DPMI_xfree( ptr ); return newptr; } return DPMI_xalloc( newsize ); } extern void DPMI_CallRMCB32(RMCB *rmcb, UINT16 ss, DWORD esp, UINT16*es, DWORD*edi); #if 0 /* original code, which early gccs puke on */ { int _clobber; __asm__ __volatile__( "pushl %%ebp\n" "pushl %%ebx\n" "pushl %%es\n" "pushl %%ds\n" "pushfl\n" "mov %7,%%es\n" "mov %5,%%ds\n" ".byte 0x36, 0xff, 0x18\n" /* lcall *%ss:(%eax) */ "popl %%ds\n" "mov %%es,%0\n" "popl %%es\n" "popl %%ebx\n" "popl %%ebp\n" : "=d" (*es), "=D" (*edi), "=S" (_clobber), "=a" (_clobber), "=c" (_clobber) : "0" (ss), "2" (esp), "4" (rmcb->regs_sel), "1" (rmcb->regs_ofs), "3" (&rmcb->proc_ofs) ); } #else /* code generated by a gcc new enough */ ; __ASM_GLOBAL_FUNC(_DPMI_CallRMCB32, "pushl %ebp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") "movl %esp,%ebp\n\t" __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") "pushl %edi\n\t" __ASM_CFI(".cfi_rel_offset %edi,-4\n\t") "pushl %esi\n\t" __ASM_CFI(".cfi_rel_offset %esi,-8\n\t") "movl 0x8(%ebp),%eax\n\t" "movl 0x10(%ebp),%esi\n\t" "movl 0xc(%ebp),%edx\n\t" "movl 0x10(%eax),%ecx\n\t" "movl 0xc(%eax),%edi\n\t" "addl $0x4,%eax\n\t" "pushl %ebp\n\t" "pushl %ebx\n\t" "pushl %es\n\t" "pushl %ds\n\t" "pushfl\n\t" "mov %cx,%es\n\t" "mov %dx,%ds\n\t" ".byte 0x36, 0xff, 0x18\n\t" /* lcall *%ss:(%eax) */ "popl %ds\n\t" "mov %es,%dx\n\t" "popl %es\n\t" "popl %ebx\n\t" "popl %ebp\n\t" "movl 0x14(%ebp),%eax\n\t" "movw %dx,(%eax)\n\t" "movl 0x18(%ebp),%edx\n\t" "movl %edi,(%edx)\n\t" "popl %esi\n\t" __ASM_CFI(".cfi_same_value %esi\n\t") "popl %edi\n\t" __ASM_CFI(".cfi_same_value %edi\n\t") "leave\n\t" __ASM_CFI(".cfi_def_cfa %esp,4\n\t") __ASM_CFI(".cfi_same_value %ebp\n\t") "ret") #endif /********************************************************************** * DPMI_CallRMCBProc * * This routine does the hard work of calling a callback procedure. */ static void DPMI_CallRMCBProc( CONTEXT *context, RMCB *rmcb, WORD flag ) { DWORD old_vif = get_vm86_teb_info()->dpmi_vif; /* Disable virtual interrupts. */ get_vm86_teb_info()->dpmi_vif = 0; if (wine_ldt_is_system( rmcb->proc_sel )) { /* Wine-internal RMCB, call directly */ ((RMCBPROC)rmcb->proc_ofs)(context); } else __TRY { UINT16 ss,es; DWORD esp,edi; INT_SetRealModeContext(MapSL(MAKESEGPTR( rmcb->regs_sel, rmcb->regs_ofs )), context, TRUE); ss = alloc_pm_selector( context->SegSs, WINE_LDT_FLAGS_DATA ); esp = context->Esp; FIXME("untested!\n"); /* The called proc ends with an IRET, and takes these parameters: * DS:ESI = pointer to real-mode SS:SP * ES:EDI = pointer to real-mode call structure * It returns: * ES:EDI = pointer to real-mode call structure (may be a copy) * It is the proc's responsibility to change the return CS:IP in the * real-mode call structure. */ if (flag & 1) { /* 32-bit DPMI client */ DPMI_CallRMCB32(rmcb, ss, esp, &es, &edi); } else { /* 16-bit DPMI client */ CONTEXT ctx = *context; ctx.SegCs = rmcb->proc_sel; ctx.Eip = rmcb->proc_ofs; ctx.SegDs = ss; ctx.Esi = esp; ctx.SegEs = rmcb->regs_sel; ctx.Edi = rmcb->regs_ofs; /* FIXME: I'm pretty sure this isn't right - should push flags first */ WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&ctx ); es = ctx.SegEs; edi = ctx.Edi; } wine_ldt_free_entries( ss, 1 ); INT_GetRealModeContext( MapSL( MAKESEGPTR( es, edi )), context); } __EXCEPT(dpmi_exception_handler) { } __ENDTRY /* Restore virtual interrupt flag. */ get_vm86_teb_info()->dpmi_vif = old_vif; } /********************************************************************** * DPMI_CallRMProc * * This routine does the hard work of calling a real mode procedure. */ int DPMI_CallRMProc( CONTEXT *context, LPWORD stack, int args, int iret ) { LPWORD stack16; LPVOID addr = NULL; /* avoid gcc warning */ RMCB *CurrRMCB; BOOL alloc = FALSE, already = FALSE; BYTE *code; TRACE("EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n", context->Eax, context->Ebx, context->Ecx, context->Edx ); TRACE("ESI=%08x EDI=%08x ES=%04x DS=%04x CS:IP=%04x:%04x, %d WORD arguments, %s\n", context->Esi, context->Edi, context->SegEs, context->SegDs, context->SegCs, LOWORD(context->Eip), args, iret?"IRET":"FAR" ); callrmproc_again: /* there might be some code that just jumps to RMCBs or the like, in which case following the jumps here might get us to a shortcut */ code = CTX_SEG_OFF_TO_LIN(context, context->SegCs, context->Eip); switch (*code) { case 0xe9: /* JMP NEAR */ context->Eip += 3 + *(WORD *)(code+1); /* yeah, I know these gotos don't look good... */ goto callrmproc_again; case 0xea: /* JMP FAR */ context->Eip = *(WORD *)(code+1); context->SegCs = *(WORD *)(code+3); /* ...but since the label is there anyway... */ goto callrmproc_again; case 0xeb: /* JMP SHORT */ context->Eip += 2 + *(signed char *)(code+1); /* ...because of other gotos below, so... */ goto callrmproc_again; } /* shortcut for chaining to internal interrupt handlers */ if ((context->SegCs == 0xF000) && iret) { DOSVM_CallBuiltinHandler( context, LOWORD(context->Eip)/4 ); return 0; } /* shortcut for RMCBs */ CurrRMCB = FirstRMCB; while (CurrRMCB && (HIWORD(CurrRMCB->address) != context->SegCs)) CurrRMCB = CurrRMCB->next; if (!CurrRMCB && !MZ_Current()) { FIXME("DPMI real-mode call using DOS VM task system, not fully tested!\n"); TRACE("creating VM86 task\n"); MZ_AllocDPMITask(); } if (!already) { if (!context->SegSs) { alloc = TRUE; /* allocate default stack */ stack16 = addr = DOSMEM_AllocBlock( 64, (UINT16 *)&(context->SegSs) ); context->Esp = 64-2; stack16 += 32-1; if (!addr) { ERR("could not allocate default stack\n"); return 1; } } else { stack16 = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); } context->Esp -= (args + (iret?1:0)) * sizeof(WORD); stack16 -= args; if (args) memcpy(stack16, stack, args*sizeof(WORD) ); /* push flags if iret */ if (iret) { stack16--; args++; *stack16 = LOWORD(context->EFlags); } /* push return address (return to interrupt wrapper) */ *(--stack16) = DOSVM_dpmi_segments->wrap_seg; *(--stack16) = 0; /* adjust stack */ context->Esp -= 2*sizeof(WORD); already = TRUE; } if (CurrRMCB) { /* RMCB call, invoke protected-mode handler directly */ DPMI_CallRMCBProc(context, CurrRMCB, dpmi_flag); /* check if we returned to where we thought we would */ if ((context->SegCs != DOSVM_dpmi_segments->wrap_seg) || (LOWORD(context->Eip) != 0)) { /* we need to continue at different address in real-mode space, so we need to set it all up for real mode again */ goto callrmproc_again; } } else { TRACE("entering real mode...\n"); DOSVM_Enter( context ); TRACE("returned from real-mode call\n"); } if (alloc) DOSMEM_FreeBlock( addr ); return 0; } /********************************************************************** * CallRMInt */ static void DOSVM_CallRMInt( CONTEXT *context ) { CONTEXT realmode_ctx; FARPROC16 rm_int = DOSVM_GetRMHandler( BL_reg(context) ); REALMODECALL *call = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); INT_GetRealModeContext( call, &realmode_ctx ); /* we need to check if a real-mode program has hooked the interrupt */ if (HIWORD(rm_int)!=0xF000) { /* yup, which means we need to switch to real mode... */ realmode_ctx.SegCs = HIWORD(rm_int); realmode_ctx.Eip = LOWORD(rm_int); if (DPMI_CallRMProc( &realmode_ctx, NULL, 0, TRUE)) SET_CFLAG(context); } else { RESET_CFLAG(context); /* use the IP we have instead of BL_reg, in case some apps decide to move interrupts around for whatever reason... */ DOSVM_CallBuiltinHandler( &realmode_ctx, LOWORD(rm_int)/4 ); } INT_SetRealModeContext( call, &realmode_ctx, FALSE ); } /********************************************************************** * CallRMProc */ static void DOSVM_CallRMProc( CONTEXT *context, int iret ) { REALMODECALL *p = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); CONTEXT context16; TRACE("RealModeCall: EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n", p->eax, p->ebx, p->ecx, p->edx); TRACE(" ESI=%08x EDI=%08x ES=%04x DS=%04x CS:IP=%04x:%04x, %d WORD arguments, %s\n", p->esi, p->edi, p->es, p->ds, p->cs, p->ip, CX_reg(context), iret?"IRET":"FAR" ); if (!(p->cs) && !(p->ip)) { /* remove this check if Int21/6501 case map function has been implemented */ SET_CFLAG(context); return; } INT_GetRealModeContext(p, &context16); DPMI_CallRMProc( &context16, ((LPWORD)MapSL(MAKESEGPTR(context->SegSs, LOWORD(context->Esp))))+3, CX_reg(context), iret ); INT_SetRealModeContext(p, &context16, FALSE); } /* (see dosmem.c, function DOSMEM_InitDPMI) */ static void StartPM( CONTEXT *context ) { UINT16 cs, ss, ds, es; CONTEXT pm_ctx; PDB16 *psp = (PDB16 *)PTR_REAL_TO_LIN(DOSVM_psp, 0); HANDLE16 env_seg = psp->environment; unsigned char selflags = WINE_LDT_FLAGS_DATA; RESET_CFLAG(context); dpmi_flag = AX_reg(context); /* our mode switch wrapper have placed the desired CS into DX */ cs = alloc_pm_selector( context->Edx, WINE_LDT_FLAGS_CODE ); /* due to a flaw in some CPUs (at least mine), it is best to mark stack segments as 32-bit if they can be used in 32-bit code. Otherwise, these CPUs may not set the high word of esp during a ring transition (from kernel code) to the 16-bit stack, and this causes trouble if executing 32-bit code using this stack. */ if (dpmi_flag & 1) selflags |= WINE_LDT_FLAGS_32BIT; ss = alloc_pm_selector( context->SegSs, selflags ); /* do the same for the data segments, just in case */ if (context->SegDs == context->SegSs) ds = ss; else ds = alloc_pm_selector( context->SegDs, selflags ); es = alloc_pm_selector( DOSVM_psp, selflags ); /* convert environment pointer, as the spec says, but we're a bit lazy about the size here... */ psp->environment = alloc_pm_selector( env_seg, WINE_LDT_FLAGS_DATA ); pm_ctx = *context; pm_ctx.SegCs = DOSVM_dpmi_segments->dpmi_sel; /* our mode switch wrapper expects the new CS in DX, and the new SS in AX */ pm_ctx.Eax = ss; pm_ctx.Edx = cs; pm_ctx.SegDs = ds; pm_ctx.SegEs = es; pm_ctx.SegFs = wine_get_fs(); pm_ctx.SegGs = wine_get_gs(); pm_ctx.EFlags &= ~V86_FLAG; TRACE("DOS program is now entering %d-bit protected mode\n", DOSVM_IsDos32() ? 32 : 16); __TRY { WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&pm_ctx ); } __EXCEPT(dpmi_exception_handler) { } __ENDTRY TRACE( "Protected mode DOS program is terminating\n" ); /* * FIXME: Instead of calling DOSVM_Exit, we should release all * allocated protected mode resources and call MZ_Exit * using real mode context. See DPMI specification. */ DOSVM_Exit( DPMI_retval ); #if 0 wine_ldt_free_entries( psp->environment, 1 ); psp->environment = env_seg; wine_ldt_free_entries(es,1); if (ds != ss) wine_ldt_free_entries(ds,1); wine_ldt_free_entries(ss,1); wine_ldt_free_entries(cs,1); #endif } static RMCB *DPMI_AllocRMCB( void ) { RMCB *NewRMCB = HeapAlloc(GetProcessHeap(), 0, sizeof(RMCB)); UINT16 uParagraph; if (NewRMCB) { LPVOID RMCBmem = DOSMEM_AllocBlock(4, &uParagraph); LPBYTE p = RMCBmem; *p++ = 0xcd; /* RMCB: */ *p++ = 0x31; /* int $0x31 */ /* it is the called procedure's task to change the return CS:EIP the DPMI 0.9 spec states that if it doesn't, it will be called again */ *p++ = 0xeb; *p++ = 0xfc; /* jmp RMCB */ NewRMCB->address = MAKELONG(0, uParagraph); NewRMCB->next = FirstRMCB; FirstRMCB = NewRMCB; } return NewRMCB; } FARPROC16 DPMI_AllocInternalRMCB( RMCBPROC proc ) { RMCB *NewRMCB = DPMI_AllocRMCB(); if (NewRMCB) { NewRMCB->proc_ofs = (DWORD)proc; NewRMCB->proc_sel = 0; NewRMCB->regs_ofs = 0; NewRMCB->regs_sel = 0; return (FARPROC16)(NewRMCB->address); } return NULL; } static BOOL DPMI_FreeRMCB( DWORD address ) { RMCB *CurrRMCB = FirstRMCB; RMCB *PrevRMCB = NULL; while (CurrRMCB && (CurrRMCB->address != address)) { PrevRMCB = CurrRMCB; CurrRMCB = CurrRMCB->next; } if (CurrRMCB) { if (PrevRMCB) PrevRMCB->next = CurrRMCB->next; else FirstRMCB = CurrRMCB->next; DOSMEM_FreeBlock(PTR_REAL_TO_LIN(SELECTOROF(CurrRMCB->address),OFFSETOF(CurrRMCB->address))); HeapFree(GetProcessHeap(), 0, CurrRMCB); return TRUE; } return FALSE; } /********************************************************************** * DOSVM_RawModeSwitchHandler * * DPMI Raw Mode Switch handler */ void WINAPI DOSVM_RawModeSwitchHandler( CONTEXT *context ) { CONTEXT rm_ctx; int ret; /* initialize real-mode context as per spec */ memset(&rm_ctx, 0, sizeof(rm_ctx)); rm_ctx.SegDs = AX_reg(context); rm_ctx.SegEs = CX_reg(context); rm_ctx.SegSs = DX_reg(context); rm_ctx.Esp = context->Ebx; rm_ctx.SegCs = SI_reg(context); rm_ctx.Eip = context->Edi; rm_ctx.Ebp = context->Ebp; rm_ctx.SegFs = 0; rm_ctx.SegGs = 0; /* Copy interrupt state. */ if (get_vm86_teb_info()->dpmi_vif) rm_ctx.EFlags = V86_FLAG | VIF_MASK; else rm_ctx.EFlags = V86_FLAG; /* enter real mode again */ TRACE("re-entering real mode at %04x:%04x\n",rm_ctx.SegCs,rm_ctx.Eip); ret = DOSVM_Enter( &rm_ctx ); /* when the real-mode stuff call its mode switch address, DOSVM_Enter will return and we will continue here */ if (ret<0) { ERR("Sync lost!\n"); /* if the sync was lost, there's no way to recover */ ExitProcess(1); } /* alter protected-mode context as per spec */ context->SegDs = LOWORD(rm_ctx.Eax); context->SegEs = LOWORD(rm_ctx.Ecx); context->SegSs = LOWORD(rm_ctx.Edx); context->Esp = rm_ctx.Ebx; context->SegCs = LOWORD(rm_ctx.Esi); context->Eip = rm_ctx.Edi; context->Ebp = rm_ctx.Ebp; context->SegFs = 0; context->SegGs = 0; /* Copy interrupt state. */ if (rm_ctx.EFlags & VIF_MASK) get_vm86_teb_info()->dpmi_vif = 1; else get_vm86_teb_info()->dpmi_vif = 0; /* Return to new address and hope that we didn't mess up */ TRACE("re-entering protected mode at %04x:%08x\n", context->SegCs, context->Eip); } /********************************************************************** * AllocRMCB */ static void DOSVM_AllocRMCB( CONTEXT *context ) { RMCB *NewRMCB = DPMI_AllocRMCB(); TRACE("Function to call: %04x:%04x\n", (WORD)context->SegDs, SI_reg(context) ); if (NewRMCB) { NewRMCB->proc_ofs = DOSVM_IsDos32() ? context->Esi : LOWORD(context->Esi); NewRMCB->proc_sel = context->SegDs; NewRMCB->regs_ofs = DOSVM_IsDos32() ? context->Edi : LOWORD(context->Edi); NewRMCB->regs_sel = context->SegEs; SET_CX( context, HIWORD(NewRMCB->address) ); SET_DX( context, LOWORD(NewRMCB->address) ); } else { SET_AX( context, 0x8015 ); /* callback unavailable */ SET_CFLAG(context); } } /********************************************************************** * FreeRMCB */ static void DOSVM_FreeRMCB( CONTEXT *context ) { FIXME("callback address: %04x:%04x\n", CX_reg(context), DX_reg(context)); if (!DPMI_FreeRMCB(MAKELONG(DX_reg(context), CX_reg(context)))) { SET_AX( context, 0x8024 ); /* invalid callback address */ SET_CFLAG(context); } } static BYTE * XMS_Offset( MOVEOFS *ofs ) { if (ofs->Handle) return (BYTE*)GlobalLock16(ofs->Handle)+ofs->Offset; else return PTR_REAL_TO_LIN(SELECTOROF(ofs->Offset),OFFSETOF(ofs->Offset)); } /********************************************************************** * XMS_Handler */ static void XMS_Handler( CONTEXT *context ) { switch(AH_reg(context)) { case 0x00: /* Get XMS version number */ TRACE("get XMS version number\n"); SET_AX( context, 0x0200 ); /* 2.0 */ SET_BX( context, 0x0000 ); /* internal revision */ SET_DX( context, 0x0001 ); /* HMA exists */ break; case 0x08: /* Query Free Extended Memory */ { MEMORYSTATUS status; TRACE("query free extended memory\n"); GlobalMemoryStatus( &status ); SET_DX( context, status.dwAvailVirtual >> 10 ); SET_AX( context, status.dwAvailVirtual >> 10 ); TRACE("returning largest %dK, total %dK\n", AX_reg(context), DX_reg(context)); } break; case 0x09: /* Allocate Extended Memory Block */ TRACE("allocate extended memory block (%dK)\n", DX_reg(context)); SET_DX( context, GlobalAlloc16(GMEM_MOVEABLE, (DWORD)DX_reg(context)<<10) ); SET_AX( context, DX_reg(context) ? 1 : 0 ); if (!DX_reg(context)) SET_BL( context, 0xA0 ); /* out of memory */ break; case 0x0a: /* Free Extended Memory Block */ TRACE("free extended memory block %04x\n",DX_reg(context)); if(!DX_reg(context) || GlobalFree16(DX_reg(context))) { SET_AX( context, 0 ); /* failure */ SET_BL( context, 0xa2 ); /* invalid handle */ } else SET_AX( context, 1 ); /* success */ break; case 0x0b: /* Move Extended Memory Block */ { MOVESTRUCT*move=CTX_SEG_OFF_TO_LIN(context, context->SegDs,context->Esi); BYTE*src,*dst; TRACE("move extended memory block\n"); src=XMS_Offset(&move->Source); dst=XMS_Offset(&move->Dest); memcpy(dst,src,move->Length); if (move->Source.Handle) GlobalUnlock16(move->Source.Handle); if (move->Dest.Handle) GlobalUnlock16(move->Dest.Handle); break; } case 0x88: /* Query Any Free Extended Memory */ { MEMORYSTATUS status; SYSTEM_INFO info; TRACE("query any free extended memory\n"); GlobalMemoryStatus( &status ); GetSystemInfo( &info ); context->Eax = status.dwAvailVirtual >> 10; context->Edx = status.dwAvailVirtual >> 10; context->Ecx = (DWORD)info.lpMaximumApplicationAddress; SET_BL( context, 0 ); /* No errors. */ TRACE("returning largest %dK, total %dK, highest 0x%x\n", context->Eax, context->Edx, context->Ecx); } break; default: INT_BARF( context, 0x31 ); SET_AX( context, 0x0000 ); /* failure */ SET_BL( context, 0x80 ); /* function not implemented */ break; } } /********************************************************************** * DOSVM_CheckWrappers * * Check if this was really a wrapper call instead of an interrupt. */ BOOL DOSVM_CheckWrappers( CONTEXT *context ) { if (context->SegCs==DOSVM_dpmi_segments->dpmi_seg) { /* This is the protected mode switch */ StartPM(context); return TRUE; } else if (context->SegCs==DOSVM_dpmi_segments->xms_seg) { /* This is the XMS driver entry point */ XMS_Handler(context); return TRUE; } else { /* Check for RMCB */ RMCB *CurrRMCB = FirstRMCB; while (CurrRMCB && (HIWORD(CurrRMCB->address) != context->SegCs)) CurrRMCB = CurrRMCB->next; if (CurrRMCB) { /* RMCB call, propagate to protected-mode handler */ DPMI_CallRMCBProc(context, CurrRMCB, dpmi_flag); return TRUE; } } return FALSE; } /********************************************************************** * DOSVM_Int31Handler * * Handler for int 31h (DPMI). */ void WINAPI DOSVM_Int31Handler( CONTEXT *context ) { RESET_CFLAG(context); switch(AX_reg(context)) { case 0x0000: /* Allocate LDT descriptors */ TRACE( "allocate LDT descriptors (%d)\n", CX_reg(context) ); { WORD sel = AllocSelectorArray16( CX_reg(context) ); if(!sel) { TRACE( "failed\n" ); SET_AX( context, 0x8011 ); /* descriptor unavailable */ SET_CFLAG( context ); } else { TRACE( "success, array starts at 0x%04x\n", sel ); SET_AX( context, sel ); } } break; case 0x0001: /* Free LDT descriptor */ TRACE( "free LDT descriptor (0x%04x)\n", BX_reg(context) ); if (FreeSelector16( BX_reg(context) )) { SET_AX( context, 0x8022 ); /* invalid selector */ SET_CFLAG( context ); } else { /* If a segment register contains the selector being freed, */ /* set it to zero. */ if (!((context->SegDs^BX_reg(context)) & ~3)) context->SegDs = 0; if (!((context->SegEs^BX_reg(context)) & ~3)) context->SegEs = 0; if (!((context->SegFs^BX_reg(context)) & ~3)) context->SegFs = 0; if (!((context->SegGs^BX_reg(context)) & ~3)) context->SegGs = 0; } break; case 0x0002: /* Real mode segment to descriptor */ TRACE( "real mode segment to descriptor (0x%04x)\n", BX_reg(context) ); { WORD entryPoint = 0; /* KERNEL entry point for descriptor */ switch(BX_reg(context)) { case 0x0000: entryPoint = 183; break; /* __0000H */ case 0x0040: entryPoint = 193; break; /* __0040H */ case 0xa000: entryPoint = 174; break; /* __A000H */ case 0xb000: entryPoint = 181; break; /* __B000H */ case 0xb800: entryPoint = 182; break; /* __B800H */ case 0xc000: entryPoint = 195; break; /* __C000H */ case 0xd000: entryPoint = 179; break; /* __D000H */ case 0xe000: entryPoint = 190; break; /* __E000H */ case 0xf000: entryPoint = 194; break; /* __F000H */ default: FIXME("Real mode segment (%x) to descriptor: no longer supported\n", BX_reg(context)); SET_CFLAG( context ); break; } if (entryPoint) { FARPROC16 proc = GetProcAddress16( GetModuleHandle16( "KERNEL" ), (LPCSTR)(ULONG_PTR)entryPoint ); SET_AX( context, LOWORD(proc) ); } } break; case 0x0003: /* Get next selector increment */ TRACE("get selector increment (__AHINCR)\n"); context->Eax = __AHINCR; break; case 0x0004: /* Lock selector (not supported) */ FIXME("lock selector not supported\n"); context->Eax = 0; /* FIXME: is this a correct return value? */ break; case 0x0005: /* Unlock selector (not supported) */ FIXME("unlock selector not supported\n"); context->Eax = 0; /* FIXME: is this a correct return value? */ break; case 0x0006: /* Get selector base address */ TRACE( "get selector base address (0x%04x)\n", BX_reg(context) ); { LDT_ENTRY entry; WORD sel = BX_reg(context); wine_ldt_get_entry( sel, &entry ); if (wine_ldt_is_empty(&entry)) { context->Eax = 0x8022; /* invalid selector */ SET_CFLAG(context); } else { void *base = GetSelectorBase(sel); SET_CX( context, HIWORD(base) ); SET_DX( context, LOWORD(base) ); } } break; case 0x0007: /* Set selector base address */ { DWORD base = MAKELONG( DX_reg(context), CX_reg(context) ); WORD sel = BX_reg(context); TRACE( "set selector base address (0x%04x,0x%08x)\n", sel, base ); /* check if Win16 app wants to access lower 64K of DOS memory */ if (base < 0x10000 && DOSVM_IsWin16()) DOSMEM_MapDosLayout(); SetSelectorBase( sel, base ); } break; case 0x0008: /* Set selector limit */ { DWORD limit = MAKELONG( DX_reg(context), CX_reg(context) ); TRACE( "set selector limit (0x%04x,0x%08x)\n", BX_reg(context), limit ); SetSelectorLimit16( BX_reg(context), limit ); } break; case 0x0009: /* Set selector access rights */ TRACE( "set selector access rights(0x%04x,0x%04x)\n", BX_reg(context), CX_reg(context) ); SelectorAccessRights16( BX_reg(context), 1, CX_reg(context) ); break; case 0x000a: /* Allocate selector alias */ TRACE( "allocate selector alias (0x%04x)\n", BX_reg(context) ); SET_AX( context, AllocCStoDSAlias16( BX_reg(context) ) ); if (!AX_reg(context)) { SET_AX( context, 0x8011 ); /* descriptor unavailable */ SET_CFLAG(context); } break; case 0x000b: /* Get descriptor */ TRACE( "get descriptor (0x%04x)\n", BX_reg(context) ); { LDT_ENTRY *entry = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); wine_ldt_get_entry( BX_reg(context), entry ); } break; case 0x000c: /* Set descriptor */ TRACE( "set descriptor (0x%04x)\n", BX_reg(context) ); { LDT_ENTRY *entry = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); wine_ldt_set_entry( BX_reg(context), entry ); } break; case 0x000d: /* Allocate specific LDT descriptor */ TRACE( "allocate descriptor (0x%04x)\n", BX_reg(context) ); if (!(BX_reg(context) & 4)) { SET_AX( context, 0x8022 ); /* gdt descriptor */ SET_CFLAG( context ); } else { LDT_ENTRY entry; WORD sel = BX_reg(context); wine_ldt_get_entry(sel, &entry); if (wine_ldt_copy.flags[sel >> __AHSHIFT] & WINE_LDT_FLAGS_ALLOCATED) { SET_AX( context, 0x8011 ); /* descriptor unavailable */ SET_CFLAG( context ); } else { wine_ldt_copy.flags[sel >> __AHSHIFT] |= WINE_LDT_FLAGS_ALLOCATED; wine_ldt_set_flags(&entry, WINE_LDT_FLAGS_DATA); wine_ldt_set_base(&entry, 0); wine_ldt_set_limit(&entry, 0); wine_ldt_set_entry(sel, &entry); } } break; case 0x000e: /* Get Multiple Descriptors (1.0) */ FIXME( "get multiple descriptors - unimplemented\n" ); break; case 0x000f: /* Set Multiple Descriptors (1.0) */ FIXME( "set multiple descriptors - unimplemented\n" ); break; case 0x0100: /* Allocate DOS memory block */ TRACE( "allocate DOS memory block (0x%x paragraphs)\n", BX_reg(context) ); { DWORD dw = GlobalDOSAlloc16( (DWORD)BX_reg(context) << 4 ); if (dw) { SET_AX( context, HIWORD(dw) ); SET_DX( context, LOWORD(dw) ); } else { SET_AX( context, 0x0008 ); /* insufficient memory */ SET_BX( context, DOSMEM_Available() >> 4 ); SET_CFLAG(context); } break; } case 0x0101: /* Free DOS memory block */ TRACE( "free DOS memory block (0x%04x)\n", DX_reg(context) ); { WORD error = GlobalDOSFree16( DX_reg(context) ); if (error) { SET_AX( context, 0x0009 ); /* memory block address invalid */ SET_CFLAG( context ); } } break; case 0x0102: /* Resize DOS Memory Block */ FIXME( "resize DOS memory block (0x%04x, 0x%x paragraphs) - unimplemented\n", DX_reg(context), BX_reg(context) ); break; case 0x0200: /* get real mode interrupt vector */ TRACE( "get realmode interrupt vector (0x%02x)\n", BL_reg(context) ); { FARPROC16 proc = DOSVM_GetRMHandler( BL_reg(context) ); SET_CX( context, SELECTOROF(proc) ); SET_DX( context, OFFSETOF(proc) ); } break; case 0x0201: /* set real mode interrupt vector */ TRACE( "set realmode interrupt vector (0x%02x, 0x%04x:0x%04x)\n", BL_reg(context), CX_reg(context), DX_reg(context) ); DOSVM_SetRMHandler( BL_reg(context), (FARPROC16)MAKESEGPTR(CX_reg(context), DX_reg(context)) ); break; case 0x0202: /* Get Processor Exception Handler Vector */ FIXME( "Get Processor Exception Handler Vector (0x%02x)\n", BL_reg(context) ); if (DOSVM_IsDos32()) { SET_CX( context, 0 ); context->Edx = 0; } else { SET_CX( context, 0 ); SET_DX( context, 0 ); } break; case 0x0203: /* Set Processor Exception Handler Vector */ FIXME( "Set Processor Exception Handler Vector (0x%02x)\n", BL_reg(context) ); break; case 0x0204: /* Get protected mode interrupt vector */ TRACE("get protected mode interrupt handler (0x%02x)\n", BL_reg(context)); if (DOSVM_IsDos32()) { FARPROC48 handler = DOSVM_GetPMHandler48( BL_reg(context) ); SET_CX( context, handler.selector ); context->Edx = handler.offset; } else { FARPROC16 handler = DOSVM_GetPMHandler16( BL_reg(context) ); SET_CX( context, SELECTOROF(handler) ); SET_DX( context, OFFSETOF(handler) ); } break; case 0x0205: /* Set protected mode interrupt vector */ TRACE("set protected mode interrupt handler (0x%02x,0x%04x:0x%08x)\n", BL_reg(context), CX_reg(context), context->Edx); if (DOSVM_IsDos32()) { FARPROC48 handler; handler.selector = CX_reg(context); handler.offset = context->Edx; DOSVM_SetPMHandler48( BL_reg(context), handler ); } else { FARPROC16 handler; handler = (FARPROC16)MAKESEGPTR( CX_reg(context), DX_reg(context)); DOSVM_SetPMHandler16( BL_reg(context), handler ); } break; case 0x0300: /* Simulate real mode interrupt */ TRACE( "Simulate real mode interrupt %02x.\n", BL_reg(context)); DOSVM_CallRMInt( context ); break; case 0x0301: /* Call real mode procedure with far return */ TRACE( "Call real mode procedure with far return.\n" ); DOSVM_CallRMProc( context, FALSE ); break; case 0x0302: /* Call real mode procedure with interrupt return */ TRACE( "Call real mode procedure with interrupt return.\n" ); DOSVM_CallRMProc( context, TRUE ); break; case 0x0303: /* Allocate Real Mode Callback Address */ TRACE( "Allocate real mode callback address.\n" ); DOSVM_AllocRMCB( context ); break; case 0x0304: /* Free Real Mode Callback Address */ TRACE( "Free real mode callback address.\n" ); DOSVM_FreeRMCB( context ); break; case 0x0305: /* Get State Save/Restore Addresses */ TRACE("get state save/restore addresses\n"); /* we probably won't need this kind of state saving */ SET_AX( context, 0 ); /* real mode: just point to the lret */ SET_BX( context, DOSVM_dpmi_segments->wrap_seg ); SET_CX( context, 2 ); /* protected mode: don't have any handler yet... */ /* FIXME: Use DI in 16-bit DPMI and EDI in 32-bit DPMI */ FIXME("no protected-mode dummy state save/restore handler yet\n"); SET_SI( context, 0 ); context->Edi = 0; break; case 0x0306: /* Get Raw Mode Switch Addresses */ TRACE("get raw mode switch addresses\n"); /* real mode, point to standard DPMI return wrapper */ SET_BX( context, DOSVM_dpmi_segments->wrap_seg ); SET_CX( context, 0 ); /* protected mode, point to DPMI call wrapper */ /* FIXME: Use DI in 16-bit DPMI and EDI in 32-bit DPMI */ /* FIXME: Doesn't work in DPMI32... */ SET_SI( context, DOSVM_dpmi_segments->dpmi_sel ); context->Edi = 8; /* offset of the INT 0x31 call */ break; case 0x0400: /* Get DPMI version */ TRACE("get DPMI version\n"); { SYSTEM_INFO si; GetSystemInfo(&si); SET_AX( context, 0x005a ); /* DPMI version 0.90 */ SET_BX( context, 0x0005 ); /* Flags: 32-bit, virtual memory */ SET_CL( context, si.wProcessorLevel ); SET_DX( context, 0x0870 ); /* Master/slave interrupt controller base */ } break; case 0x0401: /* Get DPMI Capabilities (1.0) */ FIXME( "get dpmi capabilities - unimplemented\n"); break; case 0x0500: /* Get free memory information */ TRACE("get free memory information\n"); { MEMORYSTATUS status; SYSTEM_BASIC_INFORMATION sbi; /* the layout is just the same as MEMMANINFO, but without * the dwSize entry. */ struct { DWORD dwLargestFreeBlock; DWORD dwMaxPagesAvailable; DWORD dwMaxPagesLockable; DWORD dwTotalLinearSpace; DWORD dwTotalUnlockedPages; DWORD dwFreePages; DWORD dwTotalPages; DWORD dwFreeLinearSpace; DWORD dwSwapFilePages; WORD wPageSize; } *info = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); GlobalMemoryStatus( &status ); NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL ); info->wPageSize = sbi.PageSize; info->dwLargestFreeBlock = min(status.dwAvailVirtual, 102400000); info->dwMaxPagesAvailable = info->dwLargestFreeBlock / info->wPageSize; info->dwMaxPagesLockable = info->dwMaxPagesAvailable; info->dwTotalLinearSpace = min(status.dwTotalVirtual, 102400000) / info->wPageSize; info->dwTotalUnlockedPages = info->dwTotalLinearSpace; info->dwFreePages = info->dwMaxPagesAvailable; info->dwTotalPages = info->dwTotalLinearSpace; info->dwFreeLinearSpace = info->dwMaxPagesAvailable; info->dwSwapFilePages = status.dwTotalPageFile / info->wPageSize; break; } case 0x0501: /* Allocate memory block */ { DWORD size = MAKELONG( CX_reg(context), BX_reg(context) ); BYTE *ptr; TRACE( "allocate memory block (%u bytes)\n", size ); ptr = DPMI_xalloc( size ); TRACE( "%p\n", ptr ); if (!ptr) { SET_AX( context, 0x8012 ); /* linear memory not available */ SET_CFLAG(context); } else { SET_BX( context, HIWORD(ptr) ); SET_CX( context, LOWORD(ptr) ); SET_SI( context, HIWORD(ptr) ); SET_DI( context, LOWORD(ptr) ); } break; } case 0x0502: /* Free memory block */ { DWORD handle = MAKELONG( DI_reg(context), SI_reg(context) ); TRACE( "free memory block (0x%08x)\n", handle ); DPMI_xfree( (void *)handle ); } break; case 0x0503: /* Resize memory block */ { DWORD size = MAKELONG( CX_reg(context), BX_reg(context) ); DWORD handle = MAKELONG( DI_reg(context), SI_reg(context) ); BYTE *ptr; TRACE( "resize memory block (0x%08x, %u bytes)\n", handle, size ); ptr = DPMI_xrealloc( (void *)handle, size ); if (!ptr) { SET_AX( context, 0x8012 ); /* linear memory not available */ SET_CFLAG(context); } else { SET_BX( context, HIWORD(ptr) ); SET_CX( context, LOWORD(ptr) ); SET_SI( context, HIWORD(ptr) ); SET_DI( context, LOWORD(ptr) ); } } break; case 0x0507: /* Set page attributes (1.0) */ FIXME( "set page attributes - unimplemented\n" ); break; /* Just ignore it */ case 0x0600: /* Lock linear region */ TRACE( "lock linear region - ignored (no paging)\n" ); break; case 0x0601: /* Unlock linear region */ TRACE( "unlock linear region - ignored (no paging)\n" ); break; case 0x0602: /* Mark real mode region as pageable */ TRACE( "mark real mode region as pageable - ignored (no paging)\n" ); break; case 0x0603: /* Relock real mode region */ TRACE( "relock real mode region - ignored (no paging)\n" ); break; case 0x0604: /* Get page size */ { SYSTEM_BASIC_INFORMATION info; TRACE("get pagesize\n"); NtQuerySystemInformation( SystemBasicInformation, &info, sizeof(info), NULL ); SET_BX( context, HIWORD(info.PageSize) ); SET_CX( context, LOWORD(info.PageSize) ); break; } case 0x0700: /* Mark pages as paging candidates */ TRACE( "mark pages as paging candidates - ignored (no paging)\n" ); break; case 0x0701: /* Discard pages */ TRACE( "discard pages - ignored (no paging)\n" ); break; case 0x0702: /* Mark page as demand-paging candidate */ TRACE( "mark page as demand-paging candidate - ignored (no paging)\n" ); break; case 0x0703: /* Discard page contents */ TRACE( "discard page contents - ignored (no paging)\n" ); break; case 0x0800: /* Physical address mapping */ FIXME( "physical address mapping (0x%08x) - unimplemented\n", MAKELONG(CX_reg(context),BX_reg(context)) ); break; case 0x0900: /* Get and Disable Virtual Interrupt State */ TRACE( "Get and Disable Virtual Interrupt State: %d\n", get_vm86_teb_info()->dpmi_vif ); SET_AL( context, get_vm86_teb_info()->dpmi_vif ? 1 : 0 ); get_vm86_teb_info()->dpmi_vif = 0; break; case 0x0901: /* Get and Enable Virtual Interrupt State */ TRACE( "Get and Enable Virtual Interrupt State: %d\n", get_vm86_teb_info()->dpmi_vif ); SET_AL( context, get_vm86_teb_info()->dpmi_vif ? 1 : 0 ); get_vm86_teb_info()->dpmi_vif = 1; break; case 0x0902: /* Get Virtual Interrupt State */ TRACE( "Get Virtual Interrupt State: %d\n", get_vm86_teb_info()->dpmi_vif ); SET_AL( context, get_vm86_teb_info()->dpmi_vif ? 1 : 0 ); break; case 0x0e00: /* Get Coprocessor Status (1.0) */ /* * Return status in AX bits: * B0 - MPv (MP bit in the virtual MSW/CR0) * 0 = numeric coprocessor is disabled for this client * 1 = numeric coprocessor is enabled for this client * B1 - EMv (EM bit in the virtual MSW/CR0) * 0 = client is not emulating coprocessor instructions * 1 = client is emulating coprocessor instructions * B2 - MPr (MP bit from the actual MSW/CR0) * 0 = numeric coprocessor is not present * 1 = numeric coprocessor is present * B3 - EMr (EM bit from the actual MSW/CR0) * 0 = host is not emulating coprocessor instructions * 1 = host is emulating coprocessor instructions * B4-B7 - coprocessor type * 00H = no coprocessor * 02H = 80287 * 03H = 80387 * 04H = 80486 with numeric coprocessor * 05H-0FH = reserved for future numeric processors */ TRACE( "Get Coprocessor Status\n" ); SET_AX( context, 69 ); /* 486, coprocessor present and enabled */ break; case 0x0e01: /* Set Coprocessor Emulation (1.0) */ /* * See function 0x0e00. * BX bit B0 is new value for MPv. * BX bit B1 is new value for EMv. */ if (BX_reg(context) != 1) FIXME( "Set Coprocessor Emulation to %d - unimplemented\n", BX_reg(context) ); else TRACE( "Set Coprocessor Emulation - ignored\n" ); break; default: INT_BARF( context, 0x31 ); SET_AX( context, 0x8001 ); /* unsupported function */ SET_CFLAG(context); break; } } ================================================ FILE: krnl386/int33.c ================================================ /* * DOS interrupt 33h handler * * Copyright 1999 Ove Kåven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "dosexe.h" #include "vga.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); static struct { WORD x, y, but; WORD lbcount, rbcount, rlastx, rlasty, llastx, llasty; FARPROC16 callback; WORD callmask; WORD VMPratio, HMPratio, oldx, oldy; WORD hide_count; } mouse_info; /********************************************************************** * INT33_ResetMouse * * Handler for: * - subfunction 0x00 (reset mouse) * - subfunction 0x21 (software reset) */ static void INT33_ResetMouse( CONTEXT *context ) { memset( &mouse_info, 0, sizeof(mouse_info) ); /* Set the default mickey/pixel ratio */ mouse_info.HMPratio = 8; mouse_info.VMPratio = 16; /* Hide the mouse cursor */ mouse_info.hide_count = 1; VGA_ShowMouse( FALSE ); if (context) { SET_AX( context, 0xFFFF ); /* driver installed */ SET_BX( context, 3 ); /* number of buttons */ } } /********************************************************************** * DOSVM_Int33Handler * * Handler for int 33h (MS MOUSE). */ void WINAPI DOSVM_Int33Handler( CONTEXT *context ) { switch (AX_reg(context)) { case 0x0000: TRACE("Reset mouse driver and request status\n"); INT33_ResetMouse( context ); break; case 0x0001: TRACE("Show mouse cursor, old hide count: %d\n", mouse_info.hide_count); if (mouse_info.hide_count >= 1) mouse_info.hide_count--; if (!mouse_info.hide_count) VGA_ShowMouse( TRUE ); break; case 0x0002: TRACE("Hide mouse cursor, old hide count: %d\n", mouse_info.hide_count); if(!mouse_info.hide_count) VGA_ShowMouse( FALSE ); mouse_info.hide_count++; break; case 0x0003: TRACE("Return mouse position and button status: (%d,%d) and %d\n", mouse_info.x, mouse_info.y, mouse_info.but); SET_BX( context, mouse_info.but ); SET_CX( context, mouse_info.x ); SET_DX( context, mouse_info.y ); break; case 0x0004: FIXME("Position mouse cursor\n"); break; case 0x0005: TRACE("Return Mouse button press Information for %s mouse button\n", BX_reg(context) ? "right" : "left"); if (BX_reg(context)) { SET_BX( context, mouse_info.rbcount ); mouse_info.rbcount = 0; SET_CX( context, mouse_info.rlastx ); SET_DX( context, mouse_info.rlasty ); } else { SET_BX( context, mouse_info.lbcount ); mouse_info.lbcount = 0; SET_CX( context, mouse_info.llastx ); SET_DX( context, mouse_info.llasty ); } SET_AX( context, mouse_info.but ); break; case 0x0007: FIXME("Define horizontal mouse cursor range %d..%d\n", CX_reg(context), DX_reg(context)); break; case 0x0008: FIXME("Define vertical mouse cursor range %d..%d\n", CX_reg(context), DX_reg(context)); break; case 0x0009: FIXME("Define graphics mouse cursor\n"); break; case 0x000A: FIXME("Define text mouse cursor\n"); break; case 0x000B: TRACE("Read Mouse motion counters\n"); { int dx = ((int)mouse_info.x - (int)mouse_info.oldx) * (mouse_info.HMPratio / 8); int dy = ((int)mouse_info.y - (int)mouse_info.oldy) * (mouse_info.VMPratio / 8); SET_CX( context, (WORD)dx ); SET_DX( context, (WORD)dy ); mouse_info.oldx = mouse_info.x; mouse_info.oldy = mouse_info.y; } break; case 0x000C: TRACE("Define mouse interrupt subroutine\n"); mouse_info.callmask = CX_reg(context); mouse_info.callback = (FARPROC16)MAKESEGPTR(context->SegEs, DX_reg(context)); break; case 0x000F: TRACE("Set mickey/pixel ratio\n"); mouse_info.HMPratio = CX_reg(context); mouse_info.VMPratio = DX_reg(context); break; case 0x0010: FIXME("Define screen region for update\n"); break; case 0x0015: TRACE("Get mouse driver state and memory requirements\n"); SET_BX(context, sizeof(mouse_info)); break; case 0x0021: TRACE("Software reset\n"); INT33_ResetMouse( context ); break; default: INT_BARF(context,0x33); } } typedef struct { FARPROC16 proc; WORD mask,but,x,y,mx,my; } MCALLDATA; static void MouseRelay(CONTEXT *context,void *mdata) { MCALLDATA *data = mdata; CONTEXT ctx = *context; if (!ISV86(&ctx)) { ctx.EFlags |= V86_FLAG; ctx.SegSs = 0; /* Allocate new stack. */ } ctx.Eax = data->mask; ctx.Ebx = data->but; ctx.Ecx = data->x; ctx.Edx = data->y; ctx.Esi = data->mx; ctx.Edi = data->my; ctx.SegCs = SELECTOROF(data->proc); ctx.Eip = OFFSETOF(data->proc); HeapFree(GetProcessHeap(), 0, data); DPMI_CallRMProc(&ctx, NULL, 0, 0); } static void QueueMouseRelay(DWORD mx, DWORD my, WORD mask) { mouse_info.x = mx; mouse_info.y = my; /* Left button down */ if(mask & 0x02) { mouse_info.but |= 0x01; mouse_info.llastx = mx; mouse_info.llasty = my; mouse_info.lbcount++; } /* Left button up */ if(mask & 0x04) { mouse_info.but &= ~0x01; } /* Right button down */ if(mask & 0x08) { mouse_info.but |= 0x02; mouse_info.rlastx = mx; mouse_info.rlasty = my; mouse_info.rbcount++; } /* Right button up */ if(mask & 0x10) { mouse_info.but &= ~0x02; } /* Middle button down */ if(mask & 0x20) { mouse_info.but |= 0x04; } /* Middle button up */ if(mask & 0x40) { mouse_info.but &= ~0x04; } if ((mask & mouse_info.callmask) && mouse_info.callback) { MCALLDATA *data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MCALLDATA)); data->proc = mouse_info.callback; data->mask = mask & mouse_info.callmask; data->but = mouse_info.but; data->x = mouse_info.x; data->y = mouse_info.y; /* * Fake mickeys. * * FIXME: This is not entirely correct. If mouse if moved to the edge * of the screen, mouse will stop moving and mickeys won't * be updated even though they should be. */ data->mx = mouse_info.x * (mouse_info.HMPratio / 8); data->my = mouse_info.y * (mouse_info.VMPratio / 8); DOSVM_QueueEvent(-1, DOS_PRIORITY_MOUSE, MouseRelay, data); } } void DOSVM_Int33Message(UINT message,WPARAM wParam,LPARAM lParam) { WORD mask = 0; unsigned Height, Width, SX=1, SY=1; if (VGA_GetMode(&Height, &Width, NULL)) { /* may need to do some coordinate scaling */ if (Width) SX = 640/Width; if (!SX) SX=1; } switch (message) { case WM_MOUSEMOVE: mask |= 0x01; break; case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK: mask |= 0x02; break; case WM_LBUTTONUP: mask |= 0x04; break; case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK: mask |= 0x08; break; case WM_RBUTTONUP: mask |= 0x10; break; case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK: mask |= 0x20; break; case WM_MBUTTONUP: mask |= 0x40; break; } QueueMouseRelay(LOWORD(lParam) * SX, HIWORD(lParam) * SY, mask); } void DOSVM_Int33Console(MOUSE_EVENT_RECORD *record) { unsigned Height, Width; WORD mask = 0; BOOL newLeftButton = record->dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED; BOOL oldLeftButton = mouse_info.but & 0x01; BOOL newRightButton = record->dwButtonState & RIGHTMOST_BUTTON_PRESSED; BOOL oldRightButton = mouse_info.but & 0x02; BOOL newMiddleButton = record->dwButtonState & FROM_LEFT_2ND_BUTTON_PRESSED; BOOL oldMiddleButton = mouse_info.but & 0x04; if(newLeftButton && !oldLeftButton) mask |= 0x02; else if(!newLeftButton && oldLeftButton) mask |= 0x04; if(newRightButton && !oldRightButton) mask |= 0x08; else if(!newRightButton && oldRightButton) mask |= 0x10; if(newMiddleButton && !oldMiddleButton) mask |= 0x20; else if(!newMiddleButton && oldMiddleButton) mask |= 0x40; if (VGA_GetAlphaMode(&Width, &Height)) QueueMouseRelay( 640 / Width * record->dwMousePosition.X, 200 / Height * record->dwMousePosition.Y, mask ); } ================================================ FILE: krnl386/int67.c ================================================ /* * Int67 (EMS) emulation * * Copyright 2002 Jukka Heinonen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "wine/winbase16.h" #include "dosexe.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); /* * EMS page size == 16 kilobytes. */ #define EMS_PAGE_SIZE (16*1024) /* * Linear address of EMS page. */ #define EMS_PAGE_ADDRESS(base,page) (((char*)base) + EMS_PAGE_SIZE * page) /* * Maximum number of pages that can be allocated using EMS. */ #define EMS_MAX_PAGES 1024 /* * Maximum number of EMS handles (allocated blocks). */ #define EMS_MAX_HANDLES 256 /* * Global EMM Import Record. * Applications can get address of this record * and directly access allocated memory if they use * IOCTL interface. * * FIXME: Missing lots of fields, packing is not correct. */ static struct { struct { UCHAR hindex; /* handle number */ BYTE flags; /* bit 0: normal handle rather than system handle */ char name[8]; /* handle name */ WORD pages; /* allocated pages */ void *address; /* physical address*/ } handle[EMS_MAX_HANDLES]; /* Wine specific fields... */ int used_pages; /* Number of allocated pages. */ void *frame_address; /* Address of 64k EMS page frame */ WORD frame_selector; /* Segment of 64k EMS page frame */ struct { UCHAR hindex; /* handle number */ WORD logical_page; /* logical page */ } mapping[4]; struct { UCHAR hindex; /* handle number */ WORD logical_page; /* logical page */ } mapping_save_area[EMS_MAX_HANDLES][4]; } *EMS_record; /********************************************************************** * EMS_init * * Allocates and initialized page frame and EMS global import record. */ static void EMS_init(void) { /* * Start of 64k EMS frame. */ ULONG base = 0xc0000; if(EMS_record) return; EMS_record = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*EMS_record)); EMS_record->frame_address = (void *)base; EMS_record->frame_selector = base >> 4; } /********************************************************************** * EMS_alloc * * Get handle and allocate memory. */ static void EMS_alloc( CONTEXT *context ) { int hindex = 1; /* handle zero is reserved for system */ while(hindex < EMS_MAX_HANDLES && EMS_record->handle[hindex].address) hindex++; if(hindex == EMS_MAX_HANDLES) { SET_AH( context, 0x85 ); /* status: no more handles available */ } else { int pages = BX_reg(context); void *buffer = HeapAlloc( GetProcessHeap(), 0, pages * EMS_PAGE_SIZE ); if(!buffer) { SET_AH( context, 0x88 ); /* status: insufficient pages available */ } else { EMS_record->handle[hindex].address = buffer; EMS_record->handle[hindex].pages = pages; EMS_record->used_pages += pages; SET_DX( context, hindex ); /* handle to allocated memory*/ SET_AH( context, 0 ); /* status: ok */ } } } /********************************************************************** * EMS_access_name * * Get/set handle name. */ static void EMS_access_name( CONTEXT *context ) { char *ptr; int hindex = DX_reg(context); if(hindex < 0 || hindex >= EMS_MAX_HANDLES) { SET_AH( context, 0x83 ); /* invalid handle */ return; } switch (AL_reg(context)) { case 0x00: /* get name */ ptr = PTR_REAL_TO_LIN(context->SegEs, DI_reg(context)); memcpy(ptr, EMS_record->handle[hindex].name, 8); SET_AH( context, 0 ); break; case 0x01: /* set name */ ptr = PTR_REAL_TO_LIN(context->SegDs, SI_reg(context)); memcpy(EMS_record->handle[hindex].name, ptr, 8); SET_AH( context, 0 ); break; default: INT_BARF(context,0x67); break; } } /********************************************************************** * EMS_map * * Map logical page into physical page. */ static BYTE EMS_map( WORD physical_page, WORD new_hindex, WORD new_logical_page ) { int old_hindex; int old_logical_page; void *physical_address; if(physical_page > 3) return 0x8b; /* status: invalid physical page */ old_hindex = EMS_record->mapping[physical_page].hindex; old_logical_page = EMS_record->mapping[physical_page].logical_page; physical_address = EMS_PAGE_ADDRESS(EMS_record->frame_address, physical_page); /* unmap old page */ if(old_hindex) { void *ptr = EMS_PAGE_ADDRESS(EMS_record->handle[old_hindex].address, old_logical_page); memcpy(ptr, physical_address, EMS_PAGE_SIZE); } /* map new page */ if(new_hindex && new_logical_page != 0xffff) { void *ptr = EMS_PAGE_ADDRESS(EMS_record->handle[new_hindex].address, new_logical_page); if(new_hindex >= EMS_MAX_HANDLES || !EMS_record->handle[new_hindex].address) return 0x83; /* status: invalid handle */ if(new_logical_page >= EMS_record->handle[new_hindex].pages) return 0x8a; /* status: invalid logical page */ memcpy(physical_address, ptr, EMS_PAGE_SIZE); EMS_record->mapping[physical_page].hindex = new_hindex; EMS_record->mapping[physical_page].logical_page = new_logical_page; } else { EMS_record->mapping[physical_page].hindex = 0; EMS_record->mapping[physical_page].logical_page = 0; } return 0; /* status: ok */ } /********************************************************************** * EMS_map_multiple * * Map multiple logical pages into physical pages. */ static void EMS_map_multiple( CONTEXT *context ) { WORD *ptr = PTR_REAL_TO_LIN(context->SegDs, SI_reg(context)); BYTE status = 0; int i; for(i=0; iframe_selector) >> 10, DX_reg(context), ptr[0] ); break; default: status = 0x8f; /* status: undefined subfunction */ } SET_AH( context, status ); } /********************************************************************** * EMS_free * * Free memory and release handle. */ static void EMS_free( CONTEXT *context ) { int hindex = DX_reg(context); int i; if(hindex < 0 || hindex >= EMS_MAX_HANDLES) { SET_AH( context, 0x83 ); /* status: invalid handle */ return; } if(!EMS_record->handle[hindex].address) { SET_AH( context, 0 ); /* status: ok */ return; } EMS_record->used_pages -= EMS_record->handle[hindex].pages; /* unmap pages */ for(i=0; i<4; i++) if(EMS_record->mapping[i].hindex == hindex) EMS_record->mapping[i].hindex = 0; /* free block */ HeapFree( GetProcessHeap(), 0, EMS_record->handle[hindex].address ); EMS_record->handle[hindex].address = 0; SET_AH( context, 0 ); /* status: ok */ } /********************************************************************** * EMS_save_context * * Save physical page mappings into handle specific save area. */ static void EMS_save_context( CONTEXT *context ) { WORD h = DX_reg(context); int i; for(i=0; i<4; i++) { EMS_record->mapping_save_area[h][i].hindex = EMS_record->mapping[i].hindex; EMS_record->mapping_save_area[h][i].logical_page = EMS_record->mapping[i].logical_page; } SET_AX( context, 0 ); /* status: ok */ } /********************************************************************** * EMS_restore_context * * Restore physical page mappings from handle specific save area. */ static void EMS_restore_context( CONTEXT *context ) { WORD handle = DX_reg(context); int i; for(i=0; i<4; i++) { int hindex = EMS_record->mapping_save_area[handle][i].hindex; int logical_page = EMS_record->mapping_save_area[handle][i].logical_page; if(EMS_map( i, hindex, logical_page )) { SET_AX( context, 0x8e ); /* status: restore of mapping context failed */ return; } } SET_AX( context, 0 ); /* status: ok */ } /********************************************************************** * DOSVM_Int67Handler * * Handler for interrupt 67h EMS routines. */ void WINAPI DOSVM_Int67Handler( CONTEXT *context ) { switch (AH_reg(context)) { case 0x40: /* EMS - GET MANAGER STATUS */ SET_AH( context, 0 ); /* status: ok */ break; case 0x41: /* EMS - GET PAGE FRAME SEGMENT */ EMS_init(); SET_BX( context, EMS_record->frame_selector ); /* segment of page frame */ SET_AH( context, 0 ); /* status: ok */ break; case 0x42: /* EMS - GET NUMBER OF PAGES */ EMS_init(); /* unallocated 16k pages */ SET_BX( context, EMS_MAX_PAGES - EMS_record->used_pages ); /* total number of 16k pages */ SET_DX( context, EMS_MAX_PAGES ); /* status: ok */ SET_AH( context, 0 ); break; case 0x43: /* EMS - GET HANDLE AND ALLOCATE MEMORY */ EMS_init(); EMS_alloc(context); break; case 0x44: /* EMS - MAP MEMORY */ EMS_init(); SET_AH( context, EMS_map( AL_reg(context), DX_reg(context), BX_reg(context) ) ); break; case 0x45: /* EMS - RELEASE HANDLE AND MEMORY */ EMS_init(); EMS_free(context); break; case 0x46: /* EMS - GET EMM VERSION */ SET_AL( context, 0x40 ); /* version 4.0 */ SET_AH( context, 0 ); /* status: ok */ break; case 0x47: /* EMS - SAVE MAPPING CONTEXT */ EMS_init(); EMS_save_context(context); break; case 0x48: /* EMS - RESTORE MAPPING CONTEXT */ EMS_init(); EMS_restore_context(context); break; case 0x49: /* EMS - reserved - GET I/O PORT ADDRESSES */ case 0x4a: /* EMS - reserved - GET TRANSLATION ARRAY */ INT_BARF(context,0x67); break; case 0x4b: /* EMS - GET NUMBER OF EMM HANDLES */ SET_BX( context, EMS_MAX_HANDLES ); /* EMM handles */ SET_AH( context, 0 ); /* status: ok */ break; case 0x4c: /* EMS - GET PAGES OWNED BY HANDLE */ case 0x4d: /* EMS - GET PAGES FOR ALL HANDLES */ case 0x4e: /* EMS - GET OR SET PAGE MAP */ case 0x4f: /* EMS 4.0 - GET/SET PARTIAL PAGE MAP */ INT_BARF(context,0x67); break; case 0x50: /* EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES */ EMS_init(); EMS_map_multiple(context); break; case 0x51: /* EMS 4.0 - REALLOCATE PAGES */ case 0x52: /* EMS 4.0 - GET/SET HANDLE ATTRIBUTES */ INT_BARF(context,0x67); break; case 0x53: /* EMS 4.0 - GET/SET HANDLE NAME */ EMS_init(); EMS_access_name(context); break; case 0x54: /* EMS 4.0 - GET HANDLE DIRECTORY */ case 0x55: /* EMS 4.0 - ALTER PAGE MAP AND JUMP */ case 0x56: /* EMS 4.0 - ALTER PAGE MAP AND CALL */ case 0x57: /* EMS 4.0 - MOVE/EXCHANGE MEMORY REGION */ case 0x58: /* EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY */ INT_BARF(context,0x67); break; case 0x59: /* EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION */ if(AL_reg(context) == 0x01) { EMS_init(); /* unallocated raw pages */ SET_BX( context, EMS_MAX_PAGES - EMS_record->used_pages ); /* total number raw pages */ SET_DX( context, EMS_MAX_PAGES ); /* status: ok */ SET_AH( context, 0 ); } else INT_BARF(context,0x67); break; case 0x5a: /* EMS 4.0 - ALLOCATE STANDARD/RAW PAGES */ case 0x5b: /* EMS 4.0 - ALTERNATE MAP REGISTER SET */ case 0x5c: /* EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT */ case 0x5d: /* EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS */ INT_BARF(context,0x67); break; case 0xde: /* Virtual Control Program Interface (VCPI) */ if(AL_reg(context) == 0x00) { /* * VCPI INSTALLATION CHECK * (AH_reg() != 0) means VCPI is not present */ TRACE("- VCPI installation check\n"); return; } else INT_BARF(context,0x67); break; default: INT_BARF(context,0x67); } } /********************************************************************** * EMS_Ioctl_Handler * * Handler for interrupt 21h IOCTL routine for device "EMMXXXX0". */ void EMS_Ioctl_Handler( CONTEXT *context ) { assert(AH_reg(context) == 0x44); switch (AL_reg(context)) { case 0x00: /* IOCTL - GET DEVICE INFORMATION */ RESET_CFLAG(context); /* operation was successful */ SET_DX( context, 0x4080 ); /* bit 14 (support ioctl read) and * bit 7 (is_device) */ break; case 0x02: /* EMS - GET MEMORY MANAGER INFORMATION */ /* * This is what is called "Windows Global EMM Import Specification". * Undocumented of course! Supports three requests: * GET API ENTRY POINT * GET EMM IMPORT STRUCTURE ADDRESS * GET MEMORY MANAGER VERSION */ INT_BARF(context,0x21); break; case 0x07: /* IOCTL - GET OUTPUT STATUS */ RESET_CFLAG(context); /* operation was successful */ SET_AL( context, 0xff ); /* device is ready */ break; default: INT_BARF(context,0x21); break; } } ================================================ FILE: krnl386/interrupts.c ================================================ /* * Interrupt emulation * * Copyright 2002 Jukka Heinonen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include "wine/winbase16.h" #include "kernel16_private.h" #include "dosexe.h" #include "winternl.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); WINE_DECLARE_DEBUG_CHANNEL(relay); #define BCD_TO_BIN(x) ((x&15) + (x>>4)*10) #define BIN_TO_BCD(x) ((x%10) + ((x/10)<<4)) static void WINAPI DOSVM_Int01Handler(CONTEXT*); static void WINAPI DOSVM_Int03Handler(CONTEXT*); static void WINAPI DOSVM_Int06Handler(CONTEXT*); static void WINAPI DOSVM_Int11Handler(CONTEXT*); static void WINAPI DOSVM_Int12Handler(CONTEXT*); static void WINAPI DOSVM_Int17Handler(CONTEXT*); static void WINAPI DOSVM_Int19Handler(CONTEXT*); static void WINAPI DOSVM_Int1aHandler(CONTEXT*); static void WINAPI DOSVM_Int20Handler(CONTEXT*); static void WINAPI DOSVM_Int29Handler(CONTEXT*); static void WINAPI DOSVM_Int2aHandler(CONTEXT*); static void WINAPI DOSVM_Int41Handler(CONTEXT*); static void WINAPI DOSVM_Int4bHandler(CONTEXT*); static void WINAPI DOSVM_Int5cHandler(CONTEXT*); static void WINAPI DOSVM_DefaultHandler(CONTEXT*); static FARPROC16 DOSVM_Vectors16[256]; static FARPROC48 DOSVM_Vectors48[256]; static INTPROC DOSVM_VectorsBuiltin[] = { /* 00 */ 0, DOSVM_Int01Handler, 0, DOSVM_Int03Handler, /* 04 */ 0, 0, DOSVM_Int06Handler, 0, /* 08 */ DOSVM_Int08Handler, DOSVM_Int09Handler, 0, 0, /* 0C */ 0, 0, 0, 0, /* 10 */ DOSVM_Int10Handler, DOSVM_Int11Handler, DOSVM_Int12Handler, DOSVM_Int13Handler, /* 14 */ 0, DOSVM_Int15Handler, DOSVM_Int16Handler, DOSVM_Int17Handler, /* 18 */ 0, DOSVM_Int19Handler, DOSVM_Int1aHandler, 0, /* 1C */ 0, 0, 0, 0, /* 20 */ DOSVM_Int20Handler, DOSVM_Int21Handler, 0, 0, /* 24 */ 0, DOSVM_Int25Handler, DOSVM_Int26Handler, 0, /* 28 */ 0, DOSVM_Int29Handler, DOSVM_Int2aHandler, 0, /* 2C */ 0, 0, 0, DOSVM_Int2fHandler, /* 30 */ 0, DOSVM_Int31Handler, 0, DOSVM_Int33Handler, /* 34 */ DOSVM_Int34Handler, DOSVM_Int35Handler, DOSVM_Int36Handler, DOSVM_Int37Handler, /* 38 */ DOSVM_Int38Handler, DOSVM_Int39Handler, DOSVM_Int3aHandler, DOSVM_Int3bHandler, /* 3C */ DOSVM_Int3cHandler, DOSVM_Int3dHandler, DOSVM_Int3eHandler, 0, /* 40 */ 0, DOSVM_Int41Handler, 0, 0, /* 44 */ 0, 0, 0, 0, /* 48 */ 0, 0, 0, DOSVM_Int4bHandler, /* 4C */ 0, 0, 0, 0, /* 50 */ 0, 0, 0, 0, /* 54 */ 0, 0, 0, 0, /* 58 */ 0, 0, 0, 0, /* 5C */ DOSVM_Int5cHandler, 0, 0, 0, /* 60 */ 0, 0, 0, 0, /* 64 */ 0, 0, 0, DOSVM_Int67Handler, /* 68 */ DOSVM_DefaultHandler }; /* * Sizes of real mode and protected mode interrupt stubs. */ #define DOSVM_STUB_RM 4 #define DOSVM_STUB_PM16 5 #define DOSVM_STUB_PM48 6 INTPROC DOSVM_SetBuiltinVector(BYTE intnum, INTPROC handler) { if (intnum < ARRAY_SIZE(DOSVM_VectorsBuiltin)) { INTPROC ret = DOSVM_VectorsBuiltin[intnum]; DOSVM_VectorsBuiltin[intnum] = handler; return ret; } WARN("failed to set builtin int%x\n", intnum ); return NULL; } /********************************************************************** * DOSVM_GetRMVector * * Return pointer to real mode interrupt vector. These are not at fixed * location because those Win16 programs that do not use any real mode * code have protected NULL pointer catching block at low linear memory * and interrupt vectors have been moved to another location. */ static FARPROC16* DOSVM_GetRMVector( BYTE intnum ) { LDT_ENTRY entry; FARPROC16 proc; proc = GetProcAddress16( GetModuleHandle16( "KERNEL" ), (LPCSTR)(ULONG_PTR)183 ); wine_ldt_get_entry( LOWORD(proc), &entry ); return (FARPROC16*)wine_ldt_get_base( &entry ) + intnum; } /********************************************************************** * DOSVM_IsIRQ * * Return TRUE if interrupt is an IRQ. */ static BOOL DOSVM_IsIRQ( BYTE intnum ) { if (intnum >= 0x08 && intnum <= 0x0f) return TRUE; if (intnum >= 0x70 && intnum <= 0x77) return TRUE; return FALSE; } /********************************************************************** * DOSVM_DefaultHandler * * Default interrupt handler. This will be used to emulate all * interrupts that don't have their own interrupt handler. */ static void WINAPI DOSVM_DefaultHandler( CONTEXT *context ) { } /********************************************************************** * DOSVM_GetBuiltinHandler * * Return Wine interrupt handler procedure for a given interrupt. */ static INTPROC DOSVM_GetBuiltinHandler( BYTE intnum ) { if (intnum < ARRAY_SIZE(DOSVM_VectorsBuiltin)) { INTPROC proc = DOSVM_VectorsBuiltin[intnum]; if (proc) return proc; } WARN("int%x not implemented, returning dummy handler\n", intnum ); if (DOSVM_IsIRQ(intnum)) return DOSVM_AcknowledgeIRQ; return DOSVM_DefaultHandler; } /********************************************************************** * DOSVM_IntProcRelay * * Simple DOSRELAY that interprets its argument as INTPROC and calls it. */ static void DOSVM_IntProcRelay( CONTEXT *context, LPVOID data ) { INTPROC proc = (INTPROC)data; proc(context); } /********************************************************************** * DOSVM_PrepareIRQ * */ static void DOSVM_PrepareIRQ( CONTEXT *context, BOOL isbuiltin ) { /* Disable virtual interrupts. */ get_vm86_teb_info()->dpmi_vif = 0; if (!isbuiltin) { DWORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); /* Push return address to stack. */ *(--stack) = context->SegCs; *(--stack) = context->Eip; context->Esp += -8; /* Jump to enable interrupts stub. */ context->SegCs = DOSVM_dpmi_segments->relay_code_sel; context->Eip = 5; } } /********************************************************************** * DOSVM_PushFlags * * This routine is used to make default int25 and int26 handlers leave the * original eflags into stack. In order to do this, stack is manipulated * so that it actually contains two copies of eflags, one of which is * popped during return from interrupt handler. */ static void DOSVM_PushFlags( CONTEXT *context, BOOL islong, BOOL isstub ) { if (islong) { DWORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); context->Esp += -4; /* One item will be added to stack. */ if (isstub) { DWORD ip = stack[0]; DWORD cs = stack[1]; stack += 2; /* Pop ip and cs. */ *(--stack) = context->EFlags; *(--stack) = cs; *(--stack) = ip; } else *(--stack) = context->EFlags; } else { WORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); ADD_LOWORD( context->Esp, -2 ); /* One item will be added to stack. */ if (isstub) { WORD ip = stack[0]; WORD cs = stack[1]; stack += 2; /* Pop ip and cs. */ *(--stack) = LOWORD(context->EFlags); *(--stack) = cs; *(--stack) = ip; } else *(--stack) = LOWORD(context->EFlags); } } /********************************************************************** * DOSVM_EmulateInterruptPM * * Emulate software interrupt in 16-bit or 32-bit protected mode. * Called from signal handler when intXX opcode is executed. * * Pushes interrupt frame to stack and changes instruction * pointer to interrupt handler. */ BOOL DOSVM_EmulateInterruptPM( CONTEXT *context, BYTE intnum ) { TRACE_(relay)("Call DOS int 0x%02x ret=%04x:%08x\n" " eax=%08x ebx=%08x ecx=%08x edx=%08x\n" " esi=%08x edi=%08x ebp=%08x esp=%08x\n" " ds=%04x es=%04x fs=%04x gs=%04x ss=%04x flags=%08x\n", intnum, context->SegCs, context->Eip, context->Eax, context->Ebx, context->Ecx, context->Edx, context->Esi, context->Edi, context->Ebp, context->Esp, context->SegDs, context->SegEs, context->SegFs, context->SegGs, context->SegSs, context->EFlags ); DOSMEM_InitDosMemory(); if (context->SegCs == DOSVM_dpmi_segments->dpmi_sel) { DOSVM_BuildCallFrame( context, DOSVM_IntProcRelay, DOSVM_RawModeSwitchHandler ); } else if (context->SegCs == DOSVM_dpmi_segments->relay_code_sel) { /* * This must not be called using DOSVM_BuildCallFrame. */ DOSVM_RelayHandler( context ); } else if (context->SegCs == DOSVM_dpmi_segments->int48_sel) { /* Restore original flags stored into the stack by the caller. */ DWORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); context->EFlags = stack[2]; if (intnum != context->Eip / DOSVM_STUB_PM48) WARN( "interrupt stub has been modified " "(interrupt is %02x, interrupt stub is %02x)\n", intnum, context->Eip/DOSVM_STUB_PM48 ); TRACE( "builtin interrupt %02x has been branched to\n", intnum ); if (intnum == 0x25 || intnum == 0x26) DOSVM_PushFlags( context, TRUE, TRUE ); DOSVM_BuildCallFrame( context, DOSVM_IntProcRelay, DOSVM_GetBuiltinHandler(intnum) ); } else if (context->SegCs == DOSVM_dpmi_segments->int16_sel) { /* Restore original flags stored into the stack by the caller. */ WORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); context->EFlags = (DWORD)MAKELONG( stack[2], HIWORD(context->EFlags) ); if (intnum != context->Eip / DOSVM_STUB_PM16) WARN( "interrupt stub has been modified " "(interrupt is %02x, interrupt stub is %02x)\n", intnum, context->Eip/DOSVM_STUB_PM16 ); TRACE( "builtin interrupt %02x has been branched to\n", intnum ); if (intnum == 0x25 || intnum == 0x26) DOSVM_PushFlags( context, FALSE, TRUE ); DOSVM_BuildCallFrame( context, DOSVM_IntProcRelay, DOSVM_GetBuiltinHandler(intnum) ); } else if (wine_ldt_is_system(context->SegCs)) { INTPROC proc; if (intnum >= ARRAY_SIZE(DOSVM_VectorsBuiltin)) return FALSE; if (!(proc = DOSVM_VectorsBuiltin[intnum])) return FALSE; proc( context ); } else { DOSVM_HardwareInterruptPM( context, intnum ); } return TRUE; } /********************************************************************** * DOSVM_HardwareInterruptPM * * Emulate call to interrupt handler in 16-bit or 32-bit protected mode. * * Pushes interrupt frame to stack and changes instruction * pointer to interrupt handler. */ void DOSVM_HardwareInterruptPM( CONTEXT *context, BYTE intnum ) { if(DOSVM_IsDos32()) { FARPROC48 addr = DOSVM_GetPMHandler48( intnum ); if (addr.selector == DOSVM_dpmi_segments->int48_sel) { TRACE( "builtin interrupt %02x has been invoked " "(through vector %02x)\n", addr.offset / DOSVM_STUB_PM48, intnum ); if (intnum == 0x25 || intnum == 0x26) DOSVM_PushFlags( context, TRUE, FALSE ); else if (DOSVM_IsIRQ(intnum)) DOSVM_PrepareIRQ( context, TRUE ); DOSVM_BuildCallFrame( context, DOSVM_IntProcRelay, DOSVM_GetBuiltinHandler( addr.offset/DOSVM_STUB_PM48 ) ); } else { DWORD *stack; TRACE( "invoking hooked interrupt %02x at %04x:%08x\n", intnum, addr.selector, addr.offset ); if (DOSVM_IsIRQ(intnum)) DOSVM_PrepareIRQ( context, FALSE ); /* Push the flags and return address on the stack */ stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); *(--stack) = context->EFlags; *(--stack) = context->SegCs; *(--stack) = context->Eip; context->Esp += -12; /* Jump to the interrupt handler */ context->SegCs = addr.selector; context->Eip = addr.offset; } } else { FARPROC16 addr = DOSVM_GetPMHandler16( intnum ); if (SELECTOROF(addr) == DOSVM_dpmi_segments->int16_sel) { TRACE( "builtin interrupt %02x has been invoked " "(through vector %02x)\n", OFFSETOF(addr)/DOSVM_STUB_PM16, intnum ); if (intnum == 0x25 || intnum == 0x26) DOSVM_PushFlags( context, FALSE, FALSE ); else if (DOSVM_IsIRQ(intnum)) DOSVM_PrepareIRQ( context, TRUE ); DOSVM_BuildCallFrame( context, DOSVM_IntProcRelay, DOSVM_GetBuiltinHandler( OFFSETOF(addr)/DOSVM_STUB_PM16 ) ); } else { TRACE( "invoking hooked interrupt %02x at %04x:%04x\n", intnum, SELECTOROF(addr), OFFSETOF(addr) ); if (DOSVM_IsIRQ(intnum)) DOSVM_PrepareIRQ( context, FALSE ); /* Push the flags and return address on the stack */ PUSH_WORD16( context, LOWORD(context->EFlags) ); PUSH_WORD16( context, context->SegCs ); PUSH_WORD16( context, LOWORD(context->Eip) ); /* Jump to the interrupt handler */ context->SegCs = HIWORD(addr); context->Eip = LOWORD(addr); } } } /********************************************************************** * DOSVM_EmulateInterruptRM * * Emulate software interrupt in real mode. * Called from VM86 emulation when intXX opcode is executed. * * Either calls directly builtin handler or pushes interrupt frame to * stack and changes instruction pointer to interrupt handler. * * Returns FALSE if this interrupt was caused by return * from real mode wrapper. */ BOOL DOSVM_EmulateInterruptRM( CONTEXT *context, BYTE intnum ) { TRACE_(relay)("Call DOS int 0x%02x ret=%04x:%08x\n" " eax=%08x ebx=%08x ecx=%08x edx=%08x\n" " esi=%08x edi=%08x ebp=%08x esp=%08x\n" " ds=%04x es=%04x fs=%04x gs=%04x ss=%04x flags=%08x\n", intnum, context->SegCs, context->Eip, context->Eax, context->Ebx, context->Ecx, context->Edx, context->Esi, context->Edi, context->Ebp, context->Esp, context->SegDs, context->SegEs, context->SegFs, context->SegGs, context->SegSs, context->EFlags ); /* check for our real-mode hooks */ if (intnum == 0x31) { /* is this exit from real-mode wrapper */ if (context->SegCs == DOSVM_dpmi_segments->wrap_seg) return FALSE; if (DOSVM_CheckWrappers( context )) return TRUE; } /* check if the call is from our fake BIOS interrupt stubs */ if (context->SegCs==0xf000) { /* Restore original flags stored into the stack by the caller. */ WORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); context->EFlags = (DWORD)MAKELONG( stack[2], HIWORD(context->EFlags) ); if (intnum != context->Eip / DOSVM_STUB_RM) WARN( "interrupt stub has been modified " "(interrupt is %02x, interrupt stub is %02x)\n", intnum, context->Eip/DOSVM_STUB_RM ); TRACE( "builtin interrupt %02x has been branched to\n", intnum ); DOSVM_CallBuiltinHandler( context, intnum ); /* Real mode stubs use IRET so we must put flags back into stack. */ stack[2] = LOWORD(context->EFlags); } else { DOSVM_HardwareInterruptRM( context, intnum ); } return TRUE; } /********************************************************************** * DOSVM_HardwareInterruptRM * * Emulate call to interrupt handler in real mode. * * Either calls directly builtin handler or pushes interrupt frame to * stack and changes instruction pointer to interrupt handler. */ void DOSVM_HardwareInterruptRM( CONTEXT *context, BYTE intnum ) { FARPROC16 handler = DOSVM_GetRMHandler( intnum ); /* check if the call goes to an unhooked interrupt */ if (SELECTOROF(handler) == 0xf000) { /* if so, call it directly */ TRACE( "builtin interrupt %02x has been invoked " "(through vector %02x)\n", OFFSETOF(handler)/DOSVM_STUB_RM, intnum ); DOSVM_CallBuiltinHandler( context, OFFSETOF(handler)/DOSVM_STUB_RM ); } else { /* the interrupt is hooked, simulate interrupt in DOS space */ WORD flag = LOWORD( context->EFlags ); TRACE( "invoking hooked interrupt %02x at %04x:%04x\n", intnum, SELECTOROF(handler), OFFSETOF(handler) ); /* Copy virtual interrupt flag to pushed interrupt flag. */ if (context->EFlags & VIF_MASK) flag |= IF_MASK; else flag &= ~IF_MASK; PUSH_WORD16( context, flag ); PUSH_WORD16( context, context->SegCs ); PUSH_WORD16( context, LOWORD( context->Eip )); context->SegCs = SELECTOROF( handler ); context->Eip = OFFSETOF( handler ); /* Clear virtual interrupt flag and trap flag. */ context->EFlags &= ~(VIF_MASK | TF_MASK); } } /********************************************************************** * DOSVM_GetRMHandler * * Return the real mode interrupt vector for a given interrupt. */ FARPROC16 DOSVM_GetRMHandler( BYTE intnum ) { return *DOSVM_GetRMVector( intnum ); } /********************************************************************** * DOSVM_SetRMHandler * * Set the real mode interrupt handler for a given interrupt. */ void DOSVM_SetRMHandler( BYTE intnum, FARPROC16 handler ) { TRACE("Set real mode interrupt vector %02x <- %04x:%04x\n", intnum, HIWORD(handler), LOWORD(handler) ); *DOSVM_GetRMVector( intnum ) = handler; } /********************************************************************** * DOSVM_GetPMHandler16 * * Return the protected mode interrupt vector for a given interrupt. */ FARPROC16 DOSVM_GetPMHandler16( BYTE intnum ) { TDB *pTask; FARPROC16 proc = 0; pTask = GlobalLock16(GetCurrentTask()); if (pTask) { switch( intnum ) { case 0x00: proc = pTask->int0; break; case 0x02: proc = pTask->int2; break; case 0x04: proc = pTask->int4; break; case 0x06: proc = pTask->int6; break; case 0x07: proc = pTask->int7; break; case 0x3e: proc = pTask->int3e; break; case 0x75: proc = pTask->int75; break; } if( proc ) return proc; } if (!DOSVM_Vectors16[intnum]) { if (!DOSVM_dpmi_segments) return NULL; proc = (FARPROC16)MAKESEGPTR( DOSVM_dpmi_segments->int16_sel, DOSVM_STUB_PM16 * intnum ); DOSVM_Vectors16[intnum] = proc; } return DOSVM_Vectors16[intnum]; } /********************************************************************** * DOSVM_SetPMHandler16 * * Set the protected mode interrupt handler for a given interrupt. */ void DOSVM_SetPMHandler16( BYTE intnum, FARPROC16 handler ) { TDB *pTask; TRACE("Set protected mode interrupt vector %02x <- %04x:%04x\n", intnum, HIWORD(handler), LOWORD(handler) ); pTask = GlobalLock16(GetCurrentTask()); if (!pTask) return; switch( intnum ) { case 0x00: pTask->int0 = handler; break; case 0x02: pTask->int2 = handler; break; case 0x04: pTask->int4 = handler; break; case 0x06: pTask->int6 = handler; break; case 0x07: pTask->int7 = handler; break; case 0x3e: pTask->int3e = handler; break; case 0x75: pTask->int75 = handler; break; default: DOSVM_Vectors16[intnum] = handler; break; } } /********************************************************************** * DOSVM_GetPMHandler48 * * Return the protected mode interrupt vector for a given interrupt. * Used to get 48-bit pointer for 32-bit interrupt handlers in DPMI32. */ FARPROC48 DOSVM_GetPMHandler48( BYTE intnum ) { if (!DOSVM_Vectors48[intnum].selector) { DOSVM_Vectors48[intnum].selector = DOSVM_dpmi_segments->int48_sel; DOSVM_Vectors48[intnum].offset = DOSVM_STUB_PM48 * intnum; } return DOSVM_Vectors48[intnum]; } /********************************************************************** * DOSVM_SetPMHandler48 * * Set the protected mode interrupt handler for a given interrupt. * Used to set 48-bit pointer for 32-bit interrupt handlers in DPMI32. */ void DOSVM_SetPMHandler48( BYTE intnum, FARPROC48 handler ) { TRACE("Set 32-bit protected mode interrupt vector %02x <- %04x:%08x\n", intnum, handler.selector, handler.offset ); DOSVM_Vectors48[intnum] = handler; } /********************************************************************** * DOSVM_CallBuiltinHandler * * Execute Wine interrupt handler procedure. */ void DOSVM_CallBuiltinHandler( CONTEXT *context, BYTE intnum ) { /* * FIXME: Make all builtin interrupt calls go via this routine. * FIXME: Check for PM->RM interrupt reflection. * FIXME: Check for RM->PM interrupt reflection. */ INTPROC proc = DOSVM_GetBuiltinHandler( intnum ); proc( context ); } /********************************************************************** * __wine_call_int_handler (KERNEL.@) */ void __wine_call_int_handler( CONTEXT *context, BYTE intnum ) { DOSMEM_InitDosMemory(); DOSVM_CallBuiltinHandler( context, intnum ); } /********************************************************************** * DOSVM_Int11Handler * * Handler for int 11h (get equipment list). * * * Borrowed from Ralph Brown's interrupt lists: * * bits 15-14: number of parallel devices * bit 13: [Conv] Internal modem * bit 12: reserved * bits 11- 9: number of serial devices * bit 8: reserved * bits 7- 6: number of diskette drives minus one * bits 5- 4: Initial video mode: * 00b = EGA,VGA,PGA * 01b = 40 x 25 color * 10b = 80 x 25 color * 11b = 80 x 25 mono * bit 3: reserved * bit 2: [PS] =1 if pointing device * [non-PS] reserved * bit 1: =1 if math co-processor * bit 0: =1 if diskette available for boot * * * Currently the only of these bits correctly set are: * * bits 15-14 } Added by William Owen Smith, * bits 11-9 } wos@dcs.warwick.ac.uk * bits 7-6 * bit 2 (always set) ( bit 2 = 4 ) * bit 1 } Robert 'Admiral' Coeyman * All *nix systems either have a math processor or * emulate one. */ static void WINAPI DOSVM_Int11Handler( CONTEXT *context ) { int diskdrives = 0; int parallelports = 0; int serialports = 0; int x; if (GetDriveTypeA("A:\\") == DRIVE_REMOVABLE) diskdrives++; if (GetDriveTypeA("B:\\") == DRIVE_REMOVABLE) diskdrives++; if (diskdrives) diskdrives--; for (x=0; x < 9; x++) { HANDLE handle; char file[10]; /* serial port name */ sprintf( file, "\\\\.\\COM%d", x+1 ); handle = CreateFileA( file, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (handle != INVALID_HANDLE_VALUE) { CloseHandle( handle ); serialports++; } sprintf( file, "\\\\.\\LPT%d", x+1 ); handle = CreateFileA( file, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (handle != INVALID_HANDLE_VALUE) { CloseHandle( handle ); parallelports++; } } if (serialports > 7) /* 3 bits -- maximum value = 7 */ serialports = 7; if (parallelports > 3) /* 2 bits -- maximum value = 3 */ parallelports = 3; SET_AX( context, (diskdrives << 6) | (serialports << 9) | (parallelports << 14) | 0x06 ); } /********************************************************************** * DOSVM_Int12Handler * * Handler for int 12h (get memory size). */ static void WINAPI DOSVM_Int12Handler( CONTEXT *context ) { SET_AX( context, 640 ); } /********************************************************************** * DOSVM_Int17Handler * * Handler for int 17h (printer - output character). */ static void WINAPI DOSVM_Int17Handler( CONTEXT *context ) { switch( AH_reg(context) ) { case 0x00:/* Send character*/ FIXME("Send character not supported yet\n"); SET_AH( context, 0x00 );/*Timeout*/ break; case 0x01: /* PRINTER - INITIALIZE */ FIXME("Initialize Printer - Not Supported\n"); SET_AH( context, 0x30 ); /* selected | out of paper */ break; case 0x02: /* PRINTER - GET STATUS */ FIXME("Get Printer Status - Not Supported\n"); break; default: SET_AH( context, 0 ); /* time out */ INT_BARF( context, 0x17 ); } } /********************************************************************** * DOSVM_Int19Handler * * Handler for int 19h (Reboot). */ static void WINAPI DOSVM_Int19Handler( CONTEXT *context ) { TRACE( "Attempted Reboot\n" ); ExitProcess(0); } /********************************************************************** * DOSVM_Int1aHandler * * Handler for int 1ah. */ static void WINAPI DOSVM_Int1aHandler( CONTEXT *context ) { switch(AH_reg(context)) { case 0x00: /* GET SYSTEM TIME */ { DOSVM_start_bios_timer(); BIOSDATA *data = DOSVM_BiosData(); SET_CX( context, HIWORD(data->Ticks) ); SET_DX( context, LOWORD(data->Ticks) ); SET_AL( context, 0 ); /* FIXME: midnight flag is unsupported */ TRACE( "GET SYSTEM TIME - ticks=%d\n", data->Ticks ); } break; case 0x01: /* SET SYSTEM TIME */ FIXME( "SET SYSTEM TIME - not allowed\n" ); break; case 0x02: /* GET REAL-TIME CLOCK TIME */ TRACE( "GET REAL-TIME CLOCK TIME\n" ); { SYSTEMTIME systime; GetLocalTime( &systime ); SET_CH( context, BIN_TO_BCD(systime.wHour) ); SET_CL( context, BIN_TO_BCD(systime.wMinute) ); SET_DH( context, BIN_TO_BCD(systime.wSecond) ); SET_DL( context, 0 ); /* FIXME: assume no daylight saving */ RESET_CFLAG(context); } break; case 0x03: /* SET REAL-TIME CLOCK TIME */ FIXME( "SET REAL-TIME CLOCK TIME - not allowed\n" ); break; case 0x04: /* GET REAL-TIME CLOCK DATE */ TRACE( "GET REAL-TIME CLOCK DATE\n" ); { SYSTEMTIME systime; GetLocalTime( &systime ); SET_CH( context, BIN_TO_BCD(systime.wYear / 100) ); SET_CL( context, BIN_TO_BCD(systime.wYear % 100) ); SET_DH( context, BIN_TO_BCD(systime.wMonth) ); SET_DL( context, BIN_TO_BCD(systime.wDay) ); RESET_CFLAG(context); } break; case 0x05: /* SET REAL-TIME CLOCK DATE */ FIXME( "SET REAL-TIME CLOCK DATE - not allowed\n" ); break; case 0x06: /* SET ALARM */ FIXME( "SET ALARM - unimplemented\n" ); break; case 0x07: /* CANCEL ALARM */ FIXME( "CANCEL ALARM - unimplemented\n" ); break; case 0x08: /* SET RTC ACTIVATED POWER ON MODE */ case 0x09: /* READ RTC ALARM TIME AND STATUS */ case 0x0a: /* READ SYSTEM-TIMER DAY COUNTER */ case 0x0b: /* SET SYSTEM-TIMER DAY COUNTER */ case 0x0c: /* SET RTC DATE/TIME ACTIVATED POWER-ON MODE */ case 0x0d: /* RESET RTC DATE/TIME ACTIVATED POWER-ON MODE */ case 0x0e: /* GET RTC DATE/TIME ALARM AND STATUS */ case 0x0f: /* INITIALIZE REAL-TIME CLOCK */ INT_BARF( context, 0x1a ); break; case 0xb0: if (CX_reg(context) == 0x4d52 && DX_reg(context) == 0x4349 && AL_reg(context) == 0x01) { /* * Microsoft Real-Time Compression Interface (MRCI). * Ignoring this call indicates MRCI is not supported. */ TRACE( "Microsoft Real-Time Compression Interface - not supported\n" ); } else { INT_BARF(context, 0x1a); } break; default: INT_BARF( context, 0x1a ); } } /********************************************************************** * DOSVM_Int20Handler * * Handler for int 20h. */ static void WINAPI DOSVM_Int20Handler( CONTEXT *context ) { if (DOSVM_IsWin16()) DOSVM_Exit( 0 ); else if(ISV86(context)) MZ_Exit( context, TRUE, 0 ); else ERR( "Called from DOS protected mode\n" ); } /********************************************************************** * DOSVM_Int29Handler * * Handler for int 29h (fast console output) */ static void WINAPI DOSVM_Int29Handler( CONTEXT *context ) { /* Yes, it seems that this is really all this interrupt does. */ DOSVM_PutChar(AL_reg(context)); } /********************************************************************** * DOSVM_Int2aHandler * * Handler for int 2ah (network). */ static void WINAPI DOSVM_Int2aHandler( CONTEXT *context ) { switch(AH_reg(context)) { case 0x00: /* NETWORK INSTALLATION CHECK */ break; default: INT_BARF( context, 0x2a ); } } /*********************************************************************** * DOSVM_Int41Handler */ static void WINAPI DOSVM_Int41Handler( CONTEXT *context ) { if ( ISV86(context) ) { /* Real-mode debugger services */ switch ( AX_reg(context) ) { default: INT_BARF( context, 0x41 ); break; } } else { /* Protected-mode debugger services */ switch ( AX_reg(context) ) { case 0x4f: case 0x50: case 0x150: case 0x51: case 0x52: case 0x152: case 0x59: case 0x5a: case 0x5b: case 0x5c: case 0x5d: /* Notifies the debugger of a lot of stuff. We simply ignore it for now, but some of the info might actually be useful ... */ break; default: INT_BARF( context, 0x41 ); break; } } } /*********************************************************************** * DOSVM_Int4bHandler * */ static void WINAPI DOSVM_Int4bHandler( CONTEXT *context ) { switch(AH_reg(context)) { case 0x81: /* Virtual DMA Spec (IBM SCSI interface) */ if(AL_reg(context) != 0x02) /* if not install check */ { SET_CFLAG(context); SET_AL( context, 0x0f ); /* function is not implemented */ } break; default: INT_BARF(context, 0x4b); } } /*********************************************************************** * DOSVM_Int5cHandler * * Called from NetBIOSCall16. */ static void WINAPI DOSVM_Int5cHandler( CONTEXT *context ) { BYTE* ptr; ptr = MapSL( MAKESEGPTR(context->SegEs,BX_reg(context)) ); if (!ptr) ERR("Invalid context\n"); else { FIXME("(%p): command code %02x (ignored)\n",context, *ptr); *(ptr+0x01) = 0xFB; /* NetBIOS emulator not found */ } SET_AL( context, 0xFB ); } static void WINAPI DOSVM_Int01Handler(CONTEXT *context) { HMODULE toolhelp = GetModuleHandleA("toolhelp.dll16"); WORD flags; flags = context->EFlags; context->EFlags = flags & ~0x100; /* TF */ SEGPTR stack = MAKESEGPTR(context->SegSs, context->Esp); if (!toolhelp) { ERR("INT01\n"); return; } FARPROC16 intcb = ((FARPROC16(WINAPI *)(SEGPTR *, SEGPTR, WORD, WORD, WORD))GetProcAddress(toolhelp, "get_intcb"))(&stack, MAKESEGPTR(context->SegCs, context->Eip), flags, 1, context->Eax); if (intcb) { context->SegSs = SELECTOROF(stack); context->Esp = OFFSETOF(stack); context->SegCs = SELECTOROF(intcb); context->Eip = OFFSETOF(intcb); } } static void WINAPI DOSVM_Int03Handler(CONTEXT *context) { HMODULE toolhelp = GetModuleHandleA("toolhelp.dll16"); if (!toolhelp) return; SEGPTR stack = MAKESEGPTR(context->SegSs, context->Esp); FARPROC16 intcb = ((FARPROC16(WINAPI *)(SEGPTR *, SEGPTR, WORD, WORD, WORD))GetProcAddress(toolhelp, "get_intcb"))(&stack, MAKESEGPTR(context->SegCs, context->Eip), context->EFlags, 3, context->Eax); if (intcb) { context->SegSs = SELECTOROF(stack); context->Esp = OFFSETOF(stack); context->SegCs = SELECTOROF(intcb); context->Eip = OFFSETOF(intcb); } } void vdd_req(char func, CONTEXT *context); /* NTVDM BOP stub */ static void WINAPI DOSVM_Int06Handler(CONTEXT *context) { LPBYTE insn = (LPBYTE)CTX_SEG_OFF_TO_LIN(context, context->SegCs, context->Eip); if (insn[0] == 0xc4 && insn[1] == 0xc4 && insn[2] == 0x58) vdd_req(insn[3], context); } ================================================ FILE: krnl386/ioports.c ================================================ /* * Emulation of processor ioports. * * Copyright 1995 Morten Welinder * Copyright 1998 Andreas Mohr, Ove Kaaven * Copyright 2001 Uwe Bonnes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* Known problems: - only a few ports are emulated. - real-time clock in "cmos" is bogus. A nifty alarm() setup could fix that, I guess. */ #include "config.h" #include #include #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_PPDEV #include #include #ifdef HAVE_SYS_IOCTL_H # include #endif #ifdef HAVE_LINUX_IOCTL_H # include #endif #include #endif #include "windef.h" #include "winbase.h" #include "winnls.h" #include "winreg.h" #include "winternl.h" #include "kernel16_private.h" #include "dosexe.h" #include "vga.h" #include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(int); #if defined(linux) && !defined(__ANDROID__) # define DIRECT_IO_ACCESS #else # undef DIRECT_IO_ACCESS #endif OUTPROC outcb[1024] = {0}; INPROC incb[1024] = {0}; static struct { WORD countmax; WORD latch; BYTE ctrlbyte_ch; BYTE flags; LONG64 start_time; } tmr_8253[3] = { {0xFFFF, 0, 0x36, 0, 0}, {0x0012, 0, 0x74, 0, 0}, {0x0001, 0, 0xB6, 0, 0}, }; /* two byte read in progress */ #define TMR_RTOGGLE 0x01 /* two byte write in progress */ #define TMR_WTOGGLE 0x02 /* latch contains data */ #define TMR_LATCHED 0x04 /* counter is in update phase */ #define TMR_UPDATE 0x08 /* readback status request */ #define TMR_STATUS 0x10 static BYTE parport_8255[4] = {0x4f, 0x20, 0xff, 0xff}; static BYTE cmosaddress; static BOOL cmos_image_initialized = FALSE; static BYTE cmosimage[64] = { 0x27, /* 0x00: seconds */ 0x34, /* 0X01: seconds alarm */ 0x31, /* 0x02: minutes */ 0x47, /* 0x03: minutes alarm */ 0x16, /* 0x04: hour */ 0x15, /* 0x05: hour alarm */ 0x00, /* 0x06: week day */ 0x01, /* 0x07: month day */ 0x04, /* 0x08: month */ 0x94, /* 0x09: year */ 0x26, /* 0x0a: state A */ 0x02, /* 0x0b: state B */ 0x50, /* 0x0c: state C */ 0x80, /* 0x0d: state D */ 0x00, /* 0x0e: state diagnostic */ 0x00, /* 0x0f: state state shutdown */ 0x40, /* 0x10: floppy type */ 0xb1, /* 0x11: reserved */ 0x00, /* 0x12: HD type */ 0x9c, /* 0x13: reserved */ 0x01, /* 0x14: equipment */ 0x80, /* 0x15: low base memory */ 0x02, /* 0x16: high base memory (0x280 => 640KB) */ 0x00, /* 0x17: low extended memory */ 0x3b, /* 0x18: high extended memory (0x3b00 => 15MB) */ 0x00, /* 0x19: HD 1 extended type byte */ 0x00, /* 0x1a: HD 2 extended type byte */ 0xad, /* 0x1b: reserved */ 0x02, /* 0x1c: reserved */ 0x10, /* 0x1d: reserved */ 0x00, /* 0x1e: reserved */ 0x00, /* 0x1f: installed features */ 0x08, /* 0x20: HD 1 low cylinder number */ 0x00, /* 0x21: HD 1 high cylinder number */ 0x00, /* 0x22: HD 1 heads */ 0x26, /* 0x23: HD 1 low pre-compensation start */ 0x00, /* 0x24: HD 1 high pre-compensation start */ 0x00, /* 0x25: HD 1 low landing zone */ 0x00, /* 0x26: HD 1 high landing zone */ 0x00, /* 0x27: HD 1 sectors */ 0x00, /* 0x28: options 1 */ 0x00, /* 0x29: reserved */ 0x00, /* 0x2a: reserved */ 0x00, /* 0x2b: options 2 */ 0x00, /* 0x2c: options 3 */ 0x3f, /* 0x2d: reserved */ 0xcc, /* 0x2e: low CMOS ram checksum (computed automatically) */ 0xcc, /* 0x2f: high CMOS ram checksum (computed automatically) */ 0x00, /* 0x30: low extended memory byte */ 0x1c, /* 0x31: high extended memory byte */ 0x19, /* 0x32: century byte */ 0x81, /* 0x33: setup information */ 0x00, /* 0x34: CPU speed */ 0x0e, /* 0x35: HD 2 low cylinder number */ 0x00, /* 0x36: HD 2 high cylinder number */ 0x80, /* 0x37: HD 2 heads */ 0x1b, /* 0x38: HD 2 low pre-compensation start */ 0x7b, /* 0x39: HD 2 high pre-compensation start */ 0x21, /* 0x3a: HD 2 low landing zone */ 0x00, /* 0x3b: HD 2 high landing zone */ 0x00, /* 0x3c: HD 2 sectors */ 0x00, /* 0x3d: reserved */ 0x05, /* 0x3e: reserved */ 0x5f /* 0x3f: reserved */ }; static void IO_FixCMOSCheckSum(void) { WORD sum = 0; int i; for (i=0x10; i < 0x2d; i++) sum += cmosimage[i]; cmosimage[0x2e] = sum >> 8; /* yes, this IS hi byte !! */ cmosimage[0x2f] = sum & 0xff; TRACE("calculated hi %02x, lo %02x\n", cmosimage[0x2e], cmosimage[0x2f]); } #ifdef DIRECT_IO_ACCESS extern int iopl(int level); static char do_direct_port_access = -1; static char port_permissions[0x10000]; #define IO_READ 1 #define IO_WRITE 2 #endif /* DIRECT_IO_ACCESS */ #ifdef HAVE_PPDEV static int do_pp_port_access = -1; /* -1: uninitialized, 1: not available 0: available);*/ #endif #define BCD2BIN(a) \ ((a)%10 + ((a)>>4)%10*10 + ((a)>>8)%10*100 + ((a)>>12)%10*1000) #define BIN2BCD(a) \ ((a)%10 | (a)/10%10<<4 | (a)/100%10<<8 | (a)/1000%10<<12) static void set_timer(unsigned timer) { DWORD val = tmr_8253[timer].countmax; if (tmr_8253[timer].ctrlbyte_ch & 0x01) val = BCD2BIN(val); tmr_8253[timer].flags &= ~TMR_UPDATE; if (!QueryPerformanceCounter((LARGE_INTEGER*)&tmr_8253[timer].start_time)) WARN("QueryPerformanceCounter should not fail!\n"); switch (timer) { case 0: /* System timer counter divisor */ DOSVM_SetTimer(val); break; case 1: /* RAM refresh */ FIXME("RAM refresh counter handling not implemented !\n"); break; case 2: /* cassette & speaker */ /* speaker on ? */ if ((parport_8255[1] & 3) == 3) { TRACE("Beep (freq: %d) !\n", 1193180 / val); Beep(1193180 / val, 20); } break; } } static WORD get_timer_val(unsigned timer) { LARGE_INTEGER time; WORD maxval, val = tmr_8253[timer].countmax; BYTE mode = tmr_8253[timer].ctrlbyte_ch >> 1 & 0x07; /* This is not strictly correct. In most cases the old countdown should * finish normally (by counting down to 0) or halt and not jump to 0. * But we are calculating and not counting, so this seems to be a good * solution and should work well with most (all?) programs */ if (tmr_8253[timer].flags & TMR_UPDATE) return 0; if (!QueryPerformanceCounter(&time)) WARN("QueryPerformanceCounter should not fail!\n"); time.QuadPart -= tmr_8253[timer].start_time; if (tmr_8253[timer].ctrlbyte_ch & 0x01) val = BCD2BIN(val); switch ( mode ) { case 0: case 1: case 4: case 5: maxval = tmr_8253[timer].ctrlbyte_ch & 0x01 ? 9999 : 0xFFFF; break; case 2: case 3: maxval = val; break; default: ERR("Invalid PIT mode: %d\n", mode); return 0; } val = (val - time.QuadPart) % (maxval + 1); if (tmr_8253[timer].ctrlbyte_ch & 0x01) val = BIN2BCD(val); return val; } /********************************************************************** * IO_port_init */ /* set_IO_permissions(int val1, int val) * Helper function for IO_port_init */ #ifdef DIRECT_IO_ACCESS static void set_IO_permissions(int val1, int val, char rw) { int j; if (val1 != -1) { if (val == -1) val = 0x3ff; for (j = val1; j <= val; j++) port_permissions[j] |= rw; do_direct_port_access = 1; val1 = -1; } else if (val != -1) { do_direct_port_access = 1; port_permissions[val] |= rw; } } /* do_IO_port_init_read_or_write(char* temp, char rw) * Helper function for IO_port_init */ static void do_IO_port_init_read_or_write(const WCHAR *str, char rw) { int val, val1; unsigned int i; WCHAR *end; static const WCHAR allW[] = {'a','l','l',0}; if (!strcmpiW(str, allW)) { for (i=0; i < sizeof(port_permissions); i++) port_permissions[i] |= rw; } else { val = -1; val1 = -1; while (*str) { switch(*str) { case ',': case ' ': case '\t': set_IO_permissions(val1, val, rw); val1 = -1; val = -1; str++; break; case '-': val1 = val; if (val1 == -1) val1 = 0; str++; break; default: if (isdigitW(*str)) { val = strtoulW( str, &end, 0 ); if (end == str) { val = -1; str++; } else str = end; } break; } } set_IO_permissions(val1, val, rw); } } static inline BYTE inb( WORD port ) { BYTE b; __asm__ __volatile__( "inb %w1,%0" : "=a" (b) : "d" (port) ); return b; } static inline WORD inw( WORD port ) { WORD w; __asm__ __volatile__( "inw %w1,%0" : "=a" (w) : "d" (port) ); return w; } static inline DWORD inl( WORD port ) { DWORD dw; __asm__ __volatile__( "inl %w1,%0" : "=a" (dw) : "d" (port) ); return dw; } static inline void outb( BYTE value, WORD port ) { __asm__ __volatile__( "outb %b0,%w1" : : "a" (value), "d" (port) ); } static inline void outw( WORD value, WORD port ) { __asm__ __volatile__( "outw %w0,%w1" : : "a" (value), "d" (port) ); } static inline void outl( DWORD value, WORD port ) { __asm__ __volatile__( "outl %0,%w1" : : "a" (value), "d" (port) ); } static void IO_port_init(void) { char tmp[1024]; HANDLE root, hkey; DWORD dummy; OBJECT_ATTRIBUTES attr; UNICODE_STRING nameW; static const WCHAR portsW[] = {'S','o','f','t','w','a','r','e','\\', 'W','i','n','e','\\','V','D','M','\\','P','o','r','t','s',0}; static const WCHAR readW[] = {'r','e','a','d',0}; static const WCHAR writeW[] = {'w','r','i','t','e',0}; do_direct_port_access = 0; /* Can we do that? */ if (!iopl(3)) { iopl(0); RtlOpenCurrentUser( KEY_ALL_ACCESS, &root ); attr.Length = sizeof(attr); attr.RootDirectory = root; attr.ObjectName = &nameW; attr.Attributes = 0; attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL; RtlInitUnicodeString( &nameW, portsW ); /* @@ Wine registry key: HKCU\Software\Wine\VDM\Ports */ if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) { RtlInitUnicodeString( &nameW, readW ); if (!NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, tmp, sizeof(tmp), &dummy )) { WCHAR *str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)tmp)->Data; do_IO_port_init_read_or_write(str, IO_READ); } RtlInitUnicodeString( &nameW, writeW ); if (!NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, tmp, sizeof(tmp), &dummy )) { WCHAR *str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)tmp)->Data; do_IO_port_init_read_or_write(str, IO_WRITE); } NtClose( hkey ); } NtClose( root ); } } #endif /* DIRECT_IO_ACCESS */ #ifdef HAVE_PPDEV typedef struct _PPDEVICESTRUCT{ int fd; /* NULL if device not available */ char *devicename; int userbase; /* where wine thinks the ports are */ DWORD lastaccess; /* or NULL if release */ int timeout; /* time in second of inactivity to release the port */ } PPDeviceStruct; static PPDeviceStruct PPDeviceList[5]; static int PPDeviceNum=0; static int IO_pp_sort(const void *p1,const void *p2) { return ((const PPDeviceStruct*)p1)->userbase - ((const PPDeviceStruct*)p2)->userbase; } /* IO_pp_init * * Read the ppdev entries from registry, open the device and check * for necessary IOCTRL * Report verbose about possible errors */ static char IO_pp_init(void) { char name[80]; char buffer[256]; HANDLE root, hkey; int i,idx=0,fd,res,userbase,nports=0; char * timeout; char ret=1; int lasterror; OBJECT_ATTRIBUTES attr; UNICODE_STRING nameW; static const WCHAR configW[] = {'S','o','f','t','w','a','r','e','\\', 'W','i','n','e','\\','V','D','M','\\','p','p','d','e','v',0}; TRACE("\n"); RtlOpenCurrentUser( KEY_ALL_ACCESS, &root ); attr.Length = sizeof(attr); attr.RootDirectory = root; attr.ObjectName = &nameW; attr.Attributes = 0; attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL; RtlInitUnicodeString( &nameW, configW ); /* @@ Wine registry key: HKCU\Software\Wine\VDM\ppdev */ if (NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) hkey = 0; NtClose( root ); if (!hkey) return 1; for (;;) { DWORD total_size, len; char temp[256]; KEY_VALUE_FULL_INFORMATION *info = (KEY_VALUE_FULL_INFORMATION *)temp; if (NtEnumerateValueKey( hkey, idx, KeyValueFullInformation, temp, sizeof(temp), &total_size )) break; if (info->Type != REG_SZ) break; RtlUnicodeToMultiByteN( name, sizeof(name)-1, &len, info->Name, info->NameLength ); name[len] = 0; RtlUnicodeToMultiByteN( buffer, sizeof(buffer)-1, &len, (WCHAR *)(temp + info->DataOffset), total_size-info->DataOffset ); buffer[len] = 0; idx++; if(nports >4) { FIXME("Make the PPDeviceList larger than 5 elements\n"); break; } TRACE("Device '%s' at virtual userbase '%s'\n", buffer,name); timeout = strchr(buffer,','); if (timeout) *timeout++=0; fd=open(buffer,O_RDWR); lasterror=errno; if (fd == -1) { WARN("Configuration: No access to %s Cause: %s\n",buffer,strerror(lasterror)); WARN("Rejecting configuration item\n"); if (lasterror == ENODEV) ERR("Is the ppdev module loaded?\n"); continue; } userbase = strtol(name, NULL, 16); if ( errno == ERANGE) { WARN("Configuration: Invalid base %s for %s\n",name,buffer); WARN("Rejecting configuration item\n"); continue; } if (ioctl (fd,PPCLAIM,0)) { ERR("PPCLAIM rejected %s\n",buffer); ERR("Perhaps the device is already in use or nonexistent\n"); continue; } if (nports > 0) { for (i=0; i<= nports; i++) { if (PPDeviceList[i].userbase == userbase) { WARN("Configuration: %s uses the same virtual ports as %s\n", buffer,PPDeviceList[0].devicename); WARN("Configuration: Rejecting configuration item\n"); userbase = 0; break; } } if (!userbase) continue; } /* Check for the minimum required IOCTLS */ if ((ioctl(fd,PPRDATA,&res))|| (ioctl(fd,PPRSTATUS,&res))|| (ioctl(fd,PPRCONTROL,&res))) { ERR("PPUSER IOCTL not available for parport device %s\n",buffer); continue; } if (ioctl (fd,PPRELEASE,0)) { ERR("PPRELEASE rejected %s\n",buffer); ERR("Perhaps the device is already in use or nonexistent\n"); continue; } PPDeviceList[nports].devicename = HeapAlloc(GetProcessHeap(), 0, sizeof(buffer)+1); if (!PPDeviceList[nports].devicename) { ERR("No (more) space for devicename\n"); break; } strcpy(PPDeviceList[nports].devicename,buffer); PPDeviceList[nports].fd = fd; PPDeviceList[nports].userbase = userbase; PPDeviceList[nports].lastaccess=GetTickCount(); if (timeout) { PPDeviceList[nports].timeout = strtol(timeout, NULL, 10); if (errno == ERANGE) { WARN("Configuration: Invalid timeout %s in configuration for %s, Setting to 0\n", timeout,buffer); PPDeviceList[nports].timeout = 0; } } else PPDeviceList[nports].timeout = 0; nports++; } TRACE("found %d ports\n",nports); NtClose( hkey ); PPDeviceNum= nports; if (nports > 1) /* sort in ascending order for userbase for faster access */ qsort (PPDeviceList,PPDeviceNum,sizeof(PPDeviceStruct),IO_pp_sort); if (nports) ret=0; for (idx= 0;idx= ARRAY_SIZE(incb)) return; *oldout = outcb[port]; *oldin = incb[port]; outcb[port] = outproc; incb[port] = inproc; } BOOL vdd_io_read(int port, int size, WORD *val, CONTEXT *ctx); BOOL vdd_io_write(int port, int size, WORD val, CONTEXT *ctx); /********************************************************************** * DOSVM_inport * * Note: The size argument has to be handled correctly _externally_ * (as we always return a DWORD) */ DWORD DOSVM_inport( int port, int size, CONTEXT* ctx ) { DWORD res = ~0U; TRACE("%d-byte value from port 0x%04x\n", size, port ); if (0 <= port && port < ARRAY_SIZE(incb) && incb[port]) return incb[port](port, size); DOSMEM_InitDosMemory(); #ifdef HAVE_PPDEV if (do_pp_port_access == -1) do_pp_port_access =IO_pp_init(); if ((do_pp_port_access == 0 ) && (size == 1)) { if (!IO_pp_inp(port,&res)) return res; } #endif #ifdef DIRECT_IO_ACCESS if (do_direct_port_access == -1) IO_port_init(); if ((do_direct_port_access) /* Make sure we have access to the port */ && (port_permissions[port] & IO_READ)) { iopl(3); switch(size) { case 1: res = inb( port ); break; case 2: res = inw( port ); break; case 4: res = inl( port ); break; } iopl(0); return res; } #endif switch (size) { case 4: res |= DOSVM_inport(port, 2, ctx); res |= DOSVM_inport(port + 2, 2, ctx) << 16; return res; case 2: if (!vdd_io_read(port, 2, &res, ctx)) { res |= DOSVM_inport(port, 1, ctx); res |= DOSVM_inport(port + 1, 1, ctx) << 8; } return res; case 1: if (vdd_io_read(port, 1, &res, ctx)) return res; } switch (port) { case 0x40: case 0x41: case 0x42: { BYTE chan = port & 3; WORD tempval = tmr_8253[chan].flags & TMR_LATCHED ? tmr_8253[chan].latch : get_timer_val(chan); if (tmr_8253[chan].flags & TMR_STATUS) { WARN("Read-back status\n"); /* We differ slightly from the spec: * - TMR_UPDATE is already set with the first write * of a two byte counter update * - 0x80 should be set if OUT signal is 1 (high) */ tmr_8253[chan].flags &= ~TMR_STATUS; res = (tmr_8253[chan].ctrlbyte_ch & 0x3F) | (tmr_8253[chan].flags & TMR_UPDATE ? 0x40 : 0x00); break; } switch ((tmr_8253[chan].ctrlbyte_ch & 0x30) >> 4) { case 0: res = 0; /* shouldn't happen? */ break; case 1: /* read lo byte */ res = (BYTE)tempval; tmr_8253[chan].flags &= ~TMR_LATCHED; break; case 3: /* read lo byte, then hi byte */ tmr_8253[chan].flags ^= TMR_RTOGGLE; /* toggle */ if (tmr_8253[chan].flags & TMR_RTOGGLE) { res = (BYTE)tempval; break; } /* else [fall through if read hi byte !] */ case 2: /* read hi byte */ res = (BYTE)(tempval >> 8); tmr_8253[chan].flags &= ~TMR_LATCHED; break; } } break; case 0x60: res = DOSVM_Int09ReadScan(NULL); break; case 0x61: res = (DWORD)parport_8255[1]; break; case 0x62: res = (DWORD)parport_8255[2]; break; case 0x70: res = (DWORD)cmosaddress; break; case 0x71: if (!cmos_image_initialized) { IO_FixCMOSCheckSum(); cmos_image_initialized = TRUE; } res = (DWORD)cmosimage[cmosaddress & 0x3f]; break; case 0x200: case 0x201: res = ~0U; /* no joystick */ break; case 0x22a: case 0x22c: case 0x22e: res = (DWORD)SB_ioport_in( port ); break; /* VGA read registers */ case 0x3b4: /* CRT Controller Register - Index (MDA) */ case 0x3b5: /* CRT Controller Register - Other (MDA) */ case 0x3ba: /* General Register - Input status 1 (MDA) */ case 0x3c0: /* Attribute Controller - Address */ case 0x3c1: /* Attribute Controller - Other */ case 0x3c2: /* General Register - Input status 0 */ case 0x3c3: /* General Register - Video subsystem enable */ case 0x3c4: /* Sequencer Register - Address */ case 0x3c5: /* Sequencer Register - Other */ case 0x3c6: case 0x3c7: /* General Register - DAC State */ case 0x3c8: case 0x3c9: case 0x3ca: /* General Register - Feature control */ case 0x3cb: case 0x3cc: /* General Register - Misc output */ case 0x3cd: case 0x3ce: /* Graphics Controller Register - Address */ case 0x3cf: /* Graphics Controller Register - Other */ case 0x3d0: case 0x3d1: case 0x3d2: case 0x3d3: case 0x3d4: /* CRT Controller Register - Index (CGA) */ case 0x3d5: /* CRT Controller Register - Other (CGA) */ case 0x3d6: case 0x3d7: case 0x3d8: case 0x3d9: case 0x3da: case 0x3db: case 0x3dc: case 0x3dd: case 0x3de: case 0x3df: if (size > 1) FIXME("Trying to read more than one byte from VGA!\n"); res = (DWORD)VGA_ioport_in( port ); break; case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0xC0: case 0xC2: case 0xC4: case 0xC6: case 0xC8: case 0xCA: case 0xCC: case 0xCE: case 0x87: case 0x83: case 0x81: case 0x82: case 0x8B: case 0x89: case 0x8A: case 0x487: case 0x483: case 0x481: case 0x482: case 0x48B: case 0x489: case 0x48A: case 0x08: case 0xD0: case 0x0D: case 0xDA: res = (DWORD)DMA_ioport_in( port ); break; default: WARN("Direct I/O read attempted from port %x\n", port); break; } return res; } /********************************************************************** * DOSVM_outport */ void DOSVM_outport( int port, int size, DWORD value, CONTEXT *ctx ) { TRACE("IO: 0x%x (%d-byte value) to port 0x%04x\n", value, size, port ); if (0 <= port && port < ARRAY_SIZE(outcb) && outcb[port]) return outcb[port](port, size, value); DOSMEM_InitDosMemory(); #ifdef HAVE_PPDEV if (do_pp_port_access == -1) do_pp_port_access = IO_pp_init(); if ((do_pp_port_access == 0) && (size == 1)) { if (!IO_pp_outp(port,&value)) return; } #endif #ifdef DIRECT_IO_ACCESS if (do_direct_port_access == -1) IO_port_init(); if ((do_direct_port_access) /* Make sure we have access to the port */ && (port_permissions[port] & IO_WRITE)) { iopl(3); switch(size) { case 1: outb( LOBYTE(value), port ); break; case 2: outw( LOWORD(value), port ); break; case 4: outl( value, port ); break; } iopl(0); return; } #endif switch (size) { case 4: DOSVM_outport(port, 2, value & 0xffff, ctx); DOSVM_outport(port + 2, 2, value >> 16, ctx); return; case 2: if (!vdd_io_write(port, 2, value, ctx)) { DOSVM_outport(port, 1, value & 0xff, ctx); DOSVM_outport(port + 1, 1, value >> 8, ctx); } return; case 1: if (vdd_io_write(port, 1, value, ctx)) return; } switch (port) { case 0x20: DOSVM_PIC_ioport_out( port, (BYTE)value ); break; case 0x40: case 0x41: case 0x42: { BYTE chan = port & 3; tmr_8253[chan].flags |= TMR_UPDATE; switch ((tmr_8253[chan].ctrlbyte_ch & 0x30) >> 4) { case 0: break; /* shouldn't happen? */ case 1: /* write lo byte */ tmr_8253[chan].countmax = (tmr_8253[chan].countmax & 0xff00) | (BYTE)value; break; case 3: /* write lo byte, then hi byte */ tmr_8253[chan].flags ^= TMR_WTOGGLE; /* toggle */ if (tmr_8253[chan].flags & TMR_WTOGGLE) { tmr_8253[chan].countmax = (tmr_8253[chan].countmax & 0xff00) | (BYTE)value; break; } /* else [fall through if write hi byte !] */ case 2: /* write hi byte */ tmr_8253[chan].countmax = (tmr_8253[chan].countmax & 0x00ff) | ((BYTE)value << 8); break; } /* if programming is finished, update to new value */ if ((tmr_8253[chan].ctrlbyte_ch & 0x30) && !(tmr_8253[chan].flags & TMR_WTOGGLE)) set_timer(chan); } break; case 0x43: { BYTE chan = ((BYTE)value & 0xc0) >> 6; /* ctrl byte for specific timer channel */ if (chan == 3) { if ( !(value & 0x20) ) { if ((value & 0x02) && !(tmr_8253[0].flags & TMR_LATCHED)) { tmr_8253[0].flags |= TMR_LATCHED; tmr_8253[0].latch = get_timer_val(0); } if ((value & 0x04) && !(tmr_8253[1].flags & TMR_LATCHED)) { tmr_8253[1].flags |= TMR_LATCHED; tmr_8253[1].latch = get_timer_val(1); } if ((value & 0x08) && !(tmr_8253[2].flags & TMR_LATCHED)) { tmr_8253[2].flags |= TMR_LATCHED; tmr_8253[2].latch = get_timer_val(2); } } if ( !(value & 0x10) ) { if (value & 0x02) tmr_8253[0].flags |= TMR_STATUS; if (value & 0x04) tmr_8253[1].flags |= TMR_STATUS; if (value & 0x08) tmr_8253[2].flags |= TMR_STATUS; } break; } switch (((BYTE)value & 0x30) >> 4) { case 0: /* latch timer */ if ( !(tmr_8253[chan].flags & TMR_LATCHED) ) { tmr_8253[chan].flags |= TMR_LATCHED; tmr_8253[chan].latch = get_timer_val(chan); } break; case 1: /* write lo byte only */ case 2: /* write hi byte only */ case 3: /* write lo byte, then hi byte */ tmr_8253[chan].ctrlbyte_ch = (BYTE)value; tmr_8253[chan].countmax = 0; tmr_8253[chan].flags = TMR_UPDATE; break; } } break; case 0x61: parport_8255[1] = (BYTE)value; if (((parport_8255[1] & 3) == 3) && (tmr_8253[2].countmax != 1)) { if (tmr_8253[2].countmax == 0) { ERR("Beep tmr_8253[2].countmax == 0 !\n", tmr_8253[2].countmax); break; } TRACE("Beep (freq: %d) !\n", 1193180 / tmr_8253[2].countmax); Beep(1193180 / tmr_8253[2].countmax, 20); } break; case 0x70: cmosaddress = (BYTE)value & 0x7f; break; case 0x71: if (!cmos_image_initialized) { IO_FixCMOSCheckSum(); cmos_image_initialized = TRUE; } cmosimage[cmosaddress & 0x3f] = (BYTE)value; break; case 0x226: case 0x22c: SB_ioport_out( port, (BYTE)value ); break; /* VGA Write registers */ case 0x3b4: /* CRT Controller Register - Index (MDA) */ case 0x3b5: /* CRT Controller Register - Other (MDA) */ case 0x3ba: /* General Register - Feature Control */ case 0x3c0: /* Attribute Controller - Address/Other */ case 0x3c1: case 0x3c2: /* General Register - Misc output */ case 0x3c3: /* General Register - Video subsystem enable */ case 0x3c4: /* Sequencer Register - Address */ case 0x3c5: /* Sequencer Register - Other */ case 0x3c6: case 0x3c7: case 0x3c8: case 0x3c9: case 0x3ca: case 0x3cb: case 0x3cc: case 0x3cd: case 0x3ce: /* Graphics Controller Register - Address */ case 0x3cf: /* Graphics Controller Register - Other */ case 0x3d0: case 0x3d1: case 0x3d2: case 0x3d3: case 0x3d4: /* CRT Controller Register - Index (CGA) */ case 0x3d5: /* CRT Controller Register - Other (CGA) */ case 0x3d6: case 0x3d7: case 0x3d8: case 0x3d9: case 0x3da: case 0x3db: case 0x3dc: case 0x3dd: case 0x3de: case 0x3df: VGA_ioport_out( port, LOBYTE(value) ); if(size > 1) { VGA_ioport_out( port+1, HIBYTE(value) ); if(size > 2) { VGA_ioport_out( port+2, LOBYTE(HIWORD(value)) ); VGA_ioport_out( port+3, HIBYTE(HIWORD(value)) ); } } break; case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0xC0: case 0xC2: case 0xC4: case 0xC6: case 0xC8: case 0xCA: case 0xCC: case 0xCE: case 0x87: case 0x83: case 0x81: case 0x82: case 0x8B: case 0x89: case 0x8A: case 0x487: case 0x483: case 0x481: case 0x482: case 0x48B: case 0x489: case 0x48A: case 0x08: case 0xD0: case 0x0B: case 0xD6: case 0x0A: case 0xD4: case 0x0F: case 0xDE: case 0x09: case 0xD2: case 0x0C: case 0xD8: case 0x0D: case 0xDA: case 0x0E: case 0xDC: DMA_ioport_out( port, (BYTE)value ); break; default: WARN("Direct I/O write attempted to port %x\n", port ); break; } } ================================================ FILE: krnl386/kernel.c ================================================ /* * 16-bit kernel initialization code * * Copyright 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #define WINE_NO_INLINE_STRING #include "windef.h" #include "winbase.h" #include "winternl.h" #include "windows/wownt32.h" #include "wine/winuser16.h" #include "kernel16_private.h" #include "../toolhelp/toolhelp.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(module); extern DWORD WINAPI GetProcessFlags( DWORD processid ); static DWORD process_dword; extern HANDLE vm_idle_event; DWORD kernel_thread_data_tls = TLS_OUT_OF_INDEXES; /*********************************************************************** * KERNEL thread initialisation routine */ static void thread_attach(void) { TlsSetValue(kernel_thread_data_tls, HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct kernel_thread_data))); /* allocate the 16-bit stack (FIXME: should be done lazily) */ HGLOBAL16 hstack = WOWGlobalAlloc16(GMEM_FIXED, 0x10000); kernel_get_thread_data()->stack_sel = GlobalHandleToSel16(hstack); setWOW32Reserved((void *)MAKESEGPTR(kernel_get_thread_data()->stack_sel, 0x10000 - sizeof(STACK16FRAME) )); memset((char *)GlobalLock16(hstack) + 0x10000 - sizeof(STACK16FRAME), 0, sizeof(STACK16FRAME)); TlsSetValue(64, 0); // force allocation of TlsExpansionSlots } /*********************************************************************** * KERNEL thread finalisation routine */ static void thread_detach(void) { if (!kernel_get_thread_data()) return; /* free the 16-bit stack */ WOWGlobalFree16( kernel_get_thread_data()->stack_sel ); setWOW32Reserved(0); if (NtCurrentTeb()->Tib.SubSystemTib || kernel_get_thread_data()->htask16) TASK_ExitTask(); HeapFree(GetProcessHeap(), 0, TlsGetValue(kernel_thread_data_tls)); } const char *GetRedirectWindowsDir(); void init_wow_handle(); LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len); static void redirect_current_dir() { char curdir[MAX_PATH]; char curdir16[MAX_PATH]; LPCSTR redirected; GetCurrentDirectoryA(MAX_PATH, curdir); redirected = RedirectSystemDir(curdir, curdir16, MAX_PATH); if (redirected == curdir16) { ERR("current directory: %s -> %s\n", curdir, curdir16); SetCurrentDirectoryA(redirected); } for (int i = 'A'; i <= 'Z'; i++) { char env[] = { '=', i, ':', '\0' }; if (GetEnvironmentVariableA(env, curdir, MAX_PATH)) { redirected = RedirectSystemDir(curdir, curdir16, MAX_PATH); if (redirected == curdir16) { TRACE("current directory(env): %s -> %s\n", curdir, curdir16); SetEnvironmentVariableA(env, redirected); } } } } LONG CALLBACK fflush_vectored_handler(EXCEPTION_POINTERS *ptrs) { #if defined(_MSC_VER) || defined(__MINGW32__) _flushall(); #else fflush(stderr); /* _flushlbf */ #endif return EXCEPTION_CONTINUE_SEARCH; } /************************************************************************** * DllMain */ DWORD WOW32ReservedTls; BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) { switch(reason) { case DLL_PROCESS_ATTACH: { DWORD tls[TLS_MINIMUM_AVAILABLE]; for (int i = 0; i < TLS_MINIMUM_AVAILABLE; i++) { tls[i] = 0xffffffff; } BOOL allocated = FALSE; for (int i = 0; i < TLS_MINIMUM_AVAILABLE; i++) { tls[i] = TlsAlloc(); if (tls[i] == WOW32RESERVED_TLS_INDEX) { allocated = TRUE; break; } } for (int i = 0; i < TLS_MINIMUM_AVAILABLE; i++) { if (tls[i] != 0xffffffff && tls[i] != WOW32RESERVED_TLS_INDEX) { TlsFree(tls[i]); } } WOW32ReservedTls = WOW32RESERVED_TLS_INDEX; if (!allocated) { WOW32ReservedTls = TlsAlloc(); WARN("could not allocate WOW32RESERVED_TLS_INDEX!!\n"); } kernel_thread_data_tls = TlsAlloc(); TlsSetValue(kernel_thread_data_tls, HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct kernel_thread_data))); /* init redirect dir */ GetRedirectWindowsDir(); init_wow_handle(); redirect_current_dir(); } if (LoadLibrary16( "krnl386.exe" ) < 32) return FALSE; /* fall through */ case DLL_THREAD_ATTACH: thread_attach(); break; case DLL_THREAD_DETACH: thread_detach(); break; } return TRUE; } /************************************************************************** * DllEntryPoint (KERNEL.669) */ BOOL WINAPI KERNEL_DllEntryPoint( DWORD reasion, HINSTANCE16 inst, WORD ds, WORD heap, DWORD reserved1, WORD reserved2 ) { static BOOL done; /* the entry point can be called multiple times */ if (done) return TRUE; done = TRUE; /* create the shared heap for broken win95 native dlls */ HeapCreate( HEAP_SHARED, 0, 0 ); /* setup emulation of protected instructions from 32-bit code */ if (GetVersion() & 0x80000000) RtlAddVectoredExceptionHandler( TRUE, INSTR_vectored_handler ); /* Initialize 16-bit thunking entry points */ if (!WOWTHUNK_Init()) return FALSE; /* Initialize DOS memory */ if (!DOSMEM_Init()) return FALSE; /* Initialize special KERNEL entry points */ NE_SetEntryPoint( inst, 178, GetWinFlags16() ); NE_SetEntryPoint( inst, 454, wine_get_cs() ); NE_SetEntryPoint( inst, 455, wine_get_ds() ); NE_SetEntryPoint( inst, 183, DOSMEM_0000H ); /* KERNEL.183: __0000H */ NE_SetEntryPoint( inst, 173, DOSMEM_BiosSysSeg ); /* KERNEL.173: __ROMBIOS */ NE_SetEntryPoint( inst, 193, DOSMEM_BiosDataSeg ); /* KERNEL.193: __0040H */ NE_SetEntryPoint( inst, 194, DOSMEM_BiosSysSeg ); /* KERNEL.194: __F000H */ /* Initialize KERNEL.THHOOK */ TASK_InstallTHHook(MapSL((SEGPTR)GetProcAddress16( inst, (LPCSTR)332 ))); TASK_CreateMainTask(); /* Initialize the real-mode selector entry points */ #define SET_ENTRY_POINT( num, addr ) \ NE_SetEntryPoint( inst, (num), GLOBAL_CreateBlock( GMEM_FIXED, \ DOSMEM_MapDosToLinear(addr), 0x10000, inst, \ WINE_LDT_FLAGS_DATA, 0 )) SET_ENTRY_POINT( 174, 0xa0000 ); /* KERNEL.174: __A000H */ SET_ENTRY_POINT( 181, 0xb0000 ); /* KERNEL.181: __B000H */ SET_ENTRY_POINT( 182, 0xb8000 ); /* KERNEL.182: __B800H */ SET_ENTRY_POINT( 195, 0xc0000 ); /* KERNEL.195: __C000H */ SET_ENTRY_POINT( 179, 0xd0000 ); /* KERNEL.179: __D000H */ SET_ENTRY_POINT( 190, 0xe0000 ); /* KERNEL.190: __E000H */ #undef SET_ENTRY_POINT /* Force loading of some dlls */ LoadLibrary16( "system.drv" ); LoadLibrary16( "comm.drv" ); LoadLibrary16( "timer.drv" ); char dllname[MAX_PATH]; krnl386_get_config_string("otvdm", "vm", "vm86.dll", dllname, sizeof(dllname)); HMODULE vm = LoadLibraryA(dllname); func_wine_call_to_16_vm86 = (wine_call_to_16_vm86_t)GetProcAddress(vm, "wine_call_to_16_vm86"); func_wine_call_to_16_regs_vm86 = (wine_call_to_16_regs_vm86_t)GetProcAddress(vm, "wine_call_to_16_regs_vm86"); RtlAddVectoredExceptionHandler(FALSE, fflush_vectored_handler); vm_idle_event = CreateEvent(NULL, TRUE, TRUE, NULL); return TRUE; } WORD get_env_dos_version() { char buffer1[100]; char buffer[100]; krnl386_get_config_string("otvdm", "VDMDOSVER", "", buffer1, sizeof(buffer1)); DWORD result = GetEnvironmentVariableA("VDMDOSVER", buffer, sizeof(buffer)); LPSTR version = buffer; if (result == 0 || result > sizeof(buffer)) version = buffer1; if (version[0] == 0) return 0; int v1 = 0, v2 = 0; sscanf(version, "%d.%d", &v1, &v2); if (v2 <= 9) v2 *= 10; return v1 << 8 | v2; } WORD get_env_win_version() { char buffer1[100]; char buffer[100]; krnl386_get_config_string("otvdm", "WINVER", "", buffer1, sizeof(buffer1)); DWORD result = GetEnvironmentVariableA("WINVER", buffer, sizeof(buffer)); LPSTR version = buffer; if (result == 0 || result > sizeof(buffer)) version = buffer1; if (version[0] == 0) return 0; int v1 = 0, v2 = 0; sscanf(version, "%d.%d", &v1, &v2); if (v2 <= 9) v2 *= 10; return v2 << 8 | v1; } /*********************************************************************** * GetVersion (KERNEL.3) */ DWORD WINAPI GetVersion16(void) { static WORD dosver, winver; if (!dosver) /* not determined yet */ { RTL_OSVERSIONINFOEXW info; info.dwOSVersionInfoSize = sizeof(info); if (RtlGetVersion( &info )) return 0; if (info.dwMajorVersion <= 3) winver = MAKEWORD( info.dwMajorVersion, info.dwMinorVersion ); else winver = MAKEWORD( 3, 95 ); switch(info.dwPlatformId) { case VER_PLATFORM_WIN32s: switch(MAKELONG( info.dwMinorVersion, info.dwMajorVersion )) { case 0x0200: dosver = 0x0303; /* DOS 3.3 for Windows 2.0 */ break; case 0x0300: dosver = 0x0500; /* DOS 5.0 for Windows 3.0 */ break; default: dosver = 0x0616; /* DOS 6.22 for Windows 3.1 and later */ break; } break; case VER_PLATFORM_WIN32_WINDOWS: /* DOS 8.0 for WinME, 7.0 for Win95/98 */ if (info.dwMinorVersion >= 90) dosver = 0x0800; else dosver = 0x0700; break; case VER_PLATFORM_WIN32_NT: dosver = 0x0532; /* always DOS 5.50 for NT */ break; } TRACE( "DOS %d.%02d Win %d.%02d\n", HIBYTE(dosver), LOBYTE(dosver), LOBYTE(winver), HIBYTE(winver) ); WORD dosver_env = get_env_dos_version(); WORD winver_env = get_env_win_version(); if (dosver_env) { dosver = dosver_env; } if (winver_env) { winver = winver_env; } TRACE("DOS %d.%02d Win %d.%02d\n", HIBYTE(dosver_env), LOBYTE(dosver_env), LOBYTE(winver_env), HIBYTE(winver_env)); } return MAKELONG( winver, dosver ); } /*********************************************************************** * Reserved1 (KERNEL.77) */ SEGPTR WINAPI KERNEL_AnsiNext16(SEGPTR current) { return (*(char *)MapSL(current)) ? current + 1 : current; } /*********************************************************************** * Reserved2(KERNEL.78) */ SEGPTR WINAPI KERNEL_AnsiPrev16( SEGPTR start, SEGPTR current ) { return (current==start)?start:current-1; } /*********************************************************************** * Reserved3 (KERNEL.79) */ SEGPTR WINAPI KERNEL_AnsiUpper16( SEGPTR strOrChar ) { /* uppercase only one char if strOrChar < 0x10000 */ if (HIWORD(strOrChar)) { char *s = MapSL(strOrChar); while (*s) { *s = toupper(*s); s++; } return strOrChar; } else return toupper((char)strOrChar); } /*********************************************************************** * Reserved4 (KERNEL.80) */ SEGPTR WINAPI KERNEL_AnsiLower16( SEGPTR strOrChar ) { /* lowercase only one char if strOrChar < 0x10000 */ if (HIWORD(strOrChar)) { char *s = MapSL(strOrChar); while (*s) { *s = tolower(*s); s++; } return strOrChar; } else return tolower((char)strOrChar); } /*********************************************************************** * Reserved5 (KERNEL.87) */ INT16 WINAPI KERNEL_lstrcmp16( LPCSTR str1, LPCSTR str2 ) { int ret = strcmp( str1, str2 ); /* Looks too complicated, but in optimized strcpy we might get * a 32bit wide difference and would truncate it to 16 bit, so * erroneously returning equality. */ if (ret < 0) return -1; if (ret > 0) return 1; return 0; } /*********************************************************************** * lstrcpy (KERNEL.88) */ SEGPTR WINAPI lstrcpy16( SEGPTR dst, LPCSTR src ) { if (!lstrcpyA( MapSL(dst), src )) dst = 0; return dst; } /*********************************************************************** * lstrcat (KERNEL.89) */ SEGPTR WINAPI lstrcat16( SEGPTR dst, LPCSTR src ) { if (!lstrcatA( MapSL(dst), src )) dst = 0; return dst; } /*********************************************************************** * lstrlen (KERNEL.90) */ INT16 WINAPI lstrlen16( LPCSTR str ) { return (INT16)lstrlenA( str ); } /*********************************************************************** * OutputDebugString (KERNEL.115) */ void WINAPI OutputDebugString16( LPCSTR str, CONTEXT *ctx ) { OutputDebugStringA( str ); } static BOOL config_IAmNotNT() { BOOL init = FALSE; BOOL IAmNotNT = FALSE; if (init) return IAmNotNT; IAmNotNT = krnl386_get_config_int("otvdm", "IAmNotNT", FALSE); init = TRUE; return IAmNotNT; } /*********************************************************************** * GetWinFlags (KERNEL.132) */ DWORD WINAPI GetWinFlags16(void) { static const long cpuflags[5] = { WF_CPU086, WF_CPU186, WF_CPU286, WF_CPU386, WF_CPU486 }; SYSTEM_INFO si; OSVERSIONINFOA ovi; DWORD result; GetSystemInfo(&si); /* There doesn't seem to be any Pentium flag. */ result = cpuflags[min(si.wProcessorLevel, 4)] | WF_ENHANCED | WF_PMODE | WF_80x87 | WF_PAGING; if (si.wProcessorLevel >= 4) result |= WF_HASCPUID; ovi.dwOSVersionInfoSize = sizeof(ovi); GetVersionExA(&ovi); if (!config_IAmNotNT() && ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) result |= WF_WIN32WOW; /* undocumented WF_WINNT */ return result; } /*********************************************************************** * GetVersionEx (KERNEL.149) */ BOOL16 WINAPI GetVersionEx16(OSVERSIONINFO16 *v) { OSVERSIONINFOA info; if (v->dwOSVersionInfoSize < sizeof(OSVERSIONINFO16)) { WARN("wrong OSVERSIONINFO size from app\n"); return FALSE; } info.dwOSVersionInfoSize = sizeof(info); if (!GetVersionExA( &info )) return FALSE; v->dwMajorVersion = info.dwMajorVersion; v->dwMinorVersion = info.dwMinorVersion; v->dwBuildNumber = info.dwBuildNumber; v->dwPlatformId = info.dwPlatformId; strcpy( v->szCSDVersion, info.szCSDVersion ); return TRUE; } /*********************************************************************** * DebugBreak (KERNEL.203) */ void WINAPI DebugBreak16( CONTEXT *context ) { /* EXCEPTION_RECORD rec; rec.ExceptionCode = EXCEPTION_BREAKPOINT; rec.ExceptionFlags = 0; rec.ExceptionRecord = NULL; rec.ExceptionAddress = (LPVOID)context->Eip; rec.NumberParameters = 0; NtRaiseException( &rec, context, TRUE ); */ __wine_call_int_handler(context, 3); } /*********************************************************************** * K329 (KERNEL.329) * * TODO: * Should fill lpBuffer only if DBO_BUFFERFILL has been set by SetWinDebugInfo() */ void WINAPI DebugFillBuffer(LPSTR lpBuffer, WORD wBytes) { memset(lpBuffer, 0xf9 /* DBGFILL_BUFFER */, wBytes); } /*********************************************************************** * DiagQuery (KERNEL.339) * * returns TRUE if Win called with "/b" (bootlog.txt) */ BOOL16 WINAPI DiagQuery16(void) { return FALSE; } /*********************************************************************** * DiagOutput (KERNEL.340) * * writes a debug string into \bootlog.txt */ void WINAPI DiagOutput16(LPCSTR str) { /* FIXME */ TRACE("DIAGOUTPUT:%s\n", debugstr_a(str)); } /*********************************************************************** * hmemcpy (KERNEL.348) */ void WINAPI hmemcpy16( LPVOID dst, LPCVOID src, LONG count ) { memcpy( dst, src, count ); } /*********************************************************************** * lstrcpyn (KERNEL.353) */ SEGPTR WINAPI lstrcpyn16( SEGPTR dst, LPCSTR src, INT16 n ) { if (!lstrcpynA( MapSL(dst), src, n )) return 0; return dst; } /*********************************************************************** * lstrcatn (KERNEL.352) */ SEGPTR WINAPI lstrcatn16( SEGPTR dst, LPCSTR src, INT16 n ) { LPSTR p = MapSL(dst); LPSTR start = p; while (*p) p++; if ((n -= (p - start)) <= 0) return dst; lstrcpynA( p, src, n ); return dst; } #if 0 /* Not used at this time. This is here for documentation only */ /* WINDEBUGINFO flags values */ #define WDI_OPTIONS 0x0001 #define WDI_FILTER 0x0002 #define WDI_ALLOCBREAK 0x0004 /* dwOptions values */ #define DBO_CHECKHEAP 0x0001 #define DBO_BUFFERFILL 0x0004 #define DBO_DISABLEGPTRAPPING 0x0010 #define DBO_CHECKFREE 0x0020 #define DBO_SILENT 0x8000 #define DBO_TRACEBREAK 0x2000 #define DBO_WARNINGBREAK 0x1000 #define DBO_NOERRORBREAK 0x0800 #define DBO_NOFATALBREAK 0x0400 #define DBO_INT3BREAK 0x0100 /* DebugOutput flags values */ #define DBF_TRACE 0x0000 #define DBF_WARNING 0x4000 #define DBF_ERROR 0x8000 #define DBF_FATAL 0xc000 /* dwFilter values */ #define DBF_KERNEL 0x1000 #define DBF_KRN_MEMMAN 0x0001 #define DBF_KRN_LOADMODULE 0x0002 #define DBF_KRN_SEGMENTLOAD 0x0004 #define DBF_USER 0x0800 #define DBF_GDI 0x0400 #define DBF_MMSYSTEM 0x0040 #define DBF_PENWIN 0x0020 #define DBF_APPLICATION 0x0008 #define DBF_DRIVER 0x0010 #endif /* NOLOGERROR */ /*********************************************************************** * GetWinDebugInfo (KERNEL.355) */ BOOL16 WINAPI GetWinDebugInfo16(WINDEBUGINFO16 *lpwdi, UINT16 flags) { FIXME("(%p,%d): stub returning FALSE\n", lpwdi, flags); /* FALSE means not in debugging mode/version */ /* Can this type of debugging be used in wine ? */ /* Constants: WDI_OPTIONS WDI_FILTER WDI_ALLOCBREAK */ return FALSE; } /*********************************************************************** * SetWinDebugInfo (KERNEL.356) */ BOOL16 WINAPI SetWinDebugInfo16(WINDEBUGINFO16 *lpwdi) { FIXME("(%p): stub returning FALSE\n", lpwdi); /* FALSE means not in debugging mode/version */ /* Can this type of debugging be used in wine ? */ /* Constants: WDI_OPTIONS WDI_FILTER WDI_ALLOCBREAK */ return FALSE; } /*********************************************************************** * UnicodeToAnsi (KERNEL.434) */ INT16 WINAPI UnicodeToAnsi16( LPCWSTR src, LPSTR dst, INT16 codepage ) { if ( codepage == -1 ) codepage = CP_ACP; return WideCharToMultiByte( codepage, 0, src, -1, dst, 0x7fffffff, NULL, NULL ); } /*********************************************************************** * VWin32_EventCreate (KERNEL.442) */ HANDLE WINAPI VWin32_EventCreate(VOID) { HANDLE hEvent = CreateEventW( NULL, FALSE, 0, NULL ); return ConvertToGlobalHandle( hEvent ); } /*********************************************************************** * VWin32_EventDestroy (KERNEL.443) */ VOID WINAPI VWin32_EventDestroy(HANDLE event) { CloseHandle( event ); } /*********************************************************************** * VWin32_EventWait (KERNEL.450) */ VOID WINAPI VWin32_EventWait(HANDLE event) { DWORD mutex_count; ReleaseThunkLock( &mutex_count ); WaitForSingleObject( event, INFINITE ); RestoreThunkLock( mutex_count ); } /*********************************************************************** * VWin32_EventSet (KERNEL.451) * KERNEL_479 (KERNEL.479) */ VOID WINAPI VWin32_EventSet(HANDLE event) { SetEvent( event ); } /*********************************************************************** * GetProcAddress32 (KERNEL.453) */ FARPROC WINAPI GetProcAddress32_16( HMODULE hModule, LPCSTR function ) { /* FIXME: we used to disable snoop when returning proc for Win16 subsystem */ return GetProcAddress( hModule, function ); } /*********************************************************************** * CreateW32Event (KERNEL.457) */ HANDLE WINAPI CreateW32Event( BOOL manual_reset, BOOL initial_state ) { return CreateEventW( NULL, manual_reset, initial_state, NULL ); } /*********************************************************************** * SetW32Event (KERNEL.458) */ BOOL WINAPI SetW32Event( HANDLE handle ) { return SetEvent( handle ); } /*********************************************************************** * ResetW32Event (KERNEL.459) */ BOOL WINAPI ResetW32Event( HANDLE handle ) { return ResetEvent( handle ); } /*********************************************************************** * WaitForSingleObject (KERNEL.460) */ DWORD WINAPI WaitForSingleObject16( HANDLE handle, DWORD timeout ) { DWORD retval, mutex_count; ReleaseThunkLock( &mutex_count ); retval = WaitForSingleObject( handle, timeout ); RestoreThunkLock( mutex_count ); return retval; } /*********************************************************************** * WaitForMultipleObjects (KERNEL.461) */ DWORD WINAPI WaitForMultipleObjects16( DWORD count, const HANDLE *handles, BOOL wait_all, DWORD timeout ) { DWORD retval, mutex_count; ReleaseThunkLock( &mutex_count ); retval = WaitForMultipleObjectsEx( count, handles, wait_all, timeout, FALSE ); RestoreThunkLock( mutex_count ); return retval; } /*********************************************************************** * GetCurrentThreadId (KERNEL.462) */ DWORD WINAPI GetCurrentThreadId16(void) { return GetCurrentThreadId(); } /*********************************************************************** * ExitProcess (KERNEL.466) */ void WINAPI ExitProcess16( WORD status ) { DWORD count; ReleaseThunkLock( &count ); ExitProcess( status ); } /*********************************************************************** * GetCurrentProcessId (KERNEL.471) */ DWORD WINAPI GetCurrentProcessId16(void) { return GetCurrentProcessId(); } /********************************************************************* * CloseW32Handle (KERNEL.474) */ BOOL WINAPI CloseW32Handle( HANDLE handle ) { return CloseHandle( handle ); } /*********************************************************************** * ConvertToGlobalHandle (KERNEL.476) */ HANDLE WINAPI ConvertToGlobalHandle16( HANDLE handle ) { return ConvertToGlobalHandle( handle ); } /********************************************************************* * MapProcessHandle (KERNEL.483) */ DWORD WINAPI MapProcessHandle( HANDLE hProcess ) { return GetProcessId( hProcess ); } /*********************************************************************** * SetProcessDword (KERNEL.484) * 'Of course you cannot directly access Windows internal structures' */ void WINAPI SetProcessDword( DWORD dwProcessID, INT offset, DWORD value ) { TRACE("(%d, %d)\n", dwProcessID, offset ); if (dwProcessID && dwProcessID != GetCurrentProcessId()) { ERR("%d: process %x not accessible\n", offset, dwProcessID); return; } switch ( offset ) { case GPD_APP_COMPAT_FLAGS: case GPD_LOAD_DONE_EVENT: case GPD_HINSTANCE16: case GPD_WINDOWS_VERSION: case GPD_THDB: case GPD_PDB: case GPD_STARTF_SHELLDATA: case GPD_STARTF_HOTKEY: case GPD_STARTF_SHOWWINDOW: case GPD_STARTF_SIZE: case GPD_STARTF_POSITION: case GPD_STARTF_FLAGS: case GPD_PARENT: case GPD_FLAGS: ERR("Not allowed to modify offset %d\n", offset ); break; case GPD_USERDATA: process_dword = value; break; default: ERR("Unknown offset %d\n", offset ); break; } } /*********************************************************************** * GetProcessDword (KERNEL.485) * 'Of course you cannot directly access Windows internal structures' */ DWORD WINAPI GetProcessDword( DWORD dwProcessID, INT offset ) { DWORD x, y; STARTUPINFOW siw; TRACE("(%d, %d)\n", dwProcessID, offset ); if (dwProcessID && dwProcessID != GetCurrentProcessId()) { ERR("%d: process %x not accessible\n", offset, dwProcessID); return 0; } switch ( offset ) { case GPD_APP_COMPAT_FLAGS: return GetAppCompatFlags16(0); case GPD_LOAD_DONE_EVENT: return 0; case GPD_HINSTANCE16: return GetTaskDS16(); case GPD_WINDOWS_VERSION: return GetExeVersion16(); case GPD_THDB: return (DWORD_PTR)NtCurrentTeb() - 0x10 /* FIXME */; case GPD_PDB: return (DWORD_PTR)NtCurrentTeb()->Peb; /* FIXME: truncating a pointer */ case GPD_STARTF_SHELLDATA: /* return stdoutput handle from startupinfo ??? */ GetStartupInfoW(&siw); return HandleToULong(siw.hStdOutput); case GPD_STARTF_HOTKEY: /* return stdinput handle from startupinfo ??? */ GetStartupInfoW(&siw); return HandleToULong(siw.hStdInput); case GPD_STARTF_SHOWWINDOW: GetStartupInfoW(&siw); return siw.wShowWindow; case GPD_STARTF_SIZE: GetStartupInfoW(&siw); x = siw.dwXSize; if ( (INT)x == CW_USEDEFAULT ) x = CW_USEDEFAULT16; y = siw.dwYSize; if ( (INT)y == CW_USEDEFAULT ) y = CW_USEDEFAULT16; return MAKELONG( x, y ); case GPD_STARTF_POSITION: GetStartupInfoW(&siw); x = siw.dwX; if ( (INT)x == CW_USEDEFAULT ) x = CW_USEDEFAULT16; y = siw.dwY; if ( (INT)y == CW_USEDEFAULT ) y = CW_USEDEFAULT16; return MAKELONG( x, y ); case GPD_STARTF_FLAGS: GetStartupInfoW(&siw); return siw.dwFlags; case GPD_PARENT: return 0; case GPD_FLAGS: return GetProcessFlags(0); case GPD_USERDATA: return process_dword; default: ERR("Unknown offset %d\n", offset ); return 0; } } /*********************************************************************** * FreeLibrary32 (KERNEL.486) */ BOOL WINAPI FreeLibrary32_16( HINSTANCE module ) { return FreeLibrary( module ); } /*********************************************************************** * GetModuleFileName32 (KERNEL.487) */ DWORD WINAPI GetModuleFileName32_16( HMODULE module, LPSTR buffer, DWORD size ) { return GetModuleFileNameA( module, buffer, size ); } /*********************************************************************** * GetModuleHandle32 (KERNEL.488) */ HMODULE WINAPI GetModuleHandle32_16(LPCSTR module) { return GetModuleHandleA( module ); } /*********************************************************************** * RegisterServiceProcess (KERNEL.491) */ DWORD WINAPI RegisterServiceProcess16( DWORD dwProcessId, DWORD dwType ) { return 1; /* success */ } /*********************************************************************** * WaitForMultipleObjectsEx (KERNEL.495) */ DWORD WINAPI WaitForMultipleObjectsEx16( DWORD count, const HANDLE *handles, BOOL wait_all, DWORD timeout, BOOL alertable ) { DWORD retval, mutex_count; ReleaseThunkLock( &mutex_count ); retval = WaitForMultipleObjectsEx( count, handles, wait_all, timeout, alertable ); RestoreThunkLock( mutex_count ); return retval; } /********************************************************************** * VWin32_BoostThreadGroup (KERNEL.535) */ VOID WINAPI VWin32_BoostThreadGroup( DWORD threadId, INT boost ) { FIXME("(0x%08x,%d): stub\n", threadId, boost); } /********************************************************************** * VWin32_BoostThreadStatic (KERNEL.536) */ VOID WINAPI VWin32_BoostThreadStatic( DWORD threadId, INT boost ) { FIXME("(0x%08x,%d): stub\n", threadId, boost); } /*********************************************************************** * EnableDos (KERNEL.41) * DisableDos (KERNEL.42) * GetLastDiskChange (KERNEL.98) * ValidateCodeSegments (KERNEL.100) * KbdRst (KERNEL.123) * EnableKernel (KERNEL.124) * DisableKernel (KERNEL.125) * ValidateFreeSpaces (KERNEL.200) * K237 (KERNEL.237) * BUNNY_351 (KERNEL.351) * PIGLET_361 (KERNEL.361) * * Entry point for kernel functions that do nothing. */ LONG WINAPI KERNEL_nop(void) { return 0; } /*********************************************************************** * ToolHelpHook (KERNEL.341) * see "Undocumented Windows" */ FARPROC16 WINAPI ToolHelpHook16(FARPROC16 func) { static FARPROC16 hook; FIXME("(%p), stub.\n", func); return InterlockedExchangePointer( (void **)&hook, func ); } /* thunk for 16-bit CreateThread */ struct thread_args { FARPROC16 proc; DWORD param; }; static DWORD CALLBACK start_thread16( LPVOID threadArgs ) { struct thread_args args = *(struct thread_args *)threadArgs; HeapFree( GetProcessHeap(), 0, threadArgs ); return K32WOWCallback16( (DWORD)args.proc, args.param ); } /*********************************************************************** * CreateThread16 (KERNEL.441) */ HANDLE WINAPI CreateThread16( SECURITY_ATTRIBUTES *sa, DWORD stack, FARPROC16 start, SEGPTR param, DWORD flags, LPDWORD id ) { struct thread_args *args = HeapAlloc( GetProcessHeap(), 0, sizeof(*args) ); if (!args) return INVALID_HANDLE_VALUE; args->proc = start; args->param = param; return CreateThread( sa, stack, start_thread16, args, flags, id ); } /*********************************************************************** * _DebugOutput (KERNEL.328) */ void WINAPIV _DebugOutput( WORD flags, LPCSTR spec, VA_LIST16 valist ) { char caller[101]; /* Decode caller address */ if (!GetModuleName16( GetExePtr(CURRENT_STACK16->cs), caller, sizeof(caller) )) sprintf( caller, "%04X:%04X", CURRENT_STACK16->cs, CURRENT_STACK16->ip ); /* FIXME: cannot use wvsnprintf16 from kernel */ /* wvsnprintf16( temp, sizeof(temp), spec, valist ); */ /* Output */ FIXME("%s %04x %s\n", caller, flags, debugstr_a(spec) ); } #define FRAME_FAR 0 #define FRAME_NEAR 1 void fill_stack_trace_entry(STACKTRACEENTRY *ste) { ste->hModule = GetExePtr(ste->wCS); ste->wSegment = GLOBAL_GetSegNum(ste->wCS); } /* * StackTrace: * 1.KRNL386.EXE!WAITEVENT+0x46(win31) * 2.USER.EXE * 3.... */ static SEGPTR waitevent; /*********************************************************************** * StackTraceFirst (TOOLHELP.66) */ BOOL16 WINAPI StackTraceFirst16(STACKTRACEENTRY *ste, HTASK16 htask) { if (ste->dwSize != sizeof(*ste)) return 0; TDB *tdb = (TDB*)GlobalLock16(htask); if (!waitevent) waitevent = GetProcAddress16(GetModuleHandle16("KERNEL"), "WAITEVENT"); if (GetCurrentTask() == htask) return FALSE; SEGPTR stack16 = PtrToUlong(TebTlsGetValue(tdb->teb, WOW32ReservedTls)); STACK16FRAME *frm = ((STACK16FRAME*)MapSL(stack16)); ste->hTask = htask; ste->wBP = OFFSETOF(stack16) + FIELD_OFFSET(STACK16FRAME, bp); ste->wFlags = FRAME_FAR; ste->wSS = SELECTOROF(stack16); ste->wIP = OFFSETOF(waitevent); ste->wCS = SELECTOROF(waitevent); fill_stack_trace_entry(ste); return TRUE; } /*********************************************************************** * StackTraceCSIPFirst (TOOLHELP.67) */ BOOL16 WINAPI StackTraceCSIPFirst16(STACKTRACEENTRY *ste, WORD wSS, WORD wCS, WORD wIP, WORD wBP) { if (ste->dwSize != sizeof(*ste)) return 0; ste->hTask = GetCurrentTask(); ste->wSS = wSS; ste->wCS = wCS; ste->wIP = wIP; ste->wBP = wBP; ste->wFlags = FRAME_FAR; fill_stack_trace_entry(ste); return TRUE; } /*********************************************************************** * StackTraceNext (TOOLHELP.68) */ BOOL16 WINAPI StackTraceNext16(STACKTRACEENTRY *ste) { if (ste->dwSize != sizeof(*ste)) return 0; LPWORD s = (LPWORD)MapSL(MAKESEGPTR(ste->wSS, ste->wBP)); DWORD old_ebp = *s; DWORD ret_addr = *(LPDWORD)(s + 1); if (!waitevent) waitevent = GetProcAddress16(GetModuleHandle16("KERNEL"), "WAITEVENT"); if (ste->wBP >= old_ebp || ste->wBP == 0 || IsBadReadPtr16(MAKESEGPTR(ste->wSS, old_ebp), 6)) return FALSE; if (MAKESEGPTR(ste->wCS, ste->wIP) == waitevent) { TDB *tdb = (TDB*)GlobalLock16(ste->hTask); SEGPTR stack16 = PtrToUlong(TebTlsGetValue(tdb->teb, WOW32ReservedTls)); STACK16FRAME *frm = ((STACK16FRAME*)MapSL(stack16)); ste->wIP = frm->callfrom_ip; ste->wCS = frm->module_cs; return TRUE; } ste->wIP = OFFSETOF(ret_addr); if (IsBadCodePtr16(ret_addr)) ste->wFlags = FRAME_NEAR; else { ste->wCS = SELECTOROF(ret_addr); ste->wFlags = FRAME_FAR; } ste->wBP = old_ebp; fill_stack_trace_entry(ste); return TRUE; } /*********************************************************************** * TaskSetCSIP16 (TOOLHELP.81) */ BOOL WINAPI TaskSetCSIP16(HTASK16 htask, WORD cs, WORD ip) { TDB *tdb = (TDB*)GlobalLock16(htask); if (GetCurrentTask() == htask) return FALSE; STACK16FRAME *frm = ((STACK16FRAME*)MapSL(PtrToUlong(TebTlsGetValue(tdb->teb, WOW32ReservedTls)))); frm->cs = cs; frm->ip = ip; return TRUE; } /*********************************************************************** * TaskGetCSIP16 (TOOLHELP.82) */ DWORD WINAPI TaskGetCSIP16(HTASK16 htask) { TDB *tdb = (TDB*)GlobalLock16(htask); if (GetCurrentTask() == htask) return 0; STACK16FRAME *frm = ((STACK16FRAME*)MapSL(PtrToUlong(TebTlsGetValue(tdb->teb, WOW32ReservedTls)))); return MAKESEGPTR(frm->cs, frm->ip); } /*********************************************************************** * TaskSwitch16 (TOOLHELP.83) */ BOOL WINAPI TaskSwitch16(HTASK16 htask, SEGPTR dwNewCSIP) { BOOL s = TaskSetCSIP16(htask, SELECTOROF(dwNewCSIP), OFFSETOF(dwNewCSIP)); if (s) { PostThreadMessageA(HTASK_32(htask), 0, 0, 0); DirectedYield16(htask); } return s; } ================================================ FILE: krnl386/kernel16_private.h ================================================ /* * Kernel 16-bit private definitions * * Copyright 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_KERNEL16_PRIVATE_H #define __WINE_KERNEL16_PRIVATE_H #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define USE_NATIVE #ifdef USE_NATIVE //#define NtCurrentTeb NtCurrentTeb_WINTERNL_H #define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */ #endif #include "wine/winbase16.h" //#include "windows/winreg.h" //#include "windows/winternl.h" #ifdef USE_NATIVE #undef _TEB #undef TEB #undef PTEB #undef _PEB #undef PEB #undef PPEB #undef NtCurrentTeb #undef _EXCEPTION_REGISTRATION_RECORD #undef EXCEPTION_REGISTRATION_RECORD #undef _SYSTEM_BASIC_INFORMATION #undef SYSTEM_BASIC_INFORMATION #undef PSYSTEM_BASIC_INFORMATION #define FileDirectoryInformation FileDirectoryInformation__ #define _FILE_INFORMATION_CLASS _FILE_INFORMATION_CLASS__ #define FILE_INFORMATION_CLASS FILE_INFORMATION_CLASS__ #define _RTL_USER_PROCESS_PARAMETERS _RTL_USER_PROCESS_PARAMETERS__ #define RTL_USER_PROCESS_PARAMETERS RTL_USER_PROCESS_PARAMETERS__ #define PRTL_USER_PROCESS_PARAMETERS PRTL_USER_PROCESS_PARAMETERS__ //#define _NT_TIB _NT_TIB__ //#define NT_TIB NT_TIB__ //#define PNT_TIB PNT_TIB__ #define _SYSTEM_BASIC_INFORMATION _SYSTEM_BASIC_INFORMATION__ #define SYSTEM_BASIC_INFORMATION SYSTEM_BASIC_INFORMATION__ #define PSYSTEM_BASIC_INFORMATION PSYSTEM_BASIC_INFORMATION__ //#define _EXCEPTION_REGISTRATION_RECORD _EXCEPTION_REGISTRATION_RECORD__ //#define EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION_RECORD__ #define _TEB _TEB_WINTERNL_H #define TEB TEB_WINTERNL_H #define PTEB PTEB_WINTERNL_H #define _PEB _PEB_WINTERNL_H #define PEB PEB_WINTERNL_H #define PPEB PPEB_WINTERNL_H #define NtCurrentTeb NtCurrentTeb__ #undef _WINTERNL_ #include "winreg.h" #include "winternl.h" #undef _TEB #undef TEB #undef PTEB #undef _PEB #undef PEB #undef PPEB #undef NtCurrentTeb #undef _EXCEPTION_REGISTRATION_RECORD #undef EXCEPTION_REGISTRATION_RECORD #undef _SYSTEM_BASIC_INFORMATION #undef SYSTEM_BASIC_INFORMATION #undef PSYSTEM_BASIC_INFORMATION #undef _RTL_USER_PROCESS_PARAMETERS #undef RTL_USER_PROCESS_PARAMETERS #undef PRTL_USER_PROCESS_PARAMETERS #undef _FILE_INFORMATION_CLASS #undef FILE_INFORMATION_CLASS #undef FileDirectoryInformation #undef _SYSTEM_BASIC_INFORMATION__ #undef SYSTEM_BASIC_INFORMATION__ #undef PSYSTEM_BASIC_INFORMATION__ #undef _EXCEPTION_REGISTRATION_RECORD__ #undef EXCEPTION_REGISTRATION_RECORD__ #undef _TEB_WINTERNL_H #undef TEB_WINTERNL_H #undef PTEB_WINTERNL_H #undef _PEB_WINTERNL_H #undef PEB_WINTERNL_H #undef PPEB_WINTERNL_H #undef NtCurrentTeb__ #undef _NT_TIB #undef NT_TIB #undef PNT_TIB #undef _SYSTEM_BASIC_INFORMATION //_SYSTEM_BASIC_INFORMATION__ #undef SYSTEM_BASIC_INFORMATION //SYSTEM_BASIC_INFORMATION__ #undef PSYSTEM_BASIC_INFORMATION //PSYSTEM_BASIC_INFORMATION__ #undef _EXCEPTION_REGISTRATION_RECORD //_EXCEPTION_REGISTRATION_RECORD__ #undef EXCEPTION_REGISTRATION_RECORD //EXCEPTION_REGISTRATION_RECORD__ #undef _TEB //_TEB_WINTERNL_H #undef TEB //TEB_WINTERNL_H #undef PTEB //PTEB_WINTERNL_H #undef _PEB //_PEB_WINTERNL_H #undef PEB //PEB_WINTERNL_H #undef PPEB//// PPEB_WINTERNL_H #undef NtCurrentTeb// NtCurrentTeb__ #ifdef _TEB #error aaa #endif typedef struct _GDI_TEB_BATCH { ULONG Offset; HANDLE HDC; ULONG Buffer[0x136]; } GDI_TEB_BATCH; typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME { struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous; struct _ACTIVATION_CONTEXT *ActivationContext; ULONG Flags; } RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME; typedef struct _ACTIVATION_CONTEXT_STACK { ULONG Flags; ULONG NextCookieSequenceNumber; RTL_ACTIVATION_CONTEXT_STACK_FRAME *ActiveFrame; LIST_ENTRY FrameListCache; } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK; typedef struct tagRTL_BITMAP { ULONG SizeOfBitMap; /* Number of bits in the bitmap */ PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */ } RTL_BITMAP, *PRTL_BITMAP; typedef struct RTL_DRIVE_LETTER_CURDIR { USHORT Flags; USHORT Length; ULONG TimeStamp; UNICODE_STRING DosPath; } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR; typedef struct _CURDIR { UNICODE_STRING DosPath; PVOID Handle; } CURDIR, *PCURDIR; typedef struct _RTL_USER_PROCESS_PARAMETERS { ULONG AllocationSize; ULONG Size; ULONG Flags; ULONG DebugFlags; HANDLE ConsoleHandle; ULONG ConsoleFlags; HANDLE hStdInput; HANDLE hStdOutput; HANDLE hStdError; CURDIR CurrentDirectory; UNICODE_STRING DllPath; UNICODE_STRING ImagePathName; UNICODE_STRING CommandLine; PWSTR Environment; ULONG dwX; ULONG dwY; ULONG dwXSize; ULONG dwYSize; ULONG dwXCountChars; ULONG dwYCountChars; ULONG dwFillAttribute; ULONG dwFlags; ULONG wShowWindow; UNICODE_STRING WindowTitle; UNICODE_STRING Desktop; UNICODE_STRING ShellInfo; UNICODE_STRING RuntimeInfo; RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20]; } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; #define WOW32RESERVED_TLS_INDEX 0x20 __declspec(dllexport) PVOID getWOW32Reserved(); __declspec(dllexport) PVOID setWOW32Reserved(PVOID); /* * The exception frame, used for registering exception handlers * Win32 cares only about this, but compilers generally emit * larger exception frames for their own use. */ /* struct _EXCEPTION_REGISTRATION_RECORD; typedef DWORD(*PEXCEPTION_HANDLER)(PEXCEPTION_RECORD, struct _EXCEPTION_REGISTRATION_RECORD*, PCONTEXT, struct _EXCEPTION_REGISTRATION_RECORD **); typedef struct _EXCEPTION_REGISTRATION_RECORD { struct _EXCEPTION_REGISTRATION_RECORD *Prev; PEXCEPTION_HANDLER Handler; } EXCEPTION_REGISTRATION_RECORD;*/ #undef _PEB /*********************************************************************** * PEB data structure */ typedef struct _PEB { /* win32/win64 */ BOOLEAN InheritedAddressSpace; /* 000/000 */ BOOLEAN ReadImageFileExecOptions; /* 001/001 */ BOOLEAN BeingDebugged; /* 002/002 */ BOOLEAN SpareBool; /* 003/003 */ HANDLE Mutant; /* 004/008 */ HMODULE ImageBaseAddress; /* 008/010 */ PPEB_LDR_DATA LdrData; /* 00c/018 */ RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 010/020 */ PVOID SubSystemData; /* 014/028 */ HANDLE ProcessHeap; /* 018/030 */ PRTL_CRITICAL_SECTION FastPebLock; /* 01c/038 */ PVOID /*PPEBLOCKROUTINE*/ FastPebLockRoutine; /* 020/040 */ PVOID /*PPEBLOCKROUTINE*/ FastPebUnlockRoutine; /* 024/048 */ ULONG EnvironmentUpdateCount; /* 028/050 */ PVOID KernelCallbackTable; /* 02c/058 */ ULONG Reserved[2]; /* 030/060 */ PVOID /*PPEB_FREE_BLOCK*/ FreeList; /* 038/068 */ ULONG TlsExpansionCounter; /* 03c/070 */ PRTL_BITMAP TlsBitmap; /* 040/078 */ ULONG TlsBitmapBits[2]; /* 044/080 */ PVOID ReadOnlySharedMemoryBase; /* 04c/088 */ PVOID ReadOnlySharedMemoryHeap; /* 050/090 */ PVOID *ReadOnlyStaticServerData; /* 054/098 */ PVOID AnsiCodePageData; /* 058/0a0 */ PVOID OemCodePageData; /* 05c/0a8 */ PVOID UnicodeCaseTableData; /* 060/0b0 */ ULONG NumberOfProcessors; /* 064/0b8 */ ULONG NtGlobalFlag; /* 068/0bc */ LARGE_INTEGER CriticalSectionTimeout; /* 070/0c0 */ SIZE_T HeapSegmentReserve; /* 078/0c8 */ SIZE_T HeapSegmentCommit; /* 07c/0d0 */ SIZE_T HeapDeCommitTotalFreeThreshold; /* 080/0d8 */ SIZE_T HeapDeCommitFreeBlockThreshold; /* 084/0e0 */ ULONG NumberOfHeaps; /* 088/0e8 */ ULONG MaximumNumberOfHeaps; /* 08c/0ec */ PVOID *ProcessHeaps; /* 090/0f0 */ PVOID GdiSharedHandleTable; /* 094/0f8 */ PVOID ProcessStarterHelper; /* 098/100 */ PVOID GdiDCAttributeList; /* 09c/108 */ PVOID LoaderLock; /* 0a0/110 */ ULONG OSMajorVersion; /* 0a4/118 */ ULONG OSMinorVersion; /* 0a8/11c */ ULONG OSBuildNumber; /* 0ac/120 */ ULONG OSPlatformId; /* 0b0/124 */ ULONG ImageSubSystem; /* 0b4/128 */ ULONG ImageSubSystemMajorVersion; /* 0b8/12c */ ULONG ImageSubSystemMinorVersion; /* 0bc/130 */ ULONG ImageProcessAffinityMask; /* 0c0/134 */ HANDLE GdiHandleBuffer[28]; /* 0c4/138 */ ULONG unknown[6]; /* 134/218 */ PVOID PostProcessInitRoutine; /* 14c/230 */ PRTL_BITMAP TlsExpansionBitmap; /* 150/238 */ ULONG TlsExpansionBitmapBits[32]; /* 154/240 */ ULONG SessionId; /* 1d4/2c0 */ ULARGE_INTEGER AppCompatFlags; /* 1d8/2c8 */ ULARGE_INTEGER AppCompatFlagsUser; /* 1e0/2d0 */ PVOID ShimData; /* 1e8/2d8 */ PVOID AppCompatInfo; /* 1ec/2e0 */ UNICODE_STRING CSDVersion; /* 1f0/2e8 */ PVOID ActivationContextData; /* 1f8/2f8 */ PVOID ProcessAssemblyStorageMap; /* 1fc/300 */ PVOID SystemDefaultActivationData; /* 200/308 */ PVOID SystemAssemblyStorageMap; /* 204/310 */ SIZE_T MinimumStackCommit; /* 208/318 */ PVOID *FlsCallback; /* 20c/320 */ LIST_ENTRY FlsListHead; /* 210/328 */ PRTL_BITMAP FlsBitmap; /* 218/338 */ ULONG FlsBitmapBits[4]; /* 21c/340 */ } PEB, *PPEB; /*********************************************************************** * TEB data structure */ typedef struct _TEB { /* win32/win64 */ NT_TIB Tib; /* 000/0000 */ PVOID EnvironmentPointer; /* 01c/0038 */ CLIENT_ID ClientId; /* 020/0040 */ PVOID ActiveRpcHandle; /* 028/0050 */ PVOID ThreadLocalStoragePointer; /* 02c/0058 */ PPEB Peb; /* 030/0060 */ ULONG LastErrorValue; /* 034/0068 */ ULONG CountOfOwnedCriticalSections; /* 038/006c */ PVOID CsrClientThread; /* 03c/0070 */ PVOID Win32ThreadInfo; /* 040/0078 */ ULONG Win32ClientInfo[31]; /* 044/0080 used for user32 private data in Wine */ PVOID __WOW32Reserved__; /* 0c0/0100 */ ULONG CurrentLocale; /* 0c4/0108 */ ULONG FpSoftwareStatusRegister; /* 0c8/010c */ PVOID SystemReserved1[54]; /* 0cc/0110 used for kernel32 private data in Wine */ LONG ExceptionCode; /* 1a4/02c0 */ ACTIVATION_CONTEXT_STACK ActivationContextStack; /* 1a8/02c8 */ BYTE SpareBytes1[24]; /* 1bc/02e8 used for ntdll private data in Wine */ PVOID SystemReserved2[10]; /* 1d4/0300 used for ntdll private data in Wine =>x86_thread_data(dlls/ntdll/signal_i386.c) */ GDI_TEB_BATCH GdiTebBatch; /* 1fc/0350 used for vm86 private data in Wine */ HANDLE gdiRgn; /* 6dc/0838 */ HANDLE gdiPen; /* 6e0/0840 */ HANDLE gdiBrush; /* 6e4/0848 */ CLIENT_ID RealClientId; /* 6e8/0850 */ HANDLE GdiCachedProcessHandle; /* 6f0/0860 */ ULONG GdiClientPID; /* 6f4/0868 */ ULONG GdiClientTID; /* 6f8/086c */ PVOID GdiThreadLocaleInfo; /* 6fc/0870 */ ULONG UserReserved[5]; /* 700/0878 */ PVOID glDispachTable[280]; /* 714/0890 */ PVOID glReserved1[26]; /* b74/1150 */ PVOID glReserved2; /* bdc/1220 */ PVOID glSectionInfo; /* be0/1228 */ PVOID glSection; /* be4/1230 */ PVOID glTable; /* be8/1238 */ PVOID glCurrentRC; /* bec/1240 */ PVOID glContext; /* bf0/1248 */ ULONG LastStatusValue; /* bf4/1250 */ UNICODE_STRING StaticUnicodeString; /* bf8/1258 used by advapi32 */ WCHAR StaticUnicodeBuffer[261]; /* c00/1268 used by advapi32 */ PVOID DeallocationStack; /* e0c/1478 */ PVOID TlsSlots[64]; /* e10/1480 */ LIST_ENTRY TlsLinks; /* f10/1680 */ PVOID Vdm; /* f18/1690 */ PVOID ReservedForNtRpc; /* f1c/1698 */ PVOID DbgSsReserved[2]; /* f20/16a0 */ ULONG HardErrorDisabled; /* f28/16b0 */ PVOID Instrumentation[16]; /* f2c/16b8 */ PVOID WinSockData; /* f6c/1738 */ ULONG GdiBatchCount; /* f70/1740 */ ULONG Spare2; /* f74/1744 */ PVOID Spare3; /* f78/1748 */ PVOID Spare4; /* f7c/1750 */ PVOID ReservedForOle; /* f80/1758 */ ULONG WaitingOnLoaderLock; /* f84/1760 */ PVOID Reserved5[3]; /* f88/1768 */ PVOID *TlsExpansionSlots; /* f94/1780 */ ULONG ImpersonationLocale; /* f98/1788 */ ULONG IsImpersonating; /* f9c/178c */ PVOID NlsCache; /* fa0/1790 */ PVOID ShimData; /* fa4/1798 */ ULONG HeapVirtualAffinity; /* fa8/17a0 */ PVOID CurrentTransactionHandle; /* fac/17a8 */ PVOID ActiveFrame; /* fb0/17b0 */ #ifdef _WIN64 PVOID unknown[2]; /* 17b8 */ #endif PVOID *FlsSlots; /* fb4/17c8 */ } TEB, *PTEB; #ifdef _MSC_VER __inline struct _TEB * NtCurrentTeb(void) { return (struct _TEB *) (ULONG_PTR)__readfsdword(PcTeb); } #else static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { struct _TEB *teb; __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb)); return teb; } #endif /************************************************************************* * Loader structures * * Those are not part of standard Winternl.h */ typedef struct _LDR_MODULE { LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InMemoryOrderModuleList; LIST_ENTRY InInitializationOrderModuleList; void* BaseAddress; void* EntryPoint; ULONG SizeOfImage; UNICODE_STRING FullDllName; UNICODE_STRING BaseDllName; ULONG Flags; SHORT LoadCount; SHORT TlsIndex; HANDLE SectionHandle; ULONG CheckSum; ULONG TimeDateStamp; HANDLE ActivationContext; } LDR_MODULE, *PLDR_MODULE; /* those defines are (some of the) regular LDR_MODULE.Flags values */ #define LDR_IMAGE_IS_DLL 0x00000004 #define LDR_LOAD_IN_PROGRESS 0x00001000 #define LDR_UNLOAD_IN_PROGRESS 0x00002000 #define LDR_NO_DLL_CALLS 0x00040000 #define LDR_PROCESS_ATTACHED 0x00080000 #define LDR_MODULE_REBASED 0x00200000 /* these ones is Wine specific */ #define LDR_DONT_RESOLVE_REFS 0x40000000 #define LDR_WINE_INTERNAL 0x80000000 /* flag for LdrAddRefDll */ #define LDR_ADDREF_DLL_PIN 0x00000001 /* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */ #define WCB16_REGS 2 #define WCB16_REGS_LONG 4 /* function uses 32-bit lret */ /* Windows Exit Procedure flag values */ #define WEP_FREE_DLL 0 #define WEP_SYSTEM_EXIT 1 //wine winbase.h #define OF_SEARCH 0x0400 /* Used without OF_REOPEN */ /* GetTempFileName() Flags */ #define TF_FORCEDRIVE 0x80 //winnt.h /* This flag allows it to create heaps shared by all processes under win95, FIXME: correct name */ #define HEAP_SHARED 0x04000000 //winternl.h /* System Information Class 0x00 */ typedef struct _SYSTEM_BASIC_INFORMATION { #ifdef __WINESRC__ DWORD unknown; ULONG KeMaximumIncrement; ULONG PageSize; ULONG MmNumberOfPhysicalPages; ULONG MmLowestPhysicalPage; ULONG MmHighestPhysicalPage; ULONG_PTR AllocationGranularity; PVOID LowestUserAddress; PVOID HighestUserAddress; ULONG_PTR ActiveProcessorsAffinityMask; BYTE NumberOfProcessors; #else BYTE Reserved1[24]; PVOID Reserved2[4]; CCHAR NumberOfProcessors; #endif } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; //wine winternl.h typedef enum _KEY_VALUE_INFORMATION_CLASS { KeyValueBasicInformation, KeyValueFullInformation, KeyValuePartialInformation, KeyValueFullInformationAlign64, KeyValuePartialInformationAlign64 } KEY_VALUE_INFORMATION_CLASS; #endif typedef struct _KEY_VALUE_PARTIAL_INFORMATION { ULONG TitleIndex; ULONG Type; ULONG DataLength; UCHAR Data[1]; } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; /* FIXME: private structure for vm86 mode, stored in teb->GdiTebBatch */ typedef struct { DWORD dpmi_vif; DWORD vm86_pending; } WINE_VM86_TEB_INFO; __declspec(dllexport) WINE_VM86_TEB_INFO *getGdiTebBatch(); static inline WINE_VM86_TEB_INFO *get_vm86_teb_info(void) { return getGdiTebBatch();// (WINE_VM86_TEB_INFO *)&NtCurrentTeb()->GdiTebBatch; } /* The thread information for 16-bit threads */ /* NtCurrentTeb()->SubSystemTib points to this */ typedef struct { void *unknown; /* 00 unknown */ UNICODE_STRING *exe_name; /* 04 exe module name */ /* the following fields do not exist under Windows */ UNICODE_STRING exe_str; /* exe name string pointed to by exe_name */ CURDIR curdir; /* current directory */ WCHAR curdir_buffer[MAX_PATH]; } WIN16_SUBSYSTEM_TIB; #include "pshpack1.h" /* In-memory module structure. See 'Windows Internals' p. 219 */ typedef struct _NE_MODULE { WORD ne_magic; /* 00 'NE' signature */ WORD count; /* 02 Usage count (ne_ver/ne_rev on disk) */ WORD ne_enttab; /* 04 Near ptr to entry table */ HMODULE16 next; /* 06 Selector to next module (ne_cbenttab on disk) */ WORD dgroup_entry; /* 08 Near ptr to segment entry for DGROUP (ne_crc on disk) */ WORD fileinfo; /* 0a Near ptr to file info (OFSTRUCT) (ne_crc on disk) */ WORD ne_flags; /* 0c Module flags */ WORD ne_autodata; /* 0e Logical segment for DGROUP */ WORD ne_heap; /* 10 Initial heap size */ WORD ne_stack; /* 12 Initial stack size */ DWORD ne_csip; /* 14 Initial cs:ip */ DWORD ne_sssp; /* 18 Initial ss:sp */ WORD ne_cseg; /* 1c Number of segments in segment table */ WORD ne_cmod; /* 1e Number of module references */ WORD ne_cbnrestab; /* 20 Size of non-resident names table */ WORD ne_segtab; /* 22 Near ptr to segment table */ WORD ne_rsrctab; /* 24 Near ptr to resource table */ WORD ne_restab; /* 26 Near ptr to resident names table */ WORD ne_modtab; /* 28 Near ptr to module reference table */ WORD ne_imptab; /* 2a Near ptr to imported names table */ DWORD ne_nrestab; /* 2c File offset of non-resident names table */ WORD ne_cmovent; /* 30 Number of moveable entries in entry table*/ WORD ne_align; /* 32 Alignment shift count */ WORD ne_cres; /* 34 # of resource segments */ BYTE ne_exetyp; /* 36 Operating system flags */ BYTE ne_flagsothers; /* 37 Misc. flags */ HANDLE16 dlls_to_init; /* 38 List of DLLs to initialize (ne_pretthunks on disk) */ HANDLE16 nrname_handle; /* 3a Handle to non-resident name table (ne_psegrefbytes on disk) */ WORD ne_swaparea; /* 3c Min. swap area size */ WORD ne_expver; /* 3e Expected Windows version */ /* From here, these are extra fields not present in normal Windows */ HMODULE module32; /* PE module handle for Win32 modules */ HMODULE owner32; /* PE module containing this one for 16-bit builtins */ HMODULE16 self; /* Handle for this module */ WORD self_loading_sel; /* Selector used for self-loading apps. */ LPVOID rsrc32_map; /* HRSRC 16->32 map (for 32-bit modules) */ LPCVOID mapping; /* mapping of the binary file */ SIZE_T mapping_size; /* size of the file mapping */ } NE_MODULE; typedef struct { BYTE type; BYTE flags; BYTE segnum; WORD offs; } ET_ENTRY; typedef struct { WORD first; /* ordinal */ WORD last; /* ordinal */ WORD next; /* bundle */ } ET_BUNDLE; /* In-memory segment table */ typedef struct { WORD filepos; /* Position in file, in sectors */ WORD size; /* Segment size on disk */ WORD flags; /* Segment flags */ WORD minsize; /* Min. size of segment in memory */ HANDLE16 hSeg; /* Selector or handle (selector - 1) of segment in memory */ } SEGTABLEENTRY; /* this structure is always located at offset 0 of the DGROUP segment */ typedef struct { WORD null; /* Always 0 */ DWORD old_ss_sp; /* Stack pointer; used by SwitchTaskTo() */ WORD heap; /* Pointer to the local heap information (if any) */ WORD atomtable; /* Pointer to the local atom table (if any) */ WORD stacktop; /* Top of the stack */ WORD stackmin; /* Lowest stack address used so far */ WORD stackbottom; /* Bottom of the stack */ } INSTANCEDATA; /* relay entry points */ typedef struct { BYTE pushw_bp; /* pushw %bp */ WORD pushl; /* pushl $target */ void *target; BYTE call; /* call CALLFROM16 */ short callfrom16; } ENTRYPOINT16; typedef struct { WORD pushl; /* pushl $relay */ void *relay; WORD lcall; /* lcall __FLATCS__:glue */ void *glue; WORD flatcs; BYTE ret[12]; /* return sequence */ WORD movl; /* movl arg_types[1],arg_types[0](%esi) */ DWORD arg_types[2]; /* type of each argument */ } CALLFROM16; /* THHOOK Kernel Data Structure */ typedef struct _THHOOK { HANDLE16 hGlobalHeap; /* 00 (handle BURGERMASTER) */ WORD pGlobalHeap; /* 02 (selector BURGERMASTER) */ HMODULE16 hExeHead; /* 04 hFirstModule */ HMODULE16 hExeSweep; /* 06 (unused) */ HANDLE16 TopPDB; /* 08 (handle of KERNEL PDB) */ HANDLE16 HeadPDB; /* 0A (first PDB in list) */ HANDLE16 TopSizePDB; /* 0C (unused) */ HTASK16 HeadTDB; /* 0E hFirstTask */ HTASK16 CurTDB; /* 10 hCurrentTask */ HTASK16 LoadTDB; /* 12 (unused) */ HTASK16 LockTDB; /* 14 hLockedTask */ WORD SelTableLen; /* 16 (bytes) 0x2000 * 4 */ DWORD SelTableStart; /* 18 offset in hGlobalHeap */ } THHOOK; extern LONG __wine_call_from_16(void); extern void __wine_call_from_16_regs(void); extern THHOOK *pThhook DECLSPEC_HIDDEN; #include "poppack.h" #define NE_SEG_TABLE(pModule) \ ((SEGTABLEENTRY *)((char *)(pModule) + (pModule)->ne_segtab)) #define NE_MODULE_NAME(pModule) \ (((OFSTRUCT *)((char*)(pModule) + (pModule)->fileinfo))->szPathName) #define NE_GET_DATA(pModule,offset,size) \ ((const void *)(((offset)+(size) <= pModule->mapping_size) ? \ (const char *)pModule->mapping + (offset) : NULL)) #define NE_READ_DATA(pModule,buffer,offset,size) \ (((offset)+(size) <= pModule->mapping_size) ? \ (memcpy( buffer, (const char *)pModule->mapping + (offset), (size) ), TRUE) : FALSE) #define CURRENT_STACK16 ((STACK16FRAME*)MapSL(PtrToUlong(getWOW32Reserved()))) #define CURRENT_DS (CURRENT_STACK16->ds) /* push bytes on the 16-bit stack of a thread; return a segptr to the first pushed byte */ static inline SEGPTR stack16_push( int size ) { STACK16FRAME *frame = CURRENT_STACK16; memmove( (char*)frame - size, frame, sizeof(*frame) ); setWOW32Reserved((char *)getWOW32Reserved() - size); return (SEGPTR)((char *)getWOW32Reserved() + sizeof(*frame)); } /* pop bytes from the 16-bit stack of a thread */ static inline void stack16_pop( int size ) { STACK16FRAME *frame = CURRENT_STACK16; memmove( (char*)frame + size, frame, sizeof(*frame) ); setWOW32Reserved((char *)getWOW32Reserved() + size); } /* dosmem.c */ extern BOOL DOSMEM_Init(void) DECLSPEC_HIDDEN; extern BOOL DOSMEM_InitDosMemory(void) DECLSPEC_HIDDEN; extern LPVOID DOSMEM_MapRealToLinear(DWORD) DECLSPEC_HIDDEN; /* real-mode to linear */ extern LPVOID DOSMEM_MapDosToLinear(UINT) DECLSPEC_HIDDEN; /* linear DOS to Wine */ extern UINT DOSMEM_MapLinearToDos(LPVOID) DECLSPEC_HIDDEN; /* linear Wine to DOS */ extern BOOL DOSMEM_MapDosLayout(void) DECLSPEC_HIDDEN; extern LPVOID DOSMEM_AllocBlock(UINT size, WORD* p) DECLSPEC_HIDDEN; extern BOOL DOSMEM_FreeBlock(void* ptr) DECLSPEC_HIDDEN; extern UINT DOSMEM_ResizeBlock(void* ptr, UINT size, BOOL exact) DECLSPEC_HIDDEN; extern UINT DOSMEM_Available(void) DECLSPEC_HIDDEN; /* global16.c */ extern HGLOBAL16 GLOBAL_CreateBlock( UINT16 flags, void *ptr, DWORD size, HGLOBAL16 hOwner, unsigned char selflags, WORD sel ) DECLSPEC_HIDDEN; extern BOOL16 GLOBAL_FreeBlock( HGLOBAL16 handle ) DECLSPEC_HIDDEN; extern BOOL16 GLOBAL_MoveBlock( HGLOBAL16 handle, void *ptr, DWORD size ) DECLSPEC_HIDDEN; extern HGLOBAL16 GLOBAL_Alloc( WORD flags, DWORD size, HGLOBAL16 hOwner, unsigned char selflags, WORD sel ) DECLSPEC_HIDDEN; /* instr.c */ extern DWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context ) DECLSPEC_HIDDEN; extern LONG CALLBACK INSTR_vectored_handler( EXCEPTION_POINTERS *ptrs ) DECLSPEC_HIDDEN; /* ne_module.c */ extern NE_MODULE *NE_GetPtr( HMODULE16 hModule ) DECLSPEC_HIDDEN; extern WORD NE_GetOrdinal( HMODULE16 hModule, const char *name ) DECLSPEC_HIDDEN; extern FARPROC16 WINAPI NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal ) DECLSPEC_HIDDEN; extern FARPROC16 NE_GetEntryPointEx( HMODULE16 hModule, WORD ordinal, BOOL16 snoop ) DECLSPEC_HIDDEN; extern BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset ) DECLSPEC_HIDDEN; extern DWORD NE_StartTask(void) DECLSPEC_HIDDEN; /* ne_segment.c */ extern BOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum ) DECLSPEC_HIDDEN; extern BOOL NE_LoadAllSegments( NE_MODULE *pModule ) DECLSPEC_HIDDEN; extern BOOL NE_CreateSegment( NE_MODULE *pModule, int segnum, WORD sel ) DECLSPEC_HIDDEN; extern BOOL NE_CreateAllSegments( NE_MODULE *pModule ) DECLSPEC_HIDDEN; extern HINSTANCE16 NE_GetInstance( NE_MODULE *pModule ) DECLSPEC_HIDDEN; extern void NE_InitializeDLLs( HMODULE16 hModule, SEGPTR cmdline ) DECLSPEC_HIDDEN; extern void NE_DllProcessAttach( HMODULE16 hModule ) DECLSPEC_HIDDEN; extern void NE_CallUserSignalProc( HMODULE16 hModule, UINT16 code, WORD arg1, WORD arg2, WORD arg3 ) DECLSPEC_HIDDEN; /* selector.c */ extern WORD SELECTOR_AllocBlock( const void *base, DWORD size, unsigned char flags ) DECLSPEC_HIDDEN; extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size ) DECLSPEC_HIDDEN; extern void SELECTOR_FreeBlock( WORD sel ) DECLSPEC_HIDDEN; #define IS_SELECTOR_32BIT(sel) \ (wine_ldt_is_system(sel) || (wine_ldt_copy.flags[LOWORD(sel) >> 3] & WINE_LDT_FLAGS_32BIT)) /* relay16.c */ extern int relay_call_from_16( void *entry_point, unsigned char *args16, CONTEXT *context ) DECLSPEC_HIDDEN; extern void RELAY16_InitDebugLists(void) DECLSPEC_HIDDEN; /* snoop16.c */ extern void SNOOP16_RegisterDLL(HMODULE16,LPCSTR) DECLSPEC_HIDDEN; extern FARPROC16 SNOOP16_GetProcAddress16(HMODULE16,DWORD,FARPROC16) DECLSPEC_HIDDEN; extern BOOL SNOOP16_ShowDebugmsgSnoop(const char *dll,int ord,const char *fname) DECLSPEC_HIDDEN; /* syslevel.c */ extern VOID SYSLEVEL_CheckNotLevel( INT level ) DECLSPEC_HIDDEN; /* task.c */ extern void TASK_CreateMainTask(void) DECLSPEC_HIDDEN; extern HTASK16 TASK_SpawnTask( NE_MODULE *pModule, WORD cmdShow, LPCSTR cmdline, BYTE len, HANDLE *hThread, LPCSTR curdir ) DECLSPEC_HIDDEN; extern void TASK_ExitTask(void) DECLSPEC_HIDDEN; extern HTASK16 TASK_GetTaskFromThread( DWORD thread ) DECLSPEC_HIDDEN; extern TDB *TASK_GetCurrent(void) DECLSPEC_HIDDEN; extern void TASK_InstallTHHook( THHOOK *pNewThook ) DECLSPEC_HIDDEN; extern BOOL WOWTHUNK_Init(void) DECLSPEC_HIDDEN; extern WORD DOSMEM_0000H DECLSPEC_HIDDEN; extern WORD DOSMEM_BiosDataSeg DECLSPEC_HIDDEN; extern WORD DOSMEM_BiosSysSeg DECLSPEC_HIDDEN; extern DWORD CallTo16_DataSelector DECLSPEC_HIDDEN; extern DWORD CallTo16_TebSelector DECLSPEC_HIDDEN; extern SEGPTR CALL32_CBClient_RetAddr DECLSPEC_HIDDEN; extern SEGPTR CALL32_CBClientEx_RetAddr DECLSPEC_HIDDEN; struct tagSYSLEVEL; BOOL WINAPI TebTlsSetValue(TEB *teb, DWORD index, LPVOID value); LPVOID WINAPI TebTlsGetValue(TEB *teb, DWORD index); extern DWORD kernel_thread_data_tls; struct kernel_thread_data { WORD stack_sel; /* 16-bit stack selector */ WORD htask16; /* Win16 task handle */ DWORD sys_count[4]; /* syslevel mutex entry counters */ struct tagSYSLEVEL *sys_mutex[4]; /* syslevel mutex pointers */ HANDLE idle_event; /* input idle event */ int curdir_len; /* current dir buffer length */ char *true_curdir; /* true current dir */ char *curdir_buf; /* current dir buffer */ HANDLE yield_event; /* yield event */ HANDLE yield_wait_event;/* yield event */ void *pad[30]; /* change this if you add fields! */ }; __declspec(dllexport) struct kernel_thread_data *tls_get_kernel_thread_data(); static inline struct kernel_thread_data *kernel_get_thread_data(void) { return tls_get_kernel_thread_data();//(struct kernel_thread_data *)NtCurrentTeb()->SystemReserved1; } /* Push a DWORD on the 32-bit stack */ static inline void stack32_push( CONTEXT *context, DWORD val ) { context->Esp -= sizeof(DWORD); *(DWORD *)context->Esp = val; } /* Pop a DWORD from the 32-bit stack */ static inline DWORD stack32_pop( CONTEXT *context ) { DWORD ret = *(DWORD *)context->Esp; context->Esp += sizeof(DWORD); return ret; } #ifndef _MSC_VER #define DEFINE_REGS_ENTRYPOINT(name) \ __ASM_STDCALL_FUNC( name, 0, \ "pushl %ebp\n\t" \ __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") \ __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") \ "movl %esp,%ebp\n\t" \ __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") \ "leal -(0x2cc+4)(%esp),%esp\n\t" /* sizeof(CONTEXT) + space for %eax */ \ "movl %eax,-4(%ebp)\n\t" \ "pushl %esp\n\t" /* context */ \ "call " __ASM_NAME("RtlCaptureContext") __ASM_STDCALL(4) "\n\t" \ "movl -4(%ebp),%eax\n\t" \ "movl %eax,0xb0(%esp)\n\t" /* context->Eax */ \ "pushl %esp\n\t" /* context */ \ "call " __ASM_NAME("__regs_") #name __ASM_STDCALL(4) "\n\t" \ "pushl %esp\n\t" /* context */ \ "pushl $-2\n\t" /* GetCurrentThread() */ \ "call " __ASM_NAME("NtSetContextThread") __ASM_STDCALL(8) "\n\t" \ "ret" ) /* fake ret to make copy protections happy */ #else #undef DEFINE_REGS_ENTRYPOINT #define DEFINE_REGS_ENTRYPOINT(name) void __stdcall name(){ERR("notimpl:DEFINE_REGS_ENTRYPOINT(" #name ")\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");} #endif #define __ms_va_list va_list #define __ms_va_start va_start #define __ms_va_end va_end //?? #define PEXCEPTION_HANDLER PEXCEPTION_ROUTINE //ntdef.h typedef enum _EVENT_TYPE { NotificationEvent, SynchronizationEvent } EVENT_TYPE; #define CP_UNIXCP CP_ACP //winternl.h #ifdef _MSC_VER typedef struct _FILE_INTERNAL_INFORMATION { LARGE_INTEGER IndexNumber; } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; //ntifs.h typedef enum _FILE_INFORMATION_CLASS { FileDirectoryInformation = 1, FileFullDirectoryInformation, FileBothDirectoryInformation, FileBasicInformation, FileStandardInformation, FileInternalInformation, FileEaInformation, FileAccessInformation, FileNameInformation, FileRenameInformation, FileLinkInformation, FileNamesInformation, FileDispositionInformation, FilePositionInformation, FileFullEaInformation, FileModeInformation, FileAlignmentInformation, FileAllInformation, FileAllocationInformation, FileEndOfFileInformation, FileAlternateNameInformation, FileStreamInformation, FilePipeInformation, FilePipeLocalInformation, FilePipeRemoteInformation, FileMailslotQueryInformation, FileMailslotSetInformation, FileCompressionInformation, FileObjectIdInformation, FileCompletionInformation, FileMoveClusterInformation, FileQuotaInformation, FileReparsePointInformation, FileNetworkOpenInformation, FileAttributeTagInformation, FileTrackingInformation, FileIdBothDirectoryInformation, FileIdFullDirectoryInformation, FileValidDataLengthInformation, FileShortNameInformation, FileIoCompletionNotificationInformation, FileIoStatusBlockRangeInformation, FileIoPriorityHintInformation, FileSfioReserveInformation, FileSfioVolumeInformation, FileHardLinkInformation, FileProcessIdsUsingFileInformation, FileNormalizedNameInformation, FileNetworkPhysicalNameInformation, FileIdGlobalTxDirectoryInformation, FileIsRemoteDeviceInformation, FileAttributeCacheInformation, FileNumaNodeInformation, FileStandardLinkInformation, FileRemoteProtocolInformation, FileReplaceCompletionInformation, FileMaximumInformation } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; #endif /*typedef NTSTATUS(WINAPI *PNtAllocateVirtualMemory)(HANDLE ProcessHandle, PVOID *BaseAddress, ULONG_PTR ZeroBits, PSIZE_T RegionSize, ULONG AllocationType, ULONG Protect); static inline NTSTATUS NtAllocateVirtualMemory(HANDLE ProcessHandle, PVOID *BaseAddress, ULONG_PTR ZeroBits, PSIZE_T RegionSize, ULONG AllocationType, ULONG Protect) { static PNtAllocateVirtualMemory NtAllocateVirtualMemory = 0; if (!NtAllocateVirtualMemory) NtAllocateVirtualMemory = (PNtAllocateVirtualMemory)GetProcAddress(GetModuleHandle("NTDLL.DLL"), "NtAllocateVirtualMemory"); return NtAllocateVirtualMemory(ProcessHandle, BaseAddress, ZeroBits, RegionSize, AllocationType, Protect); }*/ //PNtAllocateVirtualMemory NtAllocateVirtualMemory = (PNtAllocateVirtualMemory)GetProcAddress(GetModuleHandle("NTDLL.DLL"), "NtAllocateVirtualMemory"); NTSYSAPI NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE, PVOID*, ULONG, SIZE_T*, ULONG, ULONG); NTSTATUS NTAPI NtRaiseException(IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT Context, IN BOOLEAN FirstChance); NTSYSAPI NTSTATUS WINAPI NtSetEvent(HANDLE, PULONG); #ifdef _MSC_VER NTSYSAPI HANDLE WINAPI RtlCreateHeap(ULONG, PVOID, SIZE_T, SIZE_T, PVOID, PVOID); NTSYSAPI NTSTATUS WINAPI NtQueryInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID, LONG, FILE_INFORMATION_CLASS); #endif NTSYSAPI NTSTATUS WINAPI NtCreateEvent(PHANDLE, ACCESS_MASK, const OBJECT_ATTRIBUTES *, EVENT_TYPE, BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtResetEvent(HANDLE, PULONG); NTSYSAPI NTSTATUS WINAPI NtOpenKey(PHANDLE, ACCESS_MASK, const OBJECT_ATTRIBUTES *); NTSYSAPI NTSTATUS WINAPI NtQueryValueKey(HANDLE, const UNICODE_STRING *, KEY_VALUE_INFORMATION_CLASS, void *, DWORD, DWORD *); NTSYSAPI NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE); NTSYSAPI BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING, LPCWSTR); NTSYSAPI void WINAPI RtlAcquirePebLock(void); NTSYSAPI void WINAPI RtlReleasePebLock(void); NTSYSAPI NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI PVOID WINAPI RtlAllocateHeap(HANDLE, ULONG, SIZE_T); NTSYSAPI NTSTATUS WINAPI RtlOpenCurrentUser(ACCESS_MASK, PHANDLE); NTSYSAPI CHAR WINAPI RtlUpperChar(CHAR); NTSYSAPI PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG, PVECTORED_EXCEPTION_HANDLER); NTSYSAPI NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*); NTSYSAPI void WINAPI RtlSecondsSince1970ToTime(DWORD, LARGE_INTEGER *); # define strncasecmp _strnicmp # define strcasecmp _stricmp HANDLE WINAPI ConvertToGlobalHandle(HANDLE); NTSYSAPI void WINAPI DbgBreakPoint(void); NTSYSAPI NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*); //vm typedef SEGPTR(*pm_interrupt_handler)(WORD num, DWORD addr); typedef DWORD(*wine_call_to_16_vm86_t)(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih); typedef void(*wine_call_to_16_regs_vm86_t)(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih ); extern wine_call_to_16_vm86_t func_wine_call_to_16_vm86; extern wine_call_to_16_regs_vm86_t func_wine_call_to_16_regs_vm86; char *get_search_path(void); void switch_directory(struct kernel_thread_data *thread_data); BOOL16 WINAPI IsOldWindowsTask(HINSTANCE16); /* wType values */ #define GT_UNKNOWN 0 #define GT_DGROUP 1 #define GT_DATA 2 #define GT_CODE 3 #define GT_TASK 4 #define GT_RESOURCE 5 #define GT_MODULE 6 #define GT_FREE 7 #define GT_INTERNAL 8 #define GT_SENTINEL 9 #define GT_BURGERMASTER 10 void GLOBAL_SetSeg(HGLOBAL16 hg, WORD wSeg, WORD type); WORD GLOBAL_GetSegNum(HGLOBAL16 hg); __declspec(dllexport) LPCSTR RedirectDriveRoot(LPCSTR path, LPSTR to, size_t max_len, BOOL silence); __declspec(dllexport) LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len); #endif /* __WINE_KERNEL16_PRIVATE_H */ ================================================ FILE: krnl386/krnl386.def ================================================ ; File generated automatically from krnl386.exe16.spec; do not edit! LIBRARY krnl386.exe16 EXPORTS _wine_spec_dos_header @1 DATA; =.L__wine_spec_dos_header @1 DATA ;PRIVATE ;VxDCall0=VxDCall @2 ;VxDCall1=VxDCall @3 ;VxDCall2=VxDCall @4 ;VxDCall3=VxDCall @5 ;VxDCall4=VxDCall @6 ;VxDCall5=VxDCall @7 ;VxDCall6=VxDCall @8 ;VxDCall7=VxDCall @9 ;VxDCall8=VxDCall @10 k32CharToOemA @11 k32CharToOemBuffA @12 k32OemToCharA @13 k32OemToCharBuffA @14 k32LoadStringA @15 k32wsprintfA @16 k32wvsprintfA @17 ;CommonUnimpStub @18 GetProcessDword @19 DosFileHandleToWin32Handle @20 Win32HandleToDosFileHandle @21 DeleteDosFileHandle @22 GlobalAlloc16 @23 GlobalLock16 @24 GlobalUnlock16 @25 GlobalFix16 @26 GlobalUnfix16 @27 GlobalWire16 @28 GlobalUnWire16 @29 GlobalFree16 @30 GlobalSize16 @31 HouseCleanLogicallyDeadHandles @32 GetWin16DOSEnv @33 LoadLibrary16 @34 FreeLibrary16 @35 GetProcAddress16=WIN32_GetProcAddress16 @36 ;AllocMappedBuffer @37 ;FreeMappedBuffer @38 ;OT_32ThkLSF @39 ThunkInitLSF @40 ;LogApiThkLSF @41 ThunkInitLS @42 ;LogApiThkSL @43 ;Common32ThkLS @44 ThunkInitSL @45 ;LogCBThkSL @46 ReleaseThunkLock @47 RestoreThunkLock @48 ;W32S_BackTo32 @49 GetThunkBuff @50 GetThunkStuff @51 K32WOWCallback16 @52 K32WOWCallback16Ex @53 K32WOWGetVDMPointer @54 K32WOWHandle32 @55 K32WOWHandle16 @56 K32WOWGlobalAlloc16 @57 K32WOWGlobalLock16 @58 K32WOWGlobalUnlock16 @59 K32WOWGlobalFree16 @60 K32WOWGlobalAllocLock16 @61 K32WOWGlobalUnlockFree16 @62 K32WOWGlobalLockSize16 @63 K32WOWYield16 @64 K32WOWDirectedYield16 @65 K32WOWGetVDMPointerFix @66 K32WOWGetVDMPointerUnfix @67 K32WOWGetDescriptor @68 _KERNEL32_86 @69 SSOnBigStack @70 SSCall @71 FT_PrologPrime @72 QT_ThunkPrime @73 PK16FNF @74 GetPK16SysVar @75 GetpWin16Lock @76 _CheckNotSysLevel @77 _ConfirmSysLevel @78 _ConfirmWin16Lock @79 _EnterSysLevel @80 _LeaveSysLevel @81 _KERNEL32_99 @82 _KERNEL32_100 @83 AllocSLCallback @84 ;FT_Exit0 @85 ;FT_Exit12 @86 ;FT_Exit16 @87 ;FT_Exit20 @88 ;FT_Exit24 @89 ;FT_Exit28 @90 ;FT_Exit32 @91 ;FT_Exit36 @92 ;FT_Exit40 @93 ;FT_Exit44 @94 ;FT_Exit48 @95 ;FT_Exit4 @96 ;FT_Exit52 @97 ;FT_Exit56 @98 ;FT_Exit8 @99 FT_Prolog @100 ;FT_Thunk @101 FreeSLCallback @102 Get16DLLAddress @103 ;K32Thk1632Epilog @104 ;K32Thk1632Prolog @105 ;MapHInstLS @106 ;MapHInstLS_PN @107 ;MapHInstSL @108 ;MapHInstSL_PN @109 MapHModuleLS @110 MapHModuleSL @111 MapLS @112 MapSL @113 MapSLFix @114 PrivateFreeLibrary @115 PrivateLoadLibrary @116 QT_Thunk @117 ;SMapLS @118 ;SMapLS_IP_EBP_12 @119 ;SMapLS_IP_EBP_16 @120 ;SMapLS_IP_EBP_20 @121 ;SMapLS_IP_EBP_24 @122 ;SMapLS_IP_EBP_28 @123 ;SMapLS_IP_EBP_32 @124 ;SMapLS_IP_EBP_36 @125 ;SMapLS_IP_EBP_40 @126 ;SMapLS_IP_EBP_8 @127 ;SUnMapLS @128 ;SUnMapLS_IP_EBP_12 @129 ;SUnMapLS_IP_EBP_16 @130 ;SUnMapLS_IP_EBP_20 @131 ;SUnMapLS_IP_EBP_24 @132 ;SUnMapLS_IP_EBP_28 @133 ;SUnMapLS_IP_EBP_32 @134 ;SUnMapLS_IP_EBP_36 @135 ;SUnMapLS_IP_EBP_40 @136 ;SUnMapLS_IP_EBP_8 @137 ThunkConnect32 @138 UTRegister @139 UTUnRegister @140 UnMapLS @141 ;UnMapSLFixArray @142 _lclose16 @143 AllocSelectorArray16 @144 FarGetOwner16 @145 FarSetOwner16 @146 FindResource16 @147 FreeResource16 @148 FreeSelector16 @149 GetCurrentPDB16 @150 GetCurrentTask @151 GetDOSEnvironment16 @152 GetExePtr @153 GetExeVersion16 GetExpWinVer16 @154 GetModuleHandle16 @155 GlobalReAlloc16 @156 InitTask16 @157 IsBadReadPtr16 @158 IsTask16 @159 LoadModule16 @160 LoadResource16 @161 LocalAlloc16 @162 LocalInit16 @163 LocalLock16 @164 LocalUnlock16 @165 LocalReAlloc16 @166 LocalFree16 @167 LocalSize16 @168 LocalCompact16 @169 LocalCountFree16 @170 LocalHeapSize16 @171 LockResource16 @172 SetSelectorBase @173 SetSelectorLimit16 @174 SizeofResource16 @175 WinExec16 @176 __wine_call_int_handler @177 __wine_load_dos_exe @178 __wine_vxd_open @179 PRIVATE __wine_vxd_get_proc @180 PRIVATE IsOldWindowsTask @181 GetProcessFlags @182 krnl386_get_config_string krnl386_get_config_int krnl386_get_compat_mode krnl386_set_compat_path GetModuleFileName16 GetModuleName16 _EnterWin16Lock _LeaveWin16Lock IsRealModeTask AllocDStoCSAlias16 RegCloseKey16 RegCreateKey16 RegDeleteKey16 RegDeleteValue16 RegEnumKey16 RegEnumValue16 RegFlushKey16 RegOpenKey16 RegQueryValue16 RegQueryValueEx16 RegSetValue16 RegSetValueEx16 K32WOWHandle16Destroy K32WOWHandle16DestroyHint DOSVM_inport DOSVM_outport DOSVM_setportcb DOSVM_SetBuiltinVector DOSVM_GetPMHandler16 DOSVM_SetPMHandler16 krnl386_get_search_path krnl386_search_executable_file get_aflags DibMapGlobalMemory DibUnmapGlobalMemory GlobalMapInternal make_thunk_32 free_thunk_32 get_resource_table WritePrivateProfileStruct16 GetPrivateProfileStruct16 StackTraceFirst16 StackTraceCSIPFirst16 StackTraceNext16 TaskSetCSIP16 TaskGetCSIP16 TaskSwitch16 GLOBAL_GetLink GLOBAL_SetLink GLOBAL_FindLink GLOBAL_SetSeg vm_inject set_vm_inject_cb get_idle_event get_windows_build GetSelectorLimit16 getAL getAH getAX getEAX getBL getBH getBX getEBX getCL getCH getCX getECX getDL getDH getDX getEDX getSP getESP getBP getEBP getSI getESI getDI getEDI setAL setAH setAX setEAX setBL setBH setBX setEBX setCL setCH setCX setECX setDL setDH setDX setEDX setSP setESP setBP setEBP setSI setESI setDI setEDI getDS getES getCS getSS getFS getGS setDS setES setCS setSS setFS setGS getIP getEIP setIP setEIP getCF getPF getAF getZF getSF getIF getDF getOF setCF setPF setAF setZF setSF setIF setDF setOF VDDInstallIOHook VDDDeInstallIOHook MGetVdmPointer ================================================ FILE: krnl386/krnl386.exe16.spec ================================================ # 1-207 are the basic functions, those are (with minor variations) # present in win31, win95 and nt351 1 stub FatalExit 2 pascal -ret16 ExitKernel() ExitKernel16 3 pascal GetVersion() GetVersion16 4 pascal -ret16 LocalInit(word word word) LocalInit16 5 pascal -ret16 LocalAlloc(word word) LocalAlloc16 6 pascal -ret16 LocalReAlloc(word word word) LocalReAlloc16 7 pascal -ret16 LocalFree(word) LocalFree16 8 pascal LocalLock(word) LocalLock16 9 pascal -ret16 LocalUnlock(word) LocalUnlock16 10 pascal -ret16 LocalSize(word) LocalSize16 11 pascal -ret16 LocalHandle(word) LocalHandle16 12 pascal -ret16 LocalFlags(word) LocalFlags16 13 pascal -ret16 LocalCompact(word) LocalCompact16 14 pascal LocalNotify(long) LocalNotify16 15 pascal -register GlobalAlloc(word long) WIN16_GlobalAlloc16 16 pascal -ret16 GlobalReAlloc(word long word) WIN16_GlobalReAlloc16 17 pascal GlobalFree(word) WIN16_GlobalFree16 18 pascal GlobalLock(word) WIN16_GlobalLock16 19 pascal GlobalUnlock(word) WIN16_GlobalUnlock16 20 pascal GlobalSize(word) WIN16_GlobalSize16 21 pascal GlobalHandle(word) GlobalHandle16 22 pascal GlobalFlags(word) WIN16_GlobalFlags16 23 pascal -ret16 LockSegment(word) LockSegment16 24 pascal -ret16 UnlockSegment(word) UnlockSegment16 25 pascal GlobalCompact(long) GlobalCompact16 26 pascal -ret16 GlobalFreeAll(word) GlobalFreeAll16 27 pascal -ret16 GetModuleName(word ptr word) GetModuleName16 # W1.1: SETSWAPHOOK, W2.0: nothing ! 28 pascal GlobalMasterHandle() GlobalMasterHandle16 29 pascal -ret16 Yield() Yield16 30 pascal -ret16 WaitEvent(word) WaitEvent16 31 pascal -ret16 PostEvent(word) PostEvent16 32 pascal -ret16 SetPriority(word s_word) SetPriority16 33 pascal -ret16 LockCurrentTask(word) LockCurrentTask16 34 pascal -ret16 SetTaskQueue(word word) SetTaskQueue16 35 pascal -ret16 GetTaskQueue(word) GetTaskQueue16 36 pascal GetCurrentTask() WIN16_GetCurrentTask 37 pascal GetCurrentPDB() GetCurrentPDB16 38 pascal SetTaskSignalProc(word segptr) SetTaskSignalProc 39 stub SetTaskSwitchProc # W1.1, W2.0 40 stub SetTaskInterchange # W1.1, W2.0 41 pascal -ret16 EnableDos() KERNEL_nop 42 pascal -ret16 DisableDos() KERNEL_nop 43 stub IsScreenGrab # W1.1, W2.0 44 stub BuildPDB # W1.1, W2.0 45 pascal -ret16 LoadModule(str ptr) LoadModule16 46 pascal -ret16 FreeModule(word) FreeModule16 47 pascal GetModuleHandle(segstr) WIN16_GetModuleHandle 48 pascal -ret16 GetModuleUsage(word) GetModuleUsage16 49 pascal -ret16 GetModuleFileName(word ptr s_word) GetModuleFileName16 50 pascal GetProcAddress(word str) WIN16_GetProcAddress16 51 pascal MakeProcInstance(segptr word) MakeProcInstance16 52 pascal -ret16 FreeProcInstance(segptr) FreeProcInstance16 53 stub CallProcInstance 54 pascal -ret16 GetInstanceData(word word word) GetInstanceData16 55 pascal -register Catch(segptr) Catch16 56 pascal -register Throw(ptr word) Throw16 57 pascal -ret16 GetProfileInt(str str s_word) GetProfileInt16 58 pascal -ret16 GetProfileString(str str str ptr word) GetProfileString16 59 pascal -ret16 WriteProfileString(str str str) WriteProfileString16 60 pascal -ret16 FindResource(word str str) FindResource16 61 pascal -ret16 LoadResource(word word) LoadResource16 62 pascal LockResource(word) WIN16_LockResource16 63 pascal -ret16 FreeResource(word) FreeResource16 64 pascal -ret16 AccessResource(word word) AccessResource16 65 pascal SizeofResource(word word) SizeofResource16 66 pascal -ret16 AllocResource(word word long) AllocResource16 67 pascal SetResourceHandler(word str segptr) SetResourceHandler16 68 pascal -ret16 InitAtomTable(word) InitAtomTable16 69 pascal -ret16 FindAtom(str) FindAtom16 70 pascal -ret16 AddAtom(str) AddAtom16 71 pascal -ret16 DeleteAtom(word) DeleteAtom16 72 pascal -ret16 GetAtomName(word ptr word) GetAtomName16 73 pascal -ret16 GetAtomHandle(word) GetAtomHandle16 74 pascal -ret16 OpenFile(str long word) WIN16_OpenFile16 75 stub OpenPathName 76 stub DeletePathName # Reserved*: old Win 2.x functions now moved to USER (Win 3.0+) 77 pascal Reserved1(segptr) KERNEL_AnsiNext16 78 pascal Reserved2(segptr segptr) KERNEL_AnsiPrev16 79 pascal Reserved3(segstr) KERNEL_AnsiUpper16 80 pascal Reserved4(segstr) KERNEL_AnsiLower16 81 pascal -ret16 _lclose(word) _lclose16 82 pascal -ret16 _lread(word segptr word) WIN16_lread 83 pascal -ret16 _lcreat(str word) _lcreat16 84 pascal _llseek(word long word) _llseek16 85 pascal -ret16 _lopen(str word) _lopen16 86 pascal -ret16 _lwrite(word ptr word) _lwrite16 87 pascal -ret16 Reserved5(str str) KERNEL_lstrcmp16 88 pascal lstrcpy(segptr str) lstrcpy16 89 pascal lstrcat(segstr str) lstrcat16 90 pascal -ret16 lstrlen(str) lstrlen16 91 pascal -register InitTask() InitTask16 92 pascal GetTempDrive(word) GetTempDrive 93 pascal GetCodeHandle(segptr) GetCodeHandle16 94 pascal -ret16 DefineHandleTable(word) DefineHandleTable16 95 pascal -ret16 -stkprolog LoadLibrary(str) LoadLibrary16 96 pascal FreeLibrary(word) WIN16_FreeLibrary16 97 pascal -ret16 GetTempFileName(word str word ptr) GetTempFileName16 98 pascal -ret16 GetLastDiskChange() KERNEL_nop 99 stub GetLPErrMode 100 pascal -ret16 ValidateCodeSegments() KERNEL_nop 101 stub NoHookDosCall 102 pascal -register DOS3Call() DOS3Call 103 pascal -register NetBIOSCall() NetBIOSCall16 104 pascal -ret16 GetCodeInfo(segptr ptr) GetCodeInfo16 105 pascal -ret16 GetExeVersion() GetExeVersion16 106 pascal SetSwapAreaSize(word) SetSwapAreaSize16 107 pascal -ret16 SetErrorMode(word) SetErrorMode16 108 pascal -ret16 SwitchStackTo(word word word) SwitchStackTo16 # STO in W2.0 109 pascal -register SwitchStackBack(word word word) SwitchStackBack16 # SBACK in W2.0 110 pascal PatchCodeHandle(word) PatchCodeHandle16 111 pascal GlobalWire(word) GlobalWire16 112 pascal -ret16 GlobalUnWire(word) GlobalUnWire16 113 equate __AHSHIFT 3 114 equate __AHINCR 8 115 pascal -register OutputDebugString(str) OutputDebugString16 116 stub InitLib 117 pascal -ret16 OldYield() OldYield16 118 pascal -ret16 GetTaskQueueDS() GetTaskQueueDS16 119 pascal -ret16 GetTaskQueueES() GetTaskQueueES16 120 stub UndefDynLink 121 pascal -ret16 LocalShrink(word word) LocalShrink16 122 pascal -ret16 IsTaskLocked() IsTaskLocked16 123 pascal -ret16 KbdRst() KERNEL_nop 124 pascal -ret16 EnableKernel() KERNEL_nop 125 pascal -ret16 DisableKernel() KERNEL_nop 126 stub MemoryFreed 127 pascal -ret16 GetPrivateProfileInt(str str s_word str) GetPrivateProfileInt16 128 pascal -ret16 GetPrivateProfileString(str str str ptr word str) GetPrivateProfileString16 129 pascal -ret16 WritePrivateProfileString(str str str str) WritePrivateProfileString16 130 pascal FileCDR(ptr) FileCDR16 131 pascal GetDOSEnvironment() GetDOSEnvironment16 132 pascal GetWinFlags() GetWinFlags16 133 pascal -ret16 GetExePtr(word) WIN16_GetExePtr 134 pascal -ret16 GetWindowsDirectory(ptr word) GetWindowsDirectory16 135 pascal -ret16 GetSystemDirectory(ptr word) GetSystemDirectory16 136 pascal -ret16 GetDriveType(word) GetDriveType16 137 pascal -ret16 FatalAppExit(word str) FatalAppExit16 138 pascal GetHeapSpaces(word) GetHeapSpaces16 139 stub DoSignal 140 pascal -ret16 SetSigHandler(segptr ptr ptr word word) SetSigHandler16 141 stub InitTask1 142 pascal -ret16 GetProfileSectionNames(ptr word) GetProfileSectionNames16 143 pascal -ret16 GetPrivateProfileSectionNames(ptr word str) GetPrivateProfileSectionNames16 144 pascal -ret16 CreateDirectory(ptr ptr) CreateDirectory16 145 pascal -ret16 RemoveDirectory(ptr) RemoveDirectory16 146 pascal -ret16 DeleteFile(ptr) DeleteFile16 147 pascal -ret16 SetLastError(long) SetLastError16 148 pascal GetLastError() GetLastError16 149 pascal -ret16 GetVersionEx(ptr) GetVersionEx16 150 pascal -ret16 DirectedYield(word) DirectedYield16 151 stub WinOldApCall 152 pascal -ret16 GetNumTasks() GetNumTasks16 154 pascal -ret16 GlobalNotify(segptr) GlobalNotify16 155 pascal -ret16 GetTaskDS() GetTaskDS16 156 pascal LimitEMSPages(long) LimitEMSPages16 157 pascal GetCurPID(long) GetCurPID16 158 pascal -ret16 IsWinOldApTask(word) IsWinOldApTask16 159 pascal GlobalHandleNoRIP(word) GlobalHandleNoRIP16 160 stub EMSCopy 161 pascal -ret16 LocalCountFree() LocalCountFree16 162 pascal -ret16 LocalHeapSize() LocalHeapSize16 163 pascal -ret16 GlobalLRUOldest(word) GlobalLRUOldest16 164 pascal -ret16 GlobalLRUNewest(word) GlobalLRUNewest16 165 pascal -ret16 A20Proc(word) A20Proc16 166 pascal -ret16 WinExec(str word) WinExec16 167 pascal -ret16 GetExpWinVer(word) GetExpWinVer16 168 pascal -ret16 DirectResAlloc(word word word) DirectResAlloc16 169 pascal GetFreeSpace(word) GetFreeSpace16 170 pascal -ret16 AllocCStoDSAlias(word) AllocCStoDSAlias16 171 pascal -ret16 AllocDStoCSAlias(word) AllocDStoCSAlias16 172 pascal -ret16 AllocAlias(word) AllocCStoDSAlias16 173 equate __ROMBIOS 0 174 equate __A000H 0 175 pascal -ret16 AllocSelector(word) AllocSelector16 176 pascal -ret16 FreeSelector(word) WIN16_FreeSelector16 177 pascal -ret16 PrestoChangoSelector(word word) PrestoChangoSelector16 178 equate __WINFLAGS 0x413 179 equate __D000H 0 180 pascal LongPtrAdd(long long) LongPtrAdd16 181 equate __B000H 0 182 equate __B800H 0 183 equate __0000H 0 184 pascal GlobalDOSAlloc(long) GlobalDOSAlloc16 185 pascal -ret16 GlobalDOSFree(word) GlobalDOSFree16 186 pascal GetSelectorBase(word) GetSelectorBase 187 pascal -ret16 SetSelectorBase(word long) SetSelectorBase 188 pascal GetSelectorLimit(word) GetSelectorLimit16 189 pascal -ret16 SetSelectorLimit(word long) SetSelectorLimit16 190 equate __E000H 0 191 pascal -ret16 GlobalPageLock(word) GlobalPageLock16 192 pascal -ret16 GlobalPageUnlock(word) GlobalPageUnlock16 193 equate __0040H 0 194 equate __F000H 0 195 equate __C000H 0 196 pascal -ret16 SelectorAccessRights(word word word) SelectorAccessRights16 197 pascal -ret16 GlobalFix(word) GlobalFix16 198 pascal -ret16 GlobalUnfix(word) GlobalUnfix16 199 pascal -ret16 SetHandleCount(word) SetHandleCount16 200 pascal -ret16 ValidateFreeSpaces() KERNEL_nop 201 stub ReplaceInst 202 stub RegisterPtrace 203 pascal -register DebugBreak() DebugBreak16 204 stub SwapRecording 205 stub CVWBreak 206 pascal -ret16 AllocSelectorArray(word) AllocSelectorArray16 207 pascal -ret16 IsDBCSLeadByte(word) IsDBCSLeadByte # 208-237 are Win95 extensions; a few of those are also present in WinNT 208 pascal K208(word long long long) Local32Init16 209 pascal K209(long long word long) Local32Alloc16 210 pascal K210(long long word long long) Local32ReAlloc16 211 pascal K211(long long word) Local32Free16 213 pascal K213(long long word word) Local32Translate16 214 pascal K214(long long word) Local32Size16 215 pascal K215(long word) Local32ValidHandle16 # Win95 only -- CONFLICT! #215 stub WOWShouldWeSayWin95 # WinNT only -- CONFLICT! 216 pascal RegEnumKey(long long ptr long) RegEnumKey16 # Both 95/NT 217 pascal RegOpenKey(long str ptr) RegOpenKey16 # Both 95/NT 218 pascal RegCreateKey(long str ptr) RegCreateKey16 219 pascal RegDeleteKey(long str) RegDeleteKey16 220 pascal RegCloseKey(long) RegCloseKey16 # Both 95/NT 221 pascal RegSetValue(long str long ptr long) RegSetValue16 222 pascal RegDeleteValue(long str) RegDeleteValue16 223 pascal RegEnumValue(long long ptr ptr ptr ptr ptr ptr) RegEnumValue16 # Both 95/NT 224 pascal RegQueryValue(long str ptr ptr) RegQueryValue16 225 pascal RegQueryValueEx(long str ptr ptr ptr ptr) RegQueryValueEx16 226 pascal RegSetValueEx(long str long long ptr long) RegSetValueEx16 227 pascal RegFlushKey(long) RegFlushKey16 228 pascal -ret16 K228(word) GetExePtr 229 pascal -ret16 K229(long) Local32GetSegment16 230 pascal GlobalSmartPageLock(word) GlobalPageLock16 #? 231 pascal GlobalSmartPageUnlock(word) GlobalPageUnlock16 #? 232 stub RegLoadKey 233 stub RegUnloadKey 234 stub RegSaveKey 235 stub InvalidateNlsCache 236 stub GetProductName 237 pascal -ret16 K237() KERNEL_nop # 262-274 are WinNT extensions; those are not present in Win95 262 stub WOWWaitForMsgAndEvent 263 stub WOWMsgBox 273 stub K273 274 pascal -ret16 GetShortPathName(str ptr word) GetShortPathName16 # 310-356 are again shared between all versions 310 pascal -ret16 LocalHandleDelta(word) LocalHandleDelta16 311 pascal GetSetKernelDOSProc(ptr) GetSetKernelDOSProc16 314 stub DebugDefineSegment 315 pascal -ret16 WriteOutProfiles() WriteOutProfiles16 316 pascal GetFreeMemInfo() GetFreeMemInfo16 318 stub FatalExitHook 319 stub FlushCachedFileHandle 320 pascal -ret16 IsTask(word) IsTask16 323 pascal -ret16 IsRomModule(word) IsRomModule16 324 pascal -ret16 LogError(word ptr) LogError16 325 pascal -ret16 LogParamError(word ptr ptr) LogParamError16 326 pascal -ret16 IsRomFile(word) IsRomFile16 327 pascal -register K327() HandleParamError 328 varargs -ret16 _DebugOutput(word str) _DebugOutput 329 pascal -ret16 K329(str word) DebugFillBuffer 332 variable THHOOK(0 0 0 0 0 0 0 0) 334 pascal -ret16 IsBadReadPtr(segptr word) IsBadReadPtr16 335 pascal -ret16 IsBadWritePtr(segptr word) IsBadWritePtr16 336 pascal -ret16 IsBadCodePtr(segptr) IsBadCodePtr16 337 pascal -ret16 IsBadStringPtr(segptr word) IsBadStringPtr16 338 pascal -ret16 HasGPHandler(segptr) HasGPHandler16 339 pascal -ret16 DiagQuery() DiagQuery16 340 pascal -ret16 DiagOutput(str) DiagOutput16 341 pascal ToolHelpHook(ptr) ToolHelpHook16 342 variable __GP(0 0) 343 stub RegisterWinOldApHook 344 stub GetWinOldApHooks 345 pascal -ret16 IsSharedSelector(word) IsSharedSelector16 346 pascal -ret16 IsBadHugeReadPtr(segptr long) IsBadHugeReadPtr16 347 pascal -ret16 IsBadHugeWritePtr(segptr long) IsBadHugeWritePtr16 348 pascal -ret16 hmemcpy(ptr ptr long) hmemcpy16 349 pascal _hread(word segptr long) WIN16_hread 350 pascal _hwrite(word ptr long) _hwrite16 351 pascal -ret16 BUNNY_351() KERNEL_nop 352 pascal lstrcatn(segstr str word) lstrcatn16 353 pascal lstrcpyn(segptr str word) lstrcpyn16 354 pascal GetAppCompatFlags(word) GetAppCompatFlags16 355 pascal -ret16 GetWinDebugInfo(ptr word) GetWinDebugInfo16 356 pascal -ret16 SetWinDebugInfo(ptr) SetWinDebugInfo16 # 357-365 are present in Win95 only # Note that from here on most of the Win95-only functions are exported # ordinal-only; the names given here are mostly guesses :-) 357 pascal MapSL(segptr) MapSL 358 pascal MapLS(long) MapLS 359 pascal UnMapLS(segptr) UnMapLS 360 pascal -ret16 OpenFileEx(str ptr word) OpenFile16 361 pascal -ret16 PIGLET_361() KERNEL_nop 362 stub ThunkTerminateProcess 365 pascal -register GlobalChangeLockCount(word word) GlobalChangeLockCount16 # 403-404 are common to all versions 403 pascal -ret16 FarSetOwner(word word) FarSetOwner16 # aka K403 404 pascal -ret16 FarGetOwner(word) FarGetOwner16 # aka K404 # 406-494 are present only in Win95 406 pascal -ret16 WritePrivateProfileStruct(str str ptr word str) WritePrivateProfileStruct16 407 pascal -ret16 GetPrivateProfileStruct(str str ptr word str) GetPrivateProfileStruct16 408 stub KERNEL_408 409 stub KERNEL_409 410 stub CreateProcessFromWinExec 411 pascal GetCurrentDirectory(long ptr) GetCurrentDirectory16 412 pascal -ret16 SetCurrentDirectory(ptr) SetCurrentDirectory16 413 pascal -ret16 FindFirstFile(ptr ptr) FindFirstFile16 414 pascal -ret16 FindNextFile(word ptr) FindNextFile16 415 pascal -ret16 FindClose(word) FindClose16 416 pascal -ret16 WritePrivateProfileSection(str str str) WritePrivateProfileSection16 417 pascal -ret16 WriteProfileSection(str str) WriteProfileSection16 418 pascal -ret16 GetPrivateProfileSection(str ptr word str) GetPrivateProfileSection16 419 pascal -ret16 GetProfileSection(str ptr word) GetProfileSection16 420 pascal GetFileAttributes(ptr) GetFileAttributes16 421 pascal -ret16 SetFileAttributes(ptr long) SetFileAttributes16 422 pascal -ret16 GetDiskFreeSpace(ptr ptr ptr ptr ptr) GetDiskFreeSpace16 423 pascal -ret16 LogApiThk(str) LogApiThk 431 pascal -ret16 IsPeFormat(str word) IsPeFormat16 432 stub FileTimeToLocalFileTime 434 pascal -ret16 UnicodeToAnsi(ptr ptr word) UnicodeToAnsi16 435 stub GetTaskFlags 436 pascal -ret16 _ConfirmSysLevel(ptr) _ConfirmSysLevel 437 pascal -ret16 _CheckNotSysLevel(ptr) _CheckNotSysLevel 438 pascal -ret16 _CreateSysLevel(ptr long) _CreateSysLevel 439 pascal -ret16 _EnterSysLevel(ptr) _EnterSysLevel 440 pascal -ret16 _LeaveSysLevel(ptr) _LeaveSysLevel 441 pascal CreateThread16(ptr long segptr segptr long ptr) CreateThread16 442 pascal VWin32_EventCreate() VWin32_EventCreate 443 pascal VWin32_EventDestroy(long) VWin32_EventDestroy 444 pascal -ret16 Local32Info(ptr word) Local32Info16 445 pascal -ret16 Local32First(ptr word) Local32First16 446 pascal -ret16 Local32Next(ptr) Local32Next16 447 pascal -ret16 WIN32_OldYield() WIN32_OldYield16 448 stub KERNEL_448 449 pascal GetpWin16Lock() GetpWin16Lock16 450 pascal VWin32_EventWait(long) VWin32_EventWait 451 pascal VWin32_EventSet(long) VWin32_EventSet 452 pascal LoadLibrary32(str) LoadLibrary32_16 453 pascal GetProcAddress32(long str) GetProcAddress32_16 454 equate __FLATCS 0 # initialized by BUILTIN_Init() 455 equate __FLATDS 0 # initialized by BUILTIN_Init() 456 pascal DefResourceHandler(word word word) NE_DefResourceHandler 457 pascal CreateW32Event(long long) CreateW32Event 458 pascal SetW32Event(long) SetW32Event 459 pascal ResetW32Event(long) ResetW32Event 460 pascal WaitForSingleObject(long long) WaitForSingleObject16 461 pascal WaitForMultipleObjects(long ptr long long) WaitForMultipleObjects16 462 pascal GetCurrentThreadId() GetCurrentThreadId16 463 pascal SetThreadQueue(long word) SetThreadQueue16 464 pascal GetThreadQueue(long) GetThreadQueue16 465 stub NukeProcess 466 pascal -ret16 ExitProcess(word) ExitProcess16 467 stub WOACreateConsole 468 stub WOASpawnConApp 469 stub WOAGimmeTitle 470 stub WOADestroyConsole 471 pascal GetCurrentProcessId() GetCurrentProcessId16 472 pascal -register MapHInstLS() MapHInstLS16 473 pascal -register MapHInstSL() MapHInstSL16 474 pascal CloseW32Handle(long) CloseW32Handle 475 pascal -ret16 GetTEBSelectorFS() GetTEBSelectorFS16 476 pascal ConvertToGlobalHandle(long) ConvertToGlobalHandle16 477 stub WOAFullScreen 478 stub WOATerminateProcess 479 pascal KERNEL_479(long) VWin32_EventSet # ??? 480 pascal -ret16 _EnterWin16Lock() _EnterWin16Lock 481 pascal -ret16 _LeaveWin16Lock() _LeaveWin16Lock 482 pascal LoadSystemLibrary32(str) LoadLibrary32_16 # FIXME! 483 pascal MapProcessHandle(long) MapProcessHandle 484 pascal SetProcessDword(long s_word long) SetProcessDword 485 pascal GetProcessDword(long s_word) GetProcessDword 486 pascal FreeLibrary32(long) FreeLibrary32_16 487 pascal GetModuleFileName32(long str word) GetModuleFileName32_16 488 pascal GetModuleHandle32(str) GetModuleHandle32_16 489 stub KERNEL_489 # VWin32_BoostWithDecay 490 pascal -ret16 KERNEL_490(word) KERNEL_490 491 pascal RegisterServiceProcess(long long) RegisterServiceProcess16 492 stub WOAAbort 493 pascal -ret16 UTInit(long long long long) UTInit16 494 stub KERNEL_494 # 495 is present only in Win98 495 pascal WaitForMultipleObjectsEx(long ptr long long long) WaitForMultipleObjectsEx16 # 500-544 are WinNT extensions; some are also available in Win95 500 varargs WOW16Call(word word word) WOW16Call 501 stub KDDBGOUT # Both NT/95 (?) 502 stub WOWGETNEXTVDMCOMMAND 503 stub WOWREGISTERSHELLWINDOWHANDLE 504 stub WOWLOADMODULE 505 stub WOWQUERYPERFORMANCECOUNTER 506 stub WOWCURSORICONOP #507 stub WOWCURSORICONOP # conflict with 506 ! 507 stub WOWFAILEDEXEC #508 stub WOWFAILEDEXEC # conflict with 507 ! (something broken here ?) 508 stub WOWCLOSECOMPORT #509 stub WOWCLOSECOMPORT # conflict with 508 ! #509 stub WOWKILLREMOTETASK 511 stub WOWKILLREMOTETASK 512 stub WOWQUERYDEBUG 513 pascal LoadLibraryEx32W(str long long) LoadLibraryEx32W16 # Both NT/95 514 pascal FreeLibrary32W(long) FreeLibrary32W16 # Both NT/95 515 pascal GetProcAddress32W(long str) GetProcAddress32W16 # Both NT/95 516 pascal GetVDMPointer32W(segptr word) GetVDMPointer32W16 # Both NT/95 517 varargs CallProc32W(long long long) CallProc32W16 # Both NT/95 518 varargs _CallProcEx32W(long long long) CallProcEx32W16 # Both NT/95 519 stub EXITKERNELTHUNK # the __MOD_ variables are WORD datareferences, the current values are invented. 520 equate __MOD_KERNEL 4200 521 equate __MOD_DKERNEL 4201 522 equate __MOD_USER 4203 523 equate __MOD_DUSER 4204 524 equate __MOD_GDI 4205 525 equate __MOD_DGDI 4206 526 equate __MOD_KEYBOARD 4207 527 equate __MOD_SOUND 4208 528 equate __MOD_SHELL 4209 529 equate __MOD_WINSOCK 4210 530 equate __MOD_TOOLHELP 4211 531 equate __MOD_MMEDIA 4212 532 equate __MOD_COMMDLG 4213 541 stub WOWSETEXITONLASTAPP 544 stub WOWSETCOMPATHANDLE # 531-568 are Win95-only extensions. # NOTE: Ordinals 531,532,541 clash with the WinNT extensions given above! Argh! #531 stub ConvertClipboardHandleLS #532 stub ConvertClipboardHandleSL 533 stub ConvertDDEHandleLS 534 stub ConvertDDEHandleSL 535 pascal VWin32_BoostThreadGroup(long long) VWin32_BoostThreadGroup 536 pascal VWin32_BoostThreadStatic(long long) VWin32_BoostThreadStatic 537 stub KERNEL_537 538 stub ThunkTheTemplateHandle 540 stub KERNEL_540 #541 stub KERNEL_541 542 stub KERNEL_542 543 stub KERNEL_543 560 pascal SetThunkletCallbackGlue(long segptr) SetThunkletCallbackGlue16 561 pascal AllocLSThunkletCallback(segptr long) AllocLSThunkletCallback16 562 pascal AllocSLThunkletCallback(long long) AllocSLThunkletCallback16 563 pascal FindLSThunkletCallback(segptr long) FindLSThunkletCallback 564 pascal FindSLThunkletCallback(long long) FindSLThunkletCallback 566 stub KERNEL_566 # (thunklet) FIXME!!! 567 pascal AllocLSThunkletCallbackEx(segptr long word) AllocLSThunkletCallbackEx16 568 pascal AllocSLThunkletCallbackEx(long long word) AllocSLThunkletCallbackEx16 # 600-653 are Win95 only 600 stub AllocCodeAlias 601 stub FreeCodeAlias 602 pascal -ret16 GetDummyModuleHandleDS() GetDummyModuleHandleDS16 603 stub KERNEL_603 # OutputDebugString (?) 604 pascal -register CBClientGlueSL() CBClientGlueSL # FIXME: 605 is duplicate of 562 605 pascal AllocSLThunkletCallback_dup(long long) AllocSLThunkletCallback16 # FIXME: 606 is duplicate of 561 606 pascal AllocLSThunkletCallback_dup(segptr long) AllocLSThunkletCallback16 607 pascal AllocLSThunkletSysthunk(segptr long long) AllocLSThunkletSysthunk16 608 pascal AllocSLThunkletSysthunk(long segptr long) AllocSLThunkletSysthunk16 # FIXME: 609 is duplicate of 563 609 pascal FindLSThunkletCallback_dup(segptr long) FindLSThunkletCallback # FIXME: 610 is duplicate of 562 610 pascal FindSLThunkletCallback_dup(long long) FindSLThunkletCallback 611 pascal -ret16 FreeThunklet(long long) FreeThunklet16 612 pascal -ret16 IsSLThunklet(ptr) IsSLThunklet16 613 stub HugeMapLS 614 stub HugeUnMapLS 615 pascal -ret16 ConvertDialog32To16(long long long) ConvertDialog32To16 616 pascal -ret16 ConvertMenu32To16(long long long) ConvertMenu32To16 617 pascal -ret16 GetMenu32Size(ptr) GetMenu32Size16 618 pascal -ret16 GetDialog32Size(ptr) GetDialog32Size16 619 pascal -ret16 RegisterCBClient(word segptr long) RegisterCBClient16 620 pascal -register CBClientThunkSL() CBClientThunkSL 621 pascal -register CBClientThunkSLEx() CBClientThunkSLEx 622 pascal -ret16 UnRegisterCBClient(word segptr long) UnRegisterCBClient16 623 pascal -ret16 InitCBClient(long) InitCBClient16 624 pascal SetFastQueue(long long) SetFastQueue16 625 pascal GetFastQueue() GetFastQueue16 626 stub SmashEnvironment 627 pascal -ret16 IsBadFlatReadWritePtr(segptr long word) IsBadFlatReadWritePtr16 630 pascal -register C16ThkSL() C16ThkSL 631 pascal -register C16ThkSL01() C16ThkSL01 651 pascal ThunkConnect16(str str word long ptr str word) ThunkConnect16 652 stub IsThreadId 653 stub OkWithKernelToChangeUsers # Extra Wine internal functions for thunking and self-loader 666 pascal UTGlue16(ptr long ptr long) UTGlue16 667 pascal EntryAddrProc(word word) EntryAddrProc16 668 pascal MyAlloc(word word word) MyAlloc16 669 pascal -ret16 DllEntryPoint(long word word word long word) KERNEL_DllEntryPoint # 700-704 are Win95 only 700 pascal SSInit() SSInit16 701 stub SSOnBigStack 702 stub SSCall 703 stub CallProc32WFix 704 pascal -register SSConfirmSmallStack() SSConfirmSmallStack # Win95 krnl386.exe also exports ordinals 802-864, # however, those seem to be only callback stubs that are # never called directly by other modules ... ################################################################ # VxD entry points # 901 pascal -register __wine_vxd_vmm() __wine_vxd_vmm 905 pascal -register __wine_vxd_timer() __wine_vxd_timer 909 pascal -register __wine_vxd_reboot() __wine_vxd_reboot 910 pascal -register __wine_vxd_vdd() __wine_vxd_vdd 912 pascal -register __wine_vxd_vmd() __wine_vxd_vmd 914 pascal -register __wine_vxd_comm() __wine_vxd_comm #915 pascal -register __wine_vxd_printer() __wine_vxd_printer 923 pascal -register __wine_vxd_shell() __wine_vxd_shell 933 pascal -register __wine_vxd_pagefile() __wine_vxd_pagefile 938 pascal -register __wine_vxd_apm() __wine_vxd_apm 939 pascal -register __wine_vxd_vxdloader() __wine_vxd_vxdloader 945 pascal -register __wine_vxd_win32s() __wine_vxd_win32s 951 pascal -register __wine_vxd_configmg() __wine_vxd_configmg 955 pascal -register __wine_vxd_enable() __wine_vxd_enable 1990 pascal -register __wine_vxd_timerapi() __wine_vxd_timerapi ################################################################ # 32-bit version of the various 16-bit functions exported by kernel32 # @ stdcall -arch=win32 -norelay VxDCall0() VxDCall @ stdcall -arch=win32 -norelay VxDCall1() VxDCall @ stdcall -arch=win32 -norelay VxDCall2() VxDCall @ stdcall -arch=win32 -norelay VxDCall3() VxDCall @ stdcall -arch=win32 -norelay VxDCall4() VxDCall @ stdcall -arch=win32 -norelay VxDCall5() VxDCall @ stdcall -arch=win32 -norelay VxDCall6() VxDCall @ stdcall -arch=win32 -norelay VxDCall7() VxDCall @ stdcall -arch=win32 -norelay VxDCall8() VxDCall @ stdcall -arch=win32 k32CharToOemA(str ptr) @ stdcall -arch=win32 k32CharToOemBuffA(str ptr long) @ stdcall -arch=win32 k32OemToCharA(ptr ptr) @ stdcall -arch=win32 k32OemToCharBuffA(ptr ptr long) @ stdcall -arch=win32 k32LoadStringA(long long ptr long) @ varargs -arch=win32 k32wsprintfA(str str) @ stdcall -arch=win32 k32wvsprintfA(ptr str ptr) @ stdcall -arch=win32 -norelay CommonUnimpStub() @ stdcall -arch=win32 GetProcessDword(long long) @ stdcall -arch=win32 DosFileHandleToWin32Handle(long) @ stdcall -arch=win32 Win32HandleToDosFileHandle(long) @ stdcall -arch=win32 DeleteDosFileHandle(long) @ stdcall -arch=win32 GlobalAlloc16(long long) @ stdcall -arch=win32 GlobalLock16(long) @ stdcall -arch=win32 GlobalUnlock16(long) @ stdcall -arch=win32 GlobalFix16(long) @ stdcall -arch=win32 GlobalUnfix16(long) @ stdcall -arch=win32 GlobalWire16(long) @ stdcall -arch=win32 GlobalUnWire16(long) @ stdcall -arch=win32 GlobalFree16(long) @ stdcall -arch=win32 GlobalSize16(long) @ stdcall -arch=win32 HouseCleanLogicallyDeadHandles() @ stdcall -arch=win32 GetWin16DOSEnv() @ stdcall -arch=win32 LoadLibrary16(str) @ stdcall -arch=win32 FreeLibrary16(long) @ stdcall -arch=win32 GetProcAddress16(long str) WIN32_GetProcAddress16 @ stdcall -arch=win32 -norelay AllocMappedBuffer() @ stdcall -arch=win32 -norelay FreeMappedBuffer() @ stdcall -arch=win32 -norelay OT_32ThkLSF() @ stdcall -arch=win32 ThunkInitLSF(ptr str long str str) @ stdcall -arch=win32 -norelay LogApiThkLSF(str) @ stdcall -arch=win32 ThunkInitLS(ptr str long str str) @ stdcall -arch=win32 -norelay LogApiThkSL(str) @ stdcall -arch=win32 -norelay Common32ThkLS() @ stdcall -arch=win32 ThunkInitSL(ptr str long str str) @ stdcall -arch=win32 -norelay LogCBThkSL(str) @ stdcall -arch=win32 ReleaseThunkLock(ptr) @ stdcall -arch=win32 RestoreThunkLock(long) @ stdcall -arch=win32 -norelay W32S_BackTo32() @ stdcall -arch=win32 GetThunkBuff() @ stdcall -arch=win32 GetThunkStuff(str str) @ stdcall -arch=win32 K32WOWCallback16(long long) @ stdcall -arch=win32 K32WOWCallback16Ex(long long long ptr ptr) @ stdcall -arch=win32 K32WOWGetVDMPointer(long long long) @ stdcall -arch=win32 K32WOWHandle32(long long) @ stdcall -arch=win32 K32WOWHandle16(long long) @ stdcall -arch=win32 K32WOWGlobalAlloc16(long long) @ stdcall -arch=win32 K32WOWGlobalLock16(long) @ stdcall -arch=win32 K32WOWGlobalUnlock16(long) @ stdcall -arch=win32 K32WOWGlobalFree16(long) @ stdcall -arch=win32 K32WOWGlobalAllocLock16(long long ptr) @ stdcall -arch=win32 K32WOWGlobalUnlockFree16(long) @ stdcall -arch=win32 K32WOWGlobalLockSize16(long ptr) @ stdcall -arch=win32 K32WOWYield16() @ stdcall -arch=win32 K32WOWDirectedYield16(long) @ stdcall -arch=win32 K32WOWGetVDMPointerFix(long long long) @ stdcall -arch=win32 K32WOWGetVDMPointerUnfix(long) @ stdcall -arch=win32 K32WOWGetDescriptor(long ptr) @ stdcall -arch=win32 _KERNEL32_86(ptr) @ stdcall -arch=win32 SSOnBigStack() @ varargs -arch=win32 SSCall(long long ptr) @ stdcall -arch=win32 -norelay FT_PrologPrime() @ stdcall -arch=win32 -norelay QT_ThunkPrime() @ stdcall -arch=win32 PK16FNF(ptr) @ stdcall -arch=win32 GetPK16SysVar() @ stdcall -arch=win32 GetpWin16Lock(ptr) @ stdcall -arch=win32 _CheckNotSysLevel(ptr) @ stdcall -arch=win32 _ConfirmSysLevel(ptr) @ stdcall -arch=win32 _ConfirmWin16Lock() @ stdcall -arch=win32 _EnterSysLevel(ptr) @ stdcall -arch=win32 _LeaveSysLevel(ptr) @ stdcall -arch=win32 _KERNEL32_99(long) @ stdcall -arch=win32 _KERNEL32_100(long long long) @ stdcall -arch=win32 AllocSLCallback(long long) @ stdcall -arch=win32 -norelay FT_Exit0() @ stdcall -arch=win32 -norelay FT_Exit12() @ stdcall -arch=win32 -norelay FT_Exit16() @ stdcall -arch=win32 -norelay FT_Exit20() @ stdcall -arch=win32 -norelay FT_Exit24() @ stdcall -arch=win32 -norelay FT_Exit28() @ stdcall -arch=win32 -norelay FT_Exit32() @ stdcall -arch=win32 -norelay FT_Exit36() @ stdcall -arch=win32 -norelay FT_Exit40() @ stdcall -arch=win32 -norelay FT_Exit44() @ stdcall -arch=win32 -norelay FT_Exit48() @ stdcall -arch=win32 -norelay FT_Exit4() @ stdcall -arch=win32 -norelay FT_Exit52() @ stdcall -arch=win32 -norelay FT_Exit56() @ stdcall -arch=win32 -norelay FT_Exit8() @ stdcall -arch=win32 -norelay FT_Prolog() @ stdcall -arch=win32 -norelay FT_Thunk() @ stdcall -arch=win32 FreeSLCallback(long) @ stdcall -arch=win32 Get16DLLAddress(long str) @ stdcall -arch=win32 -norelay K32Thk1632Epilog() @ stdcall -arch=win32 -norelay K32Thk1632Prolog() @ stdcall -arch=win32 -norelay MapHInstLS() @ stdcall -arch=win32 -norelay MapHInstLS_PN() @ stdcall -arch=win32 -norelay MapHInstSL() @ stdcall -arch=win32 -norelay MapHInstSL_PN() @ stdcall -arch=win32 MapHModuleLS(long) @ stdcall -arch=win32 MapHModuleSL(long) @ stdcall -arch=win32 MapLS(ptr) @ stdcall -arch=win32 MapSL(long) @ stdcall -arch=win32 MapSLFix(long) @ stdcall -arch=win32 PrivateFreeLibrary(long) @ stdcall -arch=win32 PrivateLoadLibrary(str) @ stdcall -arch=win32 -norelay QT_Thunk() @ stdcall -arch=win32 -norelay SMapLS() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_12() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_16() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_20() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_24() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_28() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_32() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_36() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_40() @ stdcall -arch=win32 -norelay SMapLS_IP_EBP_8() @ stdcall -arch=win32 -norelay SUnMapLS() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_12() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_16() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_20() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_24() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_28() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_32() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_36() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_40() @ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_8() @ stdcall -arch=win32 ThunkConnect32(ptr str str str ptr long) @ stdcall -arch=win32 UTRegister(long str str str ptr ptr ptr) @ stdcall -arch=win32 UTUnRegister(long) @ stdcall -arch=win32 UnMapLS(long) @ stdcall -arch=win32 -norelay UnMapSLFixArray(long long) @ stdcall -arch=win32 _lclose16(long) ################################################################ # 16-bit symbols not available from kernel32 but used by other 16-bit dlls # @ stdcall -arch=win32 AllocSelectorArray16(long) @ stdcall -arch=win32 FarGetOwner16(long) @ stdcall -arch=win32 FarSetOwner16(long long) @ stdcall -arch=win32 FindResource16(long str str) @ stdcall -arch=win32 FreeResource16(long) @ stdcall -arch=win32 FreeSelector16(long) @ stdcall -arch=win32 GetCurrentPDB16() @ stdcall -arch=win32 GetCurrentTask() @ stdcall -arch=win32 GetDOSEnvironment16() @ stdcall -arch=win32 GetExePtr(long) @ stdcall -arch=win32 GetExeVersion16() @ stdcall -arch=win32 GetExpWinVer16(long) @ stdcall -arch=win32 GetModuleHandle16(str) @ stdcall -arch=win32 GlobalReAlloc16(long long long) @ stdcall -arch=win32 InitTask16(ptr) @ stdcall -arch=win32 IsBadReadPtr16(long long) @ stdcall -arch=win32 IsTask16(long) @ stdcall -arch=win32 LoadModule16(str ptr) @ stdcall -arch=win32 LoadResource16(long long) @ stdcall -arch=win32 LocalAlloc16(long long) @ stdcall -arch=win32 LocalInit16(long long long) @ stdcall -arch=win32 LocalLock16(long) @ stdcall -arch=win32 LocalUnlock16(long) @ stdcall -arch=win32 LocalReAlloc16(long long long) @ stdcall -arch=win32 LocalFree16(long) @ stdcall -arch=win32 LocalSize16(long) @ stdcall -arch=win32 LocalCompact16(long) @ stdcall -arch=win32 LocalCountFree16() @ stdcall -arch=win32 LocalHeapSize16() @ stdcall -arch=win32 LockResource16(long) @ stdcall -arch=win32 SetSelectorBase(long long) @ stdcall -arch=win32 SetSelectorLimit16(long long) @ stdcall -arch=win32 GetSelectorLimit16(long) @ stdcall -arch=win32 SizeofResource16(long long) @ stdcall -arch=win32 WinExec16(str long) ################################################################ # Wine internal extensions # # All functions must be prefixed with '__wine_' (for internal functions) # or 'wine_' (for user-visible functions) to avoid namespace conflicts. # DOS support @ cdecl -arch=win32 __wine_call_int_handler(ptr long) @ cdecl -arch=win32 __wine_load_dos_exe(str str) # VxDs @ cdecl -arch=win32 -private __wine_vxd_open(wstr long ptr) @ cdecl -arch=win32 -private __wine_vxd_get_proc(long) @ stdcall -arch=win32 IsOldWindowsTask(long) @ stdcall -arch=win32 GetProcessFlags(long) @ stdcall -arch=win32 krnl386_get_config_string(str str str ptr long) @ stdcall -arch=win32 krnl386_get_config_int(str str long) @ stdcall -arch=win32 krnl386_get_compat_mode(str) @ stdcall -arch=win32 krnl386_set_compat_path(str) @ stdcall -arch=win32 GetModuleFileName16(long ptr long) @ stdcall -arch=win32 GetModuleName16(long ptr long) @ stdcall -arch=win32 _EnterWin16Lock() @ stdcall -arch=win32 _LeaveWin16Lock() @ stdcall -arch=win32 IsRealModeTask(long) @ stdcall -arch=win32 RegCloseKey16(ptr) @ stdcall -arch=win32 RegCreateKey16(ptr str ptr) @ stdcall -arch=win32 RegDeleteKey16(ptr str) @ stdcall -arch=win32 RegEnumKey16(ptr long ptr long) @ stdcall -arch=win32 RegFlushKey16(ptr) @ stdcall -arch=win32 RegOpenKey16(ptr str ptr) @ stdcall -arch=win32 RegQueryValue16(ptr str ptr ptr) @ stdcall -arch=win32 RegQueryValueEx16(ptr str ptr ptr ptr ptr) @ stdcall -arch=win32 RegSetValue16(ptr str long ptr long) @ stdcall -arch=win32 RegSetValueEx16(ptr str long long ptr long) @ stdcall -arch=win32 K32WOWHandle16Destroy(ptr long) @ stdcall -arch=win32 K32WOWHandle16DestroyHint(ptr long) @ cdecl -arch=win32 DOSVM_inport(long long) @ cdecl -arch=win32 DOSVM_outport(long long long) @ cdecl -arch=win32 DOSVM_setportcb(ptr ptr long ptr ptr) @ cdecl -arch=win32 DOSVM_SetBuiltinVector(long ptr) @ cdecl -arch=win32 DOSVM_GetPMHandler16(long long) @ cdecl -arch=win32 DOSVM_SetPMHandler16(long long) @ cdecl -arch=win32 krnl386_get_search_path() @ cdecl -arch=win32 krnl386_search_executable_file(str ptr long long) @ stdcall -arch=win32 DibMapGlobalMemory(long ptr long) @ stdcall -arch=win32 DibUnmapGlobalMemory(ptr long) @ stdcall -arch=win32 GlobalMapInternal(long ptr long) @ cdecl -arch=win32 make_thunk_32(ptr str str long long long) @ cdecl -arch=win32 free_thunk_32(long) @ cdecl -arch=win32 get_resource_table(long str ptr) @ cdecl -arch=win32 get_aflags(long) @ stdcall -arch=win32 WritePrivateProfileStruct16(str str ptr long str) @ stdcall -arch=win32 GetPrivateProfileStruct16(str str ptr long str) @ stdcall -arch=win32 StackTraceFirst16(ptr long) @ stdcall -arch=win32 StackTraceCSIPFirst16(ptr long long long long) @ stdcall -arch=win32 StackTraceNext16(ptr) @ stdcall -arch=win32 TaskSetCSIP16(long long long) @ stdcall -arch=win32 TaskGetCSIP16(long) @ stdcall -arch=win32 TaskSwitch16(long long) @ stdcall -arch=win32 AllocDStoCSAlias16(long) @ cdecl -arch=win32 GLOBAL_GetLink(long) @ cdecl -arch=win32 GLOBAL_SetLink(long long) @ cdecl -arch=win32 GLOBAL_FindLink(long) @ cdecl -arch=win32 GLOBAL_SetSeg(long long long) @ stdcall -arch=win32 set_vm_inject_cb(long) @ stdcall -arch=win32 vm_inject(long long long long long) @ stdcall -arch=win32 get_idle_event() @ stdcall -arch=win32 get_windows_build() #VDD apis @ stdcall -arch=win32 getAL() @ stdcall -arch=win32 getAH() @ stdcall -arch=win32 getAX() @ stdcall -arch=win32 getEAX() @ stdcall -arch=win32 getBL() @ stdcall -arch=win32 getBH() @ stdcall -arch=win32 getBX() @ stdcall -arch=win32 getEBX() @ stdcall -arch=win32 getCL() @ stdcall -arch=win32 getCH() @ stdcall -arch=win32 getCX() @ stdcall -arch=win32 getECX() @ stdcall -arch=win32 getDL() @ stdcall -arch=win32 getDH() @ stdcall -arch=win32 getDX() @ stdcall -arch=win32 getEDX() @ stdcall -arch=win32 getSP() @ stdcall -arch=win32 getESP() @ stdcall -arch=win32 getBP() @ stdcall -arch=win32 getEBP() @ stdcall -arch=win32 getSI() @ stdcall -arch=win32 getESI() @ stdcall -arch=win32 getDI() @ stdcall -arch=win32 getEDI() @ stdcall -arch=win32 setAL(long) @ stdcall -arch=win32 setAH(long) @ stdcall -arch=win32 setAX(long) @ stdcall -arch=win32 setEAX(long) @ stdcall -arch=win32 setBL(long) @ stdcall -arch=win32 setBH(long) @ stdcall -arch=win32 setBX(long) @ stdcall -arch=win32 setEBX(long) @ stdcall -arch=win32 setCL(long) @ stdcall -arch=win32 setCH(long) @ stdcall -arch=win32 setCX(long) @ stdcall -arch=win32 setECX(long) @ stdcall -arch=win32 setDL(long) @ stdcall -arch=win32 setDH(long) @ stdcall -arch=win32 setDX(long) @ stdcall -arch=win32 setEDX(long) @ stdcall -arch=win32 setSP(long) @ stdcall -arch=win32 setESP(long) @ stdcall -arch=win32 setBP(long) @ stdcall -arch=win32 setEBP(long) @ stdcall -arch=win32 setSI(long) @ stdcall -arch=win32 setESI(long) @ stdcall -arch=win32 setDI(long) @ stdcall -arch=win32 setEDI(long) @ stdcall -arch=win32 getDS() @ stdcall -arch=win32 getES() @ stdcall -arch=win32 getCS() @ stdcall -arch=win32 getSS() @ stdcall -arch=win32 getFS() @ stdcall -arch=win32 getGS() @ stdcall -arch=win32 setDS(long) @ stdcall -arch=win32 setES(long) @ stdcall -arch=win32 setCS(long) @ stdcall -arch=win32 setSS(long) @ stdcall -arch=win32 setFS(long) @ stdcall -arch=win32 setGS(long) @ stdcall -arch=win32 getIP() @ stdcall -arch=win32 getEIP() @ stdcall -arch=win32 setIP(long) @ stdcall -arch=win32 setEIP(long) @ stdcall -arch=win32 getCF() @ stdcall -arch=win32 getPF() @ stdcall -arch=win32 getAF() @ stdcall -arch=win32 getZF() @ stdcall -arch=win32 getSF() @ stdcall -arch=win32 getIF() @ stdcall -arch=win32 getDF() @ stdcall -arch=win32 getOF() @ stdcall -arch=win32 setCF(long) @ stdcall -arch=win32 setPF(long) @ stdcall -arch=win32 setAF(long) @ stdcall -arch=win32 setZF(long) @ stdcall -arch=win32 setSF(long) @ stdcall -arch=win32 setIF(long) @ stdcall -arch=win32 setDF(long) @ stdcall -arch=win32 setOF(long) @ stdcall -arch=win32 VDDInstallIOHook(long long ptr ptr) @ stdcall -arch=win32 VDDDeInstallIOHook(long long ptr) @ stdcall -arch=win32 MGetVdmPointer(long long long) ================================================ FILE: krnl386/krnl386.vcxproj ================================================  Debug Win32 Release Win32 {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} Win32Proj krnl386 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true ../wine;$(IncludePath) $(ProjectName) .exe16 false .exe16 ../wine;$(VC_IncludePath);$(WindowsSDK_IncludePath); false Level3 Disabled _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= $(IntDir) Windows true $(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 krnl386.def $(OutDir)$(TargetName)$(TargetExt) Level3 MaxSpeed true true 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= Windows true true true $(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 false krnl386.def WIN32;NDEBUG;_WINDOWS;_USRDLL;KRNL386_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN= Document "$(OutDir)convspec" "%(Filename).spec" KERNEL > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" KERNEL > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj false ================================================ FILE: krnl386/krnl386.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: krnl386/local.c ================================================ /* * 16-bit local heap functions * * Copyright 1995 Alexandre Julliard * Copyright 1996 Huw Davies * Copyright 1998 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* * Note: * All local heap functions need the current DS as first parameter * when called from the emulation library, so they take one more * parameter than usual. */ #include "config.h" #define NONAMELESSUNION #include #include #include "wine/winbase16.h" #include "windows/wownt32.h" #include "winternl.h" #include "kernel16_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(local); typedef struct { /* Arena header */ WORD prev; /* Previous arena | arena type */ WORD next; /* Next arena */ /* Start of the memory block or free-list info */ WORD size; /* Size of the free block */ WORD free_prev; /* Previous free block */ WORD free_next; /* Next free block */ } LOCALARENA; #define ARENA_HEADER_SIZE 4 #define ARENA_HEADER( handle) ((handle) - ARENA_HEADER_SIZE) /* Arena types (stored in 'prev' field of the arena) */ #define LOCAL_ARENA_FREE 0 #define LOCAL_ARENA_FIXED 1 /* LocalNotify() msgs */ #define LN_OUTOFMEM 0 #define LN_MOVE 1 #define LN_DISCARD 2 /* Layout of a handle entry table * * WORD count of entries * LOCALHANDLEENTRY[count] entries * WORD near ptr to next table */ typedef struct { WORD addr; /* Address of the MOVEABLE block */ BYTE flags; /* Flags for this block */ BYTE lock; /* Lock count */ } LOCALHANDLEENTRY; /* * We make addr = 4n + 2 and set *((WORD *)addr - 1) = &addr like Windows does * in case something actually relies on this. * * An unused handle has lock = flags = 0xff. In windows addr is that of next * free handle, at the moment in wine we set it to 0. * * A discarded block's handle has lock = addr = 0 and flags = 0x40 * (LMEM_DISCARDED >> 8) */ #define MOVEABLE_PREFIX sizeof(HLOCAL16) #include "pshpack1.h" typedef struct { WORD check; /* 00 Heap checking flag */ WORD freeze; /* 02 Heap frozen flag */ WORD items; /* 04 Count of items on the heap */ WORD first; /* 06 First item of the heap */ WORD pad1; /* 08 Always 0 */ WORD last; /* 0a Last item of the heap */ WORD pad2; /* 0c Always 0 */ BYTE ncompact; /* 0e Compactions counter */ BYTE dislevel; /* 0f Discard level */ DWORD distotal; /* 10 Total bytes discarded */ WORD htable; /* 14 Pointer to handle table */ WORD hfree; /* 16 Pointer to free handle table */ WORD hdelta; /* 18 Delta to expand the handle table */ WORD expand; /* 1a Pointer to expand function (unused) */ WORD pstat; /* 1c Pointer to status structure (unused) */ FARPROC16 notify; /* 1e Pointer to LocalNotify() function */ WORD lock; /* 22 Lock count for the heap */ WORD extra; /* 24 Extra bytes to allocate when expanding */ WORD minsize; /* 26 Minimum size of the heap */ WORD magic; /* 28 Magic number */ } LOCALHEAPINFO; typedef struct { DWORD dwSize; /* 00 */ DWORD dwMemReserved; /* 04 */ DWORD dwMemCommitted; /* 08 */ DWORD dwTotalFree; /* 0C */ DWORD dwLargestFreeBlock; /* 10 */ DWORD dwcFreeHandles; /* 14 */ } LOCAL32INFO; typedef struct { DWORD dwSize; /* 00 */ WORD hHandle; /* 04 */ DWORD dwAddress; /* 06 */ DWORD dwSizeBlock; /* 0A */ WORD wFlags; /* 0E */ WORD wType; /* 10 */ WORD hHeap; /* 12 */ WORD wHeapType; /* 14 */ DWORD dwNext; /* 16 */ DWORD dwNextAlt; /* 1A */ } LOCAL32ENTRY; #include "poppack.h" #define LOCAL_HEAP_MAGIC 0x484c /* 'LH' */ /* All local heap allocations are aligned on 4-byte boundaries */ #define LALIGN(word) (((word) + 3) & ~3) #define ARENA_PTR(ptr,arena) ((LOCALARENA *)((char *)(ptr)+(arena))) #define ARENA_PREV(ptr,arena) (ARENA_PTR((ptr),(arena))->prev & ~3) #define ARENA_NEXT(ptr,arena) (ARENA_PTR((ptr),(arena))->next) #define ARENA_FLAGS(ptr,arena) (ARENA_PTR((ptr),(arena))->prev & 3) /* determine whether the handle belongs to a fixed or a moveable block */ #define HANDLE_FIXED(handle) (((handle) & 3) == 0) #define HANDLE_MOVEABLE(handle) (((handle) & 3) == 2) /* 32-bit heap definitions */ #define HTABLE_SIZE 0x10000 #define HTABLE_PAGESIZE 0x1000 #define HTABLE_NPAGES (HTABLE_SIZE / HTABLE_PAGESIZE) #include "pshpack1.h" typedef struct _LOCAL32HEADER { WORD freeListFirst[HTABLE_NPAGES]; WORD freeListSize[HTABLE_NPAGES]; WORD freeListLast[HTABLE_NPAGES]; DWORD selectorTableOffset; WORD selectorTableSize; WORD selectorDelta; DWORD segment; LPBYTE base; DWORD limit; DWORD flags; DWORD magic; HANDLE heap; } LOCAL32HEADER; #include "poppack.h" #define LOCAL32_MAGIC ((DWORD)('L' | ('H'<<8) | ('3'<<16) | ('2'<<24))) static inline BOOL16 call_notify_func( FARPROC16 proc, WORD msg, HLOCAL16 handle, WORD arg ) { DWORD ret; WORD args[3]; if (!proc) return FALSE; args[2] = msg; args[1] = handle; args[0] = arg; WOWCallback16Ex( (DWORD)proc, WCB16_PASCAL, sizeof(args), args, &ret ); return LOWORD(ret); } /*********************************************************************** * LOCAL_GetHeap * * Return a pointer to the local heap, making sure it exists. */ static LOCALHEAPINFO *LOCAL_GetHeap( HANDLE16 ds ) { LOCALHEAPINFO *pInfo; INSTANCEDATA *ptr = MapSL( MAKESEGPTR( ds, 0 )); TRACE("Heap at %p, %04x\n", ptr, (ptr != NULL ? ptr->heap : 0xFFFF)); if (!ptr || !ptr->heap) return NULL; if (IsBadReadPtr16( (SEGPTR)MAKELONG(ptr->heap,ds), sizeof(LOCALHEAPINFO))) { WARN("Bad pointer\n"); return NULL; } pInfo = (LOCALHEAPINFO*)((char*)ptr + ptr->heap); if (pInfo->magic != LOCAL_HEAP_MAGIC) { WARN("Bad magic\n"); return NULL; } return pInfo; } /*********************************************************************** * LOCAL_MakeBlockFree * * Make a block free, inserting it in the free-list. * 'block' is the handle of the block arena; 'baseptr' points to * the beginning of the data segment containing the heap. */ static void LOCAL_MakeBlockFree( char *baseptr, WORD block ) { LOCALARENA *pArena, *pNext; WORD next; /* Mark the block as free */ pArena = ARENA_PTR( baseptr, block ); pArena->prev = (pArena->prev & ~3) | LOCAL_ARENA_FREE; pArena->size = pArena->next - block; /* Find the next free block (last block is always free) */ next = pArena->next; for (;;) { pNext = ARENA_PTR( baseptr, next ); if ((pNext->prev & 3) == LOCAL_ARENA_FREE) break; next = pNext->next; } TRACE("%04x, next %04x\n", block, next ); /* Insert the free block in the free-list */ pArena->free_prev = pNext->free_prev; pArena->free_next = next; ARENA_PTR(baseptr,pNext->free_prev)->free_next = block; pNext->free_prev = block; } /*********************************************************************** * LOCAL_RemoveFreeBlock * * Remove a block from the free-list. * 'block' is the handle of the block arena; 'baseptr' points to * the beginning of the data segment containing the heap. */ static void LOCAL_RemoveFreeBlock( char *baseptr, WORD block ) { /* Mark the block as fixed */ LOCALARENA *pArena = ARENA_PTR( baseptr, block ); pArena->prev = (pArena->prev & ~3) | LOCAL_ARENA_FIXED; /* Remove it from the list */ ARENA_PTR(baseptr,pArena->free_prev)->free_next = pArena->free_next; ARENA_PTR(baseptr,pArena->free_next)->free_prev = pArena->free_prev; } /*********************************************************************** * LOCAL_AddBlock * * Insert a new block in the heap. * 'new' is the handle of the new block arena; 'baseptr' points to * the beginning of the data segment containing the heap; 'prev' is * the block before the new one. */ static void LOCAL_AddBlock( char *baseptr, WORD prev, WORD new ) { LOCALARENA *pPrev = ARENA_PTR( baseptr, prev ); LOCALARENA *pNew = ARENA_PTR( baseptr, new ); pNew->prev = (prev & ~3) | LOCAL_ARENA_FIXED; pNew->next = pPrev->next; ARENA_PTR(baseptr,pPrev->next)->prev &= 3; ARENA_PTR(baseptr,pPrev->next)->prev |= new; pPrev->next = new; } /*********************************************************************** * LOCAL_RemoveBlock * * Remove a block from the heap. * 'block' is the handle of the block arena; 'baseptr' points to * the beginning of the data segment containing the heap. */ static void LOCAL_RemoveBlock( char *baseptr, WORD block ) { LOCALARENA *pArena, *pTmp; /* Remove the block from the free-list */ TRACE("\n"); pArena = ARENA_PTR( baseptr, block ); if ((pArena->prev & 3) == LOCAL_ARENA_FREE) LOCAL_RemoveFreeBlock( baseptr, block ); /* If the previous block is free, expand its size */ pTmp = ARENA_PTR( baseptr, pArena->prev & ~3 ); if ((pTmp->prev & 3) == LOCAL_ARENA_FREE) pTmp->size += pArena->next - block; /* Remove the block from the linked list */ pTmp->next = pArena->next; pTmp = ARENA_PTR( baseptr, pArena->next ); pTmp->prev = (pTmp->prev & 3) | (pArena->prev & ~3); } /*********************************************************************** * LOCAL_PrintHeap */ static void LOCAL_PrintHeap( HANDLE16 ds ) { char *ptr; LOCALHEAPINFO *pInfo; WORD arena; /* FIXME - the test should be done when calling the function! plus is not clear that we should print this info only when TRACE_ON is on! */ if(!TRACE_ON(local)) return; ptr = MapSL( MAKESEGPTR( ds, 0 )); pInfo = LOCAL_GetHeap( ds ); if (!pInfo) { ERR( "Local Heap corrupted! ds=%04x\n", ds ); return; } TRACE( "Local Heap ds=%04x first=%04x last=%04x items=%d\n", ds, pInfo->first, pInfo->last, pInfo->items ); arena = pInfo->first; for (;;) { LOCALARENA *pArena = ARENA_PTR(ptr,arena); TRACE( " %04x: prev=%04x next=%04x type=%d\n", arena, pArena->prev & ~3, pArena->next, pArena->prev & 3 ); if (arena == pInfo->first) { TRACE( " size=%d free_prev=%04x free_next=%04x\n", pArena->size, pArena->free_prev, pArena->free_next ); } if ((pArena->prev & 3) == LOCAL_ARENA_FREE) { TRACE( " size=%d free_prev=%04x free_next=%04x\n", pArena->size, pArena->free_prev, pArena->free_next ); if (pArena->next == arena) break; /* last one */ if (ARENA_PTR(ptr,pArena->free_next)->free_prev != arena) { TRACE( "*** arena->free_next->free_prev != arena\n" ); break; } } if (pArena->next == arena) { TRACE( "*** last block is not marked free\n" ); break; } if ((ARENA_PTR(ptr,pArena->next)->prev & ~3) != arena) { TRACE( "*** arena->next->prev != arena (%04x, %04x)\n", pArena->next, ARENA_PTR(ptr,pArena->next)->prev); break; } arena = pArena->next; } } #ifdef HEAP_VALIDATE static BOOL LOCAL_Validate(WORD ds, HANDLE16 handle) { char *ptr; LOCALHEAPINFO *pInfo; ptr = MapSL(MAKESEGPTR(ds, 0)); if(!(pInfo = LOCAL_GetHeap(ds))) return FALSE; if (IsBadReadPtr16(MAKESEGPTR(ds, handle), 2)) goto fail; if(HANDLE_MOVEABLE(handle)) { LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle); HANDLE16 nhandle = pEntry->addr - MOVEABLE_PREFIX; if (ARENA_PTR(ptr, ARENA_HEADER(nhandle))->size != handle) goto fail; handle = nhandle; } handle = ARENA_HEADER(handle); if (ARENA_NEXT(ptr, ARENA_PREV(ptr, handle)) != handle) goto fail; if (ARENA_PREV(ptr, ARENA_NEXT(ptr, handle)) != handle) goto fail; return TRUE; fail: ERR("invalid handle %04x\n", handle); return FALSE; } #endif /*********************************************************************** * LocalInit (KERNEL.4) */ BOOL16 WINAPI LocalInit16( HANDLE16 selector, WORD start, WORD end ) { char *ptr; WORD heapInfoArena, freeArena, lastArena; LOCALHEAPINFO *pHeapInfo; LOCALARENA *pArena, *pFirstArena, *pLastArena; BOOL16 ret = FALSE; /* The initial layout of the heap is: */ /* - first arena (FIXED) */ /* - heap info structure (FIXED) */ /* - large free block (FREE) */ /* - last arena (FREE) */ TRACE("%04x %04x-%04x\n", selector, start, end); if (!selector) selector = CURRENT_DS; if (TRACE_ON(local)) { /* If TRACE_ON(local) is set, the global heap blocks are */ /* cleared before use, so we can test for double initialization. */ if (LOCAL_GetHeap(selector)) { ERR("Heap %04x initialized twice.\n", selector); LOCAL_PrintHeap(selector); } } if (start == 0) { /* start == 0 means: put the local heap at the end of the segment */ DWORD size = GlobalSize16( GlobalHandle16( selector ) ); start = (WORD)(size > 0xffff ? 0xffff : size) - 1; if ( end > 0xfffe ) end = 0xfffe; start -= end; end += start; } ptr = MapSL( MAKESEGPTR( selector, 0 ) ); start = LALIGN( max( start, sizeof(INSTANCEDATA) ) ); heapInfoArena = LALIGN(start + sizeof(LOCALARENA) ); freeArena = LALIGN( heapInfoArena + ARENA_HEADER_SIZE + sizeof(LOCALHEAPINFO) ); lastArena = (end - sizeof(LOCALARENA)) & ~3; /* Make sure there's enough space. */ if (freeArena + sizeof(LOCALARENA) >= lastArena) goto done; /* Initialise the first arena */ pFirstArena = ARENA_PTR( ptr, start ); pFirstArena->prev = start | LOCAL_ARENA_FIXED; pFirstArena->next = heapInfoArena; pFirstArena->size = LALIGN(sizeof(LOCALARENA)); pFirstArena->free_prev = start; /* this one */ pFirstArena->free_next = freeArena; /* Initialise the arena of the heap info structure */ pArena = ARENA_PTR( ptr, heapInfoArena ); pArena->prev = start | LOCAL_ARENA_FIXED; pArena->next = freeArena; /* Initialise the heap info structure */ pHeapInfo = (LOCALHEAPINFO *) (ptr + heapInfoArena + ARENA_HEADER_SIZE ); memset( pHeapInfo, 0, sizeof(LOCALHEAPINFO) ); pHeapInfo->items = 4; pHeapInfo->first = start; pHeapInfo->last = lastArena; pHeapInfo->htable = 0; pHeapInfo->hdelta = 0x20; pHeapInfo->extra = 0x200; pHeapInfo->minsize = lastArena - freeArena; pHeapInfo->magic = LOCAL_HEAP_MAGIC; /* Initialise the large free block */ pArena = ARENA_PTR( ptr, freeArena ); pArena->prev = heapInfoArena | LOCAL_ARENA_FREE; pArena->next = lastArena; pArena->size = lastArena - freeArena; pArena->free_prev = start; pArena->free_next = lastArena; /* Initialise the last block */ pLastArena = ARENA_PTR( ptr, lastArena ); pLastArena->prev = freeArena | LOCAL_ARENA_FREE; pLastArena->next = lastArena; /* this one */ pLastArena->size = LALIGN(sizeof(LOCALARENA)); pLastArena->free_prev = freeArena; pLastArena->free_next = lastArena; /* this one */ /* Store the local heap address in the instance data */ ((INSTANCEDATA *)ptr)->heap = heapInfoArena + ARENA_HEADER_SIZE; LOCAL_PrintHeap( selector ); ret = TRUE; done: if (CURRENT_STACK16) CURRENT_STACK16->ecx = ret; /* must be returned in cx too */ return ret; } /*********************************************************************** * LOCAL_GrowHeap */ static BOOL16 LOCAL_GrowHeap( HANDLE16 ds, DWORD newsize ) { HANDLE16 hseg; LONG oldsize; LONG end; LOCALHEAPINFO *pHeapInfo; WORD freeArena, lastArena; LOCALARENA *pArena, *pLastArena; char *ptr; hseg = GlobalHandle16( ds ); /* maybe mem allocated by Virtual*() ? */ if (!hseg) return FALSE; oldsize = GlobalSize16( hseg ); /* if nothing can be gained, return */ if (oldsize > 0xfff0) return FALSE; hseg = GlobalReAlloc16( hseg, newsize, GMEM_FIXED ); if (!hseg) return 0; ptr = MapSL( MAKESEGPTR( ds, 0 ) ); pHeapInfo = LOCAL_GetHeap( ds ); if (pHeapInfo == NULL) { ERR("Heap not found\n" ); return FALSE; } end = GlobalSize16( hseg ); lastArena = (end - sizeof(LOCALARENA)) & ~3; /* Update the HeapInfo */ pHeapInfo->items++; freeArena = pHeapInfo->last; pHeapInfo->last = lastArena; pHeapInfo->minsize += end - oldsize; /* grow the old last block */ pArena = ARENA_PTR( ptr, freeArena ); pArena->size = lastArena - freeArena; pArena->next = lastArena; pArena->free_next = lastArena; /* Initialise the new last block */ pLastArena = ARENA_PTR( ptr, lastArena ); pLastArena->prev = freeArena | LOCAL_ARENA_FREE; pLastArena->next = lastArena; /* this one */ pLastArena->size = LALIGN(sizeof(LOCALARENA)); pLastArena->free_prev = freeArena; pLastArena->free_next = lastArena; /* this one */ /* If block before freeArena is also free then merge them */ if((ARENA_PTR(ptr, (pArena->prev & ~3))->prev & 3) == LOCAL_ARENA_FREE) { LOCAL_RemoveBlock(ptr, freeArena); pHeapInfo->items--; } TRACE("Heap expanded\n" ); LOCAL_PrintHeap( ds ); return TRUE; } /*********************************************************************** * LOCAL_FreeArena */ static HLOCAL16 LOCAL_FreeArena( WORD ds, WORD arena ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALARENA *pArena, *pPrev; TRACE("%04x ds=%04x\n", arena, ds ); if (!(pInfo = LOCAL_GetHeap( ds ))) return arena; pArena = ARENA_PTR( ptr, arena ); if ((pArena->prev & 3) == LOCAL_ARENA_FREE) { /* shouldn't happen */ ERR("Trying to free block %04x twice!\n", arena ); LOCAL_PrintHeap( ds ); return arena; } /* Check if we can merge with the previous block */ pPrev = ARENA_PTR( ptr, pArena->prev & ~3 ); if ((pPrev->prev & 3) == LOCAL_ARENA_FREE) { arena = pArena->prev & ~3; pArena = pPrev; LOCAL_RemoveBlock( ptr, pPrev->next ); pInfo->items--; } else /* Make a new free block */ { LOCAL_MakeBlockFree( ptr, arena ); } /* Check if we can merge with the next block */ if ((pArena->next == pArena->free_next) && (pArena->next != pInfo->last)) { LOCAL_RemoveBlock( ptr, pArena->next ); pInfo->items--; } return 0; } /*********************************************************************** * LOCAL_ShrinkArena * * Shrink an arena by creating a free block at its end if possible. * 'size' includes the arena header, and must be aligned. */ static WORD LOCAL_ShrinkArena( WORD ds, WORD arena, WORD size, BOOL fromend ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALARENA *pArena = ARENA_PTR( ptr, arena ); if (arena + size + LALIGN(sizeof(LOCALARENA)) < pArena->next) { LOCALHEAPINFO *pInfo = LOCAL_GetHeap( ds ); if (!pInfo) return; pInfo->items++; if (!fromend) { LOCAL_AddBlock( ptr, arena, arena + size ); LOCAL_FreeArena( ds, arena + size ); return arena; } else { LOCAL_AddBlock( ptr, arena, arena + pArena->size - size ); pArena->size -= size; return arena + pArena->size; } } return arena; } /*********************************************************************** * LOCAL_GrowArenaDownward * * Grow an arena downward by using the previous arena (must be free). */ static void LOCAL_GrowArenaDownward( WORD ds, WORD arena, WORD newsize ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALARENA *pArena = ARENA_PTR( ptr, arena ); WORD prevArena = pArena->prev & ~3; LOCALARENA *pPrevArena = ARENA_PTR( ptr, prevArena ); WORD offset, size; char *p; if (!(pInfo = LOCAL_GetHeap( ds ))) return; offset = pPrevArena->size; size = pArena->next - arena - ARENA_HEADER_SIZE; LOCAL_RemoveFreeBlock( ptr, prevArena ); LOCAL_RemoveBlock( ptr, arena ); pInfo->items--; p = (char *)pPrevArena + ARENA_HEADER_SIZE; while (offset < size) { memcpy( p, p + offset, offset ); p += offset; size -= offset; } if (size) memcpy( p, p + offset, size ); LOCAL_ShrinkArena( ds, prevArena, newsize, FALSE ); } /*********************************************************************** * LOCAL_GrowArenaUpward * * Grow an arena upward by using the next arena (must be free and big * enough). Newsize includes the arena header and must be aligned. */ static void LOCAL_GrowArenaUpward( WORD ds, WORD arena, WORD newsize ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALARENA *pArena = ARENA_PTR( ptr, arena ); WORD nextArena = pArena->next; if (!(pInfo = LOCAL_GetHeap( ds ))) return; LOCAL_RemoveBlock( ptr, nextArena ); pInfo->items--; LOCAL_ShrinkArena( ds, arena, newsize, FALSE ); } /*********************************************************************** * LOCAL_GetFreeSpace */ static WORD LOCAL_GetFreeSpace(WORD ds, WORD countdiscard) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALARENA *pArena; WORD arena; WORD freespace = 0; if (!(pInfo = LOCAL_GetHeap( ds ))) { ERR("Local heap not found\n" ); LOCAL_PrintHeap(ds); return 0; } arena = pInfo->first; pArena = ARENA_PTR( ptr, arena ); while (arena != pArena->free_next) { arena = pArena->free_next; pArena = ARENA_PTR( ptr, arena ); if (pArena->size >= freespace) freespace = pArena->size; } /* FIXME doesn't yet calculate space that would become free if everything were discarded when countdiscard == 1 */ if (freespace < ARENA_HEADER_SIZE) freespace = 0; else freespace -= ARENA_HEADER_SIZE; return freespace; } /*********************************************************************** * LOCAL_Compact */ static UINT16 LOCAL_Compact( HANDLE16 ds, UINT16 minfree, UINT16 flags ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALARENA *pArena, *pMoveArena, *pFinalArena; WORD arena, movearena, finalarena, table; WORD count, movesize, size; WORD freespace; LOCALHANDLEENTRY *pEntry; if (!(pInfo = LOCAL_GetHeap( ds ))) { ERR("Local heap not found\n" ); LOCAL_PrintHeap(ds); return 0; } TRACE("ds = %04x, minfree = %04x, flags = %04x\n", ds, minfree, flags); freespace = LOCAL_GetFreeSpace(ds, minfree ? 0 : 1); if(freespace >= minfree || (flags & LMEM_NOCOMPACT)) { TRACE("Returning %04x.\n", freespace); return freespace; } TRACE("Compacting heap %04x.\n", ds); table = pInfo->htable; while(table) { pEntry = (LOCALHANDLEENTRY *)(ptr + table + sizeof(WORD)); for(count = *(WORD *)(ptr + table); count > 0; count--, pEntry++) { if((pEntry->lock == 0) && (pEntry->flags != (LMEM_DISCARDED >> 8))) { /* OK we can move this one if we want */ TRACE("handle %04x (block %04x) can be moved.\n", (WORD)((char *)pEntry - ptr), pEntry->addr); movearena = ARENA_HEADER(pEntry->addr - MOVEABLE_PREFIX); pMoveArena = ARENA_PTR(ptr, movearena); movesize = pMoveArena->next - movearena; arena = pInfo->first; pArena = ARENA_PTR(ptr, arena); size = 0xffff; finalarena = 0; /* Try to find the smallest arena that will do, */ /* which is below us in memory */ for(;;) { arena = pArena->free_next; pArena = ARENA_PTR(ptr, arena); if(arena >= movearena) break; if(arena == pArena->free_next) break; if((pArena->size >= movesize) && (pArena->size < size)) { size = pArena->size; finalarena = arena; } } if (finalarena) /* Actually got somewhere to move */ { TRACE("Moving it to %04x.\n", finalarena); pFinalArena = ARENA_PTR(ptr, finalarena); size = pFinalArena->size; LOCAL_RemoveFreeBlock(ptr, finalarena); LOCAL_ShrinkArena( ds, finalarena, movesize, FALSE ); /* Copy the arena to its new location */ memcpy((char *)pFinalArena + ARENA_HEADER_SIZE, (char *)pMoveArena + ARENA_HEADER_SIZE, movesize - ARENA_HEADER_SIZE ); /* Free the old location */ LOCAL_FreeArena(ds, movearena); call_notify_func(pInfo->notify, LN_MOVE, (WORD)((char *)pEntry - ptr), pEntry->addr); /* Update handle table entry */ pEntry->addr = finalarena + ARENA_HEADER_SIZE + MOVEABLE_PREFIX; } else if((ARENA_PTR(ptr, pMoveArena->prev & ~3)->prev & 3) == LOCAL_ARENA_FREE) { /* Previous arena is free (but < movesize) */ /* so we can 'slide' movearena down into it */ finalarena = pMoveArena->prev & ~3; LOCAL_GrowArenaDownward( ds, movearena, movesize ); /* Update handle table entry */ pEntry->addr = finalarena + ARENA_HEADER_SIZE + MOVEABLE_PREFIX; } } } table = *(WORD *)pEntry; } freespace = LOCAL_GetFreeSpace(ds, minfree ? 0 : 1); if(freespace >= minfree || (flags & LMEM_NODISCARD)) { TRACE("Returning %04x.\n", freespace); return freespace; } table = pInfo->htable; while(table) { pEntry = (LOCALHANDLEENTRY *)(ptr + table + sizeof(WORD)); for(count = *(WORD *)(ptr + table); count > 0; count--, pEntry++) { if(pEntry->addr && pEntry->lock == 0 && (pEntry->flags & (LMEM_DISCARDABLE >> 8))) { TRACE("Discarding handle %04x (block %04x).\n", (char *)pEntry - ptr, pEntry->addr); LOCAL_FreeArena(ds, ARENA_HEADER(pEntry->addr - MOVEABLE_PREFIX)); call_notify_func(pInfo->notify, LN_DISCARD, (char *)pEntry - ptr, pEntry->flags); pEntry->addr = 0; pEntry->flags = (LMEM_DISCARDED >> 8); } } table = *(WORD *)pEntry; } return LOCAL_Compact(ds, 0xffff, LMEM_NODISCARD); } /*********************************************************************** * LOCAL_FindFreeBlock */ static HLOCAL16 LOCAL_FindFreeBlock( HANDLE16 ds, WORD size, WORD flags ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALARENA *pArena; WORD arena, found = 0; if (!(pInfo = LOCAL_GetHeap( ds ))) { ERR("Local heap not found\n" ); LOCAL_PrintHeap(ds); return 0; } arena = pInfo->first; pArena = ARENA_PTR( ptr, arena ); for (;;) { arena = pArena->free_next; pArena = ARENA_PTR( ptr, arena ); if (arena == pArena->free_next) break; if (pArena->size >= size) { if (!(flags & LMEM_MOVEABLE)) return arena; else found = arena; } } if (found) return found; TRACE("not enough space\n" ); LOCAL_PrintHeap(ds); return 0; } /*********************************************************************** * get_heap_name */ static const char *get_heap_name( WORD ds ) { HINSTANCE16 inst = LoadLibrary16( "GDI" ); if (ds == GlobalHandleToSel16( inst )) { FreeLibrary16( inst ); return "GDI"; } FreeLibrary16( inst ); inst = LoadLibrary16( "USER" ); if (ds == GlobalHandleToSel16( inst )) { FreeLibrary16( inst ); return "USER"; } FreeLibrary16( inst ); return "local"; } SEGPTR WINAPI K32WOWGlobalLock16(HGLOBAL16 handle); /*********************************************************************** * LOCAL_GetBlock * The segment may get moved around in this function, so all callers * should reset their pointer variables. */ static HLOCAL16 LOCAL_GetBlock( HANDLE16 ds, DWORD size, WORD flags ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALARENA *pArena; WORD arena; if (!(pInfo = LOCAL_GetHeap( ds ))) { DWORD addr = K32WOWGlobalLock16(ds); if (addr) { LocalInit16(ds, addr & 0xFFFF, (addr & 0xFFFF) + GlobalSize16(ds)); GlobalUnlock16(ds); pInfo = LOCAL_GetHeap(ds); } else { ERR("Local heap not found\n"); LOCAL_PrintHeap(ds); return 0; } } size += ARENA_HEADER_SIZE; size = LALIGN( max( size, sizeof(LOCALARENA) ) ); if (size >= 0x10000) { return 0; } #if 0 notify_done: #endif /* Find a suitable free block */ arena = LOCAL_FindFreeBlock( ds, size, flags ); if (arena == 0) { /* no space: try to make some */ LOCAL_Compact( ds, size, flags ); arena = LOCAL_FindFreeBlock( ds, size, flags ); } if (arena == 0) { /* still no space: try to grow the segment */ DWORD new_heap_size = GlobalSize16(ds) + size + pInfo->extra - ARENA_PTR(ptr, pInfo->last)->size + 0x24 /* FIXME: It is not perfect. */; if (!(LOCAL_GrowHeap( ds, min(0x10000, new_heap_size) ))) { #if 0 /* FIXME: doesn't work correctly yet */ if (call_notify_func(pInfo->notify, LN_OUTOFMEM, ds - 20, size)) /* FIXME: "size" correct ? (should indicate bytes needed) */ goto notify_done; #endif WARN( "not enough space in %s heap %04x for %d bytes\n", get_heap_name(ds), ds, size ); return 0; } ptr = MapSL( MAKESEGPTR( ds, 0 ) ); pInfo = LOCAL_GetHeap( ds ); arena = LOCAL_FindFreeBlock( ds, size, flags ); } if (arena == 0) { WARN( "not enough space in %s heap %04x for %d bytes\n", get_heap_name(ds), ds, size ); #if 0 /* FIXME: "size" correct ? (should indicate bytes needed) */ if (call_notify_func(pInfo->notify, LN_OUTOFMEM, ds, size)) goto notify_done; #endif return 0; } /* Make a block out of the free arena */ pArena = ARENA_PTR( ptr, arena ); TRACE("size = %04x, arena %04x size %04x\n", size, arena, pArena->size ); if (flags & LMEM_MOVEABLE) { WORD narena = LOCAL_ShrinkArena( ds, arena, size, TRUE ); if (narena == arena) LOCAL_RemoveFreeBlock( ptr, arena ); arena = narena; pArena = ARENA_PTR( ptr, arena ); } else { LOCAL_RemoveFreeBlock( ptr, arena ); LOCAL_ShrinkArena( ds, arena, size, FALSE ); } if (flags & LMEM_ZEROINIT) memset((char *)pArena + ARENA_HEADER_SIZE, 0, pArena->next - arena - ARENA_HEADER_SIZE); return arena + ARENA_HEADER_SIZE; } /*********************************************************************** * LOCAL_NewHTable */ static BOOL16 LOCAL_NewHTable( HANDLE16 ds ) { char *ptr; LOCALHEAPINFO *pInfo; LOCALHANDLEENTRY *pEntry; HLOCAL16 handle; int i; TRACE("\n" ); if (!(pInfo = LOCAL_GetHeap( ds ))) { ERR("Local heap not found\n"); LOCAL_PrintHeap(ds); return FALSE; } if (!(handle = LOCAL_GetBlock( ds, pInfo->hdelta * sizeof(LOCALHANDLEENTRY) + 2 * sizeof(WORD), LMEM_FIXED ))) return FALSE; if (!(ptr = MapSL( MAKESEGPTR( ds, 0 ) ))) ERR("ptr == NULL after GetBlock.\n"); if (!(pInfo = LOCAL_GetHeap( ds ))) ERR("pInfo == NULL after GetBlock.\n"); /* Fill the entry table */ *(WORD *)(ptr + handle) = pInfo->hdelta; pEntry = (LOCALHANDLEENTRY *)(ptr + handle + sizeof(WORD)); for (i = pInfo->hdelta; i > 0; i--, pEntry++) { pEntry->lock = pEntry->flags = 0xff; pEntry->addr = 0; } *(WORD *)pEntry = pInfo->htable; pInfo->htable = handle; return TRUE; } /*********************************************************************** * LOCAL_GetNewHandleEntry */ static HLOCAL16 LOCAL_GetNewHandleEntry( HANDLE16 ds ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALHANDLEENTRY *pEntry = NULL; WORD table; if (!(pInfo = LOCAL_GetHeap( ds ))) { ERR("Local heap not found\n"); LOCAL_PrintHeap(ds); return 0; } /* Find a free slot in existing tables */ table = pInfo->htable; while (table) { WORD count = *(WORD *)(ptr + table); pEntry = (LOCALHANDLEENTRY *)(ptr + table + sizeof(WORD)); for (; count > 0; count--, pEntry++) if (pEntry->lock == 0xff) break; if (count) break; table = *(WORD *)pEntry; } if (!table) /* We need to create a new table */ { if (!LOCAL_NewHTable( ds )) return 0; ptr = MapSL( MAKESEGPTR( ds, 0 ) ); pInfo = LOCAL_GetHeap( ds ); pEntry = (LOCALHANDLEENTRY *)(ptr + pInfo->htable + sizeof(WORD)); } /* Now allocate this entry */ pEntry->lock = 0; pEntry->flags = 0; TRACE("(%04x): %04x\n", ds, ((char *)pEntry - ptr) ); return (HLOCAL16)((char *)pEntry - ptr); } /*********************************************************************** * LOCAL_FreeHandleEntry * * Free a handle table entry. */ static void LOCAL_FreeHandleEntry( HANDLE16 ds, HLOCAL16 handle ) { char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle); LOCALHEAPINFO *pInfo; WORD *pTable; WORD table, count, i; if (!(pInfo = LOCAL_GetHeap( ds ))) return; /* Find the table where this handle comes from */ pTable = &pInfo->htable; while (*pTable) { WORD size = (*(WORD *)(ptr + *pTable)) * sizeof(LOCALHANDLEENTRY); if ((handle >= *pTable + sizeof(WORD)) && (handle < *pTable + sizeof(WORD) + size)) break; /* Found it */ pTable = (WORD *)(ptr + *pTable + sizeof(WORD) + size); } if (!*pTable) { ERR("Invalid entry %04x\n", handle); LOCAL_PrintHeap( ds ); return; } /* Make the entry free */ pEntry->addr = 0; /* just in case */ pEntry->lock = 0xff; pEntry->flags = 0xff; /* Now check if all entries in this table are free */ table = *pTable; pEntry = (LOCALHANDLEENTRY *)(ptr + table + sizeof(WORD)); count = *(WORD *)(ptr + table); for (i = count; i > 0; i--, pEntry++) if (pEntry->lock != 0xff) return; /* Remove the table from the linked list and free it */ TRACE("(%04x): freeing table %04x\n", ds, table); *pTable = *(WORD *)pEntry; LOCAL_FreeArena( ds, ARENA_HEADER( table ) ); } /*********************************************************************** * LocalFree (KERNEL.7) */ HLOCAL16 WINAPI LocalFree16( HLOCAL16 handle ) { HANDLE16 ds = CURRENT_DS; char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); TRACE("%04x ds=%04x\n", handle, ds ); if (!handle) { WARN("Handle is 0.\n" ); return 0; } #ifdef HEAP_VALIDATE if (!LOCAL_Validate(ds, handle)) return handle; #endif if (HANDLE_FIXED( handle )) { if (!LOCAL_FreeArena( ds, ARENA_HEADER( handle ) )) return 0; /* OK */ else return handle; /* couldn't free it */ } else { LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle); if (pEntry->flags != (LMEM_DISCARDED >> 8)) { TRACE("real block at %04x\n", pEntry->addr ); if (LOCAL_FreeArena( ds, ARENA_HEADER(pEntry->addr - MOVEABLE_PREFIX) )) return handle; /* couldn't free it */ } LOCAL_FreeHandleEntry( ds, handle ); return 0; /* OK */ } } /*********************************************************************** * LocalAlloc (KERNEL.5) */ HLOCAL16 WINAPI LocalAlloc16( UINT16 flags, WORD size ) { HANDLE16 ds = CURRENT_DS; HLOCAL16 handle = 0; char *ptr; TRACE("%04x %d ds=%04x\n", flags, size, ds ); if(size > 0 && size <= 4) size = 5; if (flags & LMEM_MOVEABLE) { LOCALHANDLEENTRY *plhe; HLOCAL16 hmem; if(size) { if (!(hmem = LOCAL_GetBlock( ds, size + MOVEABLE_PREFIX, flags ))) goto exit; } else /* We just need to allocate a discarded handle */ hmem = 0; if (!(handle = LOCAL_GetNewHandleEntry( ds ))) { WARN("Couldn't get handle.\n"); if(hmem) LOCAL_FreeArena( ds, ARENA_HEADER(hmem) ); goto exit; } ptr = MapSL( MAKESEGPTR( ds, 0 ) ); plhe = (LOCALHANDLEENTRY *)(ptr + handle); plhe->lock = 0; if(hmem) { plhe->addr = hmem + MOVEABLE_PREFIX; plhe->flags = (BYTE)((flags & 0x0f00) >> 8); *(HLOCAL16 *)(ptr + hmem) = handle; } else { plhe->addr = 0; plhe->flags = LMEM_DISCARDED >> 8; } } else /* FIXED */ { if(size) handle = LOCAL_GetBlock( ds, size, flags ); } exit: CURRENT_STACK16->ecx = handle; /* must be returned in cx too */ return handle; } /*********************************************************************** * LocalReAlloc (KERNEL.6) */ HLOCAL16 WINAPI LocalReAlloc16( HLOCAL16 handle, WORD size, UINT16 flags ) { HANDLE16 ds = CURRENT_DS; char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; LOCALARENA *pArena, *pNext; LOCALHANDLEENTRY *pEntry = NULL; WORD arena, oldsize; HLOCAL16 hmem, blockhandle; LONG nextarena; if (!handle) return 0; if(HANDLE_MOVEABLE(handle) && ((LOCALHANDLEENTRY *)(ptr + handle))->lock == 0xff) /* An unused handle */ return 0; TRACE("%04x %d %04x ds=%04x\n", handle, size, flags, ds ); if (!(pInfo = LOCAL_GetHeap( ds ))) return 0; if (HANDLE_FIXED( handle )) blockhandle = handle; else { pEntry = (LOCALHANDLEENTRY *) (ptr + handle); if(pEntry->flags == (LMEM_DISCARDED >> 8)) { HLOCAL16 hl; if(pEntry->addr) WARN("Dicarded block has non-zero addr.\n"); TRACE("ReAllocating discarded block\n"); if(size <= 4) size = 5; if (!(hl = LOCAL_GetBlock( ds, size + MOVEABLE_PREFIX, flags))) return 0; ptr = MapSL( MAKESEGPTR( ds, 0 ) ); /* Reload ptr */ pEntry = (LOCALHANDLEENTRY *) (ptr + handle); pEntry->addr = hl + MOVEABLE_PREFIX; pEntry->flags = 0; pEntry->lock = 0; *(HLOCAL16 *)(ptr + hl) = handle; return handle; } if (((blockhandle = pEntry->addr - MOVEABLE_PREFIX) & 3) != 0) { ERR("(%04x,%04x): invalid handle\n", ds, handle ); return 0; } if (*(HLOCAL16 *)(ptr + blockhandle) != handle) { ERR("Back ptr to handle is invalid\n"); return 0; } } if (flags & LMEM_MODIFY) { if (HANDLE_MOVEABLE(handle)) { pEntry = (LOCALHANDLEENTRY *)(ptr + handle); pEntry->flags = (flags & 0x0f00) >> 8; TRACE("Changing flags to %x.\n", pEntry->flags); } return handle; } if (!size) { if (flags & LMEM_MOVEABLE) { if (HANDLE_FIXED(handle)) { TRACE("Freeing fixed block.\n"); return LocalFree16( handle ); } else /* Moveable block */ { pEntry = (LOCALHANDLEENTRY *)(ptr + handle); if (pEntry->lock == 0) { /* discards moveable blocks */ TRACE("Discarding block\n"); LOCAL_FreeArena(ds, ARENA_HEADER(pEntry->addr - MOVEABLE_PREFIX)); pEntry->addr = 0; pEntry->flags = (LMEM_DISCARDED >> 8); return handle; } } return 0; } else if(flags == 0) { pEntry = (LOCALHANDLEENTRY *)(ptr + handle); if (pEntry->lock == 0) { /* Frees block */ return LocalFree16( handle ); } } return 0; } arena = ARENA_HEADER( blockhandle ); TRACE("arena is %04x\n", arena ); pArena = ARENA_PTR( ptr, arena ); if(size <= 4) size = 5; if(HANDLE_MOVEABLE(handle)) size += MOVEABLE_PREFIX; oldsize = pArena->next - arena - ARENA_HEADER_SIZE; nextarena = LALIGN(blockhandle + size); /* Check for size reduction */ if (nextarena <= pArena->next) { TRACE("size reduction, making new free block\n"); LOCAL_ShrinkArena(ds, arena, nextarena - arena, FALSE); TRACE("returning %04x\n", handle ); return handle; } /* Check if the next block is free and large enough */ pNext = ARENA_PTR( ptr, pArena->next ); if (((pNext->prev & 3) == LOCAL_ARENA_FREE) && (nextarena <= pNext->next)) { TRACE("size increase, making new free block\n"); LOCAL_GrowArenaUpward(ds, arena, nextarena - arena); if (flags & LMEM_ZEROINIT) { char *oldend = (char *)pArena + ARENA_HEADER_SIZE + oldsize; char *newend = ptr + pArena->next; TRACE("Clearing memory from %p to %p (DS -> %p)\n", oldend, newend, ptr); memset(oldend, 0, newend - oldend); } TRACE("returning %04x\n", handle ); return handle; } /* Now we have to allocate a new block, but not if (fixed block or locked block) and no LMEM_MOVEABLE */ if (!(flags & LMEM_MOVEABLE)) { if (HANDLE_FIXED(handle)) { ERR("Needed to move fixed block, but LMEM_MOVEABLE not specified.\n"); return 0; } else { if(((LOCALHANDLEENTRY *)(ptr + handle))->lock != 0) { ERR("Needed to move locked block, but LMEM_MOVEABLE not specified.\n"); return 0; } } } hmem = LOCAL_GetBlock( ds, size, flags ); ptr = MapSL( MAKESEGPTR( ds, 0 )); /* Reload ptr */ if(HANDLE_MOVEABLE(handle)) /* LOCAL_GetBlock might have triggered */ { /* a compaction, which might in turn have */ pEntry = (LOCALHANDLEENTRY *)(ptr + handle); blockhandle = pEntry->addr - MOVEABLE_PREFIX; /* moved the very block we are resizing */ arena = ARENA_HEADER( blockhandle ); /* thus, we reload arena, too */ } if (!hmem) { int blksize = oldsize; LOCALARENA *pPrev = ARENA_PTR( ptr, pArena->prev & ~3 ); if ((pPrev->prev & 3) == LOCAL_ARENA_FREE) blksize += pPrev->size + ARENA_HEADER_SIZE; if ((pNext->prev & 3) == LOCAL_ARENA_FREE) blksize += pNext->size + ARENA_HEADER_SIZE; if (blksize >= size) { /* Remove the block from the heap and try again */ LPSTR buffer = HeapAlloc( GetProcessHeap(), 0, oldsize ); if (!buffer) return 0; memcpy( buffer, ptr + arena + ARENA_HEADER_SIZE, oldsize ); LOCAL_FreeArena( ds, arena ); if (!(hmem = LOCAL_GetBlock( ds, size, flags ))) { // shouldn't happen if (!(hmem = LOCAL_GetBlock( ds, oldsize, flags ))) { ERR("Can't restore saved block\n" ); HeapFree( GetProcessHeap(), 0, buffer ); return 0; } size = oldsize; } ptr = MapSL( MAKESEGPTR( ds, 0 ) ); /* Reload ptr */ memcpy( ptr + hmem, buffer, oldsize ); HeapFree( GetProcessHeap(), 0, buffer ); } } else { memcpy( ptr + hmem, ptr + (arena + ARENA_HEADER_SIZE), oldsize ); LOCAL_FreeArena( ds, arena ); } if (HANDLE_MOVEABLE( handle )) { TRACE("fixing handle\n"); pEntry = (LOCALHANDLEENTRY *)(ptr + handle); pEntry->addr = hmem + MOVEABLE_PREFIX; /* Back ptr should still be correct */ if(*(HLOCAL16 *)(ptr + hmem) != handle) ERR("back ptr is invalid.\n"); hmem = handle; } if (size == oldsize) hmem = 0; /* Realloc failed */ TRACE("returning %04x\n", hmem ); return hmem; } /*********************************************************************** * LOCAL_InternalLock */ static HLOCAL16 LOCAL_InternalLock( LPSTR heap, HLOCAL16 handle ) { HLOCAL16 old_handle = handle; if (HANDLE_MOVEABLE(handle)) { LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(heap + handle); if (pEntry->flags == (LMEM_DISCARDED >> 8)) return 0; if (pEntry->lock < 0xfe) pEntry->lock++; handle = pEntry->addr; } TRACE("%04x returning %04x\n", old_handle, handle ); return handle; } /*********************************************************************** * LocalUnlock (KERNEL.9) */ BOOL16 WINAPI LocalUnlock16( HLOCAL16 handle ) { HANDLE16 ds = CURRENT_DS; char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); TRACE("%04x\n", handle ); if (HANDLE_MOVEABLE(handle)) { LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle); if (!pEntry->lock || (pEntry->lock == 0xff)) return FALSE; /* For moveable block, return the new lock count */ /* (see _Windows_Internals_ p. 197) */ return --pEntry->lock; } else return FALSE; } /*********************************************************************** * LocalSize (KERNEL.10) */ UINT16 WINAPI LocalSize16( HLOCAL16 handle ) { HANDLE16 ds = CURRENT_DS; char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALARENA *pArena; TRACE("%04x ds=%04x\n", handle, ds ); if (!handle) return 0; if (HANDLE_MOVEABLE( handle )) { handle = *(WORD *)(ptr + handle); if (!handle) return 0; pArena = ARENA_PTR( ptr, ARENA_HEADER(handle - MOVEABLE_PREFIX) ); } else pArena = ARENA_PTR( ptr, ARENA_HEADER(handle) ); return pArena->next - handle; } /*********************************************************************** * LocalFlags (KERNEL.12) */ UINT16 WINAPI LocalFlags16( HLOCAL16 handle ) { HANDLE16 ds = CURRENT_DS; char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); if (HANDLE_MOVEABLE(handle)) { LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle); TRACE("(%04x,%04x): returning %04x\n", ds, handle, pEntry->lock | (pEntry->flags << 8) ); return pEntry->lock | (pEntry->flags << 8); } else { TRACE("(%04x,%04x): returning 0\n", ds, handle ); return 0; } } /*********************************************************************** * LocalHeapSize (KERNEL.162) */ WORD WINAPI LocalHeapSize16(void) { HANDLE16 ds = CURRENT_DS; LOCALHEAPINFO *pInfo = LOCAL_GetHeap( ds ); return pInfo ? pInfo->last - pInfo->first : 0; } /*********************************************************************** * LocalCountFree (KERNEL.161) */ WORD WINAPI LocalCountFree16(void) { HANDLE16 ds = CURRENT_DS; WORD arena, total; LOCALARENA *pArena; LOCALHEAPINFO *pInfo; char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); if (!(pInfo = LOCAL_GetHeap( ds ))) { ERR("(%04x): Local heap not found\n", ds ); LOCAL_PrintHeap( ds ); return 0; } total = 0; arena = pInfo->first; pArena = ARENA_PTR( ptr, arena ); for (;;) { arena = pArena->free_next; pArena = ARENA_PTR( ptr, arena ); if (arena == pArena->free_next) break; total += pArena->size; } TRACE("(%04x): returning %d\n", ds, total); return total; } /*********************************************************************** * LocalHandle (KERNEL.11) */ HLOCAL16 WINAPI LocalHandle16( WORD addr ) { HANDLE16 ds = CURRENT_DS; char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo; WORD table; if (!(pInfo = LOCAL_GetHeap( ds ))) { ERR("(%04x): Local heap not found\n", ds ); LOCAL_PrintHeap( ds ); return 0; } /* Find the address in the entry tables */ table = pInfo->htable; while (table) { WORD count = *(WORD *)(ptr + table); LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY*)(ptr+table+sizeof(WORD)); for (; count > 0; count--, pEntry++) if (pEntry->addr == addr) return (HLOCAL16)((char *)pEntry - ptr); table = *(WORD *)pEntry; } return (HLOCAL16)addr; /* Fixed block handle is addr */ } /*********************************************************************** * LocalLock (KERNEL.8) * * Note: only the offset part of the pointer is returned by the relay code. */ SEGPTR WINAPI LocalLock16( HLOCAL16 handle ) { WORD ds = CURRENT_DS; char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); return MAKESEGPTR( ds, LOCAL_InternalLock( ptr, handle ) ); } /*********************************************************************** * LocalCompact (KERNEL.13) */ UINT16 WINAPI LocalCompact16( UINT16 minfree ) { TRACE("%04x\n", minfree ); return LOCAL_Compact( CURRENT_DS, minfree, 0 ); } /*********************************************************************** * LocalNotify (KERNEL.14) * * Installs a callback function that is called for local memory events * Callback function prototype is * BOOL16 NotifyFunc(WORD wMsg, HLOCAL16 hMem, WORD wArg) * wMsg: * - LN_OUTOFMEM * NotifyFunc seems to be responsible for allocating some memory, * returns TRUE for success. * wArg = number of bytes needed additionally * - LN_MOVE * hMem = handle; wArg = old mem location * - LN_DISCARD * NotifyFunc seems to be strongly encouraged to return TRUE, * otherwise LogError() gets called. * hMem = handle; wArg = flags */ FARPROC16 WINAPI LocalNotify16( FARPROC16 func ) { LOCALHEAPINFO *pInfo; FARPROC16 oldNotify; HANDLE16 ds = CURRENT_DS; if (!(pInfo = LOCAL_GetHeap( ds ))) { ERR("(%04x): Local heap not found\n", ds ); LOCAL_PrintHeap( ds ); return 0; } TRACE("(%04x): %p\n", ds, func ); FIXME("Half implemented\n"); oldNotify = pInfo->notify; pInfo->notify = func; return oldNotify; } /*********************************************************************** * LocalShrink (KERNEL.121) */ UINT16 WINAPI LocalShrink16( HGLOBAL16 handle, UINT16 newsize ) { WARN("(%04x %04x)\n", handle, newsize ); if (!handle) handle = CURRENT_DS; else handle |= 1; /* always grow */ LOCAL_GrowHeap(handle, 0x10000); return newsize; } /*********************************************************************** * GetHeapSpaces (KERNEL.138) */ DWORD WINAPI GetHeapSpaces16( HMODULE16 module ) { NE_MODULE *pModule; WORD oldDS = CURRENT_DS; DWORD spaces; if (!(pModule = NE_GetPtr( module ))) return 0; CURRENT_DS = GlobalHandleToSel16((NE_SEG_TABLE( pModule ) + pModule->ne_autodata - 1)->hSeg); spaces = MAKELONG( LocalCountFree16(), LocalHeapSize16() ); CURRENT_DS = oldDS; return spaces; } /*********************************************************************** * LocalHandleDelta (KERNEL.310) */ WORD WINAPI LocalHandleDelta16( WORD delta ) { LOCALHEAPINFO *pInfo; if (!(pInfo = LOCAL_GetHeap( CURRENT_DS ))) { ERR("Local heap not found\n"); LOCAL_PrintHeap( CURRENT_DS ); return 0; } if (delta) pInfo->hdelta = delta; TRACE("returning %04x\n", pInfo->hdelta); return pInfo->hdelta; } /*********************************************************************** * 32-bit local heap functions (Win95; undocumented) */ /*********************************************************************** * K208 (KERNEL.208) */ HANDLE WINAPI Local32Init16( WORD segment, DWORD tableSize, DWORD heapSize, DWORD flags ) { DWORD totSize, segSize = 0; LPBYTE base; LOCAL32HEADER *header; HANDLE heap; WORD *selectorTable; WORD selectorEven, selectorOdd; int i, nrBlocks; /* Determine new heap size */ if ( segment ) { if ( (segSize = GetSelectorLimit16( segment )) == 0 ) return 0; else segSize++; } if ( heapSize == (DWORD)-1 ) heapSize = 1024*1024; /* FIXME */ heapSize = (heapSize + 0xffff) & 0xffff0000; segSize = (segSize + 0x0fff) & 0xfffff000; totSize = segSize + HTABLE_SIZE + heapSize; /* Allocate memory and initialize heap */ if ( !(base = VirtualAlloc( NULL, totSize, MEM_RESERVE, PAGE_READWRITE )) ) return 0; if ( !VirtualAlloc( base, segSize + HTABLE_PAGESIZE, MEM_COMMIT, PAGE_READWRITE ) ) { VirtualFree( base, 0, MEM_RELEASE ); return 0; } if (!(heap = RtlCreateHeap( 0, base + segSize + HTABLE_SIZE, heapSize, 0x10000, NULL, NULL ))) { VirtualFree( base, 0, MEM_RELEASE ); return 0; } /* Set up header and handle table */ header = (LOCAL32HEADER *)(base + segSize); header->base = base; header->limit = HTABLE_PAGESIZE-1; header->flags = 0; header->magic = LOCAL32_MAGIC; header->heap = heap; header->freeListFirst[0] = sizeof(LOCAL32HEADER); header->freeListLast[0] = HTABLE_PAGESIZE - 4; header->freeListSize[0] = (HTABLE_PAGESIZE - sizeof(LOCAL32HEADER)) / 4; for (i = header->freeListFirst[0]; i < header->freeListLast[0]; i += 4) *(DWORD *)((LPBYTE)header + i) = i+4; header->freeListFirst[1] = 0xffff; /* Set up selector table */ nrBlocks = (totSize + 0x7fff) >> 15; selectorTable = HeapAlloc( header->heap, 0, nrBlocks * 2 ); selectorEven = SELECTOR_AllocBlock( base, totSize, WINE_LDT_FLAGS_DATA ); selectorOdd = SELECTOR_AllocBlock( base + 0x8000, totSize - 0x8000, WINE_LDT_FLAGS_DATA ); if ( !selectorTable || !selectorEven || !selectorOdd ) { HeapFree( header->heap, 0, selectorTable ); if ( selectorEven ) SELECTOR_FreeBlock( selectorEven ); if ( selectorOdd ) SELECTOR_FreeBlock( selectorOdd ); HeapDestroy( header->heap ); VirtualFree( base, 0, MEM_RELEASE ); return 0; } header->selectorTableOffset = (LPBYTE)selectorTable - header->base; header->selectorTableSize = nrBlocks * 4; /* ??? Win95 does it this way! */ header->selectorDelta = selectorEven - selectorOdd; header->segment = segment? segment : selectorEven; for (i = 0; i < nrBlocks; i++) selectorTable[i] = (i & 1)? selectorOdd + ((i >> 1) << __AHSHIFT) : selectorEven + ((i >> 1) << __AHSHIFT); /* Move old segment */ if ( segment ) { /* FIXME: This is somewhat ugly and relies on implementation details about 16-bit global memory handles ... */ LPBYTE oldBase = (LPBYTE)GetSelectorBase( segment ); memcpy( base, oldBase, segSize ); GLOBAL_MoveBlock( segment, base, totSize ); HeapFree( GetProcessHeap(), 0, oldBase ); } return header; } /*********************************************************************** * Local32_SearchHandle */ static LPDWORD Local32_SearchHandle( LOCAL32HEADER *header, DWORD addr ) { LPDWORD handle; for ( handle = (LPDWORD)((LPBYTE)header + sizeof(LOCAL32HEADER)); handle < (LPDWORD)((LPBYTE)header + header->limit); handle++) { if (*handle == addr) return handle; } return NULL; } /*********************************************************************** * Local32_ToHandle */ static VOID Local32_ToHandle( LOCAL32HEADER *header, INT16 type, DWORD addr, LPDWORD *handle, LPBYTE *ptr ) { *handle = NULL; *ptr = NULL; switch (type) { case -2: /* 16:16 pointer, no handles */ *ptr = MapSL( addr ); *handle = (LPDWORD)*ptr; break; case -1: /* 32-bit offset, no handles */ *ptr = header->base + addr; *handle = (LPDWORD)*ptr; break; case 0: /* handle */ if ( addr >= sizeof(LOCAL32HEADER) && addr < header->limit && !(addr & 3) && *(LPDWORD)((LPBYTE)header + addr) >= HTABLE_SIZE ) { *handle = (LPDWORD)((LPBYTE)header + addr); *ptr = header->base + **handle; } break; case 1: /* 16:16 pointer */ *ptr = MapSL( addr ); *handle = Local32_SearchHandle( header, *ptr - header->base ); break; case 2: /* 32-bit offset */ *ptr = header->base + addr; *handle = Local32_SearchHandle( header, *ptr - header->base ); break; } } /*********************************************************************** * Local32_FromHandle */ static VOID Local32_FromHandle( LOCAL32HEADER *header, INT16 type, DWORD *addr, LPDWORD handle, LPBYTE ptr ) { *addr = 0; switch (type) { case -2: /* 16:16 pointer */ case 1: { WORD *selTable = (LPWORD)(header->base + header->selectorTableOffset); DWORD offset = ptr - header->base; *addr = MAKELONG( offset & 0x7fff, selTable[offset >> 15] ); } break; case -1: /* 32-bit offset */ case 2: *addr = ptr - header->base; break; case 0: /* handle */ *addr = (LPBYTE)handle - (LPBYTE)header; break; } } /*********************************************************************** * K209 (KERNEL.209) */ DWORD WINAPI Local32Alloc16( HANDLE heap, DWORD size, INT16 type, DWORD flags ) { LOCAL32HEADER *header = heap; LPDWORD handle; LPBYTE ptr; DWORD addr; /* Allocate memory */ ptr = HeapAlloc( header->heap, (flags & LMEM_MOVEABLE)? HEAP_ZERO_MEMORY : 0, size ); if (!ptr) return 0; /* Allocate handle if requested */ if (type >= 0) { int page, i; /* Find first page of handle table with free slots */ for (page = 0; page < HTABLE_NPAGES; page++) if (header->freeListFirst[page] != 0) break; if (page == HTABLE_NPAGES) { WARN("Out of handles!\n" ); HeapFree( header->heap, 0, ptr ); return 0; } /* If virgin page, initialize it */ if (header->freeListFirst[page] == 0xffff) { if ( !VirtualAlloc( (LPBYTE)header + (page << 12), 0x1000, MEM_COMMIT, PAGE_READWRITE ) ) { WARN("Cannot grow handle table!\n" ); HeapFree( header->heap, 0, ptr ); return 0; } header->limit += HTABLE_PAGESIZE; header->freeListFirst[page] = 0; header->freeListLast[page] = HTABLE_PAGESIZE - 4; header->freeListSize[page] = HTABLE_PAGESIZE / 4; for (i = 0; i < HTABLE_PAGESIZE; i += 4) *(DWORD *)((LPBYTE)header + i) = i+4; if (page < HTABLE_NPAGES-1) header->freeListFirst[page+1] = 0xffff; } /* Allocate handle slot from page */ handle = (LPDWORD)((LPBYTE)header + header->freeListFirst[page]); if (--header->freeListSize[page] == 0) header->freeListFirst[page] = header->freeListLast[page] = 0; else header->freeListFirst[page] = *handle; /* Store 32-bit offset in handle slot */ *handle = ptr - header->base; } else { handle = (LPDWORD)ptr; header->flags |= 1; } /* Convert handle to requested output type */ Local32_FromHandle( header, type, &addr, handle, ptr ); return addr; } /*********************************************************************** * K210 (KERNEL.210) */ DWORD WINAPI Local32ReAlloc16( HANDLE heap, DWORD addr, INT16 type, DWORD size, DWORD flags ) { LOCAL32HEADER *header = heap; LPDWORD handle; LPBYTE ptr; if (!addr) return Local32Alloc16( heap, size, type, flags ); /* Retrieve handle and pointer */ Local32_ToHandle( header, type, addr, &handle, &ptr ); if (!handle) return FALSE; /* Reallocate memory block */ ptr = HeapReAlloc( header->heap, (flags & LMEM_MOVEABLE)? HEAP_ZERO_MEMORY : 0, ptr, size ); if (!ptr) return 0; /* Modify handle */ if (type >= 0) *handle = ptr - header->base; else handle = (LPDWORD)ptr; /* Convert handle to requested output type */ Local32_FromHandle( header, type, &addr, handle, ptr ); return addr; } /*********************************************************************** * K211 (KERNEL.211) */ BOOL WINAPI Local32Free16( HANDLE heap, DWORD addr, INT16 type ) { LOCAL32HEADER *header = heap; LPDWORD handle; LPBYTE ptr; /* Retrieve handle and pointer */ Local32_ToHandle( header, type, addr, &handle, &ptr ); if (!handle) return FALSE; /* Free handle if necessary */ if (type >= 0) { int offset = (LPBYTE)handle - (LPBYTE)header; int page = offset >> 12; /* Return handle slot to page free list */ if (header->freeListSize[page]++ == 0) header->freeListFirst[page] = header->freeListLast[page] = offset; else *(LPDWORD)((LPBYTE)header + header->freeListLast[page]) = offset, header->freeListLast[page] = offset; *handle = 0; /* Shrink handle table when possible */ while (page > 0 && header->freeListSize[page] == HTABLE_PAGESIZE / 4) { if ( VirtualFree( (LPBYTE)header + (header->limit & ~(HTABLE_PAGESIZE-1)), HTABLE_PAGESIZE, MEM_DECOMMIT ) ) break; header->limit -= HTABLE_PAGESIZE; header->freeListFirst[page] = 0xffff; page--; } } /* Free memory */ return HeapFree( header->heap, 0, ptr ); } /*********************************************************************** * K213 (KERNEL.213) */ DWORD WINAPI Local32Translate16( HANDLE heap, DWORD addr, INT16 type1, INT16 type2 ) { LOCAL32HEADER *header = heap; LPDWORD handle; LPBYTE ptr; Local32_ToHandle( header, type1, addr, &handle, &ptr ); if (!handle) return 0; Local32_FromHandle( header, type2, &addr, handle, ptr ); return addr; } /*********************************************************************** * K214 (KERNEL.214) */ DWORD WINAPI Local32Size16( HANDLE heap, DWORD addr, INT16 type ) { LOCAL32HEADER *header = heap; LPDWORD handle; LPBYTE ptr; Local32_ToHandle( header, type, addr, &handle, &ptr ); if (!handle) return 0; return HeapSize( header->heap, 0, ptr ); } /*********************************************************************** * K215 (KERNEL.215) */ BOOL WINAPI Local32ValidHandle16( HANDLE heap, WORD addr ) { LOCAL32HEADER *header = heap; LPDWORD handle; LPBYTE ptr; Local32_ToHandle( header, 0, addr, &handle, &ptr ); return handle != NULL; } /*********************************************************************** * K229 (KERNEL.229) */ WORD WINAPI Local32GetSegment16( HANDLE heap ) { LOCAL32HEADER *header = heap; return header->segment; } /*********************************************************************** * Local32_GetHeap */ static LOCAL32HEADER *Local32_GetHeap( HGLOBAL16 handle ) { WORD selector = GlobalHandleToSel16( handle ); DWORD base = GetSelectorBase( selector ); DWORD limit = GetSelectorLimit16( selector ); /* Hmmm. This is a somewhat stupid heuristic, but Windows 95 does it this way ... */ if ( limit > 0x10000 && ((LOCAL32HEADER *)base)->magic == LOCAL32_MAGIC ) return (LOCAL32HEADER *)base; base += 0x10000; limit -= 0x10000; if ( limit > 0x10000 && ((LOCAL32HEADER *)base)->magic == LOCAL32_MAGIC ) return (LOCAL32HEADER *)base; return NULL; } /*********************************************************************** * Local32Info (KERNEL.444) */ BOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle ) { PROCESS_HEAP_ENTRY entry; int i; LOCAL32HEADER *header = Local32_GetHeap( handle ); if ( !header ) return FALSE; if ( !pLocal32Info || pLocal32Info->dwSize < sizeof(LOCAL32INFO) ) return FALSE; pLocal32Info->dwMemReserved = 0; pLocal32Info->dwMemCommitted = 0; pLocal32Info->dwTotalFree = 0; pLocal32Info->dwLargestFreeBlock = 0; while (HeapWalk( header->heap, &entry )) { if (entry.wFlags & PROCESS_HEAP_REGION) { pLocal32Info->dwMemReserved += entry.u.Region.dwCommittedSize + entry.u.Region.dwUnCommittedSize; pLocal32Info->dwMemCommitted = entry.u.Region.dwCommittedSize; } else if (!(entry.wFlags & PROCESS_HEAP_ENTRY_BUSY)) { DWORD size = entry.cbData + entry.cbOverhead; pLocal32Info->dwTotalFree += size; if (size > pLocal32Info->dwLargestFreeBlock) pLocal32Info->dwLargestFreeBlock = size; } } pLocal32Info->dwcFreeHandles = 0; for ( i = 0; i < HTABLE_NPAGES; i++ ) { if ( header->freeListFirst[i] == 0xffff ) break; pLocal32Info->dwcFreeHandles += header->freeListSize[i]; } pLocal32Info->dwcFreeHandles += (HTABLE_NPAGES - i) * HTABLE_PAGESIZE/4; return TRUE; } /*********************************************************************** * Local32First (KERNEL.445) */ BOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle ) { FIXME("(%p, %04X): stub!\n", pLocal32Entry, handle ); return FALSE; } /*********************************************************************** * Local32Next (KERNEL.446) */ BOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry ) { FIXME("(%p): stub!\n", pLocal32Entry ); return FALSE; } ================================================ FILE: krnl386/ne_module.c ================================================ /* * NE modules * * Copyright 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include "windef.h" #include "wine/winbase16.h" #include "windows/wownt32.h" #include "winternl.h" #include "kernel16_private.h" #include "wine/exception.h" #include "wine/debug.h" #include "winuser.h" #include "shellapi.h" #include "shlwapi.h" #include "../toolhelp/toolhelp.h" WINE_DEFAULT_DEBUG_CHANNEL(module); WINE_DECLARE_DEBUG_CHANNEL(loaddll); WINE_DECLARE_DEBUG_CHANNEL(relay); WINE_DECLARE_DEBUG_CHANNEL(winediag); #include "pshpack1.h" typedef struct _GPHANDLERDEF { WORD selector; WORD rangeStart; WORD rangeEnd; WORD handler; } GPHANDLERDEF; #include "poppack.h" /* * Segment table entry */ struct ne_segment_table_entry_s { WORD seg_data_offset; /* Sector offset of segment data */ WORD seg_data_length; /* Length of segment data */ WORD seg_flags; /* Flags associated with this segment */ WORD min_alloc; /* Minimum allocation size for this */ }; #define hFirstModule (pThhook->hExeHead) static HINSTANCE16 NE_LoadModule( LPCSTR name, BOOL lib_only ); static BOOL16 NE_FreeModule( HMODULE16 hModule, BOOL call_wep, BOOL cleanup ); static HINSTANCE16 MODULE_LoadModule16( LPCSTR libname, BOOL implicit, BOOL lib_only, SEGPTR cmdline ); static HMODULE16 NE_GetModuleByFilename( LPCSTR name ); BOOL16 WINAPI WIN32_GlobalUnlock16(HGLOBAL16 handle); /* patch all the flat cs references of the code segment if necessary */ static inline void patch_code_segment( NE_MODULE *pModule ) { int i; CALLFROM16 *call; SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ); for (i = 0; i < pModule->ne_cseg; i++, pSeg++) if (!(pSeg->flags & NE_SEGFLAGS_DATA)) break; /* found the code segment */ call = GlobalLock16( pSeg->hSeg ); /* patch glue code address and code selector */ for (i = 0; call[i].pushl == 0x6866; i++) { if (call[i].ret[0] == 0xca || call[i].ret[0] == 0xcb) /* register entry point? */ call[i].glue = __wine_call_from_16_regs; else call[i].glue = __wine_call_from_16; call[i].flatcs = wine_get_cs(); } if (TRACE_ON(relay)) /* patch relay functions to all point to relay_call_from_16 */ for (i = 0; call[i].pushl == 0x6866; i++) call[i].relay = relay_call_from_16; } /*********************************************************************** * contains_path */ static inline BOOL contains_path( LPCSTR name ) { return ((*name && (name[1] == ':')) || strchr(name, '/') || strchr(name, '\\')); } /*********************************************************************** * NE_strcasecmp * * locale-independent case conversion for module lookups */ static int NE_strcasecmp( const char *str1, const char *str2 ) { int ret = 0; for ( ; ; str1++, str2++) if ((ret = RtlUpperChar(*str1) - RtlUpperChar(*str2)) || !*str1) break; return ret; } /*********************************************************************** * NE_strncasecmp * * locale-independent case conversion for module lookups */ static int NE_strncasecmp( const char *str1, const char *str2, int len ) { int ret = 0; for ( ; len > 0; len--, str1++, str2++) if ((ret = RtlUpperChar(*str1) - RtlUpperChar(*str2)) || !*str1) break; return ret; } /*********************************************************************** * NE_GetPtr */ NE_MODULE *NE_GetPtr( HMODULE16 hModule ) { return GlobalLock16( GetExePtr(hModule) ); } /********************************************************************** * NE_RegisterModule */ static void NE_RegisterModule( NE_MODULE *pModule ) { pModule->next = hFirstModule; hFirstModule = pModule->self; } /*********************************************************************** * NE_DumpModule */ void NE_DumpModule( HMODULE16 hModule ) { int i, ordinal; SEGTABLEENTRY *pSeg; BYTE *pstr; WORD *pword; NE_MODULE *pModule; ET_BUNDLE *bundle; ET_ENTRY *entry; if (!(pModule = NE_GetPtr( hModule ))) { ERR( "**** %04x is not a module handle\n", hModule ); return; } /* Dump the module info */ TRACE( "---\n" ); TRACE( "Module %04x:\n", hModule ); TRACE( "count=%d flags=%04x heap=%d stack=%d\n", pModule->count, pModule->ne_flags, pModule->ne_heap, pModule->ne_stack ); TRACE( "cs:ip=%04x:%04x ss:sp=%04x:%04x ds=%04x nb seg=%d modrefs=%d\n", SELECTOROF(pModule->ne_csip), OFFSETOF(pModule->ne_csip), SELECTOROF(pModule->ne_sssp), OFFSETOF(pModule->ne_sssp), pModule->ne_autodata, pModule->ne_cseg, pModule->ne_cmod ); TRACE( "os_flags=%d swap_area=%d version=%04x\n", pModule->ne_exetyp, pModule->ne_swaparea, pModule->ne_expver ); if (pModule->ne_flags & NE_FFLAGS_WIN32) TRACE( "PE module=%p\n", pModule->module32 ); /* Dump the file info */ TRACE( "---\n" ); TRACE( "Filename: '%s'\n", NE_MODULE_NAME(pModule) ); /* Dump the segment table */ TRACE( "---\n" ); TRACE( "Segment table:\n" ); pSeg = NE_SEG_TABLE( pModule ); for (i = 0; i < pModule->ne_cseg; i++, pSeg++) TRACE( "%02x: pos=%d size=%d flags=%04x minsize=%d hSeg=%04x\n", i + 1, pSeg->filepos, pSeg->size, pSeg->flags, pSeg->minsize, pSeg->hSeg ); /* Dump the resource table */ TRACE( "---\n" ); TRACE( "Resource table:\n" ); if (pModule->ne_rsrctab) { pword = (WORD *)((BYTE *)pModule + pModule->ne_rsrctab); TRACE( "Alignment: %d\n", *pword++ ); while (*pword) { NE_TYPEINFO *ptr = (NE_TYPEINFO *)pword; NE_NAMEINFO *pname = (NE_NAMEINFO *)(ptr + 1); TRACE( "id=%04x count=%d\n", ptr->type_id, ptr->count ); for (i = 0; i < ptr->count; i++, pname++) TRACE( "offset=%d len=%d id=%04x\n", pname->offset, pname->length, pname->id ); pword = (WORD *)pname; } } else TRACE( "None\n" ); /* Dump the resident name table */ TRACE( "---\n" ); TRACE( "Resident-name table:\n" ); pstr = (BYTE*) pModule + pModule->ne_restab; while (*pstr) { TRACE( "%*.*s: %d\n", *pstr, *pstr, pstr + 1, *(WORD *)(pstr + *pstr + 1) ); pstr += *pstr + 1 + sizeof(WORD); } /* Dump the module reference table */ TRACE( "---\n" ); TRACE( "Module ref table:\n" ); if (pModule->ne_modtab) { pword = (WORD *)((BYTE *)pModule + pModule->ne_modtab); for (i = 0; i < pModule->ne_cmod; i++, pword++) { char name[10]; GetModuleName16( *pword, name, sizeof(name) ); TRACE( "%d: %04x -> '%s'\n", i, *pword, name ); } } else TRACE( "None\n" ); /* Dump the entry table */ TRACE( "---\n" ); TRACE( "Entry table:\n" ); bundle = (ET_BUNDLE *)((BYTE *)pModule+pModule->ne_enttab); do { entry = (ET_ENTRY *)((BYTE *)bundle+6); TRACE( "Bundle %d-%d: %02x\n", bundle->first, bundle->last, entry->type); ordinal = bundle->first; while (ordinal < bundle->last) { if (entry->type == 0xff) TRACE("%d: %02x:%04x (moveable)\n", ordinal++, entry->segnum, entry->offs); else TRACE("%d: %02x:%04x (fixed)\n", ordinal++, entry->segnum, entry->offs); entry++; } } while ( (bundle->next) && (bundle = ((ET_BUNDLE *)((BYTE *)pModule + bundle->next))) ); /* Dump the non-resident names table */ TRACE( "---\n" ); TRACE( "Non-resident names table:\n" ); if (pModule->nrname_handle) { pstr = GlobalLock16( pModule->nrname_handle ); while (*pstr) { TRACE( "%*.*s: %d\n", *pstr, *pstr, pstr + 1, *(WORD *)(pstr + *pstr + 1) ); pstr += *pstr + 1 + sizeof(WORD); } } TRACE( "\n" ); } /*********************************************************************** * NE_WalkModules * * Walk the module list and print the modules. */ void NE_WalkModules(void) { HMODULE16 hModule = hFirstModule; MESSAGE( "Module Flags Name\n" ); while (hModule) { NE_MODULE *pModule = NE_GetPtr( hModule ); if (!pModule) { MESSAGE( "Bad module %04x in list\n", hModule ); return; } MESSAGE( " %04x %04x %.*s\n", hModule, pModule->ne_flags, *((char *)pModule + pModule->ne_restab), (char *)pModule + pModule->ne_restab + 1 ); hModule = pModule->next; } } __declspec(dllexport) void NE_DumpAllModules(void) { HMODULE16 hModule = hFirstModule; MESSAGE("Module Flags Name Flag\n"); while (hModule) { NE_MODULE *pModule = NE_GetPtr(hModule); char tab[13] = { ' ', ' ', ' ', ' ', ' ', ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ', ' ' }; if (!pModule) { MESSAGE("Bad module %04x in list\n", hModule); return; } char buffer[1024]; buffer[0] = '\0'; char *cbuf = buffer; if (pModule->ne_flags & NE_FFLAGS_SINGLEDATA) cbuf += sprintf(cbuf, "%s", "SINGLEDATA | "); if (pModule->ne_flags & NE_FFLAGS_MULTIPLEDATA) cbuf += sprintf(cbuf, "%s", "MULTIPLEDATA | "); if (pModule->ne_flags & NE_FFLAGS_WIN32) cbuf += sprintf(cbuf, "%s", "WIN32 | "); if (pModule->ne_flags & NE_FFLAGS_BUILTIN) cbuf += sprintf(cbuf, "%s", "BUILTIN | "); if (pModule->ne_flags & NE_FFLAGS_FRAMEBUF) cbuf += sprintf(cbuf, "%s", "FRAMEBUF | "); if (pModule->ne_flags & NE_FFLAGS_CONSOLE) cbuf += sprintf(cbuf, "%s", "CONSOLE | "); if (pModule->ne_flags & NE_FFLAGS_GUI) cbuf += sprintf(cbuf, "%s", "GUI | "); if (pModule->ne_flags & NE_FFLAGS_SELFLOAD) cbuf += sprintf(cbuf, "%s", "SELFLOAD | "); if (pModule->ne_flags & NE_FFLAGS_LINKERROR) cbuf += sprintf(cbuf, "%s", "LINKERROR | "); if (pModule->ne_flags & NE_FFLAGS_CALLWEP) cbuf += sprintf(cbuf, "%s", "CALLWEP | "); if (pModule->ne_flags & NE_FFLAGS_LIBMODULE) cbuf += sprintf(cbuf, "%s", "LIBMODULE | "); if (cbuf != buffer) { if (cbuf[-1] == ' ' && cbuf[-2] == '|' && cbuf[-3] == ' ') cbuf[-3] = '\0'; } MESSAGE(" %04x\t%04x\t%.*s%.*s%s\n", hModule, pModule->ne_flags, *((char *)pModule + pModule->ne_restab), (char *)pModule + pModule->ne_restab + 1, 12 - *((char *)pModule + pModule->ne_restab), tab, buffer); if (TRACE_ON(module)) NE_DumpModule(hModule); hModule = pModule->next; } } /*********************************************************************** * NE_InitResourceHandler * * Fill in 'resloader' fields in the resource table. */ static void NE_InitResourceHandler( HMODULE16 hModule ) { static FARPROC16 proc; NE_TYPEINFO *pTypeInfo; NE_MODULE *pModule; if (!(pModule = NE_GetPtr( hModule )) || !pModule->ne_rsrctab) return; TRACE("InitResourceHandler[%04x]\n", hModule ); if (!proc) proc = GetProcAddress16( GetModuleHandle16("KERNEL"), "DefResourceHandler" ); pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->ne_rsrctab + 2); while(pTypeInfo->type_id) { memcpy_unaligned( &pTypeInfo->resloader, &proc, sizeof(FARPROC16) ); pTypeInfo = (NE_TYPEINFO *)((char*)(pTypeInfo + 1) + pTypeInfo->count * sizeof(NE_NAMEINFO)); } } /*********************************************************************** * NE_GetOrdinal * * Lookup the ordinal for a given name. */ WORD NE_GetOrdinal( HMODULE16 hModule, const char *name ) { char buffer[256], *p; BYTE *cpnt; BYTE len; NE_MODULE *pModule; if (!(pModule = NE_GetPtr( hModule ))) return 0; if (pModule->ne_flags & NE_FFLAGS_WIN32) return 0; TRACE("(%04x,'%s')\n", hModule, name ); /* First handle names of the form '#xxxx' */ if (name[0] == '#') return atoi( name + 1 ); /* Now copy and uppercase the string */ strcpy( buffer, name ); for (p = buffer; *p; p++) *p = RtlUpperChar(*p); len = p - buffer; /* First search the resident names */ cpnt = (BYTE *)pModule + pModule->ne_restab; /* Skip the first entry (module name) */ cpnt += *cpnt + 1 + sizeof(WORD); while (*cpnt) { if ((*cpnt == len) && !memcmp( cpnt+1, buffer, len )) { WORD ordinal; memcpy( &ordinal, cpnt + *cpnt + 1, sizeof(ordinal) ); TRACE(" Found: ordinal=%d\n", ordinal ); return ordinal; } cpnt += *cpnt + 1 + sizeof(WORD); } /* Now search the non-resident names table */ if (!pModule->nrname_handle) return 0; /* No non-resident table */ cpnt = GlobalLock16( pModule->nrname_handle ); /* Skip the first entry (module description string) */ cpnt += *cpnt + 1 + sizeof(WORD); while (*cpnt) { if ((*cpnt == len) && !memcmp( cpnt+1, buffer, len )) { WORD ordinal; memcpy( &ordinal, cpnt + *cpnt + 1, sizeof(ordinal) ); TRACE(" Found: ordinal=%d\n", ordinal ); return ordinal; } cpnt += *cpnt + 1 + sizeof(WORD); } return 0; } /*********************************************************************** * NE_GetEntryPoint */ FARPROC16 WINAPI NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal ) { return NE_GetEntryPointEx( hModule, ordinal, TRUE ); } /*********************************************************************** * NE_GetEntryPointEx */ FARPROC16 NE_GetEntryPointEx( HMODULE16 hModule, WORD ordinal, BOOL16 snoop ) { NE_MODULE *pModule; WORD sel, offset, i; ET_ENTRY *entry; ET_BUNDLE *bundle; if (!(pModule = NE_GetPtr( hModule ))) return 0; assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab); while ((ordinal < bundle->first + 1) || (ordinal > bundle->last)) { if (!(bundle->next)) return 0; bundle = (ET_BUNDLE *)((BYTE *)pModule + bundle->next); } entry = (ET_ENTRY *)((BYTE *)bundle+6); for (i=0; i < (ordinal - bundle->first - 1); i++) entry++; sel = entry->segnum; memcpy( &offset, &entry->offs, sizeof(WORD) ); if (sel == 0xfe) sel = 0xffff; /* constant entry */ else sel = GlobalHandleToSel16(NE_SEG_TABLE(pModule)[sel-1].hSeg); if (sel==0xffff) return (FARPROC16)MAKESEGPTR( sel, offset ); if (!snoop) return (FARPROC16)MAKESEGPTR( sel, offset ); else return SNOOP16_GetProcAddress16(hModule,ordinal,(FARPROC16)MAKESEGPTR( sel, offset )); } /*********************************************************************** * EntryAddrProc (KERNEL.667) Wine-specific export * * Return the entry point for a given ordinal. */ FARPROC16 WINAPI EntryAddrProc16( HMODULE16 hModule, WORD ordinal ) { FARPROC16 ret = NE_GetEntryPointEx( hModule, ordinal, TRUE ); CURRENT_STACK16->ecx = hModule; /* FIXME: might be incorrect value */ return ret; } /*********************************************************************** * NE_SetEntryPoint * * Change the value of an entry point. Use with caution! * It can only change the offset value, not the selector. */ BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset ) { NE_MODULE *pModule; ET_ENTRY *entry; ET_BUNDLE *bundle; int i; if (!(pModule = NE_GetPtr( hModule ))) return FALSE; assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab); while ((ordinal < bundle->first + 1) || (ordinal > bundle->last)) { bundle = (ET_BUNDLE *)((BYTE *)pModule + bundle->next); if (!bundle->next) return FALSE; } entry = (ET_ENTRY *)((BYTE *)bundle+6); for (i=0; i < (ordinal - bundle->first - 1); i++) entry++; memcpy( &entry->offs, &offset, sizeof(WORD) ); return TRUE; } /*********************************************************************** * build_bundle_data * * Build the entry table bundle data from the on-disk format. Helper for build_module. */ static void *build_bundle_data( NE_MODULE *pModule, void *dest, const BYTE *table ) { ET_BUNDLE *oldbundle, *bundle = dest; ET_ENTRY *entry; BYTE nr_entries, type; memset(bundle, 0, sizeof(ET_BUNDLE)); /* in case no entry table exists */ entry = (ET_ENTRY *)((BYTE *)bundle+6); while ((nr_entries = *table++)) { if ((type = *table++)) { bundle->last += nr_entries; if (type == 0xff) { while (nr_entries--) { entry->type = type; entry->flags = *table++; table += sizeof(WORD); entry->segnum = *table++; entry->offs = *(const WORD *)table; table += sizeof(WORD); entry++; } } else { while (nr_entries--) { entry->type = type; entry->flags = *table++; entry->segnum = type; entry->offs = *(const WORD *)table; table += sizeof(WORD); entry++; } } } else { if (bundle->first == bundle->last) { bundle->first += nr_entries; bundle->last += nr_entries; } else { oldbundle = bundle; oldbundle->next = (char *)entry - (char *)pModule; bundle = (ET_BUNDLE *)entry; bundle->first = bundle->last = oldbundle->last + nr_entries; bundle->next = 0; entry = (ET_ENTRY*)(((BYTE*)entry)+sizeof(ET_BUNDLE)); } } } return entry; } /*********************************************************************** * build_module * * Build the in-memory module from the on-disk data. */ static HMODULE16 build_module( const void *mapping, SIZE_T mapping_size, LPCSTR path ) { const IMAGE_DOS_HEADER *mz_header = mapping; const IMAGE_OS2_HEADER *ne_header; const struct ne_segment_table_entry_s *pSeg; const void *ptr; int i; size_t size; HMODULE16 hModule; NE_MODULE *pModule; BYTE *buffer, *pData, *end; OFSTRUCT *ofs; if (mapping_size < sizeof(*mz_header)) return ERROR_BAD_FORMAT; if (mz_header->e_magic != IMAGE_DOS_SIGNATURE) return ERROR_BAD_FORMAT; ne_header = (const IMAGE_OS2_HEADER *)((const char *)mapping + mz_header->e_lfanew); if (mz_header->e_lfanew + sizeof(*ne_header) > mapping_size) return ERROR_BAD_FORMAT; if (ne_header->ne_magic == IMAGE_NT_SIGNATURE) return 21; /* win32 exe */ if (ne_header->ne_magic == IMAGE_OS2_SIGNATURE_LX) { MESSAGE("Sorry, %s is an OS/2 linear executable (LX) file!\n", path); return 12; } if (ne_header->ne_magic != IMAGE_OS2_SIGNATURE) return ERROR_BAD_FORMAT; /* We now have a valid NE header */ /* check to be able to fall back to loading OS/2 programs as DOS * FIXME: should this check be reversed in order to be less strict? * (only fail for OS/2 ne_exetyp 0x01 here?) */ if (ne_header->ne_exetyp == NE_OSFLAGS_OS2 || ne_header->ne_exetyp == 3 /* DOS executable */) { return ERROR_BAD_FORMAT; } size = sizeof(NE_MODULE) + /* segment table */ ne_header->ne_cseg * sizeof(SEGTABLEENTRY) + /* resource table */ ne_header->ne_restab - ne_header->ne_rsrctab + /* resident names table */ ne_header->ne_modtab - ne_header->ne_restab + /* module ref table */ ne_header->ne_cmod * sizeof(WORD) + /* imported names table */ ne_header->ne_enttab - ne_header->ne_imptab + /* entry table length */ ne_header->ne_cbenttab + /* entry table extra conversion space */ sizeof(ET_BUNDLE) + 2 * (ne_header->ne_cbenttab - ne_header->ne_cmovent*6) + /* loaded file info */ sizeof(OFSTRUCT) - sizeof(ofs->szPathName) + strlen(path) + 1; hModule = GlobalAlloc16( GMEM_FIXED | GMEM_ZEROINIT, size ); if (!hModule) { ERR_(winediag)( "Failed to create module for %s, 16-bit LDT support may be missing.\n", debugstr_a(path) ); return ERROR_BAD_FORMAT; } GLOBAL_SetSeg(hModule, 0, GT_MODULE); FarSetOwner16( hModule, hModule ); pModule = GlobalLock16( hModule ); memcpy( pModule, ne_header, sizeof(*ne_header) ); if (pModule->ne_exetyp != 0x02 && pModule->ne_exetyp != 0x04) ERR("exe type is not windows or windows/386. (typ:%02x, ver:%04x)\n", pModule->ne_exetyp, pModule->ne_expver); /* win95:0x400 */ if (pModule->ne_expver >= 0x500) pModule->ne_expver = 0; pModule->count = 0; /* check programs for default minimal stack size */ if (!(pModule->ne_flags & NE_FFLAGS_LIBMODULE) && (pModule->ne_stack < 0x1400)) pModule->ne_stack = 0x1400; pModule->self = hModule; pModule->mapping = mapping; pModule->mapping_size = mapping_size; pData = (BYTE *)(pModule + 1); /* Clear internal Wine flags in case they are set in the EXE file */ pModule->ne_flags &= ~(NE_FFLAGS_BUILTIN | NE_FFLAGS_WIN32); /* Get the segment table */ pModule->ne_segtab = pData - (BYTE *)pModule; if (!(pSeg = NE_GET_DATA( pModule, mz_header->e_lfanew + ne_header->ne_segtab, ne_header->ne_cseg * sizeof(struct ne_segment_table_entry_s) ))) goto failed; for (i = ne_header->ne_cseg; i > 0; i--, pSeg++) { memcpy( pData, pSeg, sizeof(*pSeg) ); pData += sizeof(SEGTABLEENTRY); } /* Get the resource table */ if (ne_header->ne_rsrctab < ne_header->ne_restab) { pModule->ne_rsrctab = pData - (BYTE *)pModule; if (!NE_READ_DATA( pModule, pData, mz_header->e_lfanew + ne_header->ne_rsrctab, ne_header->ne_restab - ne_header->ne_rsrctab )) goto failed; pData += ne_header->ne_restab - ne_header->ne_rsrctab; } else pModule->ne_rsrctab = 0; /* No resource table */ /* Get the resident names table */ pModule->ne_restab = pData - (BYTE *)pModule; if (!NE_READ_DATA( pModule, pData, mz_header->e_lfanew + ne_header->ne_restab, ne_header->ne_modtab - ne_header->ne_restab )) goto failed; /* The module name is CAPITALIZED. */ for (i = 1; i <= *pData; i++) { pData[i] = toupper(pData[i]); } pData += ne_header->ne_modtab - ne_header->ne_restab; /* Get the module references table */ if (ne_header->ne_cmod > 0) { pModule->ne_modtab = pData - (BYTE *)pModule; if (!NE_READ_DATA( pModule, pData, mz_header->e_lfanew + ne_header->ne_modtab, ne_header->ne_cmod * sizeof(WORD) )) goto failed; pData += ne_header->ne_cmod * sizeof(WORD); } else pModule->ne_modtab = 0; /* No module references */ /* Get the imported names table */ pModule->ne_imptab = pData - (BYTE *)pModule; if (!NE_READ_DATA( pModule, pData, mz_header->e_lfanew + ne_header->ne_imptab, ne_header->ne_enttab - ne_header->ne_imptab )) goto failed; pData += ne_header->ne_enttab - ne_header->ne_imptab; /* Load entry table, convert it to the optimized version used by Windows */ pModule->ne_enttab = pData - (BYTE *)pModule; if (!(ptr = NE_GET_DATA( pModule, mz_header->e_lfanew + ne_header->ne_enttab, ne_header->ne_cbenttab ))) goto failed; end = build_bundle_data( pModule, pData, ptr ); pData += ne_header->ne_cbenttab + sizeof(ET_BUNDLE) + 2 * (ne_header->ne_cbenttab - ne_header->ne_cmovent*6); if (end > pData) { FIXME( "not enough space for entry table for %s\n", debugstr_a(path) ); goto failed; } /* Store the filename information */ pModule->fileinfo = pData - (BYTE *)pModule; ofs = (OFSTRUCT *)pData; ofs->cBytes = sizeof(OFSTRUCT) - sizeof(ofs->szPathName) + strlen(path); ofs->fFixedDisk = 1; strcpy( ofs->szPathName, path ); pData += ofs->cBytes + 1; assert( (BYTE *)pModule + size <= pData ); /* Get the non-resident names table */ if (ne_header->ne_cbnrestab) { pModule->nrname_handle = GlobalAlloc16( 0, ne_header->ne_cbnrestab ); if (!pModule->nrname_handle) goto failed; FarSetOwner16( pModule->nrname_handle, hModule ); buffer = GlobalLock16( pModule->nrname_handle ); if (!NE_READ_DATA( pModule, buffer, ne_header->ne_nrestab, ne_header->ne_cbnrestab )) { GlobalFree16( pModule->nrname_handle ); pModule->nrname_handle = 0; } } else pModule->nrname_handle = 0; /* Allocate a segment for the implicitly-loaded DLLs */ if (pModule->ne_cmod) { pModule->dlls_to_init = GlobalAlloc16( GMEM_ZEROINIT, (pModule->ne_cmod+1)*sizeof(HMODULE16) ); if (!pModule->dlls_to_init) { if (pModule->nrname_handle) GlobalFree16( pModule->nrname_handle ); goto failed; } FarSetOwner16( pModule->dlls_to_init, hModule ); } else pModule->dlls_to_init = 0; NE_RegisterModule( pModule ); return hModule; failed: GlobalFree16( hModule ); return ERROR_BAD_FORMAT; } /*********************************************************************** * NE_LoadDLLs * * Load all DLLs implicitly linked to a module. */ WINUSERAPI int WINAPI MessageBoxA( _In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType); static BOOL NE_LoadDLLs( NE_MODULE *pModule ) { int i; WORD *pModRef = (WORD *)((char *)pModule + pModule->ne_modtab); WORD *pDLLs = GlobalLock16( pModule->dlls_to_init ); for (i = 0; i < pModule->ne_cmod; i++, pModRef++) { char buffer[260], *p; BYTE *pstr = (BYTE *)pModule + pModule->ne_imptab + *pModRef; memcpy( buffer, pstr + 1, *pstr ); *(buffer + *pstr) = 0; /* terminate it */ TRACE("Loading '%s'\n", buffer ); if (!(*pModRef = GetModuleHandle16( buffer ))) { /* If the DLL is not loaded yet, load it and store */ /* its handle in the list of DLLs to initialize. */ HMODULE16 hDLL = 0; BOOL without_ext = FALSE; /* Append .DLL (Windows >= 3.00) or .EXE (Windows < 3.00) to name if no extension present */ if (!(p = strrchr(buffer, '.')) || strchr(p, '/') || strchr(p, '\\')) { LPSTR buf = buffer + strlen(buffer); without_ext = TRUE; hDLL = MODULE_LoadModule16(buffer, TRUE, TRUE, NULL); if (hDLL < 32) { HMODULE16 exe; buf[0] = 0; strcat(buffer, ".EXE"); exe = MODULE_LoadModule16(buffer, TRUE, TRUE, NULL); if (exe >= 32) { hDLL = exe; } else { buf[0] = 0; strcat(buffer, ".DLL"); } } } else { hDLL = MODULE_LoadModule16(buffer, TRUE, TRUE, NULL); } if (hDLL < 32) { /* FIXME: cleanup what was done */ char msg[256]; if (strlen("Could not load '' required by '', error=") + 10 + 1 + strlen(buffer) + *((BYTE*)pModule + pModule->ne_restab) < 256) { sprintf(msg, "Could not load '%s' required by '%.*s', error=%d\n", buffer, *((BYTE*)pModule + pModule->ne_restab), (char *)pModule + pModule->ne_restab + 1, hDLL); MessageBoxA(NULL, msg, NULL, 0); } MESSAGE("Could not load '%s' required by '%.*s', error=%d\n", buffer, *((BYTE*)pModule + pModule->ne_restab), (char *)pModule + pModule->ne_restab + 1, hDLL ); return FALSE; } *pModRef = GetExePtr( hDLL ); *pDLLs++ = *pModRef; } else /* Increment the reference count of the DLL */ { NE_MODULE *pOldDLL = NE_GetPtr( *pModRef ); if (pOldDLL) pOldDLL->count++; } } return TRUE; } /********************************************************************** * NE_DoLoadModule * * Load first instance of NE module from file. * * pModule must point to a module structure prepared by build_module. * This routine must never be called twice on a module. */ static HINSTANCE16 NE_DoLoadModule( NE_MODULE *pModule ) { /* Allocate the segments for this module */ if (!NE_CreateAllSegments( pModule )) return ERROR_NOT_ENOUGH_MEMORY; /* 8 */ /* Load the referenced DLLs */ if (!NE_LoadDLLs( pModule )) return ERROR_FILE_NOT_FOUND; /* 2 */ /* Load the segments */ NE_LoadAllSegments( pModule ); /* Make sure the usage count is 1 on the first loading of */ /* the module, even if it contains circular DLL references */ pModule->count = 1; return NE_GetInstance( pModule ); } /********************************************************************** * NE_LoadModule * * Load first instance of NE module. (Note: caller is responsible for * ensuring the module isn't already loaded!) * * If the module turns out to be an executable module, only a * handle to a module stub is returned; this needs to be initialized * by calling NE_DoLoadModule later, in the context of the newly * created process. * * If lib_only is TRUE, however, the module is perforce treated * like a DLL module, even if it is an executable module. * */ static HINSTANCE16 NE_LoadModule( LPCSTR name, BOOL lib_only ) { NE_MODULE *pModule; HMODULE16 hModule; HINSTANCE16 hInstance; HFILE16 hFile; OFSTRUCT ofs; HANDLE mapping; void *ptr; MEMORY_BASIC_INFORMATION info; /* Open file */ if ((hFile = OpenFile16( name, &ofs, OF_READ|OF_SHARE_DENY_WRITE )) == HFILE_ERROR16) return ERROR_FILE_NOT_FOUND; mapping = CreateFileMappingW( DosFileHandleToWin32Handle(hFile), NULL, PAGE_WRITECOPY, 0, 0, NULL ); _lclose16( hFile ); if (!mapping) return ERROR_BAD_FORMAT; ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 0 ); CloseHandle( mapping ); if (!ptr) return ERROR_BAD_FORMAT; VirtualQuery( ptr, &info, sizeof(info) ); hModule = build_module( ptr, info.RegionSize, ofs.szPathName ); if (hModule < 32) { UnmapViewOfFile( ptr ); return hModule; } SNOOP16_RegisterDLL( hModule, ofs.szPathName ); NE_InitResourceHandler( hModule ); pModule = NE_GetPtr( hModule ); if ( !lib_only && !( pModule->ne_flags & NE_FFLAGS_LIBMODULE ) ) return hModule; hInstance = NE_DoLoadModule( pModule ); if ( hInstance < 32 ) { /* cleanup ... */ NE_FreeModule( hModule, 0, 0 ); } return hInstance; } /*********************************************************************** * NE_DoLoadBuiltinModule * * Load a built-in Win16 module. Helper function for NE_LoadBuiltinModule. */ static HMODULE16 NE_DoLoadBuiltinModule( const IMAGE_DOS_HEADER *mz_header, const char *file_name, HMODULE owner32 ) { NE_MODULE *pModule; HMODULE16 hModule; HINSTANCE16 hInstance; SIZE_T mapping_size = ~0UL; /* assume builtins don't contain invalid offsets... */ char abs_file_name[MAX_PATH]; if (strlen(file_name) < 2 || file_name[1] != ':') { char sys_dir[OFS_MAXPATHNAME]; GetSystemDirectory16(sys_dir, OFS_MAXPATHNAME); PathCombineA(abs_file_name, sys_dir, file_name); if (!*PathFindExtensionA(abs_file_name)) PathAddExtensionA(abs_file_name, ".DLL"); strupr(abs_file_name); if (PathFileExistsA(abs_file_name)) { file_name = abs_file_name; } } hModule = build_module( mz_header, mapping_size, file_name ); if (hModule < 32) return hModule; pModule = GlobalLock16( hModule ); pModule->ne_flags |= NE_FFLAGS_BUILTIN; pModule->owner32 = owner32; /* fake the expected version the module should have according to the current Windows version */ pModule->ne_expver = MAKEWORD( NtCurrentTeb()->Peb->OSMajorVersion, NtCurrentTeb()->Peb->OSMinorVersion ); hInstance = NE_DoLoadModule( pModule ); if (hInstance < 32) NE_FreeModule( hModule, 0, 0 ); NE_InitResourceHandler( hModule ); if (pModule->ne_heap) { SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ) + pModule->ne_autodata - 1; unsigned int size = pSeg->minsize + pModule->ne_heap; if (size > 0xfffe) size = 0xfffe; LocalInit16( GlobalHandleToSel16(pSeg->hSeg), pSeg->minsize, size ); } patch_code_segment( pModule ); return hInstance; } // list of programs that should load native rather than built in dlls static BOOL builtin_override(const char *lib) { const char list[][2][10] = {{"SCW", "TYPELIB"}}; char name[10] = {0}; HANDLE task = GetCurrentTask(); if (!task) return FALSE; GetModuleName16(task, &name, sizeof(name)); for (int i = 0; i < ARRAY_SIZE(list); i++) { if (!strcmp(name, list[i][0]) && !strcmp(lib, list[i][1])) return TRUE; } return FALSE; } LPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin); /********************************************************************** * MODULE_LoadModule16 * * Load a NE module in the order of the loadorder specification. * The caller is responsible that the module is not loaded already. * */ static HINSTANCE16 MODULE_LoadModule16( LPCSTR libname, BOOL implicit, BOOL lib_only, SEGPTR cmdline ) { HINSTANCE16 hinst = 2; HMODULE16 hModule; HMODULE mod32 = 0; NE_MODULE *pModule; const IMAGE_DOS_HEADER *descr = NULL; const char *file_name = NULL; char dllname[32]; const char *basename, *main_module, *p; /* strip path information */ basename = libname; if (basename[0] && basename[1] == ':') basename += 2; /* strip drive specification */ if ((p = strrchr( basename, '\\' ))) basename = p + 1; if ((p = strrchr( basename, '/' ))) basename = p + 1; if (strlen(basename) < sizeof(dllname)-6) { DWORD count; char *q; char path32[MAX_PATH]; strcpy( dllname, basename ); q = strrchr( dllname, '.' ); if (!q) strcat( dllname, ".dll" ); for (q = dllname; *q; q++) if (*q >= 'A' && *q <= 'Z') *q += 32; strcpy( q, "16" ); if (krnl386_search_executable_file(dllname, path32, sizeof(path32), TRUE) != dllname) { ReleaseThunkLock(&count); mod32 = LoadLibraryA( dllname ); } if (mod32 && !builtin_override(basename)) { if (!(descr = (void *)GetProcAddress(mod32, "_wine_spec_dos_header")) && !(descr = (void *)GetProcAddress(mod32, "__wine_spec_dos_header"))) { WARN( "loaded %s but does not contain a 16-bit module\n", debugstr_a(dllname) ); FreeLibrary( mod32 ); } else { TRACE( "found %s with embedded 16-bit module\n", debugstr_a(dllname) ); file_name = basename; /* if module has a 32-bit owner, match the load order of the owner */ if ((main_module = (void *)GetProcAddress( mod32, "__wine_spec_main_module" ))) { LDR_MODULE *ldr; HMODULE main_owner = LoadLibraryA( main_module ); if (!main_owner) { WARN( "couldn't load owner %s for 16-bit dll %s\n", main_module, dllname ); FreeLibrary( mod32 ); RestoreThunkLock( count ); return ERROR_FILE_NOT_FOUND; } /* check if module was loaded native */ if (LdrFindEntryForAddress( main_owner, &ldr ) || !(ldr->Flags & LDR_WINE_INTERNAL)) { FreeLibrary( mod32 ); descr = NULL; } FreeLibrary( main_owner ); } } RestoreThunkLock(count); } /* loading the 32-bit library can have the side effect of loading the module */ /* if so, simply incr the ref count and return the module */ if (descr && (hModule = GetModuleHandle16( libname ))) { TRACE( "module %s already loaded by owner\n", libname ); pModule = NE_GetPtr( hModule ); if (pModule) pModule->count++; FreeLibrary( mod32 ); return hModule; } } if (descr) { TRACE("Trying built-in '%s'\n", libname); hinst = NE_DoLoadBuiltinModule( descr, file_name, mod32 ); if (hinst > 32) TRACE_(loaddll)("Loaded module %s : builtin\n", debugstr_a(file_name)); else FreeLibrary( mod32 ); } else { char *q; strcpy( dllname, basename ); q = strrchr( dllname, '.' ); if (!q) strcat( dllname, (GetExeVersion16() >= 0x0300) ? ".dll" : ".exe" ); TRACE("Trying native dll '%s'\n", !q ? dllname : libname); hinst = NE_LoadModule(!q ? dllname : libname, lib_only); if (hinst > 32) TRACE_(loaddll)("Loaded module %s : native\n", debugstr_a(libname)); } if (hinst > 32 && !implicit) { hModule = GetModuleHandle16(libname); if(!hModule) { ERR("Serious trouble. Just loaded module '%s' (hinst=0x%04x), but can't get module handle. Filename too long ?\n", libname, hinst); return ERROR_INVALID_HANDLE; } pModule = NE_GetPtr(hModule); if(!pModule) { ERR("Serious trouble. Just loaded module '%s' (hinst=0x%04x), but can't get NE_MODULE pointer\n", libname, hinst); return ERROR_INVALID_HANDLE; } TRACE("Loaded module '%s' at 0x%04x.\n", libname, hinst); /* * Call initialization routines for all loaded DLLs. Note that * when we load implicitly linked DLLs this will be done by InitTask(). */ if(pModule->ne_flags & NE_FFLAGS_LIBMODULE) { NE_InitializeDLLs(hModule, cmdline); NE_DllProcessAttach(hModule); } else DOSMEM_InitDosMemory(); /* we will be running a 16-bit task, setup DOS memory */ } return hinst; /* The last error that occurred */ } /********************************************************************** * NE_CreateThread * * Create the thread for a 16-bit module. */ static HINSTANCE16 NE_CreateThread( NE_MODULE *pModule, WORD cmdShow, LPCSTR cmdline, LPCSTR curdir ) { HANDLE hThread; TDB *pTask; HTASK16 hTask; HINSTANCE16 instance = 0; if (!(hTask = TASK_SpawnTask( pModule, cmdShow, cmdline + 1, *cmdline, &hThread, curdir ))) return 0; /* Post event to start the task */ PostEvent16( hTask ); /* Wait until we get the instance handle */ do { DirectedYield16( hTask ); if (!IsTask16( hTask )) /* thread has died */ { DWORD exit_code, count; ReleaseThunkLock(&count); while (1) { GetExitCodeThread( hThread, &exit_code ); if (exit_code != STILL_ACTIVE) break; WaitForSingleObject( hThread, 500 ); } RestoreThunkLock(count); CloseHandle( hThread ); return hTask; // return something that looks like an hinstance } if (!(pTask = GlobalLock16( hTask ))) break; instance = pTask->hInstance; WIN32_GlobalUnlock16( hTask ); } while (!instance); CloseHandle( hThread ); return instance; } typedef struct tagLOADPARMS32 { LPSTR lpEnvAddress; LPSTR lpCmdLine; LPSTR lpCmdShow; DWORD dwReserved; } LOADPARMS32; /********************************************************************** * LoadModule (KERNEL32.@) */ HANDLE WINAPI LoadModule_wine_implementation(LPCSTR name, LPVOID paramBlock, HANDLE *result) { LOADPARMS32 *params = paramBlock; PROCESS_INFORMATION info; STARTUPINFOA startup; DWORD ret; LPSTR cmdline, p; char filename[MAX_PATH]; BYTE len; DWORD error; if (!name) return ERROR_FILE_NOT_FOUND; if (!SearchPathA(NULL, name, ".exe", sizeof(filename), filename, NULL) && !SearchPathA(NULL, name, NULL, sizeof(filename), filename, NULL)) return GetLastError(); len = (BYTE)params->lpCmdLine[0]; if (!(cmdline = HeapAlloc(GetProcessHeap(), 0, strlen(filename) + len + 4))) return ERROR_NOT_ENOUGH_MEMORY; sprintf(cmdline, "\"%s\"", filename); p = cmdline + strlen(cmdline); *p++ = ' '; memcpy(p, params->lpCmdLine + 1, len); p[len] = 0; memset(&startup, 0, sizeof(startup)); startup.cb = sizeof(startup); if (params->lpCmdShow) { startup.dwFlags = STARTF_USESHOWWINDOW; startup.wShowWindow = ((WORD *)params->lpCmdShow)[1]; } if (CreateProcessA(filename, cmdline, NULL, NULL, FALSE, 0, params->lpEnvAddress, NULL, &startup, &info)) { /* Give 30 seconds to the app to come up */ if (WaitForInputIdle(info.hProcess, 30000) == WAIT_FAILED) WARN("WaitForInputIdle failed: Error %d\n", GetLastError()); /* Close off the handles */ CloseHandle(info.hThread); *result = info.hProcess; ret = 33; } else if ((error = GetLastError()) >= 32) { FIXME("Strange error set by CreateProcess: %u\n", error); ret = 11; /**/ #ifndef ERROR_ELEVATION_REQUIRED #define ERROR_ELEVATION_REQUIRED 740L #endif if (error == ERROR_ELEVATION_REQUIRED) { char exename[MAX_PATH]; int len = krnl386_get_config_string("otvdm", "ElevationShim", "", exename, sizeof(exename)); SHELLEXECUTEINFOA sei = { 0 }; sei.cbSize = sizeof(sei); sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_CLASSNAME | SEE_MASK_WAITFORINPUTIDLE; sei.lpFile = len ? exename : filename; sei.lpParameters = len ? cmdline : p; sei.nShow = startup.dwFlags ? startup.wShowWindow : SW_NORMAL; sei.lpVerb = "runas"; sei.lpClass = "exefile"; if (ShellExecuteExA(&sei)) *result = sei.hProcess; else ERR("ShellExecute Failed err = %u, %d\n", GetLastError(), sei.hInstApp); ret = sei.hInstApp; } /**/ } HeapFree(GetProcessHeap(), 0, cmdline); return ret; } LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len); /********************************************************************** * LoadModule (KERNEL.45) */ HINSTANCE16 WINAPI LoadModule16( LPCSTR name, LPVOID paramBlock ) { BOOL lib_only = !paramBlock || (paramBlock == (LPVOID)-1); LOADPARAMS16 *params; HMODULE16 hModule; NE_MODULE *pModule; LPSTR cmdline; WORD cmdShow = 1; /* SW_SHOWNORMAL but we don't want to include winuser.h here */ if (name == NULL) return 0; char buf[MAX_PATH]; name = RedirectSystemDir(name, buf, MAX_PATH); TRACE("name %s, paramBlock %p\n", name, paramBlock); /* Load module */ if ( (hModule = NE_GetModuleByFilename(name) ) != 0 ) { /* Special case: second instance of an already loaded NE module */ if ( !( pModule = NE_GetPtr( hModule ) ) ) return ERROR_BAD_FORMAT; if ( pModule->module32 ) return (HINSTANCE16)21; /* Increment refcount */ TRACE("%04x count %d\n", hModule, (INT16)pModule->count); pModule->count++; } else { /* Main case: load first instance of NE module */ params = paramBlock; SEGPTR cmdline = IsBadReadPtr(params, 8) ? NULL : params->cmdLine; if ((hModule = MODULE_LoadModule16(name, FALSE, lib_only, cmdline)) < 32) { if (hModule == 21/* win32 */) { LOADPARMS32 paramBlock32; if (lib_only) { return (HINSTANCE16)21; } paramBlock32.lpEnvAddress = GlobalLock16(params->hEnvironment); DWORD showCmd32[2]; paramBlock32.lpCmdLine = MapSL(params->cmdLine); paramBlock32.lpCmdShow = MapSL(params->showCmd); paramBlock32.dwReserved = 0; HANDLE hProcess = 0; DWORD result = LoadModule_wine_implementation(name, ¶mBlock32, &hProcess);/* win32 returns 33 */ WIN32_GlobalUnlock16(params->hEnvironment); if (result < 32) return result; char cmdlineBuf[_countof("WINOLDAP.MOD -WoAWoW32XXXXXXXX")]; sprintf(cmdlineBuf, "WINOLDAP.MOD -WoAWoW32%x", (SIZE_T)hProcess); return WinExec16(cmdlineBuf, 1);/* wow32 returns winoldap.mod hinstance */ } return hModule; } if ( !(pModule = NE_GetPtr( hModule )) ) return ERROR_BAD_FORMAT; } /* If library module, we just retrieve the instance handle */ if ( ( pModule->ne_flags & NE_FFLAGS_LIBMODULE ) || lib_only ) return NE_GetInstance( pModule ); /* * At this point, we need to create a new process. * * pModule points either to an already loaded module, whose refcount * has already been incremented (to avoid having the module vanish * in the meantime), or else to a stub module which contains only header * information. */ params = paramBlock; if (params->showCmd) cmdShow = ((WORD *)MapSL( params->showCmd ))[1]; cmdline = MapSL( params->cmdLine ); LPCSTR curdir = NULL; /* current directory */ if (params->hEnvironment == 0x0bef) { curdir = (LPCSTR)params->reserved; } return NE_CreateThread( pModule, cmdShow, cmdline, curdir); } BOOL WINAPI TOOLHELP_CallNotify(WORD wID, DWORD dwData) { /* toolhelp.dll16 may be unloaded? */ HMODULE hmod = GetModuleHandleW(L"toolhelp.dll16"); BOOL(WINAPI*pTOOLHELP_CallNotify)(WORD wID, DWORD dwData) = hmod ? (BOOL(WINAPI*)(WORD wID, DWORD dwData))GetProcAddress(hmod, "TOOLHELP_CallNotify") : NULL; if (pTOOLHELP_CallNotify) return pTOOLHELP_CallNotify(wID, dwData); return FALSE; } /********************************************************************** * NE_StartTask * * Startup code for a new 16-bit task. */ DWORD NE_StartTask(void) { TDB *pTask = TASK_GetCurrent(); NE_MODULE *pModule = NE_GetPtr( pTask->hModule ); HINSTANCE16 hInstance, hPrevInstance; SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule ); WORD sp; if ( pModule->count > 0 ) { /* Second instance of an already loaded NE module */ /* Note that the refcount was already incremented by the parent */ hPrevInstance = NE_GetInstance( pModule ); if ( pModule->ne_autodata ) if ( NE_CreateSegment( pModule, pModule->ne_autodata, 0 ) ) NE_LoadSegment( pModule, pModule->ne_autodata ); hInstance = NE_GetInstance( pModule ); TRACE("created second instance %04x[%d] of instance %04x.\n", hInstance, pModule->ne_autodata, hPrevInstance); } else { /* Load first instance of NE module */ pModule->ne_flags |= NE_FFLAGS_GUI; /* FIXME: is this necessary? */ pModule->ne_flags |= NE_FFLAGS_MULTIPLEDATA; /* Windows sets this flag. */ hInstance = NE_DoLoadModule( pModule ); hPrevInstance = 0; } if ( hInstance >= 32 ) { CONTEXT context; /* Enter instance handles into task struct */ pTask->hInstance = hInstance; pTask->hPrevInstance = hPrevInstance; /* Use DGROUP for 16-bit stack */ if (!(sp = OFFSETOF(pModule->ne_sssp))) sp = pSegTable[SELECTOROF(pModule->ne_sssp)-1].minsize + pModule->ne_stack; sp &= ~1; sp += 4; setWOW32Reserved((void *)MAKESEGPTR(GlobalHandleToSel16(hInstance), sp)); /* Registers at initialization must be: * ax zero * bx stack size in bytes * cx heap size in bytes * si previous app instance * di current app instance * bp zero * es selector to the PSP * ds dgroup of the application * ss stack selector * sp top of the stack */ memset( &context, 0, sizeof(context) ); context.SegCs = GlobalHandleToSel16(pSegTable[SELECTOROF(pModule->ne_csip) - 1].hSeg); context.SegDs = GlobalHandleToSel16(pTask->hInstance); context.SegEs = pTask->hPDB; context.SegFs = wine_get_fs(); context.SegGs = wine_get_gs(); context.Eip = OFFSETOF(pModule->ne_csip); context.Ebx = pModule->ne_stack; context.Ecx = pModule->ne_heap; context.Edi = pTask->hInstance; context.Esi = pTask->hPrevInstance; TOOLHELP_CallNotify(NFY_STARTTASK, MAKESEGPTR(context.SegCs, context.Eip)); /* Now call 16-bit entry point */ TRACE("Starting main program: cs:ip=%04x:%04x ds=%04x ss:sp=%04x:%04x\n", context.SegCs, context.Eip, context.SegDs, SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved())); WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&context ); DOSVM_Exit( LOWORD(context.Eax) ); } return hInstance; /* error code */ } /*********************************************************************** * LoadLibrary (KERNEL.95) * LoadLibrary16 (KERNEL32.35) */ HINSTANCE16 WINAPI LoadLibrary16( LPCSTR libname ) { return LoadModule16(libname, (LPVOID)-1 ); } /********************************************************************** * MODULE_CallWEP * * Call a DLL's WEP, allowing it to shut down. * FIXME: we always pass the WEP WEP_FREE_DLL, never WEP_SYSTEM_EXIT */ static BOOL16 MODULE_CallWEP( HMODULE16 hModule ) { BOOL16 ret; FARPROC16 WEP = GetProcAddress16( hModule, "WEP" ); if (!WEP) return FALSE; __TRY { WORD args[1]; DWORD dwRet; args[0] = WEP_FREE_DLL; WOWCallback16Ex( (DWORD)WEP, WCB16_PASCAL, sizeof(args), args, &dwRet ); ret = LOWORD(dwRet); } __EXCEPT_PAGE_FAULT { WARN("Page fault\n"); ret = 0; } __ENDTRY return ret; } /********************************************************************** * NE_FreeModule * * Implementation of FreeModule16(). */ static BOOL16 NE_FreeModule( HMODULE16 hModule, BOOL call_wep, BOOL cleanup ) { HMODULE16 *hPrevModule; NE_MODULE *pModule; HMODULE16 *pModRef; int i; if (!(pModule = NE_GetPtr( hModule ))) return FALSE; hModule = pModule->self; HMODULE owner32 = pModule->owner32; TRACE("%04x count %d\n", hModule, (INT16)pModule->count ); if (((INT16)(--pModule->count)) > 0 ) return TRUE; else pModule->count = 0; /* Free the objects owned by the DLL module */ if (cleanup) { if (pModule->ne_flags & NE_FFLAGS_LIBMODULE) TOOLHELP_CallNotify(NFY_DELMODULE, hModule); NE_CallUserSignalProc( hModule, USIG16_DLL_UNLOAD, 0, 0, 0 ); } if (call_wep && !(pModule->ne_flags & NE_FFLAGS_WIN32)) { if (pModule->ne_flags & NE_FFLAGS_LIBMODULE) { if (pModule->ne_cseg != 0) { MODULE_CallWEP( hModule ); } } else { call_wep = FALSE; /* We are freeing a task -> no more WEPs */ } } TRACE_(loaddll)("Unloaded module %s : %s\n", debugstr_a(NE_MODULE_NAME(pModule)), (pModule->ne_flags & NE_FFLAGS_BUILTIN) ? "builtin" : "native"); /* Clear magic number just in case */ pModule->ne_magic = pModule->self = 0; if (!owner32 && pModule->mapping) UnmapViewOfFile( pModule->mapping ); /* Remove it from the linked list */ hPrevModule = &hFirstModule; while (*hPrevModule && (*hPrevModule != hModule)) { hPrevModule = &(NE_GetPtr( *hPrevModule ))->next; } if (*hPrevModule) *hPrevModule = pModule->next; /* Free the referenced modules */ pModRef = (HMODULE16*)((char *)pModule + pModule->ne_modtab); for (i = 0; i < pModule->ne_cmod; i++, pModRef++) { NE_FreeModule( *pModRef, call_wep, cleanup ); } /* Free the module storage */ GlobalFreeAll16( hModule ); if (owner32) { DWORD count; ReleaseThunkLock(&count); FreeLibrary(owner32); RestoreThunkLock(count); } return TRUE; } /********************************************************************** * FreeModule (KERNEL.46) */ BOOL16 WINAPI FreeModule16( HMODULE16 hModule ) { return NE_FreeModule( hModule, TRUE, TRUE ); } DWORD WINAPI WIN16_FreeLibrary16(HINSTANCE16 handle) { FreeLibrary16(handle); return MAKELONG(0, CURRENT_STACK16->cs); } /*********************************************************************** * FreeLibrary (KERNEL.96) * FreeLibrary16 (KERNEL32.36) */ void WINAPI FreeLibrary16( HINSTANCE16 handle ) { TRACE("%04x\n", handle ); FreeModule16( handle ); } /*********************************************************************** * GetModuleHandle16 (KERNEL32.@) */ HMODULE16 WINAPI GetModuleHandle16( LPCSTR name ) { HMODULE16 hModule; LPSTR s; BYTE len, *name_table; char tmpstr[MAX_PATH]; NE_MODULE *pModule; TRACE("(%s)\n", name); if (!HIWORD(name)) return GetExePtr(LOWORD(name)); len = strlen(name); if (!len) return 0; lstrcpynA(tmpstr, name, sizeof(tmpstr)); /* If 'name' matches exactly the module name of a module: * Return its handle. */ for (hModule = hFirstModule; hModule ; hModule = pModule->next) { pModule = NE_GetPtr( hModule ); if (!pModule) break; if (pModule->ne_flags & NE_FFLAGS_WIN32) continue; name_table = (BYTE *)pModule + pModule->ne_restab; if ((*name_table == len) && !strncmp(name, (char*) name_table+1, len)) return hModule; } /* If uppercased 'name' matches exactly the module name of a module: * Return its handle */ for (s = tmpstr; *s; s++) *s = RtlUpperChar(*s); for (hModule = hFirstModule; hModule ; hModule = pModule->next) { pModule = NE_GetPtr( hModule ); if (!pModule) break; if (pModule->ne_flags & NE_FFLAGS_WIN32) continue; name_table = (BYTE *)pModule + pModule->ne_restab; if ((*name_table == len) && !strncmp(tmpstr, (const char*)name_table+1, len)) return hModule; } /* If the base filename of 'name' matches the base filename of the module * filename of some module (case-insensitive compare): * Return its handle. */ /* basename: search backwards in passed name to \ / or : */ s = tmpstr + strlen(tmpstr); while (s > tmpstr) { if (s[-1]=='/' || s[-1]=='\\' || s[-1]==':') break; s--; } /* search this in loaded filename list */ for (hModule = hFirstModule; hModule ; hModule = pModule->next) { char *loadedfn; OFSTRUCT *ofs; pModule = NE_GetPtr( hModule ); if (!pModule) break; if (!pModule->fileinfo) continue; if (pModule->ne_flags & NE_FFLAGS_WIN32) continue; ofs = (OFSTRUCT*)((BYTE *)pModule + pModule->fileinfo); loadedfn = ((char*)ofs->szPathName) + strlen(ofs->szPathName); /* basename: search backwards in pathname to \ / or : */ while (loadedfn > (char*)ofs->szPathName) { if (loadedfn[-1]=='/' || loadedfn[-1]=='\\' || loadedfn[-1]==':') break; loadedfn--; } /* case insensitive compare ... */ if (!NE_strcasecmp(loadedfn, s)) return hModule; } return 0; } /********************************************************************** * GetModuleName (KERNEL.27) */ BOOL16 WINAPI GetModuleName16( HINSTANCE16 hinst, LPSTR buf, INT16 count ) { NE_MODULE *pModule; BYTE *p; if (!(pModule = NE_GetPtr( hinst ))) return FALSE; p = (BYTE *)pModule + pModule->ne_restab; if (count > *p) count = *p + 1; if (count > 0) { memcpy( buf, p + 1, count - 1 ); buf[count-1] = '\0'; } return TRUE; } /********************************************************************** * GetModuleFileName (KERNEL.49) * * See also: GetModuleFileNameA * * This function returns short paths when the modules version field is < 4.0). * * Even if invoked by second instance of a program, * it still returns path of first one. */ INT16 WINAPI GetModuleFileName16( HINSTANCE16 hModule, LPSTR lpFileName, INT16 nSize ) { NE_MODULE *pModule; /* Win95 does not query hModule if set to 0 ! * Is this wrong or maybe Win3.1 only ? */ if (!hModule) hModule = GetCurrentTask(); if (!(pModule = NE_GetPtr( hModule ))) return 0; lstrcpynA( lpFileName, NE_MODULE_NAME(pModule), nSize ); if (pModule->ne_expver < 0x400) GetShortPathNameA(NE_MODULE_NAME(pModule), lpFileName, nSize); TRACE("%04x -> '%s'\n", hModule, lpFileName ); return strlen(lpFileName); } /********************************************************************** * GetModuleUsage (KERNEL.48) */ INT16 WINAPI GetModuleUsage16( HINSTANCE16 hModule ) { NE_MODULE *pModule = NE_GetPtr( hModule ); return pModule ? pModule->count : 0; } /********************************************************************** * GetExpWinVer (KERNEL.167) */ WORD WINAPI GetExpWinVer16( HMODULE16 hModule ) { NE_MODULE *pModule = NE_GetPtr( hModule ); if ( !pModule ) return 0; return pModule->ne_expver; } BYTE get_aflags( HMODULE16 hModule ) { NE_MODULE *pModule = NE_GetPtr( hModule ); if ( !pModule ) return 0; return pModule->ne_flagsothers; } /*********************************************************************** * WinExec (KERNEL.166) */ HINSTANCE16 WINAPI WinExec16(LPCSTR lpCmdLine, UINT16 nCmdShow) { LPCSTR p, args = NULL; LPCSTR name_beg, name_end; LPSTR name, cmdline; int arglen; HINSTANCE16 ret; char buffer[MAX_PATH]; LOADPARAMS16 params; WORD showCmd[2]; if (*lpCmdLine == '"') /* has to be only one and only at beginning ! */ { name_beg = lpCmdLine + 1; p = strchr(lpCmdLine + 1, '"'); if (p) { name_end = p; args = strchr(p, ' '); } else /* yes, even valid with trailing '"' missing */ name_end = lpCmdLine + strlen(lpCmdLine); } else { name_beg = lpCmdLine; args = strchr(lpCmdLine, ' '); name_end = args ? args : lpCmdLine + strlen(lpCmdLine); } if ((name_beg == lpCmdLine) && (!args)) { /* just use the original cmdline string as file name */ name = (LPSTR)lpCmdLine; } else { if (!(name = HeapAlloc(GetProcessHeap(), 0, name_end - name_beg + 1))) return ERROR_NOT_ENOUGH_MEMORY; memcpy(name, name_beg, name_end - name_beg); name[name_end - name_beg] = '\0'; } if (args) { BOOL done = FALSE; args++; // workaround for msvc 1.5 if (StrStrIA(name, "wintee32")) { char fixargs[128]; char *harg = strstr(args, "-h"); if (harg) { int pos; HWND16 hwnd; sscanf(harg, "-h%hx%n", &hwnd, &pos); memcpy(fixargs, args, (int)(harg - args)); sprintf(fixargs + (int)(harg - args), "-h%x%s", HWND_32(hwnd), args + pos); arglen = strlen(fixargs); cmdline = HeapAlloc(GetProcessHeap(), 0, 2 + arglen); strcpy(cmdline + 1, fixargs); done = TRUE; } } if (!done) { arglen = strlen(args); cmdline = HeapAlloc(GetProcessHeap(), 0, 2 + arglen); strcpy(cmdline + 1, args); } cmdline[0] = (BYTE)arglen; } else { cmdline = HeapAlloc(GetProcessHeap(), 0, 2); cmdline[0] = cmdline[1] = 0; } TRACE("name: '%s', cmdline: '%.*s'\n", name, cmdline[0], &cmdline[1]); showCmd[0] = 2; showCmd[1] = nCmdShow; params.hEnvironment = 0; params.cmdLine = MapLS(cmdline); params.showCmd = MapLS(showCmd); params.reserved = 0; char *path = get_search_path(); char builtinbuffer[MAX_PATH]; //first, search built-in modules BOOL enough_buffer = FALSE; if (strlen(name) + 7 < MAX_PATH) { enough_buffer = TRUE; } if (enough_buffer) { strcpy(builtinbuffer, name); char *q = strrchr(builtinbuffer, '.'); if (!q) strcat(builtinbuffer, ".exe"); for (q = builtinbuffer; *q; q++) if (*q >= 'A' && *q <= 'Z') *q += 32; strcpy(q, "16"); } if (enough_buffer && SearchPathA(path, builtinbuffer, "", sizeof(buffer), buffer, NULL)) { //remove 16 buffer[strlen(buffer) - 2] = 0; ret = LoadModule16(buffer, ¶ms); } else if (SearchPathA( path, name, ".exe", sizeof(buffer), buffer, NULL )) { ret = LoadModule16( buffer, ¶ms ); } else if (!contains_path( name )) /* try 16-bit builtin */ { lstrcpynA( buffer, name, sizeof(buffer) ); if (strlen( buffer ) < sizeof(buffer) - 4 && !strchr( buffer, '.' )) strcat( buffer, ".exe" ); ret = LoadModule16( buffer, ¶ms ); if ((ret == ERROR_FILE_NOT_FOUND) && SearchPathA( NULL, name, ".exe", sizeof(buffer), buffer, NULL )) ret = 21; // check the real path for a host 32bit or 64bit exe } else ret = ERROR_FILE_NOT_FOUND; HeapFree(GetProcessHeap(), 0, path); UnMapLS( params.cmdLine ); UnMapLS( params.showCmd ); HeapFree( GetProcessHeap(), 0, cmdline ); if (name != lpCmdLine) HeapFree( GetProcessHeap(), 0, name ); if (ret == 21 || ret == ERROR_BAD_FORMAT) /* 32-bit module or unknown executable*/ { LOADPARAMS16 params; WORD showCmd[2]; showCmd[0] = 2; showCmd[1] = nCmdShow; arglen = strlen( lpCmdLine ); cmdline = HeapAlloc( GetProcessHeap(), 0, arglen + 1 ); cmdline[0] = (BYTE)arglen; memcpy( cmdline + 1, lpCmdLine, arglen ); params.hEnvironment = 0; params.cmdLine = MapLS( cmdline ); params.showCmd = MapLS( showCmd ); params.reserved = 0; ret = LoadModule16( "winoldap.mod", ¶ms ); UnMapLS( params.cmdLine ); UnMapLS( params.showCmd ); } else if (ret > 31) { HTASK16 curtask = pThhook->HeadTDB; while (curtask) { TDB *curtdb = (TDB *)GlobalLock16(curtask); if (curtdb->hInstance == ret) { DWORD count; struct kernel_thread_data *chdthd = (struct kernel_thread_data *)TebTlsGetValue(curtdb->teb, kernel_thread_data_tls); MSG msg; DWORD timeout = GetTickCount() + 30000; ReleaseThunkLock(&count); do { DWORD wret = MsgWaitForMultipleObjects(1, &chdthd->idle_event, FALSE, timeout - GetTickCount(), QS_SENDMESSAGE); if (wret != (WAIT_OBJECT_0 + 1)) break; PeekMessage(&msg, NULL, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE); } while (GetTickCount() < timeout); RestoreThunkLock(count); WIN32_GlobalUnlock16(curtask); break; } TDB *lasttask = curtask; curtask = curtdb->hNext; WIN32_GlobalUnlock16(lasttask); } } return ret; } FARPROC16 WINAPI WIN16_GetProcAddress16(HMODULE16 hModule, LPCSTR name) { FARPROC16 proc16 = GetProcAddress16(hModule, name); //proc16 = 0000:0000 (fail) => cx = 0 CURRENT_STACK16->ecx = (CURRENT_STACK16->ecx & 0xffff0000) | SELECTOROF(proc16) | OFFSETOF(proc16); return proc16; } /*********************************************************************** * GetProcAddress (KERNEL.50) */ FARPROC16 WINAPI GetProcAddress16( HMODULE16 hModule, LPCSTR name ) { WORD ordinal; FARPROC16 ret; if (!hModule) hModule = GetCurrentTask(); hModule = GetExePtr( hModule ); if (HIWORD(name) != 0) { ordinal = NE_GetOrdinal( hModule, name ); TRACE("%04x '%s'\n", hModule, name ); } else { ordinal = LOWORD(name); TRACE("%04x %04x\n", hModule, ordinal ); } if (!ordinal) return NULL; ret = NE_GetEntryPoint( hModule, ordinal ); TRACE("returning %p\n", ret ); return ret; } /*************************************************************************** * HasGPHandler (KERNEL.338) */ SEGPTR WINAPI HasGPHandler16( SEGPTR address ) { HMODULE16 hModule; int gpOrdinal; SEGPTR gpPtr; GPHANDLERDEF *gpHandler; if ( (hModule = FarGetOwner16( SELECTOROF(address) )) != 0 && (gpOrdinal = NE_GetOrdinal( hModule, "__GP" )) != 0 && (gpPtr = (SEGPTR)NE_GetEntryPointEx( hModule, gpOrdinal, FALSE )) != 0 && !IsBadReadPtr16( gpPtr, sizeof(GPHANDLERDEF) ) && (gpHandler = MapSL( gpPtr )) != NULL ) { while (gpHandler->selector) { if ( SELECTOROF(address) == gpHandler->selector && OFFSETOF(address) >= gpHandler->rangeStart && OFFSETOF(address) < gpHandler->rangeEnd ) return MAKESEGPTR( gpHandler->selector, gpHandler->handler ); gpHandler++; } } return 0; } /********************************************************************** * GetModuleHandle (KERNEL.47) * * Find a module from a module name. * * NOTE: The current implementation works the same way the Windows 95 one * does. Do not try to 'fix' it, fix the callers. * + It does not do ANY extension handling (except that strange .EXE bit)! * + It does not care about paths, just about basenames. (same as Windows) * * RETURNS * LOWORD: * the win16 module handle if found * 0 if not * HIWORD (undocumented, see "Undocumented Windows", chapter 5): * Always hFirstModule */ DWORD WINAPI WIN16_GetModuleHandle( SEGPTR name ) { if (HIWORD(name) == 0) return MAKELONG(GetExePtr( (HINSTANCE16)name), hFirstModule ); return MAKELONG(GetModuleHandle16( MapSL(name)), hFirstModule ); } /********************************************************************** * NE_GetModuleByFilename */ static HMODULE16 NE_GetModuleByFilename( LPCSTR name ) { HMODULE16 hModule; LPSTR s, p; BYTE len, *name_table; char tmpstr[MAX_PATH]; NE_MODULE *pModule; lstrcpynA(tmpstr, name, sizeof(tmpstr)); /* If the base filename of 'name' matches the base filename of the module * filename of some module (case-insensitive compare): * Return its handle. */ /* basename: search backwards in passed name to \ / or : */ s = tmpstr + strlen(tmpstr); while (s > tmpstr) { if (s[-1]=='/' || s[-1]=='\\' || s[-1]==':') break; s--; } /* search this in loaded filename list */ for (hModule = hFirstModule; hModule ; hModule = pModule->next) { char *loadedfn; OFSTRUCT *ofs; pModule = NE_GetPtr( hModule ); if (!pModule) break; if (!pModule->fileinfo) continue; if (pModule->ne_flags & NE_FFLAGS_WIN32) continue; ofs = (OFSTRUCT*)((BYTE *)pModule + pModule->fileinfo); loadedfn = ((char*)ofs->szPathName) + strlen(ofs->szPathName); /* basename: search backwards in pathname to \ / or : */ while (loadedfn > (char*)ofs->szPathName) { if (loadedfn[-1]=='/' || loadedfn[-1]=='\\' || loadedfn[-1]==':') break; loadedfn--; } /* case insensitive compare ... */ if (!NE_strcasecmp(loadedfn, s)) return hModule; } /* If basename (without ext) matches the module name of a module: * Return its handle. */ if ( (p = strchr( s, '.' )) != NULL ) *p = '\0'; len = strlen(s); for (hModule = hFirstModule; hModule ; hModule = pModule->next) { pModule = NE_GetPtr( hModule ); if (!pModule) break; if (pModule->ne_flags & NE_FFLAGS_WIN32) continue; name_table = (BYTE *)pModule + pModule->ne_restab; if ((*name_table == len) && !NE_strncasecmp(s, (const char*)name_table+1, len)) return hModule; } return 0; } /*********************************************************************** * GetProcAddress16 (KERNEL32.37) * Get procaddress in 16bit module from win32... (kernel32 undoc. ordinal func) */ FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE hModule, LPCSTR name ) { if (!hModule) return 0; if (HIWORD(hModule)) { WARN("hModule is Win32 handle (%p)\n", hModule ); return 0; } return GetProcAddress16( LOWORD(hModule), name ); } /*************************************************************************** * IsRomModule (KERNEL.323) */ BOOL16 WINAPI IsRomModule16( HMODULE16 unused ) { return FALSE; } /*************************************************************************** * IsRomFile (KERNEL.326) */ BOOL16 WINAPI IsRomFile16( HFILE16 unused ) { return FALSE; } /*********************************************************************** * create_dummy_module * * Create a dummy NE module for Win32 or Winelib. */ static HMODULE16 create_dummy_module( HMODULE module32 ) { HMODULE16 hModule; NE_MODULE *pModule; SEGTABLEENTRY *pSegment; char *pStr; unsigned int len; const char *basename, *s; OFSTRUCT *ofs; int of_size, size; char filename[MAX_PATH]; IMAGE_NT_HEADERS *nt = RtlImageNtHeader( module32 ); if (!nt) return ERROR_BAD_FORMAT; /* Extract base filename */ len = GetModuleFileNameA( module32, filename, sizeof(filename) ); if (!len || len >= sizeof(filename)) return ERROR_BAD_FORMAT; basename = strrchr(filename, '\\'); if (!basename) basename = filename; else basename++; len = strlen(basename); if ((s = strchr(basename, '.'))) len = s - basename; /* Allocate module */ of_size = sizeof(OFSTRUCT) - sizeof(ofs->szPathName) + strlen(filename) + 1; size = sizeof(NE_MODULE) + /* loaded file info */ ((of_size + 3) & ~3) + /* segment table: DS,CS */ 2 * sizeof(SEGTABLEENTRY) + /* name table */ len + 2 + /* several empty tables */ 8; hModule = GlobalAlloc16( GMEM_MOVEABLE | GMEM_ZEROINIT, size ); if (!hModule) return ERROR_BAD_FORMAT; GLOBAL_SetSeg(hModule, 0, GT_MODULE); FarSetOwner16( hModule, hModule ); pModule = GlobalLock16( hModule ); /* Set all used entries */ pModule->ne_magic = IMAGE_OS2_SIGNATURE; pModule->count = 1; pModule->next = 0; pModule->ne_flags = NE_FFLAGS_WIN32; pModule->ne_autodata = 0; pModule->ne_sssp = MAKESEGPTR( 0, 1 ); pModule->ne_csip = MAKESEGPTR( 0, 2 ); pModule->ne_heap = 0; pModule->ne_stack = 0; pModule->ne_cseg = 2; pModule->ne_cmod = 0; pModule->ne_cbnrestab = 0; pModule->fileinfo = sizeof(NE_MODULE); pModule->ne_exetyp = NE_OSFLAGS_WINDOWS; pModule->self = hModule; pModule->module32 = module32; /* Set version and flags */ pModule->ne_expver = ((nt->OptionalHeader.MajorSubsystemVersion & 0xff) << 8 ) | (nt->OptionalHeader.MinorSubsystemVersion & 0xff); if (nt->FileHeader.Characteristics & IMAGE_FILE_DLL) pModule->ne_flags |= NE_FFLAGS_LIBMODULE | NE_FFLAGS_SINGLEDATA; /* Set loaded file information */ ofs = (OFSTRUCT *)(pModule + 1); memset( ofs, 0, of_size ); ofs->cBytes = of_size < 256 ? of_size : 255; /* FIXME */ strcpy( ofs->szPathName, filename ); pSegment = (SEGTABLEENTRY*)((char*)(pModule + 1) + ((of_size + 3) & ~3)); pModule->ne_segtab = (char *)pSegment - (char *)pModule; /* Data segment */ pSegment->size = 0; pSegment->flags = NE_SEGFLAGS_DATA; pSegment->minsize = 0x1000; pSegment++; /* Code segment */ pSegment->flags = 0; pSegment++; /* Module name */ pStr = (char *)pSegment; pModule->ne_restab = pStr - (char *)pModule; assert(len<256); *pStr = len; lstrcpynA( pStr+1, basename, len+1 ); pStr += len+2; /* All tables zero terminated */ pModule->ne_rsrctab = pModule->ne_imptab = pModule->ne_enttab = pStr - (char *)pModule; NE_RegisterModule( pModule ); pModule->owner32 = LoadLibraryA( filename ); /* increment the ref count of the 32-bit module */ return hModule; } /*********************************************************************** * PrivateLoadLibrary (KERNEL32.@) * * FIXME: rough guesswork, don't know what "Private" means */ HINSTANCE16 WINAPI PrivateLoadLibrary(LPCSTR libname) { return LoadLibrary16(libname); } /*********************************************************************** * PrivateFreeLibrary (KERNEL32.@) * * FIXME: rough guesswork, don't know what "Private" means */ void WINAPI PrivateFreeLibrary(HINSTANCE16 handle) { FreeLibrary16(handle); } /*********************************************************************** * LoadLibrary32 (KERNEL.452) * LoadSystemLibrary32 (KERNEL.482) */ HMODULE WINAPI LoadLibrary32_16( LPCSTR libname ) { HMODULE hModule; DWORD count; ReleaseThunkLock( &count ); hModule = LoadLibraryA( libname ); RestoreThunkLock( count ); return hModule; } /*************************************************************************** * MapHModuleLS (KERNEL32.@) */ HMODULE16 WINAPI MapHModuleLS(HMODULE hmod) { HMODULE16 ret; NE_MODULE *pModule; if (!hmod) return TASK_GetCurrent()->hInstance; if (!HIWORD(hmod)) return LOWORD(hmod); /* we already have a 16 bit module handle */ pModule = GlobalLock16(hFirstModule); while (pModule) { if (pModule->module32 == hmod) return pModule->self; pModule = GlobalLock16(pModule->next); } if ((ret = create_dummy_module( hmod )) < 32) { SetLastError(ret); ret = 0; } return ret; } /*************************************************************************** * MapHModuleSL (KERNEL32.@) */ HMODULE WINAPI MapHModuleSL(HMODULE16 hmod) { NE_MODULE *pModule; if (!hmod) { TDB *pTask = TASK_GetCurrent(); hmod = pTask->hModule; } pModule = GlobalLock16(hmod); if ((pModule->ne_magic != IMAGE_OS2_SIGNATURE) || !(pModule->ne_flags & NE_FFLAGS_WIN32)) return 0; return pModule->module32; } /*************************************************************************** * MapHInstLS (KERNEL.472) */ void WINAPI MapHInstLS16( CONTEXT *context ) { context->Eax = MapHModuleLS( (HMODULE)context->Eax ); } /*************************************************************************** * MapHInstSL (KERNEL.473) */ void WINAPI MapHInstSL16( CONTEXT *context ) { context->Eax = (DWORD)MapHModuleSL( context->Eax ); } #define MAPHINST #ifdef MAPHINST /*************************************************************************** * MapHInstLS (KERNEL32.@) */ __ASM_STDCALL_FUNC( MapHInstLS, 0, "pushl %eax\n\t" "call " __ASM_NAME("MapHModuleLS") __ASM_STDCALL(4) "\n\t" "ret" ) /*************************************************************************** * MapHInstSL (KERNEL32.@) */ __ASM_STDCALL_FUNC( MapHInstSL, 0, "pushl %eax\n\t" "call " __ASM_NAME("MapHModuleSL") __ASM_STDCALL(4) "\n\t" "ret" ) /*************************************************************************** * MapHInstLS_PN (KERNEL32.@) */ __ASM_STDCALL_FUNC( MapHInstLS_PN, 0, "testl %eax,%eax\n\t" "jz 1f\n\t" "pushl %eax\n\t" "call " __ASM_NAME("MapHModuleLS") __ASM_STDCALL(4) "\n" "1:\tret" ) /*************************************************************************** * MapHInstSL_PN (KERNEL32.@) */ __ASM_STDCALL_FUNC( MapHInstSL_PN, 0, "andl $0xffff,%eax\n\t" "jz 1f\n\t" "pushl %eax\n\t" "call " __ASM_NAME("MapHModuleSL") __ASM_STDCALL(4) "\n" "1:\tret" ) #endif ================================================ FILE: krnl386/ne_segment.c ================================================ /* * NE segment loading * * Copyright 1993 Robert J. Amstadt * Copyright 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "wine/winbase16.h" #include "windows/wownt32.h" #include "winternl.h" #include "wine/library.h" #include "kernel16_private.h" #include "wine/debug.h" #include "../toolhelp/toolhelp.h" WINE_DEFAULT_DEBUG_CHANNEL(fixup); WINE_DECLARE_DEBUG_CHANNEL(dll); WINE_DECLARE_DEBUG_CHANNEL(module); /* * Relocation table entry */ struct relocation_entry_s { BYTE address_type; /* Relocation address type */ BYTE relocation_type; /* Relocation type */ WORD offset; /* Offset in segment to fixup */ WORD target1; /* Target specification */ WORD target2; /* Target specification */ }; /* * Relocation address types */ #define NE_RADDR_LOWBYTE 0 #define NE_RADDR_SELECTOR 2 #define NE_RADDR_POINTER32 3 #define NE_RADDR_OFFSET16 5 #define NE_RADDR_POINTER48 11 #define NE_RADDR_OFFSET32 13 /* * Relocation types */ #define NE_RELTYPE_INTERNAL 0 #define NE_RELTYPE_ORDINAL 1 #define NE_RELTYPE_NAME 2 #define NE_RELTYPE_OSFIXUP 3 #define NE_RELFLAG_ADDITIVE 4 /* Self-loading modules contain this structure in their first segment */ typedef struct { WORD version; /* Must be "A0" (0x3041) */ WORD reserved; FARPROC16 BootApp; /* startup procedure */ FARPROC16 LoadAppSeg; /* procedure to load a segment */ FARPROC16 reserved2; FARPROC16 MyAlloc; /* memory allocation procedure, * wine must write this field */ FARPROC16 EntryAddrProc; FARPROC16 ExitProc; /* exit procedure */ WORD reserved3[4]; FARPROC16 SetOwner; /* Set Owner procedure, exported by wine */ } SELFLOADHEADER; #define SEL(x) ((x)|1) static void NE_FixupSegmentPrologs(NE_MODULE *pModule, WORD segnum); /*********************************************************************** * NE_GetRelocAddrName */ static const char *NE_GetRelocAddrName( BYTE addr_type, int additive ) { switch(addr_type & 0x7f) { case NE_RADDR_LOWBYTE: return additive ? "BYTE add" : "BYTE"; case NE_RADDR_OFFSET16: return additive ? "OFFSET16 add" : "OFFSET16"; case NE_RADDR_POINTER32: return additive ? "POINTER32 add" : "POINTER32"; case NE_RADDR_SELECTOR: return additive ? "SELECTOR add" : "SELECTOR"; case NE_RADDR_POINTER48: return additive ? "POINTER48 add" : "POINTER48"; case NE_RADDR_OFFSET32: return additive ? "OFFSET32 add" : "OFFSET32"; } return "???"; } /*********************************************************************** * NE_OpenFile */ static HFILE16 NE_OpenFile( NE_MODULE *pModule ) { char *name = NE_MODULE_NAME( pModule ); HANDLE handle = CreateFileA( name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0 ); if (handle == INVALID_HANDLE_VALUE) { ERR( "Can't open file '%s' for module %04x\n", name, pModule->self ); return HFILE_ERROR; } return Win32HandleToDosFileHandle( handle ); } /*********************************************************************** * apply_relocations * * Apply relocations to a segment. Helper for NE_LoadSegment. */ static inline BOOL apply_relocations( NE_MODULE *pModule, const struct relocation_entry_s *rep, int count, int segnum ) { BYTE *func_name; char buffer[256]; int i, ordinal; WORD offset, *sp; HMODULE16 module; FARPROC16 address = 0; HMODULE16 *pModuleTable = (HMODULE16 *)((char *)pModule + pModule->ne_modtab); SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule ); SEGTABLEENTRY *pSeg = pSegTable + segnum - 1; /* * Go through the relocation table one entry at a time. */ for (i = 0; i < count; i++, rep++) { /* * Get the target address corresponding to this entry. */ /* If additive, there is no target chain list. Instead, add source and target */ int additive = rep->relocation_type & NE_RELFLAG_ADDITIVE; switch (rep->relocation_type & 3) { case NE_RELTYPE_ORDINAL: module = pModuleTable[rep->target1-1]; ordinal = rep->target2; address = NE_GetEntryPoint( module, ordinal ); if (!address) { NE_MODULE *pTarget = NE_GetPtr( module ); if (!pTarget) WARN_(module)("Module not found: %04x, reference %d of module %*.*s\n", module, rep->target1, *((BYTE *)pModule + pModule->ne_restab), *((BYTE *)pModule + pModule->ne_restab), (char *)pModule + pModule->ne_restab + 1 ); else { ERR("No implementation for %.*s.%d, setting to 0xdeadbeef\n", *((BYTE *)pTarget + pTarget->ne_restab), (char *)pTarget + pTarget->ne_restab + 1, ordinal ); address = (FARPROC16)0xdeadbeef; } } if (TRACE_ON(fixup)) { NE_MODULE *pTarget = NE_GetPtr( module ); TRACE("%d: %.*s.%d=%04x:%04x %s\n", i + 1, *((BYTE *)pTarget + pTarget->ne_restab), (char *)pTarget + pTarget->ne_restab + 1, ordinal, HIWORD(address), LOWORD(address), NE_GetRelocAddrName( rep->address_type, additive ) ); } break; case NE_RELTYPE_NAME: module = pModuleTable[rep->target1-1]; func_name = (BYTE *)pModule + pModule->ne_imptab + rep->target2; memcpy( buffer, func_name+1, *func_name ); buffer[*func_name] = '\0'; ordinal = NE_GetOrdinal( module, buffer ); address = NE_GetEntryPoint( module, ordinal ); if (ERR_ON(fixup) && !address) { NE_MODULE *pTarget = NE_GetPtr( module ); ERR("No implementation for %.*s.%s, setting to 0xdeadbeef\n", *((BYTE *)pTarget + pTarget->ne_restab), (char *)pTarget + pTarget->ne_restab + 1, buffer ); } if (!address) address = (FARPROC16) 0xdeadbeef; if (TRACE_ON(fixup)) { NE_MODULE *pTarget = NE_GetPtr( module ); TRACE("%d: %.*s.%s=%04x:%04x %s\n", i + 1, *((BYTE *)pTarget + pTarget->ne_restab), (char *)pTarget + pTarget->ne_restab + 1, buffer, HIWORD(address), LOWORD(address), NE_GetRelocAddrName( rep->address_type, additive ) ); } break; case NE_RELTYPE_INTERNAL: if ((rep->target1 & 0xff) == 0xff) { address = NE_GetEntryPoint( pModule->self, rep->target2 ); } else { address = (FARPROC16)MAKESEGPTR( SEL(pSegTable[(rep->target1 & 0xff)-1].hSeg), rep->target2 ); } TRACE("%d: %04x:%04x %s\n", i + 1, HIWORD(address), LOWORD(address), NE_GetRelocAddrName( rep->address_type, additive ) ); break; case NE_RELTYPE_OSFIXUP: /* Relocation type 7: * * These appear to be used as fixups for the Windows * floating point emulator. Let's just ignore them and * try to use the hardware floating point. Linux should * successfully emulate the coprocessor if it doesn't * exist. */ TRACE("%d: TYPE %d, OFFSET %04x, TARGET %04x %04x %s\n", i + 1, rep->relocation_type, rep->offset, rep->target1, rep->target2, NE_GetRelocAddrName( rep->address_type, additive ) ); continue; } offset = rep->offset; /* Apparently, high bit of address_type is sometimes set; */ /* we ignore it for now */ if (rep->address_type > NE_RADDR_OFFSET32) { char module[10]; GetModuleName16( pModule->self, module, sizeof(module) ); ERR("WARNING: module %s: unknown reloc addr type = 0x%02x. Please report.\n", module, rep->address_type ); } if (additive) { sp = MapSL( MAKESEGPTR( SEL(pSeg->hSeg), offset ) ); TRACE(" %04x:%04x\n", offset, *sp ); switch (rep->address_type & 0x7f) { case NE_RADDR_LOWBYTE: *(BYTE *)sp += LOBYTE((int)address); break; case NE_RADDR_OFFSET16: *sp += LOWORD(address); break; case NE_RADDR_POINTER32: *sp += LOWORD(address); *(sp+1) = HIWORD(address); break; case NE_RADDR_SELECTOR: /* Borland creates additive records with offset zero. Strange, but OK */ if (*sp) ERR("Additive selector to %04x.Please report\n",*sp); else *sp = HIWORD(address); break; default: goto unknown; } } else /* non-additive fixup */ { do { WORD next_offset; sp = MapSL( MAKESEGPTR( SEL(pSeg->hSeg), offset ) ); next_offset = *sp; TRACE(" %04x:%04x\n", offset, *sp ); switch (rep->address_type & 0x7f) { case NE_RADDR_LOWBYTE: *(BYTE *)sp = LOBYTE((int)address); break; case NE_RADDR_OFFSET16: *sp = LOWORD(address); break; case NE_RADDR_POINTER32: *(FARPROC16 *)sp = address; break; case NE_RADDR_SELECTOR: *sp = SELECTOROF(address); break; default: goto unknown; } if (next_offset == offset) break; /* avoid infinite loop */ if (next_offset >= GlobalSize16(pSeg->hSeg)) break; offset = next_offset; } while (offset != 0xffff); } } return TRUE; unknown: WARN("WARNING: %d: unknown ADDR TYPE %d, " "TYPE %d, OFFSET %04x, TARGET %04x %04x\n", i + 1, rep->address_type, rep->relocation_type, rep->offset, rep->target1, rep->target2); return FALSE; } static void notify_load_seg(NE_MODULE *pModule, WORD segnum, SEGTABLEENTRY *pSeg) { NFYLOADSEG nf; SEGPTR s = MapLS(&nf); nf.dwSize = sizeof(NFYLOADSEG); nf.wSelector = pSeg->hSeg | 1; nf.wSegNum = segnum; nf.wType = pSeg->flags; nf.wcInstance = 0; /* FIXME */ nf.lpstrModuleName = MAKESEGPTR(pModule->self, pModule->ne_restab + 1); TOOLHELP_CallNotify(NFY_LOADSEG, s); UnMapLS(s); } /*********************************************************************** * NE_LoadSegment */ BOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum ) { WORD count; DWORD pos; const struct relocation_entry_s *rep; int size; SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule ); SEGTABLEENTRY *pSeg = pSegTable + segnum - 1; if (pSeg->flags & NE_SEGFLAGS_LOADED) { /* self-loader ? -> already loaded it */ if (pModule->ne_flags & NE_FFLAGS_SELFLOAD) return TRUE; /* leave, except for DGROUP, as this may be the second instance */ if (segnum != pModule->ne_autodata) return TRUE; } if (!pSeg->filepos && !(pModule->ne_flags & NE_FFLAGS_SELFLOAD)) return TRUE; /* No file image, just return */ TRACE_(module)("Loading segment %d, hSeg=%04x, flags=%04x\n", segnum, pSeg->hSeg, pSeg->flags ); pos = pSeg->filepos << pModule->ne_align; if (pSeg->size) size = pSeg->size; else size = pSeg->minsize ? pSeg->minsize : 0x10000; if (pModule->ne_flags & NE_FFLAGS_SELFLOAD && segnum > 1) { /* Implement self-loading segments */ SELFLOADHEADER *selfloadheader; void *oldstack; HFILE16 hFile16; WORD args[3]; DWORD ret; selfloadheader = MapSL( MAKESEGPTR(SEL(pSegTable->hSeg),0) ); oldstack = getWOW32Reserved(); setWOW32Reserved((void *)MAKESEGPTR(pModule->self_loading_sel, 0xff00 - sizeof(STACK16FRAME))); hFile16 = NE_OpenFile( pModule ); TRACE_(dll)("Call LoadAppSegProc(hmodule=0x%04x,hf=%x,segnum=%d)\n", pModule->self,hFile16,segnum ); args[2] = pModule->self; args[1] = hFile16; args[0] = segnum; WOWCallback16Ex( (DWORD)selfloadheader->LoadAppSeg, WCB16_PASCAL, sizeof(args), args, &ret ); TRACE_(dll)("Ret LoadAppSegProc: hSeg=0x%04x\n", pSeg->hSeg); _lclose16( hFile16 ); setWOW32Reserved(oldstack); if (ret) { pSeg->hSeg = LOWORD(ret); pSeg->flags |= NE_SEGFLAGS_LOADED; } return TRUE; } else if (!(pSeg->flags & NE_SEGFLAGS_ITERATED)) { void *mem = GlobalLock16(pSeg->hSeg); if (!NE_READ_DATA( pModule, mem, pos, size )) return FALSE; pos += size; } else { /* The following bit of code for "iterated segments" was written without any documentation on the format of these segments. It seems to work, but may be missing something. */ const char *buff = NE_GET_DATA( pModule, pos, size ); const char* curr = buff; char *mem = GlobalLock16(pSeg->hSeg); pos += size; if (buff == NULL) return FALSE; while(curr < buff + size) { unsigned int rept = ((const short *)curr)[0]; unsigned int len = ((const short *)curr)[1]; curr += 2*sizeof(short); while (rept--) { memcpy( mem, curr, len ); mem += len; } curr += len; } } pSeg->flags |= NE_SEGFLAGS_LOADED; notify_load_seg(pModule, segnum, pSeg); /* Perform exported function prolog fixups */ NE_FixupSegmentPrologs( pModule, segnum ); if (!(pSeg->flags & NE_SEGFLAGS_RELOC_DATA)) return TRUE; /* No relocation data, we are done */ if (!NE_READ_DATA( pModule, &count, pos, sizeof(count) ) || !count) return TRUE; pos += sizeof(count); TRACE("Fixups for %.*s, segment %d, hSeg %04x\n", *((BYTE *)pModule + pModule->ne_restab), (char *)pModule + pModule->ne_restab + 1, segnum, pSeg->hSeg ); if (!(rep = NE_GET_DATA( pModule, pos, count * sizeof(struct relocation_entry_s) ))) return FALSE; return apply_relocations( pModule, rep, count, segnum ); } /*********************************************************************** * NE_LoadAllSegments */ BOOL NE_LoadAllSegments( NE_MODULE *pModule ) { int i; SEGTABLEENTRY * pSegTable = NE_SEG_TABLE(pModule); if ((pModule->ne_expver < 0x300) && !(pModule->ne_flags & NE_FFLAGS_BUILTIN) && !GetModuleHandle16("RMPATCH")) LoadLibrary16("RMPATCH.DLL"); if (pModule->ne_flags & NE_FFLAGS_SELFLOAD) { HFILE16 hFile16; HGLOBAL16 sel; /* Handle self-loading modules */ SELFLOADHEADER *selfloadheader; HMODULE16 mod = GetModuleHandle16("KERNEL"); void *oldstack; WORD args[2]; TRACE_(module)("%.*s is a self-loading module!\n", *((BYTE*)pModule + pModule->ne_restab), (char *)pModule + pModule->ne_restab + 1); if (!NE_LoadSegment( pModule, 1 )) return FALSE; selfloadheader = MapSL( MAKESEGPTR(SEL(pSegTable->hSeg), 0) ); selfloadheader->EntryAddrProc = GetProcAddress16(mod,"EntryAddrProc"); selfloadheader->MyAlloc = GetProcAddress16(mod,"MyAlloc"); selfloadheader->SetOwner = GetProcAddress16(mod,"FarSetOwner"); sel = GlobalAlloc16( GMEM_ZEROINIT, 0xFF00 ); pModule->self_loading_sel = SEL(sel); FarSetOwner16( sel, pModule->self ); oldstack = getWOW32Reserved(); setWOW32Reserved((void *)MAKESEGPTR(pModule->self_loading_sel, 0xff00 - sizeof(STACK16FRAME) )); hFile16 = NE_OpenFile(pModule); TRACE_(dll)("CallBootAppProc(hModule=0x%04x,hf=0x%04x)\n", pModule->self,hFile16); args[1] = pModule->self; args[0] = hFile16; WOWCallback16Ex( (DWORD)selfloadheader->BootApp, WCB16_PASCAL, sizeof(args), args, NULL ); TRACE_(dll)("Return from CallBootAppProc\n"); _lclose16(hFile16); setWOW32Reserved(oldstack); for (i = 2; i <= pModule->ne_cseg; i++) if (!NE_LoadSegment( pModule, i )) return FALSE; } else { for (i = 1; i <= pModule->ne_cseg; i++) if (!NE_LoadSegment( pModule, i )) return FALSE; } return TRUE; } /*********************************************************************** * NE_FixupSegmentPrologs * * Fixup exported functions prologs of one segment */ static void NE_FixupSegmentPrologs(NE_MODULE *pModule, WORD segnum) { SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule ); ET_BUNDLE *bundle; ET_ENTRY *entry; WORD dgroup, num_entries, sel = SEL(pSegTable[segnum-1].hSeg); BYTE *pSeg, *pFunc; TRACE("(%d);\n", segnum); if (pSegTable[segnum-1].flags & NE_SEGFLAGS_DATA) { pSegTable[segnum-1].flags |= NE_SEGFLAGS_LOADED; return; } if (!pModule->ne_autodata) return; if (!pSegTable[pModule->ne_autodata-1].hSeg) return; dgroup = SEL(pSegTable[pModule->ne_autodata-1].hSeg); pSeg = MapSL( MAKESEGPTR(sel, 0) ); bundle = (ET_BUNDLE *)((BYTE *)pModule+pModule->ne_enttab); do { TRACE("num_entries: %d, bundle: %p, next: %04x, pSeg: %p\n", bundle->last - bundle->first, bundle, bundle->next, pSeg); if (!(num_entries = bundle->last - bundle->first)) return; entry = (ET_ENTRY *)((BYTE *)bundle+6); while (num_entries--) { /*TRACE("entry: %p, entry->segnum: %d, entry->offs: %04x\n", entry, entry->segnum, entry->offs);*/ if (entry->segnum == segnum) { pFunc = pSeg+entry->offs; TRACE("pFunc: %p, *(DWORD *)pFunc: %08x, num_entries: %d\n", pFunc, *(DWORD *)pFunc, num_entries); if (*(pFunc+2) == 0x90) /* nop */ { if (*(WORD *)pFunc == 0x581e) /* push ds, pop ax */ { TRACE("patch %04x:%04x -> mov ax, ds\n", sel, entry->offs); *(WORD *)pFunc = 0xd88c; /* mov ax, ds */ } if (*(WORD *)pFunc == 0xd88c) /* mov ax, ds */ { if ((entry->flags & 2)) /* public data ? */ { TRACE("patch %04x:%04x -> mov ax, dgroup [%04x]\n", sel, entry->offs, dgroup); *pFunc = 0xb8; /* mov ax, */ *(WORD *)(pFunc+1) = dgroup; } else if ((pModule->ne_flags & NE_FFLAGS_MULTIPLEDATA) && (entry->flags & 1)) /* exported ? */ { TRACE("patch %04x:%04x -> nop, nop\n", sel, entry->offs); *(WORD *)pFunc = 0x9090; /* nop, nop */ } } } } entry++; } } while ( (bundle->next) && (bundle = ((ET_BUNDLE *)((BYTE *)pModule + bundle->next))) ); } /*********************************************************************** * PatchCodeHandle (KERNEL.110) * * Needed for self-loading modules. */ DWORD WINAPI PatchCodeHandle16(HANDLE16 hSeg) { WORD segnum; WORD sel = SEL(hSeg); NE_MODULE *pModule = NE_GetPtr(FarGetOwner16(sel)); SEGTABLEENTRY *pSegTable = NE_SEG_TABLE(pModule); TRACE_(module)("(%04x);\n", hSeg); /* find the segment number of the module that belongs to hSeg */ for (segnum = 1; segnum <= pModule->ne_cseg; segnum++) { if (SEL(pSegTable[segnum-1].hSeg) == sel) { NE_FixupSegmentPrologs(pModule, segnum); break; } } return MAKELONG(hSeg, sel); } /*********************************************************************** * NE_GetDLLInitParams */ static VOID NE_GetDLLInitParams( NE_MODULE *pModule, WORD *hInst, WORD *ds, WORD *heap ) { SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule ); if (!(pModule->ne_flags & NE_FFLAGS_SINGLEDATA)) { if (pModule->ne_flags & NE_FFLAGS_MULTIPLEDATA || pModule->ne_autodata) { /* Not SINGLEDATA */ ERR_(dll)("Library is not marked SINGLEDATA\n"); exit(1); } else /* DATA NONE DLL */ { *ds = 0; *heap = 0; } } else /* DATA SINGLE DLL */ { if (pModule->ne_autodata) { *ds = SEL(pSegTable[pModule->ne_autodata-1].hSeg); *heap = pModule->ne_heap; } else /* hmm, DLL has no dgroup, but why has it NE_FFLAGS_SINGLEDATA set ? Buggy DLL compiler ? */ { *ds = 0; *heap = 0; } } *hInst = *ds ? GlobalHandle16(*ds) : pModule->self; } /*********************************************************************** * NE_InitDLL * * Call the DLL initialization code */ static BOOL NE_InitDLL( NE_MODULE *pModule, SEGPTR cmdline ) { SEGTABLEENTRY *pSegTable; WORD hInst, ds, heap; CONTEXT context; pSegTable = NE_SEG_TABLE( pModule ); if (!(pModule->ne_flags & NE_FFLAGS_LIBMODULE) || (pModule->ne_flags & NE_FFLAGS_WIN32)) return TRUE; /*not a library*/ /* Call USER signal handler for Win3.1 compatibility. */ NE_CallUserSignalProc( pModule->self, USIG16_DLL_LOAD, 0, 0, 0 ); // look though segments for load failures if dll is selfloading if (pModule->ne_flags & NE_FFLAGS_SELFLOAD) { for (int i = 2; i <= pModule->ne_cseg; i++) NE_LoadSegment( pModule, i ); } if (!SELECTOROF(pModule->ne_csip)) return TRUE; /* no initialization code */ /* Registers at initialization must be: * cx heap size * di library instance * ds data segment if any * es:si command line */ memset( &context, 0, sizeof(context) ); NE_GetDLLInitParams( pModule, &hInst, &ds, &heap ); context.Ecx = heap; context.Edi = hInst; context.SegDs = ds; if (cmdline) { context.SegEs = HIWORD(cmdline); context.Esi = LOWORD(cmdline); } else context.SegEs = ds; /* who knows ... */ context.SegFs = wine_get_fs(); context.SegGs = wine_get_gs(); context.SegCs = SEL(pSegTable[SELECTOROF(pModule->ne_csip)-1].hSeg); context.Eip = OFFSETOF(pModule->ne_csip); context.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp); { NFYSTARTDLL nf; SEGPTR s = MapLS(&nf); SEGPTR save = getWOW32Reserved(); nf.dwSize = sizeof(NFYSTARTDLL); nf.hModule = pModule->self; nf.wCS = context.SegCs; nf.wIP = context.Eip; TOOLHELP_CallNotify(NFY_STARTDLL, s); UnMapLS(s); setWOW32Reserved(save); } pModule->ne_csip = 0; /* Don't initialize it twice */ TRACE_(dll)("Calling LibMain for %.*s, cs:ip=%04x:%04x ds=%04x di=%04x cx=%04x\n", *((BYTE*)pModule + pModule->ne_restab), (char *)pModule + pModule->ne_restab + 1, context.SegCs, context.Eip, context.SegDs, LOWORD(context.Edi), LOWORD(context.Ecx) ); WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&context ); return TRUE; } /*********************************************************************** * NE_InitializeDLLs * * Recursively initialize all DLLs (according to the order in which * they where loaded). */ void NE_InitializeDLLs( HMODULE16 hModule, SEGPTR cmdline ) { NE_MODULE *pModule; HMODULE16 *pDLL; if (!(pModule = NE_GetPtr( hModule ))) return; assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); if (pModule->dlls_to_init) { HGLOBAL16 to_init = pModule->dlls_to_init; pModule->dlls_to_init = 0; for (pDLL = GlobalLock16( to_init ); *pDLL; pDLL++) { NE_InitializeDLLs( *pDLL, NULL ); } GlobalFree16( to_init ); } NE_InitDLL( pModule, cmdline ); } /********************************************************************** * NE_CallUserSignalProc * * According to "Undocumented Windows", the task signal proc is * bypassed for module load/unload notifications, and the USER signal * proc is called directly instead. This is what this function does. */ typedef DWORD (WINAPI *pSignalProc)( HANDLE16 module, UINT16 code, UINT16 exit, HINSTANCE16 inst, HQUEUE16 queue ); void NE_CallUserSignalProc( HMODULE16 hModule, UINT16 code, WORD arg1, WORD arg2, WORD arg3 ) { FARPROC16 proc; HMODULE16 user = GetModuleHandle16("user.exe"); if (!user) return; if ((proc = GetProcAddress16( user, "SignalProc" ))) { /* USER is always a builtin dll */ pSignalProc sigproc = (pSignalProc)((ENTRYPOINT16 *)MapSL( (SEGPTR)proc ))->target; sigproc( hModule, code, arg1, arg2, arg3 ); } } /*********************************************************************** * NE_CallDllEntryPoint * * Call the DllEntryPoint of DLLs with subsystem >= 4.0 */ typedef DWORD (WINAPI *WinNEEntryProc)(DWORD,WORD,WORD,WORD,DWORD,WORD); static void NE_CallDllEntryPoint( NE_MODULE *pModule, DWORD dwReason ) { WORD hInst, ds, heap; FARPROC16 entryPoint; if (!(pModule->ne_flags & NE_FFLAGS_LIBMODULE)) return; if (!(pModule->ne_flags & NE_FFLAGS_BUILTIN) && pModule->ne_expver < 0x0400) return; if (!(entryPoint = GetProcAddress16( pModule->self, "DllEntryPoint" ))) return; NE_GetDLLInitParams( pModule, &hInst, &ds, &heap ); TRACE_(dll)( "Calling %s DllEntryPoint, cs:ip=%04x:%04x\n", NE_MODULE_NAME( pModule ), SELECTOROF(entryPoint), OFFSETOF(entryPoint) ); if ( pModule->ne_flags & NE_FFLAGS_BUILTIN ) { WinNEEntryProc entryProc = (WinNEEntryProc)((ENTRYPOINT16 *)MapSL( (SEGPTR)entryPoint ))->target; entryProc( dwReason, hInst, ds, heap, 0, 0 ); } else { CONTEXT context; WORD args[8]; memset( &context, 0, sizeof(context) ); context.SegDs = ds; context.SegEs = ds; /* who knows ... */ context.SegFs = wine_get_fs(); context.SegGs = wine_get_gs(); context.SegCs = HIWORD(entryPoint); context.Eip = LOWORD(entryPoint); context.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp); args[7] = HIWORD(dwReason); args[6] = LOWORD(dwReason); args[5] = hInst; args[4] = ds; args[3] = heap; args[2] = 0; /* HIWORD(dwReserved1) */ args[1] = 0; /* LOWORD(dwReserved1) */ args[0] = 0; /* wReserved2 */ WOWCallback16Ex( 0, WCB16_REGS, sizeof(args), args, (DWORD *)&context ); } } /*********************************************************************** * NE_DllProcessAttach * * Call the DllEntryPoint of all modules this one (recursively) * depends on, according to the order in which they were loaded. * * Note that --as opposed to the PE module case-- there is no notion * of 'module loaded into a process' for NE modules, and hence we * have no place to store the fact that the DllEntryPoint of a * given module was already called on behalf of this process (e.g. * due to some earlier LoadLibrary16 call). * * Thus, we just call the DllEntryPoint twice in that case. Win9x * appears to behave this way as well ... * * This routine must only be called with the Win16Lock held. * * FIXME: We should actually abort loading in case the DllEntryPoint * returns FALSE ... * */ struct ne_init_list { int count; int size; NE_MODULE **module; }; static void add_to_init_list( struct ne_init_list *list, NE_MODULE *hModule ) { NE_MODULE **newModule = NULL; if ( list->count == list->size ) { int newSize = list->size + 128; if (list->module) newModule = HeapReAlloc( GetProcessHeap(), 0, list->module, newSize*sizeof(NE_MODULE *) ); else newModule = HeapAlloc( GetProcessHeap(), 0, newSize*sizeof(NE_MODULE *) ); if ( !newModule ) { FIXME_(dll)("Out of memory!\n"); return; } list->module = newModule; list->size = newSize; } list->module[list->count++] = hModule; } static void free_init_list( struct ne_init_list *list ) { if ( list->module ) { HeapFree( GetProcessHeap(), 0, list->module ); memset( list, 0, sizeof(*list) ); } } static void fill_init_list( struct ne_init_list *list, HMODULE16 hModule ) { NE_MODULE *pModule; HMODULE16 *pModRef; int i; if (!(pModule = NE_GetPtr( hModule ))) return; assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); /* Never add a module twice */ for ( i = 0; i < list->count; i++ ) if ( list->module[i] == pModule ) return; /* Check for recursive call */ if ( pModule->ne_flagsothers & 0x80 ) return; TRACE_(dll)("(%s) - START\n", NE_MODULE_NAME(pModule) ); /* Tag current module to prevent recursive loop */ pModule->ne_flagsothers |= 0x80; /* Recursively attach all DLLs this one depends on */ pModRef = (HMODULE16 *)((char *)pModule + pModule->ne_modtab); for ( i = 0; i < pModule->ne_cmod; i++ ) if ( pModRef[i] ) fill_init_list( list, pModRef[i] ); /* Add current module */ add_to_init_list( list, pModule ); /* Remove recursion flag */ pModule->ne_flagsothers &= ~0x80; TRACE_(dll)("(%s) - END\n", NE_MODULE_NAME(pModule) ); } static void call_init_list( struct ne_init_list *list ) { int i; for ( i = 0; i < list->count; i++ ) NE_CallDllEntryPoint( list->module[i], DLL_PROCESS_ATTACH ); } void NE_DllProcessAttach( HMODULE16 hModule ) { struct ne_init_list list; memset( &list, 0, sizeof(list) ); fill_init_list( &list, hModule ); call_init_list( &list ); free_init_list( &list ); } /*********************************************************************** * NE_Ne2MemFlags * * This function translates NE segment flags to GlobalAlloc flags */ static WORD NE_Ne2MemFlags(WORD flags) { WORD memflags = 0; #if 1 if (flags & NE_SEGFLAGS_DISCARDABLE) memflags |= GMEM_DISCARDABLE; if (flags & NE_SEGFLAGS_MOVEABLE || ( ! (flags & NE_SEGFLAGS_DATA) && ! (flags & NE_SEGFLAGS_LOADED) && ! (flags & NE_SEGFLAGS_ALLOCATED) ) ) memflags |= GMEM_MOVEABLE; memflags |= GMEM_ZEROINIT; #else memflags = GMEM_ZEROINIT | GMEM_FIXED; #endif return memflags; } /*********************************************************************** * MyAlloc (KERNEL.668) Wine-specific export * * MyAlloc() function for self-loading apps. */ DWORD WINAPI MyAlloc16( WORD wFlags, WORD wSize, WORD wElem ) { DWORD size = wSize << wElem; HANDLE16 hMem = 0; WORD gflags = NE_Ne2MemFlags(wFlags); hMem = GlobalAlloc16(gflags, size); if ( ((wFlags & 0x7) != 0x1) && /* DATA */ ((wFlags & 0x7) != 0x7) ) /* DATA|ALLOCATED|LOADED */ { WORD hSel = SEL(hMem); WORD access = SelectorAccessRights16(hSel,0,0); access |= 2<<2; /* SEGMENT_CODE */ SelectorAccessRights16(hSel,1,access); } return MAKELONG(SEL(hMem), hMem); } /*********************************************************************** * NE_GetInstance */ HINSTANCE16 NE_GetInstance( NE_MODULE *pModule ) { if ( !pModule->ne_autodata ) return pModule->self; else { SEGTABLEENTRY *pSeg; pSeg = NE_SEG_TABLE( pModule ) + pModule->ne_autodata - 1; return pSeg->hSeg; } } /*********************************************************************** * NE_CreateSegment */ BOOL NE_CreateSegment( NE_MODULE *pModule, int segnum, WORD sel ) { SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ) + segnum - 1; int minsize; unsigned char selflags; assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) ); if ( segnum < 1 || segnum > pModule->ne_cseg ) return FALSE; if ( (pModule->ne_flags & NE_FFLAGS_SELFLOAD) && segnum != 1 ) return TRUE; /* selfloader allocates segment itself */ if ( (pSeg->flags & NE_SEGFLAGS_ALLOCATED) && segnum != pModule->ne_autodata ) return TRUE; /* all but DGROUP only allocated once */ if (pSeg->minsize) { minsize = pSeg->minsize + 2; if ( segnum == pModule->ne_autodata ) { minsize += pModule->ne_stack; if (pModule->ne_heap > 0 && pModule->ne_heap < 0x800) { if (minsize + 0x800 > 0x10000) { if (pModule->ne_heap < 0x100) { pModule->ne_heap = 0x100; } } else { pModule->ne_heap = 0x800; } } minsize += pModule->ne_heap; if (minsize >= 0x10000) minsize = 0x10000; } } else minsize = 0x10000; selflags = (pSeg->flags & NE_SEGFLAGS_DATA) ? WINE_LDT_FLAGS_DATA : WINE_LDT_FLAGS_CODE; if (pSeg->flags & NE_SEGFLAGS_32BIT) selflags |= WINE_LDT_FLAGS_32BIT; if (pModule->ne_expver < 0x300 && !(pModule->ne_flags & NE_FFLAGS_BUILTIN)) selflags &= ~WINE_LDT_FLAGS_32BIT; pSeg->hSeg = GLOBAL_Alloc( NE_Ne2MemFlags(pSeg->flags), minsize, pModule->self, selflags, sel ? sel : AllocSelector16(0) ); GLOBAL_SetSeg(pSeg->hSeg, segnum, (pSeg->flags & NE_SEGFLAGS_DATA) ? 2 : 3); if (!pSeg->hSeg) return FALSE; pSeg->flags |= NE_SEGFLAGS_ALLOCATED; return TRUE; } /*********************************************************************** * NE_CreateAllSegments */ BOOL NE_CreateAllSegments( NE_MODULE *pModule ) { int i; if (pModule->ne_cseg) { WORD sel = AllocSelectorArray16(pModule->ne_cseg); if (!sel) return FALSE; for ( i = 1; i <= pModule->ne_cseg; i++ ) if ( !NE_CreateSegment( pModule, i, sel + ((i - 1) << __AHSHIFT)) ) return FALSE; } pModule->dgroup_entry = pModule->ne_autodata ? pModule->ne_segtab + (pModule->ne_autodata - 1) * sizeof(SEGTABLEENTRY) : 0; return TRUE; } /********************************************************************** * IsSharedSelector (KERNEL.345) */ BOOL16 WINAPI IsSharedSelector16( HANDLE16 selector ) { /* Check whether the selector belongs to a DLL */ NE_MODULE *pModule = NE_GetPtr( selector ); if (!pModule) return FALSE; return (pModule->ne_flags & NE_FFLAGS_LIBMODULE) != 0; } ================================================ FILE: krnl386/registry.c ================================================ /* * 16-bit registry functions * * Copyright 1996 Marcus Meissner * Copyright 1998 Matthew Becker * Copyright 1999 Sylvain St-Germain * Copyright 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "winreg.h" #include "wine/debug.h" #include "wine/winbase16.h" #include "wine/exception.h" #include "kernel16_private.h" WINE_DEFAULT_DEBUG_CHANNEL(reg); NTSYSAPI NTSTATUS WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG); static DWORD (WINAPI *pRegCloseKey)(HKEY); static DWORD (WINAPI *pRegCreateKeyA)(HKEY,LPCSTR,PHKEY); static DWORD (WINAPI *pRegDeleteKeyA)(HKEY,LPCSTR); static DWORD (WINAPI *pRegDeleteValueA)(HKEY,LPCSTR); static DWORD (WINAPI *pRegEnumKeyA)(HKEY,DWORD,LPSTR,DWORD); static DWORD (WINAPI *pRegEnumValueA)(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD); static DWORD (WINAPI *pRegFlushKey)(HKEY); static DWORD (WINAPI *pRegOpenKeyA)(HKEY,LPCSTR,PHKEY); static DWORD (WINAPI *pRegQueryValueA)(HKEY,LPCSTR,LPSTR,LPLONG); static DWORD (WINAPI *pRegQueryValueExA)(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); static DWORD (WINAPI *pRegSetValueA)(HKEY,LPCSTR,DWORD,LPCSTR,DWORD); static DWORD (WINAPI *pRegSetValueExA)(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD); static HMODULE advapi32; static BOOL enable_registry_redirection; static HKEY registry_redirection_root; static HKEY registry_redirection_classes; static HKEY registry_redirection_current_user; static HKEY registry_redirection_local_machine; /* 0 and 1 are valid rootkeys in win16 shell.dll and are used by * some programs. Do not remove those cases. -MM */ static inline void fix_win16_hkey( HKEY *hkey ) { if (*hkey == 0 || *hkey == (HKEY)1) *hkey = HKEY_CLASSES_ROOT; if (enable_registry_redirection && *hkey == HKEY_CLASSES_ROOT) { *hkey = registry_redirection_classes; } if (enable_registry_redirection && *hkey == HKEY_CURRENT_USER) { *hkey = registry_redirection_current_user; } if (enable_registry_redirection && *hkey == HKEY_LOCAL_MACHINE) { *hkey = registry_redirection_local_machine; } } static BOOL is_redir_root_key(HKEY key) { if (!enable_registry_redirection) return FALSE; return key == registry_redirection_classes; } static void init_func_ptrs(void) { enable_registry_redirection = krnl386_get_config_int("otvdm", "EnableRegistryRedirection", FALSE); if (enable_registry_redirection) { LONG result = 0; result = result || RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\otvdm\\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, ®istry_redirection_root, NULL); result = result || RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\otvdm\\HKEY_CLASSES_ROOT\\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, ®istry_redirection_classes, NULL); result = result || RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\otvdm\\HKEY_CURRENT_USER\\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, ®istry_redirection_current_user, NULL); result = result || RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\otvdm\\HKEY_LOCAL_MACHINE\\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, ®istry_redirection_local_machine, NULL); if (result) { ERR("Could not init EnableRegistryRedirection\n"); enable_registry_redirection = FALSE; } } advapi32 = LoadLibraryA("advapi32.dll"); if (!advapi32) { ERR( "Unable to load advapi32.dll\n" ); ExitProcess(1); } #define GET_PTR(name) p##name = (void *)GetProcAddress(advapi32,#name); GET_PTR( RegCloseKey ); GET_PTR( RegCreateKeyA ); GET_PTR( RegDeleteKeyA ); GET_PTR( RegDeleteValueA ); GET_PTR( RegEnumKeyA ); GET_PTR( RegEnumValueA ); GET_PTR( RegFlushKey ); GET_PTR( RegOpenKeyA ); GET_PTR( RegQueryValueA ); GET_PTR( RegQueryValueExA ); GET_PTR( RegSetValueA ); GET_PTR( RegSetValueExA ); #undef GET_PTR } static BOOL is_empty(LPCSTR name) { return name == NULL || name[0] == 0; } /****************************************************************************** * RegEnumKey [KERNEL.216] */ DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); DWORD result = pRegEnumKeyA( hkey, index, name, name_len ); return result; } static void fix_redir_key(PHKEY retkey, LPDWORD result) { if (!enable_registry_redirection) return; if (*retkey == registry_redirection_classes) { *retkey = HKEY_CLASSES_ROOT; } if (*retkey == registry_redirection_local_machine) { *retkey = HKEY_LOCAL_MACHINE; } if (*retkey == registry_redirection_current_user) { *retkey = HKEY_CURRENT_USER; } } /****************************************************************************** * RegOpenKey [KERNEL.217] */ DWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, PHKEY retkey ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); DWORD result = pRegOpenKeyA( hkey, name, retkey ); fix_redir_key(retkey, &result); return result; } static LPWSTR strdupAtoW(LPCSTR str) { LPWSTR ret; INT len; if (!str) return NULL; len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); if (ret) MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len); return ret; } /****************************************************************************** * RegCreateKey [KERNEL.218] */ DWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, PHKEY retkey ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); DWORD result; TRACE("%x %s\n", hkey, name); if (is_redir_root_key(hkey) && is_empty(name)) { *retkey = hkey; fix_redir_key(retkey, &result); return ERROR_SUCCESS; } // try to create with write access result = RegCreateKeyExA(hkey, name, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, retkey, NULL); // try to redirect to HKEY_CURRENT_USER if possible if (name && !enable_registry_redirection && (result != ERROR_SUCCESS)) { if (hkey == HKEY_CLASSES_ROOT) { const char softclass[] = "Software\\Classes\\"; char *hkcukey = HeapAlloc(GetProcessHeap(), 0, 17 + strlen(name) + 1); strcpy(hkcukey, softclass); strcat(hkcukey, name); result = RegCreateKeyExA(HKEY_CURRENT_USER, hkcukey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, retkey, NULL); if (result == ERROR_SUCCESS) WARN("HKCR CreateKey redirected to HKCU\n"); HeapFree(GetProcessHeap(), 0, hkcukey); } else if(hkey < 0x80000000) { // regcreatekeyex will convert hkcu\software\classes subkeys into hkcr so try ntcreatekey UNICODE_STRING nameU; OBJECT_ATTRIBUTES objattr; WCHAR *nameW = strdupAtoW(name); DWORD dis, ret; RtlCreateUnicodeString(&nameU, nameW); HeapFree(GetProcessHeap(), 0, nameW); InitializeObjectAttributes(&objattr, &nameU, 0, hkey, NULL); ret = NtCreateKey(retkey, KEY_ALL_ACCESS, &objattr, 0, NULL, REG_OPTION_NON_VOLATILE, &dis); result = RtlNtStatusToDosError(ret); RtlFreeUnicodeString(&nameU); } } // failed, try to open for reading if (result != ERROR_SUCCESS) result = RegOpenKeyA(hkey, name, retkey); fix_redir_key(retkey, &result); TRACE("%x, %x\n", result, *retkey); return result; } /****************************************************************************** * RegDeleteKey [KERNEL.219] */ DWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); if (is_redir_root_key(hkey) && is_empty(name)) return ERROR_SUCCESS; DWORD result = pRegDeleteKeyA( hkey, name ); return result; } /****************************************************************************** * RegCloseKey [KERNEL.220] */ DWORD WINAPI RegCloseKey16( HKEY hkey ) { if (!advapi32) init_func_ptrs(); TRACE("%x\n", hkey); fix_win16_hkey( &hkey ); if (is_redir_root_key(hkey)) return ERROR_SUCCESS; DWORD result = pRegCloseKey( hkey ); return result; } /****************************************************************************** * RegSetValue [KERNEL.221] */ DWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count ) { HKEY subkey; DWORD result; if (type != REG_SZ) return 7; // ntvdm returns 7 in this case for some reason if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); __TRY { count = strlen(data); } __EXCEPT_ALL { return ERROR_INVALID_PARAMETER; } __ENDTRY if (!name) return RegSetValueEx16(hkey, NULL, 0, type, data, count); result = RegCreateKey16(hkey, name, &subkey); if (result == ERROR_SUCCESS) { result = RegSetValueEx16(subkey, NULL, 0, type, data, count); RegCloseKey16(subkey); } return result; } /****************************************************************************** * RegDeleteValue [KERNEL.222] */ DWORD WINAPI RegDeleteValue16( HKEY hkey, LPSTR name ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); if (is_redir_root_key(hkey) && is_empty(name)) return ERROR_SUCCESS; DWORD result = pRegDeleteValueA( hkey, name ); return result; } /****************************************************************************** * RegEnumValue [KERNEL.223] */ DWORD WINAPI RegEnumValue16( HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count, LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); DWORD result = pRegEnumValueA( hkey, index, value, val_count, reserved, type, data, count ); return result; } /****************************************************************************** * RegQueryValue [KERNEL.224] * * NOTES * Is this HACK still applicable? * * HACK * The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just * mask out the high 16 bit. This (not so much incidentally) hopefully fixes * Aldus FH4) */ DWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); if (count) *count &= 0xffff; DWORD incount = *count; DWORD result = pRegQueryValueA( hkey, name, data, (LONG*) count ); if (result == ERROR_MORE_DATA) { DWORD realcount = *count + 1; char *buf = HeapAlloc(GetProcessHeap(), 0, realcount); result = pRegQueryValueA(hkey, name, buf, &realcount); memcpy(data, buf, incount); HeapFree(GetProcessHeap(), 0, buf); *count = incount; } return result; } /****************************************************************************** * RegQueryValueEx [KERNEL.225] */ DWORD WINAPI RegQueryValueEx16( HKEY hkey, LPCSTR name, LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); DWORD result = pRegQueryValueExA( hkey, name, reserved, type, data, count ); return result; } /****************************************************************************** * RegSetValueEx [KERNEL.226] */ DWORD WINAPI RegSetValueEx16( HKEY hkey, LPCSTR name, DWORD reserved, DWORD type, const BYTE *data, DWORD count ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); DWORD result = pRegSetValueExA( hkey, name, reserved, type, data, count ); return result; } /****************************************************************************** * RegFlushKey [KERNEL.227] */ DWORD WINAPI RegFlushKey16( HKEY hkey ) { if (!advapi32) init_func_ptrs(); fix_win16_hkey( &hkey ); DWORD result = pRegFlushKey( hkey ); return result; } ================================================ FILE: krnl386/relay.c ================================================ /* * Copyright 1993 Robert J. Amstadt * Copyright 1995 Alexandre Julliard * Copyright 2002 Jukka Heinonen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "winternl.h" #include "kernel16_private.h" #include "dosexe.h" #include "wine/unicode.h" #include "wine/library.h" #include "wine/debug.h" #include "windows/wownt32.h" WINE_DEFAULT_DEBUG_CHANNEL(relay); #include typedef struct { BYTE pushw_bp; WORD pushl; DWORD funcptr; BYTE call_near; short call_to; CALLFROM16 call; BOOL used; LPCSTR name; } PROC16_RELAY; static PROC16_RELAY *thunk32_relay_array; static WORD thunk32_relay_segment; /* * Magic DWORD used to check stack integrity. */ #define RELAY_MAGIC 0xabcdef00 /* * Memory block for temporary 16-bit stacks used with relay calls. */ typedef struct { DWORD inuse; /* non-zero if stack block is in use */ DWORD eip; /* saved ip */ DWORD seg_cs; /* saved cs */ DWORD esp; /* saved sp */ DWORD seg_ss; /* saved ss */ DWORD stack_bottom; /* guard dword */ BYTE stack[256-7*4]; /* 16-bit stack */ DWORD stack_top; /* guard dword */ } RELAY_Stack16; static const WCHAR **debug_relay_excludelist; static const WCHAR **debug_relay_includelist; static const WCHAR **debug_snoop_excludelist; static const WCHAR **debug_snoop_includelist; /* compare an ASCII and a Unicode string without depending on the current codepage */ static inline int strcmpiAW( const char *strA, const WCHAR *strW ) { while (*strA && (toupperW((unsigned char)*strA) == toupperW(*strW))) { strA++; strW++; } return toupperW((unsigned char)*strA) - toupperW(*strW); } /* compare an ASCII and a Unicode string without depending on the current codepage */ static inline int strncmpiAW( const char *strA, const WCHAR *strW, int n ) { int ret = 0; for ( ; n > 0; n--, strA++, strW++) if ((ret = toupperW((unsigned char)*strA) - toupperW(*strW)) || !*strA) break; return ret; } /*********************************************************************** * build_list * * Build a function list from a ';'-separated string. */ static const WCHAR **build_list( const WCHAR *buffer ) { int count = 1; const WCHAR *p = buffer; const WCHAR **ret; while ((p = strchrW( p, ';' ))) { count++; p++; } /* allocate count+1 pointers, plus the space for a copy of the string */ if ((ret = RtlAllocateHeap( GetProcessHeap(), 0, (count+1) * sizeof(WCHAR*) + (strlenW(buffer)+1) * sizeof(WCHAR) ))) { WCHAR *str = (WCHAR *)(ret + count + 1); WCHAR *p = str; strcpyW( str, buffer ); count = 0; for (;;) { ret[count++] = p; if (!(p = strchrW( p, ';' ))) break; *p++ = 0; } ret[count++] = NULL; } return ret; } /*********************************************************************** * RELAY16_InitDebugLists * * Build the relay include/exclude function lists. */ void RELAY16_InitDebugLists(void) { OBJECT_ATTRIBUTES attr; UNICODE_STRING name; char buffer[1024]; HANDLE root, hkey; DWORD count; WCHAR *str; static const WCHAR configW[] = {'S','o','f','t','w','a','r','e','\\', 'W','i','n','e','\\', 'D','e','b','u','g',0}; static const WCHAR RelayIncludeW[] = {'R','e','l','a','y','I','n','c','l','u','d','e',0}; static const WCHAR RelayExcludeW[] = {'R','e','l','a','y','E','x','c','l','u','d','e',0}; static const WCHAR SnoopIncludeW[] = {'S','n','o','o','p','I','n','c','l','u','d','e',0}; static const WCHAR SnoopExcludeW[] = {'S','n','o','o','p','E','x','c','l','u','d','e',0}; RtlOpenCurrentUser( KEY_READ, &root ); attr.Length = sizeof(attr); attr.RootDirectory = root; attr.ObjectName = &name; attr.Attributes = 0; attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL; RtlInitUnicodeString( &name, configW ); /* @@ Wine registry key: HKCU\Software\Wine\Debug */ if (NtOpenKey( &hkey, KEY_READ, &attr )) hkey = 0; NtClose( root ); if (!hkey) return; str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)buffer)->Data; RtlInitUnicodeString( &name, RelayIncludeW ); if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count )) { debug_relay_includelist = build_list( str ); } RtlInitUnicodeString( &name, RelayExcludeW ); if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count )) { debug_relay_excludelist = build_list( str ); } RtlInitUnicodeString( &name, SnoopIncludeW ); if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count )) { debug_snoop_includelist = build_list( str ); } RtlInitUnicodeString( &name, SnoopExcludeW ); if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count )) { debug_snoop_excludelist = build_list( str ); } NtClose( hkey ); } /*********************************************************************** * check_list * * Check if a given module and function is in the list. */ static BOOL check_list( const char *module, int ordinal, const char *func, const WCHAR **list ) { char ord_str[10]; sprintf( ord_str, "%d", ordinal ); for(; *list; list++) { const WCHAR *p = strrchrW( *list, '.' ); if (p && p > *list) /* check module and function */ { int len = p - *list; if (strncmpiAW( module, *list, len-1 ) || module[len]) continue; if (p[1] == '*' && !p[2]) return TRUE; if (!strcmpiAW( ord_str, p + 1 )) return TRUE; if (func && !strcmpiAW( func, p + 1 )) return TRUE; } else /* function only */ { if (func && !strcmpiAW( func, *list )) return TRUE; } } return FALSE; } /*********************************************************************** * RELAY_ShowDebugmsgRelay * * Simple function to decide if a particular debugging message is * wanted. */ static BOOL RELAY_ShowDebugmsgRelay(const char *module, int ordinal, const char *func) { if (debug_relay_excludelist && check_list( module, ordinal, func, debug_relay_excludelist )) return FALSE; if (debug_relay_includelist && !check_list( module, ordinal, func, debug_relay_includelist )) return FALSE; return TRUE; } /*********************************************************************** * SNOOP16_ShowDebugmsgSnoop * * Simple function to decide if a particular debugging message is * wanted. */ BOOL SNOOP16_ShowDebugmsgSnoop(const char *module, int ordinal, const char *func) { if (debug_snoop_excludelist && check_list( module, ordinal, func, debug_snoop_excludelist )) return FALSE; if (debug_snoop_includelist && !check_list( module, ordinal, func, debug_snoop_includelist )) return FALSE; return TRUE; } /*********************************************************************** * get_entry_point * * Return the ordinal, name, and type info corresponding to a CS:IP address. */ static const CALLFROM16 *get_entry_point( STACK16FRAME *frame, LPSTR module, LPSTR func, WORD *pOrd ) { WORD i, max_offset; register BYTE *p; NE_MODULE *pModule; ET_BUNDLE *bundle; ET_ENTRY *entry; *pOrd = 0; if (frame->module_cs == thunk32_relay_segment) { strcpy(func, thunk32_relay_array[frame->entry_ip / sizeof(*thunk32_relay_array)].name); strcpy(module, "(thunk)"); *pOrd = 0; goto end; } if (!(pModule = NE_GetPtr(FarGetOwner16(GlobalHandle16(frame->module_cs))))) { module[0] = '\0'; func[0] = '\0'; return NULL; } max_offset = 0; bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab); do { entry = (ET_ENTRY *)((BYTE *)bundle+6); for (i = bundle->first + 1; i <= bundle->last; i++) { if ((entry->offs < frame->entry_ip) && (entry->segnum == 1) /* code segment ? */ && (entry->offs >= max_offset)) { max_offset = entry->offs; *pOrd = i; } entry++; } } while ( (bundle->next) && (bundle = (ET_BUNDLE *)((BYTE *)pModule+bundle->next))); /* Search for the name in the resident names table */ /* (built-in modules have no non-resident table) */ p = (BYTE *)pModule + pModule->ne_restab; memcpy( module, p + 1, *p ); module[*p] = 0; while (*p) { p += *p + 1 + sizeof(WORD); if (*(WORD *)(p + *p + 1) == *pOrd) break; } memcpy( func, p + 1, *p ); func[*p] = 0; end: /* Retrieve entry point call structure */ p = MapSL( MAKESEGPTR( frame->module_cs, frame->callfrom_ip ) ); /* p now points to lret, get the start of CALLFROM16 structure */ return (CALLFROM16 *)(p - FIELD_OFFSET( CALLFROM16, ret )); } #ifdef _MSC_VER extern int call_entry_point(void *func, int nb_args, const int *args) { //ERR("call_entry_point(%p, %d, %p)", func, nb_args, args); size_t oldESP; __asm { mov oldESP, ESP } int a; for (int i = nb_args - 1; i >= 0; i--) { a = args[i]; __asm { push a } } int ret; __asm { call func mov ret, eax mov ESP, oldESP } //((int(WINAPI*)(void))func)(); return ret; } #else extern int call_entry_point( void *func, int nb_args, const int *args ); __ASM_GLOBAL_FUNC( _call_entry_point, "pushl %ebp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") "movl %esp,%ebp\n\t" __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") "pushl %esi\n\t" __ASM_CFI(".cfi_rel_offset %esi,-4\n\t") "pushl %edi\n\t" __ASM_CFI(".cfi_rel_offset %edi,-8\n\t") "movl 12(%ebp),%edx\n\t" "shll $2,%edx\n\t" "jz 1f\n\t" "subl %edx,%esp\n\t" "andl $~15,%esp\n\t" "movl 12(%ebp),%ecx\n\t" "movl 16(%ebp),%esi\n\t" "movl %esp,%edi\n\t" "cld\n\t" "rep; movsl\n" "1:\tcall *8(%ebp)\n\t" "leal -8(%ebp),%esp\n\t" "popl %edi\n\t" __ASM_CFI(".cfi_same_value %edi\n\t") "popl %esi\n\t" __ASM_CFI(".cfi_same_value %esi\n\t") "popl %ebp\n\t" __ASM_CFI(".cfi_def_cfa %esp,4\n\t") __ASM_CFI(".cfi_same_value %ebp\n\t") "ret" ) #endif /*********************************************************************** * relay_call_from_16_no_debug * * Same as relay_call_from_16 but doesn't print any debug information. */ static int relay_call_from_16_no_debug( void *entry_point, unsigned char *args16, CONTEXT *context, const CALLFROM16 *call ) { unsigned int i, j, nb_args = 0; int args32[20]; /* look for the ret instruction */ for (j = 0; j < ARRAY_SIZE(call->ret); j++) if (call->ret[j] == 0xca || call->ret[j] == 0xcb) break; if (call->ret[j] == 0xcb) /* cdecl */ { for (i = 0; i < 20; i++, nb_args++) { int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7; if (type == ARG_NONE) break; switch(type) { case ARG_WORD: args32[nb_args] = *(WORD *)args16; args16 += sizeof(WORD); break; case ARG_SWORD: args32[nb_args] = *(short *)args16; args16 += sizeof(WORD); break; case ARG_LONG: case ARG_SEGSTR: args32[nb_args] = *(int *)args16; args16 += sizeof(int); break; case ARG_PTR: case ARG_STR: args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 ); args16 += sizeof(SEGPTR); break; case ARG_VARARG: args32[nb_args] = (int)args16; break; default: break; } } } else /* not cdecl */ { /* Start with the last arg */ args16 += call->ret[j + 1]; for (i = 0; i < 20; i++, nb_args++) { int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7; if (type == ARG_NONE) break; switch(type) { case ARG_WORD: args16 -= sizeof(WORD); args32[nb_args] = *(WORD *)args16; break; case ARG_SWORD: args16 -= sizeof(WORD); args32[nb_args] = *(short *)args16; break; case ARG_LONG: case ARG_SEGSTR: args16 -= sizeof(int); args32[nb_args] = *(int *)args16; break; case ARG_PTR: case ARG_STR: args16 -= sizeof(SEGPTR); args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 ); break; default: break; } } } if (!j) /* register function */ args32[nb_args++] = (int)context; SYSLEVEL_CheckNotLevel( 2 ); return call_entry_point( entry_point, nb_args, args32 ); } __declspec(dllexport) void vm_debug_get_entry_point(char *module, char *func, WORD *ordinal, STACK16FRAME *frame) { if (!frame) frame = CURRENT_STACK16; //FIXME:security const CALLFROM16 *call; call = get_entry_point(frame, module, func, ordinal); } /*********************************************************************** * relay_call_from_16 * * Replacement for the 16-bit relay functions when relay debugging is on. */ int relay_call_from_16( void *entry_point, unsigned char *args16, CONTEXT *context ) { STACK16FRAME *frame; WORD ordinal; unsigned int i, j, nb_args = 0; int ret_val, args32[20]; char module[10], func[64]; const CALLFROM16 *call; frame = CURRENT_STACK16; call = get_entry_point( frame, module, func, &ordinal ); if (!call) { if (frame->relay != relay_call_from_16) { /* workaround for snoop */ return ((int(WINAPI/*stdcall?*/*)(void *entry_point, unsigned char *args16, CONTEXT *context))(frame->relay))(entry_point, args16, context); } } if (!TRACE_ON(relay) || !RELAY_ShowDebugmsgRelay( module, ordinal, func )) return relay_call_from_16_no_debug( entry_point, args16, context, call ); DPRINTF( "%04x:Call %s.%d: %s(",GetCurrentThreadId(), module, ordinal, func ); /* look for the ret instruction */ for (j = 0; j < ARRAY_SIZE(call->ret); j++) if (call->ret[j] == 0xca || call->ret[j] == 0xcb) break; if (call->ret[j] == 0xcb) /* cdecl */ { for (i = 0; i < 20; i++, nb_args++) { int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7; if (type == ARG_NONE) break; if (i) DPRINTF( "," ); switch(type) { case ARG_WORD: DPRINTF( "%04x", *(WORD *)args16 ); args32[nb_args] = *(WORD *)args16; args16 += sizeof(WORD); break; case ARG_SWORD: DPRINTF( "%04x", *(WORD *)args16 ); args32[nb_args] = *(short *)args16; args16 += sizeof(WORD); break; case ARG_LONG: DPRINTF( "%08x", *(int *)args16 ); args32[nb_args] = *(int *)args16; args16 += sizeof(int); break; case ARG_PTR: DPRINTF( "%04x:%04x", *(WORD *)(args16+2), *(WORD *)args16 ); args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 ); args16 += sizeof(SEGPTR); break; case ARG_STR: DPRINTF( "%08x %s", *(int *)args16, debugstr_a( MapSL(*(SEGPTR *)args16 ))); args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 ); args16 += sizeof(int); break; case ARG_SEGSTR: DPRINTF( "%04x:%04x %s", *(WORD *)(args16+2), *(WORD *)args16, debugstr_a( MapSL(*(SEGPTR *)args16 )) ); args32[nb_args] = *(SEGPTR *)args16; args16 += sizeof(SEGPTR); break; case ARG_VARARG: DPRINTF( "..." ); args32[nb_args] = (int)args16; break; default: break; } } } else /* not cdecl */ { /* Start with the last arg */ args16 += call->ret[j + 1]; for (i = 0; i < 20; i++, nb_args++) { int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7; if (type == ARG_NONE) break; if (i) DPRINTF( "," ); switch(type) { case ARG_WORD: args16 -= sizeof(WORD); args32[nb_args] = *(WORD *)args16; DPRINTF( "%04x", *(WORD *)args16 ); break; case ARG_SWORD: args16 -= sizeof(WORD); args32[nb_args] = *(short *)args16; DPRINTF( "%04x", *(WORD *)args16 ); break; case ARG_LONG: args16 -= sizeof(int); args32[nb_args] = *(int *)args16; DPRINTF( "%08x", *(int *)args16 ); break; case ARG_PTR: args16 -= sizeof(SEGPTR); args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 ); DPRINTF( "%04x:%04x", *(WORD *)(args16+2), *(WORD *)args16 ); break; case ARG_STR: args16 -= sizeof(int); args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 ); DPRINTF( "%08x %s", *(int *)args16, debugstr_a( MapSL(*(SEGPTR *)args16 ))); break; case ARG_SEGSTR: args16 -= sizeof(SEGPTR); args32[nb_args] = *(SEGPTR *)args16; DPRINTF( "%04x:%04x %s", *(WORD *)(args16+2), *(WORD *)args16, debugstr_a( MapSL(*(SEGPTR *)args16 )) ); break; case ARG_VARARG: DPRINTF( "..." ); args32[nb_args] = (int)args16; break; default: break; } } } DPRINTF( ") ret=%04x:%04x ds=%04x\n", frame->cs, frame->ip, frame->ds ); if (!j) /* register function */ { args32[nb_args++] = (int)context; DPRINTF(" AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x EFL=%08x\n", (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx, (WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi, (WORD)context->SegEs, context->EFlags ); } SYSLEVEL_CheckNotLevel( 2 ); ret_val = call_entry_point( entry_point, nb_args, args32 ); SYSLEVEL_CheckNotLevel( 2 ); DPRINTF( "%04x:Ret %s.%d: %s() ",GetCurrentThreadId(), module, ordinal, func ); if (!j) /* register function */ { DPRINTF("retval=none ret=%04x:%04x ds=%04x\n", (WORD)context->SegCs, LOWORD(context->Eip), (WORD)context->SegDs); DPRINTF(" AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x EFL=%08x\n", (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx, (WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi, (WORD)context->SegEs, context->EFlags ); } else { frame = CURRENT_STACK16; /* might have be changed by the entry point */ if (j == 1) /* 16-bit return sequence */ DPRINTF( "retval=%04x ret=%04x:%04x ds=%04x\n", ret_val & 0xffff, frame->cs, frame->ip, frame->ds ); else DPRINTF( "retval=%08x ret=%04x:%04x ds=%04x\n", ret_val, frame->cs, frame->ip, frame->ds ); } return ret_val; } /********************************************************************** * RELAY_GetPointer * * Get pointer to stack block when given esp pointing to 16-bit stack * inside relay data segment. */ static RELAY_Stack16 *RELAY_GetPointer( DWORD offset ) { offset = offset / sizeof(RELAY_Stack16) * sizeof(RELAY_Stack16); return MapSL(MAKESEGPTR(DOSVM_dpmi_segments->relay_data_sel, offset)); } /********************************************************************** * RELAY_MakeShortContext * * Allocate separate 16-bit stack, make stack pointer point to this * stack and make code pointer point to stub that restores everything. * So, after this routine, SS and CS are guaranteed to be 16-bit. * * Note: This might be called from signal handler, so the stack * allocation algorithm must be signal safe. */ static void RELAY_MakeShortContext( CONTEXT *context ) { DWORD offset = offsetof(RELAY_Stack16, stack_top); RELAY_Stack16 *stack = RELAY_GetPointer( 0 ); while (stack->inuse && offset < DOSVM_RELAY_DATA_SIZE) { stack++; offset += sizeof(RELAY_Stack16); } if (offset >= DOSVM_RELAY_DATA_SIZE) ERR( "Too many nested interrupts!\n" ); stack->inuse = 1; stack->eip = context->Eip; stack->seg_cs = context->SegCs; stack->esp = context->Esp; stack->seg_ss = context->SegSs; stack->stack_bottom = RELAY_MAGIC; stack->stack_top = RELAY_MAGIC; context->SegSs = DOSVM_dpmi_segments->relay_data_sel; context->Esp = offset; context->SegCs = DOSVM_dpmi_segments->relay_code_sel; context->Eip = 3; } /********************************************************************** * RELAY_RelayStub * * This stub is called by __wine_call_from_16_regs in order to marshall * relay parameters. */ static void __stdcall RELAY_RelayStub( DOSRELAY proc, unsigned char *args, CONTEXT *context ) { if (proc) { RELAY_Stack16 *stack = RELAY_GetPointer( context->Esp ); DWORD old_seg_cs = context->SegCs; DWORD old_eip = context->Eip; DWORD old_seg_ss = context->SegSs; DWORD old_esp = context->Esp; context->SegCs = stack->seg_cs; context->Eip = stack->eip; context->SegSs = stack->seg_ss; context->Esp = stack->esp; proc( context, *(LPVOID *)args ); stack->seg_cs = context->SegCs; stack->eip = context->Eip; stack->seg_ss = context->SegSs; stack->esp = context->Esp; context->SegCs = old_seg_cs; context->Eip = old_eip; context->SegSs = old_seg_ss; context->Esp = old_esp; } } /********************************************************************** * DOSVM_RelayHandler * * Restore saved code and stack pointers and release stack block. */ void DOSVM_RelayHandler( CONTEXT *context ) { RELAY_Stack16 *stack = RELAY_GetPointer( context->Esp ); context->SegSs = stack->seg_ss; context->Esp = stack->esp; context->SegCs = stack->seg_cs; context->Eip = stack->eip; if (!stack->inuse || stack->stack_bottom != RELAY_MAGIC || stack->stack_top != RELAY_MAGIC) ERR( "Stack corrupted!\n" ); stack->inuse = 0; } /********************************************************************** * DOSVM_BuildCallFrame * * Modifies the context so that return to context calls DOSRELAY and * only after return from DOSRELAY the original context will be returned to. */ void DOSVM_BuildCallFrame( CONTEXT *context, DOSRELAY relay, LPVOID data ) { WORD code_sel = DOSVM_dpmi_segments->relay_code_sel; /* * Allocate separate stack for relay call. */ RELAY_MakeShortContext( context ); /* * Build call frame. */ PUSH_WORD16( context, HIWORD(data) ); /* argument.hiword */ PUSH_WORD16( context, LOWORD(data) ); /* argument.loword */ PUSH_WORD16( context, context->SegCs ); /* STACK16FRAME.cs */ PUSH_WORD16( context, LOWORD(context->Eip) ); /* STACK16FRAME.ip */ PUSH_WORD16( context, LOWORD(context->Ebp) ); /* STACK16FRAME.bp */ PUSH_WORD16( context, HIWORD(relay) ); /* STACK16FRAME.entry_point.hiword */ PUSH_WORD16( context, LOWORD(relay) ); /* STACK16FRAME.entry_point.loword */ PUSH_WORD16( context, 0 ); /* STACK16FRAME.entry_ip */ PUSH_WORD16( context, HIWORD(RELAY_RelayStub) ); /* STACK16FRAME.relay.hiword */ PUSH_WORD16( context, LOWORD(RELAY_RelayStub) ); /* STACK16FRAME.relay.loword */ PUSH_WORD16( context, 0 ); /* STACK16FRAME.module_cs.hiword */ PUSH_WORD16( context, code_sel ); /* STACK16FRAME.module_cs.loword */ PUSH_WORD16( context, 0 ); /* STACK16FRAME.callfrom_ip.hiword */ PUSH_WORD16( context, 0 ); /* STACK16FRAME.callfrom_ip.loword */ /* * Adjust code pointer. */ context->SegCs = wine_get_cs(); context->Eip = (DWORD)__wine_call_from_16_regs; } static CALLFROM16 ret_pascal_32bit_template; static CALLFROM16 ret_cdecl_32bit_template; static void init_arg_types(unsigned int *arg_types, const char *args, int *arg_size) { int nop_words, pos, j; size_t len = strlen(args); /* build the arg types bit fields */ arg_types[0] = arg_types[1] = 0; for (j = pos = 0; j < len && pos < 20; j++, pos++) { int type = 0; switch (args[j]) { case 'w': *arg_size += 2; type = ARG_WORD; break; case 's': *arg_size += 4; type = ARG_LONG; break; case 'l': *arg_size += 4; type = ARG_LONG; break; case 'p': *arg_size += 4; type = ARG_PTR; break; case 'S': *arg_size += 4; type = ARG_STR; break; } if (pos < 20) arg_types[pos / 10] |= type << (3 * (pos % 10)); } } static BOOL init_template; static void init_template_func(CALLFROM16 *dest, const char *func) { HMODULE16 krnl; const unsigned char *ret32; krnl = GetModuleHandle16("KERNEL"); ret32 = (const unsigned char *)MapSL(GetProcAddress16(krnl, func)); assert( ret32[0] == 0x55 /* push bp */ && ret32[1] == 0x66 /* prefix */ && ret32[2] == 0x68 /* push */ && ret32[7] == 0xe8 /* call rel */); *dest = *(CALLFROM16*)(ret32 + RTL_SIZEOF_THROUGH_FIELD(ENTRYPOINT16, callfrom16) + ((ENTRYPOINT16*)ret32)->callfrom16); } /* w: word l: long p: ptr s: segptr S: str make_thunk_32(func, "lpws", "name", TRUE, FALSE, FALSE) */ SEGPTR make_thunk_32(void *funcptr, const char *arguments, const char *name, BOOL ret_32bit, BOOL reg_func, BOOL is_cdecl) { PROC16_RELAY *relay; int arg_size = 0; assert(!reg_func); assert(ret_32bit); if (!thunk32_relay_array) { thunk32_relay_segment = GLOBAL_Alloc(GMEM_ZEROINIT, 0x10000, GetModuleHandle16("KERNEL"), WINE_LDT_FLAGS_CODE, 0); thunk32_relay_array = GlobalLock16(thunk32_relay_segment); } for (int i = 0; i < 0x10000 / sizeof(PROC16_RELAY); i++) { if (!thunk32_relay_array[i].used) { relay = thunk32_relay_array + i; break; } } relay->used = TRUE; relay->pushw_bp = 0x55; relay->pushl = 0x6866; relay->funcptr = (DWORD)funcptr; relay->call_near = 0xe8; relay->call_to = 0; relay->name = name; if (!init_template) { init_template_func(&ret_pascal_32bit_template, "GetCodeHandle"); init_template_func(&ret_cdecl_32bit_template, "WOW16Call"); } if (is_cdecl) { relay->call = ret_cdecl_32bit_template; } else { relay->call = ret_pascal_32bit_template; } init_arg_types(&relay->call.arg_types, arguments, &arg_size); if (!is_cdecl) { int i; for (i = 0; i < ARRAY_SIZE(relay->call.ret); i++) { if (relay->call.ret[i] == 0xca) { relay->call.ret[i + 1] = arg_size; break; } } } return MAKESEGPTR(thunk32_relay_segment, (relay - thunk32_relay_array) * sizeof(PROC16_RELAY)); } void free_thunk_32(SEGPTR thunk) { ((PROC16_RELAY*)MapSL(thunk))->used = FALSE; } typedef BOOL (WINAPI *vm_inject_t)(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); static vm_inject_t vm_inject_cb = NULL; void WINAPI set_vm_inject_cb(vm_inject_t cb) { if (!vm_inject_cb) vm_inject_cb = cb; } BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode) { if (!vm_inject_cb) return WOWCallback16Ex(vpfn16, dwFlags, cbArgs, pArgs, pdwRetCode); return vm_inject_cb(vpfn16, dwFlags, cbArgs, pArgs, pdwRetCode); } ================================================ FILE: krnl386/resource.c ================================================ /* * 16-bit resource functions * * Copyright 1993 Robert J. Amstadt * Copyright 1997 Alex Korobka * Copyright 1998 Ulrich Weigand * Copyright 1995, 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "windows/wownt32.h" #include "wine/winbase16.h" #include "wine/winuser16.h" #include "wine/unicode.h" #include "kernel16_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(resource); /* handle conversions */ #define HRSRC_32(h16) ((HRSRC)(ULONG_PTR)(h16)) #define HGLOBAL_32(h16) ((HGLOBAL)(ULONG_PTR)(h16)) static inline NE_MODULE *get_module( HMODULE16 mod ) { if (!mod) mod = TASK_GetCurrent()->hModule; return NE_GetPtr( mod ); } #define HRSRC_MAP_BLOCKSIZE 16 typedef struct _HRSRC_ELEM { HRSRC hRsrc; WORD type; } HRSRC_ELEM; typedef struct _HRSRC_MAP { int nAlloc; int nUsed; HRSRC_ELEM *elem; } HRSRC_MAP; /********************************************************************** * MapHRsrc32To16 */ static HRSRC16 MapHRsrc32To16( NE_MODULE *pModule, HRSRC hRsrc32, WORD type ) { HRSRC_MAP *map = pModule->rsrc32_map; HRSRC_ELEM *newElem; int i; /* On first call, initialize HRSRC map */ if ( !map ) { if ( !(map = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(HRSRC_MAP) ) ) ) { ERR("Cannot allocate HRSRC map\n" ); return 0; } pModule->rsrc32_map = map; } /* Check whether HRSRC32 already in map */ for ( i = 0; i < map->nUsed; i++ ) if ( map->elem[i].hRsrc == hRsrc32 ) return (HRSRC16)(i + 1); /* If no space left, grow table */ if ( map->nUsed == map->nAlloc ) { if (map->elem) newElem = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, map->elem, (map->nAlloc + HRSRC_MAP_BLOCKSIZE) * sizeof(HRSRC_ELEM) ); else newElem = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, (map->nAlloc + HRSRC_MAP_BLOCKSIZE) * sizeof(HRSRC_ELEM) ); if ( !newElem ) { ERR("Cannot grow HRSRC map\n" ); return 0; } map->elem = newElem; map->nAlloc += HRSRC_MAP_BLOCKSIZE; } /* Add HRSRC32 to table */ map->elem[map->nUsed].hRsrc = hRsrc32; map->elem[map->nUsed].type = type; map->nUsed++; return (HRSRC16)map->nUsed; } /********************************************************************** * MapHRsrc16To32 */ static HRSRC MapHRsrc16To32( NE_MODULE *pModule, HRSRC16 hRsrc16 ) { HRSRC_MAP *map = pModule->rsrc32_map; if ( !map || !hRsrc16 || hRsrc16 > map->nUsed ) return 0; return map->elem[hRsrc16-1].hRsrc; } /********************************************************************** * MapHRsrc16ToType */ static WORD MapHRsrc16ToType( NE_MODULE *pModule, HRSRC16 hRsrc16 ) { HRSRC_MAP *map = pModule->rsrc32_map; if ( !map || !hRsrc16 || hRsrc16 > map->nUsed ) return 0; return map->elem[hRsrc16-1].type; } /********************************************************************** * get_res_name * * Convert a resource name from '#xxx' form to numerical id. */ static inline LPCSTR get_res_name( LPCSTR name ) { if (HIWORD(name) && name[0] == '#') name = MAKEINTRESOURCEA( atoi( name + 1 ) ); return name; } /********************************************************************** * next_typeinfo */ static inline NE_TYPEINFO *next_typeinfo( NE_TYPEINFO *info ) { return (NE_TYPEINFO *)((char*)(info + 1) + info->count * sizeof(NE_NAMEINFO)); } /********************************************************************** * get_default_res_handler */ static inline FARPROC16 get_default_res_handler(void) { static FARPROC16 handler; if (!handler) handler = GetProcAddress16( GetModuleHandle16("KERNEL"), "DefResourceHandler" ); return handler; } /*********************************************************************** * NE_FindNameTableId * * Find the type and resource id from their names. * Return value is MAKELONG( typeId, resId ), or 0 if not found. */ static DWORD NE_FindNameTableId( NE_MODULE *pModule, LPCSTR typeId, LPCSTR resId ) { NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->ne_rsrctab + 2); NE_NAMEINFO *pNameInfo; HGLOBAL16 handle; WORD *p; DWORD ret = 0; int count; for (; pTypeInfo->type_id != 0; pTypeInfo = (NE_TYPEINFO *)((char*)(pTypeInfo+1) + pTypeInfo->count * sizeof(NE_NAMEINFO))) { if (pTypeInfo->type_id != 0x800f) continue; pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1); for (count = pTypeInfo->count; count > 0; count--, pNameInfo++) { TRACE("NameTable entry: type=%04x id=%04x\n", pTypeInfo->type_id, pNameInfo->id ); handle = LoadResource16( pModule->self, (HRSRC16)((char *)pNameInfo - (char *)pModule) ); for(p = LockResource16(handle); p && *p; p = (WORD *)((char*)p+*p)) { TRACE(" type=%04x '%s' id=%04x '%s'\n", p[1], (char *)(p+3), p[2], (char *)(p+3)+strlen((char *)(p+3))+1 ); /* Check for correct type */ if (p[1] & 0x8000) { if (!HIWORD(typeId)) continue; if (strcasecmp( typeId, (char *)(p + 3) )) continue; } else if (HIWORD(typeId) || (((DWORD)typeId & ~0x8000)!= p[1])) continue; /* Now check for the id */ if (p[2] & 0x8000) { if (HIWORD(resId)) { if (strcasecmp( resId, (char*)(p+3)+strlen((char*)(p+3))+1 )) continue; } else { if (LOWORD(resId) != p[2]) continue; } } else if (HIWORD(resId) || ((LOWORD(resId) & ~0x8000) != p[2])) continue; /* If we get here, we've found the entry */ TRACE(" Found!\n" ); ret = MAKELONG( p[1], p[2] ); break; } FreeResource16( handle ); if (ret) return ret; } } return 0; } /*********************************************************************** * NE_FindTypeSection * * Find header struct for a particular resource type. */ static NE_TYPEINFO *NE_FindTypeSection( LPBYTE pResTab, NE_TYPEINFO *pTypeInfo, LPCSTR typeId ) { /* start from pTypeInfo */ if (HIWORD(typeId) != 0) /* Named type */ { LPCSTR str = typeId; BYTE len = strlen( str ); while (pTypeInfo->type_id) { if (!(pTypeInfo->type_id & 0x8000)) { BYTE *p = pResTab + pTypeInfo->type_id; if ((*p == len) && !strncasecmp( (char*)p+1, str, len )) { TRACE(" Found type '%s'\n", str ); return pTypeInfo; } } TRACE(" Skipping type %04x\n", pTypeInfo->type_id ); pTypeInfo = next_typeinfo(pTypeInfo); } } else /* Numeric type id */ { WORD id = LOWORD(typeId) | 0x8000; while (pTypeInfo->type_id) { if (pTypeInfo->type_id == id) { TRACE(" Found type %04x\n", id ); return pTypeInfo; } TRACE(" Skipping type %04x\n", pTypeInfo->type_id ); pTypeInfo = next_typeinfo(pTypeInfo); } } return NULL; } /*********************************************************************** * NE_FindResourceFromType * * Find a resource once the type info structure has been found. */ static NE_NAMEINFO *NE_FindResourceFromType( LPBYTE pResTab, NE_TYPEINFO *pTypeInfo, LPCSTR resId ) { BYTE *p; int count; NE_NAMEINFO *pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1); if (HIWORD(resId) != 0) /* Named resource */ { LPCSTR str = resId; BYTE len = strlen( str ); for (count = pTypeInfo->count; count > 0; count--, pNameInfo++) { if (pNameInfo->id & 0x8000) continue; p = pResTab + pNameInfo->id; if ((*p == len) && !strncasecmp( (char*)p+1, str, len )) return pNameInfo; } } else /* Numeric resource id */ { WORD id = LOWORD(resId) | 0x8000; for (count = pTypeInfo->count; count > 0; count--, pNameInfo++) if (pNameInfo->id == id) return pNameInfo; } return NULL; } /*********************************************************************** * DefResourceHandler (KERNEL.456) * * This is the default LoadProc() function. */ HGLOBAL16 WINAPI NE_DefResourceHandler( HGLOBAL16 hMemObj, HMODULE16 hModule, HRSRC16 hRsrc ) { HGLOBAL16 handle; WORD sizeShift; NE_NAMEINFO* pNameInfo; NE_MODULE* pModule = NE_GetPtr( hModule ); if (!pModule) return 0; sizeShift = *(WORD *)((char *)pModule + pModule->ne_rsrctab); pNameInfo = (NE_NAMEINFO *)((char *)pModule + hRsrc); if ( hMemObj ) handle = GlobalReAlloc16( hMemObj, pNameInfo->length << sizeShift, 0 ); else handle = AllocResource16( hModule, hRsrc, 0 ); if (handle) { if (!NE_READ_DATA( pModule, GlobalLock16( handle ), (int)pNameInfo->offset << sizeShift, (int)pNameInfo->length << sizeShift )) { GlobalFree16( handle ); handle = 0; } } return handle; } /********************************************************************** * SetResourceHandler (KERNEL.67) */ FARPROC16 WINAPI SetResourceHandler16( HMODULE16 hModule, LPCSTR typeId, FARPROC16 resourceHandler ) { LPBYTE pResTab; NE_TYPEINFO *pTypeInfo; FARPROC16 prevHandler = NULL; NE_MODULE *pModule = NE_GetPtr( hModule ); if (!pModule || !pModule->ne_rsrctab) return NULL; pResTab = (LPBYTE)pModule + pModule->ne_rsrctab; pTypeInfo = (NE_TYPEINFO *)(pResTab + 2); TRACE("module=%04x type=%s\n", hModule, debugstr_a(typeId) ); for (;;) { if (!(pTypeInfo = NE_FindTypeSection( pResTab, pTypeInfo, typeId ))) break; memcpy_unaligned( &prevHandler, &pTypeInfo->resloader, sizeof(FARPROC16) ); memcpy_unaligned( &pTypeInfo->resloader, &resourceHandler, sizeof(FARPROC16) ); pTypeInfo = next_typeinfo(pTypeInfo); } if (!prevHandler) prevHandler = get_default_res_handler(); return prevHandler; } static inline DWORD get_dword(LPCVOID *p) { DWORD ret = *(const DWORD *)*p; *p = (const DWORD *)*p + 1; return ret; } static inline void put_dword(LPVOID *p, DWORD d) { *(DWORD*)*p = d; *p = (DWORD *)*p + 1; } static inline WORD get_word(LPCVOID *p) { WORD ret = *(const WORD *)*p; *p = (const WORD *)*p + 1; return ret; } static inline void put_word(LPVOID *p, WORD w) { *(WORD*)*p = w; *p = (WORD *)*p + 1; } static inline BYTE get_byte(LPCVOID *p) { BYTE ret = *(const BYTE *)*p; *p = (const BYTE *)*p + 1; return ret; } static inline void put_byte(LPVOID *p, BYTE b) { *(BYTE *)*p = b; *p = (BYTE *)*p + 1; } /* convert a resource name */ static void convert_name( LPVOID *dst, LPCVOID *src ) { int len; switch (*(const WORD *)*src) { case 0x0000: get_word( src ); put_byte( dst, 0 ); break; case 0xffff: get_word( src ); put_byte( dst, 0xff ); put_word( dst, get_word(src) ); break; default: len = WideCharToMultiByte( CP_ACP, 0, *src, -1, *dst, 0x7fffffff, NULL,NULL ); *dst = (char *)*dst + len; *src = (LPCWSTR)*src + strlenW( *src ) + 1; break; } } /********************************************************************** * ConvertDialog32To16 (KERNEL.615) */ VOID WINAPI ConvertDialog32To16( LPCVOID dialog32, DWORD size, LPVOID dialog16 ) { WORD nbItems, data, dialogEx; DWORD style; style = get_dword( &dialog32 ); put_dword( &dialog16, style ); dialogEx = (style == 0xffff0001); /* DIALOGEX resource */ if (dialogEx) { put_dword( &dialog16, get_dword( &dialog32 ) ); /* helpID */ put_dword( &dialog16, get_dword( &dialog32 ) ); /* exStyle */ style = get_dword( &dialog32 ); put_dword( &dialog16, style ); /* style */ } else dialog32 = (const DWORD *)dialog32 + 1; /* exStyle ignored in 16-bit standard dialog */ nbItems = get_word( &dialog32 ); put_byte( &dialog16, nbItems ); put_word( &dialog16, get_word( &dialog32 ) ); /* x */ put_word( &dialog16, get_word( &dialog32 ) ); /* y */ put_word( &dialog16, get_word( &dialog32 ) ); /* cx */ put_word( &dialog16, get_word( &dialog32 ) ); /* cy */ /* Transfer menu name */ convert_name( &dialog16, &dialog32 ); /* Transfer class name */ convert_name( &dialog16, &dialog32 ); /* Transfer window caption */ WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL ); dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1; dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1; /* Transfer font info */ if (style & DS_SETFONT) { put_word( &dialog16, get_word( &dialog32 ) ); /* pointSize */ if (dialogEx) { put_word( &dialog16, get_word( &dialog32 ) ); /* weight */ put_word( &dialog16, get_word( &dialog32 ) ); /* italic */ } WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL ); /* faceName */ dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1; dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1; } /* Transfer dialog items */ while (nbItems) { /* align on DWORD boundary (32-bit only) */ dialog32 = (LPCVOID)(((UINT_PTR)dialog32 + 3) & ~3); if (dialogEx) { put_dword( &dialog16, get_dword( &dialog32 ) ); /* helpID */ put_dword( &dialog16, get_dword( &dialog32 ) ); /* exStyle */ put_dword( &dialog16, get_dword( &dialog32 ) ); /* style */ } else { style = get_dword( &dialog32 ); /* save style */ dialog32 = (const DWORD *)dialog32 + 1; /* ignore exStyle */ } put_word( &dialog16, get_word( &dialog32 ) ); /* x */ put_word( &dialog16, get_word( &dialog32 ) ); /* y */ put_word( &dialog16, get_word( &dialog32 ) ); /* cx */ put_word( &dialog16, get_word( &dialog32 ) ); /* cy */ if (dialogEx) put_dword( &dialog16, get_dword( &dialog32 ) ); /* ID */ else { put_word( &dialog16, get_word( &dialog32 ) ); /* ID */ put_dword( &dialog16, style ); /* style from above */ } /* Transfer class name */ switch (*(const WORD *)dialog32) { case 0x0000: get_word( &dialog32 ); put_byte( &dialog16, 0 ); break; case 0xffff: get_word( &dialog32 ); put_byte( &dialog16, get_word( &dialog32 ) ); break; default: WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL ); dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1; dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1; break; } /* Transfer window name */ convert_name( &dialog16, &dialog32 ); /* Transfer data */ data = get_word( &dialog32 ); if (dialogEx) put_word(&dialog16, data); else put_byte(&dialog16,(BYTE)data); if (data) { memcpy( dialog16, dialog32, data ); dialog16 = (BYTE *)dialog16 + data; dialog32 = (const BYTE *)dialog32 + data; } /* Next item */ nbItems--; } } /********************************************************************** * GetDialog32Size (KERNEL.618) */ WORD WINAPI GetDialog32Size16( LPCVOID dialog32 ) { LPCVOID p = dialog32; WORD nbItems, data, dialogEx; DWORD style; style = get_dword(&p); dialogEx = (style == 0xffff0001); /* DIALOGEX resource */ if (dialogEx) { p = (const DWORD *)p + 1; /* helpID */ p = (const DWORD *)p + 1; /* exStyle */ style = get_dword(&p); /* style */ } else p = (const DWORD *)p + 1; /* exStyle */ nbItems = get_word(&p); p = (const WORD *)p + 1; /* x */ p = (const WORD *)p + 1; /* y */ p = (const WORD *)p + 1; /* cx */ p = (const WORD *)p + 1; /* cy */ /* Skip menu name */ switch (*(const WORD *)p) { case 0x0000: p = (const WORD *)p + 1; break; case 0xffff: p = (const WORD *)p + 2; break; default: p = (LPCWSTR)p + strlenW( p ) + 1; break; } /* Skip class name */ switch (*(const WORD *)p) { case 0x0000: p = (const WORD *)p + 1; break; case 0xffff: p = (const WORD *)p + 2; break; default: p = (LPCWSTR)p + strlenW( p ) + 1; break; } /* Skip window caption */ p = (LPCWSTR)p + strlenW( p ) + 1; /* Skip font info */ if (style & DS_SETFONT) { p = (const WORD *)p + 1; /* pointSize */ if (dialogEx) { p = (const WORD *)p + 1; /* weight */ p = (const WORD *)p + 1; /* italic */ } p = (LPCWSTR)p + strlenW( p ) + 1; /* faceName */ } /* Skip dialog items */ while (nbItems) { /* align on DWORD boundary */ p = (LPCVOID)(((UINT_PTR)p + 3) & ~3); if (dialogEx) { p = (const DWORD *)p + 1; /* helpID */ p = (const DWORD *)p + 1; /* exStyle */ p = (const DWORD *)p + 1; /* style */ } else { p = (const DWORD *)p + 1; /* style */ p = (const DWORD *)p + 1; /* exStyle */ } p = (const WORD *)p + 1; /* x */ p = (const WORD *)p + 1; /* y */ p = (const WORD *)p + 1; /* cx */ p = (const WORD *)p + 1; /* cy */ if (dialogEx) p = (const DWORD *)p + 1; /* ID */ else p = (const WORD *)p + 1; /* ID */ /* Skip class name */ switch (*(const WORD *)p) { case 0x0000: p = (const WORD *)p + 1; break; case 0xffff: p = (const WORD *)p + 2; break; default: p = (LPCWSTR)p + strlenW( p ) + 1; break; } /* Skip window name */ switch (*(const WORD *)p) { case 0x0000: p = (const WORD *)p + 1; break; case 0xffff: p = (const WORD *)p + 2; break; default: p = (LPCWSTR)p + strlenW( p ) + 1; break; } /* Skip data */ data = get_word(&p); p = (const BYTE *)p + data; /* Next item */ nbItems--; } return (WORD)((LPCSTR)p - (LPCSTR)dialog32); } /********************************************************************** * ConvertMenu32To16 (KERNEL.616) */ VOID WINAPI ConvertMenu32To16( LPCVOID menu32, DWORD size, LPVOID menu16 ) { WORD version, headersize, flags, level = 1; version = get_word( &menu32 ); headersize = get_word( &menu32 ); put_word( &menu16, version ); put_word( &menu16, headersize ); if ( headersize ) { memcpy( menu16, menu32, headersize ); menu16 = (BYTE *)menu16 + headersize; menu32 = (const BYTE *)menu32 + headersize; } while ( level ) if ( version == 0 ) /* standard */ { flags = get_word( &menu32 ); put_word( &menu16, flags ); if ( !(flags & MF_POPUP) ) put_word( &menu16, get_word( &menu32 ) ); /* ID */ else level++; WideCharToMultiByte( CP_ACP, 0, menu32, -1, menu16, 0x7fffffff, NULL, NULL ); menu16 = (LPSTR)menu16 + strlen( menu16 ) + 1; menu32 = (LPCWSTR)menu32 + strlenW( menu32 ) + 1; if ( flags & MF_END ) level--; } else /* extended */ { put_dword( &menu16, get_dword( &menu32 ) ); /* fType */ put_dword( &menu16, get_dword( &menu32 ) ); /* fState */ put_word( &menu16, get_dword( &menu32 ) ); /* ID */ flags = get_word( &menu32 ); put_byte(&menu16,flags); WideCharToMultiByte( CP_ACP, 0, menu32, -1, menu16, 0x7fffffff, NULL, NULL ); menu16 = (LPSTR)menu16 + strlen( menu16 ) + 1; menu32 = (LPCWSTR)menu32 + strlenW( menu32 ) + 1; /* align on DWORD boundary (32-bit only) */ menu32 = (LPCVOID)(((UINT_PTR)menu32 + 3) & ~3); /* If popup, transfer helpid */ if ( flags & 1) { put_dword( &menu16, get_dword( &menu32 ) ); level++; } if ( flags & MF_END ) level--; } } /********************************************************************** * GetMenu32Size (KERNEL.617) */ WORD WINAPI GetMenu32Size16( LPCVOID menu32 ) { LPCVOID p = menu32; WORD version, headersize, flags, level = 1; version = get_word(&p); headersize = get_word(&p); p = (const BYTE *)p + headersize; while ( level ) if ( version == 0 ) /* standard */ { flags = get_word(&p); if ( !(flags & MF_POPUP) ) p = (const WORD *)p + 1; /* ID */ else level++; p = (LPCWSTR)p + strlenW( p ) + 1; if ( flags & MF_END ) level--; } else /* extended */ { p = (const DWORD *)p + 1; /* fType */ p = (const DWORD *)p + 1; /* fState */ p = (const DWORD *)p + 1; /* ID */ flags = get_word(&p); p = (LPCWSTR)p + strlenW( p ) + 1; /* align on DWORD boundary (32-bit only) */ p = (LPCVOID)(((UINT_PTR)p + 3) & ~3); /* If popup, skip helpid */ if ( flags & 1) { p = (const DWORD *)p + 1; level++; } if ( flags & MF_END ) level--; } return (WORD)((LPCSTR)p - (LPCSTR)menu32); } /********************************************************************** * ConvertAccelerator32To16 */ static void ConvertAccelerator32To16( LPCVOID acc32, DWORD size, LPVOID acc16 ) { BYTE type; do { /* Copy type */ type = get_byte(&acc32); put_byte(&acc16, type); /* Skip padding */ get_byte(&acc32); /* Copy event and IDval */ put_word(&acc16, get_word(&acc32)); put_word(&acc16, get_word(&acc32)); /* Skip padding */ get_word(&acc32); } while ( !( type & 0x80 ) ); } /********************************************************************** * NE_LoadPEResource */ static HGLOBAL16 NE_LoadPEResource( NE_MODULE *pModule, WORD type, LPCVOID bits, DWORD size ) { HGLOBAL16 handle; TRACE("module=%04x type=%04x\n", pModule->self, type ); handle = GlobalAlloc16( 0, size ); switch (type) { case (WORD)RT_MENU: ConvertMenu32To16( bits, size, GlobalLock16( handle ) ); break; case (WORD)RT_DIALOG: ConvertDialog32To16( bits, size, GlobalLock16( handle ) ); break; case (WORD)RT_ACCELERATOR: ConvertAccelerator32To16( bits, size, GlobalLock16( handle ) ); break; case (WORD)RT_STRING: FIXME("not yet implemented!\n" ); /* fall through */ default: memcpy( GlobalLock16( handle ), bits, size ); break; } return handle; } /********************************************************************** * AllocResource (KERNEL.66) */ HGLOBAL16 WINAPI AllocResource16( HMODULE16 hModule, HRSRC16 hRsrc, DWORD size) { NE_NAMEINFO *pNameInfo=NULL; WORD sizeShift; HGLOBAL16 ret; NE_MODULE *pModule = NE_GetPtr( hModule ); if (!pModule || !pModule->ne_rsrctab || !hRsrc) return 0; TRACE("module=%04x res=%04x size=%d\n", hModule, hRsrc, size ); sizeShift = *(WORD *)((char *)pModule + pModule->ne_rsrctab); pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc); if (size < (DWORD)pNameInfo->length << sizeShift) size = (DWORD)pNameInfo->length << sizeShift; ret = GlobalAlloc16( GMEM_FIXED, size ); if (ret) FarSetOwner16( ret, hModule ); return ret; } /********************************************************************** * DirectResAlloc (KERNEL.168) * * Check Schulman, p. 232 for details */ HGLOBAL16 WINAPI DirectResAlloc16( HINSTANCE16 hInstance, WORD wType, UINT16 wSize ) { HGLOBAL16 ret; TRACE("(%04x,%04x,%04x)\n", hInstance, wType, wSize ); if (!(hInstance = GetExePtr( hInstance ))) return 0; if(wType != 0x10) /* 0x10 is the only observed value, passed from CreateCursorIndirect. */ TRACE("(wType=%x)\n", wType); ret = GlobalAlloc16( GMEM_MOVEABLE, wSize ); if (ret) FarSetOwner16( ret, hInstance ); return ret; } /********************************************************************** * AccessResource (KERNEL.64) */ INT16 WINAPI AccessResource16( HINSTANCE16 hModule, HRSRC16 hRsrc ) { HFILE16 fd; NE_MODULE *pModule = NE_GetPtr( hModule ); if (!pModule || !pModule->ne_rsrctab || !hRsrc) return -1; TRACE("module=%04x res=%04x\n", pModule->self, hRsrc ); if ((fd = _lopen16( NE_MODULE_NAME(pModule), OF_READ )) != HFILE_ERROR16) { WORD sizeShift = *(WORD *)((char *)pModule + pModule->ne_rsrctab); NE_NAMEINFO *pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc); _llseek16( fd, (int)pNameInfo->offset << sizeShift, SEEK_SET ); } return fd; } /********************************************************************** * FindResource (KERNEL.60) */ HRSRC16 WINAPI FindResource16( HMODULE16 hModule, LPCSTR name, LPCSTR type ) { NE_TYPEINFO *pTypeInfo; NE_NAMEINFO *pNameInfo; LPBYTE pResTab; NE_MODULE *pModule = get_module( hModule ); if (!pModule) return 0; if (pModule->module32 || (pModule->ne_flags & NE_FFLAGS_BUILTIN)) { /* 32-bit PE module */ HMODULE m32 = (pModule->ne_flags & NE_FFLAGS_BUILTIN) ? pModule->owner32 : pModule->module32; HRSRC hRsrc32 = FindResourceA( m32, name, type ); if (!hRsrc32) return 0; return MapHRsrc32To16( pModule, hRsrc32, HIWORD(type) ? 0 : LOWORD(type) ); } TRACE("module=%04x name=%s type=%s\n", pModule->self, debugstr_a(name), debugstr_a(type) ); if (!pModule->ne_rsrctab) return 0; type = get_res_name( type ); name = get_res_name( name ); if (HIWORD(type) || HIWORD(name)) { DWORD id = NE_FindNameTableId( pModule, type, name ); if (id) /* found */ { type = (LPCSTR)(ULONG_PTR)LOWORD(id); name = (LPCSTR)(ULONG_PTR)HIWORD(id); } } pResTab = (LPBYTE)pModule + pModule->ne_rsrctab; pTypeInfo = (NE_TYPEINFO *)( pResTab + 2 ); for (;;) { if (!(pTypeInfo = NE_FindTypeSection( pResTab, pTypeInfo, type ))) break; if ((pNameInfo = NE_FindResourceFromType( pResTab, pTypeInfo, name ))) { TRACE(" Found id %p\n", name ); return (HRSRC16)( (char *)pNameInfo - (char *)pModule ); } pTypeInfo = next_typeinfo(pTypeInfo); } return 0; } NE_TYPEINFO *get_resource_table(HMODULE16 hmod, LPCSTR type, LPBYTE *restab) { NE_MODULE *pModule = get_module(hmod); if (!pModule || pModule->module32 || (pModule->ne_flags & NE_FFLAGS_BUILTIN) || !pModule->ne_rsrctab) return NULL; LPBYTE pResTab = (LPBYTE)pModule + pModule->ne_rsrctab; if (restab) *restab = pResTab; type = get_res_name(type); return NE_FindTypeSection(pResTab, (NE_TYPEINFO *)(pResTab + 2), type); } /********************************************************************** * LoadResource (KERNEL.61) */ HGLOBAL16 WINAPI LoadResource16( HMODULE16 hModule, HRSRC16 hRsrc ) { NE_TYPEINFO *pTypeInfo; NE_NAMEINFO *pNameInfo = NULL; NE_MODULE *pModule = get_module( hModule ); int d; if (!hRsrc || !pModule) return 0; if (pModule->module32 || (pModule->ne_flags & NE_FFLAGS_BUILTIN)) { /* load 32-bit resource and convert it */ HMODULE m32 = (pModule->ne_flags & NE_FFLAGS_BUILTIN) ? pModule->owner32 : pModule->module32; HRSRC hRsrc32 = MapHRsrc16To32( pModule, hRsrc ); WORD type = MapHRsrc16ToType( pModule, hRsrc ); HGLOBAL hMem = LoadResource( m32, hRsrc32 ); DWORD size = SizeofResource( m32, hRsrc32 ); if (!hMem) return 0; return NE_LoadPEResource( pModule, type, LockResource( hMem ), size ); } /* first, verify hRsrc (just an offset from pModule to the needed pNameInfo) */ d = pModule->ne_rsrctab + 2; pTypeInfo = (NE_TYPEINFO *)((char *)pModule + d); while( hRsrc > d ) { if (pTypeInfo->type_id == 0) break; /* terminal entry */ d += sizeof(NE_TYPEINFO) + pTypeInfo->count * sizeof(NE_NAMEINFO); if (hRsrc < d) { if( ((d - hRsrc)%sizeof(NE_NAMEINFO)) == 0 ) { pNameInfo = (NE_NAMEINFO *)((char *)pModule + hRsrc); break; } else break; /* NE_NAMEINFO boundary mismatch */ } pTypeInfo = (NE_TYPEINFO *)((char *)pModule + d); } if (pNameInfo) { if (pNameInfo->handle && GlobalHandle16(pNameInfo->handle) && !(GlobalFlags16(pNameInfo->handle) & GMEM_DISCARDED) && pNameInfo->usage) { pNameInfo->usage++; TRACE(" Already loaded, new count=%d\n", pNameInfo->usage ); } else { FARPROC16 resloader; memcpy_unaligned( &resloader, &pTypeInfo->resloader, sizeof(FARPROC16) ); if (resloader && resloader != get_default_res_handler()) { WORD args[3]; DWORD ret; args[2] = pNameInfo->handle; args[1] = pModule->self; args[0] = hRsrc; WOWCallback16Ex( (DWORD)resloader, WCB16_PASCAL, sizeof(args), args, &ret ); pNameInfo->handle = LOWORD(ret); } else pNameInfo->handle = NE_DefResourceHandler( pNameInfo->handle, pModule->self, hRsrc ); if (pNameInfo->handle) { pNameInfo->usage++; pNameInfo->flags |= NE_SEGFLAGS_LOADED; } } return pNameInfo->handle; } return 0; } /********************************************************************** * LockResource (KERNEL.62) */ SEGPTR WINAPI WIN16_LockResource16( HGLOBAL16 handle ) { TRACE("(%04x)\n", handle ); /* May need to reload the resource if discarded */ return WOWGlobalLock16( handle ); } /********************************************************************** * LockResource16 (KERNEL32.@) */ LPVOID WINAPI LockResource16( HGLOBAL16 handle ) { return MapSL( WIN16_LockResource16(handle) ); } /********************************************************************** * SizeofResource (KERNEL.65) */ DWORD WINAPI SizeofResource16( HMODULE16 hModule, HRSRC16 hRsrc ) { NE_MODULE *pModule; TRACE("(%x, %x)\n", hModule, hRsrc ); if (!hRsrc) return 0; if (!(pModule = get_module( hModule ))) return 0; if (pModule->ne_rsrctab) { WORD sizeShift = *(WORD *)((char *)pModule + pModule->ne_rsrctab); NE_NAMEINFO *pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc); return (DWORD)pNameInfo->length << sizeShift; } if (pModule->module32 || (pModule->ne_flags & NE_FFLAGS_BUILTIN)) { /* 32-bit PE module */ HMODULE m32 = (pModule->ne_flags & NE_FFLAGS_BUILTIN) ? pModule->owner32 : pModule->module32; return SizeofResource( m32, MapHRsrc16To32( pModule, hRsrc ) ); } return 0; } /********************************************************************** * FreeResource (KERNEL.63) */ BOOL16 WINAPI FreeResource16( HGLOBAL16 handle ) { FARPROC16 proc; HMODULE16 user; NE_MODULE *pModule = NE_GetPtr( FarGetOwner16( handle ) ); handle = GlobalHandleToSel16(handle); TRACE("(%04x)\n", handle ); /* Try NE resource first */ if (pModule && pModule->ne_rsrctab) { NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->ne_rsrctab + 2); while (pTypeInfo->type_id) { WORD count; NE_NAMEINFO *pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1); for (count = pTypeInfo->count; count > 0; count--) { if (pNameInfo->handle == handle) { if (pNameInfo->usage > 0) { pNameInfo->usage--; if (pNameInfo->usage != 0) { return handle; } } else if (!pNameInfo->usage && IsOldWindowsTask(GetCurrentTask())) return TRUE; return FALSE; } pNameInfo++; } pTypeInfo = (NE_TYPEINFO *)pNameInfo; } } /* If this failed, call USER.DestroyIcon32; this will check whether it is a shared cursor/icon; if not it will call GlobalFree16() */ user = GetModuleHandle16( "user" ); if (user && (proc = GetProcAddress16( user, "DestroyIcon32" ))) { WORD args[2]; DWORD result; args[1] = handle; args[0] = 1; /* CID_RESOURCE */ WOWCallback16Ex( (SEGPTR)proc, WCB16_PASCAL, sizeof(args), args, &result ); return LOWORD(result) ? 0 : 1; } else return GlobalFree16( handle ); } /************************************************************************* * USER32_LoadResource */ static BYTE * USER32_LoadResource(LPBYTE peimage, NE_NAMEINFO* pNInfo, WORD sizeShift, ULONG *uSize) { TRACE("%p %p 0x%08x\n", peimage, pNInfo, sizeShift); *uSize = (DWORD)pNInfo->length << sizeShift; return peimage + ((DWORD)pNInfo->offset << sizeShift); } typedef struct { BYTE bWidth; /* Width, in pixels, of the image */ BYTE bHeight; /* Height, in pixels, of the image */ BYTE bColorCount; /* Number of colors in image (0 if >=8bpp) */ BYTE bReserved; /* Reserved ( must be 0) */ WORD wPlanes; /* Color Planes */ WORD wBitCount; /* Bits per pixel */ DWORD dwBytesInRes; /* How many bytes in this resource? */ DWORD dwImageOffset; /* Where in the file is this image? */ } icoICONDIRENTRY, *LPicoICONDIRENTRY; typedef struct { WORD idReserved; /* Reserved (must be 0) */ WORD idType; /* Resource Type (RES_ICON or RES_CURSOR) */ WORD idCount; /* How many images */ icoICONDIRENTRY idEntries[1]; /* An entry for each image (idCount of 'em) */ } icoICONDIR, *LPicoICONDIR; /************************************************************************* * ICO_LoadIcon */ static BYTE * ICO_LoadIcon(LPBYTE peimage, LPicoICONDIRENTRY lpiIDE, ULONG *uSize) { TRACE("%p %p\n", peimage, lpiIDE); *uSize = lpiIDE->dwBytesInRes; return peimage + lpiIDE->dwImageOffset; } __declspec(dllexport) HICON NE_ExtractIcon(LPCSTR lpszExeFileName, HICON * RetPtr, INT nIconIndex, UINT nIcons, UINT cxDesired, UINT cyDesired, UINT *pIconId, UINT flags) { //user32/exticon.c UINT ret = 0; UINT cx1, cx2, cy1, cy2; LPBYTE pData; DWORD sig; HANDLE hFile; UINT16 iconDirCount = 0, iconCount = 0; LPBYTE image; HANDLE fmapping; DWORD fsizeh, fsizel; WCHAR szExePath[MAX_PATH]; DWORD dwSearchReturn; char *path = get_search_path(); dwSearchReturn = SearchPathA(NULL, lpszExeFileName, NULL, sizeof(szExePath) / sizeof(szExePath[0]), szExePath, NULL); HeapFree(GetProcessHeap(), 0, path); if ((dwSearchReturn == 0) || (dwSearchReturn > sizeof(szExePath) / sizeof(szExePath[0]))) { WARN("File %s not found or path too long\n", debugstr_a(lpszExeFileName)); return -1; } hFile = CreateFileA(szExePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if (hFile == INVALID_HANDLE_VALUE) return 0; fsizel = GetFileSize(hFile, &fsizeh); /* Map the file */ fmapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL); CloseHandle(hFile); if (!fmapping) { WARN("CreateFileMapping error %d\n", GetLastError()); return 0xFFFFFFFF; } if (!(image = MapViewOfFile(fmapping, FILE_MAP_READ, 0, 0, 0))) { WARN("MapViewOfFile error %d\n", GetLastError()); CloseHandle(fmapping); return 0xFFFFFFFF; } CloseHandle(fmapping); cx1 = LOWORD(cxDesired); cx2 = HIWORD(cxDesired); cy1 = LOWORD(cyDesired); cy2 = HIWORD(cyDesired); if (pIconId) /* Invalidate first icon identifier */ *pIconId = 0xFFFFFFFF; if (!pIconId) /* if no icon identifier array present use the icon handle array as intermediate storage */ pIconId = (UINT*)RetPtr; const IMAGE_DOS_HEADER *mz_header = image; const IMAGE_OS2_HEADER *ne_header; if (fsizel < sizeof(*mz_header)) goto end; if (mz_header->e_magic != IMAGE_DOS_SIGNATURE) goto end; ne_header = (const IMAGE_OS2_HEADER *)((const char *)image + mz_header->e_lfanew); if (mz_header->e_lfanew + sizeof(*ne_header) > fsizel) goto end; if (ne_header->ne_magic == IMAGE_NT_SIGNATURE) goto end; /* win32 exe */ if (ne_header->ne_magic != IMAGE_OS2_SIGNATURE) goto end; pData = image + mz_header->e_lfanew + ne_header->ne_rsrctab; /* end ico file */ if (ne_header->ne_rsrctab < ne_header->ne_restab) { BYTE *pCIDir = 0; NE_TYPEINFO *pTInfo = (NE_TYPEINFO*)(pData + 2); NE_NAMEINFO *pIconStorage = NULL; NE_NAMEINFO *pIconDir = NULL; LPicoICONDIR lpiID = NULL; ULONG uSize = 0; if (pData == (BYTE*)-1) { FIXME("ICO_GetIconDirectory\n"); /* pCIDir = ICO_GetIconDirectory(peimage, &lpiID, &uSize); // check for .ICO file if (pCIDir) { iconDirCount = 1; iconCount = lpiID->idCount; TRACE("-- icon found %p 0x%08x 0x%08x 0x%08x\n", pCIDir, uSize, iconDirCount, iconCount); } */ } else while (pTInfo->type_id && !(pIconStorage && pIconDir)) { if (pTInfo->type_id == NE_RSCTYPE_GROUP_ICON) /* find icon directory and icon repository */ { iconDirCount = pTInfo->count; pIconDir = ((NE_NAMEINFO*)(pTInfo + 1)); TRACE("\tfound directory - %i icon families\n", iconDirCount); } if (pTInfo->type_id == NE_RSCTYPE_ICON) { iconCount = pTInfo->count; pIconStorage = ((NE_NAMEINFO*)(pTInfo + 1)); TRACE("\ttotal icons - %i\n", iconCount); } pTInfo = (NE_TYPEINFO *)((char*)(pTInfo + 1) + pTInfo->count*sizeof(NE_NAMEINFO)); } if ((pIconStorage && pIconDir) || lpiID) /* load resources and create icons */ { if (nIcons == 0) { ret = iconDirCount; if (lpiID) /* *.ico file, deallocate heap pointer*/ HeapFree(GetProcessHeap(), 0, pCIDir); } else if (nIconIndex < iconDirCount) { UINT16 i, icon; if (nIcons > iconDirCount - nIconIndex) nIcons = iconDirCount - nIconIndex; for (i = 0; i < nIcons; i++) { /* .ICO files have only one icon directory */ if (lpiID == NULL) /* not *.ico */ pCIDir = USER32_LoadResource(image, pIconDir + i + nIconIndex, *(WORD*)pData, &uSize); pIconId[i] = LookupIconIdFromDirectoryEx(pCIDir, TRUE, cx1, cy1, flags); if (cx2 && cy2) pIconId[++i] = LookupIconIdFromDirectoryEx(pCIDir, TRUE, cx2, cy2, flags); } if (lpiID) /* *.ico file, deallocate heap pointer*/ HeapFree(GetProcessHeap(), 0, pCIDir); for (icon = 0; icon < nIcons; icon++) { pCIDir = NULL; if (lpiID) pCIDir = ICO_LoadIcon(image, lpiID->idEntries + (int)pIconId[icon], &uSize); else for (i = 0; i < iconCount; i++) if (pIconStorage[i].id == ((int)pIconId[icon] | 0x8000)) pCIDir = USER32_LoadResource(image, pIconStorage + i, *(WORD*)pData, &uSize); if (pCIDir) { RetPtr[icon] = CreateIconFromResourceEx(pCIDir, uSize, TRUE, 0x00030000, cx1, cy1, flags); if (cx2 && cy2) RetPtr[++icon] = CreateIconFromResourceEx(pCIDir, uSize, TRUE, 0x00030000, cx2, cy2, flags); } else RetPtr[icon] = 0; } ret = icon; /* return number of retrieved icons */ } } } else { } end: UnmapViewOfFile(image); /* success */ return ret; } ================================================ FILE: krnl386/selector.c ================================================ /* * Selector manipulation functions * * Copyright 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include "wine/winbase16.h" #include "wine/debug.h" #include "kernel16_private.h" #include "wine/server.h" WINE_DEFAULT_DEBUG_CHANNEL(selector); #define LDT_SIZE 8192 /* get the number of selectors needed to cover up to the selector limit */ static inline WORD get_sel_count( WORD sel ) { return (wine_ldt_copy.limit[sel >> __AHSHIFT] >> 16) + 1; } /*********************************************************************** * AllocSelectorArray (KERNEL.206) */ WORD WINAPI AllocSelectorArray16( WORD count ) { WORD i, sel = wine_ldt_alloc_entries( count ); if (sel) { LDT_ENTRY entry; wine_ldt_set_base( &entry, 0 ); wine_ldt_set_limit( &entry, 1 ); /* avoid 0 base and limit */ wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_DATA ); for (i = 0; i < count; i++) { if (wine_ldt_set_entry( sel + (i << __AHSHIFT), &entry ) < 0) { wine_ldt_free_entries( sel, count ); return 0; } } } return sel; } /*********************************************************************** * AllocSelector (KERNEL.175) */ WORD WINAPI AllocSelector16( WORD sel ) { WORD newsel, count, i; count = sel ? get_sel_count(sel) : 1; newsel = wine_ldt_alloc_entries( count ); TRACE("(%04x): returning %04x\n", sel, newsel ); if (!newsel) return 0; if (!sel) return newsel; /* nothing to copy */ LDT_ENTRY entry, nentry; wine_ldt_get_entry(sel, &entry); wine_ldt_set_flags(&nentry, wine_ldt_get_flags(&entry)); for (i = 0; i < count; i++) { wine_ldt_set_limit(&nentry, wine_ldt_get_limit(&entry) - (0x10000 * i)); wine_ldt_set_base(&nentry, (DWORD)wine_ldt_get_base(&entry) + (0x10000 * i)); wine_ldt_set_entry(newsel + (i << __AHSHIFT), &nentry); } return newsel; } DWORD WINAPI WIN16_FreeSelector16(WORD sel) { CURRENT_STACK16->es = 0; return FreeSelector16(sel); } /*********************************************************************** * FreeSelector (KERNEL.176) */ WORD WINAPI FreeSelector16( WORD sel ) { LDT_ENTRY entry; wine_ldt_get_entry( sel, &entry ); if (wine_ldt_is_empty( &entry )) return sel; /* error */ /* Check if we are freeing current %fs selector */ if (!((wine_get_fs() ^ sel) & ~3)) WARN("Freeing %%fs selector (%04x), not good.\n", wine_get_fs() ); wine_ldt_free_entries( sel, 1 ); return 0; } /*********************************************************************** * SELECTOR_SetEntries * * Set the LDT entries for an array of selectors. */ static BOOL SELECTOR_SetEntries( WORD sel, const void *base, DWORD size, unsigned char flags ) { LDT_ENTRY entry; WORD i, count; wine_ldt_set_base( &entry, base ); wine_ldt_set_limit( &entry, size - 1 ); wine_ldt_set_flags( &entry, flags ); count = (size + 0xffff) / 0x10000; for (i = 0; i < count; i++) { if (wine_ldt_set_entry( sel + (i << __AHSHIFT), &entry ) < 0) return FALSE; wine_ldt_set_base( &entry, (char*)wine_ldt_get_base(&entry) + 0x10000); /* yep, Windows sets limit like that, not 64K sel units */ wine_ldt_set_limit( &entry, wine_ldt_get_limit(&entry) - 0x10000 ); } return TRUE; } /*********************************************************************** * SELECTOR_AllocBlock * * Allocate selectors for a block of linear memory. */ WORD SELECTOR_AllocBlock( const void *base, DWORD size, unsigned char flags ) { WORD sel, count; if (!size) return 0; count = (size + 0xffff) / 0x10000; if ((sel = wine_ldt_alloc_entries( count ))) { if (SELECTOR_SetEntries( sel, base, size, flags )) return sel; wine_ldt_free_entries( sel, count ); sel = 0; } return sel; } /*********************************************************************** * SELECTOR_FreeBlock * * Free a block of selectors. */ void SELECTOR_FreeBlock( WORD sel ) { WORD i, count = get_sel_count( sel ); TRACE("(%04x,%d)\n", sel, count ); for (i = 0; i < count; i++) FreeSelector16( sel + (i << __AHSHIFT) ); } /*********************************************************************** * SELECTOR_ReallocBlock * * Change the size of a block of selectors. */ WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size ) { LDT_ENTRY entry; int oldcount, newcount; if (!size) size = 1; wine_ldt_get_entry( sel, &entry ); oldcount = (wine_ldt_get_limit(&entry) >> 16) + 1; newcount = (size + 0xffff) >> 16; sel = wine_ldt_realloc_entries( sel, oldcount, newcount ); if (sel) SELECTOR_SetEntries( sel, base, size, wine_ldt_get_flags(&entry) ); return sel; } /*********************************************************************** * PrestoChangoSelector (KERNEL.177) */ WORD WINAPI PrestoChangoSelector16( WORD selSrc, WORD selDst ) { LDT_ENTRY entry; wine_ldt_get_entry( selSrc, &entry ); /* toggle the executable bit */ entry.HighWord.Bits.Type ^= (WINE_LDT_FLAGS_CODE ^ WINE_LDT_FLAGS_DATA); wine_ldt_set_entry( selDst, &entry ); return selDst; } /*********************************************************************** * AllocCStoDSAlias (KERNEL.170) * AllocAlias (KERNEL.172) */ WORD WINAPI AllocCStoDSAlias16( WORD sel ) { WORD newsel; LDT_ENTRY entry; newsel = wine_ldt_alloc_entries( 1 ); TRACE("(%04x): returning %04x\n", sel, newsel ); if (!newsel) return 0; wine_ldt_get_entry( sel, &entry ); entry.HighWord.Bits.Type = WINE_LDT_FLAGS_DATA; if (wine_ldt_set_entry( newsel, &entry ) >= 0) return newsel; wine_ldt_free_entries( newsel, 1 ); return 0; } /*********************************************************************** * AllocDStoCSAlias (KERNEL.171) */ WORD WINAPI AllocDStoCSAlias16( WORD sel ) { WORD newsel; LDT_ENTRY entry; newsel = wine_ldt_alloc_entries( 1 ); TRACE("(%04x): returning %04x\n", sel, newsel ); if (!newsel) return 0; wine_ldt_get_entry( sel, &entry ); entry.HighWord.Bits.Type = WINE_LDT_FLAGS_CODE; if (wine_ldt_set_entry( newsel, &entry ) >= 0) return newsel; wine_ldt_free_entries( newsel, 1 ); return 0; } /*********************************************************************** * LongPtrAdd (KERNEL.180) */ SEGPTR WINAPI LongPtrAdd16( DWORD ptr, DWORD add ) { LDT_ENTRY entry; wine_ldt_get_entry( SELECTOROF(ptr), &entry ); wine_ldt_set_base( &entry, (char *)wine_ldt_get_base(&entry) + add ); wine_ldt_set_entry( SELECTOROF(ptr), &entry ); CURRENT_STACK16->es = 0; return ptr; } /*********************************************************************** * GetSelectorBase (KERNEL.186) */ DWORD WINAPI GetSelectorBase( WORD sel ) { void *base = wine_ldt_copy.base[sel >> __AHSHIFT]; /* if base points into DOSMEM, assume we have to * return pointer into physical lower 1MB */ return DOSMEM_MapLinearToDos( base ); } /*********************************************************************** * SetSelectorBase (KERNEL.187) */ WORD WINAPI SetSelectorBase( WORD sel, DWORD base ) { LDT_ENTRY entry; wine_ldt_get_entry( sel, &entry ); wine_ldt_set_base( &entry, DOSMEM_MapDosToLinear(base) ); if (wine_ldt_set_entry( sel, &entry ) < 0) sel = 0; return sel; } /*********************************************************************** * GetSelectorLimit (KERNEL.188) */ DWORD WINAPI GetSelectorLimit16( WORD sel ) { return wine_ldt_copy.limit[sel >> __AHSHIFT]; } /*********************************************************************** * SetSelectorLimit (KERNEL.189) */ WORD WINAPI SetSelectorLimit16( WORD sel, DWORD limit ) { LDT_ENTRY entry; wine_ldt_get_entry( sel, &entry ); wine_ldt_set_limit( &entry, limit ); if (wine_ldt_set_entry( sel, &entry ) < 0) sel = 0; return sel; } /*********************************************************************** * SelectorAccessRights (KERNEL.196) */ WORD WINAPI SelectorAccessRights16( WORD sel, WORD op, WORD val ) { LDT_ENTRY entry; wine_ldt_get_entry( sel, &entry ); if (op == 0) /* get */ { return entry.HighWord.Bytes.Flags1 | ((entry.HighWord.Bytes.Flags2 & 0xf0) << 8); } else /* set */ { entry.HighWord.Bytes.Flags1 = LOBYTE(val) | 0xf0; entry.HighWord.Bytes.Flags2 = (entry.HighWord.Bytes.Flags2 & 0x0f) | (HIBYTE(val) & 0xf0); wine_ldt_set_entry( sel, &entry ); return 0; } } /*********************************************************************** * IsBadCodePtr (KERNEL.336) */ BOOL16 WINAPI IsBadCodePtr16( SEGPTR lpfn ) { WORD sel; LDT_ENTRY entry; sel = SELECTOROF(lpfn); if (!sel) return TRUE; wine_ldt_get_entry( sel, &entry ); if (wine_ldt_is_empty( &entry )) return TRUE; /* check for code segment, ignoring conforming, read-only and accessed bits */ if ((entry.HighWord.Bits.Type ^ WINE_LDT_FLAGS_CODE) & 0x18) return TRUE; if (OFFSETOF(lpfn) > wine_ldt_get_limit(&entry)) return TRUE; return FALSE; } /*********************************************************************** * IsBadStringPtr (KERNEL.337) */ BOOL16 WINAPI IsBadStringPtr16( SEGPTR ptr, UINT16 size ) { WORD sel; LDT_ENTRY entry; sel = SELECTOROF(ptr); if (!sel) return TRUE; wine_ldt_get_entry( sel, &entry ); if (wine_ldt_is_empty( &entry )) return TRUE; /* check for data or readable code segment */ if (!(entry.HighWord.Bits.Type & 0x10)) return TRUE; /* system descriptor */ if ((entry.HighWord.Bits.Type & 0x0a) == 0x08) return TRUE; /* non-readable code segment */ if (strlen(MapSL(ptr)) < size) size = strlen(MapSL(ptr)) + 1; if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit(&entry))) return TRUE; return FALSE; } /*********************************************************************** * IsBadHugeReadPtr (KERNEL.346) */ BOOL16 WINAPI IsBadHugeReadPtr16( SEGPTR ptr, DWORD size ) { WORD sel; LDT_ENTRY entry; sel = SELECTOROF(ptr); if (!sel) return TRUE; wine_ldt_get_entry( sel, &entry ); if (wine_ldt_is_empty( &entry )) return TRUE; /* check for data or readable code segment */ if (!(entry.HighWord.Bits.Type & 0x10)) return TRUE; /* system descriptor */ if ((entry.HighWord.Bits.Type & 0x0a) == 0x08) return TRUE; /* non-readable code segment */ if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit( &entry ))) return TRUE; return FALSE; } /*********************************************************************** * IsBadHugeWritePtr (KERNEL.347) */ BOOL16 WINAPI IsBadHugeWritePtr16( SEGPTR ptr, DWORD size ) { WORD sel; LDT_ENTRY entry; sel = SELECTOROF(ptr); if (!sel) return TRUE; wine_ldt_get_entry( sel, &entry ); if (wine_ldt_is_empty( &entry )) return TRUE; /* check for writable data segment, ignoring expand-down and accessed flags */ if ((entry.HighWord.Bits.Type ^ WINE_LDT_FLAGS_DATA) & ~5) return TRUE; if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit( &entry ))) return TRUE; return FALSE; } /*********************************************************************** * IsBadReadPtr (KERNEL.334) */ BOOL16 WINAPI IsBadReadPtr16( SEGPTR ptr, UINT16 size ) { return IsBadHugeReadPtr16( ptr, size ); } /*********************************************************************** * IsBadWritePtr (KERNEL.335) */ BOOL16 WINAPI IsBadWritePtr16( SEGPTR ptr, UINT16 size ) { return IsBadHugeWritePtr16( ptr, size ); } /*********************************************************************** * IsBadFlatReadWritePtr (KERNEL.627) */ BOOL16 WINAPI IsBadFlatReadWritePtr16( SEGPTR ptr, DWORD size, BOOL16 bWrite ) { return bWrite? IsBadHugeWritePtr16( ptr, size ) : IsBadHugeReadPtr16( ptr, size ); } /************************************* Win95 pointer mapping functions * * */ struct mapls_entry { struct mapls_entry *next; void *addr; /* linear address */ int count; /* ref count */ WORD sel; /* selector */ }; static struct mapls_entry *first_entry; /*********************************************************************** * MapLS (KERNEL32.@) * MapLS (KERNEL.358) * * Maps linear pointer to segmented. */ SEGPTR WINAPI MapLS( LPCVOID ptr ) { struct mapls_entry *entry, *free = NULL; const void *base; SEGPTR ret = 0; if (!HIWORD(ptr)) return (SEGPTR)LOWORD(ptr); base = (const char *)ptr - ((ULONG_PTR)ptr & 0x7fff); HeapLock( GetProcessHeap() ); for (entry = first_entry; entry; entry = entry->next) { if (entry->addr == base) break; if (!entry->count) free = entry; } if (!entry) { LDT_ENTRY ldt; if (!free) /* no free entry found, create a new one */ { if (!(free = HeapAlloc( GetProcessHeap(), 0, sizeof(*free) ))) goto done; if (!(free->sel = SELECTOR_AllocBlock( base, 0x10000, WINE_LDT_FLAGS_DATA ))) { HeapFree( GetProcessHeap(), 0, free ); goto done; } free->count = 0; free->next = first_entry; first_entry = free; } wine_ldt_get_entry(free->sel, &ldt); wine_ldt_set_base(&ldt, (DWORD)base); wine_ldt_set_entry(free->sel, &ldt); free->addr = (void*)base; entry = free; } entry->count++; ret = MAKESEGPTR( entry->sel, (const char *)ptr - (char *)entry->addr ); done: HeapUnlock( GetProcessHeap() ); return ret; } /*********************************************************************** * UnMapLS (KERNEL32.@) * UnMapLS (KERNEL.359) * * Free mapped selector. */ void WINAPI UnMapLS( SEGPTR sptr ) { struct mapls_entry *entry; WORD sel = SELECTOROF(sptr); if (sel) { HeapLock( GetProcessHeap() ); for (entry = first_entry; entry; entry = entry->next) if (entry->sel == sel) break; if (entry && entry->count > 0) entry->count--; HeapUnlock( GetProcessHeap() ); } } /*********************************************************************** * MapSL (KERNEL32.@) * MapSL (KERNEL.357) * * Maps fixed segmented pointer to linear. */ LPVOID WINAPI MapSL( SEGPTR sptr ) { if (!(SELECTOROF(sptr) & 4)) return OFFSETOF(sptr); return (char *)wine_ldt_copy.base[SELECTOROF(sptr) >> __AHSHIFT] + OFFSETOF(sptr); } /*********************************************************************** * MapSLFix (KERNEL32.@) * * FIXME: MapSLFix and UnMapSLFixArray should probably prevent * unexpected linear address change when GlobalCompact() shuffles * moveable blocks. */ LPVOID WINAPI MapSLFix( SEGPTR sptr ) { return MapSL(sptr); } /*********************************************************************** * UnMapSLFixArray (KERNEL32.@) * * Must not change EAX, hence defined as asm function. */ __ASM_STDCALL_FUNC( UnMapSLFixArray, 8, "ret $8" ) /*********************************************************************** * SMapLS (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS, 0, "xor %edx,%edx\n\t" "testl $0xffff0000,%eax\n\t" "jz 1f\n\t" "pushl %eax\n\t" "call " __ASM_NAME("MapLS") __ASM_STDCALL(4) "\n\t" "movl %eax,%edx\n" "1:\tret" ) /*********************************************************************** * SUnMapLS (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS, 0, "pushl %eax\n\t" /* preserve eax */ "pushl %eax\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_8 (KERNEL32.@) * * These functions map linear pointers at [EBP+xxx] to segmented pointers * and return them. * Win95 uses some kind of alias structs, which it stores in [EBP+x] to * unravel them at SUnMapLS. We just store the segmented pointer there. */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_8, 0, "movl 8(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,8(%ebp)\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_12 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_12, 0, "movl 12(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,12(%ebp)\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_16 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_16, 0, "movl 16(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,16(%ebp)\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_20 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_20, 0, "movl 20(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,20(%ebp)\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_24 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_24, 0, "movl 24(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,24(%ebp)\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_28 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_28, 0, "movl 28(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,28(%ebp)\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_32 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_32, 0, "movl 32(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,32(%ebp)\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_36 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_36, 0, "movl 36(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,36(%ebp)\n\t" "ret" ) /*********************************************************************** * SMapLS_IP_EBP_40 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SMapLS_IP_EBP_40, 0, "movl 40(%ebp),%eax\n\t" "call " __ASM_NAME("SMapLS") __ASM_STDCALL(4) "\n\t" "movl %edx,40(%ebp)\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_8 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_8, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 8(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,8(%ebp)\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_12 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_12, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 12(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,12(%ebp)\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_16 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_16, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 16(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,16(%ebp)\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_20 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_20, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 20(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,20(%ebp)\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_24 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_24, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 24(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,24(%ebp)\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_28 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_28, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 28(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,28(%ebp)\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_32 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_32, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 32(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,32(%ebp)\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_36 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_36, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 36(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,36(%ebp)\n\t" "popl %eax\n\t" "ret" ) /*********************************************************************** * SUnMapLS_IP_EBP_40 (KERNEL32.@) */ __ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_40, 0, "pushl %eax\n\t" /* preserve eax */ "pushl 40(%ebp)\n\t" "call " __ASM_NAME("UnMapLS") __ASM_STDCALL(4) "\n\t" "movl $0,40(%ebp)\n\t" "popl %eax\n\t" "ret" ) ================================================ FILE: krnl386/snoop.c ================================================ /* * 386-specific Win16 dll<->dll snooping functions * * Copyright 1998 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include "windef.h" #include "winbase.h" #include "winnt.h" #include "wine/winbase16.h" #include "winternl.h" #include "wine/library.h" #include "kernel16_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(snoop); #include "pshpack1.h" static void WINAPI SNOOP16_Entry(FARPROC proc, LPBYTE args, CONTEXT *context); static void WINAPI SNOOP16_Return(FARPROC proc, LPBYTE args, CONTEXT *context); typedef struct tagSNOOP16_FUN { /* code part */ BYTE lcall; /* 0x9a call absolute with segment */ DWORD snr; /* unreached */ int nrofargs; FARPROC16 origfun; char *name; } SNOOP16_FUN; typedef struct tagSNOOP16_DLL { HMODULE16 hmod; HANDLE16 funhandle; SNOOP16_FUN *funs; struct tagSNOOP16_DLL *next; char name[1]; } SNOOP16_DLL; typedef struct tagSNOOP16_RETURNENTRY { /* code part */ BYTE lcall; /* 0x9a call absolute with segment */ DWORD snr; /* unreached */ FARPROC16 origreturn; SNOOP16_DLL *dll; DWORD ordinal; WORD origSP; WORD *args; /* saved args across a stdcall */ } SNOOP16_RETURNENTRY; typedef struct tagSNOOP16_RETURNENTRIES { SNOOP16_RETURNENTRY entry[65500/sizeof(SNOOP16_RETURNENTRY)]; HANDLE16 rethandle; struct tagSNOOP16_RETURNENTRIES *next; } SNOOP16_RETURNENTRIES; typedef struct tagSNOOP16_RELAY { WORD pushbp; /* 0x5566 */ BYTE pusheax; /* 0x50 */ WORD pushax; /* 0x5066 */ BYTE pushl; /* 0x68 */ DWORD realfun; /* SNOOP16_Return */ BYTE lcall; /* 0x9a call absolute with segment */ DWORD callfromregs; WORD seg; WORD lret; /* 0xcb66 */ } SNOOP16_RELAY; #include "poppack.h" static SNOOP16_DLL *firstdll = NULL; static SNOOP16_RETURNENTRIES *firstrets = NULL; static SNOOP16_RELAY *snr; static HANDLE16 xsnr = 0; void SNOOP16_RegisterDLL(HMODULE16 hModule,LPCSTR name) { SNOOP16_DLL **dll = &(firstdll); const char *p; char *q; if (!TRACE_ON(snoop)) return; TRACE("hmod=%x, name=%s\n", hModule, name); if (strstr(name, "WEBLNK16.API")) { return; } if (!snr) { xsnr=GLOBAL_Alloc(GMEM_ZEROINIT,2*sizeof(*snr),0,WINE_LDT_FLAGS_CODE|WINE_LDT_FLAGS_32BIT,0); snr = GlobalLock16(xsnr); snr[0].pushbp = 0x5566; snr[0].pusheax = 0x50; snr[0].pushax = 0x5066; snr[0].pushl = 0x68; snr[0].realfun = (DWORD)SNOOP16_Entry; snr[0].lcall = 0x9a; snr[0].callfromregs = (DWORD)__wine_call_from_16_regs; snr[0].seg = wine_get_cs(); snr[0].lret = 0xcb66; snr[1].pushbp = 0x5566; snr[1].pusheax = 0x50; snr[1].pushax = 0x5066; snr[1].pushl = 0x68; snr[1].realfun = (DWORD)SNOOP16_Return; snr[1].lcall = 0x9a; snr[1].callfromregs = (DWORD)__wine_call_from_16_regs; snr[1].seg = wine_get_cs(); snr[1].lret = 0xcb66; } while (*dll) { if ((*dll)->hmod == hModule) { /* another dll, loaded at the same address */ GlobalUnlock16((*dll)->funhandle); GlobalFree16((*dll)->funhandle); break; } dll = &((*dll)->next); } if (*dll) *dll = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *dll, sizeof(SNOOP16_DLL)+strlen(name)); else *dll = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(SNOOP16_DLL)+strlen(name)); (*dll)->next = NULL; (*dll)->hmod = hModule; if ((p=strrchr(name,'\\'))) name = p+1; strcpy( (*dll)->name, name ); if ((q=strrchr((*dll)->name,'.'))) *q='\0'; (*dll)->funhandle = GlobalHandleToSel16(GLOBAL_Alloc(GMEM_ZEROINIT,65535,0,WINE_LDT_FLAGS_CODE,0)); (*dll)->funs = GlobalLock16((*dll)->funhandle); if (!(*dll)->funs) { HeapFree(GetProcessHeap(),0,*dll); FIXME("out of memory\n"); return; } } FARPROC16 SNOOP16_GetProcAddress16(HMODULE16 hmod,DWORD ordinal,FARPROC16 origfun) { SNOOP16_DLL *dll = firstdll; SNOOP16_FUN *fun; NE_MODULE *pModule = NE_GetPtr(hmod); unsigned char *cpnt; char name[200]; if (!TRACE_ON(snoop) || !pModule || !HIWORD(origfun)) return origfun; if (!*(LPBYTE)MapSL((SEGPTR)origfun)) /* 0x00 is an impossible opcode, possible dataref. */ return origfun; while (dll) { if (hmod == dll->hmod) break; dll=dll->next; } if (!dll) /* probably internal */ return origfun; if (ordinal>65535/sizeof(SNOOP16_FUN)) return origfun; fun = dll->funs+ordinal; /* already done? */ fun->lcall = 0x9a; fun->snr = MAKELONG(0,xsnr); fun->origfun = origfun; if (fun->name) return (FARPROC16)(SEGPTR)MAKELONG(((char*)fun-(char*)dll->funs),dll->funhandle); cpnt = (unsigned char *)pModule + pModule->ne_restab; while (*cpnt) { cpnt += *cpnt + 1 + sizeof(WORD); if (*(WORD*)(cpnt+*cpnt+1) == ordinal) { sprintf(name,"%.*s",*cpnt,cpnt+1); break; } } /* Now search the non-resident names table */ if (!*cpnt && pModule->nrname_handle) { cpnt = GlobalLock16( pModule->nrname_handle ); while (*cpnt) { cpnt += *cpnt + 1 + sizeof(WORD); if (*(WORD*)(cpnt+*cpnt+1) == ordinal) { sprintf(name,"%.*s",*cpnt,cpnt+1); break; } } } if (*cpnt) { fun->name = HeapAlloc(GetProcessHeap(),0,strlen(name)+1); strcpy( fun->name, name ); } else fun->name = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,1); /* empty string */ if (!SNOOP16_ShowDebugmsgSnoop(dll->name, ordinal, fun->name)) return origfun; /* more magic. do not try to snoop thunk data entries (MMSYSTEM) */ if (strchr(fun->name,'_')) { char *s=strchr(fun->name,'_'); if (!strncasecmp(s,"_thunkdata",10)) { HeapFree(GetProcessHeap(),0,fun->name); fun->name = NULL; return origfun; } } fun->lcall = 0x9a; fun->snr = MAKELONG(0,xsnr); fun->origfun = origfun; fun->nrofargs = -1; return (FARPROC16)(SEGPTR)MAKELONG(((char*)fun-(char*)dll->funs),dll->funhandle); } #define CALLER1REF (*(DWORD*)(MapSL( MAKESEGPTR(context->SegSs,LOWORD(context->Esp)+4)))) static void WINAPI SNOOP16_Entry(FARPROC proc, LPBYTE args, CONTEXT *context) { DWORD ordinal=0; DWORD entry=(DWORD)MapSL( MAKESEGPTR(context->SegCs,LOWORD(context->Eip)) )-5; WORD xcs = context->SegCs; SNOOP16_DLL *dll = firstdll; SNOOP16_FUN *fun = NULL; SNOOP16_RETURNENTRIES **rets = &firstrets; SNOOP16_RETURNENTRY *ret; unsigned i=0; int max; while (dll) { if (xcs == dll->funhandle) { fun = (SNOOP16_FUN*)entry; ordinal = fun-dll->funs; break; } dll=dll->next; } if (!dll) { FIXME("entrypoint 0x%08x not found\n",entry); return; /* oops */ } while (*rets) { for (i=0;ientry);i++) if (!(*rets)->entry[i].origreturn) break; if (i!=ARRAY_SIZE((*rets)->entry)) break; rets = &((*rets)->next); } if (!*rets) { HANDLE16 hand = GlobalHandleToSel16(GLOBAL_Alloc(GMEM_ZEROINIT,65535,0,WINE_LDT_FLAGS_CODE,0)); *rets = GlobalLock16(hand); (*rets)->rethandle = hand; i = 0; /* entry 0 is free */ } ret = &((*rets)->entry[i]); ret->lcall = 0x9a; ret->snr = MAKELONG(sizeof(SNOOP16_RELAY),xsnr); ret->origreturn = (FARPROC16)CALLER1REF; CALLER1REF = MAKELONG((char*)&(ret->lcall)-(char*)((*rets)->entry),(*rets)->rethandle); ret->dll = dll; ret->args = NULL; ret->ordinal = ordinal; context->Esp += 4;; ret->origSP = LOWORD(context->Esp); context->Eip= LOWORD(fun->origfun); context->SegCs = HIWORD(fun->origfun); DPRINTF("%04x:CALL %s.%d: %s(",GetCurrentThreadId(), dll->name,ordinal,fun->name); if (fun->nrofargs>0) { max = fun->nrofargs; if (max>16) max=16; for (i=max;i--;) DPRINTF("%04x%s",*(WORD*)((char *) MapSL( MAKESEGPTR(context->SegSs,LOWORD(context->Esp)) )+8+sizeof(WORD)*i),i?",":""); if (max!=fun->nrofargs) DPRINTF(" ..."); } else if (fun->nrofargs<0) { DPRINTF(""); ret->args = HeapAlloc(GetProcessHeap(),0,16*sizeof(WORD)); memcpy(ret->args,(LPBYTE)((char *) MapSL( MAKESEGPTR(context->SegSs,LOWORD(context->Esp)) )+8),sizeof(WORD)*16); } DPRINTF(") ret=%04x:%04x\n",HIWORD(ret->origreturn),LOWORD(ret->origreturn)); } static void WINAPI SNOOP16_Return(FARPROC proc, LPBYTE args, CONTEXT *context) { SNOOP16_RETURNENTRY *ret = (SNOOP16_RETURNENTRY*)((char *) MapSL( MAKESEGPTR(context->SegCs,LOWORD(context->Eip)) )-5); /* We haven't found out the nrofargs yet. If we called a cdecl * function it is too late anyway and we can just set '0' (which * will be the difference between orig and current SP * If pascal -> everything ok. */ context->Esp += 4; if (ret->dll->funs[ret->ordinal].nrofargs<0) { ret->dll->funs[ret->ordinal].nrofargs=(LOWORD(context->Esp)-ret->origSP-4)/2; } context->Eip = LOWORD(ret->origreturn); context->SegCs = HIWORD(ret->origreturn); DPRINTF("%04x:RET %s.%d: %s(", GetCurrentThreadId(),ret->dll->name,ret->ordinal, ret->dll->funs[ret->ordinal].name); if (ret->args) { int i,max; max = ret->dll->funs[ret->ordinal].nrofargs; if (max>16) max=16; if (max<0) max=0; for (i=max;i--;) DPRINTF("%04x%s",ret->args[i],i?",":""); if (max!=ret->dll->funs[ret->ordinal].nrofargs) DPRINTF(" ..."); HeapFree(GetProcessHeap(),0,ret->args); ret->args = NULL; } DPRINTF(") retval = %04x:%04x ret=%04x:%04x\n", (WORD)context->Edx,(WORD)context->Eax, HIWORD(ret->origreturn),LOWORD(ret->origreturn)); ret->origreturn = NULL; /* mark as empty */ } ================================================ FILE: krnl386/soundblaster.c ================================================ /* * Soundblaster Emulation * * Copyright 2002 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include "windef.h" #include "winbase.h" #include "dosexe.h" #include "wine/debug.h" #include "wingdi.h" #include "mmsystem.h" #include "dsound.h" WINE_DEFAULT_DEBUG_CHANNEL(sblaster); /* Board Configuration */ /* FIXME: Should be in a config file */ #define SB_IRQ 5 #define SB_IRQ_PRI 11 #define SB_DMA 1 /* Soundblaster state */ static int SampleMode; /* Mono / Stereo */ static int SampleRate; static int SamplesCount; static BYTE DSP_Command[256]; /* Store param numbers in bytes for each command */ static BYTE DSP_InBuffer[10]; /* Store DSP command bytes parameters from host */ static int InSize; /* Nb of bytes in InBuffer */ static BYTE DSP_OutBuffer[10]; /* Store DSP information bytes to host */ static int OutSize; /* Nb of bytes in InBuffer */ static int command; /* Current command */ static BOOL end_sound_loop = FALSE; static BOOL dma_enable = FALSE; /* The maximum size of a dma transfer can be 65536 */ #define DMATRFSIZE 1024 /* DMA can perform 8 or 16-bit transfer */ static BYTE dma_buffer[DMATRFSIZE*2]; /* Direct Sound buffer config */ #define DSBUFLEN 4096 /* FIXME: Only this value seems to work */ /* Direct Sound playback stuff */ static LPDIRECTSOUND lpdsound; static LPDIRECTSOUNDBUFFER lpdsbuf; static DSBUFFERDESC buf_desc; static WAVEFORMATEX wav_fmt; static HANDLE SB_Thread; static UINT buf_off; extern HWND vga_hwnd; /* SB_Poll performs DMA transfers and fills the Direct Sound Buffer */ static DWORD CALLBACK SB_Poll( void *dummy ) { HRESULT result; LPBYTE lpbuf1 = NULL; LPBYTE lpbuf2 = NULL; DWORD dwsize1 = 0; DWORD dwsize2 = 0; DWORD dwbyteswritten1 = 0; DWORD dwbyteswritten2 = 0; int size; /* FIXME: this loop must be improved */ while(!end_sound_loop) { Sleep(10); if (dma_enable) { size = DMA_Transfer(SB_DMA,min(DMATRFSIZE,SamplesCount),dma_buffer); } else continue; result = IDirectSoundBuffer_Lock(lpdsbuf,buf_off,size,(LPVOID *)&lpbuf1,&dwsize1,(LPVOID *)&lpbuf2,&dwsize2,0); if (result != DS_OK) { ERR("Unable to lock sound buffer !\n"); continue; } dwbyteswritten1 = min(size,dwsize1); memcpy(lpbuf1,dma_buffer,dwbyteswritten1); if (size>dwsize1) { dwbyteswritten2 = min(size - dwbyteswritten1,dwsize2); memcpy(lpbuf2,dma_buffer+dwbyteswritten1,dwbyteswritten2); } buf_off = (buf_off + dwbyteswritten1 + dwbyteswritten2) % DSBUFLEN; result = IDirectSoundBuffer_Unlock(lpdsbuf,lpbuf1,dwbyteswritten1,lpbuf2,dwbyteswritten2); if (result!=DS_OK) ERR("Unable to unlock sound buffer !\n"); SamplesCount -= size; if (!SamplesCount) { DOSVM_QueueEvent(SB_IRQ,SB_IRQ_PRI,NULL,NULL); dma_enable = FALSE; } } return 0; } static BOOL SB_Init(void) { HRESULT result; if (!lpdsound) { result = DirectSoundCreate(NULL,&lpdsound,NULL); if (result != DS_OK) { ERR("Unable to initialize Sound Subsystem err = %x !\n",result); return FALSE; } /* FIXME: To uncomment when : - SetCooperative level is correctly implemented - an always valid and non changing handle to a windows (vga_hwnd) is available (this surely needs some work in vga.c) result = IDirectSound_SetCooperativeLevel(lpdsound,vga_hwnd,DSSCL_EXCLUSIVE|DSSCL_PRIORITY); if (result != DS_OK) { ERR("Can't set cooperative level !\n"); return FALSE; } */ /* Default format */ wav_fmt.wFormatTag = WAVE_FORMAT_PCM; wav_fmt.nChannels = 1; wav_fmt.nSamplesPerSec = 22050; wav_fmt.nAvgBytesPerSec = 22050; wav_fmt.nBlockAlign = 1; wav_fmt.wBitsPerSample = 8; wav_fmt.cbSize = 0; memset(&buf_desc,0,sizeof(DSBUFFERDESC)); buf_desc.dwSize = sizeof(DSBUFFERDESC); buf_desc.dwBufferBytes = DSBUFLEN; buf_desc.lpwfxFormat = &wav_fmt; result = IDirectSound_CreateSoundBuffer(lpdsound,&buf_desc,&lpdsbuf,NULL); if (result != DS_OK) { ERR("Can't create sound buffer !\n"); return FALSE; } result = IDirectSoundBuffer_Play(lpdsbuf,0, 0, DSBPLAY_LOOPING); if (result != DS_OK) { ERR("Can't start playing !\n"); return FALSE; } buf_off = 0; end_sound_loop = FALSE; SB_Thread = CreateThread(NULL, 0, SB_Poll, NULL, 0, NULL); TRACE("thread\n"); if (!SB_Thread) { ERR("Can't create thread !\n"); return FALSE; } } return TRUE; } static void SB_Reset(void) { int i; for(i=0;i<256;i++) DSP_Command[i]=0; /* Set Time Constant */ DSP_Command[0x40]=1; /* Generate IRQ */ DSP_Command[0xF2]=0; /* DMA DAC 8-bits */ DSP_Command[0x14]=2; /* Generic DAC/ADC DMA (16-bit, 8-bit) */ for(i=0xB0;i<=0xCF;i++) DSP_Command[i]=3; /* DSP Identification */ DSP_Command[0xE0]=1; /* Clear command and input buffer */ command = -1; InSize = 0; /* Put a garbage value in the output buffer */ OutSize = 1; if (SB_Init()) /* All right, let's put the magic value for autodetection */ DSP_OutBuffer[0] = 0xaa; else /* Something is wrong, put 0 to failed autodetection */ DSP_OutBuffer[0] = 0x00; } /* Find a standard sampling rate for DirectSound */ static int SB_StdSampleRate(int SampleRate) { if (SampleRate>((44100+48000)/2)) return 48000; if (SampleRate>((32000+44100)/2)) return 44100; if (SampleRate>((24000+32000)/2)) return 32000; if (SampleRate>((22050+24000)/2)) return 24000; if (SampleRate>((16000+22050)/2)) return 22050; if (SampleRate>((12000+16000)/2)) return 16000; if (SampleRate>((11025+12000)/2)) return 12000; if (SampleRate>((8000+11025)/2)) return 11025; return 8000; } void SB_ioport_out( WORD port, BYTE val ) { switch(port) { /* DSP - Reset */ case 0x226: TRACE("Resetting DSP.\n"); SB_Reset(); break; /* DSP - Write Data or Command */ case 0x22c: TRACE("val=%x\n",val); if (command == -1) { /* Clear input buffer and set the current command */ command = val; InSize = 0; } if (InSize!=DSP_Command[command]) /* Fill the input buffer the command parameters if any */ DSP_InBuffer[InSize++]=val; else { /* Process command */ switch(command) { case 0x10: /* SB */ FIXME("Direct DAC (8-bit) - Not Implemented\n"); break; case 0x14: /* SB */ SamplesCount = DSP_InBuffer[1]+(val<<8)+1; TRACE("DMA DAC (8-bit) for %x samples\n",SamplesCount); dma_enable = TRUE; break; case 0x20: FIXME("Direct ADC (8-bit) - Not Implemented\n"); break; case 0x24: /* SB */ FIXME("DMA ADC (8-bit) - Not Implemented\n"); break; case 0x40: /* SB */ SampleRate = 1000000/(256-val); TRACE("Set Time Constant (%d <-> %d Hz => %d Hz)\n",DSP_InBuffer[0], SampleRate,SB_StdSampleRate(SampleRate)); SampleRate = SB_StdSampleRate(SampleRate); wav_fmt.nSamplesPerSec = SampleRate; wav_fmt.nAvgBytesPerSec = SampleRate; IDirectSoundBuffer_SetFormat(lpdsbuf,&wav_fmt); break; /* case 0xBX/0xCX -> See below */ case 0xD0: /* SB */ TRACE("Halt DMA operation (8-bit)\n"); dma_enable = FALSE; break; case 0xD1: /* SB */ FIXME("Enable Speaker - Not Implemented\n"); break; case 0xD3: /* SB */ FIXME("Disable Speaker - Not Implemented\n"); break; case 0xD4: /* SB */ FIXME("Continue DMA operation (8-bit) - Not Implemented\n"); break; case 0xD8: /* SB */ FIXME("Speaker Status - Not Implemented\n"); break; case 0xE0: /* SB 2.0 */ TRACE("DSP Identification\n"); DSP_OutBuffer[OutSize++] = ~val; break; case 0xE1: /* SB */ TRACE("DSP Version\n"); OutSize=2; DSP_OutBuffer[0]=0; /* returns version 1.0 */ DSP_OutBuffer[1]=1; break; case 0xF2: /* SB */ TRACE("IRQ Request (8-bit)\n"); DOSVM_QueueEvent(SB_IRQ,SB_IRQ_PRI,NULL,NULL); break; default: if (((command&0xF0)==0xB0)||((DSP_InBuffer[0]&0xF0)==0xC0)) { /* SB16 */ FIXME("Generic DAC/ADC DMA (16-bit, 8-bit) - %d % d\n",command,DSP_InBuffer[1]); if (command&0x02) FIXME("Generic DAC/ADC fifo mode not supported\n"); if (command&0x04) FIXME("Generic DAC/ADC autoinit dma mode not supported\n"); if (command&0x08) FIXME("Generic DAC/ADC adc mode not supported\n"); switch(command>>4) { case 0xB: FIXME("Generic DAC/ADC 8-bit not supported\n"); SampleMode = 0; break; case 0xC: FIXME("Generic DAC/ADC 16-bit not supported\n"); SampleMode = 1; break; default: ERR("Generic DAC/ADC resolution unknown\n"); break; } if (DSP_InBuffer[1]&0x010) FIXME("Generic DAC/ADC signed sample mode not supported\n"); if (DSP_InBuffer[1]&0x020) FIXME("Generic DAC/ADC stereo mode not supported\n"); SamplesCount = DSP_InBuffer[2]+(val<<8)+1; TRACE("Generic DMA for %x samples\n",SamplesCount); dma_enable = TRUE; } else FIXME("DSP command %x not supported\n",val); } /* Empty the input buffer and end the command */ InSize = 0; command = -1; } } } BYTE SB_ioport_in( WORD port ) { BYTE res = 0; switch(port) { /* DSP Read Data */ case 0x22a: /* Value in the read buffer */ if (OutSize) res = DSP_OutBuffer[--OutSize]; else /* return the last byte */ res = DSP_OutBuffer[0]; break; /* DSP - Write Buffer Status */ case 0x22c: /* DSP always ready for writing */ res = 0x00; break; /* DSP - Data Available Status */ /* DSP - IRQ Acknowledge, 8-bit */ case 0x22e: /* DSP data availability check */ if (OutSize) res = 0x80; else res = 0x00; break; } return res; } ================================================ FILE: krnl386/stub.c ================================================ #include "kernel16_private.h" #include "config.h" #include "wine/port.h" #include #include "windef.h" #include "winbase.h" #include "winternl.h" #include "wine/winbase16.h" #include "windows/wownt32.h" #include "kernel16_private.h" #include "dosexe.h" #include "excpt.h" #include "wine/debug.h" #include "wine/exception.h" WINE_DEFAULT_DEBUG_CHANNEL(stub); void DPMI_PendingEventCheck(void) { FIXME("DPMI_PendingEventCheck\n"); } void DPMI_PendingEventCheck_Cleanup(void) { FIXME("DPMI_PendingEventCheck_Cleanup\n"); } void DPMI_PendingEventCheck_Return(void) { FIXME("DPMI_PendingEventCheck_Return\n"); } //int31.c typedef struct tagRMCB { DWORD address; DWORD proc_ofs, proc_sel; DWORD regs_ofs, regs_sel; struct tagRMCB *next; } RMCB; #ifdef _MSC_VER void DPMI_CallRMCB32(RMCB *rmcb, UINT16 ss, DWORD esp, UINT16*es, DWORD*edi) { ERR("NOTIMPL:DPMI_CallRMCB32(%p, %u, %u, %p, %p)\n", rmcb, ss, esp, es, edi); } #endif /* Process flags */ #define PDB32_DEBUGGED 0x0001 /* Process is being debugged */ #define PDB32_WIN16_PROC 0x0008 /* Win16 process */ #define PDB32_DOS_PROC 0x0010 /* Dos process */ #define PDB32_CONSOLE_PROC 0x0020 /* Console process */ #define PDB32_FILE_APIS_OEM 0x0040 /* File APIs are OEM */ #define PDB32_WIN32S_PROC 0x8000 /* Win32s process */ /*********************************************************************** * GetProcessFlags (KERNEL32.@) */ DWORD WINAPI GetProcessFlags(DWORD processid) { IMAGE_NT_HEADERS *nt; DWORD flags = 0; if (processid && processid != GetCurrentProcessId()) return 0; if ((nt = RtlImageNtHeader(NtCurrentTeb()->Peb->ImageBaseAddress))) { if (nt->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI) flags |= PDB32_CONSOLE_PROC; } if (!AreFileApisANSI()) flags |= PDB32_FILE_APIS_OEM; if (IsDebuggerPresent()) flags |= PDB32_DEBUGGED; return flags; } typedef BOOL(WINAPI *PVerifyConsoleIoHandle)(HANDLE); BOOL WINAPI VerifyConsoleIoHandle(HANDLE h) { static PVerifyConsoleIoHandle func = 0; if (!func) func = GetProcAddress(GetModuleHandleA("kernel32.dll"), "VerifyConsoleIoHandle"); if (!func) { ERR("can't load kernel32!VerifyConsoleIoHandle\n"); } return func(h); } typedef HANDLE(WINAPI *PConvertToGlobalHandle)(HANDLE); HANDLE WINAPI ConvertToGlobalHandle(HANDLE hSrc) { static PConvertToGlobalHandle func = 0; if (!func) func = GetProcAddress(GetModuleHandleA("kernel32.dll"), "ConvertToGlobalHandle"); if (!func) { ERR("can't load kernel32!ConvertToGlobalHandle\n"); } return func(hSrc); } WINE_DECLARE_DEBUG_CHANNEL(disasm); static int get_debug_mode() { return TRACE_ON(disasm); } DWORD wine_pm_interrupt_handler(WORD num, DWORD addr) { HTASK16 hTask = GetCurrentTask(); TDB *pTask = GlobalLock16(hTask); if (!pTask) return 0; DWORD handler = 0; switch (num) { case 0: handler = pTask->int0; break; case 2: handler = pTask->int2; break; case 0x0d: /* FIXME: push addr? */ /* handler = HasGPHandler16(addr); */ break; case 4: handler = pTask->int4; break; case 6: handler = pTask->int6; break; case 7: handler = pTask->int7; break; case 0x3e: handler = pTask->int3e; break; case 0x75: handler = pTask->int75; break; } GlobalUnlock16(hTask); return handler; } extern LPVOID *__wine_call_to_16_ret_p; wine_call_to_16_vm86_t func_wine_call_to_16_vm86; wine_call_to_16_regs_vm86_t func_wine_call_to_16_regs_vm86; DWORD WINAPI wine_call_to_16(FARPROC16 target, DWORD cbArgs, PEXCEPTION_HANDLER handler) { 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); } void WINAPI wine_call_to_16_regs(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler) { //why?? context->SegSs = SELECTOROF(getWOW32Reserved()); context->Esp = OFFSETOF(getWOW32Reserved()); 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); } void __wine_enter_vm86(CONTEXT *context) { 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); } BOOL16 WINAPI IsDBCSLeadByte16(BYTE TestChar) { TRACE("IsDBCSLeadByte16(%c)\n", TestChar); return IsDBCSLeadByte(TestChar); } extern DWORD WOW32ReservedTls; __declspec(dllexport) PVOID getWOW32Reserved() { /* TlsGetValue clears win32 last error! */ /* GetLastError() is called by INT21_GetExtendedError(FIXME?) */ return TebTlsGetValue(NtCurrentTeb(), WOW32ReservedTls); } __declspec(dllexport) PVOID setWOW32Reserved(PVOID w) { return TebTlsSetValue(NtCurrentTeb(), WOW32ReservedTls, w); } __declspec(thread) WINE_VM86_TEB_INFO GdiTebBatch; __declspec(dllexport) WINE_VM86_TEB_INFO *getGdiTebBatch() { return &GdiTebBatch; } extern DWORD kernel_thread_data_tls; __declspec(dllexport) struct kernel_thread_data *tls_get_kernel_thread_data() { return (struct kernel_thread_data*)TebTlsGetValue(NtCurrentTeb(), kernel_thread_data_tls); } ================================================ FILE: krnl386/syslevel.c ================================================ /* * Win32 'syslevel' routines * * Copyright 1998 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #ifdef HAVE_UNISTD_H # include #endif #include #include "windef.h" #include "winbase.h" #include "winternl.h" #include "wine/winbase16.h" #include "kernel16_private.h" #include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(syslevel); static SYSLEVEL Win16Mutex; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &Win16Mutex.crst, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": Win16Mutex") } }; static SYSLEVEL Win16Mutex = { { &critsect_debug, -1, 0, 0, 0, 0 }, 1 }; HANDLE vm_idle_event; HANDLE WINAPI get_idle_event() { return vm_idle_event; } /************************************************************************ * GetpWin16Lock (KERNEL32.93) */ VOID WINAPI GetpWin16Lock(SYSLEVEL **lock) { *lock = &Win16Mutex; } /************************************************************************ * GetpWin16Lock (KERNEL.449) */ SEGPTR WINAPI GetpWin16Lock16(void) { static SYSLEVEL *w16Mutex; static SEGPTR segpWin16Mutex; if (!segpWin16Mutex) { w16Mutex = &Win16Mutex; segpWin16Mutex = MapLS( &w16Mutex ); } return segpWin16Mutex; } /************************************************************************ * _CreateSysLevel (KERNEL.438) */ VOID WINAPI _CreateSysLevel(SYSLEVEL *lock, INT level) { RtlInitializeCriticalSection( &lock->crst ); lock->level = level; TRACE("(%p, %d): handle is %p\n", lock, level, lock->crst.LockSemaphore ); } /************************************************************************ * _EnterSysLevel (KERNEL32.97) * _EnterSysLevel (KERNEL.439) */ VOID WINAPI _EnterSysLevel(SYSLEVEL *lock) { struct kernel_thread_data *thread_data = kernel_get_thread_data(); int i; TRACE("(%p, level %d): thread %x count before %d\n", lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] ); for ( i = 3; i > lock->level; i-- ) if ( thread_data->sys_count[i] > 0 ) { ERR("(%p, level %d): Holding %p, level %d. Expect deadlock!\n", lock, lock->level, thread_data->sys_mutex[i], i ); } RtlEnterCriticalSection( &lock->crst ); if (thread_data->yield_wait_event) { HANDLE event = thread_data->yield_wait_event; DWORD mutex_count, count; RtlLeaveCriticalSection(&lock->crst); mutex_count = _ConfirmSysLevel(lock); count = mutex_count; /* release lock */ while (count-- > 0) { if (--thread_data->sys_count[lock->level] == 0) thread_data->sys_mutex[lock->level] = NULL; RtlLeaveCriticalSection(&lock->crst); } WaitForSingleObject(event, INFINITE); count = mutex_count; /* restore lock */ while (count-- > 0) { thread_data->sys_count[lock->level]++; thread_data->sys_mutex[lock->level] = lock; RtlEnterCriticalSection(&lock->crst); } RtlEnterCriticalSection(&lock->crst); CloseHandle(event); } switch_directory(thread_data); thread_data->sys_count[lock->level]++; thread_data->sys_mutex[lock->level] = lock; if (thread_data->yield_event) SetEvent(thread_data->yield_event); TRACE("(%p, level %d): thread %x count after %d\n", lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] ); if (lock == &Win16Mutex) { CallTo16_TebSelector = wine_get_fs(); ResetEvent(vm_idle_event); } } /************************************************************************ * _LeaveSysLevel (KERNEL32.98) * _LeaveSysLevel (KERNEL.440) */ VOID WINAPI _LeaveSysLevel(SYSLEVEL *lock) { struct kernel_thread_data *thread_data = kernel_get_thread_data(); TRACE("(%p, level %d): thread %x count before %d\n", lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] ); if ( thread_data->sys_count[lock->level] <= 0 || thread_data->sys_mutex[lock->level] != lock ) { ERR("(%p, level %d): Invalid state: count %d mutex %p.\n", lock, lock->level, thread_data->sys_count[lock->level], thread_data->sys_mutex[lock->level] ); } else { if ( --thread_data->sys_count[lock->level] == 0 ) thread_data->sys_mutex[lock->level] = NULL; } RtlLeaveCriticalSection( &lock->crst ); if ((lock == &Win16Mutex) && !Win16Mutex.crst.OwningThread) SetEvent(vm_idle_event); TRACE("(%p, level %d): thread %x count after %d\n", lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] ); } /************************************************************************ * @ (KERNEL32.86) */ VOID WINAPI _KERNEL32_86(SYSLEVEL *lock) { _LeaveSysLevel(lock); } /************************************************************************ * _ConfirmSysLevel (KERNEL32.95) * _ConfirmSysLevel (KERNEL.436) */ DWORD WINAPI _ConfirmSysLevel(SYSLEVEL *lock) { if ( lock && lock->crst.OwningThread == ULongToHandle(GetCurrentThreadId()) ) return lock->crst.RecursionCount; else return 0L; } /************************************************************************ * _CheckNotSysLevel (KERNEL32.94) * _CheckNotSysLevel (KERNEL.437) */ VOID WINAPI _CheckNotSysLevel(SYSLEVEL *lock) { if (lock && lock->crst.OwningThread == ULongToHandle(GetCurrentThreadId()) && lock->crst.RecursionCount) { ERR( "Holding lock %p level %d\n", lock, lock->level ); DbgBreakPoint(); } } /************************************************************************ * _EnterWin16Lock [KERNEL.480] */ VOID WINAPI _EnterWin16Lock(void) { _EnterSysLevel(&Win16Mutex); } /************************************************************************ * _LeaveWin16Lock [KERNEL.481] */ VOID WINAPI _LeaveWin16Lock(void) { _LeaveSysLevel(&Win16Mutex); } /************************************************************************ * _ConfirmWin16Lock (KERNEL32.96) */ DWORD WINAPI _ConfirmWin16Lock(void) { return _ConfirmSysLevel(&Win16Mutex); } /************************************************************************ * ReleaseThunkLock (KERNEL32.48) */ VOID WINAPI ReleaseThunkLock(DWORD *mutex_count) { DWORD count = _ConfirmSysLevel(&Win16Mutex); *mutex_count = count; while (count-- > 0) _LeaveSysLevel(&Win16Mutex); } /************************************************************************ * RestoreThunkLock (KERNEL32.49) */ VOID WINAPI RestoreThunkLock(DWORD mutex_count) { while (mutex_count-- > 0) _EnterSysLevel(&Win16Mutex); } /************************************************************************ * SYSLEVEL_CheckNotLevel */ VOID SYSLEVEL_CheckNotLevel( INT level ) { INT i; for ( i = 3; i >= level; i-- ) if ( kernel_get_thread_data()->sys_count[i] > 0 ) { ERR("(%d): Holding lock of level %d!\n", level, i ); DbgBreakPoint(); break; } } ================================================ FILE: krnl386/task.c ================================================ /* * Task functions * * Copyright 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include "wine/exception.h" #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winnt.h" #include "windows/wownt32.h" #include "winuser.h" #include "ntstatus.h" #include "wine/winbase16.h" #include "winternl.h" #include "kernel16_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(task); /* Workaround for ReactOS */ BOOL is_reactos() { static BOOL detected; static BOOL is; HKEY hKey; CHAR name[100]; DWORD dwType, dwSize = sizeof(name); if (detected) return is; detected = TRUE; if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_QUERY_VALUE, &hKey)) return FALSE; if (ERROR_SUCCESS != RegQueryValueExA(hKey, "ProductName", NULL, &dwType, (LPBYTE)name, &dwSize)) { RegCloseKey(hKey); return FALSE; } RegCloseKey(hKey); if (dwType != REG_SZ) return FALSE; is = strstr(name, "ReactOS") != NULL; return is; } #include "pshpack1.h" struct thunk { BYTE movw; HANDLE16 instance; BYTE ljmp; FARPROC16 func; }; /* Segment containing MakeProcInstance() thunks */ typedef struct { WORD next; /* Selector of next segment */ WORD magic; /* Thunks signature */ WORD unused; WORD free; /* Head of the free list */ struct thunk thunks[1]; } THUNKS; #include "poppack.h" #define THUNK_MAGIC ('P' | ('T' << 8)) /* Min. number of thunks allocated when creating a new segment */ #define MIN_THUNKS 32 #define TDB_MAGIC ('T' | ('D' << 8)) static THHOOK DefaultThhook; THHOOK *pThhook = &DefaultThhook; #define hFirstTask (pThhook->HeadTDB) #define hLockedTask (pThhook->LockTDB) static UINT16 nTaskCount = 0; static HTASK16 initial_task, main_task; BOOL WINAPI TebTlsSetValue(TEB *teb, DWORD index, LPVOID value) { if (index < TLS_MINIMUM_AVAILABLE) { teb->TlsSlots[index] = value; } else { index -= TLS_MINIMUM_AVAILABLE; if (index >= 8 * sizeof(teb->Peb->TlsExpansionBitmapBits)) { return FALSE; } teb->TlsExpansionSlots[index] = value; } return TRUE; } LPVOID WINAPI TebTlsGetValue(TEB *teb, DWORD index) { LPVOID ret; if (index < TLS_MINIMUM_AVAILABLE) { ret = teb->TlsSlots[index]; } else { index -= TLS_MINIMUM_AVAILABLE; if (index >= 8 * sizeof(teb->Peb->TlsExpansionBitmapBits)) { return NULL; } if (!teb->TlsExpansionSlots) ret = NULL; else ret = teb->TlsExpansionSlots[index]; } return ret; } static DWORD curdir_tls_index = -1; static HTASK16 task_old = NULL; static struct kernel_thread_data *task_old_data = NULL; /*********************************************************************** * TASK_InstallTHHook */ void TASK_InstallTHHook( THHOOK *pNewThhook ) { THHOOK *pOldThhook = pThhook; pThhook = pNewThhook? pNewThhook : &DefaultThhook; *pThhook = *pOldThhook; } /*********************************************************************** * TASK_GetPtr */ static TDB *TASK_GetPtr( HTASK16 hTask ) { return GlobalLock16( hTask ); } /*********************************************************************** * TASK_GetCurrent */ TDB *TASK_GetCurrent(void) { return TASK_GetPtr( GetCurrentTask() ); } /*********************************************************************** * TASK_LinkTask */ static void TASK_LinkTask( HTASK16 hTask ) { HTASK16 *prevTask; TDB *pTask; if (!(pTask = TASK_GetPtr( hTask ))) return; prevTask = &hFirstTask; while (*prevTask) { TDB *prevTaskPtr = TASK_GetPtr( *prevTask ); if (prevTaskPtr->priority >= pTask->priority) break; prevTask = &prevTaskPtr->hNext; } pTask->hNext = *prevTask; *prevTask = hTask; nTaskCount++; } /*********************************************************************** * TASK_UnlinkTask */ static void TASK_UnlinkTask( HTASK16 hTask ) { HTASK16 *prevTask; TDB *pTask; prevTask = &hFirstTask; while (*prevTask && (*prevTask != hTask)) { pTask = TASK_GetPtr( *prevTask ); prevTask = &pTask->hNext; } if (*prevTask) { pTask = TASK_GetPtr( *prevTask ); *prevTask = pTask->hNext; pTask->hNext = 0; nTaskCount--; } } /*********************************************************************** * TASK_CreateThunks * * Create a thunk free-list in segment 'handle', starting from offset 'offset' * and containing 'count' entries. */ static void TASK_CreateThunks( HGLOBAL16 handle, WORD offset, WORD count ) { int i; THUNKS *pThunk; pThunk = (THUNKS *)((BYTE *)GlobalLock16( handle ) + offset); pThunk->next = 0; pThunk->magic = THUNK_MAGIC; pThunk->free = FIELD_OFFSET( THUNKS, thunks ); for (i = 0; i < count-1; i++) *(WORD *)&pThunk->thunks[i] = FIELD_OFFSET( THUNKS, thunks[i+1] ); *(WORD *)&pThunk->thunks[i] = 0; /* Last thunk */ } /*********************************************************************** * TASK_AllocThunk * * Allocate a thunk for MakeProcInstance(). */ static SEGPTR TASK_AllocThunk(void) { TDB *pTask; THUNKS *pThunk; WORD sel, base; if (!(pTask = TASK_GetCurrent())) return 0; sel = pTask->hCSAlias; pThunk = (THUNKS *)pTask->thunks; base = (char *)pThunk - (char *)pTask; while (!pThunk->free) { sel = pThunk->next; if (!sel) /* Allocate a new segment */ { sel = GLOBAL_Alloc( GMEM_FIXED, FIELD_OFFSET( THUNKS, thunks[MIN_THUNKS] ), pTask->hPDB, WINE_LDT_FLAGS_CODE, 0 ); if (!sel) return 0; TASK_CreateThunks( sel, 0, MIN_THUNKS ); pThunk->next = sel; } pThunk = GlobalLock16( sel ); base = 0; } base += pThunk->free; pThunk->free = *(WORD *)((BYTE *)pThunk + pThunk->free); return MAKESEGPTR( sel, base ); } /*********************************************************************** * TASK_FreeThunk * * Free a MakeProcInstance() thunk. */ static BOOL TASK_FreeThunk( SEGPTR thunk ) { TDB *pTask; THUNKS *pThunk; WORD sel, base; if (!(pTask = TASK_GetCurrent())) return FALSE; sel = pTask->hCSAlias; pThunk = (THUNKS *)pTask->thunks; base = (char *)pThunk - (char *)pTask; while (sel && (sel != HIWORD(thunk))) { sel = pThunk->next; pThunk = GlobalLock16( sel ); base = 0; } if (!sel) return FALSE; *(WORD *)((BYTE *)pThunk + LOWORD(thunk) - base) = pThunk->free; pThunk->free = LOWORD(thunk) - base; return TRUE; } /*********************************************************************** * TASK_Create * * NOTE: This routine might be called by a Win32 thread. Thus, we need * to be careful to protect global data structures. We do this * by entering the Win16Lock while linking the task into the * global task list. */ static TDB *TASK_Create( NE_MODULE *pModule, UINT16 cmdShow, LPCSTR cmdline, BYTE len ) { HTASK16 hTask; TDB *pTask; FARPROC16 proc; char curdir[MAX_PATH]; HMODULE16 hModule = pModule ? pModule->self : 0; /* Allocate the task structure */ hTask = GlobalAlloc16( GMEM_FIXED | GMEM_ZEROINIT, sizeof(TDB) ); if (!hTask) return NULL; GLOBAL_SetSeg(hTask, 0, GT_TASK); pTask = TASK_GetPtr( hTask ); FarSetOwner16( hTask, hModule ); /* Fill the task structure */ pTask->hSelf = hTask; pTask->version = pModule ? pModule->ne_expver : 0x0400; pTask->hModule = hModule; pTask->hParent = GetCurrentTask(); pTask->magic = TDB_MAGIC; pTask->nCmdShow = cmdShow; GetCurrentDirectoryA( sizeof(curdir), curdir ); GetShortPathNameA( curdir, curdir, sizeof(curdir) ); pTask->curdrive = (curdir[0] - 'A') | 0x80; lstrcpynA( pTask->curdir, curdir + 2, sizeof(pTask->curdir) ); /* Create the thunks block */ TASK_CreateThunks( hTask, (char *)pTask->thunks - (char *)pTask, 7 ); /* Copy the module name */ if (hModule) { char name[sizeof(pTask->module_name)+1]; size_t len; GetModuleName16( hModule, name, sizeof(name) ); len = strlen(name) + 1; memcpy(pTask->module_name, name, min(len,sizeof(pTask->module_name))); pTask->compat_flags = GetProfileIntA( "Compatibility", name, 0 ); } /* Allocate a selector for the PDB */ pTask->hPDB = GLOBAL_CreateBlock( GMEM_FIXED, &pTask->pdb, sizeof(PDB16), hModule, WINE_LDT_FLAGS_DATA, 0 ); /* Fill the PDB */ pTask->pdb.int20 = 0x20cd; pTask->pdb.dispatcher[0] = 0x9a; /* ljmp */ proc = GetProcAddress16( GetModuleHandle16("KERNEL"), "DOS3Call" ); memcpy( &pTask->pdb.dispatcher[1], &proc, sizeof(proc) ); pTask->pdb.savedint22 = 0; pTask->pdb.savedint23 = 0; pTask->pdb.savedint24 = 0; pTask->pdb.fileHandlesPtr = MAKESEGPTR( GlobalHandleToSel16(pTask->hPDB), FIELD_OFFSET( PDB16, fileHandles )); pTask->pdb.hFileHandles = 0; memset( pTask->pdb.fileHandles, 0xff, sizeof(pTask->pdb.fileHandles) ); /* FIXME: should we make a copy of the environment? */ pTask->pdb.environment = SELECTOROF(GetDOSEnvironment16()); pTask->pdb.nbFiles = 20; /* Fill the command line */ if (!cmdline) { cmdline = GetCommandLineA(); /* remove the first word (program name) */ if (*cmdline == '"') if (!(cmdline = strchr( cmdline+1, '"' ))) cmdline = GetCommandLineA(); while (*cmdline && (*cmdline != ' ') && (*cmdline != '\t')) cmdline++; while ((*cmdline == ' ') || (*cmdline == '\t')) cmdline++; len = strlen(cmdline); } if (len >= sizeof(pTask->pdb.cmdLine)) len = sizeof(pTask->pdb.cmdLine)-2; pTask->pdb.cmdLine[0] = len; memcpy( pTask->pdb.cmdLine + 1, cmdline, len ); if (len == 0) { pTask->pdb.cmdLine[len+1] = 0x0d; /* Actual windows behaviour(but why?) */ } TRACE("cmdline='%.*s' task=%04x\n", len, cmdline, hTask ); /* Allocate a code segment alias for the TDB */ pTask->hCSAlias = GLOBAL_CreateBlock( GMEM_FIXED, pTask, sizeof(TDB), pTask->hPDB, WINE_LDT_FLAGS_CODE, 0 ); /* Default DTA overwrites command line */ pTask->dta = MAKESEGPTR( pTask->hPDB, FIELD_OFFSET( PDB16, cmdLine )); /* Create scheduler event for 16-bit tasks */ if ( !(pTask->flags & TDBF_WIN32) ) NtCreateEvent( &pTask->hEvent, EVENT_ALL_ACCESS, NULL, NotificationEvent, FALSE ); if (!initial_task) initial_task = hTask; return pTask; } /*********************************************************************** * TASK_DeleteTask */ static void TASK_DeleteTask( HTASK16 hTask ) { TDB *pTask; HGLOBAL16 hPDB; if (!(pTask = TASK_GetPtr( hTask ))) return; HeapFree(GetProcessHeap(), 0, TebTlsGetValue(pTask->teb, curdir_tls_index)); if (task_old == hTask) { task_old = 0; task_old_data = NULL; TlsSetValue(curdir_tls_index, 0xdead); } hPDB = pTask->hPDB; pTask->magic = 0xdead; /* invalidate signature */ /* Free the selector aliases */ GLOBAL_FreeBlock( pTask->hCSAlias ); GLOBAL_FreeBlock( pTask->hPDB ); /* Free the task module */ HMODULE16 hmod = pTask->hModule; FreeModule16( hmod ); /* Is the module still loaded? if so update hinstance if needed */ NE_MODULE *pmod = NE_GetPtr(hmod); if (pmod) { HTASK16 prev = hFirstTask; TDB *prevTDB; while (prev) { prevTDB = TASK_GetPtr(prev); if (prevTDB->hModule == hmod) { if (!pmod->ne_autodata) pmod->self = prevTDB->hInstance; else { SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pmod ) + pmod->ne_autodata - 1; pSeg->hSeg = prevTDB->hInstance; } break; } prev = prevTDB->hNext; } } /* Free the task structure itself */ GlobalFree16( hTask ); /* Free all memory used by this task (including the 32-bit stack, */ /* the environment block and the thunk segments). */ GlobalFreeAll16( hPDB ); } /*********************************************************************** * TASK_CreateMainTask * * Create a task for the main (32-bit) process. */ void TASK_CreateMainTask(void) { TDB *pTask; STARTUPINFOA startup_info; UINT cmdShow = 1; /* SW_SHOWNORMAL but we don't want to include winuser.h here */ GetStartupInfoA( &startup_info ); if (startup_info.dwFlags & STARTF_USESHOWWINDOW) cmdShow = startup_info.wShowWindow; pTask = TASK_Create( NULL, cmdShow, NULL, 0 ); if (!pTask) { ERR("could not create task for main process\n"); ExitProcess(1); } pTask->flags |= TDBF_WIN32; pTask->hInstance = 0; pTask->hPrevInstance = 0; pTask->teb = NtCurrentTeb(); /* Add the task to the linked list */ /* (no need to get the win16 lock, we are the only thread at this point) */ TASK_LinkTask( pTask->hSelf ); main_task = pTask->hSelf; } struct create_data { TDB *task; WIN16_SUBSYSTEM_TIB *tib; LPCSTR curdir; }; /* allocate the win16 TIB for a new 16-bit task */ static WIN16_SUBSYSTEM_TIB *allocate_win16_tib( TDB *pTask ) { WCHAR path[MAX_PATH]; WIN16_SUBSYSTEM_TIB *tib; UNICODE_STRING *curdir; NE_MODULE *pModule = NE_GetPtr( pTask->hModule ); if (!(tib = HeapAlloc( GetProcessHeap(), 0, sizeof(*tib) ))) return NULL; MultiByteToWideChar( CP_ACP, 0, NE_MODULE_NAME(pModule), -1, path, MAX_PATH ); GetLongPathNameW( path, path, MAX_PATH ); if (RtlCreateUnicodeString( &tib->exe_str, path )) tib->exe_name = &tib->exe_str; else tib->exe_name = NULL; RtlAcquirePebLock(); if (NtCurrentTeb()->Tib.SubSystemTib) curdir = &((WIN16_SUBSYSTEM_TIB *)NtCurrentTeb()->Tib.SubSystemTib)->curdir.DosPath; else curdir = &NtCurrentTeb()->Peb->ProcessParameters->CurrentDirectory.DosPath; tib->curdir.DosPath.MaximumLength = sizeof(tib->curdir_buffer); tib->curdir.DosPath.Length = min( curdir->Length, tib->curdir.DosPath.MaximumLength-sizeof(WCHAR) ); tib->curdir.DosPath.Buffer = tib->curdir_buffer; tib->curdir.Handle = 0; memcpy( tib->curdir_buffer, curdir->Buffer, tib->curdir.DosPath.Length ); tib->curdir_buffer[tib->curdir.DosPath.Length/sizeof(WCHAR)] = 0; RtlReleasePebLock(); return tib; } static inline void free_win16_tib( WIN16_SUBSYSTEM_TIB *tib ) { if (tib->exe_name) RtlFreeUnicodeString( tib->exe_name ); HeapFree( GetProcessHeap(), 0, tib ); } static void set_thread_internal_windows_ver(DWORD version) { /* In WOW64, NtCurrentTeb()->Win32ClientInfo is not used */ BOOL iswow64 = FALSE; LPDWORD lpdwExpWinVer; IsWow64Process(GetCurrentProcess(), &iswow64); typedef struct { DWORD64 CI_flags; DWORD64 cSpins; DWORD dwExpWinVer; DWORD dwCompatFlags; /* teb->Peb->AppCompatFlagsUser.LowPart */ DWORD dwCompatFlags2; /* ... */ } CLIENTINFO64, *LPCLIENTINFO64; typedef struct { DWORD CI_flags; DWORD cSpins; DWORD dwExpWinVer; DWORD dwCompatFlags; /* teb->Peb->AppCompatFlagsUser.LowPart */ DWORD dwCompatFlags2; /* ... */ } CLIENTINFO32, *LPCLIENTINFO32; if (iswow64) { #if 0 /* only works in windows 10 */ SSIZE_T teb_wow64teboffset = *(PSSIZE_T)((LPBYTE)NtCurrentTeb() + 0x0FDC); LPBYTE wow64teb = (LPBYTE)NtCurrentTeb() + teb_wow64teboffset; #else LPBYTE wow64teb = *(LPBYTE*)((LPBYTE)NtCurrentTeb() + 0x0F70); #endif LPCLIENTINFO64 wow64teb_Win32ClientInfo = (LPCLIENTINFO64)(wow64teb + 0x800); lpdwExpWinVer = &wow64teb_Win32ClientInfo->dwExpWinVer; } else { /* NT 5.0 and higher */ LPBYTE teb = (LPBYTE)NtCurrentTeb(); LPCLIENTINFO32 teb_Win32ClientInfo = (LPCLIENTINFO32)(teb + 0x06CC); lpdwExpWinVer = &teb_Win32ClientInfo->dwExpWinVer; } if (*lpdwExpWinVer == 0) { MSG msg; /* init user32 */ PeekMessageW(&msg, NULL, 0, 0, 0); } *lpdwExpWinVer = version; } static void cwd_warning(void) { char cd[MAX_PATH]; DWORD result; GetCurrentDirectoryA(MAX_PATH, cd); result = GetShortPathNameA(cd, cd, MAX_PATH); if (result < MAX_PATH && result > 0) { char *c = cd; while (c != (char*)1) { char *next = strchr(c, '\\'); if (next - c > 8) { char *ext = strchr(c, '.'); if (!ext || (ext - c > 8 || next - (ext + 1) > 3)) { ERR("could not get 8.3 filename. %s\n", cd); break; } } c = next + 1; } if (strlen(cd) > 60) { ERR("current directory is too long. %s\n", cd); } } } /* startup routine for a new 16-bit thread */ static DWORD CALLBACK task_start( LPVOID p ) { struct create_data *data = p; TDB *pTask = data->task; DWORD ret; kernel_get_thread_data()->htask16 = pTask->hSelf; kernel_get_thread_data()->idle_event = CreateEventA(NULL, TRUE, FALSE, NULL); if (!is_reactos()) NtCurrentTeb()->Tib.SubSystemTib = data->tib; set_thread_internal_windows_ver(0x30A); _EnterWin16Lock(); TASK_LinkTask( pTask->hSelf ); pTask->teb = NtCurrentTeb(); typedef HRESULT(WINAPI *SetThreadDescription_t)(HANDLE hThread, PCWSTR lpThreadDescription); static BOOL init_SetThreadDescription = FALSE; static SetThreadDescription_t SetThreadDescription; if (!init_SetThreadDescription) { init_SetThreadDescription = TRUE; SetThreadDescription = (SetThreadDescription_t)GetProcAddress(GetModuleHandleW(L"kernel32"), "SetThreadDescription"); } if (SetThreadDescription) /* Windows 10 1607~ */ { WCHAR buf[1025]; buf[0] = 0; CHAR mod_name[9]; memcpy(mod_name, pTask->module_name, 8); mod_name[8] = 0; wsprintfW(buf, L"%S(%s)", mod_name, data->tib->exe_name->Buffer); SetThreadDescription(GetCurrentThread(), buf); } if (data->curdir) SetCurrentDirectory16(data->curdir); cwd_warning(); HeapFree(GetProcessHeap(), 0, data); #ifdef _MSC_VER __try #endif { ret = NE_StartTask(); } #ifdef _MSC_VER __except (IsDebuggerPresent() ? EXCEPTION_CONTINUE_SEARCH : EXCEPTION_EXECUTE_HANDLER) #endif { } _LeaveWin16Lock(); return ret; } /*********************************************************************** * TASK_SpawnTask * * Spawn a new 16-bit task. */ HTASK16 TASK_SpawnTask( NE_MODULE *pModule, WORD cmdShow, LPCSTR cmdline, BYTE len, HANDLE *hThread, LPCSTR curdir ) { struct create_data *data = NULL; WIN16_SUBSYSTEM_TIB *tib; TDB *pTask; if (!(pTask = TASK_Create( pModule, cmdShow, cmdline, len ))) return 0; if (!(tib = allocate_win16_tib( pTask ))) goto failed; if (!(data = HeapAlloc( GetProcessHeap(), 0, sizeof(*data)))) goto failed; data->task = pTask; data->tib = tib; data->curdir = curdir; if (!(*hThread = CreateThread( NULL, 0, task_start, data, 0, NULL ))) goto failed; return pTask->hSelf; failed: if (tib) free_win16_tib( tib ); HeapFree( GetProcessHeap(), 0, data ); TASK_DeleteTask( pTask->hSelf ); return 0; } /*********************************************************************** * TASK_GetTaskFromThread */ HTASK16 TASK_GetTaskFromThread( DWORD thread ) { TDB *p = TASK_GetPtr( hFirstTask ); while (p) { if (p->teb->ClientId.UniqueThread == (HANDLE)thread) return p->hSelf; p = TASK_GetPtr( p->hNext ); } return 0; } /*********************************************************************** * TASK_CallTaskSignalProc */ static void TASK_CallTaskSignalProc( UINT16 uCode, HANDLE16 hTaskOrModule ) { WORD args[5]; TDB *pTask = TASK_GetCurrent(); if ( !pTask || !pTask->userhandler ) return; args[4] = hTaskOrModule; args[3] = uCode; args[2] = 0; args[1] = pTask->hInstance; args[0] = pTask->hQueue; WOWCallback16Ex( (DWORD)pTask->userhandler, WCB16_PASCAL, sizeof(args), args, NULL ); } static void exit_toolhelp() { HMODULE toolhelp = GetModuleHandleA("TOOLHELP.DLL16"); BOOL16(WINAPI*InterruptUnRegister16)(HTASK16); BOOL16(WINAPI*NotifyUnRegister16)(HTASK16); if (!toolhelp) return; InterruptUnRegister16 = (BOOL16(WINAPI*)(HTASK16))GetProcAddress(toolhelp, "InterruptUnRegister16"); NotifyUnRegister16 = (BOOL16(WINAPI*)(HTASK16))GetProcAddress(toolhelp, "NotifyUnRegister16"); InterruptUnRegister16(0); NotifyUnRegister16(0); } void FILE_CloseAll(); /*********************************************************************** * TASK_ExitTask */ void TASK_ExitTask(void) { WIN16_SUBSYSTEM_TIB *tib; TDB *pTask; DWORD lockCount; /* Enter the Win16Lock to protect global data structures */ _EnterWin16Lock(); pTask = TASK_GetCurrent(); if ( !pTask ) { _LeaveWin16Lock(); return; } TRACE("Killing task %04x\n", pTask->hSelf ); /* Perform USER cleanup */ TASK_CallTaskSignalProc( USIG16_TERMINATION, pTask->hSelf ); NE_CallUserSignalProc(pTask->hSelf, USIG16_TERMINATION, 0, 0, 0); /* TOOLHELP */ exit_toolhelp(); /* Remove the task from the list to be sure we never switch back to it */ TASK_UnlinkTask( pTask->hSelf ); SetEvent(kernel_get_thread_data()->idle_event); CloseHandle(kernel_get_thread_data()->idle_event); FILE_CloseAll(); if (!nTaskCount || (nTaskCount == 1 && hFirstTask == initial_task)) { TRACE("this is the last task, exiting\n" ); ExitKernel16(); } pTask->nEvents = 0; if ( hLockedTask == pTask->hSelf ) hLockedTask = 0; TASK_DeleteTask( pTask->hSelf ); if ((tib = NtCurrentTeb()->Tib.SubSystemTib)) { free_win16_tib( tib ); NtCurrentTeb()->Tib.SubSystemTib = NULL; } /* ... and completely release the Win16Lock, just in case. */ ReleaseThunkLock( &lockCount ); } static DWORD WINAPI call_exit(LPVOID params) { exit(0); return 0; } /*********************************************************************** * ExitKernel (KERNEL.2) * * Clean-up everything and exit the Wine process. */ void WINAPI ExitKernel16(void) { WriteOutProfiles16(); CloseHandle(CreateThread(NULL, 0, call_exit, NULL, 0, NULL)); } /*********************************************************************** * InitTask (KERNEL.91) * * Called by the application startup code. */ void WINAPI InitTask16( CONTEXT *context ) { TDB *pTask; INSTANCEDATA *pinstance; SEGPTR ptr; context->Eax = 0; if (!(pTask = TASK_GetCurrent())) return; /* Note: we need to trust that BX/CX contain the stack/heap sizes, as some apps, notably Visual Basic apps, *modify* the heap/stack size of the instance data segment before calling InitTask() */ /* Initialize the INSTANCEDATA structure */ pinstance = MapSL( MAKESEGPTR(CURRENT_DS, 0) ); pinstance->stackmin = OFFSETOF(getWOW32Reserved()) + sizeof( STACK16FRAME ); pinstance->stackbottom = pinstance->stackmin; /* yup, that's right. Confused me too. */ pinstance->stacktop = ( pinstance->stackmin > LOWORD(context->Ebx) ? pinstance->stackmin - LOWORD(context->Ebx) : 0 ) + 150; /* Initialize the local heap */ if (LOWORD(context->Ecx)) LocalInit16( GlobalHandleToSel16(pTask->hInstance), 0, LOWORD(context->Ecx) ); /* Initialize implicitly loaded DLLs */ NE_InitializeDLLs( pTask->hModule, NULL ); NE_DllProcessAttach( pTask->hModule ); /* Registers on return are: * ax 1 if OK, 0 on error * cx stack limit in bytes * dx cmdShow parameter * si instance handle of the previous instance * di instance handle of the new task * es:bx pointer to command line inside PSP * * 0 (=%bp) is pushed on the stack */ ptr = stack16_push( sizeof(WORD) ); *(WORD *)MapSL(ptr) = 0; context->Esp -= 2; context->Eax = 1; if (!pTask->pdb.cmdLine[0]) context->Ebx = 0x80; else { LPBYTE p = &pTask->pdb.cmdLine[1]; while ((*p == ' ') || (*p == '\t')) p++; context->Ebx = 0x80 + (p - pTask->pdb.cmdLine); } context->Ecx = pinstance->stacktop; context->Edx = pTask->nCmdShow; context->Esi = (DWORD)pTask->hPrevInstance; context->Edi = (DWORD)pTask->hInstance; context->SegEs = (WORD)pTask->hPDB; } /*********************************************************************** * WaitEvent (KERNEL.30) */ BOOL16 WINAPI WaitEvent16( HTASK16 hTask ) { TDB *pTask; if (!hTask) hTask = GetCurrentTask(); pTask = TASK_GetPtr( hTask ); if (pTask->flags & TDBF_WIN32) { FIXME("called for Win32 thread (%04x)!\n", GetCurrentThreadId()); return TRUE; } if (pTask->nEvents > 0) { pTask->nEvents--; return FALSE; } if (pTask->teb == NtCurrentTeb()) { DWORD lockCount; NtResetEvent( pTask->hEvent, NULL ); ReleaseThunkLock( &lockCount ); SYSLEVEL_CheckNotLevel( 1 ); WaitForSingleObject( pTask->hEvent, INFINITE ); RestoreThunkLock( lockCount ); if (pTask->nEvents > 0) pTask->nEvents--; } else FIXME("for other task %04x cur=%04x\n",pTask->hSelf,GetCurrentTask()); return TRUE; } /*********************************************************************** * PostEvent (KERNEL.31) */ void WINAPI PostEvent16( HTASK16 hTask ) { TDB *pTask; if (!hTask) hTask = GetCurrentTask(); if (!(pTask = TASK_GetPtr( hTask ))) return; if (pTask->flags & TDBF_WIN32) { FIXME("called for Win32 thread (%04x)!\n", (DWORD)pTask->teb->ClientId.UniqueThread ); return; } pTask->nEvents++; if (pTask->nEvents == 1) NtSetEvent( pTask->hEvent, NULL ); } /*********************************************************************** * SetPriority (KERNEL.32) */ void WINAPI SetPriority16( HTASK16 hTask, INT16 delta ) { TDB *pTask; INT16 newpriority; if (!hTask) hTask = GetCurrentTask(); if (!(pTask = TASK_GetPtr( hTask ))) return; newpriority = pTask->priority + delta; if (newpriority < -32) newpriority = -32; else if (newpriority > 15) newpriority = 15; pTask->priority = newpriority + 1; TASK_UnlinkTask( pTask->hSelf ); TASK_LinkTask( pTask->hSelf ); pTask->priority--; } /*********************************************************************** * LockCurrentTask (KERNEL.33) */ HTASK16 WINAPI LockCurrentTask16( BOOL16 bLock ) { if (bLock) hLockedTask = GetCurrentTask(); else hLockedTask = 0; return hLockedTask; } /*********************************************************************** * IsTaskLocked (KERNEL.122) */ HTASK16 WINAPI IsTaskLocked16(void) { return hLockedTask; } /*********************************************************************** * OldYield (KERNEL.117) */ void WINAPI OldYield16(void) { DWORD count; SetEvent(tls_get_kernel_thread_data()->idle_event); ReleaseThunkLock(&count); RestoreThunkLock(count); } /*********************************************************************** * WIN32_OldYield (KERNEL.447) */ void WINAPI WIN32_OldYield16(void) { DWORD count; SetEvent(tls_get_kernel_thread_data()->idle_event); ReleaseThunkLock(&count); RestoreThunkLock(count); } /*********************************************************************** * DirectedYield (KERNEL.150) */ void WINAPI DirectedYield16( HTASK16 hTask ) { TDB *tdb = TASK_GetPtr(hTask); DWORD count; struct kernel_thread_data *chdthd; HTASK task; BOOL failed = FALSE; HTASK current = GetCurrentTask(); if (!tdb->teb) { OldYield16(); return; } SetEvent(tls_get_kernel_thread_data()->idle_event); task = hFirstTask; chdthd = (struct kernel_thread_data *)TebTlsGetValue(tdb->teb, kernel_thread_data_tls); if (chdthd->yield_event) { WARN("nested DirectedYield doesnt work.\n"); OldYield16(); return; } task = hFirstTask; while (task) { tdb = TASK_GetPtr(task); struct kernel_thread_data *td = (struct kernel_thread_data *)TebTlsGetValue(tdb->teb, kernel_thread_data_tls); if (td->yield_event) { if (td->htask16 == current) { DWORD count; SetEvent(tls_get_kernel_thread_data()->idle_event); ReleaseThunkLock(&count); Sleep(10); RestoreThunkLock(count); return; } failed = TRUE; } if (td->yield_wait_event) { failed = TRUE; return; } task = tdb->hNext; } if (failed) { WARN("nested DirectedYield doesnt work.\n"); OldYield16(); return; } chdthd->yield_event = CreateEventA(NULL, TRUE, FALSE, NULL); task = hFirstTask; /* All threads expect hTask or current task are locked by yield_wait_event */ while (task) { tdb = TASK_GetPtr(task); if (task != hTask && tdb->teb->ClientId.UniqueThread != GetCurrentThreadId()) { struct kernel_thread_data *td = (struct kernel_thread_data *)TebTlsGetValue(tdb->teb, kernel_thread_data_tls); td->yield_wait_event = CreateEventA(NULL, TRUE, FALSE, NULL); } task = tdb->hNext; } ReleaseThunkLock(&count); /* * In win16, if hTask doesn't wait events, another task will be executed. * Here, wait until timeout. */ WaitForSingleObject(chdthd->yield_event, 100); RestoreThunkLock(count); CloseHandle(chdthd->yield_event); chdthd->yield_event = NULL; task = hFirstTask; while (task) { tdb = TASK_GetPtr(task); if (task != hTask && tdb->teb->ClientId.UniqueThread != GetCurrentThreadId()) { struct kernel_thread_data *td = (struct kernel_thread_data *)TebTlsGetValue(tdb->teb, kernel_thread_data_tls); SetEvent(td->yield_wait_event); td->yield_wait_event = NULL; } task = tdb->hNext; } } /*********************************************************************** * Yield (KERNEL.29) */ void WINAPI Yield16(void) { TDB *pCurTask = TASK_GetCurrent(); if (pCurTask && pCurTask->hQueue) { DWORD count; ReleaseThunkLock(&count); HMODULE mod = GetModuleHandleA( "user32.dll" ); if (mod) { BOOL (WINAPI *pPeekMessageW)( MSG *msg, HWND hwnd, UINT first, UINT last, UINT flags ); pPeekMessageW = (void *)GetProcAddress( mod, "PeekMessageW" ); if (pPeekMessageW) { MSG msg; pPeekMessageW( &msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE ); RestoreThunkLock(count); return; } } RestoreThunkLock(count); } OldYield16(); } /*********************************************************************** * KERNEL_490 (KERNEL.490) */ HTASK16 WINAPI KERNEL_490( HTASK16 someTask ) { if ( !someTask ) return 0; FIXME("(%04x): stub\n", someTask ); return 0; } /*********************************************************************** * MakeProcInstance (KERNEL.51) */ FARPROC16 WINAPI MakeProcInstance16( FARPROC16 func, HANDLE16 hInstance ) { struct thunk *thunk; BYTE *lfunc; SEGPTR thunkaddr; WORD hInstanceSelector; hInstanceSelector = GlobalHandleToSel16(hInstance); TRACE("(%p, %04x);\n", func, hInstance); if (!HIWORD(func)) { /* Win95 actually protects via SEH, but this is better for debugging */ WARN("Ouch ! Called with invalid func %p !\n", func); return NULL; } if ( (GlobalHandleToSel16(CURRENT_DS) != hInstanceSelector) && (hInstance != 0) && (hInstance != 0xffff) ) { /* calling MPI with a foreign DSEG is invalid ! */ WARN("Problem with hInstance? Got %04x, using %04x instead\n", hInstance,CURRENT_DS); } /* Always use the DSEG that MPI was entered with. * We used to set hInstance to GetTaskDS16(), but this should be wrong * as CURRENT_DS provides the DSEG value we need. * ("calling" DS, *not* "task" DS !) */ hInstanceSelector = CURRENT_DS; hInstance = GlobalHandle16(hInstanceSelector); /* no thunking for DLLs */ if (NE_GetPtr(FarGetOwner16(hInstance))->ne_flags & NE_FFLAGS_LIBMODULE) return func; thunkaddr = TASK_AllocThunk(); if (!thunkaddr) return NULL; thunk = MapSL( thunkaddr ); lfunc = MapSL( (SEGPTR)func ); TRACE("(%p,%04x): got thunk %08x\n", func, hInstance, thunkaddr ); if (((lfunc[0]==0x8c) && (lfunc[1]==0xd8)) || /* movw %ds, %ax */ ((lfunc[0]==0x1e) && (lfunc[1]==0x58)) /* pushw %ds, popw %ax */ ) { WARN("This was the (in)famous \"thunk useless\" warning. We thought we have to overwrite with nop;nop;, but this isn't true.\n"); } thunk->movw = 0xb8; /* movw instance, %ax */ thunk->instance = hInstanceSelector; thunk->ljmp = 0xea; /* ljmp func */ thunk->func = func; return (FARPROC16)thunkaddr; /* CX reg indicates if thunkaddr != NULL, implement if needed */ } /*********************************************************************** * FreeProcInstance (KERNEL.52) */ void WINAPI FreeProcInstance16( FARPROC16 func ) { TRACE("(%p)\n", func ); TASK_FreeThunk( (SEGPTR)func ); } /********************************************************************** * TASK_GetCodeSegment * * Helper function for GetCodeHandle/GetCodeInfo: Retrieve the module * and logical segment number of a given code segment. * * 'proc' either *is* already a pair of module handle and segment number, * in which case there's nothing to do. Otherwise, it is a pointer to * a function, and we need to retrieve the code segment. If the pointer * happens to point to a thunk, we'll retrieve info about the code segment * where the function pointed to by the thunk resides, not the thunk itself. * * FIXME: if 'proc' is a SNOOP16 return stub, we should retrieve info about * the function the snoop code will return to ... * */ static BOOL TASK_GetCodeSegment( FARPROC16 proc, NE_MODULE **ppModule, SEGTABLEENTRY **ppSeg, int *pSegNr ) { NE_MODULE *pModule = NULL; SEGTABLEENTRY *pSeg = NULL; int segNr=0; /* Try pair of module handle / segment number */ pModule = GlobalLock16( HIWORD( proc ) ); if ( pModule && pModule->ne_magic == IMAGE_OS2_SIGNATURE ) { segNr = LOWORD( proc ); if ( segNr && segNr <= pModule->ne_cseg ) pSeg = NE_SEG_TABLE( pModule ) + segNr-1; } /* Try thunk or function */ else { BYTE *thunk = MapSL( (SEGPTR)proc ); WORD selector; if ((thunk[0] == 0xb8) && (thunk[3] == 0xea)) selector = thunk[6] + (thunk[7] << 8); else selector = HIWORD( proc ); pModule = NE_GetPtr( GlobalHandle16( selector ) ); pSeg = pModule? NE_SEG_TABLE( pModule ) : NULL; if ( pModule ) for ( segNr = 1; segNr <= pModule->ne_cseg; segNr++, pSeg++ ) if ( GlobalHandleToSel16(pSeg->hSeg) == selector ) break; if ( pModule && segNr > pModule->ne_cseg ) pSeg = NULL; } /* Abort if segment not found */ if ( !pModule || !pSeg ) return FALSE; /* Return segment data */ if ( ppModule ) *ppModule = pModule; if ( ppSeg ) *ppSeg = pSeg; if ( pSegNr ) *pSegNr = segNr; return TRUE; } /********************************************************************** * GetCodeHandle (KERNEL.93) */ DWORD WINAPI GetCodeHandle16( FARPROC16 proc ) { SEGTABLEENTRY *pSeg; if ( !TASK_GetCodeSegment( proc, NULL, &pSeg, NULL ) ) return 0; return MAKELONG( pSeg->hSeg, GlobalHandleToSel16(pSeg->hSeg) ); } /********************************************************************** * GetCodeInfo (KERNEL.104) */ BOOL16 WINAPI GetCodeInfo16( FARPROC16 proc, SEGINFO *segInfo ) { NE_MODULE *pModule; SEGTABLEENTRY *pSeg; int segNr; if ( !TASK_GetCodeSegment( proc, &pModule, &pSeg, &segNr ) ) return FALSE; /* Fill in segment information */ segInfo->offSegment = pSeg->filepos; segInfo->cbSegment = pSeg->size; segInfo->flags = pSeg->flags; segInfo->cbAlloc = pSeg->minsize; segInfo->h = pSeg->hSeg; segInfo->alignShift = pModule->ne_align; if ( segNr == pModule->ne_autodata ) segInfo->cbAlloc += pModule->ne_heap + pModule->ne_stack; /* Return module handle in %es */ CURRENT_STACK16->es = GlobalHandleToSel16( pModule->self ); return TRUE; } /********************************************************************** * DefineHandleTable (KERNEL.94) */ BOOL16 WINAPI DefineHandleTable16( WORD wOffset ) { FIXME("(%04x): stub ?\n", wOffset); return TRUE; } /*********************************************************************** * SetTaskQueue (KERNEL.34) */ HQUEUE16 WINAPI SetTaskQueue16( HTASK16 hTask, HQUEUE16 hQueue ) { TDB *tdb; HQUEUE16 old; if (!hTask) hTask = GetCurrentTask(); tdb = (TDB*)GlobalLock16(hTask); old = tdb->hQueue; tdb->hQueue = hQueue; return old; } /*********************************************************************** * GetTaskQueue (KERNEL.35) */ HQUEUE16 WINAPI GetTaskQueue16( HTASK16 hTask ) { TDB *tdb; if (!hTask) hTask = GetCurrentTask(); tdb = (TDB*)GlobalLock16(hTask); return tdb->hQueue; } /*********************************************************************** * SetThreadQueue (KERNEL.463) */ HQUEUE16 WINAPI SetThreadQueue16( DWORD thread, HQUEUE16 hQueue ) { FIXME( "stub, should not get called\n" ); return 0xbeef; } /*********************************************************************** * GetThreadQueue (KERNEL.464) */ HQUEUE16 WINAPI GetThreadQueue16( DWORD thread ) { FIXME( "stub, should not get called\n" ); return 0xbeef; } /*********************************************************************** * SetFastQueue (KERNEL.624) */ VOID WINAPI SetFastQueue16( DWORD thread, HQUEUE16 hQueue ) { FIXME( "stub, should not get called\n" ); } /*********************************************************************** * GetFastQueue (KERNEL.625) */ HQUEUE16 WINAPI GetFastQueue16( void ) { FIXME( "stub, should not get called\n" ); return 0xbeef; } /*********************************************************************** * SwitchStackTo (KERNEL.108) */ void WINAPI SwitchStackTo16( WORD seg, WORD ptr, WORD top ) { STACK16FRAME *oldFrame, *newFrame; INSTANCEDATA *pData; UINT16 copySize; if (!(pData = GlobalLock16( seg ))) return; TRACE("old=%04x:%04x new=%04x:%04x\n", SELECTOROF( getWOW32Reserved() ), OFFSETOF( getWOW32Reserved() ), seg, ptr ); /* Save the old stack */ oldFrame = CURRENT_STACK16; /* pop frame + args and push bp */ pData->old_ss_sp = (SEGPTR)getWOW32Reserved() + sizeof(STACK16FRAME) + 2 * sizeof(WORD); *(WORD *)MapSL(pData->old_ss_sp) = oldFrame->bp; pData->stacktop = top; pData->stackmin = ptr; pData->stackbottom = ptr; /* Switch to the new stack */ /* Note: we need to take the 3 arguments into account; otherwise, * the stack will underflow upon return from this function. */ copySize = oldFrame->bp - OFFSETOF(pData->old_ss_sp); copySize += 3 * sizeof(WORD) + sizeof(STACK16FRAME); setWOW32Reserved((void *)MAKESEGPTR(seg, ptr - copySize)); newFrame = CURRENT_STACK16; /* Copy the stack frame and the local variables to the new stack */ memmove( newFrame, oldFrame, copySize ); newFrame->bp = ptr; *(WORD *)MapSL( MAKESEGPTR( seg, ptr ) ) = 0; /* clear previous bp */ } /*********************************************************************** * SwitchStackBack (KERNEL.109) */ void WINAPI SwitchStackBack16( WORD dummy1, WORD dummy2, WORD dummy3, CONTEXT *context ) { STACK16FRAME *oldFrame, *newFrame; INSTANCEDATA *pData; if (!(pData = GlobalLock16(SELECTOROF(getWOW32Reserved())))) return; if (!pData->old_ss_sp) { WARN("No previous SwitchStackTo\n" ); return; } TRACE("restoring stack %04x:%04x -> %04x:%04x\n", SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved()), SELECTOROF(pData->old_ss_sp), OFFSETOF(pData->old_ss_sp) ); oldFrame = CURRENT_STACK16; /* Pop bp from the previous stack */ context->Ebp = (context->Ebp & ~0xffff) | *(WORD *)MapSL(pData->old_ss_sp); pData->old_ss_sp += sizeof(WORD); /* Switch back to the old stack */ setWOW32Reserved((void *)(pData->old_ss_sp - sizeof(STACK16FRAME) - 6)); context->SegSs = SELECTOROF(pData->old_ss_sp); context->Esp = OFFSETOF(pData->old_ss_sp) - sizeof(DWORD) + 4 - sizeof(STACK16FRAME) + 44 - 6; /*ret addr*/ pData->old_ss_sp = 0; /* Build a stack frame for the return */ newFrame = CURRENT_STACK16; newFrame->frame32 = oldFrame->frame32; newFrame->module_cs = oldFrame->module_cs; newFrame->callfrom_ip = oldFrame->callfrom_ip; newFrame->entry_ip = oldFrame->entry_ip; newFrame->cs = oldFrame->cs; newFrame->ip = oldFrame->ip; } /*********************************************************************** * GetTaskQueueDS (KERNEL.118) */ void WINAPI GetTaskQueueDS16(void) { CURRENT_STACK16->ds = GlobalHandleToSel16( GetTaskQueue16(0) ); } /*********************************************************************** * GetTaskQueueES (KERNEL.119) */ void WINAPI GetTaskQueueES16(void) { CURRENT_STACK16->es = GlobalHandleToSel16( GetTaskQueue16(0) ); } /*********************************************************************** * GetCurrentTask (KERNEL32.@) */ HTASK16 WINAPI GetCurrentTask(void) { HTASK16 ret = kernel_get_thread_data()->htask16; if (!ret) ret = main_task; return ret; } /*********************************************************************** * GetCurrentTask (KERNEL.36) */ DWORD WINAPI WIN16_GetCurrentTask(void) { /* This is the version used by relay code; the first task is */ /* returned in the high word of the result */ return MAKELONG( GetCurrentTask(), hFirstTask ); } /*********************************************************************** * GetCurrentPDB (KERNEL.37) * * UNDOC: returns PSP of KERNEL in high word */ DWORD WINAPI GetCurrentPDB16(void) { TDB *pTask; if (!(pTask = TASK_GetCurrent())) return 0; return MAKELONG(pTask->hPDB, 0); /* FIXME */ } /*********************************************************************** * GetCurPID (KERNEL.157) */ DWORD WINAPI GetCurPID16( DWORD unused ) { return 0; } /*********************************************************************** * GetInstanceData (KERNEL.54) */ INT16 WINAPI GetInstanceData16( HINSTANCE16 instance, WORD buffer, INT16 len ) { char *ptr = GlobalLock16( instance ); if (!ptr || !len) return 0; if ((int)buffer + len >= 0x10000) len = 0x10000 - buffer; memcpy( (char *)GlobalLock16(CURRENT_DS) + buffer, ptr + buffer, len ); return len; } /*********************************************************************** * GetExeVersion (KERNEL.105) */ WORD WINAPI GetExeVersion16(void) { TDB *pTask; if (!(pTask = TASK_GetCurrent())) return 0; return pTask->version; } /*********************************************************************** * SetErrorMode (KERNEL.107) */ UINT16 WINAPI SetErrorMode16( UINT16 mode ) { TDB *pTask; if (!(pTask = TASK_GetCurrent())) return 0; pTask->error_mode = mode; return SetErrorMode( mode ); } /*********************************************************************** * GetNumTasks (KERNEL.152) */ UINT16 WINAPI GetNumTasks16(void) { return nTaskCount; } /*********************************************************************** * GetTaskDS (KERNEL.155) * * Note: this function apparently returns a DWORD with LOWORD == HIWORD. * I don't think we need to bother with this. */ HINSTANCE16 WINAPI GetTaskDS16(void) { TDB *pTask; if (!(pTask = TASK_GetCurrent())) return 0; return GlobalHandleToSel16(pTask->hInstance); } /*********************************************************************** * GetDummyModuleHandleDS (KERNEL.602) */ WORD WINAPI GetDummyModuleHandleDS16(void) { TDB *pTask; WORD selector; if (!(pTask = TASK_GetCurrent())) return 0; if (!(pTask->flags & TDBF_WIN32)) return 0; selector = GlobalHandleToSel16( pTask->hModule ); CURRENT_DS = selector; return selector; } /*********************************************************************** * IsTask (KERNEL.320) */ BOOL16 WINAPI IsTask16( HTASK16 hTask ) { TDB *pTask; if (!(pTask = TASK_GetPtr( hTask ))) return FALSE; if (GlobalSize16( hTask ) < sizeof(TDB)) return FALSE; return (pTask->magic == TDB_MAGIC); } /*********************************************************************** * IsWinOldApTask (KERNEL.158) */ BOOL16 WINAPI IsWinOldApTask16( HTASK16 hTask ) { TDB *tdb = TASK_GetPtr(hTask); if (!tdb) return FALSE; NE_MODULE *ne_mod = NE_GetPtr(tdb->hModule); if (!ne_mod) return FALSE; if (!ne_mod->ne_expver) return TRUE; /* should return bit 0 of byte 0x48 in PSP */ return FALSE; } BOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst) { HMODULE16 hmod = GetExePtr(hInst); if (!hmod) return FALSE; NE_MODULE *ne_mod = NE_GetPtr(hmod); if (!ne_mod) return FALSE; if (ne_mod->ne_expver < 0x300) return TRUE; return FALSE; } /* FIXME: Windows 2.x/386 programs run in protected mode?? */ BOOL WINAPI IsRealModeTask(HINSTANCE16 hInst) { return IsOldWindowsTask(hInst); } /*********************************************************************** * SetTaskSignalProc (KERNEL.38) */ FARPROC16 WINAPI SetTaskSignalProc( HTASK16 hTask, FARPROC16 proc ) { TDB *pTask; FARPROC16 oldProc; if (!hTask) hTask = GetCurrentTask(); if (!(pTask = TASK_GetPtr( hTask ))) return NULL; oldProc = pTask->userhandler; pTask->userhandler = proc; return oldProc; } /*********************************************************************** * SetSigHandler (KERNEL.140) */ WORD WINAPI SetSigHandler16( FARPROC16 newhandler, FARPROC16* oldhandler, UINT16 *oldmode, UINT16 newmode, UINT16 flag ) { FIXME("(%p,%p,%p,%d,%d), unimplemented.\n", newhandler,oldhandler,oldmode,newmode,flag ); if (flag != 1) return 0; if (!newmode) newhandler = NULL; /* Default handler */ if (newmode != 4) { TDB *pTask; if (!(pTask = TASK_GetCurrent())) return 0; if (oldmode) *oldmode = pTask->signal_flags; pTask->signal_flags = newmode; if (oldhandler) *oldhandler = pTask->sighandler; pTask->sighandler = newhandler; } return 0; } /*********************************************************************** * GlobalNotify (KERNEL.154) * * Note that GlobalNotify does _not_ return the old NotifyProc * -- contrary to LocalNotify !! */ VOID WINAPI GlobalNotify16( FARPROC16 proc ) { TDB *pTask; if (!(pTask = TASK_GetCurrent())) return; pTask->discardhandler = proc; } /*********************************************************************** * GetExePtrHelper */ static inline HMODULE16 GetExePtrHelper( HANDLE16 handle, HTASK16 *hTask ) { char *ptr; HANDLE16 owner; /* Check for module handle */ if (!(ptr = GlobalLock16( handle ))) return 0; if (((NE_MODULE *)ptr)->ne_magic == IMAGE_OS2_SIGNATURE) return handle; /* Search for this handle inside all tasks */ *hTask = hFirstTask; while (*hTask) { TDB *pTask = TASK_GetPtr( *hTask ); if ((*hTask == handle) || (pTask->hInstance == handle) || (pTask->hQueue == handle) || (pTask->hPDB == handle)) return pTask->hModule; *hTask = pTask->hNext; } /* Check the owner for module handle */ owner = FarGetOwner16( handle ); if (!(ptr = GlobalLock16( owner ))) return 0; if (((NE_MODULE *)ptr)->ne_magic == IMAGE_OS2_SIGNATURE) return owner; /* Search for the owner inside all tasks */ *hTask = hFirstTask; while (*hTask) { TDB *pTask = TASK_GetPtr( *hTask ); if ((*hTask == owner) || (pTask->hInstance == owner) || (pTask->hQueue == owner) || (pTask->hPDB == owner)) return pTask->hModule; *hTask = pTask->hNext; } return 0; } /*********************************************************************** * GetExePtr (KERNEL.133) */ HMODULE16 WINAPI WIN16_GetExePtr( HANDLE16 handle ) { HTASK16 hTask = 0; HMODULE16 hModule = GetExePtrHelper( handle, &hTask ); STACK16FRAME *frame = CURRENT_STACK16; frame->ecx = hModule; if (hTask) frame->es = hTask; return hModule; } /*********************************************************************** * K228 (KERNEL.228) */ HMODULE16 WINAPI GetExePtr( HANDLE16 handle ) { HTASK16 hTask = 0; return GetExePtrHelper( handle, &hTask ); } typedef INT (WINAPI *MessageBoxA_funcptr)(HWND hWnd, LPCSTR text, LPCSTR title, UINT type); NTSYSCALLAPI NTSTATUS NTAPI NtRaiseHardError( _In_ NTSTATUS ErrorStatus, _In_ ULONG NumberOfParameters, _In_ ULONG UnicodeStringParameterMask, _In_ PULONG_PTR Parameters, _In_ ULONG ValidResponseOptions, _Out_ PULONG Response ); #define HARDERROR_OVERRIDE_ERRORMODE 0x10000000 typedef enum _HARDERROR_RESPONSE_OPTION { OptionAbortRetryIgnore, OptionOk, OptionOkCancel, OptionRetryCancel, OptionYesNo, OptionYesNoCancel, OptionShutdownSystem, OptionOkNoWait, OptionCancelTryContinue } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION; /************************************************************************** * FatalAppExit (KERNEL.137) */ void WINAPI FatalAppExit16( UINT16 action, LPCSTR str ) { TDB *pTask = TASK_GetCurrent(); if (!pTask || !(pTask->error_mode & SEM_NOGPFAULTERRORBOX)) { UNICODE_STRING uni; ANSI_STRING ansi; ULONG response; PUNICODE_STRING puni; RtlInitAnsiString(&ansi, str); RtlAnsiStringToUnicodeString(&uni, &ansi, TRUE); puni = &uni; NTSTATUS status = NtRaiseHardError(STATUS_FATAL_APP_EXIT | HARDERROR_OVERRIDE_ERRORMODE, 1, 1, (PULONG_PTR)&puni /* pointer to pointer to UNICODE_STRING */, OptionOk, &response); RtlFreeUnicodeString(&uni); if (status == STATUS_NOT_IMPLEMENTED) { HMODULE mod = GetModuleHandleA( "user32.dll" ); if (mod) { MessageBoxA_funcptr pMessageBoxA = (MessageBoxA_funcptr)GetProcAddress( mod, "MessageBoxA" ); if (pMessageBoxA) { pMessageBoxA( 0, str, NULL, MB_SYSTEMMODAL | MB_OK ); goto done; } } } ERR( "%s\n", debugstr_a(str) ); } done: ExitThread(0xff); } /*********************************************************************** * GetAppCompatFlags (KERNEL.354) */ DWORD WINAPI GetAppCompatFlags16( HTASK16 hTask ) { TDB *pTask; if (!hTask) hTask = GetCurrentTask(); if (!(pTask=TASK_GetPtr( hTask ))) return 0; if (GlobalSize16(hTask) < sizeof(TDB)) return 0; return pTask->compat_flags; } const char *env_var_limitation[] = { "COMSPEC", "TEMP", "TMP", "PROCESSOR_ARCHITECTURE" }; static BOOL env_var_limit(const char *v) { static BOOL init; int i; static BOOL limit; if (!init) { limit = krnl386_get_config_int("otvdm", "EnvironmentVariableLimitation", TRUE); } if (!limit) return TRUE; SIZE_T len = strchr(v, '=') ? strchr(v, '=') - v : strlen(v); if ((len > 1) && (v[len - 1] == '\x16')) return TRUE; for (i = 0; i < ARRAY_SIZE(env_var_limitation); i++) { if (strlen(env_var_limitation[i]) == len && !memicmp(v, env_var_limitation[i], len)) return TRUE; } return FALSE; } static void parse_autoexec() { BOOL pathfound = FALSE; char autoexec_path[MAX_PATH]; int len = 0; RedirectDriveRoot("C:\\AUTOEXEC.BAT", &autoexec_path, MAX_PATH, TRUE); FILE *aeb = fopen(autoexec_path, "r"); if (aeb) { while (!feof(aeb)) { char line[1024], name[128], var[256], newvar[512], *ptr; int pos; ptr = fgets(&line, 1024, aeb); if (!ptr) continue; pos = strlen(line); if (line[pos - 1] == '\n') line[pos - 1] = '\0'; pos = strspn(line, " \t"); if (!strnicmp(line, "SET ", 4)) { pos = strspn(line + pos + 4, " ") + pos + 4; ptr = strchr(line + pos, '='); if (!ptr) continue; int namelen = (int)(ptr - line) - pos; if (namelen >= 125) continue; strncpy(name, line + pos, namelen); strncpy(var, ptr + 1, 256); name[namelen] = '\0'; if (!strlen(var)) continue; } else if (!strnicmp(line, "PATH", 4)) { pos = strspn(line + pos + 4, " ") + pos + 4; if (line[pos] == '=') { pos++; pos = strspn(line + pos, " ") + pos; } if (!strlen(line + pos)) continue; strcpy(name, "PATH"); strncpy(var, line + pos, 256); } else continue; // use host env var if it exists and will be copied if (env_var_limit(name) && GetEnvironmentVariable(name, NULL, 0)) continue; // special handling for path because we want to include path16 but exclude the host path if (!strcmp(name, "PATH")) { char path[MAX_PATH]; if (ptr = strstr(var, "%PATH%")) strcpy(ptr, ptr + 6); if (GetEnvironmentVariable("PATH\x16", path, MAX_PATH)) { strcat(var, ";"); strcat(var, path); } if (GetEnvironmentVariable("PATH16", path, MAX_PATH) && !pathfound) { strcat(var, ";"); strcat(var, path); } pathfound = TRUE; } strcat(name, "\x16"); ExpandEnvironmentStringsA(var, newvar, 512); SetEnvironmentVariable(name, newvar); } fclose(aeb); } // at least one program requires some kind of path char path[MAX_PATH]; if (!pathfound) { if (!GetEnvironmentVariable("PATH16", path, MAX_PATH)) RedirectSystemDir("C:\\WINDOWS\\", path, MAX_PATH); SetEnvironmentVariable("PATH\x16", path); } GetEnvironmentVariable("PATH\x16", path, MAX_PATH); SetEnvironmentVariable("PATH16", path); } /*********************************************************************** * GetDOSEnvironment (KERNEL.131) * * Note: the environment is allocated once, it doesn't track changes * made using the Win32 API. This shouldn't matter. * * Format of a 16-bit environment block: * ASCIIZ string 1 (xx=yy format) * ... * ASCIIZ string n * BYTE 0 * WORD 1 * ASCIIZ program name (e.g. C:\WINDOWS\SYSTEM\KRNL386.EXE) */ SEGPTR WINAPI GetDOSEnvironment16(void) { static const char ENV_program_name[] = "C:\\WINDOWS\\SYSTEM\\KRNL386.EXE"; static HGLOBAL16 handle; /* handle to the 16 bit environment */ if (!handle) { DWORD size = 0; LPSTR p, env; parse_autoexec(); p = env = GetEnvironmentStringsA(); while (*p) { if (env_var_limit(p)) { size += strlen(p) + 1; } p += strlen(p) + 1; } size++; /* skip last null */ size += sizeof(WORD) + sizeof(ENV_program_name) + 1; handle = GlobalAlloc16( GMEM_FIXED, size ); if (handle) { WORD one = 1; LPSTR env16 = GlobalLock16( handle ); LPSTR env16p = env16; p = env; while (*p) { if (env_var_limit(p)) { int i; for (i = 0; i < strlen(p) + 1; i++) { if (p[i] == '=') { if (i && (p[i - 1] == '\x16')) { i--; p++; } break; } env16p[i] = toupper(p[i]); } memcpy(env16p + i, p + i, strlen(p + i) + 1); env16p += strlen(p) + 1; } p += strlen(p) + 1; } *env16p = 0; env16p++; memcpy( env16p, &one, sizeof(one)); env16p += sizeof(one); memcpy( env16p, ENV_program_name, sizeof(ENV_program_name)); GlobalUnlock16( handle ); } FreeEnvironmentStringsA( env ); } return WOWGlobalLock16( handle ); } /* Emulate an independent current directory for each task */ void switch_directory(struct kernel_thread_data *thread_data) { if (!thread_data->htask16) return; if (curdir_tls_index == -1) { curdir_tls_index = TlsAlloc(); } if (task_old != thread_data->htask16) { TDB *tdb = TASK_GetCurrent(); if (!thread_data->curdir_len) { thread_data->curdir_len = 32768; thread_data->true_curdir = HeapAlloc(GetProcessHeap(), 0, thread_data->curdir_len * 2); thread_data->true_curdir[0] = (tdb->curdrive & ~0x80) + 'A'; thread_data->true_curdir[1] = ':'; thread_data->curdir_buf = thread_data->true_curdir + thread_data->curdir_len; TebTlsSetValue(tdb->teb ? tdb->teb : NtCurrentTeb(), curdir_tls_index, thread_data->true_curdir); GetCurrentDirectoryA(thread_data->curdir_len, thread_data->true_curdir); GetShortPathNameA(thread_data->true_curdir, thread_data->true_curdir, thread_data->curdir_len); memcpy(thread_data->curdir_buf, thread_data->true_curdir, thread_data->curdir_len); SetCurrentDirectory16(thread_data->true_curdir); } if (TlsGetValue(curdir_tls_index) == 0xdead) { task_old = NULL; task_old_data = NULL; return; } if (!task_old || !task_old_data || !task_old_data->curdir_buf) { task_old = NULL; task_old_data = NULL; } if (task_old) { /* save current directory curdir_buf -> new curdir true_curdir-> old curdir tdb->curdir-> old curdir */ GetCurrentDirectoryA(task_old_data->curdir_len, task_old_data->curdir_buf); if (strcmp(task_old_data->curdir_buf, task_old_data->true_curdir)) { /* changed */ GetShortPathNameA(task_old_data->curdir_buf, task_old_data->curdir_buf, task_old_data->curdir_len); strcpy(task_old_data->true_curdir, task_old_data->curdir_buf); TDB *old = ((TDB*)GlobalLock16(task_old_data->htask16)); GetShortPathNameA(task_old_data->true_curdir + 2, old->curdir, sizeof(old->curdir)); GetShortPathNameA(task_old_data->true_curdir, task_old_data->true_curdir, task_old_data->curdir_len); if (!thread_data->htask16) old = NULL; old->curdrive = 0x80 | (task_old_data->true_curdir[0] - 'A'); GlobalUnlock16(task_old_data->htask16); /* curdir_buf -> new curdir true_curdir-> new curdir tdb->curdir-> new curdir */ TRACE("%.*s %p save cur dir %s\n", 8, old->module_name, old, task_old_data->true_curdir); } } /* restore current directory */ SetCurrentDirectoryA(thread_data->true_curdir); task_old_data = thread_data; task_old = thread_data->htask16; } } ================================================ FILE: krnl386/thunk.c ================================================ /* * KERNEL32 thunks and other undocumented stuff * * Copyright 1996, 1997 Alexandre Julliard * Copyright 1997, 1998 Marcus Meissner * Copyright 1998 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include "windef.h" #include "winbase.h" #include "winerror.h" #include "winternl.h" #include "windows/wownt32.h" #include "wine/winbase16.h" #include "wine/debug.h" #include "wine/library.h" #include "kernel16_private.h" WINE_DEFAULT_DEBUG_CHANNEL(thunk); struct ThunkDataCommon { char magic[4]; /* 00 */ DWORD checksum; /* 04 */ }; struct ThunkDataLS16 { struct ThunkDataCommon common; /* 00 */ SEGPTR targetTable; /* 08 */ DWORD firstTime; /* 0C */ }; struct ThunkDataLS32 { struct ThunkDataCommon common; /* 00 */ DWORD * targetTable; /* 08 */ char lateBinding[4]; /* 0C */ DWORD flags; /* 10 */ DWORD reserved1; /* 14 */ DWORD reserved2; /* 18 */ DWORD offsetQTThunk; /* 1C */ DWORD offsetFTProlog; /* 20 */ }; struct ThunkDataSL16 { struct ThunkDataCommon common; /* 00 */ DWORD flags1; /* 08 */ DWORD reserved1; /* 0C */ struct ThunkDataSL * fpData; /* 10 */ SEGPTR spData; /* 14 */ DWORD reserved2; /* 18 */ char lateBinding[4]; /* 1C */ DWORD flags2; /* 20 */ DWORD reserved3; /* 20 */ SEGPTR apiDatabase; /* 28 */ }; struct ThunkDataSL32 { struct ThunkDataCommon common; /* 00 */ DWORD reserved1; /* 08 */ struct ThunkDataSL * data; /* 0C */ char lateBinding[4]; /* 10 */ DWORD flags; /* 14 */ DWORD reserved2; /* 18 */ DWORD reserved3; /* 1C */ DWORD offsetTargetTable; /* 20 */ }; struct ThunkDataSL { #if 0 This structure differs from the Win95 original, but this should not matter since it is strictly internal to the thunk handling routines in KRNL386 / KERNEL32. For reference, here is the Win95 layout: struct ThunkDataCommon common; /* 00 */ DWORD flags1; /* 08 */ SEGPTR apiDatabase; /* 0C */ WORD exePtr; /* 10 */ WORD segMBA; /* 12 */ DWORD lenMBATotal; /* 14 */ DWORD lenMBAUsed; /* 18 */ DWORD flags2; /* 1C */ char pszDll16[256]; /* 20 */ char pszDll32[256]; /*120 */ We do it differently since all our thunk handling is done by 32-bit code. Therefore we do not need to provide easy access to this data, especially the process target table database, for 16-bit code. #endif struct ThunkDataCommon common; DWORD flags1; struct SLApiDB * apiDB; struct SLTargetDB * targetDB; DWORD flags2; char pszDll16[256]; char pszDll32[256]; }; struct SLTargetDB { struct SLTargetDB * next; DWORD process; DWORD * targetTable; }; struct SLApiDB { DWORD nrArgBytes; DWORD errorReturnValue; }; SEGPTR CALL32_CBClient_RetAddr = 0; SEGPTR CALL32_CBClientEx_RetAddr = 0; extern int call_entry_point( void *func, int nb_args, const DWORD *args ); extern void __wine_call_from_16_thunk(void); DEFINE_REGS_ENTRYPOINT( FT_Prolog ) DEFINE_REGS_ENTRYPOINT( FT_PrologPrime ) DEFINE_REGS_ENTRYPOINT( QT_Thunk ) DEFINE_REGS_ENTRYPOINT( QT_ThunkPrime ) /*********************************************************************** * * * Win95 internal thunks * * * ***********************************************************************/ /*********************************************************************** * LogApiThk (KERNEL.423) */ void WINAPI LogApiThk( LPSTR func ) { TRACE( "%s\n", debugstr_a(func) ); } /*********************************************************************** * LogApiThkLSF (KERNEL32.42) * * NOTE: needs to preserve all registers! */ __ASM_STDCALL_FUNC( LogApiThkLSF, 4, "ret $4" ) /*********************************************************************** * LogApiThkSL (KERNEL32.44) * * NOTE: needs to preserve all registers! */ __ASM_STDCALL_FUNC( LogApiThkSL, 4, "ret $4" ) /*********************************************************************** * LogCBThkSL (KERNEL32.47) * * NOTE: needs to preserve all registers! */ __ASM_STDCALL_FUNC( LogCBThkSL, 4, "ret $4" ) /*********************************************************************** * Generates a FT_Prolog call. * * 0FB6D1 movzbl edx,cl * 8B1495xxxxxxxx mov edx,[4*edx + targetTable] * 68xxxxxxxx push FT_Prolog * C3 lret */ static void _write_ftprolog(LPBYTE relayCode ,DWORD *targetTable) { LPBYTE x; x = relayCode; *x++ = 0x0f;*x++=0xb6;*x++=0xd1; /* movzbl edx,cl */ *x++ = 0x8B;*x++=0x14;*x++=0x95;*(DWORD**)x= targetTable; x+=4; /* mov edx, [4*edx + targetTable] */ *x++ = 0x68; *(void **)x = FT_Prolog; x+=4; /* push FT_Prolog */ *x++ = 0xC3; /* lret */ /* fill rest with 0xCC / int 3 */ } /*********************************************************************** * _write_qtthunk (internal) * Generates a QT_Thunk style call. * * 33C9 xor ecx, ecx * 8A4DFC mov cl , [ebp-04] * 8B148Dxxxxxxxx mov edx, [4*ecx + targetTable] * B8yyyyyyyy mov eax, QT_Thunk * FFE0 jmp eax */ static void _write_qtthunk( LPBYTE relayCode, /* [in] start of QT_Thunk stub */ DWORD *targetTable /* [in] start of thunk (for index lookup) */ ) { LPBYTE x; x = relayCode; *x++ = 0x33;*x++=0xC9; /* xor ecx,ecx */ *x++ = 0x8A;*x++=0x4D;*x++=0xFC; /* movb cl,[ebp-04] */ *x++ = 0x8B;*x++=0x14;*x++=0x8D;*(DWORD**)x= targetTable; x+=4; /* mov edx, [4*ecx + targetTable */ *x++ = 0xB8; *(void **)x = QT_Thunk; x+=4; /* mov eax , QT_Thunk */ *x++ = 0xFF; *x++ = 0xE0; /* jmp eax */ /* should fill the rest of the 32 bytes with 0xCC */ } /*********************************************************************** * _loadthunk */ static LPVOID _loadthunk(LPCSTR module, LPCSTR func, LPCSTR module32, struct ThunkDataCommon *TD32, DWORD checksum) { struct ThunkDataCommon *TD16; HMODULE16 hmod; int ordinal; static BOOL done; if (!done) { LoadLibrary16( "gdi.exe" ); LoadLibrary16( "user.exe" ); done = TRUE; } if ((hmod = LoadLibrary16(module)) <= 32) { ERR("(%s, %s, %s): Unable to load '%s', error %d\n", module, func, module32, module, hmod); return 0; } if ( !(ordinal = NE_GetOrdinal(hmod, func)) || !(TD16 = MapSL((SEGPTR)NE_GetEntryPointEx(hmod, ordinal, FALSE)))) { ERR("Unable to find thunk data '%s' in %s, required by %s (conflicting/incorrect DLL versions !?).\n", func, module, module32); return 0; } if (TD32 && memcmp(TD16->magic, TD32->magic, 4)) { ERR("(%s, %s, %s): Bad magic %c%c%c%c (should be %c%c%c%c)\n", module, func, module32, TD16->magic[0], TD16->magic[1], TD16->magic[2], TD16->magic[3], TD32->magic[0], TD32->magic[1], TD32->magic[2], TD32->magic[3]); return 0; } if (TD32 && TD16->checksum != TD32->checksum) { ERR("(%s, %s, %s): Wrong checksum %08x (should be %08x)\n", module, func, module32, TD16->checksum, TD32->checksum); return 0; } if (!TD32 && checksum && checksum != *(LPDWORD)TD16) { ERR("(%s, %s, %s): Wrong checksum %08x (should be %08x)\n", module, func, module32, *(LPDWORD)TD16, checksum); return 0; } return TD16; } /*********************************************************************** * GetThunkStuff (KERNEL32.53) */ LPVOID WINAPI GetThunkStuff(LPCSTR module, LPCSTR func) { return _loadthunk(module, func, "", NULL, 0L); } /*********************************************************************** * GetThunkBuff (KERNEL32.52) * Returns a pointer to ThkBuf in the 16bit library SYSTHUNK.DLL. */ LPVOID WINAPI GetThunkBuff(void) { return GetThunkStuff("SYSTHUNK.DLL", "ThkBuf"); } /*********************************************************************** * ThunkConnect32 (KERNEL32.@) * Connects a 32bit and a 16bit thunkbuffer. */ UINT WINAPI ThunkConnect32( struct ThunkDataCommon *TD, /* [in/out] thunkbuffer */ LPSTR thunkfun16, /* [in] win16 thunkfunction */ LPSTR module16, /* [in] name of win16 dll */ LPSTR module32, /* [in] name of win32 dll */ HMODULE hmod32, /* [in] hmodule of win32 dll */ DWORD dwReason /* [in] initialisation argument */ ) { BOOL directionSL; if (!strncmp(TD->magic, "SL01", 4)) { directionSL = TRUE; TRACE("SL01 thunk %s (%p) <- %s (%s), Reason: %d\n", module32, TD, module16, thunkfun16, dwReason); } else if (!strncmp(TD->magic, "LS01", 4)) { directionSL = FALSE; TRACE("LS01 thunk %s (%p) -> %s (%s), Reason: %d\n", module32, TD, module16, thunkfun16, dwReason); } else { ERR("Invalid magic %c%c%c%c\n", TD->magic[0], TD->magic[1], TD->magic[2], TD->magic[3]); return 0; } switch (dwReason) { case DLL_PROCESS_ATTACH: { struct ThunkDataCommon *TD16; if (!(TD16 = _loadthunk(module16, thunkfun16, module32, TD, 0L))) return 0; if (directionSL) { struct ThunkDataSL32 *SL32 = (struct ThunkDataSL32 *)TD; struct ThunkDataSL16 *SL16 = (struct ThunkDataSL16 *)TD16; struct SLTargetDB *tdb; if (SL16->fpData == NULL) { ERR("ThunkConnect16 was not called!\n"); return 0; } SL32->data = SL16->fpData; tdb = HeapAlloc(GetProcessHeap(), 0, sizeof(*tdb)); tdb->process = GetCurrentProcessId(); tdb->targetTable = (DWORD *)(thunkfun16 + SL32->offsetTargetTable); tdb->next = SL32->data->targetDB; /* FIXME: not thread-safe! */ SL32->data->targetDB = tdb; TRACE("Process %08x allocated TargetDB entry for ThunkDataSL %p\n", GetCurrentProcessId(), SL32->data); } else { struct ThunkDataLS32 *LS32 = (struct ThunkDataLS32 *)TD; struct ThunkDataLS16 *LS16 = (struct ThunkDataLS16 *)TD16; LS32->targetTable = MapSL(LS16->targetTable); /* write QT_Thunk and FT_Prolog stubs */ _write_qtthunk ((LPBYTE)TD + LS32->offsetQTThunk, LS32->targetTable); _write_ftprolog((LPBYTE)TD + LS32->offsetFTProlog, LS32->targetTable); } break; } case DLL_PROCESS_DETACH: /* FIXME: cleanup */ break; } return 1; } /********************************************************************** * QT_Thunk (KERNEL32.@) * * The target address is in EDX. * The 16bit arguments start at ESP. * The number of 16bit argument bytes is EBP-ESP-0x40 (64 Byte thunksetup). * So the stack layout is 16bit argument bytes and then the 64 byte * scratch buffer. * The scratch buffer is used as work space by Windows' QT_Thunk * function. * As the programs unfortunately don't always provide a fixed size * scratch buffer (danger, stack corruption ahead !!), we simply resort * to copying over the whole EBP-ESP range to the 16bit stack * (as there's no way to safely figure out the param count * due to this misbehaviour of some programs). * [ok] * * See DDJ article 9614c for a very good description of QT_Thunk (also * available online !). * * FIXME: DDJ talks of certain register usage rules; I'm not sure * whether we cover this 100%. */ void WINAPI __regs_QT_Thunk( CONTEXT *context ) { CONTEXT context16; DWORD argsize; context16 = *context; context16.SegFs = wine_get_fs(); context16.SegGs = wine_get_gs(); context16.SegCs = HIWORD(context->Edx); context16.Eip = LOWORD(context->Edx); /* point EBP to the STACK16FRAME on the stack * for the call_to_16 to set up the register content on calling */ context16.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp); /* * used to be (problematic): * argsize = context->Ebp - context->Esp - 0x40; * due to some programs abusing the API, we better assume the full * EBP - ESP range for copying instead: */ argsize = context->Ebp - context->Esp; /* ok, too much is insane; let's limit param count a bit again */ if (argsize > 64) argsize = 64; /* 32 WORDs */ WOWCallback16Ex( 0, WCB16_REGS, argsize, (void *)context->Esp, (DWORD *)&context16 ); context->Eax = context16.Eax; context->Edx = context16.Edx; context->Ecx = context16.Ecx; /* make sure to update the Win32 ESP, too, in order to throw away * the number of parameters that the Win16 function * accepted (that it popped from the corresponding Win16 stack) */ context->Esp += LOWORD(context16.Esp) - ( OFFSETOF(getWOW32Reserved()) - argsize ); } /********************************************************************** * FT_Prolog (KERNEL32.@) * * The set of FT_... thunk routines is used instead of QT_Thunk, * if structures have to be converted from 32-bit to 16-bit * (change of member alignment, conversion of members). * * The thunk function (as created by the thunk compiler) calls * FT_Prolog at the beginning, to set up a stack frame and * allocate a 64 byte buffer on the stack. * The input parameters (target address and some flags) are * saved for later use by FT_Thunk. * * Input: EDX 16-bit target address (SEGPTR) * CX bits 0..7 target number (in target table) * bits 8..9 some flags (unclear???) * bits 10..15 number of DWORD arguments * * Output: A new stackframe is created, and a 64 byte buffer * allocated on the stack. The layout of the stack * on return is as follows: * * (ebp+4) return address to caller of thunk function * (ebp) old EBP * (ebp-4) saved EBX register of caller * (ebp-8) saved ESI register of caller * (ebp-12) saved EDI register of caller * (ebp-16) saved ECX register, containing flags * (ebp-20) bitmap containing parameters that are to be converted * by FT_Thunk; it is initialized to 0 by FT_Prolog and * filled in by the thunk code before calling FT_Thunk * (ebp-24) * ... (unclear) * (ebp-44) * (ebp-48) saved EAX register of caller (unclear, never restored???) * (ebp-52) saved EDX register, containing 16-bit thunk target * (ebp-56) * ... (unclear) * (ebp-64) * * ESP is EBP-64 after return. * */ void WINAPI __regs_FT_Prolog( CONTEXT *context ) { /* Build stack frame */ stack32_push(context, context->Ebp); context->Ebp = context->Esp; /* Allocate 64-byte Thunk Buffer */ context->Esp -= 64; memset((char *)context->Esp, '\0', 64); /* Store Flags (ECX) and Target Address (EDX) */ /* Save other registers to be restored later */ *(DWORD *)(context->Ebp - 4) = context->Ebx; *(DWORD *)(context->Ebp - 8) = context->Esi; *(DWORD *)(context->Ebp - 12) = context->Edi; *(DWORD *)(context->Ebp - 16) = context->Ecx; *(DWORD *)(context->Ebp - 48) = context->Eax; *(DWORD *)(context->Ebp - 52) = context->Edx; } /********************************************************************** * FT_Thunk (KERNEL32.@) * * This routine performs the actual call to 16-bit code, * similar to QT_Thunk. The differences are: * - The call target is taken from the buffer created by FT_Prolog * - Those arguments requested by the thunk code (by setting the * corresponding bit in the bitmap at EBP-20) are converted * from 32-bit pointers to segmented pointers (those pointers * are guaranteed to point to structures copied to the stack * by the thunk code, so we always use the 16-bit stack selector * for those addresses). * * The bit #i of EBP-20 corresponds here to the DWORD starting at * ESP+4 + 2*i. * * FIXME: It is unclear what happens if there are more than 32 WORDs * of arguments, so that the single DWORD bitmap is no longer * sufficient ... */ void WINAPI __regs_FT_Thunk( CONTEXT *context ) { DWORD mapESPrelative = *(DWORD *)(context->Ebp - 20); DWORD callTarget = *(DWORD *)(context->Ebp - 52); CONTEXT context16; DWORD i, argsize; DWORD newstack[32]; LPBYTE oldstack; context16 = *context; context16.SegFs = wine_get_fs(); context16.SegGs = wine_get_gs(); context16.SegCs = HIWORD(callTarget); context16.Eip = LOWORD(callTarget); context16.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp); argsize = context->Ebp-context->Esp-0x40; if (argsize > sizeof(newstack)) argsize = sizeof(newstack); oldstack = (LPBYTE)context->Esp; memcpy( newstack, oldstack, argsize ); for (i = 0; i < 32; i++) /* NOTE: What about > 32 arguments? */ if (mapESPrelative & (1 << i)) { SEGPTR *arg = (SEGPTR *)newstack[i]; *arg = MAKESEGPTR(SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved()) - argsize + (*(LPBYTE *)arg - oldstack)); } WOWCallback16Ex( 0, WCB16_REGS, argsize, newstack, (DWORD *)&context16 ); context->Eax = context16.Eax; context->Edx = context16.Edx; context->Ecx = context16.Ecx; context->Esp += LOWORD(context16.Esp) - ( OFFSETOF(getWOW32Reserved()) - argsize ); /* Copy modified buffers back to 32-bit stack */ memcpy( oldstack, newstack, argsize ); } DEFINE_REGS_ENTRYPOINT( FT_Thunk ) /*********************************************************************** * FT_Exit0 (KERNEL32.@) * FT_Exit4 (KERNEL32.@) * FT_Exit8 (KERNEL32.@) * FT_Exit12 (KERNEL32.@) * FT_Exit16 (KERNEL32.@) * FT_Exit20 (KERNEL32.@) * FT_Exit24 (KERNEL32.@) * FT_Exit28 (KERNEL32.@) * FT_Exit32 (KERNEL32.@) * FT_Exit36 (KERNEL32.@) * FT_Exit40 (KERNEL32.@) * FT_Exit44 (KERNEL32.@) * FT_Exit48 (KERNEL32.@) * FT_Exit52 (KERNEL32.@) * FT_Exit56 (KERNEL32.@) * * One of the FT_ExitNN functions is called at the end of the thunk code. * It removes the stack frame created by FT_Prolog, moves the function * return from EBX to EAX (yes, FT_Thunk did use EAX for the return * value, but the thunk code has moved it from EAX to EBX in the * meantime ... :-), restores the caller's EBX, ESI, and EDI registers, * and perform a return to the CALLER of the thunk code (while removing * the given number of arguments from the caller's stack). */ #define FT_EXIT_RESTORE_REGS \ "movl %ebx,%eax\n\t" \ "movl -4(%ebp),%ebx\n\t" \ "movl -8(%ebp),%esi\n\t" \ "movl -12(%ebp),%edi\n\t" \ "leave\n\t" #define DEFINE_FT_Exit(n) \ __ASM_STDCALL_FUNC( FT_Exit ## n, 0, FT_EXIT_RESTORE_REGS "ret $" #n ) DEFINE_FT_Exit(0) DEFINE_FT_Exit(4) DEFINE_FT_Exit(8) DEFINE_FT_Exit(12) DEFINE_FT_Exit(16) DEFINE_FT_Exit(20) DEFINE_FT_Exit(24) DEFINE_FT_Exit(28) DEFINE_FT_Exit(32) DEFINE_FT_Exit(36) DEFINE_FT_Exit(40) DEFINE_FT_Exit(44) DEFINE_FT_Exit(48) DEFINE_FT_Exit(52) DEFINE_FT_Exit(56) /*********************************************************************** * ThunkInitLS (KERNEL32.43) * A thunkbuffer link routine * The thunkbuf looks like: * * 00: DWORD length ? don't know exactly * 04: SEGPTR ptr ? where does it point to? * The pointer ptr is written into the first DWORD of 'thunk'. * (probably correctly implemented) * [ok probably] * RETURNS * segmented pointer to thunk? */ DWORD WINAPI ThunkInitLS( LPDWORD thunk, /* [in] win32 thunk */ LPCSTR thkbuf, /* [in] thkbuffer name in win16 dll */ DWORD len, /* [in] thkbuffer length */ LPCSTR dll16, /* [in] name of win16 dll */ LPCSTR dll32 /* [in] name of win32 dll (FIXME: not used?) */ ) { LPDWORD addr; if (!(addr = _loadthunk( dll16, thkbuf, dll32, NULL, len ))) return 0; if (!addr[1]) return 0; *thunk = addr[1]; return addr[1]; } /*********************************************************************** * Common32ThkLS (KERNEL32.45) * * This is another 32->16 thunk, independent of the QT_Thunk/FT_Thunk * style thunks. The basic difference is that the parameter conversion * is done completely on the *16-bit* side here. Thus we do not call * the 16-bit target directly, but call a common entry point instead. * This entry function then calls the target according to the target * number passed in the DI register. * * Input: EAX SEGPTR to the common 16-bit entry point * CX offset in thunk table (target number * 4) * DX error return value if execution fails (unclear???) * EDX.HI number of DWORD parameters * * (Note that we need to move the thunk table offset from CX to DI !) * * The called 16-bit stub expects its stack to look like this: * ... * (esp+40) 32-bit arguments * ... * (esp+8) 32 byte of stack space available as buffer * (esp) 8 byte return address for use with 0x66 lret * * The called 16-bit stub uses a 0x66 lret to return to 32-bit code, * and uses the EAX register to return a DWORD return value. * Thus we need to use a special assembly glue routine * (CallRegisterLongProc instead of CallRegisterShortProc). * * Finally, we return to the caller, popping the arguments off * the stack. The number of arguments to be popped is returned * in the BL register by the called 16-bit routine. * */ void WINAPI __regs_Common32ThkLS( CONTEXT *context ) { CONTEXT context16; DWORD argsize; context16 = *context; context16.SegFs = wine_get_fs(); context16.SegGs = wine_get_gs(); context16.Edi = LOWORD(context->Ecx); context16.SegCs = HIWORD(context->Eax); context16.Eip = LOWORD(context->Eax); context16.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp); argsize = HIWORD(context->Edx) * 4; /* FIXME: hack for stupid USER32 CallbackGlueLS routine */ if (context->Edx == context->Eip) argsize = 6 * 4; /* Note: the first 32 bytes we copy are just garbage from the 32-bit stack, in order to reserve * the space. It is safe to do that since the register function prefix has reserved * a lot more space than that below context->Esp. */ WOWCallback16Ex( 0, WCB16_REGS, argsize + 32, (LPBYTE)context->Esp - 32, (DWORD *)&context16 ); context->Eax = context16.Eax; /* Clean up caller's stack frame */ context->Esp += LOBYTE(context16.Ebx); } DEFINE_REGS_ENTRYPOINT( Common32ThkLS ) /*********************************************************************** * OT_32ThkLSF (KERNEL32.40) * * YET Another 32->16 thunk. The difference to Common32ThkLS is that * argument processing is done on both the 32-bit and the 16-bit side: * The 32-bit side prepares arguments, copying them onto the stack. * * When this routine is called, the first word on the stack is the * number of argument bytes prepared by the 32-bit code, and EDX * contains the 16-bit target address. * * The called 16-bit routine is another relaycode, doing further * argument processing and then calling the real 16-bit target * whose address is stored at [bp-04]. * * The call proceeds using a normal CallRegisterShortProc. * After return from the 16-bit relaycode, the arguments need * to be copied *back* to the 32-bit stack, since the 32-bit * relaycode processes output parameters. * * Note that we copy twice the number of arguments, since some of the * 16-bit relaycodes in SYSTHUNK.DLL directly access the original * arguments of the caller! * * (Note that this function seems only to be used for * OLECLI32 -> OLECLI and OLESVR32 -> OLESVR thunking.) */ void WINAPI __regs_OT_32ThkLSF( CONTEXT *context ) { CONTEXT context16; DWORD argsize; context16 = *context; context16.SegFs = wine_get_fs(); context16.SegGs = wine_get_gs(); context16.SegCs = HIWORD(context->Edx); context16.Eip = LOWORD(context->Edx); context16.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp); argsize = 2 * *(WORD *)context->Esp + 2; WOWCallback16Ex( 0, WCB16_REGS, argsize, (void *)context->Esp, (DWORD *)&context16 ); context->Eax = context16.Eax; context->Edx = context16.Edx; /* Copy modified buffers back to 32-bit stack */ memcpy( (LPBYTE)context->Esp, (LPBYTE)CURRENT_STACK16 - argsize, argsize ); context->Esp += LOWORD(context16.Esp) - ( OFFSETOF(getWOW32Reserved()) - argsize ); } DEFINE_REGS_ENTRYPOINT( OT_32ThkLSF ) /*********************************************************************** * ThunkInitLSF (KERNEL32.41) * A thunk setup routine. * Expects a pointer to a preinitialized thunkbuffer in the first argument * looking like: *| 00..03: unknown (pointer, check _41, _43, _46) *| 04: EB1E jmp +0x20 *| *| 06..23: unknown (space for replacement code, check .90) *| *| 24:>E800000000 call offset 29 *| 29:>58 pop eax ( target of call ) *| 2A: 2D25000000 sub eax,0x00000025 ( now points to offset 4 ) *| 2F: BAxxxxxxxx mov edx,xxxxxxxx *| 34: 68yyyyyyyy push KERNEL32.90 *| 39: C3 ret *| *| 3A: EB1E jmp +0x20 *| 3E ... 59: unknown (space for replacement code?) *| 5A: E8xxxxxxxx call <32bitoffset xxxxxxxx> *| 5F: 5A pop edx *| 60: 81EA25xxxxxx sub edx, 0x25xxxxxx *| 66: 52 push edx *| 67: 68xxxxxxxx push xxxxxxxx *| 6C: 68yyyyyyyy push KERNEL32.89 *| 71: C3 ret *| 72: end? * This function checks if the code is there, and replaces the yyyyyyyy entries * by the functionpointers. * The thunkbuf looks like: * *| 00: DWORD length ? don't know exactly *| 04: SEGPTR ptr ? where does it point to? * The segpointer ptr is written into the first DWORD of 'thunk'. * [ok probably] * RETURNS * unclear, pointer to win16 thkbuffer? */ LPVOID WINAPI ThunkInitLSF( LPBYTE thunk, /* [in] win32 thunk */ LPCSTR thkbuf, /* [in] thkbuffer name in win16 dll */ DWORD len, /* [in] length of thkbuffer */ LPCSTR dll16, /* [in] name of win16 dll */ LPCSTR dll32 /* [in] name of win32 dll */ ) { LPDWORD addr,addr2; /* FIXME: add checks for valid code ... */ /* write pointers to kernel32.89 and kernel32.90 (+ordinal base of 1) */ *(void **)(thunk+0x35) = QT_ThunkPrime; *(void **)(thunk+0x6D) = FT_PrologPrime; if (!(addr = _loadthunk( dll16, thkbuf, dll32, NULL, len ))) return 0; addr2 = MapSL(addr[1]); if (HIWORD(addr2)) *(DWORD*)thunk = (DWORD)addr2; return addr2; } /*********************************************************************** * FT_PrologPrime (KERNEL32.89) * * This function is called from the relay code installed by * ThunkInitLSF. It replaces the location from where it was * called by a standard FT_Prolog call stub (which is 'primed' * by inserting the correct target table pointer). * Finally, it calls that stub. * * Input: ECX target number + flags (passed through to FT_Prolog) * (ESP) offset of location where target table pointer * is stored, relative to the start of the relay code * (ESP+4) pointer to start of relay code * (this is where the FT_Prolog call stub gets written to) * * Note: The two DWORD arguments get popped off the stack. * */ void WINAPI __regs_FT_PrologPrime( CONTEXT *context ) { DWORD targetTableOffset; LPBYTE relayCode; /* Compensate for the fact that the Wine register relay code thought we were being called, although we were in fact jumped to */ context->Esp -= 4; /* Write FT_Prolog call stub */ targetTableOffset = stack32_pop(context); relayCode = (LPBYTE)stack32_pop(context); _write_ftprolog( relayCode, *(DWORD **)(relayCode+targetTableOffset) ); /* Jump to the call stub just created */ context->Eip = (DWORD)relayCode; } /*********************************************************************** * QT_ThunkPrime (KERNEL32.90) * * This function corresponds to FT_PrologPrime, but installs a * call stub for QT_Thunk instead. * * Input: (EBP-4) target number (passed through to QT_Thunk) * EDX target table pointer location offset * EAX start of relay code * */ void WINAPI __regs_QT_ThunkPrime( CONTEXT *context ) { DWORD targetTableOffset; LPBYTE relayCode; /* Compensate for the fact that the Wine register relay code thought we were being called, although we were in fact jumped to */ context->Esp -= 4; /* Write QT_Thunk call stub */ targetTableOffset = context->Edx; relayCode = (LPBYTE)context->Eax; _write_qtthunk( relayCode, *(DWORD **)(relayCode+targetTableOffset) ); /* Jump to the call stub just created */ context->Eip = (DWORD)relayCode; } /*********************************************************************** * ThunkInitSL (KERNEL32.46) * Another thunkbuf link routine. * The start of the thunkbuf looks like this: * 00: DWORD length * 04: SEGPTR address for thunkbuffer pointer * [ok probably] * * RETURNS * Nothing. */ VOID WINAPI ThunkInitSL( LPBYTE thunk, /* [in] start of thunkbuffer */ LPCSTR thkbuf, /* [in] name/ordinal of thunkbuffer in win16 dll */ DWORD len, /* [in] length of thunkbuffer */ LPCSTR dll16, /* [in] name of win16 dll containing the thkbuf */ LPCSTR dll32 /* [in] win32 dll. FIXME: strange, unused */ ) { LPDWORD addr; if (!(addr = _loadthunk( dll16, thkbuf, dll32, NULL, len ))) return; *(DWORD*)MapSL(addr[1]) = (DWORD)thunk; } /********************************************************************** * SSInit (KERNEL.700) * RETURNS * TRUE for success. */ BOOL WINAPI SSInit16(void) { return TRUE; } /********************************************************************** * SSOnBigStack (KERNEL32.87) * Check if thunking is initialized (ss selector set up etc.) * We do that differently, so just return TRUE. * [ok] * RETURNS * TRUE for success. */ BOOL WINAPI SSOnBigStack(void) { TRACE("Yes, thunking is initialized\n"); return TRUE; } /********************************************************************** * SSConfirmSmallStack (KERNEL.704) * * Abort if not on small stack. * * This must be a register routine as it has to preserve *all* registers. */ void WINAPI SSConfirmSmallStack( CONTEXT *context ) { /* We are always on the small stack while in 16-bit code ... */ } /********************************************************************** * SSCall (KERNEL32.88) * One of the real thunking functions. This one seems to be for 32<->32 * thunks. It should probably be capable of crossing processboundaries. * * And YES, I've seen nr=48 (somewhere in the Win95 32<->16 OLE coupling) * [ok] * * RETURNS * Thunked function result. */ DWORD WINAPIV SSCall( DWORD nr, /* [in] number of argument bytes */ DWORD flags, /* [in] FIXME: flags ? */ FARPROC fun, /* [in] function to call */ ... /* [in/out] arguments */ ) { DWORD i,ret; DWORD *args = ((DWORD *)&fun) + 1; if(TRACE_ON(thunk)) { DPRINTF("(%d,0x%08x,%p,[",nr,flags,fun); for (i=0;iEsp; FARPROC proc = (FARPROC)context->Eip; context->Eax = call_entry_point( proc, 10, stack + 1 ); context->Eip = stack32_pop(context); } DEFINE_REGS_ENTRYPOINT( W32S_BackTo32 ) /********************************************************************** * AllocSLCallback (KERNEL32.@) * * Allocate a 16->32 callback. * * NOTES * Win95 uses some structchains for callbacks. It allocates them * in blocks of 100 entries, size 32 bytes each, layout: * blockstart: *| 0: PTR nextblockstart *| 4: entry *first; *| 8: WORD sel ( start points to blockstart) *| A: WORD unknown * 100xentry: *| 00..17: Code *| 18: PDB *owning_process; *| 1C: PTR blockstart * * We ignore this for now. (Just a note for further developers) * FIXME: use this method, so we don't waste selectors... * * Following code is then generated by AllocSLCallback. The code is 16 bit, so * the 0x66 prefix switches from word->long registers. * *| 665A pop edx *| 6668x arg2 x pushl *| 6652 push edx *| EAx arg1 x jmpf * * returns the startaddress of this thunk. * * Note, that they look very similar to the ones allocates by THUNK_Alloc. * RETURNS * A segmented pointer to the start of the thunk */ DWORD WINAPI AllocSLCallback( DWORD finalizer, /* [in] Finalizer function */ DWORD callback /* [in] Callback function */ ) { LPBYTE x,thunk = HeapAlloc( GetProcessHeap(), 0, 32 ); WORD sel; x=thunk; *x++=0x66;*x++=0x5a; /* popl edx */ *x++=0x66;*x++=0x68;*(DWORD*)x=finalizer;x+=4; /* pushl finalizer */ *x++=0x66;*x++=0x52; /* pushl edx */ *x++=0xea;*(DWORD*)x=callback;x+=4; /* jmpf callback */ *(DWORD*)(thunk+18) = GetCurrentProcessId(); sel = SELECTOR_AllocBlock( thunk, 32, WINE_LDT_FLAGS_CODE ); return (sel<<16)|0; } /********************************************************************** * FreeSLCallback (KERNEL32.@) * Frees the specified 16->32 callback * * RETURNS * Nothing. */ void WINAPI FreeSLCallback( DWORD x /* [in] 16 bit callback (segmented pointer?) */ ) { FIXME("(0x%08x): stub\n",x); } /********************************************************************** * AllocMappedBuffer (KERNEL32.38) * * This is an undocumented KERNEL32 function that * SMapLS's a GlobalAlloc'ed buffer. * * RETURNS * EDI register: pointer to buffer * * NOTES * The buffer is preceded by 8 bytes: * ... * edi+0 buffer * edi-4 SEGPTR to buffer * edi-8 some magic Win95 needs for SUnMapLS * (we use it for the memory handle) * * The SEGPTR is used by the caller! */ void WINAPI __regs_AllocMappedBuffer( CONTEXT *context /* [in] EDI register: size of buffer to allocate */ ) { HGLOBAL handle = GlobalAlloc(0, context->Edi + 8); DWORD *buffer = GlobalLock(handle); DWORD ptr = 0; if (buffer) if (!(ptr = MapLS(buffer + 2))) { GlobalUnlock(handle); GlobalFree(handle); } if (!ptr) context->Eax = context->Edi = 0; else { buffer[0] = (DWORD)handle; buffer[1] = ptr; context->Eax = ptr; context->Edi = (DWORD)(buffer + 2); } } DEFINE_REGS_ENTRYPOINT( AllocMappedBuffer ) /********************************************************************** * FreeMappedBuffer (KERNEL32.39) * * Free a buffer allocated by AllocMappedBuffer * * RETURNS * Nothing. */ void WINAPI __regs_FreeMappedBuffer( CONTEXT *context /* [in] EDI register: pointer to buffer */ ) { if (context->Edi) { DWORD *buffer = (DWORD *)context->Edi - 2; UnMapLS(buffer[1]); GlobalUnlock((HGLOBAL)buffer[0]); GlobalFree((HGLOBAL)buffer[0]); } } DEFINE_REGS_ENTRYPOINT( FreeMappedBuffer ) /********************************************************************** * GetTEBSelectorFS (KERNEL.475) * Set the 16-bit %fs to the 32-bit %fs (current TEB selector) */ void WINAPI GetTEBSelectorFS16(void) { CURRENT_STACK16->fs = wine_get_fs(); } /********************************************************************** * IsPeFormat (KERNEL.431) * * Determine if a file is a PE format executable. * * RETURNS * TRUE, if it is. * FALSE if the file could not be opened or is not a PE file. * * NOTES * If fn is given as NULL then the function expects hf16 to be valid. */ BOOL16 WINAPI IsPeFormat16( LPSTR fn, /* [in] Filename to the executable */ HFILE16 hf16) /* [in] An open file handle */ { BOOL ret = FALSE; IMAGE_DOS_HEADER mzh; OFSTRUCT ofs; DWORD xmagic; if (fn) hf16 = OpenFile16(fn,&ofs,OF_READ); if (hf16 == HFILE_ERROR16) return FALSE; _llseek16(hf16,0,SEEK_SET); if (sizeof(mzh)!=_lread16(hf16,&mzh,sizeof(mzh))) goto done; if (mzh.e_magic!=IMAGE_DOS_SIGNATURE) goto done; _llseek16(hf16,mzh.e_lfanew,SEEK_SET); if (sizeof(DWORD)!=_lread16(hf16,&xmagic,sizeof(DWORD))) goto done; ret = (xmagic == IMAGE_NT_SIGNATURE); done: _lclose16(hf16); return ret; } /*********************************************************************** * K32Thk1632Prolog (KERNEL32.@) */ void WINAPI __regs_K32Thk1632Prolog( CONTEXT *context ) { LPBYTE code = (LPBYTE)context->Eip - 5; /* Arrrgh! SYSTHUNK.DLL just has to re-implement another method of 16->32 thunks instead of using one of the standard methods! This means that SYSTHUNK.DLL itself switches to a 32-bit stack, and does a far call to the 32-bit code segment of OLECLI32/OLESVR32. Unfortunately, our CallTo/CallFrom mechanism is therefore completely bypassed, which means it will crash the next time the 32-bit OLE code thunks down again to 16-bit (this *will* happen!). The following hack tries to recognize this situation. This is possible since the called stubs in OLECLI32/OLESVR32 all look exactly the same: 00 E8xxxxxxxx call K32Thk1632Prolog 05 FF55FC call [ebp-04] 08 E8xxxxxxxx call K32Thk1632Epilog 0D 66CB retf If we recognize this situation, we try to simulate the actions of our CallTo/CallFrom mechanism by copying the 16-bit stack to our 32-bit stack, creating a proper STACK16FRAME and updating cur_stack. */ if ( code[5] == 0xFF && code[6] == 0x55 && code[7] == 0xFC && code[13] == 0x66 && code[14] == 0xCB) { DWORD argSize = context->Ebp - context->Esp; char *stack16 = (char *)context->Esp - 4; STACK16FRAME *frame16 = (STACK16FRAME *)stack16 - 1; STACK32FRAME *frame32 = getWOW32Reserved(); char *stack32 = (char *)frame32 - argSize; WORD stackSel = SELECTOROF(frame32->frame16); DWORD stackBase = GetSelectorBase(stackSel); TRACE("before SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\n", context->Ebp, context->Esp, getWOW32Reserved()); memset(frame16, '\0', sizeof(STACK16FRAME)); frame16->frame32 = frame32; frame16->ebp = context->Ebp; memcpy(stack32, stack16, argSize); setWOW32Reserved((void *)MAKESEGPTR(stackSel, (DWORD)frame16 - stackBase)); context->Esp = (DWORD)stack32 + 4; context->Ebp = context->Esp + argSize; TRACE("after SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\n", context->Ebp, context->Esp, getWOW32Reserved()); } /* entry_point is never used again once the entry point has been called. Thus we re-use it to hold the Win16Lock count */ ReleaseThunkLock(&CURRENT_STACK16->entry_point); } DEFINE_REGS_ENTRYPOINT( K32Thk1632Prolog ) /*********************************************************************** * K32Thk1632Epilog (KERNEL32.@) */ void WINAPI __regs_K32Thk1632Epilog( CONTEXT *context ) { LPBYTE code = (LPBYTE)context->Eip - 13; RestoreThunkLock(CURRENT_STACK16->entry_point); /* We undo the SYSTHUNK hack if necessary. See K32Thk1632Prolog. */ if ( code[5] == 0xFF && code[6] == 0x55 && code[7] == 0xFC && code[13] == 0x66 && code[14] == 0xCB) { STACK16FRAME *frame16 = MapSL((SEGPTR)getWOW32Reserved()); char *stack16 = (char *)(frame16 + 1); DWORD argSize = frame16->ebp - (DWORD)stack16; char *stack32 = (char *)frame16->frame32 - argSize; DWORD nArgsPopped = context->Esp - (DWORD)stack32; TRACE("before SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\n", context->Ebp, context->Esp, getWOW32Reserved()); setWOW32Reserved(frame16->frame32); context->Esp = (DWORD)stack16 + nArgsPopped; context->Ebp = frame16->ebp; TRACE("after SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\n", context->Ebp, context->Esp, getWOW32Reserved()); } } DEFINE_REGS_ENTRYPOINT( K32Thk1632Epilog ) /********************************************************************* * PK16FNF [KERNEL32.91] * * This routine fills in the supplied 13-byte (8.3 plus terminator) * string buffer with the 8.3 filename of a recently loaded 16-bit * module. It is unknown exactly what modules trigger this * mechanism or what purpose this serves. Win98 Explorer (and * probably also Win95 with IE 4 shell integration) calls this * several times during initialization. * * FIXME: find out what this really does and make it work. */ void WINAPI PK16FNF(LPSTR strPtr) { FIXME("(%p): stub\n", strPtr); /* fill in a fake filename that'll be easy to recognize */ strcpy(strPtr, "WINESTUB.FIX"); } /*********************************************************************** * 16->32 Flat Thunk routines: */ /*********************************************************************** * ThunkConnect16 (KERNEL.651) * Connects a 32bit and a 16bit thunkbuffer. */ UINT WINAPI ThunkConnect16( LPSTR module16, /* [in] name of win16 dll */ LPSTR module32, /* [in] name of win32 dll */ HINSTANCE16 hInst16, /* [in] hInst of win16 dll */ DWORD dwReason, /* [in] initialisation argument */ struct ThunkDataCommon *TD, /* [in/out] thunkbuffer */ LPSTR thunkfun32, /* [in] win32 thunkfunction */ WORD cs /* [in] CS of win16 dll */ ) { BOOL directionSL; if (!strncmp(TD->magic, "SL01", 4)) { directionSL = TRUE; TRACE("SL01 thunk %s (%p) -> %s (%s), Reason: %d\n", module16, TD, module32, thunkfun32, dwReason); } else if (!strncmp(TD->magic, "LS01", 4)) { directionSL = FALSE; TRACE("LS01 thunk %s (%p) <- %s (%s), Reason: %d\n", module16, TD, module32, thunkfun32, dwReason); } else { ERR("Invalid magic %c%c%c%c\n", TD->magic[0], TD->magic[1], TD->magic[2], TD->magic[3]); return 0; } switch (dwReason) { case DLL_PROCESS_ATTACH: if (directionSL) { struct ThunkDataSL16 *SL16 = (struct ThunkDataSL16 *)TD; struct ThunkDataSL *SL = SL16->fpData; if (SL == NULL) { SL = HeapAlloc(GetProcessHeap(), 0, sizeof(*SL)); SL->common = SL16->common; SL->flags1 = SL16->flags1; SL->flags2 = SL16->flags2; SL->apiDB = MapSL(SL16->apiDatabase); SL->targetDB = NULL; lstrcpynA(SL->pszDll16, module16, 255); lstrcpynA(SL->pszDll32, module32, 255); /* We should create a SEGPTR to the ThunkDataSL, but since the contents are not in the original format, any access to this by 16-bit code would crash anyway. */ SL16->spData = 0; SL16->fpData = SL; } if (SL->flags2 & 0x80000000) { TRACE("Preloading 32-bit library\n"); LoadLibraryA(module32); } } else { /* nothing to do */ } break; case DLL_PROCESS_DETACH: /* FIXME: cleanup */ break; } return 1; } /*********************************************************************** * C16ThkSL (KERNEL.630) */ void WINAPI C16ThkSL(CONTEXT *context) { LPBYTE stub = MapSL(context->Eax), x = stub; WORD cs = wine_get_cs(); WORD ds = wine_get_ds(); /* We produce the following code: * * mov ax, __FLATDS * mov es, ax * movzx ecx, cx * mov edx, es:[ecx + $EDX] * push bp * push edx * push dx * push edx * call __FLATCS:__wine_call_from_16_thunk */ *x++ = 0xB8; *(WORD *)x = ds; x += sizeof(WORD); *x++ = 0x8E; *x++ = 0xC0; *x++ = 0x66; *x++ = 0x0F; *x++ = 0xB7; *x++ = 0xC9; *x++ = 0x67; *x++ = 0x66; *x++ = 0x26; *x++ = 0x8B; *x++ = 0x91; *(DWORD *)x = context->Edx; x += sizeof(DWORD); *x++ = 0x55; *x++ = 0x66; *x++ = 0x52; *x++ = 0x52; *x++ = 0x66; *x++ = 0x52; *x++ = 0x66; *x++ = 0x9A; *(void **)x = __wine_call_from_16_thunk; x += sizeof(void *); *(WORD *)x = cs; x += sizeof(WORD); /* Jump to the stub code just created */ context->Eip = LOWORD(context->Eax); context->SegCs = HIWORD(context->Eax); /* Since C16ThkSL got called by a jmp, we need to leave the original return address on the stack */ context->Esp -= 4; } /*********************************************************************** * C16ThkSL01 (KERNEL.631) */ void WINAPI C16ThkSL01(CONTEXT *context) { LPBYTE stub = MapSL(context->Eax), x = stub; if (stub) { struct ThunkDataSL16 *SL16 = MapSL(context->Edx); struct ThunkDataSL *td = SL16->fpData; DWORD procAddress = (DWORD)GetProcAddress16(GetModuleHandle16("KERNEL"), (LPCSTR)631); WORD cs = wine_get_cs(); if (!td) { ERR("ThunkConnect16 was not called!\n"); return; } TRACE("Creating stub for ThunkDataSL %p\n", td); /* We produce the following code: * * xor eax, eax * mov edx, $td * call C16ThkSL01 * push bp * push edx * push dx * push edx * call __FLATCS:__wine_call_from_16_thunk */ *x++ = 0x66; *x++ = 0x33; *x++ = 0xC0; *x++ = 0x66; *x++ = 0xBA; *(void **)x = td; x += sizeof(void *); *x++ = 0x9A; *(DWORD *)x = procAddress; x += sizeof(DWORD); *x++ = 0x55; *x++ = 0x66; *x++ = 0x52; *x++ = 0x52; *x++ = 0x66; *x++ = 0x52; *x++ = 0x66; *x++ = 0x9A; *(void **)x = __wine_call_from_16_thunk; x += sizeof(void *); *(WORD *)x = cs; x += sizeof(WORD); /* Jump to the stub code just created */ context->Eip = LOWORD(context->Eax); context->SegCs = HIWORD(context->Eax); /* Since C16ThkSL01 got called by a jmp, we need to leave the original return address on the stack */ context->Esp -= 4; } else { struct ThunkDataSL *td = (struct ThunkDataSL *)context->Edx; DWORD targetNr = LOWORD(context->Ecx) / 4; struct SLTargetDB *tdb; TRACE("Process %08x calling target %d of ThunkDataSL %p\n", GetCurrentProcessId(), targetNr, td); for (tdb = td->targetDB; tdb; tdb = tdb->next) if (tdb->process == GetCurrentProcessId()) break; if (!tdb) { TRACE("Loading 32-bit library %s\n", td->pszDll32); LoadLibraryA(td->pszDll32); for (tdb = td->targetDB; tdb; tdb = tdb->next) if (tdb->process == GetCurrentProcessId()) break; } if (tdb) { context->Edx = tdb->targetTable[targetNr]; TRACE("Call target is %08x\n", context->Edx); } else { WORD *stack = MapSL( MAKESEGPTR(context->SegSs, LOWORD(context->Esp)) ); context->Edx = (context->Edx & ~0xffff) | HIWORD(td->apiDB[targetNr].errorReturnValue); context->Eax = (context->Eax & ~0xffff) | LOWORD(td->apiDB[targetNr].errorReturnValue); context->Eip = stack[2]; context->SegCs = stack[3]; context->Esp += td->apiDB[targetNr].nrArgBytes + 4; ERR("Process %08x did not ThunkConnect32 %s to %s\n", GetCurrentProcessId(), td->pszDll32, td->pszDll16); } } } /*********************************************************************** * 16<->32 Thunklet/Callback API: */ #include "pshpack1.h" typedef struct _THUNKLET { BYTE prefix_target; BYTE pushl_target; DWORD target; BYTE prefix_relay; BYTE pushl_relay; DWORD relay; BYTE jmp_glue; DWORD glue; BYTE type; HINSTANCE16 owner; struct _THUNKLET *next; } THUNKLET; #include "poppack.h" #define THUNKLET_TYPE_LS 1 #define THUNKLET_TYPE_SL 2 static HANDLE ThunkletHeap = 0; static WORD ThunkletCodeSel; static THUNKLET *ThunkletAnchor = NULL; static FARPROC ThunkletSysthunkGlueLS = 0; static SEGPTR ThunkletSysthunkGlueSL = 0; static FARPROC ThunkletCallbackGlueLS = 0; static SEGPTR ThunkletCallbackGlueSL = 0; /* map a thunk allocated on ThunkletHeap to a 16-bit pointer */ static inline SEGPTR get_segptr( void *thunk ) { if (!thunk) return 0; return MAKESEGPTR( ThunkletCodeSel, (char *)thunk - (char *)ThunkletHeap ); } /*********************************************************************** * THUNK_Init */ static BOOL THUNK_Init(void) { LPBYTE thunk; ThunkletHeap = HeapCreate( HEAP_CREATE_ENABLE_EXECUTE, 0x10000, 0x10000 ); if (!ThunkletHeap) return FALSE; ThunkletCodeSel = SELECTOR_AllocBlock( ThunkletHeap, 0x10000, WINE_LDT_FLAGS_CODE ); thunk = HeapAlloc( ThunkletHeap, 0, 5 ); if (!thunk) return FALSE; ThunkletSysthunkGlueLS = (FARPROC)thunk; *thunk++ = 0x58; /* popl eax */ *thunk++ = 0xC3; /* ret */ ThunkletSysthunkGlueSL = get_segptr( thunk ); *thunk++ = 0x66; *thunk++ = 0x58; /* popl eax */ *thunk++ = 0xCB; /* lret */ return TRUE; } /*********************************************************************** * SetThunkletCallbackGlue (KERNEL.560) */ void WINAPI SetThunkletCallbackGlue16( FARPROC glueLS, SEGPTR glueSL ) { ThunkletCallbackGlueLS = glueLS; ThunkletCallbackGlueSL = glueSL; } /*********************************************************************** * THUNK_FindThunklet */ static THUNKLET *THUNK_FindThunklet( DWORD target, DWORD relay, DWORD glue, BYTE type ) { THUNKLET *thunk; for (thunk = ThunkletAnchor; thunk; thunk = thunk->next) if ( thunk->type == type && thunk->target == target && thunk->relay == relay && ( type == THUNKLET_TYPE_LS ? ( thunk->glue == glue - (DWORD)&thunk->type ) : ( thunk->glue == glue ) ) ) return thunk; return NULL; } /*********************************************************************** * THUNK_AllocLSThunklet */ static FARPROC THUNK_AllocLSThunklet( SEGPTR target, DWORD relay, FARPROC glue, HTASK16 owner ) { THUNKLET *thunk = THUNK_FindThunklet( (DWORD)target, relay, (DWORD)glue, THUNKLET_TYPE_LS ); if (!thunk) { TDB *pTask = GlobalLock16( owner ); if (!ThunkletHeap) THUNK_Init(); if ( !(thunk = HeapAlloc( ThunkletHeap, 0, sizeof(THUNKLET) )) ) return 0; thunk->prefix_target = thunk->prefix_relay = 0x90; thunk->pushl_target = thunk->pushl_relay = 0x68; thunk->jmp_glue = 0xE9; thunk->target = (DWORD)target; thunk->relay = relay; thunk->glue = (DWORD)glue - (DWORD)&thunk->type; thunk->type = THUNKLET_TYPE_LS; thunk->owner = pTask? pTask->hInstance : 0; thunk->next = ThunkletAnchor; ThunkletAnchor = thunk; } return (FARPROC)thunk; } /*********************************************************************** * THUNK_AllocSLThunklet */ static SEGPTR THUNK_AllocSLThunklet( FARPROC target, DWORD relay, SEGPTR glue, HTASK16 owner ) { THUNKLET *thunk = THUNK_FindThunklet( (DWORD)target, relay, (DWORD)glue, THUNKLET_TYPE_SL ); if (!thunk) { TDB *pTask = GlobalLock16( owner ); if (!ThunkletHeap) THUNK_Init(); if ( !(thunk = HeapAlloc( ThunkletHeap, 0, sizeof(THUNKLET) )) ) return 0; thunk->prefix_target = thunk->prefix_relay = 0x66; thunk->pushl_target = thunk->pushl_relay = 0x68; thunk->jmp_glue = 0xEA; thunk->target = (DWORD)target; thunk->relay = relay; thunk->glue = (DWORD)glue; thunk->type = THUNKLET_TYPE_SL; thunk->owner = pTask? pTask->hInstance : 0; thunk->next = ThunkletAnchor; ThunkletAnchor = thunk; } return get_segptr( thunk ); } /********************************************************************** * IsLSThunklet */ static BOOL16 IsLSThunklet( THUNKLET *thunk ) { return thunk->prefix_target == 0x90 && thunk->pushl_target == 0x68 && thunk->prefix_relay == 0x90 && thunk->pushl_relay == 0x68 && thunk->jmp_glue == 0xE9 && thunk->type == THUNKLET_TYPE_LS; } /********************************************************************** * IsSLThunklet (KERNEL.612) */ BOOL16 WINAPI IsSLThunklet16( THUNKLET *thunk ) { return thunk->prefix_target == 0x66 && thunk->pushl_target == 0x68 && thunk->prefix_relay == 0x66 && thunk->pushl_relay == 0x68 && thunk->jmp_glue == 0xEA && thunk->type == THUNKLET_TYPE_SL; } /*********************************************************************** * AllocLSThunkletSysthunk (KERNEL.607) */ FARPROC WINAPI AllocLSThunkletSysthunk16( SEGPTR target, FARPROC relay, DWORD dummy ) { if (!ThunkletSysthunkGlueLS) THUNK_Init(); return THUNK_AllocLSThunklet( (SEGPTR)relay, (DWORD)target, ThunkletSysthunkGlueLS, GetCurrentTask() ); } /*********************************************************************** * AllocSLThunkletSysthunk (KERNEL.608) */ SEGPTR WINAPI AllocSLThunkletSysthunk16( FARPROC target, SEGPTR relay, DWORD dummy ) { if (!ThunkletSysthunkGlueSL) THUNK_Init(); return THUNK_AllocSLThunklet( (FARPROC)relay, (DWORD)target, ThunkletSysthunkGlueSL, GetCurrentTask() ); } /*********************************************************************** * AllocLSThunkletCallbackEx (KERNEL.567) */ FARPROC WINAPI AllocLSThunkletCallbackEx16( SEGPTR target, DWORD relay, HTASK16 task ) { THUNKLET *thunk = MapSL( target ); if ( !thunk ) return NULL; if ( IsSLThunklet16( thunk ) && thunk->relay == relay && thunk->glue == (DWORD)ThunkletCallbackGlueSL ) return (FARPROC)thunk->target; return THUNK_AllocLSThunklet( target, relay, ThunkletCallbackGlueLS, task ); } /*********************************************************************** * AllocSLThunkletCallbackEx (KERNEL.568) */ SEGPTR WINAPI AllocSLThunkletCallbackEx16( FARPROC target, DWORD relay, HTASK16 task ) { THUNKLET *thunk = (THUNKLET *)target; if ( !thunk ) return 0; if ( IsLSThunklet( thunk ) && thunk->relay == relay && thunk->glue == (DWORD)ThunkletCallbackGlueLS - (DWORD)&thunk->type ) return (SEGPTR)thunk->target; return THUNK_AllocSLThunklet( target, relay, ThunkletCallbackGlueSL, task ); } /*********************************************************************** * AllocLSThunkletCallback (KERNEL.561) * AllocLSThunkletCallback_dup (KERNEL.606) */ FARPROC WINAPI AllocLSThunkletCallback16( SEGPTR target, DWORD relay ) { return AllocLSThunkletCallbackEx16( target, relay, GetCurrentTask() ); } /*********************************************************************** * AllocSLThunkletCallback (KERNEL.562) * AllocSLThunkletCallback_dup (KERNEL.605) */ SEGPTR WINAPI AllocSLThunkletCallback16( FARPROC target, DWORD relay ) { return AllocSLThunkletCallbackEx16( target, relay, GetCurrentTask() ); } /*********************************************************************** * FindLSThunkletCallback (KERNEL.563) * FindLSThunkletCallback_dup (KERNEL.609) */ FARPROC WINAPI FindLSThunkletCallback( SEGPTR target, DWORD relay ) { THUNKLET *thunk = MapSL( target ); if ( thunk && IsSLThunklet16( thunk ) && thunk->relay == relay && thunk->glue == (DWORD)ThunkletCallbackGlueSL ) return (FARPROC)thunk->target; thunk = THUNK_FindThunklet( (DWORD)target, relay, (DWORD)ThunkletCallbackGlueLS, THUNKLET_TYPE_LS ); return (FARPROC)thunk; } /*********************************************************************** * FindSLThunkletCallback (KERNEL.564) * FindSLThunkletCallback_dup (KERNEL.610) */ SEGPTR WINAPI FindSLThunkletCallback( FARPROC target, DWORD relay ) { THUNKLET *thunk = (THUNKLET *)target; if ( thunk && IsLSThunklet( thunk ) && thunk->relay == relay && thunk->glue == (DWORD)ThunkletCallbackGlueLS - (DWORD)&thunk->type ) return (SEGPTR)thunk->target; thunk = THUNK_FindThunklet( (DWORD)target, relay, (DWORD)ThunkletCallbackGlueSL, THUNKLET_TYPE_SL ); return get_segptr( thunk ); } /*********************************************************************** * FreeThunklet (KERNEL.611) */ BOOL16 WINAPI FreeThunklet16( DWORD unused1, DWORD unused2 ) { return FALSE; } /*********************************************************************** * Callback Client API */ #define N_CBC_FIXED 20 #define N_CBC_VARIABLE 10 #define N_CBC_TOTAL (N_CBC_FIXED + N_CBC_VARIABLE) static SEGPTR CBClientRelay16[ N_CBC_TOTAL ]; static FARPROC *CBClientRelay32[ N_CBC_TOTAL ]; /*********************************************************************** * RegisterCBClient (KERNEL.619) */ INT16 WINAPI RegisterCBClient16( INT16 wCBCId, SEGPTR relay16, FARPROC *relay32 ) { /* Search for free Callback ID */ if ( wCBCId == -1 ) for ( wCBCId = N_CBC_FIXED; wCBCId < N_CBC_TOTAL; wCBCId++ ) if ( !CBClientRelay16[ wCBCId ] ) break; /* Register Callback ID */ if ( wCBCId > 0 && wCBCId < N_CBC_TOTAL ) { CBClientRelay16[ wCBCId ] = relay16; CBClientRelay32[ wCBCId ] = relay32; } else wCBCId = 0; return wCBCId; } /*********************************************************************** * UnRegisterCBClient (KERNEL.622) */ INT16 WINAPI UnRegisterCBClient16( INT16 wCBCId, SEGPTR relay16, FARPROC *relay32 ) { if ( wCBCId >= N_CBC_FIXED && wCBCId < N_CBC_TOTAL && CBClientRelay16[ wCBCId ] == relay16 && CBClientRelay32[ wCBCId ] == relay32 ) { CBClientRelay16[ wCBCId ] = 0; CBClientRelay32[ wCBCId ] = 0; } else wCBCId = 0; return wCBCId; } /*********************************************************************** * InitCBClient (KERNEL.623) */ void WINAPI InitCBClient16( FARPROC glueLS ) { HMODULE16 kernel = GetModuleHandle16( "KERNEL" ); SEGPTR glueSL = (SEGPTR)GetProcAddress16( kernel, (LPCSTR)604 ); SetThunkletCallbackGlue16( glueLS, glueSL ); } /*********************************************************************** * CBClientGlueSL (KERNEL.604) */ void WINAPI CBClientGlueSL( CONTEXT *context ) { /* Create stack frame */ SEGPTR stackSeg = stack16_push( 12 ); LPWORD stackLin = MapSL( stackSeg ); SEGPTR glue, *glueTab; stackLin[3] = (WORD)context->Ebp; stackLin[2] = (WORD)context->Esi; stackLin[1] = (WORD)context->Edi; stackLin[0] = (WORD)context->SegDs; context->Ebp = OFFSETOF( stackSeg ) + 6; context->Esp = OFFSETOF( stackSeg ) - 4; context->SegGs = 0; /* Jump to 16-bit relay code */ glueTab = MapSL( CBClientRelay16[ stackLin[5] ] ); glue = glueTab[ stackLin[4] ]; context->SegCs = SELECTOROF( glue ); context->Eip = OFFSETOF ( glue ); } /*********************************************************************** * CBClientThunkSL (KERNEL.620) */ extern DWORD CALL32_CBClient( FARPROC proc, LPWORD args, WORD *stackLin, DWORD *esi ); void WINAPI CBClientThunkSL( CONTEXT *context ) { /* Call 32-bit relay code */ LPWORD args = MapSL( MAKESEGPTR( context->SegSs, LOWORD(context->Ebp) ) ); FARPROC proc = CBClientRelay32[ args[2] ][ args[1] ]; /* fill temporary area for the asm code (see comments in winebuild) */ SEGPTR stack = stack16_push( 12 ); LPWORD stackLin = MapSL(stack); /* stackLin[0] and stackLin[1] reserved for the 32-bit stack ptr */ stackLin[2] = wine_get_ss(); stackLin[3] = 0; stackLin[4] = OFFSETOF(stack) + 12; stackLin[5] = SELECTOROF(stack); stackLin[6] = OFFSETOF(CALL32_CBClientEx_RetAddr); /* overwrite return address */ stackLin[7] = SELECTOROF(CALL32_CBClientEx_RetAddr); context->Eax = CALL32_CBClient( proc, args, stackLin + 4, &context->Esi ); stack16_pop( 12 ); } /*********************************************************************** * CBClientThunkSLEx (KERNEL.621) */ extern DWORD CALL32_CBClientEx( FARPROC proc, LPWORD args, WORD *stackLin, DWORD *esi, INT *nArgs ); void WINAPI CBClientThunkSLEx( CONTEXT *context ) { /* Call 32-bit relay code */ LPWORD args = MapSL( MAKESEGPTR( context->SegSs, LOWORD(context->Ebp) ) ); FARPROC proc = CBClientRelay32[ args[2] ][ args[1] ]; INT nArgs; LPWORD stackLin; /* fill temporary area for the asm code (see comments in winebuild) */ SEGPTR stack = stack16_push( 24 ); stackLin = MapSL(stack); stackLin[0] = OFFSETOF(stack) + 4; stackLin[1] = SELECTOROF(stack); stackLin[2] = wine_get_ds(); stackLin[5] = OFFSETOF(stack) + 24; /* stackLin[6] and stackLin[7] reserved for the 32-bit stack ptr */ stackLin[8] = wine_get_ss(); stackLin[9] = 0; stackLin[10] = OFFSETOF(CALL32_CBClientEx_RetAddr); stackLin[11] = SELECTOROF(CALL32_CBClientEx_RetAddr); context->Eax = CALL32_CBClientEx( proc, args, stackLin, &context->Esi, &nArgs ); stack16_pop( 24 ); /* Restore registers saved by CBClientGlueSL */ stackLin = (LPWORD)((LPBYTE)CURRENT_STACK16 + sizeof(STACK16FRAME) - 4); context->Ebp = (context->Ebp & ~0xffff) | stackLin[3]; context->Esi = (context->Esi & ~0xffff) | stackLin[2]; context->Edi = (context->Edi & ~0xffff) | stackLin[1]; context->SegDs = stackLin[0]; context->Esp += 16+nArgs; /* Return to caller of CBClient thunklet */ context->SegCs = stackLin[9]; context->Eip = stackLin[8]; } /*********************************************************************** * Get16DLLAddress (KERNEL32.@) * * This function is used by a Win32s DLL if it wants to call a Win16 function. * A 16:16 segmented pointer to the function is returned. * Written without any docu. */ SEGPTR WINAPI Get16DLLAddress(HMODULE16 handle, LPSTR func_name) { static WORD code_sel32; FARPROC16 proc_16; LPBYTE thunk; if (!code_sel32) { if (!ThunkletHeap) THUNK_Init(); code_sel32 = SELECTOR_AllocBlock( ThunkletHeap, 0x10000, WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT ); if (!code_sel32) return 0; } if (!(thunk = HeapAlloc( ThunkletHeap, 0, 32 ))) return 0; if (!handle) handle = GetModuleHandle16("WIN32S16"); proc_16 = GetProcAddress16(handle, func_name); /* movl proc_16, $edx */ *thunk++ = 0xba; *(FARPROC16 *)thunk = proc_16; thunk += sizeof(FARPROC16); /* jmpl QT_Thunk */ *thunk++ = 0xea; *(void **)thunk = QT_Thunk; thunk += sizeof(FARPROC16); *(WORD *)thunk = wine_get_cs(); return MAKESEGPTR( code_sel32, (char *)thunk - (char *)ThunkletHeap ); } /*********************************************************************** * GetWin16DOSEnv (KERNEL32.34) * Returns some internal value.... probably the default environment database? */ DWORD WINAPI GetWin16DOSEnv(void) { FIXME("stub, returning 0\n"); return 0; } /********************************************************************** * GetPK16SysVar (KERNEL32.92) */ LPVOID WINAPI GetPK16SysVar(void) { static BYTE PK16SysVar[128]; FIXME("()\n"); return PK16SysVar; } /********************************************************************** * CommonUnimpStub (KERNEL32.17) */ int WINAPI DECLSPEC_HIDDEN __regs_CommonUnimpStub( const char *name, int type ) { FIXME("generic stub %s\n", debugstr_a(name)); switch (type) { case 15: return -1; case 14: return ERROR_CALL_NOT_IMPLEMENTED; case 13: return ERROR_NOT_SUPPORTED; case 1: return 1; default: return 0; } } __ASM_STDCALL_FUNC( CommonUnimpStub, 0, "pushl %ecx\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") "shrl $4,%ecx\n\t" "andl $0xf,%ecx\n\t" "pushl %ecx\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") "pushl %eax\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") "call " __ASM_NAME("__regs_CommonUnimpStub") __ASM_STDCALL(8) "\n\t" __ASM_CFI(".cfi_adjust_cfa_offset -8\n\t") "popl %ecx\n\t" __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t") "andl $0xf,%ecx\n\t" "movl (%esp),%edx\n\t" "leal (%esp,%ecx,4),%esp\n\t" "movl %edx,(%esp)\n\t" "ret" ) /********************************************************************** * HouseCleanLogicallyDeadHandles (KERNEL32.33) */ void WINAPI HouseCleanLogicallyDeadHandles(void) { /* Whatever this is supposed to do, our handles probably don't need it :-) */ } /********************************************************************** * @ (KERNEL32.100) */ BOOL WINAPI _KERNEL32_100(HANDLE threadid,DWORD exitcode,DWORD x) { FIXME("(%p,%d,0x%08x): stub\n",threadid,exitcode,x); return TRUE; } /********************************************************************** * @ (KERNEL32.99) * * Checks whether the clock has to be switched from daylight * savings time to standard time or vice versa. * */ DWORD WINAPI _KERNEL32_99(DWORD x) { FIXME("(0x%08x): stub\n",x); return 1; } /*********************************************************************** * Helper for k32 family functions */ static void *user32_proc_address(const char *proc_name) { static HMODULE hUser32; if(!hUser32) hUser32 = LoadLibraryA("user32.dll"); return GetProcAddress(hUser32, proc_name); } /*********************************************************************** * k32CharToOemBuffA (KERNEL32.11) */ BOOL WINAPI k32CharToOemBuffA(LPCSTR s, LPSTR d, DWORD len) { WCHAR *bufW; if ((bufW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) { MultiByteToWideChar( CP_ACP, 0, s, len, bufW, len ); WideCharToMultiByte( CP_OEMCP, 0, bufW, len, d, len, NULL, NULL ); HeapFree( GetProcessHeap(), 0, bufW ); } return TRUE; } /*********************************************************************** * k32CharToOemA (KERNEL32.10) */ BOOL WINAPI k32CharToOemA(LPCSTR s, LPSTR d) { if (!s || !d) return TRUE; return k32CharToOemBuffA( s, d, strlen(s) + 1 ); } /*********************************************************************** * k32OemToCharBuffA (KERNEL32.13) */ BOOL WINAPI k32OemToCharBuffA(LPCSTR s, LPSTR d, DWORD len) { WCHAR *bufW; if ((bufW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) { MultiByteToWideChar( CP_OEMCP, 0, s, len, bufW, len ); WideCharToMultiByte( CP_ACP, 0, bufW, len, d, len, NULL, NULL ); HeapFree( GetProcessHeap(), 0, bufW ); } return TRUE; } /*********************************************************************** * k32OemToCharA (KERNEL32.12) */ BOOL WINAPI k32OemToCharA(LPCSTR s, LPSTR d) { return k32OemToCharBuffA( s, d, strlen(s) + 1 ); } /********************************************************************** * k32LoadStringA (KERNEL32.14) */ INT WINAPI k32LoadStringA(HINSTANCE instance, UINT resource_id, LPSTR buffer, INT buflen) { static INT (WINAPI *pLoadStringA)(HINSTANCE, UINT, LPSTR, INT); if(!pLoadStringA) pLoadStringA = user32_proc_address("LoadStringA"); return pLoadStringA(instance, resource_id, buffer, buflen); } /*********************************************************************** * k32wvsprintfA (KERNEL32.16) */ INT WINAPI k32wvsprintfA(LPSTR buffer, LPCSTR spec, __ms_va_list args) { static INT (WINAPI *pwvsprintfA)(LPSTR, LPCSTR, __ms_va_list); if(!pwvsprintfA) pwvsprintfA = user32_proc_address("wvsprintfA"); return (*pwvsprintfA)(buffer, spec, args); } /*********************************************************************** * k32wsprintfA (KERNEL32.15) */ INT WINAPIV k32wsprintfA(LPSTR buffer, LPCSTR spec, ...) { __ms_va_list args; INT res; __ms_va_start(args, spec); res = k32wvsprintfA(buffer, spec, args); __ms_va_end(args); return res; } /********************************************************************** * Catch (KERNEL.55) * * Real prototype is: * INT16 WINAPI Catch( LPCATCHBUF lpbuf ); */ void WINAPI Catch16( SEGPTR lpbuf16, CONTEXT *context ) { /* Note: we don't save the current ss, as the catch buffer is */ /* only 9 words long. Hopefully no one will have the silly */ /* idea to change the current stack before calling Throw()... */ /* Windows uses: * lpbuf[0] = ip * lpbuf[1] = cs * lpbuf[2] = sp * lpbuf[3] = bp * lpbuf[4] = si * lpbuf[5] = di * lpbuf[6] = ds * lpbuf[7] = unused * lpbuf[8] = ss */ LPCATCHBUF lpbuf = MapSL(lpbuf16); lpbuf[0] = LOWORD(context->Eip); lpbuf[1] = context->SegCs; /* Windows pushes 4 more words before saving sp */ lpbuf[2] = LOWORD(context->Esp) - 4 * sizeof(WORD); lpbuf[3] = LOWORD(context->Ebp); lpbuf[4] = LOWORD(context->Esi); lpbuf[5] = LOWORD(context->Edi); lpbuf[6] = context->SegDs; lpbuf[7] = 0; lpbuf[8] = context->SegSs; context->Eax &= ~0xffff; /* Return 0 */ context->Ebx = OFFSETOF(lpbuf16); context->SegEs = SELECTOROF(lpbuf16); } #include "wine/exception.h" #include LONG WINAPI Throw16VectoredExceptionHandler(struct _EXCEPTION_POINTERS *ExceptionInfo) { if (ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_INVALID_DISPOSITION) return EXCEPTION_CONTINUE_EXECUTION; return EXCEPTION_CONTINUE_SEARCH; } LONG WINAPI Throw16ExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo) { /* KiUserCallbackExceptionHandler throws STATUS_FATAL_USER_CALLBACK_EXCEPTION*/ if (ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_UNWIND) return EXCEPTION_CONTINUE_EXECUTION; return EXCEPTION_CONTINUE_SEARCH; } /********************************************************************** * Throw (KERNEL.56) * * Real prototype is: * INT16 WINAPI Throw( LPCATCHBUF lpbuf, INT16 retval ); */ void WINAPI Throw16( LPCATCHBUF lpbuf, INT16 retval, CONTEXT *context ) { STACK16FRAME *pFrame; STACK16FRAME *pFramePrev = NULL; STACK32FRAME *frame32; LPVOID v; LPTOP_LEVEL_EXCEPTION_FILTER old_filter; context->Eax = (context->Eax & ~0xffff) | (WORD)retval; /* Find the frame32 corresponding to the frame16 we are jumping to */ pFrame = CURRENT_STACK16; frame32 = pFrame->frame32; while (frame32 && frame32->frame16) { if (SELECTOROF(frame32->frame16) != SELECTOROF(getWOW32Reserved())) { if (0) { FIXME("Switching stack segment with Throw() not supported; expect crash now\n"); } break; } if (OFFSETOF(frame32->frame16) < OFFSETOF(getWOW32Reserved())) break; /* Something strange is going on */ if (OFFSETOF(frame32->frame16) > lpbuf[2]) { /* We found the right frame */ pFrame->frame32 = frame32; break; } frame32 = (pFramePrev = (STACK16FRAME *)MapSL(frame32->frame16))->frame32; } if (pFramePrev) memmove(pFramePrev, pFrame, sizeof(STACK16FRAME)); context->Eip = lpbuf[0]; context->SegCs = lpbuf[1]; context->Esp = lpbuf[2] + 4 * sizeof(WORD) - sizeof(WORD) - sizeof(WORD) /*extra arg*/; context->Ebp = lpbuf[3]; context->Esi = lpbuf[4]; context->Edi = lpbuf[5]; context->SegDs = lpbuf[6]; context->Esp += 0x0c; if (0) { if (lpbuf[8] != context->SegSs) ERR("Switching stack segment with Throw() not supported; expect crash now\n"); } context->SegSs = lpbuf[8]; old_filter = SetUnhandledExceptionFilter(Throw16ExceptionFilter); v = AddVectoredExceptionHandler(0, Throw16VectoredExceptionHandler); #if defined(_MSC_VER) __asm { push edi push ebx push esi push 0 push 0 push 0 mov eax, dword ptr[pFrame] mov ecx, dword ptr[eax] add ecx, 8 push ecx call RtlUnwind pop esi pop ebx pop edi } #else RtlUnwind(&pFrame->frame32->frame, NULL, NULL, 0); #endif RemoveVectoredExceptionHandler(v); SetUnhandledExceptionFilter(old_filter); /* long jump to (relay_call_from_16) */ #if defined(_MSC_VER) __asm { mov eax, fs:[0] mov eax, [eax] mov fs:[0], eax mov ecx, dword ptr context mov eax, frame32 mov edi, dword ptr [eax + 0x14] mov ebp, dword ptr [eax + 0x20] mov esi, dword ptr [eax + 0x18] mov ebx, dword ptr [eax + 0x24] mov esp, dword ptr [eax + 0x28] jmp ebx } #endif } /* * 16-bit WOW routines (in KERNEL) */ /********************************************************************** * GetVDMPointer32W (KERNEL.516) */ DWORD WINAPI GetVDMPointer32W16( SEGPTR vp, UINT16 fMode ) { //GlobalPageLock16(GlobalHandle16(SELECTOROF(vp))); // FIXME: needed for win95 compat? return (DWORD)K32WOWGetVDMPointer( vp, 0, (DWORD)fMode ); } /*********************************************************************** * LoadLibraryEx32W (KERNEL.513) */ DWORD WINAPI LoadLibraryEx32W16( LPCSTR lpszLibFile, DWORD hFile, DWORD dwFlags ) { HMODULE hModule; DWORD mutex_count; ReleaseThunkLock( &mutex_count ); hModule = LoadLibraryExA( lpszLibFile, (HANDLE)hFile, dwFlags ); RestoreThunkLock( mutex_count ); return (DWORD)hModule; } // workaround for dsinterface.dll static DWORD DSI_InitializeDirectSound = 0; static DWORD DSI_InitializeSound = 0; // workaround for user32.dll static DWORD USER32_SetScrollInfo = 0; // workaround for wsock32.dll static DWORD WSOCK32_WSAAsyncSelect = 0; /*********************************************************************** * GetProcAddress32W (KERNEL.515) */ DWORD WINAPI GetProcAddress32W16( DWORD hModule, LPCSTR lpszProc ) { DWORD ret = (DWORD)GetProcAddress( (HMODULE)hModule, lpszProc ); if (!strcmp(lpszProc, "InitializeDirectSound")) DSI_InitializeDirectSound = ret; else if(!strcmp(lpszProc, "InitializeSound")) DSI_InitializeSound = ret; else if(!strcmp(lpszProc, "SetScrollInfo")) USER32_SetScrollInfo = ret; else if(!strcmp(lpszProc, "WSAAsyncSelect")) WSOCK32_WSAAsyncSelect = ret; return ret; } /*********************************************************************** * FreeLibrary32W (KERNEL.514) */ DWORD WINAPI FreeLibrary32W16( DWORD hLibModule ) { BOOL retv; DWORD mutex_count; ReleaseThunkLock( &mutex_count ); retv = FreeLibrary( (HMODULE)hLibModule ); RestoreThunkLock( mutex_count ); return (DWORD)retv; } #define CPEX_DEST_STDCALL 0x00000000 #define CPEX_DEST_CDECL 0x80000000 /********************************************************************** * WOW_CallProc32W */ static DWORD WOW_CallProc32W16( FARPROC proc32, DWORD nrofargs, DWORD *args ) { DWORD ret; DWORD mutex_count; if ((proc32 == DSI_InitializeDirectSound) || (proc32 == DSI_InitializeSound) || (proc32 == USER32_SetScrollInfo)) args[0] = HWND_32(args[0]); else if (proc32 == WSOCK32_WSAAsyncSelect) args[1] = HWND_32(args[1]); ReleaseThunkLock( &mutex_count ); if (!proc32) ret = 0; else ret = call_entry_point( proc32, nrofargs & ~CPEX_DEST_CDECL, args ); RestoreThunkLock( mutex_count ); TRACE("returns %08x\n",ret); return ret; } /********************************************************************** * CallProc32W (KERNEL.517) */ DWORD WINAPIV CallProc32W16( DWORD nrofargs, DWORD argconvmask, FARPROC proc32, VA_LIST16 valist ) { DWORD args[32]; unsigned int i; TRACE("(%d,%d,%p args[",nrofargs,argconvmask,proc32); for (i=0;i= TIMER_stamp) ? (dwTime - TIMER_stamp) : (0xffffffff - (TIMER_stamp - dwTime)); if (pending >= TIMER_MAX_PENDING) { if (delta >= 60000) { ERR( "DOS timer has been stuck for 60 seconds...\n" ); TIMER_stamp = dwTime; } InterlockedDecrement( &TIMER_pending ); } else { DWORD i; /* Calculate the number of valid timer interrupts we can generate */ DWORD count = delta / TIMER_millis; /* Forward the timestamp with the time used */ TIMER_stamp += (count * TIMER_millis); /* Generate interrupts */ for(i=0;iTicks++; /* * If IRQ is called from protected mode, convert * context into VM86 context. Stack is invalidated so * that DPMI_CallRMProc allocates a new stack. */ if (!ISV86(&nested_context)) { nested_context.EFlags |= V86_FLAG; nested_context.SegSs = 0; } /* * Call interrupt 0x1c. */ DPMI_CallRMProc( &nested_context, NULL, 0, TRUE ); DOSVM_AcknowledgeIRQ( context ); } ================================================ FILE: krnl386/utthunk.c ================================================ /* * Win32s Universal Thunk API * * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "wine/winbase16.h" #include "windef.h" #include "winbase.h" #include "winternl.h" #include "windows/wownt32.h" #include "wine/debug.h" #include "kernel16_private.h" WINE_DEFAULT_DEBUG_CHANNEL(thunk); #include "pshpack1.h" typedef struct { BYTE popl_eax; BYTE pushl; DWORD target; BYTE pushl_eax; BYTE ljmp; DWORD utglue16; } UT16THUNK; typedef struct { BYTE popl_eax; BYTE pushl; DWORD target; BYTE pushl_eax; BYTE jmp; DWORD utglue32; } UT32THUNK; #include "poppack.h" typedef struct _UTINFO { struct _UTINFO *next; HMODULE hModule; HMODULE16 hModule16; UT16THUNK ut16; UT32THUNK ut32; } UTINFO; static UTINFO *UT_head; /* head of Universal Thunk list */ typedef DWORD (CALLBACK *UTGLUEPROC)( LPVOID lpBuff, DWORD dwUserDefined ); BOOL WINAPI UTRegister( HMODULE hModule, LPSTR lpsz16BITDLL, LPSTR lpszInitName, LPSTR lpszProcName, FARPROC *ppfn32Thunk, FARPROC pfnUT32CallBack, LPVOID lpBuff ); VOID WINAPI UTUnRegister( HMODULE hModule ); /**************************************************************************** * UTGlue16 (KERNEL.666) (KERNEL Wine-specific export) */ DWORD WINAPI UTGlue16( LPVOID lpBuff, DWORD dwUserDefined, SEGPTR *translationList, UTGLUEPROC target ) { INT i; /* Convert arguments to flat pointers */ if ( translationList ) for ( i = 0; translationList[i]; i++ ) { LPVOID flatPtr = MapSL( translationList[i] ); *(LPVOID *)flatPtr = MapSL( *(SEGPTR *)flatPtr ); } /* Call 32-bit routine */ return target( lpBuff, dwUserDefined ); } /**************************************************************************** * UTGlue32 */ static DWORD WINAPI UTGlue32( FARPROC16 target, LPVOID lpBuff, DWORD dwUserDefined, LPVOID translationList[] ) { SEGPTR segBuff, *segptrList = NULL; INT i, nList = 0; DWORD retv; WORD args[4]; /* Convert arguments to SEGPTRs */ if ( translationList ) for ( nList = 0; translationList[nList]; nList++ ) ; if ( nList ) { segptrList = HeapAlloc( GetProcessHeap(), 0, sizeof(SEGPTR)*nList ); if ( !segptrList ) { FIXME("Unable to allocate segptrList!\n" ); return 0; } for ( i = 0; i < nList; i++ ) segptrList[i] = *(SEGPTR *)translationList[i] = MapLS( *(LPVOID *)translationList[i] ); } segBuff = MapLS( lpBuff ); /* Call 16-bit routine */ args[3] = SELECTOROF(segBuff); args[2] = OFFSETOF(segBuff); args[1] = HIWORD(dwUserDefined); args[0] = LOWORD(dwUserDefined); WOWCallback16Ex( (DWORD)target, WCB16_PASCAL, sizeof(args), args, &retv ); /* Free temporary selectors */ UnMapLS( segBuff ); if ( nList ) { for ( i = 0; i < nList; i++ ) UnMapLS( segptrList[i] ); HeapFree( GetProcessHeap(), 0, segptrList ); } return retv; } /**************************************************************************** * UTAlloc */ static UTINFO *UTAlloc( HMODULE hModule, HMODULE16 hModule16, FARPROC16 target16, FARPROC target32 ) { static FARPROC16 UTGlue16_Segptr = NULL; UTINFO *ut; if ( !UTGlue16_Segptr ) { HMODULE16 hMod = GetModuleHandle16( "KERNEL" ); UTGlue16_Segptr = GetProcAddress16( hMod, "UTGlue16" ); if ( !UTGlue16_Segptr ) return NULL; } ut = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(UTINFO) ); if ( !ut ) return NULL; ut->hModule = hModule; ut->hModule16 = hModule16; ut->ut16.popl_eax = 0x58; ut->ut16.pushl = 0x68; ut->ut16.target = (DWORD)target32; ut->ut16.pushl_eax = 0x50; ut->ut16.ljmp = 0xea; ut->ut16.utglue16 = (DWORD)UTGlue16_Segptr; ut->ut32.popl_eax = 0x58; ut->ut32.pushl = 0x68; ut->ut32.target = (DWORD)target16; ut->ut32.pushl_eax = 0x50; ut->ut32.jmp = 0xe9; ut->ut32.utglue32 = (DWORD)UTGlue32 - ((DWORD)&ut->ut32.utglue32 + sizeof(DWORD)); ut->next = UT_head; UT_head = ut; return ut; } /**************************************************************************** * UTFree */ static void UTFree( UTINFO *ut ) { UTINFO **ptr; for ( ptr = &UT_head; *ptr; ptr = &(*ptr)->next ) if ( *ptr == ut ) { *ptr = ut->next; break; } HeapFree( GetProcessHeap(), 0, ut ); } /**************************************************************************** * UTFind */ static UTINFO *UTFind( HMODULE hModule ) { UTINFO *ut; for ( ut = UT_head; ut; ut =ut->next ) if ( ut->hModule == hModule ) break; return ut; } /**************************************************************************** * UTRegister (KERNEL32.@) */ BOOL WINAPI UTRegister( HMODULE hModule, LPSTR lpsz16BITDLL, LPSTR lpszInitName, LPSTR lpszProcName, FARPROC *ppfn32Thunk, FARPROC pfnUT32CallBack, LPVOID lpBuff ) { UTINFO *ut; HMODULE16 hModule16; FARPROC16 target16, init16; static BOOL done; if (!done) { LoadLibrary16( "gdi.exe" ); LoadLibrary16( "user.exe" ); done = TRUE; } /* Load 16-bit DLL and get UTProc16 entry point */ if ( (hModule16 = LoadLibrary16( lpsz16BITDLL )) <= 32 || (target16 = GetProcAddress16( hModule16, lpszProcName )) == 0 ) return FALSE; /* Allocate UTINFO struct */ RtlAcquirePebLock(); if ( (ut = UTFind( hModule )) != NULL ) ut = NULL; else ut = UTAlloc( hModule, hModule16, target16, pfnUT32CallBack ); RtlReleasePebLock(); if ( !ut ) { FreeLibrary16( hModule16 ); return FALSE; } /* Call UTInit16 if present */ if ( lpszInitName && (init16 = GetProcAddress16( hModule16, lpszInitName )) != 0 ) { SEGPTR callback = MapLS( &ut->ut16 ); SEGPTR segBuff = MapLS( lpBuff ); WORD args[4]; DWORD ret; args[3] = SELECTOROF(callback); args[2] = OFFSETOF(callback); args[1] = SELECTOROF(segBuff); args[0] = OFFSETOF(segBuff); WOWCallback16Ex( (DWORD)init16, WCB16_PASCAL, sizeof(args), args, &ret ); UnMapLS( segBuff ); UnMapLS( callback ); if (!ret) { UTUnRegister( hModule ); return FALSE; } } /* Return 32-bit thunk */ *ppfn32Thunk = (FARPROC) &ut->ut32; return TRUE; } /**************************************************************************** * UTUnRegister (KERNEL32.@) */ VOID WINAPI UTUnRegister( HMODULE hModule ) { UTINFO *ut; HMODULE16 hModule16 = 0; RtlAcquirePebLock(); ut = UTFind( hModule ); if ( ut ) { hModule16 = ut->hModule16; UTFree( ut ); } RtlReleasePebLock(); if ( hModule16 ) FreeLibrary16( hModule16 ); } /**************************************************************************** * UTInit (KERNEL.493) */ WORD WINAPI UTInit16( DWORD x1, DWORD x2, DWORD x3, DWORD x4 ) { FIXME("(%08x, %08x, %08x, %08x): stub\n", x1, x2, x3, x4 ); return 0; } ================================================ FILE: krnl386/vdd.c ================================================ #include #include "kernel16_private.h" #include "dosexe.h" #include "windows/wownt32.h" typedef struct { HMODULE hvdd; FARPROC dispatch; } vdd_module_t; static vdd_module_t vdd_modules[5] = {0}; static CONTEXT *last_context = NULL; void vdd_req(char func, CONTEXT *context) { /* * RegisterModule * DS:SI DLL * ES:DI init func name * DS:BX dispatch routine name */ if (func == 0x00) { LPCSTR dll = (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi); LPCSTR init = (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi); LPCSTR dispatch = (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Ebx); context->Eip += 4; HMODULE hVdd = LoadLibraryA(dll); if (!hVdd) { SET_CFLAG(context); SET_AX(context, GetLastError()); return; } FARPROC pfnInit = GetProcAddress(hVdd, init); FARPROC pfnDispatch = GetProcAddress(hVdd, dispatch); int i; for (i = 0; i < 5; i++) { if (!vdd_modules[i].hvdd) { vdd_modules[i].hvdd = hVdd; vdd_modules[i].dispatch = pfnDispatch; break; } } if (i == 5) { FreeLibrary(hVdd); SET_CFLAG(context); SET_AX(context, 4); return; } RESET_CFLAG(context); SET_AX(context, i); if (pfnInit) { pfnInit(); } } /* UnregisterModule */ else if (func == 0x01) { WORD handle = LOWORD(context->Eax); context->Eip += 4; if ((handle > 5) || !vdd_modules[handle].hvdd) return; // ntvdm exits here FreeLibrary(vdd_modules[handle].hvdd); vdd_modules[handle].hvdd = 0; } /* DispatchCall */ else if (func == 0x02) { WORD handle = LOWORD(context->Eax); context->Eip += 4; if ((handle > 5) || !vdd_modules[handle].hvdd) return; // ntvdm exits here last_context = context; vdd_modules[handle].dispatch(); last_context = NULL; } } #define GET_LO_BYTE_REG(reg) ((BYTE)(last_context ? last_context->reg : 0)) #define GET_HI_BYTE_REG(reg) ((BYTE)((last_context ? last_context->reg : 0) >> 8)) #define GET_WORD_REG(reg) ((WORD)(last_context ? last_context->reg : 0)) #define GET_DWORD_REG(reg) (last_context ? last_context->reg : 0) #define SET_LO_BYTE_REG(reg, val) { if (last_context) last_context->reg = ((last_context->reg & ~0xff) | val); } #define SET_HI_BYTE_REG(reg, val) { if (last_context) last_context->reg = ((last_context->reg & ~0xff00) | (val << 8)); } #define SET_WORD_REG(reg, val) { if (last_context) last_context->reg = ((last_context->reg & ~0xffff) | val); } #define SET_DWORD_REG(reg, val) { if (last_context) last_context->reg = val; } #define GET_FLAG(bit) (last_context ? (last_context->EFlags >> bit) & 1 : 0) #define SET_FLAG(bit, val) { if (last_context) last_context->EFlags = ((last_context->EFlags & ~(1 << bit)) | ((val & 1) << bit)); } BYTE WINAPI getAL() { return GET_LO_BYTE_REG(Eax); } BYTE WINAPI getAH() { return GET_HI_BYTE_REG(Eax); } WORD WINAPI getAX() { return GET_WORD_REG(Eax); } DWORD WINAPI getEAX() { return GET_DWORD_REG(Eax); } BYTE WINAPI getBL() { return GET_LO_BYTE_REG(Ebx); } BYTE WINAPI getBH() { return GET_HI_BYTE_REG(Ebx); } WORD WINAPI getBX() { return GET_WORD_REG(Ebx); } DWORD WINAPI getEBX() { return GET_DWORD_REG(Ebx); } BYTE WINAPI getCL() { return GET_LO_BYTE_REG(Ecx); } BYTE WINAPI getCH() { return GET_HI_BYTE_REG(Ecx); } WORD WINAPI getCX() { return GET_WORD_REG(Ecx); } DWORD WINAPI getECX() { return GET_DWORD_REG(Ecx); } BYTE WINAPI getDL() { return GET_LO_BYTE_REG(Edx); } BYTE WINAPI getDH() { return GET_HI_BYTE_REG(Edx); } WORD WINAPI getDX() { return GET_WORD_REG(Edx); } DWORD WINAPI getEDX() { return GET_DWORD_REG(Edx); } WORD WINAPI getSP() { return GET_WORD_REG(Esp); } DWORD WINAPI getESP() { return GET_DWORD_REG(Esp); } WORD WINAPI getBP() { return GET_WORD_REG(Ebp); } DWORD WINAPI getEBP() { return GET_DWORD_REG(Ebp); } WORD WINAPI getSI() { return GET_WORD_REG(Esi); } DWORD WINAPI getESI() { return GET_DWORD_REG(Esi); } WORD WINAPI getDI() { return GET_WORD_REG(Edi); } DWORD WINAPI getEDI() { return GET_DWORD_REG(Edi); } void WINAPI setAL(BYTE val) { SET_LO_BYTE_REG(Eax, val); } void WINAPI setAH(BYTE val) { SET_HI_BYTE_REG(Eax, val); } void WINAPI setAX(WORD val) { SET_WORD_REG(Eax, val); } void WINAPI setEAX(DWORD val) { SET_DWORD_REG(Eax, val); } void WINAPI setBL(BYTE val) { SET_LO_BYTE_REG(Ebx, val); } void WINAPI setBH(BYTE val) { SET_HI_BYTE_REG(Ebx, val); } void WINAPI setBX(WORD val) { SET_WORD_REG(Ebx, val); } void WINAPI setEBX(DWORD val) { SET_DWORD_REG(Ebx, val); } void WINAPI setCL(BYTE val) { SET_LO_BYTE_REG(Ecx, val); } void WINAPI setCH(BYTE val) { SET_HI_BYTE_REG(Ecx, val); } void WINAPI setCX(DWORD val) { SET_WORD_REG(Ecx, val); } void WINAPI setECX(BYTE val) { SET_DWORD_REG(Ecx, val); } void WINAPI setDL(BYTE val) { SET_LO_BYTE_REG(Edx, val); } void WINAPI setDH(BYTE val) { SET_HI_BYTE_REG(Edx, val); } void WINAPI setDX(WORD val) { SET_WORD_REG(Edx, val); } void WINAPI setEDX(DWORD val) { SET_DWORD_REG(Edx, val); } void WINAPI setSP(WORD val) { SET_WORD_REG(Esp, val); } void WINAPI setESP(DWORD val) { SET_DWORD_REG(Esp, val); } void WINAPI setBP(WORD val) { SET_WORD_REG(Ebp, val); } void WINAPI setEBP(DWORD val) { SET_DWORD_REG(Ebp, val); } void WINAPI setSI(WORD val) { SET_WORD_REG(Esi, val); } void WINAPI setESI(DWORD val) { SET_DWORD_REG(Esi, val); } void WINAPI setDI(WORD val) { SET_WORD_REG(Edi, val); } void WINAPI setEDI(DWORD val) { SET_DWORD_REG(Edi, val); } WORD WINAPI getDS() { return GET_WORD_REG(SegDs); } WORD WINAPI getES() { return GET_WORD_REG(SegEs); } WORD WINAPI getCS() { return GET_WORD_REG(SegCs); } WORD WINAPI getSS() { return GET_WORD_REG(SegSs); } WORD WINAPI getFS() { return GET_WORD_REG(SegFs); } WORD WINAPI getGS() { return GET_WORD_REG(SegGs); } void WINAPI setDS(WORD val) { SET_WORD_REG(SegDs, val); } void WINAPI setES(WORD val) { SET_WORD_REG(SegEs, val); } void WINAPI setCS(WORD val) { SET_WORD_REG(SegCs, val); } void WINAPI setSS(WORD val) { SET_WORD_REG(SegSs, val); } void WINAPI setFS(WORD val) { SET_WORD_REG(SegFs, val); } void WINAPI setGS(WORD val) { SET_WORD_REG(SegGs, val); } WORD WINAPI getIP() { return GET_WORD_REG(Eip); } WORD WINAPI getEIP() { return GET_DWORD_REG(Eip); } void WINAPI setIP(WORD val) { SET_WORD_REG(Eip, val); } void WINAPI setEIP(DWORD val) { SET_DWORD_REG(Eip, val); } DWORD WINAPI getCF() { return GET_FLAG(0); } DWORD WINAPI getPF() { return GET_FLAG(2); } DWORD WINAPI getAF() { return GET_FLAG(4); } DWORD WINAPI getZF() { return GET_FLAG(6); } DWORD WINAPI getSF() { return GET_FLAG(7); } DWORD WINAPI getIF() { return GET_FLAG(9); } DWORD WINAPI getDF() { return GET_FLAG(10); } DWORD WINAPI getOF() { return GET_FLAG(11); } void WINAPI setCF(DWORD val) { SET_FLAG(0, val); } void WINAPI setPF(DWORD val) { SET_FLAG(2, val); } void WINAPI setAF(DWORD val) { SET_FLAG(4, val); } void WINAPI setZF(DWORD val) { SET_FLAG(6, val); } void WINAPI setSF(DWORD val) { SET_FLAG(7, val); } void WINAPI setIF(DWORD val) { SET_FLAG(9, val); } void WINAPI setDF(DWORD val) { SET_FLAG(10, val); } void WINAPI setOF(DWORD val) { SET_FLAG(11, val); } typedef VOID (WINAPI *PFNVDD_INB)(WORD iport, PBYTE data); typedef VOID (WINAPI *PFNVDD_INW)(WORD iport, PWORD data); typedef VOID (WINAPI *PFNVDD_INSB)(WORD iport, PBYTE data, WORD count); typedef VOID (WINAPI *PFNVDD_INSW)(WORD iport, PWORD data, WORD count); typedef VOID (WINAPI *PFNVDD_OUTB)(WORD iport, BYTE data); typedef VOID (WINAPI *PFNVDD_OUTW)(WORD iport, WORD data); typedef VOID (WINAPI *PFNVDD_OUTSB)(WORD iport, PBYTE data, WORD count); typedef VOID (WINAPI *PFNVDD_OUTSW)(WORD iport, PWORD data, WORD count); typedef struct _VDD_IO_HANDLERS { PFNVDD_INB inb_handler; PFNVDD_INW inw_handler; PFNVDD_INSB insb_handler; PFNVDD_INSW insw_handler; PFNVDD_OUTB outb_handler; PFNVDD_OUTW outw_handler; PFNVDD_OUTSB outsb_handler; PFNVDD_OUTSW outsw_handler; } VDD_IO_HANDLERS, *PVDD_IO_HANDLERS; typedef struct _VDD_IO_PORTRANGE { WORD First; WORD Last; } VDD_IO_PORTRANGE, *PVDD_IO_PORTRANGE; typedef struct { HANDLE hvdd; VDD_IO_HANDLERS io_funcs; WORD io_range_len; PVDD_IO_PORTRANGE io_range; } vdd_io_t; static vdd_io_t vdd_io[5] = {0}; BOOL WINAPI VDDInstallIOHook(HANDLE hvdd, WORD cPortRange, PVDD_IO_PORTRANGE pPortRange, PVDD_IO_HANDLERS IOhandler) { int handle = (int)hvdd; int found = -1; for (int i = 0; i < 5; i++) { if (!vdd_io[i].hvdd) found = i; if (vdd_io[i].hvdd == hvdd) return FALSE; } if (found == -1 || !IOhandler->inb_handler || !IOhandler->outb_handler) return FALSE; vdd_io[found].hvdd = hvdd; memcpy(&vdd_io[found].io_funcs, IOhandler, sizeof(VDD_IO_HANDLERS)); vdd_io[found].io_range_len = cPortRange; vdd_io[found].io_range = (PVDD_IO_PORTRANGE)HeapAlloc(GetProcessHeap(), 0, cPortRange * sizeof(VDD_IO_PORTRANGE)); memcpy(vdd_io[found].io_range, pPortRange, cPortRange * sizeof(VDD_IO_PORTRANGE)); return TRUE; } void WINAPI VDDDeInstallIOHook(HANDLE hvdd, WORD cPortRange, PVDD_IO_PORTRANGE pPortRange) { int handle = (int)hvdd; int i; for (i = 0; i < 5; i++) { if (hvdd == vdd_io[i].hvdd) break; } if (i >= 5) return; vdd_io[i].hvdd = NULL; HeapFree(GetProcessHeap(), 0, vdd_io[i].io_range); return; } BOOL vdd_io_read(int port, int size, WORD *val, CONTEXT *ctx) { for (int i = 0; i < 5; i++) { if (vdd_io[i].hvdd) { for (int j = 0; j < vdd_io[i].io_range_len; j++) { if ((vdd_io[i].io_range[j].First <= port) && (vdd_io[i].io_range[j].Last >= port)) { last_context = ctx; switch (size) { case 2: if (vdd_io[i].io_funcs.inw_handler) vdd_io[i].io_funcs.inw_handler(port, val); else { vdd_io[i].io_funcs.inb_handler(port, (BYTE *)val); vdd_io[i].io_funcs.inb_handler(port + 1, ((BYTE *)val) + 1); } case 1: vdd_io[i].io_funcs.inb_handler(port, (BYTE *)val); } last_context = NULL; return TRUE; } } } } return FALSE; } BOOL vdd_io_write(int port, int size, WORD val, CONTEXT *ctx) { for (int i = 0; i < 5; i++) { if (vdd_io[i].hvdd) { for (int j = 0; j < vdd_io[i].io_range_len; j++) { if ((vdd_io[i].io_range[j].First <= port) && (vdd_io[i].io_range[j].Last >= port)) { last_context = ctx; switch (size) { case 2: if (vdd_io[i].io_funcs.outw_handler) vdd_io[i].io_funcs.outw_handler(port, val); else { vdd_io[i].io_funcs.outb_handler(port, val); vdd_io[i].io_funcs.outb_handler(port + 1, val >> 8); } case 1: vdd_io[i].io_funcs.outb_handler(port, val); } last_context = NULL; return TRUE; } } } } return FALSE; } BYTE *WINAPI MGetVdmPointer(DWORD addr, DWORD size, BOOL protmode) { return (BYTE *)K32WOWGetVDMPointer(addr, size, protmode); } ================================================ FILE: krnl386/version.rc ================================================ /* * Copyright 2001 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define WINE_FILEVERSION 1,0,0,0 #define WINE_FILEVERSION_STR "1.0" #define WINE_FILEDESCRIPTION_STR "Wine core dll" #define WINE_FILENAME_STR "krnl386.exe" #include "wine/wine_common_ver.rc" ================================================ FILE: krnl386/vga.c ================================================ /* * VGA hardware emulation * * Copyright 1998 Ove Kåven (with some help from Marcus Meissner) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #define NONAMELESSUNION #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "wincon.h" #include "winnls.h" #include "dosexe.h" #include "vga.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ddraw); static BOOL vga_retrace_vertical; static BOOL vga_retrace_horizontal; /* * Size and location of VGA controller window to framebuffer. * * Note: We support only single window even though some * controllers support two. This should not be changed unless * there are programs that depend on having two windows. */ #define VGA_WINDOW_SIZE (64 * 1024) #define VGA_WINDOW_START ((char *)0xa0000) /* * Size and location of CGA controller window to framebuffer. */ #define CGA_WINDOW_SIZE (32 * 1024) #define CGA_WINDOW_START ((char *)0xb8000) /* * VGA controller memory is emulated using linear framebuffer. * This frambuffer also acts as an interface * between VGA controller emulation and DirectDraw. * * vga_fb_width: Display width in pixels. Can be modified when * display mode is changed. * vga_fb_height: Display height in pixels. Can be modified when * display mode is changed. * vga_fb_depth: Number of bits used to store single pixel color information. * Each pixel uses (vga_fb_depth+7)/8 bytes because * 1-16 color modes are mapped to 256 color mode. * Can be modified when display mode is changed. * vga_fb_pitch: How many bytes to add to pointer in order to move * from one row to another. This is fixed in VGA modes, * but can be modified in SVGA modes. * vga_fb_offset: Offset added to framebuffer start address in order * to find the display origin. Programs use this to do * double buffering and to scroll display. The value can * be modified in VGA and SVGA modes. * vga_fb_size: How many bytes are allocated to framebuffer. * VGA framebuffers are always larger than display size and * SVGA framebuffers may also be. * vga_fb_data: Pointer to framebuffer start. * vga_fb_window: Offset of 64k window 0xa0000 in bytes from framebuffer start. * This value is >= 0, if mode uses linear framebuffer and * -1, if mode uses color planes. This value is fixed * in all modes except 0x13 (256 color VGA) where * 0 means normal mode and -1 means Mode-X (unchained mode). */ static int vga_fb_width; static int vga_fb_height; static int vga_fb_depth; static int vga_fb_pitch; static int vga_fb_offset; int vga_fb_size = 0; char *vga_fb_data = 0; static int vga_fb_window = 0; static int vga_fb_window_size; static char *vga_fb_window_data; static PALETTEENTRY *vga_fb_palette; static unsigned vga_fb_palette_index; static unsigned vga_fb_palette_size; static BOOL vga_fb_bright; static BOOL vga_fb_enabled; /* * VGA text mode data. * * vga_text_attr: Current active attribute. * vga_text_old: Last data sent to console. * This is used to optimize console updates. * vga_text_width: Width of the text display in characters. * vga_text_height: Height of the text display in characters. * vga_text_x: Current cursor X-position. Starts from zero. * vga_text_y: Current cursor Y-position. Starts from zero. * vga_text_console: TRUE if stdout is console, * FALSE if it is regular file. */ static BYTE vga_text_attr; static char *vga_text_old = NULL; static BYTE vga_text_width; static BYTE vga_text_height; static BYTE vga_text_x; static BYTE vga_text_y; static BOOL vga_text_console; /* * VGA controller ports 0x3c0, 0x3c4, 0x3ce and 0x3d4 are * indexed registers. These ports are used to select VGA controller * subregister that can be written to or read from using ports 0x3c1, * 0x3c5, 0x3cf or 0x3d5. Selected subregister indexes are * stored in variables vga_index_*. * * Port 0x3c0 is special because it is both index and * data-write register. Flip-flop vga_address_3c0 tells whether * the port acts currently as an address register. Reading from port * 0x3da resets the flip-flop to address mode. */ static BYTE vga_index_3c0; static BYTE vga_index_3c4; static BYTE vga_index_3ce; static BYTE vga_index_3d4; static BOOL vga_address_3c0 = TRUE; /* * List of supported video modes. * * should be expanded to contain most or all information * as required for SVGA VESA mode info block for VESA BIOS subsystem 1 (see _ModeInfoBlock) * this will allow proper support for FIXME items in VGA/VESA mode configuration * * FIXME - verify and define support for VESA modes * FIXME - add # bit planes, # video memory banks, & memory model */ static WORD VGA_CurrentMode; static BOOL CGA_ColorComposite = FALSE; /* behave like composite monitor */ const VGA_MODE VGA_modelist[] = { /* Mode, ModeType, TextCols, TextRows, CharWidth, CharHeight, Width, Height, Depth, Colors, ScreenPages, Supported*/ /* VGA modes */ {0x0000, TEXT, 40, 25, 9, 16, 360, 400, 0, 16, 8, TRUE}, /* VGA/CGA text mode 0 */ {0x0001, TEXT, 40, 25, 9, 16, 360, 400, 0, 16, 8, TRUE}, /* VGA/CGA text mode 1 */ {0x0002, TEXT, 80, 25, 9, 16, 360, 400, 0, 16, 8, TRUE}, /* VGA/CGA text mode 2 */ {0x0003, TEXT, 80, 25, 9, 16, 360, 400, 0, 16, 8, TRUE}, /* VGA/CGA text mode 3 */ {0x0004, GRAPHIC, 40, 25, 8, 8, 320, 200, 2, 4, 1, TRUE}, /* VGA/CGA graphics mode 4 */ {0x0005, GRAPHIC, 40, 25, 8, 8, 320, 200, 2, 4, 1, TRUE}, /* VGA/CGA graphics mode 5 */ {0x0006, GRAPHIC, 80, 25, 8, 8, 640, 200, 1, 2, 1, TRUE}, /* VGA/CGA graphics mode 6 */ {0x0007, TEXT, 80, 25, 9, 16, 720, 400, 0, 0, 8, FALSE}, /* VGA text mode 7 - FIXME bad default address */ {0x000d, GRAPHIC, 40, 25, 8, 8, 320, 200, 4, 16, 8, FALSE}, /* VGA graphics mode 13 */ {0x000e, GRAPHIC, 80, 25, 8, 8, 640, 200, 4, 16, 4, FALSE}, /* VGA graphics mode 14 */ {0x000f, GRAPHIC, 80, 25, 8, 14, 640, 350, 0, 0, 2, FALSE}, /* VGA graphics mode 15 */ {0x0010, GRAPHIC, 80, 25, 8, 14, 640, 350, 4, 16, 2, FALSE}, /* VGA graphics mode 16 */ {0x0011, GRAPHIC, 80, 30, 8, 16, 640, 480, 1, 2, 1, FALSE}, /* VGA graphics mode 17 */ {0x0012, GRAPHIC, 80, 30, 8, 16, 640, 480, 4, 16, 1, FALSE}, /* VGA graphics mode 18 */ {0x0013, GRAPHIC, 40, 25, 8, 8, 320, 200, 8, 256, 1, TRUE}, /* VGA graphics mode 19 */ /* VESA 7-bit modes */ {0x006a, GRAPHIC, 0, 0, 0, 0, 800, 600, 4, 16, 1, TRUE}, /* VESA graphics mode, same as 0x102 */ /* VESA 15-bit modes */ {0x0100, GRAPHIC, 0, 0, 0, 0, 640, 400, 8, 256, 1, TRUE}, /* VESA graphics mode */ {0x0101, GRAPHIC, 0, 0, 0, 0, 640, 480, 8, 256, 1, TRUE}, /* VESA graphics mode */ {0x0102, GRAPHIC, 0, 0, 0, 0, 800, 600, 4, 16, 1, TRUE}, /* VESA graphics mode */ {0x0103, GRAPHIC, 0, 0, 0, 0, 800, 600, 8, 256, 1, TRUE}, /* VESA graphics mode */ {0x0104, GRAPHIC, 0, 0, 0, 0, 1024, 768, 4, 16, 1, TRUE}, /* VESA graphics mode */ {0x0105, GRAPHIC, 0, 0, 0, 0, 1024, 768, 8, 256, 1, TRUE}, /* VESA graphics mode */ {0x0106, GRAPHIC, 0, 0, 0, 0, 1280, 1024, 4, 16, 1, TRUE}, /* VESA graphics mode */ {0x0107, GRAPHIC, 0, 0, 0, 0, 1280, 1024, 8, 256, 1, TRUE}, /* VESA graphics mode */ {0x0108, TEXT, 0, 0, 0, 0, 80, 60, 0, 0, 1, TRUE}, /* VESA text mode */ {0x0109, TEXT, 0, 0, 0, 0, 132, 25, 0, 0, 1, TRUE}, /* VESA text mode */ {0x010a, TEXT, 0, 0, 0, 0, 132, 43, 0, 0, 1, TRUE}, /* VESA text mode */ {0x010b, TEXT, 0, 0, 0, 0, 132, 50, 0, 0, 1, TRUE}, /* VESA text mode */ {0x010c, TEXT, 0, 0, 0, 0, 132, 60, 0, 0, 1, TRUE}, /* VESA text mode */ /* VESA 1.2 modes */ {0x010d, GRAPHIC, 0, 0, 0, 0, 320, 200, 15, 0, 1, TRUE}, /* VESA graphics mode, 32K colors */ {0x010e, GRAPHIC, 0, 0, 0, 0, 320, 200, 16, 0, 1, TRUE}, /* VESA graphics mode, 64K colors */ {0x010f, GRAPHIC, 0, 0, 0, 0, 320, 200, 24, 0, 1, TRUE}, /* VESA graphics mode, 16.8 Million colors */ {0x0110, GRAPHIC, 0, 0, 0, 0, 640, 480, 15, 0, 1, TRUE}, /* VESA graphics mode, 32K colors */ {0x0111, GRAPHIC, 0, 0, 0, 0, 640, 480, 16, 0, 1, TRUE}, /* VESA graphics mode, 64K colors */ {0x0112, GRAPHIC, 0, 0, 0, 0, 640, 480, 24, 0, 1, TRUE}, /* VESA graphics mode, 16.8 Million colors */ {0x0113, GRAPHIC, 0, 0, 0, 0, 800, 600, 15, 0, 1, TRUE}, /* VESA graphics mode, 32K colors */ {0x0114, GRAPHIC, 0, 0, 0, 0, 800, 600, 16, 0, 1, TRUE}, /* VESA graphics mode, 64K colors */ {0x0115, GRAPHIC, 0, 0, 0, 0, 800, 600, 24, 0, 1, TRUE}, /* VESA graphics mode, 16.8 Million colors */ {0x0116, GRAPHIC, 0, 0, 0, 0, 1024, 768, 15, 0, 1, TRUE}, /* VESA graphics mode, 32K colors */ {0x0117, GRAPHIC, 0, 0, 0, 0, 1024, 768, 16, 0, 1, TRUE}, /* VESA graphics mode, 64K colors */ {0x0118, GRAPHIC, 0, 0, 0, 0, 1024, 768, 24, 0, 1, TRUE}, /* VESA graphics mode, 16.8 Million colors */ {0x0119, GRAPHIC, 0, 0, 0, 0, 1280, 1024, 15, 0, 1, TRUE}, /* VESA graphics mode, 32K colors */ {0x011a, GRAPHIC, 0, 0, 0, 0, 1280, 1024, 16, 0, 1, TRUE}, /* VESA graphics mode, 64K colors */ {0x011b, GRAPHIC, 0, 0, 0, 0, 1280, 1024, 24, 0, 1, TRUE}, /* VESA graphics mode, 16.8 Million colors */ {0xffff, TEXT, 0, 0, 0, 0, 0, 0, 0, 0, 1, FALSE} }; /* * This mutex is used to protect VGA state during asynchronous * screen updates (see VGA_Poll). It makes sure that VGA state changes * are atomic and the user interface is protected from flicker and * corruption. * * The mutex actually serializes VGA operations and the screen update. * Which means that whenever VGA_Poll occurs, application stalls if it * tries to modify VGA state. This is not how real VGA adapters work, * but it makes timing and correctness issues much easier to deal with. */ static CRITICAL_SECTION vga_lock; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &vga_lock, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": vga_lock") } }; static CRITICAL_SECTION vga_lock = { &critsect_debug, -1, 0, 0, 0, 0 }; static void CALLBACK VGA_Poll( LPVOID arg, DWORD low, DWORD high ); static HWND vga_hwnd = NULL; /* * CGA palette 1 */ static PALETTEENTRY cga_palette1[] = { {0x00, 0x00, 0x00}, /* 0 - Black */ {0x00, 0xAA, 0xAA}, /* 1 - Cyan */ {0xAA, 0x00, 0xAA}, /* 2 - Magenta */ {0xAA, 0xAA, 0xAA} /* 3 - White */ }; /* * CGA palette 1 in the bright variant * intensities, when signalled to do so * in register 0x3d9 */ static PALETTEENTRY cga_palette1_bright[] = { {0x00, 0x00, 0x00}, /* 0 - Black */ {0x55, 0xFF, 0xFF}, /* 1 - Light cyan */ {0xFF, 0x55, 0xFF}, /* 2 - Light magenta */ {0xFF, 0xFF, 0xFF}, /* 3 - Bright White */ }; /* * CGA palette 2 */ static PALETTEENTRY cga_palette2[] = { {0x00, 0x00, 0x00}, /* 0 - Black */ {0x00, 0xAA, 0x00}, /* 1 - Green */ {0xAA, 0x00, 0x00}, /* 2 - Red */ {0xAA, 0x55, 0x00} /* 3 - Brown */ }; /* * CGA palette 2 in the bright variant * intensities, when signalled to do so * in register 0x3d9 */ static PALETTEENTRY cga_palette2_bright[] = { {0x00, 0x00, 0x00}, /* 0 - Black */ {0x55, 0xFF, 0x55}, /* 1 - Light green */ {0xFF, 0x55, 0x55}, /* 2 - Light red */ {0xFF, 0xFF, 0x55}, /* 3 - Yellow */ }; /* * VGA Palette Registers, in actual 16 bit color * port 3C0H - 6 bit rgbRGB format * * 16 color accesses will use these pointers and insert * entries from the 64-color palette (mode 18) into the default * palette. --Robert 'Admiral' Coeyman */ static char vga_16_palette[17]={ 0x00, /* 0 - Black */ 0x01, /* 1 - Blue */ 0x02, /* 2 - Green */ 0x03, /* 3 - Cyan */ 0x04, /* 4 - Red */ 0x05, /* 5 - Magenta */ 0x14, /* 6 - Brown */ 0x07, /* 7 - White (Light gray) */ 0x38, /* 8 - Dark gray */ 0x39, /* 9 - Light blue */ 0x3a, /* A - Light green */ 0x3b, /* B - Light cyan */ 0x3c, /* C - Light red */ 0x3d, /* D - Light magenta */ 0x3e, /* E - Yellow */ 0x3f, /* F - Bright White (White) */ 0x00 /* Border Color */ }; /* * Mode 19 Default Color Register Setting * DAC palette registers, converted from actual 18 bit color to 24. */ static PALETTEENTRY vga_def_palette[256]={ /* red green blue */ /* 16 colors in IRGB values */ {0x00, 0x00, 0x00}, /* 0 (0) - Black */ {0x00, 0x00, 0xAA}, /* 1 (1) - Blue */ {0x00, 0xAA, 0x00}, /* 2 (2) - Green */ {0x00, 0xAA, 0xAA}, /* 3 (3) - Cyan */ {0xAA, 0x00, 0x00}, /* 4 (4) - Red */ {0xAA, 0x00, 0xAA}, /* 5 (5) - Magenta */ {0xAA, 0x55, 0x00}, /* 6 (6) - Brown */ {0xAA, 0xAA, 0xAA}, /* 7 (7) - White (Light gray) */ {0x55, 0x55, 0x55}, /* 8 (8) - Dark gray */ {0x55, 0x55, 0xFF}, /* 9 (9) - Light blue */ {0x55, 0xFF, 0x55}, /* 10 (A) - Light green */ {0x55, 0xFF, 0xFF}, /* 11 (B) - Light cyan */ {0xFF, 0x55, 0x55}, /* 12 (C) - Light red */ {0xFF, 0x55, 0xFF}, /* 13 (D) - Light magenta */ {0xFF, 0xFF, 0x55}, /* 14 (E) - Yellow */ {0xFF, 0xFF, 0xFF}, /* 15 (F) - Bright White (White) */ /* 16 shades of gray */ {0x00, 0x00, 0x00}, /* 16 (10) */ {0x10, 0x10, 0x10}, /* 17 (11) */ {0x20, 0x20, 0x20}, /* 18 (12) */ {0x35, 0x35, 0x35}, /* 19 (13) */ {0x45, 0x45, 0x45}, /* 20 (14) */ {0x55, 0x55, 0x55}, /* 21 (15) */ {0x65, 0x65, 0x65}, /* 22 (16) */ {0x75, 0x75, 0x75}, /* 23 (17) */ {0x8A, 0x8A, 0x8A}, /* 24 (18) */ {0x9A, 0x9A, 0x9A}, /* 25 (19) */ {0xAA, 0xAA, 0xAA}, /* 26 (1A) */ {0xBA, 0xBA, 0xBA}, /* 27 (1B) */ {0xCA, 0xCA, 0xCA}, /* 28 (1C) */ {0xDF, 0xDF, 0xDF}, /* 29 (1D) */ {0xEF, 0xEF, 0xEF}, /* 30 (1E) */ {0xFF, 0xFF, 0xFF}, /* 31 (1F) */ /* High Intensity group - 72 colors in 1/3 saturation groups (20H-37H high) */ {0x00, 0x00, 0xFF}, /* 32 (20) */ {0x41, 0x00, 0xFF}, /* 33 (21) */ {0x82, 0x00, 0xFF}, /* 34 (22) */ {0xBE, 0x00, 0xFF}, /* 35 (23) */ {0xFF, 0x00, 0xFF}, /* 36 (24) */ {0xFF, 0x00, 0xBE}, /* 37 (25) */ {0xFF, 0x00, 0x82}, /* 38 (26) */ {0xFF, 0x00, 0x41}, /* 39 (27) */ {0xFF, 0x00, 0x00}, /* 40 (28) */ {0xFF, 0x41, 0x00}, /* 41 (29) */ {0xFF, 0x82, 0x00}, /* 42 (2A) */ {0xFF, 0xBE, 0x00}, /* 43 (2B) */ {0xFF, 0xFF, 0x00}, /* 44 (2C) */ {0xBE, 0xFF, 0x00}, /* 45 (2D) */ {0x82, 0xFF, 0x00}, /* 46 (2E) */ {0x41, 0xFF, 0x00}, /* 47 (2F) */ {0x00, 0xFF, 0x00}, /* 48 (30) */ {0x00, 0xFF, 0x41}, /* 49 (31) */ {0x00, 0xFF, 0x82}, /* 50 (32) */ {0x00, 0xFF, 0xBE}, /* 51 (33) */ {0x00, 0xFF, 0xFF}, /* 52 (34) */ {0x00, 0xBE, 0xFF}, /* 53 (35) */ {0x00, 0x82, 0xFF}, /* 54 (36) */ {0x00, 0x41, 0xFF}, /* 55 (37) */ /* High Intensity group - 72 colors in 2/3 saturation groups (38H-4FH moderate) */ {0x82, 0x82, 0xFF}, /* 56 (38) */ {0x9E, 0x82, 0xFF}, /* 57 (39) */ {0xBE, 0x82, 0xFF}, /* 58 (3A) */ {0xDF, 0x82, 0xFF}, /* 59 (3B) */ {0xFF, 0x82, 0xFF}, /* 60 (3C) */ {0xFF, 0x82, 0xDF}, /* 61 (3D) */ {0xFF, 0x82, 0xBE}, /* 62 (3E) */ {0xFF, 0x82, 0x9E}, /* 63 (3F) */ {0xFF, 0x82, 0x82}, /* 64 (40) */ {0xFF, 0x9E, 0x82}, /* 65 (41) */ {0xFF, 0xBE, 0x82}, /* 66 (42) */ {0xFF, 0xDF, 0x82}, /* 67 (43) */ {0xFF, 0xFF, 0x82}, /* 68 (44) */ {0xDF, 0xFF, 0x82}, /* 69 (45) */ {0xBE, 0xFF, 0x82}, /* 70 (46) */ {0x9E, 0xFF, 0x82}, /* 71 (47) */ {0x82, 0xFF, 0x82}, /* 72 (48) */ {0x82, 0xFF, 0x9E}, /* 73 (49) */ {0x82, 0xFF, 0xBE}, /* 74 (4A) */ {0x82, 0xFF, 0xDF}, /* 75 (4B) */ {0x82, 0xFF, 0xFF}, /* 76 (4C) */ {0x82, 0xDF, 0xFF}, /* 77 (4D) */ {0x82, 0xBE, 0xFF}, /* 78 (4E) */ {0x82, 0x9E, 0xFF}, /* 79 (4F) */ /* High Intensity group - 72 colors in 3/3 saturation groups (50H-67H low) */ {0xBA, 0xBA, 0xFF}, /* 80 (50) */ {0xCA, 0xBA, 0xFF}, /* 81 (51) */ {0xDF, 0xBA, 0xFF}, /* 82 (52) */ {0xEF, 0xBA, 0xFF}, /* 83 (53) */ {0xFF, 0xBA, 0xFF}, /* 84 (54) */ {0xFF, 0xBA, 0xEF}, /* 85 (55) */ {0xFF, 0xBA, 0xDF}, /* 86 (56) */ {0xFF, 0xBA, 0xCA}, /* 87 (57) */ {0xFF, 0xBA, 0xBA}, /* 88 (58) */ {0xFF, 0xCA, 0xBA}, /* 89 (59) */ {0xFF, 0xDF, 0xBA}, /* 90 (5A) */ {0xFF, 0xEF, 0xBA}, /* 91 (5B) */ {0xFF, 0xFF, 0xBA}, /* 92 (5C) */ {0xEF, 0xFF, 0xBA}, /* 93 (5D) */ {0xDF, 0xFF, 0xBA}, /* 94 (5E) */ {0xCA, 0xFF, 0xBA}, /* 95 (5F) */ {0xBA, 0xFF, 0xBA}, /* 96 (60) */ {0xBA, 0xFF, 0xCA}, /* 97 (61) */ {0xBA, 0xFF, 0xDF}, /* 98 (62) */ {0xBA, 0xFF, 0xEF}, /* 99 (63) */ {0xBA, 0xFF, 0xFF}, /* 100 (64) */ {0xBA, 0xEF, 0xFF}, /* 101 (65) */ {0xBA, 0xDF, 0xFF}, /* 102 (66) */ {0xBA, 0xCA, 0xFF}, /* 103 (67) */ /* Medium Intensity group - 72 colors in 1/3 saturation groups (68H-7FH high) */ {0x00, 0x00, 0x71}, /* 104 (68) */ {0x1C, 0x00, 0x71}, /* 105 (69) */ {0x39, 0x00, 0x71}, /* 106 (6A) */ {0x55, 0x00, 0x71}, /* 107 (6B) */ {0x71, 0x00, 0x71}, /* 108 (6C) */ {0x71, 0x00, 0x55}, /* 109 (6D) */ {0x71, 0x00, 0x39}, /* 110 (6E) */ {0x71, 0x00, 0x1C}, /* 111 (6F) */ {0x71, 0x00, 0x00}, /* 112 (70) */ {0x71, 0x1C, 0x00}, /* 113 (71) */ {0x71, 0x39, 0x00}, /* 114 (72) */ {0x71, 0x55, 0x00}, /* 115 (73) */ {0x71, 0x71, 0x00}, /* 116 (74) */ {0x55, 0x71, 0x00}, /* 117 (75) */ {0x39, 0x71, 0x00}, /* 118 (76) */ {0x1C, 0x71, 0x00}, /* 119 (77) */ {0x00, 0x71, 0x00}, /* 120 (78) */ {0x00, 0x71, 0x1C}, /* 121 (79) */ {0x00, 0x71, 0x39}, /* 122 (7A) */ {0x00, 0x71, 0x55}, /* 123 (7B) */ {0x00, 0x71, 0x71}, /* 124 (7C) */ {0x00, 0x55, 0x71}, /* 125 (7D) */ {0x00, 0x39, 0x71}, /* 126 (7E) */ {0x00, 0x1C, 0x71}, /* 127 (7F) */ /* Medium Intensity group - 72 colors in 2/3 saturation groups (80H-97H moderate) */ {0x39, 0x39, 0x71}, /* 128 (80) */ {0x45, 0x39, 0x71}, /* 129 (81) */ {0x55, 0x39, 0x71}, /* 130 (82) */ {0x61, 0x39, 0x71}, /* 131 (83) */ {0x71, 0x39, 0x71}, /* 132 (84) */ {0x71, 0x39, 0x61}, /* 133 (85) */ {0x71, 0x39, 0x55}, /* 134 (86) */ {0x71, 0x39, 0x45}, /* 135 (87) */ {0x71, 0x39, 0x39}, /* 136 (88) */ {0x71, 0x45, 0x39}, /* 137 (89) */ {0x71, 0x55, 0x39}, /* 138 (8A) */ {0x71, 0x61, 0x39}, /* 139 (8B) */ {0x71, 0x71, 0x39}, /* 140 (8C) */ {0x61, 0x71, 0x39}, /* 141 (8D) */ {0x55, 0x71, 0x39}, /* 142 (8E) */ {0x45, 0x71, 0x39}, /* 143 (8F) */ {0x39, 0x71, 0x39}, /* 144 (90) */ {0x39, 0x71, 0x45}, /* 145 (91) */ {0x39, 0x71, 0x55}, /* 146 (92) */ {0x39, 0x71, 0x61}, /* 147 (93) */ {0x39, 0x71, 0x71}, /* 148 (94) */ {0x39, 0x61, 0x71}, /* 149 (95) */ {0x39, 0x55, 0x71}, /* 150 (96) */ {0x39, 0x45, 0x71}, /* 151 (97) */ /* Medium Intensity group - 72 colors in 3/3 saturation groups (98H-AFH low) */ {0x51, 0x51, 0x71}, /* 152 (98) */ {0x59, 0x51, 0x71}, /* 153 (99) */ {0x61, 0x51, 0x71}, /* 154 (9A) */ {0x69, 0x51, 0x71}, /* 155 (9B) */ {0x71, 0x51, 0x71}, /* 156 (9C) */ {0x71, 0x51, 0x69}, /* 157 (9D) */ {0x71, 0x51, 0x61}, /* 158 (9E) */ {0x71, 0x51, 0x59}, /* 159 (9F) */ {0x71, 0x51, 0x51}, /* 160 (A0) */ {0x71, 0x59, 0x51}, /* 161 (A1) */ {0x71, 0x61, 0x51}, /* 162 (A2) */ {0x71, 0x69, 0x51}, /* 163 (A3) */ {0x71, 0x71, 0x51}, /* 164 (A4) */ {0x69, 0x71, 0x51}, /* 165 (A5) */ {0x61, 0x71, 0x51}, /* 166 (A6) */ {0x59, 0x71, 0x51}, /* 167 (A7) */ {0x51, 0x71, 0x51}, /* 168 (A8) */ {0x51, 0x71, 0x59}, /* 169 (A9) */ {0x51, 0x71, 0x61}, /* 170 (AA) */ {0x51, 0x71, 0x69}, /* 171 (AB) */ {0x51, 0x71, 0x71}, /* 172 (AC) */ {0x51, 0x69, 0x71}, /* 173 (AD) */ {0x51, 0x61, 0x71}, /* 174 (AE) */ {0x51, 0x59, 0x71}, /* 175 (AF) */ /* Low Intensity group - 72 colors in 1/3 saturation groups (B0H-C7H high) */ {0x00, 0x00, 0x41}, /* 176 (B0) */ {0x10, 0x00, 0x41}, /* 177 (B1) */ {0x20, 0x00, 0x41}, /* 178 (B2) */ {0x31, 0x00, 0x41}, /* 179 (B3) */ {0x41, 0x00, 0x41}, /* 180 (B4) */ {0x41, 0x00, 0x31}, /* 181 (B5) */ {0x41, 0x00, 0x20}, /* 182 (B6) */ {0x41, 0x00, 0x10}, /* 183 (B7) */ {0x41, 0x00, 0x00}, /* 184 (B8) */ {0x41, 0x10, 0x00}, /* 185 (B9) */ {0x41, 0x20, 0x00}, /* 186 (BA) */ {0x41, 0x31, 0x00}, /* 187 (BB) */ {0x41, 0x41, 0x00}, /* 188 (BC) */ {0x31, 0x41, 0x00}, /* 189 (BD) */ {0x20, 0x41, 0x00}, /* 190 (BE) */ {0x10, 0x41, 0x00}, /* 191 (BF) */ {0x00, 0x41, 0x00}, /* 192 (C0) */ {0x00, 0x41, 0x10}, /* 193 (C1) */ {0x00, 0x41, 0x20}, /* 194 (C2) */ {0x00, 0x41, 0x31}, /* 195 (C3) */ {0x00, 0x41, 0x41}, /* 196 (C4) */ {0x00, 0x31, 0x41}, /* 197 (C5) */ {0x00, 0x20, 0x41}, /* 198 (C6) */ {0x00, 0x10, 0x41}, /* 199 (C7) */ /* Low Intensity group - 72 colors in 2/3 saturation groups (C8H-DFH moderate) */ {0x20, 0x20, 0x41}, /* 200 (C8) */ {0x28, 0x20, 0x41}, /* 201 (C9) */ {0x31, 0x20, 0x41}, /* 202 (CA) */ {0x39, 0x20, 0x41}, /* 203 (CB) */ {0x41, 0x20, 0x41}, /* 204 (CC) */ {0x41, 0x20, 0x39}, /* 205 (CD) */ {0x41, 0x20, 0x31}, /* 206 (CE) */ {0x41, 0x20, 0x28}, /* 207 (CF) */ {0x41, 0x20, 0x20}, /* 208 (D0) */ {0x41, 0x28, 0x20}, /* 209 (D1) */ {0x41, 0x31, 0x20}, /* 210 (D2) */ {0x41, 0x39, 0x20}, /* 211 (D3) */ {0x41, 0x41, 0x20}, /* 212 (D4) */ {0x39, 0x41, 0x20}, /* 213 (D5) */ {0x31, 0x41, 0x20}, /* 214 (D6) */ {0x28, 0x41, 0x20}, /* 215 (D7) */ {0x20, 0x41, 0x20}, /* 216 (D8) */ {0x20, 0x41, 0x28}, /* 217 (D9) */ {0x20, 0x41, 0x31}, /* 218 (DA) */ {0x20, 0x41, 0x39}, /* 219 (DB) */ {0x20, 0x41, 0x41}, /* 220 (DC) */ {0x20, 0x39, 0x41}, /* 221 (DD) */ {0x20, 0x31, 0x41}, /* 222 (DE) */ {0x20, 0x28, 0x41}, /* 223 (DF) */ /* Low Intensity group - 72 colors in 3/3 saturation groups (E0H-F7H low) */ {0x2D, 0x2D, 0x41}, /* 223 (E0) */ {0x31, 0x2D, 0x41}, /* 224 (E1) */ {0x35, 0x2D, 0x41}, /* 225 (E2) */ {0x3D, 0x2D, 0x41}, /* 226 (E3) */ {0x41, 0x2D, 0x41}, /* 227 (E4) */ {0x41, 0x2D, 0x3D}, /* 228 (E5) */ {0x41, 0x2D, 0x35}, /* 229 (E6) */ {0x41, 0x2D, 0x31}, /* 230 (E7) */ {0x41, 0x2D, 0x2D}, /* 231 (E8) */ {0x41, 0x31, 0x2D}, /* 232 (E9) */ {0x41, 0x35, 0x2D}, /* 233 (EA) */ {0x41, 0x3D, 0x2D}, /* 234 (EB) */ {0x41, 0x41, 0x2D}, /* 235 (EC) */ {0x3D, 0x41, 0x2D}, /* 236 (ED) */ {0x35, 0x41, 0x2D}, /* 237 (EE) */ {0x31, 0x41, 0x2D}, /* 238 (EF) */ {0x2D, 0x41, 0x2D}, /* 239 (F0) */ {0x2D, 0x41, 0x31}, /* 240 (F1) */ {0x2D, 0x41, 0x35}, /* 241 (F2) */ {0x2D, 0x41, 0x3D}, /* 242 (F3) */ {0x2D, 0x41, 0x41}, /* 243 (F4) */ {0x2D, 0x3D, 0x41}, /* 244 (F5) */ {0x2D, 0x35, 0x41}, /* 245 (F6) */ {0x2D, 0x31, 0x41}, /* 246 (F7) */ /* Fill up remainder of palettes with black */ {0,0,0} }; /* * Mode 18 Default Color Register Setting * DAC palette registers, converted from actual 18 bit color to 24. * * This palette is the dos default, converted from 18 bit color to 24. * It contains only 64 entries of colors--all others are zeros. * --Robert 'Admiral' Coeyman */ static PALETTEENTRY vga_def64_palette[256]={ /* red green blue */ {0x00, 0x00, 0x00}, /* 0x00 Black */ {0x00, 0x00, 0xaa}, /* 0x01 Blue */ {0x00, 0xaa, 0x00}, /* 0x02 Green */ {0x00, 0xaa, 0xaa}, /* 0x03 Cyan */ {0xaa, 0x00, 0x00}, /* 0x04 Red */ {0xaa, 0x00, 0xaa}, /* 0x05 Magenta */ {0xaa, 0xaa, 0x00}, /* 0x06 */ {0xaa, 0xaa, 0xaa}, /* 0x07 White (Light Gray) */ {0x00, 0x00, 0x55}, /* 0x08 */ {0x00, 0x00, 0xff}, /* 0x09 */ {0x00, 0xaa, 0x55}, /* 0x0a */ {0x00, 0xaa, 0xff}, /* 0x0b */ {0xaa, 0x00, 0x55}, /* 0x0c */ {0xaa, 0x00, 0xff}, /* 0x0d */ {0xaa, 0xaa, 0x55}, /* 0x0e */ {0xaa, 0xaa, 0xff}, /* 0x0f */ {0x00, 0x55, 0x00}, /* 0x10 */ {0x00, 0x55, 0xaa}, /* 0x11 */ {0x00, 0xff, 0x00}, /* 0x12 */ {0x00, 0xff, 0xaa}, /* 0x13 */ {0xaa, 0x55, 0x00}, /* 0x14 Brown */ {0xaa, 0x55, 0xaa}, /* 0x15 */ {0xaa, 0xff, 0x00}, /* 0x16 */ {0xaa, 0xff, 0xaa}, /* 0x17 */ {0x00, 0x55, 0x55}, /* 0x18 */ {0x00, 0x55, 0xff}, /* 0x19 */ {0x00, 0xff, 0x55}, /* 0x1a */ {0x00, 0xff, 0xff}, /* 0x1b */ {0xaa, 0x55, 0x55}, /* 0x1c */ {0xaa, 0x55, 0xff}, /* 0x1d */ {0xaa, 0xff, 0x55}, /* 0x1e */ {0xaa, 0xff, 0xff}, /* 0x1f */ {0x55, 0x00, 0x00}, /* 0x20 */ {0x55, 0x00, 0xaa}, /* 0x21 */ {0x55, 0xaa, 0x00}, /* 0x22 */ {0x55, 0xaa, 0xaa}, /* 0x23 */ {0xff, 0x00, 0x00}, /* 0x24 */ {0xff, 0x00, 0xaa}, /* 0x25 */ {0xff, 0xaa, 0x00}, /* 0x26 */ {0xff, 0xaa, 0xaa}, /* 0x27 */ {0x55, 0x00, 0x55}, /* 0x28 */ {0x55, 0x00, 0xff}, /* 0x29 */ {0x55, 0xaa, 0x55}, /* 0x2a */ {0x55, 0xaa, 0xff}, /* 0x2b */ {0xff, 0x00, 0x55}, /* 0x2c */ {0xff, 0x00, 0xff}, /* 0x2d */ {0xff, 0xaa, 0x55}, /* 0x2e */ {0xff, 0xaa, 0xff}, /* 0x2f */ {0x55, 0x55, 0x00}, /* 0x30 */ {0x55, 0x55, 0xaa}, /* 0x31 */ {0x55, 0xff, 0x00}, /* 0x32 */ {0x55, 0xff, 0xaa}, /* 0x33 */ {0xff, 0x55, 0x00}, /* 0x34 */ {0xff, 0x55, 0xaa}, /* 0x35 */ {0xff, 0xff, 0x00}, /* 0x36 */ {0xff, 0xff, 0xaa}, /* 0x37 */ {0x55, 0x55, 0x55}, /* 0x38 Dark Gray */ {0x55, 0x55, 0xff}, /* 0x39 Light Blue */ {0x55, 0xff, 0x55}, /* 0x3a Light Green */ {0x55, 0xff, 0xff}, /* 0x3b Light Cyan */ {0xff, 0x55, 0x55}, /* 0x3c Light Red */ {0xff, 0x55, 0xff}, /* 0x3d Light Magenta */ {0xff, 0xff, 0x55}, /* 0x3e Yellow */ {0xff, 0xff, 0xff}, /* 0x3f White */ {0,0,0} /* The next 192 entries are all zeros */ }; static HANDLE VGA_timer; static HANDLE VGA_timer_thread; /* set the timer rate; called in the polling thread context */ static void CALLBACK set_timer_rate( ULONG_PTR arg ) { LARGE_INTEGER when; when.u.LowPart = when.u.HighPart = 0; SetWaitableTimer( VGA_timer, &when, arg, VGA_Poll, 0, FALSE ); } static DWORD CALLBACK VGA_TimerThread( ULONG_PTR Rate ) { set_timer_rate(Rate); for (;;) SleepEx( INFINITE, TRUE ); return 0; } static void VGA_DeinstallTimer(void) { if (VGA_timer_thread) { /* * Make sure the update thread is not holding * system resources when we kill it. * * Now, we only need to worry about update thread * getting terminated while in EnterCriticalSection * or WaitForMultipleObjectsEx. * * FIXME: Is this a problem? */ EnterCriticalSection(&vga_lock); CancelWaitableTimer( VGA_timer ); CloseHandle( VGA_timer ); QueueUserAPC(ExitThread, VGA_timer_thread, 0); LeaveCriticalSection(&vga_lock); /* !! */ WaitForSingleObject(VGA_timer_thread, INFINITE); EnterCriticalSection(&vga_lock); CloseHandle( VGA_timer_thread ); VGA_timer_thread = 0; LeaveCriticalSection(&vga_lock); /* * Synchronize display. This makes sure that * changes to display become visible even if program * terminates before update thread had time to run. */ VGA_Poll( 0, 0, 0 ); } } static void VGA_InstallTimer(unsigned Rate) { if (!VGA_timer_thread) { VGA_timer = CreateWaitableTimerA( NULL, FALSE, NULL ); /* Occasionally calling QueueUserAPC immediately after creating a thread will fail */ VGA_timer_thread = CreateThread( NULL, 0, VGA_TimerThread, (ULONG_PTR)Rate, 0, NULL ); } else { QueueUserAPC( set_timer_rate, VGA_timer_thread, (ULONG_PTR)Rate ); } } static BOOL VGA_IsTimerRunning(void) { return VGA_timer_thread != 0; } static HANDLE VGA_AlphaConsole(void) { /* this assumes that no Win32 redirection has taken place, but then again, * only 16-bit apps are likely to use this part of Wine... */ return GetStdHandle(STD_OUTPUT_HANDLE); } static char*VGA_AlphaBuffer(void) { return (char *)0xb8000 + (size_t)DOSMEM_dosmem; } /*** GRAPHICS MODE ***/ typedef struct { unsigned Xres, Yres, Depth; BOOL ret; } ModeSet; /********************************************************************** * VGA_SyncWindow * * Copy VGA window into framebuffer (if argument is TRUE) or * part of framebuffer into VGA window (if argument is FALSE). */ static void VGA_SyncWindow( BOOL target_is_fb ) { int size = vga_fb_window_size; /* Window does not overlap framebuffer. */ if (vga_fb_window >= vga_fb_size) return; /* Check if window overlaps framebuffer only partially. */ if (vga_fb_size - vga_fb_window < vga_fb_window_size) size = vga_fb_size - vga_fb_window; if (target_is_fb) memmove( vga_fb_data + vga_fb_window, vga_fb_window_data, size ); else memmove( vga_fb_window_data, vga_fb_data + vga_fb_window, size ); } static void WINAPI VGA_DoExit(ULONG_PTR arg) { VGA_DeinstallTimer(); DestroyWindow(vga_hwnd); vga_hwnd = NULL; VirtualFree(vga_fb_data, 0, MEM_RELEASE); vga_fb_data = NULL; } ModeSet vga_mode; HDC vga_dc; HBITMAP vga_bitmap; PALETTEENTRY *vga_palette; static void WINAPI VGA_DoSetMode(ULONG_PTR arg) { HRESULT res; ModeSet *par = (ModeSet *)arg; LPLOGPALETTE pal; BITMAPINFO binfo = { 0 }; par->ret = FALSE; vga_mode = *par; if (vga_hwnd) VGA_DoExit(0); if (!vga_hwnd) { vga_retrace_vertical = vga_retrace_horizontal = FALSE; /* poll every 20ms (50fps should provide adequate responsiveness) */ VGA_InstallTimer(20); } par->ret = TRUE; return; } /**********************************************************************\ * VGA_GetModeInfo * * Returns mode information, given mode number \**********************************************************************/ const VGA_MODE *VGA_GetModeInfo(WORD mode) { const VGA_MODE *ModeInfo = VGA_modelist; /* * Filter out flags. */ mode &= 0x17f; while (ModeInfo->Mode != 0xffff) { if (ModeInfo->Mode == mode) return ModeInfo; ModeInfo++; } return NULL; } static BOOL VGA_SetGraphicMode(WORD mode) { ModeSet par; int newSize; /* get info on VGA mode & set appropriately */ const VGA_MODE *ModeInfo = VGA_GetModeInfo(VGA_CurrentMode); /* check if we're assuming composite display */ if ((mode == 6) && (CGA_ColorComposite)) { vga_fb_width = (ModeInfo->Width / 4); vga_fb_height = ModeInfo->Height; vga_fb_depth = (ModeInfo->Depth * 4); } else { vga_fb_width = ModeInfo->Width; vga_fb_height = ModeInfo->Height; vga_fb_depth = ModeInfo->Depth; } vga_fb_offset = 0; vga_fb_pitch = vga_fb_width * ((vga_fb_depth + 7) / 8); newSize = vga_fb_width * vga_fb_height * ((vga_fb_depth + 7) / 8); if(newSize < 256 * 1024) newSize = 256 * 1024; if(vga_fb_width >= 640 || vga_fb_height >= 480) { par.Xres = vga_fb_width; par.Yres = vga_fb_height; } else { par.Xres = vga_fb_width; par.Yres = vga_fb_height; } /* Setup window */ if(vga_fb_depth >= 8) { vga_fb_window_data = (SIZE_T)DOSMEM_dosmem + VGA_WINDOW_START; vga_fb_window_size = VGA_WINDOW_SIZE; vga_fb_palette = vga_def_palette; vga_fb_palette_size = 256; } else { vga_fb_window_data = (SIZE_T)DOSMEM_dosmem + CGA_WINDOW_START; vga_fb_window_size = CGA_WINDOW_SIZE; if(vga_fb_depth == 2) { /* Select default 2 bit CGA palette */ vga_fb_palette = cga_palette1; vga_fb_palette_size = 4; } else { /* Top of VGA palette is same as 4 bit CGA palette */ vga_fb_palette = vga_def_palette; vga_fb_palette_size = 16; } vga_fb_palette_index = 0; vga_fb_bright = 0; } /* Clean the HW buffer */ memset(vga_fb_window_data, 0x00, vga_fb_window_size); /* Reset window start */ VGA_SetWindowStart(0); par.Depth = (vga_fb_depth < 8) ? 8 : vga_fb_depth; if (vga_palette) HeapFree(GetProcessHeap(), 0, vga_palette); vga_palette = HeapAlloc(GetProcessHeap(), 0, sizeof(PALETTEENTRY) * vga_fb_palette_size); memcpy(vga_palette, vga_fb_palette, sizeof(PALETTEENTRY) * vga_fb_palette_size); MZ_RunInThread(VGA_DoSetMode, (ULONG_PTR)&par); return par.ret; } BOOL VGA_SetMode(WORD mode) { const VGA_MODE *ModeInfo; BIOSDATA *bda = DOSVM_BiosData(); /* get info on VGA mode & set appropriately */ VGA_CurrentMode = mode; ModeInfo = VGA_GetModeInfo(VGA_CurrentMode); /* * xxxxxxx1 = 80x25 text * xxxxxxx0 = 40x25 text (default) * xxxxxx1x = graphics (320x200) * xxxxxx0x = text * xxxxx1xx = B/W * xxxxx0xx = color * xxxx1xxx = enable video signal * xxx1xxxx = 640x200 B/W graphics * xx1xxxxx = blink */ bda->VideoReg1 = 0; bda->VideoReg1 |= ModeInfo->ModeType == TEXT; bda->VideoReg1 |= ModeInfo->Width == 320 ? 2 : 0; bda->VideoReg1 |= ModeInfo->ModeType == TEXT || ModeInfo->Colors == 1 ? 4 : 0; bda->VideoReg1 |= ModeInfo->Width == 640 ? 16 : 0; /* check if mode is supported */ if (ModeInfo->Supported) { FIXME("Setting VGA mode %i - Supported mode - Improve reporting of missing capabilities for modes & modetypes.\n", mode); } else { FIXME("Setting VGA mode %i - Unsupported mode - Will doubtfully work at all, but we'll try anyways.\n", mode); } /* set up graphic or text display */ if (ModeInfo->ModeType == TEXT) { VGA_SetAlphaMode(ModeInfo->TextCols, ModeInfo->TextRows); } else { return VGA_SetGraphicMode(mode); } return TRUE; /* assume all good & return TRUE */ } BOOL VGA_GetMode(unsigned *Height, unsigned *Width, unsigned *Depth) { if (!vga_hwnd) return FALSE; if (Height) *Height = vga_mode.Yres; if (Width) *Width = vga_mode.Xres; if (Depth) *Depth = vga_mode.Depth; return TRUE; } static void VGA_Exit(void) { if (vga_hwnd) MZ_RunInThread(VGA_DoExit, 0); } void VGA_SetPalette(PALETTEENTRY *pal, int start, int len) { if (start < 0 || start + len > vga_fb_palette_size) { ERR("out of range\n"); } if (!vga_palette) { ERR("vga_palette == NULL\n"); return NULL; } memcpy(vga_palette + start, pal, len * sizeof(*pal)); } /* set a single [char wide] color in 16 color mode. */ void VGA_SetColor16(int reg,int color) { PALETTEENTRY *pal; if (!vga_hwnd) return; pal = &vga_def64_palette[color]; VGA_SetPalette(pal, reg, color); vga_16_palette[reg]=(char)color; } /* Get a single [char wide] color in 16 color mode. */ char VGA_GetColor16(int reg) { if (!vga_hwnd) return 0; return vga_16_palette[reg]; } /* set all 17 [char wide] colors at once in 16 color mode. */ void VGA_Set16Palette(char *Table) { PALETTEENTRY *pal; int c; if (!vga_hwnd) return; /* return if we're in text only mode */ memcpy( Table, vga_16_palette, 17 ); /* copy the entries into the table */ for (c = 0; c < 17; c++) { /* 17 entries */ pal = &vga_def64_palette[(int)vga_16_palette[c]]; /* get color */ VGA_SetPalette(pal, c, 1); /* set entry */ TRACE("Palette register %d set to %d\n", c, (int)vga_16_palette[c]); } /* end of the counting loop */ } /* Get all 17 [ char wide ] colors at once in 16 color mode. */ void VGA_Get16Palette(char *Table) { if (!vga_hwnd) return; /* return if we're in text only mode */ memcpy( vga_16_palette, Table, 17 ); /* copy the entries into the table */ } SIZE_T bitmap_buffer_size; LPSTR bitmap_buffer; static LPSTR VGA_Lock(unsigned*Pitch,unsigned*Height,unsigned*Width,unsigned*Depth) { BITMAPINFO binfo = { 0 }; binfo.bmiHeader.biSize = sizeof(binfo.bmiHeader); binfo.bmiHeader.biWidth = vga_mode.Xres; binfo.bmiHeader.biHeight = vga_mode.Yres; binfo.bmiHeader.biPlanes = 1; binfo.bmiHeader.biBitCount = 24; if (!vga_hwnd) return NULL; if (!bitmap_buffer) { bitmap_buffer = HeapAlloc(GetProcessHeap(), 0, vga_mode.Xres * vga_mode.Yres * 3); } if (!GetDIBits(vga_dc, vga_bitmap, 0, vga_mode.Yres, bitmap_buffer, &binfo, DIB_RGB_COLORS)) { return NULL; } /* FIXME: padding */ *Pitch = binfo.bmiHeader.biWidth * 3; VGA_GetMode(Height, Width, Depth); return bitmap_buffer; } static void paint_bitmap(); static void VGA_Unlock(void) { BITMAPINFO binfo = { 0 }; binfo.bmiHeader.biSize = sizeof(binfo.bmiHeader); binfo.bmiHeader.biWidth = vga_mode.Xres; binfo.bmiHeader.biHeight = vga_mode.Yres; binfo.bmiHeader.biPlanes = 1; binfo.bmiHeader.biBitCount = 24; if (!SetDIBits(vga_dc, vga_bitmap, 0, vga_mode.Yres, bitmap_buffer, &binfo, DIB_RGB_COLORS)) { return; } paint_bitmap(); } static void paint_bitmap() { RECT rect; int width, height; int new_width, new_height; double r = (double)vga_mode.Xres / vga_mode.Yres; HDC dc = GetDC(vga_hwnd); GetClientRect(vga_hwnd, &rect); /* aspect */ width = rect.right - rect.left; height = rect.bottom - rect.top; if (width / r > height) { new_height = height; new_width = height * r; RECT frect = rect; frect.left = 0; frect.right = (width - new_width) / 2; FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH)); frect.left = rect.right - (width - new_width) / 2; frect.right = rect.right; FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH)); } else { new_width = width; new_height = width / r; RECT frect = rect; frect.top = 0; frect.bottom = (height - new_height) / 2; FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH)); frect.top = rect.bottom - (height - new_height) / 2; frect.bottom = rect.bottom; FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH)); } 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); } /* * Set start of 64k window at 0xa0000 in bytes. * If value is -1, initialize color plane support. * If value is >= 0, window contains direct copy of framebuffer. */ void VGA_SetWindowStart(int start) { if(start == vga_fb_window) return; EnterCriticalSection(&vga_lock); if(vga_fb_window == -1) FIXME("Remove VGA memory emulation.\n"); else VGA_SyncWindow( TRUE ); vga_fb_window = start; if(vga_fb_window == -1) FIXME("Install VGA memory emulation.\n"); else VGA_SyncWindow( FALSE ); LeaveCriticalSection(&vga_lock); } /* * Get start of 64k window at 0xa0000 in bytes. * Value is -1 in color plane modes. */ int VGA_GetWindowStart(void) { return vga_fb_window; } /********************************************************************** * VGA_DoShowMouse * * Callback for VGA_ShowMouse. */ static void WINAPI VGA_DoShowMouse( ULONG_PTR show ) { INT rv; do { rv = ShowCursor( show ); } while( show ? (rv < 0) : (rv >= 0) ); } /********************************************************************** * VGA_ShowMouse * * If argument is TRUE, unconditionally show mouse cursor. * If argument is FALSE, unconditionally hide mouse cursor. * This only works in graphics mode. */ void VGA_ShowMouse( BOOL show ) { if (vga_hwnd) MZ_RunInThread( VGA_DoShowMouse, (ULONG_PTR)show ); } /********************************************************************** * VGA_UpdatePalette * * Update the current palette * * Note: When updating the current CGA palette, palette index 0 * refers to palette2, and index 1 is palette1 (default palette) */ void VGA_UpdatePalette(void) { /* Figure out which palette is used now */ if(vga_fb_bright) { if(vga_fb_palette_index == 0) { vga_fb_palette = cga_palette2_bright; } else if(vga_fb_palette_index == 1) { vga_fb_palette = cga_palette1_bright; } } else { if(vga_fb_palette_index == 0) { vga_fb_palette = cga_palette2; } else if(vga_fb_palette_index == 1) { vga_fb_palette = cga_palette1; } } /* Now update the palette */ VGA_SetPalette(vga_fb_palette,0,4); } /********************************************************************** * VGA_SetBright * * Select if using a "bright" palette or not. * This is a property of the CGA controller */ void VGA_SetBright(BOOL bright) { TRACE("%i\n", bright); /* Remember the "bright" value used by the CGA controller */ vga_fb_bright = bright; } /********************************************************************** * VGA_SetEnabled * * Select if output is enabled or disabled * This is a property of the CGA controller */ static void VGA_SetEnabled(BOOL enabled) { TRACE("%i\n", enabled); /* Check if going from enabled to disabled */ if(vga_fb_enabled && !enabled) { /* Clear frame buffer */ memset(vga_fb_window_data, 0x00, vga_fb_window_size); } /* Remember the "enabled" value */ vga_fb_enabled = enabled; } /********************************************************************** * VGA_SetPaletteIndex * * Select the index of the palette which is currently in use * This is a property of the CGA controller */ void VGA_SetPaletteIndex(unsigned index) { TRACE("%i\n", index); /* Remember the palette index, which is only used by CGA for now */ vga_fb_palette_index = index; } /********************************************************************** * VGA_WritePixel * * Write data to the framebuffer * This is a property of the CGA controller, but might be supported * later by other framebuffer types */ void VGA_WritePixel(unsigned color, unsigned page, unsigned col, unsigned row) { int off; int bits; int pos; /* Calculate CGA byte offset */ char *data = vga_fb_window_data; off = row & 1 ? (8 * 1024) : 0; off += (80 * (row/2)); off += col/4; /* Calculate bits offset */ pos = 6 - (col%4 * 2); /* Clear current data */ bits = 0x03 << pos; data[off] &= ~bits; /* Set new data */ bits = color << pos; data[off] |= bits; } /*** TEXT MODE ***/ /* prepare the text mode video memory copy that is used to only * update the video memory line that did get updated. */ static void VGA_PrepareVideoMemCopy(unsigned Xres, unsigned Yres) { char *p, *p2; unsigned int i; /* * Allocate space for char + attr. */ if (vga_text_old) vga_text_old = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, vga_text_old, Xres * Yres * 2 ); else vga_text_old = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, Xres * Yres * 2 ); p = VGA_AlphaBuffer(); p2 = vga_text_old; /* make sure the video mem copy contains the exact opposite of our * actual text mode memory area to make sure the screen * does get updated fully initially */ for (i=0; i < Xres*Yres*2; i++) *p2++ = *p++ ^ 0xff; /* XOR it */ } /********************************************************************** * VGA_SetAlphaMode * * Set VGA emulation to text mode. */ void VGA_SetAlphaMode(unsigned Xres,unsigned Yres) { VGA_Exit(); VGA_DeinstallTimer(); VGA_PrepareVideoMemCopy(Xres, Yres); vga_text_width = Xres; vga_text_height = Yres; if (vga_text_x >= vga_text_width || vga_text_y >= vga_text_height) VGA_SetCursorPos(0,0); if(vga_text_console) { COORD size; size.X = Xres; size.Y = Yres; SetConsoleScreenBufferSize( VGA_AlphaConsole(), size ); /* poll every 30ms (33fps should provide adequate responsiveness) */ VGA_InstallTimer(30); } } /********************************************************************** * VGA_InitAlphaMode * * Initialize VGA text mode handling and return default text mode. * This function does not set VGA emulation to text mode. */ void VGA_InitAlphaMode(unsigned*Xres,unsigned*Yres) { CONSOLE_SCREEN_BUFFER_INFO info; if(GetConsoleScreenBufferInfo( VGA_AlphaConsole(), &info )) { vga_text_console = TRUE; vga_text_x = info.dwCursorPosition.X; vga_text_y = info.dwCursorPosition.Y; vga_text_attr = info.wAttributes; *Xres = info.dwSize.X; *Yres = info.dwSize.Y; } else { vga_text_console = FALSE; vga_text_x = 0; vga_text_y = 0; vga_text_attr = 0x0f; *Xres = 80; *Yres = 25; } } /********************************************************************** * VGA_GetAlphaMode * * Get current text mode. Returns TRUE and sets resolution if * any VGA text mode has been initialized. */ BOOL VGA_GetAlphaMode(unsigned*Xres,unsigned*Yres) { if (vga_text_width != 0 && vga_text_height != 0) { *Xres = vga_text_width; *Yres = vga_text_height; return TRUE; } else return FALSE; } void VGA_SetCursorShape(unsigned char start_options, unsigned char end) { CONSOLE_CURSOR_INFO cci; /* standard cursor settings: * 0x0607 == CGA, 0x0b0c == monochrome, 0x0d0e == EGA/VGA */ /* calculate percentage from bottom - assuming VGA (bottom 0x0e) */ cci.dwSize = ((end & 0x1f) - (start_options & 0x1f))/0x0e * 100; if (!cci.dwSize) cci.dwSize++; /* NULL cursor would make SCCI() fail ! */ cci.bVisible = ((start_options & 0x60) != 0x20); /* invisible ? */ SetConsoleCursorInfo(VGA_AlphaConsole(),&cci); } void VGA_SetCursorPos(unsigned X,unsigned Y) { vga_text_x = X; vga_text_y = Y; } void VGA_GetCursorPos(unsigned*X,unsigned*Y) { if (X) *X = vga_text_x; if (Y) *Y = vga_text_y; } static void VGA_PutCharAt(unsigned x, unsigned y, BYTE ascii, int attr) { const VGA_MODE *ModeInfo = VGA_GetModeInfo(VGA_CurrentMode); if ( ModeInfo->ModeType == TEXT ) { char *dat = VGA_AlphaBuffer() + ((vga_text_width * y + x) * 2); dat[0] = ascii; if (attr>=0) dat[1] = attr; } else { FIXME("Write %c at (%i,%i) - not yet supported in graphic modes.\n", (char)ascii, x, y); } } void VGA_WriteChars(unsigned X,unsigned Y,unsigned ch,int attr,int count) { EnterCriticalSection(&vga_lock); while (count--) VGA_PutCharAt(X + count, Y, ch, attr); LeaveCriticalSection(&vga_lock); } void VGA_PutChar(BYTE ascii) { DWORD w; EnterCriticalSection(&vga_lock); switch(ascii) { case '\b': if (vga_text_x) { vga_text_x--; VGA_PutCharAt(vga_text_x, vga_text_y, ' ', 0); } break; case '\t': vga_text_x += ((vga_text_x + 8) & ~7) - vga_text_x; break; case '\n': vga_text_y++; vga_text_x = 0; break; case '\a': break; case '\r': vga_text_x = 0; break; default: VGA_PutCharAt(vga_text_x, vga_text_y, ascii, vga_text_attr); vga_text_x++; } if (vga_text_x >= vga_text_width) { vga_text_x = 0; vga_text_y++; } if (vga_text_y >= vga_text_height) { vga_text_y = vga_text_height - 1; VGA_ScrollUpText( 0, 0, vga_text_height - 1, vga_text_width - 1, 1, vga_text_attr ); } /* * If we don't have a console, write directly to standard output. */ if(!vga_text_console) WriteFile(VGA_AlphaConsole(), &ascii, 1, &w, NULL); LeaveCriticalSection(&vga_lock); } void VGA_ClearText(unsigned row1, unsigned col1, unsigned row2, unsigned col2, BYTE attr) { unsigned x, y; const VGA_MODE *ModeInfo; EnterCriticalSection(&vga_lock); ModeInfo = VGA_GetModeInfo(VGA_CurrentMode); if (ModeInfo->ModeType != TEXT) { FIXME("not yet supported in graphic modes.\n"); LeaveCriticalSection(&vga_lock); return; } for(y=row1; y<=row2; y++) for(x=col1; x<=col2; x++) VGA_PutCharAt(x, y, 0x20, attr); LeaveCriticalSection(&vga_lock); } void VGA_ScrollUpText(unsigned row1, unsigned col1, unsigned row2, unsigned col2, unsigned lines, BYTE attr) { char *buffer = VGA_AlphaBuffer(); unsigned y; EnterCriticalSection(&vga_lock); /* * Scroll buffer. */ for (y = row1; y <= row2 - lines; y++) memmove( buffer + col1 + y * vga_text_width * 2, buffer + col1 + (y + lines) * vga_text_width * 2, (col2 - col1 + 1) * 2 ); /* * Fill exposed lines. */ for (y = max(row1, row2 - lines + 1); y <= row2; y++) VGA_WriteChars( col1, y, ' ', attr, col2 - col1 + 1 ); LeaveCriticalSection(&vga_lock); } void VGA_ScrollDownText(unsigned row1, unsigned col1, unsigned row2, unsigned col2, unsigned lines, BYTE attr) { char *buffer = VGA_AlphaBuffer(); unsigned y; EnterCriticalSection(&vga_lock); /* * Scroll buffer. */ for (y = row2; y >= row1 + lines; y--) memmove( buffer + col1 + y * vga_text_width * 2, buffer + col1 + (y - lines) * vga_text_width * 2, (col2 - col1 + 1) * 2 ); /* * Fill exposed lines. */ for (y = row1; y <= min(row1 + lines - 1, row2); y++) VGA_WriteChars( col1, y, ' ', attr, col2 - col1 + 1 ); LeaveCriticalSection(&vga_lock); } void VGA_GetCharacterAtCursor(BYTE *ascii, BYTE *attr) { char *dat; dat = VGA_AlphaBuffer() + ((vga_text_width * vga_text_y + vga_text_x) * 2); *ascii = dat[0]; *attr = dat[1]; } /*** CONTROL ***/ /* FIXME: optimize by doing this only if the data has actually changed * (in a way similar to DIBSection, perhaps) */ static void VGA_Poll_Graphics(void) { unsigned int Pitch, Height, Width, X, Y; char *surf; BYTE *dat = vga_fb_data + vga_fb_offset; int bpp = (vga_fb_depth + 7) / 8; surf = VGA_Lock(&Pitch,&Height,&Width,NULL); if (!surf) return; /* * Synchronize framebuffer contents. */ if (!(VGA_CurrentMode & 0x4000) && (vga_fb_window != -1)) VGA_SyncWindow( TRUE ); /* * CGA framebuffer (160x200) - CGA_ColorComposite, special subtype of mode 6 * This buffer is encoded as following: * - 4 bit pr. pixel, 2 pixels per byte * - 80 bytes per row * - Every second line has an offset of 8096 */ if(vga_fb_depth == 4 && vga_fb_width == 160 && vga_fb_height == 200){ FIXME("\n"); WORD off = 0; BYTE bits = 4; BYTE value; for(Y=0; Y> bits) & 0xF; surf[(X*4)+0] = value; surf[(X*4)+1] = value; surf[(X*4)+2] = value; surf[(X*4)+3] = value; surf[(X*4)+Pitch+0] = value; surf[(X*4)+Pitch+1] = value; surf[(X*4)+Pitch+2] = value; surf[(X*4)+Pitch+3] = value; bits -= 4; bits &= 7; } } } /* * CGA framebuffer (320x200) * This buffer is encoded as following: * - 2 bits per color, 4 pixels per byte * - 80 bytes per row * - Every second line has an offset of 8096 */ else if(vga_fb_depth == 2 && vga_fb_width == 320 && vga_fb_height == 200){ FIXME("\n"); WORD off = 0; BYTE bits = 6; BYTE value; /* Iterate over the rows */ for(Y=0; Y> bits) & 0x3; surf[(X*2)] = value; surf[(X*2)+1] = value; surf[(X*2)+Pitch] = value; surf[(X*2)+Pitch+1] = value; bits -= 2; bits &= 7; } } } /* * Double VGA framebuffer (320x200 -> 640x400), if needed. */ else if(Height >= 2 * vga_fb_height && Width >= 2 * vga_fb_width && bpp == 1) { FIXME("\n"); for (Y=0; Y wc) { wc = cp932_table[wc]; } ch_char[char_x] = wc; ch[X].Char.UnicodeChar = wc; } else { lead = TRUE; } } char_x++; } ch_char[char_x] = 0; dest.Top = Y; dest.Bottom = Y; if (is_raster_font) { WriteConsoleOutputCharacterW(con, ch_char, char_x, coord, &written); WriteConsoleOutputAttribute(con, ch_attr, vga_text_width, coord, &written); } else { dest.Left = 0; dest.Right = vga_text_width + 1; WriteConsoleOutputW(con, ch, siz, off, &dest); } memcpy(old, dat, vga_text_width * 2); } /* advance to next text line */ dat += vga_text_width * 2; old += vga_text_width * 2; } return; } /* copy from virtual VGA frame buffer to console */ for (Y=0; YXres, par->Yres }; if (par->Xres == 0) return; if (vga_hwnd) return 0; wc.style = CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE | CS_OWNDC; wc.lpfnWndProc = VGA_WindowProc; wc.hbrBackground = COLOR_WINDOW + 1; wc.hCursor = LoadCursorA(NULL, IDC_ARROW); wc.hInstance = GetModuleHandleA(NULL); wc.lpszClassName = "VGA"; RegisterClassA(&wc); AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW | WS_VISIBLE, FALSE); vga_hwnd = CreateWindowExA(0, "VGA", "VGA", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, rect.right - rect.left, rect.bottom - rect.top, 0, 0, 0, NULL); if (!vga_hwnd) { ERR("Failed to create VGA window.\n"); return; } vga_dc = CreateCompatibleDC(GetDC(vga_hwnd)); vga_bitmap = CreateCompatibleBitmap(GetDC(NULL), par->Xres, par->Yres); SelectObject(vga_dc, vga_bitmap); if (!vga_fb_data) { vga_fb_data = VirtualAlloc(NULL, 4*1024*1024, MEM_COMMIT, PAGE_READWRITE); vga_fb_size = 4*1024*1024; // enough to fix largest resolution } if (!vga_bitmap) { ERR("Failed to create vga_bitmap\n"); return; } return 0; } static void CALLBACK VGA_Poll( LPVOID arg, DWORD low, DWORD high ) { MSG msg; if (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessageW(&msg); } EnterCriticalSection(&vga_lock); init_vga_window(); if (vga_hwnd) VGA_Poll_Graphics(); else VGA_Poll_Text(); /* * Fake start of retrace. */ vga_retrace_vertical = TRUE; LeaveCriticalSection(&vga_lock); } static BYTE palreg,palcnt; static PALETTEENTRY paldat; void VGA_ioport_out( WORD port, BYTE val ) { switch (port) { /* General Register - Feature Control */ case 0x3ba: FIXME("Unsupported VGA register: general register - feature control 0x%04x (value 0x%02x)\n", port, val); break; /* Attribute Controller - Address/Other */ case 0x3c0: if (vga_address_3c0) vga_index_3c0 = val; else FIXME("Unsupported index, VGA attribute controller register 0x3c0: 0x%02x (value 0x%02x)\n", vga_index_3c0, val); vga_address_3c0 = !vga_address_3c0; break; /* General Register - Misc output */ case 0x3c2: FIXME("Unsupported VGA register: general register - misc output 0x%04x (value 0x%02x)\n", port, val); break; /* General Register - Video subsystem enable */ case 0x3c3: FIXME("Unsupported VGA register: general register - video subsystem enable 0x%04x (value 0x%02x)\n", port, val); break; /* Sequencer Register - Address */ case 0x3c4: vga_index_3c4 = val; break; /* Sequencer Register - Other */ case 0x3c5: switch(vga_index_3c4) { case 0x04: /* Sequencer: Memory Mode Register */ if(vga_fb_depth == 8) VGA_SetWindowStart((val & 8) ? 0 : -1); else FIXME("Memory Mode Register not supported in this mode.\n"); break; default: FIXME("Unsupported index, VGA sequencer register 0x3c4: 0x%02x (value 0x%02x)\n", vga_index_3c4, val); } break; case 0x3c8: palreg=val; palcnt=0; break; case 0x3c9: ((BYTE*)&paldat)[palcnt++]=val << 2; if (palcnt==3) { VGA_SetPalette(&paldat,palreg++,1); palcnt=0; } break; /* Graphics Controller Register - Address */ case 0x3ce: vga_index_3ce = val; break; /* Graphics Controller Register - Other */ case 0x3cf: FIXME("Unsupported index, VGA graphics controller register - other 0x3ce: 0x%02x (value 0x%02x)\n", vga_index_3ce, val); break; /* CRT Controller Register - Index (MDA) */ case 0x3b4: /* CRT Controller Register - Index (CGA) */ case 0x3d4: vga_index_3d4 = val; break; /* CRT Controller Register - Other (MDA) */ case 0x3b5: /* CRT Controller Register - Other (CGA) */ case 0x3d5: FIXME("Unsupported index, VGA crt controller register 0x3b4/0x3d4: 0x%02x (value 0x%02x)\n", vga_index_3d4, val); break; /* Mode control register - 6845 Motorola (MDA) */ case 0x3b8: /* Mode control register - 6845 Motorola (CGA) */ case 0x3d8: /* * xxxxxxx1 = 80x25 text * xxxxxxx0 = 40x25 text (default) * xxxxxx1x = graphics (320x200) * xxxxxx0x = text * xxxxx1xx = B/W * xxxxx0xx = color * xxxx1xxx = enable video signal * xxx1xxxx = 640x200 B/W graphics * xx1xxxxx = blink */ /* check bits 6 and 7 */ if (val & 0xC0) { FIXME("Unsupported value, VGA register 0x3d8: 0x%02x - bits 7 and 6 not supported.\n", val); } /* check bits 5 - blink on */ if (val & 0x20) { FIXME("Unsupported value, VGA register 0x3d8: 0x%02x (bit 5) - blink is not supported.\n", val); } /* Enable Video Signal (bit 3) - Set the enabled bit */ VGA_SetEnabled((val & 0x08) != 0); /* xxx1x010 - Detect 160x200, 16 color mode (CGA composite) */ if( (val & 0x17) == 0x12 ) { /* Switch to 160x200x4 composite mode - special case of mode 6 */ CGA_ColorComposite = TRUE; VGA_SetMode(6); } else { /* turn off composite colors otherwise, including 320x200 (80x200 16 color) */ CGA_ColorComposite = FALSE; } /* xxx0x100 - Detect VGA mode 0 */ if( (val & 0x17) == 0x04 ) { VGA_SetMode(0); } /* xxx0x000 - Detect VGA mode 1 */ else if( (val & 0x17) == 0x00 ) { VGA_SetMode(1); } /* xxx0x101 - Detect VGA mode 2 */ else if( (val & 0x17) == 0x05 ) { VGA_SetMode(2); } /* xxx0x001 - Detect VGA mode 3 */ else if( (val & 0x17) == 0x01 ) { VGA_SetMode(3); } /* xxx0x010 - Detect VGA mode 4 */ else if( (val & 0x17) == 0x02 ) { VGA_SetMode(4); } /* xxx0x110 - Detect VGA mode 5 */ else if( (val & 0x17) == 0x06 ) { VGA_SetMode(5); } /* xxx1x110 - Detect VGA mode 6 */ else if( (val & 0x17) == 0x16 ) { VGA_SetMode(6); } /* unsupported mode */ else { FIXME("Unsupported value, VGA register 0x3d8: 0x%02x - unrecognized MDA/CGA mode\n", val); /* Set the enabled bit */ } break; /* Colour control register (CGA) */ case 0x3d9: /* Set bright */ VGA_SetBright((val & 0x10) != 0); /* Set palette index */ VGA_SetPaletteIndex((val & 0x20) != 0); /* Now update the palette */ VGA_UpdatePalette(); break; default: FIXME("Unsupported VGA register: 0x%04x (value 0x%02x)\n", port, val); } } BYTE VGA_ioport_in( WORD port ) { BYTE ret; switch (port) { /* Attribute Controller - Other */ case 0x3c1: FIXME("Unsupported index, VGA attribute controller register 0x3c0: 0x%02x\n", vga_index_3c0); return 0xff; /* General Register - Input status 0 */ case 0x3c2: ret=0xff; FIXME("Unsupported VGA register: general register - input status 0 0x%04x\n", port); break; /* General Register - Video subsystem enable */ case 0x3c3: ret=0xff; FIXME("Unsupported VGA register: general register - video subsystem enable 0x%04x\n", port); break; /* Sequencer Register - Other */ case 0x3c5: switch(vga_index_3c4) { case 0x04: /* Sequencer: Memory Mode Register */ return (VGA_GetWindowStart() == -1) ? 0xf7 : 0xff; default: FIXME("Unsupported index, register 0x3c4: 0x%02x\n", vga_index_3c4); return 0xff; } /* General Register - DAC State */ case 0x3c7: ret=0xff; FIXME("Unsupported VGA register: general register - DAC State 0x%04x\n", port); break; /* General Register - Feature control */ case 0x3ca: ret=0xff; FIXME("Unsupported VGA register: general register - Feature control 0x%04x\n", port); break; /* General Register - Misc output */ case 0x3cc: ret=0xff; FIXME("Unsupported VGA register: general register - Feature control 0x%04x\n", port); break; /* Graphics Controller Register - Other */ case 0x3cf: FIXME("Unsupported index, register 0x3ce: 0x%02x\n", vga_index_3ce); return 0xff; /* CRT Controller Register - Other (MDA) */ case 0x3b5: /* CRT Controller Register - Other (CGA) */ case 0x3d5: FIXME("Unsupported index, VGA crt controller register 0x3b4/0x3d4: 0x%02x\n", vga_index_3d4); return 0xff; /* General Register - Input status 1 (MDA) */ case 0x3ba: /* General Register - Input status 1 (CGA) */ case 0x3da: /* * Read from this register resets register 0x3c0 address flip-flop. */ vga_address_3c0 = TRUE; /* * Read from this register returns following bits: * xxxx1xxx = Vertical retrace in progress if set. * xxxxx1xx = Light pen switched on. * xxxxxx1x = Light pen trigger set. * xxxxxxx1 = Either vertical or horizontal retrace * in progress if set. */ ret = 0; if (vga_retrace_vertical) ret |= 9; if (vga_retrace_horizontal) ret |= 3; /* * If VGA mode has been set, vertical retrace is * turned on once a frame and cleared after each read. * This might cause applications that synchronize with * vertical retrace to actually skip one frame but that * is probably not a problem. * * If no VGA mode has been set, vertical retrace is faked * by toggling the value after every read. */ if (VGA_IsTimerRunning()) vga_retrace_vertical = FALSE; else vga_retrace_vertical = !vga_retrace_vertical; /* * Toggle horizontal retrace. */ vga_retrace_horizontal = !vga_retrace_horizontal; break; default: ret=0xff; FIXME("Unsupported VGA register: 0x%04x\n", port); } return ret; } void VGA_Clean(void) { VGA_Exit(); VGA_DeinstallTimer(); } ================================================ FILE: krnl386/vga.h ================================================ /* * VGA emulation * * Copyright 1998 Ove Kåven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_VGA_H #define __WINE_VGA_H #include #include "windef.h" #include "winbase.h" #include "wingdi.h" /* * VGA VESA definitions */ /* mode descriptor */ enum modetype {TEXT=0, GRAPHIC=1}; /* Wine internal information about video modes */ typedef struct { WORD Mode; BOOL ModeType; WORD TextCols; /* columns of text in display */ WORD TextRows; /* rows of text in display */ WORD CharWidth; WORD CharHeight; WORD Width; /* width of display in pixels */ WORD Height; /* height of display in pixels */ WORD Depth; /* bits per pixel */ WORD Colors; /* total available colors */ WORD ScreenPages; BOOL Supported; } VGA_MODE; extern const VGA_MODE VGA_modelist[] DECLSPEC_HIDDEN; /* all vga modes */ const VGA_MODE *VGA_GetModeInfo(WORD mode) DECLSPEC_HIDDEN; BOOL VGA_SetMode(WORD mode) DECLSPEC_HIDDEN; /* graphics mode */ BOOL VGA_GetMode(unsigned *Height, unsigned *Width, unsigned *Depth) DECLSPEC_HIDDEN; void VGA_SetPalette(PALETTEENTRY*pal,int start,int len) DECLSPEC_HIDDEN; void VGA_SetColor16(int reg,int color) DECLSPEC_HIDDEN; char VGA_GetColor16(int reg) DECLSPEC_HIDDEN; void VGA_Set16Palette(char *Table) DECLSPEC_HIDDEN; void VGA_Get16Palette(char *Table) DECLSPEC_HIDDEN; void VGA_SetWindowStart(int start) DECLSPEC_HIDDEN; int VGA_GetWindowStart(void) DECLSPEC_HIDDEN; void VGA_ShowMouse(BOOL show) DECLSPEC_HIDDEN; void VGA_UpdatePalette(void) DECLSPEC_HIDDEN; void VGA_SetPaletteIndex(unsigned index) DECLSPEC_HIDDEN; void VGA_SetBright(BOOL bright) DECLSPEC_HIDDEN; void VGA_WritePixel(unsigned color, unsigned page, unsigned col, unsigned row) DECLSPEC_HIDDEN; /* text mode */ void VGA_InitAlphaMode(unsigned*Xres,unsigned*Yres) DECLSPEC_HIDDEN; void VGA_SetAlphaMode(unsigned Xres,unsigned Yres) DECLSPEC_HIDDEN; BOOL VGA_GetAlphaMode(unsigned*Xres,unsigned*Yres) DECLSPEC_HIDDEN; void VGA_SetCursorShape(unsigned char start_options,unsigned char end) DECLSPEC_HIDDEN; void VGA_SetCursorPos(unsigned X,unsigned Y) DECLSPEC_HIDDEN; void VGA_GetCursorPos(unsigned*X,unsigned*Y) DECLSPEC_HIDDEN; void VGA_WriteChars(unsigned X,unsigned Y,unsigned ch,int attr,int count) DECLSPEC_HIDDEN; void VGA_PutChar(BYTE ascii) DECLSPEC_HIDDEN; void VGA_ClearText(unsigned row1, unsigned col1, unsigned row2, unsigned col2, BYTE attr) DECLSPEC_HIDDEN; void VGA_ScrollUpText(unsigned row1, unsigned col1, unsigned row2, unsigned col2, unsigned lines, BYTE attr) DECLSPEC_HIDDEN; void VGA_ScrollDownText(unsigned row1, unsigned col1, unsigned row2, unsigned col2, unsigned lines, BYTE attr) DECLSPEC_HIDDEN; void VGA_GetCharacterAtCursor(BYTE *ascii, BYTE *attr) DECLSPEC_HIDDEN; /* control */ void VGA_ioport_out(WORD port, BYTE val) DECLSPEC_HIDDEN; BYTE VGA_ioport_in(WORD port) DECLSPEC_HIDDEN; void VGA_Clean(void) DECLSPEC_HIDDEN; #endif /* __WINE_VGA_H */ ================================================ FILE: krnl386/vxd.c ================================================ /* * Win32 VxD functions * * Copyright 1998 Marcus Meissner * Copyright 1998 Ulrich Weigand * Copyright 1998 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #ifdef HAVE_UNISTD_H # include #endif #include #ifdef HAVE_SYS_STAT_H # include #endif #include #include #include #include "ntstatus.h" #define WIN32_NO_STATUS #define NONAMELESSUNION #include "windef.h" #include "winbase.h" #include "winerror.h" #include "winternl.h" #include "winioctl.h" #include "kernel16_private.h" #include "dosexe.h" #include "wine/library.h" #include "wine/unicode.h" #include "wine/server.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(vxd); typedef DWORD (WINAPI *VxDCallProc)(DWORD, CONTEXT *); typedef BOOL (WINAPI *DeviceIoProc)(DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPOVERLAPPED); struct vxd_module { LARGE_INTEGER index; HANDLE handle; HMODULE module; DeviceIoProc proc; }; struct vxdcall_service { WCHAR name[12]; DWORD service; HMODULE module; VxDCallProc proc; }; #define MAX_VXD_MODULES 32 static struct vxd_module vxd_modules[MAX_VXD_MODULES]; static struct vxdcall_service vxd_services[] = { { {'v','m','m','.','v','x','d',0}, 0x0001, NULL, NULL }, { {'v','w','i','n','3','2','.','v','x','d',0}, 0x002a, NULL, NULL } }; #define W32S_APP2WINE(addr) ((addr)? (DWORD)(addr) + W32S_offset : 0) #define W32S_WINE2APP(addr) ((addr)? (DWORD)(addr) - W32S_offset : 0) #define VXD_BARF(context,name) \ TRACE( "vxd %s: unknown/not implemented parameters:\n" \ "vxd %s: AX %04x, BX %04x, CX %04x, DX %04x, " \ "SI %04x, DI %04x, DS %04x, ES %04x\n", \ (name), (name), AX_reg(context), BX_reg(context), \ CX_reg(context), DX_reg(context), SI_reg(context), \ DI_reg(context), (WORD)context->SegDs, (WORD)context->SegEs ) static CRITICAL_SECTION vxd_section; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &vxd_section, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": vxd_section") } }; static CRITICAL_SECTION vxd_section = { &critsect_debug, -1, 0, 0, 0, 0 }; static UINT W32S_offset; static WORD VXD_WinVersion(void) { WORD version = LOWORD(GetVersion16()); return (version >> 8) | (version << 8); } /* create a file handle to represent a VxD, by opening a dummy file in the wineserver directory */ static HANDLE open_vxd_handle( LPCWSTR name ) { static const WCHAR prefixW[] = {'\\','?','?','\\','u','n','i','x'}; const char *dir = wine_get_server_dir(); int len; HANDLE ret; NTSTATUS status; OBJECT_ATTRIBUTES attr; UNICODE_STRING nameW; IO_STATUS_BLOCK io; len = MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, NULL, 0 ); nameW.Length = sizeof(prefixW) + (len + strlenW( name )) * sizeof(WCHAR); nameW.MaximumLength = nameW.Length + sizeof(WCHAR); if (!(nameW.Buffer = HeapAlloc( GetProcessHeap(), 0, nameW.MaximumLength ))) { SetLastError( ERROR_NOT_ENOUGH_MEMORY ); return 0; } memcpy( nameW.Buffer, prefixW, sizeof(prefixW) ); MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, nameW.Buffer + ARRAY_SIZE(prefixW), len ); len += ARRAY_SIZE(prefixW); nameW.Buffer[len-1] = '/'; strcpyW( nameW.Buffer + len, name ); attr.Length = sizeof(attr); attr.RootDirectory = 0; attr.Attributes = 0; attr.ObjectName = &nameW; attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL; status = NtCreateFile( &ret, SYNCHRONIZE, &attr, &io, NULL, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_ALERT, NULL, 0 ); if (status) { ret = 0; SetLastError( RtlNtStatusToDosError(status) ); } RtlFreeUnicodeString( &nameW ); return ret; } /* retrieve the DeviceIoControl function for a Vxd given a file handle */ DeviceIoProc __wine_vxd_get_proc( HANDLE handle ) { DeviceIoProc ret = NULL; int status, i; IO_STATUS_BLOCK io; FILE_INTERNAL_INFORMATION info; status = NtQueryInformationFile( handle, &io, &info, sizeof(info), FileInternalInformation ); if (status) { SetLastError( RtlNtStatusToDosError(status) ); return NULL; } RtlEnterCriticalSection( &vxd_section ); for (i = 0; i < MAX_VXD_MODULES; i++) { if (!vxd_modules[i].module) break; if (vxd_modules[i].index.QuadPart == info.IndexNumber.QuadPart) { if (!(ret = vxd_modules[i].proc)) SetLastError( ERROR_INVALID_FUNCTION ); goto done; } } /* FIXME: Here we could go through the directory to find the VxD name and load it. */ /* Let's wait to find out if there are actually apps out there that try to share */ /* VxD handles between processes, before we go to the trouble of implementing it. */ ERR( "handle %p not found in module list, inherited from another process?\n", handle ); done: RtlLeaveCriticalSection( &vxd_section ); return ret; } /* load a VxD and return a file handle to it */ HANDLE __wine_vxd_open( LPCWSTR filenameW, DWORD access, SECURITY_ATTRIBUTES *sa ) { static const WCHAR dotVxDW[] = {'.','v','x','d',0}; int i; HANDLE handle; HMODULE module; WCHAR *p, name[16]; /* normalize the filename */ if (strlenW( filenameW ) >= ARRAY_SIZE(name) - 4 || strchrW( filenameW, '/' ) || strchrW( filenameW, '\\' )) { SetLastError( ERROR_FILE_NOT_FOUND ); return 0; } strcpyW( name, filenameW ); strlwrW( name ); p = strchrW( name, '.' ); if (!p) strcatW( name, dotVxDW ); else if (strcmpiW( p, dotVxDW )) /* existing extension has to be .vxd */ { SetLastError( ERROR_FILE_NOT_FOUND ); return 0; } /* try to load the module first */ if (!(module = LoadLibraryW( name ))) { FIXME( "Unknown/unsupported VxD %s. Try setting Windows version to 'nt40' or 'win31'.\n", debugstr_w(name) ); SetLastError( ERROR_FILE_NOT_FOUND ); return 0; } /* register the module in the global list if necessary */ RtlEnterCriticalSection( &vxd_section ); for (i = 0; i < MAX_VXD_MODULES; i++) { if (vxd_modules[i].module == module) { handle = vxd_modules[i].handle; goto done; /* already registered */ } if (!vxd_modules[i].module) /* new one, register it */ { IO_STATUS_BLOCK io; FILE_INTERNAL_INFORMATION info; /* get a file handle to the dummy file */ if (!(handle = open_vxd_handle( name ))) { FreeLibrary( module ); goto done; } if (!NtQueryInformationFile( handle, &io, &info, sizeof(info), FileInternalInformation )) vxd_modules[i].index = info.IndexNumber; vxd_modules[i].module = module; vxd_modules[i].handle = handle; vxd_modules[i].proc = (DeviceIoProc)GetProcAddress( module, "DeviceIoControl" ); goto done; } } ERR("too many open VxD modules, please report\n" ); FreeLibrary( module ); handle = 0; done: RtlLeaveCriticalSection( &vxd_section ); if (!DuplicateHandle( GetCurrentProcess(), handle, GetCurrentProcess(), &handle, 0, (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle), DUP_HANDLE_SAME_ACCESS )) handle = 0; return handle; } /*********************************************************************** * VxDCall0 (KERNEL32.1) * VxDCall1 (KERNEL32.2) * VxDCall2 (KERNEL32.3) * VxDCall3 (KERNEL32.4) * VxDCall4 (KERNEL32.5) * VxDCall5 (KERNEL32.6) * VxDCall6 (KERNEL32.7) * VxDCall7 (KERNEL32.8) * VxDCall8 (KERNEL32.9) */ void WINAPI DECLSPEC_HIDDEN __regs_VxDCall( CONTEXT *context ) { unsigned int i; VxDCallProc proc = NULL; DWORD service = stack32_pop( context ); RtlEnterCriticalSection( &vxd_section ); for (i = 0; i < ARRAY_SIZE(vxd_services); i++) { if (HIWORD(service) != vxd_services[i].service) continue; if (!vxd_services[i].module) /* need to load it */ { if ((vxd_services[i].module = LoadLibraryW( vxd_services[i].name ))) vxd_services[i].proc = (VxDCallProc)GetProcAddress( vxd_services[i].module, "VxDCall" ); } proc = vxd_services[i].proc; break; } RtlLeaveCriticalSection( &vxd_section ); if (proc) context->Eax = proc( service, context ); else { FIXME( "Unknown/unimplemented VxD (%08x)\n", service); context->Eax = 0xffffffff; /* FIXME */ } } #ifdef _MSC_VER DEFINE_REGS_ENTRYPOINT(aa0, 0); DEFINE_REGS_ENTRYPOINT(aa1, 1); DEFINE_REGS_ENTRYPOINT(aa2, 2); DEFINE_REGS_ENTRYPOINT(aa3, 3); DEFINE_REGS_ENTRYPOINT(aa4, 4); DEFINE_REGS_ENTRYPOINT(aa5, 5); DEFINE_REGS_ENTRYPOINT( VxDCall ) #else DEFINE_REGS_ENTRYPOINT( VxDCall ) #endif /*********************************************************************** * __wine_vxd_vmm (WPROCS.401) */ void WINAPI __wine_vxd_vmm ( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] VMM\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; case 0x026d: /* Get_Debug_Flag '/m' */ case 0x026e: /* Get_Debug_Flag '/n' */ SET_AL( context, 0 ); RESET_CFLAG(context); break; default: VXD_BARF( context, "VMM" ); } } /*********************************************************************** * __wine_vxd_pagefile (WPROCS.433) */ void WINAPI __wine_vxd_pagefile( CONTEXT *context ) { unsigned service = AX_reg(context); /* taken from Ralf Brown's Interrupt List */ TRACE("[%04x] PageFile\n", (UINT16)service ); switch(service) { case 0x00: /* get version, is this windows version? */ TRACE("returning version\n"); SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; case 0x01: /* get swap file info */ TRACE("VxD PageFile: returning swap file info\n"); SET_AX( context, 0x00 ); /* paging disabled */ context->Ecx = 0; /* maximum size of paging file */ /* FIXME: do I touch DS:SI or DS:DI? */ RESET_CFLAG(context); break; case 0x02: /* delete permanent swap on exit */ TRACE("VxD PageFile: supposed to delete swap\n"); RESET_CFLAG(context); break; case 0x03: /* current temporary swap file size */ TRACE("VxD PageFile: what is current temp. swap size\n"); RESET_CFLAG(context); break; case 0x04: /* read or write?? INTERRUP.D */ case 0x05: /* cancel?? INTERRUP.D */ case 0x06: /* test I/O valid INTERRUP.D */ default: VXD_BARF( context, "pagefile" ); break; } } /*********************************************************************** * __wine_vxd_reboot (WPROCS.409) */ void WINAPI __wine_vxd_reboot( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] Reboot\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; default: VXD_BARF( context, "REBOOT" ); } } /*********************************************************************** * __wine_vxd_vdd (WPROCS.410) */ void WINAPI __wine_vxd_vdd( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] VDD\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; default: VXD_BARF( context, "VDD" ); } } /*********************************************************************** * __wine_vxd_vmd (WPROCS.412) */ void WINAPI __wine_vxd_vmd( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] VMD\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; default: VXD_BARF( context, "VMD" ); } } /*********************************************************************** * __wine_vxd_vxdloader (WPROCS.439) */ void WINAPI __wine_vxd_vxdloader( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] VXDLoader\n", (UINT16)service); switch (service) { case 0x0000: /* get version */ TRACE("returning version\n"); SET_AX( context, 0x0000 ); SET_DX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; case 0x0001: /* load device */ FIXME("load device %04x:%04x (%s)\n", context->SegDs, DX_reg(context), debugstr_a(MapSL(MAKESEGPTR(context->SegDs, DX_reg(context))))); SET_AX( context, 0x0000 ); context->SegEs = 0x0000; SET_DI( context, 0x0000 ); RESET_CFLAG(context); break; case 0x0002: /* unload device */ FIXME("unload device (%08x)\n", context->Ebx); SET_AX( context, 0x0000 ); RESET_CFLAG(context); break; default: VXD_BARF( context, "VXDLDR" ); SET_AX( context, 0x000B ); /* invalid function number */ SET_CFLAG(context); break; } } /*********************************************************************** * __wine_vxd_shell (WPROCS.423) */ void WINAPI __wine_vxd_shell( CONTEXT *context ) { unsigned service = DX_reg(context); TRACE("[%04x] Shell\n", (UINT16)service); switch (service) /* Ralf Brown says EDX, but I use DX instead */ { case 0x0000: TRACE("returning version\n"); SET_AX( context, VXD_WinVersion() ); context->Ebx = 1; /* system VM Handle */ break; case 0x0001: case 0x0002: case 0x0003: /* SHELL_SYSMODAL_Message ebx virtual machine handle eax message box flags ecx address of message edi address of caption return response in eax */ case 0x0004: /* SHELL_Message ebx virtual machine handle eax message box flags ecx address of message edi address of caption esi address callback edx reference data for callback return response in eax */ case 0x0005: VXD_BARF( context, "shell" ); break; case 0x0006: /* SHELL_Get_VM_State */ TRACE("VxD Shell: returning VM state\n"); /* Actually we don't, not yet. We have to return a structure * and I am not to sure how to set it up and return it yet, * so for now let's do nothing. I can (hopefully) get this * by the next release */ /* RESET_CFLAG(context); */ break; case 0x0007: case 0x0008: case 0x0009: case 0x000A: case 0x000B: case 0x000C: case 0x000D: case 0x000E: case 0x000F: case 0x0010: case 0x0011: case 0x0012: case 0x0013: case 0x0014: case 0x0015: case 0x0016: VXD_BARF( context, "SHELL" ); break; /* the new Win95 shell API */ case 0x0100: /* get version */ SET_AX( context, VXD_WinVersion() ); break; case 0x0104: /* retrieve Hook_Properties list */ case 0x0105: /* call Hook_Properties callbacks */ VXD_BARF( context, "SHELL" ); break; case 0x0106: /* install timeout callback */ TRACE("VxD Shell: ignoring shell callback (%d sec.)\n", context->Ebx); SET_CFLAG(context); break; case 0x0107: /* get version of any VxD */ default: VXD_BARF( context, "SHELL" ); break; } } /*********************************************************************** * __wine_vxd_comm (WPROCS.414) */ void WINAPI __wine_vxd_comm( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] Comm\n", (UINT16)service); switch (service) { case 0x0000: /* get version */ TRACE("returning version\n"); SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; case 0x0001: /* set port global */ case 0x0002: /* get focus */ case 0x0003: /* virtualise port */ default: VXD_BARF( context, "comm" ); } } /*********************************************************************** * __wine_vxd_timer (WPROCS.405) */ void WINAPI __wine_vxd_timer( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] Virtual Timer\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; case 0x0100: /* clock tick time, in 840nsecs */ context->Eax = GetTickCount(); context->Edx = context->Eax >> 22; context->Eax <<= 10; /* not very precise */ RESET_CFLAG(context); break; case 0x0101: /* current Windows time, msecs */ case 0x0102: /* current VM time, msecs */ context->Eax = GetTickCount(); break; default: VXD_BARF( context, "VTD" ); } } /*********************************************************************** * timer_thread */ static DWORD CALLBACK timer_thread( void *arg ) { DWORD *system_time = arg; for (;;) { *system_time = GetTickCount(); Sleep( 55 ); } return 0; } /*********************************************************************** * __wine_vxd_timerapi (WPROCS.1490) */ void WINAPI __wine_vxd_timerapi( CONTEXT *context ) { static WORD System_Time_Selector; unsigned service = AX_reg(context); TRACE("[%04x] TimerAPI\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; case 0x0009: /* get system time selector */ if ( !System_Time_Selector ) { HANDLE16 handle = GlobalAlloc16( GMEM_FIXED, sizeof(DWORD) ); System_Time_Selector = handle | 7; CloseHandle( CreateThread( NULL, 0, timer_thread, GlobalLock16(handle), 0, NULL ) ); } SET_AX( context, System_Time_Selector ); RESET_CFLAG(context); break; default: VXD_BARF( context, "VTDAPI" ); } } /*********************************************************************** * __wine_vxd_configmg (WPROCS.451) */ void WINAPI __wine_vxd_configmg( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] ConfigMG\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; default: VXD_BARF( context, "CONFIGMG" ); } } /*********************************************************************** * __wine_vxd_enable (WPROCS.455) */ void WINAPI __wine_vxd_enable( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] Enable\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; default: VXD_BARF( context, "ENABLE" ); } } /*********************************************************************** * __wine_vxd_apm (WPROCS.438) */ void WINAPI __wine_vxd_apm( CONTEXT *context ) { unsigned service = AX_reg(context); TRACE("[%04x] APM\n", (UINT16)service); switch(service) { case 0x0000: /* version */ SET_AX( context, VXD_WinVersion() ); RESET_CFLAG(context); break; default: VXD_BARF( context, "APM" ); } } /*********************************************************************** * __wine_vxd_win32s (WPROCS.445) * * This is an implementation of the services of the Win32s VxD. * Since official documentation of these does not seem to be available, * certain arguments of some of the services remain unclear. * * FIXME: The following services are currently unimplemented: * Exception handling (0x01, 0x1C) * Debugger support (0x0C, 0x14, 0x17) * Low-level memory access (0x02, 0x03, 0x0A, 0x0B) * Memory Statistics (0x1B) * * * We have a specific problem running Win32s on Linux (and probably also * the other x86 unixes), since Win32s tries to allocate its main 'flat * code/data segment' selectors with a base of 0xffff0000 (and limit 4GB). * The rationale for this seems to be that they want one the one hand to * be able to leave the Win 3.1 memory (starting with the main DOS memory) * at linear address 0, but want at other hand to have offset 0 of the * flat data/code segment point to an unmapped page (to catch NULL pointer * accesses). Hence they allocate the flat segments with a base of 0xffff0000 * so that the Win 3.1 memory area at linear address zero shows up in the * flat segments at offset 0x10000 (since linear addresses wrap around at * 4GB). To compensate for that discrepancy between flat segment offsets * and plain linear addresses, all flat pointers passed between the 32-bit * and the 16-bit parts of Win32s are shifted by 0x10000 in the appropriate * direction by the glue code (mainly) in W32SKRNL and WIN32S16. * * The problem for us is now that Linux does not allow a LDT selector with * base 0xffff0000 to be created, since it would 'see' a part of the kernel * address space. To address this problem we introduce *another* offset: * We add 0x10000 to every linear address we get as an argument from Win32s. * This means especially that the flat code/data selectors get actually * allocated with base 0x0, so that flat offsets and (real) linear addresses * do again agree! In fact, every call e.g. of a Win32s VxD service now * has all pointer arguments (which are offsets in the flat data segment) * first reduced by 0x10000 by the W32SKRNL glue code, and then again * increased by 0x10000 by *our* code. * * Note that to keep everything consistent, this offset has to be applied by * every Wine function that operates on 'linear addresses' passed to it by * Win32s. Fortunately, since Win32s does not directly call any Wine 32-bit * API routines, this affects only two locations: this VxD and the DPMI * handler. (NOTE: Should any Win32s application pass a linear address to * any routine apart from those, e.g. some other VxD handler, that code * would have to take the offset into account as well!) * * The offset is set the first time any application calls the GetVersion() * service of the Win32s VxD. (Note that the offset is never reset.) * */ void WINAPI __wine_vxd_win32s( CONTEXT *context ) { switch (AX_reg(context)) { case 0x0000: /* Get Version */ /* * Input: None * * Output: EAX: LoWord: Win32s Version (1.30) * HiWord: VxD Version (200) * * EBX: Build (172) * * ECX: ??? (1) * * EDX: Debugging Flags * * EDI: Error Flag * 0 if OK, * 1 if VMCPD VxD not found */ TRACE("GetVersion()\n"); context->Eax = VXD_WinVersion() | (200 << 16); context->Ebx = 0; context->Ecx = 0; context->Edx = 0; context->Edi = 0; /* * If this is the first time we are called for this process, * hack the memory image of WIN32S16 so that it doesn't try * to access the GDT directly ... * * The first code segment of WIN32S16 (version 1.30) contains * an unexported function somewhere between the exported functions * SetFS and StackLinearToSegmented that tries to find a selector * in the LDT that maps to the memory image of the LDT itself. * If it succeeds, it stores this selector into a global variable * which will be used to speed up execution by using this selector * to modify the LDT directly instead of using the DPMI calls. * * To perform this search of the LDT, this function uses the * sgdt and sldt instructions to find the linear address of * the (GDT and then) LDT. While those instructions themselves * execute without problem, the linear address that sgdt returns * points (at least under Linux) to the kernel address space, so * that any subsequent access leads to a segfault. * * Fortunately, WIN32S16 still contains as a fallback option the * mechanism of using DPMI calls to modify LDT selectors instead * of direct writes to the LDT. Thus we can circumvent the problem * by simply replacing the first byte of the offending function * with an 'retf' instruction. This means that the global variable * supposed to contain the LDT alias selector will remain zero, * and hence WIN32S16 will fall back to using DPMI calls. * * The heuristic we employ to _find_ that function is as follows: * We search between the addresses of the exported symbols SetFS * and StackLinearToSegmented for the byte sequence '0F 01 04' * (this is the opcode of 'sgdt [si]'). We then search backwards * from this address for the last occurrence of 'CB' (retf) that marks * the end of the preceding function. The following byte (which * should now be the first byte of the function we are looking for) * will be replaced by 'CB' (retf). * * This heuristic works for the retail as well as the debug version * of Win32s version 1.30. For versions earlier than that this * hack should not be necessary at all, since the whole mechanism * ('PERF130') was introduced only in 1.30 to improve the overall * performance of Win32s. */ if (!W32S_offset) { HMODULE16 hModule = GetModuleHandle16("win32s16"); SEGPTR func1 = (SEGPTR)GetProcAddress16(hModule, "SetFS"); SEGPTR func2 = (SEGPTR)GetProcAddress16(hModule, "StackLinearToSegmented"); if ( hModule && func1 && func2 && SELECTOROF(func1) == SELECTOROF(func2)) { BYTE *start = MapSL(func1); BYTE *end = MapSL(func2); BYTE *p, *retv = NULL; int found = 0; for (p = start; p < end; p++) if (*p == 0xCB) found = 0, retv = p; else if (*p == 0x0F) found = 1; else if (*p == 0x01 && found == 1) found = 2; else if (*p == 0x04 && found == 2) { found = 3; break; } else found = 0; if (found == 3 && retv) { TRACE("PERF130 hack: " "Replacing byte %02X at offset %04X:%04X\n", *(retv+1), SELECTOROF(func1), OFFSETOF(func1) + retv+1-start); *(retv+1) = (BYTE)0xCB; } } } /* * Mark process as Win32s, so that subsequent DPMI calls * will perform the W32S_APP2WINE/W32S_WINE2APP address shift. */ W32S_offset = 0x10000; break; case 0x0001: /* Install Exception Handling */ /* * Input: EBX: Flat address of W32SKRNL Exception Data * * ECX: LoWord: Flat Code Selector * HiWord: Flat Data Selector * * EDX: Flat address of W32SKRNL Exception Handler * (this is equal to W32S_BackTo32 + 0x40) * * ESI: SEGPTR KERNEL.HASGPHANDLER * * EDI: SEGPTR phCurrentTask (KERNEL.THHOOK + 0x10) * * Output: EAX: 0 if OK */ TRACE("[0001] EBX=%x ECX=%x EDX=%x ESI=%x EDI=%x\n", context->Ebx, context->Ecx, context->Edx, context->Esi, context->Edi); /* FIXME */ context->Eax = 0; break; case 0x0002: /* Set Page Access Flags */ /* * Input: EBX: New access flags * Bit 2: User Page if set, Supervisor Page if clear * Bit 1: Read-Write if set, Read-Only if clear * * ECX: Size of memory area to change * * EDX: Flat start address of memory area * * Output: EAX: Size of area changed */ TRACE("[0002] EBX=%x ECX=%x EDX=%x\n", context->Ebx, context->Ecx, context->Edx); /* FIXME */ context->Eax = context->Ecx; break; case 0x0003: /* Get Page Access Flags */ /* * Input: EDX: Flat address of page to query * * Output: EAX: Page access flags * Bit 2: User Page if set, Supervisor Page if clear * Bit 1: Read-Write if set, Read-Only if clear */ TRACE("[0003] EDX=%x\n", context->Edx); /* FIXME */ context->Eax = 6; break; case 0x0004: /* Map Module */ /* * Input: ECX: IMTE (offset in Module Table) of new module * * EDX: Flat address of Win32s Module Table * * Output: EAX: 0 if OK */ if (!context->Edx || CX_reg(context) == 0xFFFF) { TRACE("MapModule: Initialization call\n"); context->Eax = 0; } else { /* * Structure of a Win32s Module Table Entry: */ struct Win32sModule { DWORD flags; DWORD flatBaseAddr; LPCSTR moduleName; LPCSTR pathName; LPCSTR unknown; LPBYTE baseAddr; DWORD hModule; DWORD relocDelta; }; /* * Note: This function should set up a demand-paged memory image * of the given module. Since mmap does not allow file offsets * not aligned at 1024 bytes, we simply load the image fully * into memory. */ struct Win32sModule *moduleTable = (struct Win32sModule *)W32S_APP2WINE(context->Edx); struct Win32sModule *module = moduleTable + context->Ecx; IMAGE_NT_HEADERS *nt_header = RtlImageNtHeader( (HMODULE)module->baseAddr ); IMAGE_SECTION_HEADER *pe_seg = (IMAGE_SECTION_HEADER*)((char *)&nt_header->OptionalHeader + nt_header->FileHeader.SizeOfOptionalHeader); HFILE image = _lopen(module->pathName, OF_READ); BOOL error = (image == HFILE_ERROR); UINT i; TRACE("MapModule: Loading %s\n", module->pathName); for (i = 0; !error && i < nt_header->FileHeader.NumberOfSections; i++, pe_seg++) if(!(pe_seg->Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA)) { DWORD off = pe_seg->PointerToRawData; DWORD len = pe_seg->SizeOfRawData; LPBYTE addr = module->baseAddr + pe_seg->VirtualAddress; TRACE("MapModule: " "Section %d at %08x from %08x len %08x\n", i, (DWORD)addr, off, len); if ( _llseek(image, off, SEEK_SET) != off || _lread(image, addr, len) != len) error = TRUE; } _lclose(image); if (error) ERR("MapModule: Unable to load %s\n", module->pathName); else if (module->relocDelta != 0) { IMAGE_DATA_DIRECTORY *dir = nt_header->OptionalHeader.DataDirectory + IMAGE_DIRECTORY_ENTRY_BASERELOC; IMAGE_BASE_RELOCATION *r = (IMAGE_BASE_RELOCATION *) (dir->Size? module->baseAddr + dir->VirtualAddress : 0); TRACE("MapModule: Reloc delta %08x\n", module->relocDelta); while (r && r->VirtualAddress) { LPBYTE page = module->baseAddr + r->VirtualAddress; WORD *TypeOffset = (WORD *)(r + 1); unsigned int count = (r->SizeOfBlock - sizeof(*r)) / sizeof(*TypeOffset); TRACE("MapModule: %d relocations for page %08x\n", count, (DWORD)page); for(i = 0; i < count; i++) { int offset = TypeOffset[i] & 0xFFF; int type = TypeOffset[i] >> 12; switch(type) { case IMAGE_REL_BASED_ABSOLUTE: break; case IMAGE_REL_BASED_HIGH: *(WORD *)(page+offset) += HIWORD(module->relocDelta); break; case IMAGE_REL_BASED_LOW: *(WORD *)(page+offset) += LOWORD(module->relocDelta); break; case IMAGE_REL_BASED_HIGHLOW: *(DWORD*)(page+offset) += module->relocDelta; break; default: WARN("MapModule: Unsupported fixup type\n"); break; } } r = (IMAGE_BASE_RELOCATION *)((LPBYTE)r + r->SizeOfBlock); } } context->Eax = 0; RESET_CFLAG(context); } break; case 0x0005: /* UnMap Module */ /* * Input: EDX: Flat address of module image * * Output: EAX: 1 if OK */ TRACE("UnMapModule: %x\n", W32S_APP2WINE(context->Edx)); /* As we didn't map anything, there's nothing to unmap ... */ context->Eax = 1; break; case 0x0006: /* VirtualAlloc */ /* * Input: ECX: Current Process * * EDX: Flat address of arguments on stack * * DWORD *retv [out] Flat base address of allocated region * LPVOID base [in] Flat address of region to reserve/commit * DWORD size [in] Size of region * DWORD type [in] Type of allocation * DWORD prot [in] Type of access protection * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); DWORD *retv = (DWORD *)W32S_APP2WINE(stack[0]); LPVOID base = (LPVOID) W32S_APP2WINE(stack[1]); DWORD size = stack[2]; DWORD type = stack[3]; DWORD prot = stack[4]; DWORD result; TRACE("VirtualAlloc(%x, %x, %x, %x, %x)\n", (DWORD)retv, (DWORD)base, size, type, prot); if (type & 0x80000000) { WARN("VirtualAlloc: strange type %x\n", type); type &= 0x7fffffff; } if (!base && (type & MEM_COMMIT) && prot == PAGE_READONLY) { WARN("VirtualAlloc: NLS hack, allowing write access!\n"); prot = PAGE_READWRITE; } result = (DWORD)VirtualAlloc(base, size, type, prot); if (W32S_WINE2APP(result)) *retv = W32S_WINE2APP(result), context->Eax = STATUS_SUCCESS; else *retv = 0, context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x0007: /* VirtualFree */ /* * Input: ECX: Current Process * * EDX: Flat address of arguments on stack * * DWORD *retv [out] TRUE if success, FALSE if failure * LPVOID base [in] Flat address of region * DWORD size [in] Size of region * DWORD type [in] Type of operation * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); DWORD *retv = (DWORD *)W32S_APP2WINE(stack[0]); LPVOID base = (LPVOID) W32S_APP2WINE(stack[1]); DWORD size = stack[2]; DWORD type = stack[3]; DWORD result; TRACE("VirtualFree(%x, %x, %x, %x)\n", (DWORD)retv, (DWORD)base, size, type); result = VirtualFree(base, size, type); if (result) *retv = TRUE, context->Eax = STATUS_SUCCESS; else *retv = FALSE, context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x0008: /* VirtualProtect */ /* * Input: ECX: Current Process * * EDX: Flat address of arguments on stack * * DWORD *retv [out] TRUE if success, FALSE if failure * LPVOID base [in] Flat address of region * DWORD size [in] Size of region * DWORD new_prot [in] Desired access protection * DWORD *old_prot [out] Previous access protection * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); DWORD *retv = (DWORD *)W32S_APP2WINE(stack[0]); LPVOID base = (LPVOID) W32S_APP2WINE(stack[1]); DWORD size = stack[2]; DWORD new_prot = stack[3]; DWORD *old_prot = (DWORD *)W32S_APP2WINE(stack[4]); DWORD result; TRACE("VirtualProtect(%x, %x, %x, %x, %x)\n", (DWORD)retv, (DWORD)base, size, new_prot, (DWORD)old_prot); result = VirtualProtect(base, size, new_prot, old_prot); if (result) *retv = TRUE, context->Eax = STATUS_SUCCESS; else *retv = FALSE, context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x0009: /* VirtualQuery */ /* * Input: ECX: Current Process * * EDX: Flat address of arguments on stack * * DWORD *retv [out] Nr. bytes returned * LPVOID base [in] Flat address of region * LPMEMORY_BASIC_INFORMATION info [out] Info buffer * DWORD len [in] Size of buffer * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); DWORD *retv = (DWORD *)W32S_APP2WINE(stack[0]); LPVOID base = (LPVOID) W32S_APP2WINE(stack[1]); PMEMORY_BASIC_INFORMATION info = (PMEMORY_BASIC_INFORMATION)W32S_APP2WINE(stack[2]); DWORD len = stack[3]; DWORD result; TRACE("VirtualQuery(%x, %x, %x, %x)\n", (DWORD)retv, (DWORD)base, (DWORD)info, len); result = VirtualQuery(base, info, len); *retv = result; context->Eax = STATUS_SUCCESS; } break; case 0x000A: /* SetVirtMemProcess */ /* * Input: ECX: Process Handle * * EDX: Flat address of region * * Output: EAX: NtStatus */ TRACE("[000a] ECX=%x EDX=%x\n", context->Ecx, context->Edx); /* FIXME */ context->Eax = STATUS_SUCCESS; break; case 0x000B: /* ??? some kind of cleanup */ /* * Input: ECX: Process Handle * * Output: EAX: NtStatus */ TRACE("[000b] ECX=%x\n", context->Ecx); /* FIXME */ context->Eax = STATUS_SUCCESS; break; case 0x000C: /* Set Debug Flags */ /* * Input: EDX: Debug Flags * * Output: EDX: Previous Debug Flags */ FIXME("[000c] EDX=%x\n", context->Edx); /* FIXME */ context->Edx = 0; break; case 0x000D: /* NtCreateSection */ /* * Input: EDX: Flat address of arguments on stack * * HANDLE32 *retv [out] Handle of Section created * DWORD flags1 [in] (?? unknown ??) * DWORD atom [in] Name of Section to create * LARGE_INTEGER *size [in] Size of Section * DWORD protect [in] Access protection * DWORD flags2 [in] (?? unknown ??) * HFILE32 hFile [in] Handle of file to map * DWORD psp [in] (Win32s: PSP that hFile belongs to) * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *) W32S_APP2WINE(context->Edx); HANDLE *retv = (HANDLE *)W32S_APP2WINE(stack[0]); DWORD flags1 = stack[1]; DWORD atom = stack[2]; LARGE_INTEGER *size = (LARGE_INTEGER *)W32S_APP2WINE(stack[3]); DWORD protect = stack[4]; DWORD flags2 = stack[5]; HANDLE hFile = DosFileHandleToWin32Handle(stack[6]); DWORD psp = stack[7]; HANDLE result = INVALID_HANDLE_VALUE; char name[128]; TRACE("NtCreateSection(%x, %x, %x, %x, %x, %x, %x, %x)\n", (DWORD)retv, flags1, atom, (DWORD)size, protect, flags2, (DWORD)hFile, psp); if (!atom || GlobalGetAtomNameA(atom, name, sizeof(name))) { TRACE("NtCreateSection: name=%s\n", atom? name : NULL); result = CreateFileMappingA(hFile, NULL, protect, size? size->u.HighPart : 0, size? size->u.LowPart : 0, atom? name : NULL); } if (result == INVALID_HANDLE_VALUE) WARN("NtCreateSection: failed!\n"); else TRACE("NtCreateSection: returned %x\n", (DWORD)result); if (result != INVALID_HANDLE_VALUE) *retv = result, context->Eax = STATUS_SUCCESS; else *retv = result, context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x000E: /* NtOpenSection */ /* * Input: EDX: Flat address of arguments on stack * * HANDLE32 *retv [out] Handle of Section opened * DWORD protect [in] Access protection * DWORD atom [in] Name of Section to create * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); HANDLE *retv = (HANDLE *)W32S_APP2WINE(stack[0]); DWORD protect = stack[1]; DWORD atom = stack[2]; HANDLE result = INVALID_HANDLE_VALUE; char name[128]; TRACE("NtOpenSection(%x, %x, %x)\n", (DWORD)retv, protect, atom); if (atom && GlobalGetAtomNameA(atom, name, sizeof(name))) { TRACE("NtOpenSection: name=%s\n", name); result = OpenFileMappingA(protect, FALSE, name); } if (result == INVALID_HANDLE_VALUE) WARN("NtOpenSection: failed!\n"); else TRACE("NtOpenSection: returned %x\n", (DWORD)result); if (result != INVALID_HANDLE_VALUE) *retv = result, context->Eax = STATUS_SUCCESS; else *retv = result, context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x000F: /* NtCloseSection */ /* * Input: EDX: Flat address of arguments on stack * * HANDLE32 handle [in] Handle of Section to close * DWORD *id [out] Unique ID (?? unclear ??) * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); HANDLE handle = (HANDLE)stack[0]; DWORD *id = (DWORD *)W32S_APP2WINE(stack[1]); TRACE("NtCloseSection(%x, %x)\n", (DWORD)handle, (DWORD)id); CloseHandle(handle); if (id) *id = 0; /* FIXME */ context->Eax = STATUS_SUCCESS; } break; case 0x0010: /* NtDupSection */ /* * Input: EDX: Flat address of arguments on stack * * HANDLE32 handle [in] Handle of Section to duplicate * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); HANDLE handle = (HANDLE)stack[0]; HANDLE new_handle; TRACE("NtDupSection(%x)\n", (DWORD)handle); DuplicateHandle( GetCurrentProcess(), handle, GetCurrentProcess(), &new_handle, 0, FALSE, DUPLICATE_SAME_ACCESS ); context->Eax = STATUS_SUCCESS; } break; case 0x0011: /* NtMapViewOfSection */ /* * Input: EDX: Flat address of arguments on stack * * HANDLE32 SectionHandle [in] Section to be mapped * DWORD ProcessHandle [in] Process to be mapped into * DWORD * BaseAddress [in/out] Address to be mapped at * DWORD ZeroBits [in] (?? unclear ??) * DWORD CommitSize [in] (?? unclear ??) * LARGE_INTEGER *SectionOffset [in] Offset within section * DWORD * ViewSize [in] Size of view * DWORD InheritDisposition [in] (?? unclear ??) * DWORD AllocationType [in] (?? unclear ??) * DWORD Protect [in] Access protection * * Output: EAX: NtStatus */ { DWORD * stack = (DWORD *)W32S_APP2WINE(context->Edx); HANDLE SectionHandle = (HANDLE)stack[0]; DWORD ProcessHandle = stack[1]; /* ignored */ DWORD * BaseAddress = (DWORD *)W32S_APP2WINE(stack[2]); DWORD ZeroBits = stack[3]; DWORD CommitSize = stack[4]; LARGE_INTEGER *SectionOffset = (LARGE_INTEGER *)W32S_APP2WINE(stack[5]); DWORD * ViewSize = (DWORD *)W32S_APP2WINE(stack[6]); DWORD InheritDisposition = stack[7]; DWORD AllocationType = stack[8]; DWORD Protect = stack[9]; LPBYTE address = (LPBYTE)(BaseAddress? W32S_APP2WINE(*BaseAddress) : 0); DWORD access = 0, result; switch (Protect & ~(PAGE_GUARD|PAGE_NOCACHE)) { case PAGE_READONLY: access = FILE_MAP_READ; break; case PAGE_READWRITE: access = FILE_MAP_WRITE; break; case PAGE_WRITECOPY: access = FILE_MAP_COPY; break; case PAGE_EXECUTE_READ: access = FILE_MAP_READ; break; case PAGE_EXECUTE_READWRITE: access = FILE_MAP_WRITE; break; case PAGE_EXECUTE_WRITECOPY: access = FILE_MAP_COPY; break; } TRACE("NtMapViewOfSection" "(%x, %x, %x, %x, %x, %x, %x, %x, %x, %x)\n", (DWORD)SectionHandle, ProcessHandle, (DWORD)BaseAddress, ZeroBits, CommitSize, (DWORD)SectionOffset, (DWORD)ViewSize, InheritDisposition, AllocationType, Protect); TRACE("NtMapViewOfSection: " "base=%x, offset=%x, size=%x, access=%x\n", (DWORD)address, SectionOffset? SectionOffset->u.LowPart : 0, ViewSize? *ViewSize : 0, access); result = (DWORD)MapViewOfFileEx(SectionHandle, access, SectionOffset? SectionOffset->u.HighPart : 0, SectionOffset? SectionOffset->u.LowPart : 0, ViewSize? *ViewSize : 0, address); TRACE("NtMapViewOfSection: result=%x\n", result); if (W32S_WINE2APP(result)) { if (BaseAddress) *BaseAddress = W32S_WINE2APP(result); context->Eax = STATUS_SUCCESS; } else context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x0012: /* NtUnmapViewOfSection */ /* * Input: EDX: Flat address of arguments on stack * * DWORD ProcessHandle [in] Process (defining address space) * LPBYTE BaseAddress [in] Base address of view to be unmapped * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); DWORD ProcessHandle = stack[0]; /* ignored */ LPBYTE BaseAddress = (LPBYTE)W32S_APP2WINE(stack[1]); TRACE("NtUnmapViewOfSection(%x, %x)\n", ProcessHandle, (DWORD)BaseAddress); UnmapViewOfFile(BaseAddress); context->Eax = STATUS_SUCCESS; } break; case 0x0013: /* NtFlushVirtualMemory */ /* * Input: EDX: Flat address of arguments on stack * * DWORD ProcessHandle [in] Process (defining address space) * LPBYTE *BaseAddress [in?] Base address of range to be flushed * DWORD *ViewSize [in?] Number of bytes to be flushed * DWORD *unknown [???] (?? unknown ??) * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); DWORD ProcessHandle = stack[0]; /* ignored */ DWORD *BaseAddress = (DWORD *)W32S_APP2WINE(stack[1]); DWORD *ViewSize = (DWORD *)W32S_APP2WINE(stack[2]); DWORD *unknown = (DWORD *)W32S_APP2WINE(stack[3]); LPBYTE address = (LPBYTE)(BaseAddress? W32S_APP2WINE(*BaseAddress) : 0); DWORD size = ViewSize? *ViewSize : 0; TRACE("NtFlushVirtualMemory(%x, %x, %x, %x)\n", ProcessHandle, (DWORD)BaseAddress, (DWORD)ViewSize, (DWORD)unknown); TRACE("NtFlushVirtualMemory: base=%x, size=%x\n", (DWORD)address, size); FlushViewOfFile(address, size); context->Eax = STATUS_SUCCESS; } break; case 0x0014: /* Get/Set Debug Registers */ /* * Input: ECX: 0 if Get, 1 if Set * * EDX: Get: Flat address of buffer to receive values of * debug registers DR0 .. DR7 * Set: Flat address of buffer containing values of * debug registers DR0 .. DR7 to be set * Output: None */ FIXME("[0014] ECX=%x EDX=%x\n", context->Ecx, context->Edx); /* FIXME */ break; case 0x0015: /* Set Coprocessor Emulation Flag */ /* * Input: EDX: 0 to deactivate, 1 to activate coprocessor emulation * * Output: None */ TRACE("[0015] EDX=%x\n", context->Edx); /* We don't care, as we always have a coprocessor anyway */ break; case 0x0016: /* Init Win32S VxD PSP */ /* * If called to query required PSP size: * * Input: EBX: 0 * Output: EDX: Required size of Win32s VxD PSP * * If called to initialize allocated PSP: * * Input: EBX: LoWord: Selector of Win32s VxD PSP * HiWord: Paragraph of Win32s VxD PSP (DOSMEM) * Output: None */ if (context->Ebx == 0) context->Edx = 0x80; else { PDB16 *psp = MapSL( MAKESEGPTR( BX_reg(context), 0 )); psp->nbFiles = 32; psp->fileHandlesPtr = MAKELONG(HIWORD(context->Ebx), 0x5c); memset((LPBYTE)psp + 0x5c, '\xFF', 32); } break; case 0x0017: /* Set Break Point */ /* * Input: EBX: Offset of Break Point * CX: Selector of Break Point * * Output: None */ FIXME("[0017] EBX=%x CX=%x\n", context->Ebx, CX_reg(context)); /* FIXME */ break; case 0x0018: /* VirtualLock */ /* * Input: ECX: Current Process * * EDX: Flat address of arguments on stack * * DWORD *retv [out] TRUE if success, FALSE if failure * LPVOID base [in] Flat address of range to lock * DWORD size [in] Size of range * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); DWORD *retv = (DWORD *)W32S_APP2WINE(stack[0]); LPVOID base = (LPVOID) W32S_APP2WINE(stack[1]); DWORD size = stack[2]; DWORD result; TRACE("VirtualLock(%x, %x, %x)\n", (DWORD)retv, (DWORD)base, size); result = VirtualLock(base, size); if (result) *retv = TRUE, context->Eax = STATUS_SUCCESS; else *retv = FALSE, context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x0019: /* VirtualUnlock */ /* * Input: ECX: Current Process * * EDX: Flat address of arguments on stack * * DWORD *retv [out] TRUE if success, FALSE if failure * LPVOID base [in] Flat address of range to unlock * DWORD size [in] Size of range * * Output: EAX: NtStatus */ { DWORD *stack = (DWORD *)W32S_APP2WINE(context->Edx); DWORD *retv = (DWORD *)W32S_APP2WINE(stack[0]); LPVOID base = (LPVOID) W32S_APP2WINE(stack[1]); DWORD size = stack[2]; DWORD result; TRACE("VirtualUnlock(%x, %x, %x)\n", (DWORD)retv, (DWORD)base, size); result = VirtualUnlock(base, size); if (result) *retv = TRUE, context->Eax = STATUS_SUCCESS; else *retv = FALSE, context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x001A: /* KGetSystemInfo */ /* * Input: None * * Output: ECX: Start of sparse memory arena * EDX: End of sparse memory arena */ TRACE("KGetSystemInfo()\n"); /* * Note: Win32s reserves 0GB - 2GB for Win 3.1 and uses 2GB - 4GB as * sparse memory arena. We do it the other way around, since * we have to reserve 3GB - 4GB for Linux, and thus use * 0GB - 3GB as sparse memory arena. * * FIXME: What about other OSes ? */ context->Ecx = W32S_WINE2APP(0x00000000); context->Edx = W32S_WINE2APP(0xbfffffff); break; case 0x001B: /* KGlobalMemStat */ /* * Input: ESI: Flat address of buffer to receive memory info * * Output: None */ { struct Win32sMemoryInfo { DWORD DIPhys_Count; /* Total physical pages */ DWORD DIFree_Count; /* Free physical pages */ DWORD DILin_Total_Count; /* Total virtual pages (private arena) */ DWORD DILin_Total_Free; /* Free virtual pages (private arena) */ DWORD SparseTotal; /* Total size of sparse arena (bytes ?) */ DWORD SparseFree; /* Free size of sparse arena (bytes ?) */ }; struct Win32sMemoryInfo *info = (struct Win32sMemoryInfo *)W32S_APP2WINE(context->Esi); FIXME("KGlobalMemStat(%x)\n", (DWORD)info); /* FIXME */ } break; case 0x001C: /* Enable/Disable Exceptions */ /* * Input: ECX: 0 to disable, 1 to enable exception handling * * Output: None */ TRACE("[001c] ECX=%x\n", context->Ecx); /* FIXME */ break; case 0x001D: /* VirtualAlloc called from 16-bit code */ /* * Input: EDX: Segmented address of arguments on stack * * LPVOID base [in] Flat address of region to reserve/commit * DWORD size [in] Size of region * DWORD type [in] Type of allocation * DWORD prot [in] Type of access protection * * Output: EAX: NtStatus * EDX: Flat base address of allocated region */ { DWORD *stack = MapSL( MAKESEGPTR( LOWORD(context->Edx), HIWORD(context->Edx) )); LPVOID base = (LPVOID)W32S_APP2WINE(stack[0]); DWORD size = stack[1]; DWORD type = stack[2]; DWORD prot = stack[3]; DWORD result; TRACE("VirtualAlloc16(%x, %x, %x, %x)\n", (DWORD)base, size, type, prot); if (type & 0x80000000) { WARN("VirtualAlloc16: strange type %x\n", type); type &= 0x7fffffff; } result = (DWORD)VirtualAlloc(base, size, type, prot); if (W32S_WINE2APP(result)) context->Edx = W32S_WINE2APP(result), context->Eax = STATUS_SUCCESS; else context->Edx = 0, context->Eax = STATUS_NO_MEMORY; /* FIXME */ TRACE("VirtualAlloc16: returning base %x\n", context->Edx); } break; case 0x001E: /* VirtualFree called from 16-bit code */ /* * Input: EDX: Segmented address of arguments on stack * * LPVOID base [in] Flat address of region * DWORD size [in] Size of region * DWORD type [in] Type of operation * * Output: EAX: NtStatus * EDX: TRUE if success, FALSE if failure */ { DWORD *stack = MapSL( MAKESEGPTR( LOWORD(context->Edx), HIWORD(context->Edx) )); LPVOID base = (LPVOID)W32S_APP2WINE(stack[0]); DWORD size = stack[1]; DWORD type = stack[2]; DWORD result; TRACE("VirtualFree16(%x, %x, %x)\n", (DWORD)base, size, type); result = VirtualFree(base, size, type); if (result) context->Edx = TRUE, context->Eax = STATUS_SUCCESS; else context->Edx = FALSE, context->Eax = STATUS_NO_MEMORY; /* FIXME */ } break; case 0x001F: /* FWorkingSetSize */ /* * Input: EDX: 0 if Get, 1 if Set * * ECX: Get: Buffer to receive Working Set Size * Set: Buffer containing Working Set Size * * Output: NtStatus */ { DWORD *ptr = (DWORD *)W32S_APP2WINE(context->Ecx); BOOL set = context->Edx; TRACE("FWorkingSetSize(%x, %x)\n", (DWORD)ptr, (DWORD)set); if (set) /* We do it differently ... */; else *ptr = 0x100; context->Eax = STATUS_SUCCESS; } break; default: VXD_BARF( context, "W32S" ); } } ================================================ FILE: krnl386/wow_handle.c ================================================ /* handle16 <-> wow64 handle32 */ #include "config.h" #include "wine/port.h" #include #include #include #include "windows.h" #include "wine/winbase16.h" #include "windef.h" #include "winbase.h" #include "winerror.h" #include "windows/wownt32.h" #include "excpt.h" #include "winternl.h" #include "kernel16_private.h" #include "wine/exception.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(thunk); #define HANDLE_RESERVED 32 typedef struct { HANDLE handle32; DWORD wndproc; DWORD dlgproc; HINSTANCE16 hInst16; HMENU16 hMenu16; void *ptr; WOW_HANDLE_TYPE type; } HANDLE_DATA; typedef struct tagHANDLE_STORAGE *LPHANDLE_STORAGE; typedef void(*clean_up_t)(LPHANDLE_STORAGE); typedef struct { HANDLE_DATA *handles; LPCSTR name; int align; int align2; clean_up_t clean_up; } HANDLE_STORAGE; #define HANDLE_TYPE_HANDLE 0 #define HANDLE_TYPE_HGDI 1 #define HANDLE_TYPE_MAX 2 static HANDLE_STORAGE handle_list[HANDLE_TYPE_MAX]; static BOOL handle_trace; static BOOL handle_init_flag; static void hgdi_clean_up(HANDLE_STORAGE* hs); static void user_handle_clean_up(HANDLE_STORAGE* hs); static BOOL map_low_word_user_handle; static CRITICAL_SECTION handle_lock; /* this function called by DllMain(kernel.c) */ void init_wow_handle() { if (handle_init_flag) return; handle_trace = TRACE_ON(thunk); handle_init_flag = TRUE; handle_list[HANDLE_TYPE_HANDLE].handles = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 65536 * sizeof(HANDLE_DATA)); handle_list[HANDLE_TYPE_HANDLE].align = 1; /* IsWindow(hdc) should return FALSE */ handle_list[HANDLE_TYPE_HANDLE].align2 = 4; handle_list[HANDLE_TYPE_HANDLE].name = "HANDLE"; handle_list[HANDLE_TYPE_HANDLE].clean_up = user_handle_clean_up; /* hdc1 = CreateCompatibleDC(0); hdc2 = CreateCompatibleDC(0); hdc3 = CreateCompatibleDC(0); hdc4 = CreateCompatibleDC(0); hdc1: 0x6c, hdc2: 0x70, hdc3: 0x74, hdc4: 0x78... PBRUSH expects HDC to be a multiple of 4. */ handle_list[HANDLE_TYPE_HGDI].align = 4; handle_list[HANDLE_TYPE_HGDI].name = "HGDI"; handle_list[HANDLE_TYPE_HGDI].align2 = 0; handle_list[HANDLE_TYPE_HGDI].handles = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 65536 * sizeof(HANDLE_DATA)); handle_list[HANDLE_TYPE_HGDI].clean_up = hgdi_clean_up; map_low_word_user_handle = krnl386_get_config_int("otvdm", "MapLowWordUserHandle", FALSE); InitializeCriticalSection(&handle_lock); } WORD get_handle16_data(HANDLE h, HANDLE_STORAGE *hs, HANDLE_DATA **o); static DWORD get_handle_type(HANDLE h, HANDLE_STORAGE *hs) { if (hs != &handle_list[HANDLE_TYPE_HGDI]) return 0; return GetObjectType(h) << 16; } BOOL is_reserved_handle32(HANDLE h) { SSIZE_T signedh = (SSIZE_T)h; if (signedh < HANDLE_RESERVED && signedh > -HANDLE_RESERVED) { return TRUE; } return FALSE; } BOOL is_reserved_handle16(HANDLE16 h) { INT16 signedh = (INT16)h; if (signedh < HANDLE_RESERVED && signedh > -HANDLE_RESERVED) { return TRUE; } return FALSE; } WORD get_handle16(HANDLE h, HANDLE_STORAGE *hs, WOW_HANDLE_TYPE type) { if (is_reserved_handle32(h)) { return h; } HANDLE_DATA *hd; int hnd16 = get_handle16_data(h, hs, &hd); if (!hd) return 0; hd->handle32 = h; hd->type = type; return hnd16; } WORD get_handle16_data(HANDLE h, HANDLE_STORAGE *hs, HANDLE_DATA **o) { int retry_count = 0; //? if (is_reserved_handle32(h)) { *o = &hs->handles[(size_t)h]; return h; } WORD fhandle = 0; DWORD type = get_handle_type(h, hs); WORD s = HANDLE_RESERVED; retry: for (WORD i = s; i; i += hs->align) { if (i >= (WORD)(-HANDLE_RESERVED)) break; if (hs->align2 && (i & -hs->align2) == i) continue; if ((!hs->handles[i].handle32 || (hs->handles[i].handle32 == type)) && !fhandle) { fhandle = i; } if (hs->handles[i].handle32 == h) { *o = &hs->handles[i]; return i; } } if (!fhandle) { *o = NULL; ERR("Could not allocate a handle.\n"); retry_count++; if (retry_count == 1 && hs->clean_up) { hs->clean_up(hs); goto retry; } return 0; } if (handle_trace) DPRINTF("allocate %s %p=>%04x\n", hs->name, h, fhandle); *o = &hs->handles[fhandle]; memset(*o, 0, sizeof(HANDLE_DATA)); return fhandle; } void destroy_handle16(HANDLE_STORAGE *hs, WORD h) { if (is_reserved_handle32(h)) { return; } DWORD type = get_handle_type(hs->handles[h].handle32, hs); memset(hs->handles + h, 0, sizeof(*hs->handles)); hs->handles[h].handle32 = type; } BOOL get_handle32_data(WORD h, HANDLE_STORAGE *hs, HANDLE_DATA **o) { if (!h) { *o = NULL; return FALSE; } if (is_reserved_handle16(h)) { *o = &hs->handles[(size_t)h]; (*o)->handle32 = h; return TRUE; } *o = &hs->handles[h]; return TRUE; } HANDLE get_handle32(WORD h, HANDLE_STORAGE *hs) { if (is_reserved_handle16(h)) { hs->handles[h].handle32 = h; return (UINT16)h; } if (hs->handles[h].handle32) { return hs->handles[h].handle32; } hs->handles[h].handle32 = h; return (HANDLE)h; } static void enter_handle_lock() { EnterCriticalSection(&handle_lock); } static void leave_handle_lock() { LeaveCriticalSection(&handle_lock); } //handle16 -> wow64 handle32 HANDLE WINAPI K32WOWHandle32User(WORD handle) { HANDLE h32; if (map_low_word_user_handle) { return (HANDLE)handle; } enter_handle_lock(); h32 = get_handle32(handle, &handle_list[HANDLE_TYPE_HANDLE]); if (handle_trace) DPRINTF("HANDLE1632 %04X %p\n", handle, h32); leave_handle_lock(); return h32; } HANDLE WINAPI K32WOWHandle32Other(WORD handle) { enter_handle_lock(); HANDLE h32 = get_handle32(handle, &handle_list[HANDLE_TYPE_HANDLE]); if (handle_trace) DPRINTF("HANDLE1632 %04X %p\n", handle, h32); leave_handle_lock(); return h32; } //handle16 <- wow64 handle32 HANDLE16 WINAPI K32WOWHandle16User(HANDLE handle, WOW_HANDLE_TYPE type) { HANDLE16 h16; if (map_low_word_user_handle) { return (HANDLE16)LOWORD(handle); } enter_handle_lock(); h16 = get_handle16(handle, &handle_list[HANDLE_TYPE_HANDLE], type); if (handle_trace) DPRINTF("HANDLE3216 %p %04X\n", handle, h16); leave_handle_lock(); return h16; } HANDLE16 WINAPI K32WOWHandle16Other(HANDLE handle, WOW_HANDLE_TYPE type) { enter_handle_lock(); HANDLE16 h16 = get_handle16(handle, &handle_list[HANDLE_TYPE_HANDLE], type); if (handle_trace) DPRINTF("HANDLE3216 %p %04X\n", handle, h16); leave_handle_lock(); return h16; } //handle16 -> wow64 handle32 HANDLE WINAPI K32WOWHandle32HGDI(WORD handle) { enter_handle_lock(); HANDLE h32 = get_handle32(handle, &handle_list[HANDLE_TYPE_HGDI]); if (handle_trace) DPRINTF("HGDI1632 %04X %p\n", handle, h32); leave_handle_lock(); return h32; } //handle16 <- wow64 handle32 HANDLE16 WINAPI K32WOWHandle16HGDI(HANDLE handle, WOW_HANDLE_TYPE type) { enter_handle_lock(); HANDLE16 h16 = get_handle16(handle, &handle_list[HANDLE_TYPE_HGDI], type); if (handle_trace) DPRINTF("HGDI3216 %p %04X\n", handle, h16); leave_handle_lock(); return h16; } static BOOL is_gdiobj(WOW_HANDLE_TYPE type) { return type == WOW_TYPE_HDC || type == WOW_TYPE_HBITMAP || type == WOW_TYPE_HBRUSH || type == WOW_TYPE_HFONT || type == WOW_TYPE_HMETAFILE || type == WOW_TYPE_HPALETTE || type == WOW_TYPE_HPEN || type == WOW_TYPE_HRGN; } void WINAPI K32WOWHandle16Destroy(HANDLE handle, WOW_HANDLE_TYPE type) { enter_handle_lock(); if (is_gdiobj(type)) { HGDIOBJ16 h16 = K32WOWHandle16HGDI(handle, type); if (handle_trace) DPRINTF("destroy HGDI %p %04X\n", handle, h16); destroy_handle16(&handle_list[HANDLE_TYPE_HGDI], h16); } else if (type == WOW_TYPE_HWND || type == WOW_TYPE_HMENU || type == WOW_TYPE_HDWP || type == WOW_TYPE_HDROP || type == WOW_TYPE_HACCEL) { if (!map_low_word_user_handle) { HANDLE16 h16 = K32WOWHandle16User(handle, type); if (handle_trace) DPRINTF("destroy User HANDLE %p %04X\n", handle, h16); destroy_handle16(&handle_list[HANDLE_TYPE_HANDLE], h16); } } else { HANDLE16 h16 = K32WOWHandle16Other(handle, type); if (handle_trace) DPRINTF("destroy HANDLE %p %04X\n", handle, h16); destroy_handle16(&handle_list[HANDLE_TYPE_HANDLE], h16); } leave_handle_lock(); } void WINAPI K32WOWHandle16DestroyHint(HANDLE handle, WOW_HANDLE_TYPE type) { if (type == WOW_TYPE_HWND) { if (IsWindow(handle)) return; K32WOWHandle16Destroy(handle, type); } if (type == WOW_TYPE_HMENU) { if (IsMenu(handle)) return; K32WOWHandle16Destroy(handle, type); } if (is_gdiobj(type)) { if (GetObjectType(handle)) return; K32WOWHandle16Destroy(handle, type); } } static void hgdi_clean_up(HANDLE_STORAGE* hs) { for (int i = HANDLE_RESERVED; i < (WORD)(-HANDLE_RESERVED); i += hs->align) { if (handle_trace) { static const char *tbl[] = { "(deleted)", "OBJ_PEN", "OBJ_BRUSH", "OBJ_DC", "OBJ_METADC", "OBJ_PAL", "OBJ_FONT", "OBJ_BITMAP", "OBJ_REGION", "OBJ_METAFILE", "OBJ_MEMDC", "OBJ_EXTPEN", "OBJ_ENHMETADC", "OBJ_ENHMETAFILE", "OBJ_COLORSPACE" }; DPRINTF("%p: %s\n", hs->handles[i].handle32, tbl[GetObjectType(hs->handles[i].handle32)]); } K32WOWHandle16DestroyHint(hs->handles[i].handle32, WOW_TYPE_HDC); } } static void user_handle_clean_up(HANDLE_STORAGE* hs) { for (int i = HANDLE_RESERVED; i < (WORD)(-HANDLE_RESERVED); i += hs->align) { K32WOWHandle16DestroyHint(hs->handles[i].handle32, hs->handles[i].type); } } __declspec(dllexport) void SetWindowHInst16(WORD hWnd16, HINSTANCE16 hinst16) { HANDLE_DATA *dat; if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat)) { ERR("Invalid Window Handle SetWindowHInst16(%04X,%04X)\n", hWnd16, hinst16); return; } dat->hInst16 = hinst16; } __declspec(dllexport) HINSTANCE16 GetWindowHInst16(WORD hWnd16) { HANDLE_DATA *dat; if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat)) { ERR("Invalid Window Handle GetWindowHInst16(%04X)\n", hWnd16); return 0; } return dat->hInst16; } __declspec(dllexport) void SetWindowHMenu16(WORD hWnd16, HMENU16 h) { HANDLE_DATA *dat; if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat)) { ERR("Invalid Window Handle SetWindowHMenu16(%04X,%04X)\n", hWnd16, h); return; } dat->hMenu16 = h; } __declspec(dllexport) HMENU16 GetWindowHMenu16(WORD hWnd16) { HANDLE_DATA *dat; if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat)) { ERR("Invalid Window Handle GetWindowHMenu16(%04X)\n", hWnd16); return 0; } if (dat->hMenu16) { return dat->hMenu16; } return WOWHandle16(GetMenu(dat->handle32), WOW_TYPE_HMENU); } __declspec(dllexport) void SetWndProc16(WORD hWnd16, DWORD WndProc) { HANDLE_DATA *dat; if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat)) { ERR("Invalid Window Handle SetWndProc16(%04X,%04X)\n", hWnd16, WndProc); return; } dat->wndproc = WndProc; } __declspec(dllexport) DWORD GetWndProc16(WORD hWnd16) { HANDLE_DATA *dat; if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat)) { ERR("Invalid Window Handle GetWndProc16(%04X)\n", hWnd16); return 0; } return dat->wndproc; } __declspec(dllexport) void SetDlgProc16(WORD hWnd16, DWORD WndProc) { HANDLE_DATA *dat; if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat)) { ERR("Invalid Window Handle SetDlgProc16(%04X,%04X)\n", hWnd16, WndProc); return; } dat->dlgproc = WndProc; } __declspec(dllexport) DWORD GetDlgProc16(WORD hWnd16) { HANDLE_DATA *dat; if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat)) { ERR("Invalid Window Handle GetDlgProc16(%04X)\n", hWnd16); return 0; } return dat->dlgproc; } __declspec(dllexport) void SetPtr16(WORD hdl16, void *ptr, int type) { HANDLE_DATA *dat; if (!get_handle32_data(hdl16, &handle_list[type], &dat)) { ERR("Invalid Handle SetPtr16(%04X,%04X)\n", hdl16, (DWORD)ptr); return; } dat->ptr = ptr; } __declspec(dllexport) void *GetPtr16(WORD hdl16, int type) { HANDLE_DATA *dat; if (!get_handle32_data(hdl16, &handle_list[type], &dat)) { ERR("Invalid Handle GetPtr16(%04X)\n", hdl16); return NULL; } return dat->ptr; } ================================================ FILE: krnl386/wowthunk.c ================================================ /* * Win32 WOW Generic Thunk API * * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include "wine/winbase16.h" #include "windef.h" #include "winbase.h" #include "winerror.h" #include "windows/wownt32.h" #include "excpt.h" #include "winternl.h" #include "kernel16_private.h" #include "wine/exception.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(thunk); WINE_DECLARE_DEBUG_CHANNEL(relay); WINE_DECLARE_DEBUG_CHANNEL(snoop); /* symbols exported from relay16.s */ extern DWORD WINAPI wine_call_to_16( FARPROC16 target, DWORD cbArgs, PEXCEPTION_HANDLER handler ); extern void WINAPI wine_call_to_16_regs( CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler ); static void (*__wine_call_to_16_ret)(void); extern void CALL32_CBClient_Ret(void); extern void CALL32_CBClientEx_Ret(void); extern void DPMI_PendingEventCheck(void); extern void DPMI_PendingEventCheck_Cleanup(void); extern void DPMI_PendingEventCheck_Return(void); static LPBYTE __wine_call16_start; static LPBYTE __wine_call16_end; static SEGPTR call16_ret_addr; /* segptr to __wine_call_to_16_ret routine */ static WORD dpmi_checker_selector; static DWORD dpmi_checker_offset_call; static DWORD dpmi_checker_offset_cleanup; static DWORD dpmi_checker_offset_return; extern LPVOID *__wine_call_to_16_ret_p; extern LPVOID *__wine_call16_start_p; extern LPVOID *__wine_call16_end_p; /*********************************************************************** * WOWTHUNK_Init */ BOOL WOWTHUNK_Init(void) { __wine_call_to_16_ret = __wine_call_to_16_ret_p; __wine_call16_start = __wine_call16_start_p; __wine_call16_end = __wine_call16_end_p; /* allocate the code selector for CallTo16 routines */ LDT_ENTRY entry; WORD codesel = wine_ldt_alloc_entries(1); if (!codesel) return FALSE; wine_ldt_set_base( &entry, __wine_call16_start ); wine_ldt_set_limit( &entry, (BYTE *)(&CallTo16_TebSelector + 1) - __wine_call16_start - 1 ); wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT ); wine_ldt_set_entry( codesel, &entry ); /* Patch the return addresses for CallTo16 routines */ CallTo16_DataSelector = wine_get_ds(); if (0 > (SSIZE_T)__wine_call_to_16_ret - (SSIZE_T)__wine_call16_start) { 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); } if (0xffff < (SSIZE_T)__wine_call_to_16_ret - (SSIZE_T)__wine_call16_start) { 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); } call16_ret_addr = MAKESEGPTR( codesel, (BYTE *)__wine_call_to_16_ret - __wine_call16_start ); CALL32_CBClient_RetAddr = MAKESEGPTR( codesel, (BYTE *)CALL32_CBClient_Ret - __wine_call16_start ); CALL32_CBClientEx_RetAddr = MAKESEGPTR( codesel, (BYTE *)CALL32_CBClientEx_Ret - __wine_call16_start ); /* Prepare selector and offsets for DPMI event checking. */ dpmi_checker_selector = codesel; dpmi_checker_offset_call = (BYTE *)DPMI_PendingEventCheck - __wine_call16_start; dpmi_checker_offset_cleanup = (BYTE *)DPMI_PendingEventCheck_Cleanup - __wine_call16_start; dpmi_checker_offset_return = (BYTE *)DPMI_PendingEventCheck_Return - __wine_call16_start; if (TRACE_ON(relay) || TRACE_ON(snoop)) RELAY16_InitDebugLists(); return TRUE; } /************************************************************* * fix_selector * * Fix a selector load that caused an exception if it's in the * 16-bit relay code. */ static BOOL fix_selector( CONTEXT *context ) { WORD *stack; BYTE *instr = (BYTE *)context->Eip; if (instr < __wine_call16_start || instr >= __wine_call16_end) return FALSE; /* skip prefixes */ while (*instr == 0x66 || *instr == 0x67) instr++; switch(instr[0]) { case 0x07: /* pop es */ case 0x17: /* pop ss */ case 0x1f: /* pop ds */ break; case 0x0f: /* extended instruction */ switch(instr[1]) { case 0xa1: /* pop fs */ case 0xa9: /* pop gs */ break; default: return FALSE; } break; default: return FALSE; } stack = wine_ldt_get_ptr( context->SegSs, context->Esp ); TRACE( "fixing up selector %x for pop instruction\n", *stack ); *stack = 0; return TRUE; } /************************************************************* * insert_event_check * * Make resuming the context check for pending DPMI events * before the original context is restored. This is required * because DPMI events are asynchronous, they are blocked while * Wine 32-bit code is being executed and we want to prevent * a race when returning back to 16-bit or 32-bit DPMI context. */ static void insert_event_check( CONTEXT *context ) { char *stack = wine_ldt_get_ptr( context->SegSs, context->Esp ); /* don't do event check while in system code */ if (wine_ldt_is_system(context->SegCs)) return; if(context->SegCs == dpmi_checker_selector && context->Eip >= dpmi_checker_offset_call && context->Eip <= dpmi_checker_offset_cleanup) { /* * Nested call. Stack will be preserved. */ } else if(context->SegCs == dpmi_checker_selector && context->Eip == dpmi_checker_offset_return) { /* * Nested call. We have just finished popping the fs * register, lets put it back into stack. */ stack -= sizeof(WORD); *(WORD*)stack = context->SegFs; context->Esp -= 2; } else { /* * Call is not nested. * Push modified registers into stack. * These will be popped by the assembler stub. */ stack -= sizeof(DWORD); *(DWORD*)stack = context->EFlags; stack -= sizeof(DWORD); *(DWORD*)stack = context->SegCs; stack -= sizeof(DWORD); *(DWORD*)stack = context->Eip; stack -= sizeof(WORD); *(WORD*)stack = context->SegFs; context->Esp -= 14; } /* * Modify the context so that we jump into assembler stub. * TEB access is made easier by providing the stub * with the correct fs register value. */ context->SegCs = dpmi_checker_selector; context->Eip = dpmi_checker_offset_call; context->SegFs = wine_get_fs(); } /************************************************************* * call16_handler * * Handler for exceptions occurring in 16-bit code. */ static EXCEPTION_DISPOSITION NTAPI call16_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) { if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)) { /* unwinding: restore the stack pointer in the TEB, and leave the Win16 mutex */ STACK32FRAME *frame32 = CONTAINING_RECORD(frame, STACK32FRAME, frame); setWOW32Reserved((void *)frame32->frame16); _LeaveWin16Lock(); } else if (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION || record->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION) { if (wine_ldt_is_system(context->SegCs)) { if (fix_selector( context )) return ExceptionContinueExecution; } else { SEGPTR gpHandler; DWORD ret = __wine_emulate_instruction( record, context ); /* * Insert check for pending DPMI events. Note that this * check must be inserted after instructions have been * emulated because the instruction emulation requires * original CS:IP and the emulation may change TEB.dpmi_vif. */ if(get_vm86_teb_info()->dpmi_vif) insert_event_check( context ); if (ret != ExceptionContinueSearch) return ret; /* check for Win16 __GP handler */ if ((gpHandler = HasGPHandler16( MAKESEGPTR( context->SegCs, context->Eip ) ))) { WORD *stack = wine_ldt_get_ptr( context->SegSs, context->Esp ); *--stack = context->SegCs; *--stack = context->Eip; if (!IS_SELECTOR_32BIT(context->SegSs)) context->Esp = MAKELONG( LOWORD(context->Esp - 2*sizeof(WORD)), HIWORD(context->Esp) ); else context->Esp -= 2*sizeof(WORD); context->SegCs = SELECTOROF( gpHandler ); context->Eip = OFFSETOF( gpHandler ); return ExceptionContinueExecution; } } } else if (record->ExceptionCode == EXCEPTION_VM86_STI) { insert_event_check( context ); } return ExceptionContinueSearch; } /************************************************************* * vm86_handler * * Handler for exceptions occurring in vm86 code. */ static EXCEPTION_DISPOSITION NTAPI vm86_handler(struct _EXCEPTION_RECORD *record, PVOID frame, struct _CONTEXT *context, PVOID pdispatcher ) { if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)) return ExceptionContinueSearch; if (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION || record->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION) { return __wine_emulate_instruction( record, context ); } return ExceptionContinueSearch; } /*static EXCEPTION_DISPOSITION NTAPI vm86_handler(struct _EXCEPTION_RECORD **ExceptionRecord, PVOID EstablisherFrame, struct _CONTEXT **ContextRecord, PVOID DispatcherContext) { if ((*ExceptionRecord)->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)) return ExceptionContinueSearch; if ((*ExceptionRecord)->ExceptionCode == EXCEPTION_ACCESS_VIOLATION || (*ExceptionRecord)->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION) { return __wine_emulate_instruction(ExceptionRecord, ContextRecord); } return ExceptionContinueSearch; }*/ /* * 32-bit WOW routines (in WOW32, but actually forwarded to KERNEL32) */ /********************************************************************** * K32WOWGetDescriptor (KERNEL32.70) */ BOOL WINAPI K32WOWGetDescriptor( SEGPTR segptr, LPLDT_ENTRY ldtent ) { return GetThreadSelectorEntry( GetCurrentThread(), segptr >> 16, ldtent ); } /********************************************************************** * K32WOWGetVDMPointer (KERNEL32.56) */ LPVOID WINAPI K32WOWGetVDMPointer( DWORD vp, DWORD dwBytes, BOOL fProtectedMode ) { /* FIXME: add size check too */ if ( fProtectedMode ) return MapSL( vp ); else return DOSMEM_MapRealToLinear( vp ); } /********************************************************************** * K32WOWGetVDMPointerFix (KERNEL32.68) */ LPVOID WINAPI K32WOWGetVDMPointerFix( DWORD vp, DWORD dwBytes, BOOL fProtectedMode ) { /* * Hmmm. According to the docu, we should call: * * GlobalFix16( SELECTOROF(vp) ); * * But this is unnecessary under Wine, as we never move global * memory segments in linear memory anyway. * * (I'm not so sure what we are *supposed* to do if * fProtectedMode is TRUE, anyway ...) */ return K32WOWGetVDMPointer( vp, dwBytes, fProtectedMode ); } /********************************************************************** * K32WOWGetVDMPointerUnfix (KERNEL32.69) */ VOID WINAPI K32WOWGetVDMPointerUnfix( DWORD vp ) { /* * See above why we don't call: * * GlobalUnfix16( SELECTOROF(vp) ); * */ } /********************************************************************** * K32WOWGlobalAlloc16 (KERNEL32.59) */ WORD WINAPI K32WOWGlobalAlloc16( WORD wFlags, DWORD cb ) { return (WORD)GlobalAlloc16( wFlags, cb ); } /********************************************************************** * K32WOWGlobalFree16 (KERNEL32.62) */ WORD WINAPI K32WOWGlobalFree16( WORD hMem ) { return (WORD)GlobalFree16( (HGLOBAL16)hMem ); } /********************************************************************** * K32WOWGlobalUnlock16 (KERNEL32.61) */ BOOL WINAPI K32WOWGlobalUnlock16( WORD hMem ) { return (BOOL)GlobalUnlock16( (HGLOBAL16)hMem ); } /********************************************************************** * K32WOWGlobalAllocLock16 (KERNEL32.63) */ DWORD WINAPI K32WOWGlobalAllocLock16( WORD wFlags, DWORD cb, WORD *phMem ) { WORD hMem = K32WOWGlobalAlloc16( wFlags, cb ); if (phMem) *phMem = hMem; return K32WOWGlobalLock16( hMem ); } /********************************************************************** * K32WOWGlobalLockSize16 (KERNEL32.65) */ DWORD WINAPI K32WOWGlobalLockSize16( WORD hMem, PDWORD pcb ) { if ( pcb ) *pcb = GlobalSize16( (HGLOBAL16)hMem ); return K32WOWGlobalLock16( hMem ); } /********************************************************************** * K32WOWGlobalUnlockFree16 (KERNEL32.64) */ WORD WINAPI K32WOWGlobalUnlockFree16( DWORD vpMem ) { if ( !K32WOWGlobalUnlock16( HIWORD(vpMem) ) ) return FALSE; return K32WOWGlobalFree16( HIWORD(vpMem) ); } /********************************************************************** * K32WOWYield16 (KERNEL32.66) */ VOID WINAPI K32WOWYield16( void ) { /* * This does the right thing for both Win16 and Win32 tasks. * More or less, at least :-/ */ Yield16(); } /********************************************************************** * K32WOWDirectedYield16 (KERNEL32.67) */ VOID WINAPI K32WOWDirectedYield16( WORD htask16 ) { DirectedYield16( (HTASK16)htask16 ); } #define WOW64 #define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1) WORD WINAPI K32WOWHandle16User(HANDLE handle, WOW_HANDLE_TYPE type); HANDLE WINAPI K32WOWHandle32User(WORD handle); WORD WINAPI K32WOWHandle16Other(HANDLE handle, WOW_HANDLE_TYPE type); HANDLE WINAPI K32WOWHandle32Other(WORD handle); WORD WINAPI K32WOWHandle16HGDI(HANDLE handle, WOW_HANDLE_TYPE type); HANDLE WINAPI K32WOWHandle32HGDI(WORD handle); /*********************************************************************** * K32WOWHandle32 (KERNEL32.57) */ HANDLE WINAPI K32WOWHandle32( WORD handle, WOW_HANDLE_TYPE type ) { switch ( type ) { case WOW_TYPE_HWND: case WOW_TYPE_HMENU: case WOW_TYPE_HDWP: case WOW_TYPE_HDROP: case WOW_TYPE_HACCEL: case WOW_TYPE_FULLHWND: #ifdef WOW64 return K32WOWHandle32User(handle); #else return (HANDLE)(ULONG_PTR)handle; #endif case WOW_TYPE_HFONT: case WOW_TYPE_HRGN: case WOW_TYPE_HBITMAP: case WOW_TYPE_HBRUSH: case WOW_TYPE_HPALETTE: case WOW_TYPE_HPEN: case WOW_TYPE_HDC: return K32WOWHandle32HGDI(handle); case WOW_TYPE_HMETAFILE: FIXME( "conversion of metafile handles not supported yet\n" ); return (HANDLE)(ULONG_PTR)handle; case WOW_TYPE_HTASK: { TDB *tdb = ((TDB *)GlobalLock16(handle)); if (!tdb) return 0; return tdb->teb->ClientId.UniqueThread; } case WOW_TYPE_HANDLE: #ifdef WOW64 return K32WOWHandle32Other(handle); #else return (HANDLE)(ULONG_PTR)handle; #endif default: ERR( "handle 0x%04x of unknown type %d\n", handle, type ); return (HANDLE)(ULONG_PTR)handle; } } /*********************************************************************** * K32WOWHandle16 (KERNEL32.58) */ WORD WINAPI K32WOWHandle16( HANDLE handle, WOW_HANDLE_TYPE type ) { switch ( type ) { case WOW_TYPE_HWND: case WOW_TYPE_HMENU: case WOW_TYPE_HDWP: case WOW_TYPE_HDROP: case WOW_TYPE_HACCEL: case WOW_TYPE_FULLHWND: #ifdef WOW64 return K32WOWHandle16User(handle, type); #else if ( HIWORD(handle ) ) ERR( "handle %p of type %d has non-zero HIWORD\n", handle, type ); return LOWORD(handle); #endif case WOW_TYPE_HFONT: case WOW_TYPE_HRGN: case WOW_TYPE_HBITMAP: case WOW_TYPE_HBRUSH: case WOW_TYPE_HPALETTE: case WOW_TYPE_HPEN: case WOW_TYPE_HDC: return K32WOWHandle16HGDI(handle, type); case WOW_TYPE_HMETAFILE: FIXME( "conversion of metafile handles not supported yet\n" ); return LOWORD(handle); case WOW_TYPE_HTASK: return TASK_GetTaskFromThread( (DWORD)handle ); case WOW_TYPE_HANDLE: #ifdef WOW64 return K32WOWHandle16Other(handle, type); #else if ( HIWORD(handle ) ) ERR( "handle %p of type %d has non-zero HIWORD\n", handle, type ); return LOWORD(handle); #endif default: ERR( "handle %p of unknown type %d\n", handle, type ); return LOWORD(handle); } } __declspec(dllexport) HGDIOBJ16 K32HGDIOBJ_16(HGDIOBJ handle) { #ifdef WOW64 return K32WOWHandle16HGDI(handle, WOW_TYPE_HDC); #else if (HIWORD(handle)) ERR("handle %p of type %d has non-zero HIWORD\n", handle, type); return LOWORD(handle); #endif } __declspec(dllexport) HGDIOBJ K32HGDIOBJ_32(HGDIOBJ16 handle) { #ifdef WOW64 return K32WOWHandle32HGDI(handle); #else return (HANDLE)(ULONG_PTR)handle; #endif } __declspec(dllexport) HICON16 K32HICON_16(HICON handle) { #ifdef WOW64 return K32WOWHandle16(handle, WOW_TYPE_HANDLE); #else if (HIWORD(handle)) ERR("handle %p of type %d has non-zero HIWORD\n", handle, type); return LOWORD(handle); #endif } __declspec(dllexport) HICON K32HICON_32(HICON16 handle) { #ifdef WOW64 return (HICON)K32WOWHandle32(handle, WOW_TYPE_HANDLE); #else return (HANDLE)(ULONG_PTR)handle; #endif } /********************************************************************** * K32WOWCallback16Ex (KERNEL32.55) */ BOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode ) { /* * Arguments must be prepared in the correct order by the caller * (both for PASCAL and CDECL calling convention), so we simply * copy them to the 16-bit stack ... */ char *stack = (char *)CURRENT_STACK16 - cbArgs; LPVOID old = getWOW32Reserved(); memcpy( stack, pArgs, cbArgs ); if (dwFlags & (WCB16_REGS|WCB16_REGS_LONG)) { CONTEXT *context = (CONTEXT *)pdwRetCode; if (TRACE_ON(relay)) { DWORD count = cbArgs / sizeof(WORD); WORD * wstack = (WORD *)stack; DPRINTF("%04x:CallTo16(func=%04x:%04x,ds=%04x", GetCurrentThreadId(), context->SegCs, LOWORD(context->Eip), context->SegDs ); while (count) DPRINTF( ",%04x", wstack[--count] ); DPRINTF(") ss:sp=%04x:%04x", SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved()) ); DPRINTF(" ax=%04x bx=%04x cx=%04x dx=%04x si=%04x di=%04x bp=%04x es=%04x fs=%04x\n", (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx, (WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi, (WORD)context->Ebp, (WORD)context->SegEs, (WORD)context->SegFs ); SYSLEVEL_CheckNotLevel( 2 ); } if (context->EFlags & 0x00020000) /* v86 mode */ { EXCEPTION_REGISTRATION_RECORD frame; frame.Handler = vm86_handler; errno = 0; __wine_push_frame( &frame ); __wine_enter_vm86( context ); __wine_pop_frame( &frame ); if (errno != 0) /* enter_vm86 will fail with ENOSYS on x64 kernels */ { WARN("__wine_enter_vm86 failed (errno=%d)\n", errno); if (errno == ENOSYS) SetLastError(ERROR_NOT_SUPPORTED); else SetLastError(ERROR_GEN_FAILURE); return FALSE; } } else { /* push return address */ if (dwFlags & WCB16_REGS_LONG) { stack -= sizeof(DWORD); *((DWORD *)stack) = HIWORD(call16_ret_addr); stack -= sizeof(DWORD); *((DWORD *)stack) = LOWORD(call16_ret_addr); cbArgs += 2 * sizeof(DWORD); } else { stack -= sizeof(SEGPTR); *((SEGPTR *)stack) = call16_ret_addr; cbArgs += sizeof(SEGPTR); } /* * Start call by checking for pending events. * Note that wine_call_to_16_regs overwrites context stack * pointer so we may modify it here without a problem. */ if (get_vm86_teb_info()->dpmi_vif) { context->SegSs = wine_get_ds(); context->Esp = (DWORD)stack; insert_event_check( context ); cbArgs += (DWORD)stack - context->Esp; } _EnterWin16Lock(); wine_call_to_16_regs( context, cbArgs, call16_handler ); _LeaveWin16Lock(); } if (TRACE_ON(relay)) { DPRINTF("%04x:RetFrom16() ss:sp=%04x:%04x ", GetCurrentThreadId(), SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved())); DPRINTF(" ax=%04x bx=%04x cx=%04x dx=%04x bp=%04x sp=%04x\n", (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx, (WORD)context->Edx, (WORD)context->Ebp, (WORD)context->Esp ); SYSLEVEL_CheckNotLevel( 2 ); } } else { DWORD ret; if (TRACE_ON(relay)) { DWORD count = cbArgs / sizeof(WORD); WORD * wstack = (WORD *)stack; DPRINTF("%04x:CallTo16(func=%04x:%04x,ds=%04x", GetCurrentThreadId(), HIWORD(vpfn16), LOWORD(vpfn16), SELECTOROF(getWOW32Reserved())); while (count) DPRINTF( ",%04x", wstack[--count] ); DPRINTF(") ss:sp=%04x:%04x\n", SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved()) ); SYSLEVEL_CheckNotLevel( 2 ); } /* push return address */ stack -= sizeof(SEGPTR); *((SEGPTR *)stack) = call16_ret_addr; cbArgs += sizeof(SEGPTR); /* * Actually, we should take care whether the called routine cleans up * its stack or not. Fortunately, our wine_call_to_16 core doesn't rely on * the callee to do so; after the routine has returned, the 16-bit * stack pointer is always reset to the position it had before. */ _EnterWin16Lock(); ret = wine_call_to_16( (FARPROC16)vpfn16, cbArgs, call16_handler ); if (pdwRetCode) *pdwRetCode = ret; _LeaveWin16Lock(); if (TRACE_ON(relay)) { DPRINTF("%04x:RetFrom16() ss:sp=%04x:%04x retval=%08x\n", GetCurrentThreadId(), SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved()), ret); SYSLEVEL_CheckNotLevel( 2 ); } } setWOW32Reserved(old); return TRUE; /* success */ } /********************************************************************** * K32WOWCallback16 (KERNEL32.54) */ DWORD WINAPI K32WOWCallback16( DWORD vpfn16, DWORD dwParam ) { DWORD ret; if ( !K32WOWCallback16Ex( vpfn16, WCB16_PASCAL, sizeof(DWORD), &dwParam, &ret ) ) ret = 0L; return ret; } ================================================ FILE: lzexpand/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(lzexpand SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/lzexpand.def lzexpand.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(lzexpand.dll16 lzexpand) target_link_libraries(lzexpand libwine winecrt0 krnl386) set_target_properties(lzexpand PROPERTIES SUFFIX ".dll16") ================================================ FILE: lzexpand/lzexpand.c ================================================ /* * LZ Decompression functions * * Copyright 1996 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ //memo //windows compatible settings //EmulateLZHandles #include #include "windef.h" #include "winbase.h" #include "lzexpand.h" #include "wine/winbase16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(file); #define MAX_LZSTATES 16 #define IS_LZ_HANDLE(h) (((h) >= 0x400) && ((h) < 0x400+MAX_LZSTATES)) /*********************************************************************** * LZStart (LZEXPAND.7) */ INT16 WINAPI LZStart16(void) { TRACE("(void)\n"); return 1; } HFILE WINAPI LZInit32( HFILE hfSrc, BOOL *lzhandle ); /*********************************************************************** * LZInit (LZEXPAND.3) */ HFILE16 WINAPI LZInit16( HFILE16 hfSrc ) { BOOL lzhandle = FALSE; HFILE ret = LZInit32( (HFILE)DosFileHandleToWin32Handle(hfSrc), &lzhandle ); if (lzhandle) return ret; if ((INT)ret <= 0) return ret; return hfSrc; } /*********************************************************************** * GetExpandedName (LZEXPAND.10) */ INT16 WINAPI GetExpandedName16( LPSTR in, LPSTR out ) { return (INT16)GetExpandedNameA( in, out ); } /*********************************************************************** * LZRead (LZEXPAND.5) */ INT16 WINAPI LZRead16( HFILE16 fd, LPVOID buf, UINT16 toread ) { if (IS_LZ_HANDLE(fd)) return LZRead( fd, buf, toread ); return _lread( (HFILE)DosFileHandleToWin32Handle(fd), buf, toread ); } /*********************************************************************** * LZSeek (LZEXPAND.4) */ LONG WINAPI LZSeek16( HFILE16 fd, LONG off, INT16 type ) { if (IS_LZ_HANDLE(fd)) return LZSeek( fd, off, type ); return _llseek( (HFILE)DosFileHandleToWin32Handle(fd), off, type ); } /*********************************************************************** * LZCopy (LZEXPAND.1) * */ LONG WINAPI LZCopy16( HFILE16 src, HFILE16 dest ) { /* already a LZ handle? */ if (IS_LZ_HANDLE(src)) return LZCopy( src, (HFILE)DosFileHandleToWin32Handle(dest) ); /* no, try to open one */ src = LZInit16(src); if ((INT16)src <= 0) return 0; if (IS_LZ_HANDLE(src)) { LONG ret = LZCopy( src, (HFILE)DosFileHandleToWin32Handle(dest) ); LZClose( src ); return ret; } /* it was not a compressed file */ return LZCopy( (HFILE)DosFileHandleToWin32Handle(src), (HFILE)DosFileHandleToWin32Handle(dest) ); } HFILE WINAPI LZOpenFile32( LPSTR fn, LPOFSTRUCT ofs, WORD mode, BOOL *lzhandle ); /*********************************************************************** * LZOpenFile (LZEXPAND.2) */ HFILE16 WINAPI LZOpenFile16(LPSTR fn, LPOFSTRUCT ofs, UINT16 mode) { BOOL lzhandle = FALSE; HFILE hfret = LZOpenFile32(fn, ofs, mode, &lzhandle); /* return errors and LZ handles unmodified */ if ((INT)hfret < 0) return hfret; if (lzhandle) return hfret; /* but allocate a dos handle for 'normal' files */ return Win32HandleToDosFileHandle((HANDLE)hfret); } /*********************************************************************** * LZClose (LZEXPAND.6) */ void WINAPI LZClose16( HFILE16 fd ) { if (IS_LZ_HANDLE(fd)) LZClose( fd ); else { HANDLE fh = DosFileHandleToWin32Handle((HFILE)fd); if (DeleteDosFileHandle(fh)) CloseHandle(fh); } } /*********************************************************************** * CopyLZFile (LZEXPAND.8) */ LONG WINAPI CopyLZFile16( HFILE16 src, HFILE16 dest ) { TRACE("(%d,%d)\n",src,dest); return LZCopy16(src,dest); } /*********************************************************************** * LZDone (LZEXPAND.9) */ void WINAPI LZDone16(void) { TRACE("(void)\n"); } ================================================ FILE: lzexpand/lzexpand.def ================================================ ; File generated automatically from lzexpand.dll16.spec; do not edit! LIBRARY lzexpand.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: lzexpand/lzexpand.dll16.spec ================================================ 1 pascal LZCopy(word word) LZCopy16 2 pascal -ret16 LZOpenFile(str ptr word) LZOpenFile16 3 pascal -ret16 LZInit(word) LZInit16 4 pascal LZSeek(word long word) LZSeek16 5 pascal -ret16 LZRead(word ptr word) LZRead16 6 pascal -ret16 LZClose(word) LZClose16 7 pascal -ret16 LZStart() LZStart16 8 pascal CopyLZFile(word word) CopyLZFile16 9 pascal -ret16 LZDone() LZDone16 10 pascal -ret16 GetExpandedName(str ptr) GetExpandedName16 #11 WEP #12 ___EXPORTEDSTUB ================================================ FILE: lzexpand/lzexpand.vcxproj ================================================  Debug Win32 Release Win32 Debug x64 Release x64 {3A10E48B-E88F-46C6-8A01-7A62112D0E05} Win32Proj lzexpand 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 true false .dll16 false Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;LZEXPAND_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true lzexpand.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;kernel32.lib Level3 Disabled _DEBUG;_WINDOWS;_USRDLL;LZEXPAND_EXPORTS;%(PreprocessorDefinitions) Windows true Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;LZEXPAND_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true true true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;kernel32.lib false lzexpand.def Level3 MaxSpeed true true NDEBUG;_WINDOWS;_USRDLL;LZEXPAND_EXPORTS;%(PreprocessorDefinitions) Windows true true true Document "$(OutDir)convspec" "%(Filename).spec" LZEXPAND > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" LZEXPAND > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: lzexpand/lzexpand.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: lzexpand/wine_lzexpand.c ================================================ /* * LZ Decompression functions * * Copyright 1996 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * NOTES * * The LZ (Lempel Ziv) decompression was used in win16 installation programs. * It is a simple tabledriven decompression engine, the algorithm is not * documented as far as I know. WINE does not contain a compressor for * this format. * * The implementation is complete and there have been no reports of failures * for some time. * * TODO: * * o Check whether the return values are correct * */ #include "config.h" #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include "windef.h" #include "winbase.h" #include "lzexpand.h" #include "wine/unicode.h" #include "wine/debug.h" #include "wine/winbase16.h" WINE_DEFAULT_DEBUG_CHANNEL(file); /* The readahead length of the decompressor. Reading single bytes * using _lread() would be SLOW. */ #define GETLEN 2048 #define LZ_MAGIC_LEN 8 #define LZ_HEADER_LEN 14 /* Format of first 14 byte of LZ compressed file */ struct lzfileheader { BYTE magic[LZ_MAGIC_LEN]; BYTE compressiontype; CHAR lastchar; DWORD reallength; }; static const BYTE LZMagic[LZ_MAGIC_LEN]={'S','Z','D','D',0x88,0xf0,0x27,0x33}; #define LZ_TABLE_SIZE 0x1000 struct lzstate { HFILE realfd; /* the real filedescriptor */ CHAR lastchar; /* the last char of the filename */ DWORD reallength; /* the decompressed length of the file */ DWORD realcurrent; /* the position the decompressor currently is */ DWORD realwanted; /* the position the user wants to read from */ BYTE table[LZ_TABLE_SIZE]; /* the rotating LZ table */ UINT curtabent; /* CURrent TABle ENTry */ BYTE stringlen; /* length and position of current string */ DWORD stringpos; /* from stringtable */ WORD bytetype; /* bitmask within blocks */ BYTE *get; /* GETLEN bytes */ DWORD getcur; /* current read */ DWORD getlen; /* length last got */ }; #define MAX_LZSTATES 16 static struct lzstate *lzstates[MAX_LZSTATES]; #define LZ_MIN_HANDLE 0x400 #define IS_LZ_HANDLE(h) (((h) >= LZ_MIN_HANDLE) && ((h) < LZ_MIN_HANDLE+MAX_LZSTATES)) #define GET_LZ_STATE(h) (IS_LZ_HANDLE(h) ? lzstates[(h)-LZ_MIN_HANDLE] : NULL) /* reads one compressed byte, including buffering */ #define GET(lzs,b) _lzget(lzs,&b) #define GET_FLUSH(lzs) lzs->getcur=lzs->getlen; static int _lzget(struct lzstate *lzs,BYTE *b) { if (lzs->getcurgetlen) { *b = lzs->get[lzs->getcur++]; return 1; } else { int ret = _lread(lzs->realfd,lzs->get,GETLEN); if (ret==HFILE_ERROR) return HFILE_ERROR; if (ret==0) return 0; lzs->getlen = ret; lzs->getcur = 1; *b = *(lzs->get); return 1; } } /* internal function, reads lzheader * returns BADINHANDLE for non filedescriptors * return 0 for file not compressed using LZ * return UNKNOWNALG for unknown algorithm * returns lzfileheader in *head */ static INT read_header(HFILE fd,struct lzfileheader *head) { BYTE buf[LZ_HEADER_LEN]; if (_llseek(fd,0,SEEK_SET)==-1) return LZERROR_BADINHANDLE; /* We can't directly read the lzfileheader struct due to * structure element alignment */ if (_lread(fd,buf,LZ_HEADER_LEN)magic,buf,LZ_MAGIC_LEN); memcpy(&(head->compressiontype),buf+LZ_MAGIC_LEN,1); memcpy(&(head->lastchar),buf+LZ_MAGIC_LEN+1,1); /* FIXME: consider endianness on non-intel architectures */ memcpy(&(head->reallength),buf+LZ_MAGIC_LEN+2,4); if (memcmp(head->magic,LZMagic,LZ_MAGIC_LEN)) return 0; if (head->compressiontype!='A') return LZERROR_UNKNOWNALG; return 1; } /*********************************************************************** * LZStart (KERNEL32.@) */ INT WINAPI LZStart(void) { TRACE("(void)\n"); return 1; } /*********************************************************************** * LZInit (KERNEL32.@) * * initializes internal decompression buffers, returns lzfiledescriptor. * (return value the same as hfSrc, if hfSrc is not compressed) * on failure, returns error code <0 * lzfiledescriptors range from 0x400 to 0x410 (only 16 open files per process) * * since _llseek uses the same types as libc.lseek, we just use the macros of * libc */ HFILE WINAPI LZInit32( HFILE hfSrc, BOOL *lzhandle ) { struct lzfileheader head; struct lzstate *lzs; int i, ret; TRACE("(%d)\n",hfSrc); ret=read_header(hfSrc,&head); if (ret<=0) { _llseek(hfSrc,0,SEEK_SET); return ret?ret:hfSrc; } for (i = 0; i < MAX_LZSTATES; i++) if (!lzstates[i]) break; if (i == MAX_LZSTATES) return LZERROR_GLOBALLOC; lzstates[i] = lzs = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*lzs) ); if(lzs == NULL) return LZERROR_GLOBALLOC; lzs->realfd = hfSrc; lzs->lastchar = head.lastchar; lzs->reallength = head.reallength; lzs->get = HeapAlloc( GetProcessHeap(), 0, GETLEN ); lzs->getlen = 0; lzs->getcur = 0; if(lzs->get == NULL) { HeapFree(GetProcessHeap(), 0, lzs); lzstates[i] = NULL; return LZERROR_GLOBALLOC; } /* Yes, preinitialize with spaces */ memset(lzs->table,' ',LZ_TABLE_SIZE); /* Yes, start 16 byte from the END of the table */ lzs->curtabent = 0xff0; if (lzhandle) *lzhandle = TRUE; return LZ_MIN_HANDLE + i; } /*********************************************************************** * LZDone (KERNEL32.@) */ void WINAPI LZDone(void) { TRACE("(void)\n"); } /*********************************************************************** * GetExpandedNameA (KERNEL32.@) * * gets the full filename of the compressed file 'in' by opening it * and reading the header * * "file." is being translated to "file" * "file.bl_" (with lastchar 'a') is being translated to "file.bla" * "FILE.BL_" (with lastchar 'a') is being translated to "FILE.BLA" */ INT WINAPI GetExpandedNameA( LPSTR in, LPSTR out ) { struct lzfileheader head; HFILE fd; OFSTRUCT ofs; INT fnislowercased,ret,len; LPSTR s,t; TRACE("(%s)\n",in); fd=OpenFile(in,&ofs,OF_READ); if (fd==HFILE_ERROR) return (INT)(INT16)LZERROR_BADINHANDLE; strcpy(out,in); ret=read_header(fd,&head); if (ret<=0) { /* not a LZ compressed file, so the expanded name is the same * as the input name */ _lclose(fd); return 1; } /* look for directory prefix and skip it. */ s=out; while (NULL!=(t=strpbrk(s,"/\\:"))) s=t+1; /* now mangle the basename */ if (!*s) { /* FIXME: hmm. shouldn't happen? */ WARN("Specified a directory or what? (%s)\n",in); _lclose(fd); return 1; } /* see if we should use lowercase or uppercase on the last char */ fnislowercased=1; t=s+strlen(s)-1; while (t>=out) { if (!isalpha(*t)) { t--; continue; } fnislowercased=islower(*t); break; } if (isalpha(head.lastchar)) { if (fnislowercased) head.lastchar=tolower(head.lastchar); else head.lastchar=toupper(head.lastchar); } /* now look where to replace the last character */ if (NULL!=(t=strchr(s,'.'))) { if (t[1]=='\0') { t[0]='\0'; } else { len=strlen(t)-1; if (t[len]=='_') t[len]=head.lastchar; } } /* else no modification necessary */ _lclose(fd); return 1; } /*********************************************************************** * GetExpandedNameW (KERNEL32.@) */ INT WINAPI GetExpandedNameW( LPWSTR in, LPWSTR out ) { INT ret; DWORD len = WideCharToMultiByte( CP_ACP, 0, in, -1, NULL, 0, NULL, NULL ); char *xin = HeapAlloc( GetProcessHeap(), 0, len ); char *xout = HeapAlloc( GetProcessHeap(), 0, len+3 ); WideCharToMultiByte( CP_ACP, 0, in, -1, xin, len, NULL, NULL ); if ((ret = GetExpandedNameA( xin, xout )) > 0) MultiByteToWideChar( CP_ACP, 0, xout, -1, out, strlenW(in)+4 ); HeapFree( GetProcessHeap(), 0, xin ); HeapFree( GetProcessHeap(), 0, xout ); return ret; } /*********************************************************************** * LZRead (KERNEL32.@) */ INT WINAPI LZRead( HFILE fd, LPSTR vbuf, INT toread ) { int howmuch; BYTE b,*buf; struct lzstate *lzs; buf=(LPBYTE)vbuf; TRACE("(%d,%p,%d)\n",fd,buf,toread); howmuch=toread; if (!(lzs = GET_LZ_STATE(fd))) return _lread(fd,buf,toread); /* The decompressor itself is in a define, cause we need it twice * in this function. (the decompressed byte will be in b) */ #define DECOMPRESS_ONE_BYTE \ if (lzs->stringlen) { \ b = lzs->table[lzs->stringpos]; \ lzs->stringpos = (lzs->stringpos+1)&0xFFF; \ lzs->stringlen--; \ } else { \ if (!(lzs->bytetype&0x100)) { \ if (1!=GET(lzs,b)) \ return toread-howmuch; \ lzs->bytetype = b|0xFF00; \ } \ if (lzs->bytetype & 1) { \ if (1!=GET(lzs,b)) \ return toread-howmuch; \ } else { \ BYTE b1,b2; \ \ if (1!=GET(lzs,b1)) \ return toread-howmuch; \ if (1!=GET(lzs,b2)) \ return toread-howmuch; \ /* Format: \ * b1 b2 \ * AB CD \ * where CAB is the stringoffset in the table\ * and D+3 is the len of the string \ */ \ lzs->stringpos = b1|((b2&0xf0)<<4); \ lzs->stringlen = (b2&0xf)+2; \ /* 3, but we use a byte already below ... */\ b = lzs->table[lzs->stringpos];\ lzs->stringpos = (lzs->stringpos+1)&0xFFF;\ } \ lzs->bytetype>>=1; \ } \ /* store b in table */ \ lzs->table[lzs->curtabent++]= b; \ lzs->curtabent &= 0xFFF; \ lzs->realcurrent++; /* if someone has seeked, we have to bring the decompressor * to that position */ if (lzs->realcurrent!=lzs->realwanted) { /* if the wanted position is before the current position * I see no easy way to unroll ... We have to restart at * the beginning. *sigh* */ if (lzs->realcurrent>lzs->realwanted) { /* flush decompressor state */ _llseek(lzs->realfd,LZ_HEADER_LEN,SEEK_SET); GET_FLUSH(lzs); lzs->realcurrent= 0; lzs->bytetype = 0; lzs->stringlen = 0; memset(lzs->table,' ',LZ_TABLE_SIZE); lzs->curtabent = 0xFF0; } while (lzs->realcurrentrealwanted) { DECOMPRESS_ONE_BYTE; } } while (howmuch) { DECOMPRESS_ONE_BYTE; lzs->realwanted++; *buf++ = b; howmuch--; } return toread; #undef DECOMPRESS_ONE_BYTE } /*********************************************************************** * LZSeek (KERNEL32.@) */ LONG WINAPI LZSeek( HFILE fd, LONG off, INT type ) { struct lzstate *lzs; LONG newwanted; TRACE("(%d,%d,%d)\n",fd,off,type); /* not compressed? just use normal _llseek() */ if (!(lzs = GET_LZ_STATE(fd))) return _llseek(fd,off,type); newwanted = lzs->realwanted; switch (type) { case 1: /* SEEK_CUR */ newwanted += off; break; case 2: /* SEEK_END */ newwanted = lzs->reallength-off; break; default:/* SEEK_SET */ newwanted = off; break; } if (newwanted>lzs->reallength) return LZERROR_BADVALUE; if (newwanted<0) return LZERROR_BADVALUE; lzs->realwanted = newwanted; return newwanted; } /*********************************************************************** * LZCopy (KERNEL32.@) * * Copies everything from src to dest * if src is a LZ compressed file, it will be uncompressed. * will return the number of bytes written to dest or errors. */ LONG WINAPI LZCopy( HFILE src, HFILE dest ) { int usedlzinit = 0, ret, wret; LONG len; HFILE oldsrc = src, srcfd; FILETIME filetime; struct lzstate *lzs; #define BUFLEN 1000 CHAR buf[BUFLEN]; /* we need that weird typedef, for i can't seem to get function pointer * casts right. (Or they probably just do not like WINAPI in general) */ typedef UINT (WINAPI *_readfun)(HFILE,LPVOID,UINT); _readfun xread; TRACE("(%d,%d)\n",src,dest); if (!IS_LZ_HANDLE(src)) { src = LZInit32(src, NULL); if ((INT)src <= 0) return 0; if (src != oldsrc) usedlzinit=1; } /* not compressed? just copy */ if (!IS_LZ_HANDLE(src)) xread=_lread; else xread=(_readfun)LZRead; len=0; while (1) { ret=xread(src,buf,BUFLEN); if (ret<=0) { if (ret==0) break; if (ret==-1) return LZERROR_READ; return ret; } len += ret; wret = _lwrite(dest,buf,ret); if (wret!=ret) return LZERROR_WRITE; } /* Maintain the timestamp of source file to destination file */ srcfd = (!(lzs = GET_LZ_STATE(src))) ? src : lzs->realfd; GetFileTime( LongToHandle(srcfd), NULL, NULL, &filetime ); SetFileTime( LongToHandle(dest), NULL, NULL, &filetime ); /* close handle */ if (usedlzinit) LZClose(src); return len; #undef BUFLEN } /* reverses GetExpandedPathname */ static LPSTR LZEXPAND_MangleName( LPCSTR fn ) { char *p; char *mfn = HeapAlloc( GetProcessHeap(), 0, strlen(fn) + 3 ); /* "._" and \0 */ if(mfn == NULL) return NULL; strcpy( mfn, fn ); if (!(p = strrchr( mfn, '\\' ))) p = mfn; if ((p = strchr( p, '.' ))) { p++; if (strlen(p) < 3) strcat( p, "_" ); /* append '_' */ else p[strlen(p)-1] = '_'; /* replace last character */ } else strcat( mfn, "._" ); /* append "._" */ return mfn; } /*********************************************************************** * LZOpenFileA (KERNEL32.@) * * Opens a file. If not compressed, open it as a normal file. */ HFILE WINAPI LZOpenFile32( LPSTR fn, LPOFSTRUCT ofs, WORD mode, BOOL *lzhandle ) { HFILE fd,cfd; BYTE ofs_cBytes = ofs->cBytes; *lzhandle = FALSE; TRACE("(%s,%p,%d)\n",fn,ofs,mode); /* 0x70 represents all OF_SHARE_* flags, ignore them for the check */ fd=OpenFile(fn,ofs,mode); if (fd==HFILE_ERROR) { LPSTR mfn = LZEXPAND_MangleName(fn); fd = OpenFile(mfn,ofs,mode); HeapFree( GetProcessHeap(), 0, mfn ); } if (fd==HFILE_ERROR) ofs->cBytes = ofs_cBytes; if ((mode&~0x70)!=OF_READ) return fd; if (fd==HFILE_ERROR) return HFILE_ERROR; cfd=LZInit32(fd, lzhandle); if ((INT)cfd <= 0) return fd; return cfd; } /*********************************************************************** * LZClose (KERNEL32.@) */ void WINAPI LZClose( HFILE fd ) { struct lzstate *lzs; TRACE("(%d)\n",fd); if (!(lzs = GET_LZ_STATE(fd))) _lclose(fd); else { HeapFree( GetProcessHeap(), 0, lzs->get ); lzstates[fd - LZ_MIN_HANDLE] = NULL; if (DeleteDosFileHandle(lzs->realfd)) CloseHandle(lzs->realfd); HeapFree( GetProcessHeap(), 0, lzs ); } } ================================================ FILE: mmsystem/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(mmsystem SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/mmsystem.def mmsystem.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(mmsystem.dll16 mmsystem) target_link_libraries(mmsystem libwine winecrt0 krnl386 winmm.lib) set_target_properties(mmsystem PROPERTIES SUFFIX ".dll16") ================================================ FILE: mmsystem/Makefile.in ================================================ MODULE = mmsystem.dll16 IMPORTS = winmm user32 EXTRADLLFLAGS = -m16 -Wb,--main-module,winmm.dll C_SRCS = \ driver.c \ mci16.c \ message16.c \ mmio16.c \ mmsystem.c ================================================ FILE: mmsystem/driver.c ================================================ /* * WINE Drivers functions * * Copyright 1994 Martin Ayotte * Copyright 1998 Marcus Meissner * Copyright 1999,2000 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * TODO: * - LoadModule count and clean up is not handled correctly (it's not a * problem as long as FreeLibrary is not working correctly) */ #include #include #define NONAMELESSUNION #ifdef WINE_NO_UNICODE_MACROS # define WINELIB_NAME_AW(func) \ func##_must_be_suffixed_with_W_or_A_in_this_context \ func##_must_be_suffixed_with_W_or_A_in_this_context #else /* WINE_NO_UNICODE_MACROS */ # ifdef UNICODE # define WINELIB_NAME_AW(func) func##W # else # define WINELIB_NAME_AW(func) func##A # endif #endif /* WINE_NO_UNICODE_MACROS */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; #endif #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "wingdi.h" #include "winuser.h" #include "wownt32.h" //#include "mmddk.h" #include "wine/mmsystem16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(driver); typedef struct tagWINE_DRIVER { /* as usual LPWINE_DRIVER == hDriver32 */ HDRVR16 hDriver16; HMODULE16 hModule16; DRIVERPROC16 lpDrvProc; DWORD dwDriverID; struct tagWINE_DRIVER* lpPrevItem; struct tagWINE_DRIVER* lpNextItem; } WINE_DRIVER, *LPWINE_DRIVER; static LPWINE_DRIVER lpDrvItemList = NULL; /************************************************************************** * DRIVER_GetNumberOfModuleRefs [internal] * * Returns the number of open drivers which share the same module. */ static WORD DRIVER_GetNumberOfModuleRefs(LPWINE_DRIVER lpNewDrv) { LPWINE_DRIVER lpDrv; WORD count = 0; for (lpDrv = lpDrvItemList; lpDrv; lpDrv = lpDrv->lpNextItem) { if (lpDrv->hModule16 == lpNewDrv->hModule16) { count++; } } return count; } /************************************************************************** * DRIVER_FindFromHDrvr16 [internal] * * From a hDrvr being 16 bits, returns the WINE internal structure. */ static LPWINE_DRIVER DRIVER_FindFromHDrvr16(HDRVR16 hDrvr) { LPWINE_DRIVER lpDrv; for (lpDrv = lpDrvItemList; lpDrv; lpDrv = lpDrv->lpNextItem) { if (lpDrv->hDriver16 == hDrvr) { break; } } return lpDrv; } /************************************************************************** * DRIVER_SendMessage [internal] */ static inline LRESULT DRIVER_SendMessage(LPWINE_DRIVER lpDrv, UINT16 msg, LPARAM lParam1, LPARAM lParam2) { WORD args[8]; DWORD ret; TRACE("Before CallDriverProc proc=%p driverID=%08x wMsg=%04x p1=%08lx p2=%08lx\n", lpDrv->lpDrvProc, lpDrv->dwDriverID, msg, lParam1, lParam2); args[7] = HIWORD(lpDrv->dwDriverID); args[6] = LOWORD(lpDrv->dwDriverID); args[5] = lpDrv->hDriver16; args[4] = msg; args[3] = HIWORD(lParam1); args[2] = LOWORD(lParam1); args[1] = HIWORD(lParam2); args[0] = LOWORD(lParam2); WOWCallback16Ex( (DWORD)lpDrv->lpDrvProc, WCB16_PASCAL, sizeof(args), args, &ret ); return ret; } /************************************************************************** * DrvSendMessage (MMSYSTEM.1102) */ LRESULT WINAPI DrvSendMessage16(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1, LPARAM lParam2) { LPWINE_DRIVER lpDrv; LRESULT retval = 0; TRACE("(%04x, %04X, %08lX, %08lX)\n", hDriver, msg, lParam1, lParam2); if ((lpDrv = DRIVER_FindFromHDrvr16(hDriver)) != NULL) { retval = DRIVER_SendMessage(lpDrv, msg, lParam1, lParam2); } else { WARN("Bad driver handle %u\n", hDriver); } TRACE("retval = %ld\n", retval); return retval; } /************************************************************************** * DRIVER_RemoveFromList [internal] * * Generates all the logic to handle driver closure / deletion * Removes a driver struct to the list of open drivers. */ static BOOL DRIVER_RemoveFromList(LPWINE_DRIVER lpDrv) { lpDrv->dwDriverID = 0; if (DRIVER_GetNumberOfModuleRefs(lpDrv) == 1) { DRIVER_SendMessage(lpDrv, DRV_DISABLE, 0L, 0L); DRIVER_SendMessage(lpDrv, DRV_FREE, 0L, 0L); } if (lpDrv->lpPrevItem) lpDrv->lpPrevItem->lpNextItem = lpDrv->lpNextItem; else lpDrvItemList = lpDrv->lpNextItem; if (lpDrv->lpNextItem) lpDrv->lpNextItem->lpPrevItem = lpDrv->lpPrevItem; return TRUE; } /************************************************************************** * DRIVER_AddToList [internal] * * Adds a driver struct to the list of open drivers. * Generates all the logic to handle driver creation / open. */ static BOOL DRIVER_AddToList(LPWINE_DRIVER lpNewDrv, LPARAM lParam1, LPARAM lParam2) { /* First driver to be loaded for this module, need to load correctly the module */ if (DRIVER_GetNumberOfModuleRefs(lpNewDrv) == 0) { if (DRIVER_SendMessage(lpNewDrv, DRV_LOAD, 0L, 0L) != DRV_SUCCESS) { TRACE("DRV_LOAD failed on driver %p\n", lpNewDrv); return FALSE; } /* returned value is not checked */ DRIVER_SendMessage(lpNewDrv, DRV_ENABLE, 0L, 0L); } lpNewDrv->lpNextItem = NULL; if (lpDrvItemList == NULL) { lpDrvItemList = lpNewDrv; lpNewDrv->lpPrevItem = NULL; } else { LPWINE_DRIVER lpDrv = lpDrvItemList; /* find end of list */ while (lpDrv->lpNextItem != NULL) lpDrv = lpDrv->lpNextItem; lpDrv->lpNextItem = lpNewDrv; lpNewDrv->lpPrevItem = lpDrv; } /* Now just open a new instance of a driver on this module */ lpNewDrv->dwDriverID = DRIVER_SendMessage(lpNewDrv, DRV_OPEN, lParam1, lParam2); if (lpNewDrv->dwDriverID == 0) { TRACE("DRV_OPEN failed on driver %p\n", lpNewDrv); DRIVER_RemoveFromList(lpNewDrv); return FALSE; } return TRUE; } /************************************************************************** * DRIVER_TryOpenDriver16 [internal] * * Tries to load a 16 bit driver whose DLL's (module) name is lpFileName. */ static LPWINE_DRIVER DRIVER_TryOpenDriver16(LPSTR lpFileName, LPARAM lParam2) { static WORD DRIVER_hDrvr16Counter /* = 0 */; LPWINE_DRIVER lpDrv = NULL; HMODULE16 hModule; DRIVERPROC16 lpProc; LPSTR ptr; TRACE("('%s', %08lX);\n", lpFileName, lParam2); if (strlen(lpFileName) < 1) return lpDrv; if ((ptr = strchr(lpFileName, ' ')) != NULL) { *ptr++ = '\0'; while (*ptr == ' ') ptr++; if (*ptr == '\0') ptr = NULL; } if ((hModule = LoadLibrary16(lpFileName)) < 32) goto exit; if ((lpProc = (DRIVERPROC16)GetProcAddress16(hModule, "DRIVERPROC")) == NULL) goto exit; if ((lpDrv = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_DRIVER))) == NULL) goto exit; lpDrv->dwDriverID = 0; while (DRIVER_FindFromHDrvr16(++DRIVER_hDrvr16Counter)); lpDrv->hDriver16 = DRIVER_hDrvr16Counter; lpDrv->hModule16 = hModule; lpDrv->lpDrvProc = lpProc; if (!DRIVER_AddToList(lpDrv, (LPARAM)ptr, lParam2)) goto exit; return lpDrv; exit: TRACE("Unable to load 16 bit module (%s): %04x\n", lpFileName, hModule); if (hModule >= 32) FreeLibrary16(hModule); HeapFree(GetProcessHeap(), 0, lpDrv); return NULL; } /************************************************************************** * DrvOpen (MMSYSTEM.1100) */ HDRVR16 WINAPI DrvOpen16(LPCSTR lpDriverName, LPCSTR lpSectionName, LPARAM lParam2) { LPWINE_DRIVER lpDrv = NULL; char drvName[128]; TRACE("(%s, %s, %08lX);\n", debugstr_a(lpDriverName), debugstr_a(lpSectionName), lParam2); if (!lpDriverName || !*lpDriverName) return 0; if (lpSectionName == NULL) { strcpy(drvName, lpDriverName); if ((lpDrv = DRIVER_TryOpenDriver16(drvName, lParam2))) goto the_end; /* in case hDriver is NULL, search in Drivers section */ lpSectionName = "Drivers"; } if (GetPrivateProfileStringA(lpSectionName, lpDriverName, "", drvName, sizeof(drvName), "SYSTEM.INI") > 0) { lpDrv = DRIVER_TryOpenDriver16(drvName, lParam2); } if (!lpDrv) { if (!stricmp(lpSectionName, "drivers")) { // if 32bit driver exists pretend success if (GetPrivateProfileStringA("drivers32", lpDriverName, "", drvName, sizeof(drvName), "SYSTEM.INI") > 0) return 0xdead; } else if (!stricmp(lpSectionName, "mci")) { if (GetPrivateProfileStringA("mci32", lpDriverName, "", drvName, sizeof(drvName), "SYSTEM.INI") > 0) return 0xdead; } TRACE("Failed to open driver %s from system.ini file, section %s\n", debugstr_a(lpDriverName), debugstr_a(lpSectionName)); return 0; } the_end: TRACE("=> %04x / %p\n", lpDrv->hDriver16, lpDrv); return lpDrv->hDriver16; } /************************************************************************** * DrvClose16 (MMSYSTEM.1101) */ LRESULT WINAPI DrvClose16(HDRVR16 hDrvr, LPARAM lParam1, LPARAM lParam2) { LPWINE_DRIVER lpDrv; TRACE("(%04x, %08lX, %08lX);\n", hDrvr, lParam1, lParam2); if ((lpDrv = DRIVER_FindFromHDrvr16(hDrvr)) != NULL) { DRIVER_SendMessage(lpDrv, DRV_CLOSE, lParam1, lParam2); if (DRIVER_RemoveFromList(lpDrv)) { HeapFree(GetProcessHeap(), 0, lpDrv); return TRUE; } } WARN("Failed to close driver\n"); return FALSE; } /************************************************************************** * DrvGetModuleHandle (MMSYSTEM.1103) */ HMODULE16 WINAPI DrvGetModuleHandle16(HDRVR16 hDrvr) { LPWINE_DRIVER lpDrv; HMODULE16 hModule = 0; TRACE("(%04x);\n", hDrvr); if ((lpDrv = DRIVER_FindFromHDrvr16(hDrvr)) != NULL) { hModule = lpDrv->hModule16; } TRACE("=> %04x\n", hModule); return hModule; } /************************************************************************** * DrvDefDriverProc (MMSYSTEM.1104) */ LRESULT WINAPI DrvDefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, LPARAM lParam1, LPARAM lParam2) { TRACE("devID=0x%08x hDrv=0x%04x wMsg=%04x lP1=0x%08lx lP2=0x%08lx\n", dwDevID, hDriv, wMsg, lParam1, lParam2); switch(wMsg) { case DRV_LOAD: case DRV_FREE: case DRV_ENABLE: case DRV_DISABLE: return (LRESULT)1L; case DRV_OPEN: case DRV_CLOSE: case DRV_QUERYCONFIGURE: return (LRESULT)0L; case DRV_CONFIGURE: MessageBoxA(0, "Driver isn't configurable !", "Wine Driver", MB_OK); return (LRESULT)0L; case DRV_INSTALL: case DRV_REMOVE: return DRV_SUCCESS; default: return (LRESULT)0L; } } /************************************************************************** * DriverProc (MMSYSTEM.6) */ LRESULT WINAPI DriverProc16(DWORD dwDevID, HDRVR16 hDrv, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { return DrvDefDriverProc16(dwDevID, hDrv, wMsg, dwParam1, dwParam2); } ================================================ FILE: mmsystem/mci16.c ================================================ /* * MMSYSTEM functions * * Copyright 1993 Martin Ayotte * 1998-2003,2009 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #define NONAMELESSUNION #ifdef WINE_NO_UNICODE_MACROS # define WINELIB_NAME_AW(func) \ func##_must_be_suffixed_with_W_or_A_in_this_context \ func##_must_be_suffixed_with_W_or_A_in_this_context #else /* WINE_NO_UNICODE_MACROS */ # ifdef UNICODE # define WINELIB_NAME_AW(func) func##W # else # define WINELIB_NAME_AW(func) func##A # endif #endif /* WINE_NO_UNICODE_MACROS */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; #endif #include "windef.h" #include "winbase.h" #include "mmsystem.h" #include "winternl.h" #include "wownt32.h" #include "winnls.h" #include "wine/winuser16.h" #include "winemm16.h" #include "digitalv.h" #include "mciavi.h" #include "../msvideo/vfw16.h" #include "wine/debug.h" #ifndef MCI_OPEN_DRIVER #define MCI_OPEN_DRIVER 0x0801 #endif #ifndef MCI_CLOSE_DRIVER #define MCI_CLOSE_DRIVER 0x0802 #endif WINE_DEFAULT_DEBUG_CHANNEL(mmsys); char *WINAPI xlate_str_handle(const char *origstr, char *newstr) { if (!strncmp(origstr, "update ", 7)) { int pos1, pos2, hdc16; int count = sscanf(origstr, "%[a-z ]%n%d%n", newstr, &pos1, &hdc16, &pos2); sprintf(newstr + pos1, " %u%s", HDC_32((HDC16)hdc16), origstr + pos2); return newstr; } else if (!strncmp(origstr, "setvideo ", 9)) { char *pal = strstr(origstr, "palette handle"); if (pal) { int pos0 = (intptr_t)pal - (intptr_t)origstr; strncpy(newstr, origstr, pos0); int pos1, pos2, hpal16; int count = sscanf(pal, "%[a-z ]%n%d%n", newstr + pos0, &pos1, &hpal16, &pos2); sprintf(newstr + pos0 + pos1, " %u%s", HPALETTE_32((HPALETTE16)hpal16), pal + pos2); return newstr; } } else if (!strncmp(origstr, "open ", 5)) { char *par = strstr(origstr, "parent"); if (par) { int pos0 = (intptr_t)par - (intptr_t)origstr; strncpy(newstr, origstr, pos0); int pos1, pos2, hwnd16; int count = sscanf(par, "%[a-z ]%n%d%n", newstr + pos0, &pos1, &hwnd16, &pos2); sprintf(newstr + pos0 + pos1, " %u%s", HWND_32((HWND16)hwnd16), par + pos2); return newstr; } } else if (!strncmp(origstr, "window ", 7)) { char *hand = strstr(origstr, "handle"); if (hand) { int pos0 = (intptr_t)hand - (intptr_t)origstr; strncpy(newstr, origstr, pos0); int pos1, pos2, hwnd16; int count = sscanf(hand, "%[a-z ]%n%d%n", newstr + pos0, &pos1, &hwnd16, &pos2); sprintf(newstr + pos0 + pos1, " %u%s", HWND_32((HWND16)hwnd16), hand + pos2); return newstr; } } return origstr; } static void xlate_stat_handle(const char *cmdstr, char *retstr) { if (strstr(cmdstr, "window handle")) { DWORD handle = strtoul(retstr, NULL, 10); itoa(HWND_16(handle), retstr, 10); } else if (strstr(cmdstr, "palette handle")) { DWORD handle = strtoul(retstr, NULL, 10); itoa(HPALETTE_16(handle), retstr, 10); } } // handle the wait ourselves so to prevent the thread from being blocked for 300ms static DWORD fix_play_wait(const char *cmdstr, char *retstr, int retlen, char *waitpos) { char newstr[128]; HWND wndwait = NULL; DWORD devid; if (waitpos && !waitpos[5]) { char sid[20]; sscanf(cmdstr + 5, "%s", &sid); devid = mciGetDeviceIDA(sid); MCI_GETDEVCAPS_PARMS devcaps = {0}; devcaps.dwItem = MCI_GETDEVCAPS_DEVICE_TYPE; mciSendCommandA(devid, MCI_GETDEVCAPS, MCI_GETDEVCAPS_ITEM, &devcaps); // handle the wait ourselves so to prevent the thread from being blocked for 300ms if (devcaps.dwReturn == MCI_DEVTYPE_DIGITAL_VIDEO) { wndwait = CreateWindowA("STATIC", "mcimsgwnd", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, 0); if (wndwait) { int len = (INT_PTR)waitpos - (INT_PTR)cmdstr; sprintf(newstr, "%.*s notify", len, cmdstr, wndwait); cmdstr = newstr; } } } DWORD ret = mciSendStringA(cmdstr, retstr, retlen, wndwait); if (!ret && wndwait) { DWORD count; ReleaseThunkLock(&count); while (1) { MCI_GENERIC_PARMS genparm = {0}; MSG msg; DWORD test; if (mciDriverYield(devid)) mciSendCommandA(devid, MCI_STOP, 0, &genparm); MsgWaitForMultipleObjects(0, 0, FALSE, 300, QS_POSTMESSAGE | QS_SENDMESSAGE); if (PeekMessageA(&msg, wndwait, MM_MCINOTIFY, MM_MCINOTIFY, PM_REMOVE)) break; } RestoreThunkLock(count); } if (wndwait) DestroyWindow(wndwait); return ret; } /************************************************************************** * MCI_MessageToString [internal] */ static const char* MCI_MessageToString(UINT wMsg) { static char buffer[100]; #define CASE(s) case (s): return #s switch (wMsg) { CASE(DRV_LOAD); CASE(DRV_ENABLE); CASE(DRV_OPEN); CASE(DRV_CLOSE); CASE(DRV_DISABLE); CASE(DRV_FREE); CASE(DRV_CONFIGURE); CASE(DRV_QUERYCONFIGURE); CASE(DRV_INSTALL); CASE(DRV_REMOVE); CASE(DRV_EXITSESSION); CASE(DRV_EXITAPPLICATION); CASE(DRV_POWER); CASE(MCI_BREAK); CASE(MCI_CLOSE); CASE(MCI_CLOSE_DRIVER); CASE(MCI_COPY); CASE(MCI_CUE); CASE(MCI_CUT); CASE(MCI_DELETE); CASE(MCI_ESCAPE); CASE(MCI_FREEZE); CASE(MCI_PAUSE); CASE(MCI_PLAY); CASE(MCI_GETDEVCAPS); CASE(MCI_INFO); CASE(MCI_LOAD); CASE(MCI_OPEN); CASE(MCI_OPEN_DRIVER); CASE(MCI_PASTE); CASE(MCI_PUT); CASE(MCI_REALIZE); CASE(MCI_RECORD); CASE(MCI_RESUME); CASE(MCI_SAVE); CASE(MCI_SEEK); CASE(MCI_SET); CASE(MCI_SOUND); CASE(MCI_SPIN); CASE(MCI_STATUS); CASE(MCI_STEP); CASE(MCI_STOP); CASE(MCI_SYSINFO); CASE(MCI_UNFREEZE); CASE(MCI_UPDATE); CASE(MCI_WHERE); CASE(MCI_WINDOW); /* constants for digital video */ CASE(MCI_CAPTURE); CASE(MCI_MONITOR); CASE(MCI_RESERVE); CASE(MCI_SETAUDIO); CASE(MCI_SIGNAL); CASE(MCI_SETVIDEO); CASE(MCI_QUALITY); CASE(MCI_LIST); CASE(MCI_UNDO); CASE(MCI_CONFIGURE); CASE(MCI_RESTORE); #undef CASE default: sprintf(buffer, "MCI_<<%04X>>", wMsg); return buffer; } } static LPWSTR MCI_strdupAtoW( LPCSTR str ) { LPWSTR ret; INT len; if (!str) return NULL; len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 ); ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); if (ret) MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len ); return ret; } /************************************************************************** * MCI_MapMsg16To32W [internal] */ static MMSYSTEM_MapType MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* lParam) { if (*lParam == 0) { if (wMsg == MCI_PLAY) { *lParam = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MCI_GENERIC_PARMS)); return MMSYSTEM_MAP_OKMEM; } return MMSYSTEM_MAP_OK; } /* FIXME: to add also (with seg/linear modifications to do): * MCI_LOAD, MCI_QUALITY, MCI_RESERVE, MCI_RESTORE, MCI_SAVE, MCI_SETTUNER */ switch (wMsg) { /* case MCI_CAPTURE */ case MCI_CLOSE: case MCI_CLOSE_DRIVER: case MCI_CONFIGURE: case MCI_COPY: case MCI_CUE: case MCI_CUT: case MCI_DELETE: case MCI_GETDEVCAPS: /* case MCI_INDEX: */ case MCI_LIST: /* case MCI_MARK: */ /* case MCI_MONITOR: */ case MCI_PASTE: case MCI_PAUSE: case MCI_PLAY: case MCI_REALIZE: case MCI_RECORD: case MCI_RESUME: case MCI_SEEK: case MCI_SET: case MCI_SETAUDIO: /* case MCI_SETTIMECODE:*/ case MCI_SIGNAL: case MCI_SPIN: case MCI_STEP: case MCI_STOP: /* case MCI_UNDO: */ { LPMCI_GENERIC_PARMS mgp = MapSL(*lParam); mgp->dwCallback = HWND_32(mgp->dwCallback); *lParam = mgp; } return MMSYSTEM_MAP_OKMEM; case MCI_SETVIDEO: { LPMCI_DGV_SETVIDEO_PARMSA mdsvp32 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LPMCI_DGV_SETVIDEO_PARMS16) + sizeof(MCI_DGV_SETVIDEO_PARMSA)); LPMCI_DGV_SETVIDEO_PARMS16 mdsvp16 = MapSL(*lParam); if (mdsvp32) { *(LPMCI_DGV_SETVIDEO_PARMS16*)(mdsvp32) = mdsvp16; mdsvp32 = (LPMCI_DGV_SETVIDEO_PARMSA)((char*)mdsvp32 + sizeof(LPMCI_DGV_SETVIDEO_PARMS16)); mdsvp32->dwCallback = HWND_32(mdsvp16->dwCallback); mdsvp32->dwItem = mdsvp16->dwItem; if ((dwFlags & MCI_DGV_SETVIDEO_ITEM) && (mdsvp16->dwItem == MCI_DGV_SETVIDEO_PALHANDLE)) mdsvp32->dwValue = HPALETTE_32(mdsvp16->dwValue); else if ((dwFlags & MCI_DGV_SETVIDEO_ITEM) && (mdsvp16->dwItem == MCI_AVI_SETVIDEO_DRAW_PROCEDURE)) { static void *(*get_video_thunk)(DWORD) = 0; if (!get_video_thunk) { HMODULE msvideo = LoadLibraryA("msvideo.dll16"); if (msvideo) get_video_thunk = (void *(*)(DWORD))GetProcAddress(msvideo, "get_video_thunk"); } if (get_video_thunk) mdsvp32->dwValue = get_video_thunk(mdsvp16->dwValue); } else mdsvp32->dwValue = mdsvp16->dwValue; mdsvp32->dwOver = mdsvp16->dwOver; if (dwFlags & MCI_DGV_SETVIDEO_ALG) mdsvp32->lpstrAlgorithm = MapSL(mdsvp16->lpstrAlgorithm); if (dwFlags & MCI_DGV_SETVIDEO_QUALITY) mdsvp32->lpstrQuality = MapSL(mdsvp16->lpstrQuality); *lParam = (DWORD)mdsvp32; } else { return MMSYSTEM_MAP_NOMEM; } } return MMSYSTEM_MAP_OKMEM; case MCI_UPDATE: { if (dwFlags & (MCI_DGV_UPDATE_HDC | MCI_DGV_RECT)) { LPMCI_DGV_UPDATE_PARMS mdup32 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LPMCI_DGV_UPDATE_PARMS16) + sizeof(MCI_DGV_UPDATE_PARMS)); LPMCI_DGV_UPDATE_PARMS16 mdup16 = MapSL(*lParam); if (mdup32) { *(LPMCI_DGV_UPDATE_PARMS16*)(mdup32) = mdup16; mdup32 = (LPMCI_DGV_UPDATE_PARMS)((char*)mdup32 + sizeof(LPMCI_DGV_UPDATE_PARMS16)); mdup32->dwCallback = HWND_32(mdup16->dwCallback); mdup32->rc.left = mdup16->rc.left; mdup32->rc.top = mdup16->rc.top; mdup32->rc.right = mdup16->rc.right; mdup32->rc.bottom = mdup16->rc.bottom; mdup32->hDC = HDC_32(mdup16->hDC); *lParam = (DWORD)mdup32; } else { return MMSYSTEM_MAP_NOMEM; } } else { LPMCI_GENERIC_PARMS mgp = MapSL(*lParam); mgp->dwCallback = HWND_32(mgp->dwCallback); *lParam = mgp; } } return MMSYSTEM_MAP_OKMEM; case MCI_WHERE: case MCI_FREEZE: case MCI_UNFREEZE: case MCI_PUT: { LPMCI_DGV_RECT_PARMS mdrp32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_DGV_RECT_PARMS16) + sizeof(MCI_DGV_RECT_PARMS)); LPMCI_DGV_RECT_PARMS16 mdrp16 = MapSL(*lParam); if (mdrp32) { *(LPMCI_DGV_RECT_PARMS16*)(mdrp32) = mdrp16; mdrp32 = (LPMCI_DGV_RECT_PARMS)((char*)mdrp32 + sizeof(LPMCI_DGV_RECT_PARMS16)); mdrp32->dwCallback = HWND_32(mdrp16->dwCallback); mdrp32->rc.left = mdrp16->rc.left; mdrp32->rc.top = mdrp16->rc.top; mdrp32->rc.right = mdrp16->rc.right; mdrp32->rc.bottom = mdrp16->rc.bottom; } else { return MMSYSTEM_MAP_NOMEM; } *lParam = (DWORD)mdrp32; } return MMSYSTEM_MAP_OKMEM; case MCI_STATUS: { if (dwFlags & (MCI_DGV_STATUS_REFERENCE | MCI_DGV_STATUS_DISKSPACE)) { LPMCI_DGV_STATUS_PARMSW mdsp32w = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LPMCI_DGV_STATUS_PARMS16) + sizeof(MCI_DGV_STATUS_PARMSW)); LPMCI_DGV_STATUS_PARMS16 mdsp16 = MapSL(*lParam); if (mdsp32w) { *(LPMCI_DGV_STATUS_PARMS16*)(mdsp32w) = mdsp16; mdsp32w = (LPMCI_DGV_STATUS_PARMSW)((char*)mdsp32w + sizeof(LPMCI_DGV_STATUS_PARMS16)); mdsp32w->dwCallback = HWND_32(mdsp16->dwCallback); mdsp32w->dwReturn = mdsp16->dwReturn; mdsp32w->dwItem = mdsp16->dwItem; mdsp32w->dwTrack = mdsp16->dwTrack; if (dwFlags & MCI_DGV_STATUS_DISKSPACE) mdsp32w->lpstrDrive = MCI_strdupAtoW(MapSL(mdsp16->lpstrDrive)); if (dwFlags & MCI_DGV_STATUS_REFERENCE) mdsp32w->dwReference = mdsp16->dwReference; *lParam = (DWORD)mdsp32w; } else { return MMSYSTEM_MAP_NOMEM; } } else { *lParam = (DWORD)MapSL(*lParam); if(!(dwFlags & MCI_STATUS_ITEM)) return MMSYSTEM_MAP_OK; } } return MMSYSTEM_MAP_OKMEM; case MCI_WINDOW: { LPMCI_OVLY_WINDOW_PARMSW mowp32w = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MCI_OVLY_WINDOW_PARMSW)); LPMCI_OVLY_WINDOW_PARMS16 mowp16 = MapSL(*lParam); if (mowp32w) { mowp32w->dwCallback = HWND_32(mowp16->dwCallback); mowp32w->hWnd = HWND_32(mowp16->hWnd); mowp32w->nCmdShow = mowp16->nCmdShow; if (dwFlags & (MCI_DGV_WINDOW_TEXT | MCI_OVLY_WINDOW_TEXT)) mowp32w->lpstrText = MCI_strdupAtoW(MapSL(mowp16->lpstrText)); } else { return MMSYSTEM_MAP_NOMEM; } *lParam = (DWORD)mowp32w; } return MMSYSTEM_MAP_OKMEM; case MCI_ESCAPE: { LPMCI_VD_ESCAPE_PARMSW mvep32w = HeapAlloc(GetProcessHeap(), 0, sizeof(MCI_VD_ESCAPE_PARMSW)); LPMCI_VD_ESCAPE_PARMS16 mvep16 = MapSL(*lParam); if (mvep32w) { mvep32w->dwCallback = HWND_32(mvep16->dwCallback); mvep32w->lpstrCommand = MCI_strdupAtoW(MapSL(mvep16->lpstrCommand)); } else { return MMSYSTEM_MAP_NOMEM; } *lParam = (DWORD)mvep32w; } return MMSYSTEM_MAP_OKMEM; case MCI_INFO: { LPMCI_DGV_INFO_PARMSW mip32w = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_DGV_INFO_PARMS16) + sizeof(MCI_DGV_INFO_PARMSW)); LPMCI_DGV_INFO_PARMS16 mip16 = MapSL(*lParam); if (mip32w) { *(LPMCI_DGV_INFO_PARMS16*)(mip32w) = mip16; mip32w = (LPMCI_DGV_INFO_PARMSW)((char*)mip32w + sizeof(LPMCI_DGV_INFO_PARMS16)); mip32w->dwCallback = HWND_32(mip16->dwCallback); mip32w->lpstrReturn = HeapAlloc(GetProcessHeap(), 0, mip16->dwRetSize * sizeof(WCHAR)); mip32w->dwRetSize = mip16->dwRetSize; if (dwFlags & MCI_DGV_INFO_ITEM) mip32w->dwItem = mip16->dwItem; } else { return MMSYSTEM_MAP_NOMEM; } *lParam = (DWORD)mip32w; } return MMSYSTEM_MAP_OKMEM; case MCI_OPEN: case MCI_OPEN_DRIVER: { LPMCI_OPEN_PARMSW mop32w = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_OPEN_PARMS16) + sizeof(MCI_ANIM_OPEN_PARMSW)); LPMCI_OPEN_PARMS16 mop16 = MapSL(*lParam); if (mop32w) { *(LPMCI_OPEN_PARMS16*)(mop32w) = mop16; mop32w = (LPMCI_OPEN_PARMSW)((char*)mop32w + sizeof(LPMCI_OPEN_PARMS16)); mop32w->dwCallback = HWND_32(mop16->dwCallback); mop32w->wDeviceID = mop16->wDeviceID; if ( ( dwFlags & ( MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID)) == MCI_OPEN_TYPE) mop32w->lpstrDeviceType = MCI_strdupAtoW(MapSL(mop16->lpstrDeviceType)); else mop32w->lpstrDeviceType = (LPWSTR) mop16->lpstrDeviceType; if( ( dwFlags & ( MCI_OPEN_ELEMENT | MCI_OPEN_ELEMENT_ID)) == MCI_OPEN_ELEMENT) mop32w->lpstrElementName = MCI_strdupAtoW(MapSL(mop16->lpstrElementName)); else mop32w->lpstrElementName = (LPWSTR) mop16->lpstrElementName; if( ( dwFlags & MCI_OPEN_ALIAS)) mop32w->lpstrAlias = MCI_strdupAtoW(MapSL(mop16->lpstrAlias)); else mop32w->lpstrAlias = (LPWSTR) mop16->lpstrAlias; /* copy extended information if any... * FIXME: this may seg fault if initial structure does not contain them and * the reads after msip16 fail under LDT limits... * NOTE: this should be split in two. First pass, while calling MCI_OPEN, and * should not take care of extended parameters, and should be used by MCI_Open * to fetch uDevType. When, this is known, the mapping for sending the * MCI_OPEN_DRIVER shall be done depending on uDevType. */ if (HIWORD(dwFlags)) { memcpy(mop32w + 1, mop16 + 1, sizeof(MCI_ANIM_OPEN_PARMS16) - sizeof(MCI_OPEN_PARMS16)); ((MCI_ANIM_OPEN_PARMSW *)mop32w)->hWndParent = HWND_32(((MCI_ANIM_OPEN_PARMS16 *)mop16)->hWndParent); } } else { return MMSYSTEM_MAP_NOMEM; } *lParam = (DWORD)mop32w; } return MMSYSTEM_MAP_OKMEM; case MCI_SYSINFO: { MCI_SYSINFO_PARMSW *origmsip32w; MCI_SYSINFO_PARMSW *msip32w = HeapAlloc(GetProcessHeap(), 0, sizeof(MCI_OPEN_PARMS16 *) + sizeof(MCI_SYSINFO_PARMSW)); MCI_SYSINFO_PARMS16 *msip16 = MapSL(*lParam); if (!msip32w) return MMSYSTEM_MAP_NOMEM; origmsip32w = msip32w; *(MCI_SYSINFO_PARMS16 **)msip32w = msip16; msip32w = (MCI_SYSINFO_PARMSW *)((char *)msip32w + sizeof(MCI_OPEN_PARMS16 *)); msip32w->dwCallback = HWND_32(msip16->dwCallback); msip32w->lpstrReturn = HeapAlloc(GetProcessHeap(), 0, (dwFlags & MCI_SYSINFO_QUANTITY) ? sizeof(DWORD) : msip16->dwRetSize * sizeof(WCHAR)); if (!msip32w->lpstrReturn) { HeapFree(GetProcessHeap(), 0, origmsip32w); return MMSYSTEM_MAP_NOMEM; } msip32w->dwRetSize = (dwFlags & MCI_SYSINFO_QUANTITY) ? sizeof(DWORD) : msip16->dwRetSize; msip32w->dwNumber = msip16->dwNumber; msip32w->wDeviceType = msip16->wDeviceType; *lParam = (DWORD)msip32w; } return MMSYSTEM_MAP_OKMEM; case MCI_SOUND: { LPMCI_SOUND_PARMSW mbp32 = HeapAlloc(GetProcessHeap(), 0, sizeof(MCI_SOUND_PARMSW)); LPMCI_SOUND_PARMS16 mbp16 = MapSL(*lParam); if (mbp32) { mbp32->dwCallback = HWND_32(mbp16->dwCallback); mbp32->lpstrSoundName = MCI_strdupAtoW(MapSL(mbp16->lpstrSoundName)); } else { return MMSYSTEM_MAP_NOMEM; } *lParam = (DWORD)mbp32; } return MMSYSTEM_MAP_OKMEM; case DRV_LOAD: case DRV_ENABLE: case DRV_OPEN: case DRV_CLOSE: case DRV_DISABLE: case DRV_FREE: case DRV_CONFIGURE: case DRV_QUERYCONFIGURE: case DRV_INSTALL: case DRV_REMOVE: case DRV_EXITSESSION: case DRV_EXITAPPLICATION: case DRV_POWER: FIXME("This is a hack\n"); return MMSYSTEM_MAP_OK; default: FIXME("Don't know how to map msg=%s\n", MCI_MessageToString(wMsg)); } return MMSYSTEM_MAP_MSGERROR; } /************************************************************************** * MCI_UnMapMsg16To32W [internal] */ static void MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR lParam, DWORD result) { switch (wMsg) { case MCI_CLOSE: case MCI_CLOSE_DRIVER: case MCI_CONFIGURE: case MCI_COPY: case MCI_CUE: case MCI_CUT: case MCI_DELETE: case MCI_GETDEVCAPS: case MCI_LIST: case MCI_PASTE: case MCI_PAUSE: case MCI_PLAY: case MCI_REALIZE: case MCI_RECORD: case MCI_RESUME: case MCI_SEEK: case MCI_SET: case MCI_SETAUDIO: case MCI_SPIN: case MCI_STEP: case MCI_STOP: case MCI_SIGNAL: if (lParam) { LPMCI_GENERIC_PARMS mgp = (LPMCI_GENERIC_PARMS)lParam; mgp->dwCallback = HWND_16(mgp->dwCallback); } break; case MCI_SETVIDEO: if (lParam) { char *base = (char*)lParam - sizeof(LPMCI_DGV_SETVIDEO_PARMS16); HeapFree(GetProcessHeap(), 0, base); } break; case MCI_UPDATE: if (dwFlags & (MCI_DGV_UPDATE_HDC | MCI_DGV_RECT)) { char *base = (char*)lParam - sizeof(LPMCI_DGV_UPDATE_PARMS16); HeapFree(GetProcessHeap(), 0, base); } else if (lParam) { LPMCI_GENERIC_PARMS mgp = (LPMCI_GENERIC_PARMS)lParam; mgp->dwCallback = HWND_16(mgp->dwCallback); } break; case MCI_WHERE: case MCI_FREEZE: case MCI_UNFREEZE: case MCI_PUT: if (lParam) { LPMCI_DGV_RECT_PARMS mdrp32 = (LPMCI_DGV_RECT_PARMS)lParam; char *base = (char*)lParam - sizeof(LPMCI_DGV_RECT_PARMS16); LPMCI_DGV_RECT_PARMS16 mdrp16 = *(LPMCI_DGV_RECT_PARMS16*)base; mdrp16->rc.left = mdrp32->rc.left; mdrp16->rc.top = mdrp32->rc.top; mdrp16->rc.right = mdrp32->rc.right; mdrp16->rc.bottom = mdrp32->rc.bottom; HeapFree(GetProcessHeap(), 0, base); } break; case MCI_STATUS: if (lParam) { if (dwFlags & (MCI_DGV_STATUS_REFERENCE | MCI_DGV_STATUS_DISKSPACE)) { LPMCI_DGV_STATUS_PARMSW mdsp32w = (LPMCI_DGV_STATUS_PARMSW)lParam; char *base = (char*)lParam - sizeof(LPMCI_DGV_STATUS_PARMS16); LPMCI_DGV_STATUS_PARMS16 mdsp16 = *(LPMCI_DGV_STATUS_PARMS16*)base; mdsp16->dwReturn = mdsp32w->dwReturn; HeapFree(GetProcessHeap(), 0, (LPVOID)mdsp32w->lpstrDrive); HeapFree(GetProcessHeap(), 0, base); } else if (dwFlags & MCI_STATUS_ITEM) { LPMCI_STATUS_PARMS msp = lParam; if (msp->dwItem == 0x4001) // MCI_DGV_STATUS_HWND msp->dwReturn = (DWORD_PTR)HWND_16((HWND)(msp->dwReturn)); } } break; case MCI_WINDOW: if (lParam) { LPMCI_OVLY_WINDOW_PARMSW mowp32w = (LPMCI_OVLY_WINDOW_PARMSW)lParam; HeapFree(GetProcessHeap(), 0, (LPVOID)mowp32w->lpstrText); HeapFree(GetProcessHeap(), 0, mowp32w); } break; case MCI_ESCAPE: if (lParam) { LPMCI_VD_ESCAPE_PARMSW mvep32W = (LPMCI_VD_ESCAPE_PARMSW)lParam; HeapFree(GetProcessHeap(), 0, (LPVOID)mvep32W->lpstrCommand); HeapFree(GetProcessHeap(), 0, (LPVOID)lParam); } break; case MCI_INFO: if (lParam) { LPMCI_INFO_PARMSW mip32w = (LPMCI_INFO_PARMSW)lParam; char *base = (char*)lParam - sizeof(LPMCI_INFO_PARMS16); LPMCI_INFO_PARMS16 mip16 = *(LPMCI_INFO_PARMS16*)base; int len = 0; if (result == MMSYSERR_NOERROR) len = WideCharToMultiByte(CP_ACP, 0, mip32w->lpstrReturn, mip32w->dwRetSize + 1,/* dwRetSize does not include null character */ MapSL(mip16->lpstrReturn), mip16->dwRetSize, NULL, NULL); mip16->dwRetSize = len == 0 ? 0 : len - 1; /* never update prior to NT? */ HeapFree(GetProcessHeap(), 0, mip32w->lpstrReturn); HeapFree(GetProcessHeap(), 0, base); } break; case MCI_SYSINFO: if (lParam) { MCI_SYSINFO_PARMSW *msip32w = (MCI_SYSINFO_PARMSW *)lParam; char *base = (char*)lParam - sizeof(MCI_SYSINFO_PARMS16 *); MCI_SYSINFO_PARMS16 *msip16 = *(MCI_SYSINFO_PARMS16 **)base; if (dwFlags & MCI_SYSINFO_QUANTITY) { DWORD *quantity = MapSL(msip16->lpstrReturn); *quantity = *(DWORD *)msip32w->lpstrReturn; } else if (result == MMSYSERR_NOERROR) { WideCharToMultiByte(CP_ACP, 0, msip32w->lpstrReturn, msip32w->dwRetSize, MapSL(msip16->lpstrReturn), msip16->dwRetSize, NULL, NULL); } HeapFree(GetProcessHeap(), 0, msip32w->lpstrReturn); HeapFree(GetProcessHeap(), 0, base); } break; case MCI_SOUND: if (lParam) { LPMCI_SOUND_PARMSW msp32W = (LPMCI_SOUND_PARMSW)lParam; HeapFree(GetProcessHeap(), 0, (LPVOID)msp32W->lpstrSoundName); HeapFree(GetProcessHeap(), 0, (LPVOID)lParam); } break; case MCI_OPEN: case MCI_OPEN_DRIVER: if (lParam) { LPMCI_OPEN_PARMSW mop32w = (LPMCI_OPEN_PARMSW)lParam; char *base = (char*)lParam - sizeof(LPMCI_OPEN_PARMS16); LPMCI_OPEN_PARMS16 mop16 = *(LPMCI_OPEN_PARMS16*)base; mop16->wDeviceID = mop32w->wDeviceID; if( ( dwFlags & ( MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID)) == MCI_OPEN_TYPE) HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrDeviceType); if( ( dwFlags & ( MCI_OPEN_ELEMENT | MCI_OPEN_ELEMENT_ID)) == MCI_OPEN_ELEMENT) HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrElementName); if( ( dwFlags & MCI_OPEN_ALIAS)) HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrAlias); HeapFree(GetProcessHeap(), 0, base); } break; default: FIXME("Map/Unmap internal error on msg=%s\n", MCI_MessageToString(wMsg)); } } /* ################################################### * # MCI # * ################################################### */ #include #define MCI_MAX_THUNKS 32 static struct mci_thunk { BYTE popl_eax; /* popl %eax (return address) */ BYTE pushl_func; /* pushl $pfn16 (16bit callback function) */ YIELDPROC16 yield16; BYTE pushl_eax; /* pushl %eax */ BYTE jmp; /* ljmp MCI_Yield1632 */ DWORD callback; MCIDEVICEID id; } *MCI_Thunks; #include static CRITICAL_SECTION mci_cs; static CRITICAL_SECTION_DEBUG mci_critsect_debug = { 0, 0, &mci_cs, { &mci_critsect_debug.ProcessLocksList, &mci_critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": mmsystem_mci_cs") } }; static CRITICAL_SECTION mci_cs = { &mci_critsect_debug, -1, 0, 0, 0, 0 }; static UINT MCI_Yield1632(DWORD pfn16, MCIDEVICEID id, DWORD yield_data) { WORD args[8]; if (!pfn16) { MSG msg; PeekMessageW( &msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE ); return 0; } /* 16 bit func, call it */ TRACE("Function (16 bit) !\n"); args[2] = (MCIDEVICEID16)id; args[1] = HIWORD(yield_data); args[0] = LOWORD(yield_data); return WOWCallback16Ex(pfn16, WCB16_PASCAL, sizeof(args), args, NULL); } /****************************************************************** * MCI_AddThunk * */ static struct mci_thunk* MCI_AddThunk(MCIDEVICEID id, YIELDPROC16 pfn16) { struct mci_thunk* thunk; if (!MCI_Thunks) { MCI_Thunks = VirtualAlloc(NULL, MCI_MAX_THUNKS * sizeof(*MCI_Thunks), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (!MCI_Thunks) return NULL; for (thunk = MCI_Thunks; thunk < &MCI_Thunks[MCI_MAX_THUNKS]; thunk++) { thunk->popl_eax = 0x58; /* popl %eax */ thunk->pushl_func = 0x68; /* pushl $pfn16 */ thunk->yield16 = 0; thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->jmp = 0xe9; /* jmp MCI_Yield1632 */ thunk->callback = (char *)MCI_Yield1632 - (char *)(&thunk->callback + 1); thunk->id = 0; } } for (thunk = MCI_Thunks; thunk < &MCI_Thunks[MCI_MAX_THUNKS]; thunk++) { if (thunk->yield16 == 0) { thunk->yield16 = pfn16; thunk->id = id; return thunk; } } FIXME("Out of mci-thunks. Bump MCI_MAX_THUNKS\n"); return NULL; } /****************************************************************** * MCI_HasThunk * */ static struct mci_thunk* MCI_HasThunk(YIELDPROC pfn) { struct mci_thunk* thunk; if (!MCI_Thunks) return NULL; for (thunk = MCI_Thunks; thunk < &MCI_Thunks[MCI_MAX_THUNKS]; thunk++) { if ((YIELDPROC)thunk == pfn) return thunk; } return NULL; } /************************************************************************** * mciSetYieldProc [MMSYSTEM.714] */ BOOL16 WINAPI mciSetYieldProc16(UINT16 uDeviceID, YIELDPROC16 fpYieldProc, DWORD dwYieldData) { struct mci_thunk* thunk; BOOL ret; TRACE("(%u, %p, %08x)\n", uDeviceID, fpYieldProc, dwYieldData); if (!(thunk = MCI_AddThunk(uDeviceID, fpYieldProc))) return FALSE; ret = mciSetYieldProc(uDeviceID, (YIELDPROC)thunk, dwYieldData); if (!ret) thunk->yield16 = NULL; return ret; } /************************************************************************** * mciGetYieldProc [MMSYSTEM.716] */ YIELDPROC16 WINAPI mciGetYieldProc16(UINT16 uDeviceID, DWORD* lpdwYieldData) { YIELDPROC yield; DWORD data; struct mci_thunk* thunk; TRACE("(%u, %p)\n", uDeviceID, lpdwYieldData); yield = mciGetYieldProc(uDeviceID, &data); if (!yield || !(thunk = MCI_HasThunk(yield))) return NULL; if (lpdwYieldData) *lpdwYieldData = data; return thunk->yield16; } /************************************************************************** * mciGetErrorString [MMSYSTEM.706] */ BOOL16 WINAPI mciGetErrorString16(DWORD wError, LPSTR lpstrBuffer, UINT16 uLength) { return mciGetErrorStringA(wError, lpstrBuffer, uLength); } /************************************************************************** * mciDriverNotify [MMSYSTEM.711] */ BOOL16 WINAPI mciDriverNotify16(HWND16 hWndCallBack, UINT16 wDevID, UINT16 wStatus) { TRACE("(%04X, %04x, %04X)\n", hWndCallBack, wDevID, wStatus); return PostMessageA(HWND_32(hWndCallBack), MM_MCINOTIFY, wStatus, wDevID); } /************************************************************************** * mciGetDriverData [MMSYSTEM.708] */ DWORD WINAPI mciGetDriverData16(UINT16 uDeviceID) { return mciGetDriverData(uDeviceID); } /************************************************************************** * mciSetDriverData [MMSYSTEM.707] */ BOOL16 WINAPI mciSetDriverData16(UINT16 uDeviceID, DWORD data) { return mciSetDriverData(uDeviceID, data); } UINT CALLBACK check_break(UINT16 wDevID, DWORD data) { if (!data || ((data >> 16) && (GetActiveWindow() != HWND_32(data >> 16)))) return 0; SHORT key = GetAsyncKeyState(data & 0xffff); return key & 1 ? 0xffffffff : 0; } /************************************************************************** * mciSendCommand [MMSYSTEM.701] */ DWORD WINAPI mciSendCommand16(UINT16 wDevID, UINT16 wMsg, DWORD dwParam1, DWORD p2) { DWORD dwRet; BOOL to32; DWORD_PTR dwParam2 = p2; DWORD count; HWND wndwait = NULL; TRACE("(%04X, %s, %08X, %08lX)\n", wDevID, MCI_MessageToString(wMsg), dwParam1, dwParam2); switch (wMsg) { case MCI_CLOSE: case MCI_OPEN: case MCI_SYSINFO: case MCI_SOUND: to32 = TRUE; break; case MCI_BREAK: { MCI_BREAK_PARMS16 *mbp16 = (MCI_BREAK_PARMS16 *)MapSL(p2); DWORD data = 0; if (dwParam1 & MCI_BREAK_KEY) { data = mbp16->nVirtKey; if (dwParam1 & MCI_BREAK_HWND) data |= mbp16->hwndBreak << 16; } BOOL ret = mciSetYieldProc(wDevID, check_break, data); return ret ? 0 : MCIERR_INVALID_DEVICE_ID; } case MCI_PLAY: if ((dwParam1 & (MCI_WAIT | MCI_NOTIFY)) == MCI_WAIT) { MCI_GETDEVCAPS_PARMS devcaps = {0}; devcaps.dwItem = MCI_GETDEVCAPS_DEVICE_TYPE; mciSendCommandA(wDevID, MCI_GETDEVCAPS, MCI_GETDEVCAPS_ITEM, &devcaps); // handle the wait ourselves so to prevent the thread from being blocked for 300ms if (devcaps.dwReturn == MCI_DEVTYPE_DIGITAL_VIDEO) { wndwait = CreateWindowA("STATIC", "mcimsgwnd", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, 0); if (wndwait) dwParam1 = (dwParam1 & ~(MCI_WAIT)) | MCI_NOTIFY; } } default: /* FIXME: this is suboptimal. If MCI driver is a 16bit one, we'll be * doing 16=>32W, then 32W=>16 conversions. * We could directly call the 16bit driver if we had the information. */ to32 = TRUE; } if (to32) { MMSYSTEM_MapType res; dwRet = MCIERR_INVALID_DEVICE_ID; switch (res = MCI_MapMsg16To32W(wMsg, dwParam1, &dwParam2)) { case MMSYSTEM_MAP_MSGERROR: dwRet = MCIERR_DRIVER_INTERNAL; break; case MMSYSTEM_MAP_NOMEM: TRACE("Problem mapping %s from 16 to 32\n", MCI_MessageToString(wMsg)); dwRet = MCIERR_OUT_OF_MEMORY; break; case MMSYSTEM_MAP_OK: case MMSYSTEM_MAP_OKMEM: if (wndwait) ((MCI_GENERIC_PARMS *)dwParam2)->dwCallback = wndwait; ReleaseThunkLock(&count); dwRet = mciSendCommandW(wDevID, wMsg, dwParam1, dwParam2); RestoreThunkLock(count); if (res == MMSYSTEM_MAP_OKMEM) { if (!p2) HeapFree(GetProcessHeap(), 0, dwParam2); else MCI_UnMapMsg16To32W(wMsg, dwParam1, dwParam2, dwRet); } break; } } else { #if 0 if (wDevID == MCI_ALL_DEVICE_ID) { FIXME("unhandled MCI_ALL_DEVICE_ID\n"); dwRet = MCIERR_CANNOT_USE_ALL; } else { dwRet = SendDriverMessage(hdrv, wMsg, dwParam1, dwParam2); } #endif } if (wMsg == MCI_CLOSE && dwRet == 0 && MCI_Thunks) { /* free yield thunks, if any */ unsigned i; for (i = 0; i < MCI_MAX_THUNKS; i++) { if (MCI_Thunks[i].id == wDevID) MCI_Thunks[i].yield16 = NULL; } } if (!dwRet && (wMsg == MCI_OPEN)) { // the winmm yield proc doesn't work like the mmsystem one UINT16 mciid = ((LPMCI_OPEN_PARMS)MapSL(p2))->wDeviceID; mciSetYieldProc(mciid, check_break, VK_CANCEL); } if (!dwRet && wndwait) { ReleaseThunkLock(&count); while (1) { MCI_GENERIC_PARMS genparm = {0}; MSG msg; DWORD test; if (mciDriverYield(wDevID)) mciSendCommandA(wDevID, MCI_STOP, 0, &genparm); MsgWaitForMultipleObjects(0, 0, FALSE, 300, QS_POSTMESSAGE | QS_SENDMESSAGE); if (PeekMessageA(&msg, wndwait, MM_MCINOTIFY, MM_MCINOTIFY, PM_REMOVE)) break; } RestoreThunkLock(count); } if (wndwait) DestroyWindow(wndwait); return dwRet; } /************************************************************************** * mciGetDeviceID [MMSYSTEM.703] */ UINT16 WINAPI mciGetDeviceID16(LPCSTR lpstrName) { TRACE("(\"%s\")\n", lpstrName); return mciGetDeviceIDA(lpstrName); } /************************************************************************** * mciGetDeviceIDFromElementID [MMSYSTEM.715] */ UINT16 WINAPI mciGetDeviceIDFromElementID16(DWORD dwElementID, LPCSTR lpstrType) { return mciGetDeviceIDFromElementIDA(dwElementID, lpstrType); } /************************************************************************** * mciGetCreatorTask [MMSYSTEM.717] */ HTASK16 WINAPI mciGetCreatorTask16(UINT16 uDeviceID) { return HTASK_16(mciGetCreatorTask(uDeviceID)); } /************************************************************************** * mciDriverYield [MMSYSTEM.710] */ UINT16 WINAPI mciDriverYield16(UINT16 uDeviceID) { return mciDriverYield(uDeviceID); } /************************************************************************** * mciSendString [MMSYSTEM.702] */ DWORD WINAPI mciSendString16(LPCSTR lpstrCommand, LPSTR lpstrRet, UINT16 uRetLen, HWND16 hwndCallback) { char newstr[128]; if (!strncmp(lpstrCommand, "play ", 5)) { char *waitpos = strstr(lpstrCommand, " wait"); if (waitpos) return fix_play_wait(lpstrCommand, lpstrRet, uRetLen, waitpos); } DWORD count; ReleaseThunkLock(&count); DWORD ret = mciSendStringA(xlate_str_handle(lpstrCommand, newstr), lpstrRet, uRetLen, HWND_32(hwndCallback)); RestoreThunkLock(count); if (!ret && lpstrRet && !strncmp(lpstrCommand, "status ", 7)) xlate_stat_handle(lpstrCommand, lpstrRet); return ret; } /************************************************************************** * mciLoadCommandResource [MMSYSTEM.705] */ UINT16 WINAPI mciLoadCommandResource16(HINSTANCE16 hInst, LPCSTR resname, UINT16 type) { TRACE("(%04x, %s, %x)!\n", hInst, resname, type); return MCI_NO_COMMAND_TABLE; } /************************************************************************** * mciFreeCommandResource [MMSYSTEM.713] */ BOOL16 WINAPI mciFreeCommandResource16(UINT16 uTable) { TRACE("(%04x)!\n", uTable); return FALSE; } /************************************************************************** * mciExecute [MMSYSTEM.712] */ BOOL16 WINAPI mciExecute16(LPCSTR lpstrCommand) { return mciSendStringA(lpstrCommand, NULL, 0, NULL); } ================================================ FILE: mmsystem/message16.c ================================================ /* * MMSYSTEM MCI and low level mapping functions * * Copyright 1999 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include #define NONAMELESSUNION #ifdef WINE_NO_UNICODE_MACROS # define WINELIB_NAME_AW(func) \ func##_must_be_suffixed_with_W_or_A_in_this_context \ func##_must_be_suffixed_with_W_or_A_in_this_context #else /* WINE_NO_UNICODE_MACROS */ # ifdef UNICODE # define WINELIB_NAME_AW(func) func##W # else # define WINELIB_NAME_AW(func) func##A # endif #endif /* WINE_NO_UNICODE_MACROS */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; #endif #include "wine/winbase16.h" #include "windef.h" #include "winbase.h" #include "winuser.h" #include "wownt32.h" #include "winemm16.h" #include "digitalv.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winmm); /* ================================= * A U X M A P P E R S * ================================= */ /* ================================= * M I X E R M A P P E R S * ================================= */ /************************************************************************** * MMSYSTDRV_Mixer_Map16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_Mixer_Map16To32W (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2) { return MMSYSTEM_MAP_MSGERROR; } /************************************************************************** * MMSYSTDRV_Mixer_UnMap16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_Mixer_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret) { #if 0 MIXERCAPSA micA; UINT ret = mixerGetDevCapsA(devid, &micA, sizeof(micA)); if (ret == MMSYSERR_NOERROR) { mixcaps->wMid = micA.wMid; mixcaps->wPid = micA.wPid; mixcaps->vDriverVersion = micA.vDriverVersion; strcpy(mixcaps->szPname, micA.szPname); mixcaps->fdwSupport = micA.fdwSupport; mixcaps->cDestinations = micA.cDestinations; } return ret; #endif return MMSYSTEM_MAP_MSGERROR; } /************************************************************************** * MMSYSTDRV_Mixer_MapCB */ static void MMSYSTDRV_Mixer_MapCB(DWORD uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2) { FIXME("NIY\n"); } /* ================================= * M I D I I N M A P P E R S * ================================= */ /************************************************************************** * MMSYSTDRV_MidiIn_Map16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_MidiIn_Map16To32W (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2) { MMSYSTEM_MapType ret = MMSYSTEM_MAP_MSGERROR; switch (wMsg) { case MIDM_GETNUMDEVS: case MIDM_RESET: case MIDM_START: case MIDM_STOP: ret = MMSYSTEM_MAP_OK; break; case MIDM_OPEN: case MIDM_CLOSE: FIXME("Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\n"); break; case MIDM_GETDEVCAPS: { LPMIDIINCAPSW mic32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIINCAPS16) + sizeof(MIDIINCAPSW)); LPMIDIINCAPS16 mic16 = MapSL(*lpParam1); if (mic32) { *(LPMIDIINCAPS16*)mic32 = mic16; mic32 = (LPMIDIINCAPSW)((LPSTR)mic32 + sizeof(LPMIDIINCAPS16)); *lpParam1 = (DWORD)mic32; *lpParam2 = sizeof(MIDIINCAPSW); ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case MIDM_PREPARE: { LPMIDIHDR mh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIHDR) + sizeof(MIDIHDR)); LPMIDIHDR16 mh16 = MapSL(*lpParam1); if (mh32) { *(LPMIDIHDR*)mh32 = (LPMIDIHDR)*lpParam1; mh32 = (LPMIDIHDR)((LPSTR)mh32 + sizeof(LPMIDIHDR)); mh32->lpData = MapSL((SEGPTR)mh16->lpData); mh32->dwBufferLength = mh16->dwBufferLength; mh32->dwBytesRecorded = mh16->dwBytesRecorded; mh32->dwUser = mh16->dwUser; mh32->dwFlags = mh16->dwFlags; mh16->reserved = (MIDIHDR16*)mh32; /* for reuse in unprepare and write */ *lpParam1 = (DWORD)mh32; *lpParam2 = offsetof(MIDIHDR,dwOffset); /* old size, without dwOffset */ ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case MIDM_ADDBUFFER: case MIDM_UNPREPARE: { LPMIDIHDR16 mh16 = MapSL(*lpParam1); LPMIDIHDR mh32 = (MIDIHDR*)mh16->reserved; *lpParam1 = (DWORD)mh32; *lpParam2 = offsetof(MIDIHDR,dwOffset); if (wMsg == MIDM_ADDBUFFER && mh32->dwBufferLength < mh16->dwBufferLength) { ERR("Size of buffer has been increased from %d to %d, keeping initial value\n", mh32->dwBufferLength, mh16->dwBufferLength); } else mh32->dwBufferLength = mh16->dwBufferLength; ret = MMSYSTEM_MAP_OKMEM; } break; } return ret; } /************************************************************************** * MMSYSTDRV_MidiIn_UnMap16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_MidiIn_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret) { MMSYSTEM_MapType ret = MMSYSTEM_MAP_MSGERROR; switch (wMsg) { case MIDM_GETNUMDEVS: case MIDM_RESET: case MIDM_START: case MIDM_STOP: ret = MMSYSTEM_MAP_OK; break; case MIDM_OPEN: case MIDM_CLOSE: FIXME("Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\n"); break; case MIDM_GETDEVCAPS: { LPMIDIINCAPSW mic32 = (LPMIDIINCAPSW)(*lpParam1); LPMIDIINCAPS16 mic16 = *(LPMIDIINCAPS16*)((LPSTR)mic32 - sizeof(LPMIDIINCAPS16)); mic16->wMid = mic32->wMid; mic16->wPid = mic32->wPid; mic16->vDriverVersion = mic32->vDriverVersion; WideCharToMultiByte( CP_ACP, 0, mic32->szPname, -1, mic16->szPname, sizeof(mic16->szPname), NULL, NULL ); mic16->dwSupport = mic32->dwSupport; HeapFree(GetProcessHeap(), 0, (LPSTR)mic32 - sizeof(LPMIDIINCAPS16)); ret = MMSYSTEM_MAP_OK; } break; case MIDM_PREPARE: case MIDM_UNPREPARE: case MIDM_ADDBUFFER: { LPMIDIHDR mh32 = (LPMIDIHDR)(*lpParam1); LPMIDIHDR16 mh16 = MapSL(*(SEGPTR*)((LPSTR)mh32 - sizeof(LPMIDIHDR))); assert((MIDIHDR*)mh16->reserved == mh32); mh16->dwFlags = mh32->dwFlags; if (wMsg == MODM_UNPREPARE && fn_ret == MMSYSERR_NOERROR) { HeapFree(GetProcessHeap(), 0, (LPSTR)mh32 - sizeof(LPMIDIHDR)); mh16->reserved = 0; } ret = MMSYSTEM_MAP_OK; } break; } return ret; } /************************************************************************** * MMSYSTDRV_MidiIn_MapCB [internal] */ static void MMSYSTDRV_MidiIn_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2) { switch (uMsg) { case MIM_OPEN: case MIM_CLOSE: /* dwParam1 & dwParam2 are supposed to be 0, nothing to do */ case MIM_DATA: case MIM_MOREDATA: case MIM_ERROR: /* dwParam1 & dwParam2 are data, nothing to do */ break; case MIM_LONGDATA: case MIM_LONGERROR: { LPMIDIHDR mh32 = (LPMIDIHDR)(*dwParam1); SEGPTR segmh16 = *(SEGPTR*)((LPSTR)mh32 - sizeof(LPMIDIHDR)); LPMIDIHDR16 mh16 = MapSL(segmh16); *dwParam1 = (DWORD)segmh16; mh16->dwFlags = mh32->dwFlags; mh16->dwBytesRecorded = mh32->dwBytesRecorded; } break; default: ERR("Unknown msg %u\n", uMsg); } } /* ================================= * M I D I O U T M A P P E R S * ================================= */ /************************************************************************** * MMSYSTDRV_MidiOut_Map16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_MidiOut_Map16To32W (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2) { MMSYSTEM_MapType ret = MMSYSTEM_MAP_MSGERROR; switch (wMsg) { case MODM_GETNUMDEVS: case MODM_DATA: case MODM_RESET: case MODM_SETVOLUME: ret = MMSYSTEM_MAP_OK; break; case MODM_OPEN: case MODM_CLOSE: case MODM_GETVOLUME: FIXME("Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\n"); break; case MODM_GETDEVCAPS: { LPMIDIOUTCAPSW moc32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIOUTCAPS16) + sizeof(MIDIOUTCAPSW)); LPMIDIOUTCAPS16 moc16 = MapSL(*lpParam1); if (moc32) { *(LPMIDIOUTCAPS16*)moc32 = moc16; moc32 = (LPMIDIOUTCAPSW)((LPSTR)moc32 + sizeof(LPMIDIOUTCAPS16)); *lpParam1 = (DWORD)moc32; *lpParam2 = sizeof(MIDIOUTCAPSW); ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case MODM_PREPARE: { LPMIDIHDR mh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIHDR) + sizeof(MIDIHDR)); LPMIDIHDR16 mh16 = MapSL(*lpParam1); if (mh32) { *(LPMIDIHDR*)mh32 = (LPMIDIHDR)*lpParam1; mh32 = (LPMIDIHDR)((LPSTR)mh32 + sizeof(LPMIDIHDR)); mh32->lpData = MapSL((SEGPTR)mh16->lpData); mh32->dwBufferLength = mh16->dwBufferLength; mh32->dwBytesRecorded = mh16->dwBytesRecorded; mh32->dwUser = mh16->dwUser; mh32->dwFlags = mh16->dwFlags; mh16->reserved = (MIDIHDR16*)mh32; /* for reuse in unprepare and write */ *lpParam1 = (DWORD)mh32; *lpParam2 = offsetof(MIDIHDR,dwOffset); /* old size, without dwOffset */ ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case MODM_UNPREPARE: case MODM_LONGDATA: { LPMIDIHDR16 mh16 = MapSL(*lpParam1); LPMIDIHDR mh32 = (MIDIHDR*)mh16->reserved; *lpParam1 = (DWORD)mh32; *lpParam2 = offsetof(MIDIHDR,dwOffset); /* dwBufferLength can be reduced between prepare & write */ if (wMsg == MODM_LONGDATA && mh32->dwBufferLength < mh16->dwBufferLength) { ERR("Size of buffer has been increased from %d to %d, keeping initial value\n", mh32->dwBufferLength, mh16->dwBufferLength); } else mh32->dwBufferLength = mh16->dwBufferLength; ret = MMSYSTEM_MAP_OKMEM; } break; case MODM_CACHEPATCHES: case MODM_CACHEDRUMPATCHES: default: FIXME("NIY: no conversion yet for %u [%lx,%lx]\n", wMsg, *lpParam1, *lpParam2); break; } return ret; } /************************************************************************** * MMSYSTDRV_MidiOut_UnMap16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_MidiOut_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret) { MMSYSTEM_MapType ret = MMSYSTEM_MAP_MSGERROR; switch (wMsg) { case MODM_GETNUMDEVS: case MODM_DATA: case MODM_RESET: case MODM_SETVOLUME: ret = MMSYSTEM_MAP_OK; break; case MODM_OPEN: case MODM_CLOSE: case MODM_GETVOLUME: FIXME("Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\n"); break; case MODM_GETDEVCAPS: { LPMIDIOUTCAPSW moc32 = (LPMIDIOUTCAPSW)(*lpParam1); LPMIDIOUTCAPS16 moc16 = *(LPMIDIOUTCAPS16*)((LPSTR)moc32 - sizeof(LPMIDIOUTCAPS16)); moc16->wMid = moc32->wMid; moc16->wPid = moc32->wPid; moc16->vDriverVersion = moc32->vDriverVersion; WideCharToMultiByte( CP_ACP, 0, moc32->szPname, -1, moc16->szPname, sizeof(moc16->szPname), NULL, NULL ); moc16->wTechnology = moc32->wTechnology; moc16->wVoices = moc32->wVoices; moc16->wNotes = moc32->wNotes; moc16->wChannelMask = moc32->wChannelMask; moc16->dwSupport = moc32->dwSupport; HeapFree(GetProcessHeap(), 0, (LPSTR)moc32 - sizeof(LPMIDIOUTCAPS16)); ret = MMSYSTEM_MAP_OK; } break; case MODM_PREPARE: case MODM_UNPREPARE: case MODM_LONGDATA: { LPMIDIHDR mh32 = (LPMIDIHDR)(*lpParam1); LPMIDIHDR16 mh16 = MapSL(*(SEGPTR*)((LPSTR)mh32 - sizeof(LPMIDIHDR))); assert((MIDIHDR*)mh16->reserved == mh32); mh16->dwFlags = mh32->dwFlags; if (wMsg == MODM_UNPREPARE && fn_ret == MMSYSERR_NOERROR) { HeapFree(GetProcessHeap(), 0, (LPSTR)mh32 - sizeof(LPMIDIHDR)); mh16->reserved = 0; } ret = MMSYSTEM_MAP_OK; } break; case MODM_CACHEPATCHES: case MODM_CACHEDRUMPATCHES: default: FIXME("NIY: no conversion yet for %u [%lx,%lx]\n", wMsg, *lpParam1, *lpParam2); break; } return ret; } /****************************************************************** * MMSYSTDRV_MidiOut_MapCB */ static void MMSYSTDRV_MidiOut_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2) { switch (uMsg) { case MOM_OPEN: case MOM_CLOSE: /* dwParam1 & dwParam2 are supposed to be 0, nothing to do */ break; case MOM_POSITIONCB: /* MIDIHDR.dwOffset exists since Win 32 only */ FIXME("MOM_POSITIONCB/MEVT_F_CALLBACK wants MIDIHDR.dwOffset in 16 bit code\n"); /* fall through */ case MOM_DONE: { /* initial map is: 16 => 32 */ LPMIDIHDR mh32 = (LPMIDIHDR)(*dwParam1); SEGPTR segmh16 = *(SEGPTR*)((LPSTR)mh32 - sizeof(LPMIDIHDR)); LPMIDIHDR16 mh16 = MapSL(segmh16); *dwParam1 = (DWORD)segmh16; mh16->dwFlags = mh32->dwFlags; } break; default: ERR("Unknown msg %u\n", uMsg); } } /* ================================= * W A V E I N M A P P E R S * ================================= */ /************************************************************************** * MMSYSTDRV_WaveIn_Map16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_WaveIn_Map16To32W (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2) { MMSYSTEM_MapType ret = MMSYSTEM_MAP_MSGERROR; switch (wMsg) { case WIDM_GETNUMDEVS: case WIDM_RESET: case WIDM_START: case WIDM_STOP: ret = MMSYSTEM_MAP_OK; break; case WIDM_OPEN: case WIDM_CLOSE: FIXME("Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\n"); break; case WIDM_GETDEVCAPS: { LPWAVEINCAPSW wic32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWAVEINCAPS16) + sizeof(WAVEINCAPSW)); LPWAVEINCAPS16 wic16 = MapSL(*lpParam1); if (wic32) { *(LPWAVEINCAPS16*)wic32 = wic16; wic32 = (LPWAVEINCAPSW)((LPSTR)wic32 + sizeof(LPWAVEINCAPS16)); *lpParam1 = (DWORD)wic32; *lpParam2 = sizeof(WAVEINCAPSW); ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case WIDM_GETPOS: { LPMMTIME mmt32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMMTIME16) + sizeof(MMTIME)); LPMMTIME16 mmt16 = MapSL(*lpParam1); if (mmt32) { *(LPMMTIME16*)mmt32 = mmt16; mmt32 = (LPMMTIME)((LPSTR)mmt32 + sizeof(LPMMTIME16)); mmt32->wType = mmt16->wType; *lpParam1 = (DWORD)mmt32; *lpParam2 = sizeof(MMTIME); ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case WIDM_PREPARE: { LPWAVEHDR wh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWAVEHDR) + sizeof(WAVEHDR)); LPWAVEHDR wh16 = MapSL(*lpParam1); if (wh32) { *(LPWAVEHDR*)wh32 = (LPWAVEHDR)*lpParam1; wh32 = (LPWAVEHDR)((LPSTR)wh32 + sizeof(LPWAVEHDR)); wh32->lpData = MapSL((SEGPTR)wh16->lpData); wh32->dwBufferLength = wh16->dwBufferLength; wh32->dwBytesRecorded = wh16->dwBytesRecorded; wh32->dwUser = wh16->dwUser; wh32->dwFlags = wh16->dwFlags; wh32->dwLoops = wh16->dwLoops; /* FIXME: nothing on wh32->reserved */ /* could link the wh32->reserved at this level for memory house keeping */ wh16->reserved = wh32; /* for reuse in unprepare and write */ *lpParam1 = (DWORD)wh32; *lpParam2 = sizeof(WAVEHDR); ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case WIDM_ADDBUFFER: case WIDM_UNPREPARE: { LPWAVEHDR wh16 = MapSL(*lpParam1); LPWAVEHDR wh32 = wh16->reserved; *lpParam1 = (DWORD)wh32; *lpParam2 = sizeof(WAVEHDR); /* dwBufferLength can be reduced between prepare & write */ if (wMsg == WIDM_ADDBUFFER && wh32->dwBufferLength < wh16->dwBufferLength) { ERR("Size of buffer has been increased from %d to %d, keeping initial value\n", wh32->dwBufferLength, wh16->dwBufferLength); } else wh32->dwBufferLength = wh16->dwBufferLength; ret = MMSYSTEM_MAP_OKMEM; } break; case WIDM_MAPPER_STATUS: /* just a single DWORD */ *lpParam2 = (DWORD)MapSL(*lpParam2); ret = MMSYSTEM_MAP_OK; break; default: FIXME("NIY: no conversion yet for %u [%lx,%lx]\n", wMsg, *lpParam1, *lpParam2); break; } return ret; } /************************************************************************** * MMSYSTDRV_WaveIn_UnMap16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_WaveIn_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret) { MMSYSTEM_MapType ret = MMSYSTEM_MAP_MSGERROR; switch (wMsg) { case WIDM_GETNUMDEVS: case WIDM_RESET: case WIDM_START: case WIDM_STOP: case WIDM_MAPPER_STATUS: ret = MMSYSTEM_MAP_OK; break; case WIDM_OPEN: case WIDM_CLOSE: FIXME("Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\n"); break; case WIDM_GETDEVCAPS: { LPWAVEINCAPSW wic32 = (LPWAVEINCAPSW)(*lpParam1); LPWAVEINCAPS16 wic16 = *(LPWAVEINCAPS16*)((LPSTR)wic32 - sizeof(LPWAVEINCAPS16)); wic16->wMid = wic32->wMid; wic16->wPid = wic32->wPid; wic16->vDriverVersion = wic32->vDriverVersion; WideCharToMultiByte( CP_ACP, 0, wic32->szPname, -1, wic16->szPname, sizeof(wic16->szPname), NULL, NULL ); wic16->dwFormats = wic32->dwFormats; wic16->wChannels = wic32->wChannels; HeapFree(GetProcessHeap(), 0, (LPSTR)wic32 - sizeof(LPWAVEINCAPS16)); ret = MMSYSTEM_MAP_OK; } break; case WIDM_GETPOS: { LPMMTIME mmt32 = (LPMMTIME)(*lpParam1); LPMMTIME16 mmt16 = *(LPMMTIME16*)((LPSTR)mmt32 - sizeof(LPMMTIME16)); MMSYSTEM_MMTIME32to16(mmt16, mmt32); HeapFree(GetProcessHeap(), 0, (LPSTR)mmt32 - sizeof(LPMMTIME16)); ret = MMSYSTEM_MAP_OK; } break; case WIDM_ADDBUFFER: case WIDM_PREPARE: case WIDM_UNPREPARE: { LPWAVEHDR wh32 = (LPWAVEHDR)(*lpParam1); LPWAVEHDR wh16 = MapSL(*(SEGPTR*)((LPSTR)wh32 - sizeof(LPWAVEHDR))); assert(wh16->reserved == wh32); wh16->dwBytesRecorded = wh32->dwBytesRecorded; wh16->dwFlags = wh32->dwFlags; if (wMsg == WIDM_UNPREPARE && fn_ret == MMSYSERR_NOERROR) { HeapFree(GetProcessHeap(), 0, (LPSTR)wh32 - sizeof(LPWAVEHDR)); wh16->reserved = 0; } ret = MMSYSTEM_MAP_OK; } break; default: FIXME("NIY: no conversion yet for %u [%lx,%lx]\n", wMsg, *lpParam1, *lpParam2); break; } return ret; } /************************************************************************** * MMSYSTDRV_WaveIn_MapCB [internal] */ static void MMSYSTDRV_WaveIn_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2) { switch (uMsg) { case WIM_OPEN: case WIM_CLOSE: /* dwParam1 & dwParam2 are supposed to be 0, nothing to do */ break; case WIM_DATA: { /* initial map is: 16 => 32 */ LPWAVEHDR wh32 = (LPWAVEHDR)(*dwParam1); SEGPTR segwh16 = *(SEGPTR*)((LPSTR)wh32 - sizeof(LPWAVEHDR)); LPWAVEHDR wh16 = MapSL(segwh16); *dwParam1 = (DWORD)segwh16; wh16->dwFlags = wh32->dwFlags; wh16->dwBytesRecorded = wh32->dwBytesRecorded; } break; default: ERR("Unknown msg %u\n", uMsg); } } /* ================================= * W A V E O U T M A P P E R S * ================================= */ /************************************************************************** * MMSYSTDRV_WaveOut_Map16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_WaveOut_Map16To32W (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2) { MMSYSTEM_MapType ret = MMSYSTEM_MAP_MSGERROR; switch (wMsg) { /* nothing to do */ case WODM_BREAKLOOP: case WODM_CLOSE: case WODM_GETNUMDEVS: case WODM_PAUSE: case WODM_RESET: case WODM_RESTART: case WODM_SETPITCH: case WODM_SETPLAYBACKRATE: case WODM_SETVOLUME: ret = MMSYSTEM_MAP_OK; break; case WODM_GETPITCH: case WODM_GETPLAYBACKRATE: case WODM_GETVOLUME: case WODM_OPEN: FIXME("Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\n"); break; case WODM_GETDEVCAPS: { LPWAVEOUTCAPSW woc32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWAVEOUTCAPS16) + sizeof(WAVEOUTCAPSW)); LPWAVEOUTCAPS16 woc16 = MapSL(*lpParam1); if (woc32) { *(LPWAVEOUTCAPS16*)woc32 = woc16; woc32 = (LPWAVEOUTCAPSW)((LPSTR)woc32 + sizeof(LPWAVEOUTCAPS16)); *lpParam1 = (DWORD)woc32; *lpParam2 = sizeof(WAVEOUTCAPSW); ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case WODM_GETPOS: { LPMMTIME mmt32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMMTIME16) + sizeof(MMTIME)); LPMMTIME16 mmt16 = MapSL(*lpParam1); if (mmt32) { *(LPMMTIME16*)mmt32 = mmt16; mmt32 = (LPMMTIME)((LPSTR)mmt32 + sizeof(LPMMTIME16)); mmt32->wType = mmt16->wType; *lpParam1 = (DWORD)mmt32; *lpParam2 = sizeof(MMTIME); ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case WODM_PREPARE: { LPWAVEHDR wh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWAVEHDR) + sizeof(DWORD) + sizeof(WAVEHDR)); LPWAVEHDR wh16 = MapSL(*lpParam1); if (wh32) { *(LPWAVEHDR*)wh32 = (LPWAVEHDR)*lpParam1; *(DWORD *)((LPSTR)wh32 + sizeof(LPWAVEHDR)) = wh16->dwBufferLength; // preserve the prepared length wh32 = (LPWAVEHDR)((LPSTR)wh32 + sizeof(DWORD) + sizeof(LPWAVEHDR)); wh32->lpData = MapSL((SEGPTR)wh16->lpData); wh32->dwBufferLength = wh16->dwBufferLength; wh32->dwBytesRecorded = wh16->dwBytesRecorded; wh32->dwUser = wh16->dwUser; wh32->dwFlags = wh16->dwFlags; wh32->dwLoops = wh16->dwLoops; /* FIXME: nothing on wh32->reserved */ /* could link the wh32->reserved at this level for memory house keeping */ wh16->reserved = wh32; /* for reuse in unprepare and write */ *lpParam1 = (DWORD)wh32; *lpParam2 = sizeof(WAVEHDR); ret = MMSYSTEM_MAP_OKMEM; } else { ret = MMSYSTEM_MAP_NOMEM; } } break; case WODM_UNPREPARE: case WODM_WRITE: { LPWAVEHDR wh16 = MapSL(*lpParam1); LPWAVEHDR wh32 = wh16->reserved; if (wMsg == WODM_UNPREPARE) wh32->dwFlags = wh16->dwFlags; *lpParam1 = (DWORD)wh32; *lpParam2 = sizeof(WAVEHDR); /* dwBufferLength can be reduced between prepare & write */ /* if (wMsg == WODM_WRITE && *(DWORD *)((LPSTR)wh32 - sizeof(DWORD)) < wh16->dwBufferLength) { ERR("Size of buffer has been increased from %d to %d, keeping initial value\n", *(DWORD *)((LPSTR)wh32 - sizeof(DWORD)), wh16->dwBufferLength); } else*/ wh32->dwBufferLength = wh16->dwBufferLength; ret = MMSYSTEM_MAP_OKMEM; } break; case WODM_MAPPER_STATUS: *lpParam2 = (DWORD)MapSL(*lpParam2); ret = MMSYSTEM_MAP_OK; break; default: FIXME("NIY: no conversion yet for %u [%lx,%lx]\n", wMsg, *lpParam1, *lpParam2); break; } return ret; } /************************************************************************** * MMSYSTDRV_WaveOut_UnMap16To32W [internal] */ static MMSYSTEM_MapType MMSYSTDRV_WaveOut_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret) { MMSYSTEM_MapType ret = MMSYSTEM_MAP_MSGERROR; switch (wMsg) { /* nothing to do */ case WODM_BREAKLOOP: case WODM_CLOSE: case WODM_GETNUMDEVS: case WODM_PAUSE: case WODM_RESET: case WODM_RESTART: case WODM_SETPITCH: case WODM_SETPLAYBACKRATE: case WODM_SETVOLUME: case WODM_MAPPER_STATUS: ret = MMSYSTEM_MAP_OK; break; case WODM_GETPITCH: case WODM_GETPLAYBACKRATE: case WODM_GETVOLUME: case WODM_OPEN: FIXME("Shouldn't be used: those 16 bit functions use the 32 bit interface\n"); break; case WODM_GETDEVCAPS: { LPWAVEOUTCAPSW woc32 = (LPWAVEOUTCAPSW)(*lpParam1); LPWAVEOUTCAPS16 woc16 = *(LPWAVEOUTCAPS16*)((LPSTR)woc32 - sizeof(LPWAVEOUTCAPS16)); woc16->wMid = woc32->wMid; woc16->wPid = woc32->wPid; woc16->vDriverVersion = woc32->vDriverVersion; WideCharToMultiByte( CP_ACP, 0, woc32->szPname, -1, woc16->szPname, sizeof(woc16->szPname), NULL, NULL ); woc16->dwFormats = woc32->dwFormats; woc16->wChannels = woc32->wChannels; woc16->dwSupport = woc32->dwSupport; HeapFree(GetProcessHeap(), 0, (LPSTR)woc32 - sizeof(LPWAVEOUTCAPS16)); ret = MMSYSTEM_MAP_OK; } break; case WODM_GETPOS: { LPMMTIME mmt32 = (LPMMTIME)(*lpParam1); LPMMTIME16 mmt16 = *(LPMMTIME16*)((LPSTR)mmt32 - sizeof(LPMMTIME16)); MMSYSTEM_MMTIME32to16(mmt16, mmt32); HeapFree(GetProcessHeap(), 0, (LPSTR)mmt32 - sizeof(LPMMTIME16)); ret = MMSYSTEM_MAP_OK; } break; case WODM_PREPARE: case WODM_UNPREPARE: case WODM_WRITE: { LPWAVEHDR wh32 = (LPWAVEHDR)(*lpParam1); LPWAVEHDR wh16 = MapSL(*(SEGPTR*)((LPSTR)wh32 - sizeof(DWORD) - sizeof(LPWAVEHDR))); assert(wh16->reserved == wh32); wh16->dwFlags = wh32->dwFlags; if (wMsg == WODM_UNPREPARE && fn_ret == MMSYSERR_NOERROR) { HeapFree(GetProcessHeap(), 0, (LPSTR)wh32 - sizeof(DWORD) - sizeof(LPWAVEHDR)); wh16->reserved = 0; } ret = MMSYSTEM_MAP_OK; } break; default: FIXME("NIY: no conversion yet for %u [%lx,%lx]\n", wMsg, *lpParam1, *lpParam2); break; } return ret; } /************************************************************************** * MMDRV_WaveOut_Callback [internal] */ static void MMSYSTDRV_WaveOut_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2) { switch (uMsg) { case WOM_OPEN: case WOM_CLOSE: /* dwParam1 & dwParam2 are supposed to be 0, nothing to do */ break; case WOM_DONE: { /* initial map is: 16 => 32 */ LPWAVEHDR wh32 = (LPWAVEHDR)(*dwParam1); SEGPTR segwh16 = *(SEGPTR*)((LPSTR)wh32 - sizeof(DWORD) - sizeof(LPWAVEHDR)); LPWAVEHDR wh16 = MapSL(segwh16); *dwParam1 = (DWORD)segwh16; wh16->dwFlags = wh32->dwFlags; } break; default: ERR("Unknown msg %u\n", uMsg); } } /* ################################################### * # DRIVER THUNKING # * ################################################### */ typedef MMSYSTEM_MapType (*MMSYSTDRV_MAPMSG)(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2); typedef MMSYSTEM_MapType (*MMSYSTDRV_UNMAPMSG)(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT ret); typedef void (*MMSYSTDRV_MAPCB)(DWORD wMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2); #include #define MMSYSTDRV_MAX_THUNKS 32 static struct mmsystdrv_thunk { BYTE popl_eax; /* popl %eax (return address) */ BYTE pushl_this; /* pushl this (this very thunk) */ struct mmsystdrv_thunk* this; BYTE pushl_eax; /* pushl %eax */ BYTE jmp; /* ljmp MMDRV_Callback3216 */ DWORD callback3216; DWORD callback; /* callback value (function, window, event...) */ DWORD flags; /* flags to control callback value (CALLBACK_???) */ void* hMmdrv; /* Handle to 32bit mmdrv object */ enum MMSYSTEM_DriverType kind; } *MMSYSTDRV_Thunks; #include static struct MMSYSTDRV_Type { MMSYSTDRV_MAPMSG mapmsg16to32W; MMSYSTDRV_UNMAPMSG unmapmsg16to32W; MMSYSTDRV_MAPCB mapcb; } MMSYSTEM_DriversType[MMSYSTDRV_MAX] = { {MMSYSTDRV_Mixer_Map16To32W, MMSYSTDRV_Mixer_UnMap16To32W, MMSYSTDRV_Mixer_MapCB}, {MMSYSTDRV_MidiIn_Map16To32W, MMSYSTDRV_MidiIn_UnMap16To32W, MMSYSTDRV_MidiIn_MapCB}, {MMSYSTDRV_MidiOut_Map16To32W, MMSYSTDRV_MidiOut_UnMap16To32W, MMSYSTDRV_MidiOut_MapCB}, {MMSYSTDRV_WaveIn_Map16To32W, MMSYSTDRV_WaveIn_UnMap16To32W, MMSYSTDRV_WaveIn_MapCB}, {MMSYSTDRV_WaveOut_Map16To32W, MMSYSTDRV_WaveOut_UnMap16To32W, MMSYSTDRV_WaveOut_MapCB}, }; BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); /****************************************************************** * MMSYSTDRV_Callback3216 * */ static LRESULT CALLBACK MMSYSTDRV_Callback3216(struct mmsystdrv_thunk* thunk, HDRVR hDev, DWORD wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { WORD args[8]; assert(thunk->kind < MMSYSTDRV_MAX); assert(MMSYSTEM_DriversType[thunk->kind].mapcb); MMSYSTEM_DriversType[thunk->kind].mapcb(wMsg, &dwUser, &dwParam1, &dwParam2); switch (thunk->flags & CALLBACK_TYPEMASK) { case CALLBACK_NULL: TRACE("Null !\n"); break; case CALLBACK_WINDOW: TRACE("Window(%04X) handle=%p!\n", thunk->callback, hDev); PostMessageA(HWND_32(thunk->callback), wMsg, (WPARAM)hDev, dwParam1); break; case CALLBACK_TASK: /* aka CALLBACK_THREAD */ TRACE("Task(%04x) !\n", thunk->callback); PostThreadMessageA(thunk->callback, wMsg, (WPARAM)hDev, dwParam1); break; case CALLBACK_FUNCTION: /* 16 bit func, call it */ TRACE("Function (16 bit) %x!\n", thunk->callback); args[7] = HDRVR_16(hDev); args[6] = wMsg; args[5] = HIWORD(dwUser); args[4] = LOWORD(dwUser); args[3] = HIWORD(dwParam1); args[2] = LOWORD(dwParam1); args[1] = HIWORD(dwParam2); args[0] = LOWORD(dwParam2); vm_inject((DWORD)thunk->callback, WCB16_PASCAL, sizeof(args), args, NULL); break; case CALLBACK_EVENT: TRACE("Event(%08x) !\n", thunk->callback); SetEvent((HANDLE)thunk->callback); break; default: WARN("Unknown callback type %x\n", thunk->flags & CALLBACK_TYPEMASK); return FALSE; } TRACE("Done\n"); return TRUE; } /****************************************************************** * MMSYSTDRV_AddThunk * */ struct mmsystdrv_thunk* MMSYSTDRV_AddThunk(DWORD callback, DWORD flags, enum MMSYSTEM_DriverType kind) { struct mmsystdrv_thunk* thunk; EnterCriticalSection(&mmdrv_cs); if (!MMSYSTDRV_Thunks) { MMSYSTDRV_Thunks = VirtualAlloc(NULL, MMSYSTDRV_MAX_THUNKS * sizeof(*MMSYSTDRV_Thunks), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (!MMSYSTDRV_Thunks) { LeaveCriticalSection(&mmdrv_cs); return NULL; } for (thunk = MMSYSTDRV_Thunks; thunk < &MMSYSTDRV_Thunks[MMSYSTDRV_MAX_THUNKS]; thunk++) { thunk->popl_eax = 0x58; /* popl %eax */ thunk->pushl_this = 0x68; /* pushl this */ thunk->this = thunk; thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->jmp = 0xe9; /* jmp MMDRV_Callback3216 */ thunk->callback3216 = (char *)MMSYSTDRV_Callback3216 - (char *)(&thunk->callback3216 + 1); thunk->callback = 0; thunk->flags = CALLBACK_NULL; thunk->hMmdrv = NULL; thunk->kind = MMSYSTDRV_MAX; } } for (thunk = MMSYSTDRV_Thunks; thunk < &MMSYSTDRV_Thunks[MMSYSTDRV_MAX_THUNKS]; thunk++) { if (thunk->callback == 0 && thunk->hMmdrv == NULL) { thunk->callback = callback; thunk->flags = flags; thunk->hMmdrv = NULL; thunk->kind = kind; LeaveCriticalSection(&mmdrv_cs); return thunk; } } LeaveCriticalSection(&mmdrv_cs); FIXME("Out of mmdrv-thunks. Bump MMDRV_MAX_THUNKS\n"); return NULL; } /****************************************************************** * MMSYSTDRV_FindHandle * * Must be called with lock set */ static void* MMSYSTDRV_FindHandle(void* h) { struct mmsystdrv_thunk* thunk; if (!h) return NULL; for (thunk = MMSYSTDRV_Thunks; thunk < &MMSYSTDRV_Thunks[MMSYSTDRV_MAX_THUNKS]; thunk++) { if (thunk->hMmdrv == h) { if (thunk->kind >= MMSYSTDRV_MAX) FIXME("Kind isn't properly initialized %x\n", thunk->kind); return thunk; } } return NULL; } /****************************************************************** * MMSYSTDRV_SetHandle * */ void MMSYSTDRV_SetHandle(struct mmsystdrv_thunk* thunk, void* h) { if (MMSYSTDRV_FindHandle(h)) FIXME("Already has a thunk for this handle %p!!!\n", h); thunk->hMmdrv = h; } /****************************************************************** * MMSYSTDRV_DeleteThunk */ void MMSYSTDRV_DeleteThunk(struct mmsystdrv_thunk* thunk) { thunk->callback = 0; thunk->flags = CALLBACK_NULL; thunk->hMmdrv = NULL; thunk->kind = MMSYSTDRV_MAX; } /****************************************************************** * MMSYSTDRV_CloseHandle */ void MMSYSTDRV_CloseHandle(void* h) { struct mmsystdrv_thunk* thunk; EnterCriticalSection(&mmdrv_cs); if ((thunk = MMSYSTDRV_FindHandle(h))) { MMSYSTDRV_DeleteThunk(thunk); } LeaveCriticalSection(&mmdrv_cs); } /****************************************************************** * MMSYSTDRV_Message */ DWORD MMSYSTDRV_Message(void* h, UINT msg, DWORD_PTR param1, DWORD_PTR param2) { struct mmsystdrv_thunk* thunk = MMSYSTDRV_FindHandle(h); struct MMSYSTDRV_Type* drvtype; MMSYSTEM_MapType map; DWORD ret; DWORD count; if (!thunk) return MMSYSERR_INVALHANDLE; drvtype = &MMSYSTEM_DriversType[thunk->kind]; map = drvtype->mapmsg16to32W(msg, ¶m1, ¶m2); switch (map) { case MMSYSTEM_MAP_NOMEM: ret = MMSYSERR_NOMEM; break; case MMSYSTEM_MAP_MSGERROR: FIXME("NIY: no conversion yet 16->32 kind=%u msg=%u\n", thunk->kind, msg); ret = MMSYSERR_ERROR; break; case MMSYSTEM_MAP_OK: case MMSYSTEM_MAP_OKMEM: TRACE("Calling message(msg=%u p1=0x%08lx p2=0x%08lx)\n", msg, param1, param2); ReleaseThunkLock(&count); switch (thunk->kind) { case MMSYSTDRV_MIXER: ret = mixerMessage (h, msg, param1, param2); break; case MMSYSTDRV_MIDIIN: switch (msg) { case MIDM_ADDBUFFER: ret = midiInAddBuffer(h, (LPMIDIHDR)param1, param2); break; case MIDM_PREPARE: ret = midiInPrepareHeader(h, (LPMIDIHDR)param1, param2); break; case MIDM_UNPREPARE: ret = midiInUnprepareHeader(h, (LPMIDIHDR)param1, param2); break; default: ret = midiInMessage(h, msg, param1, param2); break; } break; case MMSYSTDRV_MIDIOUT: switch (msg) { case MODM_PREPARE: ret = midiOutPrepareHeader(h, (LPMIDIHDR)param1, param2); break; case MODM_UNPREPARE: ret = midiOutUnprepareHeader(h, (LPMIDIHDR)param1, param2); break; case MODM_LONGDATA: ret = midiOutLongMsg(h, (LPMIDIHDR)param1, param2); break; default: ret = midiOutMessage(h, msg, param1, param2); break; } break; case MMSYSTDRV_WAVEIN: switch (msg) { case WIDM_ADDBUFFER: ret = waveInAddBuffer(h, (LPWAVEHDR)param1, param2); break; case WIDM_PREPARE: ret = waveInPrepareHeader(h, (LPWAVEHDR)param1, param2); break; case WIDM_UNPREPARE: ret = waveInUnprepareHeader(h, (LPWAVEHDR)param1, param2); break; default: ret = waveInMessage(h, msg, param1, param2); break; } break; case MMSYSTDRV_WAVEOUT: switch (msg) { case WODM_PREPARE: ret = waveOutPrepareHeader(h, (LPWAVEHDR)param1, param2); break; case WODM_UNPREPARE: ret = waveOutUnprepareHeader(h, (LPWAVEHDR)param1, param2); break; case WODM_WRITE: ret = waveOutWrite(h, (LPWAVEHDR)param1, param2); break; default: ret = waveOutMessage(h, msg, param1, param2); break; } break; default: ret = MMSYSERR_INVALHANDLE; break; /* should never be reached */ } RestoreThunkLock(count); if (map == MMSYSTEM_MAP_OKMEM) drvtype->unmapmsg16to32W(msg, ¶m1, ¶m2, ret); break; default: FIXME("NIY\n"); ret = MMSYSERR_NOTSUPPORTED; break; } return ret; } ================================================ FILE: mmsystem/mmio16.c ================================================ /* * MMSYSTEM mmio* functions * * Copyright 1993 Martin Ayotte * 1998-2003,2009 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #define NONAMELESSUNION #ifdef WINE_NO_UNICODE_MACROS # define WINELIB_NAME_AW(func) \ func##_must_be_suffixed_with_W_or_A_in_this_context \ func##_must_be_suffixed_with_W_or_A_in_this_context #else /* WINE_NO_UNICODE_MACROS */ # ifdef UNICODE # define WINELIB_NAME_AW(func) func##W # else # define WINELIB_NAME_AW(func) func##A # endif #endif /* WINE_NO_UNICODE_MACROS */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; #endif #include "windef.h" #include "winbase.h" #include "mmsystem.h" #include "winternl.h" #include "wownt32.h" #include "winnls.h" #include "wine/winuser16.h" #include "winemm16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(mmsys); /* ################################################### * # MMIO # * ################################################### */ #include #define MMIO_MAX_THUNKS 64 #define SEGOFF_SHIFT(a) (((DWORD)(a) & 0xffff) | (((DWORD)(a) << 3) & 0xfff80000)) #define SEGOFF_UNSHIFT(a) (((DWORD)(a) & 0xffff) | (((DWORD)(a) >> 3) & 0xffff0000)) static struct mmio_thunk { BYTE popl_eax; /* popl %eax (return address) */ BYTE pushl_func; /* pushl $this */ struct mmio_thunk *this; BYTE pushl_eax; /* pushl %eax */ BYTE jmp; /* ljmp MMIO_Callback1632 */ DWORD callback; LPMMIOPROC16 pfn16; HMMIO hMmio; /* Handle to 32bit mmio object */ SEGPTR segbuffer; /* actual segmented ptr to buffer */ HGLOBAL16 allocbuf; /* MMIO_ALLOCBUF */ } *MMIO_Thunks; #include static CRITICAL_SECTION mmio_cs; static CRITICAL_SECTION_DEBUG mmio_critsect_debug = { 0, 0, &mmio_cs, { &mmio_critsect_debug.ProcessLocksList, &mmio_critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": mmsystem_mmio_cs") } }; static CRITICAL_SECTION mmio_cs = { &mmio_critsect_debug, -1, 0, 0, 0, 0 }; /**************************************************************** * MMIO_Map32To16 [INTERNAL] */ static LRESULT MMIO_Map32To16(struct mmio_thunk *thunk, DWORD wMsg, LPARAM* lp1, LPARAM* lp2, DWORD cch) { switch (wMsg) { case MMIOM_CLOSE: case MMIOM_SEEK: /* nothing to do */ break; case MMIOM_OPEN: *lp1 = MapLS( (void *)*lp1 ); break; case MMIOM_READ: case MMIOM_WRITE: case MMIOM_WRITEFLUSH: if (*lp2 > cch) { int size = *lp2; int count = (size + 0xffff) / 0x10000; WORD sel = AllocSelectorArray16(count); for (int i = 0; i < count; i++) { SetSelectorBase(sel + (i << __AHSHIFT), (DWORD)*lp1 + i * 0x10000); SetSelectorLimit16(sel + (i << __AHSHIFT), size - 1); size -= 0x10000; } *lp1 = sel << 16; break; } else if (thunk->segbuffer) { int offset = *lp1 - (INT_PTR)MapSL(thunk->segbuffer); if ((offset <= 0xffff) && (offset <= GlobalSize16(SELECTOROF(thunk->segbuffer)))) { *lp1 = thunk->segbuffer + offset; break; } } *lp1 = MapLS( (void *)*lp1 ); break; case MMIOM_RENAME: *lp1 = MapLS( (void *)*lp1 ); *lp2 = MapLS( (void *)*lp2 ); break; default: if (wMsg < MMIOM_USER) TRACE("Not a mappable message (%d)\n", wMsg); } return MMSYSERR_NOERROR; } /**************************************************************** * MMIO_UnMap32To16 [INTERNAL] */ static LRESULT MMIO_UnMap32To16(struct mmio_thunk *thunk, DWORD wMsg, LPARAM lParam1, LPARAM lParam2, LPARAM lp1, LPARAM lp2, DWORD cch) { switch (wMsg) { case MMIOM_CLOSE: case MMIOM_SEEK: /* nothing to do */ break; case MMIOM_OPEN: UnMapLS( lp1 ); break; case MMIOM_READ: case MMIOM_WRITE: case MMIOM_WRITEFLUSH: if (lp2 > cch) { int count = (lp2 + 0xffff) / 0x10000; WORD sel = SELECTOROF(lp1); for (int i = 0; i < count; i++) { FreeSelector16(sel + (i << __AHSHIFT)); } } else if (SELECTOROF(thunk->segbuffer) != SELECTOROF(lp1)) UnMapLS( lp1 ); break; case MMIOM_RENAME: UnMapLS( lp1 ); UnMapLS( lp2 ); break; default: if (wMsg < MMIOM_USER) TRACE("Not a mappable message (%d)\n", wMsg); } return MMSYSERR_NOERROR; } /****************************************************************** * MMIO_HasThunk * */ static struct mmio_thunk* MMIO_HasThunk(HMMIO hmmio) { struct mmio_thunk* thunk; if (!MMIO_Thunks) return NULL; for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++) { if (thunk->hMmio == hmmio) return thunk; } return NULL; } /****************************************************************** * MMIO_Callback3216 * * */ static LRESULT CALLBACK MMIO_Callback3216(struct mmio_thunk *thunk, LPMMIOINFO lpmmioinfo, UINT uMessage, LPARAM lParam1, LPARAM lParam2) { DWORD result; MMIOINFO16 mmioInfo16; SEGPTR segmmioInfo16; LPARAM lp1 = lParam1, lp2 = lParam2; WORD args[7]; SEGPTR cb16 = thunk->pfn16; if (!cb16) return MMSYSERR_INVALPARAM; if (thunk->hMmio != lpmmioinfo->hmmio) { struct mmio_thunk *realfile = MMIO_HasThunk(lpmmioinfo->hmmio); if (realfile) thunk = realfile; } memset(&mmioInfo16, 0, sizeof(MMIOINFO16)); mmioInfo16.dwFlags = lpmmioinfo->dwFlags; mmioInfo16.lDiskOffset = lpmmioinfo->lDiskOffset; mmioInfo16.adwInfo[0] = lpmmioinfo->adwInfo[0]; mmioInfo16.adwInfo[1] = lpmmioinfo->adwInfo[1]; mmioInfo16.adwInfo[2] = lpmmioinfo->adwInfo[2]; /* map (lParam1, lParam2) into (lp1, lp2) 32=>16 */ if ((result = MMIO_Map32To16(thunk, uMessage, &lp1, &lp2, lpmmioinfo->cchBuffer)) != MMSYSERR_NOERROR) return result; segmmioInfo16 = MapLS(&mmioInfo16); args[6] = HIWORD(segmmioInfo16); args[5] = LOWORD(segmmioInfo16); args[4] = uMessage; args[3] = HIWORD(lp1); args[2] = LOWORD(lp1); args[1] = HIWORD(lp2); args[0] = LOWORD(lp2); WOWCallback16Ex( cb16, WCB16_PASCAL, sizeof(args), args, &result ); UnMapLS(segmmioInfo16); MMIO_UnMap32To16(thunk, uMessage, lParam1, lParam2, lp1, lp2, lpmmioinfo->cchBuffer); lpmmioinfo->lDiskOffset = mmioInfo16.lDiskOffset; lpmmioinfo->adwInfo[0] = mmioInfo16.adwInfo[0]; lpmmioinfo->adwInfo[1] = mmioInfo16.adwInfo[1]; lpmmioinfo->adwInfo[2] = mmioInfo16.adwInfo[2]; return result; } /****************************************************************** * MMIO_AddThunk * */ static struct mmio_thunk* MMIO_AddThunk(LPMMIOPROC16 pfn16, HPSTR segbuf) { struct mmio_thunk* thunk; if (!MMIO_Thunks) { MMIO_Thunks = VirtualAlloc(NULL, MMIO_MAX_THUNKS * sizeof(*MMIO_Thunks), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (!MMIO_Thunks) return NULL; for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++) { thunk->popl_eax = 0x58; /* popl %eax */ thunk->pushl_func = 0x68; /* pushl $this */ thunk->this = thunk; thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->jmp = 0xe9; /* jmp MMIO_Callback3216 */ thunk->callback = (char *)MMIO_Callback3216 - (char *)(&thunk->callback + 1); thunk->pfn16 = 0; thunk->hMmio = NULL; thunk->segbuffer = 0; thunk->allocbuf = NULL; } } for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++) { if (thunk->pfn16 == 0 && thunk->hMmio == NULL) { thunk->pfn16 = pfn16; thunk->hMmio = NULL; thunk->segbuffer = (SEGPTR)segbuf; return thunk; } } FIXME("Out of mmio-thunks. Bump MMIO_MAX_THUNKS\n"); return NULL; } /****************************************************************** * MMIO_SetSegmentedBuffer * */ static void MMIO_SetSegmentedBuffer(struct mmio_thunk* thunk, SEGPTR ptr, BOOL release) { if (release) { if (thunk->allocbuf) { GlobalFree16(thunk->allocbuf); } else { UnMapLS(thunk->segbuffer); } } thunk->segbuffer = ptr; } /************************************************************************** * mmioOpen [MMSYSTEM.1210] */ HMMIO16 WINAPI mmioOpen16(LPSTR szFileName, MMIOINFO16* lpmmioinfo16, DWORD dwOpenFlags) { HMMIO ret; struct mmio_thunk* thunk = NULL; if (lpmmioinfo16) { MMIOINFO mmioinfo; memset(&mmioinfo, 0, sizeof(mmioinfo)); EnterCriticalSection(&mmio_cs); if (!(thunk = MMIO_AddThunk(lpmmioinfo16->pIOProc, lpmmioinfo16->pchBuffer))) { LeaveCriticalSection(&mmio_cs); return 0; } mmioinfo.dwFlags = lpmmioinfo16->dwFlags; mmioinfo.fccIOProc = lpmmioinfo16->fccIOProc; mmioinfo.pIOProc = lpmmioinfo16->pIOProc ? (LPMMIOPROC)thunk : 0; mmioinfo.cchBuffer = lpmmioinfo16->cchBuffer; mmioinfo.pchBuffer = MapSL((DWORD)lpmmioinfo16->pchBuffer); mmioinfo.adwInfo[0] = lpmmioinfo16->adwInfo[0]; /* if we don't have a file name, it's likely a passed open file descriptor */ if (!szFileName && (mmioinfo.fccIOProc != FOURCC_MEM)) mmioinfo.adwInfo[0] = (DWORD)DosFileHandleToWin32Handle(mmioinfo.adwInfo[0]); mmioinfo.adwInfo[1] = lpmmioinfo16->adwInfo[1]; mmioinfo.adwInfo[2] = lpmmioinfo16->adwInfo[2]; ret = mmioOpenA(szFileName, &mmioinfo, dwOpenFlags & ~MMIO_ALLOCBUF); if (!ret || (dwOpenFlags & (MMIO_PARSE|MMIO_EXIST))) { thunk->pfn16 = NULL; thunk->hMmio = NULL; } else thunk->hMmio = ret; if (ret && (dwOpenFlags & MMIO_ALLOCBUF) && !lpmmioinfo16->pchBuffer) { if (lpmmioinfo16->pchBuffer) FIXME("ooch\n"); /* FIXME: check whether mmioOpen should set pchBuffer */ HGLOBAL hg = GlobalAlloc16(0, lpmmioinfo16->cchBuffer); mmioSetBuffer(ret, GlobalLock16(hg), lpmmioinfo16->cchBuffer, 0); /* OFFSETOF(segbuffer) must be 0x0000 */ thunk->segbuffer = WOWGlobalLock16(hg); thunk->allocbuf = hg; } LeaveCriticalSection(&mmio_cs); lpmmioinfo16->wErrorRet = mmioinfo.wErrorRet; lpmmioinfo16->hmmio = HMMIO_16(mmioinfo.hmmio); } else { EnterCriticalSection(&mmio_cs); if (!(thunk = MMIO_AddThunk(NULL, 0))) { LeaveCriticalSection(&mmio_cs); return 0; } ret = mmioOpenA(szFileName, NULL, dwOpenFlags & ~MMIO_ALLOCBUF); if (!ret || (dwOpenFlags & (MMIO_PARSE|MMIO_EXIST))) thunk->hMmio = NULL; else thunk->hMmio = ret; if (ret && (dwOpenFlags & MMIO_ALLOCBUF)) { HGLOBAL hg = GlobalAlloc16(0, MMIO_DEFAULTBUFFER); mmioSetBuffer(ret, GlobalLock16(hg), MMIO_DEFAULTBUFFER, 0); thunk->segbuffer = WOWGlobalLock16(hg); thunk->allocbuf = hg; } else { thunk->segbuffer = 0; thunk->allocbuf = NULL; } LeaveCriticalSection(&mmio_cs); } return HMMIO_16(ret); } /************************************************************************** * mmioClose [MMSYSTEM.1211] */ MMRESULT16 WINAPI mmioClose16(HMMIO16 hmmio, UINT16 uFlags) { MMRESULT ret; HMMIO hmmio32 = HMMIO_32(hmmio); MMIOINFO mmioinfo = {0}; if (!(uFlags & MMIO_FHOPEN)) mmioGetInfo(hmmio32, &mmioinfo, 0); EnterCriticalSection(&mmio_cs); ret = mmioClose(hmmio32, uFlags); if (ret == MMSYSERR_NOERROR) { struct mmio_thunk* thunk; if (mmioinfo.fccIOProc == FOURCC_DOS) DeleteDosFileHandle(mmioinfo.adwInfo[0]); if ((thunk = MMIO_HasThunk(hmmio32))) { MMIO_SetSegmentedBuffer(thunk, 0, TRUE); thunk->pfn16 = NULL; thunk->hMmio = NULL; } } LeaveCriticalSection(&mmio_cs); return ret; } /************************************************************************** * mmioRead [MMSYSTEM.1212] */ LONG WINAPI mmioRead16(HMMIO16 hmmio, HPSTR pch, LONG cch) { return mmioRead(HMMIO_32(hmmio), pch, cch); } /************************************************************************** * mmioWrite [MMSYSTEM.1213] */ LONG WINAPI mmioWrite16(HMMIO16 hmmio, HPCSTR pch, LONG cch) { return mmioWrite(HMMIO_32(hmmio),pch,cch); } /************************************************************************** * mmioSeek [MMSYSTEM.1214] */ LONG WINAPI mmioSeek16(HMMIO16 hmmio, LONG lOffset, INT16 iOrigin) { return mmioSeek(HMMIO_32(hmmio), lOffset, iOrigin); } /************************************************************************** * mmioGetInfo [MMSYSTEM.1215] */ MMRESULT16 WINAPI mmioGetInfo16(HMMIO16 hmmio, MMIOINFO16* lpmmioinfo, UINT16 uFlags) { MMIOINFO mmioinfo; MMRESULT ret; struct mmio_thunk* thunk; TRACE("(0x%04x,%p,0x%08x)\n", hmmio, lpmmioinfo, uFlags); EnterCriticalSection(&mmio_cs); if ((thunk = MMIO_HasThunk(HMMIO_32(hmmio))) == NULL) { LeaveCriticalSection(&mmio_cs); return MMSYSERR_INVALHANDLE; } if (!thunk->segbuffer) FIXME("NULL segbuffer\n"); ret = mmioGetInfo(HMMIO_32(hmmio), &mmioinfo, uFlags); if (ret != MMSYSERR_NOERROR) { LeaveCriticalSection(&mmio_cs); return ret; } if (thunk->allocbuf) { mmioinfo.dwFlags |= MMIO_ALLOCBUF; } lpmmioinfo->dwFlags = mmioinfo.dwFlags; lpmmioinfo->fccIOProc = mmioinfo.fccIOProc; lpmmioinfo->pIOProc = thunk->pfn16; lpmmioinfo->wErrorRet = mmioinfo.wErrorRet; lpmmioinfo->hTask = HTASK_16(mmioinfo.htask); lpmmioinfo->cchBuffer = mmioinfo.cchBuffer; lpmmioinfo->pchBuffer = (void*)thunk->segbuffer; lpmmioinfo->pchNext = (void*)(thunk->segbuffer + SEGOFF_SHIFT(mmioinfo.pchNext - mmioinfo.pchBuffer)); lpmmioinfo->pchEndRead = (void*)(thunk->segbuffer + SEGOFF_SHIFT(mmioinfo.pchEndRead - mmioinfo.pchBuffer)); lpmmioinfo->pchEndWrite = (void*)(thunk->segbuffer + SEGOFF_SHIFT(mmioinfo.pchEndWrite - mmioinfo.pchBuffer)); lpmmioinfo->lBufOffset = mmioinfo.lBufOffset; lpmmioinfo->lDiskOffset = mmioinfo.lDiskOffset; lpmmioinfo->adwInfo[0] = mmioinfo.fccIOProc == FOURCC_DOS ? Win32HandleToDosFileHandle(mmioinfo.adwInfo[0]) : mmioinfo.adwInfo[0]; lpmmioinfo->adwInfo[1] = mmioinfo.adwInfo[1]; lpmmioinfo->adwInfo[2] = mmioinfo.adwInfo[2]; lpmmioinfo->dwReserved1 = 0; lpmmioinfo->dwReserved2 = 0; lpmmioinfo->hmmio = HMMIO_16(mmioinfo.hmmio); LeaveCriticalSection(&mmio_cs); return MMSYSERR_NOERROR; } /************************************************************************** * mmioSetInfo [MMSYSTEM.1216] */ MMRESULT16 WINAPI mmioSetInfo16(HMMIO16 hmmio, const MMIOINFO16* lpmmioinfo, UINT16 uFlags) { MMIOINFO mmioinfo; MMRESULT ret; TRACE("(0x%04x,%p,0x%08x)\n",hmmio,lpmmioinfo,uFlags); ret = mmioGetInfo(HMMIO_32(hmmio), &mmioinfo, 0); if (ret != MMSYSERR_NOERROR) return ret; /* check if seg and lin buffers are the same */ if (mmioinfo.cchBuffer != lpmmioinfo->cchBuffer || mmioinfo.pchBuffer != MapSL((DWORD)lpmmioinfo->pchBuffer)) return MMSYSERR_INVALPARAM; DWORD pchBuffer = SEGOFF_UNSHIFT(lpmmioinfo->pchBuffer); DWORD pchNext = SEGOFF_UNSHIFT(lpmmioinfo->pchNext); DWORD pchEndRead = SEGOFF_UNSHIFT(lpmmioinfo->pchEndRead); DWORD pchEndWrite = SEGOFF_UNSHIFT(lpmmioinfo->pchEndWrite); /* check pointers coherence */ if (pchNext < pchBuffer || pchNext > pchBuffer + lpmmioinfo->cchBuffer || pchEndRead < pchBuffer || pchEndRead > pchBuffer + lpmmioinfo->cchBuffer || pchEndWrite < pchBuffer || pchEndWrite > pchBuffer + lpmmioinfo->cchBuffer) return MMSYSERR_INVALPARAM; mmioinfo.dwFlags = lpmmioinfo->dwFlags & ~MMIO_ALLOCBUF; mmioinfo.pchNext = mmioinfo.pchBuffer + (pchNext - pchBuffer); mmioinfo.pchEndRead = mmioinfo.pchBuffer + (pchEndRead - pchBuffer); mmioinfo.pchEndWrite = mmioinfo.pchBuffer + (pchEndWrite - pchBuffer); mmioinfo.lBufOffset = lpmmioinfo->lBufOffset; mmioinfo.lDiskOffset = lpmmioinfo->lDiskOffset; return mmioSetInfo(HMMIO_32(hmmio), &mmioinfo, uFlags); } /************************************************************************** * mmioSetBuffer [MMSYSTEM.1217] */ MMRESULT16 WINAPI mmioSetBuffer16(HMMIO16 hmmio, SEGPTR pchBuffer, LONG cchBuffer, UINT16 uFlags) { MMRESULT ret = mmioSetBuffer(HMMIO_32(hmmio), MapSL(pchBuffer), cchBuffer, uFlags); if (ret == MMSYSERR_NOERROR) { struct mmio_thunk* thunk; if ((thunk = MMIO_HasThunk(HMMIO_32(hmmio))) == NULL) { FIXME("really ?\n"); return MMSYSERR_INVALHANDLE; } thunk->allocbuf = NULL; MMIO_SetSegmentedBuffer(thunk, pchBuffer, TRUE); } else UnMapLS(pchBuffer); return ret; } /************************************************************************** * mmioFlush [MMSYSTEM.1218] */ MMRESULT16 WINAPI mmioFlush16(HMMIO16 hmmio, UINT16 uFlags) { return mmioFlush(HMMIO_32(hmmio), uFlags); } /*********************************************************************** * mmioAdvance [MMSYSTEM.1219] */ MMRESULT16 WINAPI mmioAdvance16(HMMIO16 hmmio, MMIOINFO16* lpmmioinfo, UINT16 uFlags) { LRESULT ret; if (lpmmioinfo) { ret = mmioSetInfo16(hmmio, lpmmioinfo, 0); if (ret != MMSYSERR_NOERROR) return ret; } ret = mmioAdvance(HMMIO_32(hmmio), NULL, uFlags); if (ret != MMSYSERR_NOERROR) return ret; if (lpmmioinfo) { ret = mmioGetInfo16(hmmio, lpmmioinfo, 0); if (ret != MMSYSERR_NOERROR) return ret; } return MMSYSERR_NOERROR; } /************************************************************************** * mmioStringToFOURCC [MMSYSTEM.1220] */ FOURCC WINAPI mmioStringToFOURCC16(LPCSTR sz, UINT16 uFlags) { return mmioStringToFOURCCA(sz, uFlags); } /************************************************************************** * mmioInstallIOProc [MMSYSTEM.1221] */ LPMMIOPROC16 WINAPI mmioInstallIOProc16(FOURCC fccIOProc, LPMMIOPROC16 pIOProc, DWORD dwFlags) { struct mmio_thunk* thunk = NULL; LPMMIOPROC pIOProc32; EnterCriticalSection(&mmio_cs); switch (dwFlags & (MMIO_INSTALLPROC|MMIO_REMOVEPROC|MMIO_FINDPROC)) { case MMIO_INSTALLPROC: if (!(thunk = MMIO_AddThunk(pIOProc, NULL))) { LeaveCriticalSection(&mmio_cs); return NULL; } if (!mmioInstallIOProcA(fccIOProc, (LPMMIOPROC)thunk, dwFlags)) { thunk->pfn16 = NULL; pIOProc = NULL; } break; case MMIO_REMOVEPROC: if (MMIO_Thunks) { for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++) { if (thunk->pfn16 == pIOProc && thunk->segbuffer == 0) { if (mmioInstallIOProcA(fccIOProc, (LPMMIOPROC)thunk, dwFlags)) thunk->pfn16 = NULL; else pIOProc = NULL; break; } } } if (!thunk) pIOProc = NULL; break; case MMIO_FINDPROC: if ((pIOProc32 = mmioInstallIOProcA(fccIOProc, NULL, dwFlags)) && MMIO_Thunks) { for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++) { if ((LPMMIOPROC)thunk == pIOProc32) { pIOProc = thunk->pfn16; break; } } } break; default: FIXME("Unsupported flags %08x\n", dwFlags); pIOProc = NULL; } LeaveCriticalSection(&mmio_cs); return pIOProc; } /************************************************************************** * mmioSendMessage [MMSYSTEM.1222] */ LRESULT WINAPI mmioSendMessage16(HMMIO16 hmmio, UINT16 uMessage, LPARAM lParam1, LPARAM lParam2) { struct mmio_thunk* thunk; if ((thunk = MMIO_HasThunk(HMMIO_32(hmmio)))) { MMIOINFO mmioinfo; if (mmioGetInfo(HMMIO_32(hmmio), &mmioinfo, 0) == MMSYSERR_NOERROR) { return MMIO_Callback3216((SEGPTR)thunk->pfn16, &mmioinfo, uMessage, lParam1, lParam2); } return MMSYSERR_INVALHANDLE; } else { /* FIXME: we need to map lParam1 and lParam2 to 32bit entities */ return mmioSendMessage(HMMIO_32(hmmio), uMessage, lParam1, lParam2); } } /************************************************************************** * mmioDescend [MMSYSTEM.1223] */ MMRESULT16 WINAPI mmioDescend16(HMMIO16 hmmio, LPMMCKINFO lpck, const MMCKINFO* lpckParent, UINT16 uFlags) { return mmioDescend(HMMIO_32(hmmio), lpck, lpckParent, uFlags); } /************************************************************************** * mmioAscend [MMSYSTEM.1224] */ MMRESULT16 WINAPI mmioAscend16(HMMIO16 hmmio, MMCKINFO* lpck, UINT16 uFlags) { return mmioAscend(HMMIO_32(hmmio),lpck,uFlags); } /************************************************************************** * mmioCreateChunk [MMSYSTEM.1225] */ MMRESULT16 WINAPI mmioCreateChunk16(HMMIO16 hmmio, MMCKINFO* lpck, UINT16 uFlags) { return mmioCreateChunk(HMMIO_32(hmmio), lpck, uFlags); } /************************************************************************** * mmioRename [MMSYSTEM.1226] */ MMRESULT16 WINAPI mmioRename16(LPCSTR szFileName, LPCSTR szNewFileName, MMIOINFO16* lpmmioinfo, DWORD dwRenameFlags) { BOOL inst = FALSE; MMRESULT ret; MMIOINFO mmioinfo; if (lpmmioinfo != NULL && lpmmioinfo->pIOProc != NULL && lpmmioinfo->fccIOProc == 0) { FIXME("Can't handle this case yet\n"); return MMSYSERR_ERROR; } /* this is a bit hacky, but it'll work if we get a fourCC code or nothing. * but a non installed ioproc without a fourcc won't do */ if (lpmmioinfo && lpmmioinfo->fccIOProc && lpmmioinfo->pIOProc) { mmioInstallIOProc16(lpmmioinfo->fccIOProc, lpmmioinfo->pIOProc, MMIO_INSTALLPROC); inst = TRUE; } memset(&mmioinfo, 0, sizeof(mmioinfo)); if (lpmmioinfo) mmioinfo.fccIOProc = lpmmioinfo->fccIOProc; ret = mmioRenameA(szFileName, szNewFileName, &mmioinfo, dwRenameFlags); if (inst) { mmioInstallIOProc16(lpmmioinfo->fccIOProc, NULL, MMIO_REMOVEPROC); } return ret; } ================================================ FILE: mmsystem/mmsystem.c ================================================ /* -*- tab-width: 8; c-basic-offset: 4 -*- */ /* * MMSYSTEM functions * * Copyright 1993 Martin Ayotte * 1998-2003 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* * Eric POUECH : * 99/4 added mmTask and mmThread functions support */ #include #include #define NONAMELESSUNION #undef DUMMYSTRUCTNAME #undef DUMMYUNIONNAME #ifdef WINE_NO_UNICODE_MACROS # define WINELIB_NAME_AW(func) \ func##_must_be_suffixed_with_W_or_A_in_this_context \ func##_must_be_suffixed_with_W_or_A_in_this_context #else /* WINE_NO_UNICODE_MACROS */ # ifdef UNICODE # define WINELIB_NAME_AW(func) func##W # else # define WINELIB_NAME_AW(func) func##A # endif #endif /* WINE_NO_UNICODE_MACROS */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; #endif #include "windef.h" #include "winbase.h" #include "mmsystem.h" #include "winternl.h" #include "wownt32.h" #include "winnls.h" #include "wine/list.h" #include "wine/winuser16.h" #include "winemm16.h" #include "mmreg.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(mmsys); WINE_DECLARE_DEBUG_CHANNEL(relay); static CRITICAL_SECTION_DEBUG mmdrv_critsect_debug = { 0, 0, &mmdrv_cs, { &mmdrv_critsect_debug.ProcessLocksList, &mmdrv_critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": mmsystem_mmdrv_cs") } }; CRITICAL_SECTION mmdrv_cs = { &mmdrv_critsect_debug, -1, 0, 0, 0, 0 }; /* ################################################### * # LIBRARY # * ################################################### */ /************************************************************************** * DllEntryPoint (MMSYSTEM.4) * * MMSYSTEM DLL entry point * */ BOOL WINAPI MMSYSTEM_LibMain(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds, WORD wHeapSize, DWORD dwReserved1, WORD wReserved2) { static int done; if (!done++) LoadLibrary16( "sound.drv" ); return TRUE; } /************************************************************************** * WEP [MMSYSTEM.1] */ int WINAPI MMSYSTEM_WEP(HINSTANCE16 hInstance, WORD wDataSeg, WORD cbHeapSize, LPSTR lpCmdLine) { TRACE("STUB: Unloading MMSystem DLL ... hInst=%04X\n", hInstance); return TRUE; } /* ################################################### * # TIME # * ################################################### */ /****************************************************************** * MMSYSTEM_MMTIME32to16 * * */ void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, const MMTIME* mmt32) { mmt16->wType = mmt32->wType; /* layout of rest is the same for 32/16, * Note: mmt16->u is 2 bytes smaller than mmt32->u, which has padding */ memcpy(&(mmt16->u), &(mmt32->u), sizeof(mmt16->u)); } /************************************************************************** * timeGetSystemTime [MMSYSTEM.601] */ MMRESULT16 WINAPI timeGetSystemTime16(LPMMTIME16 lpTime, UINT16 wSize) { if (wSize >= sizeof(*lpTime)) { lpTime->wType = TIME_MS; lpTime->u.ms = GetTickCount(); TRACE("=> %u\n", lpTime->u.ms); } return 0; } struct timer_entry { struct list entry; UINT id; LPTIMECALLBACK16 func16; DWORD user; }; static struct list timer_list = LIST_INIT(timer_list); BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); static void CALLBACK timeCB3216(UINT id, UINT uMsg, DWORD_PTR user, DWORD_PTR dw1, DWORD_PTR dw2) { struct timer_entry* te = (void*)user; WORD args[8]; DWORD ret; args[7] = LOWORD(id); args[6] = LOWORD(uMsg); args[5] = HIWORD(te->user); args[4] = LOWORD(te->user); args[3] = HIWORD(dw1); args[2] = LOWORD(dw2); args[1] = HIWORD(dw2); args[0] = LOWORD(dw2); /* interrupt */ TRACE_(relay)("interrupt: %04x:%04x,%04x,%04x,%p\n", SELECTOROF(te->func16), OFFSETOF(te->func16), id, uMsg, te->user, te->user, dw1, dw2); vm_inject((DWORD)te->func16, WCB16_PASCAL, sizeof(args), args, &ret); TRACE_(relay)("return interrupt: %04x:%04x,%04x,%04x,%p\n", SELECTOROF(te->func16), OFFSETOF(te->func16), id, uMsg, te->user, te->user, dw1, dw2); } /************************************************************************** * timeSetEvent [MMSYSTEM.602] */ MMRESULT16 WINAPI timeSetEvent16(UINT16 wDelay, UINT16 wResol, LPTIMECALLBACK16 lpFunc, DWORD dwUser, UINT16 wFlags) { MMRESULT16 id; struct timer_entry* te; switch (wFlags & (TIME_CALLBACK_EVENT_SET|TIME_CALLBACK_EVENT_PULSE)) { case TIME_CALLBACK_EVENT_SET: case TIME_CALLBACK_EVENT_PULSE: id = timeSetEvent(wDelay, wResol, (LPTIMECALLBACK)lpFunc, dwUser, wFlags); break; case TIME_CALLBACK_FUNCTION: te = HeapAlloc(GetProcessHeap(), 0, sizeof(*te)); if (!te) return 0; te->func16 = lpFunc; te->user = dwUser; id = te->id = timeSetEvent(wDelay, wResol, timeCB3216, (DWORD_PTR)te, wFlags); if (id) { EnterCriticalSection(&mmdrv_cs); list_add_tail(&timer_list, &te->entry); LeaveCriticalSection(&mmdrv_cs); } else HeapFree(GetProcessHeap(), 0, te); break; default: id = 0; break; } return id; } /************************************************************************** * timeKillEvent [MMSYSTEM.603] */ MMRESULT16 WINAPI timeKillEvent16(UINT16 wID) { MMRESULT16 ret = timeKillEvent(wID); struct timer_entry* te; if (ret == TIMERR_NOERROR) { EnterCriticalSection(&mmdrv_cs); LIST_FOR_EACH_ENTRY(te, &timer_list, struct timer_entry, entry) { if (wID == te->id) { list_remove(&te->entry); HeapFree(GetProcessHeap(), 0, te); break; } } LeaveCriticalSection(&mmdrv_cs); } return ret; } /************************************************************************** * timeGetDevCaps [MMSYSTEM.604] */ MMRESULT16 WINAPI timeGetDevCaps16(LPTIMECAPS16 lpCaps, UINT16 wSize) { TIMECAPS caps; MMRESULT ret; TRACE("(%p, %u) !\n", lpCaps, wSize); if (lpCaps == NULL) return MMSYSERR_INVALPARAM; ret = timeGetDevCaps(&caps, sizeof(caps)); if (ret == MMSYSERR_NOERROR) { TIMECAPS16 tc16; tc16.wPeriodMin = caps.wPeriodMin; tc16.wPeriodMax = caps.wPeriodMax; memcpy(lpCaps, &tc16, min(wSize, sizeof(tc16))); } return ret; } /************************************************************************** * timeBeginPeriod [MMSYSTEM.605] */ MMRESULT16 WINAPI timeBeginPeriod16(UINT16 wPeriod) { TRACE("(%u) !\n", wPeriod); return timeBeginPeriod(wPeriod); } /************************************************************************** * timeEndPeriod [MMSYSTEM.606] */ MMRESULT16 WINAPI timeEndPeriod16(UINT16 wPeriod) { TRACE("(%u) !\n", wPeriod); return timeEndPeriod(wPeriod); } /************************************************************************** * timeGetTime [MMSYSTEM.607] */ DWORD WINAPI timeGetTime16(void) { return timeGetTime(); } /* ################################################### * # MISC # * ################################################### */ typedef UINT(*WINAPI tmmsystemGetVersion)(void); tmmsystemGetVersion lpfnmmsystemGetVersion; inline UINT WINAPI mmsystemGetVersion(void) { if (!lpfnmmsystemGetVersion) { lpfnmmsystemGetVersion = (tmmsystemGetVersion)GetProcAddress(GetModuleHandleA("Winmm.dll"), "mmsystemGetVersion"); } if (lpfnmmsystemGetVersion) { return lpfnmmsystemGetVersion(); } return 0; } /************************************************************************** * mmsystemGetVersion [MMSYSTEM.5] * */ UINT16 WINAPI mmsystemGetVersion16(void) { return mmsystemGetVersion(); } /************************************************************************** * DriverCallback [MMSYSTEM.31] */ BOOL16 WINAPI DriverCallback16(DWORD dwCallBack, UINT16 uFlags, HDRVR16 hDev, WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2) { return DriverCallback(dwCallBack, uFlags, HDRVR_32(hDev), wMsg, dwUser, dwParam1, dwParam2); } /************************************************************************** * OutputDebugStr [MMSYSTEM.30] */ void WINAPI OutputDebugStr16(LPCSTR str) { OutputDebugStringA( str ); } /* ################################################### * # MIXER # * ################################################### */ /************************************************************************** * Mixer devices. New to Win95 */ /************************************************************************** * mixerGetNumDevs [MMSYSTEM.800] */ UINT16 WINAPI mixerGetNumDevs16(void) { return mixerGetNumDevs(); } /************************************************************************** * mixerGetDevCaps [MMSYSTEM.801] */ UINT16 WINAPI mixerGetDevCaps16(UINT16 uDeviceID, LPMIXERCAPS16 lpCaps, UINT16 uSize) { MIXERCAPSA micA; UINT ret; if (lpCaps == NULL) return MMSYSERR_INVALPARAM; ret = mixerGetDevCapsA(uDeviceID, &micA, sizeof(micA)); if (ret == MMSYSERR_NOERROR) { MIXERCAPS16 mic16; mic16.wMid = micA.wMid; mic16.wPid = micA.wPid; mic16.vDriverVersion = micA.vDriverVersion; strcpy(mic16.szPname, micA.szPname); mic16.fdwSupport = micA.fdwSupport; mic16.cDestinations = micA.cDestinations; memcpy(lpCaps, &mic16, min(uSize, sizeof(mic16))); } return ret; } /************************************************************************** * mixerOpen [MMSYSTEM.802] */ UINT16 WINAPI mixerOpen16(LPHMIXER16 lphmix, UINT16 uDeviceID, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen) { HMIXER hmix; UINT ret; // mixer doesn't support CALLBACK_FUNCTION without which only CALLBACK_WINDOW isn't difficult // wine source says CALLBACK_THREAD and CALLBACK_EVENT weren't supported until win2k if (fdwOpen & CALLBACK_TYPEMASK) { if ((fdwOpen & CALLBACK_TYPEMASK) != CALLBACK_WINDOW) { ERR("called with unsupported callback type %x\n", fdwOpen & CALLBACK_TYPEMASK); return MMSYSERR_NOTSUPPORTED; } dwCallback = HWND_32(dwCallback); } ret = mixerOpen(&hmix, uDeviceID, dwCallback, dwInstance, fdwOpen); if (ret == MMSYSERR_NOERROR) { if (lphmix) *lphmix = HMIXER_16(hmix); } return ret; } /************************************************************************** * mixerClose [MMSYSTEM.803] */ UINT16 WINAPI mixerClose16(HMIXER16 hMix) { return mixerClose(HMIXER_32(hMix)); } /************************************************************************** * mixerGetID (MMSYSTEM.806) */ UINT16 WINAPI mixerGetID16(HMIXEROBJ16 hmix, LPUINT16 lpid, DWORD fdwID) { UINT xid; UINT ret = mixerGetID(HMIXEROBJ_32(hmix), &xid, fdwID); if (lpid) *lpid = xid; return ret; } /************************************************************************** * mixerGetControlDetails [MMSYSTEM.808] */ UINT16 WINAPI mixerGetControlDetails16(HMIXEROBJ16 hmix, LPMIXERCONTROLDETAILS16 lpmcd, DWORD fdwDetails) { DWORD ret = MMSYSERR_NOTENABLED; SEGPTR sppaDetails; TRACE("(%04x, %p, %08x)\n", hmix, lpmcd, fdwDetails); if (lpmcd == NULL || lpmcd->cbStruct != sizeof(*lpmcd)) return MMSYSERR_INVALPARAM; sppaDetails = (SEGPTR)lpmcd->paDetails; lpmcd->paDetails = MapSL(sppaDetails); ret = mixerGetControlDetailsA(HMIXEROBJ_32(hmix), (LPMIXERCONTROLDETAILS)lpmcd, fdwDetails); lpmcd->paDetails = (LPVOID)sppaDetails; return ret; } /************************************************************************** * mixerGetLineControls [MMSYSTEM.807] */ UINT16 WINAPI mixerGetLineControls16(HMIXEROBJ16 hmix, LPMIXERLINECONTROLS16 lpmlc16, DWORD fdwControls) { MIXERLINECONTROLSA mlcA; DWORD ret; unsigned int i; LPMIXERCONTROL16 lpmc16; TRACE("(%04x, %p, %08x)\n", hmix, lpmlc16, fdwControls); if (lpmlc16 == NULL || lpmlc16->cbStruct != sizeof(*lpmlc16) || lpmlc16->cbmxctrl != sizeof(MIXERCONTROL16)) return MMSYSERR_INVALPARAM; mlcA.cbStruct = sizeof(mlcA); mlcA.dwLineID = lpmlc16->dwLineID; mlcA.u.dwControlID = lpmlc16->u.dwControlID; mlcA.u.dwControlType = lpmlc16->u.dwControlType; mlcA.cControls = lpmlc16->cControls; mlcA.cbmxctrl = sizeof(MIXERCONTROLA); mlcA.pamxctrl = HeapAlloc(GetProcessHeap(), 0, mlcA.cControls * mlcA.cbmxctrl); ret = mixerGetLineControlsA(HMIXEROBJ_32(hmix), &mlcA, fdwControls); if (ret == MMSYSERR_NOERROR) { lpmlc16->dwLineID = mlcA.dwLineID; lpmlc16->u.dwControlID = mlcA.u.dwControlID; lpmlc16->u.dwControlType = mlcA.u.dwControlType; lpmlc16->cControls = mlcA.cControls; lpmc16 = MapSL(lpmlc16->pamxctrl); for (i = 0; i < mlcA.cControls; i++) { lpmc16[i].cbStruct = sizeof(MIXERCONTROL16); lpmc16[i].dwControlID = mlcA.pamxctrl[i].dwControlID; lpmc16[i].dwControlType = mlcA.pamxctrl[i].dwControlType; lpmc16[i].fdwControl = mlcA.pamxctrl[i].fdwControl; lpmc16[i].cMultipleItems = mlcA.pamxctrl[i].cMultipleItems; strcpy(lpmc16[i].szShortName, mlcA.pamxctrl[i].szShortName); strcpy(lpmc16[i].szName, mlcA.pamxctrl[i].szName); /* sizeof(lpmc16[i].Bounds) == sizeof(mlcA.pamxctrl[i].Bounds) */ memcpy(&lpmc16[i].Bounds, &mlcA.pamxctrl[i].Bounds, sizeof(mlcA.pamxctrl[i].Bounds)); /* sizeof(lpmc16[i].Metrics) == sizeof(mlcA.pamxctrl[i].Metrics) */ memcpy(&lpmc16[i].Metrics, &mlcA.pamxctrl[i].Metrics, sizeof(mlcA.pamxctrl[i].Metrics)); } } HeapFree(GetProcessHeap(), 0, mlcA.pamxctrl); return ret; } /************************************************************************** * mixerGetLineInfo [MMSYSTEM.805] */ UINT16 WINAPI mixerGetLineInfo16(HMIXEROBJ16 hmix, LPMIXERLINE16 lpmli16, DWORD fdwInfo) { MIXERLINEA mliA; UINT ret; TRACE("(%04x, %p, %08x)\n", hmix, lpmli16, fdwInfo); if (lpmli16 == NULL || lpmli16->cbStruct != sizeof(*lpmli16)) return MMSYSERR_INVALPARAM; mliA.cbStruct = sizeof(mliA); switch (fdwInfo & MIXER_GETLINEINFOF_QUERYMASK) { case MIXER_GETLINEINFOF_COMPONENTTYPE: mliA.dwComponentType = lpmli16->dwComponentType; break; case MIXER_GETLINEINFOF_DESTINATION: mliA.dwDestination = lpmli16->dwDestination; break; case MIXER_GETLINEINFOF_LINEID: mliA.dwLineID = lpmli16->dwLineID; break; case MIXER_GETLINEINFOF_SOURCE: mliA.dwDestination = lpmli16->dwDestination; mliA.dwSource = lpmli16->dwSource; break; case MIXER_GETLINEINFOF_TARGETTYPE: mliA.Target.dwType = lpmli16->Target.dwType; mliA.Target.wMid = lpmli16->Target.wMid; mliA.Target.wPid = lpmli16->Target.wPid; mliA.Target.vDriverVersion = lpmli16->Target.vDriverVersion; strcpy(mliA.Target.szPname, lpmli16->Target.szPname); break; default: FIXME("Unsupported fdwControls=0x%08x\n", fdwInfo); } ret = mixerGetLineInfoA(HMIXEROBJ_32(hmix), &mliA, fdwInfo); lpmli16->dwDestination = mliA.dwDestination; lpmli16->dwSource = mliA.dwSource; lpmli16->dwLineID = mliA.dwLineID; lpmli16->fdwLine = mliA.fdwLine; lpmli16->dwUser = mliA.dwUser; lpmli16->dwComponentType = mliA.dwComponentType; lpmli16->cChannels = mliA.cChannels; lpmli16->cConnections = mliA.cConnections; lpmli16->cControls = mliA.cControls; strcpy(lpmli16->szShortName, mliA.szShortName); strcpy(lpmli16->szName, mliA.szName); lpmli16->Target.dwType = mliA.Target.dwType; lpmli16->Target.dwDeviceID = mliA.Target.dwDeviceID; lpmli16->Target.wMid = mliA.Target.wMid; lpmli16->Target.wPid = mliA.Target.wPid; lpmli16->Target.vDriverVersion = mliA.Target.vDriverVersion; strcpy(lpmli16->Target.szPname, mliA.Target.szPname); return ret; } /************************************************************************** * mixerSetControlDetails [MMSYSTEM.809] */ UINT16 WINAPI mixerSetControlDetails16(HMIXEROBJ16 hmix, LPMIXERCONTROLDETAILS16 lpmcd, DWORD fdwDetails) { TRACE("(%04x, %p, %08x)\n", hmix, lpmcd, fdwDetails); return MMSYSERR_NOTENABLED; } /************************************************************************** * mixerMessage [MMSYSTEM.804] */ DWORD WINAPI mixerMessage16(HMIXER16 hmix, UINT16 uMsg, DWORD dwParam1, DWORD dwParam2) { return mixerMessage(HMIXER_32(hmix), uMsg, dwParam1, dwParam2); } /* ################################################### * # AUX # * ################################################### */ /************************************************************************** * auxGetNumDevs [MMSYSTEM.350] */ UINT16 WINAPI auxGetNumDevs16(void) { return auxGetNumDevs(); } /************************************************************************** * auxGetDevCaps [MMSYSTEM.351] */ UINT16 WINAPI auxGetDevCaps16(UINT16 uDeviceID, LPAUXCAPS16 lpCaps, UINT16 uSize) { AUXCAPSA acA; UINT ret; if (lpCaps == NULL) return MMSYSERR_INVALPARAM; ret = auxGetDevCapsA(uDeviceID, &acA, sizeof(acA)); if (ret == MMSYSERR_NOERROR) { AUXCAPS16 ac16; ac16.wMid = acA.wMid; ac16.wPid = acA.wPid; ac16.vDriverVersion = acA.vDriverVersion; strcpy(ac16.szPname, acA.szPname); ac16.wTechnology = acA.wTechnology; ac16.dwSupport = acA.dwSupport; memcpy(lpCaps, &ac16, min(uSize, sizeof(ac16))); } return ret; } /************************************************************************** * auxGetVolume [MMSYSTEM.352] */ UINT16 WINAPI auxGetVolume16(UINT16 uDeviceID, LPDWORD lpdwVolume) { return auxGetVolume(uDeviceID, lpdwVolume); } /************************************************************************** * auxSetVolume [MMSYSTEM.353] */ UINT16 WINAPI auxSetVolume16(UINT16 uDeviceID, DWORD dwVolume) { return auxSetVolume(uDeviceID, dwVolume); } /************************************************************************** * auxOutMessage [MMSYSTEM.354] */ DWORD WINAPI auxOutMessage16(UINT16 uDeviceID, UINT16 uMessage, DWORD dw1, DWORD dw2) { TRACE("(%04X, %04X, %08X, %08X)\n", uDeviceID, uMessage, dw1, dw2); switch (uMessage) { case AUXDM_GETNUMDEVS: case AUXDM_SETVOLUME: /* no argument conversion needed */ break; case AUXDM_GETVOLUME: return auxGetVolume(uDeviceID, MapSL(dw1)); case AUXDM_GETDEVCAPS: return auxGetDevCaps16(uDeviceID, MapSL(dw1), dw2); default: TRACE("(%04x, %04x, %08x, %08x): unhandled message\n", uDeviceID, uMessage, dw1, dw2); break; } return auxOutMessage(uDeviceID, uMessage, dw1, dw2); } /* ################################################### * # MIDI # * ################################################### */ /************************************************************************** * midiOutGetNumDevs [MMSYSTEM.201] */ UINT16 WINAPI midiOutGetNumDevs16(void) { return midiOutGetNumDevs(); } /************************************************************************** * midiOutGetDevCaps [MMSYSTEM.202] */ UINT16 WINAPI midiOutGetDevCaps16(UINT16 uDeviceID, LPMIDIOUTCAPS16 lpCaps, UINT16 uSize) { MIDIOUTCAPSA mocA; UINT ret; if (lpCaps == NULL) return MMSYSERR_INVALPARAM; ret = midiOutGetDevCapsA((INT16)uDeviceID, &mocA, sizeof(mocA)); if (ret == MMSYSERR_NOERROR) { MIDIOUTCAPS16 moc16; moc16.wMid = mocA.wMid; moc16.wPid = mocA.wPid; moc16.vDriverVersion = mocA.vDriverVersion; strcpy(moc16.szPname, mocA.szPname); moc16.wTechnology = mocA.wTechnology; moc16.wVoices = mocA.wVoices; moc16.wNotes = mocA.wNotes; moc16.wChannelMask = mocA.wChannelMask; moc16.dwSupport = mocA.dwSupport; memcpy(lpCaps, &moc16, min(uSize, sizeof(moc16))); } return ret; } /************************************************************************** * midiOutGetErrorText [MMSYSTEM.203] * midiInGetErrorText [MMSYSTEM.303] */ UINT16 WINAPI midiOutGetErrorText16(UINT16 uError, LPSTR lpText, UINT16 uSize) { return midiOutGetErrorTextA(uError, lpText, uSize); } /************************************************************************** * midiOutOpen [MMSYSTEM.204] */ UINT16 WINAPI midiOutOpen16(HMIDIOUT16* lphMidiOut, UINT16 uDeviceID, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HMIDIOUT hmo; UINT ret; struct mmsystdrv_thunk* thunk; if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, dwFlags, MMSYSTDRV_MIDIOUT))) { return MMSYSERR_NOMEM; } dwFlags = (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION; ret = midiOutOpen(&hmo, (INT16)uDeviceID, (DWORD)thunk, dwInstance, dwFlags); if (ret == MMSYSERR_NOERROR) { if (lphMidiOut != NULL) *lphMidiOut = HMIDIOUT_16(hmo); MMSYSTDRV_SetHandle(thunk, (void*)hmo); } else MMSYSTDRV_DeleteThunk(thunk); return ret; } /************************************************************************** * midiOutClose [MMSYSTEM.205] */ UINT16 WINAPI midiOutClose16(HMIDIOUT16 hMidiOut) { UINT ret = midiOutClose(HMIDIOUT_32(hMidiOut)); if (ret == MMSYSERR_NOERROR) MMSYSTDRV_CloseHandle((void*)HMIDIOUT_32(hMidiOut)); return ret; } /************************************************************************** * midiOutPrepareHeader [MMSYSTEM.206] */ UINT16 WINAPI midiOutPrepareHeader16(HMIDIOUT16 hMidiOut, /* [in] */ SEGPTR lpsegMidiOutHdr, /* [???] */ UINT16 uSize) /* [in] */ { TRACE("(%04X, %08x, %d)\n", hMidiOut, lpsegMidiOutHdr, uSize); return MMSYSTDRV_Message(HMIDIOUT_32(hMidiOut), MODM_PREPARE, lpsegMidiOutHdr, uSize); } /************************************************************************** * midiOutUnprepareHeader [MMSYSTEM.207] */ UINT16 WINAPI midiOutUnprepareHeader16(HMIDIOUT16 hMidiOut, /* [in] */ SEGPTR lpsegMidiOutHdr, /* [???] */ UINT16 uSize) /* [in] */ { LPMIDIHDR16 lpMidiOutHdr = MapSL(lpsegMidiOutHdr); TRACE("(%04X, %08x, %d)\n", hMidiOut, lpsegMidiOutHdr, uSize); if (!(lpMidiOutHdr->dwFlags & MHDR_PREPARED)) { return MMSYSERR_NOERROR; } return MMSYSTDRV_Message(HMIDIOUT_32(hMidiOut), MODM_UNPREPARE, lpsegMidiOutHdr, uSize); } /************************************************************************** * midiOutShortMsg [MMSYSTEM.208] */ UINT16 WINAPI midiOutShortMsg16(HMIDIOUT16 hMidiOut, DWORD dwMsg) { return midiOutShortMsg(HMIDIOUT_32(hMidiOut), dwMsg); } /************************************************************************** * midiOutLongMsg [MMSYSTEM.209] */ UINT16 WINAPI midiOutLongMsg16(HMIDIOUT16 hMidiOut, /* [in] */ SEGPTR lpsegMidiOutHdr, /* [???] */ UINT16 uSize) /* [in] */ { TRACE("(%04X, %08x, %d)\n", hMidiOut, lpsegMidiOutHdr, uSize); return MMSYSTDRV_Message(HMIDIOUT_32(hMidiOut), MODM_LONGDATA, lpsegMidiOutHdr, uSize); } /************************************************************************** * midiOutReset [MMSYSTEM.210] */ UINT16 WINAPI midiOutReset16(HMIDIOUT16 hMidiOut) { return midiOutReset(HMIDIOUT_32(hMidiOut)); } /************************************************************************** * midiOutGetVolume [MMSYSTEM.211] */ UINT16 WINAPI midiOutGetVolume16(UINT16 uDeviceID, DWORD* lpdwVolume) { return midiOutGetVolume(HMIDIOUT_32(uDeviceID), lpdwVolume); } /************************************************************************** * midiOutSetVolume [MMSYSTEM.212] */ UINT16 WINAPI midiOutSetVolume16(UINT16 uDeviceID, DWORD dwVolume) { return midiOutSetVolume(HMIDIOUT_32(uDeviceID), dwVolume); } /************************************************************************** * midiOutCachePatches [MMSYSTEM.213] */ UINT16 WINAPI midiOutCachePatches16(HMIDIOUT16 hMidiOut, UINT16 uBank, WORD* lpwPatchArray, UINT16 uFlags) { return midiOutCachePatches(HMIDIOUT_32(hMidiOut), uBank, lpwPatchArray, uFlags); } /************************************************************************** * midiOutCacheDrumPatches [MMSYSTEM.214] */ UINT16 WINAPI midiOutCacheDrumPatches16(HMIDIOUT16 hMidiOut, UINT16 uPatch, WORD* lpwKeyArray, UINT16 uFlags) { return midiOutCacheDrumPatches(HMIDIOUT_32(hMidiOut), uPatch, lpwKeyArray, uFlags); } /************************************************************************** * midiOutGetID [MMSYSTEM.215] */ UINT16 WINAPI midiOutGetID16(HMIDIOUT16 hMidiOut, UINT16* lpuDeviceID) { UINT devid; UINT16 ret; ret = midiOutGetID(HMIDIOUT_32(hMidiOut), &devid); if (ret != MMSYSERR_NOERROR) return ret; *lpuDeviceID = devid; return ret; } /************************************************************************** * midiOutMessage [MMSYSTEM.216] */ DWORD WINAPI midiOutMessage16(HMIDIOUT16 hMidiOut, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2) { TRACE("(%04X, %04X, %08X, %08X)\n", hMidiOut, uMessage, dwParam1, dwParam2); switch (uMessage) { case MODM_OPEN: case MODM_CLOSE: FIXME("can't handle OPEN or CLOSE message!\n"); return MMSYSERR_NOTSUPPORTED; case MODM_GETVOLUME: return midiOutGetVolume16(hMidiOut, MapSL(dwParam1)); /* lpMidiOutHdr is still a segmented pointer for these functions */ case MODM_LONGDATA: return midiOutLongMsg16(hMidiOut, dwParam1, dwParam2); case MODM_PREPARE: return midiOutPrepareHeader16(hMidiOut, dwParam1, dwParam2); case MODM_UNPREPARE: return midiOutUnprepareHeader16(hMidiOut, dwParam1, dwParam2); } return MMSYSTDRV_Message(HMIDIOUT_32(hMidiOut), uMessage, dwParam1, dwParam2); } /************************************************************************** * midiInGetNumDevs [MMSYSTEM.301] */ UINT16 WINAPI midiInGetNumDevs16(void) { return midiInGetNumDevs(); } /************************************************************************** * midiInGetDevCaps [MMSYSTEM.302] */ UINT16 WINAPI midiInGetDevCaps16(UINT16 uDeviceID, LPMIDIINCAPS16 lpCaps, UINT16 uSize) { MIDIINCAPSA micA; UINT ret; if (lpCaps == NULL) return MMSYSERR_INVALPARAM; ret = midiInGetDevCapsA(uDeviceID, &micA, uSize); if (ret == MMSYSERR_NOERROR) { MIDIINCAPS16 mic16; mic16.wMid = micA.wMid; mic16.wPid = micA.wPid; mic16.vDriverVersion = micA.vDriverVersion; strcpy(mic16.szPname, micA.szPname); mic16.dwSupport = micA.dwSupport; memcpy(lpCaps, &mic16, min(uSize, sizeof(mic16))); } return ret; } /************************************************************************** * midiInOpen [MMSYSTEM.304] */ UINT16 WINAPI midiInOpen16(HMIDIIN16* lphMidiIn, UINT16 uDeviceID, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HMIDIIN hmid; UINT ret; struct mmsystdrv_thunk* thunk; if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, dwFlags, MMSYSTDRV_MIDIIN))) { return MMSYSERR_NOMEM; } dwFlags = (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION; ret = midiInOpen(&hmid, uDeviceID, (DWORD)thunk, dwInstance, dwFlags); if (ret == MMSYSERR_NOERROR) { if (lphMidiIn) *lphMidiIn = HMIDIIN_16(hmid); MMSYSTDRV_SetHandle(thunk, (void*)hmid); } else MMSYSTDRV_DeleteThunk(thunk); return ret; } /************************************************************************** * midiInClose [MMSYSTEM.305] */ UINT16 WINAPI midiInClose16(HMIDIIN16 hMidiIn) { UINT ret = midiInClose(HMIDIIN_32(hMidiIn)); if (ret == MMSYSERR_NOERROR) MMSYSTDRV_CloseHandle((void*)HMIDIIN_32(hMidiIn)); return ret; } /************************************************************************** * midiInPrepareHeader [MMSYSTEM.306] */ UINT16 WINAPI midiInPrepareHeader16(HMIDIIN16 hMidiIn, /* [in] */ SEGPTR lpsegMidiInHdr, /* [???] */ UINT16 uSize) /* [in] */ { TRACE("(%04X, %08x, %d)\n", hMidiIn, lpsegMidiInHdr, uSize); return MMSYSTDRV_Message(HMIDIIN_32(hMidiIn), MIDM_PREPARE, lpsegMidiInHdr, uSize); } /************************************************************************** * midiInUnprepareHeader [MMSYSTEM.307] */ UINT16 WINAPI midiInUnprepareHeader16(HMIDIIN16 hMidiIn, /* [in] */ SEGPTR lpsegMidiInHdr, /* [???] */ UINT16 uSize) /* [in] */ { LPMIDIHDR16 lpMidiInHdr = MapSL(lpsegMidiInHdr); TRACE("(%04X, %08x, %d)\n", hMidiIn, lpsegMidiInHdr, uSize); if (!(lpMidiInHdr->dwFlags & MHDR_PREPARED)) { return MMSYSERR_NOERROR; } return MMSYSTDRV_Message(HMIDIIN_32(hMidiIn), MIDM_UNPREPARE, lpsegMidiInHdr, uSize); } /************************************************************************** * midiInAddBuffer [MMSYSTEM.308] */ UINT16 WINAPI midiInAddBuffer16(HMIDIIN16 hMidiIn, /* [in] */ SEGPTR lpsegMidiInHdr, /* [???] */ UINT16 uSize) /* [in] */ { TRACE("(%04X, %08x, %d)\n", hMidiIn, lpsegMidiInHdr, uSize); return MMSYSTDRV_Message(HMIDIIN_32(hMidiIn), MIDM_ADDBUFFER, lpsegMidiInHdr, uSize); } /************************************************************************** * midiInStart [MMSYSTEM.309] */ UINT16 WINAPI midiInStart16(HMIDIIN16 hMidiIn) { return midiInStart(HMIDIIN_32(hMidiIn)); } /************************************************************************** * midiInStop [MMSYSTEM.310] */ UINT16 WINAPI midiInStop16(HMIDIIN16 hMidiIn) { return midiInStop(HMIDIIN_32(hMidiIn)); } /************************************************************************** * midiInReset [MMSYSTEM.311] */ UINT16 WINAPI midiInReset16(HMIDIIN16 hMidiIn) { return midiInReset(HMIDIIN_32(hMidiIn)); } /************************************************************************** * midiInGetID [MMSYSTEM.312] */ UINT16 WINAPI midiInGetID16(HMIDIIN16 hMidiIn, UINT16* lpuDeviceID) { UINT devid; UINT16 ret; ret = midiInGetID(HMIDIIN_32(hMidiIn), &devid); if (ret != MMSYSERR_NOERROR) return ret; *lpuDeviceID = devid; return ret; } /************************************************************************** * midiInMessage [MMSYSTEM.313] */ DWORD WINAPI midiInMessage16(HMIDIIN16 hMidiIn, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2) { TRACE("(%04X, %04X, %08X, %08X)\n", hMidiIn, uMessage, dwParam1, dwParam2); switch (uMessage) { case MIDM_OPEN: case MIDM_CLOSE: FIXME("can't handle OPEN or CLOSE message!\n"); return MMSYSERR_NOTSUPPORTED; case MIDM_GETDEVCAPS: return midiInGetDevCaps16(hMidiIn, MapSL(dwParam1), dwParam2); case MIDM_PREPARE: return midiInPrepareHeader16(hMidiIn, dwParam1, dwParam2); case MIDM_UNPREPARE: return midiInUnprepareHeader16(hMidiIn, dwParam1, dwParam2); case MIDM_ADDBUFFER: return midiInAddBuffer16(hMidiIn, dwParam1, dwParam2); } return MMSYSTDRV_Message(HMIDIIN_32(hMidiIn), uMessage, dwParam1, dwParam2); } /************************************************************************** * midiStreamClose [MMSYSTEM.252] */ MMRESULT16 WINAPI midiStreamClose16(HMIDISTRM16 hMidiStrm) { UINT ret = midiStreamClose(HMIDISTRM_32(hMidiStrm)); if (ret == MMSYSERR_NOERROR) MMSYSTDRV_CloseHandle((void*)HMIDISTRM_32(hMidiStrm)); return ret; } /************************************************************************** * midiStreamOpen [MMSYSTEM.251] */ MMRESULT16 WINAPI midiStreamOpen16(HMIDISTRM16* phMidiStrm, LPUINT16 devid, DWORD cMidi, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen) { HMIDISTRM hMidiStrm32; MMRESULT ret; UINT devid32; struct mmsystdrv_thunk* thunk; if (!phMidiStrm || !devid) return MMSYSERR_INVALPARAM; devid32 = *devid; if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, fdwOpen, MMSYSTDRV_MIDIOUT))) { return MMSYSERR_NOMEM; } fdwOpen = (fdwOpen & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION; ret = midiStreamOpen(&hMidiStrm32, &devid32, cMidi, (DWORD)thunk, dwInstance, fdwOpen); if (ret == MMSYSERR_NOERROR) { *phMidiStrm = HMIDISTRM_16(hMidiStrm32); *devid = devid32; MMSYSTDRV_SetHandle(thunk, hMidiStrm32); } else MMSYSTDRV_DeleteThunk(thunk); return ret; } /************************************************************************** * midiStreamOut [MMSYSTEM.254] */ MMRESULT16 WINAPI midiStreamOut16(HMIDISTRM16 hMidiStrm, LPMIDIHDR16 lpMidiHdr, UINT16 cbMidiHdr) { return midiStreamOut(HMIDISTRM_32(hMidiStrm), (LPMIDIHDR)lpMidiHdr, cbMidiHdr); } /************************************************************************** * midiStreamPause [MMSYSTEM.255] */ MMRESULT16 WINAPI midiStreamPause16(HMIDISTRM16 hMidiStrm) { return midiStreamPause(HMIDISTRM_32(hMidiStrm)); } /************************************************************************** * midiStreamPosition [MMSYSTEM.253] */ MMRESULT16 WINAPI midiStreamPosition16(HMIDISTRM16 hMidiStrm, LPMMTIME16 lpmmt16, UINT16 cbmmt) { MMTIME mmt32; MMRESULT ret; if (!lpmmt16) return MMSYSERR_INVALPARAM; mmt32.wType = lpmmt16->wType; ret = midiStreamPosition(HMIDISTRM_32(hMidiStrm), &mmt32, sizeof(MMTIME)); MMSYSTEM_MMTIME32to16(lpmmt16, &mmt32); return ret; } /************************************************************************** * midiStreamProperty [MMSYSTEM.250] */ MMRESULT16 WINAPI midiStreamProperty16(HMIDISTRM16 hMidiStrm, LPBYTE lpPropData, DWORD dwProperty) { return midiStreamProperty(HMIDISTRM_32(hMidiStrm), lpPropData, dwProperty); } /************************************************************************** * midiStreamRestart [MMSYSTEM.256] */ MMRESULT16 WINAPI midiStreamRestart16(HMIDISTRM16 hMidiStrm) { return midiStreamRestart(HMIDISTRM_32(hMidiStrm)); } /************************************************************************** * midiStreamStop [MMSYSTEM.257] */ MMRESULT16 WINAPI midiStreamStop16(HMIDISTRM16 hMidiStrm) { return midiStreamStop(HMIDISTRM_32(hMidiStrm)); } /* ################################################### * # WAVE # * ################################################### */ /************************************************************************** * waveOutGetNumDevs [MMSYSTEM.401] */ UINT16 WINAPI waveOutGetNumDevs16(void) { return waveOutGetNumDevs(); } /************************************************************************** * waveOutGetDevCaps [MMSYSTEM.402] */ UINT16 WINAPI waveOutGetDevCaps16(UINT16 uDeviceID, LPWAVEOUTCAPS16 lpCaps, UINT16 uSize) { WAVEOUTCAPSA wocA; UINT ret; TRACE("(%u %p %u)!\n", uDeviceID, lpCaps, uSize); if (lpCaps == NULL) return MMSYSERR_INVALPARAM; ret = waveOutGetDevCapsA(uDeviceID, &wocA, sizeof(wocA)); if (ret == MMSYSERR_NOERROR) { WAVEOUTCAPS16 woc16; woc16.wMid = wocA.wMid; woc16.wPid = wocA.wPid; woc16.vDriverVersion = wocA.vDriverVersion; strcpy(woc16.szPname, wocA.szPname); woc16.dwFormats = wocA.dwFormats; woc16.wChannels = wocA.wChannels; woc16.dwSupport = wocA.dwSupport; memcpy(lpCaps, &woc16, min(uSize, sizeof(woc16))); } return ret; } /************************************************************************** * waveOutGetErrorText [MMSYSTEM.403] * waveInGetErrorText [MMSYSTEM.503] */ UINT16 WINAPI waveOutGetErrorText16(UINT16 uError, LPSTR lpText, UINT16 uSize) { return waveOutGetErrorTextA(uError, lpText, uSize); } static void init_wfx_adpcm(ADPCMWAVEFORMAT* awfx) { register WAVEFORMATEX* pwfx = &awfx->wfx; static ADPCMCOEFSET MSADPCM_CoeffSet[] = { {256, 0}, {512, -256}, {0, 0}, {192, 64}, {240, 0}, {460, -208}, {392, -232} }; /* we assume wFormatTag, nChannels, nSamplesPerSec and wBitsPerSample * have been initialized... */ switch (pwfx->nSamplesPerSec) { case 8000: pwfx->nBlockAlign = 256 * pwfx->nChannels; break; case 11025: pwfx->nBlockAlign = 256 * pwfx->nChannels; break; case 22050: pwfx->nBlockAlign = 512 * pwfx->nChannels; break; case 44100: pwfx->nBlockAlign = 1024 * pwfx->nChannels; break; default: break; } pwfx->cbSize = 2 * sizeof(WORD) + 7 * sizeof(ADPCMCOEFSET); /* 7 is the size of the block head (which contains two samples) */ awfx->wSamplesPerBlock = pwfx->nBlockAlign * 2 / pwfx->nChannels - 12; pwfx->nAvgBytesPerSec = (pwfx->nSamplesPerSec * pwfx->nBlockAlign) / awfx->wSamplesPerBlock; awfx->wNumCoef = 7; memcpy(awfx->aCoef, MSADPCM_CoeffSet, 7 * sizeof(ADPCMCOEFSET)); } /************************************************************************** * waveOutOpen [MMSYSTEM.404] */ UINT16 WINAPI waveOutOpen16(HWAVEOUT16* lphWaveOut, UINT16 uDeviceID, LPCWAVEFORMATEX lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HWAVEOUT hWaveOut; UINT ret; struct mmsystdrv_thunk* thunk; WAVEFORMATEX *wavefmt; WORD size = lpFormat->wFormatTag == WAVE_FORMAT_PCM ? 0 : lpFormat->cbSize; wavefmt = (WAVEFORMATEX *)HeapAlloc(GetProcessHeap(), 0, sizeof(WAVEFORMATEX) + size); memcpy(wavefmt, lpFormat, sizeof(WAVEFORMATEX) + size); if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, dwFlags, MMSYSTDRV_WAVEOUT))) { return MMSYSERR_NOMEM; } if ((dwFlags & CALLBACK_TYPEMASK) == CALLBACK_WINDOW) { if (!IsWindow(HWND_32(dwCallback))) { return MMSYSERR_INVALPARAM; } } dwFlags = (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION; /* since layout of WAVEFORMATEX is the same for 16/32 bits, we directly * call the 32 bit version * however, we need to promote correctly the wave mapper id * (0xFFFFFFFF and not 0x0000FFFF) */ if (wavefmt->wFormatTag == WAVE_FORMAT_ADPCM) init_wfx_adpcm((ADPCMWAVEFORMAT*) wavefmt); ret = waveOutOpen(&hWaveOut, (uDeviceID == (UINT16)-1) ? (UINT)-1 : uDeviceID, wavefmt, (DWORD)thunk, dwInstance, dwFlags); if (ret == MMSYSERR_NOERROR && !(dwFlags & WAVE_FORMAT_QUERY)) { MMSYSTDRV_SetHandle(thunk, (void*)hWaveOut); if (lphWaveOut != NULL) *lphWaveOut = HWAVEOUT_16(hWaveOut); } else MMSYSTDRV_DeleteThunk(thunk); HeapFree(GetProcessHeap(), 0, wavefmt); return ret; } /************************************************************************** * waveOutClose [MMSYSTEM.405] */ UINT16 WINAPI waveOutClose16(HWAVEOUT16 hWaveOut) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveOutClose(HWAVEOUT_32(hWaveOut)); RestoreThunkLock(level); if (ret == MMSYSERR_NOERROR) MMSYSTDRV_CloseHandle((void*)HWAVEOUT_32(hWaveOut)); return ret; } /************************************************************************** * waveOutPrepareHeader [MMSYSTEM.406] */ UINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16 hWaveOut, /* [in] */ SEGPTR lpsegWaveOutHdr, /* [???] */ UINT16 uSize) /* [in] */ { TRACE("(%04X, %08x, %u);\n", hWaveOut, lpsegWaveOutHdr, uSize); if (lpsegWaveOutHdr == 0) return MMSYSERR_INVALPARAM; return MMSYSTDRV_Message(HWAVEOUT_32(hWaveOut), WODM_PREPARE, lpsegWaveOutHdr, uSize); } /************************************************************************** * waveOutUnprepareHeader [MMSYSTEM.407] */ UINT16 WINAPI waveOutUnprepareHeader16(HWAVEOUT16 hWaveOut, /* [in] */ SEGPTR lpsegWaveOutHdr, /* [???] */ UINT16 uSize) /* [in] */ { LPWAVEHDR lpWaveOutHdr = MapSL(lpsegWaveOutHdr); TRACE("(%04X, %08x, %u);\n", hWaveOut, lpsegWaveOutHdr, uSize); if (!(lpWaveOutHdr->dwFlags & WHDR_PREPARED)) { return MMSYSERR_NOERROR; } return MMSYSTDRV_Message(HWAVEOUT_32(hWaveOut), WODM_UNPREPARE, lpsegWaveOutHdr, uSize); } /************************************************************************** * waveOutWrite [MMSYSTEM.408] */ UINT16 WINAPI waveOutWrite16(HWAVEOUT16 hWaveOut, /* [in] */ SEGPTR lpsegWaveOutHdr, /* [???] */ UINT16 uSize) /* [in] */ { TRACE("(%04X, %08x, %u);\n", hWaveOut, lpsegWaveOutHdr, uSize); return MMSYSTDRV_Message(HWAVEOUT_32(hWaveOut), WODM_WRITE, lpsegWaveOutHdr, uSize); } /************************************************************************** * waveOutBreakLoop [MMSYSTEM.419] */ UINT16 WINAPI waveOutBreakLoop16(HWAVEOUT16 hWaveOut16) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveOutBreakLoop(HWAVEOUT_32(hWaveOut16)); RestoreThunkLock(level); return ret; } /************************************************************************** * waveOutPause [MMSYSTEM.409] */ UINT16 WINAPI waveOutPause16(HWAVEOUT16 hWaveOut16) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveOutPause(HWAVEOUT_32(hWaveOut16)); RestoreThunkLock(level); return ret; } /************************************************************************** * waveOutReset [MMSYSTEM.411] */ UINT16 WINAPI waveOutReset16(HWAVEOUT16 hWaveOut16) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveOutReset(HWAVEOUT_32(hWaveOut16)); RestoreThunkLock(level); return ret; } /************************************************************************** * waveOutRestart [MMSYSTEM.410] */ UINT16 WINAPI waveOutRestart16(HWAVEOUT16 hWaveOut16) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveOutRestart(HWAVEOUT_32(hWaveOut16)); RestoreThunkLock(level); return ret; } /************************************************************************** * waveOutGetPosition [MMSYSTEM.412] */ UINT16 WINAPI waveOutGetPosition16(HWAVEOUT16 hWaveOut, LPMMTIME16 lpTime, UINT16 uSize) { DWORD level; UINT ret; MMTIME mmt; mmt.wType = lpTime->wType; ReleaseThunkLock(&level); ret = waveOutGetPosition(HWAVEOUT_32(hWaveOut), &mmt, sizeof(mmt)); RestoreThunkLock(level); MMSYSTEM_MMTIME32to16(lpTime, &mmt); return ret; } /************************************************************************** * waveOutGetPitch [MMSYSTEM.413] */ UINT16 WINAPI waveOutGetPitch16(HWAVEOUT16 hWaveOut16, LPDWORD lpdw) { return waveOutGetPitch(HWAVEOUT_32(hWaveOut16), lpdw); } /************************************************************************** * waveOutSetPitch [MMSYSTEM.414] */ UINT16 WINAPI waveOutSetPitch16(HWAVEOUT16 hWaveOut16, DWORD dw) { return waveOutSetPitch(HWAVEOUT_32(hWaveOut16), dw); } /************************************************************************** * waveOutGetPlaybackRate [MMSYSTEM.417] */ UINT16 WINAPI waveOutGetPlaybackRate16(HWAVEOUT16 hWaveOut16, LPDWORD lpdw) { return waveOutGetPlaybackRate(HWAVEOUT_32(hWaveOut16), lpdw); } /************************************************************************** * waveOutSetPlaybackRate [MMSYSTEM.418] */ UINT16 WINAPI waveOutSetPlaybackRate16(HWAVEOUT16 hWaveOut16, DWORD dw) { return waveOutSetPlaybackRate(HWAVEOUT_32(hWaveOut16), dw); } /************************************************************************** * waveOutGetVolume [MMSYSTEM.415] */ UINT16 WINAPI waveOutGetVolume16(UINT16 devid, LPDWORD lpdw) { return waveOutGetVolume(HWAVEOUT_32(devid), lpdw); } /************************************************************************** * waveOutSetVolume [MMSYSTEM.416] */ UINT16 WINAPI waveOutSetVolume16(UINT16 devid, DWORD dw) { return waveOutSetVolume(HWAVEOUT_32(devid), dw); } /************************************************************************** * waveOutGetID [MMSYSTEM.420] */ UINT16 WINAPI waveOutGetID16(HWAVEOUT16 hWaveOut, UINT16* lpuDeviceID) { UINT devid; UINT16 ret; ret = waveOutGetID(HWAVEOUT_32(hWaveOut), &devid); if (ret != MMSYSERR_NOERROR) return ret; *lpuDeviceID = devid; return ret; } /************************************************************************** * waveOutMessage [MMSYSTEM.421] */ DWORD WINAPI waveOutMessage16(HWAVEOUT16 hWaveOut, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2) { TRACE("(%04x, %u, %d, %d)\n", hWaveOut, uMessage, dwParam1, dwParam2); if ((DWORD_PTR)hWaveOut < waveOutGetNumDevs()) { if (uMessage == DRV_QUERYDRVENTRY || uMessage == DRV_QUERYDEVNODE) dwParam1 = (DWORD)MapSL(dwParam1); } else if (uMessage < DRVM_IOCTL || (uMessage >= DRVM_IOCTL_LAST && uMessage < DRVM_MAPPER)) /* from M$ KB */ return MMSYSERR_INVALPARAM; return MMSYSTDRV_Message(HWAVEOUT_32(hWaveOut), uMessage, dwParam1, dwParam2); } /************************************************************************** * waveInGetNumDevs [MMSYSTEM.501] */ UINT16 WINAPI waveInGetNumDevs16(void) { return waveInGetNumDevs(); } /************************************************************************** * waveInGetDevCaps [MMSYSTEM.502] */ UINT16 WINAPI waveInGetDevCaps16(UINT16 uDeviceID, LPWAVEINCAPS16 lpCaps, UINT16 uSize) { WAVEINCAPSA wicA; UINT ret; if (lpCaps == NULL) return MMSYSERR_INVALPARAM; ret = waveInGetDevCapsA(uDeviceID, &wicA, sizeof(wicA)); if (ret == MMSYSERR_NOERROR) { WAVEINCAPS16 wic16; wic16.wMid = wicA.wMid; wic16.wPid = wicA.wPid; wic16.vDriverVersion = wicA.vDriverVersion; strcpy(wic16.szPname, wicA.szPname); wic16.dwFormats = wicA.dwFormats; wic16.wChannels = wicA.wChannels; memcpy(lpCaps, &wic16, min(uSize, sizeof(wic16))); } return ret; } /************************************************************************** * waveInOpen [MMSYSTEM.504] */ UINT16 WINAPI waveInOpen16(HWAVEIN16* lphWaveIn, UINT16 uDeviceID, LPCWAVEFORMATEX lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags) { HWAVEIN hWaveIn; UINT ret; struct mmsystdrv_thunk* thunk; if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, dwFlags, MMSYSTDRV_WAVEIN))) { return MMSYSERR_NOMEM; } dwFlags = (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION; /* since layout of WAVEFORMATEX is the same for 16/32 bits, we directly * call the 32 bit version * however, we need to promote correctly the wave mapper id * (0xFFFFFFFF and not 0x0000FFFF) */ ret = waveInOpen(&hWaveIn, (uDeviceID == (UINT16)-1) ? (UINT)-1 : uDeviceID, lpFormat, (DWORD)thunk, dwInstance, dwFlags); if (ret == MMSYSERR_NOERROR && !(dwFlags & WAVE_FORMAT_QUERY)) { MMSYSTDRV_SetHandle(thunk, (void*)hWaveIn); if (lphWaveIn != NULL) *lphWaveIn = HWAVEOUT_16(hWaveIn); } else MMSYSTDRV_DeleteThunk(thunk); return ret; } /************************************************************************** * waveInClose [MMSYSTEM.505] */ UINT16 WINAPI waveInClose16(HWAVEIN16 hWaveIn) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveInClose(HWAVEIN_32(hWaveIn)); RestoreThunkLock(level); if (ret == MMSYSERR_NOERROR) MMSYSTDRV_CloseHandle((void*)HWAVEIN_32(hWaveIn)); return ret; } /************************************************************************** * waveInPrepareHeader [MMSYSTEM.506] */ UINT16 WINAPI waveInPrepareHeader16(HWAVEIN16 hWaveIn, /* [in] */ SEGPTR lpsegWaveInHdr, /* [???] */ UINT16 uSize) /* [in] */ { LPWAVEHDR lpWaveInHdr = MapSL(lpsegWaveInHdr); TRACE("(%04X, %p, %u);\n", hWaveIn, lpWaveInHdr, uSize); if (lpWaveInHdr == NULL) return MMSYSERR_INVALHANDLE; return MMSYSTDRV_Message(HWAVEIN_32(hWaveIn), WIDM_PREPARE, lpsegWaveInHdr, uSize); } /************************************************************************** * waveInUnprepareHeader [MMSYSTEM.507] */ UINT16 WINAPI waveInUnprepareHeader16(HWAVEIN16 hWaveIn, /* [in] */ SEGPTR lpsegWaveInHdr, /* [???] */ UINT16 uSize) /* [in] */ { LPWAVEHDR lpWaveInHdr = MapSL(lpsegWaveInHdr); TRACE("(%04X, %08x, %u);\n", hWaveIn, lpsegWaveInHdr, uSize); if (lpWaveInHdr == NULL) return MMSYSERR_INVALPARAM; if (!(lpWaveInHdr->dwFlags & WHDR_PREPARED)) { return MMSYSERR_NOERROR; } return MMSYSTDRV_Message(HWAVEIN_32(hWaveIn), WIDM_UNPREPARE, lpsegWaveInHdr, uSize); } /************************************************************************** * waveInAddBuffer [MMSYSTEM.508] */ UINT16 WINAPI waveInAddBuffer16(HWAVEIN16 hWaveIn, /* [in] */ SEGPTR lpsegWaveInHdr, /* [???] */ UINT16 uSize) /* [in] */ { TRACE("(%04X, %08x, %u);\n", hWaveIn, lpsegWaveInHdr, uSize); if (lpsegWaveInHdr == 0) return MMSYSERR_INVALPARAM; return MMSYSTDRV_Message(HWAVEIN_32(hWaveIn), WIDM_ADDBUFFER, lpsegWaveInHdr, uSize); } /************************************************************************** * waveInReset [MMSYSTEM.511] */ UINT16 WINAPI waveInReset16(HWAVEIN16 hWaveIn16) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveInReset(HWAVEIN_32(hWaveIn16)); RestoreThunkLock(level); return ret; } /************************************************************************** * waveInStart [MMSYSTEM.509] */ UINT16 WINAPI waveInStart16(HWAVEIN16 hWaveIn16) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveInStart(HWAVEIN_32(hWaveIn16)); RestoreThunkLock(level); return ret; } /************************************************************************** * waveInStop [MMSYSTEM.510] */ UINT16 WINAPI waveInStop16(HWAVEIN16 hWaveIn16) { DWORD level; UINT16 ret; ReleaseThunkLock(&level); ret = waveInStop(HWAVEIN_32(hWaveIn16)); RestoreThunkLock(level); return ret; } /************************************************************************** * waveInGetPosition [MMSYSTEM.512] */ UINT16 WINAPI waveInGetPosition16(HWAVEIN16 hWaveIn, LPMMTIME16 lpTime, UINT16 uSize) { UINT ret; MMTIME mmt; mmt.wType = lpTime->wType; ret = waveInGetPosition(HWAVEIN_32(hWaveIn), &mmt, sizeof(mmt)); MMSYSTEM_MMTIME32to16(lpTime, &mmt); return ret; } /************************************************************************** * waveInGetID [MMSYSTEM.513] */ UINT16 WINAPI waveInGetID16(HWAVEIN16 hWaveIn, UINT16* lpuDeviceID) { UINT devid; UINT16 ret; ret = waveInGetID(HWAVEIN_32(hWaveIn), &devid); if (ret != MMSYSERR_NOERROR) return ret; *lpuDeviceID = devid; return ret; } /************************************************************************** * waveInMessage [MMSYSTEM.514] */ DWORD WINAPI waveInMessage16(HWAVEIN16 hWaveIn, UINT16 uMessage, DWORD dwParam1, DWORD dwParam2) { TRACE("(%04x, %u, %d, %d)\n", hWaveIn, uMessage, dwParam1, dwParam2); if ((DWORD_PTR)hWaveIn < waveInGetNumDevs()) { if (uMessage == DRV_QUERYDRVENTRY || uMessage == DRV_QUERYDEVNODE) dwParam1 = (DWORD)MapSL(dwParam1); } else if (uMessage < DRVM_IOCTL || (uMessage >= DRVM_IOCTL_LAST && uMessage < DRVM_MAPPER)) /* from M$ KB */ return MMSYSERR_INVALPARAM; return MMSYSTDRV_Message(HWAVEIN_32(hWaveIn), uMessage, dwParam1, dwParam2); } /* ################################################### * # TASK # * ################################################### */ /*#define USE_MM_TSK_WINE*/ /************************************************************************** * mmTaskCreate [MMSYSTEM.900] * * Creates a 16 bit MM task. Its entry point is lpFunc, and it should be * called upon creation with dwPmt as parameter. */ HINSTANCE16 WINAPI mmTaskCreate16(SEGPTR spProc, HINSTANCE16 *lphMmTask, DWORD dwPmt) { HINSTANCE16 ret; HINSTANCE16 handle; char cmdline[16]; DWORD showCmd = 0x40002; LOADPARAMS16 lp; TRACE("(%08x, %p, %08x);\n", spProc, lphMmTask, dwPmt); /* This to work requires NE modules to be started with a binary command line * which is not currently the case. A patch exists but has never been committed. * A workaround would be to integrate code for mmtask.tsk into Wine, but * this requires tremendous work (starting with patching tools/build to * create NE executables (and not only DLLs) for builtins modules. * EP 99/04/25 */ FIXME("This is currently broken. It will fail\n"); cmdline[0] = 0x0d; *(LPDWORD)(cmdline + 1) = (DWORD)spProc; *(LPDWORD)(cmdline + 5) = dwPmt; *(LPDWORD)(cmdline + 9) = 0; lp.hEnvironment = 0; lp.cmdLine = MapLS(cmdline); lp.showCmd = MapLS(&showCmd); lp.reserved = 0; #ifndef USE_MM_TSK_WINE handle = LoadModule16("c:\\windows\\system\\mmtask.tsk", &lp); #else handle = LoadModule16("mmtask.tsk", &lp); #endif if (handle < 32) { ret = (handle) ? 1 : 2; handle = 0; } else { ret = 0; } if (lphMmTask) *lphMmTask = handle; UnMapLS( lp.cmdLine ); UnMapLS( lp.showCmd ); TRACE("=> 0x%04x/%d\n", handle, ret); return ret; } #ifdef USE_MM_TSK_WINE /* C equivalent to mmtask.tsk binary content */ void mmTaskEntryPoint16(LPSTR cmdLine, WORD di, WORD si) { int len = cmdLine[0x80]; if (len / 2 == 6) { void (*fpProc)(DWORD) = MapSL(*((DWORD*)(cmdLine + 1))); DWORD dwPmt = *((DWORD*)(cmdLine + 5)); #if 0 InitTask16(); /* FIXME: pmts / from context ? */ InitApp(di); #endif if (SetMessageQueue16(0x40)) { WaitEvent16(0); if (HIWORD(fpProc)) { OldYield16(); /* EPP StackEnter16(); */ (fpProc)(dwPmt); } } } OldYield16(); OldYield16(); OldYield16(); ExitProcess(0); } #endif /************************************************************************** * mmTaskBlock [MMSYSTEM.902] */ void WINAPI mmTaskBlock16(HINSTANCE16 hInst) { MSG msg; do { GetMessageA(&msg, 0, 0, 0); if (msg.hwnd) { TranslateMessage(&msg); DispatchMessageA(&msg); } } while (msg.message < 0x3A0); } /************************************************************************** * mmTaskSignal [MMSYSTEM.903] */ LRESULT WINAPI mmTaskSignal16(HTASK16 ht) { TRACE("(%04x);\n", ht); return PostThreadMessageW( HTASK_32(ht), WM_USER, 0, 0 ); } /************************************************************************** * mmGetCurrentTask [MMSYSTEM.904] */ HTASK16 WINAPI mmGetCurrentTask16(void) { return GetCurrentTask(); } /************************************************************************** * mmTaskYield [MMSYSTEM.905] */ void WINAPI mmTaskYield16(void) { MSG msg; if (PeekMessageA(&msg, 0, 0, 0, 0)) { WOWYield16(); } } /****************************************************************** * WINMM_GetmmThread * * */ static WINE_MMTHREAD* WINMM_GetmmThread(HANDLE16 h) { return MapSL(MAKESEGPTR(h, 0)); } static void MMSYSTEM_ThreadBlock(WINE_MMTHREAD* lpMMThd) { MSG msg; DWORD ret; if (lpMMThd->dwThreadID != GetCurrentThreadId()) ERR("Not called by thread itself\n"); for (;;) { ResetEvent(lpMMThd->hEvent); if (InterlockedDecrement(&lpMMThd->dwSignalCount) >= 0) break; InterlockedIncrement(&lpMMThd->dwSignalCount); TRACE("S1\n"); ret = MsgWaitForMultipleObjects(1, &lpMMThd->hEvent, FALSE, INFINITE, QS_ALLINPUT); switch (ret) { case WAIT_OBJECT_0: /* Event */ TRACE("S2.1\n"); break; case WAIT_OBJECT_0 + 1: /* Msg */ TRACE("S2.2\n"); if (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessageA(&msg); } break; default: WARN("S2.x unsupported ret val 0x%08x\n", ret); } TRACE("S3\n"); } } /************************************************************************** * mmThreadBlock [MMSYSTEM.1122] */ void WINAPI mmThreadBlock16(HANDLE16 hndl) { TRACE("(%04x)!\n", hndl); if (hndl) { WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); if (lpMMThd->hThread != 0) { DWORD lc; ReleaseThunkLock(&lc); MMSYSTEM_ThreadBlock(lpMMThd); RestoreThunkLock(lc); } else { mmTaskBlock16(lpMMThd->hTask); } } TRACE("done\n"); } /************************************************************************** * __wine_mmThreadEntryPoint (MMSYSTEM.2047) */ DWORD WINAPI WINE_mmThreadEntryPoint(LPVOID p) { HANDLE16 hndl = (HANDLE16)(DWORD_PTR)p; WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); TRACE("(%04x %p)\n", hndl, lpMMThd); lpMMThd->hTask = LOWORD(GetCurrentTask()); TRACE("[10-%p] setting hTask to 0x%08x\n", lpMMThd->hThread, lpMMThd->hTask); lpMMThd->dwStatus = 0x10; MMSYSTEM_ThreadBlock(lpMMThd); TRACE("[20-%p]\n", lpMMThd->hThread); lpMMThd->dwStatus = 0x20; if (lpMMThd->fpThread) { WOWCallback16(lpMMThd->fpThread, lpMMThd->dwThreadPmt); } lpMMThd->dwStatus = 0x30; TRACE("[30-%p]\n", lpMMThd->hThread); while (lpMMThd->dwCounter) { Sleep(1); /* WOWYield16();*/ } TRACE("[XX-%p]\n", lpMMThd->hThread); /* paranoia */ lpMMThd->dwSignature = WINE_MMTHREAD_DELETED; /* close lpMMThread->hVxD directIO */ if (lpMMThd->hEvent) CloseHandle(lpMMThd->hEvent); GlobalFree16(hndl); TRACE("done\n"); return 0; } extern DWORD WINAPI GetProcessFlags(DWORD); /************************************************************************** * mmThreadCreate [MMSYSTEM.1120] * * undocumented * Creates a MM thread, calling fpThreadAddr(dwPmt). * dwFlags: * bit.0 set means create a 16 bit task instead of thread calling a 16 bit proc * bit.1 set means to open a VxD for this thread (unsupported) */ LRESULT WINAPI mmThreadCreate16(FARPROC16 fpThreadAddr, LPHANDLE16 lpHndl, DWORD dwPmt, DWORD dwFlags) { HANDLE16 hndl; LRESULT ret; TRACE("(%p, %p, %08x, %08x)!\n", fpThreadAddr, lpHndl, dwPmt, dwFlags); hndl = GlobalAlloc16(GMEM_SHARE|GMEM_ZEROINIT, sizeof(WINE_MMTHREAD)); if (hndl == 0) { ret = 2; } else { WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); #if 0 /* force mmtask routines even if mmthread is required */ /* this will work only if the patch about binary cmd line and NE tasks * is committed */ dwFlags |= 1; #endif lpMMThd->dwSignature = WINE_MMTHREAD_CREATED; lpMMThd->dwCounter = 0; lpMMThd->hThread = 0; lpMMThd->dwThreadID = 0; lpMMThd->fpThread = (DWORD)fpThreadAddr; lpMMThd->dwThreadPmt = dwPmt; lpMMThd->dwSignalCount = 0; lpMMThd->hEvent = 0; lpMMThd->hVxD = 0; lpMMThd->dwStatus = 0; lpMMThd->dwFlags = dwFlags; lpMMThd->hTask = 0; if ((dwFlags & 1) == 0 && (GetProcessFlags(GetCurrentThreadId()) & 8) == 0) { lpMMThd->hEvent = CreateEventW(NULL, FALSE, TRUE, NULL); TRACE("Let's go crazy... trying new MM thread. lpMMThd=%p\n", lpMMThd); if (lpMMThd->dwFlags & 2) { /* as long as we don't support MM VxD in wine, we don't need * to care about this flag */ /* FIXME("Don't know how to properly open VxD handles\n"); */ /* lpMMThd->hVxD = OpenVxDHandle(lpMMThd->hEvent); */ } lpMMThd->hThread = CreateThread(0, 0, WINE_mmThreadEntryPoint, (LPVOID)(DWORD_PTR)hndl, CREATE_SUSPENDED, &lpMMThd->dwThreadID); if (lpMMThd->hThread == 0) { WARN("Couldn't create thread\n"); /* clean-up(VxDhandle...); devicedirectio... */ if (lpMMThd->hEvent != 0) CloseHandle(lpMMThd->hEvent); ret = 2; } else { SetThreadPriority(lpMMThd->hThread, THREAD_PRIORITY_TIME_CRITICAL); TRACE("Got a nice thread hndl=%p id=0x%08x\n", lpMMThd->hThread, lpMMThd->dwThreadID); ret = 0; } } else { /* get WINE_mmThreadEntryPoint() * 2047 is its ordinal in mmsystem.spec */ FARPROC16 fp = GetProcAddress16(GetModuleHandle16("MMSYSTEM"), (LPCSTR)2047); TRACE("farproc seg=0x%p lin=%p\n", fp, MapSL((SEGPTR)fp)); ret = (fp == 0) ? 2 : mmTaskCreate16((DWORD)fp, 0, hndl); } if (ret == 0) { if (lpMMThd->hThread && !ResumeThread(lpMMThd->hThread)) WARN("Couldn't resume thread\n"); while (lpMMThd->dwStatus != 0x10) { /* test also HIWORD of dwStatus */ MSG msg; PeekMessageW( &msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE ); } } } if (ret != 0) { GlobalFree16(hndl); hndl = 0; } if (lpHndl) *lpHndl = hndl; TRACE("ok => %ld\n", ret); return ret; } /************************************************************************** * mmThreadSignal [MMSYSTEM.1121] */ void WINAPI mmThreadSignal16(HANDLE16 hndl) { TRACE("(%04x)!\n", hndl); if (hndl) { WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); lpMMThd->dwCounter++; if (lpMMThd->hThread != 0) { InterlockedIncrement(&lpMMThd->dwSignalCount); SetEvent(lpMMThd->hEvent); } else { mmTaskSignal16(lpMMThd->hTask); } lpMMThd->dwCounter--; } } /************************************************************************** * mmThreadIsCurrent [MMSYSTEM.1123] */ BOOL16 WINAPI mmThreadIsCurrent16(HANDLE16 hndl) { BOOL16 ret = FALSE; TRACE("(%04x)!\n", hndl); if (hndl && mmThreadIsValid16(hndl)) { WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); ret = (GetCurrentThreadId() == lpMMThd->dwThreadID); } TRACE("=> %d\n", ret); return ret; } /************************************************************************** * mmThreadIsValid [MMSYSTEM.1124] */ BOOL16 WINAPI mmThreadIsValid16(HANDLE16 hndl) { BOOL16 ret = FALSE; TRACE("(%04x)!\n", hndl); if (hndl) { WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); if (!IsBadWritePtr(lpMMThd, sizeof(WINE_MMTHREAD)) && lpMMThd->dwSignature == WINE_MMTHREAD_CREATED && IsTask16(lpMMThd->hTask)) { lpMMThd->dwCounter++; if (lpMMThd->hThread != 0) { DWORD dwThreadRet; if (GetExitCodeThread(lpMMThd->hThread, &dwThreadRet) && dwThreadRet == STATUS_PENDING) { ret = TRUE; } } else { ret = TRUE; } lpMMThd->dwCounter--; } } TRACE("=> %d\n", ret); return ret; } /************************************************************************** * mmThreadGetTask [MMSYSTEM.1125] */ HANDLE16 WINAPI mmThreadGetTask16(HANDLE16 hndl) { HANDLE16 ret = 0; TRACE("(%04x)\n", hndl); if (mmThreadIsValid16(hndl)) { WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); ret = lpMMThd->hTask; } return ret; } typedef BOOL16 (WINAPI *MMCPLCALLBACK)(HWND, LPCSTR, LPCSTR, LPCSTR); /************************************************************************** * mmShowMMCPLPropertySheet [MMSYSTEM.1150] */ BOOL16 WINAPI mmShowMMCPLPropertySheet16(HWND hWnd, LPCSTR lpStrDevice, LPCSTR lpStrTab, LPCSTR lpStrTitle) { HANDLE hndl; BOOL16 ret = FALSE; TRACE("(%p \"%s\" \"%s\" \"%s\")\n", hWnd, lpStrDevice, lpStrTab, lpStrTitle); hndl = LoadLibraryA("MMSYS.CPL"); if (hndl != 0) { MMCPLCALLBACK fp = (MMCPLCALLBACK)GetProcAddress(hndl, "ShowMMCPLPropertySheet"); if (fp != NULL) { DWORD lc; ReleaseThunkLock(&lc); ret = (fp)(hWnd, lpStrDevice, lpStrTab, lpStrTitle); RestoreThunkLock(lc); } FreeLibrary(hndl); } return ret; } /************************************************************************** * StackEnter [MMSYSTEM.32] */ void WINAPI StackEnter16(void) { #ifdef __i386__ /* mmsystem.dll from Win 95 does only this: so does Wine */ //__asm__("stc"); #endif } /************************************************************************** * StackLeave [MMSYSTEM.33] */ void WINAPI StackLeave16(void) { #ifdef __i386__ /* mmsystem.dll from Win 95 does only this: so does Wine */ //__asm__("stc"); #endif } /************************************************************************** * WMMMidiRunOnce [MMSYSTEM.8] */ void WINAPI WMMMidiRunOnce16(void) { FIXME("(), stub!\n"); } /* ################################################### * # JOYSTICK # * ################################################### */ /************************************************************************** * joyGetNumDevs [MMSYSTEM.101] */ UINT16 WINAPI joyGetNumDevs16(void) { return joyGetNumDevs(); } /************************************************************************** * joyGetDevCaps [MMSYSTEM.102] */ MMRESULT16 WINAPI joyGetDevCaps16(UINT16 wID, LPJOYCAPS16 lpCaps, UINT16 wSize) { JOYCAPSA jca; MMRESULT ret; if (lpCaps == NULL) return MMSYSERR_INVALPARAM; ret = joyGetDevCapsA(wID, &jca, sizeof(jca)); if (ret != JOYERR_NOERROR) return ret; lpCaps->wMid = jca.wMid; lpCaps->wPid = jca.wPid; strcpy(lpCaps->szPname, jca.szPname); lpCaps->wXmin = jca.wXmin; lpCaps->wXmax = jca.wXmax; lpCaps->wYmin = jca.wYmin; lpCaps->wYmax = jca.wYmax; lpCaps->wZmin = jca.wZmin; lpCaps->wZmax = jca.wZmax; lpCaps->wNumButtons = jca.wNumButtons; lpCaps->wPeriodMin = jca.wPeriodMin; lpCaps->wPeriodMax = jca.wPeriodMax; if (wSize >= sizeof(JOYCAPS16)) { /* Win95 extensions ? */ lpCaps->wRmin = jca.wRmin; lpCaps->wRmax = jca.wRmax; lpCaps->wUmin = jca.wUmin; lpCaps->wUmax = jca.wUmax; lpCaps->wVmin = jca.wVmin; lpCaps->wVmax = jca.wVmax; lpCaps->wCaps = jca.wCaps; lpCaps->wMaxAxes = jca.wMaxAxes; lpCaps->wNumAxes = jca.wNumAxes; lpCaps->wMaxButtons = jca.wMaxButtons; strcpy(lpCaps->szRegKey, jca.szRegKey); strcpy(lpCaps->szOEMVxD, jca.szOEMVxD); } return ret; } /************************************************************************** * joyGetPosEx [MMSYSTEM.110] */ MMRESULT16 WINAPI joyGetPosEx16(UINT16 wID, LPJOYINFOEX lpInfo) { return joyGetPosEx(wID, lpInfo); } /************************************************************************** * joyGetPos [MMSYSTEM.103] */ MMRESULT16 WINAPI joyGetPos16(UINT16 wID, LPJOYINFO16 lpInfo) { JOYINFO ji; MMRESULT ret; TRACE("(%d, %p);\n", wID, lpInfo); if ((ret = joyGetPos(wID, &ji)) == JOYERR_NOERROR) { lpInfo->wXpos = ji.wXpos; lpInfo->wYpos = ji.wYpos; lpInfo->wZpos = ji.wZpos; lpInfo->wButtons = ji.wButtons; } return ret; } /************************************************************************** * joyGetThreshold [MMSYSTEM.104] */ MMRESULT16 WINAPI joyGetThreshold16(UINT16 wID, LPUINT16 lpThreshold) { UINT t; MMRESULT ret; ret = joyGetThreshold(wID, &t); if (ret == JOYERR_NOERROR) *lpThreshold = t; return ret; } /************************************************************************** * joyReleaseCapture [MMSYSTEM.105] */ MMRESULT16 WINAPI joyReleaseCapture16(UINT16 wID) { return joyReleaseCapture(wID); } /************************************************************************** * joySetCapture [MMSYSTEM.106] */ MMRESULT16 WINAPI joySetCapture16(HWND16 hWnd, UINT16 wID, UINT16 wPeriod, BOOL16 bChanged) { return joySetCapture(HWND_32(hWnd), wID, wPeriod, bChanged); } /************************************************************************** * joySetThreshold [MMSYSTEM.107] */ MMRESULT16 WINAPI joySetThreshold16(UINT16 wID, UINT16 wThreshold) { return joySetThreshold(wID,wThreshold); } /************************************************************************** * joySetCalibration [MMSYSTEM.109] */ MMRESULT16 WINAPI joySetCalibration16(UINT16 wID) { FIXME("(%04X): stub.\n", wID); return JOYERR_NOCANDO; } ================================================ FILE: mmsystem/mmsystem.def ================================================ ; File generated automatically from ..\mmsystem\mmsystem.dll16.spec; do not edit! LIBRARY mmsystem.dll16 EXPORTS _wine_spec_dos_header @1 DATA DrvOpen16 xlate_str_handle ================================================ FILE: mmsystem/mmsystem.dll16.spec ================================================ 1 pascal WEP(word word word ptr) MMSYSTEM_WEP 2 pascal sndPlaySound(ptr word) sndPlaySound16 3 pascal PlaySound(ptr word long) PlaySound16 4 pascal DllEntryPoint(long word word word long word) MMSYSTEM_LibMain 5 pascal mmsystemGetVersion() mmsystemGetVersion16 6 pascal DriverProc(long word word long long) DriverProc16 8 pascal WMMMidiRunOnce() WMMMidiRunOnce16 30 pascal -ret16 OutputDebugStr(str) OutputDebugStr16 31 pascal DriverCallback(long word word word long long long) DriverCallback16 32 pascal StackEnter() StackEnter16 33 pascal StackLeave() StackLeave16 34 stub MMDRVINSTALL 101 pascal joyGetNumDevs() joyGetNumDevs16 102 pascal joyGetDevCaps(word ptr word) joyGetDevCaps16 103 pascal joyGetPos(word ptr) joyGetPos16 104 pascal joyGetThreshold(word ptr) joyGetThreshold16 105 pascal joyReleaseCapture(word) joyReleaseCapture16 106 pascal joySetCapture(word word word word) joySetCapture16 107 pascal joySetThreshold(word word) joySetThreshold16 109 pascal joySetCalibration(word) joySetCalibration16 110 pascal joyGetPosEx(word ptr) joyGetPosEx16 111 stub JOYCONFIGCHANGED 201 pascal midiOutGetNumDevs() midiOutGetNumDevs16 202 pascal midiOutGetDevCaps(word ptr word) midiOutGetDevCaps16 203 pascal midiOutGetErrorText(word ptr word) midiOutGetErrorText16 204 pascal midiOutOpen(ptr word long long long) midiOutOpen16 205 pascal midiOutClose(word) midiOutClose16 206 pascal midiOutPrepareHeader(word segptr word) midiOutPrepareHeader16 207 pascal midiOutUnprepareHeader(word segptr word) midiOutUnprepareHeader16 208 pascal midiOutShortMsg(word long) midiOutShortMsg16 209 pascal midiOutLongMsg(word segptr word) midiOutLongMsg16 210 pascal midiOutReset(word) midiOutReset16 211 pascal midiOutGetVolume(word ptr) midiOutGetVolume16 212 pascal midiOutSetVolume(word long) midiOutSetVolume16 213 pascal midiOutCachePatches(word word ptr word) midiOutCachePatches16 214 pascal midiOutCacheDrumPatches(word word ptr word) midiOutCacheDrumPatches16 215 pascal midiOutGetID(word ptr) midiOutGetID16 216 pascal midiOutMessage(word word long long) midiOutMessage16 250 pascal midiStreamProperty(word ptr long) midiStreamProperty16 251 pascal midiStreamOpen(ptr ptr long long long long) midiStreamOpen16 252 pascal midiStreamClose(word) midiStreamClose16 253 pascal midiStreamPosition(word ptr word) midiStreamPosition16 254 pascal midiStreamOut(word ptr word) midiStreamOut16 255 pascal midiStreamPause(word) midiStreamPause16 256 pascal midiStreamRestart(word) midiStreamRestart16 257 pascal midiStreamStop(word) midiStreamStop16 301 pascal midiInGetNumDevs() midiInGetNumDevs16 302 pascal midiInGetDevCaps(word ptr word) midiInGetDevCaps16 303 pascal midiInGetErrorText(word ptr word) midiOutGetErrorText16 304 pascal midiInOpen(ptr word long long long) midiInOpen16 305 pascal midiInClose(word) midiInClose16 306 pascal midiInPrepareHeader(word segptr word) midiInPrepareHeader16 307 pascal midiInUnprepareHeader(word segptr word) midiInUnprepareHeader16 308 pascal midiInAddBuffer(word segptr word) midiInAddBuffer16 309 pascal midiInStart(word) midiInStart16 310 pascal midiInStop(word) midiInStop16 311 pascal midiInReset(word) midiInReset16 312 pascal midiInGetID(word ptr) midiInGetID16 313 pascal midiInMessage(word word long long) midiInMessage16 350 pascal auxGetNumDevs() auxGetNumDevs16 351 pascal auxGetDevCaps(word ptr word) auxGetDevCaps16 352 pascal auxGetVolume(word ptr) auxGetVolume16 353 pascal auxSetVolume(word long) auxSetVolume16 354 pascal auxOutMessage(word word long long) auxOutMessage16 401 pascal waveOutGetNumDevs() waveOutGetNumDevs16 402 pascal waveOutGetDevCaps(word ptr word) waveOutGetDevCaps16 403 pascal waveOutGetErrorText(word ptr word) waveOutGetErrorText16 404 pascal waveOutOpen(ptr word ptr long long long) waveOutOpen16 405 pascal waveOutClose(word) waveOutClose16 406 pascal waveOutPrepareHeader(word segptr word) waveOutPrepareHeader16 407 pascal waveOutUnprepareHeader(word segptr word) waveOutUnprepareHeader16 408 pascal waveOutWrite(word segptr word) waveOutWrite16 409 pascal waveOutPause(word) waveOutPause16 410 pascal waveOutRestart(word) waveOutRestart16 411 pascal waveOutReset(word) waveOutReset16 412 pascal waveOutGetPosition(word ptr word) waveOutGetPosition16 413 pascal waveOutGetPitch(word ptr) waveOutGetPitch16 414 pascal waveOutSetPitch(word long) waveOutSetPitch16 415 pascal waveOutGetVolume(word ptr) waveOutGetVolume16 416 pascal waveOutSetVolume(word long) waveOutSetVolume16 417 pascal waveOutGetPlaybackRate(word ptr) waveOutGetPlaybackRate16 418 pascal waveOutSetPlaybackRate(word long) waveOutSetPlaybackRate16 419 pascal waveOutBreakLoop(word) waveOutBreakLoop16 420 pascal waveOutGetID(word ptr) waveOutGetID16 421 pascal waveOutMessage(word word long long) waveOutMessage16 501 pascal waveInGetNumDevs() waveInGetNumDevs16 502 pascal waveInGetDevCaps(word ptr word) waveInGetDevCaps16 503 pascal waveInGetErrorText(word ptr word) waveOutGetErrorText16 504 pascal waveInOpen(ptr word ptr long long long) waveInOpen16 505 pascal waveInClose(word) waveInClose16 506 pascal waveInPrepareHeader(word segptr word) waveInPrepareHeader16 507 pascal waveInUnprepareHeader(word segptr word) waveInUnprepareHeader16 508 pascal waveInAddBuffer(word segptr word) waveInAddBuffer16 509 pascal waveInStart(word) waveInStart16 510 pascal waveInStop(word) waveInStop16 511 pascal waveInReset(word) waveInReset16 512 pascal waveInGetPosition(word ptr word) waveInGetPosition16 513 pascal waveInGetID(word ptr) waveInGetID16 514 pascal waveInMessage(word word long long) waveInMessage16 601 pascal timeGetSystemTime(ptr word) timeGetSystemTime16 602 pascal timeSetEvent(word word segptr long word) timeSetEvent16 603 pascal timeKillEvent(word) timeKillEvent16 604 pascal timeGetDevCaps(ptr word) timeGetDevCaps16 605 pascal timeBeginPeriod(word) timeBeginPeriod16 606 pascal timeEndPeriod(word) timeEndPeriod16 607 pascal timeGetTime() timeGetTime16 701 pascal mciSendCommand(word word long long) mciSendCommand16 702 pascal mciSendString(str ptr word word) mciSendString16 703 pascal mciGetDeviceID(ptr) mciGetDeviceID16 705 pascal mciLoadCommandResource(word str word) mciLoadCommandResource16 706 pascal mciGetErrorString(long ptr word) mciGetErrorString16 707 pascal mciSetDriverData(word long) mciSetDriverData16 708 pascal mciGetDriverData(word) mciGetDriverData16 710 pascal mciDriverYield(word) mciDriverYield16 711 pascal mciDriverNotify(word word word) mciDriverNotify16 712 pascal mciExecute(ptr) mciExecute16 713 pascal mciFreeCommandResource(word) mciFreeCommandResource16 714 pascal mciSetYieldProc(word ptr long) mciSetYieldProc16 715 pascal mciGetDeviceIDFromElementID(long ptr) mciGetDeviceIDFromElementID16 716 pascal mciGetYieldProc(word ptr) mciGetYieldProc16 717 pascal mciGetCreatorTask(word) mciGetCreatorTask16 800 pascal mixerGetNumDevs() mixerGetNumDevs16 801 pascal mixerGetDevCaps(word ptr word) mixerGetDevCaps16 802 pascal mixerOpen(ptr word long long long) mixerOpen16 803 pascal mixerClose(word) mixerClose16 804 pascal mixerMessage(word word long long) mixerMessage16 805 pascal mixerGetLineInfo(word ptr long) mixerGetLineInfo16 806 pascal mixerGetID(word ptr long) mixerGetID16 807 pascal mixerGetLineControls(word ptr long) mixerGetLineControls16 808 pascal mixerGetControlDetails(word ptr long) mixerGetControlDetails16 809 pascal mixerSetControlDetails(word ptr long) mixerSetControlDetails16 900 pascal mmTaskCreate(long ptr long) mmTaskCreate16 902 pascal mmTaskBlock(word) mmTaskBlock16 903 pascal mmTaskSignal(word) mmTaskSignal16 904 pascal -ret16 mmGetCurrentTask() mmGetCurrentTask16 905 pascal mmTaskYield() mmTaskYield16 1100 pascal DrvOpen(str str long) DrvOpen16 1101 pascal DrvClose(word long long) DrvClose16 1102 pascal DrvSendMessage(word word long long) DrvSendMessage16 1103 pascal DrvGetModuleHandle(word) DrvGetModuleHandle16 1104 pascal DrvDefDriverProc(long word word long long) DrvDefDriverProc16 1120 pascal mmThreadCreate(segptr ptr long long) mmThreadCreate16 1121 pascal mmThreadSignal(word) mmThreadSignal16 1122 pascal mmThreadBlock(word) mmThreadBlock16 1123 pascal mmThreadIsCurrent(word) mmThreadIsCurrent16 1124 pascal mmThreadIsValid(word) mmThreadIsValid16 1125 pascal mmThreadGetTask(word) mmThreadGetTask16 1150 pascal mmShowMMCPLPropertySheet(word str str str) mmShowMMCPLPropertySheet16 1210 pascal mmioOpen(str ptr long) mmioOpen16 1211 pascal mmioClose(word word) mmioClose16 1212 pascal mmioRead(word ptr long) mmioRead16 1213 pascal mmioWrite(word ptr long) mmioWrite16 1214 pascal mmioSeek(word long word) mmioSeek16 1215 pascal mmioGetInfo(word ptr word) mmioGetInfo16 1216 pascal mmioSetInfo(word ptr word) mmioSetInfo16 1217 pascal mmioSetBuffer(word segptr long word) mmioSetBuffer16 1218 pascal mmioFlush(word word) mmioFlush16 1219 pascal mmioAdvance(word ptr word) mmioAdvance16 1220 pascal mmioStringToFOURCC(str word) mmioStringToFOURCC16 1221 pascal mmioInstallIOProc(long segptr long) mmioInstallIOProc16 1222 pascal mmioSendMessage(word word long long) mmioSendMessage16 1223 pascal mmioDescend(word ptr ptr word) mmioDescend16 1224 pascal mmioAscend(word ptr word) mmioAscend16 1225 pascal mmioCreateChunk(word ptr word) mmioCreateChunk16 1226 pascal mmioRename(ptr ptr ptr long) mmioRename16 #2000 stub WINMMF_THUNKDATA16 #2001 stub RING3_DEVLOADER #2002 stub WINMMTILEBUFFER #2003 stub WINMMUNTILEBUFFER #2005 stub MCIGETTHUNKTABLE #2006 stub WINMMSL_THUNKDATA16 # these are Wine only exported functions. Is there another way to do it ? 2047 pascal __wine_mmThreadEntryPoint(long) WINE_mmThreadEntryPoint @ stdcall -arch=win32 xlate_str_handle(ptr ptr) ================================================ FILE: mmsystem/mmsystem.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj mmsystem {249FBAE5-EC5D-4988-87AC-A4371D827BA4} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled 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) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; winmm.lib;user32.lib;ntdll.lib;advapi32.lib true mmsystem.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false mmsystem.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; winmm.lib;user32.lib;ntdll.lib;advapi32.lib Document "$(OutDir)convspec" "%(Filename).spec" MMSYSTEM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" MMSYSTEM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: mmsystem/playsound.c ================================================ /* -*- tab-width: 8; c-basic-offset: 4 -*- */ /* * MMSYSTEM functions * * Copyright 1993 Martin Ayotte * 1998-2002 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include "windef.h" #include "winbase.h" #include "mmsystem.h" #include "wingdi.h" #include "winuser.h" #include "winreg.h" #undef _WINTERNL_ #define _WIN32_WINNT 0x600 #include NTSYSAPI BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING, LPCSTR); #include "wine/debug.h" #include "wine/winuser16.h" #include "winemm16.h" #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) static CRITICAL_SECTION WINMM_cs; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &WINMM_cs, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": mmsystem_playsound_cs") } }; static CRITICAL_SECTION WINMM_cs = { &critsect_debug, -1, 0, 0, 0, 0 }; static HANDLE psLastEvent = 0; WINE_DEFAULT_DEBUG_CHANNEL(winmm); typedef struct tagWINE_PLAYSOUND { unsigned bLoop : 1, bAlloc : 1; LPCWSTR pszSound; HMODULE hMod; DWORD fdwSound; HWAVEOUT hWave; } WINE_PLAYSOUND; static WINE_PLAYSOUND *PlaySoundCurrent; static BOOL bPlaySoundStop; static HMMIO get_mmioFromFile(LPCWSTR lpszName) { HMMIO ret; WCHAR buf[256]; LPWSTR dummy; ret = mmioOpenW((LPWSTR)lpszName, NULL, MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE); if (ret != 0) return ret; if (SearchPathW(NULL, lpszName, L".wav", ARRAY_SIZE(buf), buf, &dummy)) { return mmioOpenW(buf, NULL, MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE); } return 0; } static HMMIO get_mmioFromProfile(UINT uFlags, LPCWSTR lpszName) { WCHAR str[128]; LPWSTR ptr; HMMIO hmmio; HKEY hRegSnd, hRegApp, hScheme, hSnd; DWORD err, type, count; TRACE("searching in SystemSound list for %s\n", debugstr_w(lpszName)); GetProfileStringW(L"Sounds", lpszName, L"", str, ARRAY_SIZE(str)); if (!*str) { if (uFlags & SND_NODEFAULT) goto next; GetProfileStringW(L"Sounds", L"Default", L"", str, ARRAY_SIZE(str)); if (!*str) goto next; } for (ptr = str; *ptr && *ptr != ','; ptr++); if (*ptr) *ptr = 0; hmmio = mmioOpenW(str, NULL, MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE); if (hmmio != 0) return hmmio; next: /* we look up the registry under * HKCU\AppEvents\Schemes\Apps\.Default * HKCU\AppEvents\Schemes\Apps\ */ if (RegOpenKeyW(HKEY_CURRENT_USER, L"AppEvents\\Schemes\\Apps", &hRegSnd) != 0) goto none; if (uFlags & SND_APPLICATION) { DWORD len; err = 1; /* error */ len = GetModuleFileNameW(0, str, ARRAY_SIZE(str)); if (len > 0 && len < ARRAY_SIZE(str)) { for (ptr = str + lstrlenW(str) - 1; ptr >= str; ptr--) { if (*ptr == '.') *ptr = 0; if (*ptr == '\\') { err = RegOpenKeyW(hRegSnd, ptr+1, &hRegApp); break; } } } } else { err = RegOpenKeyW(hRegSnd, L".Default", &hRegApp); } RegCloseKey(hRegSnd); if (err != 0) goto none; err = RegOpenKeyW(hRegApp, lpszName, &hScheme); RegCloseKey(hRegApp); if (err != 0) goto none; /* what's the difference between .Current and .Default ? */ err = RegOpenKeyW(hScheme, L".Default", &hSnd); if (err != 0) { err = RegOpenKeyW(hScheme, L".Current", &hSnd); RegCloseKey(hScheme); if (err != 0) goto none; } count = sizeof(str); err = RegQueryValueExW(hSnd, NULL, 0, &type, (LPBYTE)str, &count); RegCloseKey(hSnd); if (err != 0 || !*str) goto none; hmmio = mmioOpenW(str, NULL, MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE); if (hmmio) return hmmio; none: WARN("can't find SystemSound=%s !\n", debugstr_w(lpszName)); return 0; } struct playsound_data { HANDLE hEvent; LONG dwEventCount; }; static void CALLBACK PlaySound_Callback(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { struct playsound_data* s = (struct playsound_data*)dwInstance; switch (uMsg) { case WOM_OPEN: case WOM_CLOSE: break; case WOM_DONE: InterlockedIncrement(&s->dwEventCount); TRACE("Returning waveHdr=%Ix\n", dwParam1); SetEvent(s->hEvent); break; default: ERR("Unknown uMsg=%d\n", uMsg); } } static void PlaySound_WaitDone(struct playsound_data* s) { for (;;) { if (InterlockedDecrement(&s->dwEventCount) >= 0) break; InterlockedIncrement(&s->dwEventCount); WaitForSingleObject(s->hEvent, INFINITE); } } static BOOL PlaySound_IsString(DWORD fdwSound, const void* psz) { /* SND_RESOURCE is 0x40004 while * SND_MEMORY is 0x00004 */ switch (fdwSound & (SND_RESOURCE|SND_ALIAS_ID|SND_FILENAME)) { case SND_RESOURCE: return HIWORD(psz) != 0; /* by name or by ID ? */ case SND_ALIAS_ID: case SND_MEMORY: return FALSE; case SND_ALIAS: case SND_FILENAME: case SND_ALIAS|SND_FILENAME: case 0: return TRUE; default: FIXME("WTF\n"); return FALSE; } } static void PlaySound_Free(WINE_PLAYSOUND* wps) { EnterCriticalSection(&WINMM_cs); PlaySoundCurrent = NULL; SetEvent(psLastEvent); LeaveCriticalSection(&WINMM_cs); if (wps->bAlloc) free((void*)wps->pszSound); free(wps); } static WINE_PLAYSOUND* PlaySound_Alloc(const void* pszSound, HMODULE hmod, DWORD fdwSound, BOOL bUnicode) { WINE_PLAYSOUND* wps; wps = calloc(1, sizeof(*wps)); if (!wps) return NULL; wps->hMod = hmod; wps->fdwSound = fdwSound; if (PlaySound_IsString(fdwSound, pszSound)) { if (bUnicode) { if (fdwSound & SND_ASYNC) { wps->pszSound = wcsdup(pszSound); if (!wps->pszSound) goto oom_error; wps->bAlloc = TRUE; } else wps->pszSound = pszSound; } else { UNICODE_STRING usBuffer; if (!RtlCreateUnicodeStringFromAsciiz(&usBuffer, pszSound)) goto oom_error; wps->pszSound = wcsdup(usBuffer.Buffer); RtlFreeUnicodeString(&usBuffer); if (!wps->pszSound) goto oom_error; wps->bAlloc = TRUE; } } else wps->pszSound = pszSound; return wps; oom_error: if (wps->bAlloc) free((void*)wps->pszSound); free(wps); return NULL; } static DWORD WINAPI proc_PlaySound(LPVOID arg) { WINE_PLAYSOUND* wps = arg; BOOL bRet = FALSE; HMMIO hmmio = 0; MMCKINFO ckMainRIFF; MMCKINFO mmckInfo; LPWAVEFORMATEX lpWaveFormat = NULL; HWAVEOUT hWave = 0; LPWAVEHDR waveHdr = NULL; INT count, bufsize, left, index; struct playsound_data s; void* data; LONG r; s.hEvent = 0; TRACE("SoundName=%s !\n", debugstr_w(wps->pszSound)); /* if resource, grab it */ if ((wps->fdwSound & SND_RESOURCE) == SND_RESOURCE) { HRSRC hRes; HGLOBAL hGlob; if ((hRes = FindResource16(wps->hMod, wps->pszSound, L"WAVE")) == 0 || (hGlob = LoadResource16(wps->hMod, hRes)) == 0) goto errCleanUp; if ((data = LockResource16(hGlob)) == NULL) { FreeResource16(hGlob); goto errCleanUp; } FreeResource16(hGlob); } else data = (void*)wps->pszSound; /* construct an MMIO stream (either in memory, or from a file */ if (wps->fdwSound & SND_MEMORY) { /* NOTE: SND_RESOURCE has the SND_MEMORY bit set */ MMIOINFO mminfo; memset(&mminfo, 0, sizeof(mminfo)); mminfo.fccIOProc = FOURCC_MEM; mminfo.pchBuffer = data; mminfo.cchBuffer = ((DWORD *)data)[1] + 8; TRACE("Memory sound %p\n", data); hmmio = mmioOpenW(NULL, &mminfo, MMIO_READ); } if (!hmmio && wps->fdwSound & SND_ALIAS) { if ((wps->fdwSound & SND_ALIAS_ID) == SND_ALIAS_ID) { wps->fdwSound &= ~(SND_ALIAS_ID ^ SND_ALIAS); if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMASTERISK) wps->pszSound =L"SystemAsterisk"; else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMDEFAULT) wps->pszSound = L"SystemDefault"; else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMEXCLAMATION) wps->pszSound = L"SystemExclamation"; else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMEXIT) wps->pszSound = L"SystemExit"; else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMHAND) wps->pszSound = L"SystemHand"; else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMQUESTION) wps->pszSound = L"SystemQuestion"; else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMSTART) wps->pszSound = L"SystemStart"; else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMWELCOME) wps->pszSound = L"SystemWelcome"; else goto errCleanUp; } hmmio = get_mmioFromProfile(wps->fdwSound, wps->pszSound); if (!hmmio) { wps->fdwSound &= ~SND_ALIAS; wps->fdwSound |= SND_FILENAME; } } if (!hmmio && wps->fdwSound & SND_FILENAME) { hmmio = get_mmioFromFile(wps->pszSound); } if (!(wps->fdwSound & (SND_FILENAME|SND_ALIAS|SND_MEMORY))) { if ((hmmio = get_mmioFromProfile(wps->fdwSound | SND_NODEFAULT, wps->pszSound)) == 0) { if ((hmmio = get_mmioFromFile(wps->pszSound)) == 0) { hmmio = get_mmioFromProfile(wps->fdwSound, wps->pszSound); } } } if (hmmio == 0) goto errCleanUp; if (mmioDescend(hmmio, &ckMainRIFF, NULL, 0)) goto errCleanUp; TRACE("ParentChunk ckid=%.4s fccType=%.4s cksize=%08lX\n", (LPSTR)&ckMainRIFF.ckid, (LPSTR)&ckMainRIFF.fccType, ckMainRIFF.cksize); if ((ckMainRIFF.ckid != FOURCC_RIFF) || (ckMainRIFF.fccType != mmioFOURCC('W', 'A', 'V', 'E'))) goto errCleanUp; mmckInfo.ckid = mmioFOURCC('f', 'm', 't', ' '); if (mmioDescend(hmmio, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK)) goto errCleanUp; TRACE("Chunk Found ckid=%.4s fccType=%08lx cksize=%08lX\n", (LPSTR)&mmckInfo.ckid, mmckInfo.fccType, mmckInfo.cksize); lpWaveFormat = malloc(mmckInfo.cksize); if (!lpWaveFormat) goto errCleanUp; r = mmioRead(hmmio, (HPSTR)lpWaveFormat, mmckInfo.cksize); if (r < 0 || r < sizeof(PCMWAVEFORMAT)) { // uninvited expects true for this but it's only testing for playback completion if (r == sizeof(WAVEFORMAT)) bRet = TRUE; goto errCleanUp; } TRACE("wFormatTag=%04X !\n", lpWaveFormat->wFormatTag); TRACE("nChannels=%d\n", lpWaveFormat->nChannels); TRACE("nSamplesPerSec=%ld\n", lpWaveFormat->nSamplesPerSec); TRACE("nAvgBytesPerSec=%ld\n", lpWaveFormat->nAvgBytesPerSec); TRACE("nBlockAlign=%d\n", lpWaveFormat->nBlockAlign); TRACE("wBitsPerSample=%u !\n", lpWaveFormat->wBitsPerSample); /* move to end of 'fmt ' chunk */ mmioAscend(hmmio, &mmckInfo, 0); mmckInfo.ckid = mmioFOURCC('d', 'a', 't', 'a'); if (mmioDescend(hmmio, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK)) goto errCleanUp; TRACE("Chunk Found ckid=%.4s fccType=%08lx cksize=%08lX\n", (LPSTR)&mmckInfo.ckid, mmckInfo.fccType, mmckInfo.cksize); s.hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); if (!s.hEvent || bPlaySoundStop) goto errCleanUp; if (waveOutOpen(&hWave, WAVE_MAPPER, lpWaveFormat, (DWORD_PTR)PlaySound_Callback, (DWORD_PTR)&s, CALLBACK_FUNCTION) != MMSYSERR_NOERROR) goto errCleanUp; /* make it so that 3 buffers per second are needed */ bufsize = (((lpWaveFormat->nAvgBytesPerSec / 3) - 1) / lpWaveFormat->nBlockAlign + 1) * lpWaveFormat->nBlockAlign; waveHdr = malloc(2 * sizeof(WAVEHDR) + 2 * bufsize); if (!waveHdr) goto errCleanUp; waveHdr[0].lpData = (char*)waveHdr + 2 * sizeof(WAVEHDR); waveHdr[1].lpData = (char*)waveHdr + 2 * sizeof(WAVEHDR) + bufsize; waveHdr[0].dwUser = waveHdr[1].dwUser = 0L; waveHdr[0].dwLoops = waveHdr[1].dwLoops = 0L; waveHdr[0].dwFlags = waveHdr[1].dwFlags = 0L; waveHdr[0].dwBufferLength = waveHdr[1].dwBufferLength = bufsize; if (waveOutPrepareHeader(hWave, &waveHdr[0], sizeof(WAVEHDR)) || waveOutPrepareHeader(hWave, &waveHdr[1], sizeof(WAVEHDR))) { goto errCleanUp; } wps->hWave = hWave; s.dwEventCount = 1L; /* for first buffer */ index = 0; do { left = mmckInfo.cksize; mmioSeek(hmmio, mmckInfo.dwDataOffset, SEEK_SET); while (left) { if (bPlaySoundStop) { wps->bLoop = FALSE; break; } count = mmioRead(hmmio, waveHdr[index].lpData, min(bufsize, left)); if (count < 1) break; left -= count; waveHdr[index].dwBufferLength = count; if (waveOutWrite(hWave, &waveHdr[index], sizeof(WAVEHDR)) == MMSYSERR_NOERROR) { index ^= 1; PlaySound_WaitDone(&s); } else { ERR("Aborting play loop, waveOutWrite error\n"); wps->bLoop = FALSE; break; } } bRet = TRUE; } while (wps->bLoop); PlaySound_WaitDone(&s); /* to balance first buffer */ waveOutReset(hWave); waveOutUnprepareHeader(hWave, &waveHdr[0], sizeof(WAVEHDR)); waveOutUnprepareHeader(hWave, &waveHdr[1], sizeof(WAVEHDR)); errCleanUp: TRACE("Done playing=%s => %s!\n", debugstr_w(wps->pszSound), bRet ? "ok" : "ko"); free(lpWaveFormat); if (hWave) { EnterCriticalSection(&WINMM_cs); /* the CS prevents a concurrent waveOutReset */ wps->hWave = 0; LeaveCriticalSection(&WINMM_cs); while (waveOutClose(hWave) == WAVERR_STILLPLAYING) Sleep(100); } CloseHandle(s.hEvent); free(waveHdr); if (hmmio) mmioClose(hmmio, 0); PlaySound_Free(wps); return bRet; } static BOOL MULTIMEDIA_PlaySound(const void* pszSound, HMODULE hmod, DWORD fdwSound, BOOL bUnicode) { WINE_PLAYSOUND* wps = NULL; TRACE("pszSound='%p' hmod=%p fdwSound=%08lX\n", pszSound, hmod, fdwSound); /* SND_NOWAIT is ignored in w95/2k/xp. */ if ((fdwSound & SND_NOSTOP) && PlaySoundCurrent != NULL) return FALSE; /* alloc internal structure, if we need to play something */ if (pszSound && !(fdwSound & SND_PURGE)) { if (!(wps = PlaySound_Alloc(pszSound, hmod, fdwSound, bUnicode))) return FALSE; } EnterCriticalSection(&WINMM_cs); /* since several threads can enter PlaySound in parallel, we're not * sure, at this point, that another thread didn't start a new playsound */ if (!psLastEvent) psLastEvent = CreateEventW(NULL, TRUE, FALSE, NULL); while (PlaySoundCurrent != NULL) { ResetEvent(psLastEvent); /* FIXME: doc says we have to stop all instances of pszSound if it's non * NULL... as of today, we stop all playing instances */ bPlaySoundStop = TRUE; if(PlaySoundCurrent->hWave) waveOutReset(PlaySoundCurrent->hWave); LeaveCriticalSection(&WINMM_cs); WaitForSingleObject(psLastEvent, INFINITE); EnterCriticalSection(&WINMM_cs); bPlaySoundStop = FALSE; } PlaySoundCurrent = wps; LeaveCriticalSection(&WINMM_cs); if (!wps) return TRUE; if (fdwSound & SND_ASYNC) { HANDLE handle; wps->bLoop = (fdwSound & SND_LOOP) != 0; if ((handle = CreateThread(NULL, 0, proc_PlaySound, wps, 0, NULL)) != 0) { SetThreadPriority(handle, THREAD_PRIORITY_TIME_CRITICAL); CloseHandle(handle); Sleep(1); return TRUE; } } else return proc_PlaySound(wps); /* error cases */ PlaySound_Free(wps); return FALSE; } /************************************************************************** * PlaySoundA [WINMM.@] */ BOOL16 WINAPI PlaySound16(LPCSTR pszSoundA, HMODULE16 hmod, DWORD fdwSound) { return MULTIMEDIA_PlaySound(pszSoundA, hmod, fdwSound, FALSE); } /************************************************************************** * sndPlaySoundA [WINMM.@] */ BOOL16 WINAPI sndPlaySound16(LPCSTR pszSoundA, UINT16 uFlags) { uFlags &= SND_RESOURCE|SND_ALIAS_ID|SND_FILENAME|SND_ASYNC|SND_LOOP|SND_MEMORY|SND_NODEFAULT|SND_NOSTOP|SND_SYNC; return MULTIMEDIA_PlaySound(pszSoundA, 0, uFlags, FALSE); } ================================================ FILE: mmsystem/winemm16.h ================================================ /* * Copyright 1998, Luiz Otavio L. Zorzella * 1999, Eric Pouech * * Purpose: multimedia declarations (internal to WINMM & MMSYSTEM DLLs) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "wine/mmsystem16.h" #include "wownt32.h" /* mmsystem (16 bit files) only functions */ void MMDRV_Init16(void); void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, const MMTIME* mmt32) DECLSPEC_HIDDEN; typedef LONG (*MCIPROC16)(DWORD, HDRVR16, WORD, DWORD, DWORD); #define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1) /* HANDLE16 -> HANDLE conversions */ #define HDRVR_32(h16) ((HDRVR)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HMIDI_32(h16) ((HMIDI)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HMIDIIN_32(h16) ((HMIDIIN)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HMIDIOUT_32(h16) ((HMIDIOUT)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HMIDISTRM_32(h16) ((HMIDISTRM)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HMIXER_32(h16) ((HMIXER)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HMIXEROBJ_32(h16) ((HMIXEROBJ)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HMMIO_32(h16) ((HMMIO)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HWAVE_32(h16) ((HWAVE)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HWAVEIN_32(h16) ((HWAVEIN)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HWAVEOUT_32(h16) ((HWAVEOUT)WOWHandle32(h16, WOW_TYPE_HANDLE)) /* HANDLE -> HANDLE16 conversions */ #define HDRVR_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HMIDI_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HMIDIIN_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HMIDIOUT_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HMIDISTRM_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HMIXER_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HMIXEROBJ_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HMMIO_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HWAVE_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HWAVEIN_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HWAVEOUT_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) typedef enum { MMSYSTEM_MAP_NOMEM, /* ko, memory problem */ MMSYSTEM_MAP_MSGERROR, /* ko, unknown message */ MMSYSTEM_MAP_OK, /* ok, no memory allocated. to be sent to the proc. */ MMSYSTEM_MAP_OKMEM, /* ok, some memory allocated, need to call UnMapMsg. to be sent to the proc. */ } MMSYSTEM_MapType; extern CRITICAL_SECTION mmdrv_cs DECLSPEC_HIDDEN; enum MMSYSTEM_DriverType { MMSYSTDRV_MIXER, MMSYSTDRV_MIDIIN, MMSYSTDRV_MIDIOUT, MMSYSTDRV_WAVEIN, MMSYSTDRV_WAVEOUT, MMSYSTDRV_MAX }; extern struct mmsystdrv_thunk* MMSYSTDRV_AddThunk(DWORD callback, DWORD flags, enum MMSYSTEM_DriverType kind) DECLSPEC_HIDDEN; extern void MMSYSTDRV_DeleteThunk(struct mmsystdrv_thunk* thunk) DECLSPEC_HIDDEN; extern void MMSYSTDRV_SetHandle(struct mmsystdrv_thunk* thunk, void* h) DECLSPEC_HIDDEN; extern void MMSYSTDRV_CloseHandle(void* h) DECLSPEC_HIDDEN; extern DWORD MMSYSTDRV_Message(void* h, UINT msg, DWORD_PTR param1, DWORD_PTR param2) DECLSPEC_HIDDEN; #define WINE_MMTHREAD_CREATED 0x4153494C /* "BSIL" */ #define WINE_MMTHREAD_DELETED 0xDEADDEAD typedef struct { DWORD dwSignature; /* 00 "BSIL" when ok, 0xDEADDEAD when being deleted */ DWORD dwCounter; /* 04 > 1 when in mmThread functions */ HANDLE hThread; /* 08 hThread */ DWORD dwThreadID; /* 0C */ DWORD fpThread; /* 10 address of thread proc (segptr or lin depending on dwFlags) */ DWORD dwThreadPmt; /* 14 parameter to be passed upon thread creation to fpThread */ LONG dwSignalCount; /* 18 counter used for signaling */ HANDLE hEvent; /* 1C event */ HANDLE hVxD; /* 20 return from OpenVxDHandle */ DWORD dwStatus; /* 24 0x00, 0x10, 0x20, 0x30 */ DWORD dwFlags; /* 28 dwFlags upon creation */ UINT16 hTask; /* 2C handle to created task */ } WINE_MMTHREAD; ================================================ FILE: mouse/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(mouse SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/mouse.def mouse.drv16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(mouse.drv16 mouse) target_link_libraries(mouse libwine winecrt0 krnl386) set_target_properties(mouse PROPERTIES SUFFIX ".drv16") ================================================ FILE: mouse/Makefile.in ================================================ MODULE = mouse.drv16 IMPORTS = user32 EXTRADLLFLAGS = -m16 C_SRCS = mouse.c RC_SRCS = mouse.rc ================================================ FILE: mouse/mouse.c ================================================ /* * MOUSE driver * * Copyright 1998 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include "windef.h" #include "winbase.h" #include "winuser.h" #include "wine/winbase16.h" #include "wine/winuser16.h" #include "pshpack1.h" typedef struct _MOUSEINFO { BYTE msExist; BYTE msRelative; WORD msNumButtons; WORD msRate; WORD msXThreshold; WORD msYThreshold; WORD msXRes; WORD msYRes; WORD msMouseCommPort; } MOUSEINFO, *LPMOUSEINFO; #include "poppack.h" static FARPROC16 DefMouseEventProc; /*********************************************************************** * Inquire (MOUSE.1) */ WORD WINAPI Inquire16(LPMOUSEINFO mouseInfo) { mouseInfo->msExist = TRUE; mouseInfo->msRelative = FALSE; mouseInfo->msNumButtons = 2; mouseInfo->msRate = 34; /* the DDK says so ... */ mouseInfo->msXThreshold = 0; mouseInfo->msYThreshold = 0; mouseInfo->msXRes = 0; mouseInfo->msYRes = 0; mouseInfo->msMouseCommPort = 0; return sizeof(MOUSEINFO); } /*********************************************************************** * Enable (MOUSE.2) */ VOID WINAPI Enable16( FARPROC16 proc ) { DefMouseEventProc = proc; } /*********************************************************************** * Disable (MOUSE.3) */ VOID WINAPI Disable16(void) { DefMouseEventProc = 0; } ================================================ FILE: mouse/mouse.def ================================================ ; File generated automatically from ..\mouse\mouse.drv16.spec; do not edit! LIBRARY mouse.drv16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: mouse/mouse.drv16.spec ================================================ 1 pascal -ret16 Inquire(ptr) Inquire16 2 pascal -ret16 Enable(segptr) Enable16 3 pascal -ret16 Disable() Disable16 4 stub MOUSEGETINTVECT 5 stub GETSETMOUSEDATA #Control Panel thinks this is implemented if it is available #6 stub CPLAPPLET 7 stub POWEREVENTPROC ================================================ FILE: mouse/mouse.rc ================================================ /* * Top level resource file for MOUSE driver dll * * Copyright 1999 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define WINE_FILEDESCRIPTION_STR "Wine mouse driver" #include "wine/wine_common_ver.rc" ================================================ FILE: mouse/mouse.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj mouse {F1DEC3F9-706B-410D-91D5-0381BB9BA22A} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .drv16 false Release .drv16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib true mouse.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false mouse.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; user32.lib Document Document "$(OutDir)convspec" "%(Filename).spec" MOUSE > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" MOUSE > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: msacm/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(msacm SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/msacm.def msacm.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(msacm.dll16 msacm) target_link_libraries(msacm libwine winecrt0 krnl386 msacm32.lib) set_target_properties(msacm PROPERTIES SUFFIX ".dll16") ================================================ FILE: msacm/Makefile.in ================================================ MODULE = msacm.dll16 IMPORTS = msacm32 EXTRADLLFLAGS = -m16 -Wb,--main-module,msacm32.dll C_SRCS = msacm.c ================================================ FILE: msacm/msacm.c ================================================ /* * MSACM library * * Copyright 1998 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "winerror.h" #include "mmsystem.h" #define NOBITMAP #include "mmreg.h" #include "msacm.h" #ifdef _MSCVER #include "msacmdrv.h" #else #include "windows/msacmdrv.h" #endif #include "wineacm16.h" #include "wine/debug.h" #include "wine/winbase16.h" #include "wownt32.h" WINE_DEFAULT_DEBUG_CHANNEL(msacm); void WINAPI K32WOWHandle16DestroyHint(HANDLE handle, WOW_HANDLE_TYPE type); #define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1) #define WOW_TYPE_HAS WOW_TYPE_HANDLE #define HACMSTREAM_16(h32) WOWHandle16(h32, WOW_TYPE_HAS) #define HACMSTREAM_32(h16) ((HACMSTREAM)WOWHandle32(h16, WOW_TYPE_HAS)) /************************************************************************** * DllEntryPoint (MSACM.3) * * MSACM DLL entry point * */ BOOL WINAPI DllEntryPoint16(DWORD fdwReason, HINSTANCE16 hinstDLL, WORD ds, WORD wHeapSize, DWORD dwReserved1, WORD wReserved2) { return TRUE; } /*********************************************************************** * acmGetVersion (MSACM.7) */ DWORD WINAPI acmGetVersion16(void) { return acmGetVersion(); } /*********************************************************************** * acmMetrics (MSACM.8) */ MMRESULT16 WINAPI acmMetrics16( HACMOBJ16 hao, UINT16 uMetric, LPVOID pMetric) { FIXME("(0x%04x, %d, %p): semi-stub\n", hao, uMetric, pMetric); if(!hao) return acmMetrics(0, uMetric, pMetric); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmDriverEnum (MSACM.10) */ MMRESULT16 WINAPI acmDriverEnum16( ACMDRIVERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum) { FIXME("(%p, %d, %d): stub\n", fnCallback, dwInstance, fdwEnum ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmDriverDetails (MSACM.11) */ MMRESULT16 WINAPI acmDriverDetails16( HACMDRIVERID16 hadid, LPACMDRIVERDETAILS16 padd, DWORD fdwDetails) { FIXME("(0x%04x, %p, %d): stub\n", hadid, padd, fdwDetails); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmDriverAdd (MSACM.12) */ MMRESULT16 WINAPI acmDriverAdd16( LPHACMDRIVERID16 phadid, HINSTANCE16 hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd) { FIXME("(%p, 0x%04x, %ld, %d, %d): stub\n", phadid, hinstModule, lParam, dwPriority, fdwAdd ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmDriverRemove (MSACM.13) */ MMRESULT16 WINAPI acmDriverRemove16( HACMDRIVERID16 hadid, DWORD fdwRemove) { FIXME("(0x%04x, %d): stub\n", hadid, fdwRemove); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmDriverOpen (MSACM.14) */ MMRESULT16 WINAPI acmDriverOpen16( LPHACMDRIVER16 phad, HACMDRIVERID16 hadid, DWORD fdwOpen) { FIXME("(%p, 0x%04x, %d): stub\n", phad, hadid, fdwOpen); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmDriverClose (MSACM.15) */ MMRESULT16 WINAPI acmDriverClose16( HACMDRIVER16 had, DWORD fdwClose) { FIXME("(0x%04x, %d): stub\n", had, fdwClose); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmDriverMessage (MSACM.16) */ LRESULT WINAPI acmDriverMessage16( HACMDRIVER16 had, UINT16 uMsg, LPARAM lParam1, LPARAM lParam2) { FIXME("(0x%04x, %d, %ld, %ld): stub\n", had, uMsg, lParam1, lParam2 ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return 0; } /*********************************************************************** * acmDriverID (MSACM.17) */ MMRESULT16 WINAPI acmDriverID16( HACMOBJ16 hao, LPHACMDRIVERID16 phadid, DWORD fdwDriverID) { FIXME("(0x%04x, %p, %d): stub\n", hao, phadid, fdwDriverID); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmDriverPriority (MSACM.18) */ MMRESULT16 WINAPI acmDriverPriority16( HACMDRIVERID16 hadid, DWORD dwPriority, DWORD fdwPriority) { FIXME("(0x%04x, %d, %d): stub\n", hadid, dwPriority, fdwPriority ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmFormatTagDetails (MSACM.30) */ MMRESULT16 WINAPI acmFormatTagDetails16( HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd, DWORD fdwDetails) { return acmFormatTagDetailsA(had, paftd, fdwDetails); } /*********************************************************************** * acmFormatTagEnum (MSACM.31) */ MMRESULT16 WINAPI acmFormatTagEnum16( HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd, ACMFORMATTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum) { FIXME("(0x%04x, %p, %p, %d, %d): stub\n", had, paftd, fnCallback, dwInstance, fdwEnum ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmFormatChoose (MSACM.40) */ MMRESULT16 WINAPI acmFormatChoose16( LPACMFORMATCHOOSE16 pafmtc) { FIXME("(%p): stub\n", pafmtc); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmFormatDetails (MSACM.41) */ MMRESULT16 WINAPI acmFormatDetails16( HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd, DWORD fdwDetails) { MMRESULT ret; ACMFORMATDETAILSA afd; afd.cbStruct = pafd->cbStruct; afd.dwFormatIndex = pafd->dwFormatIndex; afd.dwFormatTag = pafd->dwFormatTag; afd.fdwSupport = pafd->fdwSupport; afd.pwfx = MapSL(pafd->pwfx); afd.cbwfx = pafd->cbwfx; memcpy(&afd.szFormat, &pafd->szFormat, pafd->cbStruct - (6*4)); ret = acmFormatDetailsA(had, &afd, fdwDetails); pafd->dwFormatIndex = afd.dwFormatIndex; pafd->dwFormatTag = afd.dwFormatTag; pafd->fdwSupport = afd.fdwSupport; pafd->cbwfx = afd.cbwfx; memcpy(&pafd->szFormat, &afd.szFormat, pafd->cbStruct - (6*4)); return ret; } /*********************************************************************** * acmFormatEnum (MSACM.42) */ MMRESULT16 WINAPI acmFormatEnum16( HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd, ACMFORMATENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum) { FIXME("(0x%04x, %p, %p, %d, %d): stub\n", had, pafd, fnCallback, dwInstance, fdwEnum ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmFormatSuggest (MSACM.45) */ MMRESULT16 WINAPI acmFormatSuggest16( HACMDRIVER16 had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, DWORD cbwfxDst, DWORD fdwSuggest) { return acmFormatSuggest(had, pwfxSrc, pwfxDst, cbwfxDst, fdwSuggest); } /*********************************************************************** * acmFilterTagDetails (MSACM.50) */ MMRESULT16 WINAPI acmFilterTagDetails16( HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd, DWORD fdwDetails) { FIXME("(0x%04x, %p, %d): stub\n", had, paftd, fdwDetails); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmFilterTagEnum (MSACM.51) */ MMRESULT16 WINAPI acmFilterTagEnum16( HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd, ACMFILTERTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum) { FIXME("(0x%04x, %p, %p, %d, %d): stub\n", had, paftd, fnCallback, dwInstance, fdwEnum ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmFilterChoose (MSACM.60) */ MMRESULT16 WINAPI acmFilterChoose16( LPACMFILTERCHOOSE16 pafltrc) { FIXME("(%p): stub\n", pafltrc); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmFilterDetails (MSACM.61) */ MMRESULT16 WINAPI acmFilterDetails16( HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd, DWORD fdwDetails) { FIXME("(0x%04x, %p, %d): stub\n", had, pafd, fdwDetails); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmFilterEnum (MSACM.62) */ MMRESULT16 WINAPI acmFilterEnum16( HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd, ACMFILTERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum) { FIXME("(0x%04x, %p, %p, %d, %d): stub\n", had, pafd, fnCallback, dwInstance, fdwEnum ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmStreamOpen (MSACM.70) */ MMRESULT16 WINAPI acmStreamOpen16( LPHACMSTREAM16 phas, HACMDRIVER16 had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen) { HACMSTREAM strm; MMRESULT ret; if (fdwOpen & ACM_STREAMOPENF_ASYNC) { FIXME("ASYNC not supported\n"); return MMSYSERR_ERROR; } ret = acmStreamOpen(&strm, had, pwfxSrc, pwfxDst, pwfltr, dwCallback, dwInstance, fdwOpen); *phas = HACMSTREAM_16(strm); return ret; } /*********************************************************************** * acmStreamClose (MSACM.71) */ MMRESULT16 WINAPI acmStreamClose16( HACMSTREAM16 has, DWORD fdwClose) { MMRESULT ret; HACMSTREAM has32 = HACMSTREAM_32(has); ret = acmStreamClose(has32, fdwClose); if (!ret) K32WOWHandle16DestroyHint(has32, WOW_TYPE_HAS); return ret; } /*********************************************************************** * acmStreamSize (MSACM.72) */ MMRESULT16 WINAPI acmStreamSize16( HACMSTREAM16 has, DWORD cbInput, LPDWORD pdwOutputBytes, DWORD fdwSize) { return acmStreamSize(HACMSTREAM_32(has), cbInput, pdwOutputBytes, fdwSize); } /*********************************************************************** * acmStreamConvert (MSACM.75) */ MMRESULT16 WINAPI acmStreamConvert16( HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwConvert) { MMRESULT ret; LPACMSTREAMHEADER pash32 = pash->dwReservedDriver[0]; pash32->fdwStatus = pash->fdwStatus; pash32->dwUser = pash->dwUser; pash32->pbSrc = MapSL(pash->pbSrc); pash32->cbSrcLength = pash->cbSrcLength; pash32->dwSrcUser = pash->dwSrcUser; pash32->pbDst = MapSL(pash->pbDst); pash32->cbDstLength = pash->cbDstLength; pash32->dwDstUser = pash->dwDstUser; ret = acmStreamConvert(HACMSTREAM_32(has), pash32, fdwConvert); pash->fdwStatus = pash32->fdwStatus; pash->cbSrcLengthUsed = pash32->cbSrcLengthUsed; pash->cbDstLengthUsed = pash32->cbDstLengthUsed; return ret; } /*********************************************************************** * acmStreamReset (MSACM.76) */ MMRESULT16 WINAPI acmStreamReset16( HACMSTREAM16 has, DWORD fdwReset) { FIXME("(0x%04x, %d): stub\n", has, fdwReset); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return MMSYSERR_ERROR; } /*********************************************************************** * acmStreamPrepareHeader (MSACM.77) */ MMRESULT16 WINAPI acmStreamPrepareHeader16( HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwPrepare) { MMRESULT ret; LPACMSTREAMHEADER pash32 = HeapAlloc(GetProcessHeap(), 0, sizeof(ACMSTREAMHEADER)); pash32->cbStruct = sizeof(ACMSTREAMHEADER); pash32->fdwStatus = pash->fdwStatus; pash32->dwUser = pash->dwUser; pash32->pbSrc = MapSL(pash->pbSrc); pash32->cbSrcLength = pash->cbSrcLength; pash32->dwSrcUser = pash->dwSrcUser; pash32->pbDst = MapSL(pash->pbDst); pash32->cbDstLength = pash->cbDstLength; pash32->dwDstUser = pash->dwDstUser; ret = acmStreamPrepareHeader(HACMSTREAM_32(has), pash32, fdwPrepare); if (!ret) { pash->dwReservedDriver[0] = pash32; pash->fdwStatus = pash32->fdwStatus; } else HeapFree(GetProcessHeap(), 0, pash32); return ret; } /*********************************************************************** * acmStreamUnprepareHeader (MSACM.78) */ MMRESULT16 WINAPI acmStreamUnprepareHeader16( HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwUnprepare) { MMRESULT ret; LPACMSTREAMHEADER pash32 = pash->dwReservedDriver[0]; ret = acmStreamUnprepareHeader(HACMSTREAM_32(has), pash32, fdwUnprepare); if (!ret) HeapFree(GetProcessHeap(), 0, pash32); return ret; } /*********************************************************************** * ACMAPPLICATIONEXIT (MSACM.150) * FIXME * No documentation found. */ /*********************************************************************** * ACMHUGEPAGELOCK (MSACM.175) *FIXME * No documentation found. */ /*********************************************************************** * ACMHUGEPAGEUNLOCK (MSACM.176) * FIXME * No documentation found. */ /*********************************************************************** * ACMOPENCONVERSION (MSACM.200) * FIXME * No documentation found. */ /*********************************************************************** * ACMCLOSECONVERSION (MSACM.201) * FIXME * No documentation found. */ /*********************************************************************** * ACMCONVERT (MSACM.202) * FIXME * No documentation found. */ /*********************************************************************** * ACMCHOOSEFORMAT (MSACM.203) * FIXME * No documentation found. */ ================================================ FILE: msacm/msacm.def ================================================ ; File generated automatically from msacm\msacm.dll16.spec; do not edit! LIBRARY msacm.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: msacm/msacm.dll16.spec ================================================ # 1 stub WEP 2 stub DRIVERPROC 3 pascal DllEntryPoint(long word word word long word) DllEntryPoint16 4 stub ___EXPORTEDSTUB 7 pascal acmGetVersion() acmGetVersion16 8 pascal -ret16 acmMetrics(word word ptr) acmMetrics16 10 pascal -ret16 acmDriverEnum(ptr long long) acmDriverEnum16 11 pascal -ret16 acmDriverDetails(word ptr long) acmDriverDetails16 12 pascal -ret16 acmDriverAdd(ptr word long long long) acmDriverAdd16 13 pascal -ret16 acmDriverRemove(word long) acmDriverRemove16 14 pascal -ret16 acmDriverOpen(ptr word long) acmDriverOpen16 15 pascal -ret16 acmDriverClose(word long) acmDriverClose16 16 pascal acmDriverMessage(word word long long) acmDriverMessage16 17 pascal -ret16 acmDriverID(word ptr long) acmDriverID16 18 pascal -ret16 acmDriverPriority(word long long) acmDriverPriority16 30 pascal -ret16 acmFormatTagDetails(word ptr long) acmFormatTagDetails16 31 pascal -ret16 acmFormatTagEnum(word ptr ptr long long) acmFormatTagEnum16 40 pascal -ret16 acmFormatChoose(ptr) acmFormatChoose16 41 pascal -ret16 acmFormatDetails(word ptr long) acmFormatDetails16 42 pascal -ret16 acmFormatEnum(word ptr ptr long long) acmFormatEnum16 45 pascal -ret16 acmFormatSuggest(word ptr ptr long long) acmFormatSuggest16 50 pascal -ret16 acmFilterTagDetails(word ptr long) acmFilterTagDetails16 51 pascal -ret16 acmFilterTagEnum(word ptr ptr long long) acmFilterTagEnum16 60 pascal -ret16 acmFilterChoose(ptr) acmFilterChoose16 61 pascal -ret16 acmFilterDetails(word ptr long) acmFilterDetails16 62 pascal -ret16 acmFilterEnum(word ptr ptr long long) acmFilterEnum16 70 pascal -ret16 acmStreamOpen(ptr word ptr ptr ptr long long long) acmStreamOpen16 71 pascal -ret16 acmStreamClose(word long) acmStreamClose16 72 pascal -ret16 acmStreamSize(word long ptr long) acmStreamSize16 75 pascal -ret16 acmStreamConvert(word ptr long) acmStreamConvert16 76 pascal -ret16 acmStreamReset(word long) acmStreamReset16 77 pascal -ret16 acmStreamPrepareHeader(word ptr long) acmStreamPrepareHeader16 78 pascal -ret16 acmStreamUnprepareHeader(word ptr long) acmStreamUnprepareHeader16 150 stub ACMAPPLICATIONEXIT 175 stub ACMHUGEPAGELOCK 176 stub ACMHUGEPAGEUNLOCK 200 stub ACMOPENCONVERSION 201 stub ACMCLOSECONVERSION 202 stub ACMCONVERT 203 stub ACMCHOOSEFORMAT ================================================ FILE: msacm/msacm.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 msacm {FA7FFBC0-45A5-4419-B18C-DEC8363C2413} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; msacm32.lib;%(AdditionalDependencies) true msacm.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false msacm.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; msacm32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" MSACM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: msacm/wineacm16.h ================================================ /* * Copyright 2000 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINEACM16_H #define __WINE_WINEACM16_H #include "wine/windef16.h" #include "wine/mmsystem16.h" /*********************************************************************** * Win16 definitions */ typedef BOOL16 (CALLBACK *ACMDRIVERENUMCB16)( HACMDRIVERID16 hadid, DWORD dwInstance, DWORD fdwSupport ); typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROC16)( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); typedef UINT16 (CALLBACK *ACMFORMATCHOOSEHOOKPROC16)( HWND16 hwnd, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam ); typedef struct _ACMDRIVERDETAILS16 { DWORD cbStruct; FOURCC fccType; FOURCC fccComp; WORD wMid; WORD wPid; DWORD vdwACM; DWORD vdwDriver; DWORD fdwSupport; DWORD cFormatTags; DWORD cFilterTags; HICON16 hicon; CHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; CHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; CHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; CHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; CHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; } ACMDRIVERDETAILS16, *NPACMDRIVERDETAILS16, *LPACMDRIVERDETAILS16; typedef struct _ACMFILTERCHOOSE16 { DWORD cbStruct; DWORD fdwStyle; HWND16 hwndOwner; LPWAVEFILTER pwfltr; DWORD cbwfltr; LPCSTR pszTitle; char szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS]; char szFilter[ACMFILTERDETAILS_FILTER_CHARS]; LPSTR pszName; DWORD cchName; DWORD fdwEnum; LPWAVEFILTER pwfltrEnum; HINSTANCE16 hInstance; LPCSTR pszTemplateName; LPARAM lCustData; ACMFILTERCHOOSEHOOKPROC16 pfnHook; } ACMFILTERCHOOSE16, *NPACMFILTERCHOOSE16, *LPACMFILTERCHOOSE16; typedef struct _ACMFILTERDETAILS16 { DWORD cbStruct; DWORD dwFilterIndex; DWORD dwFilterTag; DWORD fdwSupport; LPWAVEFILTER pwfltr; DWORD cbwfltr; CHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS]; } ACMFILTERDETAILS16, *NPACMFILTERDETAILS16, *LPACMFILTERDETAILS16; typedef struct _ACMFILTERTAGDETAILS16 { DWORD cbStruct; DWORD dwFilterTagIndex; DWORD dwFilterTag; DWORD cbFilterSize; DWORD fdwSupport; DWORD cStandardFilters; CHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS]; } ACMFILTERTAGDETAILS16, *NPACMFILTERTAGDETAILS16, *LPACMFILTERTAGDETAILS16; typedef struct _ACMFORMATCHOOSE16 { DWORD cbStruct; DWORD fdwStyle; HWND16 hwndOwner; LPWAVEFORMATEX pwfx; DWORD cbwfx; LPCSTR pszTitle; CHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; CHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; LPSTR pszName; DWORD cchName; DWORD fdwEnum; LPWAVEFORMATEX pwfxEnum; HINSTANCE16 hInstance; LPCSTR pszTemplateName; LPARAM lCustData; ACMFORMATCHOOSEHOOKPROC16 pfnHook; } ACMFORMATCHOOSE16, *NPACMFORMATCHOOSE16, *LPACMFORMATCHOOSE16; typedef struct _ACMFORMATDETAILS16 { DWORD cbStruct; DWORD dwFormatIndex; DWORD dwFormatTag; DWORD fdwSupport; LPWAVEFORMATEX pwfx; DWORD cbwfx; CHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; } ACMFORMATDETAILS16, *NPACMFORMATDETAILS16, *LPACMFORMATDETAILS16; typedef struct _ACMFORMATTAGDETAILS16 { DWORD cbStruct; DWORD dwFormatTagIndex; DWORD dwFormatTag; DWORD cbFormatSize; DWORD fdwSupport; DWORD cStandardFormats; CHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; } ACMFORMATTAGDETAILS16, *NPACMFORMATTAGDETAILS16, *LPACMFORMATTAGDETAILS16; typedef ACMSTREAMHEADER ACMSTREAMHEADER16, *NPACMSTREAMHEADER16, *LPACMSTREAMHEADER16; typedef BOOL16 (CALLBACK *ACMFILTERENUMCB16)( HACMDRIVERID16 hadid, LPACMFILTERDETAILS16 pafd, DWORD dwInstance, DWORD fdwSupport ); typedef BOOL16 (CALLBACK *ACMFILTERTAGENUMCB16)( HACMDRIVERID16 hadid, LPACMFILTERTAGDETAILS16 paftd, DWORD dwInstance, DWORD fdwSupport ); typedef BOOL16 (CALLBACK *ACMFORMATENUMCB16)( HACMDRIVERID16 hadid, LPACMFORMATDETAILS16 pafd, DWORD dwInstance, DWORD fdwSupport ); typedef BOOL16 (CALLBACK *ACMFORMATTAGENUMCB16)( HACMDRIVERID16 hadid, LPACMFORMATTAGDETAILS16 paftd, DWORD dwInstance, DWORD fdwSupport ); /*********************************************************************** * Functions - Win16 */ DWORD WINAPI acmGetVersion16(void); MMRESULT16 WINAPI acmMetrics16( HACMOBJ16 hao, UINT16 uMetric, LPVOID pMetric ); MMRESULT16 WINAPI acmDriverEnum16( ACMDRIVERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum ); MMRESULT16 WINAPI acmDriverDetails16( HACMDRIVERID16 hadid, LPACMDRIVERDETAILS16 padd, DWORD fdwDetails ); MMRESULT16 WINAPI acmDriverAdd16( LPHACMDRIVERID16 phadid, HINSTANCE16 hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd ); MMRESULT16 WINAPI acmDriverRemove16( HACMDRIVERID16 hadid, DWORD fdwRemove ); MMRESULT16 WINAPI acmDriverOpen16( LPHACMDRIVER16 phad, HACMDRIVERID16 hadid, DWORD fdwOpen ); MMRESULT16 WINAPI acmDriverClose16( HACMDRIVER16 had, DWORD fdwClose ); LRESULT WINAPI acmDriverMessage16( HACMDRIVER16 had, UINT16 uMsg, LPARAM lParam1, LPARAM lParam2 ); MMRESULT16 WINAPI acmDriverID16( HACMOBJ16 hao, LPHACMDRIVERID16 phadid, DWORD fdwDriverID ); MMRESULT16 WINAPI acmDriverPriority16( HACMDRIVERID16 hadid, DWORD dwPriority, DWORD fdwPriority ); MMRESULT16 WINAPI acmFormatTagDetails16( HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd, DWORD fdwDetails ); MMRESULT16 WINAPI acmFormatTagEnum16( HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd, ACMFORMATTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum ); MMRESULT16 WINAPI acmFormatChoose16( LPACMFORMATCHOOSE16 pafmtc ); MMRESULT16 WINAPI acmFormatDetails16( HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd, DWORD fdwDetails ); MMRESULT16 WINAPI acmFormatEnum16( HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd, ACMFORMATENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum ); MMRESULT16 WINAPI acmFormatSuggest16( HACMDRIVER16 had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, DWORD cbwfxDst, DWORD fdwSuggest ); MMRESULT16 WINAPI acmFilterTagDetails16( HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd, DWORD fdwDetails ); MMRESULT16 WINAPI acmFilterTagEnum16( HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd, ACMFILTERTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum ); MMRESULT16 WINAPI acmFilterChoose16( LPACMFILTERCHOOSE16 pafltrc ); MMRESULT16 WINAPI acmFilterDetails16( HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd, DWORD fdwDetails ); MMRESULT16 WINAPI acmFilterEnum16( HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd, ACMFILTERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum ); MMRESULT16 WINAPI acmStreamOpen16( LPHACMSTREAM16 phas, HACMDRIVER16 had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen ); MMRESULT16 WINAPI acmStreamClose16( HACMSTREAM16 has, DWORD fdwClose ); MMRESULT16 WINAPI acmStreamSize16( HACMSTREAM16 has, DWORD cbInput, LPDWORD pdwOutputBytes, DWORD fdwSize ); MMRESULT16 WINAPI acmStreamConvert16( HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwConvert ); MMRESULT16 WINAPI acmStreamReset16( HACMSTREAM16 has, DWORD fdwReset ); MMRESULT16 WINAPI acmStreamPrepareHeader16( HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwPrepare ); MMRESULT16 WINAPI acmStreamUnprepareHeader16( HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwUnprepare ); #endif /* __WINE_WINEACM16_H */ ================================================ FILE: msvideo/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(msvideo SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/msvideo.def msvideo.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(msvideo.dll16 msvideo) target_link_libraries(msvideo libwine winecrt0 krnl386 mmsystem msvfw32.lib version.lib) set_target_properties(msvideo PROPERTIES SUFFIX ".dll16") ================================================ FILE: msvideo/Makefile.in ================================================ MODULE = msvideo.dll16 IMPORTS = msvfw32 version advapi32 user32 EXTRADLLFLAGS = -m16 -Wb,--main-module,msvfw32.dll C_SRCS = msvideo16.c ================================================ FILE: msvideo/msvideo.def ================================================ ; File generated automatically from msvideo\msvideo.dll16.spec; do not edit! LIBRARY msvideo.dll16 EXPORTS _wine_spec_dos_header @1 DATA get_video_thunk ================================================ FILE: msvideo/msvideo.dll16.spec ================================================ #1 pascal WEP(word) 2 pascal VideoForWindowsVersion() VideoForWindowsVersion 3 pascal DllEntryPoint(long word word word long word) VIDEO_LibMain 20 pascal videoGetNumDevs() videoGetNumDevs16 21 pascal videoGetErrorText(word word str word) videoGetErrorText16 22 pascal VideoCapDriverDescAndVer(word ptr word ptr word) VideoCapDriverDescAndVer16 28 pascal videoOpen(ptr long long) videoOpen16 29 pascal videoClose(word) videoClose16 30 pascal videoDialog(word word long) videoDialog16 31 pascal videoFrame(word ptr) videoFrame16 32 pascal videoConfigure(word word long ptr ptr long ptr long) videoConfigure16 33 pascal videoConfigureStorage(word str long) videoConfigureStorage16 34 pascal videoGetChannelCaps(word ptr long) videoGetChannelCaps16 35 pascal videoUpdate(word word word) videoUpdate16 40 pascal videoStreamAddBuffer(word ptr long) videoStreamAddBuffer16 41 pascal videoStreamFini(word) videoStreamFini16 42 pascal videoStreamGetError(word ptr ptr) videoStreamGetError16 43 pascal videoStreamGetPosition(word ptr long) videoStreamGetPosition16 44 pascal videoStreamInit(word long long long long) videoStreamInit16 46 pascal videoStreamPrepareHeader(word ptr long) videoStreamPrepareHeader16 47 pascal videoStreamReset(word) videoStreamReset16 49 pascal videoStreamStart(word) videoStreamStart16 50 pascal videoStreamStop(word) videoStreamStop16 51 pascal videoStreamUnprepareHeader(word ptr long) videoStreamUnprepareHeader16 52 pascal videoStreamAllocHdrAndBuffer(word ptr long) videoStreamAllocHdrAndBuffer16 53 pascal videoStreamFreeHdrAndBuffer(word ptr) videoStreamFreeHdrAndBuffer16 60 pascal videoMessage(word word long long) videoMessage16 102 pascal -ret16 DrawDibOpen() DrawDibOpen16 103 pascal -ret16 DrawDibClose(word) DrawDibClose16 104 pascal -ret16 DrawDibBegin(word word s_word s_word ptr s_word s_word word) DrawDibBegin16 105 pascal -ret16 DrawDibEnd(word) DrawDibEnd16 106 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 108 pascal -ret16 DrawDibGetPalette(word) DrawDibGetPalette16 110 pascal -ret16 DrawDibSetPalette(word word) DrawDibSetPalette16 111 stub DRAWDIBCHANGEPALETTE 112 pascal -ret16 DrawDibRealize(word word word) DrawDibRealize16 113 stub DRAWDIBTIME 114 pascal -ret16 DrawDibProfileDisplay(ptr) DrawDibProfileDisplay16 115 stub STRETCHDIB 118 pascal -ret16 DrawDibStart(word long) DrawDibStart16 119 pascal -ret16 DrawDibStop(word) DrawDibStop16 120 stub DRAWDIBGETBUFFER 200 pascal -ret16 ICInfo(long long segptr) ICInfo16 201 pascal -ret16 ICInstall(long long long ptr word) ICInstall16 202 pascal -ret16 ICRemove(long long word) ICRemove16 203 pascal -ret16 ICOpen(long long word) ICOpen16 204 pascal ICClose(word) ICClose16 205 pascal ICSendMessage(word word long long) ICSendMessage16 206 pascal -ret16 ICOpenFunction(long long word segptr) ICOpenFunction16 207 varargs _ICMessage(word word word) ICMessage16 212 pascal ICGetInfo(word segptr long) ICGetInfo16 213 pascal -ret16 ICLocate(long long ptr ptr word) ICLocate16 224 cdecl _ICCompress(word long segptr segptr segptr segptr segptr segptr long long long segptr segptr) ICCompress16 230 cdecl _ICDecompress(word long segptr segptr segptr segptr) ICDecompress16 232 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 234 cdecl _ICDraw(word long segptr segptr long long) ICDraw16 239 pascal -ret16 ICGetDisplayFormat(word ptr ptr s_word s_word s_word) ICGetDisplayFormat16 240 stub ICIMAGECOMPRESS 241 stub ICIMAGEDECOMPRESS 242 stub ICCOMPRESSORCHOOSE 243 stub ICCOMPRESSORFREE 244 stub ICSEQCOMPRESSFRAMESTART 245 stub ICSEQCOMPRESSFRAMEEND 246 stub ICSEQCOMPRESSFRAME 250 cdecl _MCIWndCreate(word word long str) MCIWndCreate16 251 cdecl _MCIWndRegisterClass() MCIWndRegisterClass16 252 stub GETOPENFILENAMEPREVIEW 253 stub GETSAVEFILENAMEPREVIEW @ cdecl -arch=win32 get_video_thunk(long) ================================================ FILE: msvideo/msvideo.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 msvideo {0DCF5163-4049-4850-92BE-5D6A2444C51D} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;$(OutDir)mmsystem.lib; msvfw32.lib;version.lib;advapi32.lib;user32.lib;%(AdditionalDependencies) true msvideo.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false msvideo.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;$(OutDir)mmsystem.lib; msvfw32.lib;version.lib;advapi32.lib;user32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" MSVIDEO > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: msvideo/msvideo16.c ================================================ /* * msvideo 16-bit functions * * Copyright 1998 Marcus Meissner * Copyright 2000 Bradley Baetz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "port.h" #include #include #include #include "windef.h" #include "winbase.h" #include "winver.h" #include "winnls.h" #include "winreg.h" #include "winuser.h" #include "wine/winbase16.h" #include "wownt32.h" #include "vfw16.h" #include "wine/debug.h" #include "wine/mmsystem16.h" #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) WINE_DEFAULT_DEBUG_CHANNEL(msvideo); /* Drivers32 settings */ #define HKLM_DRIVERS32 "Software\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32" #define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1) /* handle16 --> handle conversions */ #define HDRAWDIB_32(h16) ((HDRAWDIB)WOWHandle32(h16, WOW_TYPE_HANDLE)) #define HIC_32(h16) ((HIC)WOWHandle32(h16, WOW_TYPE_HANDLE)) /* handle --> handle16 conversions */ #define HDRVR_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HDRAWDIB_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) #define HIC_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE) /*********************************************************************** * DrawDibOpen [MSVIDEO.102] */ HDRAWDIB16 VFWAPI DrawDibOpen16(void) { return HDRAWDIB_16(DrawDibOpen()); } /*********************************************************************** * DrawDibClose [MSVIDEO.103] */ BOOL16 VFWAPI DrawDibClose16(HDRAWDIB16 hdd) { return DrawDibClose(HDRAWDIB_32(hdd)); } /************************************************************************ * DrawDibBegin [MSVIDEO.104] */ BOOL16 VFWAPI DrawDibBegin16(HDRAWDIB16 hdd, HDC16 hdc, INT16 dxDst, INT16 dyDst, LPBITMAPINFOHEADER lpbi, INT16 dxSrc, INT16 dySrc, UINT16 wFlags) { return DrawDibBegin(HDRAWDIB_32(hdd), HDC_32(hdc), dxDst, dyDst, lpbi, dxSrc, dySrc, wFlags); } /*********************************************************************** * DrawDibEnd [MSVIDEO.105] */ BOOL16 VFWAPI DrawDibEnd16(HDRAWDIB16 hdd) { return DrawDibEnd(HDRAWDIB_32(hdd)); } /********************************************************************** * DrawDibDraw [MSVIDEO.106] */ BOOL16 VFWAPI DrawDibDraw16(HDRAWDIB16 hdd, HDC16 hdc, INT16 xDst, INT16 yDst, INT16 dxDst, INT16 dyDst, LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT16 xSrc, INT16 ySrc, INT16 dxSrc, INT16 dySrc, UINT16 wFlags) { return DrawDibDraw(HDRAWDIB_32(hdd), HDC_32(hdc), xDst, yDst, dxDst, dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, wFlags); } /*********************************************************************** * DrawDibGetPalette [MSVIDEO.108] */ HPALETTE16 VFWAPI DrawDibGetPalette16(HDRAWDIB16 hdd) { return HPALETTE_16(DrawDibGetPalette(HDRAWDIB_32(hdd))); } /*********************************************************************** * DrawDibSetPalette [MSVIDEO.110] */ BOOL16 VFWAPI DrawDibSetPalette16(HDRAWDIB16 hdd, HPALETTE16 hpal) { return DrawDibSetPalette(HDRAWDIB_32(hdd), HPALETTE_32(hpal)); } /*********************************************************************** * DrawDibRealize [MSVIDEO.112] */ UINT16 VFWAPI DrawDibRealize16(HDRAWDIB16 hdd, HDC16 hdc, BOOL16 fBackground) { return (UINT16)DrawDibRealize(HDRAWDIB_32(hdd), HDC_32(hdc), fBackground); } /************************************************************************* * DrawDibProfileDisplay [MSVIDEO.114] */ BOOL16 VFWAPI DrawDibProfileDisplay16(LPBITMAPINFOHEADER lpbi) { TRACE("(%p)\n", lpbi); return DrawDibProfileDisplay(lpbi); } /************************************************************************* * DrawDibStart [MSVIDEO.118] */ BOOL16 VFWAPI DrawDibStart16(HDRAWDIB16 hdd, DWORD rate) { return DrawDibStart(HDRAWDIB_32(hdd), rate); } /************************************************************************* * DrawDibStop [MSVIDEO.119] */ BOOL16 VFWAPI DrawDibStop16(HDRAWDIB16 hdd) { return DrawDibStop(HDRAWDIB_32(hdd)); } BOOL16 WINAPI ICInstall16(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT16 wFlags); /*********************************************************************** * ICOpen [MSVIDEO.203] */ HIC16 VFWAPI ICOpen16(DWORD fccType, DWORD fccHandler, UINT16 wMode) { HIC16 ret = HIC_16(ICOpen(fccType, fccHandler, wMode)); if (!ret) { char key[10], sysini[MAX_PATH], drvfile[MAX_PATH]; sprintf(key, "%4.4s.%4.4s", (char *)&fccType, (char *)&fccHandler); DWORD size = GetPrivateProfileStringA("drivers", key, NULL, drvfile, MAX_PATH, RedirectSystemDir("c:\\windows\\system.ini", sysini, MAX_PATH)); if (size) { if (ICInstall16(fccType, fccHandler, drvfile, NULL, ICINSTALL_DRIVER)) ret = HIC_16(ICOpen(fccType, fccHandler, wMode)); } } return ret; } /*********************************************************************** * _ICMessage [MSVIDEO.207] */ LRESULT VFWAPIV ICMessage16( HIC16 hic, UINT16 msg, UINT16 cb, VA_LIST16 valist ) { LPWORD lpData; SEGPTR segData; LRESULT ret; UINT16 i; lpData = HeapAlloc(GetProcessHeap(), 0, cb); TRACE("0x%08x, %u, %u, ...)\n", (DWORD) hic, msg, cb); for (i = 0; i < cb / sizeof(WORD); i++) { lpData[i] = VA_ARG16(valist, WORD); } segData = MapLS(lpData); ret = ICSendMessage16(hic, msg, segData, (DWORD) cb); UnMapLS(segData); HeapFree(GetProcessHeap(), 0, lpData); return ret; } /*********************************************************************** * ICGetInfo [MSVIDEO.212] */ LRESULT VFWAPI ICGetInfo16(HIC16 hic, ICINFO16 * picinfo, DWORD cb) { LRESULT ret; TRACE("(0x%08x,%p,%d)\n", (DWORD) hic, picinfo, cb); ret = ICSendMessage16(hic, ICM_GETINFO, (DWORD) picinfo, cb); TRACE(" -> 0x%08lx\n", ret); return ret; } /*********************************************************************** * ICLocate [MSVIDEO.213] */ HIC16 VFWAPI ICLocate16(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags) { return HIC_16(ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, wFlags)); } /*********************************************************************** * _ICCompress [MSVIDEO.224] */ DWORD VFWAPIV ICCompress16(HIC16 hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiOutput, LPVOID lpData, LPBITMAPINFOHEADER lpbiInput, LPVOID lpBits, LPDWORD lpckid, LPDWORD lpdwFlags, LONG lFrameNum, DWORD dwFrameSize, DWORD dwQuality, LPBITMAPINFOHEADER lpbiPrev, LPVOID lpPrev) { DWORD ret; ICCOMPRESS iccmp; SEGPTR seg_iccmp; TRACE("(0x%08x,%d,%p,%p,%p,%p,...)\n", (DWORD) hic, dwFlags, lpbiOutput, lpData, lpbiInput, lpBits); iccmp.dwFlags = dwFlags; iccmp.lpbiOutput = lpbiOutput; iccmp.lpOutput = lpData; iccmp.lpbiInput = lpbiInput; iccmp.lpInput = lpBits; iccmp.lpckid = lpckid; iccmp.lpdwFlags = lpdwFlags; iccmp.lFrameNum = lFrameNum; iccmp.dwFrameSize = dwFrameSize; iccmp.dwQuality = dwQuality; iccmp.lpbiPrev = lpbiPrev; iccmp.lpPrev = lpPrev; seg_iccmp = MapLS(&iccmp); ret = ICSendMessage16(hic, ICM_COMPRESS, seg_iccmp, sizeof(ICCOMPRESS)); UnMapLS(seg_iccmp); return ret; } /*********************************************************************** * _ICDecompress [MSVIDEO.230] */ DWORD VFWAPIV ICDecompress16(HIC16 hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiFormat, LPVOID lpData, LPBITMAPINFOHEADER lpbi, LPVOID lpBits) { ICDECOMPRESS icd; SEGPTR segptr; DWORD ret; TRACE("(0x%08x,%d,%p,%p,%p,%p)\n", (DWORD) hic, dwFlags, lpbiFormat, lpData, lpbi, lpBits); icd.dwFlags = dwFlags; icd.lpbiInput = lpbiFormat; icd.lpInput = lpData; icd.lpbiOutput = lpbi; icd.lpOutput = lpBits; icd.ckid = 0; segptr = MapLS(&icd); ret = ICSendMessage16(hic, ICM_DECOMPRESS, segptr, sizeof(ICDECOMPRESS)); UnMapLS(segptr); return ret; } /*********************************************************************** * _ICDrawBegin [MSVIDEO.232] */ DWORD VFWAPIV ICDrawBegin16(HIC16 hic, /* [in] */ DWORD dwFlags, /* [in] flags */ HPALETTE16 hpal, /* [in] palette to draw with */ HWND16 hwnd, /* [in] window to draw to */ HDC16 hdc, /* [in] HDC to draw to */ INT16 xDst, /* [in] destination rectangle */ INT16 yDst, /* [in] */ INT16 dxDst, /* [in] */ INT16 dyDst, /* [in] */ LPBITMAPINFOHEADER lpbi, /* [in] format of frame to draw NOTE: SEGPTR */ INT16 xSrc, /* [in] source rectangle */ INT16 ySrc, /* [in] */ INT16 dxSrc, /* [in] */ INT16 dySrc, /* [in] */ DWORD dwRate, /* [in] frames/second = (dwRate/dwScale) */ DWORD dwScale) /* [in] */ { DWORD ret; ICDRAWBEGIN16 icdb; SEGPTR seg_icdb; TRACE ("(0x%08x,%d,0x%08x,0x%08x,0x%08x,%u,%u,%u,%u,%p,%u,%u,%u,%u,%d,%d)\n", (DWORD) hic, dwFlags, (DWORD) hpal, (DWORD) hwnd, (DWORD) hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale); icdb.dwFlags = dwFlags; icdb.hpal = hpal; icdb.hwnd = hwnd; icdb.hdc = hdc; icdb.xDst = xDst; icdb.yDst = yDst; icdb.dxDst = dxDst; icdb.dyDst = dyDst; icdb.lpbi = lpbi; /* Keep this as SEGPTR for the mapping code to deal with */ icdb.xSrc = xSrc; icdb.ySrc = ySrc; icdb.dxSrc = dxSrc; icdb.dySrc = dySrc; icdb.dwRate = dwRate; icdb.dwScale = dwScale; seg_icdb = MapLS(&icdb); ret = (DWORD) ICSendMessage16(hic, ICM_DRAW_BEGIN, seg_icdb, sizeof(ICDRAWBEGIN16)); UnMapLS(seg_icdb); return ret; } /*********************************************************************** * _ICDraw [MSVIDEO.234] */ DWORD VFWAPIV ICDraw16(HIC16 hic, DWORD dwFlags, LPVOID lpFormat, /* [???] NOTE: SEGPTR */ LPVOID lpData, /* [???] NOTE: SEGPTR */ DWORD cbData, LONG lTime) { DWORD ret; ICDRAW icd; SEGPTR seg_icd; TRACE("(0x%08x,0x%08x,%p,%p,%d,%d)\n", (DWORD) hic, dwFlags, lpFormat, lpData, cbData, lTime); icd.dwFlags = dwFlags; icd.lpFormat = lpFormat; icd.lpData = lpData; icd.cbData = cbData; icd.lTime = lTime; seg_icd = MapLS(&icd); ret = ICSendMessage16(hic, ICM_DRAW, seg_icd, sizeof(ICDRAW)); UnMapLS(seg_icd); return ret; } /*********************************************************************** * ICGetDisplayFormat [MSVIDEO.239] */ HIC16 VFWAPI ICGetDisplayFormat16(HIC16 hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, INT16 depth, INT16 dx, INT16 dy) { return HIC_16(ICGetDisplayFormat(HIC_32(hic), lpbiIn, lpbiOut, depth, dx, dy)); } #define COPY(x,y) (x->y = x##16->y); #define COPYPTR(x,y) (x->y = MapSL((SEGPTR)x##16->y)); /****************************************************************** * MSVIDEO_MapICDEX16To32 * * */ static LPVOID MSVIDEO_MapICDEX16To32(LPDWORD lParam) { LPVOID ret; ICDECOMPRESSEX *icdx = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDECOMPRESSEX)); ICDECOMPRESSEX16 *icdx16 = MapSL(*lParam); ret = icdx16; COPY(icdx, dwFlags); COPYPTR(icdx, lpbiSrc); COPYPTR(icdx, lpSrc); COPYPTR(icdx, lpbiDst); COPYPTR(icdx, lpDst); COPY(icdx, xDst); COPY(icdx, yDst); COPY(icdx, dxDst); COPY(icdx, dyDst); COPY(icdx, xSrc); COPY(icdx, ySrc); COPY(icdx, dxSrc); COPY(icdx, dySrc); *lParam = (DWORD)(icdx); return ret; } /****************************************************************** * MSVIDEO_MapMsg16To32 * * */ static LPVOID MSVIDEO_MapMsg16To32(UINT msg, LPDWORD lParam1, LPDWORD lParam2) { LPVOID ret = 0; TRACE("Mapping %d\n", msg); switch (msg) { case DRV_LOAD: case DRV_ENABLE: case DRV_CLOSE: case DRV_DISABLE: case DRV_FREE: case ICM_COMPRESS_END: case ICM_DECOMPRESS_END: case ICM_DECOMPRESSEX_END: case ICM_SETQUALITY: case ICM_DRAW_START_PLAY: case ICM_DRAW_STOP_PLAY: case ICM_DRAW_REALIZE: case ICM_DRAW_RENDERBUFFER: case ICM_DRAW_END: case 0x4016: // not documented break; case DRV_OPEN: case ICM_GETDEFAULTQUALITY: case ICM_GETQUALITY: case ICM_GETSTATE: case ICM_SETSTATE: case ICM_DRAW_WINDOW: case ICM_GETBUFFERSWANTED: case ICM_GETDEFAULTKEYFRAMERATE: *lParam1 = (DWORD)MapSL(*lParam1); break; case ICM_ABOUT: case ICM_CONFIGURE: *lParam1 = HWND_32(*lParam1); break; case ICM_GETINFO: { ICINFO *ici = HeapAlloc(GetProcessHeap(), 0, sizeof(ICINFO)); ICINFO16 *ici16; ici16 = MapSL(*lParam1); ret = ici16; ici->dwSize = sizeof(ICINFO); COPY(ici, fccType); COPY(ici, fccHandler); COPY(ici, dwFlags); COPY(ici, dwVersion); COPY(ici, dwVersionICM); MultiByteToWideChar( CP_ACP, 0, ici16->szName, -1, ici->szName, 16 ); MultiByteToWideChar( CP_ACP, 0, ici16->szDescription, -1, ici->szDescription, 128 ); MultiByteToWideChar( CP_ACP, 0, ici16->szDriver, -1, ici->szDriver, 128 ); *lParam1 = (DWORD)(ici); *lParam2 = sizeof(ICINFO); } break; case ICM_COMPRESS: { ICCOMPRESS *icc = HeapAlloc(GetProcessHeap(), 0, sizeof(ICCOMPRESS)); ICCOMPRESS *icc16; icc16 = MapSL(*lParam1); ret = icc16; COPY(icc, dwFlags); COPYPTR(icc, lpbiOutput); COPYPTR(icc, lpOutput); COPYPTR(icc, lpbiInput); COPYPTR(icc, lpInput); COPYPTR(icc, lpckid); COPYPTR(icc, lpdwFlags); COPY(icc, lFrameNum); COPY(icc, dwFrameSize); COPY(icc, dwQuality); COPYPTR(icc, lpbiPrev); COPYPTR(icc, lpPrev); *lParam1 = (DWORD)(icc); *lParam2 = sizeof(ICCOMPRESS); } break; case ICM_DECOMPRESS: { ICDECOMPRESS *icd = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDECOMPRESS)); ICDECOMPRESS *icd16; /* Same structure except for the pointers */ icd16 = MapSL(*lParam1); ret = icd16; COPY(icd, dwFlags); COPYPTR(icd, lpbiInput); COPYPTR(icd, lpInput); COPYPTR(icd, lpbiOutput); COPYPTR(icd, lpOutput); COPY(icd, ckid); *lParam1 = (DWORD)(icd); *lParam2 = sizeof(ICDECOMPRESS); } break; case ICM_COMPRESS_BEGIN: case ICM_COMPRESS_GET_FORMAT: case ICM_COMPRESS_GET_SIZE: case ICM_COMPRESS_QUERY: case ICM_DECOMPRESS_GET_FORMAT: case ICM_DECOMPRESS_QUERY: case ICM_DECOMPRESS_BEGIN: case ICM_DECOMPRESS_SET_PALETTE: case ICM_DECOMPRESS_GET_PALETTE: *lParam1 = (DWORD)MapSL(*lParam1); *lParam2 = (DWORD)MapSL(*lParam2); break; case ICM_DECOMPRESSEX_QUERY: if ((*lParam2 != sizeof(ICDECOMPRESSEX16)) && (*lParam2 != 0)) WARN("*lParam2 has unknown value %p\n", (ICDECOMPRESSEX16*)*lParam2); /* FIXME: *lParm2 is meant to be 0 or an ICDECOMPRESSEX16*, but is sizeof(ICDECOMRPESSEX16) * This is because of ICMessage(). Special case it? { LPVOID* addr = HeapAlloc(GetProcessHeap(), 0, 2*sizeof(LPVOID)); addr[0] = MSVIDEO_MapICDEX16To32(lParam1); if (*lParam2) addr[1] = MSVIDEO_MapICDEX16To32(lParam2); else addr[1] = 0; ret = addr; } break;*/ case ICM_DECOMPRESSEX_BEGIN: case ICM_DECOMPRESSEX: ret = MSVIDEO_MapICDEX16To32(lParam1); *lParam2 = sizeof(ICDECOMPRESSEX); break; case ICM_DRAW_BEGIN: { ICDRAWBEGIN *icdb = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAWBEGIN)); ICDRAWBEGIN16 *icdb16 = MapSL(*lParam1); ret = icdb16; COPY(icdb, dwFlags); icdb->hpal = HPALETTE_32(icdb16->hpal); icdb->hwnd = HWND_32(icdb16->hwnd); icdb->hdc = HDC_32(icdb16->hdc); COPY(icdb, xDst); COPY(icdb, yDst); COPY(icdb, dxDst); COPY(icdb, dyDst); COPYPTR(icdb, lpbi); COPY(icdb, xSrc); COPY(icdb, ySrc); COPY(icdb, dxSrc); COPY(icdb, dySrc); COPY(icdb, dwRate); COPY(icdb, dwScale); *lParam1 = (DWORD)(icdb); *lParam2 = sizeof(ICDRAWBEGIN); } break; case ICM_DRAW_SUGGESTFORMAT: { ICDRAWSUGGEST *icds = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAWSUGGEST)); ICDRAWSUGGEST16 *icds16 = MapSL(*lParam1); ret = icds16; ERR("COPY(icds, dwFlags);\n"); //COPY(icds, dwFlags); COPYPTR(icds, lpbiIn); COPYPTR(icds, lpbiSuggest); COPY(icds, dxSrc); COPY(icds, dySrc); COPY(icds, dxDst); COPY(icds, dyDst); icds->hicDecompressor = HIC_32(icds16->hicDecompressor); *lParam1 = (DWORD)(icds); *lParam2 = sizeof(ICDRAWSUGGEST); } break; case ICM_DRAW: { ICDRAW *icd = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAW)); ICDRAW *icd16 = MapSL(*lParam1); ret = icd16; COPY(icd, dwFlags); COPYPTR(icd, lpFormat); COPYPTR(icd, lpData); COPY(icd, cbData); COPY(icd, lTime); *lParam1 = (DWORD)(icd); *lParam2 = sizeof(ICDRAW); } break; case ICM_DRAW_START: case ICM_DRAW_STOP: break; default: FIXME("%d is not yet handled. Expect a crash.\n", msg); } return ret; } #undef COPY #undef COPYPTR /****************************************************************** * MSVIDEO_UnmapMsg16To32 * * */ static void MSVIDEO_UnmapMsg16To32(UINT msg, LPVOID data16, LPDWORD lParam1, LPDWORD lParam2) { TRACE("Unmapping %d\n", msg); #define UNCOPY(x, y) (x##16->y = x->y); switch (msg) { case ICM_GETINFO: { ICINFO *ici = (ICINFO*)(*lParam1); ICINFO16 *ici16 = data16; UNCOPY(ici, fccType); UNCOPY(ici, fccHandler); UNCOPY(ici, dwFlags); UNCOPY(ici, dwVersion); UNCOPY(ici, dwVersionICM); WideCharToMultiByte( CP_ACP, 0, ici->szName, -1, ici16->szName, sizeof(ici16->szName), NULL, NULL ); ici16->szName[sizeof(ici16->szName)-1] = 0; WideCharToMultiByte( CP_ACP, 0, ici->szDescription, -1, ici16->szDescription, sizeof(ici16->szDescription), NULL, NULL ); ici16->szDescription[sizeof(ici16->szDescription)-1] = 0; /* This just gives garbage for some reason - BB lstrcpynWtoA(ici16->szDriver, ici->szDriver, 128);*/ HeapFree(GetProcessHeap(), 0, ici); } break; case ICM_DECOMPRESS_QUERY: /*{ LPVOID* x = data16; HeapFree(GetProcessHeap(), 0, x[0]); if (x[1]) HeapFree(GetProcessHeap(), 0, x[1]); }*/ break; case ICM_COMPRESS: case ICM_DECOMPRESS: case ICM_DECOMPRESSEX_QUERY: case ICM_DECOMPRESSEX_BEGIN: case ICM_DECOMPRESSEX: case ICM_DRAW_BEGIN: case ICM_DRAW_SUGGESTFORMAT: case ICM_DRAW: HeapFree(GetProcessHeap(), 0, *lParam1); break; default: ERR("Unmapping unmapped msg %d\n", msg); } #undef UNCOPY } /*********************************************************************** * ICInfo [MSVIDEO.200] */ BOOL16 VFWAPI ICInfo16(DWORD fccType, DWORD fccHandler, ICINFO16 *lpicinfo) { BOOL16 ret; LPVOID lpv; DWORD lParam = (DWORD)lpicinfo; DWORD size = ((ICINFO*)(MapSL((SEGPTR)lpicinfo)))->dwSize; /* Use the mapping functions to map the ICINFO structure */ lpv = MSVIDEO_MapMsg16To32(ICM_GETINFO, &lParam, &size); ret = ICInfo(fccType, fccHandler, (ICINFO*)lParam); MSVIDEO_UnmapMsg16To32(ICM_GETINFO, lpv, &lParam, &size); return ret; } /****************************************************************** * IC_Callback3216 * * */ static LRESULT CALLBACK IC_Callback3216(DWORD pfn16, HIC hic, HDRVR hdrv, UINT msg, LPARAM lp1, LPARAM lp2) { WORD args[8]; DWORD ret = 0; void *data = (void *)lp1; switch (msg) { case DRV_OPEN: lp2 = (DWORD)MapLS((void*)lp2); break; case ICM_ABOUT: case ICM_CONFIGURE: lp1 = HWND_16(lp1); break; case ICM_GETINFO: { ICINFO16 *ici16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICINFO16)); ICINFO *ici = lp1; ici16->dwSize = sizeof(ICINFO16); ici16->fccType = ici->fccType; ici16->fccHandler = ici->fccHandler; ici16->dwFlags = ici->dwFlags; ici16->dwVersion = ici->dwVersion; ici16->dwVersionICM = ici->dwVersionICM; WideCharToMultiByte( CP_ACP, 0, ici->szName, -1, ici16->szName, sizeof(ici16->szName), NULL, NULL ); ici16->szName[sizeof(ici16->szName)-1] = 0; WideCharToMultiByte( CP_ACP, 0, ici->szDescription, -1, ici16->szDescription, sizeof(ici16->szDescription), NULL, NULL ); ici16->szDescription[sizeof(ici16->szDescription)-1] = 0; WideCharToMultiByte( CP_ACP, 0, ici->szDriver, -1, ici16->szDriver, sizeof(ici16->szDriver), NULL, NULL ); ici16->szDescription[sizeof(ici16->szDescription)-1] = 0; lp1 = MapLS(ici16); lp2 = sizeof(ICINFO16); break; } case ICM_DRAW_BEGIN: { ICDRAWBEGIN16 *icdb16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAWBEGIN16)); ICDRAWBEGIN *icdb = lp1; icdb16->dwFlags = icdb->dwFlags; icdb16->hpal = HPALETTE_16(icdb->hpal); icdb16->hwnd = HWND_16(icdb->hwnd); icdb16->hdc = HDC_16(icdb->hdc); icdb16->xDst = icdb->xDst; icdb16->yDst = icdb->yDst; icdb16->dxDst = icdb->dxDst; icdb16->dyDst = icdb->dyDst; icdb16->lpbi = MapLS(icdb->lpbi); icdb16->xSrc = icdb->xSrc; icdb16->ySrc = icdb->ySrc; icdb16->dxSrc = icdb->dxSrc; icdb16->dySrc = icdb->dySrc; icdb16->dwRate = icdb->dwRate; icdb16->dwScale = icdb->dwScale; lp1 = (LPARAM)(MapLS(icdb16)); lp2 = sizeof(ICDRAWBEGIN16); break; } case ICM_DRAW_SUGGESTFORMAT: { ICDRAWSUGGEST16 *icds16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAWSUGGEST16)); ICDRAWSUGGEST *icds = lp1; icds16->lpbiIn = MapLS(icds->lpbiIn); icds16->lpbiSuggest = MapLS(icds->lpbiSuggest); icds16->dxSrc = icds->dxSrc; icds16->dySrc = icds->dySrc; icds16->dxDst = icds->dxDst; icds16->dyDst = icds->dyDst; icds16->hicDecompressor = HIC_16(icds->hicDecompressor); lp1 = (LPARAM)((char *)MapLS(icds16) + 4); // dwFlags doesn't exist? lp2 = sizeof(ICDRAWSUGGEST16) - 4; break; } case ICM_DRAW_QUERY: case ICM_SETSTATE: case ICM_DRAW_WINDOW: case ICM_GETDEFAULTKEYFRAMERATE: lp1 = (LPARAM)(MapLS(lp1)); break; case ICM_DRAW: { ICDRAW *icd16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAW)); ICDRAW *icd = lp1; DWORD size = icd->cbData; int count = (size + 0xffff) / 0x10000; WORD sel = AllocSelectorArray16(count); for (int i = 0; i < count; i++) { SetSelectorBase(sel + (i << __AHSHIFT), (DWORD)icd->lpData + i * 0x10000); SetSelectorLimit16(sel + (i << __AHSHIFT), size - 1); size -= 0x10000; } icd16->dwFlags = icd->dwFlags; icd16->lpFormat = MapLS(icd->lpFormat); icd16->lpData = sel << 16; icd16->cbData = icd->cbData; icd16->lTime = icd->lTime; lp1 = (LPARAM)(MapLS(icd16)); lp2 = sizeof(ICDRAW); break; } case ICM_DRAW_REALIZE: lp1 = (LPARAM)(HDC_16(lp1)); break; case ICM_COMPRESS_GET_FORMAT: case ICM_COMPRESS_GET_SIZE: case ICM_COMPRESS_QUERY: case ICM_COMPRESS_BEGIN: case ICM_DECOMPRESS_QUERY: case ICM_DECOMPRESS_GET_FORMAT: case ICM_DECOMPRESS_GET_PALETTE: case ICM_DECOMPRESS_BEGIN: lp1 = (LPARAM)(MapLS(lp1)); lp2 = (LPARAM)(MapLS(lp2)); break; case ICM_COMPRESS: { ICCOMPRESS *icc16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICCOMPRESS)); ICCOMPRESS *icc = lp1; DWORD size = icc->lpbiInput->biSizeImage; int count = (size + 0xffff) / 0x10000; WORD insel = AllocSelectorArray16(count); for (int i = 0; i < count; i++) { SetSelectorBase(insel + (i << __AHSHIFT), (DWORD)icc->lpInput + i * 0x10000); SetSelectorLimit16(insel + (i << __AHSHIFT), size - 1); size -= 0x10000; } size = icc->lpbiOutput->biSizeImage; count = (size + 0xffff) / 0x10000; WORD outsel = AllocSelectorArray16(count); for (int i = 0; i < count; i++) { SetSelectorBase(outsel + (i << __AHSHIFT), (DWORD)icc->lpOutput + i * 0x10000); SetSelectorLimit16(outsel + (i << __AHSHIFT), size - 1); size -= 0x10000; } WORD prevsel = 0; if (icc->lpbiPrev) { size = icc->lpbiPrev->biSizeImage; count = (size + 0xffff) / 0x10000; prevsel = AllocSelectorArray16(count); for (int i = 0; i < count; i++) { SetSelectorBase(prevsel + (i << __AHSHIFT), (DWORD)icc->lpPrev + i * 0x10000); SetSelectorLimit16(prevsel + (i << __AHSHIFT), size - 1); size -= 0x10000; } } icc16->dwFlags = icc->dwFlags; icc16->lpbiInput = MapLS(icc->lpbiInput); icc16->lpInput = insel << 16; icc16->lpbiOutput = MapLS(icc->lpbiOutput); icc16->lpOutput = outsel << 16; icc16->lpckid = MapLS(icc->lpckid); icc16->lpdwFlags = MapLS(icc->lpdwFlags); icc16->lFrameNum = icc->lFrameNum; icc16->dwFrameSize = icc->dwFrameSize; icc16->lpbiPrev = prevsel ? MapLS(icc->lpbiPrev) : NULL; icc16->lpPrev = prevsel ? prevsel << 16 : 0; lp1 = (LPARAM)(MapLS(icc16)); lp2 = sizeof(ICCOMPRESS); break; } case ICM_DECOMPRESS: { ICDECOMPRESS *icdec16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDECOMPRESS)); ICDECOMPRESS *icdec = lp1; DWORD size = icdec->lpbiInput->biSizeImage; int count = (size + 0xffff) / 0x10000; WORD insel = AllocSelectorArray16(count); for (int i = 0; i < count; i++) { SetSelectorBase(insel + (i << __AHSHIFT), (DWORD)icdec->lpInput + i * 0x10000); SetSelectorLimit16(insel + (i << __AHSHIFT), size - 1); size -= 0x10000; } size = icdec->lpbiOutput->biSizeImage; count = (size + 0xffff) / 0x10000; WORD outsel = AllocSelectorArray16(count); for (int i = 0; i < count; i++) { SetSelectorBase(outsel + (i << __AHSHIFT), (DWORD)icdec->lpOutput + i * 0x10000); SetSelectorLimit16(outsel + (i << __AHSHIFT), size - 1); size -= 0x10000; } icdec16->dwFlags = icdec->dwFlags; icdec16->lpbiInput = MapLS(icdec->lpbiInput); icdec16->lpInput = insel << 16; icdec16->lpbiOutput = MapLS(icdec->lpbiOutput); icdec16->lpOutput = outsel << 16; icdec16->ckid = icdec->ckid; lp1 = (LPARAM)(MapLS(icdec16)); lp2 = sizeof(ICDECOMPRESS); break; } } args[7] = HIWORD(hic); args[6] = LOWORD(hic); args[5] = HDRVR_16(hdrv); args[4] = msg; args[3] = HIWORD(lp1); args[2] = LOWORD(lp1); args[1] = HIWORD(lp2); args[0] = LOWORD(lp2); WOWCallback16Ex( pfn16, WCB16_PASCAL, sizeof(args), args, &ret ); switch (msg) { case DRV_OPEN: UnMapLS(lp2); break; case ICM_GETINFO: { ICINFO16 *ici16 = MapSL(lp1); ICINFO *ici = (ICINFO *)data; UnMapLS(lp1); ici->fccType = ici16->fccType; ici->fccHandler = ici16->fccHandler; ici->dwFlags = ici16->dwFlags; ici->dwVersion = ici16->dwVersion; ici->dwVersionICM = ici16->dwVersionICM; MultiByteToWideChar( CP_ACP, 0, ici16->szName, -1, ici->szName, 16 ); MultiByteToWideChar( CP_ACP, 0, ici16->szDescription, -1, ici->szDescription, 128 ); MultiByteToWideChar( CP_ACP, 0, ici16->szDriver, -1, ici->szDriver, 128 ); HeapFree(GetProcessHeap(), 0, ici16); break; } case ICM_DRAW_BEGIN: { ICDRAWBEGIN16 *icdb16 = MapSL(lp1); UnMapLS(lp1); UnMapLS(icdb16->lpbi); HeapFree(GetProcessHeap(), 0, icdb16); break; } case ICM_DRAW_SUGGESTFORMAT: { ICDRAWSUGGEST16 *icds16 = MapSL(lp1 - 4); UnMapLS(lp1); UnMapLS(icds16->lpbiIn); UnMapLS(icds16->lpbiSuggest); HeapFree(GetProcessHeap(), 0, icds16); break; } case ICM_DRAW_QUERY: case ICM_SETSTATE: case ICM_DRAW_WINDOW: case ICM_GETDEFAULTKEYFRAMERATE: UnMapLS(lp1); break; case ICM_COMPRESS: { ICCOMPRESS *icc16 = MapSL(lp1); WORD sel = SELECTOROF(icc16->lpInput); int count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000; for (int i = 0; i < count; i++) FreeSelector16(sel + (i << __AHSHIFT)); sel = SELECTOROF(icc16->lpOutput); count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000; for (int i = 0; i < count; i++) FreeSelector16(sel + (i << __AHSHIFT)); if (icc16->lpbiPrev) { sel = SELECTOROF(icc16->lpPrev); count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000; for (int i = 0; i < count; i++) FreeSelector16(sel + (i << __AHSHIFT)); UnMapLS(icc16->lpbiPrev); } UnMapLS(lp1); UnMapLS(icc16->lpbiInput); UnMapLS(icc16->lpbiOutput); UnMapLS(icc16->lpckid); UnMapLS(icc16->lpdwFlags); HeapFree(GetProcessHeap(), 0, icc16); break; } case ICM_DECOMPRESS: { ICDECOMPRESS *icdec16 = MapSL(lp1); WORD sel = SELECTOROF(icdec16->lpInput); int count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000; for (int i = 0; i < count; i++) FreeSelector16(sel + (i << __AHSHIFT)); sel = SELECTOROF(icdec16->lpOutput); count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000; for (int i = 0; i < count; i++) FreeSelector16(sel + (i << __AHSHIFT)); UnMapLS(lp1); UnMapLS(icdec16->lpbiInput); UnMapLS(icdec16->lpbiOutput); HeapFree(GetProcessHeap(), 0, icdec16); break; } case ICM_DRAW: { ICDRAW *icd16 = MapSL(lp1); int count = (icd16->cbData + 0xffff) / 0x10000; WORD sel = SELECTOROF(icd16->lpData); for (int i = 0; i < count; i++) FreeSelector16(sel + (i << __AHSHIFT)); UnMapLS(lp1); UnMapLS(icd16->lpFormat); HeapFree(GetProcessHeap(), 0, icd16); break; } case ICM_COMPRESS_GET_SIZE: case ICM_COMPRESS_GET_FORMAT: case ICM_COMPRESS_QUERY: case ICM_COMPRESS_BEGIN: case ICM_DECOMPRESS_QUERY: case ICM_DECOMPRESS_GET_FORMAT: case ICM_DECOMPRESS_GET_PALETTE: case ICM_DECOMPRESS_BEGIN: UnMapLS(lp1); UnMapLS(lp2); break; } return ret; } #define MAX_THUNKS 32 #include "pshpack1.h" static struct msvideo_thunk { BYTE popl_eax; /* popl %eax (return address) */ BYTE pushl_func; /* pushl $pfn16 (16bit callback function) */ DWORD pfn16; BYTE pushl_eax; /* pushl %eax */ BYTE jmp; /* ljmp WDML_InvokeCallback16 */ DWORD callback; HIC16 hIC16; /* driver's handle */ } *MSVIDEO_Thunks; #include "poppack.h" static CRITICAL_SECTION msvideo_cs; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &msvideo_cs, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": msvideo_cs") } }; static CRITICAL_SECTION msvideo_cs = { &critsect_debug, -1, 0, 0, 0, 0 }; static struct msvideo_thunk* MSVIDEO_AddThunk(DWORD pfn16) { struct msvideo_thunk* thunk; if (!MSVIDEO_Thunks) { MSVIDEO_Thunks = VirtualAlloc(NULL, MAX_THUNKS * sizeof(*MSVIDEO_Thunks), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (!MSVIDEO_Thunks) return NULL; for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++) { thunk->popl_eax = 0x58; /* popl %eax */ thunk->pushl_func = 0x68; /* pushl $pfn16 */ thunk->pfn16 = 0; thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->jmp = 0xe9; /* jmp IC_Callback3216 */ thunk->callback = (char *)IC_Callback3216 - (char *)(&thunk->callback + 1); thunk->hIC16 = 0; } } for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++) { if (thunk->pfn16 == 0) { thunk->pfn16 = pfn16; return thunk; } } FIXME("Out of msvideo-thunks. Bump MAX_THUNKS\n"); return NULL; } static struct msvideo_thunk* MSVIDEO_HasThunk(HIC16 hic) { struct msvideo_thunk* thunk; if (!MSVIDEO_Thunks) return NULL; for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++) { if (thunk->hIC16 == hic) return thunk; } return NULL; } void *get_video_thunk(DWORD pfn16) { struct msvideo_thunk* thunk; if (!MSVIDEO_Thunks) return NULL; for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++) { if (thunk->pfn16 == pfn16) return thunk; } return (void *)MSVIDEO_AddThunk(pfn16); } #define MAX_DRIVERS 10 static struct msvideo_drv { DWORD fccType; DWORD fccHandler; HMODULE16 hmod; } *MSVIDEO_drv = {0}; BOOL add_module(DWORD fccType, DWORD fccHandler, HMODULE16 hmod) { int i; if (!MSVIDEO_drv) MSVIDEO_drv = (struct msvideo_drv *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct msvideo_drv) * 10); for (i = 0; i < 10; i++) { if (!MSVIDEO_drv[i].hmod) break; } if (i == 10) return FALSE; MSVIDEO_drv[i].fccType = fccType; MSVIDEO_drv[i].fccHandler = fccHandler; MSVIDEO_drv[i].hmod = hmod; return TRUE; } void remove_module(DWORD fccType, DWORD fccHandler, BOOL unload) { HMODULE16 hmod; if (!MSVIDEO_drv) return; for (int i = 0; i < 10; i++) { if ((MSVIDEO_drv[i].fccType == fccType) && (MSVIDEO_drv[i].fccHandler == fccHandler)) { if (unload) { ICRemove(fccType, fccHandler, 0); FreeLibrary16(MSVIDEO_drv[i].hmod); } MSVIDEO_drv[i].fccType = 0; MSVIDEO_drv[i].fccHandler = 0; MSVIDEO_drv[i].hmod = 0; } } } void remove_all_modules() { if (!MSVIDEO_drv) return; for (int i = 0; i < 10; i++) { if (MSVIDEO_drv[i].hmod) FreeLibrary(MSVIDEO_drv[i].hmod); } HeapFree(GetProcessHeap(), 0, MSVIDEO_drv); } /*********************************************************************** * ICOpenFunction [MSVIDEO.206] */ HIC16 VFWAPI ICOpenFunction16(DWORD fccType, DWORD fccHandler, UINT16 wMode, FARPROC16 lpfnHandler) { HIC hic32; struct msvideo_thunk* thunk; EnterCriticalSection(&msvideo_cs); if (!(thunk = MSVIDEO_AddThunk((DWORD)lpfnHandler))) { LeaveCriticalSection(&msvideo_cs); return 0; } if ((hic32 = ICOpenFunction(fccType, fccHandler, wMode, (DRIVERPROC)thunk))) thunk->hIC16 = HIC_16(hic32); else thunk->pfn16 = 0; LeaveCriticalSection(&msvideo_cs); return HIC_16(hic32); } /*********************************************************************** * ICSendMessage [MSVIDEO.205] */ LRESULT VFWAPI ICSendMessage16(HIC16 hic, UINT16 msg, DWORD lParam1, DWORD lParam2) { LRESULT ret = ICERR_BADHANDLE; struct msvideo_thunk* thunk; if ((thunk = MSVIDEO_HasThunk(hic))) { WORD args[8]; DWORD result; /* FIXME: original code was passing hdrv first and hic second */ /* but this doesn't match what IC_Callback3216 does */ args[7] = HIWORD(hic); args[6] = LOWORD(hic); args[5] = 0; /* the 32bit also sets it to NULL */ args[4] = msg; args[3] = HIWORD(lParam1); args[2] = LOWORD(lParam1); args[1] = HIWORD(lParam2); args[0] = LOWORD(lParam2); WOWCallback16Ex( thunk->pfn16, WCB16_PASCAL, sizeof(args), args, &result ); ret = result; } else { /* map the message for a 32 bit infrastructure, and pass it along */ void* data16 = MSVIDEO_MapMsg16To32(msg, &lParam1, &lParam2); ret = ICSendMessage(HIC_32(hic), msg, lParam1, lParam2); if (data16) MSVIDEO_UnmapMsg16To32(msg, data16, &lParam1, &lParam2); } return ret; } /*********************************************************************** * ICClose [MSVIDEO.204] */ LRESULT WINAPI ICClose16(HIC16 hic) { BOOL ret = ICClose(HIC_32(hic)); EnterCriticalSection(&msvideo_cs); if (ret) { struct msvideo_thunk* thunk; if ((thunk = MSVIDEO_HasThunk(hic))) { thunk->pfn16 = 0; thunk->hIC16 = 0; } else ret = FALSE; } LeaveCriticalSection(&msvideo_cs); return ret; } /*********************************************************************** * VideoCapDriverDescAndVer [MSVIDEO.22] */ DWORD WINAPI VideoCapDriverDescAndVer16(WORD nr, LPSTR buf1, WORD buf1len, LPSTR buf2, WORD buf2len) { static const char version_info_spec[] = "\\StringFileInfo\\040904E4\\FileDescription"; DWORD verhandle; DWORD infosize; UINT subblocklen; char *s, buf[2048], fn[260]; LPBYTE infobuf; LPVOID subblock; DWORD i, cnt = 0, lRet; DWORD bufLen, fnLen; FILETIME lastWrite; HKEY hKey; BOOL found = FALSE; TRACE("(%d,%p,%d,%p,%d)\n", nr, buf1, buf1len, buf2, buf2len); lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, HKLM_DRIVERS32, 0, KEY_QUERY_VALUE, &hKey); if (lRet == ERROR_SUCCESS) { RegQueryInfoKeyA( hKey, 0, 0, 0, &cnt, 0, 0, 0, 0, 0, 0, 0); for (i = 0; i < cnt; i++) { bufLen = ARRAY_SIZE(buf); lRet = RegEnumKeyExA(hKey, i, buf, &bufLen, 0, 0, 0, &lastWrite); if (lRet != ERROR_SUCCESS) continue; if (strncasecmp(buf, "vid", 3)) continue; if (nr--) continue; fnLen = sizeof(fn); lRet = RegQueryValueExA(hKey, buf, 0, 0, (LPBYTE)fn, &fnLen); if (lRet == ERROR_SUCCESS) found = TRUE; break; } RegCloseKey( hKey ); } /* search system.ini if not found in the registry */ if (!found && GetPrivateProfileStringA("drivers32", NULL, NULL, buf, sizeof(buf), "system.ini")) { for (s = buf; *s; s += strlen(s) + 1) { if (strncasecmp(s, "vid", 3)) continue; if (nr--) continue; if (GetPrivateProfileStringA("drivers32", s, NULL, fn, sizeof(fn), "system.ini")) found = TRUE; break; } } if (!found) { TRACE("No more VID* entries found nr=%d\n", nr); return 20; } infosize = GetFileVersionInfoSizeA(fn, &verhandle); if (!infosize) { TRACE("%s has no fileversioninfo.\n", fn); return 18; } infobuf = HeapAlloc(GetProcessHeap(), 0, infosize); if (GetFileVersionInfoA(fn, verhandle, infosize, infobuf)) { /* Yes, two space behind : */ /* FIXME: test for buflen */ snprintf(buf2, buf2len, "Version: %d.%d.%d.%d\n", ((WORD*)infobuf)[0x0f], ((WORD*)infobuf)[0x0e], ((WORD*)infobuf)[0x11], ((WORD*)infobuf)[0x10] ); TRACE("version of %s is %s\n", fn, buf2); } else { TRACE("GetFileVersionInfoA failed for %s.\n", fn); lstrcpynA(buf2, fn, buf2len); /* msvideo.dll appears to copy fn*/ } /* FIXME: language problem? */ if (VerQueryValueA( infobuf, version_info_spec, &subblock, &subblocklen )) { UINT copylen = min(subblocklen,buf1len-1); memcpy(buf1, subblock, copylen); buf1[copylen] = '\0'; TRACE("VQA returned %s\n", (LPCSTR)subblock); } else { TRACE("VQA did not return on query \\StringFileInfo\\040904E4\\FileDescription?\n"); lstrcpynA(buf1, fn, buf1len); /* msvideo.dll appears to copy fn*/ } HeapFree(GetProcessHeap(), 0, infobuf); return 0; } /************************************************************************** * DllEntryPoint (MSVIDEO.3) * * MSVIDEO DLL entry point * */ BOOL WINAPI VIDEO_LibMain(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds, WORD wHeapSize, DWORD dwReserved1, WORD wReserved2) { switch (fdwReason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: remove_all_modules(); DeleteCriticalSection(&msvideo_cs); break; } return TRUE; } /*********************************************************************** * MCIWndRegisterClass(MSVIDEO.251) */ BOOL CDECL MCIWndRegisterClass16(void) { return MCIWndRegisterClass(); } static LRESULT (WINAPI *pMCIWndProc)(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); char * WINAPI xlate_str_handle(const char *origstr, char *newstr); static LRESULT WINAPI MCIWndProc16(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case MCIWNDM_SENDSTRINGA: { char newstr[128]; lparam = (ULONG_PTR)MapSL(lparam); return CallWindowProcA(pMCIWndProc, hwnd, msg, wparam, xlate_str_handle(lparam, newstr)); } case MCIWNDM_SETTIMEFORMATA: case MCIWNDM_GETMODEA: lparam = (ULONG_PTR)MapSL(lparam); break; case MCI_OPEN: return CallWindowProcA(pMCIWndProc, hwnd, MCIWNDM_OPENA, 0, (ULONG_PTR)MapSL(lparam)); case MCIWNDM_SETPALETTE: wparam = HPALETTE_32(wparam); break; case WM_DESTROY: SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)pMCIWndProc); break; default: break; } return CallWindowProcA(pMCIWndProc, hwnd, msg, wparam, lparam); } /*********************************************************************** * MCIWndCreate(MSVIDEO.250) */ HWND16 CDECL MCIWndCreate16(HWND16 parent, HINSTANCE16 hinst16, DWORD style, LPSTR file) { HWND hwnd = MCIWndCreateA(HWND_32(parent), 0, style, file); if (hwnd) pMCIWndProc = (void *)SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)MCIWndProc16); return HWND_16(hwnd); } typedef struct videohdr_tag16 { SEGPTR lpData; DWORD dwBufferLength; DWORD dwBytesUsed; DWORD dwTimeCaptured; DWORD dwUser; DWORD dwFlags; DWORD dwReserved[4]; } VIDEOHDR16, NEAR *PVIDEOHDR16, FAR * LPVIDEOHDR16; typedef WORD HVIDEO16; typedef HVIDEO16 *LPHVIDEO16; DWORD WINAPI videoGetNumDevs16(void) { FIXME("()\n"); return 0; } DWORD WINAPI videoOpen16(LPHVIDEO16 lphVideo, DWORD dwDevice, DWORD dwFlags) { FIXME("\n"); return 0; } DWORD WINAPI videoClose16(HVIDEO16 hVideo) { FIXME("\n"); return 0; } DWORD WINAPI videoDialog16(HVIDEO16 hVideo, HWND16 hWndParent, DWORD dwFlags) { FIXME("\n"); return 0; } DWORD WINAPI videoGetChannelCaps16(HVIDEO16 hVideo, LPCHANNEL_CAPS lpChannelCaps, DWORD dwSize) { FIXME("\n"); return 0; } DWORD WINAPI videoUpdate16(HVIDEO16 hVideo, HWND16 hWnd, HDC16 hDC) { FIXME("\n"); return 0; } DWORD WINAPI videoConfigure16(HVIDEO16 hVideo, UINT16 msg, DWORD dwFlags, LPDWORD lpdwReturn, LPVOID lpData1, DWORD dwSize1, LPVOID lpData2, DWORD dwSize2) { FIXME("\n"); return 0; } DWORD WINAPI videoConfigureStorage16(HVIDEO16 hVideo, LPSTR lpstrIdent, DWORD dwFlags) { FIXME("\n"); return 0; } DWORD WINAPI videoFrame16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr) { FIXME("\n"); return 0; } DWORD WINAPI videoMessage16(HVIDEO16 hVideo, UINT16 msg, DWORD dwP1, DWORD dwP2) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamAddBuffer16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr, DWORD dwSize) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamGetError16(HVIDEO16 hVideo, LPDWORD lpdwErrorFirst, LPDWORD lpdwErrorLast) { FIXME("\n"); return 0; } DWORD WINAPI videoGetErrorText16(HVIDEO16 hVideo, UINT16 wError, LPSTR lpText, UINT16 wSize) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamGetPosition16(HVIDEO16 hVideo, LPMMTIME16 lpInfo, DWORD dwSize) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamInit16(HVIDEO16 hVideo, DWORD dwMicroSecPerFrame, DWORD dwCallback, DWORD dwCallbackInst, DWORD dwFlags) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamFini16(HVIDEO16 hVideo) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamPrepareHeader16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr, DWORD dwSize) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamReset16(HVIDEO16 hVideo) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamStart16(HVIDEO16 hVideo) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamStop16(HVIDEO16 hVideo) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamUnprepareHeader16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr, DWORD dwSize) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamAllocHdrAndBuffer16(HVIDEO16 hVideo, LPVIDEOHDR16 *plpVHdr, DWORD dwSize) { FIXME("\n"); return 0; } DWORD WINAPI videoStreamFreeHdrAndBuffer16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr) { FIXME("\n"); return 0; } BOOL16 WINAPI ICInstall16(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT16 wFlags) { if (wFlags == ICINSTALL_FUNCTION) { BOOL ret; struct msvideo_thunk* thunk; EnterCriticalSection(&msvideo_cs); if (!(thunk = MSVIDEO_AddThunk((DWORD)lParam))) { LeaveCriticalSection(&msvideo_cs); return 0; } if (!(ret = ICInstall(fccType, fccHandler, thunk, szDesc, wFlags))) thunk->pfn16 = 0; LeaveCriticalSection(&msvideo_cs); return ret; } BOOL16 ret = ICInstall(fccType, fccHandler, lParam, szDesc, wFlags); if (ret && (wFlags == ICINSTALL_DRIVER)) { HMODULE16 driver = LoadLibrary16((char *)lParam); if (driver) { FARPROC driverproc = GetProcAddress16(driver, "DRIVERPROC"); if (driverproc) { BOOL ret; struct msvideo_thunk* thunk; EnterCriticalSection(&msvideo_cs); if (!(thunk = MSVIDEO_AddThunk((DWORD)driverproc))) { FreeLibrary16(driver); LeaveCriticalSection(&msvideo_cs); return 0; } if (!add_module(fccType, fccHandler, driver)) { thunk->pfn16 = 0; FreeLibrary16(driver); LeaveCriticalSection(&msvideo_cs); return 0; } if (!(ret = ICInstall(fccType, fccHandler, thunk, szDesc, ICINSTALL_FUNCTION))) { thunk->pfn16 = 0; remove_module(fccType, fccHandler, TRUE); } LeaveCriticalSection(&msvideo_cs); } } } return ret; } BOOL16 WINAPI ICRemove16(DWORD fccType, DWORD fccHandler, UINT16 wFlags) { BOOL16 ret = ICRemove(fccType, fccHandler, wFlags); if (ret) remove_module(fccType, fccHandler, TRUE); return ret; } ================================================ FILE: msvideo/vfw16.h ================================================ /* * Copyright 1999 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_VFW16_H #define __WINE_VFW16_H #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "vfw.h" #include "wownt32.h" #include "wine/windef16.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef HANDLE16 HDRAWDIB16; #include "pshpack1.h" typedef struct { DWORD dwSize; DWORD fccType; DWORD fccHandler; DWORD dwFlags; DWORD dwVersion; DWORD dwVersionICM; /* * under Win16, normal chars are used */ CHAR szName[16]; CHAR szDescription[128]; CHAR szDriver[128]; } ICINFO16; typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiSrc; LPVOID lpSrc; LPBITMAPINFOHEADER lpbiDst; LPVOID lpDst; INT16 xDst; /* destination rectangle */ INT16 yDst; INT16 dxDst; INT16 dyDst; INT16 xSrc; /* source rectangle */ INT16 ySrc; INT16 dxSrc; INT16 dySrc; } ICDECOMPRESSEX16; typedef struct { DWORD dwFlags; HPALETTE16 hpal; HWND16 hwnd; HDC16 hdc; INT16 xDst; INT16 yDst; INT16 dxDst; INT16 dyDst; LPBITMAPINFOHEADER lpbi; INT16 xSrc; INT16 ySrc; INT16 dxSrc; INT16 dySrc; DWORD dwRate; DWORD dwScale; } ICDRAWBEGIN16; #include "poppack.h" typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiIn; LPBITMAPINFOHEADER lpbiSuggest; INT16 dxSrc; INT16 dySrc; INT16 dxDst; INT16 dyDst; HIC16 hicDecompressor; } ICDRAWSUGGEST16; DWORD VFWAPIV ICDraw16(HIC16,DWORD,LPVOID,LPVOID,DWORD,LONG); DWORD VFWAPIV ICDrawBegin16(HIC16,DWORD,HPALETTE16,HWND16,HDC16,INT16, INT16,INT16,INT16,LPBITMAPINFOHEADER, INT16,INT16,INT16,INT16,DWORD,DWORD); LRESULT WINAPI ICClose16(HIC16); DWORD VFWAPIV ICCompress16(HIC16,DWORD,LPBITMAPINFOHEADER,LPVOID, LPBITMAPINFOHEADER,LPVOID,LPDWORD, LPDWORD,LONG,DWORD,DWORD, LPBITMAPINFOHEADER,LPVOID); DWORD VFWAPIV ICDecompress16(HIC16,DWORD,LPBITMAPINFOHEADER,LPVOID, LPBITMAPINFOHEADER,LPVOID); HIC16 VFWAPI ICGetDisplayFormat16(HIC16,LPBITMAPINFOHEADER, LPBITMAPINFOHEADER,INT16,INT16, INT16); LRESULT VFWAPI ICGetInfo16(HIC16,ICINFO16 *,DWORD); BOOL16 VFWAPI ICInfo16(DWORD,DWORD,ICINFO16 *); HIC16 VFWAPI ICLocate16(DWORD,DWORD,LPBITMAPINFOHEADER, LPBITMAPINFOHEADER,WORD); LRESULT VFWAPIV ICMessage16( HIC16 hic, UINT16 msg, UINT16 cb, VA_LIST16 valist ); HIC16 VFWAPI ICOpen16(DWORD,DWORD,UINT16); HIC16 VFWAPI ICOpenFunction16(DWORD,DWORD,UINT16,FARPROC16); LRESULT VFWAPI ICSendMessage16(HIC16,UINT16,DWORD,DWORD); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __WINE_VFW16_H */ ================================================ FILE: nddeapi/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(nddeapi SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/nddeapi.def nddeapi.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(nddeapi.dll16 nddeapi) target_link_libraries(nddeapi libwine winecrt0 krnl386) set_target_properties(nddeapi PROPERTIES SUFFIX ".dll16") ================================================ FILE: nddeapi/nddeapi.c ================================================ #include "wine/windef16.h" #include "wine/winbase16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(nddeapi); #define NDDE_NOT_IMPLEMENTED 14 typedef struct _NDDESHAREINFO16 NDDESHAREINFO16, *LPNDDESHAREINFO16; UINT16 WINAPI NDdeShareGetInfo16(LPSTR a, LPSTR b, UINT16 c, LPBYTE d, DWORD e, LPDWORD f, LPWORD g) { return NDDE_NOT_IMPLEMENTED; } UINT16 WINAPI NDdeShareSetInfo16(LPSTR a, LPSTR b, UINT16 c, LPBYTE d, DWORD e, WORD f) { return NDDE_NOT_IMPLEMENTED; } UINT16 WINAPI NDdeGetClientInfo16(HWND16 a, LPSTR b, LONG c, LPSTR d, LONG e) { return NDDE_NOT_IMPLEMENTED; } BOOL16 WINAPI NDdeIsValidPassword16(LPSTR a) { return FALSE; } UINT16 WINAPI NDdeSessionEnum16(LPSTR a, UINT16 b, LPBYTE c, DWORD d, LPDWORD e, LPDWORD f) { return NDDE_NOT_IMPLEMENTED; } UINT16 WINAPI NDdeGetNodeName16(LPSTR a, LONG b) { return NDDE_NOT_IMPLEMENTED; } UINT16 WINAPI NDdeGetErrorString16(UINT16 a, LPSTR b, DWORD c) { return NDDE_NOT_IMPLEMENTED; } UINT16 WINAPI NDdeConnectionEnum16(LPSTR a, LPSTR b, DWORD c, UINT16 d, LPBYTE e, DWORD f, LPDWORD g, LPDWORD h) { return NDDE_NOT_IMPLEMENTED; } UINT16 WINAPI NDdeShareDel16(LPSTR a, LPSTR b, UINT c) { return NDDE_NOT_IMPLEMENTED; } HWND16 WINAPI NDdeGetWindow16() { ERR("network dde is no longer supported.\n"); return 0; } UINT16 WINAPI NDdeSessionClose16(LPSTR a, LPSTR b, DWORD c) { return NDDE_NOT_IMPLEMENTED; } UINT16 WINAPI NDdeShareAdd16(LPSTR a, UINT16 b, LPBYTE c, DWORD d) { return NDDE_NOT_IMPLEMENTED; } UINT16 WINAPI NDdeShareEnum16(LPSTR a, UINT16 b, LPBYTE c, DWORD d, LPDWORD e, LPDWORD f) { return NDDE_NOT_IMPLEMENTED; } BOOL16 WINAPI NDdeIsValidTopic16(LPSTR a) { return FALSE; } BOOL16 WINAPI NDdeIsValidShareName16(LPSTR a) { return FALSE; } ================================================ FILE: nddeapi/nddeapi.def ================================================ ; File generated automatically from nddeapi\nddeapi.dll16.spec; do not edit! LIBRARY nddeapi.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: nddeapi/nddeapi.dll16.spec ================================================ 204 stub PASSWDDLGWB 103 pascal -ret16 NDdeShareGetInfo(str str word ptr long ptr ptr) NDdeShareGetInfo16 104 pascal -ret16 NDdeShareSetInfo(str str word ptr long word) NDdeShareSetInfo16 205 stub PASSWDDLGNT 105 pascal -ret16 NDdeGetClientInfo(word str long str long) NDdeGetClientInfo16 110 pascal -ret16 NDdeIsValidPassword(str) NDdeIsValidPassword16 112 pascal -ret16 NDdeSessionEnum(str word ptr long ptr ptr) NDdeSessionEnum16 106 pascal -ret16 NDdeGetNodeName(str long) NDdeGetNodeName16 107 pascal -ret16 NDdeGetErrorString(word str long) NDdeGetErrorString16 201 stub PASSWORDGETFROMCACHE 108 pascal -ret16 NDdeConnectionEnum(str str long word ptr long ptr ptr) NDdeConnectionEnum16 202 stub PASSWORDADDTOCACHE 101 pascal -ret16 NDdeShareDel(str str word) NDdeShareDel16 114 pascal -ret16 NDdeGetWindow() NDdeGetWindow16 115 stub NDDEISSHARINGALLOWED 113 pascal -ret16 NDdeSessionClose(str str long) NDdeSessionClose16 203 stub GETCURRENTUSERDOMAINNAME 100 pascal -ret16 NDdeShareAdd(str word ptr long) NDdeShareAdd16 102 pascal -ret16 NDdeShareEnum(str word ptr long ptr ptr) NDdeShareEnum16 200 stub PASSWORDGETFROMUSERMODELESS 111 pascal -ret16 NDdeIsValidTopic(str) NDdeIsValidTopic16 109 pascal -ret16 NDdeIsValidShareName(str) NDdeIsValidShareName16 ================================================ FILE: nddeapi/nddeapi.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 nddeapi {72482539-7702-455E-81E0-F3AF237CF57F} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) true nddeapi.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false nddeapi.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" NDDEAPI > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: netapi/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(netapi SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/netapi.def netapi.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(netapi.dll16 netapi) target_link_libraries(netapi libwine winecrt0 krnl386) set_target_properties(netapi PROPERTIES SUFFIX ".dll16") ================================================ FILE: netapi/Makefile.in ================================================ MODULE = netapi.dll16 IMPORTS = netapi32 EXTRADLLFLAGS = -m16 C_SRCS = netapi.c ================================================ FILE: netapi/netapi.c ================================================ /* * 16-bit netapi functions * * Copyright (C) 2024 John Goodridge * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include "wine/winbase16.h" #include "wownt32.h" #include "winuser.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(netapi); // Structure taken from https://datatracker.ietf.org/doc/html/draft-leach-cifs-rap-spec-00 // and https://learn.microsoft.com/en-us/windows/win32/api/lmwksta/ns-lmwksta-wksta_info_100 typedef struct { SEGPTR wki10_computername; //pointer to a NULL terminated ASCII string that specifies the name of the workstation SEGPTR wki10_username; //pointer to a NULL terminated ASCII string that specifies the user who is logged on at the workstation LPSTR wki10_langroup; //pointer to a NULL terminated ASCII string that specifies the domain to which the workstation belongs UCHAR wkil0_ver_major; //major version number of the operating system the workstation is running UCHAR wkil0_ver_minor; //minor version number of the operating system the workstation is running LPSTR wkil0_1ogon_domain; //pointer to a NULL terminated ASCII string that specifies the domain for which a user is logged on LPSTR wkil0_oth_domains; //pointer to a list of other domains that the workstation is currently browsing. //The domains are space delimited and the list is zero } WKSTA_INFO_10, *PWKSTA_INFO_10; /*********************************************************************** * NetWkstaGetInfo */ INT16 WINAPI NetWkstaGetInfo16(LPCSTR pszServer, USHORT sLevel, char* pbBuffer, USHORT cbBuffer, PUSHORT pcbTotalAvalaible) { WCHAR serverW[RMLEN] = { 0 }; MultiByteToWideChar(CP_ACP, 0, pszServer, -1, serverW, RMLEN); LPWKSTA_INFO_100 pwkstaInfo100 = NULL; NET_API_STATUS status = NetWkstaGetInfo(serverW, 100, (LPBYTE*)&pwkstaInfo100); if (status == NERR_Success) { LPWKSTA_USER_INFO_0 pwkstaUserInfo0 = NULL; status = NetWkstaUserGetInfo(NULL, 0, (LPBYTE*)&pwkstaUserInfo0); if (status == NERR_Success) { DWORD byteCount = 0; NetApiBufferSize(pwkstaInfo100, &byteCount); switch (sLevel) { case 10: { CHAR strComputerName[RMLEN]; sprintf_s(strComputerName, RMLEN, "%S", pwkstaInfo100->wki100_computername); // convert to ansi CHAR strUserName[UNLEN]; sprintf_s(strUserName, UNLEN, "%S", pwkstaUserInfo0->wkui0_username); // convert to ansi // Calculate total bytes and location within buffer to store strings DWORD TotalBytesNeeded = sizeof(WKSTA_INFO_10) + (strlen(strComputerName) + strlen(strUserName) + 3) * sizeof(CHAR); LPBYTE FixedDataEnd = (LPBYTE)(pbBuffer + sizeof(WKSTA_INFO_10)); // Check if buffer is too small if (cbBuffer < TotalBytesNeeded) { if (pcbTotalAvalaible) { *pcbTotalAvalaible = (USHORT)TotalBytesNeeded; } status = NERR_BufTooSmall; } else { if (pbBuffer) { // Copy computer name into buffer PWKSTA_INFO_10 pwkstaInfo10 = (PWKSTA_INFO_10)pbBuffer; memcpy(FixedDataEnd, strComputerName, strlen(strComputerName)); SEGPTR c = MapLS(FixedDataEnd); pwkstaInfo10->wki10_computername = c; // Copy user name into buffer FixedDataEnd += strlen(strUserName) + sizeof(CHAR); memcpy(FixedDataEnd, strUserName, strlen(strUserName)); SEGPTR u = MapLS(FixedDataEnd); pwkstaInfo10->wki10_username = u; // Fill in rest of the fields pwkstaInfo10->wki10_langroup = NULL; //TODO pwkstaInfo10->wkil0_ver_major = (UCHAR)pwkstaInfo100->wki100_ver_major; pwkstaInfo10->wkil0_ver_minor = (UCHAR)pwkstaInfo100->wki100_ver_minor; pwkstaInfo10->wkil0_1ogon_domain = NULL; //TODO pwkstaInfo10->wkil0_oth_domains = NULL; //TODO status = NERR_Success; } else { status = NERR_BufTooSmall; } } break; } default: FIXME("Unsupported level %d", sLevel); status = ERROR_INVALID_LEVEL; } NetApiBufferFree(pwkstaUserInfo0); } NetApiBufferFree(pwkstaInfo100); } return (INT16)status; } ================================================ FILE: netapi/netapi.def ================================================ ; File generated automatically from ..\netapi\netapi.dll16.spec; do not edit! Actualy you do have to edit it as not generated!!! LIBRARY netapi.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: netapi/netapi.dll16.spec ================================================ 249 pascal -ret16 NetWkstaGetInfo(str word ptr word ptr) NetWkstaGetInfo16 ================================================ FILE: netapi/netapi.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 netapi {5AB8CD32-0031-4D8B-BFE0-382C6C1E1770} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; netapi32.lib;%(AdditionalDependencies) true netapi.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false netapi.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; netapi32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" netapi > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: ntvdm/CMakeLists.txt ================================================ file(GLOB SOURCE *.c) add_library(ntvdm SHARED ${SOURCE} ntvdm.def) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) target_link_libraries(ntvdm krnl386) set_target_properties(ntvdm PROPERTIES PREFIX "") ================================================ FILE: ntvdm/main.c ================================================ #include BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) DisableThreadLibraryCalls(hinstDLL); return TRUE; } ================================================ FILE: ntvdm/ntvdm.def ================================================ LIBRARY ntvdm.exe EXPORTS getAL = krnl386.exe16.getAL getAH = krnl386.exe16.getAH getAX = krnl386.exe16.getAX getEAX = krnl386.exe16.getEAX getBL = krnl386.exe16.getBL getBH = krnl386.exe16.getBH getBX = krnl386.exe16.getBX getEBX = krnl386.exe16.getEBX getCL = krnl386.exe16.getCL getCH = krnl386.exe16.getCH getCX = krnl386.exe16.getCX getECX = krnl386.exe16.getECX getDL = krnl386.exe16.getDL getDH = krnl386.exe16.getDH getDX = krnl386.exe16.getDX getEDX = krnl386.exe16.getEDX getSP = krnl386.exe16.getSP getESP = krnl386.exe16.getESP getBP = krnl386.exe16.getBP getEBP = krnl386.exe16.getEBP getSI = krnl386.exe16.getSI getESI = krnl386.exe16.getESI getDI = krnl386.exe16.getDI getEDI = krnl386.exe16.getEDI setAL = krnl386.exe16.setAL setAH = krnl386.exe16.setAH setAX = krnl386.exe16.setAX setEAX = krnl386.exe16.setEAX setBL = krnl386.exe16.setBL setBH = krnl386.exe16.setBH setBX = krnl386.exe16.setBX setEBX = krnl386.exe16.setEBX setCL = krnl386.exe16.setCL setCH = krnl386.exe16.setCH setCX = krnl386.exe16.setCX setECX = krnl386.exe16.setECX setDL = krnl386.exe16.setDL setDH = krnl386.exe16.setDH setDX = krnl386.exe16.setDX setEDX = krnl386.exe16.setEDX setSP = krnl386.exe16.setSP setESP = krnl386.exe16.setESP setBP = krnl386.exe16.setBP setEBP = krnl386.exe16.setEBP setSI = krnl386.exe16.setSI setESI = krnl386.exe16.setESI setDI = krnl386.exe16.setDI setEDI = krnl386.exe16.setEDI getDS = krnl386.exe16.getDS getES = krnl386.exe16.getES getCS = krnl386.exe16.getCS getSS = krnl386.exe16.getSS getFS = krnl386.exe16.getFS getGS = krnl386.exe16.getGS setDS = krnl386.exe16.setDS setES = krnl386.exe16.setES setCS = krnl386.exe16.setCS setSS = krnl386.exe16.setSS setFS = krnl386.exe16.setFS setGS = krnl386.exe16.setGS getIP = krnl386.exe16.getIP getEIP = krnl386.exe16.getEIP setIP = krnl386.exe16.setIP setEIP = krnl386.exe16.setEIP getCF = krnl386.exe16.getCF getPF = krnl386.exe16.getPF getAF = krnl386.exe16.getAF getZF = krnl386.exe16.getZF getSF = krnl386.exe16.getSF getIF = krnl386.exe16.getIF getDF = krnl386.exe16.getDF getOF = krnl386.exe16.getOF setCF = krnl386.exe16.setCF setPF = krnl386.exe16.setPF setAF = krnl386.exe16.setAF setZF = krnl386.exe16.setZF setSF = krnl386.exe16.setSF setIF = krnl386.exe16.setIF setDF = krnl386.exe16.setDF setOF = krnl386.exe16.setOF VDDInstallIOHook = krnl386.exe16.VDDInstallIOHook VDDDeInstallIOHook = krnl386.exe16.VDDDeInstallIOHook MGetVdmPointer = krnl386.exe16.MGetVdmPointer ================================================ FILE: ntvdm/ntvdm.dll.spec ================================================ @ stdcall getAL() @ stdcall getAH() @ stdcall getAX() @ stdcall getEAX() @ stdcall getBL() @ stdcall getBH() @ stdcall getBX() @ stdcall getEBX() @ stdcall getCL() @ stdcall getCH() @ stdcall getCX() @ stdcall getECX() @ stdcall getDL() @ stdcall getDH() @ stdcall getDX() @ stdcall getEDX() @ stdcall getSP() @ stdcall getESP() @ stdcall getBP() @ stdcall getEBP() @ stdcall getSI() @ stdcall getESI() @ stdcall getDI() @ stdcall getEDI() @ stdcall setAL(long) @ stdcall setAH(long) @ stdcall setAX(long) @ stdcall setEAX(long) @ stdcall setBL(long) @ stdcall setBH(long) @ stdcall setBX(long) @ stdcall setEBX(long) @ stdcall setCL(long) @ stdcall setCH(long) @ stdcall setCX(long) @ stdcall setECX(long) @ stdcall setDL(long) @ stdcall setDH(long) @ stdcall setDX(long) @ stdcall setEDX(long) @ stdcall setSP(long) @ stdcall setESP(long) @ stdcall setBP(long) @ stdcall setEBP(long) @ stdcall setSI(long) @ stdcall setESI(long) @ stdcall setDI(long) @ stdcall setEDI(long) @ stdcall getDS() @ stdcall getES() @ stdcall getCS() @ stdcall getSS() @ stdcall getFS() @ stdcall getGS() @ stdcall setDS(long) @ stdcall setES(long) @ stdcall setCS(long) @ stdcall setSS(long) @ stdcall setFS(long) @ stdcall setGS(long) @ stdcall getIP() @ stdcall getEIP() @ stdcall setIP(long) @ stdcall setEIP(long) @ stdcall getCF() @ stdcall getPF() @ stdcall getAF() @ stdcall getZF() @ stdcall getSF() @ stdcall getIF() @ stdcall getDF() @ stdcall getOF() @ stdcall setCF(long) @ stdcall setPF(long) @ stdcall setAF(long) @ stdcall setZF(long) @ stdcall setSF(long) @ stdcall setIF(long) @ stdcall setDF(long) @ stdcall setOF(long) @ stdcall VDDInstallIOHook(long long ptr ptr) @ stdcall VDDDeInstallIOHook(long long ptr) @ stdcall MGetVdmPointer(long long long) ================================================ FILE: ntvdm/ntvdm.vcxproj ================================================  Debug Win32 Release Win32 {E4950E01-C995-49A5-9FED-5EF03155FD66} Win32Proj ntvdm 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .exe false .exe Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)krnl386.lib ntvdm.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true true true ntvdm.def $(OutDir)krnl386.lib ================================================ FILE: ole2/.gitignore ================================================ ifs_16.c ifs_16.h ================================================ FILE: ole2/CMakeLists.txt ================================================ file(GLOB SOURCE hglobalstream.c ifs_thunk.c memlockbytes.c ole2.c) add_library(ole2 SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ole2.def ole2.dll16.obj ${CMAKE_BINARY_DIR}/ifs_16.c) include_directories(../wine ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) widl_build(ifs.idl ${CMAKE_BINARY_DIR}/ifs_16.c ${CMAKE_BINARY_DIR}/ifs_16.h) spec_build(ole2.dll16 ole2) target_link_libraries(ole2 libwine winecrt0 krnl386 ole32.lib user) set_target_properties(ole2 PROPERTIES SUFFIX ".dll16") ================================================ FILE: ole2/Makefile.in ================================================ MODULE = ole2.dll16 IMPORTS = uuid ole32 user32 gdi32 EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll C_SRCS = \ memlockbytes.c \ ole2.c ================================================ FILE: ole2/hglobalstream.c ================================================ /* * HGLOBAL Stream implementation * * This file contains the implementation of the stream interface * for streams contained supported by an HGLOBAL pointer. * * Copyright 1999 Francis Beaudet * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include #include #define COBJMACROS #define NONAMELESSUNION #undef DUMMYSTRUCTNAME #undef DUMMYUNIONNAME #include "windef.h" #include "winbase.h" #include "winuser.h" #include "objbase.h" #include "ole2.h" #include "winerror.h" #include "winternl.h" #include "wine/debug.h" #include "wine/winbase16.h" #include "ifs.h" WINE_DEFAULT_DEBUG_CHANNEL(storage); HRESULT CDECL HGLOBALStreamImpl16_SetSize( IStream16* iface, ULARGE_INTEGER libNewSize); HRESULT CDECL HGLOBALStreamImpl16_Read( IStream16* iface, void* pv, /* [length_is][size_is][out] */ ULONG cb, /* [in] */ ULONG* pcbRead); /* [out] */ HRESULT WINAPI CreateStreamOnHGlobal16( HGLOBAL16 hGlobal, BOOL fDeleteOnRelease, SEGPTR* ppstm); /**************************************************************************** * HGLOBALStreamImpl definition. * * This class implements the IStream16 interface and represents a stream * supported by an HGLOBAL pointer. */ typedef struct { IStream16 IStream16_iface; LONG ref; /* support for the stream */ HGLOBAL16 supportHandle; /* if TRUE the HGLOBAL is destroyed when the stream is finally released */ BOOL deleteOnRelease; /* size of the stream */ ULARGE_INTEGER streamSize; /* current position of the cursor */ ULARGE_INTEGER currentPosition; } HGLOBALStreamImpl; static inline HGLOBALStreamImpl *impl_from_IStream16(IStream16 *iface) { return CONTAINING_RECORD(iface, HGLOBALStreamImpl, IStream16_iface); } HRESULT CDECL HGLOBALStreamImpl16_QueryInterface( SEGPTR iface, REFIID riid, /* [in] */ SEGPTR* ppvObject) /* [iid_is][out] */ { HGLOBALStreamImpl* This = impl_from_IStream16((IStream16*)MapSL(iface)); if (ppvObject==0) return E_INVALIDARG; *ppvObject = 0; if (IsEqualIID(&IID_IUnknown, riid) || IsEqualIID(&IID_ISequentialStream, riid) || IsEqualIID(&IID_IStream, riid)) { *ppvObject = iface; } if ((*ppvObject)==0) return E_NOINTERFACE16; IStream16_AddRef(iface); return S_OK; } ULONG CDECL HGLOBALStreamImpl16_AddRef(IStream16* iface) { HGLOBALStreamImpl* This = impl_from_IStream16(iface); return InterlockedIncrement(&This->ref); } ULONG CDECL HGLOBALStreamImpl16_Release( IStream16* iface) { HGLOBALStreamImpl* This= impl_from_IStream16(iface); ULONG ref = InterlockedDecrement(&This->ref); if (!ref) { if (This->deleteOnRelease) { GlobalFree16(This->supportHandle); This->supportHandle = NULL; } HeapFree(GetProcessHeap(), 0, This); } return ref; } /*** * This method is part of the ISequentialStream interface. * * If reads a block of information from the stream at the current * position. It then moves the current position at the end of the * read block * * See the documentation of ISequentialStream for more info. */ HRESULT CDECL HGLOBALStreamImpl16_Read( IStream16* iface, void* pv, /* [length_is][size_is][out] */ ULONG cb, /* [in] */ ULONG* pcbRead) /* [out] */ { HGLOBALStreamImpl* This = impl_from_IStream16(iface); void* supportBuffer; ULONG bytesReadBuffer; ULONG bytesToReadFromBuffer; TRACE("(%p, %p, %d, %p)\n", iface, pv, cb, pcbRead); /* * If the caller is not interested in the number of bytes read, * we use another buffer to avoid "if" statements in the code. */ if (pcbRead==0) pcbRead = &bytesReadBuffer; /* * Using the known size of the stream, calculate the number of bytes * to read from the block chain */ bytesToReadFromBuffer = min( This->streamSize.u.LowPart - This->currentPosition.u.LowPart, cb); /* * Lock the buffer in position and copy the data. */ supportBuffer = GlobalLock16(This->supportHandle); if (!supportBuffer) { WARN("read from invalid hglobal %p\n", This->supportHandle); *pcbRead = 0; return S_OK; } memcpy(pv, (char *) supportBuffer+This->currentPosition.u.LowPart, bytesToReadFromBuffer); /* * Move the current position to the new position */ This->currentPosition.u.LowPart+=bytesToReadFromBuffer; /* * Return the number of bytes read. */ *pcbRead = bytesToReadFromBuffer; /* * Cleanup */ GlobalUnlock16(This->supportHandle); /* * Always returns S_OK even if the end of the stream is reached before the * buffer is filled */ return S_OK; } /*** * This method is part of the ISequentialStream interface. * * It writes a block of information to the stream at the current * position. It then moves the current position at the end of the * written block. If the stream is too small to fit the block, * the stream is grown to fit. * * See the documentation of ISequentialStream for more info. */ HRESULT CDECL HGLOBALStreamImpl16_Write( IStream16* iface, const void* pv, /* [size_is][in] */ ULONG cb, /* [in] */ ULONG* pcbWritten) /* [out] */ { HGLOBALStreamImpl* This = impl_from_IStream16(iface); void* supportBuffer; ULARGE_INTEGER newSize; ULONG bytesWritten = 0; TRACE("(%p, %p, %d, %p)\n", iface, pv, cb, pcbWritten); /* * If the caller is not interested in the number of bytes written, * we use another buffer to avoid "if" statements in the code. */ if (pcbWritten == 0) pcbWritten = &bytesWritten; if (cb == 0) goto out; *pcbWritten = 0; newSize.u.HighPart = 0; newSize.u.LowPart = This->currentPosition.u.LowPart + cb; /* * Verify if we need to grow the stream */ if (newSize.u.LowPart > This->streamSize.u.LowPart) { /* grow stream */ HRESULT hr = HGLOBALStreamImpl16_SetSize(iface, newSize); if (FAILED(hr)) { ERR("IStream16_SetSize failed with error 0x%08x\n", hr); return hr; } } /* * Lock the buffer in position and copy the data. */ supportBuffer = GlobalLock16(This->supportHandle); if (!supportBuffer) { WARN("write to invalid hglobal %p\n", This->supportHandle); return S_OK; } memcpy((char *) supportBuffer+This->currentPosition.u.LowPart, pv, cb); /* * Move the current position to the new position */ This->currentPosition.u.LowPart+=cb; /* * Cleanup */ GlobalUnlock16(This->supportHandle); out: /* * Return the number of bytes read. */ *pcbWritten = cb; return S_OK; } /*** * This method is part of the IStream16 interface. * * It will move the current stream pointer according to the parameters * given. * * See the documentation of IStream16 for more info. */ HRESULT CDECL HGLOBALStreamImpl16_Seek( IStream16* iface, LARGE_INTEGER dlibMove, /* [in] */ DWORD dwOrigin, /* [in] */ ULARGE_INTEGER* plibNewPosition) /* [out] */ { HGLOBALStreamImpl* This = impl_from_IStream16(iface); ULARGE_INTEGER newPosition = This->currentPosition; HRESULT hr = S_OK; TRACE("(%p, %x%08x, %d, %p)\n", iface, dlibMove.u.HighPart, dlibMove.u.LowPart, dwOrigin, plibNewPosition); /* * The file pointer is moved depending on the given "function" * parameter. */ switch (dwOrigin) { case STREAM_SEEK_SET: newPosition.u.HighPart = 0; newPosition.u.LowPart = 0; break; case STREAM_SEEK_CUR: break; case STREAM_SEEK_END: newPosition = This->streamSize; break; default: hr = STG_E_SEEKERROR; goto end; } /* * Move the actual file pointer * If the file pointer ends-up after the end of the stream, the next Write operation will * make the file larger. This is how it is documented. */ newPosition.u.HighPart = 0; newPosition.u.LowPart += dlibMove.QuadPart; if (dlibMove.u.LowPart >= 0x80000000 && newPosition.u.LowPart >= dlibMove.u.LowPart) { /* We tried to seek backwards and went past the start. */ hr = STG_E_SEEKERROR; goto end; } This->currentPosition = newPosition; end: if (plibNewPosition) *plibNewPosition = This->currentPosition; return hr; } /*** * This method is part of the IStream16 interface. * * It will change the size of a stream. * * TODO: Switch from small blocks to big blocks and vice versa. * * See the documentation of IStream16 for more info. */ HRESULT CDECL HGLOBALStreamImpl16_SetSize( IStream16* iface, ULARGE_INTEGER libNewSize) /* [in] */ { HGLOBALStreamImpl* This = impl_from_IStream16(iface); HGLOBAL16 supportHandle; TRACE("(%p, %d)\n", iface, libNewSize.u.LowPart); /* * HighPart is ignored as shown in tests */ if (This->streamSize.u.LowPart == libNewSize.u.LowPart) return S_OK; /* * Re allocate the HGlobal to fit the new size of the stream. */ supportHandle = GlobalReAlloc16(This->supportHandle, libNewSize.u.LowPart, 0); if (supportHandle == 0) return E_OUTOFMEMORY; This->supportHandle = supportHandle; This->streamSize.u.LowPart = libNewSize.u.LowPart; return S_OK; } /*** * This method is part of the IStream16 interface. * * It will copy the 'cb' Bytes to 'pstm' IStream16. * * See the documentation of IStream16 for more info. */ HRESULT CDECL HGLOBALStreamImpl16_CopyTo( IStream16* iface, SEGPTR pstm, /* [unique][in] */ ULARGE_INTEGER cb, /* [in] */ ULARGE_INTEGER* pcbRead, /* [out] */ ULARGE_INTEGER* pcbWritten) /* [out] */ { HRESULT hr = S_OK; BYTE tmpBuffer[128]; ULONG bytesRead, bytesWritten, copySize; ULARGE_INTEGER totalBytesRead; ULARGE_INTEGER totalBytesWritten; TRACE("(%p, %08x, %d, %p, %p)\n", iface, pstm, cb.u.LowPart, pcbRead, pcbWritten); if ( pstm == 0 ) return STG_E_INVALIDPOINTER; totalBytesRead.QuadPart = 0; totalBytesWritten.QuadPart = 0; while ( cb.QuadPart > 0 ) { if ( cb.QuadPart >= sizeof(tmpBuffer) ) copySize = sizeof(tmpBuffer); else copySize = cb.u.LowPart; hr = HGLOBALStreamImpl16_Read(iface, tmpBuffer, copySize, &bytesRead); if (FAILED(hr)) break; totalBytesRead.QuadPart += bytesRead; if (bytesRead) { hr = IStream16_Write(pstm, tmpBuffer, bytesRead, MapLS(&bytesWritten)); if (FAILED(hr)) break; totalBytesWritten.QuadPart += bytesWritten; } if (bytesRead!=copySize) cb.QuadPart = 0; else cb.QuadPart -= bytesRead; } if (pcbRead) pcbRead->QuadPart = totalBytesRead.QuadPart; if (pcbWritten) pcbWritten->QuadPart = totalBytesWritten.QuadPart; return hr; } /*** * This method is part of the IStream16 interface. * * For streams supported by HGLOBALS, this function does nothing. * This is what the documentation tells us. * * See the documentation of IStream16 for more info. */ HRESULT CDECL HGLOBALStreamImpl16_Commit( IStream16* iface, DWORD grfCommitFlags) /* [in] */ { return S_OK; } /*** * This method is part of the IStream16 interface. * * For streams supported by HGLOBALS, this function does nothing. * This is what the documentation tells us. * * See the documentation of IStream16 for more info. */ HRESULT CDECL HGLOBALStreamImpl16_Revert( IStream16* iface) { return S_OK; } /*** * This method is part of the IStream16 interface. * * For streams supported by HGLOBALS, this function does nothing. * This is what the documentation tells us. * * See the documentation of IStream16 for more info. */ HRESULT CDECL HGLOBALStreamImpl16_LockRegion( IStream16* iface, ULARGE_INTEGER libOffset, /* [in] */ ULARGE_INTEGER cb, /* [in] */ DWORD dwLockType) /* [in] */ { return STG_E_INVALIDFUNCTION; } /* * This method is part of the IStream16 interface. * * For streams supported by HGLOBALS, this function does nothing. * This is what the documentation tells us. * * See the documentation of IStream16 for more info. */ HRESULT CDECL HGLOBALStreamImpl16_UnlockRegion( IStream16* iface, ULARGE_INTEGER libOffset, /* [in] */ ULARGE_INTEGER cb, /* [in] */ DWORD dwLockType) /* [in] */ { return S_OK; } /*** * This method is part of the IStream16 interface. * * This method returns information about the current * stream. * * See the documentation of IStream16 for more info. */ HRESULT CDECL HGLOBALStreamImpl16_Stat( IStream16* iface, STATSTG16* pstatstg, /* [out] */ DWORD grfStatFlag) /* [in] */ { HGLOBALStreamImpl* This = impl_from_IStream16(iface); memset(pstatstg, 0, sizeof(STATSTG16)); pstatstg->pwcsName = NULL; pstatstg->type = STGTY_STREAM; pstatstg->cbSize = This->streamSize; return S_OK; } HRESULT CDECL HGLOBALStreamImpl16_Clone( IStream16* iface, SEGPTR* ppstm) /* [out] */ { HGLOBALStreamImpl* This = impl_from_IStream16(iface); ULARGE_INTEGER dummy; LARGE_INTEGER offset; HRESULT hr; TRACE(" Cloning %p (deleteOnRelease=%d seek position=%ld)\n",iface,This->deleteOnRelease,(long)This->currentPosition.QuadPart); hr = CreateStreamOnHGlobal16(This->supportHandle, FALSE, ppstm); if(FAILED(hr)) return hr; offset.QuadPart = (LONGLONG)This->currentPosition.QuadPart; IStream16_Seek(*ppstm, *(ULARGE_INTEGER*)&offset, STREAM_SEEK_SET, MapLS(&dummy)); return S_OK; } static IStream16Vtbl HGLOBALStreamImplVtbl; static SEGPTR SegHGLOBALStreamImplVtbl; /*********************************************************************** * CreateStreamOnHGlobal [OLE32.@] */ HRESULT WINAPI CreateStreamOnHGlobal16( HGLOBAL16 hGlobal, BOOL fDeleteOnRelease, SEGPTR* ppstm) { HGLOBALStreamImpl* This; if (!ppstm) return E_INVALIDARG16; This = HeapAlloc(GetProcessHeap(), 0, sizeof(HGLOBALStreamImpl)); if (!This) return E_OUTOFMEMORY16; if (!SegHGLOBALStreamImplVtbl) { HMODULE16 hole = GetModuleHandle16("OLE2"); #define VTENT(x) HGLOBALStreamImplVtbl.x = (void*)GetProcAddress16(hole,"HGLOBALStreamImpl16_"#x);assert(HGLOBALStreamImplVtbl.x) VTENT(QueryInterface); VTENT(AddRef); VTENT(Release); VTENT(Read); VTENT(Write); VTENT(Seek); VTENT(SetSize); VTENT(CopyTo); VTENT(Commit); VTENT(Revert); VTENT(LockRegion); VTENT(UnlockRegion); VTENT(Stat); VTENT(Clone); #undef VTENT SegHGLOBALStreamImplVtbl = MapLS(&HGLOBALStreamImplVtbl); } This->IStream16_iface.lpVtbl = SegHGLOBALStreamImplVtbl; This->ref = 1; /* initialize the support */ This->supportHandle = hGlobal; This->deleteOnRelease = fDeleteOnRelease; /* allocate a handle if one is not supplied */ if (!This->supportHandle) This->supportHandle = GlobalAlloc16(GMEM_MOVEABLE|GMEM_NODISCARD|GMEM_SHARE, 0); /* start at the beginning */ This->currentPosition.u.HighPart = 0; This->currentPosition.u.LowPart = 0; /* initialize the size of the stream to the size of the handle */ This->streamSize.u.HighPart = 0; This->streamSize.u.LowPart = GlobalSize16(This->supportHandle); *ppstm = MapLS(&This->IStream16_iface); return S_OK; } /*********************************************************************** * GetHGlobalFromStream [OLE32.@] */ HRESULT WINAPI GetHGlobalFromStream16(IStream16* pstm, HGLOBAL16* phglobal) { HGLOBALStreamImpl* pStream; if (pstm == NULL) return E_INVALIDARG16; pStream = impl_from_IStream16(pstm); /* * Verify that the stream object was created with CreateStreamOnHGlobal. */ if (pStream->IStream16_iface.lpVtbl == SegHGLOBALStreamImplVtbl) *phglobal = pStream->supportHandle; else { *phglobal = 0; return E_INVALIDARG16; } return S_OK; } ================================================ FILE: ole2/ifs.h ================================================ /* * Copyright 1997 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLE_IFS_H #define __WINE_OLE_IFS_H #include #include "windef.h" #include "winbase.h" #include "objbase.h" typedef CHAR OLECHAR16; typedef LPSTR LPOLESTR16; typedef LPCSTR LPCOLESTR16; #define STDMETHOD16CALLTYPE __cdecl #define STDMETHOD16(m) HRESULT (STDMETHOD16CALLTYPE *m) #define STDMETHOD16_(t,m) t (STDMETHOD16CALLTYPE *m) #define GET_SEGPTR_METHOD_ADDR(ifacename,segptr,methodname) \ ((SEGPTR)((const ifacename##Vtbl*)MapSL((SEGPTR)((ifacename*)MapSL(segptr))->lpVtbl))->methodname) #include "wownt32.h" #define STGMEDIUM16 /* FIXME*/ #define tagBINDPTR /* FIXME */ #include "ifs_16.h" SEGPTR iface32_16(REFIID riid, void *iface32); void *iface16_32(REFIID riid, SEGPTR iface16); /* COM error codes */ #define E_UNEXPECTED16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 0xFFFF ) #define E_NOTIMPL16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 1 ) #define E_OUTOFMEMORY16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 2 ) #define E_INVALIDARG16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 3 ) #define E_NOINTERFACE16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 4 ) #define E_POINTER16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 5 ) #define E_HANDLE16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 6 ) #define E_ABORT16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 7 ) #define E_FAIL16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 8 ) #define E_ACCESSDENIED16 MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 9 ) HRESULT hresult32_16(HRESULT hresult); HRESULT hresult16_32(HRESULT hresult); void free_iface32(void *iface); #undef STGMEDIUM16 #undef tagBINDPTR static LPWSTR strdupAtoW(LPCSTR str) { LPWSTR ret; INT len; if (!str) return NULL; len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); if (ret) MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len); return ret; } static LPCSTR strdupWtoA(LPCWSTR str) { LPSTR ret; INT len; if (!str) return NULL; len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL); ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(CHAR)); if (ret) WideCharToMultiByte(CP_ACP, 0, str, -1, ret, len, NULL, NULL); return ret; } /**********************************************************************/ #include typedef struct tagSAFEARRAYBOUND16 { ULONG cElements; LONG lLbound; } SAFEARRAYBOUND16; typedef struct tagSTATSTG16 { LPOLESTR16 pwcsName; DWORD type; ULARGE_INTEGER cbSize; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD grfMode; DWORD grfLocksSupported; CLSID clsid; DWORD grfStateBits; DWORD reserved; } STATSTG16; typedef struct { CLIPFORMAT cfFormat; SEGPTR/*DVTARGETDEVICE FAR**/ ptd; DWORD dwAspect; LONG lindex; DWORD tymed; } FORMATETC16; typedef struct { DWORD tymed; union { HANDLE16 hGlobal; SEGPTR/*LPSTR*/lpszFileName; SEGPTR/*LPSTREAM*/pstm; SEGPTR/*LPSTORAGE*/pstg; } DUMMYUNIONNAME; SEGPTR /*LPUNKNOWN*/pUnkForRelease; } STGMEDIUM16; typedef struct { FORMATETC16 formatetc; DWORD advf; /*LPADVISESINK*/SEGPTR pAdvSink; DWORD dwConnection; } STATDATA16; #include void map_stgmedium32_16(STGMEDIUM16 *a16, const STGMEDIUM *a32); void map_stgmedium16_32(STGMEDIUM *a32, const STGMEDIUM16 *a16); void map_formatetc16_32(FORMATETC *a32, const FORMATETC16 *a16); void map_formatetc32_16(FORMATETC16 *a16, const FORMATETC *a32); struct TYP16_tagOleInPlaceFrameInfo { UINT16 cb; BOOL16 fMDIApp; HWND16 hwndFrame; HACCEL16 haccel; INT16 cAccelEntries; }; void map_oleinplaceframeinfo16_32(OLEINPLACEFRAMEINFO *a32, const struct TYP16_tagOleInPlaceFrameInfo *a16); void map_oleinplaceframeinfo32_16(struct TYP16_tagOleInPlaceFrameInfo *a16, const OLEINPLACEFRAMEINFO *a32); #endif /* __WINE_OLE_IFS_H */ ================================================ FILE: ole2/ifs.idl ================================================ /* * Thunk supports for 16-bit COM interface * based on unknwn.idl, objidl.idl, oleidl.idl */ /* * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "../wine/windows/wtypes.idl"; #endif typedef struct tagSIZEL { LONG cx; LONG cy; } SIZEL, *PSIZEL, *LPSIZEL; [ local, object, uuid(00000000-0000-0000-C000-000000000046), pointer_default(unique) ] interface IUnknown { typedef [unique] IUnknown *LPUNKNOWN; HRESULT QueryInterface( [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); ULONG AddRef(); ULONG Release(); } [ object, uuid(00000001-0000-0000-C000-000000000046), pointer_default(unique) ] interface IClassFactory : IUnknown { typedef [unique] IClassFactory *LPCLASSFACTORY; [local] HRESULT CreateInstance( [in, unique] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); [call_as(CreateInstance)] HRESULT RemoteCreateInstance( [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObject); [local] HRESULT LockServer( [in] BOOL fLock); [call_as(LockServer)] HRESULT RemoteLockServer( [in] BOOL fLock); } interface IStream; interface IEnumString; interface IRunningObjectTable; interface IMoniker; interface IAdviseSink; /******************** Fundamentals ********************/ [ local, object, uuid(00000003-0000-0000-C000-000000000046) ] interface IMarshal : IUnknown { typedef [unique] IMarshal *LPMARSHAL; HRESULT GetUnmarshalClass( [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags, [out] CLSID *pCid); HRESULT GetMarshalSizeMax( [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags, [out] DWORD *pSize); HRESULT MarshalInterface( [in, unique] IStream *pStm, [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags); HRESULT UnmarshalInterface( [in, unique] IStream *pStm, [in] REFIID riid, [out] void **ppv); HRESULT ReleaseMarshalData( [in, unique] IStream *pStm); HRESULT DisconnectObject( [in] DWORD dwReserved); } [ local, object, uuid(00000018-0000-0000-C000-000000000046) ] interface IStdMarshalInfo : IUnknown { typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO; HRESULT GetClassForHandler( [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [out] CLSID *pClsid); } [ local, object, uuid(00000019-0000-0000-C000-000000000046) ] interface IExternalConnection : IUnknown { typedef [unique] IExternalConnection *LPEXTERNALCONNECTION; typedef enum tagEXTCONN { EXTCONN_STRONG = 0x0001, EXTCONN_WEAK = 0x0002, EXTCONN_CALLABLE = 0x0004 } EXTCONN; DWORD AddConnection( [in] DWORD extconn, [in] DWORD reserved); DWORD ReleaseConnection( [in] DWORD extconn, [in] DWORD reserved, [in] BOOL fLastReleaseCloses); } [ local, object, uuid(00000002-0000-0000-C000-000000000046) ] interface IMalloc : IUnknown { typedef [unique] IMalloc *LPMALLOC; LPVOID Alloc( [in] SIZE_T cb); LPVOID Realloc( [in] LPVOID pv, [in] SIZE_T cb); void Free( [in] LPVOID pv); SIZE_T GetSize( [in] LPVOID pv); int DidAlloc(LPVOID pv); void HeapMinimize(); } [ object, uuid(00000100-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumUnknown : IUnknown { typedef [unique] IEnumUnknown *LPENUMUNKNOWN; [local] HRESULT Next( [in] ULONG celt, [out] IUnknown **rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IUnknown **rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumUnknown **ppenum); } typedef struct _COSERVERINFO { DWORD dwReserved1; LPWSTR pwszName; COAUTHINFO *pAuthInfo; DWORD dwReserved2; } COSERVERINFO; /******************** Monikers ********************/ [ object, uuid(0000000e-0000-0000-C000-000000000046), pointer_default(unique) ] interface IBindCtx : IUnknown { typedef [unique] IBindCtx *LPBINDCTX; typedef [unique] IBindCtx *LPBC; typedef struct tagBIND_OPTS { DWORD cbStruct; DWORD grfFlags; DWORD grfMode; DWORD dwTickCountDeadline; } BIND_OPTS, *LPBIND_OPTS; /* FIXME: C++ crap */ typedef struct tagBIND_OPTS2 { DWORD cbStruct; DWORD grfFlags; DWORD grfMode; DWORD dwTickCountDeadline; DWORD dwTrackFlags; DWORD dwClassContext; LCID locale; COSERVERINFO *pServerInfo; } BIND_OPTS2, *LPBIND_OPTS2; typedef struct tagBIND_OPTS3 { DWORD cbStruct; DWORD grfFlags; DWORD grfMode; DWORD dwTickCountDeadline; DWORD dwTrackFlags; DWORD dwClassContext; LCID locale; COSERVERINFO *pServerInfo; HWND hwnd; } BIND_OPTS3, *LPBIND_OPTS3; typedef enum tagBIND_FLAGS { BIND_MAYBOTHERUSER = 1, BIND_JUSTTESTEXISTENCE = 2 } BIND_FLAGS; HRESULT RegisterObjectBound( [in, unique] IUnknown *punk); HRESULT RevokeObjectBound( [in, unique] IUnknown *punk); HRESULT ReleaseBoundObjects(); [local] HRESULT SetBindOptions( [in] BIND_OPTS *pbindopts); [call_as(SetBindOptions)] HRESULT RemoteSetBindOptions( [in] BIND_OPTS2 *pbindopts); [local] HRESULT GetBindOptions( [in, out] BIND_OPTS *pbindopts); [call_as(GetBindOptions)] HRESULT RemoteGetBindOptions( [in, out] BIND_OPTS2 *pbindopts); HRESULT GetRunningObjectTable( [out] IRunningObjectTable **pprot); HRESULT RegisterObjectParam( [in] LPOLESTR pszKey, [in, unique] IUnknown *punk); HRESULT GetObjectParam( [in] LPOLESTR pszKey, [out] IUnknown **ppunk); HRESULT EnumObjectParam( [out] IEnumString **ppenum); HRESULT RevokeObjectParam( [in] LPOLESTR pszKey); } [ object, uuid(00000102-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumMoniker : IUnknown { typedef [unique] IEnumMoniker *LPENUMMONIKER; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IMoniker **rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IMoniker **rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumMoniker **ppenum); } [ object, uuid(00000126-0000-0000-C000-000000000046) ] interface IRunnableObject : IUnknown { typedef [unique] IRunnableObject *LPRUNNABLEOBJECT; HRESULT GetRunningClass( [out] LPCLSID lpClsid); HRESULT Run( [in] LPBINDCTX pbc); [local] BOOL IsRunning(); [call_as(IsRunning)] HRESULT RemoteIsRunning(); HRESULT LockRunning( [in] BOOL fLock, [in] BOOL fLastUnlockCloses); HRESULT SetContainedObject( [in] BOOL fContained); } /* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject), * which resolves to a compilation failure if WINE_NO_UNICODE_MACROS is defined, * but GetObject is used as a valid method name below, so we have * to undefine it in that case */ cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetObject") cpp_quote("#endif") [ object, uuid(00000010-0000-0000-C000-000000000046) ] interface IRunningObjectTable : IUnknown { typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE; HRESULT Register( [in] DWORD grfFlags, [in, unique] IUnknown *punkObject, [in, unique] IMoniker *pmkObjectName, [out] DWORD *pdwRegister); HRESULT Revoke( [in] DWORD dwRegister); HRESULT IsRunning( [in, unique] IMoniker *pmkObjectName); HRESULT GetObject( [in, unique] IMoniker *pmkObjectName, [out] IUnknown **ppunkObject); HRESULT NoteChangeTime( [in] DWORD dwRegister, [in] FILETIME *pfiletime); HRESULT GetTimeOfLastChange( [in, unique] IMoniker *pmkObjectName, [out] FILETIME *pfiletime); HRESULT EnumRunning( [out] IEnumMoniker **ppenumMoniker); } [ object, uuid(0000010c-0000-0000-C000-000000000046) ] interface IPersist : IUnknown { typedef [unique] IPersist *LPPERSIST; HRESULT GetClassID( [out] CLSID *pClassID); } [ object, uuid(00000109-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPersistStream : IPersist { typedef [unique] IPersistStream *LPPERSISTSTREAM; HRESULT IsDirty(); HRESULT Load( [in, unique] IStream *pStm); HRESULT Save( [in, unique] IStream *pStm, [in] BOOL fClearDirty); HRESULT GetSizeMax( [out] ULARGE_INTEGER *pcbSize); } [ object, uuid(0000000f-0000-0000-C000-000000000046), pointer_default(unique) ] interface IMoniker : IPersistStream { typedef [unique] IMoniker *LPMONIKER; typedef enum tagMKSYS { MKSYS_NONE = 0, MKSYS_GENERICCOMPOSITE = 1, MKSYS_FILEMONIKER = 2, MKSYS_ANTIMONIKER = 3, MKSYS_ITEMMONIKER = 4, MKSYS_POINTERMONIKER = 5, /* MKSYS_URLMONIKER = 6, */ /* defined in urlmon.idl */ MKSYS_CLASSMONIKER = 7 } MKSYS; typedef [v1_enum] enum tagMKREDUCE { MKRREDUCE_ONE = 3 << 16, MKRREDUCE_TOUSER = 2 << 16, MKRREDUCE_THROUGHUSER = 1 << 16, MKRREDUCE_ALL = 0 } MKRREDUCE; [local] HRESULT BindToObject( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riidResult, [out, iid_is(riidResult)] void **ppvResult); [call_as(BindToObject)] HRESULT RemoteBindToObject( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riidResult, [out, iid_is(riidResult)] IUnknown **ppvResult); [local] HRESULT BindToStorage( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj); [call_as(BindToStorage)] HRESULT RemoteBindToStorage( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObj); HRESULT Reduce( [in, unique] IBindCtx *pbc, [in] DWORD dwReduceHowFar, [in, out, unique] IMoniker **ppmkToLeft, [out] IMoniker **ppmkReduced); HRESULT ComposeWith( [in, unique] IMoniker *pmkRight, [in] BOOL fOnlyIfNotGeneric, [out] IMoniker **ppmkComposite); HRESULT Enum( [in] BOOL fForward, [out] IEnumMoniker **ppenumMoniker); HRESULT IsEqual( [in, unique] IMoniker *pmkOtherMoniker); HRESULT Hash( [out] DWORD *pdwHash); HRESULT IsRunning( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in, unique] IMoniker *pmkNewlyRunning); HRESULT GetTimeOfLastChange( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [out] FILETIME *pFileTime); HRESULT Inverse( [out] IMoniker **ppmk); HRESULT CommonPrefixWith( [in, unique] IMoniker *pmkOther, [out] IMoniker **ppmkPrefix); HRESULT RelativePathTo( [in, unique] IMoniker *pmkOther, [out] IMoniker **ppmkRelPath); HRESULT GetDisplayName( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [out] LPOLESTR *ppszDisplayName); HRESULT ParseDisplayName( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] LPOLESTR pszDisplayName, [out] ULONG *pchEaten, [out] IMoniker **ppmkOut); HRESULT IsSystemMoniker( [out] DWORD *pdwMksys); } [ object, uuid(00000101-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumString : IUnknown { typedef [unique] IEnumString *LPENUMSTRING; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLESTR *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLESTR *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumString **ppenum); } /******************** Storage ********************/ [ object, uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ISequentialStream : IUnknown { [local] HRESULT Read( [out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead); [call_as(Read)] HRESULT RemoteRead( [out, size_is(cb), length_is(*pcbRead)] byte *pv, [in] ULONG cb, [out] ULONG *pcbRead); [local] HRESULT Write( [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(Write)] HRESULT RemoteWrite( [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); } [ object, uuid(0000000c-0000-0000-C000-000000000046), pointer_default(unique) ] interface IStream : ISequentialStream { typedef [unique] IStream *LPSTREAM; typedef struct tagSTATSTG { LPOLESTR pwcsName; DWORD type; ULARGE_INTEGER cbSize; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD grfMode; DWORD grfLocksSupported; CLSID clsid; DWORD grfStateBits; DWORD reserved; } STATSTG; typedef enum tagSTGTY { STGTY_STORAGE = 1, STGTY_STREAM = 2, STGTY_LOCKBYTES = 3, STGTY_PROPERTY = 4 } STGTY; typedef enum tagSTREAM_SEEK { STREAM_SEEK_SET = 0, STREAM_SEEK_CUR = 1, STREAM_SEEK_END = 2 } STREAM_SEEK; /* these are defined in Linux's fcntl.h, * undefine them to avoid conflicts */ cpp_quote("#undef LOCK_MAND") cpp_quote("#undef LOCK_READ") cpp_quote("#undef LOCK_WRITE") cpp_quote("#undef LOCK_RW") typedef enum tagLOCKTYPE { LOCK_WRITE = 1, LOCK_EXCLUSIVE = 2, LOCK_ONLYONCE = 4 } LOCKTYPE; [local] HRESULT Seek( [in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] ULARGE_INTEGER *plibNewPosition); [call_as(Seek)] HRESULT RemoteSeek( [in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] ULARGE_INTEGER *plibNewPosition); HRESULT SetSize( [in] ULARGE_INTEGER libNewSize); [local] HRESULT CopyTo( [in, unique] IStream *pstm, [in] ULARGE_INTEGER cb, [out] ULARGE_INTEGER *pcbRead, [out] ULARGE_INTEGER *pcbWritten); [call_as(CopyTo)] HRESULT RemoteCopyTo( [in, unique] IStream *pstm, [in] ULARGE_INTEGER cb, [out] ULARGE_INTEGER *pcbRead, [out] ULARGE_INTEGER *pcbWritten); HRESULT Commit( [in] DWORD grfCommitFlags); HRESULT Revert(); HRESULT LockRegion( [in] ULARGE_INTEGER libOffset, [in] ULARGE_INTEGER cb, [in] DWORD dwLockType); HRESULT UnlockRegion( [in] ULARGE_INTEGER libOffset, [in] ULARGE_INTEGER cb, [in] DWORD dwLockType); HRESULT Stat( [out] STATSTG *pstatstg, [in] DWORD grfStatFlag); HRESULT Clone( [out] IStream **ppstm); } [ object, uuid(0000000d-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATSTG : IUnknown { typedef [unique] IEnumSTATSTG *LPENUMSTATSTG; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATSTG *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATSTG *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATSTG **ppenum); } [ object, uuid(0000000b-0000-0000-C000-000000000046), pointer_default(unique) ] interface IStorage : IUnknown { typedef [unique] IStorage *LPSTORAGE; typedef struct tagRemSNB { unsigned long ulCntStr; unsigned long ulCntChar; [size_is(ulCntChar)] OLECHAR rgString[]; } RemSNB; typedef [unique] RemSNB *wireSNB; typedef [wire_marshal(wireSNB)] OLECHAR **SNB; HRESULT CreateStream( [in] LPCOLESTR pwcsName, [in] DWORD grfMode, [in] DWORD reserved1, [in] DWORD reserved2, [out] IStream **ppstm); [local] HRESULT OpenStream( [in] LPCOLESTR pwcsName, [in, unique] void *reserved1, [in] DWORD grfMode, [in] DWORD reserved2, [out] IStream **ppstm); [call_as(OpenStream)] HRESULT RemoteOpenStream( [in] LPCOLESTR pwcsName, [in] unsigned long cbReserved1, [in, unique, size_is(cbReserved1)] byte *reserved1, [in] DWORD grfMode, [in] DWORD reserved2, [out] IStream **ppstm); HRESULT CreateStorage( [in] LPCOLESTR pwcsName, [in] DWORD grfMode, [in] DWORD dwStgFmt, [in] DWORD reserved2, [out] IStorage **ppstg); HRESULT OpenStorage( [in, unique] LPCOLESTR pwcsName, [in, unique] IStorage *pstgPriority, [in] DWORD grfMode, [in, unique] SNB snbExclude, [in] DWORD reserved, [out] IStorage **ppstg); HRESULT CopyTo( [in] DWORD ciidExclude, [in, unique, size_is(ciidExclude)] const IID *rgiidExclude, [in, unique] SNB snbExclude, [in, unique] IStorage *pstgDest); HRESULT MoveElementTo( [in] LPCOLESTR pwcsName, [in, unique] IStorage *pstgDest, [in] LPCOLESTR pwcsNewName, [in] DWORD grfFlags); HRESULT Commit( [in] DWORD grfCommitFlags); HRESULT Revert(); [local] HRESULT EnumElements( [in] DWORD reserved1, [in, unique, size_is(1)] void *reserved2, [in] DWORD reserved3, [out] IEnumSTATSTG **ppenum); [call_as(EnumElements)] HRESULT RemoteEnumElements( [in] DWORD reserved1, [in] unsigned long cbReserved2, [in, unique, size_is(cbReserved2)] byte *reserved2, [in] DWORD reserved3, [out] IEnumSTATSTG **ppenum); HRESULT DestroyElement( [in] LPCOLESTR pwcsName); HRESULT RenameElement( [in] LPCOLESTR pwcsOldName, [in] LPCOLESTR pwcsNewName); HRESULT SetElementTimes( [in, unique] LPCOLESTR pwcsName, [in, unique] const FILETIME *pctime, [in, unique] const FILETIME *patime, [in, unique] const FILETIME *pmtime); HRESULT SetClass( [in] REFCLSID clsid); HRESULT SetStateBits( [in] DWORD grfStateBits, [in] DWORD grfMask); HRESULT Stat( [out] STATSTG *pstatstg, [in] DWORD grfStatFlag); } [ object, uuid(0000010b-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPersistFile : IPersist { typedef [unique] IPersistFile *LPPERSISTFILE; HRESULT IsDirty(); HRESULT Load( [in] LPCOLESTR pszFileName, [in] DWORD dwMode); HRESULT Save( [in, unique] LPCOLESTR pszFileName, [in] BOOL fRemember); HRESULT SaveCompleted( [in, unique] LPCOLESTR pszFileName); HRESULT GetCurFile( [out] LPOLESTR *ppszFileName); } [ object, uuid(0000010a-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPersistStorage : IPersist { typedef [unique] IPersistStorage *LPPERSISTSTORAGE; HRESULT IsDirty(); HRESULT InitNew( [in, unique] IStorage *pStg); HRESULT Load( [in, unique] IStorage *pStg); HRESULT Save( [in, unique] IStorage *pStgSave, [in] BOOL fSameAsLoad); HRESULT SaveCompleted( [in, unique] IStorage *pStgNew); HRESULT HandsOffStorage(); } [ object, uuid(00000012-0000-0000-C000-000000000046), pointer_default(unique) ] interface IRootStorage : IUnknown { typedef [unique] IRootStorage *LPROOTSTORAGE; HRESULT SwitchToFile( [in] LPOLESTR pszFile); } [ object, uuid(0000000a-0000-0000-C000-000000000046), pointer_default(unique) ] interface ILockBytes : IUnknown { typedef [unique] ILockBytes *LPLOCKBYTES; [local] HRESULT ReadAt( [in] ULARGE_INTEGER ulOffset, [out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead); [call_as(ReadAt)] HRESULT RemoteReadAt( [in] ULARGE_INTEGER ulOffset, [out, size_is(cb), length_is(*pcbRead)] byte *pv, [in] ULONG cb, [out] ULONG *pcbRead); [local] HRESULT WriteAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(WriteAt)] HRESULT RemoteWriteAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); HRESULT Flush(); HRESULT SetSize( [in] ULARGE_INTEGER cb); HRESULT LockRegion( [in] ULARGE_INTEGER libOffset, [in] ULARGE_INTEGER cb, [in] DWORD dwLockType); HRESULT UnlockRegion( [in] ULARGE_INTEGER libOffset, [in] ULARGE_INTEGER cb, [in] DWORD dwLockType); HRESULT Stat( [out] STATSTG *pstatstg, [in] DWORD grfStatFlag); } /******************** Data Object ********************/ [ object, uuid(00000103-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumFORMATETC : IUnknown { typedef [unique] IEnumFORMATETC *LPENUMFORMATETC; typedef struct tagDVTARGETDEVICE { DWORD tdSize; WORD tdDriverNameOffset; WORD tdDeviceNameOffset; WORD tdPortNameOffset; WORD tdExtDevmodeOffset; [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))] BYTE tdData[]; } DVTARGETDEVICE; typedef CLIPFORMAT *LPCLIPFORMAT; typedef struct tagFORMATETC { CLIPFORMAT cfFormat; [unique] DVTARGETDEVICE *ptd; DWORD dwAspect; LONG lindex; DWORD tymed; } FORMATETC, *LPFORMATETC; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] FORMATETC *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] FORMATETC *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumFORMATETC **ppenum); } [ object, uuid(00000105-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATDATA : IUnknown { typedef [unique] IEnumSTATDATA *LPENUMSTATDATA; typedef enum tagADVF { ADVF_NODATA = 1, ADVF_PRIMEFIRST = 2, ADVF_ONLYONCE = 4, ADVF_DATAONSTOP = 64, ADVFCACHE_NOHANDLER = 8, ADVFCACHE_FORCEBUILTIN = 16, ADVFCACHE_ONSAVE = 32 } ADVF; typedef struct tagSTATDATA { FORMATETC formatetc; DWORD advf; [unique] IAdviseSink *pAdvSink; DWORD dwConnection; } STATDATA, *LPSTATDATA; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATDATA *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATDATA *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATDATA **ppenum); } [ object, uuid(0000010f-0000-0000-C000-000000000046), pointer_default(unique) ] interface IAdviseSink : IUnknown { typedef IAdviseSink *LPADVISESINK; typedef [v1_enum] enum tagTYMED { TYMED_HGLOBAL = 1, TYMED_FILE = 2, TYMED_ISTREAM = 4, TYMED_ISTORAGE = 8, TYMED_GDI = 16, TYMED_MFPICT = 32, TYMED_ENHMF = 64, TYMED_NULL = 0 } TYMED; typedef struct tagRemSTGMEDIUM { DWORD tymed; DWORD dwHandleType; unsigned long pData; unsigned long pUnkForRelease; unsigned long cbData; [size_is(cbData)] byte data[]; } RemSTGMEDIUM; typedef struct tagSTGMEDIUM { DWORD tymed; [switch_is(tymed)] union { [case(TYMED_GDI)] HBITMAP hBitmap; [case(TYMED_MFPICT)] HMETAFILEPICT hMetaFilePict; [case(TYMED_ENHMF)] HENHMETAFILE hEnhMetaFile; [case(TYMED_HGLOBAL)] HGLOBAL hGlobal; [case(TYMED_FILE)] LPOLESTR lpszFileName; [case(TYMED_ISTREAM)] IStream *pstm; [case(TYMED_ISTORAGE)] IStorage *pstg; [default] ; } DUMMYUNIONNAME; [unique] IUnknown *pUnkForRelease; } uSTGMEDIUM; /* copied from wingdi.h */ #define OBJ_PEN 1 #define OBJ_BRUSH 2 #define OBJ_DC 3 #define OBJ_METADC 4 #define OBJ_PAL 5 #define OBJ_FONT 6 #define OBJ_BITMAP 7 #define OBJ_REGION 8 #define OBJ_METAFILE 9 #define OBJ_MEMDC 10 #define OBJ_EXTPEN 11 #define OBJ_ENHMETADC 12 #define OBJ_ENHMETAFILE 13 typedef union _GDI_OBJECT switch(DWORD ObjectType) u { case OBJ_BITMAP: wireHBITMAP hBitmap; case OBJ_PAL: wireHPALETTE hPalette; default: wireHGLOBAL hGeneric; } GDI_OBJECT; typedef struct _userSTGMEDIUM { union switch(DWORD tymed) u { case TYMED_NULL: ; case TYMED_MFPICT: wireHMETAFILEPICT hMetaFilePict; case TYMED_ENHMF: wireHENHMETAFILE hHEnhMetaFile; case TYMED_GDI: GDI_OBJECT *hGdiHandle; case TYMED_HGLOBAL: wireHGLOBAL hGlobal; case TYMED_FILE: LPOLESTR lpszFileName; case TYMED_ISTREAM: BYTE_BLOB *pstm; case TYMED_ISTORAGE: BYTE_BLOB *pstg; } DUMMYUNIONNAME; IUnknown *pUnkForRelease; } userSTGMEDIUM; typedef [unique] userSTGMEDIUM *wireSTGMEDIUM; typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM; typedef [unique] userSTGMEDIUM *wireASYNC_STGMEDIUM; typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM; typedef STGMEDIUM *LPSTGMEDIUM; typedef struct _userFLAG_STGMEDIUM { long ContextFlags; long fPassOwnership; userSTGMEDIUM Stgmed; } userFLAG_STGMEDIUM; typedef [unique] userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM; typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM { long ContextFlags; long fPassOwnership; STGMEDIUM Stgmed; } FLAG_STGMEDIUM; [local] void OnDataChange( [in, unique] FORMATETC *pFormatetc, [in, unique] STGMEDIUM *pStgmed); [call_as(OnDataChange)] HRESULT RemoteOnDataChange( [in, unique] FORMATETC *pFormatetc, [in, unique] ASYNC_STGMEDIUM *pStgmed); [local] void OnViewChange( [in] DWORD dwAspect, [in] LONG lindex); [call_as(OnViewChange)] HRESULT RemoteOnViewChange( [in] DWORD dwAspect, [in] LONG lindex); [local] void OnRename( [in] IMoniker *pmk); [call_as(OnRename)] HRESULT RemoteOnRename( [in] IMoniker *pmk); [local] void OnSave(); [call_as(OnSave)] HRESULT RemoteOnSave(); [local] void OnClose(); [call_as(OnClose)] HRESULT RemoteOnClose(); } [ object, uuid(00000125-0000-0000-C000-000000000046), pointer_default(unique) ] interface IAdviseSink2 : IAdviseSink { typedef [unique] IAdviseSink2 *LPADVISESINK2; [local] void OnLinkSrcChange( [in, unique] IMoniker *pmk); [call_as(OnLinkSrcChange)] HRESULT RemoteOnLinkSrcChange( [in, unique] IMoniker *pmk); } [ object, uuid(0000010e-0000-0000-C000-000000000046), pointer_default(unique) ] interface IDataObject : IUnknown { typedef [unique] IDataObject *LPDATAOBJECT; typedef enum tagDATADIR { DATADIR_GET = 1, DATADIR_SET = 2 } DATADIR; [local] HRESULT GetData( [in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium); [call_as(GetData)] HRESULT RemoteGetData( [in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pRemoteMedium); [local] HRESULT GetDataHere( [in, unique] FORMATETC *pformatetc, [in, out] STGMEDIUM *pmedium); [call_as(GetDataHere)] HRESULT RemoteGetDataHere( [in, unique] FORMATETC *pformatetc, [in, out] STGMEDIUM *pRemoteMedium); HRESULT QueryGetData( [in, unique] FORMATETC *pformatetc); HRESULT GetCanonicalFormatEtc( [in, unique] FORMATETC *pformatectIn, [out] FORMATETC *pformatetcOut); [local] HRESULT SetData( [in, unique] FORMATETC *pformatetc, [in, unique] STGMEDIUM *pmedium, [in] BOOL fRelease); [call_as(SetData)] HRESULT RemoteSetData( [in, unique] FORMATETC *pformatetc, [in, unique] FLAG_STGMEDIUM *pmedium, [in] BOOL fRelease); HRESULT EnumFormatEtc( [in] DWORD dwDirection, [out] IEnumFORMATETC **ppenumFormatEtc); HRESULT DAdvise( [in] FORMATETC *pformatetc, [in] DWORD advf, [in, unique] IAdviseSink *pAdvSink, [out] DWORD *pdwConnection); HRESULT DUnadvise( [in] DWORD dwConnection); HRESULT EnumDAdvise( [out] IEnumSTATDATA **ppenumAdvise); } [ local, object, uuid(00000110-0000-0000-C000-000000000046) ] interface IDataAdviseHolder : IUnknown { typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER; HRESULT Advise( [in, unique] IDataObject *pDataObject, [in, unique] FORMATETC *pFetc, [in] DWORD advf, [in, unique] IAdviseSink *pAdvise, [out] DWORD *pdwConnection); HRESULT Unadvise( [in] DWORD dwConnection); HRESULT EnumAdvise( [out] IEnumSTATDATA **ppenumAdvise); HRESULT SendOnDataChange( [in, unique] IDataObject *pDataObject, [in] DWORD dwReserved, [in] DWORD advf); } /******************** Remoting ********************/ [ local, object, uuid(00000016-0000-0000-C000-000000000046) ] interface IMessageFilter : IUnknown { typedef [unique] IMessageFilter *LPMESSAGEFILTER; typedef enum tagCALLTYPE { CALLTYPE_TOPLEVEL = 1, CALLTYPE_NESTED = 2, CALLTYPE_ASYNC = 3, CALLTYPE_TOPLEVEL_CALLPENDING = 4, CALLTYPE_ASYNC_CALLPENDING = 5 } CALLTYPE; typedef enum tagSERVERCALL { SERVERCALL_ISHANDLED = 0, SERVERCALL_REJECTED = 1, SERVERCALL_RETRYLATER = 2 } SERVERCALL; typedef enum tagPENDINGTYPE { PENDINGTYPE_TOPLEVEL = 1, PENDINGTYPE_NESTED = 2 } PENDINGTYPE; typedef enum tagPENDINGMSG { PENDINGMSG_CANCELCALL = 0, PENDINGMSG_WAITNOPROCESS = 1, PENDINGMSG_WAITDEFPROCESS = 2 } PENDINGMSG; typedef struct tagINTERFACEINFO { IUnknown *pUnk; IID iid; WORD wMethod; } INTERFACEINFO, *LPINTERFACEINFO; DWORD HandleInComingCall( [in] DWORD dwCallType, [in] HTASK htaskCaller, [in] DWORD dwTickCount, [in] LPINTERFACEINFO lpInterfaceInfo); DWORD RetryRejectedCall( [in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] DWORD dwRejectType); DWORD MessagePending( [in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] DWORD dwPendingType); } /******************** Connection Points ********************/ cpp_quote("#endif /* defined USE_COM_CONTEXT_DEF */") /* OLEIDL.IDL */ interface IOleInPlaceActiveObject; cpp_quote("#include ") /***************************************************************************** * IOleWindow interface */ [ object, uuid(00000114-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleWindow : IUnknown { typedef [unique] IOleWindow *LPOLEWINDOW; HRESULT GetWindow( [out] HWND *phwnd); HRESULT ContextSensitiveHelp( [in] BOOL fEnterMode); } /***************************************************************************** * IOleInPlaceObject interface */ [ object, uuid(00000113-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleInPlaceObject : IOleWindow { typedef [unique] IOleInPlaceObject *LPOLEINPLACEOBJECT; HRESULT InPlaceDeactivate(); HRESULT UIDeactivate(); HRESULT SetObjectRects( [in] LPCRECT lprcPosRect, [in] LPCRECT lprcClipRect); HRESULT ReactivateAndUndo(); } /***************************************************************************** * IOleInPlaceUIWindow interface */ [ object, uuid(00000115-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleInPlaceUIWindow : IOleWindow { typedef [unique] IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW; typedef RECT BORDERWIDTHS; typedef LPRECT LPBORDERWIDTHS; typedef LPCRECT LPCBORDERWIDTHS; HRESULT GetBorder( [out] LPRECT lprectBorder); HRESULT RequestBorderSpace( [in, unique] LPCBORDERWIDTHS pborderwidths); HRESULT SetBorderSpace( [in, unique] LPCBORDERWIDTHS pborderwidths); HRESULT SetActiveObject( [in, unique] IOleInPlaceActiveObject *pActiveObject, [in, string, unique] LPCOLESTR pszObjName); } /* avoid conflict with Wine Unicode macros */ cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef TranslateAccelerator") cpp_quote("#endif") /***************************************************************************** * IOleInPlaceFrame interface */ [ object, uuid(00000116-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleInPlaceFrame : IOleInPlaceUIWindow { typedef [unique] IOleInPlaceFrame *LPOLEINPLACEFRAME; typedef struct tagOleInPlaceFrameInfo { UINT cb; BOOL fMDIApp; HWND hwndFrame; HACCEL haccel; UINT cAccelEntries; } OLEINPLACEFRAMEINFO, *LPOLEINPLACEFRAMEINFO; typedef struct tagOleMenuGroupWidths { LONG width[ 6 ]; } OLEMENUGROUPWIDTHS, *LPOLEMENUGROUPWIDTHS; typedef HGLOBAL HOLEMENU; HRESULT InsertMenus( [in] HMENU hmenuShared, [in,out] LPOLEMENUGROUPWIDTHS lpMenuWidths); HRESULT SetMenu( [in] HMENU hmenuShared, [in] HOLEMENU holemenu, [in] HWND hwndActiveObject); HRESULT RemoveMenus( [in] HMENU hmenuShared); HRESULT SetStatusText( [in, unique] LPCOLESTR pszStatusText); HRESULT EnableModeless( [in] BOOL fEnable); HRESULT TranslateAccelerator( [in] LPMSG lpmsg, [in] WORD wID); } /***************************************************************************** * IOleInPlaceActiveObject interface */ [ object, uuid(00000117-0000-0000-c000-000000000046) ] interface IOleInPlaceActiveObject : IOleWindow { typedef [unique] IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT; [local] HRESULT TranslateAccelerator( [in] LPMSG lpmsg); [call_as(TranslateAccelerator)] HRESULT RemoteTranslateAccelerator(); HRESULT OnFrameWindowActivate( [in] BOOL fActivate); HRESULT OnDocWindowActivate( [in] BOOL fActivate); [local] HRESULT ResizeBorder( [in] LPCRECT prcBorder, [in, unique] IOleInPlaceUIWindow *pUIWindow, [in] BOOL fFrameWindow); [call_as(ResizeBorder)] HRESULT RemoteResizeBorder( [in] LPCRECT prcBorder, [in] REFIID riid, [in, unique, iid_is(riid)] IOleInPlaceUIWindow *pUIWindow, [in] BOOL fFrameWindow); HRESULT EnableModeless( [in] BOOL fEnable); } /***************************************************************************** * IOleInPlaceSite interface */ [ object, uuid(00000119-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleInPlaceSite : IOleWindow { typedef [unique] IOleInPlaceSite *LPOLEINPLACESITE; HRESULT CanInPlaceActivate(); HRESULT OnInPlaceActivate(); HRESULT OnUIActivate(); HRESULT GetWindowContext( [out] IOleInPlaceFrame **ppFrame, [out] IOleInPlaceUIWindow **ppDoc, [out] LPRECT lprcPosRect, [out] LPRECT lprcClipRect, [in, out] LPOLEINPLACEFRAMEINFO lpFrameInfo); HRESULT Scroll( [in] SIZE scrollExtent); HRESULT OnUIDeactivate( [in] BOOL fUndoable); HRESULT OnInPlaceDeactivate(); HRESULT DiscardUndoState(); HRESULT DeactivateAndUndo(); HRESULT OnPosRectChange( [in] LPCRECT lprcPosRect); } /***************************************************************************** * IParseDisplayName interface */ [ object, uuid(0000011a-0000-0000-c000-000000000046), pointer_default(unique) ] interface IParseDisplayName : IUnknown { typedef [unique] IParseDisplayName *LPPARSEDISPLAYNAME; HRESULT ParseDisplayName( [in, unique] IBindCtx *pbc, [in] LPOLESTR pszDisplayName, [out] ULONG *pchEaten, [out] IMoniker **ppmkOut); } /***************************************************************************** * IOleContainer interface */ [ object, uuid(0000011b-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleContainer : IParseDisplayName { typedef [unique] IOleContainer *LPOLECONTAINER; HRESULT EnumObjects( [in] DWORD grfFlags, [out] IEnumUnknown **ppenum); HRESULT LockContainer( [in] BOOL fLock); } /***************************************************************************** * IOleItemContainer interface */ [ object, uuid(0000011c-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleItemContainer : IOleContainer { typedef [unique] IOleItemContainer *LPOLEITEMCONTAINER; typedef enum tagBINDSPEED { BINDSPEED_INDEFINITE = 1, BINDSPEED_MODERATE = 2, BINDSPEED_IMMEDIATE = 3 } BINDSPEED; typedef enum tagOLECONTF { OLECONTF_EMBEDDINGS = 1, OLECONTF_LINKS = 2, OLECONTF_OTHERS = 4, OLECONTF_ONLYUSER = 8, OLECONTF_ONLYIFRUNNING = 16 } OLECONTF; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetObject") cpp_quote("#endif") HRESULT GetObject( [in] LPOLESTR pszItem, [in] DWORD dwSpeedNeeded, [in, unique] IBindCtx *pbc, [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); HRESULT GetObjectStorage( [in] LPOLESTR pszItem, [in, unique] IBindCtx *pbc, [in] REFIID riid, [out, iid_is(riid)] void **ppvStorage); HRESULT IsRunning( [in] LPOLESTR pszItem); } /***************************************************************************** * IOleLink interface */ [ object, uuid(0000011d-0000-0000-c000-000000000046) ] interface IOleLink : IUnknown { typedef [unique] IOleLink *LPOLELINK; typedef enum tagOLEUPDATE { OLEUPDATE_ALWAYS = 1, OLEUPDATE_ONCALL = 3 } OLEUPDATE, *POLEUPDATE, *LPOLEUPDATE; typedef enum tagOLELINKBIND { OLELINKBIND_EVENIFCLASSDIFF = 1 } OLELINKBIND; HRESULT SetUpdateOptions( [in] DWORD dwUpdateOpt); HRESULT GetUpdateOptions( [out] DWORD *pdwUpdateOpt); HRESULT SetSourceMoniker( [in, unique] IMoniker *pmk, [in] REFCLSID rclsid); HRESULT GetSourceMoniker( [out] IMoniker **ppmk); HRESULT SetSourceDisplayName( [in]LPCOLESTR pszStatusText); HRESULT GetSourceDisplayName( [out] LPOLESTR *ppszDisplayName); HRESULT BindToSource( [in] DWORD bindflags, [in, unique] IBindCtx *pbc); HRESULT BindIfRunning(); HRESULT GetBoundSource( [out] IUnknown **ppunk); HRESULT UnbindSource(); HRESULT Update( [in, unique] IBindCtx *pbc); } /***************************************************************************** * IOleClientSite interface */ [ object, uuid(00000118-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleClientSite : IUnknown { typedef [unique] IOleClientSite * LPOLECLIENTSITE; HRESULT SaveObject(); HRESULT GetMoniker( [in] DWORD dwAssign, [in] DWORD dwWhichMoniker, [out] IMoniker **ppmk); HRESULT GetContainer( [out] IOleContainer **ppContainer); HRESULT ShowObject(); HRESULT OnShowWindow( [in] BOOL fShow); HRESULT RequestNewObjectLayout(); } /***************************************************************************** * IOleCache interface */ [ object, uuid(0000011e-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleCache : IUnknown { typedef [unique] IOleCache *LPOLECACHE; HRESULT Cache( [in, unique] FORMATETC *pformatetc, [in] DWORD advf, [out] DWORD *pdwConnection); HRESULT Uncache( [in] DWORD dwConnection); HRESULT EnumCache( [out] IEnumSTATDATA **ppenumSTATDATA); HRESULT InitCache( [in, unique] IDataObject *pDataObject); HRESULT SetData( [in, unique] FORMATETC *pformatetc, [in, unique] STGMEDIUM *pmedium, [in] BOOL fRelease); } /***************************************************************************** * IOleCache2 interface */ [ object, uuid(00000128-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleCache2 : IOleCache { typedef [unique] IOleCache2 *LPOLECACHE2; const DWORD UPDFCACHE_NODATACACHE = 0x00000001; const DWORD UPDFCACHE_ONSAVECACHE = 0x00000002; const DWORD UPDFCACHE_ONSTOPCACHE = 0x00000004; const DWORD UPDFCACHE_NORMALCACHE = 0x00000008; const DWORD UPDFCACHE_IFBLANK = 0x00000010; const DWORD UPDFCACHE_ONLYIFBLANK = 0x80000000; const DWORD UPDFCACHE_IFBLANKORONSAVECACHE = (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE); const DWORD UPDFCACHE_ALL = ((DWORD)(~(UPDFCACHE_ONLYIFBLANK))); const DWORD UPDFCACHE_ALLBUTNODATACACHE = (UPDFCACHE_ALL & ((DWORD)(~UPDFCACHE_NODATACACHE))); typedef enum tagDISCARDCACHE { DISCARDCACHE_SAVEIFDIRTY = 0, DISCARDCACHE_NOSAVE = 1 } DISCARDCACHE; [local] HRESULT UpdateCache( [in] LPDATAOBJECT pDataObject, [in] DWORD grfUpdf, [in] LPVOID pReserved); [call_as(UpdateCache)] HRESULT RemoteUpdateCache( [in] LPDATAOBJECT pDataObject, [in] DWORD grfUpdf, [in] LONG_PTR pReserved); HRESULT DiscardCache( [in] DWORD dwDiscardOptions); } /***************************************************************************** * IOleCacheControl interface */ [ object, uuid(00000129-0000-0000-c000-000000000046) ] interface IOleCacheControl : IUnknown { typedef [unique] IOleCacheControl *LPOLECACHECONTROL; HRESULT OnRun( LPDATAOBJECT pDataObject); HRESULT OnStop(); } /***************************************************************************** * IEnumOLEVERB interface */ [ object, uuid(00000104-0000-0000-c000-000000000046), pointer_default(unique) ] interface IEnumOLEVERB : IUnknown { typedef [unique] IEnumOLEVERB *LPENUMOLEVERB; typedef struct tagOLEVERB { LONG lVerb; LPOLESTR lpszVerbName; DWORD fuFlags; DWORD grfAttribs; } OLEVERB, *LPOLEVERB; typedef enum tagOLEVERBATTRIB { OLEVERBATTRIB_NEVERDIRTIES = 1, OLEVERBATTRIB_ONCONTAINERMENU = 2 } OLEVERBATTRIB; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumOLEVERB **ppenum); } /***************************************************************************** * IOleObject interface */ [ object, uuid(00000112-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleObject : IUnknown { typedef [unique] IOleObject *LPOLEOBJECT; typedef enum tagOLEGETMONIKER { OLEGETMONIKER_ONLYIFTHERE = 1, OLEGETMONIKER_FORCEASSIGN = 2, OLEGETMONIKER_UNASSIGN = 3, OLEGETMONIKER_TEMPFORUSER = 4 } OLEGETMONIKER; typedef enum tagOLEWHICHMK { OLEWHICHMK_CONTAINER = 1, OLEWHICHMK_OBJREL = 2, OLEWHICHMK_OBJFULL = 3 } OLEWHICHMK; typedef enum tagUSERCLASSTYPE { USERCLASSTYPE_FULL = 1, USERCLASSTYPE_SHORT = 2, USERCLASSTYPE_APPNAME = 3 } USERCLASSTYPE; typedef enum tagOLEMISC { OLEMISC_RECOMPOSEONRESIZE = 0x1, OLEMISC_ONLYICONIC = 0x2, OLEMISC_INSERTNOTREPLACE = 0x4, OLEMISC_STATIC = 0x8, OLEMISC_CANTLINKINSIDE = 0x10, OLEMISC_CANLINKBYOLE1 = 0x20, OLEMISC_ISLINKOBJECT = 0x40, OLEMISC_INSIDEOUT = 0x80, OLEMISC_ACTIVATEWHENVISIBLE = 0x100, OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200, OLEMISC_INVISIBLEATRUNTIME = 0x400, OLEMISC_ALWAYSRUN = 0x800, OLEMISC_ACTSLIKEBUTTON = 0x1000, OLEMISC_ACTSLIKELABEL = 0x2000, OLEMISC_NOUIACTIVATE = 0x4000, OLEMISC_ALIGNABLE = 0x8000, OLEMISC_SIMPLEFRAME = 0x10000, OLEMISC_SETCLIENTSITEFIRST = 0x20000, OLEMISC_IMEMODE = 0x40000, OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000, OLEMISC_WANTSTOMENUMERGE = 0x100000, OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000 } OLEMISC; typedef enum tagOLECLOSE { OLECLOSE_SAVEIFDIRTY = 0, OLECLOSE_NOSAVE = 1, OLECLOSE_PROMPTSAVE = 2 } OLECLOSE; HRESULT SetClientSite( [in, unique] IOleClientSite *pClientSite); HRESULT GetClientSite( [out] IOleClientSite **ppClientSite); HRESULT SetHostNames( [in] LPCOLESTR szContainerApp, [in, unique] LPCOLESTR szContainerObj); HRESULT Close( [in] DWORD dwSaveOption); HRESULT SetMoniker( [in] DWORD dwWhichMoniker, [in, unique] IMoniker *pmk); HRESULT GetMoniker( [in] DWORD dwAssign, [in] DWORD dwWhichMoniker, [out] IMoniker **ppmk); HRESULT InitFromData( [in, unique] IDataObject *pDataObject, [in] BOOL fCreation, [in] DWORD dwReserved); HRESULT GetClipboardData( [in] DWORD dwReserved, [out] IDataObject **ppDataObject); HRESULT DoVerb( [in] LONG iVerb, [in, unique] LPMSG lpmsg, [in, unique] IOleClientSite *pActiveSite, [in] LONG lindex, [in] HWND hwndParent, [in, unique] LPCRECT lprcPosRect); HRESULT EnumVerbs( [out] IEnumOLEVERB **ppEnumOleVerb); HRESULT Update(); HRESULT IsUpToDate(); HRESULT GetUserClassID( [out] CLSID *pClsid); HRESULT GetUserType( [in] DWORD dwFormOfType, [out] LPOLESTR *pszUserType); HRESULT SetExtent( [in] DWORD dwDrawAspect, [in] SIZEL *psizel); HRESULT GetExtent( [in] DWORD dwDrawAspect, [out] SIZEL *psizel); HRESULT Advise( [in, unique] IAdviseSink *pAdvSink, [out] DWORD *pdwConnection); HRESULT Unadvise( [in] DWORD dwConnection); HRESULT EnumAdvise( [out] IEnumSTATDATA **ppenumAdvise); HRESULT GetMiscStatus( [in] DWORD dwAspect, [out] DWORD *pdwStatus); HRESULT SetColorScheme( [in] LOGPALETTE *pLogpal); } /***************************************************************************** * IOleAdviseHolder interface */ [ local, object, uuid(00000111-0000-0000-c000-000000000046) ] interface IOleAdviseHolder : IUnknown { typedef [unique] IOleAdviseHolder * LPOLEADVISEHOLDER; HRESULT Advise( [in, unique] IAdviseSink *pAdvise, [out] DWORD *pdwConnection); HRESULT Unadvise( [in] DWORD dwConnection); HRESULT EnumAdvise( [out] IEnumSTATDATA **ppenumAdvise); HRESULT SendOnRename( [in, unique] IMoniker *pmk); HRESULT SendOnSave(); HRESULT SendOnClose(); } /***************************************************************************** * IContinue interface */ [ object, uuid(0000012a-0000-0000-c000-000000000046) ] interface IContinue : IUnknown { HRESULT FContinue(); } /***************************************************************************** * IViewObject interface */ [ object, uuid(0000010d-0000-0000-c000-000000000046) ] interface IViewObject : IUnknown { typedef [unique] IViewObject *LPVIEWOBJECT; typedef struct IViewObjectCallback IViewObjectCallback; [local] HRESULT Draw( [in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void * pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] HDC hdcTargetDev, [in] HDC hdcDraw, [in] LPCRECTL lprcBounds, [in, unique] LPCRECTL lprcWBounds, [in] IViewObjectCallback/*BOOL (*pfnContinue)(ULONG_PTR dwContinue)*/, [in] ULONG_PTR dwContinue); [call_as(Draw)] HRESULT RemoteDraw( [in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] ULONG_PTR hdcTargetDev, [in] ULONG_PTR hdcDraw, [in] LPCRECTL lprcBounds, [in, unique] LPCRECTL lprcWBounds, [in] IContinue *pContinue); [local] HRESULT GetColorSet( [in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void *pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] HDC hicTargetDev, [out] LOGPALETTE **ppColorSet); [call_as(GetColorSet)] HRESULT RemoteGetColorSet( [in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] ULONG_PTR hicTargetDev, [out] LOGPALETTE **ppColorSet); [local] HRESULT Freeze( [in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void *pvAspect, [out] DWORD *pdwFreeze); [call_as(Freeze)] HRESULT RemoteFreeze( [in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [out] DWORD *pdwFreeze); HRESULT Unfreeze( [in] DWORD dwFreeze); HRESULT SetAdvise( [in] DWORD aspects, [in] DWORD advf, [in, unique] IAdviseSink *pAdvSink); [local] HRESULT GetAdvise( [out, unique] DWORD *pAspects, [out, unique] DWORD *pAdvf, [out] IAdviseSink **ppAdvSink); [call_as(GetAdvise)] HRESULT RemoteGetAdvise( [out] DWORD *pAspects, [out] DWORD *pAdvf, [out] IAdviseSink **ppAdvSink); } /***************************************************************************** * IViewObject2 interface */ [ object, uuid(00000127-0000-0000-c000-000000000046) ] interface IViewObject2 : IViewObject { typedef [unique] IViewObject2 *LPVIEWOBJECT2; HRESULT GetExtent( [in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] DVTARGETDEVICE* ptd, [out] LPSIZEL lpsizel); } /***************************************************************************** * IDropSource interface */ [ local, object, uuid(00000121-0000-0000-c000-000000000046) ] interface IDropSource : IUnknown { typedef [unique] IDropSource *LPDROPSOURCE; HRESULT QueryContinueDrag( [in] BOOL fEscapePressed, [in] DWORD grfKeyState); HRESULT GiveFeedback( [in] DWORD dwEffect); } /***************************************************************************** * IDropTarget interface */ [ object, uuid(00000122-0000-0000-c000-000000000046), pointer_default(unique) ] interface IDropTarget : IUnknown { typedef [unique] IDropTarget *LPDROPTARGET; const DWORD MK_ALT = 0x20; const DWORD DROPEFFECT_NONE = 0; const DWORD DROPEFFECT_COPY = 1; const DWORD DROPEFFECT_MOVE = 2; const DWORD DROPEFFECT_LINK = 4; const DWORD DROPEFFECT_SCROLL = 0x80000000; const DWORD DD_DEFSCROLLINSET = 11; const DWORD DD_DEFSCROLLDELAY = 50; const DWORD DD_DEFSCROLLINTERVAL = 50; const DWORD DD_DEFDRAGDELAY = 200; const DWORD DD_DEFDRAGMINDIST = 2; HRESULT DragEnter( [in, unique] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); HRESULT DragOver( [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); HRESULT DragLeave(); HRESULT Drop( [in, unique] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); } /* STGMEDIUM.pUnkForRelease wrapper? */ [ object, uuid(F6989118-9D36-4B65-AE0C-0C20886D50F8), pointer_default(unique) ] interface ISTGMEDIUMRelease : IUnknown { } /* * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS //import "objidl.idl"; #endif interface IDispatch; interface ITypeInfo; interface ITypeLib; interface IRecordInfo; [ version(1.0), pointer_default(unique) ] interface IOleAutomationTypes { typedef CY CURRENCY; /* Safe Array */ typedef struct tagSAFEARRAYBOUND { ULONG cElements; LONG lLbound; } SAFEARRAYBOUND, *LPSAFEARRAYBOUND; typedef [unique] struct _wireVARIANT *wireVARIANT; typedef [unique] struct _wireBRECORD *wireBRECORD; typedef struct _wireSAFEARR_BSTR { ULONG Size; [size_is(Size), ref] wireBSTR *aBstr; } SAFEARR_BSTR; typedef struct _wireSAFEARR_UNKNOWN { ULONG Size; [size_is(Size), ref] IUnknown **apUnknown; } SAFEARR_UNKNOWN; typedef struct _wireSAFEARR_DISPATCH { ULONG Size; [size_is(Size), ref] IDispatch **apDispatch; } SAFEARR_DISPATCH; typedef struct _wireSAFEARR_VARIANT { ULONG Size; [size_is(Size), ref] wireVARIANT *aVariant; } SAFEARR_VARIANT; typedef struct _wireSAFEARR_BRECORD { ULONG Size; [size_is(Size), ref] wireBRECORD *aRecord; } SAFEARR_BRECORD; typedef struct _wireSAFEARR_HAVEIID { ULONG Size; [size_is(Size), ref] IUnknown **apUnknown; IID iid; } SAFEARR_HAVEIID; typedef [v1_enum] enum tagSF_TYPE { SF_ERROR = VT_ERROR, SF_I1 = VT_I1, SF_I2 = VT_I2, SF_I4 = VT_I4, SF_I8 = VT_I8, SF_BSTR = VT_BSTR, SF_UNKNOWN = VT_UNKNOWN, SF_DISPATCH = VT_DISPATCH, SF_VARIANT = VT_VARIANT, SF_RECORD = VT_RECORD, SF_HAVEIID = VT_UNKNOWN|VT_RESERVED, } SF_TYPE; typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u { case SF_BSTR: SAFEARR_BSTR BstrStr; case SF_UNKNOWN: SAFEARR_UNKNOWN UnknownStr; case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr; case SF_VARIANT: SAFEARR_VARIANT VariantStr; case SF_RECORD: SAFEARR_BRECORD RecordStr; case SF_HAVEIID: SAFEARR_HAVEIID HaveIidStr; case SF_I1: BYTE_SIZEDARR ByteStr; case SF_I2: WORD_SIZEDARR WordStr; case SF_I4: DWORD_SIZEDARR LongStr; case SF_I8: HYPER_SIZEDARR HyperStr; } SAFEARRAYUNION; typedef [unique] struct _wireSAFEARRAY { USHORT cDims; USHORT fFeatures; ULONG cbElements; ULONG cLocks; SAFEARRAYUNION uArrayStructs; [size_is(cDims)] SAFEARRAYBOUND rgsabound[]; } *wireSAFEARRAY; typedef [unique] wireSAFEARRAY *wirePSAFEARRAY; typedef struct tagSAFEARRAY { USHORT cDims; USHORT fFeatures; ULONG cbElements; ULONG cLocks; PVOID pvData; SAFEARRAYBOUND rgsabound[]; } SAFEARRAY; typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY; const USHORT FADF_AUTO = 0x0001; const USHORT FADF_STATIC = 0x0002; const USHORT FADF_EMBEDDED = 0x0004; const USHORT FADF_FIXEDSIZE = 0x0010; const USHORT FADF_RECORD = 0x0020; const USHORT FADF_HAVEIID = 0x0040; const USHORT FADF_HAVEVARTYPE = 0x0080; const USHORT FADF_BSTR = 0x0100; const USHORT FADF_UNKNOWN = 0x0200; const USHORT FADF_DISPATCH = 0x0400; const USHORT FADF_VARIANT = 0x0800; const USHORT FADF_RESERVED = 0xF008; /* Undocumented flags */ const USHORT FADF_DATADELETED = 0x1000; /* Data in a vector has been deleted */ const USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */ /* Variant */ cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)") cpp_quote("#define __VARIANT_NAME_1 n1") cpp_quote("#define __VARIANT_NAME_2 n2") cpp_quote("#define __VARIANT_NAME_3 n3") cpp_quote("#define __VARIANT_NAME_4 brecVal") cpp_quote("#else") cpp_quote("#define __tagVARIANT") cpp_quote("#define __VARIANT_NAME_1") cpp_quote("#define __VARIANT_NAME_2") cpp_quote("#define __VARIANT_NAME_3") cpp_quote("#define __tagBRECORD") cpp_quote("#define __VARIANT_NAME_4") cpp_quote("#endif") typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT; struct tagVARIANT { union { struct __tagVARIANT { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; union { signed char cVal; USHORT uiVal; ULONG ulVal; INT intVal; UINT uintVal; BYTE bVal; SHORT iVal; LONG lVal; FLOAT fltVal; DOUBLE dblVal; VARIANT_BOOL boolVal; #if 0 /* illegal in C++ */ _VARIANT_BOOL bool; #endif SCODE scode; DATE date; BSTR bstrVal; CY cyVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY *parray; LONGLONG llVal; ULONGLONG ullVal; signed char *pcVal; USHORT *puiVal; ULONG *pulVal; INT *pintVal; UINT *puintVal; BYTE *pbVal; SHORT *piVal; LONG *plVal; FLOAT *pfltVal; DOUBLE *pdblVal; VARIANT_BOOL *pboolVal; #if 0 _VARIANT_BOOL *pbool; #endif SCODE *pscode; DATE *pdate; BSTR *pbstrVal; VARIANT *pvarVal; PVOID byref; CY *pcyVal; DECIMAL *pdecVal; IUnknown **ppunkVal; IDispatch **ppdispVal; SAFEARRAY **pparray; LONGLONG *pllVal; ULONGLONG *pullVal; struct __tagBRECORD { PVOID pvRecord; IRecordInfo *pRecInfo; } __VARIANT_NAME_4; } __VARIANT_NAME_3; } __VARIANT_NAME_2; DECIMAL decVal; } __VARIANT_NAME_1; }; typedef VARIANT *LPVARIANT; typedef VARIANT VARIANTARG; typedef VARIANTARG *LPVARIANTARG; cpp_quote("#if 0") typedef const VARIANT *REFVARIANT; cpp_quote("#elif !defined(_REFVARIANT_DEFINED)") cpp_quote("#define _REFVARIANT_DEFINED") cpp_quote("#ifdef __cplusplus") cpp_quote("#define REFVARIANT const VARIANT &") cpp_quote("#else") cpp_quote("#define REFVARIANT const VARIANT *__MIDL_CONST") cpp_quote("#endif") cpp_quote("#endif") struct _wireBRECORD { ULONG fFlags; ULONG clSize; IRecordInfo *pRecInfo; [size_is(clSize)] byte *pRecord; }; struct _wireVARIANT { DWORD clSize; DWORD rpcReserved; USHORT vt; USHORT wReserved1; USHORT wReserved2; USHORT wReserved3; [switch_is(vt)] union { [case(VT_EMPTY, VT_NULL)] ; [case(VT_I1)] signed char cVal; [case(VT_UI2)] USHORT uiVal; [case(VT_UI4)] ULONG ulVal; [case(VT_INT)] INT intVal; [case(VT_UINT)] UINT uintVal; [case(VT_UI1)] BYTE bVal; [case(VT_I2)] SHORT iVal; [case(VT_I4)] LONG lVal; [case(VT_R4)] FLOAT fltVal; [case(VT_R8)] DOUBLE dblVal; [case(VT_BOOL)] VARIANT_BOOL boolVal; [case(VT_ERROR)] SCODE scode; [case(VT_DATE)] DATE date; [case(VT_BSTR)] wireBSTR bstrVal; [case(VT_CY)] CY cyVal; [case(VT_DECIMAL)] DECIMAL decVal; [case(VT_UNKNOWN)] IUnknown *punkVal; [case(VT_DISPATCH)] IDispatch *pdispVal; [case(VT_ARRAY)] wireSAFEARRAY parray; [case(VT_I1|VT_BYREF)] signed char *pcVal; [case(VT_UI2|VT_BYREF)] USHORT *puiVal; [case(VT_UI4|VT_BYREF)] ULONG *pulVal; [case(VT_INT|VT_BYREF)] INT *pintVal; [case(VT_UINT|VT_BYREF)] UINT *puintVal; [case(VT_UI1|VT_BYREF)] BYTE *pbVal; [case(VT_I2|VT_BYREF)] SHORT *piVal; [case(VT_I4|VT_BYREF)] LONG *plVal; [case(VT_R4|VT_BYREF)] FLOAT *pfltVal; [case(VT_R8|VT_BYREF)] DOUBLE *pdblVal; [case(VT_BOOL|VT_BYREF)] VARIANT_BOOL *pboolVal; [case(VT_ERROR|VT_BYREF)] SCODE *pscode; [case(VT_DATE|VT_BYREF)] DATE *pdate; [case(VT_BSTR|VT_BYREF)] wireBSTR *pbstrVal; [case(VT_VARIANT|VT_BYREF)] wireVARIANT *pvarVal; [case(VT_CY|VT_BYREF)] CY *pcyVal; [case(VT_DECIMAL|VT_BYREF)] DECIMAL *pdecVal; [case(VT_UNKNOWN|VT_BYREF)] IUnknown **ppunkVal; [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal; [case(VT_ARRAY|VT_BYREF)] wireSAFEARRAY *pparray; [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal; } DUMMYUNIONNAME; }; /* Dispatch */ typedef LONG DISPID; typedef DWORD HREFTYPE; typedef DISPID MEMBERID; typedef [v1_enum] enum tagTYPEKIND { TKIND_ENUM = 0, TKIND_RECORD, TKIND_MODULE, TKIND_INTERFACE, TKIND_DISPATCH, TKIND_COCLASS, TKIND_ALIAS, TKIND_UNION, TKIND_MAX } TYPEKIND; typedef struct tagTYPEDESC { [switch_is(vt)] union { [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc; [case(VT_CARRAY)] struct tagARRAYDESC *lpadesc; [case(VT_USERDEFINED)] HREFTYPE hreftype; [default] ; } DUMMYUNIONNAME; VARTYPE vt; } TYPEDESC; typedef struct tagARRAYDESC { TYPEDESC tdescElem; USHORT cDims; [size_is(cDims)] SAFEARRAYBOUND rgbounds[]; } ARRAYDESC; typedef struct tagPARAMDESCEX { ULONG cBytes; VARIANTARG varDefaultValue; } PARAMDESCEX, *LPPARAMDESCEX; typedef struct tagPARAMDESC { LPPARAMDESCEX pparamdescex; USHORT wParamFlags; } PARAMDESC, *LPPARAMDESC; const USHORT PARAMFLAG_NONE = 0x00; const USHORT PARAMFLAG_FIN = 0x01; const USHORT PARAMFLAG_FOUT = 0x02; const USHORT PARAMFLAG_FLCID = 0x04; const USHORT PARAMFLAG_FRETVAL = 0x08; const USHORT PARAMFLAG_FOPT = 0x10; const USHORT PARAMFLAG_FHASDEFAULT = 0x20; const USHORT PARAMFLAG_FHASCUSTDATA = 0x40; typedef struct tagIDLDESC { ULONG_PTR dwReserved; USHORT wIDLFlags; } IDLDESC, *LPIDLDESC; const USHORT IDLFLAG_NONE = PARAMFLAG_NONE; const USHORT IDLFLAG_FIN = PARAMFLAG_FIN; const USHORT IDLFLAG_FOUT = PARAMFLAG_FOUT; const USHORT IDLFLAG_FLCID = PARAMFLAG_FLCID; const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL; cpp_quote("#if 0") /* for IDL only */ typedef struct tagELEMDESC { TYPEDESC tdesc; PARAMDESC paramdesc; } ELEMDESC; cpp_quote("#else") /* C/C++ defs */ cpp_quote("typedef struct tagELEMDESC {") cpp_quote(" TYPEDESC tdesc;") cpp_quote(" union {") cpp_quote(" IDLDESC idldesc;") cpp_quote(" PARAMDESC paramdesc;") cpp_quote(" } DUMMYUNIONNAME;") cpp_quote("} ELEMDESC, *LPELEMDESC;") cpp_quote("#endif") typedef struct tagTYPEATTR { GUID guid; LCID lcid; DWORD dwReserved; MEMBERID memidConstructor; MEMBERID memidDestructor; LPOLESTR lpstrSchema; ULONG cbSizeInstance; TYPEKIND typekind; WORD cFuncs; WORD cVars; WORD cImplTypes; WORD cbSizeVft; WORD cbAlignment; WORD wTypeFlags; WORD wMajorVerNum; WORD wMinorVerNum; TYPEDESC tdescAlias; IDLDESC idldescType; } TYPEATTR, *LPTYPEATTR; typedef struct tagDISPPARAMS { [size_is(cArgs)] VARIANTARG *rgvarg; [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs; UINT cArgs; UINT cNamedArgs; } DISPPARAMS; cpp_quote("#if 0") /* for IDL only */ typedef struct tagEXCEPINFO { WORD wCode; WORD wReserved; BSTR bstrSource; BSTR bstrDescription; BSTR bstrHelpFile; DWORD dwHelpContext; ULONG_PTR pvReserved; ULONG_PTR pfnDeferredFillIn; SCODE scode; } EXCEPINFO; cpp_quote("#else") cpp_quote("typedef struct tagEXCEPINFO {") cpp_quote(" WORD wCode;") cpp_quote(" WORD wReserved;") cpp_quote(" BSTR bstrSource;") cpp_quote(" BSTR bstrDescription;") cpp_quote(" BSTR bstrHelpFile;") cpp_quote(" DWORD dwHelpContext;") cpp_quote(" PVOID pvReserved;") cpp_quote(" HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);") cpp_quote(" SCODE scode;") cpp_quote("} EXCEPINFO, *LPEXCEPINFO;") cpp_quote("#endif") typedef [v1_enum] enum tagCALLCONV { CC_FASTCALL = 0, CC_CDECL = 1, CC_MSCPASCAL, CC_PASCAL = CC_MSCPASCAL, CC_MACPASCAL, CC_STDCALL, CC_FPFASTCALL, CC_SYSCALL, CC_MPWCDECL, CC_MPWPASCAL, CC_MAX } CALLCONV; typedef [v1_enum] enum tagFUNCKIND { FUNC_VIRTUAL, FUNC_PUREVIRTUAL, FUNC_NONVIRTUAL, FUNC_STATIC, FUNC_DISPATCH } FUNCKIND; typedef [v1_enum] enum tagINVOKEKIND { INVOKE_FUNC = 1, INVOKE_PROPERTYGET = 2, INVOKE_PROPERTYPUT = 4, INVOKE_PROPERTYPUTREF = 8 } INVOKEKIND; typedef struct tagFUNCDESC { MEMBERID memid; [size_is(cScodes)] SCODE *lprgscode; [size_is(cParams)] ELEMDESC *lprgelemdescParam; FUNCKIND funckind; INVOKEKIND invkind; CALLCONV callconv; SHORT cParams; SHORT cParamsOpt; SHORT oVft; SHORT cScodes; ELEMDESC elemdescFunc; WORD wFuncFlags; } FUNCDESC, *LPFUNCDESC; typedef [v1_enum] enum tagVARKIND { VAR_PERINSTANCE, VAR_STATIC, VAR_CONST, VAR_DISPATCH } VARKIND; const USHORT IMPLTYPEFLAG_FDEFAULT = 0x1; const USHORT IMPLTYPEFLAG_FSOURCE = 0x2; const USHORT IMPLTYPEFLAG_FRESTRICTED = 0x4; const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8; typedef struct tagVARDESC { MEMBERID memid; LPOLESTR lpstrSchema; [switch_is(varkind)] union { [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst; [case(VAR_CONST)] VARIANT *lpvarValue; } DUMMYUNIONNAME; ELEMDESC elemdescVar; WORD wVarFlags; VARKIND varkind; } VARDESC, *LPVARDESC; typedef enum tagTYPEFLAGS { TYPEFLAG_FAPPOBJECT = 0x0001, TYPEFLAG_FCANCREATE = 0x0002, TYPEFLAG_FLICENSED = 0x0004, TYPEFLAG_FPREDECLID = 0x0008, TYPEFLAG_FHIDDEN = 0x0010, TYPEFLAG_FCONTROL = 0x0020, TYPEFLAG_FDUAL = 0x0040, TYPEFLAG_FNONEXTENSIBLE = 0x0080, TYPEFLAG_FOLEAUTOMATION = 0x0100, TYPEFLAG_FRESTRICTED = 0x0200, TYPEFLAG_FAGGREGATABLE = 0x0400, TYPEFLAG_FREPLACEABLE = 0x0800, TYPEFLAG_FDISPATCHABLE = 0x1000, TYPEFLAG_FREVERSEBIND = 0x2000, TYPEFLAG_FPROXY = 0x4000 } TYPEFLAGS; typedef enum tagFUNCFLAGS { FUNCFLAG_FRESTRICTED = 0x0001, FUNCFLAG_FSOURCE = 0x0002, FUNCFLAG_FBINDABLE = 0x0004, FUNCFLAG_FREQUESTEDIT = 0x0008, FUNCFLAG_FDISPLAYBIND = 0x0010, FUNCFLAG_FDEFAULTBIND = 0x0020, FUNCFLAG_FHIDDEN = 0x0040, FUNCFLAG_FUSESGETLASTERROR = 0x0080, FUNCFLAG_FDEFAULTCOLLELEM = 0x0100, FUNCFLAG_FUIDEFAULT = 0x0200, FUNCFLAG_FNONBROWSABLE = 0x0400, FUNCFLAG_FREPLACEABLE = 0x0800, FUNCFLAG_FIMMEDIATEBIND = 0x1000 } FUNCFLAGS; typedef enum tagVARFLAGS { VARFLAG_FREADONLY = 0x0001, VARFLAG_FSOURCE = 0x0002, VARFLAG_FBINDABLE = 0x0004, VARFLAG_FREQUESTEDIT = 0x0008, VARFLAG_FDISPLAYBIND = 0x0010, VARFLAG_FDEFAULTBIND = 0x0020, VARFLAG_FHIDDEN = 0x0040, VARFLAG_FRESTRICTED = 0x0080, VARFLAG_FDEFAULTCOLLELEM = 0x0100, VARFLAG_FUIDEFAULT = 0x0200, VARFLAG_FNONBROWSABLE = 0x0400, VARFLAG_FREPLACEABLE = 0x0800, VARFLAG_FIMMEDIATEBIND = 0x1000 } VARFLAGS; typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE { IUnknown *pInterface; PVOID pStorage; DWORD flags; } CLEANLOCALSTORAGE; typedef struct tagCUSTDATAITEM { GUID guid; VARIANTARG varValue; } CUSTDATAITEM, *LPCUSTDATAITEM; typedef struct tagCUSTDATA { DWORD cCustData; [size_is(cCustData)] LPCUSTDATAITEM prgCustData; } CUSTDATA, *LPCUSTDATA; } /* interface IOleAutomationTypes */ /******************** INTERFACES ********************/ [ object, uuid(00020400-0000-0000-C000-000000000046), pointer_default(unique) ] interface IDispatch : IUnknown { typedef [unique] IDispatch *LPDISPATCH; const DISPID DISPID_UNKNOWN = -1; const DISPID DISPID_VALUE = 0; const DISPID DISPID_PROPERTYPUT = -3; const DISPID DISPID_NEWENUM = -4; const DISPID DISPID_EVALUATE = -5; const DISPID DISPID_CONSTRUCTOR = -6; const DISPID DISPID_DESTRUCTOR = -7; const DISPID DISPID_COLLECT = -8; HRESULT GetTypeInfoCount( [out] UINT *pctinfo); HRESULT GetTypeInfo( [in] UINT iTInfo, [in] LCID lcid, [out] ITypeInfo **ppTInfo); HRESULT GetIDsOfNames( [in] REFIID riid, [in, size_is(cNames)] LPOLESTR *rgszNames, [in] UINT cNames, [in] LCID lcid, [out, size_is(cNames)] DISPID *rgDispId); [local] HRESULT Invoke( [in] DISPID dispIdMember, [in] REFIID riid, [in] LCID lcid, [in] WORD wFlags, [in, out] DISPPARAMS *pDispParams, [out] VARIANT *pVarResult, [out] EXCEPINFO *pExcepInfo, [out] UINT *puArgErr); [call_as(Invoke)] HRESULT RemoteInvoke( [in] DISPID dispIdMember, [in] REFIID riid, [in] LCID lcid, [in] DWORD dwFlags, [in] DISPPARAMS *pDispParams, [out] VARIANT *pVarResult, [out] EXCEPINFO *pExcepInfo, [out] UINT *pArgErr, [in] UINT cVarRef, [in, size_is(cVarRef)] UINT *rgVarRefIdx, [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef); } [ object, uuid(00020404-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumVARIANT : IUnknown { typedef [unique] IEnumVARIANT *LPENUMVARIANT; [local] HRESULT Next( [in] ULONG celt, [out] VARIANT *rgVar, [out] ULONG *pCeltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pCeltFetched)] VARIANT *rgVar, [out] ULONG *pCeltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumVARIANT **ppEnum); } [ object, uuid(00020403-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeComp : IUnknown { typedef [unique] ITypeComp *LPTYPECOMP; typedef [v1_enum] enum tagDESCKIND { DESCKIND_NONE = 0, DESCKIND_FUNCDESC, DESCKIND_VARDESC, DESCKIND_TYPECOMP, DESCKIND_IMPLICITAPPOBJ, DESCKIND_MAX } DESCKIND; typedef union tagBINDPTR { FUNCDESC *lpfuncdesc; VARDESC *lpvardesc; ITypeComp *lptcomp; } BINDPTR, *LPBINDPTR; [local] HRESULT Bind( [in] LPOLESTR szName, [in] ULONG lHashVal, [in] WORD wFlags, [out] ITypeInfo **ppTInfo, [out] DESCKIND *pDescKind, [out] BINDPTR *pBindPtr); [call_as(Bind)] HRESULT RemoteBind( [in] LPOLESTR szName, [in] ULONG lHashVal, [in] WORD wFlags, [out] ITypeInfo **ppTInfo, [out] DESCKIND *pDescKind, [out] LPFUNCDESC *ppFuncDesc, [out] LPVARDESC *ppVarDesc, [out] ITypeComp **ppTypeComp, [out] CLEANLOCALSTORAGE *pDummy); [local] HRESULT BindType( [in] LPOLESTR szName, [in] ULONG lHashVal, [out] ITypeInfo **ppTInfo, [out] ITypeComp **ppTComp); [call_as(BindType)] HRESULT RemoteBindType( [in] LPOLESTR szName, [in] ULONG lHashVal, [out] ITypeInfo **ppTInfo); } [ object, uuid(00020401-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeInfo : IUnknown { typedef [unique] ITypeInfo *LPTYPEINFO; [local] HRESULT GetTypeAttr( [out] TYPEATTR **ppTypeAttr); [call_as(GetTypeAttr)] HRESULT RemoteGetTypeAttr( [out] LPTYPEATTR *ppTypeAttr, [out] CLEANLOCALSTORAGE *pDummy); HRESULT GetTypeComp( [out] ITypeComp **ppTComp); [local] HRESULT GetFuncDesc( [in] UINT index, [out] FUNCDESC **ppFuncDesc); [call_as(GetFuncDesc)] HRESULT RemoteGetFuncDesc( [in] UINT index, [out] LPFUNCDESC *ppFuncDesc, [out] CLEANLOCALSTORAGE *pDummy); [local] HRESULT GetVarDesc( [in] UINT index, [out] VARDESC **ppVarDesc); [call_as(GetVarDesc)] HRESULT RemoteGetVarDesc( [in] UINT index, [out] LPVARDESC *ppVarDesc, [out] CLEANLOCALSTORAGE *pDummy); [local] HRESULT GetNames( [in] MEMBERID memid, [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames, [in] UINT cMaxNames, [out] UINT *pcNames); [call_as(GetNames)] HRESULT RemoteGetNames( [in] MEMBERID memid, [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames, [in] UINT cMaxNames, [out] UINT *pcNames); HRESULT GetRefTypeOfImplType( [in] UINT index, [out] HREFTYPE *pRefType); HRESULT GetImplTypeFlags( [in] UINT index, [out] INT *pImplTypeFlags); [local] HRESULT GetIDsOfNames( [in, size_is(cNames)] LPOLESTR *rgszNames, [in] UINT cNames, [out, size_is(cNames)] MEMBERID *pMemId); [call_as(GetIDsOfNames)] HRESULT LocalGetIDsOfNames(); [local] HRESULT Invoke( [in] PVOID pvInstance, [in] MEMBERID memid, [in] WORD wFlags, [in, out] DISPPARAMS *pDispParams, [out] VARIANT *pVarResult, [out] EXCEPINFO *pExcepInfo, [out] UINT *puArgErr); [call_as(Invoke)] HRESULT LocalInvoke(); [local] HRESULT GetDocumentation( [in] MEMBERID memid, [out] BSTR *pBstrName, [out] BSTR *pBstrDocString, [out] DWORD *pdwHelpContext, [out] BSTR *pBstrHelpFile); [call_as(GetDocumentation)] HRESULT RemoteGetDocumentation( [in] MEMBERID memid, [in] DWORD refPtrFlags, [out] BSTR *pBstrName, [out] BSTR *pBstrDocString, [out] DWORD *pdwHelpContext, [out] BSTR *pBstrHelpFile); [local] HRESULT GetDllEntry( [in] MEMBERID memid, [in] INVOKEKIND invKind, [out] BSTR *pBstrDllName, [out] BSTR *pBstrName, [out] WORD *pwOrdinal); [call_as(GetDllEntry)] HRESULT RemoteGetDllEntry( [in] MEMBERID memid, [in] INVOKEKIND invKind, [in] DWORD refPtrFlags, [out] BSTR *pBstrDllName, [out] BSTR *pBstrName, [out] WORD *pwOrdinal); HRESULT GetRefTypeInfo( [in] HREFTYPE hRefType, [out] ITypeInfo **ppTInfo); [local] HRESULT AddressOfMember( [in] MEMBERID memid, [in] INVOKEKIND invKind, [out] PVOID *ppv); [call_as(AddressOfMember)] HRESULT LocalAddressOfMember(); [local] HRESULT CreateInstance( [in] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] PVOID *ppvObj); [call_as(CreateInstance)] HRESULT RemoteCreateInstance( [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObj); HRESULT GetMops( [in] MEMBERID memid, [out] BSTR *pBstrMops); [local] HRESULT GetContainingTypeLib( [out] ITypeLib **ppTLib, [out] UINT *pIndex); [call_as(GetContainingTypeLib)] HRESULT RemoteGetContainingTypeLib( [out] ITypeLib **ppTLib, [out] UINT *pIndex); [local] void ReleaseTypeAttr( [in] TYPEATTR *pTypeAttr); [call_as(ReleaseTypeAttr)] HRESULT LocalReleaseTypeAttr(); [local] void ReleaseFuncDesc( [in] FUNCDESC *pFuncDesc); [call_as(ReleaseFuncDesc)] HRESULT LocalReleaseFuncDesc(); [local] void ReleaseVarDesc( [in] VARDESC *pVarDesc); [call_as(ReleaseVarDesc)] HRESULT LocalReleaseVarDesc(); } [ object, uuid(00020402-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeLib : IUnknown { typedef [unique] ITypeLib *LPTYPELIB; typedef [v1_enum] enum tagSYSKIND { SYS_WIN16 = 0, SYS_WIN32, SYS_MAC, SYS_WIN64 } SYSKIND; typedef [v1_enum] enum tagLIBFLAGS { LIBFLAG_FRESTRICTED = 0x01, LIBFLAG_FCONTROL = 0x02, LIBFLAG_FHIDDEN = 0x04, LIBFLAG_FHASDISKIMAGE = 0x08 } LIBFLAGS; typedef struct tagTLIBATTR { GUID guid; LCID lcid; SYSKIND syskind; WORD wMajorVerNum; WORD wMinorVerNum; WORD wLibFlags; } TLIBATTR, *LPTLIBATTR; [local] UINT GetTypeInfoCount(); [call_as(GetTypeInfoCount)] HRESULT RemoteGetTypeInfoCount( [out] UINT *pcTInfo); HRESULT GetTypeInfo( [in] UINT index, [out] ITypeInfo **ppTInfo); HRESULT GetTypeInfoType( [in] UINT index, [out] TYPEKIND *pTKind); HRESULT GetTypeInfoOfGuid( [in] REFGUID guid, [out] ITypeInfo **ppTinfo); [local] HRESULT GetLibAttr( [out] TLIBATTR **ppTLibAttr); [call_as(GetLibAttr)] HRESULT RemoteGetLibAttr( [out] LPTLIBATTR *ppTLibAttr, [out] CLEANLOCALSTORAGE *pDummy); HRESULT GetTypeComp( [out] ITypeComp **ppTComp); [local] HRESULT GetDocumentation( [in] INT index, [out] BSTR *pBstrName, [out] BSTR *pBstrDocString, [out] DWORD *pdwHelpContext, [out] BSTR *pBstrHelpFile); [call_as(GetDocumentation)] HRESULT RemoteGetDocumentation( [in] INT index, [in] DWORD refPtrFlags, [out] BSTR *pBstrName, [out] BSTR *pBstrDocString, [out] DWORD *pdwHelpContext, [out] BSTR *pBstrHelpFile); [local] HRESULT IsName( [in, out] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out] BOOL *pfName); [call_as(IsName)] HRESULT RemoteIsName( [in] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out] BOOL *pfName, [out] BSTR *pBstrLibName); [local] HRESULT FindName( [in, out] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo, [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId, [in, out] USHORT *pcFound); [call_as(FindName)] HRESULT RemoteFindName( [in] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo, [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId, [in, out] USHORT *pcFound, [out] BSTR *pBstrLibName); [local] void ReleaseTLibAttr( [in] TLIBATTR *pTLibAttr); [call_as(ReleaseTLibAttr)] HRESULT LocalReleaseTLibAttr(); } [ object, uuid(1CF2B120-547D-101B-8E65-08002B2BD119), pointer_default(unique) ] interface IErrorInfo : IUnknown { typedef [unique] IErrorInfo *LPERRORINFO; HRESULT GetGUID( [out] GUID *pGUID); HRESULT GetSource( [out] BSTR *pBstrSource); HRESULT GetDescription( [out] BSTR *pBstrDescription); HRESULT GetHelpFile( [out] BSTR *pBstrHelpFile); HRESULT GetHelpContext( [out] DWORD *pdwHelpContext); } [ object, uuid(22F03340-547D-101B-8E65-08002B2BD119), pointer_default(unique) ] interface ICreateErrorInfo : IUnknown { typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO; HRESULT SetGUID( [in] REFGUID rguid); HRESULT SetSource( [in] LPOLESTR szSource); HRESULT SetDescription( [in] LPOLESTR szDescription); HRESULT SetHelpFile( [in] LPOLESTR szHelpFile); HRESULT SetHelpContext( [in] DWORD dwHelpContext); } [ object, uuid(DF0B3D60-548F-101B-8E65-08002B2BD119), pointer_default(unique) ] interface ISupportErrorInfo : IUnknown { typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO; HRESULT InterfaceSupportsErrorInfo( [in] REFIID riid); } [ object, uuid(0000002E-0000-0000-C000-000000000046) ] interface ITypeFactory : IUnknown { HRESULT CreateFromTypeInfo( [in] ITypeInfo *pTypeInfo, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppv); } [ local, object, uuid(00020405-0000-0000-C000-000000000046), pointer_default(unique) ] interface ICreateTypeInfo : IUnknown { typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO; HRESULT SetGuid( [in] REFGUID guid); HRESULT SetTypeFlags( [in] UINT uTypeFlags); HRESULT SetDocString( [in] LPOLESTR pStrDoc); HRESULT SetHelpContext( [in] DWORD dwHelpContext); HRESULT SetVersion( [in] WORD wMajorVerNum, [in] WORD wMinorVerNum); HRESULT AddRefTypeInfo( [in] ITypeInfo *pTInfo, [in] HREFTYPE *phRefType); HRESULT AddFuncDesc( [in] UINT index, [in] FUNCDESC *pFuncDesc); HRESULT AddImplType( [in] UINT index, [in] HREFTYPE hRefType); HRESULT SetImplTypeFlags( [in] UINT index, [in] INT implTypeFlags); HRESULT SetAlignment( [in] WORD cbAlignment); HRESULT SetSchema( [in] LPOLESTR pStrSchema); HRESULT AddVarDesc( [in] UINT index, [in] VARDESC *pVarDesc); HRESULT SetFuncAndParamNames( [in] UINT index, [in, size_is(cNames)] LPOLESTR *rgszNames, [in] UINT cNames); HRESULT SetVarName( [in] UINT index, [in] LPOLESTR szName); HRESULT SetTypeDescAlias( [in] TYPEDESC *pTDescAlias); HRESULT DefineFuncAsDllEntry( [in] UINT index, [in] LPOLESTR szDllName, [in] LPOLESTR szProcName); HRESULT SetFuncDocString( [in] UINT index, [in] LPOLESTR szDocString); HRESULT SetVarDocString( [in] UINT index, [in] LPOLESTR szDocString); HRESULT SetFuncHelpContext( [in] UINT index, [in] DWORD dwHelpContext); HRESULT SetVarHelpContext( [in] UINT index, [in] DWORD dwHelpContext); HRESULT SetMops( [in] UINT index, [in] BSTR bstrMops); HRESULT SetTypeIdldesc( [in] IDLDESC * pIdlDesc); HRESULT LayOut(); } [ local, object, uuid(0002040E-0000-0000-C000-000000000046), pointer_default(unique) ] interface ICreateTypeInfo2 : ICreateTypeInfo { typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2; HRESULT DeleteFuncDesc( [in] UINT index); HRESULT DeleteFuncDescByMemId( [in] MEMBERID memid, [in] INVOKEKIND invKind); HRESULT DeleteVarDesc( [in] UINT index); HRESULT DeleteVarDescByMemId( [in] MEMBERID memid); HRESULT DeleteImplType( [in] UINT index); HRESULT SetCustData( [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetFuncCustData( [in] UINT index, [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetParamCustData( [in] UINT indexFunc, [in] UINT indexParam, [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetVarCustData( [in] UINT index, [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetImplTypeCustData( [in] UINT index, [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetHelpStringContext( [in] ULONG dwHelpStringContext); HRESULT SetFuncHelpStringContext( [in] UINT index, [in] ULONG dwHelpStringContext); HRESULT SetVarHelpStringContext( [in] UINT index, [in] ULONG dwHelpStringContext); HRESULT Invalidate(); HRESULT SetName( [in] LPOLESTR szName); } [ local, object, uuid(00020406-0000-0000-C000-000000000046), pointer_default(unique) ] interface ICreateTypeLib : IUnknown { typedef [unique] ICreateTypeLib *LPCREATETYPELIB; HRESULT CreateTypeInfo( [in] LPOLESTR szName, [in] TYPEKIND tkind, [out] ICreateTypeInfo **ppCTInfo); HRESULT SetName( [in] LPOLESTR szName); HRESULT SetVersion( [in] WORD wMajorVerNum, [in] WORD wMinorVerNum); HRESULT SetGuid( [in] REFGUID guid); HRESULT SetDocString( [in] LPOLESTR szDoc); HRESULT SetHelpFileName( [in] LPOLESTR szHelpFileName); HRESULT SetHelpContext( [in] DWORD dwHelpContext); HRESULT SetLcid( [in] LCID lcid); HRESULT SetLibFlags( [in] UINT uLibFlags); HRESULT SaveAllChanges(); } [ local, object, uuid(0002040F-0000-0000-C000-000000000046), pointer_default(unique) ] interface ICreateTypeLib2 : ICreateTypeLib { typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2; HRESULT DeleteTypeInfo( [in] LPOLESTR szName); HRESULT SetCustData( [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetHelpStringContext( [in] ULONG dwHelpStringContext); HRESULT SetHelpStringDll( [in] LPOLESTR szFileName); } /***************************************************************************** * IErrorLog interface */ [ object, uuid(3127ca40-446e-11ce-8135-00aa004bb851), pointer_default(unique) ] interface IErrorLog : IUnknown { typedef IErrorLog *LPERRORLOG; HRESULT AddError( [in] LPCOLESTR pszPropName, [in] EXCEPINFO *pExcepInfo); } /***************************************************************************** * IPropertyBag interface */ [ object, uuid(55272a00-42cb-11ce-8135-00aa004bb851), pointer_default(unique) ] interface IPropertyBag : IUnknown { typedef IPropertyBag *LPPROPERTYBAG; [local] HRESULT Read( [in] LPCOLESTR pszPropName, [in, out] VARIANT *pVar, [in] IErrorLog *pErrorLog); [call_as(Read)] HRESULT RemoteRead( [in] LPCOLESTR pszPropName, [out] VARIANT *pVar, [in] IErrorLog *pErrorLog, [in] DWORD varType, [in] IUnknown *pUnkObj); HRESULT Write( [in] LPCOLESTR pszPropName, [in] VARIANT *pVar); } /* * Copyright (C) 1999 Paul Quinn * Copyright (C) 1999 Francis Beaudet * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS //import "oleidl.idl"; //import "../wine/windows/oaidl.idl"; //import "../wine/windows/servprov.idl"; //import "../wine/windows/urlmon.idl"; #endif /***************************************************************************** * IOleControlTypes interface */ [ pointer_default(unique) ] interface IOleControlTypes { typedef [v1_enum] enum tagUASFLAGS { UAS_NORMAL = 0x0, UAS_BLOCKED = 0x1, UAS_NOPARENTABLE = 0x2, UAS_MASK = 0x3 } UASFLAGS; typedef enum tagREADYSTATE { READYSTATE_UNINITIALIZED = 0, READYSTATE_LOADING = 1, READYSTATE_LOADED = 2, READYSTATE_INTERACTIVE = 3, READYSTATE_COMPLETE = 4 } READYSTATE; typedef struct tagVARIANT_BLOB { DWORD clSize; DWORD rpcReserved; [size_is(clSize-1)] ULONGLONG ahData[]; } wireVARIANT_BLOB; typedef struct tagUserVARIANT { wireVARIANT_BLOB pVarBlob; } UserVARIANT; } /***************************************************************************** * IFont interface */ [ object, uuid(bef6e002-a874-101a-8bba-00aa00300cab), pointer_default(unique) ] interface IFont : IUnknown { typedef IFont *LPFONT; typedef TEXTMETRICW TEXTMETRICOLE, *LPTEXTMETRICOLE; [propget] HRESULT Name( [out] BSTR *pname); [propput] HRESULT Name( [in] BSTR name ); [propget] HRESULT Size( [out] CY *psize ); [propput] HRESULT Size( [in] CY size ); [propget] HRESULT Bold( [out] BOOL *pbold ); [propput] HRESULT Bold( [in] BOOL bold ); [propget] HRESULT Italic( [out] BOOL *pitalic ); [propput] HRESULT Italic( [in] BOOL italic ); [propget] HRESULT Underline( [out] BOOL *punderline ); [propput] HRESULT Underline( [in] BOOL underline ); [propget] HRESULT Strikethrough( [out] BOOL *pstrikethrough ); [propput] HRESULT Strikethrough( [in] BOOL strikethrough ); [propget] HRESULT Weight( [out] SHORT *pweight ); [propput] HRESULT Weight( [in] SHORT weight ); [propget] HRESULT Charset( [out] SHORT *pcharset ); [propput] HRESULT Charset( [in] SHORT charset ); [propget] HRESULT hFont( [out] HFONT *phfont ); HRESULT Clone( [out] IFont **ppfont ); HRESULT IsEqual( [in] IFont *pFontOther ); HRESULT SetRatio( [in] LONG cyLogical, [in] LONG cyHimetric ); HRESULT QueryTextMetrics( [out] TEXTMETRICOLE * ptm ); HRESULT AddRefHfont( [in] HFONT hfont ); HRESULT ReleaseHfont( [in] HFONT hfont ); HRESULT SetHdc( [in] HDC hdc ); } /***************************************************************************** * IFontDisp interface */ [ object, uuid(bef6e003-a874-101a-8bba-00aa00300cab), pointer_default(unique) ] interface IFontDisp : IDispatch { typedef IFontDisp *LPFONTDISP; } /***************************************************************************** * IFontEventsDisp interface */ [ object, uuid(4ef6100a-af88-11d0-9846-00c04fc29993), pointer_default(unique) ] interface IFontEventsDisp : IDispatch { typedef IFontEventsDisp *LPFONTEVENTS; } /***************************************************************************** * IPicture interface */ [ object, uuid(7bf80980-bf32-101a-8bbb-00aa00300cab), pointer_default(unique) ] interface IPicture : IUnknown { typedef IPicture *LPPICTURE; typedef enum tagPicture { PICTURE_SCALABLE = 0x1, PICTURE_TRANSPARENT = 0x2 } PICTUREATTRIBUTES; typedef UINT OLE_HANDLE; typedef LONG OLE_XPOS_HIMETRIC; typedef LONG OLE_YPOS_HIMETRIC; typedef LONG OLE_XSIZE_HIMETRIC; typedef LONG OLE_YSIZE_HIMETRIC; [propget] HRESULT Handle( [out] OLE_HANDLE *pHandle ); [propget] HRESULT hPal( [out] OLE_HANDLE *phPal ); [propget] HRESULT Type( [out] SHORT *pType ); [propget] HRESULT Width( [out] OLE_XSIZE_HIMETRIC *pWidth ); [propget] HRESULT Height( [out] OLE_YSIZE_HIMETRIC *pHeight ); HRESULT Render( [in] HDC hdc, [in] LONG x, [in] LONG y, [in] LONG cx, [in] LONG cy, [in] OLE_XPOS_HIMETRIC xSrc, [in] OLE_YPOS_HIMETRIC ySrc, [in] OLE_XSIZE_HIMETRIC cxSrc, [in] OLE_YSIZE_HIMETRIC cySrc, [in] LPCRECT pRcWBounds); HRESULT set_hPal( [in] OLE_HANDLE hPal ); [propget] HRESULT CurDC( [out] HDC *phDC ); HRESULT SelectPicture( [in] HDC hDCIn, [out] HDC * phDCOut, [out] OLE_HANDLE * phBmpOut); [propget] HRESULT KeepOriginalFormat( [out] BOOL *pKeep ); [propput] HRESULT KeepOriginalFormat( [in] BOOL keep ); HRESULT PictureChanged(); HRESULT SaveAsFile( [in] LPSTREAM pStream, [in] BOOL fSaveMemCopy, [out] LONG *pCbSize); [propget] HRESULT Attributes( [out] DWORD *pDwAttr ); } /***************************************************************************** * IPictureDisp interface */ [ object, uuid(7bf80981-bf32-101a-8bbb-00aa00300cab), pointer_default(unique) ] interface IPictureDisp : IDispatch { typedef IPictureDisp *LPPICTUREDISP; } /***************************************************************************** * IOleControl interface */ [ object, uuid(b196b288-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IOleControl : IUnknown { typedef IOleControl *LPOLECONTROL; typedef struct tagCONTROLINFO { ULONG cb; HACCEL hAccel; USHORT cAccel; DWORD dwFlags; } CONTROLINFO, *LPCONTROLINFO; typedef enum tagCTRLINFO { CTRLINFO_EATS_RETURN = 1, CTRLINFO_EATS_ESCAPE = 2 } CTRLINFO; HRESULT GetControlInfo( [out] CONTROLINFO *pCI ); HRESULT OnMnemonic( [in] MSG *pMsg ); HRESULT OnAmbientPropertyChange( [in] DISPID dispID ); HRESULT FreezeEvents( [in] BOOL bFreeze ); } /***************************************************************************** * IOleControlSite interface */ [ object, uuid(b196b289-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IOleControlSite : IUnknown { typedef IOleControlSite *LPOLECONTROLSITE; typedef struct tagPOINTF { FLOAT x; FLOAT y; } POINTF, *LPPOINTF; typedef enum tagXFORMCOORDS { XFORMCOORDS_POSITION = 0x1, XFORMCOORDS_SIZE = 0x2, XFORMCOORDS_HIMETRICTOCONTAINER = 0x4, XFORMCOORDS_CONTAINERTOHIMETRIC = 0x8, XFORMCOORDS_EVENTCOMPAT = 0x10 } XFORMCOORDS; HRESULT OnControlInfoChanged(); HRESULT LockInPlaceActive( [in] BOOL fLock ); HRESULT GetExtendedControl( [out] IDispatch ** ppDisp ); HRESULT TransformCoords( [in, out] POINTL *pPtlHimetric, [in, out] POINTF *pPtfContainer, [in] DWORD dwFlags); HRESULT TranslateAccelerator( [in] MSG *pMsg, [in] DWORD grfModifiers ); HRESULT OnFocus( [in] BOOL fGotFocus ); HRESULT ShowPropertyFrame(); } /***************************************************************************** * IOleInPlaceSiteEx interface */ [ object, uuid(9c2cad80-3424-11cf-b670-00aa004cd6d8), pointer_default(unique) ] interface IOleInPlaceSiteEx : IOleInPlaceSite { typedef IOleInPlaceSiteEx *LPOLEINPLACESITEEX; typedef enum tagACTIVATEFLAGS { ACTIVATE_WINDOWLESS = 1 } ACTIVATE_FLAGS; HRESULT OnInPlaceActivateEx( [out] BOOL * pfNoRedraw, [in] DWORD dwFlags ); HRESULT OnInPlaceDeactivateEx( [in] BOOL fNoRedraw ); HRESULT RequestUIActivate(); } /***************************************************************************** * IOleInPlaceSiteWindowless interface */ [ local, object, uuid(922eada0-3424-11cf-b670-00aa004cd6d8), pointer_default(unique) ] interface IOleInPlaceSiteWindowless : IOleInPlaceSiteEx { typedef IOleInPlaceSiteWindowless *LPOLEINPLACESITEWINDOWLESS; typedef enum tagOLEDCFLAGS { OLEDC_NODRAW = 0x1, OLEDC_PAINTBKGND = 0x2, OLEDC_OFFSCREEN = 0x4 } OLEDCFLAGS; HRESULT CanWindowlessActivate(); HRESULT GetCapture(); HRESULT SetCapture( [in] BOOL fCapture ); HRESULT GetFocus(); HRESULT SetFocus( [in] BOOL fFocus ); HRESULT GetDC( [in] LPCRECT pRect, [in] DWORD grfFlags, [out] HDC *phDC); HRESULT ReleaseDC( [in] HDC hDC ); HRESULT InvalidateRect( [in] LPCRECT pRect, [in] BOOL fErase); HRESULT InvalidateRgn( [in] HRGN hRGN, [in] BOOL fErase); HRESULT ScrollRect( [in] INT dx, [in] INT dy, [in] LPCRECT pRectScroll, [in] LPCRECT pRectClip); HRESULT AdjustRect( [in, out] LPRECT prc ); HRESULT OnDefWindowMessage( [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult); } /***************************************************************************** * IOleInPlaceObjectWindowless interface */ [ local, object, uuid(1c2056cc-5ef4-101b-8bc8-00aa003e3b29), pointer_default(unique) ] interface IOleInPlaceObjectWindowless : IOleInPlaceObject { typedef IOleInPlaceObjectWindowless *LPOLEINPLACEOBJECTWINDOWLESS; HRESULT OnWindowMessage( [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult); HRESULT GetDropTarget( [out] IDropTarget **ppDropTarget ); } /***************************************************************************** * IClassFactory2 interface */ [ object, uuid(b196b28f-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IClassFactory2 : IClassFactory { typedef IClassFactory2 *LPCLASSFACTORY2; typedef struct tagLICINFO { LONG cbLicInfo; BOOL fRuntimeKeyAvail; BOOL fLicVerified; } LICINFO, *LPLICINFO; HRESULT GetLicInfo( [out] LICINFO *pLicInfo ); HRESULT RequestLicKey( [in] DWORD dwReserved, [out] BSTR *pBstrKey); [local] HRESULT CreateInstanceLic( [in] IUnknown *pUnkOuter, [in] IUnknown *pUnkReserved, [in] REFIID riid, [in] BSTR bstrKey, [out, iid_is(riid)] PVOID *ppvObj); [call_as(CreateInstanceLic)] HRESULT RemoteCreateInstanceLic( [in] REFIID riid, [in] BSTR bstrKey, [out, iid_is(riid)] IUnknown **ppvObj); } /***************************************************************************** * IViewObject interface */ [ local, object, uuid(3af24292-0c96-11ce-a0cf-00aa00600ab8), pointer_default(unique) ] interface IViewObjectEx : IViewObject2 { typedef IViewObjectEx *LPVIEWOBJECTEX; typedef enum tagVIEWSTATUS { VIEWSTATUS_OPAQUE = 1, VIEWSTATUS_SOLIDBKGND = 2, VIEWSTATUS_DVASPECTOPAQUE = 4, VIEWSTATUS_DVASPECTTRANSPARENT = 8, VIEWSTATUS_SURFACE = 16, VIEWSTATUS_3DSURFACE = 32 } VIEWSTATUS; typedef enum tagHITRESULT { HITRESULT_OUTSIDE = 0, HITRESULT_TRANSPARENT = 1, HITRESULT_CLOSE = 2, HITRESULT_HIT = 3 } HITRESULT; typedef enum tagDVASPECT2 { DVASPECT_OPAQUE = 16, DVASPECT_TRANSPARENT = 32 } DVASPECT2; typedef struct tagExtentInfo { ULONG cb; DWORD dwExtentMode; SIZEL sizelProposed; } DVEXTENTINFO; typedef enum tagAspectInfoFlag { DVASPECTINFOFLAG_CANOPTIMIZE = 1 } DVASPECTINFOFLAG; typedef struct tagAspectInfo { ULONG cb; DWORD dwFlags; } DVASPECTINFO; HRESULT GetRect( [in] DWORD dwAspect, [out] LPRECTL pRect); HRESULT GetViewStatus( [out] DWORD *pdwStatus ); HRESULT QueryHitPoint( [in] DWORD dwAspect, [in] LPCRECT pRectBounds, [in] POINT ptlLoc, [in] LONG lCloseHint, [out] DWORD *pHitResult); HRESULT QueryHitRect( [in] DWORD dwAspect, [in] LPCRECT pRectBounds, [in] LPCRECT pRectLoc, [in] LONG lCloseHint, [out] DWORD *pHitResult); HRESULT GetNaturalExtent ( [in] DWORD dwAspect, [in] LONG lindex, [in] DVTARGETDEVICE *ptd, [in] HDC hicTargetDev, [in] DVEXTENTINFO *pExtentInfo, [out] LPSIZEL pSizel); } /***************************************************************************** * IProvideClassInfo interface */ [ object, uuid(b196b283-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IProvideClassInfo : IUnknown { typedef IProvideClassInfo *LPPROVIDECLASSINFO; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetClassInfo") cpp_quote("#endif") HRESULT GetClassInfo( [out] ITypeInfo ** ppTI ); } /***************************************************************************** * IProvideClassInfo2 interface */ [ object, uuid(a6bc3ac0-dbaa-11ce-9de3-00aa004bb851), pointer_default(unique) ] interface IProvideClassInfo2 : IProvideClassInfo { typedef IProvideClassInfo2 *LPPROVIDECLASSINFO2; typedef enum tagGUIDKIND { GUIDKIND_DEFAULT_SOURCE_DISP_IID = 1 } GUIDKIND; HRESULT GetGUID( [in] DWORD dwGuidKind, [out] GUID *pGUID ); } [ object, uuid(a7aba9c1-8983-11cf-8f20-00805f2cd064), pointer_default(unique) ] interface IProvideMultipleClassInfo : IProvideClassInfo2 { cpp_quote("#define MULTICLASSINFO_GETTYPEINFO 0x00000001") cpp_quote("#define MULTICLASSINFO_GETNUMRESERVEDDISPIDS 0x00000002") cpp_quote("#define MULTICLASSINFO_GETIIDPRIMARY 0x00000004") cpp_quote("#define MULTICLASSINFO_GETIIDSOURCE 0x00000008") cpp_quote("#define TIFLAGS_EXTENDDISPATCHONLY 0x00000001") typedef IProvideMultipleClassInfo *LPPROVIDEMULTIPLECLASSINFO; HRESULT GetMultiTypeInfoCount( [out] ULONG *pcti); HRESULT GetInfoOfIndex( [in] ULONG iti, [in] DWORD dwFlags, [out] ITypeInfo **pptiCoClass, [out] DWORD *pdwTIFlags, [out] ULONG *pcdispidReserved, [out] IID *piidPrimary, [out] IID *piidSource); } /***************************************************************************** * IConnectionPoint interface */ interface IConnectionPointContainer; /* forward declarations */ interface IEnumConnections; [ object, uuid(b196b286-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IConnectionPoint : IUnknown { typedef IConnectionPoint *PCONNECTIONPOINT, *LPCONNECTIONPOINT; HRESULT GetConnectionInterface( [out] IID *pIID ); HRESULT GetConnectionPointContainer( [out] IConnectionPointContainer **ppCPC ); HRESULT Advise( [in] IUnknown *pUnkSink, [out] DWORD *pdwCookie ); HRESULT Unadvise( [in] DWORD dwCookie ); HRESULT EnumConnections( [out] IEnumConnections **ppEnum ); } /***************************************************************************** * IConnectionPointContainer interface */ interface IEnumConnectionPoints; /* forward declaration */ [ object, uuid(b196b284-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IConnectionPointContainer : IUnknown { typedef IConnectionPointContainer *PCONNECTIONPOINTCONTAINER, *LPCONNECTIONPOINTCONTAINER; HRESULT EnumConnectionPoints( [out] IEnumConnectionPoints **ppEnum ); HRESULT FindConnectionPoint( [in] REFIID riid, [out] IConnectionPoint **ppCP ); } /***************************************************************************** * IEnumConnections interface */ [ object, uuid(b196b287-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IEnumConnections : IUnknown { typedef IEnumConnections *PENUMCONNECTIONS, *LPENUMCONNECTIONS; typedef struct tagCONNECTDATA { IUnknown *pUnk; DWORD dwCookie; } CONNECTDATA, *PCONNECTDATA, *LPCONNECTDATA; [local] HRESULT Next( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd, [out] ULONG *pcFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd, [out] ULONG *pcFetched); HRESULT Skip( [in] ULONG cConnections ); HRESULT Reset(); HRESULT Clone( [out] IEnumConnections **ppEnum ); } /***************************************************************************** * IEnumConnectionPoints interface */ [ object, uuid(b196b285-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IEnumConnectionPoints : IUnknown { typedef IEnumConnectionPoints *PENUMCONNECTIONPOINTS, *LPENUMCONNECTIONPOINTS; [local] HRESULT Next( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP, [out] ULONG *pcFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP, [out] ULONG *pcFetched); HRESULT Skip( [in] ULONG cConnections ); HRESULT Reset(); HRESULT Clone( [out] IEnumConnectionPoints **ppEnum ); } /***************************************************************************** * IPropertyPage interface */ interface IPropertyPageSite; /* forward declaration */ [ object, uuid(b196b28d-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IPropertyPage : IUnknown { typedef IPropertyPage *LPPROPERTYPAGE; typedef struct tagPROPPAGEINFO { ULONG cb; LPOLESTR pszTitle; SIZE size; LPOLESTR pszDocString; LPOLESTR pszHelpFile; DWORD dwHelpContext; } PROPPAGEINFO, *LPPROPPAGEINFO; HRESULT SetPageSite( [in] IPropertyPageSite *pPageSite ); HRESULT Activate( [in] HWND hWndParent, [in] LPCRECT pRect, [in] BOOL bModal); HRESULT Deactivate(); HRESULT GetPageInfo( [out] PROPPAGEINFO *pPageInfo ); HRESULT SetObjects( [in] ULONG cObjects, [in, size_is(cObjects)] IUnknown **ppUnk); HRESULT Show( [in] UINT nCmdShow ); HRESULT Move( [in] LPCRECT pRect ); HRESULT IsPageDirty(); HRESULT Apply(); HRESULT Help( [in] LPCOLESTR pszHelpDir ); HRESULT TranslateAccelerator( [in] MSG *pMsg ); } /***************************************************************************** * IPropertyPage2 interface */ [ object, uuid(01e44665-24ac-101b-84ed-08002b2ec713), pointer_default(unique) ] interface IPropertyPage2 : IPropertyPage { typedef IPropertyPage2 *LPPROPERTYPAGE2; HRESULT EditProperty( [in] DISPID dispID ); } /***************************************************************************** * IPropertyPageSite interface */ [ object, uuid(b196b28c-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IPropertyPageSite : IUnknown { typedef IPropertyPageSite *LPPROPERTYPAGESITE; typedef enum tagPROPPAGESTATUS { PROPPAGESTATUS_DIRTY = 0x1, PROPPAGESTATUS_VALIDATE = 0x2, PROPPAGESTATUS_CLEAN = 0x4 } PROPPAGESTATUS; HRESULT OnStatusChange( [in] DWORD dwFlags ); HRESULT GetLocaleID( [out] LCID *pLocaleID ); HRESULT GetPageContainer( [out] IUnknown **ppUnk ); HRESULT TranslateAccelerator( [in] MSG *pMsg ); } /***************************************************************************** * IPropertyNotifySink interface */ [ object, uuid(9bfbbc02-eff1-101a-84ed-00aa00341d07), pointer_default(unique) ] interface IPropertyNotifySink : IUnknown { typedef IPropertyNotifySink *LPPROPERTYNOTIFYSINK; HRESULT OnChanged( [in] DISPID dispID ); HRESULT OnRequestEdit( [in] DISPID dispID ); } /***************************************************************************** * ISimpleFrameSite interface */ [ object, uuid(742b0e01-14e6-101b-914e-00aa00300cab), pointer_default(unique) ] interface ISimpleFrameSite : IUnknown { typedef ISimpleFrameSite *LPSIMPLEFRAMESITE; HRESULT PreMessageFilter( [in] HWND hWnd, [in] UINT msg, [in] WPARAM wp, [in] LPARAM lp, [out] LRESULT *plResult, [out] DWORD *pdwCookie); HRESULT PostMessageFilter( [in] HWND hWnd, [in] UINT msg, [in] WPARAM wp, [in] LPARAM lp, [out] LRESULT *plResult, [in] DWORD dwCookie); } /***************************************************************************** * IPersistStreamInit interface */ [ object, uuid(7fd52380-4e07-101b-ae2d-08002b2ec713), pointer_default(unique) ] interface IPersistStreamInit : IPersist { typedef IPersistStreamInit *LPPERSISTSTREAMINIT; HRESULT IsDirty(); HRESULT Load( [in] LPSTREAM pStm ); HRESULT Save( [in] LPSTREAM pStm, [in] BOOL fClearDirty ); HRESULT GetSizeMax( [out] ULARGE_INTEGER *pcbSize ); HRESULT InitNew(); } /***************************************************************************** * IPersistMemory interface */ [ object, uuid(bd1ae5e0-a6ae-11ce-bd37-504200c10000), pointer_default(unique) ] interface IPersistMemory : IPersist { typedef IPersistMemory *LPPERSISTMEMORY; HRESULT IsDirty(); [local] HRESULT Load( [in, size_is(cbSize)] LPVOID pMem, [in] ULONG cbSize); [call_as(Load)] HRESULT RemoteLoad( [in, size_is(cbSize)] BYTE *pMem, [in] ULONG cbSize); [local] HRESULT Save( [out, size_is(cbSize)] LPVOID pMem, [in] BOOL fClearDirty, [in] ULONG cbSize); [call_as(Save)] HRESULT RemoteSave( [out, size_is(cbSize)] BYTE *pMem, [in] BOOL fClearDirty, [in] ULONG cbSize); HRESULT GetSizeMax( [out] ULONG *pCbSize ); HRESULT InitNew(); } /***************************************************************************** * IPersistPropertyBag interface */ [ object, uuid(37d84f60-42cb-11ce-8135-00aa004bb851), pointer_default(unique) ] interface IPersistPropertyBag : IPersist { typedef IPersistPropertyBag *LPPERSISTPROPERTYBAG; HRESULT InitNew(); HRESULT Load( [in] IPropertyBag *pPropBag, [in] IErrorLog *pErrorLog); HRESULT Save( [in] IPropertyBag *pPropBag, [in] BOOL fClearDirty, [in] BOOL fSaveAllProperties); } /***************************************************************************** * ISpecifyPropertyPages interface */ [ object, uuid(b196b28b-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface ISpecifyPropertyPages : IUnknown { typedef ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES; typedef struct tagCAUUID { ULONG cElems; [size_is(cElems)] GUID *pElems; } CAUUID, *LPCAUUID; HRESULT GetPages( [out] CAUUID *pPages ); } /***************************************************************************** * IPerPropertyBrowsing interface */ [ object, uuid(376bd3aa-3845-101b-84ed-08002b2ec713), pointer_default(unique) ] interface IPerPropertyBrowsing : IUnknown { typedef IPerPropertyBrowsing *LPPERPROPERTYBROWSING; typedef struct tagCALPOLESTR { ULONG cElems; [size_is(cElems)] LPOLESTR *pElems; } CALPOLESTR, *LPCALPOLESTR; typedef struct tagCADWORD { ULONG cElems; [size_is(cElems)] DWORD *pElems; } CADWORD, *LPCADWORD; HRESULT GetDisplayString( [in] DISPID dispID, [out] BSTR *pBstr); HRESULT MapPropertyToPage( [in] DISPID dispID, [out] CLSID *pClsid); HRESULT GetPredefinedStrings( [in] DISPID dispID, [out] CALPOLESTR *pCaStringsOut, [out] CADWORD *pCaCookiesOut); HRESULT GetPredefinedValue( [in] DISPID dispID, [in] DWORD dwCookie, [out] VARIANT *pVarOut); } /***************************************************************************** * IAdviseSinkEx interface */ [ object, uuid(3af24290-0c96-11ce-a0cf-00aa00600ab8), pointer_default(unique) ] interface IAdviseSinkEx : IAdviseSink { typedef IAdviseSinkEx *LPADVISESINKEX; [local] void OnViewStatusChange( [in] DWORD dwViewStatus ); [call_as(OnViewStatusChange)] HRESULT RemoteOnViewStatusChange( [in] DWORD dwViewStatus ); } /***************************************************************************** * IPointerInactive interface */ [ object, uuid(55980ba0-35aa-11cf-b671-00aa004cd6d8), pointer_default(unique) ] interface IPointerInactive : IUnknown { typedef IPointerInactive *LPPOINTERINACTIVE; HRESULT GetActivationPolicy( [out] DWORD *pdwPolicy); HRESULT OnInactiveMouseMove( [in] LPCRECT pRectBounds, [in] LONG x, [in] LONG y, [in] DWORD grfKeyState); HRESULT OnInactiveSetCursor( [in] LPCRECT pRectBounds, [in] LONG x, [in] LONG y, [in] DWORD dwMouseMsg, [in] BOOL fSetAlways); } /***************************************************************************** * IObjectWithSite interface */ [ object, uuid(fc4801a3-2ba9-11cf-a229-00aa003d7352), pointer_default(unique) ] interface IObjectWithSite : IUnknown { typedef IObjectWithSite *LPOBJECTWITHSITE; HRESULT SetSite( [in] IUnknown * pUnkSite); HRESULT GetSite( [in] REFIID riid, [out, iid_is(riid)] PVOID *ppvSite); } /***************************************************************************** * IOleUndoUnit interface */ interface IOleUndoManager; /* forward declaration */ [ object, uuid(894ad3b0-ef97-11ce-9bc9-00aa00608e01), pointer_default(unique) ] interface IOleUndoUnit : IUnknown { typedef IOleUndoUnit *LPOLEUNDOUNIT; HRESULT Do( [in] IOleUndoManager *pUndoManager ); HRESULT GetDescription( [out] BSTR *pBstr ); HRESULT GetUnitType( [out] CLSID *pClsid, [out] LONG *plID ); HRESULT OnNextAdd(); } /***************************************************************************** * IOleParentUndoUnit interface */ [ object, uuid(a1faf330-ef97-11ce-9bc9-00aa00608e01), pointer_default(unique) ] interface IOleParentUndoUnit : IOleUndoUnit { typedef IOleParentUndoUnit *LPOLEPARENTUNDOUNIT; HRESULT Open( [in] IOleParentUndoUnit *pPUU ); HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit ); HRESULT Add( [in] IOleUndoUnit *pUU ); HRESULT FindUnit( [in] IOleUndoUnit *pUU ); HRESULT GetParentState( [out] DWORD *pdwState ); } /***************************************************************************** * IEnumOleUndoUnits interface */ [ object, uuid(b3e7c340-ef97-11ce-9bc9-00aa00608e01), pointer_default(unique) ] interface IEnumOleUndoUnits : IUnknown { typedef IEnumOleUndoUnits *LPENUMOLEUNDOUNITS; [local] HRESULT Next( [in] ULONG cElt, [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt, [out] ULONG *pcEltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG cElt, [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt, [out] ULONG *pcEltFetched); HRESULT Skip( [in] ULONG cElt ); HRESULT Reset(); HRESULT Clone( [out] IEnumOleUndoUnits **ppEnum ); } /***************************************************************************** * IOleUndoManager interface */ [ object, uuid(d001f200-ef97-11ce-9bc9-00aa00608e01), pointer_default(unique) ] interface IOleUndoManager : IUnknown { cpp_quote("#define SID_SOleUndoManager IID_IOleUndoManager") typedef IOleUndoManager *LPOLEUNDOMANAGER; HRESULT Open( [in] IOleParentUndoUnit *pPUU ); HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit ); HRESULT Add( [in] IOleUndoUnit *pUU ); HRESULT GetOpenParentState( [out] DWORD *pdwState ); HRESULT DiscardFrom( [in] IOleUndoUnit *pUU ); HRESULT UndoTo( [in] IOleUndoUnit *pUU ); HRESULT RedoTo( [in] IOleUndoUnit *pUU ); HRESULT EnumUndoable( [out] IEnumOleUndoUnits **ppEnum ); HRESULT EnumRedoable( [out] IEnumOleUndoUnits **ppEnum ); HRESULT GetLastUndoDescription( [out] BSTR *pBstr ); HRESULT GetLastRedoDescription( [out] BSTR *pBstr ); HRESULT Enable( [in] BOOL fEnable ); } /* OLE1 interface */ [ local, object, /* dummy uuid */ uuid(0975C22A-6BA7-420E-9CD3-4763999EFB68), pointer_default(unique) ] interface OLESTREAM32 { DWORD __stdcall Get([out, size_is(cbbuf)] void *lpszBuf, [in] DWORD cbbuf); DWORD __stdcall Put([in, size_is(cbbuf)] const void *lpszBuf, [in] DWORD cbbuf); } ================================================ FILE: ole2/ifs_thunk.c ================================================ #include "config.h" #include #include #include #include #include #include #include #define COBJMACROS #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "wownt32.h" #include "ole2.h" #include "winerror.h" #include "wine/winbase16.h" #include "wine/wingdi16.h" #include "wine/winuser16.h" #include "ifs.h" #include "wine/debug.h" #include "ifs_thunk.h" extern interface_entry interfaces[]; extern size_t interfaces_count; /* FIXME */ interface_32 *interface32_instances[1024]; size_t interface32_instance_size = 1024; size_t interface32_instance_cur = 0; interface_16 *interface16_instances[1024]; size_t interface16_instance_size = 1024; size_t interface16_instance_cur = 0; #ifdef _DEBUG #define IFS_GUARD_SIZE 500 #else #define IFS_GUARD_SIZE 0 #endif static int iid_cmp(const void *p1, const void *p2) { return memcmp(&((const interface_entry*)p1)->iid, &((const interface_entry*)p2)->iid, sizeof(IID)); } SEGPTR make_thunk_32(void *funcptr, const char *arguments, const char *name, BOOL ret_32bit, BOOL reg_func, BOOL is_cdecl); static void register_instance32(interface_32 *i32) { if (interface32_instance_cur >= interface32_instance_size) return; interface32_instances[interface32_instance_cur++] = i32; } static void register_instance16(interface_16 *i16) { if (interface16_instance_cur >= interface16_instance_size) return; interface16_instances[interface16_instance_cur++] = i16; } static void unregister_instance32(interface_32 *i32) { for (int i = 0; i < interface32_instance_size; i++) if (interface32_instances[i] == i32) interface32_instances[i] = NULL; } static void init_interface_entry(interface_entry *e) { size_t i = 0; SEGPTR *vtbl16 = e->lpVtbl16; while (e->vtbl16[i].func16) { vtbl16[i] = make_thunk_32(e->vtbl16[i].func16, e->vtbl16[i].args, e->vtbl16[i].name, TRUE, FALSE, !e->vtbl16[i].is_stdcall); i++; } e->spVtbl16 = MapLS(e->lpVtbl16); } SEGPTR iface32_16(REFIID riid, void *iface32) { interface_entry *result; size_t i; interface_16 *i16; SEGPTR s; BOOL is_iunk; if (!iface32) { return 0; } is_iunk = IsEqualGUID(&IID_IUnknown, riid); /* FIXME */ result = (interface_entry*)bsearch(riid, interfaces, interfaces_count, sizeof(interfaces[0]), iid_cmp); for (i = 0; i < interface16_instance_size; i++) { if (interface32_instances[i] && &interface32_instances[i]->lpVtbl == iface32) { s = interface32_instances[i]->iface16; if (is_iunk || !memcmp(interface32_instances[i]->riid, riid, sizeof(IID))) { 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); return s; } else { 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); } } if (interface16_instances[i] && interface16_instances[i]->iface32 == iface32) { s = MapLS(&interface16_instances[i]->lpVtbl); if (is_iunk || !memcmp(interface16_instances[i]->riid, riid, sizeof(IID))) { 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); return s; } else { 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); } } } if (!result) { ERR("unknown interface %s\n", debugstr_guid(riid)); return 0; } i16 = (interface_16*)HeapAlloc(GetProcessHeap(), 0, sizeof(interface_16) + IFS_GUARD_SIZE * 2); memset(i16, 0xcd, sizeof(interface_16) + IFS_GUARD_SIZE * 2); i16 = (interface_16*)((char*)i16 + IFS_GUARD_SIZE); if (!result->spVtbl16) { init_interface_entry(result); } s = MapLS(&i16->lpVtbl); 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); i16->iface32 = iface32; i16->lpVtbl = result->spVtbl16; i16->riid = &result->iid; i16->vtable_copy = NULL; register_instance16(i16); return s; } void *copy_iface16_vtbl(SEGPTR iface16) { interface_16 *i16 = get_interface32_ptr(iface16); interface_entry *result; vtbl_entry *cur_entry; SEGPTR *vtbl; int len_vtbl = 0; result = (interface_entry*)bsearch(i16->riid, interfaces, interfaces_count, sizeof(interfaces[0]), iid_cmp); if (!result) return NULL; cur_entry = result->vtbl16; while (cur_entry++->func16) len_vtbl++; vtbl = (SEGPTR*)HeapAlloc(GetProcessHeap(), 0, len_vtbl * sizeof(SEGPTR)); memcpy(vtbl, result->lpVtbl16, len_vtbl * sizeof(SEGPTR)); i16->lpVtbl = MapLS(vtbl); return vtbl; } void *iface16_32(REFIID riid, SEGPTR iface16) { interface_entry *result; size_t i; interface_32 *i32; LPVOID piface16 = MapSL(iface16); BOOL is_iunk; if (!iface16) { return 0; } is_iunk = IsEqualGUID(&IID_IUnknown, riid); /* FIXME */ result = (interface_entry*)bsearch(riid, interfaces, interfaces_count, sizeof(interfaces[0]), iid_cmp); for (i = 0; i < interface32_instance_size; i++) { if (interface16_instances[i] && (LPVOID)&interface16_instances[i]->lpVtbl == piface16) { if (is_iunk || !memcmp(interface16_instances[i]->riid, riid, sizeof(IID))) { 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); return interface16_instances[i]->iface32; } else { 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); } } if (interface32_instances[i] && interface32_instances[i]->iface16 == iface16) { if (is_iunk ||!memcmp(interface32_instances[i]->riid, riid, sizeof(IID))) { 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); return (void*)&interface32_instances[i]->lpVtbl; } else { 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); } } } if (!result) { ERR("unknown interface %s\n", debugstr_guid(riid)); return 0; } i32 = (interface_32*)HeapAlloc(GetProcessHeap(), 0, sizeof(interface_32) + IFS_GUARD_SIZE * 2); memset(i32, 0xcd, sizeof(interface_32) + IFS_GUARD_SIZE * 2); i32 = (interface_32*)((char*)i32 + IFS_GUARD_SIZE); if (!result->spVtbl16) { init_interface_entry(result); } 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); i32->iface16 = iface16; i32->lpVtbl = result->lpVtbl32; i32->riid = &result->iid; register_instance32(i32); return (void*)&i32->lpVtbl; } void free_iface32(void *iface) { char *i32 = (char*)iface - IFS_GUARD_SIZE; if (!iface) return; unregister_instance32(iface); HeapFree(GetProcessHeap(), 0, i32); } HRESULT CDECL IOleInPlaceSiteWindowless_16_32_OnDefWindowMessage(SEGPTR This, DWORD args16_msg, DWORD args16_wParam, DWORD args16_lParam, SEGPTR args16_plResult) { FIXME("\n"); return E_NOTIMPL16; } HRESULT STDMETHODCALLTYPE IOleInPlaceSiteWindowless_32_16_OnDefWindowMessage(IOleInPlaceSiteWindowless *This, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult) { FIXME("\n"); return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE IOleInPlaceObjectWindowless_32_16_OnWindowMessage(IOleInPlaceObjectWindowless *This, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult) { FIXME("\n"); return E_NOTIMPL; } HRESULT CDECL IOleInPlaceObjectWindowless_16_32_OnWindowMessage(SEGPTR This, DWORD args16_msg, DWORD args16_wParam, DWORD args16_lParam, SEGPTR args16_plResult) { FIXME("\n"); return E_NOTIMPL16; } HRESULT 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) { FIXME("\n"); return E_NOTIMPL16; } HRESULT STDMETHODCALLTYPE ISimpleFrameSite_32_16_PreMessageFilter(ISimpleFrameSite *This, HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *plResult, DWORD *pdwCookie) { FIXME("\n"); return E_NOTIMPL; } HRESULT 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) { FIXME("\n"); return E_NOTIMPL16; } HRESULT STDMETHODCALLTYPE ISimpleFrameSite_32_16_PostMessageFilter(ISimpleFrameSite *This, HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *plResult, DWORD dwCookie) { FIXME("\n"); return E_NOTIMPL; } struct hresult_map { HRESULT hresult16; HRESULT hresult32; } hresult_table[] = { { E_UNEXPECTED16, E_UNEXPECTED }, { E_NOTIMPL16, E_NOTIMPL }, { E_OUTOFMEMORY16, E_OUTOFMEMORY }, { E_INVALIDARG16, E_INVALIDARG }, { E_NOINTERFACE16, E_NOINTERFACE }, { E_POINTER16, E_POINTER }, { E_HANDLE16, E_HANDLE }, { E_ABORT16, E_ABORT }, { E_FAIL16, E_FAIL }, { E_ACCESSDENIED16, E_ACCESSDENIED }, }; HRESULT hresult32_16(HRESULT hresult) { int i; for (i = 0; i < ARRAYSIZE(hresult_table); i++) { if (hresult_table[i].hresult32 == hresult) { TRACE("%08x->%08x\n", hresult, hresult_table[i].hresult16); return hresult_table[i].hresult16; } } TRACE("%08x\n", hresult); return hresult; } HRESULT hresult16_32(HRESULT hresult) { int i; for (i = 0; i < ARRAYSIZE(hresult_table); i++) { if (hresult_table[i].hresult16 == hresult) { TRACE("%08x->%08x\n", hresult, hresult_table[i].hresult32); return hresult_table[i].hresult32; } } TRACE("%08x\n", hresult); return hresult; } /* {F6989118-9D36-4B65-AE0C-0C20886D50F8} */ const IID IID_ISTGMEDIUMRelease = { 0xf6989118, 0x9d36, 0x4b65, { 0xae, 0xc, 0xc, 0x20, 0x88, 0x6d, 0x50, 0xf8 } }; ULONG CDECL ISTGMEDIUMRelease_16_32_Release(SEGPTR This) { ISTGMEDIUMRelease *iface32 = (ISTGMEDIUMRelease*)get_interface32(This); STGMEDIUM *ptr = (STGMEDIUM*)get_interface32_ptr(This); ULONG result; TRACE("(%04x:%04x(%p))\n", SELECTOROF(This), OFFSETOF(This), iface32); result = iface32->lpVtbl->Release(iface32); if (result == 0) { TRACE("(%04x:%04x(%p)) free\n", SELECTOROF(This), OFFSETOF(This), iface32); } return result; } ULONG STDMETHODCALLTYPE ISTGMEDIUMRelease_32_16_Release(ISTGMEDIUMRelease *This) { SEGPTR iface16 = get_interface16(This); STGMEDIUM16 *ptr = (STGMEDIUM16*)get_interface16_ptr(This); ULONG result; TRACE("(%p(%04x:%04x))\n", This, SELECTOROF(iface16), OFFSETOF(iface16)); result = ISTGMEDIUMRelease16_Release(iface16); if (result == 0) { TRACE("(%p(%04x:%04x)) free\n", This, SELECTOROF(iface16), OFFSETOF(iface16)); } return result; } ULONG STDMETHODCALLTYPE ISTGMEDIUMRelease_32_16_Release(ISTGMEDIUMRelease *This); typedef struct { ISTGMEDIUMRelease ISTGMEDIUMRelease_iface; LONG ref; } ISTGMEDIUM_impl; static inline ISTGMEDIUM_impl *impl_from_ISTGMEDIUMRelease(ISTGMEDIUMRelease *iface) { return CONTAINING_RECORD(iface, ISTGMEDIUM_impl, ISTGMEDIUMRelease_iface); } static ULONG WINAPI ISTGMEDIUMRelease_AddRef(ISTGMEDIUMRelease *iface) { ISTGMEDIUM_impl *This = impl_from_ISTGMEDIUMRelease(iface); return InterlockedIncrement(&This->ref); } static ULONG WINAPI ISTGMEDIUMRelease_Release(ISTGMEDIUMRelease *iface) { ISTGMEDIUM_impl *This = impl_from_ISTGMEDIUMRelease(iface); return InterlockedDecrement(&This->ref); } static HRESULT WINAPI ISTGMEDIUMRelease_QueryInterface(ISTGMEDIUMRelease *iface, REFIID riid, void** ppvObject) { *ppvObject = NULL; if (IsEqualIID(riid, &IID_ISTGMEDIUMRelease) || IsEqualIID(riid, &IID_IUnknown)) { *ppvObject = iface; IUnknown_AddRef(iface); } return *ppvObject ? S_OK : E_NOINTERFACE; } static const ISTGMEDIUMReleaseVtbl ISTGMEDIUMRelease_VTable = { ISTGMEDIUMRelease_QueryInterface, ISTGMEDIUMRelease_AddRef, ISTGMEDIUMRelease_Release }; #pragma pack(push, 1) typedef struct { char dmDeviceName[CCHDEVICENAME]; UINT16 dmSpecVersion; UINT16 dmDriverVersion; UINT16 dmSize; UINT16 dmDriverExtra; DWORD dmFields; INT16 dmOrientation; INT16 dmPaperSize; INT16 dmPaperLength; INT16 dmPaperWidth; INT16 dmScale; INT16 dmCopies; INT16 dmDefaultSource; INT16 dmPrintQuality; INT16 dmColor; INT16 dmDuplex; INT16 dmYResolution; INT16 dmTTOption; } DEVMODE16, *LPDEVMODE16; #pragma pack(pop) static DVTARGETDEVICE *DVTARGETDEVICE16To32W(const DVTARGETDEVICE *src) { int pos = 0; int len; int size = src->tdSize * 2 - sizeof(DVTARGETDEVICE); DVTARGETDEVICE *dst = (DVTARGETDEVICE*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, src->tdSize * 2 + sizeof(DEVMODEW) + sizeof(DVTARGETDEVICE)); if (src->tdDriverNameOffset) { len = MultiByteToWideChar(CP_ACP, 0, (char *)src + src->tdDriverNameOffset, -1, dst->tdData, size); dst->tdDriverNameOffset = pos + offsetof(DVTARGETDEVICE, tdData); pos += len * 2; size -= len * 2; } if (src->tdDeviceNameOffset) { len = MultiByteToWideChar(CP_ACP, 0, (char *)src + src->tdDeviceNameOffset, -1, dst->tdData + pos, size); dst->tdDeviceNameOffset = pos + offsetof(DVTARGETDEVICE, tdData); pos += len * 2; size -= len * 2; } if (src->tdPortNameOffset) { len = MultiByteToWideChar(CP_ACP, 0, (char *)src + src->tdPortNameOffset, -1, dst->tdData + pos, size); dst->tdPortNameOffset = pos + offsetof(DVTARGETDEVICE, tdData); pos += len * 2; size -= len * 2; } if (src->tdExtDevmodeOffset) { DEVMODE16 *dv16 = (char *)src + src->tdExtDevmodeOffset; DEVMODEW *dv32 = dst->tdData + pos; dst->tdExtDevmodeOffset = pos + offsetof(DVTARGETDEVICE, tdData); MultiByteToWideChar(CP_ACP, 0, dv16->dmDeviceName, CCHDEVICENAME, dv32->dmDeviceName, CCHDEVICENAME); dv32->dmDeviceName[CCHDEVICENAME - 1] = 0; dv32->dmSpecVersion = 0x30a; dv32->dmDriverVersion = dv16->dmDriverVersion; dv32->dmSize = sizeof(DEVMODEW); dv32->dmDriverExtra = 0; dv32->dmFields = dv16->dmFields & 0x7fbf; dv32->dmOrientation = dv16->dmOrientation; dv32->dmPaperSize = dv16->dmPaperSize; dv32->dmPaperLength = dv16->dmPaperLength; dv32->dmPaperWidth = dv16->dmPaperWidth; dv32->dmScale = dv16->dmScale; dv32->dmCopies = dv16->dmCopies; dv32->dmDefaultSource = dv16->dmDefaultSource; dv32->dmPrintQuality = dv16->dmPrintQuality; dv32->dmColor = dv16->dmColor; dv32->dmDuplex = dv16->dmDuplex; dv32->dmYResolution = dv16->dmYResolution; dv32->dmTTOption = dv16->dmTTOption; pos += sizeof(DEVMODEW); } dst->tdSize = pos + offsetof(DVTARGETDEVICE, tdData); return dst; } static DVTARGETDEVICE *DVTARGETDEVICE32WTo16(const DVTARGETDEVICE *src) { int pos = 0; int len; int size = src->tdSize - sizeof(DVTARGETDEVICE); DVTARGETDEVICE *dst = (DVTARGETDEVICE*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, src->tdSize); if (src->tdDriverNameOffset) { len = WideCharToMultiByte(CP_ACP, 0, (char *)src + src->tdDriverNameOffset, -1, dst->tdData, size, NULL, NULL); dst->tdDriverNameOffset = pos + offsetof(DVTARGETDEVICE, tdData); pos += len; size -= len; } if (src->tdDeviceNameOffset) { len = WideCharToMultiByte(CP_ACP, 0, (char *)src + src->tdDeviceNameOffset, -1, dst->tdData + pos, size, NULL, NULL); dst->tdDeviceNameOffset = pos + offsetof(DVTARGETDEVICE, tdData); pos += len; size -= len; } if (src->tdPortNameOffset) { len = WideCharToMultiByte(CP_ACP, 0, (char *)src + src->tdPortNameOffset, -1, dst->tdData + pos, size, NULL, NULL); dst->tdPortNameOffset = pos + offsetof(DVTARGETDEVICE, tdData); pos += len; size -= len; } if (src->tdExtDevmodeOffset) { DEVMODEW *dv32 = (char *)src + src->tdExtDevmodeOffset; DEVMODE16 *dv16 = dst->tdData + pos; dst->tdExtDevmodeOffset = pos + offsetof(DVTARGETDEVICE, tdData); WideCharToMultiByte(CP_ACP, 0, dv32->dmDeviceName, CCHDEVICENAME, dv16->dmDeviceName, CCHDEVICENAME, NULL, NULL); dv16->dmDeviceName[CCHDEVICENAME - 1] = 0; dv16->dmSpecVersion = 0x30a; dv16->dmDriverVersion = dv32->dmDriverVersion; dv16->dmSize = sizeof(DEVMODE16); dv16->dmDriverExtra = 0; dv16->dmFields = dv32->dmFields & 0x7fbf; dv16->dmOrientation = dv32->dmOrientation; dv16->dmPaperSize = dv32->dmPaperSize; dv16->dmPaperLength = dv32->dmPaperLength; dv16->dmPaperWidth = dv32->dmPaperWidth; dv16->dmScale = dv32->dmScale; dv16->dmCopies = dv32->dmCopies; dv16->dmDefaultSource = dv32->dmDefaultSource; dv16->dmPrintQuality = dv32->dmPrintQuality; dv16->dmColor = dv32->dmColor; dv16->dmDuplex = dv32->dmDuplex; dv16->dmYResolution = dv32->dmYResolution; dv16->dmTTOption = dv32->dmTTOption; pos += sizeof(DEVMODE16); } dst->tdSize = pos + offsetof(DVTARGETDEVICE, tdData); return dst; } void map_pformatetc16_32(FORMATETC *a32, const FORMATETC16 *a16) { a32->cfFormat = a16->cfFormat; a32->ptd = a16->ptd ? DVTARGETDEVICE16To32W(MapSL(a16->ptd)) : NULL; a32->dwAspect = a16->dwAspect; a32->lindex = a16->lindex; a32->tymed = a16->tymed; if (TRACE_ON(ole)) { char buf[100]; buf[0] = 0; GetClipboardFormatNameA(a16->cfFormat, buf, 100); TRACE("%s(%04x),%04x:%04x,%d,%d,%d\n", buf, a32->cfFormat, SELECTOROF(a16->ptd), OFFSETOF(a16->ptd), a32->dwAspect, a32->lindex, a32->tymed); } } void map_pformatetc32_16(FORMATETC16 *a16, const FORMATETC *a32) { a16->cfFormat = a32->cfFormat; a16->ptd = a32->ptd ? MapLS(DVTARGETDEVICE32WTo16(a32->ptd)) : NULL; a16->dwAspect = a32->dwAspect; a16->lindex = a32->lindex; a16->tymed = a32->tymed; if (TRACE_ON(ole)) { char buf[100]; buf[0] = 0; GetClipboardFormatNameA(a32->cfFormat, buf, 100); TRACE("%s(%04x),%p,%d,%d,%d\n", buf, a32->cfFormat, a32->ptd, a32->dwAspect, a32->lindex, a32->tymed); } } void map_formatetc16_32(FORMATETC *a32, const FORMATETC16 *a16) { a32->cfFormat = a16->cfFormat; a32->ptd = (DVTARGETDEVICE*)MapSL(a16->ptd); a32->dwAspect = a16->dwAspect; a32->lindex = a16->lindex; a32->tymed = a16->tymed; if (TRACE_ON(ole)) { char buf[100]; buf[0] = 0; GetClipboardFormatNameA(a16->cfFormat, buf, 100); TRACE("%s(%04x),%04x:%04x,%d,%d,%d\n", buf, a32->cfFormat, SELECTOROF(a16->ptd), OFFSETOF(a16->ptd), a32->dwAspect, a32->lindex, a32->tymed); } } void map_formatetc32_16(FORMATETC16 *a16, const FORMATETC *a32) { a16->cfFormat = a32->cfFormat; a16->ptd = MapLS(a32->ptd); a16->dwAspect = a32->dwAspect; a16->lindex = a32->lindex; a16->tymed = a32->tymed; if (TRACE_ON(ole)) { char buf[100]; buf[0] = 0; GetClipboardFormatNameA(a32->cfFormat, buf, 100); TRACE("%s(%04x),%p,%d,%d,%d\n", buf, a32->cfFormat, a32->ptd, a32->dwAspect, a32->lindex, a32->tymed); } } void map_stgmedium32_16_2(STGMEDIUM16 *a16, const STGMEDIUM *a32, BOOL fixme) { IUnknown *punk = a32->pUnkForRelease; interface_16 *i16; a16->tymed = a32->tymed; a16->pUnkForRelease = iface32_16(&IID_ISTGMEDIUMRelease, punk); i16 = get_interface32_ptr(a16->pUnkForRelease); TRACE("release=%p\n", punk); switch ((TYMED)a32->tymed) { case TYMED_HGLOBAL: { LPVOID p = GlobalLock(a32->hGlobal); SIZE_T size = GlobalSize(a32->hGlobal); SEGPTR g16 = GlobalAlloc16(0, size); LPVOID p32 = GlobalLock16(g16); TRACE("TYMED_HGLOBAL\n"); memcpy(p32, p, GlobalSize(a32->hGlobal)); WOWGlobalUnlock16(g16); a16->hGlobal = g16; if (fixme) { FIXME("leak %04x(%p)\n", a16->hGlobal, a32->hGlobal); } else { TRACE("leak %04x(%p)\n", a16->hGlobal, a32->hGlobal); } break; } case TYMED_FILE: TRACE("TYMED_FILE\n"); a16->lpszFileName = MapLS(strdupWtoA(a32->lpszFileName)); break; case TYMED_ISTREAM: TRACE("TYMED_ISTREAM\n"); a16->pstm = iface32_16(&IID_IStream, a32->pstm); break; case TYMED_ISTORAGE: TRACE("TYMED_ISTORAGE\n"); a16->pstg = iface32_16(&IID_IStorage, a32->pstg); break; case TYMED_NULL: TRACE("TYMED_NULL\n"); break; case TYMED_GDI: TRACE("TYMED_GDI %04x %p\n", a16->hGlobal, a32->hBitmap); a16->hGlobal = HBITMAP_16(a32->hBitmap); break; case TYMED_MFPICT: { METAFILEPICT16 *pict16; HGLOBAL data32 = a32->hGlobal; HGLOBAL16 data16; UINT size; void *ptr; METAFILEPICT *pict32 = GlobalLock(data32); if (pict32) { if (!(data16 = GlobalAlloc16(GMEM_MOVEABLE, sizeof(*pict16)))) return 0; pict16 = GlobalLock16(data16); pict16->mm = pict32->mm; pict16->xExt = pict32->xExt; pict16->yExt = pict32->yExt; size = GetMetaFileBitsEx(pict32->hMF, 0, NULL); pict16->hMF = GlobalAlloc16(GMEM_MOVEABLE, size); ptr = GlobalLock16(pict16->hMF); GetMetaFileBitsEx(pict32->hMF, size, ptr); GlobalUnlock16(pict16->hMF); GlobalUnlock16(data16); a16->hGlobal = data16; } if (fixme) { FIXME("TYMED_MFPICT\n"); } else { TRACE("TYMED_MFPICT\n"); } break; } case TYMED_ENHMF: default: ERR("unsupported tymed %d\n", a32->tymed); break; } } void map_stgmedium32_16(STGMEDIUM16 *a16, const STGMEDIUM *a32) { map_stgmedium32_16_2(a16, a32, TRUE); } void map_stgmedium16_32_2(STGMEDIUM *a32, const STGMEDIUM16 *a16, BOOL fixme) { a32->tymed = a16->tymed; a32->pUnkForRelease = (IUnknown*)iface16_32(&IID_ISTGMEDIUMRelease, a16->pUnkForRelease); switch ((TYMED)a32->tymed) { case TYMED_HGLOBAL: { SIZE_T size = GlobalSize16(a16->hGlobal); LPVOID p16 = GlobalLock16(a16->hGlobal); LPVOID p32; a32->hGlobal = GlobalAlloc(0, size); p32 = GlobalLock(a32->hGlobal); memcpy(p32, p16, size); GlobalUnlock(a32->hGlobal); if (fixme) { FIXME("TYMED_HGLOBAL leak %p(%04x) %04x:%04x\n", a32->hGlobal, a16->hGlobal, SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease)); } else { TRACE("TYMED_HGLOBAL %p(%04x) %04x:%04x\n", a32->hGlobal, a16->hGlobal, SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease)); } break; } case TYMED_FILE: TRACE("TYMED_FILE %s %04x:%04x\n", debugstr_a((const char*)MapSL(a16->lpszFileName)), SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease)); a32->lpszFileName = strdupAtoW(MapSL(a16->lpszFileName)); break; case TYMED_ISTREAM: TRACE("TYMED_ISTREAM %04x:%04x %04x:%04x\n", SELECTOROF(a16->pstm), OFFSETOF(a16->pstm), SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease)); a32->pstm = (IStream*)iface16_32(&IID_IStream, a16->pstm); break; case TYMED_ISTORAGE: TRACE("TYMED_ISTORAGE %04x:%04x %04x:%04x\n", SELECTOROF(a16->pstg), OFFSETOF(a16->pstg), SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease)); a32->pstg = (IStorage*)iface16_32(&IID_IStorage, a16->pstg); break; case TYMED_NULL: TRACE("TYMED_NULL %04x:%04x\n", SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease)); break; case TYMED_GDI: TRACE("TYMED_GDI %04x %04x:%04x\n", a16->hGlobal, SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease)); a32->hBitmap = HBITMAP_32(a16->hGlobal); break; case TYMED_MFPICT: { METAHEADER *header; METAFILEPICT *pict32; HGLOBAL16 data16 = a16->hGlobal; METAFILEPICT16 *pict16 = GlobalLock16(data16); HGLOBAL data32; a32->hGlobal = NULL; if (pict16) { if (!(data32 = GlobalAlloc(GMEM_MOVEABLE, sizeof(*pict32)))) return 0; pict32 = GlobalLock(data32); pict32->mm = pict16->mm; pict32->xExt = pict16->xExt; pict32->yExt = pict16->yExt; header = GlobalLock16(pict16->hMF); pict32->hMF = SetMetaFileBitsEx(header->mtSize * 2, (BYTE *)header); GlobalUnlock16(pict16->hMF); GlobalUnlock(data32); a32->hGlobal = data32; } if (fixme) { FIXME("TYMED_MFPICT %04x %p leak %04x:%04x\n", a16->hGlobal, a32->hGlobal, a16->pUnkForRelease, a16->pUnkForRelease); } else { TRACE("TYMED_MFPICT %04x %p leak %04x:%04x\n", a16->hGlobal, a32->hGlobal, a16->pUnkForRelease, a16->pUnkForRelease); } break; } case TYMED_ENHMF: default: ERR("unsupported tymed %d\n", a16->tymed); break; } } void map_stgmedium16_32(STGMEDIUM *a32, const STGMEDIUM16 *a16) { map_stgmedium16_32_2(a32, a16, TRUE); } void map_oleverb16_32(OLEVERB* a32, const OLEVERB16 *a16) { a32->fuFlags = a16->fuFlags; a32->grfAttribs = a16->grfAttribs; a32->lpszVerbName = strdupAtoW(MapSL(a16->lpszVerbName)); a32->lVerb = a16->lVerb; } void map_oleverb32_16(OLEVERB16* a16, const OLEVERB *a32) { a16->fuFlags = a32->fuFlags; a16->grfAttribs = a32->grfAttribs; a16->lpszVerbName = MapLS(strdupWtoA(a32->lpszVerbName)); a16->lVerb = a32->lVerb; } void map_oleinplaceframeinfo16_32(OLEINPLACEFRAMEINFO *a32, const struct TYP16_tagOleInPlaceFrameInfo *a16) { a32->hwndFrame = HWND_32(a16->hwndFrame); a32->fMDIApp = a16->fMDIApp; a32->cb = a16->cb; a32->haccel = HACCEL_32(a16->haccel); a32->cAccelEntries = a16->cAccelEntries; } void map_oleinplaceframeinfo32_16(struct TYP16_tagOleInPlaceFrameInfo *a16, const OLEINPLACEFRAMEINFO *a32) { a16->cb = a32->cb; a16->fMDIApp = a32->fMDIApp; a16->hwndFrame = HWND_16(a32->hwndFrame); a16->haccel = HACCEL_16(a32->haccel); a16->cAccelEntries = a32->cAccelEntries; } void map_interfaceinfo16_32(INTERFACEINFO *a32, const INTERFACEINFO16 *a16) { a32->pUnk = (IUnknown*)iface16_32(&IID_IUnknown, a16->pUnk); a32->iid = a16->iid; a32->wMethod = a16->wMethod; } void map_interfaceinfo32_16(INTERFACEINFO16 *a16, const INTERFACEINFO *a32) { a16->pUnk = iface32_16(&IID_IUnknown, a32->pUnk); a16->iid = a32->iid; a16->wMethod = a32->wMethod; } void map_tlibattr16_32(TLIBATTR *a32, const TLIBATTR16 *a16) { a32->guid = a16->guid; a32->lcid = a16->lcid; a32->syskind = a16->syskind; a32->wLibFlags = a16->wLibFlags; a32->wMajorVerNum = a16->wMajorVerNum; a32->wMinorVerNum = a16->wMinorVerNum; } void map_tlibattr32_16(TLIBATTR16 *a16, const TLIBATTR *a32) { a16->guid = a32->guid; a16->lcid = a32->lcid; a16->syskind = a32->syskind; a16->wLibFlags = a32->wLibFlags; a16->wMajorVerNum = a32->wMajorVerNum; a16->wMinorVerNum = a32->wMinorVerNum; } static int dynamic_SysStringLen16(SEGPTR bstr); static void dynamic_SysFreeString16(SEGPTR bstr); void map_bstr16_32(BSTR *a32, const SEGPTR *a16) { int len16, len32; if (!*a16) { *a32 = NULL; return; } len16 = dynamic_SysStringLen16(*a16); len32 = MultiByteToWideChar(CP_ACP, 0, MapSL(*a16), len16, NULL, 0); *a32 = SysAllocStringLen(NULL, len32); MultiByteToWideChar(CP_ACP, 0, MapSL(*a16), len16 + 1, *a32, len32 + 1); } static int dynamic_SysAllocStringLen16(SEGPTR bstr, int len); void map_bstr32_16(SEGPTR *a16, const BSTR *a32) { UINT len; int len16; if (*a32 == NULL) { *a16 = 0; return; } len = SysStringLen(*a32); len16 = WideCharToMultiByte(CP_ACP, 0, *a32, len, NULL, 0, NULL, NULL); *a16 = dynamic_SysAllocStringLen16(NULL, len16); WideCharToMultiByte(CP_ACP, 0, *a32, len, MapSL(*a16), len16, NULL, NULL); } #ifdef IFS1632_OVERWRITE_ITypeLib_IsName HRESULT CDECL ITypeLib_16_32_IsName(SEGPTR This, SEGPTR args16_szNameBuf, DWORD args16_lHashVal, SEGPTR args16_pfName) { ITypeLib *iface32 = (ITypeLib*)get_interface32(This); HRESULT result__ = { 0 }; TYP16_HRESULT result16__ = { 0 }; LPOLESTR args32_szNameBuf = { 0 }; ULONG args32_lHashVal; BOOL args32_pfName = { 0 }; int szNameBufLen = lstrlenA((const char*)MapSL(args16_szNameBuf)) + 1; int widelen = MultiByteToWideChar(CP_ACP, 0, (const char*)MapSL(args16_szNameBuf), szNameBufLen, NULL, 0); args32_szNameBuf = HeapAlloc(GetProcessHeap(), 0, widelen * sizeof(OLECHAR)); MultiByteToWideChar(CP_ACP, 0, (const char*)MapSL(args16_szNameBuf), szNameBufLen + 1, args32_szNameBuf, widelen); MAP_ULONG16_32(args32_lHashVal, args16_lHashVal); TRACE("(%04x:%04x(%p),%s,%08x,%08x)\n", SELECTOROF(This), OFFSETOF(This), iface32, MapSL(args16_szNameBuf), args16_lHashVal, args16_pfName); result__ = (HRESULT)iface32->lpVtbl->IsName(iface32, args32_szNameBuf, args32_lHashVal, &args32_pfName); MAP_HRESULT32_16(result16__, result__); UNMAP_ULONG16_32(args32_lHashVal, args16_lHashVal); WideCharToMultiByte(CP_ACP, 0, args32_szNameBuf, widelen, (const char*)MapSL(args16_szNameBuf), szNameBufLen, NULL, NULL); HeapFree(GetProcessHeap(), 0, args32_szNameBuf); TRACE("(%s,%s)\n", MapSL(args16_szNameBuf), args32_pfName ? "TRUE" : "FALSE"); if (args16_pfName) { MAP_BOOL32_16((*(TYP16_BOOL*)MapSL(args16_pfName)), args32_pfName); } return result16__; } #endif #ifdef IFS1632_OVERWRITE_ITypeLib_FindName HRESULT CDECL ITypeLib_16_32_FindName(SEGPTR This, SEGPTR args16_szNameBuf, DWORD args16_lHashVal, SEGPTR args16_ppTInfo, SEGPTR args16_rgMemId, SEGPTR args16_pcFound) { ITypeLib *iface32 = (ITypeLib*)get_interface32(This); HRESULT result__ = { 0 }; TYP16_HRESULT result16__ = { 0 }; OLECHAR *args32_szNameBuf = { 0 }; ULONG args32_lHashVal; int i__; void *dst__; ITypeInfo * *args32_ppTInfo; MEMBERID *args32_rgMemId; USHORT args32_pcFound = { 0 }; int szNameBufLen = lstrlenA((const char*)MapSL(args16_szNameBuf)) + 1; int widelen = MultiByteToWideChar(CP_ACP, 0, (const char*)MapSL(args16_szNameBuf), szNameBufLen, NULL, 0); args32_szNameBuf = HeapAlloc(GetProcessHeap(), 0, widelen * sizeof(OLECHAR)); MultiByteToWideChar(CP_ACP, 0, (const char*)MapSL(args16_szNameBuf), szNameBufLen + 1, args32_szNameBuf, widelen); MAP_ULONG16_32(args32_lHashVal, args16_lHashVal); INMAP_PTR_USHORT16_32(args32_pcFound, args16_pcFound); args32_ppTInfo = IFACE_ALLOC_ARRAY(ITypeInfo *, *(&args32_pcFound)); args32_rgMemId = IFACE_ALLOC_ARRAY(MEMBERID, *(&args32_pcFound)); 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); result__ = (HRESULT)iface32->lpVtbl->FindName(iface32, args32_szNameBuf, args32_lHashVal, args32_ppTInfo, args32_rgMemId, &args32_pcFound); MAP_HRESULT32_16(result16__, result__); UNMAP_ULONG16_32(args32_lHashVal, args16_lHashVal); WideCharToMultiByte(CP_ACP, 0, args32_szNameBuf, widelen, (const char*)MapSL(args16_szNameBuf), szNameBufLen, NULL, NULL); HeapFree(GetProcessHeap(), 0, args32_szNameBuf); dst__ = MapSL(args16_ppTInfo); for (i__ = 0; i__ < (*(&args32_pcFound)); i__++) { ((SEGPTR*)(dst__))[i__] = iface32_16(&IID_ITypeInfo, args32_ppTInfo[i__]); } IFACE_FREE_ARRAY(args32_ppTInfo); dst__ = MapSL(args16_rgMemId); for (i__ = 0; i__ < (*(&args32_pcFound)); i__++) { MAP_MEMBERID32_16((((TYP16_MEMBERID*)(dst__))[i__]), args32_rgMemId[i__]); } IFACE_FREE_ARRAY(args32_rgMemId); if (args16_pcFound) { OUTMAP_USHORT32_16((*(TYP16_USHORT*)MapSL(args16_pcFound)), args32_pcFound); } return result16__; } #endif #ifdef IFS3216_OVERWRITE_ITypeLib_IsName HRESULT STDMETHODCALLTYPE ITypeLib_32_16_IsName(ITypeLib *This, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName) { SEGPTR iface16 = get_interface16(This); TYP16_HRESULT result__ = { 0 }; HRESULT result32__ = { 0 }; TYP16_OLECHAR args16_szNameBuf = { 0 }; TYP16_ULONG args16_lHashVal; TYP16_BOOL args16_pfName = { 0 }; INMAP_LPOLESTR32_16(args16_szNameBuf, szNameBuf); MAP_ULONG32_16(args16_lHashVal, lHashVal); TRACE("(%p(%04x:%04x),%p,%08x,%p)\n", This, SELECTOROF(iface16), OFFSETOF(iface16), szNameBuf, lHashVal, pfName); result__ = (TYP16_HRESULT)ITypeLib16_IsName(iface16, MapLS(&args16_szNameBuf), args16_lHashVal, MapLS(&args16_pfName)); MAP_HRESULT16_32(result32__, result__); UNMAP_LPOLESTR32_16(args16_szNameBuf, szNameBuf); UNMAP_ULONG32_16(args16_lHashVal, lHashVal); if (szNameBuf) { MAP_OLECHAR16_32(*szNameBuf, args16_szNameBuf); } if (pfName) { MAP_BOOL16_32(*pfName, args16_pfName); } return result32__; } #endif #define FUNCDESC16_WRAPPER_MAGIC 'FDSC' typedef struct { DWORD magic; FUNCDESC *desc32; FUNCDESC16 desc16; } FUNCDESC16_WRAPPER; void map_typedesc32_16(TYPEDESC16 *a16, const TYPEDESC *a32); void map_typedesc16_32(TYPEDESC *a32, const TYPEDESC16 *a16); void map_arraydesc32_16(ARRAYDESC16 *a16, const ARRAYDESC *a32) { int i; a16->cDims = a32->cDims; map_typedesc32_16(&a16->tdescElem, &a32->tdescElem); for (i = 0; i < a16->cDims; i++) { a16->rgbounds[i].cElements = a32->rgbounds[i].cElements; a16->rgbounds[i].lLbound = a32->rgbounds[i].lLbound; } } void map_arraydesc16_32(ARRAYDESC16 *a32, const ARRAYDESC *a16) { int i; a32->cDims = a16->cDims; map_typedesc16_32(&a32->tdescElem, &a16->tdescElem); for (i = 0; i < a32->cDims; i++) { a32->rgbounds[i].cElements = a16->rgbounds[i].cElements; a32->rgbounds[i].lLbound = a16->rgbounds[i].lLbound; } } void map_idldesc32_16(IDLDESC16 *a16, const IDLDESC *a32) { map_bstr32_16(&a16->bstrIDLInfo, a32); a16->wIDLFlags = a32->wIDLFlags; TRACE("(%04x)\n", a16->wIDLFlags); } void map_idldesc16_32(IDLDESC16 *a32, const IDLDESC *a16) { map_bstr16_32(&a32->bstrIDLInfo, a16); a32->wIDLFlags = a16->wIDLFlags; TRACE("(%04x)\n", a32->wIDLFlags); } void map_typedesc32_16(TYPEDESC16 *a16, const TYPEDESC *a32) { a16->vt = a32->vt; switch (a32->vt) { case VT_PTR: { TYPEDESC16 *typ = (TYPEDESC16*)HeapAlloc(GetProcessHeap(), 0, sizeof(TYPEDESC16)); map_typedesc32_16(typ, a32->lptdesc); a16->lptdesc = MapLS(typ); TRACE("VT_PTR\n"); break; } case VT_CARRAY: { ARRAYDESC16 *ary = (ARRAYDESC16*)HeapAlloc(GetProcessHeap(), 0, sizeof(ARRAYDESC16) - sizeof(SAFEARRAYBOUND16) * (a32->lpadesc->cDims - 1)); map_arraydesc32_16(ary, a32->lpadesc); a16->lpadesc = MapLS(ary); TRACE("VT_CARRAY\n"); break; } case VT_USERDEFINED: a16->hreftype = a32->hreftype; TRACE("VT_USERDEFINED hreftype:%08x\n", a16->hreftype); break; default: a16->hreftype = 0xdeadbeef; TRACE("%s\n", debugstr_vt(a16->vt)); break; } } void map_typedesc16_32(TYPEDESC *a32, const TYPEDESC16 *a16) { a32->vt = a16->vt; switch (a16->vt) { case VT_PTR: { TYPEDESC *typ = (TYPEDESC*)HeapAlloc(GetProcessHeap(), 0, sizeof(TYPEDESC)); map_typedesc16_32(typ, MapSL(a16->lptdesc)); a32->lptdesc = typ; TRACE("VT_PTR\n"); break; } case VT_CARRAY: { ARRAYDESC16 *ary16 = MapSL(a16->lpadesc); ARRAYDESC *ary = (ARRAYDESC*)HeapAlloc(GetProcessHeap(), 0, sizeof(ARRAYDESC) - sizeof(SAFEARRAYBOUND) * (ary16->cDims - 1)); map_arraydesc16_32(ary, ary16); a32->lpadesc = ary; TRACE("VT_CARRAY\n"); break; } case VT_USERDEFINED: a32->hreftype = a16->hreftype; TRACE("VT_USERDEFINED hreftype:%08x\n", a32->hreftype); break; default: a32->hreftype = 0xdeadbeef; TRACE("%s\n", debugstr_vt(a32->vt)); break; } } void map_elemdesc32_16(ELEMDESC16 *a16, const ELEMDESC *a32) { map_typedesc32_16(&a16->tdesc, &a32->tdesc); map_idldesc32_16(&a16->idldesc, &a32->idldesc); TRACE("\n"); } void map_elemdesc16_32(ELEMDESC *a32, const ELEMDESC16 *a16) { map_typedesc16_32(&a32->tdesc, &a16->tdesc); if (a32->tdesc.vt != VT_EMPTY) map_idldesc16_32(&a32->idldesc, &a16->idldesc); TRACE("\n"); } FUNCDESC *map_funcdesc32(const FUNCDESC16 *a16) { ELEMDESC *elm32; FUNCDESC *a32 = HeapAlloc(GetProcessHeap(), 0, sizeof(FUNCDESC) + sizeof(ELEMDESC) * a16->cParams); elm32 = (ELEMDESC*)(a32 + 1); a32->memid = a16->memid; a32->lprgscode = MapSL(a16->lprgscode); a32->lprgelemdescParam = elm32; for (int i = 0; i < a16->cParams; i++) { map_elemdesc16_32(elm32 + i, (ELEMDESC16 *)MapSL(a16->lprgelemdescParam) + i); } a32->funckind = a16->funckind; a32->invkind = a16->invkind; a32->callconv = a16->callconv; a32->cParams = a16->cParams; a32->cParamsOpt = a16->cParamsOpt; a32->oVft = a16->oVft; a32->cScodes = a16->cScodes; map_elemdesc16_32(&a32->elemdescFunc, &a16->elemdescFunc); a32->wFuncFlags = a16->wFuncFlags; return a32; } FUNCDESC16 *map_funcdesc16(const FUNCDESC *a32) { int i; FUNCDESC16 *a16; ELEMDESC16 *elm16; FUNCDESC16_WRAPPER *w; if (!a32) return NULL; w = HeapAlloc(GetProcessHeap(), 0, sizeof(FUNCDESC16_WRAPPER) + sizeof(ELEMDESC16) * a32->cParams); w->magic = FUNCDESC16_WRAPPER_MAGIC; w->desc32 = a32; a16 = &w->desc16; elm16 = (ELEMDESC16*)(a16 + 1); a16->memid = a32->memid; a16->lprgscode = MapLS(a32->lprgscode); a16->lprgelemdescParam = MapLS(elm16); for (i = 0; i < a32->cParams; i++) { map_elemdesc32_16(elm16 + i, a32->lprgelemdescParam + i); } a16->funckind = a32->funckind; a16->invkind = a32->invkind; a16->callconv = a32->callconv; a16->cParams = a32->cParams; a16->cParamsOpt = a32->cParamsOpt; a16->oVft = a32->oVft; a16->cScodes = a32->cScodes; map_elemdesc32_16(&a16->elemdescFunc, &a32->elemdescFunc); a16->wFuncFlags = a32->wFuncFlags; return a16; } void free_arraydesc16(ARRAYDESC16 *a16) { } void free_typedesc16(TYPEDESC16 *a16) { switch (a16->vt) { case VT_PTR: { TYPEDESC16 *typ = (TYPEDESC16*)MapSL(a16->lptdesc); free_typedesc16(typ); HeapFree(GetProcessHeap(), 0, typ); break; } case VT_CARRAY: { ARRAYDESC16 *ary = (ARRAYDESC16*)MapSL(a16->lpadesc); free_arraydesc16(ary); HeapFree(GetProcessHeap(), 0, ary); break; } } } void free_idldesc16(IDLDESC16 *a16) { dynamic_SysFreeString16(a16->bstrIDLInfo); } void free_elemdesc16(ELEMDESC16 *a16) { free_typedesc16(&a16->tdesc); free_idldesc16(&a16->idldesc); } void free_funcdesc16(FUNCDESC16 *a16) { int i; ELEMDESC16 *elm16; elm16 = (ELEMDESC16*)(a16 + 1); free_elemdesc16(&a16->elemdescFunc); for (i = 0; i < a16->cParams; i++) { free_elemdesc16(elm16 + i); } } #ifdef IFS1632_OVERWRITE_ITypeInfo_ReleaseFuncDesc void CDECL ITypeInfo_16_32_ReleaseFuncDesc(SEGPTR This, SEGPTR args16_pFuncDesc) { ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This); FUNCDESC16 *desc16 = (FUNCDESC16*)MapSL(args16_pFuncDesc); FUNCDESC16_WRAPPER *wrap = CONTAINING_RECORD(desc16, FUNCDESC16_WRAPPER, desc16); FUNCDESC *args32_pFuncDesc; if (wrap->magic != FUNCDESC16_WRAPPER_MAGIC) { ERR("wrap->magic != FUNCDESC16_WRAPPER_MAGIC\n"); return; } args32_pFuncDesc = wrap->desc32; TRACE("(%04x:%04x(%p),%08x)\n", SELECTOROF(This), OFFSETOF(This), iface32, args16_pFuncDesc); iface32->lpVtbl->ReleaseFuncDesc(iface32, args32_pFuncDesc); free_funcdesc16(&wrap->desc16); UnMapLS(args16_pFuncDesc); HeapFree(GetProcessHeap(), 0, wrap); } #endif #ifdef IFS3216_OVERWRITE_ITypeInfo_ReleaseFuncDesc void STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseFuncDesc(ITypeInfo *This, FUNCDESC *pFuncDesc) { FIXME("\n"); return; SEGPTR iface16 = get_interface16(This); SEGPTR args16_pFuncDesc; MAP_PTR_FUNCDESC32_16(args16_pFuncDesc, pFuncDesc); TRACE("(%p(%04x:%04x),%p)\n", This, SELECTOROF(iface16), OFFSETOF(iface16), pFuncDesc); ITypeInfo16_ReleaseFuncDesc(iface16, args16_pFuncDesc); UNMAP_PTR_FUNCDESC32_16(args16_pFuncDesc, pFuncDesc); } #endif #define TYPEATTR16_WRAPPER_MAGIC 'tATR' typedef struct { DWORD magic; TYPEATTR *attr32; TYPEATTR16 attr16; } TYPEATTR16_WRAPPER; TYPEATTR16 *map_typeattr32_16(const TYPEATTR *a32) { TYPEATTR16_WRAPPER *w = (TYPEATTR16_WRAPPER*)HeapAlloc(GetProcessHeap(), 0, sizeof(TYPEATTR16_WRAPPER)); TYPEATTR16 *a16 = &w->attr16; w->magic = TYPEATTR16_WRAPPER_MAGIC; w->attr32 = a32; a16->guid = a32->guid; a16->lcid = a32->lcid; a16->dwReserved = a32->dwReserved; a16->memidConstructor = a32->memidConstructor; a16->memidDestructor = a32->memidDestructor; a16->lpstrSchema = a32->lpstrSchema /* FIXME? */; a16->typekind = a32->typekind; a16->cFuncs = a32->cFuncs; a16->cVars = a32->cVars; a16->cImplTypes = a32->cImplTypes; a16->cbSizeVft = a32->cbSizeVft; a16->cbAlignment = a32->cbAlignment; a16->wTypeFlags = a32->wTypeFlags; a16->wMajorVerNum = a32->wMajorVerNum; a16->wMinorVerNum = a32->wMinorVerNum; TRACE("{guid:%s,lcid:0x%04x,dwReserved:%d,memidConstructor:0x%08x,memidDestructor:0x%08x,lpstrSchema:%08x" ",typekind:%d,cFuncs:%d,cVars:%d,cImplTypes:%d,cbSizeVft:%d,cbAlignment:%d,wTypeFlags:0x%04x,wMajorVerNum:%d,wMinorVerNum:%d}\n", debugstr_guid(&a16->guid), a16->lcid, a16->dwReserved, a16->memidConstructor, a16->memidDestructor, a16->lpstrSchema, a16->typekind, a16->cFuncs, a16->cVars, a16->cImplTypes, a16->cbSizeVft, a16->cbAlignment, a16->wTypeFlags, a16->wMajorVerNum, a16->wMinorVerNum); map_typedesc32_16(&a16->tdescAlias, &a32->tdescAlias); map_idldesc32_16(&a16->idldescType, &a32->idldescType); return a16; } void free_typeattr16(TYPEATTR16 *a16) { free_typedesc16(&a16->tdescAlias); free_idldesc16(&a16->idldescType); } #ifdef IFS1632_OVERWRITE_ITypeInfo_ReleaseTypeAttr void CDECL ITypeInfo_16_32_ReleaseTypeAttr(SEGPTR This, SEGPTR args16_pTypeAttr) { ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This); TYPEATTR *args32_pTypeAttr; TYPEATTR16_WRAPPER *w = CONTAINING_RECORD(MapSL(args16_pTypeAttr), TYPEATTR16_WRAPPER, attr16); if (w->magic != TYPEATTR16_WRAPPER_MAGIC) { ERR("w->magic != TYPEATTR16_WRAPPER_MAGIC\n"); return; } args32_pTypeAttr = w->attr32; TRACE("(%04x:%04x(%p),%08x)\n", SELECTOROF(This), OFFSETOF(This), iface32, args16_pTypeAttr); iface32->lpVtbl->ReleaseTypeAttr(iface32, args32_pTypeAttr); free_typeattr16(&w->attr16); HeapFree(GetProcessHeap(), 0, w); } #endif #ifdef IFS3216_OVERWRITE_ITypeInfo_ReleaseTypeAttr void STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseTypeAttr(ITypeInfo *This, TYPEATTR *pTypeAttr) { SEGPTR iface16 = get_interface16(This); SEGPTR args16_pTypeAttr; FIXME("\n"); return; MAP_PTR_TYPEATTR32_16(args16_pTypeAttr, pTypeAttr); TRACE("(%p(%04x:%04x),%p)\n", This, SELECTOROF(iface16), OFFSETOF(iface16), pTypeAttr); ITypeInfo16_ReleaseTypeAttr(iface16, args16_pTypeAttr); UNMAP_PTR_TYPEATTR32_16(args16_pTypeAttr, pTypeAttr); } #endif VARDESC *map_vardesc32(const VARDESC16 *a16) { VARDESC *a32 = (VARDESC*)HeapAlloc(GetProcessHeap(), 0, sizeof(VARDESC)); a16 = (VARDESC16 *)MapSL(a16); a32->memid = a16->memid; a32->lpstrSchema = a16->lpstrSchema; map_elemdesc16_32(&a32->elemdescVar, &a16->elemdescVar); a32->wVarFlags = a16->wVarFlags; a32->varkind = a16->varkind; a32->lpvarValue = 0xcafebabe; if (a16->varkind == VAR_CONST) { FIXME("VAR_CONST\n"); a32->lpvarValue = MapSL(a16->lpvarValue); } if (a32->varkind == VAR_PERINSTANCE) { a32->oInst = a16->oInst; } 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); return a32; } #define VARDESC16_WRAPPER_MAGIC 'Vmag' typedef struct { DWORD magic; VARDESC *desc32; VARDESC16 desc16; } VARDESC16_WRAPPER; VARDESC16 *map_vardesc16(const VARDESC *a32) { VARDESC16_WRAPPER *w = (VARDESC16_WRAPPER*)HeapAlloc(GetProcessHeap(), 0, sizeof(VARDESC16_WRAPPER)); VARDESC16 *a16 = &w->desc16; w->magic = VARDESC16_WRAPPER_MAGIC; w->desc32 = a32; a16->memid = a32->memid; a16->lpstrSchema = a32->lpstrSchema; map_elemdesc32_16(&a16->elemdescVar, &a32->elemdescVar); a16->wVarFlags = a32->wVarFlags; a16->varkind = a32->varkind; a16->lpvarValue = 0xcafebabe; if (a16->varkind == VAR_CONST) { FIXME("VAR_CONST\n"); a16->lpvarValue = MapLS(a32->lpvarValue); } if (a16->varkind == VAR_PERINSTANCE) { a16->oInst = a32->oInst; } 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); return a16; } void free_vardesc16(VARDESC16 *a16) { if (a16->varkind == VAR_CONST) { FIXME("VAR_CONST\n"); UnMapLS(a16->lpvarValue); } free_elemdesc16(&a16->elemdescVar); } void map_bindptr16_32(BINDPTR *a32, const BINDPTR16 *a16, const DESCKIND kind) { switch (kind) { case DESCKIND_NONE: TRACE("DESCKIND_NONE\n"); break; case DESCKIND_VARDESC: TRACE("DESCKIND_VARDESC\n"); a32->lpvardesc = map_vardesc32((VARDESC16*)MapSL(a16->lpvardesc)); break; case DESCKIND_FUNCDESC: TRACE("DESCKIND_FUNCDESC\n"); a32->lpfuncdesc = map_funcdesc32((FUNCDESC16*)MapSL(a16->lpfuncdesc)); break; case DESCKIND_TYPECOMP: TRACE("DESCKIND_TYPECOMP\n"); a32->lptcomp = (ITypeComp*)iface16_32(&IID_ITypeComp, a16->lptcomp); break; case DESCKIND_IMPLICITAPPOBJ: TRACE("DESCKIND_IMPLICITAPPOBJ\n"); a32->lpvardesc = map_vardesc32((VARDESC16*)MapSL(a16->lpvardesc)); break; default: FIXME("unknown DESCKIND %d\n", kind); break; } } void map_bindptr32_16(BINDPTR16 *a16, const BINDPTR *a32, TYP16_DESCKIND kind) { switch (kind) { case DESCKIND_NONE: TRACE("DESCKIND_NONE\n"); break; case DESCKIND_VARDESC: TRACE("DESCKIND_VARDESC\n"); a16->lpvardesc = MapLS(map_vardesc16(a32->lpvardesc)); break; case DESCKIND_FUNCDESC: TRACE("DESCKIND_FUNCDESC\n"); a16->lpfuncdesc = MapLS(map_funcdesc16(a32->lpfuncdesc)); break; case DESCKIND_TYPECOMP: TRACE("DESCKIND_TYPECOMP\n"); a16->lptcomp = iface32_16(&IID_ITypeComp, a32->lptcomp); break; case DESCKIND_IMPLICITAPPOBJ: TRACE("DESCKIND_IMPLICITAPPOBJ\n"); a16->lpvardesc = MapLS(map_vardesc16(a32->lpvardesc)); break; default: FIXME("unknown DESCKIND %d\n", kind); break; } } #ifdef IFS1632_OVERWRITE_ITypeComp_Bind HRESULT 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) { ITypeComp *iface32 = (ITypeComp*)get_interface32(This); HRESULT result__ = { 0 }; TYP16_HRESULT result16__ = { 0 }; LPOLESTR args32_szName; ULONG args32_lHashVal; WORD args32_wFlags; ITypeInfo * args32_ppTInfo = { 0 }; DESCKIND args32_pDescKind = { 0 }; BINDPTR args32_pBindPtr = { 0 }; MAP_LPOLESTR16_32(args32_szName, args16_szName); MAP_ULONG16_32(args32_lHashVal, args16_lHashVal); MAP_WORD16_32(args32_wFlags, args16_wFlags); 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); result__ = (HRESULT)iface32->lpVtbl->Bind(iface32, args32_szName, args32_lHashVal, args32_wFlags, &args32_ppTInfo, &args32_pDescKind, &args32_pBindPtr); MAP_HRESULT32_16(result16__, result__); UNMAP_LPOLESTR16_32(args32_szName, args16_szName); UNMAP_ULONG16_32(args32_lHashVal, args16_lHashVal); UNMAP_WORD16_32(args32_wFlags, args16_wFlags); if (args16_ppTInfo) { *(SEGPTR*)MapSL(args16_ppTInfo) = iface32_16(&IID_ITypeInfo, args32_ppTInfo); } if (args16_pDescKind) { MAP_DESCKIND32_16((*(TYP16_DESCKIND*)MapSL(args16_pDescKind)), args32_pDescKind); } if (args16_pBindPtr) { /**/ map_bindptr32_16(&(*(TYP16_BINDPTR*)MapSL(args16_pBindPtr)), &args32_pBindPtr, args32_pDescKind); /**/ } return result16__; } #endif #ifdef IFS3216_OVERWRITE_ITypeComp_Bind HRESULT STDMETHODCALLTYPE ITypeComp_32_16_Bind(ITypeComp *This, LPOLESTR szName, ULONG lHashVal, WORD wFlags, ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr) { SEGPTR iface16 = get_interface16(This); TYP16_HRESULT result__ = { 0 }; HRESULT result32__ = { 0 }; TYP16_LPOLESTR args16_szName; TYP16_ULONG args16_lHashVal; TYP16_WORD args16_wFlags; SEGPTR args16_ppTInfo = { 0 }; TYP16_DESCKIND args16_pDescKind = { 0 }; TYP16_BINDPTR args16_pBindPtr = { 0 }; MAP_LPOLESTR32_16(args16_szName, szName); MAP_ULONG32_16(args16_lHashVal, lHashVal); MAP_WORD32_16(args16_wFlags, wFlags); TRACE("(%p(%04x:%04x),%p,%08x,%08x,%p,%p,%p)\n", This, SELECTOROF(iface16), OFFSETOF(iface16), szName, lHashVal, wFlags, ppTInfo, pDescKind, pBindPtr); result__ = (TYP16_HRESULT)ITypeComp16_Bind(iface16, args16_szName, args16_lHashVal, args16_wFlags, MapLS(&args16_ppTInfo), MapLS(&args16_pDescKind), MapLS(&args16_pBindPtr)); MAP_HRESULT16_32(result32__, result__); UNMAP_LPOLESTR32_16(args16_szName, szName); UNMAP_ULONG32_16(args16_lHashVal, lHashVal); UNMAP_WORD32_16(args16_wFlags, wFlags); if (ppTInfo) { *ppTInfo = iface16_32(&IID_ITypeInfo, args16_ppTInfo); } if (pDescKind) { MAP_DESCKIND16_32(*pDescKind, args16_pDescKind); } if (pBindPtr) { /**/ map_bindptr16_32(&*pBindPtr, &args16_pBindPtr, args16_pDescKind); /**/ } return result32__; } #endif #ifdef IFS1632_OVERWRITE_ITypeInfo_ReleaseVarDesc void CDECL ITypeInfo_16_32_ReleaseVarDesc(SEGPTR This, SEGPTR args16_pVarDesc) { ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This); VARDESC * args32_pVarDesc; /**/ VARDESC16 *desc16 = (VARDESC16*)MapSL(args16_pVarDesc); VARDESC16_WRAPPER *w = CONTAINING_RECORD(desc16, VARDESC16_WRAPPER, desc16); if (w->magic != VARDESC16_WRAPPER_MAGIC) { ERR("w->magic != VARDESC16_WRAPPER_MAGIC\n"); return; } args32_pVarDesc = w->desc32; /**/ TRACE("(%04x:%04x(%p),%08x)\n", SELECTOROF(This), OFFSETOF(This), iface32, args16_pVarDesc); iface32->lpVtbl->ReleaseVarDesc(iface32, args32_pVarDesc); /**/ free_vardesc16(desc16); UnMapLS(args16_pVarDesc); HeapFree(GetProcessHeap(), 0, w); /**/ } #endif #ifdef IFS3216_OVERWRITE_ITypeInfo_ReleaseVarDesc void STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseVarDesc(ITypeInfo *This, VARDESC *pVarDesc) { SEGPTR iface16 = get_interface16(This); SEGPTR args16_pVarDesc; MAP_PTR_VARDESC32_16(args16_pVarDesc, pVarDesc); FIXME("\n"); TRACE("(%p(%04x:%04x),%p)\n", This, SELECTOROF(iface16), OFFSETOF(iface16), pVarDesc); ITypeInfo16_ReleaseVarDesc(iface16, args16_pVarDesc); UNMAP_PTR_VARDESC32_16(args16_pVarDesc, pVarDesc); } #endif #ifndef VT_EXTRA_TYPE #define VT_EXTRA_TYPE (VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED) #endif void map_variant32_16(VARIANT16 *dst, const VARIANT *src) { enum VARENUM t = V_VT(src) & VT_TYPEMASK; enum VARENUM e = V_VT(src) & VT_EXTRA_TYPE; dst->llVal = src->llVal; dst->vt = src->vt; if (V_ISARRAY(src)) { FIXME("V_ISARRAY\n"); return; } else if (V_VT(src) == (VT_BSTR | VT_BYREF)) { FIXME("VT_BSTR | VT_BYREF\n"); } else if (V_VT(src) == (VT_DISPATCH | VT_BYREF) || V_VT(src) == (VT_UNKNOWN | VT_BYREF)) { FIXME("t32 == (VT_DISPATCH | VT_BYREF) || t32 == (VT_UNKNOWN | VT_BYREF)\n"); } else if (V_VT(src) == (VT_VARIANT | VT_BYREF)) { FIXME("VT_VARIANT | VT_BYREF\n"); } else if (V_VT(src) == (VT_DECIMAL | VT_BYREF)) { FIXME("VT_DECIMAL\n"); } else { if (e & VT_ARRAY) { FIXME("VT_ARRAY\n"); } if (e & VT_VECTOR) { FIXME("VT_VECTOR\n"); } if (e & VT_BYREF) { switch (t) { case VT_EMPTY: case VT_NULL: case VT_VOID: break; case VT_I2: case VT_I4: case VT_R4: case VT_R8: case VT_CY: case VT_DATE: case VT_ERROR: case VT_BOOL: case VT_I1: case VT_UI1: case VT_UI2: case VT_UI4: case VT_I8: case VT_UI8: case VT_INT: case VT_UINT: case VT_HRESULT: dst->plVal = MapLS(src->plVal); return; case VT_DECIMAL: return; case VT_DISPATCH: case VT_BSTR: case VT_UNKNOWN: case VT_VARIANT: case VT_PTR: case VT_SAFEARRAY: case VT_CARRAY: case VT_USERDEFINED: case VT_LPSTR: case VT_LPWSTR: case VT_RECORD: case VT_INT_PTR: case VT_UINT_PTR: case VT_FILETIME: case VT_BLOB: case VT_STREAM: case VT_STORAGE: case VT_STREAMED_OBJECT: case VT_STORED_OBJECT: case VT_BLOB_OBJECT: case VT_CF: case VT_CLSID: case VT_VERSIONED_STREAM: case VT_BSTR_BLOB: FIXME("unsupported %s\n", debugstr_vt(src->vt)); break; default: FIXME("unknown %s\n", debugstr_vt(src->vt)); return; } } switch (t) { case VT_EMPTY: case VT_NULL: case VT_VOID: break; case VT_I2: case VT_I4: case VT_R4: case VT_R8: case VT_CY: case VT_DATE: case VT_ERROR: case VT_BOOL: case VT_I1: case VT_UI1: case VT_UI2: case VT_UI4: case VT_I8: case VT_UI8: case VT_INT: case VT_UINT: case VT_HRESULT: dst->llVal = src->llVal; break; case VT_DECIMAL: break; case VT_DISPATCH: dst->pdispVal = iface32_16(&IID_IDispatch, src->pdispVal); break; case VT_BSTR: map_bstr32_16(&dst->bstrVal, &src->bstrVal); break; case VT_UNKNOWN: dst->punkVal = iface32_16(&IID_IUnknown, src->punkVal); break; case VT_VARIANT: case VT_PTR: case VT_SAFEARRAY: case VT_CARRAY: case VT_USERDEFINED: case VT_LPSTR: case VT_LPWSTR: case VT_RECORD: case VT_INT_PTR: case VT_UINT_PTR: case VT_FILETIME: case VT_BLOB: case VT_STREAM: case VT_STORAGE: case VT_STREAMED_OBJECT: case VT_STORED_OBJECT: case VT_BLOB_OBJECT: case VT_CF: case VT_CLSID: case VT_VERSIONED_STREAM: case VT_BSTR_BLOB: FIXME("unsupported %s\n", debugstr_vt(src->vt)); break; default: FIXME("unknown %s\n", debugstr_vt(src->vt)); return; } } } void map_variant16_32(VARIANT *dst, const VARIANT16 *src) { enum VARENUM t = V_VT(src) & VT_TYPEMASK; enum VARENUM e = V_VT(src) & VT_EXTRA_TYPE; dst->llVal = src->llVal; dst->vt = src->vt; if (V_ISARRAY(src)) { FIXME("V_ISARRAY\n"); return; } else if (V_VT(src) == (VT_BSTR | VT_BYREF)) { FIXME("VT_BSTR | VT_BYREF\n"); } else if (V_VT(src) == (VT_DISPATCH | VT_BYREF) || V_VT(src) == (VT_UNKNOWN | VT_BYREF)) { FIXME("t32 == (VT_DISPATCH | VT_BYREF) || t32 == (VT_UNKNOWN | VT_BYREF)\n"); } else if (V_VT(src) == (VT_VARIANT | VT_BYREF)) { FIXME("VT_VARIANT | VT_BYREF\n"); } else if (V_VT(src) == (VT_DECIMAL | VT_BYREF)) { FIXME("VT_DECIMAL\n"); } else { if (e & VT_ARRAY) { FIXME("VT_ARRAY\n"); } if (e & VT_VECTOR) { FIXME("VT_VECTOR\n"); } if (e & VT_BYREF) { switch (t) { case VT_EMPTY: case VT_NULL: case VT_VOID: break; case VT_I2: case VT_I4: case VT_R4: case VT_R8: case VT_CY: case VT_DATE: case VT_ERROR: case VT_BOOL: case VT_I1: case VT_UI1: case VT_UI2: case VT_UI4: case VT_I8: case VT_UI8: case VT_INT: case VT_UINT: case VT_HRESULT: dst->plVal = MapSL(src->plVal); return; case VT_DECIMAL: return; case VT_DISPATCH: case VT_BSTR: case VT_UNKNOWN: case VT_VARIANT: case VT_PTR: case VT_SAFEARRAY: case VT_CARRAY: case VT_USERDEFINED: case VT_LPSTR: case VT_LPWSTR: case VT_RECORD: case VT_INT_PTR: case VT_UINT_PTR: case VT_FILETIME: case VT_BLOB: case VT_STREAM: case VT_STORAGE: case VT_STREAMED_OBJECT: case VT_STORED_OBJECT: case VT_BLOB_OBJECT: case VT_CF: case VT_CLSID: case VT_VERSIONED_STREAM: case VT_BSTR_BLOB: FIXME("unsupported %s\n", debugstr_vt(src->vt)); break; default: FIXME("unknown %s\n", debugstr_vt(src->vt)); return; } } switch (t) { case VT_EMPTY: case VT_NULL: case VT_VOID: break; case VT_I2: case VT_I4: case VT_R4: case VT_R8: case VT_CY: case VT_DATE: case VT_ERROR: case VT_BOOL: case VT_I1: case VT_UI1: case VT_UI2: case VT_UI4: case VT_I8: case VT_UI8: case VT_INT: case VT_UINT: case VT_HRESULT: dst->llVal = src->llVal; break; case VT_DECIMAL: break; case VT_DISPATCH: dst->pdispVal = (IDispatch*)iface16_32(&IID_IDispatch, src->pdispVal); break; case VT_BSTR: map_bstr16_32(&dst->bstrVal, &src->bstrVal); break; case VT_UNKNOWN: dst->punkVal = (IUnknown*)iface16_32(&IID_IUnknown, src->punkVal); break; case VT_VARIANT: case VT_PTR: case VT_SAFEARRAY: case VT_CARRAY: case VT_USERDEFINED: case VT_LPSTR: case VT_LPWSTR: case VT_RECORD: case VT_INT_PTR: case VT_UINT_PTR: case VT_FILETIME: case VT_BLOB: case VT_STREAM: case VT_STORAGE: case VT_STREAMED_OBJECT: case VT_STORED_OBJECT: case VT_BLOB_OBJECT: case VT_CF: case VT_CLSID: case VT_VERSIONED_STREAM: case VT_BSTR_BLOB: FIXME("unsupported %s\n", debugstr_vt(src->vt)); break; default: FIXME("unknown %s\n", debugstr_vt(src->vt)); return; } } } void map_dispparams32_16(DISPPARAMS16 *a16, const DISPPARAMS *a32) { VARIANT16 *v16; int i; a16->cArgs = a32->cArgs; a16->cNamedArgs = a32->cNamedArgs; a16->rgdispidNamedArgs = MapLS(a32->rgdispidNamedArgs); v16 = HeapAlloc(GetProcessHeap(), 0, sizeof(VARIANT16) * a16->cArgs); a16->rgvarg = MapLS(v16); for (i = 0; i < a16->cArgs; i++) { map_variant32_16(v16 + i, a32->rgvarg + i); } } void map_dispparams16_32(DISPPARAMS *a32, const DISPPARAMS16 *a16) { VARIANT16 *v16; int i; a32->cArgs = a16->cArgs; a32->cNamedArgs = a16->cNamedArgs; a32->rgdispidNamedArgs = MapSL(a16->rgdispidNamedArgs); a32->rgvarg = HeapAlloc(GetProcessHeap(), 0, sizeof(VARIANT) * a32->cArgs); v16 = (VARIANT16*)MapSL(a16->rgvarg); for (i = 0; i < a16->cArgs; i++) { map_variant16_32(a32->rgvarg + i, v16 + i); } } void free_dispparams32(const DISPPARAMS *a32) { HeapFree(GetProcessHeap(), 0, a32->rgvarg); } void free_dispparams16(const DISPPARAMS16 *a16) { HeapFree(GetProcessHeap(), 0, MapSL(a16->rgvarg)); } void map_excepinfo16_32(EXCEPINFO *a32, const EXCEPINFO16 *a16) { a32->wCode = a16->wCode; a32->wReserved = a16->wReserved; map_bstr16_32(&a32->bstrSource, &a16->bstrSource); map_bstr16_32(&a32->bstrDescription, &a16->bstrDescription); map_bstr16_32(&a32->bstrHelpFile, &a16->bstrHelpFile); a32->wReserved = a16->dwHelpContext; a32->pvReserved = a16->pvReserved; if (a16->pfnDeferredFillIn) ERR("pfnDeferredFillIn\n"); a32->pfnDeferredFillIn = 0; a32->scode = a16->scode; } void map_excepinfo32_16(EXCEPINFO16 *a16, const EXCEPINFO *a32) { a16->wCode = a32->wCode; a16->wReserved = a32->wReserved; map_bstr32_16(&a16->bstrSource, &a32->bstrSource); map_bstr32_16(&a16->bstrDescription, &a32->bstrDescription); map_bstr32_16(&a16->bstrHelpFile, &a32->bstrHelpFile); a16->wReserved = a32->dwHelpContext; a16->pvReserved = a32->pvReserved; if (a32->pfnDeferredFillIn) ERR("pfnDeferredFillIn\n"); a16->pfnDeferredFillIn = 0; a16->scode = a32->scode; } static HMODULE get_hmodule_helper(const char *mod) { HMODULE hmod = GetModuleHandleA(mod); if (hmod) return hmod; return LoadLibraryA(mod); } static void dynamic_SysFreeString16(SEGPTR bstr) { static void (WINAPI*pSysFreeString16)(SEGPTR); if (!pSysFreeString16) { pSysFreeString16 = GetProcAddress(get_hmodule_helper("OLE2DISP.DLL16"), "SysFreeString16"); } if (!pSysFreeString16) return; pSysFreeString16(bstr); } static int dynamic_SysStringLen16(SEGPTR bstr) { static int (WINAPI*pSysStringLen16)(SEGPTR); if (!pSysStringLen16) { pSysStringLen16 = GetProcAddress(get_hmodule_helper("OLE2DISP.DLL16"), "SysStringLen16"); } if (!pSysStringLen16) return 0; return pSysStringLen16(bstr); } static int dynamic_SysAllocStringLen16(SEGPTR bstr, int len) { static int (WINAPI*pSysAllocStringLen16)(SEGPTR bstr, int len); if (!pSysAllocStringLen16) { pSysAllocStringLen16 = GetProcAddress(get_hmodule_helper("OLE2DISP.DLL16"), "SysAllocStringLen16"); } if (!pSysAllocStringLen16) return 0; return pSysAllocStringLen16(bstr, len); } void free_excepinfo16(const EXCEPINFO16 *a16) { dynamic_SysFreeString16(a16->bstrSource); dynamic_SysFreeString16(a16->bstrDescription); dynamic_SysFreeString16(a16->bstrHelpFile); } void free_excepinfo32(const EXCEPINFO *a32) { SysFreeString(a32->bstrSource); SysFreeString(a32->bstrDescription); SysFreeString(a32->bstrHelpFile); } #ifdef IFS1632_OVERWRITE_ITypeInfo_Invoke HRESULT 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) { ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This); HRESULT result__ = { 0 }; TYP16_HRESULT result16__ = { 0 }; PVOID args32_pvInstance; MEMBERID args32_memid; WORD args32_wFlags; DISPPARAMS args32_pDispParams = { 0 }; VARIANT args32_pVarResult = { 0 }; EXCEPINFO args32_pExcepInfo = { 0 }; UINT args32_puArgErr = { 0 }; /**/ /* MAP_PVOID16_32(args32_pvInstance, args16_pvInstance); */ args32_pvInstance = args16_pvInstance; /**/ MAP_MEMBERID16_32(args32_memid, args16_memid); MAP_WORD16_32(args32_wFlags, args16_wFlags); INMAP_PTR_DISPPARAMS16_32(args32_pDispParams, args16_pDispParams); 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); result__ = (HRESULT)iface32->lpVtbl->Invoke(iface32, args32_pvInstance, args32_memid, args32_wFlags, &args32_pDispParams, &args32_pVarResult, &args32_pExcepInfo, &args32_puArgErr); MAP_HRESULT32_16(result16__, result__); /* UNMAP_PVOID16_32(args32_pvInstance, args16_pvInstance); */ UNMAP_MEMBERID16_32(args32_memid, args16_memid); UNMAP_WORD16_32(args32_wFlags, args16_wFlags); if (args16_pDispParams) { OUTMAP_DISPPARAMS32_16((*(TYP16_DISPPARAMS*)MapSL(args16_pDispParams)), args32_pDispParams); } if (args16_pVarResult) { MAP_VARIANT32_16((*(TYP16_VARIANT*)MapSL(args16_pVarResult)), args32_pVarResult); } if (args16_pExcepInfo) { MAP_EXCEPINFO32_16((*(TYP16_EXCEPINFO*)MapSL(args16_pExcepInfo)), args32_pExcepInfo); } if (args16_puArgErr) { MAP_UINT32_16((*(TYP16_UINT*)MapSL(args16_puArgErr)), args32_puArgErr); } return result16__; } #endif #ifdef IFS1632_OVERWRITE_ITypeInfo_AddressOfMember HRESULT CDECL ITypeInfo_16_32_AddressOfMember(SEGPTR This, DWORD args16_memid, WORD args16_invKind, SEGPTR args16_ppv) { ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This); HRESULT result__ = { 0 }; TYP16_HRESULT result16__ = { 0 }; MEMBERID args32_memid; INVOKEKIND args32_invKind; PVOID args32_ppv = { 0 }; MAP_MEMBERID16_32(args32_memid, args16_memid); MAP_INVOKEKIND16_32(args32_invKind, args16_invKind); TRACE("(%04x:%04x(%p),%08x,%08x,%08x)\n", SELECTOROF(This), OFFSETOF(This), iface32, args16_memid, args16_invKind, args16_ppv); result__ = (HRESULT)iface32->lpVtbl->AddressOfMember(iface32, args32_memid, args32_invKind, &args32_ppv); MAP_HRESULT32_16(result16__, result__); UNMAP_MEMBERID16_32(args32_memid, args16_memid); UNMAP_INVOKEKIND16_32(args32_invKind, args16_invKind); if (args16_ppv) { (*(TYP16_PVOID*)MapSL(args16_ppv)) = args32_ppv; /*MAP_PVOID32_16((*(TYP16_PVOID*)MapSL(args16_ppv)), args32_ppv);*/ } return result16__; } #endif /*** OLESTREAM32 methods ***/ /*********************************************************************** * SELECTOR_SetEntries * * Set the LDT entries for an array of selectors. */ static BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags) { LDT_ENTRY entry; WORD i, count; wine_ldt_set_base(&entry, base); wine_ldt_set_limit(&entry, size - 1); wine_ldt_set_flags(&entry, flags); count = (size + 0xffff) / 0x10000; for (i = 0; i < count; i++) { if (wine_ldt_set_entry(sel + (i << __AHSHIFT), &entry) < 0) return FALSE; wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000); /* yep, Windows sets limit like that, not 64K sel units */ wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000); } return TRUE; } #ifdef IFS3216_OVERWRITE_OLESTREAM32_Get DWORD __stdcall OLESTREAM32_32_16_Get(OLESTREAM32 *This, void *lpszBuf, DWORD cbbuf) { SEGPTR iface16 = get_interface16(This); WORD seg = AllocSelectorArray16(cbbuf / 0x10000 + 1); DWORD ret; if (!seg) return 0; SELECTOR_SetEntries(seg, lpszBuf, cbbuf, WINE_LDT_FLAGS_DATA); TRACE("(%p(%04x:%04x),%p,%08x)\n", This, SELECTOROF(iface16), OFFSETOF(iface16), MAKESEGPTR(seg, 0), cbbuf); ret = OLESTREAM3216_Get(iface16, MAKESEGPTR(seg, 0), cbbuf); for (WORD i = 0; i <= cbbuf / 0x10000; i++) FreeSelector16(seg + i); return ret; } #endif #ifdef IFS3216_OVERWRITE_OLESTREAM32_Put DWORD __stdcall OLESTREAM32_32_16_Put(OLESTREAM32 *This, const void *lpszBuf, DWORD cbbuf) { SEGPTR iface16 = get_interface16(This); DWORD ret; WORD seg = AllocSelectorArray16(cbbuf / 0x10000 + 1); if (!seg) return 0; SELECTOR_SetEntries(seg, lpszBuf, cbbuf, WINE_LDT_FLAGS_DATA); TRACE("(%p(%04x:%04x),%p,%08x)\n", This, SELECTOROF(iface16), OFFSETOF(iface16), MAKESEGPTR(seg, 0), cbbuf); ret = OLESTREAM3216_Put(iface16, MAKESEGPTR(seg, 0), cbbuf); for (WORD i = 0; i <= cbbuf / 0x10000; i++) FreeSelector16(seg + i); return ret; } #endif #ifdef IFS3216_OVERWRITE_IMessageFilter_HandleInComingCall DWORD STDMETHODCALLTYPE IMessageFilter_32_16_HandleInComingCall(IMessageFilter *This, DWORD dwCallType,HTASK htaskCaller,DWORD dwTickCount,LPINTERFACEINFO lpInterfaceInfo) { SEGPTR iface16 = get_interface16(This); TYP16_DWORD result__ = {0}; DWORD result32__ = {0}; TYP16_DWORD args16_dwCallType; TYP16_HTASK args16_htaskCaller; TYP16_DWORD args16_dwTickCount; TYP16_LPINTERFACEINFO args16_lpInterfaceInfo; MAP_DWORD32_16(args16_dwCallType, dwCallType); MAP_HTASK32_16(args16_htaskCaller, htaskCaller); MAP_DWORD32_16(args16_dwTickCount, dwTickCount); MAP_LPINTERFACEINFO32_16(args16_lpInterfaceInfo, lpInterfaceInfo); TRACE("(%p(%04x:%04x),%08x,%08x,%08x,%p)\n", This, SELECTOROF(iface16), OFFSETOF(iface16), dwCallType, htaskCaller, dwTickCount, lpInterfaceInfo); result__ = (TYP16_DWORD)IMessageFilter16_HandleInComingCall(iface16, args16_dwCallType, args16_htaskCaller, args16_dwTickCount, args16_lpInterfaceInfo); if (result__ > 2) result__ = 0; MAP_DWORD16_32(result32__, result__); UNMAP_DWORD32_16(args16_dwCallType, dwCallType); UNMAP_HTASK32_16(args16_htaskCaller, htaskCaller); UNMAP_DWORD32_16(args16_dwTickCount, dwTickCount); UNMAP_LPINTERFACEINFO32_16(args16_lpInterfaceInfo, lpInterfaceInfo); return result32__; } #endif #ifdef IFS1632_OVERWRITE_IDataObject_DAdvise HRESULT CDECL IDataObject_16_32_DAdvise(SEGPTR This, SEGPTR args16_pformatetc, DWORD args16_advf, SEGPTR args16_pAdvSink, SEGPTR args16_pdwConnection) { IDataObject *iface32 = (IDataObject*)get_interface32(This); HRESULT result__ = {0}; TYP16_HRESULT result16__ = {0}; FORMATETC * args32_pformatetc; DWORD args32_advf; IAdviseSink * args32_pAdvSink; DWORD args32_pdwConnection = {0}; MAP_PTR_FORMATETC16_32(args32_pformatetc, args16_pformatetc); MAP_DWORD16_32(args32_advf, args16_advf); args32_pAdvSink = iface16_32(&IID_IAdviseSink, args16_pAdvSink); if (args32_pformatetc->ptd) { IPersist *pPersist; iface32->lpVtbl->QueryInterface(iface32, &IID_IPersist, &pPersist); if (pPersist) { CLSID clsid; if (SUCCEEDED(pPersist->lpVtbl->GetClassID(pPersist, &clsid)) && CoIsOle1Class(&clsid)) { HeapFree(GetProcessHeap(), 0, args32_pformatetc->ptd); args32_pformatetc->ptd = NULL; } pPersist->lpVtbl->Release(pPersist); } } TRACE("(%04x:%04x(%p),%08x,%08x,%08x,%08x)\n", SELECTOROF(This), OFFSETOF(This), iface32, args16_pformatetc, args16_advf, args16_pAdvSink, args16_pdwConnection); result__ = (HRESULT)iface32->lpVtbl->DAdvise(iface32, args32_pformatetc, args32_advf, args32_pAdvSink, &args32_pdwConnection); MAP_HRESULT32_16(result16__, result__); UNMAP_PTR_FORMATETC16_32(args32_pformatetc, args16_pformatetc); UNMAP_DWORD16_32(args32_advf, args16_advf); if (args16_pdwConnection) { MAP_DWORD32_16((*(TYP16_DWORD*)MapSL(args16_pdwConnection)), args32_pdwConnection); } return result16__; } #endif ================================================ FILE: ole2/ifs_thunk.h ================================================ #define IFS_THUNK_H #ifdef IFS_THUNK_H #include "config.h" #include #include #include #include #include #include #define COBJMACROS #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "wownt32.h" #include "ole2.h" #include "winerror.h" #include "oaidl.h" #include "ocidl.h" #include "wine/winbase16.h" #include "wine/wingdi16.h" #include "wine/winuser16.h" #include "ifs.h" #include "../ole2disp/ole2disp.h" #ifndef IFS_THUNK_NDEF_DBG_CHANNEL #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); #endif #include typedef struct { void *lpVtbl; SEGPTR iface16; IID *riid; void *ptr; } interface_32; typedef struct { SEGPTR lpVtbl; void *iface32; IID *riid; void *ptr; void *vtable_copy; } interface_16; static void *get_interface32(SEGPTR iface16) { return ((interface_16*)MapSL(iface16))->iface32; } static SEGPTR get_interface16(void *iface32) { return ((interface_32*)iface32)->iface16; } static interface_16 *get_interface32_ptr(SEGPTR iface16) { return ((interface_16*)MapSL(iface16)); } static interface_32 *get_interface16_ptr(void *iface32) { return ((interface_32*)iface32); } typedef struct { void *func16; void *name; const char *args; BOOL is_stdcall; } vtbl_entry; typedef struct { IID iid; void *lpVtbl32; vtbl_entry *vtbl16; /* null-terminated */ void *lpVtbl16; SEGPTR spVtbl16; } interface_entry; SEGPTR iface32_16(REFIID riid, void *iface32); void *iface16_32(REFIID riid, SEGPTR iface16); void *copy_iface16_vtbl(SEGPTR iface16); #define IFACE_ALLOC_ARRAY(type, size) ((type*)HeapAlloc(GetProcessHeap(), 0, (size) * sizeof(type))) #define IFACE_FREE_ARRAY(ptr) typedef SEGPTR TYP16_REFIID; typedef SEGPTR LPvoid; typedef SEGPTR TYP16_LPVOID; typedef ULONG TYP16_ULONG; typedef DWORD TYP16_DWORD; typedef CLSID TYP16_CLSID; typedef DWORD TYP16_DWORD; typedef BOOL16 TYP16_BOOL; typedef LONG TYP16_LONG; typedef DWORD TYP16_SIZE_T; typedef SEGPTR TYP16_LPOLESTR; typedef SEGPTR TYP16_LPCOLESTR; typedef BIND_OPTS TYP16_BIND_OPTS; typedef FILETIME TYP16_FILETIME; typedef ULARGE_INTEGER TYP16_ULARGE_INTEGER; typedef ULARGE_INTEGER TYP16_LARGE_INTEGER; typedef STATSTG16 TYP16_STATSTG; typedef SEGPTR TYP16_SNB; typedef SEGPTR TYP16_REFCLSID; typedef STATDATA16 TYP16_STATDATA; typedef FORMATETC16 TYP16_FORMATETC; typedef IID TYP16_IID; typedef HTASK16 TYP16_HTASK; typedef STGMEDIUM16 TYP16_STGMEDIUM; typedef SEGPTR TYP16_LPINTERFACEINFO; #define MAP_REFIID16_32(a32, a16) \ *(IID**)&a32 = (REFIID)MapSL(a16) #define MAP_PTR_CLSID16_32(a32, a16) \ a32 = (CLSID*)MapSL(a16) #define UNMAP_REFIID16_32 #define UNMAP_PTR_VOID16_32 #define UNMAP_PTR_CLSID16_32 #define UNMAP_PTR_PTR_VOID16_32 #define MAP_REFIID32_16(a16, a32) \ a16 = MapLS(a32) #define UNMAP_REFIID32_16 #define MAP_PTR_VOID16_32(a32, a16) \ a32 = MapSL(a16) #define MAP_PTR_VOID32_16(a16, a32) \ a16 = MapLS(a32) #define UNMAP_SIZE_T16_32 #define UNMAP_SIZE_T32_16 #define MAP_SIZE_T16_32(a32, a16) a32 = a16 #define MAP_SIZE_T32_16(a16, a32) a16 = a32 #define MAP_CLSID32_16(a16, a32) *(CLSID*)&a16 = a32 #define UNMAP_PTR_VOID32_16 #define MAP_CLSID16_32(a32, a16) a32 = a16 #define MAP_LPVOID16_32 MAP_PTR_VOID16_32 #define MAP_LPVOID32_16 MAP_PTR_VOID32_16 #define UNMAP_LPVOID16_32 UNMAP_PTR_VOID16_32 #define UNMAP_LPVOID32_16 UNMAP_PTR_VOID32_16 #define MAP_VOID_PTR16_32 MAP_PTR_VOID16_32 #define MAP_VOID_PTR32_16 MAP_PTR_VOID32_16 #define MAP_PTR_BIND_OPTS16_32(a32, a16) a32 = (BIND_OPTS*)MapSL(a16) #define MAP_PTR_BIND_OPTS32_16(a16, a32) a16 = MapLS(a32) #define MAP_PTR_FILETIME16_32(a32, a16) a32 = (FILETIME*)MapSL(a16) #define MAP_PTR_FILETIME32_16(a16, a32) a16 = MapLS(a32) #define MAP_BIND_OPTS16_32(a32, a16) a32 = a16 #define MAP_BIND_OPTS32_16(a16, a32) *(BIND_OPTS*)&a16 = a32 #define UNMAP_PTR_BIND_OPTS16_32 #define UNMAP_PTR_BIND_OPTS32_16 #define UNMAP_PTR_FILETIME16_32 #define UNMAP_PTR_FILETIME32_16 #define MAP_FILETIME32_16(a16, a32) *(FILETIME*)&a16 = a32 #define MAP_FILETIME16_32(a32, a16) a32 = a16 #define UNMAP_HTASK32_16 #define UNMAP_VOID_PTR16_32 #define UNMAP_VOID_PTR32_16 #define UNMAP_HTASK16_32 #define MAP_LARGE_INTEGER16_32(a32, a16) a32 = a16 #define UNMAP_LARGE_INTEGER16_32 #define MAP_ULARGE_INTEGER32_16(a16, a32) *(ULARGE_INTEGER*)&a16 = a32 #define MAP_LARGE_INTEGER32_16 MAP_LARGE_INTEGER16_32 #define MAP_LARGE_INTEGER32_16(a16, a32) *(LARGE_INTEGER*)&a16 = a32 #define MAP_ULARGE_INTEGER16_32(a32, a16) a32 = a16 #define UNMAP_LARGE_INTEGER32_16 #define UNMAP_ULARGE_INTEGER16_32 #define UNMAP_ULARGE_INTEGER32_16 static void map_statstg32_16(STATSTG16 *a16, STATSTG *a32) { a16->atime = a32->atime; a16->pwcsName = MapLS(strdupWtoA(a32->pwcsName)); a16->type = a32->type; a16->atime = a32->atime; a16->cbSize = a32->cbSize; a16->mtime = a32->mtime; a16->ctime = a32->ctime; a16->atime = a32->atime; a16->grfMode = a32->grfMode; a16->grfLocksSupported = a32->grfLocksSupported; a16->clsid = a32->clsid; a16->grfStateBits = a32->grfStateBits; a16->reserved = a32->reserved; } #define MAP_STATSTG32_16(a16, a32) map_statstg32_16(&a16, &a32) static void map_statstg16_32(STATSTG *a32, STATSTG16 *a16) { /* FIXME: leak */ a32->pwcsName = strdupAtoW(MapSL(a16->pwcsName)); a32->type = a16->type; a32->atime = a16->atime; a32->cbSize = a16->cbSize; a32->mtime = a16->mtime; a32->ctime = a16->ctime; a32->atime = a16->atime; a32->grfMode = a16->grfMode; a32->grfLocksSupported = a16->grfLocksSupported; a32->clsid = a16->clsid; a32->grfStateBits = a16->grfStateBits; a32->reserved = a16->reserved; } #define MAP_STATSTG16_32(a32, a16) map_statstg16_32(&a32, &a16) #define MAP_LPCOLESTR16_32 MAP_LPOLESTR16_32 #define MAP_LPCOLESTR32_16 MAP_LPOLESTR32_16 #define UNMAP_LPCOLESTR16_32 UNMAP_LPOLESTR16_32 #define UNMAP_LPCOLESTR32_16 UNMAP_LPOLESTR32_16 #define MAP_SNB16_32 MAP_LPOLESTR16_32 #define MAP_SNB32_16 MAP_LPOLESTR32_16 #define UNMAP_SNB16_32 UNMAP_LPOLESTR16_32 #define UNMAP_SNB32_16 UNMAP_LPOLESTR32_16 #define IFS1632_OVERWRITE_ISTGMEDIUMRelease_Release ULONG CDECL ISTGMEDIUMRelease_16_32_Release(SEGPTR This); #define IFS3216_OVERWRITE_ISTGMEDIUMRelease_Release extern const IID IID_ISTGMEDIUMRelease; typedef IUnknown ISTGMEDIUMRelease; typedef IUnknownVtbl ISTGMEDIUMReleaseVtbl; ULONG WINAPI ISTGMEDIUMRelease_32_16_Release(ISTGMEDIUMRelease *iface); #define MAP_STGMEDIUM32_16(a16, a32) map_stgmedium32_16((STGMEDIUM16*)&a16, &a32) #define MAP_STGMEDIUM16_32(a32, a16) map_stgmedium16_32(&a32, &a16) #define UNMAP_IID_PTR16_32 #define UNMAP_IID_PTR32_16 #define UNMAP_REFCLSID32_16 #define UNMAP_REFCLSID16_32 #define UNMAP_PTR_FORMATETC32_16(a16, a32) \ if (((FORMATETC16 *)MapSL(a16))->ptd) { \ HeapFree(GetProcessHeap(), 0, MapSL(((FORMATETC16 *)MapSL(a16))->ptd)); \ UnMapLS(((FORMATETC16 *)MapSL(a16))->ptd); \ UnMapLS(a16); \ } #define UNMAP_PTR_FORMATETC16_32(a32, a16) if (a32->ptd) HeapFree(GetProcessHeap(), 0, a32->ptd); #define UNMAP_STGMEDIUM32_16 #define UNMAP_STGMEDIUM16_32 #define UNMAP_LPINTERFACEINFO32_16 #define UNMAP_LPINTERFACEINFO16_32 #define UNMAP_PTR_STGMEDIUM32_16 #define UNMAP_PTR_STGMEDIUM16_32 #define MAP_PTR_FORMATETC16_32(a32, a16) map_pformatetc16_32(a32 = (FORMATETC*)alloca(sizeof(FORMATETC)), (FORMATETC16*)MapSL(a16)) #define MAP_PTR_FORMATETC32_16(a16, a32) map_pformatetc32_16((FORMATETC16*)MapSL(a16 = MapLS(alloca(sizeof(FORMATETC16)))), a32); #define MAP_PTR_STGMEDIUM16_32(a32, a16) map_stgmedium16_32(a32 = (STGMEDIUM*)alloca(sizeof(STGMEDIUM)), (STGMEDIUM16*)MapSL(a16)) #define MAP_PTR_STGMEDIUM32_16(a16, a32) map_stgmedium32_16((STGMEDIUM16*)MapSL(a16 = MapLS(alloca(sizeof(STGMEDIUM16)))), a32); #define MAP_FORMATETC32_16(a16, a32) map_formatetc32_16((FORMATETC16*)&a16, &a32) #define MAP_FORMATETC16_32(a32, a16) map_formatetc16_32(&a32, (FORMATETC16*)&a16) #define MAP_HTASK16_32(a32, a16) a32 = HTASK_32(a16) #define MAP_HTASK32_16(a16, a32) a16 = HTASK_16(a32) #define MAP_HDC16_32(a32, a16) a32 = HDC_32(a16) #define MAP_HDC32_16(a16, a32) a16 = HDC_16(a32) #define MAP_HMENU16_32(a32, a16) a32 = HMENU_32(a16) #define MAP_HMENU32_16(a16, a32) a16 = HMENU_16(a32) #define MAP_HWND16_32(a32, a16) a32 = HWND_32(a16) #define MAP_HWND32_16(a16, a32) a16 = HWND_16(a32) #define UNMAP_HDC16_32(a32, a16) #define UNMAP_HDC32_16(a16, a32) #define UNMAP_HMENU16_32(a32, a16) #define UNMAP_HMENU32_16(a16, a32) #define UNMAP_HWND16_32(a32, a16) #define UNMAP_HWND32_16(a16, a32) #define MAP_LPOLESTR32_16(a16, a32) a16 = MapLS(strdupWtoA(a32)) #define MAP_LPOLESTR16_32(a32, a16) a32 = strdupAtoW(MapSL(a16)) #define UNMAP_LPOLESTR16_32(a32, a16) HeapFree(GetProcessHeap(), 0, a32) #define UNMAP_LPOLESTR32_16(a16, a32) HeapFree(GetProcessHeap(), 0, MapSL(a16)) typedef struct { /*LPUNKNOWN */SEGPTR pUnk; IID iid; WORD wMethod; } INTERFACEINFO16; void map_interfaceinfo16_32(INTERFACEINFO *a32, const INTERFACEINFO16 *a16); #define MAP_LPINTERFACEINFO16_32(a32, a16) if (a16) map_interfaceinfo16_32(a32 = (INTERFACEINFO*)alloca(sizeof(INTERFACEINFO)), (INTERFACEINFO16*)MapSL(a16)); else a32 = NULL void map_interfaceinfo32_16(INTERFACEINFO16 *a16, const INTERFACEINFO *a32); #define MAP_LPINTERFACEINFO32_16(a16, a32) if (a32) map_interfaceinfo32_16((INTERFACEINFO16*)MapSL(a16 = MapLS(alloca(sizeof(INTERFACEINFO16)))), a32); else a16 = 0 #define MAP_IID_PTR16_32(a32, a16) a32 = (const IID*)MapSL(a16) #define MAP_IID_PTR32_16(a16, a32) a16 = MapLS(a32) #define MAP_REFCLSID16_32(a32, a16) *(CLSID**)&a32 = (const IID*)MapSL(a16) #define MAP_REFCLSID32_16(a16, a32) a16 = MapLS(a32) typedef SEGPTR TYP16_LPBINDCTX; typedef GUID TYP16_GUID; #define MAP_GUID32_16(a16, a32) *(GUID*)&a16 = a32 #define MAP_GUID16_32(a16, a32) a32 = a16 typedef HWND16 TYP16_HWND; typedef WORD TYP16_WORD; typedef SEGPTR TYP16_LPMSG; typedef SIZE16 TYP16_SIZE; typedef SIZEL TYP16_SIZEL; typedef SEGPTR TYP16_IViewObjectCallback;/*FIXME*/ typedef void *IViewObjectCallback;/*FIXME*/ typedef HDC16 TYP16_HDC; typedef POINTL TYP16_POINTL; typedef HGLOBAL16 TYP16_HOLEMENU; typedef HMENU16 TYP16_HMENU; typedef DWORD TYP16_ULONG_PTR; struct TYP16_tagOleMenuGroupWidths { LONG width[6]; }; struct tagOleInPlaceFrameInfo { UINT cb; BOOL fMDIApp; HWND hwndFrame; HACCEL haccel; INT cAccelEntries; }; struct TYP16_tagRECT { INT16 left; INT16 top; INT16 right; INT16 bottom; }; #define UNMAP_ULONG_PTR16_32 #define UNMAP_LPCRECTL16_32 #define UNMAP_PTR_DVTARGETDEVICE16_32 #define UNMAP_ULONG_PTR32_16 #define UNMAP_LPCRECTL32_16 #define UNMAP_PTR_DVTARGETDEVICE32_16 #define UNMAP_SIZE32_16 #define UNMAP_SIZE16_32 #define UNMAP_PTR_SIZEL16_32 #define UNMAP_PTR_SIZEL32_16 #define UNMAP_PTR_LOGPALETTE16_32 #define UNMAP_PTR_LOGPALETTE32_16 #define UNMAP_POINTL16_32 #define UNMAP_POINTL32_16 #define UNMAP_LPMSG16_32 #define UNMAP_LPMSG32_16 #define UNMAP_LPCRECT16_32 #define UNMAP_LPCRECT32_16 #define UNMAP_LPCBORDERWIDTHS16_32 #define UNMAP_LPCBORDERWIDTHS32_16 #define UNMAP_IViewObjectCallback16_32 #define UNMAP_IViewObjectCallback32_16 #define UNMAP_HOLEMENU16_32 FIXME("UNMAP_HOLEMENU16_32\n"); #define UNMAP_HOLEMENU32_16 FIXME("UNMAP_HOLEMENU32_16\n"); #define MAP_ULONG_PTR16_32(a32, a16) a32 = a16 #define MAP_ULONG_PTR32_16(a32, a16) a16 = a32 #define MAP_SIZEL16_32(a32, a16) a32 = a16 #define MAP_SIZEL32_16(a16, a32) *(SIZEL*)&a16 = a32 #define MAP_POINTL16_32(a32, a16) a32 = a16 #define MAP_POINTL32_16(a16, a32) *(POINTL*)&a16 = a32 #define MAP_LPCRECTL16_32(a32, a16) a32 = (LPCRECTL)MapSL(a16) #define MAP_LPCRECTL32_16(a16, a32) a16 = MapLS(a32) #define MAP_PTR_SIZEL16_32(a32, a16) a32 = (SIZEL*)MapSL(a16) #define MAP_PTR_SIZEL32_16(a16, a32) a16 = MapLS(a32) static void map_rect32_16(RECT16 *a16, RECT *a32) { a16->bottom = a32->bottom; a16->top = a32->top; a16->left = a32->left; a16->right = a32->right; } static void map_rect16_32(RECT *a32, RECT16 *a16) { a32->bottom = a16->bottom; a32->top = a16->top; a32->left = a16->left; a32->right = a16->right; } #define MAP_STRUCT_tagRECT32_16(a16, a32) map_rect32_16((RECT16*)&a16, (RECT*)&a32) #define MAP_STRUCT_tagRECT16_32(a32, a16) map_rect16_32((RECT*)&a32, (RECT16*)&a16) #define MAP_STRUCT_tagOleMenuGroupWidths32_16(a16, a32) \ *(struct tagOleMenuGroupWidths*)&a16 = a32 #define MAP_STRUCT_tagOleMenuGroupWidths16_32(a32, a16) \ a32 = *(struct tagOleMenuGroupWidths*)&a16 #define MAP_LPCRECTL16_32(a32, a16) a32 = (LPCRECTL)MapSL(a16) #define MAP_LPCRECTL32_16(a16, a32) a16 = MapLS(a16) #define MAP_STRUCT_tagOleInPlaceFrameInfo32_16(a16, a32) map_oleinplaceframeinfo32_16((struct TYP16_tagOleInPlaceFrameInfo*)&a16, &a32) #define MAP_STRUCT_tagOleInPlaceFrameInfo16_32(a32, a16) map_oleinplaceframeinfo16_32(&a32, &a16) #define MAP_SIZE16_32(a32, a16) \ (a32).cx = a16.cx;\ (a32).cy = a16.cy #define MAP_SIZE32_16(a16, a32) \ ((SIZE16*)&a16)->cx = a32.cx;\ ((SIZE16*)&a16)->cy = a32.cy #define MAP_PTR_LOGPALETTE16_32(a32, a16) a32 = (LOGPALETTE*)MapSL(a16) #define MAP_PTR_LOGPALETTE32_16(a16, a32) a16 = MapLS(a32) #define MAP_PTR_DVTARGETDEVICE16_32(a32, a16) a32 = (DVTARGETDEVICE*)MapSL(a16) #define MAP_PTR_DVTARGETDEVICE32_16(a16, a32) a16 = MapLS(a32) void WINAPI window_message32_16(const MSG *msg32, MSG16 *msg16); void WINAPI window_message16_32(const MSG16 *msg16, MSG *msg32); static void map_msg16_32(MSG *a32, const MSG16 *a16) { FIXME("unicode <-> ANSI\n"); window_message16_32(a16, a32); } static void map_msg32_16(MSG16 *a16, const MSG *a32) { FIXME("unicode <-> ANSI\n"); window_message32_16(a32, a16); } #define MAP_LPMSG16_32(a32, a16) \ if (a16 == 0)\ a32 = NULL;\ else\ map_msg16_32(a32 = (LPMSG)alloca(sizeof(MSG)), (const MSG16*)MapSL(a16)) #define MAP_LPMSG32_16(a16, a32) \ if (a32 == NULL)\ a16 = 0;\ else\ map_msg32_16((MSG16*)MapSL(a16 = MapLS(alloca(sizeof(MSG16)))), a32) #define MAP_LPCRECT16_32(a32, a16) \ if (a16 == 0)\ a32 = NULL;\ else\ map_rect16_32(a32 = (LPCRECT*)alloca(sizeof(RECT)), (RECT16*)MapSL(a16)) #define MAP_LPCBORDERWIDTHS16_32 MAP_LPCRECT16_32 #define MAP_LPCRECT32_16(a16, a32) \ if (a32 == NULL)\ a16 = 0;\ else\ map_rect32_16(MapSL(a16 = MapLS((const RECT16*)alloca(sizeof(RECT16)))), (RECT*)a32) #define MAP_LPCBORDERWIDTHS32_16 MAP_LPCRECT32_16 #define MAP_IViewObjectCallback16_32(a32, a16) \ if (a16)\ FIXME("16-bit callback func ptr-> 32-bit callback func ptr\n");\ a32 = 0 #define MAP_IViewObjectCallback32_16(a16, a32) \ if (a32)\ FIXME("32-bit callback func ptr -> 16-bit callback func ptr\n");\ a16 = 0 #define MAP_HOLEMENU16_32(a32,a16) a32 = HWND_32(a16);FIXME("MAP_HOLEMENU16_32\n"); #define MAP_HOLEMENU32_16(a16, a32) a16 = HWND_16(a32);FIXME("MAP_HOLEMENU32_16\n"); static inline void map_statdata32_16(STATDATA16* a16, const STATDATA *a32) { map_formatetc32_16(&a16->formatetc, &a32->formatetc); a16->advf = a32->advf; a16->pAdvSink = (IAdviseSink*)iface32_16(&IID_IAdviseSink, a32->pAdvSink); a16->dwConnection = a32->dwConnection; } static inline void map_statdata16_32(STATDATA* a32, const STATDATA16 *a16) { map_formatetc16_32(&a32->formatetc, &a16->formatetc); a32->advf = a16->advf; a32->pAdvSink = iface16_32(&IID_IAdviseSink, a16->pAdvSink); a32->dwConnection = a16->dwConnection; } #define MAP_STATDATA32_16(a16, a32) map_statdata32_16(&a16, &a32) #define MAP_STATDATA16_32(a32, a16) FIXME("\n"); typedef unsigned int TYP16_LPOLEINPLACEFRAMEINFO; typedef unsigned int TYP16_LPOLEMENUGROUPWIDTHS; typedef SEGPTR TYP16_LPCRECT, TYP16_LPDATAOBJECT, TYP16_LPCBORDERWIDTHS, TYP16_LPCRECTL; typedef struct TYP16_tagOLEVERB { LONG lVerb; /*LPOLESTR*/SEGPTR lpszVerbName; DWORD fuFlags; DWORD grfAttribs; } OLEVERB16; void map_oleverb16_32(OLEVERB* a32, const OLEVERB16 *a16); void map_oleverb32_16(OLEVERB16* a16, const OLEVERB *a32); #define MAP_STRUCT_tagOLEVERB16_32(a32, a16) map_oleverb16_32(&a32, &a16) #define MAP_STRUCT_tagOLEVERB32_16(a16, a32) map_oleverb32_16(&a16, &a32) #define MAP_PTR_DWORD16_32(a32, a16) a32 = (DWORD*)MapSL(a16) #define MAP_PTR_DWORD32_16(a16, a32) a16 = MapLS(a32) #define MAP_PTR_PTR_IFACE_IMoniker16_32(a32, a16) FIXME("\n") #define MAP_PTR_PTR_IFACE_IMoniker32_16(a16, a32) FIXME("\n") #define MAP_LPOLEINPLACEFRAMEINFO16_32(a32, a16) FIXME("\n") #define MAP_LPOLEINPLACEFRAMEINFO32_16(a16, a32) FIXME("\n") #define MAP_LPOLEMENUGROUPWIDTHS16_32(a32, a16) FIXME("\n") #define MAP_LPOLEMENUGROUPWIDTHS32_16(a16, a32) FIXME("\n") #define UNMAP_PTR_DWORD16_32 #define UNMAP_PTR_DWORD32_16 #define UNMAP_PTR_PTR_IFACE_IMoniker16_32 #define UNMAP_PTR_PTR_IFACE_IMoniker32_16 #define UNMAP_LPOLEINPLACEFRAMEINFO16_32 #define UNMAP_LPOLEINPLACEFRAMEINFO32_16 #define UNMAP_LPOLEMENUGROUPWIDTHS16_32 #define UNMAP_LPOLEMENUGROUPWIDTHS32_16 #define INMAP_PTR_BIND_OPTS16_32(a32, a16) FIXME("\n") #define INMAP_PTR_BIND_OPTS32_16(a16, a32) FIXME("\n") #define INMAP_PTR_PTR_IFACE_IMoniker16_32(a32, a16) a32 = (IMoniker*)iface16_32(&IID_IMoniker, *(SEGPTR*)MapSL(a16)) #define OUTMAP_PTR_IFACE_IMoniker32_16(a16, a32) a16 = iface32_16(&IID_IMoniker, a32) #define INMAP_PTR_PTR_IFACE_IMoniker32_16(a16, a32) FIXME("\n") #define INMAP_PTR_STGMEDIUM16_32(a32, a16) map_stgmedium16_32(&a32, (const STGMEDIUM16*)MapSL(a16)) #define INMAP_PTR_STGMEDIUM32_16(a16, a32) map_stgmedium32_16(&a16, a32) #define INMAP_LPOLEMENUGROUPWIDTHS16_32(a32, a16) *(LPOLEMENUGROUPWIDTHS)&a32 = *(LPOLEMENUGROUPWIDTHS)MapSL(a16) #define INMAP_LPOLEMENUGROUPWIDTHS32_16(a16, a32) *(LPOLEMENUGROUPWIDTHS)&a16 = *a32 #define INMAP_LPOLEINPLACEFRAMEINFO16_32(a32, a16) map_oleinplaceframeinfo16_32(&a32, (struct TYP16_tagOleInPlaceFrameInfo*)MapSL(a16)) #define INMAP_LPOLEINPLACEFRAMEINFO32_16(a16, a32) map_oleinplaceframeinfo32_16(&a16, a32) #define INMAP_PTR_DWORD16_32(a32, a16) a32 = *(DWORD*)MapSL(a16) #define INMAP_PTR_DWORD32_16(a16, a32) a16 = *a32 typedef HRESULT TYP16_HRESULT; #define MAP_HRESULT16_32(a32, a16) a32 = hresult16_32(a16) #define MAP_HRESULT32_16(a16, a32) a16 = hresult32_16(a32) #define MAP_ULONG16_32(a32, a16) a32 = a16 #define MAP_ULONG32_16(a16, a32) a16 = a32 #define MAP_BOOL16_32(a32, a16) a32 = a16 #define MAP_BOOL32_16(a16, a32) a16 = a32 #define MAP_DWORD16_32(a32, a16) a32 = a16 #define MAP_DWORD32_16(a16, a32) a16 = a32 #define MAP_INT16_32(a32, a16) a32 = (INT)(INT16)a16 #define MAP_INT32_16(a16, a32) a16 = (INT16)(INT)a32 #define MAP_LONG16_32(a32, a16) a32 = a16 #define MAP_LONG32_16(a16, a32) a16 = a32 #define MAP_WORD16_32(a32, a16) a32 = a16 #define MAP_WORD32_16(a16, a32) a16 = a32 #define UNMAP_BOOL16_32 #define UNMAP_BOOL32_16 #define UNMAP_DWORD16_32 #define UNMAP_DWORD32_16 #define UNMAP_ULONG16_32 #define UNMAP_ULONG32_16 #define UNMAP_LONG16_32 #define UNMAP_LONG32_16 #define UNMAP_WORD16_32 #define UNMAP_WORD32_16 typedef UINT16 TYP16_UINT; typedef LCID TYP16_LCID; typedef DISPID TYP16_DISPID; typedef MEMBERID TYP16_MEMBERID; typedef union tagBINDPTR16 { /*FUNCDESC **/SEGPTR lpfuncdesc; /*VARDESC **/SEGPTR lpvardesc; /*ITypeComp **/SEGPTR lptcomp; } BINDPTR16; typedef BINDPTR16 TYP16_BINDPTR; typedef WORD TYP16_DESCKIND; typedef WORD TYP16_INVOKEKIND; typedef SEGPTR TYP16_BSTR; typedef HREFTYPE TYP16_HREFTYPE; typedef SEGPTR TYP16_REFGUID; typedef DISPPARAMS16 TYP16_DISPPARAMS; typedef struct tagEXCEPINFO16 { unsigned short wCode; unsigned short wReserved; TYP16_BSTR bstrSource; TYP16_BSTR bstrDescription; TYP16_BSTR bstrHelpFile; unsigned long dwHelpContext; /* void* */SEGPTR pvReserved; SEGPTR pfnDeferredFillIn/* HRESULT (*pfnDeferredFillIn)(EXCEPINFO * pexcepinfo) */; SCODE scode; } EXCEPINFO16; typedef EXCEPINFO16 TYP16_EXCEPINFO; typedef INT16 TYP16_INT; typedef USHORT TYP16_USHORT; typedef BYTE TYP16_BYTE; typedef SEGPTR TYP16_PVOID; typedef SHORT TYP16_SHORT; typedef HFONT TYP16_HFONT; typedef HRGN TYP16_HRGN; typedef CY TYP16_CY; typedef WORD TYP16_TYPEKIND; typedef UINT16 TYP16_OLE_HANDLE; typedef OLE_XPOS_HIMETRIC TYP16_OLE_XPOS_HIMETRIC; typedef OLE_YPOS_HIMETRIC TYP16_OLE_YPOS_HIMETRIC; typedef OLE_XSIZE_HIMETRIC TYP16_OLE_XSIZE_HIMETRIC; typedef OLE_YSIZE_HIMETRIC TYP16_OLE_YSIZE_HIMETRIC; typedef POINTF TYP16_POINTF; typedef struct { /*size_t*/UINT16 cb; TYP16_LPOLESTR pszTitle; SIZE16 size; TYP16_LPOLESTR pszDocString; TYP16_LPOLESTR pszHelpFile; DWORD dwHelpContext; } PROPPAGEINFO16; typedef PROPPAGEINFO16 TYP16_PROPPAGEINFO; typedef struct { ULONG cb; HACCEL16 hAccel; USHORT cAccel; DWORD dwFlags; } CONTROLINFO16; typedef CONTROLINFO16 TYP16_CONTROLINFO; typedef struct { ULONG cElems; /*TYP16_LPOLESTR* */SEGPTR pElems; } CALPOLESTR16; typedef CALPOLESTR16 TYP16_CALPOLESTR; typedef struct { ULONG cElems; /* DWORD* */SEGPTR pElems; } CADWORD16; typedef CADWORD16 TYP16_CADWORD; typedef struct { long cbLicInfo; BOOL16 fRuntimeKeyAvail; BOOL16 fLicVerified; } LICINFO16; typedef LICINFO16 TYP16_LICINFO; typedef struct { ULONG cElems; /* GUID* */SEGPTR pElems; } CAUUID16; typedef CAUUID16 TYP16_CAUUID; typedef SEGPTR TYP16_LPCONNECTIONPOINT; typedef SEGPTR TYP16_LPSTREAM; typedef POINT16 TYP16_POINT; struct TYP16__RECTL { LONG left; LONG top; LONG right; LONG bottom; }; typedef TEXTMETRIC16 TYP16_TEXTMETRICOLE; typedef struct TYP16_tagCONNECTDATA { /*LPUNKNOWN*/SEGPTR pUnk; DWORD dwCookie; } CONNECTDATA16; typedef struct TYP16_tagTYPEDESC { union { /* VT_PTR */ /*struct TYP16_tagTYPEDESC* */SEGPTR lptdesc; /* VT_CARRAY */ /* struct TYP16_tagARRAYDESC* */ SEGPTR lpadesc; /* VT_USERDEFINED */ HREFTYPE hreftype; } DUMMYUNIONNAME; VARTYPE vt; } TYPEDESC16; typedef struct TYP16_tagIDLDESC { /* BSTR */SEGPTR bstrIDLInfo; unsigned short wIDLFlags; } IDLDESC16; typedef struct TYP16_tagELEMDESC { TYPEDESC16 tdesc; IDLDESC16 idldesc; } ELEMDESC16; typedef struct TYP16_tagFUNCDESC { MEMBERID memid; /* SCODE* */SEGPTR lprgscode; /* ELEMDESC* */SEGPTR lprgelemdescParam; /* FUNCKIND */WORD funckind; /* INVOKEKIND */WORD invkind; /* CALLCONV */WORD callconv; short cParams; short cParamsOpt; short oVft; short cScodes; ELEMDESC16 elemdescFunc; unsigned short wFuncFlags; } FUNCDESC16; typedef struct TYP16_tagARRAYDESC16 { TYPEDESC16 tdescElem; USHORT cDims; SAFEARRAYBOUND16 rgbounds[1]; } ARRAYDESC16; typedef struct TYP16_tagTYPEATTR { GUID guid; LCID lcid; unsigned long dwReserved; MEMBERID memidConstructor; MEMBERID memidDestructor; /* char * */SEGPTR lpstrSchema;/* reserved */ unsigned long cbSizeInstance; /* TYPEKIND */WORD typekind; unsigned short cFuncs; unsigned short cVars; unsigned short cImplTypes; unsigned short cbSizeVft; unsigned short cbAlignment; unsigned short wTypeFlags; unsigned short wMajorVerNum; unsigned short wMinorVerNum; TYPEDESC16 tdescAlias; IDLDESC16 idldescType; } TYPEATTR16; typedef struct TYP16_tagVARDESC { MEMBERID memid; /* char* */SEGPTR lpstrSchema; union { /* VAR_PERINSTANCE */ unsigned long oInst; /* VAR_CONST */ /* VARIANT* */SEGPTR lpvarValue; } DUMMYUNIONNAME; ELEMDESC16 elemdescVar; unsigned short wVarFlags; /* VARKIND */WORD varkind; } VARDESC16; #define INMAP_LPOLESTR16_32(a32, a16) FIXME("INMAP_LPOLESTR16_32\n") #define INMAP_LPOLESTR32_16(a16, a32) FIXME("INMAP_LPOLESTR32_16\n") #define INMAP_LPRECT16_32(a32, a16) FIXME("INMAP_LPRECT16_32\n") #define INMAP_LPRECT32_16(a16, a32) FIXME("INMAP_LPRECT32_16\n") void map_dispparams32_16(DISPPARAMS16 *a16, const DISPPARAMS *a32); void map_dispparams16_32(DISPPARAMS *a32, const DISPPARAMS16 *a16); #define INMAP_PTR_DISPPARAMS16_32(a32, a16) map_dispparams16_32(&a32, (DISPPARAMS16*)MapSL(a16)) #define INMAP_PTR_DISPPARAMS32_16(a16, a32) map_dispparams32_16(&a16, a32) #define INMAP_PTR_POINTF16_32(a32, a16) FIXME("INMAP_PTR_POINTF16_32\n") #define INMAP_PTR_POINTF32_16(a16, a32) FIXME("INMAP_PTR_POINTF32_16\n") #define INMAP_PTR_POINTL16_32(a32, a16) FIXME("INMAP_PTR_POINTL16_32\n") #define INMAP_PTR_POINTL32_16(a16, a32) FIXME("INMAP_PTR_POINTL32_16\n") #define INMAP_PTR_USHORT16_32(a32, a16) args32_pcFound = *(USHORT*)MapSL(args16_pcFound) #define INMAP_PTR_USHORT32_16(a16, a32) FIXME("INMAP_PTR_USHORT32_16\n") #define INMAP_PTR_VARIANT16_32(a32, a16) FIXME("INMAP_PTR_VARIANT16_32\n") #define INMAP_PTR_VARIANT32_16(a16, a32) FIXME("INMAP_PTR_VARIANT32_16\n") #define MAP_BINDPTR16_32(a32, a16) FIXME("MAP_BINDPTR16_32\n") #define MAP_BINDPTR32_16(a16, a32) FIXME("MAP_BINDPTR32_16\n") void map_bstr16_32(BSTR *a32, const SEGPTR *a16); #define MAP_BSTR16_32(a32, a16) map_bstr16_32(&a32, &a16) void map_bstr32_16(SEGPTR *a16, const BSTR *a32); #define MAP_BSTR32_16(a16, a32) map_bstr32_16(&a16, &a32) #define MAP_CADWORD16_32(a32, a16) FIXME("MAP_CADWORD16_32\n") #define MAP_CADWORD32_16(a16, a32) FIXME("MAP_CADWORD32_16\n") #define MAP_CALPOLESTR16_32(a32, a16) FIXME("MAP_CALPOLESTR16_32\n") #define MAP_CALPOLESTR32_16(a16, a32) FIXME("MAP_CALPOLESTR32_16\n") #define MAP_CAUUID16_32(a32, a16) FIXME("MAP_CAUUID16_32\n") #define MAP_CAUUID32_16(a16, a32) FIXME("MAP_CAUUID32_16\n") #define MAP_CONTROLINFO16_32(a32, a16) FIXME("MAP_CONTROLINFO16_32\n") #define MAP_CONTROLINFO32_16(a16, a32) FIXME("MAP_CONTROLINFO32_16\n") #define MAP_CY16_32(a32, a16) FIXME("MAP_CY16_32\n") #define MAP_CY32_16(a16, a32) FIXME("MAP_CY32_16\n") #define MAP_DESCKIND16_32(a32, a16) a32 = a16 #define MAP_DESCKIND32_16(a16, a32) a16 = a32 #define MAP_DISPID16_32(a32, a16) a32 = a16 #define MAP_DISPID32_16(a16, a32) a16 = a32 #define MAP_DISPPARAMS16_32(a32, a16) map_dispparams16_32(&a32, &a16) #define MAP_DISPPARAMS32_16(a16, a32) map_dispparams32_16(&a16, &a32) void map_excepinfo16_32(EXCEPINFO *a32, const EXCEPINFO16 *a16); void map_excepinfo32_16(EXCEPINFO16 *a16, const EXCEPINFO *a32); #define MAP_EXCEPINFO16_32(a32, a16) map_excepinfo16_32(&a32, &a16) #define MAP_EXCEPINFO32_16(a16, a32) map_excepinfo32_16(&a16, &a32) #define MAP_HFONT16_32(a32, a16) FIXME("MAP_HFONT16_32\n") #define MAP_HFONT32_16(a16, a32) FIXME("MAP_HFONT32_16\n") #define MAP_HREFTYPE16_32(a32, a16) a32 = a16 #define MAP_HREFTYPE32_16(a16, a32) a16 = a32 #define MAP_HRGN16_32(a32, a16) FIXME("MAP_HRGN16_32\n") #define MAP_HRGN32_16(a16, a32) FIXME("MAP_HRGN32_16\n") #define MAP_IID16_32(a32, a16) FIXME("MAP_IID16_32\n") #define MAP_IID32_16(a16, a32) FIXME("MAP_IID32_16\n") #define MAP_INVOKEKIND16_32(a32, a16) a32 = a16 #define MAP_INVOKEKIND32_16(a16, a32) a16 = a32 #define MAP_LCID16_32(a32, a16) a32 = a16 #define MAP_LCID32_16(a16, a32) a16 = a32 #define MAP_LICINFO16_32(a32, a16) FIXME("MAP_LICINFO16_32\n") #define MAP_LICINFO32_16(a16, a32) FIXME("MAP_LICINFO32_16\n") #define MAP_LPOLESTR_PTR16_32(a32, a16) FIXME("MAP_LPOLESTR_PTR16_32\n") #define MAP_LPOLESTR_PTR32_16(a16, a32) FIXME("MAP_LPOLESTR_PTR32_16\n") #define MAP_MEMBERID16_32(a32, a16) a32 = a16 #define MAP_MEMBERID32_16(a16, a32) a16 = a32 #define MAP_OLECHAR16_32(a32, a16) FIXME("MAP_OLECHAR16_32\n") #define MAP_OLECHAR32_16(a16, a32) FIXME("MAP_OLECHAR32_16\n") #define MAP_OLE_HANDLE16_32(a32, a16) FIXME("MAP_OLE_HANDLE16_32\n") #define MAP_OLE_HANDLE32_16(a16, a32) FIXME("MAP_OLE_HANDLE32_16\n") #define MAP_OLE_XPOS_HIMETRIC16_32(a32, a16) FIXME("MAP_OLE_XPOS_HIMETRIC16_32\n") #define MAP_OLE_XPOS_HIMETRIC32_16(a16, a32) FIXME("MAP_OLE_XPOS_HIMETRIC32_16\n") #define MAP_OLE_XSIZE_HIMETRIC16_32(a32, a16) FIXME("MAP_OLE_XSIZE_HIMETRIC16_32\n") #define MAP_OLE_XSIZE_HIMETRIC32_16(a16, a32) FIXME("MAP_OLE_XSIZE_HIMETRIC32_16\n") #define MAP_OLE_YPOS_HIMETRIC16_32(a32, a16) FIXME("MAP_OLE_YPOS_HIMETRIC16_32\n") #define MAP_OLE_YPOS_HIMETRIC32_16(a16, a32) FIXME("MAP_OLE_YPOS_HIMETRIC32_16\n") #define MAP_OLE_YSIZE_HIMETRIC16_32(a32, a16) FIXME("MAP_OLE_YSIZE_HIMETRIC16_32\n") #define MAP_OLE_YSIZE_HIMETRIC32_16(a16, a32) FIXME("MAP_OLE_YSIZE_HIMETRIC32_16\n") #define MAP_POINT16_32(a32, a16) FIXME("MAP_POINT16_32\n") #define MAP_POINT32_16(a16, a32) FIXME("MAP_POINT32_16\n") #define MAP_POINTF16_32(a32, a16) FIXME("MAP_POINTF16_32\n") #define MAP_POINTF32_16(a16, a32) FIXME("MAP_POINTF32_16\n") #define MAP_PROPPAGEINFO16_32(a32, a16) FIXME("MAP_PROPPAGEINFO16_32\n") #define MAP_PROPPAGEINFO32_16(a16, a32) FIXME("MAP_PROPPAGEINFO32_16\n") #define MAP_PTR_DVEXTENTINFO16_32(a32, a16) FIXME("MAP_PTR_DVEXTENTINFO16_32\n") #define MAP_PTR_DVEXTENTINFO32_16(a16, a32) FIXME("MAP_PTR_DVEXTENTINFO32_16\n") #define MAP_PTR_EXCEPINFO16_32(a32, a16) FIXME("MAP_PTR_EXCEPINFO16_32\n") #define MAP_PTR_EXCEPINFO32_16(a16, a32) FIXME("MAP_PTR_EXCEPINFO32_16\n") FUNCDESC *map_funcdesc32(const FUNCDESC16 *a16); FUNCDESC16 *map_funcdesc16(const FUNCDESC *a32); /* GetFuncDesc -> ReleaseFuncDesc */ #define MAP_PTR_FUNCDESC16_32(a32, a16) a32 = map_funcdesc32((FUNCDESC16*)MapSL(a16)) #define MAP_PTR_FUNCDESC32_16(a16, a32) a16 = MapLS(map_funcdesc16(a32)) #define MAP_PTR_HREFTYPE16_32(a32, a16) a32 = MapSL(a16) #define MAP_PTR_HREFTYPE32_16(a16, a32) a16 = MapLS(a32) #define MAP_PTR_IDLDESC16_32(a32, a16) FIXME("MAP_PTR_IDLDESC16_32\n") #define MAP_PTR_IDLDESC32_16(a16, a32) FIXME("MAP_PTR_IDLDESC32_16\n") #define MAP_PTR_IFACE_IUnknown_PTR16_32(a32, a16) FIXME("MAP_PTR_IFACE_IUnknown_PTR16_32\n") #define MAP_PTR_IFACE_IUnknown_PTR32_16(a16, a32) FIXME("MAP_PTR_IFACE_IUnknown_PTR32_16\n") #define MAP_PTR_MSG16_32(a32, a16) FIXME("MAP_PTR_MSG16_32\n") #define MAP_PTR_MSG32_16(a16, a32) FIXME("MAP_PTR_MSG32_16\n") typedef struct { GUID guid; LCID lcid; /*SYSKIND*/WORD syskind; unsigned short wMajorVerNum; unsigned short wMinorVerNum; unsigned short wLibFlags; } TLIBATTR16; void map_tlibattr16_32(TLIBATTR *a32, const TLIBATTR16 *a16); #define MAP_PTR_TLIBATTR16_32(a32, a16) \ {\ a32 = (TLIBATTR*)HeapAlloc(GetProcessHeap(), 0, sizeof(TLIBATTR)); /* leak */\ map_tlibattr16_32(a32, (TLIBATTR16*)MapSL(a16));\ } void map_tlibattr32_16(TLIBATTR16 *a16, const TLIBATTR *a32); #define MAP_PTR_TLIBATTR32_16(a16, a32) \ {\ TLIBATTR16 *p16 = (TLIBATTR16*)HeapAlloc(GetProcessHeap(), 0, sizeof(TLIBATTR16)); /* leak */\ map_tlibattr32_16(p16, a32);\ a16 = MapLS(p16);\ } #define MAP_PTR_TYPEATTR16_32(a32, a16) FIXME("MAP_PTR_TYPEATTR16_32\n") TYPEATTR16 *map_typeattr32_16(const TYPEATTR *a32); #define MAP_PTR_TYPEATTR32_16(a16, a32) a16 = MapLS(map_typeattr32_16(a32)) #define MAP_PTR_TYPEDESC16_32(a32, a16) FIXME("MAP_PTR_TYPEDESC16_32\n") #define MAP_PTR_TYPEDESC32_16(a16, a32) FIXME("MAP_PTR_TYPEDESC32_16\n") VARDESC *map_vardesc32(const VARDESC16 *a16); #define MAP_PTR_VARDESC16_32(a32, a16) a32 = map_vardesc32(a16) VARDESC16 *map_vardesc16(const VARDESC *a32); #define MAP_PTR_VARDESC32_16(a16, a32) a16 = MapLS(map_vardesc16(a32)) #define MAP_PTR_VARIANT16_32(a32, a16) FIXME("MAP_PTR_VARIANT16_32\n") #define MAP_PTR_VARIANT32_16(a16, a32) FIXME("MAP_PTR_VARIANT32_16\n") #define MAP_PVOID16_32(a32, a16) MAP_PTR_VOID16_32(a32, a16) #define MAP_PVOID32_16(a16, a32) MAP_PTR_VOID32_16(a16, a32) #define MAP_REFGUID16_32(a32, a16) *(GUID**)&a32 = (GUID*)MapSL(a16) #define MAP_REFGUID32_16(a16, a32) a16 = MapLS(a32) #define MAP_SHORT16_32(a32, a16) a32 = (SHORT)a16 #define MAP_SHORT32_16(a16, a32) a16 = a32 #define MAP_STRUCT__RECTL16_32(a32, a16) FIXME("MAP_STRUCT__RECTL16_32\n") #define MAP_STRUCT__RECTL32_16(a16, a32) FIXME("MAP_STRUCT__RECTL32_16\n") #define MAP_STRUCT_tagCONNECTDATA16_32(a32, a16) FIXME("MAP_STRUCT_tagCONNECTDATA16_32\n") #define MAP_STRUCT_tagCONNECTDATA32_16(a16, a32) FIXME("MAP_STRUCT_tagCONNECTDATA32_16\n") #define MAP_TEXTMETRICOLE16_32(a32, a16) FIXME("MAP_TEXTMETRICOLE16_32\n") #define MAP_TEXTMETRICOLE32_16(a16, a32) FIXME("MAP_TEXTMETRICOLE32_16\n") #define MAP_TYPEKIND16_32(a32, a16) a32 = a16 #define MAP_TYPEKIND32_16(a16, a32) a16 = a32 #define MAP_UINT16_32(a32, a16) a32 = a16 #define MAP_UINT32_16(a16, a32) a16 = a32 #define MAP_USHORT16_32(a32, a16) a32 = a16 #define MAP_USHORT32_16(a16, a32) a16 = a32 void map_variant16_32(VARIANT *dst, const VARIANT16 *src); void map_variant32_16(VARIANT16 *dst, const VARIANT *src); #define MAP_VARIANT16_32(a32, a16) map_variant16_32(&a32, &a16) #define MAP_VARIANT32_16(a16, a32) map_variant32_16(&a16, &a32) #define UNMAP_BSTR16_32(a32, a16) FIXME("UNMAP_BSTR16_32\n") #define UNMAP_BSTR32_16(a16, a32) FIXME("UNMAP_BSTR32_16\n") #define UNMAP_CY16_32(a32, a16) #define UNMAP_CY32_16(a16, a32) #define UNMAP_DISPID16_32(a32, a16) #define UNMAP_DISPID32_16(a16, a32) #define UNMAP_HFONT16_32(a32, a16) #define UNMAP_HFONT32_16(a16, a32) #define UNMAP_HREFTYPE16_32(a32, a16) #define UNMAP_HREFTYPE32_16(a16, a32) #define UNMAP_HRGN16_32(a32, a16) #define UNMAP_HRGN32_16(a16, a32) #define UNMAP_INT16_32(a32, a16) #define UNMAP_INT32_16(a16, a32) #define UNMAP_INVOKEKIND16_32(a32, a16) #define UNMAP_INVOKEKIND32_16(a16, a32) #define UNMAP_LCID16_32(a32, a16) #define UNMAP_LCID32_16(a16, a32) #define UNMAP_LPOLESTR_PTR16_32(a32, a16) FIXME("UNMAP_LPOLESTR_PTR16_32\n") #define UNMAP_LPOLESTR_PTR32_16(a16, a32) FIXME("UNMAP_LPOLESTR_PTR32_16\n") #define UNMAP_LPRECT16_32(a32, a16) FIXME("UNMAP_LPRECT16_32\n") #define UNMAP_LPRECT32_16(a16, a32) FIXME("UNMAP_LPRECT32_16\n") #define UNMAP_MEMBERID16_32(a32, a16) #define UNMAP_MEMBERID32_16(a16, a32) #define UNMAP_OLE_HANDLE16_32(a32, a16) FIXME("UNMAP_OLE_HANDLE16_32\n") #define UNMAP_OLE_HANDLE32_16(a16, a32) FIXME("UNMAP_OLE_HANDLE32_16\n") #define UNMAP_OLE_XPOS_HIMETRIC16_32(a32, a16) FIXME("UNMAP_OLE_XPOS_HIMETRIC16_32\n") #define UNMAP_OLE_XPOS_HIMETRIC32_16(a16, a32) FIXME("UNMAP_OLE_XPOS_HIMETRIC32_16\n") #define UNMAP_OLE_XSIZE_HIMETRIC16_32(a32, a16) FIXME("UNMAP_OLE_XSIZE_HIMETRIC16_32\n") #define UNMAP_OLE_XSIZE_HIMETRIC32_16(a16, a32) FIXME("UNMAP_OLE_XSIZE_HIMETRIC32_16\n") #define UNMAP_OLE_YPOS_HIMETRIC16_32(a32, a16) FIXME("UNMAP_OLE_YPOS_HIMETRIC16_32\n") #define UNMAP_OLE_YPOS_HIMETRIC32_16(a16, a32) FIXME("UNMAP_OLE_YPOS_HIMETRIC32_16\n") #define UNMAP_OLE_YSIZE_HIMETRIC16_32(a32, a16) FIXME("UNMAP_OLE_YSIZE_HIMETRIC16_32\n") #define UNMAP_OLE_YSIZE_HIMETRIC32_16(a16, a32) FIXME("UNMAP_OLE_YSIZE_HIMETRIC32_16\n") #define UNMAP_POINT16_32(a32, a16) FIXME("UNMAP_POINT16_32\n") #define UNMAP_POINT32_16(a16, a32) FIXME("UNMAP_POINT32_16\n") #define UNMAP_PTR_DISPPARAMS16_32(a32, a16) FIXME("UNMAP_PTR_DISPPARAMS16_32\n") #define UNMAP_PTR_DISPPARAMS32_16(a16, a32) FIXME("UNMAP_PTR_DISPPARAMS32_16\n") #define UNMAP_PTR_DVEXTENTINFO16_32(a32, a16) FIXME("UNMAP_PTR_DVEXTENTINFO16_32\n") #define UNMAP_PTR_DVEXTENTINFO32_16(a16, a32) FIXME("UNMAP_PTR_DVEXTENTINFO32_16\n") #define UNMAP_PTR_EXCEPINFO16_32(a32, a16) FIXME("UNMAP_PTR_EXCEPINFO16_32\n") #define UNMAP_PTR_EXCEPINFO32_16(a16, a32) FIXME("UNMAP_PTR_EXCEPINFO32_16\n") #define UNMAP_PTR_FUNCDESC16_32(a32, a16) FIXME("UNMAP_PTR_FUNCDESC16_32\n") #define UNMAP_PTR_FUNCDESC32_16(a16, a32) FIXME("UNMAP_PTR_FUNCDESC32_16\n") #define UNMAP_PTR_HREFTYPE16_32(a32, a16) #define UNMAP_PTR_HREFTYPE32_16(a16, a32) #define UNMAP_PTR_IDLDESC16_32(a32, a16) FIXME("UNMAP_PTR_IDLDESC16_32\n") #define UNMAP_PTR_IDLDESC32_16(a16, a32) FIXME("UNMAP_PTR_IDLDESC32_16\n") #define UNMAP_PTR_IFACE_IUnknown_PTR16_32(a32, a16) FIXME("UNMAP_PTR_IFACE_IUnknown_PTR16_32\n") #define UNMAP_PTR_IFACE_IUnknown_PTR32_16(a16, a32) FIXME("UNMAP_PTR_IFACE_IUnknown_PTR32_16\n") #define UNMAP_PTR_MSG16_32(a32, a16) FIXME("UNMAP_PTR_MSG16_32\n") #define UNMAP_PTR_MSG32_16(a16, a32) FIXME("UNMAP_PTR_MSG32_16\n") #define UNMAP_PTR_POINTF16_32(a32, a16) FIXME("UNMAP_PTR_POINTF16_32\n") #define UNMAP_PTR_POINTF32_16(a16, a32) FIXME("UNMAP_PTR_POINTF32_16\n") #define UNMAP_PTR_POINTL16_32(a32, a16) FIXME("UNMAP_PTR_POINTL16_32\n") #define UNMAP_PTR_POINTL32_16(a16, a32) FIXME("UNMAP_PTR_POINTL32_16\n") #define UNMAP_PTR_TLIBATTR16_32(a32, a16) #define UNMAP_PTR_TLIBATTR32_16(a16, a32) #define UNMAP_PTR_TYPEATTR16_32(a32, a16) FIXME("UNMAP_PTR_TYPEATTR16_32\n") #define UNMAP_PTR_TYPEATTR32_16(a16, a32) FIXME("UNMAP_PTR_TYPEATTR32_16\n") #define UNMAP_PTR_TYPEDESC16_32(a32, a16) FIXME("UNMAP_PTR_TYPEDESC16_32\n") #define UNMAP_PTR_TYPEDESC32_16(a16, a32) FIXME("UNMAP_PTR_TYPEDESC32_16\n") #define UNMAP_PTR_USHORT16_32(a32, a16) FIXME("UNMAP_PTR_USHORT16_32\n") #define UNMAP_PTR_USHORT32_16(a16, a32) FIXME("UNMAP_PTR_USHORT32_16\n") #define UNMAP_PTR_VARDESC16_32(a32, a16) FIXME("UNMAP_PTR_VARDESC16_32\n") #define UNMAP_PTR_VARDESC32_16(a16, a32) FIXME("UNMAP_PTR_VARDESC32_16\n") #define UNMAP_PTR_VARIANT16_32(a32, a16) FIXME("UNMAP_PTR_VARIANT16_32\n") #define UNMAP_PTR_VARIANT32_16(a16, a32) FIXME("UNMAP_PTR_VARIANT32_16\n") #define UNMAP_PVOID16_32(a32, a16) #define UNMAP_PVOID32_16(a16, a32) #define UNMAP_REFGUID16_32(a32, a16) #define UNMAP_REFGUID32_16(a16, a32) #define UNMAP_SHORT16_32(a32, a16) FIXME("UNMAP_SHORT16_32\n") #define UNMAP_SHORT32_16(a16, a32) FIXME("UNMAP_SHORT32_16\n") #define UNMAP_TYPEKIND16_32(a32, a16) FIXME("UNMAP_TYPEKIND16_32\n") #define UNMAP_TYPEKIND32_16(a16, a32) FIXME("UNMAP_TYPEKIND32_16\n") #define UNMAP_UINT16_32(a32, a16) #define UNMAP_UINT32_16(a16, a32) #define OUTMAP_BIND_OPTS16_32 MAP_BIND_OPTS16_32 #define OUTMAP_BIND_OPTS32_16 MAP_BIND_OPTS32_16 #define OUTMAP_DISPPARAMS16_32 MAP_DISPPARAMS16_32 #define OUTMAP_DISPPARAMS32_16 MAP_DISPPARAMS32_16 #define OUTMAP_DWORD16_32 MAP_DWORD16_32 #define OUTMAP_DWORD32_16 MAP_DWORD32_16 #define OUTMAP_OLECHAR16_32 MAP_OLECHAR16_32 #define OUTMAP_OLECHAR32_16 MAP_OLECHAR32_16 #define OUTMAP_POINTF16_32 MAP_POINTF16_32 #define OUTMAP_POINTF32_16 MAP_POINTF32_16 #define OUTMAP_POINTL16_32 MAP_POINTL16_32 #define OUTMAP_POINTL32_16 MAP_POINTL32_16 #define OUTMAP_STGMEDIUM16_32 MAP_STGMEDIUM16_32 #define OUTMAP_STGMEDIUM32_16 MAP_STGMEDIUM32_16 #define OUTMAP_STRUCT_tagOleInPlaceFrameInfo16_32 MAP_STRUCT_tagOleInPlaceFrameInfo16_32 #define OUTMAP_STRUCT_tagOleInPlaceFrameInfo32_16 MAP_STRUCT_tagOleInPlaceFrameInfo32_16 #define OUTMAP_STRUCT_tagOleMenuGroupWidths16_32 MAP_STRUCT_tagOleMenuGroupWidths16_32 #define OUTMAP_STRUCT_tagOleMenuGroupWidths32_16 MAP_STRUCT_tagOleMenuGroupWidths32_16 #define OUTMAP_STRUCT_tagRECT16_32 MAP_STRUCT_tagRECT16_32 #define OUTMAP_STRUCT_tagRECT32_16 MAP_STRUCT_tagRECT32_16 #define OUTMAP_USHORT16_32 MAP_USHORT16_32 #define OUTMAP_USHORT32_16 MAP_USHORT32_16 #define OUTMAP_VARIANT16_32 MAP_VARIANT16_32 #define OUTMAP_VARIANT32_16 MAP_VARIANT32_16 #define IFS3216_OVERWRITE_IOleInPlaceSiteWindowless_OnDefWindowMessage HRESULT STDMETHODCALLTYPE IOleInPlaceSiteWindowless_32_16_OnDefWindowMessage(IOleInPlaceSiteWindowless *This, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult); #define IFS1632_OVERWRITE_IOleInPlaceSiteWindowless_OnDefWindowMessage HRESULT CDECL IOleInPlaceSiteWindowless_16_32_OnDefWindowMessage(SEGPTR This, DWORD args16_msg, DWORD args16_wParam, DWORD args16_lParam, SEGPTR args16_plResult); #define IFS3216_OVERWRITE_IOleInPlaceObjectWindowless_OnWindowMessage HRESULT STDMETHODCALLTYPE IOleInPlaceObjectWindowless_32_16_OnWindowMessage(IOleInPlaceObjectWindowless *This, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult); #define IFS1632_OVERWRITE_IOleInPlaceObjectWindowless_OnWindowMessage HRESULT CDECL IOleInPlaceObjectWindowless_16_32_OnWindowMessage(SEGPTR This, DWORD args16_msg, DWORD args16_wParam, DWORD args16_lParam, SEGPTR args16_plResult); #define IFS1632_OVERWRITE_ISimpleFrameSite_PreMessageFilter HRESULT 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); #define IFS3216_OVERWRITE_ISimpleFrameSite_PreMessageFilter HRESULT STDMETHODCALLTYPE ISimpleFrameSite_32_16_PreMessageFilter(ISimpleFrameSite *This, HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *plResult, DWORD *pdwCookie); #define IFS1632_OVERWRITE_ISimpleFrameSite_PostMessageFilter HRESULT 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); #define IFS3216_OVERWRITE_ISimpleFrameSite_PostMessageFilter HRESULT STDMETHODCALLTYPE ISimpleFrameSite_32_16_PostMessageFilter(ISimpleFrameSite *This, HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *plResult, DWORD dwCookie); #include "../ole2disp/ole2disp.h" typedef VARIANT16 TYP16_VARIANT; typedef OLECHAR16 TYP16_OLECHAR; #include #define IFS1632_OVERWRITE_ITypeLib_IsName HRESULT CDECL ITypeLib_16_32_IsName(SEGPTR This, SEGPTR args16_szNameBuf, DWORD args16_lHashVal, SEGPTR args16_pfName); #define IFS3216_OVERWRITE_ITypeLib_IsName HRESULT STDMETHODCALLTYPE ITypeLib_32_16_IsName(ITypeLib *This, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName); #define IFS1632_OVERWRITE_ITypeInfo_ReleaseFuncDesc void CDECL ITypeInfo_16_32_ReleaseFuncDesc(SEGPTR This, SEGPTR args16_pFuncDesc); #define IFS3216_OVERWRITE_ITypeInfo_ReleaseFuncDesc void STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseFuncDesc(ITypeInfo *This, FUNCDESC *pFuncDesc); #define IFS1632_OVERWRITE_ITypeInfo_ReleaseTypeAttr void CDECL ITypeInfo_16_32_ReleaseTypeAttr(SEGPTR This, SEGPTR args16_pTypeAttr); #define IFS3216_OVERWRITE_ITypeInfo_ReleaseTypeAttr void STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseTypeAttr(ITypeInfo *This, TYPEATTR *pTypeAttr); #define IFS1632_OVERWRITE_ITypeComp_Bind HRESULT 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); #define IFS3216_OVERWRITE_ITypeComp_Bind HRESULT STDMETHODCALLTYPE ITypeComp_32_16_Bind(ITypeComp *This, LPOLESTR szName, ULONG lHashVal, WORD wFlags, ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr); #define IFS1632_OVERWRITE_ITypeInfo_ReleaseVarDesc void CDECL ITypeInfo_16_32_ReleaseVarDesc(SEGPTR This, SEGPTR args16_pVarDesc); #define IFS3216_OVERWRITE_ITypeInfo_ReleaseVarDesc void STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseVarDesc(ITypeInfo *This, VARDESC *pVarDesc); typedef struct tagSIZEL { LONG cx; LONG cy; }; #define TYP16_tagSIZEL tagSIZEL #define MAP_STRUCT_tagSIZEL16_32(a32, a16) *(SIZEL*)&a32 = *(SIZEL*)&a16 #define MAP_STRUCT_tagSIZEL32_16(a16, a32) *(SIZEL*)&a16 = *(SIZEL*)&a32 typedef struct { DWORD(CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD); DWORD(CALLBACK* Put)(LPOLESTREAM, const void FAR*, DWORD); } OLESTREAM32Vtbl; typedef struct { OLESTREAM32Vtbl *lpVtbl; } OLESTREAM32; #define IFS3216_OVERWRITE_OLESTREAM32_Get DWORD __stdcall OLESTREAM32_32_16_Get(OLESTREAM32 *This, void *lpszBuf, DWORD cbbuf); #define IFS3216_OVERWRITE_OLESTREAM32_Put DWORD __stdcall OLESTREAM32_32_16_Put(OLESTREAM32 *This, const void *lpszBuf, DWORD cbbuf); #define IFS1632_OVERWRITE_ITypeInfo_AddressOfMember HRESULT CDECL ITypeInfo_16_32_AddressOfMember(SEGPTR This, DWORD args16_memid, WORD args16_invKind, SEGPTR args16_ppv); #define IFS1632_OVERWRITE_ITypeInfo_Invoke HRESULT 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); #define IFS1632_OVERWRITE_ITypeLib_FindName HRESULT CDECL ITypeLib_16_32_FindName(SEGPTR This, SEGPTR args16_szNameBuf, DWORD args16_lHashVal, SEGPTR args16_ppTInfo, SEGPTR args16_rgMemId, SEGPTR args16_pcFound); #define IFS3216_OVERWRITE_IMessageFilter_HandleInComingCall DWORD STDMETHODCALLTYPE IMessageFilter_32_16_HandleInComingCall(IMessageFilter *This, DWORD dwCallType,HTASK htaskCaller,DWORD dwTickCount,LPINTERFACEINFO lpInterfaceInfo); #define IFS1632_OVERWRITE_IDataObject_DAdvise HRESULT CDECL IDataObject_16_32_DAdvise(SEGPTR This, SEGPTR args16_pformatetc, DWORD args16_advf, SEGPTR args16_pAdvSink, SEGPTR args16_pdwConnection); #endif ================================================ FILE: ole2/memlockbytes.c ================================================ /* * Global memory implementation of ILockBytes. * * Copyright 1999 Thuy Nguyen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #define NONAMELESSUNION #undef DUMMYSTRUCTNAME #undef DUMMYUNIONNAME #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "winuser.h" #include "objbase.h" #include "ole2.h" #include "winerror.h" #include "ifs.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); /****************************************************************************** * HGLOBALLockBytesImpl16 definition. * * This class implements the ILockBytes interface and represents a byte array * object supported by an HGLOBAL pointer. */ struct HGLOBALLockBytesImpl16 { ILockBytes16 ILockBytes16_iface; LONG ref; /* * Support for the LockBytes object */ HGLOBAL16 supportHandle; /* * This flag is TRUE if the HGLOBAL is destroyed when the object * is finally released. */ BOOL deleteOnRelease; /* * Helper variable that contains the size of the byte array */ ULARGE_INTEGER byteArraySize; }; typedef struct HGLOBALLockBytesImpl16 HGLOBALLockBytesImpl16; /****************************************************************************** * * HGLOBALLockBytesImpl16 implementation * */ static inline HGLOBALLockBytesImpl16 *impl_from_ILockBytes16(ILockBytes16 *iface) { return CONTAINING_RECORD(iface, HGLOBALLockBytesImpl16, ILockBytes16_iface); } static SEGPTR msegvt16; /****************************************************************************** * This is the constructor for the HGLOBALLockBytesImpl16 class. * * Params: * hGlobal - Handle that will support the stream. can be NULL. * fDeleteOnRelease - Flag set to TRUE if the HGLOBAL16 will be released * when the IStream object is destroyed. */ static HGLOBALLockBytesImpl16* HGLOBALLockBytesImpl16_Construct(HGLOBAL16 hGlobal, BOOL16 fDeleteOnRelease) { HGLOBALLockBytesImpl16* newLockBytes; static ILockBytes16Vtbl vt16; TRACE("(%x,%d)\n",hGlobal,fDeleteOnRelease); newLockBytes = HeapAlloc(GetProcessHeap(), 0, sizeof(HGLOBALLockBytesImpl16)); if (newLockBytes == NULL) return NULL; /* * Set up the virtual function table and reference count. */ if (!msegvt16) { HMODULE16 hcomp = GetModuleHandle16("OLE2"); #define VTENT(x) vt16.x = (void*)GetProcAddress16(hcomp,"HGLOBALLockBytesImpl16_"#x);assert(vt16.x) VTENT(QueryInterface); VTENT(AddRef); VTENT(Release); VTENT(ReadAt); VTENT(WriteAt); VTENT(Flush); VTENT(SetSize); VTENT(LockRegion); VTENT(UnlockRegion); VTENT(Stat); #undef VTENT msegvt16 = MapLS( &vt16 ); } newLockBytes->ILockBytes16_iface.lpVtbl = (const ILockBytes16Vtbl*)msegvt16; newLockBytes->ref = 0; /* * Initialize the support. */ newLockBytes->supportHandle = hGlobal; newLockBytes->deleteOnRelease = fDeleteOnRelease; /* * This method will allocate a handle if one is not supplied. */ if (newLockBytes->supportHandle == 0) newLockBytes->supportHandle = GlobalAlloc16(GMEM_MOVEABLE | GMEM_NODISCARD, 0); /* * Initialize the size of the array to the size of the handle. */ newLockBytes->byteArraySize.u.HighPart = 0; newLockBytes->byteArraySize.u.LowPart = GlobalSize16( newLockBytes->supportHandle); return (HGLOBALLockBytesImpl16*)MapLS(newLockBytes); } /****************************************************************************** * This is the destructor of the HGLOBALStreamImpl class. * * This method will clean-up all the resources used-up by the given * HGLOBALLockBytesImpl16 class. The pointer passed-in to this function will be * freed and will not be valid anymore. */ static void HGLOBALLockBytesImpl16_Destroy(HGLOBALLockBytesImpl16* This) { TRACE("()\n"); /* * Release the HGlobal if the constructor asked for that. */ if (This->deleteOnRelease) { GlobalFree16(This->supportHandle); This->supportHandle = 0; } /* * Finally, free the memory used-up by the class. */ HeapFree(GetProcessHeap(), 0, This); } /****************************************************************************** * This implements the IUnknown method AddRef for this * class */ ULONG CDECL HGLOBALLockBytesImpl16_AddRef(ILockBytes16* iface) { HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface); TRACE("(%p)\n",This); return InterlockedIncrement(&This->ref); } /****************************************************************************** * This implements the IUnknown method QueryInterface for this * class */ HRESULT CDECL HGLOBALLockBytesImpl16_QueryInterface( ILockBytes16* iface, /* [in] SEGPTR */ REFIID riid, /* [in] */ void** ppvObject) /* [out][iid_is] (ptr to SEGPTR!) */ { HGLOBALLockBytesImpl16* const This = MapSL((SEGPTR)iface); TRACE("(%p,%s,%p)\n",iface,debugstr_guid(riid),ppvObject); /* * Perform a sanity check on the parameters. */ if (ppvObject==0) return E_INVALIDARG16; /* * Initialize the return parameter. */ *ppvObject = 0; /* * Compare the riid with the interface IDs implemented by this object. */ if ( !memcmp(&IID_IUnknown, riid, sizeof(IID_IUnknown)) || !memcmp(&IID_ILockBytes, riid, sizeof(IID_ILockBytes)) ) *ppvObject = (void*)iface; /* * Check that we obtained an interface. */ if ((*ppvObject)==0) { return E_NOINTERFACE16; } /* * Query Interface always increases the reference count by one when it is * successful */ HGLOBALLockBytesImpl16_AddRef(&This->ILockBytes16_iface); return S_OK; } /****************************************************************************** * This implements the IUnknown method Release for this * class */ ULONG CDECL HGLOBALLockBytesImpl16_Release(ILockBytes16* iface) { HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface); ULONG ref; TRACE("(%p)\n",This); ref = InterlockedDecrement(&This->ref); /* * If the reference count goes down to 0, perform suicide. */ if (ref==0) HGLOBALLockBytesImpl16_Destroy(This); return ref; } /****************************************************************************** * This method is part of the ILockBytes interface. * * It reads a block of information from the byte array at the specified * offset. * * See the documentation of ILockBytes for more info. */ HRESULT CDECL HGLOBALLockBytesImpl16_ReadAt( ILockBytes16* iface, ULARGE_INTEGER ulOffset, /* [in] */ void* pv, /* [out][length_is][size_is] */ ULONG cb, /* [in] */ ULONG* pcbRead) /* [out] */ { HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface); void* supportBuffer; ULONG bytesReadBuffer = 0; ULONG bytesToReadFromBuffer; TRACE("(%p,%d,%p,%d,%p)\n",This,ulOffset.u.LowPart,pv,cb,pcbRead); /* * If the caller is not interested in the number of bytes read, * we use another buffer to avoid "if" statements in the code. */ if (pcbRead == 0) pcbRead = &bytesReadBuffer; /* * Make sure the offset is valid. */ if (ulOffset.u.LowPart > This->byteArraySize.u.LowPart) return E_FAIL; /* * Using the known size of the array, calculate the number of bytes * to read. */ bytesToReadFromBuffer = min(This->byteArraySize.u.LowPart - ulOffset.u.LowPart, cb); /* * Lock the buffer in position and copy the data. */ supportBuffer = GlobalLock16(This->supportHandle); memcpy(pv, (char *) supportBuffer + ulOffset.u.LowPart, bytesToReadFromBuffer); /* * Return the number of bytes read. */ *pcbRead = bytesToReadFromBuffer; /* * Cleanup */ GlobalUnlock16(This->supportHandle); /* * The function returns S_OK if the specified number of bytes were read * or the end of the array was reached. * It returns STG_E_READFAULT if the number of bytes to read does not equal * the number of bytes actually read. */ if(*pcbRead == cb) return S_OK; return STG_E_READFAULT; } /****************************************************************************** * This method is part of the ILockBytes interface. * * It will change the size of the byte array. * * See the documentation of ILockBytes for more info. */ HRESULT CDECL HGLOBALLockBytesImpl16_SetSize( ILockBytes16* iface, ULARGE_INTEGER libNewSize) /* [in] */ { HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface); HGLOBAL16 supportHandle; TRACE("(%p,%d)\n",This,libNewSize.u.LowPart); /* * As documented. */ if (libNewSize.u.HighPart != 0) return STG_E_INVALIDFUNCTION; if (This->byteArraySize.u.LowPart == libNewSize.u.LowPart) return S_OK; /* * Re allocate the HGlobal to fit the new size of the stream. */ supportHandle = GlobalReAlloc16(This->supportHandle, libNewSize.u.LowPart, 0); if (supportHandle == 0) return STG_E_MEDIUMFULL; This->supportHandle = supportHandle; This->byteArraySize.u.LowPart = libNewSize.u.LowPart; return S_OK; } /****************************************************************************** * This method is part of the ILockBytes interface. * * It writes the specified bytes at the specified offset. * position. If the array is too small, it will be resized. * * See the documentation of ILockBytes for more info. */ HRESULT CDECL HGLOBALLockBytesImpl16_WriteAt( ILockBytes16* iface, ULARGE_INTEGER ulOffset, /* [in] */ const void* pv, /* [in][size_is] */ ULONG cb, /* [in] */ ULONG* pcbWritten) /* [out] */ { HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface); void* supportBuffer; ULARGE_INTEGER newSize; ULONG bytesWritten = 0; TRACE("(%p,%d,%p,%d,%p)\n",This,ulOffset.u.LowPart,pv,cb,pcbWritten); /* * If the caller is not interested in the number of bytes written, * we use another buffer to avoid "if" statements in the code. */ if (pcbWritten == 0) pcbWritten = &bytesWritten; if (cb == 0) return S_OK; newSize.u.HighPart = 0; newSize.u.LowPart = ulOffset.u.LowPart + cb; /* * Verify if we need to grow the stream */ if (newSize.u.LowPart > This->byteArraySize.u.LowPart) { /* grow stream */ if (HGLOBALLockBytesImpl16_SetSize(iface, newSize) == STG_E_MEDIUMFULL) return STG_E_MEDIUMFULL; } /* * Lock the buffer in position and copy the data. */ supportBuffer = GlobalLock16(This->supportHandle); memcpy((char *) supportBuffer + ulOffset.u.LowPart, pv, cb); /* * Return the number of bytes written. */ *pcbWritten = cb; /* * Cleanup */ GlobalUnlock16(This->supportHandle); return S_OK; } /****************************************************************************** * This method is part of the ILockBytes interface. * * See the documentation of ILockBytes for more info. */ HRESULT CDECL HGLOBALLockBytesImpl16_Flush(ILockBytes16* iface) { TRACE("(%p)\n",iface); return S_OK; } /****************************************************************************** * This method is part of the ILockBytes interface. * * The global memory implementation of ILockBytes does not support locking. * * See the documentation of ILockBytes for more info. */ HRESULT CDECL HGLOBALLockBytesImpl16_LockRegion( ILockBytes16* iface, ULARGE_INTEGER libOffset, /* [in] */ ULARGE_INTEGER cb, /* [in] */ DWORD dwLockType) /* [in] */ { return STG_E_INVALIDFUNCTION; } /****************************************************************************** * This method is part of the ILockBytes interface. * * The global memory implementation of ILockBytes does not support locking. * * See the documentation of ILockBytes for more info. */ HRESULT CDECL HGLOBALLockBytesImpl16_UnlockRegion( ILockBytes16* iface, ULARGE_INTEGER libOffset, /* [in] */ ULARGE_INTEGER cb, /* [in] */ DWORD dwLockType) /* [in] */ { return STG_E_INVALIDFUNCTION; } /****************************************************************************** * This method is part of the ILockBytes interface. * * This method returns information about the current * byte array object. * * See the documentation of ILockBytes for more info. */ HRESULT CDECL HGLOBALLockBytesImpl16_Stat( ILockBytes16*iface, STATSTG16* pstatstg, /* [out] */ DWORD grfStatFlag) /* [in] */ { HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface); memset(pstatstg, 0, sizeof(STATSTG16)); pstatstg->pwcsName = NULL; pstatstg->type = STGTY_LOCKBYTES; pstatstg->cbSize = This->byteArraySize; return S_OK; } /****************************************************************************** * CreateILockBytesOnHGlobal [OLE2.54] * * Creates an ILockBytes interface for a HGLOBAL handle. * * PARAMS * hGlobal the global handle (16bit) * fDeleteOnRelease delete handle on release. * ppLkbyt pointer to ILockBytes interface. * * RETURNS * Staddard OLE error return codes. * */ HRESULT WINAPI CreateILockBytesOnHGlobal16( HGLOBAL16 hGlobal, /* [in] */ BOOL16 fDeleteOnRelease, /* [in] */ LPLOCKBYTES16 *ppLkbyt) /* [out] (ptr to SEGPTR!) */ { HGLOBALLockBytesImpl16* newLockBytes; /* SEGPTR */ newLockBytes = HGLOBALLockBytesImpl16_Construct(hGlobal, fDeleteOnRelease); if (newLockBytes != NULL) return HGLOBALLockBytesImpl16_QueryInterface(&newLockBytes->ILockBytes16_iface, &IID_ILockBytes, (void**)ppLkbyt); return E_OUTOFMEMORY16; } HRESULT WINAPI GetHGlobalFromILockBytes16(SEGPTR plkbyt, HGLOBAL16 *phglobal16) { ILockBytes16 *lk32 = (ILockBytes16*)MapSL(plkbyt); HGLOBALLockBytesImpl16 *This; TRACE("(%08x,%p)\n", plkbyt, phglobal16); if (!phglobal16) return E_INVALIDARG16; *phglobal16 = 0; if (!plkbyt) return E_INVALIDARG16; if (lk32->lpVtbl != msegvt16) return E_INVALIDARG16; This = impl_from_ILockBytes16(lk32); *phglobal16 = This->supportHandle; return S_OK; } ================================================ FILE: ole2/ole2.c ================================================ /* * OLE2 library - 16 bit only interfaces * * Copyright 1995 Martin von Loewis * Copyright 1999 Francis Beaudet * Copyright 1999 Noel Borthwick * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include #include #define NONAMELESSUNION #undef DUMMYSTRUCTNAME #undef DUMMYUNIONNAME #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "wownt32.h" #include "ole2.h" #include "winerror.h" #include "wine/winbase16.h" #include "wine/wingdi16.h" #include "wine/winuser16.h" #include "ifs.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); static SEGPTR taskmem_strdupWtoA(LPCWSTR str); static HICON convert_icon_to_32( HICON16 icon16 ) { CURSORICONINFO *info = GlobalLock16( icon16 ); void *and_bits = info + 1; void *xor_bits; HICON ret; if (!info) return NULL; xor_bits = (BYTE *)and_bits + info->nHeight * 2 * ((info->nWidth + 15) / 16); ret = CreateIcon(0, info->nWidth, info->nHeight, info->bPlanes, info->bBitsPerPixel, and_bits, xor_bits ); GlobalUnlock16( icon16 ); return ret; } /* OLE2DISP -> OLE2 -> STORAGE -> COMPOBJ */ /* OLE2 depends on KERNEL GDI USER KEYBOARD SHELL COMPOBJ STORAGE */ /* COMPOBJ depends on KERNEL USER KEYBOARD SHELL */ /* STORAGE depends on KERNEL USER KEYBOARD COMPOBJ */ /* OLE2DISP depends on KERNEL USER WIN87EM SHELL COMPOBJ OLE2 OLE2NLS */ /* OLE2NLS denends on KERNEL USER */ /* OLE2PROX depends on KERNEL COMPOBJ OLE2 */ /* OLE2CONV depends on KERNEL GDI USER */ BOOL WINAPI Ole2_LibMain(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds, WORD wHeapSize, DWORD dwReserved1, WORD wReserved2) { LoadLibrary16("STORAGE.DLL"); LoadLibrary16("COMPOBJ.DLL"); return TRUE; } int WINAPI Ole2_WEP(HINSTANCE16 hInstance, WORD wDataSeg, WORD cbHeapSize, LPSTR lpCmdLine) { FreeLibrary16(GetModuleHandle16("STORAGE")); FreeLibrary16(GetModuleHandle16("COMPOBJ")); return TRUE; } /****************************************************************************** * OleBuildVersion (OLE2.1) */ DWORD WINAPI OleBuildVersion16(void) { return OleBuildVersion(); } /*********************************************************************** * OleInitialize (OLE2.2) */ HRESULT WINAPI OleInitialize16(SEGPTR pMalloc) { HMODULE comp = GetModuleHandleA("compobj.dll16"); HRESULT ret; if (!comp) { comp = LoadLibraryA("compobj.dll16"); } ret = ((HRESULT(WINAPI*)(SEGPTR))GetProcAddress(comp, "CoInitialize16"))(pMalloc); if (ret != S_OK /* S_FALSE: already initialized */) return ret; return OleInitialize( NULL ); } /****************************************************************************** * OleUninitialize (OLE2.3) */ HRESULT WINAPI OleUninitialize16(void) { HMODULE comp = GetModuleHandleA("compobj.dll16"); HRESULT ret; if (!comp) { comp = LoadLibraryA("compobj.dll16"); } ((void(WINAPI*)())GetProcAddress(comp, "CoUninitialize16"))(); OleUninitialize(); return 0; } /*********************************************************************** * DllGetClassObject (OLE2.4) */ HRESULT WINAPI DllGetClassObject16(REFCLSID rclsid, REFIID iid, LPVOID *ppv) { FIXME("(%s, %s, %p): stub\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv); return E_NOTIMPL; } /*********************************************************************** * RegisterDragDrop (OLE2.35) */ HRESULT WINAPI RegisterDragDrop16( HWND16 hwnd, /*LPDROPTARGET*/SEGPTR pDropTarget ) { TRACE("(0x%04x,%p)\n",hwnd,pDropTarget); return hresult32_16(RegisterDragDrop(HWND_32(hwnd), (IDropTarget*)iface16_32(&IID_IDropTarget, pDropTarget))); } /*********************************************************************** * RevokeDragDrop (OLE2.36) */ HRESULT WINAPI RevokeDragDrop16( HWND16 hwnd ) { TRACE("(0x%04x)\n",hwnd); return hresult32_16(RevokeDragDrop(HWND_32(hwnd))); } /****************************************************************************** * OleMetaFilePictFromIconAndLabel (OLE2.56) * * Returns a global memory handle to a metafile which contains the icon and * label given. * I guess the result of that should look somehow like desktop icons. * If no hIcon is given, we load the icon via lpszSourceFile and iIconIndex. * This code might be wrong at some places. */ HGLOBAL16 WINAPI OleMetafilePictFromIconAndLabel16( HICON16 icon16, LPCOLESTR16 lpszLabel, LPCOLESTR16 lpszSourceFile, UINT16 iIconIndex ) { METAFILEPICT *pict; HGLOBAL hmf; HGLOBAL16 hmf16; LPWSTR label = NULL, source = NULL; DWORD len; HICON icon = convert_icon_to_32( icon16 ); if (lpszLabel) { len = MultiByteToWideChar( CP_ACP, 0, lpszLabel, -1, NULL, 0 ); label = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, lpszLabel, -1, label, len ); } if (lpszSourceFile) { len = MultiByteToWideChar( CP_ACP, 0, lpszSourceFile, -1, NULL, 0 ); source = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, lpszSourceFile, -1, source, len ); } hmf = OleMetafilePictFromIconAndLabel( icon, label, source, iIconIndex ); HeapFree( GetProcessHeap(), 0, label ); HeapFree( GetProcessHeap(), 0, source ); DestroyIcon( icon ); if (!hmf) return 0; pict = GlobalLock( hmf ); hmf16 = GlobalAlloc16(0, sizeof(METAFILEPICT16)); if (hmf16) { METAFILEPICT16 *pict16 = GlobalLock16( hmf16 ); pict16->mm = pict->mm; pict16->xExt = pict->xExt; pict16->yExt = pict->yExt; len = GetMetaFileBitsEx( pict->hMF, 0, 0 ); pict16->hMF = GlobalAlloc16( GMEM_MOVEABLE, len ); GetMetaFileBitsEx( pict->hMF, len, GlobalLock16( pict16->hMF) ); GlobalUnlock16( pict16->hMF ); GlobalUnlock16( hmf16 ); } DeleteMetaFile( pict->hMF ); GlobalUnlock( hmf ); GlobalFree( hmf ); return hmf16; } /****************************************************************************** * CreateItemMoniker (OLE2.27) */ HRESULT WINAPI CreateItemMoniker16(LPCOLESTR16 lpszDelim,LPCOLESTR16 lpszItem,SEGPTR* ppmk) { LPMONIKER pmk; HRESULT result; LPOLESTR wdelim = strdupAtoW(lpszDelim); LPOLESTR witem = strdupAtoW(lpszItem); TRACE("(%s,%s,%p)\n",lpszDelim,lpszItem,ppmk); result = hresult32_16(CreateItemMoniker(wdelim, witem, &pmk)); HeapFree(GetProcessHeap(), 0, wdelim); HeapFree(GetProcessHeap(), 0, witem); *ppmk = iface32_16(&IID_IMoniker, pmk); return result; } /****************************************************************************** * OleSetMenuDescriptor (OLE2.41) * * PARAMS * hOleMenu FIXME: Should probably be an HOLEMENU16. */ HRESULT WINAPI OleSetMenuDescriptor16( HOLEMENU16 hOleMenu, HWND16 hwndFrame, HWND16 hwndActiveObject, /* LPOLEINPLACEFRAME */ SEGPTR lpFrame, /* LPOLEINPLACEACTIVEOBJECT */ SEGPTR lpActiveObject) { HOLEMENU hOleMenu32; TRACE("(%p, %x, %x, %p, %p)\n", hOleMenu, hwndFrame, hwndActiveObject, lpFrame, lpActiveObject); hOleMenu32 = HWND_32(hOleMenu); /* FIXME */ return hresult32_16(OleSetMenuDescriptor(hOleMenu32, HWND_32(hwndFrame), HWND_32(hwndActiveObject), (IOleInPlaceFrame*)iface16_32(&IID_IOleInPlaceFrame, lpFrame), (IOleInPlaceActiveObject*)iface16_32(&IID_IOleInPlaceActiveObject, lpActiveObject))); } /****************************************************************************** * OleLoad [OLE2.12] * * PARAMS * pStg Segmented LPSTORAGE pointer. * pClientSite Segmented LPOLECLIENTSITE pointer. */ HRESULT WINAPI OleLoad16( SEGPTR pStg, REFIID riid, SEGPTR pClientSite, SEGPTR* ppvObj) { HRESULT result; LPVOID pvObj = NULL; TRACE("(%08x,%s,%08x,%p)\n", pStg, debugstr_guid(riid), pClientSite, ppvObj); result = hresult32_16(OleLoad((IStorage*)iface16_32(&IID_IStorage, pStg), riid, (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite), &pvObj)); *ppvObj = iface32_16(riid, pvObj); return result; } /****************************************************************************** * OleDoAutoConvert [OLE2.79] */ HRESULT WINAPI OleDoAutoConvert16(LPSTORAGE pStg, LPCLSID pClsidNew) { FIXME("(%p,%p) : stub\n",pStg,pClsidNew); return E_NOTIMPL; } /*********************************************************************** * OleSetClipboard [OLE2.49] */ HRESULT WINAPI OleSetClipboard16(/* IDataObject* */SEGPTR pDataObj) { TRACE("(%p)\n", pDataObj); return hresult32_16(OleSetClipboard((IDataObject*)iface16_32(&IID_IDataObject, pDataObj))); } /*********************************************************************** * OleGetClipboard [OLE2.50] */ HRESULT WINAPI OleGetClipboard16(/* IDataObject* */SEGPTR* ppDataObj) { HRESULT result; IDataObject *pDataObj = NULL; TRACE("(%p)\n", ppDataObj); result = hresult32_16(OleGetClipboard(&pDataObj)); *ppDataObj = iface32_16(&IID_IDataObject, pDataObj); return result; } /*********************************************************************** * OleFlushClipboard [OLE2.76] */ HRESULT WINAPI OleFlushClipboard16(void) { return hresult32_16(OleFlushClipboard()); } #define GET_SEGPTR_METHOD_ADDR(ifacename,segptr,methodname) \ ((SEGPTR)((const ifacename##Vtbl*)MapSL((SEGPTR)((ifacename*)MapSL(segptr))->lpVtbl))->methodname) /*********************************************************************** * ReadClassStg (OLE2.18) * * This method reads the CLSID previously written to a storage object with * the WriteClassStg. * * PARAMS * pstg [I] Segmented LPSTORAGE pointer. * pclsid [O] Pointer to where the CLSID is written * * RETURNS * Success: S_OK. * Failure: HRESULT code. */ HRESULT WINAPI ReadClassStg16(SEGPTR pstg, CLSID *pclsid) { STATSTG16 statstg; HANDLE16 hstatstg; HRESULT hres; DWORD args[3]; TRACE("(%x, %p)\n", pstg, pclsid); if (!pclsid) return E_INVALIDARG16; memset(pclsid, 0, sizeof(*pclsid)); if (!pstg) return E_INVALIDARG16; /* * read a STATSTG structure (contains the clsid) from the storage */ args[0] = pstg; /* iface */ args[1] = WOWGlobalAllocLock16( 0, sizeof(STATSTG16), &hstatstg ); args[2] = STATFLAG_DEFAULT; if (!WOWCallback16Ex( GET_SEGPTR_METHOD_ADDR(IStorage16, pstg, Stat), WCB16_PASCAL, 3*sizeof(DWORD), args, (LPDWORD)&hres )) { WOWGlobalUnlockFree16(args[1]); ERR("CallTo16 IStorage16::Stat() failed, hres %x\n",hres); return hres; } memcpy(&statstg, MapSL(args[1]), sizeof(STATSTG16)); WOWGlobalUnlockFree16(args[1]); if(SUCCEEDED(hres)) { *pclsid=statstg.clsid; TRACE("clsid is %s\n", debugstr_guid(&statstg.clsid)); } return hres; } /*********************************************************************** * ReadClassStm (OLE2.20) */ HRESULT WINAPI ReadClassStm16(SEGPTR stream, CLSID *clsid) { HANDLE16 hclsid, hread; HRESULT hres; DWORD args[4]; TRACE("(0x%x, %p)\n", stream, clsid); if (!clsid) return E_INVALIDARG16; memset(clsid, 0, sizeof(*clsid)); if (!stream) return E_INVALIDARG16; args[0] = stream; /* iface */ args[1] = WOWGlobalAllocLock16( 0, sizeof(CLSID), &hclsid ); args[2] = sizeof(CLSID); args[3] = WOWGlobalAllocLock16( 0, sizeof(ULONG), &hread ); if (WOWCallback16Ex( GET_SEGPTR_METHOD_ADDR(IStream16, stream, Read), WCB16_PASCAL, 4*sizeof(DWORD), args, (DWORD*)&hres)) { ULONG readlen; memcpy(&readlen, MapSL(args[3]), sizeof(readlen)); if (readlen == sizeof(CLSID)) memcpy(clsid, MapSL(args[1]), sizeof(CLSID)); else hres = STG_E_READFAULT; TRACE("clsid is %s\n", debugstr_guid(clsid)); } else { ERR("CallTo16 IStream16::Read() failed, hres %x\n", hres); hres = E_FAIL; } WOWGlobalUnlockFree16(args[1]); WOWGlobalUnlockFree16(args[3]); return hres; } /*********************************************************************** * WriteClassStm (OLE2.21) */ HRESULT WINAPI WriteClassStm16(SEGPTR pStm, REFCLSID rclsid) { TRACE("(%08x,%s)\n", pStm, debugstr_guid(rclsid)); return hresult32_16(WriteClassStm((IStream*)iface16_32(&IID_IStream, pStm), rclsid)); } /*********************************************************************** * GetConvertStg (OLE2.82) */ HRESULT WINAPI GetConvertStg16(SEGPTR stg) { TRACE("(%08x)\n", stg); return hresult32_16(GetConvertStg((IStorage*)iface16_32(&IID_IStorage, stg))); } HRESULT WINAPI SetConvertStg16(SEGPTR stg, BOOL f) { TRACE("(%08x,%d)\n", stg, f); return hresult32_16(SetConvertStg((IStorage*)iface16_32(&IID_IStorage, stg), f)); } /*********************************************************************** * ReleaseStgMedium (OLE2.32) */ VOID WINAPI ReleaseStgMedium16(STGMEDIUM16 *pmedium) { switch (pmedium->tymed) { case TYMED_HGLOBAL: { if ((pmedium->pUnkForRelease == 0) && (pmedium->u.hGlobal != 0)) GlobalFree16(pmedium->u.hGlobal); break; } case TYMED_FILE: { if (pmedium->u.lpszFileName != 0) { if (pmedium->pUnkForRelease == 0) { DeleteFileA(MapSL(pmedium->u.lpszFileName)); } FIXME("\n"); /*CoTaskMemFree(pmedium->u.lpszFileName);*/ } break; } case TYMED_ISTREAM: { if (pmedium->u.pstm != 0) { IStream16_Release(pmedium->u.pstm); } break; } case TYMED_ISTORAGE: { if (pmedium->u.pstg != 0) { IStorage16_Release(pmedium->u.pstg); } break; } case TYMED_GDI: { if ((pmedium->pUnkForRelease == 0) && (pmedium->u.hGlobal != 0)) DeleteObject(HBITMAP_32(pmedium->u.hGlobal)); break; } case TYMED_MFPICT: { if ((pmedium->pUnkForRelease == 0) && (pmedium->u.hGlobal != 0)) { LPMETAFILEPICT16 pMP = GlobalLock16(pmedium->u.hGlobal); GlobalFree16(pMP->hMF); GlobalUnlock16(pmedium->u.hGlobal); GlobalFree16(pmedium->u.hGlobal); } break; } case TYMED_ENHMF: { FIXME("\n"); } case TYMED_NULL: default: break; } pmedium->tymed = TYMED_NULL; /* * After cleaning up, the unknown is released */ if (pmedium->pUnkForRelease != 0) { IUnknown16_Release(pmedium->pUnkForRelease); pmedium->pUnkForRelease = 0; } } /*********************************************************************** * WriteClassStg16 (OLE2.19) */ HRESULT WINAPI WriteClassStg16(/*IStorage **/SEGPTR stg, REFCLSID clsid) { TRACE("(%p %s)\n", stg, debugstr_guid(clsid)); return hresult32_16(WriteClassStg((IStorage*)iface16_32(&IID_IStorage, stg), clsid)); } HRESULT WINAPI DoDragDrop16(/* LPDATAOBJECT16 */SEGPTR pDataObj, /* LPDROPSOURCE16 */SEGPTR pDropSource, DWORD dwOKEffects, LPDWORD pdwEffect) { HRESULT result; DWORD count; ReleaseThunkLock(&count); TRACE("(%p,%p,%x,%p)\n", pDataObj, pDropSource, dwOKEffects, pdwEffect); result = hresult32_16(DoDragDrop((IDataObject*)iface16_32(&IID_IDataObject, pDataObj), (IDropSource*)iface16_32(&IID_IDropSource, pDropSource), dwOKEffects, pdwEffect)); RestoreThunkLock(count); return result; } HRESULT WINAPI OleIsCurrentClipboard16(/*LPDATAOBJECT*/SEGPTR pDataObj) { TRACE("(%p)\n", pDataObj); return hresult32_16(OleIsCurrentClipboard((IDataObject*)iface16_32(&IID_IDataObject, pDataObj))); } HRESULT WINAPI ReadFmtUserTypeStg16(/*LPSTORAGE16*/SEGPTR pstg, CLIPFORMAT *pcf, /*LPOLESTR16*/SEGPTR *lplpszUserType) { LPOLESTR lpszUserType = NULL; HRESULT result; TRACE("(%p,%p,%p)\n", pstg, pcf, lplpszUserType); result = hresult32_16(ReadFmtUserTypeStg((IStorage*)iface16_32(&IID_IStorage, pstg), pcf, lplpszUserType ? &lpszUserType : NULL)); if (lplpszUserType) { SEGPTR a = taskmem_strdupWtoA(lpszUserType); TRACE("%s\n", MapSL(a)); *lplpszUserType = a; CoTaskMemFree(lpszUserType); } if (!SUCCEEDED(result)) { TRACE("failed: %08x\n", result); } return result; } HRESULT WINAPI WriteFmtUserTypeStg16(/*LPSTORAGE16*/SEGPTR pstg, CLIPFORMAT cf, LPOLESTR16 lpszUserType) { HRESULT result; LPOLESTR w = strdupAtoW(lpszUserType); TRACE("(%p,%04x,%s)\n", pstg, cf, lpszUserType); result = hresult32_16(WriteFmtUserTypeStg((IStorage*)iface16_32(&IID_IStorage, pstg), cf, w)); HeapFree(GetProcessHeap(), 0, w); return result; } HRESULT WINAPI CreateDataAdviseHolder16(/*LPDATAADVISEHOLDER16*/SEGPTR *ppDAHolder) { LPDATAADVISEHOLDER pDAHolder = NULL; HRESULT result; TRACE("(%p)\n", ppDAHolder); result = hresult32_16(CreateDataAdviseHolder(&pDAHolder)); *ppDAHolder = iface32_16(&IID_IDataAdviseHolder, pDAHolder); return result; } HRESULT WINAPI CreateOleAdviseHolder16(/*LPOLEADVISEHOLDER16*/SEGPTR *ppOAHolder) { LPOLEADVISEHOLDER pOAHolder = NULL; HRESULT result; TRACE("(%p)\n", ppOAHolder); result = hresult32_16(CreateOleAdviseHolder(&pOAHolder)); *ppOAHolder = iface32_16(&IID_IOleAdviseHolder, pOAHolder); return result; } /****************************************************************************** * CreateFileMoniker (OLE2.28) */ HRESULT WINAPI CreateFileMoniker16(LPCOLESTR16 lpszPathName, /*LPMONIKER16*/SEGPTR* ppmk) { LPOLESTR w = strdupAtoW(lpszPathName); LPMONIKER pmk = NULL; HRESULT result; TRACE("(%s,%p)\n", debugstr_a(lpszPathName), ppmk); result = hresult32_16(CreateFileMoniker(w, &pmk)); *ppmk = iface32_16(&IID_IMoniker, pmk); HeapFree(GetProcessHeap(), 0, w); return result; } /****************************************************************************** * GetRunningObjectTable (OLE2.30) */ HRESULT WINAPI GetRunningObjectTable16(DWORD reserved, /*LPRUNNINGOBJECTTABLE16*/SEGPTR *pprot) { LPRUNNINGOBJECTTABLE prot = NULL; HRESULT result; TRACE("(%d,%p)\n", reserved, pprot); result = hresult32_16(GetRunningObjectTable(reserved, &prot)); *pprot = iface32_16(&IID_IRunningObjectTable, prot); return result; } HRESULT WINAPI OleCreateEmbeddingHelper16(REFCLSID rclsid, SEGPTR pUnkOuter, DWORD flags, SEGPTR pCF, REFIID riid, SEGPTR *ppvObj) { LPVOID pvObj = NULL; HRESULT result; TRACE("(%s,%08x,%08x,%08x,%s,%p)\n", debugstr_guid(rclsid), pUnkOuter, flags, pCF, debugstr_guid(riid), ppvObj); result = hresult32_16(OleCreateEmbeddingHelper(rclsid, (IUnknown*)iface16_32(&IID_IUnknown, pUnkOuter), flags, (IClassFactory*)iface16_32(&IID_IClassFactory, pCF), riid, &pvObj)); *ppvObj = iface32_16(riid, pvObj); return result; } HRESULT WINAPI OleCreateDefaultHandler16(REFCLSID clsid, SEGPTR pUnkOuter, REFIID riid, SEGPTR* ppvObj) { LPVOID obj = NULL; LPUNKNOWN a = (LPUNKNOWN)iface16_32(&IID_IUnknown, pUnkOuter); TRACE("(%s,%08,%s,%p)\n", debugstr_guid(clsid), pUnkOuter, debugstr_guid(riid), ppvObj); HRESULT hr = hresult32_16(OleCreateDefaultHandler(clsid, a, riid, &obj)); *ppvObj = iface32_16(riid, obj); return hr; } HRESULT WINAPI OleSetContainedObject16(SEGPTR pUnk, BOOL fCon) { TRACE("(%08x,%d)\n", pUnk, fCon); return hresult32_16(OleSetContainedObject((IUnknown*)iface16_32(&IID_IUnknown, pUnk), fCon)); } HRESULT WINAPI OleLockRunning16(SEGPTR pUnk, BOOL fLock, BOOL fLastUnlockCloses) { TRACE("(%08x,%d,%d)\n", pUnk, fLock, fLastUnlockCloses); return hresult32_16(OleLockRunning((IUnknown*)iface16_32(&IID_IUnknown, pUnk), fLock, fLastUnlockCloses)); } BOOL WINAPI OleIsRunning16(SEGPTR pOleObject) { TRACE("(%08x)\n", pOleObject); return hresult32_16(OleIsRunning((IOleObject*)iface16_32(&IID_IOleObject, pOleObject))); } HOLEMENU16 WINAPI OleCreateMenuDescriptor16(HMENU16 hmenu, LPOLEMENUGROUPWIDTHS width) { HOLEMENU om32 = OleCreateMenuDescriptor(HMENU_32(hmenu), width); /* FIXME! */ return HWND_16(om32); } void WINAPI OleDestroyMenuDescriptor16(HOLEMENU16 olemenu) { /* FIXME! */ OleDestroyMenuDescriptor(HWND_32(olemenu)); } HRESULT WINAPI OleGetAutoConvert16(REFCLSID clsidOld, LPCLSID pclsidNew) { HRESULT result = hresult32_16(OleGetAutoConvert(clsidOld, pclsidNew)); if (result == REGDB_E_KEYMISSING || result == REGDB_E_CLASSNOTREG) { FIXME("\n"); return result; } return result; } HRESULT WINAPI OleSetAutoConvert16(REFCLSID clsidOld, REFCLSID clsidNew) { HRESULT result; TRACE("(%s,%s)\n", debugstr_guid(clsidOld), debugstr_guid(clsidNew)); result = OleSetAutoConvert(clsidOld, clsidNew); if (result == REGDB_E_WRITEREGDB) { ERR("REGDB_E_WRITEREGDB\n"); } return hresult32_16(result); } HRESULT WINAPI OleRun16(SEGPTR pUnk) { return hresult32_16(OleRun((IUnknown*)iface16_32(&IID_IUnknown, pUnk))); } HRESULT WINAPI OleSave16(SEGPTR pPS, SEGPTR pStg, BOOL fSameAsLoad) { return hresult32_16(OleSave((IPersistStorage*)iface16_32(&IID_IPersistStorage, pPS), (IStorage*)iface16_32(&IID_IStorage, pStg), fSameAsLoad)); } HRESULT WINAPI OleCreate16(REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC16 pFormatetc, SEGPTR pClientSite, SEGPTR lpStg, SEGPTR *ppvObj) { HRESULT result; FORMATETC formatetc32; void *pvObj = NULL; if (pFormatetc) map_formatetc16_32(&formatetc32, pFormatetc); TRACE("(%s,%s,%08x,%p,%08x,%08x,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), renderopt, pFormatetc, pClientSite, lpStg, ppvObj); result = hresult32_16(OleCreate(rclsid, riid, renderopt, pFormatetc ? &formatetc32 : NULL, (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite), (IStorage*)iface16_32(&IID_IStorage, lpStg), &pvObj)); *ppvObj = iface32_16(riid, pvObj); return result; } HANDLE16 WINAPI OleDuplicateData16(HANDLE16 hSrc, CLIPFORMAT cfFormat, UINT16 uiFlags) { HGLOBAL16 hDst; DWORD size; TRACE("(%04x,%04x,%04x)\n", hSrc, cfFormat, uiFlags); if (cfFormat == CF_BITMAP) { return HBITMAP_16(OleDuplicateData(HBITMAP_32(hSrc), cfFormat, uiFlags)); } if (cfFormat == CF_PALETTE) { return HPALETTE_16(OleDuplicateData(HPALETTE_32(hSrc), cfFormat, uiFlags)); } if (cfFormat == CF_METAFILEPICT) { METAFILEPICT16 *pictSrc; METAFILEPICT16 *pictDst; void *pmfSrc; void *pmfDst; pictSrc = (METAFILEPICT16*)GlobalLock16(hSrc); hDst = GlobalAlloc16(uiFlags, sizeof(*pictSrc)); pictDst = (METAFILEPICT16*)GlobalLock16(hDst); pictDst->mm = pictSrc->mm; pictDst->xExt = pictSrc->xExt; pictDst->yExt = pictSrc->yExt; size = GlobalSize16(pictSrc->hMF); pictDst->hMF = GlobalAlloc16(uiFlags /* ? */, size); pmfSrc = GlobalLock16(pictSrc->hMF); pmfDst = GlobalLock16(pictDst->hMF); memcpy(pmfDst, pmfSrc, size); GlobalUnlock16(pictSrc->hMF); GlobalUnlock16(pictDst->hMF); GlobalUnlock16(hSrc); GlobalUnlock16(hDst); return hDst; } if (uiFlags == 0) uiFlags = GMEM_MOVEABLE; size = GlobalSize16(hSrc); if (!size) return 0; hDst = GlobalAlloc16(uiFlags, size); memcpy(GlobalLock16(hDst), GlobalLock16(hSrc), size); GlobalUnlock16(hDst); GlobalUnlock16(hSrc); return hDst; } HRESULT WINAPI CreateGenericComposite16(SEGPTR pmkFirst, SEGPTR pmkRest, SEGPTR *ppmkComposite) { HRESULT result; LPMONIKER pmkComposite = NULL; TRACE("(%08x,%08x,%p)\n", pmkFirst, pmkRest, ppmkComposite); result = hresult32_16(CreateGenericComposite((IMoniker*)iface16_32(&IID_IMoniker, pmkFirst), (IMoniker*)iface16_32(&IID_IMoniker, pmkRest), &pmkComposite)); *ppmkComposite = iface32_16(&IID_IMoniker, pmkComposite); return result; } HRESULT WINAPI OleQueryCreateFromData16(SEGPTR pDataObject) { TRACE("(%08x)\n", pDataObject); return hresult32_16(OleQueryCreateFromData((IDataObject*)iface16_32(&IID_IDataObject, pDataObject))); } HRESULT WINAPI OleTranslateAccelerator16(SEGPTR lpFrame, LPOLEINPLACEFRAMEINFO16 lpFrameInfo, LPMSG16 lpmsg16) { MSG msg32; HRESULT result; IOleInPlaceFrame *lpFrame32 = (IOleInPlaceFrame*)iface16_32(&IID_IOleInPlaceFrame, lpFrame); OLEINPLACEFRAMEINFO frameInfo32; void WINAPI window_message16_32(const MSG16 *msg16, MSG *msg32); TRACE("(%08x,%p,%p)\n", lpFrame, lpFrameInfo, lpmsg16); map_oleinplaceframeinfo16_32(&frameInfo32, lpFrameInfo); window_message16_32(lpmsg16, &msg32); result = OleTranslateAccelerator(lpFrame32, &frameInfo32, &msg32); return hresult32_16(result); } HRESULT WINAPI OleQueryLinkFromData16(SEGPTR pDataObject) { TRACE("(%08x)\n", pDataObject); return hresult32_16(OleQueryLinkFromData((IDataObject*)iface16_32(&IID_IDataObject, pDataObject))); } HRESULT WINAPI OleRegGetMiscStatus16(REFCLSID clsid, DWORD dwAspect, DWORD *pdwStatus) { TRACE("(%s,%d,%p)\n", debugstr_guid(clsid), dwAspect, pdwStatus); return hresult32_16(OleRegGetMiscStatus(clsid, dwAspect, pdwStatus)); } HRESULT WINAPI dynamic_get_task_imalloc16(SEGPTR *lpMalloc) { static HRESULT(WINAPI*pget_task_imalloc16)(SEGPTR *lpMalloc); if (!pget_task_imalloc16) { HMODULE compobj = GetModuleHandleW(L"COMPOBJ.DLL16"); if (!compobj) { compobj = LoadLibraryW(L"COMPOBJ.DLL16"); } pget_task_imalloc16 = (HRESULT(WINAPI*)(SEGPTR *lpMalloc))GetProcAddress(compobj, "get_task_imalloc16"); if (!pget_task_imalloc16) { return E_FAIL; } } return pget_task_imalloc16(lpMalloc); } SEGPTR CoTaskMemAlloc16(DWORD size) { SEGPTR imalloc = 0; if (FAILED(dynamic_get_task_imalloc16(&imalloc))) return 0; return IMalloc16_Alloc(imalloc, size); } void CoTaskMemFree16(SEGPTR ptr) { SEGPTR imalloc = 0; if (FAILED(dynamic_get_task_imalloc16(&imalloc))) return; IMalloc16_Free(imalloc, ptr); } static SEGPTR taskmem_strdupWtoA(LPCWSTR str) { SEGPTR ret; INT len; if (!str) return NULL; len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL); ret = CoTaskMemAlloc16(len * sizeof(CHAR)); if (ret) WideCharToMultiByte(CP_ACP, 0, str, -1, MapSL(ret), len, NULL, NULL); return ret; } HRESULT WINAPI OleRegGetUserType16(REFCLSID clsid, DWORD dwFormOfType, SEGPTR *pszUserType) { LPOLESTR szUserType; HRESULT result; TRACE("(%s,%d,%p)\n", debugstr_guid(clsid), dwFormOfType, pszUserType); result = OleRegGetUserType(clsid, dwFormOfType, &szUserType); *pszUserType = taskmem_strdupWtoA(szUserType); CoTaskMemFree(szUserType); return hresult32_16(result); } HRESULT WINAPI OleCreateFromData16(SEGPTR pDataObject, REFIID riid, DWORD renderopt, FORMATETC16 *pFormatetc, SEGPTR pClientSite, SEGPTR pStg, SEGPTR *ppvObj) { HRESULT result; IDataObject *pDataObject32 = (IDataObject*)iface16_32(&IID_IDataObject, pDataObject); FORMATETC fmt32; IOleClientSite *pClientSite32 = (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite); IStorage *pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg); LPVOID pvObj = NULL; if (pFormatetc) map_formatetc16_32(&fmt32, pFormatetc); TRACE("(%08x,%p,%d,%p,%08x,%08x,%p)\n", pDataObject, debugstr_guid(riid), renderopt, pFormatetc, pClientSite, pStg, ppvObj); result = OleCreateFromData(pDataObject32, riid, renderopt, pFormatetc ? &fmt32 : NULL, pClientSite32, pStg32, &pvObj); *ppvObj = iface32_16(riid, pvObj); return hresult32_16(result); } HRESULT WINAPI OleCreateLinkFromData16(SEGPTR pDataObject, REFIID riid, DWORD renderopt, FORMATETC16 *pFormatetc, SEGPTR pClientSite, SEGPTR pStg, SEGPTR *ppvObj) { HRESULT result; IDataObject *pDataObject32 = (IDataObject*)iface16_32(&IID_IDataObject, pDataObject); FORMATETC fmt32; IOleClientSite *pClientSite32 = (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite); IStorage *pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg); LPVOID pvObj = NULL; if (pFormatetc) map_formatetc16_32(&fmt32, pFormatetc); TRACE("(%08x,%p,%d,%p,%08x,%08x,%p)\n", pDataObject, debugstr_guid(riid), renderopt, pFormatetc, pClientSite, pStg, ppvObj); result = OleCreateLinkFromData(pDataObject32, riid, renderopt, pFormatetc ? &fmt32 : NULL, pClientSite32, pStg32, &pvObj); *ppvObj = iface32_16(riid, pvObj); return hresult32_16(result); } HRESULT WINAPI OleCreateStaticFromData16(SEGPTR pDataObject, REFIID riid, DWORD renderopt, FORMATETC16 *pFormatetc, SEGPTR pClientSite, SEGPTR pStg, SEGPTR *ppvObj) { HRESULT result; IDataObject *pDataObject32 = (IDataObject*)iface16_32(&IID_IDataObject, pDataObject); FORMATETC fmt32; IOleClientSite *pClientSite32 = (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite); IStorage *pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg); LPVOID pvObj = NULL; if (pFormatetc) map_formatetc16_32(&fmt32, pFormatetc); TRACE("(%08x,%p,%d,%p,%08x,%08x,%p)\n", pDataObject, debugstr_guid(riid), renderopt, pFormatetc, pClientSite, pStg, ppvObj); result = OleCreateStaticFromData(pDataObject32, riid, renderopt, pFormatetc ? &fmt32 : NULL, pClientSite32, pStg32, &pvObj); *ppvObj = iface32_16(riid, pvObj); return hresult32_16(result); } HRESULT WINAPI CreateBindCtx16(DWORD dwReserved, SEGPTR *ppbc) { IBindCtx *pbc = NULL; HRESULT result; if (dwReserved) { ERR("dwReserved must be zero.(%d)\n", dwReserved); } TRACE("(%d,%p)\n", dwReserved, ppbc); result = CreateBindCtx(0, &pbc); *ppbc = iface32_16(&IID_IBindCtx, pbc); return hresult32_16(result); } HRESULT WINAPI OleNoteObjectVisible16(SEGPTR pUnk, BOOL fVisible) { TRACE("(%08x,%d)\n", pUnk, fVisible); return hresult32_16(OleNoteObjectVisible((IUnknown*)iface16_32(&IID_IUnknown, pUnk), fVisible)); } HRESULT WINAPI OleRegEnumVerbs16(REFCLSID clsid, SEGPTR *ppenum) { IEnumOLEVERB *penum = NULL; HRESULT result; TRACE("(%s,%p)\n", debugstr_guid(clsid), ppenum); result = OleRegEnumVerbs(clsid, &penum); *ppenum = iface32_16(&IID_IEnumOLEVERB, penum); return hresult32_16(result); } HRESULT WINAPI OleRegEnumFormatEtc16(REFCLSID clsid, DWORD dwDirection, SEGPTR *ppenumFormatetc) { IEnumFORMATETC *penum = NULL; HRESULT result; TRACE("(%s,%d,%p)\n", debugstr_guid(clsid), dwDirection, ppenumFormatetc); if (!ppenumFormatetc) return E_INVALIDARG16; /* Sometimes CO_E_NOTINITIALIZED */ result = OleRegEnumFormatEtc(clsid, dwDirection, &penum); *ppenumFormatetc = iface32_16(&IID_IEnumFORMATETC, penum); return hresult32_16(result); } HRESULT WINAPI OleDraw16(SEGPTR pUnk, DWORD dwAspect, HDC16 hdcDraw, const RECT16 * const lpcBounds) { HRESULT result; RECT rect32; IUnknown *pUnk32; if (lpcBounds) { TRACE("(%08x,%d,%04x,%p{%d,%d,%d,%d})\n", pUnk, dwAspect, hdcDraw, lpcBounds, lpcBounds->left, lpcBounds->top, lpcBounds->right, lpcBounds->bottom); } else { TRACE("(%08x,%d,%04x,%p)\n", pUnk, dwAspect, hdcDraw, lpcBounds); } pUnk32 = (IUnknown*)iface16_32(&IID_IUnknown, pUnk); if (lpcBounds) { rect32.left = lpcBounds->left; rect32.right = lpcBounds->right; rect32.bottom = lpcBounds->bottom; rect32.top = lpcBounds->top; } result = OleDraw(pUnk32, dwAspect, HDC_32(hdcDraw), lpcBounds ? &rect32 : NULL); return hresult32_16(result); } HRESULT WINAPI OleSaveToStream16(SEGPTR pPStm, SEGPTR pStm) { TRACE("(%08x,%08x)\n", pPStm, pStm); return hresult32_16(OleSaveToStream((IPersistStream*)iface16_32(&IID_IPersistStream, pPStm), (IStream*)iface16_32(&IID_IStream, pStm))); } HRESULT WINAPI OleLoadFromStream16(SEGPTR pStm, SEGPTR sriid, SEGPTR sppvObj) { HRESULT result; REFIID riid = MapSL(sriid); CLSID clsid; SEGPTR xstm, pxstm, pclsid, ifpstm; SEGPTR *ppvObj = MapSL(sppvObj); TRACE("(%08x,%s,%p)\n", pStm, debugstr_guid(riid), ppvObj); static HRESULT (WINAPI *CoCreateInstance16)(SEGPTR, SEGPTR, DWORD, SEGPTR, SEGPTR) = NULL; if (!CoCreateInstance16) { HMODULE compobj = GetModuleHandleA("compobj.dll16"); CoCreateInstance16 = (HRESULT (WINAPI *)(SEGPTR, SEGPTR, DWORD, SEGPTR, SEGPTR))GetProcAddress(compobj, "CoCreateInstance16"); } result = ReadClassStm16(pStm, &clsid); if (FAILED(result)) return result; pclsid = MapLS(&clsid); result = CoCreateInstance16(pclsid, NULL, CLSCTX_INPROC_SERVER, sriid, sppvObj); UnMapLS(pclsid); if (FAILED(result)) return result; pxstm = MapLS(&xstm); ifpstm = MapLS(&IID_IPersistStream); result = IUnknown16_QueryInterface(*ppvObj, ifpstm, pxstm); UnMapLS(pxstm); UnMapLS(ifpstm); if (FAILED(result)) { IUnknown16_Release(*ppvObj); return result; } result = IPersistStream16_Load(xstm, pStm); IPersistStream16_Release(xstm); return result; } HRESULT WINAPI MkParseDisplayName16(SEGPTR pbc, LPSTR szUserName, ULONG *pchEaten, SEGPTR *ppmk) { HRESULT result; IBindCtx *pbc32; LPOLESTR szUserName32; IMoniker *pmk = NULL; TRACE("(%08x,%s,%p,%p)\n", pbc, debugstr_a(szUserName), pchEaten, ppmk); szUserName32 = strdupAtoW(szUserName); pbc32 = (IBindCtx*)iface16_32(&IID_IBindCtx, pbc); result = MkParseDisplayName(pbc32, szUserName32, pchEaten, &pmk); HeapFree(GetProcessHeap(), 0, szUserName32); *ppmk = iface32_16(&IID_IMoniker, pmk); return hresult32_16(result); } HRESULT WINAPI BindMoniker16(SEGPTR pmk, DWORD grfOpt, REFIID riid, SEGPTR *ppvObj) { HRESULT result; IMoniker *pmk32; LPVOID pvObj = NULL; TRACE("(%08x,%d,%s,%p)\n", pmk, grfOpt, debugstr_guid(riid), ppvObj); pmk32 = (IMoniker*)iface16_32(&IID_IMoniker, pmk); result = BindMoniker(pmk32, grfOpt, riid, &pvObj); *ppvObj = iface32_16(riid, pvObj); return hresult32_16(result); } static HGLOBAL16 create_metafilepict16(HGLOBAL hMetaPict) { METAFILEPICT *pict; HGLOBAL16 hmf16; DWORD len; pict = GlobalLock(hMetaPict); if (!pict) return 0; hmf16 = GlobalAlloc16(0, sizeof(METAFILEPICT16)); if (hmf16) { METAFILEPICT16 *pict16 = GlobalLock16(hmf16); pict16->mm = pict->mm; pict16->xExt = pict->xExt; pict16->yExt = pict->yExt; len = GetMetaFileBitsEx(pict->hMF, 0, 0); pict16->hMF = GlobalAlloc16(GMEM_MOVEABLE, len); GetMetaFileBitsEx(pict->hMF, len, GlobalLock16(pict16->hMF)); GlobalUnlock16(pict16->hMF); GlobalUnlock16(hmf16); } DeleteMetaFile(pict->hMF); GlobalUnlock(hMetaPict); GlobalFree(hMetaPict); return hmf16; } HGLOBAL16 WINAPI OleGetIconOfFile16(LPSTR lpszPath, BOOL fUseTypeAsLabel) { LPOLESTR lpwszPath; HGLOBAL hMetaPict; TRACE("(%s,%s,%d)\n", debugstr_a(lpszPath), fUseTypeAsLabel); lpwszPath = strdupAtoW(lpszPath); hMetaPict = OleGetIconOfFile(lpwszPath, fUseTypeAsLabel); HeapFree(GetProcessHeap(), 0, lpwszPath); return create_metafilepict16(hMetaPict); } HGLOBAL16 WINAPI OleGetIconOfClass16(REFCLSID rclsid, LPSTR lpszLabel, BOOL fUseTypeAsLabel) { LPOLESTR lpwszLabel; HGLOBAL hMetaPict; TRACE("(%s,%s,%d)\n", debugstr_guid(rclsid), debugstr_a(lpszLabel), fUseTypeAsLabel); lpwszLabel = strdupAtoW(lpszLabel); hMetaPict = OleGetIconOfClass(rclsid, lpwszLabel, fUseTypeAsLabel); HeapFree(GetProcessHeap(), 0, lpwszLabel); return create_metafilepict16(hMetaPict); } /* {0975C22A-6BA7-420E-9CD3-4763999EFB68} (dummy) */ static const IID IID_OLESTREAM32 = { 0x975c22a, 0x6ba7, 0x420e, { 0x9c, 0xd3, 0x47, 0x63, 0x99, 0x9e, 0xfb, 0x68 } }; HRESULT WINAPI OleConvertIStorageToOLESTREAMEx16(SEGPTR pStg, CLIPFORMAT cfFormat, LONG lWidth, LONG lHeight, DWORD dwSize, STGMEDIUM16 *pmedium, SEGPTR pOleStm) { HRESULT result; IStorage *pStg32; STGMEDIUM med32 = { 0 }; LPOLESTREAM stm32 = NULL; TRACE("(%08x,%04x,%d,%d,%08x,%p,%08x)\n", pStg, cfFormat, lWidth, lHeight, dwSize, pmedium, pOleStm); pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg); if (pmedium) map_stgmedium16_32(&med32, pmedium); stm32 = (LPOLESTREAM)iface16_32(&IID_OLESTREAM32, pOleStm); result = OleConvertIStorageToOLESTREAMEx(pStg32, cfFormat, lWidth, lHeight, dwSize, pmedium ? &med32 : NULL, stm32); if (pmedium) { if (med32.tymed == TYMED_HGLOBAL) { GlobalFree(med32.u.hGlobal); } } free_iface32(stm32); return hresult32_16(result); } HRESULT WINAPI OleConvertIStorageToOLESTREAM16(SEGPTR pStg, SEGPTR pOleStm) { HRESULT result; LPOLESTREAM pOleStm32; IStorage *pStg32; TRACE("(%08x,%08x)\n", pOleStm, pStg); pOleStm32 = (LPOLESTREAM)iface16_32(&IID_OLESTREAM32, pOleStm); pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg); result = OleConvertIStorageToOLESTREAM(pStg32, pOleStm32); free_iface32(pOleStm32); return hresult32_16(result); } HRESULT WINAPI OleConvertOLESTREAMToIStorageEx16(SEGPTR pOleStm, SEGPTR pStg, CLIPFORMAT *pcfFormat, LONG *plWidth, LONG *plHeight, DWORD *pdwSize, STGMEDIUM16 *pmedium) { HRESULT result; LPOLESTREAM pOleStm32; IStorage *pStg32; STGMEDIUM med32 = { 0 }; TRACE("(%08x,%08x,%p,%p,%p,%p,%p)\n", pOleStm, pStg, pcfFormat, plWidth, plHeight, pdwSize, pmedium); pOleStm32 = (LPOLESTREAM)iface16_32(&IID_OLESTREAM32, pOleStm); pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg); result = OleConvertOLESTREAMToIStorageEx(pOleStm32, pStg32, pcfFormat, plWidth, plHeight, pdwSize, pmedium ? &med32 : NULL); if (pmedium && SUCCEEDED(result)) { map_stgmedium32_16(pmedium, &med32); if (med32.tymed == TYMED_HGLOBAL) { GlobalFree(med32.u.hGlobal); } } free_iface32(pOleStm32); return hresult32_16(result); } HRESULT WINAPI OleConvertOLESTREAMToIStorage16(SEGPTR pOleStm, SEGPTR pStg, const DVTARGETDEVICE *ptd) { HRESULT result; LPOLESTREAM pOleStm32; IStorage *pStg32; TRACE("(%08x,%08x,%p)\n", pOleStm, pStg, ptd); pOleStm32 = (LPOLESTREAM)iface16_32(&IID_OLESTREAM32, pOleStm); pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg); result = OleConvertOLESTREAMToIStorage(pOleStm32, pStg32, ptd); free_iface32(pOleStm32); return hresult32_16(result); } HRESULT WINAPI GetClassFile16(LPCSTR lpszFileName, LPCLSID pclsid) { HRESULT result; LPCOLESTR lpwszFileName; TRACE("(%s,%p)\n", debugstr_a(lpszFileName), pclsid); lpwszFileName = strdupAtoW(lpszFileName); result = GetClassFile(lpwszFileName, pclsid); HeapFree(GetProcessHeap(), 0, lpwszFileName); return hresult32_16(result); } HRESULT WINAPI OleCreateLinkToFile16(LPCSTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC16 pFormatetc, SEGPTR pClientSite, SEGPTR pStg, SEGPTR *ppvObj) { HRESULT result; LPCOLESTR lpwszFileName; FORMATETC formatetc32; void *pvObj = NULL; TRACE("(%s,%s,%d,%p,%08x,%08x,%p)\n", debugstr_a(lpszFileName), debugstr_guid(riid), renderopt, pFormatetc, pClientSite, pStg, ppvObj); lpwszFileName = strdupAtoW(lpszFileName); if (pFormatetc) map_formatetc16_32(&formatetc32, pFormatetc); result = OleCreateLinkToFile(lpwszFileName, riid, renderopt, pFormatetc ? &formatetc32 : NULL, iface16_32(&IID_IOleClientSite, pClientSite), iface16_32(&IID_IStorage, pStg), &pvObj); HeapFree(GetProcessHeap(), 0, lpwszFileName); *ppvObj = iface32_16(riid, pvObj); return hresult32_16(result); } ================================================ FILE: ole2/ole2.def ================================================ ; File generated automatically from ..\ole2\ole2.dll16.spec; do not edit! LIBRARY ole2.dll16 EXPORTS _wine_spec_dos_header @1 DATA iface32_16 iface16_32 hresult32_16 hresult16_32 copy_iface16_vtbl ================================================ FILE: ole2/ole2.dll16.spec ================================================ 1 pascal OleBuildVersion() OleBuildVersion16 2 pascal OleInitialize(segptr) OleInitialize16 3 pascal OleUninitialize() OleUninitialize16 4 pascal DllGetClassObject(ptr ptr ptr) DllGetClassObject16 5 pascal WEP(word word word ptr) Ole2_WEP 524 pascal DllEntryPoint(long word word word long word) Ole2_LibMain 6 pascal OleQueryLinkFromData(segptr) OleQueryLinkFromData16 7 pascal OleQueryCreateFromData(segptr) OleQueryCreateFromData16 8 pascal OleCreateFromData(segptr ptr long ptr segptr segptr ptr) OleCreateFromData16 9 pascal OleCreateLinkFromData(segptr ptr long ptr segptr segptr ptr) OleCreateLinkFromData16 10 pascal OleCreate(ptr ptr long ptr segptr segptr ptr) OleCreate16 11 stub OLECREATELINK 12 pascal OleLoad(segptr ptr segptr ptr) OleLoad16 13 pascal OleSave(segptr segptr word) OleSave16 14 pascal OleRun(segptr) OleRun16 #15 ___EXPORTEDSTUB 16 pascal -ret16 OleIsRunning(segptr) OleIsRunning16 17 pascal OleLockRunning(segptr word word) OleLockRunning16 18 pascal ReadClassStg(segptr ptr) ReadClassStg16 19 pascal WriteClassStg(segptr ptr) WriteClassStg16 20 pascal ReadClassStm(segptr ptr) ReadClassStm16 21 pascal WriteClassStm(segptr ptr) WriteClassStm16 22 pascal BindMoniker(segptr long ptr ptr) BindMoniker16 23 pascal MkParseDisplayName(segptr str ptr ptr) MkParseDisplayName16 24 pascal OleSaveToStream(segptr segptr) OleSaveToStream16 25 pascal OleLoadFromStream(segptr segptr segptr) OleLoadFromStream16 26 pascal CreateBindCtx(long ptr) CreateBindCtx16 27 pascal CreateItemMoniker(str str ptr) CreateItemMoniker16 28 pascal CreateFileMoniker(str ptr) CreateFileMoniker16 29 pascal CreateGenericComposite(segptr segptr ptr) CreateGenericComposite16 30 pascal GetRunningObjectTable(long ptr) GetRunningObjectTable16 31 stub OLEGETMALLOC 32 pascal ReleaseStgMedium(ptr) ReleaseStgMedium16 33 stub READSTRINGSTREAM 34 stub WRITESTRINGSTREAM 35 pascal RegisterDragDrop(word segptr) RegisterDragDrop16 36 pascal RevokeDragDrop(word) RevokeDragDrop16 37 pascal DoDragDrop(segptr segptr long ptr) DoDragDrop16 38 pascal CreateOleAdviseHolder(ptr) CreateOleAdviseHolder16 39 pascal CreateDataAdviseHolder(ptr) CreateDataAdviseHolder16 40 pascal -ret16 OleCreateMenuDescriptor(word ptr) OleCreateMenuDescriptor16 41 pascal OleSetMenuDescriptor(word word word segptr segptr) OleSetMenuDescriptor16 42 pascal -ret16 OleDestroyMenuDescriptor(word) OleDestroyMenuDescriptor16 43 stub OPENORCREATESTREAM 44 stub CREATEANTIMONIKER 45 stub CREATEPOINTERMONIKER 46 stub MONIKERRELATIVEPATHTO 47 stub MONIKERCOMMONPREFIXWITH 48 stub ISACCELERATOR 49 pascal OleSetClipboard(segptr) OleSetClipboard16 50 pascal OleGetClipboard(ptr) OleGetClipboard16 51 pascal -ret16 OleDuplicateData(word word word) OleDuplicateData16 52 pascal -ret16 OleGetIconOfFile(str word) OleGetIconOfFile16 53 pascal -ret16 OleGetIconOfClass(ptr str word) OleGetIconOfClass16 54 pascal CreateILockBytesOnHGlobal(word word ptr) CreateILockBytesOnHGlobal16 55 pascal GetHGlobalFromILockBytes(segptr ptr) GetHGlobalFromILockBytes16 56 pascal -ret16 OleMetafilePictFromIconAndLabel(word str str word) OleMetafilePictFromIconAndLabel16 57 pascal GetClassFile(str ptr) GetClassFile16 58 pascal OleDraw(segptr long word ptr) OleDraw16 59 pascal OleCreateDefaultHandler(ptr segptr ptr ptr) OleCreateDefaultHandler16 60 pascal OleCreateEmbeddingHelper(ptr segptr long segptr ptr ptr) OleCreateEmbeddingHelper16 61 pascal OleConvertIStorageToOLESTREAMEx(segptr word long long long ptr segptr) OleConvertIStorageToOLESTREAMEx16 62 pascal OleConvertOLESTREAMToIStorageEx(segptr segptr ptr ptr ptr ptr ptr) OleConvertOLESTREAMToIStorageEx16 63 stub SETDOCUMENTBITSTG 64 stub GETDOCUMENTBITSTG 65 stub WRITEOLESTG 66 stub READOLESTG 67 stub OLECREATEFROMFILE 68 pascal OleCreateLinkToFile(str ptr long ptr segptr segptr ptr) OleCreateLinkToFile16 69 stub CREATEDATACACHE 70 pascal OleConvertIStorageToOLESTREAM(segptr segptr) OleConvertIStorageToOLESTREAM16 71 pascal OleConvertOLESTREAMToIStorage(segptr segptr ptr) OleConvertOLESTREAMToIStorage16 74 pascal ReadFmtUserTypeStg(segptr ptr ptr) ReadFmtUserTypeStg16 75 pascal WriteFmtUserTypeStg(segptr word str) WriteFmtUserTypeStg16 76 pascal -ret16 OleFlushClipboard() OleFlushClipboard16 77 pascal OleIsCurrentClipboard(segptr) OleIsCurrentClipboard16 78 pascal OleTranslateAccelerator(segptr ptr ptr) OleTranslateAccelerator16 79 pascal OleDoAutoConvert(ptr ptr) OleDoAutoConvert16 80 pascal OleGetAutoConvert(ptr ptr) OleGetAutoConvert16 81 pascal OleSetAutoConvert(ptr ptr) OleSetAutoConvert16 82 pascal GetConvertStg(segptr) GetConvertStg16 83 pascal SetConvertStg(segptr word) SetConvertStg16 84 pascal CreateStreamOnHGlobal(word word ptr) CreateStreamOnHGlobal16 85 pascal GetHGlobalFromStream(ptr ptr) GetHGlobalFromStream16 86 pascal OleSetContainedObject(segptr word) OleSetContainedObject16 87 pascal OleNoteObjectVisible(segptr word) OleNoteObjectVisible16 88 pascal OleCreateStaticFromData(segptr ptr long ptr segptr segptr ptr) OleCreateStaticFromData16 89 pascal OleRegGetUserType(ptr long ptr) OleRegGetUserType16 90 pascal OleRegGetMiscStatus(ptr long ptr) OleRegGetMiscStatus16 91 pascal OleRegEnumFormatEtc(ptr long ptr) OleRegEnumFormatEtc16 92 pascal OleRegEnumVerbs(ptr ptr) OleRegEnumVerbs16 93 stub OLEGETENUMFORMATETC 100 stub MAKEDEBUGSTREAM 104 stub DBGLOGOPEN 105 stub DBGLOGCLOSE 106 stub DBGLOGOUTPUTDEBUGSTRING 107 stub DBGLOGWRITE 108 stub DBGLOGTIMESTAMP 109 stub DBGLOGWRITEBANNER 110 stub DBGDUMPOBJECT 111 stub DBGISOBJECTVALID 112 stub DUMPALLOBJECTS 113 stub VALIDATEALLOBJECTS 114 stub DBGDUMPCLASSNAME 115 stub DBGDUMPEXTERNALOBJECT 120 variable _IID_IEnumUnknown(0x00000100 0x00000000 0x000000c0 0x46000000) 121 variable _IID_IEnumString(0x00000101 0x00000000 0x000000c0 0x46000000) 122 variable _IID_IEnumMoniker(0x00000102 0x00000000 0x000000c0 0x46000000) 123 variable _IID_IEnumFORMATETC(0x00000103 0x00000000 0x000000c0 0x46000000) 124 variable _IID_IEnumOLEVERB(0x00000104 0x00000000 0x000000c0 0x46000000) 125 variable _IID_IEnumSTATDATA(0x00000105 0x00000000 0x000000c0 0x46000000) 126 variable _IID_IEnumGeneric(0x00000106 0x00000000 0x000000c0 0x46000000) 127 variable _IID_IEnumHolder(0x00000107 0x00000000 0x000000c0 0x46000000) 128 variable _IID_IEnumCallback(0x00000108 0x00000000 0x000000c0 0x46000000) 129 variable _IID_IPersistStream(0x00000109 0x00000000 0x000000c0 0x46000000) 130 variable _IID_IPersistStorage(0x0000010a 0x00000000 0x000000c0 0x46000000) 131 variable _IID_IPersistFile(0x0000010b 0x00000000 0x000000c0 0x46000000) 132 variable _IID_IPersist(0x0000010c 0x00000000 0x000000c0 0x46000000) 133 variable _IID_IViewObject(0x0000010d 0x00000000 0x000000c0 0x46000000) 134 variable _IID_IDataObject(0x0000010e 0x00000000 0x000000c0 0x46000000) 135 variable _IID_IAdviseSink(0x0000010f 0x00000000 0x000000c0 0x46000000) 136 variable _IID_IDataAdviseHolder(0x00000110 0x00000000 0x000000c0 0x46000000) 137 variable _IID_IOleAdviseHolder(0x00000111 0x00000000 0x000000c0 0x46000000) 138 variable _IID_IOleObject(0x00000112 0x00000000 0x000000c0 0x46000000) 139 variable _IID_IOleInPlaceObject(0x00000113 0x00000000 0x000000c0 0x46000000) 140 variable _IID_IOleWindow(0x00000114 0x00000000 0x000000c0 0x46000000) 141 variable _IID_IOleInPlaceUIWindow(0x00000115 0x00000000 0x000000c0 0x46000000) 142 variable _IID_IOleInPlaceFrame(0x00000116 0x00000000 0x000000c0 0x46000000) 143 variable _IID_IOleInPlaceActiveObject(0x00000117 0x00000000 0x000000c0 0x46000000) 144 variable _IID_IOleClientSite(0x00000118 0x00000000 0x000000c0 0x46000000) 145 variable _IID_IOleInPlaceSite(0x00000119 0x00000000 0x000000c0 0x46000000) 146 variable _IID_IParseDisplayName(0x0000011a 0x00000000 0x000000c0 0x46000000) 147 variable _IID_IOleContainer(0x0000011b 0x00000000 0x000000c0 0x46000000) 148 variable _IID_IOleItemContainer(0x0000011c 0x00000000 0x000000c0 0x46000000) 149 variable _IID_IOleLink(0x0000011d 0x00000000 0x000000c0 0x46000000) 150 variable _IID_IOleCache(0x0000011e 0x00000000 0x000000c0 0x46000000) 151 variable _IID_IOleManager(0x0000011f 0x00000000 0x000000c0 0x46000000) 152 variable _IID_IOlePresObj(0x00000120 0x00000000 0x000000c0 0x46000000) 153 variable _IID_IDropSource(0x00000121 0x00000000 0x000000c0 0x46000000) 154 variable _IID_IDropTarget(0x00000122 0x00000000 0x000000c0 0x46000000) 155 variable _IID_IDebug(0x00000123 0x00000000 0x000000c0 0x46000000) 156 variable _IID_IDebugStream(0x00000124 0x00000000 0x000000c0 0x46000000) 157 variable _IID_IAdviseSink2(0x00000125 0x00000000 0x000000c0 0x46000000) 158 variable _IID_IViewObject2(0x00000127 0x00000000 0x000000c0 0x46000000) 159 variable _IID_IOleCache2(0x00000128 0x00000000 0x000000c0 0x46000000) 160 variable _IID_IOleCacheControl(0x00000129 0x00000000 0x000000c0 0x46000000) 161 variable _IID_IRunnableObject(0x00000126 0x00000000 0x000000c0 0x46000000) # WINE MemLockBytes implementation. 500 cdecl HGLOBALLockBytesImpl16_QueryInterface(segptr ptr ptr) HGLOBALLockBytesImpl16_QueryInterface 501 cdecl HGLOBALLockBytesImpl16_AddRef(ptr) HGLOBALLockBytesImpl16_AddRef 502 cdecl HGLOBALLockBytesImpl16_Release(ptr) HGLOBALLockBytesImpl16_Release 503 cdecl HGLOBALLockBytesImpl16_ReadAt(ptr int64 ptr long ptr) HGLOBALLockBytesImpl16_ReadAt 504 cdecl HGLOBALLockBytesImpl16_WriteAt(ptr int64 ptr long ptr) HGLOBALLockBytesImpl16_WriteAt 505 cdecl HGLOBALLockBytesImpl16_Flush(ptr) HGLOBALLockBytesImpl16_Flush 506 cdecl HGLOBALLockBytesImpl16_SetSize(ptr int64) HGLOBALLockBytesImpl16_SetSize 507 cdecl HGLOBALLockBytesImpl16_LockRegion(ptr int64 int64 long) HGLOBALLockBytesImpl16_LockRegion 508 cdecl HGLOBALLockBytesImpl16_UnlockRegion(ptr int64 int64 long) HGLOBALLockBytesImpl16_UnlockRegion 509 cdecl HGLOBALLockBytesImpl16_Stat(ptr ptr long) HGLOBALLockBytesImpl16_Stat # WINE MemStream implementation. 510 cdecl HGLOBALStreamImpl16_QueryInterface(segptr ptr ptr) HGLOBALStreamImpl16_QueryInterface 511 cdecl HGLOBALStreamImpl16_AddRef(ptr) HGLOBALStreamImpl16_AddRef 512 cdecl HGLOBALStreamImpl16_Release(ptr) HGLOBALStreamImpl16_Release 513 cdecl HGLOBALStreamImpl16_Read(ptr ptr long ptr) HGLOBALStreamImpl16_Read 514 cdecl HGLOBALStreamImpl16_Write(ptr ptr long ptr) HGLOBALStreamImpl16_Write 515 cdecl HGLOBALStreamImpl16_Seek(ptr int64 long ptr) HGLOBALStreamImpl16_Seek 516 cdecl HGLOBALStreamImpl16_SetSize(ptr int64) HGLOBALStreamImpl16_SetSize 517 cdecl HGLOBALStreamImpl16_CopyTo(ptr segptr int64 ptr ptr) HGLOBALStreamImpl16_CopyTo 518 cdecl HGLOBALStreamImpl16_Commit(ptr long) HGLOBALStreamImpl16_Commit 519 cdecl HGLOBALStreamImpl16_Revert(ptr) HGLOBALStreamImpl16_Revert 520 cdecl HGLOBALStreamImpl16_LockRegion(ptr int64 int64 long) HGLOBALStreamImpl16_LockRegion 521 cdecl HGLOBALStreamImpl16_UnlockRegion(ptr int64 int64 long) HGLOBALStreamImpl16_UnlockRegion 522 cdecl HGLOBALStreamImpl16_Stat(ptr ptr long) HGLOBALStreamImpl16_Stat 523 cdecl HGLOBALStreamImpl16_Clone(ptr ptr) HGLOBALStreamImpl16_Clone @ cdecl -arch=win32 iface32_16(ptr ptr) @ cdecl -arch=win32 iface16_32(ptr long) @ cdecl -arch=win32 hresult32_16(long) @ cdecl -arch=win32 hresult16_32(long) @ cdecl -arch=win32 copy_iface16_vtbl(long) ================================================ FILE: ole2/ole2.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 ole2 {F9B66ABE-3489-434C-8340-65B3421DC30C} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; uuid.lib;ole32.lib;user32.lib;gdi32.lib;%(AdditionalDependencies) true ole2.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ole2.def $(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; uuid.lib;ole32.lib;user32.lib;gdi32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" OLE2 > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)widl" ifs.idl -o ifs_16.c && "$(OutDir)widl" ifs.idl -o ifs_16.h ifs_16.c;ifs_16.h None false "$(OutDir)widl" ifs.idl -o ifs_16.c && "$(OutDir)widl" ifs.idl -o ifs_16.h ifs_16.c;ifs_16.h None false $(SolutionDir)widl\relay16.c;%(AdditionalInputs) $(SolutionDir)widl\relay16.c;%(AdditionalInputs) ================================================ FILE: ole2conv/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(ole2conv SHARED ${SOURCE} ${CMAKE_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/ole2conv.def ole2conv.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ole2conv.dll16 ole2conv) target_link_libraries(ole2conv libwine winecrt0 krnl386) set_target_properties(ole2conv PROPERTIES SUFFIX ".dll16") ================================================ FILE: ole2conv/Makefile.in ================================================ MODULE = ole2conv.dll16 EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll ================================================ FILE: ole2conv/ole2conv.def ================================================ ; File generated automatically from ole2conv\ole2conv.dll16.spec; do not edit! LIBRARY ole2conv.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: ole2conv/ole2conv.dll16.spec ================================================ 1 stub GETFILTERINFO 2 stub IMPORTGR 3 stub GETFILTERPREF 4 stub IMPORTEMBEDDEDGR 5 stub QD2GDI 6 stub STATUSPROC 7 stub ENUMFONTFUNC #8 WEP #9 ___EXPORTEDSTUB ================================================ FILE: ole2conv/ole2conv.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 ole2conv {90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) true ole2conv.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ole2conv.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" OLE2CONV > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: ole2disp/CMakeLists.txt ================================================ file(GLOB SOURCE *.c **/*.c *.cpp **/*.cpp *.rc **/*.rc) add_library(ole2disp SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ole2disp.def ole2disp.dll16.obj) include_directories(../wine ${CMAKE_BINARY_DIR}) add_definitions(-DARRAY_SIZE=ARRAYSIZE -D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ole2disp.dll16 ole2disp) target_link_libraries(ole2disp libwine winecrt0 krnl386 ole2 compobj) set_target_properties(ole2disp PROPERTIES SUFFIX ".dll16") ================================================ FILE: ole2disp/Makefile.in ================================================ MODULE = ole2disp.dll16 EXTRADLLFLAGS = -m16 -Wb,--main-module,oleaut32.dll C_SRCS = ole2disp.c ================================================ FILE: ole2disp/ole2disp.c ================================================ /* * OLE2DISP library * * Copyright 1995 Martin von Loewis * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "ole2.h" #include "oleauto.h" #include "winerror.h" #include "ole2disp.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); #define E_OUTOFMEMORY16 MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 2) #define E_INVALIDARG16 MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 3) #include /* BSTR structure */ typedef struct { ULONG clSize; byte abData[1]; } BYTE_BLOB16; #include static SEGPTR safearray_alloc(ULONG size) { HANDLE16 h; return MAKESEGPTR(WOWGlobalAlloc16(GPTR, size), 0); } static void safearray_free(SEGPTR ptr) { WOWGlobalUnlockFree16(ptr); } static SEGPTR safearray_realloc(SEGPTR ptr, ULONG size) { return MAKESEGPTR(GlobalReAlloc16(HIWORD(ptr), size, GMEM_ZEROINIT), 0); } static ULONG safearray_getcellcount(const SAFEARRAY16 *sa) { const SAFEARRAYBOUND16 *sab = sa->rgsabound; USHORT count = sa->cDims; ULONG cells = 1; while (count--) { if (!sab->cElements) return 0; cells *= sab->cElements; sab++; } return cells; } static HRESULT safearray_lock(SAFEARRAY16 *sa) { if (sa->cLocks == 0xffff) return E_UNEXPECTED; sa->cLocks++; return S_OK; } /* pad safearray so no element spans a 64K boundry */ static ULONG safearray_size(ULONG cells, WORD cbcell) { DWORD size = cells * cbcell; int pad = 0x10000 % cbcell; return (pad * (size / (0x10000 - pad))) + size; } static SEGPTR safearray_ptrofindex(SEGPTR array, ULONG index, WORD cbcell) { ULONG pos = safearray_size(index, cbcell) + LOWORD(array); return MAKELONG(pos & 0xffff, ((pos >> 16) << 3) + HIWORD(array)); } /* Free data items in an array */ static HRESULT SAFEARRAY_DestroyData(SAFEARRAY16 *psa, ULONG ulStartCell) { if (psa->pvData) { ULONG ulCellCount = safearray_getcellcount(psa); if (ulStartCell > ulCellCount) { FIXME("unexpted ulcellcount %d, start %d\n",ulCellCount,ulStartCell); return E_UNEXPECTED; } ulCellCount -= ulStartCell; if (psa->fFeatures & (FADF_UNKNOWN|FADF_DISPATCH)) { while(ulCellCount--) { SEGPTR *lpUnknown = (SEGPTR *)MapSL(safearray_ptrofindex(psa->pvData, ulStartCell, psa->cbElements)); if (*lpUnknown) IUnknown16_Release(*lpUnknown); ulStartCell++; } } else if (psa->fFeatures & FADF_BSTR) { while(ulCellCount--) { SEGPTR lpBstr = safearray_ptrofindex(psa->pvData, ulStartCell, psa->cbElements); SysFreeString16(*(SEGPTR *)MapSL(lpBstr)); ulStartCell++; } } else if (psa->fFeatures & FADF_VARIANT) { while(ulCellCount--) { SEGPTR lpVariant = safearray_ptrofindex(psa->pvData, ulStartCell, psa->cbElements); HRESULT hRet = VariantClear16((VARIANT16 *)MapSL(lpVariant)); if (FAILED(hRet)) FIXME("VariantClear of element failed!\n"); ulStartCell++; } } } return S_OK; } /****************************************************************************** * SafeArrayGetDim [OLE2DISP.17] */ USHORT WINAPI SafeArrayGetDim16(SAFEARRAY16 *sa) { TRACE("(%p)\n", sa); return sa->cDims; } /****************************************************************************** * SafeArrayGetElemsize [OLE2DISP.18] */ USHORT WINAPI SafeArrayGetElemsize16(SAFEARRAY16 *sa) { TRACE("(%p)\n", sa); return sa->cbElements; } /****************************************************************************** * SafeArrayGetUBound [OLE2DISP.19] */ HRESULT WINAPI SafeArrayGetUBound16(SAFEARRAY16 *sa, UINT16 dim, LONG *ubound) { TRACE("(%p, %u, %p)\n", sa, dim, ubound); if (!sa) return E_INVALIDARG16; if (!dim || dim > sa->cDims) return DISP_E_BADINDEX; *ubound = sa->rgsabound[sa->cDims - dim].lLbound + sa->rgsabound[sa->cDims - dim].cElements - 1; return S_OK; } /****************************************************************************** * SafeArrayGetLBound [OLE2DISP.20] */ HRESULT WINAPI SafeArrayGetLBound16(SAFEARRAY16 *sa, UINT16 dim, LONG *lbound) { TRACE("(%p, %u, %p)\n", sa, dim, lbound); if (!sa) return E_INVALIDARG16; if (!dim || dim > sa->cDims) return DISP_E_BADINDEX; *lbound = sa->rgsabound[sa->cDims - dim].lLbound; return S_OK; } /****************************************************************************** * SafeArrayLock [OLE2DISP.21] */ HRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa) { TRACE("(%p)\n", sa); if (!sa) return E_INVALIDARG16; return safearray_lock(sa); } /****************************************************************************** * SafeArrayUnlock [OLE2DISP.22] */ HRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *sa) { TRACE("(%p)\n", sa); if (!sa) return E_INVALIDARG16; if (sa->cLocks == 0) return E_UNEXPECTED; sa->cLocks--; return S_OK; } /****************************************************************************** * SafeArrayAccessData [OLE2DISP.23] */ HRESULT WINAPI SafeArrayAccessData16(SAFEARRAY16 *sa, SEGPTR *data) { HRESULT hr; TRACE("(%p, %p)\n", sa, data); /* arguments are not tested, it crashes if any of them is NULL */ hr = safearray_lock(sa); if (FAILED(hr)) return hr; *data = sa->pvData; return S_OK; } /****************************************************************************** * SafeArrayUnaccessData [OLE2DISP.24] */ HRESULT WINAPI SafeArrayUnaccessData16(SAFEARRAY16 *sa) { TRACE("(%p)\n", sa); return SafeArrayUnlock16(sa); } /****************************************************************************** * SafeArrayAllocDescriptor [OLE2DISP.38] */ HRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret) { SAFEARRAY16 *sa; ULONG size; TRACE("%u, %p\n", dims, ret); if (!dims) return E_INVALIDARG16; size = sizeof(SAFEARRAY16) + sizeof(SAFEARRAYBOUND16) * (dims - 1); *ret = safearray_alloc(size); if (!*ret) return E_OUTOFMEMORY16; sa = MapSL(*ret); sa->cDims = dims; return S_OK; } /****************************************************************************** * SafeArrayAllocData [OLE2DISP.39] */ HRESULT WINAPI SafeArrayAllocData16(SAFEARRAY16 *sa) { ULONG size; TRACE("%p\n", sa); if (!sa) return E_INVALIDARG16; size = safearray_getcellcount(sa); sa->pvData = safearray_alloc(safearray_size(size, sa->cbElements)); return sa->pvData ? S_OK : E_OUTOFMEMORY16; } /****************************************************************************** * SafeArrayDestroyDescriptor [OLE2DISP.40] */ HRESULT WINAPI SafeArrayDestroyDescriptor16(SEGPTR s) { TRACE("0x%08x\n", s); if (s) { SAFEARRAY16 *sa = MapSL(s); if (sa->cLocks) return DISP_E_ARRAYISLOCKED; safearray_free(s); } return S_OK; } /****************************************************************************** * SafeArrayDestroyData [OLE2DISP.41] */ HRESULT WINAPI SafeArrayDestroyData16(SAFEARRAY16 *sa) { TRACE("%p\n", sa); if (!sa) return S_OK; if (sa->cLocks) return DISP_E_ARRAYISLOCKED; HRESULT hr = SAFEARRAY_DestroyData(sa, 0); if (!hr) return hr; if (!(sa->fFeatures & FADF_STATIC)) safearray_free(sa->pvData); return S_OK; } HRESULT WINAPI SafeArrayPtrOfIndex16(SEGPTR segsa, LONG *rgIndices, SEGPTR *ppvData) { USHORT dim; ULONG cell = 0, dimensionSize = 1; SAFEARRAYBOUND16* psab; LONG c1; SAFEARRAY16 *psa = MapSL(segsa); TRACE("(%p,%p,%p)\n", psa, rgIndices, ppvData); /* The general formula for locating the cell number of an entry in an n * dimensional array (where cn = coordinate in dimension dn) is: * * c1 + c2 * sizeof(d1) + c3 * sizeof(d2) ... + cn * sizeof(c(n-1)) * * We calculate the size of the last dimension at each step through the * dimensions to avoid recursing to calculate the last dimensions size. */ if (!psa || !rgIndices || !ppvData) return E_INVALIDARG; psab = psa->rgsabound + psa->cDims - 1; c1 = *rgIndices++; if (c1 < psab->lLbound || c1 >= psab->lLbound + (LONG)psab->cElements) return DISP_E_BADINDEX; /* Initial index out of bounds */ for (dim = 1; dim < psa->cDims; dim++) { dimensionSize *= psab->cElements; psab--; if (!psab->cElements || *rgIndices < psab->lLbound || *rgIndices >= psab->lLbound + (LONG)psab->cElements) return DISP_E_BADINDEX; /* Index out of bounds */ cell += (*rgIndices - psab->lLbound) * dimensionSize; rgIndices++; } cell += (c1 - psa->rgsabound[psa->cDims - 1].lLbound); *ppvData = safearray_ptrofindex(segsa, cell, psa->cbElements); return S_OK; } HRESULT WINAPI SafeArrayGetElement16(SEGPTR segsa, LONG *rgIndices, void *pvData) { HRESULT hRet; SAFEARRAY16 *psa = MapSL(segsa); TRACE("(%p,%p,%p)\n", psa, rgIndices, pvData); if (!psa || !rgIndices || !pvData) return E_INVALIDARG; hRet = safearray_lock(psa); if (SUCCEEDED(hRet)) { PVOID lpvSrc; SEGPTR slpvSrc; hRet = SafeArrayPtrOfIndex16(segsa, rgIndices, &slpvSrc); lpvSrc = MapSL(slpvSrc); if (SUCCEEDED(hRet)) { if (psa->fFeatures & FADF_VARIANT) { VARIANT16 *lpVariant = lpvSrc; VARIANT16 *lpDest = pvData; /* The original content of pvData is ignored. */ V_VT(lpDest) = VT_EMPTY; hRet = VariantCopy16(lpDest, lpVariant); if (FAILED(hRet)) FIXME("VariantCopy failed with %#lx.\n", hRet); } else if (psa->fFeatures & FADF_BSTR) { SEGPTR *lpBstr = lpvSrc; SEGPTR *lpDest = pvData; if (*lpBstr) { *lpDest = SysAllocStringByteLen16(MapSL(*lpBstr), SysStringByteLen16(*lpDest)); if (!*lpDest) hRet = E_OUTOFMEMORY; } else *lpDest = NULL; } else if (psa->fFeatures & (FADF_UNKNOWN|FADF_DISPATCH)) { SEGPTR *src_unk = lpvSrc; SEGPTR *dest_unk = pvData; if (*src_unk) IUnknown16_AddRef(*src_unk); *dest_unk = *src_unk; } else /* Copy the data over */ memcpy(pvData, lpvSrc, psa->cbElements); } SafeArrayUnlock16(psa); } return hRet; } HRESULT WINAPI SafeArrayCopy16(SAFEARRAY16 *sa, SAFEARRAY16 **ppsaout) { FIXME("(%p,%p) stub!\n", sa, ppsaout); return E_INVALIDARG; } HRESULT WINAPI SafeArrayDestroy16(SEGPTR spsa) { SAFEARRAY16 *psa = (SAFEARRAY16*)MapSL(spsa); TRACE("(%08x)\n", spsa); if(!psa) return S_OK; if(psa->cLocks > 0) return DISP_E_ARRAYISLOCKED; /* Native doesn't check to see if the free succeeds */ SafeArrayDestroyData16(psa); SafeArrayDestroyDescriptor16(spsa); return S_OK; } /* Get the size of a supported VT type (0 means unsupported) */ static DWORD SAFEARRAY_GetVTSize(VARTYPE vt) { switch (vt) { case VT_I1: case VT_UI1: return sizeof(BYTE); case VT_BOOL: case VT_I2: case VT_UI2: return sizeof(SHORT); case VT_I4: case VT_UI4: case VT_R4: case VT_ERROR: return sizeof(LONG); case VT_R8: case VT_I8: case VT_UI8: return sizeof(LONG64); case VT_INT: case VT_UINT: return sizeof(INT); case VT_INT_PTR: case VT_UINT_PTR: return sizeof(UINT_PTR); case VT_CY: return sizeof(CY); case VT_DATE: return sizeof(DATE); case VT_BSTR: return sizeof(BSTR); case VT_DISPATCH: return sizeof(LPDISPATCH); case VT_VARIANT: return sizeof(VARIANT); case VT_UNKNOWN: return sizeof(LPUNKNOWN); case VT_DECIMAL: return sizeof(DECIMAL); /* Note: Return a non-zero size to indicate vt is valid. The actual size * of a UDT is taken from the result of IRecordInfo_GetSize(). */ case VT_RECORD: return 32; } return 0; } /************************************************************************* * SafeArrayAllocDescriptorEx (OLEAUT32.41) * * Allocate and initialise a descriptor for a SafeArray of a given type. * * PARAMS * vt [I] The type of items to store in the array * cDims [I] Number of dimensions of the array * ppsaOut [O] Destination for new descriptor * * RETURNS * Success: S_OK. ppsaOut is filled with a newly allocated descriptor. * Failure: An HRESULT error code indicating the error. * * NOTES * - This function does not check that vt is an allowed VARTYPE. * - Unlike SafeArrayAllocDescriptor(), vt is associated with the array. * See SafeArray. */ HRESULT WINAPI SafeArrayAllocDescriptorEx16(VARTYPE vt, UINT cDims, SEGPTR *ppsaOut) { ULONG cbElements; HRESULT hRet; TRACE("(%d->%s,%d,%p)\n", vt, debugstr_vt(vt), cDims, ppsaOut); cbElements = SAFEARRAY_GetVTSize(vt); if (!cbElements) WARN("Creating a descriptor with an invalid VARTYPE!\n"); hRet = SafeArrayAllocDescriptor16(cDims, ppsaOut); if (SUCCEEDED(hRet)) { ((SAFEARRAY16*)MapSL(*ppsaOut))->cbElements = cbElements; } return hRet; } /* Create an array */ static SEGPTR SAFEARRAY_Create(VARTYPE vt, UINT cDims, const SAFEARRAYBOUND16 *rgsabound, ULONG ulSize) { SEGPTR psa = NULL; unsigned int i; if (!rgsabound) return NULL; if (SUCCEEDED(SafeArrayAllocDescriptorEx16(vt, cDims, &psa))) { switch (vt) { case VT_BSTR: ((SAFEARRAY16*)MapSL(psa))->fFeatures |= FADF_BSTR; break; case VT_UNKNOWN: ((SAFEARRAY16*)MapSL(psa))->fFeatures |= FADF_UNKNOWN; break; case VT_DISPATCH: ((SAFEARRAY16*)MapSL(psa))->fFeatures |= FADF_DISPATCH; break; case VT_VARIANT: ((SAFEARRAY16*)MapSL(psa))->fFeatures |= FADF_VARIANT; break; } for (i = 0; i < cDims; i++) memcpy(((SAFEARRAY16*)MapSL(psa))->rgsabound + i, rgsabound + cDims - 1 - i, sizeof(SAFEARRAYBOUND16)); if (ulSize) ((SAFEARRAY16*)MapSL(psa))->cbElements = ulSize; if (!((SAFEARRAY16*)MapSL(psa))->cbElements || FAILED(SafeArrayAllocData16(((SAFEARRAY16*)MapSL(psa))))) { SafeArrayDestroyDescriptor16(psa); psa = NULL; } } return psa; } SEGPTR WINAPI SafeArrayCreate16(VARTYPE vt, UINT16 cDims, SAFEARRAYBOUND16 *rgsabound) { TRACE("(%d->%s,%d,%p)\n", vt, debugstr_vt(vt), cDims, rgsabound); if (vt == VT_RECORD) return 0; return SAFEARRAY_Create(vt, cDims, rgsabound, 0); } /************************************************************************ * SafeArrayRedim (OLEAUT32.40) * * Changes the characteristics of the last dimension of a SafeArray * * PARAMS * psa [I] Array to change * psabound [I] New bound details for the last dimension * * RETURNS * Success: S_OK. psa is updated to reflect the new bounds. * Failure: An HRESULT error code indicating the error. * * NOTES * See SafeArray. */ HRESULT WINAPI SafeArrayRedim16(SAFEARRAY16 *psa, SAFEARRAYBOUND16 *psabound) { SAFEARRAYBOUND16 *oldBounds; HRESULT hr; TRACE("(%p,%p)\n", psa, psabound); if (!psa || psa->fFeatures & FADF_FIXEDSIZE || !psabound) return E_INVALIDARG; if (psa->cLocks > 0) return DISP_E_ARRAYISLOCKED; hr = SafeArrayLock16(psa); if (FAILED(hr)) return hr; oldBounds = psa->rgsabound; oldBounds->lLbound = psabound->lLbound; if (psabound->cElements != oldBounds->cElements) { if (psabound->cElements < oldBounds->cElements) { /* Shorten the final dimension. */ ULONG ulStartCell = psabound->cElements * (safearray_getcellcount(psa) / oldBounds->cElements); SAFEARRAY_DestroyData(psa, ulStartCell); } else { /* Lengthen the final dimension */ ULONG ulOldSize, ulNewSize; PVOID pvNewData; ulOldSize = safearray_getcellcount(psa); if (ulOldSize) ulNewSize = (ulOldSize / oldBounds->cElements) * psabound->cElements; else { int oldelems = oldBounds->cElements; oldBounds->cElements = psabound->cElements; ulNewSize = safearray_getcellcount(psa); oldBounds->cElements = oldelems; } if (!(pvNewData = safearray_realloc(psa->pvData, safearray_size(ulNewSize, psa->cbElements)))) { SafeArrayUnlock16(psa); return E_OUTOFMEMORY; } psa->pvData = pvNewData; } oldBounds->cElements = psabound->cElements; } SafeArrayUnlock16(psa); return S_OK; } /************************************************************************ * VectorFromBstr (OLEAUT32.@) * * Create a SafeArray Vector from the bytes of a BSTR. * * PARAMS * bstr [I] String to get bytes from * ppsa [O] Destination for the array * * RETURNS * Success: S_OK. ppsa contains the strings bytes as a VT_UI1 array. * Failure: An HRESULT error code indicating the error. * * NOTES * See SafeArray. */ HRESULT WINAPI VectorFromBstr16(SEGBSTR16 bstr, /* SAFEARRAY16 * */SEGPTR *ppsa) { SAFEARRAYBOUND16 sab; TRACE("(%p,%p)\n", bstr, ppsa); if (!ppsa) return E_INVALIDARG; sab.lLbound = 0; sab.cElements = SysStringByteLen16(bstr); *ppsa = SAFEARRAY_Create(VT_UI1, 1, &sab, 0); if (*ppsa) { memcpy(((SAFEARRAY16*)MapSL(*ppsa))->pvData, bstr, sab.cElements); return S_OK; } return E_OUTOFMEMORY; } /* This implementation of the BSTR API is 16-bit only. It represents BSTR as a 16:16 far pointer, and the strings as ISO-8859 */ SEGPTR get_blob16_from_bstr16(SEGPTR bstr) { return bstr - sizeof(BYTE_BLOB16) + sizeof(OLECHAR16); } SEGPTR get_bstr16_from_blob16(SEGPTR blob) { return blob + sizeof(BYTE_BLOB16) - sizeof(OLECHAR16); } HRESULT WINAPI get_task_imalloc16(SEGPTR *lpMalloc); /* NOTE: win16 caches BSTR. typedef struct { DWORD unk1; DWORD imalloc; CoGetMalloc(MEMCTX_TASK) DWORD unk2; DWORD cache_len; default: 8? DWORD cache; far pointer to BYTE_BLOB16 char unk3[10]; } OLE2DISP_UNK_DATA; All resources are released when COM is being uninitialized. (Is ETASK used?) */ /****************************************************************************** * BSTR_AllocBytes [Internal] */ static SEGPTR BSTR_AllocBytes(int n) { SEGPTR mal; SEGPTR p; BYTE_BLOB16 *ptr; if (FAILED(get_task_imalloc16(&mal))) return 0; p = IMalloc16_Alloc(mal, n + sizeof(BYTE_BLOB16) - sizeof(OLECHAR16)); ptr = (BYTE_BLOB16*)MapSL(p); ptr->clSize = n - 1; return get_bstr16_from_blob16(p); } /****************************************************************************** * BSTR_Free [INTERNAL] */ static void BSTR_Free(SEGPTR in) { SEGPTR mal; void *ptr; if (!in) return; if (FAILED(get_task_imalloc16(&mal))) return; ptr = MapSL( get_blob16_from_bstr16(in) ); UnMapLS( get_blob16_from_bstr16(in) ); IMalloc16_Free(mal, get_blob16_from_bstr16(in)); } /****************************************************************************** * BSTR_GetAddr [INTERNAL] */ static void* BSTR_GetAddr(SEGPTR in) { return in ? MapSL(in) : 0; } HRESULT WINAPI BstrFromVector16(SAFEARRAY16 *psa, /*BSTR*/SEGPTR *pbstr) { TRACE("(%p,%p)\n", psa, pbstr); if (!pbstr) return E_INVALIDARG; *pbstr = NULL; if (!psa || psa->cbElements != 1 || psa->cDims != 1) return E_INVALIDARG; *pbstr = SysAllocStringByteLen16(psa->pvData, psa->rgsabound[0].cElements); if (!*pbstr) return E_OUTOFMEMORY; return S_OK; } /****************************************************************************** * SysAllocString [OLE2DISP.2] * * Create a BSTR16 from an OLESTR16 (16 Bit). * * PARAMS * oleStr [I] Source to create BSTR16 from * * RETURNS * Success: A BSTR16 allocated with SysAllocStringLen16(). * Failure: NULL, if oleStr is NULL. */ SEGPTR WINAPI SysAllocString16(LPCOLESTR16 oleStr) { SEGPTR out; if (!oleStr) return 0; out = BSTR_AllocBytes(strlen(oleStr)+1); if (!out) return 0; strcpy((char*)BSTR_GetAddr(out),oleStr); return out; } /****************************************************************************** * SysReallocString [OLE2DISP.3] * * Change the length of a previously created BSTR16 (16 Bit). * * PARAMS * pbstr [I] BSTR16 to change the length of * oleStr [I] New source for pbstr * * RETURNS * Success: 1 * Failure: 0. * * NOTES * SysAllocStringStringLen16(). */ INT16 WINAPI SysReAllocString16(SEGPTR *pbstr,LPCOLESTR16 oleStr) { SEGPTR new=SysAllocString16(oleStr); BSTR_Free(*pbstr); *pbstr=new; return 1; } /****************************************************************************** * SysAllocStringLen [OLE2DISP.4] * * Create a BSTR16 from an OLESTR16 of a given character length (16 Bit). * * PARAMS * oleStr [I] Source to create BSTR16 from * len [I] Length of oleStr in wide characters * * RETURNS * Success: A newly allocated BSTR16 from SysAllocStringByteLen16() * Failure: NULL, if len is >= 0x80000000, or memory allocation fails. * * NOTES * See SysAllocStringByteLen16(). */ SEGPTR WINAPI SysAllocStringByteLen16(const char *oleStr, int len) { SEGPTR out=BSTR_AllocBytes(len+1); if (!out) return 0; /* * Copy the information in the buffer. * Since it is valid to pass a NULL pointer here, we'll initialize the * buffer to nul if it is the case. */ if (oleStr != 0) { memcpy(BSTR_GetAddr(out), oleStr, len); ((char*)BSTR_GetAddr(out))[len] = '\0'; } else { memset(BSTR_GetAddr(out), 0, len+1); } return out; } SEGPTR WINAPI SysAllocStringLen16(SEGPTR bstr, int len) { SEGPTR out=BSTR_AllocBytes(len+1); char *oleStr=MapSL(bstr); // BSTR_AllocBytes might cause the segment bstr is in to move if (!out) return 0; /* * Copy the information in the buffer. * Since it is valid to pass a NULL pointer here, we'll initialize the * buffer to nul if it is the case. */ if (oleStr != 0) { memcpy(BSTR_GetAddr(out), oleStr, len); ((char*)BSTR_GetAddr(out))[len] = '\0'; } else { memset(BSTR_GetAddr(out), 0, len+1); } return out; } /****************************************************************************** * SysReAllocStringLen [OLE2DISP.5] * * Change the length of a previously created BSTR16 (16 Bit). * * PARAMS * pbstr [I] BSTR16 to change the length of * oleStr [I] New source for pbstr * len [I] Length of oleStr in characters * * RETURNS * Success: 1. The size of pbstr is updated. * Failure: 0, if len >= 0x8000 or memory allocation fails. * * NOTES * See SysAllocStringByteLen16(). * *pbstr may be changed by this function. */ int WINAPI SysReAllocStringLen16(SEGPTR *old,SEGPTR in,int len) { /* FIXME: Check input length */ SEGPTR new=SysAllocStringLen16(in,len); TRACE("free %08x alloc %08x\n", *old, new); if (!in) { memcpy(BSTR_GetAddr(new), BSTR_GetAddr(*old), min(len, SysStringLen16(*old))); } BSTR_Free(*old); *old=new; return 1; } /****************************************************************************** * SysFreeString [OLE2DISP.6] * * Free a BSTR16 (16 Bit). * * PARAMS * str [I] String to free. * * RETURNS * Nothing. */ void WINAPI SysFreeString16(SEGPTR str) { BSTR_Free(str); } /****************************************************************************** * SysStringLen [OLE2DISP.7] * * Get the allocated length of a BSTR16 in characters (16 Bit). * * PARAMS * str [I] BSTR16 to find the length of * * RETURNS * The allocated length of str, or 0 if str is NULL. */ int WINAPI SysStringByteLen16(SEGPTR str) { return SysStringLen16(str); } int WINAPI SysStringLen16(SEGPTR str) { if (!str) return 0; BYTE_BLOB16 *bb16 = (BYTE_BLOB16*)MapSL(get_blob16_from_bstr16(str)); return bb16->clSize; } #include typedef struct { /* TCHAR* */SEGPTR szName; VARTYPE vt; } PARAMDATA16, *LPPARAMDATA16; typedef struct { /* TCHAR* */SEGPTR szName; /* PARAMDATA* */SEGPTR ppdata; DISPID dispid; UINT16 iMeth; /* CALLCONV */WORD cc; UINT16 cArgs; unsigned short wFlags; VARTYPE vtReturn; } METHODDATA16, *LPMETHODDATA16; typedef struct { /* METHODDATA * */ SEGPTR pmethdata; UINT16 cMembers; } INTERFACEDATA16, *LPINTERFACEDATA16; #include HRESULT WINAPI CreateDispTypeInfo16Impl( INTERFACEDATA *pidata, /* [I] Description of the interface to build type info for */ LCID lcid, /* [I] Locale Id */ ITypeInfo **pptinfo); /* [O] Destination for created ITypeInfo object */ /****************************************************************************** * CreateDispTypeInfo [OLE2DISP.31] */ HRESULT WINAPI CreateDispTypeInfo16( INTERFACEDATA16 *pidata, LCID lcid, SEGPTR *pptinfo) { int i; INTERFACEDATA *pidata32 = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERFACEDATA)); METHODDATA16 *pimethdata16 = (METHODDATA16*)MapSL(pidata->pmethdata); ITypeInfo *ptinfo = NULL; HRESULT result; TRACE("(%p,%d,%p)\n", pidata, lcid, pptinfo); pidata32->cMembers = pidata->cMembers; pidata32->pmethdata = (METHODDATA*)HeapAlloc(GetProcessHeap(), 0, sizeof(METHODDATA) * pidata32->cMembers); for (i = 0; i < pidata32->cMembers; i++) { PARAMDATA16 *param16 = (PARAMDATA16*)MapSL(pimethdata16[i].ppdata); pidata32->pmethdata[i].szName = strdupAtoW((LPCSTR)MapSL(pimethdata16[i].szName)); pidata32->pmethdata[i].dispid = pimethdata16[i].dispid; pidata32->pmethdata[i].iMeth = pimethdata16[i].iMeth; pidata32->pmethdata[i].cc = pimethdata16[i].cc; pidata32->pmethdata[i].cArgs = pimethdata16[i].cArgs; pidata32->pmethdata[i].wFlags = pimethdata16[i].wFlags; pidata32->pmethdata[i].vtReturn = pimethdata16[i].vtReturn; if (param16) { PARAMDATA *param32 = (PARAMDATA*)HeapAlloc(GetProcessHeap(), 0, sizeof(PARAMDATA) * pimethdata16[i].cArgs); int j; pidata32->pmethdata[i].ppdata = param32; for (j = 0; j < pimethdata16[i].cArgs; j++) { param32[j].szName = strdupAtoW((LPCSTR)MapSL(param16[j].szName)); param32[j].vt = param16[j].vt; } } else { pidata32->pmethdata[i].ppdata = NULL; } } result = hresult32_16(CreateDispTypeInfo16Impl(pidata32, lcid, &ptinfo)); if (1) { for (i = 0; i < pidata32->cMembers; i++) { if (pidata32->pmethdata[i].ppdata) { int j; for (j = 0; j < pidata32->pmethdata[i].cArgs; j++) { HeapFree(GetProcessHeap(), 0, pidata32->pmethdata[i].ppdata[j].szName); } } HeapFree(GetProcessHeap(), 0, pidata32->pmethdata[i].szName); } HeapFree(GetProcessHeap(), 0, pidata32->pmethdata); HeapFree(GetProcessHeap(), 0, pidata32); } *pptinfo = iface32_16(&IID_ITypeInfo, ptinfo); return result; } HRESULT WINAPI DispGetIDsOfNames16(SEGPTR ptinfo, SEGPTR rgszNames, UINT16 cNames, SEGPTR pMemId) { return ITypeInfo16_GetIDsOfNames(ptinfo, rgszNames, cNames, pMemId); } HRESULT WINAPI DispInvoke16(SEGPTR _this, SEGPTR ptinfo, LONG dispidMember, UINT16 wFlags, SEGPTR pparams, SEGPTR pvarResult, SEGPTR pexcepinfo, SEGPTR puArgErr) { return ITypeInfo16_Invoke(ptinfo, _this, dispidMember, wFlags, pparams, pvarResult, pexcepinfo, puArgErr); } /****************************************************************************** * CreateStdDispatch [OLE2DISP.32] */ HRESULT WINAPI CreateStdDispatch16( SEGPTR punkOuter, SEGPTR pvThis, SEGPTR ptinfo, SEGPTR* ppunkStdDisp) { HRESULT result; IUnknown *punkStdDisp = NULL; TRACE("(%p,%p,%p,%p)\n",punkOuter, pvThis, ptinfo, ppunkStdDisp); result = CreateStdDispatch((IUnknown*)iface16_32(&IID_IUnknown, punkOuter), pvThis, (ITypeInfo*)iface16_32(&IID_ITypeInfo, ptinfo), &punkStdDisp); *ppunkStdDisp = iface32_16(&IID_IUnknown, punkStdDisp); return hresult32_16(result); } /****************************************************************************** * RegisterActiveObject [OLE2DISP.35] */ HRESULT WINAPI RegisterActiveObject16( SEGPTR punk, REFCLSID rclsid, DWORD dwFlags, unsigned long *pdwRegister ) { TRACE("(%08x,%s,0x%08x,%p)\n",punk,debugstr_guid(rclsid),dwFlags,pdwRegister); return hresult32_16(RegisterActiveObject((IUnknown*)iface16_32(&IID_IUnknown, punk), rclsid, dwFlags, pdwRegister)); } HRESULT WINAPI RevokeActiveObject16(unsigned long dwRegister, SEGPTR pvreserved) { TRACE("(%08x, %08x)\n", dwRegister, pvreserved); if (pvreserved) { ERR("pvreserved must be NULL.\n"); } return hresult32_16(RevokeActiveObject(dwRegister, NULL)); } HRESULT WINAPI GetActiveObject16(REFCLSID rclsid, SEGPTR pvreserved, SEGPTR *ppunk) { HRESULT result; IUnknown *punk = NULL; TRACE("(%s,%08x,%p)\n", debugstr_guid(rclsid), pvreserved, ppunk); if (pvreserved) { ERR("pvreserved must be NULL.\n"); } result = GetActiveObject(rclsid, NULL, &punk); *ppunk = iface32_16(&IID_IUnknown, punk); return hresult32_16(result); } /****************************************************************************** * SetErrorInfo [OLE2DISP.110] */ HRESULT WINAPI SetErrorInfo16(ULONG dwReserved, SEGPTR perrinfo) { TRACE("(%08x,%08x)\n", dwReserved, perrinfo); return hresult32_16(SetErrorInfo(dwReserved, (IErrorInfo*)iface16_32(&IID_IErrorInfo, perrinfo))); } HRESULT WINAPI GetErrorInfo16(ULONG dwReserved, SEGPTR *pperrinfo) { HRESULT result; IErrorInfo *perrinfo = NULL; TRACE("(%08x,%08x)\n", dwReserved, pperrinfo); result = GetErrorInfo(dwReserved, &perrinfo); *pperrinfo = iface32_16(&IID_IErrorInfo, perrinfo); return hresult32_16(result); } HRESULT WINAPI CreateErrorInfo16(SEGPTR *pperrinfo) { HRESULT result; ICreateErrorInfo *perrinfo = NULL; TRACE("(%p)\n", perrinfo); result = CreateErrorInfo(&perrinfo); *pperrinfo = iface32_16(&IID_ICreateErrorInfo, perrinfo); return hresult32_16(result); } HRESULT WINAPI DispGetParam16( DISPPARAMS16 *pdispparams, /* [in] Parameter list */ UINT16 position, /* [in] Position of parameter to coerce in pdispparams */ VARTYPE vtTarg, /* [in] Type of value to coerce to */ VARIANT16 *pvarResult, /* [out] Destination for resulting variant */ UINT16 *puArgErr) /* [out] Destination for error code */ { /* position is counted backwards */ UINT pos; HRESULT hr; TRACE("position=%d, cArgs=%d, cNamedArgs=%d\n", position, pdispparams->cArgs, pdispparams->cNamedArgs); if (position < pdispparams->cArgs) { /* positional arg? */ pos = pdispparams->cArgs - position - 1; } else { /* FIXME: is this how to handle named args? */ for (pos=0; poscNamedArgs; pos++) if (((DISPID*)MapSL(pdispparams->rgdispidNamedArgs))[pos] == position) break; if (pos==pdispparams->cNamedArgs) return DISP_E_PARAMNOTFOUND; } if (pdispparams->cArgs > 0 && !pdispparams->rgvarg) { hr = E_INVALIDARG; goto done; } if (!pvarResult) { hr = E_INVALIDARG; goto done; } hr = VariantChangeType16(pvarResult, &((VARIANT16*)MapSL(pdispparams->rgvarg))[pos], 0, vtTarg); done: if (FAILED(hr)) *puArgErr = pos; return hr; } #if 0 /****************************************************************************** * VariantChangeType [OLE2DISP.12] */ HRESULT WINAPI VariantChangeType16(VARIANTARG16 *vargDest, VARIANTARG16 *varSrc, unsigned short flags, VARTYPE vt) { FIXME("stub: (%p, %p, %d, %d)\n", vargDest, varSrc, flags, vt); return E_NOTIMPL; } /****************************************************************************** * VariantChangeTypeEx [OLE2DISP.108] */ HRESULT WINAPI VariantChangeTypeEx16(VARIANTARG16 *dest, const VARIANTARG16 *src, LCID lcid, USHORT flags, VARTYPE vt) { FIXME("stub: %p %p %d %d %d\n", dest, src, lcid, flags, vt); return E_INVALIDARG; } /****************************************************************************** * VariantInit [OLE2DISP.8] */ void WINAPI VariantInit16(VARIANTARG16 *v) { TRACE("(%p)\n", v); v->vt = VT_EMPTY; } HRESULT WINAPI VariantClear16(VARIANTARG16 *v) { TRACE("(%p)\n", v); HRESULT hres = S_OK; if (!V_ISBYREF(v)) { if (V_ISARRAY(v) || V_VT(v) == VT_SAFEARRAY) { FIXME("V_ISARRAY\n"); hres = S_OK; } if (V_VT(v) == VT_BSTR) { /* free string */ SysFreeString16(V_BSTR(v)); } if (V_VT(v) == VT_DISPATCH) { /* free object */ IUnknown16_Release(V_UNKNOWN(v)); } } v->vt = VT_EMPTY; v->wReserved1 = 0; v->wReserved2 = 0; v->wReserved3 = 0; return S_OK; } /* based on wine */ /* Get just the type from a variant pointer */ #define V_TYPE(v) (V_VT((v)) & VT_TYPEMASK) /* Flags set in V_VT, other than the actual type value */ #define VT_EXTRA_TYPE (VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED) /* Get the extra flags from a variant pointer */ #define V_EXTRA_TYPE(v) (V_VT((v)) & VT_EXTRA_TYPE) /****************************************************************************** * Check if a variants type is valid. */ static inline HRESULT VARIANT_ValidateType(VARTYPE vt) { VARTYPE vtExtra = vt & VT_EXTRA_TYPE; vt &= VT_TYPEMASK; if (!(vtExtra & (VT_VECTOR|VT_RESERVED))) { if (vt < VT_VOID || vt == VT_RECORD || vt == VT_CLSID) { if ((vtExtra & (VT_BYREF|VT_ARRAY)) && vt <= VT_NULL) return DISP_E_BADVARTYPE; if (vt != (VARTYPE)15) return S_OK; } } return DISP_E_BADVARTYPE; } HRESULT WINAPI VariantCopy16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc) { HRESULT hres = S_OK; if (V_TYPE(pvargSrc) == VT_CLSID || /* VT_CLSID is a special case */ FAILED(VARIANT_ValidateType(V_VT(pvargSrc)))) return DISP_E_BADVARTYPE; if (pvargSrc != pvargDest && SUCCEEDED(hres = VariantClear16(pvargDest))) { *pvargDest = *pvargSrc; /* Shallow copy the value */ if (!V_ISBYREF(pvargSrc)) { switch (V_VT(pvargSrc)) { case VT_BSTR: V_BSTR(pvargDest) = SysAllocStringLen16((char*)MapSL(V_BSTR(pvargSrc)), SysStringLen16(MapSL(V_BSTR(pvargSrc)))); if (!V_BSTR(pvargDest)) hres = E_OUTOFMEMORY; break; case VT_RECORD: { FIXME("VT_RECORD, stub\n"); } break; case VT_DISPATCH: case VT_UNKNOWN: V_UNKNOWN(pvargDest) = V_UNKNOWN(pvargSrc); if (V_UNKNOWN(pvargSrc)) IUnknown16_AddRef(V_UNKNOWN(pvargSrc)); break; default: if (V_ISARRAY(pvargSrc)) hres = SafeArrayCopy16(MapSL(V_ARRAY(pvargSrc)), &V_ARRAY(pvargDest)); } } } return hres; } HRESULT WINAPI VariantCopyInd16(VARIANT16 *v, VARIANTARG16 *src) { if (!V_ISBYREF(v)) return VariantCopy16(v, src); FIXME("(%p, %p) stub.\n", v, src); *v = *src; return E_INVALIDARG; } #endif ================================================ FILE: ole2disp/ole2disp.def ================================================ ; File generated automatically from ole2disp\ole2disp.dll16.spec; do not edit! LIBRARY ole2disp.dll16 EXPORTS _wine_spec_dos_header @1 DATA SysAllocString16 @2 SysFreeString16 @3 LoadTypeLib16Impl @4 SysStringLen16 @5 SysAllocStringLen16 @6 CreateTypeLib2Impl @7 ================================================ FILE: ole2disp/ole2disp.dll16.spec ================================================ 1 stub DLLGETCLASSOBJECT 2 pascal SysAllocString(str) SysAllocString16 3 pascal SysReallocString(ptr str) SysReAllocString16 4 pascal SysAllocStringLen(segstr word) SysAllocStringLen16 5 pascal SysReAllocStringLen(ptr segstr word) SysReAllocStringLen16 6 pascal SysFreeString(segstr) SysFreeString16 7 pascal SysStringLen(segstr) SysStringLen16 8 pascal VariantInit(ptr) VariantInit16 9 pascal VariantClear(ptr) VariantClear16 10 pascal VariantCopy(ptr ptr) VariantCopy16 11 pascal VariantCopyInd(ptr ptr) VariantCopyInd16 12 pascal VariantChangeType(ptr ptr word word) VariantChangeType16 13 stub VARIANTTIMETODOSDATETIME 14 stub DOSDATETIMETOVARIANTTIME 15 pascal SafeArrayCreate(word word ptr) SafeArrayCreate16 16 pascal SafeArrayDestroy(segptr) SafeArrayDestroy16 17 pascal -ret16 SafeArrayGetDim(ptr) SafeArrayGetDim16 18 pascal -ret16 SafeArrayGetElemsize(ptr) SafeArrayGetElemsize16 19 pascal SafeArrayGetUBound(ptr word ptr) SafeArrayGetUBound16 20 pascal SafeArrayGetLBound(ptr word ptr) SafeArrayGetLBound16 21 pascal SafeArrayLock(ptr) SafeArrayLock16 22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16 23 pascal SafeArrayAccessData(ptr ptr) SafeArrayAccessData16 24 pascal SafeArrayUnaccessData(ptr) SafeArrayUnaccessData16 25 pascal SafeArrayGetElement(segptr ptr ptr) SafeArrayGetElement16 26 stub SAFEARRAYPUTELEMENT 27 pascal SafeArrayCopy(ptr ptr) SafeArrayCopy16 28 pascal DispGetParam(ptr word word ptr ptr) DispGetParam16 29 pascal DispGetIDsOfNames(segptr segptr word segptr) DispGetIDsOfNames16 30 pascal DispInvoke(segptr segptr long word segptr segptr segptr segptr) DispInvoke16 31 pascal CreateDispTypeInfo(ptr long ptr) CreateDispTypeInfo16 32 pascal CreateStdDispatch(segptr segptr segptr ptr) CreateStdDispatch16 33 variable _IID_IDispatch(0x00020400 0x00000000 0x000000c0 0x46000000) 34 variable _IID_IEnumVARIANT(0x00020404 0x00000000 0x000000c0 0x46000000) 35 pascal RegisterActiveObject(segptr ptr long ptr) RegisterActiveObject16 36 pascal RevokeActiveObject(long segptr) RevokeActiveObject16 37 pascal GetActiveObject(ptr segptr ptr) GetActiveObject16 38 pascal SafeArrayAllocDescriptor(word ptr) SafeArrayAllocDescriptor16 39 pascal SafeArrayAllocData(ptr) SafeArrayAllocData16 40 pascal SafeArrayDestroyDescriptor(segptr) SafeArrayDestroyDescriptor16 41 pascal SafeArrayDestroyData(ptr) SafeArrayDestroyData16 42 pascal SafeArrayRedim(ptr ptr) SafeArrayRedim16 43 pascal VarI2FromI4(long ptr) VarI2FromI416 44 pascal VarI2FromR4(float ptr) VarI2FromR416 45 pascal VarI2FromR8(long long ptr) VarI2FromR816_conv 46 pascal VarI2FromCy(long long ptr) VarI2FromCy16_conv 47 pascal VarI2FromDate(long long ptr) VarI2FromDate16_conv 48 pascal VarI2FromStr(str long long ptr) VarI2FromStr16 49 stub VARI2FROMDISP 50 pascal VarI2FromBool(word ptr) VarI2FromBool16 51 stub VARI4FROMI2 52 stub VARI4FROMR4 53 stub VARI4FROMR8 54 stub VARI4FROMCY 55 stub VARI4FROMDATE 56 pascal VarI4FromStr(str long long ptr) VarI4FromStr16 57 stub VARI4FROMDISP 58 stub VARI4FROMBOOL 59 stub VARR4FROMI2 60 stub VARR4FROMI4 61 pascal VarR4FromR8(long long ptr) VarR4FromR816_conv 62 stub VARR4FROMCY 63 stub VARR4FROMDATE 64 pascal VarR4FromStr(str long long ptr) VarR4FromStr16 65 stub VARR4FROMDISP 66 stub VARR4FROMBOOL 67 stub VARR8FROMI2 68 stub VARR8FROMI4 69 stub VARR8FROMR4 70 stub VARR8FROMCY 71 stub VARR8FROMDATE 72 pascal VarR8FromStr(str long long ptr) VarR8FromStr16 73 stub VARR8FROMDISP 74 stub VARR8FROMBOOL 75 stub VARDATEFROMI2 76 stub VARDATEFROMI4 77 stub VARDATEFROMR4 78 stub VARDATEFROMR8 79 stub VARDATEFROMCY 80 pascal VarDateFromStr(str long long ptr) VarDateFromStr16 81 stub VARDATEFROMDISP 82 stub VARDATEFROMBOOL 83 stub VARCYFROMI2 84 stub VARCYFROMI4 85 stub VARCYFROMR4 86 stub VARCYFROMR8 87 stub VARCYFROMDATE 88 pascal VarCyFromStr(str long long ptr) VarCyFromStr16 89 stub VARCYFROMDISP 90 stub VARCYFROMBOOL 91 pascal VarBstrFromI2(s_word long long ptr) VarBstrFromI216 92 pascal VarBstrFromI4(long long long ptr) VarBstrFromI416 93 pascal VarBstrFromR4(long long long ptr) VarBstrFromR416 94 pascal VarBstrFromR8(long long long long ptr) VarBstrFromR816_conv 95 pascal VarBstrFromCy(long long long long ptr) VarBstrFromCy16_conv 96 pascal VarBstrFromDate(long long long long ptr) VarBstrFromDate16_conv 97 pascal VarBstrFromDisp(segptr long long ptr) VarBstrFromDisp16 98 pascal VarBstrFromBool(word long long ptr) VarBstrFromBool16 99 stub VARBOOLFROMI2 100 stub VARBOOLFROMI4 101 stub VARBOOLFROMR4 102 stub VARBOOLFROMR8 103 stub VARBOOLFROMDATE 104 stub VARBOOLFROMCY 105 stub VARBOOLFROMSTR 106 stub VARBOOLFROMDISP 107 stub DOINVOKEMETHOD 108 pascal VariantChangeTypeEx(ptr ptr long word word) VariantChangeTypeEx16 109 pascal SafeArrayPtrOfIndex(segptr ptr ptr) SafeArrayPtrOfIndex16 110 pascal SetErrorInfo(long segptr) SetErrorInfo16 111 pascal GetErrorInfo(long ptr) GetErrorInfo16 112 pascal CreateErrorInfo(ptr) CreateErrorInfo16 113 variable _IID_IErrorInfo(0x1cf2b120 0x101b547d 0x0008658e 0x19d12b2b) 114 variable _IID_ICreateErrorInfo(0x22f03340 0x101b547d 0x0008658e 0x19d12b2b) 115 variable _IID_ISupportErrorInfo(0xdf0b3d60 0x101b548f 0x0008658e 0x19d12b2b) 116 pascal VarUI1FromI2(word ptr) VarUI1FromI216 117 pascal VarUI1FromI4(long ptr) VarUI1FromI416 118 pascal VarUI1FromR4(long ptr) VarUI1FromR416 119 pascal VarUI1FromR8(long long ptr) VarUI1FromR816_conv 120 pascal VarUI1FromCy(long long ptr) VarUI1FromCy16_conv 121 pascal VarUI1FromDate(long long ptr) VarUI1FromDate16_conv 122 pascal VarUI1FromStr(str long long ptr) VarUI1FromStr16 123 pascal VarUI1FromDisp(segptr long ptr) VarUI1FromDisp16 124 pascal VarUI1FromBool(word ptr) VarUI1FromBool16 125 pascal VarI2FromUI1(word ptr) VarI2FromUI116 126 stub VARI4FROMUI1 127 stub VARR4FROMUI1 128 stub VARR8FROMUI1 129 stub VARDATEFROMUI1 130 stub VARCYFROMUI1 131 pascal VarBstrFromUI1(word long long ptr) VarBstrFromUI116 132 stub VARBOOLFROMUI1 133 stub DLLCANUNLOADNOW #134 stub WEP #135 stub ___EXPORTEDSTUB @ stdcall -arch=win32 SysAllocString16(str) @ stdcall -arch=win32 SysFreeString16(long) @ stdcall -arch=win32 LoadTypeLib16Impl(wstr ptr) @ stdcall -arch=win32 SysStringLen16(long) @ stdcall -arch=win32 SysAllocStringLen16(str long) @ stdcall -arch=win32 CreateTypeLib2Impl(long wstr ptr) ================================================ FILE: ole2disp/ole2disp.h ================================================ /* * Copyright 1995 Martin von Loewis * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLEAUT32_OLE2DISP_H #define __WINE_OLEAUT32_OLE2DISP_H #include #include "windef.h" #include "winbase.h" #include "wtypes.h" #include "wownt32.h" #include "wine/windef16.h" #include "wine/winbase16.h" #include "../ole2/ifs.h" #include "wine/debug.h" typedef CHAR OLECHAR16; typedef LPSTR LPOLESTR16; typedef LPCSTR LPCOLESTR16; typedef OLECHAR16 *BSTR16; typedef BSTR16 *LPBSTR16; SEGPTR WINAPI SysAllocString16(LPCOLESTR16); SEGPTR WINAPI SysAllocStringLen16(SEGPTR, int); VOID WINAPI SysFreeString16(SEGPTR); INT16 WINAPI SysReAllocString16(SEGPTR*,LPCOLESTR16); int WINAPI SysReAllocStringLen16(SEGPTR*, SEGPTR, int); int WINAPI SysStringLen16(SEGPTR); typedef struct tagVARIANT16 { union { struct __tagVARIANT16 { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; union { BYTE bVal; SHORT iVal; LONG lVal; FLOAT fltVal; DOUBLE dblVal; VARIANT_BOOL boolVal; SCODE scode; DATE date; /* BSTR16 */ SEGPTR bstrVal; CY cyVal; /* IUnknown* */ SEGPTR punkVal; /* SEGPTR */ SEGPTR pdispVal; /* SAFEARRAY* */ SEGPTR parray; /* BYTE* */ SEGPTR pbVal; /* SHORT* */ SEGPTR piVal; /* LONG* */ SEGPTR plVal; /* FLOAT* */ SEGPTR pfltVal; /* DOUBLE* */ SEGPTR pdblVal; /* VARIANT_BOOL* */ SEGPTR pboolVal; /* SCODE* */ SEGPTR pscode; /* DATE* */ SEGPTR pdate; /* BSTR16* */ SEGPTR pbstrVal; /* VARIANT16* */ SEGPTR pvarVal; /* void* */ SEGPTR byref; /* CY* */ SEGPTR pcyVal; /* IUnknown** */ SEGPTR ppunkVal; /* IDispatch** */ SEGPTR ppdispVal; /* SAFEARRAY** */ SEGPTR pparray; CHAR cVal; LONGLONG llVal; USHORT uiVal; ULONGLONG ullVal; ULONG ulVal; UINT uintVal; INT intVal; } __VARIANT_NAME_3; } __VARIANT_NAME_2; } __VARIANT_NAME_1; } VARIANT16; #define V_VARIANTREF16(X) ((VARIANT16*)MapSL(V_UNION(X, pvarVal))) #define V_UNKNOWNREF16(X) ((SEGPTR*)MapSL(V_UNION(X, ppunkVal))) #define V_ARRAYREF16(X) ((SEGPTR*)MapSL(V_UNION(X, pparray))) #define V_BSTRREF16(X) ((SEGPTR*)MapSL(V_UNION(X, pbstrVal))) #define V_BSTR16(X) ((BSTR16*)MapSL(V_UNION(X, bstrVal))) typedef VARIANT16 VARIANTARG16; typedef VARIANT16 *LPVARIANT16; /* 16-bit SAFEARRAY implementation */ typedef struct tagSAFEARRAY16 { USHORT cDims; USHORT fFeatures; USHORT cbElements; USHORT cLocks; ULONG handle; SEGPTR pvData; SAFEARRAYBOUND16 rgsabound[1]; } SAFEARRAY16; USHORT WINAPI SafeArrayGetDim16(SAFEARRAY16 *sa); USHORT WINAPI SafeArrayGetElemsize16(SAFEARRAY16 *sa); HRESULT WINAPI SafeArrayGetUBound16(SAFEARRAY16 *sa, UINT16 dim, LONG *ubound); HRESULT WINAPI SafeArrayGetLBound16(SAFEARRAY16 *sa, UINT16 dim, LONG *lbound); HRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa); HRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *sa); HRESULT WINAPI SafeArrayAccessData16(SAFEARRAY16 *sa, SEGPTR *data); HRESULT WINAPI SafeArrayUnaccessData16(SAFEARRAY16 *sa); HRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret); HRESULT WINAPI SafeArrayAllocData16(SAFEARRAY16 *sa); HRESULT WINAPI SafeArrayDestroyDescriptor16(SEGPTR s); HRESULT WINAPI SafeArrayDestroyData16(SAFEARRAY16 *sa); HRESULT WINAPI SafeArrayCopy16(SAFEARRAY16 *sa, SAFEARRAY16 **ppsaout); SEGPTR WINAPI SysAllocString16(LPCOLESTR16 oleStr); INT16 WINAPI SysReAllocString16(SEGPTR *pbstr, LPCOLESTR16 oleStr); SEGPTR WINAPI SysAllocStringLen16(SEGPTR oleStr, int len); int WINAPI SysReAllocStringLen16(SEGPTR *old, SEGPTR in, int len); void WINAPI SysFreeString16(SEGPTR str); int WINAPI SysStringLen16(SEGPTR str); int WINAPI SysStringByteLen16(SEGPTR str); SEGPTR WINAPI SysAllocStringByteLen16(const char *oleStr, int len); HRESULT WINAPI SafeArrayDestroy16(SEGPTR psa); HRESULT WINAPI BstrFromVector16(SAFEARRAY16 *psa, /*BSTR*/SEGPTR *pbstr); typedef SEGPTR SEGBSTR16; #define BSTR_PTR(x) ((OLECHAR16*)MapSL(x)) HRESULT WINAPI VectorFromBstr16(SEGBSTR16 bstr, /*SAFEARRAY16 * */SEGPTR *ppsa); HRESULT WINAPI VarUdateFromDate16(DATE dateIn, ULONG dwFlags, UDATE *lpUdate); HRESULT WINAPI VariantCopy16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc); HRESULT WINAPI VarDateFromUdate16(UDATE *pUdateIn, ULONG dwFlags, DATE *pDateOut); HRESULT WINAPI VariantClear16(VARIANTARG16* pVarg); HRESULT WINAPI VariantChangeTypeEx16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt); HRESULT WINAPI VarCyNeg16(CY cyIn, CY* pCyOut); HRESULT WINAPI VarCyInt16(CY cyIn, CY* pCyOut); void WINAPI VariantInit16(VARIANTARG16* pVarg); HRESULT WINAPI VariantClear16(VARIANTARG16* pVarg); HRESULT WINAPI VariantCopy16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc); HRESULT WINAPI VariantCopyInd16(VARIANT16* pvargDest, VARIANTARG16* pvargSrc); HRESULT WINAPI VariantChangeType16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc, USHORT wFlags, VARTYPE vt); HRESULT WINAPI VariantChangeTypeEx16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt); INT WINAPI DosDateTimeToVariantTime16(USHORT wDosDate, USHORT wDosTime, double *pDateOut); INT WINAPI VariantTimeToDosDateTime16(double dateIn, USHORT *pwDosDate, USHORT *pwDosTime); INT WINAPI SystemTimeToVariantTime16(LPSYSTEMTIME lpSt, double *pDateOut); INT WINAPI VariantTimeToSystemTime16(double dateIn, LPSYSTEMTIME lpSt); HRESULT WINAPI VarDateFromUdateEx16(UDATE *pUdateIn, LCID lcid, ULONG dwFlags, DATE *pDateOut); HRESULT WINAPI VarDateFromUdate16(UDATE *pUdateIn, ULONG dwFlags, DATE *pDateOut); HRESULT WINAPI VarUdateFromDate16(DATE dateIn, ULONG dwFlags, UDATE *lpUdate); HRESULT WINAPI VarParseNumFromStr16(OLECHAR16 *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig); HRESULT WINAPI VarNumFromParseNum16(NUMPARSE *pNumprs, BYTE *rgbDig, ULONG dwVtBits, VARIANT16 *pVarDst); HRESULT WINAPI VarCat16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 out); HRESULT WINAPI VarCmp16(LPVARIANT16 left, LPVARIANT16 right, LCID lcid, DWORD flags); HRESULT WINAPI VarAnd16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarAdd16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarMul16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarDiv16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarSub16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarOr16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut); HRESULT WINAPI VarAbs16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut); HRESULT WINAPI VarFix16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut); HRESULT WINAPI VarInt16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut); HRESULT WINAPI VarXor16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut); HRESULT WINAPI VarEqv16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut); HRESULT WINAPI VarNeg16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut); HRESULT WINAPI VarNot16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut); HRESULT WINAPI VarRound16(LPVARIANT16 pVarIn, int deci, LPVARIANT16 pVarOut); HRESULT WINAPI VarIdiv16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarMod16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarPow16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarImp16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result); HRESULT WINAPI VarI1FromUI116(BYTE bIn, signed char* pcOut); HRESULT WINAPI VarI1FromI216(SHORT sIn, signed char* pcOut); HRESULT WINAPI VarI1FromI416(LONG iIn, signed char* pcOut); HRESULT WINAPI VarI1FromR416(FLOAT fltIn, signed char* pcOut); HRESULT WINAPI VarI1FromR816(double dblIn, signed char* pcOut); HRESULT WINAPI VarI1FromDate16(DATE dateIn, signed char* pcOut); HRESULT WINAPI VarI1FromCy16(CY cyIn, signed char* pcOut); HRESULT WINAPI VarI1FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, signed char* pcOut); HRESULT WINAPI VarI1FromDisp16(SEGPTR pdispIn, LCID lcid, signed char* pcOut); HRESULT WINAPI VarI1FromBool16(VARIANT_BOOL boolIn, signed char* pcOut); HRESULT WINAPI VarI1FromUI216(USHORT usIn, signed char* pcOut); HRESULT WINAPI VarI1FromUI416(ULONG ulIn, signed char* pcOut); HRESULT WINAPI VarI1FromDec16(DECIMAL *pdecIn, signed char* pcOut); HRESULT WINAPI VarI1FromI816(LONG64 llIn, signed char* pcOut); HRESULT WINAPI VarI1FromUI816(ULONG64 ullIn, signed char* pcOut); HRESULT WINAPI VarUI1FromI216(SHORT sIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromI416(LONG iIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromR416(FLOAT fltIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromR816(double dblIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromCy16(CY cyIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromDate16(DATE dateIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut); HRESULT WINAPI VarUI1FromDisp16(SEGPTR pdispIn, LCID lcid, BYTE* pbOut); HRESULT WINAPI VarUI1FromBool16(VARIANT_BOOL boolIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromI116(signed char cIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromUI216(USHORT usIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromUI416(ULONG ulIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromDec16(DECIMAL *pdecIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromI816(LONG64 llIn, BYTE* pbOut); HRESULT WINAPI VarUI1FromUI816(ULONG64 ullIn, BYTE* pbOut); HRESULT WINAPI VarI2FromUI116(BYTE bIn, SHORT* psOut); HRESULT WINAPI VarI2FromI416(LONG iIn, SHORT* psOut); HRESULT WINAPI VarI2FromR416(FLOAT fltIn, SHORT* psOut); HRESULT WINAPI VarI2FromR816(double dblIn, SHORT* psOut); HRESULT WINAPI VarI2FromCy16(CY cyIn, SHORT* psOut); HRESULT WINAPI VarI2FromDate16(DATE dateIn, SHORT* psOut); HRESULT WINAPI VarI2FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, SHORT* psOut); HRESULT WINAPI VarI2FromDisp16(SEGPTR pdispIn, LCID lcid, SHORT* psOut); HRESULT WINAPI VarI2FromBool16(VARIANT_BOOL boolIn, SHORT* psOut); HRESULT WINAPI VarI2FromI116(signed char cIn, SHORT* psOut); HRESULT WINAPI VarI2FromUI216(USHORT usIn, SHORT* psOut); HRESULT WINAPI VarI2FromUI416(ULONG ulIn, SHORT* psOut); HRESULT WINAPI VarI2FromDec16(DECIMAL *pdecIn, SHORT* psOut); HRESULT WINAPI VarI2FromI816(LONG64 llIn, SHORT* psOut); HRESULT WINAPI VarI2FromUI816(ULONG64 ullIn, SHORT* psOut); HRESULT WINAPI VarUI2FromUI116(BYTE bIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromI216(SHORT sIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromI416(LONG iIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromR416(FLOAT fltIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromR816(double dblIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromDate16(DATE dateIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromCy16(CY cyIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, USHORT* pusOut); HRESULT WINAPI VarUI2FromDisp16(SEGPTR pdispIn, LCID lcid, USHORT* pusOut); HRESULT WINAPI VarUI2FromBool16(VARIANT_BOOL boolIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromI116(signed char cIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromUI416(ULONG ulIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromDec16(DECIMAL *pdecIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromI816(LONG64 llIn, USHORT* pusOut); HRESULT WINAPI VarUI2FromUI816(ULONG64 ullIn, USHORT* pusOut); HRESULT WINAPI VarI4FromUI116(BYTE bIn, LONG *piOut); HRESULT WINAPI VarI4FromI216(SHORT sIn, LONG *piOut); HRESULT WINAPI VarI4FromR416(FLOAT fltIn, LONG *piOut); HRESULT WINAPI VarI4FromR816(double dblIn, LONG *piOut); HRESULT WINAPI VarI4FromCy16(CY cyIn, LONG *piOut); HRESULT WINAPI VarI4FromDate16(DATE dateIn, LONG *piOut); HRESULT WINAPI VarI4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, LONG *piOut); HRESULT WINAPI VarI4FromDisp16(SEGPTR pdispIn, LCID lcid, LONG *piOut); HRESULT WINAPI VarI4FromBool16(VARIANT_BOOL boolIn, LONG *piOut); HRESULT WINAPI VarI4FromI116(signed char cIn, LONG *piOut); HRESULT WINAPI VarI4FromUI216(USHORT usIn, LONG *piOut); HRESULT WINAPI VarI4FromUI416(ULONG ulIn, LONG *piOut); HRESULT WINAPI VarI4FromDec16(DECIMAL *pdecIn, LONG *piOut); HRESULT WINAPI VarI4FromI816(LONG64 llIn, LONG *piOut); HRESULT WINAPI VarI4FromUI816(ULONG64 ullIn, LONG *piOut); HRESULT WINAPI VarUI4FromUI116(BYTE bIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromI216(SHORT sIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromI416(LONG iIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromR416(FLOAT fltIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromR816(double dblIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromDate16(DATE dateIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromCy16(CY cyIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, ULONG *pulOut); HRESULT WINAPI VarUI4FromDisp16(SEGPTR pdispIn, LCID lcid, ULONG *pulOut); HRESULT WINAPI VarUI4FromBool16(VARIANT_BOOL boolIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromI116(signed char cIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromUI216(USHORT usIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromDec16(DECIMAL *pdecIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromI816(LONG64 llIn, ULONG *pulOut); HRESULT WINAPI VarUI4FromUI816(ULONG64 ullIn, ULONG *pulOut); HRESULT WINAPI VarI8FromUI116(BYTE bIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromI216(SHORT sIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromR416(FLOAT fltIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromR816(double dblIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromCy16(CY cyIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromDate16(DATE dateIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, LONG64* pi64Out); HRESULT WINAPI VarI8FromDisp16(SEGPTR pdispIn, LCID lcid, LONG64* pi64Out); HRESULT WINAPI VarI8FromBool16(VARIANT_BOOL boolIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromI116(signed char cIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromUI216(USHORT usIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromUI416(ULONG ulIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromDec16(DECIMAL *pdecIn, LONG64* pi64Out); HRESULT WINAPI VarI8FromUI816(ULONG64 ullIn, LONG64* pi64Out); HRESULT WINAPI VarUI8FromI816(LONG64 llIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromUI116(BYTE bIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromI216(SHORT sIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromR416(FLOAT fltIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromR816(double dblIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromCy16(CY cyIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromDate16(DATE dateIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromDisp16(SEGPTR pdispIn, LCID lcid, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromBool16(VARIANT_BOOL boolIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromI116(signed char cIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromUI216(USHORT usIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromUI416(ULONG ulIn, ULONG64* pui64Out); HRESULT WINAPI VarUI8FromDec16(DECIMAL *pdecIn, ULONG64* pui64Out); HRESULT WINAPI VarR4FromUI116(BYTE bIn, float *pFltOut); HRESULT WINAPI VarR4FromI216(SHORT sIn, float *pFltOut); HRESULT WINAPI VarR4FromI416(LONG lIn, float *pFltOut); HRESULT WINAPI VarR4FromR816(double dblIn, float *pFltOut); HRESULT WINAPI VarR4FromCy16(CY cyIn, float *pFltOut); HRESULT WINAPI VarR4FromDate16(DATE dateIn, float *pFltOut); HRESULT WINAPI VarR4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, float *pFltOut); HRESULT WINAPI VarR4FromDisp16(SEGPTR pdispIn, LCID lcid, float *pFltOut); HRESULT WINAPI VarR4FromBool16(VARIANT_BOOL boolIn, float *pFltOut); HRESULT WINAPI VarR4FromI116(signed char cIn, float *pFltOut); HRESULT WINAPI VarR4FromUI216(USHORT usIn, float *pFltOut); HRESULT WINAPI VarR4FromUI416(ULONG ulIn, float *pFltOut); HRESULT WINAPI VarR4FromDec16(DECIMAL* pDecIn, float *pFltOut); HRESULT WINAPI VarR4FromI816(LONG64 llIn, float *pFltOut); HRESULT WINAPI VarR4FromUI816(ULONG64 ullIn, float *pFltOut); HRESULT WINAPI VarR4CmpR816(float fltLeft, double dblRight); HRESULT WINAPI VarR8FromUI116(BYTE bIn, double *pDblOut); HRESULT WINAPI VarR8FromI216(SHORT sIn, double *pDblOut); HRESULT WINAPI VarR8FromI416(LONG lIn, double *pDblOut); HRESULT WINAPI VarR8FromR416(FLOAT fltIn, double *pDblOut); HRESULT WINAPI VarR8FromCy16(CY cyIn, double *pDblOut); HRESULT WINAPI VarR8FromDate16(DATE dateIn, double *pDblOut); HRESULT WINAPI VarR8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, double *pDblOut); HRESULT WINAPI VarR8FromDisp16(SEGPTR pdispIn, LCID lcid, double *pDblOut); HRESULT WINAPI VarR8FromBool16(VARIANT_BOOL boolIn, double *pDblOut); HRESULT WINAPI VarR8FromI116(signed char cIn, double *pDblOut); HRESULT WINAPI VarR8FromUI216(USHORT usIn, double *pDblOut); HRESULT WINAPI VarR8FromUI416(ULONG ulIn, double *pDblOut); HRESULT WINAPI VarR8FromDec16(const DECIMAL* pDecIn, double *pDblOut); HRESULT WINAPI VarR8FromI816(LONG64 llIn, double *pDblOut); HRESULT WINAPI VarR8FromUI816(ULONG64 ullIn, double *pDblOut); HRESULT WINAPI VarR8Pow16(double dblLeft, double dblPow, double *pDblOut); HRESULT WINAPI VarR8Round16(double dblIn, int nDig, double *pDblOut); HRESULT WINAPI VarCyFromUI116(BYTE bIn, CY* pCyOut); HRESULT WINAPI VarCyFromI216(SHORT sIn, CY* pCyOut); HRESULT WINAPI VarCyFromI416(LONG lIn, CY* pCyOut); HRESULT WINAPI VarCyFromR416(FLOAT fltIn, CY* pCyOut); HRESULT WINAPI VarCyFromR816(double dblIn, CY* pCyOut); HRESULT WINAPI VarCyFromDate16(DATE dateIn, CY* pCyOut); HRESULT WINAPI VarCyFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, CY* pCyOut); HRESULT WINAPI VarCyFromDisp16(SEGPTR pdispIn, LCID lcid, CY* pCyOut); HRESULT WINAPI VarCyFromBool16(VARIANT_BOOL boolIn, CY* pCyOut); HRESULT WINAPI VarCyFromI116(signed char cIn, CY* pCyOut); HRESULT WINAPI VarCyFromUI216(USHORT usIn, CY* pCyOut); HRESULT WINAPI VarCyFromUI416(ULONG ulIn, CY* pCyOut); HRESULT WINAPI VarCyFromDec16(DECIMAL* pdecIn, CY* pCyOut); HRESULT WINAPI VarCyFromI816(LONG64 llIn, CY* pCyOut); HRESULT WINAPI VarCyFromUI816(ULONG64 ullIn, CY* pCyOut); HRESULT WINAPI VarCyAdd16(CY cyLeft, CY cyRight, CY* pCyOut); HRESULT WINAPI VarCyMul16(CY cyLeft, CY cyRight, CY* pCyOut); HRESULT WINAPI VarCyMulI416(CY cyLeft, LONG lRight, CY* pCyOut); HRESULT WINAPI VarCySub16(CY cyLeft, CY cyRight, CY* pCyOut); HRESULT WINAPI VarCyAbs16(CY cyIn, CY* pCyOut); HRESULT WINAPI VarCyFix16(CY cyIn, CY* pCyOut); HRESULT WINAPI VarCyInt16(CY cyIn, CY* pCyOut); HRESULT WINAPI VarCyNeg16(CY cyIn, CY* pCyOut); HRESULT WINAPI VarCyRound16(CY cyIn, int cDecimals, CY* pCyOut); HRESULT WINAPI VarCyCmp16(CY cyLeft, CY cyRight); HRESULT WINAPI VarCyCmpR816(CY cyLeft, double dblRight); HRESULT WINAPI VarCyMulI816(CY cyLeft, LONG64 llRight, CY* pCyOut); HRESULT WINAPI VarDecFromUI116(BYTE bIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromI216(SHORT sIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromI416(LONG lIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromR416(FLOAT fltIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromR816(double dblIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromDate16(DATE dateIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromCy16(CY cyIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromDisp16(SEGPTR pdispIn, LCID lcid, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromBool16(VARIANT_BOOL bIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromI116(signed char cIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromUI216(USHORT usIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromUI416(ULONG ulIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromI816(LONG64 llIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFromUI816(ULONG64 ullIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecAdd16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut); HRESULT WINAPI VarDecDiv16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut); HRESULT WINAPI VarDecMul16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut); HRESULT WINAPI VarDecSub16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut); HRESULT WINAPI VarDecAbs16(const DECIMAL* pDecIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecFix16(const DECIMAL* pDecIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecInt16(const DECIMAL* pDecIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecNeg16(const DECIMAL* pDecIn, DECIMAL* pDecOut); HRESULT WINAPI VarDecRound16(const DECIMAL* pDecIn, int cDecimals, DECIMAL* pDecOut); HRESULT WINAPI VarDecCmp16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight); HRESULT WINAPI VarDecCmpR816(const DECIMAL* pDecLeft, double dblRight); HRESULT WINAPI VarBoolFromUI116(BYTE bIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromI216(SHORT sIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromI416(LONG lIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromR416(FLOAT fltIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromR816(double dblIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromDate16(DATE dateIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromCy16(CY cyIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromDisp16(SEGPTR pdispIn, LCID lcid, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromI116(signed char cIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromUI216(USHORT usIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromUI416(ULONG ulIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromDec16(DECIMAL* pDecIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromI816(LONG64 llIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBoolFromUI816(ULONG64 ullIn, VARIANT_BOOL *pBoolOut); HRESULT WINAPI VarBstrFromUI116(BYTE bIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromI216(short sIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromI416(LONG lIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromR416(FLOAT fltIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromR816(double dblIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromCy16(CY cyIn, LCID lcid, ULONG dwFlags, SEGBSTR16 *pbstrOut); HRESULT WINAPI VarBstrFromDate16(DATE dateIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromBool16(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromI116(signed char cIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromUI216(USHORT usIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromUI416(ULONG ulIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromDec16(DECIMAL* pDecIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromI816(LONG64 llIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromUI816(ULONG64 ullIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrFromDisp16(SEGPTR pdispIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut); HRESULT WINAPI VarBstrCat16(SEGBSTR16 pbstrLeft, SEGBSTR16 pbstrRight, SEGBSTR16 *pbstrOut); HRESULT WINAPI VarBstrCmp16(SEGBSTR16 pbstrLeft, SEGBSTR16 pbstrRight, LCID lcid, DWORD dwFlags); HRESULT WINAPI VarDateFromUI116(BYTE bIn, DATE* pdateOut); HRESULT WINAPI VarDateFromI216(short sIn, DATE* pdateOut); HRESULT WINAPI VarDateFromI416(LONG lIn, DATE* pdateOut); HRESULT WINAPI VarDateFromR416(FLOAT fltIn, DATE* pdateOut); HRESULT WINAPI VarDateFromR816(double dblIn, DATE* pdateOut); HRESULT WINAPI VarDateFromDisp16(SEGPTR pdispIn, LCID lcid, DATE* pdateOut); HRESULT WINAPI VarDateFromBool16(VARIANT_BOOL boolIn, DATE* pdateOut); HRESULT WINAPI VarDateFromCy16(CY cyIn, DATE* pdateOut); HRESULT WINAPI VarDateFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, DATE* pdateOut); HRESULT WINAPI VarDateFromI116(signed char cIn, DATE* pdateOut); HRESULT WINAPI VarDateFromUI216(USHORT uiIn, DATE* pdateOut); HRESULT WINAPI VarDateFromUI416(ULONG ulIn, DATE* pdateOut); HRESULT WINAPI VarDateFromDec16(DECIMAL *pdecIn, DATE* pdateOut); HRESULT WINAPI VarDateFromI816(LONG64 llIn, DATE* pdateOut); HRESULT WINAPI VarDateFromUI816(ULONG64 ullIn, DATE* pdateOut); static inline const char *wine_dbgstr_variant16( const VARIANT16 *v ) { if (!v) return "(null)"; if (V_VT(v) & VT_BYREF) { if (V_VT(v) == (VT_VARIANT|VT_BYREF)) return wine_dbg_sprintf( "%p {VT_VARIANT|VT_BYREF: %s}", v, wine_dbgstr_variant16(V_VARIANTREF16(v)) ); if (V_VT(v) == (VT_BSTR|VT_BYREF)) return wine_dbg_sprintf( "%p {VT_BSTR|VT_BYREF: %s}", v, V_BSTRREF(v) ? wine_dbgstr_a(MapSL(*V_BSTRREF16(v))) : "(none)" ); return wine_dbg_sprintf( "%p {%s %p}", v, wine_dbgstr_vt(V_VT(v)), V_BYREF(v) ); } if (V_ISARRAY(v) || V_ISVECTOR(v)) return wine_dbg_sprintf( "%p {%s %p}", v, wine_dbgstr_vt(V_VT(v)), V_ARRAY(v) ); switch(V_VT(v)) { case VT_EMPTY: return wine_dbg_sprintf( "%p {VT_EMPTY}", v ); case VT_NULL: return wine_dbg_sprintf( "%p {VT_NULL}", v ); case VT_I2: return wine_dbg_sprintf( "%p {VT_I2: %d}", v, V_I2(v) ); case VT_I4: return wine_dbg_sprintf( "%p {VT_I4: %d}", v, V_I4(v) ); case VT_R4: return wine_dbg_sprintf( "%p {VT_R4: %f}", v, V_R4(v) ); case VT_R8: return wine_dbg_sprintf( "%p {VT_R8: %lf}", v, V_R8(v) ); case VT_CY: return wine_dbg_sprintf( "%p {VT_CY: %s}", v, wine_dbgstr_longlong(V_CY(v).int64) ); case VT_DATE: return wine_dbg_sprintf( "%p {VT_DATE: %lf}", v, V_DATE(v) ); case VT_LPSTR: return wine_dbg_sprintf( "%p {VT_LPSTR: %s}", v, wine_dbgstr_a((const char *)BSTR_PTR(V_BSTR(v))) ); case VT_LPWSTR: return wine_dbg_sprintf( "%p {VT_LPWSTR: %s}", v, wine_dbgstr_w((const char *)BSTR_PTR(V_BSTR(v))) ); case VT_BSTR: return wine_dbg_sprintf( "%p {VT_BSTR: %s}", v, wine_dbgstr_a((const char *)BSTR_PTR(V_BSTR(v))) ); case VT_DISPATCH: return wine_dbg_sprintf( "%p {VT_DISPATCH: %p}", v, V_DISPATCH(v) ); case VT_ERROR: return wine_dbg_sprintf( "%p {VT_ERROR: %08x}", v, V_ERROR(v) ); case VT_BOOL: return wine_dbg_sprintf( "%p {VT_BOOL: %x}", v, V_BOOL(v) ); case VT_UNKNOWN: return wine_dbg_sprintf( "%p {VT_UNKNOWN: %p}", v, V_UNKNOWN(v) ); case VT_I1: return wine_dbg_sprintf( "%p {VT_I1: %d}", v, V_I1(v) ); case VT_UI1: return wine_dbg_sprintf( "%p {VT_UI1: %u}", v, V_UI1(v) ); case VT_UI2: return wine_dbg_sprintf( "%p {VT_UI2: %d}", v, V_UI2(v) ); case VT_UI4: return wine_dbg_sprintf( "%p {VT_UI4: %d}", v, V_UI4(v) ); case VT_I8: return wine_dbg_sprintf( "%p {VT_I8: %s}", v, wine_dbgstr_longlong(V_I8(v)) ); case VT_UI8: return wine_dbg_sprintf( "%p {VT_UI8: %s}", v, wine_dbgstr_longlong(V_UI8(v)) ); case VT_INT: return wine_dbg_sprintf( "%p {VT_INT: %d}", v, V_INT(v) ); case VT_UINT: return wine_dbg_sprintf( "%p {VT_UINT: %u}", v, V_UINT(v) ); case VT_VOID: return wine_dbg_sprintf( "%p {VT_VOID}", v ); #ifdef AVAIL_32BIT_VAR case VT_RECORD: return wine_dbg_sprintf( "%p {VT_RECORD: %p %p}", v, V_RECORD(v), V_RECORDINFO(v) ); #endif default: return wine_dbg_sprintf( "%p {vt %s}", v, wine_dbgstr_vt(V_VT(v)) ); } } static inline const char *debugstr_variant16(const VARIANT16 *v) { return wine_dbgstr_variant16(v); } typedef struct tagDISPPARAMS16 { /* VARIANTARG* */SEGPTR rgvarg; /* DISPID* */SEGPTR rgdispidNamedArgs; UINT16 cArgs; UINT16 cNamedArgs; } DISPPARAMS16; SEGPTR WINAPI SafeArrayCreate16(VARTYPE vt, UINT16 cDims, SAFEARRAYBOUND16 *rgsabound); #ifdef AVAIL_32BIT_VAR #endif #endif /* !defined(__WINE_OLEAUT32_OLE2DISP_H) */ ================================================ FILE: ole2disp/ole2disp.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 ole2disp {2D769A3B-881A-4307-B6C9-02EBC61211A4} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled 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) ../wine Windows true $(OutDir)compobj.lib;$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; ntdll.lib;%(AdditionalDependencies) true ole2disp.def Level3 MaxSpeed true true 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) ../wine Windows true true true false ole2disp.def $(OutDir)compobj.lib;$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; ntdll.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" OLE2DISP > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: ole2disp/var/resource.h ================================================ /* * Resource defines for oleaut32 * * Copyright 2003 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WINE_OLEAUT32_RESOURCE_H #define WINE_OLEAUT32_RESOURCE_H #include /* Localised boolean text */ #define IDS_TRUE 100 #define IDS_FALSE 101 #define IDS_YES 102 #define IDS_NO 103 #define IDS_ON 104 #define IDS_OFF 105 /* Alternative month names. Note in XP these are localised only for Russian, * Polish and Arabic. */ #define IDS_MTH_1 106 #define IDS_MTH_2 107 #define IDS_MTH_3 108 #define IDS_MTH_4 109 #define IDS_MTH_5 110 #define IDS_MTH_6 111 #define IDS_MTH_7 112 #define IDS_MTH_8 113 #define IDS_MTH_9 114 #define IDS_MTH_10 115 #define IDS_MTH_11 116 #define IDS_MTH_12 117 #endif /* WINE_OLEAUT32_RESOURCE_H */ ================================================ FILE: ole2disp/var/varformat.c ================================================ #if 0 /* * Variant formatting functions * * Copyright 2008 Damjan Jovanovic * Copyright 2003 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * NOTES * Since the formatting functions aren't properly documented, I used the * Visual Basic documentation as a guide to implementing these functions. This * means that some named or user-defined formats may work slightly differently. * Please submit a test case if you find a difference. */ #include "config.h" #include #include #include #include #include "windef.h" #include "winbase.h" #include "wine/unicode.h" #include "winerror.h" #include "variant.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(variant); /* Make sure internal conversions to strings use the '.','+'/'-' and ',' * format chars from the US locale. This enables us to parse the created * strings to determine the number of decimal places, exponent, etc. */ #define LCID_US MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT) static const WCHAR szPercent_d[] = { '%','d','\0' }; static const WCHAR szPercentZeroTwo_d[] = { '%','0','2','d','\0' }; static const WCHAR szPercentZeroStar_d[] = { '%','0','*','d','\0' }; /****************************************************************************** * Variant-Formats {OLEAUT32} * * NOTES * When formatting a variant a variety of format strings may be used to generate * different kinds of formatted output. A format string consists of either a named * format, or a user-defined format. * * The following named formats are defined: *| Name Description *| ---- ----------- *| General Date Display Date, and time for non-integer values *| Short Date Short date format as defined by locale settings *| Medium Date Medium date format as defined by locale settings *| Long Date Long date format as defined by locale settings *| Short Time Short Time format as defined by locale settings *| Medium Time Medium time format as defined by locale settings *| Long Time Long time format as defined by locale settings *| True/False Localised text of "True" or "False" *| Yes/No Localised text of "Yes" or "No" *| On/Off Localised text of "On" or "Off" *| General Number No thousands separator. No decimal points for integers *| Currency General currency format using localised characters *| Fixed At least one whole and two fractional digits *| Standard Same as 'Fixed', but including decimal separators *| Percent Multiply by 100 and display a trailing '%' character *| Scientific Display with exponent * * User-defined formats consist of a combination of tokens and literal * characters. Literal characters are copied unmodified to the formatted * output at the position they occupy in the format string. Any character * that is not recognised as a token is treated as a literal. A literal can * also be specified by preceding it with a backslash character * (e.g. "\L\i\t\e\r\a\l") or enclosing it in double quotes. * * A user-defined format can have up to 4 sections, depending on the type of * format. The following table lists sections and their meaning: *| Format Type Sections Meaning *| ----------- -------- ------- *| Number 1 Use the same format for all numbers *| Number 2 Use format 1 for positive and 2 for negative numbers *| Number 3 Use format 1 for positive, 2 for zero, and 3 *| for negative numbers. *| Number 4 Use format 1 for positive, 2 for zero, 3 for *| negative, and 4 for null numbers. *| String 1 Use the same format for all strings *| String 2 Use format 2 for null and empty strings, otherwise *| use format 1. *| Date 1 Use the same format for all dates * * The formatting tokens fall into several categories depending on the type * of formatted output. For more information on each type, see * VarFormat-Dates(), VarFormat-Strings() and VarFormat-Numbers(). * * SEE ALSO * VarTokenizeFormatString(), VarFormatFromTokens(), VarFormat(), * VarFormatDateTime(), VarFormatNumber(), VarFormatCurrency(). */ /****************************************************************************** * VarFormat-Strings {OLEAUT32} * * NOTES * When formatting a variant as a string, it is first converted to a VT_BSTR. * The user-format string defines which characters are copied into which * positions in the output string. Literals may be inserted in the format * string. When creating the formatted string, excess characters in the string * (those not consumed by a token) are appended to the end of the output. If * there are more tokens than characters in the string to format, spaces will * be inserted at the start of the string if the '@' token was used. * * By default strings are converted to lowercase, or uppercase if the '>' token * is encountered. This applies to the whole string: it is not possible to * generate a mixed-case output string. * * In user-defined string formats, the following tokens are recognised: *| Token Description *| ----- ----------- *| '@' Copy a char from the source, or a space if no chars are left. *| '&' Copy a char from the source, or write nothing if no chars are left. *| '<' Output the whole string as lower-case (the default). *| '>' Output the whole string as upper-case. *| '!' MSDN indicates that this character should cause right-to-left *| copying, however tests show that it is tokenised but not processed. */ /* * Common format definitions */ /* Format types */ #define FMT_TYPE_UNKNOWN 0x0 #define FMT_TYPE_GENERAL 0x1 #define FMT_TYPE_NUMBER 0x2 #define FMT_TYPE_DATE 0x3 #define FMT_TYPE_STRING 0x4 #define FMT_TO_STRING 0x0 /* If header->size == this, act like VB's Str() fn */ typedef struct tagFMT_SHORT_HEADER { BYTE size; /* Size of tokenised block (including header), or FMT_TO_STRING */ BYTE type; /* Allowable types (FMT_TYPE_*) */ BYTE offset[1]; /* Offset of the first (and only) format section */ } FMT_SHORT_HEADER; typedef struct tagFMT_HEADER { BYTE size; /* Total size of the whole tokenised block (including header) */ BYTE type; /* Allowable types (FMT_TYPE_*) */ BYTE starts[4]; /* Offset of each of the 4 format sections, or 0 if none */ } FMT_HEADER; #define FmtGetPositive(x) (x->starts[0]) #define FmtGetNegative(x) (x->starts[1] ? x->starts[1] : x->starts[0]) #define FmtGetZero(x) (x->starts[2] ? x->starts[2] : x->starts[0]) #define FmtGetNull(x) (x->starts[3] ? x->starts[3] : x->starts[0]) /* * String formats */ #define FMT_FLAG_LT 0x1 /* Has '<' (lower case) */ #define FMT_FLAG_GT 0x2 /* Has '>' (upper case) */ #define FMT_FLAG_RTL 0x4 /* Has '!' (Copy right to left) */ typedef struct tagFMT_STRING_HEADER { BYTE flags; /* LT, GT, RTL */ BYTE unknown1; BYTE unknown2; BYTE copy_chars; /* Number of chars to be copied */ BYTE unknown3; } FMT_STRING_HEADER; /* * Number formats */ #define FMT_FLAG_PERCENT 0x1 /* Has '%' (Percentage) */ #define FMT_FLAG_EXPONENT 0x2 /* Has 'e' (Exponent/Scientific notation) */ #define FMT_FLAG_THOUSANDS 0x4 /* Has ',' (Standard use of the thousands separator) */ #define FMT_FLAG_BOOL 0x20 /* Boolean format */ typedef struct tagFMT_NUMBER_HEADER { BYTE flags; /* PERCENT, EXPONENT, THOUSANDS, BOOL */ BYTE multiplier; /* Multiplier, 100 for percentages */ BYTE divisor; /* Divisor, 1000 if '%%' was used */ BYTE whole; /* Number of digits before the decimal point */ BYTE fractional; /* Number of digits after the decimal point */ } FMT_NUMBER_HEADER; /* * Date Formats */ typedef struct tagFMT_DATE_HEADER { BYTE flags; BYTE unknown1; BYTE unknown2; BYTE unknown3; BYTE unknown4; } FMT_DATE_HEADER; /* * Format token values */ #define FMT_GEN_COPY 0x00 /* \n, "lit" => 0,pos,len: Copy len chars from input+pos */ #define FMT_GEN_INLINE 0x01 /* => 1,len,[chars]: Copy len chars from token stream */ #define FMT_GEN_END 0x02 /* \0,; => 2: End of the tokenised format */ #define FMT_DATE_TIME_SEP 0x03 /* Time separator char */ #define FMT_DATE_DATE_SEP 0x04 /* Date separator char */ #define FMT_DATE_GENERAL 0x05 /* General format date */ #define FMT_DATE_QUARTER 0x06 /* Quarter of the year from 1-4 */ #define FMT_DATE_TIME_SYS 0x07 /* System long time format */ #define FMT_DATE_DAY 0x08 /* Day with no leading 0 */ #define FMT_DATE_DAY_0 0x09 /* Day with leading 0 */ #define FMT_DATE_DAY_SHORT 0x0A /* Short day name */ #define FMT_DATE_DAY_LONG 0x0B /* Long day name */ #define FMT_DATE_SHORT 0x0C /* Short date format */ #define FMT_DATE_LONG 0x0D /* Long date format */ #define FMT_DATE_MEDIUM 0x0E /* Medium date format */ #define FMT_DATE_DAY_WEEK 0x0F /* First day of the week */ #define FMT_DATE_WEEK_YEAR 0x10 /* First week of the year */ #define FMT_DATE_MON 0x11 /* Month with no leading 0 */ #define FMT_DATE_MON_0 0x12 /* Month with leading 0 */ #define FMT_DATE_MON_SHORT 0x13 /* Short month name */ #define FMT_DATE_MON_LONG 0x14 /* Long month name */ #define FMT_DATE_YEAR_DOY 0x15 /* Day of the year with no leading 0 */ #define FMT_DATE_YEAR_0 0x16 /* 2 digit year with leading 0 */ /* NOTE: token 0x17 is not defined, 'yyy' is not valid */ #define FMT_DATE_YEAR_LONG 0x18 /* 4 digit year */ #define FMT_DATE_MIN 0x1A /* Minutes with no leading 0 */ #define FMT_DATE_MIN_0 0x1B /* Minutes with leading 0 */ #define FMT_DATE_SEC 0x1C /* Seconds with no leading 0 */ #define FMT_DATE_SEC_0 0x1D /* Seconds with leading 0 */ #define FMT_DATE_HOUR 0x1E /* Hours with no leading 0 */ #define FMT_DATE_HOUR_0 0x1F /* Hours with leading 0 */ #define FMT_DATE_HOUR_12 0x20 /* Hours with no leading 0, 12 hour clock */ #define FMT_DATE_HOUR_12_0 0x21 /* Hours with leading 0, 12 hour clock */ #define FMT_DATE_TIME_UNK2 0x23 /* same as FMT_DATE_HOUR_0, for "short time" format */ /* FIXME: probably missing some here */ #define FMT_DATE_AMPM_SYS1 0x2E /* AM/PM as defined by system settings */ #define FMT_DATE_AMPM_UPPER 0x2F /* Upper-case AM or PM */ #define FMT_DATE_A_UPPER 0x30 /* Upper-case A or P */ #define FMT_DATE_AMPM_SYS2 0x31 /* AM/PM as defined by system settings */ #define FMT_DATE_AMPM_LOWER 0x32 /* Lower-case AM or PM */ #define FMT_DATE_A_LOWER 0x33 /* Lower-case A or P */ #define FMT_NUM_COPY_ZERO 0x34 /* Copy 1 digit or 0 if no digit */ #define FMT_NUM_COPY_SKIP 0x35 /* Copy 1 digit or skip if no digit */ #define FMT_NUM_DECIMAL 0x36 /* Decimal separator */ #define FMT_NUM_EXP_POS_U 0x37 /* Scientific notation, uppercase, + sign */ #define FMT_NUM_EXP_NEG_U 0x38 /* Scientific notation, uppercase, - sign */ #define FMT_NUM_EXP_POS_L 0x39 /* Scientific notation, lowercase, + sign */ #define FMT_NUM_EXP_NEG_L 0x3A /* Scientific notation, lowercase, - sign */ #define FMT_NUM_CURRENCY 0x3B /* Currency symbol */ #define FMT_NUM_TRUE_FALSE 0x3D /* Convert to "True" or "False" */ #define FMT_NUM_YES_NO 0x3E /* Convert to "Yes" or "No" */ #define FMT_NUM_ON_OFF 0x3F /* Convert to "On" or "Off" */ #define FMT_STR_COPY_SPACE 0x40 /* Copy len chars with space if no char */ #define FMT_STR_COPY_SKIP 0x41 /* Copy len chars or skip if no char */ /* Named Formats and their tokenised values */ static const WCHAR szGeneralDate[] = { 'G','e','n','e','r','a','l',' ','D','a','t','e','\0' }; static const BYTE fmtGeneralDate[0x0a] = { 0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER), 0x0,0x0,0x0,0x0,0x0, FMT_DATE_GENERAL,FMT_GEN_END }; static const WCHAR szShortDate[] = { 'S','h','o','r','t',' ','D','a','t','e','\0' }; static const BYTE fmtShortDate[0x0a] = { 0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER), 0x0,0x0,0x0,0x0,0x0, FMT_DATE_SHORT,FMT_GEN_END }; static const WCHAR szMediumDate[] = { 'M','e','d','i','u','m',' ','D','a','t','e','\0' }; static const BYTE fmtMediumDate[0x0a] = { 0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER), 0x0,0x0,0x0,0x0,0x0, FMT_DATE_MEDIUM,FMT_GEN_END }; static const WCHAR szLongDate[] = { 'L','o','n','g',' ','D','a','t','e','\0' }; static const BYTE fmtLongDate[0x0a] = { 0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER), 0x0,0x0,0x0,0x0,0x0, FMT_DATE_LONG,FMT_GEN_END }; static const WCHAR szShortTime[] = { 'S','h','o','r','t',' ','T','i','m','e','\0' }; static const BYTE fmtShortTime[0x0c] = { 0x0c,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER), 0x0,0x0,0x0,0x0,0x0, FMT_DATE_TIME_UNK2,FMT_DATE_TIME_SEP,FMT_DATE_MIN_0,FMT_GEN_END }; static const WCHAR szMediumTime[] = { 'M','e','d','i','u','m',' ','T','i','m','e','\0' }; static const BYTE fmtMediumTime[0x11] = { 0x11,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER), 0x0,0x0,0x0,0x0,0x0, FMT_DATE_HOUR_12_0,FMT_DATE_TIME_SEP,FMT_DATE_MIN_0, FMT_GEN_INLINE,0x01,' ','\0',FMT_DATE_AMPM_SYS1,FMT_GEN_END }; static const WCHAR szLongTime[] = { 'L','o','n','g',' ','T','i','m','e','\0' }; static const BYTE fmtLongTime[0x0d] = { 0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER), 0x0,0x0,0x0,0x0,0x0, FMT_DATE_TIME_SYS,FMT_GEN_END }; static const WCHAR szTrueFalse[] = { 'T','r','u','e','/','F','a','l','s','e','\0' }; static const BYTE fmtTrueFalse[0x0d] = { 0x0d,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0, FMT_FLAG_BOOL,0x0,0x0,0x0,0x0, FMT_NUM_TRUE_FALSE,FMT_GEN_END }; static const WCHAR szYesNo[] = { 'Y','e','s','/','N','o','\0' }; static const BYTE fmtYesNo[0x0d] = { 0x0d,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0, FMT_FLAG_BOOL,0x0,0x0,0x0,0x0, FMT_NUM_YES_NO,FMT_GEN_END }; static const WCHAR szOnOff[] = { 'O','n','/','O','f','f','\0' }; static const BYTE fmtOnOff[0x0d] = { 0x0d,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0, FMT_FLAG_BOOL,0x0,0x0,0x0,0x0, FMT_NUM_ON_OFF,FMT_GEN_END }; static const WCHAR szGeneralNumber[] = { 'G','e','n','e','r','a','l',' ','N','u','m','b','e','r','\0' }; static const BYTE fmtGeneralNumber[sizeof(FMT_HEADER)] = { sizeof(FMT_HEADER),FMT_TYPE_GENERAL,sizeof(FMT_HEADER),0x0,0x0,0x0 }; static const WCHAR szCurrency[] = { 'C','u','r','r','e','n','c','y','\0' }; static const BYTE fmtCurrency[0x26] = { 0x26,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x12,0x0,0x0, /* Positive numbers */ FMT_FLAG_THOUSANDS,0xcc,0x0,0x1,0x2, FMT_NUM_CURRENCY,FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2, FMT_GEN_END, /* Negative numbers */ FMT_FLAG_THOUSANDS,0xcc,0x0,0x1,0x2, FMT_GEN_INLINE,0x1,'(','\0',FMT_NUM_CURRENCY,FMT_NUM_COPY_ZERO,0x1, FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,FMT_GEN_INLINE,0x1,')','\0', FMT_GEN_END }; static const WCHAR szFixed[] = { 'F','i','x','e','d','\0' }; static const BYTE fmtFixed[0x11] = { 0x11,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0, 0x0,0x0,0x0,0x1,0x2, FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,FMT_GEN_END }; static const WCHAR szStandard[] = { 'S','t','a','n','d','a','r','d','\0' }; static const BYTE fmtStandard[0x11] = { 0x11,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0, FMT_FLAG_THOUSANDS,0x0,0x0,0x1,0x2, FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,FMT_GEN_END }; static const WCHAR szPercent[] = { 'P','e','r','c','e','n','t','\0' }; static const BYTE fmtPercent[0x15] = { 0x15,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0, FMT_FLAG_PERCENT,0x1,0x0,0x1,0x2, FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2, FMT_GEN_INLINE,0x1,'%','\0',FMT_GEN_END }; static const WCHAR szScientific[] = { 'S','c','i','e','n','t','i','f','i','c','\0' }; static const BYTE fmtScientific[0x13] = { 0x13,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0, FMT_FLAG_EXPONENT,0x0,0x0,0x1,0x2, FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,FMT_NUM_EXP_POS_U,0x2,FMT_GEN_END }; typedef struct tagNAMED_FORMAT { LPCWSTR name; const BYTE* format; } NAMED_FORMAT; /* Format name to tokenised format. Must be kept sorted by name */ static const NAMED_FORMAT VARIANT_NamedFormats[] = { { szCurrency, fmtCurrency }, { szFixed, fmtFixed }, { szGeneralDate, fmtGeneralDate }, { szGeneralNumber, fmtGeneralNumber }, { szLongDate, fmtLongDate }, { szLongTime, fmtLongTime }, { szMediumDate, fmtMediumDate }, { szMediumTime, fmtMediumTime }, { szOnOff, fmtOnOff }, { szPercent, fmtPercent }, { szScientific, fmtScientific }, { szShortDate, fmtShortDate }, { szShortTime, fmtShortTime }, { szStandard, fmtStandard }, { szTrueFalse, fmtTrueFalse }, { szYesNo, fmtYesNo } }; typedef const NAMED_FORMAT *LPCNAMED_FORMAT; static int FormatCompareFn(const void *l, const void *r) { return strcmpiW(((LPCNAMED_FORMAT)l)->name, ((LPCNAMED_FORMAT)r)->name); } static inline const BYTE *VARIANT_GetNamedFormat(LPCWSTR lpszFormat) { NAMED_FORMAT key; LPCNAMED_FORMAT fmt; key.name = lpszFormat; fmt = bsearch(&key, VARIANT_NamedFormats, ARRAY_SIZE(VARIANT_NamedFormats), sizeof(NAMED_FORMAT), FormatCompareFn); return fmt ? fmt->format : NULL; } /* Return an error if the token for the value will not fit in the destination */ #define NEED_SPACE(x) if (cbTok < (int)(x)) return TYPE_E_BUFFERTOOSMALL; cbTok -= (x) /* Non-zero if the format is unknown or a given type */ #define COULD_BE(typ) ((!fmt_number && header->type==FMT_TYPE_UNKNOWN)||header->type==typ) /* State during tokenising */ #define FMT_STATE_OPEN_COPY 0x1 /* Last token written was a copy */ #define FMT_STATE_WROTE_DECIMAL 0x2 /* Already wrote a decimal separator */ #define FMT_STATE_SEEN_HOURS 0x4 /* See the hh specifier */ #define FMT_STATE_WROTE_MINUTES 0x8 /* Wrote minutes */ /********************************************************************** * VarTokenizeFormatString [OLEAUT32.140] * * Convert a format string into tokenised form. * * PARAMS * lpszFormat [I] Format string to tokenise * rgbTok [O] Destination for tokenised format * cbTok [I] Size of rgbTok in bytes * nFirstDay [I] First day of the week (1-7, or 0 for current system default) * nFirstWeek [I] How to treat the first week (see notes) * lcid [I] Locale Id of the format string * pcbActual [O] If non-NULL, filled with the first token generated * * RETURNS * Success: S_OK. rgbTok contains the tokenised format. * Failure: E_INVALIDARG, if any argument is invalid. * TYPE_E_BUFFERTOOSMALL, if rgbTok is not large enough. * * NOTES * Valid values for the nFirstWeek parameter are: *| Value Meaning *| ----- ------- *| 0 Use the current system default *| 1 The first week is that containing Jan 1 *| 2 Four or more days of the first week are in the current year *| 3 The first week is 7 days long * See Variant-Formats(), VarFormatFromTokens(). */ HRESULT WINAPI VarTokenizeFormatString(LPOLESTR lpszFormat, LPBYTE rgbTok, int cbTok, int nFirstDay, int nFirstWeek, LCID lcid, int *pcbActual) { /* Note: none of these strings should be NUL terminated */ static const WCHAR szTTTTT[] = { 't','t','t','t','t' }; static const WCHAR szAMPM[] = { 'A','M','P','M' }; static const WCHAR szampm[] = { 'a','m','p','m' }; static const WCHAR szAMSlashPM[] = { 'A','M','/','P','M' }; static const WCHAR szamSlashpm[] = { 'a','m','/','p','m' }; const BYTE *namedFmt; FMT_HEADER *header = (FMT_HEADER*)rgbTok; FMT_STRING_HEADER *str_header = (FMT_STRING_HEADER*)(rgbTok + sizeof(FMT_HEADER)); FMT_NUMBER_HEADER *num_header = (FMT_NUMBER_HEADER*)str_header; BYTE* pOut = rgbTok + sizeof(FMT_HEADER) + sizeof(FMT_STRING_HEADER); BYTE* pLastHours = NULL; BYTE fmt_number = 0; DWORD fmt_state = 0; LPCWSTR pFormat = lpszFormat; TRACE("(%s,%p,%d,%d,%d,0x%08x,%p)\n", debugstr_w(lpszFormat), rgbTok, cbTok, nFirstDay, nFirstWeek, lcid, pcbActual); if (!rgbTok || nFirstDay < 0 || nFirstDay > 7 || nFirstWeek < 0 || nFirstWeek > 3) return E_INVALIDARG; if (!lpszFormat || !*lpszFormat) { /* An empty string means 'general format' */ NEED_SPACE(sizeof(BYTE)); *rgbTok = FMT_TO_STRING; if (pcbActual) *pcbActual = FMT_TO_STRING; return S_OK; } if (cbTok > 255) cbTok = 255; /* Ensure we error instead of wrapping */ /* Named formats */ namedFmt = VARIANT_GetNamedFormat(lpszFormat); if (namedFmt) { NEED_SPACE(namedFmt[0]); memcpy(rgbTok, namedFmt, namedFmt[0]); TRACE("Using pre-tokenised named format %s\n", debugstr_w(lpszFormat)); /* FIXME: pcbActual */ return S_OK; } /* Insert header */ NEED_SPACE(sizeof(FMT_HEADER) + sizeof(FMT_STRING_HEADER)); memset(header, 0, sizeof(FMT_HEADER)); memset(str_header, 0, sizeof(FMT_STRING_HEADER)); header->starts[fmt_number] = sizeof(FMT_HEADER); while (*pFormat) { /* -------------- * General tokens * -------------- */ if (*pFormat == ';') { while (*pFormat == ';') { TRACE(";\n"); if (++fmt_number > 3) return E_INVALIDARG; /* too many formats */ pFormat++; } if (*pFormat) { TRACE("New header\n"); NEED_SPACE(sizeof(BYTE) + sizeof(FMT_STRING_HEADER)); *pOut++ = FMT_GEN_END; header->starts[fmt_number] = pOut - rgbTok; str_header = (FMT_STRING_HEADER*)pOut; num_header = (FMT_NUMBER_HEADER*)pOut; memset(str_header, 0, sizeof(FMT_STRING_HEADER)); pOut += sizeof(FMT_STRING_HEADER); fmt_state = 0; pLastHours = NULL; } } else if (*pFormat == '\\') { /* Escaped character */ if (pFormat[1]) { NEED_SPACE(3 * sizeof(BYTE)); pFormat++; *pOut++ = FMT_GEN_COPY; *pOut++ = pFormat - lpszFormat; *pOut++ = 0x1; fmt_state |= FMT_STATE_OPEN_COPY; TRACE("'\\'\n"); } else fmt_state &= ~FMT_STATE_OPEN_COPY; pFormat++; } else if (*pFormat == '"') { /* Escaped string * Note: Native encodes "" as a copy of length zero. That's just dumb, so * here we avoid encoding anything in this case. */ if (!pFormat[1]) pFormat++; else if (pFormat[1] == '"') { pFormat += 2; } else { LPCWSTR start = ++pFormat; while (*pFormat && *pFormat != '"') pFormat++; NEED_SPACE(3 * sizeof(BYTE)); *pOut++ = FMT_GEN_COPY; *pOut++ = start - lpszFormat; *pOut++ = pFormat - start; if (*pFormat == '"') pFormat++; TRACE("Quoted string pos %d, len %d\n", pOut[-2], pOut[-1]); } fmt_state &= ~FMT_STATE_OPEN_COPY; } /* ------------- * Number tokens * ------------- */ else if (*pFormat == '0' && COULD_BE(FMT_TYPE_NUMBER)) { /* Number formats: Digit from number or '0' if no digits * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_NUMBER; NEED_SPACE(2 * sizeof(BYTE)); *pOut++ = FMT_NUM_COPY_ZERO; *pOut = 0x0; while (*pFormat == '0') { *pOut = *pOut + 1; pFormat++; } if (fmt_state & FMT_STATE_WROTE_DECIMAL) num_header->fractional += *pOut; else num_header->whole += *pOut; TRACE("%d 0's\n", *pOut); pOut++; fmt_state &= ~FMT_STATE_OPEN_COPY; } else if (*pFormat == '#' && COULD_BE(FMT_TYPE_NUMBER)) { /* Number formats: Digit from number or blank if no digits * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_NUMBER; NEED_SPACE(2 * sizeof(BYTE)); *pOut++ = FMT_NUM_COPY_SKIP; *pOut = 0x0; while (*pFormat == '#') { *pOut = *pOut + 1; pFormat++; } if (fmt_state & FMT_STATE_WROTE_DECIMAL) num_header->fractional += *pOut; else num_header->whole += *pOut; TRACE("%d #'s\n", *pOut); pOut++; fmt_state &= ~FMT_STATE_OPEN_COPY; } else if (*pFormat == '.' && COULD_BE(FMT_TYPE_NUMBER) && !(fmt_state & FMT_STATE_WROTE_DECIMAL)) { /* Number formats: Decimal separator when 1st seen, literal thereafter * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_NUMBER; NEED_SPACE(sizeof(BYTE)); *pOut++ = FMT_NUM_DECIMAL; fmt_state |= FMT_STATE_WROTE_DECIMAL; fmt_state &= ~FMT_STATE_OPEN_COPY; pFormat++; TRACE("decimal sep\n"); } else if ((*pFormat == 'e' || *pFormat == 'E') && (pFormat[1] == '-' || pFormat[1] == '+') && header->type == FMT_TYPE_NUMBER) { /* Number formats: Exponent specifier * Other formats: Literal */ num_header->flags |= FMT_FLAG_EXPONENT; NEED_SPACE(2 * sizeof(BYTE)); if (*pFormat == 'e') { if (pFormat[1] == '+') *pOut = FMT_NUM_EXP_POS_L; else *pOut = FMT_NUM_EXP_NEG_L; } else { if (pFormat[1] == '+') *pOut = FMT_NUM_EXP_POS_U; else *pOut = FMT_NUM_EXP_NEG_U; } pFormat += 2; *++pOut = 0x0; while (*pFormat == '0') { *pOut = *pOut + 1; pFormat++; } pOut++; TRACE("exponent\n"); } /* FIXME: %% => Divide by 1000 */ else if (*pFormat == ',' && header->type == FMT_TYPE_NUMBER) { /* Number formats: Use the thousands separator * Other formats: Literal */ num_header->flags |= FMT_FLAG_THOUSANDS; pFormat++; fmt_state &= ~FMT_STATE_OPEN_COPY; TRACE("thousands sep\n"); } /* ----------- * Date tokens * ----------- */ else if (*pFormat == '/' && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Date separator * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); *pOut++ = FMT_DATE_DATE_SEP; pFormat++; fmt_state &= ~FMT_STATE_OPEN_COPY; TRACE("date sep\n"); } else if (*pFormat == ':' && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Time separator * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); *pOut++ = FMT_DATE_TIME_SEP; pFormat++; fmt_state &= ~FMT_STATE_OPEN_COPY; TRACE("time sep\n"); } else if ((*pFormat == 'a' || *pFormat == 'A') && !strncmpiW(pFormat, szAMPM, ARRAY_SIZE(szAMPM))) { /* Date formats: System AM/PM designation * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat += ARRAY_SIZE(szAMPM); if (!strncmpW(pFormat, szampm, ARRAY_SIZE(szampm))) *pOut++ = FMT_DATE_AMPM_SYS2; else *pOut++ = FMT_DATE_AMPM_SYS1; if (pLastHours) *pLastHours = *pLastHours + 2; TRACE("ampm\n"); } else if (*pFormat == 'a' && pFormat[1] == '/' && (pFormat[2] == 'p' || pFormat[2] == 'P')) { /* Date formats: lowercase a or p designation * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat += 3; *pOut++ = FMT_DATE_A_LOWER; if (pLastHours) *pLastHours = *pLastHours + 2; TRACE("a/p\n"); } else if (*pFormat == 'A' && pFormat[1] == '/' && (pFormat[2] == 'p' || pFormat[2] == 'P')) { /* Date formats: Uppercase a or p designation * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat += 3; *pOut++ = FMT_DATE_A_UPPER; if (pLastHours) *pLastHours = *pLastHours + 2; TRACE("A/P\n"); } else if (*pFormat == 'a' && !strncmpW(pFormat, szamSlashpm, ARRAY_SIZE(szamSlashpm))) { /* Date formats: lowercase AM or PM designation * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat += ARRAY_SIZE(szamSlashpm); *pOut++ = FMT_DATE_AMPM_LOWER; if (pLastHours) *pLastHours = *pLastHours + 2; TRACE("AM/PM\n"); } else if (*pFormat == 'A' && !strncmpW(pFormat, szAMSlashPM, ARRAY_SIZE(szAMSlashPM))) { /* Date formats: Uppercase AM or PM designation * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat += ARRAY_SIZE(szAMSlashPM); *pOut++ = FMT_DATE_AMPM_UPPER; TRACE("AM/PM\n"); } else if ((*pFormat == 'c' || *pFormat == 'C') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: General date format * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat += ARRAY_SIZE(szAMSlashPM); *pOut++ = FMT_DATE_GENERAL; TRACE("gen date\n"); } else if ((*pFormat == 'd' || *pFormat == 'D') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Day specifier * Other formats: Literal * Types the format if found */ int count = -1; header->type = FMT_TYPE_DATE; while ((*pFormat == 'd' || *pFormat == 'D') && count < 6) { pFormat++; count++; } NEED_SPACE(sizeof(BYTE)); *pOut++ = FMT_DATE_DAY + count; fmt_state &= ~FMT_STATE_OPEN_COPY; /* When we find the days token, reset the seen hours state so that * 'mm' is again written as month when encountered. */ fmt_state &= ~FMT_STATE_SEEN_HOURS; TRACE("%d d's\n", count + 1); } else if ((*pFormat == 'h' || *pFormat == 'H') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Hour specifier * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat++; /* Record the position of the hours specifier - if we encounter * an am/pm specifier we will change the hours from 24 to 12. */ pLastHours = pOut; if (*pFormat == 'h' || *pFormat == 'H') { pFormat++; *pOut++ = FMT_DATE_HOUR_0; TRACE("hh\n"); } else { *pOut++ = FMT_DATE_HOUR; TRACE("h\n"); } fmt_state &= ~FMT_STATE_OPEN_COPY; /* Note that now we have seen an hours token, the next occurrence of * 'mm' indicates minutes, not months. */ fmt_state |= FMT_STATE_SEEN_HOURS; } else if ((*pFormat == 'm' || *pFormat == 'M') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Month specifier (or Minute specifier, after hour specifier) * Other formats: Literal * Types the format if found */ int count = -1; header->type = FMT_TYPE_DATE; while ((*pFormat == 'm' || *pFormat == 'M') && count < 4) { pFormat++; count++; } NEED_SPACE(sizeof(BYTE)); if (count <= 1 && fmt_state & FMT_STATE_SEEN_HOURS && !(fmt_state & FMT_STATE_WROTE_MINUTES)) { /* We have seen an hours specifier and not yet written a minutes * specifier. Write this as minutes and thereafter as months. */ *pOut++ = count == 1 ? FMT_DATE_MIN_0 : FMT_DATE_MIN; fmt_state |= FMT_STATE_WROTE_MINUTES; /* Hereafter write months */ } else *pOut++ = FMT_DATE_MON + count; /* Months */ fmt_state &= ~FMT_STATE_OPEN_COPY; TRACE("%d m's\n", count + 1); } else if ((*pFormat == 'n' || *pFormat == 'N') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Minute specifier * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat++; if (*pFormat == 'n' || *pFormat == 'N') { pFormat++; *pOut++ = FMT_DATE_MIN_0; TRACE("nn\n"); } else { *pOut++ = FMT_DATE_MIN; TRACE("n\n"); } fmt_state &= ~FMT_STATE_OPEN_COPY; } else if ((*pFormat == 'q' || *pFormat == 'Q') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Quarter specifier * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); *pOut++ = FMT_DATE_QUARTER; pFormat++; fmt_state &= ~FMT_STATE_OPEN_COPY; TRACE("quarter\n"); } else if ((*pFormat == 's' || *pFormat == 'S') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Second specifier * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; NEED_SPACE(sizeof(BYTE)); pFormat++; if (*pFormat == 's' || *pFormat == 'S') { pFormat++; *pOut++ = FMT_DATE_SEC_0; TRACE("ss\n"); } else { *pOut++ = FMT_DATE_SEC; TRACE("s\n"); } fmt_state &= ~FMT_STATE_OPEN_COPY; } else if ((*pFormat == 't' || *pFormat == 'T') && !strncmpiW(pFormat, szTTTTT, ARRAY_SIZE(szTTTTT))) { /* Date formats: System time specifier * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; pFormat += ARRAY_SIZE(szTTTTT); NEED_SPACE(sizeof(BYTE)); *pOut++ = FMT_DATE_TIME_SYS; fmt_state &= ~FMT_STATE_OPEN_COPY; } else if ((*pFormat == 'w' || *pFormat == 'W') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Week of the year/Day of the week * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_DATE; pFormat++; if (*pFormat == 'w' || *pFormat == 'W') { NEED_SPACE(3 * sizeof(BYTE)); pFormat++; *pOut++ = FMT_DATE_WEEK_YEAR; *pOut++ = nFirstDay; *pOut++ = nFirstWeek; TRACE("ww\n"); } else { NEED_SPACE(2 * sizeof(BYTE)); *pOut++ = FMT_DATE_DAY_WEEK; *pOut++ = nFirstDay; TRACE("w\n"); } fmt_state &= ~FMT_STATE_OPEN_COPY; } else if ((*pFormat == 'y' || *pFormat == 'Y') && COULD_BE(FMT_TYPE_DATE)) { /* Date formats: Day of year/Year specifier * Other formats: Literal * Types the format if found */ int count = -1; header->type = FMT_TYPE_DATE; while ((*pFormat == 'y' || *pFormat == 'Y') && count < 4) { pFormat++; count++; } if (count == 2) { count--; /* 'yyy' has no meaning, despite what MSDN says */ pFormat--; } NEED_SPACE(sizeof(BYTE)); *pOut++ = FMT_DATE_YEAR_DOY + count; fmt_state &= ~FMT_STATE_OPEN_COPY; TRACE("%d y's\n", count + 1); } /* ------------- * String tokens * ------------- */ else if (*pFormat == '@' && COULD_BE(FMT_TYPE_STRING)) { /* String formats: Character from string or space if no char * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_STRING; NEED_SPACE(2 * sizeof(BYTE)); *pOut++ = FMT_STR_COPY_SPACE; *pOut = 0x0; while (*pFormat == '@') { *pOut = *pOut + 1; str_header->copy_chars++; pFormat++; } TRACE("%d @'s\n", *pOut); pOut++; fmt_state &= ~FMT_STATE_OPEN_COPY; } else if (*pFormat == '&' && COULD_BE(FMT_TYPE_STRING)) { /* String formats: Character from string or skip if no char * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_STRING; NEED_SPACE(2 * sizeof(BYTE)); *pOut++ = FMT_STR_COPY_SKIP; *pOut = 0x0; while (*pFormat == '&') { *pOut = *pOut + 1; str_header->copy_chars++; pFormat++; } TRACE("%d &'s\n", *pOut); pOut++; fmt_state &= ~FMT_STATE_OPEN_COPY; } else if ((*pFormat == '<' || *pFormat == '>') && COULD_BE(FMT_TYPE_STRING)) { /* String formats: Use upper/lower case * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_STRING; if (*pFormat == '<') str_header->flags |= FMT_FLAG_LT; else str_header->flags |= FMT_FLAG_GT; TRACE("to %s case\n", *pFormat == '<' ? "lower" : "upper"); pFormat++; fmt_state &= ~FMT_STATE_OPEN_COPY; } else if (*pFormat == '!' && COULD_BE(FMT_TYPE_STRING)) { /* String formats: Copy right to left * Other formats: Literal * Types the format if found */ header->type = FMT_TYPE_STRING; str_header->flags |= FMT_FLAG_RTL; pFormat++; fmt_state &= ~FMT_STATE_OPEN_COPY; TRACE("copy right-to-left\n"); } /* -------- * Literals * -------- */ /* FIXME: [ seems to be ignored */ else { if (*pFormat == '%' && header->type == FMT_TYPE_NUMBER) { /* Number formats: Percentage indicator, also a literal * Other formats: Literal * Doesn't type the format */ num_header->flags |= FMT_FLAG_PERCENT; } if (fmt_state & FMT_STATE_OPEN_COPY) { pOut[-1] = pOut[-1] + 1; /* Increase the length of the open copy */ TRACE("extend copy (char '%c'), length now %d\n", *pFormat, pOut[-1]); } else { /* Create a new open copy */ TRACE("New copy (char '%c')\n", *pFormat); NEED_SPACE(3 * sizeof(BYTE)); *pOut++ = FMT_GEN_COPY; *pOut++ = pFormat - lpszFormat; *pOut++ = 0x1; fmt_state |= FMT_STATE_OPEN_COPY; } pFormat++; } } *pOut++ = FMT_GEN_END; header->size = pOut - rgbTok; if (pcbActual) *pcbActual = header->size; return S_OK; } /* Number formatting state flags */ #define NUM_WROTE_DEC 0x01 /* Written the decimal separator */ #define NUM_WRITE_ON 0x02 /* Started to write the number */ #define NUM_WROTE_SIGN 0x04 /* Written the negative sign */ /* Format a variant using a number format */ static HRESULT VARIANT_FormatNumber(LPVARIANT pVarIn, LPOLESTR lpszFormat, LPBYTE rgbTok, ULONG dwFlags, BSTR *pbstrOut, LCID lcid) { BYTE rgbDig[256], *prgbDig; NUMPARSE np; int have_int, need_int = 0, have_frac, need_frac, exponent = 0, pad = 0; WCHAR buff[256], *pBuff = buff; WCHAR thousandSeparator[32]; VARIANT vString, vBool; DWORD dwState = 0; FMT_HEADER *header = (FMT_HEADER*)rgbTok; FMT_NUMBER_HEADER *numHeader; const BYTE* pToken = NULL; HRESULT hRes = S_OK; TRACE("(%s,%s,%p,0x%08x,%p,0x%08x)\n", debugstr_variant(pVarIn), debugstr_w(lpszFormat), rgbTok, dwFlags, pbstrOut, lcid); V_VT(&vString) = VT_EMPTY; V_VT(&vBool) = VT_BOOL; if (V_TYPE(pVarIn) == VT_EMPTY || V_TYPE(pVarIn) == VT_NULL) { have_int = have_frac = 0; numHeader = (FMT_NUMBER_HEADER*)(rgbTok + FmtGetNull(header)); V_BOOL(&vBool) = VARIANT_FALSE; } else { /* Get a number string from pVarIn, and parse it */ hRes = VariantChangeTypeEx(&vString, pVarIn, lcid, VARIANT_NOUSEROVERRIDE, VT_BSTR); if (FAILED(hRes)) return hRes; np.cDig = sizeof(rgbDig); np.dwInFlags = NUMPRS_STD; hRes = VarParseNumFromStr(V_BSTR(&vString), lcid, 0, &np, rgbDig); if (FAILED(hRes)) return hRes; have_int = np.cDig; have_frac = 0; exponent = np.nPwr10; /* Figure out which format to use */ if (np.dwOutFlags & NUMPRS_NEG) { numHeader = (FMT_NUMBER_HEADER*)(rgbTok + FmtGetNegative(header)); V_BOOL(&vBool) = VARIANT_TRUE; } else if (have_int == 1 && !exponent && rgbDig[0] == 0) { numHeader = (FMT_NUMBER_HEADER*)(rgbTok + FmtGetZero(header)); V_BOOL(&vBool) = VARIANT_FALSE; } else { numHeader = (FMT_NUMBER_HEADER*)(rgbTok + FmtGetPositive(header)); V_BOOL(&vBool) = VARIANT_TRUE; } TRACE("num header: flags = 0x%x, mult=%d, div=%d, whole=%d, fract=%d\n", numHeader->flags, numHeader->multiplier, numHeader->divisor, numHeader->whole, numHeader->fractional); need_int = numHeader->whole; need_frac = numHeader->fractional; if (numHeader->flags & FMT_FLAG_PERCENT && !(have_int == 1 && !exponent && rgbDig[0] == 0)) exponent += 2; if (numHeader->flags & FMT_FLAG_EXPONENT) { /* Exponent format: length of the integral number part is fixed and specified by the format. */ pad = need_int - have_int; exponent -= pad; if (pad < 0) { have_int = need_int; have_frac -= pad; pad = 0; } } else { /* Convert the exponent */ pad = max(exponent, -have_int); exponent -= pad; if (pad < 0) { have_int += pad; have_frac = -pad; pad = 0; } if(exponent < 0 && exponent > (-256 + have_int + have_frac)) { /* Remove exponent notation */ memmove(rgbDig - exponent, rgbDig, have_int + have_frac); ZeroMemory(rgbDig, -exponent); have_frac -= exponent; exponent = 0; } } /* Rounding the number */ if (have_frac > need_frac) { prgbDig = &rgbDig[have_int + need_frac]; have_frac = need_frac; if (*prgbDig >= 5) { while (prgbDig-- > rgbDig && *prgbDig == 9) *prgbDig = 0; if (prgbDig < rgbDig) { /* We reached the first digit and that was also a 9 */ rgbDig[0] = 1; if (numHeader->flags & FMT_FLAG_EXPONENT) exponent++; else { rgbDig[have_int + need_frac] = 0; if (exponent < 0) exponent++; else have_int++; } } else (*prgbDig)++; } /* We converted trailing digits to zeroes => have_frac has changed */ while (have_frac > 0 && rgbDig[have_int + have_frac - 1] == 0) have_frac--; } TRACE("have_int=%d,need_int=%d,have_frac=%d,need_frac=%d,pad=%d,exp=%d\n", have_int, need_int, have_frac, need_frac, pad, exponent); } if (numHeader->flags & FMT_FLAG_THOUSANDS) { if (!GetLocaleInfoW(lcid, LOCALE_STHOUSAND, thousandSeparator, ARRAY_SIZE(thousandSeparator))) { thousandSeparator[0] = ','; thousandSeparator[1] = 0; } } pToken = (const BYTE*)numHeader + sizeof(FMT_NUMBER_HEADER); prgbDig = rgbDig; while (SUCCEEDED(hRes) && *pToken != FMT_GEN_END) { WCHAR defaultChar = '?'; DWORD boolFlag, localeValue = 0; BOOL shouldAdvance = TRUE; if (pToken - rgbTok > header->size) { ERR("Ran off the end of the format!\n"); hRes = E_INVALIDARG; goto VARIANT_FormatNumber_Exit; } switch (*pToken) { case FMT_GEN_COPY: TRACE("copy %s\n", debugstr_wn(lpszFormat + pToken[1], pToken[2])); memcpy(pBuff, lpszFormat + pToken[1], pToken[2] * sizeof(WCHAR)); pBuff += pToken[2]; pToken += 2; break; case FMT_GEN_INLINE: pToken += 2; TRACE("copy %s\n", debugstr_a((LPCSTR)pToken)); while (*pToken) *pBuff++ = *pToken++; break; case FMT_NUM_YES_NO: boolFlag = VAR_BOOLYESNO; goto VARIANT_FormatNumber_Bool; case FMT_NUM_ON_OFF: boolFlag = VAR_BOOLONOFF; goto VARIANT_FormatNumber_Bool; case FMT_NUM_TRUE_FALSE: boolFlag = VAR_LOCALBOOL; VARIANT_FormatNumber_Bool: { BSTR boolStr = NULL; if (pToken[1] != FMT_GEN_END) { ERR("Boolean token not at end of format!\n"); hRes = E_INVALIDARG; goto VARIANT_FormatNumber_Exit; } hRes = VarBstrFromBool(V_BOOL(&vBool), lcid, boolFlag, &boolStr); if (SUCCEEDED(hRes)) { strcpyW(pBuff, boolStr); SysFreeString(boolStr); while (*pBuff) pBuff++; } } break; case FMT_NUM_DECIMAL: if ((np.dwOutFlags & NUMPRS_NEG) && !(dwState & NUM_WROTE_SIGN) && !header->starts[1]) { /* last chance for a negative sign in the .# case */ TRACE("write negative sign\n"); localeValue = LOCALE_SNEGATIVESIGN; defaultChar = '-'; dwState |= NUM_WROTE_SIGN; shouldAdvance = FALSE; break; } TRACE("write decimal separator\n"); localeValue = LOCALE_SDECIMAL; defaultChar = '.'; dwState |= NUM_WROTE_DEC; break; case FMT_NUM_CURRENCY: TRACE("write currency symbol\n"); localeValue = LOCALE_SCURRENCY; defaultChar = '$'; break; case FMT_NUM_EXP_POS_U: case FMT_NUM_EXP_POS_L: case FMT_NUM_EXP_NEG_U: case FMT_NUM_EXP_NEG_L: if (*pToken == FMT_NUM_EXP_POS_L || *pToken == FMT_NUM_EXP_NEG_L) *pBuff++ = 'e'; else *pBuff++ = 'E'; if (exponent < 0) { *pBuff++ = '-'; sprintfW(pBuff, szPercentZeroStar_d, pToken[1], -exponent); } else { if (*pToken == FMT_NUM_EXP_POS_L || *pToken == FMT_NUM_EXP_POS_U) *pBuff++ = '+'; sprintfW(pBuff, szPercentZeroStar_d, pToken[1], exponent); } while (*pBuff) pBuff++; pToken++; break; case FMT_NUM_COPY_ZERO: dwState |= NUM_WRITE_ON; /* Fall through */ case FMT_NUM_COPY_SKIP: TRACE("write %d %sdigits or %s\n", pToken[1], dwState & NUM_WROTE_DEC ? "fractional " : "", *pToken == FMT_NUM_COPY_ZERO ? "0" : "skip"); if (dwState & NUM_WROTE_DEC) { int count, i; if (!(numHeader->flags & FMT_FLAG_EXPONENT) && exponent < 0) { /* Pad with 0 before writing the fractional digits */ pad = max(exponent, -pToken[1]); exponent -= pad; count = min(have_frac, pToken[1] + pad); for (i = 0; i > pad; i--) *pBuff++ = '0'; } else count = min(have_frac, pToken[1]); pad += pToken[1] - count; have_frac -= count; while (count--) *pBuff++ = '0' + *prgbDig++; if (*pToken == FMT_NUM_COPY_ZERO) { for (; pad > 0; pad--) *pBuff++ = '0'; /* Write zeros for missing trailing digits */ } } else { int count, count_max, position; if ((np.dwOutFlags & NUMPRS_NEG) && !(dwState & NUM_WROTE_SIGN) && !header->starts[1]) { TRACE("write negative sign\n"); localeValue = LOCALE_SNEGATIVESIGN; defaultChar = '-'; dwState |= NUM_WROTE_SIGN; shouldAdvance = FALSE; break; } position = have_int + pad; if (dwState & NUM_WRITE_ON) position = max(position, need_int); need_int -= pToken[1]; count_max = have_int + pad - need_int; if (count_max < 0) count_max = 0; if (dwState & NUM_WRITE_ON) { count = pToken[1] - count_max; TRACE("write %d leading zeros\n", count); while (count-- > 0) { *pBuff++ = '0'; if ((numHeader->flags & FMT_FLAG_THOUSANDS) && position > 1 && (--position % 3) == 0) { int k; TRACE("write thousand separator\n"); for (k = 0; thousandSeparator[k]; k++) *pBuff++ = thousandSeparator[k]; } } } if (*pToken == FMT_NUM_COPY_ZERO || have_int > 1 || (have_int > 0 && *prgbDig > 0)) { count = min(count_max, have_int); count_max -= count; have_int -= count; TRACE("write %d whole number digits\n", count); while (count--) { dwState |= NUM_WRITE_ON; *pBuff++ = '0' + *prgbDig++; if ((numHeader->flags & FMT_FLAG_THOUSANDS) && position > 1 && (--position % 3) == 0) { int k; TRACE("write thousand separator\n"); for (k = 0; thousandSeparator[k]; k++) *pBuff++ = thousandSeparator[k]; } } } count = min(count_max, pad); pad -= count; TRACE("write %d whole trailing 0's\n", count); while (count--) { *pBuff++ = '0'; if ((numHeader->flags & FMT_FLAG_THOUSANDS) && position > 1 && (--position % 3) == 0) { int k; TRACE("write thousand separator\n"); for (k = 0; thousandSeparator[k]; k++) *pBuff++ = thousandSeparator[k]; } } } pToken++; break; default: ERR("Unknown token 0x%02x!\n", *pToken); hRes = E_INVALIDARG; goto VARIANT_FormatNumber_Exit; } if (localeValue) { if (GetLocaleInfoW(lcid, localeValue, pBuff, ARRAY_SIZE(buff)-(pBuff-buff))) { TRACE("added %s\n", debugstr_w(pBuff)); while (*pBuff) pBuff++; } else { TRACE("added %d '%c'\n", defaultChar, defaultChar); *pBuff++ = defaultChar; } } if (shouldAdvance) pToken++; } VARIANT_FormatNumber_Exit: VariantClear(&vString); *pBuff = '\0'; TRACE("buff is %s\n", debugstr_w(buff)); if (SUCCEEDED(hRes)) { *pbstrOut = SysAllocString(buff); if (!*pbstrOut) hRes = E_OUTOFMEMORY; } return hRes; } /* Format a variant using a date format */ static HRESULT VARIANT_FormatDate(LPVARIANT pVarIn, LPOLESTR lpszFormat, LPBYTE rgbTok, ULONG dwFlags, BSTR *pbstrOut, LCID lcid) { WCHAR buff[256], *pBuff = buff; VARIANT vDate; UDATE udate; FMT_HEADER *header = (FMT_HEADER*)rgbTok; FMT_DATE_HEADER *dateHeader; const BYTE* pToken = NULL; HRESULT hRes; TRACE("(%s,%s,%p,0x%08x,%p,0x%08x)\n", debugstr_variant(pVarIn), debugstr_w(lpszFormat), rgbTok, dwFlags, pbstrOut, lcid); V_VT(&vDate) = VT_EMPTY; if (V_TYPE(pVarIn) == VT_EMPTY || V_TYPE(pVarIn) == VT_NULL) { dateHeader = (FMT_DATE_HEADER*)(rgbTok + FmtGetNegative(header)); V_DATE(&vDate) = 0; } else { USHORT usFlags = dwFlags & VARIANT_CALENDAR_HIJRI ? VAR_CALENDAR_HIJRI : 0; hRes = VariantChangeTypeEx(&vDate, pVarIn, lcid, usFlags, VT_DATE); if (FAILED(hRes)) return hRes; dateHeader = (FMT_DATE_HEADER*)(rgbTok + FmtGetPositive(header)); } hRes = VarUdateFromDate(V_DATE(&vDate), 0 /* FIXME: flags? */, &udate); if (FAILED(hRes)) return hRes; pToken = (const BYTE*)dateHeader + sizeof(FMT_DATE_HEADER); while (*pToken != FMT_GEN_END) { DWORD dwVal = 0, localeValue = 0, dwFmt = 0; LPCWSTR szPrintFmt = NULL; WCHAR defaultChar = '?'; if (pToken - rgbTok > header->size) { ERR("Ran off the end of the format!\n"); hRes = E_INVALIDARG; goto VARIANT_FormatDate_Exit; } switch (*pToken) { case FMT_GEN_COPY: TRACE("copy %s\n", debugstr_wn(lpszFormat + pToken[1], pToken[2])); memcpy(pBuff, lpszFormat + pToken[1], pToken[2] * sizeof(WCHAR)); pBuff += pToken[2]; pToken += 2; break; case FMT_GEN_INLINE: pToken += 2; TRACE("copy %s\n", debugstr_a((LPCSTR)pToken)); while (*pToken) *pBuff++ = *pToken++; break; case FMT_DATE_TIME_SEP: TRACE("time separator\n"); localeValue = LOCALE_STIME; defaultChar = ':'; break; case FMT_DATE_DATE_SEP: TRACE("date separator\n"); localeValue = LOCALE_SDATE; defaultChar = '/'; break; case FMT_DATE_GENERAL: { BSTR date = NULL; WCHAR *pDate; hRes = VarBstrFromDate(V_DATE(&vDate), lcid, 0, &date); if (FAILED(hRes)) goto VARIANT_FormatDate_Exit; pDate = date; while (*pDate) *pBuff++ = *pDate++; SysFreeString(date); } break; case FMT_DATE_QUARTER: if (udate.st.wMonth <= 3) *pBuff++ = '1'; else if (udate.st.wMonth <= 6) *pBuff++ = '2'; else if (udate.st.wMonth <= 9) *pBuff++ = '3'; else *pBuff++ = '4'; break; case FMT_DATE_TIME_SYS: { /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */ BSTR date = NULL; WCHAR *pDate; hRes = VarBstrFromDate(V_DATE(&vDate), lcid, VAR_TIMEVALUEONLY, &date); if (FAILED(hRes)) goto VARIANT_FormatDate_Exit; pDate = date; while (*pDate) *pBuff++ = *pDate++; SysFreeString(date); } break; case FMT_DATE_DAY: szPrintFmt = szPercent_d; dwVal = udate.st.wDay; break; case FMT_DATE_DAY_0: szPrintFmt = szPercentZeroTwo_d; dwVal = udate.st.wDay; break; case FMT_DATE_DAY_SHORT: /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */ TRACE("short day\n"); localeValue = LOCALE_SABBREVDAYNAME1 + (udate.st.wDayOfWeek + 6)%7; defaultChar = '?'; break; case FMT_DATE_DAY_LONG: /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */ TRACE("long day\n"); localeValue = LOCALE_SDAYNAME1 + (udate.st.wDayOfWeek + 6)%7; defaultChar = '?'; break; case FMT_DATE_SHORT: /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */ dwFmt = LOCALE_SSHORTDATE; break; case FMT_DATE_LONG: /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */ dwFmt = LOCALE_SLONGDATE; break; case FMT_DATE_MEDIUM: FIXME("Medium date treated as long date\n"); dwFmt = LOCALE_SLONGDATE; break; case FMT_DATE_DAY_WEEK: szPrintFmt = szPercent_d; if (pToken[1]) dwVal = udate.st.wDayOfWeek + 2 - pToken[1]; else { GetLocaleInfoW(lcid,LOCALE_RETURN_NUMBER|LOCALE_IFIRSTDAYOFWEEK, (LPWSTR)&dwVal, sizeof(dwVal)/sizeof(WCHAR)); dwVal = udate.st.wDayOfWeek + 1 - dwVal; } pToken++; break; case FMT_DATE_WEEK_YEAR: szPrintFmt = szPercent_d; dwVal = udate.wDayOfYear / 7 + 1; pToken += 2; FIXME("Ignoring nFirstDay of %d, nFirstWeek of %d\n", pToken[0], pToken[1]); break; case FMT_DATE_MON: szPrintFmt = szPercent_d; dwVal = udate.st.wMonth; break; case FMT_DATE_MON_0: szPrintFmt = szPercentZeroTwo_d; dwVal = udate.st.wMonth; break; case FMT_DATE_MON_SHORT: /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */ TRACE("short month\n"); localeValue = LOCALE_SABBREVMONTHNAME1 + udate.st.wMonth - 1; defaultChar = '?'; break; case FMT_DATE_MON_LONG: /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */ TRACE("long month\n"); localeValue = LOCALE_SMONTHNAME1 + udate.st.wMonth - 1; defaultChar = '?'; break; case FMT_DATE_YEAR_DOY: szPrintFmt = szPercent_d; dwVal = udate.wDayOfYear; break; case FMT_DATE_YEAR_0: szPrintFmt = szPercentZeroTwo_d; dwVal = udate.st.wYear % 100; break; case FMT_DATE_YEAR_LONG: szPrintFmt = szPercent_d; dwVal = udate.st.wYear; break; case FMT_DATE_MIN: szPrintFmt = szPercent_d; dwVal = udate.st.wMinute; break; case FMT_DATE_MIN_0: szPrintFmt = szPercentZeroTwo_d; dwVal = udate.st.wMinute; break; case FMT_DATE_SEC: szPrintFmt = szPercent_d; dwVal = udate.st.wSecond; break; case FMT_DATE_SEC_0: szPrintFmt = szPercentZeroTwo_d; dwVal = udate.st.wSecond; break; case FMT_DATE_HOUR: szPrintFmt = szPercent_d; dwVal = udate.st.wHour; break; case FMT_DATE_HOUR_0: case FMT_DATE_TIME_UNK2: szPrintFmt = szPercentZeroTwo_d; dwVal = udate.st.wHour; break; case FMT_DATE_HOUR_12: szPrintFmt = szPercent_d; dwVal = udate.st.wHour ? udate.st.wHour > 12 ? udate.st.wHour - 12 : udate.st.wHour : 12; break; case FMT_DATE_HOUR_12_0: szPrintFmt = szPercentZeroTwo_d; dwVal = udate.st.wHour ? udate.st.wHour > 12 ? udate.st.wHour - 12 : udate.st.wHour : 12; break; case FMT_DATE_AMPM_SYS1: case FMT_DATE_AMPM_SYS2: localeValue = udate.st.wHour < 12 ? LOCALE_S1159 : LOCALE_S2359; defaultChar = '?'; break; case FMT_DATE_AMPM_UPPER: *pBuff++ = udate.st.wHour < 12 ? 'A' : 'P'; *pBuff++ = 'M'; break; case FMT_DATE_A_UPPER: *pBuff++ = udate.st.wHour < 12 ? 'A' : 'P'; break; case FMT_DATE_AMPM_LOWER: *pBuff++ = udate.st.wHour < 12 ? 'a' : 'p'; *pBuff++ = 'm'; break; case FMT_DATE_A_LOWER: *pBuff++ = udate.st.wHour < 12 ? 'a' : 'p'; break; default: ERR("Unknown token 0x%02x!\n", *pToken); hRes = E_INVALIDARG; goto VARIANT_FormatDate_Exit; } if (localeValue) { *pBuff = '\0'; if (GetLocaleInfoW(lcid, localeValue, pBuff, ARRAY_SIZE(buff)-(pBuff-buff))) { TRACE("added %s\n", debugstr_w(pBuff)); while (*pBuff) pBuff++; } else { TRACE("added %d %c\n", defaultChar, defaultChar); *pBuff++ = defaultChar; } } else if (dwFmt) { WCHAR fmt_buff[80]; if (!GetLocaleInfoW(lcid, dwFmt, fmt_buff, ARRAY_SIZE(fmt_buff)) || !get_date_format(lcid, 0, &udate.st, fmt_buff, pBuff, ARRAY_SIZE(buff)-(pBuff-buff))) { hRes = E_INVALIDARG; goto VARIANT_FormatDate_Exit; } while (*pBuff) pBuff++; } else if (szPrintFmt) { sprintfW(pBuff, szPrintFmt, dwVal); while (*pBuff) pBuff++; } pToken++; } VARIANT_FormatDate_Exit: *pBuff = '\0'; TRACE("buff is %s\n", debugstr_w(buff)); if (SUCCEEDED(hRes)) { *pbstrOut = SysAllocString(buff); if (!*pbstrOut) hRes = E_OUTOFMEMORY; } return hRes; } /* Format a variant using a string format */ static HRESULT VARIANT_FormatString(LPVARIANT pVarIn, LPOLESTR lpszFormat, LPBYTE rgbTok, ULONG dwFlags, BSTR *pbstrOut, LCID lcid) { static WCHAR szEmpty[] = { '\0' }; WCHAR buff[256], *pBuff = buff; WCHAR *pSrc; FMT_HEADER *header = (FMT_HEADER*)rgbTok; FMT_STRING_HEADER *strHeader; const BYTE* pToken = NULL; VARIANT vStr; int blanks_first; BOOL bUpper = FALSE; HRESULT hRes = S_OK; TRACE("%s,%s,%p,0x%08x,%p,0x%08x)\n", debugstr_variant(pVarIn), debugstr_w(lpszFormat), rgbTok, dwFlags, pbstrOut, lcid); V_VT(&vStr) = VT_EMPTY; if (V_TYPE(pVarIn) == VT_EMPTY || V_TYPE(pVarIn) == VT_NULL) { strHeader = (FMT_STRING_HEADER*)(rgbTok + FmtGetNegative(header)); V_BSTR(&vStr) = szEmpty; } else { hRes = VariantChangeTypeEx(&vStr, pVarIn, lcid, VARIANT_NOUSEROVERRIDE, VT_BSTR); if (FAILED(hRes)) return hRes; if (V_BSTR(&vStr)[0] == '\0') strHeader = (FMT_STRING_HEADER*)(rgbTok + FmtGetNegative(header)); else strHeader = (FMT_STRING_HEADER*)(rgbTok + FmtGetPositive(header)); } pSrc = V_BSTR(&vStr); if ((strHeader->flags & (FMT_FLAG_LT|FMT_FLAG_GT)) == FMT_FLAG_GT) bUpper = TRUE; blanks_first = strHeader->copy_chars - strlenW(pSrc); pToken = (const BYTE*)strHeader + sizeof(FMT_DATE_HEADER); while (*pToken != FMT_GEN_END) { int dwCount = 0; if (pToken - rgbTok > header->size) { ERR("Ran off the end of the format!\n"); hRes = E_INVALIDARG; goto VARIANT_FormatString_Exit; } switch (*pToken) { case FMT_GEN_COPY: TRACE("copy %s\n", debugstr_wn(lpszFormat + pToken[1], pToken[2])); memcpy(pBuff, lpszFormat + pToken[1], pToken[2] * sizeof(WCHAR)); pBuff += pToken[2]; pToken += 2; break; case FMT_STR_COPY_SPACE: case FMT_STR_COPY_SKIP: dwCount = pToken[1]; if (*pToken == FMT_STR_COPY_SPACE && blanks_first > 0) { TRACE("insert %d initial spaces\n", blanks_first); while (dwCount > 0 && blanks_first > 0) { *pBuff++ = ' '; dwCount--; blanks_first--; } } TRACE("copy %d chars%s\n", dwCount, *pToken == FMT_STR_COPY_SPACE ? " with space" :""); while (dwCount > 0 && *pSrc) { if (bUpper) *pBuff++ = toupperW(*pSrc); else *pBuff++ = tolowerW(*pSrc); dwCount--; pSrc++; } if (*pToken == FMT_STR_COPY_SPACE && dwCount > 0) { TRACE("insert %d spaces\n", dwCount); while (dwCount-- > 0) *pBuff++ = ' '; } pToken++; break; default: ERR("Unknown token 0x%02x!\n", *pToken); hRes = E_INVALIDARG; goto VARIANT_FormatString_Exit; } pToken++; } VARIANT_FormatString_Exit: /* Copy out any remaining chars */ while (*pSrc) { if (bUpper) *pBuff++ = toupperW(*pSrc); else *pBuff++ = tolowerW(*pSrc); pSrc++; } VariantClear(&vStr); *pBuff = '\0'; TRACE("buff is %s\n", debugstr_w(buff)); if (SUCCEEDED(hRes)) { *pbstrOut = SysAllocString(buff); if (!*pbstrOut) hRes = E_OUTOFMEMORY; } return hRes; } #define NUMBER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2| \ VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8| \ VTBIT_R4|VTBIT_R8|VTBIT_CY|VTBIT_DECIMAL| \ VTBIT_BOOL|VTBIT_INT|VTBIT_UINT) /********************************************************************** * VarFormatFromTokens [OLEAUT32.139] */ HRESULT WINAPI VarFormatFromTokens(LPVARIANT pVarIn, LPOLESTR lpszFormat, LPBYTE rgbTok, ULONG dwFlags, BSTR *pbstrOut, LCID lcid) { FMT_SHORT_HEADER *header = (FMT_SHORT_HEADER *)rgbTok; VARIANT vTmp; HRESULT hres; TRACE("(%p,%s,%p,%x,%p,0x%08x)\n", pVarIn, debugstr_w(lpszFormat), rgbTok, dwFlags, pbstrOut, lcid); if (!pbstrOut) return E_INVALIDARG; *pbstrOut = NULL; if (!pVarIn || !rgbTok) return E_INVALIDARG; if (V_VT(pVarIn) == VT_NULL) return S_OK; if (*rgbTok == FMT_TO_STRING || header->type == FMT_TYPE_GENERAL) { /* According to MSDN, general format acts somewhat like the 'Str' * function in Visual Basic. */ VarFormatFromTokens_AsStr: V_VT(&vTmp) = VT_EMPTY; hres = VariantChangeTypeEx(&vTmp, pVarIn, lcid, dwFlags, VT_BSTR); *pbstrOut = V_BSTR(&vTmp); } else { if (header->type == FMT_TYPE_NUMBER || (header->type == FMT_TYPE_UNKNOWN && ((1 << V_TYPE(pVarIn)) & NUMBER_VTBITS))) { hres = VARIANT_FormatNumber(pVarIn, lpszFormat, rgbTok, dwFlags, pbstrOut, lcid); } else if (header->type == FMT_TYPE_DATE || (header->type == FMT_TYPE_UNKNOWN && V_TYPE(pVarIn) == VT_DATE)) { hres = VARIANT_FormatDate(pVarIn, lpszFormat, rgbTok, dwFlags, pbstrOut, lcid); } else if (header->type == FMT_TYPE_STRING || V_TYPE(pVarIn) == VT_BSTR) { hres = VARIANT_FormatString(pVarIn, lpszFormat, rgbTok, dwFlags, pbstrOut, lcid); } else { ERR("unrecognised format type 0x%02x\n", header->type); return E_INVALIDARG; } /* If the coercion failed, still try to create output, unless the * VAR_FORMAT_NOSUBSTITUTE flag is set. */ if ((hres == DISP_E_OVERFLOW || hres == DISP_E_TYPEMISMATCH) && !(dwFlags & VAR_FORMAT_NOSUBSTITUTE)) goto VarFormatFromTokens_AsStr; } return hres; } /********************************************************************** * VarFormat [OLEAUT32.87] * * Format a variant from a format string. * * PARAMS * pVarIn [I] Variant to format * lpszFormat [I] Format string (see notes) * nFirstDay [I] First day of the week, (See VarTokenizeFormatString() for details) * nFirstWeek [I] First week of the year (See VarTokenizeFormatString() for details) * dwFlags [I] Flags for the format (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination for formatted string. * * RETURNS * Success: S_OK. pbstrOut contains the formatted value. * Failure: E_INVALIDARG, if any parameter is invalid. * E_OUTOFMEMORY, if enough memory cannot be allocated. * DISP_E_TYPEMISMATCH, if the variant cannot be formatted. * * NOTES * - See Variant-Formats for details concerning creating format strings. * - This function uses LOCALE_USER_DEFAULT when calling VarTokenizeFormatString() * and VarFormatFromTokens(). */ HRESULT WINAPI VarFormat(LPVARIANT pVarIn, LPOLESTR lpszFormat, int nFirstDay, int nFirstWeek, ULONG dwFlags, BSTR *pbstrOut) { BYTE buff[256]; HRESULT hres; TRACE("(%s,%s,%d,%d,0x%08x,%p)\n", debugstr_variant(pVarIn), debugstr_w(lpszFormat), nFirstDay, nFirstWeek, dwFlags, pbstrOut); if (!pbstrOut) return E_INVALIDARG; *pbstrOut = NULL; hres = VarTokenizeFormatString(lpszFormat, buff, sizeof(buff), nFirstDay, nFirstWeek, LOCALE_USER_DEFAULT, NULL); if (SUCCEEDED(hres)) hres = VarFormatFromTokens(pVarIn, lpszFormat, buff, dwFlags, pbstrOut, LOCALE_USER_DEFAULT); TRACE("returning 0x%08x, %s\n", hres, debugstr_w(*pbstrOut)); return hres; } /********************************************************************** * VarFormatDateTime [OLEAUT32.97] * * Format a variant value as a date and/or time. * * PARAMS * pVarIn [I] Variant to format * nFormat [I] Format type (see notes) * dwFlags [I] Flags for the format (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination for formatted string. * * RETURNS * Success: S_OK. pbstrOut contains the formatted value. * Failure: E_INVALIDARG, if any parameter is invalid. * E_OUTOFMEMORY, if enough memory cannot be allocated. * DISP_E_TYPEMISMATCH, if the variant cannot be formatted. * * NOTES * This function uses LOCALE_USER_DEFAULT when determining the date format * characters to use. * Possible values for the nFormat parameter are: *| Value Meaning *| ----- ------- *| 0 General date format *| 1 Long date format *| 2 Short date format *| 3 Long time format *| 4 Short time format */ HRESULT WINAPI VarFormatDateTime(LPVARIANT pVarIn, INT nFormat, ULONG dwFlags, BSTR *pbstrOut) { static WCHAR szEmpty[] = { '\0' }; const BYTE* lpFmt = NULL; TRACE("%s,%d,0x%08x,%p)\n", debugstr_variant(pVarIn), nFormat, dwFlags, pbstrOut); if (!pVarIn || !pbstrOut || nFormat < 0 || nFormat > 4) return E_INVALIDARG; switch (nFormat) { case 0: lpFmt = fmtGeneralDate; break; case 1: lpFmt = fmtLongDate; break; case 2: lpFmt = fmtShortDate; break; case 3: lpFmt = fmtLongTime; break; case 4: lpFmt = fmtShortTime; break; } return VarFormatFromTokens(pVarIn, szEmpty, (BYTE*)lpFmt, dwFlags, pbstrOut, LOCALE_USER_DEFAULT); } #define GETLOCALENUMBER(type,field) GetLocaleInfoW(LOCALE_USER_DEFAULT, \ type|LOCALE_RETURN_NUMBER, \ (LPWSTR)&numfmt.field, \ sizeof(numfmt.field)/sizeof(WCHAR)) /********************************************************************** * VarFormatNumber [OLEAUT32.107] * * Format a variant value as a number. * * PARAMS * pVarIn [I] Variant to format * nDigits [I] Number of digits following the decimal point (-1 = user default) * nLeading [I] Use a leading zero (-2 = user default, -1 = yes, 0 = no) * nParens [I] Use brackets for values < 0 (-2 = user default, -1 = yes, 0 = no) * nGrouping [I] Use grouping characters (-2 = user default, -1 = yes, 0 = no) * dwFlags [I] Currently unused, set to zero * pbstrOut [O] Destination for formatted string. * * RETURNS * Success: S_OK. pbstrOut contains the formatted value. * Failure: E_INVALIDARG, if any parameter is invalid. * E_OUTOFMEMORY, if enough memory cannot be allocated. * DISP_E_TYPEMISMATCH, if the variant cannot be formatted. * * NOTES * This function uses LOCALE_USER_DEFAULT when determining the number format * characters to use. */ HRESULT WINAPI VarFormatNumber(LPVARIANT pVarIn, INT nDigits, INT nLeading, INT nParens, INT nGrouping, ULONG dwFlags, BSTR *pbstrOut) { HRESULT hRet; VARIANT vStr; TRACE("(%s,%d,%d,%d,%d,0x%08x,%p)\n", debugstr_variant(pVarIn), nDigits, nLeading, nParens, nGrouping, dwFlags, pbstrOut); if (!pVarIn || !pbstrOut || nDigits > 9) return E_INVALIDARG; *pbstrOut = NULL; V_VT(&vStr) = VT_EMPTY; hRet = VariantCopyInd(&vStr, pVarIn); if (SUCCEEDED(hRet)) hRet = VariantChangeTypeEx(&vStr, &vStr, LCID_US, 0, VT_BSTR); if (SUCCEEDED(hRet)) { WCHAR buff[256], decimal[8], thousands[8]; NUMBERFMTW numfmt; /* Although MSDN makes it clear that the native versions of these functions * are implemented using VarTokenizeFormatString()/VarFormatFromTokens(), * using NLS gives us the same result. */ if (nDigits < 0) GETLOCALENUMBER(LOCALE_IDIGITS, NumDigits); else numfmt.NumDigits = nDigits; if (nLeading == -2) GETLOCALENUMBER(LOCALE_ILZERO, LeadingZero); else if (nLeading == -1) numfmt.LeadingZero = 1; else numfmt.LeadingZero = 0; if (nGrouping == -2) { WCHAR grouping[16]; grouping[2] = '\0'; GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, grouping, ARRAY_SIZE(grouping)); numfmt.Grouping = grouping[2] == '2' ? 32 : grouping[0] - '0'; } else if (nGrouping == -1) numfmt.Grouping = 3; /* 3 = "n,nnn.nn" */ else numfmt.Grouping = 0; /* 0 = No grouping */ if (nParens == -2) GETLOCALENUMBER(LOCALE_INEGNUMBER, NegativeOrder); else if (nParens == -1) numfmt.NegativeOrder = 0; /* 0 = "(xxx)" */ else numfmt.NegativeOrder = 1; /* 1 = "-xxx" */ numfmt.lpDecimalSep = decimal; GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, decimal, ARRAY_SIZE(decimal)); numfmt.lpThousandSep = thousands; GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, thousands, ARRAY_SIZE(thousands)); if (GetNumberFormatW(LOCALE_USER_DEFAULT, 0, V_BSTR(&vStr), &numfmt, buff, ARRAY_SIZE(buff))) { *pbstrOut = SysAllocString(buff); if (!*pbstrOut) hRet = E_OUTOFMEMORY; } else hRet = DISP_E_TYPEMISMATCH; SysFreeString(V_BSTR(&vStr)); } return hRet; } /********************************************************************** * VarFormatPercent [OLEAUT32.117] * * Format a variant value as a percentage. * * PARAMS * pVarIn [I] Variant to format * nDigits [I] Number of digits following the decimal point (-1 = user default) * nLeading [I] Use a leading zero (-2 = user default, -1 = yes, 0 = no) * nParens [I] Use brackets for values < 0 (-2 = user default, -1 = yes, 0 = no) * nGrouping [I] Use grouping characters (-2 = user default, -1 = yes, 0 = no) * dwFlags [I] Currently unused, set to zero * pbstrOut [O] Destination for formatted string. * * RETURNS * Success: S_OK. pbstrOut contains the formatted value. * Failure: E_INVALIDARG, if any parameter is invalid. * E_OUTOFMEMORY, if enough memory cannot be allocated. * DISP_E_OVERFLOW, if overflow occurs during the conversion. * DISP_E_TYPEMISMATCH, if the variant cannot be formatted. * * NOTES * This function uses LOCALE_USER_DEFAULT when determining the number format * characters to use. */ HRESULT WINAPI VarFormatPercent(LPVARIANT pVarIn, INT nDigits, INT nLeading, INT nParens, INT nGrouping, ULONG dwFlags, BSTR *pbstrOut) { static const WCHAR szPercent[] = { '%','\0' }; static const WCHAR szPercentBracket[] = { '%',')','\0' }; WCHAR buff[256]; HRESULT hRet; VARIANT vDbl; TRACE("(%s,%d,%d,%d,%d,0x%08x,%p)\n", debugstr_variant(pVarIn), nDigits, nLeading, nParens, nGrouping, dwFlags, pbstrOut); if (!pVarIn || !pbstrOut || nDigits > 9) return E_INVALIDARG; *pbstrOut = NULL; V_VT(&vDbl) = VT_EMPTY; hRet = VariantCopyInd(&vDbl, pVarIn); if (SUCCEEDED(hRet)) { hRet = VariantChangeTypeEx(&vDbl, &vDbl, LOCALE_USER_DEFAULT, 0, VT_R8); if (SUCCEEDED(hRet)) { if (V_R8(&vDbl) > (R8_MAX / 100.0)) return DISP_E_OVERFLOW; V_R8(&vDbl) *= 100.0; hRet = VarFormatNumber(&vDbl, nDigits, nLeading, nParens, nGrouping, dwFlags, pbstrOut); if (SUCCEEDED(hRet)) { DWORD dwLen = strlenW(*pbstrOut); BOOL bBracket = (*pbstrOut)[dwLen] == ')'; dwLen -= bBracket; memcpy(buff, *pbstrOut, dwLen * sizeof(WCHAR)); strcpyW(buff + dwLen, bBracket ? szPercentBracket : szPercent); SysFreeString(*pbstrOut); *pbstrOut = SysAllocString(buff); if (!*pbstrOut) hRet = E_OUTOFMEMORY; } } } return hRet; } /********************************************************************** * VarFormatCurrency [OLEAUT32.127] * * Format a variant value as a currency. * * PARAMS * pVarIn [I] Variant to format * nDigits [I] Number of digits following the decimal point (-1 = user default) * nLeading [I] Use a leading zero (-2 = user default, -1 = yes, 0 = no) * nParens [I] Use brackets for values < 0 (-2 = user default, -1 = yes, 0 = no) * nGrouping [I] Use grouping characters (-2 = user default, -1 = yes, 0 = no) * dwFlags [I] Currently unused, set to zero * pbstrOut [O] Destination for formatted string. * * RETURNS * Success: S_OK. pbstrOut contains the formatted value. * Failure: E_INVALIDARG, if any parameter is invalid. * E_OUTOFMEMORY, if enough memory cannot be allocated. * DISP_E_TYPEMISMATCH, if the variant cannot be formatted. * * NOTES * This function uses LOCALE_USER_DEFAULT when determining the currency format * characters to use. */ HRESULT WINAPI VarFormatCurrency(LPVARIANT pVarIn, INT nDigits, INT nLeading, INT nParens, INT nGrouping, ULONG dwFlags, BSTR *pbstrOut) { HRESULT hRet; VARIANT vStr; TRACE("(%s,%d,%d,%d,%d,0x%08x,%p)\n", debugstr_variant(pVarIn), nDigits, nLeading, nParens, nGrouping, dwFlags, pbstrOut); if (!pVarIn || !pbstrOut || nDigits > 9) return E_INVALIDARG; *pbstrOut = NULL; V_VT(&vStr) = VT_EMPTY; hRet = VariantCopyInd(&vStr, pVarIn); if (SUCCEEDED(hRet)) hRet = VariantChangeTypeEx(&vStr, &vStr, LOCALE_USER_DEFAULT, 0, VT_BSTR); if (SUCCEEDED(hRet)) { WCHAR buff[256], decimal[8], thousands[8], currency[8]; CURRENCYFMTW numfmt; if (nDigits < 0) GETLOCALENUMBER(LOCALE_IDIGITS, NumDigits); else numfmt.NumDigits = nDigits; if (nLeading == -2) GETLOCALENUMBER(LOCALE_ILZERO, LeadingZero); else if (nLeading == -1) numfmt.LeadingZero = 1; else numfmt.LeadingZero = 0; if (nGrouping == -2) { WCHAR grouping[16]; grouping[2] = '\0'; GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, grouping, ARRAY_SIZE(grouping)); numfmt.Grouping = grouping[2] == '2' ? 32 : grouping[0] - '0'; } else if (nGrouping == -1) numfmt.Grouping = 3; /* 3 = "n,nnn.nn" */ else numfmt.Grouping = 0; /* 0 = No grouping */ if (nParens == -2) GETLOCALENUMBER(LOCALE_INEGCURR, NegativeOrder); else if (nParens == -1) numfmt.NegativeOrder = 0; /* 0 = "(xxx)" */ else numfmt.NegativeOrder = 1; /* 1 = "-xxx" */ GETLOCALENUMBER(LOCALE_ICURRENCY, PositiveOrder); numfmt.lpDecimalSep = decimal; GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, decimal, ARRAY_SIZE(decimal)); numfmt.lpThousandSep = thousands; GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, thousands, ARRAY_SIZE(thousands)); numfmt.lpCurrencySymbol = currency; GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, currency, ARRAY_SIZE(currency)); /* use NLS as per VarFormatNumber() */ if (GetCurrencyFormatW(LOCALE_USER_DEFAULT, 0, V_BSTR(&vStr), &numfmt, buff, ARRAY_SIZE(buff))) { *pbstrOut = SysAllocString(buff); if (!*pbstrOut) hRet = E_OUTOFMEMORY; } else hRet = DISP_E_TYPEMISMATCH; SysFreeString(V_BSTR(&vStr)); } return hRet; } /********************************************************************** * VarMonthName [OLEAUT32.129] * * Print the specified month as localized name. * * PARAMS * iMonth [I] month number 1..12 * fAbbrev [I] 0 - full name, !0 - abbreviated name * dwFlags [I] flag stuff. only VAR_CALENDAR_HIJRI possible. * pbstrOut [O] Destination for month name * * RETURNS * Success: S_OK. pbstrOut contains the name. * Failure: E_INVALIDARG, if any parameter is invalid. * E_OUTOFMEMORY, if enough memory cannot be allocated. */ HRESULT WINAPI VarMonthName(INT iMonth, INT fAbbrev, ULONG dwFlags, BSTR *pbstrOut) { DWORD localeValue; INT size; if ((iMonth < 1) || (iMonth > 12)) return E_INVALIDARG; if (dwFlags) FIXME("Does not support dwFlags 0x%x, ignoring.\n", dwFlags); if (fAbbrev) localeValue = LOCALE_SABBREVMONTHNAME1 + iMonth - 1; else localeValue = LOCALE_SMONTHNAME1 + iMonth - 1; size = GetLocaleInfoW(LOCALE_USER_DEFAULT,localeValue, NULL, 0); if (!size) { ERR("GetLocaleInfo 0x%x failed.\n", localeValue); return HRESULT_FROM_WIN32(GetLastError()); } *pbstrOut = SysAllocStringLen(NULL,size - 1); if (!*pbstrOut) return E_OUTOFMEMORY; size = GetLocaleInfoW(LOCALE_USER_DEFAULT,localeValue, *pbstrOut, size); if (!size) { ERR("GetLocaleInfo of 0x%x failed in 2nd stage?!\n", localeValue); SysFreeString(*pbstrOut); return HRESULT_FROM_WIN32(GetLastError()); } return S_OK; } /********************************************************************** * VarWeekdayName [OLEAUT32.129] * * Print the specified weekday as localized name. * * PARAMS * iWeekday [I] day of week, 1..7, 1="the first day of the week" * fAbbrev [I] 0 - full name, !0 - abbreviated name * iFirstDay [I] first day of week, * 0=system default, 1=Sunday, 2=Monday, .. (contrary to MSDN) * dwFlags [I] flag stuff. only VAR_CALENDAR_HIJRI possible. * pbstrOut [O] Destination for weekday name. * * RETURNS * Success: S_OK, pbstrOut contains the name. * Failure: E_INVALIDARG, if any parameter is invalid. * E_OUTOFMEMORY, if enough memory cannot be allocated. */ HRESULT WINAPI VarWeekdayName(INT iWeekday, INT fAbbrev, INT iFirstDay, ULONG dwFlags, BSTR *pbstrOut) { DWORD localeValue; INT size; /* Windows XP oleaut32.dll doesn't allow iWekday==0, contrary to MSDN */ if (iWeekday < 1 || iWeekday > 7) return E_INVALIDARG; if (iFirstDay < 0 || iFirstDay > 7) return E_INVALIDARG; if (!pbstrOut) return E_INVALIDARG; if (dwFlags) FIXME("Does not support dwFlags 0x%x, ignoring.\n", dwFlags); /* If we have to use the default firstDay, find which one it is */ if (iFirstDay == 0) { DWORD firstDay; localeValue = LOCALE_RETURN_NUMBER | LOCALE_IFIRSTDAYOFWEEK; size = GetLocaleInfoW(LOCALE_USER_DEFAULT, localeValue, (LPWSTR)&firstDay, sizeof(firstDay) / sizeof(WCHAR)); if (!size) { ERR("GetLocaleInfo 0x%x failed.\n", localeValue); return HRESULT_FROM_WIN32(GetLastError()); } iFirstDay = firstDay + 2; } /* Determine what we need to return */ localeValue = fAbbrev ? LOCALE_SABBREVDAYNAME1 : LOCALE_SDAYNAME1; localeValue += (7 + iWeekday - 1 + iFirstDay - 2) % 7; /* Determine the size of the data, allocate memory and retrieve the data */ size = GetLocaleInfoW(LOCALE_USER_DEFAULT, localeValue, NULL, 0); if (!size) { ERR("GetLocaleInfo 0x%x failed.\n", localeValue); return HRESULT_FROM_WIN32(GetLastError()); } *pbstrOut = SysAllocStringLen(NULL, size - 1); if (!*pbstrOut) return E_OUTOFMEMORY; size = GetLocaleInfoW(LOCALE_USER_DEFAULT, localeValue, *pbstrOut, size); if (!size) { ERR("GetLocaleInfo 0x%x failed in 2nd stage?!\n", localeValue); SysFreeString(*pbstrOut); return HRESULT_FROM_WIN32(GetLastError()); } return S_OK; } #endif ================================================ FILE: ole2disp/var/variant.c ================================================ /* * VARIANT16 * * Copyright 1998 Jean-Claude Cote * Copyright 2003 Jon Griffiths * Copyright 2005 Daniel Remenak * Copyright 2006 Google (Benjamin Arai) * * The algorithm for conversion from Julian days to day/month/year is based on * that devised by Henry Fliegel, as implemented in PostgreSQL, which is * Copyright 1994-7 Regents of the University of California * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define NONAMELESSUNION #define NONAMELESSSTRUCT #include "config.h" #include #include #include #define COBJMACROS #include "windef.h" #include "winbase.h" #include "wine/unicode.h" #include "winerror.h" #include "variant.h" #include "resource.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(variant); #define strcmpiA strcmpi #define strcmpA strcmp #define strchrA strchr #define strlenA strlen #define sprintfA sprintf #define strspnA strspn #define isdigitA isdigit #define strtoulA strtoul #define isalphaA isalpha #define strncmpiA _strnicmp #define isspaceA isspace static CRITICAL_SECTION cache_cs; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &cache_cs, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": cache_cs") } }; static CRITICAL_SECTION cache_cs = { &critsect_debug, -1, 0, 0, 0, 0 }; /* Convert a variant from one type to another */ static inline HRESULT VARIANT_Coerce(VARIANTARG16* pd, LCID lcid, USHORT wFlags, VARIANTARG16* ps, VARTYPE vt) { HRESULT res = DISP_E_TYPEMISMATCH; VARTYPE vtFrom = V_TYPE(ps); DWORD dwFlags = 0; TRACE("(%s,0x%08x,0x%04x,%s,%s)\n", debugstr_variant16(pd), lcid, wFlags, debugstr_variant16(ps), debugstr_vt(vt)); if (vt == VT_BSTR || vtFrom == VT_BSTR) { /* All flags passed to low level function are only used for * changing to or from strings. Map these here. */ if (wFlags & VARIANT_LOCALBOOL) dwFlags |= VAR_LOCALBOOL; if (wFlags & VARIANT_CALENDAR_HIJRI) dwFlags |= VAR_CALENDAR_HIJRI; if (wFlags & VARIANT_CALENDAR_THAI) dwFlags |= VAR_CALENDAR_THAI; if (wFlags & VARIANT_CALENDAR_GREGORIAN) dwFlags |= VAR_CALENDAR_GREGORIAN; if (wFlags & VARIANT_NOUSEROVERRIDE) dwFlags |= LOCALE_NOUSEROVERRIDE; if (wFlags & VARIANT_USE_NLS) dwFlags |= LOCALE_USE_NLS; } /* Map int/uint to i4/ui4 */ if (vt == VT_INT) vt = VT_I4; else if (vt == VT_UINT) vt = VT_UI4; if (vtFrom == VT_INT) vtFrom = VT_I4; else if (vtFrom == VT_UINT) vtFrom = VT_UI4; if (vt == vtFrom) return VariantCopy16(pd, ps); if (wFlags & VARIANT_NOVALUEPROP && vtFrom == VT_DISPATCH && vt != VT_UNKNOWN) { /* VARIANT_NOVALUEPROP prevents IDispatch objects from being coerced by * accessing the default object property. */ return DISP_E_TYPEMISMATCH; } switch (vt) { case VT_EMPTY: if (vtFrom == VT_NULL) return DISP_E_TYPEMISMATCH; /* ... Fall through */ case VT_NULL: if (vtFrom <= VT_UINT && vtFrom != (VARTYPE)15 && vtFrom != VT_ERROR) { res = VariantClear16( pd ); if (vt == VT_NULL && SUCCEEDED(res)) V_VT(pd) = VT_NULL; } return res; case VT_I1: switch (vtFrom) { case VT_EMPTY: V_I1(pd) = 0; return S_OK; case VT_I2: return VarI1FromI216(V_I2(ps), &V_I1(pd)); case VT_I4: return VarI1FromI416(V_I4(ps), &V_I1(pd)); case VT_UI1: V_I1(pd) = V_UI1(ps); return S_OK; case VT_UI2: return VarI1FromUI216(V_UI2(ps), &V_I1(pd)); case VT_UI4: return VarI1FromUI416(V_UI4(ps), &V_I1(pd)); case VT_I8: return VarI1FromI816(V_I8(ps), &V_I1(pd)); case VT_UI8: return VarI1FromUI816(V_UI8(ps), &V_I1(pd)); case VT_R4: return VarI1FromR416(V_R4(ps), &V_I1(pd)); case VT_R8: return VarI1FromR816(V_R8(ps), &V_I1(pd)); case VT_DATE: return VarI1FromDate16(V_DATE(ps), &V_I1(pd)); case VT_BOOL: return VarI1FromBool16(V_BOOL(ps), &V_I1(pd)); case VT_CY: return VarI1FromCy16(V_CY(ps), &V_I1(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarI1FromDec16(&V_DECIMAL(ps), &V_I1(pd) ); #endif case VT_DISPATCH: return VarI1FromDisp16(V_DISPATCH(ps), lcid, &V_I1(pd) ); case VT_BSTR: return VarI1FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_I1(pd) ); } break; case VT_I2: switch (vtFrom) { case VT_EMPTY: V_I2(pd) = 0; return S_OK; case VT_I1: return VarI2FromI116(V_I1(ps), &V_I2(pd)); case VT_I4: return VarI2FromI416(V_I4(ps), &V_I2(pd)); case VT_UI1: return VarI2FromUI116(V_UI1(ps), &V_I2(pd)); case VT_UI2: V_I2(pd) = V_UI2(ps); return S_OK; case VT_UI4: return VarI2FromUI416(V_UI4(ps), &V_I2(pd)); case VT_I8: return VarI2FromI816(V_I8(ps), &V_I2(pd)); case VT_UI8: return VarI2FromUI816(V_UI8(ps), &V_I2(pd)); case VT_R4: return VarI2FromR416(V_R4(ps), &V_I2(pd)); case VT_R8: return VarI2FromR816(V_R8(ps), &V_I2(pd)); case VT_DATE: return VarI2FromDate16(V_DATE(ps), &V_I2(pd)); case VT_BOOL: return VarI2FromBool16(V_BOOL(ps), &V_I2(pd)); case VT_CY: return VarI2FromCy16(V_CY(ps), &V_I2(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarI2FromDec16(&V_DECIMAL(ps), &V_I2(pd)); #endif case VT_DISPATCH: return VarI2FromDisp16(V_DISPATCH(ps), lcid, &V_I2(pd)); case VT_BSTR: return VarI2FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_I2(pd)); } break; case VT_I4: switch (vtFrom) { case VT_EMPTY: V_I4(pd) = 0; return S_OK; case VT_I1: return VarI4FromI116(V_I1(ps), &V_I4(pd)); case VT_I2: return VarI4FromI216(V_I2(ps), &V_I4(pd)); case VT_UI1: return VarI4FromUI116(V_UI1(ps), &V_I4(pd)); case VT_UI2: return VarI4FromUI216(V_UI2(ps), &V_I4(pd)); case VT_UI4: V_I4(pd) = V_UI4(ps); return S_OK; case VT_I8: return VarI4FromI816(V_I8(ps), &V_I4(pd)); case VT_UI8: return VarI4FromUI816(V_UI8(ps), &V_I4(pd)); case VT_R4: return VarI4FromR416(V_R4(ps), &V_I4(pd)); case VT_R8: return VarI4FromR816(V_R8(ps), &V_I4(pd)); case VT_DATE: return VarI4FromDate16(V_DATE(ps), &V_I4(pd)); case VT_BOOL: return VarI4FromBool16(V_BOOL(ps), &V_I4(pd)); case VT_CY: return VarI4FromCy16(V_CY(ps), &V_I4(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarI4FromDec16(&V_DECIMAL(ps), &V_I4(pd)); #endif case VT_DISPATCH: return VarI4FromDisp16(V_DISPATCH(ps), lcid, &V_I4(pd)); case VT_BSTR: return VarI4FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_I4(pd)); } break; case VT_UI1: switch (vtFrom) { case VT_EMPTY: V_UI1(pd) = 0; return S_OK; case VT_I1: V_UI1(pd) = V_I1(ps); return S_OK; case VT_I2: return VarUI1FromI216(V_I2(ps), &V_UI1(pd)); case VT_I4: return VarUI1FromI416(V_I4(ps), &V_UI1(pd)); case VT_UI2: return VarUI1FromUI216(V_UI2(ps), &V_UI1(pd)); case VT_UI4: return VarUI1FromUI416(V_UI4(ps), &V_UI1(pd)); case VT_I8: return VarUI1FromI816(V_I8(ps), &V_UI1(pd)); case VT_UI8: return VarUI1FromUI816(V_UI8(ps), &V_UI1(pd)); case VT_R4: return VarUI1FromR416(V_R4(ps), &V_UI1(pd)); case VT_R8: return VarUI1FromR816(V_R8(ps), &V_UI1(pd)); case VT_DATE: return VarUI1FromDate16(V_DATE(ps), &V_UI1(pd)); case VT_BOOL: return VarUI1FromBool16(V_BOOL(ps), &V_UI1(pd)); case VT_CY: return VarUI1FromCy16(V_CY(ps), &V_UI1(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarUI1FromDec16(&V_DECIMAL(ps), &V_UI1(pd)); #endif case VT_DISPATCH: return VarUI1FromDisp16(V_DISPATCH(ps), lcid, &V_UI1(pd)); case VT_BSTR: return VarUI1FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_UI1(pd)); } break; case VT_UI2: switch (vtFrom) { case VT_EMPTY: V_UI2(pd) = 0; return S_OK; case VT_I1: return VarUI2FromI116(V_I1(ps), &V_UI2(pd)); case VT_I2: V_UI2(pd) = V_I2(ps); return S_OK; case VT_I4: return VarUI2FromI416(V_I4(ps), &V_UI2(pd)); case VT_UI1: return VarUI2FromUI116(V_UI1(ps), &V_UI2(pd)); case VT_UI4: return VarUI2FromUI416(V_UI4(ps), &V_UI2(pd)); case VT_I8: return VarUI4FromI816(V_I8(ps), &V_UI4(pd)); case VT_UI8: return VarUI4FromUI816(V_UI8(ps), &V_UI4(pd)); case VT_R4: return VarUI2FromR416(V_R4(ps), &V_UI2(pd)); case VT_R8: return VarUI2FromR816(V_R8(ps), &V_UI2(pd)); case VT_DATE: return VarUI2FromDate16(V_DATE(ps), &V_UI2(pd)); case VT_BOOL: return VarUI2FromBool16(V_BOOL(ps), &V_UI2(pd)); case VT_CY: return VarUI2FromCy16(V_CY(ps), &V_UI2(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarUI2FromDec16(&V_DECIMAL(ps), &V_UI2(pd)); #endif case VT_DISPATCH: return VarUI2FromDisp16(V_DISPATCH(ps), lcid, &V_UI2(pd)); case VT_BSTR: return VarUI2FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_UI2(pd)); } break; case VT_UI4: switch (vtFrom) { case VT_EMPTY: V_UI4(pd) = 0; return S_OK; case VT_I1: return VarUI4FromI116(V_I1(ps), &V_UI4(pd)); case VT_I2: return VarUI4FromI216(V_I2(ps), &V_UI4(pd)); case VT_I4: V_UI4(pd) = V_I4(ps); return S_OK; case VT_UI1: return VarUI4FromUI116(V_UI1(ps), &V_UI4(pd)); case VT_UI2: return VarUI4FromUI216(V_UI2(ps), &V_UI4(pd)); case VT_I8: return VarUI4FromI816(V_I8(ps), &V_UI4(pd)); case VT_UI8: return VarUI4FromUI816(V_UI8(ps), &V_UI4(pd)); case VT_R4: return VarUI4FromR416(V_R4(ps), &V_UI4(pd)); case VT_R8: return VarUI4FromR816(V_R8(ps), &V_UI4(pd)); case VT_DATE: return VarUI4FromDate16(V_DATE(ps), &V_UI4(pd)); case VT_BOOL: return VarUI4FromBool16(V_BOOL(ps), &V_UI4(pd)); case VT_CY: return VarUI4FromCy16(V_CY(ps), &V_UI4(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarUI4FromDec16(&V_DECIMAL(ps), &V_UI4(pd)); #endif case VT_DISPATCH: return VarUI4FromDisp16(V_DISPATCH(ps), lcid, &V_UI4(pd)); case VT_BSTR: return VarUI4FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_UI4(pd)); } break; case VT_UI8: switch (vtFrom) { case VT_EMPTY: V_UI8(pd) = 0; return S_OK; case VT_I4: if (V_I4(ps) < 0) return DISP_E_OVERFLOW; V_UI8(pd) = V_I4(ps); return S_OK; case VT_I1: return VarUI8FromI116(V_I1(ps), &V_UI8(pd)); case VT_I2: return VarUI8FromI216(V_I2(ps), &V_UI8(pd)); case VT_UI1: return VarUI8FromUI116(V_UI1(ps), &V_UI8(pd)); case VT_UI2: return VarUI8FromUI216(V_UI2(ps), &V_UI8(pd)); case VT_UI4: return VarUI8FromUI416(V_UI4(ps), &V_UI8(pd)); case VT_I8: V_UI8(pd) = V_I8(ps); return S_OK; case VT_R4: return VarUI8FromR416(V_R4(ps), &V_UI8(pd)); case VT_R8: return VarUI8FromR816(V_R8(ps), &V_UI8(pd)); case VT_DATE: return VarUI8FromDate16(V_DATE(ps), &V_UI8(pd)); case VT_BOOL: return VarUI8FromBool16(V_BOOL(ps), &V_UI8(pd)); case VT_CY: return VarUI8FromCy16(V_CY(ps), &V_UI8(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarUI8FromDec16(&V_DECIMAL(ps), &V_UI8(pd)); #endif case VT_DISPATCH: return VarUI8FromDisp16(V_DISPATCH(ps), lcid, &V_UI8(pd)); case VT_BSTR: return VarUI8FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_UI8(pd)); } break; case VT_I8: switch (vtFrom) { case VT_EMPTY: V_I8(pd) = 0; return S_OK; case VT_I4: V_I8(pd) = V_I4(ps); return S_OK; case VT_I1: return VarI8FromI116(V_I1(ps), &V_I8(pd)); case VT_I2: return VarI8FromI216(V_I2(ps), &V_I8(pd)); case VT_UI1: return VarI8FromUI116(V_UI1(ps), &V_I8(pd)); case VT_UI2: return VarI8FromUI216(V_UI2(ps), &V_I8(pd)); case VT_UI4: return VarI8FromUI416(V_UI4(ps), &V_I8(pd)); case VT_UI8: V_I8(pd) = V_UI8(ps); return S_OK; case VT_R4: return VarI8FromR416(V_R4(ps), &V_I8(pd)); case VT_R8: return VarI8FromR816(V_R8(ps), &V_I8(pd)); case VT_DATE: return VarI8FromDate16(V_DATE(ps), &V_I8(pd)); case VT_BOOL: return VarI8FromBool16(V_BOOL(ps), &V_I8(pd)); case VT_CY: return VarI8FromCy16(V_CY(ps), &V_I8(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarI8FromDec16(&V_DECIMAL(ps), &V_I8(pd)); #endif case VT_DISPATCH: return VarI8FromDisp16(V_DISPATCH(ps), lcid, &V_I8(pd)); case VT_BSTR: return VarI8FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_I8(pd)); } break; case VT_R4: switch (vtFrom) { case VT_EMPTY: V_R4(pd) = 0.0f; return S_OK; case VT_I1: return VarR4FromI116(V_I1(ps), &V_R4(pd)); case VT_I2: return VarR4FromI216(V_I2(ps), &V_R4(pd)); case VT_I4: return VarR4FromI416(V_I4(ps), &V_R4(pd)); case VT_UI1: return VarR4FromUI116(V_UI1(ps), &V_R4(pd)); case VT_UI2: return VarR4FromUI216(V_UI2(ps), &V_R4(pd)); case VT_UI4: return VarR4FromUI416(V_UI4(ps), &V_R4(pd)); case VT_I8: return VarR4FromI816(V_I8(ps), &V_R4(pd)); case VT_UI8: return VarR4FromUI816(V_UI8(ps), &V_R4(pd)); case VT_R8: return VarR4FromR816(V_R8(ps), &V_R4(pd)); case VT_DATE: return VarR4FromDate16(V_DATE(ps), &V_R4(pd)); case VT_BOOL: return VarR4FromBool16(V_BOOL(ps), &V_R4(pd)); case VT_CY: return VarR4FromCy16(V_CY(ps), &V_R4(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarR4FromDec16(&V_DECIMAL(ps), &V_R4(pd)); #endif case VT_DISPATCH: return VarR4FromDisp16(V_DISPATCH(ps), lcid, &V_R4(pd)); case VT_BSTR: return VarR4FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_R4(pd)); } break; case VT_R8: switch (vtFrom) { case VT_EMPTY: V_R8(pd) = 0.0; return S_OK; case VT_I1: return VarR8FromI116(V_I1(ps), &V_R8(pd)); case VT_I2: return VarR8FromI216(V_I2(ps), &V_R8(pd)); case VT_I4: return VarR8FromI416(V_I4(ps), &V_R8(pd)); case VT_UI1: return VarR8FromUI116(V_UI1(ps), &V_R8(pd)); case VT_UI2: return VarR8FromUI216(V_UI2(ps), &V_R8(pd)); case VT_UI4: return VarR8FromUI416(V_UI4(ps), &V_R8(pd)); case VT_I8: return VarR8FromI816(V_I8(ps), &V_R8(pd)); case VT_UI8: return VarR8FromUI816(V_UI8(ps), &V_R8(pd)); case VT_R4: return VarR8FromR416(V_R4(ps), &V_R8(pd)); case VT_DATE: return VarR8FromDate16(V_DATE(ps), &V_R8(pd)); case VT_BOOL: return VarR8FromBool16(V_BOOL(ps), &V_R8(pd)); case VT_CY: return VarR8FromCy16(V_CY(ps), &V_R8(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarR8FromDec16(&V_DECIMAL(ps), &V_R8(pd)); #endif case VT_DISPATCH: return VarR8FromDisp16(V_DISPATCH(ps), lcid, &V_R8(pd)); case VT_BSTR: return VarR8FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_R8(pd)); } break; case VT_DATE: switch (vtFrom) { case VT_EMPTY: V_DATE(pd) = 0.0; return S_OK; case VT_I1: return VarDateFromI116(V_I1(ps), &V_DATE(pd)); case VT_I2: return VarDateFromI216(V_I2(ps), &V_DATE(pd)); case VT_I4: return VarDateFromI416(V_I4(ps), &V_DATE(pd)); case VT_UI1: return VarDateFromUI116(V_UI1(ps), &V_DATE(pd)); case VT_UI2: return VarDateFromUI216(V_UI2(ps), &V_DATE(pd)); case VT_UI4: return VarDateFromUI416(V_UI4(ps), &V_DATE(pd)); case VT_I8: return VarDateFromI816(V_I8(ps), &V_DATE(pd)); case VT_UI8: return VarDateFromUI816(V_UI8(ps), &V_DATE(pd)); case VT_R4: return VarDateFromR416(V_R4(ps), &V_DATE(pd)); case VT_R8: return VarDateFromR816(V_R8(ps), &V_DATE(pd)); case VT_BOOL: return VarDateFromBool16(V_BOOL(ps), &V_DATE(pd)); case VT_CY: return VarDateFromCy16(V_CY(ps), &V_DATE(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarDateFromDec16(&V_DECIMAL(ps), &V_DATE(pd)); #endif case VT_DISPATCH: return VarDateFromDisp16(V_DISPATCH(ps), lcid, &V_DATE(pd)); case VT_BSTR: return VarDateFromStr16(V_BSTR16(ps), lcid, dwFlags, &V_DATE(pd)); } break; case VT_BOOL: switch (vtFrom) { case VT_EMPTY: V_BOOL(pd) = 0; return S_OK; case VT_I1: return VarBoolFromI116(V_I1(ps), &V_BOOL(pd)); case VT_I2: return VarBoolFromI216(V_I2(ps), &V_BOOL(pd)); case VT_I4: return VarBoolFromI416(V_I4(ps), &V_BOOL(pd)); case VT_UI1: return VarBoolFromUI116(V_UI1(ps), &V_BOOL(pd)); case VT_UI2: return VarBoolFromUI216(V_UI2(ps), &V_BOOL(pd)); case VT_UI4: return VarBoolFromUI416(V_UI4(ps), &V_BOOL(pd)); case VT_I8: return VarBoolFromI816(V_I8(ps), &V_BOOL(pd)); case VT_UI8: return VarBoolFromUI816(V_UI8(ps), &V_BOOL(pd)); case VT_R4: return VarBoolFromR416(V_R4(ps), &V_BOOL(pd)); case VT_R8: return VarBoolFromR816(V_R8(ps), &V_BOOL(pd)); case VT_DATE: return VarBoolFromDate16(V_DATE(ps), &V_BOOL(pd)); case VT_CY: return VarBoolFromCy16(V_CY(ps), &V_BOOL(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarBoolFromDec16(&V_DECIMAL(ps), &V_BOOL(pd)); #endif case VT_DISPATCH: return VarBoolFromDisp16(V_DISPATCH(ps), lcid, &V_BOOL(pd)); case VT_BSTR: return VarBoolFromStr16(V_BSTR16(ps), lcid, dwFlags, &V_BOOL(pd)); } break; case VT_BSTR: switch (vtFrom) { case VT_EMPTY: V_BSTR(pd) = SysAllocStringLen16(NULL, 0); return V_BSTR(pd) ? S_OK : E_OUTOFMEMORY; case VT_BOOL: if (wFlags & (VARIANT_ALPHABOOL|VARIANT_LOCALBOOL)) return VarBstrFromBool16(V_BOOL(ps), lcid, dwFlags, &V_BSTR(pd)); return VarBstrFromI216(V_BOOL(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_I1: return VarBstrFromI116(V_I1(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_I2: return VarBstrFromI216(V_I2(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_I4: return VarBstrFromI416(V_I4(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_UI1: return VarBstrFromUI116(V_UI1(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_UI2: return VarBstrFromUI216(V_UI2(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_UI4: return VarBstrFromUI416(V_UI4(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_I8: return VarBstrFromI816(V_I8(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_UI8: return VarBstrFromUI816(V_UI8(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_R4: return VarBstrFromR416(V_R4(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_R8: return VarBstrFromR816(V_R8(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_DATE: return VarBstrFromDate16(V_DATE(ps), lcid, dwFlags, &V_BSTR(pd)); case VT_CY: return VarBstrFromCy16(V_CY(ps), lcid, dwFlags, &V_BSTR(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarBstrFromDec16(&V_DECIMAL(ps), lcid, dwFlags, &V_BSTR(pd)); #endif case VT_DISPATCH: return VarBstrFromDisp16(V_DISPATCH(ps), lcid, dwFlags, &V_BSTR(pd)); } break; case VT_CY: switch (vtFrom) { case VT_EMPTY: V_CY(pd).int64 = 0; return S_OK; case VT_I1: return VarCyFromI116(V_I1(ps), &V_CY(pd)); case VT_I2: return VarCyFromI216(V_I2(ps), &V_CY(pd)); case VT_I4: return VarCyFromI416(V_I4(ps), &V_CY(pd)); case VT_UI1: return VarCyFromUI116(V_UI1(ps), &V_CY(pd)); case VT_UI2: return VarCyFromUI216(V_UI2(ps), &V_CY(pd)); case VT_UI4: return VarCyFromUI416(V_UI4(ps), &V_CY(pd)); case VT_I8: return VarCyFromI816(V_I8(ps), &V_CY(pd)); case VT_UI8: return VarCyFromUI816(V_UI8(ps), &V_CY(pd)); case VT_R4: return VarCyFromR416(V_R4(ps), &V_CY(pd)); case VT_R8: return VarCyFromR816(V_R8(ps), &V_CY(pd)); case VT_DATE: return VarCyFromDate16(V_DATE(ps), &V_CY(pd)); case VT_BOOL: return VarCyFromBool16(V_BOOL(ps), &V_CY(pd)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarCyFromDec16(&V_DECIMAL(ps), &V_CY(pd)); #endif case VT_DISPATCH: return VarCyFromDisp16(V_DISPATCH(ps), lcid, &V_CY(pd)); case VT_BSTR: return VarCyFromStr16(V_BSTR16(ps), lcid, dwFlags, &V_CY(pd)); } break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: switch (vtFrom) { case VT_EMPTY: case VT_BOOL: DEC_SIGNSCALE(&V_DECIMAL(pd)) = SIGNSCALE(DECIMAL_POS,0); DEC_HI32(&V_DECIMAL(pd)) = 0; DEC_MID32(&V_DECIMAL(pd)) = 0; /* VarDecFromBool16() coerces to -1/0, ChangeTypeEx() coerces to 1/0. * VT_NULL and VT_EMPTY always give a 0 value. */ DEC_LO32(&V_DECIMAL(pd)) = vtFrom == VT_BOOL && V_BOOL(ps) ? 1 : 0; return S_OK; case VT_I1: return VarDecFromI116(V_I1(ps), &V_DECIMAL(pd)); case VT_I2: return VarDecFromI216(V_I2(ps), &V_DECIMAL(pd)); case VT_I4: return VarDecFromI416(V_I4(ps), &V_DECIMAL(pd)); case VT_UI1: return VarDecFromUI116(V_UI1(ps), &V_DECIMAL(pd)); case VT_UI2: return VarDecFromUI216(V_UI2(ps), &V_DECIMAL(pd)); case VT_UI4: return VarDecFromUI416(V_UI4(ps), &V_DECIMAL(pd)); case VT_I8: return VarDecFromI816(V_I8(ps), &V_DECIMAL(pd)); case VT_UI8: return VarDecFromUI816(V_UI8(ps), &V_DECIMAL(pd)); case VT_R4: return VarDecFromR416(V_R4(ps), &V_DECIMAL(pd)); case VT_R8: return VarDecFromR816(V_R8(ps), &V_DECIMAL(pd)); case VT_DATE: return VarDecFromDate16(V_DATE(ps), &V_DECIMAL(pd)); case VT_CY: return VarDecFromCy16(V_CY(ps), &V_DECIMAL(pd)); case VT_DISPATCH: return VarDecFromDisp16(V_DISPATCH(ps), lcid, &V_DECIMAL(pd)); case VT_BSTR: return VarDecFromStr16(V_BSTR16(ps), lcid, dwFlags, &V_DECIMAL(pd)); } break; #endif case VT_UNKNOWN: #ifdef AVAIL_32BIT_VAR switch (vtFrom) { case VT_DISPATCH: if (V_DISPATCH(ps) == NULL) { V_UNKNOWN(pd) = NULL; res = S_OK; } else res = IDispatch16_QueryInterface(V_DISPATCH(ps), MapLS(&IID_IUnknown), MapLS((LPVOID*)&V_UNKNOWN(pd))); break; } break; #endif #ifdef AVAIL_32BIT_VAR case VT_DISPATCH: switch (vtFrom) { case VT_UNKNOWN: if (V_UNKNOWN(ps) == NULL) { V_DISPATCH(pd) = NULL; res = S_OK; } else res = IUnknown16_QueryInterface(V_UNKNOWN(ps), MapLS(&IID_IDispatch), MapLS((LPVOID*)&V_DISPATCH(pd))); break; } break; #endif case VT_RECORD: break; } return res; } /* Coerce to/from an array */ static inline HRESULT VARIANT_CoerceArray(VARIANTARG16* pd, VARIANTARG16* ps, VARTYPE vt) { if (vt == VT_BSTR && V_VT(ps) == (VT_ARRAY|VT_UI1)) return BstrFromVector16(V_ARRAY(ps), &V_BSTR(pd)); if (V_VT(ps) == VT_BSTR && vt == (VT_ARRAY|VT_UI1)) return VectorFromBstr16(V_BSTR(ps), &V_ARRAY(pd)); if (V_VT(ps) == vt) return SafeArrayCopy16(V_ARRAY(ps), &V_ARRAY(pd)); return DISP_E_TYPEMISMATCH; } static HRESULT VARIANT_FetchDispatchValue(LPVARIANT16 pvDispatch, LPVARIANT16 pValue) { HRESULT hres; static DISPPARAMS emptyParams = { NULL, NULL, 0, 0 }; if ((V_VT(pvDispatch) & VT_TYPEMASK) == VT_DISPATCH) { if (NULL == V_DISPATCH(pvDispatch)) return DISP_E_TYPEMISMATCH; #if 0 hres = IDispatch16_Invoke(V_DISPATCH(pvDispatch), DISPID_VALUE, MapLS(&IID_NULL), LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, MapLS(&emptyParams), pValue, NULL, NULL); #else FIXME("\n"); #endif } else { hres = DISP_E_TYPEMISMATCH; } return hres; } /****************************************************************************** * Check if a variants type is valid. */ static inline HRESULT VARIANT_ValidateType(VARTYPE vt) { VARTYPE vtExtra = vt & VT_EXTRA_TYPE; vt &= VT_TYPEMASK; if (!(vtExtra & (VT_VECTOR|VT_RESERVED))) { if (vt < VT_VOID || vt == VT_RECORD || vt == VT_CLSID) { if ((vtExtra & (VT_BYREF|VT_ARRAY)) && vt <= VT_NULL) return DISP_E_BADVARTYPE; if (vt != (VARTYPE)15) return S_OK; } } return DISP_E_BADVARTYPE; } /****************************************************************************** * VariantInit16 [OLEAUT32.8] * * Initialise a variant. * * PARAMS * pVarg [O] Variant to initialise * * RETURNS * Nothing. * * NOTES * This function simply sets the type of the variant to VT_EMPTY. It does not * free any existing value, use VariantClear16() for that. */ void WINAPI VariantInit16(VARIANTARG16* pVarg) { TRACE("(%p)\n", pVarg); /* Win8.1 zeroes whole struct. Previous implementations don't set any other fields. */ V_VT(pVarg) = VT_EMPTY; } HRESULT VARIANT_ClearInd(VARIANTARG16 *pVarg) { HRESULT hres; TRACE("(%s)\n", debugstr_variant16(pVarg)); hres = VARIANT_ValidateType(V_VT(pVarg)); if (FAILED(hres)) return hres; switch (V_VT(pVarg)) { case VT_DISPATCH: case VT_UNKNOWN: if (V_UNKNOWN(pVarg)) IUnknown16_Release(V_UNKNOWN(pVarg)); break; case VT_UNKNOWN | VT_BYREF: case VT_DISPATCH | VT_BYREF: if(*V_UNKNOWNREF16(pVarg)) IUnknown16_Release(*V_UNKNOWNREF16(pVarg)); break; case VT_BSTR: SysFreeString16(V_BSTR(pVarg)); break; case VT_BSTR | VT_BYREF: SysFreeString16(*V_BSTRREF16(pVarg)); break; case VT_VARIANT | VT_BYREF: VariantClear16(V_VARIANTREF(pVarg)); break; #ifdef AVAIL_32BIT_VAR case VT_RECORD: case VT_RECORD | VT_BYREF: { struct __tagBRECORD* pBr = &V_UNION(pVarg,brecVal); if (pBr->pRecInfo) { IRecordInfo_RecordClear(pBr->pRecInfo, pBr->pvRecord); IRecordInfo_Release(pBr->pRecInfo); } break; } #endif default: if (V_ISARRAY(pVarg) || (V_VT(pVarg) & ~VT_BYREF) == VT_SAFEARRAY) { if (V_ISBYREF(pVarg)) { if (*V_ARRAYREF16(pVarg)) hres = SafeArrayDestroy16(*V_ARRAYREF16(pVarg)); } else if (V_ARRAY(pVarg)) hres = SafeArrayDestroy16(V_ARRAY(pVarg)); } break; } V_VT(pVarg) = VT_EMPTY; return hres; } /****************************************************************************** * VariantClear16 [OLEAUT32.9] * * Clear a variant. * * PARAMS * pVarg [I/O] Variant to clear * * RETURNS * Success: S_OK. Any previous value in pVarg is freed and its type is set to VT_EMPTY. * Failure: DISP_E_BADVARTYPE, if the variant is not a valid variant type. */ HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear16(VARIANTARG16* pVarg) { HRESULT hres; TRACE("(%s)\n", debugstr_variant16(pVarg)); hres = VARIANT_ValidateType(V_VT(pVarg)); if (SUCCEEDED(hres)) { if (!V_ISBYREF(pVarg)) { if (V_ISARRAY(pVarg) || V_VT(pVarg) == VT_SAFEARRAY) { hres = SafeArrayDestroy16(V_ARRAY(pVarg)); } else if (V_VT(pVarg) == VT_BSTR) { SysFreeString16(V_BSTR(pVarg)); } #ifdef AVAIL_32BIT_VAR else if (V_VT(pVarg) == VT_RECORD) { struct __tagBRECORD* pBr = &V_UNION(pVarg,brecVal); if (pBr->pRecInfo) { IRecordInfo_RecordClear(pBr->pRecInfo, pBr->pvRecord); IRecordInfo_Release(pBr->pRecInfo); } } #endif else if (V_VT(pVarg) == VT_DISPATCH || V_VT(pVarg) == VT_UNKNOWN) { if (V_UNKNOWN(pVarg)) IUnknown16_Release(V_UNKNOWN(pVarg)); } } V_VT(pVarg) = VT_EMPTY; } return hres; } #ifdef AVAIL_32BIT_VAR /****************************************************************************** * Copy an IRecordInfo object contained in a variant. */ static HRESULT VARIANT_CopyIRecordInfo(VARIANT16 *dest, VARIANT16 *src) { struct __tagBRECORD *dest_rec = &V_UNION(dest, brecVal); struct __tagBRECORD *src_rec = &V_UNION(src, brecVal); HRESULT hr = S_OK; ULONG size; if (!src_rec->pRecInfo) { if (src_rec->pvRecord) return E_INVALIDARG; return S_OK; } hr = IRecordInfo_GetSize(src_rec->pRecInfo, &size); if (FAILED(hr)) return hr; /* This could look cleaner if only RecordCreate() was used, but native doesn't use it. Memory should be allocated in a same way as RecordCreate() does, so RecordDestroy() could free it later. */ dest_rec->pvRecord = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); if (!dest_rec->pvRecord) return E_OUTOFMEMORY; dest_rec->pRecInfo = src_rec->pRecInfo; IRecordInfo_AddRef(src_rec->pRecInfo); return IRecordInfo_RecordCopy(src_rec->pRecInfo, src_rec->pvRecord, dest_rec->pvRecord); } #endif /****************************************************************************** * VariantCopy16 [OLEAUT32.10] * * Copy a variant. * * PARAMS * pvargDest [O] Destination for copy * pvargSrc [I] Source variant to copy * * RETURNS * Success: S_OK. pvargDest contains a copy of pvargSrc. * Failure: DISP_E_BADVARTYPE, if either variant has an invalid type. * E_OUTOFMEMORY, if memory cannot be allocated. Otherwise an * HRESULT error code from SafeArrayCopy16(), IRecordInfo_GetSize(), * or IRecordInfo_RecordCopy(), depending on the type of pvargSrc. * * NOTES * - If pvargSrc == pvargDest, this function does nothing, and succeeds if * pvargSrc is valid. Otherwise, pvargDest is always cleared using * VariantClear16() before pvargSrc is copied to it. If clearing pvargDest * fails, so does this function. * - VT_CLSID is a valid type type for pvargSrc, but not for pvargDest. * - For by-value non-intrinsic types, a deep copy is made, i.e. The whole value * is copied rather than just any pointers to it. * - For by-value object types the object pointer is copied and the objects * reference count increased using IUnknown_AddRef(). * - For all by-reference types, only the referencing pointer is copied. */ HRESULT WINAPI VariantCopy16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc) { HRESULT hres = S_OK; TRACE("(%s,%s)\n", debugstr_variant16(pvargDest), debugstr_variant16(pvargSrc)); if (V_TYPE(pvargSrc) == VT_CLSID || /* VT_CLSID is a special case */ FAILED(VARIANT_ValidateType(V_VT(pvargSrc)))) return DISP_E_BADVARTYPE; if (pvargSrc != pvargDest && SUCCEEDED(hres = VariantClear16(pvargDest))) { *pvargDest = *pvargSrc; /* Shallow copy the value */ if (!V_ISBYREF(pvargSrc)) { switch (V_VT(pvargSrc)) { case VT_BSTR: V_BSTR(pvargDest) = SysAllocStringByteLen16(BSTR_PTR(V_BSTR(pvargSrc)), SysStringByteLen16(V_BSTR(pvargSrc))); if (!V_BSTR(pvargDest)) hres = E_OUTOFMEMORY; break; #ifdef AVAIL_32BIT_VAR case VT_RECORD: hres = VARIANT_CopyIRecordInfo(pvargDest, pvargSrc); break; #endif case VT_DISPATCH: case VT_UNKNOWN: V_UNKNOWN(pvargDest) = V_UNKNOWN(pvargSrc); if (V_UNKNOWN(pvargSrc)) IUnknown16_AddRef(V_UNKNOWN(pvargSrc)); break; default: if (V_ISARRAY(pvargSrc)) hres = SafeArrayCopy16(V_ARRAY(pvargSrc), &V_ARRAY(pvargDest)); } } } return hres; } /* Return the byte size of a variants data */ static inline size_t VARIANT_DataSize(const VARIANT16* pv) { switch (V_TYPE(pv)) { case VT_I1: case VT_UI1: return sizeof(BYTE); case VT_I2: case VT_UI2: return sizeof(SHORT); case VT_INT: case VT_UINT: case VT_I4: case VT_UI4: return sizeof(LONG); case VT_I8: case VT_UI8: return sizeof(LONGLONG); case VT_R4: return sizeof(float); case VT_R8: return sizeof(double); case VT_DATE: return sizeof(DATE); case VT_BOOL: return sizeof(VARIANT_BOOL); case VT_DISPATCH: case VT_UNKNOWN: case VT_BSTR: return sizeof(void*); case VT_CY: return sizeof(CY); case VT_ERROR: return sizeof(SCODE); } TRACE("Shouldn't be called for variant %s!\n", debugstr_variant16(pv)); return 0; } /****************************************************************************** * VariantCopy16Ind [OLEAUT32.11] * * Copy a variant, dereferencing it if it is by-reference. * * PARAMS * pvargDest [O] Destination for copy * pvargSrc [I] Source variant to copy * * RETURNS * Success: S_OK. pvargDest contains a copy of pvargSrc. * Failure: An HRESULT error code indicating the error. * * NOTES * Failure: DISP_E_BADVARTYPE, if either variant has an invalid by-value type. * E_INVALIDARG, if pvargSrc is an invalid by-reference type. * E_OUTOFMEMORY, if memory cannot be allocated. Otherwise an * HRESULT error code from SafeArrayCopy16(), IRecordInfo_GetSize(), * or IRecordInfo_RecordCopy(), depending on the type of pvargSrc. * * NOTES * - If pvargSrc is by-value, this function behaves exactly as VariantCopy16(). * - If pvargSrc is by-reference, the value copied to pvargDest is the pointed-to * value. * - if pvargSrc == pvargDest, this function dereferences in place. Otherwise, * pvargDest is always cleared using VariantClear16() before pvargSrc is copied * to it. If clearing pvargDest fails, so does this function. */ HRESULT WINAPI VariantCopyInd16(VARIANT16* pvargDest, VARIANTARG16* pvargSrc) { VARIANTARG16 vTmp, *pSrc = pvargSrc; VARTYPE vt; HRESULT hres = S_OK; TRACE("(%s,%s)\n", debugstr_variant16(pvargDest), debugstr_variant16(pvargSrc)); if (!V_ISBYREF(pvargSrc)) return VariantCopy16(pvargDest, pvargSrc); /* Argument checking is more lax than VariantCopy16()... */ vt = V_TYPE(pvargSrc); if (V_ISARRAY(pvargSrc) || (V_VT(pvargSrc) == (VT_RECORD|VT_BYREF)) || (vt > VT_NULL && vt != (VARTYPE)15 && vt < VT_VOID && !(V_VT(pvargSrc) & (VT_VECTOR|VT_RESERVED)))) { /* OK */ } else return E_INVALIDARG; /* ...And the return value for invalid types differs too */ if (pvargSrc == pvargDest) { /* In place copy. Use a shallow copy of pvargSrc & init pvargDest. * This avoids an expensive VariantCopy16() call - e.g. SafeArrayCopy16(). */ vTmp = *pvargSrc; pSrc = &vTmp; V_VT(pvargDest) = VT_EMPTY; } else { /* Copy into another variant. Free the variant in pvargDest */ if (FAILED(hres = VariantClear16(pvargDest))) { TRACE("VariantClear16() of destination failed\n"); return hres; } } if (V_ISARRAY(pSrc)) { /* Native doesn't check that *V_ARRAYREF(pSrc) is valid */ hres = SafeArrayCopy16(*V_ARRAYREF16(pSrc), &V_ARRAY(pvargDest)); } else if (V_VT(pSrc) == (VT_BSTR|VT_BYREF)) { /* Native doesn't check that *V_BSTRREF(pSrc) is valid */ V_BSTR(pvargDest) = SysAllocStringByteLen16((char*)MapSL(*V_BSTRREF16(pSrc)), SysStringByteLen16(*V_BSTRREF16(pSrc))); } #ifdef AVAIL_32BIT_VAR else if (V_VT(pSrc) == (VT_RECORD|VT_BYREF)) { hres = VARIANT_CopyIRecordInfo(pvargDest, pvargSrc); } #endif else if (V_VT(pSrc) == (VT_DISPATCH|VT_BYREF) || V_VT(pSrc) == (VT_UNKNOWN|VT_BYREF)) { /* Native doesn't check that *V_UNKNOWNREF(pSrc) is valid */ V_UNKNOWN(pvargDest) = *V_UNKNOWNREF16(pSrc); if (*V_UNKNOWNREF16(pSrc)) IUnknown16_AddRef(*V_UNKNOWNREF16(pSrc)); } else if (V_VT(pSrc) == (VT_VARIANT|VT_BYREF)) { /* Native doesn't check that *V_VARIANTREF(pSrc) is valid */ if (V_VT(V_VARIANTREF16(pSrc)) == (VT_VARIANT|VT_BYREF)) hres = E_INVALIDARG; /* Don't dereference more than one level */ else hres = VariantCopyInd16(pvargDest, (VARIANTARG16 *)MapSL((SEGPTR)V_VARIANTREF(pSrc))); /* Use the dereferenced variants type value, not VT_VARIANT16 */ goto VariantCopy16Ind_Return; } else if (V_VT(pSrc) == (VT_DECIMAL|VT_BYREF)) { #ifdef AVAIL_32BIT_VAR memcpy(&DEC_SCALE(&V_DECIMAL(pvargDest)), &DEC_SCALE(V_DECIMALREF(pSrc)), sizeof(DECIMAL) - sizeof(USHORT)); #endif } else { /* Copy the pointed to data into this variant */ memcpy(&V_BYREF(pvargDest), MapSL(V_BYREF(pSrc)), VARIANT_DataSize(pSrc)); } V_VT(pvargDest) = V_VT(pSrc) & ~VT_BYREF; VariantCopy16Ind_Return: if (pSrc != pvargSrc) VariantClear16(pSrc); TRACE("returning 0x%08x, %s\n", hres, debugstr_variant16(pvargDest)); return hres; } /****************************************************************************** * VariantChangeType16 [OLEAUT32.12] * * Change the type of a variant. * * PARAMS * pvargDest [O] Destination for the converted variant * pvargSrc [O] Source variant to change the type of * wFlags [I] VARIANT_ flags from "oleauto.h" * vt [I] Variant type to change pvargSrc into * * RETURNS * Success: S_OK. pvargDest contains the converted value. * Failure: An HRESULT error code describing the failure. * * NOTES * The LCID used for the conversion is LOCALE_USER_DEFAULT. * See VariantChangeTypeEx16. */ HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc, USHORT wFlags, VARTYPE vt) { return VariantChangeTypeEx16( pvargDest, pvargSrc, LOCALE_USER_DEFAULT, wFlags, vt ); } /****************************************************************************** * VariantChangeTypeEx16 [OLEAUT32.147] * * Change the type of a variant. * * PARAMS * pvargDest [O] Destination for the converted variant * pvargSrc [O] Source variant to change the type of * lcid [I] LCID for the conversion * wFlags [I] VARIANT_ flags from "oleauto.h" * vt [I] Variant type to change pvargSrc into * * RETURNS * Success: S_OK. pvargDest contains the converted value. * Failure: An HRESULT error code describing the failure. * * NOTES * pvargDest and pvargSrc can point to the same variant to perform an in-place * conversion. If the conversion is successful, pvargSrc will be freed. */ HRESULT WINAPI VariantChangeTypeEx16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt) { HRESULT res = S_OK; TRACE("(%s,%s,0x%08x,0x%04x,%s)\n", debugstr_variant16(pvargDest), debugstr_variant16(pvargSrc), lcid, wFlags, debugstr_vt(vt)); if (vt == VT_CLSID) res = DISP_E_BADVARTYPE; else { res = VARIANT_ValidateType(V_VT(pvargSrc)); if (SUCCEEDED(res)) { res = VARIANT_ValidateType(vt); if (SUCCEEDED(res)) { VARIANTARG16 vTmp, vSrcDeref; if(V_ISBYREF(pvargSrc) && !V_BYREF(pvargSrc)) res = DISP_E_TYPEMISMATCH; else { V_VT(&vTmp) = VT_EMPTY; V_VT(&vSrcDeref) = VT_EMPTY; VariantClear16(&vTmp); VariantClear16(&vSrcDeref); } if (SUCCEEDED(res)) { res = VariantCopyInd16(&vSrcDeref, pvargSrc); if (SUCCEEDED(res)) { if (V_ISARRAY(&vSrcDeref) || (vt & VT_ARRAY)) res = VARIANT_CoerceArray(&vTmp, &vSrcDeref, vt); else res = VARIANT_Coerce(&vTmp, lcid, wFlags, &vSrcDeref, vt); if (SUCCEEDED(res)) { V_VT(&vTmp) = vt; res = VariantCopy16(pvargDest, &vTmp); } VariantClear16(&vTmp); VariantClear16(&vSrcDeref); } } } } } TRACE("returning 0x%08x, %s\n", res, debugstr_variant16(pvargDest)); return res; } /* Date Conversions */ #define IsLeapYear(y) (((y % 4) == 0) && (((y % 100) != 0) || ((y % 400) == 0))) /* Convert a VT_DATE value to a Julian Date */ static inline int VARIANT_JulianFromDate(int dateIn) { int julianDays = dateIn; julianDays -= DATE_MIN; /* Convert to + days from 1 Jan 100 AD */ julianDays += 1757585; /* Convert to + days from 23 Nov 4713 BC (Julian) */ return julianDays; } /* Convert a Julian Date to a VT_DATE value */ static inline int VARIANT_DateFromJulian(int dateIn) { int julianDays = dateIn; julianDays -= 1757585; /* Convert to + days from 1 Jan 100 AD */ julianDays += DATE_MIN; /* Convert to +/- days from 1 Jan 1899 AD */ return julianDays; } /* Convert a Julian date to Day/Month/Year - from PostgreSQL */ static inline void VARIANT_DMYFromJulian(int jd, USHORT *year, USHORT *month, USHORT *day) { int j, i, l, n; l = jd + 68569; n = l * 4 / 146097; l -= (n * 146097 + 3) / 4; i = (4000 * (l + 1)) / 1461001; l += 31 - (i * 1461) / 4; j = (l * 80) / 2447; *day = l - (j * 2447) / 80; l = j / 11; *month = (j + 2) - (12 * l); *year = 100 * (n - 49) + i + l; } /* Convert Day/Month/Year to a Julian date - from PostgreSQL */ static inline double VARIANT_JulianFromDMY(USHORT year, USHORT month, USHORT day) { int m12 = (month - 14) / 12; return ((1461 * (year + 4800 + m12)) / 4 + (367 * (month - 2 - 12 * m12)) / 12 - (3 * ((year + 4900 + m12) / 100)) / 4 + day - 32075); } /* Macros for accessing DOS format date/time fields */ #define DOS_YEAR(x) (1980 + (x >> 9)) #define DOS_MONTH(x) ((x >> 5) & 0xf) #define DOS_DAY(x) (x & 0x1f) #define DOS_HOUR(x) (x >> 11) #define DOS_MINUTE(x) ((x >> 5) & 0x3f) #define DOS_SECOND(x) ((x & 0x1f) << 1) /* Create a DOS format date/time */ #define DOS_DATE(d,m,y) (d | (m << 5) | ((y-1980) << 9)) #define DOS_TIME(h,m,s) ((s >> 1) | (m << 5) | (h << 11)) /* Roll a date forwards or backwards to correct it */ static HRESULT VARIANT_RollUdate(UDATE *lpUd) { static const BYTE days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; short iYear, iMonth, iDay, iHour, iMinute, iSecond; /* interpret values signed */ iYear = lpUd->st.wYear; iMonth = lpUd->st.wMonth; iDay = lpUd->st.wDay; iHour = lpUd->st.wHour; iMinute = lpUd->st.wMinute; iSecond = lpUd->st.wSecond; TRACE("Raw date: %d/%d/%d %d:%d:%d\n", iDay, iMonth, iYear, iHour, iMinute, iSecond); if (iYear > 9999 || iYear < -9999) return E_INVALIDARG; /* Invalid value */ /* Year 0 to 29 are treated as 2000 + year */ if (iYear >= 0 && iYear < 30) iYear += 2000; /* Remaining years < 100 are treated as 1900 + year */ else if (iYear >= 30 && iYear < 100) iYear += 1900; iMinute += iSecond / 60; iSecond = iSecond % 60; iHour += iMinute / 60; iMinute = iMinute % 60; iDay += iHour / 24; iHour = iHour % 24; iYear += iMonth / 12; iMonth = iMonth % 12; if (iMonth<=0) {iMonth+=12; iYear--;} while (iDay > days[iMonth]) { if (iMonth == 2 && IsLeapYear(iYear)) iDay -= 29; else iDay -= days[iMonth]; iMonth++; iYear += iMonth / 12; iMonth = iMonth % 12; } while (iDay <= 0) { iMonth--; if (iMonth<=0) {iMonth+=12; iYear--;} if (iMonth == 2 && IsLeapYear(iYear)) iDay += 29; else iDay += days[iMonth]; } if (iSecond<0){iSecond+=60; iMinute--;} if (iMinute<0){iMinute+=60; iHour--;} if (iHour<0) {iHour+=24; iDay--;} if (iYear<=0) iYear+=2000; lpUd->st.wYear = iYear; lpUd->st.wMonth = iMonth; lpUd->st.wDay = iDay; lpUd->st.wHour = iHour; lpUd->st.wMinute = iMinute; lpUd->st.wSecond = iSecond; TRACE("Rolled date: %d/%d/%d %d:%d:%d\n", lpUd->st.wDay, lpUd->st.wMonth, lpUd->st.wYear, lpUd->st.wHour, lpUd->st.wMinute, lpUd->st.wSecond); return S_OK; } /********************************************************************** * DosDateTimeToVariantTime [OLEAUT32.14] * * Convert a Dos format date and time into variant VT_DATE format. * * PARAMS * wDosDate [I] Dos format date * wDosTime [I] Dos format time * pDateOut [O] Destination for VT_DATE format * * RETURNS * Success: TRUE. pDateOut contains the converted time. * Failure: FALSE, if wDosDate or wDosTime are invalid (see notes). * * NOTES * - Dos format dates can only hold dates from 1-Jan-1980 to 31-Dec-2099. * - Dos format times are accurate to only 2 second precision. * - The format of a Dos Date is: *| Bits Values Meaning *| ---- ------ ------- *| 0-4 1-31 Day of the week. 0 rolls back one day. A value greater than *| the days in the month rolls forward the extra days. *| 5-8 1-12 Month of the year. 0 rolls back to December of the previous *| year. 13-15 are invalid. *| 9-15 0-119 Year based from 1980 (Max 2099). 120-127 are invalid. * - The format of a Dos Time is: *| Bits Values Meaning *| ---- ------ ------- *| 0-4 0-29 Seconds/2. 30 and 31 are invalid. *| 5-10 0-59 Minutes. 60-63 are invalid. *| 11-15 0-23 Hours (24 hour clock). 24-32 are invalid. */ INT WINAPI DosDateTimeToVariantTime16(USHORT wDosDate, USHORT wDosTime, double *pDateOut) { UDATE ud; TRACE("(0x%x(%d/%d/%d),0x%x(%d:%d:%d),%p)\n", wDosDate, DOS_YEAR(wDosDate), DOS_MONTH(wDosDate), DOS_DAY(wDosDate), wDosTime, DOS_HOUR(wDosTime), DOS_MINUTE(wDosTime), DOS_SECOND(wDosTime), pDateOut); ud.st.wYear = DOS_YEAR(wDosDate); ud.st.wMonth = DOS_MONTH(wDosDate); if (ud.st.wYear > 2099 || ud.st.wMonth > 12) return FALSE; ud.st.wDay = DOS_DAY(wDosDate); ud.st.wHour = DOS_HOUR(wDosTime); ud.st.wMinute = DOS_MINUTE(wDosTime); ud.st.wSecond = DOS_SECOND(wDosTime); ud.st.wDayOfWeek = ud.st.wMilliseconds = 0; if (ud.st.wHour > 23 || ud.st.wMinute > 59 || ud.st.wSecond > 59) return FALSE; /* Invalid values in Dos*/ return VarDateFromUdate16(&ud, 0, pDateOut) == S_OK; } /********************************************************************** * VariantTimeToDosDateTime [OLEAUT32.13] * * Convert a variant format date into a Dos format date and time. * * dateIn [I] VT_DATE time format * pwDosDate [O] Destination for Dos format date * pwDosTime [O] Destination for Dos format time * * RETURNS * Success: TRUE. pwDosDate and pwDosTime contains the converted values. * Failure: FALSE, if dateIn cannot be represented in Dos format. * * NOTES * See DosDateTimeToVariantTime16() for Dos format details and bugs. */ INT WINAPI VariantTimeToDosDateTime16(double dateIn, USHORT *pwDosDate, USHORT *pwDosTime) { UDATE ud; TRACE("(%g,%p,%p)\n", dateIn, pwDosDate, pwDosTime); if (FAILED(VarUdateFromDate16(dateIn, 0, &ud))) return FALSE; if (ud.st.wYear < 1980 || ud.st.wYear > 2099) return FALSE; *pwDosDate = DOS_DATE(ud.st.wDay, ud.st.wMonth, ud.st.wYear); *pwDosTime = DOS_TIME(ud.st.wHour, ud.st.wMinute, ud.st.wSecond); TRACE("Returning 0x%x(%d/%d/%d), 0x%x(%d:%d:%d)\n", *pwDosDate, DOS_YEAR(*pwDosDate), DOS_MONTH(*pwDosDate), DOS_DAY(*pwDosDate), *pwDosTime, DOS_HOUR(*pwDosTime), DOS_MINUTE(*pwDosTime), DOS_SECOND(*pwDosTime)); return TRUE; } /*********************************************************************** * SystemTimeToVariantTime [OLEAUT32.184] * * Convert a System format date and time into variant VT_DATE format. * * PARAMS * lpSt [I] System format date and time * pDateOut [O] Destination for VT_DATE format date * * RETURNS * Success: TRUE. *pDateOut contains the converted value. * Failure: FALSE, if lpSt cannot be represented in VT_DATE format. */ INT WINAPI SystemTimeToVariantTime16(LPSYSTEMTIME lpSt, double *pDateOut) { UDATE ud; TRACE("(%p->%d/%d/%d %d:%d:%d,%p)\n", lpSt, lpSt->wDay, lpSt->wMonth, lpSt->wYear, lpSt->wHour, lpSt->wMinute, lpSt->wSecond, pDateOut); if (lpSt->wMonth > 12) return FALSE; if (lpSt->wDay > 31) return FALSE; if ((short)lpSt->wYear < 0) return FALSE; ud.st = *lpSt; return VarDateFromUdate16(&ud, 0, pDateOut) == S_OK; } /*********************************************************************** * VariantTimeToSystemTime [OLEAUT32.185] * * Convert a variant VT_DATE into a System format date and time. * * PARAMS * datein [I] Variant VT_DATE format date * lpSt [O] Destination for System format date and time * * RETURNS * Success: TRUE. *lpSt contains the converted value. * Failure: FALSE, if dateIn is too large or small. */ INT WINAPI VariantTimeToSystemTime16(double dateIn, LPSYSTEMTIME lpSt) { UDATE ud; TRACE("(%g,%p)\n", dateIn, lpSt); if (FAILED(VarUdateFromDate16(dateIn, 0, &ud))) return FALSE; *lpSt = ud.st; return TRUE; } /*********************************************************************** * VarDateFromUdateEx [OLEAUT32.319] * * Convert an unpacked format date and time to a variant VT_DATE. * * PARAMS * pUdateIn [I] Unpacked format date and time to convert * lcid [I] Locale identifier for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pDateOut [O] Destination for variant VT_DATE. * * RETURNS * Success: S_OK. *pDateOut contains the converted value. * Failure: E_INVALIDARG, if pUdateIn cannot be represented in VT_DATE format. */ HRESULT WINAPI VarDateFromUdateEx16(UDATE *pUdateIn, LCID lcid, ULONG dwFlags, DATE *pDateOut) { UDATE ud; double dateVal = 0; TRACE("(%p->%d/%d/%d %d:%d:%d:%d %d %d,0x%08x,0x%08x,%p)\n", pUdateIn, pUdateIn->st.wMonth, pUdateIn->st.wDay, pUdateIn->st.wYear, pUdateIn->st.wHour, pUdateIn->st.wMinute, pUdateIn->st.wSecond, pUdateIn->st.wMilliseconds, pUdateIn->st.wDayOfWeek, pUdateIn->wDayOfYear, lcid, dwFlags, pDateOut); if (lcid != MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)) FIXME("lcid possibly not handled, treating as en-us\n"); if (dwFlags & ~(VAR_TIMEVALUEONLY|VAR_DATEVALUEONLY)) FIXME("unsupported flags: %x\n", dwFlags); ud = *pUdateIn; if (dwFlags & VAR_VALIDDATE) WARN("Ignoring VAR_VALIDDATE\n"); if (FAILED(VARIANT_RollUdate(&ud))) return E_INVALIDARG; /* Date */ if (!(dwFlags & VAR_TIMEVALUEONLY)) dateVal = VARIANT_DateFromJulian(VARIANT_JulianFromDMY(ud.st.wYear, ud.st.wMonth, ud.st.wDay)); if ((dwFlags & VAR_TIMEVALUEONLY) || !(dwFlags & VAR_DATEVALUEONLY)) { double dateSign = (dateVal < 0.0) ? -1.0 : 1.0; /* Time */ dateVal += ud.st.wHour / 24.0 * dateSign; dateVal += ud.st.wMinute / 1440.0 * dateSign; dateVal += ud.st.wSecond / 86400.0 * dateSign; } TRACE("Returning %g\n", dateVal); *pDateOut = dateVal; return S_OK; } /*********************************************************************** * VarDateFromUdate [OLEAUT32.330] * * Convert an unpacked format date and time to a variant VT_DATE. * * PARAMS * pUdateIn [I] Unpacked format date and time to convert * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pDateOut [O] Destination for variant VT_DATE. * * RETURNS * Success: S_OK. *pDateOut contains the converted value. * Failure: E_INVALIDARG, if pUdateIn cannot be represented in VT_DATE format. * * NOTES * This function uses the United States English locale for the conversion. Use * VarDateFromUdateEx16() for alternate locales. */ HRESULT WINAPI VarDateFromUdate16(UDATE *pUdateIn, ULONG dwFlags, DATE *pDateOut) { LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); return VarDateFromUdateEx16(pUdateIn, lcid, dwFlags, pDateOut); } /*********************************************************************** * VarUdateFromDate [OLEAUT32.331] * * Convert a variant VT_DATE into an unpacked format date and time. * * PARAMS * datein [I] Variant VT_DATE format date * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * lpUdate [O] Destination for unpacked format date and time * * RETURNS * Success: S_OK. *lpUdate contains the converted value. * Failure: E_INVALIDARG, if dateIn is too large or small. */ HRESULT WINAPI VarUdateFromDate16(DATE dateIn, ULONG dwFlags, UDATE *lpUdate) { /* Cumulative totals of days per month */ static const USHORT cumulativeDays[] = { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; double datePart, timePart; int julianDays; TRACE("(%g,0x%08x,%p)\n", dateIn, dwFlags, lpUdate); if (dateIn <= (DATE_MIN - 1.0) || dateIn >= (DATE_MAX + 1.0)) return E_INVALIDARG; datePart = dateIn < 0.0 ? ceil(dateIn) : floor(dateIn); /* Compensate for int truncation (always downwards) */ timePart = fabs(dateIn - datePart) + 0.00000000001; if (timePart >= 1.0) timePart -= 0.00000000001; /* Date */ julianDays = VARIANT_JulianFromDate(dateIn); VARIANT_DMYFromJulian(julianDays, &lpUdate->st.wYear, &lpUdate->st.wMonth, &lpUdate->st.wDay); datePart = (datePart + 1.5) / 7.0; lpUdate->st.wDayOfWeek = (datePart - floor(datePart)) * 7; if (lpUdate->st.wDayOfWeek == 0) lpUdate->st.wDayOfWeek = 5; else if (lpUdate->st.wDayOfWeek == 1) lpUdate->st.wDayOfWeek = 6; else lpUdate->st.wDayOfWeek -= 2; if (lpUdate->st.wMonth > 2 && IsLeapYear(lpUdate->st.wYear)) lpUdate->wDayOfYear = 1; /* After February, in a leap year */ else lpUdate->wDayOfYear = 0; lpUdate->wDayOfYear += cumulativeDays[lpUdate->st.wMonth]; lpUdate->wDayOfYear += lpUdate->st.wDay; /* Time */ timePart *= 24.0; lpUdate->st.wHour = timePart; timePart -= lpUdate->st.wHour; timePart *= 60.0; lpUdate->st.wMinute = timePart; timePart -= lpUdate->st.wMinute; timePart *= 60.0; lpUdate->st.wSecond = timePart; timePart -= lpUdate->st.wSecond; lpUdate->st.wMilliseconds = 0; if (timePart > 0.5) { /* Round the milliseconds, adjusting the time/date forward if needed */ if (lpUdate->st.wSecond < 59) lpUdate->st.wSecond++; else { lpUdate->st.wSecond = 0; if (lpUdate->st.wMinute < 59) lpUdate->st.wMinute++; else { lpUdate->st.wMinute = 0; if (lpUdate->st.wHour < 23) lpUdate->st.wHour++; else { lpUdate->st.wHour = 0; /* Roll over a whole day */ if (++lpUdate->st.wDay > 28) VARIANT_RollUdate(lpUdate); } } } } return S_OK; } #define GET_NUMBER_TEXT(fld,name) \ buff[0] = 0; \ if (!GetLocaleInfoA(lcid, lctype|fld, buff, 2)) \ WARN("buffer too small for " #fld "\n"); \ else \ if (buff[0]) lpChars->name = buff[0]; \ TRACE("lcid 0x%x, " #name "=%d '%c'\n", lcid, lpChars->name, lpChars->name) /* Get the valid number characters for an lcid */ static void VARIANT_GetLocalisedNumberChars(VARIANT_NUMBER_CHARS *lpChars, LCID lcid, DWORD dwFlags) { static const VARIANT_NUMBER_CHARS defaultChars = { '-','+','.',',','$',0,'.',',' }; static VARIANT_NUMBER_CHARS lastChars; static LCID lastLcid = -1; static DWORD lastFlags = 0; LCTYPE lctype = dwFlags & LOCALE_NOUSEROVERRIDE; OLECHAR16 buff[4]; /* To make caching thread-safe, a critical section is needed */ EnterCriticalSection(&cache_cs); /* Asking for default locale entries is very expensive: It is a registry server call. So cache one locally, as Microsoft does it too */ if(lcid == lastLcid && dwFlags == lastFlags) { memcpy(lpChars, &lastChars, sizeof(defaultChars)); LeaveCriticalSection(&cache_cs); return; } memcpy(lpChars, &defaultChars, sizeof(defaultChars)); GET_NUMBER_TEXT(LOCALE_SNEGATIVESIGN, cNegativeSymbol); GET_NUMBER_TEXT(LOCALE_SPOSITIVESIGN, cPositiveSymbol); GET_NUMBER_TEXT(LOCALE_SDECIMAL, cDecimalPoint); GET_NUMBER_TEXT(LOCALE_STHOUSAND, cDigitSeparator); GET_NUMBER_TEXT(LOCALE_SMONDECIMALSEP, cCurrencyDecimalPoint); GET_NUMBER_TEXT(LOCALE_SMONTHOUSANDSEP, cCurrencyDigitSeparator); /* Local currency symbols are often 2 characters */ lpChars->cCurrencyLocal2 = '\0'; switch(GetLocaleInfoA(lcid, lctype|LOCALE_SCURRENCY, buff, ARRAY_SIZE(buff))) { case 3: lpChars->cCurrencyLocal2 = buff[1]; /* Fall through */ case 2: lpChars->cCurrencyLocal = buff[0]; break; default: WARN("buffer too small for LOCALE_SCURRENCY\n"); } TRACE("lcid 0x%x, cCurrencyLocal =%d,%d '%c','%c'\n", lcid, lpChars->cCurrencyLocal, lpChars->cCurrencyLocal2, lpChars->cCurrencyLocal, lpChars->cCurrencyLocal2); memcpy(&lastChars, lpChars, sizeof(defaultChars)); lastLcid = lcid; lastFlags = dwFlags; LeaveCriticalSection(&cache_cs); } /* Number Parsing States */ #define B_PROCESSING_EXPONENT 0x1 #define B_NEGATIVE_EXPONENT 0x2 #define B_EXPONENT_START 0x4 #define B_INEXACT_ZEROS 0x8 #define B_LEADING_ZERO 0x10 #define B_PROCESSING_HEX 0x20 #define B_PROCESSING_OCT 0x40 /********************************************************************** * VarParseNumFromStr [OLEAUT32.46] * * Parse a string containing a number into a NUMPARSE structure. * * PARAMS * lpszStr [I] String to parse number from * lcid [I] Locale Id for the conversion * dwFlags [I] 0, or LOCALE_NOUSEROVERRIDE to use system default number chars * pNumprs [I/O] Destination for parsed number * rgbDig [O] Destination for digits read in * * RETURNS * Success: S_OK. pNumprs and rgbDig contain the parsed representation of * the number. * Failure: E_INVALIDARG, if any parameter is invalid. * DISP_E_TYPEMISMATCH, if the string is not a number or is formatted * incorrectly. * DISP_E_OVERFLOW, if rgbDig is too small to hold the number. * * NOTES * pNumprs must have the following fields set: * cDig: Set to the size of rgbDig. * dwInFlags: Set to the allowable syntax of the number using NUMPRS_ flags * from "oleauto.h". * * FIXME * - I am unsure if this function should parse non-Arabic (e.g. Thai) * numerals, so this has not been implemented. */ HRESULT WINAPI VarParseNumFromStr16(OLECHAR16 *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig) { VARIANT_NUMBER_CHARS chars; BYTE rgbTmp[1024]; DWORD dwState = B_EXPONENT_START|B_INEXACT_ZEROS; int iMaxDigits = ARRAY_SIZE(rgbTmp); int cchUsed = 0; TRACE("(%s,%d,0x%08x,%p,%p)\n", debugstr_a(lpszStr), lcid, dwFlags, pNumprs, rgbDig); if (!pNumprs || !rgbDig) return E_INVALIDARG; if (pNumprs->cDig < iMaxDigits) iMaxDigits = pNumprs->cDig; pNumprs->cDig = 0; pNumprs->dwOutFlags = 0; pNumprs->cchUsed = 0; pNumprs->nBaseShift = 0; pNumprs->nPwr10 = 0; if (!lpszStr) return DISP_E_TYPEMISMATCH; VARIANT_GetLocalisedNumberChars(&chars, lcid, dwFlags); /* First consume all the leading symbols and space from the string */ while (1) { if (pNumprs->dwInFlags & NUMPRS_LEADING_WHITE && isspaceA(*lpszStr)) { pNumprs->dwOutFlags |= NUMPRS_LEADING_WHITE; do { cchUsed++; lpszStr++; } while (isspaceA(*lpszStr)); } else if (pNumprs->dwInFlags & NUMPRS_LEADING_PLUS && *lpszStr == chars.cPositiveSymbol && !(pNumprs->dwOutFlags & NUMPRS_LEADING_PLUS)) { pNumprs->dwOutFlags |= NUMPRS_LEADING_PLUS; cchUsed++; lpszStr++; } else if (pNumprs->dwInFlags & NUMPRS_LEADING_MINUS && *lpszStr == chars.cNegativeSymbol && !(pNumprs->dwOutFlags & NUMPRS_LEADING_MINUS)) { pNumprs->dwOutFlags |= (NUMPRS_LEADING_MINUS|NUMPRS_NEG); cchUsed++; lpszStr++; } else if (pNumprs->dwInFlags & NUMPRS_CURRENCY && !(pNumprs->dwOutFlags & NUMPRS_CURRENCY) && *lpszStr == chars.cCurrencyLocal && (!chars.cCurrencyLocal2 || lpszStr[1] == chars.cCurrencyLocal2)) { pNumprs->dwOutFlags |= NUMPRS_CURRENCY; cchUsed++; lpszStr++; /* Only accept currency characters */ chars.cDecimalPoint = chars.cCurrencyDecimalPoint; chars.cDigitSeparator = chars.cCurrencyDigitSeparator; } else if (pNumprs->dwInFlags & NUMPRS_PARENS && *lpszStr == '(' && !(pNumprs->dwOutFlags & NUMPRS_PARENS)) { pNumprs->dwOutFlags |= NUMPRS_PARENS; cchUsed++; lpszStr++; } else break; } if (!(pNumprs->dwOutFlags & NUMPRS_CURRENCY)) { /* Only accept non-currency characters */ chars.cCurrencyDecimalPoint = chars.cDecimalPoint; chars.cCurrencyDigitSeparator = chars.cDigitSeparator; } if ((*lpszStr == '&' && (*(lpszStr+1) == 'H' || *(lpszStr+1) == 'h')) && pNumprs->dwInFlags & NUMPRS_HEX_OCT) { dwState |= B_PROCESSING_HEX; pNumprs->dwOutFlags |= NUMPRS_HEX_OCT; cchUsed=cchUsed+2; lpszStr=lpszStr+2; } else if ((*lpszStr == '&' && (*(lpszStr+1) == 'O' || *(lpszStr+1) == 'o')) && pNumprs->dwInFlags & NUMPRS_HEX_OCT) { dwState |= B_PROCESSING_OCT; pNumprs->dwOutFlags |= NUMPRS_HEX_OCT; cchUsed=cchUsed+2; lpszStr=lpszStr+2; } /* Strip Leading zeros */ while (*lpszStr == '0') { dwState |= B_LEADING_ZERO; cchUsed++; lpszStr++; } while (*lpszStr) { if (isdigitA(*lpszStr)) { if (dwState & B_PROCESSING_EXPONENT) { int exponentSize = 0; if (dwState & B_EXPONENT_START) { if (!isdigitA(*lpszStr)) break; /* No exponent digits - invalid */ while (*lpszStr == '0') { /* Skip leading zero's in the exponent */ cchUsed++; lpszStr++; } } while (isdigitA(*lpszStr)) { exponentSize *= 10; exponentSize += *lpszStr - '0'; cchUsed++; lpszStr++; } if (dwState & B_NEGATIVE_EXPONENT) exponentSize = -exponentSize; /* Add the exponent into the powers of 10 */ pNumprs->nPwr10 += exponentSize; dwState &= ~(B_PROCESSING_EXPONENT|B_EXPONENT_START); lpszStr--; /* back up to allow processing of next char */ } else { if ((pNumprs->cDig >= iMaxDigits) && !(dwState & B_PROCESSING_HEX) && !(dwState & B_PROCESSING_OCT)) { pNumprs->dwOutFlags |= NUMPRS_INEXACT; if (*lpszStr != '0') dwState &= ~B_INEXACT_ZEROS; /* Inexact number with non-trailing zeros */ /* This digit can't be represented, but count it in nPwr10 */ if (pNumprs->dwOutFlags & NUMPRS_DECIMAL) pNumprs->nPwr10--; else pNumprs->nPwr10++; } else { if ((dwState & B_PROCESSING_OCT) && ((*lpszStr == '8') || (*lpszStr == '9'))) break; if (pNumprs->dwOutFlags & NUMPRS_DECIMAL) pNumprs->nPwr10--; /* Count decimal points in nPwr10 */ rgbTmp[pNumprs->cDig] = *lpszStr - '0'; } pNumprs->cDig++; cchUsed++; } } else if (*lpszStr == chars.cDigitSeparator && pNumprs->dwInFlags & NUMPRS_THOUSANDS) { pNumprs->dwOutFlags |= NUMPRS_THOUSANDS; cchUsed++; } else if (*lpszStr == chars.cDecimalPoint && pNumprs->dwInFlags & NUMPRS_DECIMAL && !(pNumprs->dwOutFlags & (NUMPRS_DECIMAL|NUMPRS_EXPONENT))) { pNumprs->dwOutFlags |= NUMPRS_DECIMAL; cchUsed++; /* If we have no digits so far, skip leading zeros */ if (!pNumprs->cDig) { while (lpszStr[1] == '0') { dwState |= B_LEADING_ZERO; cchUsed++; lpszStr++; pNumprs->nPwr10--; } } } else if (((*lpszStr >= 'a' && *lpszStr <= 'f') || (*lpszStr >= 'A' && *lpszStr <= 'F')) && dwState & B_PROCESSING_HEX) { if (pNumprs->cDig >= iMaxDigits) { return DISP_E_OVERFLOW; } else { if (*lpszStr >= 'a') rgbTmp[pNumprs->cDig] = *lpszStr - 'a' + 10; else rgbTmp[pNumprs->cDig] = *lpszStr - 'A' + 10; } pNumprs->cDig++; cchUsed++; } else if ((*lpszStr == 'e' || *lpszStr == 'E') && pNumprs->dwInFlags & NUMPRS_EXPONENT && !(pNumprs->dwOutFlags & NUMPRS_EXPONENT)) { dwState |= B_PROCESSING_EXPONENT; pNumprs->dwOutFlags |= NUMPRS_EXPONENT; cchUsed++; } else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cPositiveSymbol) { cchUsed++; /* Ignore positive exponent */ } else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cNegativeSymbol) { dwState |= B_NEGATIVE_EXPONENT; cchUsed++; } else break; /* Stop at an unrecognised character */ lpszStr++; } if (!pNumprs->cDig && dwState & B_LEADING_ZERO) { /* Ensure a 0 on its own gets stored */ pNumprs->cDig = 1; rgbTmp[0] = 0; } if (pNumprs->dwOutFlags & NUMPRS_EXPONENT && dwState & B_PROCESSING_EXPONENT) { pNumprs->cchUsed = cchUsed; WARN("didn't completely parse exponent\n"); return DISP_E_TYPEMISMATCH; /* Failed to completely parse the exponent */ } if (pNumprs->dwOutFlags & NUMPRS_INEXACT) { if (dwState & B_INEXACT_ZEROS) pNumprs->dwOutFlags &= ~NUMPRS_INEXACT; /* All zeros doesn't set NUMPRS_INEXACT */ } else if(pNumprs->dwInFlags & NUMPRS_HEX_OCT) { /* copy all of the digits into the output digit buffer */ /* this is exactly what windows does although it also returns */ /* cDig of X and writes X+Y where Y>=0 number of digits to rgbDig */ memcpy(rgbDig, rgbTmp, pNumprs->cDig * sizeof(BYTE)); if (dwState & B_PROCESSING_HEX) { /* hex numbers have always the same format */ pNumprs->nPwr10=0; pNumprs->nBaseShift=4; } else { if (dwState & B_PROCESSING_OCT) { /* oct numbers have always the same format */ pNumprs->nPwr10=0; pNumprs->nBaseShift=3; } else { while (pNumprs->cDig > 1 && !rgbTmp[pNumprs->cDig - 1]) { pNumprs->nPwr10++; pNumprs->cDig--; } } } } else { /* Remove trailing zeros from the last (whole number or decimal) part */ while (pNumprs->cDig > 1 && !rgbTmp[pNumprs->cDig - 1]) { pNumprs->nPwr10++; pNumprs->cDig--; } } if (pNumprs->cDig <= iMaxDigits) pNumprs->dwOutFlags &= ~NUMPRS_INEXACT; /* Ignore stripped zeros for NUMPRS_INEXACT */ else pNumprs->cDig = iMaxDigits; /* Only return iMaxDigits worth of digits */ /* Copy the digits we processed into rgbDig */ memcpy(rgbDig, rgbTmp, pNumprs->cDig * sizeof(BYTE)); /* Consume any trailing symbols and space */ while (1) { if ((pNumprs->dwInFlags & NUMPRS_TRAILING_WHITE) && isspaceA(*lpszStr)) { pNumprs->dwOutFlags |= NUMPRS_TRAILING_WHITE; do { cchUsed++; lpszStr++; } while (isspaceA(*lpszStr)); } else if (pNumprs->dwInFlags & NUMPRS_TRAILING_PLUS && !(pNumprs->dwOutFlags & NUMPRS_LEADING_PLUS) && *lpszStr == chars.cPositiveSymbol) { pNumprs->dwOutFlags |= NUMPRS_TRAILING_PLUS; cchUsed++; lpszStr++; } else if (pNumprs->dwInFlags & NUMPRS_TRAILING_MINUS && !(pNumprs->dwOutFlags & NUMPRS_LEADING_MINUS) && *lpszStr == chars.cNegativeSymbol) { pNumprs->dwOutFlags |= (NUMPRS_TRAILING_MINUS|NUMPRS_NEG); cchUsed++; lpszStr++; } else if (pNumprs->dwInFlags & NUMPRS_PARENS && *lpszStr == ')' && pNumprs->dwOutFlags & NUMPRS_PARENS) { cchUsed++; lpszStr++; pNumprs->dwOutFlags |= NUMPRS_NEG; } else break; } if (pNumprs->dwOutFlags & NUMPRS_PARENS && !(pNumprs->dwOutFlags & NUMPRS_NEG)) { pNumprs->cchUsed = cchUsed; return DISP_E_TYPEMISMATCH; /* Opening parenthesis not matched */ } if (pNumprs->dwInFlags & NUMPRS_USE_ALL && *lpszStr != '\0') return DISP_E_TYPEMISMATCH; /* Not all chars were consumed */ if (!pNumprs->cDig) return DISP_E_TYPEMISMATCH; /* No Number found */ pNumprs->cchUsed = cchUsed; return S_OK; } /* VTBIT flags indicating an integer value */ #define INTEGER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2|VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8) /* VTBIT flags indicating a real number value */ #define REAL_VTBITS (VTBIT_R4|VTBIT_R8|VTBIT_CY) /* Helper macros to check whether bit pattern fits in VARIANT16 (x is a ULONG64 ) */ #define FITS_AS_I1(x) ((x) >> 8 == 0) #define FITS_AS_I2(x) ((x) >> 16 == 0) #define FITS_AS_I4(x) ((x) >> 32 == 0) /********************************************************************** * VarNumFromParseNum [OLEAUT32.47] * * Convert a NUMPARSE structure into a numeric Variant type. * * PARAMS * pNumprs [I] Source for parsed number. cDig must be set to the size of rgbDig * rgbDig [I] Source for the numbers digits * dwVtBits [I] VTBIT_ flags from "oleauto.h" indicating the acceptable dest types * pVarDst [O] Destination for the converted Variant value. * * RETURNS * Success: S_OK. pVarDst contains the converted value. * Failure: E_INVALIDARG, if any parameter is invalid. * DISP_E_OVERFLOW, if the number is too big for the types set in dwVtBits. * * NOTES * - The smallest favoured type present in dwVtBits that can represent the * number in pNumprs without losing precision is used. * - Signed types are preferred over unsigned types of the same size. * - Preferred types in order are: integer, float, double, currency then decimal. * - Rounding (dropping of decimal points) occurs without error. See VarI8FromR816() * for details of the rounding method. * - pVarDst is not cleared before the result is stored in it. * - WinXP and Win2003 support VTBIT_I8, VTBIT_UI8 but that's buggy (by * design?): If some other VTBIT's for integers are specified together * with VTBIT_I8 and the number will fit only in a VT_I8 Windows will "cast" * the number to the smallest requested integer truncating this way the * number. Wine doesn't implement this "feature" (yet?). */ HRESULT WINAPI VarNumFromParseNum16(NUMPARSE *pNumprs, BYTE *rgbDig, ULONG dwVtBits, VARIANT16 *pVarDst) { /* Scale factors and limits for double arithmetic */ static const double dblMultipliers[11] = { 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0, 1000000000.0, 10000000000.0 }; static const double dblMinimums[11] = { R8_MIN, R8_MIN*10.0, R8_MIN*100.0, R8_MIN*1000.0, R8_MIN*10000.0, R8_MIN*100000.0, R8_MIN*1000000.0, R8_MIN*10000000.0, R8_MIN*100000000.0, R8_MIN*1000000000.0, R8_MIN*10000000000.0 }; static const double dblMaximums[11] = { R8_MAX, R8_MAX/10.0, R8_MAX/100.0, R8_MAX/1000.0, R8_MAX/10000.0, R8_MAX/100000.0, R8_MAX/1000000.0, R8_MAX/10000000.0, R8_MAX/100000000.0, R8_MAX/1000000000.0, R8_MAX/10000000000.0 }; int wholeNumberDigits, fractionalDigits, divisor10 = 0, multiplier10 = 0; TRACE("(%p,%p,0x%x,%p)\n", pNumprs, rgbDig, dwVtBits, pVarDst); if (pNumprs->nBaseShift) { /* nBaseShift indicates a hex or octal number */ ULONG64 ul64 = 0; LONG64 l64; int i; /* Convert the hex or octal number string into a UI64 */ for (i = 0; i < pNumprs->cDig; i++) { if (ul64 > ((UI8_MAX>>pNumprs->nBaseShift) - rgbDig[i])) { TRACE("Overflow multiplying digits\n"); return DISP_E_OVERFLOW; } ul64 = (ul64<nBaseShift) + rgbDig[i]; } /* also make a negative representation */ l64=-ul64; /* Try signed and unsigned types in size order */ if (dwVtBits & VTBIT_I1 && FITS_AS_I1(ul64)) { V_VT(pVarDst) = VT_I1; V_I1(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_UI1 && FITS_AS_I1(ul64)) { V_VT(pVarDst) = VT_UI1; V_UI1(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_I2 && FITS_AS_I2(ul64)) { V_VT(pVarDst) = VT_I2; V_I2(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_UI2 && FITS_AS_I2(ul64)) { V_VT(pVarDst) = VT_UI2; V_UI2(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_I4 && FITS_AS_I4(ul64)) { V_VT(pVarDst) = VT_I4; V_I4(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_UI4 && FITS_AS_I4(ul64)) { V_VT(pVarDst) = VT_UI4; V_UI4(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_I8 && ((ul64 <= I8_MAX)||(l64>=I8_MIN))) { V_VT(pVarDst) = VT_I8; V_I8(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_UI8) { V_VT(pVarDst) = VT_UI8; V_UI8(pVarDst) = ul64; return S_OK; } else if ((dwVtBits & VTBIT_DECIMAL) == VTBIT_DECIMAL) { #ifdef AVAIL_32BIT_VAR V_VT(pVarDst) = VT_DECIMAL; DEC_SIGNSCALE(&V_DECIMAL(pVarDst)) = SIGNSCALE(DECIMAL_POS,0); DEC_HI32(&V_DECIMAL(pVarDst)) = 0; DEC_LO64(&V_DECIMAL(pVarDst)) = ul64; return S_OK; #endif } else if (dwVtBits & VTBIT_R4 && ((ul64 <= I4_MAX)||(l64 >= I4_MIN))) { V_VT(pVarDst) = VT_R4; if (ul64 <= I4_MAX) V_R4(pVarDst) = ul64; else V_R4(pVarDst) = l64; return S_OK; } else if (dwVtBits & VTBIT_R8 && ((ul64 <= I4_MAX)||(l64 >= I4_MIN))) { V_VT(pVarDst) = VT_R8; if (ul64 <= I4_MAX) V_R8(pVarDst) = ul64; else V_R8(pVarDst) = l64; return S_OK; } TRACE("Overflow: possible return types: 0x%x, value: %s\n", dwVtBits, wine_dbgstr_longlong(ul64)); return DISP_E_OVERFLOW; } /* Count the number of relevant fractional and whole digits stored, * And compute the divisor/multiplier to scale the number by. */ if (pNumprs->nPwr10 < 0) { if (-pNumprs->nPwr10 >= pNumprs->cDig) { /* A real number < +/- 1.0 e.g. 0.1024 or 0.01024 */ wholeNumberDigits = 0; fractionalDigits = pNumprs->cDig; divisor10 = -pNumprs->nPwr10; } else { /* An exactly represented real number e.g. 1.024 */ wholeNumberDigits = pNumprs->cDig + pNumprs->nPwr10; fractionalDigits = pNumprs->cDig - wholeNumberDigits; divisor10 = pNumprs->cDig - wholeNumberDigits; } } else if (pNumprs->nPwr10 == 0) { /* An exactly represented whole number e.g. 1024 */ wholeNumberDigits = pNumprs->cDig; fractionalDigits = 0; } else /* pNumprs->nPwr10 > 0 */ { /* A whole number followed by nPwr10 0's e.g. 102400 */ wholeNumberDigits = pNumprs->cDig; fractionalDigits = 0; multiplier10 = pNumprs->nPwr10; } TRACE("cDig %d; nPwr10 %d, whole %d, frac %d mult %d; div %d\n", pNumprs->cDig, pNumprs->nPwr10, wholeNumberDigits, fractionalDigits, multiplier10, divisor10); if (dwVtBits & (INTEGER_VTBITS|VTBIT_DECIMAL) && (!fractionalDigits || !(dwVtBits & (REAL_VTBITS|VTBIT_DECIMAL)))) { /* We have one or more integer output choices, and either: * 1) An integer input value, or * 2) A real number input value but no floating output choices. * Alternately, we have a DECIMAL output available and an integer input. * * So, place the integer value into pVarDst, using the smallest type * possible and preferring signed over unsigned types. */ BOOL bOverflow = FALSE, bNegative; ULONG64 ul64 = 0; int i; /* Convert the integer part of the number into a UI8 */ for (i = 0; i < wholeNumberDigits; i++) { if (ul64 > UI8_MAX / 10 || (ul64 == UI8_MAX / 10 && rgbDig[i] > UI8_MAX % 10)) { TRACE("Overflow multiplying digits\n"); bOverflow = TRUE; break; } ul64 = ul64 * 10 + rgbDig[i]; } /* Account for the scale of the number */ if (!bOverflow && multiplier10) { for (i = 0; i < multiplier10; i++) { if (ul64 > (UI8_MAX / 10)) { TRACE("Overflow scaling number\n"); bOverflow = TRUE; break; } ul64 = ul64 * 10; } } /* If we have any fractional digits, round the value. * Note we don't have to do this if divisor10 is < 1, * because this means the fractional part must be < 0.5 */ if (!bOverflow && fractionalDigits && divisor10 > 0) { const BYTE* fracDig = rgbDig + wholeNumberDigits; BOOL bAdjust = FALSE; TRACE("first decimal value is %d\n", *fracDig); if (*fracDig > 5) bAdjust = TRUE; /* > 0.5 */ else if (*fracDig == 5) { for (i = 1; i < fractionalDigits; i++) { if (fracDig[i]) { bAdjust = TRUE; /* > 0.5 */ break; } } /* If exactly 0.5, round only odd values */ if (i == fractionalDigits && (ul64 & 1)) bAdjust = TRUE; } if (bAdjust) { if (ul64 == UI8_MAX) { TRACE("Overflow after rounding\n"); bOverflow = TRUE; } ul64++; } } /* Zero is not a negative number */ bNegative = pNumprs->dwOutFlags & NUMPRS_NEG && ul64; TRACE("Integer value is 0x%s, bNeg %d\n", wine_dbgstr_longlong(ul64), bNegative); /* For negative integers, try the signed types in size order */ if (!bOverflow && bNegative) { if (dwVtBits & (VTBIT_I1|VTBIT_I2|VTBIT_I4|VTBIT_I8)) { if (dwVtBits & VTBIT_I1 && ul64 <= -I1_MIN) { V_VT(pVarDst) = VT_I1; V_I1(pVarDst) = -ul64; return S_OK; } else if (dwVtBits & VTBIT_I2 && ul64 <= -I2_MIN) { V_VT(pVarDst) = VT_I2; V_I2(pVarDst) = -ul64; return S_OK; } else if (dwVtBits & VTBIT_I4 && ul64 <= -((LONGLONG)I4_MIN)) { V_VT(pVarDst) = VT_I4; V_I4(pVarDst) = -ul64; return S_OK; } else if (dwVtBits & VTBIT_I8 && ul64 <= (ULONGLONG)I8_MAX + 1) { V_VT(pVarDst) = VT_I8; V_I8(pVarDst) = -ul64; return S_OK; } else if ((dwVtBits & (REAL_VTBITS|VTBIT_DECIMAL)) == VTBIT_DECIMAL) { #ifdef AVAIL_32BIT_VAR /* Decimal is only output choice left - fast path */ V_VT(pVarDst) = VT_DECIMAL; DEC_SIGNSCALE(&V_DECIMAL(pVarDst)) = SIGNSCALE(DECIMAL_NEG,0); DEC_HI32(&V_DECIMAL(pVarDst)) = 0; DEC_LO64(&V_DECIMAL(pVarDst)) = -ul64; return S_OK; #endif } } } else if (!bOverflow) { /* For positive integers, try signed then unsigned types in size order */ if (dwVtBits & VTBIT_I1 && ul64 <= I1_MAX) { V_VT(pVarDst) = VT_I1; V_I1(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_UI1 && ul64 <= UI1_MAX) { V_VT(pVarDst) = VT_UI1; V_UI1(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_I2 && ul64 <= I2_MAX) { V_VT(pVarDst) = VT_I2; V_I2(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_UI2 && ul64 <= UI2_MAX) { V_VT(pVarDst) = VT_UI2; V_UI2(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_I4 && ul64 <= I4_MAX) { V_VT(pVarDst) = VT_I4; V_I4(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_UI4 && ul64 <= UI4_MAX) { V_VT(pVarDst) = VT_UI4; V_UI4(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_I8 && ul64 <= I8_MAX) { V_VT(pVarDst) = VT_I8; V_I8(pVarDst) = ul64; return S_OK; } else if (dwVtBits & VTBIT_UI8) { V_VT(pVarDst) = VT_UI8; V_UI8(pVarDst) = ul64; return S_OK; } #ifdef AVAIL_32BIT_VAR else if ((dwVtBits & (REAL_VTBITS|VTBIT_DECIMAL)) == VTBIT_DECIMAL) { /* Decimal is only output choice left - fast path */ V_VT(pVarDst) = VT_DECIMAL; DEC_SIGNSCALE(&V_DECIMAL(pVarDst)) = SIGNSCALE(DECIMAL_POS,0); DEC_HI32(&V_DECIMAL(pVarDst)) = 0; DEC_LO64(&V_DECIMAL(pVarDst)) = ul64; return S_OK; } #endif } } if (dwVtBits & REAL_VTBITS) { /* Try to put the number into a float or real */ BOOL bOverflow = FALSE, bNegative = pNumprs->dwOutFlags & NUMPRS_NEG; double whole = 0.0; int i; /* Convert the number into a double */ for (i = 0; i < pNumprs->cDig; i++) whole = whole * 10.0 + rgbDig[i]; TRACE("Whole double value is %16.16g\n", whole); /* Account for the scale */ while (multiplier10 > 10) { if (whole > dblMaximums[10]) { dwVtBits &= ~(VTBIT_R4|VTBIT_R8|VTBIT_CY); bOverflow = TRUE; break; } whole = whole * dblMultipliers[10]; multiplier10 -= 10; } if (multiplier10 && !bOverflow) { if (whole > dblMaximums[multiplier10]) { dwVtBits &= ~(VTBIT_R4|VTBIT_R8|VTBIT_CY); bOverflow = TRUE; } else whole = whole * dblMultipliers[multiplier10]; } if (!bOverflow) TRACE("Scaled double value is %16.16g\n", whole); while (divisor10 > 10 && !bOverflow) { if (whole < dblMinimums[10] && whole != 0) { whole = 0; /* ignore underflow */ divisor10 = 0; break; } whole = whole / dblMultipliers[10]; divisor10 -= 10; } if (divisor10 && !bOverflow) { if (whole < dblMinimums[divisor10] && whole != 0) { whole = 0; /* ignore underflow */ divisor10 = 0; } else whole = whole / dblMultipliers[divisor10]; } if (!bOverflow) TRACE("Final double value is %16.16g\n", whole); if (dwVtBits & VTBIT_R4 && ((whole <= R4_MAX && whole >= R4_MIN) || whole == 0.0)) { TRACE("Set R4 to final value\n"); V_VT(pVarDst) = VT_R4; /* Fits into a float */ V_R4(pVarDst) = pNumprs->dwOutFlags & NUMPRS_NEG ? -whole : whole; return S_OK; } if (dwVtBits & VTBIT_R8) { TRACE("Set R8 to final value\n"); V_VT(pVarDst) = VT_R8; /* Fits into a double */ V_R8(pVarDst) = pNumprs->dwOutFlags & NUMPRS_NEG ? -whole : whole; return S_OK; } if (dwVtBits & VTBIT_CY) { if (SUCCEEDED(VarCyFromR816(bNegative ? -whole : whole, &V_CY(pVarDst)))) { V_VT(pVarDst) = VT_CY; /* Fits into a currency */ TRACE("Set CY to final value\n"); return S_OK; } TRACE("Value Overflows CY\n"); } } #ifdef AVAIL_32BIT_VAR if (dwVtBits & VTBIT_DECIMAL) { int i; ULONG carry; ULONG64 tmp; DECIMAL* pDec = &V_DECIMAL(pVarDst); DECIMAL_SETZERO(*pDec); DEC_LO32(pDec) = 0; if (pNumprs->dwOutFlags & NUMPRS_NEG) DEC_SIGN(pDec) = DECIMAL_NEG; else DEC_SIGN(pDec) = DECIMAL_POS; /* Factor the significant digits */ for (i = 0; i < pNumprs->cDig; i++) { tmp = (ULONG64)DEC_LO32(pDec) * 10 + rgbDig[i]; carry = (ULONG)(tmp >> 32); DEC_LO32(pDec) = (ULONG)(tmp & UI4_MAX); tmp = (ULONG64)DEC_MID32(pDec) * 10 + carry; carry = (ULONG)(tmp >> 32); DEC_MID32(pDec) = (ULONG)(tmp & UI4_MAX); tmp = (ULONG64)DEC_HI32(pDec) * 10 + carry; DEC_HI32(pDec) = (ULONG)(tmp & UI4_MAX); if (tmp >> 32 & UI4_MAX) { VarNumFromParseNum_DecOverflow: TRACE("Overflow\n"); DEC_LO32(pDec) = DEC_MID32(pDec) = DEC_HI32(pDec) = UI4_MAX; return DISP_E_OVERFLOW; } } /* Account for the scale of the number */ while (multiplier10 > 0) { tmp = (ULONG64)DEC_LO32(pDec) * 10; carry = (ULONG)(tmp >> 32); DEC_LO32(pDec) = (ULONG)(tmp & UI4_MAX); tmp = (ULONG64)DEC_MID32(pDec) * 10 + carry; carry = (ULONG)(tmp >> 32); DEC_MID32(pDec) = (ULONG)(tmp & UI4_MAX); tmp = (ULONG64)DEC_HI32(pDec) * 10 + carry; DEC_HI32(pDec) = (ULONG)(tmp & UI4_MAX); if (tmp >> 32 & UI4_MAX) goto VarNumFromParseNum_DecOverflow; multiplier10--; } DEC_SCALE(pDec) = divisor10; V_VT(pVarDst) = VT_DECIMAL; return S_OK; } #endif return DISP_E_OVERFLOW; /* No more output choices */ } /********************************************************************** * VarCat [OLEAUT32.318] * * Concatenates one variant onto another. * * PARAMS * left [I] First variant * right [I] Second variant * result [O] Result variant * * RETURNS * Success: S_OK. * Failure: An HRESULT error code indicating the error. */ HRESULT WINAPI VarCat16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 out) { SEGBSTR16 left_str = NULL, right_str = NULL; VARTYPE leftvt, rightvt; HRESULT hres; TRACE("%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), out); leftvt = V_VT(left); rightvt = V_VT(right); /* when both left and right are NULL the result is NULL */ if (leftvt == VT_NULL && rightvt == VT_NULL) { V_VT(out) = VT_NULL; return S_OK; } /* There are many special case for errors and return types */ if (leftvt == VT_VARIANT && (rightvt == VT_ERROR || rightvt == VT_DATE || rightvt == VT_DECIMAL)) hres = DISP_E_TYPEMISMATCH; else if ((leftvt == VT_I2 || leftvt == VT_I4 || leftvt == VT_R4 || leftvt == VT_R8 || leftvt == VT_CY || leftvt == VT_BOOL || leftvt == VT_BSTR || leftvt == VT_I1 || leftvt == VT_UI1 || leftvt == VT_UI2 || leftvt == VT_UI4 || leftvt == VT_I8 || leftvt == VT_UI8 || leftvt == VT_INT || leftvt == VT_UINT || leftvt == VT_EMPTY || leftvt == VT_NULL || leftvt == VT_DATE || leftvt == VT_DECIMAL || leftvt == VT_DISPATCH) && (rightvt == VT_I2 || rightvt == VT_I4 || rightvt == VT_R4 || rightvt == VT_R8 || rightvt == VT_CY || rightvt == VT_BOOL || rightvt == VT_BSTR || rightvt == VT_I1 || rightvt == VT_UI1 || rightvt == VT_UI2 || rightvt == VT_UI4 || rightvt == VT_I8 || rightvt == VT_UI8 || rightvt == VT_INT || rightvt == VT_UINT || rightvt == VT_EMPTY || rightvt == VT_NULL || rightvt == VT_DATE || rightvt == VT_DECIMAL || rightvt == VT_DISPATCH)) hres = S_OK; else if (rightvt == VT_ERROR && leftvt < VT_VOID) hres = DISP_E_TYPEMISMATCH; else if (leftvt == VT_ERROR && (rightvt == VT_DATE || rightvt == VT_ERROR || rightvt == VT_DECIMAL)) hres = DISP_E_TYPEMISMATCH; else if (rightvt == VT_DATE || rightvt == VT_ERROR || rightvt == VT_DECIMAL) hres = DISP_E_BADVARTYPE; else if (leftvt == VT_ERROR || rightvt == VT_ERROR) hres = DISP_E_TYPEMISMATCH; else if (leftvt == VT_VARIANT) hres = DISP_E_TYPEMISMATCH; else if (rightvt == VT_VARIANT && (leftvt == VT_EMPTY || leftvt == VT_NULL || leftvt == VT_I2 || leftvt == VT_I4 || leftvt == VT_R4 || leftvt == VT_R8 || leftvt == VT_CY || leftvt == VT_DATE || leftvt == VT_BSTR || leftvt == VT_BOOL || leftvt == VT_DECIMAL || leftvt == VT_I1 || leftvt == VT_UI1 || leftvt == VT_UI2 || leftvt == VT_UI4 || leftvt == VT_I8 || leftvt == VT_UI8 || leftvt == VT_INT || leftvt == VT_UINT)) hres = DISP_E_TYPEMISMATCH; else hres = DISP_E_BADVARTYPE; /* if result type is not S_OK, then no need to go further */ if (hres != S_OK) { V_VT(out) = VT_EMPTY; return hres; } if (leftvt == VT_BSTR) left_str = V_BSTR(left); else { VARIANT16 converted, *tmp = left; VariantInit16(&converted); if(leftvt == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(left, &converted); if(FAILED(hres)) goto failed; tmp = &converted; } hres = VariantChangeTypeEx16(&converted, tmp, 0, VARIANT_ALPHABOOL|VARIANT_LOCALBOOL, VT_BSTR); if (SUCCEEDED(hres)) left_str = V_BSTR(&converted); else if (hres != DISP_E_TYPEMISMATCH) { VariantClear16(&converted); goto failed; } } if (rightvt == VT_BSTR) right_str = V_BSTR(right); else { VARIANT16 converted, *tmp = right; VariantInit16(&converted); if(rightvt == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(right, &converted); if(FAILED(hres)) goto failed; tmp = &converted; } hres = VariantChangeTypeEx16(&converted, tmp, 0, VARIANT_ALPHABOOL|VARIANT_LOCALBOOL, VT_BSTR); if (SUCCEEDED(hres)) right_str = V_BSTR(&converted); else if (hres != DISP_E_TYPEMISMATCH) { VariantClear16(&converted); goto failed; } } V_VT(out) = VT_BSTR; hres = VarBstrCat16(left_str, right_str, &V_BSTR(out)); failed: if(V_VT(left) != VT_BSTR) SysFreeString16(left_str); if(V_VT(right) != VT_BSTR) SysFreeString16(right_str); return hres; } /* Wrapper around VariantChangeTypeEx16() which permits changing a variant with VT_RESERVED flag set. Needed by VarCmp. */ static HRESULT _VarChangeTypeExWrap (VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt) { VARIANTARG16 vtmpsrc = *pvargSrc; V_VT(&vtmpsrc) &= ~VT_RESERVED; return VariantChangeTypeEx16(pvargDest,&vtmpsrc,lcid,wFlags,vt); } /********************************************************************** * VarCmp [OLEAUT32.176] * * Compare two variants. * * PARAMS * left [I] First variant * right [I] Second variant * lcid [I] LCID (locale identifier) for the comparison * flags [I] Flags to be used in the comparison: * NORM_IGNORECASE, NORM_IGNORENONSPACE, NORM_IGNORESYMBOLS, * NORM_IGNOREWIDTH, NORM_IGNOREKANATYPE, NORM_IGNOREKASHIDA * * RETURNS * VARCMP_LT: left variant is less than right variant. * VARCMP_EQ: input variants are equal. * VARCMP_GT: left variant is greater than right variant. * VARCMP_NULL: either one of the input variants is NULL. * Failure: An HRESULT error code indicating the error. * * NOTES * Native VarCmp up to and including WinXP doesn't like I1, UI2, VT_UI4, * UI8 and UINT as input variants. INT is accepted only as left variant. * * If both input variants are ERROR then VARCMP_EQ will be returned, else * an ERROR variant will trigger an error. * * Both input variants can have VT_RESERVED flag set which is ignored * unless one and only one of the variants is a SEGBSTR16 and the other one * is not an EMPTY variant. All four VT_RESERVED combinations have a * different meaning: * - SEGBSTR16 and other: SEGBSTR16 is always greater than the other variant. * - BSTR|VT_RESERVED and other: a string comparison is performed. * - SEGBSTR16 and other|VT_RESERVED: If the SEGBSTR16 is a number a numeric * comparison will take place else the SEGBSTR16 is always greater. * - BSTR|VT_RESERVED and other|VT_RESERVED: It seems that the other * variant is ignored and the return value depends only on the sign * of the SEGBSTR16 if it is a number else the SEGBSTR16 is always greater. A * positive SEGBSTR16 is greater, a negative one is smaller than the other * variant. * * SEE * VarBstrCmp for the lcid and flags usage. */ HRESULT WINAPI VarCmp16(LPVARIANT16 left, LPVARIANT16 right, LCID lcid, DWORD flags) { VARTYPE lvt, rvt, vt; VARIANT16 rv,lv; DWORD xmask; HRESULT rc; TRACE("(%s,%s,0x%08x,0x%08x)\n", debugstr_variant16(left), debugstr_variant16(right), lcid, flags); lvt = V_VT(left) & VT_TYPEMASK; rvt = V_VT(right) & VT_TYPEMASK; xmask = (1 << lvt) | (1 << rvt); /* If we have any flag set except VT_RESERVED bail out. Same for the left input variant type > VT_INT and for the right input variant type > VT_I8. Yes, VT_INT is only supported as left variant. Go figure */ if (((V_VT(left) | V_VT(right)) & ~VT_TYPEMASK & ~VT_RESERVED) || lvt > VT_INT || rvt > VT_I8) { return DISP_E_BADVARTYPE; } /* Don't ask me why but native VarCmp cannot handle: VT_I1, VT_UI2, VT_UI4, VT_UINT and VT_UI8. Tested with DCOM98, Win2k, WinXP */ if (rvt == VT_INT || xmask & (VTBIT_I1 | VTBIT_UI2 | VTBIT_UI4 | VTBIT_UI8 | VTBIT_DISPATCH | VTBIT_VARIANT | VTBIT_UNKNOWN | VTBIT_15)) return DISP_E_TYPEMISMATCH; /* If both variants are VT_ERROR return VARCMP_EQ */ if (xmask == VTBIT_ERROR) return VARCMP_EQ; else if (xmask & VTBIT_ERROR) return DISP_E_TYPEMISMATCH; if (xmask & VTBIT_NULL) return VARCMP_NULL; VariantInit16(&lv); VariantInit16(&rv); /* Two BSTRs, ignore VT_RESERVED */ if (xmask == VTBIT_BSTR) return VarBstrCmp16(V_BSTR(left), V_BSTR(right), lcid, flags); /* A SEGBSTR16 and another variant; we have to take care of VT_RESERVED */ if (xmask & VTBIT_BSTR) { VARIANT16 *bstrv, *nonbv; VARTYPE nonbvt; int swap = 0; /* Swap the variants so the SEGBSTR16 is always on the left */ if (lvt == VT_BSTR) { bstrv = left; nonbv = right; nonbvt = rvt; } else { swap = 1; bstrv = right; nonbv = left; nonbvt = lvt; } /* SEGBSTR16 and EMPTY: ignore VT_RESERVED */ if (nonbvt == VT_EMPTY) rc = (!V_BSTR(bstrv) || !*V_BSTR16(bstrv)) ? VARCMP_EQ : VARCMP_GT; else { VARTYPE breserv = V_VT(bstrv) & ~VT_TYPEMASK; VARTYPE nreserv = V_VT(nonbv) & ~VT_TYPEMASK; if (!breserv && !nreserv) /* No VT_RESERVED set ==> SEGBSTR16 always greater */ rc = VARCMP_GT; else if (breserv && !nreserv) { /* SEGBSTR16 has VT_RESERVED set. Do a string comparison */ rc = VariantChangeTypeEx16(&rv,nonbv,lcid,0,VT_BSTR); if (FAILED(rc)) return rc; rc = VarBstrCmp16(V_BSTR(bstrv), V_BSTR(&rv), lcid, flags); VariantClear16(&rv); } else if (V_BSTR(bstrv) && *V_BSTR16(bstrv)) { /* Non NULL nor empty SEGBSTR16 */ /* If the SEGBSTR16 is not a number the SEGBSTR16 is greater */ rc = _VarChangeTypeExWrap(&lv,bstrv,lcid,0,VT_R8); if (FAILED(rc)) rc = VARCMP_GT; else if (breserv && nreserv) /* FIXME: This is strange: with both VT_RESERVED set it looks like the result depends only on the sign of the SEGBSTR16 number */ rc = (V_R8(&lv) >= 0) ? VARCMP_GT : VARCMP_LT; else /* Numeric comparison, will be handled below. VARCMP_NULL used only to break out. */ rc = VARCMP_NULL; VariantClear16(&lv); VariantClear16(&rv); } else /* Empty or NULL SEGBSTR16 */ rc = VARCMP_GT; } /* Fixup the return code if we swapped left and right */ if (swap) { if (rc == VARCMP_GT) rc = VARCMP_LT; else if (rc == VARCMP_LT) rc = VARCMP_GT; } if (rc != VARCMP_NULL) return rc; } if (xmask & VTBIT_DECIMAL) vt = VT_DECIMAL; else if (xmask & VTBIT_BSTR) vt = VT_R8; else if (xmask & VTBIT_R4) vt = VT_R4; else if (xmask & (VTBIT_R8 | VTBIT_DATE)) vt = VT_R8; else if (xmask & VTBIT_CY) vt = VT_CY; else /* default to I8 */ vt = VT_I8; /* Coerce the variants */ rc = _VarChangeTypeExWrap(&lv,left,lcid,0,vt); if (rc == DISP_E_OVERFLOW && vt != VT_R8) { /* Overflow, change to R8 */ vt = VT_R8; rc = _VarChangeTypeExWrap(&lv,left,lcid,0,vt); } if (FAILED(rc)) return rc; rc = _VarChangeTypeExWrap(&rv,right,lcid,0,vt); if (rc == DISP_E_OVERFLOW && vt != VT_R8) { /* Overflow, change to R8 */ vt = VT_R8; rc = _VarChangeTypeExWrap(&lv,left,lcid,0,vt); if (FAILED(rc)) return rc; rc = _VarChangeTypeExWrap(&rv,right,lcid,0,vt); } if (FAILED(rc)) return rc; #define _VARCMP(a,b) \ (((a) == (b)) ? VARCMP_EQ : (((a) < (b)) ? VARCMP_LT : VARCMP_GT)) switch (vt) { case VT_CY: return VarCyCmp16(V_CY(&lv), V_CY(&rv)); #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: return VarDecCmp16(&V_DECIMAL(&lv), &V_DECIMAL(&rv)); #endif case VT_I8: return _VARCMP(V_I8(&lv), V_I8(&rv)); case VT_R4: return _VARCMP(V_R4(&lv), V_R4(&rv)); case VT_R8: return _VARCMP(V_R8(&lv), V_R8(&rv)); default: /* We should never get here */ return E_FAIL; } #undef _VARCMP } /********************************************************************** * VarAnd [OLEAUT32.142] * * Computes the logical AND of two variants. * * PARAMS * left [I] First variant * right [I] Second variant * result [O] Result variant * * RETURNS * Success: S_OK. * Failure: An HRESULT error code indicating the error. */ HRESULT WINAPI VarAnd16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { HRESULT hres = S_OK; VARTYPE resvt = VT_EMPTY; VARTYPE leftvt,rightvt; VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags; VARIANT16 varLeft, varRight; VARIANT16 tempLeft, tempRight; VariantInit16(&varLeft); VariantInit16(&varRight); VariantInit16(&tempLeft); VariantInit16(&tempRight); TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(left, &tempLeft); if (FAILED(hres)) goto VarAnd_Exit; left = &tempLeft; } if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(right, &tempRight); if (FAILED(hres)) goto VarAnd_Exit; right = &tempRight; } leftvt = V_VT(left)&VT_TYPEMASK; rightvt = V_VT(right)&VT_TYPEMASK; leftExtraFlags = V_VT(left)&(~VT_TYPEMASK); rightExtraFlags = V_VT(right)&(~VT_TYPEMASK); if (leftExtraFlags != rightExtraFlags) { hres = DISP_E_BADVARTYPE; goto VarAnd_Exit; } ExtraFlags = leftExtraFlags; /* Native VarAnd always returns an error when using extra * flags or if the variant combination is I8 and INT. */ if ((leftvt == VT_I8 && rightvt == VT_INT) || (leftvt == VT_INT && rightvt == VT_I8) || ExtraFlags != 0) { hres = DISP_E_BADVARTYPE; goto VarAnd_Exit; } /* Determine return type */ else if (leftvt == VT_I8 || rightvt == VT_I8) resvt = VT_I8; else if (leftvt == VT_I4 || rightvt == VT_I4 || leftvt == VT_UINT || rightvt == VT_UINT || leftvt == VT_INT || rightvt == VT_INT || leftvt == VT_R4 || rightvt == VT_R4 || leftvt == VT_R8 || rightvt == VT_R8 || leftvt == VT_CY || rightvt == VT_CY || leftvt == VT_DATE || rightvt == VT_DATE || leftvt == VT_I1 || rightvt == VT_I1 || leftvt == VT_UI2 || rightvt == VT_UI2 || leftvt == VT_UI4 || rightvt == VT_UI4 || leftvt == VT_UI8 || rightvt == VT_UI8 || leftvt == VT_DECIMAL || rightvt == VT_DECIMAL) resvt = VT_I4; else if (leftvt == VT_UI1 || rightvt == VT_UI1 || leftvt == VT_I2 || rightvt == VT_I2 || leftvt == VT_EMPTY || rightvt == VT_EMPTY) if ((leftvt == VT_NULL && rightvt == VT_UI1) || (leftvt == VT_UI1 && rightvt == VT_NULL) || (leftvt == VT_UI1 && rightvt == VT_UI1)) resvt = VT_UI1; else resvt = VT_I2; else if (leftvt == VT_BOOL || rightvt == VT_BOOL || (leftvt == VT_BSTR && rightvt == VT_BSTR)) resvt = VT_BOOL; else if (leftvt == VT_NULL || rightvt == VT_NULL || leftvt == VT_BSTR || rightvt == VT_BSTR) resvt = VT_NULL; else { hres = DISP_E_BADVARTYPE; goto VarAnd_Exit; } if (leftvt == VT_NULL || rightvt == VT_NULL) { /* * Special cases for when left variant is VT_NULL * (VT_NULL & 0 = VT_NULL, VT_NULL & value = value) */ if (leftvt == VT_NULL) { VARIANT_BOOL b; switch(rightvt) { case VT_I1: if (V_I1(right)) resvt = VT_NULL; break; case VT_UI1: if (V_UI1(right)) resvt = VT_NULL; break; case VT_I2: if (V_I2(right)) resvt = VT_NULL; break; case VT_UI2: if (V_UI2(right)) resvt = VT_NULL; break; case VT_I4: if (V_I4(right)) resvt = VT_NULL; break; case VT_UI4: if (V_UI4(right)) resvt = VT_NULL; break; case VT_I8: if (V_I8(right)) resvt = VT_NULL; break; case VT_UI8: if (V_UI8(right)) resvt = VT_NULL; break; case VT_INT: if (V_INT(right)) resvt = VT_NULL; break; case VT_UINT: if (V_UINT(right)) resvt = VT_NULL; break; case VT_BOOL: if (V_BOOL(right)) resvt = VT_NULL; break; case VT_R4: if (V_R4(right)) resvt = VT_NULL; break; case VT_R8: if (V_R8(right)) resvt = VT_NULL; break; case VT_CY: if(V_CY(right).int64) resvt = VT_NULL; break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: if (DEC_HI32(&V_DECIMAL(right)) || DEC_LO64(&V_DECIMAL(right))) resvt = VT_NULL; break; #endif case VT_BSTR: hres = VarBoolFromStr16(V_BSTR(right), LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &b); if (FAILED(hres)) return hres; else if (b) V_VT(result) = VT_NULL; else { V_VT(result) = VT_BOOL; V_BOOL(result) = b; } goto VarAnd_Exit; } } V_VT(result) = resvt; goto VarAnd_Exit; } hres = VariantCopy16(&varLeft, left); if (FAILED(hres)) goto VarAnd_Exit; hres = VariantCopy16(&varRight, right); if (FAILED(hres)) goto VarAnd_Exit; if (resvt == VT_I4 && V_VT(&varLeft) == VT_UI4) V_VT(&varLeft) = VT_I4; /* Don't overflow */ else { double d; if (V_VT(&varLeft) == VT_BSTR && FAILED(VarR8FromStr16(V_BSTR(&varLeft), LOCALE_USER_DEFAULT, 0, &d))) hres = VariantChangeType16(&varLeft,&varLeft, VARIANT_LOCALBOOL, VT_BOOL); if (SUCCEEDED(hres) && V_VT(&varLeft) != resvt) hres = VariantChangeType16(&varLeft,&varLeft,0,resvt); if (FAILED(hres)) goto VarAnd_Exit; } if (resvt == VT_I4 && V_VT(&varRight) == VT_UI4) V_VT(&varRight) = VT_I4; /* Don't overflow */ else { double d; if (V_VT(&varRight) == VT_BSTR && FAILED(VarR8FromStr16(V_BSTR(&varRight), LOCALE_USER_DEFAULT, 0, &d))) hres = VariantChangeType16(&varRight, &varRight, VARIANT_LOCALBOOL, VT_BOOL); if (SUCCEEDED(hres) && V_VT(&varRight) != resvt) hres = VariantChangeType16(&varRight, &varRight, 0, resvt); if (FAILED(hres)) goto VarAnd_Exit; } V_VT(result) = resvt; switch(resvt) { case VT_I8: V_I8(result) = V_I8(&varLeft) & V_I8(&varRight); break; case VT_I4: V_I4(result) = V_I4(&varLeft) & V_I4(&varRight); break; case VT_I2: V_I2(result) = V_I2(&varLeft) & V_I2(&varRight); break; case VT_UI1: V_UI1(result) = V_UI1(&varLeft) & V_UI1(&varRight); break; case VT_BOOL: V_BOOL(result) = V_BOOL(&varLeft) & V_BOOL(&varRight); break; default: FIXME("Couldn't bitwise AND variant types %d,%d\n", leftvt,rightvt); } VarAnd_Exit: VariantClear16(&varLeft); VariantClear16(&varRight); VariantClear16(&tempLeft); VariantClear16(&tempRight); return hres; } /********************************************************************** * VarAdd [OLEAUT32.141] * * Add two variants. * * PARAMS * left [I] First variant * right [I] Second variant * result [O] Result variant * * RETURNS * Success: S_OK. * Failure: An HRESULT error code indicating the error. * * NOTES * Native VarAdd up to and including WinXP doesn't like I1, UI2, UI4, * UI8, INT and UINT as input variants. * * Native VarAdd doesn't check for NULL in/out pointers and crashes. We do the * same here. * * FIXME * Overflow checking for R8 (double) overflow. Return DISP_E_OVERFLOW in that * case. */ HRESULT WINAPI VarAdd16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { HRESULT hres; VARTYPE lvt, rvt, resvt, tvt; VARIANT16 lv, rv, tv; VARIANT16 tempLeft, tempRight; double r8res; /* Variant priority for coercion. Sorted from lowest to highest. VT_ERROR shows an invalid input variant type. */ enum coerceprio { vt_EMPTY, vt_UI1, vt_I2, vt_I4, vt_I8, vt_BSTR,vt_R4, vt_R8, vt_CY, vt_DATE, vt_DECIMAL, vt_DISPATCH, vt_NULL, vt_ERROR }; /* Mapping from priority to variant type. Keep in sync with coerceprio! */ static const VARTYPE prio2vt[] = { VT_EMPTY, VT_UI1, VT_I2, VT_I4, VT_I8, VT_BSTR, VT_R4, VT_R8, VT_CY, VT_DATE, VT_DECIMAL, VT_DISPATCH, VT_NULL, VT_ERROR }; /* Mapping for coercion from input variant to priority of result variant. */ static const VARTYPE coerce[] = { /* VT_EMPTY, VT_NULL, VT_I2, VT_I4, VT_R4 */ vt_EMPTY, vt_NULL, vt_I2, vt_I4, vt_R4, /* VT_R8, VT_CY, VT_DATE, VT_BSTR, VT_DISPATCH */ vt_R8, vt_CY, vt_DATE, vt_BSTR, vt_DISPATCH, /* VT_ERROR, VT_BOOL, VT_VARIANT, VT_UNKNOWN, VT_DECIMAL */ vt_ERROR, vt_I2, vt_ERROR, vt_ERROR, vt_DECIMAL, /* 15, VT_I1, VT_UI1, VT_UI2, VT_UI4 VT_I8 */ vt_ERROR, vt_ERROR, vt_UI1, vt_ERROR, vt_ERROR, vt_I8 }; TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); VariantInit16(&lv); VariantInit16(&rv); VariantInit16(&tv); VariantInit16(&tempLeft); VariantInit16(&tempRight); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(left) & VT_TYPEMASK) != VT_NULL && (V_VT(right) & VT_TYPEMASK) != VT_NULL) { if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(left, &tempLeft); if (FAILED(hres)) goto end; left = &tempLeft; } if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(right, &tempRight); if (FAILED(hres)) goto end; right = &tempRight; } } lvt = V_VT(left)&VT_TYPEMASK; rvt = V_VT(right)&VT_TYPEMASK; /* If we have any flag set (VT_ARRAY, VT_VECTOR, etc.) bail out. Same for any input variant type > VT_I8 */ if (V_VT(left) & ~VT_TYPEMASK || V_VT(right) & ~VT_TYPEMASK || lvt > VT_I8 || rvt > VT_I8) { hres = DISP_E_BADVARTYPE; goto end; } /* Determine the variant type to coerce to. */ if (coerce[lvt] > coerce[rvt]) { resvt = prio2vt[coerce[lvt]]; tvt = prio2vt[coerce[rvt]]; } else { resvt = prio2vt[coerce[rvt]]; tvt = prio2vt[coerce[lvt]]; } /* Special cases where the result variant type is defined by both input variants and not only that with the highest priority */ if (resvt == VT_BSTR) { if (tvt == VT_EMPTY || tvt == VT_BSTR) resvt = VT_BSTR; else resvt = VT_R8; } if (resvt == VT_R4 && (tvt == VT_BSTR || tvt == VT_I8 || tvt == VT_I4)) resvt = VT_R8; /* For overflow detection use the biggest compatible type for the addition */ switch (resvt) { case VT_ERROR: hres = DISP_E_BADVARTYPE; goto end; case VT_NULL: hres = S_OK; V_VT(result) = VT_NULL; goto end; case VT_DISPATCH: FIXME("cannot handle variant type VT_DISPATCH\n"); hres = DISP_E_TYPEMISMATCH; goto end; case VT_EMPTY: resvt = VT_I2; /* Fall through */ case VT_UI1: case VT_I2: case VT_I4: case VT_I8: tvt = VT_I8; break; case VT_DATE: case VT_R4: tvt = VT_R8; break; default: tvt = resvt; } /* Now coerce the variants */ hres = VariantChangeType16(&lv, left, 0, tvt); if (FAILED(hres)) goto end; hres = VariantChangeType16(&rv, right, 0, tvt); if (FAILED(hres)) goto end; /* Do the math */ hres = S_OK; V_VT(result) = resvt; switch (tvt) { #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: hres = VarDecAdd16(&V_DECIMAL(&lv), &V_DECIMAL(&rv), &V_DECIMAL(result)); goto end; #endif case VT_CY: hres = VarCyAdd16(V_CY(&lv), V_CY(&rv), &V_CY(result)); goto end; case VT_BSTR: /* We do not add those, we concatenate them. */ hres = VarBstrCat16(V_BSTR(&lv), V_BSTR(&rv), &V_BSTR(result)); goto end; case VT_I8: /* Overflow detection */ r8res = (double)V_I8(&lv) + (double)V_I8(&rv); if (r8res > (double)I8_MAX || r8res < (double)I8_MIN) { V_VT(result) = VT_R8; V_R8(result) = r8res; goto end; } else { V_VT(&tv) = tvt; V_I8(&tv) = V_I8(&lv) + V_I8(&rv); } break; case VT_R8: V_VT(&tv) = tvt; /* FIXME: overflow detection */ V_R8(&tv) = V_R8(&lv) + V_R8(&rv); break; default: ERR("We shouldn't get here! tvt = %d!\n", tvt); break; } if (resvt != tvt) { if ((hres = VariantChangeType16(result, &tv, 0, resvt)) != S_OK) { /* Overflow! Change to the vartype with the next higher priority. With one exception: I4 ==> R8 even if it would fit in I8 */ if (resvt == VT_I4) resvt = VT_R8; else resvt = prio2vt[coerce[resvt] + 1]; hres = VariantChangeType16(result, &tv, 0, resvt); } } else hres = VariantCopy16(result, &tv); end: if (hres != S_OK) { V_VT(result) = VT_EMPTY; V_I4(result) = 0; /* No V_EMPTY */ } VariantClear16(&lv); VariantClear16(&rv); VariantClear16(&tv); VariantClear16(&tempLeft); VariantClear16(&tempRight); TRACE("returning 0x%8x %s\n", hres, debugstr_variant16(result)); return hres; } /********************************************************************** * VarMul [OLEAUT32.156] * * Multiply two variants. * * PARAMS * left [I] First variant * right [I] Second variant * result [O] Result variant * * RETURNS * Success: S_OK. * Failure: An HRESULT error code indicating the error. * * NOTES * Native VarMul up to and including WinXP doesn't like I1, UI2, UI4, * UI8, INT and UINT as input variants. But it can multiply apples with oranges. * * Native VarMul doesn't check for NULL in/out pointers and crashes. We do the * same here. * * FIXME * Overflow checking for R8 (double) overflow. Return DISP_E_OVERFLOW in that * case. */ HRESULT WINAPI VarMul16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { HRESULT hres; VARTYPE lvt, rvt, resvt, tvt; VARIANT16 lv, rv, tv; VARIANT16 tempLeft, tempRight; double r8res; /* Variant priority for coercion. Sorted from lowest to highest. VT_ERROR shows an invalid input variant type. */ enum coerceprio { vt_UI1 = 0, vt_I2, vt_I4, vt_I8, vt_CY, vt_R4, vt_R8, vt_DECIMAL, vt_NULL, vt_ERROR }; /* Mapping from priority to variant type. Keep in sync with coerceprio! */ static const VARTYPE prio2vt[] = { VT_UI1, VT_I2, VT_I4, VT_I8, VT_CY, VT_R4, VT_R8, VT_DECIMAL, VT_NULL, VT_ERROR }; /* Mapping for coercion from input variant to priority of result variant. */ static const VARTYPE coerce[] = { /* VT_EMPTY, VT_NULL, VT_I2, VT_I4, VT_R4 */ vt_UI1, vt_NULL, vt_I2, vt_I4, vt_R4, /* VT_R8, VT_CY, VT_DATE, VT_BSTR, VT_DISPATCH */ vt_R8, vt_CY, vt_R8, vt_R8, vt_ERROR, /* VT_ERROR, VT_BOOL, VT_VARIANT, VT_UNKNOWN, VT_DECIMAL */ vt_ERROR, vt_I2, vt_ERROR, vt_ERROR, vt_DECIMAL, /* 15, VT_I1, VT_UI1, VT_UI2, VT_UI4 VT_I8 */ vt_ERROR, vt_ERROR, vt_UI1, vt_ERROR, vt_ERROR, vt_I8 }; TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); VariantInit16(&lv); VariantInit16(&rv); VariantInit16(&tv); VariantInit16(&tempLeft); VariantInit16(&tempRight); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(left, &tempLeft); if (FAILED(hres)) goto end; left = &tempLeft; } if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(right, &tempRight); if (FAILED(hres)) goto end; right = &tempRight; } lvt = V_VT(left)&VT_TYPEMASK; rvt = V_VT(right)&VT_TYPEMASK; /* If we have any flag set (VT_ARRAY, VT_VECTOR, etc.) bail out. Same for any input variant type > VT_I8 */ if (V_VT(left) & ~VT_TYPEMASK || V_VT(right) & ~VT_TYPEMASK || lvt > VT_I8 || rvt > VT_I8) { hres = DISP_E_BADVARTYPE; goto end; } /* Determine the variant type to coerce to. */ if (coerce[lvt] > coerce[rvt]) { resvt = prio2vt[coerce[lvt]]; tvt = prio2vt[coerce[rvt]]; } else { resvt = prio2vt[coerce[rvt]]; tvt = prio2vt[coerce[lvt]]; } /* Special cases where the result variant type is defined by both input variants and not only that with the highest priority */ if (resvt == VT_R4 && (tvt == VT_CY || tvt == VT_I8 || tvt == VT_I4)) resvt = VT_R8; if (lvt == VT_EMPTY && rvt == VT_EMPTY) resvt = VT_I2; /* For overflow detection use the biggest compatible type for the multiplication */ switch (resvt) { case VT_ERROR: hres = DISP_E_BADVARTYPE; goto end; case VT_NULL: hres = S_OK; V_VT(result) = VT_NULL; goto end; case VT_UI1: case VT_I2: case VT_I4: case VT_I8: tvt = VT_I8; break; case VT_R4: tvt = VT_R8; break; default: tvt = resvt; } /* Now coerce the variants */ hres = VariantChangeType16(&lv, left, 0, tvt); if (FAILED(hres)) goto end; hres = VariantChangeType16(&rv, right, 0, tvt); if (FAILED(hres)) goto end; /* Do the math */ hres = S_OK; V_VT(&tv) = tvt; V_VT(result) = resvt; switch (tvt) { #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: hres = VarDecMul16(&V_DECIMAL(&lv), &V_DECIMAL(&rv), &V_DECIMAL(result)); goto end; #endif case VT_CY: hres = VarCyMul16(V_CY(&lv), V_CY(&rv), &V_CY(result)); goto end; case VT_I8: /* Overflow detection */ r8res = (double)V_I8(&lv) * (double)V_I8(&rv); if (r8res > (double)I8_MAX || r8res < (double)I8_MIN) { V_VT(result) = VT_R8; V_R8(result) = r8res; goto end; } else V_I8(&tv) = V_I8(&lv) * V_I8(&rv); break; case VT_R8: /* FIXME: overflow detection */ V_R8(&tv) = V_R8(&lv) * V_R8(&rv); break; default: ERR("We shouldn't get here! tvt = %d!\n", tvt); break; } if (resvt != tvt) { while ((hres = VariantChangeType16(result, &tv, 0, resvt)) != S_OK) { /* Overflow! Change to the vartype with the next higher priority. With one exception: I4 ==> R8 even if it would fit in I8 */ if (resvt == VT_I4) resvt = VT_R8; else resvt = prio2vt[coerce[resvt] + 1]; } } else hres = VariantCopy16(result, &tv); end: if (hres != S_OK) { V_VT(result) = VT_EMPTY; V_I4(result) = 0; /* No V_EMPTY */ } VariantClear16(&lv); VariantClear16(&rv); VariantClear16(&tv); VariantClear16(&tempLeft); VariantClear16(&tempRight); TRACE("returning 0x%8x %s\n", hres, debugstr_variant16(result)); return hres; } /********************************************************************** * VarDiv [OLEAUT32.143] * * Divides one variant with another. * * PARAMS * left [I] First variant * right [I] Second variant * result [O] Result variant * * RETURNS * Success: S_OK. * Failure: An HRESULT error code indicating the error. */ HRESULT WINAPI VarDiv16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { HRESULT hres = S_OK; VARTYPE resvt = VT_EMPTY; VARTYPE leftvt,rightvt; VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags; VARIANT16 lv,rv; VARIANT16 tempLeft, tempRight; VariantInit16(&tempLeft); VariantInit16(&tempRight); VariantInit16(&lv); VariantInit16(&rv); TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(left, &tempLeft); if (FAILED(hres)) goto end; left = &tempLeft; } if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(right, &tempRight); if (FAILED(hres)) goto end; right = &tempRight; } leftvt = V_VT(left)&VT_TYPEMASK; rightvt = V_VT(right)&VT_TYPEMASK; leftExtraFlags = V_VT(left)&(~VT_TYPEMASK); rightExtraFlags = V_VT(right)&(~VT_TYPEMASK); if (leftExtraFlags != rightExtraFlags) { hres = DISP_E_BADVARTYPE; goto end; } ExtraFlags = leftExtraFlags; /* Native VarDiv always returns an error when using extra flags */ if (ExtraFlags != 0) { hres = DISP_E_BADVARTYPE; goto end; } /* Determine return type */ if (rightvt != VT_EMPTY) { if (leftvt == VT_NULL || rightvt == VT_NULL) { V_VT(result) = VT_NULL; hres = S_OK; goto end; } else if (leftvt == VT_DECIMAL || rightvt == VT_DECIMAL) resvt = VT_DECIMAL; else if (leftvt == VT_I8 || rightvt == VT_I8 || leftvt == VT_CY || rightvt == VT_CY || leftvt == VT_DATE || rightvt == VT_DATE || leftvt == VT_I4 || rightvt == VT_I4 || leftvt == VT_BSTR || rightvt == VT_BSTR || leftvt == VT_I2 || rightvt == VT_I2 || leftvt == VT_BOOL || rightvt == VT_BOOL || leftvt == VT_R8 || rightvt == VT_R8 || leftvt == VT_UI1 || rightvt == VT_UI1) { if ((leftvt == VT_UI1 && rightvt == VT_R4) || (leftvt == VT_R4 && rightvt == VT_UI1)) resvt = VT_R4; else if ((leftvt == VT_R4 && (rightvt == VT_BOOL || rightvt == VT_I2)) || (rightvt == VT_R4 && (leftvt == VT_BOOL || leftvt == VT_I2))) resvt = VT_R4; else resvt = VT_R8; } else if (leftvt == VT_R4 || rightvt == VT_R4) resvt = VT_R4; } else if (leftvt == VT_NULL) { V_VT(result) = VT_NULL; hres = S_OK; goto end; } else { hres = DISP_E_BADVARTYPE; goto end; } /* coerce to the result type */ hres = VariantChangeType16(&lv, left, 0, resvt); if (hres != S_OK) goto end; hres = VariantChangeType16(&rv, right, 0, resvt); if (hres != S_OK) goto end; /* do the math */ V_VT(result) = resvt; switch (resvt) { case VT_R4: if (V_R4(&lv) == 0.0 && V_R4(&rv) == 0.0) { hres = DISP_E_OVERFLOW; V_VT(result) = VT_EMPTY; } else if (V_R4(&rv) == 0.0) { hres = DISP_E_DIVBYZERO; V_VT(result) = VT_EMPTY; } else V_R4(result) = V_R4(&lv) / V_R4(&rv); break; case VT_R8: if (V_R8(&lv) == 0.0 && V_R8(&rv) == 0.0) { hres = DISP_E_OVERFLOW; V_VT(result) = VT_EMPTY; } else if (V_R8(&rv) == 0.0) { hres = DISP_E_DIVBYZERO; V_VT(result) = VT_EMPTY; } else V_R8(result) = V_R8(&lv) / V_R8(&rv); break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: hres = VarDecDiv16(&(V_DECIMAL(&lv)), &(V_DECIMAL(&rv)), &(V_DECIMAL(result))); break; #endif } end: VariantClear16(&lv); VariantClear16(&rv); VariantClear16(&tempLeft); VariantClear16(&tempRight); TRACE("returning 0x%8x %s\n", hres, debugstr_variant16(result)); return hres; } /********************************************************************** * VarSub [OLEAUT32.159] * * Subtract two variants. * * PARAMS * left [I] First variant * right [I] Second variant * result [O] Result variant * * RETURNS * Success: S_OK. * Failure: An HRESULT error code indicating the error. */ HRESULT WINAPI VarSub16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { HRESULT hres = S_OK; VARTYPE resvt = VT_EMPTY; VARTYPE leftvt,rightvt; VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags; VARIANT16 lv,rv; VARIANT16 tempLeft, tempRight; VariantInit16(&lv); VariantInit16(&rv); VariantInit16(&tempLeft); VariantInit16(&tempRight); TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH && (V_VT(left)&(~VT_TYPEMASK)) == 0 && (V_VT(right) & VT_TYPEMASK) != VT_NULL) { if (NULL == V_DISPATCH(left)) { if ((V_VT(right) & VT_TYPEMASK) >= VT_INT_PTR) hres = DISP_E_BADVARTYPE; else if ((V_VT(right) & VT_TYPEMASK) >= VT_UI8 && (V_VT(right) & VT_TYPEMASK) < VT_RECORD) hres = DISP_E_BADVARTYPE; else switch (V_VT(right) & VT_TYPEMASK) { case VT_VARIANT: case VT_UNKNOWN: case 15: case VT_I1: case VT_UI2: case VT_UI4: hres = DISP_E_BADVARTYPE; } if (FAILED(hres)) goto end; } hres = VARIANT_FetchDispatchValue(left, &tempLeft); if (FAILED(hres)) goto end; left = &tempLeft; } if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH && (V_VT(right)&(~VT_TYPEMASK)) == 0 && (V_VT(left) & VT_TYPEMASK) != VT_NULL) { if (NULL == V_DISPATCH(right)) { if ((V_VT(left) & VT_TYPEMASK) >= VT_INT_PTR) hres = DISP_E_BADVARTYPE; else if ((V_VT(left) & VT_TYPEMASK) >= VT_UI8 && (V_VT(left) & VT_TYPEMASK) < VT_RECORD) hres = DISP_E_BADVARTYPE; else switch (V_VT(left) & VT_TYPEMASK) { case VT_VARIANT: case VT_UNKNOWN: case 15: case VT_I1: case VT_UI2: case VT_UI4: hres = DISP_E_BADVARTYPE; } if (FAILED(hres)) goto end; } hres = VARIANT_FetchDispatchValue(right, &tempRight); if (FAILED(hres)) goto end; right = &tempRight; } leftvt = V_VT(left)&VT_TYPEMASK; rightvt = V_VT(right)&VT_TYPEMASK; leftExtraFlags = V_VT(left)&(~VT_TYPEMASK); rightExtraFlags = V_VT(right)&(~VT_TYPEMASK); if (leftExtraFlags != rightExtraFlags) { hres = DISP_E_BADVARTYPE; goto end; } ExtraFlags = leftExtraFlags; /* determine return type and return code */ /* All extra flags produce errors */ if (ExtraFlags == (VT_VECTOR|VT_BYREF|VT_RESERVED) || ExtraFlags == (VT_VECTOR|VT_RESERVED) || ExtraFlags == (VT_VECTOR|VT_BYREF) || ExtraFlags == (VT_BYREF|VT_RESERVED) || ExtraFlags == VT_VECTOR || ExtraFlags == VT_BYREF || ExtraFlags == VT_RESERVED) { hres = DISP_E_BADVARTYPE; goto end; } else if (ExtraFlags >= VT_ARRAY) { hres = DISP_E_TYPEMISMATCH; goto end; } /* Native VarSub cannot handle: VT_I1, VT_UI2, VT_UI4, VT_INT, VT_UINT and VT_UI8. Tested with WinXP */ else if (leftvt == VT_CLSID || rightvt == VT_CLSID || leftvt == VT_VARIANT || rightvt == VT_VARIANT || leftvt == VT_I1 || rightvt == VT_I1 || leftvt == VT_UI2 || rightvt == VT_UI2 || leftvt == VT_UI4 || rightvt == VT_UI4 || leftvt == VT_UI8 || rightvt == VT_UI8 || leftvt == VT_INT || rightvt == VT_INT || leftvt == VT_UINT || rightvt == VT_UINT || leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN || leftvt == VT_RECORD || rightvt == VT_RECORD) { if (leftvt == VT_RECORD && rightvt == VT_I8) hres = DISP_E_TYPEMISMATCH; else if (leftvt < VT_UI1 && rightvt == VT_RECORD) hres = DISP_E_TYPEMISMATCH; else if (leftvt >= VT_UI1 && rightvt == VT_RECORD) hres = DISP_E_TYPEMISMATCH; else if (leftvt == VT_RECORD && rightvt <= VT_UI1) hres = DISP_E_TYPEMISMATCH; else if (leftvt == VT_RECORD && rightvt > VT_UI1) hres = DISP_E_BADVARTYPE; else hres = DISP_E_BADVARTYPE; goto end; } /* The following flags/types are invalid for left variant */ else if (!((leftvt <= VT_LPWSTR || leftvt == VT_RECORD || leftvt == VT_CLSID) && leftvt != (VARTYPE)15 /* undefined vt */ && (leftvt < VT_VOID || leftvt > VT_LPWSTR))) { hres = DISP_E_BADVARTYPE; goto end; } /* The following flags/types are invalid for right variant */ else if (!((rightvt <= VT_LPWSTR || rightvt == VT_RECORD || rightvt == VT_CLSID) && rightvt != (VARTYPE)15 /* undefined vt */ && (rightvt < VT_VOID || rightvt > VT_LPWSTR))) { hres = DISP_E_BADVARTYPE; goto end; } else if ((leftvt == VT_NULL && rightvt == VT_DISPATCH) || (leftvt == VT_DISPATCH && rightvt == VT_NULL)) resvt = VT_NULL; else if (leftvt == VT_DISPATCH || rightvt == VT_DISPATCH || leftvt == VT_ERROR || rightvt == VT_ERROR) { hres = DISP_E_TYPEMISMATCH; goto end; } else if (leftvt == VT_NULL || rightvt == VT_NULL) resvt = VT_NULL; else if ((leftvt == VT_EMPTY && rightvt == VT_BSTR) || (leftvt == VT_DATE && rightvt == VT_DATE) || (leftvt == VT_BSTR && rightvt == VT_EMPTY) || (leftvt == VT_BSTR && rightvt == VT_BSTR)) resvt = VT_R8; else if (leftvt == VT_DECIMAL || rightvt == VT_DECIMAL) resvt = VT_DECIMAL; else if (leftvt == VT_DATE || rightvt == VT_DATE) resvt = VT_DATE; else if (leftvt == VT_CY || rightvt == VT_CY) resvt = VT_CY; else if (leftvt == VT_R8 || rightvt == VT_R8) resvt = VT_R8; else if (leftvt == VT_BSTR || rightvt == VT_BSTR) resvt = VT_R8; else if (leftvt == VT_R4 || rightvt == VT_R4) { if (leftvt == VT_I4 || rightvt == VT_I4 || leftvt == VT_I8 || rightvt == VT_I8) resvt = VT_R8; else resvt = VT_R4; } else if (leftvt == VT_I8 || rightvt == VT_I8) resvt = VT_I8; else if (leftvt == VT_I4 || rightvt == VT_I4) resvt = VT_I4; else if (leftvt == VT_I2 || rightvt == VT_I2 || leftvt == VT_BOOL || rightvt == VT_BOOL || (leftvt == VT_EMPTY && rightvt == VT_EMPTY)) resvt = VT_I2; else if (leftvt == VT_UI1 || rightvt == VT_UI1) resvt = VT_UI1; else { hres = DISP_E_TYPEMISMATCH; goto end; } /* coerce to the result type */ if (leftvt == VT_BSTR && rightvt == VT_DATE) hres = VariantChangeType16(&lv, left, 0, VT_R8); else hres = VariantChangeType16(&lv, left, 0, resvt); if (hres != S_OK) goto end; if (leftvt == VT_DATE && rightvt == VT_BSTR) hres = VariantChangeType16(&rv, right, 0, VT_R8); else hres = VariantChangeType16(&rv, right, 0, resvt); if (hres != S_OK) goto end; /* do the math */ V_VT(result) = resvt; switch (resvt) { case VT_NULL: break; case VT_DATE: V_DATE(result) = V_DATE(&lv) - V_DATE(&rv); break; case VT_CY: hres = VarCySub16(V_CY(&lv), V_CY(&rv), &(V_CY(result))); break; case VT_R4: V_R4(result) = V_R4(&lv) - V_R4(&rv); break; case VT_I8: V_I8(result) = V_I8(&lv) - V_I8(&rv); break; case VT_I4: V_I4(result) = V_I4(&lv) - V_I4(&rv); break; case VT_I2: V_I2(result) = V_I2(&lv) - V_I2(&rv); break; case VT_UI1: V_UI1(result) = V_UI2(&lv) - V_UI1(&rv); break; case VT_R8: V_R8(result) = V_R8(&lv) - V_R8(&rv); break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: hres = VarDecSub16(&(V_DECIMAL(&lv)), &(V_DECIMAL(&rv)), &(V_DECIMAL(result))); break; #endif } end: VariantClear16(&lv); VariantClear16(&rv); VariantClear16(&tempLeft); VariantClear16(&tempRight); TRACE("returning 0x%8x %s\n", hres, debugstr_variant16(result)); return hres; } /********************************************************************** * VarOr [OLEAUT32.157] * * Perform a logical or (OR) operation on two variants. * * PARAMS * pVarLeft [I] First variant * pVarRight [I] Variant to OR with pVarLeft * pVarOut [O] Destination for OR result * * RETURNS * Success: S_OK. pVarOut contains the result of the operation with its type * taken from the table listed under VarXor16(). * Failure: An HRESULT error code indicating the error. * * NOTES * See the Notes section of VarXor16() for further information. */ HRESULT WINAPI VarOr16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut) { VARTYPE vt = VT_I4; VARIANT16 varLeft, varRight, varStr; HRESULT hRet; VARIANT16 tempLeft, tempRight; VariantInit16(&tempLeft); VariantInit16(&tempRight); VariantInit16(&varLeft); VariantInit16(&varRight); VariantInit16(&varStr); TRACE("(%s,%s,%p)\n", debugstr_variant16(pVarLeft), debugstr_variant16(pVarRight), pVarOut); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(pVarLeft) & VT_TYPEMASK) == VT_DISPATCH) { hRet = VARIANT_FetchDispatchValue(pVarLeft, &tempLeft); if (FAILED(hRet)) goto VarOr_Exit; pVarLeft = &tempLeft; } if ((V_VT(pVarRight) & VT_TYPEMASK) == VT_DISPATCH) { hRet = VARIANT_FetchDispatchValue(pVarRight, &tempRight); if (FAILED(hRet)) goto VarOr_Exit; pVarRight = &tempRight; } if (V_EXTRA_TYPE(pVarLeft) || V_EXTRA_TYPE(pVarRight) || V_VT(pVarLeft) == VT_UNKNOWN || V_VT(pVarRight) == VT_UNKNOWN || V_VT(pVarLeft) == VT_DISPATCH || V_VT(pVarRight) == VT_DISPATCH || V_VT(pVarLeft) == VT_RECORD || V_VT(pVarRight) == VT_RECORD) { hRet = DISP_E_BADVARTYPE; goto VarOr_Exit; } V_VT(&varLeft) = V_VT(&varRight) = V_VT(&varStr) = VT_EMPTY; if (V_VT(pVarLeft) == VT_NULL || V_VT(pVarRight) == VT_NULL) { /* NULL OR Zero is NULL, NULL OR value is value */ if (V_VT(pVarLeft) == VT_NULL) pVarLeft = pVarRight; /* point to the non-NULL var */ V_VT(pVarOut) = VT_NULL; V_I4(pVarOut) = 0; switch (V_VT(pVarLeft)) { case VT_DATE: case VT_R8: if (V_R8(pVarLeft)) goto VarOr_AsEmpty; hRet = S_OK; goto VarOr_Exit; case VT_BOOL: if (V_BOOL(pVarLeft)) *pVarOut = *pVarLeft; hRet = S_OK; goto VarOr_Exit; case VT_I2: case VT_UI2: if (V_I2(pVarLeft)) goto VarOr_AsEmpty; hRet = S_OK; goto VarOr_Exit; case VT_I1: if (V_I1(pVarLeft)) goto VarOr_AsEmpty; hRet = S_OK; goto VarOr_Exit; case VT_UI1: if (V_UI1(pVarLeft)) *pVarOut = *pVarLeft; hRet = S_OK; goto VarOr_Exit; case VT_R4: if (V_R4(pVarLeft)) goto VarOr_AsEmpty; hRet = S_OK; goto VarOr_Exit; case VT_I4: case VT_UI4: case VT_INT: case VT_UINT: if (V_I4(pVarLeft)) goto VarOr_AsEmpty; hRet = S_OK; goto VarOr_Exit; case VT_CY: if (V_CY(pVarLeft).int64) goto VarOr_AsEmpty; hRet = S_OK; goto VarOr_Exit; case VT_I8: case VT_UI8: if (V_I8(pVarLeft)) goto VarOr_AsEmpty; hRet = S_OK; goto VarOr_Exit; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: if (DEC_HI32(&V_DECIMAL(pVarLeft)) || DEC_LO64(&V_DECIMAL(pVarLeft))) goto VarOr_AsEmpty; hRet = S_OK; goto VarOr_Exit; #endif case VT_BSTR: { VARIANT_BOOL b; if (!V_BSTR(pVarLeft)) { hRet = DISP_E_BADVARTYPE; goto VarOr_Exit; } hRet = VarBoolFromStr16(V_BSTR(pVarLeft), LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &b); if (SUCCEEDED(hRet) && b) { V_VT(pVarOut) = VT_BOOL; V_BOOL(pVarOut) = b; } goto VarOr_Exit; } case VT_NULL: case VT_EMPTY: V_VT(pVarOut) = VT_NULL; hRet = S_OK; goto VarOr_Exit; default: hRet = DISP_E_BADVARTYPE; goto VarOr_Exit; } } if (V_VT(pVarLeft) == VT_EMPTY || V_VT(pVarRight) == VT_EMPTY) { if (V_VT(pVarLeft) == VT_EMPTY) pVarLeft = pVarRight; /* point to the non-EMPTY var */ VarOr_AsEmpty: /* Since one argument is empty (0), OR'ing it with the other simply * gives the others value (as 0|x => x). So just convert the other * argument to the required result type. */ switch (V_VT(pVarLeft)) { case VT_BSTR: if (!V_BSTR(pVarLeft)) { hRet = DISP_E_BADVARTYPE; goto VarOr_Exit; } hRet = VariantCopy16(&varStr, pVarLeft); if (FAILED(hRet)) goto VarOr_Exit; pVarLeft = &varStr; hRet = VariantChangeType16(pVarLeft, pVarLeft, 0, VT_BOOL); if (FAILED(hRet)) goto VarOr_Exit; /* Fall Through ... */ case VT_EMPTY: case VT_UI1: case VT_BOOL: case VT_I2: V_VT(pVarOut) = VT_I2; break; case VT_DATE: case VT_CY: case VT_DECIMAL: case VT_R4: case VT_R8: case VT_I1: case VT_UI2: case VT_I4: case VT_UI4: case VT_INT: case VT_UINT: case VT_UI8: V_VT(pVarOut) = VT_I4; break; case VT_I8: V_VT(pVarOut) = VT_I8; break; default: hRet = DISP_E_BADVARTYPE; goto VarOr_Exit; } hRet = VariantCopy16(&varLeft, pVarLeft); if (FAILED(hRet)) goto VarOr_Exit; pVarLeft = &varLeft; hRet = VariantChangeType16(pVarOut, pVarLeft, 0, V_VT(pVarOut)); goto VarOr_Exit; } if (V_VT(pVarLeft) == VT_BOOL && V_VT(pVarRight) == VT_BOOL) { V_VT(pVarOut) = VT_BOOL; V_BOOL(pVarOut) = V_BOOL(pVarLeft) | V_BOOL(pVarRight); hRet = S_OK; goto VarOr_Exit; } if (V_VT(pVarLeft) == VT_UI1 && V_VT(pVarRight) == VT_UI1) { V_VT(pVarOut) = VT_UI1; V_UI1(pVarOut) = V_UI1(pVarLeft) | V_UI1(pVarRight); hRet = S_OK; goto VarOr_Exit; } if (V_VT(pVarLeft) == VT_BSTR) { hRet = VariantCopy16(&varStr, pVarLeft); if (FAILED(hRet)) goto VarOr_Exit; pVarLeft = &varStr; hRet = VariantChangeType16(pVarLeft, pVarLeft, 0, VT_BOOL); if (FAILED(hRet)) goto VarOr_Exit; } if (V_VT(pVarLeft) == VT_BOOL && (V_VT(pVarRight) == VT_BOOL || V_VT(pVarRight) == VT_BSTR)) { vt = VT_BOOL; } else if ((V_VT(pVarLeft) == VT_BOOL || V_VT(pVarLeft) == VT_UI1 || V_VT(pVarLeft) == VT_I2 || V_VT(pVarLeft) == VT_BSTR) && (V_VT(pVarRight) == VT_BOOL || V_VT(pVarRight) == VT_UI1 || V_VT(pVarRight) == VT_I2 || V_VT(pVarRight) == VT_BSTR)) { vt = VT_I2; } else if (V_VT(pVarLeft) == VT_I8 || V_VT(pVarRight) == VT_I8) { if (V_VT(pVarLeft) == VT_INT || V_VT(pVarRight) == VT_INT) { hRet = DISP_E_TYPEMISMATCH; goto VarOr_Exit; } vt = VT_I8; } hRet = VariantCopy16(&varLeft, pVarLeft); if (FAILED(hRet)) goto VarOr_Exit; hRet = VariantCopy16(&varRight, pVarRight); if (FAILED(hRet)) goto VarOr_Exit; if (vt == VT_I4 && V_VT(&varLeft) == VT_UI4) V_VT(&varLeft) = VT_I4; /* Don't overflow */ else { double d; if (V_VT(&varLeft) == VT_BSTR && FAILED(VarR8FromStr16(V_BSTR(&varLeft), LOCALE_USER_DEFAULT, 0, &d))) hRet = VariantChangeType16(&varLeft, &varLeft, VARIANT_LOCALBOOL, VT_BOOL); if (SUCCEEDED(hRet) && V_VT(&varLeft) != vt) hRet = VariantChangeType16(&varLeft, &varLeft, 0, vt); if (FAILED(hRet)) goto VarOr_Exit; } if (vt == VT_I4 && V_VT(&varRight) == VT_UI4) V_VT(&varRight) = VT_I4; /* Don't overflow */ else { double d; if (V_VT(&varRight) == VT_BSTR && FAILED(VarR8FromStr16(V_BSTR(&varRight), LOCALE_USER_DEFAULT, 0, &d))) hRet = VariantChangeType16(&varRight, &varRight, VARIANT_LOCALBOOL, VT_BOOL); if (SUCCEEDED(hRet) && V_VT(&varRight) != vt) hRet = VariantChangeType16(&varRight, &varRight, 0, vt); if (FAILED(hRet)) goto VarOr_Exit; } V_VT(pVarOut) = vt; if (vt == VT_I8) { V_I8(pVarOut) = V_I8(&varLeft) | V_I8(&varRight); } else if (vt == VT_I4) { V_I4(pVarOut) = V_I4(&varLeft) | V_I4(&varRight); } else { V_I2(pVarOut) = V_I2(&varLeft) | V_I2(&varRight); } VarOr_Exit: VariantClear16(&varStr); VariantClear16(&varLeft); VariantClear16(&varRight); VariantClear16(&tempLeft); VariantClear16(&tempRight); return hRet; } /********************************************************************** * VarAbs [OLEAUT32.168] * * Convert a variant to its absolute value. * * PARAMS * pVarIn [I] Source variant * pVarOut [O] Destination for converted value * * RETURNS * Success: S_OK. pVarOut contains the absolute value of pVarIn. * Failure: An HRESULT error code indicating the error. * * NOTES * - This function does not process by-reference variants. * - The type of the value stored in pVarOut depends on the type of pVarIn, * according to the following table: *| Input Type Output Type *| ---------- ----------- *| VT_BOOL VT_I2 *| VT_BSTR VT_R8 *| (All others) Unchanged */ HRESULT WINAPI VarAbs16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut) { VARIANT16 varIn; HRESULT hRet = S_OK; VARIANT16 temp; VariantInit16(&temp); TRACE("(%s,%p)\n", debugstr_variant16(pVarIn), pVarOut); #ifdef AVAIL_32BIT_VAR /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0)) { hRet = VARIANT_FetchDispatchValue(pVarIn, &temp); if (FAILED(hRet)) goto VarAbs_Exit; pVarIn = &temp; } #endif if (V_ISARRAY(pVarIn) || V_VT(pVarIn) == VT_UNKNOWN || V_VT(pVarIn) == VT_DISPATCH || V_VT(pVarIn) == VT_RECORD || V_VT(pVarIn) == VT_ERROR) { hRet = DISP_E_TYPEMISMATCH; goto VarAbs_Exit; } *pVarOut = *pVarIn; /* Shallow copy the value, and invert it if needed */ #define ABS_CASE(typ,min) \ case VT_##typ: if (V_##typ(pVarIn) == min) hRet = DISP_E_OVERFLOW; \ else if (V_##typ(pVarIn) < 0) V_##typ(pVarOut) = -V_##typ(pVarIn); \ break switch (V_VT(pVarIn)) { ABS_CASE(I1,I1_MIN); case VT_BOOL: V_VT(pVarOut) = VT_I2; /* BOOL->I2, Fall through ... */ ABS_CASE(I2,I2_MIN); case VT_INT: ABS_CASE(I4,I4_MIN); ABS_CASE(I8,I8_MIN); ABS_CASE(R4,R4_MIN); case VT_BSTR: hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(&varIn)); if (FAILED(hRet)) break; V_VT(pVarOut) = VT_R8; pVarIn = &varIn; /* Fall through ... */ case VT_DATE: ABS_CASE(R8,R8_MIN); case VT_CY: hRet = VarCyAbs16(V_CY(pVarIn), & V_CY(pVarOut)); break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: DEC_SIGN(&V_DECIMAL(pVarOut)) &= ~DECIMAL_NEG; break; #endif case VT_UI1: case VT_UI2: case VT_UINT: case VT_UI4: case VT_UI8: /* No-Op */ break; case VT_EMPTY: V_VT(pVarOut) = VT_I2; case VT_NULL: V_I2(pVarOut) = 0; break; default: hRet = DISP_E_BADVARTYPE; } VarAbs_Exit: VariantClear16(&temp); return hRet; } /********************************************************************** * VarFix16 [OLEAUT32.169] * * Truncate a variants value to a whole number. * * PARAMS * pVarIn [I] Source variant * pVarOut [O] Destination for converted value * * RETURNS * Success: S_OK. pVarOut contains the converted value. * Failure: An HRESULT error code indicating the error. * * NOTES * - The type of the value stored in pVarOut depends on the type of pVarIn, * according to the following table: *| Input Type Output Type *| ---------- ----------- *| VT_BOOL VT_I2 *| VT_EMPTY VT_I2 *| VT_BSTR VT_R8 *| All Others Unchanged * - The difference between this function and VarInt16() is that VarInt16() rounds * negative numbers away from 0, while this function rounds them towards zero. */ HRESULT WINAPI VarFix16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut) { HRESULT hRet = S_OK; VARIANT16 temp; VariantInit16(&temp); TRACE("(%s,%p)\n", debugstr_variant16(pVarIn), pVarOut); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0)) { hRet = VARIANT_FetchDispatchValue(pVarIn, &temp); if (FAILED(hRet)) goto VarFix16_Exit; pVarIn = &temp; } V_VT(pVarOut) = V_VT(pVarIn); switch (V_VT(pVarIn)) { case VT_UI1: V_UI1(pVarOut) = V_UI1(pVarIn); break; case VT_BOOL: V_VT(pVarOut) = VT_I2; /* Fall through */ case VT_I2: V_I2(pVarOut) = V_I2(pVarIn); break; case VT_I4: V_I4(pVarOut) = V_I4(pVarIn); break; case VT_I8: V_I8(pVarOut) = V_I8(pVarIn); break; case VT_R4: if (V_R4(pVarIn) < 0.0f) V_R4(pVarOut) = (float)ceil(V_R4(pVarIn)); else V_R4(pVarOut) = (float)floor(V_R4(pVarIn)); break; case VT_BSTR: V_VT(pVarOut) = VT_R8; hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(pVarOut)); pVarIn = pVarOut; /* Fall through */ case VT_DATE: case VT_R8: if (V_R8(pVarIn) < 0.0) V_R8(pVarOut) = ceil(V_R8(pVarIn)); else V_R8(pVarOut) = floor(V_R8(pVarIn)); break; case VT_CY: hRet = VarCyFix16(V_CY(pVarIn), &V_CY(pVarOut)); break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: hRet = VarDecFix16(&V_DECIMAL(pVarIn), &V_DECIMAL(pVarOut)); break; #endif case VT_EMPTY: V_VT(pVarOut) = VT_I2; V_I2(pVarOut) = 0; break; case VT_NULL: /* No-Op */ break; default: if (V_TYPE(pVarIn) == VT_CLSID || /* VT_CLSID is a special case */ FAILED(VARIANT_ValidateType(V_VT(pVarIn)))) hRet = DISP_E_BADVARTYPE; else hRet = DISP_E_TYPEMISMATCH; } VarFix16_Exit: if (FAILED(hRet)) V_VT(pVarOut) = VT_EMPTY; VariantClear16(&temp); return hRet; } /********************************************************************** * VarInt [OLEAUT32.172] * * Truncate a variants value to a whole number. * * PARAMS * pVarIn [I] Source variant * pVarOut [O] Destination for converted value * * RETURNS * Success: S_OK. pVarOut contains the converted value. * Failure: An HRESULT error code indicating the error. * * NOTES * - The type of the value stored in pVarOut depends on the type of pVarIn, * according to the following table: *| Input Type Output Type *| ---------- ----------- *| VT_BOOL VT_I2 *| VT_EMPTY VT_I2 *| VT_BSTR VT_R8 *| All Others Unchanged * - The difference between this function and VarFix16() is that VarFix16() rounds * negative numbers towards 0, while this function rounds them away from zero. */ HRESULT WINAPI VarInt16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut) { HRESULT hRet = S_OK; VARIANT16 temp; VariantInit16(&temp); TRACE("(%s,%p)\n", debugstr_variant16(pVarIn), pVarOut); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0)) { hRet = VARIANT_FetchDispatchValue(pVarIn, &temp); if (FAILED(hRet)) goto VarInt_Exit; pVarIn = &temp; } V_VT(pVarOut) = V_VT(pVarIn); switch (V_VT(pVarIn)) { case VT_R4: V_R4(pVarOut) = (float)floor(V_R4(pVarIn)); break; case VT_BSTR: V_VT(pVarOut) = VT_R8; hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(pVarOut)); pVarIn = pVarOut; /* Fall through */ case VT_DATE: case VT_R8: V_R8(pVarOut) = floor(V_R8(pVarIn)); break; case VT_CY: hRet = VarCyInt16(V_CY(pVarIn), &V_CY(pVarOut)); break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: hRet = VarDecInt16(&V_DECIMAL(pVarIn), &V_DECIMAL(pVarOut)); break; #endif default: hRet = VarFix16(pVarIn, pVarOut); } VarInt_Exit: VariantClear16(&temp); return hRet; } /********************************************************************** * VarXor16 [OLEAUT32.167] * * Perform a logical exclusive-or (XOR) operation on two variants. * * PARAMS * pVarLeft [I] First variant * pVarRight [I] Variant to XOR with pVarLeft * pVarOut [O] Destination for XOR result * * RETURNS * Success: S_OK. pVarOut contains the result of the operation with its type * taken from the table below). * Failure: An HRESULT error code indicating the error. * * NOTES * - Neither pVarLeft or pVarRight are modified by this function. * - This function does not process by-reference variants. * - Input types of VT_BSTR may be numeric strings or boolean text. * - The type of result stored in pVarOut depends on the types of pVarLeft * and pVarRight, and will be one of VT_UI1, VT_I2, VT_I4, VT_I8, VT_BOOL, * or VT_NULL if the function succeeds. * - Type promotion is inconsistent and as a result certain combinations of * values will return DISP_E_OVERFLOW even when they could be represented. * This matches the behaviour of native oleaut32. */ HRESULT WINAPI VarXor16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut) { VARTYPE vt; VARIANT16 varLeft, varRight; VARIANT16 tempLeft, tempRight; double d; HRESULT hRet; TRACE("(%s,%s,%p)\n", debugstr_variant16(pVarLeft), debugstr_variant16(pVarRight), pVarOut); if (V_EXTRA_TYPE(pVarLeft) || V_EXTRA_TYPE(pVarRight) || V_VT(pVarLeft) > VT_UINT || V_VT(pVarRight) > VT_UINT || V_VT(pVarLeft) == VT_VARIANT || V_VT(pVarRight) == VT_VARIANT || V_VT(pVarLeft) == VT_UNKNOWN || V_VT(pVarRight) == VT_UNKNOWN || V_VT(pVarLeft) == (VARTYPE)15 || V_VT(pVarRight) == (VARTYPE)15 || V_VT(pVarLeft) == VT_ERROR || V_VT(pVarRight) == VT_ERROR) return DISP_E_BADVARTYPE; if (V_VT(pVarLeft) == VT_NULL || V_VT(pVarRight) == VT_NULL) { /* NULL XOR anything valid is NULL */ V_VT(pVarOut) = VT_NULL; return S_OK; } VariantInit16(&tempLeft); VariantInit16(&tempRight); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(pVarLeft) & VT_TYPEMASK) == VT_DISPATCH) { hRet = VARIANT_FetchDispatchValue(pVarLeft, &tempLeft); if (FAILED(hRet)) goto VarXor16_Exit; pVarLeft = &tempLeft; } if ((V_VT(pVarRight) & VT_TYPEMASK) == VT_DISPATCH) { hRet = VARIANT_FetchDispatchValue(pVarRight, &tempRight); if (FAILED(hRet)) goto VarXor16_Exit; pVarRight = &tempRight; } /* Copy our inputs so we don't disturb anything */ V_VT(&varLeft) = V_VT(&varRight) = VT_EMPTY; hRet = VariantCopy16(&varLeft, pVarLeft); if (FAILED(hRet)) goto VarXor16_Exit; hRet = VariantCopy16(&varRight, pVarRight); if (FAILED(hRet)) goto VarXor16_Exit; /* Try any strings first as numbers, then as VT_BOOL */ if (V_VT(&varLeft) == VT_BSTR) { hRet = VarR8FromStr16(V_BSTR(&varLeft), LOCALE_USER_DEFAULT, 0, &d); hRet = VariantChangeType16(&varLeft, &varLeft, VARIANT_LOCALBOOL, FAILED(hRet) ? VT_BOOL : VT_I4); if (FAILED(hRet)) goto VarXor16_Exit; } if (V_VT(&varRight) == VT_BSTR) { hRet = VarR8FromStr16(V_BSTR(&varRight), LOCALE_USER_DEFAULT, 0, &d); hRet = VariantChangeType16(&varRight, &varRight, VARIANT_LOCALBOOL, FAILED(hRet) ? VT_BOOL : VT_I4); if (FAILED(hRet)) goto VarXor16_Exit; } /* Determine the result type */ if (V_VT(&varLeft) == VT_I8 || V_VT(&varRight) == VT_I8) { if (V_VT(pVarLeft) == VT_INT || V_VT(pVarRight) == VT_INT) { hRet = DISP_E_TYPEMISMATCH; goto VarXor16_Exit; } vt = VT_I8; } else { switch ((V_VT(&varLeft) << 16) | V_VT(&varRight)) { case (VT_BOOL << 16) | VT_BOOL: vt = VT_BOOL; break; case (VT_UI1 << 16) | VT_UI1: vt = VT_UI1; break; case (VT_EMPTY << 16) | VT_EMPTY: case (VT_EMPTY << 16) | VT_UI1: case (VT_EMPTY << 16) | VT_I2: case (VT_EMPTY << 16) | VT_BOOL: case (VT_UI1 << 16) | VT_EMPTY: case (VT_UI1 << 16) | VT_I2: case (VT_UI1 << 16) | VT_BOOL: case (VT_I2 << 16) | VT_EMPTY: case (VT_I2 << 16) | VT_UI1: case (VT_I2 << 16) | VT_I2: case (VT_I2 << 16) | VT_BOOL: case (VT_BOOL << 16) | VT_EMPTY: case (VT_BOOL << 16) | VT_UI1: case (VT_BOOL << 16) | VT_I2: vt = VT_I2; break; default: vt = VT_I4; break; } } /* VT_UI4 does not overflow */ if (vt != VT_I8) { if (V_VT(&varLeft) == VT_UI4) V_VT(&varLeft) = VT_I4; if (V_VT(&varRight) == VT_UI4) V_VT(&varRight) = VT_I4; } /* Convert our input copies to the result type */ if (V_VT(&varLeft) != vt) hRet = VariantChangeType16(&varLeft, &varLeft, 0, vt); if (FAILED(hRet)) goto VarXor16_Exit; if (V_VT(&varRight) != vt) hRet = VariantChangeType16(&varRight, &varRight, 0, vt); if (FAILED(hRet)) goto VarXor16_Exit; V_VT(pVarOut) = vt; /* Calculate the result */ switch (vt) { case VT_I8: V_I8(pVarOut) = V_I8(&varLeft) ^ V_I8(&varRight); break; case VT_I4: V_I4(pVarOut) = V_I4(&varLeft) ^ V_I4(&varRight); break; case VT_BOOL: case VT_I2: V_I2(pVarOut) = V_I2(&varLeft) ^ V_I2(&varRight); break; case VT_UI1: V_UI1(pVarOut) = V_UI1(&varLeft) ^ V_UI1(&varRight); break; } VarXor16_Exit: VariantClear16(&varLeft); VariantClear16(&varRight); VariantClear16(&tempLeft); VariantClear16(&tempRight); return hRet; } /********************************************************************** * VarEqv [OLEAUT32.172] * * Determine if two variants contain the same value. * * PARAMS * pVarLeft [I] First variant to compare * pVarRight [I] Variant to compare to pVarLeft * pVarOut [O] Destination for comparison result * * RETURNS * Success: S_OK. pVarOut contains the result of the comparison (VARIANT_TRUE * if equivalent or non-zero otherwise. * Failure: An HRESULT error code indicating the error. * * NOTES * - This function simply calls VarXor16() on pVarLeft and pVarRight and inverts * the result. */ HRESULT WINAPI VarEqv16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut) { HRESULT hRet; TRACE("(%s,%s,%p)\n", debugstr_variant16(pVarLeft), debugstr_variant16(pVarRight), pVarOut); hRet = VarXor16(pVarLeft, pVarRight, pVarOut); if (SUCCEEDED(hRet)) { if (V_VT(pVarOut) == VT_I8) V_I8(pVarOut) = ~V_I8(pVarOut); else V_UI4(pVarOut) = ~V_UI4(pVarOut); } return hRet; } /********************************************************************** * VarNeg [OLEAUT32.173] * * Negate the value of a variant. * * PARAMS * pVarIn [I] Source variant * pVarOut [O] Destination for converted value * * RETURNS * Success: S_OK. pVarOut contains the converted value. * Failure: An HRESULT error code indicating the error. * * NOTES * - The type of the value stored in pVarOut depends on the type of pVarIn, * according to the following table: *| Input Type Output Type *| ---------- ----------- *| VT_EMPTY VT_I2 *| VT_UI1 VT_I2 *| VT_BOOL VT_I2 *| VT_BSTR VT_R8 *| All Others Unchanged (unless promoted) * - Where the negated value of a variant does not fit in its base type, the type * is promoted according to the following table: *| Input Type Promoted To *| ---------- ----------- *| VT_I2 VT_I4 *| VT_I4 VT_R8 *| VT_I8 VT_R8 * - The native version of this function returns DISP_E_BADVARTYPE for valid * variant types that cannot be negated, and returns DISP_E_TYPEMISMATCH * for types which are not valid. Since this is in contravention of the * meaning of those error codes and unlikely to be relied on by applications, * this implementation returns errors consistent with the other high level * variant math functions. */ HRESULT WINAPI VarNeg16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut) { HRESULT hRet = S_OK; VARIANT16 temp; VariantInit16(&temp); TRACE("(%s,%p)\n", debugstr_variant16(pVarIn), pVarOut); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0)) { hRet = VARIANT_FetchDispatchValue(pVarIn, &temp); if (FAILED(hRet)) goto VarNeg_Exit; pVarIn = &temp; } V_VT(pVarOut) = V_VT(pVarIn); switch (V_VT(pVarIn)) { case VT_UI1: V_VT(pVarOut) = VT_I2; V_I2(pVarOut) = -V_UI1(pVarIn); break; case VT_BOOL: V_VT(pVarOut) = VT_I2; /* Fall through */ case VT_I2: if (V_I2(pVarIn) == I2_MIN) { V_VT(pVarOut) = VT_I4; V_I4(pVarOut) = -(int)V_I2(pVarIn); } else V_I2(pVarOut) = -V_I2(pVarIn); break; case VT_I4: if (V_I4(pVarIn) == I4_MIN) { V_VT(pVarOut) = VT_R8; V_R8(pVarOut) = -(double)V_I4(pVarIn); } else V_I4(pVarOut) = -V_I4(pVarIn); break; case VT_I8: if (V_I8(pVarIn) == I8_MIN) { V_VT(pVarOut) = VT_R8; hRet = VarR8FromI816(V_I8(pVarIn), &V_R8(pVarOut)); V_R8(pVarOut) *= -1.0; } else V_I8(pVarOut) = -V_I8(pVarIn); break; case VT_R4: V_R4(pVarOut) = -V_R4(pVarIn); break; case VT_DATE: case VT_R8: V_R8(pVarOut) = -V_R8(pVarIn); break; case VT_CY: hRet = VarCyNeg16(V_CY(pVarIn), &V_CY(pVarOut)); break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: hRet = VarDecNeg16(&V_DECIMAL(pVarIn), &V_DECIMAL(pVarOut)); break; #endif case VT_BSTR: V_VT(pVarOut) = VT_R8; hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(pVarOut)); V_R8(pVarOut) = -V_R8(pVarOut); break; case VT_EMPTY: V_VT(pVarOut) = VT_I2; V_I2(pVarOut) = 0; break; case VT_NULL: /* No-Op */ break; default: if (V_TYPE(pVarIn) == VT_CLSID || /* VT_CLSID is a special case */ FAILED(VARIANT_ValidateType(V_VT(pVarIn)))) hRet = DISP_E_BADVARTYPE; else hRet = DISP_E_TYPEMISMATCH; } VarNeg_Exit: if (FAILED(hRet)) V_VT(pVarOut) = VT_EMPTY; VariantClear16(&temp); return hRet; } /********************************************************************** * VarNot [OLEAUT32.174] * * Perform a not operation on a variant. * * PARAMS * pVarIn [I] Source variant * pVarOut [O] Destination for converted value * * RETURNS * Success: S_OK. pVarOut contains the converted value. * Failure: An HRESULT error code indicating the error. * * NOTES * - Strictly speaking, this function performs a bitwise ones complement * on the variants value (after possibly converting to VT_I4, see below). * This only behaves like a boolean not operation if the value in * pVarIn is either VARIANT_TRUE or VARIANT_FALSE and the type is signed. * - To perform a genuine not operation, convert the variant to a VT_BOOL * before calling this function. * - This function does not process by-reference variants. * - The type of the value stored in pVarOut depends on the type of pVarIn, * according to the following table: *| Input Type Output Type *| ---------- ----------- *| VT_EMPTY VT_I2 *| VT_R4 VT_I4 *| VT_R8 VT_I4 *| VT_BSTR VT_I4 *| VT_DECIMAL VT_I4 *| VT_CY VT_I4 *| (All others) Unchanged */ HRESULT WINAPI VarNot16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut) { VARIANT16 varIn; HRESULT hRet = S_OK; VARIANT16 temp; VariantInit16(&temp); TRACE("(%s,%p)\n", debugstr_variant16(pVarIn), pVarOut); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0)) { hRet = VARIANT_FetchDispatchValue(pVarIn, &temp); if (FAILED(hRet)) goto VarNot_Exit; pVarIn = &temp; } if (V_VT(pVarIn) == VT_BSTR) { V_VT(&varIn) = VT_R8; hRet = VarR8FromStr16( V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(&varIn) ); if (FAILED(hRet)) { V_VT(&varIn) = VT_BOOL; hRet = VarBoolFromStr16( V_BSTR(pVarIn), LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &V_BOOL(&varIn) ); } if (FAILED(hRet)) goto VarNot_Exit; pVarIn = &varIn; } V_VT(pVarOut) = V_VT(pVarIn); switch (V_VT(pVarIn)) { case VT_I1: V_I4(pVarOut) = ~V_I1(pVarIn); V_VT(pVarOut) = VT_I4; break; case VT_UI1: V_UI1(pVarOut) = ~V_UI1(pVarIn); break; case VT_BOOL: case VT_I2: V_I2(pVarOut) = ~V_I2(pVarIn); break; case VT_UI2: V_I4(pVarOut) = ~V_UI2(pVarIn); V_VT(pVarOut) = VT_I4; break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: hRet = VarI4FromDec16(&V_DECIMAL(pVarIn), &V_I4(&varIn)); if (FAILED(hRet)) break; pVarIn = &varIn; /* Fall through ... */ #endif case VT_INT: V_VT(pVarOut) = VT_I4; /* Fall through ... */ case VT_I4: V_I4(pVarOut) = ~V_I4(pVarIn); break; case VT_UINT: case VT_UI4: V_I4(pVarOut) = ~V_UI4(pVarIn); V_VT(pVarOut) = VT_I4; break; case VT_I8: V_I8(pVarOut) = ~V_I8(pVarIn); break; case VT_UI8: V_I4(pVarOut) = ~V_UI8(pVarIn); V_VT(pVarOut) = VT_I4; break; case VT_R4: hRet = VarI4FromR416(V_R4(pVarIn), &V_I4(pVarOut)); V_I4(pVarOut) = ~V_I4(pVarOut); V_VT(pVarOut) = VT_I4; break; case VT_DATE: case VT_R8: hRet = VarI4FromR816(V_R8(pVarIn), &V_I4(pVarOut)); V_I4(pVarOut) = ~V_I4(pVarOut); V_VT(pVarOut) = VT_I4; break; case VT_CY: hRet = VarI4FromCy16(V_CY(pVarIn), &V_I4(pVarOut)); V_I4(pVarOut) = ~V_I4(pVarOut); V_VT(pVarOut) = VT_I4; break; case VT_EMPTY: V_I2(pVarOut) = ~0; V_VT(pVarOut) = VT_I2; break; case VT_NULL: /* No-Op */ break; default: if (V_TYPE(pVarIn) == VT_CLSID || /* VT_CLSID is a special case */ FAILED(VARIANT_ValidateType(V_VT(pVarIn)))) hRet = DISP_E_BADVARTYPE; else hRet = DISP_E_TYPEMISMATCH; } VarNot_Exit: if (FAILED(hRet)) V_VT(pVarOut) = VT_EMPTY; VariantClear16(&temp); return hRet; } /********************************************************************** * VarRound [OLEAUT32.175] * * Perform a round operation on a variant. * * PARAMS * pVarIn [I] Source variant * deci [I] Number of decimals to round to * pVarOut [O] Destination for converted value * * RETURNS * Success: S_OK. pVarOut contains the converted value. * Failure: An HRESULT error code indicating the error. * * NOTES * - Floating point values are rounded to the desired number of decimals. * - Some integer types are just copied to the return variable. * - Some other integer types are not handled and fail. */ HRESULT WINAPI VarRound16(LPVARIANT16 pVarIn, int deci, LPVARIANT16 pVarOut) { VARIANT16 varIn; HRESULT hRet = S_OK; float factor; VARIANT16 temp; VariantInit16(&temp); TRACE("(%s,%d)\n", debugstr_variant16(pVarIn), deci); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0)) { hRet = VARIANT_FetchDispatchValue(pVarIn, &temp); if (FAILED(hRet)) goto VarRound_Exit; pVarIn = &temp; } switch (V_VT(pVarIn)) { /* cases that fail on windows */ case VT_I1: case VT_I8: case VT_UI2: case VT_UI4: hRet = DISP_E_BADVARTYPE; break; /* cases just copying in to out */ case VT_UI1: V_VT(pVarOut) = V_VT(pVarIn); V_UI1(pVarOut) = V_UI1(pVarIn); break; case VT_I2: V_VT(pVarOut) = V_VT(pVarIn); V_I2(pVarOut) = V_I2(pVarIn); break; case VT_I4: V_VT(pVarOut) = V_VT(pVarIn); V_I4(pVarOut) = V_I4(pVarIn); break; case VT_NULL: V_VT(pVarOut) = V_VT(pVarIn); /* value unchanged */ break; /* cases that change type */ case VT_EMPTY: V_VT(pVarOut) = VT_I2; V_I2(pVarOut) = 0; break; case VT_BOOL: V_VT(pVarOut) = VT_I2; V_I2(pVarOut) = V_BOOL(pVarIn); break; case VT_BSTR: hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(&varIn)); if (FAILED(hRet)) break; V_VT(&varIn)=VT_R8; pVarIn = &varIn; /* Fall through ... */ /* cases we need to do math */ case VT_R8: if (V_R8(pVarIn)>0) { V_R8(pVarOut)=floor(V_R8(pVarIn)*pow(10, deci)+0.5)/pow(10, deci); } else { V_R8(pVarOut)=ceil(V_R8(pVarIn)*pow(10, deci)-0.5)/pow(10, deci); } V_VT(pVarOut) = V_VT(pVarIn); break; case VT_R4: if (V_R4(pVarIn)>0) { V_R4(pVarOut)=floor(V_R4(pVarIn)*pow(10, deci)+0.5)/pow(10, deci); } else { V_R4(pVarOut)=ceil(V_R4(pVarIn)*pow(10, deci)-0.5)/pow(10, deci); } V_VT(pVarOut) = V_VT(pVarIn); break; case VT_DATE: if (V_DATE(pVarIn)>0) { V_DATE(pVarOut)=floor(V_DATE(pVarIn)*pow(10, deci)+0.5)/pow(10, deci); } else { V_DATE(pVarOut)=ceil(V_DATE(pVarIn)*pow(10, deci)-0.5)/pow(10, deci); } V_VT(pVarOut) = V_VT(pVarIn); break; case VT_CY: if (deci>3) factor=1; else factor=pow(10, 4-deci); if (V_CY(pVarIn).int64>0) { V_CY(pVarOut).int64=floor(V_CY(pVarIn).int64/factor)*factor; } else { V_CY(pVarOut).int64=ceil(V_CY(pVarIn).int64/factor)*factor; } V_VT(pVarOut) = V_VT(pVarIn); break; /* cases we don't know yet */ default: FIXME("unimplemented part, V_VT(pVarIn) == 0x%X, deci == %d\n", V_VT(pVarIn) & VT_TYPEMASK, deci); hRet = DISP_E_BADVARTYPE; } VarRound_Exit: if (FAILED(hRet)) V_VT(pVarOut) = VT_EMPTY; VariantClear16(&temp); TRACE("returning 0x%08x %s\n", hRet, debugstr_variant16(pVarOut)); return hRet; } /********************************************************************** * VarIdiv [OLEAUT32.153] * * Converts input variants to integers and divides them. * * PARAMS * left [I] Left hand variant * right [I] Right hand variant * result [O] Destination for quotient * * RETURNS * Success: S_OK. result contains the quotient. * Failure: An HRESULT error code indicating the error. * * NOTES * If either expression is null, null is returned, as per MSDN */ HRESULT WINAPI VarIdiv16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { HRESULT hres = S_OK; VARTYPE resvt = VT_EMPTY; VARTYPE leftvt,rightvt; VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags; VARIANT16 lv,rv; VARIANT16 tempLeft, tempRight; TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); VariantInit16(&lv); VariantInit16(&rv); VariantInit16(&tempLeft); VariantInit16(&tempRight); leftvt = V_VT(left)&VT_TYPEMASK; rightvt = V_VT(right)&VT_TYPEMASK; leftExtraFlags = V_VT(left)&(~VT_TYPEMASK); rightExtraFlags = V_VT(right)&(~VT_TYPEMASK); if (leftExtraFlags != rightExtraFlags) { hres = DISP_E_BADVARTYPE; goto end; } ExtraFlags = leftExtraFlags; /* Native VarIdiv always returns an error when using extra * flags or if the variant combination is I8 and INT. */ if ((leftvt == VT_I8 && rightvt == VT_INT) || (leftvt == VT_INT && rightvt == VT_I8) || (rightvt == VT_EMPTY && leftvt != VT_NULL) || ExtraFlags != 0) { hres = DISP_E_BADVARTYPE; goto end; } /* Determine variant type */ else if (leftvt == VT_NULL || rightvt == VT_NULL) { V_VT(result) = VT_NULL; hres = S_OK; goto end; } else if (leftvt == VT_I8 || rightvt == VT_I8) resvt = VT_I8; else if (leftvt == VT_I4 || rightvt == VT_I4 || leftvt == VT_INT || rightvt == VT_INT || leftvt == VT_UINT || rightvt == VT_UINT || leftvt == VT_UI8 || rightvt == VT_UI8 || leftvt == VT_UI4 || rightvt == VT_UI4 || leftvt == VT_UI2 || rightvt == VT_UI2 || leftvt == VT_I1 || rightvt == VT_I1 || leftvt == VT_BSTR || rightvt == VT_BSTR || leftvt == VT_DATE || rightvt == VT_DATE || leftvt == VT_CY || rightvt == VT_CY || leftvt == VT_DECIMAL || rightvt == VT_DECIMAL || leftvt == VT_R8 || rightvt == VT_R8 || leftvt == VT_R4 || rightvt == VT_R4) resvt = VT_I4; else if (leftvt == VT_I2 || rightvt == VT_I2 || leftvt == VT_BOOL || rightvt == VT_BOOL || leftvt == VT_EMPTY) resvt = VT_I2; else if (leftvt == VT_UI1 || rightvt == VT_UI1) resvt = VT_UI1; else { hres = DISP_E_BADVARTYPE; goto end; } /* coerce to the result type */ hres = VariantChangeType16(&lv, left, 0, resvt); if (hres != S_OK) goto end; hres = VariantChangeType16(&rv, right, 0, resvt); if (hres != S_OK) goto end; /* do the math */ V_VT(result) = resvt; switch (resvt) { case VT_UI1: if (V_UI1(&rv) == 0) { hres = DISP_E_DIVBYZERO; V_VT(result) = VT_EMPTY; } else V_UI1(result) = V_UI1(&lv) / V_UI1(&rv); break; case VT_I2: if (V_I2(&rv) == 0) { hres = DISP_E_DIVBYZERO; V_VT(result) = VT_EMPTY; } else V_I2(result) = V_I2(&lv) / V_I2(&rv); break; case VT_I4: if (V_I4(&rv) == 0) { hres = DISP_E_DIVBYZERO; V_VT(result) = VT_EMPTY; } else V_I4(result) = V_I4(&lv) / V_I4(&rv); break; case VT_I8: if (V_I8(&rv) == 0) { hres = DISP_E_DIVBYZERO; V_VT(result) = VT_EMPTY; } else V_I8(result) = V_I8(&lv) / V_I8(&rv); break; default: FIXME("Couldn't integer divide variant types %d,%d\n", leftvt,rightvt); } end: VariantClear16(&lv); VariantClear16(&rv); VariantClear16(&tempLeft); VariantClear16(&tempRight); return hres; } /********************************************************************** * VarMod [OLEAUT32.155] * * Perform the modulus operation of the right hand variant on the left * * PARAMS * left [I] Left hand variant * right [I] Right hand variant * result [O] Destination for converted value * * RETURNS * Success: S_OK. result contains the remainder. * Failure: An HRESULT error code indicating the error. * * NOTE: * If an error occurs the type of result will be modified but the value will not be. * Doesn't support arrays or any special flags yet. */ HRESULT WINAPI VarMod16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { BOOL lOk = TRUE; HRESULT rc = E_FAIL; int resT = 0; VARIANT16 lv,rv; VARIANT16 tempLeft, tempRight; VariantInit16(&tempLeft); VariantInit16(&tempRight); VariantInit16(&lv); VariantInit16(&rv); TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH) { rc = VARIANT_FetchDispatchValue(left, &tempLeft); if (FAILED(rc)) goto end; left = &tempLeft; } if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH) { rc = VARIANT_FetchDispatchValue(right, &tempRight); if (FAILED(rc)) goto end; right = &tempRight; } /* check for invalid inputs */ lOk = TRUE; switch (V_VT(left) & VT_TYPEMASK) { case VT_BOOL : case VT_I1 : case VT_I2 : case VT_I4 : case VT_I8 : case VT_INT : case VT_UI1 : case VT_UI2 : case VT_UI4 : case VT_UI8 : case VT_UINT : case VT_R4 : case VT_R8 : case VT_CY : case VT_EMPTY: case VT_DATE : case VT_BSTR : case VT_DECIMAL: break; case VT_VARIANT: case VT_UNKNOWN: V_VT(result) = VT_EMPTY; rc = DISP_E_TYPEMISMATCH; goto end; case VT_ERROR: rc = DISP_E_TYPEMISMATCH; goto end; case VT_RECORD: V_VT(result) = VT_EMPTY; rc = DISP_E_TYPEMISMATCH; goto end; case VT_NULL: break; default: V_VT(result) = VT_EMPTY; rc = DISP_E_BADVARTYPE; goto end; } switch (V_VT(right) & VT_TYPEMASK) { case VT_BOOL : case VT_I1 : case VT_I2 : case VT_I4 : case VT_I8 : if((V_VT(left) == VT_INT) && (V_VT(right) == VT_I8)) { V_VT(result) = VT_EMPTY; rc = DISP_E_TYPEMISMATCH; goto end; } case VT_INT : if((V_VT(right) == VT_INT) && (V_VT(left) == VT_I8)) { V_VT(result) = VT_EMPTY; rc = DISP_E_TYPEMISMATCH; goto end; } case VT_UI1 : case VT_UI2 : case VT_UI4 : case VT_UI8 : case VT_UINT : case VT_R4 : case VT_R8 : case VT_CY : if(V_VT(left) == VT_EMPTY) { V_VT(result) = VT_I4; rc = S_OK; goto end; } case VT_EMPTY: case VT_DATE : case VT_DECIMAL: if(V_VT(left) == VT_ERROR) { V_VT(result) = VT_EMPTY; rc = DISP_E_TYPEMISMATCH; goto end; } case VT_BSTR: if(V_VT(left) == VT_NULL) { V_VT(result) = VT_NULL; rc = S_OK; goto end; } break; case VT_VOID: V_VT(result) = VT_EMPTY; rc = DISP_E_BADVARTYPE; goto end; case VT_NULL: if(V_VT(left) == VT_VOID) { V_VT(result) = VT_EMPTY; rc = DISP_E_BADVARTYPE; } else if((V_VT(left) == VT_NULL) || (V_VT(left) == VT_EMPTY) || (V_VT(left) == VT_ERROR) || lOk) { V_VT(result) = VT_NULL; rc = S_OK; } else { V_VT(result) = VT_NULL; rc = DISP_E_BADVARTYPE; } goto end; case VT_VARIANT: case VT_UNKNOWN: V_VT(result) = VT_EMPTY; rc = DISP_E_TYPEMISMATCH; goto end; case VT_ERROR: rc = DISP_E_TYPEMISMATCH; goto end; case VT_RECORD: if((V_VT(left) == 15) || ((V_VT(left) >= 24) && (V_VT(left) <= 35)) || !lOk) { V_VT(result) = VT_EMPTY; rc = DISP_E_BADVARTYPE; } else { V_VT(result) = VT_EMPTY; rc = DISP_E_TYPEMISMATCH; } goto end; default: V_VT(result) = VT_EMPTY; rc = DISP_E_BADVARTYPE; goto end; } /* determine the result type */ if((V_VT(left) == VT_I8) || (V_VT(right) == VT_I8)) resT = VT_I8; else if((V_VT(left) == VT_UI1) && (V_VT(right) == VT_BOOL)) resT = VT_I2; else if((V_VT(left) == VT_UI1) && (V_VT(right) == VT_UI1)) resT = VT_UI1; else if((V_VT(left) == VT_UI1) && (V_VT(right) == VT_I2)) resT = VT_I2; else if((V_VT(left) == VT_I2) && (V_VT(right) == VT_BOOL)) resT = VT_I2; else if((V_VT(left) == VT_I2) && (V_VT(right) == VT_UI1)) resT = VT_I2; else if((V_VT(left) == VT_I2) && (V_VT(right) == VT_I2)) resT = VT_I2; else if((V_VT(left) == VT_BOOL) && (V_VT(right) == VT_BOOL)) resT = VT_I2; else if((V_VT(left) == VT_BOOL) && (V_VT(right) == VT_UI1)) resT = VT_I2; else if((V_VT(left) == VT_BOOL) && (V_VT(right) == VT_I2)) resT = VT_I2; else resT = VT_I4; /* most outputs are I4 */ /* convert to I8 for the modulo */ rc = VariantChangeType16(&lv, left, 0, VT_I8); if(FAILED(rc)) { FIXME("Could not convert left type %d to %d? rc == 0x%X\n", V_VT(left), VT_I8, rc); goto end; } rc = VariantChangeType16(&rv, right, 0, VT_I8); if(FAILED(rc)) { FIXME("Could not convert right type %d to %d? rc == 0x%X\n", V_VT(right), VT_I8, rc); goto end; } /* if right is zero set VT_EMPTY and return divide by zero */ if(V_I8(&rv) == 0) { V_VT(result) = VT_EMPTY; rc = DISP_E_DIVBYZERO; goto end; } /* perform the modulo operation */ V_VT(result) = VT_I8; V_I8(result) = V_I8(&lv) % V_I8(&rv); TRACE("V_I8(left) == %s, V_I8(right) == %s, V_I8(result) == %s\n", wine_dbgstr_longlong(V_I8(&lv)), wine_dbgstr_longlong(V_I8(&rv)), wine_dbgstr_longlong(V_I8(result))); /* convert left and right to the destination type */ rc = VariantChangeType16(result, result, 0, resT); if(FAILED(rc)) { FIXME("Could not convert 0x%x to %d?\n", V_VT(result), resT); /* fall to end of function */ } end: VariantClear16(&lv); VariantClear16(&rv); VariantClear16(&tempLeft); VariantClear16(&tempRight); return rc; } /********************************************************************** * VarPow [OLEAUT32.158] * * Computes the power of one variant to another variant. * * PARAMS * left [I] First variant * right [I] Second variant * result [O] Result variant * * RETURNS * Success: S_OK. * Failure: An HRESULT error code indicating the error. */ HRESULT WINAPI VarPow16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { HRESULT hr = S_OK; VARIANT16 dl,dr; VARTYPE resvt = VT_EMPTY; VARTYPE leftvt,rightvt; VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags; VARIANT16 tempLeft, tempRight; TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); VariantInit16(&dl); VariantInit16(&dr); VariantInit16(&tempLeft); VariantInit16(&tempRight); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH) { hr = VARIANT_FetchDispatchValue(left, &tempLeft); if (FAILED(hr)) goto end; left = &tempLeft; } if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH) { hr = VARIANT_FetchDispatchValue(right, &tempRight); if (FAILED(hr)) goto end; right = &tempRight; } leftvt = V_VT(left)&VT_TYPEMASK; rightvt = V_VT(right)&VT_TYPEMASK; leftExtraFlags = V_VT(left)&(~VT_TYPEMASK); rightExtraFlags = V_VT(right)&(~VT_TYPEMASK); if (leftExtraFlags != rightExtraFlags) { hr = DISP_E_BADVARTYPE; goto end; } ExtraFlags = leftExtraFlags; /* Native VarPow always returns an error when using extra flags */ if (ExtraFlags != 0) { hr = DISP_E_BADVARTYPE; goto end; } /* Determine return type */ else if (leftvt == VT_NULL || rightvt == VT_NULL) { V_VT(result) = VT_NULL; hr = S_OK; goto end; } else if ((leftvt == VT_EMPTY || leftvt == VT_I2 || leftvt == VT_I4 || leftvt == VT_R4 || leftvt == VT_R8 || leftvt == VT_CY || leftvt == VT_DATE || leftvt == VT_BSTR || leftvt == VT_BOOL || leftvt == VT_DECIMAL || (leftvt >= VT_I1 && leftvt <= VT_UINT)) && (rightvt == VT_EMPTY || rightvt == VT_I2 || rightvt == VT_I4 || rightvt == VT_R4 || rightvt == VT_R8 || rightvt == VT_CY || rightvt == VT_DATE || rightvt == VT_BSTR || rightvt == VT_BOOL || rightvt == VT_DECIMAL || (rightvt >= VT_I1 && rightvt <= VT_UINT))) resvt = VT_R8; else { hr = DISP_E_BADVARTYPE; goto end; } hr = VariantChangeType16(&dl,left,0,resvt); if (FAILED(hr)) { ERR("Could not change passed left argument to VT_R8, handle it differently.\n"); hr = E_FAIL; goto end; } hr = VariantChangeType16(&dr,right,0,resvt); if (FAILED(hr)) { ERR("Could not change passed right argument to VT_R8, handle it differently.\n"); hr = E_FAIL; goto end; } V_VT(result) = VT_R8; V_R8(result) = pow(V_R8(&dl),V_R8(&dr)); end: VariantClear16(&dl); VariantClear16(&dr); VariantClear16(&tempLeft); VariantClear16(&tempRight); return hr; } /********************************************************************** * VarImp [OLEAUT32.154] * * Bitwise implication of two variants. * * PARAMS * left [I] First variant * right [I] Second variant * result [O] Result variant * * RETURNS * Success: S_OK. * Failure: An HRESULT error code indicating the error. */ HRESULT WINAPI VarImp16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result) { HRESULT hres = S_OK; VARTYPE resvt = VT_EMPTY; VARTYPE leftvt,rightvt; VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags; VARIANT16 lv,rv; double d; VARIANT16 tempLeft, tempRight; VariantInit16(&lv); VariantInit16(&rv); VariantInit16(&tempLeft); VariantInit16(&tempRight); TRACE("(%s,%s,%p)\n", debugstr_variant16(left), debugstr_variant16(right), result); /* Handle VT_DISPATCH by storing and taking address of returned value */ if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(left, &tempLeft); if (FAILED(hres)) goto VarImp_Exit; left = &tempLeft; } if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH) { hres = VARIANT_FetchDispatchValue(right, &tempRight); if (FAILED(hres)) goto VarImp_Exit; right = &tempRight; } leftvt = V_VT(left)&VT_TYPEMASK; rightvt = V_VT(right)&VT_TYPEMASK; leftExtraFlags = V_VT(left)&(~VT_TYPEMASK); rightExtraFlags = V_VT(right)&(~VT_TYPEMASK); if (leftExtraFlags != rightExtraFlags) { hres = DISP_E_BADVARTYPE; goto VarImp_Exit; } ExtraFlags = leftExtraFlags; /* Native VarImp always returns an error when using extra * flags or if the variants are I8 and INT. */ if ((leftvt == VT_I8 && rightvt == VT_INT) || ExtraFlags != 0) { hres = DISP_E_BADVARTYPE; goto VarImp_Exit; } /* Determine result type */ else if ((leftvt == VT_NULL && rightvt == VT_NULL) || (leftvt == VT_NULL && rightvt == VT_EMPTY)) { V_VT(result) = VT_NULL; hres = S_OK; goto VarImp_Exit; } else if (leftvt == VT_I8 || rightvt == VT_I8) resvt = VT_I8; else if (leftvt == VT_I4 || rightvt == VT_I4 || leftvt == VT_INT || rightvt == VT_INT || leftvt == VT_UINT || rightvt == VT_UINT || leftvt == VT_UI4 || rightvt == VT_UI4 || leftvt == VT_UI8 || rightvt == VT_UI8 || leftvt == VT_UI2 || rightvt == VT_UI2 || leftvt == VT_DECIMAL || rightvt == VT_DECIMAL || leftvt == VT_DATE || rightvt == VT_DATE || leftvt == VT_CY || rightvt == VT_CY || leftvt == VT_R8 || rightvt == VT_R8 || leftvt == VT_R4 || rightvt == VT_R4 || leftvt == VT_I1 || rightvt == VT_I1) resvt = VT_I4; else if ((leftvt == VT_UI1 && rightvt == VT_UI1) || (leftvt == VT_UI1 && rightvt == VT_NULL) || (leftvt == VT_NULL && rightvt == VT_UI1)) resvt = VT_UI1; else if (leftvt == VT_EMPTY || rightvt == VT_EMPTY || leftvt == VT_I2 || rightvt == VT_I2 || leftvt == VT_UI1 || rightvt == VT_UI1) resvt = VT_I2; else if (leftvt == VT_BOOL || rightvt == VT_BOOL || leftvt == VT_BSTR || rightvt == VT_BSTR) resvt = VT_BOOL; /* VT_NULL requires special handling for when the opposite * variant is equal to something other than -1. * (NULL Imp 0 = NULL, NULL Imp n = n) */ if (leftvt == VT_NULL) { VARIANT_BOOL b; switch(rightvt) { case VT_I1: if (!V_I1(right)) resvt = VT_NULL; break; case VT_UI1: if (!V_UI1(right)) resvt = VT_NULL; break; case VT_I2: if (!V_I2(right)) resvt = VT_NULL; break; case VT_UI2: if (!V_UI2(right)) resvt = VT_NULL; break; case VT_I4: if (!V_I4(right)) resvt = VT_NULL; break; case VT_UI4: if (!V_UI4(right)) resvt = VT_NULL; break; case VT_I8: if (!V_I8(right)) resvt = VT_NULL; break; case VT_UI8: if (!V_UI8(right)) resvt = VT_NULL; break; case VT_INT: if (!V_INT(right)) resvt = VT_NULL; break; case VT_UINT: if (!V_UINT(right)) resvt = VT_NULL; break; case VT_BOOL: if (!V_BOOL(right)) resvt = VT_NULL; break; case VT_R4: if (!V_R4(right)) resvt = VT_NULL; break; case VT_R8: if (!V_R8(right)) resvt = VT_NULL; break; case VT_DATE: if (!V_DATE(right)) resvt = VT_NULL; break; case VT_CY: if (!V_CY(right).int64) resvt = VT_NULL; break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: if (!(DEC_HI32(&V_DECIMAL(right)) || DEC_LO64(&V_DECIMAL(right)))) resvt = VT_NULL; break; #endif case VT_BSTR: hres = VarBoolFromStr16(V_BSTR(right),LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &b); if (FAILED(hres)) goto VarImp_Exit; else if (!b) V_VT(result) = VT_NULL; else { V_VT(result) = VT_BOOL; V_BOOL(result) = b; } goto VarImp_Exit; } if (resvt == VT_NULL) { V_VT(result) = resvt; goto VarImp_Exit; } else { hres = VariantChangeType16(result,right,0,resvt); goto VarImp_Exit; } } /* Special handling is required when NULL is the right variant. * (-1 Imp NULL = NULL, n Imp NULL = n Imp 0) */ else if (rightvt == VT_NULL) { VARIANT_BOOL b; switch(leftvt) { case VT_I1: if (V_I1(left) == -1) resvt = VT_NULL; break; case VT_UI1: if (V_UI1(left) == 0xff) resvt = VT_NULL; break; case VT_I2: if (V_I2(left) == -1) resvt = VT_NULL; break; case VT_UI2: if (V_UI2(left) == 0xffff) resvt = VT_NULL; break; case VT_INT: if (V_INT(left) == -1) resvt = VT_NULL; break; case VT_UINT: if (V_UINT(left) == ~0u) resvt = VT_NULL; break; case VT_I4: if (V_I4(left) == -1) resvt = VT_NULL; break; case VT_UI4: if (V_UI4(left) == ~0u) resvt = VT_NULL; break; case VT_I8: if (V_I8(left) == -1) resvt = VT_NULL; break; case VT_UI8: if (V_UI8(left) == ~(ULONGLONG)0) resvt = VT_NULL; break; case VT_BOOL: if (V_BOOL(left) == VARIANT_TRUE) resvt = VT_NULL; break; case VT_R4: if (V_R4(left) == -1.0) resvt = VT_NULL; break; case VT_R8: if (V_R8(left) == -1.0) resvt = VT_NULL; break; case VT_CY: if (V_CY(left).int64 == -1) resvt = VT_NULL; break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: if (DEC_HI32(&V_DECIMAL(left)) == 0xffffffff) resvt = VT_NULL; break; #endif case VT_BSTR: hres = VarBoolFromStr16(V_BSTR(left),LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &b); if (FAILED(hres)) goto VarImp_Exit; else if (b == VARIANT_TRUE) resvt = VT_NULL; } if (resvt == VT_NULL) { V_VT(result) = resvt; goto VarImp_Exit; } } hres = VariantCopy16(&lv, left); if (FAILED(hres)) goto VarImp_Exit; if (rightvt == VT_NULL) { memset( &rv, 0, sizeof(rv) ); V_VT(&rv) = resvt; } else { hres = VariantCopy16(&rv, right); if (FAILED(hres)) goto VarImp_Exit; } if (V_VT(&lv) == VT_BSTR && FAILED(VarR8FromStr16(V_BSTR(&lv),LOCALE_USER_DEFAULT, 0, &d))) hres = VariantChangeType16(&lv,&lv,VARIANT_LOCALBOOL, VT_BOOL); if (SUCCEEDED(hres) && V_VT(&lv) != resvt) hres = VariantChangeType16(&lv,&lv,0,resvt); if (FAILED(hres)) goto VarImp_Exit; if (V_VT(&rv) == VT_BSTR && FAILED(VarR8FromStr16(V_BSTR(&rv),LOCALE_USER_DEFAULT, 0, &d))) hres = VariantChangeType16(&rv, &rv,VARIANT_LOCALBOOL, VT_BOOL); if (SUCCEEDED(hres) && V_VT(&rv) != resvt) hres = VariantChangeType16(&rv, &rv, 0, resvt); if (FAILED(hres)) goto VarImp_Exit; /* do the math */ V_VT(result) = resvt; switch (resvt) { case VT_I8: V_I8(result) = (~V_I8(&lv)) | V_I8(&rv); break; case VT_I4: V_I4(result) = (~V_I4(&lv)) | V_I4(&rv); break; case VT_I2: V_I2(result) = (~V_I2(&lv)) | V_I2(&rv); break; case VT_UI1: V_UI1(result) = (~V_UI1(&lv)) | V_UI1(&rv); break; case VT_BOOL: V_BOOL(result) = (~V_BOOL(&lv)) | V_BOOL(&rv); break; default: FIXME("Couldn't perform bitwise implication on variant types %d,%d\n", leftvt,rightvt); } VarImp_Exit: VariantClear16(&lv); VariantClear16(&rv); VariantClear16(&tempLeft); VariantClear16(&tempRight); return hres; } ================================================ FILE: ole2disp/var/variant.h ================================================ /* * Variant Inlines * * Copyright 2003 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "windef.h" #include "winerror.h" #include "objbase.h" #include "oleauto.h" #include "../ole2disp.h" #include /* Get just the type from a variant pointer */ #define V_TYPE(v) (V_VT((v)) & VT_TYPEMASK) /* Flags set in V_VT, other than the actual type value */ #define VT_EXTRA_TYPE (VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED) /* Get the extra flags from a variant pointer */ #define V_EXTRA_TYPE(v) (V_VT((v)) & VT_EXTRA_TYPE) /* Missing in Windows but useful VTBIT_* defines */ #define VTBIT_BOOL (1 << VT_BSTR) #define VTBIT_BSTR (1 << VT_BSTR) #define VTBIT_DATE (1 << VT_DATE) #define VTBIT_DISPATCH (1 << VT_DISPATCH) #define VTBIT_EMPTY (1 << VT_EMPTY) #define VTBIT_ERROR (1 << VT_ERROR) #define VTBIT_INT (1 << VT_INT) #define VTBIT_NULL (1 << VT_NULL) #define VTBIT_UINT (1 << VT_UINT) #define VTBIT_UNKNOWN (1 << VT_UNKNOWN) #define VTBIT_VARIANT (1 << VT_VARIANT) #define VTBIT_15 (1 << 15) /* no variant type with this number */ /* Size constraints */ #define I1_MAX 0x7f #define I1_MIN ((-I1_MAX)-1) #define UI1_MAX 0xff #define UI1_MIN 0 #define I2_MAX 0x7fff #define I2_MIN ((-I2_MAX)-1) #define UI2_MAX 0xffff #define UI2_MIN 0 #define I4_MAX 0x7fffffff #define I4_MIN ((-I4_MAX)-1) #define UI4_MAX 0xffffffff #define UI4_MIN 0 #define I8_MAX (((LONGLONG)I4_MAX << 32) | UI4_MAX) #define I8_MIN ((-I8_MAX)-1) #define UI8_MAX (((ULONGLONG)UI4_MAX << 32) | UI4_MAX) #define UI8_MIN 0 #define DATE_MAX 2958465 #define DATE_MIN -657434 #define R4_MAX 3.402823567797336e38 #define R4_MIN 1.40129846432481707e-45 #define R8_MAX 1.79769313486231470e+308 #define R8_MIN 4.94065645841246544e-324 /* Value of sign for a positive decimal number */ #define DECIMAL_POS 0 /* Native headers don't change the union ordering for DECIMAL sign/scale (duh). * This means that the signscale member is only useful for setting both members to 0. * SIGNSCALE creates endian-correct values so that we can properly set both at once * to values other than 0. */ #ifdef WORDS_BIGENDIAN #define SIGNSCALE(sign,scale) (((scale) << 8) | sign) #else #define SIGNSCALE(sign,scale) (((sign) << 8) | scale) #endif /* Macros for getting at a DECIMAL's parts */ #define DEC_SIGN(d) ((d)->u.s.sign) #define DEC_SCALE(d) ((d)->u.s.scale) #define DEC_SIGNSCALE(d) ((d)->u.signscale) #define DEC_HI32(d) ((d)->Hi32) #define DEC_MID32(d) ((d)->u1.s1.Mid32) #define DEC_LO32(d) ((d)->u1.s1.Lo32) #define DEC_LO64(d) ((d)->u1.Lo64) #define DEC_MAX_SCALE 28 /* Maximum scale for a decimal */ /* Internal flags for low level conversion functions */ #define VAR_BOOLONOFF 0x0400 /* Convert bool to "On"/"Off" */ #define VAR_BOOLYESNO 0x0800 /* Convert bool to "Yes"/"No" */ #define VAR_NEGATIVE 0x1000 /* Number is negative */ /* The localised characters that make up a valid number */ typedef struct tagVARIANT_NUMBER_CHARS { WCHAR cNegativeSymbol; WCHAR cPositiveSymbol; WCHAR cDecimalPoint; WCHAR cDigitSeparator; WCHAR cCurrencyLocal; WCHAR cCurrencyLocal2; WCHAR cCurrencyDecimalPoint; WCHAR cCurrencyDigitSeparator; } VARIANT_NUMBER_CHARS; unsigned int get_type_size(ULONG*, VARTYPE) DECLSPEC_HIDDEN; HRESULT VARIANT_ClearInd(VARIANTARG16 *) DECLSPEC_HIDDEN; BOOL get_date_format(LCID, DWORD, const SYSTEMTIME *, const CHAR *, CHAR *, int) DECLSPEC_HIDDEN; ================================================ FILE: ole2disp/var/vartype.c ================================================ /* * Low level variant functions * * Copyright 2003 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define COBJMACROS #define NONAMELESSUNION #define NONAMELESSSTRUCT #include "wine/debug.h" #include "wine/unicode.h" #include "winbase.h" #include "winuser.h" #include "winnt.h" #include "variant.h" #include "resource.h" #include #include typedef SEGPTR SEGIDispatch; WINE_DEFAULT_DEBUG_CHANNEL(variant); #define strcmpiA strcmpi #define strcmpA strcmp #define strchrA strchr #define strlenA strlen #define sprintfA sprintf #define strspnA strspn #define isdigitA isdigit #define strtoulA strtoul #define isalphaA isalpha #define strncmpiA _strnicmp #define isspaceA isspace extern HMODULE hProxyDll DECLSPEC_HIDDEN; #define CY_MULTIPLIER 10000 /* 4 dp of precision */ #define CY_MULTIPLIER_F 10000.0 #define CY_HALF (CY_MULTIPLIER/2) /* 0.5 */ #define CY_HALF_F (CY_MULTIPLIER_F/2.0) static const OLECHAR16 szFloatFormatW[] = { '%','.','7','G','\0' }; static const OLECHAR16 szDoubleFormatW[] = { '%','.','1','5','G','\0' }; static void fix_double(double *dbl) { #if 0 ULARGE_INTEGER lng = *(ULARGE_INTEGER*)dbl; ULARGE_INTEGER swapped = { lng.u.HighPart, lng.u.LowPart }; *dbl = *(double*)&swapped; #endif } /* Copy data from one variant to another. */ static inline void VARIANT_CopyData(const VARIANT16 *srcVar, VARTYPE vt, void *pOut) { switch (vt) { case VT_I1: case VT_UI1: memcpy(pOut, &V_UI1(srcVar), sizeof(BYTE)); break; case VT_BOOL: case VT_I2: case VT_UI2: memcpy(pOut, &V_UI2(srcVar), sizeof(SHORT)); break; case VT_R4: case VT_INT: case VT_I4: case VT_UINT: case VT_UI4: memcpy(pOut, &V_UI4(srcVar), sizeof (LONG)); break; case VT_R8: case VT_DATE: case VT_CY: case VT_I8: case VT_UI8: memcpy(pOut, &V_UI8(srcVar), sizeof (LONG64)); break; case VT_INT_PTR: memcpy(pOut, &V_INT_PTR(srcVar), sizeof (INT_PTR)); break; #ifdef AVAIL_32BIT_VAR case VT_DECIMAL: memcpy(pOut, &V_DECIMAL(srcVar), sizeof (DECIMAL)); break; #endif case VT_BSTR: memcpy(pOut, &V_BSTR(srcVar), sizeof(SEGBSTR16)); break; default: FIXME("VT_ type %d unhandled, please report!\n", vt); } } /* Macro to inline conversion from a float or double to any integer type, * rounding according to the 'dutch' convention. */ #define VARIANT_DutchRound(typ, value, res) do { \ double whole = value < 0 ? ceil(value) : floor(value); \ double fract = value - whole; \ if (fract > 0.5) res = (typ)whole + (typ)1; \ else if (fract == 0.5) { typ is_odd = (typ)whole & 1; res = whole + is_odd; } \ else if (fract >= 0.0) res = (typ)whole; \ else if (fract == -0.5) { typ is_odd = (typ)whole & 1; res = whole - is_odd; } \ else if (fract > -0.5) res = (typ)whole; \ else res = (typ)whole - (typ)1; \ } while(0) /* Coerce VT_BSTR to a numeric type */ static HRESULT VARIANT_NumberFromBstr(OLECHAR16* pStrIn, LCID lcid, ULONG ulFlags, void* pOut, VARTYPE vt) { VARIANTARG16 dstVar; HRESULT hRet; NUMPARSE np; BYTE rgb[1024]; /* Use VarParseNumFromStr16/VarNumFromParseNum16 as MSDN indicates */ np.cDig = ARRAY_SIZE(rgb); np.dwInFlags = NUMPRS_STD; hRet = VarParseNumFromStr16(pStrIn, lcid, ulFlags, &np, rgb); if (SUCCEEDED(hRet)) { /* 1 << vt gives us the VTBIT constant for the destination number type */ hRet = VarNumFromParseNum16(&np, rgb, 1 << vt, &dstVar); if (SUCCEEDED(hRet)) VARIANT_CopyData(&dstVar, vt, pOut); } return hRet; } /* Coerce VT_DISPATCH to another type */ static HRESULT VARIANT_FromDisp(SEGIDispatch pdispIn, LCID lcid, void* pOut, VARTYPE vt, DWORD dwFlags) { static DISPPARAMS16 emptyParams = { NULL, NULL, 0, 0 }; VARIANTARG16 srcVar, dstVar; HRESULT hRet; if (!pdispIn) return DISP_E_BADVARTYPE; /* Get the default 'value' property from the IDispatch */ VariantInit16(&srcVar); hRet = IDispatch16_Invoke(pdispIn, DISPID_VALUE, MapLS(&IID_NULL), lcid, DISPATCH_PROPERTYGET, MapLS(&emptyParams), MapLS(&srcVar), NULL, NULL); if (SUCCEEDED(hRet)) { /* Convert the property to the requested type */ VariantInit16(&dstVar); hRet = VariantChangeTypeEx16(&dstVar, &srcVar, lcid, dwFlags, vt); VariantClear16(&srcVar); if (SUCCEEDED(hRet)) VARIANT_CopyData(&dstVar, vt, pOut); } else hRet = DISP_E_TYPEMISMATCH; return hRet; } /* Inline return type */ #define RETTYP static inline HRESULT /* Simple compiler cast from one type to another */ #define SIMPLE(dest, src, func) RETTYP _##func(src in, dest* out) { \ *out = in; return S_OK; } /* Compiler cast where input cannot be negative */ #define NEGTST(dest, src, func) RETTYP _##func(src in, dest* out) { \ if (in < 0) return DISP_E_OVERFLOW; *out = in; return S_OK; } /* Compiler cast where input cannot be > some number */ #define POSTST(dest, src, func, tst) RETTYP _##func(src in, dest* out) { \ if (in > (dest)tst) return DISP_E_OVERFLOW; *out = in; return S_OK; } /* Compiler cast where input cannot be < some number or >= some other number */ #define BOTHTST(dest, src, func, lo, hi) RETTYP _##func(src in, dest* out) { \ if (in < (dest)lo || in > hi) return DISP_E_OVERFLOW; *out = in; return S_OK; } /* I1 */ POSTST(signed char, BYTE, VarI1FromUI1, I1_MAX) BOTHTST(signed char, SHORT, VarI1FromI2, I1_MIN, I1_MAX) BOTHTST(signed char, LONG, VarI1FromI4, I1_MIN, I1_MAX) SIMPLE(signed char, VARIANT_BOOL, VarI1FromBool) POSTST(signed char, USHORT, VarI1FromUI2, I1_MAX) POSTST(signed char, ULONG, VarI1FromUI4, I1_MAX) BOTHTST(signed char, LONG64, VarI1FromI8, I1_MIN, I1_MAX) POSTST(signed char, ULONG64, VarI1FromUI8, I1_MAX) /* UI1 */ BOTHTST(BYTE, SHORT, VarUI1FromI2, UI1_MIN, UI1_MAX) SIMPLE(BYTE, VARIANT_BOOL, VarUI1FromBool) NEGTST(BYTE, signed char, VarUI1FromI1) POSTST(BYTE, USHORT, VarUI1FromUI2, UI1_MAX) BOTHTST(BYTE, LONG, VarUI1FromI4, UI1_MIN, UI1_MAX) POSTST(BYTE, ULONG, VarUI1FromUI4, UI1_MAX) BOTHTST(BYTE, LONG64, VarUI1FromI8, UI1_MIN, UI1_MAX) POSTST(BYTE, ULONG64, VarUI1FromUI8, UI1_MAX) /* I2 */ SIMPLE(SHORT, BYTE, VarI2FromUI1) BOTHTST(SHORT, LONG, VarI2FromI4, I2_MIN, I2_MAX) SIMPLE(SHORT, VARIANT_BOOL, VarI2FromBool) SIMPLE(SHORT, signed char, VarI2FromI1) POSTST(SHORT, USHORT, VarI2FromUI2, I2_MAX) POSTST(SHORT, ULONG, VarI2FromUI4, I2_MAX) BOTHTST(SHORT, LONG64, VarI2FromI8, I2_MIN, I2_MAX) POSTST(SHORT, ULONG64, VarI2FromUI8, I2_MAX) /* UI2 */ SIMPLE(USHORT, BYTE, VarUI2FromUI1) NEGTST(USHORT, SHORT, VarUI2FromI2) BOTHTST(USHORT, LONG, VarUI2FromI4, UI2_MIN, UI2_MAX) SIMPLE(USHORT, VARIANT_BOOL, VarUI2FromBool) NEGTST(USHORT, signed char, VarUI2FromI1) POSTST(USHORT, ULONG, VarUI2FromUI4, UI2_MAX) BOTHTST(USHORT, LONG64, VarUI2FromI8, UI2_MIN, UI2_MAX) POSTST(USHORT, ULONG64, VarUI2FromUI8, UI2_MAX) /* I4 */ SIMPLE(LONG, BYTE, VarI4FromUI1) SIMPLE(LONG, SHORT, VarI4FromI2) SIMPLE(LONG, VARIANT_BOOL, VarI4FromBool) SIMPLE(LONG, signed char, VarI4FromI1) SIMPLE(LONG, USHORT, VarI4FromUI2) POSTST(LONG, ULONG, VarI4FromUI4, I4_MAX) BOTHTST(LONG, LONG64, VarI4FromI8, I4_MIN, I4_MAX) POSTST(LONG, ULONG64, VarI4FromUI8, I4_MAX) /* UI4 */ SIMPLE(ULONG, BYTE, VarUI4FromUI1) NEGTST(ULONG, SHORT, VarUI4FromI2) NEGTST(ULONG, LONG, VarUI4FromI4) SIMPLE(ULONG, VARIANT_BOOL, VarUI4FromBool) NEGTST(ULONG, signed char, VarUI4FromI1) SIMPLE(ULONG, USHORT, VarUI4FromUI2) BOTHTST(ULONG, LONG64, VarUI4FromI8, UI4_MIN, UI4_MAX) POSTST(ULONG, ULONG64, VarUI4FromUI8, UI4_MAX) /* I8 */ SIMPLE(LONG64, BYTE, VarI8FromUI1) SIMPLE(LONG64, SHORT, VarI8FromI2) SIMPLE(LONG64, signed char, VarI8FromI1) SIMPLE(LONG64, USHORT, VarI8FromUI2) SIMPLE(LONG64, ULONG, VarI8FromUI4) POSTST(LONG64, ULONG64, VarI8FromUI8, I8_MAX) /* UI8 */ SIMPLE(ULONG64, BYTE, VarUI8FromUI1) NEGTST(ULONG64, SHORT, VarUI8FromI2) NEGTST(ULONG64, signed char, VarUI8FromI1) SIMPLE(ULONG64, USHORT, VarUI8FromUI2) SIMPLE(ULONG64, ULONG, VarUI8FromUI4) NEGTST(ULONG64, LONG64, VarUI8FromI8) /* R4 (float) */ SIMPLE(float, BYTE, VarR4FromUI1) SIMPLE(float, SHORT, VarR4FromI2) SIMPLE(float, signed char, VarR4FromI1) SIMPLE(float, USHORT, VarR4FromUI2) SIMPLE(float, LONG, VarR4FromI4) SIMPLE(float, ULONG, VarR4FromUI4) SIMPLE(float, LONG64, VarR4FromI8) SIMPLE(float, ULONG64, VarR4FromUI8) /* R8 (double) */ SIMPLE(double, BYTE, VarR8FromUI1) SIMPLE(double, SHORT, VarR8FromI2) SIMPLE(double, float, VarR8FromR4) RETTYP _VarR8FromCy(CY i, double* o) { *o = (double)i.int64 / CY_MULTIPLIER_F; return S_OK; } SIMPLE(double, DATE, VarR8FromDate) SIMPLE(double, signed char, VarR8FromI1) SIMPLE(double, USHORT, VarR8FromUI2) SIMPLE(double, LONG, VarR8FromI4) SIMPLE(double, ULONG, VarR8FromUI4) SIMPLE(double, LONG64, VarR8FromI8) SIMPLE(double, ULONG64, VarR8FromUI8) /* I1 */ /************************************************************************ * VarI1FromUI1 (OLEAUT32.244) * * Convert a VT_UI1 to a VT_I1. * * PARAMS * bIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromUI116(BYTE bIn, signed char* pcOut) { return _VarI1FromUI1(bIn, pcOut); } /************************************************************************ * VarI1FromI2 (OLEAUT32.245) * * Convert a VT_I2 to a VT_I1. * * PARAMS * sIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromI216(SHORT sIn, signed char* pcOut) { return _VarI1FromI2(sIn, pcOut); } /************************************************************************ * VarI1FromI4 (OLEAUT32.246) * * Convert a VT_I4 to a VT_I1. * * PARAMS * iIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromI416(LONG iIn, signed char* pcOut) { return _VarI1FromI4(iIn, pcOut); } /************************************************************************ * VarI1FromR4 (OLEAUT32.247) * * Convert a VT_R4 to a VT_I1. * * PARAMS * fltIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromR416(FLOAT fltIn, signed char* pcOut) { return VarI1FromR8(fltIn, pcOut); } /************************************************************************ * VarI1FromR8 (OLEAUT32.248) * * Convert a VT_R8 to a VT_I1. * * PARAMS * dblIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * See VarI8FromR8() for details concerning rounding. */ HRESULT WINAPI VarI1FromR816_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarI1FromR816(*(double *)&dbl, pcOut); } HRESULT WINAPI VarI1FromR816(double dblIn, signed char* pcOut) { if (dblIn < I1_MIN - 0.5 || dblIn >= I1_MAX + 0.5) return DISP_E_OVERFLOW; VARIANT_DutchRound(CHAR, dblIn, *pcOut); return S_OK; } /************************************************************************ * VarI1FromDate (OLEAUT32.249) * * Convert a VT_DATE to a VT_I1. * * PARAMS * dateIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromDate16(DATE dateIn, signed char* pcOut) { return VarI1FromR8(dateIn, pcOut); } /************************************************************************ * VarI1FromCy (OLEAUT32.250) * * Convert a VT_CY to a VT_I1. * * PARAMS * cyIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromCy16(CY cyIn, signed char* pcOut) { LONG i = I1_MAX + 1; VarI4FromCy(cyIn, &i); return _VarI1FromI4(i, pcOut); } /************************************************************************ * VarI1FromStr (OLEAUT32.251) * * Convert a VT_BSTR to a VT_I1. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI1FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, signed char* pcOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pcOut, VT_I1); } /************************************************************************ * VarI1FromDisp (OLEAUT32.252) * * Convert a VT_DISPATCH to a VT_I1. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI1FromDisp16(SEGIDispatch pdispIn, LCID lcid, signed char* pcOut) { return VARIANT_FromDisp(pdispIn, lcid, pcOut, VT_I1, 0); } /************************************************************************ * VarI1FromBool (OLEAUT32.253) * * Convert a VT_BOOL to a VT_I1. * * PARAMS * boolIn [I] Source * pcOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI1FromBool16(VARIANT_BOOL boolIn, signed char* pcOut) { return _VarI1FromBool(boolIn, pcOut); } /************************************************************************ * VarI1FromUI2 (OLEAUT32.254) * * Convert a VT_UI2 to a VT_I1. * * PARAMS * usIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromUI216(USHORT usIn, signed char* pcOut) { return _VarI1FromUI2(usIn, pcOut); } /************************************************************************ * VarI1FromUI4 (OLEAUT32.255) * * Convert a VT_UI4 to a VT_I1. * * PARAMS * ulIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI1FromUI416(ULONG ulIn, signed char* pcOut) { return _VarI1FromUI4(ulIn, pcOut); } /************************************************************************ * VarI1FromDec (OLEAUT32.256) * * Convert a VT_DECIMAL to a VT_I1. * * PARAMS * pDecIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromDec16(DECIMAL *pdecIn, signed char* pcOut) { LONG64 i64; HRESULT hRet; hRet = VarI8FromDec(pdecIn, &i64); if (SUCCEEDED(hRet)) hRet = _VarI1FromI8(i64, pcOut); return hRet; } /************************************************************************ * VarI1FromI8 (OLEAUT32.376) * * Convert a VT_I8 to a VT_I1. * * PARAMS * llIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromI816(LONG64 llIn, signed char* pcOut) { return _VarI1FromI8(llIn, pcOut); } /************************************************************************ * VarI1FromUI8 (OLEAUT32.377) * * Convert a VT_UI8 to a VT_I1. * * PARAMS * ullIn [I] Source * pcOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI1FromUI816(ULONG64 ullIn, signed char* pcOut) { return _VarI1FromUI8(ullIn, pcOut); } /* UI1 */ /************************************************************************ * VarUI1FromI2 (OLEAUT32.130) * * Convert a VT_I2 to a VT_UI1. * * PARAMS * sIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromI216(SHORT sIn, BYTE* pbOut) { return _VarUI1FromI2(sIn, pbOut); } /************************************************************************ * VarUI1FromI4 (OLEAUT32.131) * * Convert a VT_I4 to a VT_UI1. * * PARAMS * iIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromI416(LONG iIn, BYTE* pbOut) { return _VarUI1FromI4(iIn, pbOut); } /************************************************************************ * VarUI1FromR4 (OLEAUT32.132) * * Convert a VT_R4 to a VT_UI1. * * PARAMS * fltIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI1FromR416(FLOAT fltIn, BYTE* pbOut) { return VarUI1FromR8(fltIn, pbOut); } /************************************************************************ * VarUI1FromR8 (OLEAUT32.133) * * Convert a VT_R8 to a VT_UI1. * * PARAMS * dblIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * See VarI8FromR8() for details concerning rounding. */ HRESULT WINAPI VarUI1FromR816_conv(DWORD dblIn1, DWORD dblIn2, BYTE* pbOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarUI1FromR816(*(double *)&dbl, pbOut); } HRESULT WINAPI VarUI1FromR816(double dblIn, BYTE* pbOut) { fix_double(&dblIn); if (dblIn < -0.5 || dblIn >= UI1_MAX + 0.5) return DISP_E_OVERFLOW; VARIANT_DutchRound(BYTE, dblIn, *pbOut); return S_OK; } /************************************************************************ * VarUI1FromCy (OLEAUT32.134) * * Convert a VT_CY to a VT_UI1. * * PARAMS * cyIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * Negative values >= -5000 will be converted to 0. */ HRESULT WINAPI VarUI1FromCy16_conv(DWORD dblIn1, DWORD dblIn2, BYTE* pbOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarUI1FromCy16(*(CY *)&dbl, pbOut); } HRESULT WINAPI VarUI1FromCy16(CY cyIn, BYTE* pbOut) { fix_double(&cyIn); return VarUI1FromCy(cyIn, pbOut); } /************************************************************************ * VarUI1FromDate (OLEAUT32.135) * * Convert a VT_DATE to a VT_UI1. * * PARAMS * dateIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromDate16_conv(DWORD dblIn1, DWORD dblIn2, BYTE* pbOut) { return VarUI1FromR816_conv(dblIn1, dblIn2, pbOut); } HRESULT WINAPI VarUI1FromDate16(DATE dateIn, BYTE* pbOut) { return VarUI1FromR816(dateIn, pbOut); } /************************************************************************ * VarUI1FromStr (OLEAUT32.136) * * Convert a VT_BSTR to a VT_UI1. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI1FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pbOut, VT_UI1); } /************************************************************************ * VarUI1FromDisp (OLEAUT32.137) * * Convert a VT_DISPATCH to a VT_UI1. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI1FromDisp16(SEGIDispatch pdispIn, LCID lcid, BYTE* pbOut) { return VARIANT_FromDisp(pdispIn, lcid, pbOut, VT_UI1, 0); } /************************************************************************ * VarUI1FromBool (OLEAUT32.138) * * Convert a VT_BOOL to a VT_UI1. * * PARAMS * boolIn [I] Source * pbOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI1FromBool16(VARIANT_BOOL boolIn, BYTE* pbOut) { return _VarUI1FromBool(boolIn, pbOut); } /************************************************************************ * VarUI1FromI1 (OLEAUT32.237) * * Convert a VT_I1 to a VT_UI1. * * PARAMS * cIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromI116(signed char cIn, BYTE* pbOut) { return _VarUI1FromI1(cIn, pbOut); } /************************************************************************ * VarUI1FromUI2 (OLEAUT32.238) * * Convert a VT_UI2 to a VT_UI1. * * PARAMS * usIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromUI216(USHORT usIn, BYTE* pbOut) { return _VarUI1FromUI2(usIn, pbOut); } /************************************************************************ * VarUI1FromUI4 (OLEAUT32.239) * * Convert a VT_UI4 to a VT_UI1. * * PARAMS * ulIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromUI416(ULONG ulIn, BYTE* pbOut) { return _VarUI1FromUI4(ulIn, pbOut); } /************************************************************************ * VarUI1FromDec (OLEAUT32.240) * * Convert a VT_DECIMAL to a VT_UI1. * * PARAMS * pDecIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromDec16(DECIMAL *pdecIn, BYTE* pbOut) { LONG64 i64; HRESULT hRet; hRet = VarI8FromDec(pdecIn, &i64); if (SUCCEEDED(hRet)) hRet = _VarUI1FromI8(i64, pbOut); return hRet; } /************************************************************************ * VarUI1FromI8 (OLEAUT32.372) * * Convert a VT_I8 to a VT_UI1. * * PARAMS * llIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromI816(LONG64 llIn, BYTE* pbOut) { return _VarUI1FromI8(llIn, pbOut); } /************************************************************************ * VarUI1FromUI8 (OLEAUT32.373) * * Convert a VT_UI8 to a VT_UI1. * * PARAMS * ullIn [I] Source * pbOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI1FromUI816(ULONG64 ullIn, BYTE* pbOut) { return _VarUI1FromUI8(ullIn, pbOut); } /* I2 */ /************************************************************************ * VarI2FromUI1 (OLEAUT32.48) * * Convert a VT_UI2 to a VT_I2. * * PARAMS * bIn [I] Source * psOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI2FromUI116(BYTE bIn, SHORT* psOut) { return _VarI2FromUI1(bIn, psOut); } /************************************************************************ * VarI2FromI4 (OLEAUT32.49) * * Convert a VT_I4 to a VT_I2. * * PARAMS * iIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromI416(LONG iIn, SHORT* psOut) { return _VarI2FromI4(iIn, psOut); } /************************************************************************ * VarI2FromR4 (OLEAUT32.50) * * Convert a VT_R4 to a VT_I2. * * PARAMS * fltIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromR416(FLOAT fltIn, SHORT* psOut) { return VarI2FromR4(fltIn, psOut); } /************************************************************************ * VarI2FromR8 (OLEAUT32.51) * * Convert a VT_R8 to a VT_I2. * * PARAMS * dblIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * See VarI8FromR8() for details concerning rounding. */ HRESULT WINAPI VarI2FromR816_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarI2FromR816(*(double *)&dbl, pcOut); } HRESULT WINAPI VarI2FromR816(double dblIn, SHORT* psOut) { fix_double(&dblIn); if (dblIn < I2_MIN - 0.5 || dblIn >= I2_MAX + 0.5) return DISP_E_OVERFLOW; VARIANT_DutchRound(SHORT, dblIn, *psOut); return S_OK; } /************************************************************************ * VarI2FromCy (OLEAUT32.52) * * Convert a VT_CY to a VT_I2. * * PARAMS * cyIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromCy16_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarI2FromCy16(*(CY *)&dbl, pcOut); } HRESULT WINAPI VarI2FromCy16(CY cyIn, SHORT* psOut) { fix_double(&cyIn); return VarI2FromCy(cyIn, psOut); } /************************************************************************ * VarI2FromDate (OLEAUT32.53) * * Convert a VT_DATE to a VT_I2. * * PARAMS * dateIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromDate16_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarI2FromDate16(*(DATE *)&dbl, pcOut); } HRESULT WINAPI VarI2FromDate16(DATE dateIn, SHORT* psOut) { fix_double(&dateIn); return VarI2FromDate(dateIn, psOut); } /************************************************************************ * VarI2FromStr (OLEAUT32.54) * * Convert a VT_BSTR to a VT_I2. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if any parameter is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI2FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, SHORT* psOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, psOut, VT_I2); } /************************************************************************ * VarI2FromDisp (OLEAUT32.55) * * Convert a VT_DISPATCH to a VT_I2. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pdispIn is invalid, * DISP_E_OVERFLOW, if the value will not fit in the destination, * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI2FromDisp16(SEGIDispatch pdispIn, LCID lcid, SHORT* psOut) { return VARIANT_FromDisp(pdispIn, lcid, psOut, VT_I2, 0); } /************************************************************************ * VarI2FromBool (OLEAUT32.56) * * Convert a VT_BOOL to a VT_I2. * * PARAMS * boolIn [I] Source * psOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI2FromBool16(VARIANT_BOOL boolIn, SHORT* psOut) { return _VarI2FromBool(boolIn, psOut); } /************************************************************************ * VarI2FromI1 (OLEAUT32.205) * * Convert a VT_I1 to a VT_I2. * * PARAMS * cIn [I] Source * psOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI2FromI116(signed char cIn, SHORT* psOut) { return _VarI2FromI1(cIn, psOut); } /************************************************************************ * VarI2FromUI2 (OLEAUT32.206) * * Convert a VT_UI2 to a VT_I2. * * PARAMS * usIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromUI216(USHORT usIn, SHORT* psOut) { return _VarI2FromUI2(usIn, psOut); } /************************************************************************ * VarI2FromUI4 (OLEAUT32.207) * * Convert a VT_UI4 to a VT_I2. * * PARAMS * ulIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromUI416(ULONG ulIn, SHORT* psOut) { return _VarI2FromUI4(ulIn, psOut); } /************************************************************************ * VarI2FromDec (OLEAUT32.208) * * Convert a VT_DECIMAL to a VT_I2. * * PARAMS * pDecIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromDec16(DECIMAL *pdecIn, SHORT* psOut) { LONG64 i64; HRESULT hRet; hRet = VarI8FromDec(pdecIn, &i64); if (SUCCEEDED(hRet)) hRet = _VarI2FromI8(i64, psOut); return hRet; } /************************************************************************ * VarI2FromI8 (OLEAUT32.346) * * Convert a VT_I8 to a VT_I2. * * PARAMS * llIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromI816(LONG64 llIn, SHORT* psOut) { return _VarI2FromI8(llIn, psOut); } /************************************************************************ * VarI2FromUI8 (OLEAUT32.347) * * Convert a VT_UI8 to a VT_I2. * * PARAMS * ullIn [I] Source * psOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI2FromUI816(ULONG64 ullIn, SHORT* psOut) { return _VarI2FromUI8(ullIn, psOut); } /* UI2 */ /************************************************************************ * VarUI2FromUI1 (OLEAUT32.257) * * Convert a VT_UI1 to a VT_UI2. * * PARAMS * bIn [I] Source * pusOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI2FromUI116(BYTE bIn, USHORT* pusOut) { return _VarUI2FromUI1(bIn, pusOut); } /************************************************************************ * VarUI2FromI2 (OLEAUT32.258) * * Convert a VT_I2 to a VT_UI2. * * PARAMS * sIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromI216(SHORT sIn, USHORT* pusOut) { return _VarUI2FromI2(sIn, pusOut); } /************************************************************************ * VarUI2FromI4 (OLEAUT32.259) * * Convert a VT_I4 to a VT_UI2. * * PARAMS * iIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromI416(LONG iIn, USHORT* pusOut) { return _VarUI2FromI4(iIn, pusOut); } /************************************************************************ * VarUI2FromR4 (OLEAUT32.260) * * Convert a VT_R4 to a VT_UI2. * * PARAMS * fltIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromR416(FLOAT fltIn, USHORT* pusOut) { return VarUI2FromR8(fltIn, pusOut); } /************************************************************************ * VarUI2FromR8 (OLEAUT32.261) * * Convert a VT_R8 to a VT_UI2. * * PARAMS * dblIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * See VarI8FromR8() for details concerning rounding. */ HRESULT WINAPI VarUI2FromR816(double dblIn, USHORT* pusOut) { if (dblIn < -0.5 || dblIn >= UI2_MAX + 0.5) return DISP_E_OVERFLOW; VARIANT_DutchRound(USHORT, dblIn, *pusOut); return S_OK; } /************************************************************************ * VarUI2FromDate (OLEAUT32.262) * * Convert a VT_DATE to a VT_UI2. * * PARAMS * dateIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromDate16(DATE dateIn, USHORT* pusOut) { return VarUI2FromR8(dateIn, pusOut); } /************************************************************************ * VarUI2FromCy (OLEAUT32.263) * * Convert a VT_CY to a VT_UI2. * * PARAMS * cyIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * Negative values >= -5000 will be converted to 0. */ HRESULT WINAPI VarUI2FromCy16(CY cyIn, USHORT* pusOut) { ULONG i = UI2_MAX + 1; VarUI4FromCy(cyIn, &i); return _VarUI2FromUI4(i, pusOut); } /************************************************************************ * VarUI2FromStr (OLEAUT32.264) * * Convert a VT_BSTR to a VT_UI2. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI2FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, USHORT* pusOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pusOut, VT_UI2); } /************************************************************************ * VarUI2FromDisp (OLEAUT32.265) * * Convert a VT_DISPATCH to a VT_UI2. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI2FromDisp16(SEGIDispatch pdispIn, LCID lcid, USHORT* pusOut) { return VARIANT_FromDisp(pdispIn, lcid, pusOut, VT_UI2, 0); } /************************************************************************ * VarUI2FromBool (OLEAUT32.266) * * Convert a VT_BOOL to a VT_UI2. * * PARAMS * boolIn [I] Source * pusOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI2FromBool16(VARIANT_BOOL boolIn, USHORT* pusOut) { return _VarUI2FromBool(boolIn, pusOut); } /************************************************************************ * VarUI2FromI1 (OLEAUT32.267) * * Convert a VT_I1 to a VT_UI2. * * PARAMS * cIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromI116(signed char cIn, USHORT* pusOut) { return _VarUI2FromI1(cIn, pusOut); } /************************************************************************ * VarUI2FromUI4 (OLEAUT32.268) * * Convert a VT_UI4 to a VT_UI2. * * PARAMS * ulIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromUI416(ULONG ulIn, USHORT* pusOut) { return _VarUI2FromUI4(ulIn, pusOut); } /************************************************************************ * VarUI2FromDec (OLEAUT32.269) * * Convert a VT_DECIMAL to a VT_UI2. * * PARAMS * pDecIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromDec16(DECIMAL *pdecIn, USHORT* pusOut) { LONG64 i64; HRESULT hRet; hRet = VarI8FromDec(pdecIn, &i64); if (SUCCEEDED(hRet)) hRet = _VarUI2FromI8(i64, pusOut); return hRet; } /************************************************************************ * VarUI2FromI8 (OLEAUT32.378) * * Convert a VT_I8 to a VT_UI2. * * PARAMS * llIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromI816(LONG64 llIn, USHORT* pusOut) { return _VarUI2FromI8(llIn, pusOut); } /************************************************************************ * VarUI2FromUI8 (OLEAUT32.379) * * Convert a VT_UI8 to a VT_UI2. * * PARAMS * ullIn [I] Source * pusOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI2FromUI816(ULONG64 ullIn, USHORT* pusOut) { return _VarUI2FromUI8(ullIn, pusOut); } /* I4 */ /************************************************************************ * VarI4FromUI1 (OLEAUT32.58) * * Convert a VT_UI1 to a VT_I4. * * PARAMS * bIn [I] Source * piOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI4FromUI116(BYTE bIn, LONG *piOut) { return _VarI4FromUI1(bIn, piOut); } /************************************************************************ * VarI4FromI2 (OLEAUT32.59) * * Convert a VT_I2 to a VT_I4. * * PARAMS * sIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI4FromI216(SHORT sIn, LONG *piOut) { return _VarI4FromI2(sIn, piOut); } /************************************************************************ * VarI4FromR4 (OLEAUT32.60) * * Convert a VT_R4 to a VT_I4. * * PARAMS * fltIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI4FromR416(FLOAT fltIn, LONG *piOut) { return VarI4FromR8(fltIn, piOut); } /************************************************************************ * VarI4FromR8 (OLEAUT32.61) * * Convert a VT_R8 to a VT_I4. * * PARAMS * dblIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * See VarI8FromR8() for details concerning rounding. */ HRESULT WINAPI VarI4FromR816(double dblIn, LONG *piOut) { if (dblIn < I4_MIN - 0.5 || dblIn >= I4_MAX + 0.5) return DISP_E_OVERFLOW; VARIANT_DutchRound(LONG, dblIn, *piOut); return S_OK; } /************************************************************************ * VarI4FromCy (OLEAUT32.62) * * Convert a VT_CY to a VT_I4. * * PARAMS * cyIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI4FromCy16(CY cyIn, LONG *piOut) { double d = cyIn.int64 / CY_MULTIPLIER_F; return VarI4FromR8(d, piOut); } /************************************************************************ * VarI4FromDate (OLEAUT32.63) * * Convert a VT_DATE to a VT_I4. * * PARAMS * dateIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI4FromDate16(DATE dateIn, LONG *piOut) { return VarI4FromR8(dateIn, piOut); } /************************************************************************ * VarI4FromStr (OLEAUT32.64) * * Convert a VT_BSTR to a VT_I4. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if any parameter is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if strIn cannot be converted */ HRESULT WINAPI VarI4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, LONG *piOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, piOut, VT_I4); } /************************************************************************ * VarI4FromDisp (OLEAUT32.65) * * Convert a VT_DISPATCH to a VT_I4. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI4FromDisp16(SEGIDispatch pdispIn, LCID lcid, LONG *piOut) { return VARIANT_FromDisp(pdispIn, lcid, piOut, VT_I4, 0); } /************************************************************************ * VarI4FromBool (OLEAUT32.66) * * Convert a VT_BOOL to a VT_I4. * * PARAMS * boolIn [I] Source * piOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI4FromBool16(VARIANT_BOOL boolIn, LONG *piOut) { return _VarI4FromBool(boolIn, piOut); } /************************************************************************ * VarI4FromI1 (OLEAUT32.209) * * Convert a VT_I1 to a VT_I4. * * PARAMS * cIn [I] Source * piOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI4FromI116(signed char cIn, LONG *piOut) { return _VarI4FromI1(cIn, piOut); } /************************************************************************ * VarI4FromUI2 (OLEAUT32.210) * * Convert a VT_UI2 to a VT_I4. * * PARAMS * usIn [I] Source * piOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI4FromUI216(USHORT usIn, LONG *piOut) { return _VarI4FromUI2(usIn, piOut); } /************************************************************************ * VarI4FromUI4 (OLEAUT32.211) * * Convert a VT_UI4 to a VT_I4. * * PARAMS * ulIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI4FromUI416(ULONG ulIn, LONG *piOut) { return _VarI4FromUI4(ulIn, piOut); } /************************************************************************ * VarI4FromDec (OLEAUT32.212) * * Convert a VT_DECIMAL to a VT_I4. * * PARAMS * pDecIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pdecIn is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI4FromDec16(DECIMAL *pdecIn, LONG *piOut) { LONG64 i64; HRESULT hRet; hRet = VarI8FromDec(pdecIn, &i64); if (SUCCEEDED(hRet)) hRet = _VarI4FromI8(i64, piOut); return hRet; } /************************************************************************ * VarI4FromI8 (OLEAUT32.348) * * Convert a VT_I8 to a VT_I4. * * PARAMS * llIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI4FromI816(LONG64 llIn, LONG *piOut) { return _VarI4FromI8(llIn, piOut); } /************************************************************************ * VarI4FromUI8 (OLEAUT32.349) * * Convert a VT_UI8 to a VT_I4. * * PARAMS * ullIn [I] Source * piOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI4FromUI816(ULONG64 ullIn, LONG *piOut) { return _VarI4FromUI8(ullIn, piOut); } /* UI4 */ /************************************************************************ * VarUI4FromUI1 (OLEAUT32.270) * * Convert a VT_UI1 to a VT_UI4. * * PARAMS * bIn [I] Source * pulOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI4FromUI116(BYTE bIn, ULONG *pulOut) { return _VarUI4FromUI1(bIn, pulOut); } /************************************************************************ * VarUI4FromI2 (OLEAUT32.271) * * Convert a VT_I2 to a VT_UI4. * * PARAMS * sIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromI216(SHORT sIn, ULONG *pulOut) { return _VarUI4FromI2(sIn, pulOut); } /************************************************************************ * VarUI4FromI4 (OLEAUT32.272) * * Convert a VT_I4 to a VT_UI4. * * PARAMS * iIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromI416(LONG iIn, ULONG *pulOut) { return _VarUI4FromI4(iIn, pulOut); } /************************************************************************ * VarUI4FromR4 (OLEAUT32.273) * * Convert a VT_R4 to a VT_UI4. * * PARAMS * fltIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromR416(FLOAT fltIn, ULONG *pulOut) { return VarUI4FromR8(fltIn, pulOut); } /************************************************************************ * VarUI4FromR8 (OLEAUT32.274) * * Convert a VT_R8 to a VT_UI4. * * PARAMS * dblIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * See VarI8FromR8() for details concerning rounding. */ HRESULT WINAPI VarUI4FromR816(double dblIn, ULONG *pulOut) { fix_double(&dblIn); if (dblIn < -0.5 || dblIn >= UI4_MAX + 0.5) return DISP_E_OVERFLOW; VARIANT_DutchRound(ULONG, dblIn, *pulOut); return S_OK; } /************************************************************************ * VarUI4FromDate (OLEAUT32.275) * * Convert a VT_DATE to a VT_UI4. * * PARAMS * dateIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromDate16(DATE dateIn, ULONG *pulOut) { return VarUI4FromR816(dateIn, pulOut); } /************************************************************************ * VarUI4FromCy (OLEAUT32.276) * * Convert a VT_CY to a VT_UI4. * * PARAMS * cyIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromCy16(CY cyIn, ULONG *pulOut) { double d = cyIn.int64 / CY_MULTIPLIER_F; return VarUI4FromR816(d, pulOut); } /************************************************************************ * VarUI4FromStr (OLEAUT32.277) * * Convert a VT_BSTR to a VT_UI4. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if any parameter is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if strIn cannot be converted */ HRESULT WINAPI VarUI4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, ULONG *pulOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pulOut, VT_UI4); } /************************************************************************ * VarUI4FromDisp (OLEAUT32.278) * * Convert a VT_DISPATCH to a VT_UI4. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI4FromDisp16(SEGIDispatch pdispIn, LCID lcid, ULONG *pulOut) { return VARIANT_FromDisp(pdispIn, lcid, pulOut, VT_UI4, 0); } /************************************************************************ * VarUI4FromBool (OLEAUT32.279) * * Convert a VT_BOOL to a VT_UI4. * * PARAMS * boolIn [I] Source * pulOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI4FromBool16(VARIANT_BOOL boolIn, ULONG *pulOut) { return _VarUI4FromBool(boolIn, pulOut); } /************************************************************************ * VarUI4FromI1 (OLEAUT32.280) * * Convert a VT_I1 to a VT_UI4. * * PARAMS * cIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromI116(signed char cIn, ULONG *pulOut) { return _VarUI4FromI1(cIn, pulOut); } /************************************************************************ * VarUI4FromUI2 (OLEAUT32.281) * * Convert a VT_UI2 to a VT_UI4. * * PARAMS * usIn [I] Source * pulOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI4FromUI216(USHORT usIn, ULONG *pulOut) { return _VarUI4FromUI2(usIn, pulOut); } /************************************************************************ * VarUI4FromDec (OLEAUT32.282) * * Convert a VT_DECIMAL to a VT_UI4. * * PARAMS * pDecIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pdecIn is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromDec16(DECIMAL *pdecIn, ULONG *pulOut) { LONG64 i64; HRESULT hRet; hRet = VarI8FromDec(pdecIn, &i64); if (SUCCEEDED(hRet)) hRet = _VarUI4FromI8(i64, pulOut); return hRet; } /************************************************************************ * VarUI4FromI8 (OLEAUT32.425) * * Convert a VT_I8 to a VT_UI4. * * PARAMS * llIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromI816(LONG64 llIn, ULONG *pulOut) { return _VarUI4FromI8(llIn, pulOut); } /************************************************************************ * VarUI4FromUI8 (OLEAUT32.426) * * Convert a VT_UI8 to a VT_UI4. * * PARAMS * ullIn [I] Source * pulOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI4FromUI816(ULONG64 ullIn, ULONG *pulOut) { return _VarUI4FromUI8(ullIn, pulOut); } /* I8 */ /************************************************************************ * VarI8FromUI1 (OLEAUT32.333) * * Convert a VT_UI1 to a VT_I8. * * PARAMS * bIn [I] Source * pi64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI8FromUI116(BYTE bIn, LONG64* pi64Out) { return _VarI8FromUI1(bIn, pi64Out); } /************************************************************************ * VarI8FromI2 (OLEAUT32.334) * * Convert a VT_I2 to a VT_I8. * * PARAMS * sIn [I] Source * pi64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI8FromI216(SHORT sIn, LONG64* pi64Out) { return _VarI8FromI2(sIn, pi64Out); } /************************************************************************ * VarI8FromR4 (OLEAUT32.335) * * Convert a VT_R4 to a VT_I8. * * PARAMS * fltIn [I] Source * pi64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI8FromR416(FLOAT fltIn, LONG64* pi64Out) { return VarI8FromR8(fltIn, pi64Out); } /************************************************************************ * VarI8FromR8 (OLEAUT32.336) * * Convert a VT_R8 to a VT_I8. * * PARAMS * dblIn [I] Source * pi64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * Only values that fit into 63 bits are accepted. Due to rounding issues, * very high or low values will not be accurately converted. * * Numbers are rounded using Dutch rounding, as follows: * *| Fractional Part Sign Direction Example *| --------------- ---- --------- ------- *| < 0.5 + Down 0.4 -> 0.0 *| < 0.5 - Up -0.4 -> 0.0 *| > 0.5 + Up 0.6 -> 1.0 *| < 0.5 - Up -0.6 -> -1.0 *| = 0.5 + Up/Down Down if even, Up if odd *| = 0.5 - Up/Down Up if even, Down if odd * * This system is often used in supermarkets. */ HRESULT WINAPI VarI8FromR816(double dblIn, LONG64* pi64Out) { if ( dblIn < -4611686018427387904.0 || dblIn >= 4611686018427387904.0) return DISP_E_OVERFLOW; VARIANT_DutchRound(LONG64, dblIn, *pi64Out); return S_OK; } /************************************************************************ * VarI8FromCy (OLEAUT32.337) * * Convert a VT_CY to a VT_I8. * * PARAMS * cyIn [I] Source * pi64Out [O] Destination * * RETURNS * S_OK. * * NOTES * All negative numbers are rounded down by 1, including those that are * evenly divisible by 10000 (this is a Win32 bug that Wine mimics). * Positive numbers are rounded using Dutch rounding: See VarI8FromR8() * for details. */ HRESULT WINAPI VarI8FromCy16(CY cyIn, LONG64* pi64Out) { *pi64Out = cyIn.int64 / CY_MULTIPLIER; if (cyIn.int64 < 0) (*pi64Out)--; /* Mimic Win32 bug */ else { cyIn.int64 -= *pi64Out * CY_MULTIPLIER; /* cyIn.s.Lo now holds fractional remainder */ if (cyIn.s.Lo > CY_HALF || (cyIn.s.Lo == CY_HALF && (*pi64Out & 0x1))) (*pi64Out)++; } return S_OK; } /************************************************************************ * VarI8FromDate (OLEAUT32.338) * * Convert a VT_DATE to a VT_I8. * * PARAMS * dateIn [I] Source * pi64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI8FromDate16(DATE dateIn, LONG64* pi64Out) { return VarI8FromR8(dateIn, pi64Out); } /************************************************************************ * VarI8FromStr (OLEAUT32.339) * * Convert a VT_BSTR to a VT_I8. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pi64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, LONG64* pi64Out) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pi64Out, VT_I8); } /************************************************************************ * VarI8FromDisp (OLEAUT32.340) * * Convert a VT_DISPATCH to a VT_I8. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pi64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarI8FromDisp16(SEGIDispatch pdispIn, LCID lcid, LONG64* pi64Out) { return VARIANT_FromDisp(pdispIn, lcid, pi64Out, VT_I8, 0); } /************************************************************************ * VarI8FromBool (OLEAUT32.341) * * Convert a VT_BOOL to a VT_I8. * * PARAMS * boolIn [I] Source * pi64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI8FromBool16(VARIANT_BOOL boolIn, LONG64* pi64Out) { return VarI8FromI2(boolIn, pi64Out); } /************************************************************************ * VarI8FromI1 (OLEAUT32.342) * * Convert a VT_I1 to a VT_I8. * * PARAMS * cIn [I] Source * pi64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI8FromI116(signed char cIn, LONG64* pi64Out) { return _VarI8FromI1(cIn, pi64Out); } /************************************************************************ * VarI8FromUI2 (OLEAUT32.343) * * Convert a VT_UI2 to a VT_I8. * * PARAMS * usIn [I] Source * pi64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI8FromUI216(USHORT usIn, LONG64* pi64Out) { return _VarI8FromUI2(usIn, pi64Out); } /************************************************************************ * VarI8FromUI4 (OLEAUT32.344) * * Convert a VT_UI4 to a VT_I8. * * PARAMS * ulIn [I] Source * pi64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarI8FromUI416(ULONG ulIn, LONG64* pi64Out) { return _VarI8FromUI4(ulIn, pi64Out); } #ifdef AVAIL_32BIT_VAR /************************************************************************ * VarI8FromDec (OLEAUT32.345) * * Convert a VT_DECIMAL to a VT_I8. * * PARAMS * pDecIn [I] Source * pi64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI8FromDec16(DECIMAL *pdecIn, LONG64* pi64Out) { if (!DEC_SCALE(pdecIn)) { /* This decimal is just a 96 bit integer */ if (DEC_SIGN(pdecIn) & ~DECIMAL_NEG) return E_INVALIDARG; if (DEC_HI32(pdecIn) || DEC_MID32(pdecIn) & 0x80000000) return DISP_E_OVERFLOW; if (DEC_SIGN(pdecIn)) *pi64Out = -DEC_LO64(pdecIn); else *pi64Out = DEC_LO64(pdecIn); return S_OK; } else { /* Decimal contains a floating point number */ HRESULT hRet; double dbl; hRet = VarR8FromDec(pdecIn, &dbl); if (SUCCEEDED(hRet)) hRet = VarI8FromR8(dbl, pi64Out); return hRet; } } #endif /************************************************************************ * VarI8FromUI8 (OLEAUT32.427) * * Convert a VT_UI8 to a VT_I8. * * PARAMS * ullIn [I] Source * pi64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarI8FromUI816(ULONG64 ullIn, LONG64* pi64Out) { return _VarI8FromUI8(ullIn, pi64Out); } /* UI8 */ /************************************************************************ * VarUI8FromI8 (OLEAUT32.428) * * Convert a VT_I8 to a VT_UI8. * * PARAMS * ulIn [I] Source * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI8FromI816(LONG64 llIn, ULONG64* pui64Out) { return _VarUI8FromI8(llIn, pui64Out); } /************************************************************************ * VarUI8FromUI1 (OLEAUT32.429) * * Convert a VT_UI1 to a VT_UI8. * * PARAMS * bIn [I] Source * pui64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI8FromUI116(BYTE bIn, ULONG64* pui64Out) { return _VarUI8FromUI1(bIn, pui64Out); } /************************************************************************ * VarUI8FromI2 (OLEAUT32.430) * * Convert a VT_I2 to a VT_UI8. * * PARAMS * sIn [I] Source * pui64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI8FromI216(SHORT sIn, ULONG64* pui64Out) { return _VarUI8FromI2(sIn, pui64Out); } /************************************************************************ * VarUI8FromR4 (OLEAUT32.431) * * Convert a VT_R4 to a VT_UI8. * * PARAMS * fltIn [I] Source * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI8FromR416(FLOAT fltIn, ULONG64* pui64Out) { return VarUI8FromR8(fltIn, pui64Out); } /************************************************************************ * VarUI8FromR8 (OLEAUT32.432) * * Convert a VT_R8 to a VT_UI8. * * PARAMS * dblIn [I] Source * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * See VarI8FromR8() for details concerning rounding. */ HRESULT WINAPI VarUI8FromR816(double dblIn, ULONG64* pui64Out) { if (dblIn < -0.5 || dblIn > 1.844674407370955e19) return DISP_E_OVERFLOW; VARIANT_DutchRound(ULONG64, dblIn, *pui64Out); return S_OK; } /************************************************************************ * VarUI8FromCy (OLEAUT32.433) * * Convert a VT_CY to a VT_UI8. * * PARAMS * cyIn [I] Source * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * Negative values >= -5000 will be converted to 0. */ HRESULT WINAPI VarUI8FromCy16(CY cyIn, ULONG64* pui64Out) { if (cyIn.int64 < 0) { if (cyIn.int64 < -CY_HALF) return DISP_E_OVERFLOW; *pui64Out = 0; } else { *pui64Out = cyIn.int64 / CY_MULTIPLIER; cyIn.int64 -= *pui64Out * CY_MULTIPLIER; /* cyIn.s.Lo now holds fractional remainder */ if (cyIn.s.Lo > CY_HALF || (cyIn.s.Lo == CY_HALF && (*pui64Out & 0x1))) (*pui64Out)++; } return S_OK; } /************************************************************************ * VarUI8FromDate (OLEAUT32.434) * * Convert a VT_DATE to a VT_UI8. * * PARAMS * dateIn [I] Source * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI8FromDate16(DATE dateIn, ULONG64* pui64Out) { return VarUI8FromR8(dateIn, pui64Out); } /************************************************************************ * VarUI8FromStr (OLEAUT32.435) * * Convert a VT_BSTR to a VT_UI8. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, ULONG64* pui64Out) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pui64Out, VT_UI8); } /************************************************************************ * VarUI8FromDisp (OLEAUT32.436) * * Convert a VT_DISPATCH to a VT_UI8. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarUI8FromDisp16(SEGIDispatch pdispIn, LCID lcid, ULONG64* pui64Out) { return VARIANT_FromDisp(pdispIn, lcid, pui64Out, VT_UI8, 0); } /************************************************************************ * VarUI8FromBool (OLEAUT32.437) * * Convert a VT_BOOL to a VT_UI8. * * PARAMS * boolIn [I] Source * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI8FromBool16(VARIANT_BOOL boolIn, ULONG64* pui64Out) { return VarI8FromI2(boolIn, (LONG64 *)pui64Out); } /************************************************************************ * VarUI8FromI1 (OLEAUT32.438) * * Convert a VT_I1 to a VT_UI8. * * PARAMS * cIn [I] Source * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarUI8FromI116(signed char cIn, ULONG64* pui64Out) { return _VarUI8FromI1(cIn, pui64Out); } /************************************************************************ * VarUI8FromUI2 (OLEAUT32.439) * * Convert a VT_UI2 to a VT_UI8. * * PARAMS * usIn [I] Source * pui64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI8FromUI216(USHORT usIn, ULONG64* pui64Out) { return _VarUI8FromUI2(usIn, pui64Out); } /************************************************************************ * VarUI8FromUI4 (OLEAUT32.440) * * Convert a VT_UI4 to a VT_UI8. * * PARAMS * ulIn [I] Source * pui64Out [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarUI8FromUI416(ULONG ulIn, ULONG64* pui64Out) { return _VarUI8FromUI4(ulIn, pui64Out); } #ifdef AVAIL_32BIT_VAR /************************************************************************ * VarUI8FromDec (OLEAUT32.441) * * Convert a VT_DECIMAL to a VT_UI8. * * PARAMS * pDecIn [I] Source * pui64Out [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * Under native Win32, if the source value has a scale of 0, its sign is * ignored, i.e. this function takes the absolute value rather than fail * with DISP_E_OVERFLOW. This bug has been fixed in Wine's implementation * (use VarAbs() on pDecIn first if you really want this behaviour). */ HRESULT WINAPI VarUI8FromDec16(DECIMAL *pdecIn, ULONG64* pui64Out) { if (!DEC_SCALE(pdecIn)) { /* This decimal is just a 96 bit integer */ if (DEC_SIGN(pdecIn) & ~DECIMAL_NEG) return E_INVALIDARG; if (DEC_HI32(pdecIn)) return DISP_E_OVERFLOW; if (DEC_SIGN(pdecIn)) { WARN("Sign would be ignored under Win32!\n"); return DISP_E_OVERFLOW; } *pui64Out = DEC_LO64(pdecIn); return S_OK; } else { /* Decimal contains a floating point number */ HRESULT hRet; double dbl; hRet = VarR8FromDec(pdecIn, &dbl); if (SUCCEEDED(hRet)) hRet = VarUI8FromR8(dbl, pui64Out); return hRet; } } #endif /* R4 */ /************************************************************************ * VarR4FromUI1 (OLEAUT32.68) * * Convert a VT_UI1 to a VT_R4. * * PARAMS * bIn [I] Source * pFltOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR4FromUI116(BYTE bIn, float *pFltOut) { return _VarR4FromUI1(bIn, pFltOut); } /************************************************************************ * VarR4FromI2 (OLEAUT32.69) * * Convert a VT_I2 to a VT_R4. * * PARAMS * sIn [I] Source * pFltOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR4FromI216(SHORT sIn, float *pFltOut) { return _VarR4FromI2(sIn, pFltOut); } /************************************************************************ * VarR4FromI4 (OLEAUT32.70) * * Convert a VT_I4 to a VT_R4. * * PARAMS * sIn [I] Source * pFltOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR4FromI416(LONG lIn, float *pFltOut) { return _VarR4FromI4(lIn, pFltOut); } /************************************************************************ * VarR4FromR8 (OLEAUT32.71) * * Convert a VT_R8 to a VT_R4. * * PARAMS * dblIn [I] Source * pFltOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination. */ HRESULT WINAPI VarR4FromR816_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarR4FromR816(*(double *)&dbl, pcOut); } HRESULT WINAPI VarR4FromR816(double dblIn, float *pFltOut) { double d = dblIn < 0.0 ? -dblIn : dblIn; if (d > R4_MAX) return DISP_E_OVERFLOW; *pFltOut = dblIn; return S_OK; } /************************************************************************ * VarR4FromCy (OLEAUT32.72) * * Convert a VT_CY to a VT_R4. * * PARAMS * cyIn [I] Source * pFltOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR4FromCy16(CY cyIn, float *pFltOut) { *pFltOut = (double)cyIn.int64 / CY_MULTIPLIER_F; return S_OK; } /************************************************************************ * VarR4FromDate (OLEAUT32.73) * * Convert a VT_DATE to a VT_R4. * * PARAMS * dateIn [I] Source * pFltOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination. */ HRESULT WINAPI VarR4FromDate16(DATE dateIn, float *pFltOut) { return VarR4FromR8(dateIn, pFltOut); } /************************************************************************ * VarR4FromStr (OLEAUT32.74) * * Convert a VT_BSTR to a VT_R4. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pFltOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if strIn or pFltOut is invalid. * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, float *pFltOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pFltOut, VT_R4); } /************************************************************************ * VarR4FromDisp (OLEAUT32.75) * * Convert a VT_DISPATCH to a VT_R4. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pFltOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR4FromDisp16(SEGIDispatch pdispIn, LCID lcid, float *pFltOut) { return VARIANT_FromDisp(pdispIn, lcid, pFltOut, VT_R4, 0); } /************************************************************************ * VarR4FromBool (OLEAUT32.76) * * Convert a VT_BOOL to a VT_R4. * * PARAMS * boolIn [I] Source * pFltOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR4FromBool16(VARIANT_BOOL boolIn, float *pFltOut) { return VarR4FromI2(boolIn, pFltOut); } /************************************************************************ * VarR4FromI1 (OLEAUT32.213) * * Convert a VT_I1 to a VT_R4. * * PARAMS * cIn [I] Source * pFltOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR4FromI116(signed char cIn, float *pFltOut) { return _VarR4FromI1(cIn, pFltOut); } /************************************************************************ * VarR4FromUI2 (OLEAUT32.214) * * Convert a VT_UI2 to a VT_R4. * * PARAMS * usIn [I] Source * pFltOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR4FromUI216(USHORT usIn, float *pFltOut) { return _VarR4FromUI2(usIn, pFltOut); } /************************************************************************ * VarR4FromUI4 (OLEAUT32.215) * * Convert a VT_UI4 to a VT_R4. * * PARAMS * ulIn [I] Source * pFltOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR4FromUI416(ULONG ulIn, float *pFltOut) { return _VarR4FromUI4(ulIn, pFltOut); } #ifdef AVAIL_32BIT_VAR /************************************************************************ * VarR4FromDec (OLEAUT32.216) * * Convert a VT_DECIMAL to a VT_R4. * * PARAMS * pDecIn [I] Source * pFltOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid. */ HRESULT WINAPI VarR4FromDec16(DECIMAL* pDecIn, float *pFltOut) { BYTE scale = DEC_SCALE(pDecIn); double divisor = 1.0; double highPart; if (scale > DEC_MAX_SCALE || DEC_SIGN(pDecIn) & ~DECIMAL_NEG) return E_INVALIDARG; while (scale--) divisor *= 10.0; if (DEC_SIGN(pDecIn)) divisor = -divisor; if (DEC_HI32(pDecIn)) { highPart = (double)DEC_HI32(pDecIn) / divisor; highPart *= 4294967296.0F; highPart *= 4294967296.0F; } else highPart = 0.0; *pFltOut = (double)DEC_LO64(pDecIn) / divisor + highPart; return S_OK; } #endif /************************************************************************ * VarR4FromI8 (OLEAUT32.360) * * Convert a VT_I8 to a VT_R4. * * PARAMS * ullIn [I] Source * pFltOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR4FromI816(LONG64 llIn, float *pFltOut) { return _VarR4FromI8(llIn, pFltOut); } /************************************************************************ * VarR4FromUI8 (OLEAUT32.361) * * Convert a VT_UI8 to a VT_R4. * * PARAMS * ullIn [I] Source * pFltOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR4FromUI816(ULONG64 ullIn, float *pFltOut) { return _VarR4FromUI8(ullIn, pFltOut); } /************************************************************************ * VarR4CmpR8 (OLEAUT32.316) * * Compare a VT_R4 to a VT_R8. * * PARAMS * fltLeft [I] Source * dblRight [I] Value to compare * * RETURNS * VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that fltLeft is less than, * equal to or greater than dblRight respectively. */ HRESULT WINAPI VarR4CmpR816(float fltLeft, double dblRight) { if (fltLeft < dblRight) return VARCMP_LT; else if (fltLeft > dblRight) return VARCMP_GT; return VARCMP_EQ; } /* R8 */ /************************************************************************ * VarR8FromUI1 (OLEAUT32.78) * * Convert a VT_UI1 to a VT_R8. * * PARAMS * bIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromUI116(BYTE bIn, double *pDblOut) { return _VarR8FromUI1(bIn, pDblOut); } /************************************************************************ * VarR8FromI2 (OLEAUT32.79) * * Convert a VT_I2 to a VT_R8. * * PARAMS * sIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromI216(SHORT sIn, double *pDblOut) { return _VarR8FromI2(sIn, pDblOut); } /************************************************************************ * VarR8FromI4 (OLEAUT32.80) * * Convert a VT_I4 to a VT_R8. * * PARAMS * sIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromI416(LONG lIn, double *pDblOut) { return _VarR8FromI4(lIn, pDblOut); } /************************************************************************ * VarR8FromR4 (OLEAUT32.81) * * Convert a VT_R4 to a VT_R8. * * PARAMS * fltIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromR416(FLOAT fltIn, double *pDblOut) { return _VarR8FromR4(fltIn, pDblOut); } /************************************************************************ * VarR8FromCy (OLEAUT32.82) * * Convert a VT_CY to a VT_R8. * * PARAMS * cyIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromCy16(CY cyIn, double *pDblOut) { return _VarR8FromCy(cyIn, pDblOut); } /************************************************************************ * VarR8FromDate (OLEAUT32.83) * * Convert a VT_DATE to a VT_R8. * * PARAMS * dateIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromDate16(DATE dateIn, double *pDblOut) { return _VarR8FromDate(dateIn, pDblOut); } /************************************************************************ * VarR8FromStr (OLEAUT32.84) * * Convert a VT_BSTR to a VT_R8. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pDblOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if strIn or pDblOut is invalid. * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, double *pDblOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pDblOut, VT_R8); } /************************************************************************ * VarR8FromDisp (OLEAUT32.85) * * Convert a VT_DISPATCH to a VT_R8. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pDblOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR8FromDisp16(SEGIDispatch pdispIn, LCID lcid, double *pDblOut) { return VARIANT_FromDisp(pdispIn, lcid, pDblOut, VT_R8, 0); } /************************************************************************ * VarR8FromBool (OLEAUT32.86) * * Convert a VT_BOOL to a VT_R8. * * PARAMS * boolIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromBool16(VARIANT_BOOL boolIn, double *pDblOut) { return VarR8FromI2(boolIn, pDblOut); } /************************************************************************ * VarR8FromI1 (OLEAUT32.217) * * Convert a VT_I1 to a VT_R8. * * PARAMS * cIn [I] Source * pDblOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR8FromI116(signed char cIn, double *pDblOut) { return _VarR8FromI1(cIn, pDblOut); } /************************************************************************ * VarR8FromUI2 (OLEAUT32.218) * * Convert a VT_UI2 to a VT_R8. * * PARAMS * usIn [I] Source * pDblOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR8FromUI216(USHORT usIn, double *pDblOut) { return _VarR8FromUI2(usIn, pDblOut); } /************************************************************************ * VarR8FromUI4 (OLEAUT32.219) * * Convert a VT_UI4 to a VT_R8. * * PARAMS * ulIn [I] Source * pDblOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarR8FromUI416(ULONG ulIn, double *pDblOut) { return _VarR8FromUI4(ulIn, pDblOut); } #ifdef AVAIL_32BIT_VAR /************************************************************************ * VarR8FromDec (OLEAUT32.220) * * Convert a VT_DECIMAL to a VT_R8. * * PARAMS * pDecIn [I] Source * pDblOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid. */ HRESULT WINAPI VarR8FromDec16(const DECIMAL* pDecIn, double *pDblOut) { BYTE scale = DEC_SCALE(pDecIn); double divisor = 1.0, highPart; if (scale > DEC_MAX_SCALE || DEC_SIGN(pDecIn) & ~DECIMAL_NEG) return E_INVALIDARG; while (scale--) divisor *= 10; if (DEC_SIGN(pDecIn)) divisor = -divisor; if (DEC_HI32(pDecIn)) { highPart = (double)DEC_HI32(pDecIn) / divisor; highPart *= 4294967296.0F; highPart *= 4294967296.0F; } else highPart = 0.0; *pDblOut = (double)DEC_LO64(pDecIn) / divisor + highPart; return S_OK; } #endif /************************************************************************ * VarR8FromI8 (OLEAUT32.362) * * Convert a VT_I8 to a VT_R8. * * PARAMS * ullIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromI816(LONG64 llIn, double *pDblOut) { return _VarR8FromI8(llIn, pDblOut); } /************************************************************************ * VarR8FromUI8 (OLEAUT32.363) * * Convert a VT_UI8 to a VT_R8. * * PARAMS * ullIn [I] Source * pDblOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarR8FromUI816(ULONG64 ullIn, double *pDblOut) { return _VarR8FromUI8(ullIn, pDblOut); } /************************************************************************ * VarR8Pow (OLEAUT32.315) * * Raise a VT_R8 to a power. * * PARAMS * dblLeft [I] Source * dblPow [I] Power to raise dblLeft by * pDblOut [O] Destination * * RETURNS * S_OK. pDblOut contains dblLeft to the power of dblRight. */ HRESULT WINAPI VarR8Pow16(double dblLeft, double dblPow, double *pDblOut) { *pDblOut = pow(dblLeft, dblPow); return S_OK; } /************************************************************************ * VarR8Round (OLEAUT32.317) * * Round a VT_R8 to a given number of decimal points. * * PARAMS * dblIn [I] Source * nDig [I] Number of decimal points to round to * pDblOut [O] Destination for rounded number * * RETURNS * Success: S_OK. pDblOut is rounded to nDig digits. * Failure: E_INVALIDARG, if cDecimals is less than 0. * * NOTES * The native version of this function rounds using the internal * binary representation of the number. Wine uses the dutch rounding * convention, so therefore small differences can occur in the value returned. * MSDN says that you should use your own rounding function if you want * rounding to be predictable in your application. */ HRESULT WINAPI VarR8Round16(double dblIn, int nDig, double *pDblOut) { double scale, whole, fract; if (nDig < 0) return E_INVALIDARG; scale = pow(10.0, nDig); dblIn *= scale; whole = dblIn < 0 ? ceil(dblIn) : floor(dblIn); fract = dblIn - whole; if (fract > 0.5) dblIn = whole + 1.0; else if (fract == 0.5) dblIn = whole + fmod(whole, 2.0); else if (fract >= 0.0) dblIn = whole; else if (fract == -0.5) dblIn = whole - fmod(whole, 2.0); else if (fract > -0.5) dblIn = whole; else dblIn = whole - 1.0; *pDblOut = dblIn / scale; return S_OK; } /* CY */ /* Powers of 10 from 0..4 D.P. */ static const int CY_Divisors[5] = { CY_MULTIPLIER/10000, CY_MULTIPLIER/1000, CY_MULTIPLIER/100, CY_MULTIPLIER/10, CY_MULTIPLIER }; /************************************************************************ * VarCyFromUI1 (OLEAUT32.98) * * Convert a VT_UI1 to a VT_CY. * * PARAMS * bIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromUI116(BYTE bIn, CY* pCyOut) { pCyOut->int64 = (ULONG64)bIn * CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyFromI2 (OLEAUT32.99) * * Convert a VT_I2 to a VT_CY. * * PARAMS * sIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromI216(SHORT sIn, CY* pCyOut) { pCyOut->int64 = (LONG64)sIn * CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyFromI4 (OLEAUT32.100) * * Convert a VT_I4 to a VT_CY. * * PARAMS * sIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromI416(LONG lIn, CY* pCyOut) { pCyOut->int64 = (LONG64)lIn * CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyFromR4 (OLEAUT32.101) * * Convert a VT_R4 to a VT_CY. * * PARAMS * fltIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromR416(FLOAT fltIn, CY* pCyOut) { return VarCyFromR8(fltIn, pCyOut); } /************************************************************************ * VarCyFromR8 (OLEAUT32.102) * * Convert a VT_R8 to a VT_CY. * * PARAMS * dblIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromR816(double dblIn, CY* pCyOut) { #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) /* This code gives identical results to Win32 on Intel. * Here we use fp exceptions to catch overflows when storing the value. */ static const unsigned short r8_fpcontrol = 0x137f; static const double r8_multiplier = CY_MULTIPLIER_F; unsigned short old_fpcontrol, result_fpstatus; /* Clear exceptions, save the old fp state and load the new state */ __asm__ __volatile__( "fnclex" ); __asm__ __volatile__( "fstcw %0" : "=m" (old_fpcontrol) : ); __asm__ __volatile__( "fldcw %0" : : "m" (r8_fpcontrol) ); /* Perform the conversion. */ __asm__ __volatile__( "fldl %0" : : "m" (dblIn) ); __asm__ __volatile__( "fmull %0" : : "m" (r8_multiplier) ); __asm__ __volatile__( "fistpll %0" : : "m" (*pCyOut) ); /* Save the resulting fp state, load the old state and clear exceptions */ __asm__ __volatile__( "fstsw %0" : "=m" (result_fpstatus) : ); __asm__ __volatile__( "fnclex" ); __asm__ __volatile__( "fldcw %0" : : "m" (old_fpcontrol) ); if (result_fpstatus & 0x9) /* Overflow | Invalid */ return DISP_E_OVERFLOW; #else /* This version produces slightly different results for boundary cases */ if (dblIn < -922337203685477.5807 || dblIn >= 922337203685477.5807) return DISP_E_OVERFLOW; dblIn *= CY_MULTIPLIER_F; VARIANT_DutchRound(LONG64, dblIn, pCyOut->int64); #endif return S_OK; } /************************************************************************ * VarCyFromDate (OLEAUT32.103) * * Convert a VT_DATE to a VT_CY. * * PARAMS * dateIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromDate16(DATE dateIn, CY* pCyOut) { return VarCyFromR8(dateIn, pCyOut); } /************************************************************************ * VarCyFromStr (OLEAUT32.104) * * Convert a VT_BSTR to a VT_CY. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, CY* pCyOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pCyOut, VT_CY); } /************************************************************************ * VarCyFromDisp (OLEAUT32.105) * * Convert a VT_DISPATCH to a VT_CY. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromDisp16(SEGIDispatch pdispIn, LCID lcid, CY* pCyOut) { return VARIANT_FromDisp(pdispIn, lcid, pCyOut, VT_CY, 0); } /************************************************************************ * VarCyFromBool (OLEAUT32.106) * * Convert a VT_BOOL to a VT_CY. * * PARAMS * boolIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted * * NOTES * While the sign of the boolean is stored in the currency, the value is * converted to either 0 or 1. */ HRESULT WINAPI VarCyFromBool16(VARIANT_BOOL boolIn, CY* pCyOut) { pCyOut->int64 = (LONG64)boolIn * CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyFromI1 (OLEAUT32.225) * * Convert a VT_I1 to a VT_CY. * * PARAMS * cIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromI116(signed char cIn, CY* pCyOut) { pCyOut->int64 = (LONG64)cIn * CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyFromUI2 (OLEAUT32.226) * * Convert a VT_UI2 to a VT_CY. * * PARAMS * usIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromUI216(USHORT usIn, CY* pCyOut) { pCyOut->int64 = (ULONG64)usIn * CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyFromUI4 (OLEAUT32.227) * * Convert a VT_UI4 to a VT_CY. * * PARAMS * ulIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromUI416(ULONG ulIn, CY* pCyOut) { pCyOut->int64 = (ULONG64)ulIn * CY_MULTIPLIER; return S_OK; } #ifdef AVAIL_32BIT_VAR /************************************************************************ * VarCyFromDec (OLEAUT32.228) * * Convert a VT_DECIMAL to a VT_CY. * * PARAMS * pdecIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromDec16(DECIMAL* pdecIn, CY* pCyOut) { DECIMAL rounded; HRESULT hRet; hRet = VarDecRound(pdecIn, 4, &rounded); if (SUCCEEDED(hRet)) { double d; if (DEC_HI32(&rounded)) return DISP_E_OVERFLOW; /* Note: Without the casts this promotes to int64 which loses precision */ d = (double)DEC_LO64(&rounded) / (double)CY_Divisors[DEC_SCALE(&rounded)]; if (DEC_SIGN(&rounded)) d = -d; return VarCyFromR8(d, pCyOut); } return hRet; } #endif /************************************************************************ * VarCyFromI8 (OLEAUT32.366) * * Convert a VT_I8 to a VT_CY. * * PARAMS * ullIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromI816(LONG64 llIn, CY* pCyOut) { if (llIn <= (I8_MIN/CY_MULTIPLIER) || llIn >= (I8_MAX/CY_MULTIPLIER)) return DISP_E_OVERFLOW; pCyOut->int64 = llIn * CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyFromUI8 (OLEAUT32.375) * * Convert a VT_UI8 to a VT_CY. * * PARAMS * ullIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarCyFromUI816(ULONG64 ullIn, CY* pCyOut) { if (ullIn > (I8_MAX/CY_MULTIPLIER)) return DISP_E_OVERFLOW; pCyOut->int64 = ullIn * CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyAdd (OLEAUT32.299) * * Add one CY to another. * * PARAMS * cyLeft [I] Source * cyRight [I] Value to add * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarCyAdd16(CY cyLeft, CY cyRight, CY* pCyOut) { double l,r; _VarR8FromCy(cyLeft, &l); _VarR8FromCy(cyRight, &r); l = l + r; return VarCyFromR8(l, pCyOut); } /************************************************************************ * VarCyMul (OLEAUT32.303) * * Multiply one CY by another. * * PARAMS * cyLeft [I] Source * cyRight [I] Value to multiply by * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarCyMul16(CY cyLeft, CY cyRight, CY* pCyOut) { double l,r; _VarR8FromCy(cyLeft, &l); _VarR8FromCy(cyRight, &r); l = l * r; return VarCyFromR8(l, pCyOut); } /************************************************************************ * VarCyMulI4 (OLEAUT32.304) * * Multiply one CY by a VT_I4. * * PARAMS * cyLeft [I] Source * lRight [I] Value to multiply by * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarCyMulI416(CY cyLeft, LONG lRight, CY* pCyOut) { double d; _VarR8FromCy(cyLeft, &d); d = d * lRight; return VarCyFromR8(d, pCyOut); } /************************************************************************ * VarCySub (OLEAUT32.305) * * Subtract one CY from another. * * PARAMS * cyLeft [I] Source * cyRight [I] Value to subtract * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarCySub16(CY cyLeft, CY cyRight, CY* pCyOut) { double l,r; _VarR8FromCy(cyLeft, &l); _VarR8FromCy(cyRight, &r); l = l - r; return VarCyFromR8(l, pCyOut); } /************************************************************************ * VarCyAbs (OLEAUT32.306) * * Convert a VT_CY into its absolute value. * * PARAMS * cyIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. pCyOut contains the absolute value. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarCyAbs16(CY cyIn, CY* pCyOut) { if (cyIn.s.Hi == (int)0x80000000 && !cyIn.s.Lo) return DISP_E_OVERFLOW; pCyOut->int64 = cyIn.int64 < 0 ? -cyIn.int64 : cyIn.int64; return S_OK; } /************************************************************************ * VarCyFix (OLEAUT32.307) * * Return the integer part of a VT_CY. * * PARAMS * cyIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * - The difference between this function and VarCyInt() is that VarCyInt() rounds * negative numbers away from 0, while this function rounds them towards zero. */ HRESULT WINAPI VarCyFix16(CY cyIn, CY* pCyOut) { pCyOut->int64 = cyIn.int64 / CY_MULTIPLIER; pCyOut->int64 *= CY_MULTIPLIER; return S_OK; } /************************************************************************ * VarCyInt (OLEAUT32.308) * * Return the integer part of a VT_CY. * * PARAMS * cyIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * - The difference between this function and VarCyFix() is that VarCyFix() rounds * negative numbers towards 0, while this function rounds them away from zero. */ HRESULT WINAPI VarCyInt16(CY cyIn, CY* pCyOut) { pCyOut->int64 = cyIn.int64 / CY_MULTIPLIER; pCyOut->int64 *= CY_MULTIPLIER; if (cyIn.int64 < 0 && cyIn.int64 % CY_MULTIPLIER != 0) { pCyOut->int64 -= CY_MULTIPLIER; } return S_OK; } /************************************************************************ * VarCyNeg (OLEAUT32.309) * * Change the sign of a VT_CY. * * PARAMS * cyIn [I] Source * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarCyNeg16(CY cyIn, CY* pCyOut) { if (cyIn.s.Hi == (int)0x80000000 && !cyIn.s.Lo) return DISP_E_OVERFLOW; pCyOut->int64 = -cyIn.int64; return S_OK; } /************************************************************************ * VarCyRound (OLEAUT32.310) * * Change the precision of a VT_CY. * * PARAMS * cyIn [I] Source * cDecimals [I] New number of decimals to keep * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if cDecimals is less than 0. */ HRESULT WINAPI VarCyRound16(CY cyIn, int cDecimals, CY* pCyOut) { if (cDecimals < 0) return E_INVALIDARG; if (cDecimals > 3) { /* Rounding to more precision than we have */ *pCyOut = cyIn; return S_OK; } else { double d, div = CY_Divisors[cDecimals]; _VarR8FromCy(cyIn, &d); d = d * div; VARIANT_DutchRound(LONGLONG, d, pCyOut->int64); d = (double)pCyOut->int64 / div * CY_MULTIPLIER_F; VARIANT_DutchRound(LONGLONG, d, pCyOut->int64); return S_OK; } } /************************************************************************ * VarCyCmp (OLEAUT32.311) * * Compare two VT_CY values. * * PARAMS * cyLeft [I] Source * cyRight [I] Value to compare * * RETURNS * Success: VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that the value to * compare is less, equal or greater than source respectively. * Failure: DISP_E_OVERFLOW, if overflow occurs during the comparison */ HRESULT WINAPI VarCyCmp16(CY cyLeft, CY cyRight) { HRESULT hRet; CY result; /* Subtract right from left, and compare the result to 0 */ hRet = VarCySub(cyLeft, cyRight, &result); if (SUCCEEDED(hRet)) { if (result.int64 < 0) hRet = (HRESULT)VARCMP_LT; else if (result.int64 > 0) hRet = (HRESULT)VARCMP_GT; else hRet = (HRESULT)VARCMP_EQ; } return hRet; } /************************************************************************ * VarCyCmpR8 (OLEAUT32.312) * * Compare a VT_CY to a double * * PARAMS * cyLeft [I] Currency Source * dblRight [I] double to compare to cyLeft * * RETURNS * Success: VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that dblRight is * less than, equal to or greater than cyLeft respectively. * Failure: DISP_E_OVERFLOW, if overflow occurs during the comparison */ HRESULT WINAPI VarCyCmpR816(CY cyLeft, double dblRight) { HRESULT hRet; CY cyRight; hRet = VarCyFromR8(dblRight, &cyRight); if (SUCCEEDED(hRet)) hRet = VarCyCmp(cyLeft, cyRight); return hRet; } /************************************************************************ * VarCyMulI8 (OLEAUT32.329) * * Multiply a VT_CY by a VT_I8. * * PARAMS * cyLeft [I] Source * llRight [I] Value to multiply by * pCyOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarCyMulI816(CY cyLeft, LONG64 llRight, CY* pCyOut) { double d; _VarR8FromCy(cyLeft, &d); d = d * (double)llRight; return VarCyFromR8(d, pCyOut); } /* DECIMAL */ /************************************************************************ * VarDecFromUI1 (OLEAUT32.190) * * Convert a VT_UI1 to a DECIMAL. * * PARAMS * bIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromUI116(BYTE bIn, DECIMAL* pDecOut) { return VarDecFromUI4(bIn, pDecOut); } /************************************************************************ * VarDecFromI2 (OLEAUT32.191) * * Convert a VT_I2 to a DECIMAL. * * PARAMS * sIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromI216(SHORT sIn, DECIMAL* pDecOut) { return VarDecFromI4(sIn, pDecOut); } #ifdef AVAIL_32BIT_VAR /************************************************************************ * VarDecFromI4 (OLEAUT32.192) * * Convert a VT_I4 to a DECIMAL. * * PARAMS * sIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromI416(LONG lIn, DECIMAL* pDecOut) { DEC_HI32(pDecOut) = 0; DEC_MID32(pDecOut) = 0; if (lIn < 0) { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_NEG,0); DEC_LO32(pDecOut) = -lIn; } else { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0); DEC_LO32(pDecOut) = lIn; } return S_OK; } #endif /* internal representation of the value stored in a DECIMAL. The bytes are stored from LSB at index 0 to MSB at index 11 */ typedef struct DECIMAL_internal { DWORD bitsnum[3]; /* 96 significant bits, unsigned */ unsigned char scale; /* number scaled * 10 ^ -(scale) */ unsigned int sign : 1; /* 0 - positive, 1 - negative */ } VARIANT_DI; static HRESULT VARIANT_DI_FromR4(float source, VARIANT_DI * dest); static HRESULT VARIANT_DI_FromR8(double source, VARIANT_DI * dest); #ifdef AVAIL_32BIT_VAR static void VARIANT_DIFromDec(const DECIMAL * from, VARIANT_DI * to); static void VARIANT_DecFromDI(const VARIANT_DI * from, DECIMAL * to); static unsigned char VARIANT_int_divbychar(DWORD * p, unsigned int n, unsigned char divisor); static BOOL VARIANT_int_iszero(const DWORD * p, unsigned int n); /************************************************************************ * VarDecFromR4 (OLEAUT32.193) * * Convert a VT_R4 to a DECIMAL. * * PARAMS * fltIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromR416(FLOAT fltIn, DECIMAL* pDecOut) { VARIANT_DI di; HRESULT hres; hres = VARIANT_DI_FromR4(fltIn, &di); if (hres == S_OK) VARIANT_DecFromDI(&di, pDecOut); return hres; } /************************************************************************ * VarDecFromR8 (OLEAUT32.194) * * Convert a VT_R8 to a DECIMAL. * * PARAMS * dblIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromR816(double dblIn, DECIMAL* pDecOut) { VARIANT_DI di; HRESULT hres; hres = VARIANT_DI_FromR8(dblIn, &di); if (hres == S_OK) VARIANT_DecFromDI(&di, pDecOut); return hres; } /************************************************************************ * VarDecFromDate (OLEAUT32.195) * * Convert a VT_DATE to a DECIMAL. * * PARAMS * dateIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromDate16(DATE dateIn, DECIMAL* pDecOut) { return VarDecFromR8(dateIn, pDecOut); } /************************************************************************ * VarDecFromCy (OLEAUT32.196) * * Convert a VT_CY to a DECIMAL. * * PARAMS * cyIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromCy16(CY cyIn, DECIMAL* pDecOut) { DEC_HI32(pDecOut) = 0; /* Note: This assumes 2s complement integer representation */ if (cyIn.s.Hi & 0x80000000) { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_NEG,4); DEC_LO64(pDecOut) = -cyIn.int64; } else { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,4); DEC_MID32(pDecOut) = cyIn.s.Hi; DEC_LO32(pDecOut) = cyIn.s.Lo; } return S_OK; } /************************************************************************ * VarDecFromStr (OLEAUT32.197) * * Convert a VT_BSTR to a DECIMAL. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pDecOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarDecFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, DECIMAL* pDecOut) { return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pDecOut, VT_DECIMAL); } /************************************************************************ * VarDecFromDisp (OLEAUT32.198) * * Convert a VT_DISPATCH to a DECIMAL. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pDecOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarDecFromDisp16(SEGIDispatch pdispIn, LCID lcid, DECIMAL* pDecOut) { return VARIANT_FromDisp(pdispIn, lcid, pDecOut, VT_DECIMAL, 0); } /************************************************************************ * VarDecFromBool (OLEAUT32.199) * * Convert a VT_BOOL to a DECIMAL. * * PARAMS * bIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. * * NOTES * The value is converted to either 0 (if bIn is FALSE) or -1 (TRUE). */ HRESULT WINAPI VarDecFromBool16(VARIANT_BOOL bIn, DECIMAL* pDecOut) { DEC_HI32(pDecOut) = 0; DEC_MID32(pDecOut) = 0; if (bIn) { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_NEG,0); DEC_LO32(pDecOut) = 1; } else { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0); DEC_LO32(pDecOut) = 0; } return S_OK; } /************************************************************************ * VarDecFromI1 (OLEAUT32.241) * * Convert a VT_I1 to a DECIMAL. * * PARAMS * cIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromI116(signed char cIn, DECIMAL* pDecOut) { return VarDecFromI4(cIn, pDecOut); } /************************************************************************ * VarDecFromUI2 (OLEAUT32.242) * * Convert a VT_UI2 to a DECIMAL. * * PARAMS * usIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromUI216(USHORT usIn, DECIMAL* pDecOut) { return VarDecFromUI4(usIn, pDecOut); } /************************************************************************ * VarDecFromUI4 (OLEAUT32.243) * * Convert a VT_UI4 to a DECIMAL. * * PARAMS * ulIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromUI416(ULONG ulIn, DECIMAL* pDecOut) { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0); DEC_HI32(pDecOut) = 0; DEC_MID32(pDecOut) = 0; DEC_LO32(pDecOut) = ulIn; return S_OK; } /************************************************************************ * VarDecFromI8 (OLEAUT32.374) * * Convert a VT_I8 to a DECIMAL. * * PARAMS * llIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromI816(LONG64 llIn, DECIMAL* pDecOut) { PULARGE_INTEGER pLi = (PULARGE_INTEGER)&llIn; DEC_HI32(pDecOut) = 0; /* Note: This assumes 2s complement integer representation */ if (pLi->u.HighPart & 0x80000000) { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_NEG,0); DEC_LO64(pDecOut) = -pLi->QuadPart; } else { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0); DEC_MID32(pDecOut) = pLi->u.HighPart; DEC_LO32(pDecOut) = pLi->u.LowPart; } return S_OK; } /************************************************************************ * VarDecFromUI8 (OLEAUT32.375) * * Convert a VT_UI8 to a DECIMAL. * * PARAMS * ullIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDecFromUI816(ULONG64 ullIn, DECIMAL* pDecOut) { DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0); DEC_HI32(pDecOut) = 0; DEC_LO64(pDecOut) = ullIn; return S_OK; } /* Make two DECIMALS the same scale; used by math functions below */ static HRESULT VARIANT_DecScale(const DECIMAL** ppDecLeft, const DECIMAL** ppDecRight, DECIMAL pDecOut[2]) { static DECIMAL scaleFactor; unsigned char remainder; DECIMAL decTemp; VARIANT_DI di; int scaleAmount, i; if (DEC_SIGN(*ppDecLeft) & ~DECIMAL_NEG || DEC_SIGN(*ppDecRight) & ~DECIMAL_NEG) return E_INVALIDARG; DEC_LO32(&scaleFactor) = 10; i = scaleAmount = DEC_SCALE(*ppDecLeft) - DEC_SCALE(*ppDecRight); if (!scaleAmount) return S_OK; /* Same scale */ if (scaleAmount > 0) { decTemp = *(*ppDecRight); /* Left is bigger - scale the right hand side */ *ppDecRight = &pDecOut[0]; } else { decTemp = *(*ppDecLeft); /* Right is bigger - scale the left hand side */ *ppDecLeft = &pDecOut[0]; i = -scaleAmount; } /* Multiply up the value to be scaled by the correct amount (if possible) */ while (i > 0 && SUCCEEDED(VarDecMul(&decTemp, &scaleFactor, &pDecOut[0]))) { decTemp = pDecOut[0]; i--; } if (!i) { DEC_SCALE(&pDecOut[0]) += (scaleAmount > 0) ? scaleAmount : (-scaleAmount); return S_OK; /* Same scale */ } /* Scaling further not possible, reduce accuracy of other argument */ pDecOut[0] = decTemp; if (scaleAmount > 0) { DEC_SCALE(&pDecOut[0]) += scaleAmount - i; VARIANT_DIFromDec(*ppDecLeft, &di); *ppDecLeft = &pDecOut[1]; } else { DEC_SCALE(&pDecOut[0]) += (-scaleAmount) - i; VARIANT_DIFromDec(*ppDecRight, &di); *ppDecRight = &pDecOut[1]; } di.scale -= i; remainder = 0; while (i-- > 0 && !VARIANT_int_iszero(di.bitsnum, ARRAY_SIZE(di.bitsnum))) { remainder = VARIANT_int_divbychar(di.bitsnum, ARRAY_SIZE(di.bitsnum), 10); if (remainder > 0) WARN("losing significant digits (remainder %u)...\n", remainder); } /* round up the result - native oleaut32 does this */ if (remainder >= 5) { for (remainder = 1, i = 0; i < ARRAY_SIZE(di.bitsnum) && remainder; i++) { ULONGLONG digit = di.bitsnum[i] + 1; remainder = (digit > 0xFFFFFFFF) ? 1 : 0; di.bitsnum[i] = digit & 0xFFFFFFFF; } } VARIANT_DecFromDI(&di, &pDecOut[1]); return S_OK; } #endif /* Add two unsigned 32 bit values with overflow */ static ULONG VARIANT_Add(ULONG ulLeft, ULONG ulRight, ULONG* pulHigh) { ULARGE_INTEGER ul64; ul64.QuadPart = (ULONG64)ulLeft + (ULONG64)ulRight + (ULONG64)*pulHigh; *pulHigh = ul64.u.HighPart; return ul64.u.LowPart; } /* Subtract two unsigned 32 bit values with underflow */ static ULONG VARIANT_Sub(ULONG ulLeft, ULONG ulRight, ULONG* pulHigh) { BOOL invert = FALSE; ULARGE_INTEGER ul64; ul64.QuadPart = (LONG64)ulLeft - (ULONG64)ulRight; if (ulLeft < ulRight) invert = TRUE; if (ul64.QuadPart > (ULONG64)*pulHigh) ul64.QuadPart -= (ULONG64)*pulHigh; else { ul64.QuadPart -= (ULONG64)*pulHigh; invert = TRUE; } if (invert) ul64.u.HighPart = -ul64.u.HighPart ; *pulHigh = ul64.u.HighPart; return ul64.u.LowPart; } /* Multiply two unsigned 32 bit values with overflow */ static ULONG VARIANT_Mul(ULONG ulLeft, ULONG ulRight, ULONG* pulHigh) { ULARGE_INTEGER ul64; ul64.QuadPart = (ULONG64)ulLeft * (ULONG64)ulRight + (ULONG64)*pulHigh; *pulHigh = ul64.u.HighPart; return ul64.u.LowPart; } #ifdef AVAIL_32BIT_VAR /* Compare two decimals that have the same scale */ static inline int VARIANT_DecCmp(const DECIMAL *pDecLeft, const DECIMAL *pDecRight) { if ( DEC_HI32(pDecLeft) < DEC_HI32(pDecRight) || (DEC_HI32(pDecLeft) <= DEC_HI32(pDecRight) && DEC_LO64(pDecLeft) < DEC_LO64(pDecRight))) return -1; else if (DEC_HI32(pDecLeft) == DEC_HI32(pDecRight) && DEC_LO64(pDecLeft) == DEC_LO64(pDecRight)) return 0; return 1; } /************************************************************************ * VarDecAdd (OLEAUT32.177) * * Add one DECIMAL to another. * * PARAMS * pDecLeft [I] Source * pDecRight [I] Value to add * pDecOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarDecAdd16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut) { HRESULT hRet; DECIMAL scaled[2]; hRet = VARIANT_DecScale(&pDecLeft, &pDecRight, scaled); if (SUCCEEDED(hRet)) { /* Our decimals now have the same scale, we can add them as 96 bit integers */ ULONG overflow = 0; BYTE sign = DECIMAL_POS; int cmp; /* Correct for the sign of the result */ if (DEC_SIGN(pDecLeft) && DEC_SIGN(pDecRight)) { /* -x + -y : Negative */ sign = DECIMAL_NEG; goto VarDecAdd_AsPositive; } else if (DEC_SIGN(pDecLeft) && !DEC_SIGN(pDecRight)) { cmp = VARIANT_DecCmp(pDecLeft, pDecRight); /* -x + y : Negative if x > y */ if (cmp > 0) { sign = DECIMAL_NEG; VarDecAdd_AsNegative: DEC_LO32(pDecOut) = VARIANT_Sub(DEC_LO32(pDecLeft), DEC_LO32(pDecRight), &overflow); DEC_MID32(pDecOut) = VARIANT_Sub(DEC_MID32(pDecLeft), DEC_MID32(pDecRight), &overflow); DEC_HI32(pDecOut) = VARIANT_Sub(DEC_HI32(pDecLeft), DEC_HI32(pDecRight), &overflow); } else { VarDecAdd_AsInvertedNegative: DEC_LO32(pDecOut) = VARIANT_Sub(DEC_LO32(pDecRight), DEC_LO32(pDecLeft), &overflow); DEC_MID32(pDecOut) = VARIANT_Sub(DEC_MID32(pDecRight), DEC_MID32(pDecLeft), &overflow); DEC_HI32(pDecOut) = VARIANT_Sub(DEC_HI32(pDecRight), DEC_HI32(pDecLeft), &overflow); } } else if (!DEC_SIGN(pDecLeft) && DEC_SIGN(pDecRight)) { cmp = VARIANT_DecCmp(pDecLeft, pDecRight); /* x + -y : Negative if x <= y */ if (cmp <= 0) { sign = DECIMAL_NEG; goto VarDecAdd_AsInvertedNegative; } goto VarDecAdd_AsNegative; } else { /* x + y : Positive */ VarDecAdd_AsPositive: DEC_LO32(pDecOut) = VARIANT_Add(DEC_LO32(pDecLeft), DEC_LO32(pDecRight), &overflow); DEC_MID32(pDecOut) = VARIANT_Add(DEC_MID32(pDecLeft), DEC_MID32(pDecRight), &overflow); DEC_HI32(pDecOut) = VARIANT_Add(DEC_HI32(pDecLeft), DEC_HI32(pDecRight), &overflow); } if (overflow) return DISP_E_OVERFLOW; /* overflowed */ DEC_SCALE(pDecOut) = DEC_SCALE(pDecLeft); DEC_SIGN(pDecOut) = sign; } return hRet; } #endif #ifdef AVAIL_32BIT_VAR /* translate from external DECIMAL format into an internal representation */ static void VARIANT_DIFromDec(const DECIMAL * from, VARIANT_DI * to) { to->scale = DEC_SCALE(from); to->sign = DEC_SIGN(from) ? 1 : 0; to->bitsnum[0] = DEC_LO32(from); to->bitsnum[1] = DEC_MID32(from); to->bitsnum[2] = DEC_HI32(from); } static void VARIANT_DecFromDI(const VARIANT_DI * from, DECIMAL * to) { if (from->sign) { DEC_SIGNSCALE(to) = SIGNSCALE(DECIMAL_NEG, from->scale); } else { DEC_SIGNSCALE(to) = SIGNSCALE(DECIMAL_POS, from->scale); } DEC_LO32(to) = from->bitsnum[0]; DEC_MID32(to) = from->bitsnum[1]; DEC_HI32(to) = from->bitsnum[2]; } #endif /* clear an internal representation of a DECIMAL */ static void VARIANT_DI_clear(VARIANT_DI * i) { memset(i, 0, sizeof(VARIANT_DI)); } /* divide the (unsigned) number stored in p (LSB) by a byte value (<= 0xff). Any nonzero size is supported. The value in p is replaced by the quotient of the division, and the remainder is returned as a result. This routine is most often used with a divisor of 10 in order to scale up numbers, and in the DECIMAL->string conversion. */ static unsigned char VARIANT_int_divbychar(DWORD * p, unsigned int n, unsigned char divisor) { if (divisor == 0) { /* division by 0 */ return 0xFF; } else if (divisor == 1) { /* dividend remains unchanged */ return 0; } else { unsigned char remainder = 0; ULONGLONG iTempDividend; signed int i; for (i = n - 1; i >= 0 && !p[i]; i--); /* skip leading zeros */ for (; i >= 0; i--) { iTempDividend = ((ULONGLONG)remainder << 32) + p[i]; remainder = iTempDividend % divisor; p[i] = iTempDividend / divisor; } return remainder; } } /* check to test if encoded number is a zero. Returns 1 if zero, 0 for nonzero */ static BOOL VARIANT_int_iszero(const DWORD * p, unsigned int n) { for (; n > 0; n--) if (*p++ != 0) return FALSE; return TRUE; } /* multiply two DECIMALS, without changing either one, and place result in third parameter. Result is normalized when scale is > 0. Attempts to remove significant digits when scale > 0 in order to fit an overflowing result. Final overflow flag is returned. */ static int VARIANT_DI_mul(const VARIANT_DI * a, const VARIANT_DI * b, VARIANT_DI * result) { BOOL r_overflow = FALSE; DWORD running[6]; signed int mulstart; VARIANT_DI_clear(result); result->sign = (a->sign ^ b->sign) ? 1 : 0; /* Multiply 128-bit operands into a (max) 256-bit result. The scale of the result is formed by adding the scales of the operands. */ result->scale = a->scale + b->scale; memset(running, 0, sizeof(running)); /* count number of leading zero-bytes in operand A */ for (mulstart = ARRAY_SIZE(a->bitsnum) - 1; mulstart >= 0 && !a->bitsnum[mulstart]; mulstart--); if (mulstart < 0) { /* result is 0, because operand A is 0 */ result->scale = 0; result->sign = 0; } else { unsigned char remainder = 0; int iA; /* perform actual multiplication */ for (iA = 0; iA <= mulstart; iA++) { ULONG iOverflowMul; int iB; for (iOverflowMul = 0, iB = 0; iB < ARRAY_SIZE(b->bitsnum); iB++) { ULONG iRV; int iR; iRV = VARIANT_Mul(b->bitsnum[iB], a->bitsnum[iA], &iOverflowMul); iR = iA + iB; do { running[iR] = VARIANT_Add(running[iR], 0, &iRV); iR++; } while (iRV); } } /* Too bad - native oleaut does not do this, so we should not either */ #if 0 /* While the result is divisible by 10, and the scale > 0, divide by 10. This operation should not lose significant digits, and gives an opportunity to reduce the possibility of overflows in future operations issued by the application. */ while (result->scale > 0) { memcpy(quotient, running, sizeof(quotient)); remainder = VARIANT_int_divbychar(quotient, sizeof(quotient) / sizeof(DWORD), 10); if (remainder > 0) break; memcpy(running, quotient, sizeof(quotient)); result->scale--; } #endif /* While the 256-bit result overflows, and the scale > 0, divide by 10. This operation *will* lose significant digits of the result because all the factors of 10 were consumed by the previous operation. */ while (result->scale > 0 && !VARIANT_int_iszero(running + ARRAY_SIZE(result->bitsnum), ARRAY_SIZE(running) - ARRAY_SIZE(result->bitsnum))) { remainder = VARIANT_int_divbychar(running, ARRAY_SIZE(running), 10); if (remainder > 0) WARN("losing significant digits (remainder %u)...\n", remainder); result->scale--; } /* round up the result - native oleaut32 does this */ if (remainder >= 5) { unsigned int i; for (remainder = 1, i = 0; i < ARRAY_SIZE(running) && remainder; i++) { ULONGLONG digit = running[i] + 1; remainder = (digit > 0xFFFFFFFF) ? 1 : 0; running[i] = digit & 0xFFFFFFFF; } } /* Signal overflow if scale == 0 and 256-bit result still overflows, and copy result bits into result structure */ r_overflow = !VARIANT_int_iszero(running + ARRAY_SIZE(result->bitsnum), ARRAY_SIZE(running) - ARRAY_SIZE(result->bitsnum)); memcpy(result->bitsnum, running, sizeof(result->bitsnum)); } return r_overflow; } /* cast DECIMAL into string. Any scale should be handled properly. en_US locale is hardcoded (period for decimal separator, dash as negative sign). Returns TRUE for success, FALSE if insufficient space in output buffer. */ static BOOL VARIANT_DI_tostringA(const VARIANT_DI * a, OLECHAR16 * s, unsigned int n) { BOOL overflow = FALSE; DWORD quotient[3]; unsigned char remainder; unsigned int i; /* place negative sign */ if (!VARIANT_int_iszero(a->bitsnum, ARRAY_SIZE(a->bitsnum)) && a->sign) { if (n > 0) { *s++ = '-'; n--; } else overflow = TRUE; } /* prepare initial 0 */ if (!overflow) { if (n >= 2) { s[0] = '0'; s[1] = '\0'; } else overflow = TRUE; } i = 0; memcpy(quotient, a->bitsnum, sizeof(a->bitsnum)); while (!overflow && !VARIANT_int_iszero(quotient, ARRAY_SIZE(quotient))) { remainder = VARIANT_int_divbychar(quotient, ARRAY_SIZE(quotient), 10); if (i + 2 > n) { overflow = TRUE; } else { s[i++] = '0' + remainder; s[i] = '\0'; } } if (!overflow && !VARIANT_int_iszero(a->bitsnum, ARRAY_SIZE(a->bitsnum))) { /* reverse order of digits */ OLECHAR16 * x = s; OLECHAR16 * y = s + i - 1; while (x < y) { *x ^= *y; *y ^= *x; *x++ ^= *y--; } /* check for decimal point. "i" now has string length */ if (i <= a->scale) { unsigned int numzeroes = a->scale + 1 - i; if (i + 1 + numzeroes >= n) { overflow = TRUE; } else { memmove(s + numzeroes, s, (i + 1) * sizeof(OLECHAR16)); i += numzeroes; while (numzeroes > 0) { s[--numzeroes] = '0'; } } } /* place decimal point */ if (a->scale > 0) { unsigned int periodpos = i - a->scale; if (i + 2 >= n) { overflow = TRUE; } else { memmove(s + periodpos + 1, s + periodpos, (i + 1 - periodpos) * sizeof(OLECHAR16)); s[periodpos] = '.'; i++; /* remove extra zeros at the end, if any */ while (s[i - 1] == '0') s[--i] = '\0'; if (s[i - 1] == '.') s[--i] = '\0'; } } } return !overflow; } /* shift the bits of a DWORD array to the left. p[0] is assumed LSB */ static void VARIANT_int_shiftleft(DWORD * p, unsigned int n, unsigned int shift) { DWORD shifted; unsigned int i; /* shift whole DWORDs to the left */ while (shift >= 32) { memmove(p + 1, p, (n - 1) * sizeof(DWORD)); *p = 0; shift -= 32; } /* shift remainder (1..31 bits) */ shifted = 0; if (shift > 0) for (i = 0; i < n; i++) { DWORD b; b = p[i] >> (32 - shift); p[i] = (p[i] << shift) | shifted; shifted = b; } } /* add the (unsigned) numbers stored in two DWORD arrays with LSB at index 0. Value at v is incremented by the value at p. Any size is supported, provided that v is not shorter than p. Any unapplied carry is returned as a result. */ static unsigned char VARIANT_int_add(DWORD * v, unsigned int nv, const DWORD * p, unsigned int np) { unsigned char carry = 0; if (nv >= np) { ULONGLONG sum; unsigned int i; for (i = 0; i < np; i++) { sum = (ULONGLONG)v[i] + (ULONGLONG)p[i] + (ULONGLONG)carry; v[i] = sum & 0xffffffff; carry = sum >> 32; } for (; i < nv && carry; i++) { sum = (ULONGLONG)v[i] + (ULONGLONG)carry; v[i] = sum & 0xffffffff; carry = sum >> 32; } } return carry; } #ifdef AVAIL_32BIT_VAR /* perform integral division with operand p as dividend. Parameter n indicates number of available DWORDs in divisor p, but available space in p must be actually at least 2 * n DWORDs, because the remainder of the integral division is built in the next n DWORDs past the start of the quotient. This routine replaces the dividend in p with the quotient, and appends n additional DWORDs for the remainder. Thanks to Lee & Mark Atkinson for their book _Using_C_ (my very first book on C/C++ :-) where the "longhand binary division" algorithm was exposed for the source code to the VLI (Very Large Integer) division operator. This algorithm was then heavily modified by me (Alex Villacis Lasso) in order to handle variably-scaled integers such as the MS DECIMAL representation. */ static void VARIANT_int_div(DWORD * p, unsigned int n, const DWORD * divisor, unsigned int dn) { unsigned int i; DWORD tempsub[8]; DWORD * negdivisor = tempsub + n; /* build 2s-complement of divisor */ for (i = 0; i < n; i++) negdivisor[i] = (i < dn) ? ~divisor[i] : 0xFFFFFFFF; p[n] = 1; VARIANT_int_add(negdivisor, n, p + n, 1); memset(p + n, 0, n * sizeof(DWORD)); /* skip all leading zero DWORDs in quotient */ for (i = 0; i < n && !p[n - 1]; i++) VARIANT_int_shiftleft(p, n, 32); /* i is now number of DWORDs left to process */ for (i <<= 5; i < (n << 5); i++) { VARIANT_int_shiftleft(p, n << 1, 1); /* shl quotient+remainder */ /* trial subtraction */ memcpy(tempsub, p + n, n * sizeof(DWORD)); VARIANT_int_add(tempsub, n, negdivisor, n); /* check whether result of subtraction was negative */ if ((tempsub[n - 1] & 0x80000000) == 0) { memcpy(p + n, tempsub, n * sizeof(DWORD)); p[0] |= 1; } } } /* perform integral multiplication by a byte operand. Used for scaling by 10 */ static unsigned char VARIANT_int_mulbychar(DWORD * p, unsigned int n, unsigned char m) { unsigned int i; ULONG iOverflowMul; for (iOverflowMul = 0, i = 0; i < n; i++) p[i] = VARIANT_Mul(p[i], m, &iOverflowMul); return (unsigned char)iOverflowMul; } /* increment value in A by the value indicated in B, with scale adjusting. Modifies parameters by adjusting scales. Returns 0 if addition was successful, nonzero if a parameter underflowed before it could be successfully used in the addition. */ static int VARIANT_int_addlossy( DWORD * a, int * ascale, unsigned int an, DWORD * b, int * bscale, unsigned int bn) { int underflow = 0; if (VARIANT_int_iszero(a, an)) { /* if A is zero, copy B into A, after removing digits */ while (bn > an && !VARIANT_int_iszero(b + an, bn - an)) { VARIANT_int_divbychar(b, bn, 10); (*bscale)--; } memcpy(a, b, an * sizeof(DWORD)); *ascale = *bscale; } else if (!VARIANT_int_iszero(b, bn)) { unsigned int tn = an + 1; DWORD t[5]; if (bn + 1 > tn) tn = bn + 1; if (*ascale != *bscale) { /* first (optimistic) try - try to scale down the one with the bigger scale, while this number is divisible by 10 */ DWORD * digitchosen; unsigned int nchosen; int * scalechosen; int targetscale; if (*ascale < *bscale) { targetscale = *ascale; scalechosen = bscale; digitchosen = b; nchosen = bn; } else { targetscale = *bscale; scalechosen = ascale; digitchosen = a; nchosen = an; } memset(t, 0, tn * sizeof(DWORD)); memcpy(t, digitchosen, nchosen * sizeof(DWORD)); /* divide by 10 until target scale is reached */ while (*scalechosen > targetscale) { unsigned char remainder = VARIANT_int_divbychar(t, tn, 10); if (!remainder) { (*scalechosen)--; memcpy(digitchosen, t, nchosen * sizeof(DWORD)); } else break; } } if (*ascale != *bscale) { DWORD * digitchosen; unsigned int nchosen; int * scalechosen; int targetscale; /* try to scale up the one with the smaller scale */ if (*ascale > *bscale) { targetscale = *ascale; scalechosen = bscale; digitchosen = b; nchosen = bn; } else { targetscale = *bscale; scalechosen = ascale; digitchosen = a; nchosen = an; } memset(t, 0, tn * sizeof(DWORD)); memcpy(t, digitchosen, nchosen * sizeof(DWORD)); /* multiply by 10 until target scale is reached, or significant bytes overflow the number */ while (*scalechosen < targetscale && t[nchosen] == 0) { VARIANT_int_mulbychar(t, tn, 10); if (t[nchosen] == 0) { /* still does not overflow */ (*scalechosen)++; memcpy(digitchosen, t, nchosen * sizeof(DWORD)); } } } if (*ascale != *bscale) { /* still different? try to scale down the one with the bigger scale (this *will* lose significant digits) */ DWORD * digitchosen; unsigned int nchosen; int * scalechosen; int targetscale; if (*ascale < *bscale) { targetscale = *ascale; scalechosen = bscale; digitchosen = b; nchosen = bn; } else { targetscale = *bscale; scalechosen = ascale; digitchosen = a; nchosen = an; } memset(t, 0, tn * sizeof(DWORD)); memcpy(t, digitchosen, nchosen * sizeof(DWORD)); /* divide by 10 until target scale is reached */ while (*scalechosen > targetscale) { VARIANT_int_divbychar(t, tn, 10); (*scalechosen)--; memcpy(digitchosen, t, nchosen * sizeof(DWORD)); } } /* check whether any of the operands still has significant digits (underflow case 1) */ if (VARIANT_int_iszero(a, an) || VARIANT_int_iszero(b, bn)) { underflow = 1; } else { /* at this step, both numbers have the same scale and can be added as integers. However, the result might not fit in A, so further scaling down might be necessary. */ while (!underflow) { memset(t, 0, tn * sizeof(DWORD)); memcpy(t, a, an * sizeof(DWORD)); VARIANT_int_add(t, tn, b, bn); if (VARIANT_int_iszero(t + an, tn - an)) { /* addition was successful */ memcpy(a, t, an * sizeof(DWORD)); break; } else { /* addition overflowed - remove significant digits from both operands and try again */ VARIANT_int_divbychar(a, an, 10); (*ascale)--; VARIANT_int_divbychar(b, bn, 10); (*bscale)--; /* check whether any operand keeps significant digits after scaledown (underflow case 2) */ underflow = (VARIANT_int_iszero(a, an) || VARIANT_int_iszero(b, bn)); } } } } return underflow; } /* perform complete DECIMAL division in the internal representation. Returns 0 if the division was completed (even if quotient is set to 0), or nonzero in case of quotient overflow. */ static HRESULT VARIANT_DI_div(const VARIANT_DI * dividend, const VARIANT_DI * divisor, VARIANT_DI * quotient, BOOL round_remainder) { HRESULT r_overflow = S_OK; if (VARIANT_int_iszero(divisor->bitsnum, ARRAY_SIZE(divisor->bitsnum))) { /* division by 0 */ r_overflow = DISP_E_DIVBYZERO; } else if (VARIANT_int_iszero(dividend->bitsnum, ARRAY_SIZE(dividend->bitsnum))) { VARIANT_DI_clear(quotient); } else { int quotientscale, remainderscale, tempquotientscale; DWORD remainderplusquotient[8]; int underflow; quotientscale = remainderscale = (int)dividend->scale - (int)divisor->scale; tempquotientscale = quotientscale; VARIANT_DI_clear(quotient); quotient->sign = (dividend->sign ^ divisor->sign) ? 1 : 0; /* The following strategy is used for division 1) if there was a nonzero remainder from previous iteration, use it as dividend for this iteration, else (for first iteration) use intended dividend 2) perform integer division in temporary buffer, develop quotient in low-order part, remainder in high-order part 3) add quotient from step 2 to final result, with possible loss of significant digits 4) multiply integer part of remainder by 10, while incrementing the scale of the remainder. This operation preserves the intended value of the remainder. 5) loop to step 1 until one of the following is true: a) remainder is zero (exact division achieved) b) addition in step 3 fails to modify bits in quotient (remainder underflow) */ memset(remainderplusquotient, 0, sizeof(remainderplusquotient)); memcpy(remainderplusquotient, dividend->bitsnum, sizeof(dividend->bitsnum)); do { VARIANT_int_div(remainderplusquotient, 4, divisor->bitsnum, ARRAY_SIZE(divisor->bitsnum)); underflow = VARIANT_int_addlossy( quotient->bitsnum, "ientscale, ARRAY_SIZE(quotient->bitsnum), remainderplusquotient, &tempquotientscale, 4); if (round_remainder) { if(remainderplusquotient[4] >= 5){ unsigned int i; unsigned char remainder = 1; for (i = 0; i < ARRAY_SIZE(quotient->bitsnum) && remainder; i++) { ULONGLONG digit = quotient->bitsnum[i] + 1; remainder = (digit > 0xFFFFFFFF) ? 1 : 0; quotient->bitsnum[i] = digit & 0xFFFFFFFF; } } memset(remainderplusquotient, 0, sizeof(remainderplusquotient)); } else { VARIANT_int_mulbychar(remainderplusquotient + 4, 4, 10); memcpy(remainderplusquotient, remainderplusquotient + 4, 4 * sizeof(DWORD)); } tempquotientscale = ++remainderscale; } while (!underflow && !VARIANT_int_iszero(remainderplusquotient + 4, 4)); /* quotient scale might now be negative (extremely big number). If, so, try to multiply quotient by 10 (without overflowing), while adjusting the scale, until scale is 0. If this cannot be done, it is a real overflow. */ while (r_overflow == S_OK && quotientscale < 0) { memset(remainderplusquotient, 0, sizeof(remainderplusquotient)); memcpy(remainderplusquotient, quotient->bitsnum, sizeof(quotient->bitsnum)); VARIANT_int_mulbychar(remainderplusquotient, ARRAY_SIZE(remainderplusquotient), 10); if (VARIANT_int_iszero(remainderplusquotient + ARRAY_SIZE(quotient->bitsnum), ARRAY_SIZE(remainderplusquotient) - ARRAY_SIZE(quotient->bitsnum))) { quotientscale++; memcpy(quotient->bitsnum, remainderplusquotient, sizeof(quotient->bitsnum)); } else r_overflow = DISP_E_OVERFLOW; } if (r_overflow == S_OK) { if (quotientscale <= 255) quotient->scale = quotientscale; else VARIANT_DI_clear(quotient); } } return r_overflow; } /* This procedure receives a VARIANT_DI with a defined mantissa and sign, but with an undefined scale, which will be assigned to (if possible). It also receives an exponent of 2. This procedure will then manipulate the mantissa and calculate a corresponding scale, so that the exponent2 value is assimilated into the VARIANT_DI and is therefore no longer necessary. Returns S_OK if successful, or DISP_E_OVERFLOW if the represented value is too big to fit into a DECIMAL. */ static HRESULT VARIANT_DI_normalize(VARIANT_DI * val, int exponent2, BOOL isDouble) { HRESULT hres = S_OK; int exponent5, exponent10; /* A factor of 2^exponent2 is equivalent to (10^exponent2)/(5^exponent2), and thus equal to (5^-exponent2)*(10^exponent2). After all manipulations, exponent10 might be used to set the VARIANT_DI scale directly. However, the value of 5^-exponent5 must be assimilated into the VARIANT_DI. */ exponent5 = -exponent2; exponent10 = exponent2; /* Handle exponent5 > 0 */ while (exponent5 > 0) { char bPrevCarryBit; char bCurrCarryBit; /* In order to multiply the value represented by the VARIANT_DI by 5, it is best to multiply by 10/2. Therefore, exponent10 is incremented, and somehow the mantissa should be divided by 2. */ if ((val->bitsnum[0] & 1) == 0) { /* The mantissa is divisible by 2. Therefore the division can be done without losing significant digits. */ exponent10++; exponent5--; /* Shift right */ bPrevCarryBit = val->bitsnum[2] & 1; val->bitsnum[2] >>= 1; bCurrCarryBit = val->bitsnum[1] & 1; val->bitsnum[1] = (val->bitsnum[1] >> 1) | (bPrevCarryBit ? 0x80000000 : 0); val->bitsnum[0] = (val->bitsnum[0] >> 1) | (bCurrCarryBit ? 0x80000000 : 0); } else { /* The mantissa is NOT divisible by 2. Therefore the mantissa should be multiplied by 5, unless the multiplication overflows. */ DWORD temp_bitsnum[3]; exponent5--; memcpy(temp_bitsnum, val->bitsnum, 3 * sizeof(DWORD)); if (0 == VARIANT_int_mulbychar(temp_bitsnum, 3, 5)) { /* Multiplication succeeded without overflow, so copy result back into VARIANT_DI */ memcpy(val->bitsnum, temp_bitsnum, 3 * sizeof(DWORD)); /* Mask out 3 extraneous bits introduced by the multiply */ } else { /* Multiplication by 5 overflows. The mantissa should be divided by 2, and therefore will lose significant digits. */ exponent10++; /* Shift right */ bPrevCarryBit = val->bitsnum[2] & 1; val->bitsnum[2] >>= 1; bCurrCarryBit = val->bitsnum[1] & 1; val->bitsnum[1] = (val->bitsnum[1] >> 1) | (bPrevCarryBit ? 0x80000000 : 0); val->bitsnum[0] = (val->bitsnum[0] >> 1) | (bCurrCarryBit ? 0x80000000 : 0); } } } /* Handle exponent5 < 0 */ while (exponent5 < 0) { /* In order to divide the value represented by the VARIANT_DI by 5, it is best to multiply by 2/10. Therefore, exponent10 is decremented, and the mantissa should be multiplied by 2 */ if ((val->bitsnum[2] & 0x80000000) == 0) { /* The mantissa can withstand a shift-left without overflowing */ exponent10--; exponent5++; VARIANT_int_shiftleft(val->bitsnum, 3, 1); } else { /* The mantissa would overflow if shifted. Therefore it should be directly divided by 5. This will lose significant digits, unless by chance the mantissa happens to be divisible by 5 */ exponent5++; VARIANT_int_divbychar(val->bitsnum, 3, 5); } } /* At this point, the mantissa has assimilated the exponent5, but the exponent10 might not be suitable for assignment. The exponent10 must be in the range [-DEC_MAX_SCALE..0], so the mantissa must be scaled up or down appropriately. */ while (hres == S_OK && exponent10 > 0) { /* In order to bring exponent10 down to 0, the mantissa should be multiplied by 10 to compensate. If the exponent10 is too big, this will cause the mantissa to overflow. */ if (0 == VARIANT_int_mulbychar(val->bitsnum, 3, 10)) { exponent10--; } else { hres = DISP_E_OVERFLOW; } } while (exponent10 < -DEC_MAX_SCALE) { int rem10; /* In order to bring exponent up to -DEC_MAX_SCALE, the mantissa should be divided by 10 to compensate. If the exponent10 is too small, this will cause the mantissa to underflow and become 0 */ rem10 = VARIANT_int_divbychar(val->bitsnum, 3, 10); exponent10++; if (VARIANT_int_iszero(val->bitsnum, 3)) { /* Underflow, unable to keep dividing */ exponent10 = 0; } else if (rem10 >= 5) { DWORD x = 1; VARIANT_int_add(val->bitsnum, 3, &x, 1); } } /* This step is required in order to remove excess bits of precision from the end of the bit representation, down to the precision guaranteed by the floating point number. */ if (isDouble) { while (exponent10 < 0 && (val->bitsnum[2] != 0 || (val->bitsnum[1] & 0xFFE00000) != 0)) { int rem10; rem10 = VARIANT_int_divbychar(val->bitsnum, 3, 10); exponent10++; if (rem10 >= 5) { DWORD x = 1; VARIANT_int_add(val->bitsnum, 3, &x, 1); } } } else { while (exponent10 < 0 && (val->bitsnum[2] != 0 || val->bitsnum[1] != 0 || (val->bitsnum[2] == 0 && val->bitsnum[1] == 0 && (val->bitsnum[0] & 0xFF000000) != 0))) { int rem10; rem10 = VARIANT_int_divbychar(val->bitsnum, 3, 10); exponent10++; if (rem10 >= 5) { DWORD x = 1; VARIANT_int_add(val->bitsnum, 3, &x, 1); } } } /* Remove multiples of 10 from the representation */ while (exponent10 < 0) { DWORD temp_bitsnum[3]; memcpy(temp_bitsnum, val->bitsnum, 3 * sizeof(DWORD)); if (0 == VARIANT_int_divbychar(temp_bitsnum, 3, 10)) { exponent10++; memcpy(val->bitsnum, temp_bitsnum, 3 * sizeof(DWORD)); } else break; } /* Scale assignment */ if (hres == S_OK) val->scale = -exponent10; return hres; } typedef union { struct { unsigned int m : 23; unsigned int exp_bias : 8; unsigned int sign : 1; } i; float f; } R4_FIELDS; /* Convert a 32-bit floating point number into a DECIMAL, without using an intermediate string step. */ static HRESULT VARIANT_DI_FromR4(float source, VARIANT_DI * dest) { HRESULT hres = S_OK; R4_FIELDS fx; fx.f = source; /* Detect special cases */ if (fx.i.m == 0 && fx.i.exp_bias == 0) { /* Floating-point zero */ VARIANT_DI_clear(dest); } else if (fx.i.m == 0 && fx.i.exp_bias == 0xFF) { /* Floating-point infinity */ hres = DISP_E_OVERFLOW; } else if (fx.i.exp_bias == 0xFF) { /* Floating-point NaN */ hres = DISP_E_BADVARTYPE; } else { int exponent2; VARIANT_DI_clear(dest); exponent2 = fx.i.exp_bias - 127; /* Get unbiased exponent */ dest->sign = fx.i.sign; /* Sign is simply copied */ /* Copy significant bits to VARIANT_DI mantissa */ dest->bitsnum[0] = fx.i.m; dest->bitsnum[0] &= 0x007FFFFF; if (fx.i.exp_bias == 0) { /* Denormalized number - correct exponent */ exponent2++; } else { /* Add hidden bit to mantissa */ dest->bitsnum[0] |= 0x00800000; } /* The act of copying a FP mantissa as integer bits is equivalent to shifting left the mantissa 23 bits. The exponent2 is reduced to compensate. */ exponent2 -= 23; hres = VARIANT_DI_normalize(dest, exponent2, FALSE); } return hres; } typedef union { struct { unsigned int m_lo : 32; /* 52 bits of precision */ unsigned int m_hi : 20; unsigned int exp_bias : 11; /* bias == 1023 */ unsigned int sign : 1; } i; double d; } R8_FIELDS; /* Convert a 64-bit floating point number into a DECIMAL, without using an intermediate string step. */ static HRESULT VARIANT_DI_FromR8(double source, VARIANT_DI * dest) { HRESULT hres = S_OK; R8_FIELDS fx; fx.d = source; /* Detect special cases */ if (fx.i.m_lo == 0 && fx.i.m_hi == 0 && fx.i.exp_bias == 0) { /* Floating-point zero */ VARIANT_DI_clear(dest); } else if (fx.i.m_lo == 0 && fx.i.m_hi == 0 && fx.i.exp_bias == 0x7FF) { /* Floating-point infinity */ hres = DISP_E_OVERFLOW; } else if (fx.i.exp_bias == 0x7FF) { /* Floating-point NaN */ hres = DISP_E_BADVARTYPE; } else { int exponent2; VARIANT_DI_clear(dest); exponent2 = fx.i.exp_bias - 1023; /* Get unbiased exponent */ dest->sign = fx.i.sign; /* Sign is simply copied */ /* Copy significant bits to VARIANT_DI mantissa */ dest->bitsnum[0] = fx.i.m_lo; dest->bitsnum[1] = fx.i.m_hi; dest->bitsnum[1] &= 0x000FFFFF; if (fx.i.exp_bias == 0) { /* Denormalized number - correct exponent */ exponent2++; } else { /* Add hidden bit to mantissa */ dest->bitsnum[1] |= 0x00100000; } /* The act of copying a FP mantissa as integer bits is equivalent to shifting left the mantissa 52 bits. The exponent2 is reduced to compensate. */ exponent2 -= 52; hres = VARIANT_DI_normalize(dest, exponent2, TRUE); } return hres; } static HRESULT VARIANT_do_division(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut, BOOL round) { HRESULT hRet = S_OK; VARIANT_DI di_left, di_right, di_result; HRESULT divresult; VARIANT_DIFromDec(pDecLeft, &di_left); VARIANT_DIFromDec(pDecRight, &di_right); divresult = VARIANT_DI_div(&di_left, &di_right, &di_result, round); if (divresult != S_OK) { /* division actually overflowed */ hRet = divresult; } else { hRet = S_OK; if (di_result.scale > DEC_MAX_SCALE) { unsigned char remainder = 0; /* division underflowed. In order to comply with the MSDN specifications for DECIMAL ranges, some significant digits must be removed */ WARN("result scale is %u, scaling (with loss of significant digits)...\n", di_result.scale); while (di_result.scale > DEC_MAX_SCALE && !VARIANT_int_iszero(di_result.bitsnum, ARRAY_SIZE(di_result.bitsnum))) { remainder = VARIANT_int_divbychar(di_result.bitsnum, ARRAY_SIZE(di_result.bitsnum), 10); di_result.scale--; } if (di_result.scale > DEC_MAX_SCALE) { WARN("result underflowed, setting to 0\n"); di_result.scale = 0; di_result.sign = 0; } else if (remainder >= 5) /* round up result - native oleaut32 does this */ { unsigned int i; for (remainder = 1, i = 0; i < ARRAY_SIZE(di_result.bitsnum) && remainder; i++) { ULONGLONG digit = di_result.bitsnum[i] + 1; remainder = (digit > 0xFFFFFFFF) ? 1 : 0; di_result.bitsnum[i] = digit & 0xFFFFFFFF; } } } VARIANT_DecFromDI(&di_result, pDecOut); } return hRet; } /************************************************************************ * VarDecDiv (OLEAUT32.178) * * Divide one DECIMAL by another. * * PARAMS * pDecLeft [I] Source * pDecRight [I] Value to divide by * pDecOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarDecDiv16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut) { if (!pDecLeft || !pDecRight || !pDecOut) return E_INVALIDARG; return VARIANT_do_division(pDecLeft, pDecRight, pDecOut, FALSE); } /************************************************************************ * VarDecMul (OLEAUT32.179) * * Multiply one DECIMAL by another. * * PARAMS * pDecLeft [I] Source * pDecRight [I] Value to multiply by * pDecOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarDecMul16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut) { HRESULT hRet = S_OK; VARIANT_DI di_left, di_right, di_result; int mulresult; VARIANT_DIFromDec(pDecLeft, &di_left); VARIANT_DIFromDec(pDecRight, &di_right); mulresult = VARIANT_DI_mul(&di_left, &di_right, &di_result); if (mulresult) { /* multiplication actually overflowed */ hRet = DISP_E_OVERFLOW; } else { if (di_result.scale > DEC_MAX_SCALE) { /* multiplication underflowed. In order to comply with the MSDN specifications for DECIMAL ranges, some significant digits must be removed */ WARN("result scale is %u, scaling (with loss of significant digits)...\n", di_result.scale); while (di_result.scale > DEC_MAX_SCALE && !VARIANT_int_iszero(di_result.bitsnum, ARRAY_SIZE(di_result.bitsnum))) { VARIANT_int_divbychar(di_result.bitsnum, ARRAY_SIZE(di_result.bitsnum), 10); di_result.scale--; } if (di_result.scale > DEC_MAX_SCALE) { WARN("result underflowed, setting to 0\n"); di_result.scale = 0; di_result.sign = 0; } } VARIANT_DecFromDI(&di_result, pDecOut); } return hRet; } /************************************************************************ * VarDecSub (OLEAUT32.181) * * Subtract one DECIMAL from another. * * PARAMS * pDecLeft [I] Source * pDecRight [I] DECIMAL to subtract from pDecLeft * pDecOut [O] Destination * * RETURNS * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarDecSub16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut) { DECIMAL decRight; /* Implement as addition of the negative */ VarDecNeg(pDecRight, &decRight); return VarDecAdd(pDecLeft, &decRight, pDecOut); } /************************************************************************ * VarDecAbs (OLEAUT32.182) * * Convert a DECIMAL into its absolute value. * * PARAMS * pDecIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. This function does not fail. */ HRESULT WINAPI VarDecAbs16(const DECIMAL* pDecIn, DECIMAL* pDecOut) { *pDecOut = *pDecIn; DEC_SIGN(pDecOut) &= ~DECIMAL_NEG; return S_OK; } /************************************************************************ * VarDecFix (OLEAUT32.187) * * Return the integer portion of a DECIMAL. * * PARAMS * pDecIn [I] Source * pDecOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * - The difference between this function and VarDecInt() is that VarDecInt() rounds * negative numbers away from 0, while this function rounds them towards zero. */ HRESULT WINAPI VarDecFix16(const DECIMAL* pDecIn, DECIMAL* pDecOut) { double dbl; HRESULT hr; if (DEC_SIGN(pDecIn) & ~DECIMAL_NEG) return E_INVALIDARG; if (!DEC_SCALE(pDecIn)) { *pDecOut = *pDecIn; /* Already an integer */ return S_OK; } hr = VarR8FromDec(pDecIn, &dbl); if (SUCCEEDED(hr)) { LONGLONG rounded = dbl; hr = VarDecFromI8(rounded, pDecOut); } return hr; } /************************************************************************ * VarDecInt (OLEAUT32.188) * * Return the integer portion of a DECIMAL. * * PARAMS * pDecIn [I] Source * pDecOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination * * NOTES * - The difference between this function and VarDecFix() is that VarDecFix() rounds * negative numbers towards 0, while this function rounds them away from zero. */ HRESULT WINAPI VarDecInt16(const DECIMAL* pDecIn, DECIMAL* pDecOut) { double dbl; HRESULT hr; if (DEC_SIGN(pDecIn) & ~DECIMAL_NEG) return E_INVALIDARG; if (!(DEC_SIGN(pDecIn) & DECIMAL_NEG) || !DEC_SCALE(pDecIn)) return VarDecFix(pDecIn, pDecOut); /* The same, if +ve or no fractionals */ hr = VarR8FromDec(pDecIn, &dbl); if (SUCCEEDED(hr)) { LONGLONG rounded = dbl >= 0.0 ? dbl + 0.5 : dbl - 0.5; hr = VarDecFromI8(rounded, pDecOut); } return hr; } /************************************************************************ * VarDecNeg (OLEAUT32.189) * * Change the sign of a DECIMAL. * * PARAMS * pDecIn [I] Source * pDecOut [O] Destination * * RETURNS * S_OK. This function does not fail. */ HRESULT WINAPI VarDecNeg16(const DECIMAL* pDecIn, DECIMAL* pDecOut) { *pDecOut = *pDecIn; DEC_SIGN(pDecOut) ^= DECIMAL_NEG; return S_OK; } /************************************************************************ * VarDecRound (OLEAUT32.203) * * Change the precision of a DECIMAL. * * PARAMS * pDecIn [I] Source * cDecimals [I] New number of decimals to keep * pDecOut [O] Destination * * RETURNS * Success: S_OK. pDecOut contains the rounded value. * Failure: E_INVALIDARG if any argument is invalid. */ HRESULT WINAPI VarDecRound16(const DECIMAL* pDecIn, int cDecimals, DECIMAL* pDecOut) { DECIMAL divisor, tmp; HRESULT hr; unsigned int i; if (cDecimals < 0 || (DEC_SIGN(pDecIn) & ~DECIMAL_NEG) || DEC_SCALE(pDecIn) > DEC_MAX_SCALE) return E_INVALIDARG; if (cDecimals >= DEC_SCALE(pDecIn)) { *pDecOut = *pDecIn; /* More precision than we have */ return S_OK; } /* truncate significant digits and rescale */ memset(&divisor, 0, sizeof(divisor)); DEC_LO64(&divisor) = 1; memset(&tmp, 0, sizeof(tmp)); DEC_LO64(&tmp) = 10; for (i = 0; i < DEC_SCALE(pDecIn) - cDecimals; ++i) { hr = VarDecMul(&divisor, &tmp, &divisor); if (FAILED(hr)) return hr; } hr = VARIANT_do_division(pDecIn, &divisor, pDecOut, TRUE); if (FAILED(hr)) return hr; DEC_SCALE(pDecOut) = cDecimals; return S_OK; } /************************************************************************ * VarDecCmp (OLEAUT32.204) * * Compare two DECIMAL values. * * PARAMS * pDecLeft [I] Source * pDecRight [I] Value to compare * * RETURNS * Success: VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that pDecLeft * is less than, equal to or greater than pDecRight respectively. * Failure: DISP_E_OVERFLOW, if overflow occurs during the comparison */ HRESULT WINAPI VarDecCmp16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight) { HRESULT hRet; DECIMAL result; if (!pDecLeft || !pDecRight) return VARCMP_NULL; if ((!(DEC_SIGN(pDecLeft) & DECIMAL_NEG)) && (DEC_SIGN(pDecRight) & DECIMAL_NEG) && (DEC_HI32(pDecLeft) | DEC_MID32(pDecLeft) | DEC_LO32(pDecLeft))) return VARCMP_GT; else if ((DEC_SIGN(pDecLeft) & DECIMAL_NEG) && (!(DEC_SIGN(pDecRight) & DECIMAL_NEG)) && (DEC_HI32(pDecLeft) | DEC_MID32(pDecLeft) | DEC_LO32(pDecLeft))) return VARCMP_LT; /* Subtract right from left, and compare the result to 0 */ hRet = VarDecSub(pDecLeft, pDecRight, &result); if (SUCCEEDED(hRet)) { int non_zero = DEC_HI32(&result) | DEC_MID32(&result) | DEC_LO32(&result); if ((DEC_SIGN(&result) & DECIMAL_NEG) && non_zero) hRet = (HRESULT)VARCMP_LT; else if (non_zero) hRet = (HRESULT)VARCMP_GT; else hRet = (HRESULT)VARCMP_EQ; } return hRet; } /************************************************************************ * VarDecCmpR8 (OLEAUT32.298) * * Compare a DECIMAL to a double * * PARAMS * pDecLeft [I] DECIMAL Source * dblRight [I] double to compare to pDecLeft * * RETURNS * Success: VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that dblRight * is less than, equal to or greater than pDecLeft respectively. * Failure: DISP_E_OVERFLOW, if overflow occurs during the comparison */ HRESULT WINAPI VarDecCmpR816(const DECIMAL* pDecLeft, double dblRight) { HRESULT hRet; DECIMAL decRight; hRet = VarDecFromR8(dblRight, &decRight); if (SUCCEEDED(hRet)) hRet = VarDecCmp(pDecLeft, &decRight); return hRet; } #endif /* BOOL */ /************************************************************************ * VarBoolFromUI1 (OLEAUT32.118) * * Convert a VT_UI1 to a VT_BOOL. * * PARAMS * bIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromUI116(BYTE bIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = bIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromI2 (OLEAUT32.119) * * Convert a VT_I2 to a VT_BOOL. * * PARAMS * sIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromI216(SHORT sIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = sIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromI4 (OLEAUT32.120) * * Convert a VT_I4 to a VT_BOOL. * * PARAMS * sIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromI416(LONG lIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = lIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromR4 (OLEAUT32.121) * * Convert a VT_R4 to a VT_BOOL. * * PARAMS * fltIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromR416(FLOAT fltIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = fltIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromR8 (OLEAUT32.122) * * Convert a VT_R8 to a VT_BOOL. * * PARAMS * dblIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromR816(double dblIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = dblIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromDate (OLEAUT32.123) * * Convert a VT_DATE to a VT_BOOL. * * PARAMS * dateIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromDate16(DATE dateIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = dateIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromCy (OLEAUT32.124) * * Convert a VT_CY to a VT_BOOL. * * PARAMS * cyIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromCy16(CY cyIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = cyIn.int64 ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VARIANT_GetLocalisedText [internal] * * Get a localized string from the resources * */ static BOOL VARIANT_GetLocalisedText(LANGID langId, DWORD dwId, OLECHAR16 *lpszDest) { HRSRC hrsrc; FIXME("\n"); #if 0 hrsrc = FindResourceExA( hProxyDll, (LPWSTR)RT_STRING, MAKEINTRESOURCEA((dwId >> 4) + 1), langId ); if (hrsrc) { HGLOBAL hmem = LoadResource( hProxyDll, hrsrc ); if (hmem) { const OLECHAR16 *p; unsigned int i; p = LockResource( hmem ); for (i = 0; i < (dwId & 0x0f); i++) p += *p + 1; memcpy( lpszDest, p + 1, *p * sizeof(OLECHAR16) ); lpszDest[*p] = '\0'; TRACE("got %s for LANGID %08x\n", debugstr_a(lpszDest), langId); return TRUE; } } #endif return FALSE; } /************************************************************************ * VarBoolFromStr (OLEAUT32.125) * * Convert a VT_BSTR to a VT_BOOL. * * PARAMS * strIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pBoolOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pBoolOut is invalid. * DISP_E_TYPEMISMATCH, if the type cannot be converted * * NOTES * - strIn will be recognised if it contains "#TRUE#" or "#FALSE#". Additionally, * it may contain (in any case mapping) the text "true" or "false". * - If dwFlags includes VAR_LOCALBOOL, then the text may also match the * localised text of "True" or "False" in the language specified by lcid. * - If none of these matches occur, the string is treated as a numeric string * and the boolean pBoolOut will be set according to whether the number is zero * or not. The dwFlags parameter is passed to VarR8FromStr() for this conversion. * - If the text is not numeric and does not match any of the above, then * DISP_E_TYPEMISMATCH is returned. */ HRESULT WINAPI VarBoolFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL *pBoolOut) { /* Any VB/VBA programmers out there should recognise these strings... */ static const OLECHAR16 szFalse[] = { '#','F','A','L','S','E','#','\0' }; static const OLECHAR16 szTrue[] = { '#','T','R','U','E','#','\0' }; OLECHAR16 szBuff[64]; LANGID langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT); HRESULT hRes = S_OK; if (!strIn || !pBoolOut) return DISP_E_TYPEMISMATCH; /* Check if we should be comparing against localised text */ if (dwFlags & VAR_LOCALBOOL) { /* Convert our LCID into a usable value */ lcid = ConvertDefaultLocale(lcid); langId = LANGIDFROMLCID(lcid); if (PRIMARYLANGID(langId) == LANG_NEUTRAL) langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT); /* Note: Native oleaut32 always copies strIn and maps halfwidth characters. * I don't think this is needed unless any of the localised text strings * contain characters that can be so mapped. In the event that this is * true for a given language (possibly some Asian languages), then strIn * should be mapped here _only_ if langId is an Id for which this can occur. */ } /* Note that if we are not comparing against localised strings, langId * will have its default value of LANG_ENGLISH. This allows us to mimic * the native behaviour of always checking against English strings even * after we've checked for localised ones. */ VarBoolFromStr_CheckLocalised: if (VARIANT_GetLocalisedText(langId, IDS_TRUE, szBuff)) { /* Compare against localised strings, ignoring case */ if (!strcmpiA(strIn, szBuff)) { *pBoolOut = VARIANT_TRUE; /* Matched localised 'true' text */ return hRes; } VARIANT_GetLocalisedText(langId, IDS_FALSE, szBuff); if (!strcmpiA(strIn, szBuff)) { *pBoolOut = VARIANT_FALSE; /* Matched localised 'false' text */ return hRes; } } if (langId != MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT)) { /* We have checked the localised text, now check English */ langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT); goto VarBoolFromStr_CheckLocalised; } /* All checks against localised text have failed, try #TRUE#/#FALSE# */ if (!strcmpA(strIn, szFalse)) *pBoolOut = VARIANT_FALSE; else if (!strcmpA(strIn, szTrue)) *pBoolOut = VARIANT_TRUE; else { double d; /* If this string is a number, convert it as one */ hRes = VarR8FromStr(strIn, lcid, dwFlags, &d); if (SUCCEEDED(hRes)) *pBoolOut = d ? VARIANT_TRUE : VARIANT_FALSE; } return hRes; } /************************************************************************ * VarBoolFromDisp (OLEAUT32.126) * * Convert a VT_DISPATCH to a VT_BOOL. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pBoolOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarBoolFromDisp16(SEGIDispatch pdispIn, LCID lcid, VARIANT_BOOL *pBoolOut) { return VARIANT_FromDisp(pdispIn, lcid, pBoolOut, VT_BOOL, 0); } /************************************************************************ * VarBoolFromI1 (OLEAUT32.233) * * Convert a VT_I1 to a VT_BOOL. * * PARAMS * cIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromI116(signed char cIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = cIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromUI2 (OLEAUT32.234) * * Convert a VT_UI2 to a VT_BOOL. * * PARAMS * usIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromUI216(USHORT usIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = usIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromUI4 (OLEAUT32.235) * * Convert a VT_UI4 to a VT_BOOL. * * PARAMS * ulIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromUI416(ULONG ulIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = ulIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } #ifdef AVAIL_32BIT_VAR /************************************************************************ * VarBoolFromDec (OLEAUT32.236) * * Convert a VT_DECIMAL to a VT_BOOL. * * PARAMS * pDecIn [I] Source * pBoolOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pDecIn is invalid. */ HRESULT WINAPI VarBoolFromDec16(DECIMAL* pDecIn, VARIANT_BOOL *pBoolOut) { if (DEC_SCALE(pDecIn) > DEC_MAX_SCALE || (DEC_SIGN(pDecIn) & ~DECIMAL_NEG)) return E_INVALIDARG; if (DEC_HI32(pDecIn) || DEC_MID32(pDecIn) || DEC_LO32(pDecIn)) *pBoolOut = VARIANT_TRUE; else *pBoolOut = VARIANT_FALSE; return S_OK; } #endif /************************************************************************ * VarBoolFromI8 (OLEAUT32.370) * * Convert a VT_I8 to a VT_BOOL. * * PARAMS * ullIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromI816(LONG64 llIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = llIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /************************************************************************ * VarBoolFromUI8 (OLEAUT32.371) * * Convert a VT_UI8 to a VT_BOOL. * * PARAMS * ullIn [I] Source * pBoolOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarBoolFromUI816(ULONG64 ullIn, VARIANT_BOOL *pBoolOut) { *pBoolOut = ullIn ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } /* SEGBSTR16 */ /* Write a number from a UI8 and sign */ static OLECHAR16 *VARIANT_WriteNumber(ULONG64 ulVal, OLECHAR16* szOut) { do { OLECHAR16 ulNextDigit = ulVal % 10; *szOut-- = '0' + ulNextDigit; ulVal = (ulVal - ulNextDigit) / 10; } while (ulVal); szOut++; return szOut; } /* Create a (possibly localised) SEGBSTR16 from a UI8 and sign */ static SEGBSTR16 VARIANT_MakeBstr(LCID lcid, DWORD dwFlags, OLECHAR16 *szOut) { OLECHAR16 szConverted[256]; if (dwFlags & VAR_NEGATIVE) *--szOut = '-'; if (dwFlags & LOCALE_USE_NLS) { /* Format the number for the locale */ szConverted[0] = '\0'; GetNumberFormatA(lcid, dwFlags & LOCALE_NOUSEROVERRIDE, szOut, NULL, szConverted, ARRAY_SIZE(szConverted)); szOut = szConverted; } return SysAllocStringByteLen16((LPCSTR)szOut, strlen(szOut) * sizeof(OLECHAR16)); } /* Create a (possibly localised) SEGBSTR16 from a UI8 and sign */ static HRESULT VARIANT_BstrFromUInt(ULONG64 ulVal, LCID lcid, DWORD dwFlags, SEGBSTR16 *pbstrOut) { OLECHAR16 szBuff[64], *szOut = szBuff + ARRAY_SIZE(szBuff) - 1; if (!pbstrOut) return E_INVALIDARG; /* Create the basic number string */ *szOut-- = '\0'; szOut = VARIANT_WriteNumber(ulVal, szOut); *pbstrOut = VARIANT_MakeBstr(lcid, dwFlags, szOut); TRACE("returning %s\n", debugstr_a(MapSL(*pbstrOut))); return *pbstrOut ? S_OK : E_OUTOFMEMORY; } /****************************************************************************** * VarBstrFromUI1 (OLEAUT32.108) * * Convert a VT_UI1 to a VT_BSTR. * * PARAMS * bIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromUI116(BYTE bIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { return VARIANT_BstrFromUInt(bIn, lcid, dwFlags, pbstrOut); } /****************************************************************************** * VarBstrFromI2 (OLEAUT32.109) * * Convert a VT_I2 to a VT_BSTR. * * PARAMS * sIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromI216(short sIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { ULONG64 ul64 = sIn; if (sIn < 0) { ul64 = -sIn; dwFlags |= VAR_NEGATIVE; } return VARIANT_BstrFromUInt(ul64, lcid, dwFlags, pbstrOut); } /****************************************************************************** * VarBstrFromI4 (OLEAUT32.110) * * Convert a VT_I4 to a VT_BSTR. * * PARAMS * lIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromI416(LONG lIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { ULONG64 ul64 = lIn; if (lIn < 0) { ul64 = -(LONG64)lIn; dwFlags |= VAR_NEGATIVE; } return VARIANT_BstrFromUInt(ul64, lcid, dwFlags, pbstrOut); } static SEGBSTR16 VARIANT_BstrReplaceDecimal(const OLECHAR16 * buff, LCID lcid, ULONG dwFlags) { SEGBSTR16 bstrOut; OLECHAR16 lpDecimalSep[16]; /* Native oleaut32 uses the locale-specific decimal separator even in the absence of the LOCALE_USE_NLS flag. For example, the Spanish/Latin American locales will see "one thousand and one tenth" as "1000,1" instead of "1000.1" (notice the comma). The following code checks for the need to replace the decimal separator, and if so, will prepare an appropriate NUMBERFMTW structure to do the job via GetNumberFormatA(). */ GetLocaleInfoA(lcid, LOCALE_SDECIMAL | (dwFlags & LOCALE_NOUSEROVERRIDE), lpDecimalSep, ARRAY_SIZE(lpDecimalSep)); if (lpDecimalSep[0] == '.' && lpDecimalSep[1] == '\0') { /* locale is compatible with English - return original string */ bstrOut = SysAllocString16(buff); } else { OLECHAR16 *p; OLECHAR16 numbuff[256]; OLECHAR16 empty[] = {'\0'}; NUMBERFMTW minFormat; minFormat.NumDigits = 0; minFormat.LeadingZero = 0; minFormat.Grouping = 0; minFormat.lpDecimalSep = lpDecimalSep; minFormat.lpThousandSep = empty; minFormat.NegativeOrder = 1; /* NLS_NEG_LEFT */ /* count number of decimal digits in string */ p = strchrA( buff, '.' ); if (p) minFormat.NumDigits = strlenA(p + 1); numbuff[0] = '\0'; if (!GetNumberFormatA(lcid, 0, buff, &minFormat, numbuff, ARRAY_SIZE(numbuff))) { WARN("GetNumberFormatA() failed, returning raw number string instead\n"); bstrOut = SysAllocString16(buff); } else { TRACE("created minimal NLS string %s\n", debugstr_a(numbuff)); bstrOut = SysAllocString16(numbuff); } } return bstrOut; } static HRESULT VARIANT_BstrFromReal(DOUBLE dblIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut, LPCSTR lpszFormat) { OLECHAR16 buff[256]; if (!pbstrOut) return E_INVALIDARG; sprintfA( buff, lpszFormat, dblIn ); /* Negative zeroes are disallowed (some applications depend on this). If buff starts with a minus, and then nothing follows but zeroes and/or a period, it is a negative zero and is replaced with a canonical zero. This duplicates native oleaut32 behavior. */ if (buff[0] == '-') { const OLECHAR16 szAccept[] = {'0', '.', '\0'}; if (strlenA(buff + 1) == strspnA(buff + 1, szAccept)) { buff[0] = '0'; buff[1] = '\0'; } } TRACE("created string %s\n", debugstr_a(buff)); if (dwFlags & LOCALE_USE_NLS) { OLECHAR16 numbuff[256]; /* Format the number for the locale */ numbuff[0] = '\0'; GetNumberFormatA(lcid, dwFlags & LOCALE_NOUSEROVERRIDE, buff, NULL, numbuff, ARRAY_SIZE(numbuff)); TRACE("created NLS string %s\n", debugstr_a(numbuff)); *pbstrOut = SysAllocString16(numbuff); } else { *pbstrOut = VARIANT_BstrReplaceDecimal(buff, lcid, dwFlags); } return *pbstrOut ? S_OK : E_OUTOFMEMORY; } /****************************************************************************** * VarBstrFromR4 (OLEAUT32.111) * * Convert a VT_R4 to a VT_BSTR. * * PARAMS * fltIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromR416(FLOAT fltIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { return VARIANT_BstrFromReal(fltIn, lcid, dwFlags, pbstrOut, szFloatFormatW); } /****************************************************************************** * VarBstrFromR8 (OLEAUT32.112) * * Convert a VT_R8 to a VT_BSTR. * * PARAMS * dblIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromR816_conv(DWORD dblIn1, DWORD dblIn2, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarBstrFromR816(*(double *)&dbl, lcid, dwFlags, pbstrOut); } HRESULT WINAPI VarBstrFromR816(double dblIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { fix_double(&dblIn); return VARIANT_BstrFromReal(dblIn, lcid, dwFlags, pbstrOut, szDoubleFormatW); } /****************************************************************************** * VarBstrFromCy [OLEAUT32.113] * * Convert a VT_CY to a VT_BSTR. * * PARAMS * cyIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromCy16_conv(DWORD dblIn1, DWORD dblIn2, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarBstrFromCy16(*(CY *)&dbl, lcid, dwFlags, pbstrOut); } HRESULT WINAPI VarBstrFromCy16(CY cyIn, LCID lcid, ULONG dwFlags, SEGBSTR16 *pbstrOut) { OLECHAR16 buff[256]; VARIANT_DI decVal; fix_double(&cyIn); if (!pbstrOut) return E_INVALIDARG; decVal.scale = 4; decVal.sign = 0; decVal.bitsnum[0] = cyIn.s.Lo; decVal.bitsnum[1] = cyIn.s.Hi; if (cyIn.s.Hi & 0x80000000UL) { DWORD one = 1; /* Negative number! */ decVal.sign = 1; decVal.bitsnum[0] = ~decVal.bitsnum[0]; decVal.bitsnum[1] = ~decVal.bitsnum[1]; VARIANT_int_add(decVal.bitsnum, 3, &one, 1); } decVal.bitsnum[2] = 0; VARIANT_DI_tostringA(&decVal, buff, ARRAY_SIZE(buff)); if (dwFlags & LOCALE_USE_NLS) { OLECHAR16 cybuff[256]; /* Format the currency for the locale */ cybuff[0] = '\0'; GetCurrencyFormatA(lcid, dwFlags & LOCALE_NOUSEROVERRIDE, buff, NULL, cybuff, ARRAY_SIZE(cybuff)); *pbstrOut = SysAllocString16(cybuff); } else *pbstrOut = VARIANT_BstrReplaceDecimal(buff,lcid,dwFlags); return *pbstrOut ? S_OK : E_OUTOFMEMORY; } static inline int output_int_len(int o, int min_len, OLECHAR16 *date, int date_len) { int len, tmp; if(min_len >= date_len) return -1; for(len=0, tmp=o; tmp; tmp/=10) len++; if(!len) len++; if(len >= date_len) return -1; for(tmp=min_len-len; tmp>0; tmp--) *date++ = '0'; for(tmp=len; tmp>0; tmp--, o/=10) date[tmp-1] = '0' + o%10; return min_len>len ? min_len : len; } /* format date string, similar to GetDateFormatW function but works on bigger range of dates */ BOOL get_date_format(LCID lcid, DWORD flags, const SYSTEMTIME *st, const OLECHAR16 *fmt, OLECHAR16 *date, int date_len) { static const LCTYPE dayname[] = { LOCALE_SDAYNAME7, LOCALE_SDAYNAME1, LOCALE_SDAYNAME2, LOCALE_SDAYNAME3, LOCALE_SDAYNAME4, LOCALE_SDAYNAME5, LOCALE_SDAYNAME6 }; static const LCTYPE sdayname[] = { LOCALE_SABBREVDAYNAME7, LOCALE_SABBREVDAYNAME1, LOCALE_SABBREVDAYNAME2, LOCALE_SABBREVDAYNAME3, LOCALE_SABBREVDAYNAME4, LOCALE_SABBREVDAYNAME5, LOCALE_SABBREVDAYNAME6 }; static const LCTYPE monthname[] = { LOCALE_SMONTHNAME1, LOCALE_SMONTHNAME2, LOCALE_SMONTHNAME3, LOCALE_SMONTHNAME4, LOCALE_SMONTHNAME5, LOCALE_SMONTHNAME6, LOCALE_SMONTHNAME7, LOCALE_SMONTHNAME8, LOCALE_SMONTHNAME9, LOCALE_SMONTHNAME10, LOCALE_SMONTHNAME11, LOCALE_SMONTHNAME12 }; static const LCTYPE smonthname[] = { LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2, LOCALE_SABBREVMONTHNAME3, LOCALE_SABBREVMONTHNAME4, LOCALE_SABBREVMONTHNAME5, LOCALE_SABBREVMONTHNAME6, LOCALE_SABBREVMONTHNAME7, LOCALE_SABBREVMONTHNAME8, LOCALE_SABBREVMONTHNAME9, LOCALE_SABBREVMONTHNAME10, LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12 }; if(flags & ~(LOCALE_NOUSEROVERRIDE|VAR_DATEVALUEONLY)) FIXME("ignoring flags %x\n", flags); flags &= LOCALE_NOUSEROVERRIDE; while(*fmt && date_len) { int count = 1; switch(*fmt) { case 'd': case 'M': case 'y': case 'g': while(*fmt == *(fmt+count)) count++; fmt += count-1; } switch(*fmt) { case 'd': if(count >= 4) count = GetLocaleInfoA(lcid, dayname[st->wDayOfWeek] | flags, date, date_len)-1; else if(count == 3) count = GetLocaleInfoA(lcid, sdayname[st->wDayOfWeek] | flags, date, date_len)-1; else count = output_int_len(st->wDay, count, date, date_len); break; case 'M': if(count >= 4) count = GetLocaleInfoA(lcid, monthname[st->wMonth-1] | flags, date, date_len)-1; else if(count == 3) count = GetLocaleInfoA(lcid, smonthname[st->wMonth-1] | flags, date, date_len)-1; else count = output_int_len(st->wMonth, count, date, date_len); break; case 'y': if(count >= 3) count = output_int_len(st->wYear, 0, date, date_len); else count = output_int_len(st->wYear%100, count, date, date_len); break; case 'g': if(count == 2) { FIXME("Should be using GetCalendarInfo(CAL_SERASTRING), defaulting to 'AD'\n"); *date++ = 'A'; date_len--; if(date_len) *date = 'D'; else count = -1; break; } /* fall through */ default: *date = *fmt; } if(count < 0) break; fmt++; date += count; date_len -= count; } if(!date_len) return FALSE; *date++ = 0; return TRUE; } void map_bstr32_16(SEGPTR *a16, const BSTR *a32); /****************************************************************************** * VarBstrFromDate [OLEAUT32.114] * * Convert a VT_DATE to a VT_BSTR. * * PARAMS * dateIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut or dateIn is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromDate16_conv(DWORD dblIn1, DWORD dblIn2, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2; return VarBstrFromDate16(*(DATE *)&dbl, lcid, dwFlags, pbstrOut); } HRESULT WINAPI VarBstrFromDate16(DATE dateIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { BSTR bstr32; HRESULT res; fix_double(&dateIn); TRACE("(%g,0x%08x,0x%08x,%p)\n", dateIn, lcid, dwFlags, pbstrOut); res = VarBstrFromDate(dateIn, lcid, dwFlags, &bstr32); if (FAILED(res)) { *pbstrOut = 0; return hresult32_16(res); } map_bstr32_16(pbstrOut, &bstr32); SysFreeString(bstr32); return hresult32_16(res); #if 0 SYSTEMTIME st; DWORD dwFormatFlags = dwFlags & LOCALE_NOUSEROVERRIDE; OLECHAR16 date[128], fmt_buff[80], *time; TRACE("(%g,0x%08x,0x%08x,%p)\n", dateIn, lcid, dwFlags, pbstrOut); if (!pbstrOut || !VariantTimeToSystemTime(dateIn, &st)) return E_INVALIDARG; *pbstrOut = NULL; if (dwFlags & VAR_CALENDAR_THAI) st.wYear += 553; /* Use the Thai buddhist calendar year */ else if (dwFlags & (VAR_CALENDAR_HIJRI|VAR_CALENDAR_GREGORIAN)) FIXME("VAR_CALENDAR_HIJRI/VAR_CALENDAR_GREGORIAN not handled\n"); if (dwFlags & LOCALE_USE_NLS) dwFlags &= ~(VAR_TIMEVALUEONLY|VAR_DATEVALUEONLY); else { double whole = dateIn < 0 ? ceil(dateIn) : floor(dateIn); double partial = dateIn - whole; if (whole == 0.0) dwFlags |= VAR_TIMEVALUEONLY; else if (partial > -1e-12 && partial < 1e-12) dwFlags |= VAR_DATEVALUEONLY; } if (dwFlags & VAR_TIMEVALUEONLY) date[0] = '\0'; else if (!GetLocaleInfoA(lcid, LOCALE_SSHORTDATE, fmt_buff, ARRAY_SIZE(fmt_buff)) || !get_date_format(lcid, dwFlags, &st, fmt_buff, date, ARRAY_SIZE(date))) return E_INVALIDARG; if (!(dwFlags & VAR_DATEVALUEONLY)) { time = date + strlenA(date); if (time != date) *time++ = ' '; if (!GetTimeFormatA(lcid, dwFormatFlags, &st, NULL, time, ARRAY_SIZE(date)-(time-date))) return E_INVALIDARG; } *pbstrOut = SysAllocString16(date); if (*pbstrOut) TRACE("returning %s\n", debugstr_a(*pbstrOut)); return *pbstrOut ? S_OK : E_OUTOFMEMORY; #endif } /****************************************************************************** * VarBstrFromBool (OLEAUT32.116) * * Convert a VT_BOOL to a VT_BSTR. * * PARAMS * boolIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. * * NOTES * If dwFlags includes VARIANT_LOCALBOOL, this function converts to the * localised text of "True" or "False". To convert a bool into a * numeric string of "0" or "-1", use VariantChangeTypeTypeEx(). */ HRESULT WINAPI VarBstrFromBool16(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { OLECHAR16 szBuff[64]; DWORD dwResId = IDS_TRUE; LANGID langId; TRACE("%d,0x%08x,0x%08x,%p\n", boolIn, lcid, dwFlags, pbstrOut); if (!pbstrOut) return E_INVALIDARG; /* VAR_BOOLONOFF and VAR_BOOLYESNO are internal flags used * for variant formatting */ switch (dwFlags & (VAR_LOCALBOOL|VAR_BOOLONOFF|VAR_BOOLYESNO)) { case VAR_BOOLONOFF: dwResId = IDS_ON; break; case VAR_BOOLYESNO: dwResId = IDS_YES; break; case VAR_LOCALBOOL: break; default: lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),SORT_DEFAULT); } lcid = ConvertDefaultLocale(lcid); langId = LANGIDFROMLCID(lcid); if (PRIMARYLANGID(langId) == LANG_NEUTRAL) langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT); if (boolIn == VARIANT_FALSE) dwResId++; /* Use negative form */ VarBstrFromBool_GetLocalised: if (VARIANT_GetLocalisedText(langId, dwResId, szBuff)) { *pbstrOut = SysAllocString16(szBuff); return *pbstrOut ? S_OK : E_OUTOFMEMORY; } if (langId != MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT)) { langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT); goto VarBstrFromBool_GetLocalised; } /* Should never get here */ WARN("Failed to load bool text!\n"); return E_OUTOFMEMORY; } /****************************************************************************** * VarBstrFromI1 (OLEAUT32.229) * * Convert a VT_I1 to a VT_BSTR. * * PARAMS * cIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromI116(signed char cIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { ULONG64 ul64 = cIn; if (cIn < 0) { ul64 = -cIn; dwFlags |= VAR_NEGATIVE; } return VARIANT_BstrFromUInt(ul64, lcid, dwFlags, pbstrOut); } /****************************************************************************** * VarBstrFromUI2 (OLEAUT32.230) * * Convert a VT_UI2 to a VT_BSTR. * * PARAMS * usIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromUI216(USHORT usIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { return VARIANT_BstrFromUInt(usIn, lcid, dwFlags, pbstrOut); } /****************************************************************************** * VarBstrFromUI4 (OLEAUT32.231) * * Convert a VT_UI4 to a VT_BSTR. * * PARAMS * ulIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromUI416(ULONG ulIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { return VARIANT_BstrFromUInt(ulIn, lcid, dwFlags, pbstrOut); } #ifdef AVAIL_32BIT_VAR /****************************************************************************** * VarBstrFromDec (OLEAUT32.232) * * Convert a VT_DECIMAL to a VT_BSTR. * * PARAMS * pDecIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromDec16(DECIMAL* pDecIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { OLECHAR16 buff[256]; VARIANT_DI temp; if (!pbstrOut) return E_INVALIDARG; VARIANT_DIFromDec(pDecIn, &temp); VARIANT_DI_tostringA(&temp, buff, 256); if (dwFlags & LOCALE_USE_NLS) { OLECHAR16 numbuff[256]; /* Format the number for the locale */ numbuff[0] = '\0'; GetNumberFormatA(lcid, dwFlags & LOCALE_NOUSEROVERRIDE, buff, NULL, numbuff, ARRAY_SIZE(numbuff)); TRACE("created NLS string %s\n", debugstr_a(numbuff)); *pbstrOut = SysAllocString16(numbuff); } else { *pbstrOut = VARIANT_BstrReplaceDecimal(buff, lcid, dwFlags); } TRACE("returning %s\n", debugstr_a(*pbstrOut)); return *pbstrOut ? S_OK : E_OUTOFMEMORY; } #endif /************************************************************************ * VarBstrFromI8 (OLEAUT32.370) * * Convert a VT_I8 to a VT_BSTR. * * PARAMS * llIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromI816(LONG64 llIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { ULONG64 ul64 = llIn; if (llIn < 0) { ul64 = -llIn; dwFlags |= VAR_NEGATIVE; } return VARIANT_BstrFromUInt(ul64, lcid, dwFlags, pbstrOut); } /************************************************************************ * VarBstrFromUI8 (OLEAUT32.371) * * Convert a VT_UI8 to a VT_BSTR. * * PARAMS * ullIn [I] Source * lcid [I] LCID for the conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrFromUI816(ULONG64 ullIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { return VARIANT_BstrFromUInt(ullIn, lcid, dwFlags, pbstrOut); } /************************************************************************ * VarBstrFromDisp (OLEAUT32.115) * * Convert a VT_DISPATCH to a SEGBSTR16. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * dwFlags [I] Flags controlling the conversion (VAR_ flags from "oleauto.h") * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarBstrFromDisp16(SEGIDispatch pdispIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut) { return VARIANT_FromDisp(pdispIn, lcid, pbstrOut, VT_BSTR, dwFlags); } /********************************************************************** * VarBstrCat (OLEAUT32.313) * * Concatenate two SEGBSTR16 values. * * PARAMS * pbstrLeft [I] Source * pbstrRight [I] Value to concatenate * pbstrOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if pbstrOut is invalid. * E_OUTOFMEMORY, if memory allocation fails. */ HRESULT WINAPI VarBstrCat16(SEGBSTR16 pbstrLeft, SEGBSTR16 pbstrRight, SEGBSTR16 *pbstrOut) { unsigned int lenLeft, lenRight; TRACE("%s,%s,%p\n", debugstr_an(BSTR_PTR(pbstrLeft), SysStringLen16(pbstrLeft)), debugstr_an(BSTR_PTR(pbstrRight), SysStringLen16(pbstrRight)), BSTR_PTR(pbstrOut)); if (!pbstrOut) return E_INVALIDARG; /* use byte length here to properly handle ansi-allocated SEGBSTR16s */ lenLeft = pbstrLeft ? SysStringByteLen16(pbstrLeft) : 0; lenRight = pbstrRight ? SysStringByteLen16(pbstrRight) : 0; *pbstrOut = SysAllocStringByteLen16(NULL, lenLeft + lenRight); if (!*pbstrOut) return E_OUTOFMEMORY; ((OLECHAR16*)MapSL(*pbstrOut))[0] = '\0'; if (pbstrLeft) memcpy(BSTR_PTR(*pbstrOut), BSTR_PTR(pbstrLeft), lenLeft); if (pbstrRight) memcpy(BSTR_PTR((CHAR*)*pbstrOut + lenLeft), BSTR_PTR(pbstrRight), lenRight); TRACE("%s\n", debugstr_an(BSTR_PTR(*pbstrOut), SysStringLen16(*pbstrOut))); return S_OK; } /********************************************************************** * VarBstrCmp (OLEAUT32.314) * * Compare two SEGBSTR16 values. * * PARAMS * pbstrLeft [I] Source * pbstrRight [I] Value to compare * lcid [I] LCID for the comparison * dwFlags [I] Flags to pass directly to CompareStringA(). * * RETURNS * VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that pbstrLeft is less * than, equal to or greater than pbstrRight respectively. * * NOTES * VARCMP_NULL is NOT returned if either string is NULL unlike MSDN * states. A NULL SEGBSTR16 pointer is equivalent to an empty string. * If LCID is equal to 0, a byte by byte comparison is performed. */ HRESULT WINAPI VarBstrCmp16(SEGBSTR16 pbstrLeft, SEGBSTR16 pbstrRight, LCID lcid, DWORD dwFlags) { HRESULT hres; int ret; TRACE("%s,%s,%d,%08x\n", debugstr_an(BSTR_PTR(pbstrLeft), SysStringLen16(pbstrLeft)), debugstr_an(BSTR_PTR(pbstrRight), SysStringLen16(pbstrRight)), lcid, dwFlags); if (!pbstrLeft || !*BSTR_PTR(pbstrLeft)) { if (pbstrRight && *BSTR_PTR(pbstrRight)) return VARCMP_LT; } else if (!pbstrRight || !*BSTR_PTR(pbstrRight)) return VARCMP_GT; if (lcid == 0) { unsigned int lenLeft = SysStringByteLen16(pbstrLeft); unsigned int lenRight = SysStringByteLen16(pbstrRight); ret = memcmp(BSTR_PTR(pbstrLeft), BSTR_PTR(pbstrRight), min(lenLeft, lenRight)); if (ret < 0) return VARCMP_LT; if (ret > 0) return VARCMP_GT; if (lenLeft < lenRight) return VARCMP_LT; if (lenLeft > lenRight) return VARCMP_GT; return VARCMP_EQ; } else { unsigned int lenLeft = SysStringLen16(pbstrLeft); unsigned int lenRight = SysStringLen16(pbstrRight); if (lenLeft == 0 || lenRight == 0) { if (lenLeft == 0 && lenRight == 0) return VARCMP_EQ; return lenLeft < lenRight ? VARCMP_LT : VARCMP_GT; } hres = CompareStringA(lcid, dwFlags, BSTR_PTR(pbstrLeft), lenLeft, BSTR_PTR(pbstrRight), lenRight) - CSTR_LESS_THAN; TRACE("%d\n", hres); return hres; } } /* * DATE */ /****************************************************************************** * VarDateFromUI1 (OLEAUT32.88) * * Convert a VT_UI1 to a VT_DATE. * * PARAMS * bIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromUI116(BYTE bIn, DATE* pdateOut) { return VarR8FromUI1(bIn, pdateOut); } /****************************************************************************** * VarDateFromI2 (OLEAUT32.89) * * Convert a VT_I2 to a VT_DATE. * * PARAMS * sIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromI216(short sIn, DATE* pdateOut) { return VarR8FromI2(sIn, pdateOut); } /****************************************************************************** * VarDateFromI4 (OLEAUT32.90) * * Convert a VT_I4 to a VT_DATE. * * PARAMS * lIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromI416(LONG lIn, DATE* pdateOut) { return VarDateFromR8(lIn, pdateOut); } /****************************************************************************** * VarDateFromR4 (OLEAUT32.91) * * Convert a VT_R4 to a VT_DATE. * * PARAMS * fltIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromR416(FLOAT fltIn, DATE* pdateOut) { return VarR8FromR4(fltIn, pdateOut); } /****************************************************************************** * VarDateFromR8 (OLEAUT32.92) * * Convert a VT_R8 to a VT_DATE. * * PARAMS * dblIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromR816(double dblIn, DATE* pdateOut) { if (dblIn <= (DATE_MIN - 1.0) || dblIn >= (DATE_MAX + 1.0)) return DISP_E_OVERFLOW; *pdateOut = (DATE)dblIn; return S_OK; } /********************************************************************** * VarDateFromDisp (OLEAUT32.95) * * Convert a VT_DISPATCH to a VT_DATE. * * PARAMS * pdispIn [I] Source * lcid [I] LCID for conversion * pdateOut [O] Destination * * RETURNS * Success: S_OK. * Failure: E_INVALIDARG, if the source value is invalid * DISP_E_OVERFLOW, if the value will not fit in the destination * DISP_E_TYPEMISMATCH, if the type cannot be converted */ HRESULT WINAPI VarDateFromDisp16(SEGIDispatch pdispIn, LCID lcid, DATE* pdateOut) { return VARIANT_FromDisp(pdispIn, lcid, pdateOut, VT_DATE, 0); } /****************************************************************************** * VarDateFromBool (OLEAUT32.96) * * Convert a VT_BOOL to a VT_DATE. * * PARAMS * boolIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromBool16(VARIANT_BOOL boolIn, DATE* pdateOut) { return VarR8FromBool(boolIn, pdateOut); } /********************************************************************** * VarDateFromCy (OLEAUT32.93) * * Convert a VT_CY to a VT_DATE. * * PARAMS * lIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromCy16(CY cyIn, DATE* pdateOut) { return VarR8FromCy(cyIn, pdateOut); } /* Date string parsing */ #define DP_TIMESEP 0x01 /* Time separator ( _must_ remain 0x1, used as a bitmask) */ #define DP_DATESEP 0x02 /* Date separator */ #define DP_MONTH 0x04 /* Month name */ #define DP_AM 0x08 /* AM */ #define DP_PM 0x10 /* PM */ typedef struct tagDATEPARSE { DWORD dwCount; /* Number of fields found so far (maximum 6) */ DWORD dwParseFlags; /* Global parse flags (DP_ Flags above) */ DWORD dwFlags[6]; /* Flags for each field */ DWORD dwValues[6]; /* Value of each field */ } DATEPARSE; #define TIMEFLAG(i) ((dp.dwFlags[i] & DP_TIMESEP) << i) #define IsLeapYear(y) (((y % 4) == 0) && (((y % 100) != 0) || ((y % 400) == 0))) /* Determine if a day is valid in a given month of a given year */ static BOOL VARIANT_IsValidMonthDay(DWORD day, DWORD month, DWORD year) { static const BYTE days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (day && month && month < 13) { if (day <= days[month] || (month == 2 && day == 29 && IsLeapYear(year))) return TRUE; } return FALSE; } /* Possible orders for 3 numbers making up a date */ #define ORDER_MDY 0x01 #define ORDER_YMD 0x02 #define ORDER_YDM 0x04 #define ORDER_DMY 0x08 #define ORDER_MYD 0x10 /* Synthetic order, used only for funky 2 digit dates */ /* Determine a date for a particular locale, from 3 numbers */ static inline HRESULT VARIANT_MakeDate(DATEPARSE *dp, DWORD iDate, DWORD offset, SYSTEMTIME *st) { DWORD dwAllOrders, dwTry, dwCount = 0, v1, v2, v3; if (!dp->dwCount) { v1 = 30; /* Default to (Variant) 0 date part */ v2 = 12; v3 = 1899; goto VARIANT_MakeDate_OK; } v1 = dp->dwValues[offset + 0]; v2 = dp->dwValues[offset + 1]; if (dp->dwCount == 2) { SYSTEMTIME current; GetSystemTime(¤t); v3 = current.wYear; } else v3 = dp->dwValues[offset + 2]; TRACE("(%d,%d,%d,%d,%d)\n", v1, v2, v3, iDate, offset); /* If one number must be a month (Because a month name was given), then only * consider orders with the month in that position. * If we took the current year as 'v3', then only allow a year in that position. */ if (dp->dwFlags[offset + 0] & DP_MONTH) { dwAllOrders = ORDER_MDY; } else if (dp->dwFlags[offset + 1] & DP_MONTH) { dwAllOrders = ORDER_DMY; if (dp->dwCount > 2) dwAllOrders |= ORDER_YMD; } else if (dp->dwCount > 2 && dp->dwFlags[offset + 2] & DP_MONTH) { dwAllOrders = ORDER_YDM; } else { dwAllOrders = ORDER_MDY|ORDER_DMY; if (dp->dwCount > 2) dwAllOrders |= (ORDER_YMD|ORDER_YDM); } VARIANT_MakeDate_Start: TRACE("dwAllOrders is 0x%08x\n", dwAllOrders); while (dwAllOrders) { DWORD dwTemp; if (dwCount == 0) { /* First: Try the order given by iDate */ switch (iDate) { case 0: dwTry = dwAllOrders & ORDER_MDY; break; case 1: dwTry = dwAllOrders & ORDER_DMY; break; default: dwTry = dwAllOrders & ORDER_YMD; break; } } else if (dwCount == 1) { /* Second: Try all the orders compatible with iDate */ switch (iDate) { case 0: dwTry = dwAllOrders & ~(ORDER_DMY|ORDER_YDM); break; case 1: dwTry = dwAllOrders & ~(ORDER_MDY|ORDER_YDM|ORDER_MYD); break; default: dwTry = dwAllOrders & ~(ORDER_DMY|ORDER_YDM); break; } } else { /* Finally: Try any remaining orders */ dwTry = dwAllOrders; } TRACE("Attempt %d, dwTry is 0x%08x\n", dwCount, dwTry); dwCount++; if (!dwTry) continue; #define DATE_SWAP(x,y) do { dwTemp = x; x = y; y = dwTemp; } while (0) if (dwTry & ORDER_MDY) { if (VARIANT_IsValidMonthDay(v2,v1,v3)) { DATE_SWAP(v1,v2); goto VARIANT_MakeDate_OK; } dwAllOrders &= ~ORDER_MDY; } if (dwTry & ORDER_YMD) { if (VARIANT_IsValidMonthDay(v3,v2,v1)) { DATE_SWAP(v1,v3); goto VARIANT_MakeDate_OK; } dwAllOrders &= ~ORDER_YMD; } if (dwTry & ORDER_YDM) { if (VARIANT_IsValidMonthDay(v2,v3,v1)) { DATE_SWAP(v1,v2); DATE_SWAP(v2,v3); goto VARIANT_MakeDate_OK; } dwAllOrders &= ~ORDER_YDM; } if (dwTry & ORDER_DMY) { if (VARIANT_IsValidMonthDay(v1,v2,v3)) goto VARIANT_MakeDate_OK; dwAllOrders &= ~ORDER_DMY; } if (dwTry & ORDER_MYD) { /* Only occurs if we are trying a 2 year date as M/Y not D/M */ if (VARIANT_IsValidMonthDay(v3,v1,v2)) { DATE_SWAP(v1,v3); DATE_SWAP(v2,v3); goto VARIANT_MakeDate_OK; } dwAllOrders &= ~ORDER_MYD; } } if (dp->dwCount == 2) { /* We couldn't make a date as D/M or M/D, so try M/Y or Y/M */ v3 = 1; /* 1st of the month */ dwAllOrders = ORDER_YMD|ORDER_MYD; dp->dwCount = 0; /* Don't return to this code path again */ dwCount = 0; goto VARIANT_MakeDate_Start; } /* No valid dates were able to be constructed */ return DISP_E_TYPEMISMATCH; VARIANT_MakeDate_OK: /* Check that the time part is ok */ if (st->wHour > 23 || st->wMinute > 59 || st->wSecond > 59) return DISP_E_TYPEMISMATCH; TRACE("Time %d %d %d\n", st->wHour, st->wMinute, st->wSecond); if (st->wHour < 12 && (dp->dwParseFlags & DP_PM)) st->wHour += 12; else if (st->wHour == 12 && (dp->dwParseFlags & DP_AM)) st->wHour = 0; TRACE("Time %d %d %d\n", st->wHour, st->wMinute, st->wSecond); st->wDay = v1; st->wMonth = v2; /* FIXME: For 2 digit dates, I'm not sure if 30 is hard coded or not. It may * be retrieved from: * HKCU\Control Panel\International\Calendars\TwoDigitYearMax * But Wine doesn't have/use that key as at the time of writing. */ st->wYear = v3 < 30 ? 2000 + v3 : v3 < 100 ? 1900 + v3 : v3; TRACE("Returning date %d/%d/%d\n", v1, v2, st->wYear); return S_OK; } /****************************************************************************** * VarDateFromStr [OLEAUT32.94] * * Convert a VT_BSTR to at VT_DATE. * * PARAMS * strIn [I] String to convert * lcid [I] Locale identifier for the conversion * dwFlags [I] Flags affecting the conversion (VAR_ flags from "oleauto.h") * pdateOut [O] Destination for the converted value * * RETURNS * Success: S_OK. pdateOut contains the converted value. * FAILURE: An HRESULT error code indicating the problem. * * NOTES * Any date format that can be created using the date formats from lcid * (Either from kernel Nls functions, variant conversion or formatting) is a * valid input to this function. In addition, a few more esoteric formats are * also supported for compatibility with the native version. The date is * interpreted according to the date settings in the control panel, unless * the date is invalid in that format, in which the most compatible format * that produces a valid date will be used. */ HRESULT WINAPI VarDateFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, DATE* pdateOut) { static const USHORT ParseDateTokens[] = { LOCALE_SMONTHNAME1, LOCALE_SMONTHNAME2, LOCALE_SMONTHNAME3, LOCALE_SMONTHNAME4, LOCALE_SMONTHNAME5, LOCALE_SMONTHNAME6, LOCALE_SMONTHNAME7, LOCALE_SMONTHNAME8, LOCALE_SMONTHNAME9, LOCALE_SMONTHNAME10, LOCALE_SMONTHNAME11, LOCALE_SMONTHNAME12, LOCALE_SMONTHNAME13, LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2, LOCALE_SABBREVMONTHNAME3, LOCALE_SABBREVMONTHNAME4, LOCALE_SABBREVMONTHNAME5, LOCALE_SABBREVMONTHNAME6, LOCALE_SABBREVMONTHNAME7, LOCALE_SABBREVMONTHNAME8, LOCALE_SABBREVMONTHNAME9, LOCALE_SABBREVMONTHNAME10, LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12, LOCALE_SABBREVMONTHNAME13, LOCALE_SDAYNAME1, LOCALE_SDAYNAME2, LOCALE_SDAYNAME3, LOCALE_SDAYNAME4, LOCALE_SDAYNAME5, LOCALE_SDAYNAME6, LOCALE_SDAYNAME7, LOCALE_SABBREVDAYNAME1, LOCALE_SABBREVDAYNAME2, LOCALE_SABBREVDAYNAME3, LOCALE_SABBREVDAYNAME4, LOCALE_SABBREVDAYNAME5, LOCALE_SABBREVDAYNAME6, LOCALE_SABBREVDAYNAME7, LOCALE_S1159, LOCALE_S2359, LOCALE_SDATE }; static const BYTE ParseDateMonths[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13, 1,2,3,4,5,6,7,8,9,10,11,12,13 }; unsigned int i; SEGBSTR16 tokens[ARRAY_SIZE(ParseDateTokens)]; DATEPARSE dp; DWORD dwDateSeps = 0, iDate = 0; HRESULT hRet = S_OK; if ((dwFlags & (VAR_TIMEVALUEONLY|VAR_DATEVALUEONLY)) == (VAR_TIMEVALUEONLY|VAR_DATEVALUEONLY)) return E_INVALIDARG; if (!strIn) return DISP_E_TYPEMISMATCH; *pdateOut = 0.0; TRACE("(%s,0x%08x,0x%08x,%p)\n", debugstr_a(strIn), lcid, dwFlags, pdateOut); memset(&dp, 0, sizeof(dp)); GetLocaleInfoA(lcid, LOCALE_IDATE|LOCALE_RETURN_NUMBER|(dwFlags & LOCALE_NOUSEROVERRIDE), (LPWSTR)&iDate, sizeof(iDate)/sizeof(OLECHAR16)); TRACE("iDate is %d\n", iDate); /* Get the month/day/am/pm tokens for this locale */ for (i = 0; i < ARRAY_SIZE(tokens); i++) { OLECHAR16 buff[128]; LCTYPE lctype = ParseDateTokens[i] | (dwFlags & LOCALE_NOUSEROVERRIDE); /* FIXME: Alternate calendars - should use GetCalendarInfo() and/or * GetAltMonthNames(). We should really cache these strings too. */ buff[0] = '\0'; GetLocaleInfoA(lcid, lctype, buff, ARRAY_SIZE(buff)); tokens[i] = SysAllocString16(buff); TRACE("token %d is %s\n", i, debugstr_a((OLECHAR16*)MapSL(tokens[i]))); } /* Parse the string into our structure */ while (*strIn) { if (isdigitA(*strIn)) { if (dp.dwCount >= 6) { hRet = DISP_E_TYPEMISMATCH; break; } dp.dwValues[dp.dwCount] = strtoulA(strIn, &strIn, 10); dp.dwCount++; strIn--; } else if (isalphaA(*strIn)) { BOOL bFound = FALSE; for (i = 0; i < ARRAY_SIZE(tokens); i++) { OLECHAR16 *token = (OLECHAR16*)MapSL(tokens[i]); DWORD dwLen = strlenA(token); if (dwLen && !strncmpiA(strIn, token, dwLen)) { if (i <= 25) { if (dp.dwCount >= 6) hRet = DISP_E_TYPEMISMATCH; else { dp.dwValues[dp.dwCount] = ParseDateMonths[i]; dp.dwFlags[dp.dwCount] |= (DP_MONTH|DP_DATESEP); dp.dwCount++; } } else if (i > 39 && i < 42) { if (!dp.dwCount || dp.dwParseFlags & (DP_AM|DP_PM)) hRet = DISP_E_TYPEMISMATCH; else { dp.dwFlags[dp.dwCount - 1] |= (i == 40 ? DP_AM : DP_PM); dp.dwParseFlags |= (i == 40 ? DP_AM : DP_PM); } } strIn += (dwLen - 1); bFound = TRUE; break; } } if (!bFound) { if ((*strIn == 'a' || *strIn == 'A' || *strIn == 'p' || *strIn == 'P') && (dp.dwCount && !(dp.dwParseFlags & (DP_AM|DP_PM)))) { /* Special case - 'a' and 'p' are recognised as short for am/pm */ if (*strIn == 'a' || *strIn == 'A') { dp.dwFlags[dp.dwCount - 1] |= DP_AM; dp.dwParseFlags |= DP_AM; } else { dp.dwFlags[dp.dwCount - 1] |= DP_PM; dp.dwParseFlags |= DP_PM; } strIn++; } else { TRACE("No matching token for %s\n", debugstr_a(strIn)); hRet = DISP_E_TYPEMISMATCH; break; } } } else if (*strIn == ':' || *strIn == '.') { if (!dp.dwCount || !strIn[1]) hRet = DISP_E_TYPEMISMATCH; else if (((OLECHAR16*)MapSL(tokens[42]))[0] == *strIn) { dwDateSeps++; if (dwDateSeps > 2) hRet = DISP_E_TYPEMISMATCH; else dp.dwFlags[dp.dwCount - 1] |= DP_DATESEP; } else dp.dwFlags[dp.dwCount - 1] |= DP_TIMESEP; } else if (*strIn == '-' || *strIn == '/') { dwDateSeps++; if (dwDateSeps > 2 || !dp.dwCount || !strIn[1]) hRet = DISP_E_TYPEMISMATCH; else dp.dwFlags[dp.dwCount - 1] |= DP_DATESEP; } else if (*strIn == ',' || isspaceA(*strIn)) { if (*strIn == ',' && !strIn[1]) hRet = DISP_E_TYPEMISMATCH; } else { hRet = DISP_E_TYPEMISMATCH; } strIn++; } if (!dp.dwCount || dp.dwCount > 6 || (dp.dwCount == 1 && !(dp.dwParseFlags & (DP_AM|DP_PM)))) hRet = DISP_E_TYPEMISMATCH; if (SUCCEEDED(hRet)) { SYSTEMTIME st; DWORD dwOffset = 0; /* Start of date fields in dp.dwValues */ st.wDayOfWeek = st.wHour = st.wMinute = st.wSecond = st.wMilliseconds = 0; /* Figure out which numbers correspond to which fields. * * This switch statement works based on the fact that native interprets any * fields that are not joined with a time separator ('.' or ':') as date * fields. Thus we construct a value from 0-32 where each set bit indicates * a time field. This encapsulates the hundreds of permutations of 2-6 fields. * For valid permutations, we set dwOffset to point to the first date field * and shorten dp.dwCount by the number of time fields found. The real * magic here occurs in VARIANT_MakeDate() above, where we determine what * each date number must represent in the context of iDate. */ TRACE("0x%08x\n", TIMEFLAG(0)|TIMEFLAG(1)|TIMEFLAG(2)|TIMEFLAG(3)|TIMEFLAG(4)); switch (TIMEFLAG(0)|TIMEFLAG(1)|TIMEFLAG(2)|TIMEFLAG(3)|TIMEFLAG(4)) { case 0x1: /* TT TTDD TTDDD */ if (dp.dwCount > 3 && ((dp.dwFlags[2] & (DP_AM|DP_PM)) || (dp.dwFlags[3] & (DP_AM|DP_PM)) || (dp.dwFlags[4] & (DP_AM|DP_PM)))) hRet = DISP_E_TYPEMISMATCH; else if (dp.dwCount != 2 && dp.dwCount != 4 && dp.dwCount != 5) hRet = DISP_E_TYPEMISMATCH; st.wHour = dp.dwValues[0]; st.wMinute = dp.dwValues[1]; dp.dwCount -= 2; dwOffset = 2; break; case 0x3: /* TTT TTTDD TTTDDD */ if (dp.dwCount > 4 && ((dp.dwFlags[3] & (DP_AM|DP_PM)) || (dp.dwFlags[4] & (DP_AM|DP_PM)) || (dp.dwFlags[5] & (DP_AM|DP_PM)))) hRet = DISP_E_TYPEMISMATCH; else if (dp.dwCount != 3 && dp.dwCount != 5 && dp.dwCount != 6) hRet = DISP_E_TYPEMISMATCH; st.wHour = dp.dwValues[0]; st.wMinute = dp.dwValues[1]; st.wSecond = dp.dwValues[2]; dwOffset = 3; dp.dwCount -= 3; break; case 0x4: /* DDTT */ if (dp.dwCount != 4 || (dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM))) hRet = DISP_E_TYPEMISMATCH; st.wHour = dp.dwValues[2]; st.wMinute = dp.dwValues[3]; dp.dwCount -= 2; break; case 0x0: /* T DD DDD TDDD TDDD */ if (dp.dwCount == 1 && (dp.dwParseFlags & (DP_AM|DP_PM))) { st.wHour = dp.dwValues[0]; /* T */ dp.dwCount = 0; break; } else if (dp.dwCount > 4 || (dp.dwCount < 3 && dp.dwParseFlags & (DP_AM|DP_PM))) { hRet = DISP_E_TYPEMISMATCH; } else if (dp.dwCount == 3) { if (dp.dwFlags[0] & (DP_AM|DP_PM)) /* TDD */ { dp.dwCount = 2; st.wHour = dp.dwValues[0]; dwOffset = 1; break; } if (dp.dwFlags[2] & (DP_AM|DP_PM)) /* DDT */ { dp.dwCount = 2; st.wHour = dp.dwValues[2]; break; } else if (dp.dwParseFlags & (DP_AM|DP_PM)) hRet = DISP_E_TYPEMISMATCH; } else if (dp.dwCount == 4) { dp.dwCount = 3; if (dp.dwFlags[0] & (DP_AM|DP_PM)) /* TDDD */ { st.wHour = dp.dwValues[0]; dwOffset = 1; } else if (dp.dwFlags[3] & (DP_AM|DP_PM)) /* DDDT */ { st.wHour = dp.dwValues[3]; } else hRet = DISP_E_TYPEMISMATCH; break; } /* .. fall through .. */ case 0x8: /* DDDTT */ if ((dp.dwCount == 2 && (dp.dwParseFlags & (DP_AM|DP_PM))) || (dp.dwCount == 5 && ((dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM)) || (dp.dwFlags[2] & (DP_AM|DP_PM)))) || dp.dwCount == 4 || dp.dwCount == 6) hRet = DISP_E_TYPEMISMATCH; st.wHour = dp.dwValues[3]; st.wMinute = dp.dwValues[4]; if (dp.dwCount == 5) dp.dwCount -= 2; break; case 0xC: /* DDTTT */ if (dp.dwCount != 5 || (dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM))) hRet = DISP_E_TYPEMISMATCH; st.wHour = dp.dwValues[2]; st.wMinute = dp.dwValues[3]; st.wSecond = dp.dwValues[4]; dp.dwCount -= 3; break; case 0x18: /* DDDTTT */ if ((dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM)) || (dp.dwFlags[2] & (DP_AM|DP_PM))) hRet = DISP_E_TYPEMISMATCH; st.wHour = dp.dwValues[3]; st.wMinute = dp.dwValues[4]; st.wSecond = dp.dwValues[5]; dp.dwCount -= 3; break; default: hRet = DISP_E_TYPEMISMATCH; break; } if (SUCCEEDED(hRet)) { hRet = VARIANT_MakeDate(&dp, iDate, dwOffset, &st); if (dwFlags & VAR_TIMEVALUEONLY) { st.wYear = 1899; st.wMonth = 12; st.wDay = 30; } else if (dwFlags & VAR_DATEVALUEONLY) st.wHour = st.wMinute = st.wSecond = 0; /* Finally, convert the value to a VT_DATE */ if (SUCCEEDED(hRet)) hRet = SystemTimeToVariantTime(&st, pdateOut) ? S_OK : DISP_E_TYPEMISMATCH; } } for (i = 0; i < ARRAY_SIZE(tokens); i++) SysFreeString16(tokens[i]); return hRet; } /****************************************************************************** * VarDateFromI1 (OLEAUT32.221) * * Convert a VT_I1 to a VT_DATE. * * PARAMS * cIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromI116(signed char cIn, DATE* pdateOut) { return VarR8FromI1(cIn, pdateOut); } /****************************************************************************** * VarDateFromUI2 (OLEAUT32.222) * * Convert a VT_UI2 to a VT_DATE. * * PARAMS * uiIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromUI216(USHORT uiIn, DATE* pdateOut) { return VarR8FromUI2(uiIn, pdateOut); } /****************************************************************************** * VarDateFromUI4 (OLEAUT32.223) * * Convert a VT_UI4 to a VT_DATE. * * PARAMS * ulIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromUI416(ULONG ulIn, DATE* pdateOut) { return VarDateFromR8(ulIn, pdateOut); } /********************************************************************** * VarDateFromDec (OLEAUT32.224) * * Convert a VT_DECIMAL to a VT_DATE. * * PARAMS * pdecIn [I] Source * pdateOut [O] Destination * * RETURNS * S_OK. */ HRESULT WINAPI VarDateFromDec16(DECIMAL *pdecIn, DATE* pdateOut) { return VarR8FromDec(pdecIn, pdateOut); } /****************************************************************************** * VarDateFromI8 (OLEAUT32.364) * * Convert a VT_I8 to a VT_DATE. * * PARAMS * llIn [I] Source * pdateOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarDateFromI816(LONG64 llIn, DATE* pdateOut) { if (llIn < DATE_MIN || llIn > DATE_MAX) return DISP_E_OVERFLOW; *pdateOut = (DATE)llIn; return S_OK; } /****************************************************************************** * VarDateFromUI8 (OLEAUT32.365) * * Convert a VT_UI8 to a VT_DATE. * * PARAMS * ullIn [I] Source * pdateOut [O] Destination * * RETURNS * Success: S_OK. * Failure: DISP_E_OVERFLOW, if the value will not fit in the destination */ HRESULT WINAPI VarDateFromUI816(ULONG64 ullIn, DATE* pdateOut) { if (ullIn > DATE_MAX) return DISP_E_OVERFLOW; *pdateOut = (DATE)ullIn; return S_OK; } ================================================ FILE: ole2disp/wine_typelib.c ================================================ /* * TYPELIB * * Copyright 1997 Marcus Meissner * 1999 Rein Klazes * 2000 Francois Jacques * 2001 Huw D M Davies for CodeWeavers * 2004 Alastair Bridgewater * 2005 Robert Shearman, for CodeWeavers * 2013 Andrew Eikum for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * -------------------------------------------------------------------------------------- * Known problems (2000, Francois Jacques) * * - Tested using OLEVIEW (Platform SDK tool) only. * * - dual interface dispinterfaces. vtable-interface ITypeInfo instances are * creating by doing a straight copy of the dispinterface instance and just changing * its typekind. Pointed structures aren't copied - only the address of the pointers. * * - locale stuff is partially implemented but hasn't been tested. * * - typelib file is still read in its entirety, but it is released now. * * -------------------------------------------------------------------------------------- * Known problems left from previous implementation (1999, Rein Klazes) : * * -. Data structures are straightforward, but slow for look-ups. * -. (related) nothing is hashed * -. Most error return values are just guessed not checked with windows * behaviour. * -. lousy fatal error handling * */ #include "config.h" #undef HAVE_STRNCASECMP #define HAVE__STRNICMP #include "wine/port.h" #include #include #include #include #include #define COBJMACROS #define NONAMELESSUNION #undef DUMMYUNIONNAME #undef DUMMYSTRUCTNAME #define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME #define _WIN32_WINNT 0xA00 #include "winerror.h" #include "windef.h" #include "winbase.h" #include "winnls.h" #include "winreg.h" #include "winuser.h" #include "winternl.h" #include "lzexpand.h" #include "wine/unicode.h" #include "objbase.h" #include "wine_typelib.h" #include "wine/debug.h" #define __WINE_ALLOC_SIZE(x) /*#include "variant.h"*/ #include "wine/heap.h" #include "wine/list.h" #include "wine/winbase16.h" #include "wownt32.h" #include "wine/windef16.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); WINE_DECLARE_DEBUG_CHANNEL(typelib); #define IFS_THUNK_NDEF_DBG_CHANNEL #include "ole2disp.h" #include "../ole2/ifs_thunk.h" typedef struct _FILE_NAME_INFORMATION { ULONG FileNameLength; WCHAR FileName[1]; } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; HRESULT WINAPI LoadTypeLibEx16Impl( LPCOLESTR szFile, /* [in] Name of file to load from */ REGKIND regkind, /* [in] Specify kind of registration */ ITypeLib **pptLib); /* [out] Pointer to pointer to loaded type library */ HRESULT WINAPI LoadTypeLib16Impl(const OLECHAR *szFile, ITypeLib * *pptLib); INT16 WINAPI StringFromGUID216(REFGUID id, LPOLESTR16 str, INT16 cmax); #if 0 typedef struct { WORD offset; WORD length; WORD flags; WORD id; WORD handle; WORD usage; } NE_NAMEINFO; typedef struct { WORD type_id; /* Type identifier */ WORD count; /* Number of resources of this type */ DWORD resloader; /* SetResourceHandler() */ /* * Name info array. */ } NE_TYPEINFO; #endif static HRESULT typedescvt_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt); static HRESULT TLB_AllocAndInitVarDesc(const VARDESC *src, VARDESC **dest_ptr); static void TLB_FreeVarDesc(VARDESC*); /**************************************************************************** * FromLExxx * * Takes p_iVal (which is in little endian) and returns it * in the host machine's byte order. */ #ifdef WORDS_BIGENDIAN static WORD FromLEWord(WORD p_iVal) { return (((p_iVal & 0x00FF) << 8) | ((p_iVal & 0xFF00) >> 8)); } static DWORD FromLEDWord(DWORD p_iVal) { return (((p_iVal & 0x000000FF) << 24) | ((p_iVal & 0x0000FF00) << 8) | ((p_iVal & 0x00FF0000) >> 8) | ((p_iVal & 0xFF000000) >> 24)); } #else #define FromLEWord(X) (X) #define FromLEDWord(X) (X) #endif #define DISPATCH_HREF_OFFSET 0x01000000 #define DISPATCH_HREF_MASK 0xff000000 /**************************************************************************** * FromLExxx * * Fix byte order in any structure if necessary */ #ifdef WORDS_BIGENDIAN static void FromLEWords(void *p_Val, int p_iSize) { WORD *Val = p_Val; p_iSize /= sizeof(WORD); while (p_iSize) { *Val = FromLEWord(*Val); Val++; p_iSize--; } } static void FromLEDWords(void *p_Val, int p_iSize) { DWORD *Val = p_Val; p_iSize /= sizeof(DWORD); while (p_iSize) { *Val = FromLEDWord(*Val); Val++; p_iSize--; } } #else #define FromLEWords(X,Y) /*nothing*/ #define FromLEDWords(X,Y) /*nothing*/ #endif /* * Find a typelib key which matches a requested maj.min version. */ static BOOL find_typelib_key( REFGUID guid, WORD *wMaj, WORD *wMin ) { static const char typelib[] = "Typelib\\"; char buffer[60]; char key_name[16]; DWORD len, i; INT best_maj = -1, best_min = -1; HKEY hkey; memcpy( buffer, typelib, sizeof(typelib) ); StringFromGUID216( guid, buffer + strlen(buffer), 40 ); if (RegOpenKey16( HKEY_CLASSES_ROOT, buffer, &hkey ) != ERROR_SUCCESS) return FALSE; len = sizeof(key_name); i = 0; while (RegEnumKey16(hkey, i++, key_name, len) == ERROR_SUCCESS) { INT v_maj, v_min; if (sscanf(key_name, "%x.%x", &v_maj, &v_min) == 2) { TRACE("found %s: %x.%x\n", debugstr_a(buffer), v_maj, v_min); if (*wMaj == 0xffff && *wMin == 0xffff) { if (v_maj > best_maj) best_maj = v_maj; if (v_min > best_min) best_min = v_min; } else if (*wMaj == v_maj) { best_maj = v_maj; if (*wMin == v_min) { best_min = v_min; break; /* exact match */ } if (*wMin != 0xffff && v_min > best_min) best_min = v_min; } } len = sizeof(key_name); } RegCloseKey16( hkey ); TRACE("found best_maj %d, best_min %d\n", best_maj, best_min); if (*wMaj == 0xffff && *wMin == 0xffff) { if (best_maj >= 0 && best_min >= 0) { *wMaj = best_maj; *wMin = best_min; return TRUE; } } if (*wMaj == best_maj && best_min >= 0) { *wMin = best_min; return TRUE; } return FALSE; } /* get the path of a typelib key, in the form "Typelib\\\\." */ /* buffer must be at least 60 characters long */ static char *get_typelib_key( REFGUID guid, WORD wMaj, WORD wMin, char *buffer ) { static const char Typelib[] = "Typelib\\"; static const char VersionFormat[] = "\\%x.%x"; memcpy( buffer, Typelib, sizeof(Typelib) ); StringFromGUID216( guid, buffer + strlen(buffer), 40 ); sprintf( buffer + strlen(buffer), VersionFormat, wMaj, wMin ); return buffer; } /* get the path of an interface key, in the form "Interface\\" */ /* buffer must be at least 50 characters long */ static char *get_interface_key( REFGUID guid, char *buffer ) { static const char Interface[] = "Interface\\"; memcpy( buffer, Interface, sizeof(Interface) ); StringFromGUID216( guid, buffer + strlen(buffer), 40 ); return buffer; } /* get the lcid subkey for a typelib, in the form "\\" */ /* buffer must be at least 16 characters long */ static char *get_lcid_subkey( LCID lcid, SYSKIND syskind, char *buffer ) { static const char LcidFormat[] = "%lx\\"; static const char win16[] = "win16"; static const char win32[] = "win32"; static const char win64[] = "win64"; sprintf( buffer, LcidFormat, lcid ); switch(syskind) { case SYS_WIN16: strcat( buffer, win16 ); break; case SYS_WIN32: strcat( buffer, win32 ); break; case SYS_WIN64: strcat( buffer, win64 ); break; default: TRACE("Typelib is for unsupported syskind %i\n", syskind); return NULL; } return buffer; } #if 1 static HRESULT TLB_ReadTypeLib(LPCWSTR pszFileName, LPWSTR pszPath, UINT cchPath, ITypeLib2 **ppTypeLib); struct tlibredirect_data { ULONG size; DWORD res; ULONG name_len; ULONG name_offset; LANGID langid; WORD flags; ULONG help_len; ULONG help_offset; WORD major_version; WORD minor_version; }; /* Get the path to a registered type library. Helper for QueryPathOfRegTypeLib. */ static HRESULT query_typelib_path( REFGUID guid, WORD wMaj, WORD wMin, SYSKIND syskind, LCID lcid, char **path, BOOL redir ) { HRESULT hr = TYPE_E_LIBNOTREGISTERED; LCID myLCID = lcid; HKEY hkey; char buffer[60]; char Patha[MAX_PATH]; LONG res; TRACE_(typelib)("(%s, %x.%x, 0x%x, %p)\n", debugstr_guid(guid), wMaj, wMin, lcid, path); if (redir) { ACTCTX_SECTION_KEYED_DATA data; data.cbSize = sizeof(data); if (FindActCtxSectionGuid( 0, NULL, ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION, guid, &data )) { struct tlibredirect_data *tlib = (struct tlibredirect_data*)data.lpData; WCHAR *nameW; DWORD len; WCHAR Path[MAX_PATH]; char *PathWA; if ((wMaj != 0xffff || wMin != 0xffff) && (tlib->major_version != wMaj || tlib->minor_version < wMin)) return TYPE_E_LIBNOTREGISTERED; nameW = (WCHAR*)((BYTE*)data.lpSectionBase + tlib->name_offset); len = SearchPathW( NULL, nameW, NULL, ARRAY_SIZE( Path ), Path, NULL ); if (!len) return TYPE_E_LIBNOTREGISTERED; TRACE_(typelib)("got path from context %s\n", debugstr_w(Path)); *path = strdupWtoA(Path); return S_OK; } } if (!find_typelib_key( guid, &wMaj, &wMin )) return TYPE_E_LIBNOTREGISTERED; get_typelib_key( guid, wMaj, wMin, buffer ); res = RegOpenKey16( HKEY_CLASSES_ROOT, buffer, &hkey ); if (res == ERROR_FILE_NOT_FOUND) { TRACE_(typelib)("%s not found\n", debugstr_a(buffer)); return TYPE_E_LIBNOTREGISTERED; } else if (res != ERROR_SUCCESS) { TRACE_(typelib)("failed to open %s for read access\n", debugstr_a(buffer)); return TYPE_E_REGISTRYACCESS; } while (hr != S_OK) { LONG dwPathLen = sizeof(Patha); get_lcid_subkey( myLCID, syskind, buffer ); if (RegQueryValue16(hkey, buffer, Patha, &dwPathLen)) { if (!lcid) break; else if (myLCID == lcid) { /* try with sub-langid */ myLCID = SUBLANGID(lcid); } else if ((myLCID == SUBLANGID(lcid)) && myLCID) { /* try with system langid */ myLCID = 0; } else { break; } } else { *path = HeapAlloc(GetProcessHeap(), 0, strlen(Patha) + 1); strcpy(*path, Patha); hr = S_OK; } } RegCloseKey16( hkey ); TRACE_(typelib)("-- 0x%08x\n", hr); return hr; } #if 0 /**************************************************************************** * QueryPathOfRegTypeLib [OLEAUT32.164] * * Gets the path to a registered type library. * * PARAMS * guid [I] referenced guid * wMaj [I] major version * wMin [I] minor version * lcid [I] locale id * path [O] path of typelib * * RETURNS * Success: S_OK. * Failure: If the type library is not registered then TYPE_E_LIBNOTREGISTERED * or TYPE_E_REGISTRYACCESS if the type library registration key couldn't be * opened. */ HRESULT WINAPI QueryPathOfRegTypeLib( REFGUID guid, WORD wMaj, WORD wMin, LCID lcid, LPBSTR path ) { BOOL redir = TRUE; #ifdef _WIN64 HRESULT hres = query_typelib_path( guid, wMaj, wMin, SYS_WIN64, lcid, path, TRUE ); if(SUCCEEDED(hres)) return hres; redir = FALSE; #endif return query_typelib_path( guid, wMaj, wMin, SYS_WIN32, lcid, path, redir ); } #endif /****************************************************************************** * CreateTypeLib [OLEAUT32.160] creates a typelib * * RETURNS * Success: S_OK * Failure: Status */ HRESULT WINAPI CreateTypeLib( SYSKIND syskind, LPCOLESTR szFile, ICreateTypeLib** ppctlib ) { FIXME("(%d,%s,%p), stub!\n",syskind,debugstr_w(szFile),ppctlib); return E_FAIL; } /****************************************************************************** * LoadTypeLib [OLEAUT32.161] * * Loads a type library * * PARAMS * szFile [I] Name of file to load from. * pptLib [O] Pointer that receives ITypeLib object on success. * * RETURNS * Success: S_OK * Failure: Status * * SEE * LoadTypeLibEx, LoadRegTypeLib, CreateTypeLib. */ HRESULT WINAPI LoadTypeLib16Impl(const OLECHAR *szFile, ITypeLib * *pptLib) { TRACE("(%s,%p)\n",debugstr_w(szFile), pptLib); return LoadTypeLibEx16Impl(szFile, REGKIND_DEFAULT, pptLib); } /****************************************************************************** * LoadTypeLibEx [OLEAUT32.183] * * Loads and optionally registers a type library * * RETURNS * Success: S_OK * Failure: Status */ HRESULT WINAPI LoadTypeLibEx16Impl( LPCOLESTR szFile, /* [in] Name of file to load from */ REGKIND regkind, /* [in] Specify kind of registration */ ITypeLib **pptLib) /* [out] Pointer to pointer to loaded type library */ { WCHAR szPath[MAX_PATH+1]; HRESULT res; TRACE("(%s,%d,%p)\n",debugstr_w(szFile), regkind, pptLib); if (!szFile || !pptLib) return E_INVALIDARG; *pptLib = NULL; res = TLB_ReadTypeLib(szFile, szPath, MAX_PATH + 1, (ITypeLib2**)pptLib); if (SUCCEEDED(res)) switch(regkind) { case REGKIND_DEFAULT: /* don't register typelibs supplied with full path. Experimentation confirms the following */ if (((szFile[0] == '\\') && (szFile[1] == '\\')) || (szFile[0] && (szFile[1] == ':'))) break; /* else fall-through */ case REGKIND_REGISTER: if (FAILED(res = RegisterTypeLib(*pptLib, szPath, NULL))) { ITypeLib_Release(*pptLib); *pptLib = 0; } break; case REGKIND_NONE: break; } TRACE(" returns %08x\n",res); return res; } /****************************************************************************** * LoadRegTypeLib [OLEAUT32.162] * * Loads a registered type library. * * PARAMS * rguid [I] GUID of the registered type library. * wVerMajor [I] major version. * wVerMinor [I] minor version. * lcid [I] locale ID. * ppTLib [O] pointer that receives an ITypeLib object on success. * * RETURNS * Success: S_OK. * Failure: Any HRESULT code returned from QueryPathOfRegTypeLib or * LoadTypeLib. */ HRESULT WINAPI LoadRegTypeLib( REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib) { BSTR bstr=NULL; HRESULT res; *ppTLib = NULL; res = QueryPathOfRegTypeLib( rguid, wVerMajor, wVerMinor, lcid, &bstr); if(SUCCEEDED(res)) { res= LoadTypeLib16Impl(bstr, ppTLib); SysFreeString(bstr); if ((wVerMajor!=0xffff || wVerMinor!=0xffff) && *ppTLib) { TLIBATTR *attr; res = ITypeLib_GetLibAttr(*ppTLib, &attr); if (res == S_OK) { BOOL mismatch = attr->wMajorVerNum != wVerMajor || attr->wMinorVerNum < wVerMinor; ITypeLib_ReleaseTLibAttr(*ppTLib, attr); if (mismatch) { ITypeLib_Release(*ppTLib); *ppTLib = NULL; res = TYPE_E_LIBNOTREGISTERED; } } } } TRACE("(IID: %s) load %s (%p)\n",debugstr_guid(rguid), SUCCEEDED(res)? "SUCCESS":"FAILED", *ppTLib); return res; } /* some string constants shared between RegisterTypeLib and UnRegisterTypeLib */ static const char TypeLib[] = "TypeLib"; static const char FLAGS[] = "FLAGS"; static const char HELPDIR[] = "HELPDIR"; static const char ProxyStubClsid[] = "ProxyStubClsid"; static const char ProxyStubClsid32[] = "ProxyStubClsid32"; static void TLB_register_interface(TLIBATTR *libattr, LPOLESTR name, TYPEATTR *tattr, DWORD flag) { char keyName[60]; HKEY key, subKey; static const char PSOA[] = "{00020424-0000-0000-C000-000000000046}"; get_interface_key( &tattr->guid, keyName ); if (RegCreateKey16(HKEY_CLASSES_ROOT, keyName, &key) == ERROR_SUCCESS) { if (name) RegSetValueEx16(key, NULL, 0, REG_SZ, (BYTE *)name, (strlenW(name)+1) * sizeof(OLECHAR)); if (RegCreateKey16(key, ProxyStubClsid, &subKey) == ERROR_SUCCESS) { RegSetValueEx16(subKey, NULL, 0, REG_SZ, (const BYTE *)PSOA, sizeof PSOA); RegCloseKey16(subKey); } if (RegCreateKey16(key, ProxyStubClsid32, &subKey) == ERROR_SUCCESS) { RegSetValueEx16(subKey, NULL, 0, REG_SZ, (const BYTE *)PSOA, sizeof PSOA); RegCloseKey16(subKey); } if (RegCreateKey16(key, TypeLib, &subKey) == ERROR_SUCCESS) { char buffer[40]; static const char fmtver[] = {'%','x','.','%','x',0 }; static const char Version[] = "Version"; StringFromGUID216(&libattr->guid, buffer, 40); RegSetValueEx16(subKey, NULL, 0, REG_SZ, (BYTE *)buffer, (strlen(buffer)+1) * sizeof(char)); sprintf(buffer, fmtver, libattr->wMajorVerNum, libattr->wMinorVerNum); RegSetValueEx16(subKey, Version, 0, REG_SZ, (BYTE*)buffer, (strlen(buffer)+1) * sizeof(char)); RegCloseKey16(subKey); } RegCloseKey16(key); } } /****************************************************************************** * RegisterTypeLib [OLEAUT32.163] * Adds information about a type library to the System Registry * NOTES * Docs: ITypeLib FAR * ptlib * Docs: OLECHAR FAR* szFullPath * Docs: OLECHAR FAR* szHelpDir * * RETURNS * Success: S_OK * Failure: Status */ HRESULT WINAPI RegisterTypeLib( ITypeLib * ptlib, /* [in] Pointer to the library*/ OLECHAR * szFullPath, /* [in] full Path of the library*/ OLECHAR * szHelpDir) /* [in] dir to the helpfile for the library, may be NULL*/ { HRESULT res; TLIBATTR *attr; char keyName[60]; char tmp[16]; HKEY key, subKey; UINT types, tidx; TYPEKIND kind; DWORD disposition; if (ptlib == NULL || szFullPath == NULL) return E_INVALIDARG; char *fullpatha = strdupWtoA(szFullPath); if (FAILED(ITypeLib_GetLibAttr(ptlib, &attr))) return E_FAIL; #ifndef _WIN64 if (attr->syskind == SYS_WIN64) return TYPE_E_BADMODULEKIND; #endif get_typelib_key( &attr->guid, attr->wMajorVerNum, attr->wMinorVerNum, keyName ); res = S_OK; if (RegCreateKey16(HKEY_CLASSES_ROOT, keyName, &key) == ERROR_SUCCESS) { LPOLESTR doc; /* Set the human-readable name of the typelib */ if (FAILED(ITypeLib_GetDocumentation(ptlib, -1, NULL, &doc, NULL, NULL))) res = E_FAIL; else if (doc) { char *doca = strdupWtoA(doc); if (RegSetValueEx16(key, NULL, 0, REG_SZ, doca, lstrlenA(doca)+1) != ERROR_SUCCESS) res = E_FAIL; SysFreeString(doc); HeapFree(GetProcessHeap(), 0, doca); } /* Make up the name of the typelib path subkey */ if (!get_lcid_subkey( attr->lcid, attr->syskind, tmp )) res = E_FAIL; /* Create the typelib path subkey */ if (res == S_OK && RegCreateKey16(key, tmp, &subKey) == ERROR_SUCCESS) { if (RegSetValueEx16(subKey, NULL, 0, REG_SZ, fullpatha, lstrlenA(fullpatha)+1) != ERROR_SUCCESS) res = E_FAIL; RegCloseKey16(subKey); } else res = E_FAIL; /* Create the flags subkey */ if (res == S_OK && RegCreateKey16(key, FLAGS, &subKey) == ERROR_SUCCESS) { /* FIXME: is %u correct? */ static const char format[] = "%u"; char buf[20]; sprintf(buf, format, attr->wLibFlags); if (RegSetValueEx16(subKey, NULL, 0, REG_SZ, buf, lstrlenA(buf) + 1) != ERROR_SUCCESS) res = E_FAIL; RegCloseKey16(subKey); } else res = E_FAIL; /* create the helpdir subkey */ if (res == S_OK && RegOpenKey16(key, HELPDIR, &subKey) == ERROR_SUCCESS) { disposition = REG_OPENED_EXISTING_KEY; RegCloseKey16(subKey); } else { disposition = REG_CREATED_NEW_KEY; } if (res == S_OK && RegCreateKey16(key, HELPDIR, &subKey) == ERROR_SUCCESS) { BOOL freeHelpDir = FALSE; OLECHAR16* pIndexStr; OLECHAR16* helpstra = NULL; /* if we created a new key, and helpDir was null, set the helpdir to the directory which contains the typelib. However, if we just opened an existing key, we leave the helpdir alone */ if ((disposition == REG_CREATED_NEW_KEY) && (szHelpDir == NULL)) { helpstra = SysAllocString16(fullpatha); pIndexStr = strrchr(szHelpDir, '\\'); if (pIndexStr) { *pIndexStr = 0; } freeHelpDir = TRUE; } else if (szHelpDir != NULL) helpstra = strdupWtoA(szHelpDir); /* if we have an szHelpDir, set it! */ if (helpstra != NULL) { if (RegSetValueEx16(subKey, NULL, 0, REG_SZ, helpstra, (lstrlenA(szHelpDir)+1)) != ERROR_SUCCESS) res = E_FAIL; if (freeHelpDir) SysFreeString16(helpstra); else HeapFree(GetProcessHeap(), 0, helpstra); } /* tidy up */ RegCloseKey16(subKey); } else { res = E_FAIL; } RegCloseKey16(key); } else res = E_FAIL; /* register OLE Automation-compatible interfaces for this typelib */ types = ITypeLib_GetTypeInfoCount(ptlib); for (tidx=0; tidxguid), tattr->wTypeFlags); if (TRACE_ON(typelib)) { #define XX(x) if (TYPEFLAG_##x & tattr->wTypeFlags) MESSAGE(#x"|"); XX(FAPPOBJECT); XX(FCANCREATE); XX(FLICENSED); XX(FPREDECLID); XX(FHIDDEN); XX(FCONTROL); XX(FDUAL); XX(FNONEXTENSIBLE); XX(FOLEAUTOMATION); XX(FRESTRICTED); XX(FAGGREGATABLE); XX(FREPLACEABLE); XX(FDISPATCHABLE); XX(FREVERSEBIND); XX(FPROXY); #undef XX MESSAGE("\n"); } /* Register all dispinterfaces (which includes dual interfaces) and oleautomation interfaces */ if ((kind == TKIND_INTERFACE && (tattr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) || kind == TKIND_DISPATCH) { BOOL is_wow64; DWORD opposite = (sizeof(void*) == 8 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY); /* register interface<->typelib coupling */ TLB_register_interface(attr, name, tattr, 0); /* register TLBs into the opposite registry view, too */ if(opposite == KEY_WOW64_32KEY || (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64)) TLB_register_interface(attr, name, tattr, opposite); } ITypeInfo_ReleaseTypeAttr(tinfo, tattr); } ITypeInfo_Release(tinfo); } SysFreeString(name); } } ITypeLib_ReleaseTLibAttr(ptlib, attr); HeapFree(GetProcessHeap(), 0, fullpatha); return res; } static void TLB_unregister_interface(GUID *guid, REGSAM flag) { WCHAR subKeyName[50]; HKEY subKey; /* the path to the type */ get_interface_key( guid, subKeyName ); /* Delete its bits */ if (RegOpenKey16(HKEY_CLASSES_ROOT, subKeyName, &subKey) != ERROR_SUCCESS) return; RegDeleteKey16(subKey, ProxyStubClsid); RegDeleteKey16(subKey, ProxyStubClsid32); RegDeleteKey16(subKey, TypeLib); RegCloseKey16(subKey); RegDeleteKey16(HKEY_CLASSES_ROOT, subKeyName); } /****************************************************************************** * UnRegisterTypeLib [OLEAUT32.186] * Removes information about a type library from the System Registry * NOTES * * RETURNS * Success: S_OK * Failure: Status */ HRESULT WINAPI UnRegisterTypeLib( REFGUID libid, /* [in] Guid of the library */ WORD wVerMajor, /* [in] major version */ WORD wVerMinor, /* [in] minor version */ LCID lcid, /* [in] locale id */ SYSKIND syskind) { BSTR16 tlibPath = NULL; BSTR tlibPathW; DWORD tmpLength; char keyName[60]; char subKeyName[50]; int result = S_OK; DWORD i = 0; BOOL deleteOtherStuff; HKEY key = NULL; TYPEATTR* typeAttr = NULL; TYPEKIND kind; ITypeInfo* typeInfo = NULL; ITypeLib* typeLib = NULL; int numTypes; TRACE("(IID: %s)\n",debugstr_guid(libid)); /* Create the path to the key */ get_typelib_key( libid, wVerMajor, wVerMinor, keyName ); if (syskind != SYS_WIN16 && syskind != SYS_WIN32 && syskind != SYS_WIN64) { TRACE("Unsupported syskind %i\n", syskind); result = E_INVALIDARG; goto end; } /* get the path to the typelib on disk */ if (query_typelib_path(libid, wVerMajor, wVerMinor, syskind, lcid, &tlibPath, FALSE) != S_OK) { result = E_INVALIDARG; goto end; } /* Try and open the key to the type library. */ if (RegOpenKey16(HKEY_CLASSES_ROOT, keyName, &key) != ERROR_SUCCESS) { result = E_INVALIDARG; goto end; } /* Try and load the type library */ tlibPathW = strdupAtoW(tlibPath); if (LoadTypeLibEx16Impl(tlibPath, REGKIND_NONE, &typeLib) != S_OK) { result = TYPE_E_INVALIDSTATE; goto end; } /* remove any types registered with this typelib */ numTypes = ITypeLib_GetTypeInfoCount(typeLib); for (i=0; iwTypeFlags & TYPEFLAG_FOLEAUTOMATION)) || kind == TKIND_DISPATCH) { BOOL is_wow64; REGSAM opposite = (sizeof(void*) == 8 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY); TLB_unregister_interface(&typeAttr->guid, 0); /* unregister TLBs into the opposite registry view, too */ if(opposite == KEY_WOW64_32KEY || (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64)) { TLB_unregister_interface(&typeAttr->guid, opposite); } } enddeleteloop: if (typeAttr) ITypeInfo_ReleaseTypeAttr(typeInfo, typeAttr); typeAttr = NULL; if (typeInfo) ITypeInfo_Release(typeInfo); typeInfo = NULL; } /* Now, delete the type library path subkey */ get_lcid_subkey( lcid, syskind, subKeyName ); RegDeleteKey16(key, subKeyName); *strrchr( subKeyName, '\\' ) = 0; /* remove last path component */ RegDeleteKey16(key, subKeyName); /* check if there is anything besides the FLAGS/HELPDIR keys. If there is, we don't delete them */ tmpLength = ARRAY_SIZE(subKeyName); deleteOtherStuff = TRUE; i = 0; while(RegEnumKey16(key, i++, subKeyName, tmpLength) == ERROR_SUCCESS) { tmpLength = ARRAY_SIZE(subKeyName); /* if its not FLAGS or HELPDIR, then we must keep the rest of the key */ if (!strcmp(subKeyName, FLAGS)) continue; if (!strcmp(subKeyName, HELPDIR)) continue; deleteOtherStuff = FALSE; break; } /* only delete the other parts of the key if we're absolutely sure */ if (deleteOtherStuff) { RegDeleteKey16(key, FLAGS); RegDeleteKey16(key, HELPDIR); RegCloseKey16(key); key = NULL; RegDeleteKey16(HKEY_CLASSES_ROOT, keyName); *strrchr( keyName, '\\' ) = 0; /* remove last path component */ RegDeleteKey16(HKEY_CLASSES_ROOT, keyName); } end: HeapFree(GetProcessHeap(), 0, tlibPath); HeapFree(GetProcessHeap(), 0, tlibPathW); if (typeLib) ITypeLib_Release(typeLib); if (key) RegCloseKey(key); return result; } /****************************************************************************** * RegisterTypeLibForUser [OLEAUT32.442] * Adds information about a type library to the user registry * NOTES * Docs: ITypeLib FAR * ptlib * Docs: OLECHAR FAR* szFullPath * Docs: OLECHAR FAR* szHelpDir * * RETURNS * Success: S_OK * Failure: Status */ HRESULT WINAPI RegisterTypeLibForUser( ITypeLib * ptlib, /* [in] Pointer to the library*/ OLECHAR * szFullPath, /* [in] full Path of the library*/ OLECHAR * szHelpDir) /* [in] dir to the helpfile for the library, may be NULL*/ { FIXME("(%p, %s, %s) registering the typelib system-wide\n", ptlib, debugstr_w(szFullPath), debugstr_w(szHelpDir)); return RegisterTypeLib(ptlib, szFullPath, szHelpDir); } /****************************************************************************** * UnRegisterTypeLibForUser [OLEAUT32.443] * Removes information about a type library from the user registry * * RETURNS * Success: S_OK * Failure: Status */ HRESULT WINAPI UnRegisterTypeLibForUser( REFGUID libid, /* [in] GUID of the library */ WORD wVerMajor, /* [in] major version */ WORD wVerMinor, /* [in] minor version */ LCID lcid, /* [in] locale id */ SYSKIND syskind) { FIXME("(%s, %u, %u, %u, %u) unregistering the typelib system-wide\n", debugstr_guid(libid), wVerMajor, wVerMinor, lcid, syskind); return UnRegisterTypeLib(libid, wVerMajor, wVerMinor, lcid, syskind); } #endif /*======================= ITypeLib implementation =======================*/ typedef struct tagTLBGuid { GUID guid; INT hreftype; UINT offset; struct list entry; } TLBGuid; typedef struct tagTLBCustData { TLBGuid *guid; VARIANT data; struct list entry; } TLBCustData; /* data structure for import typelibs */ typedef struct tagTLBImpLib { int offset; /* offset in the file (MSFT) offset in nametable (SLTG) just used to identify library while reading data from file */ TLBGuid *guid; /* libid */ BSTR name; /* name */ LCID lcid; /* lcid of imported typelib */ WORD wVersionMajor; /* major version number */ WORD wVersionMinor; /* minor version number */ struct tagITypeLibImpl *pImpTypeLib; /* pointer to loaded typelib, or NULL if not yet loaded */ struct list entry; } TLBImpLib; typedef struct tagTLBString { BSTR str; UINT offset; struct list entry; } TLBString; /* internal ITypeLib data */ typedef struct tagITypeLibImpl { ITypeLib2 ITypeLib2_iface; ITypeComp ITypeComp_iface; ICreateTypeLib2 ICreateTypeLib2_iface; LONG ref; TLBGuid *guid; LCID lcid; SYSKIND syskind; int ptr_size; WORD ver_major; WORD ver_minor; WORD libflags; LCID set_lcid; /* strings can be stored in tlb as multibyte strings BUT they are *always* * exported to the application as a UNICODE string. */ struct list string_list; struct list name_list; struct list guid_list; const TLBString *Name; const TLBString *DocString; const TLBString *HelpFile; const TLBString *HelpStringDll; DWORD dwHelpContext; int TypeInfoCount; /* nr of typeinfo's in librarry */ struct tagITypeInfoImpl **typeinfos; struct list custdata_list; struct list implib_list; int ctTypeDesc; /* number of items in type desc array */ TYPEDESC * pTypeDesc; /* array of TypeDescriptions found in the library. Only used while reading MSFT typelibs */ struct list ref_list; /* list of ref types in this typelib */ HREFTYPE dispatch_href; /* reference to IDispatch, -1 if unused */ /* typelibs are cached, keyed by path and index, so store the linked list info within them */ struct list entry; WCHAR *path; INT index; } ITypeLibImpl; static const ITypeLib2Vtbl tlbvt; static const ITypeCompVtbl tlbtcvt; static const ICreateTypeLib2Vtbl CreateTypeLib2Vtbl; static inline ITypeLibImpl *impl_from_ITypeLib2(ITypeLib2 *iface) { return CONTAINING_RECORD(iface, ITypeLibImpl, ITypeLib2_iface); } static inline ITypeLibImpl *impl_from_ITypeLib(ITypeLib *iface) { return impl_from_ITypeLib2((ITypeLib2*)iface); } static inline ITypeLibImpl *impl_from_ITypeComp( ITypeComp *iface ) { return CONTAINING_RECORD(iface, ITypeLibImpl, ITypeComp_iface); } static inline ITypeLibImpl *impl_from_ICreateTypeLib2( ICreateTypeLib2 *iface ) { return CONTAINING_RECORD(iface, ITypeLibImpl, ICreateTypeLib2_iface); } /* ITypeLib methods */ static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength); static ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength); /*======================= ITypeInfo implementation =======================*/ /* data for referenced types */ typedef struct tagTLBRefType { INT index; /* Type index for internal ref or for external ref it the format is SLTG. -2 indicates to use guid */ TYPEKIND tkind; TLBGuid *guid; /* guid of the referenced type */ /* if index == TLB_REF_USE_GUID */ HREFTYPE reference; /* The href of this ref */ TLBImpLib *pImpTLInfo; /* If ref is external ptr to library data TLB_REF_INTERNAL for internal refs TLB_REF_NOT_FOUND for broken refs */ struct list entry; } TLBRefType; #define TLB_REF_USE_GUID -2 #define TLB_REF_INTERNAL (void*)-2 #define TLB_REF_NOT_FOUND (void*)-1 /* internal Parameter data */ typedef struct tagTLBParDesc { const TLBString *Name; struct list custdata_list; } TLBParDesc; /* internal Function data */ typedef struct tagTLBFuncDesc { FUNCDESC funcdesc; /* lots of info on the function and its attributes. */ const TLBString *Name; /* the name of this function */ TLBParDesc *pParamDesc; /* array with param names and custom data */ int helpcontext; int HelpStringContext; const TLBString *HelpString; const TLBString *Entry; /* if IS_INTRESOURCE true, it's numeric; if -1 it isn't present */ const TLBString *HelpFile; struct list custdata_list; } TLBFuncDesc; /* internal Variable data */ typedef struct tagTLBVarDesc { VARDESC vardesc; /* lots of info on the variable and its attributes. */ VARDESC *vardesc_create; /* additional data needed for storing VARDESC */ const TLBString *Name; /* the name of this variable */ int HelpContext; int HelpStringContext; const TLBString *HelpString; const TLBString *HelpFile; struct list custdata_list; } TLBVarDesc; /* internal implemented interface data */ typedef struct tagTLBImplType { HREFTYPE hRef; /* hRef of interface */ int implflags; /* IMPLFLAG_*s */ struct list custdata_list; } TLBImplType; /* internal TypeInfo data */ typedef struct tagITypeInfoImpl { ITypeInfo2 ITypeInfo2_iface; ITypeComp ITypeComp_iface; ICreateTypeInfo2 ICreateTypeInfo2_iface; LONG ref; BOOL not_attached_to_typelib; BOOL needs_layout; TLBGuid *guid; TYPEATTR typeattr; TYPEDESC *tdescAlias; ITypeLibImpl * pTypeLib; /* back pointer to typelib */ int index; /* index in this typelib; */ HREFTYPE hreftype; /* hreftype for app object binding */ /* type libs seem to store the doc strings in ascii * so why should we do it in unicode? */ const TLBString *Name; const TLBString *DocString; const TLBString *DllName; const TLBString *Schema; DWORD dwHelpContext; DWORD dwHelpStringContext; /* functions */ TLBFuncDesc *funcdescs; /* variables */ TLBVarDesc *vardescs; /* Implemented Interfaces */ TLBImplType *impltypes; struct list *pcustdata_list; struct list custdata_list; } ITypeInfoImpl; static inline ITypeInfoImpl *info_impl_from_ITypeComp( ITypeComp *iface ) { return CONTAINING_RECORD(iface, ITypeInfoImpl, ITypeComp_iface); } static inline ITypeInfoImpl *impl_from_ITypeInfo2( ITypeInfo2 *iface ) { return CONTAINING_RECORD(iface, ITypeInfoImpl, ITypeInfo2_iface); } static inline ITypeInfoImpl *impl_from_ITypeInfo( ITypeInfo *iface ) { return impl_from_ITypeInfo2((ITypeInfo2*)iface); } static inline ITypeInfoImpl *info_impl_from_ICreateTypeInfo2( ICreateTypeInfo2 *iface ) { return CONTAINING_RECORD(iface, ITypeInfoImpl, ICreateTypeInfo2_iface); } static const ITypeInfo2Vtbl tinfvt; static const ITypeCompVtbl tcompvt; static const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl; static ITypeInfoImpl* ITypeInfoImpl_Constructor(void); static void ITypeInfoImpl_Destroy(ITypeInfoImpl *This); typedef struct tagTLBContext { unsigned int oStart; /* start of TLB in file */ unsigned int pos; /* current pos */ unsigned int length; /* total length */ void *mapping; /* memory mapping */ MSFT_SegDir * pTblDir; ITypeLibImpl* pLibInfo; } TLBContext; static inline BSTR TLB_get_bstr(const TLBString *str) { return str != NULL ? str->str : NULL; } static inline int TLB_str_memcmp(void *left, const TLBString *str, DWORD len) { if(!str) return 1; return memcmp(left, str->str, len); } static inline const GUID *TLB_get_guidref(const TLBGuid *guid) { return guid != NULL ? &guid->guid : NULL; } static inline const GUID *TLB_get_guid_null(const TLBGuid *guid) { return guid != NULL ? &guid->guid : &GUID_NULL; } static int get_ptr_size(SYSKIND syskind) { switch(syskind){ case SYS_WIN64: return 8; case SYS_WIN32: case SYS_MAC: case SYS_WIN16: return 4; } WARN("Unhandled syskind: 0x%x\n", syskind); return 4; } /* debug */ static void dump_TypeDesc(const TYPEDESC *pTD,char *szVarType) { if (pTD->vt & VT_RESERVED) szVarType += strlen(strcpy(szVarType, "reserved | ")); if (pTD->vt & VT_BYREF) szVarType += strlen(strcpy(szVarType, "ref to ")); if (pTD->vt & VT_ARRAY) szVarType += strlen(strcpy(szVarType, "array of ")); if (pTD->vt & VT_VECTOR) szVarType += strlen(strcpy(szVarType, "vector of ")); switch(pTD->vt & VT_TYPEMASK) { case VT_UI1: sprintf(szVarType, "VT_UI1"); break; case VT_I2: sprintf(szVarType, "VT_I2"); break; case VT_I4: sprintf(szVarType, "VT_I4"); break; case VT_R4: sprintf(szVarType, "VT_R4"); break; case VT_R8: sprintf(szVarType, "VT_R8"); break; case VT_BOOL: sprintf(szVarType, "VT_BOOL"); break; case VT_ERROR: sprintf(szVarType, "VT_ERROR"); break; case VT_CY: sprintf(szVarType, "VT_CY"); break; case VT_DATE: sprintf(szVarType, "VT_DATE"); break; case VT_BSTR: sprintf(szVarType, "VT_BSTR"); break; case VT_UNKNOWN: sprintf(szVarType, "VT_UNKNOWN"); break; case VT_DISPATCH: sprintf(szVarType, "VT_DISPATCH"); break; case VT_I1: sprintf(szVarType, "VT_I1"); break; case VT_UI2: sprintf(szVarType, "VT_UI2"); break; case VT_UI4: sprintf(szVarType, "VT_UI4"); break; case VT_INT: sprintf(szVarType, "VT_INT"); break; case VT_UINT: sprintf(szVarType, "VT_UINT"); break; case VT_VARIANT: sprintf(szVarType, "VT_VARIANT"); break; case VT_VOID: sprintf(szVarType, "VT_VOID"); break; case VT_HRESULT: sprintf(szVarType, "VT_HRESULT"); break; case VT_USERDEFINED: sprintf(szVarType, "VT_USERDEFINED ref = %x", pTD->u.hreftype); break; case VT_LPSTR: sprintf(szVarType, "VT_LPSTR"); break; case VT_LPWSTR: sprintf(szVarType, "VT_LPWSTR"); break; case VT_PTR: sprintf(szVarType, "ptr to "); dump_TypeDesc(pTD->u.lptdesc, szVarType + 7); break; case VT_SAFEARRAY: sprintf(szVarType, "safearray of "); dump_TypeDesc(pTD->u.lptdesc, szVarType + 13); break; case VT_CARRAY: sprintf(szVarType, "%d dim array of ", pTD->u.lpadesc->cDims); /* FIXME print out sizes */ dump_TypeDesc(&pTD->u.lpadesc->tdescElem, szVarType + strlen(szVarType)); break; default: sprintf(szVarType, "unknown(%d)", pTD->vt & VT_TYPEMASK); break; } } static void dump_ELEMDESC(const ELEMDESC *edesc) { char buf[200]; USHORT flags = edesc->u.paramdesc.wParamFlags; dump_TypeDesc(&edesc->tdesc,buf); MESSAGE("\t\ttdesc.vartype %d (%s)\n",edesc->tdesc.vt,buf); MESSAGE("\t\tu.paramdesc.wParamFlags"); if (!flags) MESSAGE(" PARAMFLAGS_NONE"); if (flags & PARAMFLAG_FIN) MESSAGE(" PARAMFLAG_FIN"); if (flags & PARAMFLAG_FOUT) MESSAGE(" PARAMFLAG_FOUT"); if (flags & PARAMFLAG_FLCID) MESSAGE(" PARAMFLAG_FLCID"); if (flags & PARAMFLAG_FRETVAL) MESSAGE(" PARAMFLAG_FRETVAL"); if (flags & PARAMFLAG_FOPT) MESSAGE(" PARAMFLAG_FOPT"); if (flags & PARAMFLAG_FHASDEFAULT) MESSAGE(" PARAMFLAG_FHASDEFAULT"); if (flags & PARAMFLAG_FHASCUSTDATA) MESSAGE(" PARAMFLAG_FHASCUSTDATA"); MESSAGE("\n\t\tu.paramdesc.lpex %p\n",edesc->u.paramdesc.pparamdescex); } static void dump_FUNCDESC(const FUNCDESC *funcdesc) { int i; MESSAGE("memid is %08x\n",funcdesc->memid); for (i=0;icParams;i++) { MESSAGE("Param %d:\n",i); dump_ELEMDESC(funcdesc->lprgelemdescParam+i); } MESSAGE("\tfunckind: %d (",funcdesc->funckind); switch (funcdesc->funckind) { case FUNC_VIRTUAL: MESSAGE("virtual");break; case FUNC_PUREVIRTUAL: MESSAGE("pure virtual");break; case FUNC_NONVIRTUAL: MESSAGE("nonvirtual");break; case FUNC_STATIC: MESSAGE("static");break; case FUNC_DISPATCH: MESSAGE("dispatch");break; default: MESSAGE("unknown");break; } MESSAGE(")\n\tinvkind: %d (",funcdesc->invkind); switch (funcdesc->invkind) { case INVOKE_FUNC: MESSAGE("func");break; case INVOKE_PROPERTYGET: MESSAGE("property get");break; case INVOKE_PROPERTYPUT: MESSAGE("property put");break; case INVOKE_PROPERTYPUTREF: MESSAGE("property put ref");break; } MESSAGE(")\n\tcallconv: %d (",funcdesc->callconv); switch (funcdesc->callconv) { case CC_CDECL: MESSAGE("cdecl");break; case CC_PASCAL: MESSAGE("pascal");break; case CC_STDCALL: MESSAGE("stdcall");break; case CC_SYSCALL: MESSAGE("syscall");break; default:break; } MESSAGE(")\n\toVft: %d\n", funcdesc->oVft); MESSAGE("\tcParamsOpt: %d\n", funcdesc->cParamsOpt); MESSAGE("\twFlags: %x\n", funcdesc->wFuncFlags); MESSAGE("\telemdescFunc (return value type):\n"); dump_ELEMDESC(&funcdesc->elemdescFunc); } static const char * const typekind_desc[] = { "TKIND_ENUM", "TKIND_RECORD", "TKIND_MODULE", "TKIND_INTERFACE", "TKIND_DISPATCH", "TKIND_COCLASS", "TKIND_ALIAS", "TKIND_UNION", "TKIND_MAX" }; static void dump_TLBFuncDescOne(const TLBFuncDesc * pfd) { int i; MESSAGE("%s(%u)\n", debugstr_w(TLB_get_bstr(pfd->Name)), pfd->funcdesc.cParams); for (i=0;ifuncdesc.cParams;i++) MESSAGE("\tparm%d: %s\n",i,debugstr_w(TLB_get_bstr(pfd->pParamDesc[i].Name))); dump_FUNCDESC(&(pfd->funcdesc)); MESSAGE("\thelpstring: %s\n", debugstr_w(TLB_get_bstr(pfd->HelpString))); MESSAGE("\thelpfile: %s\n", debugstr_w(TLB_get_bstr(pfd->HelpFile))); MESSAGE("\thelpcontext: %x\n", pfd->helpcontext); if(pfd->Entry == NULL) MESSAGE("\tentry: (null)\n"); else if(pfd->Entry == (void*)-1) MESSAGE("\tentry: invalid\n"); else if(IS_INTRESOURCE(pfd->Entry)) MESSAGE("\tentry: %p\n", pfd->Entry); else MESSAGE("\tentry: %s\n", debugstr_w(TLB_get_bstr(pfd->Entry))); } static void dump_TLBFuncDesc(const TLBFuncDesc * pfd, UINT n) { while (n) { dump_TLBFuncDescOne(pfd); ++pfd; --n; } } static void dump_TLBVarDesc(const TLBVarDesc * pvd, UINT n) { while (n) { TRACE_(typelib)("%s\n", debugstr_w(TLB_get_bstr(pvd->Name))); ++pvd; --n; } } static void dump_TLBImpLib(const TLBImpLib *import) { TRACE_(typelib)("%s %s\n", debugstr_guid(TLB_get_guidref(import->guid)), debugstr_w(import->name)); TRACE_(typelib)("v%d.%d lcid=%x offset=%x\n", import->wVersionMajor, import->wVersionMinor, import->lcid, import->offset); } static void dump_TLBRefType(const ITypeLibImpl *pTL) { TLBRefType *ref; LIST_FOR_EACH_ENTRY(ref, &pTL->ref_list, TLBRefType, entry) { TRACE_(typelib)("href:0x%08x\n", ref->reference); if(ref->index == -1) TRACE_(typelib)("%s\n", debugstr_guid(TLB_get_guidref(ref->guid))); else TRACE_(typelib)("type no: %d\n", ref->index); if(ref->pImpTLInfo != TLB_REF_INTERNAL && ref->pImpTLInfo != TLB_REF_NOT_FOUND) { TRACE_(typelib)("in lib\n"); dump_TLBImpLib(ref->pImpTLInfo); } } } static void dump_TLBImplType(const TLBImplType * impl, UINT n) { if(!impl) return; while (n) { TRACE_(typelib)("implementing/inheriting interface hRef = %x implflags %x\n", impl->hRef, impl->implflags); ++impl; --n; } } static void dump_DispParms(const DISPPARAMS * pdp) { unsigned int index; TRACE("args=%u named args=%u\n", pdp->cArgs, pdp->cNamedArgs); if (pdp->cNamedArgs && pdp->rgdispidNamedArgs) { TRACE("named args:\n"); for (index = 0; index < pdp->cNamedArgs; index++) TRACE( "\t0x%x\n", pdp->rgdispidNamedArgs[index] ); } if (pdp->cArgs && pdp->rgvarg) { TRACE("args:\n"); for (index = 0; index < pdp->cArgs; index++) TRACE(" [%d] %s\n", index, debugstr_variant(pdp->rgvarg+index)); } } static void dump_DispParms16(const DISPPARAMS16 * pdp) { unsigned int index; TRACE("args=%u named args=%u\n", pdp->cArgs, pdp->cNamedArgs); if (pdp->cNamedArgs && pdp->rgdispidNamedArgs) { TRACE("named args:\n"); for (index = 0; index < pdp->cNamedArgs; index++) TRACE("\t0x%x\n", ((DISPID*)MapSL(pdp->rgdispidNamedArgs))[index]); } if (pdp->cArgs && pdp->rgvarg) { TRACE("args:\n"); for (index = 0; index < pdp->cArgs; index++) TRACE(" [%d] %s\n", index, debugstr_variant16((VARIANT16*)MapSL(pdp->rgvarg) + index)); } } static void dump_TypeInfo(const ITypeInfoImpl * pty) { TRACE("%p ref=%u\n", pty, pty->ref); TRACE("%s %s\n", debugstr_w(TLB_get_bstr(pty->Name)), debugstr_w(TLB_get_bstr(pty->DocString))); TRACE("attr:%s\n", debugstr_guid(TLB_get_guidref(pty->guid))); TRACE("kind:%s\n", typekind_desc[pty->typeattr.typekind]); TRACE("fct:%u var:%u impl:%u\n", pty->typeattr.cFuncs, pty->typeattr.cVars, pty->typeattr.cImplTypes); TRACE("wTypeFlags: 0x%04x\n", pty->typeattr.wTypeFlags); TRACE("parent tlb:%p index in TLB:%u\n",pty->pTypeLib, pty->index); if (pty->typeattr.typekind == TKIND_MODULE) TRACE("dllname:%s\n", debugstr_w(TLB_get_bstr(pty->DllName))); if (TRACE_ON(ole)) dump_TLBFuncDesc(pty->funcdescs, pty->typeattr.cFuncs); dump_TLBVarDesc(pty->vardescs, pty->typeattr.cVars); dump_TLBImplType(pty->impltypes, pty->typeattr.cImplTypes); } static void dump_VARDESC(const VARDESC *v) { MESSAGE("memid %d\n",v->memid); MESSAGE("lpstrSchema %s\n",debugstr_w(v->lpstrSchema)); MESSAGE("oInst %d\n",v->u.oInst); dump_ELEMDESC(&(v->elemdescVar)); MESSAGE("wVarFlags %x\n",v->wVarFlags); MESSAGE("varkind %d\n",v->varkind); } static TYPEDESC std_typedesc[VT_LPWSTR+1] = { /* VT_LPWSTR is largest type that, may appear in type description */ {{0}, VT_EMPTY}, {{0}, VT_NULL}, {{0}, VT_I2}, {{0}, VT_I4}, {{0}, VT_R4}, {{0}, VT_R8}, {{0}, VT_CY}, {{0}, VT_DATE}, {{0}, VT_BSTR}, {{0}, VT_DISPATCH}, {{0}, VT_ERROR}, {{0}, VT_BOOL}, {{0}, VT_VARIANT},{{0}, VT_UNKNOWN}, {{0}, VT_DECIMAL}, {{0}, 15}, /* unused in VARENUM */ {{0}, VT_I1}, {{0}, VT_UI1}, {{0}, VT_UI2}, {{0}, VT_UI4}, {{0}, VT_I8}, {{0}, VT_UI8}, {{0}, VT_INT}, {{0}, VT_UINT}, {{0}, VT_VOID}, {{0}, VT_HRESULT}, {{0}, VT_PTR}, {{0}, VT_SAFEARRAY}, {{0}, VT_CARRAY}, {{0}, VT_USERDEFINED}, {{0}, VT_LPSTR}, {{0}, VT_LPWSTR} }; static void TLB_abort(void) { DebugBreak(); } /* returns the size required for a deep copy of a typedesc into a * flat buffer */ static SIZE_T TLB_SizeTypeDesc( const TYPEDESC *tdesc, BOOL alloc_initial_space ) { SIZE_T size = 0; if (alloc_initial_space) size += sizeof(TYPEDESC); switch (tdesc->vt) { case VT_PTR: case VT_SAFEARRAY: size += TLB_SizeTypeDesc(tdesc->u.lptdesc, TRUE); break; case VT_CARRAY: size += FIELD_OFFSET(ARRAYDESC, rgbounds[tdesc->u.lpadesc->cDims]); size += TLB_SizeTypeDesc(&tdesc->u.lpadesc->tdescElem, FALSE); break; } return size; } /* deep copy a typedesc into a flat buffer */ static void *TLB_CopyTypeDesc( TYPEDESC *dest, const TYPEDESC *src, void *buffer ) { if (!dest) { dest = buffer; buffer = (char *)buffer + sizeof(TYPEDESC); } *dest = *src; switch (src->vt) { case VT_PTR: case VT_SAFEARRAY: dest->u.lptdesc = buffer; buffer = TLB_CopyTypeDesc(NULL, src->u.lptdesc, buffer); break; case VT_CARRAY: dest->u.lpadesc = buffer; memcpy(dest->u.lpadesc, src->u.lpadesc, FIELD_OFFSET(ARRAYDESC, rgbounds[src->u.lpadesc->cDims])); buffer = (char *)buffer + FIELD_OFFSET(ARRAYDESC, rgbounds[src->u.lpadesc->cDims]); buffer = TLB_CopyTypeDesc(&dest->u.lpadesc->tdescElem, &src->u.lpadesc->tdescElem, buffer); break; } return buffer; } /* free custom data allocated by MSFT_CustData */ static inline void TLB_FreeCustData(struct list *custdata_list) { TLBCustData *cd, *cdn; LIST_FOR_EACH_ENTRY_SAFE(cd, cdn, custdata_list, TLBCustData, entry) { list_remove(&cd->entry); VariantClear(&cd->data); heap_free(cd); } } static BSTR TLB_MultiByteToBSTR(const char *ptr) { DWORD len; BSTR ret; len = MultiByteToWideChar(CP_ACP, 0, ptr, -1, NULL, 0); ret = SysAllocStringLen(NULL, len - 1); if (!ret) return ret; MultiByteToWideChar(CP_ACP, 0, ptr, -1, ret, len); return ret; } static inline TLBFuncDesc *TLB_get_funcdesc_by_memberid(TLBFuncDesc *funcdescs, UINT n, MEMBERID memid) { while(n){ if(funcdescs->funcdesc.memid == memid) return funcdescs; ++funcdescs; --n; } return NULL; } static inline TLBFuncDesc *TLB_get_funcdesc_by_memberid_and_invkind(TLBFuncDesc *funcdescs, UINT n, MEMBERID memid, INVOKEKIND invkind) { while(n){ if((funcdescs->funcdesc.memid == memid) && (funcdescs->funcdesc.invkind == invkind)) return funcdescs; ++funcdescs; --n; } return NULL; } static inline TLBVarDesc *TLB_get_vardesc_by_memberid(TLBVarDesc *vardescs, UINT n, MEMBERID memid) { while(n){ if(vardescs->vardesc.memid == memid) return vardescs; ++vardescs; --n; } return NULL; } static inline TLBVarDesc *TLB_get_vardesc_by_name(TLBVarDesc *vardescs, UINT n, const OLECHAR *name) { while(n){ if(!lstrcmpiW(TLB_get_bstr(vardescs->Name), name)) return vardescs; ++vardescs; --n; } return NULL; } static inline TLBCustData *TLB_get_custdata_by_guid(struct list *custdata_list, REFGUID guid) { TLBCustData *cust_data; LIST_FOR_EACH_ENTRY(cust_data, custdata_list, TLBCustData, entry) if(IsEqualIID(TLB_get_guid_null(cust_data->guid), guid)) return cust_data; return NULL; } static inline ITypeInfoImpl *TLB_get_typeinfo_by_name(ITypeInfoImpl **typeinfos, UINT n, const OLECHAR *name) { while(n){ if(!lstrcmpiW(TLB_get_bstr((*typeinfos)->Name), name)) return *typeinfos; ++typeinfos; --n; } return NULL; } static void TLBVarDesc_Constructor(TLBVarDesc *var_desc) { list_init(&var_desc->custdata_list); } static TLBVarDesc *TLBVarDesc_Alloc(UINT n) { TLBVarDesc *ret; ret = heap_alloc_zero(sizeof(TLBVarDesc) * n); if(!ret) return NULL; while(n){ TLBVarDesc_Constructor(&ret[n-1]); --n; } return ret; } static TLBParDesc *TLBParDesc_Constructor(UINT n) { TLBParDesc *ret; ret = heap_alloc_zero(sizeof(TLBParDesc) * n); if(!ret) return NULL; while(n){ list_init(&ret[n-1].custdata_list); --n; } return ret; } static void TLBFuncDesc_Constructor(TLBFuncDesc *func_desc) { list_init(&func_desc->custdata_list); } static TLBFuncDesc *TLBFuncDesc_Alloc(UINT n) { TLBFuncDesc *ret; ret = heap_alloc_zero(sizeof(TLBFuncDesc) * n); if(!ret) return NULL; while(n){ TLBFuncDesc_Constructor(&ret[n-1]); --n; } return ret; } static void TLBImplType_Constructor(TLBImplType *impl) { list_init(&impl->custdata_list); } static TLBImplType *TLBImplType_Alloc(UINT n) { TLBImplType *ret; ret = heap_alloc_zero(sizeof(TLBImplType) * n); if(!ret) return NULL; while(n){ TLBImplType_Constructor(&ret[n-1]); --n; } return ret; } static TLBGuid *TLB_append_guid(struct list *guid_list, const GUID *new_guid, HREFTYPE hreftype) { TLBGuid *guid; LIST_FOR_EACH_ENTRY(guid, guid_list, TLBGuid, entry) { if (IsEqualGUID(&guid->guid, new_guid)) return guid; } guid = heap_alloc(sizeof(TLBGuid)); if (!guid) return NULL; memcpy(&guid->guid, new_guid, sizeof(GUID)); guid->hreftype = hreftype; list_add_tail(guid_list, &guid->entry); return guid; } static HRESULT TLB_set_custdata(struct list *custdata_list, TLBGuid *tlbguid, VARIANT *var) { TLBCustData *cust_data; switch(V_VT(var)){ case VT_I4: case VT_R4: case VT_UI4: case VT_INT: case VT_UINT: case VT_HRESULT: case VT_BSTR: break; default: return DISP_E_BADVARTYPE; } cust_data = TLB_get_custdata_by_guid(custdata_list, TLB_get_guid_null(tlbguid)); if (!cust_data) { cust_data = heap_alloc(sizeof(TLBCustData)); if (!cust_data) return E_OUTOFMEMORY; cust_data->guid = tlbguid; VariantInit(&cust_data->data); list_add_tail(custdata_list, &cust_data->entry); }else VariantClear(&cust_data->data); return VariantCopy(&cust_data->data, var); } static TLBString *TLB_append_str(struct list *string_list, BSTR new_str) { TLBString *str; if(!new_str) return NULL; LIST_FOR_EACH_ENTRY(str, string_list, TLBString, entry) { if (strcmpW(str->str, new_str) == 0) return str; } str = heap_alloc(sizeof(TLBString)); if (!str) return NULL; str->str = SysAllocString(new_str); if (!str->str) { heap_free(str); return NULL; } list_add_tail(string_list, &str->entry); return str; } static HRESULT TLB_get_size_from_hreftype(ITypeInfoImpl *info, HREFTYPE href, ULONG *size, WORD *align) { ITypeInfo *other; TYPEATTR *attr; HRESULT hr; hr = ITypeInfo2_GetRefTypeInfo(&info->ITypeInfo2_iface, href, &other); if(FAILED(hr)) return hr; hr = ITypeInfo_GetTypeAttr(other, &attr); if(FAILED(hr)){ ITypeInfo_Release(other); return hr; } if(size) *size = attr->cbSizeInstance; if(align) *align = attr->cbAlignment; ITypeInfo_ReleaseTypeAttr(other, attr); ITypeInfo_Release(other); return S_OK; } static HRESULT TLB_size_instance(ITypeInfoImpl *info, SYSKIND sys, TYPEDESC *tdesc, ULONG *size, WORD *align) { ULONG i, sub, ptr_size; HRESULT hr; ptr_size = get_ptr_size(sys); switch(tdesc->vt){ case VT_VOID: *size = 0; break; case VT_I1: case VT_UI1: *size = 1; break; case VT_I2: case VT_BOOL: case VT_UI2: *size = 2; break; case VT_I4: case VT_R4: case VT_ERROR: case VT_UI4: case VT_INT: case VT_UINT: case VT_HRESULT: *size = 4; break; case VT_R8: case VT_I8: case VT_UI8: *size = 8; break; case VT_BSTR: case VT_DISPATCH: case VT_UNKNOWN: case VT_PTR: case VT_SAFEARRAY: case VT_LPSTR: case VT_LPWSTR: *size = ptr_size; break; case VT_DATE: *size = sizeof(DATE); break; case VT_VARIANT: *size = sizeof(VARIANT); #ifdef _WIN64 if(sys == SYS_WIN32) *size -= 8; /* 32-bit VARIANT is 8 bytes smaller than 64-bit VARIANT */ #endif break; case VT_DECIMAL: *size = sizeof(DECIMAL); break; case VT_CY: *size = sizeof(CY); break; case VT_CARRAY: *size = 0; for(i = 0; i < tdesc->u.lpadesc->cDims; ++i) *size += tdesc->u.lpadesc->rgbounds[i].cElements; hr = TLB_size_instance(info, sys, &tdesc->u.lpadesc->tdescElem, &sub, align); if(FAILED(hr)) return hr; *size *= sub; return S_OK; case VT_USERDEFINED: return TLB_get_size_from_hreftype(info, tdesc->u.hreftype, size, align); default: FIXME("Unsized VT: 0x%x\n", tdesc->vt); return E_FAIL; } if(align){ if(*size < 4) *align = *size; else *align = 4; } return S_OK; } #if 1 /********************************************************************** * * Functions for reading MSFT typelibs (those created by CreateTypeLib2) */ static inline void MSFT_Seek(TLBContext *pcx, LONG where) { if (where != DO_NOT_SEEK) { where += pcx->oStart; if (where > pcx->length) { /* FIXME */ ERR("seek beyond end (%d/%d)\n", where, pcx->length ); TLB_abort(); } pcx->pos = where; } } /* read function */ static DWORD MSFT_Read(void *buffer, DWORD count, TLBContext *pcx, LONG where ) { TRACE_(typelib)("pos=0x%08x len=0x%08x 0x%08x 0x%08x 0x%08x\n", pcx->pos, count, pcx->oStart, pcx->length, where); MSFT_Seek(pcx, where); if (pcx->pos + count > pcx->length) count = pcx->length - pcx->pos; memcpy( buffer, (char *)pcx->mapping + pcx->pos, count ); pcx->pos += count; return count; } static DWORD MSFT_ReadLEDWords(void *buffer, DWORD count, TLBContext *pcx, LONG where ) { DWORD ret; ret = MSFT_Read(buffer, count, pcx, where); FromLEDWords(buffer, ret); return ret; } static DWORD MSFT_ReadLEWords(void *buffer, DWORD count, TLBContext *pcx, LONG where ) { DWORD ret; ret = MSFT_Read(buffer, count, pcx, where); FromLEWords(buffer, ret); return ret; } static HRESULT MSFT_ReadAllGuids(TLBContext *pcx) { TLBGuid *guid; MSFT_GuidEntry entry; int offs = 0; MSFT_Seek(pcx, pcx->pTblDir->pGuidTab.offset); while (1) { if (offs >= pcx->pTblDir->pGuidTab.length) return S_OK; MSFT_ReadLEWords(&entry, sizeof(MSFT_GuidEntry), pcx, DO_NOT_SEEK); guid = heap_alloc(sizeof(TLBGuid)); guid->offset = offs; guid->guid = entry.guid; guid->hreftype = entry.hreftype; list_add_tail(&pcx->pLibInfo->guid_list, &guid->entry); offs += sizeof(MSFT_GuidEntry); } } static TLBGuid *MSFT_ReadGuid( int offset, TLBContext *pcx) { TLBGuid *ret; LIST_FOR_EACH_ENTRY(ret, &pcx->pLibInfo->guid_list, TLBGuid, entry){ if(ret->offset == offset){ TRACE_(typelib)("%s\n", debugstr_guid(&ret->guid)); return ret; } } return NULL; } static HREFTYPE MSFT_ReadHreftype( TLBContext *pcx, int offset ) { MSFT_NameIntro niName; if (offset < 0) { ERR_(typelib)("bad offset %d\n", offset); return -1; } MSFT_ReadLEDWords(&niName, sizeof(niName), pcx, pcx->pTblDir->pNametab.offset+offset); return niName.hreftype; } static HRESULT MSFT_ReadAllNames(TLBContext *pcx) { char *string; MSFT_NameIntro intro; INT16 len_piece; int offs = 0, lengthInChars; MSFT_Seek(pcx, pcx->pTblDir->pNametab.offset); while (1) { TLBString *tlbstr; if (offs >= pcx->pTblDir->pNametab.length) return S_OK; MSFT_ReadLEWords(&intro, sizeof(MSFT_NameIntro), pcx, DO_NOT_SEEK); intro.namelen &= 0xFF; len_piece = intro.namelen + sizeof(MSFT_NameIntro); if(len_piece % 4) len_piece = (len_piece + 4) & ~0x3; if(len_piece < 8) len_piece = 8; string = heap_alloc(len_piece + 1); MSFT_Read(string, len_piece - sizeof(MSFT_NameIntro), pcx, DO_NOT_SEEK); string[intro.namelen] = '\0'; lengthInChars = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, string, -1, NULL, 0); if (!lengthInChars) { heap_free(string); return E_UNEXPECTED; } tlbstr = heap_alloc(sizeof(TLBString)); tlbstr->offset = offs; tlbstr->str = SysAllocStringByteLen(NULL, lengthInChars * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, string, -1, tlbstr->str, lengthInChars); heap_free(string); list_add_tail(&pcx->pLibInfo->name_list, &tlbstr->entry); offs += len_piece; } } static TLBString *MSFT_ReadName( TLBContext *pcx, int offset) { TLBString *tlbstr; LIST_FOR_EACH_ENTRY(tlbstr, &pcx->pLibInfo->name_list, TLBString, entry) { if (tlbstr->offset == offset) { TRACE_(typelib)("%s\n", debugstr_w(tlbstr->str)); return tlbstr; } } return NULL; } static TLBString *MSFT_ReadString( TLBContext *pcx, int offset) { TLBString *tlbstr; LIST_FOR_EACH_ENTRY(tlbstr, &pcx->pLibInfo->string_list, TLBString, entry) { if (tlbstr->offset == offset) { TRACE_(typelib)("%s\n", debugstr_w(tlbstr->str)); return tlbstr; } } return NULL; } /* * read a value and fill a VARIANT structure */ static void MSFT_ReadValue( VARIANT * pVar, int offset, TLBContext *pcx ) { int size; TRACE_(typelib)("\n"); if(offset <0) { /* data are packed in here */ V_VT(pVar) = (offset & 0x7c000000 )>> 26; V_I4(pVar) = offset & 0x3ffffff; return; } MSFT_ReadLEWords(&(V_VT(pVar)), sizeof(VARTYPE), pcx, pcx->pTblDir->pCustData.offset + offset ); TRACE_(typelib)("Vartype = %x\n", V_VT(pVar)); switch (V_VT(pVar)){ case VT_EMPTY: /* FIXME: is this right? */ case VT_NULL: /* FIXME: is this right? */ case VT_I2 : /* this should not happen */ case VT_I4 : case VT_R4 : case VT_ERROR : case VT_BOOL : case VT_I1 : case VT_UI1 : case VT_UI2 : case VT_UI4 : case VT_INT : case VT_UINT : case VT_VOID : /* FIXME: is this right? */ case VT_HRESULT : size=4; break; case VT_R8 : case VT_CY : case VT_DATE : case VT_I8 : case VT_UI8 : case VT_DECIMAL : /* FIXME: is this right? */ case VT_FILETIME : size=8;break; /* pointer types with known behaviour */ case VT_BSTR :{ char * ptr; MSFT_ReadLEDWords(&size, sizeof(INT), pcx, DO_NOT_SEEK ); if(size == -1){ V_BSTR(pVar) = NULL; }else{ ptr = heap_alloc_zero(size); MSFT_Read(ptr, size, pcx, DO_NOT_SEEK); V_BSTR(pVar)=SysAllocStringLen(NULL,size); /* FIXME: do we need a AtoW conversion here? */ V_UNION(pVar, bstrVal[size])='\0'; while(size--) V_UNION(pVar, bstrVal[size])=ptr[size]; heap_free(ptr); } } size=-4; break; /* FIXME: this will not work AT ALL when the variant contains a pointer */ case VT_DISPATCH : case VT_VARIANT : case VT_UNKNOWN : case VT_PTR : case VT_SAFEARRAY : case VT_CARRAY : case VT_USERDEFINED : case VT_LPSTR : case VT_LPWSTR : case VT_BLOB : case VT_STREAM : case VT_STORAGE : case VT_STREAMED_OBJECT : case VT_STORED_OBJECT : case VT_BLOB_OBJECT : case VT_CF : case VT_CLSID : default: size=0; FIXME("VARTYPE %d is not supported, setting pointer to NULL\n", V_VT(pVar)); } if(size>0) /* (big|small) endian correct? */ MSFT_Read(&(V_I2(pVar)), size, pcx, DO_NOT_SEEK ); return; } /* * create a linked list with custom data */ static int MSFT_CustData( TLBContext *pcx, int offset, struct list *custdata_list) { MSFT_CDGuid entry; TLBCustData* pNew; int count=0; TRACE_(typelib)("\n"); if (pcx->pTblDir->pCDGuids.offset < 0) return 0; while(offset >=0){ count++; pNew=heap_alloc_zero(sizeof(TLBCustData)); MSFT_ReadLEDWords(&entry, sizeof(entry), pcx, pcx->pTblDir->pCDGuids.offset+offset); pNew->guid = MSFT_ReadGuid(entry.GuidOffset, pcx); MSFT_ReadValue(&(pNew->data), entry.DataOffset, pcx); list_add_head(custdata_list, &pNew->entry); offset = entry.next; } return count; } static void MSFT_GetTdesc(TLBContext *pcx, INT type, TYPEDESC *pTd) { if(type <0) pTd->vt=type & VT_TYPEMASK; else *pTd=pcx->pLibInfo->pTypeDesc[type/(2*sizeof(INT))]; TRACE_(typelib)("vt type = %X\n", pTd->vt); } static BOOL TLB_is_propgetput(INVOKEKIND invkind) { return (invkind == INVOKE_PROPERTYGET || invkind == INVOKE_PROPERTYPUT || invkind == INVOKE_PROPERTYPUTREF); } static void MSFT_DoFuncs(TLBContext* pcx, ITypeInfoImpl* pTI, int cFuncs, int cVars, int offset, TLBFuncDesc** pptfd) { /* * member information is stored in a data structure at offset * indicated by the memoffset field of the typeinfo structure * There are several distinctive parts. * The first part starts with a field that holds the total length * of this (first) part excluding this field. Then follow the records, * for each member there is one record. * * The first entry is always the length of the record (including this * length word). * The rest of the record depends on the type of the member. If there is * a field indicating the member type (function, variable, interface, etc) * I have not found it yet. At this time we depend on the information * in the type info and the usual order how things are stored. * * Second follows an array sized nrMEM*sizeof(INT) with a member id * for each member; * * Third is an equal sized array with file offsets to the name entry * of each member. * * The fourth and last (?) part is an array with offsets to the records * in the first part of this file segment. */ int infolen, nameoffset, reclength, i; int recoffset = offset + sizeof(INT); char *recbuf = heap_alloc(0xffff); MSFT_FuncRecord *pFuncRec = (MSFT_FuncRecord*)recbuf; TLBFuncDesc *ptfd_prev = NULL, *ptfd; TRACE_(typelib)("\n"); MSFT_ReadLEDWords(&infolen, sizeof(INT), pcx, offset); *pptfd = TLBFuncDesc_Alloc(cFuncs); ptfd = *pptfd; for ( i = 0; i < cFuncs ; i++ ) { int optional; /* name, eventually add to a hash table */ MSFT_ReadLEDWords(&nameoffset, sizeof(INT), pcx, offset + infolen + (cFuncs + cVars + i + 1) * sizeof(INT)); /* read the function information record */ MSFT_ReadLEDWords(&reclength, sizeof(pFuncRec->Info), pcx, recoffset); reclength &= 0xffff; MSFT_ReadLEDWords(&pFuncRec->DataType, reclength - FIELD_OFFSET(MSFT_FuncRecord, DataType), pcx, DO_NOT_SEEK); /* size without argument data */ optional = reclength - pFuncRec->nrargs*sizeof(MSFT_ParameterInfo); if (pFuncRec->FKCCIC & 0x1000) optional -= pFuncRec->nrargs * sizeof(INT); if (optional > FIELD_OFFSET(MSFT_FuncRecord, HelpContext)) ptfd->helpcontext = pFuncRec->HelpContext; if (optional > FIELD_OFFSET(MSFT_FuncRecord, oHelpString)) ptfd->HelpString = MSFT_ReadString(pcx, pFuncRec->oHelpString); if (optional > FIELD_OFFSET(MSFT_FuncRecord, oEntry)) { if (pFuncRec->FKCCIC & 0x2000 ) { if (!IS_INTRESOURCE(pFuncRec->oEntry)) ERR("ordinal 0x%08x invalid, IS_INTRESOURCE is false\n", pFuncRec->oEntry); ptfd->Entry = (TLBString*)(DWORD_PTR)LOWORD(pFuncRec->oEntry); } else ptfd->Entry = MSFT_ReadString(pcx, pFuncRec->oEntry); } else ptfd->Entry = (TLBString*)-1; if (optional > FIELD_OFFSET(MSFT_FuncRecord, HelpStringContext)) ptfd->HelpStringContext = pFuncRec->HelpStringContext; if (optional > FIELD_OFFSET(MSFT_FuncRecord, oCustData) && pFuncRec->FKCCIC & 0x80) MSFT_CustData(pcx, pFuncRec->oCustData, &ptfd->custdata_list); /* fill the FuncDesc Structure */ MSFT_ReadLEDWords( & ptfd->funcdesc.memid, sizeof(INT), pcx, offset + infolen + ( i + 1) * sizeof(INT)); ptfd->funcdesc.funckind = (pFuncRec->FKCCIC) & 0x7; ptfd->funcdesc.invkind = (pFuncRec->FKCCIC) >> 3 & 0xF; ptfd->funcdesc.callconv = (pFuncRec->FKCCIC) >> 8 & 0xF; ptfd->funcdesc.cParams = pFuncRec->nrargs ; ptfd->funcdesc.cParamsOpt = pFuncRec->nroargs ; ptfd->funcdesc.oVft = (pFuncRec->VtableOffset & ~1) * sizeof(void *) / pTI->pTypeLib->ptr_size; ptfd->funcdesc.wFuncFlags = LOWORD(pFuncRec->Flags) ; /* nameoffset is sometimes -1 on the second half of a propget/propput * pair of functions */ if ((nameoffset == -1) && (i > 0) && TLB_is_propgetput(ptfd_prev->funcdesc.invkind) && TLB_is_propgetput(ptfd->funcdesc.invkind)) ptfd->Name = ptfd_prev->Name; else ptfd->Name = MSFT_ReadName(pcx, nameoffset); MSFT_GetTdesc(pcx, pFuncRec->DataType, &ptfd->funcdesc.elemdescFunc.tdesc); /* do the parameters/arguments */ if(pFuncRec->nrargs) { int j = 0; MSFT_ParameterInfo paraminfo; ptfd->funcdesc.lprgelemdescParam = heap_alloc_zero(pFuncRec->nrargs * (sizeof(ELEMDESC) + sizeof(PARAMDESCEX))); ptfd->pParamDesc = TLBParDesc_Constructor(pFuncRec->nrargs); MSFT_ReadLEDWords(¶minfo, sizeof(paraminfo), pcx, recoffset + reclength - pFuncRec->nrargs * sizeof(MSFT_ParameterInfo)); for ( j = 0 ; j < pFuncRec->nrargs ; j++ ) { ELEMDESC *elemdesc = &ptfd->funcdesc.lprgelemdescParam[j]; MSFT_GetTdesc(pcx, paraminfo.DataType, &elemdesc->tdesc); elemdesc->u.paramdesc.wParamFlags = paraminfo.Flags; /* name */ if (paraminfo.oName != -1) ptfd->pParamDesc[j].Name = MSFT_ReadName( pcx, paraminfo.oName ); TRACE_(typelib)("param[%d] = %s\n", j, debugstr_w(TLB_get_bstr(ptfd->pParamDesc[j].Name))); /* default value */ if ( (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) && (pFuncRec->FKCCIC & 0x1000) ) { INT* pInt = (INT *)((char *)pFuncRec + reclength - (pFuncRec->nrargs * 4) * sizeof(INT) ); PARAMDESC* pParamDesc = &elemdesc->u.paramdesc; pParamDesc->pparamdescex = (PARAMDESCEX*)(ptfd->funcdesc.lprgelemdescParam+pFuncRec->nrargs)+j; pParamDesc->pparamdescex->cBytes = sizeof(PARAMDESCEX); MSFT_ReadValue(&(pParamDesc->pparamdescex->varDefaultValue), pInt[j], pcx); } else elemdesc->u.paramdesc.pparamdescex = NULL; /* custom info */ if (optional > (FIELD_OFFSET(MSFT_FuncRecord, oArgCustData) + j*sizeof(pFuncRec->oArgCustData[0])) && pFuncRec->FKCCIC & 0x80 ) { MSFT_CustData(pcx, pFuncRec->oArgCustData[j], &ptfd->pParamDesc[j].custdata_list); } /* SEEK value = jump to offset, * from there jump to the end of record, * go back by (j-1) arguments */ MSFT_ReadLEDWords( ¶minfo , sizeof(MSFT_ParameterInfo), pcx, recoffset + reclength - ((pFuncRec->nrargs - j - 1) * sizeof(MSFT_ParameterInfo))); } } /* scode is not used: archaic win16 stuff FIXME: right? */ ptfd->funcdesc.cScodes = 0 ; ptfd->funcdesc.lprgscode = NULL ; ptfd_prev = ptfd; ++ptfd; recoffset += reclength; } heap_free(recbuf); } static void MSFT_DoVars(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs, int cVars, int offset, TLBVarDesc ** pptvd) { int infolen, nameoffset, reclength; char recbuf[256]; MSFT_VarRecord *pVarRec = (MSFT_VarRecord*)recbuf; TLBVarDesc *ptvd; int i; int recoffset; TRACE_(typelib)("\n"); ptvd = *pptvd = TLBVarDesc_Alloc(cVars); MSFT_ReadLEDWords(&infolen,sizeof(INT), pcx, offset); MSFT_ReadLEDWords(&recoffset,sizeof(INT), pcx, offset + infolen + ((cFuncs+cVars)*2+cFuncs + 1)*sizeof(INT)); recoffset += offset+sizeof(INT); for(i=0;iName=MSFT_ReadName(pcx, nameoffset); /* read the variable information record */ MSFT_ReadLEDWords(&reclength, sizeof(pVarRec->Info), pcx, recoffset); reclength &= 0xff; MSFT_ReadLEDWords(&pVarRec->DataType, reclength - FIELD_OFFSET(MSFT_VarRecord, DataType), pcx, DO_NOT_SEEK); /* optional data */ if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpContext)) ptvd->HelpContext = pVarRec->HelpContext; if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpString)) ptvd->HelpString = MSFT_ReadString(pcx, pVarRec->HelpString); if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpStringContext)) ptvd->HelpStringContext = pVarRec->HelpStringContext; /* fill the VarDesc Structure */ MSFT_ReadLEDWords(&ptvd->vardesc.memid, sizeof(INT), pcx, offset + infolen + (cFuncs + i + 1) * sizeof(INT)); ptvd->vardesc.varkind = pVarRec->VarKind; ptvd->vardesc.wVarFlags = pVarRec->Flags; MSFT_GetTdesc(pcx, pVarRec->DataType, &ptvd->vardesc.elemdescVar.tdesc); /* ptvd->vardesc.lpstrSchema; is reserved (SDK) FIXME?? */ if(pVarRec->VarKind == VAR_CONST ){ ptvd->vardesc.u.lpvarValue = heap_alloc_zero(sizeof(VARIANT)); MSFT_ReadValue(ptvd->vardesc.u.lpvarValue, pVarRec->OffsValue, pcx); } else ptvd->vardesc.u.oInst=pVarRec->OffsValue; recoffset += reclength; } } /* process Implemented Interfaces of a com class */ static void MSFT_DoImplTypes(TLBContext *pcx, ITypeInfoImpl *pTI, int count, int offset) { int i; MSFT_RefRecord refrec; TLBImplType *pImpl; TRACE_(typelib)("\n"); pTI->impltypes = TLBImplType_Alloc(count); pImpl = pTI->impltypes; for(i=0;ipTblDir->pRefTab.offset); pImpl->hRef = refrec.reftype; pImpl->implflags=refrec.flags; MSFT_CustData(pcx, refrec.oCustData, &pImpl->custdata_list); offset=refrec.onext; ++pImpl; } } #ifdef _WIN64 /* when a 32-bit typelib is loaded in 64-bit mode, we need to resize pointers * and some structures, and fix the alignment */ static void TLB_fix_32on64_typeinfo(ITypeInfoImpl *info) { if(info->typeattr.typekind == TKIND_ALIAS){ switch(info->tdescAlias->vt){ case VT_BSTR: case VT_DISPATCH: case VT_UNKNOWN: case VT_PTR: case VT_SAFEARRAY: case VT_LPSTR: case VT_LPWSTR: info->typeattr.cbSizeInstance = sizeof(void*); info->typeattr.cbAlignment = sizeof(void*); break; case VT_CARRAY: case VT_USERDEFINED: TLB_size_instance(info, SYS_WIN64, info->tdescAlias, &info->typeattr.cbSizeInstance, &info->typeattr.cbAlignment); break; case VT_VARIANT: info->typeattr.cbSizeInstance = sizeof(VARIANT); info->typeattr.cbAlignment = 8; default: if(info->typeattr.cbSizeInstance < sizeof(void*)) info->typeattr.cbAlignment = info->typeattr.cbSizeInstance; else info->typeattr.cbAlignment = sizeof(void*); break; } }else if(info->typeattr.typekind == TKIND_INTERFACE || info->typeattr.typekind == TKIND_DISPATCH || info->typeattr.typekind == TKIND_COCLASS){ info->typeattr.cbSizeInstance = sizeof(void*); info->typeattr.cbAlignment = sizeof(void*); } } #endif /* * process a typeinfo record */ static ITypeInfoImpl * MSFT_DoTypeInfo( TLBContext *pcx, int count, ITypeLibImpl * pLibInfo) { MSFT_TypeInfoBase tiBase; ITypeInfoImpl *ptiRet; TRACE_(typelib)("count=%u\n", count); ptiRet = ITypeInfoImpl_Constructor(); MSFT_ReadLEDWords(&tiBase, sizeof(tiBase) ,pcx , pcx->pTblDir->pTypeInfoTab.offset+count*sizeof(tiBase)); /* this is where we are coming from */ ptiRet->pTypeLib = pLibInfo; ptiRet->index=count; ptiRet->guid = MSFT_ReadGuid(tiBase.posguid, pcx); ptiRet->typeattr.lcid = pLibInfo->set_lcid; /* FIXME: correct? */ ptiRet->typeattr.lpstrSchema = NULL; /* reserved */ ptiRet->typeattr.cbSizeInstance = tiBase.size; ptiRet->typeattr.typekind = tiBase.typekind & 0xF; ptiRet->typeattr.cFuncs = LOWORD(tiBase.cElement); ptiRet->typeattr.cVars = HIWORD(tiBase.cElement); ptiRet->typeattr.cbAlignment = (tiBase.typekind >> 11 )& 0x1F; /* there are more flags there */ ptiRet->typeattr.wTypeFlags = tiBase.flags; ptiRet->typeattr.wMajorVerNum = LOWORD(tiBase.version); ptiRet->typeattr.wMinorVerNum = HIWORD(tiBase.version); ptiRet->typeattr.cImplTypes = tiBase.cImplTypes; ptiRet->typeattr.cbSizeVft = tiBase.cbSizeVft; if (ptiRet->typeattr.typekind == TKIND_ALIAS) { TYPEDESC tmp; MSFT_GetTdesc(pcx, tiBase.datatype1, &tmp); ptiRet->tdescAlias = heap_alloc(TLB_SizeTypeDesc(&tmp, TRUE)); TLB_CopyTypeDesc(NULL, &tmp, ptiRet->tdescAlias); } /* FIXME: */ /* IDLDESC idldescType; *//* never saw this one != zero */ /* name, eventually add to a hash table */ ptiRet->Name=MSFT_ReadName(pcx, tiBase.NameOffset); ptiRet->hreftype = MSFT_ReadHreftype(pcx, tiBase.NameOffset); TRACE_(typelib)("reading %s\n", debugstr_w(TLB_get_bstr(ptiRet->Name))); /* help info */ ptiRet->DocString=MSFT_ReadString(pcx, tiBase.docstringoffs); ptiRet->dwHelpStringContext=tiBase.helpstringcontext; ptiRet->dwHelpContext=tiBase.helpcontext; if (ptiRet->typeattr.typekind == TKIND_MODULE) ptiRet->DllName = MSFT_ReadString(pcx, tiBase.datatype1); /* note: InfoType's Help file and HelpStringDll come from the containing * library. Further HelpString and Docstring appear to be the same thing :( */ /* functions */ if(ptiRet->typeattr.cFuncs >0 ) MSFT_DoFuncs(pcx, ptiRet, ptiRet->typeattr.cFuncs, ptiRet->typeattr.cVars, tiBase.memoffset, &ptiRet->funcdescs); /* variables */ if(ptiRet->typeattr.cVars >0 ) MSFT_DoVars(pcx, ptiRet, ptiRet->typeattr.cFuncs, ptiRet->typeattr.cVars, tiBase.memoffset, &ptiRet->vardescs); if(ptiRet->typeattr.cImplTypes >0 ) { switch(ptiRet->typeattr.typekind) { case TKIND_COCLASS: MSFT_DoImplTypes(pcx, ptiRet, ptiRet->typeattr.cImplTypes, tiBase.datatype1); break; case TKIND_DISPATCH: /* This is not -1 when the interface is a non-base dual interface or when a dispinterface wraps an interface, i.e., the idl 'dispinterface x {interface y;};'. Note however that GetRefTypeOfImplType(0) always returns a ref to IDispatch and not this interface. */ if (tiBase.datatype1 != -1) { ptiRet->impltypes = TLBImplType_Alloc(1); ptiRet->impltypes[0].hRef = tiBase.datatype1; } break; default: ptiRet->impltypes = TLBImplType_Alloc(1); ptiRet->impltypes[0].hRef = tiBase.datatype1; break; } } MSFT_CustData(pcx, tiBase.oCustData, ptiRet->pcustdata_list); TRACE_(typelib)("%s guid: %s kind:%s\n", debugstr_w(TLB_get_bstr(ptiRet->Name)), debugstr_guid(TLB_get_guidref(ptiRet->guid)), typekind_desc[ptiRet->typeattr.typekind]); if (TRACE_ON(typelib)) dump_TypeInfo(ptiRet); return ptiRet; } static HRESULT MSFT_ReadAllStrings(TLBContext *pcx) { char *string; INT16 len_str, len_piece; int offs = 0, lengthInChars; MSFT_Seek(pcx, pcx->pTblDir->pStringtab.offset); while (1) { TLBString *tlbstr; if (offs >= pcx->pTblDir->pStringtab.length) return S_OK; MSFT_ReadLEWords(&len_str, sizeof(INT16), pcx, DO_NOT_SEEK); len_piece = len_str + sizeof(INT16); if(len_piece % 4) len_piece = (len_piece + 4) & ~0x3; if(len_piece < 8) len_piece = 8; string = heap_alloc(len_piece + 1); MSFT_Read(string, len_piece - sizeof(INT16), pcx, DO_NOT_SEEK); string[len_str] = '\0'; lengthInChars = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, string, -1, NULL, 0); if (!lengthInChars) { heap_free(string); return E_UNEXPECTED; } tlbstr = heap_alloc(sizeof(TLBString)); tlbstr->offset = offs; tlbstr->str = SysAllocStringByteLen(NULL, lengthInChars * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, string, -1, tlbstr->str, lengthInChars); heap_free(string); list_add_tail(&pcx->pLibInfo->string_list, &tlbstr->entry); offs += len_piece; } } static HRESULT MSFT_ReadAllRefs(TLBContext *pcx) { TLBRefType *ref; int offs = 0; MSFT_Seek(pcx, pcx->pTblDir->pImpInfo.offset); while (offs < pcx->pTblDir->pImpInfo.length) { MSFT_ImpInfo impinfo; TLBImpLib *pImpLib; MSFT_ReadLEDWords(&impinfo, sizeof(impinfo), pcx, DO_NOT_SEEK); ref = heap_alloc_zero(sizeof(TLBRefType)); list_add_tail(&pcx->pLibInfo->ref_list, &ref->entry); LIST_FOR_EACH_ENTRY(pImpLib, &pcx->pLibInfo->implib_list, TLBImpLib, entry) if(pImpLib->offset==impinfo.oImpFile) break; if(&pImpLib->entry != &pcx->pLibInfo->implib_list){ ref->reference = offs; ref->pImpTLInfo = pImpLib; if(impinfo.flags & MSFT_IMPINFO_OFFSET_IS_GUID) { ref->guid = MSFT_ReadGuid(impinfo.oGuid, pcx); TRACE("importing by guid %s\n", debugstr_guid(TLB_get_guidref(ref->guid))); ref->index = TLB_REF_USE_GUID; } else ref->index = impinfo.oGuid; }else{ ERR("Cannot find a reference\n"); ref->reference = -1; ref->pImpTLInfo = TLB_REF_NOT_FOUND; } offs += sizeof(impinfo); } return S_OK; } #endif /* Because type library parsing has some degree of overhead, and some apps repeatedly load the same * typelibs over and over, we cache them here. According to MSDN Microsoft have a similar scheme in * place. This will cause a deliberate memory leak, but generally losing RAM for cycles is an acceptable * tradeoff here. */ static struct list tlb_cache = LIST_INIT(tlb_cache); static CRITICAL_SECTION cache_section; static CRITICAL_SECTION_DEBUG cache_section_debug = { 0, 0, &cache_section, { &cache_section_debug.ProcessLocksList, &cache_section_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": typelib loader cache") } }; static CRITICAL_SECTION cache_section = { &cache_section_debug, -1, 0, 0, 0, 0 }; #if 1 typedef struct TLB_PEFile { IUnknown IUnknown_iface; LONG refs; HMODULE dll; HRSRC typelib_resource; HGLOBAL typelib_global; LPVOID typelib_base; } TLB_PEFile; static inline TLB_PEFile *pefile_impl_from_IUnknown(IUnknown *iface) { return CONTAINING_RECORD(iface, TLB_PEFile, IUnknown_iface); } static HRESULT WINAPI TLB_PEFile_QueryInterface(IUnknown *iface, REFIID riid, void **ppv) { if (IsEqualIID(riid, &IID_IUnknown)) { *ppv = iface; IUnknown_AddRef(iface); return S_OK; } *ppv = NULL; return E_NOINTERFACE; } static ULONG WINAPI TLB_PEFile_AddRef(IUnknown *iface) { TLB_PEFile *This = pefile_impl_from_IUnknown(iface); return InterlockedIncrement(&This->refs); } static ULONG WINAPI TLB_PEFile_Release(IUnknown *iface) { TLB_PEFile *This = pefile_impl_from_IUnknown(iface); ULONG refs = InterlockedDecrement(&This->refs); if (!refs) { if (This->typelib_global) FreeResource(This->typelib_global); if (This->dll) FreeLibrary(This->dll); heap_free(This); } return refs; } static const IUnknownVtbl TLB_PEFile_Vtable = { TLB_PEFile_QueryInterface, TLB_PEFile_AddRef, TLB_PEFile_Release }; static HRESULT TLB_PEFile_Open(LPCWSTR path, INT index, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile) { TLB_PEFile *This; HRESULT hr = TYPE_E_CANTLOADLIBRARY; index = -1 ? 1 : index; This = heap_alloc(sizeof(TLB_PEFile)); if (!This) return E_OUTOFMEMORY; This->IUnknown_iface.lpVtbl = &TLB_PEFile_Vtable; This->refs = 1; This->dll = NULL; This->typelib_resource = NULL; This->typelib_global = NULL; This->typelib_base = NULL; This->dll = LoadLibraryExW(path, 0, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE | LOAD_WITH_ALTERED_SEARCH_PATH); if (This->dll) { static const WCHAR TYPELIBW[] = {'T','Y','P','E','L','I','B',0}; This->typelib_resource = FindResourceW(This->dll, MAKEINTRESOURCEW(index), TYPELIBW); if (This->typelib_resource) { This->typelib_global = LoadResource(This->dll, This->typelib_resource); if (This->typelib_global) { This->typelib_base = LockResource(This->typelib_global); if (This->typelib_base) { *pdwTLBLength = SizeofResource(This->dll, This->typelib_resource); *ppBase = This->typelib_base; *ppFile = &This->IUnknown_iface; return S_OK; } } } TRACE("No TYPELIB resource found\n"); hr = E_FAIL; } TLB_PEFile_Release(&This->IUnknown_iface); return hr; } typedef struct TLB_NEFile { IUnknown IUnknown_iface; LONG refs; LPVOID typelib_base; } TLB_NEFile; static inline TLB_NEFile *nefile_impl_from_IUnknown(IUnknown *iface) { return CONTAINING_RECORD(iface, TLB_NEFile, IUnknown_iface); } static HRESULT WINAPI TLB_NEFile_QueryInterface(IUnknown *iface, REFIID riid, void **ppv) { if (IsEqualIID(riid, &IID_IUnknown)) { *ppv = iface; IUnknown_AddRef(iface); return S_OK; } *ppv = NULL; return E_NOINTERFACE; } static ULONG WINAPI TLB_NEFile_AddRef(IUnknown *iface) { TLB_NEFile *This = nefile_impl_from_IUnknown(iface); return InterlockedIncrement(&This->refs); } static ULONG WINAPI TLB_NEFile_Release(IUnknown *iface) { TLB_NEFile *This = nefile_impl_from_IUnknown(iface); ULONG refs = InterlockedDecrement(&This->refs); if (!refs) { heap_free(This->typelib_base); heap_free(This); } return refs; } static const IUnknownVtbl TLB_NEFile_Vtable = { TLB_NEFile_QueryInterface, TLB_NEFile_AddRef, TLB_NEFile_Release }; #pragma comment(lib, "lz32.lib") /*********************************************************************** * read_xx_header [internal] */ static int read_xx_header( HFILE lzfd ) { IMAGE_DOS_HEADER mzh; char magic[3]; LZSeek( lzfd, 0, SEEK_SET ); if ( sizeof(mzh) != LZRead( lzfd, (LPSTR)&mzh, sizeof(mzh) ) ) return 0; if ( mzh.e_magic != IMAGE_DOS_SIGNATURE ) return 0; LZSeek( lzfd, mzh.e_lfanew, SEEK_SET ); if ( 2 != LZRead( lzfd, magic, 2 ) ) return 0; LZSeek( lzfd, mzh.e_lfanew, SEEK_SET ); if ( magic[0] == 'N' && magic[1] == 'E' ) return IMAGE_OS2_SIGNATURE; if ( magic[0] == 'P' && magic[1] == 'E' ) return IMAGE_NT_SIGNATURE; magic[2] = '\0'; WARN("Can't handle %s files.\n", magic ); return 0; } /*********************************************************************** * find_ne_resource [internal] */ static BOOL find_ne_resource( HFILE lzfd, LPCSTR typeid, LPCSTR resid, DWORD *resLen, DWORD *resOff ) { IMAGE_OS2_HEADER nehd; NE_TYPEINFO *typeInfo; NE_NAMEINFO *nameInfo; DWORD nehdoffset; LPBYTE resTab; DWORD resTabSize; int count; /* Read in NE header */ nehdoffset = LZSeek( lzfd, 0, SEEK_CUR ); if ( sizeof(nehd) != LZRead( lzfd, (LPSTR)&nehd, sizeof(nehd) ) ) return FALSE; resTabSize = nehd.ne_restab - nehd.ne_rsrctab; if ( !resTabSize ) { TRACE("No resources in NE dll\n" ); return FALSE; } /* Read in resource table */ resTab = heap_alloc( resTabSize ); if ( !resTab ) return FALSE; LZSeek( lzfd, nehd.ne_rsrctab + nehdoffset, SEEK_SET ); if ( resTabSize != LZRead( lzfd, (char*)resTab, resTabSize ) ) { heap_free( resTab ); return FALSE; } /* Find resource */ typeInfo = (NE_TYPEINFO *)(resTab + 2); if (!IS_INTRESOURCE(typeid)) /* named type */ { BYTE len = strlen( typeid ); while (typeInfo->type_id) { if (!(typeInfo->type_id & 0x8000)) { BYTE *p = resTab + typeInfo->type_id; if ((*p == len) && !strncasecmp( (char*)p+1, typeid, len )) goto found_type; } typeInfo = (NE_TYPEINFO *)((char *)(typeInfo + 1) + typeInfo->count * sizeof(NE_NAMEINFO)); } } else /* numeric type id */ { WORD id = LOWORD(typeid) | 0x8000; while (typeInfo->type_id) { if (typeInfo->type_id == id) goto found_type; typeInfo = (NE_TYPEINFO *)((char *)(typeInfo + 1) + typeInfo->count * sizeof(NE_NAMEINFO)); } } TRACE("No typeid entry found for %p\n", typeid ); heap_free( resTab ); return FALSE; found_type: nameInfo = (NE_NAMEINFO *)(typeInfo + 1); if (!IS_INTRESOURCE(resid)) /* named resource */ { BYTE len = strlen( resid ); for (count = typeInfo->count; count > 0; count--, nameInfo++) { BYTE *p = resTab + nameInfo->id; if (nameInfo->id & 0x8000) continue; if ((*p == len) && !strncasecmp( (char*)p+1, resid, len )) goto found_name; } } else /* numeric resource id */ { WORD id = LOWORD(resid) | 0x8000; for (count = typeInfo->count; count > 0; count--, nameInfo++) if (nameInfo->id == id || id == 0xffff) goto found_name; } TRACE("No resid entry found for %p\n", typeid ); heap_free( resTab ); return FALSE; found_name: /* Return resource data */ if ( resLen ) *resLen = nameInfo->length << *(WORD *)resTab; if ( resOff ) *resOff = nameInfo->offset << *(WORD *)resTab; heap_free( resTab ); return TRUE; } static HRESULT TLB_NEFile_Open(LPCWSTR path, INT index, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile){ HFILE lzfd = -1; OFSTRUCT ofs; HRESULT hr = TYPE_E_CANTLOADLIBRARY; TLB_NEFile *This; This = heap_alloc(sizeof(TLB_NEFile)); if (!This) return E_OUTOFMEMORY; This->IUnknown_iface.lpVtbl = &TLB_NEFile_Vtable; This->refs = 1; This->typelib_base = NULL; lzfd = LZOpenFileW( (LPWSTR)path, &ofs, OF_READ ); if ( lzfd >= 0 && read_xx_header( lzfd ) == IMAGE_OS2_SIGNATURE ) { DWORD reslen, offset; if( find_ne_resource( lzfd, "TYPELIB", MAKEINTRESOURCEA(index), &reslen, &offset ) ) { This->typelib_base = heap_alloc(reslen); if( !This->typelib_base ) hr = E_OUTOFMEMORY; else { LZSeek( lzfd, offset, SEEK_SET ); reslen = LZRead( lzfd, This->typelib_base, reslen ); LZClose( lzfd ); *ppBase = This->typelib_base; *pdwTLBLength = reslen; *ppFile = &This->IUnknown_iface; return S_OK; } } } if( lzfd >= 0) LZClose( lzfd ); TLB_NEFile_Release(&This->IUnknown_iface); return hr; } typedef struct TLB_Mapping { IUnknown IUnknown_iface; LONG refs; HANDLE file; HANDLE mapping; LPVOID typelib_base; } TLB_Mapping; static inline TLB_Mapping *mapping_impl_from_IUnknown(IUnknown *iface) { return CONTAINING_RECORD(iface, TLB_Mapping, IUnknown_iface); } static HRESULT WINAPI TLB_Mapping_QueryInterface(IUnknown *iface, REFIID riid, void **ppv) { if (IsEqualIID(riid, &IID_IUnknown)) { *ppv = iface; IUnknown_AddRef(iface); return S_OK; } *ppv = NULL; return E_NOINTERFACE; } static ULONG WINAPI TLB_Mapping_AddRef(IUnknown *iface) { TLB_Mapping *This = mapping_impl_from_IUnknown(iface); return InterlockedIncrement(&This->refs); } static ULONG WINAPI TLB_Mapping_Release(IUnknown *iface) { TLB_Mapping *This = mapping_impl_from_IUnknown(iface); ULONG refs = InterlockedDecrement(&This->refs); if (!refs) { if (This->typelib_base) UnmapViewOfFile(This->typelib_base); if (This->mapping) CloseHandle(This->mapping); if (This->file != INVALID_HANDLE_VALUE) CloseHandle(This->file); heap_free(This); } return refs; } static const IUnknownVtbl TLB_Mapping_Vtable = { TLB_Mapping_QueryInterface, TLB_Mapping_AddRef, TLB_Mapping_Release }; static HRESULT TLB_Mapping_Open(LPCWSTR path, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile) { TLB_Mapping *This; This = heap_alloc(sizeof(TLB_Mapping)); if (!This) return E_OUTOFMEMORY; This->IUnknown_iface.lpVtbl = &TLB_Mapping_Vtable; This->refs = 1; This->file = INVALID_HANDLE_VALUE; This->mapping = NULL; This->typelib_base = NULL; This->file = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE != This->file) { This->mapping = CreateFileMappingW(This->file, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL); if (This->mapping) { This->typelib_base = MapViewOfFile(This->mapping, FILE_MAP_READ, 0, 0, 0); if(This->typelib_base) { /* retrieve file size */ *pdwTLBLength = GetFileSize(This->file, NULL); *ppBase = This->typelib_base; *ppFile = &This->IUnknown_iface; return S_OK; } } } IUnknown_Release(&This->IUnknown_iface); return TYPE_E_CANTLOADLIBRARY; } static HRESULT TLB_FileMoniker_Open(LPCWSTR path, ITypeLib2 **ppTypeLib) { LPBC bindctx; HRESULT ret = TYPE_E_CANTLOADLIBRARY; if(CreateBindCtx(0, &bindctx) == S_OK) { ULONG eaten; LPMONIKER moniker; if(MkParseDisplayName(bindctx, (LPOLESTR)path, &eaten, &moniker) == S_OK) { // XXX: VB4 VBX wrapper only returns a ITypeLib, should be safe because LoadTypeLib returns ITypeLib not ITypeLib2 if(moniker->lpVtbl->BindToObject(moniker, bindctx, NULL, &IID_ITypeLib, (void **)ppTypeLib) == S_OK) ret = S_OK; moniker->lpVtbl->Release(moniker); } bindctx->lpVtbl->Release(bindctx); } return ret; } #include typedef struct _IO_STATUS_BLOCK { union { NTSTATUS Status; PVOID Pointer; } DUMMYUNIONNAME; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; NTSYSAPI NTSTATUS WINAPI NtQueryInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID, LONG, DWORD); NTSYSAPI ULONG NTAPI RtlNtStatusToDosError(NTSTATUS Status); BOOL WINAPI callGetFileInformationByHandleEx(HANDLE hFile, LPVOID lpFileInformation, DWORD dwBufferSize) { NTSTATUS status; static HMODULE hKernel32; IO_STATUS_BLOCK iosb; static BOOL (WINAPI *pGetFileInformationByHandleEx)(HANDLE, FILE_INFO_BY_HANDLE_CLASS, LPVOID, DWORD); if (!hKernel32) { hKernel32 = LoadLibraryA("kernel32"); pGetFileInformationByHandleEx = (BOOL(WINAPI*)(HANDLE, FILE_INFO_BY_HANDLE_CLASS, LPVOID, DWORD))GetProcAddress(hKernel32, "GetFileInformationByHandleEx"); } if (pGetFileInformationByHandleEx) { return pGetFileInformationByHandleEx(hFile, FileNameInfo, lpFileInformation, dwBufferSize); } status = NtQueryInformationFile(hFile, &iosb, lpFileInformation, dwBufferSize, 9/*FileNameInformation*/); if (FAILED(status)) { SetLastError(RtlNtStatusToDosError(status)); return FALSE; } return TRUE; } /**************************************************************************** * TLB_ReadTypeLib * * find the type of the typelib file and map the typelib resource into * the memory */ #define SLTG_SIGNATURE 0x47544c53 /* "SLTG" */ static HRESULT TLB_ReadTypeLib(LPCWSTR pszFileName, LPWSTR pszPath, UINT cchPath, ITypeLib2 **ppTypeLib) { ITypeLibImpl *entry; HRESULT ret; INT index = -1; LPWSTR index_str, file = (LPWSTR)pszFileName; LPVOID pBase = NULL; DWORD dwTLBLength = 0; IUnknown *pFile = NULL; HANDLE h; *ppTypeLib = NULL; index_str = strrchrW(pszFileName, '\\'); if(index_str && *++index_str != '\0') { LPWSTR end_ptr; LONG idx = strtolW(index_str, &end_ptr, 10); if(*end_ptr == '\0') { int str_len = index_str - pszFileName - 1; index = idx; file = heap_alloc((str_len + 1) * sizeof(WCHAR)); memcpy(file, pszFileName, str_len * sizeof(WCHAR)); file[str_len] = 0; } } if(!SearchPathW(NULL, file, NULL, cchPath, pszPath, NULL)) { if(strchrW(file, '\\')) { lstrcpyW(pszPath, file); } else { int len = GetSystemDirectoryW(pszPath, cchPath); pszPath[len] = '\\'; memcpy(pszPath + len + 1, file, (strlenW(file) + 1) * sizeof(WCHAR)); } } if(file != pszFileName) heap_free(file); h = CreateFileW(pszPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(h != INVALID_HANDLE_VALUE){ FILE_NAME_INFORMATION size_info; BOOL br; /* GetFileInformationByHandleEx returns the path of the file without * WOW64 redirection */ br = callGetFileInformationByHandleEx(h, &size_info, sizeof(size_info)); if(br || GetLastError() == ERROR_MORE_DATA){ FILE_NAME_INFORMATION *info; DWORD size = sizeof(*info) + size_info.FileNameLength + sizeof(WCHAR); info = HeapAlloc(GetProcessHeap(), 0, size); br = callGetFileInformationByHandleEx(h, info, size); if(br){ info->FileName[info->FileNameLength / sizeof(WCHAR)] = 0; lstrcpynW(pszPath + 2, info->FileName, cchPath - 2); } HeapFree(GetProcessHeap(), 0, info); } CloseHandle(h); } TRACE_(typelib)("File %s index %d\n", debugstr_w(pszPath), index); /* We look the path up in the typelib cache. If found, we just addref it, and return the pointer. */ EnterCriticalSection(&cache_section); LIST_FOR_EACH_ENTRY(entry, &tlb_cache, ITypeLibImpl, entry) { if (!strcmpiW(entry->path, pszPath) && entry->index == index) { TRACE("cache hit\n"); *ppTypeLib = &entry->ITypeLib2_iface; ITypeLib2_AddRef(*ppTypeLib); LeaveCriticalSection(&cache_section); return S_OK; } } LeaveCriticalSection(&cache_section); /* now actually load and parse the typelib */ ret = TLB_PEFile_Open(pszPath, index, &pBase, &dwTLBLength, &pFile); if (ret == TYPE_E_CANTLOADLIBRARY) ret = TLB_NEFile_Open(pszPath, index, &pBase, &dwTLBLength, &pFile); if (ret == TYPE_E_CANTLOADLIBRARY) ret = TLB_Mapping_Open(pszPath, &pBase, &dwTLBLength, &pFile); if (SUCCEEDED(ret)) { if (dwTLBLength >= 4) { DWORD dwSignature = FromLEDWord(*((DWORD*) pBase)); if (dwSignature == MSFT_SIGNATURE) *ppTypeLib = ITypeLib2_Constructor_MSFT(pBase, dwTLBLength); else if (dwSignature == SLTG_SIGNATURE) *ppTypeLib = ITypeLib2_Constructor_SLTG(pBase, dwTLBLength); else { FIXME("Header type magic 0x%08x not supported.\n",dwSignature); ret = TYPE_E_CANTLOADLIBRARY; } } else ret = TYPE_E_CANTLOADLIBRARY; IUnknown_Release(pFile); } else if (ret == TYPE_E_CANTLOADLIBRARY) { ret = TLB_FileMoniker_Open(pszPath, ppTypeLib); if (ret == S_OK) return S_OK; } if(*ppTypeLib) { ITypeLibImpl *impl = impl_from_ITypeLib2(*ppTypeLib); TRACE("adding to cache\n"); impl->path = heap_alloc((strlenW(pszPath)+1) * sizeof(WCHAR)); lstrcpyW(impl->path, pszPath); /* We should really canonicalise the path here. */ impl->index = index; /* FIXME: check if it has added already in the meantime */ EnterCriticalSection(&cache_section); list_add_head(&tlb_cache, &impl->entry); LeaveCriticalSection(&cache_section); ret = S_OK; } else { if(ret != E_FAIL) ERR("Loading of typelib %s failed with error %d\n", debugstr_w(pszFileName), GetLastError()); ret = TYPE_E_CANTLOADLIBRARY; } return ret; } #endif /*================== ITypeLib(2) Methods ===================================*/ static ITypeLibImpl* TypeLibImpl_Constructor(void) { ITypeLibImpl* pTypeLibImpl; pTypeLibImpl = heap_alloc_zero(sizeof(ITypeLibImpl)); if (!pTypeLibImpl) return NULL; pTypeLibImpl->ITypeLib2_iface.lpVtbl = &tlbvt; pTypeLibImpl->ITypeComp_iface.lpVtbl = &tlbtcvt; pTypeLibImpl->ICreateTypeLib2_iface.lpVtbl = &CreateTypeLib2Vtbl; pTypeLibImpl->ref = 1; list_init(&pTypeLibImpl->implib_list); list_init(&pTypeLibImpl->custdata_list); list_init(&pTypeLibImpl->name_list); list_init(&pTypeLibImpl->string_list); list_init(&pTypeLibImpl->guid_list); list_init(&pTypeLibImpl->ref_list); pTypeLibImpl->dispatch_href = -1; return pTypeLibImpl; } #if 1 /**************************************************************************** * ITypeLib2_Constructor_MSFT * * loading an MSFT typelib from an in-memory image */ static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength) { TLBContext cx; LONG lPSegDir; MSFT_Header tlbHeader; MSFT_SegDir tlbSegDir; ITypeLibImpl * pTypeLibImpl; int i; TRACE("%p, TLB length = %d\n", pLib, dwTLBLength); pTypeLibImpl = TypeLibImpl_Constructor(); if (!pTypeLibImpl) return NULL; /* get pointer to beginning of typelib data */ cx.pos = 0; cx.oStart=0; cx.mapping = pLib; cx.pLibInfo = pTypeLibImpl; cx.length = dwTLBLength; /* read header */ MSFT_ReadLEDWords(&tlbHeader, sizeof(tlbHeader), &cx, 0); TRACE_(typelib)("header:\n"); TRACE_(typelib)("\tmagic1=0x%08x ,magic2=0x%08x\n",tlbHeader.magic1,tlbHeader.magic2 ); if (tlbHeader.magic1 != MSFT_SIGNATURE) { FIXME("Header type magic 0x%08x not supported.\n",tlbHeader.magic1); return NULL; } TRACE_(typelib)("\tdispatchpos = 0x%x\n", tlbHeader.dispatchpos); /* there is a small amount of information here until the next important * part: * the segment directory . Try to calculate the amount of data */ lPSegDir = sizeof(tlbHeader) + (tlbHeader.nrtypeinfos)*4 + ((tlbHeader.varflags & HELPDLLFLAG)? 4 :0); /* now read the segment directory */ TRACE("read segment directory (at %d)\n",lPSegDir); MSFT_ReadLEDWords(&tlbSegDir, sizeof(tlbSegDir), &cx, lPSegDir); cx.pTblDir = &tlbSegDir; /* just check two entries */ if ( tlbSegDir.pTypeInfoTab.res0c != 0x0F || tlbSegDir.pImpInfo.res0c != 0x0F) { ERR("cannot find the table directory, ptr=0x%x\n",lPSegDir); heap_free(pTypeLibImpl); return NULL; } MSFT_ReadAllNames(&cx); MSFT_ReadAllStrings(&cx); MSFT_ReadAllGuids(&cx); /* now fill our internal data */ /* TLIBATTR fields */ pTypeLibImpl->guid = MSFT_ReadGuid(tlbHeader.posguid, &cx); pTypeLibImpl->syskind = tlbHeader.varflags & 0x0f; /* check the mask */ pTypeLibImpl->ptr_size = get_ptr_size(pTypeLibImpl->syskind); pTypeLibImpl->ver_major = LOWORD(tlbHeader.version); pTypeLibImpl->ver_minor = HIWORD(tlbHeader.version); pTypeLibImpl->libflags = ((WORD) tlbHeader.flags & 0xffff) /* check mask */ | LIBFLAG_FHASDISKIMAGE; pTypeLibImpl->set_lcid = tlbHeader.lcid2; pTypeLibImpl->lcid = tlbHeader.lcid; /* name, eventually add to a hash table */ pTypeLibImpl->Name = MSFT_ReadName(&cx, tlbHeader.NameOffset); /* help info */ pTypeLibImpl->DocString = MSFT_ReadString(&cx, tlbHeader.helpstring); pTypeLibImpl->HelpFile = MSFT_ReadString(&cx, tlbHeader.helpfile); if( tlbHeader.varflags & HELPDLLFLAG) { int offset; MSFT_ReadLEDWords(&offset, sizeof(offset), &cx, sizeof(tlbHeader)); pTypeLibImpl->HelpStringDll = MSFT_ReadString(&cx, offset); } pTypeLibImpl->dwHelpContext = tlbHeader.helpstringcontext; /* custom data */ if(tlbHeader.CustomDataOffset >= 0) { MSFT_CustData(&cx, tlbHeader.CustomDataOffset, &pTypeLibImpl->custdata_list); } /* fill in type descriptions */ if(tlbSegDir.pTypdescTab.length > 0) { int i, j, cTD = tlbSegDir.pTypdescTab.length / (2*sizeof(INT)); INT16 td[4]; pTypeLibImpl->ctTypeDesc = cTD; pTypeLibImpl->pTypeDesc = heap_alloc_zero( cTD * sizeof(TYPEDESC)); MSFT_ReadLEWords(td, sizeof(td), &cx, tlbSegDir.pTypdescTab.offset); for(i=0; ipTypeDesc[i].vt = td[0] & VT_TYPEMASK; if(td[0] == VT_PTR || td[0] == VT_SAFEARRAY) { /* FIXME: check safearray */ if(td[3] < 0) pTypeLibImpl->pTypeDesc[i].u.lptdesc = &std_typedesc[td[2]]; else pTypeLibImpl->pTypeDesc[i].u.lptdesc = &pTypeLibImpl->pTypeDesc[td[2]/8]; } else if(td[0] == VT_CARRAY) { /* array descr table here */ pTypeLibImpl->pTypeDesc[i].u.lpadesc = (void *)(INT_PTR)td[2]; /* temp store offset in*/ } else if(td[0] == VT_USERDEFINED) { pTypeLibImpl->pTypeDesc[i].u.hreftype = MAKELONG(td[2],td[3]); } if(++ipTypeDesc[i].vt != VT_CARRAY) continue; if(tlbSegDir.pArrayDescriptions.offset>0) { MSFT_ReadLEWords(td, sizeof(td), &cx, tlbSegDir.pArrayDescriptions.offset + (INT_PTR)pTypeLibImpl->pTypeDesc[i].u.lpadesc); pTypeLibImpl->pTypeDesc[i].u.lpadesc = heap_alloc_zero(sizeof(ARRAYDESC)+sizeof(SAFEARRAYBOUND)*(td[3]-1)); if(td[1]<0) pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem.vt = td[0] & VT_TYPEMASK; else pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem = cx.pLibInfo->pTypeDesc[td[0]/(2*sizeof(INT))]; pTypeLibImpl->pTypeDesc[i].u.lpadesc->cDims = td[2]; for(j = 0; jpTypeDesc[i].u.lpadesc->rgbounds[j].cElements, sizeof(INT), &cx, DO_NOT_SEEK); MSFT_ReadLEDWords(& pTypeLibImpl->pTypeDesc[i].u.lpadesc->rgbounds[j].lLbound, sizeof(INT), &cx, DO_NOT_SEEK); } } else { pTypeLibImpl->pTypeDesc[i].u.lpadesc = NULL; ERR("didn't find array description data\n"); } } } /* imported type libs */ if(tlbSegDir.pImpFiles.offset>0) { TLBImpLib *pImpLib; int oGuid, offset = tlbSegDir.pImpFiles.offset; UINT16 size; while(offset < tlbSegDir.pImpFiles.offset +tlbSegDir.pImpFiles.length) { char *name; pImpLib = heap_alloc_zero(sizeof(TLBImpLib)); pImpLib->offset = offset - tlbSegDir.pImpFiles.offset; MSFT_ReadLEDWords(&oGuid, sizeof(INT), &cx, offset); MSFT_ReadLEDWords(&pImpLib->lcid, sizeof(LCID), &cx, DO_NOT_SEEK); MSFT_ReadLEWords(&pImpLib->wVersionMajor, sizeof(WORD), &cx, DO_NOT_SEEK); MSFT_ReadLEWords(&pImpLib->wVersionMinor, sizeof(WORD), &cx, DO_NOT_SEEK); MSFT_ReadLEWords(& size, sizeof(UINT16), &cx, DO_NOT_SEEK); size >>= 2; name = heap_alloc_zero(size+1); MSFT_Read(name, size, &cx, DO_NOT_SEEK); pImpLib->name = TLB_MultiByteToBSTR(name); heap_free(name); pImpLib->guid = MSFT_ReadGuid(oGuid, &cx); offset = (offset + sizeof(INT) + sizeof(DWORD) + sizeof(LCID) + sizeof(UINT16) + size + 3) & ~3; list_add_tail(&pTypeLibImpl->implib_list, &pImpLib->entry); } } MSFT_ReadAllRefs(&cx); pTypeLibImpl->dispatch_href = tlbHeader.dispatchpos; /* type infos */ if(tlbHeader.nrtypeinfos >= 0 ) { ITypeInfoImpl **ppTI; ppTI = pTypeLibImpl->typeinfos = heap_alloc_zero(sizeof(ITypeInfoImpl*) * tlbHeader.nrtypeinfos); for(i = 0; i < tlbHeader.nrtypeinfos; i++) { *ppTI = MSFT_DoTypeInfo(&cx, i, pTypeLibImpl); ++ppTI; (pTypeLibImpl->TypeInfoCount)++; } } #ifdef _WIN64 if(pTypeLibImpl->syskind == SYS_WIN32){ for(i = 0; i < pTypeLibImpl->TypeInfoCount; ++i) TLB_fix_32on64_typeinfo(pTypeLibImpl->typeinfos[i]); } #endif TRACE("(%p)\n", pTypeLibImpl); return &pTypeLibImpl->ITypeLib2_iface; } static BOOL TLB_GUIDFromString(const char *str, GUID *guid) { char b[3]; int i; short s; if(sscanf(str, "%x-%hx-%hx-%hx", &guid->Data1, &guid->Data2, &guid->Data3, &s) != 4) { FIXME("Can't parse guid %s\n", debugstr_guid(guid)); return FALSE; } guid->Data4[0] = s >> 8; guid->Data4[1] = s & 0xff; b[2] = '\0'; for(i = 0; i < 6; i++) { memcpy(b, str + 24 + 2 * i, 2); guid->Data4[i + 2] = strtol(b, NULL, 16); } return TRUE; } struct bitstream { const BYTE *buffer; DWORD length; WORD current; }; static const char *lookup_code(const BYTE *table, DWORD table_size, struct bitstream *bits) { const BYTE *p = table; while (p < table + table_size && *p == 0x80) { if (p + 2 >= table + table_size) return NULL; if (!(bits->current & 0xff)) { if (!bits->length) return NULL; bits->current = (*bits->buffer << 8) | 1; bits->buffer++; bits->length--; } if (bits->current & 0x8000) { p += 3; } else { p = table + (*(p + 2) | (*(p + 1) << 8)); } bits->current <<= 1; } if (p + 1 < table + table_size && *(p + 1)) { /* FIXME: Whats the meaning of *p? */ const BYTE *q = p + 1; while (q < table + table_size && *q) q++; return (q < table + table_size) ? (const char *)(p + 1) : NULL; } return NULL; } static const TLBString *decode_string(const BYTE *table, const char *stream, DWORD stream_length, ITypeLibImpl *lib) { DWORD buf_size, table_size; const char *p; struct bitstream bits; BSTR buf; TLBString *tlbstr; if (!stream_length) return NULL; bits.buffer = (const BYTE *)stream; bits.length = stream_length; bits.current = 0; buf_size = *(const WORD *)table; table += sizeof(WORD); table_size = *(const DWORD *)table; table += sizeof(DWORD); buf = SysAllocStringLen(NULL, buf_size); buf[0] = 0; while ((p = lookup_code(table, table_size, &bits))) { static const WCHAR spaceW[] = { ' ',0 }; if (buf[0]) lstrcatW(buf, spaceW); MultiByteToWideChar(CP_ACP, 0, p, -1, buf + lstrlenW(buf), buf_size - lstrlenW(buf)); } tlbstr = TLB_append_str(&lib->string_list, buf); SysFreeString(buf); return tlbstr; } static DWORD calc_helpcontext(DWORD base, WORD value, char *pBlk) { if (!(value & 1)) return *(DWORD *)(pBlk + value); if (value & 2) return base - (value >> 2); return base + (value >> 2); } static WORD SLTG_ReadString(const char *ptr, const TLBString **pStr, ITypeLibImpl *lib) { WORD bytelen; DWORD len; BSTR tmp_str; *pStr = NULL; bytelen = *(const WORD*)ptr; if(bytelen == 0xffff) return 2; len = MultiByteToWideChar(CP_ACP, 0, ptr + 2, bytelen, NULL, 0); tmp_str = SysAllocStringLen(NULL, len); if (tmp_str) { MultiByteToWideChar(CP_ACP, 0, ptr + 2, bytelen, tmp_str, len); *pStr = TLB_append_str(&lib->string_list, tmp_str); SysFreeString(tmp_str); } return bytelen + 2; } static WORD SLTG_ReadStringA(const char *ptr, char **str) { WORD bytelen; *str = NULL; bytelen = *(const WORD*)ptr; if(bytelen == 0xffff) return 2; *str = heap_alloc(bytelen + 1); memcpy(*str, ptr + 2, bytelen); (*str)[bytelen] = '\0'; return bytelen + 2; } static TLBString *SLTG_ReadName(const char *pNameTable, int offset, ITypeLibImpl *lib) { BSTR tmp_str; TLBString *tlbstr; LIST_FOR_EACH_ENTRY(tlbstr, &lib->name_list, TLBString, entry) { if (tlbstr->offset == offset) return tlbstr; } tmp_str = TLB_MultiByteToBSTR(pNameTable + offset); tlbstr = TLB_append_str(&lib->name_list, tmp_str); SysFreeString(tmp_str); return tlbstr; } static DWORD SLTG_ReadLibBlk(LPVOID pLibBlk, ITypeLibImpl *pTypeLibImpl) { char *ptr = pLibBlk; WORD w; if((w = *(WORD*)ptr) != SLTG_LIBBLK_MAGIC) { FIXME("libblk magic = %04x\n", w); return 0; } ptr += 6; if((w = *(WORD*)ptr) != 0xffff) { FIXME("LibBlk.res06 = %04x. Assumung string and skipping\n", w); ptr += w; } ptr += 2; ptr += SLTG_ReadString(ptr, &pTypeLibImpl->DocString, pTypeLibImpl); ptr += SLTG_ReadString(ptr, &pTypeLibImpl->HelpFile, pTypeLibImpl); pTypeLibImpl->dwHelpContext = *(DWORD*)ptr; ptr += 4; pTypeLibImpl->syskind = *(WORD*)ptr; pTypeLibImpl->ptr_size = get_ptr_size(pTypeLibImpl->syskind); ptr += 2; if(SUBLANGID(*(WORD*)ptr) == SUBLANG_NEUTRAL) pTypeLibImpl->lcid = pTypeLibImpl->set_lcid = MAKELCID(MAKELANGID(PRIMARYLANGID(*(WORD*)ptr),0),0); else pTypeLibImpl->lcid = pTypeLibImpl->set_lcid = 0; ptr += 2; ptr += 4; /* skip res12 */ pTypeLibImpl->libflags = *(WORD*)ptr; ptr += 2; pTypeLibImpl->ver_major = *(WORD*)ptr; ptr += 2; pTypeLibImpl->ver_minor = *(WORD*)ptr; ptr += 2; pTypeLibImpl->guid = TLB_append_guid(&pTypeLibImpl->guid_list, (GUID*)ptr, -2); ptr += sizeof(GUID); return ptr - (char*)pLibBlk; } /* stores a mapping between the sltg typeinfo's references and the typelib's HREFTYPEs */ typedef struct { unsigned int num; HREFTYPE refs[1]; } sltg_ref_lookup_t; static HRESULT sltg_get_typelib_ref(const sltg_ref_lookup_t *table, DWORD typeinfo_ref, HREFTYPE *typelib_ref) { if(table && typeinfo_ref < table->num) { *typelib_ref = table->refs[typeinfo_ref]; return S_OK; } ERR_(typelib)("Unable to find reference\n"); *typelib_ref = -1; return E_FAIL; } static WORD *SLTG_DoType(WORD *pType, char *pBlk, TYPEDESC *pTD, const sltg_ref_lookup_t *ref_lookup) { BOOL done = FALSE; while(!done) { if((*pType & 0xe00) == 0xe00) { pTD->vt = VT_PTR; pTD->u.lptdesc = heap_alloc_zero(sizeof(TYPEDESC)); pTD = pTD->u.lptdesc; } switch(*pType & 0x3f) { case VT_PTR: pTD->vt = VT_PTR; pTD->u.lptdesc = heap_alloc_zero(sizeof(TYPEDESC)); pTD = pTD->u.lptdesc; break; case VT_USERDEFINED: pTD->vt = VT_USERDEFINED; sltg_get_typelib_ref(ref_lookup, *(++pType) / 4, &pTD->u.hreftype); done = TRUE; break; case VT_CARRAY: { /* *(pType+1) is offset to a SAFEARRAY, *(pType+2) is type of array */ SAFEARRAY *pSA = (SAFEARRAY *)(pBlk + *(++pType)); pTD->vt = VT_CARRAY; pTD->u.lpadesc = heap_alloc_zero(sizeof(ARRAYDESC) + (pSA->cDims - 1) * sizeof(SAFEARRAYBOUND)); pTD->u.lpadesc->cDims = pSA->cDims; memcpy(pTD->u.lpadesc->rgbounds, pSA->rgsabound, pSA->cDims * sizeof(SAFEARRAYBOUND)); pTD = &pTD->u.lpadesc->tdescElem; break; } case VT_SAFEARRAY: { /* FIXME: *(pType+1) gives an offset to SAFEARRAY, is this useful? */ pType++; pTD->vt = VT_SAFEARRAY; pTD->u.lptdesc = heap_alloc_zero(sizeof(TYPEDESC)); pTD = pTD->u.lptdesc; break; } default: pTD->vt = *pType & 0x3f; done = TRUE; break; } pType++; } return pType; } static WORD *SLTG_DoElem(WORD *pType, char *pBlk, ELEMDESC *pElem, const sltg_ref_lookup_t *ref_lookup) { /* Handle [in/out] first */ if((*pType & 0xc000) == 0xc000) pElem->u.paramdesc.wParamFlags = PARAMFLAG_NONE; else if(*pType & 0x8000) pElem->u.paramdesc.wParamFlags = PARAMFLAG_FIN | PARAMFLAG_FOUT; else if(*pType & 0x4000) pElem->u.paramdesc.wParamFlags = PARAMFLAG_FOUT; else pElem->u.paramdesc.wParamFlags = PARAMFLAG_FIN; if(*pType & 0x2000) pElem->u.paramdesc.wParamFlags |= PARAMFLAG_FLCID; if(*pType & 0x80) pElem->u.paramdesc.wParamFlags |= PARAMFLAG_FRETVAL; return SLTG_DoType(pType, pBlk, &pElem->tdesc, ref_lookup); } static sltg_ref_lookup_t *SLTG_DoRefs(SLTG_RefInfo *pRef, ITypeLibImpl *pTL, char *pNameTable) { unsigned int ref; char *name; TLBRefType *ref_type; sltg_ref_lookup_t *table; HREFTYPE typelib_ref; if(pRef->magic != SLTG_REF_MAGIC) { FIXME("Ref magic = %x\n", pRef->magic); return NULL; } name = ( (char*)pRef->names + pRef->number); table = heap_alloc(sizeof(*table) + ((pRef->number >> 3) - 1) * sizeof(table->refs[0])); table->num = pRef->number >> 3; /* FIXME should scan the existing list and reuse matching refs added by previous typeinfos */ /* We don't want the first href to be 0 */ typelib_ref = (list_count(&pTL->ref_list) + 1) << 2; for(ref = 0; ref < pRef->number >> 3; ref++) { char *refname; unsigned int lib_offs, type_num; ref_type = heap_alloc_zero(sizeof(TLBRefType)); name += SLTG_ReadStringA(name, &refname); if(sscanf(refname, "*\\R%x*#%x", &lib_offs, &type_num) != 2) FIXME_(typelib)("Can't sscanf ref\n"); if(lib_offs != 0xffff) { TLBImpLib *import; LIST_FOR_EACH_ENTRY(import, &pTL->implib_list, TLBImpLib, entry) if(import->offset == lib_offs) break; if(&import->entry == &pTL->implib_list) { char fname[MAX_PATH+1]; int len; GUID tmpguid; import = heap_alloc_zero(sizeof(*import)); import->offset = lib_offs; TLB_GUIDFromString( pNameTable + lib_offs + 4, &tmpguid); import->guid = TLB_append_guid(&pTL->guid_list, &tmpguid, 2); if(sscanf(pNameTable + lib_offs + 40, "}#%hd.%hd#%x#%s", &import->wVersionMajor, &import->wVersionMinor, &import->lcid, fname) != 4) { FIXME_(typelib)("can't sscanf ref %s\n", pNameTable + lib_offs + 40); } len = strlen(fname); if(fname[len-1] != '#') FIXME("fname = %s\n", fname); fname[len-1] = '\0'; import->name = TLB_MultiByteToBSTR(fname); list_add_tail(&pTL->implib_list, &import->entry); } ref_type->pImpTLInfo = import; /* Store a reference to IDispatch */ if(pTL->dispatch_href == -1 && IsEqualGUID(&import->guid->guid, &IID_StdOle) && type_num == 4) pTL->dispatch_href = typelib_ref; } else { /* internal ref */ ref_type->pImpTLInfo = TLB_REF_INTERNAL; } ref_type->reference = typelib_ref; ref_type->index = type_num; heap_free(refname); list_add_tail(&pTL->ref_list, &ref_type->entry); table->refs[ref] = typelib_ref; typelib_ref += 4; } if((BYTE)*name != SLTG_REF_MAGIC) FIXME_(typelib)("End of ref block magic = %x\n", *name); dump_TLBRefType(pTL); return table; } static char *SLTG_DoImpls(char *pBlk, ITypeInfoImpl *pTI, BOOL OneOnly, const sltg_ref_lookup_t *ref_lookup, int startidx) { SLTG_ImplInfo *info; TLBImplType *pImplType; /* I don't really get this structure, usually it's 0x16 bytes long, but iuser.tlb contains some that are 0x18 bytes long. That's ok because we can use the next ptr to jump to the next one. But how do we know the length of the last one? The WORD at offs 0x8 might be the clue. For now I'm just assuming that the last one is the regular 0x16 bytes. */ info = (SLTG_ImplInfo*)pBlk; while(1){ pTI->typeattr.cImplTypes++; if(info->next == 0xffff) break; info = (SLTG_ImplInfo*)(pBlk + info->next); } info = (SLTG_ImplInfo*)pBlk; pTI->impltypes = TLBImplType_Alloc(pTI->typeattr.cImplTypes); pImplType = pTI->impltypes; while(1) { sltg_get_typelib_ref(ref_lookup, info->ref - startidx, &pImplType->hRef); pImplType->implflags = info->impltypeflags; ++pImplType; if(info->next == 0xffff) break; if(OneOnly) FIXME_(typelib)("Interface inheriting more than one interface\n"); info = (SLTG_ImplInfo*)(pBlk + info->next); } info++; /* see comment at top of function */ return (char*)info; } static void SLTG_DoVars(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsigned short cVars, const char *pNameTable, const sltg_ref_lookup_t *ref_lookup, const BYTE *hlp_strings, DWORD helpbase) { TLBVarDesc *pVarDesc; const TLBString *prevName = NULL; SLTG_Variable *pItem; unsigned short i; WORD *pType; pVarDesc = pTI->vardescs = TLBVarDesc_Alloc(cVars); for(pItem = (SLTG_Variable *)pFirstItem, i = 0; i < cVars; pItem = (SLTG_Variable *)(pBlk + pItem->next), i++, ++pVarDesc) { pVarDesc->vardesc.memid = pItem->memid; if (pItem->magic != SLTG_VAR_MAGIC && pItem->magic != SLTG_VAR_WITH_FLAGS_MAGIC && pItem->magic != SLTG_VAR_WITH_HELPFILE) { FIXME_(typelib)("var magic = %02x\n", pItem->magic); return; } if (pItem->name == 0xfffe) pVarDesc->Name = prevName; else pVarDesc->Name = SLTG_ReadName(pNameTable, pItem->name, pTI->pTypeLib); TRACE_(typelib)("name: %s\n", debugstr_w(TLB_get_bstr(pVarDesc->Name))); TRACE_(typelib)("byte_offs = 0x%x\n", pItem->byte_offs); TRACE_(typelib)("memid = 0x%x\n", pItem->memid); if (pItem->helpstring != 0xffff) { pVarDesc->HelpString = decode_string(hlp_strings, pBlk + pItem->helpstring, pNameTable - pBlk, pTI->pTypeLib); TRACE_(typelib)("helpstring = %s\n", debugstr_w(pVarDesc->HelpString->str)); } if (pItem->helpcontext != 0xfffe) { pVarDesc->HelpContext = calc_helpcontext(helpbase, pItem->helpcontext, pBlk); TRACE_(typelib)("helpcontext = 0x%x\n", pVarDesc->HelpContext); } if ((pItem->magic == SLTG_VAR_WITH_HELPFILE) && (pItem->helpfile != 0xffff)) { pVarDesc->HelpFile = decode_string(hlp_strings, pBlk + pItem->helpfile, pNameTable - pBlk, pTI->pTypeLib); TRACE_(typelib)("helpfile = %s\n", debugstr_w(pVarDesc->HelpFile->str)); } if(pItem->flags & 0x02) pType = &pItem->type; else pType = (WORD*)(pBlk + pItem->type); if (pItem->flags & ~0xda) FIXME_(typelib)("unhandled flags = %02x\n", pItem->flags & ~0xda); SLTG_DoElem(pType, pBlk, &pVarDesc->vardesc.elemdescVar, ref_lookup); if (TRACE_ON(typelib)) { char buf[300]; dump_TypeDesc(&pVarDesc->vardesc.elemdescVar.tdesc, buf); TRACE_(typelib)("elemdescVar: %s\n", buf); } if (pItem->flags & 0x40) { TRACE_(typelib)("VAR_DISPATCH\n"); pVarDesc->vardesc.varkind = VAR_DISPATCH; } else if (pItem->flags & 0x10) { TRACE_(typelib)("VAR_CONST\n"); pVarDesc->vardesc.varkind = VAR_CONST; pVarDesc->vardesc.u.lpvarValue = heap_alloc(sizeof(VARIANT)); V_VT(pVarDesc->vardesc.u.lpvarValue) = pVarDesc->vardesc.elemdescVar.tdesc.vt; if (pItem->flags & 0x08) V_INT(pVarDesc->vardesc.u.lpvarValue) = pItem->byte_offs; else { switch (pVarDesc->vardesc.elemdescVar.tdesc.vt) { case VT_LPSTR: case VT_LPWSTR: case VT_BSTR: { WORD len = *(WORD *)(pBlk + pItem->byte_offs); BSTR str; TRACE_(typelib)("len = %u\n", len); if (len == 0xffff) { str = NULL; } else { INT alloc_len = MultiByteToWideChar(CP_ACP, 0, pBlk + pItem->byte_offs + 2, len, NULL, 0); str = SysAllocStringLen(NULL, alloc_len); MultiByteToWideChar(CP_ACP, 0, pBlk + pItem->byte_offs + 2, len, str, alloc_len); } V_VT(pVarDesc->vardesc.u.lpvarValue) = VT_BSTR; V_BSTR(pVarDesc->vardesc.u.lpvarValue) = str; break; } case VT_I2: case VT_UI2: case VT_I4: case VT_UI4: case VT_INT: case VT_UINT: V_INT(pVarDesc->vardesc.u.lpvarValue) = *(INT*)(pBlk + pItem->byte_offs); break; default: FIXME_(typelib)("VAR_CONST unimplemented for type %d\n", pVarDesc->vardesc.elemdescVar.tdesc.vt); } } } else { TRACE_(typelib)("VAR_PERINSTANCE\n"); pVarDesc->vardesc.u.oInst = pItem->byte_offs; pVarDesc->vardesc.varkind = VAR_PERINSTANCE; } if (pItem->magic == SLTG_VAR_WITH_FLAGS_MAGIC) pVarDesc->vardesc.wVarFlags = pItem->varflags; if (pItem->flags & 0x80) pVarDesc->vardesc.wVarFlags |= VARFLAG_FREADONLY; prevName = pVarDesc->Name; } pTI->typeattr.cVars = cVars; } static void SLTG_DoFuncs(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsigned short cFuncs, char *pNameTable, const sltg_ref_lookup_t *ref_lookup, const BYTE *hlp_strings, DWORD helpbase) { SLTG_Function *pFunc; unsigned short i; TLBFuncDesc *pFuncDesc; pTI->funcdescs = TLBFuncDesc_Alloc(cFuncs); pFuncDesc = pTI->funcdescs; for(pFunc = (SLTG_Function*)pFirstItem, i = 0; i < cFuncs && pFunc != (SLTG_Function*)0xFFFF; pFunc = (SLTG_Function*)(pBlk + pFunc->next), i++, ++pFuncDesc) { int param; WORD *pType, *pArg; switch (pFunc->magic & ~(SLTG_FUNCTION_FLAGS_PRESENT | SLTG_FUNCTION_HELPFILE_PRESENT)) { case SLTG_FUNCTION_MAGIC: pFuncDesc->funcdesc.funckind = FUNC_PUREVIRTUAL; break; case SLTG_DISPATCH_FUNCTION_MAGIC: pFuncDesc->funcdesc.funckind = FUNC_DISPATCH; break; case SLTG_STATIC_FUNCTION_MAGIC: pFuncDesc->funcdesc.funckind = FUNC_STATIC; break; default: FIXME("unimplemented func magic = %02x\n", pFunc->magic & ~(SLTG_FUNCTION_FLAGS_PRESENT | SLTG_FUNCTION_HELPFILE_PRESENT)); continue; } pFuncDesc->Name = SLTG_ReadName(pNameTable, pFunc->name, pTI->pTypeLib); pFuncDesc->funcdesc.memid = pFunc->dispid; pFuncDesc->funcdesc.invkind = pFunc->inv >> 4; pFuncDesc->funcdesc.callconv = pFunc->nacc & 0x7; pFuncDesc->funcdesc.cParams = pFunc->nacc >> 3; pFuncDesc->funcdesc.cParamsOpt = (pFunc->retnextopt & 0x7e) >> 1; pFuncDesc->funcdesc.oVft = (pFunc->vtblpos & ~1) * sizeof(void *) / pTI->pTypeLib->ptr_size; if (pFunc->helpstring != 0xffff) pFuncDesc->HelpString = decode_string(hlp_strings, pBlk + pFunc->helpstring, pNameTable - pBlk, pTI->pTypeLib); if(pFunc->magic & SLTG_FUNCTION_FLAGS_PRESENT) pFuncDesc->funcdesc.wFuncFlags = pFunc->funcflags; if (pFunc->inv & 0x08) { pFuncDesc->funcdesc.wFuncFlags |= FUNCFLAG_FRESTRICTED; } if ((pFunc->magic & SLTG_FUNCTION_HELPFILE_PRESENT) && (pFunc->helpfile != 0xffff)) pFuncDesc->HelpFile = decode_string(hlp_strings, pBlk + pFunc->helpfile, pNameTable - pBlk, pTI->pTypeLib); if (pFunc->helpcontext != 0xfffe) pFuncDesc->helpcontext = calc_helpcontext(helpbase, pFunc->helpcontext, pBlk); if(pFunc->retnextopt & 0x80) pType = &pFunc->rettype; else pType = (WORD*)(pBlk + pFunc->rettype); SLTG_DoElem(pType, pBlk, &pFuncDesc->funcdesc.elemdescFunc, ref_lookup); pFuncDesc->funcdesc.lprgelemdescParam = heap_alloc_zero(pFuncDesc->funcdesc.cParams * sizeof(ELEMDESC)); pFuncDesc->pParamDesc = TLBParDesc_Constructor(pFuncDesc->funcdesc.cParams); pArg = (WORD*)(pBlk + pFunc->arg_off); for(param = 0; param < pFuncDesc->funcdesc.cParams; param++) { char *paramName = pNameTable + *pArg; BOOL HaveOffs; /* If arg type follows then paramName points to the 2nd letter of the name, else the next WORD is an offset to the arg type and paramName points to the first letter. So let's take one char off paramName and see if we're pointing at an alpha-numeric char. However if *pArg is 0xffff or 0xfffe then the param has no name, the former meaning that the next WORD is the type, the latter meaning that the next WORD is an offset to the type. */ HaveOffs = FALSE; if(*pArg == 0xffff) paramName = NULL; else if(*pArg == 0xfffe) { paramName = NULL; HaveOffs = TRUE; } else if(paramName[-1] && !isalnum(paramName[-1]) && (paramName[-1] != '_')) HaveOffs = TRUE; pArg++; if(HaveOffs) { /* the next word is an offset to type */ pType = (WORD*)(pBlk + *pArg); SLTG_DoElem(pType, pBlk, &pFuncDesc->funcdesc.lprgelemdescParam[param], ref_lookup); pArg++; } else { if(paramName) paramName--; pArg = SLTG_DoElem(pArg, pBlk, &pFuncDesc->funcdesc.lprgelemdescParam[param], ref_lookup); } /* Are we an optional param ? */ if(pFuncDesc->funcdesc.cParams - param <= pFuncDesc->funcdesc.cParamsOpt) pFuncDesc->funcdesc.lprgelemdescParam[param].u.paramdesc.wParamFlags |= PARAMFLAG_FOPT; if(paramName) { pFuncDesc->pParamDesc[param].Name = SLTG_ReadName(pNameTable, paramName - pNameTable, pTI->pTypeLib); } else { pFuncDesc->pParamDesc[param].Name = pFuncDesc->Name; } } } pTI->typeattr.cFuncs = cFuncs; } static void SLTG_ProcessCoClass(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, SLTG_TypeInfoTail *pTITail) { char *pFirstItem; sltg_ref_lookup_t *ref_lookup = NULL; if(pTIHeader->href_table != 0xffffffff) { ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib, pNameTable); } pFirstItem = pBlk; if(*(WORD*)pFirstItem == SLTG_IMPL_MAGIC) { SLTG_DoImpls(pFirstItem, pTI, FALSE, ref_lookup, 0); } heap_free(ref_lookup); } static void SLTG_ProcessInterface(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings) { char *pFirstItem; sltg_ref_lookup_t *ref_lookup = NULL; if(pTIHeader->href_table != 0xffffffff) { ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib, pNameTable); } pFirstItem = pBlk; if(*(WORD*)pFirstItem == SLTG_IMPL_MAGIC) { SLTG_DoImpls(pFirstItem, pTI, TRUE, ref_lookup, 0); } if (pTITail->funcs_off != 0xffff) SLTG_DoFuncs(pBlk, pBlk + pTITail->funcs_off, pTI, pTITail->cFuncs, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase); heap_free(ref_lookup); if (TRACE_ON(typelib)) dump_TLBFuncDesc(pTI->funcdescs, pTI->typeattr.cFuncs); } static void SLTG_ProcessRecord(char *pBlk, ITypeInfoImpl *pTI, const char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings) { SLTG_DoVars(pBlk, pBlk + pTITail->vars_off, pTI, pTITail->cVars, pNameTable, NULL, hlp_strings, pTITail->helpctxtbase); } static void SLTG_ProcessAlias(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail) { WORD *pType; sltg_ref_lookup_t *ref_lookup = NULL; if (pTITail->simple_alias) { /* if simple alias, no more processing required */ pTI->tdescAlias = heap_alloc_zero(sizeof(TYPEDESC)); pTI->tdescAlias->vt = pTITail->tdescalias_vt; return; } if(pTIHeader->href_table != 0xffffffff) { ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib, pNameTable); } /* otherwise it is an offset to a type */ pType = (WORD *)(pBlk + pTITail->tdescalias_vt); pTI->tdescAlias = heap_alloc(sizeof(TYPEDESC)); SLTG_DoType(pType, pBlk, pTI->tdescAlias, ref_lookup); heap_free(ref_lookup); } static void SLTG_ProcessDispatch(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings) { sltg_ref_lookup_t *ref_lookup = NULL; if (pTIHeader->href_table != 0xffffffff) ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib, pNameTable); if (pTITail->vars_off != 0xffff) SLTG_DoVars(pBlk, pBlk + pTITail->vars_off, pTI, pTITail->cVars, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase); if (pTITail->funcs_off != 0xffff) SLTG_DoFuncs(pBlk, pBlk + pTITail->funcs_off, pTI, pTITail->cFuncs, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase); if (pTITail->impls_off != 0xffff) SLTG_DoImpls(pBlk + pTITail->impls_off, pTI, FALSE, ref_lookup, pTITail->cVars); /* this is necessary to cope with MSFT typelibs that set cFuncs to the number * of dispinterface functions including the IDispatch ones, so * ITypeInfo::GetFuncDesc takes the real value for cFuncs from cbSizeVft */ pTI->typeattr.cbSizeVft = pTI->typeattr.cFuncs * pTI->pTypeLib->ptr_size; heap_free(ref_lookup); if (TRACE_ON(typelib)) dump_TLBFuncDesc(pTI->funcdescs, pTI->typeattr.cFuncs); } static void SLTG_ProcessEnum(char *pBlk, ITypeInfoImpl *pTI, const char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings) { SLTG_DoVars(pBlk, pBlk + pTITail->vars_off, pTI, pTITail->cVars, pNameTable, NULL, hlp_strings, pTITail->helpctxtbase); } static void SLTG_DoModuleEntry(char *pNameTable, ITypeInfoImpl *pTI, int count, int size, char *base) { SLTG_ModuleEntryInfo *pEntry = (SLTG_ModuleEntryInfo*)(base + size); TLBString *dllname = NULL; int i = 0; for (i = count - 1; i >= 0; i--) { TLBString *name = SLTG_ReadName(pNameTable, (pEntry->module) & -2 /* ? */, pTI->pTypeLib); if (!dllname) { dllname = name; } else if (wcscmp(name->str, dllname->str)) { FIXME("%s != %s\n", debugstr_w(name->str), debugstr_w(dllname->str)); } if (pEntry->is_ord) { 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); pTI->funcdescs[i].Entry = (TLBString*)pEntry->ord_or_entry_offs; } else { char *n = base + pEntry->ord_or_entry_offs; 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); pTI->funcdescs[i].Entry = SLTG_ReadName(pNameTable, n - pNameTable, pTI->pTypeLib); } if (pEntry->prev_offset == 0xffff) break; pEntry = (SLTG_ModuleEntryInfo*)(base + pEntry->prev_offset); } if (dllname) { pTI->DllName = dllname; } } static void SLTG_ProcessModule(char *pBlk, ITypeInfoImpl *pTI, char *pNameTable, SLTG_TypeInfoHeader *pTIHeader, const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings) { sltg_ref_lookup_t *ref_lookup = NULL; if (pTIHeader->href_table != 0xffffffff) ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib, pNameTable); if (pTITail->vars_off != 0xffff) SLTG_DoVars(pBlk, pBlk + pTITail->vars_off, pTI, pTITail->cVars, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase); if (pTITail->funcs_off != 0xffff) SLTG_DoFuncs(pBlk, pBlk + pTITail->funcs_off, pTI, pTITail->cFuncs, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase); if (pTITail->cFuncs != 0) SLTG_DoModuleEntry(pNameTable, pTI, pTITail->cFuncs, pTITail->module_entry_info_size, (char*)pTITail + pTITail->module_entry_info_off - 2); heap_free(ref_lookup); if (TRACE_ON(typelib)) dump_TypeInfo(pTI); } /* Because SLTG_OtherTypeInfo is such a painful struct, we make a more manageable copy of it into this */ typedef struct { char *index_name; char *other_name; WORD res1a; WORD name_offs; WORD hlpstr_len; char *extra; WORD res20; DWORD helpcontext; WORD res26; GUID uuid; WORD typekind; } SLTG_InternalOtherTypeInfo; /**************************************************************************** * ITypeLib2_Constructor_SLTG * * loading a SLTG typelib from an in-memory image */ static ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength) { ITypeLibImpl *pTypeLibImpl; SLTG_Header *pHeader; SLTG_BlkEntry *pBlkEntry; SLTG_Magic *pMagic; SLTG_Index *pIndex; SLTG_Pad9 *pPad9; LPVOID pBlk, pFirstBlk; SLTG_LibBlk *pLibBlk; SLTG_InternalOtherTypeInfo *pOtherTypeInfoBlks; char *pNameTable, *ptr; const BYTE *hlp_strings; int i; DWORD len, order; ITypeInfoImpl **ppTypeInfoImpl; TRACE_(typelib)("%p, TLB length = %d\n", pLib, dwTLBLength); pTypeLibImpl = TypeLibImpl_Constructor(); if (!pTypeLibImpl) return NULL; pHeader = pLib; TRACE_(typelib)("header:\n"); TRACE_(typelib)("\tmagic=0x%08x, file blocks = %d\n", pHeader->SLTG_magic, pHeader->nrOfFileBlks ); if (pHeader->SLTG_magic != SLTG_SIGNATURE) { FIXME_(typelib)("Header type magic 0x%08x not supported.\n", pHeader->SLTG_magic); return NULL; } /* There are pHeader->nrOfFileBlks - 2 TypeInfo records in this typelib */ pTypeLibImpl->TypeInfoCount = pHeader->nrOfFileBlks - 2; /* This points to pHeader->nrOfFileBlks - 1 of SLTG_BlkEntry */ pBlkEntry = (SLTG_BlkEntry*)(pHeader + 1); /* Next we have a magic block */ pMagic = (SLTG_Magic*)(pBlkEntry + pHeader->nrOfFileBlks - 1); /* Let's see if we're still in sync */ if(memcmp(pMagic->CompObj_magic, SLTG_COMPOBJ_MAGIC, sizeof(SLTG_COMPOBJ_MAGIC))) { FIXME_(typelib)("CompObj magic = %s\n", pMagic->CompObj_magic); return NULL; } if(memcmp(pMagic->dir_magic, SLTG_DIR_MAGIC, sizeof(SLTG_DIR_MAGIC))) { FIXME_(typelib)("dir magic = %s\n", pMagic->dir_magic); return NULL; } pIndex = (SLTG_Index*)(pMagic+1); pPad9 = (SLTG_Pad9*)(pIndex + pTypeLibImpl->TypeInfoCount); pFirstBlk = pPad9 + 1; /* We'll set up a ptr to the main library block, which is the last one. */ for(pBlk = pFirstBlk, order = pHeader->first_blk - 1; pBlkEntry[order].next != 0; order = pBlkEntry[order].next - 1) { pBlk = (char*)pBlk + pBlkEntry[order].len; } pLibBlk = pBlk; len = SLTG_ReadLibBlk(pLibBlk, pTypeLibImpl); /* Now there are 0x40 bytes of 0xffff with the numbers 0 to TypeInfoCount interspersed */ len += 0x40; /* And now TypeInfoCount of SLTG_OtherTypeInfo */ pTypeLibImpl->TypeInfoCount = *(WORD *)((char *)pLibBlk + len); len += sizeof(WORD); pOtherTypeInfoBlks = heap_alloc_zero(sizeof(*pOtherTypeInfoBlks) * pTypeLibImpl->TypeInfoCount); ptr = (char*)pLibBlk + len; for(i = 0; i < pTypeLibImpl->TypeInfoCount; i++) { WORD w, extra; len = 0; w = *(WORD*)ptr; if(w != 0xffff) { len += w; pOtherTypeInfoBlks[i].index_name = heap_alloc(w+1); memcpy(pOtherTypeInfoBlks[i].index_name, ptr + 2, w); pOtherTypeInfoBlks[i].index_name[w] = '\0'; } w = *(WORD*)(ptr + 2 + len); if(w != 0xffff) { TRACE_(typelib)("\twith %s\n", debugstr_an(ptr + 4 + len, w)); pOtherTypeInfoBlks[i].other_name = heap_alloc(w+1); memcpy(pOtherTypeInfoBlks[i].other_name, ptr + 4 + len, w); pOtherTypeInfoBlks[i].other_name[w] = '\0'; len += w; } pOtherTypeInfoBlks[i].res1a = *(WORD*)(ptr + 4 + len); pOtherTypeInfoBlks[i].name_offs = *(WORD*)(ptr + 6 + len); extra = pOtherTypeInfoBlks[i].hlpstr_len = *(WORD*)(ptr + 8 + len); if(extra) { pOtherTypeInfoBlks[i].extra = heap_alloc(extra); memcpy(pOtherTypeInfoBlks[i].extra, ptr + 10 + len, extra); len += extra; } pOtherTypeInfoBlks[i].res20 = *(WORD*)(ptr + 10 + len); pOtherTypeInfoBlks[i].helpcontext = *(DWORD*)(ptr + 12 + len); pOtherTypeInfoBlks[i].res26 = *(WORD*)(ptr + 16 + len); memcpy(&pOtherTypeInfoBlks[i].uuid, ptr + 18 + len, sizeof(GUID)); pOtherTypeInfoBlks[i].typekind = *(WORD*)(ptr + 18 + sizeof(GUID) + len); len += sizeof(SLTG_OtherTypeInfo); ptr += len; } /* Get the next DWORD */ len = *(DWORD*)ptr; hlp_strings = (const BYTE *)ptr + sizeof(DWORD); TRACE("max help string length %#x, help strings length %#x\n", *(WORD *)hlp_strings, *(DWORD *)(hlp_strings + 2)); /* Now add this to pLibBLk look at what we're pointing at and possibly add 0x20, then add 0x216, sprinkle a bit a magic dust and we should be pointing at the beginning of the name table */ pNameTable = (char*)pLibBlk + len; switch(*(WORD*)pNameTable) { case 0xffff: break; case 0x0200: pNameTable += 0x20; break; default: FIXME_(typelib)("pNameTable jump = %x\n", *(WORD*)pNameTable); break; } pNameTable += 0x216; pNameTable += 2; TRACE_(typelib)("Library name is %s\n", pNameTable + pLibBlk->name); pTypeLibImpl->Name = SLTG_ReadName(pNameTable, pLibBlk->name, pTypeLibImpl); /* Hopefully we now have enough ptrs set up to actually read in some TypeInfos. It's not clear which order to do them in, so I'll just follow the links along the BlkEntry chain and read them in the order in which they are in the file */ pTypeLibImpl->typeinfos = heap_alloc_zero(pTypeLibImpl->TypeInfoCount * sizeof(ITypeInfoImpl*)); ppTypeInfoImpl = pTypeLibImpl->typeinfos; for(pBlk = pFirstBlk, order = pHeader->first_blk - 1, i = 0; pBlkEntry[order].next != 0; order = pBlkEntry[order].next - 1, i++) { SLTG_TypeInfoHeader *pTIHeader; SLTG_TypeInfoTail *pTITail; SLTG_MemberHeader *pMemHeader; if(strcmp(pBlkEntry[order].index_string + (char*)pMagic, pOtherTypeInfoBlks[i].index_name)) { FIXME_(typelib)("Index strings don't match\n"); heap_free(pOtherTypeInfoBlks); return NULL; } pTIHeader = pBlk; if(pTIHeader->magic != SLTG_TIHEADER_MAGIC) { FIXME_(typelib)("TypeInfoHeader magic = %04x\n", pTIHeader->magic); heap_free(pOtherTypeInfoBlks); return NULL; } TRACE_(typelib)("pTIHeader->res06 = %x, pTIHeader->res0e = %x, " "pTIHeader->res16 = %x, pTIHeader->res1e = %x\n", pTIHeader->res06, pTIHeader->res0e, pTIHeader->res16, pTIHeader->res1e); *ppTypeInfoImpl = ITypeInfoImpl_Constructor(); (*ppTypeInfoImpl)->pTypeLib = pTypeLibImpl; (*ppTypeInfoImpl)->index = i; (*ppTypeInfoImpl)->Name = SLTG_ReadName(pNameTable, pOtherTypeInfoBlks[i].name_offs, pTypeLibImpl); (*ppTypeInfoImpl)->dwHelpContext = pOtherTypeInfoBlks[i].helpcontext; (*ppTypeInfoImpl)->DocString = decode_string(hlp_strings, pOtherTypeInfoBlks[i].extra, pOtherTypeInfoBlks[i].hlpstr_len, pTypeLibImpl); (*ppTypeInfoImpl)->guid = TLB_append_guid(&pTypeLibImpl->guid_list, &pOtherTypeInfoBlks[i].uuid, 2); (*ppTypeInfoImpl)->typeattr.typekind = pTIHeader->typekind; (*ppTypeInfoImpl)->typeattr.wMajorVerNum = pTIHeader->major_version; (*ppTypeInfoImpl)->typeattr.wMinorVerNum = pTIHeader->minor_version; (*ppTypeInfoImpl)->typeattr.wTypeFlags = (pTIHeader->typeflags1 >> 3) | (pTIHeader->typeflags2 << 5); /* FIXME */ if(pTIHeader->typekind != TKIND_MODULE && (*ppTypeInfoImpl)->typeattr.wTypeFlags & TYPEFLAG_FDUAL) (*ppTypeInfoImpl)->typeattr.typekind = TKIND_DISPATCH; if((pTIHeader->typeflags1 & 7) != 2) FIXME_(typelib)("typeflags1 = %02x\n", pTIHeader->typeflags1); if(pTIHeader->typeflags3 != 2) FIXME_(typelib)("typeflags3 = %02x\n", pTIHeader->typeflags3); TRACE_(typelib)("TypeInfo %s of kind %s guid %s typeflags %04x\n", debugstr_w(TLB_get_bstr((*ppTypeInfoImpl)->Name)), typekind_desc[pTIHeader->typekind], debugstr_guid(TLB_get_guidref((*ppTypeInfoImpl)->guid)), (*ppTypeInfoImpl)->typeattr.wTypeFlags); pMemHeader = (SLTG_MemberHeader*)((char *)pBlk + pTIHeader->elem_table); pTITail = (SLTG_TypeInfoTail*)((char *)(pMemHeader + 1) + pMemHeader->cbExtra); (*ppTypeInfoImpl)->typeattr.cbAlignment = pTITail->cbAlignment; (*ppTypeInfoImpl)->typeattr.cbSizeInstance = pTITail->cbSizeInstance; (*ppTypeInfoImpl)->typeattr.cbSizeVft = pTITail->cbSizeVft; switch(pTIHeader->typekind) { case TKIND_ENUM: SLTG_ProcessEnum((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable, pTIHeader, pTITail, hlp_strings); break; case TKIND_RECORD: SLTG_ProcessRecord((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable, pTIHeader, pTITail, hlp_strings); break; case TKIND_INTERFACE: SLTG_ProcessInterface((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable, pTIHeader, pTITail, hlp_strings); break; case TKIND_COCLASS: SLTG_ProcessCoClass((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable, pTIHeader, pTITail); { TLBRefType *ref_type, *ref_type_next; LIST_FOR_EACH_ENTRY_SAFE(ref_type, ref_type_next, &(*ppTypeInfoImpl)->pTypeLib->ref_list, TLBRefType, entry) { if (ref_type->index == (*ppTypeInfoImpl)->index) { (*ppTypeInfoImpl)->hreftype = ref_type->reference; } } } break; case TKIND_ALIAS: SLTG_ProcessAlias((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable, pTIHeader, pTITail); break; case TKIND_DISPATCH: SLTG_ProcessDispatch((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable, pTIHeader, pTITail, hlp_strings); break; case TKIND_MODULE: SLTG_ProcessModule((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable, pTIHeader, pTITail, hlp_strings); break; default: FIXME("Not processing typekind %d\n", pTIHeader->typekind); break; } /* could get cFuncs, cVars and cImplTypes from here but we've already set those */ #define X(x) TRACE_(typelib)("tt "#x": %x\n",pTITail->res##x); X(06); X(16); X(1e); X(24); X(26); X(2a); X(2c); X(2e); X(30); X(32); X(34); #undef X ++ppTypeInfoImpl; pBlk = (char*)pBlk + pBlkEntry[order].len; } if(i != pTypeLibImpl->TypeInfoCount) { FIXME("Somehow processed %d TypeInfos\n", i); heap_free(pOtherTypeInfoBlks); return NULL; } heap_free(pOtherTypeInfoBlks); return &pTypeLibImpl->ITypeLib2_iface; } #endif static HRESULT WINAPI ITypeLib2_fnQueryInterface(ITypeLib2 *iface, REFIID riid, void **ppv) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TRACE("(%p)->(IID: %s)\n",This,debugstr_guid(riid)); if(IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid,&IID_ITypeLib)|| IsEqualIID(riid,&IID_ITypeLib2)) { *ppv = &This->ITypeLib2_iface; } else if(IsEqualIID(riid, &IID_ICreateTypeLib) || IsEqualIID(riid, &IID_ICreateTypeLib2)) { *ppv = &This->ICreateTypeLib2_iface; } else { *ppv = NULL; TRACE("-- Interface: E_NOINTERFACE\n"); return E_NOINTERFACE; } IUnknown_AddRef((IUnknown*)*ppv); return S_OK; } static ULONG WINAPI ITypeLib2_fnAddRef( ITypeLib2 *iface) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); ULONG ref = InterlockedIncrement(&This->ref); TRACE("(%p) ref=%u\n", This, ref); return ref; } static ULONG WINAPI ITypeLib2_fnRelease( ITypeLib2 *iface) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%u\n",This, ref); if (!ref) { TLBImpLib *pImpLib, *pImpLibNext; TLBRefType *ref_type, *ref_type_next; TLBString *tlbstr, *tlbstr_next; TLBGuid *tlbguid, *tlbguid_next; int i; /* remove cache entry */ if(This->path) { TRACE("removing from cache list\n"); EnterCriticalSection(&cache_section); if(This->entry.next) list_remove(&This->entry); LeaveCriticalSection(&cache_section); heap_free(This->path); } TRACE(" destroying ITypeLib(%p)\n",This); LIST_FOR_EACH_ENTRY_SAFE(tlbstr, tlbstr_next, &This->string_list, TLBString, entry) { list_remove(&tlbstr->entry); SysFreeString(tlbstr->str); heap_free(tlbstr); } LIST_FOR_EACH_ENTRY_SAFE(tlbstr, tlbstr_next, &This->name_list, TLBString, entry) { list_remove(&tlbstr->entry); SysFreeString(tlbstr->str); heap_free(tlbstr); } LIST_FOR_EACH_ENTRY_SAFE(tlbguid, tlbguid_next, &This->guid_list, TLBGuid, entry) { list_remove(&tlbguid->entry); heap_free(tlbguid); } TLB_FreeCustData(&This->custdata_list); for (i = 0; i < This->ctTypeDesc; i++) if (This->pTypeDesc[i].vt == VT_CARRAY) heap_free(This->pTypeDesc[i].u.lpadesc); heap_free(This->pTypeDesc); LIST_FOR_EACH_ENTRY_SAFE(pImpLib, pImpLibNext, &This->implib_list, TLBImpLib, entry) { if (pImpLib->pImpTypeLib) ITypeLib2_Release(&pImpLib->pImpTypeLib->ITypeLib2_iface); SysFreeString(pImpLib->name); list_remove(&pImpLib->entry); heap_free(pImpLib); } LIST_FOR_EACH_ENTRY_SAFE(ref_type, ref_type_next, &This->ref_list, TLBRefType, entry) { list_remove(&ref_type->entry); heap_free(ref_type); } for (i = 0; i < This->TypeInfoCount; ++i){ heap_free(This->typeinfos[i]->tdescAlias); ITypeInfoImpl_Destroy(This->typeinfos[i]); } heap_free(This->typeinfos); heap_free(This); return 0; } return ref; } /* ITypeLib::GetTypeInfoCount * * Returns the number of type descriptions in the type library */ static UINT WINAPI ITypeLib2_fnGetTypeInfoCount( ITypeLib2 *iface) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TRACE("(%p)->count is %d\n",This, This->TypeInfoCount); return This->TypeInfoCount; } /* ITypeLib::GetTypeInfo * * retrieves the specified type description in the library. */ static HRESULT WINAPI ITypeLib2_fnGetTypeInfo( ITypeLib2 *iface, UINT index, ITypeInfo **ppTInfo) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TRACE("%p %u %p\n", This, index, ppTInfo); if(!ppTInfo) return E_INVALIDARG; if(index >= This->TypeInfoCount) return TYPE_E_ELEMENTNOTFOUND; *ppTInfo = (ITypeInfo *)&This->typeinfos[index]->ITypeInfo2_iface; ITypeInfo_AddRef(*ppTInfo); return S_OK; } /* ITypeLibs::GetTypeInfoType * * Retrieves the type of a type description. */ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoType( ITypeLib2 *iface, UINT index, TYPEKIND *pTKind) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TRACE("(%p, %d, %p)\n", This, index, pTKind); if(!pTKind) return E_INVALIDARG; if(index >= This->TypeInfoCount) return TYPE_E_ELEMENTNOTFOUND; *pTKind = This->typeinfos[index]->typeattr.typekind; return S_OK; } /* ITypeLib::GetTypeInfoOfGuid * * Retrieves the type description that corresponds to the specified GUID. * */ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoOfGuid( ITypeLib2 *iface, REFGUID guid, ITypeInfo **ppTInfo) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); int i; TRACE("%p %s %p\n", This, debugstr_guid(guid), ppTInfo); for(i = 0; i < This->TypeInfoCount; ++i){ if(IsEqualIID(TLB_get_guid_null(This->typeinfos[i]->guid), guid)){ *ppTInfo = (ITypeInfo *)&This->typeinfos[i]->ITypeInfo2_iface; ITypeInfo_AddRef(*ppTInfo); return S_OK; } } return TYPE_E_ELEMENTNOTFOUND; } /* ITypeLib::GetLibAttr * * Retrieves the structure that contains the library's attributes. * */ static HRESULT WINAPI ITypeLib2_fnGetLibAttr( ITypeLib2 *iface, LPTLIBATTR *attr) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TRACE("(%p, %p)\n", This, attr); if (!attr) return E_INVALIDARG; *attr = heap_alloc(sizeof(**attr)); if (!*attr) return E_OUTOFMEMORY; (*attr)->guid = *TLB_get_guid_null(This->guid); (*attr)->lcid = This->set_lcid; (*attr)->syskind = This->syskind; (*attr)->wMajorVerNum = This->ver_major; (*attr)->wMinorVerNum = This->ver_minor; (*attr)->wLibFlags = This->libflags; return S_OK; } /* ITypeLib::GetTypeComp * * Enables a client compiler to bind to a library's types, variables, * constants, and global functions. * */ static HRESULT WINAPI ITypeLib2_fnGetTypeComp( ITypeLib2 *iface, ITypeComp **ppTComp) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TRACE("(%p)->(%p)\n",This,ppTComp); *ppTComp = &This->ITypeComp_iface; ITypeComp_AddRef(*ppTComp); return S_OK; } /* ITypeLib::GetDocumentation * * Retrieves the library's documentation string, the complete Help file name * and path, and the context identifier for the library Help topic in the Help * file. * * On a successful return all non-null BSTR pointers will have been set, * possibly to NULL. */ static HRESULT WINAPI ITypeLib2_fnGetDocumentation( ITypeLib2 *iface, INT index, BSTR *pBstrName, BSTR *pBstrDocString, DWORD *pdwHelpContext, BSTR *pBstrHelpFile) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); HRESULT result = E_INVALIDARG; ITypeInfo *pTInfo; TRACE("(%p) index %d Name(%p) DocString(%p) HelpContext(%p) HelpFile(%p)\n", This, index, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile); if(index<0) { /* documentation for the typelib */ if(pBstrName) { if (This->Name) { if(!(*pBstrName = SysAllocString(TLB_get_bstr(This->Name)))) goto memerr1; } else *pBstrName = NULL; } if(pBstrDocString) { if (This->DocString) { if(!(*pBstrDocString = SysAllocString(TLB_get_bstr(This->DocString)))) goto memerr2; } else *pBstrDocString = NULL; } if(pdwHelpContext) { *pdwHelpContext = This->dwHelpContext; } if(pBstrHelpFile) { if (This->HelpFile) { if(!(*pBstrHelpFile = SysAllocString(TLB_get_bstr(This->HelpFile)))) goto memerr3; } else *pBstrHelpFile = NULL; } result = S_OK; } else { /* for a typeinfo */ result = ITypeLib2_fnGetTypeInfo(iface, index, &pTInfo); if(SUCCEEDED(result)) { result = ITypeInfo_GetDocumentation(pTInfo, MEMBERID_NIL, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile); ITypeInfo_Release(pTInfo); } } return result; memerr3: if (pBstrDocString) SysFreeString (*pBstrDocString); memerr2: if (pBstrName) SysFreeString (*pBstrName); memerr1: return STG_E_INSUFFICIENTMEMORY; } /* ITypeLib::IsName * * Indicates whether a passed-in string contains the name of a type or member * described in the library. * */ static HRESULT WINAPI ITypeLib2_fnIsName( ITypeLib2 *iface, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); int tic; UINT nNameBufLen = (lstrlenW(szNameBuf)+1)*sizeof(WCHAR), fdc, vrc; TRACE("(%p)->(%s,%08x,%p)\n", This, debugstr_w(szNameBuf), lHashVal, pfName); *pfName=TRUE; for(tic = 0; tic < This->TypeInfoCount; ++tic){ ITypeInfoImpl *pTInfo = This->typeinfos[tic]; if(!TLB_str_memcmp(szNameBuf, pTInfo->Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit; for(fdc = 0; fdc < pTInfo->typeattr.cFuncs; ++fdc) { TLBFuncDesc *pFInfo = &pTInfo->funcdescs[fdc]; int pc; if(!TLB_str_memcmp(szNameBuf, pFInfo->Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit; for(pc=0; pc < pFInfo->funcdesc.cParams; pc++){ if(!TLB_str_memcmp(szNameBuf, pFInfo->pParamDesc[pc].Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit; } } for(vrc = 0; vrc < pTInfo->typeattr.cVars; ++vrc){ TLBVarDesc *pVInfo = &pTInfo->vardescs[vrc]; if(!TLB_str_memcmp(szNameBuf, pVInfo->Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit; } } *pfName=FALSE; ITypeLib2_fnIsName_exit: TRACE("(%p)slow! search for %s: %sfound!\n", This, debugstr_w(szNameBuf), *pfName ? "" : "NOT "); return S_OK; } /* ITypeLib::FindName * * Finds occurrences of a type description in a type library. This may be used * to quickly verify that a name exists in a type library. * */ static HRESULT WINAPI ITypeLib2_fnFindName( ITypeLib2 *iface, LPOLESTR name, ULONG hash, ITypeInfo **ppTInfo, MEMBERID *memid, UINT16 *found) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); int tic; UINT count = 0; UINT len; TRACE("(%p)->(%s %u %p %p %p)\n", This, debugstr_w(name), hash, ppTInfo, memid, found); if ((!name && hash == 0) || !ppTInfo || !memid || !found) return E_INVALIDARG; len = (lstrlenW(name) + 1)*sizeof(WCHAR); for(tic = 0; count < *found && tic < This->TypeInfoCount; ++tic) { ITypeInfoImpl *pTInfo = This->typeinfos[tic]; TLBVarDesc *var; UINT fdc; if(!TLB_str_memcmp(name, pTInfo->Name, len)) { memid[count] = MEMBERID_NIL; goto ITypeLib2_fnFindName_exit; } for(fdc = 0; fdc < pTInfo->typeattr.cFuncs; ++fdc) { TLBFuncDesc *func = &pTInfo->funcdescs[fdc]; if(!TLB_str_memcmp(name, func->Name, len)) { memid[count] = func->funcdesc.memid; goto ITypeLib2_fnFindName_exit; } } var = TLB_get_vardesc_by_name(pTInfo->vardescs, pTInfo->typeattr.cVars, name); if (var) { memid[count] = var->vardesc.memid; goto ITypeLib2_fnFindName_exit; } continue; ITypeLib2_fnFindName_exit: ITypeInfo2_AddRef(&pTInfo->ITypeInfo2_iface); ppTInfo[count] = (ITypeInfo *)&pTInfo->ITypeInfo2_iface; count++; } TRACE("found %d typeinfos\n", count); *found = count; return S_OK; } /* ITypeLib::ReleaseTLibAttr * * Releases the TLIBATTR originally obtained from ITypeLib::GetLibAttr. * */ static VOID WINAPI ITypeLib2_fnReleaseTLibAttr( ITypeLib2 *iface, TLIBATTR *pTLibAttr) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TRACE("(%p)->(%p)\n", This, pTLibAttr); heap_free(pTLibAttr); } /* ITypeLib2::GetCustData * * gets the custom data */ static HRESULT WINAPI ITypeLib2_fnGetCustData( ITypeLib2 * iface, REFGUID guid, VARIANT *pVarVal) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TLBCustData *pCData; TRACE("(%p)->(%s %p)\n", This, debugstr_guid(guid), pVarVal); pCData = TLB_get_custdata_by_guid(&This->custdata_list, guid); if(!pCData) return TYPE_E_ELEMENTNOTFOUND; VariantInit(pVarVal); VariantCopy(pVarVal, &pCData->data); return S_OK; } /* ITypeLib2::GetLibStatistics * * Returns statistics about a type library that are required for efficient * sizing of hash tables. * */ static HRESULT WINAPI ITypeLib2_fnGetLibStatistics( ITypeLib2 * iface, ULONG *pcUniqueNames, ULONG *pcchUniqueNames) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); FIXME("(%p): stub!\n", This); if(pcUniqueNames) *pcUniqueNames=1; if(pcchUniqueNames) *pcchUniqueNames=1; return S_OK; } /* ITypeLib2::GetDocumentation2 * * Retrieves the library's documentation string, the complete Help file name * and path, the localization context to use, and the context ID for the * library Help topic in the Help file. * */ static HRESULT WINAPI ITypeLib2_fnGetDocumentation2( ITypeLib2 * iface, INT index, LCID lcid, BSTR *pbstrHelpString, DWORD *pdwHelpStringContext, BSTR *pbstrHelpStringDll) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); HRESULT result; ITypeInfo *pTInfo; FIXME("(%p) index %d lcid %d half implemented stub!\n", This, index, lcid); /* the help string should be obtained from the helpstringdll, * using the _DLLGetDocumentation function, based on the supplied * lcid. Nice to do sometime... */ if(index<0) { /* documentation for the typelib */ if(pbstrHelpString) *pbstrHelpString=SysAllocString(TLB_get_bstr(This->DocString)); if(pdwHelpStringContext) *pdwHelpStringContext=This->dwHelpContext; if(pbstrHelpStringDll) *pbstrHelpStringDll=SysAllocString(TLB_get_bstr(This->HelpStringDll)); result = S_OK; } else { /* for a typeinfo */ result=ITypeLib2_GetTypeInfo(iface, index, &pTInfo); if(SUCCEEDED(result)) { ITypeInfo2 * pTInfo2; result = ITypeInfo_QueryInterface(pTInfo, &IID_ITypeInfo2, (LPVOID*) &pTInfo2); if(SUCCEEDED(result)) { result = ITypeInfo2_GetDocumentation2(pTInfo2, MEMBERID_NIL, lcid, pbstrHelpString, pdwHelpStringContext, pbstrHelpStringDll); ITypeInfo2_Release(pTInfo2); } ITypeInfo_Release(pTInfo); } } return result; } static HRESULT TLB_copy_all_custdata(struct list *custdata_list, CUSTDATA *pCustData) { TLBCustData *pCData; unsigned int ct; CUSTDATAITEM *cdi; ct = list_count(custdata_list); pCustData->prgCustData = CoTaskMemAlloc(ct * sizeof(CUSTDATAITEM)); if(!pCustData->prgCustData) return E_OUTOFMEMORY; pCustData->cCustData = ct; cdi = pCustData->prgCustData; LIST_FOR_EACH_ENTRY(pCData, custdata_list, TLBCustData, entry){ cdi->guid = *TLB_get_guid_null(pCData->guid); VariantCopy(&cdi->varValue, &pCData->data); ++cdi; } return S_OK; } /* ITypeLib2::GetAllCustData * * Gets all custom data items for the library. * */ static HRESULT WINAPI ITypeLib2_fnGetAllCustData( ITypeLib2 * iface, CUSTDATA *pCustData) { ITypeLibImpl *This = impl_from_ITypeLib2(iface); TRACE("(%p)->(%p)\n", This, pCustData); return TLB_copy_all_custdata(&This->custdata_list, pCustData); } static const ITypeLib2Vtbl tlbvt = { ITypeLib2_fnQueryInterface, ITypeLib2_fnAddRef, ITypeLib2_fnRelease, ITypeLib2_fnGetTypeInfoCount, ITypeLib2_fnGetTypeInfo, ITypeLib2_fnGetTypeInfoType, ITypeLib2_fnGetTypeInfoOfGuid, ITypeLib2_fnGetLibAttr, ITypeLib2_fnGetTypeComp, ITypeLib2_fnGetDocumentation, ITypeLib2_fnIsName, ITypeLib2_fnFindName, ITypeLib2_fnReleaseTLibAttr, ITypeLib2_fnGetCustData, ITypeLib2_fnGetLibStatistics, ITypeLib2_fnGetDocumentation2, ITypeLib2_fnGetAllCustData }; static HRESULT WINAPI ITypeLibComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv) { ITypeLibImpl *This = impl_from_ITypeComp(iface); return ITypeLib2_QueryInterface(&This->ITypeLib2_iface, riid, ppv); } static ULONG WINAPI ITypeLibComp_fnAddRef(ITypeComp * iface) { ITypeLibImpl *This = impl_from_ITypeComp(iface); return ITypeLib2_AddRef(&This->ITypeLib2_iface); } static ULONG WINAPI ITypeLibComp_fnRelease(ITypeComp * iface) { ITypeLibImpl *This = impl_from_ITypeComp(iface); return ITypeLib2_Release(&This->ITypeLib2_iface); } static HRESULT WINAPI ITypeLibComp_fnBind( ITypeComp * iface, OLECHAR * szName, ULONG lHash, WORD wFlags, ITypeInfo ** ppTInfo, DESCKIND * pDescKind, BINDPTR * pBindPtr) { ITypeLibImpl *This = impl_from_ITypeComp(iface); BOOL typemismatch = FALSE; int i; TRACE("(%p)->(%s, 0x%x, 0x%x, %p, %p, %p)\n", This, debugstr_w(szName), lHash, wFlags, ppTInfo, pDescKind, pBindPtr); *pDescKind = DESCKIND_NONE; pBindPtr->lptcomp = NULL; *ppTInfo = NULL; for(i = 0; i < This->TypeInfoCount; ++i){ ITypeInfoImpl *pTypeInfo = This->typeinfos[i]; TRACE("testing %s\n", debugstr_w(TLB_get_bstr(pTypeInfo->Name))); /* FIXME: check wFlags here? */ /* FIXME: we should use a hash table to look this info up using lHash * instead of an O(n) search */ if ((pTypeInfo->typeattr.typekind == TKIND_ENUM) || (pTypeInfo->typeattr.typekind == TKIND_MODULE)) { if (pTypeInfo->Name && !strcmpW(pTypeInfo->Name->str, szName)) { *pDescKind = DESCKIND_TYPECOMP; pBindPtr->lptcomp = &pTypeInfo->ITypeComp_iface; ITypeComp_AddRef(pBindPtr->lptcomp); TRACE("module or enum: %s\n", debugstr_w(szName)); return S_OK; } } if ((pTypeInfo->typeattr.typekind == TKIND_MODULE) || (pTypeInfo->typeattr.typekind == TKIND_ENUM)) { ITypeComp *pSubTypeComp = &pTypeInfo->ITypeComp_iface; HRESULT hr; hr = ITypeComp_Bind(pSubTypeComp, szName, lHash, wFlags, ppTInfo, pDescKind, pBindPtr); if (SUCCEEDED(hr) && (*pDescKind != DESCKIND_NONE)) { TRACE("found in module or in enum: %s\n", debugstr_w(szName)); return S_OK; } else if (hr == TYPE_E_TYPEMISMATCH) typemismatch = TRUE; } if ((pTypeInfo->typeattr.typekind == TKIND_COCLASS) && (pTypeInfo->typeattr.wTypeFlags & TYPEFLAG_FAPPOBJECT)) { ITypeComp *pSubTypeComp = &pTypeInfo->ITypeComp_iface; HRESULT hr; ITypeInfo *subtypeinfo; BINDPTR subbindptr; DESCKIND subdesckind; if (pTypeInfo->Name && !strcmpW(pTypeInfo->Name->str, szName)) { TYPEDESC tdesc_appobject; const VARDESC vardesc_appobject = { ID_DEFAULTINST, /* memid */ NULL, /* lpstrSchema */ { 0 /* oInst */ }, { /* ELEMDESC */ { /* TYPEDESC */ { &tdesc_appobject }, VT_PTR }, }, 0, /* wVarFlags */ VAR_STATIC /* varkind */ }; tdesc_appobject.u.hreftype = pTypeInfo->hreftype; tdesc_appobject.vt = VT_USERDEFINED; TRACE("found in implicit app object: %s\n", debugstr_w(szName)); if (pTypeInfo->hreftype == -1) { FIXME("no hreftype for interface %p\n", pTypeInfo); } hr = TLB_AllocAndInitVarDesc(&vardesc_appobject, &pBindPtr->lpvardesc); if (FAILED(hr)) return hr; *pDescKind = DESCKIND_VARDESC; *ppTInfo = (ITypeInfo *)&pTypeInfo->ITypeInfo2_iface; ITypeInfo_AddRef(*ppTInfo); return S_OK; } hr = ITypeComp_Bind(pSubTypeComp, szName, lHash, wFlags, &subtypeinfo, &subdesckind, &subbindptr); if (SUCCEEDED(hr) && (subdesckind != DESCKIND_NONE)) { TYPEDESC tdesc_appobject; const VARDESC vardesc_appobject = { ID_DEFAULTINST, /* memid */ NULL, /* lpstrSchema */ { 0 /* oInst */ }, { /* ELEMDESC */ { /* TYPEDESC */ { &tdesc_appobject }, VT_PTR }, }, 0, /* wVarFlags */ VAR_STATIC /* varkind */ }; tdesc_appobject.u.hreftype = pTypeInfo->hreftype; tdesc_appobject.vt = VT_USERDEFINED; TRACE("found in implicit app object: %s\n", debugstr_w(szName)); /* cleanup things filled in by Bind call so we can put our * application object data in there instead */ switch (subdesckind) { case DESCKIND_FUNCDESC: ITypeInfo_ReleaseFuncDesc(subtypeinfo, subbindptr.lpfuncdesc); break; case DESCKIND_VARDESC: ITypeInfo_ReleaseVarDesc(subtypeinfo, subbindptr.lpvardesc); break; default: break; } if (subtypeinfo) ITypeInfo_Release(subtypeinfo); if (pTypeInfo->hreftype == -1) { FIXME("no hreftype for interface %p\n", pTypeInfo); } hr = TLB_AllocAndInitVarDesc(&vardesc_appobject, &pBindPtr->lpvardesc); if (FAILED(hr)) return hr; *pDescKind = DESCKIND_IMPLICITAPPOBJ; *ppTInfo = (ITypeInfo *)&pTypeInfo->ITypeInfo2_iface; ITypeInfo_AddRef(*ppTInfo); return S_OK; } else if (hr == TYPE_E_TYPEMISMATCH) typemismatch = TRUE; } } if (typemismatch) { TRACE("type mismatch %s\n", debugstr_w(szName)); return TYPE_E_TYPEMISMATCH; } else { TRACE("name not found %s\n", debugstr_w(szName)); return S_OK; } } static HRESULT WINAPI ITypeLibComp_fnBindType( ITypeComp * iface, OLECHAR * szName, ULONG lHash, ITypeInfo ** ppTInfo, ITypeComp ** ppTComp) { ITypeLibImpl *This = impl_from_ITypeComp(iface); ITypeInfoImpl *info; TRACE("(%s, %x, %p, %p)\n", debugstr_w(szName), lHash, ppTInfo, ppTComp); if(!szName || !ppTInfo || !ppTComp) return E_INVALIDARG; info = TLB_get_typeinfo_by_name(This->typeinfos, This->TypeInfoCount, szName); if(!info){ *ppTInfo = NULL; *ppTComp = NULL; return S_OK; } *ppTInfo = (ITypeInfo *)&info->ITypeInfo2_iface; ITypeInfo_AddRef(*ppTInfo); *ppTComp = &info->ITypeComp_iface; ITypeComp_AddRef(*ppTComp); return S_OK; } static const ITypeCompVtbl tlbtcvt = { ITypeLibComp_fnQueryInterface, ITypeLibComp_fnAddRef, ITypeLibComp_fnRelease, ITypeLibComp_fnBind, ITypeLibComp_fnBindType }; static HRESULT CDECL ITypeInfo_fnInvoke16( /* ITypeInfo2 * */SEGPTR spiface, /* VOID * */SEGPTR pIUnk, MEMBERID memid, UINT16 wFlags, /* DISPPARAMS * */ SEGPTR spDispParams, /* VARIANT * */ SEGPTR spVarResult, /* EXCEPINFO * */ SEGPTR spExcepInfo, /* UINT * */SEGPTR spArgErr); /*================== ITypeInfo(2) Methods ===================================*/ static ITypeInfoImpl* ITypeInfoImpl_Constructor(void) { ITypeInfoImpl *pTypeInfoImpl; SEGPTR typeinfo16; ITypeInfo16Vtbl *vtbl16; static SEGPTR sITypeInfo_fnInvoke16; pTypeInfoImpl = heap_alloc_zero(sizeof(ITypeInfoImpl)); if (pTypeInfoImpl) { pTypeInfoImpl->ITypeInfo2_iface.lpVtbl = &tinfvt; pTypeInfoImpl->ITypeComp_iface.lpVtbl = &tcompvt; pTypeInfoImpl->ICreateTypeInfo2_iface.lpVtbl = &CreateTypeInfo2Vtbl; pTypeInfoImpl->ref = 0; pTypeInfoImpl->hreftype = -1; pTypeInfoImpl->typeattr.memidConstructor = MEMBERID_NIL; pTypeInfoImpl->typeattr.memidDestructor = MEMBERID_NIL; pTypeInfoImpl->pcustdata_list = &pTypeInfoImpl->custdata_list; list_init(pTypeInfoImpl->pcustdata_list); typeinfo16 = iface32_16(&IID_ITypeInfo, &pTypeInfoImpl->ITypeInfo2_iface); vtbl16 = (ITypeInfo16Vtbl*)copy_iface16_vtbl(typeinfo16); SEGPTR make_thunk_32(void *funcptr, const char *arguments, const char *name, BOOL ret_32bit, BOOL reg_func, BOOL is_cdecl); if (!sITypeInfo_fnInvoke16) { sITypeInfo_fnInvoke16 = make_thunk_32(ITypeInfo_fnInvoke16, "sslwssss", "ITypeInfo2_fnInvoke16", TRUE, FALSE, TRUE); } vtbl16->Invoke = sITypeInfo_fnInvoke16; } TRACE("(%p)\n", pTypeInfoImpl); return pTypeInfoImpl; } /* ITypeInfo::QueryInterface */ static HRESULT WINAPI ITypeInfo_fnQueryInterface( ITypeInfo2 *iface, REFIID riid, VOID **ppvObject) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TRACE("(%p)->(IID: %s)\n",This,debugstr_guid(riid)); *ppvObject=NULL; if(IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid,&IID_ITypeInfo)|| IsEqualIID(riid,&IID_ITypeInfo2)) *ppvObject = &This->ITypeInfo2_iface; else if(IsEqualIID(riid, &IID_ICreateTypeInfo) || IsEqualIID(riid, &IID_ICreateTypeInfo2)) *ppvObject = &This->ICreateTypeInfo2_iface; else if(IsEqualIID(riid, &IID_ITypeComp)) *ppvObject = &This->ITypeComp_iface; if(*ppvObject){ IUnknown_AddRef((IUnknown*)*ppvObject); TRACE("-- Interface: (%p)->(%p)\n",ppvObject,*ppvObject); return S_OK; } TRACE("-- Interface: E_NOINTERFACE\n"); return E_NOINTERFACE; } /* ITypeInfo::AddRef */ static ULONG WINAPI ITypeInfo_fnAddRef( ITypeInfo2 *iface) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); ULONG ref = InterlockedIncrement(&This->ref); TRACE("(%p)->ref is %u\n",This, ref); if (ref == 1 /* incremented from 0 */) ITypeLib2_AddRef(&This->pTypeLib->ITypeLib2_iface); return ref; } static void ITypeInfoImpl_Destroy(ITypeInfoImpl *This) { UINT i; TRACE("destroying ITypeInfo(%p)\n",This); for (i = 0; i < This->typeattr.cFuncs; ++i) { int j; TLBFuncDesc *pFInfo = &This->funcdescs[i]; for(j = 0; j < pFInfo->funcdesc.cParams; j++) { ELEMDESC *elemdesc = &pFInfo->funcdesc.lprgelemdescParam[j]; if (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) VariantClear(&elemdesc->u.paramdesc.pparamdescex->varDefaultValue); TLB_FreeCustData(&pFInfo->pParamDesc[j].custdata_list); } heap_free(pFInfo->funcdesc.lprgelemdescParam); heap_free(pFInfo->pParamDesc); TLB_FreeCustData(&pFInfo->custdata_list); } heap_free(This->funcdescs); for(i = 0; i < This->typeattr.cVars; ++i) { TLBVarDesc *pVInfo = &This->vardescs[i]; if (pVInfo->vardesc_create) { TLB_FreeVarDesc(pVInfo->vardesc_create); } else if (pVInfo->vardesc.varkind == VAR_CONST) { VariantClear(pVInfo->vardesc.u.lpvarValue); heap_free(pVInfo->vardesc.u.lpvarValue); } TLB_FreeCustData(&pVInfo->custdata_list); } heap_free(This->vardescs); if(This->impltypes){ for (i = 0; i < This->typeattr.cImplTypes; ++i){ TLBImplType *pImpl = &This->impltypes[i]; TLB_FreeCustData(&pImpl->custdata_list); } heap_free(This->impltypes); } TLB_FreeCustData(&This->custdata_list); heap_free(This); } /* ITypeInfo::Release */ static ULONG WINAPI ITypeInfo_fnRelease(ITypeInfo2 *iface) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p)->(%u)\n",This, ref); if (!ref) { BOOL not_attached_to_typelib = This->not_attached_to_typelib; ITypeLib2_Release(&This->pTypeLib->ITypeLib2_iface); if (not_attached_to_typelib) heap_free(This); /* otherwise This will be freed when typelib is freed */ } return ref; } /* ITypeInfo::GetTypeAttr * * Retrieves a TYPEATTR structure that contains the attributes of the type * description. * */ static HRESULT WINAPI ITypeInfo_fnGetTypeAttr( ITypeInfo2 *iface, LPTYPEATTR *ppTypeAttr) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); SIZE_T size; TRACE("(%p)\n",This); size = sizeof(**ppTypeAttr); if (This->typeattr.typekind == TKIND_ALIAS && This->tdescAlias) size += TLB_SizeTypeDesc(This->tdescAlias, FALSE); *ppTypeAttr = heap_alloc(size); if (!*ppTypeAttr) return E_OUTOFMEMORY; **ppTypeAttr = This->typeattr; (*ppTypeAttr)->guid = *TLB_get_guid_null(This->guid); if (This->tdescAlias) TLB_CopyTypeDesc(&(*ppTypeAttr)->tdescAlias, This->tdescAlias, *ppTypeAttr + 1); if((*ppTypeAttr)->typekind == TKIND_DISPATCH) { /* This should include all the inherited funcs */ (*ppTypeAttr)->cFuncs = (*ppTypeAttr)->cbSizeVft / This->pTypeLib->ptr_size; /* This is always the size of IDispatch's vtbl */ (*ppTypeAttr)->cbSizeVft = sizeof(IDispatchVtbl); (*ppTypeAttr)->wTypeFlags &= ~TYPEFLAG_FOLEAUTOMATION; } return S_OK; } /* ITypeInfo::GetTypeComp * * Retrieves the ITypeComp interface for the type description, which enables a * client compiler to bind to the type description's members. * */ static HRESULT WINAPI ITypeInfo_fnGetTypeComp( ITypeInfo2 *iface, ITypeComp * *ppTComp) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TRACE("(%p)->(%p)\n", This, ppTComp); *ppTComp = &This->ITypeComp_iface; ITypeComp_AddRef(*ppTComp); return S_OK; } static SIZE_T TLB_SizeElemDesc( const ELEMDESC *elemdesc ) { SIZE_T size = TLB_SizeTypeDesc(&elemdesc->tdesc, FALSE); if (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) size += sizeof(*elemdesc->u.paramdesc.pparamdescex); return size; } static HRESULT TLB_CopyElemDesc( const ELEMDESC *src, ELEMDESC *dest, char **buffer ) { *dest = *src; *buffer = TLB_CopyTypeDesc(&dest->tdesc, &src->tdesc, *buffer); if (src->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) { const PARAMDESCEX *pparamdescex_src = src->u.paramdesc.pparamdescex; PARAMDESCEX *pparamdescex_dest = dest->u.paramdesc.pparamdescex = (PARAMDESCEX *)*buffer; *buffer += sizeof(PARAMDESCEX); *pparamdescex_dest = *pparamdescex_src; pparamdescex_dest->cBytes = sizeof(PARAMDESCEX); VariantInit(&pparamdescex_dest->varDefaultValue); return VariantCopy(&pparamdescex_dest->varDefaultValue, (VARIANTARG *)&pparamdescex_src->varDefaultValue); } else dest->u.paramdesc.pparamdescex = NULL; return S_OK; } static HRESULT TLB_SanitizeBSTR(BSTR str) { UINT len = SysStringLen(str), i; for (i = 0; i < len; ++i) if (str[i] > 0x7f) str[i] = '?'; return S_OK; } static HRESULT TLB_SanitizeVariant(VARIANT *var) { if (V_VT(var) == VT_INT) return VariantChangeType(var, var, 0, VT_I4); else if (V_VT(var) == VT_UINT) return VariantChangeType(var, var, 0, VT_UI4); else if (V_VT(var) == VT_BSTR) return TLB_SanitizeBSTR(V_BSTR(var)); return S_OK; } static void TLB_FreeElemDesc( ELEMDESC *elemdesc ) { if (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) VariantClear(&elemdesc->u.paramdesc.pparamdescex->varDefaultValue); } static HRESULT TLB_AllocAndInitFuncDesc( const FUNCDESC *src, FUNCDESC **dest_ptr, BOOL dispinterface ) { FUNCDESC *dest; char *buffer; SIZE_T size = sizeof(*src); SHORT i; HRESULT hr; size += sizeof(*src->lprgscode) * src->cScodes; size += TLB_SizeElemDesc(&src->elemdescFunc); for (i = 0; i < src->cParams; i++) { size += sizeof(ELEMDESC); size += TLB_SizeElemDesc(&src->lprgelemdescParam[i]); } dest = (FUNCDESC *)SysAllocStringByteLen(NULL, size); if (!dest) return E_OUTOFMEMORY; *dest = *src; if (dispinterface) /* overwrite funckind */ dest->funckind = FUNC_DISPATCH; buffer = (char *)(dest + 1); dest->oVft = dest->oVft & 0xFFFC; if (dest->cScodes) { dest->lprgscode = (SCODE *)buffer; memcpy(dest->lprgscode, src->lprgscode, sizeof(*src->lprgscode) * src->cScodes); buffer += sizeof(*src->lprgscode) * src->cScodes; } else dest->lprgscode = NULL; hr = TLB_CopyElemDesc(&src->elemdescFunc, &dest->elemdescFunc, &buffer); if (FAILED(hr)) { SysFreeString((BSTR)dest); return hr; } if (dest->cParams) { dest->lprgelemdescParam = (ELEMDESC *)buffer; buffer += sizeof(ELEMDESC) * src->cParams; for (i = 0; i < src->cParams; i++) { hr = TLB_CopyElemDesc(&src->lprgelemdescParam[i], &dest->lprgelemdescParam[i], &buffer); if (FAILED(hr)) break; } if (FAILED(hr)) { /* undo the above actions */ for (i = i - 1; i >= 0; i--) TLB_FreeElemDesc(&dest->lprgelemdescParam[i]); TLB_FreeElemDesc(&dest->elemdescFunc); SysFreeString((BSTR)dest); return hr; } } else dest->lprgelemdescParam = NULL; /* special treatment for dispinterfaces: this makes functions appear * to return their [retval] value when it is really returning an * HRESULT */ if (dispinterface && dest->elemdescFunc.tdesc.vt == VT_HRESULT) { if (dest->cParams && (dest->lprgelemdescParam[dest->cParams - 1].u.paramdesc.wParamFlags & PARAMFLAG_FRETVAL)) { ELEMDESC *elemdesc = &dest->lprgelemdescParam[dest->cParams - 1]; if (elemdesc->tdesc.vt != VT_PTR) { ERR("elemdesc should have started with VT_PTR instead of:\n"); if (ERR_ON(ole)) dump_ELEMDESC(elemdesc); return E_UNEXPECTED; } /* copy last parameter to the return value. we are using a flat * buffer so there is no danger of leaking memory in * elemdescFunc */ dest->elemdescFunc.tdesc = *elemdesc->tdesc.u.lptdesc; /* remove the last parameter */ dest->cParams--; } else /* otherwise this function is made to appear to have no return * value */ dest->elemdescFunc.tdesc.vt = VT_VOID; } *dest_ptr = dest; return S_OK; } static void TLB_FreeVarDesc(VARDESC *var_desc) { TLB_FreeElemDesc(&var_desc->elemdescVar); if (var_desc->varkind == VAR_CONST) VariantClear(var_desc->u.lpvarValue); SysFreeString((BSTR)var_desc); } HRESULT ITypeInfoImpl_GetInternalFuncDesc( ITypeInfo *iface, UINT index, const FUNCDESC **ppFuncDesc ) { ITypeInfoImpl *This = impl_from_ITypeInfo(iface); if (index >= This->typeattr.cFuncs) return TYPE_E_ELEMENTNOTFOUND; *ppFuncDesc = &This->funcdescs[index].funcdesc; return S_OK; } /* internal function to make the inherited interfaces' methods appear * part of the interface */ static HRESULT ITypeInfoImpl_GetInternalDispatchFuncDesc( ITypeInfo *iface, UINT index, const FUNCDESC **ppFuncDesc, UINT *funcs, UINT *hrefoffset) { ITypeInfoImpl *This = impl_from_ITypeInfo(iface); HRESULT hr; UINT implemented_funcs = 0; if (funcs) *funcs = 0; else *hrefoffset = DISPATCH_HREF_OFFSET; if(This->impltypes) { ITypeInfo *pSubTypeInfo; UINT sub_funcs; hr = ITypeInfo_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pSubTypeInfo); if (FAILED(hr)) return hr; hr = ITypeInfoImpl_GetInternalDispatchFuncDesc(pSubTypeInfo, index, ppFuncDesc, &sub_funcs, hrefoffset); implemented_funcs += sub_funcs; ITypeInfo_Release(pSubTypeInfo); if (SUCCEEDED(hr)) return hr; *hrefoffset += DISPATCH_HREF_OFFSET; } if (funcs) *funcs = implemented_funcs + This->typeattr.cFuncs; else *hrefoffset = 0; if (index < implemented_funcs) return E_INVALIDARG; return ITypeInfoImpl_GetInternalFuncDesc(iface, index - implemented_funcs, ppFuncDesc); } static inline void ITypeInfoImpl_ElemDescAddHrefOffset( LPELEMDESC pElemDesc, UINT hrefoffset) { TYPEDESC *pTypeDesc = &pElemDesc->tdesc; while (TRUE) { switch (pTypeDesc->vt) { case VT_USERDEFINED: pTypeDesc->u.hreftype += hrefoffset; return; case VT_PTR: case VT_SAFEARRAY: pTypeDesc = pTypeDesc->u.lptdesc; break; case VT_CARRAY: pTypeDesc = &pTypeDesc->u.lpadesc->tdescElem; break; default: return; } } } static inline void ITypeInfoImpl_FuncDescAddHrefOffset( LPFUNCDESC pFuncDesc, UINT hrefoffset) { SHORT i; for (i = 0; i < pFuncDesc->cParams; i++) ITypeInfoImpl_ElemDescAddHrefOffset(&pFuncDesc->lprgelemdescParam[i], hrefoffset); ITypeInfoImpl_ElemDescAddHrefOffset(&pFuncDesc->elemdescFunc, hrefoffset); } /* ITypeInfo::GetFuncDesc * * Retrieves the FUNCDESC structure that contains information about a * specified function. * */ static HRESULT WINAPI ITypeInfo_fnGetFuncDesc( ITypeInfo2 *iface, UINT index, LPFUNCDESC *ppFuncDesc) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); const FUNCDESC *internal_funcdesc; HRESULT hr; UINT hrefoffset = 0; TRACE("(%p) index %d\n", This, index); if (!ppFuncDesc) return E_INVALIDARG; if (This->needs_layout) ICreateTypeInfo2_LayOut(&This->ICreateTypeInfo2_iface); if (This->typeattr.typekind == TKIND_DISPATCH) hr = ITypeInfoImpl_GetInternalDispatchFuncDesc((ITypeInfo *)iface, index, &internal_funcdesc, NULL, &hrefoffset); else hr = ITypeInfoImpl_GetInternalFuncDesc((ITypeInfo *)iface, index, &internal_funcdesc); if (FAILED(hr)) { WARN("description for function %d not found\n", index); return hr; } hr = TLB_AllocAndInitFuncDesc( internal_funcdesc, ppFuncDesc, This->typeattr.typekind == TKIND_DISPATCH); if ((This->typeattr.typekind == TKIND_DISPATCH) && hrefoffset) ITypeInfoImpl_FuncDescAddHrefOffset(*ppFuncDesc, hrefoffset); TRACE("-- 0x%08x\n", hr); return hr; } static HRESULT TLB_AllocAndInitVarDesc( const VARDESC *src, VARDESC **dest_ptr ) { VARDESC *dest; char *buffer; SIZE_T size = sizeof(*src); HRESULT hr; if (src->lpstrSchema) size += (strlenW(src->lpstrSchema) + 1) * sizeof(WCHAR); if (src->varkind == VAR_CONST) size += sizeof(VARIANT); size += TLB_SizeElemDesc(&src->elemdescVar); dest = (VARDESC *)SysAllocStringByteLen(NULL, size); if (!dest) return E_OUTOFMEMORY; *dest = *src; buffer = (char *)(dest + 1); if (src->lpstrSchema) { int len; dest->lpstrSchema = (LPOLESTR)buffer; len = strlenW(src->lpstrSchema); memcpy(dest->lpstrSchema, src->lpstrSchema, (len + 1) * sizeof(WCHAR)); buffer += (len + 1) * sizeof(WCHAR); } if (src->varkind == VAR_CONST) { HRESULT hr; dest->u.lpvarValue = (VARIANT *)buffer; *dest->u.lpvarValue = *src->u.lpvarValue; buffer += sizeof(VARIANT); VariantInit(dest->u.lpvarValue); hr = VariantCopy(dest->u.lpvarValue, src->u.lpvarValue); if (FAILED(hr)) { SysFreeString((BSTR)dest); return hr; } } hr = TLB_CopyElemDesc(&src->elemdescVar, &dest->elemdescVar, &buffer); if (FAILED(hr)) { if (src->varkind == VAR_CONST) VariantClear(dest->u.lpvarValue); SysFreeString((BSTR)dest); return hr; } *dest_ptr = dest; return S_OK; } /* ITypeInfo::GetVarDesc * * Retrieves a VARDESC structure that describes the specified variable. * */ static HRESULT WINAPI ITypeInfo_fnGetVarDesc( ITypeInfo2 *iface, UINT index, LPVARDESC *ppVarDesc) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); const TLBVarDesc *pVDesc = &This->vardescs[index]; TRACE("(%p) index %d\n", This, index); if(index >= This->typeattr.cVars) return TYPE_E_ELEMENTNOTFOUND; if (This->needs_layout) ICreateTypeInfo2_LayOut(&This->ICreateTypeInfo2_iface); return TLB_AllocAndInitVarDesc(&pVDesc->vardesc, ppVarDesc); } /* ITypeInfo_GetNames * * Retrieves the variable with the specified member ID (or the name of the * property or method and its parameters) that correspond to the specified * function ID. */ static HRESULT WINAPI ITypeInfo_fnGetNames( ITypeInfo2 *iface, MEMBERID memid, BSTR *rgBstrNames, UINT cMaxNames, UINT *pcNames) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); const TLBFuncDesc *pFDesc; const TLBVarDesc *pVDesc; int i; TRACE("(%p) memid=0x%08x Maxname=%d\n", This, memid, cMaxNames); if(!rgBstrNames) return E_INVALIDARG; *pcNames = 0; pFDesc = TLB_get_funcdesc_by_memberid(This->funcdescs, This->typeattr.cFuncs, memid); if(pFDesc) { if(!cMaxNames || !pFDesc->Name) return S_OK; *rgBstrNames = SysAllocString(TLB_get_bstr(pFDesc->Name)); ++(*pcNames); for(i = 0; i < pFDesc->funcdesc.cParams; ++i){ if(*pcNames >= cMaxNames || !pFDesc->pParamDesc[i].Name) return S_OK; rgBstrNames[*pcNames] = SysAllocString(TLB_get_bstr(pFDesc->pParamDesc[i].Name)); ++(*pcNames); } return S_OK; } pVDesc = TLB_get_vardesc_by_memberid(This->vardescs, This->typeattr.cVars, memid); if(pVDesc) { *rgBstrNames=SysAllocString(TLB_get_bstr(pVDesc->Name)); *pcNames=1; } else { if(This->impltypes && (This->typeattr.typekind == TKIND_INTERFACE || This->typeattr.typekind == TKIND_DISPATCH)) { /* recursive search */ ITypeInfo *pTInfo; HRESULT result; result = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo); if(SUCCEEDED(result)) { result=ITypeInfo_GetNames(pTInfo, memid, rgBstrNames, cMaxNames, pcNames); ITypeInfo_Release(pTInfo); return result; } WARN("Could not search inherited interface!\n"); } else { WARN("no names found\n"); } *pcNames=0; return TYPE_E_ELEMENTNOTFOUND; } return S_OK; } /* ITypeInfo::GetRefTypeOfImplType * * If a type description describes a COM class, it retrieves the type * description of the implemented interface types. For an interface, * GetRefTypeOfImplType returns the type information for inherited interfaces, * if any exist. * */ static HRESULT WINAPI ITypeInfo_fnGetRefTypeOfImplType( ITypeInfo2 *iface, UINT16 index, HREFTYPE *pRefType) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); HRESULT hr = S_OK; TRACE("(%p) index %d\n", This, index); if (TRACE_ON(ole)) dump_TypeInfo(This); if(index==0xffff) { /* only valid on dual interfaces; retrieve the associated TKIND_INTERFACE handle for the current TKIND_DISPATCH */ if (This->typeattr.wTypeFlags & TYPEFLAG_FDUAL) { *pRefType = -2; } else { hr = TYPE_E_ELEMENTNOTFOUND; } } else if(index == 0 && This->typeattr.typekind == TKIND_DISPATCH) { /* All TKIND_DISPATCHs are made to look like they inherit from IDispatch */ *pRefType = This->pTypeLib->dispatch_href; } else { if(index >= This->typeattr.cImplTypes) hr = TYPE_E_ELEMENTNOTFOUND; else{ *pRefType = This->impltypes[index].hRef; if (This->typeattr.typekind == TKIND_INTERFACE) *pRefType |= 0x2; } } if(TRACE_ON(ole)) { if(SUCCEEDED(hr)) TRACE("SUCCESS -- hRef = 0x%08x\n", *pRefType ); else TRACE("FAILURE -- hresult = 0x%08x\n", hr); } return hr; } /* ITypeInfo::GetImplTypeFlags * * Retrieves the IMPLTYPEFLAGS enumeration for one implemented interface * or base interface in a type description. */ static HRESULT WINAPI ITypeInfo_fnGetImplTypeFlags( ITypeInfo2 *iface, UINT index, INT *pImplTypeFlags) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TRACE("(%p) index %d\n", This, index); if(!pImplTypeFlags) return E_INVALIDARG; if(This->typeattr.typekind == TKIND_DISPATCH && index == 0){ *pImplTypeFlags = 0; return S_OK; } if(index >= This->typeattr.cImplTypes) return TYPE_E_ELEMENTNOTFOUND; *pImplTypeFlags = This->impltypes[index].implflags; return S_OK; } /* GetIDsOfNames * Maps between member names and member IDs, and parameter names and * parameter IDs. */ static HRESULT WINAPI ITypeInfo_fnGetIDsOfNames( ITypeInfo2 *iface, LPOLESTR *rgszNames, UINT cNames, MEMBERID *pMemId) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); const TLBVarDesc *pVDesc; HRESULT ret=S_OK; UINT i, fdc; TRACE("(%p) Name %s cNames %d\n", This, debugstr_w(*rgszNames), cNames); /* init out parameters in case of failure */ for (i = 0; i < cNames; i++) pMemId[i] = MEMBERID_NIL; for (fdc = 0; fdc < This->typeattr.cFuncs; ++fdc) { int j; const TLBFuncDesc *pFDesc = &This->funcdescs[fdc]; if(!lstrcmpiW(*rgszNames, TLB_get_bstr(pFDesc->Name))) { if(cNames) *pMemId=pFDesc->funcdesc.memid; for(i=1; i < cNames; i++){ for(j=0; jfuncdesc.cParams; j++) if(!lstrcmpiW(rgszNames[i],TLB_get_bstr(pFDesc->pParamDesc[j].Name))) break; if( jfuncdesc.cParams) pMemId[i]=j; else ret=DISP_E_UNKNOWNNAME; }; TRACE("-- 0x%08x\n", ret); return ret; } } pVDesc = TLB_get_vardesc_by_name(This->vardescs, This->typeattr.cVars, *rgszNames); if(pVDesc){ if(cNames) *pMemId = pVDesc->vardesc.memid; return ret; } /* not found, see if it can be found in an inherited interface */ if(This->impltypes) { /* recursive search */ ITypeInfo *pTInfo; ret = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo); if(SUCCEEDED(ret)){ ret=ITypeInfo_GetIDsOfNames(pTInfo, rgszNames, cNames, pMemId ); ITypeInfo_Release(pTInfo); return ret; } WARN("Could not search inherited interface!\n"); } else WARN("no names found\n"); return DISP_E_UNKNOWNNAME; } #ifdef __i386__ extern LONGLONG call_method( void *func, int nb_args, const DWORD *args, int *stack_offset ); extern double call_double_method( void *func, int nb_args, const DWORD *args, int *stack_offset ); LONGLONG call_method(void *func, int nb_args, const DWORD *args, int *stack_offset) { DWORD ret; WOWCallback16Ex(func, WCB16_PASCAL, nb_args * 2, args, &ret); return ret; } double call_double_method(void *func, int nb_args, const DWORD *args, int *stack_offset) { FIXME("\n"); return 0; } #if 0 __ASM_GLOBAL_FUNC( call_method, "pushl %ebp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") "movl %esp,%ebp\n\t" __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") "pushl %esi\n\t" __ASM_CFI(".cfi_rel_offset %esi,-4\n\t") "pushl %edi\n\t" __ASM_CFI(".cfi_rel_offset %edi,-8\n\t") "movl 12(%ebp),%edx\n\t" "movl %esp,%edi\n\t" "shll $2,%edx\n\t" "jz 1f\n\t" "subl %edx,%edi\n\t" "andl $~15,%edi\n\t" "movl %edi,%esp\n\t" "movl 12(%ebp),%ecx\n\t" "movl 16(%ebp),%esi\n\t" "cld\n\t" "rep; movsl\n" "1:\tcall *8(%ebp)\n\t" "subl %esp,%edi\n\t" "movl 20(%ebp),%ecx\n\t" "movl %edi,(%ecx)\n\t" "leal -8(%ebp),%esp\n\t" "popl %edi\n\t" __ASM_CFI(".cfi_same_value %edi\n\t") "popl %esi\n\t" __ASM_CFI(".cfi_same_value %esi\n\t") "popl %ebp\n\t" __ASM_CFI(".cfi_def_cfa %esp,4\n\t") __ASM_CFI(".cfi_same_value %ebp\n\t") "ret" ) __ASM_GLOBAL_FUNC( call_double_method, "jmp " __ASM_NAME("call_method") ) #endif /* ITypeInfo::Invoke * * Invokes a method, or accesses a property of an object, that implements the * interface described by the type description. */ DWORD _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) { DWORD res; int stack_offset; if (TRACE_ON(ole)) { int i; TRACE("Calling %p(",func); for (i=0;i 30) TRACE("..."); TRACE(")\n"); } switch (callconv) { case CC_STDCALL: case CC_CDECL: res = call_method( func, nrargs, args, &stack_offset ); break; default: FIXME("unsupported calling convention %d\n",callconv); res = -1; break; } TRACE("returns %08x\n",res); return res; } #elif defined(__x86_64__) extern DWORD_PTR CDECL call_method( void *func, int nb_args, const DWORD_PTR *args ); extern double CDECL call_double_method( void *func, int nb_args, const DWORD_PTR *args ); __ASM_GLOBAL_FUNC( call_method, "pushq %rbp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 8\n\t") __ASM_CFI(".cfi_rel_offset %rbp,0\n\t") "movq %rsp,%rbp\n\t" __ASM_CFI(".cfi_def_cfa_register %rbp\n\t") "pushq %rsi\n\t" __ASM_CFI(".cfi_rel_offset %rsi,-8\n\t") "pushq %rdi\n\t" __ASM_CFI(".cfi_rel_offset %rdi,-16\n\t") "movq %rcx,%rax\n\t" "movq $4,%rcx\n\t" "cmp %rcx,%rdx\n\t" "cmovgq %rdx,%rcx\n\t" "leaq 0(,%rcx,8),%rdx\n\t" "subq %rdx,%rsp\n\t" "andq $~15,%rsp\n\t" "movq %rsp,%rdi\n\t" "movq %r8,%rsi\n\t" "rep; movsq\n\t" "movq 0(%rsp),%rcx\n\t" "movq 8(%rsp),%rdx\n\t" "movq 16(%rsp),%r8\n\t" "movq 24(%rsp),%r9\n\t" "movq 0(%rsp),%xmm0\n\t" "movq 8(%rsp),%xmm1\n\t" "movq 16(%rsp),%xmm2\n\t" "movq 24(%rsp),%xmm3\n\t" "callq *%rax\n\t" "leaq -16(%rbp),%rsp\n\t" "popq %rdi\n\t" __ASM_CFI(".cfi_same_value %rdi\n\t") "popq %rsi\n\t" __ASM_CFI(".cfi_same_value %rsi\n\t") __ASM_CFI(".cfi_def_cfa_register %rsp\n\t") "popq %rbp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset -8\n\t") __ASM_CFI(".cfi_same_value %rbp\n\t") "ret") __ASM_GLOBAL_FUNC( call_double_method, "jmp " __ASM_NAME("call_method") ) #elif defined(__arm__) extern LONGLONG CDECL call_method( void *func, int nb_stk_args, const DWORD *stk_args, const DWORD *reg_args ); extern float CDECL call_float_method( void *func, int nb_stk_args, const DWORD *stk_args, const DWORD *reg_args ); extern double CDECL call_double_method( void *func, int nb_stk_args, const DWORD *stk_args, const DWORD *reg_args ); __ASM_GLOBAL_FUNC( call_method, /* r0 = *func * r1 = nb_stk_args * r2 = *stk_args (pointer to 'nb_stk_args' DWORD values to push on stack) * 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) */ "push {fp, lr}\n\t" /* Save frame pointer and return address (stack still aligned to 8 bytes) */ "mov fp, sp\n\t" /* Save stack pointer as our frame for cleaning the stack on return */ "lsls r1, r1, #2\n\t" /* r1 = nb_stk_args * sizeof(DWORD) */ "beq 1f\n\t" /* Skip allocation if no stack args */ "add r2, r2, r1\n" /* Calculate ending address of incoming stack data */ "2:\tldr ip, [r2, #-4]!\n\t" /* Get next value */ "str ip, [sp, #-4]!\n\t" /* Push it on the stack */ "subs r1, r1, #4\n\t" /* Decrement count */ "bgt 2b\n\t" /* Loop till done */ "1:\n\t" #ifndef __SOFTFP__ "vldm r3!, {s0-s15}\n\t" /* Load the s0-s15/d0-d7 arguments */ #endif "mov ip, r0\n\t" /* Save the function call address to ip before we nuke r0 with arguments to pass */ "ldm r3, {r0-r3}\n\t" /* Load the r0-r3 arguments */ "blx ip\n\t" /* Call the target function */ "mov sp, fp\n\t" /* Clean the stack using fp */ "pop {fp, pc}\n\t" /* Restore fp and return */ ) __ASM_GLOBAL_FUNC( call_float_method, "b " __ASM_NAME("call_method") ) __ASM_GLOBAL_FUNC( call_double_method, "b " __ASM_NAME("call_method") ) #endif /* __arm__ */ static HRESULT userdefined_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt) { HRESULT hr = S_OK; ITypeInfo *tinfo2 = NULL; TYPEATTR *tattr = NULL; hr = ITypeInfo_GetRefTypeInfo(tinfo, tdesc->u.hreftype, &tinfo2); if (hr) { ERR("Could not get typeinfo of hreftype %x for VT_USERDEFINED, " "hr = 0x%08x\n", tdesc->u.hreftype, hr); return hr; } hr = ITypeInfo_GetTypeAttr(tinfo2, &tattr); if (hr) { ERR("ITypeInfo_GetTypeAttr failed, hr = 0x%08x\n", hr); ITypeInfo_Release(tinfo2); return hr; } switch (tattr->typekind) { case TKIND_ENUM: *vt |= VT_I4; break; case TKIND_ALIAS: hr = typedescvt_to_variantvt(tinfo2, &tattr->tdescAlias, vt); break; case TKIND_INTERFACE: if (tattr->wTypeFlags & TYPEFLAG_FDISPATCHABLE) *vt |= VT_DISPATCH; else *vt |= VT_UNKNOWN; break; case TKIND_DISPATCH: *vt |= VT_DISPATCH; break; case TKIND_COCLASS: *vt |= VT_DISPATCH; break; case TKIND_RECORD: FIXME("TKIND_RECORD unhandled.\n"); hr = E_NOTIMPL; break; case TKIND_UNION: FIXME("TKIND_UNION unhandled.\n"); hr = E_NOTIMPL; break; default: FIXME("TKIND %d unhandled.\n",tattr->typekind); hr = E_NOTIMPL; break; } ITypeInfo_ReleaseTypeAttr(tinfo2, tattr); ITypeInfo_Release(tinfo2); return hr; } static HRESULT typedescvt_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt) { HRESULT hr = S_OK; /* enforce only one level of pointer indirection */ if (!(*vt & VT_BYREF) && !(*vt & VT_ARRAY) && (tdesc->vt == VT_PTR)) { tdesc = tdesc->u.lptdesc; /* munch VT_PTR -> VT_USERDEFINED(interface) into VT_UNKNOWN or * VT_DISPATCH and VT_PTR -> VT_PTR -> VT_USERDEFINED(interface) into * VT_BYREF|VT_DISPATCH or VT_BYREF|VT_UNKNOWN */ if ((tdesc->vt == VT_USERDEFINED) || ((tdesc->vt == VT_PTR) && (tdesc->u.lptdesc->vt == VT_USERDEFINED))) { VARTYPE vt_userdefined = 0; const TYPEDESC *tdesc_userdefined = tdesc; if (tdesc->vt == VT_PTR) { vt_userdefined = VT_BYREF; tdesc_userdefined = tdesc->u.lptdesc; } hr = userdefined_to_variantvt(tinfo, tdesc_userdefined, &vt_userdefined); if ((hr == S_OK) && (((vt_userdefined & VT_TYPEMASK) == VT_UNKNOWN) || ((vt_userdefined & VT_TYPEMASK) == VT_DISPATCH))) { *vt |= vt_userdefined; return S_OK; } } *vt = VT_BYREF; } switch (tdesc->vt) { case VT_HRESULT: *vt |= VT_ERROR; break; case VT_USERDEFINED: hr = userdefined_to_variantvt(tinfo, tdesc, vt); break; case VT_VOID: case VT_CARRAY: case VT_PTR: case VT_LPSTR: case VT_LPWSTR: ERR("cannot convert type %d into variant VT\n", tdesc->vt); hr = DISP_E_BADVARTYPE; break; case VT_SAFEARRAY: *vt |= VT_ARRAY; hr = typedescvt_to_variantvt(tinfo, tdesc->u.lptdesc, vt); break; case VT_INT: *vt |= VT_I4; break; case VT_UINT: *vt |= VT_UI4; break; default: *vt |= tdesc->vt; break; } return hr; } static HRESULT get_iface_guid(ITypeInfo *tinfo, const TYPEDESC *tdesc, GUID *guid) { ITypeInfo *tinfo2; TYPEATTR *tattr; HRESULT hres; hres = ITypeInfo_GetRefTypeInfo(tinfo, tdesc->u.hreftype, &tinfo2); if(FAILED(hres)) return hres; hres = ITypeInfo_GetTypeAttr(tinfo2, &tattr); if(FAILED(hres)) { ITypeInfo_Release(tinfo2); return hres; } switch(tattr->typekind) { case TKIND_ALIAS: hres = get_iface_guid(tinfo2, &tattr->tdescAlias, guid); break; case TKIND_INTERFACE: case TKIND_DISPATCH: *guid = tattr->guid; break; default: ERR("Unexpected typekind %d\n", tattr->typekind); hres = E_UNEXPECTED; } ITypeInfo_ReleaseTypeAttr(tinfo2, tattr); ITypeInfo_Release(tinfo2); return hres; } HRESULT WINAPI DispCallFunc16( SEGPTR pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals, VARTYPE* prgvt, VARIANTARG16** prgpvarg, VARIANT16* pvargResult) { int argspos, stack_offset; void *func; UINT i; WORD *args; #define WRITE_DWORD(v) args[argspos++] = LOWORD(v);args[argspos++] = HIWORD(v) TRACE("(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\n", pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult)); if (cc != /*CC_STDCALL*/CC_MSCPASCAL && cc != CC_CDECL) { FIXME("unsupported calling convention %d\n",cc); return E_INVALIDARG16; } /* maximum size for an argument is sizeof(VARIANT) */ args = heap_alloc(sizeof(VARIANT) * cActuals + sizeof(DWORD) * 2 ); /* start at 1 in case we need to pass a pointer to the return value as arg 0 */ argspos = 2; if (pvInstance) { const FARPROC *vtable = *(FARPROC **)MapSL(pvInstance); /* We expect pvInstance to be segmented pointer.!? */ func = ((SEGPTR*)MapSL(vtable))[oVft/sizeof(void *)]; WRITE_DWORD((DWORD)pvInstance); /* the This pointer is always the first parameter */ } else func = (void *)oVft; for (i = 0; i < cActuals; i++) { VARIANT16 *arg = prgpvarg[i]; switch (prgvt[i]) { case VT_EMPTY: break; case VT_I8: case VT_UI8: case VT_R8: case VT_DATE: case VT_CY: memcpy( &args[argspos], &V_I8(arg), sizeof(V_I8(arg)) ); argspos += sizeof(V_I8(arg)) / sizeof(WORD); break; case VT_DECIMAL: case VT_VARIANT: memcpy( &args[argspos], arg, sizeof(*arg) ); argspos += sizeof(*arg) / sizeof(WORD); break; case VT_BOOL: /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */ args[argspos++] = V_BOOL(arg); break; case VT_UI4: case VT_I4: WRITE_DWORD(V_UI4(arg)); break; case VT_UI2: case VT_I2: args[argspos++] = V_UI2(arg); break; default: WRITE_DWORD(V_UI4(arg)); break; } TRACE("arg %u: type %s %s\n", i, debugstr_vt(prgvt[i]), debugstr_variant16(arg)); } switch (vtReturn) { case VT_EMPTY: call_method( func, argspos - 2, args + 2, &stack_offset ); break; case VT_R4: V_R4(pvargResult) = call_double_method( func, argspos - 2, args + 2, &stack_offset ); break; case VT_R8: case VT_DATE: V_R8(pvargResult) = call_double_method( func, argspos - 2, args + 2, &stack_offset ); break; case VT_DECIMAL: case VT_VARIANT: args[0] = (DWORD)pvargResult; /* arg 0 is a pointer to the result */ call_method( func, argspos, args, &stack_offset ); break; case VT_I8: case VT_UI8: case VT_CY: V_UI8(pvargResult) = call_method( func, argspos - 2, args + 2, &stack_offset ); break; case VT_HRESULT: WARN("invalid return type %u\n", vtReturn); heap_free( args ); return E_INVALIDARG16; default: V_UI4(pvargResult) = call_method( func, argspos - 2, args + 2, &stack_offset ); break; } heap_free( args ); if (stack_offset && cc == CC_STDCALL) { WARN( "stack pointer off by %d\n", stack_offset ); return DISP_E_BADCALLEE; } if (vtReturn != VT_VARIANT) V_VT(pvargResult) = vtReturn; TRACE("retval: %s\n", debugstr_variant16(pvargResult)); return S_OK; } /*********************************************************************** * DispCallFunc (OLEAUT32.@) * * Invokes a function of the specified calling convention, passing the * specified arguments and returns the result. * * PARAMS * pvInstance [I] Optional pointer to the instance whose function to invoke. * oVft [I] The offset in the vtable. See notes. * cc [I] Calling convention of the function to call. * vtReturn [I] The return type of the function. * cActuals [I] Number of parameters. * prgvt [I] The types of the parameters to pass. This is used for sizing only. * prgpvarg [I] The arguments to pass. * pvargResult [O] The return value of the function. Can be NULL. * * RETURNS * Success: S_OK. * Failure: HRESULT code. * * NOTES * The HRESULT return value of this function is not affected by the return * value of the user supplied function, which is returned in pvargResult. * * If pvInstance is NULL then a non-object function is to be called and oVft * is the address of the function to call. * * The cc parameter can be one of the following values: *|CC_FASTCALL *|CC_CDECL *|CC_PASCAL *|CC_STDCALL *|CC_FPFASTCALL *|CC_SYSCALL *|CC_MPWCDECL *|CC_MPWPASCAL * */ HRESULT WINAPI DispCallFunc( void* pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals, VARTYPE* prgvt, VARIANTARG** prgpvarg, VARIANT* pvargResult) { #ifdef __i386__ int argspos, stack_offset; void *func; UINT i; WORD *args; #define WRITE_DWORD(v) args[argspos++] = LOWORD(v);args[argspos++] = HIWORD(v) TRACE("(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\n", pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult)); if (cc != /*CC_STDCALL*/CC_MSCPASCAL && cc != CC_CDECL) { FIXME("unsupported calling convention %d\n",cc); return E_INVALIDARG; } /* maximum size for an argument is sizeof(VARIANT) */ args = heap_alloc(sizeof(VARIANT) * cActuals + sizeof(DWORD) * 2 ); /* start at 1 in case we need to pass a pointer to the return value as arg 0 */ argspos = 2; if (pvInstance) { const FARPROC *vtable = *(FARPROC **)MapSL(pvInstance); /* We expect pvInstance to be segmented pointer.!? */ func = ((SEGPTR*)MapSL(vtable))[oVft/sizeof(void *)]; WRITE_DWORD((DWORD)pvInstance); /* the This pointer is always the first parameter */ } else func = (void *)oVft; for (i = 0; i < cActuals; i++) { VARIANT *arg = prgpvarg[i]; switch (prgvt[i]) { case VT_EMPTY: break; case VT_I8: case VT_UI8: case VT_R8: case VT_DATE: case VT_CY: memcpy( &args[argspos], &V_I8(arg), sizeof(V_I8(arg)) ); argspos += sizeof(V_I8(arg)) / sizeof(WORD); break; case VT_DECIMAL: case VT_VARIANT: memcpy( &args[argspos], arg, sizeof(*arg) ); argspos += sizeof(*arg) / sizeof(WORD); break; case VT_BOOL: /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */ args[argspos++] = V_BOOL(arg); break; case VT_UI4: case VT_I4: WRITE_DWORD(V_UI4(arg)); case VT_UI2: case VT_I2: args[argspos++] = V_UI2(arg); break; default: FIXME("unk type %s\n", debugstr_vt(V_VT(arg))); break; } TRACE("arg %u: type %s %s\n", i, debugstr_vt(prgvt[i]), debugstr_variant(arg)); } switch (vtReturn) { case VT_EMPTY: call_method( func, argspos - 2, args + 2, &stack_offset ); break; case VT_R4: V_R4(pvargResult) = call_double_method( func, argspos - 2, args + 2, &stack_offset ); break; case VT_R8: case VT_DATE: V_R8(pvargResult) = call_double_method( func, argspos - 2, args + 2, &stack_offset ); break; case VT_DECIMAL: case VT_VARIANT: args[0] = (DWORD)pvargResult; /* arg 0 is a pointer to the result */ call_method( func, argspos, args, &stack_offset ); break; case VT_I8: case VT_UI8: case VT_CY: V_UI8(pvargResult) = call_method( func, argspos - 2, args + 2, &stack_offset ); break; case VT_HRESULT: WARN("invalid return type %u\n", vtReturn); heap_free( args ); return E_INVALIDARG; default: V_UI4(pvargResult) = call_method( func, argspos - 2, args + 2, &stack_offset ); break; } heap_free( args ); if (stack_offset && cc == CC_STDCALL) { WARN( "stack pointer off by %d\n", stack_offset ); return DISP_E_BADCALLEE; } if (vtReturn != VT_VARIANT) V_VT(pvargResult) = vtReturn; TRACE("retval: %s\n", debugstr_variant(pvargResult)); return S_OK; #elif defined(__x86_64__) int argspos; UINT i; DWORD_PTR *args; void *func; TRACE("(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\n", pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult)); if (cc != CC_STDCALL && cc != CC_CDECL) { FIXME("unsupported calling convention %d\n",cc); return E_INVALIDARG; } /* maximum size for an argument is sizeof(DWORD_PTR) */ args = heap_alloc( sizeof(DWORD_PTR) * (cActuals + 2) ); /* start at 1 in case we need to pass a pointer to the return value as arg 0 */ argspos = 1; if (pvInstance) { const FARPROC *vtable = *(FARPROC **)pvInstance; func = vtable[oVft/sizeof(void *)]; args[argspos++] = (DWORD_PTR)pvInstance; /* the This pointer is always the first parameter */ } else func = (void *)oVft; for (i = 0; i < cActuals; i++) { VARIANT *arg = prgpvarg[i]; switch (prgvt[i]) { case VT_DECIMAL: case VT_VARIANT: args[argspos++] = (ULONG_PTR)arg; break; case VT_BOOL: /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */ args[argspos++] = V_BOOL(arg); break; default: args[argspos++] = V_UI8(arg); break; } TRACE("arg %u: type %s %s\n", i, debugstr_vt(prgvt[i]), debugstr_variant(arg)); } switch (vtReturn) { case VT_R4: V_R4(pvargResult) = call_double_method( func, argspos - 1, args + 1 ); break; case VT_R8: case VT_DATE: V_R8(pvargResult) = call_double_method( func, argspos - 1, args + 1 ); break; case VT_DECIMAL: case VT_VARIANT: args[0] = (DWORD_PTR)pvargResult; /* arg 0 is a pointer to the result */ call_method( func, argspos, args ); break; case VT_HRESULT: WARN("invalid return type %u\n", vtReturn); heap_free( args ); return E_INVALIDARG; default: V_UI8(pvargResult) = call_method( func, argspos - 1, args + 1 ); break; } heap_free( args ); if (vtReturn != VT_VARIANT) V_VT(pvargResult) = vtReturn; TRACE("retval: %s\n", debugstr_variant(pvargResult)); return S_OK; #elif defined(__arm__) int argspos; void *func; UINT i; DWORD *args; struct { #ifndef __SOFTFP__ union { float s[16]; double d[8]; } sd; #endif DWORD r[4]; } regs; int rcount; /* 32-bit register index count */ #ifndef __SOFTFP__ int scount = 0; /* single-precision float register index count */ int dcount = 0; /* double-precision float register index count */ #endif TRACE("(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\n", pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult)); if (cc != CC_STDCALL && cc != CC_CDECL) { FIXME("unsupported calling convention %d\n",cc); return E_INVALIDARG; } argspos = 0; rcount = 0; /* Determine if we need to pass a pointer for the return value as arg 0. If so, do that */ /* first as it will need to be in the 'r' registers: */ switch (vtReturn) { case VT_DECIMAL: case VT_VARIANT: regs.r[rcount++] = (DWORD)pvargResult; /* arg 0 is a pointer to the result */ break; case VT_HRESULT: WARN("invalid return type %u\n", vtReturn); return E_INVALIDARG; default: /* And all others are in 'r', 's', or 'd' registers or have no return value */ break; } if (pvInstance) { const FARPROC *vtable = *(FARPROC **)pvInstance; func = vtable[oVft/sizeof(void *)]; regs.r[rcount++] = (DWORD)pvInstance; /* the This pointer is always the first parameter */ } else func = (void *)oVft; /* maximum size for an argument is sizeof(VARIANT). Also allow for return pointer and stack alignment. */ args = heap_alloc( sizeof(VARIANT) * cActuals + sizeof(DWORD) * 4 ); for (i = 0; i < cActuals; i++) { VARIANT *arg = prgpvarg[i]; DWORD *pdwarg = (DWORD *)(arg); /* a reinterpret_cast of the variant, used for copying structures when they are split between registers and stack */ int ntemp; /* Used for counting words split between registers and stack */ switch (prgvt[i]) { case VT_EMPTY: break; case VT_R8: /* these must be 8-byte aligned, and put in 'd' regs or stack, as they are double-floats */ case VT_DATE: #ifndef __SOFTFP__ dcount = max( (scount + 1) / 2, dcount ); if (dcount < 8) { regs.sd.d[dcount++] = V_R8(arg); } else { argspos += (argspos % 2); /* align argspos to 8-bytes */ memcpy( &args[argspos], &V_R8(arg), sizeof(V_R8(arg)) ); argspos += sizeof(V_R8(arg)) / sizeof(DWORD); } break; #endif case VT_I8: /* these must be 8-byte aligned, and put in 'r' regs or stack, as they are long-longs */ case VT_UI8: case VT_CY: if (rcount < 3) { rcount += (rcount % 2); /* align rcount to 8-byte register pair */ memcpy( ®s.r[rcount], &V_UI8(arg), sizeof(V_UI8(arg)) ); rcount += sizeof(V_UI8(arg)) / sizeof(DWORD); } else { rcount = 4; /* Make sure we flag that all 'r' regs are full */ argspos += (argspos % 2); /* align argspos to 8-bytes */ memcpy( &args[argspos], &V_UI8(arg), sizeof(V_UI8(arg)) ); argspos += sizeof(V_UI8(arg)) / sizeof(DWORD); } break; case VT_DECIMAL: /* these structures are 8-byte aligned, and put in 'r' regs or stack, can be split between the two */ case VT_VARIANT: /* 8-byte align 'r' and/or stack: */ if (rcount < 3) rcount += (rcount % 2); else { rcount = 4; argspos += (argspos % 2); } ntemp = sizeof(*arg) / sizeof(DWORD); while (ntemp > 0) { if (rcount < 4) regs.r[rcount++] = *pdwarg++; else args[argspos++] = *pdwarg++; --ntemp; } break; case VT_BOOL: /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */ if (rcount < 4) regs.r[rcount++] = V_BOOL(arg); else args[argspos++] = V_BOOL(arg); break; case VT_R4: /* these must be 4-byte aligned, and put in 's' regs or stack, as they are single-floats */ #ifndef __SOFTFP__ if (!(scount % 2)) scount = max( scount, dcount * 2 ); if (scount < 16) regs.sd.s[scount++] = V_R4(arg); else args[argspos++] = V_UI4(arg); break; #endif default: if (rcount < 4) regs.r[rcount++] = V_UI4(arg); else args[argspos++] = V_UI4(arg); break; } TRACE("arg %u: type %s %s\n", i, debugstr_vt(prgvt[i]), debugstr_variant(arg)); } argspos += (argspos % 2); /* Make sure stack function alignment is 8-byte */ switch (vtReturn) { case VT_EMPTY: /* EMPTY = no return value */ case VT_DECIMAL: /* DECIMAL and VARIANT already have a pointer argument passed (see above) */ case VT_VARIANT: call_method( func, argspos, args, (DWORD*)®s ); break; case VT_R4: V_R4(pvargResult) = call_float_method( func, argspos, args, (DWORD*)®s ); break; case VT_R8: case VT_DATE: V_R8(pvargResult) = call_double_method( func, argspos, args, (DWORD*)®s ); break; case VT_I8: case VT_UI8: case VT_CY: V_UI8(pvargResult) = call_method( func, argspos, args, (DWORD*)®s ); break; default: V_UI4(pvargResult) = call_method( func, argspos, args, (DWORD*)®s ); break; } heap_free( args ); if (vtReturn != VT_VARIANT) V_VT(pvargResult) = vtReturn; TRACE("retval: %s\n", debugstr_variant(pvargResult)); return S_OK; #else FIXME( "(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d)): not implemented for this CPU\n", pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult)); return E_NOTIMPL; #endif } static inline BOOL func_restricted( const FUNCDESC *desc ) { return (desc->wFuncFlags & FUNCFLAG_FRESTRICTED) && (desc->memid >= 0); } #define INVBUF_ELEMENT_SIZE \ (sizeof(VARIANTARG) + sizeof(VARIANTARG) + sizeof(VARIANTARG *) + sizeof(VARTYPE)) #define INVBUF_GET_ARG_ARRAY(buffer, params) (buffer) #define INVBUF_GET_MISSING_ARG_ARRAY(buffer, params) \ ((VARIANTARG *)((char *)(buffer) + sizeof(VARIANTARG) * (params))) #define INVBUF_GET_ARG_PTR_ARRAY(buffer, params) \ ((VARIANTARG **)((char *)(buffer) + (sizeof(VARIANTARG) + sizeof(VARIANTARG)) * (params))) #define INVBUF_GET_ARG_TYPE_ARRAY(buffer, params) \ ((VARTYPE *)((char *)(buffer) + (sizeof(VARIANTARG) + sizeof(VARIANTARG) + sizeof(VARIANTARG *)) * (params))) #define INVBUF_ELEMENT_SIZE16 \ (sizeof(VARIANTARG16) + sizeof(VARIANTARG16) + sizeof(SEGPTR) + sizeof(VARTYPE)) #define INVBUF_GET_ARG_ARRAY16(buffer, params) (buffer) #define INVBUF_GET_MISSING_ARG_ARRAY16(buffer, params) \ ((VARIANTARG16 *)((char *)(buffer) + sizeof(VARIANTARG16) * (params))) #define INVBUF_GET_ARG_PTR_ARRAY16(buffer, params) \ ((/*VARIANTARG16 * */SEGPTR *)((char *)(buffer) + (sizeof(VARIANTARG16) + sizeof(VARIANTARG16)) * (params))) #define INVBUF_GET_ARG_TYPE_ARRAY16(buffer, params) \ ((VARTYPE *)((char *)(buffer) + (sizeof(VARIANTARG16) + sizeof(VARIANTARG16) + sizeof(VARIANTARG16 *)) * (params))) void map_bstr32_16(SEGPTR *a16, const BSTR *a32) { UINT len; int len16; if (*a32 == NULL) { *a16 = 0; return; } len = SysStringLen(*a32); len16 = WideCharToMultiByte(CP_ACP, 0, *a32, len, NULL, 0, NULL, NULL); *a16 = SysAllocStringLen16(NULL, len16); WideCharToMultiByte(CP_ACP, 0, *a32, len, MapSL(*a16), len16, NULL, NULL); ((char*)MapSL(*a16))[len16] = 0; } static HRESULT CDECL ITypeInfo_fnInvoke16( /* ITypeInfo2 * */SEGPTR spiface, /* VOID * */SEGPTR pIUnk, MEMBERID memid, UINT16 wFlags, /* DISPPARAMS * */ SEGPTR spDispParams, /* VARIANT * */ SEGPTR spVarResult, /* EXCEPINFO * */ SEGPTR spExcepInfo, /* UINT * */SEGPTR spArgErr) { ITypeInfo2 *iface = (ITypeInfo2*)get_interface32(spiface); DISPPARAMS16 *pDispParams = (DISPPARAMS16*)MapSL(spDispParams); ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); VARIANT16 *pVarResult = (VARIANT16*)MapSL(spVarResult); EXCEPINFO16 *pExcepInfo = (EXCEPINFO16*)MapSL(spExcepInfo); UINT16 *pArgErr = (UINT16*)MapSL(spArgErr); int i; unsigned int var_index; TYPEKIND type_kind; HRESULT hres; const TLBFuncDesc *pFuncInfo; UINT fdc; TRACE("(%p)(%p,id=%d,flags=0x%08x,%p,%p,%p,%p)\n", This,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr ); if( This->typeattr.wTypeFlags & TYPEFLAG_FRESTRICTED ) return DISP_E_MEMBERNOTFOUND; if (!pDispParams) { ERR("NULL pDispParams not allowed\n"); return E_INVALIDARG16; } dump_DispParms16(pDispParams); if (pDispParams->cNamedArgs > pDispParams->cArgs) { ERR("named argument array cannot be bigger than argument array (%d/%d)\n", pDispParams->cNamedArgs, pDispParams->cArgs); return E_INVALIDARG16; } /* we do this instead of using GetFuncDesc since it will return a fake * FUNCDESC for dispinterfaces and we want the real function description */ for (fdc = 0; fdc < This->typeattr.cFuncs; ++fdc){ pFuncInfo = &This->funcdescs[fdc]; if ((memid == pFuncInfo->funcdesc.memid) && (wFlags & pFuncInfo->funcdesc.invkind) && !func_restricted( &pFuncInfo->funcdesc )) break; } if (fdc < This->typeattr.cFuncs) { const FUNCDESC *func_desc = &pFuncInfo->funcdesc; if (TRACE_ON(ole)) { TRACE("invoking:\n"); dump_TLBFuncDescOne(pFuncInfo); } switch (func_desc->funckind) { case FUNC_PUREVIRTUAL: case FUNC_VIRTUAL: { void *buffer = heap_alloc_zero(INVBUF_ELEMENT_SIZE16 * func_desc->cParams); VARIANT16 varresult; VARIANT16 retval; /* pointer for storing byref retvals in */ VARIANTARG16 **prgpvarg = INVBUF_GET_ARG_PTR_ARRAY16(buffer, func_desc->cParams); VARIANTARG16 *rgvarg = INVBUF_GET_ARG_ARRAY16(buffer, func_desc->cParams); VARTYPE *rgvt = INVBUF_GET_ARG_TYPE_ARRAY16(buffer, func_desc->cParams); UINT16 cNamedArgs = pDispParams->cNamedArgs; DISPID *rgdispidNamedArgs = pDispParams->rgdispidNamedArgs; UINT16 vargs_converted=0; hres = S_OK; if (func_desc->invkind & (INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF)) { if (!cNamedArgs || (rgdispidNamedArgs[0] != DISPID_PROPERTYPUT)) { ERR("first named arg for property put invocation must be DISPID_PROPERTYPUT\n"); hres = DISP_E_PARAMNOTFOUND; goto func_fail; } } if (func_desc->cParamsOpt < 0 && cNamedArgs) { ERR("functions with the vararg attribute do not support named arguments\n"); hres = DISP_E_NONAMEDARGS; goto func_fail; } for (i = 0; i < func_desc->cParams; i++) { TYPEDESC *tdesc = &func_desc->lprgelemdescParam[i].tdesc; hres = hresult32_16(typedescvt_to_variantvt((ITypeInfo *)iface, tdesc, &rgvt[i])); if (FAILED(hres)) goto func_fail; } TRACE("changing args\n"); for (i = 0; i < func_desc->cParams; i++) { USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags; TYPEDESC *tdesc = &func_desc->lprgelemdescParam[i].tdesc; VARIANTARG16 *src_arg; if (wParamFlags & PARAMFLAG_FLCID) { VARIANTARG16 *arg; arg = prgpvarg[i] = &rgvarg[i]; V_VT(arg) = VT_I4; V_I4(arg) = This->pTypeLib->lcid; continue; } src_arg = NULL; if (cNamedArgs) { USHORT j; for (j = 0; j < cNamedArgs; j++) if (rgdispidNamedArgs[j] == i || (i == func_desc->cParams-1 && rgdispidNamedArgs[j] == DISPID_PROPERTYPUT)) { src_arg = &((VARIANTARG16*)MapSL(pDispParams->rgvarg))[j]; break; } } if (!src_arg && vargs_converted + cNamedArgs < pDispParams->cArgs) { src_arg = &((VARIANTARG16*)MapSL(pDispParams->rgvarg))[pDispParams->cArgs - 1 - vargs_converted]; vargs_converted++; } if (wParamFlags & PARAMFLAG_FRETVAL) { /* under most conditions the caller is not allowed to * pass in a dispparam arg in the index of what would be * the retval parameter. however, there is an exception * where the extra parameter is used in an extra * IDispatch::Invoke below */ if ((i < pDispParams->cArgs) && ((func_desc->cParams != 1) || !pVarResult || !(func_desc->invkind & INVOKE_PROPERTYGET))) { hres = DISP_E_BADPARAMCOUNT; break; } /* note: this check is placed so that if the caller passes * in a VARIANTARG for the retval we just ignore it, like * native does */ if (i == func_desc->cParams - 1) { VARIANTARG16 *arg; arg = prgpvarg[i] = &rgvarg[i]; memset(arg, 0, sizeof(*arg)); V_VT(arg) = rgvt[i]; memset(&retval, 0, sizeof(retval)); V_BYREF(arg) = MapLS(&retval); } else { ERR("[retval] parameter must be the last parameter of the method (%d/%d)\n", i, func_desc->cParams); hres = E_UNEXPECTED16; break; } } else if (src_arg) { TRACE("%s\n", debugstr_variant16(src_arg)); if(rgvt[i]!=V_VT(src_arg)) { if (rgvt[i] == VT_VARIANT) hres = VariantCopy16(&rgvarg[i], src_arg); else if (rgvt[i] == (VT_VARIANT | VT_BYREF)) { if (rgvt[i] == V_VT(src_arg)) V_VARIANTREF(&rgvarg[i]) = V_VARIANTREF(src_arg); else { VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams); if (wParamFlags & PARAMFLAG_FIN) hres = VariantCopy16(&missing_arg[i], src_arg); V_VARIANTREF(&rgvarg[i]) = &missing_arg[i]; } V_VT(&rgvarg[i]) = rgvt[i]; } else if ((rgvt[i] == (VT_VARIANT | VT_ARRAY) || rgvt[i] == (VT_VARIANT | VT_ARRAY | VT_BYREF)) && func_desc->cParamsOpt < 0) { SAFEARRAY16 *a; SEGPTR sega; SAFEARRAYBOUND16 bound; SEGPTR sv = 0; VARIANT16 *v; LONG j; bound.lLbound = 0; bound.cElements = pDispParams->cArgs-i; if (!(a = (SAFEARRAY16*)MapSL(sega = SafeArrayCreate16(VT_VARIANT, 1, &bound)))) { ERR("SafeArrayCreate failed\n"); break; } hres = SafeArrayAccessData16(a, (LPVOID)&sv); v = (VARIANT16*)MapSL(sv); if (hres != S_OK) { ERR("SafeArrayAccessData failed with %x\n", hres); SafeArrayDestroy16(a); break; } for (j = 0; j < bound.cElements; j++) VariantCopy16(&v[j], &((VARIANTARG16*)MapSL(pDispParams->rgvarg))[pDispParams->cArgs - 1 - i - j]); hres = SafeArrayUnaccessData16(a); if (hres != S_OK) { ERR("SafeArrayUnaccessData failed with %x\n", hres); SafeArrayDestroy16(a); break; } if (rgvt[i] & VT_BYREF) V_BYREF(&rgvarg[i]) = MapLS(&sega); else V_ARRAY(&rgvarg[i]) = sega; V_VT(&rgvarg[i]) = rgvt[i]; } else if ((rgvt[i] & VT_BYREF) && !V_ISBYREF(src_arg)) { VARIANTARG16 *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY16(buffer, func_desc->cParams); if (wParamFlags & PARAMFLAG_FIN) hres = VariantChangeType16(&missing_arg[i], src_arg, 0, rgvt[i] & ~VT_BYREF); else V_VT(&missing_arg[i]) = rgvt[i] & ~VT_BYREF; V_BYREF(&rgvarg[i]) = &V_NONE(&missing_arg[i]); V_VT(&rgvarg[i]) = rgvt[i]; } else if ((rgvt[i] & VT_BYREF) && (rgvt[i] == V_VT(src_arg))) { V_BYREF(&rgvarg[i]) = V_BYREF(src_arg); V_VT(&rgvarg[i]) = rgvt[i]; } else { /* FIXME: this doesn't work for VT_BYREF arguments if * they are not the same type as in the paramdesc */ V_VT(&rgvarg[i]) = V_VT(src_arg); hres = VariantChangeType16(&rgvarg[i], src_arg, 0, rgvt[i]); V_VT(&rgvarg[i]) = rgvt[i]; } if (FAILED(hres)) { ERR("failed to convert param %d to %s from %s\n", i, debugstr_vt(rgvt[i]), debugstr_variant(src_arg)); break; } prgpvarg[i] = &rgvarg[i]; } else { prgpvarg[i] = src_arg; } if((tdesc->vt == VT_USERDEFINED || (tdesc->vt == VT_PTR && tdesc->u.lptdesc->vt == VT_USERDEFINED)) && (V_VT(prgpvarg[i]) == VT_DISPATCH || V_VT(prgpvarg[i]) == VT_UNKNOWN) && V_UNKNOWN(prgpvarg[i])) { SEGPTR userdefined_iface; GUID guid; hres = hresult32_16(get_iface_guid((ITypeInfo*)iface, tdesc->vt == VT_PTR ? tdesc->u.lptdesc : tdesc, &guid)); if(FAILED(hres)) break; hres = IUnknown16_QueryInterface(V_UNKNOWN(prgpvarg[i]), MapLS(&guid), MapLS((void**)&userdefined_iface)); if(FAILED(hres)) { ERR("argument does not support %s interface\n", debugstr_guid(&guid)); break; } IUnknown16_Release(V_UNKNOWN(prgpvarg[i])); V_UNKNOWN(prgpvarg[i]) = userdefined_iface; } } else if (wParamFlags & PARAMFLAG_FOPT) { VARIANTARG16 *arg; arg = prgpvarg[i] = &rgvarg[i]; if (wParamFlags & PARAMFLAG_FHASDEFAULT) { FIXME("wParamFlags & PARAMFLAG_FHASDEFAULT\n"); /* hres = VariantCopy(arg, &func_desc->lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue); */ if (FAILED(hres)) break; } else { VARIANTARG16 *missing_arg; /* if the function wants a pointer to a variant then * set that up, otherwise just pass the VT_ERROR in * the argument by value */ if (rgvt[i] & VT_BYREF) { missing_arg = INVBUF_GET_MISSING_ARG_ARRAY16(buffer, func_desc->cParams) + i; V_VT(arg) = VT_VARIANT | VT_BYREF; V_VARIANTREF(arg) = MapLS(missing_arg); } else missing_arg = arg; V_VT(missing_arg) = VT_ERROR; V_ERROR(missing_arg) = DISP_E_PARAMNOTFOUND; } } else { hres = DISP_E_BADPARAMCOUNT; break; } } if (FAILED(hres)) goto func_fail; /* FIXME: we don't free changed types here */ /* VT_VOID is a special case for return types, so it is not * handled in the general function */ if (func_desc->elemdescFunc.tdesc.vt == VT_VOID) V_VT(&varresult) = VT_EMPTY; else { V_VT(&varresult) = 0; hres = hresult32_16(typedescvt_to_variantvt((ITypeInfo *)iface, &func_desc->elemdescFunc.tdesc, &V_VT(&varresult))); if (FAILED(hres)) goto func_fail; /* FIXME: we don't free changed types here */ } hres = DispCallFunc16(pIUnk, func_desc->oVft & 0xFFFC, func_desc->callconv, V_VT(&varresult), func_desc->cParams, rgvt, prgpvarg, &varresult); vargs_converted = 0; for (i = 0; i < func_desc->cParams; i++) { USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags; VARIANTARG16 *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY16(buffer, func_desc->cParams); if (wParamFlags & PARAMFLAG_FLCID) continue; else if (wParamFlags & PARAMFLAG_FRETVAL) { TRACE("[retval] value: %s\n", debugstr_variant16(prgpvarg[i])); if (pVarResult) { VariantInit16(pVarResult); /* deref return value */ hres = VariantCopyInd16(pVarResult, prgpvarg[i]); } HRESULT VARIANT_ClearInd(VARIANTARG16 *pVarg); VARIANT_ClearInd(prgpvarg[i]); } else if (vargs_converted < pDispParams->cArgs) { VARIANTARG16 *arg = &((VARIANTARG16*)MapSL(pDispParams->rgvarg))[pDispParams->cArgs - 1 - vargs_converted]; if (wParamFlags & PARAMFLAG_FOUT) { if ((rgvt[i] & VT_BYREF) && !(V_VT(arg) & VT_BYREF)) { hres = VariantChangeType(arg, &rgvarg[i], 0, V_VT(arg)); if (FAILED(hres)) { ERR("failed to convert param %d to vt %d\n", i, V_VT(&((VARIANTARG16*)MapSL(pDispParams->rgvarg))[pDispParams->cArgs - 1 - vargs_converted])); break; } } } else if (V_VT(prgpvarg[i]) == (VT_VARIANT | VT_ARRAY) && func_desc->cParamsOpt < 0 && i == func_desc->cParams-1) { SAFEARRAY16 *a = (SAFEARRAY16*)MapSL(V_ARRAY(prgpvarg[i])); LONG j, ubound; SEGPTR sv = 0; VARIANT16 *v; hres = SafeArrayGetUBound16(a, 1, &ubound); if (hres != S_OK) { ERR("SafeArrayGetUBound failed with %x\n", hres); break; } hres = SafeArrayAccessData16(a, (LPVOID)&sv); if (hres != S_OK) { ERR("SafeArrayAccessData failed with %x\n", hres); break; } v = (VARIANT16*)MapSL(sv); for (j = 0; j <= ubound; j++) VariantClear16(&v[j]); hres = SafeArrayUnaccessData16(a); if (hres != S_OK) { ERR("SafeArrayUnaccessData failed with %x\n", hres); break; } } VariantClear16(&rgvarg[i]); vargs_converted++; } else if (wParamFlags & PARAMFLAG_FOPT) { if (wParamFlags & PARAMFLAG_FHASDEFAULT) VariantClear16(&rgvarg[i]); } VariantClear16(&missing_arg[i]); } if ((V_VT(&varresult) == VT_ERROR) && FAILED(V_ERROR(&varresult))) { WARN("invoked function failed with error 0x%08x\n", V_ERROR(&varresult)); hres = DISP_E_EXCEPTION; if (pExcepInfo) { IErrorInfo *pErrorInfo; pExcepInfo->scode = V_ERROR(&varresult); if (GetErrorInfo(0, &pErrorInfo) == S_OK) { EXCEPINFO excepinfo32 = { 0 }; IErrorInfo_GetDescription(pErrorInfo, &excepinfo32.bstrDescription); IErrorInfo_GetHelpFile(pErrorInfo, &excepinfo32.bstrHelpFile); IErrorInfo_GetSource(pErrorInfo, &excepinfo32.bstrSource); IErrorInfo_GetHelpContext(pErrorInfo, &pExcepInfo->dwHelpContext); map_bstr32_16(&pExcepInfo->bstrDescription, &excepinfo32.bstrDescription); map_bstr32_16(&pExcepInfo->bstrHelpFile, &excepinfo32.bstrHelpFile); map_bstr32_16(&pExcepInfo->bstrSource, &excepinfo32.bstrSource); IErrorInfo_Release(pErrorInfo); } } } if (V_VT(&varresult) != VT_ERROR) { TRACE("varresult value: %s\n", debugstr_variant16(&varresult)); if (pVarResult) { VariantClear16(pVarResult); *pVarResult = varresult; } else VariantClear16(&varresult); } if (SUCCEEDED(hres) && pVarResult && (func_desc->cParams == 1) && (func_desc->invkind & INVOKE_PROPERTYGET) && (func_desc->lprgelemdescParam[0].u.paramdesc.wParamFlags & PARAMFLAG_FRETVAL) && (pDispParams->cArgs != 0)) { if (V_VT(pVarResult) == VT_DISPATCH) { SEGPTR pDispatch = V_DISPATCH(pVarResult); /* Note: not VariantClear; we still need the dispatch * pointer to be valid */ VariantInit(pVarResult); hres = IDispatch16_Invoke(pDispatch, DISPID_VALUE, MapLS(&IID_NULL), GetSystemDefaultLCID(), wFlags, spDispParams, spVarResult, spExcepInfo, spArgErr); IDispatch16_Release(pDispatch); } else { VariantClear16(pVarResult); hres = DISP_E_NOTACOLLECTION; } } func_fail: heap_free(buffer); break; } case FUNC_DISPATCH: { SEGPTR disp; hres = IUnknown16_QueryInterface(pIUnk,MapLS(&IID_IDispatch),MapLS((LPVOID)&disp)); if (SUCCEEDED(hres)) { FIXME("Calling Invoke in IDispatch iface. untested!\n"); hres = IDispatch16_Invoke( disp,memid,MapLS(&IID_NULL),LOCALE_USER_DEFAULT,wFlags,spDispParams, spVarResult,spExcepInfo,spArgErr ); if (FAILED(hres)) FIXME("IDispatch::Invoke failed with %08x. (Could be not a real error?)\n", hres); IDispatch16_Release(disp); } else FIXME("FUNC_DISPATCH used on object without IDispatch iface?\n"); break; } default: FIXME("Unknown function invocation type %d\n", func_desc->funckind); hres = E_FAIL16; break; } TRACE("-- 0x%08x\n", hres); return hres; } else if(SUCCEEDED(hres = ITypeInfo2_GetVarIndexOfMemId(iface, memid, &var_index))) { VARDESC *var_desc; hres = ITypeInfo2_GetVarDesc(iface, var_index, &var_desc); if(FAILED(hres)) return hresult32_16(hres); FIXME("varseek: Found memid, but variable-based invoking not supported\n"); dump_VARDESC(var_desc); ITypeInfo2_ReleaseVarDesc(iface, var_desc); return E_NOTIMPL16; } /* not found, look for it in inherited interfaces */ ITypeInfo2_GetTypeKind(iface, &type_kind); if(type_kind == TKIND_INTERFACE || type_kind == TKIND_DISPATCH) { if(This->impltypes) { /* recursive search */ ITypeInfo *pTInfo; hres = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo); if(SUCCEEDED(hres)){ hres = ITypeInfo16_Invoke(iface32_16(&IID_ITypeInfo, pTInfo),pIUnk,memid,wFlags,spDispParams,spVarResult,spExcepInfo,spArgErr); ITypeInfo_Release(pTInfo); return hres; } WARN("Could not search inherited interface!\n"); } } WARN("did not find member id %d, flags 0x%x!\n", memid, wFlags); return DISP_E_MEMBERNOTFOUND; } static HRESULT WINAPI ITypeInfo_fnInvoke( ITypeInfo2 *iface, VOID *pIUnk, MEMBERID memid, UINT16 wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *pArgErr) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); int i; unsigned int var_index; TYPEKIND type_kind; HRESULT hres; const TLBFuncDesc *pFuncInfo; UINT fdc; TRACE("(%p)(%p,id=%d,flags=0x%08x,%p,%p,%p,%p)\n", This,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr ); if( This->typeattr.wTypeFlags & TYPEFLAG_FRESTRICTED ) return DISP_E_MEMBERNOTFOUND; if (!pDispParams) { ERR("NULL pDispParams not allowed\n"); return E_INVALIDARG; } dump_DispParms(pDispParams); if (pDispParams->cNamedArgs > pDispParams->cArgs) { ERR("named argument array cannot be bigger than argument array (%d/%d)\n", pDispParams->cNamedArgs, pDispParams->cArgs); return E_INVALIDARG; } /* we do this instead of using GetFuncDesc since it will return a fake * FUNCDESC for dispinterfaces and we want the real function description */ for (fdc = 0; fdc < This->typeattr.cFuncs; ++fdc){ pFuncInfo = &This->funcdescs[fdc]; if ((memid == pFuncInfo->funcdesc.memid) && (wFlags & pFuncInfo->funcdesc.invkind) && !func_restricted( &pFuncInfo->funcdesc )) break; } if (fdc < This->typeattr.cFuncs) { const FUNCDESC *func_desc = &pFuncInfo->funcdesc; if (TRACE_ON(ole)) { TRACE("invoking:\n"); dump_TLBFuncDescOne(pFuncInfo); } switch (func_desc->funckind) { case FUNC_PUREVIRTUAL: case FUNC_VIRTUAL: { void *buffer = heap_alloc_zero(INVBUF_ELEMENT_SIZE * func_desc->cParams); VARIANT varresult; VARIANT retval; /* pointer for storing byref retvals in */ VARIANTARG **prgpvarg = INVBUF_GET_ARG_PTR_ARRAY(buffer, func_desc->cParams); VARIANTARG *rgvarg = INVBUF_GET_ARG_ARRAY(buffer, func_desc->cParams); VARTYPE *rgvt = INVBUF_GET_ARG_TYPE_ARRAY(buffer, func_desc->cParams); UINT cNamedArgs = pDispParams->cNamedArgs; DISPID *rgdispidNamedArgs = pDispParams->rgdispidNamedArgs; UINT vargs_converted=0; hres = S_OK; if (func_desc->invkind & (INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF)) { if (!cNamedArgs || (rgdispidNamedArgs[0] != DISPID_PROPERTYPUT)) { ERR("first named arg for property put invocation must be DISPID_PROPERTYPUT\n"); hres = DISP_E_PARAMNOTFOUND; goto func_fail; } } if (func_desc->cParamsOpt < 0 && cNamedArgs) { ERR("functions with the vararg attribute do not support named arguments\n"); hres = DISP_E_NONAMEDARGS; goto func_fail; } for (i = 0; i < func_desc->cParams; i++) { TYPEDESC *tdesc = &func_desc->lprgelemdescParam[i].tdesc; hres = typedescvt_to_variantvt((ITypeInfo *)iface, tdesc, &rgvt[i]); if (FAILED(hres)) goto func_fail; } TRACE("changing args\n"); for (i = 0; i < func_desc->cParams; i++) { USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags; TYPEDESC *tdesc = &func_desc->lprgelemdescParam[i].tdesc; VARIANTARG *src_arg; if (wParamFlags & PARAMFLAG_FLCID) { VARIANTARG *arg; arg = prgpvarg[i] = &rgvarg[i]; V_VT(arg) = VT_I4; V_I4(arg) = This->pTypeLib->lcid; continue; } src_arg = NULL; if (cNamedArgs) { USHORT j; for (j = 0; j < cNamedArgs; j++) if (rgdispidNamedArgs[j] == i || (i == func_desc->cParams-1 && rgdispidNamedArgs[j] == DISPID_PROPERTYPUT)) { src_arg = &pDispParams->rgvarg[j]; break; } } if (!src_arg && vargs_converted + cNamedArgs < pDispParams->cArgs) { src_arg = &pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted]; vargs_converted++; } if (wParamFlags & PARAMFLAG_FRETVAL) { /* under most conditions the caller is not allowed to * pass in a dispparam arg in the index of what would be * the retval parameter. however, there is an exception * where the extra parameter is used in an extra * IDispatch::Invoke below */ if ((i < pDispParams->cArgs) && ((func_desc->cParams != 1) || !pVarResult || !(func_desc->invkind & INVOKE_PROPERTYGET))) { hres = DISP_E_BADPARAMCOUNT; break; } /* note: this check is placed so that if the caller passes * in a VARIANTARG for the retval we just ignore it, like * native does */ if (i == func_desc->cParams - 1) { VARIANTARG *arg; arg = prgpvarg[i] = &rgvarg[i]; memset(arg, 0, sizeof(*arg)); V_VT(arg) = rgvt[i]; memset(&retval, 0, sizeof(retval)); V_BYREF(arg) = &retval; } else { ERR("[retval] parameter must be the last parameter of the method (%d/%d)\n", i, func_desc->cParams); hres = E_UNEXPECTED; break; } } else if (src_arg) { TRACE("%s\n", debugstr_variant(src_arg)); if(rgvt[i]!=V_VT(src_arg)) { if (rgvt[i] == VT_VARIANT) hres = VariantCopy(&rgvarg[i], src_arg); else if (rgvt[i] == (VT_VARIANT | VT_BYREF)) { if (rgvt[i] == V_VT(src_arg)) V_VARIANTREF(&rgvarg[i]) = V_VARIANTREF(src_arg); else { VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams); if (wParamFlags & PARAMFLAG_FIN) hres = VariantCopy(&missing_arg[i], src_arg); V_VARIANTREF(&rgvarg[i]) = &missing_arg[i]; } V_VT(&rgvarg[i]) = rgvt[i]; } else if ((rgvt[i] == (VT_VARIANT | VT_ARRAY) || rgvt[i] == (VT_VARIANT | VT_ARRAY | VT_BYREF)) && func_desc->cParamsOpt < 0) { SAFEARRAY *a; SAFEARRAYBOUND bound; VARIANT *v; LONG j; bound.lLbound = 0; bound.cElements = pDispParams->cArgs-i; if (!(a = SafeArrayCreate(VT_VARIANT, 1, &bound))) { ERR("SafeArrayCreate failed\n"); break; } hres = SafeArrayAccessData(a, (LPVOID)&v); if (hres != S_OK) { ERR("SafeArrayAccessData failed with %x\n", hres); SafeArrayDestroy(a); break; } for (j = 0; j < bound.cElements; j++) VariantCopy(&v[j], &pDispParams->rgvarg[pDispParams->cArgs - 1 - i - j]); hres = SafeArrayUnaccessData(a); if (hres != S_OK) { ERR("SafeArrayUnaccessData failed with %x\n", hres); SafeArrayDestroy(a); break; } if (rgvt[i] & VT_BYREF) V_BYREF(&rgvarg[i]) = &a; else V_ARRAY(&rgvarg[i]) = a; V_VT(&rgvarg[i]) = rgvt[i]; } else if ((rgvt[i] & VT_BYREF) && !V_ISBYREF(src_arg)) { VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams); if (wParamFlags & PARAMFLAG_FIN) hres = VariantChangeType(&missing_arg[i], src_arg, 0, rgvt[i] & ~VT_BYREF); else V_VT(&missing_arg[i]) = rgvt[i] & ~VT_BYREF; V_BYREF(&rgvarg[i]) = &V_NONE(&missing_arg[i]); V_VT(&rgvarg[i]) = rgvt[i]; } else if ((rgvt[i] & VT_BYREF) && (rgvt[i] == V_VT(src_arg))) { V_BYREF(&rgvarg[i]) = V_BYREF(src_arg); V_VT(&rgvarg[i]) = rgvt[i]; } else { /* FIXME: this doesn't work for VT_BYREF arguments if * they are not the same type as in the paramdesc */ V_VT(&rgvarg[i]) = V_VT(src_arg); hres = VariantChangeType(&rgvarg[i], src_arg, 0, rgvt[i]); V_VT(&rgvarg[i]) = rgvt[i]; } if (FAILED(hres)) { ERR("failed to convert param %d to %s from %s\n", i, debugstr_vt(rgvt[i]), debugstr_variant(src_arg)); break; } prgpvarg[i] = &rgvarg[i]; } else { prgpvarg[i] = src_arg; } if((tdesc->vt == VT_USERDEFINED || (tdesc->vt == VT_PTR && tdesc->u.lptdesc->vt == VT_USERDEFINED)) && (V_VT(prgpvarg[i]) == VT_DISPATCH || V_VT(prgpvarg[i]) == VT_UNKNOWN) && V_UNKNOWN(prgpvarg[i])) { IUnknown *userdefined_iface; GUID guid; hres = get_iface_guid((ITypeInfo*)iface, tdesc->vt == VT_PTR ? tdesc->u.lptdesc : tdesc, &guid); if(FAILED(hres)) break; hres = IUnknown_QueryInterface(V_UNKNOWN(prgpvarg[i]), &guid, (void**)&userdefined_iface); if(FAILED(hres)) { ERR("argument does not support %s interface\n", debugstr_guid(&guid)); break; } IUnknown_Release(V_UNKNOWN(prgpvarg[i])); V_UNKNOWN(prgpvarg[i]) = userdefined_iface; } } else if (wParamFlags & PARAMFLAG_FOPT) { VARIANTARG *arg; arg = prgpvarg[i] = &rgvarg[i]; if (wParamFlags & PARAMFLAG_FHASDEFAULT) { hres = VariantCopy(arg, &func_desc->lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue); if (FAILED(hres)) break; } else { VARIANTARG *missing_arg; /* if the function wants a pointer to a variant then * set that up, otherwise just pass the VT_ERROR in * the argument by value */ if (rgvt[i] & VT_BYREF) { missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams) + i; V_VT(arg) = VT_VARIANT | VT_BYREF; V_VARIANTREF(arg) = missing_arg; } else missing_arg = arg; V_VT(missing_arg) = VT_ERROR; V_ERROR(missing_arg) = DISP_E_PARAMNOTFOUND; } } else { hres = DISP_E_BADPARAMCOUNT; break; } } if (FAILED(hres)) goto func_fail; /* FIXME: we don't free changed types here */ /* VT_VOID is a special case for return types, so it is not * handled in the general function */ if (func_desc->elemdescFunc.tdesc.vt == VT_VOID) V_VT(&varresult) = VT_EMPTY; else { V_VT(&varresult) = 0; hres = typedescvt_to_variantvt((ITypeInfo *)iface, &func_desc->elemdescFunc.tdesc, &V_VT(&varresult)); if (FAILED(hres)) goto func_fail; /* FIXME: we don't free changed types here */ } hres = DispCallFunc(pIUnk, func_desc->oVft & 0xFFFC, func_desc->callconv, V_VT(&varresult), func_desc->cParams, rgvt, prgpvarg, &varresult); vargs_converted = 0; for (i = 0; i < func_desc->cParams; i++) { USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags; VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams); if (wParamFlags & PARAMFLAG_FLCID) continue; else if (wParamFlags & PARAMFLAG_FRETVAL) { TRACE("[retval] value: %s\n", debugstr_variant(prgpvarg[i])); if (pVarResult) { VariantInit(pVarResult); /* deref return value */ hres = VariantCopyInd(pVarResult, prgpvarg[i]); } /* FIXME */ HRESULT VARIANT_ClearInd(VARIANTARG16 *pVarg); VARIANT_ClearInd((VARIANTARG16*)prgpvarg[i]); } else if (vargs_converted < pDispParams->cArgs) { VARIANTARG *arg = &pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted]; if (wParamFlags & PARAMFLAG_FOUT) { if ((rgvt[i] & VT_BYREF) && !(V_VT(arg) & VT_BYREF)) { hres = VariantChangeType(arg, &rgvarg[i], 0, V_VT(arg)); if (FAILED(hres)) { ERR("failed to convert param %d to vt %d\n", i, V_VT(&pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted])); break; } } } else if (V_VT(prgpvarg[i]) == (VT_VARIANT | VT_ARRAY) && func_desc->cParamsOpt < 0 && i == func_desc->cParams-1) { SAFEARRAY *a = V_ARRAY(prgpvarg[i]); LONG j, ubound; VARIANT *v; hres = SafeArrayGetUBound(a, 1, &ubound); if (hres != S_OK) { ERR("SafeArrayGetUBound failed with %x\n", hres); break; } hres = SafeArrayAccessData(a, (LPVOID)&v); if (hres != S_OK) { ERR("SafeArrayAccessData failed with %x\n", hres); break; } for (j = 0; j <= ubound; j++) VariantClear(&v[j]); hres = SafeArrayUnaccessData(a); if (hres != S_OK) { ERR("SafeArrayUnaccessData failed with %x\n", hres); break; } } VariantClear(&rgvarg[i]); vargs_converted++; } else if (wParamFlags & PARAMFLAG_FOPT) { if (wParamFlags & PARAMFLAG_FHASDEFAULT) VariantClear(&rgvarg[i]); } VariantClear(&missing_arg[i]); } if ((V_VT(&varresult) == VT_ERROR) && FAILED(V_ERROR(&varresult))) { WARN("invoked function failed with error 0x%08x\n", V_ERROR(&varresult)); hres = DISP_E_EXCEPTION; if (pExcepInfo) { IErrorInfo *pErrorInfo; pExcepInfo->scode = V_ERROR(&varresult); if (GetErrorInfo(0, &pErrorInfo) == S_OK) { IErrorInfo_GetDescription(pErrorInfo, &pExcepInfo->bstrDescription); IErrorInfo_GetHelpFile(pErrorInfo, &pExcepInfo->bstrHelpFile); IErrorInfo_GetSource(pErrorInfo, &pExcepInfo->bstrSource); IErrorInfo_GetHelpContext(pErrorInfo, &pExcepInfo->dwHelpContext); IErrorInfo_Release(pErrorInfo); } } } if (V_VT(&varresult) != VT_ERROR) { TRACE("varresult value: %s\n", debugstr_variant(&varresult)); if (pVarResult) { VariantClear(pVarResult); *pVarResult = varresult; } else VariantClear(&varresult); } if (SUCCEEDED(hres) && pVarResult && (func_desc->cParams == 1) && (func_desc->invkind & INVOKE_PROPERTYGET) && (func_desc->lprgelemdescParam[0].u.paramdesc.wParamFlags & PARAMFLAG_FRETVAL) && (pDispParams->cArgs != 0)) { if (V_VT(pVarResult) == VT_DISPATCH) { IDispatch *pDispatch = V_DISPATCH(pVarResult); /* Note: not VariantClear; we still need the dispatch * pointer to be valid */ VariantInit(pVarResult); hres = IDispatch_Invoke(pDispatch, DISPID_VALUE, &IID_NULL, GetSystemDefaultLCID(), wFlags, pDispParams, pVarResult, pExcepInfo, pArgErr); IDispatch_Release(pDispatch); } else { VariantClear(pVarResult); hres = DISP_E_NOTACOLLECTION; } } func_fail: heap_free(buffer); break; } case FUNC_DISPATCH: { IDispatch *disp; hres = IUnknown_QueryInterface((LPUNKNOWN)pIUnk,&IID_IDispatch,(LPVOID*)&disp); if (SUCCEEDED(hres)) { FIXME("Calling Invoke in IDispatch iface. untested!\n"); hres = IDispatch_Invoke( disp,memid,&IID_NULL,LOCALE_USER_DEFAULT,wFlags,pDispParams, pVarResult,pExcepInfo,pArgErr ); if (FAILED(hres)) FIXME("IDispatch::Invoke failed with %08x. (Could be not a real error?)\n", hres); IDispatch_Release(disp); } else FIXME("FUNC_DISPATCH used on object without IDispatch iface?\n"); break; } default: FIXME("Unknown function invocation type %d\n", func_desc->funckind); hres = E_FAIL; break; } TRACE("-- 0x%08x\n", hres); return hres; } else if(SUCCEEDED(hres = ITypeInfo2_GetVarIndexOfMemId(iface, memid, &var_index))) { VARDESC *var_desc; hres = ITypeInfo2_GetVarDesc(iface, var_index, &var_desc); if(FAILED(hres)) return hres; FIXME("varseek: Found memid, but variable-based invoking not supported\n"); dump_VARDESC(var_desc); ITypeInfo2_ReleaseVarDesc(iface, var_desc); return E_NOTIMPL; } /* not found, look for it in inherited interfaces */ ITypeInfo2_GetTypeKind(iface, &type_kind); if(type_kind == TKIND_INTERFACE || type_kind == TKIND_DISPATCH) { if(This->impltypes) { /* recursive search */ ITypeInfo *pTInfo; hres = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo); if(SUCCEEDED(hres)){ hres = ITypeInfo_Invoke(pTInfo,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr); ITypeInfo_Release(pTInfo); return hres; } WARN("Could not search inherited interface!\n"); } } WARN("did not find member id %d, flags 0x%x!\n", memid, wFlags); return DISP_E_MEMBERNOTFOUND; } /* ITypeInfo::GetDocumentation * * Retrieves the documentation string, the complete Help file name and path, * and the context ID for the Help topic for a specified type description. * * (Can be tested by the Visual Basic Editor in Word for instance.) */ static HRESULT WINAPI ITypeInfo_fnGetDocumentation( ITypeInfo2 *iface, MEMBERID memid, BSTR *pBstrName, BSTR *pBstrDocString, DWORD *pdwHelpContext, BSTR *pBstrHelpFile) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); const TLBFuncDesc *pFDesc; const TLBVarDesc *pVDesc; TRACE("(%p) memid %d Name(%p) DocString(%p)" " HelpContext(%p) HelpFile(%p)\n", This, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile); if(memid==MEMBERID_NIL){ /* documentation for the typeinfo */ if(pBstrName) *pBstrName=SysAllocString(TLB_get_bstr(This->Name)); if(pBstrDocString) *pBstrDocString=SysAllocString(TLB_get_bstr(This->DocString)); if(pdwHelpContext) *pdwHelpContext=This->dwHelpContext; if(pBstrHelpFile) *pBstrHelpFile=SysAllocString(TLB_get_bstr(This->pTypeLib->HelpFile)); return S_OK; }else {/* for a member */ pFDesc = TLB_get_funcdesc_by_memberid(This->funcdescs, This->typeattr.cFuncs, memid); if(pFDesc){ if(pBstrName) *pBstrName = SysAllocString(TLB_get_bstr(pFDesc->Name)); if(pBstrDocString) *pBstrDocString=SysAllocString(TLB_get_bstr(pFDesc->HelpString)); if(pdwHelpContext) *pdwHelpContext=pFDesc->helpcontext; if(pBstrHelpFile) { if(pFDesc->HelpFile) *pBstrHelpFile = SysAllocString(TLB_get_bstr(pFDesc->HelpFile)); else *pBstrHelpFile = SysAllocString(TLB_get_bstr(This->pTypeLib->HelpFile)); } return S_OK; } pVDesc = TLB_get_vardesc_by_memberid(This->vardescs, This->typeattr.cVars, memid); if(pVDesc){ if(pBstrName) *pBstrName = SysAllocString(TLB_get_bstr(pVDesc->Name)); if(pBstrDocString) *pBstrDocString=SysAllocString(TLB_get_bstr(pVDesc->HelpString)); if(pdwHelpContext) *pdwHelpContext=pVDesc->HelpContext; if(pBstrHelpFile) { if(pVDesc->HelpFile) *pBstrHelpFile = SysAllocString(TLB_get_bstr(pVDesc->HelpFile)); else *pBstrHelpFile = SysAllocString(TLB_get_bstr(This->pTypeLib->HelpFile)); } return S_OK; } } if(This->impltypes && (This->typeattr.typekind == TKIND_INTERFACE || This->typeattr.typekind == TKIND_DISPATCH)) { /* recursive search */ ITypeInfo *pTInfo; HRESULT result; result = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo); if(SUCCEEDED(result)) { result = ITypeInfo_GetDocumentation(pTInfo, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile); ITypeInfo_Release(pTInfo); return result; } WARN("Could not search inherited interface!\n"); } WARN("member %d not found\n", memid); return TYPE_E_ELEMENTNOTFOUND; } /* ITypeInfo::GetDllEntry * * Retrieves a description or specification of an entry point for a function * in a DLL. */ static HRESULT WINAPI ITypeInfo_fnGetDllEntry( ITypeInfo2 *iface, MEMBERID memid, INVOKEKIND invKind, BSTR *pBstrDllName, BSTR *pBstrName, WORD *pwOrdinal) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); const TLBFuncDesc *pFDesc; TRACE("(%p)->(memid %x, %d, %p, %p, %p)\n", This, memid, invKind, pBstrDllName, pBstrName, pwOrdinal); if (pBstrDllName) *pBstrDllName = NULL; if (pBstrName) *pBstrName = NULL; if (pwOrdinal) *pwOrdinal = 0; if (This->typeattr.typekind != TKIND_MODULE) return TYPE_E_BADMODULEKIND; pFDesc = TLB_get_funcdesc_by_memberid_and_invkind(This->funcdescs, This->typeattr.cFuncs, memid, invKind); if(pFDesc){ dump_TypeInfo(This); if (TRACE_ON(ole)) dump_TLBFuncDescOne(pFDesc); if (pBstrDllName) *pBstrDllName = SysAllocString(TLB_get_bstr(This->DllName)); if (!IS_INTRESOURCE(pFDesc->Entry) && (pFDesc->Entry != (void*)-1)) { if (pBstrName) *pBstrName = SysAllocString(TLB_get_bstr(pFDesc->Entry)); if (0) { if (pwOrdinal) *pwOrdinal = -1; } return S_OK; } if (pBstrName) *pBstrName = NULL; if (pwOrdinal) *pwOrdinal = LOWORD(pFDesc->Entry); return S_OK; } return TYPE_E_ELEMENTNOTFOUND; } /* internal function to make the inherited interfaces' methods appear * part of the interface */ static HRESULT ITypeInfoImpl_GetDispatchRefTypeInfo( ITypeInfo *iface, HREFTYPE *hRefType, ITypeInfo **ppTInfo) { ITypeInfoImpl *This = impl_from_ITypeInfo(iface); HRESULT hr; TRACE("%p, 0x%x\n", iface, *hRefType); if (This->impltypes && (*hRefType & DISPATCH_HREF_MASK)) { ITypeInfo *pSubTypeInfo; hr = ITypeInfo_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pSubTypeInfo); if (FAILED(hr)) return hr; hr = ITypeInfoImpl_GetDispatchRefTypeInfo(pSubTypeInfo, hRefType, ppTInfo); ITypeInfo_Release(pSubTypeInfo); if (SUCCEEDED(hr)) return hr; } *hRefType -= DISPATCH_HREF_OFFSET; if (!(*hRefType & DISPATCH_HREF_MASK)) return ITypeInfo_GetRefTypeInfo(iface, *hRefType, ppTInfo); else return E_FAIL; } struct search_res_tlb_params { const GUID *guid; ITypeLib *pTLib; }; static BOOL CALLBACK search_res_tlb(HMODULE hModule, LPCWSTR lpszType, LPWSTR lpszName, LONG_PTR lParam) { struct search_res_tlb_params *params = (LPVOID)lParam; static const WCHAR formatW[] = {'\\','%','d',0}; WCHAR szPath[MAX_PATH+1]; ITypeLib *pTLib = NULL; HRESULT ret; DWORD len; if (IS_INTRESOURCE(lpszName) == FALSE) return TRUE; if (!(len = GetModuleFileNameW(hModule, szPath, MAX_PATH))) return TRUE; if (snprintfW(szPath + len, ARRAY_SIZE(szPath) - len, formatW, LOWORD(lpszName)) < 0) return TRUE; ret = LoadTypeLibEx16Impl(szPath, REGKIND_NONE, &pTLib); if (SUCCEEDED(ret)) { ITypeLibImpl *impl = impl_from_ITypeLib(pTLib); if (IsEqualGUID(params->guid, impl->guid)) { params->pTLib = pTLib; return FALSE; /* stop enumeration */ } ITypeLib_Release(pTLib); } return TRUE; } #if 0 static HRESULT WINAPI QueryPathOfRegTypeLib16( REFGUID guid, /* [in] Guid to get the key name for */ WORD wMaj, /* [in] Major version */ WORD wMin, /* [in] Minor version */ LCID lcid, /* [in] Locale Id */ /* BSTR16 */SEGPTR *path) /* [out] Destination for the registry key name */ { char xguid[80]; char typelibkey[100],pathname[260]; LONG plen; char *ret; TRACE("\n"); *path = 0; if (HIWORD(guid)) { sprintf( typelibkey, "SOFTWARE\\Classes\\Typelib\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\%d.%d\\%x\\win16", guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7], wMaj,wMin,lcid); } else { sprintf(xguid,"",(DWORD)guid); FIXME("(%s,%d,%d,0x%04x,%p),can't handle non-string guids.\n",xguid,wMaj,wMin,lcid,path); return E_FAIL; } plen = sizeof(pathname); if (RegQueryValueA(HKEY_LOCAL_MACHINE,typelibkey,pathname,&plen) || !*pathname) { /* try again without lang specific id */ if (SUBLANGID(lcid)) return QueryPathOfRegTypeLib16(guid,wMaj,wMin,PRIMARYLANGID(lcid),path); plen = sizeof(pathname); if (RegQueryValueA(HKEY_CURRENT_USER, typelibkey, pathname, &plen) || !*pathname) { sprintf(typelibkey, "Typelib\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\%d.%d\\%x\\win16", guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7], wMaj, wMin, lcid); plen = sizeof(pathname); if (RegQueryValue16(HKEY_LOCAL_MACHINE, typelibkey, pathname, &plen)) { if (lcid) return QueryPathOfRegTypeLib16(guid, wMaj, wMin, 0, path); FIXME("key %s not found\n", typelibkey); return E_FAIL; } } } { UINT len = MultiByteToWideChar(CP_ACP, 0, pathname, -1, NULL, 0); *path = SysAllocStringLen(L"", len); MultiByteToWideChar(CP_ACP, 0, pathname, -1, *path, len); } if (!*path) return E_FAIL; return S_OK; } static HRESULT query_typelib_path(REFGUID guid, WORD wMaj, WORD wMin, SYSKIND syskind, LCID lcid, BSTR *path, BOOL redir) { HRESULT a = QueryPathOfRegTypeLib16(guid, wMaj, wMin, lcid, path); return a; } #endif /* ITypeInfo::GetRefTypeInfo * * If a type description references other type descriptions, it retrieves * the referenced type descriptions. */ static HRESULT WINAPI ITypeInfo_fnGetRefTypeInfo( ITypeInfo2 *iface, HREFTYPE hRefType, ITypeInfo **ppTInfo) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); HRESULT result = E_FAIL; if(!ppTInfo) return E_INVALIDARG; if ((INT)hRefType < 0) { ITypeInfoImpl *pTypeInfoImpl; if (!(This->typeattr.wTypeFlags & TYPEFLAG_FDUAL) || !(This->typeattr.typekind == TKIND_INTERFACE || This->typeattr.typekind == TKIND_DISPATCH)) return TYPE_E_ELEMENTNOTFOUND; /* when we meet a DUAL typeinfo, we must create the alternate * version of it. */ pTypeInfoImpl = ITypeInfoImpl_Constructor(); *pTypeInfoImpl = *This; pTypeInfoImpl->ref = 0; list_init(&pTypeInfoImpl->custdata_list); if (This->typeattr.typekind == TKIND_INTERFACE) pTypeInfoImpl->typeattr.typekind = TKIND_DISPATCH; else pTypeInfoImpl->typeattr.typekind = TKIND_INTERFACE; *ppTInfo = (ITypeInfo *)&pTypeInfoImpl->ITypeInfo2_iface; /* the AddRef implicitly adds a reference to the parent typelib, which * stops the copied data from being destroyed until the new typeinfo's * refcount goes to zero, but we need to signal to the new instance to * not free its data structures when it is destroyed */ pTypeInfoImpl->not_attached_to_typelib = TRUE; ITypeInfo_AddRef(*ppTInfo); result = S_OK; } else if ((hRefType & DISPATCH_HREF_MASK) && (This->typeattr.typekind == TKIND_DISPATCH)) { HREFTYPE href_dispatch = hRefType; result = ITypeInfoImpl_GetDispatchRefTypeInfo((ITypeInfo *)iface, &href_dispatch, ppTInfo); } else { TLBRefType *ref_type; ITypeLib *pTLib = NULL; UINT i; if(!(hRefType & 0x1)){ for(i = 0; i < This->pTypeLib->TypeInfoCount; ++i) { if (This->pTypeLib->typeinfos[i]->hreftype == (hRefType&(~0x3))) { result = S_OK; *ppTInfo = (ITypeInfo*)&This->pTypeLib->typeinfos[i]->ITypeInfo2_iface; ITypeInfo_AddRef(*ppTInfo); goto end; } } } LIST_FOR_EACH_ENTRY(ref_type, &This->pTypeLib->ref_list, TLBRefType, entry) { if(ref_type->reference == (hRefType & (~0x3))) break; } if(&ref_type->entry == &This->pTypeLib->ref_list) { FIXME("Can't find pRefType for ref %x\n", hRefType); goto end; } if(ref_type->pImpTLInfo == TLB_REF_INTERNAL) { UINT Index; TRACE("internal reference\n"); result = ITypeInfo2_GetContainingTypeLib(iface, &pTLib, &Index); } else { if(ref_type->pImpTLInfo->pImpTypeLib) { TRACE("typeinfo in imported typelib that is already loaded\n"); pTLib = (ITypeLib*)&ref_type->pImpTLInfo->pImpTypeLib->ITypeLib2_iface; ITypeLib_AddRef(pTLib); result = S_OK; } else { static const WCHAR TYPELIBW[] = {'T','Y','P','E','L','I','B',0}; struct search_res_tlb_params params; TRACE("typeinfo in imported typelib that isn't already loaded\n"); /* Search in resource table */ params.guid = TLB_get_guid_null(ref_type->pImpTLInfo->guid); params.pTLib = NULL; EnumResourceNamesW(NULL, TYPELIBW, search_res_tlb, (LONG_PTR)¶ms); pTLib = params.pTLib; result = S_OK; if (!pTLib) { WCHAR *libnamW; char *libnam; /* Search on disk */ result = query_typelib_path(TLB_get_guid_null(ref_type->pImpTLInfo->guid), ref_type->pImpTLInfo->wVersionMajor, ref_type->pImpTLInfo->wVersionMinor, This->pTypeLib->syskind, ref_type->pImpTLInfo->lcid, &libnam, TRUE); if (FAILED(result)) { libnamW = HeapAlloc(GetProcessHeap(), 0, (wcslen(ref_type->pImpTLInfo->name) + 1) * sizeof(WCHAR)); wcscpy(libnamW, ref_type->pImpTLInfo->name); } else libnamW = strdupAtoW(libnam); result = LoadTypeLib16Impl(libnamW, &pTLib); HeapFree(GetProcessHeap(), 0, libnamW); } if(SUCCEEDED(result)) { ref_type->pImpTLInfo->pImpTypeLib = impl_from_ITypeLib(pTLib); ITypeLib_AddRef(pTLib); } } } if(SUCCEEDED(result)) { if(ref_type->index == TLB_REF_USE_GUID) result = ITypeLib_GetTypeInfoOfGuid(pTLib, TLB_get_guid_null(ref_type->guid), ppTInfo); else result = ITypeLib_GetTypeInfo(pTLib, ref_type->index, ppTInfo); } if (pTLib != NULL) ITypeLib_Release(pTLib); } end: TRACE("(%p) hreftype 0x%04x loaded %s (%p)\n", This, hRefType, SUCCEEDED(result)? "SUCCESS":"FAILURE", *ppTInfo); return result; } static CRITICAL_SECTION app_obj_section; static CRITICAL_SECTION_DEBUG app_obj_section_debug = { 0, 0, &app_obj_section, { &app_obj_section_debug.ProcessLocksList, &app_obj_section_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": typelib app obj") } }; static CRITICAL_SECTION app_obj_section = { &app_obj_section_debug, -1, 0, 0, 0, 0 }; struct app_obj { struct list entry; GUID guid; void *data; }; struct list app_obj_table = LIST_INIT(app_obj_table); void addressof_app_obj(GUID *guid, PVOID *ppv) { struct app_obj *entry; EnterCriticalSection(&app_obj_section); LIST_FOR_EACH_ENTRY(entry, &app_obj_table, struct app_obj, entry) { if (IsEqualGUID(guid, &entry->guid)) { *ppv = &entry->data; LeaveCriticalSection(&app_obj_section); return; } } entry = (struct app_obj*)heap_alloc(sizeof(struct app_obj)); entry->guid = *guid; entry->data = NULL; list_add_tail(&app_obj_table, &entry->entry); *ppv = &entry->data; LeaveCriticalSection(&app_obj_section); } /* ITypeInfo::AddressOfMember * * Retrieves the addresses of static functions or variables, such as those * defined in a DLL. */ static HRESULT WINAPI ITypeInfo_fnAddressOfMember( ITypeInfo2 *iface, MEMBERID memid, INVOKEKIND invKind, PVOID *ppv) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); HRESULT hr; BSTR dll, entry; WORD ordinal; HMODULE module; HMODULE16 module16; TRACE("(%p)->(0x%x, 0x%x, %p)\n", This, memid, invKind, ppv); if (memid == ID_DEFAULTINST) { if (This->typeattr.typekind == TKIND_COCLASS && This->typeattr.wTypeFlags & TYPEFLAG_FAPPOBJECT) { addressof_app_obj(&This->guid, ppv); *ppv = MapLS(*ppv); return S_OK; } else { return TYPE_E_ELEMENTNOTFOUND; } } hr = ITypeInfo2_GetDllEntry(iface, memid, invKind, &dll, &entry, &ordinal); if (FAILED(hr)) return hr; module = LoadLibraryW(dll); if (!module) { LPSTR moduleA; INT len = WideCharToMultiByte(CP_ACP, 0, dll, -1, NULL, 0, NULL, NULL); moduleA = heap_alloc(len); WideCharToMultiByte(CP_ACP, 0, dll, -1, moduleA, len, NULL, NULL); module16 = LoadLibrary16(moduleA); heap_free(moduleA); } if (!module16) { ERR("couldn't load %s\n", debugstr_w(dll)); SysFreeString(dll); SysFreeString(entry); return STG_E_FILENOTFOUND; } /* FIXME: store library somewhere where we can free it */ if (entry) { LPSTR entryA; INT len = WideCharToMultiByte(CP_ACP, 0, entry, -1, NULL, 0, NULL, NULL); entryA = heap_alloc(len); WideCharToMultiByte(CP_ACP, 0, entry, -1, entryA, len, NULL, NULL); if (module16) { *ppv = GetProcAddress16(module16, entryA); } else { *ppv = GetProcAddress(module, entryA); } if (!*ppv) ERR("function not found %s\n", debugstr_a(entryA)); heap_free(entryA); } else { if (module16) { *ppv = GetProcAddress16(module16, MAKEINTRESOURCEA(ordinal)); } else { *ppv = GetProcAddress(module, MAKEINTRESOURCEA(ordinal)); } if (!*ppv) ERR("function not found %d\n", ordinal); } SysFreeString(dll); SysFreeString(entry); if (!*ppv) return TYPE_E_DLLFUNCTIONNOTFOUND; return S_OK; } /* ITypeInfo::CreateInstance * * Creates a new instance of a type that describes a component object class * (coclass). */ static HRESULT WINAPI ITypeInfo_fnCreateInstance( ITypeInfo2 *iface, IUnknown *pOuterUnk, REFIID riid, VOID **ppvObj) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); HRESULT hr; TYPEATTR *pTA; TRACE("(%p)->(%p, %s, %p)\n", This, pOuterUnk, debugstr_guid(riid), ppvObj); *ppvObj = NULL; if(pOuterUnk) { WARN("Not able to aggregate\n"); return CLASS_E_NOAGGREGATION; } hr = ITypeInfo2_GetTypeAttr(iface, &pTA); if(FAILED(hr)) return hr; if(pTA->typekind != TKIND_COCLASS) { WARN("CreateInstance on typeinfo of type %x\n", pTA->typekind); hr = E_INVALIDARG; goto end; } hr = S_FALSE; if(pTA->wTypeFlags & TYPEFLAG_FAPPOBJECT) { IUnknown *pUnk; hr = GetActiveObject(&pTA->guid, NULL, &pUnk); TRACE("GetActiveObject rets %08x\n", hr); if(hr == S_OK) { hr = IUnknown_QueryInterface(pUnk, riid, ppvObj); IUnknown_Release(pUnk); } } if(hr != S_OK) hr = CoCreateInstance(&pTA->guid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, riid, ppvObj); end: ITypeInfo2_ReleaseTypeAttr(iface, pTA); return hr; } /* ITypeInfo::GetMops * * Retrieves marshalling information. */ static HRESULT WINAPI ITypeInfo_fnGetMops( ITypeInfo2 *iface, MEMBERID memid, BSTR *pBstrMops) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); FIXME("(%p %d) stub!\n", This, memid); *pBstrMops = NULL; return S_OK; } /* ITypeInfo::GetContainingTypeLib * * Retrieves the containing type library and the index of the type description * within that type library. */ static HRESULT WINAPI ITypeInfo_fnGetContainingTypeLib( ITypeInfo2 *iface, ITypeLib * *ppTLib, UINT *pIndex) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); /* If a pointer is null, we simply ignore it, the ATL in particular passes pIndex as 0 */ if (pIndex) { *pIndex=This->index; TRACE("returning pIndex=%d\n", *pIndex); } if (ppTLib) { *ppTLib = (ITypeLib *)&This->pTypeLib->ITypeLib2_iface; ITypeLib_AddRef(*ppTLib); TRACE("returning ppTLib=%p\n", *ppTLib); } return S_OK; } /* ITypeInfo::ReleaseTypeAttr * * Releases a TYPEATTR previously returned by Get * */ static void WINAPI ITypeInfo_fnReleaseTypeAttr( ITypeInfo2 *iface, TYPEATTR* pTypeAttr) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TRACE("(%p)->(%p)\n", This, pTypeAttr); heap_free(pTypeAttr); } /* ITypeInfo::ReleaseFuncDesc * * Releases a FUNCDESC previously returned by GetFuncDesc. * */ static void WINAPI ITypeInfo_fnReleaseFuncDesc( ITypeInfo2 *iface, FUNCDESC *pFuncDesc) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); SHORT i; TRACE("(%p)->(%p)\n", This, pFuncDesc); for (i = 0; i < pFuncDesc->cParams; i++) TLB_FreeElemDesc(&pFuncDesc->lprgelemdescParam[i]); TLB_FreeElemDesc(&pFuncDesc->elemdescFunc); SysFreeString((BSTR)pFuncDesc); } /* ITypeInfo::ReleaseVarDesc * * Releases a VARDESC previously returned by GetVarDesc. */ static void WINAPI ITypeInfo_fnReleaseVarDesc( ITypeInfo2 *iface, VARDESC *pVarDesc) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TRACE("(%p)->(%p)\n", This, pVarDesc); TLB_FreeVarDesc(pVarDesc); } /* ITypeInfo2::GetTypeKind * * Returns the TYPEKIND enumeration quickly, without doing any allocations. * */ static HRESULT WINAPI ITypeInfo2_fnGetTypeKind( ITypeInfo2 * iface, TYPEKIND *pTypeKind) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); *pTypeKind = This->typeattr.typekind; TRACE("(%p) type 0x%0x\n", This,*pTypeKind); return S_OK; } /* ITypeInfo2::GetTypeFlags * * Returns the type flags without any allocations. This returns a DWORD type * flag, which expands the type flags without growing the TYPEATTR (type * attribute). * */ static HRESULT WINAPI ITypeInfo2_fnGetTypeFlags( ITypeInfo2 *iface, ULONG *pTypeFlags) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); *pTypeFlags=This->typeattr.wTypeFlags; TRACE("(%p) flags 0x%x\n", This,*pTypeFlags); return S_OK; } /* ITypeInfo2::GetFuncIndexOfMemId * Binds to a specific member based on a known DISPID, where the member name * is not known (for example, when binding to a default member). * */ static HRESULT WINAPI ITypeInfo2_fnGetFuncIndexOfMemId( ITypeInfo2 * iface, MEMBERID memid, INVOKEKIND invKind, UINT *pFuncIndex) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); UINT fdc; HRESULT result; for (fdc = 0; fdc < This->typeattr.cFuncs; ++fdc){ const TLBFuncDesc *pFuncInfo = &This->funcdescs[fdc]; if(memid == pFuncInfo->funcdesc.memid && (invKind & pFuncInfo->funcdesc.invkind)) break; } if(fdc < This->typeattr.cFuncs) { *pFuncIndex = fdc; result = S_OK; } else result = TYPE_E_ELEMENTNOTFOUND; TRACE("(%p) memid 0x%08x invKind 0x%04x -> %s\n", This, memid, invKind, SUCCEEDED(result) ? "SUCCESS" : "FAILED"); return result; } /* TypeInfo2::GetVarIndexOfMemId * * Binds to a specific member based on a known DISPID, where the member name * is not known (for example, when binding to a default member). * */ static HRESULT WINAPI ITypeInfo2_fnGetVarIndexOfMemId( ITypeInfo2 * iface, MEMBERID memid, UINT *pVarIndex) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBVarDesc *pVarInfo; TRACE("%p %d %p\n", iface, memid, pVarIndex); pVarInfo = TLB_get_vardesc_by_memberid(This->vardescs, This->typeattr.cVars, memid); if(!pVarInfo) return TYPE_E_ELEMENTNOTFOUND; *pVarIndex = (pVarInfo - This->vardescs); return S_OK; } /* ITypeInfo2::GetCustData * * Gets the custom data */ static HRESULT WINAPI ITypeInfo2_fnGetCustData( ITypeInfo2 * iface, REFGUID guid, VARIANT *pVarVal) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBCustData *pCData; TRACE("%p %s %p\n", This, debugstr_guid(guid), pVarVal); if(!guid || !pVarVal) return E_INVALIDARG; pCData = TLB_get_custdata_by_guid(This->pcustdata_list, guid); VariantInit( pVarVal); if (pCData) VariantCopy( pVarVal, &pCData->data); else VariantClear( pVarVal ); return S_OK; } /* ITypeInfo2::GetFuncCustData * * Gets the custom data */ static HRESULT WINAPI ITypeInfo2_fnGetFuncCustData( ITypeInfo2 * iface, UINT index, REFGUID guid, VARIANT *pVarVal) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBCustData *pCData; TLBFuncDesc *pFDesc = &This->funcdescs[index]; TRACE("%p %u %s %p\n", This, index, debugstr_guid(guid), pVarVal); if(index >= This->typeattr.cFuncs) return TYPE_E_ELEMENTNOTFOUND; pCData = TLB_get_custdata_by_guid(&pFDesc->custdata_list, guid); if(!pCData) return TYPE_E_ELEMENTNOTFOUND; VariantInit(pVarVal); VariantCopy(pVarVal, &pCData->data); return S_OK; } /* ITypeInfo2::GetParamCustData * * Gets the custom data */ static HRESULT WINAPI ITypeInfo2_fnGetParamCustData( ITypeInfo2 * iface, UINT indexFunc, UINT indexParam, REFGUID guid, VARIANT *pVarVal) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBCustData *pCData; TLBFuncDesc *pFDesc = &This->funcdescs[indexFunc]; TRACE("%p %u %u %s %p\n", This, indexFunc, indexParam, debugstr_guid(guid), pVarVal); if(indexFunc >= This->typeattr.cFuncs) return TYPE_E_ELEMENTNOTFOUND; if(indexParam >= pFDesc->funcdesc.cParams) return TYPE_E_ELEMENTNOTFOUND; pCData = TLB_get_custdata_by_guid(&pFDesc->pParamDesc[indexParam].custdata_list, guid); if(!pCData) return TYPE_E_ELEMENTNOTFOUND; VariantInit(pVarVal); VariantCopy(pVarVal, &pCData->data); return S_OK; } /* ITypeInfo2::GetVarCustData * * Gets the custom data */ static HRESULT WINAPI ITypeInfo2_fnGetVarCustData( ITypeInfo2 * iface, UINT index, REFGUID guid, VARIANT *pVarVal) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBCustData *pCData; TLBVarDesc *pVDesc = &This->vardescs[index]; TRACE("%p %s %p\n", This, debugstr_guid(guid), pVarVal); if(index >= This->typeattr.cVars) return TYPE_E_ELEMENTNOTFOUND; pCData = TLB_get_custdata_by_guid(&pVDesc->custdata_list, guid); if(!pCData) return TYPE_E_ELEMENTNOTFOUND; VariantInit(pVarVal); VariantCopy(pVarVal, &pCData->data); return S_OK; } /* ITypeInfo2::GetImplCustData * * Gets the custom data */ static HRESULT WINAPI ITypeInfo2_fnGetImplTypeCustData( ITypeInfo2 * iface, UINT index, REFGUID guid, VARIANT *pVarVal) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBCustData *pCData; TLBImplType *pRDesc = &This->impltypes[index]; TRACE("%p %u %s %p\n", This, index, debugstr_guid(guid), pVarVal); if(index >= This->typeattr.cImplTypes) return TYPE_E_ELEMENTNOTFOUND; pCData = TLB_get_custdata_by_guid(&pRDesc->custdata_list, guid); if(!pCData) return TYPE_E_ELEMENTNOTFOUND; VariantInit(pVarVal); VariantCopy(pVarVal, &pCData->data); return S_OK; } /* ITypeInfo2::GetDocumentation2 * * Retrieves the documentation string, the complete Help file name and path, * the localization context to use, and the context ID for the library Help * topic in the Help file. * */ static HRESULT WINAPI ITypeInfo2_fnGetDocumentation2( ITypeInfo2 * iface, MEMBERID memid, LCID lcid, BSTR *pbstrHelpString, DWORD *pdwHelpStringContext, BSTR *pbstrHelpStringDll) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); const TLBFuncDesc *pFDesc; const TLBVarDesc *pVDesc; TRACE("(%p) memid %d lcid(0x%x) HelpString(%p) " "HelpStringContext(%p) HelpStringDll(%p)\n", This, memid, lcid, pbstrHelpString, pdwHelpStringContext, pbstrHelpStringDll ); /* the help string should be obtained from the helpstringdll, * using the _DLLGetDocumentation function, based on the supplied * lcid. Nice to do sometime... */ if(memid==MEMBERID_NIL){ /* documentation for the typeinfo */ if(pbstrHelpString) *pbstrHelpString=SysAllocString(TLB_get_bstr(This->Name)); if(pdwHelpStringContext) *pdwHelpStringContext=This->dwHelpStringContext; if(pbstrHelpStringDll) *pbstrHelpStringDll= SysAllocString(TLB_get_bstr(This->pTypeLib->HelpStringDll));/* FIXME */ return S_OK; }else {/* for a member */ pFDesc = TLB_get_funcdesc_by_memberid(This->funcdescs, This->typeattr.cFuncs, memid); if(pFDesc){ if(pbstrHelpString) *pbstrHelpString=SysAllocString(TLB_get_bstr(pFDesc->HelpString)); if(pdwHelpStringContext) *pdwHelpStringContext=pFDesc->HelpStringContext; if(pbstrHelpStringDll) *pbstrHelpStringDll= SysAllocString(TLB_get_bstr(This->pTypeLib->HelpStringDll));/* FIXME */ return S_OK; } pVDesc = TLB_get_vardesc_by_memberid(This->vardescs, This->typeattr.cVars, memid); if(pVDesc){ if(pbstrHelpString) *pbstrHelpString=SysAllocString(TLB_get_bstr(pVDesc->HelpString)); if(pdwHelpStringContext) *pdwHelpStringContext=pVDesc->HelpStringContext; if(pbstrHelpStringDll) *pbstrHelpStringDll= SysAllocString(TLB_get_bstr(This->pTypeLib->HelpStringDll));/* FIXME */ return S_OK; } } return TYPE_E_ELEMENTNOTFOUND; } /* ITypeInfo2::GetAllCustData * * Gets all custom data items for the Type info. * */ static HRESULT WINAPI ITypeInfo2_fnGetAllCustData( ITypeInfo2 * iface, CUSTDATA *pCustData) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TRACE("%p %p\n", This, pCustData); return TLB_copy_all_custdata(This->pcustdata_list, pCustData); } /* ITypeInfo2::GetAllFuncCustData * * Gets all custom data items for the specified Function * */ static HRESULT WINAPI ITypeInfo2_fnGetAllFuncCustData( ITypeInfo2 * iface, UINT index, CUSTDATA *pCustData) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBFuncDesc *pFDesc = &This->funcdescs[index]; TRACE("%p %u %p\n", This, index, pCustData); if(index >= This->typeattr.cFuncs) return TYPE_E_ELEMENTNOTFOUND; return TLB_copy_all_custdata(&pFDesc->custdata_list, pCustData); } /* ITypeInfo2::GetAllParamCustData * * Gets all custom data items for the Functions * */ static HRESULT WINAPI ITypeInfo2_fnGetAllParamCustData( ITypeInfo2 * iface, UINT indexFunc, UINT indexParam, CUSTDATA *pCustData) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBFuncDesc *pFDesc = &This->funcdescs[indexFunc]; TRACE("%p %u %u %p\n", This, indexFunc, indexParam, pCustData); if(indexFunc >= This->typeattr.cFuncs) return TYPE_E_ELEMENTNOTFOUND; if(indexParam >= pFDesc->funcdesc.cParams) return TYPE_E_ELEMENTNOTFOUND; return TLB_copy_all_custdata(&pFDesc->pParamDesc[indexParam].custdata_list, pCustData); } /* ITypeInfo2::GetAllVarCustData * * Gets all custom data items for the specified Variable * */ static HRESULT WINAPI ITypeInfo2_fnGetAllVarCustData( ITypeInfo2 * iface, UINT index, CUSTDATA *pCustData) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBVarDesc * pVDesc = &This->vardescs[index]; TRACE("%p %u %p\n", This, index, pCustData); if(index >= This->typeattr.cVars) return TYPE_E_ELEMENTNOTFOUND; return TLB_copy_all_custdata(&pVDesc->custdata_list, pCustData); } /* ITypeInfo2::GetAllImplCustData * * Gets all custom data items for the specified implementation type * */ static HRESULT WINAPI ITypeInfo2_fnGetAllImplTypeCustData( ITypeInfo2 * iface, UINT index, CUSTDATA *pCustData) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); TLBImplType *pRDesc = &This->impltypes[index]; TRACE("%p %u %p\n", This, index, pCustData); if(index >= This->typeattr.cImplTypes) return TYPE_E_ELEMENTNOTFOUND; return TLB_copy_all_custdata(&pRDesc->custdata_list, pCustData); } static const ITypeInfo2Vtbl tinfvt = { ITypeInfo_fnQueryInterface, ITypeInfo_fnAddRef, ITypeInfo_fnRelease, ITypeInfo_fnGetTypeAttr, ITypeInfo_fnGetTypeComp, ITypeInfo_fnGetFuncDesc, ITypeInfo_fnGetVarDesc, ITypeInfo_fnGetNames, ITypeInfo_fnGetRefTypeOfImplType, ITypeInfo_fnGetImplTypeFlags, ITypeInfo_fnGetIDsOfNames, ITypeInfo_fnInvoke, ITypeInfo_fnGetDocumentation, ITypeInfo_fnGetDllEntry, ITypeInfo_fnGetRefTypeInfo, ITypeInfo_fnAddressOfMember, ITypeInfo_fnCreateInstance, ITypeInfo_fnGetMops, ITypeInfo_fnGetContainingTypeLib, ITypeInfo_fnReleaseTypeAttr, ITypeInfo_fnReleaseFuncDesc, ITypeInfo_fnReleaseVarDesc, ITypeInfo2_fnGetTypeKind, ITypeInfo2_fnGetTypeFlags, ITypeInfo2_fnGetFuncIndexOfMemId, ITypeInfo2_fnGetVarIndexOfMemId, ITypeInfo2_fnGetCustData, ITypeInfo2_fnGetFuncCustData, ITypeInfo2_fnGetParamCustData, ITypeInfo2_fnGetVarCustData, ITypeInfo2_fnGetImplTypeCustData, ITypeInfo2_fnGetDocumentation2, ITypeInfo2_fnGetAllCustData, ITypeInfo2_fnGetAllFuncCustData, ITypeInfo2_fnGetAllParamCustData, ITypeInfo2_fnGetAllVarCustData, ITypeInfo2_fnGetAllImplTypeCustData, }; static ITypeLibImpl* TypeLibImpl_Constructor_stub(void) { ITypeLibImpl* pTypeLibImpl; pTypeLibImpl = heap_alloc_zero(sizeof(ITypeLibImpl)); if (!pTypeLibImpl) return NULL; pTypeLibImpl->ITypeLib2_iface.lpVtbl = &tlbvt; pTypeLibImpl->ITypeComp_iface.lpVtbl = &tlbtcvt; pTypeLibImpl->ICreateTypeLib2_iface.lpVtbl = &CreateTypeLib2Vtbl; pTypeLibImpl->ref = 1; list_init(&pTypeLibImpl->implib_list); list_init(&pTypeLibImpl->custdata_list); list_init(&pTypeLibImpl->name_list); list_init(&pTypeLibImpl->string_list); list_init(&pTypeLibImpl->guid_list); list_init(&pTypeLibImpl->ref_list); pTypeLibImpl->dispatch_href = -1; return pTypeLibImpl; } /****************************************************************************** * CreateDispTypeInfo [OLEAUT32.31] * * Build type information for an object so it can be called through an * IDispatch interface. * * RETURNS * Success: S_OK. pptinfo contains the created ITypeInfo object. * Failure: E_INVALIDARG, if one or more arguments is invalid. * * NOTES * This call allows an objects methods to be accessed through IDispatch, by * building an ITypeInfo object that IDispatch can use to call through. */ HRESULT WINAPI CreateDispTypeInfo16Impl( INTERFACEDATA *pidata, /* [I] Description of the interface to build type info for */ LCID lcid, /* [I] Locale Id */ ITypeInfo **pptinfo) /* [O] Destination for created ITypeInfo object */ { ITypeInfoImpl *pTIClass, *pTIIface; ITypeLibImpl *pTypeLibImpl; unsigned int param, func; TLBFuncDesc *pFuncDesc; TLBRefType *ref; TRACE("\n"); pTypeLibImpl = TypeLibImpl_Constructor(); if (!pTypeLibImpl) return E_FAIL; #if 0 pTypeLibImpl->TypeInfoCount = 2; #else pTypeLibImpl->TypeInfoCount = 1; #endif pTypeLibImpl->typeinfos = heap_alloc_zero(pTypeLibImpl->TypeInfoCount * sizeof(ITypeInfoImpl*)); pTIIface = pTypeLibImpl->typeinfos[0] = ITypeInfoImpl_Constructor(); pTIIface->pTypeLib = pTypeLibImpl; pTIIface->index = 0; pTIIface->Name = NULL; pTIIface->dwHelpContext = -1; pTIIface->guid = NULL; pTIIface->typeattr.lcid = lcid; pTIIface->typeattr.typekind = TKIND_INTERFACE; pTIIface->typeattr.wMajorVerNum = 0; pTIIface->typeattr.wMinorVerNum = 0; pTIIface->typeattr.cbAlignment = 2; pTIIface->typeattr.cbSizeInstance = -1; pTIIface->typeattr.cbSizeVft = -1; pTIIface->typeattr.cFuncs = 0; pTIIface->typeattr.cImplTypes = 0; pTIIface->typeattr.cVars = 0; pTIIface->typeattr.wTypeFlags = 0; pTIIface->hreftype = 0; pTIIface->funcdescs = TLBFuncDesc_Alloc(pidata->cMembers); pFuncDesc = pTIIface->funcdescs; for(func = 0; func < pidata->cMembers; func++) { METHODDATA *md = pidata->pmethdata + func; pFuncDesc->Name = TLB_append_str(&pTypeLibImpl->name_list, md->szName); pFuncDesc->funcdesc.memid = md->dispid; pFuncDesc->funcdesc.lprgscode = NULL; pFuncDesc->funcdesc.funckind = FUNC_VIRTUAL; pFuncDesc->funcdesc.invkind = md->wFlags; pFuncDesc->funcdesc.callconv = md->cc; pFuncDesc->funcdesc.cParams = md->cArgs; pFuncDesc->funcdesc.cParamsOpt = 0; pFuncDesc->funcdesc.oVft = md->iMeth * sizeof(void *); pFuncDesc->funcdesc.cScodes = 0; pFuncDesc->funcdesc.wFuncFlags = 0; pFuncDesc->funcdesc.elemdescFunc.tdesc.vt = md->vtReturn; pFuncDesc->funcdesc.elemdescFunc.u.paramdesc.wParamFlags = PARAMFLAG_NONE; pFuncDesc->funcdesc.elemdescFunc.u.paramdesc.pparamdescex = NULL; pFuncDesc->funcdesc.lprgelemdescParam = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, md->cArgs * sizeof(ELEMDESC)); pFuncDesc->pParamDesc = TLBParDesc_Constructor(md->cArgs); for(param = 0; param < md->cArgs; param++) { pFuncDesc->funcdesc.lprgelemdescParam[param].tdesc.vt = md->ppdata[param].vt; pFuncDesc->pParamDesc[param].Name = TLB_append_str(&pTypeLibImpl->name_list, md->ppdata[param].szName); } pFuncDesc->helpcontext = 0; pFuncDesc->HelpStringContext = 0; pFuncDesc->HelpString = NULL; pFuncDesc->Entry = NULL; list_init(&pFuncDesc->custdata_list); pTIIface->typeattr.cFuncs++; ++pFuncDesc; } dump_TypeInfo(pTIIface); #if 0 pTIClass = pTypeLibImpl->typeinfos[1] = ITypeInfoImpl_Constructor(); pTIClass->pTypeLib = pTypeLibImpl; pTIClass->index = 1; pTIClass->Name = NULL; pTIClass->dwHelpContext = -1; pTIClass->guid = NULL; pTIClass->typeattr.lcid = lcid; pTIClass->typeattr.typekind = TKIND_COCLASS; pTIClass->typeattr.wMajorVerNum = 0; pTIClass->typeattr.wMinorVerNum = 0; pTIClass->typeattr.cbAlignment = 2; pTIClass->typeattr.cbSizeInstance = -1; pTIClass->typeattr.cbSizeVft = -1; pTIClass->typeattr.cFuncs = 0; pTIClass->typeattr.cImplTypes = 1; pTIClass->typeattr.cVars = 0; pTIClass->typeattr.wTypeFlags = 0; pTIClass->hreftype = sizeof(MSFT_TypeInfoBase); pTIClass->impltypes = TLBImplType_Alloc(1); ref = heap_alloc_zero(sizeof(*ref)); ref->pImpTLInfo = TLB_REF_INTERNAL; list_add_head(&pTypeLibImpl->ref_list, &ref->entry); dump_TypeInfo(pTIClass); *pptinfo = (ITypeInfo *)&pTIClass->ITypeInfo2_iface; #else *pptinfo = (ITypeInfo *)&pTIIface->ITypeInfo2_iface; #endif ITypeInfo_AddRef(*pptinfo); ITypeLib2_Release(&pTypeLibImpl->ITypeLib2_iface); return S_OK; } static HRESULT WINAPI ITypeComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv) { ITypeInfoImpl *This = info_impl_from_ITypeComp(iface); return ITypeInfo2_QueryInterface(&This->ITypeInfo2_iface, riid, ppv); } static ULONG WINAPI ITypeComp_fnAddRef(ITypeComp * iface) { ITypeInfoImpl *This = info_impl_from_ITypeComp(iface); return ITypeInfo2_AddRef(&This->ITypeInfo2_iface); } static ULONG WINAPI ITypeComp_fnRelease(ITypeComp * iface) { ITypeInfoImpl *This = info_impl_from_ITypeComp(iface); return ITypeInfo2_Release(&This->ITypeInfo2_iface); } static HRESULT WINAPI ITypeComp_fnBind( ITypeComp * iface, OLECHAR * szName, ULONG lHash, WORD wFlags, ITypeInfo ** ppTInfo, DESCKIND * pDescKind, BINDPTR * pBindPtr) { ITypeInfoImpl *This = info_impl_from_ITypeComp(iface); const TLBFuncDesc *pFDesc; const TLBVarDesc *pVDesc; HRESULT hr = DISP_E_MEMBERNOTFOUND; UINT fdc; TRACE("(%p)->(%s, %x, 0x%x, %p, %p, %p)\n", This, debugstr_w(szName), lHash, wFlags, ppTInfo, pDescKind, pBindPtr); *pDescKind = DESCKIND_NONE; pBindPtr->lpfuncdesc = NULL; *ppTInfo = NULL; for(fdc = 0; fdc < This->typeattr.cFuncs; ++fdc){ pFDesc = &This->funcdescs[fdc]; if (!lstrcmpiW(TLB_get_bstr(pFDesc->Name), szName)) { if (!wFlags || (pFDesc->funcdesc.invkind & wFlags)) break; else /* name found, but wrong flags */ hr = TYPE_E_TYPEMISMATCH; } } if (fdc < This->typeattr.cFuncs) { HRESULT hr = TLB_AllocAndInitFuncDesc( &pFDesc->funcdesc, &pBindPtr->lpfuncdesc, This->typeattr.typekind == TKIND_DISPATCH); if (FAILED(hr)) return hr; *pDescKind = DESCKIND_FUNCDESC; *ppTInfo = (ITypeInfo *)&This->ITypeInfo2_iface; ITypeInfo_AddRef(*ppTInfo); return S_OK; } else { pVDesc = TLB_get_vardesc_by_name(This->vardescs, This->typeattr.cVars, szName); if(pVDesc){ HRESULT hr = TLB_AllocAndInitVarDesc(&pVDesc->vardesc, &pBindPtr->lpvardesc); if (FAILED(hr)) return hr; *pDescKind = DESCKIND_VARDESC; *ppTInfo = (ITypeInfo *)&This->ITypeInfo2_iface; ITypeInfo_AddRef(*ppTInfo); return S_OK; } } if (hr == DISP_E_MEMBERNOTFOUND && This->impltypes) { /* recursive search */ ITypeInfo *pTInfo; ITypeComp *pTComp; HRESULT hr; hr=ITypeInfo2_GetRefTypeInfo(&This->ITypeInfo2_iface, This->impltypes[0].hRef, &pTInfo); if (SUCCEEDED(hr)) { hr = ITypeInfo_GetTypeComp(pTInfo,&pTComp); ITypeInfo_Release(pTInfo); } if (SUCCEEDED(hr)) { hr = ITypeComp_Bind(pTComp, szName, lHash, wFlags, ppTInfo, pDescKind, pBindPtr); ITypeComp_Release(pTComp); if (SUCCEEDED(hr) && *pDescKind == DESCKIND_FUNCDESC && This->typeattr.typekind == TKIND_DISPATCH) { FUNCDESC *tmp = pBindPtr->lpfuncdesc; hr = TLB_AllocAndInitFuncDesc(tmp, &pBindPtr->lpfuncdesc, TRUE); SysFreeString((BSTR)tmp); } return hr; } WARN("Could not search inherited interface!\n"); } if (hr == DISP_E_MEMBERNOTFOUND) hr = S_OK; TRACE("did not find member with name %s, flags 0x%x\n", debugstr_w(szName), wFlags); return hr; } static HRESULT WINAPI ITypeComp_fnBindType( ITypeComp * iface, OLECHAR * szName, ULONG lHash, ITypeInfo ** ppTInfo, ITypeComp ** ppTComp) { TRACE("(%s, %x, %p, %p)\n", debugstr_w(szName), lHash, ppTInfo, ppTComp); /* strange behaviour (does nothing) but like the * original */ if (!ppTInfo || !ppTComp) return E_POINTER; *ppTInfo = NULL; *ppTComp = NULL; return S_OK; } static const ITypeCompVtbl tcompvt = { ITypeComp_fnQueryInterface, ITypeComp_fnAddRef, ITypeComp_fnRelease, ITypeComp_fnBind, ITypeComp_fnBindType }; #if 1 HRESULT WINAPI CreateTypeLib2Impl(SYSKIND syskind, LPCOLESTR szFile, ICreateTypeLib2** ppctlib) { ITypeLibImpl *This; HRESULT hres; TRACE("(%d,%s,%p)\n", syskind, debugstr_w(szFile), ppctlib); if (!szFile) return E_INVALIDARG; This = TypeLibImpl_Constructor(); if (!This) return E_OUTOFMEMORY; This->lcid = GetSystemDefaultLCID(); This->syskind = syskind; This->ptr_size = get_ptr_size(syskind); This->path = heap_alloc((lstrlenW(szFile) + 1) * sizeof(WCHAR)); if (!This->path) { ITypeLib2_Release(&This->ITypeLib2_iface); return E_OUTOFMEMORY; } lstrcpyW(This->path, szFile); hres = ITypeLib2_QueryInterface(&This->ITypeLib2_iface, &IID_ICreateTypeLib2, (LPVOID*)ppctlib); ITypeLib2_Release(&This->ITypeLib2_iface); return hres; } #endif static HRESULT WINAPI ICreateTypeLib2_fnQueryInterface(ICreateTypeLib2 *iface, REFIID riid, void **object) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); return ITypeLib2_QueryInterface(&This->ITypeLib2_iface, riid, object); } static ULONG WINAPI ICreateTypeLib2_fnAddRef(ICreateTypeLib2 *iface) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); return ITypeLib2_AddRef(&This->ITypeLib2_iface); } static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); return ITypeLib2_Release(&This->ITypeLib2_iface); } static HRESULT WINAPI ICreateTypeLib2_fnCreateTypeInfo(ICreateTypeLib2 *iface, LPOLESTR name, TYPEKIND kind, ICreateTypeInfo **ctinfo) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); ITypeInfoImpl *info; HRESULT hres; TRACE("%p %s %d %p\n", This, wine_dbgstr_w(name), kind, ctinfo); if (!ctinfo || !name) return E_INVALIDARG; info = TLB_get_typeinfo_by_name(This->typeinfos, This->TypeInfoCount, name); if (info) return TYPE_E_NAMECONFLICT; if (This->typeinfos) This->typeinfos = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->typeinfos, sizeof(ITypeInfoImpl*) * (This->TypeInfoCount + 1)); else This->typeinfos = heap_alloc_zero(sizeof(ITypeInfoImpl*)); info = This->typeinfos[This->TypeInfoCount] = ITypeInfoImpl_Constructor(); info->pTypeLib = This; info->Name = TLB_append_str(&This->name_list, name); info->index = This->TypeInfoCount; info->typeattr.typekind = kind; info->typeattr.cbAlignment = 4; switch (info->typeattr.typekind) { case TKIND_ENUM: case TKIND_INTERFACE: case TKIND_DISPATCH: case TKIND_COCLASS: info->typeattr.cbSizeInstance = This->ptr_size; break; case TKIND_RECORD: case TKIND_UNION: info->typeattr.cbSizeInstance = 0; break; case TKIND_MODULE: info->typeattr.cbSizeInstance = 2; break; case TKIND_ALIAS: info->typeattr.cbSizeInstance = -0x75; break; default: FIXME("unrecognized typekind %d\n", info->typeattr.typekind); info->typeattr.cbSizeInstance = 0xdeadbeef; break; } hres = ITypeInfo2_QueryInterface(&info->ITypeInfo2_iface, &IID_ICreateTypeInfo, (void **)ctinfo); if (FAILED(hres)) { ITypeInfo2_Release(&info->ITypeInfo2_iface); return hres; } info->hreftype = info->index * sizeof(MSFT_TypeInfoBase); ++This->TypeInfoCount; return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnSetName(ICreateTypeLib2 *iface, LPOLESTR name) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %s\n", This, wine_dbgstr_w(name)); if (!name) return E_INVALIDARG; This->Name = TLB_append_str(&This->name_list, name); return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnSetVersion(ICreateTypeLib2 *iface, WORD majorVerNum, WORD minorVerNum) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %d %d\n", This, majorVerNum, minorVerNum); This->ver_major = majorVerNum; This->ver_minor = minorVerNum; return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnSetGuid(ICreateTypeLib2 *iface, REFGUID guid) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %s\n", This, debugstr_guid(guid)); This->guid = TLB_append_guid(&This->guid_list, guid, -2); return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnSetDocString(ICreateTypeLib2 *iface, LPOLESTR doc) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %s\n", This, wine_dbgstr_w(doc)); if (!doc) return E_INVALIDARG; This->DocString = TLB_append_str(&This->string_list, doc); return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnSetHelpFileName(ICreateTypeLib2 *iface, LPOLESTR helpFileName) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %s\n", This, wine_dbgstr_w(helpFileName)); if (!helpFileName) return E_INVALIDARG; This->HelpFile = TLB_append_str(&This->string_list, helpFileName); return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnSetHelpContext(ICreateTypeLib2 *iface, DWORD helpContext) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %d\n", This, helpContext); This->dwHelpContext = helpContext; return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnSetLcid(ICreateTypeLib2 *iface, LCID lcid) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %x\n", This, lcid); This->set_lcid = lcid; return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnSetLibFlags(ICreateTypeLib2 *iface, UINT libFlags) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %x\n", This, libFlags); This->libflags = libFlags; return S_OK; } typedef struct tagWMSFT_SegContents { DWORD len; void *data; } WMSFT_SegContents; typedef struct tagWMSFT_TLBFile { MSFT_Header header; WMSFT_SegContents typeinfo_seg; WMSFT_SegContents impfile_seg; WMSFT_SegContents impinfo_seg; WMSFT_SegContents ref_seg; WMSFT_SegContents guidhash_seg; WMSFT_SegContents guid_seg; WMSFT_SegContents namehash_seg; WMSFT_SegContents name_seg; WMSFT_SegContents string_seg; WMSFT_SegContents typdesc_seg; WMSFT_SegContents arraydesc_seg; WMSFT_SegContents custdata_seg; WMSFT_SegContents cdguids_seg; MSFT_SegDir segdir; WMSFT_SegContents aux_seg; } WMSFT_TLBFile; static HRESULT WMSFT_compile_strings(ITypeLibImpl *This, WMSFT_TLBFile *file) { TLBString *str; UINT last_offs; char *data; file->string_seg.len = 0; LIST_FOR_EACH_ENTRY(str, &This->string_list, TLBString, entry) { int size; size = WideCharToMultiByte(CP_ACP, 0, str->str, strlenW(str->str), NULL, 0, NULL, NULL); if (size == 0) return E_UNEXPECTED; size += sizeof(INT16); if (size % 4) size = (size + 4) & ~0x3; if (size < 8) size = 8; file->string_seg.len += size; /* temporarily use str->offset to store the length of the aligned, * converted string */ str->offset = size; } file->string_seg.data = data = heap_alloc(file->string_seg.len); last_offs = 0; LIST_FOR_EACH_ENTRY(str, &This->string_list, TLBString, entry) { int size; size = WideCharToMultiByte(CP_ACP, 0, str->str, strlenW(str->str), data + sizeof(INT16), file->string_seg.len - last_offs - sizeof(INT16), NULL, NULL); if (size == 0) { heap_free(file->string_seg.data); return E_UNEXPECTED; } *((INT16*)data) = size; memset(data + sizeof(INT16) + size, 0x57, str->offset - size - sizeof(INT16)); size = str->offset; data += size; str->offset = last_offs; last_offs += size; } return S_OK; } static HRESULT WMSFT_compile_names(ITypeLibImpl *This, WMSFT_TLBFile *file) { TLBString *str; UINT last_offs; char *data; MSFT_NameIntro *last_intro = NULL; file->header.nametablecount = 0; file->header.nametablechars = 0; file->name_seg.len = 0; LIST_FOR_EACH_ENTRY(str, &This->name_list, TLBString, entry) { int size; size = strlenW(str->str); file->header.nametablechars += size; file->header.nametablecount++; size = WideCharToMultiByte(CP_ACP, 0, str->str, size, NULL, 0, NULL, NULL); if (size == 0) return E_UNEXPECTED; size += sizeof(MSFT_NameIntro); if (size % 4) size = (size + 4) & ~0x3; if (size < 8) size = 8; file->name_seg.len += size; /* temporarily use str->offset to store the length of the aligned, * converted string */ str->offset = size; } /* Allocate bigger buffer so we can temporarily NULL terminate the name */ file->name_seg.data = data = heap_alloc(file->name_seg.len+1); last_offs = 0; LIST_FOR_EACH_ENTRY(str, &This->name_list, TLBString, entry) { int size, hash; MSFT_NameIntro *intro = (MSFT_NameIntro*)data; size = WideCharToMultiByte(CP_ACP, 0, str->str, strlenW(str->str), data + sizeof(MSFT_NameIntro), file->name_seg.len - last_offs - sizeof(MSFT_NameIntro), NULL, NULL); if (size == 0) { heap_free(file->name_seg.data); return E_UNEXPECTED; } data[sizeof(MSFT_NameIntro) + size] = '\0'; intro->hreftype = -1; /* TODO? */ intro->namelen = size & 0xFF; /* TODO: namelen & 0xFF00 == ??? maybe HREF type indicator? */ hash = LHashValOfNameSysA(This->syskind, This->lcid, data + sizeof(MSFT_NameIntro)); intro->namelen |= hash << 16; intro->next_hash = ((DWORD*)file->namehash_seg.data)[hash & 0x7f]; ((DWORD*)file->namehash_seg.data)[hash & 0x7f] = last_offs; memset(data + sizeof(MSFT_NameIntro) + size, 0x57, str->offset - size - sizeof(MSFT_NameIntro)); /* update str->offset to actual value to use in other * compilation functions that require positions within * the string table */ last_intro = intro; size = str->offset; data += size; str->offset = last_offs; last_offs += size; } if(last_intro) last_intro->hreftype = 0; /* last one is 0? */ return S_OK; } static inline int hash_guid(GUID *guid) { int i, hash = 0; for (i = 0; i < 8; i ++) hash ^= ((const short *)guid)[i]; return hash & 0x1f; } static HRESULT WMSFT_compile_guids(ITypeLibImpl *This, WMSFT_TLBFile *file) { TLBGuid *guid; MSFT_GuidEntry *entry; DWORD offs; int hash_key, *guidhashtab; file->guid_seg.len = sizeof(MSFT_GuidEntry) * list_count(&This->guid_list); file->guid_seg.data = heap_alloc(file->guid_seg.len); entry = file->guid_seg.data; offs = 0; guidhashtab = file->guidhash_seg.data; LIST_FOR_EACH_ENTRY(guid, &This->guid_list, TLBGuid, entry){ memcpy(&entry->guid, &guid->guid, sizeof(GUID)); entry->hreftype = guid->hreftype; hash_key = hash_guid(&guid->guid); entry->next_hash = guidhashtab[hash_key]; guidhashtab[hash_key] = offs; guid->offset = offs; offs += sizeof(MSFT_GuidEntry); ++entry; } return S_OK; } static DWORD WMSFT_encode_variant(VARIANT *value, WMSFT_TLBFile *file) { VARIANT v = *value; VARTYPE arg_type = V_VT(value); int mask = 0; HRESULT hres; DWORD ret = file->custdata_seg.len; if(arg_type == VT_INT) arg_type = VT_I4; if(arg_type == VT_UINT) arg_type = VT_UI4; v = *value; if(V_VT(value) != arg_type) { hres = VariantChangeType(&v, value, 0, arg_type); if(FAILED(hres)){ ERR("VariantChangeType failed: %08x\n", hres); return -1; } } /* Check if default value can be stored in-place */ switch(arg_type){ case VT_I4: case VT_UI4: mask = 0x3ffffff; if(V_UI4(&v) > 0x3ffffff) break; /* fall through */ case VT_I1: case VT_UI1: case VT_BOOL: if(!mask) mask = 0xff; /* fall through */ case VT_I2: case VT_UI2: if(!mask) mask = 0xffff; return ((0x80 + 0x4 * V_VT(value)) << 24) | (V_UI4(&v) & mask); } /* have to allocate space in custdata_seg */ switch(arg_type) { case VT_I4: case VT_R4: case VT_UI4: case VT_INT: case VT_UINT: case VT_HRESULT: case VT_PTR: { /* Construct the data to be allocated */ int *data; if(file->custdata_seg.data){ file->custdata_seg.data = heap_realloc(file->custdata_seg.data, file->custdata_seg.len + sizeof(int) * 2); data = (int *)(((char *)file->custdata_seg.data) + file->custdata_seg.len); file->custdata_seg.len += sizeof(int) * 2; }else{ file->custdata_seg.len = sizeof(int) * 2; data = file->custdata_seg.data = heap_alloc(file->custdata_seg.len); } data[0] = V_VT(value) + (V_UI4(&v) << 16); data[1] = (V_UI4(&v) >> 16) + 0x57570000; /* TODO: Check if the encoded data is already present in custdata_seg */ return ret; } case VT_BSTR: { int i, len = (6+SysStringLen(V_BSTR(&v))+3) & ~0x3; char *data; if(file->custdata_seg.data){ file->custdata_seg.data = heap_realloc(file->custdata_seg.data, file->custdata_seg.len + len); data = ((char *)file->custdata_seg.data) + file->custdata_seg.len; file->custdata_seg.len += len; }else{ file->custdata_seg.len = len; data = file->custdata_seg.data = heap_alloc(file->custdata_seg.len); } *((unsigned short *)data) = V_VT(value); *((unsigned int *)(data+2)) = SysStringLen(V_BSTR(&v)); for(i=0; iarraydesc_seg.len; DWORD *encoded; USHORT i; /* TODO: we should check for duplicates, but that's harder because each * chunk is variable length (really we should store TYPEDESC and ARRAYDESC * at the library-level) */ file->arraydesc_seg.len += (2 + desc->cDims * 2) * sizeof(DWORD); if(!file->arraydesc_seg.data) file->arraydesc_seg.data = heap_alloc(file->arraydesc_seg.len); else file->arraydesc_seg.data = heap_realloc(file->arraydesc_seg.data, file->arraydesc_seg.len); encoded = (DWORD*)((char *)file->arraydesc_seg.data + offs); encoded[0] = WMSFT_append_typedesc(&desc->tdescElem, file, NULL, NULL); encoded[1] = desc->cDims | ((desc->cDims * 2 * sizeof(DWORD)) << 16); for(i = 0; i < desc->cDims; ++i){ encoded[2 + i * 2] = desc->rgbounds[i].cElements; encoded[2 + i * 2 + 1] = desc->rgbounds[i].lLbound; } return offs; } static DWORD WMSFT_append_typedesc(TYPEDESC *desc, WMSFT_TLBFile *file, DWORD *out_mix, INT16 *out_size) { DWORD junk; INT16 junk2; DWORD offs = 0; DWORD encoded[2]; VARTYPE vt, subtype; char *data; if(!desc) return -1; if(!out_mix) out_mix = &junk; if(!out_size) out_size = &junk2; vt = desc->vt & VT_TYPEMASK; if(vt == VT_PTR || vt == VT_SAFEARRAY){ DWORD mix; encoded[1] = WMSFT_append_typedesc(desc->u.lptdesc, file, &mix, out_size); encoded[0] = desc->vt | ((mix | VT_BYREF) << 16); *out_mix = 0x7FFF; *out_size += 2 * sizeof(DWORD); }else if(vt == VT_CARRAY){ encoded[0] = desc->vt | (0x7FFE << 16); encoded[1] = WMSFT_append_arraydesc(desc->u.lpadesc, file); *out_mix = 0x7FFE; }else if(vt == VT_USERDEFINED){ encoded[0] = desc->vt | (0x7FFF << 16); encoded[1] = desc->u.hreftype; *out_mix = 0x7FFF; /* FIXME: Should get TYPEKIND of the hreftype, e.g. TKIND_ENUM => VT_I4 */ }else{ TRACE("Mixing in-place, VT: 0x%x\n", desc->vt); switch(vt){ case VT_INT: subtype = VT_I4; break; case VT_UINT: subtype = VT_UI4; break; case VT_VOID: subtype = VT_EMPTY; break; default: subtype = vt; break; } *out_mix = subtype; return 0x80000000 | (subtype << 16) | desc->vt; } data = file->typdesc_seg.data; while(offs < file->typdesc_seg.len){ if(!memcmp(&data[offs], encoded, sizeof(encoded))) return offs; offs += sizeof(encoded); } file->typdesc_seg.len += sizeof(encoded); if(!file->typdesc_seg.data) data = file->typdesc_seg.data = heap_alloc(file->typdesc_seg.len); else data = file->typdesc_seg.data = heap_realloc(file->typdesc_seg.data, file->typdesc_seg.len); memcpy(&data[offs], encoded, sizeof(encoded)); return offs; } static DWORD WMSFT_compile_custdata(struct list *custdata_list, WMSFT_TLBFile *file) { WMSFT_SegContents *cdguids_seg = &file->cdguids_seg; DWORD ret = cdguids_seg->len, offs; MSFT_CDGuid *cdguid; TLBCustData *cd; if(list_empty(custdata_list)) return -1; cdguids_seg->len += sizeof(MSFT_CDGuid) * list_count(custdata_list); if(!cdguids_seg->data){ cdguid = cdguids_seg->data = heap_alloc(cdguids_seg->len); }else { cdguids_seg->data = heap_realloc(cdguids_seg->data, cdguids_seg->len); cdguid = (MSFT_CDGuid*)((char*)cdguids_seg->data + ret); } offs = ret + sizeof(MSFT_CDGuid); LIST_FOR_EACH_ENTRY(cd, custdata_list, TLBCustData, entry){ cdguid->GuidOffset = cd->guid->offset; cdguid->DataOffset = WMSFT_encode_variant(&cd->data, file); cdguid->next = offs; offs += sizeof(MSFT_CDGuid); ++cdguid; } --cdguid; cdguid->next = -1; return ret; } static DWORD WMSFT_compile_typeinfo_aux(ITypeInfoImpl *info, WMSFT_TLBFile *file) { WMSFT_SegContents *aux_seg = &file->aux_seg; DWORD ret = aux_seg->len, i, j, recorded_size = 0, extra_size = 0; MSFT_VarRecord *varrecord; MSFT_FuncRecord *funcrecord; MEMBERID *memid; DWORD *name, *offsets, offs; for(i = 0; i < info->typeattr.cFuncs; ++i){ TLBFuncDesc *desc = &info->funcdescs[i]; recorded_size += 6 * sizeof(INT); /* mandatory fields */ /* optional fields */ /* TODO: oArgCustData - FuncSetCustData not impl yet */ if(!list_empty(&desc->custdata_list)) recorded_size += 7 * sizeof(INT); else if(desc->HelpStringContext != 0) recorded_size += 6 * sizeof(INT); /* res9? resA? */ else if(desc->Entry) recorded_size += 3 * sizeof(INT); else if(desc->HelpString) recorded_size += 2 * sizeof(INT); else if(desc->helpcontext) recorded_size += sizeof(INT); recorded_size += desc->funcdesc.cParams * sizeof(MSFT_ParameterInfo); for(j = 0; j < desc->funcdesc.cParams; ++j){ if(desc->funcdesc.lprgelemdescParam[j].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT){ recorded_size += desc->funcdesc.cParams * sizeof(INT); break; } } extra_size += 2 * sizeof(INT); /* memberid, name offs */ } for(i = 0; i < info->typeattr.cVars; ++i){ TLBVarDesc *desc = &info->vardescs[i]; recorded_size += 5 * sizeof(INT); /* mandatory fields */ /* optional fields */ if(desc->HelpStringContext != 0) recorded_size += 5 * sizeof(INT); else if(!list_empty(&desc->custdata_list)) recorded_size += 4 * sizeof(INT); /* res9? */ else if(desc->HelpString) recorded_size += 2 * sizeof(INT); else if(desc->HelpContext != 0) recorded_size += sizeof(INT); extra_size += 2 * sizeof(INT); /* memberid, name offs */ } if(!recorded_size && !extra_size) return ret; extra_size += sizeof(INT); /* total aux size for this typeinfo */ aux_seg->len += recorded_size + extra_size; aux_seg->len += sizeof(INT) * (info->typeattr.cVars + info->typeattr.cFuncs); /* offsets at the end */ if(aux_seg->data) aux_seg->data = heap_realloc(aux_seg->data, aux_seg->len); else aux_seg->data = heap_alloc(aux_seg->len); *((DWORD*)((char *)aux_seg->data + ret)) = recorded_size; offsets = (DWORD*)((char *)aux_seg->data + ret + recorded_size + extra_size); offs = 0; funcrecord = (MSFT_FuncRecord*)(((char *)aux_seg->data) + ret + sizeof(INT)); for(i = 0; i < info->typeattr.cFuncs; ++i){ TLBFuncDesc *desc = &info->funcdescs[i]; DWORD size = 6 * sizeof(INT), paramdefault_size = 0, *paramdefault; funcrecord->funcdescsize = sizeof(desc->funcdesc) + desc->funcdesc.cParams * sizeof(ELEMDESC); funcrecord->DataType = WMSFT_append_typedesc(&desc->funcdesc.elemdescFunc.tdesc, file, NULL, &funcrecord->funcdescsize); funcrecord->Flags = desc->funcdesc.wFuncFlags; funcrecord->VtableOffset = desc->funcdesc.oVft; /* FKCCIC: * XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX * ^^^funckind * ^^^ ^invkind * ^has_cust_data * ^^^^callconv * ^has_param_defaults * ^oEntry_is_intresource */ funcrecord->FKCCIC = desc->funcdesc.funckind | (desc->funcdesc.invkind << 3) | (list_empty(&desc->custdata_list) ? 0 : 0x80) | (desc->funcdesc.callconv << 8); if(desc->Entry && desc->Entry != (TLBString*)-1 && IS_INTRESOURCE(desc->Entry)) funcrecord->FKCCIC |= 0x2000; for(j = 0; j < desc->funcdesc.cParams; ++j){ if(desc->funcdesc.lprgelemdescParam[j].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT){ paramdefault_size = sizeof(INT) * desc->funcdesc.cParams; funcrecord->funcdescsize += sizeof(PARAMDESCEX); } } if(paramdefault_size > 0) funcrecord->FKCCIC |= 0x1000; funcrecord->nrargs = desc->funcdesc.cParams; funcrecord->nroargs = desc->funcdesc.cParamsOpt; /* optional fields */ /* res9? resA? */ if(!list_empty(&desc->custdata_list)){ size += 7 * sizeof(INT); funcrecord->HelpContext = desc->helpcontext; if(desc->HelpString) funcrecord->oHelpString = desc->HelpString->offset; else funcrecord->oHelpString = -1; if(!desc->Entry) funcrecord->oEntry = -1; else if(IS_INTRESOURCE(desc->Entry)) funcrecord->oEntry = LOWORD(desc->Entry); else funcrecord->oEntry = desc->Entry->offset; funcrecord->res9 = -1; funcrecord->resA = -1; funcrecord->HelpStringContext = desc->HelpStringContext; funcrecord->oCustData = WMSFT_compile_custdata(&desc->custdata_list, file); }else if(desc->HelpStringContext != 0){ size += 6 * sizeof(INT); funcrecord->HelpContext = desc->helpcontext; if(desc->HelpString) funcrecord->oHelpString = desc->HelpString->offset; else funcrecord->oHelpString = -1; if(!desc->Entry) funcrecord->oEntry = -1; else if(IS_INTRESOURCE(desc->Entry)) funcrecord->oEntry = LOWORD(desc->Entry); else funcrecord->oEntry = desc->Entry->offset; funcrecord->res9 = -1; funcrecord->resA = -1; funcrecord->HelpStringContext = desc->HelpStringContext; }else if(desc->Entry){ size += 3 * sizeof(INT); funcrecord->HelpContext = desc->helpcontext; if(desc->HelpString) funcrecord->oHelpString = desc->HelpString->offset; else funcrecord->oHelpString = -1; if(!desc->Entry) funcrecord->oEntry = -1; else if(IS_INTRESOURCE(desc->Entry)) funcrecord->oEntry = LOWORD(desc->Entry); else funcrecord->oEntry = desc->Entry->offset; }else if(desc->HelpString){ size += 2 * sizeof(INT); funcrecord->HelpContext = desc->helpcontext; funcrecord->oHelpString = desc->HelpString->offset; }else if(desc->helpcontext){ size += sizeof(INT); funcrecord->HelpContext = desc->helpcontext; } paramdefault = (DWORD*)((char *)funcrecord + size); size += paramdefault_size; for(j = 0; j < desc->funcdesc.cParams; ++j){ MSFT_ParameterInfo *info = (MSFT_ParameterInfo*)(((char *)funcrecord) + size); info->DataType = WMSFT_append_typedesc(&desc->funcdesc.lprgelemdescParam[j].tdesc, file, NULL, &funcrecord->funcdescsize); if(desc->pParamDesc[j].Name) info->oName = desc->pParamDesc[j].Name->offset; else info->oName = -1; info->Flags = desc->funcdesc.lprgelemdescParam[j].u.paramdesc.wParamFlags; if(paramdefault_size){ if(desc->funcdesc.lprgelemdescParam[j].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) *paramdefault = WMSFT_encode_variant(&desc->funcdesc.lprgelemdescParam[j].u.paramdesc.pparamdescex->varDefaultValue, file); else if(paramdefault_size) *paramdefault = -1; ++paramdefault; } size += sizeof(MSFT_ParameterInfo); } funcrecord->Info = size | (i << 16); /* is it just the index? */ *offsets = offs; offs += size; ++offsets; funcrecord = (MSFT_FuncRecord*)(((char*)funcrecord) + size); } varrecord = (MSFT_VarRecord*)funcrecord; for(i = 0; i < info->typeattr.cVars; ++i){ TLBVarDesc *desc = &info->vardescs[i]; DWORD size = 5 * sizeof(INT); varrecord->vardescsize = sizeof(desc->vardesc); varrecord->DataType = WMSFT_append_typedesc(&desc->vardesc.elemdescVar.tdesc, file, NULL, &varrecord->vardescsize); varrecord->Flags = desc->vardesc.wVarFlags; varrecord->VarKind = desc->vardesc.varkind; if(desc->vardesc.varkind == VAR_CONST){ varrecord->vardescsize += sizeof(VARIANT); varrecord->OffsValue = WMSFT_encode_variant(desc->vardesc.u.lpvarValue, file); }else varrecord->OffsValue = desc->vardesc.u.oInst; /* res9? */ if(desc->HelpStringContext != 0){ size += 5 * sizeof(INT); varrecord->HelpContext = desc->HelpContext; if(desc->HelpString) varrecord->HelpString = desc->HelpString->offset; else varrecord->HelpString = -1; varrecord->res9 = -1; varrecord->oCustData = WMSFT_compile_custdata(&desc->custdata_list, file); varrecord->HelpStringContext = desc->HelpStringContext; }else if(!list_empty(&desc->custdata_list)){ size += 4 * sizeof(INT); varrecord->HelpContext = desc->HelpContext; if(desc->HelpString) varrecord->HelpString = desc->HelpString->offset; else varrecord->HelpString = -1; varrecord->res9 = -1; varrecord->oCustData = WMSFT_compile_custdata(&desc->custdata_list, file); }else if(desc->HelpString){ size += 2 * sizeof(INT); varrecord->HelpContext = desc->HelpContext; if(desc->HelpString) varrecord->HelpString = desc->HelpString->offset; else varrecord->HelpString = -1; }else if(desc->HelpContext != 0){ size += sizeof(INT); varrecord->HelpContext = desc->HelpContext; } varrecord->Info = size | (i << 16); *offsets = offs; offs += size; ++offsets; varrecord = (MSFT_VarRecord*)(((char*)varrecord) + size); } memid = (MEMBERID*)varrecord; for(i = 0; i < info->typeattr.cFuncs; ++i){ TLBFuncDesc *desc = &info->funcdescs[i]; *memid = desc->funcdesc.memid; ++memid; } for(i = 0; i < info->typeattr.cVars; ++i){ TLBVarDesc *desc = &info->vardescs[i]; *memid = desc->vardesc.memid; ++memid; } name = (UINT*)memid; for(i = 0; i < info->typeattr.cFuncs; ++i){ TLBFuncDesc *desc = &info->funcdescs[i]; if(desc->Name) *name = desc->Name->offset; else *name = -1; ++name; } for(i = 0; i < info->typeattr.cVars; ++i){ TLBVarDesc *desc = &info->vardescs[i]; if(desc->Name) *name = desc->Name->offset; else *name = -1; ++name; } return ret; } typedef struct tagWMSFT_RefChunk { DWORD href; DWORD res04; DWORD res08; DWORD next; } WMSFT_RefChunk; static DWORD WMSFT_compile_typeinfo_ref(ITypeInfoImpl *info, WMSFT_TLBFile *file) { DWORD offs = file->ref_seg.len, i; WMSFT_RefChunk *chunk; file->ref_seg.len += info->typeattr.cImplTypes * sizeof(WMSFT_RefChunk); if(!file->ref_seg.data) file->ref_seg.data = heap_alloc(file->ref_seg.len); else file->ref_seg.data = heap_realloc(file->ref_seg.data, file->ref_seg.len); chunk = (WMSFT_RefChunk*)((char*)file->ref_seg.data + offs); for(i = 0; i < info->typeattr.cImplTypes; ++i){ chunk->href = info->impltypes[i].hRef; chunk->res04 = info->impltypes[i].implflags; chunk->res08 = -1; if(i < info->typeattr.cImplTypes - 1) chunk->next = offs + sizeof(WMSFT_RefChunk) * (i + 1); else chunk->next = -1; ++chunk; } return offs; } static DWORD WMSFT_compile_typeinfo(ITypeInfoImpl *info, INT16 index, WMSFT_TLBFile *file, char *data) { DWORD size; size = sizeof(MSFT_TypeInfoBase); if(data){ MSFT_TypeInfoBase *base = (MSFT_TypeInfoBase*)data; if(info->typeattr.wTypeFlags & TYPEFLAG_FDUAL) base->typekind = TKIND_DISPATCH; else base->typekind = info->typeattr.typekind; base->typekind |= index << 16; /* TODO: There are some other flags here */ base->typekind |= (info->typeattr.cbAlignment << 11) | (info->typeattr.cbAlignment << 6); base->memoffset = WMSFT_compile_typeinfo_aux(info, file); base->res2 = 0; base->res3 = 0; base->res4 = 3; base->res5 = 0; base->cElement = (info->typeattr.cVars << 16) | info->typeattr.cFuncs; base->res7 = 0; base->res8 = 0; base->res9 = 0; base->resA = 0; if(info->guid) base->posguid = info->guid->offset; else base->posguid = -1; base->flags = info->typeattr.wTypeFlags; if(info->Name) { base->NameOffset = info->Name->offset; ((unsigned char*)file->name_seg.data)[info->Name->offset+9] = 0x38; *(HREFTYPE*)((unsigned char*)file->name_seg.data+info->Name->offset) = info->hreftype; }else { base->NameOffset = -1; } base->version = (info->typeattr.wMinorVerNum << 16) | info->typeattr.wMajorVerNum; if(info->DocString) base->docstringoffs = info->DocString->offset; else base->docstringoffs = -1; base->helpstringcontext = info->dwHelpStringContext; base->helpcontext = info->dwHelpContext; base->oCustData = WMSFT_compile_custdata(info->pcustdata_list, file); base->cImplTypes = info->typeattr.cImplTypes; base->cbSizeVft = info->typeattr.cbSizeVft; base->size = info->typeattr.cbSizeInstance; if(info->typeattr.typekind == TKIND_COCLASS){ base->datatype1 = WMSFT_compile_typeinfo_ref(info, file); }else if(info->typeattr.typekind == TKIND_ALIAS){ base->datatype1 = WMSFT_append_typedesc(info->tdescAlias, file, NULL, NULL); }else if(info->typeattr.typekind == TKIND_MODULE){ if(info->DllName) base->datatype1 = info->DllName->offset; else base->datatype1 = -1; }else{ if(info->typeattr.cImplTypes > 0) base->datatype1 = info->impltypes[0].hRef; else base->datatype1 = -1; } base->datatype2 = index; /* FIXME: i think there's more here */ base->res18 = 0; base->res19 = -1; } return size; } static void WMSFT_compile_typeinfo_seg(ITypeLibImpl *This, WMSFT_TLBFile *file, DWORD *junk) { UINT i; file->typeinfo_seg.len = 0; for(i = 0; i < This->TypeInfoCount; ++i){ ITypeInfoImpl *info = This->typeinfos[i]; *junk = file->typeinfo_seg.len; ++junk; file->typeinfo_seg.len += WMSFT_compile_typeinfo(info, i, NULL, NULL); } file->typeinfo_seg.data = heap_alloc(file->typeinfo_seg.len); memset(file->typeinfo_seg.data, 0x96, file->typeinfo_seg.len); file->aux_seg.len = 0; file->aux_seg.data = NULL; file->typeinfo_seg.len = 0; for(i = 0; i < This->TypeInfoCount; ++i){ ITypeInfoImpl *info = This->typeinfos[i]; file->typeinfo_seg.len += WMSFT_compile_typeinfo(info, i, file, ((char *)file->typeinfo_seg.data) + file->typeinfo_seg.len); } } typedef struct tagWMSFT_ImpFile { INT guid_offs; LCID lcid; DWORD version; } WMSFT_ImpFile; static void WMSFT_compile_impfile(ITypeLibImpl *This, WMSFT_TLBFile *file) { TLBImpLib *implib; WMSFT_ImpFile *impfile; char *data; DWORD last_offs = 0; file->impfile_seg.len = 0; LIST_FOR_EACH_ENTRY(implib, &This->implib_list, TLBImpLib, entry){ int size = 0; if(implib->name){ WCHAR *path = strrchrW(implib->name, '\\'); if(path) ++path; else path = implib->name; size = WideCharToMultiByte(CP_ACP, 0, path, strlenW(path), NULL, 0, NULL, NULL); if (size == 0) ERR("failed to convert wide string: %s\n", debugstr_w(path)); } size += sizeof(INT16); if (size % 4) size = (size + 4) & ~0x3; if (size < 8) size = 8; file->impfile_seg.len += sizeof(WMSFT_ImpFile) + size; } data = file->impfile_seg.data = heap_alloc(file->impfile_seg.len); LIST_FOR_EACH_ENTRY(implib, &This->implib_list, TLBImpLib, entry){ int strlen = 0, size; impfile = (WMSFT_ImpFile*)data; impfile->guid_offs = implib->guid->offset; impfile->lcid = implib->lcid; impfile->version = (implib->wVersionMinor << 16) | implib->wVersionMajor; data += sizeof(WMSFT_ImpFile); if(implib->name){ WCHAR *path= strrchrW(implib->name, '\\'); if(path) ++path; else path = implib->name; strlen = WideCharToMultiByte(CP_ACP, 0, path, strlenW(path), data + sizeof(INT16), file->impfile_seg.len - last_offs - sizeof(INT16), NULL, NULL); if (strlen == 0) ERR("failed to convert wide string: %s\n", debugstr_w(path)); } *((INT16*)data) = (strlen << 2) | 1; /* FIXME: is that a flag, or what? */ size = strlen + sizeof(INT16); if (size % 4) size = (size + 4) & ~0x3; if (size < 8) size = 8; memset(data + sizeof(INT16) + strlen, 0x57, size - strlen - sizeof(INT16)); data += size; implib->offset = last_offs; last_offs += size + sizeof(WMSFT_ImpFile); } } static void WMSFT_compile_impinfo(ITypeLibImpl *This, WMSFT_TLBFile *file) { MSFT_ImpInfo *info; TLBRefType *ref_type; UINT i = 0; WMSFT_compile_impfile(This, file); file->impinfo_seg.len = sizeof(MSFT_ImpInfo) * list_count(&This->ref_list); info = file->impinfo_seg.data = heap_alloc(file->impinfo_seg.len); LIST_FOR_EACH_ENTRY(ref_type, &This->ref_list, TLBRefType, entry){ info->flags = i | ((ref_type->tkind & 0xFF) << 24); if(ref_type->index == TLB_REF_USE_GUID){ info->flags |= MSFT_IMPINFO_OFFSET_IS_GUID; info->oGuid = ref_type->guid->offset; }else info->oGuid = ref_type->index; info->oImpFile = ref_type->pImpTLInfo->offset; ++i; ++info; } } static void WMSFT_compile_guidhash(ITypeLibImpl *This, WMSFT_TLBFile *file) { file->guidhash_seg.len = 0x80; file->guidhash_seg.data = heap_alloc(file->guidhash_seg.len); memset(file->guidhash_seg.data, 0xFF, file->guidhash_seg.len); } static void WMSFT_compile_namehash(ITypeLibImpl *This, WMSFT_TLBFile *file) { file->namehash_seg.len = 0x200; file->namehash_seg.data = heap_alloc(file->namehash_seg.len); memset(file->namehash_seg.data, 0xFF, file->namehash_seg.len); } static void tmp_fill_segdir_seg(MSFT_pSeg *segdir, WMSFT_SegContents *contents, DWORD *running_offset) { if(contents && contents->len){ segdir->offset = *running_offset; segdir->length = contents->len; *running_offset += segdir->length; }else{ segdir->offset = -1; segdir->length = 0; } /* TODO: do these ever change? */ segdir->res08 = -1; segdir->res0c = 0xf; } static void WMSFT_write_segment(HANDLE outfile, WMSFT_SegContents *segment) { DWORD written; if(segment) WriteFile(outfile, segment->data, segment->len, &written, NULL); } static HRESULT WMSFT_fixup_typeinfos(ITypeLibImpl *This, WMSFT_TLBFile *file, DWORD file_len) { DWORD i; MSFT_TypeInfoBase *base = (MSFT_TypeInfoBase *)file->typeinfo_seg.data; for(i = 0; i < This->TypeInfoCount; ++i){ base->memoffset += file_len; ++base; } return S_OK; } static void WMSFT_free_file(WMSFT_TLBFile *file) { HeapFree(GetProcessHeap(), 0, file->typeinfo_seg.data); HeapFree(GetProcessHeap(), 0, file->guidhash_seg.data); HeapFree(GetProcessHeap(), 0, file->guid_seg.data); HeapFree(GetProcessHeap(), 0, file->ref_seg.data); HeapFree(GetProcessHeap(), 0, file->impinfo_seg.data); HeapFree(GetProcessHeap(), 0, file->impfile_seg.data); HeapFree(GetProcessHeap(), 0, file->namehash_seg.data); HeapFree(GetProcessHeap(), 0, file->name_seg.data); HeapFree(GetProcessHeap(), 0, file->string_seg.data); HeapFree(GetProcessHeap(), 0, file->typdesc_seg.data); HeapFree(GetProcessHeap(), 0, file->arraydesc_seg.data); HeapFree(GetProcessHeap(), 0, file->custdata_seg.data); HeapFree(GetProcessHeap(), 0, file->cdguids_seg.data); HeapFree(GetProcessHeap(), 0, file->aux_seg.data); } static HRESULT WINAPI ICreateTypeLib2_fnSaveAllChanges(ICreateTypeLib2 *iface) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); WMSFT_TLBFile file; DWORD written, junk_size, junk_offs, running_offset; BOOL br; HANDLE outfile; HRESULT hres; DWORD *junk; UINT i; TRACE("%p\n", This); for(i = 0; i < This->TypeInfoCount; ++i) if(This->typeinfos[i]->needs_layout) ICreateTypeInfo2_LayOut(&This->typeinfos[i]->ICreateTypeInfo2_iface); memset(&file, 0, sizeof(file)); file.header.magic1 = 0x5446534D; file.header.magic2 = 0x00010002; file.header.lcid = This->set_lcid ? This->set_lcid : MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); file.header.lcid2 = This->set_lcid; file.header.varflags = 0x40 | This->syskind; if (This->HelpFile) file.header.varflags |= 0x10; if (This->HelpStringDll) file.header.varflags |= HELPDLLFLAG; file.header.version = (This->ver_minor << 16) | This->ver_major; file.header.flags = This->libflags; file.header.helpstringcontext = 0; /* TODO - SetHelpStringContext not implemented yet */ file.header.helpcontext = This->dwHelpContext; file.header.res44 = 0x20; file.header.res48 = 0x80; file.header.dispatchpos = This->dispatch_href; WMSFT_compile_namehash(This, &file); /* do name and string compilation to get offsets for other compilations */ hres = WMSFT_compile_names(This, &file); if (FAILED(hres)){ WMSFT_free_file(&file); return hres; } hres = WMSFT_compile_strings(This, &file); if (FAILED(hres)){ WMSFT_free_file(&file); return hres; } WMSFT_compile_guidhash(This, &file); hres = WMSFT_compile_guids(This, &file); if (FAILED(hres)){ WMSFT_free_file(&file); return hres; } if(This->HelpFile) file.header.helpfile = This->HelpFile->offset; else file.header.helpfile = -1; if(This->DocString) file.header.helpstring = This->DocString->offset; else file.header.helpstring = -1; /* do some more segment compilation */ file.header.nimpinfos = list_count(&This->ref_list); file.header.nrtypeinfos = This->TypeInfoCount; if(This->Name) file.header.NameOffset = This->Name->offset; else file.header.NameOffset = -1; file.header.CustomDataOffset = WMSFT_compile_custdata(&This->custdata_list, &file); if(This->guid) file.header.posguid = This->guid->offset; else file.header.posguid = -1; junk_size = file.header.nrtypeinfos * sizeof(DWORD); if(file.header.varflags & HELPDLLFLAG) junk_size += sizeof(DWORD); if(junk_size){ junk = heap_alloc_zero(junk_size); if(file.header.varflags & HELPDLLFLAG){ *junk = This->HelpStringDll->offset; junk_offs = 1; }else junk_offs = 0; }else{ junk = NULL; junk_offs = 0; } WMSFT_compile_typeinfo_seg(This, &file, junk + junk_offs); WMSFT_compile_impinfo(This, &file); running_offset = 0; TRACE("header at: 0x%x\n", running_offset); running_offset += sizeof(file.header); TRACE("junk at: 0x%x\n", running_offset); running_offset += junk_size; TRACE("segdir at: 0x%x\n", running_offset); running_offset += sizeof(file.segdir); TRACE("typeinfo at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pTypeInfoTab, &file.typeinfo_seg, &running_offset); TRACE("guidhashtab at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pGuidHashTab, &file.guidhash_seg, &running_offset); TRACE("guidtab at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pGuidTab, &file.guid_seg, &running_offset); TRACE("reftab at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pRefTab, &file.ref_seg, &running_offset); TRACE("impinfo at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pImpInfo, &file.impinfo_seg, &running_offset); TRACE("impfiles at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pImpFiles, &file.impfile_seg, &running_offset); TRACE("namehashtab at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pNameHashTab, &file.namehash_seg, &running_offset); TRACE("nametab at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pNametab, &file.name_seg, &running_offset); TRACE("stringtab at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pStringtab, &file.string_seg, &running_offset); TRACE("typdesc at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pTypdescTab, &file.typdesc_seg, &running_offset); TRACE("arraydescriptions at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pArrayDescriptions, &file.arraydesc_seg, &running_offset); TRACE("custdata at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pCustData, &file.custdata_seg, &running_offset); TRACE("cdguids at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.pCDGuids, &file.cdguids_seg, &running_offset); TRACE("res0e at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.res0e, NULL, &running_offset); TRACE("res0f at: 0x%x\n", running_offset); tmp_fill_segdir_seg(&file.segdir.res0f, NULL, &running_offset); TRACE("aux_seg at: 0x%x\n", running_offset); WMSFT_fixup_typeinfos(This, &file, running_offset); outfile = CreateFileW(This->path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if (outfile == INVALID_HANDLE_VALUE){ WMSFT_free_file(&file); heap_free(junk); return TYPE_E_IOERROR; } br = WriteFile(outfile, &file.header, sizeof(file.header), &written, NULL); if (!br) { WMSFT_free_file(&file); CloseHandle(outfile); heap_free(junk); return TYPE_E_IOERROR; } br = WriteFile(outfile, junk, junk_size, &written, NULL); heap_free(junk); if (!br) { WMSFT_free_file(&file); CloseHandle(outfile); return TYPE_E_IOERROR; } br = WriteFile(outfile, &file.segdir, sizeof(file.segdir), &written, NULL); if (!br) { WMSFT_free_file(&file); CloseHandle(outfile); return TYPE_E_IOERROR; } WMSFT_write_segment(outfile, &file.typeinfo_seg); WMSFT_write_segment(outfile, &file.guidhash_seg); WMSFT_write_segment(outfile, &file.guid_seg); WMSFT_write_segment(outfile, &file.ref_seg); WMSFT_write_segment(outfile, &file.impinfo_seg); WMSFT_write_segment(outfile, &file.impfile_seg); WMSFT_write_segment(outfile, &file.namehash_seg); WMSFT_write_segment(outfile, &file.name_seg); WMSFT_write_segment(outfile, &file.string_seg); WMSFT_write_segment(outfile, &file.typdesc_seg); WMSFT_write_segment(outfile, &file.arraydesc_seg); WMSFT_write_segment(outfile, &file.custdata_seg); WMSFT_write_segment(outfile, &file.cdguids_seg); WMSFT_write_segment(outfile, &file.aux_seg); WMSFT_free_file(&file); CloseHandle(outfile); return S_OK; } static HRESULT WINAPI ICreateTypeLib2_fnDeleteTypeInfo(ICreateTypeLib2 *iface, LPOLESTR name) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); FIXME("%p %s - stub\n", This, wine_dbgstr_w(name)); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeLib2_fnSetCustData(ICreateTypeLib2 *iface, REFGUID guid, VARIANT *varVal) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TLBGuid *tlbguid; TRACE("%p %s %p\n", This, debugstr_guid(guid), varVal); if (!guid || !varVal) return E_INVALIDARG; tlbguid = TLB_append_guid(&This->guid_list, guid, -1); return TLB_set_custdata(&This->custdata_list, tlbguid, varVal); } static HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringContext(ICreateTypeLib2 *iface, ULONG helpStringContext) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); FIXME("%p %u - stub\n", This, helpStringContext); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringDll(ICreateTypeLib2 *iface, LPOLESTR filename) { ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface); TRACE("%p %s\n", This, wine_dbgstr_w(filename)); if (!filename) return E_INVALIDARG; This->HelpStringDll = TLB_append_str(&This->string_list, filename); return S_OK; } static const ICreateTypeLib2Vtbl CreateTypeLib2Vtbl = { ICreateTypeLib2_fnQueryInterface, ICreateTypeLib2_fnAddRef, ICreateTypeLib2_fnRelease, ICreateTypeLib2_fnCreateTypeInfo, ICreateTypeLib2_fnSetName, ICreateTypeLib2_fnSetVersion, ICreateTypeLib2_fnSetGuid, ICreateTypeLib2_fnSetDocString, ICreateTypeLib2_fnSetHelpFileName, ICreateTypeLib2_fnSetHelpContext, ICreateTypeLib2_fnSetLcid, ICreateTypeLib2_fnSetLibFlags, ICreateTypeLib2_fnSaveAllChanges, ICreateTypeLib2_fnDeleteTypeInfo, ICreateTypeLib2_fnSetCustData, ICreateTypeLib2_fnSetHelpStringContext, ICreateTypeLib2_fnSetHelpStringDll }; static HRESULT WINAPI ICreateTypeInfo2_fnQueryInterface(ICreateTypeInfo2 *iface, REFIID riid, void **object) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); return ITypeInfo2_QueryInterface(&This->ITypeInfo2_iface, riid, object); } static ULONG WINAPI ICreateTypeInfo2_fnAddRef(ICreateTypeInfo2 *iface) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); return ITypeInfo2_AddRef(&This->ITypeInfo2_iface); } static ULONG WINAPI ICreateTypeInfo2_fnRelease(ICreateTypeInfo2 *iface) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); return ITypeInfo2_Release(&This->ITypeInfo2_iface); } static HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface, REFGUID guid) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %s\n", This, debugstr_guid(guid)); This->guid = TLB_append_guid(&This->pTypeLib->guid_list, guid, This->hreftype); return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface, UINT typeFlags) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); WORD old_flags; HRESULT hres; TRACE("%p %x\n", This, typeFlags); if (typeFlags & TYPEFLAG_FDUAL) { static const WCHAR stdole2tlb[] = { 's','t','d','o','l','e','2','.','t','l','b',0 }; ITypeLib *stdole; ITypeInfo *dispatch; HREFTYPE hreftype; HRESULT hres; hres = LoadTypeLib(stdole2tlb, &stdole); if(FAILED(hres)) return hres; hres = ITypeLib_GetTypeInfoOfGuid(stdole, &IID_IDispatch, &dispatch); ITypeLib_Release(stdole); if(FAILED(hres)) return hres; hres = ICreateTypeInfo2_AddRefTypeInfo(iface, dispatch, &hreftype); ITypeInfo_Release(dispatch); if(FAILED(hres)) return hres; } old_flags = This->typeattr.wTypeFlags; This->typeattr.wTypeFlags = typeFlags; hres = ICreateTypeInfo2_LayOut(iface); if (FAILED(hres)) { This->typeattr.wTypeFlags = old_flags; return hres; } return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetDocString(ICreateTypeInfo2 *iface, LPOLESTR doc) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %s\n", This, wine_dbgstr_w(doc)); if (!doc) return E_INVALIDARG; This->DocString = TLB_append_str(&This->pTypeLib->string_list, doc); return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpContext(ICreateTypeInfo2 *iface, DWORD helpContext) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %d\n", This, helpContext); This->dwHelpContext = helpContext; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetVersion(ICreateTypeInfo2 *iface, WORD majorVerNum, WORD minorVerNum) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %d %d\n", This, majorVerNum, minorVerNum); This->typeattr.wMajorVerNum = majorVerNum; This->typeattr.wMinorVerNum = minorVerNum; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(ICreateTypeInfo2 *iface, ITypeInfo *typeInfo, HREFTYPE *refType) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); UINT index; ITypeLib *container; TLBRefType *ref_type; TLBImpLib *implib; TYPEATTR *typeattr; TLIBATTR *libattr; HRESULT hres; TRACE("%p %p %p\n", This, typeInfo, refType); if (!typeInfo || !refType) return E_INVALIDARG; hres = ITypeInfo_GetContainingTypeLib(typeInfo, &container, &index); if (FAILED(hres)) return hres; if (container == (ITypeLib*)&This->pTypeLib->ITypeLib2_iface) { ITypeInfoImpl *target = impl_from_ITypeInfo(typeInfo); ITypeLib_Release(container); *refType = target->hreftype; return S_OK; } hres = ITypeLib_GetLibAttr(container, &libattr); if (FAILED(hres)) { ITypeLib_Release(container); return hres; } LIST_FOR_EACH_ENTRY(implib, &This->pTypeLib->implib_list, TLBImpLib, entry){ if(IsEqualGUID(&implib->guid->guid, &libattr->guid) && implib->lcid == libattr->lcid && implib->wVersionMajor == libattr->wMajorVerNum && implib->wVersionMinor == libattr->wMinorVerNum) break; } if(&implib->entry == &This->pTypeLib->implib_list){ implib = heap_alloc_zero(sizeof(TLBImpLib)); if((ITypeLib2Vtbl*)container->lpVtbl == &tlbvt){ const ITypeLibImpl *our_container = impl_from_ITypeLib2((ITypeLib2*)container); implib->name = SysAllocString(our_container->path); }else{ hres = QueryPathOfRegTypeLib(&libattr->guid, libattr->wMajorVerNum, libattr->wMinorVerNum, libattr->lcid, &implib->name); if(FAILED(hres)){ implib->name = NULL; TRACE("QueryPathOfRegTypeLib failed, no name stored: %08x\n", hres); } } implib->guid = TLB_append_guid(&This->pTypeLib->guid_list, &libattr->guid, 2); implib->lcid = libattr->lcid; implib->wVersionMajor = libattr->wMajorVerNum; implib->wVersionMinor = libattr->wMinorVerNum; list_add_tail(&This->pTypeLib->implib_list, &implib->entry); } ITypeLib_ReleaseTLibAttr(container, libattr); ITypeLib_Release(container); hres = ITypeInfo_GetTypeAttr(typeInfo, &typeattr); if (FAILED(hres)) return hres; index = 0; LIST_FOR_EACH_ENTRY(ref_type, &This->pTypeLib->ref_list, TLBRefType, entry){ if(ref_type->index == TLB_REF_USE_GUID && IsEqualGUID(&ref_type->guid->guid, &typeattr->guid) && ref_type->tkind == typeattr->typekind) break; ++index; } if(&ref_type->entry == &This->pTypeLib->ref_list){ ref_type = heap_alloc_zero(sizeof(TLBRefType)); ref_type->tkind = typeattr->typekind; ref_type->pImpTLInfo = implib; ref_type->reference = index * sizeof(MSFT_ImpInfo); ref_type->index = TLB_REF_USE_GUID; ref_type->guid = TLB_append_guid(&This->pTypeLib->guid_list, &typeattr->guid, ref_type->reference+1); list_add_tail(&This->pTypeLib->ref_list, &ref_type->entry); } ITypeInfo_ReleaseTypeAttr(typeInfo, typeattr); *refType = ref_type->reference | 0x1; if(IsEqualGUID(&ref_type->guid->guid, &IID_IDispatch)) This->pTypeLib->dispatch_href = *refType; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc(ICreateTypeInfo2 *iface, UINT index, FUNCDESC *funcDesc) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBFuncDesc tmp_func_desc, *func_desc; int buf_size, i; char *buffer; HRESULT hres; TRACE("%p %u %p\n", This, index, funcDesc); if (!funcDesc || funcDesc->oVft & 3) return E_INVALIDARG; switch (This->typeattr.typekind) { case TKIND_MODULE: if (funcDesc->funckind != FUNC_STATIC) return TYPE_E_BADMODULEKIND; break; case TKIND_DISPATCH: if (funcDesc->funckind != FUNC_DISPATCH) return TYPE_E_BADMODULEKIND; break; default: if (funcDesc->funckind != FUNC_PUREVIRTUAL) return TYPE_E_BADMODULEKIND; } if (index > This->typeattr.cFuncs) return TYPE_E_ELEMENTNOTFOUND; if (funcDesc->invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF) && !funcDesc->cParams) return TYPE_E_INCONSISTENTPROPFUNCS; #ifdef _WIN64 if(This->pTypeLib->syskind == SYS_WIN64 && funcDesc->oVft % 8 != 0) return E_INVALIDARG; #endif memset(&tmp_func_desc, 0, sizeof(tmp_func_desc)); TLBFuncDesc_Constructor(&tmp_func_desc); tmp_func_desc.funcdesc = *funcDesc; if (tmp_func_desc.funcdesc.oVft != 0) tmp_func_desc.funcdesc.oVft |= 1; if (funcDesc->cScodes && funcDesc->lprgscode) { tmp_func_desc.funcdesc.lprgscode = heap_alloc(sizeof(SCODE) * funcDesc->cScodes); memcpy(tmp_func_desc.funcdesc.lprgscode, funcDesc->lprgscode, sizeof(SCODE) * funcDesc->cScodes); } else { tmp_func_desc.funcdesc.lprgscode = NULL; tmp_func_desc.funcdesc.cScodes = 0; } buf_size = TLB_SizeElemDesc(&funcDesc->elemdescFunc); for (i = 0; i < funcDesc->cParams; ++i) { buf_size += sizeof(ELEMDESC); buf_size += TLB_SizeElemDesc(funcDesc->lprgelemdescParam + i); } tmp_func_desc.funcdesc.lprgelemdescParam = heap_alloc(buf_size); buffer = (char*)(tmp_func_desc.funcdesc.lprgelemdescParam + funcDesc->cParams); hres = TLB_CopyElemDesc(&funcDesc->elemdescFunc, &tmp_func_desc.funcdesc.elemdescFunc, &buffer); if (FAILED(hres)) { heap_free(tmp_func_desc.funcdesc.lprgelemdescParam); heap_free(tmp_func_desc.funcdesc.lprgscode); return hres; } for (i = 0; i < funcDesc->cParams; ++i) { hres = TLB_CopyElemDesc(funcDesc->lprgelemdescParam + i, tmp_func_desc.funcdesc.lprgelemdescParam + i, &buffer); if (FAILED(hres)) { heap_free(tmp_func_desc.funcdesc.lprgelemdescParam); heap_free(tmp_func_desc.funcdesc.lprgscode); return hres; } if (tmp_func_desc.funcdesc.lprgelemdescParam[i].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT && tmp_func_desc.funcdesc.lprgelemdescParam[i].tdesc.vt != VT_VARIANT && tmp_func_desc.funcdesc.lprgelemdescParam[i].tdesc.vt != VT_USERDEFINED){ hres = TLB_SanitizeVariant(&tmp_func_desc.funcdesc.lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue); if (FAILED(hres)) { heap_free(tmp_func_desc.funcdesc.lprgelemdescParam); heap_free(tmp_func_desc.funcdesc.lprgscode); return hres; } } } tmp_func_desc.pParamDesc = TLBParDesc_Constructor(funcDesc->cParams); if (This->funcdescs) { This->funcdescs = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->funcdescs, sizeof(TLBFuncDesc) * (This->typeattr.cFuncs + 1)); if (index < This->typeattr.cFuncs) { memmove(This->funcdescs + index + 1, This->funcdescs + index, (This->typeattr.cFuncs - index) * sizeof(TLBFuncDesc)); func_desc = This->funcdescs + index; } else func_desc = This->funcdescs + This->typeattr.cFuncs; /* move custdata lists to the new memory location */ for(i = 0; i < This->typeattr.cFuncs + 1; ++i){ if(index != i){ TLBFuncDesc *fd = &This->funcdescs[i]; if(fd->custdata_list.prev == fd->custdata_list.next) list_init(&fd->custdata_list); else{ fd->custdata_list.prev->next = &fd->custdata_list; fd->custdata_list.next->prev = &fd->custdata_list; } } } } else func_desc = This->funcdescs = heap_alloc(sizeof(TLBFuncDesc)); memcpy(func_desc, &tmp_func_desc, sizeof(tmp_func_desc)); list_init(&func_desc->custdata_list); ++This->typeattr.cFuncs; This->needs_layout = TRUE; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnAddImplType(ICreateTypeInfo2 *iface, UINT index, HREFTYPE refType) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBImplType *impl_type; HRESULT hres; TRACE("%p %u %d\n", This, index, refType); switch(This->typeattr.typekind){ case TKIND_COCLASS: { if (index == -1) { FIXME("Unhandled index: -1\n"); return E_NOTIMPL; } if(index != This->typeattr.cImplTypes) return TYPE_E_ELEMENTNOTFOUND; break; } case TKIND_INTERFACE: case TKIND_DISPATCH: if (index != 0 || This->typeattr.cImplTypes) return TYPE_E_ELEMENTNOTFOUND; break; default: FIXME("Unimplemented typekind: %d\n", This->typeattr.typekind); return E_NOTIMPL; } if (This->impltypes){ UINT i; This->impltypes = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->impltypes, sizeof(TLBImplType) * (This->typeattr.cImplTypes + 1)); if (index < This->typeattr.cImplTypes) { memmove(This->impltypes + index + 1, This->impltypes + index, (This->typeattr.cImplTypes - index) * sizeof(TLBImplType)); impl_type = This->impltypes + index; } else impl_type = This->impltypes + This->typeattr.cImplTypes; /* move custdata lists to the new memory location */ for(i = 0; i < This->typeattr.cImplTypes + 1; ++i){ if(index != i){ TLBImplType *it = &This->impltypes[i]; if(it->custdata_list.prev == it->custdata_list.next) list_init(&it->custdata_list); else{ it->custdata_list.prev->next = &it->custdata_list; it->custdata_list.next->prev = &it->custdata_list; } } } } else impl_type = This->impltypes = heap_alloc(sizeof(TLBImplType)); memset(impl_type, 0, sizeof(TLBImplType)); TLBImplType_Constructor(impl_type); impl_type->hRef = refType; ++This->typeattr.cImplTypes; if((refType & (~0x3)) == (This->pTypeLib->dispatch_href & (~0x3))) This->typeattr.wTypeFlags |= TYPEFLAG_FDISPATCHABLE; hres = ICreateTypeInfo2_LayOut(iface); if (FAILED(hres)) return hres; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeFlags(ICreateTypeInfo2 *iface, UINT index, INT implTypeFlags) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBImplType *impl_type = &This->impltypes[index]; TRACE("%p %u %x\n", This, index, implTypeFlags); if (This->typeattr.typekind != TKIND_COCLASS) return TYPE_E_BADMODULEKIND; if (index >= This->typeattr.cImplTypes) return TYPE_E_ELEMENTNOTFOUND; impl_type->implflags = implTypeFlags; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetAlignment(ICreateTypeInfo2 *iface, WORD alignment) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %d\n", This, alignment); This->typeattr.cbAlignment = alignment; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetSchema(ICreateTypeInfo2 *iface, LPOLESTR schema) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %s\n", This, wine_dbgstr_w(schema)); if (!schema) return E_INVALIDARG; This->Schema = TLB_append_str(&This->pTypeLib->string_list, schema); This->typeattr.lpstrSchema = This->Schema->str; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(ICreateTypeInfo2 *iface, UINT index, VARDESC *varDesc) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBVarDesc *var_desc; TRACE("%p %u %p\n", This, index, varDesc); if (This->vardescs){ UINT i; This->vardescs = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->vardescs, sizeof(TLBVarDesc) * (This->typeattr.cVars + 1)); if (index < This->typeattr.cVars) { memmove(This->vardescs + index + 1, This->vardescs + index, (This->typeattr.cVars - index) * sizeof(TLBVarDesc)); var_desc = This->vardescs + index; } else var_desc = This->vardescs + This->typeattr.cVars; /* move custdata lists to the new memory location */ for(i = 0; i < This->typeattr.cVars + 1; ++i){ if(index != i){ TLBVarDesc *var = &This->vardescs[i]; if(var->custdata_list.prev == var->custdata_list.next) list_init(&var->custdata_list); else{ var->custdata_list.prev->next = &var->custdata_list; var->custdata_list.next->prev = &var->custdata_list; } } } } else var_desc = This->vardescs = heap_alloc_zero(sizeof(TLBVarDesc)); TLBVarDesc_Constructor(var_desc); TLB_AllocAndInitVarDesc(varDesc, &var_desc->vardesc_create); var_desc->vardesc = *var_desc->vardesc_create; ++This->typeattr.cVars; This->needs_layout = TRUE; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(ICreateTypeInfo2 *iface, UINT index, LPOLESTR *names, UINT numNames) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBFuncDesc *func_desc = &This->funcdescs[index]; int i; TRACE("%p %u %p %u\n", This, index, names, numNames); if (!names) return E_INVALIDARG; if (index >= This->typeattr.cFuncs || numNames == 0) return TYPE_E_ELEMENTNOTFOUND; if (func_desc->funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF)){ if(numNames > func_desc->funcdesc.cParams) return TYPE_E_ELEMENTNOTFOUND; } else if(numNames > func_desc->funcdesc.cParams + 1) return TYPE_E_ELEMENTNOTFOUND; for(i = 0; i < This->typeattr.cFuncs; ++i) { TLBFuncDesc *iter = &This->funcdescs[i]; if (iter->Name && !strcmpW(TLB_get_bstr(iter->Name), *names)) { if (iter->funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF | INVOKE_PROPERTYGET) && func_desc->funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF | INVOKE_PROPERTYGET) && func_desc->funcdesc.invkind != iter->funcdesc.invkind) continue; return TYPE_E_AMBIGUOUSNAME; } } func_desc->Name = TLB_append_str(&This->pTypeLib->name_list, *names); for (i = 1; i < numNames; ++i) { TLBParDesc *par_desc = func_desc->pParamDesc + i - 1; par_desc->Name = TLB_append_str(&This->pTypeLib->name_list, *(names + i)); } return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(ICreateTypeInfo2 *iface, UINT index, LPOLESTR name) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %u %s\n", This, index, wine_dbgstr_w(name)); if(!name) return E_INVALIDARG; if(index >= This->typeattr.cVars) return TYPE_E_ELEMENTNOTFOUND; This->vardescs[index].Name = TLB_append_str(&This->pTypeLib->name_list, name); return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeDescAlias(ICreateTypeInfo2 *iface, TYPEDESC *tdescAlias) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); HRESULT hr; TRACE("%p %p\n", This, tdescAlias); if(!tdescAlias) return E_INVALIDARG; if(This->typeattr.typekind != TKIND_ALIAS) return TYPE_E_BADMODULEKIND; hr = TLB_size_instance(This, This->pTypeLib->syskind, tdescAlias, &This->typeattr.cbSizeInstance, &This->typeattr.cbAlignment); if(FAILED(hr)) return hr; heap_free(This->tdescAlias); This->tdescAlias = heap_alloc(TLB_SizeTypeDesc(tdescAlias, TRUE)); TLB_CopyTypeDesc(NULL, tdescAlias, This->tdescAlias); return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnDefineFuncAsDllEntry(ICreateTypeInfo2 *iface, UINT index, LPOLESTR dllName, LPOLESTR procName) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u %s %s - stub\n", This, index, wine_dbgstr_w(dllName), wine_dbgstr_w(procName)); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncDocString(ICreateTypeInfo2 *iface, UINT index, LPOLESTR docString) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBFuncDesc *func_desc = &This->funcdescs[index]; TRACE("%p %u %s\n", This, index, wine_dbgstr_w(docString)); if(!docString) return E_INVALIDARG; if(index >= This->typeattr.cFuncs) return TYPE_E_ELEMENTNOTFOUND; func_desc->HelpString = TLB_append_str(&This->pTypeLib->string_list, docString); return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetVarDocString(ICreateTypeInfo2 *iface, UINT index, LPOLESTR docString) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBVarDesc *var_desc = &This->vardescs[index]; TRACE("%p %u %s\n", This, index, wine_dbgstr_w(docString)); if(!docString) return E_INVALIDARG; if(index >= This->typeattr.cVars) return TYPE_E_ELEMENTNOTFOUND; var_desc->HelpString = TLB_append_str(&This->pTypeLib->string_list, docString); return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpContext(ICreateTypeInfo2 *iface, UINT index, DWORD helpContext) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBFuncDesc *func_desc = &This->funcdescs[index]; TRACE("%p %u %d\n", This, index, helpContext); if(index >= This->typeattr.cFuncs) return TYPE_E_ELEMENTNOTFOUND; func_desc->helpcontext = helpContext; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpContext(ICreateTypeInfo2 *iface, UINT index, DWORD helpContext) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TLBVarDesc *var_desc = &This->vardescs[index]; TRACE("%p %u %d\n", This, index, helpContext); if(index >= This->typeattr.cVars) return TYPE_E_ELEMENTNOTFOUND; var_desc->HelpContext = helpContext; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetMops(ICreateTypeInfo2 *iface, UINT index, BSTR bstrMops) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u %s - stub\n", This, index, wine_dbgstr_w(bstrMops)); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(ICreateTypeInfo2 *iface, IDLDESC *idlDesc) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %p\n", This, idlDesc); if (!idlDesc) return E_INVALIDARG; This->typeattr.idldescType.dwReserved = idlDesc->dwReserved; This->typeattr.idldescType.wIDLFlags = idlDesc->wIDLFlags; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); ITypeInfo *tinfo; TLBFuncDesc *func_desc; UINT user_vft = 0, i, depth = 0; HRESULT hres = S_OK; TRACE("%p\n", This); This->needs_layout = FALSE; hres = ICreateTypeInfo2_QueryInterface(iface, &IID_ITypeInfo, (LPVOID*)&tinfo); if (FAILED(hres)) return hres; if (This->typeattr.typekind == TKIND_INTERFACE) { ITypeInfo *inh; TYPEATTR *attr; HREFTYPE inh_href; hres = ITypeInfo_GetRefTypeOfImplType(tinfo, 0, &inh_href); if (SUCCEEDED(hres)) { hres = ITypeInfo_GetRefTypeInfo(tinfo, inh_href, &inh); if (SUCCEEDED(hres)) { hres = ITypeInfo_GetTypeAttr(inh, &attr); if (FAILED(hres)) { ITypeInfo_Release(inh); ITypeInfo_Release(tinfo); return hres; } This->typeattr.cbSizeVft = attr->cbSizeVft; ITypeInfo_ReleaseTypeAttr(inh, attr); do{ ++depth; hres = ITypeInfo_GetRefTypeOfImplType(inh, 0, &inh_href); if(SUCCEEDED(hres)){ ITypeInfo *next; hres = ITypeInfo_GetRefTypeInfo(inh, inh_href, &next); if(SUCCEEDED(hres)){ ITypeInfo_Release(inh); inh = next; } } }while(SUCCEEDED(hres)); hres = S_OK; ITypeInfo_Release(inh); } else if (hres == TYPE_E_ELEMENTNOTFOUND) { This->typeattr.cbSizeVft = 0; hres = S_OK; } else { ITypeInfo_Release(tinfo); return hres; } } else if (hres == TYPE_E_ELEMENTNOTFOUND) { This->typeattr.cbSizeVft = 0; hres = S_OK; } else { ITypeInfo_Release(tinfo); return hres; } } else if (This->typeattr.typekind == TKIND_DISPATCH) This->typeattr.cbSizeVft = 7 * This->pTypeLib->ptr_size; else This->typeattr.cbSizeVft = 0; func_desc = This->funcdescs; i = 0; while (i < This->typeattr.cFuncs) { if (!(func_desc->funcdesc.oVft & 0x1)) func_desc->funcdesc.oVft = This->typeattr.cbSizeVft; if ((func_desc->funcdesc.oVft & 0xFFFC) > user_vft) user_vft = func_desc->funcdesc.oVft & 0xFFFC; This->typeattr.cbSizeVft += This->pTypeLib->ptr_size; if (func_desc->funcdesc.memid == MEMBERID_NIL) { TLBFuncDesc *iter; UINT j = 0; BOOL reset = FALSE; func_desc->funcdesc.memid = 0x60000000 + (depth << 16) + i; iter = This->funcdescs; while (j < This->typeattr.cFuncs) { if (iter != func_desc && iter->funcdesc.memid == func_desc->funcdesc.memid) { if (!reset) { func_desc->funcdesc.memid = 0x60000000 + (depth << 16) + This->typeattr.cFuncs; reset = TRUE; } else ++func_desc->funcdesc.memid; iter = This->funcdescs; j = 0; } else { ++iter; ++j; } } } ++func_desc; ++i; } if (user_vft > This->typeattr.cbSizeVft) This->typeattr.cbSizeVft = user_vft + This->pTypeLib->ptr_size; for(i = 0; i < This->typeattr.cVars; ++i){ TLBVarDesc *var_desc = &This->vardescs[i]; if(var_desc->vardesc.memid == MEMBERID_NIL){ UINT j = 0; BOOL reset = FALSE; TLBVarDesc *iter; var_desc->vardesc.memid = 0x40000000 + (depth << 16) + i; iter = This->vardescs; while (j < This->typeattr.cVars) { if (iter != var_desc && iter->vardesc.memid == var_desc->vardesc.memid) { if (!reset) { var_desc->vardesc.memid = 0x40000000 + (depth << 16) + This->typeattr.cVars; reset = TRUE; } else ++var_desc->vardesc.memid; iter = This->vardescs; j = 0; } else { ++iter; ++j; } } } } ITypeInfo_Release(tinfo); return hres; } static HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDesc(ICreateTypeInfo2 *iface, UINT index) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u - stub\n", This, index); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDescByMemId(ICreateTypeInfo2 *iface, MEMBERID memid, INVOKEKIND invKind) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %x %d - stub\n", This, memid, invKind); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDesc(ICreateTypeInfo2 *iface, UINT index) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u - stub\n", This, index); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDescByMemId(ICreateTypeInfo2 *iface, MEMBERID memid) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %x - stub\n", This, memid); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnDeleteImplType(ICreateTypeInfo2 *iface, UINT index) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u - stub\n", This, index); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetCustData(ICreateTypeInfo2 *iface, REFGUID guid, VARIANT *varVal) { TLBGuid *tlbguid; ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %s %p\n", This, debugstr_guid(guid), varVal); if (!guid || !varVal) return E_INVALIDARG; tlbguid = TLB_append_guid(&This->pTypeLib->guid_list, guid, -1); return TLB_set_custdata(This->pcustdata_list, tlbguid, varVal); } static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncCustData(ICreateTypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *varVal) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u %s %p - stub\n", This, index, debugstr_guid(guid), varVal); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetParamCustData(ICreateTypeInfo2 *iface, UINT funcIndex, UINT paramIndex, REFGUID guid, VARIANT *varVal) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u %u %s %p - stub\n", This, funcIndex, paramIndex, debugstr_guid(guid), varVal); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetVarCustData(ICreateTypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *varVal) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u %s %p - stub\n", This, index, debugstr_guid(guid), varVal); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeCustData(ICreateTypeInfo2 *iface, UINT index, REFGUID guid, VARIANT *varVal) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u %s %p - stub\n", This, index, debugstr_guid(guid), varVal); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpStringContext(ICreateTypeInfo2 *iface, ULONG helpStringContext) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %u\n", This, helpStringContext); This->dwHelpStringContext = helpStringContext; return S_OK; } static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpStringContext(ICreateTypeInfo2 *iface, UINT index, ULONG helpStringContext) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u %u - stub\n", This, index, helpStringContext); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpStringContext(ICreateTypeInfo2 *iface, UINT index, ULONG helpStringContext) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p %u %u - stub\n", This, index, helpStringContext); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnInvalidate(ICreateTypeInfo2 *iface) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); FIXME("%p - stub\n", This); return E_NOTIMPL; } static HRESULT WINAPI ICreateTypeInfo2_fnSetName(ICreateTypeInfo2 *iface, LPOLESTR name) { ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface); TRACE("%p %s\n", This, wine_dbgstr_w(name)); if (!name) return E_INVALIDARG; This->Name = TLB_append_str(&This->pTypeLib->name_list, name); return S_OK; } static const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl = { ICreateTypeInfo2_fnQueryInterface, ICreateTypeInfo2_fnAddRef, ICreateTypeInfo2_fnRelease, ICreateTypeInfo2_fnSetGuid, ICreateTypeInfo2_fnSetTypeFlags, ICreateTypeInfo2_fnSetDocString, ICreateTypeInfo2_fnSetHelpContext, ICreateTypeInfo2_fnSetVersion, ICreateTypeInfo2_fnAddRefTypeInfo, ICreateTypeInfo2_fnAddFuncDesc, ICreateTypeInfo2_fnAddImplType, ICreateTypeInfo2_fnSetImplTypeFlags, ICreateTypeInfo2_fnSetAlignment, ICreateTypeInfo2_fnSetSchema, ICreateTypeInfo2_fnAddVarDesc, ICreateTypeInfo2_fnSetFuncAndParamNames, ICreateTypeInfo2_fnSetVarName, ICreateTypeInfo2_fnSetTypeDescAlias, ICreateTypeInfo2_fnDefineFuncAsDllEntry, ICreateTypeInfo2_fnSetFuncDocString, ICreateTypeInfo2_fnSetVarDocString, ICreateTypeInfo2_fnSetFuncHelpContext, ICreateTypeInfo2_fnSetVarHelpContext, ICreateTypeInfo2_fnSetMops, ICreateTypeInfo2_fnSetTypeIdldesc, ICreateTypeInfo2_fnLayOut, ICreateTypeInfo2_fnDeleteFuncDesc, ICreateTypeInfo2_fnDeleteFuncDescByMemId, ICreateTypeInfo2_fnDeleteVarDesc, ICreateTypeInfo2_fnDeleteVarDescByMemId, ICreateTypeInfo2_fnDeleteImplType, ICreateTypeInfo2_fnSetCustData, ICreateTypeInfo2_fnSetFuncCustData, ICreateTypeInfo2_fnSetParamCustData, ICreateTypeInfo2_fnSetVarCustData, ICreateTypeInfo2_fnSetImplTypeCustData, ICreateTypeInfo2_fnSetHelpStringContext, ICreateTypeInfo2_fnSetFuncHelpStringContext, ICreateTypeInfo2_fnSetVarHelpStringContext, ICreateTypeInfo2_fnInvalidate, ICreateTypeInfo2_fnSetName }; /****************************************************************************** * ClearCustData (OLEAUT32.171) * * Clear a custom data type's data. * * PARAMS * lpCust [I] The custom data type instance * * RETURNS * Nothing. */ void WINAPI ClearCustData(CUSTDATA *lpCust) { if (lpCust && lpCust->cCustData) { if (lpCust->prgCustData) { DWORD i; for (i = 0; i < lpCust->cCustData; i++) VariantClear(&lpCust->prgCustData[i].varValue); CoTaskMemFree(lpCust->prgCustData); lpCust->prgCustData = NULL; } lpCust->cCustData = 0; } } ================================================ FILE: ole2disp/wine_typelib.h ================================================ /* * typelib.h internal wine data structures * used to decode typelib's * * Copyright 1999 Rein KLazes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINE_TYPELIB_H #define _WINE_TYPELIB_H #include #include "windef.h" #include "winbase.h" #include "oleauto.h" #define HELPDLLFLAG (0x0100) #define DO_NOT_SEEK (-1) #define MSFT_HREFTYPE_INTHISFILE(href) (!((href) & 3)) #define MSFT_HREFTYPE_INDEX(href) ((href) /sizeof(MSFT_TypeInfoBase)) /*-------------------------FILE STRUCTURES-----------------------------------*/ /* There are two known file formats, those created with ICreateTypeLib * have the signature "SLTG" as their first four bytes, while those created * with ICreateTypeLib2 have "MSFT". */ /***************************************************** * MSFT typelibs * * These are TypeLibs created with ICreateTypeLib2 * */ /* * structure of the typelib type2 header * it is at the beginning of a type lib file * */ #define MSFT_SIGNATURE 0x5446534D /* "MSFT" */ typedef struct tagMSFT_Header { /*0x00*/INT magic1; /* 0x5446534D "MSFT" */ INT magic2; /* 0x00010002 version nr? */ INT posguid; /* position of libid in guid table */ /* (should be, else -1) */ INT lcid; /* locale id */ /*0x10*/INT lcid2; INT varflags; /* (largely) unknown flags ,seems to be always 41 */ /* becomes 0x51 with a helpfile defined */ /* if help dll defined it's 0x151 */ /* update : the lower nibble is syskind */ INT version; /* set with SetVersion() */ INT flags; /* set with SetFlags() */ /*0x20*/INT nrtypeinfos; /* number of typeinfo's (till so far) */ INT helpstring; /* position of help string in stringtable */ INT helpstringcontext; INT helpcontext; /*0x30*/INT nametablecount; /* number of names in name table */ INT nametablechars; /* nr of characters in name table */ INT NameOffset; /* offset of name in name table */ INT helpfile; /* position of helpfile in stringtable */ /*0x40*/INT CustomDataOffset; /* if -1 no custom data, else it is offset */ /* in customer data/guid offset table */ INT res44; /* unknown always: 0x20 (guid hash size?) */ INT res48; /* unknown always: 0x80 (name hash size?) */ INT dispatchpos; /* HREFTYPE to IDispatch, or -1 if no IDispatch */ /*0x50*/INT nimpinfos; /* number of impinfos */ } MSFT_Header; /* segments in the type lib file have a structure like this: */ typedef struct tagMSFT_pSeg { INT offset; /* absolute offset in file */ INT length; /* length of segment */ INT res08; /* unknown always -1 */ INT res0c; /* unknown always 0x0f in the header */ /* 0x03 in the typeinfo_data */ } MSFT_pSeg; /* layout of the main segment directory */ typedef struct tagMSFT_SegDir { /*1*/MSFT_pSeg pTypeInfoTab; /* each type info get an entry of 0x64 bytes */ /* (25 ints) */ /*2*/MSFT_pSeg pImpInfo; /* table with info for imported types */ /*3*/MSFT_pSeg pImpFiles; /* import libraries */ /*4*/MSFT_pSeg pRefTab; /* References table */ /*5*/MSFT_pSeg pGuidHashTab; /* always exists, always same size (0x80) */ /* hash table with offsets to guid */ /*6*/MSFT_pSeg pGuidTab; /* all guids are stored here together with */ /* offset in some table???? */ /*7*/MSFT_pSeg pNameHashTab; /* always created, always same size (0x200) */ /* hash table with offsets to names */ /*8*/MSFT_pSeg pNametab; /* name tables */ /*9*/MSFT_pSeg pStringtab; /* string table */ /*A*/MSFT_pSeg pTypdescTab; /* table with type descriptors */ /*B*/MSFT_pSeg pArrayDescriptions; /*C*/MSFT_pSeg pCustData; /* data table, used for custom data and default */ /* parameter values */ /*D*/MSFT_pSeg pCDGuids; /* table with offsets for the guids and into */ /* the customer data table */ /*E*/MSFT_pSeg res0e; /* unknown */ /*F*/MSFT_pSeg res0f; /* unknown */ } MSFT_SegDir; /* base type info data */ typedef struct tagMSFT_TypeInfoBase { /*000*/ INT typekind; /* it is the TKIND_xxx */ /* some byte alignment stuff */ INT memoffset; /* points past the file, if no elements */ INT res2; /* zero if no element, N*0x40 */ INT res3; /* -1 if no element, (N-1)*0x38 */ /*010*/ INT res4; /* always? 3 */ INT res5; /* always? zero */ INT cElement; /* counts elements, HI=cVars, LO=cFuncs */ INT res7; /* always? zero */ /*020*/ INT res8; /* always? zero */ INT res9; /* always? zero */ INT resA; /* always? zero */ INT posguid; /* position in guid table */ /*030*/ INT flags; /* Typeflags */ INT NameOffset; /* offset in name table */ INT version; /* element version */ INT docstringoffs; /* offset of docstring in string tab */ /*040*/ INT helpstringcontext; /* */ INT helpcontext; /* */ INT oCustData; /* offset in customer data table */ #ifdef WORDS_BIGENDIAN INT16 cbSizeVft; /* virtual table size, including inherits */ INT16 cImplTypes; /* nr of implemented interfaces */ #else INT16 cImplTypes; /* nr of implemented interfaces */ INT16 cbSizeVft; /* virtual table size, including inherits */ #endif /*050*/ INT size; /* size in bytes, at least for structures */ /* FIXME: name of this field */ INT datatype1; /* position in type description table */ /* or in base interfaces */ /* if coclass: offset in reftable */ /* if interface: reference to inherited if */ /* if module: offset to dllname in name table */ INT datatype2; /* for interfaces: hiword is num of inherited funcs */ /* loword is num of inherited interfaces */ INT res18; /* always? 0 */ /*060*/ INT res19; /* always? -1 */ } MSFT_TypeInfoBase; /* layout of an entry with information on imported types */ typedef struct tagMSFT_ImpInfo { INT flags; /* bits 0 - 15: count */ /* bit 16: if set oGuid is an offset to Guid */ /* if clear oGuid is a typeinfo index in the specified typelib */ /* bits 24 - 31: TKIND of reference */ INT oImpFile; /* offset in the Import File table */ INT oGuid; /* offset in Guid table or typeinfo index (see bit 16 of res0) */ } MSFT_ImpInfo; #define MSFT_IMPINFO_OFFSET_IS_GUID 0x00010000 /* function description data */ typedef struct { INT Info; /* record size including some extra stuff */ INT DataType; /* data type of the member, eg return of function */ INT Flags; /* something to do with attribute flags (LOWORD) */ #ifdef WORDS_BIGENDIAN INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */ INT16 VtableOffset; /* offset in vtable */ #else INT16 VtableOffset; /* offset in vtable */ INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */ #endif INT FKCCIC; /* bit string with the following */ /* meaning (bit 0 is the msb): */ /* bit 2 indicates that oEntry is numeric */ /* bit 3 that parameter has default values */ /* calling convention (bits 4-7 ) */ /* bit 8 indicates that custom data is present */ /* Invocation kind (bits 9-12 ) */ /* function kind (eg virtual), bits 13-15 */ #ifdef WORDS_BIGENDIAN INT16 nroargs; /* nr of optional arguments */ INT16 nrargs; /* number of arguments (including optional ????) */ #else INT16 nrargs; /* number of arguments (including optional ????) */ INT16 nroargs; /* nr of optional arguments */ #endif /* optional attribute fields, the number of them is variable */ INT HelpContext; INT oHelpString; INT oEntry; /* either offset in string table or numeric as it is */ INT res9; /* unknown (-1) */ INT resA; /* unknown (-1) */ INT HelpStringContext; /* these are controlled by a bit set in the FKCCIC field */ INT oCustData; /* custom data for function */ INT oArgCustData[1]; /* custom data per argument */ } MSFT_FuncRecord; /* after this may follow an array with default value pointers if the * appropriate bit in the FKCCIC field has been set: * INT oDefaultValue[nrargs]; */ /* Parameter info one per argument*/ typedef struct { INT DataType; INT oName; INT Flags; } MSFT_ParameterInfo; /* Variable description data */ typedef struct { INT Info; /* record size including some extra stuff */ INT DataType; /* data type of the variable */ INT Flags; /* VarFlags (LOWORD) */ #ifdef WORDS_BIGENDIAN INT16 vardescsize; /* size of reconstituted VARDESC and related structs */ INT16 VarKind; /* VarKind */ #else INT16 VarKind; /* VarKind */ INT16 vardescsize; /* size of reconstituted VARDESC and related structs */ #endif INT OffsValue; /* value of the variable or the offset */ /* in the data structure */ /* optional attribute fields, the number of them is variable */ /* controlled by record length */ INT HelpContext; INT HelpString; INT res9; /* unknown (-1) */ INT oCustData; /* custom data for variable */ INT HelpStringContext; } MSFT_VarRecord; /* Structure of the reference data */ typedef struct { INT reftype; /* either offset in type info table, then it's */ /* a multiple of 64 */ /* or offset in the external reference table */ /* with an offset of 1 */ INT flags; INT oCustData; /* custom data */ INT onext; /* next offset, -1 if last */ } MSFT_RefRecord; /* this is how a guid is stored */ typedef struct { GUID guid; INT hreftype; /* -2 for the typelib guid, typeinfo offset for typeinfo guid, low two bits are 01 if this is an imported typeinfo, low two bits are 10 if this is an imported typelib (used by imported typeinfos) */ INT next_hash; /* offset to next guid in the hash bucket */ } MSFT_GuidEntry; /* some data preceding entries in the name table */ typedef struct { INT hreftype; /* is -1 if name is for neither a typeinfo, a variable, or a function (that is, name is for a typelib or a function parameter). otherwise is the offset of the first typeinfo that this name refers to (either to the typeinfo itself or to a member of the typeinfo */ INT next_hash; /* offset to next name in the hash bucket */ INT namelen; /* only lower 8 bits are valid */ /* 0x1000 if name is only used once as a variable name */ /* 0x2000 if name is a variable in an enumeration */ /* 0x3800 if name is typeinfo name */ } MSFT_NameIntro; /* the custom data table directory has entries like this */ typedef struct { INT GuidOffset; INT DataOffset; INT next; /* next offset in the table, -1 if it's the last */ } MSFT_CDGuid; /*********************************************************** * * SLTG typelibs. * * These are created with ICreateTypeLib * */ #include "pshpack1.h" typedef struct { /*00*/ DWORD SLTG_magic; /* 0x47544c53 == "SLTG" */ /*04*/ WORD nrOfFileBlks; /* no of SLTG_BlkEntry's + 1 */ /*06*/ WORD res06; /* ?? always 9 */ /*08*/ WORD res08; /* some kind of len/offset ?? */ /*0a*/ WORD first_blk; /* 1 based index into blk entries that corresponds to first block in file */ /*0c*/ DWORD res0c; /* always 0x000204ff */ /*10*/ DWORD res10; /* always 0x00000000 */ /*14*/ DWORD res14; /* always 0x000000c0 */ /*18*/ DWORD res18; /* always 0x46000000 */ /*1c*/ DWORD res1c; /* always 0x00000044 */ /*20*/ DWORD res20; /* always 0xffff0000 */ } SLTG_Header; /* This gets followed by a list of block entries */ typedef struct { /*00*/ DWORD len; /*04*/ WORD index_string; /* offs from start of SLTG_Magic to index string */ /*06*/ WORD next; } SLTG_BlkEntry; /* The order of the blocks in the file is given by starting at Block entry firt_blk and stepping through using the next pointer */ /* These then get followed by this magic */ typedef struct { /*00*/ BYTE res00; /* always 0x01 */ /*01*/ CHAR CompObj_magic[8]; /* always "CompObj" */ /*09*/ CHAR dir_magic[4]; /* always "dir" */ } SLTG_Magic; #define SLTG_COMPOBJ_MAGIC "CompObj" #define SLTG_DIR_MAGIC "dir" /* Next we have SLTG_Header.nrOfFileBlks - 2 of Index strings. These are presumably unique to within the file and look something like "AAAAAAAAAA" with the first character incremented from 'A' to ensure uniqueness. I guess successive chars increment when we need to wrap the first one. */ typedef struct { /*00*/ CHAR string[11]; } SLTG_Index; /* This is followed by SLTG_pad9 */ typedef struct { /*00*/ CHAR pad[9]; /* 9 '\0's */ } SLTG_Pad9; /* Now we have the noOfFileBlks - 1 worth of blocks. The length of each block is given by its entry in SLTG_BlkEntry. */ /* type SLTG_NAME in rather like a BSTR except that the length in bytes is given by the first WORD and the string contains 8bit chars */ typedef WORD SLTG_Name; /* The main library block looks like this. This one seems to come last */ typedef struct { /*00*/ WORD magic; /* 0x51cc */ /*02*/ WORD res02; /* 0x0003, 0x0004 */ /*04*/ WORD name; /* offset to name in name table */ /*06*/ SLTG_Name res06; /* maybe this is just WORD == 0xffff */ SLTG_Name helpstring; SLTG_Name helpfile; DWORD helpcontext; WORD syskind; /* == 1 for win32, 0 for win16 */ WORD lcid; /* == 0x409, 0x809 etc */ DWORD res12; /* == 0 */ WORD libflags; /* LIBFLAG_* */ WORD maj_vers; WORD min_vers; GUID uuid; } SLTG_LibBlk; #define SLTG_LIBBLK_MAGIC 0x51cc /* we then get 0x40 bytes worth of 0xffff or small numbers followed by nrOfFileBlks - 2 of these */ typedef struct { SLTG_Name index_name; /* This refers to a name in the directory */ SLTG_Name other_name; /* Another one of these weird names */ WORD res1a; /* 0xffff */ WORD name_offs; /* offset to name in name table */ WORD hlpstr_len; /* if this is non-zero we get this many bytes before the next element, which seem to reference the docstring of the type ? */ WORD res20; /* 0xffff */ DWORD helpcontext; WORD res26; /* 0xffff */ GUID uuid; WORD typekind; } SLTG_OtherTypeInfo; /* Next we get WORD 0x0003 followed by a DWORD which if we add to 0x216 gives the offset to the name table from the start of the LibBlk struct */ typedef struct { /*00*/ WORD magic; /* 0x0501 */ /*02*/ DWORD href_table; /* if not 0xffffffff, then byte offset from beginning of struct to href table */ /*06*/ DWORD res06; /* 0xffffffff */ /*0a*/ DWORD elem_table; /* offset to members */ /*0e*/ DWORD res0e; /* 0xffffffff */ /*12*/ WORD major_version; /* major version number */ /*14*/ WORD minor_version; /* minor version number */ /*16*/ DWORD res16; /* 0xfffe0000 or 0xfffc0000 (on dual interfaces?) */ /*1a*/ BYTE typeflags1;/* 0x02 | top 5 bits hold l5sbs of TYPEFLAGS */ /*1b*/ BYTE typeflags2;/* TYPEFLAGS >> 5 */ /*1c*/ BYTE typeflags3;/* 0x02*/ /*1d*/ BYTE typekind; /* 0x03 == TKIND_INTERFACE etc. */ /*1e*/ DWORD res1e; /* 0x00000000 or 0xffffffff */ } SLTG_TypeInfoHeader; #define SLTG_TIHEADER_MAGIC 0x0501 typedef struct { /*00*/ WORD cFuncs; /*02*/ WORD cVars; /*04*/ WORD cImplTypes; /*06*/ WORD res06; /* always 0000 */ /*08*/ WORD funcs_off; /* offset to functions (starting from the member header) */ /*0a*/ WORD vars_off; /* offset to vars (starting from the member header) */ /*0c*/ WORD impls_off; /* offset to implemented types (starting from the member header) */ /*0e*/ WORD funcs_bytes; /* bytes used by function data */ /*10*/ WORD vars_bytes; /* bytes used by var data */ /*12*/ WORD impls_bytes; /* bytes used by implemented type data */ /*14*/ WORD tdescalias_vt; /* for TKIND_ALIAS */ /*16*/ WORD res16; /* always ffff */ /*18*/ DWORD helpctxtbase; /* base value of member help context */ /*1c*/ WORD simple_alias; /* tdescalias_vt is a vt rather than an offset? */ /*1e*/ WORD res1e; /* always 0000 */ /*20*/ WORD cbSizeInstance; /*22*/ WORD cbAlignment; /*24*/ WORD res24; /*26*/ WORD res26; /*28*/ WORD cbSizeVft; /*2a*/ WORD res2a; /* always ffff */ /*2c*/ WORD res2c; /* always ffff */ /*2e*/ WORD res2e; /* always ffff */ /*30*/ WORD res30; /* always ffff */ /*32*/ WORD res32; /*34*/ WORD res34; /*36*/ BYTE module_entry_info_off; /*37*/ BYTE res37; /*38*/ WORD res38; /*3a*/ WORD module_entry_info_size; } SLTG_TypeInfoTail; typedef struct { /*00*/ WORD res00; /* 0x0001 sometimes 0x0003 ?? */ /*02*/ WORD res02; /* 0xffff */ /*04*/ BYTE res04; /* 0x01 */ /*05*/ DWORD cbExtra; /* No of bytes that follow */ } SLTG_MemberHeader; typedef struct { /*00*/ WORD magic; /* 0x120a */ /*02*/ WORD next; /* offset in bytes to next block from start of block group, 0xffff if last item */ /*04*/ WORD name; /* offset to name within name table */ /*06*/ WORD value; /* offset to value from start of block group */ /*08*/ WORD res08; /* 0x56 */ /*0a*/ DWORD memid; /* memid */ /*0e*/ WORD helpcontext;/* 0xfffe == no context, 0x0001 == stored in EnumInfo struct, else offset to value from start of block group */ /*10*/ WORD helpstring;/* offset from start of block group to string offset */ } SLTG_EnumItem; #define SLTG_ENUMITEM_MAGIC 0x120a typedef struct { BYTE magic; /* 0x4c, 0xcb or 0x8b with optional SLTG_FUNCTION_FLAGS_PRESENT flag */ BYTE inv; /* high nibble is INVOKE_KIND, low nibble = 2 */ WORD next; /* byte offset from beginning of group to next fn */ WORD name; /* Offset within name table to name */ DWORD dispid; /* dispid */ WORD helpcontext; /* helpcontext (again 1 is special) */ WORD helpstring;/* helpstring offset to offset */ WORD arg_off; /* offset to args from start of block */ BYTE nacc; /* lowest 3bits are CALLCONV, rest are no of args */ BYTE retnextopt;/* if 0x80 bit set ret type follows else next WORD is offset to ret type. No of optional args is middle 6 bits */ WORD rettype; /* return type VT_?? or offset to ret type */ WORD vtblpos; /* position in vtbl? */ WORD funcflags; /* present if magic & 0x20 */ WORD res18; /* flags? this and below only present if magic & 0x10 */ WORD helpfile; /* encoded help file name */ /* Param list starts, repeat next two as required */ #if 0 WORD name; /* offset to 2nd letter of name */ WORD+ type; /* VT_ of param */ #endif } SLTG_Function; #define SLTG_FUNCTION_FLAGS_PRESENT 0x20 #define SLTG_FUNCTION_HELPFILE_PRESENT 0x10 #define SLTG_FUNCTION_MAGIC 0x4c #define SLTG_DISPATCH_FUNCTION_MAGIC 0xcb #define SLTG_STATIC_FUNCTION_MAGIC 0x8b typedef struct { /*00*/ BYTE magic; /* 0xdf */ /*01*/ BYTE res01; /* 0x00 */ /*02*/ DWORD res02; /* 0xffffffff */ /*06*/ DWORD res06; /* 0xffffffff */ /*0a*/ DWORD res0a; /* 0xffffffff */ /*0e*/ DWORD res0e; /* 0xffffffff */ /*12*/ DWORD res12; /* 0xffffffff */ /*16*/ DWORD res16; /* 0xffffffff */ /*1a*/ DWORD res1a; /* 0xffffffff */ /*1e*/ DWORD res1e; /* 0xffffffff */ /*22*/ DWORD res22; /* 0xffffffff */ /*26*/ DWORD res26; /* 0xffffffff */ /*2a*/ DWORD res2a; /* 0xffffffff */ /*2e*/ DWORD res2e; /* 0xffffffff */ /*32*/ DWORD res32; /* 0xffffffff */ /*36*/ DWORD res36; /* 0xffffffff */ /*3a*/ DWORD res3a; /* 0xffffffff */ /*3e*/ DWORD res3e; /* 0xffffffff */ /*42*/ WORD res42; /* 0xffff */ /*44*/ DWORD number; /* this is 8 times the number of refs */ /*48*/ /* Now we have number bytes (8 for each ref) of SLTG_UnknownRefInfo */ /*50*/ WORD res50; /* 0xffff */ /*52*/ BYTE res52; /* 0x01 */ /*53*/ DWORD res53; /* 0x00000000 */ /*57*/ SLTG_Name names[1]; /* Now we have number/8 SLTG_Names (first WORD is no of bytes in the ascii * string). Strings look like "*\Rxxxx*#n". If xxxx == ffff then the * ref refers to the nth type listed in this library (0 based). Else * the xxxx (which maybe fewer than 4 digits) is the offset into the name * table to a string "*\G{}#1.0#0#C:\WINNT\System32\stdole32.tlb#" * The guid is the typelib guid; the ref again refers to the nth type of * the imported typelib. */ /*xx*/ BYTE resxx; /* 0xdf */ } SLTG_RefInfo; #define SLTG_REF_MAGIC 0xdf typedef struct { WORD res00; /* 0x0001 */ BYTE res02; /* 0x02 */ BYTE res03; /* 0x40 if internal ref, 0x00 if external ? */ WORD res04; /* 0xffff */ WORD res06; /* 0x0000, 0x0013 or 0xffff ?? */ } SLTG_UnknownRefInfo; typedef struct { WORD res00; /* 0x004a */ WORD next; /* byte offs to next interface */ WORD res04; /* 0xffff */ BYTE impltypeflags; /* IMPLTYPEFLAG_* */ BYTE res07; /* 0x80 */ WORD res08; /* 0x0012, 0x0028 ?? */ WORD ref; /* number in ref table ? */ WORD res0c; /* 0x4000 */ WORD res0e; /* 0xfffe */ WORD res10; /* 0xffff */ WORD res12; /* 0x001d */ WORD pos_in_table; /* 0x0, 0x4, ? */ } SLTG_ImplInfo; #define SLTG_IMPL_MAGIC 0x004a typedef struct { BYTE magic; /* 0x0a */ BYTE flags; WORD next; WORD name; WORD byte_offs; /* pos in struct, or offset to const type or const data (if flags & 0x08) */ WORD type; /* if flags & 0x02 this is the type, else offset to type */ DWORD memid; WORD helpcontext; /* ?? */ WORD helpstring; /* ?? */ WORD varflags; /* only present if magic & 0x20 */ WORD res14; /* flags? this and below only present if magic & 0x10 */ WORD helpfile; /* encoded help file name */ } SLTG_Variable; #define SLTG_VAR_MAGIC 0x0a #define SLTG_VAR_WITH_FLAGS_MAGIC 0x2a #define SLTG_VAR_WITH_HELPFILE 0x3a /* CARRAYs look like this WORD type == VT_CARRAY WORD offset from start of block to SAFEARRAY WORD typeofarray */ typedef struct { WORD is_ord; WORD module; WORD ord_or_entry_offs; WORD prev_offset; WORD res0a;/* always 0 */ WORD res0c;/* always 0 */ WORD res0e;/* always 0 */ WORD res10;/* always 0 */ /* 2-byte aligned null-terminated string (is_ord = 0) */ } SLTG_ModuleEntryInfo; #include "poppack.h" HRESULT ITypeInfoImpl_GetInternalFuncDesc( ITypeInfo *iface, UINT index, const FUNCDESC **ppFuncDesc ) DECLSPEC_HIDDEN; extern DWORD _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) DECLSPEC_HIDDEN; HRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN; /* The OLE Automation ProxyStub Interface Class (aka Typelib Marshaler) */ DEFINE_OLEGUID( CLSID_PSDispatch, 0x00020420, 0x0000, 0x0000 ); DEFINE_OLEGUID( CLSID_PSEnumVariant, 0x00020421, 0x0000, 0x0000 ); DEFINE_OLEGUID( CLSID_PSTypeInfo, 0x00020422, 0x0000, 0x0000 ); DEFINE_OLEGUID( CLSID_PSTypeLib, 0x00020423, 0x0000, 0x0000 ); DEFINE_OLEGUID( CLSID_PSOAInterface, 0x00020424, 0x0000, 0x0000 ); DEFINE_OLEGUID( CLSID_PSTypeComp, 0x00020425, 0x0000, 0x0000 ); /*---------------------------END--------------------------------------------*/ #endif ================================================ FILE: ole2nls/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(ole2nls SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ole2nls.def ole2nls.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ole2nls.dll16 ole2nls) target_link_libraries(ole2nls libwine winecrt0 krnl386) set_target_properties(ole2nls PROPERTIES SUFFIX ".dll16") ================================================ FILE: ole2nls/Makefile.in ================================================ MODULE = ole2nls.dll16 EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll C_SRCS = ole2nls.c RC_SRCS = version.rc ================================================ FILE: ole2nls/ole2nls.c ================================================ /* * OLE2NLS library * * Copyright 1995 Martin von Loewis * Copyright 1998 David Lee Lambert * Copyright 2000 Julio César Gázquez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "winnls.h" #include "winuser.h" #include "wine/winbase16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); /* FIXME: other language flags? */ /* same as win32 */ #define NORM_IGNORECASE16 0x00000001 #define NORM_IGNORENONSPACE16 0x00000002 #define NORM_IGNORESYMBOLS16 0x00000004 /* different from win32 */ #define NORM_IGNOREWIDTH16 0x00000008 #define NORM_IGNOREKANATYPE16 0x00000040 /* deleted? */ #define NORM_IGNOREJAPANACCENT16 0x00000080 #define NORM_IGNOREKASHIDA16 0x00040000 #define NORM_ALL16 (NORM_IGNORECASE16 | NORM_IGNORENONSPACE16 | NORM_IGNORESYMBOLS16 | NORM_IGNOREWIDTH16 | NORM_IGNOREKANATYPE16 | NORM_IGNOREJAPANACCENT16 | NORM_IGNOREKASHIDA16) /* same as win32 */ #define LCMAP_LOWERCASE16 0x00000100 #define LCMAP_UPPERCASE16 0x00000200 #define LCMAP_SORTKEY16 0x00000400 /* different from win32 */ #define LCMAP_HALFWIDTH16 0x00000800 #define LCMAP_FULLWIDTH16 0x00001000 #define LCMAP_HIRAGANA16 0x00002000 #define LCMAP_KATAKANA16 0x00004000 #define LCMAP_ALL16 (LCMAP_LOWERCASE16 | LCMAP_UPPERCASE16 | LCMAP_SORTKEY16 | LCMAP_HALFWIDTH16 | LCMAP_FULLWIDTH16 | LCMAP_HIRAGANA16 | LCMAP_KATAKANA16) static LPVOID lpNLSInfo = NULL; /****************************************************************************** * GetLocaleInfoA [OLE2NLS.5] * Is the last parameter really WORD for Win16? */ INT16 WINAPI GetLocaleInfo16(LCID lcid,LCTYPE LCType,LPSTR buf,INT16 len) { return GetLocaleInfoA(lcid,LCType,buf,len); } /****************************************************************************** * GetStringTypeA [OLE2NLS.7] */ BOOL16 WINAPI GetStringType16(LCID locale,DWORD dwInfoType,LPCSTR src, INT16 cchSrc,LPWORD chartype) { return GetStringTypeExA(locale,dwInfoType,src,cchSrc,chartype); } /****************************************************************************** * GetUserDefaultLCID [OLE2NLS.1] */ LCID WINAPI GetUserDefaultLCID16(void) { return GetUserDefaultLCID(); } /****************************************************************************** * GetSystemDefaultLCID [OLE2NLS.2] */ LCID WINAPI GetSystemDefaultLCID16(void) { return GetSystemDefaultLCID(); } /****************************************************************************** * GetUserDefaultLangID [OLE2NLS.3] */ LANGID WINAPI GetUserDefaultLangID16(void) { return GetUserDefaultLangID(); } /****************************************************************************** * GetSystemDefaultLangID [OLE2NLS.4] */ LANGID WINAPI GetSystemDefaultLangID16(void) { return GetSystemDefaultLangID(); } static DWORD convert_NORM16_to_NORM(DWORD flags16) { DWORD flags = 0; if (flags16 & NORM_IGNORECASE16) flags |= NORM_IGNORECASE; if (flags16 & NORM_IGNORENONSPACE16) flags |= NORM_IGNORENONSPACE; if (flags16 & NORM_IGNORESYMBOLS16) flags |= NORM_IGNORESYMBOLS; if (flags16 & NORM_IGNOREWIDTH16) flags |= NORM_IGNOREWIDTH; if (flags16 & NORM_IGNOREKANATYPE16) flags |= NORM_IGNOREKANATYPE; if (flags16 & NORM_IGNOREJAPANACCENT16) { FIXME("NORM_IGNOREJAPANACCENT\n"); flags |= 0; } if (flags16 & NORM_IGNOREKASHIDA16) { FIXME("NORM_IGNOREKASHIDA\n"); flags |= 0; } return flags; } static DWORD convert_LCMAP16_to_LCMAP(DWORD mapflags16) { DWORD mapflags = 0; if (mapflags16 & LCMAP_LOWERCASE16) mapflags |= LCMAP_LOWERCASE; if (mapflags16 & LCMAP_UPPERCASE16) mapflags |= LCMAP_UPPERCASE; if (mapflags16 & LCMAP_SORTKEY16) mapflags |= LCMAP_SORTKEY; if (mapflags16 & LCMAP_HALFWIDTH16) mapflags |= LCMAP_HALFWIDTH; if (mapflags16 & LCMAP_FULLWIDTH16) mapflags |= LCMAP_FULLWIDTH; if (mapflags16 & LCMAP_HIRAGANA16) mapflags |= LCMAP_HIRAGANA; if (mapflags16 & LCMAP_KATAKANA16) mapflags |= LCMAP_KATAKANA; return mapflags | convert_NORM16_to_NORM(mapflags16); } /****************************************************************************** * LCMapStringA [OLE2NLS.6] */ INT16 WINAPI LCMapString16(LCID lcid, DWORD mapflags16, LPCSTR srcstr, INT16 srclen, LPSTR dststr, INT16 dstlen) { DWORD mapflags = 0; if ((mapflags16 & ~(LCMAP_ALL16 | NORM_ALL16)) != 0) { return 0; } mapflags = convert_LCMAP16_to_LCMAP(mapflags16); return (INT16)LCMapStringA(lcid, mapflags, srcstr, srclen, dststr, dstlen); } /*********************************************************************** * CompareStringA (OLE2NLS.8) */ INT16 WINAPI CompareString16(LCID lcid, DWORD flags16, LPCSTR str1, INT16 len1, LPCSTR str2, INT16 len2) { DWORD flags = 0; if ((flags16 & ~NORM_ALL16) != 0) { return 0; } flags = convert_NORM16_to_NORM(flags16); return CompareStringA(lcid, flags, str1, len1, str2, len2); } /****************************************************************************** * RegisterNLSInfoChanged [OLE2NLS.9] */ BOOL16 WINAPI RegisterNLSInfoChanged16(LPVOID lpNewNLSInfo) /* [???] FIXME */ { FIXME("Fully implemented, but doesn't effect anything.\n"); if (!lpNewNLSInfo) { lpNLSInfo = NULL; return TRUE; } else { if (!lpNLSInfo) { lpNLSInfo = lpNewNLSInfo; return TRUE; } } return FALSE; /* ptr not set */ } ================================================ FILE: ole2nls/ole2nls.def ================================================ ; File generated automatically from ole2nls\ole2nls.dll16.spec; do not edit! LIBRARY ole2nls.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: ole2nls/ole2nls.dll16.spec ================================================ 1 pascal GetUserDefaultLCID() GetUserDefaultLCID16 2 pascal GetSystemDefaultLCID() GetSystemDefaultLCID16 3 pascal -ret16 GetUserDefaultLangID() GetUserDefaultLangID16 4 pascal -ret16 GetSystemDefaultLangID() GetSystemDefaultLangID16 5 pascal GetLocaleInfoA(long long ptr word) GetLocaleInfo16 6 pascal -ret16 LCMapStringA(long long ptr word ptr word) LCMapString16 7 pascal -ret16 GetStringTypeA(long long str word ptr) GetStringType16 8 pascal -ret16 CompareStringA(long long str word str word) CompareString16 9 pascal -ret16 RegisterNLSInfoChanged(ptr) RegisterNLSInfoChanged16 #10 stub WEP 11 stub LIBMAIN 12 stub NOTIFYWINDOWPROC ================================================ FILE: ole2nls/ole2nls.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 ole2nls {504CC4CA-612C-4681-AD9A-90E51785A5D2} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) true ole2nls.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ole2nls.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" OLE2NLS > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: ole2nls/version.rc ================================================ /* * Copyright 2007 Stefan Leichter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define WINE_FILEVERSION 2,10,3050,1 #define WINE_FILEVERSION_STR "2.10.3050.1" #define WINE_FILEDESCRIPTION_STR "Wine OLE dll" #define WINE_FILENAME_STR "OLE2NLS.DLL" #include "wine/wine_common_ver.rc" ================================================ FILE: ole2prox/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(ole2prox SHARED ${SOURCE} ${CMAKE_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/ole2prox.def ole2prox.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ole2prox.dll16 ole2prox) target_link_libraries(ole2prox libwine winecrt0 krnl386) set_target_properties(ole2prox PROPERTIES SUFFIX ".dll16") ================================================ FILE: ole2prox/Makefile.in ================================================ MODULE = ole2prox.dll16 EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll ================================================ FILE: ole2prox/ole2prox.def ================================================ ; File generated automatically from ole2prox\ole2prox.dll16.spec; do not edit! LIBRARY ole2prox.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: ole2prox/ole2prox.dll16.spec ================================================ 1 stub DLLGETCLASSOBJECT #2 WEP #3 ___EXPORTEDSTUB ================================================ FILE: ole2prox/ole2prox.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 ole2prox {6139024B-2348-440D-9192-3A40C3CE31B5} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) true ole2prox.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ole2prox.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" OLE2PROX > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: ole2thk/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(ole2thk SHARED ${SOURCE} ${CMAKE_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/ole2thk.def ole2thk.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ole2thk.dll16 ole2thk) target_link_libraries(ole2thk libwine winecrt0 krnl386) set_target_properties(ole2thk PROPERTIES SUFFIX ".dll16") ================================================ FILE: ole2thk/Makefile.in ================================================ MODULE = ole2thk.dll16 EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll ================================================ FILE: ole2thk/ole2thk.def ================================================ ; File generated automatically from ole2thx\ole2thk.dll16.spec; do not edit! LIBRARY ole2thk.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: ole2thk/ole2thk.dll16.spec ================================================ #1 stub WEP 2 stub ROT16_ISRUNNING16 3 stub ISWIN32SHANDLE 4 stub ___EXPORTEDSTUB 5 stub COTHKCOMMON 6 stub ROT16_GETTIMEOFLASTCHANGE16 7 stub ROT16_GETOBJECT16 ================================================ FILE: ole2thk/ole2thk.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 ole2thk {94C8AE24-778A-4FEB-B3E1-457BDCCE06DF} ole2thk DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) true ole2thk.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ole2thk.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" OLE2THK > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: olecli/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(olecli SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/olecli.def olecli.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(olecli.dll16 olecli) target_link_libraries(olecli libwine winecrt0 krnl386 olecli32.lib) set_target_properties(olecli PROPERTIES SUFFIX ".dll16") ================================================ FILE: olecli/Makefile.in ================================================ MODULE = olecli.dll16 IMPORTS = gdi32 EXTRADLLFLAGS = -m16 -Wb,--main-module,olecli32.dll C_SRCS = olecli.c ================================================ FILE: olecli/olecli.c ================================================ /* * OLECLI library * * Copyright 1995 Martin von Loewis * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* At the moment, these are only empty stubs. */ #include "config.h" //????? #define __oleidl_h__ #define _OLE2_H_ #include #include #ifndef _MSC_VER #define _Analysis_noreturn_ #endif #include //#include "windef.h" #include "wine/windef16.h" #include "wine/winbase16.h" #include "wine/wingdi16.h" #include "winbase.h" #include "wingdi.h" #include "wownt32.h" #include "objbase.h" //#include "olecli.h" #include "wine/debug.h" typedef LONG LHCLIENTDOC; typedef struct _OLEOBJECT *_LPOLEOBJECT; typedef struct _OLECLIENT *LPOLECLIENT; typedef OLEOPT_UPDATE *LPOLEOPT_UPDATE; typedef LPCSTR LPCOLESTR16; struct _OLESTREAM; WINE_DEFAULT_DEBUG_CHANNEL(ole); LPOLECLIENT get_ole_client32(SEGPTR client); typedef struct _OLEOBJECTVTBL16 { SEGPTR QueryProtocol; /* void *(CALLBACK *QueryProtocol)(_LPOLEOBJECT,LPCOLESTR16);*/ SEGPTR Release; /* OLESTATUS (CALLBACK *Release)(_LPOLEOBJECT);*/ SEGPTR Show; /* OLESTATUS (CALLBACK *Show)(_LPOLEOBJECT,BOOL16);*/ SEGPTR DoVerb; /* OLESTATUS (CALLBACK *DoVerb)(_LPOLEOBJECT,UINT16,BOOL16,BOOL16);*/ SEGPTR GetData; /* OLESTATUS (CALLBACK *GetData)(_LPOLEOBJECT,OLECLIPFORMAT,HANDLE16 *);*/ SEGPTR SetData; /* OLESTATUS (CALLBACK *SetData)(_LPOLEOBJECT,OLECLIPFORMAT,HANDLE16);*/ SEGPTR SetTargetDevice; /* OLESTATUS (CALLBACK *SetTargetDevice)(_LPOLEOBJECT,HGLOBAL16);*/ SEGPTR SetBounds; /* OLESTATUS (CALLBACK *SetBounds)(_LPOLEOBJECT,LPRECT16);*/ SEGPTR EnumFormats; /* OLESTATUS (CALLBACK *EnumFormats)(_LPOLEOBJECT,OLECLIPFORMAT);*/ SEGPTR SetColorScheme; /* OLESTATUS (CALLBACK *SetColorScheme)(_LPOLEOBJECT,struct tagLOGPALETTE*);*/ SEGPTR Delete; /* OLESTATUS (CALLBACK *Delete)(_LPOLEOBJECT);*/ SEGPTR SetHostNames; /* OLESTATUS (CALLBACK *SetHostNames)(_LPOLEOBJECT,LPCOLESTR16,LPCOLESTR16);*/ SEGPTR SaveToStream; /* OLESTATUS (CALLBACK *SaveToStream)(_LPOLEOBJECT,struct _OLESTREAM*);*/ SEGPTR Clone; /* OLESTATUS (CALLBACK *Clone)(_LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT *);*/ SEGPTR CopyFromLink; /* OLESTATUS (CALLBACK *CopyFromLink)(_LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT *);*/ SEGPTR Equal; /* OLESTATUS (CALLBACK *Equal)(_LPOLEOBJECT,_LPOLEOBJECT);*/ SEGPTR CopyToClipBoard; /* OLESTATUS (CALLBACK *CopyToClipBoard)(_LPOLEOBJECT);*/ SEGPTR Draw; /* OLESTATUS (CALLBACK *Draw)(_LPOLEOBJECT,HDC16,LPRECT16,LPRECT16,HDC16);*/ SEGPTR Activate; /* OLESTATUS (CALLBACK *Activate)(_LPOLEOBJECT,UINT16,BOOL16,BOOL16,HWND16,LPRECT16);*/ SEGPTR Execute; /* OLESTATUS (CALLBACK *Execute)(_LPOLEOBJECT,HGLOBAL16,UINT16);*/ SEGPTR Close; /* OLESTATUS (CALLBACK *Close)(_LPOLEOBJECT);*/ SEGPTR Update; /* OLESTATUS (CALLBACK *Update)(_LPOLEOBJECT);*/ SEGPTR Reconnect; /* OLESTATUS (CALLBACK *Reconnect)(_LPOLEOBJECT);*/ SEGPTR ObjectConvert; /* OLESTATUS (CALLBACK *ObjectConvert)(_LPOLEOBJECT,LPCOLESTR16,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT*);*/ SEGPTR GetLinkUpdateOptions; /* OLESTATUS (CALLBACK *GetLinkUpdateOptions)(_LPOLEOBJECT,LPOLEOPT_UPDATE);*/ SEGPTR SetLinkUpdateOptions; /* OLESTATUS (CALLBACK *SetLinkUpdateOptions)(_LPOLEOBJECT,OLEOPT_UPDATE);*/ SEGPTR Rename; /* OLESTATUS (CALLBACK *Rename)(_LPOLEOBJECT,LPCOLESTR16);*/ SEGPTR QueryName; /* OLESTATUS (CALLBACK *QueryName)(_LPOLEOBJECT,LPSTR,LPUINT16);*/ SEGPTR QueryType; /* OLESTATUS (CALLBACK *QueryType)(_LPOLEOBJECT,LPLONG);*/ SEGPTR QueryBounds; /* OLESTATUS (CALLBACK *QueryBounds)(_LPOLEOBJECT,LPRECT16);*/ SEGPTR QuerySize; /* OLESTATUS (CALLBACK *QuerySize)(_LPOLEOBJECT,LPDWORD);*/ SEGPTR QueryOpen; /* OLESTATUS (CALLBACK *QueryOpen)(_LPOLEOBJECT);*/ SEGPTR QueryOutOfDate; /* OLESTATUS (CALLBACK *QueryOutOfDate)(_LPOLEOBJECT);*/ SEGPTR QueryReleaseStatus; /* OLESTATUS (CALLBACK *QueryReleaseStatus)(_LPOLEOBJECT);*/ SEGPTR QueryReleaseError; /* OLESTATUS (CALLBACK *QueryReleaseError)(_LPOLEOBJECT);*/ SEGPTR QueryReleaseMethod; /* OLE_RELEASE_METHOD (CALLBACK *QueryReleaseMethod)(_LPOLEOBJECT);*/ SEGPTR RequestData; /* OLESTATUS (CALLBACK *RequestData)(_LPOLEOBJECT,OLECLIPFORMAT);*/ SEGPTR ObjectLong; /* OLESTATUS (CALLBACK *ObjectLong)(_LPOLEOBJECT,UINT16,LPLONG);*/ } OLEOBJECTVTBL16; typedef OLEOBJECTVTBL16 *LPOLEOBJECTVTBL16; typedef struct _OLEOBJECT16 { SEGPTR lpvtbl; /* const OLEOBJECTVTBL16 *lpvtbl; */ } OLEOBJECT16; /* ole client definitions */ typedef struct _OLECLIENTVTBL16 { SEGPTR CallBack; } OLECLIENTVTBL16; typedef OLECLIENTVTBL16 FAR* LPOLECLIENTVTBL16; typedef struct _OLECLIENT16 { SEGPTR lpvtbl; } OLECLIENT16; DWORD WINAPI OleQueryClientVersion16() { return OleQueryClientVersion(); } #define MAX_OLECLIENT 256 struct ole_client_info { BOOL used; OLECLIENT client; OLECLIENTVTBL vtable; /*OLECLIENT16 */SEGPTR client16; /*OLECLIENTVTBL16 */SEGPTR vtable16; } ole_clients[MAX_OLECLIENT]; struct ole_client_info *find_ole_client(LPOLECLIENT client) { for (int i = 0; i < MAX_OLECLIENT; i++) { if (ole_clients[i].used && &ole_clients[i].client == client) { return ole_clients + i; } } return NULL; } struct ole_client_info *find_ole_client_16(SEGPTR client) { for (int i = 0; i < MAX_OLECLIENT; i++) { if (ole_clients[i].used && ole_clients[i].client16 == client) { return ole_clients + i; } } return NULL; } static SEGPTR OLEOBJ16(LPOLEOBJECT oleobj) { return (SEGPTR)oleobj; } static LPOLEOBJECT OLEOBJ32(SEGPTR oleobj) { return (LPOLEOBJECT)oleobj; } #include "wine/list.h" typedef struct _OLESTREAM16 *LPOLESTREAM16; typedef struct _OLESTREAMVTBL16 { SEGPTR Get; /* DWORD(CALLBACK* Get)(LPOLESTREAM16, void*, DWORD); */ SEGPTR Put; /* DWORD(CALLBACK* Put)(LPOLESTREAM16, OLE_CONST void*, DWORD); */ } OLESTREAMVTBL16; typedef OLESTREAMVTBL16 FAR* LPOLESTREAMVTBL16; typedef struct _OLESTREAM16 { SEGPTR lpstbl; } OLESTREAM16; struct olestream_entry { struct list entry; SEGPTR olestream16; OLESTREAM olestream32; }; /*********************************************************************** * SELECTOR_SetEntries * * Set the LDT entries for an array of selectors. */ static BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags) { LDT_ENTRY entry; WORD i, count; wine_ldt_set_base(&entry, base); wine_ldt_set_limit(&entry, size - 1); wine_ldt_set_flags(&entry, flags); count = (size + 0xffff) / 0x10000; for (i = 0; i < count; i++) { if (wine_ldt_set_entry(sel + (i << __AHSHIFT), &entry) < 0) return FALSE; wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000); /* yep, Windows sets limit like that, not 64K sel units */ wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000); } return TRUE; } static SEGPTR OLESTREAM_16(LPOLESTREAM stream32); LPOLESTREAMVTBL16 get_olestream16_vtbl(SEGPTR this16) { LPOLESTREAM16 o16 = (LPOLESTREAM16)MapSL(this16); LPOLESTREAMVTBL16 vtbnl16 = (LPOLESTREAMVTBL16)MapSL(o16->lpstbl); return vtbnl16; } DWORD CALLBACK OLESTREAM32_Get(LPOLESTREAM this_, void *a, DWORD b) { WORD args[2 + 2 + 2]; SEGPTR this16 = OLESTREAM_16(this_); WORD seg = AllocSelectorArray16(b / 0x10000 + 1); DWORD ret; if (!seg) return 0; SELECTOR_SetEntries(seg, a, b, WINE_LDT_FLAGS_DATA); args[5] = HIWORD(this16); args[4] = LOWORD(this16); args[3] = seg; args[2] = 0; args[1] = HIWORD(b); args[0] = LOWORD(b); TRACE("seg=%04x size=%08x\n", seg, b); WOWCallback16Ex(get_olestream16_vtbl(this16)->Get, WCB16_PASCAL, sizeof(args), args, &ret); for (WORD i = 0; i <= b / 0x10000; i++) FreeSelector16(seg + i); TRACE("result=%08x\n", ret); return ret; } DWORD CALLBACK OLESTREAM32_Put(LPOLESTREAM this_, OLE_CONST void *a, DWORD b) { WORD args[2 + 2 + 2]; SEGPTR this16 = OLESTREAM_16(this_); WORD seg = AllocSelectorArray16(b / 0x10000 + 1); if (!seg) return 0; SELECTOR_SetEntries(seg, a, b, WINE_LDT_FLAGS_DATA); DWORD ret; args[5] = HIWORD(this16); args[4] = LOWORD(this16); args[3] = seg; args[2] = 0; args[1] = HIWORD(b); args[0] = LOWORD(b); TRACE("seg=%04x size=%08x\n", seg, b); WOWCallback16Ex(get_olestream16_vtbl(this16)->Put, WCB16_PASCAL, sizeof(args), args, &ret); for (WORD i = 0; i <= b / 0x10000; i++) FreeSelector16(seg + i); TRACE("result=%08x\n", ret); return ret; } static struct list olestream_list = LIST_INIT(olestream_list); OLESTREAMVTBL olestream32_vtbl = { OLESTREAM32_Get, OLESTREAM32_Put }; static struct olestream_entry *add_olestream_thunk(SEGPTR s16) { struct olestream_entry *data = HeapAlloc(GetProcessHeap(), 0, sizeof(struct olestream_entry)); data->olestream16 = s16; data->olestream32.lpstbl = &olestream32_vtbl; list_add_tail(&olestream_list, &data->entry); return data; } static SEGPTR OLESTREAM_16(LPOLESTREAM stream32) { struct olestream_entry *cur, *next; LIST_FOR_EACH_ENTRY_SAFE(cur, next, &olestream_list, struct olestream_entry, entry) { if (&cur->olestream32 == stream32) return cur->olestream16; } FIXME("\n"); return 0; } static LPOLESTREAM OLESTREAM_32(SEGPTR stream16) { struct olestream_entry *cur, *next; LIST_FOR_EACH_ENTRY_SAFE(cur, next, &olestream_list, struct olestream_entry, entry) { if (cur->olestream16 == stream16) return &cur->olestream32; } return &add_olestream_thunk(stream16)->olestream32; } /****************************************************************************** * OleSavedClientDoc [OLECLI.45] */ OLESTATUS WINAPI OleSavedClientDoc16(LHCLIENTDOC hDoc) { return OleSavedClientDoc(hDoc); } /****************************************************************************** * OleRegisterClientDoc [OLECLI.41] */ OLESTATUS WINAPI OleRegisterClientDoc16(LPCSTR classname, LPCSTR docname, LONG reserved, LHCLIENTDOC *hRet ) { return OleRegisterClientDoc(classname, docname, reserved, hRet); } /****************************************************************************** * OleRenameClientDoc [OLECLI.43] */ OLESTATUS WINAPI OleRenameClientDoc16(LHCLIENTDOC hDoc, LPCSTR newName) { return OleRenameClientDoc(hDoc, newName); } /****************************************************************************** * OleRevokeClientDoc [OLECLI.42] */ OLESTATUS WINAPI OleRevokeClientDoc16(LHCLIENTDOC hServerDoc) { return OleRevokeClientDoc(hServerDoc); } /****************************************************************************** * OleRevertClientDoc [OLECLI.44] */ OLESTATUS WINAPI OleRevertClientDoc16(LHCLIENTDOC hServerDoc) { return OleRevertClientDoc(hServerDoc); } /****************************************************************************** * OleEnumObjects [OLECLI.47] */ OLESTATUS WINAPI OleEnumObjects16(LHCLIENTDOC hServerDoc, SEGPTR *data) { LPOLEOBJECT obj32 = OLEOBJ32(*data); OLESTATUS result = OleEnumObjects(hServerDoc, &obj32); *data = OLEOBJ16(obj32); return result; } /****************************************************************************** * OleCreateLinkFromClip [OLECLI.11] */ OLESTATUS WINAPI OleCreateLinkFromClip16( LPCSTR name, SEGPTR olecli, LHCLIENTDOC hclientdoc, LPCSTR xname, SEGPTR *lpoleob, OLEOPT_RENDER render, OLECLIPFORMAT clipformat ) { LPOLECLIENT olecli32 = get_ole_client32(olecli); LPOLEOBJECT obj32 = 0; OLESTATUS status = OleCreateLinkFromClip(name, olecli32, hclientdoc, xname, &obj32, render, clipformat); *lpoleob = OLEOBJ16(obj32); return status; } /****************************************************************************** * OleQueryLinkFromClip [OLECLI.9] */ OLESTATUS WINAPI OleQueryLinkFromClip16(LPCSTR name, UINT16 render, UINT16 clipformat) { return OleQueryLinkFromClip(name, render, clipformat); } /****************************************************************************** * OleQueryCreateFromClip [OLECLI.10] */ OLESTATUS WINAPI OleQueryCreateFromClip16(LPCSTR name, UINT16 render, UINT16 clipformat) { return OleQueryCreateFromClip(name, render, clipformat); } /****************************************************************************** * OleIsDcMeta [OLECLI.60] */ BOOL16 WINAPI OleIsDcMeta16(HDC16 hdc) { return GetObjectType( HDC_32(hdc) ) == OBJ_METADC; } /****************************************************************************** * OleQueryType [OLECLI.14] */ OLESTATUS WINAPI OleQueryType16(SEGPTR oleobj16, LPLONG xlong) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleQueryType(oleobj, xlong); return result; } /****************************************************************************** * OleCreateFromClip [OLECLI.12] */ OLESTATUS WINAPI OleCreateFromClip16( LPCSTR name, SEGPTR olecli, LHCLIENTDOC hclientdoc, LPCSTR xname, SEGPTR lpoleob, UINT16 render, UINT16 clipformat ) { return OleCreateFromClip(name, MapSL(olecli), hclientdoc, xname, MapSL(lpoleob), render, clipformat); } int CALLBACK ole_client_Callback(LPOLECLIENT client, OLE_NOTIFICATION notif, LPOLEOBJECT oleobject) { struct ole_client_info *info = find_ole_client(client); int ret; WORD args[5]; SEGPTR obj16 = OLEOBJ16(oleobject); args[4] = HIWORD(info->client16); args[3] = LOWORD(info->client16); args[2] = (WORD)notif; args[1] = HIWORD(obj16); args[0] = LOWORD(obj16); TRACE("(%08x,%04x,%08x)\n", info->client16, notif, obj16); WOWCallback16Ex(((OLECLIENTVTBL16*)MapSL(((OLECLIENT16*)MapSL(info->client16))->lpvtbl))->CallBack, WCB16_PASCAL, sizeof(args), args, &ret); return ret; } LPOLECLIENT get_ole_client32(SEGPTR client) { struct ole_client_info *info = NULL; for (int i = 0; i < MAX_OLECLIENT; i++) { if (!ole_clients[i].used) { info = ole_clients + i; break; } } if (!info) return NULL; info->used = TRUE; info->client.lpvtbl = &info->vtable; info->vtable.CallBack = ole_client_Callback; info->client16 = client; OLECLIENT16 *clientp = MapSL(client); info->vtable16 = clientp->lpvtbl; return &info->client; } OLESTATUS WINAPI OleCreate16(LPCSTR name, SEGPTR client, LPCSTR xname, LHCLIENTDOC hclientdoc, LPCSTR xxname, SEGPTR *oleobject, OLEOPT_RENDER render, OLECLIPFORMAT format) { LPOLECLIENT client32 = get_ole_client32(client); LPOLEOBJECT obj32 = 0; DWORD count; ReleaseThunkLock(&count); OLESTATUS status = OleCreate(name, client32, xname, hclientdoc, xxname, &obj32, render, format); RestoreThunkLock(count); *oleobject = OLEOBJ16(obj32); return status; } OLESTATUS WINAPI OleSetHostNames16(DWORD oleobj, LPCSTR name, LPCSTR name2) { LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj); OLESTATUS status = OleSetHostNames(oleobj32, name, name2); return status = OLE_OK/*workaround for WRITE.EXE*/; } OLE_RELEASE_METHOD WINAPI OleQueryReleaseMethod16(SEGPTR oleobj) { LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj); OLE_RELEASE_METHOD ret = OleQueryReleaseMethod(oleobj32); return ret; } OLESTATUS WINAPI OleQueryReleaseError16(SEGPTR oleobj) { LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj); OLESTATUS ret = OleQueryReleaseError(oleobj32); return ret; } OLESTATUS WINAPI OleQuerySize16(SEGPTR oleobj, DWORD *size) { LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj); OLESTATUS ret = OleQuerySize(oleobj32, size); return ret; } static void RECT16to32(const RECT16 *from, RECT *to) { to->left = from->left; to->top = from->top; to->right = from->right; to->bottom = from->bottom; } static void RECT32to16(const RECT *from, RECT16 *to) { to->left = from->left; to->top = from->top; to->right = from->right; to->bottom = from->bottom; } OLESTATUS WINAPI OleQueryBounds16(SEGPTR oleobj, RECT16 *rect) { LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj); RECT rect32; OLESTATUS ret = OleQueryBounds(oleobj32, &rect32); RECT32to16(&rect32, rect); return ret; } OLESTATUS WINAPI OleDraw16(DWORD oleobj, HDC16 hdc1, const RECT16 *rect1, const RECT16 *rect2, HDC16 hdc2) { LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj); RECT rect132, rect232; if (rect1) { RECT16to32(rect1, &rect132); } if (rect2) { RECT16to32(rect2, &rect232); } OLESTATUS status = OleDraw(oleobj32, HDC_32(hdc1), rect1 ? &rect132 : NULL, rect2 ? &rect232 : NULL, HDC_32(hdc2)); return status; } OLESTATUS WINAPI OleActivate16(SEGPTR oleobj, UINT uint, BOOL b1, BOOL b2, HWND16 hwnd, const RECT16 FAR * rect) { LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj); RECT rect32; DWORD count; if (rect) { RECT16to32(rect, &rect32); } ReleaseThunkLock(&count); OLESTATUS status = OleActivate(oleobj32, uint, b1, b2, HWND_32(hwnd), rect ? &rect32 : NULL); RestoreThunkLock(count); return status; } #include typedef struct { UINT16 otdDeviceNameOffset; UINT16 otdDriverNameOffset; UINT16 otdPortNameOffset; UINT16 otdExtDevmodeOffset; UINT16 otdExtDevmodeSize; UINT16 otdEnvironmentOffset; UINT16 otdEnvironmentSize; BYTE otdData[1]; } OLETARGETDEVICE16; #include OLESTATUS WINAPI OleSetTargetDevice16(SEGPTR oleobj16, HGLOBAL16 hotd) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLETARGETDEVICE16 *otd = GlobalLock16(hotd); DWORD size = GlobalSize16(hotd); DWORD exdata = size - sizeof(OLETARGETDEVICE16) + 1; HGLOBAL hotd32 = GlobalAlloc(0, sizeof(OLETARGETDEVICE) + exdata); OLETARGETDEVICE *otd32 = GlobalLock(hotd32); otd32->otdDeviceNameOffset = otd->otdDeviceNameOffset; otd32->otdDriverNameOffset = otd->otdDriverNameOffset; otd32->otdPortNameOffset = otd->otdPortNameOffset; otd32->otdExtDevmodeOffset = otd->otdExtDevmodeOffset; otd32->otdExtDevmodeSize = otd->otdExtDevmodeSize; otd32->otdEnvironmentOffset = otd->otdEnvironmentOffset; otd32->otdEnvironmentSize = otd->otdEnvironmentSize; memcpy(&otd32->otdData, &otd->otdData, exdata); OLESTATUS status = OleSetTargetDevice(oleobj, otd32); GlobalUnlock(otd32); GlobalFree(hotd32); GlobalUnlock16(hotd); /* workaround for WRITE.EXE */ if (status == OLE_BUSY) return OLE_OK; return status; } OLESTATUS WINAPI OleCreateFromFile16(LPCSTR protocol, SEGPTR client, LPCSTR lpszClass, LPCSTR file, LHCLIENTDOC clientdoc, LPCSTR objname, SEGPTR *lplpObject, OLEOPT_RENDER render, OLECLIPFORMAT fmt) { LPOLECLIENT client32 = get_ole_client32(client); LPOLEOBJECT obj32 = 0; OLESTATUS result = OleCreateFromFile(protocol, client32, lpszClass, file, clientdoc, objname, &obj32, render, fmt); *lplpObject = OLEOBJ16(obj32); if (result == OLE_ERROR_OPEN) { int count = 5; while (--count && result == OLE_ERROR_OPEN) { ERR("(%s,%08x,%s,%s,%08x,%s,%p,%d,%d):result == OLE_ERROR_OPEN\n", protocol, client32, lpszClass, file, clientdoc, objname, lplpObject, render, fmt); result = OleCreateFromFile(protocol, client32, lpszClass, file, clientdoc, objname, &obj32, render, fmt); } *lplpObject = OLEOBJ16(obj32); if (result == OLE_OK) ERR("success.\n"); } return result; } OLESTATUS WINAPI OleQueryReleaseStatus16(SEGPTR oleobj16) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleQueryReleaseStatus(oleobj); return result; } OLESTATUS WINAPI OleLockServer16(SEGPTR oleobj16, LHSERVER *server) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleLockServer(oleobj, server); return result; } OLESTATUS WINAPI OleUnlockServer16(LHSERVER hserver16) { OLESTATUS result = OleUnlockServer(hserver16); return result; } OLESTATUS WINAPI OleDelete16(SEGPTR oleobj16) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleDelete(oleobj); return result; } OLESTATUS WINAPI OleQueryOpen16(SEGPTR oleobj16) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleQueryOpen(oleobj); return result; } OLESTATUS WINAPI OleRelease16(SEGPTR oleobj16) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleRelease(oleobj); return result; } OLESTATUS WINAPI OleUpdate16(SEGPTR oleobj16) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleUpdate(oleobj); return result; } OLESTATUS WINAPI OleClose16(SEGPTR oleobj16) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleClose(oleobj); return result; } OLESTATUS WINAPI OleReconnect16(SEGPTR oleobj16) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleReconnect(oleobj); return result; } OLESTATUS WINAPI OleEqual16(SEGPTR oleobj16, SEGPTR oleobj162) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); LPOLEOBJECT oleobj2 = OLEOBJ32(oleobj162); OLESTATUS result = OleEqual(oleobj, oleobj2); return result; } OLESTATUS WINAPI OleRename16(SEGPTR oleobj16, LPCSTR name) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleRename(oleobj, name); return result; } OLESTATUS WINAPI OleGetData16(SEGPTR oleobj16, OLECLIPFORMAT fmt, HANDLE16 *handle) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); HANDLE handle32; OLESTATUS result; *handle = 0; if (TRACE_ON(ole)) { char buf[100]; if (GetClipboardFormatNameA(fmt, buf, 100)) { TRACE("(%p,%04x(%s),%p)\n", oleobj, fmt, debugstr_a(buf), handle); } else { TRACE("(%p,%04x,%p)\n", oleobj, fmt, handle); } } if (fmt == CF_METAFILEPICT) { /* user.c SetClipboardData16 */ HANDLE16 data16 = 0; UINT size; void *ptr; result = OleGetData(oleobj, fmt, &handle32); METAFILEPICT16 *pict16; METAFILEPICT *pict32 = GlobalLock(handle32); if (pict32) { if (!(data16 = GlobalAlloc16(GMEM_MOVEABLE, sizeof(*pict16)))) return 0; pict16 = GlobalLock16(data16); pict16->mm = pict32->mm; pict16->xExt = pict32->xExt; pict16->yExt = pict32->yExt; size = GetMetaFileBitsEx(pict32->hMF, 0, NULL); pict16->hMF = GlobalAlloc16(GMEM_MOVEABLE, size); ptr = GlobalLock16(pict16->hMF); GetMetaFileBitsEx(pict32->hMF, size, ptr); GlobalUnlock16(pict16->hMF); GlobalUnlock16(data16); } *handle = data16; return result; } if (fmt == CF_BITMAP) { result = OleGetData(oleobj, fmt, &handle32); *handle = HBITMAP_16(handle32); return result; } if (fmt < 0xc000) { FIXME("unknown format %04x\n", fmt); } result = OleGetData(oleobj, fmt, &handle32); if ((result == OLE_OK || result == OLE_WARN_DELETE_DATA) && handle32) { SIZE_T size = GlobalSize(handle32); HGLOBAL16 handle16 = GlobalAlloc16(GMEM_MOVEABLE, size); *handle = handle16; LPVOID mem = GlobalLock16(handle16); memcpy(mem, GlobalLock(handle32), size); GlobalUnlock(handle32); if (result == OLE_WARN_DELETE_DATA) GlobalFree(handle32); GlobalUnlock16(handle16); return OLE_WARN_DELETE_DATA; // hopefully the client will free the handle } return result; } OLESTATUS WINAPI OleSetData16(SEGPTR oleobj16, OLECLIPFORMAT fmt, HANDLE16 handle) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result; if (TRACE_ON(ole)) { char buf[100]; if (GetClipboardFormatNameA(fmt, buf, 100)) { TRACE("(%p,%04x(%s),%04x)\n", oleobj, fmt, debugstr_a(buf), handle); } else { TRACE("(%p,%04x,%04x)\n", oleobj, fmt, handle); } } if (fmt == CF_METAFILEPICT) { FIXME("fmt == CF_METAFILEPICT\n"); return OLE_ERROR_OBJECT; } if (fmt == CF_BITMAP) { FIXME("fmt == CF_BITMAP\n"); return OLE_ERROR_OBJECT; } if (fmt < 0xc000) { FIXME("unknown format %04x\n", fmt); } DWORD size = GlobalSize16(handle); LPVOID mem = GlobalLock16(handle); HGLOBAL hg = GlobalAlloc(0, size); LPVOID mem32 = GlobalLock(hg); memcpy(mem32, mem, size); GlobalUnlock(hg); GlobalUnlock16(handle); result = OleSetData(oleobj, fmt, hg); GlobalFree(hg); return result; } OLECLIPFORMAT WINAPI OleEnumFormats16(SEGPTR oleobj16, OLECLIPFORMAT fmt) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); return OleEnumFormats(oleobj, fmt); } OLESTATUS WINAPI OleCopyToClipboard16(SEGPTR oleobj16) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); OLESTATUS result = OleCopyToClipboard(oleobj); return result; } OLESTATUS WINAPI OleClone16(SEGPTR oleobj16, SEGPTR client, LHCLIENTDOC doc, LPCSTR name, LPOLEOBJECT *lplpobj) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); LPOLECLIENT client32 = get_ole_client32(client); OLESTATUS result = OleClone(oleobj, client32, doc, name, lplpobj); return result; } OLESTATUS WINAPI OleSaveToStream16(SEGPTR oleobj16, SEGPTR lpStream) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); LPOLESTREAM stream = OLESTREAM_32(lpStream); OLESTATUS result = OleSaveToStream(oleobj, stream); return result; } OLESTATUS WINAPI OleLoadFromStream16(SEGPTR lpStream16, LPCSTR protocol, SEGPTR client, LHCLIENTDOC doc, LPCSTR objname, SEGPTR *lplpoleobj16) { LPOLESTREAM stream32 = OLESTREAM_32(lpStream16); LPOLECLIENT client32 = get_ole_client32(client); LPOLEOBJECT obj = 0; OLESTATUS result = OleLoadFromStream(stream32, protocol, client32, doc, objname, &obj); *lplpoleobj16 = OLEOBJ16(obj); return result; } OLESTATUS WINAPI OleSetBounds16(SEGPTR oleobj16, RECT16 *rect) { RECT rect32; LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); if (rect) RECT16to32(rect, &rect32); OLESTATUS result = OleSetBounds(oleobj, rect ? &rect32 : NULL); return result; } OLESTATUS WINAPI OleQueryName16(SEGPTR oleobj16, LPSTR name, UINT16 *lpbufsize) { LPOLEOBJECT oleobj = OLEOBJ32(oleobj16); UINT bufsize = 0; bufsize = *lpbufsize; OLESTATUS result = OleQueryName(oleobj, name, &bufsize); *lpbufsize = bufsize; return result; } OLESTATUS WINAPI OleCreateInvisible16(LPCSTR protocol, SEGPTR olecli16, LPCSTR cls, LHCLIENTDOC doc, LPCSTR obj, SEGPTR *lplpoleobj16, OLEOPT_RENDER renderopt, OLECLIPFORMAT fmt, BOOL actv) { LPOLECLIENT client32 = get_ole_client32(olecli16); LPOLEOBJECT obj32 = NULL; OLESTATUS result = OleCreateInvisible(protocol, client32, cls, doc, obj, &obj32, renderopt, fmt, actv); *lplpoleobj16 = OLEOBJ16(obj32); return result; } OLESTATUS WINAPI OleSetColorScheme16(SEGPTR oleobj16, const LOGPALETTE *pal) { LPOLEOBJECT obj32 = OLEOBJ32(oleobj16); OLESTATUS result = OleSetColorScheme(obj32, pal); return result; } OLESTATUS WINAPI OleGetLinkUpdateOptions16(SEGPTR oleobj16, WORD *update) { LPOLEOBJECT obj32 = OLEOBJ32(oleobj16); OLEOPT_UPDATE update32 = *update; OLESTATUS result = OleGetLinkUpdateOptions(obj32, &update32); *update = (WORD)update32; return result; } OLESTATUS WINAPI OleSetLinkUpdateOptions16(SEGPTR oleobj16, OLEOPT_UPDATE update) { LPOLEOBJECT obj32 = OLEOBJ32(oleobj16); OLESTATUS result = OleSetLinkUpdateOptions(obj32, update); return result; } ================================================ FILE: olecli/olecli.def ================================================ ; File generated automatically from ..\olecli\olecli.dll16.spec; do not edit! LIBRARY olecli.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: olecli/olecli.dll16.spec ================================================ #1 WEP 2 pascal -ret16 OleDelete(segptr) OleDelete16 3 pascal -ret16 OleSaveToStream(segptr segptr) OleSaveToStream16 4 pascal -ret16 OleLoadFromStream(segptr str segptr long str ptr) OleLoadFromStream16 6 pascal -ret16 OleClone(segptr segptr long str ptr) OleClone16 7 stub OLECOPYFROMLINK 8 pascal -ret16 OleEqual(segptr segptr) OleEqual16 9 pascal -ret16 OleQueryLinkFromClip(str word word) OleQueryLinkFromClip16 10 pascal -ret16 OleQueryCreateFromClip(str word word) OleQueryCreateFromClip16 11 pascal -ret16 OleCreateLinkFromClip (str segptr long str ptr word word) OleCreateLinkFromClip16 12 pascal -ret16 OleCreateFromClip(str segptr long str long word word) OleCreateFromClip16 13 pascal -ret16 OleCopyToClipboard(segptr) OleCopyToClipboard16 14 pascal -ret16 OleQueryType(segptr ptr) OleQueryType16 15 pascal -ret16 OleSetHostNames(long str str) OleSetHostNames16 16 pascal -ret16 OleSetTargetDevice(segptr word) OleSetTargetDevice16 17 pascal -ret16 OleSetBounds(segptr ptr) OleSetBounds16 18 pascal -ret16 OleQueryBounds(long ptr) OleQueryBounds16 19 pascal -ret16 OleDraw(long word ptr ptr word) OleDraw16 20 pascal -ret16 OleQueryOpen(segptr) OleQueryOpen16 21 pascal -ret16 OleActivate(segptr word word word word ptr) OleActivate16 22 pascal -ret16 OleUpdate(segptr) OleUpdate16 23 pascal -ret16 OleReconnect(segptr) OleReconnect16 24 pascal -ret16 OleGetLinkUpdateOptions(segptr ptr) OleGetLinkUpdateOptions16 25 pascal -ret16 OleSetLinkUpdateOptions(segptr word) OleSetLinkUpdateOptions16 26 pascal -ret16 OleEnumFormats(segptr word) OleEnumFormats16 27 pascal -ret16 OleClose(segptr) OleClose16 28 pascal -ret16 OleGetData(segptr word ptr) OleGetData16 29 pascal -ret16 OleSetData(segptr word word) OleSetData16 30 stub OLEQUERYPROTOCOL 31 stub OLEQUERYOUTOFDATE 32 stub OLEOBJECTCONVERT 33 stub OLECREATEFROMTEMPLATE 34 pascal -ret16 OleCreate(str segptr str long str ptr word word) OleCreate16 35 pascal -ret16 OleQueryReleaseStatus(segptr) OleQueryReleaseStatus16 36 pascal -ret16 OleQueryReleaseError(long) OleQueryReleaseError16 37 pascal -ret16 OleQueryReleaseMethod(long) OleQueryReleaseMethod16 38 pascal -ret16 OleCreateFromFile(str segptr str str long str ptr word word) OleCreateFromFile16 39 stub OLECREATELINKFROMFILE 40 pascal -ret16 OleRelease(segptr) OleRelease16 41 pascal -ret16 OleRegisterClientDoc(ptr ptr long ptr) OleRegisterClientDoc16 42 pascal -ret16 OleRevokeClientDoc(long) OleRevokeClientDoc16 43 pascal -ret16 OleRenameClientDoc(long ptr) OleRenameClientDoc16 44 pascal -ret16 OleRevertClientDoc(long) OleRevertClientDoc16 45 pascal -ret16 OleSavedClientDoc(long) OleSavedClientDoc16 46 pascal -ret16 OleRename(segptr str) OleRename16 47 pascal -ret16 OleEnumObjects(long ptr) OleEnumObjects16 48 pascal -ret16 OleQueryName(segptr str ptr) OleQueryName16 49 pascal -ret16 OleSetColorScheme(segptr ptr) OleSetColorScheme16 50 stub OLEREQUESTDATA 54 pascal -ret16 OleLockServer(segptr ptr) OleLockServer16 55 pascal -ret16 OleUnlockServer(segptr) OleUnlockServer16 56 pascal -ret16 OleQuerySize(long ptr) OleQuerySize16 57 stub OLEEXECUTE 58 pascal -ret16 OleCreateInvisible(str segptr str long str ptr word word word) OleCreateInvisible16 59 pascal -ret16 OleQueryClientVersion() OleQueryClientVersion16 60 pascal -ret16 OleIsDcMeta(word) OleIsDcMeta16 100 stub DOCWNDPROC 101 stub SRVRWNDPROC 102 stub MFCALLBACKFUNC 110 stub DEFLOADFROMSTREAM 111 stub DEFCREATEFROMCLIP 112 stub DEFCREATELINKFROMCLIP 113 stub DEFCREATEFROMTEMPLATE 114 stub DEFCREATE 115 stub DEFCREATEFROMFILE 116 stub DEFCREATELINKFROMFILE 117 stub DEFCREATEINVISIBLE 200 stub LERELEASE 201 stub LESHOW 202 stub LEGETDATA 203 stub LESETDATA 204 stub LESETHOSTNAMES 205 stub LESETTARGETDEVICE 206 stub LESETBOUNDS 207 stub LESAVETOSTREAM 208 stub LECLONE 209 stub LECOPYFROMLINK 210 stub LEEQUAL 211 stub LECOPY 212 stub LEQUERYTYPE 213 stub LEQUERYBOUNDS 214 stub LEDRAW 215 stub LEQUERYOPEN 216 stub LEACTIVATE 218 stub LEUPDATE 219 stub LERECONNECT 220 stub LEENUMFORMAT 221 stub LEQUERYPROTOCOL 222 stub LEQUERYOUTOFDATE 223 stub LEOBJECTCONVERT 224 stub LECHANGEDATA 225 stub LECLOSE 226 stub LEGETUPDATEOPTIONS 227 stub LESETUPDATEOPTIONS 228 stub LEEXECUTE 229 stub LEOBJECTLONG 230 stub LECREATEINVISIBLE 300 stub MFRELEASE 301 stub MFGETDATA 302 stub MFSAVETOSTREAM 303 stub MFCLONE 304 stub MFEQUAL 305 stub MFCOPY 307 stub MFQUERYBOUNDS 308 stub MFDRAW 309 stub MFENUMFORMAT 310 stub MFCHANGEDATA 400 stub BMRELEASE 401 stub BMGETDATA 402 stub BMSAVETOSTREAM 403 stub BMCLONE 404 stub BMEQUAL 405 stub BMCOPY 407 stub BMQUERYBOUNDS 408 stub BMDRAW 409 stub BMENUMFORMAT 410 stub BMCHANGEDATA 500 stub DIBRELEASE 501 stub DIBGETDATA 502 stub DIBSAVETOSTREAM 503 stub DIBCLONE 504 stub DIBEQUAL 505 stub DIBCOPY 507 stub DIBQUERYBOUNDS 508 stub DIBDRAW 509 stub DIBENUMFORMAT 510 stub DIBCHANGEDATA 600 stub GENRELEASE 601 stub GENGETDATA 602 stub GENSETDATA 603 stub GENSAVETOSTREAM 604 stub GENCLONE 605 stub GENEQUAL 606 stub GENCOPY 608 stub GENQUERYBOUNDS 609 stub GENDRAW 610 stub GENENUMFORMAT 611 stub GENCHANGEDATA 701 stub ERRSHOW 702 stub ERRSETDATA 703 stub ERRSETHOSTNAMES 704 stub ERRSETTARGETDEVICE 705 stub ERRSETBOUNDS 706 stub ERRCOPYFROMLINK 707 stub ERRQUERYOPEN 708 stub ERRACTIVATE 709 stub ERRCLOSE 710 stub ERRUPDATE 711 stub ERRRECONNECT 712 stub ERRQUERYPROTOCOL 713 stub ERRQUERYOUTOFDATE 714 stub ERROBJECTCONVERT 715 stub ERRGETUPDATEOPTIONS 716 stub ERRSETUPDATEOPTIONS 717 stub ERREXECUTE 718 stub ERROBJECTLONG 800 stub PBLOADFROMSTREAM 801 stub PBCREATEFROMCLIP 802 stub PBCREATELINKFROMCLIP 803 stub PBCREATEFROMTEMPLATE 804 stub PBCREATE 805 stub PBDRAW 806 stub PBQUERYBOUNDS 807 stub PBCOPYTOCLIPBOARD 808 stub PBCREATEFROMFILE 809 stub PBCREATELINKFROMFILE 810 stub PBENUMFORMATS 811 stub PBGETDATA 812 stub PBCREATEINVISIBLE 910 stub OBJQUERYNAME 911 stub OBJRENAME 912 stub OBJQUERYTYPE 913 stub OBJQUERYSIZE 950 stub CONNECTDLGPROC 951 stub SETNETNAME 952 stub CHECKNETDRIVE 953 stub SETNEXTNETDRIVE 954 stub GETTASKVISIBLEWINDOW ================================================ FILE: olecli/olecli.h ================================================ /* * OLECLI library * * Copyright 1995 Martin von Loewis * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ typedef enum { OLE_OK, OLE_WAIT_FOR_RELEASE, OLE_BUSY, OLE_ERROR_PROTECT_ONLY, OLE_ERROR_MEMORY, OLE_ERROR_STREAM, OLE_ERROR_STATIC, OLE_ERROR_BLANK, OLE_ERROR_DRAW, OLE_ERROR_METAFILE, OLE_ERROR_ABORT, OLE_ERROR_CLIPBOARD, OLE_ERROR_FORMAT, OLE_ERROR_OBJECT, OLE_ERROR_OPTION, OLE_ERROR_PROTOCOL, OLE_ERROR_ADDRESS, OLE_ERROR_NOT_EQUAL, OLE_ERROR_HANDLE, OLE_ERROR_GENERIC, OLE_ERROR_CLASS, OLE_ERROR_SYNTAX, OLE_ERROR_DATATYPE, OLE_ERROR_PALETTE, OLE_ERROR_NOT_LINK, OLE_ERROR_NOT_EMPTY, OLE_ERROR_SIZE, OLE_ERROR_DRIVE, OLE_ERROR_NETWORK, OLE_ERROR_NAME, OLE_ERROR_TEMPLATE, OLE_ERROR_NEW, OLE_ERROR_EDIT, OLE_ERROR_OPEN, OLE_ERROR_NOT_OPEN, OLE_ERROR_LAUNCH, OLE_ERROR_COMM, OLE_ERROR_TERMINATE, OLE_ERROR_COMMAND, OLE_ERROR_SHOW, OLE_ERROR_DOVERB, OLE_ERROR_ADVISE_NATIVE, OLE_ERROR_ADVISE_PICT, OLE_ERROR_ADVISE_RENAME, OLE_ERROR_POKE_NATIVE, OLE_ERROR_REQUEST_NATIVE, OLE_ERROR_REQUEST_PICT, OLE_ERROR_SERVER_BLOCKED, OLE_ERROR_REGISTRATION, OLE_ERROR_ALREADY_REGISTERED, OLE_ERROR_TASK, OLE_ERROR_OUTOFDATE, OLE_ERROR_CANT_UPDATE_CLIENT, OLE_ERROR_UPDATE, OLE_ERROR_SETDATA_FORMAT, OLE_ERROR_STATIC_FROM_OTHER_OS, OLE_WARN_DELETE_DATA = 1000 } OLESTATUS; typedef enum { oleupdate_always, oleupdate_onsave, oleupdate_oncall, oleupdate_onclose } OLEOPT_UPDATE; typedef enum { OLE_NONE, /* none */ OLE_DELETE, /* delete object */ OLE_LNKPASTE, /* link paste */ OLE_EMBPASTE, /* paste(and update) */ OLE_SHOW, OLE_RUN, OLE_ACTIVATE, OLE_UPDATE, OLE_CLOSE, OLE_RECONNECT, OLE_SETUPDATEOPTIONS, OLE_SERVERRUNLAUNCH, /* unlaunch (terminate?) server */ OLE_LOADFROMSTREAM, /* (auto reconnect) */ OLE_SETDATA, /* OleSetData */ OLE_REQUESTDATA, /* OleRequestData */ OLE_OTHER, OLE_CREATE, OLE_CREATEFROMTEMPLATE, OLE_CREATELINKFROMFILE, OLE_COPYFROMLNK, OLE_CREATREFROMFILE, OLE_CREATEINVISIBLE } OLE_RELEASE_METHOD; typedef LONG LHCLIENTDOC; typedef struct _OLEOBJECT *_LPOLEOBJECT; typedef struct _OLECLIENT *LPOLECLIENT; typedef LONG OLECLIPFORMAT;/* dunno about this type, please change/add */ typedef OLEOPT_UPDATE *LPOLEOPT_UPDATE; typedef LPCSTR LPCOLESTR16; struct _OLESTREAM; ================================================ FILE: olecli/olecli.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj olecli {B3496128-1B1F-4D55-8F7F-7E39A53ABE75} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true olecli32.lib;ole32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; gdi32.lib;%(AdditionalDependencies) true olecli.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false olecli.def olecli32.lib;ole32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; gdi32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" OLECLI > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" OLECLI > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: olesvr/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(olesvr SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/olesvr.def olesvr.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(olesvr.dll16 olesvr) target_link_libraries(olesvr libwine winecrt0 krnl386 olesvr32.lib) set_target_properties(olesvr PROPERTIES SUFFIX ".dll16") ================================================ FILE: olesvr/Makefile.in ================================================ MODULE = olesvr.dll16 IMPORTS = gdi32 EXTRADLLFLAGS = -m16 -Wb,--main-module,olesvr32.dll C_SRCS = olesvr.c ================================================ FILE: olesvr/olesvr.c ================================================ /* * OLESVR library * * Copyright 1995 Martin von Loewis * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* At the moment, these are only empty stubs. */ #include "config.h" //????? #define __oleidl_h__ #define _OLE2_H_ #include #ifndef _MSC_VER #define _Analysis_noreturn_ #endif #define SERVERONLY #include #include #include "windef.h" #include "winbase.h" #include "wownt32.h" #include "wine/windef16.h" #include "wine/winbase16.h" #include "objbase.h" #include "wine/debug.h" #include "wine/wingdi16.h" #include "wingdi.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); #define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16)) #define HINSTANCE_16(h32) (LOWORD(h32)) #define MAX_OLESERVER 32 typedef LONG LHSERVER; typedef LONG LHSERVERDOC; typedef LPCSTR LPCOLESTR16; typedef INT16 OLE_NOTIFICATION16; typedef OLEOPT_UPDATE *LPOLEOPT_UPDATE; typedef struct { OLEOBJECT obj; SEGPTR obj16; } ole_object_wrapper; ole_object_wrapper ole_objs[MAX_OLESERVER]; ole_object_wrapper *impl_from_oleobject(LPOLEOBJECT obj) { return (ole_object_wrapper*)CONTAINING_RECORD(obj, ole_object_wrapper, obj); } ole_object_wrapper *find_oleobject(SEGPTR obj16) { for (int i = 0; i < MAX_OLESERVER; i++) if (ole_objs[i].obj16 == obj16) return &ole_objs[i]; return NULL; } typedef struct _OLEOBJECTVTBL16 { SEGPTR QueryProtocol; /* void *(CALLBACK *QueryProtocol)(_LPOLEOBJECT,LPCOLESTR16);*/ SEGPTR Release; /* OLESTATUS (CALLBACK *Release)(_LPOLEOBJECT);*/ SEGPTR Show; /* OLESTATUS (CALLBACK *Show)(_LPOLEOBJECT,BOOL16);*/ SEGPTR DoVerb; /* OLESTATUS (CALLBACK *DoVerb)(_LPOLEOBJECT,UINT16,BOOL16,BOOL16);*/ SEGPTR GetData; /* OLESTATUS (CALLBACK *GetData)(_LPOLEOBJECT,OLECLIPFORMAT,HANDLE16 *);*/ SEGPTR SetData; /* OLESTATUS (CALLBACK *SetData)(_LPOLEOBJECT,OLECLIPFORMAT,HANDLE16);*/ SEGPTR SetTargetDevice; /* OLESTATUS (CALLBACK *SetTargetDevice)(_LPOLEOBJECT,HGLOBAL16);*/ SEGPTR SetBounds; /* OLESTATUS (CALLBACK *SetBounds)(_LPOLEOBJECT,LPRECT16);*/ SEGPTR EnumFormats; /* OLESTATUS (CALLBACK *EnumFormats)(_LPOLEOBJECT,OLECLIPFORMAT);*/ SEGPTR SetColorScheme; /* OLESTATUS (CALLBACK *SetColorScheme)(_LPOLEOBJECT,struct tagLOGPALETTE*);*/ #ifndef SERVERONLY // nothing below used here SEGPTR Delete; /* OLESTATUS (CALLBACK *Delete)(_LPOLEOBJECT);*/ SEGPTR SetHostNames; /* OLESTATUS (CALLBACK *SetHostNames)(_LPOLEOBJECT,LPCOLESTR16,LPCOLESTR16);*/ SEGPTR SaveToStream; /* OLESTATUS (CALLBACK *SaveToStream)(_LPOLEOBJECT,struct _OLESTREAM*);*/ SEGPTR Clone; /* OLESTATUS (CALLBACK *Clone)(_LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT *);*/ SEGPTR CopyFromLink; /* OLESTATUS (CALLBACK *CopyFromLink)(_LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT *);*/ SEGPTR Equal; /* OLESTATUS (CALLBACK *Equal)(_LPOLEOBJECT,_LPOLEOBJECT);*/ SEGPTR CopyToClipBoard; /* OLESTATUS (CALLBACK *CopyToClipBoard)(_LPOLEOBJECT);*/ SEGPTR Draw; /* OLESTATUS (CALLBACK *Draw)(_LPOLEOBJECT,HDC16,LPRECT16,LPRECT16,HDC16);*/ SEGPTR Activate; /* OLESTATUS (CALLBACK *Activate)(_LPOLEOBJECT,UINT16,BOOL16,BOOL16,HWND16,LPRECT16);*/ SEGPTR Execute; /* OLESTATUS (CALLBACK *Execute)(_LPOLEOBJECT,HGLOBAL16,UINT16);*/ SEGPTR Close; /* OLESTATUS (CALLBACK *Close)(_LPOLEOBJECT);*/ SEGPTR Update; /* OLESTATUS (CALLBACK *Update)(_LPOLEOBJECT);*/ SEGPTR Reconnect; /* OLESTATUS (CALLBACK *Reconnect)(_LPOLEOBJECT);*/ SEGPTR ObjectConvert; /* OLESTATUS (CALLBACK *ObjectConvert)(_LPOLEOBJECT,LPCOLESTR16,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT*);*/ SEGPTR GetLinkUpdateOptions; /* OLESTATUS (CALLBACK *GetLinkUpdateOptions)(_LPOLEOBJECT,LPOLEOPT_UPDATE);*/ SEGPTR SetLinkUpdateOptions; /* OLESTATUS (CALLBACK *SetLinkUpdateOptions)(_LPOLEOBJECT,OLEOPT_UPDATE);*/ SEGPTR Rename; /* OLESTATUS (CALLBACK *Rename)(_LPOLEOBJECT,LPCOLESTR16);*/ SEGPTR QueryName; /* OLESTATUS (CALLBACK *QueryName)(_LPOLEOBJECT,LPSTR,LPUINT16);*/ SEGPTR QueryType; /* OLESTATUS (CALLBACK *QueryType)(_LPOLEOBJECT,LPLONG);*/ SEGPTR QueryBounds; /* OLESTATUS (CALLBACK *QueryBounds)(_LPOLEOBJECT,LPRECT16);*/ SEGPTR QuerySize; /* OLESTATUS (CALLBACK *QuerySize)(_LPOLEOBJECT,LPDWORD);*/ SEGPTR QueryOpen; /* OLESTATUS (CALLBACK *QueryOpen)(_LPOLEOBJECT);*/ SEGPTR QueryOutOfDate; /* OLESTATUS (CALLBACK *QueryOutOfDate)(_LPOLEOBJECT);*/ SEGPTR QueryReleaseStatus; /* OLESTATUS (CALLBACK *QueryReleaseStatus)(_LPOLEOBJECT);*/ SEGPTR QueryReleaseError; /* OLESTATUS (CALLBACK *QueryReleaseError)(_LPOLEOBJECT);*/ SEGPTR QueryReleaseMethod; /* OLE_RELEASE_METHOD (CALLBACK *QueryReleaseMethod)(_LPOLEOBJECT);*/ SEGPTR RequestData; /* OLESTATUS (CALLBACK *RequestData)(_LPOLEOBJECT,OLECLIPFORMAT);*/ SEGPTR ObjectLong; /* OLESTATUS (CALLBACK *ObjectLong)(_LPOLEOBJECT,UINT16,LPLONG);*/ #endif } OLEOBJECTVTBL16, *LPOLEOBJECTVTBL16; typedef struct _OLEOBJECT16 { SEGPTR lpvtbl; /* const OLEOBJECTVTBL16 *lpvtbl; */ } OLEOBJECT16, *LPOLEOBJECT16; LPOLEOBJECTVTBL16 get_oleobjectvtbl16(ole_object_wrapper *obj) { return ((LPOLEOBJECTVTBL16)MapSL(((LPOLEOBJECT16)MapSL(obj->obj16))->lpvtbl)); } void * CALLBACK ole_obj_QueryProtocol(LPOLEOBJECT obj, LPCOLESTR a) { TRACE("\n"); return OLE_OK; } OLESTATUS CALLBACK ole_obj_Release(LPOLEOBJECT obj) { TRACE("\n"); WORD args[2]; ole_object_wrapper *objw = impl_from_oleobject(obj); LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw); DWORD ret; args[1] = HIWORD(objw->obj16); args[0] = LOWORD(objw->obj16); WOWCallback16Ex(vtbl16->Release, WCB16_PASCAL, sizeof(args), args, &ret); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_obj_Show(LPOLEOBJECT obj,BOOL a) { TRACE("\n"); WORD args[3]; ole_object_wrapper *objw = impl_from_oleobject(obj); LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw); DWORD ret; args[2] = HIWORD(objw->obj16); args[1] = LOWORD(objw->obj16); args[0] = LOWORD(a); WOWCallback16Ex(vtbl16->Show, WCB16_PASCAL, sizeof(args), args, &ret); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_obj_DoVerb(LPOLEOBJECT obj,UINT a,BOOL b,BOOL c) { TRACE("\n"); WORD args[5]; ole_object_wrapper *objw = impl_from_oleobject(obj); LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw); DWORD ret; args[4] = HIWORD(objw->obj16); args[3] = LOWORD(objw->obj16); args[2] = LOWORD(a); args[1] = LOWORD(b); args[0] = LOWORD(c); WOWCallback16Ex(vtbl16->DoVerb, WCB16_PASCAL, sizeof(args), args, &ret); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_obj_GetData(LPOLEOBJECT obj,OLECLIPFORMAT a,HANDLE *b) { TRACE("\n"); WORD args[5]; ole_object_wrapper *objw = impl_from_oleobject(obj); LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw); DWORD hndl = MapLS(b); DWORD ret; args[4] = HIWORD(objw->obj16); args[3] = LOWORD(objw->obj16); args[2] = LOWORD(a); args[1] = HIWORD(hndl); args[0] = LOWORD(hndl); WOWCallback16Ex(vtbl16->GetData, WCB16_PASCAL, sizeof(args), args, &ret); UnMapLS(hndl); HGLOBAL16 hmem16 = *b; if (hmem16) { if (a == CF_BITMAP) *b = HBITMAP_32(hmem16); else if (a == CF_METAFILEPICT) { HGLOBAL hmem = GlobalAlloc(GMEM_DDESHARE, sizeof(METAFILEPICT)); METAFILEPICT16 *pic16 = GlobalLock16(hmem16); METAFILEPICT *pic = GlobalLock(hmem); pic->mm = pic16->mm; pic->xExt = pic16->xExt; pic->yExt = pic16->yExt; void *mf = GlobalLock16(pic16->hMF); pic->hMF = SetMetaFileBitsEx(GlobalSize16(pic16->hMF), mf); GlobalUnlock16(pic16->hMF); GlobalFree16(pic16->hMF); GlobalUnlock16(hmem16); GlobalFree16(hmem16); GlobalUnlock(hmem); *b = hmem; } else { if (a < 0xc000) FIXME("unknown format %04x\n", a); int size = GlobalSize16(hmem16); void *optr = GlobalLock16(hmem16); HGLOBAL hmem = GlobalAlloc(GMEM_MOVEABLE, size); void *nptr = GlobalLock(hmem); memcpy(nptr, optr, size); GlobalUnlock16(hmem16); GlobalUnlock(hmem); GlobalFree16(hmem16); *b = hmem; } } return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_obj_SetData(LPOLEOBJECT obj,OLECLIPFORMAT fmt,HANDLE handle32) { TRACE("\n"); HANDLE16 handle = 0; if (fmt == CF_METAFILEPICT) { /* user.c SetClipboardData16 */ HANDLE16 data16 = 0; UINT size; void *ptr; METAFILEPICT16 *pict16; METAFILEPICT *pict32 = GlobalLock(handle32); if (pict32) { data16 = GlobalAlloc16(GMEM_MOVEABLE, sizeof(*pict16)); pict16 = GlobalLock16(data16); pict16->mm = pict32->mm; pict16->xExt = pict32->xExt; pict16->yExt = pict32->yExt; size = GetMetaFileBitsEx(pict32->hMF, 0, NULL); pict16->hMF = GlobalAlloc16(GMEM_MOVEABLE, size); ptr = GlobalLock16(pict16->hMF); GetMetaFileBitsEx(pict32->hMF, size, ptr); DeleteMetaFile(pict32->hMF); GlobalUnlock16(pict16->hMF); GlobalUnlock16(data16); } GlobalUnlock(handle32); GlobalFree(handle32); handle = data16; } else if (fmt == CF_BITMAP) handle = HBITMAP_16(handle32); else { if (fmt < 0xc000) FIXME("unknown format %04x\n", fmt); int size = GlobalSize(handle32); void *optr = GlobalLock(handle32); HGLOBAL hmem = GlobalAlloc16(GMEM_MOVEABLE, size); void *nptr = GlobalLock16(hmem); memcpy(nptr, optr, size); GlobalUnlock16(hmem); GlobalUnlock(handle32); GlobalFree(handle32); handle = hmem; } WORD args[4]; ole_object_wrapper *objw = impl_from_oleobject(obj); LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw); DWORD ret; args[3] = HIWORD(objw->obj16); args[2] = LOWORD(objw->obj16); args[1] = LOWORD(fmt); args[0] = handle; WOWCallback16Ex(vtbl16->SetData, WCB16_PASCAL, sizeof(args), args, &ret); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_obj_SetTargetDevice(LPOLEOBJECT obj,HGLOBAL a) { TRACE("\n"); WORD args[3]; ole_object_wrapper *objw = impl_from_oleobject(obj); LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw); DWORD ret; if (a) { int size = GlobalSize(a); void *optr = GlobalLock(a); HGLOBAL16 hmem16 = GlobalAlloc16(GMEM_MOVEABLE, size); void *nptr = GlobalLock16(hmem16); memcpy(nptr, optr, size); GlobalUnlock16(hmem16); GlobalUnlock(a); GlobalFree(a); a = hmem16; } args[2] = HIWORD(objw->obj16); args[1] = LOWORD(objw->obj16); args[0] = LOWORD(a); WOWCallback16Ex(vtbl16->SetTargetDevice, WCB16_PASCAL, sizeof(args), args, &ret); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_obj_SetBounds(LPOLEOBJECT obj,LPRECT a) { TRACE("\n"); return OLE_OK; } OLECLIPFORMAT CALLBACK ole_obj_EnumFormats(LPOLEOBJECT obj,OLECLIPFORMAT a) { TRACE("\n"); WORD args[3]; ole_object_wrapper *objw = impl_from_oleobject(obj); LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw); DWORD ret; args[2] = HIWORD(objw->obj16); args[1] = LOWORD(objw->obj16); args[0] = LOWORD(a); WOWCallback16Ex(vtbl16->EnumFormats, WCB16_PASCAL, sizeof(args), args, &ret); return (OLECLIPFORMAT)(WORD)ret; } OLESTATUS CALLBACK ole_obj_SetColorScheme(LPOLEOBJECT obj,struct tagLOGPALETTE* a) { TRACE("\n"); return OLE_OK; } OLEOBJECTVTBL oleobject_vtbl = { ole_obj_QueryProtocol, ole_obj_Release, ole_obj_Show, ole_obj_DoVerb, ole_obj_GetData, ole_obj_SetData, ole_obj_SetTargetDevice, ole_obj_SetBounds, ole_obj_EnumFormats, ole_obj_SetColorScheme }; int current_oleobject = 0; static LPOLEOBJECT register_oleobject(SEGPTR obj16) { if (current_oleobject >= MAX_OLESERVER) return NULL; current_oleobject++; LPOLEOBJECT obj = &ole_objs[current_oleobject - 1].obj; obj->lpvtbl = &oleobject_vtbl; ole_objs[current_oleobject - 1].obj16 = obj16; return obj; } INT16 CALLBACK ItemCallBack16(LPOLECLIENT client, OLE_NOTIFICATION16 notif, SEGPTR oleobject); typedef struct _OLESERVERDOCVTBL16 { SEGPTR Save; SEGPTR Close; SEGPTR SetHostNames; SEGPTR SetDocDimensions; SEGPTR GetObject; SEGPTR Release; SEGPTR SetColorScheme; SEGPTR Execute; } OLESERVERDOCVTBL16, *LPOLESERVERDOCVTBL16; typedef struct _OLESERVERDOC16 { const struct _OLESERVERDOCVTBL16 *lpvtbl; } OLESERVERDOC16, *LPOLESERVERDOC16; typedef struct { OLESERVERDOC document; SEGPTR doc16; } ole_server_doc_wrapper; ole_server_doc_wrapper ole_docs[MAX_OLESERVER]; ole_server_doc_wrapper *impl_from_oleserverdoc(LPOLESERVERDOC document) { return (ole_server_doc_wrapper*)CONTAINING_RECORD(document, ole_server_doc_wrapper, document); } LPOLESERVERDOCVTBL16 get_oleserverdocvtbl16(ole_server_doc_wrapper *doc) { return ((LPOLESERVERDOCVTBL16)MapSL(((LPOLESERVERDOC16)MapSL(doc->doc16))->lpvtbl)); } OLESTATUS CALLBACK ole_doc_Save(LPOLESERVERDOC document) { TRACE("\n"); return OLE_OK; } OLESTATUS CALLBACK ole_doc_Close(LPOLESERVERDOC document) { TRACE("\n"); WORD args[2]; ole_server_doc_wrapper *doc = impl_from_oleserverdoc(document); LPOLESERVERDOCVTBL16 vtbl16 = get_oleserverdocvtbl16(doc); DWORD ret; args[1] = HIWORD(doc->doc16); args[0] = LOWORD(doc->doc16); WOWCallback16Ex(vtbl16->Close, WCB16_PASCAL, sizeof(args), args, &ret); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_doc_SetHostNames(LPOLESERVERDOC document, OLE_LPCSTR name1, OLE_LPCSTR name2) { TRACE("\n"); ole_server_doc_wrapper *doc = impl_from_oleserverdoc(document); LPOLESERVERDOCVTBL16 vtbl16 = get_oleserverdocvtbl16(doc); WORD args[6]; DWORD name116 = MapLS(name1); DWORD name216 = MapLS(name2); DWORD ret; args[5] = HIWORD(doc->doc16); args[4] = LOWORD(doc->doc16); args[3] = HIWORD(name116); args[2] = LOWORD(name116); args[1] = HIWORD(name216); args[0] = LOWORD(name216); WOWCallback16Ex(vtbl16->SetHostNames, WCB16_PASCAL, sizeof(args), args, &ret); UnMapLS(name116); UnMapLS(name216); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_doc_SetDocDimensions(LPOLESERVERDOC document, OLE_CONST RECT FAR* rect) { TRACE("\n"); return OLE_OK; } OLESTATUS CALLBACK ole_doc_GetObject(LPOLESERVERDOC document, OLE_LPCSTR name, LPOLEOBJECT FAR* object, LPOLECLIENT client) { TRACE("\n"); static OLECLIENTVTBL oleclientvtbl16 = {0}; static SEGPTR ptrvtbl16; ole_server_doc_wrapper *doc = impl_from_oleserverdoc(document); LPOLESERVERDOCVTBL16 vtbl16 = get_oleserverdocvtbl16(doc); WORD args[8]; DWORD name16 = MapLS(name); DWORD obj16 = MapLS(object); DWORD cli16 = MapLS(client); // FIXME: this can't be freed until Release DWORD ret; if (!oleclientvtbl16.CallBack) { oleclientvtbl16.CallBack = GetProcAddress16(GetModuleHandle16("OLESVR"), "ITEMCALLBACK"); ptrvtbl16 = MapLS(&oleclientvtbl16); } client->lpvtbl = ptrvtbl16; args[7] = HIWORD(doc->doc16); args[6] = LOWORD(doc->doc16); args[5] = HIWORD(name16); args[4] = LOWORD(name16); args[3] = HIWORD(obj16); args[2] = LOWORD(obj16); args[1] = HIWORD(cli16); args[0] = LOWORD(cli16); WOWCallback16Ex(vtbl16->GetObject, WCB16_PASCAL, sizeof(args), args, &ret); UnMapLS(name16); UnMapLS(obj16); if ((WORD)ret == OLE_OK) *object = register_oleobject(*object); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_doc_Release(LPOLESERVERDOC document) { TRACE("\n"); WORD args[2]; ole_server_doc_wrapper *doc = impl_from_oleserverdoc(document); LPOLESERVERDOCVTBL16 vtbl16 = get_oleserverdocvtbl16(doc); DWORD ret; args[1] = HIWORD(doc->doc16); args[0] = LOWORD(doc->doc16); WOWCallback16Ex(vtbl16->Release, WCB16_PASCAL, sizeof(args), args, &ret); return (OLESTATUS)(WORD)ret; } OLESTATUS CALLBACK ole_doc_SetColorScheme(LPOLESERVERDOC document, OLE_CONST LOGPALETTE FAR* palette) { return OLE_OK; } OLESTATUS CALLBACK ole_doc_Execute(LPOLESERVERDOC document, HGLOBAL h) { return OLE_OK; } OLESERVERDOCVTBL oleserverdoc_vtable = { ole_doc_Save, ole_doc_Close, ole_doc_SetHostNames, ole_doc_SetDocDimensions, ole_doc_GetObject, ole_doc_Release, ole_doc_SetColorScheme, ole_doc_Execute }; int current_oleserver_doc = 0; static LPOLESERVERDOC register_oleserver_doc(SEGPTR doc16) { if (current_oleserver_doc >= MAX_OLESERVER) return NULL; current_oleserver_doc++; LPOLESERVERDOC doc = &ole_docs[current_oleserver_doc - 1].document; doc->lpvtbl = &oleserverdoc_vtable; ole_docs[current_oleserver_doc - 1].doc16 = doc16; return doc; } typedef struct _OLESERVER16 *LPOLESERVER16; typedef struct _OLESERVERVTBL16 { OLESTATUS (CALLBACK *Open)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPOLESERVERDOC *); OLESTATUS (CALLBACK *Create)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC*); OLESTATUS (CALLBACK *CreateFromTemplate)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC *); OLESTATUS (CALLBACK *Edit)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC *); OLESTATUS (CALLBACK *Exit)(LPOLESERVER); OLESTATUS (CALLBACK *Release)(LPOLESERVER); OLESTATUS (CALLBACK *Execute)(LPOLESERVER); } OLESERVERVTBL16, *LPOLESERVERVTBL16; typedef struct _OLESERVER16 { const OLESERVERVTBL16 *lpvtbl; } OLESERVER16; static LONG OLE_current_handle; int current_oleserver = 0; typedef struct { OLESERVER server; SEGPTR server16; } ole_server_wrapper; ole_server_wrapper ole_servers[MAX_OLESERVER]; ole_server_wrapper *impl_from_oleserver(LPOLESERVER server) { return (ole_server_wrapper*)CONTAINING_RECORD(server, ole_server_wrapper, server); } LPOLESERVERVTBL16 get_oleservervtbl16(ole_server_wrapper *server) { return ((LPOLESERVERVTBL16)MapSL(((LPOLESERVER16)MapSL(server->server16))->lpvtbl)); } static OLESTATUS CALLBACK ole_open_callback(LPOLESERVER a, LHSERVERDOC b, OLE_LPCSTR doc_name, LPOLESERVERDOC FAR* d) { TRACE("\n"); ole_server_wrapper *server = impl_from_oleserver(a); WORD args[8]; LPOLESERVERVTBL16 vtbl16 = get_oleservervtbl16(server); DWORD doc_name16 = MapLS(doc_name); DWORD doc16 = MapLS(d); DWORD ret; args[7] = HIWORD(server->server16); args[6] = LOWORD(server->server16); args[5] = HIWORD(b); args[4] = LOWORD(b); args[3] = HIWORD(doc_name16); args[2] = LOWORD(doc_name16); args[1] = HIWORD(doc16); args[0] = LOWORD(doc16); WOWCallback16Ex(vtbl16->Open, WCB16_PASCAL, sizeof(args), args, &ret); UnMapLS(doc_name16); UnMapLS(doc16); if ((WORD)ret == OLE_OK) *d = register_oleserver_doc(*d); return (OLESTATUS)(WORD)ret; } static OLESTATUS CALLBACK ole_create_callback(LPOLESERVER a, LHSERVERDOC b, OLE_LPCSTR c, OLE_LPCSTR d, LPOLESERVERDOC FAR* e) { TRACE("\n"); ole_server_wrapper *server = impl_from_oleserver(a); WORD args[10]; LPOLESERVERVTBL16 vtbl16 = get_oleservervtbl16(server); DWORD doc_name16 = MapLS(d); DWORD class16 = MapLS(c); DWORD doc16 = MapLS(e); DWORD ret; args[9] = HIWORD(server->server16); args[8] = LOWORD(server->server16); args[7] = HIWORD(b); args[6] = LOWORD(b); args[5] = HIWORD(class16); args[4] = LOWORD(class16); args[3] = HIWORD(doc_name16); args[2] = LOWORD(doc_name16); args[1] = HIWORD(doc16); args[0] = LOWORD(doc16); WOWCallback16Ex(vtbl16->Create, WCB16_PASCAL, sizeof(args), args, &ret); UnMapLS(doc_name16); UnMapLS(class16); UnMapLS(doc16); if ((WORD)ret == OLE_OK) *e = register_oleserver_doc(*e); return (OLESTATUS)(WORD)ret; } static OLESTATUS CALLBACK ole_create_from_template_callback(LPOLESERVER a, LHSERVERDOC b, OLE_LPCSTR c, OLE_LPCSTR d, OLE_LPCSTR e, LPOLESERVERDOC FAR* f) { TRACE("\n"); return OLE_OK; } static OLESTATUS CALLBACK ole_edit_callback(LPOLESERVER a, LHSERVERDOC b, OLE_LPCSTR c, OLE_LPCSTR d, LPOLESERVERDOC FAR* e) { TRACE("\n"); ole_server_wrapper *server = impl_from_oleserver(a); WORD args[10]; LPOLESERVERVTBL16 vtbl16 = get_oleservervtbl16(server); DWORD doc_name16 = MapLS(d); DWORD class16 = MapLS(c); DWORD doc16 = MapLS(e); DWORD ret; args[9] = HIWORD(server->server16); args[8] = LOWORD(server->server16); args[7] = HIWORD(b); args[6] = LOWORD(b); args[5] = HIWORD(class16); args[4] = LOWORD(class16); args[3] = HIWORD(doc_name16); args[2] = LOWORD(doc_name16); args[1] = HIWORD(doc16); args[0] = LOWORD(doc16); WOWCallback16Ex(vtbl16->Edit, WCB16_PASCAL, sizeof(args), args, &ret); UnMapLS(doc_name16); UnMapLS(class16); UnMapLS(doc16); if ((WORD)ret == OLE_OK) *e = register_oleserver_doc(*e); return (OLESTATUS)(WORD)ret; } static OLESTATUS CALLBACK ole_exit_callback(LPOLESERVER a) { TRACE("\n"); return OLE_OK; } static OLESTATUS CALLBACK ole_release_callback(LPOLESERVER a) { TRACE("\n"); ole_server_wrapper *server = impl_from_oleserver(a); WORD args[2]; LPOLESERVERVTBL16 vtbl16 = get_oleservervtbl16(server); DWORD ret; args[1] = HIWORD(server->server16); args[0] = LOWORD(server->server16); WOWCallback16Ex(vtbl16->Release, WCB16_PASCAL, sizeof(args), args, &ret); return (OLESTATUS)(WORD)ret; } static OLESTATUS CALLBACK ole_excute_callback(LPOLESERVER a, HGLOBAL b) { return OLE_OK; } static OLESERVERVTBL oleserver_vtbl = { ole_open_callback, ole_create_callback, ole_create_from_template_callback, ole_edit_callback, ole_exit_callback, ole_release_callback, ole_excute_callback }; static OLESERVER *register_oleserver(SEGPTR s16) { if (current_oleserver >= MAX_OLESERVER) return NULL; ole_servers[current_oleserver].server16 = s16; ole_servers[current_oleserver].server.lpvtbl = &oleserver_vtbl; current_oleserver++; return &ole_servers[current_oleserver - 1].server; } /****************************************************************************** * OleRegisterServer [OLESVR.2] */ OLESTATUS WINAPI OleRegisterServer16( LPCSTR name, LPOLESERVER16 serverStruct, LHSERVER *hRet, HINSTANCE16 hServer, OLE_SERVER_USE use ) { OLESERVER *s = register_oleserver(serverStruct); OLESTATUS status = OleRegisterServer(name, s, hRet, HINSTANCE_32(hServer), use); return status; } /****************************************************************************** * OleRevokeServer [OLESVR.3] */ OLESTATUS WINAPI OleRevokeServer16(LHSERVER hServer) { return OleRevokeServer(hServer); } /****************************************************************************** * OleBlockServer [OLESVR.4] */ OLESTATUS WINAPI OleBlockServer16(LHSERVER hServer) { return OleBlockServer(hServer); } /****************************************************************************** * OleUnblockServer [OLESVR.5] */ OLESTATUS WINAPI OleUnblockServer16(LHSERVER hServer, BOOL16 *block) { BOOL block32 = *block; OLESTATUS status = OleUnblockServer(hServer, &block32); *block = block32; return status; } /*********************************************************************** * OleRegisterServerDoc [OLESVR.6] */ OLESTATUS WINAPI OleRegisterServerDoc16( LHSERVER hServer, LPCSTR docname, SEGPTR document, LHSERVERDOC *hRet) { LPOLESERVERDOC doc32 = register_oleserver_doc(document); OLESTATUS result = OleRegisterServerDoc(hServer, docname, doc32, hRet); return result; } /****************************************************************************** * OleRevokeServerDoc [OLESVR.7] */ OLESTATUS WINAPI OleRevokeServerDoc16(LHSERVERDOC hServerDoc) { return OleRevokeServerDoc(hServerDoc); } /****************************************************************************** * OleRenameServerDoc [OLESVR.8] * */ OLESTATUS WINAPI OleRenameServerDoc16(LHSERVERDOC hDoc, LPCSTR newName) { return OleRenameServerDoc(hDoc, newName); } /****************************************************************************** * OleRevertServerDoc [OLESVR.9] * */ OLESTATUS WINAPI OleRevertServerDoc16(LHSERVERDOC hDoc) { return OleRevertServerDoc(hDoc); } /****************************************************************************** * OleSavedServerDoc [OLESVR.10] * */ OLESTATUS WINAPI OleSavedServerDoc16(LHSERVERDOC hDoc) { return OleSavedServerDoc(hDoc); } OLESTATUS WINAPI OleRevokeObject16(LPOLECLIENT client) { return OleRevokeObject(client); } DWORD WINAPI OleQueryServerVersion16() { return OleQueryServerVersion(); } INT16 CALLBACK ItemCallBack16(LPOLECLIENT client, OLE_NOTIFICATION16 notif, SEGPTR oleobject) { static INT (CALLBACK *ItemCallBack)(LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT) = NULL; if (!ItemCallBack) ItemCallBack = (INT (CALLBACK *)(LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT))GetProcAddress(GetModuleHandleA("olesvr32"), "ItemCallBack"); // oleobject must have been created with GetObject return ItemCallBack(client, notif, &find_oleobject(oleobject)->obj); } BOOL WINAPI DllEntryPoint16(DWORD reason, HINSTANCE16 inst, WORD ds, WORD heap, DWORD reserved1, WORD reserved2) { // olesvr32 has a bug where it will fail to load again if it is unloaded so force it to stay loaded LoadLibraryA("olesvr32.dll"); return TRUE; } ================================================ FILE: olesvr/olesvr.def ================================================ ; File generated automatically from ..\olesvr\olesvr.dll16.spec; do not edit! LIBRARY olesvr.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: olesvr/olesvr.dll16.spec ================================================ #1 WEP 2 pascal OleRegisterServer(str segptr ptr word word) OleRegisterServer16 3 pascal OleRevokeServer(long) OleRevokeServer16 4 pascal OleBlockServer(long) OleBlockServer16 5 pascal OleUnblockServer(long ptr) OleUnblockServer16 6 pascal OleRegisterServerDoc(long str segptr ptr) OleRegisterServerDoc16 7 pascal OleRevokeServerDoc(long) OleRevokeServerDoc16 8 pascal OleRenameServerDoc(long str) OleRenameServerDoc16 9 pascal OleRevertServerDoc(long) OleRevertServerDoc16 10 pascal OleSavedServerDoc(long) OleSavedServerDoc16 11 pascal OleRevokeObject(ptr) OleRevokeObject16 12 pascal OleQueryServerVersion() OleQueryServerVersion16 21 stub SRVRWNDPROC 22 stub DOCWNDPROC 23 stub ITEMWNDPROC 24 stub SENDDATAMSG 25 stub FINDITEMWND 26 pascal ItemCallBack(ptr word long) ItemCallBack16 27 stub TERMINATECLIENTS 28 stub TERMINATEDOCCLIENTS 29 stub DELETECLIENTINFO 30 stub SENDRENAMEMSG 31 stub ENUMFORTERMINATE 32 pascal -ret16 DllEntryPoint(long word word word long word) DllEntryPoint16 ================================================ FILE: olesvr/olesvr.vcxproj ================================================  Debug Win32 Release Win32 Debug x64 Release x64 Document "$(OutDir)convspec" "%(Filename).spec" OLESVR > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" OLESVR > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj {22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4} Win32Proj olesvr 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 true false .dll16 false Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;OLESVR_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true olesvr32.lib;ole32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;%(AdditionalDependencies) olesvr.def Level3 Disabled _DEBUG;_WINDOWS;_USRDLL;OLESVR_EXPORTS;%(PreprocessorDefinitions) Windows true Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;OLESVR_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true true true olesvr32.lib;ole32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;%(AdditionalDependencies) olesvr.def false Level3 MaxSpeed true true NDEBUG;_WINDOWS;_USRDLL;OLESVR_EXPORTS;%(PreprocessorDefinitions) Windows true true true ================================================ FILE: olesvr/olesvr.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: otvdm/CMakeLists.txt ================================================ file(GLOB SOURCE *.c) add_executable(otvdm ${SOURCE}) include_directories(../wine) add_definitions(-D_X86_) target_link_libraries(otvdm libwine krnl386) set(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") target_compile_definitions(otvdm PRIVATE -D_CONSOLE) if (MSVC) set_target_properties(otvdm PROPERTIES LINK_FLAGS ${DELAYED_LOADS}) endif() add_executable(otvdmw WIN32 ${SOURCE}) target_link_libraries(otvdmw libwine krnl386) if (MSVC) set_target_properties(otvdmw PROPERTIES LINK_FLAGS ${DELAYED_LOADS}) endif() ================================================ FILE: otvdm/otvdm.vcxproj ================================================  Debug Win32 Release Win32 {9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA} Win32Proj otvdm 10.0.17134.0 Application true v141 Unicode Application false v141 true Unicode true false $(OutDir);$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86); Level3 Disabled WIN32;_DEBUG;_CONSOLE;_LIB;_X86_;%(PreprocessorDefinitions) $(SolutionDir)wine;$(SolutionDir)wine\wine;%(AdditionalIncludeDirectories) Async false Console true libwine.lib;krnl386.lib;user.lib;ntdll.lib;%(AdditionalDependencies) $(OutDir) krnl386.exe16;libwine.dll;user32.dll;kernel32.dll;gdi32.dll;shell32.dll;comdlg32.dll; mkdir "$(SolutionDir)$(Configuration)\WINDOWS\SYSTEM" 2> NUL || ver > NUL Level3 MaxSpeed true true WIN32;NDEBUG;_CONSOLE;_LIB;_X86_;%(PreprocessorDefinitions) ../wine Console true true true libwine.lib;krnl386.lib;user.lib;ntdll.lib;%(AdditionalDependencies) krnl386.exe16;libwine.dll;user32.dll;kernel32.dll;gdi32.dll;shell32.dll;comdlg32.dll; mkdir "$(SolutionDir)$(Configuration)\WINDOWS\SYSTEM" 2> NUL || ver > NUL ================================================ FILE: otvdm/otvdm.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ヘッダー ファイル リソース ファイル ================================================ FILE: otvdm/otvdmw.vcxproj ================================================  Debug Win32 Release Win32 {73E019BF-2393-4BB3-90CA-B5B5749E4B69} Win32Proj otvdmw 10.0.17134.0 Application true v141 Unicode Application false v141 true Unicode true false $(OutDir);$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86); Level3 Disabled WINDOW;WIN32;_DEBUG;_LIB;_X86_;SUPPORT_DOS;%(PreprocessorDefinitions) $(SolutionDir)wine;$(SolutionDir)wine\wine;%(AdditionalIncludeDirectories) Async false w$(IntDir) w$(IntDir) w$(IntDir)vc$(PlatformToolsetVersion).pdb w$(IntDir) Windows true libwine.lib;krnl386.lib;user.lib;ntdll.lib;%(AdditionalDependencies) $(OutDir) krnl386.exe16;libwine.dll;user32.dll;kernel32.dll;gdi32.dll;shell32.dll;comdlg32.dll; mkdir "$(SolutionDir)$(Configuration)\WINDOWS\SYSTEM" 2> NUL || ver > NUL Level3 MaxSpeed true true WINDOW;WIN32;NDEBUG;_LIB;_X86_;%(PreprocessorDefinitions) ../wine w$(IntDir) w$(IntDir) w$(IntDir)vc$(PlatformToolsetVersion).pdb w$(IntDir) Windows true true true libwine.lib;krnl386.lib;user.lib;ntdll.lib;%(AdditionalDependencies) krnl386.exe16;libwine.dll;user32.dll;kernel32.dll;gdi32.dll;shell32.dll;comdlg32.dll; mkdir "$(SolutionDir)$(Configuration)\WINDOWS\SYSTEM" 2> NUL || ver > NUL ================================================ FILE: otvdm/otvdmw.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ヘッダー ファイル リソース ファイル ================================================ FILE: otvdm/resource.h ================================================ #define IDS_MANIFEST 101 ================================================ FILE: otvdm/visualstyle.manifest ================================================ a ================================================ FILE: otvdm/winevdm.c ================================================ /* * Wine virtual DOS machine * * Copyright 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #define CP_UNIXCP CP_ACP #include "wine/port.h" #include #include #include #include #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "wine/unicode.h" #include "wine/debug.h" #include "resource.h" #include "windows.h" WINE_DEFAULT_DEBUG_CHANNEL(winevdm); extern void __wine_load_dos_exe( LPCSTR filename, LPCSTR cmdline ); /*********************************************************************** * build_command_line * * Build the command line of a process from the argv array. * Copied from ENV_BuildCommandLine. */ static char *build_command_line( char **argv ) { int len; char *p, **arg, *cmd_line; if (!argv[0]) return ""; len = 0; for (arg = argv; *arg; arg++) { BOOL has_space; int bcount; char* a; has_space=FALSE; bcount=0; a=*arg; if( !*a ) has_space=TRUE; while (*a!='\0') { if (*a=='\\') { bcount++; } else { if (*a==' ' || *a=='\t') { has_space=TRUE; } else if (*a=='"') { /* doubling of '\' preceding a '"', * plus escaping of said '"' */ len+=2*bcount+1; } bcount=0; } a++; } len+=(a-*arg)+1 /* for the separating space */; if (has_space) len+=2; /* for the quotes */ } if (!(cmd_line = HeapAlloc( GetProcessHeap(), 0, len ? len + 1 : 2 ))) return NULL; p = cmd_line; *p++ = (len - 1 < 256) ? len - 1 /* remove last space */ : 255; for (arg = argv; *arg; arg++) { BOOL has_space,has_quote; char* a; /* Check for quotes and spaces in this argument */ has_space=has_quote=FALSE; a=*arg; if( !*a ) has_space=TRUE; while (*a!='\0') { if (*a==' ' || *a=='\t') { has_space=TRUE; if (has_quote) break; } else if (*a=='"') { has_quote=TRUE; if (has_space) break; } a++; } /* Now transfer it to the command line */ if (has_space) *p++='"'; if (has_quote) { int bcount; bcount=0; a=*arg; while (*a!='\0') { if (*a=='\\') { *p++=*a; bcount++; } else { if (*a=='"') { int i; /* Double all the '\\' preceding this '"', plus one */ for (i=0;i<=bcount;i++) *p++='\\'; *p++='"'; } else { *p++=*a; } bcount=0; } a++; } } else { strcpy(p,*arg); p+=strlen(*arg); } if (has_space) *p++='"'; *p++=' '; } if (len) p--; /* remove last space */ *p = '\0'; return cmd_line; } /*********************************************************************** * usage */ static void usage(void) { WINE_MESSAGE( "Usage: winevdm.exe [--app-name app.exe] command line\n\n" ); ExitProcess(1); } #include typedef struct _CURDIR { UNICODE_STRING DosPath; PVOID Handle; } CURDIR, *PCURDIR; typedef struct RTL_DRIVE_LETTER_CURDIR { USHORT Flags; USHORT Length; ULONG TimeStamp; UNICODE_STRING DosPath; } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR; typedef struct tagRTL_BITMAP { ULONG SizeOfBitMap; /* Number of bits in the bitmap */ PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */ } RTL_BITMAP, *PRTL_BITMAP; typedef const RTL_BITMAP *PCRTL_BITMAP; typedef struct tagRTL_BITMAP_RUN { ULONG StartingIndex; /* Bit position at which run starts */ ULONG NumberOfBits; /* Size of the run in bits */ } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN; /* value for Flags field (FIXME: not the correct name) */ #define PROCESS_PARAMS_FLAG_NORMALIZED 1 typedef struct _GDI_TEB_BATCH { ULONG Offset; HANDLE HDC; ULONG Buffer[0x136]; } GDI_TEB_BATCH; typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME { struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous; struct _ACTIVATION_CONTEXT *ActivationContext; ULONG Flags; } RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME; typedef struct _ACTIVATION_CONTEXT_STACK { ULONG Flags; ULONG NextCookieSequenceNumber; RTL_ACTIVATION_CONTEXT_STACK_FRAME *ActiveFrame; LIST_ENTRY FrameListCache; } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK; /*********************************************************************** * PEB data structure */ typedef struct { /* win32/win64 */ BOOLEAN InheritedAddressSpace; /* 000/000 */ BOOLEAN ReadImageFileExecOptions; /* 001/001 */ BOOLEAN BeingDebugged; /* 002/002 */ BOOLEAN SpareBool; /* 003/003 */ HANDLE Mutant; /* 004/008 */ HMODULE ImageBaseAddress; /* 008/010 */ PPEB_LDR_DATA LdrData; /* 00c/018 */ RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 010/020 */ PVOID SubSystemData; /* 014/028 */ HANDLE ProcessHeap; /* 018/030 */ PRTL_CRITICAL_SECTION FastPebLock; /* 01c/038 */ PVOID /*PPEBLOCKROUTINE*/ FastPebLockRoutine; /* 020/040 */ PVOID /*PPEBLOCKROUTINE*/ FastPebUnlockRoutine; /* 024/048 */ ULONG EnvironmentUpdateCount; /* 028/050 */ PVOID KernelCallbackTable; /* 02c/058 */ ULONG Reserved[2]; /* 030/060 */ PVOID /*PPEB_FREE_BLOCK*/ FreeList; /* 038/068 */ ULONG TlsExpansionCounter; /* 03c/070 */ PRTL_BITMAP TlsBitmap; /* 040/078 */ ULONG TlsBitmapBits[2]; /* 044/080 */ PVOID ReadOnlySharedMemoryBase; /* 04c/088 */ PVOID ReadOnlySharedMemoryHeap; /* 050/090 */ PVOID *ReadOnlyStaticServerData; /* 054/098 */ PVOID AnsiCodePageData; /* 058/0a0 */ PVOID OemCodePageData; /* 05c/0a8 */ PVOID UnicodeCaseTableData; /* 060/0b0 */ ULONG NumberOfProcessors; /* 064/0b8 */ ULONG NtGlobalFlag; /* 068/0bc */ LARGE_INTEGER CriticalSectionTimeout; /* 070/0c0 */ SIZE_T HeapSegmentReserve; /* 078/0c8 */ SIZE_T HeapSegmentCommit; /* 07c/0d0 */ SIZE_T HeapDeCommitTotalFreeThreshold; /* 080/0d8 */ SIZE_T HeapDeCommitFreeBlockThreshold; /* 084/0e0 */ ULONG NumberOfHeaps; /* 088/0e8 */ ULONG MaximumNumberOfHeaps; /* 08c/0ec */ PVOID *ProcessHeaps; /* 090/0f0 */ PVOID GdiSharedHandleTable; /* 094/0f8 */ PVOID ProcessStarterHelper; /* 098/100 */ PVOID GdiDCAttributeList; /* 09c/108 */ PVOID LoaderLock; /* 0a0/110 */ ULONG OSMajorVersion; /* 0a4/118 */ ULONG OSMinorVersion; /* 0a8/11c */ ULONG OSBuildNumber; /* 0ac/120 */ ULONG OSPlatformId; /* 0b0/124 */ ULONG ImageSubSystem; /* 0b4/128 */ ULONG ImageSubSystemMajorVersion; /* 0b8/12c */ ULONG ImageSubSystemMinorVersion; /* 0bc/130 */ ULONG ImageProcessAffinityMask; /* 0c0/134 */ HANDLE GdiHandleBuffer[28]; /* 0c4/138 */ ULONG unknown[6]; /* 134/218 */ PVOID PostProcessInitRoutine; /* 14c/230 */ PRTL_BITMAP TlsExpansionBitmap; /* 150/238 */ ULONG TlsExpansionBitmapBits[32]; /* 154/240 */ ULONG SessionId; /* 1d4/2c0 */ ULARGE_INTEGER AppCompatFlags; /* 1d8/2c8 */ ULARGE_INTEGER AppCompatFlagsUser; /* 1e0/2d0 */ PVOID ShimData; /* 1e8/2d8 */ PVOID AppCompatInfo; /* 1ec/2e0 */ UNICODE_STRING CSDVersion; /* 1f0/2e8 */ PVOID ActivationContextData; /* 1f8/2f8 */ PVOID ProcessAssemblyStorageMap; /* 1fc/300 */ PVOID SystemDefaultActivationData; /* 200/308 */ PVOID SystemAssemblyStorageMap; /* 204/310 */ SIZE_T MinimumStackCommit; /* 208/318 */ PVOID *FlsCallback; /* 20c/320 */ LIST_ENTRY FlsListHead; /* 210/328 */ PRTL_BITMAP FlsBitmap; /* 218/338 */ ULONG FlsBitmapBits[4]; /* 21c/340 */ } PEB2, *PPEB2; /*********************************************************************** * TEB data structure */ typedef struct { /* win32/win64 */ NT_TIB Tib; /* 000/0000 */ PVOID EnvironmentPointer; /* 01c/0038 */ HANDLE ClientId1, ClientId2; /* 020/0040 */ PVOID ActiveRpcHandle; /* 028/0050 */ PVOID ThreadLocalStoragePointer; /* 02c/0058 */ PPEB2 Peb; /* 030/0060 */ } TEB2, *PTEB2; //===reactos/sdk/include/ndk/pstypes.h== // PEB.AppCompatFlags // Tag FLAG_MASK_KERNEL // typedef enum _APPCOMPAT_FLAGS { GetShortPathNameNT4 = 0x1, GetDiskFreeSpace2GB = 0x8, FTMFromCurrentAPI = 0x20, DisallowCOMBindingNotifications = 0x40, Ole32ValidatePointers = 0x80, DisableCicero = 0x100, Ole32EnableAsyncDocFile = 0x200, EnableLegacyExceptionHandlinginOLE = 0x400, DisableAdvanceRPCClientHardening = 0x800, DisableMaybeNULLSizeisConsistencycheck = 0x1000, DisableAdvancedRPCrangeCheck = 0x4000, EnableLegacyExceptionHandlingInRPC = 0x8000, EnableLegacyNTFSFlagsForDocfileOpens = 0x10000, DisableNDRIIDConsistencyCheck = 0x20000, UserDisableForwarderPatch = 0x40000, DisableNewWMPAINTDispatchInOLE = 0x100000, Unknown0x00400000 = 0x00400000, DoNotAddToCache = 0x80000000, } APPCOMPAT_FLAGS; // // PEB.AppCompatFlagsUser.LowPart // Tag FLAG_MASK_USER // typedef enum _APPCOMPAT_USERFLAGS { DisableAnimation = 0x1, DisableKeyboardCues = 0x2, No50StylebitsInSetWindowLong = 0x4, DisableDrawPatternRect = 0x8, MSShellDialog = 0x10, NoDDETerminateDuringDestroy = 0x20, GiveupForeground = 0x40, AlwaysActiveMenus = 0x80, NoMouseHideInEdit = 0x100, NoGdiBatching = 0x200, FontSubstitution = 0x400, No50StylebitsInCreateWindow = 0x800, NoCustomPaperSizes = 0x1000, AllTheDdeHacks = 0x2000, UseDefaultCharset = 0x4000, NoCharDeadKey = 0x8000, NoTryExceptForWindowProc = 0x10000, NoInitInsertReplaceFlags = 0x20000, NoDdeSync = 0x40000, NoGhost = 0x80000, NoDdeAsyncReg = 0x100000, StrictLLHook = 0x200000, NoShadow = 0x400000, NoTimerCallbackProtection = 0x1000000, HighDpiAware = 0x2000000, OpenGLEmfAware = 0x4000000, EnableTransparantBltMirror = 0x8000000, NoPaddedBorder = 0x10000000, ForceLegacyResizeCM = 0x20000000, HardwareAudioMixer = 0x40000000, DisableSWCursorOnMoveSize = 0x80000000, #if 0 DisableWindowArrangement = 0x100000000, ReorderWaveForCommunications = 0x200000000, NoGdiHwAcceleration = 0x400000000, #endif } APPCOMPAT_USERFLAGS; // // PEB.AppCompatFlagsUser.HighPart // Tag FLAG_MASK_USER // typedef enum _APPCOMPAT_USERFLAGS_HIGHPART { DisableWindowArrangement = 0x1, ReorderWaveForCommunications = 0x2, NoGdiHwAcceleration = 0x4, } APPCOMPAT_USERFLAGS_HIGHPART; //===reactos/sdk/include/ndk/pstypes.h== void set_dll_path() { WCHAR mod_path[MAX_PATH]; DWORD attr; GetModuleFileNameW(NULL, mod_path, _countof(mod_path)); LPWSTR last = wcsrchr(mod_path, L'\\'); last[0] = 0; LPCWSTR dir = L"\\dll"; if (wcslen(mod_path) + wcslen(dir) + 1 < MAX_PATH) { memcpy(last, dir, (wcslen(dir) + 1) * sizeof(*dir)); attr = GetFileAttributesW(mod_path); if (attr != INVALID_FILE_ATTRIBUTES && attr & FILE_ATTRIBUTE_DIRECTORY) { WINE_TRACE("%s\n", wine_dbgstr_wn(mod_path, -1)); SetDllDirectoryW(mod_path); return; } } last[0] = 0; WINE_TRACE("%s\n", wine_dbgstr_wn(mod_path, -1)); SetDllDirectoryW(mod_path); } static BOOL set_peb_compatible_flag() { BOOL success = TRUE; TEB2 *teb = (TEB2*)NtCurrentTeb(); APPCOMPAT_FLAGS flags1 = (APPCOMPAT_FLAGS)teb->Peb->AppCompatFlags.LowPart; APPCOMPAT_USERFLAGS flags2 = (APPCOMPAT_USERFLAGS)teb->Peb->AppCompatFlagsUser.LowPart; APPCOMPAT_USERFLAGS_HIGHPART flags3 = (APPCOMPAT_USERFLAGS_HIGHPART)teb->Peb->AppCompatFlagsUser.HighPart; APPCOMPAT_FLAGS f = NoPaddedBorder | NoGhost; HMODULE user32 = GetModuleHandleA("user32.dll"); set_dll_path(); /* is old windows? */ if (GetProcAddress(GetModuleHandleA("kernel32"), "GetFileInformationByHandleEx") == NULL) return TRUE; if ((flags2 & f) != f && user32 != NULL) { /* Lazy loading currently only works with MSVC. */ #ifdef _MSC_VER WINE_ERR("user32.dll has already been loaded. (Anti-virus software may be the cause.)\n"); #else WINE_ERR("user32.dll has already been loaded.\n"); #endif WINE_ERR("Some compatibility flags can not be applied.\n"); success = FALSE; } teb->Peb->AppCompatFlagsUser.LowPart |= f; //teb->Peb->AppCompatFlagsUser.LowPart = -1; //teb->Peb->AppCompatFlagsUser.HighPart = -1; //teb->Peb->AppCompatFlags.LowPart = -1; return success; } static BOOL fix_compatible(void) { WCHAR image_path[MAX_PATH]; LPWSTR arg = GetCommandLineW(); DWORD pid = GetCurrentProcessId(); LPWSTR compat_arg = L"--fix-compat-mode "; PROCESS_BASIC_INFORMATION pbi; PWSTR arg2; PROCESS_INFORMATION proc_inf; STARTUPINFOW start_inf = { sizeof(STARTUPINFOW) }; GetModuleFileNameW(NULL, image_path, sizeof(image_path)); #ifdef SET_COMPAT_LAYER { HKEY hkey; LSTATUS stat = RegOpenKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers", &hkey); if (stat) return FALSE; LPWSTR reg_value = L"VistaRTM";// L"~ Win7RTM"; stat = RegSetValueExW(hkey, image_path, 0, REG_SZ, reg_value, strlenW(reg_value) * sizeof(WCHAR)); if (stat) return FALSE; RegCloseKey(hkey); } #endif arg2 = (PWSTR)malloc(sizeof(WCHAR) * (11 + strlenW(arg) + strlenW(compat_arg))); sprintfW(arg2, L"%s%d %s", compat_arg, pid, arg); if (!CreateProcessW(image_path, arg2, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &start_inf, &proc_inf)) { free(arg2); return FALSE; } free(arg2); WINE_ERR("child pid = %d\n", proc_inf.dwProcessId); if (NT_SUCCESS(NtQueryInformationProcess(proc_inf.hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), NULL))) { ULARGE_INTEGER AppCompatFlagsUser; if (ReadProcessMemory(proc_inf.hProcess, (ULONG_PTR)pbi.PebBaseAddress + offsetof(PEB2, AppCompatFlagsUser), &AppCompatFlagsUser, sizeof(AppCompatFlagsUser), NULL)) { AppCompatFlagsUser.LowPart |= NoPaddedBorder; WriteProcessMemory(proc_inf.hProcess, (ULONG_PTR)pbi.PebBaseAddress + offsetof(PEB2, AppCompatFlagsUser), &AppCompatFlagsUser, sizeof(AppCompatFlagsUser), NULL); } } ResumeThread(proc_inf.hThread); WaitForSingleObject(proc_inf.hProcess, INFINITE); CloseHandle(proc_inf.hProcess); CloseHandle(proc_inf.hThread); return TRUE; } static BOOL is_win32_exe(LPCSTR appname) { HANDLE file = CreateFileA(appname, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); IMAGE_DOS_HEADER header; DWORD read = 0; ReadFile(file, &header, sizeof(header), &read, NULL); if (read == sizeof(header) && header.e_lfanew >= sizeof(header)) { SetFilePointer(file, header.e_lfanew, 0, FILE_BEGIN); WORD magic; ReadFile(file, &magic, sizeof(WORD), &read, NULL); if (read == sizeof(WORD)) { if (magic == IMAGE_NT_SIGNATURE) { CloseHandle(file); return TRUE; } } } CloseHandle(file); return FALSE; } static void exec16(LOADPARAMS16 params, LPCSTR appname, LPCSTR cmdline, BOOL exit) { char *p; HINSTANCE16 instance; char shortpath[MAX_PATH]; GetShortPathNameA(appname, shortpath, MAX_PATH); appname = shortpath; if (is_win32_exe(appname)) { WINE_ERR("%s is a win32 executable file!\n", appname); } if ((instance = LoadModule16(appname, ¶ms)) < 32) { if (instance == 11) { __wine_load_dos_exe(appname, cmdline + 1); /* if we get back here it failed */ instance = GetLastError(); } WINE_MESSAGE("winevdm: can't exec '%s': ", appname); switch (instance) { case 2: WINE_MESSAGE("file not found\n"); break; case 11: WINE_MESSAGE("invalid program file\n"); break; default: WINE_MESSAGE("error=%d\n", instance); break; } if (exit) ExitProcess(instance); } } #include #define SHARED_WOW_CURDIR_SUPPORTED 1 typedef struct { WORD header; WORD showCmd; CHAR appname[MAX_PATH]; CHAR cmdline[MAX_PATH]; CHAR curdir[MAX_PATH]; /* environment variables... */ } shared_wow_exec; #include DWORD exec16_thread(LPVOID args) { shared_wow_exec exec_data = *(shared_wow_exec*)args; HeapFree(GetProcessHeap(), 0, args); LOADPARAMS16 params; WORD showCmd[2]; params.hEnvironment = 0; params.reserved = 0; if (exec_data.header == SHARED_WOW_CURDIR_SUPPORTED) { params.hEnvironment = 0x0bef; params.reserved = &exec_data.curdir; } showCmd[0] = 2; showCmd[1] = SW_SHOW; params.cmdLine = MapLS(exec_data.cmdline); params.showCmd = MapLS(showCmd); exec16(params, exec_data.appname, exec_data.cmdline, FALSE); return 0; } /* Returns TRUE if the pipe is pending. */ static BOOL connect_new_client(HANDLE handle, LPOVERLAPPED lpov) { DWORD err; if (ConnectNamedPipe(handle, lpov)) { return FALSE; } err = GetLastError(); if (err == ERROR_IO_PENDING) { return TRUE; } if (err == ERROR_PIPE_CONNECTED) { SetEvent(lpov->hEvent); } return FALSE; } /* \\.\pipe\otvdmpipe */ HANDLE run_shared_wow_server() { OVERLAPPED overlapped = { 0 }; BOOL pending; HANDLE server = CreateNamedPipeA("\\\\.\\pipe\\otvdmpipe", PIPE_ACCESS_INBOUND | PIPE_ACCESS_OUTBOUND | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_WAIT, 10, 0, 0, 1000, NULL); HANDLE event = CreateEventA(NULL, TRUE, TRUE, NULL); overlapped.hEvent = event; pending = connect_new_client(server, &overlapped); while (TRUE) { HANDLE handles[1] = { overlapped.hEvent }; MSG msg; DWORD ret = MsgWaitForMultipleObjects(1, handles, FALSE, INFINITE, QS_ALLINPUT); if (ret == WAIT_OBJECT_0 + 1 && PeekMessageA(&msg, NULL, 0, 0, TRUE)) { TranslateMessage(&msg); DispatchMessageA(&msg); } else if (pending) { DWORD read; shared_wow_exec exec_data = { 0 }; BOOL r = ReadFile(server, &exec_data, sizeof(exec_data), &read, NULL); DisconnectNamedPipe(server); if (r) { WINE_TRACE("%s %s\n", exec_data.appname, exec_data.cmdline); LPVOID data = HeapAlloc(GetProcessHeap(), 0, sizeof(exec_data)); memcpy(data, &exec_data, sizeof(exec_data)); /* LoadModule16 blocks thread */ HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)exec16_thread, data, 0, NULL); CloseHandle(hThread); } pending = connect_new_client(server, &overlapped); } } } BOOL run_shared_wow(LPCSTR appname, WORD showCmd, LPCSTR cmdline) { ULONG pid; HANDLE client = CreateFileA("\\\\.\\pipe\\otvdmpipe", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); BOOL (WINAPI *pGetNamedPipeServerProcessId)(HANDLE, PULONG) = (BOOL(WINAPI *)(HANDLE, PULONG))GetProcAddress(GetModuleHandleA("kernel32"), "GetNamedPipeServerProcessId"); if (client == INVALID_HANDLE_VALUE) { return FALSE; } if (pGetNamedPipeServerProcessId && pGetNamedPipeServerProcessId(client, &pid)) { AllowSetForegroundWindow(pid); } shared_wow_exec exec_data = { 0 }; exec_data.header = SHARED_WOW_CURDIR_SUPPORTED; exec_data.showCmd = showCmd; lstrcpynA(exec_data.cmdline, cmdline, MAX_PATH); lstrcpynA(exec_data.appname, appname, MAX_PATH); GetCurrentDirectoryA(MAX_PATH, exec_data.curdir); WriteFile(client, &exec_data, sizeof(exec_data), NULL, NULL); CloseHandle(client); return TRUE; } /*********************************************************************** * main */ #ifdef _CONSOLE int main( int argc, char *argv[] ) #else int entry_point( int argc, char *argv[] ) #endif { DWORD count; LOADPARAMS16 params; WORD showCmd[2]; char buffer[MAX_PATH]; STARTUPINFOA info; char *cmdline, *appname, **first_arg; DWORD pid; const char *cmdline1 = strstr(argv[0], " --ntvdm64:"); char **argv_copy = HeapAlloc(GetProcessHeap(), 0, sizeof(*argv) * (argc + 1)); BOOL compat_success = set_peb_compatible_flag(); BOOL use_shared_wow_server; #ifdef __CI_VERSION #define STR(x) #x #define STRSTR(x) STR(x) fprintf(stderr, "version: %s\n", STRSTR(__CI_VERSION)); #undef STR #undef STRSTR #endif memcpy(argv_copy, argv, argc * sizeof(*argv)); argv = argv_copy; /* NtVdm64 command line handling is buggy. Can not be handled if the extension is omitted CommandLine = "%c" >A.EXE GetCommandLineA()="A.EXE " >"A.EXE" GetCommandLineA()="\"A.EXE\" " >A.EXE a b c d GetCommandLineA()="A.EXE a b c d" >A GetCommandLineA()="A " >"A" GetCommandLineA()="\"A \"" ^???????????? >A a b c d GetCommandLineA()="A a b c d" >"A" a b c d GetCommandLineA()="\"A \" a b c d" CommandLine = "aaaa%cbbbb" >A.EXE GetCommandLineA()="A.EXE aaaabbbb" >A.EXE 1 2 3 4 GetCommandLineA()="A.EXE aaaa1 2 3 4bbbb" >"A.EXE" GetCommandLineA()="\"A\" aaaabbbb" >"A.EXE" 1 2 3 4 GetCommandLineA()="\"A.EXE\" aaaa1 2 3 4bbbb" >A GetCommandLineA()="A aaaabbbb" >A 1 2 3 4 GetCommandLineA()="A aaaa1 2 3 4bbbb" >"A" GetCommandLineA()="\"A aaaa\"bbbb" >"A" 1 2 3 4 GetCommandLineA()="\"A aaaa\" 1 2 3 4bbbb~" Workaround " --ntvdm64: "%m" --ntvdm64-args: %c" if argv[0] contains " --ntvdm64:" "\"A --ntvdm64: \"full-dos-path\A.EXE\" --ntvdm64-args \" 1 2 3 4" =>"\"A\" \"full-dos-path\A.EXE\" --ntvdm64-args 1 2 3 4" */ if (!strcmp(argv[0], "--fix-compat-mode")) { pid = atoi(argv[1]); WINE_ERR("parent pid = %d\n", pid); argv += 2; argc -= 2; compat_success = TRUE; } //compatible mode else if ((!compat_success #ifdef FIX_COMPAT_MODE || 1 #endif ) #ifdef SET_COMPAT_LAYER && getenv("__COMPAT_LAYER") == NULL #endif ) { #ifdef SET_COMPAT_LAYER WINE_ERR("Set compatible mode to VistaRTM\n"); #else WINE_ERR("Spawn a child process to apply compatible flags.\n"); #endif if (fix_compatible()) { return 0; } else { WINE_ERR("failed"); } } if (cmdline1) { LPWSTR raw = GetCommandLineW(); if (raw[0] == L'"') { LPWSTR new_cmdline = HeapAlloc(GetProcessHeap(), 0, (wcslen(raw) + 1) * sizeof(WCHAR)); memcpy(new_cmdline, raw, (wcslen(raw) + 1) * sizeof(WCHAR)); LPWSTR magic = wcsstr(new_cmdline, L" --ntvdm64:"); if (magic) { magic[0] = L'\"'; } LPWSTR magic2 = wcsstr(new_cmdline, L"--ntvdm64-args: \""); if (magic2) { *wcschr(magic2, L'\"') = L' '; } LPWSTR *argvw = CommandLineToArgvW(new_cmdline, &argc); HeapFree(GetProcessHeap(), 0, argv_copy); argv_copy = HeapAlloc(GetProcessHeap(), 0, sizeof(*argv) * (argc + 1)); for (int i = 0; i < argc; i++) { int length = WideCharToMultiByte(CP_ACP, 0, argvw[i], -1, NULL, 0, NULL, NULL); LPSTR arg = HeapAlloc(GetProcessHeap(), NULL, (length + 1) * sizeof(CHAR)); WideCharToMultiByte(CP_ACP, 0, argvw[i], -1, arg, length, NULL, NULL); arg[length] = '\0'; argv_copy[i] = arg; } LocalFree(argvw); argv = argv_copy; } } if (argc > 1 && !strcmp(argv[1], "--ntvdm64:")) { //remove argv[1] for (int i = 1; i < argc - 1; i++) { argv[i] = argv[i + 1]; } argc--; } if (argc > 2 && !strcmp(argv[2], "--ntvdm64-args:")) { //remove argv[2] for (int i = 2; i < argc - 1; i++) { argv[i] = argv[i + 1]; } argc--; } /* argv must be null-terminated */ argv[argc] = NULL; if (!argv[1]) usage(); if (!strcmp( argv[1], "--app-name" )) { if (!(appname = argv[2])) usage(); first_arg = argv + 3; } else { if (!SearchPathA( ".", argv[1], ".exe", sizeof(buffer), buffer, NULL ) && !SearchPathA( ".", argv[1], ".com", sizeof(buffer), buffer, NULL ) && !SearchPathA( NULL, argv[1], ".exe", sizeof(buffer), buffer, NULL ) && !SearchPathA( NULL, argv[1], ".com", sizeof(buffer), buffer, NULL )) { WINE_MESSAGE( "winevdm: unable to exec '%s': file not found\n", argv[1] ); ExitProcess(1); } appname = buffer; first_arg = argv + 1; } if (*first_arg) first_arg++; /* skip program name */ cmdline = build_command_line( first_arg ); if (WINE_TRACE_ON(winevdm)) { int i; WINE_TRACE( "GetCommandLine = '%s'\n", GetCommandLineA() ); WINE_TRACE( "appname = '%s'\n", appname ); WINE_TRACE( "cmdline = '%.*s'\n", cmdline[0], cmdline+1 ); for (i = 0; argv[i]; i++) WINE_TRACE( "argv[%d]: '%s'\n", i, argv[i] ); } GetStartupInfoA( &info ); showCmd[0] = 2; showCmd[1] = (info.dwFlags & STARTF_USESHOWWINDOW) ? info.wShowWindow : SW_SHOWNORMAL; params.hEnvironment = 0; use_shared_wow_server = !krnl386_get_config_int("otvdm", "SeparateWOWVDM", TRUE); if (use_shared_wow_server && run_shared_wow(appname, showCmd[1], cmdline)) { return 0; } params.cmdLine = MapLS( cmdline ); params.showCmd = MapLS( showCmd ); params.reserved = 0; RestoreThunkLock(1); /* grab the Win16 lock */ if (krnl386_get_config_int("otvdm", "ForceSingleProcessor", FALSE)) SetProcessAffinityMask(GetCurrentProcess(), 1); /* some programs assume mmsystem is always present */ LoadLibrary16( "gdi.exe" ); LoadLibrary16( "user.exe" ); LoadLibrary16( "mmsystem.dll" ); LoadLibrary16( "shell.dll" ); krnl386_set_compat_path(appname); if (krnl386_get_config_int("otvdm", "EnableVisualStyle", FALSE)) { ACTCTXA actctx = { 0 }; actctx.cbSize = sizeof(actctx); actctx.hModule = GetModuleHandleW(NULL); actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID; actctx.lpResourceName = MAKEINTRESOURCE(IDS_MANIFEST); HANDLE result = CreateActCtxA(&actctx); ULONG_PTR lpCookie; BOOL res = ActivateActCtx(result, &lpCookie); } exec16(params, appname, cmdline, TRUE); /* wait forever; the process will be killed when the last task exits */ ReleaseThunkLock(&count); if (use_shared_wow_server) run_shared_wow_server(); Sleep(1000); // sleep for a second so the loaded task can start, allows waitforinputidle to work while (TRUE) { MSG msg; GetMessageA(&msg, NULL, 0, 0); TranslateMessage(&msg); DispatchMessageA(&msg); } Sleep( INFINITE ); return 0; } #ifndef _CONSOLE /* otvdmw.exe entry point */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nShowCmd) { UNREFERENCED_PARAMETER(hInstance); UNREFERENCED_PARAMETER(hPrevInst); UNREFERENCED_PARAMETER(lpszCmdLine); UNREFERENCED_PARAMETER(nShowCmd); set_peb_compatible_flag(); if (__argc == 1) { OPENFILENAMEA ofn = { 0 }; char file[MAX_PATH] = { 0 }; ofn.lpstrFilter = "EXE(*.EXE)\0*.EXE\0"; ofn.nFilterIndex = 1; ofn.lStructSize = sizeof(ofn); ofn.lpstrFile = file; ofn.nMaxFile = sizeof(file); ofn.Flags = OFN_FILEMUSTEXIST; ofn.lpstrDefExt = "EXE"; ofn.lpstrTitle = ""; if (!GetOpenFileNameA(&ofn)) return 1; LPSTR *argv = HeapAlloc(GetProcessHeap(), 0, sizeof(char*) * 3); argv[0] = __argv[0]; argv[1] = ofn.lpstrFile; argv[2] = 0; if (is_win32_exe(argv[1])) { char buf[1000]; snprintf(buf, sizeof(buf), "\"%s\" is a win32 executable file!\n", argv[1]); WINE_ERR("%s is a win32 executable file!\n", argv[1]); MessageBoxA(NULL, buf, NULL, MB_OK | MB_ICONWARNING); } return entry_point(2, argv); } return entry_point(__argc, __argv); } #endif ================================================ FILE: otvdm.ini ================================================ ;The leading semicolon represents a comment. If you want to edit the settings, delete the leading semicolon. [otvdm] ; Enable visual style. (default: 0) ; Setting this to 1 will significantly affect compatibility. ;EnableVisualStyle=0 ; Disable window theme. (defualt: 1) ; Setting this to 0 will affect compatibility a bit. ;DisableAero=1 ; The path to redirected Windows directory. (default: .\WINDOWS) ;WINDIR=WINDOWS ; DOS version (default: 8.0) ;VDMDOSVER=x.x ; Windows version (default: 3.95) ;WINVER=3.1 ; Don't report running under Windows NT. (default: 0, report running under Windows NT) ;IAmNotNT=1 ; Separate taskbar icons among programs. (default: 2) ; 0: Don't separate ; 1: Separate for each otvdm.exe process ; 2: Separate ;SeparateTaskbar=2 ; SeparateWOWVDM (default: 1) ;SeparateWOWVDM=1 ; VM dll (default: vm86.dll software x86 emulator) ; vm86.dll: The slowest, most compatible, and most stable. ; haxmvm.dll: VM using a hypervisor ; You must install intel HAXM driver. ; https://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-intel-haxm ; It is 100 times faster (in some cases) than the software CPU emulator. ; gvm.dll: KVM ported to Windows ; You must install https://github.com/google/android-emulator-hypervisor-driver-for-amd-processors/releases ; Works with both AMD and Intel. ; whpxvm.dll: VM using Windows Hypervisor Platform ; HAXM, GVM cannot be installed if you are using WSL2, Hyper-V. ; Windows Hypervisor Platform should be enabled. ; Since whpxvm.dll is implemented by forcibly loading a 64-bit DLL into a 32-bit process, ; it may not work depending on the version of Windows. ; You must download the DLL from the following URL and place it in the dll directory. ; https://github.com/otya128/WinHvPlatform32/releases/tag/1.1 ; whpxvm.dll is the most stable of the hypervisors. ;vm=haxmvm.dll ; Fix the size of the screen to the value considering taskbar. (default: 0) ;FixScreenSize=1 ; Enable registry redirection (default: 0) ; All registry operations are redirected to: ; HKEY_CURRENT_USER\Software\otvdm\HKEY_CLASSES_ROOT ; HKEY_CURRENT_USER\Software\otvdm\HKEY_CURRENT_USER ; HKEY_CURRENT_USER\Software\otvdm\HKEY_LOCAL_MACHINE ; If necessary, combine SETUP.REG on windows setup disk with 16-bit REGEDIT. ;EnableRegistryRedirection=1 ; Limit the number of fonts. (some old programs can not process many fonts) ; (default: 0) ;EnumFontLimitation=1 ; Tweak rendering of TrueType fonts. ; Forced font quality values: (default: -1) ; -1: No forced quality 3: Non-antialiased ; 0: Default 4: Antialiased ; 1: Draft 5: ClearType ; 2: Proof ;ForceFontQuality=-1 ; Enable font antialias (default: 0) ; If EnableFontAntialias is 1, it is equivalent to ForceFontQuality=3. ;EnableFontAntialias=0 ; Improve XOR composition. (default: 0) ;DWMDesktopDCFix=1 ;DWMDesktopDCFixBackgroundColorR=254 ;DWMDesktopDCFixBackgroundColorG=254 ;DWMDesktopDCFixBackgroundColorB=254 ; Set application to launch MSDOS programs with ; Works with msdos player, dosbox (default: otvdm.exe) ;dosemu=msdos.exe ; Limit environment variable strings. (default: 1) ;EnvironmentVariableLimitation=1 ; Force otvdm onto a single processor, programs that require tight sync ; between two processes can be more reliable (default: 0) ;ForceSingleProcessor=1 ; Sleep for extra time in PeekMessage for programs that poll the message queue ; in a tight loop using all the available cpu time, wait time in milliseconds (default: 0) ;PeekMessageSleep=5 ; Emulate 8bpp color mode using DIBs (default: 0) ;DIBPalette=0 ; If EnumFontLimitation=1, this section declare the font to be enumerated. ;[EnumFontLimitation] ;font name=1(enumerated)/0(not enumerated) ;MS Serif=1 ;Webdings=0 ; Run a compatibility shim for elevated processes, requires full path to program if it isn't in %PATH% ; isfixload will shim installshield which calls sendmessagea(HWND_BROADCAST) which can hang if there ; is a process not servicing it's message queue ;ElevationShim=isfixload.exe ; Adjust the dpi for programs, especially visual basic, which use dpi for calculating ; font and window sizes but can get an integer overflow on large displays, can also ; make text larger in some cases ;AdjustDPI=120 ================================================ FILE: otvdm.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.34931.43 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "otvdm", "otvdm\otvdm.vcxproj", "{9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}" ProjectSection(ProjectDependencies) = postProject {E4950E01-C995-49A5-9FED-5EF03155FD65} = {E4950E01-C995-49A5-9FED-5EF03155FD65} {E4950E01-C995-49A5-9FED-5EF03155FD66} = {E4950E01-C995-49A5-9FED-5EF03155FD66} {258FD007-046D-4625-BB5A-B7934B71934F} = {258FD007-046D-4625-BB5A-B7934B71934F} {F234FA09-76BC-4154-8420-737CD7FA4EF7} = {F234FA09-76BC-4154-8420-737CD7FA4EF7} {7F73550E-724D-4F7A-B192-35A764AC24D6} = {7F73550E-724D-4F7A-B192-35A764AC24D6} {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C} = {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C} {CB9C6113-15AB-4DB9-A323-C2094A9A6E92} = {CB9C6113-15AB-4DB9-A323-C2094A9A6E92} {7B417913-AE01-41E5-BFEA-AB971B779F63} = {7B417913-AE01-41E5-BFEA-AB971B779F63} {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF} = {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF} {066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7} {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2} = {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2} {94C8AE24-778A-4FEB-B3E1-457BDCCE06DF} = {94C8AE24-778A-4FEB-B3E1-457BDCCE06DF} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {F10EEF26-6451-4988-84D4-D193A4D2BF8C} = {F10EEF26-6451-4988-84D4-D193A4D2BF8C} {F10EEF26-6451-4988-84D4-D193A4D2BF8D} = {F10EEF26-6451-4988-84D4-D193A4D2BF8D} {B3496128-1B1F-4D55-8F7F-7E39A53ABE75} = {B3496128-1B1F-4D55-8F7F-7E39A53ABE75} {BD91A02B-907B-4512-A963-1166D1EBC5C4} = {BD91A02B-907B-4512-A963-1166D1EBC5C4} {1AAA3531-513D-4A96-9795-D48CF33BF516} = {1AAA3531-513D-4A96-9795-D48CF33BF516} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {5AB8CD32-0031-4D8B-BFE0-382C6C1E1770} = {5AB8CD32-0031-4D8B-BFE0-382C6C1E1770} {3D889B37-09C8-4030-B815-830566CD57A3} = {3D889B37-09C8-4030-B815-830566CD57A3} {3D889B37-09C8-4030-B815-830566CD57A4} = {3D889B37-09C8-4030-B815-830566CD57A4} {3D889B37-09C8-4030-B815-830566CD57A5} = {3D889B37-09C8-4030-B815-830566CD57A5} {72482539-7702-455E-81E0-F3AF237CF57F} = {72482539-7702-455E-81E0-F3AF237CF57F} {2D769A3B-881A-4307-B6C9-02EBC61211A4} = {2D769A3B-881A-4307-B6C9-02EBC61211A4} {96925A3C-9DD9-418E-A772-A112FFE93DC2} = {96925A3C-9DD9-418E-A772-A112FFE93DC2} {ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A} = {ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A} {8914D84A-84BD-4F85-99AC-723F8AEABAEB} = {8914D84A-84BD-4F85-99AC-723F8AEABAEB} {6139024B-2348-440D-9192-3A40C3CE31B5} = {6139024B-2348-440D-9192-3A40C3CE31B5} {90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58} = {90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58} {09EF1555-CA21-47F8-8830-04A53295F8B6} = {09EF1555-CA21-47F8-8830-04A53295F8B6} {0EBCFB5B-3092-4E06-A007-CA50B1DA3298} = {0EBCFB5B-3092-4E06-A007-CA50B1DA3298} {0DCF5163-4049-4850-92BE-5D6A2444C51D} = {0DCF5163-4049-4850-92BE-5D6A2444C51D} {7C04956D-FEBE-410F-ABB1-945695CDDFE5} = {7C04956D-FEBE-410F-ABB1-945695CDDFE5} {55AC3B70-9AFB-498C-BEC6-F56AF538FEDF} = {55AC3B70-9AFB-498C-BEC6-F56AF538FEDF} {E0AF9E72-F364-481A-A6E5-63EA88DF684E} = {E0AF9E72-F364-481A-A6E5-63EA88DF684E} {3825B17A-681F-48CF-B9AD-5337B1F521C8} = {3825B17A-681F-48CF-B9AD-5337B1F521C8} {C8F4997D-B814-43BB-A71B-507B2E956F55} = {C8F4997D-B814-43BB-A71B-507B2E956F55} {B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A} = {B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A} {3A10E48B-E88F-46C6-8A01-7A62112D0E05} = {3A10E48B-E88F-46C6-8A01-7A62112D0E05} {90402A90-8D53-4843-BF11-7AE93361ED13} = {90402A90-8D53-4843-BF11-7AE93361ED13} {08AEBC9F-464E-41DD-B4CB-F2921F69B591} = {08AEBC9F-464E-41DD-B4CB-F2921F69B591} {D4EED8A5-2B15-4299-9F65-D56383AC7848} = {D4EED8A5-2B15-4299-9F65-D56383AC7848} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} {37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2} = {37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2} {FA7FFBC0-45A5-4419-B18C-DEC8363C2413} = {FA7FFBC0-45A5-4419-B18C-DEC8363C2413} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} {504CC4CA-612C-4681-AD9A-90E51785A5D2} = {504CC4CA-612C-4681-AD9A-90E51785A5D2} {6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C} = {6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C} {22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4} = {22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4} {249FBAE5-EC5D-4988-87AC-A4371D827BA4} = {249FBAE5-EC5D-4988-87AC-A4371D827BA4} {B76406F9-E89B-4791-ACDE-CD23813F764B} = {B76406F9-E89B-4791-ACDE-CD23813F764B} {F1DEC3F9-706B-410D-91D5-0381BB9BA22A} = {F1DEC3F9-706B-410D-91D5-0381BB9BA22A} {4A75E3F9-856A-4854-8AA2-34C06F7415BD} = {4A75E3F9-856A-4854-8AA2-34C06F7415BD} {2DF233FE-CBB8-4102-A68D-7D30C38961C1} = {2DF233FE-CBB8-4102-A68D-7D30C38961C1} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wine", "wine\wine.vcxproj", "{C978A6C2-F788-4F5E-8E14-73C1B6B521CE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "krnl386", "krnl386\krnl386.vcxproj", "{D3F34C25-272C-4E4F-9B6F-BE7ABB472966}" ProjectSection(ProjectDependencies) = postProject {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wow32", "wow32\wow32.vcxproj", "{E4950E01-C995-49A5-9FED-5EF03155FD65}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ntvdm", "ntvdm\ntvdm.vcxproj", "{E4950E01-C995-49A5-9FED-5EF03155FD66}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convspec", "convspec\convspec.vcxproj", "{DC6BA231-C318-436F-8F5C-5E2CC73779E2}" ProjectSection(ProjectDependencies) = postProject {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "user", "user\user.vcxproj", "{066A261B-90F6-4AB7-8F53-1455F068D6F7}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vm86", "vm86\vm86.vcxproj", "{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}" ProjectSection(ProjectDependencies) = postProject {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gdi", "gdi\gdi.vcxproj", "{0EBCFB5B-3092-4E06-A007-CA50B1DA3298}" ProjectSection(ProjectDependencies) = postProject {066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win87em", "win87em\win87em.vcxproj", "{08AEBC9F-464E-41DD-B4CB-F2921F69B591}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shell", "shell\shell.vcxproj", "{BD91A02B-907B-4512-A963-1166D1EBC5C4}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keyboard", "keyboard\keyboard.vcxproj", "{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}" ProjectSection(ProjectDependencies) = postProject {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winnls", "winnls\winnls.vcxproj", "{F234FA09-76BC-4154-8420-737CD7FA4EF7}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "commdlg", "commdlg\commdlg.vcxproj", "{8914D84A-84BD-4F85-99AC-723F8AEABAEB}" ProjectSection(ProjectDependencies) = postProject {066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {08AEBC9F-464E-41DD-B4CB-F2921F69B591} = {08AEBC9F-464E-41DD-B4CB-F2921F69B591} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "olesvr", "olesvr\olesvr.vcxproj", "{22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lzexpand", "lzexpand\lzexpand.vcxproj", "{3A10E48B-E88F-46C6-8A01-7A62112D0E05}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convertwinefile", "convertwinefile\convertwinefile.vcxproj", "{782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wing", "wing\wing.vcxproj", "{90402A90-8D53-4843-BF11-7AE93361ED13}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mmsystem", "mmsystem\mmsystem.vcxproj", "{249FBAE5-EC5D-4988-87AC-A4371D827BA4}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sound", "sound\sound.vcxproj", "{7B417913-AE01-41E5-BFEA-AB971B779F63}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mouse", "mouse\mouse.vcxproj", "{F1DEC3F9-706B-410D-91D5-0381BB9BA22A}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wifeman", "wifeman\wifeman.vcxproj", "{B76406F9-E89B-4791-ACDE-CD23813F764B}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ctl3dv2", "ctl3dv2\ctl3dv2.vcxproj", "{7F73550E-724D-4F7A-B192-35A764AC24D6}" ProjectSection(ProjectDependencies) = postProject {066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ctl3d", "ctl3d\ctl3d.vcxproj", "{B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}" ProjectSection(ProjectDependencies) = postProject {7F73550E-724D-4F7A-B192-35A764AC24D6} = {7F73550E-724D-4F7A-B192-35A764AC24D6} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winoldap", "winoldap\winoldap.vcxproj", "{F10EEF26-6451-4988-84D4-D193A4D2BF8C}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regedit", "regedit\regedit.vcxproj", "{F10EEF26-6451-4988-84D4-D193A4D2BF8D}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "olecli", "olecli\olecli.vcxproj", "{B3496128-1B1F-4D55-8F7F-7E39A53ABE75}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {3A10E48B-E88F-46C6-8A01-7A62112D0E05} = {3A10E48B-E88F-46C6-8A01-7A62112D0E05} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddeml", "ddeml\ddeml.vcxproj", "{D4EED8A5-2B15-4299-9F65-D56383AC7848}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "toolhelp", "toolhelp\toolhelp.vcxproj", "{96925A3C-9DD9-418E-A772-A112FFE93DC2}" ProjectSection(ProjectDependencies) = postProject {066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ver", "ver\ver.vcxproj", "{7C04956D-FEBE-410F-ABB1-945695CDDFE5}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winecrt0", "winecrt0\winecrt0.vcxproj", "{583655C3-2633-4597-BD31-C5AA1EC78AD2}" ProjectSection(ProjectDependencies) = postProject {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system", "system\system.vcxproj", "{6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comm", "comm\comm.vcxproj", "{3D889B37-09C8-4030-B815-830566CD57A3}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dispdib", "dispdib\dispdib.vcxproj", "{3D889B37-09C8-4030-B815-830566CD57A4}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rmpatch", "rmpatch\rmpatch.vcxproj", "{3D889B37-09C8-4030-B815-830566CD57A5}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2} {96925A3C-9DD9-418E-A772-A112FFE93DC2} = {96925A3C-9DD9-418E-A772-A112FFE93DC2} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ole2", "ole2\ole2.vcxproj", "{F9B66ABE-3489-434C-8340-65B3421DC30C}" ProjectSection(ProjectDependencies) = postProject {066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} {8A7A52D0-4772-475F-AB85-9C074CFEFDE8} = {8A7A52D0-4772-475F-AB85-9C074CFEFDE8} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compobj", "compobj\compobj.vcxproj", "{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "storage", "storage\storage.vcxproj", "{4A75E3F9-856A-4854-8AA2-34C06F7415BD}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winspool", "winspool\winspool.vcxproj", "{C8F4997D-B814-43BB-A71B-507B2E956F55}" ProjectSection(ProjectDependencies) = postProject {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C} = {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ole2conv", "ole2conv\ole2conv.vcxproj", "{90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ole2disp", "ole2disp\ole2disp.vcxproj", "{2D769A3B-881A-4307-B6C9-02EBC61211A4}" ProjectSection(ProjectDependencies) = postProject {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF} = {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ole2nls", "ole2nls\ole2nls.vcxproj", "{504CC4CA-612C-4681-AD9A-90E51785A5D2}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ole2prox", "ole2prox\ole2prox.vcxproj", "{6139024B-2348-440D-9192-3A40C3CE31B5}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ole2thk", "ole2thk\ole2thk.vcxproj", "{94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winhlp32", "winhlp32\winhlp32.vcxproj", "{37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}" ProjectSection(ProjectDependencies) = postProject {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msvideo", "msvideo\msvideo.vcxproj", "{0DCF5163-4049-4850-92BE-5D6A2444C51D}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {249FBAE5-EC5D-4988-87AC-A4371D827BA4} = {249FBAE5-EC5D-4988-87AC-A4371D827BA4} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "avifile", "avifile\avifile.vcxproj", "{3825B17A-681F-48CF-B9AD-5337B1F521C8}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msacm", "msacm\msacm.vcxproj", "{FA7FFBC0-45A5-4419-B18C-DEC8363C2413}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "otvdmw", "otvdm\otvdmw.vcxproj", "{73E019BF-2393-4BB3-90CA-B5B5749E4B69}" ProjectSection(ProjectDependencies) = postProject {9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA} = {9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "haxmvm", "haxmvm\haxmvm.vcxproj", "{55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}" ProjectSection(ProjectDependencies) = postProject {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "display", "display\display.vcxproj", "{E0AF9E72-F364-481A-A6E5-63EA88DF684E}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsock", "winsock\winsock.vcxproj", "{ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nddeapi", "nddeapi\nddeapi.vcxproj", "{72482539-7702-455E-81E0-F3AF237CF57F}" ProjectSection(ProjectDependencies) = postProject {066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "widl", "widl\widl.vcxproj", "{8A7A52D0-4772-475F-AB85-9C074CFEFDE8}" ProjectSection(ProjectDependencies) = postProject {433BAA32-23BE-4B63-B24B-B89938F4FF35} = {433BAA32-23BE-4B63-B24B-B89938F4FF35} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpp", "wpp\wpp.vcxproj", "{433BAA32-23BE-4B63-B24B-B89938F4FF35}" ProjectSection(ProjectDependencies) = postProject {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "commctrl", "commctrl\commctrl.vcxproj", "{CB9C6113-15AB-4DB9-A323-C2094A9A6E92}" ProjectSection(ProjectDependencies) = postProject {066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7} {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "typelib", "typelib\typelib.vcxproj", "{1AAA3531-513D-4A96-9795-D48CF33BF516}" ProjectSection(ProjectDependencies) = postProject {2D769A3B-881A-4307-B6C9-02EBC61211A4} = {2D769A3B-881A-4307-B6C9-02EBC61211A4} {F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "timer", "timer\timer.vcxproj", "{09EF1555-CA21-47F8-8830-04A53295F8B6}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "whpxvm", "whpxvm\whpxvm.vcxproj", "{2DF233FE-CBB8-4102-A68D-7D30C38961C1}" ProjectSection(ProjectDependencies) = postProject {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gvm", "gvm\gvm.vcxproj", "{258FD007-046D-4625-BB5A-B7934B71934F}" ProjectSection(ProjectDependencies) = postProject {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netapi", "netapi\netapi.vcxproj", "{5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}" ProjectSection(ProjectDependencies) = postProject {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966} {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} {583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}.Debug|Win32.ActiveCfg = Debug|Win32 {9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}.Debug|Win32.Build.0 = Debug|Win32 {9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}.Release|Win32.ActiveCfg = Release|Win32 {9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}.Release|Win32.Build.0 = Release|Win32 {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}.Debug|Win32.ActiveCfg = Debug|Win32 {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}.Debug|Win32.Build.0 = Debug|Win32 {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}.Release|Win32.ActiveCfg = Release|Win32 {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}.Release|Win32.Build.0 = Release|Win32 {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}.Debug|Win32.ActiveCfg = Debug|Win32 {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}.Debug|Win32.Build.0 = Debug|Win32 {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}.Release|Win32.ActiveCfg = Release|Win32 {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}.Release|Win32.Build.0 = Release|Win32 {E4950E01-C995-49A5-9FED-5EF03155FD65}.Debug|Win32.ActiveCfg = Debug|Win32 {E4950E01-C995-49A5-9FED-5EF03155FD65}.Debug|Win32.Build.0 = Debug|Win32 {E4950E01-C995-49A5-9FED-5EF03155FD65}.Release|Win32.ActiveCfg = Release|Win32 {E4950E01-C995-49A5-9FED-5EF03155FD65}.Release|Win32.Build.0 = Release|Win32 {E4950E01-C995-49A5-9FED-5EF03155FD66}.Debug|Win32.ActiveCfg = Debug|Win32 {E4950E01-C995-49A5-9FED-5EF03155FD66}.Debug|Win32.Build.0 = Debug|Win32 {E4950E01-C995-49A5-9FED-5EF03155FD66}.Release|Win32.ActiveCfg = Release|Win32 {E4950E01-C995-49A5-9FED-5EF03155FD66}.Release|Win32.Build.0 = Release|Win32 {DC6BA231-C318-436F-8F5C-5E2CC73779E2}.Debug|Win32.ActiveCfg = Debug|Win32 {DC6BA231-C318-436F-8F5C-5E2CC73779E2}.Debug|Win32.Build.0 = Debug|Win32 {DC6BA231-C318-436F-8F5C-5E2CC73779E2}.Release|Win32.ActiveCfg = Release|Win32 {DC6BA231-C318-436F-8F5C-5E2CC73779E2}.Release|Win32.Build.0 = Release|Win32 {066A261B-90F6-4AB7-8F53-1455F068D6F7}.Debug|Win32.ActiveCfg = Debug|Win32 {066A261B-90F6-4AB7-8F53-1455F068D6F7}.Debug|Win32.Build.0 = Debug|Win32 {066A261B-90F6-4AB7-8F53-1455F068D6F7}.Release|Win32.ActiveCfg = Release|Win32 {066A261B-90F6-4AB7-8F53-1455F068D6F7}.Release|Win32.Build.0 = Release|Win32 {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}.Debug|Win32.ActiveCfg = Debug|Win32 {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}.Debug|Win32.Build.0 = Debug|Win32 {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}.Release|Win32.ActiveCfg = Release|Win32 {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}.Release|Win32.Build.0 = Release|Win32 {0EBCFB5B-3092-4E06-A007-CA50B1DA3298}.Debug|Win32.ActiveCfg = Debug|Win32 {0EBCFB5B-3092-4E06-A007-CA50B1DA3298}.Debug|Win32.Build.0 = Debug|Win32 {0EBCFB5B-3092-4E06-A007-CA50B1DA3298}.Release|Win32.ActiveCfg = Release|Win32 {0EBCFB5B-3092-4E06-A007-CA50B1DA3298}.Release|Win32.Build.0 = Release|Win32 {08AEBC9F-464E-41DD-B4CB-F2921F69B591}.Debug|Win32.ActiveCfg = Debug|Win32 {08AEBC9F-464E-41DD-B4CB-F2921F69B591}.Debug|Win32.Build.0 = Debug|Win32 {08AEBC9F-464E-41DD-B4CB-F2921F69B591}.Release|Win32.ActiveCfg = Release|Win32 {08AEBC9F-464E-41DD-B4CB-F2921F69B591}.Release|Win32.Build.0 = Release|Win32 {BD91A02B-907B-4512-A963-1166D1EBC5C4}.Debug|Win32.ActiveCfg = Debug|Win32 {BD91A02B-907B-4512-A963-1166D1EBC5C4}.Debug|Win32.Build.0 = Debug|Win32 {BD91A02B-907B-4512-A963-1166D1EBC5C4}.Release|Win32.ActiveCfg = Release|Win32 {BD91A02B-907B-4512-A963-1166D1EBC5C4}.Release|Win32.Build.0 = Release|Win32 {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}.Debug|Win32.ActiveCfg = Debug|Win32 {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}.Debug|Win32.Build.0 = Debug|Win32 {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}.Release|Win32.ActiveCfg = Release|Win32 {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}.Release|Win32.Build.0 = Release|Win32 {F234FA09-76BC-4154-8420-737CD7FA4EF7}.Debug|Win32.ActiveCfg = Debug|Win32 {F234FA09-76BC-4154-8420-737CD7FA4EF7}.Debug|Win32.Build.0 = Debug|Win32 {F234FA09-76BC-4154-8420-737CD7FA4EF7}.Release|Win32.ActiveCfg = Release|Win32 {F234FA09-76BC-4154-8420-737CD7FA4EF7}.Release|Win32.Build.0 = Release|Win32 {8914D84A-84BD-4F85-99AC-723F8AEABAEB}.Debug|Win32.ActiveCfg = Debug|Win32 {8914D84A-84BD-4F85-99AC-723F8AEABAEB}.Debug|Win32.Build.0 = Debug|Win32 {8914D84A-84BD-4F85-99AC-723F8AEABAEB}.Release|Win32.ActiveCfg = Release|Win32 {8914D84A-84BD-4F85-99AC-723F8AEABAEB}.Release|Win32.Build.0 = Release|Win32 {22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}.Debug|Win32.ActiveCfg = Debug|Win32 {22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}.Debug|Win32.Build.0 = Debug|Win32 {22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}.Release|Win32.ActiveCfg = Release|Win32 {22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}.Release|Win32.Build.0 = Release|Win32 {3A10E48B-E88F-46C6-8A01-7A62112D0E05}.Debug|Win32.ActiveCfg = Debug|Win32 {3A10E48B-E88F-46C6-8A01-7A62112D0E05}.Debug|Win32.Build.0 = Debug|Win32 {3A10E48B-E88F-46C6-8A01-7A62112D0E05}.Release|Win32.ActiveCfg = Release|Win32 {3A10E48B-E88F-46C6-8A01-7A62112D0E05}.Release|Win32.Build.0 = Release|Win32 {782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}.Debug|Win32.ActiveCfg = Debug|Win32 {782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}.Debug|Win32.Build.0 = Debug|Win32 {782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}.Release|Win32.ActiveCfg = Release|Win32 {782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}.Release|Win32.Build.0 = Release|Win32 {90402A90-8D53-4843-BF11-7AE93361ED13}.Debug|Win32.ActiveCfg = Debug|Win32 {90402A90-8D53-4843-BF11-7AE93361ED13}.Debug|Win32.Build.0 = Debug|Win32 {90402A90-8D53-4843-BF11-7AE93361ED13}.Release|Win32.ActiveCfg = Release|Win32 {90402A90-8D53-4843-BF11-7AE93361ED13}.Release|Win32.Build.0 = Release|Win32 {249FBAE5-EC5D-4988-87AC-A4371D827BA4}.Debug|Win32.ActiveCfg = Debug|Win32 {249FBAE5-EC5D-4988-87AC-A4371D827BA4}.Debug|Win32.Build.0 = Debug|Win32 {249FBAE5-EC5D-4988-87AC-A4371D827BA4}.Release|Win32.ActiveCfg = Release|Win32 {249FBAE5-EC5D-4988-87AC-A4371D827BA4}.Release|Win32.Build.0 = Release|Win32 {7B417913-AE01-41E5-BFEA-AB971B779F63}.Debug|Win32.ActiveCfg = Debug|Win32 {7B417913-AE01-41E5-BFEA-AB971B779F63}.Debug|Win32.Build.0 = Debug|Win32 {7B417913-AE01-41E5-BFEA-AB971B779F63}.Release|Win32.ActiveCfg = Release|Win32 {7B417913-AE01-41E5-BFEA-AB971B779F63}.Release|Win32.Build.0 = Release|Win32 {F1DEC3F9-706B-410D-91D5-0381BB9BA22A}.Debug|Win32.ActiveCfg = Debug|Win32 {F1DEC3F9-706B-410D-91D5-0381BB9BA22A}.Debug|Win32.Build.0 = Debug|Win32 {F1DEC3F9-706B-410D-91D5-0381BB9BA22A}.Release|Win32.ActiveCfg = Release|Win32 {F1DEC3F9-706B-410D-91D5-0381BB9BA22A}.Release|Win32.Build.0 = Release|Win32 {B76406F9-E89B-4791-ACDE-CD23813F764B}.Debug|Win32.ActiveCfg = Debug|Win32 {B76406F9-E89B-4791-ACDE-CD23813F764B}.Debug|Win32.Build.0 = Debug|Win32 {B76406F9-E89B-4791-ACDE-CD23813F764B}.Release|Win32.ActiveCfg = Release|Win32 {B76406F9-E89B-4791-ACDE-CD23813F764B}.Release|Win32.Build.0 = Release|Win32 {7F73550E-724D-4F7A-B192-35A764AC24D6}.Debug|Win32.ActiveCfg = Debug|Win32 {7F73550E-724D-4F7A-B192-35A764AC24D6}.Debug|Win32.Build.0 = Debug|Win32 {7F73550E-724D-4F7A-B192-35A764AC24D6}.Release|Win32.ActiveCfg = Release|Win32 {7F73550E-724D-4F7A-B192-35A764AC24D6}.Release|Win32.Build.0 = Release|Win32 {B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}.Debug|Win32.ActiveCfg = Debug|Win32 {B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}.Debug|Win32.Build.0 = Debug|Win32 {B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}.Release|Win32.ActiveCfg = Release|Win32 {B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}.Release|Win32.Build.0 = Release|Win32 {F10EEF26-6451-4988-84D4-D193A4D2BF8C}.Debug|Win32.ActiveCfg = Debug|Win32 {F10EEF26-6451-4988-84D4-D193A4D2BF8C}.Debug|Win32.Build.0 = Debug|Win32 {F10EEF26-6451-4988-84D4-D193A4D2BF8C}.Release|Win32.ActiveCfg = Release|Win32 {F10EEF26-6451-4988-84D4-D193A4D2BF8C}.Release|Win32.Build.0 = Release|Win32 {F10EEF26-6451-4988-84D4-D193A4D2BF8D}.Debug|Win32.ActiveCfg = Debug|Win32 {F10EEF26-6451-4988-84D4-D193A4D2BF8D}.Debug|Win32.Build.0 = Debug|Win32 {F10EEF26-6451-4988-84D4-D193A4D2BF8D}.Release|Win32.ActiveCfg = Release|Win32 {F10EEF26-6451-4988-84D4-D193A4D2BF8D}.Release|Win32.Build.0 = Release|Win32 {B3496128-1B1F-4D55-8F7F-7E39A53ABE75}.Debug|Win32.ActiveCfg = Debug|Win32 {B3496128-1B1F-4D55-8F7F-7E39A53ABE75}.Debug|Win32.Build.0 = Debug|Win32 {B3496128-1B1F-4D55-8F7F-7E39A53ABE75}.Release|Win32.ActiveCfg = Release|Win32 {B3496128-1B1F-4D55-8F7F-7E39A53ABE75}.Release|Win32.Build.0 = Release|Win32 {D4EED8A5-2B15-4299-9F65-D56383AC7848}.Debug|Win32.ActiveCfg = Debug|Win32 {D4EED8A5-2B15-4299-9F65-D56383AC7848}.Debug|Win32.Build.0 = Debug|Win32 {D4EED8A5-2B15-4299-9F65-D56383AC7848}.Release|Win32.ActiveCfg = Release|Win32 {D4EED8A5-2B15-4299-9F65-D56383AC7848}.Release|Win32.Build.0 = Release|Win32 {96925A3C-9DD9-418E-A772-A112FFE93DC2}.Debug|Win32.ActiveCfg = Debug|Win32 {96925A3C-9DD9-418E-A772-A112FFE93DC2}.Debug|Win32.Build.0 = Debug|Win32 {96925A3C-9DD9-418E-A772-A112FFE93DC2}.Release|Win32.ActiveCfg = Release|Win32 {96925A3C-9DD9-418E-A772-A112FFE93DC2}.Release|Win32.Build.0 = Release|Win32 {7C04956D-FEBE-410F-ABB1-945695CDDFE5}.Debug|Win32.ActiveCfg = Debug|Win32 {7C04956D-FEBE-410F-ABB1-945695CDDFE5}.Debug|Win32.Build.0 = Debug|Win32 {7C04956D-FEBE-410F-ABB1-945695CDDFE5}.Release|Win32.ActiveCfg = Release|Win32 {7C04956D-FEBE-410F-ABB1-945695CDDFE5}.Release|Win32.Build.0 = Release|Win32 {583655C3-2633-4597-BD31-C5AA1EC78AD2}.Debug|Win32.ActiveCfg = Debug|Win32 {583655C3-2633-4597-BD31-C5AA1EC78AD2}.Debug|Win32.Build.0 = Debug|Win32 {583655C3-2633-4597-BD31-C5AA1EC78AD2}.Release|Win32.ActiveCfg = Release|Win32 {583655C3-2633-4597-BD31-C5AA1EC78AD2}.Release|Win32.Build.0 = Release|Win32 {6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}.Debug|Win32.ActiveCfg = Debug|Win32 {6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}.Debug|Win32.Build.0 = Debug|Win32 {6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}.Release|Win32.ActiveCfg = Release|Win32 {6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}.Release|Win32.Build.0 = Release|Win32 {3D889B37-09C8-4030-B815-830566CD57A3}.Debug|Win32.ActiveCfg = Debug|Win32 {3D889B37-09C8-4030-B815-830566CD57A3}.Debug|Win32.Build.0 = Debug|Win32 {3D889B37-09C8-4030-B815-830566CD57A3}.Release|Win32.ActiveCfg = Release|Win32 {3D889B37-09C8-4030-B815-830566CD57A3}.Release|Win32.Build.0 = Release|Win32 {3D889B37-09C8-4030-B815-830566CD57A4}.Debug|Win32.ActiveCfg = Debug|Win32 {3D889B37-09C8-4030-B815-830566CD57A4}.Debug|Win32.Build.0 = Debug|Win32 {3D889B37-09C8-4030-B815-830566CD57A4}.Release|Win32.ActiveCfg = Release|Win32 {3D889B37-09C8-4030-B815-830566CD57A4}.Release|Win32.Build.0 = Release|Win32 {3D889B37-09C8-4030-B815-830566CD57A5}.Debug|Win32.ActiveCfg = Debug|Win32 {3D889B37-09C8-4030-B815-830566CD57A5}.Debug|Win32.Build.0 = Debug|Win32 {3D889B37-09C8-4030-B815-830566CD57A5}.Release|Win32.ActiveCfg = Release|Win32 {3D889B37-09C8-4030-B815-830566CD57A5}.Release|Win32.Build.0 = Release|Win32 {F9B66ABE-3489-434C-8340-65B3421DC30C}.Debug|Win32.ActiveCfg = Debug|Win32 {F9B66ABE-3489-434C-8340-65B3421DC30C}.Debug|Win32.Build.0 = Debug|Win32 {F9B66ABE-3489-434C-8340-65B3421DC30C}.Release|Win32.ActiveCfg = Release|Win32 {F9B66ABE-3489-434C-8340-65B3421DC30C}.Release|Win32.Build.0 = Release|Win32 {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}.Debug|Win32.ActiveCfg = Debug|Win32 {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}.Debug|Win32.Build.0 = Debug|Win32 {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}.Release|Win32.ActiveCfg = Release|Win32 {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}.Release|Win32.Build.0 = Release|Win32 {4A75E3F9-856A-4854-8AA2-34C06F7415BD}.Debug|Win32.ActiveCfg = Debug|Win32 {4A75E3F9-856A-4854-8AA2-34C06F7415BD}.Debug|Win32.Build.0 = Debug|Win32 {4A75E3F9-856A-4854-8AA2-34C06F7415BD}.Release|Win32.ActiveCfg = Release|Win32 {4A75E3F9-856A-4854-8AA2-34C06F7415BD}.Release|Win32.Build.0 = Release|Win32 {C8F4997D-B814-43BB-A71B-507B2E956F55}.Debug|Win32.ActiveCfg = Debug|Win32 {C8F4997D-B814-43BB-A71B-507B2E956F55}.Debug|Win32.Build.0 = Debug|Win32 {C8F4997D-B814-43BB-A71B-507B2E956F55}.Release|Win32.ActiveCfg = Release|Win32 {C8F4997D-B814-43BB-A71B-507B2E956F55}.Release|Win32.Build.0 = Release|Win32 {90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}.Debug|Win32.ActiveCfg = Debug|Win32 {90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}.Debug|Win32.Build.0 = Debug|Win32 {90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}.Release|Win32.ActiveCfg = Release|Win32 {90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}.Release|Win32.Build.0 = Release|Win32 {2D769A3B-881A-4307-B6C9-02EBC61211A4}.Debug|Win32.ActiveCfg = Debug|Win32 {2D769A3B-881A-4307-B6C9-02EBC61211A4}.Debug|Win32.Build.0 = Debug|Win32 {2D769A3B-881A-4307-B6C9-02EBC61211A4}.Release|Win32.ActiveCfg = Release|Win32 {2D769A3B-881A-4307-B6C9-02EBC61211A4}.Release|Win32.Build.0 = Release|Win32 {504CC4CA-612C-4681-AD9A-90E51785A5D2}.Debug|Win32.ActiveCfg = Debug|Win32 {504CC4CA-612C-4681-AD9A-90E51785A5D2}.Debug|Win32.Build.0 = Debug|Win32 {504CC4CA-612C-4681-AD9A-90E51785A5D2}.Release|Win32.ActiveCfg = Release|Win32 {504CC4CA-612C-4681-AD9A-90E51785A5D2}.Release|Win32.Build.0 = Release|Win32 {6139024B-2348-440D-9192-3A40C3CE31B5}.Debug|Win32.ActiveCfg = Debug|Win32 {6139024B-2348-440D-9192-3A40C3CE31B5}.Debug|Win32.Build.0 = Debug|Win32 {6139024B-2348-440D-9192-3A40C3CE31B5}.Release|Win32.ActiveCfg = Release|Win32 {6139024B-2348-440D-9192-3A40C3CE31B5}.Release|Win32.Build.0 = Release|Win32 {94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}.Debug|Win32.ActiveCfg = Debug|Win32 {94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}.Debug|Win32.Build.0 = Debug|Win32 {94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}.Release|Win32.ActiveCfg = Release|Win32 {94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}.Release|Win32.Build.0 = Release|Win32 {37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}.Debug|Win32.ActiveCfg = Debug|Win32 {37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}.Debug|Win32.Build.0 = Debug|Win32 {37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}.Release|Win32.ActiveCfg = Release|Win32 {37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}.Release|Win32.Build.0 = Release|Win32 {0DCF5163-4049-4850-92BE-5D6A2444C51D}.Debug|Win32.ActiveCfg = Debug|Win32 {0DCF5163-4049-4850-92BE-5D6A2444C51D}.Debug|Win32.Build.0 = Debug|Win32 {0DCF5163-4049-4850-92BE-5D6A2444C51D}.Release|Win32.ActiveCfg = Release|Win32 {0DCF5163-4049-4850-92BE-5D6A2444C51D}.Release|Win32.Build.0 = Release|Win32 {3825B17A-681F-48CF-B9AD-5337B1F521C8}.Debug|Win32.ActiveCfg = Debug|Win32 {3825B17A-681F-48CF-B9AD-5337B1F521C8}.Debug|Win32.Build.0 = Debug|Win32 {3825B17A-681F-48CF-B9AD-5337B1F521C8}.Release|Win32.ActiveCfg = Release|Win32 {3825B17A-681F-48CF-B9AD-5337B1F521C8}.Release|Win32.Build.0 = Release|Win32 {FA7FFBC0-45A5-4419-B18C-DEC8363C2413}.Debug|Win32.ActiveCfg = Debug|Win32 {FA7FFBC0-45A5-4419-B18C-DEC8363C2413}.Debug|Win32.Build.0 = Debug|Win32 {FA7FFBC0-45A5-4419-B18C-DEC8363C2413}.Release|Win32.ActiveCfg = Release|Win32 {FA7FFBC0-45A5-4419-B18C-DEC8363C2413}.Release|Win32.Build.0 = Release|Win32 {73E019BF-2393-4BB3-90CA-B5B5749E4B69}.Debug|Win32.ActiveCfg = Debug|Win32 {73E019BF-2393-4BB3-90CA-B5B5749E4B69}.Debug|Win32.Build.0 = Debug|Win32 {73E019BF-2393-4BB3-90CA-B5B5749E4B69}.Release|Win32.ActiveCfg = Release|Win32 {73E019BF-2393-4BB3-90CA-B5B5749E4B69}.Release|Win32.Build.0 = Release|Win32 {55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}.Debug|Win32.ActiveCfg = Debug|Win32 {55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}.Debug|Win32.Build.0 = Debug|Win32 {55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}.Release|Win32.ActiveCfg = Release|Win32 {55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}.Release|Win32.Build.0 = Release|Win32 {E0AF9E72-F364-481A-A6E5-63EA88DF684E}.Debug|Win32.ActiveCfg = Debug|Win32 {E0AF9E72-F364-481A-A6E5-63EA88DF684E}.Debug|Win32.Build.0 = Debug|Win32 {E0AF9E72-F364-481A-A6E5-63EA88DF684E}.Release|Win32.ActiveCfg = Release|Win32 {E0AF9E72-F364-481A-A6E5-63EA88DF684E}.Release|Win32.Build.0 = Release|Win32 {ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}.Debug|Win32.ActiveCfg = Debug|Win32 {ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}.Debug|Win32.Build.0 = Debug|Win32 {ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}.Release|Win32.ActiveCfg = Release|Win32 {ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}.Release|Win32.Build.0 = Release|Win32 {72482539-7702-455E-81E0-F3AF237CF57F}.Debug|Win32.ActiveCfg = Debug|Win32 {72482539-7702-455E-81E0-F3AF237CF57F}.Debug|Win32.Build.0 = Debug|Win32 {72482539-7702-455E-81E0-F3AF237CF57F}.Release|Win32.ActiveCfg = Release|Win32 {72482539-7702-455E-81E0-F3AF237CF57F}.Release|Win32.Build.0 = Release|Win32 {8A7A52D0-4772-475F-AB85-9C074CFEFDE8}.Debug|Win32.ActiveCfg = Debug|Win32 {8A7A52D0-4772-475F-AB85-9C074CFEFDE8}.Debug|Win32.Build.0 = Debug|Win32 {8A7A52D0-4772-475F-AB85-9C074CFEFDE8}.Release|Win32.ActiveCfg = Release|Win32 {8A7A52D0-4772-475F-AB85-9C074CFEFDE8}.Release|Win32.Build.0 = Release|Win32 {433BAA32-23BE-4B63-B24B-B89938F4FF35}.Debug|Win32.ActiveCfg = Debug|Win32 {433BAA32-23BE-4B63-B24B-B89938F4FF35}.Debug|Win32.Build.0 = Debug|Win32 {433BAA32-23BE-4B63-B24B-B89938F4FF35}.Release|Win32.ActiveCfg = Release|Win32 {433BAA32-23BE-4B63-B24B-B89938F4FF35}.Release|Win32.Build.0 = Release|Win32 {CB9C6113-15AB-4DB9-A323-C2094A9A6E92}.Debug|Win32.ActiveCfg = Debug|Win32 {CB9C6113-15AB-4DB9-A323-C2094A9A6E92}.Debug|Win32.Build.0 = Debug|Win32 {CB9C6113-15AB-4DB9-A323-C2094A9A6E92}.Release|Win32.ActiveCfg = Release|Win32 {CB9C6113-15AB-4DB9-A323-C2094A9A6E92}.Release|Win32.Build.0 = Release|Win32 {1AAA3531-513D-4A96-9795-D48CF33BF516}.Debug|Win32.ActiveCfg = Debug|Win32 {1AAA3531-513D-4A96-9795-D48CF33BF516}.Debug|Win32.Build.0 = Debug|Win32 {1AAA3531-513D-4A96-9795-D48CF33BF516}.Release|Win32.ActiveCfg = Release|Win32 {1AAA3531-513D-4A96-9795-D48CF33BF516}.Release|Win32.Build.0 = Release|Win32 {09EF1555-CA21-47F8-8830-04A53295F8B6}.Debug|Win32.ActiveCfg = Debug|Win32 {09EF1555-CA21-47F8-8830-04A53295F8B6}.Debug|Win32.Build.0 = Debug|Win32 {09EF1555-CA21-47F8-8830-04A53295F8B6}.Release|Win32.ActiveCfg = Release|Win32 {09EF1555-CA21-47F8-8830-04A53295F8B6}.Release|Win32.Build.0 = Release|Win32 {2DF233FE-CBB8-4102-A68D-7D30C38961C1}.Debug|Win32.ActiveCfg = Debug|Win32 {2DF233FE-CBB8-4102-A68D-7D30C38961C1}.Debug|Win32.Build.0 = Debug|Win32 {2DF233FE-CBB8-4102-A68D-7D30C38961C1}.Release|Win32.ActiveCfg = Release|Win32 {2DF233FE-CBB8-4102-A68D-7D30C38961C1}.Release|Win32.Build.0 = Release|Win32 {258FD007-046D-4625-BB5A-B7934B71934F}.Debug|Win32.ActiveCfg = Debug|Win32 {258FD007-046D-4625-BB5A-B7934B71934F}.Debug|Win32.Build.0 = Debug|Win32 {258FD007-046D-4625-BB5A-B7934B71934F}.Release|Win32.ActiveCfg = Release|Win32 {258FD007-046D-4625-BB5A-B7934B71934F}.Release|Win32.Build.0 = Release|Win32 {5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}.Debug|Win32.ActiveCfg = Debug|Win32 {5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}.Debug|Win32.Build.0 = Debug|Win32 {5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}.Release|Win32.ActiveCfg = Release|Win32 {5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {692D1D4A-93CF-4B31-BF6F-4901B375934E} EndGlobalSection EndGlobal ================================================ FILE: regedit/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(regedit SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/regedit.def regedit.exe16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(regedit.exe16 regedit) target_link_libraries(regedit libwine winecrt0 krnl386) set_target_properties(regedit PROPERTIES SUFFIX ".exe16") ================================================ FILE: regedit/Makefile.in ================================================ MODULE = regedit.exe16 EXTRADLLFLAGS = -m16 ================================================ FILE: regedit/regedit.c ================================================ /* * Windows regedit.exe registry editor implementation. * * Copyright 1999 Sylvain St-Germain * Copyright 2002 Andriy Palamarchuk * Copyright 2008 Alexander N. Srnes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "windows.h" #include "winnt.h" #include "winreg.h" #include "assert.h" #include "wine/debug.h" #define REG_VAL_BUF_SIZE 4096 DWORD WINAPI RegSetValue16(HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count); LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len); /* version for Windows 3.1 */ static void processRegEntry31(char *line) { int key_end = 0; char *value; int res; static const char hkcr[] = "HKEY_CLASSES_ROOT"; if (line[0] == '\0') return; if (memcmp(line, hkcr, sizeof(hkcr) - 1)) return; line += sizeof(hkcr) - 1; /* get key name */ while (line[key_end] && !isspace(line[key_end])) key_end++; value = line + key_end; while (isspace(value[0])) value++; if (value[0] == '=') value++; if (value[0] == ' ') value++; /* at most one space is skipped */ line[key_end] = '\0'; res = RegSetValue16(HKEY_CLASSES_ROOT, line, REG_SZ, value, strlen(value) + 1); } /****************************************************************************** * Processes a registry file. * Correctly processes comments (in # and ; form), line continuation. * * Parameters: * in - input stream to read from * first_chars - beginning of stream, read due to Unicode check */ static void processRegLinesA(FILE *in) { char *buf = NULL; /* the line read from the input stream */ unsigned long line_size = REG_VAL_BUF_SIZE; size_t chars_in_buf = -1; char *s; /* A pointer to buf for fread */ char *line; /* The start of the current line */ unsigned long version = 0; static const char header_31[] = "REGEDIT"; buf = HeapAlloc(GetProcessHeap(), 0, line_size); s = buf; line = buf; while (!feof(in)) { size_t size_remaining; int size_to_get; char *s_eol = NULL; /* various local uses */ /* Do we need to expand the buffer? */ assert(s >= buf && s <= buf + line_size); size_remaining = line_size - (s - buf); if (size_remaining < 3) /* we need at least 3 bytes of room for \r\n\0 */ { char *new_buffer; size_t new_size = line_size + REG_VAL_BUF_SIZE; if (new_size > line_size) /* no arithmetic overflow */ new_buffer = HeapReAlloc(GetProcessHeap(), 0, buf, new_size); else new_buffer = NULL; buf = new_buffer; line = buf; s = buf + line_size - size_remaining; line_size = new_size; size_remaining = line_size - (s - buf); } /* Get as much as possible into the buffer, terminating on EOF, * error or once we have read the maximum amount. Abort on error. */ size_to_get = (size_remaining > INT_MAX ? INT_MAX : size_remaining); chars_in_buf = fread(s, 1, size_to_get - 1, in); s[chars_in_buf] = 0; if (chars_in_buf == 0) { if (ferror(in)) { ExitThread(1); } else { assert(feof(in)); *s = '\0'; } } /* If we didn't read the end-of-line sequence or EOF, go around again */ while (1) { s_eol = strpbrk(line, "\r\n"); if (!s_eol) { /* Move the stub of the line to the start of the buffer so * we get the maximum space to read into, and so we don't * have to recalculate 'line' if the buffer expands */ MoveMemory(buf, line, strlen(line) + 1); line = buf; s = strchr(line, '\0'); break; } /* If we find a comment line, discard it and go around again */ if (line [0] == '#' || line [0] == ';') { if (*s_eol == '\r' && *(s_eol + 1) == '\n') line = s_eol + 2; else line = s_eol + 1; continue; } /* Remove any line feed. Leave s_eol on the last \0 */ if (*s_eol == '\r' && *(s_eol + 1) == '\n') *s_eol++ = '\0'; *s_eol = '\0'; /* Check if the line is a header string */ if (!memcmp(line, header_31, sizeof(header_31))) version = 1; else if (version) processRegEntry31(line); line = s_eol + 1; } } HeapFree(GetProcessHeap(), 0, buf); } /****************************************************************************** * Copies file name from command line string to the buffer. * Rewinds the command line string pointer to the next non-spece character * after the file name. * Buffer contains an empty string if no filename was found; * * params: * command_line - command line current position pointer * where *s[0] is the first symbol of the file name. * file_name - buffer to write the file name to. */ void get_file_name(CHAR **command_line, CHAR *file_name) { CHAR *s = *command_line; int pos = 0; /* position of pointer "s" in *command_line */ file_name[0] = 0; if (!s[0]) { return; } if (s[0] == '"') { s++; (*command_line)++; while(s[0] != '"') { if (!s[0]) { ExitThread(1); } s++; pos++; } } else { while(s[0] && !isspace(s[0])) { s++; pos++; } } memcpy(file_name, *command_line, pos * sizeof((*command_line)[0])); /* remove the last backslash */ if (file_name[pos - 1] == '\\') { file_name[pos - 1] = '\0'; } else { file_name[pos] = '\0'; } if (s[0]) { s++; pos++; } while(s[0] && isspace(s[0])) { s++; pos++; } (*command_line) += pos; } int WINAPI WinMain16(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { LPSTR s = lpCmdLine; /* command line pointer */ CHAR ch = *s; /* current character */ while (isspace(ch)) { s++; ch = *s; } while (ch && ((ch == '-') || (ch == '/'))) { char chu; char ch2; s++; ch = *s; ch2 = *(s+1); chu = toupper(ch); if (!ch2 || isspace(ch2)) { if (chu == 'S' || chu == 'V') { /* ignore these switches */ } else { ExitThread(1); break; } s++; } else { if (ch2 == ':') { switch (chu) { case 'L': /* fall through */ case 'R': s += 2; while (*s && !isspace(*s)) { s++; } break; default: ExitThread(1); break; } } else { ExitThread(1); break; } } /* skip spaces to the next parameter */ ch = *s; while (ch && isspace(ch)) { s++; ch = *s; } } CHAR filename[MAX_PATH]; FILE *reg_file; get_file_name(&s, filename); if (!filename[0]) ExitThread(1); while(filename[0]) { reg_file = fopen(filename, "r"); if (!reg_file) // start dir for regedit should be the windows dir { char regdir[MAX_PATH]; RedirectSystemDir("C:\\WINDOWS", regdir, MAX_PATH); strcat(regdir, "\\"); strcat(regdir, filename); reg_file = fopen(regdir, "r"); } if (reg_file) { processRegLinesA(reg_file); } get_file_name(&s, filename); } ExitThread(0); } ================================================ FILE: regedit/regedit.def ================================================ LIBRARY regedit.exe16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: regedit/regedit.exe16.spec ================================================ ================================================ FILE: regedit/regedit.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj regedit {F10EEF26-6451-4988-84D4-D193A4D2BF8D} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .exe16 false Release .exe16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; $(OutDir)winecrt0.lib;%(AdditionalDependencies) true regedit.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false regedit.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; $(OutDir)winecrt0.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" REGEDIT -EXE > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" "$(OutDir)convspec" "%(Filename).spec" REGEDIT -EXE > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj %(Filename).obj ================================================ FILE: rmpatch/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp) add_library(rmpatch SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/rmpatch.def rmpatch.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(rmpatch.dll16 rmpatch) target_link_libraries(rmpatch libwine winecrt0 krnl386 toolhelp) set_target_properties(rmpatch PROPERTIES SUFFIX ".dll16") ================================================ FILE: rmpatch/Makefile.in ================================================ MODULE = rmpatch.dll16 EXTRADLLFLAGS = -m16 C_SRCS = rmpatch.c instr.c ================================================ FILE: rmpatch/instr.c ================================================ /* * Emulation of privileged instructions * * Copyright 1995 Alexandre Julliard * Copyright 2005 Ivan Leo Puoti * Copyright 2005 Laurent Pinchart * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; ifnot, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ // modified to only apply to real mode windows programs running in protected mode #include "windef.h" #include "winbase.h" #include "wine/winuser16.h" #include "wine/exception.h" /* macros to set parts of a DWORD */ #define SET_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD(val)) #define SET_LOBYTE(dw,val) ((dw) = ((dw) & 0xffffff00) | LOBYTE(val)) #define ADD_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val))) static WORD dosmem_0040H = 0; static WORD dosmem_0000H = 0; static inline void add_stack(CONTEXT *context, int offset) { ADD_LOWORD(context->Esp, offset); } static inline void *make_ptr(CONTEXT *context, DWORD seg, DWORD off, int long_addr) { return (char *) MapSL(MAKESEGPTR(seg, off)); } static inline void *get_stack(CONTEXT *context) { return (char *) MapSL(MAKESEGPTR(context->SegSs, context->Esp)); } /*********************************************************************** * INSTR_ReplaceSelector * * Try to replace an invalid selector by a valid one. * The only selector where it is allowed to do "mov ax,40;mov es,ax" * is the so called 'bimodal' selector 0x40, which points to the BIOS * data segment. Used by (at least) Borland products (and programs compiled * using Borland products). * * See Undocumented Windows, Chapter 5, __0040. */ static BOOL INSTR_ReplaceSelector(CONTEXT *context, WORD *sel) { if(*sel == 0x40) { DOSVM_start_bios_timer(); *sel = dosmem_0040H; return TRUE; } *sel = dosmem_0000H; // xerox presents does a use after free with a global memory block return TRUE; } static WORD get_reg_word(CONTEXT *context, BYTE regmodrm) { WORD ret; switch((regmodrm >> 3) & 7) { case 0: ret = context->Eax; break; case 1: ret = context->Ecx; break; case 2: ret = context->Edx; break; case 3: ret = context->Ebx; break; case 4: ret = context->Esp; break; case 5: ret = context->Ebp; break; case 6: ret = context->Esi; break; case 7: ret = context->Edi; break; } return ret; } static BYTE get_reg_byte(CONTEXT *context, BYTE regmodrm) { BYTE ret; switch((regmodrm >> 3) & 7) { case 0: ret = context->Eax; break; case 1: ret = context->Ecx; break; case 2: ret = context->Edx; break; case 3: ret = context->Ebx; break; case 4: ret = context->Eax >> 8; break; case 5: ret = context->Ecx >> 8; break; case 6: ret = context->Edx >> 8; break; case 7: ret = context->Ebx >> 8; break; } return ret; } /* store an operand into a register */ static void store_reg_word(CONTEXT *context, BYTE regmodrm, const BYTE *addr) { WORD data; __TRY { data = *(const WORD *)addr; } __EXCEPT_ALL { data = 0; } __ENDTRY switch((regmodrm >> 3) & 7) { case 0: SET_LOWORD(context->Eax, data); break; case 1: SET_LOWORD(context->Ecx, data); break; case 2: SET_LOWORD(context->Edx, data); break; case 3: SET_LOWORD(context->Ebx, data); break; case 4: SET_LOWORD(context->Esp, data); break; case 5: SET_LOWORD(context->Ebp, data); break; case 6: SET_LOWORD(context->Esi, data); break; case 7: SET_LOWORD(context->Edi, data); break; } } /* store an operand into a byte register */ static void store_reg_byte(CONTEXT *context, BYTE regmodrm, const BYTE *addr) { BYTE data; __TRY { data = *addr; } __EXCEPT_ALL { data = 0; } __ENDTRY switch((regmodrm >> 3) & 7) { case 0: context->Eax = (context->Eax & 0xffffff00) | data; break; case 1: context->Ecx = (context->Ecx & 0xffffff00) | data; break; case 2: context->Edx = (context->Edx & 0xffffff00) | data; break; case 3: context->Ebx = (context->Ebx & 0xffffff00) | data; break; case 4: context->Eax = (context->Eax & 0xffff00ff) | (data << 8); break; case 5: context->Ecx = (context->Ecx & 0xffff00ff) | (data << 8); break; case 6: context->Edx = (context->Edx & 0xffff00ff) | (data << 8); break; case 7: context->Ebx = (context->Ebx & 0xffff00ff) | (data << 8); break; } } static BYTE *get_addr(int seg, int base) { LDT_ENTRY entry; /* Make sure the segment and offset are valid */ if(wine_ldt_is_system(seg)) return (BYTE *)base; if((seg & 7) != 7) return NULL; wine_ldt_get_entry(seg, &entry); if(wine_ldt_is_empty(&entry)) return NULL; if(wine_ldt_get_limit(&entry) < base) return NULL; return (BYTE *)wine_ldt_get_base(&entry) + base; } /*********************************************************************** * INSTR_GetOperandAddr * * Return the address of an instruction operand (from the mod/rm byte). */ static BYTE *INSTR_GetOperandAddr(CONTEXT *context, BYTE *instr, int segprefix, int *len) { int mod, rm, base = 0, seg = 0, off; #define GET_VAL(val,type) \ { *val = *(type *)instr; instr += sizeof(type); *len += sizeof(type); } *len = 0; GET_VAL(&mod, BYTE); rm = mod & 7; mod >>= 6; if(mod == 3) { switch(rm) { case 0: return (BYTE *)&context->Eax; case 1: return (BYTE *)&context->Ecx; case 2: return (BYTE *)&context->Edx; case 3: return (BYTE *)&context->Ebx; case 4: return (BYTE *)&context->Esp; case 5: return (BYTE *)&context->Ebp; case 6: return (BYTE *)&context->Esi; case 7: return (BYTE *)&context->Edi; } } switch(rm) { case 0: /* ds:(bx,si) */ base = LOWORD(context->Ebx) + LOWORD(context->Esi); seg = context->SegDs; break; case 1: /* ds:(bx,di) */ base = LOWORD(context->Ebx) + LOWORD(context->Edi); seg = context->SegDs; break; case 2: /* ss:(bp,si) */ base = LOWORD(context->Ebp) + LOWORD(context->Esi); seg = context->SegSs; break; case 3: /* ss:(bp,di) */ base = LOWORD(context->Ebp) + LOWORD(context->Edi); seg = context->SegSs; break; case 4: /* ds:(si) */ base = LOWORD(context->Esi); seg = context->SegDs; break; case 5: /* ds:(di) */ base = LOWORD(context->Edi); seg = context->SegDs; break; case 6: /* ss:(bp) */ base = LOWORD(context->Ebp); seg = context->SegSs; break; case 7: /* ds:(bx) */ base = LOWORD(context->Ebx); seg = context->SegDs; break; } switch(mod) { case 0: if(rm == 6) /* special case: ds:(disp16) */ { GET_VAL(&base, WORD); seg = context->SegDs; } break; case 1: /* 8-bit disp */ GET_VAL(&off, BYTE); base += (signed char)off; break; case 2: /* 16-bit disp */ GET_VAL(&off, WORD); base += (signed short)off; break; } base &= 0xffff; if(segprefix != -1) seg = segprefix; if(!seg) seg = dosmem_0000H; return get_addr(seg, base); #undef GET_VAL } /*********************************************************************** * INSTR_EmulateLDS * * Emulate the LDS instruction. */ static BOOL INSTR_EmulateLDS(CONTEXT *context, BYTE *instr, int segprefix, int *len) { WORD seg; BYTE *regmodrm = instr + 1; BYTE *addr = INSTR_GetOperandAddr(context, regmodrm, segprefix, len); if(!addr) return FALSE; /* Unable to emulate it */ seg = *(WORD *)(addr + 2); if(!INSTR_ReplaceSelector(context, &seg)) return FALSE; /* Unable to emulate it */ /* Now store the offset in the correct register */ store_reg_word(context, *regmodrm, addr); /* Store the correct segment in the segment register */ switch(*instr) { case 0xc4: context->SegEs = seg; break; /* les */ case 0xc5: context->SegDs = seg; break; /* lds */ } /* Add the opcode size to the total length */ *len += 1; return TRUE; } /*********************************************************************** * rmpatch_emulate_instruction * * Emulate a privileged instruction. * Returns exception continuation status. */ BOOL rmpatch_emulate_instruction(CONTEXT *context) { int prefix, segprefix, prefixlen, len, repX; BYTE *instr; if(!dosmem_0000H) dosmem_0000H = (WORD)GetProcAddress16(GetModuleHandle16("KERNEL"), (LPCSTR)183); if(!dosmem_0040H) dosmem_0040H = (WORD)GetProcAddress16(GetModuleHandle16("KERNEL"), (LPCSTR)193); instr = make_ptr(context, context->SegCs, context->Eip, TRUE); if(!instr) return FALSE; /* First handle any possible prefix */ segprefix = -1; /* no prefix */ prefix = 1; repX = 0; prefixlen = 0; while(prefix) { switch(*instr) { case 0x2e: segprefix = context->SegCs; break; case 0x36: segprefix = context->SegSs; break; case 0x3e: segprefix = context->SegDs; break; case 0x26: segprefix = context->SegEs; if (!segprefix) { context->SegEs = dosmem_0000H; return; } break; case 0x64: break; case 0xf0: /* lock */ break; case 0xf2: /* repne */ repX = 1; break; case 0xf3: /* repe */ repX = 2; break; default: prefix = 0; /* no more prefixes */ break; } if(prefix) { instr++; prefixlen++; } } /* Now look at the actual instruction */ switch(*instr) { case 0x07: /* pop es */ case 0x17: /* pop ss */ case 0x1f: /* pop ds */ { WORD seg = *(WORD *)get_stack(context); if(INSTR_ReplaceSelector(context, &seg)) { switch(*instr) { case 0x07: context->SegEs = seg; break; case 0x17: context->SegSs = seg; break; case 0x1f: context->SegDs = seg; break; } add_stack(context, 2); context->Eip += prefixlen + 1; return TRUE; } } break; /* Unable to emulate it */ case 0x2b: { BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); if (addr) // this is likely unnecessary as there's no other way this can be reached break; context->Eip += prefixlen + len + 1; return TRUE; } case 0xfe: { BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); switch (instr[1] & 0x38) { case 0: *addr++; break; case 8: *addr--; break; default: return FALSE; } context->Eip += prefixlen + len + 1; return TRUE; } case 0x88: /* mov Gb, Eb */ case 0x89: /* mov Gv, Ev */ { BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); switch (*instr) { case 0x88: *addr = get_reg_byte(context, instr[1]); break; case 0x89: *(WORD *)addr = get_reg_word(context, instr[1]); break; } context->Eip += prefixlen + len + 1; return TRUE; } break; /* Unable to emulate it */ case 0x8a: /* mov Eb, Gb */ case 0x8b: /* mov Ev, Gv */ { BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); switch (*instr) { case 0x8a: store_reg_byte(context, instr[1], addr); break; case 0x8b: store_reg_word(context, instr[1], addr); break; } context->Eip += prefixlen + len + 1; return TRUE; } break; /* Unable to emulate it */ case 0x8c: { BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); DWORD seg; switch((instr[1] >> 3) & 7) { case 0: seg = context->SegEs; break; case 1: seg = context->SegCs; break; case 2: seg = context->SegSs; break; case 3: seg = context->SegDs; break; default: seg = -1; break; } if(seg != -1) { *(WORD *)addr = seg; context->Eip += prefixlen + len + 1; return TRUE; } } break; /* Unable to emulate it */ case 0x8e: /* mov XX,segment_reg */ { WORD seg; BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); if(!addr) break; /* Unable to emulate it */ seg = *(WORD *)addr; if(!INSTR_ReplaceSelector(context, &seg)) break; /* Unable to emulate it */ switch((instr[1] >> 3) & 7) { case 0: context->SegEs = seg; context->Eip += prefixlen + len + 1; return TRUE; case 1: /* cs */ break; case 2: context->SegSs = seg; context->Eip += prefixlen + len + 1; return TRUE; case 3: context->SegDs = seg; context->Eip += prefixlen + len + 1; return TRUE; case 4: context->SegFs = seg; context->Eip += prefixlen + len + 1; return TRUE; case 5: context->SegGs = seg; context->Eip += prefixlen + len + 1; return TRUE; case 6: /* unused */ case 7: /* unused */ break; } } break; /* Unable to emulate it */ case 0x8f: /* pop Ev */ { if (instr[1] & 0x38) break; WORD data = *(WORD *)get_stack(context); BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); *(WORD *)addr = data; add_stack(context, 2); context->Eip += prefixlen + len + 1; return TRUE; } case 0xa2: case 0xa3: { BYTE *addr = get_addr((segprefix != -1) ? segprefix : context->SegDs, *(WORD *)(instr + 1)); if(addr) { if(*instr == 0xa3) *(WORD *)addr = context->Eax; else *addr = context->Eax; context->Eip += prefixlen + 3; return TRUE; } break; } case 0xc4: /* les addr,reg */ case 0xc5: /* lds addr,reg */ if(INSTR_EmulateLDS(context, instr, segprefix, &len)) { context->Eip += prefixlen + len; return TRUE; } break; /* Unable to emulate it */ case 0xc6: /* mov Eb, Ib */ case 0xc7: /* mov Ev, Iv */ { if (instr[1] & 0x38) break; BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); __TRY { switch (*instr) { case 0xc6: *addr = instr[2]; break; case 0xc7: *(WORD *)addr = instr[2] | (instr[3] << 8); break; } } __EXCEPT_ALL { } __ENDTRY context->Eip += prefixlen + ((*instr == 0xc7) ? 2 : 1) + len + 1; return TRUE; } break; /* Unable to emulate it */ case 0xff: { if ((instr[1] & 0x38) != 0x18) break; BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len); // this is a standard pattern for MSC _int86 if (*(WORD *)(addr + 2) != context->SegSs) break; static WORD stackcode = NULL; if (!stackcode) stackcode = AllocDStoCSAlias16(context->SegSs); *(WORD *)(addr + 2) = stackcode; return TRUE; } break; } return FALSE; } ================================================ FILE: rmpatch/rmpatch.c ================================================ #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "../krnl386/kernel16_private.h" // htask is an ldt selector above 0x1000, use a gdt selector below 0x1000 here // it's only used as an index #define FAKE_HTASK16 0xf01 BOOL16 WINAPI InterruptRegister16(HTASK16 htask, FARPROC16 callback); BOOL16 WINAPI InterruptUnRegister16(HTASK16 htask); BOOL16 WINAPI NotifyRegister16(HTASK16 htask, FARPROC16 lpfnCallback, WORD wFlags); BOOL16 WINAPI NotifyUnRegister16(HTASK16 htask); BOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hinst); void WINAPI next_intcb(CONTEXT *context); #include typedef struct { DWORD dwSize; WORD wSelector; WORD wSegNum; WORD wType; /* bit 0 set if this is a code segment */ WORD wcInstance; /* only valid for data segment */ SEGPTR lpstrModuleName; } NFYLOADSEG; #include BOOL WINAPI checkpatch(WORD id, DWORD data) { if (id != 1 /*NFY_LOADSEG*/) return; NFYLOADSEG *seg = (NFYLOADSEG *)MapSL(data); char *name = (char *)MapSL(seg->lpstrModuleName); if (GetExpWinVer16(GetModuleHandle16(name)) >= 0x300) return 0; char *mem = MapSL(MAKELONG(0, seg->wSelector)); WORD segment = seg->wSegNum; if (!memcmp(mem, "MSEM87", 6)) // check for linked in MS 8087 emulator { FARPROC16 fpmath = GetProcAddress16(LoadLibrary16("WIN87EM.DLL"), "__FPMATH"); mem[0x24] = 0xea; // JMP FAR *(FARPROC16 *)(mem + 0x25) = fpmath; } else if (!strcmp(name, "MGXWIN20")) { // drawing lib from Micrographics Designer 1.1 (segment arithmitic) if ((segment == 13) && (*(DWORD *)(mem + 0x1e4d) == 0x000fe781)) { const char patch[] = {0x90, 0x90, 0x90, 0x90, 0x03, 0xf9, 0xc3}; memcpy(mem + 0x1e4d, patch, sizeof(patch)); } } else if (!strcmp(name, "GLIB")) { // drawing lib from Micrographics Portfolio 1.0 (segment arithmitic) if ((segment == 1) && (*(DWORD *)(mem + 0x274c) == 0x000fe781)) { const char patch[] = {0x90, 0x90, 0x90, 0x90, 0x03, 0xf9, 0xc3}; memcpy(mem + 0x274c, patch, sizeof(patch)); } } else if (!strcmp(name, "XP")) { // Xerox Presents (calls int 13h to parse root dir unnecessarily) if ((segment == 71) && (*(DWORD *)(mem + 0x11f2) == 0xec8b5545)) mem[0x11f2] = 0xcb; } else if (!strcmp(name, "BOP")) { // use MM_ANISOTROPIC instead of MM_ISOTROPIC and fix viewport if ((segment == 2) && (*(BYTE *)(mem + 0x0d) == 0x07)) { const char patch[] = {0xb8, 0xd0, 0x02, 0x50, 0xb8, 0x49, 0x01, 0x50}; memcpy(mem + 0x2a, patch, sizeof(patch)); mem[0x0d] = 0x08; mem[0x2c1] = 0x34; } } else if (!strcmp(name, "WFE")) { // ZSoft PTF Outline Editor (uninitialized stack variable) if ((segment == 3) && (*(DWORD *)(mem + 0x8c5) == 0x5efc468b)) { mem[0x8c5] = 0xb8; mem[0x8c6] = 0x01; mem[0x8c7] = 0x00; } } return 0; } #include struct stkframe { DWORD ret; WORD ax; WORD err; WORD handle; DWORD addr; WORD flags; }; #include void WINAPI intcb(CONTEXT *context) { struct stkframe *frame = MapSL(MAKESEGPTR(context->SegSs, context->Esp)); if((frame->err == 0xd) && IsOldWindowsTask(GetCurrentTask())) { context->Esp += sizeof(struct stkframe); context->Eip = OFFSETOF(frame->addr); context->SegCs = SELECTOROF(frame->addr); context->EFlags = frame->flags; if(rmpatch_emulate_instruction(context)) return; context->Esp -= sizeof(struct stkframe); } context->Esp += 4; next_intcb(context); } BOOL WINAPI DllEntryPoint(DWORD fdwReason, HINSTANCE16 hinstDLL, WORD ds, WORD wHeapSize, DWORD dwReserved1, WORD wReserved2) { switch(fdwReason) { case DLL_PROCESS_ATTACH: LoadLibrary16("TOOLHELP"); InterruptRegister16(FAKE_HTASK16, GetProcAddress16(GetModuleHandle16("RMPATCH"), "intcb")); NotifyRegister16(FAKE_HTASK16, GetProcAddress16(GetModuleHandle16("RMPATCH"), "checkpatch"), 0 /*NF_NORMAL*/); break; case DLL_PROCESS_DETACH: InterruptUnRegister16(FAKE_HTASK16); NotifyUnRegister16(FAKE_HTASK16); FreeLibrary16("TOOLHELP"); break; } return TRUE; } ================================================ FILE: rmpatch/rmpatch.def ================================================ LIBRARY rmpatch.dll16 EXPORTS _wine_spec_dos_header; @1 DATA PRIVATE ================================================ FILE: rmpatch/rmpatch.dll16.spec ================================================ 1 pascal DllEntryPoint(long word word word long word) DllEntryPoint 2 pascal -register intcb() intcb 3 pascal checkpatch(word long) checkpatch ================================================ FILE: rmpatch/rmpatch.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj rmpatch {3D889B37-09C8-4030-B815-830566CD57A5} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;$(OutDir)toolhelp.lib; %(AdditionalDependencies) true rmpatch.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false rmpatch.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;$(OutDir)toolhelp.lib; %(AdditionalDependencies) Document as --32 -o rmpatch.dll16.obj ddeml.dll16.asm rmpatch.dll16.asm;%(AdditionalInputs) Document "$(OutDir)convspec" "%(Filename).spec" RMPATCH > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" RMPATCH > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: shell/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp) add_library(shell SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/shell.def shell.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(shell.dll16 shell) target_link_libraries(shell libwine winecrt0 krnl386 shell32.lib) set_target_properties(shell PROPERTIES SUFFIX ".dll16") ================================================ FILE: shell/shell.c ================================================ /* * Shell Library Functions * * Copyright 1998 Marcus Meissner * Copyright 2000 Juergen Schmied * Copyright 2002 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include "windef.h" #include "winbase.h" #include "winreg.h" #include "wownt32.h" #include "shellapi.h" #include "winuser.h" #include "wingdi.h" #include "shlobj.h" #include "shlwapi.h" #include "wine/winbase16.h" #include "wine/winuser16.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(shell); extern HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpOperation,LPCSTR lpFile, LPCSTR lpParameters,LPCSTR lpDirectory, INT iShowCmd, void *callback); #define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16)) #define HINSTANCE_16(h32) (LOWORD(h32)) typedef struct { /* structure for dropped files */ WORD wSize; POINT16 ptMousePos; BOOL16 fInNonClientArea; /* memory block with filenames follows */ } DROPFILESTRUCT16, *LPDROPFILESTRUCT16; static const char lpstrMsgWndCreated[] = "OTHERWINDOWCREATED"; static const char lpstrMsgWndDestroyed[] = "OTHERWINDOWDESTROYED"; static const char lpstrMsgShellActivate[] = "ACTIVATESHELLWINDOW"; static HWND SHELL_hWnd = 0; static HHOOK SHELL_hHook = 0; static UINT uMsgWndCreated = 0; static UINT uMsgWndDestroyed = 0; static UINT uMsgShellActivate = 0; LPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin); static HICON convert_icon_to_32( HICON16 icon16 ) { if (!icon16) return 0; CURSORICONINFO *info = GlobalLock16( icon16 ); void *and_bits = info + 1; void *xor_bits = (BYTE *)and_bits + info->nHeight * 2 * ((info->nWidth + 15) / 16); HICON ret = CreateIcon( 0, info->nWidth, info->nHeight, info->bPlanes, info->bBitsPerPixel, and_bits, xor_bits ); GlobalUnlock16( icon16 ); return ret; } static HICON16 convert_icon_to_16( HINSTANCE16 inst, HICON icon ) { if (!icon) return 0; static HICON16 (WINAPI *pCreateIcon16)(HINSTANCE16,INT16,INT16,BYTE,BYTE,LPCVOID,LPCVOID); ICONINFO info; BITMAP bm; UINT and_size, xor_size; void *xor_bits = NULL, *and_bits; HICON16 handle = 0; if (!pCreateIcon16 && !(pCreateIcon16 = (void *)GetProcAddress( GetModuleHandleA("user.exe16"), "CreateIcon16" ))) return 0; if (!(GetIconInfo( icon, &info ))) return 0; GetObjectW( info.hbmMask, sizeof(bm), &bm ); and_size = bm.bmHeight * bm.bmWidthBytes; if (!(and_bits = HeapAlloc( GetProcessHeap(), 0, and_size ))) goto done; GetBitmapBits( info.hbmMask, and_size, and_bits ); if (info.hbmColor) { GetObjectW( info.hbmColor, sizeof(bm), &bm ); xor_size = bm.bmHeight * bm.bmWidthBytes; if (!(xor_bits = HeapAlloc( GetProcessHeap(), 0, xor_size ))) goto done; GetBitmapBits( info.hbmColor, xor_size, xor_bits ); } else { bm.bmHeight /= 2; xor_bits = (char *)and_bits + and_size / 2; } handle = pCreateIcon16( inst, bm.bmWidth, bm.bmHeight, bm.bmPlanes, bm.bmBitsPixel, and_bits, xor_bits ); done: HeapFree( GetProcessHeap(), 0, and_bits ); if (info.hbmColor) { HeapFree( GetProcessHeap(), 0, xor_bits ); DeleteObject( info.hbmColor ); } DeleteObject( info.hbmMask ); DestroyIcon( icon ); return handle; } /*********************************************************************** * DllEntryPoint [SHELL.101] * * Initialization code for shell.dll. Automatically loads the * 32-bit shell32.dll to allow thunking up to 32-bit code. * * RETURNS * Success: TRUE. Initialization completed successfully. * Failure: FALSE. */ BOOL WINAPI SHELL_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst, WORD ds, WORD HeapSize, DWORD res1, WORD res2) { return TRUE; } /************************************************************************* * DragAcceptFiles [SHELL.9] */ void WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b) { DragAcceptFiles(HWND_32(hWnd), b); } /************************************************************************* * DragQueryFile [SHELL.11] */ UINT16 WINAPI DragQueryFile16( HDROP16 hDrop, WORD wFile, LPSTR lpszFile, WORD wLength) { LPSTR lpDrop; UINT i = 0; LPDROPFILESTRUCT16 lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop); TRACE("(%04x, %x, %p, %u)\n", hDrop,wFile,lpszFile,wLength); if(!lpDropFileStruct) goto end; lpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->wSize; while (i++ < wFile) { while (*lpDrop++); /* skip filename */ if (!*lpDrop) { i = (wFile == 0xFFFF) ? i : 0; goto end; } } i = strlen(lpDrop); if (!lpszFile ) goto end; /* needed buffer size */ lstrcpynA (lpszFile, lpDrop, wLength); end: GlobalUnlock16(hDrop); return i; } /************************************************************************* * DragFinish [SHELL.12] */ void WINAPI DragFinish16(HDROP16 h) { TRACE("\n"); GlobalFree16(h); } /************************************************************************* * DragQueryPoint [SHELL.13] */ BOOL16 WINAPI DragQueryPoint16(HDROP16 hDrop, POINT16 *p) { LPDROPFILESTRUCT16 lpDropFileStruct; BOOL16 bRet; TRACE("\n"); lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop); memcpy(p,&lpDropFileStruct->ptMousePos,sizeof(POINT16)); bRet = lpDropFileStruct->fInNonClientArea; GlobalUnlock16(hDrop); return bRet; } /************************************************************************* * FindExecutable (SHELL.21) */ HINSTANCE16 WINAPI FindExecutable16( LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult ) { HINSTANCE hInst = FindExecutableA( lpFile, lpDirectory, lpResult ); if (hInst == ERROR_FILE_NOT_FOUND) { if (!lpDirectory || !*lpDirectory) { char buf[MAX_PATH]; if (krnl386_search_executable_file(lpFile, buf, ARRAYSIZE(buf), TRUE) == buf) { hInst = FindExecutableA(buf, NULL, lpResult); } } } GetShortPathNameA(lpResult, lpResult, strlen(lpResult) + 1); return HINSTANCE_16(hInst); } /************************************************************************* * AboutDlgProc (SHELL.33) */ BOOL16 WINAPI AboutDlgProc16( HWND16 hWnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) { FIXME( "stub\n" ); return FALSE; } /************************************************************************* * ShellAbout (SHELL.22) */ BOOL16 WINAPI ShellAbout16( HWND16 hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON16 icon16 ) { HICON icon = convert_icon_to_32( icon16 ); BOOL ret = ShellAboutA( HWND_32(hWnd), szApp, szOtherStuff, icon ); DestroyIcon( icon ); return ret; } __declspec(dllimport) HICON NE_ExtractIcon(LPCSTR lpszExeFileName, HICON * RetPtr, INT nIconIndex, UINT nIcons, UINT cxDesired, UINT cyDesired, UINT *pIconId, UINT flags); static inline UINT PrivateExtractIconsNE( LPCSTR lpwstrFile, int nIndex, int sizeX, int sizeY, HICON * phicon, /* [out] pointer to array of nIcons HICON handles */ UINT* pIconId, /* [out] pointer to array of nIcons icon identifiers or NULL */ UINT nIcons, /* [in] number of icons to retrieve */ UINT flags) /* [in] LR_* flags used by LoadImage */ { HICON ret; return (ret = PrivateExtractIconsA(lpwstrFile, nIndex, sizeX, sizeY, phicon, pIconId, nIcons, flags)) ? ret : NE_ExtractIcon(lpwstrFile, phicon, nIndex, nIcons, sizeX, sizeY, pIconId, flags); } /************************************************************************* * InternalExtractIcon [SHELL.39] * * This abortion is called directly by Progman */ HGLOBAL16 WINAPI InternalExtractIcon16(HINSTANCE16 hInstance, LPCSTR lpszExeFileName, UINT16 nIconIndex, WORD n ) { HGLOBAL16 hRet = 0; HICON16 *RetPtr = NULL; TRACE("(%04x,file %s,start %d,extract %d\n", hInstance, lpszExeFileName, nIconIndex, n); if (!n) return 0; hRet = GlobalAlloc16(GMEM_FIXED | GMEM_ZEROINIT, sizeof(*RetPtr) * n); RetPtr = GlobalLock16(hRet); if (nIconIndex == (UINT16)-1) /* get number of icons */ { RetPtr[0] = PrivateExtractIconsNE(lpszExeFileName, -1, 0, 0, NULL, NULL, 0, LR_DEFAULTCOLOR); } else { UINT ret; HICON *icons; icons = HeapAlloc(GetProcessHeap(), 0, n * sizeof(*icons)); ret = PrivateExtractIconsNE(lpszExeFileName, nIconIndex, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), icons, NULL, n, LR_DEFAULTCOLOR); if ((ret != 0xffffffff) && ret) { int i; for (i = 0; i < n; i++) RetPtr[i] = convert_icon_to_16(hInstance, icons[i]); } else { GlobalFree16(hRet); hRet = 0; } HeapFree(GetProcessHeap(), 0, icons); } return hRet; } /************************************************************************* * ExtractIconW [SHELL32.@] */ HICON WINAPI ExtractIconNE(HINSTANCE hInstance, LPCSTR lpszFile, UINT nIconIndex) { HICON hIcon = NULL; UINT ret; UINT cx = GetSystemMetrics(SM_CXICON), cy = GetSystemMetrics(SM_CYICON); TRACE("%p %s %d\n", hInstance, debugstr_a(lpszFile), nIconIndex); if (nIconIndex == (UINT)-1) { ret = PrivateExtractIconsNE(lpszFile, -1, cx, cy, NULL, NULL, 0, LR_DEFAULTCOLOR); if (ret != (UINT)-1 && ret) return (HICON)(UINT_PTR)ret; return NULL; } else ret = PrivateExtractIconsNE(lpszFile, nIconIndex, cx, cy, &hIcon, NULL, 1, LR_DEFAULTCOLOR); if (ret == (UINT)-1) return (HICON)1; else if (ret > 0 && hIcon) return hIcon; return NULL; } __declspec(dllimport) LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len); /************************************************************************* * ExtractIcon (SHELL.34) */ HICON16 WINAPI ExtractIcon16( HINSTANCE16 hInstance, LPCSTR lpszExeFileName, UINT16 nIconIndex ) { char buf[MAX_PATH]; TRACE("\n"); lpszExeFileName = RedirectSystemDir(lpszExeFileName, buf, MAX_PATH); if (nIconIndex == 0xFFFF) { return ExtractIconNE(NULL, lpszExeFileName, -1); } return convert_icon_to_16( hInstance, ExtractIconNE(NULL, lpszExeFileName, nIconIndex) ); } /************************************************************************* * ExtractIconEx (SHELL.40) */ UINT16 WINAPI ExtractIconEx16( LPCSTR lpszFile, INT16 nIconIndex, HICON16 *phiconLarge, HICON16 *phiconSmall, UINT16 nIcons ) { HICON *ilarge,*ismall; int i, ret; if (phiconLarge) ilarge = HeapAlloc(GetProcessHeap(),0,nIcons*sizeof(HICON)); else ilarge = NULL; if (phiconSmall) ismall = HeapAlloc(GetProcessHeap(),0,nIcons*sizeof(HICON)); else ismall = NULL; ret = ExtractIconExA(lpszFile,nIconIndex,ilarge,ismall,nIcons); if (ilarge) { for (i=0;i length - 1 ) goto err; memcpy(lpBuffer + bufCnt, lpKey, l); bufCnt += l; } else { /* Keyword not found; Leave the %KEYWORD% intact */ if( bufCnt + envKeyLen + 2 > length - 1 ) goto err; memcpy(lpBuffer + bufCnt, lpstr, envKeyLen + 2); bufCnt += envKeyLen + 2; } lpstr = lpend + 1; } if (!*lpstr && bufCnt <= length - 1) { memcpy(str,lpBuffer, bufCnt); str[bufCnt] = '\0'; retLength = bufCnt + 1; retStatus = 1; } err: if (!retStatus) WARN("-- Env subst aborted - string too short or invalid input\n"); TRACE("-- return %s\n", str); OemToCharA(str,str); HeapFree( GetProcessHeap(), 0, lpBuffer); return (DWORD)MAKELONG(retLength, retStatus); } /************************************************************************* * SHELL_HookProc * * 32-bit version of the system-wide WH_SHELL hook. */ static LRESULT WINAPI SHELL_HookProc(INT code, WPARAM wParam, LPARAM lParam) { TRACE("%i, %lx, %08lx\n", code, wParam, lParam ); if (SHELL_hWnd) { switch( code ) { case HSHELL_WINDOWCREATED: PostMessageA( SHELL_hWnd, uMsgWndCreated, wParam, 0 ); break; case HSHELL_WINDOWDESTROYED: PostMessageA( SHELL_hWnd, uMsgWndDestroyed, wParam, 0 ); break; case HSHELL_ACTIVATESHELLWINDOW: PostMessageA( SHELL_hWnd, uMsgShellActivate, wParam, 0 ); break; } } return CallNextHookEx( SHELL_hHook, code, wParam, lParam ); } /************************************************************************* * ShellHookProc [SHELL.103] * System-wide WH_SHELL hook. */ LRESULT WINAPI ShellHookProc16(INT16 code, WPARAM16 wParam, LPARAM lParam) { return SHELL_HookProc( code, wParam, lParam ); } /************************************************************************* * RegisterShellHook [SHELL.102] */ BOOL WINAPI RegisterShellHook16(HWND16 hWnd, UINT16 uAction) { TRACE("%04x [%u]\n", hWnd, uAction ); switch( uAction ) { case 2: /* register hWnd as a shell window */ if( !SHELL_hHook ) { SHELL_hHook = SetWindowsHookExA( WH_SHELL, SHELL_HookProc, GetModuleHandleA("shell32.dll"), 0 ); if ( SHELL_hHook ) { uMsgWndCreated = RegisterWindowMessageA( lpstrMsgWndCreated ); uMsgWndDestroyed = RegisterWindowMessageA( lpstrMsgWndDestroyed ); uMsgShellActivate = RegisterWindowMessageA( lpstrMsgShellActivate ); } else WARN("-- unable to install ShellHookProc()!\n"); } if ( SHELL_hHook ) return ((SHELL_hWnd = HWND_32(hWnd)) != 0); break; default: WARN("-- unknown code %i\n", uAction ); SHELL_hWnd = 0; /* just in case */ } return FALSE; } /*********************************************************************** * DriveType (SHELL.262) */ UINT16 WINAPI DriveType16( UINT16 drive ) { UINT ret; char path[] = "A:\\"; path[0] += drive; ret = GetDriveTypeA(path); switch(ret) /* some values are not supported in Win16 */ { case DRIVE_CDROM: ret = DRIVE_REMOTE; break; case DRIVE_NO_ROOT_DIR: ret = DRIVE_UNKNOWN; break; } return ret; } BOOL is_reactos_or_wine() { static BOOL detected; static BOOL is; HKEY hKey; CHAR name[100]; DWORD dwType, dwSize = sizeof(name); if (detected) return is; detected = TRUE; if (ERROR_SUCCESS != RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_QUERY_VALUE, &hKey)) return FALSE; if (ERROR_SUCCESS != RegQueryValueExA(hKey, "ProductName", NULL, &dwType, (LPBYTE)name, &dwSize)) { RegCloseKey(hKey); return FALSE; } RegCloseKey(hKey); if (dwType != REG_SZ) return FALSE; is = strstr(name, "ReactOS") != NULL; if (!is) { is = GetProcAddress(GetModuleHandleW("ntdll"), "wine_get_version") != NULL; } return is; } /************************************************************************* * SHELL_Execute16 [Internal] */ static UINT_PTR SHELL_Execute16(const WCHAR *lpCmd, WCHAR *env, BOOL shWait, const SHELLEXECUTEINFOW *psei, LPSHELLEXECUTEINFOW psei_out) { UINT ret; char sCmd[MAX_PATH]; WideCharToMultiByte(CP_ACP, 0, lpCmd, -1, sCmd, MAX_PATH, NULL, NULL); ret = WinExec16(sCmd, (UINT16)psei->nShow); psei_out->hInstApp = HINSTANCE_32(ret); return ret; } static UINT_PTR WINAPI SHELL_Execute16_Windows(const CHAR *lpCmd, int nShowCmd, const CHAR *lpDir) { UINT ret; char currdir[MAX_PATH]; GetCurrentDirectoryA(MAX_PATH, currdir); SetCurrentDirectoryA(lpDir); ret = WinExec16(lpCmd, nShowCmd); SetCurrentDirectoryA(currdir); return ret; } /************************************************************************* * ShellExecute [SHELL.20] */ HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT16 iShowCmd ) { void *callback = is_reactos_or_wine() ? (void*)SHELL_Execute16 : (void*)SHELL_Execute16_Windows; HINSTANCE rret1632 = WOWShellExecute(HWND_32(hWnd), lpOperation, lpFile, lpParameters, lpDirectory, iShowCmd, callback); if (rret1632 >= 32) { return HINSTANCE_16(rret1632); } if (rret1632 == ERROR_FILE_NOT_FOUND) { return rret1632; } HINSTANCE rret = ShellExecuteA(HWND_32(hWnd), lpOperation, lpFile, lpParameters, lpDirectory, iShowCmd); if (GetLastError() == 0x000000d8) { return (HINSTANCE16)rret; } else { if (rret >= 32) return HINSTANCE_16(rret); return (HINSTANCE16)rret; } } HMODULE16 WINAPI MapHModuleLS(HMODULE hmod); /************************************************************************* * RunDLL_CallEntry16 * * Only exported from shell32 on Windows, probably imported * from shell through the 16/32 thunks. */ void WINAPI RunDLL_CallEntry16( DWORD proc, HWND hwnd, HINSTANCE inst, LPCSTR cmdline, INT cmdshow ) { WORD args[5]; SEGPTR cmdline_seg; TRACE( "proc %x hwnd %p inst %p cmdline %s cmdshow %d\n", proc, hwnd, inst, debugstr_a(cmdline), cmdshow ); cmdline_seg = MapLS( cmdline ); args[4] = HWND_16(hwnd); args[3] = MapHModuleLS(inst); args[2] = SELECTOROF(cmdline_seg); args[1] = OFFSETOF(cmdline_seg); args[0] = cmdshow; WOWCallback16Ex( proc, WCB16_PASCAL, sizeof(args), args, NULL ); UnMapLS( cmdline_seg ); } DWORD WINAPI SHFormatDrive16(HWND16 hwnd, UINT16 drive, UINT16 fmtID, UINT16 options) { return SHFormatDrive(HWND_32(hwnd), drive, fmtID, options); } ================================================ FILE: shell/shell.def ================================================ ; File generated automatically from shell.dll16.spec; do not edit! LIBRARY shell.dll16 EXPORTS _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE _RunDLL_CallEntry16@20 @2 ================================================ FILE: shell/shell.dll16.spec ================================================ 1 pascal RegOpenKey(long str ptr) RegOpenKey16 2 pascal RegCreateKey(long str ptr) RegCreateKey16 3 pascal RegCloseKey(long) RegCloseKey16 4 pascal RegDeleteKey(long str) RegDeleteKey16 5 pascal RegSetValue(long str long str long) RegSetValue16 6 pascal RegQueryValue(long str ptr ptr) RegQueryValue16 7 pascal RegEnumKey(long long ptr long) RegEnumKey16 # 8 stub WEP 9 pascal -ret16 DragAcceptFiles(word word) DragAcceptFiles16 11 pascal -ret16 DragQueryFile(word s_word ptr s_word) DragQueryFile16 12 pascal -ret16 DragFinish(word) DragFinish16 13 pascal -ret16 DragQueryPoint(word ptr) DragQueryPoint16 20 pascal -ret16 ShellExecute(word str str str str s_word) ShellExecute16 21 pascal -ret16 FindExecutable(str str ptr) FindExecutable16 22 pascal -ret16 ShellAbout(word ptr ptr word) ShellAbout16 33 pascal -ret16 AboutDlgProc(word word word long) AboutDlgProc16 34 pascal -ret16 ExtractIcon(word str s_word) ExtractIcon16 36 pascal -ret16 ExtractAssociatedIcon(word ptr ptr) ExtractAssociatedIcon16 37 pascal DoEnvironmentSubst(ptr word) DoEnvironmentSubst16 38 pascal FindEnvironmentString(ptr) FindEnvironmentString16 39 pascal -ret16 InternalExtractIcon(word ptr s_word word) InternalExtractIcon16 40 pascal -ret16 ExtractIconEx(str word ptr ptr word) ExtractIconEx16 # 98 stub SHL3216_THUNKDATA16 # 99 stub SHL1632_THUNKDATA16 #100 4 0550 HERETHARBETYGARS exported, shared data #101 8 010e FINDEXEDLGPROC exported, shared data 101 pascal DllEntryPoint(long word word word long word) SHELL_DllEntryPoint 102 pascal -ret16 RegisterShellHook(word word) RegisterShellHook16 103 pascal ShellHookProc(word word long) ShellHookProc16 157 stub RESTARTDIALOG # 166 PICKICONDLG 262 pascal -ret16 DriveType(long) DriveType16 # 263 SH16TO32DRIVEIOCTL # 264 SH16TO32INT2526 # 300 SHGETFILEINFO 400 pascal SHFormatDrive(word word word word) SHFormatDrive16 401 stub SHCHECKDRIVE # 402 _RUNDLLCHECKDRIVE #32 WCI ################################################################ # Wine extensions: functions needed by shell32 @ stdcall -arch=win32 RunDLL_CallEntry16(long long ptr str long) ================================================ FILE: shell/shell.vcxproj ================================================  Debug Win32 Release Win32 {BD91A02B-907B-4512-A963-1166D1EBC5C4} Win32Proj shell 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false .dll16 Level3 Disabled WIN32;_DEBUG;_CONSOLE;_LIB;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;strncasecmp=_strnicmp;%(PreprocessorDefinitions) ../wine Console true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;shell32.lib;gdi32.lib;user32.lib;advapi32.lib shell.def Level3 MaxSpeed true true WIN32;NDEBUG;_CONSOLE;_LIB;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;strncasecmp=_strnicmp;%(PreprocessorDefinitions) ../wine Console true true true shell.def false $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;shell32.lib;gdi32.lib;user32.lib;advapi32.lib Document "$(OutDir)convspec" "%(Filename).spec" SHELL > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" SHELL > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: shell/shell.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: sound/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(sound SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/sound.def sound.drv16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(sound.drv16 sound) target_link_libraries(sound libwine winecrt0 krnl386 winmm.lib) set_target_properties(sound PROPERTIES SUFFIX ".drv16") ================================================ FILE: sound/Makefile.in ================================================ MODULE = sound.drv16 EXTRADLLFLAGS = -m16 -Wb,--main-module,winmm.dll C_SRCS = sound.c ================================================ FILE: sound/sound.c ================================================ /* * 16-bit sound support * * Copyright Robert J. Amstadt, 1993 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "wine/windef16.h" #include "wine/debug.h" #include "mmsystem.h" WINE_DEFAULT_DEBUG_CHANNEL(sound); #define S_SERDVNA (-1) #define S_SERMACT (-3) #define S_SERQFUL (-4) #define S_SERDNT (-5) #define S_SERDLN (-6) #define S_SERDTP (-8) #define S_SERDMD (-10) #define S_SERDPT (-12) #define S_SERDFQ (-13) #define S_QUEUEEMPTY 0 #define S_NORMAL 0 #define S_LEGATO 1 #define S_STACCATO 2 typedef struct { UINT16 freq; UINT16 duration; UINT16 interstice; } NOTE; static NOTE *queue; static int queuelen; static HTASK owner = 0; static volatile BOOL playing; static int nextnote; static HANDLE thread; static LPHWAVEOUT wohand; static HANDLE event; static int pitch; static int tempo; static int mode; INT16 WINAPI StopSound16(void); INT16 WINAPI WaitSoundState16(INT16 x); /*********************************************************************** * OpenSound (SOUND.1) */ INT16 WINAPI OpenSound16(void) { if (owner) return S_SERDVNA; const WAVEFORMATEX wfmt = { WAVE_FORMAT_PCM, 1, 48000, 48000, 1, 8, 0 }; event = CreateEventA(NULL, FALSE, FALSE, NULL); if (waveOutOpen(&wohand, WAVE_MAPPER, &wfmt, event, 0, CALLBACK_EVENT) != MMSYSERR_NOERROR) { CloseHandle(event); return S_SERDVNA; } owner = GetCurrentTask(); queue = (NOTE *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 32 * sizeof(NOTE)); queuelen = 32 * sizeof(NOTE); playing = 0; nextnote = 0; pitch = 0; tempo = 120; mode = S_NORMAL; return 1; } /*********************************************************************** * CloseSound (SOUND.2) */ void WINAPI CloseSound16(void) { if (owner != GetCurrentTask()) return; StopSound16(); WaitSoundState16(S_QUEUEEMPTY); HeapFree(GetProcessHeap(), 0, (LPVOID)queue); waveOutClose(wohand); CloseHandle(event); event = NULL; wohand = NULL; queue = NULL; playing = 0; owner = 0; } /*********************************************************************** * SetVoiceQueueSize (SOUND.3) */ INT16 WINAPI SetVoiceQueueSize16(INT16 nVoice, INT16 nBytes) { if (owner != GetCurrentTask()) return 0; if (nVoice != 1) return 0; if (playing) return S_SERMACT; HeapFree(GetProcessHeap(), 0, (LPVOID)queue); queue = (NOTE *)HeapAlloc(GetProcessHeap(), 0, nBytes); queuelen = nBytes; nextnote = 0; return 0; } /*********************************************************************** * SetVoiceAccent (SOUND.5) */ INT16 WINAPI SetVoiceAccent16(INT16 nVoice, INT16 nTempo, INT16 nVolume, INT16 nMode, INT16 nPitch) { // nVolume is ignored and some programs set it to 0 if (owner != GetCurrentTask()) return 0; if (nVoice != 1) return 0; TRACE("(%d,%d,%d,%d,%d):\n", nVoice, nTempo, nVolume, nMode, nPitch); if ((nTempo < 32) || (nTempo > 255)) return S_SERDTP; if (nPitch > 83) return S_SERDPT; if (nMode > 2) return S_SERDMD; tempo = nTempo; pitch = nPitch; mode = nMode; return 0; } /*********************************************************************** * SetVoiceEnvelope (SOUND.6) */ INT16 WINAPI SetVoiceEnvelope16(INT16 nVoice, INT16 nShape, INT16 nRepeat) { FIXME("(%d,%d,%d): stub\n",nVoice,nShape,nRepeat); return 0; } /*********************************************************************** * SetSoundNoise (SOUND.7) */ INT16 WINAPI SetSoundNoise16(INT16 nSource, INT16 nDuration) { FIXME("(%d,%d): stub\n",nSource,nDuration); return 0; } /*********************************************************************** * SetVoiceSound (SOUND.8) */ INT16 WINAPI SetVoiceSound16(INT16 nVoice, DWORD lFrequency, INT16 nDuration) { if (owner != GetCurrentTask()) return 0; if (nVoice != 1) return 0; if (playing) return 0; if (nextnote >= (queuelen / sizeof(NOTE))) return S_SERQFUL; int freq = HIWORD(lFrequency); if (freq && ((freq < 37) || (freq > 32767))) return S_SERDFQ; TRACE("freq: %d duration: %d\n", freq, nDuration); queue[nextnote].freq = freq; int len = ((nDuration + 1) / 2) * 5; // 2.5 ms per tick rounded up queue[nextnote].duration = freq ? len : 0; queue[nextnote].interstice = !freq ? len : 0; nextnote++; return 0; } /*********************************************************************** * SetVoiceNote (SOUND.4) */ INT16 WINAPI SetVoiceNote16(INT16 nVoice, INT16 nValue, INT16 nLength, INT16 nCdots) { if (owner != GetCurrentTask()) return 0; if (nVoice != 1) return 0; if (playing) return 0; if (nextnote >= (queuelen / sizeof(NOTE))) return S_SERQFUL; if ((UINT16)nValue > 84) return S_SERDNT; if (nLength <= 0) return S_SERDLN; TRACE("(%d,%d,%d,%d)\n",nVoice,nValue,nLength,nCdots); const int notes[] = { 4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902 }; float modelen = 0; int freq = 0; float len = (240000 * (2 - powf(.5f, nCdots))) / (nLength * tempo); if (len >= 65536) return S_SERDLN; if (nValue) { nValue = ((nValue + pitch) % 84) - 1; freq = notes[nValue % 12] >> (6 - (nValue / 12)); modelen = (mode == S_STACCATO) ? .75f : (mode == S_LEGATO) ? 1 : .875f; } queue[nextnote].freq = freq; queue[nextnote].duration = roundf(len * modelen); queue[nextnote].interstice = len - queue[nextnote].duration; nextnote++; return 0; } static DWORD WINAPI play(LPVOID param) { int len = 0; const float mspersamp = 1000.0f / 48000.0f; for (int i = 0; i < nextnote; i++) len += (float)(queue[i].duration + queue[i].interstice) / mspersamp; if (!len) return; int buflen = len; char *wavbuf = (char *)HeapAlloc(GetProcessHeap(), 0, buflen); int k = 0; // sound.drv that came with Windows 2-3 only supported the pc speaker // make square waves to simulate it for (int i = 0; i < nextnote; i++) { int notelen = (float)queue[i].duration / mspersamp; if (notelen) { int hwavelen = max(1, (int)((1000.0f / ((float)queue[i].freq * mspersamp)) / 2)); char samp = 0x99; for (int j = 0; j < notelen; j++) { wavbuf[k + j] = samp; if (!(j % hwavelen)) samp = ~samp; } } k += notelen; int interslen = (float)queue[i].interstice / mspersamp; if (interslen) { for (int j = 0; j < interslen; j++) wavbuf[k + j] = 0x80; } k += interslen; } WAVEHDR whdr = { wavbuf, buflen, 0, 0, 0, 0, NULL, NULL }; if (waveOutPrepareHeader(wohand, &whdr, sizeof(whdr)) == MMSYSERR_NOERROR) { if (waveOutWrite(wohand, &whdr, sizeof(whdr)) == MMSYSERR_NOERROR) { do WaitForSingleObject(event, INFINITE); while (!(whdr.dwFlags & WHDR_DONE)); } waveOutUnprepareHeader(wohand, &whdr, sizeof(whdr)); } HeapFree(GetProcessHeap(), 0, wavbuf); nextnote = 0; playing = 0; ExitThread(0); } /*********************************************************************** * StartSound (SOUND.9) */ INT16 WINAPI StartSound16(void) { if (owner != GetCurrentTask()) return 0; if (playing) return 0; playing = 1; thread = CreateThread(NULL, 0, play, 0, 0, NULL); return 0; } /*********************************************************************** * WaitSoundState (SOUND.11) */ INT16 WINAPI WaitSoundState16(INT16 x) { if (owner != GetCurrentTask()) return 0; if (!playing) return 0; HANDLE dup; if (DuplicateHandle(GetCurrentProcess(), thread, GetCurrentProcess(), &dup, 0, FALSE, DUPLICATE_SAME_ACCESS)) { BOOL exitcode; GetExitCodeThread(dup, &exitcode); if (exitcode == STILL_ACTIVE) { DWORD count; ReleaseThunkLock(&count); WaitForSingleObject(dup, INFINITE); RestoreThunkLock(count); } CloseHandle(dup); } return 0; } /*********************************************************************** * StopSound (SOUND.10) */ INT16 WINAPI StopSound16(void) { if (owner != GetCurrentTask()) return 0; if (!playing) return 0; waveOutReset(wohand); return 0; } /*********************************************************************** * SyncAllVoices (SOUND.12) */ INT16 WINAPI SyncAllVoices16(void) { FIXME("(void): stub\n"); return 0; } /*********************************************************************** * CountVoiceNotes (SOUND.13) */ INT16 WINAPI CountVoiceNotes16(INT16 nVoice) { if (nVoice != 1) return 0; return nextnote; } /*********************************************************************** * GetThresholdEvent (SOUND.14) */ LPINT16 WINAPI GetThresholdEvent16(void) { FIXME("(void): stub\n"); return NULL; } /*********************************************************************** * GetThresholdStatus (SOUND.15) */ INT16 WINAPI GetThresholdStatus16(void) { FIXME("(void): stub\n"); return 0; } /*********************************************************************** * SetVoiceThreshold (SOUND.16) */ INT16 WINAPI SetVoiceThreshold16(INT16 a, INT16 b) { FIXME("(%d,%d): stub\n", a, b); return 0; } /*********************************************************************** * DoBeep (SOUND.17) */ void WINAPI DoBeep16(void) { FIXME("(void): stub!\n"); } ================================================ FILE: sound/sound.def ================================================ ; File generated automatically from ..\sound\sound.drv16.spec; do not edit! LIBRARY sound.drv16 EXPORTS _wine_spec_dos_header=_wine_spec_dos_header @1 DATA ================================================ FILE: sound/sound.drv16.spec ================================================ 1 pascal -ret16 OpenSound() OpenSound16 2 pascal -ret16 CloseSound() CloseSound16 3 pascal -ret16 SetVoiceQueueSize(word word) SetVoiceQueueSize16 4 pascal -ret16 SetVoiceNote(word word word word) SetVoiceNote16 5 pascal -ret16 SetVoiceAccent(word word word word word) SetVoiceAccent16 6 pascal -ret16 SetVoiceEnvelope(word word word) SetVoiceEnvelope16 7 pascal -ret16 SetSoundNoise(word word) SetSoundNoise16 8 pascal -ret16 SetVoiceSound(word long word) SetVoiceSound16 9 pascal -ret16 StartSound() StartSound16 10 pascal -ret16 StopSound() StopSound16 11 pascal -ret16 WaitSoundState(word) WaitSoundState16 12 pascal -ret16 SyncAllVoices() SyncAllVoices16 13 pascal -ret16 CountVoiceNotes(word) CountVoiceNotes16 14 pascal GetThresholdEvent() GetThresholdEvent16 15 pascal -ret16 GetThresholdStatus() GetThresholdStatus16 16 pascal -ret16 SetVoiceThreshold(word word) SetVoiceThreshold16 17 pascal -ret16 DoBeep() DoBeep16 18 stub MYOPENSOUND # W1.1, W2.0 ================================================ FILE: sound/sound.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj sound {7B417913-AE01-41E5-BFEA-AB971B779F63} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .drv16 false Release .drv16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;winmm.lib; true sound.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false sound.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;winmm.lib; Document "$(OutDir)convspec" "%(Filename).spec" SOUND > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" "$(OutDir)convspec" "%(Filename).spec" SOUND > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj %(Filename).obj ================================================ FILE: storage/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(storage SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/storage.def storage.dll16.obj) include_directories(../wine ${CMAKE_BINARY_DIR}) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(storage.dll16 storage) target_link_libraries(storage libwine winecrt0 krnl386 ole2) set_target_properties(storage PROPERTIES SUFFIX ".dll16") ================================================ FILE: storage/Makefile.in ================================================ MODULE = storage.dll16 IMPORTS = uuid ole32 EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll C_SRCS = storage.c ================================================ FILE: storage/ifs.h ================================================ /* * Copyright 1997 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLE_IFS_H #define __WINE_OLE_IFS_H #include #include "windef.h" #include "winbase.h" #include "objbase.h" typedef CHAR OLECHAR16; typedef LPSTR LPOLESTR16; typedef LPCSTR LPCOLESTR16; #define STDMETHOD16CALLTYPE __cdecl #define STDMETHOD16(m) HRESULT (STDMETHOD16CALLTYPE *m) #define STDMETHOD16_(t,m) t (STDMETHOD16CALLTYPE *m) /**********************************************************************/ typedef struct ILockBytes16 *LPLOCKBYTES16; #define INTERFACE ILockBytes16 DECLARE_INTERFACE_(ILockBytes16,IUnknown) { /*** IUnknown methods ***/ STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD16_(ULONG,AddRef)(THIS) PURE; STDMETHOD16_(ULONG,Release)(THIS) PURE; /*** ILockBytes16 methods ***/ STDMETHOD16(ReadAt)(THIS_ ULARGE_INTEGER ulOffset, void *pv, ULONG cb, ULONG *pcbRead) PURE; STDMETHOD16(WriteAt)(THIS_ ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten) PURE; STDMETHOD16(Flush)(THIS) PURE; STDMETHOD16(SetSize)(THIS_ ULARGE_INTEGER cb) PURE; STDMETHOD16(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE; STDMETHOD16(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE; STDMETHOD16(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag) PURE; }; #undef INTERFACE /**********************************************************************/ typedef struct tagSTATSTG16 { LPOLESTR16 pwcsName; DWORD type; ULARGE_INTEGER cbSize; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD grfMode; DWORD grfLocksSupported; CLSID clsid; DWORD grfStateBits; DWORD reserved; } STATSTG16; typedef struct IStream16 *LPSTREAM16; #define INTERFACE IStream16 DECLARE_INTERFACE_(IStream16,ISequentialStream) { /*** IUnknown methods ***/ STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD16_(ULONG,AddRef)(THIS) PURE; STDMETHOD16_(ULONG,Release)(THIS) PURE; /*** ISequentialStream methods ***/ STDMETHOD16_(HRESULT,Read)(THIS_ void* pv, ULONG cb, ULONG* pcbRead) PURE; STDMETHOD16_(HRESULT,Write)(THIS_ const void* pv, ULONG cb, ULONG* pcbWritten) PURE; /*** IStream16 methods ***/ STDMETHOD16(Seek)(THIS_ LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition) PURE; STDMETHOD16(SetSize)(THIS_ ULARGE_INTEGER libNewSize) PURE; STDMETHOD16(CopyTo)(THIS_ IStream16* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten) PURE; STDMETHOD16(Commit)(THIS_ DWORD grfCommitFlags) PURE; STDMETHOD16(Revert)(THIS) PURE; STDMETHOD16(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE; STDMETHOD16(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE; STDMETHOD16(Stat)(THIS_ STATSTG* pstatstg, DWORD grfStatFlag) PURE; STDMETHOD16(Clone)(THIS_ IStream16** ppstm) PURE; }; #undef INTERFACE /**********************************************************************/ typedef OLECHAR16 **SNB16; typedef struct IStorage16 *LPSTORAGE16; #define INTERFACE IStorage16 DECLARE_INTERFACE_(IStorage16,IUnknown) { /*** IUnknown methods ***/ STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD16_(ULONG,AddRef)(THIS) PURE; STDMETHOD16_(ULONG,Release)(THIS) PURE; /*** IStorage16 methods ***/ STDMETHOD16_(HRESULT,CreateStream)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream16** ppstm) PURE; STDMETHOD16_(HRESULT,OpenStream)(THIS_ LPCOLESTR16 pwcsName, void* reserved1, DWORD grfMode, DWORD reserved2, IStream16** ppstm) PURE; STDMETHOD16_(HRESULT,CreateStorage)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage16** ppstg) PURE; STDMETHOD16_(HRESULT,OpenStorage)(THIS_ LPCOLESTR16 pwcsName, IStorage16* pstgPriority, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16** ppstg) PURE; STDMETHOD16_(HRESULT,CopyTo)(THIS_ DWORD ciidExclude, const IID* rgiidExclude, SNB16 snbExclude, IStorage16* pstgDest) PURE; STDMETHOD16_(HRESULT,MoveElementTo)(THIS_ LPCOLESTR16 pwcsName, IStorage16* pstgDest, LPCOLESTR16 pwcsNewName, DWORD grfFlags) PURE; STDMETHOD16_(HRESULT,Commit)(THIS_ DWORD grfCommitFlags) PURE; STDMETHOD16_(HRESULT,Revert)(THIS) PURE; STDMETHOD16_(HRESULT,EnumElements)(THIS_ DWORD reserved1, void* reserved2, DWORD reserved3, IEnumSTATSTG** ppenum) PURE; STDMETHOD16_(HRESULT,DestroyElement)(THIS_ LPCOLESTR16 pwcsName) PURE; STDMETHOD16_(HRESULT,RenameElement)(THIS_ LPCOLESTR16 pwcsOldName, LPCOLESTR16 pwcsNewName) PURE; STDMETHOD16_(HRESULT,SetElementTimes)(THIS_ LPCOLESTR16 pwcsName, const FILETIME* pctime, const FILETIME* patime, const FILETIME* pmtime) PURE; STDMETHOD16_(HRESULT,SetClass)(THIS_ REFCLSID clsid) PURE; STDMETHOD16_(HRESULT,SetStateBits)(THIS_ DWORD grfStateBits, DWORD grfMask) PURE; STDMETHOD16_(HRESULT,Stat)(THIS_ STATSTG* pstatstg, DWORD grfStatFlag) PURE; }; #undef INTERFACE #endif /* __WINE_OLE_IFS_H */ ================================================ FILE: storage/storage.c ================================================ /* Compound Storage * * Implemented using the documentation of the LAOLA project at * * (Thanks to Martin Schwartz ) * * Copyright 1998 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define NONAMELESSUNION #include "config.h" #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include "windef.h" #include "winbase.h" #undef _WINTERNL_ #define _WIN32_WINNT 0x600 #include NTSYSAPI BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING, LPCSTR); #include "winerror.h" #include "wine/winbase16.h" #include "wownt32.h" #include "wine/unicode.h" #include "objbase.h" #include "wine/debug.h" #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) WINE_DEFAULT_DEBUG_CHANNEL(ole); #include "../ole2/ifs.h" /****************************************************************************** * StgCreateDocFileA [STORAGE.1] */ HRESULT WINAPI StgCreateDocFile16( LPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved,/*IStorage16 * */SEGPTR *ppstgOpen ) { LPSTORAGE stg; LPWSTR w = strdupAtoW(pwcsName); HRESULT result; TRACE("(%s,0x%08x,0x%08x,%p)\n", pwcsName,grfMode,reserved,ppstgOpen ); result = StgCreateDocfile(w, grfMode, reserved, &stg); HeapFree(GetProcessHeap(), 0, w); *ppstgOpen = iface32_16(&IID_IStorage, stg); return result; } HRESULT WINAPI StgCreateDocfileOnILockBytes16( SEGPTR plkbyt, DWORD grfMode, DWORD reserved, /* IStorage16 */SEGPTR *ppstgOpen ) { HRESULT result; IStorage *pstg; TRACE("(%08x,%08x,%08x,%p)\n", plkbyt, grfMode, reserved, ppstgOpen); result = StgCreateDocfileOnILockBytes(iface16_32(&IID_ILockBytes, plkbyt), grfMode, reserved, &pstg); *ppstgOpen = iface32_16(&IID_IStorage, pstg); return result; } /****************************************************************************** * StgOpenStorage [STORAGE.3] */ HRESULT WINAPI StgOpenStorage16( LPCOLESTR16 pwcsName, /* IStorage16 * */SEGPTR pstgPriority, DWORD grfMode, SNB16 snbExclude, DWORD reserved, /* IStorage16 * */SEGPTR *ppstgOpen ) { LPSTORAGE stg; LPWSTR w = strdupAtoW(pwcsName); HRESULT result; IStorage *pstg; TRACE("(%s,%p,0x%08x,%p,%d,%p)\n", pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstgOpen ); if (snbExclude) FIXME("snbExclude\n"); result = StgOpenStorage(w, (IStorage*)iface16_32(&IID_IStorage, pstgPriority), grfMode, NULL, reserved, &pstg); HeapFree(GetProcessHeap(), 0, w); *ppstgOpen = iface32_16(&IID_IStorage, pstg); return result; } /****************************************************************************** * StgIsStorageFile [STORAGE.5] */ HRESULT WINAPI StgIsStorageFile16(LPCOLESTR16 fn) { UNICODE_STRING strW; HRESULT ret; RtlCreateUnicodeStringFromAsciiz(&strW, fn); ret = StgIsStorageFile( strW.Buffer ); RtlFreeUnicodeString( &strW ); return ret; } /****************************************************************************** * StgIsStorageILockBytes [STORAGE.6] * * Determines if the ILockBytes contains a storage object. */ HRESULT WINAPI StgIsStorageILockBytes16(SEGPTR plkbyt) { return StgIsStorageILockBytes((ILockBytes*)iface16_32(&IID_ILockBytes, plkbyt)); } /****************************************************************************** * StgOpenStorageOnILockBytes [STORAGE.4] * * PARAMS * plkbyt FIXME: Should probably be an ILockBytes16 *. */ HRESULT WINAPI StgOpenStorageOnILockBytes16( SEGPTR plkbyt, /* IStorage16 * */SEGPTR pstgPriority, DWORD grfMode, SNB16 snbExclude, DWORD reserved, /* IStorage16 * */SEGPTR *ppstgOpen) { IStorage *pstg; HRESULT result; TRACE("(%x, %08x, 0x%08x, %p, %x, %p)\n", plkbyt, pstgPriority, grfMode, snbExclude, reserved, ppstgOpen); if (snbExclude) FIXME("snbExclude\n"); result = StgOpenStorageOnILockBytes((ILockBytes*)iface16_32(&IID_ILockBytes, plkbyt), (IStorage*)iface16_32(&IID_IStorage, pstgPriority), grfMode, NULL, reserved, &pstg); *ppstgOpen = iface32_16(&IID_IStorage, pstg); return result; } HRESULT WINAPI StgSetTimes16(char const *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime) { HRESULT result; const WCHAR *lpwszName; TRACE("(%s,%p,%p,%p)\n", debugstr_a(lpszName), pctime, patime, pmtime); lpwszName = strdupAtoW(lpszName); result = StgSetTimes(lpwszName, pctime, patime, pmtime); HeapFree(GetProcessHeap(), 0, lpwszName); return hresult32_16(result); } #if 0 #include "ifs.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); WINE_DECLARE_DEBUG_CHANNEL(relay); struct storage_header { BYTE magic[8]; /* 00: magic */ BYTE unknown1[36]; /* 08: unknown */ DWORD num_of_bbd_blocks;/* 2C: length of big datablocks */ DWORD root_startblock;/* 30: root storage first big block */ DWORD unknown2[2]; /* 34: unknown */ DWORD sbd_startblock; /* 3C: small block depot first big block */ DWORD unknown3[3]; /* 40: unknown */ DWORD bbd_list[109]; /* 4C: big data block list (up to end of sector)*/ }; struct storage_pps_entry { WCHAR pps_rawname[32];/* 00: \0 terminated widechar name */ WORD pps_sizeofname; /* 40: namelength in bytes */ BYTE pps_type; /* 42: flags, 1 storage/dir, 2 stream, 5 root */ BYTE pps_unknown0; /* 43: unknown */ DWORD pps_prev; /* 44: previous pps */ DWORD pps_next; /* 48: next pps */ DWORD pps_dir; /* 4C: directory pps */ GUID pps_guid; /* 50: class ID */ DWORD pps_unknown1; /* 60: unknown */ FILETIME pps_ft1; /* 64: filetime1 */ FILETIME pps_ft2; /* 6C: filetime2 */ DWORD pps_sb; /* 74: data startblock */ DWORD pps_size; /* 78: datalength. (<0x1000)?small:big blocks*/ DWORD pps_unknown2; /* 7C: unknown */ }; #define STORAGE_CHAINENTRY_FAT 0xfffffffd #define STORAGE_CHAINENTRY_ENDOFCHAIN 0xfffffffe #define STORAGE_CHAINENTRY_FREE 0xffffffff static const BYTE STORAGE_magic[8] ={0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1}; #define BIGSIZE 512 #define SMALLSIZE 64 #define SMALLBLOCKS_PER_BIGBLOCK (BIGSIZE/SMALLSIZE) #define READ_HEADER(str) STORAGE_get_big_block(str,-1,(LPBYTE)&sth);assert(!memcmp(STORAGE_magic,sth.magic,sizeof(STORAGE_magic))); static IStorage16Vtbl stvt16; static const IStorage16Vtbl *segstvt16 = NULL; static IStream16Vtbl strvt16; static const IStream16Vtbl *segstrvt16 = NULL; /*ULONG WINAPI IStorage16_AddRef(LPSTORAGE16 this);*/ static void _create_istorage16(LPSTORAGE16 *stg); static void _create_istream16(LPSTREAM16 *str); #define IMPLEMENTED 1 /* The following is taken from the CorVu implementation of docfiles, and * documents things about the file format that are not implemented here, and * not documented by the LAOLA project. The CorVu implementation was posted * to wine-devel in February 2004, and released under the LGPL at the same * time. Because that implementation is in C++, it's not directly usable in * Wine, but does have documentation value. * * * #define DF_EXT_VTOC -4 * #define DF_VTOC_VTOC -3 * #define DF_VTOC_EOF -2 * #define DF_VTOC_FREE -1 * #define DF_NAMELEN 0x20 // Maximum entry name length - 31 characters plus * // a NUL terminator * * #define DF_FT_STORAGE 1 * #define DF_FT_STREAM 2 * #define DF_FT_LOCKBYTES 3 // Not used -- How the bloody hell did I manage * #define DF_FT_PROPERTY 4 // Not Used -- to figure these two out? * #define DF_FT_ROOT 5 * * #define DF_BLOCK_SIZE 0x200 * #define DF_VTOC_SIZE 0x80 * #define DF_DE_PER_BLOCK 4 * #define DF_STREAM_BLOCK_SIZE 0x40 * * A DocFile is divided into blocks of 512 bytes. * The first block contains the header. * * The file header contains The first 109 entries in the VTOC of VTOCs. * * Each block pointed to by a VTOC of VTOCs contains a VTOC, which * includes block chains - just like FAT. This is a somewhat poor * design for the following reasons: * * 1. FAT was a poor file system design to begin with, and * has long been known to be horrendously inefficient * for day to day operations. * * 2. The problem is compounded here, since the file * level streams are generally *not* read sequentially. * This means that a significant percentage of reads * require seeking from the start of the chain. * * Data chains also contain an internal VTOC. The block size for * the standard VTOC is 512. The block size for the internal VTOC * is 64. * * Now, the 109 blocks in the VTOC of VTOCs allows for files of * up to around 7MB. So what do you think happens if that's * exceeded? Well, there's an entry in the header block which * points to the first block used as additional storage for * the VTOC of VTOCs. * * Now we can get up to around 15MB. Now, guess how the file * format adds in another block to the VTOC of VTOCs. Come on, * it's no big surprise. That's right - the last entry in each * block extending the VTOC of VTOCs is, you guessed it, the * block number of the next block containing an extension to * the VTOC of VTOCs. The VTOC of VTOCs is chained!!!! * * So, to review: * * 1. If you are using a FAT file system, the location of * your file's blocks is stored in chains. * * 2. At the abstract level, the file contains a VTOC of VTOCs, * which is stored in the most inefficient possible format for * random access - a chain (AKA list). * * 3. The VTOC of VTOCs contains descriptions of three file level * streams: * * a. The Directory stream * b. The Data stream * c. The Data VTOC stream * * These are, of course, represented as chains. * * 4. The Data VTOC contains data describing the chains of blocks * within the Data stream. * * That's right - we have a total of four levels of block chains! * * Now, is that complicated enough for you? No? OK, there's another * complication. If an individual stream (ie. an IStream) reaches * 4096 bytes in size, it gets moved from the Data Stream to * a new file level stream. Now, if the stream then gets truncated * back to less than 4096 bytes, it returns to the data stream. * * The effect of using this format can be seen very easily. Pick * an arbitrary application with a grid data representation that * can export to both Lotus 123 and Excel 5 or higher. Export * a large file to Lotus 123 and time it. Export the same thing * to Excel 5 and time that. The difference is the inefficiency * of the Microsoft DocFile format. * * * #define TOTAL_SIMPLE_VTOCS 109 * * struct DocFile_Header * { * df_byte iMagic1; // 0xd0 * df_byte iMagic2; // 0xcf * df_byte iMagic3; // 0x11 * df_byte iMagic4; // 0xe0 - Spells D0CF11E0, or DocFile * df_byte iMagic5; // 161 (igi upside down) * df_byte iMagic6; // 177 (lli upside down - see below * df_byte iMagic7; // 26 (gz upside down) * df_byte iMagic8; // 225 (szz upside down) - see below * df_int4 aiUnknown1[4]; * df_int4 iVersion; // DocFile Version - 0x03003E * df_int4 aiUnknown2[4]; * df_int4 nVTOCs; // Number of VTOCs * df_int4 iFirstDirBlock; // First Directory Block * df_int4 aiUnknown3[2]; * df_int4 iFirstDataVTOC; // First data VTOC block * df_int4 iHasData; // 1 if there is data in the file - yes, this is important * df_int4 iExtendedVTOC; // Extended VTOC location * df_int4 iExtendedVTOCSize; // Size of extended VTOC (+1?) * df_int4 aiVTOCofVTOCs[TOTAL_SIMPLE_VTOCS]; * }; * * struct DocFile_VTOC * { * df_int4 aiBlocks[DF_VTOC_SIZE]; * }; * * * The meaning of the magic numbers * * 0xd0cf11e0 is DocFile with a zero on the end (sort of) * * If you key 177161 into a calculator, then turn the calculator * upside down, you get igilli, which may be a reference to * somebody's name, or to the Hebrew word for "angel". * * If you key 26225 into a calculator, then turn it upside down, you * get szzgz. Microsoft has a tradition of creating nonsense words * using the letters s, g, z and y. We think szzgz may be one of the * Microsoft placeholder variables, along the lines of foo, bar and baz. * Alternatively, it could be 22526, which would be gzszz. * * * struct DocFile_DirEnt * { * df_char achEntryName[DF_NAMELEN]; // Entry Name * df_int2 iNameLen; // Name length in bytes, including NUL terminator * df_byte iFileType; // Entry type * df_byte iColour; // 1 = Black, 0 = Red * df_int4 iLeftSibling; // Next Left Sibling Entry - See below * df_int4 iRightSibling; // Next Right Sibling Entry * df_int4 iFirstChild; // First Child Entry * df_byte achClassID[16]; // Class ID * df_int4 iStateBits; // [GS]etStateBits value * df_int4 iCreatedLow; // Low DWORD of creation time * df_int4 iCreatedHigh; // High DWORD of creation time * df_int4 iModifiedLow; // Low DWORD of modification time * df_int4 iModifiedHigh; // High DWORD of modification time * df_int4 iVTOCPosition; // VTOC Position * df_int4 iFileSize; // Size of the stream * df_int4 iZero; // We think this is part of the 64 bit stream size - must be 0 * }; * * Siblings * ======== * * Siblings are stored in an obscure but incredibly elegant * data structure called a red-black tree. This is generally * defined as a 2-3-4 tree stored in a binary tree. * * A red-black tree can always be balanced very easily. The rules * for a red-black tree are as follows: * * 1. The root node is always black. * 2. The parent of a red node is always black. * * There is a Java demo of red-black trees at: * * http://langevin.usc.edu/BST/RedBlackTree-Example.html * * This demo is an excellent tool for learning how red-black * trees work, without having to go through the process of * learning how they were derived. * * Within the tree, elements are ordered by the length of the * name and within that, ASCII order by name. This causes the * apparently bizarre reordering you see when you use dfview. * * This is a somewhat bizarre choice. It suggests that the * designer of the DocFile format was trying to optimise * searching through the directory entries. However searching * through directory entries is a relatively rare operation. * Reading and seeking within a stream are much more common * operations, especially within the file level streams, yet * these use the horrendously inefficient FAT chains. * * This suggests that the designer was probably somebody * fresh out of university, who had some basic knowledge of * basic data structures, but little knowledge of anything * more practical. It is bizarre to attempt to optimise * directory searches while not using a more efficient file * block locating system than FAT (seedling/sapling/tree * would result in a massive improvement - in fact we have * an alternative to docfiles that we use internally that * uses seedling/sapling/tree and *is* far more efficient). * * It is worth noting that the MS implementation of red-black * trees is incorrect (I can tell you're surprised) and * actually causes more operations to occur than are really * needed. Fortunately the fact that our implementation is * correct will not cause any problems - the MS implementation * still appears to cause the tree to satisfy the rules, albeit * a sequence of the same insertions in the different * implementations may result in a different, and possibly * deeper (but never shallower) tree. */ typedef struct { HANDLE hf; SEGPTR lockbytes; } stream_access16; /* --- IStorage16 implementation struct */ typedef struct { IStorage16 IStorage16_iface; LONG ref; /* IStorage16 fields */ SEGPTR thisptr; /* pointer to this struct as segmented */ struct storage_pps_entry stde; int ppsent; stream_access16 str; } IStorage16Impl; /****************************************************************************** * STORAGE_get_big_block [Internal] * * Reading OLE compound storage */ static BOOL STORAGE_get_big_block(stream_access16 *str,int n,BYTE *block) { DWORD result; assert(n>=-1); if (str->hf) { if ((SetFilePointer( str->hf, (n+1)*BIGSIZE, NULL, SEEK_SET ) == INVALID_SET_FILE_POINTER) && GetLastError()) { WARN("(%p,%d,%p), seek failed (%d)\n",str->hf, n, block, GetLastError()); return FALSE; } if (!ReadFile( str->hf, block, BIGSIZE, &result, NULL ) || result != BIGSIZE) { WARN("(hf=%p, block size %d): read didn't read (%d)\n",str->hf,n,GetLastError()); return FALSE; } } else { DWORD args[6]; HRESULT hres; HANDLE16 hsig; args[0] = (DWORD)str->lockbytes; /* iface */ args[1] = (n+1)*BIGSIZE; args[2] = 0; /* ULARGE_INTEGER offset */ args[3] = WOWGlobalAllocLock16( 0, BIGSIZE, &hsig ); /* sig */ args[4] = BIGSIZE; args[5] = 0; if (!WOWCallback16Ex( (DWORD)((const ILockBytes16Vtbl*)MapSL( (SEGPTR)((LPLOCKBYTES16)MapSL(str->lockbytes))->lpVtbl) )->ReadAt, WCB16_PASCAL, 6*sizeof(DWORD), (LPVOID)args, (LPDWORD)&hres )) { ERR("CallTo16 ILockBytes16::ReadAt() failed, hres %x\n",hres); return FALSE; } memcpy(block, MapSL(args[3]), BIGSIZE); WOWGlobalUnlockFree16(args[3]); } return TRUE; } static BOOL _ilockbytes16_writeat(SEGPTR lockbytes, DWORD offset, DWORD length, void *buffer) { DWORD args[6]; HRESULT hres; args[0] = (DWORD)lockbytes; /* iface */ args[1] = offset; args[2] = 0; /* ULARGE_INTEGER offset */ args[3] = (DWORD)MapLS( buffer ); args[4] = length; args[5] = 0; /* THIS_ ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten); */ if (!WOWCallback16Ex( (DWORD)((const ILockBytes16Vtbl*)MapSL( (SEGPTR)((LPLOCKBYTES16)MapSL(lockbytes))->lpVtbl) )->WriteAt, WCB16_PASCAL, 6*sizeof(DWORD), (LPVOID)args, (LPDWORD)&hres )) { ERR("CallTo16 ILockBytes16::WriteAt() failed, hres %x\n",hres); return FALSE; } UnMapLS(args[3]); return TRUE; } /****************************************************************************** * STORAGE_put_big_block [INTERNAL] */ static BOOL STORAGE_put_big_block(stream_access16 *str,int n,BYTE *block) { DWORD result; assert(n>=-1); if (str->hf) { if ((SetFilePointer( str->hf, (n+1)*BIGSIZE, NULL, SEEK_SET ) == INVALID_SET_FILE_POINTER) && GetLastError()) { WARN("seek failed (%d)\n",GetLastError()); return FALSE; } if (!WriteFile( str->hf, block, BIGSIZE, &result, NULL ) || result != BIGSIZE) { WARN(" write failed (%d)\n",GetLastError()); return FALSE; } return TRUE; } else { _ilockbytes16_writeat(str->lockbytes, (n+1)*BIGSIZE, BIGSIZE, block); return TRUE; } } /****************************************************************************** * STORAGE_get_next_big_blocknr [INTERNAL] */ static int STORAGE_get_next_big_blocknr(stream_access16 *str,int blocknr) { INT bbs[BIGSIZE/sizeof(INT)]; struct storage_header sth; READ_HEADER(str); assert(blocknr>>7>7]==0xffffffff) return -5; if (!STORAGE_get_big_block(str,sth.bbd_list[blocknr>>7],(LPBYTE)bbs)) return -5; assert(bbs[blocknr&0x7f]!=STORAGE_CHAINENTRY_FREE); return bbs[blocknr&0x7f]; } /****************************************************************************** * STORAGE_get_nth_next_big_blocknr [INTERNAL] */ static int STORAGE_get_nth_next_big_blocknr(stream_access16 *str,int blocknr,int nr) { INT bbs[BIGSIZE/sizeof(INT)]; int lastblock = -1; struct storage_header sth; TRACE("(blocknr=%d, nr=%d)\n", blocknr, nr); READ_HEADER(str); assert(blocknr>=0); while (nr--) { assert((blocknr>>7)>7]!=0xffffffff); /* simple caching... */ if (lastblock!=sth.bbd_list[blocknr>>7]) { BOOL ret = STORAGE_get_big_block(str,sth.bbd_list[blocknr>>7],(LPBYTE)bbs); assert(ret); lastblock = sth.bbd_list[blocknr>>7]; } blocknr = bbs[blocknr&0x7f]; } return blocknr; } /****************************************************************************** * STORAGE_get_root_pps_entry [Internal] */ static BOOL STORAGE_get_root_pps_entry(stream_access16* str,struct storage_pps_entry *pstde) { int blocknr,i; BYTE block[BIGSIZE]; struct storage_pps_entry *stde=(struct storage_pps_entry*)block; struct storage_header sth; READ_HEADER(str); blocknr = sth.root_startblock; TRACE("startblock is %d\n", blocknr); while (blocknr>=0) { BOOL ret = STORAGE_get_big_block(str,blocknr,block); assert(ret); for (i=0;i<4;i++) { if (!stde[i].pps_sizeofname) continue; if (stde[i].pps_type==5) { *pstde=stde[i]; return TRUE; } } blocknr=STORAGE_get_next_big_blocknr(str,blocknr); TRACE("next block is %d\n", blocknr); } return FALSE; } /****************************************************************************** * STORAGE_get_small_block [INTERNAL] */ static BOOL STORAGE_get_small_block(stream_access16 *str,int blocknr,BYTE *sblock) { BYTE block[BIGSIZE]; int bigblocknr; struct storage_pps_entry root; BOOL ret; TRACE("(blocknr=%d)\n", blocknr); assert(blocknr>=0); ret = STORAGE_get_root_pps_entry(str,&root); assert(ret); bigblocknr = STORAGE_get_nth_next_big_blocknr(str,root.pps_sb,blocknr/SMALLBLOCKS_PER_BIGBLOCK); assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); memcpy(sblock,((LPBYTE)block)+SMALLSIZE*(blocknr&(SMALLBLOCKS_PER_BIGBLOCK-1)),SMALLSIZE); return TRUE; } /****************************************************************************** * STORAGE_put_small_block [INTERNAL] */ static BOOL STORAGE_put_small_block(stream_access16 *str,int blocknr,const BYTE *sblock) { BYTE block[BIGSIZE]; int bigblocknr; struct storage_pps_entry root; BOOL ret; assert(blocknr>=0); TRACE("(blocknr=%d)\n", blocknr); ret = STORAGE_get_root_pps_entry(str,&root); assert(ret); bigblocknr = STORAGE_get_nth_next_big_blocknr(str,root.pps_sb,blocknr/SMALLBLOCKS_PER_BIGBLOCK); assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); memcpy(((LPBYTE)block)+SMALLSIZE*(blocknr&(SMALLBLOCKS_PER_BIGBLOCK-1)),sblock,SMALLSIZE); ret = STORAGE_put_big_block(str,bigblocknr,block); assert(ret); return TRUE; } /****************************************************************************** * STORAGE_get_next_small_blocknr [INTERNAL] */ static int STORAGE_get_next_small_blocknr(stream_access16 *str,int blocknr) { BYTE block[BIGSIZE]; LPINT sbd = (LPINT)block; int bigblocknr; struct storage_header sth; BOOL ret; TRACE("(blocknr=%d)\n", blocknr); READ_HEADER(str); assert(blocknr>=0); bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128); assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); assert(sbd[blocknr & 127]!=STORAGE_CHAINENTRY_FREE); return sbd[blocknr & (128-1)]; } /****************************************************************************** * STORAGE_get_nth_next_small_blocknr [INTERNAL] */ static int STORAGE_get_nth_next_small_blocknr(stream_access16*str,int blocknr,int nr) { int lastblocknr=-129; BYTE block[BIGSIZE]; LPINT sbd = (LPINT)block; struct storage_header sth; BOOL ret; TRACE("(blocknr=%d, nr=%d)\n", blocknr, nr); READ_HEADER(str); assert(blocknr>=0); while ((nr--) && (blocknr>=0)) { if (lastblocknr/128!=blocknr/128) { int bigblocknr; bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128); assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); lastblocknr = blocknr; } assert(lastblocknr>=0); lastblocknr=blocknr; blocknr=sbd[blocknr & (128-1)]; assert(blocknr!=STORAGE_CHAINENTRY_FREE); } return blocknr; } /****************************************************************************** * STORAGE_get_pps_entry [INTERNAL] */ static int STORAGE_get_pps_entry(stream_access16*str,int n,struct storage_pps_entry *pstde) { int blocknr; BYTE block[BIGSIZE]; struct storage_pps_entry *stde = (struct storage_pps_entry*)(((LPBYTE)block)+128*(n&3)); struct storage_header sth; BOOL ret; TRACE("(n=%d)\n", n); READ_HEADER(str); /* we have 4 pps entries per big block */ blocknr = STORAGE_get_nth_next_big_blocknr(str,sth.root_startblock,n/4); assert(blocknr>=0); ret = STORAGE_get_big_block(str,blocknr,block); assert(ret); *pstde=*stde; return 1; } /****************************************************************************** * STORAGE_put_pps_entry [Internal] */ static int STORAGE_put_pps_entry(stream_access16*str,int n,const struct storage_pps_entry *pstde) { int blocknr; BYTE block[BIGSIZE]; struct storage_pps_entry *stde = (struct storage_pps_entry*)(((LPBYTE)block)+128*(n&3)); struct storage_header sth; BOOL ret; TRACE("(n=%d)\n", n); READ_HEADER(str); /* we have 4 pps entries per big block */ blocknr = STORAGE_get_nth_next_big_blocknr(str,sth.root_startblock,n/4); assert(blocknr>=0); ret = STORAGE_get_big_block(str,blocknr,block); assert(ret); *stde=*pstde; ret = STORAGE_put_big_block(str,blocknr,block); assert(ret); return 1; } /****************************************************************************** * STORAGE_look_for_named_pps [Internal] */ static int STORAGE_look_for_named_pps(stream_access16*str,int n,LPOLESTR name) { struct storage_pps_entry stde; int ret; TRACE("(n=%d,name=%s)\n", n, debugstr_w(name)); if (n==-1) return -1; if (1!=STORAGE_get_pps_entry(str,n,&stde)) return -1; if (!lstrcmpW(name,stde.pps_rawname)) return n; if (stde.pps_prev != -1) { ret=STORAGE_look_for_named_pps(str,stde.pps_prev,name); if (ret!=-1) return ret; } if (stde.pps_next != -1) { ret=STORAGE_look_for_named_pps(str,stde.pps_next,name); if (ret!=-1) return ret; } return -1; } /****************************************************************************** * STORAGE_dump_pps_entry [Internal] * * This function is there to simplify debugging. It is otherwise unused. */ void STORAGE_dump_pps_entry(struct storage_pps_entry *stde) { char name[33]; WideCharToMultiByte( CP_ACP, 0, stde->pps_rawname, -1, name, sizeof(name), NULL, NULL); if (!stde->pps_sizeofname) return; TRACE("name: %s\n",name); TRACE("type: %d\n",stde->pps_type); TRACE("prev pps: %d\n",stde->pps_prev); TRACE("next pps: %d\n",stde->pps_next); TRACE("dir pps: %d\n",stde->pps_dir); TRACE("guid: %s\n",debugstr_guid(&(stde->pps_guid))); if (stde->pps_type !=2) { time_t t; DWORD dw; RtlTimeToSecondsSince1970((LARGE_INTEGER *)&(stde->pps_ft1),&dw); t = dw; TRACE("ts1: %s\n",ctime(&t)); RtlTimeToSecondsSince1970((LARGE_INTEGER *)&(stde->pps_ft2),&dw); t = dw; TRACE("ts2: %s\n",ctime(&t)); } TRACE("startblock: %d\n",stde->pps_sb); TRACE("size: %d\n",stde->pps_size); } /****************************************************************************** * STORAGE_init_storage [INTERNAL] */ static BOOL STORAGE_init_storage(stream_access16 *str) { BYTE block[BIGSIZE]; LPDWORD bbs; struct storage_header *sth; struct storage_pps_entry *stde; DWORD result; if (str->hf) SetFilePointer( str->hf, 0, NULL, SEEK_SET ); /* block -1 is the storage header */ sth = (struct storage_header*)block; memcpy(sth->magic,STORAGE_magic,8); memset(sth->unknown1,0,sizeof(sth->unknown1)); memset(sth->unknown2,0,sizeof(sth->unknown2)); memset(sth->unknown3,0,sizeof(sth->unknown3)); sth->num_of_bbd_blocks = 1; sth->root_startblock = 1; sth->sbd_startblock = 0xffffffff; memset(sth->bbd_list,0xff,sizeof(sth->bbd_list)); sth->bbd_list[0] = 0; if (str->hf) { if (!WriteFile( str->hf, block, BIGSIZE, &result, NULL ) || result != BIGSIZE) return FALSE; } else { if (!_ilockbytes16_writeat(str->lockbytes, 0, BIGSIZE, block)) return FALSE; } /* block 0 is the big block directory */ bbs=(LPDWORD)block; memset(block,0xff,sizeof(block)); /* mark all blocks as free */ bbs[0]=STORAGE_CHAINENTRY_ENDOFCHAIN; /* for this block */ bbs[1]=STORAGE_CHAINENTRY_ENDOFCHAIN; /* for directory entry */ if (str->hf) { if (!WriteFile( str->hf, block, BIGSIZE, &result, NULL ) || result != BIGSIZE) return FALSE; } else { if (!_ilockbytes16_writeat(str->lockbytes, BIGSIZE, BIGSIZE, block)) return FALSE; } /* block 1 is the root directory entry */ memset(block,0x00,sizeof(block)); stde = (struct storage_pps_entry*)block; MultiByteToWideChar(CP_ACP, 0, "RootEntry", -1, stde->pps_rawname, ARRAY_SIZE(stde->pps_rawname)); stde->pps_sizeofname = (strlenW(stde->pps_rawname)+1) * sizeof(WCHAR); stde->pps_type = 5; stde->pps_dir = -1; stde->pps_next = -1; stde->pps_prev = -1; stde->pps_sb = 0xffffffff; stde->pps_size = 0; if (str->hf) { return (WriteFile( str->hf, block, BIGSIZE, &result, NULL ) && result == BIGSIZE); } else { return _ilockbytes16_writeat(str->lockbytes, BIGSIZE, BIGSIZE, block); } } /****************************************************************************** * STORAGE_set_big_chain [Internal] */ static BOOL STORAGE_set_big_chain(stream_access16*str,int blocknr,INT type) { BYTE block[BIGSIZE]; LPINT bbd = (LPINT)block; int nextblocknr,bigblocknr; struct storage_header sth; BOOL ret; READ_HEADER(str); assert(blocknr!=type); while (blocknr>=0) { bigblocknr = sth.bbd_list[blocknr/128]; assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); nextblocknr = bbd[blocknr&(128-1)]; bbd[blocknr&(128-1)] = type; if (type>=0) return TRUE; ret = STORAGE_put_big_block(str,bigblocknr,block); assert(ret); type = STORAGE_CHAINENTRY_FREE; blocknr = nextblocknr; } return TRUE; } /****************************************************************************** * STORAGE_set_small_chain [Internal] */ static BOOL STORAGE_set_small_chain(stream_access16*str,int blocknr,INT type) { BYTE block[BIGSIZE]; LPINT sbd = (LPINT)block; int lastblocknr,nextsmallblocknr,bigblocknr; struct storage_header sth; BOOL ret; READ_HEADER(str); assert(blocknr!=type); lastblocknr=-129;bigblocknr=-2; while (blocknr>=0) { /* cache block ... */ if (lastblocknr/128!=blocknr/128) { bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128); assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); } lastblocknr = blocknr; nextsmallblocknr = sbd[blocknr&(128-1)]; sbd[blocknr&(128-1)] = type; ret = STORAGE_put_big_block(str,bigblocknr,block); assert(ret); if (type>=0) return TRUE; type = STORAGE_CHAINENTRY_FREE; blocknr = nextsmallblocknr; } return TRUE; } /****************************************************************************** * STORAGE_get_free_big_blocknr [Internal] */ static int STORAGE_get_free_big_blocknr(stream_access16 *str) { BYTE block[BIGSIZE]; LPINT sbd = (LPINT)block; int lastbigblocknr,i,bigblocknr; unsigned int curblock; struct storage_header sth; BOOL ret; READ_HEADER(str); curblock = 0; lastbigblocknr = -1; bigblocknr = sth.bbd_list[curblock]; while (curblock=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); for (i=0;i<128;i++) if (sbd[i]==STORAGE_CHAINENTRY_FREE) { sbd[i] = STORAGE_CHAINENTRY_ENDOFCHAIN; ret = STORAGE_put_big_block(str,bigblocknr,block); assert(ret); memset(block,0x42,sizeof(block)); ret = STORAGE_put_big_block(str,i+curblock*128,block); assert(ret); return i+curblock*128; } lastbigblocknr = bigblocknr; bigblocknr = sth.bbd_list[++curblock]; } bigblocknr = curblock*128; /* since we have marked all blocks from 0 up to curblock*128-1 * the next free one is curblock*128, where we happily put our * next large block depot. */ memset(block,0xff,sizeof(block)); /* mark the block allocated and returned by this function */ sbd[1] = STORAGE_CHAINENTRY_ENDOFCHAIN; ret = STORAGE_put_big_block(str,bigblocknr,block); assert(ret); /* if we had a bbd block already (most likely) we need * to link the new one into the chain */ if (lastbigblocknr!=-1) { ret = STORAGE_set_big_chain(str,lastbigblocknr,bigblocknr); assert(ret); } sth.bbd_list[curblock]=bigblocknr; sth.num_of_bbd_blocks++; assert(sth.num_of_bbd_blocks==curblock+1); ret = STORAGE_put_big_block(str,-1,(LPBYTE)&sth); assert(ret); /* Set the end of the chain for the bigblockdepots */ ret = STORAGE_set_big_chain(str,bigblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN); assert(ret); /* add 1, for the first entry is used for the additional big block * depot. (means we already used bigblocknr) */ memset(block,0x42,sizeof(block)); /* allocate this block (filled with 0x42) */ ret = STORAGE_put_big_block(str,bigblocknr+1,block); assert(ret); return bigblocknr+1; } /****************************************************************************** * STORAGE_get_free_small_blocknr [Internal] */ static int STORAGE_get_free_small_blocknr(stream_access16 *str) { BYTE block[BIGSIZE]; LPINT sbd = (LPINT)block; int lastbigblocknr,newblocknr,i,curblock,bigblocknr; struct storage_pps_entry root; struct storage_header sth; READ_HEADER(str); bigblocknr = sth.sbd_startblock; curblock = 0; lastbigblocknr = -1; newblocknr = -1; while (bigblocknr>=0) { if (!STORAGE_get_big_block(str,bigblocknr,block)) return -1; for (i=0;i<128;i++) if (sbd[i]==STORAGE_CHAINENTRY_FREE) { sbd[i]=STORAGE_CHAINENTRY_ENDOFCHAIN; newblocknr = i+curblock*128; break; } if (i!=128) break; lastbigblocknr = bigblocknr; bigblocknr = STORAGE_get_next_big_blocknr(str,bigblocknr); curblock++; } if (newblocknr==-1) { bigblocknr = STORAGE_get_free_big_blocknr(str); if (bigblocknr<0) return -1; READ_HEADER(str); memset(block,0xff,sizeof(block)); sbd[0]=STORAGE_CHAINENTRY_ENDOFCHAIN; if (!STORAGE_put_big_block(str,bigblocknr,block)) return -1; if (lastbigblocknr==-1) { sth.sbd_startblock = bigblocknr; if (!STORAGE_put_big_block(str,-1,(LPBYTE)&sth)) /* need to write it */ return -1; } else { if (!STORAGE_set_big_chain(str,lastbigblocknr,bigblocknr)) return -1; } if (!STORAGE_set_big_chain(str,bigblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) return -1; newblocknr = curblock*128; } /* allocate enough big blocks for storing the allocated small block */ if (!STORAGE_get_root_pps_entry(str,&root)) return -1; if (root.pps_sb==-1) lastbigblocknr = -1; else lastbigblocknr = STORAGE_get_nth_next_big_blocknr(str,root.pps_sb,(root.pps_size-1)/BIGSIZE); while (root.pps_size < (newblocknr*SMALLSIZE+SMALLSIZE-1)) { /* we need to allocate more stuff */ bigblocknr = STORAGE_get_free_big_blocknr(str); if (bigblocknr<0) return -1; READ_HEADER(str); if (root.pps_sb==-1) { root.pps_sb = bigblocknr; root.pps_size += BIGSIZE; } else { if (!STORAGE_set_big_chain(str,lastbigblocknr,bigblocknr)) return -1; root.pps_size += BIGSIZE; } lastbigblocknr = bigblocknr; } if (!STORAGE_set_big_chain(str,lastbigblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) return -1; if (!STORAGE_put_pps_entry(str,0,&root)) return -1; return newblocknr; } /****************************************************************************** * STORAGE_get_free_pps_entry [Internal] */ static int STORAGE_get_free_pps_entry(stream_access16*str) { int blocknr, i, curblock, lastblocknr=-1; BYTE block[BIGSIZE]; struct storage_pps_entry *stde = (struct storage_pps_entry*)block; struct storage_header sth; READ_HEADER(str); blocknr = sth.root_startblock; assert(blocknr>=0); curblock=0; while (blocknr>=0) { if (!STORAGE_get_big_block(str,blocknr,block)) return -1; for (i=0;i<4;i++) if (stde[i].pps_sizeofname==0) /* free */ return curblock*4+i; lastblocknr = blocknr; blocknr = STORAGE_get_next_big_blocknr(str,blocknr); curblock++; } assert(blocknr==STORAGE_CHAINENTRY_ENDOFCHAIN); blocknr = STORAGE_get_free_big_blocknr(str); /* sth invalidated */ if (blocknr<0) return -1; if (!STORAGE_set_big_chain(str,lastblocknr,blocknr)) return -1; if (!STORAGE_set_big_chain(str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) return -1; memset(block,0,sizeof(block)); STORAGE_put_big_block(str,blocknr,block); return curblock*4; } /* --- IStream16 implementation */ typedef struct { IStream16 IStream16_iface; LONG ref; /* IStream16 fields */ SEGPTR thisptr; /* pointer to this struct as segmented */ struct storage_pps_entry stde; int ppsent; ULARGE_INTEGER offset; stream_access16 str; } IStream16Impl; static inline IStream16Impl *impl_from_IStream16(IStream16 *iface) { return CONTAINING_RECORD(iface, IStream16Impl, IStream16_iface); } /****************************************************************************** * IStream16_QueryInterface [STORAGE.518] */ HRESULT CDECL IStream16_fnQueryInterface(IStream16 *iface, REFIID refiid, void **obj) { IStream16Impl *This = impl_from_IStream16(iface); TRACE_(relay)("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj); if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) { *obj = This; return 0; } return OLE_E_ENUM_NOMORE; } /****************************************************************************** * IStream16_AddRef [STORAGE.519] */ ULONG CDECL IStream16_fnAddRef(IStream16 *iface) { IStream16Impl *This = impl_from_IStream16(iface); return InterlockedIncrement(&This->ref); } static void _ilockbytes16_addref(SEGPTR lockbytes) { DWORD args[1]; HRESULT hres; args[0] = (DWORD)lockbytes; /* iface */ if (!WOWCallback16Ex( (DWORD)((const ILockBytes16Vtbl*)MapSL( (SEGPTR)((LPLOCKBYTES16)MapSL(lockbytes))->lpVtbl) )->AddRef, WCB16_PASCAL, 1*sizeof(DWORD), (LPVOID)args, (LPDWORD)&hres )) ERR("CallTo16 ILockBytes16::AddRef() failed, hres %x\n",hres); } static void _ilockbytes16_release(SEGPTR lockbytes) { DWORD args[1]; HRESULT hres; args[0] = (DWORD)lockbytes; /* iface */ if (!WOWCallback16Ex( (DWORD)((const ILockBytes16Vtbl*)MapSL( (SEGPTR)((LPLOCKBYTES16)MapSL(lockbytes))->lpVtbl) )->Release, WCB16_PASCAL, 1*sizeof(DWORD), (LPVOID)args, (LPDWORD)&hres )) ERR("CallTo16 ILockBytes16::Release() failed, hres %x\n",hres); } static void _ilockbytes16_flush(SEGPTR lockbytes) { DWORD args[1]; HRESULT hres; args[0] = (DWORD)lockbytes; /* iface */ if (!WOWCallback16Ex( (DWORD)((const ILockBytes16Vtbl*)MapSL( (SEGPTR)((LPLOCKBYTES16)MapSL(lockbytes))->lpVtbl) )->Flush, WCB16_PASCAL, 1*sizeof(DWORD), (LPVOID)args, (LPDWORD)&hres )) ERR("CallTo16 ILockBytes16::Flush() failed, hres %x\n",hres); } /****************************************************************************** * IStream16_Release [STORAGE.520] */ ULONG CDECL IStream16_fnRelease(IStream16 *iface) { IStream16Impl *This = impl_from_IStream16(iface); ULONG ref; if (This->str.hf) FlushFileBuffers(This->str.hf); else _ilockbytes16_flush(This->str.lockbytes); ref = InterlockedDecrement(&This->ref); if (ref) return ref; if (This->str.hf) CloseHandle(This->str.hf); else _ilockbytes16_release(This->str.lockbytes); UnMapLS( This->thisptr ); HeapFree( GetProcessHeap(), 0, This ); return 0; } /****************************************************************************** * IStream16_Seek [STORAGE.523] * * FIXME * Does not handle 64 bits */ HRESULT CDECL IStream16_fnSeek(IStream16 *iface, LARGE_INTEGER offset, DWORD whence, ULARGE_INTEGER *newpos) { IStream16Impl *This = impl_from_IStream16(iface); TRACE_(relay)("(%p)->([%d.%d],%d,%p)\n",This,offset.u.HighPart,offset.u.LowPart,whence,newpos); switch (whence) { case STREAM_SEEK_SET: This->offset.QuadPart = offset.QuadPart; break; case STREAM_SEEK_CUR: if ((offset.QuadPart < 0 && -offset.QuadPart > This->offset.QuadPart) || (offset.QuadPart > 0 && -offset.QuadPart <= This->offset.QuadPart)) return STG_E_INVALIDFUNCTION; This->offset.QuadPart += offset.QuadPart; break; case STREAM_SEEK_END: if (-offset.QuadPart > This->stde.pps_size) return STG_E_INVALIDFUNCTION; This->offset.QuadPart = This->stde.pps_size + offset.QuadPart; break; } if (This->offset.QuadPart>This->stde.pps_size) This->offset.QuadPart=This->stde.pps_size; if (newpos) *newpos = This->offset; return S_OK; } /****************************************************************************** * IStream16_Read [STORAGE.521] */ HRESULT CDECL IStream16_fnRead(IStream16 *iface, void *pv, ULONG cb, ULONG *pcbRead) { IStream16Impl *This = impl_from_IStream16(iface); BYTE block[BIGSIZE]; ULONG *bytesread=pcbRead,xxread; int blocknr; LPBYTE pbv = pv; TRACE_(relay)("(%p)->(%p,%d,%p)\n",This,pv,cb,pcbRead); if (!pcbRead) bytesread=&xxread; *bytesread = 0; if (cb>This->stde.pps_size-This->offset.u.LowPart) cb=This->stde.pps_size-This->offset.u.LowPart; if (This->stde.pps_size < 0x1000) { /* use small block reader */ blocknr = STORAGE_get_nth_next_small_blocknr(&This->str,This->stde.pps_sb,This->offset.u.LowPart/SMALLSIZE); while (cb) { unsigned int cc; if (!STORAGE_get_small_block(&This->str,blocknr,block)) { WARN("small block read failed!!!\n"); return E_FAIL; } cc = cb; if (cc>SMALLSIZE-(This->offset.u.LowPart&(SMALLSIZE-1))) cc=SMALLSIZE-(This->offset.u.LowPart&(SMALLSIZE-1)); memcpy(pbv,block+(This->offset.u.LowPart&(SMALLSIZE-1)),cc); This->offset.u.LowPart+=cc; pbv+=cc; *bytesread+=cc; cb-=cc; blocknr = STORAGE_get_next_small_blocknr(&This->str,blocknr); } } else { /* use big block reader */ blocknr = STORAGE_get_nth_next_big_blocknr(&This->str,This->stde.pps_sb,This->offset.u.LowPart/BIGSIZE); while (cb) { unsigned int cc; if (!STORAGE_get_big_block(&This->str,blocknr,block)) { WARN("big block read failed!!!\n"); return E_FAIL; } cc = cb; if (cc>BIGSIZE-(This->offset.u.LowPart&(BIGSIZE-1))) cc=BIGSIZE-(This->offset.u.LowPart&(BIGSIZE-1)); memcpy(pbv,block+(This->offset.u.LowPart&(BIGSIZE-1)),cc); This->offset.u.LowPart+=cc; pbv+=cc; *bytesread+=cc; cb-=cc; blocknr=STORAGE_get_next_big_blocknr(&This->str,blocknr); } } return S_OK; } /****************************************************************************** * IStream16_Write [STORAGE.522] */ HRESULT CDECL IStream16_fnWrite(IStream16 *iface, const void *pv, ULONG cb, ULONG *pcbWrite) { IStream16Impl *This = impl_from_IStream16(iface); BYTE block[BIGSIZE]; ULONG *byteswritten=pcbWrite,xxwritten; int oldsize,newsize,i,curoffset=0,lastblocknr,blocknr,cc; const BYTE* pbv = pv; if (!pcbWrite) byteswritten=&xxwritten; *byteswritten = 0; TRACE_(relay)("(%p)->(%p,%d,%p)\n",This,pv,cb,pcbWrite); /* do we need to junk some blocks? */ newsize = This->offset.u.LowPart+cb; oldsize = This->stde.pps_size; if (newsize < oldsize) { if (oldsize < 0x1000) { /* only small blocks */ blocknr=STORAGE_get_nth_next_small_blocknr(&This->str,This->stde.pps_sb,newsize/SMALLSIZE); assert(blocknr>=0); /* will set the rest of the chain to 'free' */ if (!STORAGE_set_small_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) return E_FAIL; } else { if (newsize >= 0x1000) { blocknr=STORAGE_get_nth_next_big_blocknr(&This->str,This->stde.pps_sb,newsize/BIGSIZE); assert(blocknr>=0); /* will set the rest of the chain to 'free' */ if (!STORAGE_set_big_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) return E_FAIL; } else { /* Migrate large blocks to small blocks * (we just migrate newsize bytes) */ LPBYTE curdata,data = HeapAlloc(GetProcessHeap(),0,newsize+BIGSIZE); HRESULT r = E_FAIL; cc = newsize; blocknr = This->stde.pps_sb; curdata = data; while (cc>0) { if (!STORAGE_get_big_block(&This->str,blocknr,curdata)) { HeapFree(GetProcessHeap(),0,data); return E_FAIL; } curdata += BIGSIZE; cc -= BIGSIZE; blocknr = STORAGE_get_next_big_blocknr(&This->str,blocknr); } /* frees complete chain for this stream */ if (!STORAGE_set_big_chain(&This->str,This->stde.pps_sb,STORAGE_CHAINENTRY_FREE)) goto err; curdata = data; blocknr = This->stde.pps_sb = STORAGE_get_free_small_blocknr(&This->str); if (blocknr<0) goto err; cc = newsize; while (cc>0) { if (!STORAGE_put_small_block(&This->str,blocknr,curdata)) goto err; cc -= SMALLSIZE; if (cc<=0) { if (!STORAGE_set_small_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) goto err; break; } else { int newblocknr = STORAGE_get_free_small_blocknr(&This->str); if (newblocknr<0) goto err; if (!STORAGE_set_small_chain(&This->str,blocknr,newblocknr)) goto err; blocknr = newblocknr; } curdata += SMALLSIZE; } r = S_OK; err: HeapFree(GetProcessHeap(),0,data); if(r != S_OK) return r; } } This->stde.pps_size = newsize; } if (newsize > oldsize) { if (oldsize >= 0x1000) { /* should return the block right before the 'endofchain' */ blocknr = STORAGE_get_nth_next_big_blocknr(&This->str,This->stde.pps_sb,This->stde.pps_size/BIGSIZE); assert(blocknr>=0); lastblocknr = blocknr; for (i=oldsize/BIGSIZE;istr); if (blocknr<0) return E_FAIL; if (!STORAGE_set_big_chain(&This->str,lastblocknr,blocknr)) return E_FAIL; lastblocknr = blocknr; } if (!STORAGE_set_big_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) return E_FAIL; } else { if (newsize < 0x1000) { /* find startblock */ if (!oldsize) This->stde.pps_sb = blocknr = STORAGE_get_free_small_blocknr(&This->str); else blocknr = STORAGE_get_nth_next_small_blocknr(&This->str,This->stde.pps_sb,This->stde.pps_size/SMALLSIZE); if (blocknr<0) return E_FAIL; /* allocate required new small blocks */ lastblocknr = blocknr; for (i=oldsize/SMALLSIZE;istr); if (blocknr<0) return E_FAIL; if (!STORAGE_set_small_chain(&This->str,lastblocknr,blocknr)) return E_FAIL; lastblocknr = blocknr; } /* and terminate the chain */ if (!STORAGE_set_small_chain(&This->str,lastblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) return E_FAIL; } else { if (!oldsize) { /* no single block allocated yet */ blocknr=STORAGE_get_free_big_blocknr(&This->str); if (blocknr<0) return E_FAIL; This->stde.pps_sb = blocknr; } else { /* Migrate small blocks to big blocks */ LPBYTE curdata,data = HeapAlloc(GetProcessHeap(),0,oldsize+BIGSIZE); HRESULT r = E_FAIL; cc = oldsize; blocknr = This->stde.pps_sb; curdata = data; /* slurp in */ while (cc>0) { if (!STORAGE_get_small_block(&This->str,blocknr,curdata)) goto err2; curdata += SMALLSIZE; cc -= SMALLSIZE; blocknr = STORAGE_get_next_small_blocknr(&This->str,blocknr); } /* free small block chain */ if (!STORAGE_set_small_chain(&This->str,This->stde.pps_sb,STORAGE_CHAINENTRY_FREE)) goto err2; curdata = data; blocknr = This->stde.pps_sb = STORAGE_get_free_big_blocknr(&This->str); if (blocknr<0) goto err2; /* put the data into the big blocks */ cc = This->stde.pps_size; while (cc>0) { if (!STORAGE_put_big_block(&This->str,blocknr,curdata)) goto err2; cc -= BIGSIZE; if (cc<=0) { if (!STORAGE_set_big_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) goto err2; break; } else { int newblocknr = STORAGE_get_free_big_blocknr(&This->str); if (newblocknr<0) goto err2; if (!STORAGE_set_big_chain(&This->str,blocknr,newblocknr)) goto err2; blocknr = newblocknr; } curdata += BIGSIZE; } r = S_OK; err2: HeapFree(GetProcessHeap(),0,data); if(r != S_OK) return r; } /* generate big blocks to fit the new data */ lastblocknr = blocknr; for (i=oldsize/BIGSIZE;istr); if (blocknr<0) return E_FAIL; if (!STORAGE_set_big_chain(&This->str,lastblocknr,blocknr)) return E_FAIL; lastblocknr = blocknr; } /* terminate chain */ if (!STORAGE_set_big_chain(&This->str,lastblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN)) return E_FAIL; } } This->stde.pps_size = newsize; } /* There are just some cases where we didn't modify it, we write it out * every time */ if (!STORAGE_put_pps_entry(&This->str,This->ppsent,&(This->stde))) return E_FAIL; /* finally the write pass */ if (This->stde.pps_size < 0x1000) { blocknr = STORAGE_get_nth_next_small_blocknr(&This->str,This->stde.pps_sb,This->offset.u.LowPart/SMALLSIZE); assert(blocknr>=0); while (cb>0) { /* we ensured that it is allocated above */ assert(blocknr>=0); /* Read old block every time, since we can have * overlapping data at START and END of the write */ if (!STORAGE_get_small_block(&This->str,blocknr,block)) return E_FAIL; cc = SMALLSIZE-(This->offset.u.LowPart&(SMALLSIZE-1)); if (cc>cb) cc=cb; memcpy( ((LPBYTE)block)+(This->offset.u.LowPart&(SMALLSIZE-1)), pbv+curoffset, cc ); if (!STORAGE_put_small_block(&This->str,blocknr,block)) return E_FAIL; cb -= cc; curoffset += cc; pbv += cc; This->offset.u.LowPart += cc; *byteswritten += cc; blocknr = STORAGE_get_next_small_blocknr(&This->str,blocknr); } } else { blocknr = STORAGE_get_nth_next_big_blocknr(&This->str,This->stde.pps_sb,This->offset.u.LowPart/BIGSIZE); assert(blocknr>=0); while (cb>0) { /* we ensured that it is allocated above, so it better is */ assert(blocknr>=0); /* read old block every time, since we can have * overlapping data at START and END of the write */ if (!STORAGE_get_big_block(&This->str,blocknr,block)) return E_FAIL; cc = BIGSIZE-(This->offset.u.LowPart&(BIGSIZE-1)); if (cc>cb) cc=cb; memcpy( ((LPBYTE)block)+(This->offset.u.LowPart&(BIGSIZE-1)), pbv+curoffset, cc ); if (!STORAGE_put_big_block(&This->str,blocknr,block)) return E_FAIL; cb -= cc; curoffset += cc; pbv += cc; This->offset.u.LowPart += cc; *byteswritten += cc; blocknr = STORAGE_get_next_big_blocknr(&This->str,blocknr); } } return S_OK; } /****************************************************************************** * _create_istream16 [Internal] */ static void _create_istream16(LPSTREAM16 *str) { IStream16Impl* lpst; if (!strvt16.QueryInterface) { HMODULE16 wp = GetModuleHandle16("STORAGE"); if (wp>=32) { /* FIXME: what is This GetProcAddress16. Should the name be IStream16_QueryInterface of IStream16_fnQueryInterface */ #define VTENT(xfn) strvt16.xfn = (void*)GetProcAddress16(wp,"IStream16_"#xfn);assert(strvt16.xfn) VTENT(QueryInterface); VTENT(AddRef); VTENT(Release); VTENT(Read); VTENT(Write); VTENT(Seek); VTENT(SetSize); VTENT(CopyTo); VTENT(Commit); VTENT(Revert); VTENT(LockRegion); VTENT(UnlockRegion); VTENT(Stat); VTENT(Clone); #undef VTENT segstrvt16 = (const IStream16Vtbl*)MapLS( &strvt16 ); } else { #define VTENT(xfn) strvt16.xfn = IStream16_fn##xfn; VTENT(QueryInterface); VTENT(AddRef); VTENT(Release); VTENT(Read); VTENT(Write); VTENT(Seek); /* VTENT(CopyTo); VTENT(Commit); VTENT(SetSize); VTENT(Revert); VTENT(LockRegion); VTENT(UnlockRegion); VTENT(Stat); VTENT(Clone); */ #undef VTENT segstrvt16 = &strvt16; } } lpst = HeapAlloc( GetProcessHeap(), 0, sizeof(*lpst) ); lpst->IStream16_iface.lpVtbl = segstrvt16; lpst->ref = 1; lpst->thisptr = MapLS( lpst ); lpst->str.hf = NULL; lpst->str.lockbytes = 0; *str = (void*)lpst->thisptr; } static inline IStorage16Impl *impl_from_IStorage16(IStorage16 *iface) { return CONTAINING_RECORD(iface, IStorage16Impl, IStorage16_iface); } /****************************************************************************** * IStorage16_QueryInterface [STORAGE.500] */ HRESULT CDECL IStorage16_fnQueryInterface(IStorage16 *iface, REFIID refiid, void **obj) { IStorage16Impl *This = impl_from_IStorage16(iface); TRACE_(relay)("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj); if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) { *obj = This; return 0; } return OLE_E_ENUM_NOMORE; } /****************************************************************************** * IStorage16_AddRef [STORAGE.501] */ ULONG CDECL IStorage16_fnAddRef(IStorage16 *iface) { IStorage16Impl *This = impl_from_IStorage16(iface); return InterlockedIncrement(&This->ref); } /****************************************************************************** * IStorage16_Release [STORAGE.502] */ ULONG CDECL IStorage16_fnRelease(IStorage16 *iface) { IStorage16Impl *This = impl_from_IStorage16(iface); ULONG ref; ref = InterlockedDecrement(&This->ref); if (!ref) { UnMapLS( This->thisptr ); HeapFree( GetProcessHeap(), 0, This ); } return ref; } /****************************************************************************** * IStorage16_Stat [STORAGE.517] */ HRESULT CDECL IStorage16_fnStat(IStorage16 *iface, STATSTG16 *pstatstg, DWORD grfStatFlag) { IStorage16Impl *This = impl_from_IStorage16(iface); DWORD len = WideCharToMultiByte( CP_ACP, 0, This->stde.pps_rawname, -1, NULL, 0, NULL, NULL ); LPSTR nameA = HeapAlloc( GetProcessHeap(), 0, len ); TRACE("(%p)->(%p,0x%08x)\n", This,pstatstg,grfStatFlag ); WideCharToMultiByte( CP_ACP, 0, This->stde.pps_rawname, -1, nameA, len, NULL, NULL ); pstatstg->pwcsName=(LPOLESTR16)MapLS( nameA ); pstatstg->type = This->stde.pps_type; pstatstg->cbSize.u.LowPart = This->stde.pps_size; pstatstg->mtime = This->stde.pps_ft1; /* FIXME */ /* why? */ pstatstg->atime = This->stde.pps_ft2; /* FIXME */ pstatstg->ctime = This->stde.pps_ft2; /* FIXME */ pstatstg->grfMode = 0; /* FIXME */ pstatstg->grfLocksSupported = 0; /* FIXME */ pstatstg->clsid = This->stde.pps_guid; pstatstg->grfStateBits = 0; /* FIXME */ pstatstg->reserved = 0; return S_OK; } /****************************************************************************** * IStorage16_Commit [STORAGE.509] */ HRESULT CDECL IStorage16_fnCommit(IStorage16 *iface, DWORD commitflags) { IStorage16Impl *This = impl_from_IStorage16(iface); FIXME("(%p)->(0x%08x),STUB!\n", This,commitflags ); return S_OK; } /****************************************************************************** * IStorage16_CopyTo [STORAGE.507] */ HRESULT CDECL IStorage16_fnCopyTo(IStorage16 *iface, DWORD ciidExclude, const IID *rgiidExclude, SNB16 SNB16Exclude, IStorage16 *pstgDest) { IStorage16Impl *This = impl_from_IStorage16(iface); FIXME("IStorage16(%p)->(0x%08x,%s,%p,%p),stub!\n", This,ciidExclude,debugstr_guid(rgiidExclude),SNB16Exclude,pstgDest ); return S_OK; } /****************************************************************************** * IStorage16_CreateStorage [STORAGE.505] */ HRESULT CDECL IStorage16_fnCreateStorage(IStorage16 *iface, LPCOLESTR16 pwcsName, DWORD grfMode, DWORD dwStgFormat, DWORD reserved2, IStorage16 **ppstg) { IStorage16Impl *This = impl_from_IStorage16(iface); IStorage16Impl* lpstg; int ppsent,x; struct storage_pps_entry stde; struct storage_header sth; BOOL ret; int nPPSEntries; READ_HEADER(&This->str); TRACE("(%p)->(%s,0x%08x,0x%08x,0x%08x,%p)\n", This,pwcsName,grfMode,dwStgFormat,reserved2,ppstg ); if (grfMode & STGM_TRANSACTED) FIXME("We do not support transacted Compound Storage. Using direct mode.\n"); _create_istorage16(ppstg); lpstg = MapSL((SEGPTR)*ppstg); if (This->str.hf) { DuplicateHandle( GetCurrentProcess(), This->str.hf, GetCurrentProcess(), &lpstg->str.hf, 0, TRUE, DUPLICATE_SAME_ACCESS ); } else { lpstg->str.lockbytes = This->str.lockbytes; _ilockbytes16_addref(This->str.lockbytes); } ppsent=STORAGE_get_free_pps_entry(&lpstg->str); if (ppsent<0) return E_FAIL; stde=This->stde; if (stde.pps_dir==-1) { stde.pps_dir = ppsent; x = This->ppsent; } else { FIXME(" use prev chain too ?\n"); x=stde.pps_dir; if (1!=STORAGE_get_pps_entry(&lpstg->str,x,&stde)) return E_FAIL; while (stde.pps_next!=-1) { x=stde.pps_next; if (1!=STORAGE_get_pps_entry(&lpstg->str,x,&stde)) return E_FAIL; } stde.pps_next = ppsent; } ret = STORAGE_put_pps_entry(&lpstg->str,x,&stde); assert(ret); nPPSEntries = STORAGE_get_pps_entry(&lpstg->str,ppsent,&(lpstg->stde)); assert(nPPSEntries == 1); MultiByteToWideChar(CP_ACP, 0, pwcsName, -1, lpstg->stde.pps_rawname, ARRAY_SIZE(lpstg->stde.pps_rawname)); lpstg->stde.pps_sizeofname = (strlenW(lpstg->stde.pps_rawname)+1)*sizeof(WCHAR); lpstg->stde.pps_next = -1; lpstg->stde.pps_prev = -1; lpstg->stde.pps_dir = -1; lpstg->stde.pps_sb = -1; lpstg->stde.pps_size = 0; lpstg->stde.pps_type = 1; lpstg->ppsent = ppsent; /* FIXME: timestamps? */ if (!STORAGE_put_pps_entry(&lpstg->str,ppsent,&(lpstg->stde))) return E_FAIL; return S_OK; } /****************************************************************************** * IStorage16_CreateStream [STORAGE.503] */ HRESULT CDECL IStorage16_fnCreateStream(IStorage16 *iface, LPCOLESTR16 pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream16 **ppstm) { IStorage16Impl *This = impl_from_IStorage16(iface); IStream16Impl* lpstr; int ppsent,x; struct storage_pps_entry stde; BOOL ret; int nPPSEntries; TRACE("(%p)->(%s,0x%08x,0x%08x,0x%08x,%p)\n", This,pwcsName,grfMode,reserved1,reserved2,ppstm ); if (grfMode & STGM_TRANSACTED) FIXME("We do not support transacted Compound Storage. Using direct mode.\n"); _create_istream16(ppstm); lpstr = MapSL((SEGPTR)*ppstm); if (This->str.hf) { DuplicateHandle( GetCurrentProcess(), This->str.hf, GetCurrentProcess(), &lpstr->str.hf, 0, TRUE, DUPLICATE_SAME_ACCESS ); } else { lpstr->str.lockbytes = This->str.lockbytes; _ilockbytes16_addref(This->str.lockbytes); } lpstr->offset.u.LowPart = 0; lpstr->offset.u.HighPart= 0; ppsent=STORAGE_get_free_pps_entry(&lpstr->str); if (ppsent<0) return E_FAIL; stde=This->stde; if (stde.pps_next==-1) x=This->ppsent; else while (stde.pps_next!=-1) { x=stde.pps_next; if (1!=STORAGE_get_pps_entry(&lpstr->str,x,&stde)) return E_FAIL; } stde.pps_next = ppsent; ret = STORAGE_put_pps_entry(&lpstr->str,x,&stde); assert(ret); nPPSEntries = STORAGE_get_pps_entry(&lpstr->str,ppsent,&(lpstr->stde)); assert(nPPSEntries == 1); MultiByteToWideChar(CP_ACP, 0, pwcsName, -1, lpstr->stde.pps_rawname, ARRAY_SIZE(lpstr->stde.pps_rawname)); lpstr->stde.pps_sizeofname = (strlenW(lpstr->stde.pps_rawname)+1) * sizeof(WCHAR); lpstr->stde.pps_next = -1; lpstr->stde.pps_prev = -1; lpstr->stde.pps_dir = -1; lpstr->stde.pps_sb = -1; lpstr->stde.pps_size = 0; lpstr->stde.pps_type = 2; lpstr->ppsent = ppsent; /* FIXME: timestamps? */ if (!STORAGE_put_pps_entry(&lpstr->str,ppsent,&(lpstr->stde))) return E_FAIL; return S_OK; } /****************************************************************************** * IStorage16_OpenStorage [STORAGE.506] */ HRESULT CDECL IStorage16_fnOpenStorage(IStorage16 *iface, LPCOLESTR16 pwcsName, IStorage16 *pstgPrio, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16 **ppstg) { IStorage16Impl *This = impl_from_IStorage16(iface); IStorage16Impl *lpstg; WCHAR name[33]; int newpps; TRACE("(%p)->(%s,%p,0x%08x,%p,0x%08x,%p)\n", This,pwcsName,pstgPrio,grfMode,snbExclude,reserved,ppstg ); if (grfMode & STGM_TRANSACTED) FIXME("We do not support transacted Compound Storage. Using direct mode.\n"); _create_istorage16(ppstg); lpstg = MapSL((SEGPTR)*ppstg); if (This->str.hf) { DuplicateHandle( GetCurrentProcess(), This->str.hf, GetCurrentProcess(), &lpstg->str.hf, 0, TRUE, DUPLICATE_SAME_ACCESS ); } else { lpstg->str.lockbytes = This->str.lockbytes; _ilockbytes16_addref(This->str.lockbytes); } MultiByteToWideChar(CP_ACP, 0, pwcsName, -1, name, ARRAY_SIZE(name)); newpps = STORAGE_look_for_named_pps(&lpstg->str,This->stde.pps_dir,name); if (newpps==-1) { IStorage16_fnRelease(&lpstg->IStorage16_iface); *ppstg = NULL; return E_FAIL; } if (1!=STORAGE_get_pps_entry(&lpstg->str,newpps,&(lpstg->stde))) { IStorage16_fnRelease(&lpstg->IStorage16_iface); *ppstg = NULL; return E_FAIL; } lpstg->ppsent = newpps; return S_OK; } /****************************************************************************** * IStorage16_OpenStream [STORAGE.504] */ HRESULT CDECL IStorage16_fnOpenStream(IStorage16 *iface, LPCOLESTR16 pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream16 **ppstm) { IStorage16Impl *This = impl_from_IStorage16(iface); IStream16Impl* lpstr; WCHAR name[33]; int newpps; TRACE("(%p)->(%s,%p,0x%08x,0x%08x,%p)\n", This,pwcsName,reserved1,grfMode,reserved2,ppstm ); if (grfMode & STGM_TRANSACTED) FIXME("We do not support transacted Compound Storage. Using direct mode.\n"); _create_istream16(ppstm); lpstr = MapSL((SEGPTR)*ppstm); if (This->str.hf) { DuplicateHandle( GetCurrentProcess(), This->str.hf, GetCurrentProcess(), &lpstr->str.hf, 0, TRUE, DUPLICATE_SAME_ACCESS ); } else { lpstr->str.lockbytes = This->str.lockbytes; _ilockbytes16_addref(This->str.lockbytes); } MultiByteToWideChar(CP_ACP, 0, pwcsName, -1, name, ARRAY_SIZE(name)); newpps = STORAGE_look_for_named_pps(&lpstr->str,This->stde.pps_dir,name); if (newpps==-1) { IStream16_fnRelease(&lpstr->IStream16_iface); *ppstm = NULL; return E_FAIL; } if (1!=STORAGE_get_pps_entry(&lpstr->str,newpps,&(lpstr->stde))) { IStream16_fnRelease(&lpstr->IStream16_iface); *ppstm = NULL; return E_FAIL; } lpstr->offset.u.LowPart = 0; lpstr->offset.u.HighPart = 0; lpstr->ppsent = newpps; return S_OK; } /****************************************************************************** * _create_istorage16 [INTERNAL] */ static void _create_istorage16(LPSTORAGE16 *stg) { IStorage16Impl* lpst; if (!stvt16.QueryInterface) { HMODULE16 wp = GetModuleHandle16("STORAGE"); if (wp>=32) { #define VTENT(xfn) stvt16.xfn = (void*)GetProcAddress16(wp,"IStorage16_"#xfn); VTENT(QueryInterface) VTENT(AddRef) VTENT(Release) VTENT(CreateStream) VTENT(OpenStream) VTENT(CreateStorage) VTENT(OpenStorage) VTENT(CopyTo) VTENT(MoveElementTo) VTENT(Commit) VTENT(Revert) VTENT(EnumElements) VTENT(DestroyElement) VTENT(RenameElement) VTENT(SetElementTimes) VTENT(SetClass) VTENT(SetStateBits) VTENT(Stat) #undef VTENT segstvt16 = (const IStorage16Vtbl*)MapLS( &stvt16 ); } else { #define VTENT(xfn) stvt16.xfn = IStorage16_fn##xfn; VTENT(QueryInterface) VTENT(AddRef) VTENT(Release) VTENT(CreateStream) VTENT(OpenStream) VTENT(CreateStorage) VTENT(OpenStorage) VTENT(CopyTo) VTENT(Commit) /* not (yet) implemented ... VTENT(MoveElementTo) VTENT(Revert) VTENT(EnumElements) VTENT(DestroyElement) VTENT(RenameElement) VTENT(SetElementTimes) VTENT(SetClass) VTENT(SetStateBits) VTENT(Stat) */ #undef VTENT segstvt16 = &stvt16; } } lpst = HeapAlloc( GetProcessHeap(), 0, sizeof(*lpst) ); lpst->IStorage16_iface.lpVtbl = segstvt16; lpst->str.hf = NULL; lpst->str.lockbytes = 0; lpst->ref = 1; lpst->thisptr = MapLS(lpst); *stg = (void*)lpst->thisptr; } /****************************************************************************** * Storage API functions */ /****************************************************************************** * StgCreateDocFileA [STORAGE.1] */ HRESULT WINAPI StgCreateDocFile16( LPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved,IStorage16 **ppstgOpen ) { HANDLE hf = INVALID_HANDLE_VALUE; int i,ret; IStorage16Impl* lpstg; struct storage_pps_entry stde; char temp_file[MAX_PATH]; TRACE("(%s,0x%08x,0x%08x,%p)\n", pwcsName,grfMode,reserved,ppstgOpen ); _create_istorage16(ppstgOpen); if (pwcsName == NULL) { char temp_path[MAX_PATH]; if (GetTempPathA(MAX_PATH, temp_path)) { if (GetTempFileNameA(temp_path, "", 0, temp_file)) { pwcsName = temp_file; hf = CreateFileA(pwcsName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); } } } else { hf = CreateFileA(pwcsName,GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,0); } if (hf==INVALID_HANDLE_VALUE) { WARN("couldn't open file for storage:%d\n",GetLastError()); return E_FAIL; } lpstg = MapSL((SEGPTR)*ppstgOpen); lpstg->str.hf = hf; lpstg->str.lockbytes = 0; /* FIXME: check for existence before overwriting? */ if (!STORAGE_init_storage(&lpstg->str)) { CloseHandle(hf); return E_FAIL; } i=0;ret=0; while (!ret) { /* neither 1 nor <0 */ ret=STORAGE_get_pps_entry(&lpstg->str,i,&stde); if ((ret==1) && (stde.pps_type==5)) { lpstg->stde = stde; lpstg->ppsent = i; break; } i++; } if (ret!=1) { IStorage16_fnRelease(&lpstg->IStorage16_iface); return E_FAIL; } return S_OK; } /****************************************************************************** * StgIsStorageFile [STORAGE.5] */ HRESULT WINAPI StgIsStorageFile16(LPCOLESTR16 fn) { UNICODE_STRING strW; HRESULT ret; RtlCreateUnicodeStringFromAsciiz(&strW, fn); ret = StgIsStorageFile( strW.Buffer ); RtlFreeUnicodeString( &strW ); return ret; } /****************************************************************************** * StgOpenStorage [STORAGE.3] */ HRESULT WINAPI StgOpenStorage16( LPCOLESTR16 pwcsName,IStorage16 *pstgPriority,DWORD grfMode, SNB16 snbExclude,DWORD reserved, IStorage16 **ppstgOpen ) { HANDLE hf; int ret,i; IStorage16Impl* lpstg; struct storage_pps_entry stde; TRACE("(%s,%p,0x%08x,%p,%d,%p)\n", pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstgOpen ); _create_istorage16(ppstgOpen); hf = CreateFileA(pwcsName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if (hf==INVALID_HANDLE_VALUE) { WARN("Couldn't open file for storage\n"); return E_FAIL; } lpstg = MapSL((SEGPTR)*ppstgOpen); lpstg->str.hf = hf; i=0;ret=0; while (!ret) { /* neither 1 nor <0 */ ret=STORAGE_get_pps_entry(&lpstg->str,i,&stde); if ((ret==1) && (stde.pps_type==5)) { lpstg->stde=stde; break; } i++; } if (ret!=1) { IStorage16_fnRelease(&lpstg->IStorage16_iface); return E_FAIL; } return S_OK; } /****************************************************************************** * StgIsStorageILockBytes [STORAGE.6] * * Determines if the ILockBytes contains a storage object. */ HRESULT WINAPI StgIsStorageILockBytes16(SEGPTR plkbyt) { DWORD args[6]; HRESULT hres; HANDLE16 hsig; args[0] = (DWORD)plkbyt; /* iface */ args[1] = args[2] = 0; /* ULARGE_INTEGER offset */ args[3] = WOWGlobalAllocLock16( 0, 8, &hsig ); /* sig */ args[4] = 8; args[5] = 0; if (!WOWCallback16Ex( (DWORD)((const ILockBytes16Vtbl*)MapSL( (SEGPTR)((LPLOCKBYTES16)MapSL(plkbyt))->lpVtbl) )->ReadAt, WCB16_PASCAL, 6*sizeof(DWORD), (LPVOID)args, (LPDWORD)&hres )) { ERR("CallTo16 ILockBytes16::ReadAt() failed, hres %x\n",hres); return hres; } if (memcmp(MapSL(args[3]), STORAGE_magic, sizeof(STORAGE_magic)) == 0) { WOWGlobalUnlockFree16(args[3]); return S_OK; } WOWGlobalUnlockFree16(args[3]); return S_FALSE; } /****************************************************************************** * StgOpenStorageOnILockBytes [STORAGE.4] * * PARAMS * plkbyt FIXME: Should probably be an ILockBytes16 *. */ HRESULT WINAPI StgOpenStorageOnILockBytes16( SEGPTR plkbyt, IStorage16 *pstgPriority, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16 **ppstgOpen) { IStorage16Impl* lpstg; int i,ret; struct storage_pps_entry stde; FIXME("(%x, %p, 0x%08x, %d, %x, %p)\n", plkbyt, pstgPriority, grfMode, (int)snbExclude, reserved, ppstgOpen); if ((plkbyt == 0) || (ppstgOpen == 0)) return STG_E_INVALIDPOINTER; *ppstgOpen = 0; _create_istorage16(ppstgOpen); lpstg = MapSL((SEGPTR)*ppstgOpen); lpstg->str.hf = NULL; lpstg->str.lockbytes = plkbyt; i=0;ret=0; while (!ret) { /* neither 1 nor <0 */ ret=STORAGE_get_pps_entry(&lpstg->str,i,&stde); if ((ret==1) && (stde.pps_type==5)) { lpstg->stde=stde; break; } i++; } if (ret!=1) { IStorage16_fnRelease(&lpstg->IStorage16_iface); return E_FAIL; } return S_OK; } #endif ================================================ FILE: storage/storage.def ================================================ ; File generated automatically from ..\storage\storage.dll16.spec; do not edit! LIBRARY storage.dll16 EXPORTS _wine_spec_dos_header @1 DATA ;PRIVATE ================================================ FILE: storage/storage.dll16.spec ================================================ # Compound Storage DLL. # (FIXME: some methods are commented out. Commenting them in _WILL_ # result in dataloss. Do it at your own risk.) 1 pascal StgCreateDocFileA(str long long ptr) StgCreateDocFile16 2 pascal StgCreateDocfileOnILockBytes(segptr long long ptr) StgCreateDocfileOnILockBytes16 3 pascal StgOpenStorage(str segptr long ptr long ptr) StgOpenStorage16 4 pascal StgOpenStorageOnILockBytes(segptr segptr long ptr long ptr) StgOpenStorageOnILockBytes16 5 pascal StgIsStorageFile(str) StgIsStorageFile16 6 pascal StgIsStorageILockBytes(segptr) StgIsStorageILockBytes16 7 pascal StgSetTimes(str ptr ptr ptr) StgSetTimes16 #8 WEP #9 ___EXPORTEDSTUB 103 stub DllGetClassObject # Storage Interface functions. Starting at 500 # these are not exported in the real storage.dll, we use them # as 16->32 relays. They use the cdecl calling convention. # IStorage #500 cdecl IStorage16_QueryInterface(ptr ptr ptr) IStorage16_fnQueryInterface #501 cdecl IStorage16_AddRef(ptr) IStorage16_fnAddRef #502 cdecl IStorage16_Release(ptr) IStorage16_fnRelease #503 cdecl IStorage16_CreateStream(ptr str long long long ptr) IStorage16_fnCreateStream # #504 cdecl IStorage16_OpenStream(ptr str ptr long long ptr) IStorage16_fnOpenStream #505 cdecl IStorage16_CreateStorage(ptr str long long long ptr) IStorage16_fnCreateStorage #506 cdecl IStorage16_OpenStorage(ptr str ptr long ptr long ptr) IStorage16_fnOpenStorage #507 cdecl IStorage16_CopyTo(ptr long ptr ptr ptr) IStorage16_fnCopyTo #508 stub IStorage16_MoveElementTo #509 cdecl IStorage16_Commit(ptr long) IStorage16_fnCommit #510 stub IStorage16_Revert #511 stub IStorage16_EnumElements #512 stub IStorage16_DestroyElement #513 stub IStorage16_RenameElement #514 stub IStorage16_SetElementTimes #515 stub IStorage16_SetClass #516 stub IStorage16_SetStateBits #517 cdecl IStorage16_Stat(ptr ptr long) IStorage16_fnStat # IStream #518 cdecl IStream16_QueryInterface(ptr ptr ptr) IStream16_fnQueryInterface #519 cdecl IStream16_AddRef(ptr) IStream16_fnAddRef #520 cdecl IStream16_Release(ptr) IStream16_fnRelease #521 cdecl IStream16_Read(ptr ptr long ptr) IStream16_fnRead #522 cdecl IStream16_Write(ptr ptr long ptr) IStream16_fnWrite #523 cdecl IStream16_Seek(ptr int64 long ptr) IStream16_fnSeek #524 stub IStream16_SetSize #525 stub IStream16_CopyTo #526 stub IStream16_Commit #527 stub IStream16_Revert #528 stub IStream16_LockRegion #529 stub IStream16_UnlockRegion #530 stub IStream16_Stat #531 stub IStream16_Clone ================================================ FILE: storage/storage.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 storage {4A75E3F9-856A-4854-8AA2-34C06F7415BD} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)ole2.lib;ntdll.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; uuid.lib;ole32.lib;%(AdditionalDependencies) true storage.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false storage.def $(OutDir)ole2.lib;ntdll.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; uuid.lib;ole32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" STORAGE > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: system/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(system SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/system.def system.drv16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(system.drv16 system) target_link_libraries(system libwine winecrt0 krnl386) set_target_properties(system PROPERTIES SUFFIX ".drv16") ================================================ FILE: system/Makefile.in ================================================ MODULE = system.drv16 EXTRADLLFLAGS = -m16 C_SRCS = system.c ================================================ FILE: system/system.c ================================================ /* * SYSTEM DLL routines * * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #define NONAMELESSUNION #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "wine/winuser16.h" #include "wownt32.h" #include "../krnl386/kernel16_private.h" #include "winternl.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(system); typedef struct { FARPROC16 callback16; INT rate; INT ticks; } SYSTEM_TIMER; #define NB_SYS_TIMERS 8 #define SYS_TIMER_RATE 54925 static SYSTEM_TIMER SYS_Timers[NB_SYS_TIMERS]; static int SYS_NbTimers = 0; static HANDLE SYS_timer; static HANDLE SYS_thread; static BOOL SYS_timers_disabled; /*********************************************************************** * SYSTEM_TimerTick */ static void CALLBACK SYSTEM_TimerTick( LPVOID arg, DWORD low, DWORD high ) { int i; if (SYS_timers_disabled) return; for (i = 0; i < NB_SYS_TIMERS; i++) { if (!SYS_Timers[i].callback16) continue; if ((SYS_Timers[i].ticks -= SYS_TIMER_RATE) <= 0) { FARPROC16 proc = SYS_Timers[i].callback16; CONTEXT context; SYS_Timers[i].ticks += SYS_Timers[i].rate; memset( &context, 0, sizeof(context) ); context.SegFs = wine_get_fs(); context.SegGs = wine_get_gs(); context.SegCs = SELECTOROF( proc ); context.Eip = OFFSETOF( proc ); context.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME, bp); context.Eax = i + 1; WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&context ); } } } /*********************************************************************** * SYSTEM_TimerThread */ static DWORD CALLBACK SYSTEM_TimerThread( void *dummy ) { LARGE_INTEGER when; if (!(SYS_timer = CreateWaitableTimerA( NULL, FALSE, NULL ))) return 0; when.u.LowPart = when.u.HighPart = 0; SetWaitableTimer( SYS_timer, &when, (SYS_TIMER_RATE+500)/1000, SYSTEM_TimerTick, 0, FALSE ); for (;;) SleepEx( INFINITE, TRUE ); } /********************************************************************** * SYSTEM_StartTicks * * Start the system tick timer. */ static void SYSTEM_StartTicks(void) { if (!SYS_thread) SYS_thread = CreateThread( NULL, 0, SYSTEM_TimerThread, NULL, 0, NULL ); } /********************************************************************** * SYSTEM_StopTicks * * Stop the system tick timer. */ static void SYSTEM_StopTicks(void) { if (SYS_thread) { CancelWaitableTimer( SYS_timer ); TerminateThread( SYS_thread, 0 ); CloseHandle( SYS_thread ); CloseHandle( SYS_timer ); SYS_thread = 0; } } /*********************************************************************** * InquireSystem (SYSTEM.1) * * Note: the function always takes 2 WORD arguments, contrary to what * "Undocumented Windows" says. */ DWORD WINAPI InquireSystem16( WORD code, WORD arg ) { WORD drivetype; WCHAR root[3]; switch(code) { case 0: /* Get timer resolution */ return SYS_TIMER_RATE; case 1: /* Get drive type */ root[0] = 'A' + arg; root[1] = ':'; root[2] = 0; drivetype = GetDriveTypeW( root ); if (drivetype == DRIVE_CDROM) drivetype = DRIVE_REMOTE; else if (drivetype == DRIVE_NO_ROOT_DIR) drivetype = DRIVE_UNKNOWN; return MAKELONG( drivetype, drivetype ); case 2: /* Enable one-drive logic */ FIXME("Case %d: set single-drive %d not supported\n", code, arg ); return 0; } WARN("Unknown code %d\n", code ); return 0; } /*********************************************************************** * CreateSystemTimer (SYSTEM.2) */ WORD WINAPI CreateSystemTimer16( WORD rate, FARPROC16 proc ) { int i; for (i = 0; i < NB_SYS_TIMERS; i++) if (!SYS_Timers[i].callback16) /* Found one */ { SYS_Timers[i].rate = (UINT)rate * 1000; if (SYS_Timers[i].rate < SYS_TIMER_RATE) SYS_Timers[i].rate = SYS_TIMER_RATE; SYS_Timers[i].ticks = SYS_Timers[i].rate; SYS_Timers[i].callback16 = proc; if (++SYS_NbTimers == 1) SYSTEM_StartTicks(); return i + 1; /* 0 means error */ } return 0; } /*********************************************************************** * KillSystemTimer (SYSTEM.3) * * Note: do not confuse this function with USER.182 */ WORD WINAPI SYSTEM_KillSystemTimer( WORD timer ) { if ( !timer || timer > NB_SYS_TIMERS || !SYS_Timers[timer-1].callback16 ) return timer; /* Error */ SYS_Timers[timer-1].callback16 = 0; if (!--SYS_NbTimers) SYSTEM_StopTicks(); return 0; } /*********************************************************************** * EnableSystemTimers (SYSTEM.4) */ void WINAPI EnableSystemTimers16(void) { SYS_timers_disabled = FALSE; } /*********************************************************************** * DisableSystemTimers (SYSTEM.5) */ void WINAPI DisableSystemTimers16(void) { SYS_timers_disabled = TRUE; } /*********************************************************************** * GetSystemMSecCount (SYSTEM.6) */ DWORD WINAPI GetSystemMSecCount16(void) { return GetTickCount(); } /*********************************************************************** * Get80x87SaveSize (SYSTEM.7) */ WORD WINAPI Get80x87SaveSize16(void) { return 94; } typedef void(*fldcw_t)(WORD); typedef void(*wait_t)(); typedef void(*fninit_t)(); typedef void(*fstcw_t)(WORD*); typedef void(*frndint_t)(); typedef void(*fclex_t)(); typedef void(*fsave_t)(char*); typedef void(*frstor_t)(const char*); typedef DWORD(*fistp_t)(WORD); void fsave_stub(char* a) { FIXME("stub\n"); } void frstor_stub(const char* a) { FIXME("stub\n"); } typedef struct { fldcw_t fldcw; wait_t wait; fninit_t fninit; fstcw_t fstcw; frndint_t frndint; fclex_t fclex; fsave_t fsave; frstor_t frstor; fistp_t fistp; } x87function; x87function x87; typedef void (*load_x87function_t)(x87function *func); void load_x87() { char dllname[MAX_PATH]; load_x87function_t load_x87function; krnl386_get_config_string("otvdm", "vm", "vm86.dll", dllname, sizeof(dllname)); HMODULE vm = LoadLibraryA(dllname); load_x87function = (load_x87function_t)GetProcAddress(vm, "load_x87function"); if (load_x87function) load_x87function(&x87); if (!x87.fsave) x87.fsave = fsave_stub; if (!x87.frstor) x87.frstor = frstor_stub; } #define USE_VM86_DLL 1 /*********************************************************************** * Save80x87State (SYSTEM.8) */ void WINAPI Save80x87State16( char *ptr ) { #ifdef USE_VM86_DLL x87.fsave(ptr); #elif defined(__i386__) __asm__(".byte 0x66; fsave %0; fwait" : "=m" (ptr) ); #endif } /*********************************************************************** * Restore80x87State (SYSTEM.9) */ void WINAPI Restore80x87State16( const char *ptr ) { #ifdef USE_VM86_DLL x87.frstor(ptr); #elif defined(__i386__) __asm__(".byte 0x66; frstor %0" : : "m" (ptr) ); #endif } /*********************************************************************** * A20_Proc (SYSTEM.20) */ void WINAPI A20_Proc16( WORD unused ) { /* this is also a NOP in Windows */ } ================================================ FILE: system/system.def ================================================ ; File generated automatically from ..\system.drv16\system.drv16.spec; do not edit! LIBRARY system.drv16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: system/system.drv16.spec ================================================ 1 pascal InquireSystem(word word) InquireSystem16 2 pascal -ret16 CreateSystemTimer(word segptr) CreateSystemTimer16 3 pascal -ret16 KillSystemTimer(word) SYSTEM_KillSystemTimer 4 pascal -ret16 EnableSystemTimers() EnableSystemTimers16 5 pascal -ret16 DisableSystemTimers() DisableSystemTimers16 6 pascal GetSystemMSecCount() GetSystemMSecCount16 7 pascal -ret16 Get80x87SaveSize() Get80x87SaveSize16 8 pascal -ret16 Save80x87State(ptr) Save80x87State16 9 pascal -ret16 Restore80x87State(ptr) Restore80x87State16 13 stub INQUIRELONGINTS # W1.1, W2.0 #14 stub ordinal only W1.1 20 pascal -ret16 A20_Proc(word) A20_Proc16 ================================================ FILE: system/system.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj system {6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .drv16 false Release .drv16 Level3 Disabled 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) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; true system.def Level3 MaxSpeed true true 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) ../wine Windows true true true false system.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; Document "$(OutDir)convspec" "%(Filename).spec" SYSTEM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" SYSTEM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: timer/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(timer SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/timer.def timer.drv16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(timer.drv16 timer) target_link_libraries(timer libwine winecrt0 krnl386) set_target_properties(timer PROPERTIES SUFFIX ".drv16") ================================================ FILE: timer/timer.c ================================================ #include "windef.h" #include "winbase.h" #include "wine/debug.h" #include "wine/winbase16.h" #include "wownt32.h" WINE_DEFAULT_DEBUG_CHANNEL(timer); LRESULT WINAPI DriverProc16(DWORD dwDevID, HDRVR16 hDrv, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { FIXME("\n"); return 0; } ================================================ FILE: timer/timer.def ================================================ ; File generated automatically from timer\timer.drv16.spec; do not edit! LIBRARY timer.drv16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: timer/timer.drv16.spec ================================================ #1 WEP 2 pascal DriverProc(long word word long long) DriverProc16 ================================================ FILE: timer/timer.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 timer {09EF1555-CA21-47F8-8830-04A53295F8B6} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .drv16 false Release .drv16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; true timer.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false timer.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; Document "$(OutDir)convspec" "%(Filename).spec" TIMER > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: toolhelp/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(toolhelp SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/toolhelp.def toolhelp.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(toolhelp.dll16 toolhelp) target_link_libraries(toolhelp libwine winecrt0 krnl386 user) set_target_properties(toolhelp PROPERTIES SUFFIX ".dll16") ================================================ FILE: toolhelp/Makefile.in ================================================ MODULE = toolhelp.dll16 EXTRADLLFLAGS = -m16 C_SRCS = toolhelp.c ================================================ FILE: toolhelp/toolhelp.c ================================================ /* * Toolhelp functions * * Copyright 1996 Marcus Meissner * Copyright 2009 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "windef.h" #include "winbase.h" //#include "winternl.h" #include "../krnl386/kernel16_private.h" #include "wownt32.h" #include "wine/winbase16.h" #include "toolhelp.h" #include "wine/debug.h" #include "wine/exception.h" WINE_DEFAULT_DEBUG_CHANNEL(toolhelp); #include "pshpack1.h" /* Global arena block */ typedef struct { void *base; /* Base address (0 if discarded) */ DWORD size; /* Size in bytes (0 indicates a free block) */ HGLOBAL16 handle; /* Handle for this block */ HGLOBAL16 hOwner; /* Owner of this block */ BYTE lockCount; /* Count of GlobalFix() calls */ BYTE pageLockCount; /* Count of GlobalPageLock() calls */ BYTE flags; /* Allocation flags */ BYTE selCount; /* Number of selectors allocated for this block */ DWORD dib_avail_size; WORD wSeg; WORD wType; BYTE pad[0x10 - 4 - 2 - 2]; /* win31 GLOBALARENA size = 0x20 */ } GLOBALARENA; #define GLOBAL_MAX_COUNT 8192 /* Max number of allocated blocks */ typedef struct { WORD check; /* 00 Heap checking flag */ WORD freeze; /* 02 Heap frozen flag */ WORD items; /* 04 Count of items on the heap */ WORD first; /* 06 First item of the heap */ WORD pad1; /* 08 Always 0 */ WORD last; /* 0a Last item of the heap */ WORD pad2; /* 0c Always 0 */ BYTE ncompact; /* 0e Compactions counter */ BYTE dislevel; /* 0f Discard level */ DWORD distotal; /* 10 Total bytes discarded */ WORD htable; /* 14 Pointer to handle table */ WORD hfree; /* 16 Pointer to free handle table */ WORD hdelta; /* 18 Delta to expand the handle table */ WORD expand; /* 1a Pointer to expand function (unused) */ WORD pstat; /* 1c Pointer to status structure (unused) */ FARPROC16 notify; /* 1e Pointer to LocalNotify() function */ WORD lock; /* 22 Lock count for the heap */ WORD extra; /* 24 Extra bytes to allocate when expanding */ WORD minsize; /* 26 Minimum size of the heap */ WORD magic; /* 28 Magic number */ } LOCALHEAPINFO; typedef struct { /* Arena header */ WORD prev; /* Previous arena | arena type */ WORD next; /* Next arena */ /* Start of the memory block or free-list info */ WORD size; /* Size of the free block */ WORD free_prev; /* Previous free block */ WORD free_next; /* Next free block */ } LOCALARENA; #define LOCAL_ARENA_HEADER_SIZE 4 #define LOCAL_ARENA_HEADER( handle) ((handle) - LOCAL_ARENA_HEADER_SIZE) #define LOCAL_ARENA_PTR(ptr,arena) ((LOCALARENA *)((char *)(ptr)+(arena))) #include "poppack.h" #define TDB_MAGIC ('T' | ('D' << 8)) /* FIXME: to make this work, we have to call back all these registered * functions from all over the WINE code. Someone with more knowledge than * me please do that. -Marcus */ static struct notify { HTASK16 htask; FARPROC16 lpfnCallback; WORD wFlags; } *notifys = NULL; static struct intcb { HTASK16 htask; FARPROC16 lpfnIntCallback; } *intcbs = NULL; static int nrofnotifys = 0; static int nrofintcbs = 0; static THHOOK *get_thhook(void) { static THHOOK *thhook; if (!thhook) thhook = MapSL( (SEGPTR)GetProcAddress16( GetModuleHandle16("KERNEL"), (LPCSTR)332 )); return thhook; } static GLOBALARENA *get_global_arena(void) { return MapSL(MAKESEGPTR(get_thhook()->hGlobalHeap, 0)); } #define LOCAL_HEAP_MAGIC 0x484c /* 'LH' */ static LOCALHEAPINFO *get_local_heap( HANDLE16 ds ) { INSTANCEDATA *ptr = MapSL( MAKESEGPTR( ds, 0 )); LOCALHEAPINFO *pInfo; if (!ptr || !ptr->heap) return NULL; pInfo = (LOCALHEAPINFO*)((char*)ptr + ptr->heap); if (pInfo->magic != LOCAL_HEAP_MAGIC) return NULL; return pInfo; } /*********************************************************************** * GlobalHandleToSel (TOOLHELP.50) */ WORD WINAPI GlobalHandleToSel16( HGLOBAL16 handle ) { if (!handle) return 0; if (!(handle & 7)) return handle - 1; return handle | 7; } /*********************************************************************** * GlobalFirst (TOOLHELP.51) */ BOOL16 WINAPI GlobalFirst16( GLOBALENTRY *pGlobal, WORD wFlags ) { if (wFlags == GLOBAL_LRU) return FALSE; pGlobal->dwNext = 0; return GlobalNext16( pGlobal, wFlags ); } /*********************************************************************** * GlobalNext (TOOLHELP.52) */ BOOL16 WINAPI GlobalNext16( GLOBALENTRY *pGlobal, WORD wFlags) { GLOBALARENA *pGlobalArena = get_global_arena(); GLOBALARENA *pArena; if (pGlobal->dwNext >= GLOBAL_MAX_COUNT) return FALSE; pArena = pGlobalArena + pGlobal->dwNext; if (wFlags == GLOBAL_FREE) /* only free blocks */ { int i; for (i = pGlobal->dwNext; i < GLOBAL_MAX_COUNT; i++, pArena++) if (pArena->size == 0) break; /* block is free */ if (i >= GLOBAL_MAX_COUNT) return FALSE; pGlobal->dwNext = i; } pGlobal->dwAddress = (DWORD_PTR)pArena->base; pGlobal->dwBlockSize = pArena->size; pGlobal->hBlock = pArena->handle; pGlobal->wcLock = pArena->lockCount; pGlobal->wcPageLock = pArena->pageLockCount; pGlobal->wFlags = (GetCurrentPDB16() == pArena->hOwner); pGlobal->wHeapPresent = FALSE; pGlobal->hOwner = pArena->hOwner; pGlobal->wType = pArena->wType; pGlobal->wData = pArena->wType == GT_CODE || pArena->wType == GT_DATA || pArena->wType == GT_DGROUP ? pArena->wSeg : 0; pGlobal->dwNext++; TRACE("%04x, %04x, %04x\n", pGlobal->hBlock, pGlobal->dwNext, pGlobal->wData); return TRUE; } /*********************************************************************** * GlobalInfo (TOOLHELP.53) */ BOOL16 WINAPI GlobalInfo16( GLOBALINFO *pInfo ) { GLOBALARENA *pGlobalArena = get_global_arena(); GLOBALARENA *pArena; int i; pInfo->wcItems = GLOBAL_MAX_COUNT; pInfo->wcItemsFree = 0; pInfo->wcItemsLRU = 0; for (i = 0, pArena = pGlobalArena; i < GLOBAL_MAX_COUNT; i++, pArena++) if (pArena->size == 0) pInfo->wcItemsFree++; return TRUE; } /*********************************************************************** * GlobalEntryHandle (TOOLHELP.54) */ BOOL16 WINAPI GlobalEntryHandle16( GLOBALENTRY *pGlobal, HGLOBAL16 hItem ) { GLOBALARENA *pGlobalArena = get_global_arena(); GLOBALARENA *pArena = pGlobalArena + (hItem >> __AHSHIFT); pGlobal->dwAddress = (DWORD_PTR)pArena->base; pGlobal->dwBlockSize = pArena->size; pGlobal->hBlock = pArena->handle; pGlobal->wcLock = pArena->lockCount; pGlobal->wcPageLock = pArena->pageLockCount; pGlobal->wFlags = (GetCurrentPDB16() == pArena->hOwner); pGlobal->wHeapPresent = FALSE; pGlobal->hOwner = pArena->hOwner; pGlobal->wType = pArena->wType; pGlobal->wData = pArena->wType == GT_CODE || pArena->wType == GT_DATA || pArena->wType == GT_DGROUP ? pArena->wSeg : 0; pGlobal->dwNext = (hItem >> __AHSHIFT) + 1; return TRUE; } /*********************************************************************** * GlobalEntryModule (TOOLHELP.55) */ BOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule, WORD wSeg ) { BOOL r = GlobalFirst16(pGlobal, 0); while (r) { if (pGlobal->hOwner == hModule) { if ((pGlobal->wType == GT_CODE || pGlobal->wType == GT_DATA || pGlobal->wType == GT_DGROUP) && pGlobal->wData == wSeg) { return TRUE; } } r = GlobalNext16(pGlobal, 0); } return FALSE; } /*********************************************************************** * LocalInfo (TOOLHELP.56) */ BOOL16 WINAPI LocalInfo16( LOCALINFO *pLocalInfo, HGLOBAL16 handle ) { LOCALHEAPINFO *pInfo = get_local_heap( SELECTOROF(WOWGlobalLock16(handle)) ); if (!pInfo) return FALSE; pLocalInfo->wcItems = pInfo->items; return TRUE; } /*********************************************************************** * LocalFirst (TOOLHELP.57) */ BOOL16 WINAPI LocalFirst16( LOCALENTRY *pLocalEntry, HGLOBAL16 handle ) { WORD ds = GlobalHandleToSel16( handle ); char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALHEAPINFO *pInfo = get_local_heap( ds ); if (!pInfo) return FALSE; pLocalEntry->hHandle = pInfo->first + LOCAL_ARENA_HEADER_SIZE; pLocalEntry->wAddress = pLocalEntry->hHandle; pLocalEntry->wFlags = LF_FIXED; pLocalEntry->wcLock = 0; pLocalEntry->wType = LT_NORMAL; pLocalEntry->hHeap = handle; pLocalEntry->wHeapType = NORMAL_HEAP; pLocalEntry->wNext = LOCAL_ARENA_PTR(ptr,pInfo->first)->next; pLocalEntry->wSize = pLocalEntry->wNext - pLocalEntry->hHandle; TRACE("%04x, %04x, %04x, %d\n", ds, pLocalEntry->hHandle, pLocalEntry->wNext, pLocalEntry->wSize); return TRUE; } /*********************************************************************** * LocalNext (TOOLHELP.58) */ BOOL16 WINAPI LocalNext16( LOCALENTRY *pLocalEntry ) { WORD ds = GlobalHandleToSel16( pLocalEntry->hHeap ); char *ptr = MapSL( MAKESEGPTR( ds, 0 ) ); LOCALARENA *pArena; if (!get_local_heap( ds )) return FALSE; if (!pLocalEntry->wNext) return FALSE; pArena = LOCAL_ARENA_PTR( ptr, pLocalEntry->wNext ); pLocalEntry->hHandle = pLocalEntry->wNext + LOCAL_ARENA_HEADER_SIZE; pLocalEntry->wAddress = pLocalEntry->hHandle; pLocalEntry->wFlags = (pArena->prev & 3) + 1; pLocalEntry->wcLock = 0; pLocalEntry->wType = LT_NORMAL; if (pArena->next != pLocalEntry->wNext) /* last one? */ pLocalEntry->wNext = pArena->next; else pLocalEntry->wNext = 0; pLocalEntry->wSize = pLocalEntry->wNext - pLocalEntry->hHandle; TRACE("%04x, %04x, %04x, %d\n", ds, pLocalEntry->hHandle, pLocalEntry->wNext, pLocalEntry->wSize); return TRUE; } /********************************************************************** * ModuleFirst (TOOLHELP.59) */ BOOL16 WINAPI ModuleFirst16( MODULEENTRY *lpme ) { lpme->wNext = get_thhook()->hExeHead; return ModuleNext16( lpme ); } /********************************************************************** * ModuleNext (TOOLHELP.60) */ BOOL16 WINAPI ModuleNext16( MODULEENTRY *lpme ) { NE_MODULE *pModule; char *name; if (!lpme->wNext) return FALSE; if (!(pModule = GlobalLock16( GetExePtr(lpme->wNext) ))) return FALSE; name = (char *)pModule + pModule->ne_restab; memcpy( lpme->szModule, name + 1, min(*name, MAX_MODULE_NAME) ); lpme->szModule[min(*name, MAX_MODULE_NAME)] = '\0'; lpme->hModule = lpme->wNext; lpme->wcUsage = pModule->count; name = ((OFSTRUCT *)((char*)pModule + pModule->fileinfo))->szPathName; lstrcpynA( lpme->szExePath, name, sizeof(lpme->szExePath) ); lpme->wNext = pModule->next; return TRUE; } /********************************************************************** * ModuleFindName (TOOLHELP.61) */ HMODULE16 WINAPI ModuleFindName16( MODULEENTRY *lpme, LPCSTR name ) { HMODULE16 hModule = GetModuleHandle16( name ); lpme->wNext = hModule; return ModuleNext16( lpme ) ? hModule : 0; } /********************************************************************** * ModuleFindHandle (TOOLHELP.62) */ HMODULE16 WINAPI ModuleFindHandle16( MODULEENTRY *lpme, HMODULE16 hModule ) { NE_MODULE *pModule; if (!(pModule = GlobalLock16(hModule))) return 0; if (pModule->ne_magic != IMAGE_OS2_SIGNATURE) return 0; lpme->wNext = hModule; return ModuleNext16( lpme ) ? hModule : 0; } /*********************************************************************** * TaskFirst (TOOLHELP.63) */ BOOL16 WINAPI TaskFirst16( TASKENTRY *lpte ) { lpte->hNext = get_thhook()->HeadTDB; return TaskNext16( lpte ); } /*********************************************************************** * TaskNext (TOOLHELP.64) */ BOOL16 WINAPI TaskNext16( TASKENTRY *lpte ) { TDB *pTask; INSTANCEDATA *pInstData; TRACE_(toolhelp)("(%p): task=%04x\n", lpte, lpte->hNext ); if (!lpte->hNext) return FALSE; /* make sure that task and hInstance are valid (skip initial Wine task !) */ while (1) { pTask = GlobalLock16( lpte->hNext ); if (!pTask || pTask->magic != TDB_MAGIC) return FALSE; if (pTask->hInstance) break; lpte->hNext = pTask->hNext; } pInstData = MapSL( MAKESEGPTR( GlobalHandleToSel16(pTask->hInstance), 0 ) ); lpte->hTask = lpte->hNext; lpte->hTaskParent = pTask->hParent; lpte->hInst = pTask->hInstance; lpte->hModule = pTask->hModule; lpte->wSS = SELECTOROF(pTask->teb->TlsSlots[WOW32RESERVED_TLS_INDEX]); lpte->wSP = OFFSETOF(pTask->teb->TlsSlots[WOW32RESERVED_TLS_INDEX]); lpte->wStackTop = pInstData->stacktop; lpte->wStackMinimum = pInstData->stackmin; lpte->wStackBottom = pInstData->stackbottom; lpte->wcEvents = pTask->nEvents; lpte->hQueue = pTask->hQueue; lstrcpynA( lpte->szModule, pTask->module_name, sizeof(lpte->szModule) ); lpte->wPSPOffset = 0x100; /*??*/ lpte->hNext = pTask->hNext; return TRUE; } /*********************************************************************** * TaskFindHandle (TOOLHELP.65) */ BOOL16 WINAPI TaskFindHandle16( TASKENTRY *lpte, HTASK16 hTask ) { lpte->hNext = hTask; return TaskNext16( lpte ); } typedef NTSTATUS (NTAPI *NtQuerySystemInformation_t)( IN SYSTEM_INFORMATION_CLASS SystemInformationClass, OUT PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength OPTIONAL ); NtQuerySystemInformation_t fNtQuerySystemInformation; /*********************************************************************** * MemManInfo (TOOLHELP.72) */ BOOL16 WINAPI MemManInfo16( MEMMANINFO *info ) { SYSTEM_BASIC_INFORMATION sbi; MEMORYSTATUS status; /* * Not unsurprisingly although the documentation says you * _must_ provide the size in the dwSize field, this function * (under Windows) always fills the structure and returns true. */ if (!fNtQuerySystemInformation) fNtQuerySystemInformation = (NtQuerySystemInformation_t)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQuerySystemInformation"); fNtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL ); GlobalMemoryStatus( &status ); info->wPageSize = sbi.PageSize; info->dwLargestFreeBlock = status.dwAvailVirtual; info->dwMaxPagesAvailable = info->dwLargestFreeBlock / info->wPageSize; info->dwMaxPagesLockable = info->dwMaxPagesAvailable; info->dwTotalLinearSpace = status.dwTotalVirtual / info->wPageSize; info->dwTotalUnlockedPages = info->dwTotalLinearSpace; info->dwFreePages = info->dwMaxPagesAvailable; info->dwTotalPages = info->dwTotalLinearSpace; info->dwFreeLinearSpace = info->dwMaxPagesAvailable; info->dwSwapFilePages = status.dwTotalPageFile / info->wPageSize; return TRUE; } /*********************************************************************** * NotifyRegister (TOOLHELP.73) */ BOOL16 WINAPI NotifyRegister16( HTASK16 htask, FARPROC16 lpfnCallback, WORD wFlags ) { int i; WARN("(%x,%x,%x), semi-stub.\n", htask, (DWORD)lpfnCallback, wFlags ); if (!htask) htask = GetCurrentTask(); for (i=0;iSegSs, LOWORD(context->Esp))); if (lastcb == nrofintcbs) { lastcb = 0; context->Esp += 12; context->Eip = stkptr[3]; context->SegCs = stkptr[4]; context->EFlags = stkptr[5]; lastaddr = MAKESEGPTR(context->SegCs, context->Eip); return; } stkptr -= 2; FARPROC16 next_intcb16 = GetProcAddress16(GetModuleHandle16("TOOLHELP"), "next_intcb"); stkptr[0] = OFFSETOF(next_intcb16); stkptr[1] = SELECTOROF(next_intcb16); context->Esp -= 4; context->Eip = OFFSETOF(intcbs[lastcb].lpfnIntCallback); context->SegCs = SELECTOROF(intcbs[lastcb].lpfnIntCallback); lastcb++; } FARPROC16 WINAPI get_intcb(SEGPTR *stack, SEGPTR addr, WORD flags, WORD err, WORD ax) { if(!nrofintcbs) return FALSE; if(addr == lastaddr) // failed to handle once return FALSE; lastaddr = 0; WORD *stkptr = (WORD *)MapSL(*stack); FARPROC16 next_intcb16 = GetProcAddress16(GetModuleHandle16("TOOLHELP"), "next_intcb"); stkptr -= 8; stkptr[0] = OFFSETOF(next_intcb16); stkptr[1] = SELECTOROF(next_intcb16); stkptr[2] = ax; stkptr[3] = err; stkptr[4] = 0; stkptr[5] = OFFSETOF(addr); stkptr[6] = SELECTOROF(addr); stkptr[7] = flags; *stack -= 16; lastcb = 1; return intcbs[0].lpfnIntCallback; } /*********************************************************************** * InterruptRegister (TOOLHELP.75) */ BOOL16 WINAPI InterruptRegister16( HTASK16 htask, FARPROC16 callback ) { int i; WARN("(%04x, %04x:%04x), semi-stub.\n", htask, SELECTOROF(callback), OFFSETOF(callback)); if (!htask) htask = GetCurrentTask(); for (i=0;i limit) return 0; if (offset + count > limit + 1) count = limit + 1 - offset; memcpy( buffer, (char *)wine_ldt_get_base(&entry) + offset, count ); return count; } /*********************************************************************** * MemoryWrite (TOOLHELP.79) */ DWORD WINAPI MemoryWrite16( WORD sel, DWORD offset, void *buffer, DWORD count ) { LDT_ENTRY entry; DWORD limit; wine_ldt_get_entry( sel, &entry ); if (wine_ldt_is_empty( &entry )) return 0; limit = wine_ldt_get_limit( &entry ); if (offset > limit) return 0; if (offset + count > limit) count = limit + 1 - offset; memcpy( (char *)wine_ldt_get_base(&entry) + offset, buffer, count ); return count; } /*********************************************************************** * TimerCount (TOOLHELP.80) */ BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo ) { /* FIXME * In standard mode, dwmsSinceStart = dwmsThisVM * * I tested this, under Windows in enhanced mode, and * if you never switch VM (ie start/stop DOS) these * values should be the same as well. * * Also, Wine should adjust for the hardware timer * to reduce the amount of error to ~1ms. * I can't be bothered, can you? */ pTimerInfo->dwmsSinceStart = pTimerInfo->dwmsThisVM = GetTickCount(); return TRUE; } /*********************************************************************** * SystemHeapInfo (TOOLHELP.71) */ BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo ) { STACK16FRAME* stack16 = MapSL((SEGPTR)/*NtCurrentTeb()->WOW32Reserved*/getWOW32Reserved()); HANDLE16 oldDS = stack16->ds; WORD user = LoadLibrary16( "USER.EXE" ); WORD gdi = LoadLibrary16( "GDI.EXE" ); stack16->ds = user; pHeapInfo->wUserFreePercent = (int)LocalCountFree16() * 100 / LocalHeapSize16(); stack16->ds = gdi; pHeapInfo->wGDIFreePercent = (int)LocalCountFree16() * 100 / LocalHeapSize16(); stack16->ds = oldDS; pHeapInfo->hUserSegment = user; pHeapInfo->hGDISegment = gdi; FreeLibrary16( user ); FreeLibrary16( gdi ); return TRUE; } /*********************************************************************** * Local32Info (TOOLHELP.84) */ BOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle ) { FIXME( "Call Local32Info16 in kernel\n" ); return FALSE; } /*********************************************************************** * Local32First (TOOLHELP.85) */ BOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle ) { FIXME( "Call Local32First16 in kernel\n" ); return FALSE; } /*********************************************************************** * Local32Next (TOOLHELP.86) */ BOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry ) { FIXME( "Call Local32Next16 in kernel\n" ); return FALSE; } __declspec(dllimport) BOOL16 WINAPI USER_ClassFirst16(CLASSENTRY *pClassEntry); __declspec(dllimport) BOOL16 WINAPI USER_ClassNext16(CLASSENTRY *pClassEntry); BOOL16 WINAPI ClassFirst16(CLASSENTRY *pClassEntry) { return USER_ClassFirst16(pClassEntry); } BOOL16 WINAPI ClassNext16(CLASSENTRY *pClassEntry) { return USER_ClassNext16(pClassEntry); } BOOL WINAPI TOOLHELP_CallNotify(WORD wID, DWORD dwData) { int i; DWORD ret = FALSE; if (nrofnotifys == 0) return FALSE; TRACE("(%04x,%08x)\n", wID, dwData); for (i = 0; i < nrofnotifys; i++) { WORD args[3]; PVOID sssp; BOOL skip = FALSE; if ((wID == NFY_TASKIN || wID == NFY_TASKOUT) && (notifys[i].wFlags & NF_TASKSWITCH) != NF_TASKSWITCH) { continue; } if ((wID == NFY_RIP) && (notifys[i].wFlags & NF_RIP) != NF_RIP) { continue; } __TRY { // TODO: call notifiers in own thread skip = !IsTask16(GetCurrentTask()); } __EXCEPT_ALL { skip = TRUE; // task is likely dead } __ENDTRY if (skip) continue; sssp = getWOW32Reserved(); args[2] = wID; args[1] = HIWORD(dwData); args[0] = LOWORD(dwData); WOWCallback16Ex(notifys[i].lpfnCallback, WCB16_PASCAL, 6, &args, &ret); setWOW32Reserved(sssp); if (LOWORD(ret)) break; } TRACE("ret (%04x,%08x) retval=%04x\n", wID, dwData, LOWORD(ret)); return LOWORD(ret); } ================================================ FILE: toolhelp/toolhelp.def ================================================ ; File generated automatically from toolhelp\toolhelp.dll16.spec; do not edit! LIBRARY toolhelp.dll16 EXPORTS _wine_spec_dos_header @1 DATA get_intcb next_intcb InterruptRegister16 InterruptUnRegister16 NotifyRegister16 NotifyUnRegister16 TOOLHELP_CallNotify ================================================ FILE: toolhelp/toolhelp.dll16.spec ================================================ 50 pascal -ret16 GlobalHandleToSel(word) GlobalHandleToSel16 51 pascal -ret16 GlobalFirst(ptr word) GlobalFirst16 52 pascal -ret16 GlobalNext(ptr word) GlobalNext16 53 pascal -ret16 GlobalInfo(ptr) GlobalInfo16 54 pascal -ret16 GlobalEntryHandle(ptr word) GlobalEntryHandle16 55 pascal -ret16 GlobalEntryModule(ptr word word) GlobalEntryModule16 56 pascal -ret16 LocalInfo(ptr word) LocalInfo16 57 pascal -ret16 LocalFirst(ptr word) LocalFirst16 58 pascal -ret16 LocalNext(ptr) LocalNext16 59 pascal -ret16 ModuleFirst(ptr) ModuleFirst16 60 pascal -ret16 ModuleNext(ptr) ModuleNext16 61 pascal -ret16 ModuleFindName(ptr ptr) ModuleFindName16 62 pascal -ret16 ModuleFindHandle(ptr word) ModuleFindHandle16 63 pascal -ret16 TaskFirst(ptr) TaskFirst16 64 pascal -ret16 TaskNext(ptr) TaskNext16 65 pascal -ret16 TaskFindHandle(ptr word) TaskFindHandle16 66 pascal -ret16 StackTraceFirst(ptr word) StackTraceFirst16 67 pascal -ret16 StackTraceCSIPFirst(ptr word word word word) StackTraceCSIPFirst16 68 pascal -ret16 StackTraceNext(ptr) StackTraceNext16 69 pascal -ret16 ClassFirst(ptr) ClassFirst16 70 pascal -ret16 ClassNext(ptr) ClassNext16 71 pascal -ret16 SystemHeapInfo(ptr) SystemHeapInfo16 72 pascal -ret16 MemManInfo(ptr) MemManInfo16 73 pascal -ret16 NotifyRegister(word segptr word) NotifyRegister16 74 pascal -ret16 NotifyUnRegister(word) NotifyUnRegister16 75 pascal -ret16 InterruptRegister(word segptr) InterruptRegister16 76 pascal -ret16 InterruptUnRegister(word) InterruptUnRegister16 77 pascal -ret16 TerminateApp(word word) TerminateApp16 78 pascal MemoryRead(word long ptr long) MemoryRead16 79 pascal MemoryWrite(word long ptr long) MemoryWrite16 80 pascal -ret16 TimerCount(ptr) TimerCount16 81 pascal -ret16 TaskSetCSIP(word word word) TaskSetCSIP16 82 pascal TaskGetCSIP(word) TaskGetCSIP16 83 pascal -ret16 TaskSwitch(word segptr) TaskSwitch16 84 pascal -ret16 Local32Info(ptr word) Local32Info16 85 pascal -ret16 Local32First(ptr word) Local32First16 86 pascal -ret16 Local32Next(ptr) Local32Next16 100 pascal -register next_intcb() next_intcb @ stdcall -arch=win32 get_intcb(ptr long long long long) @ stdcall -arch=win32 next_intcb(ptr) @ stdcall -arch=win32 InterruptRegister16(long long) @ stdcall -arch=win32 InterruptUnRegister16(long) @ stdcall -arch=win32 NotifyRegister16(long long long) @ stdcall -arch=win32 NotifyUnRegister16(long) @ stdcall -arch=win32 TOOLHELP_CallNotify(long long) ================================================ FILE: toolhelp/toolhelp.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_TOOLHELP_H #define __WINE_TOOLHELP_H #include #include #define MAX_DATA 11 #define MAX_MODULE_NAME 9 #define MAX_PATH16 255 #define MAX_CLASSNAME 255 #include /* Global heap */ typedef struct { DWORD dwSize; WORD wcItems; WORD wcItemsFree; WORD wcItemsLRU; } GLOBALINFO; typedef struct { DWORD dwSize; DWORD dwAddress; DWORD dwBlockSize; HGLOBAL16 hBlock; WORD wcLock; WORD wcPageLock; WORD wFlags; BOOL16 wHeapPresent; HGLOBAL16 hOwner; WORD wType; WORD wData; DWORD dwNext; DWORD dwNextAlt; } GLOBALENTRY; /* GlobalFirst()/GlobalNext() flags */ #define GLOBAL_ALL 0 #define GLOBAL_LRU 1 #define GLOBAL_FREE 2 /* wType values */ #define GT_UNKNOWN 0 #define GT_DGROUP 1 #define GT_DATA 2 #define GT_CODE 3 #define GT_TASK 4 #define GT_RESOURCE 5 #define GT_MODULE 6 #define GT_FREE 7 #define GT_INTERNAL 8 #define GT_SENTINEL 9 #define GT_BURGERMASTER 10 /* wData values */ #define GD_USERDEFINED 0 #define GD_CURSORCOMPONENT 1 #define GD_BITMAP 2 #define GD_ICONCOMPONENT 3 #define GD_MENU 4 #define GD_DIALOG 5 #define GD_STRING 6 #define GD_FONTDIR 7 #define GD_FONT 8 #define GD_ACCELERATORS 9 #define GD_RCDATA 10 #define GD_ERRTABLE 11 #define GD_CURSOR 12 #define GD_ICON 14 #define GD_NAMETABLE 15 #define GD_MAX_RESOURCE 15 /* wFlags values */ #define GF_PDB_OWNER 0x0100 /* Low byte is KERNEL flags */ BOOL16 WINAPI GlobalInfo16( GLOBALINFO *pInfo ); BOOL16 WINAPI GlobalFirst16( GLOBALENTRY *pGlobal, WORD wFlags ); BOOL16 WINAPI GlobalNext16( GLOBALENTRY *pGlobal, WORD wFlags) ; BOOL16 WINAPI GlobalEntryHandle16( GLOBALENTRY *pGlobal, HGLOBAL16 hItem ); BOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule, WORD wSeg ); /* Local heap */ typedef struct { DWORD dwSize; WORD wcItems; } LOCALINFO; typedef struct { DWORD dwSize; HLOCAL16 hHandle; WORD wAddress; WORD wSize; WORD wFlags; WORD wcLock; WORD wType; WORD hHeap; WORD wHeapType; WORD wNext; } LOCALENTRY; /* wHeapType values */ #define NORMAL_HEAP 0 #define USER_HEAP 1 #define GDI_HEAP 2 /* wFlags values */ #define LF_FIXED 1 #define LF_FREE 2 #define LF_MOVEABLE 4 /* wType values */ #define LT_NORMAL 0 #define LT_FREE 0xff #define LT_GDI_PEN 1 /* LT_GDI_* is for GDI's heap */ #define LT_GDI_BRUSH 2 #define LT_GDI_FONT 3 #define LT_GDI_PALETTE 4 #define LT_GDI_BITMAP 5 #define LT_GDI_RGN 6 #define LT_GDI_DC 7 #define LT_GDI_DISABLED_DC 8 #define LT_GDI_METADC 9 #define LT_GDI_METAFILE 10 #define LT_GDI_MAX LT_GDI_METAFILE #define LT_USER_CLASS 1 /* LT_USER_* is for USER's heap */ #define LT_USER_WND 2 #define LT_USER_STRING 3 #define LT_USER_MENU 4 #define LT_USER_CLIP 5 #define LT_USER_CBOX 6 #define LT_USER_PALETTE 7 #define LT_USER_ED 8 #define LT_USER_BWL 9 #define LT_USER_OWNERDRAW 10 #define LT_USER_SPB 11 #define LT_USER_CHECKPOINT 12 #define LT_USER_DCE 13 #define LT_USER_MWP 14 #define LT_USER_PROP 15 #define LT_USER_LBIV 16 #define LT_USER_MISC 17 #define LT_USER_ATOMS 18 #define LT_USER_LOCKINPUTSTATE 19 #define LT_USER_HOOKLIST 20 #define LT_USER_USERSEEUSERDOALLOC 21 #define LT_USER_HOTKEYLIST 22 #define LT_USER_POPUPMENU 23 #define LT_USER_HANDLETABLE 32 #define LT_USER_MAX LT_USER_HANDLETABLE BOOL16 WINAPI LocalInfo16( LOCALINFO *pLocalInfo, HGLOBAL16 handle ); BOOL16 WINAPI LocalFirst16( LOCALENTRY *pLocalEntry, HGLOBAL16 handle ); BOOL16 WINAPI LocalNext16( LOCALENTRY *pLocalEntry ); /* Local 32-bit heap */ typedef struct { DWORD dwSize; /* 00 */ DWORD dwMemReserved; /* 04 */ DWORD dwMemCommitted; /* 08 */ DWORD dwTotalFree; /* 0C */ DWORD dwLargestFreeBlock; /* 10 */ DWORD dwcFreeHandles; /* 14 */ } LOCAL32INFO; typedef struct { DWORD dwSize; /* 00 */ WORD hHandle; /* 04 */ DWORD dwAddress; /* 06 */ DWORD dwSizeBlock; /* 0A */ WORD wFlags; /* 0E */ WORD wType; /* 10 */ WORD hHeap; /* 12 */ WORD wHeapType; /* 14 */ DWORD dwNext; /* 16 */ DWORD dwNextAlt; /* 1A */ } LOCAL32ENTRY; /* LOCAL32ENTRY.wHeapType flags same as LOCALENTRY.wHeapType flags */ /* LOCAL32ENTRY.wFlags same as LOCALENTRY.wFlags */ /* LOCAL32ENTRY.wType same as LOCALENTRY.wType */ BOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle ); BOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle ); BOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry ); /* modules */ typedef struct { DWORD dwSize; char szModule[MAX_MODULE_NAME + 1]; HMODULE16 hModule; WORD wcUsage; char szExePath[MAX_PATH16 + 1]; HANDLE16 wNext; } MODULEENTRY, *LPMODULEENTRY; BOOL16 WINAPI ModuleFirst16(MODULEENTRY *lpModule); BOOL16 WINAPI ModuleNext16(MODULEENTRY *lpModule); HMODULE16 WINAPI ModuleFindName16(MODULEENTRY *lpModule, LPCSTR lpstrName); HMODULE16 WINAPI ModuleFindHandle16(MODULEENTRY *lpModule, HMODULE16 hModule); /* tasks */ typedef struct { DWORD dwSize; HTASK16 hTask; HTASK16 hTaskParent; HINSTANCE16 hInst; HMODULE16 hModule; WORD wSS; WORD wSP; WORD wStackTop; WORD wStackMinimum; WORD wStackBottom; WORD wcEvents; HGLOBAL16 hQueue; char szModule[MAX_MODULE_NAME + 1]; WORD wPSPOffset; HANDLE16 hNext; } TASKENTRY, *LPTASKENTRY; BOOL16 WINAPI TaskFirst16(LPTASKENTRY lpTask); BOOL16 WINAPI TaskNext16(LPTASKENTRY lpTask); BOOL16 WINAPI TaskFindHandle16(LPTASKENTRY lpTask, HTASK16 hTask); DWORD WINAPI TaskSetCSIP(HTASK16 hTask, WORD wCS, WORD wIP); DWORD WINAPI TaskGetCSIP(HTASK16 hTask); BOOL16 WINAPI TaskSwitch(HTASK16 hTask, DWORD dwNewCSIP); /* flag for TerminateApp16() */ #define NO_UAE_BOX 1 /* mem info */ typedef struct tagMEMMANINFO { DWORD dwSize; DWORD dwLargestFreeBlock; DWORD dwMaxPagesAvailable; DWORD dwMaxPagesLockable; DWORD dwTotalLinearSpace; DWORD dwTotalUnlockedPages; DWORD dwFreePages; DWORD dwTotalPages; DWORD dwFreeLinearSpace; DWORD dwSwapFilePages; WORD wPageSize; } MEMMANINFO; typedef MEMMANINFO *LPMEMMANINFO; typedef struct { DWORD dwSize; WORD wUserFreePercent; WORD wGDIFreePercent; HGLOBAL16 hUserSegment; HGLOBAL16 hGDISegment; } SYSHEAPINFO; BOOL16 WINAPI MemManInfo16(LPMEMMANINFO lpEnhMode); BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo ); /* timer info */ typedef struct tagTIMERINFO { DWORD dwSize; DWORD dwmsSinceStart; DWORD dwmsThisVM; } TIMERINFO; BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo ); /* Window classes */ typedef struct { DWORD dwSize; HMODULE16 hInst; /* This is really an hModule */ char szClassName[MAX_CLASSNAME + 1]; HANDLE16 wNext; } CLASSENTRY; BOOL16 WINAPI ClassFirst16( CLASSENTRY *pClassEntry ); BOOL16 WINAPI ClassNext16( CLASSENTRY *pClassEntry ); /* Memory read/write */ DWORD WINAPI MemoryRead16( WORD sel, DWORD offset, void *buffer, DWORD count ); DWORD WINAPI MemoryWrite16( WORD sel, DWORD offset, void *buffer, DWORD count ); /* flags to NotifyRegister() */ #define NF_NORMAL 0 /* everything except taskswitches, debugerrors, * debugstrings */ #define NF_TASKSWITCH 1 /* get taskswitch information */ #define NF_RIP 2 /* get debugerrors of system */ BOOL16 WINAPI NotifyRegister16(HTASK16 htask,FARPROC16 lpfnCallback,WORD wFlags); #define NFY_UNKNOWN 0 #define NFY_LOADSEG 1 /* DATA is a pointer to following struct: */ typedef struct { DWORD dwSize; WORD wSelector; WORD wSegNum; WORD wType; /* bit 0 set if this is a code segment */ WORD wcInstance; /* only valid for data segment */ SEGPTR lpstrModuleName; } NFYLOADSEG; /* called when freeing a segment. LOWORD(dwData) is the freed selector */ #define NFY_FREESEG 2 /* called when loading/starting a DLL */ #define NFY_STARTDLL 3 typedef struct { DWORD dwSize; HMODULE16 hModule; WORD wCS; WORD wIP; } NFYSTARTDLL; /* called when starting a task. dwData is CS:IP */ #define NFY_STARTTASK 4 /* called when a task terminates. dwData is the return code */ #define NFY_EXITTASK 5 /* called when module is removed. LOWORD(dwData) is the handle */ #define NFY_DELMODULE 6 /* RIP? debugevent */ #define NFY_RIP 7 typedef struct { DWORD dwSize; WORD wIP; WORD wCS; WORD wSS; WORD wBP; WORD wExitCode; } NFYRIP; /* called before (after?) switching to a task * no data, callback should call GetCurrentTask */ #define NFY_TASKIN 8 /* called before(after?) switching from a task * no data, callback should call GetCurrentTask */ #define NFY_TASKOUT 9 /* returns ASCII input value, dwData not set */ #define NFY_INCHAR 10 /* output debugstring (pointed to by dwData) */ #define NFY_OUTSTRING 11 /* log errors */ #define NFY_LOGERROR 12 typedef struct { DWORD dwSize; UINT16 wErrCode; VOID *lpInfo; /* depends on wErrCode */ } NFYLOGERROR; /* called for parameter errors? */ #define NFY_LOGPARAMERROR 13 typedef struct { DWORD dwSize; UINT16 wErrCode; FARPROC16 lpfnErrorAddr; void **lpBadParam; } NFYLOGPARAMERROR; typedef struct { DWORD dwSize; HTASK16 hTask; WORD wSS; WORD wBP; WORD wCS; WORD wIP; HMODULE16 hModule; WORD wSegment; WORD wFlags; } STACKTRACEENTRY; #include BOOL WINAPI TOOLHELP_CallNotify(WORD wID, DWORD dwData); #endif /* __WINE_TOOLHELP_H */ ================================================ FILE: toolhelp/toolhelp.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj toolhelp {96925A3C-9DD9-418E-A772-A112FFE93DC2} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)user.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; true toolhelp.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false toolhelp.def $(OutDir)winecrt0.lib;$(OutDir)user.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; Document "$(OutDir)convspec" "%(Filename).spec" TOOLHELP > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" "$(OutDir)convspec" "%(Filename).spec" TOOLHELP > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj %(Filename).obj ================================================ FILE: tools/package.ps1 ================================================ Param([parameter(mandatory)] [string]$root, [parameter(mandatory)] [string]$src, [parameter(mandatory)] [string]$dst, [parameter(mandatory)] [string]$objcopy, [parameter(mandatory)] [string]$as, [string]$dll) $ErrorActionPreference = "Stop" if (!($dll)) { $dll = (Join-Path $dst "dll/") } function Make-Dll([string]$spec, [string]$name, [string]$dst) { Write-Host $name cmd.exe /c (Join-Path $src convspec.exe) $spec $name -ver | cmd.exe /c $as -o "$dst.o" cmd.exe /c $objcopy -O binary -j .data "$dst.o" $dst rm "$dst.o" } mkdir $dst -ErrorAction SilentlyContinue > $null copy (Join-Path $src "otvdm.exe") $dst copy (Join-Path $src "otvdmw.exe") $dst copy (Join-Path $src "winhlp32.exe") $dst copy (Join-Path $root "otvdm.ini") $dst copy (Join-Path $root "LICENSE") $dst copy (Join-Path $root "README.md") (Join-Path $dst "README.txt") copy (Join-Path $root "install.inf") $dst copy (Join-Path $root "install.lnk") $dst copy (Join-Path $root "installw.inf") $dst copy (Join-Path $root "install (no console).lnk") $dst copy (Join-Path $root "uninstall.reg") $dst mkdir $dll -ErrorAction SilentlyContinue > $null copy (Join-Path $src "*16") $dll copy (Join-Path $src "haxmvm.dll") $dll -ErrorAction SilentlyContinue > $null copy (Join-Path $src "gvm.dll") $dll -ErrorAction SilentlyContinue > $null copy (Join-Path $src "whpxvm.dll") $dll -ErrorAction SilentlyContinue > $null copy (Join-Path $src "vm86.dll") $dll copy (Join-Path $src "wow32.dll") $dll copy (Join-Path $src "libwine.dll") $dst mkdir (Join-Path $dst "WINDOWS") -ErrorAction SilentlyContinue > $null ni (Join-Path $dst "WINDOWS/WIN.INI") -ErrorAction SilentlyContinue > $null ni (Join-Path $dst "WINDOWS/SYSTEM.INI") -ErrorAction SilentlyContinue > $null mkdir (Join-Path $dst "dummydll") -ErrorAction SilentlyContinue > $null mkdir (Join-Path $dst "dummydll/SYSTEM") -ErrorAction SilentlyContinue > $null mkdir (Join-Path $dst "dummydll/SYSTEM32") -ErrorAction SilentlyContinue > $null Make-Dll (Join-Path $root "ctl3d/ctl3d.dll16.spec") "CTL3D" (Join-Path $dst "dummydll/SYSTEM/CTL3D.DLL") Make-Dll (Join-Path $root "ctl3dv2/ctl3dv2.dll16.spec") "CTL3DV2" (Join-Path $dst "dummydll/SYSTEM/CTL3DV2.DLL") Make-Dll (Join-Path $root "avifile/avifile.dll16.spec") "AVIFILE" (Join-Path $dst "dummydll/SYSTEM/AVIFILE.DLL") Make-Dll (Join-Path $root "comm/comm.drv16.spec") "COMM" (Join-Path $dst "dummydll/SYSTEM/COMM.DRV") Make-Dll (Join-Path $root "commdlg/commdlg.dll16.spec") "COMMDLG" (Join-Path $dst "dummydll/SYSTEM/COMMDLG.DLL") Make-Dll (Join-Path $root "compobj/compobj.dll16.spec") "COMPOBJ" (Join-Path $dst "dummydll/SYSTEM/COMPOBJ.DLL") Make-Dll (Join-Path $root "ddeml/ddeml.dll16.spec") "DDEML" (Join-Path $dst "dummydll/SYSTEM/DDEML.DLL") Make-Dll (Join-Path $root "display/display.drv16.spec") "DISPLAY" (Join-Path $dst "dummydll/SYSTEM/DISPLAY.DRV") Make-Dll (Join-Path $root "gdi/gdi.exe16.spec") "GDI" (Join-Path $dst "dummydll/SYSTEM/GDI.EXE") Make-Dll (Join-Path $root "keyboard/keyboard.drv16.spec") "KEYBOARD" (Join-Path $dst "dummydll/SYSTEM/KEYBOARD.DRV") Make-Dll (Join-Path $root "krnl386/krnl386.exe16.spec") "KERNEL" (Join-Path $dst "dummydll/SYSTEM/KRNL386.EXE") Make-Dll (Join-Path $root "lzexpand/lzexpand.dll16.spec") "LZEXPAND" (Join-Path $dst "dummydll/SYSTEM/LZEXPAND.DLL") Make-Dll (Join-Path $root "mmsystem/mmsystem.dll16.spec") "MMSYSTEM" (Join-Path $dst "dummydll/SYSTEM/MMSYSTEM.DLL") Make-Dll (Join-Path $root "mouse/mouse.drv16.spec") "MOUSE" (Join-Path $dst "dummydll/SYSTEM/MOUSE.DRV") Make-Dll (Join-Path $root "msacm/msacm.dll16.spec") "MSACM" (Join-Path $dst "dummydll/SYSTEM/MSACM.DLL") Make-Dll (Join-Path $root "msvideo/msvideo.dll16.spec") "MSVIDEO" (Join-Path $dst "dummydll/SYSTEM/MSVIDEO.DLL") Make-Dll (Join-Path $root "netapi/netapi.dll16.spec") "NETAPI" (Join-Path $dst "dummydll/SYSTEM/NETAPI.DLL") Make-Dll (Join-Path $root "nddeapi/nddeapi.dll16.spec") "NDDEAPI" (Join-Path $dst "dummydll/SYSTEM/NDDEAPI.DLL") Make-Dll (Join-Path $root "ole2/ole2.dll16.spec") "OLE2" (Join-Path $dst "dummydll/SYSTEM/OLE2.DLL") Make-Dll (Join-Path $root "ole2conv/ole2conv.dll16.spec") "OLE2CONV" (Join-Path $dst "dummydll/SYSTEM/OLE2CONV.DLL") Make-Dll (Join-Path $root "ole2disp/ole2disp.dll16.spec") "OLE2DISP" (Join-Path $dst "dummydll/SYSTEM/OLE2DISP.DLL") Make-Dll (Join-Path $root "ole2nls/ole2nls.dll16.spec") "OLE2NLS" (Join-Path $dst "dummydll/SYSTEM/OLE2NLS.DLL") Make-Dll (Join-Path $root "ole2prox/ole2prox.dll16.spec") "OLE2PROX" (Join-Path $dst "dummydll/SYSTEM/OLE2PROX.DLL") Make-Dll (Join-Path $root "ole2thk/ole2thk.dll16.spec") "OLE2THK" (Join-Path $dst "dummydll/SYSTEM/OLE2THK.DLL") Make-Dll (Join-Path $root "olecli/olecli.dll16.spec") "OLECLI" (Join-Path $dst "dummydll/SYSTEM/OLECLI.DLL") Make-Dll (Join-Path $root "olesvr/olesvr.dll16.spec") "OLESVR" (Join-Path $dst "dummydll/SYSTEM/OLESVR.DLL") Make-Dll (Join-Path $root "shell/shell.dll16.spec") "SHELL" (Join-Path $dst "dummydll/SYSTEM/SHELL.DLL") Make-Dll (Join-Path $root "sound/sound.drv16.spec") "SOUND" (Join-Path $dst "dummydll/SYSTEM/SOUND.DRV") Make-Dll (Join-Path $root "storage/storage.dll16.spec") "STORAGE" (Join-Path $dst "dummydll/SYSTEM/STORAGE.DLL") Make-Dll (Join-Path $root "system/system.drv16.spec") "SYSTEM" (Join-Path $dst "dummydll/SYSTEM/SYSTEM.DRV") Make-Dll (Join-Path $root "toolhelp/toolhelp.dll16.spec") "TOOLHELP" (Join-Path $dst "dummydll/SYSTEM/TOOLHELP.DLL") Make-Dll (Join-Path $root "user/user.exe16.spec") "USER" (Join-Path $dst "dummydll/SYSTEM/USER.EXE") Make-Dll (Join-Path $root "ver/ver.dll16.spec") "VER" (Join-Path $dst "dummydll/SYSTEM/VER.DLL") Make-Dll (Join-Path $root "wifeman/wifeman.dll16.spec") "WIFEMAN" (Join-Path $dst "dummydll/SYSTEM/WIFEMAN.DLL") Make-Dll (Join-Path $root "win87em/win87em.dll16.spec") "WIN87EM" (Join-Path $dst "dummydll/SYSTEM/WIN87EM.DLL") Make-Dll (Join-Path $root "wing/wing.dll16.spec") "WING" (Join-Path $dst "dummydll/SYSTEM/WING.DLL") Make-Dll (Join-Path $root "winnls/winnls.dll16.spec") "WINNLS" (Join-Path $dst "dummydll/SYSTEM/WINNLS.DLL") Make-Dll (Join-Path $root "winoldap/winoldap.mod16.spec") "WINOLDAP" (Join-Path $dst "dummydll/SYSTEM/WINOLDAP.MOD") Make-Dll (Join-Path $root "winsock/winsock.dll16.spec") "WINSOCK" (Join-Path $dst "dummydll/SYSTEM/WINSOCK.DLL") Make-Dll (Join-Path $root "winspool/winspool.drv16.spec") "WINSPOOL" (Join-Path $dst "dummydll/SYSTEM/WINSPOOL.DRV") copy (Join-Path $root "dummydll/dummydll.dll") (Join-Path $dst "dummydll/SYSTEM/KRNL286.EXE") -ErrorAction SilentlyContinue copy (Join-Path $root "dummydll/dummydll.dll") (Join-Path $dst "dummydll/SYSTEM/VGA.DRV") -ErrorAction SilentlyContinue copy (Join-Path $root "dummydll/vgaoem.fon") (Join-Path $dst "dummydll/SYSTEM/VGAOEM.FON") -ErrorAction SilentlyContinue copy (Join-Path $root "dummydll/dummydll.dll") (Join-Path $dst "dummydll/SYSTEM32/WOWEXEC.EXE") -ErrorAction SilentlyContinue Copy-Item -Filter * -Path (Join-Path $dst "dummydll/*") -Recurse -Destination (Join-Path $dst "WINDOWS/") -ErrorAction SilentlyContinue ni (Join-Path $dst "WINDOWS/SYSTEM/MIDIMAP.CFG") -ErrorAction SilentlyContinue > $null ================================================ FILE: typelib/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(typelib SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/typelib.def typelib.dll16.obj) include_directories(../wine ${CMAKE_BINARY_DIR}) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(typelib.dll16 typelib) target_link_libraries(typelib libwine winecrt0 krnl386 ole2 ole2disp) set_target_properties(typelib PROPERTIES SUFFIX ".dll16") ================================================ FILE: typelib/Makefile.in ================================================ MODULE = typelib.dll16 IMPORTS = oleaut32 advapi32 EXTRADLLFLAGS = -m16 -Wb,--main-module,oleaut32.dll C_SRCS = typelib.c ================================================ FILE: typelib/typelib.c ================================================ /* * TYPELIB 16bit part. * * Copyright 1997 Marcus Meissner * Copyright 1999 Rein Klazes * Copyright 2000 Francois Jacques * Copyright 2001 Huw D M Davies for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include "winerror.h" #include "windef.h" #include "winbase.h" #include "wine/winbase16.h" #include "winreg.h" #include "winuser.h" #include "objbase.h" #include "oleauto.h" #include "wine/debug.h" #include "../ole2/ifs.h" #include "../ole2disp/ole2disp.h" WINE_DEFAULT_DEBUG_CHANNEL(ole); /************************************************************************* * TYPELIB {TYPELIB} * * This dll is the 16 bit version of the Typelib API, part the original * implementation of Ole automation. It and its companion ole2disp.dll were * superseded by oleaut32.dll which provides 32 bit implementations of these * functions and greatly extends the OLE API. * * Winelib developers cannot use these functions directly, they are implemented * solely for backwards compatibility with existing legacy applications. * * SEE ALSO * oleaut32(), ole2disp(). */ /**************************************************************************** * QueryPathOfRegTypeLib [TYPELIB.14] * * Get the registry key of a registered type library. * * RETURNS * Success: S_OK. path is updated with the key name * Failure: E_FAIL, if guid was not found in the registry * * NOTES * The key takes the form "Classes\Typelib\\.\\win16\" */ HRESULT WINAPI QueryPathOfRegTypeLib16( REFGUID guid, /* [in] Guid to get the key name for */ WORD wMaj, /* [in] Major version */ WORD wMin, /* [in] Minor version */ LCID lcid, /* [in] Locale Id */ /* BSTR16 */SEGPTR *path) /* [out] Destination for the registry key name */ { char xguid[80]; char typelibkey[100],pathname[260]; LONG plen; char *ret; TRACE("\n"); *path = 0; if (HIWORD(guid)) { sprintf( typelibkey, "SOFTWARE\\Classes\\Typelib\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\%d.%d\\%x\\win16", guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7], wMaj,wMin,lcid); } else { sprintf(xguid,"",(DWORD)guid); FIXME("(%s,%d,%d,0x%04x,%p),can't handle non-string guids.\n",xguid,wMaj,wMin,lcid,path); return E_FAIL16; } plen = sizeof(pathname); if (RegQueryValue16(HKEY_LOCAL_MACHINE,typelibkey,pathname,&plen) || !*pathname) { /* try again without lang specific id */ if (SUBLANGID(lcid)) return QueryPathOfRegTypeLib16(guid,wMaj,wMin,PRIMARYLANGID(lcid),path); plen = sizeof(pathname); if (RegQueryValue16(HKEY_CURRENT_USER, typelibkey, pathname, &plen) || !*pathname) { sprintf(typelibkey, "Typelib\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\%d.%d\\%x\\win16", guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7], wMaj, wMin, lcid); plen = sizeof(pathname); if (RegQueryValue16(HKEY_LOCAL_MACHINE, typelibkey, pathname, &plen)) { if (lcid) return QueryPathOfRegTypeLib16(guid, wMaj, wMin, 0, path); FIXME("key %s not found\n", typelibkey); return E_FAIL16; } } } *path = SysAllocString16(pathname); if (!*path) return E_FAIL16; return S_OK; } /* yeah */ HRESULT WINAPI LoadTypeLib16Impl(const OLECHAR *szFile, ITypeLib * *pptLib); /****************************************************************************** * LoadTypeLib [TYPELIB.3] * * Load and register a type library. * * RETURNS * Success: S_OK. pptLib contains the type libraries ITypeLib interface. * Failure: An HRESULT error code. * * NOTES * Both parameters are FAR pointers. */ HRESULT WINAPI LoadTypeLib16( LPSTR szFile, /* [in] Name of file to load from */ SEGPTR* pptLib) /* [out] Destination for loaded ITypeLib interface */ { LPWSTR w; HRESULT result; ITypeLib *ptLib = NULL; TRACE("(%s,%p)\n",debugstr_a(szFile),pptLib); w = strdupAtoW(szFile); result = hresult32_16(LoadTypeLib16Impl(w, &ptLib)); HeapFree(GetProcessHeap(), 0, w); *pptLib = iface32_16(&IID_ITypeLib, ptLib); return result; } /*********************************************************************** * LHashValOfNameSys (TYPELIB.4) */ ULONG WINAPI LHashValOfNameSys16( SYSKIND skind, LCID lcid, LPCSTR lpStr) { return LHashValOfNameSysA( skind, lcid, lpStr ); } /**************************************************************************** * OaBuildVersion (TYPELIB.15) * * Get the Ole Automation build version. * * PARAMS * None * * RETURNS * The build version. * * NOTES * Known typelib.dll versions: *| OLE Ver. Comments Date Build Ver. *| -------- ------------------------- ---- --------- *| OLE 2.01 Call not available 1993 N/A *| OLE 2.02 1993-94 02 3002 *| OLE 2.03 23 730 *| OLE 2.03 03 3025 *| OLE 2.03 W98 SE orig. file !! 1993-95 10 3024 *| OLE 2.1 NT 1993-95 ?? ??? *| OLE 2.3.1 W95 23 700 *| OLE2 4.0 NT4SP6 1993-98 40 4277 *| OLE 2.1 W2K 2000 10 3029 *| OLE 2.1 WXP 2002 10 3029 *| OLE 2.1 Vista 2007 10 3029 */ DWORD WINAPI OaBuildVersion16(void) { /* FIXME: I'd like to return the highest currently known version value * in case the user didn't force a --winver, but I don't know how * to retrieve the "versionForced" info from misc/version.c :( * (this would be useful in other places, too) */ FIXME("If you get version error messages, please report them\n"); switch(GetVersion() & 0x8000ffff) /* mask off build number */ { case 0x80000a03: /* WIN31 */ return MAKELONG(3027, 3); /* WfW 3.11 */ case 0x80000004: /* WIN95 */ return MAKELONG(700, 23); /* Win95A */ case 0x80000a04: /* WIN98 */ return MAKELONG(3024, 10); /* W98 SE */ case 0x00000004: /* NT4 */ return MAKELONG(4277, 40); /* NT4 SP6 */ case 0x00000005: /* W2K */ return MAKELONG(3029, 10); /* W2K SP4 */ case 0x00000105: /* WXP */ return MAKELONG(3029, 10); /* WXP SP2 */ case 0x00000006: /* Vista */ case 0x00000106: case 0x00000206: /* W10 */ return MAKELONG(3029, 10); /* Vista */ default: FIXME("Version value not known yet. Please investigate it!\n"); return MAKELONG(3027, 3); /* WfW 3.11 */ } } HRESULT WINAPI RegisterTypeLibForUser(ITypeLib * ptlib, OLECHAR * szFullPath, OLECHAR * szHelpDir); HRESULT WINAPI RegisterTypeLib16(SEGPTR /* ITypeLib* */ptlib, LPCOLESTR16 szFullPath, LPCOLESTR16 szHelpDir) { LPOLESTR w1 = strdupAtoW(szFullPath); LPOLESTR w2 = strdupAtoW(szHelpDir); ITypeLib *lib32 = (ITypeLib*)iface16_32(&IID_ITypeLib, ptlib); HRESULT result = RegisterTypeLibForUser(lib32, w1, w2); HeapFree(GetProcessHeap(), 0, w1); HeapFree(GetProcessHeap(), 0, w2); return hresult32_16(result); } HRESULT WINAPI LoadRegTypeLib16(REFGUID guid, unsigned short wVerMajor, unsigned short wVerMinor, LCID lcid, SEGPTR /* ITypeLib* */ *lplptlib) { ITypeLib *ptlib = NULL; HRESULT result; SEGPTR bstr16 = NULL; if (SUCCEEDED(QueryPathOfRegTypeLib16(guid, wVerMajor, wVerMinor, lcid, &bstr16))) { result = LoadTypeLib16((LPSTR)MapSL(bstr16), lplptlib); SysFreeString16(bstr16); if (SUCCEEDED(result)) return result; } result = LoadRegTypeLib(guid, wVerMajor, wVerMinor, lcid, &ptlib); *lplptlib = iface32_16(&IID_ITypeLib, ptlib); return hresult32_16(result); } HRESULT WINAPI CreateTypeLib2Impl(SYSKIND syskind, LPCOLESTR szFile, ICreateTypeLib2** ppctlib); HRESULT WINAPI CreateTypeLib16( SYSKIND syskind, LPCOLESTR16 szFile, SEGPTR* ppctlib ) { ICreateTypeLib2 *lib2; ICreateTypeLib *lib1; LPCOLESTR wszFile = strdupAtoW(szFile); HRESULT result; result = CreateTypeLib2Impl(syskind, wszFile, &lib2); if (FAILED(result)) { return hresult32_16(result); } HeapFree(GetProcessHeap(), 0, wszFile); result = lib2->lpVtbl->QueryInterface(lib2, &IID_ICreateTypeLib, &lib1); if (FAILED(result)) { return hresult32_16(result); } lib2->lpVtbl->Release(lib2); *ppctlib = iface32_16(&IID_ICreateTypeLib, lib1); return hresult32_16(result); } ================================================ FILE: typelib/typelib.def ================================================ ; File generated automatically from typelib\typelib.dll16.spec; do not edit! LIBRARY typelib.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: typelib/typelib.dll16.spec ================================================ 2 pascal CreateTypeLib(word str ptr) CreateTypeLib16 3 pascal LoadTypeLib(ptr ptr) LoadTypeLib16 4 pascal LHashValOfNameSys(word long str) LHashValOfNameSys16 5 variable _IID_ICreateTypeInfo(0x00020405 0x00000000 0x000000c0 0x46000000) 6 variable _IID_ICreateTypeLib(0x00020406 0x00000000 0x000000c0 0x46000000) 7 variable _IID_ITypeComp(0x00020403 0x00000000 0x000000c0 0x46000000) 8 variable _IID_ITypeInfo(0x00020401 0x00000000 0x000000c0 0x46000000) 9 variable _IID_ITypeLib(0x00020402 0x00000000 0x000000c0 0x46000000) 10 pascal RegisterTypeLib(segptr str str) RegisterTypeLib16 11 pascal LoadRegTypeLib(ptr word word long ptr) LoadRegTypeLib16 14 pascal QueryPathOfRegTypeLib(ptr word word long ptr) QueryPathOfRegTypeLib16 15 pascal OaBuildVersion() OaBuildVersion16 ================================================ FILE: typelib/typelib.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 typelib {1AAA3531-513D-4A96-9795-D48CF33BF516} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)ole2disp.lib;$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; oleaut32.lib;advapi32.lib;%(AdditionalDependencies) true typelib.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false typelib.def $(OutDir)ole2disp.lib;$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; oleaut32.lib;advapi32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" TYPELIB > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: uninstall.reg ================================================ Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NtVdm64\OTVDM] [-HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\NtVdm64\OTVDM] [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NtVdm64\0OTVDM] [-HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\NtVdm64\0OTVDM] ================================================ FILE: user/CMakeLists.txt ================================================ file(GLOB SOURCE *.c) add_library(user SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/user.def user.exe16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp -D_WIN32_WINNT=0x0A00) spec_build(user.exe16 USER ARG --heap 65520) target_link_libraries(user libwine winecrt0 krnl386 Mpr.lib UxTheme.lib ole32.lib version.lib) set_target_properties(user PROPERTIES SUFFIX ".exe16") ================================================ FILE: user/bidi.c ================================================ /* * Win16 BiDi functions * Copyright 2000 Erez Volk * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * NOTE: Right now, most of these functions do nothing. */ #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "wine/winuser16.h" #include "winerror.h" #include "wine/debug.h" #include "user_private.h" WINE_DEFAULT_DEBUG_CHANNEL(user); /*********************************************************************** * ChangeDialogTemplate (USER.905) * FIXME: The prototypes of this function have not been found yet. */ LONG WINAPI ChangeDialogTemplate16(void) { FIXME("stub (no prototype)\n"); return 0; } /****************************************************************************** * ChangeKeyboardCodePage [USER.924] * Change the keyboard layouts to a new pair. * If the language IDs are set to -1, the language is not to be changed. */ DWORD WINAPI ChangeKeyboardCodePage16( UINT16 iLangLeft, UINT16 iLangRight ) { FIXME( "( %hu, %hu ): stub\n", iLangLeft, iLangRight ); return 0; } /****************************************************************************** * ChangeKeyboardLanguage [USER.912] * Change the keyboard layouts to a new pair. * * RETURNS * The old keyboard layout pair. */ DWORD WINAPI ChangeKeyboardLanguage16( UINT16 iLangLeft, UINT16 iLangRight ) { FIXME( "( %hu, %hu ): stub\n", iLangLeft, iLangRight ); return 0; } /****************************************************************************** * CreateDialogIndirectParamML [USER.916] */ HWND16 WINAPI CreateDialogIndirectParamML16( HINSTANCE16 hinstWnd, const void * lpvDlgTmp, HWND16 hwndOwner, DLGPROC16 dlgProc, LPARAM lParamInit, UINT16 iCodePage, UINT16 iLang, LPCSTR lpDlgName, HINSTANCE16 hinstLoad ) { FIXME( "( %04hx, %p, %04hx, %p, %08lx, %hu, %hu, %p, %04hx ): stub\n", hinstWnd, lpvDlgTmp, hwndOwner, dlgProc, lParamInit, iCodePage, iLang, lpDlgName, hinstLoad ); return 0; } /****************************************************************************** * DialogBoxIndirectParamML [USER.918] */ HWND16 WINAPI DialogBoxIndirectParamML16( HINSTANCE16 hinstWnd, HGLOBAL16 hglbDlgTemp, HWND16 hwndOwner, DLGPROC16 dlgprc, LPARAM lParamInit, UINT16 iCodePage, UINT16 iLang, LPCSTR lpDlgName, HINSTANCE16 hinstLoad ) { FIXME( "( %04hx, %04hx, %04hx, %p, %08lx, %hu, %hu, %p, %04hx ): stub\n", hinstWnd, hglbDlgTemp, hwndOwner, dlgprc, lParamInit, iCodePage, iLang, lpDlgName, hinstLoad ); return 0; } /****************************************************************************** * FindLanguageResource [USER.923] */ HRSRC16 WINAPI FindLanguageResource16( HINSTANCE16 hinst, LPCSTR lpRes, LPCSTR lpResType, UINT16 iLang ) { FIXME( "( %04hx, %p, %p, %hu ): stub\n", hinst, lpRes, lpResType, iLang ); return 0; } /****************************************************************************** * GetAppCodePage [USER.915] * Returns the code page and language of the window * * RETURNS * The low word contains the code page, the high word contains the resource language. */ DWORD WINAPI GetAppCodePage16( HWND16 hwnd ) { FIXME( "( %04hx ): stub\n", hwnd ); return 0; } /****************************************************************************** * GetBaseCodePage [USER.922] * Returns the base code page and resource language. * For example, Hebrew windows will return HebrewCodePage in the low word * and English in the high word. */ DWORD WINAPI GetBaseCodePage16( void ) { FIXME( ": stub\n" ); return 0; } /****************************************************************************** * GetCodePageSystemFont [USER.913] * Returns the stock font for the requested code page. */ HFONT16 WINAPI GetCodePageSystemFont16( UINT16 iFont, UINT16 iCodePage ) { FIXME( "( %hu, %hu ): stub\n", iFont, iCodePage ); return 1; } /****************************************************************************** * GetLanguageName [USER.907] * Returns the name of one language in (possibly) a different language. * Currently only handles language 0 (english). * * RETURNS * Success: The number of bytes copied to the buffer, not including the null. * Failure: 0 */ UINT WINAPI GetLanguageName16( UINT16 iLang, UINT16 iName, LPSTR lpszName, UINT16 cbBuffer ) { if ( (iLang == 0) && (iName == 0) ) { if ( !lpszName || cbBuffer < 8 ) { SetLastError( ERROR_INVALID_PARAMETER ); return 0; } strcpy( lpszName, "English" ); return 7; } FIXME( "( %hu, %hu, %p, %hu ): No BiDi16\n", iLang, iName, lpszName, cbBuffer ); return 0; } /****************************************************************************** * GetNumLanguages [USER.906] * Returns the number of languages in the system. */ UINT WINAPI GetNumLanguages16( void ) { FIXME( ": No Bidi16\n" ); return 1; } /****************************************************************************** * GetProcessDefaultLayout [USER.1001] * * Gets the default layout for parentless windows. * Right now, just returns 0 (left-to-right). * * RETURNS * Success: Nonzero * Failure: Zero */ BOOL16 WINAPI GetProcessDefaultLayout16( DWORD *pdwDefaultLayout ) { FIXME( "( %p ): no BiDi16\n", pdwDefaultLayout ); return GetProcessDefaultLayout( pdwDefaultLayout ); } /****************************************************************************** * LoadLanguageString [USER.919] * Loads a string for a specific language. * * RETURNS * SUCCESS: The length of the string loaded. * FAILURE: Zero. */ UINT16 WINAPI LoadLanguageString16( HINSTANCE16 hinst, UINT16 id, UINT16 iLang, LPSTR lpszText, INT16 nBytes ) { FIXME( "( %04hx, %hu, %hu, %p, %hd ): stub\n", hinst, id, iLang, lpszText, nBytes ); return 0; } /****************************************************************************** * LoadSystemLanguageString [USER.902] * Loads a string which is in one of the system language modules. * * RETURNS * Success: The length of the string loaded * Failure: Zero */ UINT WINAPI LoadSystemLanguageString16( HINSTANCE16 hinstCaller, UINT16 id, LPSTR lpszText, INT16 nBytes, UINT16 iLang ) { FIXME( "( %04hx, %hu, %p, %hd, %hu ): stub\n", hinstCaller, id, lpszText, nBytes, iLang ); return 0; } LONG WINAPI FindResourceEx16() { FIXME("stub(np)\n"); return 0; } LONG WINAPI GetClipboardCodePage16(WORD a1, WORD a2, WORD a3) { FIXME("stub(%04x,%04x,%04x)\n", a1, a2, a3); return 0; } LONG WINAPI ResetDialogTemplate16() { FIXME("stub(np)\n"); return 0; } LONG WINAPI GetLanguageResId16() { FIXME("stub(np)\n"); return 0; } LONG WINAPI CreateDialogParamML16() { FIXME("stub(np)\n"); return 0; } /*********************************************************************** * MessageBoxEx [USER.930] * The multilingual version of MessageBox. */ INT16 WINAPI MessageBoxEx16( HWND16 hwndParent, LPCSTR lpszText, LPCSTR lpszTitle, UINT16 fuStyle, UINT16 iLang ) { return MessageBoxExA(WIN_Handle32(hwndParent), lpszText, lpszTitle, fuStyle, iLang); } /*********************************************************************** * QueryCodePage [USER.914] * Query code page specific data. */ LRESULT WINAPI QueryCodePage16( UINT16 idxLang, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) { FIXME( "( %hu, %hu, %04hx, %08lx ): stub\n", idxLang, msg, wParam, lParam ); return 1; } /*********************************************************************** * SetAppCodePage [USER.920] * Set the code page and language of the window to new values. * * RETURNS * The low word contains the old code page, the high word contains * the old resource language. */ DWORD WINAPI SetAppCodePage16( HWND16 hwnd, UINT16 iCodePage, UINT16 iLang, UINT16 fRedraw ) { FIXME( "( %04hx, %hu, %hu, %hu ): stub\n", hwnd, iCodePage, iLang, fRedraw ); return 0; } /*********************************************************************** * SetDlgItemTextEx [USER.911] * Sets the title or text of a control in a dialog box. * Currently only works for language 0 (english) */ void WINAPI SetDlgItemTextEx16( HWND16 hwnd, INT16 id, LPCSTR lpszText, UINT16 iLang ) { FIXME( "( %04hx, %hd, %p, %hu ): stub\n", hwnd, id, lpszText, iLang ); } /****************************************************************************** * SetProcessDefaultLayout [USER.1000] * * Sets the default layout for parentless windows. * Right now, only accepts 0 (left-to-right). * * RETURNS * Success: Nonzero * Failure: Zero */ BOOL16 WINAPI SetProcessDefaultLayout16( DWORD dwDefaultLayout ) { FIXME( "( %08x ): No BiDi16\n", dwDefaultLayout ); return SetProcessDefaultLayout( dwDefaultLayout ); } /****************************************************************************** * SetWindowTextEx [USER.909] * Sets the given window's title to the specified text in the specified language. */ void WINAPI SetWindowTextEx16( HWND16 hwnd, LPCSTR lpsz, UINT16 iLang ) { FIXME( "( %04hx, %p, %hu ): stub\n", hwnd, lpsz, iLang ); SetWindowTextA(WIN_Handle32(hwnd), lpsz); } ================================================ FILE: user/comm.c ================================================ /* * DEC 93 Erik Bos * * Copyright 1996 Marcus Meissner * * Copyright 2001 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * History: * * Mar 31, 1999. Ove Kåven * - Implemented buffers and EnableCommNotification. * * Apr 3, 1999. Lawson Whitney * - Fixed the modem control part of EscapeCommFunction16. * * Mar 3, 1999. Ove Kåven * - Use port indices instead of unixfds for win16 * - Moved things around (separated win16 and win32 routines) * - Added some hints on how to implement buffers and EnableCommNotification. * * May 26, 1997. Fixes and comments by Rick Richardson [RER] * - ptr->fd wasn't getting cleared on close. * - GetCommEventMask() and GetCommError() didn't do much of anything. * IMHO, they are still wrong, but they at least implement the RXCHAR * event and return I/O queue sizes, which makes the app I'm interested * in (analog devices EZKIT DSP development system) work. * * August 12, 1997. Take a bash at SetCommEventMask - Lawson Whitney * * July 6, 1998. Fixes and comments by Valentijn Sessink * [V] * Oktober 98, Rein Klazes [RHK] * A program that wants to monitor the modem status line (RLSD/DCD) may * poll the modem status register in the commMask structure. I update the bit * in GetCommError, waiting for an implementation of communication events. * */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wine/winuser16.h" #include "user_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(comm); /* window's semi documented modem status register */ #define COMM_MSR_OFFSET 35 #define MSR_CTS 0x10 #define MSR_DSR 0x20 #define MSR_RI 0x40 #define MSR_RLSD 0x80 #define MSR_MASK (MSR_CTS|MSR_DSR|MSR_RI|MSR_RLSD) #define FLAG_LPT 0x80 #define MAX_PORTS 9 struct DosDeviceStruct { HANDLE handle; BOOL unget; int ungetchar; int evtchar; /* events */ int commerror, eventmask; /* buffers */ char *outbuf; unsigned obuf_size,obuf_head,obuf_tail; /* notifications */ HWND wnd; int n_read, n_write; /* save terminal states */ DCB16 dcb; /* pointer to unknown(==undocumented) comm structure */ SEGPTR seg_unknown; BYTE unknown[40]; HANDLE eventth; HANDLE writeth; HANDLE writeev; CRITICAL_SECTION writelock; BOOL exit; }; static struct DosDeviceStruct COM[MAX_PORTS]; static struct DosDeviceStruct LPT[MAX_PORTS]; static struct DosDeviceStruct *GetDeviceStruct(int index) { if ((index&0x7F)<=MAX_PORTS) { if (!(index&FLAG_LPT)) { if (COM[index].handle) return &COM[index]; } else { index &= 0x7f; if (LPT[index].handle) return &LPT[index]; } } return NULL; } static int WinError(void) { TRACE("errno = %d\n", errno); switch (errno) { default: return CE_IOE; } } static DWORD WINAPI eventth(LPVOID cid) { struct DosDeviceStruct *ptr = GetDeviceStruct(cid); DWORD evtmask = EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_PERR | EV_RING | EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY; DWORD temperror, mstat = 0; COMSTAT stat; DWORD count = -1; OVERLAPPED ov; int ret = 0; ZeroMemory(&ov, sizeof(ov)); ov.hEvent = CreateEventW(NULL, 0, 0, NULL); if(ov.hEvent == INVALID_HANDLE_VALUE) return -1; ClearCommError(ptr->handle, &temperror, &stat); SetCommMask(ptr->handle, evtmask); while (ptr->handle) { DWORD ret; if (!WaitCommEvent(ptr->handle, &evtmask, &ov)) { DWORD ret = 0, error = GetLastError(); if(error == ERROR_IO_PENDING) { if (!(ret = GetOverlappedResult(ptr->handle, &ov, &count, TRUE))) error = GetLastError(); } if (!ret && (error == ERROR_OPERATION_ABORTED)) break; } if (ptr->exit) break; if(GetCommModemStatus(ptr->handle, &mstat)) *((WORD *)(ptr->unknown + COMM_MSR_OFFSET)) = mstat; *(WORD*)(ptr->unknown) |= evtmask; if ((evtmask & ptr->eventmask) && ptr->wnd) PostMessageA(ptr->wnd, WM_COMMNOTIFY, cid, CN_EVENT); if (!ClearCommError(ptr->handle, &temperror, &stat)) { ret = -1; break; } // send cn_receive unconditionally since win31 has a 100ms timeout after // which it sends the notification even if the count is less than cbWriteNotify if ((ptr->n_read != -1) && ptr->n_read && stat.cbInQue && ptr->wnd) PostMessageA(ptr->wnd, WM_COMMNOTIFY, cid, CN_RECEIVE); if ((ptr->n_write != -1) && (ptr->n_write > stat.cbOutQue) && ptr->wnd) PostMessageA(ptr->wnd, WM_COMMNOTIFY, cid, CN_TRANSMIT); } CloseHandle(ov.hEvent); return ret; } static DWORD WINAPI writeth(LPVOID cid) { struct DosDeviceStruct *ptr = GetDeviceStruct(cid); OVERLAPPED write_ov = {0}; write_ov.hEvent = CreateEventW(NULL, 0, TRUE, NULL); HANDLE handles[] = {ptr->writeev, write_ov.hEvent}; while (ptr->handle) { DWORD ret; ret = WaitForSingleObjectEx(ptr->writeev, INFINITE, TRUE); if ((ret == WAIT_ABANDONED) || ptr->exit) break; if (ret == WAIT_OBJECT_0) { EnterCriticalSection(&ptr->writelock); int len, bleft = ((ptr->obuf_tail <= ptr->obuf_head) ? ptr->obuf_head : ptr->obuf_size) - ptr->obuf_tail; while (bleft) { if (!WriteFile(ptr->handle, ptr->outbuf + ptr->obuf_tail, bleft, &len, &write_ov)) { DWORD ret = 0, error = GetLastError(); if(error == ERROR_IO_PENDING) { LeaveCriticalSection(&ptr->writelock); while ((ret = WaitForMultipleObjects(2, handles, FALSE, INFINITE)) == WAIT_OBJECT_0) { if (ptr->exit) { CancelIo(ptr->handle); CloseHandle(write_ov.hEvent); return 0; } } EnterCriticalSection(&ptr->writelock); if (ret == (WAIT_OBJECT_0 + 1)) { if (!(ret = GetOverlappedResult(ptr->handle, &write_ov, &len, TRUE))) error = GetLastError(); } else if (ret == -1) { error = GetLastError(); ret = 0; } else ret = error; } if (!ret) { ERR("async write failed, error %d\n", error); ptr->commerror = CE_RXOVER; CancelIo(ptr->handle); break; } } TRACE("async write completed %d bytes\n",len); /* update the buffer pointers */ int prev = ((ptr->obuf_tail > ptr->obuf_head) ? ptr->obuf_size : 0) + ptr->obuf_head - ptr->obuf_tail; ptr->obuf_tail += len; if (ptr->obuf_tail >= ptr->obuf_size) ptr->obuf_tail = 0; /* write from output queue */ bleft = ((ptr->obuf_tail <= ptr->obuf_head) ? ptr->obuf_head : ptr->obuf_size) - ptr->obuf_tail; } LeaveCriticalSection(&ptr->writelock); } } CloseHandle(write_ov.hEvent); return 0; } /***************************************************************************** * COMM16_DCBtoDCB16 (Internal) */ static INT16 COMM16_DCBtoDCB16(const DCB *lpdcb, LPDCB16 lpdcb16) { if(lpdcb->BaudRate<0x10000) lpdcb16->BaudRate = lpdcb->BaudRate; else if(lpdcb->BaudRate==115200) lpdcb16->BaudRate = 57601; else { WARN("Baud rate can't be converted\n"); lpdcb16->BaudRate = 57601; } lpdcb16->ByteSize = lpdcb->ByteSize; lpdcb16->fParity = lpdcb->fParity; lpdcb16->Parity = lpdcb->Parity; lpdcb16->StopBits = lpdcb->StopBits; lpdcb16->RlsTimeout = 50; lpdcb16->CtsTimeout = 50; lpdcb16->DsrTimeout = 50; lpdcb16->fNull = 0; lpdcb16->fChEvt = 0; lpdcb16->fBinary = 1; lpdcb16->fDtrflow = (lpdcb->fDtrControl==DTR_CONTROL_HANDSHAKE); lpdcb16->fRtsflow = (lpdcb->fRtsControl==RTS_CONTROL_HANDSHAKE); lpdcb16->fOutxCtsFlow = lpdcb->fOutxCtsFlow; lpdcb16->fOutxDsrFlow = lpdcb->fOutxDsrFlow; lpdcb16->fDtrDisable = (lpdcb->fDtrControl==DTR_CONTROL_DISABLE); lpdcb16->fRtsDisable = (lpdcb->fDtrControl==RTS_CONTROL_DISABLE); lpdcb16->fInX = lpdcb->fInX; lpdcb16->fOutX = lpdcb->fOutX; /* lpdcb16->XonChar = lpdcb16->XoffChar = */ lpdcb16->XonLim = 10; lpdcb16->XoffLim = 10; return 0; } /************************************************************************** * BuildCommDCB (USER.213) * * According to the ECMA-234 (368.3) the function will return FALSE on * success, otherwise it will return -1. */ INT16 WINAPI BuildCommDCB16(LPCSTR device, LPDCB16 lpdcb) { /* "COM1:96,n,8,1" */ /* 012345 */ int port; DCB dcb; TRACE("(%s), ptr %p\n", device, lpdcb); if (strncasecmp(device,"COM",3)) return -1; port = device[3] - '0'; if (port-- == 0) { ERR("BUG ! COM0 can't exist!\n"); return -1; } device += 4; do { if (!*device) return -1; device++; } while (!isalnum(*device)); lpdcb->Id = port; dcb.DCBlength = sizeof(DCB); if (strchr(device,'=')) /* block new style */ return -1; if(!BuildCommDCBA(device,&dcb)) return -1; return COMM16_DCBtoDCB16(&dcb, lpdcb); } /***************************************************************************** * OpenComm (USER.200) */ INT16 WINAPI OpenComm16(LPCSTR device,UINT16 cbInQueue,UINT16 cbOutQueue) { int port; HANDLE handle; TRACE("%s, %d, %d\n", device, cbInQueue, cbOutQueue); if (strlen(device) < 4) return IE_BADID; port = device[3] - '0'; if (port-- == 0) ERR("BUG ! COM0 or LPT0 don't exist !\n"); if (!strncasecmp(device,"COM",3)) { if (COM[port].handle) return IE_OPEN; handle = CreateFileA(device, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0 ); if (handle == INVALID_HANDLE_VALUE) { ERR("Open %s failed Err %d\n", device, GetLastError()); return IE_HARDWARE; } else { memset(COM[port].unknown, 0, sizeof(COM[port].unknown)); COM[port].seg_unknown = 0; COM[port].handle = handle; COM[port].commerror = 0; COM[port].eventmask = 0; COM[port].evtchar = 0; /* FIXME: default? */ /* save terminal state */ GetCommState16(port,&COM[port].dcb); /* init priority characters */ COM[port].unget = FALSE; /* allocate buffers */ COM[port].obuf_size = cbOutQueue; COM[port].obuf_head = COM[port].obuf_tail = 0; COM[port].outbuf = HeapAlloc( GetProcessHeap(), 0, cbOutQueue); if(!COM[port].outbuf || !SetupComm(handle, cbInQueue, cbOutQueue)) { CloseHandle(COM[port].handle); return IE_MEMORY; } COMMTIMEOUTS cto = { MAXDWORD, 0, 0, 0, 1000 }; SetCommTimeouts(handle, &cto); COM[port].exit = FALSE; COM[port].writeev = CreateEventW(NULL, 0, 0, NULL); InitializeCriticalSection(&COM[port].writelock); COM[port].eventth = CreateThread(NULL, 0, eventth, (LPVOID)port, 0, NULL); COM[port].writeth = CreateThread(NULL, 0, writeth, (LPVOID)port, 0, NULL); return port; } } else if (!strncasecmp(device,"LPT",3)) { if (LPT[port].handle) return IE_OPEN; handle = CreateFileA(device, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0 ); if (handle == INVALID_HANDLE_VALUE) { return IE_HARDWARE; } else { LPT[port].handle = handle; LPT[port].commerror = 0; LPT[port].eventmask = 0; return port|FLAG_LPT; } } return IE_BADID; } /***************************************************************************** * CloseComm (USER.207) */ INT16 WINAPI CloseComm16(INT16 cid) { struct DosDeviceStruct *ptr; TRACE("cid=%d\n", cid); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no cid=%d found!\n", cid); return -1; } if (!(cid&FLAG_LPT)) { DWORD count; /* COM port */ UnMapLS( COM[cid].seg_unknown ); /* reset modem lines */ SetCommState16(&COM[cid].dcb); HeapFree(GetProcessHeap(), 0, ptr->outbuf); ptr->exit = TRUE; ptr->obuf_tail = ptr->obuf_head; SetCommMask(ptr->handle, 0); PurgeComm(ptr->handle, PURGE_TXABORT); SetEvent(ptr->writeev); WaitForSingleObject(ptr->eventth, 1000); WaitForSingleObject(ptr->writeth, 1000); CloseHandle(ptr->writeev); DeleteCriticalSection(&ptr->writelock); } if (!CloseHandle(ptr->handle)) { ptr->commerror = WinError(); /* FIXME: should we clear ptr->handle here? */ return -1; } else { ptr->commerror = 0; ptr->handle = 0; return 0; } } /***************************************************************************** * SetCommBreak (USER.210) */ INT16 WINAPI SetCommBreak16(INT16 cid) { struct DosDeviceStruct *ptr; TRACE("cid=%d\n", cid); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no cid=%d found!\n", cid); return -1; } return !SetCommBreak(ptr->handle); } /***************************************************************************** * ClearCommBreak (USER.211) */ INT16 WINAPI ClearCommBreak16(INT16 cid) { struct DosDeviceStruct *ptr; TRACE("cid=%d\n", cid); if (!(ptr = GetDeviceStruct(cid))) { FIXME("no cid=%d found!\n", cid); return -1; } return !ClearCommBreak(ptr->handle); } /***************************************************************************** * EscapeCommFunction (USER.214) */ LONG WINAPI EscapeCommFunction16(UINT16 cid,UINT16 nFunction) { struct DosDeviceStruct *ptr; TRACE("cid=%d, function=%d\n", cid, nFunction); switch(nFunction) { case GETMAXCOM: TRACE("GETMAXCOM\n"); return 4; /* FIXME */ case GETMAXLPT: TRACE("GETMAXLPT\n"); return FLAG_LPT + 3; /* FIXME */ case GETBASEIRQ: TRACE("GETBASEIRQ\n"); /* FIXME: use tables */ /* just fake something for now */ if (cid & FLAG_LPT) { /* LPT1: irq 7, LPT2: irq 5 */ return (cid & 0x7f) ? 5 : 7; } else { /* COM1: irq 4, COM2: irq 3, COM3: irq 4, COM4: irq 3 */ return 4 - (cid & 1); } } if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no cid=%d found!\n", cid); return -1; } switch (nFunction) { case RESETDEV: case CLRDTR: case CLRRTS: case SETDTR: case SETRTS: case SETXOFF: case SETXON: if(EscapeCommFunction(ptr->handle,nFunction)) return 0; else { ptr->commerror = WinError(); return -1; } case CLRBREAK: case SETBREAK: default: WARN("(cid=%d,nFunction=%d): Unknown function\n", cid, nFunction); } return -1; } /***************************************************************************** * FlushComm (USER.215) */ INT16 WINAPI FlushComm16(INT16 cid,INT16 fnQueue) { DWORD queue; struct DosDeviceStruct *ptr; TRACE("cid=%d, queue=%d\n", cid, fnQueue); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no cid=%d found!\n", cid); return -1; } switch (fnQueue) { case 0: queue = PURGE_TXABORT; ptr->obuf_tail = ptr->obuf_head; break; case 1: queue = PURGE_RXABORT; break; default: WARN("(cid=%d,fnQueue=%d):Unknown queue\n", cid, fnQueue); return -1; } if (!PurgeComm(ptr->handle,queue)) { ptr->commerror = WinError(); return -1; } else { ptr->commerror = 0; return 0; } } /******************************************************************** * GetCommError (USER.203) */ INT16 WINAPI GetCommError16(INT16 cid,LPCOMSTAT16 lpStat) { DWORD temperror; struct DosDeviceStruct *ptr; if ((UINT16)cid >= 256) return 0; if ((ptr = GetDeviceStruct(cid)) == NULL) { /* Some programs frequently call GetCommError(0, ) */ /* FIXME("no handle for cid = %0x!\n",cid); */ return CE_MODE; } if (cid&FLAG_LPT) { WARN(" cid %d not comm port\n",cid); return CE_MODE; } if (lpStat) { COMSTAT stat; if (!ClearCommError(ptr->handle, &temperror, &stat)) return CE_MODE; lpStat->status = *((BYTE *)&stat); lpStat->cbInQue = stat.cbInQue + ptr->unget; lpStat->cbOutQue = stat.cbOutQue; TRACE("cid %d, error %d, stat %d in %d out %d\n", cid, ptr->commerror, lpStat->status, lpStat->cbInQue, lpStat->cbOutQue); } else { if (!ClearCommError(ptr->handle, &temperror, NULL)) return CE_MODE; TRACE("cid %d, error %d, lpStat NULL\n", cid, ptr->commerror); } temperror |= ptr->commerror; ptr->commerror = 0; return(temperror); } /***************************************************************************** * SetCommEventMask (USER.208) */ SEGPTR WINAPI SetCommEventMask16(INT16 cid,UINT16 fuEvtMask) { struct DosDeviceStruct *ptr; TRACE("cid %d,mask %d\n",cid,fuEvtMask); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no handle for cid = %0x!\n",cid); return 0; } ptr->eventmask = fuEvtMask; if (cid&FLAG_LPT) { WARN(" cid %d not comm port\n",cid); return 0; } if (!COM[cid].seg_unknown) COM[cid].seg_unknown = MapLS( COM[cid].unknown ); return COM[cid].seg_unknown; } /***************************************************************************** * GetCommEventMask (USER.209) */ UINT16 WINAPI GetCommEventMask16(INT16 cid,UINT16 fnEvtClear) { struct DosDeviceStruct *ptr; WORD events; TRACE("cid %d, mask %d\n", cid, fnEvtClear); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no handle for cid = %0x!\n",cid); return 0; } if (cid&FLAG_LPT) { WARN(" cid %d not comm port\n",cid); return 0; } events = *(WORD*)(COM[cid].unknown) & COM[cid].eventmask; *(WORD*)(COM[cid].unknown) &= ~fnEvtClear; return events; } /***************************************************************************** * SetCommState (USER.201) */ INT16 WINAPI SetCommState16(LPDCB16 lpdcb) { struct DosDeviceStruct *ptr; DCB dcb; TRACE("cid %d, ptr %p\n", lpdcb->Id, lpdcb); if ((ptr = GetDeviceStruct(lpdcb->Id)) == NULL) { FIXME("no handle for cid = %0x!\n",lpdcb->Id); return -1; } memset(&dcb,0,sizeof(dcb)); dcb.DCBlength = sizeof(dcb); /* * according to MSDN, we should first interpret lpdcb->BaudRate as follows: * 1. if the baud rate is a CBR constant, interpret it. * 2. if it is greater than 57600, the baud rate is 115200 * 3. use the actual baudrate * steps 2 and 3 are equivalent to 16550 baudrate divisor = 115200/BaudRate */ switch(lpdcb->BaudRate) { case CBR_110: dcb.BaudRate = 110; break; case CBR_300: dcb.BaudRate = 300; break; case CBR_600: dcb.BaudRate = 600; break; case CBR_1200: dcb.BaudRate = 1200; break; case CBR_2400: dcb.BaudRate = 2400; break; case CBR_4800: dcb.BaudRate = 4800; break; case CBR_9600: dcb.BaudRate = 9600; break; case CBR_14400: dcb.BaudRate = 14400; break; case CBR_19200: dcb.BaudRate = 19200; break; case CBR_38400: dcb.BaudRate = 38400; break; case CBR_56000: dcb.BaudRate = 56000; break; case CBR_128000: dcb.BaudRate = 128000; break; case CBR_256000: dcb.BaudRate = 256000; break; default: if(lpdcb->BaudRate>57600) dcb.BaudRate = 115200; else dcb.BaudRate = lpdcb->BaudRate; } dcb.ByteSize=lpdcb->ByteSize; dcb.StopBits=lpdcb->StopBits; dcb.fBinary = 1; dcb.fParity=lpdcb->fParity; dcb.Parity=lpdcb->Parity; dcb.fOutxCtsFlow = lpdcb->fOutxCtsFlow; dcb.fOutxDsrFlow = lpdcb->fOutxDsrFlow; dcb.fDtrControl = DTR_CONTROL_ENABLE; if (lpdcb->fDtrflow) dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; if (lpdcb->fDtrDisable) dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fRtsControl = RTS_CONTROL_ENABLE; if (lpdcb->fRtsflow) dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; if (lpdcb->fRtsDisable) dcb.fRtsControl = RTS_CONTROL_DISABLE; ptr->evtchar = lpdcb->EvtChar; dcb.fInX = lpdcb->fInX; dcb.fOutX = lpdcb->fOutX; if (!SetCommState(ptr->handle,&dcb)) { ptr->commerror = WinError(); return -1; } else { ptr->commerror = 0; return 0; } } /***************************************************************************** * GetCommState (USER.202) */ INT16 WINAPI GetCommState16(INT16 cid, LPDCB16 lpdcb) { struct DosDeviceStruct *ptr; DCB dcb; TRACE("cid %d, ptr %p\n", cid, lpdcb); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no handle for cid = %0x!\n",cid); return -1; } if (!GetCommState(ptr->handle,&dcb)) { ptr->commerror = WinError(); return -1; } lpdcb->Id = cid; COMM16_DCBtoDCB16(&dcb,lpdcb); lpdcb->EvtChar = ptr->evtchar; return 0; } /***************************************************************************** * TransmitCommChar (USER.206) */ INT16 WINAPI TransmitCommChar16(INT16 cid,CHAR chTransmit) { struct DosDeviceStruct *ptr; TRACE("cid %d, data %d\n", cid, chTransmit); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no handle for cid = %0x!\n",cid); return -1; } return TransmitCommChar(ptr->handle, chTransmit) ? 0 : -1; } /***************************************************************************** * UngetCommChar (USER.212) */ INT16 WINAPI UngetCommChar16(INT16 cid,CHAR chUnget) { struct DosDeviceStruct *ptr; TRACE("cid %d (char %d)\n", cid, chUnget); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no handle for cid = %0x!\n",cid); return -1; } if (ptr->unget) { /* character already queued */ return -1; } ptr->ungetchar = chUnget; ptr->unget = TRUE; ptr->commerror = 0; return 0; } /***************************************************************************** * ReadComm (USER.204) */ INT16 WINAPI ReadComm16(INT16 cid,LPSTR lpvBuf,INT16 cbRead) { int length; struct DosDeviceStruct *ptr; LPSTR orgBuf = lpvBuf; OVERLAPPED ov; DWORD count = -1; ZeroMemory(&ov, sizeof(ov)); ov.hEvent = CreateEventW(NULL, 0, 0, NULL); if(ov.hEvent == INVALID_HANDLE_VALUE) return -1; TRACE("cid %d, ptr %p, length %d\n", cid, lpvBuf, cbRead); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no handle for cid = %0x!\n",cid); return -1; } if (ptr->unget) { *orgBuf = ptr->ungetchar; orgBuf++; cbRead--; } if (!ReadFile(ptr->handle, orgBuf, cbRead, &length, &ov)) { if (GetLastError() == ERROR_IO_PENDING) GetOverlappedResult(ptr->handle, &ov, &length, TRUE); } CloseHandle(ov.hEvent); if (ptr->unget) { ptr->unget = FALSE; length++; } if (length) TRACE("%d bytes read\n", length); return length; } /***************************************************************************** * WriteComm (USER.205) */ INT16 WINAPI WriteComm16(INT16 cid, LPSTR lpvBuf, INT16 cbWrite) { int length; struct DosDeviceStruct *ptr; TRACE("cid %d, ptr %p, length %d\n", cid, lpvBuf, cbWrite); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no handle for cid = %0x!\n",cid); return -1; } if (cid&FLAG_LPT) WriteFile(ptr->handle, lpvBuf, cbWrite, &length, NULL); else { int count; length = 0; EnterCriticalSection(&ptr->writelock); while (length < cbWrite) { count = ((ptr->obuf_tail > ptr->obuf_head) ? (ptr->obuf_tail-1) : ptr->obuf_size) - ptr->obuf_head; if (!count) break; if ((cbWrite - length) < count) count = cbWrite - length; memcpy(ptr->outbuf + ptr->obuf_head, lpvBuf, count); ptr->obuf_head += count; if (ptr->obuf_head >= ptr->obuf_size) ptr->obuf_head = 0; lpvBuf += count; length += count; } LeaveCriticalSection(&ptr->writelock); SetEvent(ptr->writeev); } if (length < cbWrite) { ptr->commerror = CE_TXFULL; return -length; } return length; } /*********************************************************************** * EnableCommNotification (USER.245) */ BOOL16 WINAPI EnableCommNotification16( INT16 cid, HWND16 hwnd, INT16 cbWriteNotify, INT16 cbOutQueue ) { struct DosDeviceStruct *ptr; TRACE("(%d, %x, %d, %d)\n", cid, hwnd, cbWriteNotify, cbOutQueue); if ((ptr = GetDeviceStruct(cid)) == NULL) { FIXME("no handle for cid = %0x!\n",cid); return -1; } ptr->wnd = WIN_Handle32( hwnd ); ptr->n_read = cbWriteNotify; ptr->n_write = cbOutQueue; return TRUE; } ================================================ FILE: user/dde.c ================================================ /* * Shell DDE Handling * * Copyright 2004 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #define COBJMACROS #include "windef.h" #include "winbase.h" #include "winuser.h" #include "ddeml.h" #include "shellapi.h" #include "shobjidl.h" #include "shlwapi.h" /* #include "shell32_main.h" */ #include "wine/debug.h" /* winnt.h */ #define __WINE_ALLOC_SIZE(x) #include "wine/heap.h" #include "wine/unicode.h" #define ARRAY_SIZE ARRAYSIZE #include "shlobj.h" #pragma comment(lib, "shlwapi.lib") static inline WCHAR *strndupW(const WCHAR *src, DWORD len) { WCHAR *dest; if (!src) return NULL; dest = heap_alloc((len + 1) * sizeof(*dest)); if (dest) { memcpy(dest, src, len * sizeof(WCHAR)); dest[len] = '\0'; } return dest; } WINE_DEFAULT_DEBUG_CHANNEL(shell); /* String handles */ static HSZ hszProgmanTopic; static HSZ hszProgmanService; static HSZ hszAsterisk; static HSZ hszShell; static HSZ hszAppProperties; static HSZ hszFolders; static HSZ hszGroups; /* DDE Instance ID */ static DWORD dwDDEInst; static const char *debugstr_hsz( HSZ hsz ) { WCHAR buffer[256]; if (!DdeQueryStringW( dwDDEInst, hsz, buffer, ARRAY_SIZE(buffer), CP_WINUNICODE )) return ""; return debugstr_w( buffer ); } static inline BOOL Dde_OnConnect(HSZ hszTopic, HSZ hszService) { if ((hszTopic == hszProgmanTopic) && (hszService == hszProgmanService)) return TRUE; if ((hszTopic == hszProgmanTopic) && (hszService == hszAppProperties)) return TRUE; if ((hszTopic == hszShell) && (hszService == hszFolders)) return TRUE; if ((hszTopic == hszShell) && (hszService == hszAppProperties)) return TRUE; return FALSE; } static inline void Dde_OnConnectConfirm(HCONV hconv, HSZ hszTopic, HSZ hszService) { TRACE( "%p %s %s\n", hconv, debugstr_hsz(hszTopic), debugstr_hsz(hszService) ); } static HSZPAIR wildarr[5]; static HDDEDATA hddewild = 0; static inline HDDEDATA Dde_OnWildConnect(HSZ hszTopic, HSZ hszService) { if (!hddewild) { wildarr[0].hszSvc = hszProgmanService; wildarr[0].hszTopic = hszProgmanTopic; wildarr[1].hszSvc = hszAppProperties; wildarr[1].hszTopic = hszProgmanTopic; wildarr[2].hszSvc = hszFolders; wildarr[2].hszTopic = hszShell; wildarr[3].hszSvc = hszAppProperties; wildarr[3].hszTopic = hszShell; wildarr[4].hszSvc = 0; wildarr[4].hszTopic = 0; hddewild = DdeCreateDataHandle(dwDDEInst, &wildarr, sizeof(wildarr), 0, 0, 0, 0); } if (hszTopic || hszService) return (HDDEDATA)FALSE; return hddewild; } /* Returned string must be freed by caller */ static WCHAR *get_programs_path(const WCHAR *name) { static const WCHAR slashW[] = {'\\',0}; WCHAR *path; WCHAR programs[MAX_PATH]; WCHAR clnname[MAX_PATH]; int len; wcsncpy(clnname, name, MAX_PATH); PathCleanupSpec(NULL, clnname); SHGetFolderPathW(NULL, CSIDL_PROGRAMS, NULL, 0, &programs); len = lstrlenW(programs) + 1 + lstrlenW(name); path = heap_alloc((len + 1) * sizeof(*path)); lstrcpyW(path, programs); lstrcatW(path, slashW); lstrcatW(path, clnname); return path; } /* Returned string must be freed by caller */ static WCHAR *get_common_programs_path(const WCHAR *name) { static const WCHAR slashW[] = {'\\',0}; WCHAR *path; WCHAR programs[MAX_PATH]; WCHAR clnname[MAX_PATH]; int len; wcsncpy(clnname, name, MAX_PATH); PathCleanupSpec(NULL, clnname); SHGetFolderPathW(NULL, CSIDL_COMMON_PROGRAMS, NULL, 0, &programs); len = lstrlenW(programs) + 1 + lstrlenW(name); path = heap_alloc((len + 1) * sizeof(*path)); lstrcpyW(path, programs); lstrcatW(path, slashW); lstrcatW(path, clnname); return path; } static inline HDDEDATA Dde_OnRequest(UINT uFmt, HCONV hconv, HSZ hszTopic, HSZ hszItem) { if ((hszTopic == hszProgmanTopic) && uFmt == CF_TEXT) { if ((hszItem == hszGroups || hszItem == hszProgmanService)) { static const WCHAR asteriskW[] = {'*',0}; static const WCHAR newlineW[] = {'\r','\n',0}; static const WCHAR dotW[] = {'.',0}; static const WCHAR dotdotW[] = {'.','.',0}; static const WCHAR placeholdW[] = {'x',0}; WCHAR *programs; WIN32_FIND_DATAW finddata; HANDLE hfind; int len, plen; WCHAR *groups_data = heap_alloc(sizeof(WCHAR)); char *groups_dataA; HDDEDATA ret; groups_data[0] = 0; len = 1; programs = get_programs_path(placeholdW); // PathCleanupSpec will remove the * so use a placeholder plen = wcslen(programs); programs[plen - 1] = '*'; hfind = FindFirstFileW(programs, &finddata); if (hfind != INVALID_HANDLE_VALUE) { do { if ((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && lstrcmpW(finddata.cFileName, dotW) && lstrcmpW(finddata.cFileName, dotdotW)) { len += lstrlenW(finddata.cFileName) + 2; groups_data = heap_realloc(groups_data, len * sizeof(WCHAR)); lstrcatW(groups_data, finddata.cFileName); lstrcatW(groups_data, newlineW); } } while (FindNextFileW(hfind, &finddata)); FindClose(hfind); } programs = get_common_programs_path(placeholdW); // PathCleanupSpec will remove the * so use a placeholder plen = wcslen(programs); programs[plen - 1] = '*'; hfind = FindFirstFileW(programs, &finddata); if (hfind != INVALID_HANDLE_VALUE) { do { if ((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && lstrcmpW(finddata.cFileName, dotW) && lstrcmpW(finddata.cFileName, dotdotW)) { len += lstrlenW(finddata.cFileName) + 2; groups_data = heap_realloc(groups_data, len * sizeof(WCHAR)); lstrcatW(groups_data, finddata.cFileName); lstrcatW(groups_data, newlineW); } } while (FindNextFileW(hfind, &finddata)); FindClose(hfind); } len = WideCharToMultiByte(CP_ACP, 0, groups_data, -1, NULL, 0, NULL, NULL); groups_dataA = heap_alloc(len * sizeof(WCHAR)); WideCharToMultiByte(CP_ACP, 0, groups_data, -1, groups_dataA, len, NULL, NULL); ret = DdeCreateDataHandle(dwDDEInst, (BYTE *)groups_dataA, len, 0, hszItem, uFmt, 0); heap_free(groups_dataA); heap_free(groups_data); heap_free(programs); return ret; } else { static const WCHAR lnkW[] = {'\\','*','.','l','n','k',0}; char *group; WCHAR *find, *groupW; WCHAR path[MAX_PATH]; WIN32_FIND_DATAW finddata; HANDLE hfind; DWORD len = DdeQueryStringA(dwDDEInst, hszItem, NULL, 0, CP_WINANSI); if (!len) return DDE_FNOTPROCESSED; group = heap_alloc(len + 1); DdeQueryStringA(dwDDEInst, hszItem, (BYTE *)group, len + 1, CP_WINANSI); groupW = heap_alloc((len + 1) * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, group, -1, groupW, (len + 1) * sizeof(WCHAR)); find = get_programs_path(groupW); if (!GetShortPathNameW(find, path, MAX_PATH)) { find = get_common_programs_path(groupW); if (!GetShortPathNameW(find, path, MAX_PATH)) { heap_free(find); heap_free(groupW); heap_free(group); return NULL; } } heap_free(groupW); find = heap_realloc(find, (lstrlenW(find) + lstrlenW(lnkW) + 1) * sizeof(WCHAR)); lstrcatW(find, lnkW); hfind = FindFirstFileW(find, &finddata); int efind = GetLastError(); heap_free(find); if ((hfind != INVALID_HANDLE_VALUE) || (efind == ERROR_FILE_NOT_FOUND)) { int count = 0; int pos = 0; int elen; int pathlen = lstrlenW(path); path[pathlen++] = '\\'; path[pathlen] = 0; char *data, *ret, name[MAX_PATH]; IShellLinkW *link = 0; IPersistFile *file; HRESULT hres; if (efind != ERROR_FILE_NOT_FOUND) { hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkA, (void **)&link); if (!FAILED(hres)) hres = IShellLinkA_QueryInterface(link, &IID_IPersistFile, (void **)&file); else if (FAILED(hres)) { if (link) IShellLinkA_Release(link); FindClose(hfind); heap_free(group); return NULL; } data = heap_alloc(MAX_PATH * 4 + INFOTIPSIZE); do { int icon, hotkey, min; WCHAR lnkpath[MAX_PATH]; char exepath[MAX_PATH], iconpath[MAX_PATH], workdir[MAX_PATH], args[INFOTIPSIZE]; len = lstrlenW(finddata.cFileName); lstrcpyW(lnkpath, path); len = WideCharToMultiByte(CP_ACP, 0, finddata.cFileName, len - 4, name, MAX_PATH, NULL, NULL); name[len] = 0; lstrcatW(lnkpath, finddata.cFileName); hres = IPersistFile_Load(file, lnkpath, STGM_READ); if (FAILED(hres)) continue; hres = IShellLinkA_GetPath(link, exepath, MAX_PATH, NULL, SLGP_SHORTPATH); if (FAILED(hres)) continue; hres = IShellLinkA_GetArguments(link, args, INFOTIPSIZE); if (FAILED(hres)) continue; hres = IShellLinkA_GetWorkingDirectory(link, workdir, MAX_PATH); if (FAILED(hres)) continue; GetShortPathNameA(workdir, workdir, MAX_PATH); hres = IShellLinkA_GetIconLocation(link, iconpath, MAX_PATH, &icon); if (FAILED(hres)) continue; if (!iconpath[0]) { FindExecutableA(exepath, NULL, iconpath); icon = 0; } else if (icon < 0) icon = 0; GetShortPathNameA(iconpath, iconpath, MAX_PATH); hres = IShellLinkA_GetHotkey(link, &hotkey); if (FAILED(hres)) continue; hres = IShellLinkA_GetShowCmd(link, &min); if (FAILED(hres)) continue; count++; elen = sprintf(data + pos, "\"%s\",\"%s%s%s\",%s,%s,32,%d,%d,%d,%d\r\n", name, exepath, strlen(args) ? " " : "", args, workdir, iconpath, count * 32, icon, hotkey, min == SW_SHOWMINIMIZED ? 1 : 0); pos += elen; data = heap_realloc(data, pos + MAX_PATH * 4 + INFOTIPSIZE); } while (FindNextFileW(hfind, &finddata)); IPersistFile_Release(file); IShellLinkW_Release(link); } else { data = heap_alloc(1); data[0] = 0; } len = WideCharToMultiByte(CP_ACP, 0, path, -1, name, MAX_PATH, NULL, NULL); ret = heap_alloc(pos + MAX_PATH * 4 + INFOTIPSIZE); elen = sprintf(ret, "\"%s\",%s,%d,1,0\r\n", group, name, count); lstrcat(ret + elen, data); HDDEDATA hret = DdeCreateDataHandle(dwDDEInst, (BYTE *)ret, lstrlen(ret), 0, hszItem, uFmt, 0); FindClose(hfind); heap_free(group); heap_free(data); heap_free(ret); return hret; } } } FIXME( "%u %p %s %s: stub\n", uFmt, hconv, debugstr_hsz(hszTopic), debugstr_hsz(hszItem) ); return NULL; } __declspec(dllimport) HICON NE_ExtractIcon(LPCSTR lpszExeFileName, HICON * RetPtr, INT nIconIndex, UINT nIcons, UINT cxDesired, UINT cyDesired, UINT *pIconId, UINT flags); static void seticon(IShellLinkW *link, WCHAR *path, int iconidx) { HICON icon = 0; UINT id; ICONINFO iinfo; BITMAP mbmap, cbmap; int fd, i, count; int cx = GetSystemMetrics(SM_CXICON); int cy = GetSystemMetrics(SM_CYICON); char *mbits, *cbits; WCHAR *fileext; WCHAR icofile[MAX_PATH]; char pathascii[MAX_PATH]; BITMAPINFOHEADER bmapi = {0}; HANDLE hicofile; #include struct { WORD zero; WORD type; WORD count; BYTE width; BYTE height; BYTE colors; BYTE zeroa; WORD planes; WORD bpp; DWORD size; DWORD off; } header = {0, 1, 1, cx, cy, 0, 0, 0, 0}; #include WideCharToMultiByte(CP_ACP, 0, path, -1, pathascii, MAX_PATH, NULL, NULL); NE_ExtractIcon(pathascii, &icon, iconidx, 1, cx, cy, &id, 0); if (icon) { wcscpy(icofile, path); fileext = wcschr(icofile, '.'); fileext[1] = 'i'; fileext[2] = 'c'; fileext[3] = 'o'; hicofile = CreateFileW(icofile, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if (hicofile != INVALID_HANDLE_VALUE) { GetIconInfo(icon, &iinfo); GetObject(iinfo.hbmMask, sizeof(BITMAP), &mbmap); if (iinfo.hbmColor) { GetObject(iinfo.hbmColor, sizeof(BITMAP), &cbmap); cbits = (char *)HeapAlloc(GetProcessHeap(), 0, cy * cbmap.bmWidthBytes); GetBitmapBits(iinfo.hbmColor, cy * cbmap.bmWidthBytes, cbits); DeleteObject(iinfo.hbmColor); bmapi.biBitCount = 32; } else { cbits = NULL; bmapi.biBitCount = 1; header.colors = 2; cbmap.bmWidthBytes = 0; cy *= 2; } mbits = (char *)HeapAlloc(GetProcessHeap(), 0, cy * mbmap.bmWidthBytes); GetBitmapBits(iinfo.hbmMask, cy * mbmap.bmWidthBytes, mbits); DeleteObject(iinfo.hbmMask); bmapi.biSize = sizeof(bmapi); bmapi.biWidth = cx; bmapi.biHeight = (cbits ? cy * 2 : cy); bmapi.biPlanes = 1; header.size = cy * (mbmap.bmWidthBytes + cbmap.bmWidthBytes) + sizeof(bmapi) + (cbits ? 0 : 8); header.off = sizeof(header); WriteFile(hicofile, &header, sizeof(header), &count, NULL); WriteFile(hicofile, &bmapi, sizeof(bmapi), &count, NULL); if (cbits) { for(i = cy - 1; i >= 0; i--) WriteFile(hicofile, cbits + (i * cbmap.bmWidthBytes), cbmap.bmWidthBytes, &count, NULL); HeapFree(GetProcessHeap(), 0, cbits); } else { COLORREF pal[] = {0, 0xffffff}; WriteFile(hicofile, &pal, sizeof(COLORREF) * 2, &count, NULL); } for(i = cy - 1; i >= 0; i--) WriteFile(hicofile, mbits + (i * mbmap.bmWidthBytes), mbmap.bmWidthBytes, &count, NULL); CloseHandle(hicofile); HeapFree(GetProcessHeap(), 0, mbits); path = icofile; iconidx = 0; } else if (GetLastError() == ERROR_FILE_EXISTS) { path = icofile; iconidx = 0; } DestroyIcon(icon); } IShellLinkW_SetIconLocation(link, path, iconidx); } __declspec(dllimport) LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len); static DWORD PROGMAN_OnExecute(WCHAR *command, int argc, WCHAR **argv) { static const WCHAR create_groupW[] = {'C','r','e','a','t','e','G','r','o','u','p',0}; static const WCHAR delete_groupW[] = {'D','e','l','e','t','e','G','r','o','u','p',0}; static const WCHAR show_groupW[] = {'S','h','o','w','G','r','o','u','p',0}; static const WCHAR add_itemW[] = {'A','d','d','I','t','e','m',0}; static const WCHAR delete_itemW[] = {'D','e','l','e','t','e','I','t','e','m',0}; static const WCHAR replace_itemW[] = {'R','e','p','l','a','c','e','I','t','e','m',0}; static const WCHAR exit_progmanW[] = {'E','x','i','t','P','r','o','g','m','a','n',0}; static const WCHAR winhelpW[] = {'w','i','n','h','e','l','p','.','e','x','e',0}; static const WCHAR winhlp32W[] = {'w','i','n','h','l','p','3','2','.','e','x','e',0}; static const WCHAR dotexeW[] = {'.','e','x','e',0}; static const WCHAR dotlnkW[] = {'.','l','n','k',0}; static const WCHAR slashW[] = {'\\',0}; static WCHAR *last_group; if (!strcmpiW(command, create_groupW)) { WCHAR *path; if (argc < 1) return DDE_FNOTPROCESSED; path = get_programs_path(argv[0]); CreateDirectoryW(path, NULL); heap_free(last_group); last_group = path; ShellExecuteW(NULL, NULL, path, NULL, NULL, SW_SHOWNORMAL); } else if (!strcmpiW(command, delete_groupW)) { WCHAR *path, *path2; SHFILEOPSTRUCTW shfos = {0}; int ret; if (argc < 1) return DDE_FNOTPROCESSED; path = get_programs_path(argv[0]); path2 = heap_alloc((strlenW(path) + 2) * sizeof(*path)); strcpyW(path2, path); path2[strlenW(path) + 1] = 0; shfos.wFunc = FO_DELETE; shfos.pFrom = path2; shfos.fFlags = FOF_NOCONFIRMATION; ret = SHFileOperationW(&shfos); heap_free(path2); heap_free(path); if (ret || shfos.fAnyOperationsAborted) return DDE_FNOTPROCESSED; } else if (!strcmpiW(command, show_groupW)) { WCHAR *path; /* Win32 requires the second parameter to be present but seems to * ignore its actual value. */ if (argc < 2) return DDE_FNOTPROCESSED; path = get_programs_path(argv[0]); if (ShellExecuteW(NULL, NULL, path, NULL, NULL, SW_SHOWNORMAL) <= 32) return DDE_FNOTPROCESSED; heap_free(last_group); last_group = path; } else if (!strcmpiW(command, add_itemW)) { WCHAR *path, *name; DWORD len; IShellLinkW *link; IPersistFile *file; HRESULT hres; int cmd_argc; WCHAR **cmd_argv; WCHAR *prg_name, *dirend; WCHAR *dirpath = NULL; WCHAR windirW[MAX_PATH]; if (argc < 1) return DDE_FNOTPROCESSED; hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkW, (void **)&link); if (FAILED(hres)) return DDE_FNOTPROCESSED; /* windows 3.1 progman: command line */ /* explorer DDE: program path */ cmd_argv = CommandLineToArgvW(argv[0], &cmd_argc); if (!cmd_argv || !cmd_argc) return DDE_FNOTPROCESSED; if ((cmd_argv[0][0] == 0) && (cmd_argc > 1)) // if the cmd isn't an exe, the first param is empty prg_name = cmd_argv[1]; else prg_name = cmd_argv[0]; len = SearchPathW(NULL, prg_name, dotexeW, 0, NULL, NULL); if (len == 0) { if (argc >= 7) { dirpath = argv[6]; len = SearchPathW(dirpath, prg_name, dotexeW, 0, NULL, NULL); } if (!wcsicmp(prg_name, winhelpW)) { prg_name = winhlp32W; len = SearchPathW(NULL, prg_name, dotexeW, 0, NULL, NULL); } if (len == 0) { char windirA[MAX_PATH]; RedirectSystemDir("C:\\windows", windirA, MAX_PATH); int res = MultiByteToWideChar(CP_ACP, 0, windirA, -1, windirW, MAX_PATH); if (res) { dirpath = windirW; len = SearchPathW(windirW, prg_name, dotexeW, 0, NULL, NULL); } if (len == 0) { LocalFree(cmd_argv); IShellLinkW_Release(link); return DDE_FNOTPROCESSED; } } } path = heap_alloc(len * sizeof(WCHAR)); if (dirpath) SearchPathW(dirpath, prg_name, dotexeW, len, path, &dirend); else SearchPathW(NULL, prg_name, dotexeW, len, path, &dirend); IShellLinkW_SetPath(link, path); if (cmd_argc > 1) { WCHAR *args = strstrW(argv[0], " ");/* FIXME? */ if (args) IShellLinkW_SetArguments(link, args + 1); } if (argc >= 2) IShellLinkW_SetDescription(link, argv[1]); if (argc >= 4) seticon(link, *argv[2] ? argv[2] : path, atoiW(argv[3])); else seticon(link, path, 0); if ((argc >= 7) && strlen(argv[6])) IShellLinkW_SetWorkingDirectory(link, argv[6]); else if (dirpath) IShellLinkW_SetWorkingDirectory(link, dirpath); else { *dirend = 0; IShellLinkW_SetWorkingDirectory(link, path); } if (argc >= 8) IShellLinkW_SetHotkey(link, atoiW(argv[7])); if (argc >= 9) { if (atoiW(argv[8]) == 0) IShellLinkW_SetShowCmd(link, SW_SHOWMINNOACTIVE); else if (atoiW(argv[8]) == 1) IShellLinkW_SetShowCmd(link, SW_SHOWNORMAL); } heap_free(path); hres = IShellLinkW_QueryInterface(link, &IID_IPersistFile, (void **)&file); if (FAILED(hres)) { LocalFree(cmd_argv); IShellLinkW_Release(link); return DDE_FNOTPROCESSED; } if (argc >= 2) { name = heap_alloc((strlenW(last_group) + 1 + strlenW(argv[1]) + 5) * sizeof(*name)); lstrcpyW(name, last_group); lstrcatW(name, slashW); lstrcatW(name, argv[1]); lstrcatW(name, dotlnkW); } else { const WCHAR *filename = PathFindFileNameW(prg_name); int len = PathFindExtensionW(filename) - filename; name = heap_alloc((strlenW(last_group) + 1 + len + 5) * sizeof(*name)); lstrcpyW(name, last_group); lstrcatW(name, slashW); lstrcpynW(name+strlenW(name), filename, len + 1); lstrcatW(name, dotlnkW); } hres = IPersistFile_Save(file, name, TRUE); heap_free(name); IPersistFile_Release(file); LocalFree(cmd_argv); IShellLinkW_Release(link); if (FAILED(hres)) return DDE_FNOTPROCESSED; } else if (!strcmpiW(command, delete_itemW) || !strcmpiW(command, replace_itemW)) { WCHAR *name; BOOL ret; if (argc < 1) return DDE_FNOTPROCESSED; name = heap_alloc((strlenW(last_group) + 1 + strlenW(argv[0]) + 5) * sizeof(*name)); lstrcpyW(name, last_group); lstrcatW(name, slashW); lstrcatW(name, argv[0]); lstrcatW(name, dotlnkW); ret = DeleteFileW(name); heap_free(name); if (!ret) return DDE_FNOTPROCESSED; } else if (!strcmpiW(command, exit_progmanW)) { /* do nothing */ } else { FIXME("unhandled command %s\n", debugstr_w(command)); return DDE_FNOTPROCESSED; } return DDE_FACK; } static DWORD parse_dde_command(HSZ hszTopic, WCHAR *command) { static const WCHAR opcode_end[] = {' ',',','(',')','[',']','"',0}; static const WCHAR param_end[] = {',','(',')','[',']',0}; WCHAR *original = command; WCHAR *opcode = NULL, **argv = NULL, *p; int argc = 0, i; DWORD ret = DDE_FACK; while (*command == ' ') command++; if (*command != '[') goto error; while (*command == '[') { argc = 0; argv = heap_alloc(sizeof(*argv)); command++; while (*command == ' ') command++; if (!(p = strpbrkW(command, opcode_end))) goto error; opcode = strndupW(command, p - command); command = p; while (*command == ' ') command++; if (*command == '(') { command++; while (*command != ')') { while (*command == ' ') command++; if (*command != ',') { if (*command == '"') { command++; if (!(p = strchrW(command, '"'))) goto error; } else if (*command == ')') break; else { if (!(p = strpbrkW(command, param_end))) goto error; while (p[-1] == ' ') p--; } } else p = command; argc++; argv = heap_realloc(argv, argc * sizeof(*argv)); argv[argc-1] = strndupW(command, p - command); command = p; if (*command == '"') command++; while (*command == ' ') command++; if (*command == ',') command++; else if (*command != ')') goto error; } command++; while (*command == ' ') command++; } if (*command != ']') goto error; command++; while (*command == ' ') command++; if (hszTopic == hszProgmanTopic) ret = PROGMAN_OnExecute(opcode, argc, argv); else { FIXME("unhandled topic %s, command %s\n", debugstr_hsz(hszTopic), debugstr_w(opcode)); ret = DDE_FNOTPROCESSED; } heap_free(opcode); for (i = 0; i < argc; i++) heap_free(argv[i]); heap_free(argv); if (ret == DDE_FNOTPROCESSED) break; } return ret; error: ERR("failed to parse command %s\n", debugstr_w(original)); heap_free(opcode); for (i = 0; i < argc; i++) heap_free(argv[i]); heap_free(argv); return DDE_FNOTPROCESSED; } static DWORD Dde_OnExecute(HCONV hconv, HSZ hszTopic, HDDEDATA hdata) { WCHAR *command; DWORD len; DWORD ret; len = DdeGetData(hdata, NULL, 0, 0); if (!len) return DDE_FNOTPROCESSED; command = heap_alloc(len); DdeGetData(hdata, (BYTE *)command, len, 0); TRACE("conv=%p topic=%s data=%s\n", hconv, debugstr_hsz(hszTopic), debugstr_w(command)); ret = parse_dde_command(hszTopic, command); heap_free(command); return ret; } static inline void Dde_OnDisconnect(HCONV hconv) { TRACE( "%p\n", hconv ); } static HDDEDATA CALLBACK DdeCallback( UINT uType, UINT uFmt, HCONV hconv, HSZ hsz1, HSZ hsz2, HDDEDATA hdata, ULONG_PTR dwData1, ULONG_PTR dwData2) { switch (uType) { case XTYP_CONNECT: return (HDDEDATA)(DWORD_PTR)Dde_OnConnect(hsz1, hsz2); case XTYP_CONNECT_CONFIRM: Dde_OnConnectConfirm(hconv, hsz1, hsz2); return NULL; case XTYP_WILDCONNECT: return Dde_OnWildConnect(hsz1, hsz2); case XTYP_REQUEST: return Dde_OnRequest(uFmt, hconv, hsz1, hsz2); case XTYP_EXECUTE: return (HDDEDATA)(DWORD_PTR)Dde_OnExecute(hconv, hsz1, hdata); case XTYP_DISCONNECT: Dde_OnDisconnect(hconv); return NULL; default: return NULL; } } LRESULT WINAPI progman16_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_DDE_INITIATE: { SendMessage(wparam, WM_DDE_ACK, hwnd, lparam); break; } case WM_DDE_EXECUTE: { char *connect = GlobalLock(lparam); if (connect) { WCHAR command[256] = {0}; MultiByteToWideChar(CP_ACP, 0, connect, -1, command, 255); HDDEDATA ret = parse_dde_command(hszProgmanTopic, command); PostMessage(wparam, WM_DDE_ACK, hwnd, ret == DDE_FACK ? 0x8000 : 0); GlobalUnlock(lparam); } break; } } return DefWindowProc(hwnd, msg, wparam, lparam); } /************************************************************************* * ShellDDEInit (SHELL32.@) * * Registers the Shell DDE services with the system so that applications * can use them. * * PARAMS * bInit [I] TRUE to initialize the services, FALSE to uninitialize. * * RETURNS * Nothing. */ void WINAPI ShellDDEInit(BOOL bInit) { static const WCHAR wszProgman[] = {'P','r','o','g','m','a','n','1','6',0}; static HWND progman16_hwnd; static HINSTANCE mod_instance; TRACE("bInit = %s\n", bInit ? "TRUE" : "FALSE"); if (bInit) { static const WCHAR wszAsterisk[] = {'*',0}; static const WCHAR wszShell[] = {'S','h','e','l','l',0}; static const WCHAR wszAppProperties[] = {'A','p','p','P','r','o','p','e','r','t','i','e','s',0}; static const WCHAR wszFolders[] = {'F','o','l','d','e','r','s',0}; static const WCHAR wszGroups[] = {'G','r','o','u','p','s',0}; DdeInitializeW(&dwDDEInst, DdeCallback, CBF_FAIL_ADVISES | CBF_FAIL_POKES, 0); hszProgmanTopic = DdeCreateStringHandleW(dwDDEInst, wszProgman, CP_WINUNICODE); hszProgmanService = DdeCreateStringHandleW(dwDDEInst, wszProgman, CP_WINUNICODE); hszAsterisk = DdeCreateStringHandleW(dwDDEInst, wszAsterisk, CP_WINUNICODE); hszShell = DdeCreateStringHandleW(dwDDEInst, wszShell, CP_WINUNICODE); hszAppProperties = DdeCreateStringHandleW(dwDDEInst, wszAppProperties, CP_WINUNICODE); hszFolders = DdeCreateStringHandleW(dwDDEInst, wszFolders, CP_WINUNICODE); hszGroups = DdeCreateStringHandleW(dwDDEInst, wszGroups, CP_WINUNICODE); DdeNameService(dwDDEInst, hszFolders, 0, DNS_REGISTER); DdeNameService(dwDDEInst, hszProgmanService, 0, DNS_REGISTER); /* DdeNameService(dwDDEInst, hszShell, 0, DNS_REGISTER); */ WNDCLASSW class = {0}; class.lpfnWndProc = &progman16_wndproc; GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR)&progman16_wndproc, &mod_instance); class.hInstance = mod_instance; class.lpszClassName = &wszProgman; RegisterClassW(&class); progman16_hwnd = CreateWindowW(wszProgman, wszProgman, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, mod_instance, NULL); CoInitialize(NULL); } else { /* unregister all services */ DdeNameService(dwDDEInst, 0, 0, DNS_UNREGISTER); DdeFreeStringHandle(dwDDEInst, hszFolders); DdeFreeStringHandle(dwDDEInst, hszAppProperties); DdeFreeStringHandle(dwDDEInst, hszShell); DdeFreeStringHandle(dwDDEInst, hszAsterisk); DdeFreeStringHandle(dwDDEInst, hszProgmanService); DdeFreeStringHandle(dwDDEInst, hszProgmanTopic); DdeUninitialize(dwDDEInst); DestroyWindow(progman16_hwnd); UnregisterClassW(wszProgman, mod_instance); } } ================================================ FILE: user/dialog.c ================================================ /* * 16-bit dialog functions * * Copyright 1993, 1994, 1996, 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include "windef.h" #include "winbase.h" #include "wownt32.h" #include "wine/winuser16.h" #include "user_private.h" #include "wine/debug.h" #include #include "../krnl386/kernel16_private.h" WINE_DEFAULT_DEBUG_CHANNEL(dialog); BOOL is_reactos(); #include typedef struct { BYTE pop_eax; /* 58 */ BYTE push_imm; /* 68 */ LPVOID this_; BYTE push_eax; /* 50 */ BYTE jmp_rel; /* E9 */ UINT_PTR DlgProc; BOOL used; HWND hDlg; LPVOID param; } DLGPROCTHUNK; #include void free_proc_thunk(DLGPROCTHUNK *thunk); BYTE get_aflags(HMODULE16 hModule); /* Dialog control information */ typedef struct { DWORD style; INT16 x; INT16 y; INT16 cx; INT16 cy; UINT id; LPCSTR className; LPCSTR windowName; LPCVOID data; } DLG_CONTROL_INFO; /* Dialog template */ typedef struct { DWORD style; UINT16 nbItems; INT16 x; INT16 y; INT16 cx; INT16 cy; LPCSTR menuName; LPCSTR className; LPCSTR caption; INT16 pointSize; INT16 weight; LPCSTR faceName; } DLG_TEMPLATE; #include "pshpack2.h" typedef struct { WORD dlgVer; WORD signature; DWORD helpID; DWORD exStyle; DWORD style; WORD cdit; short x; short y; short cx; short cy; } DLGTEMPLATEEX; typedef struct { DWORD helpid; DWORD exStyle; DWORD style; short x; short y; short cx; short cy; DWORD id; } DLGITEMTEMPLATEEX; #include "poppack.h" #define IS_ANY_DBCS_CHARSET( CharSet ) \ ( ((CharSet) == SHIFTJIS_CHARSET) ? TRUE : \ ((CharSet) == HANGEUL_CHARSET) ? TRUE : \ ((CharSet) == CHINESEBIG5_CHARSET) ? TRUE : \ ((CharSet) == GB2312_CHARSET) ? TRUE : FALSE ) #define DIALOG_CLASS_ATOM MAKEINTATOM(32770) /*********************************************************************** * DIALOG_GetControl16 * * Return the class and text of the control pointed to by ptr, * fill the header structure and return a pointer to the next control. */ static LPCSTR DIALOG_GetControl16( LPCSTR p, DLG_CONTROL_INFO *info ) { static char buffer[10]; int int_id; info->x = GET_WORD(p); p += sizeof(WORD); info->y = GET_WORD(p); p += sizeof(WORD); info->cx = GET_WORD(p); p += sizeof(WORD); info->cy = GET_WORD(p); p += sizeof(WORD); info->id = GET_WORD(p); p += sizeof(WORD); info->style = GET_DWORD(p); p += sizeof(DWORD); if (*p & 0x80) { switch((BYTE)*p) { case 0x80: strcpy( buffer, "BUTTON" ); break; case 0x81: strcpy( buffer, "EDIT" ); break; case 0x82: strcpy( buffer, "STATIC" ); break; case 0x83: strcpy( buffer, "LISTBOX" ); break; case 0x84: strcpy( buffer, "SCROLLBAR" ); break; case 0x85: strcpy( buffer, "COMBOBOX" ); break; default: buffer[0] = '\0'; break; } info->className = buffer; p++; } else { info->className = p; p += strlen(p) + 1; } int_id = ((BYTE)*p == 0xff); if (int_id) { /* Integer id, not documented (?). Only works for SS_ICON controls */ info->windowName = MAKEINTRESOURCEA(GET_WORD(p+1)); p += 3; } else { info->windowName = p; p += strlen(p) + 1; } if (*p) info->data = p + 1; else info->data = NULL; p += *p + 1; TRACE(" %s %s %d, %d, %d, %d, %d, %08x, %p\n", debugstr_a(info->className), debugstr_a(info->windowName), info->id, info->x, info->y, info->cx, info->cy, info->style, info->data ); return p; } /*********************************************************************** * DIALOG_ParseTemplate16 * * Fill a DLG_TEMPLATE structure from the dialog template, and return * a pointer to the first control. */ static LPCSTR DIALOG_ParseTemplate16( LPCSTR p, DLG_TEMPLATE * result ) { result->style = GET_DWORD(p); p += sizeof(DWORD); result->nbItems = (unsigned char) *p++; result->x = GET_WORD(p); p += sizeof(WORD); result->y = GET_WORD(p); p += sizeof(WORD); result->cx = GET_WORD(p); p += sizeof(WORD); result->cy = GET_WORD(p); p += sizeof(WORD); TRACE("DIALOG %d, %d, %d, %d\n", result->x, result->y, result->cx, result->cy ); TRACE(" STYLE %08x\n", result->style ); /* Get the menu name */ switch( (BYTE)*p ) { case 0: result->menuName = 0; p++; break; case 0xff: result->menuName = MAKEINTRESOURCEA(GET_WORD( p + 1 )); p += 3; TRACE(" MENU %04x\n", LOWORD(result->menuName) ); break; default: result->menuName = p; TRACE(" MENU '%s'\n", p ); p += strlen(p) + 1; break; } /* Get the class name */ if (*p) { result->className = p; TRACE(" CLASS '%s'\n", result->className ); } else result->className = (LPCSTR)DIALOG_CLASS_ATOM; p += strlen(p) + 1; /* Get the window caption */ result->caption = p; p += strlen(p) + 1; TRACE(" CAPTION '%s'\n", result->caption ); /* Get the font name */ result->pointSize = 0; result->faceName = NULL; result->weight = 0; if (result->style & DS_SETFONT) { CHARSETINFO info; if (!TranslateCharsetInfo((DWORD *)(GetACP()), &info, TCI_SRCCODEPAGE)) info.ciCharset = ANSI_CHARSET; result->pointSize = GET_WORD(p); p += sizeof(WORD); result->faceName = p; p += strlen(p) + 1; result->weight = IS_ANY_DBCS_CHARSET(info.ciCharset) ? FW_NORMAL : FW_BOLD; TRACE(" FONT %d,'%s'\n", result->pointSize, result->faceName ); } else if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE)) { result->style |= DS_SETFONT; result->pointSize = 10; result->faceName = "FIXEDSYS"; result->weight = FW_NORMAL; } return p; } LRESULT get_message_callback(HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp, LRESULT *result, void *arg); LRESULT CALLBACK DlgProcCall16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { HWND16 hWnd16 = HWND_16(hDlg); WNDPROC16 wndproc16 = GetWndProc16(hWnd16); switch (Msg) { case WM_INITDIALOG: { CREATESTRUCTA* cs = (CREATESTRUCTA*)lParam; LPARAM *params = cs->lpCreateParams; HMENU hMenu; if (cs->hMenu) { BOOL ret = SetMenu(hDlg, HMENU_32(cs->hMenu)); } ATOM classatom = GetClassLongA(hDlg, GCW_ATOM);//WNDPROC16 HWND16 hWnd16 = HWND_16(hDlg); if (classatom) { if (params[1]) { SetDlgProc16(hWnd16, params[1]); } else { SetDlgProc16(hWnd16, WNDCLASS16Info[classatom].wndproc); } } cs->lpCreateParams = params[0]; free(cs); } break; } if (wndproc16) { MSG msg; msg.hwnd = hDlg; msg.message = Msg; msg.wParam = wParam; msg.lParam = lParam; MSG16 msg16; LRESULT unused; WINPROC_CallProc32ATo16(get_message_callback, msg.hwnd, msg.message, msg.wParam, msg.lParam, &unused, &msg16); switch (msg.message) { default: case WM_PAINT: case WM_COMMAND: return DispatchMessage16(&msg16),1; } } return 0;//DefWindowProcA(hDlg, Msg, wParam, lParam); } LRESULT call_window_proc16(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg); LRESULT call_dialog_proc16(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg) { SetWindowLong16(hwnd, DWL_MSGRESULT, 0xdeadbeef); call_window_proc16(hwnd, msg, wParam, lParam, result, arg); *result &= 0xffff; LRESULT r = *result;/* result: 16-bit */ if (GetWindowLong16(hwnd, DWL_MSGRESULT) == 0xdeadbeef) { return r; } else { *result = GetWindowLong16(hwnd, DWL_MSGRESULT); } return r; } INT_PTR CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); INT_PTR CALLBACK DlgProc_Thunk(DLGPROCTHUNK *thunk_data, HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { if (!thunk_data->hDlg) { thunk_data->hDlg = hDlg; dialog_data* cs = (dialog_data*)thunk_data->param; if (cs->hMenu16) { BOOL ret = SetMenu(hDlg, HMENU_32(cs->hMenu16)); } HWND16 hWnd16 = HWND_16(hDlg); SetDlgProc16(hWnd16, cs->dlgProc); SetWindowLongPtrA(hDlg, DWLP_DLGPROC, DlgProc); HeapFree(GetProcessHeap(), 0, cs); free_proc_thunk(thunk_data); } return DlgProc(hDlg, Msg, wParam, lParam); } INT_PTR CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { HWND16 hWnd16 = HWND_16(hDlg); WNDPROC16 wndproc16 = GetDlgProc16(hWnd16); LRESULT ret = 0; if (wndproc16) { MSG msg; msg.hwnd = hDlg; msg.message = Msg; msg.wParam = wParam; msg.lParam = lParam; MSG16 msg16; switch (msg.message) { default: { INT_PTR result = WINPROC_CallProc32ATo16(call_dialog_proc16, msg.hwnd, msg.message, msg.wParam, msg.lParam, &ret, wndproc16); if (GetWindowLong16(HWND_16(msg.hwnd), DWL_MSGRESULT) != 0xdeadbeef) SetWindowLongA(hDlg, DWL_MSGRESULT, ret); else return ret; return result; } } } return ret; } /* internal API for COMMDLG hooks */ LRESULT WINAPI DIALOG_CallDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC16 proc) { LRESULT ret; BOOL16 result = WINPROC_CallProc32ATo16(call_dialog_proc16, hwnd, msg, wParam, lParam, &ret, proc); if (GetWindowLong16(HWND_16(hwnd), DWL_MSGRESULT) != 0xdeadbeef) SetWindowLongA(hwnd, DWL_MSGRESULT, ret); return result; } void paddingDWORD(DWORD **d) { *d = (BYTE*)(((DWORD)*d + 3) & ~((DWORD)3)); } void copy_widestr(LPCSTR name, LPWSTR *templatew, DLGTEMPLATEEX **template32) { int len = 0; int slen; if (slen = strlen(name)) { if (slen > 256) { UINT_PTR off = (char *)*templatew - (char *)*template32; *template32 = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *template32, HeapSize(GetProcessHeap(), 0, *template32) + slen * 2); *templatew = (char *)*template32 + off; } len = MultiByteToWideChar(CP_ACP, NULL, name, -1, *templatew, strlen(name) * 4) * 2; } if (len) { *templatew = (WORD*)((BYTE*)*templatew + len); } else { **templatew = 0; (*templatew)++; } } /*********************************************************************** * DIALOG_CreateControls16 * * Create the control windows for a dialog. */ static BOOL DIALOG_CreateControls16Ex(HWND hwnd, LPCSTR template, const DLG_TEMPLATE *dlgTemplate, HINSTANCE16 hInst, DLGITEMTEMPLATEEX *dlgItemTemplate32, SEGPTR base16, SIZE_T base32, DLGTEMPLATEEX **template32) { DLG_CONTROL_INFO info; HWND hwndCtrl, hwndDefButton = 0; INT items = dlgTemplate->nbItems; dlgItemTemplate32 = (BYTE*) (((DWORD)dlgItemTemplate32 + 3) & ~((DWORD)3)); WORD *dlgItemTemplatew; TRACE(" BEGIN\n"); while (items--) { paddingDWORD(&dlgItemTemplate32); template = DIALOG_GetControl16(template, &info); dlgItemTemplate32->helpid = 0; dlgItemTemplate32->style = info.style | WS_CHILD; dlgItemTemplate32->exStyle = 0;// WS_EX_NOPARENTNOTIFY; dlgItemTemplate32->x = info.x; dlgItemTemplate32->y = info.y; dlgItemTemplate32->cx = info.cx; dlgItemTemplate32->cy = info.cy; dlgItemTemplate32->id = info.id; dlgItemTemplatew = (WORD*)(dlgItemTemplate32 + 1); info.className = win32classname(hInst, info.className); copy_widestr(info.className, &dlgItemTemplatew, template32); if (!HIWORD(info.windowName)) { char buffer[512]; if (((dlgItemTemplate32->style & 0xF) == SS_ICON || (dlgItemTemplate32->style & 0xF) == SS_BITMAP) && stricmp(info.className, "STATIC") == 0) { sprintf(buffer, "#%d", (int)info.windowName); copy_widestr(buffer, &dlgItemTemplatew, template32); } else { if (LoadString16(hInst, LOWORD(info.windowName), buffer, sizeof(buffer))) info.windowName = buffer; else info.windowName = "dialog error: invalid window name"; copy_widestr(info.windowName, &dlgItemTemplatew, template32); } } else { copy_widestr(info.windowName, &dlgItemTemplatew, template32); } if (info.data) { *dlgItemTemplatew++ = sizeof(info.data); /* reference to 16-bit dialog template */ *((LPCVOID*)dlgItemTemplatew) = MAKESEGPTR(SELECTOROF(base16), OFFSETOF(base16) + (WORD)((SIZE_T)info.data - base32)); dlgItemTemplatew += 2; } else { *dlgItemTemplatew++ = 0; } dlgItemTemplate32 = dlgItemTemplatew; } TRACE(" END\n"); return TRUE; } static BOOL DIALOG_DumpControls32(HWND hwnd, LPCSTR template, const DLG_TEMPLATE *dlgTemplate, HINSTANCE16 hInst, DLGITEMTEMPLATEEX *dlgItemTemplate32) { DLG_CONTROL_INFO info; HWND hwndCtrl, hwndDefButton = 0; INT items = dlgTemplate->nbItems; dlgItemTemplate32 = (BYTE*)(((DWORD)dlgItemTemplate32 + 3) & ~((DWORD)3)); WORD *dlgItemTemplatew; TRACE(" BEGIN\n"); while (items--) { char buf[256]; template = DIALOG_GetControl16(template, &info); GetDlgItemTextA(hwnd, info.id, buf, 256); char pszError[512]; //Ō̃G[ԍ擾 DWORD dwError = GetLastError(); //ϊ FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError, NULL, pszError, sizeof(pszError), NULL); DPRINTF("id 0x%x=%s, err=%s\n", info.id, buf, pszError); } TRACE(" END\n"); return TRUE; } #include /* internal API for COMMDLG hooks */ DLGTEMPLATEEX *WINAPI dialog_template16_to_template32(HINSTANCE16 hInst, SEGPTR dlgTemplate16, DWORD *size, dialog_data *paramd) { HINSTANCE hInst32 = HINSTANCE_32(hInst); DLGTEMPLATEEX *template32; DLG_TEMPLATE template; DWORD units = GetDialogBaseUnits(); HMENU16 hMenu = 0; HFONT hUserFont = 0; UINT xBaseUnit = LOWORD(units); UINT yBaseUnit = HIWORD(units); LPCVOID dlgTemplate = MapSL(dlgTemplate16); LPCVOID base32 = dlgTemplate; /* Parse dialog template */ dlgTemplate = DIALOG_ParseTemplate16(dlgTemplate, &template); /* Load menu */ if (template.menuName) hMenu = LoadMenu16(hInst, template.menuName); //FIXME:memory template32 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 1024 + template.nbItems * 512); template32->dlgVer = 1; template32->signature = 0xffff; template32->style = template.style; template32->exStyle = 0; template32->helpID = 0; template32->cdit = template.nbItems; template32->x = template.x; template32->y = template.y; template32->cx = template.cx; template32->cy = template.cy; WORD *templatew = (WORD*)(template32 + 1); //Menu *templatew++ = 0; int len; if (template.className == DIALOG_CLASS_ATOM) { *templatew++ = 0; } else { //WNDclass template.className = win32classname(hInst, template.className); len = MultiByteToWideChar(CP_ACP, NULL, template.className, -1, (LPWSTR)templatew, (1 + strlen(template.className)) * 4) * 2; if (len) { templatew = (WORD*)((BYTE*)templatew + len); } else { *templatew++ = 0; } } //dialog title len = MultiByteToWideChar(CP_ACP, NULL, template.caption, -1, (LPWSTR)templatew, (1 + strlen(template.caption)) * 4) * 2; if (len) { templatew = (WORD*)((BYTE*)templatew + len); } else { *templatew++ = 0; } if (template.style & DS_SETFONT) { *templatew++ = template.pointSize; *templatew++ = template.weight; *templatew++ = (DEFAULT_CHARSET << 8) | FALSE; len = MultiByteToWideChar(CP_ACP, NULL, template.faceName, -1, (LPWSTR)templatew, (1 + strlen(template.faceName)) * 4) * 2; if (len) { templatew = (WORD*)((BYTE*)templatew + len); } else { *templatew++ = 0; } /* We convert the size to pixels and then make it -ve. This works * for both +ve and -ve template.pointSize */ HDC dc; int pixels; dc = GetDC(0); pixels = MulDiv(template.pointSize, GetDeviceCaps(dc , LOGPIXELSY), 72); hUserFont = CreateFontA( -pixels, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET, 0, 0, PROOF_QUALITY, FF_DONTCARE, template.faceName ); if (hUserFont) { SIZE charSize; HFONT hOldFont = SelectObject( dc, hUserFont ); charSize.cx = GdiGetCharDimensions( dc, NULL, &charSize.cy ); if (charSize.cx) { xBaseUnit = charSize.cx; yBaseUnit = charSize.cy; } SelectObject( dc, hOldFont ); } ReleaseDC(0, dc); DeleteObject( hUserFont ); TRACE("units = %d,%d\n", xBaseUnit, yBaseUnit ); } DIALOG_CreateControls16Ex(NULL, dlgTemplate, &template, hInst, templatew, dlgTemplate16, (SIZE_T)base32, &template32); WNDCLASSEXA wc2 = { 0 }; GetClassInfoExA(hInst32, template.className, &wc2); if (!wc2.lpszClassName) GetClassInfoExA(GetModuleHandleW(NULL), template.className, &wc2); if (!paramd) { if (hMenu || wc2.lpszMenuName) { FIXME("dialog menu is not supported.\n"); } } else { paramd->hMenu16 = hMenu; if (!hMenu) paramd->hMenu16 = LoadMenu16(hInst, wc2.lpszMenuName); } /* Add menu height */ /* Precision...? */ if (hMenu) { template32->cy += MulDiv(GetSystemMetrics(SM_CYMENU), 8, yBaseUnit); } return template32; } static DLGPROCTHUNK *thunk_array; static int MAX_THUNK; static void init_proc_thunk() { if (thunk_array) return; MAX_THUNK = 4096 / sizeof(DLGPROCTHUNK); thunk_array = VirtualAlloc(NULL, MAX_THUNK * sizeof(DLGPROCTHUNK), MEM_COMMIT, PAGE_EXECUTE_READWRITE); } dialog_data *get_dialog_data(HWND hWnd) { DLGPROC dlgproc = GetWindowLongPtrA(hWnd, DWLP_DLGPROC); if (thunk_array <= dlgproc && thunk_array + MAX_THUNK > dlgproc) { return (dialog_data*)(((DLGPROCTHUNK *)dlgproc)->param); } return 0; } DLGPROCTHUNK *init_thunk_data(LPVOID param, int i, LPVOID func) { thunk_array[i].pop_eax = 0x58; thunk_array[i].push_imm = 0x68; thunk_array[i].this_ = thunk_array + i; thunk_array[i].push_eax = 0x50; thunk_array[i].jmp_rel = 0xE9; thunk_array[i].DlgProc = (UINT_PTR)DlgProc_Thunk - (UINT_PTR)(&thunk_array[i].DlgProc + 1); thunk_array[i].used = TRUE; thunk_array[i].hDlg = 0; thunk_array[i].param = param; return thunk_array + i; } DLGPROC allocate_proc_thunk(LPVOID param, LPVOID func) { init_proc_thunk(); for (int i = 0; i < MAX_THUNK; i++) { if (!thunk_array[i].used) { return (DLGPROC)init_thunk_data(param, i, func); } } for (int i = 0; i < MAX_THUNK; i++) { if (thunk_array[i].hDlg && !IsWindow(thunk_array[i].hDlg)) { return (DLGPROC)init_thunk_data(param, i, func); } } ERR("could not allocate dialog thunk!\n"); return DlgProc; } void free_proc_thunk(DLGPROCTHUNK *thunk) { thunk->used = FALSE; } /*********************************************************************** * DIALOG_CreateIndirect16 * * Creates a dialog box window * * modal = TRUE if we are called from a modal dialog box. * (it's more compatible to do it here, as under Windows the owner * is never disabled if the dialog fails because of an invalid template) */ static HWND DIALOG_CreateIndirect16(HINSTANCE16 hInst, SEGPTR dlgTemplate16, HWND owner, DLGPROC16 dlgProc, LPARAM param, BOOL modal) { HWND result; dialog_data *paramd = (dialog_data*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(dialog_data)); HINSTANCE hInst32 = HINSTANCE_32(hInst); DWORD size; DLGTEMPLATEEX *template32 = dialog_template16_to_template32(hInst32, dlgTemplate16, &size, paramd); DWORD count; DLGPROC proc = allocate_proc_thunk(paramd, DlgProc_Thunk); paramd->dlgProc = dlgProc; ReleaseThunkLock(&count); if (modal) { SetEvent(kernel_get_thread_data()->idle_event); result = (HWND)DialogBoxIndirectParamA( UlongToHandle(HandleToUlong(hInst32) | (is_reactos() ? 0xfefe0000 : 0)), template32, owner, proc, param); } else { result = CreateDialogIndirectParamA( UlongToHandle(HandleToUlong(hInst32) | (is_reactos() ? 0xfefe0000 : 0)), template32, owner, proc, param); } HeapFree(GetProcessHeap(), 0, template32); RestoreThunkLock(count); return result; } /*********************************************************************** * DialogBox (USER.87) */ INT16 WINAPI DialogBox16( HINSTANCE16 hInst, LPCSTR dlgTemplate, HWND16 owner, DLGPROC16 dlgProc ) { return DialogBoxParam16( hInst, dlgTemplate, owner, dlgProc, 0 ); } /************************************************************************** * EndDialog (USER.88) */ BOOL16 WINAPI EndDialog16( HWND16 hwnd, INT16 retval ) { DWORD count; BOOL result; ReleaseThunkLock(&count); result = EndDialog( WIN_Handle32(hwnd), retval ); RestoreThunkLock(count); return (BOOL16)result; } /*********************************************************************** * CreateDialog (USER.89) */ HWND16 WINAPI CreateDialog16( HINSTANCE16 hInst, LPCSTR dlgTemplate, HWND16 owner, DLGPROC16 dlgProc ) { return CreateDialogParam16( hInst, dlgTemplate, owner, dlgProc, 0 ); } /************************************************************************** * GetDlgItem (USER.91) */ HWND16 WINAPI GetDlgItem16( HWND16 hwndDlg, INT16 id ) { return HWND_16( GetDlgItem( WIN_Handle32(hwndDlg), (UINT16) id )); } /************************************************************************** * SetDlgItemText (USER.92) */ void WINAPI SetDlgItemText16( HWND16 hwnd, INT16 id, SEGPTR lpString ) { const char *txt = MapSL(lpString); SetDlgItemTextA(HWND_32(hwnd), (UINT16)id, txt); SendDlgItemMessage16( hwnd, id, WM_SETTEXT, 0, lpString ); } /************************************************************************** * GetDlgItemText (USER.93) */ INT16 WINAPI GetDlgItemText16( HWND16 hwnd, INT16 id, SEGPTR str, UINT16 len ) { return GetDlgItemTextA(HWND_32(hwnd), (UINT16)id, MapSL(str), len); return SendDlgItemMessage16( hwnd, id, WM_GETTEXT, len, str ); } /************************************************************************** * SetDlgItemInt (USER.94) */ void WINAPI SetDlgItemInt16( HWND16 hwnd, INT16 id, UINT16 value, BOOL16 fSigned ) { SetDlgItemInt( WIN_Handle32(hwnd), (UINT)(UINT16)id, (UINT)(fSigned ? (INT16) value : value), fSigned ); } /************************************************************************** * GetDlgItemInt (USER.95) */ UINT16 WINAPI GetDlgItemInt16( HWND16 hwnd, INT16 id, BOOL16 *translated, BOOL16 fSigned ) { UINT result; BOOL ok; if (translated) *translated = FALSE; result = GetDlgItemInt( WIN_Handle32(hwnd), (UINT)(UINT16)id, &ok, fSigned ); if (!ok) return 0; if (fSigned) { if (((INT)result < -32767) || ((INT)result > 32767)) return 0; } else { if (result > 65535) return 0; } if (translated) *translated = TRUE; return (UINT16)result; } /************************************************************************** * CheckRadioButton (USER.96) */ BOOL16 WINAPI CheckRadioButton16( HWND16 hwndDlg, UINT16 firstID, UINT16 lastID, UINT16 checkID ) { return CheckRadioButton( WIN_Handle32(hwndDlg), firstID, lastID, checkID ); } /************************************************************************** * CheckDlgButton (USER.97) */ BOOL16 WINAPI CheckDlgButton16( HWND16 hwnd, INT16 id, UINT16 check ) { SendDlgItemMessage16( hwnd, id, BM_SETCHECK16, check, 0 ); return TRUE; } /************************************************************************** * IsDlgButtonChecked (USER.98) */ UINT16 WINAPI IsDlgButtonChecked16( HWND16 hwnd, UINT16 id ) { return (UINT16)SendDlgItemMessage16( hwnd, id, BM_GETCHECK16, 0, 0 ); } /************************************************************************** * DlgDirSelect (USER.99) */ BOOL16 WINAPI DlgDirSelect16( HWND16 hwnd, LPSTR str, INT16 id ) { return DlgDirSelectEx16( hwnd, str, 128, id ); } /************************************************************************** * DlgDirList (USER.100) */ INT16 WINAPI DlgDirList16( HWND16 hDlg, LPSTR spec, INT16 idLBox, INT16 idStatic, UINT16 attrib ) { /* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE * be set automatically (this is different in Win32, and * DIALOG_DlgDirList sends Win32 messages to the control, * so do it here) */ if (attrib == DDL_DRIVES) attrib |= DDL_EXCLUSIVE; return DlgDirListA( WIN_Handle32(hDlg), spec, idLBox, idStatic, attrib ); } /************************************************************************** * SendDlgItemMessage (USER.101) */ LRESULT WINAPI SendDlgItemMessage16( HWND16 hwnd, INT16 id, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) { HWND16 hwndCtrl = GetDlgItem16( hwnd, id ); if (hwndCtrl) return SendMessage16( hwndCtrl, msg, wParam, lParam ); else return 0; } /************************************************************************** * MapDialogRect (USER.103) */ void WINAPI MapDialogRect16( HWND16 hwnd, LPRECT16 rect ) { RECT rect32 = { rect->left, rect->top, rect->right, rect->bottom }; MapDialogRect( WIN_Handle32(hwnd), &rect32 ); rect->left = rect32.left; rect->right = rect32.right; rect->top = rect32.top; rect->bottom = rect32.bottom; } /************************************************************************** * DlgDirSelectComboBox (USER.194) */ BOOL16 WINAPI DlgDirSelectComboBox16( HWND16 hwnd, LPSTR str, INT16 id ) { return DlgDirSelectComboBoxEx16( hwnd, str, 128, id ); } /************************************************************************** * DlgDirListComboBox (USER.195) */ INT16 WINAPI DlgDirListComboBox16( HWND16 hDlg, LPSTR spec, INT16 idCBox, INT16 idStatic, UINT16 attrib ) { return DlgDirListComboBoxA( WIN_Handle32(hDlg), spec, idCBox, idStatic, attrib ); } /*********************************************************************** * DialogBoxIndirect (USER.218) */ INT16 WINAPI DialogBoxIndirect16( HINSTANCE16 hInst, HANDLE16 dlgTemplate, HWND16 owner, DLGPROC16 dlgProc ) { return DialogBoxIndirectParam16( hInst, dlgTemplate, owner, dlgProc, 0 ); } /*********************************************************************** * CreateDialogIndirect (USER.219) */ HWND16 WINAPI CreateDialogIndirect16( HINSTANCE16 hInst, SEGPTR dlgTemplate, HWND16 owner, DLGPROC16 dlgProc ) { return CreateDialogIndirectParam16( hInst, dlgTemplate, owner, dlgProc, 0); } /************************************************************************** * GetNextDlgGroupItem (USER.227) */ HWND16 WINAPI GetNextDlgGroupItem16( HWND16 hwndDlg, HWND16 hwndCtrl, BOOL16 fPrevious ) { return HWND_16( GetNextDlgGroupItem( WIN_Handle32(hwndDlg), WIN_Handle32(hwndCtrl), fPrevious )); } /************************************************************************** * GetNextDlgTabItem (USER.228) */ HWND16 WINAPI GetNextDlgTabItem16( HWND16 hwndDlg, HWND16 hwndCtrl, BOOL16 fPrevious ) { return HWND_16( GetNextDlgTabItem( WIN_Handle32(hwndDlg), WIN_Handle32(hwndCtrl), fPrevious )); } /*********************************************************************** * DialogBoxParam (USER.239) */ INT16 WINAPI DialogBoxParam16( HINSTANCE16 hInst, LPCSTR template, HWND16 owner16, DLGPROC16 dlgProc, LPARAM param ) { HWND hwnd = 0; HRSRC16 hRsrc; HGLOBAL16 hmem; SEGPTR data; int ret = -1; if (!(hRsrc = FindResource16( hInst, template, (LPSTR)RT_DIALOG ))) return -1; if (!(hmem = LoadResource16( hInst, hRsrc ))) return -1; if ((data = WOWGlobalLock16( hmem ))) { HWND owner = WIN_Handle32(owner16); hwnd = DIALOG_CreateIndirect16( hInst, data, owner, dlgProc, param, TRUE ); GlobalUnlock16( hmem ); return hwnd; } FreeResource16( hmem ); return ret; } /*********************************************************************** * DialogBoxIndirectParam (USER.240) */ INT16 WINAPI DialogBoxIndirectParam16( HINSTANCE16 hInst, HANDLE16 dlgTemplate, HWND16 owner16, DLGPROC16 dlgProc, LPARAM param ) { HWND hwnd, owner = WIN_Handle32( owner16 ); SEGPTR ptr; if (!(ptr = WOWGlobalLock16( dlgTemplate ))) return -1; hwnd = DIALOG_CreateIndirect16( hInst, ptr, owner, dlgProc, param, TRUE ); GlobalUnlock16( dlgTemplate ); return hwnd; } /*********************************************************************** * CreateDialogParam (USER.241) */ HWND16 WINAPI CreateDialogParam16( HINSTANCE16 hInst, LPCSTR dlgTemplate, HWND16 owner, DLGPROC16 dlgProc, LPARAM param ) { HWND16 hwnd = 0; HRSRC16 hRsrc; HGLOBAL16 hmem; SEGPTR data; TRACE("%04x,%s,%04x,%p,%ld\n", hInst, debugstr_a(dlgTemplate), owner, dlgProc, param ); if (!(hRsrc = FindResource16( hInst, dlgTemplate, (LPSTR)RT_DIALOG ))) return 0; if (!(hmem = LoadResource16( hInst, hRsrc ))) return 0; if (!(data = WOWGlobalLock16( hmem ))) hwnd = 0; else hwnd = CreateDialogIndirectParam16( hInst, data, owner, dlgProc, param ); FreeResource16( hmem ); return hwnd; } /*********************************************************************** * CreateDialogIndirectParam (USER.242) */ HWND16 WINAPI CreateDialogIndirectParam16( HINSTANCE16 hInst, SEGPTR dlgTemplate, HWND16 owner, DLGPROC16 dlgProc, LPARAM param ) { if (!dlgTemplate) return 0; return HWND_16( DIALOG_CreateIndirect16( hInst, dlgTemplate, WIN_Handle32(owner), dlgProc, param, FALSE )); } /************************************************************************** * DlgDirSelectEx (USER.422) */ BOOL16 WINAPI DlgDirSelectEx16( HWND16 hwnd, LPSTR str, INT16 len, INT16 id ) { return DlgDirSelectExA( WIN_Handle32(hwnd), str, len, id ); } /************************************************************************** * DlgDirSelectComboBoxEx (USER.423) */ BOOL16 WINAPI DlgDirSelectComboBoxEx16( HWND16 hwnd, LPSTR str, INT16 len, INT16 id ) { return DlgDirSelectComboBoxExA( WIN_Handle32(hwnd), str, len, id ); } LONG WINAPI GetDialogBaseUnits16(VOID) { return GetDialogBaseUnits(); } ================================================ FILE: user/hook.c ================================================ /* * Windows 16-bit hook functions * * Copyright 1994, 1995, 2002 Alexandre Julliard * Copyright 1996 Andrew Lewycky * * Based on investigations by Alex Korobka * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "winuser.h" #include "wownt32.h" #include "wine/winuser16.h" #include "user_private.h" #include "wine/debug.h" #undef _WINTERNL_ #include "winternl.h" WINE_DEFAULT_DEBUG_CHANNEL(hook); static BOOL WINAPI TebTlsSetValue(TEB *teb, DWORD index, LPVOID value) { if (index < TLS_MINIMUM_AVAILABLE) { teb->TlsSlots[index] = value; } else { index -= TLS_MINIMUM_AVAILABLE; if (index >= 8 * 32 /* 8 * sizeof(teb->Peb->TlsExpansionBitmapBits) */) { return FALSE; } ((PVOID*)teb->TlsExpansionSlots)[index] = value; } return TRUE; } static LPVOID WINAPI TebTlsGetValue(TEB *teb, DWORD index) { LPVOID ret; if (index < TLS_MINIMUM_AVAILABLE) { ret = teb->TlsSlots[index]; } else { index -= TLS_MINIMUM_AVAILABLE; if (index >= 8 * 32 /* 8 * sizeof(teb->Peb->TlsExpansionBitmapBits) */) { return NULL; } if (!teb->TlsExpansionSlots) ret = NULL; else ret = ((PVOID*)teb->TlsExpansionSlots)[index]; } return ret; } static LRESULT CALLBACK task_call_WH_MSGFILTER( INT code, WPARAM wp, LPARAM lp ); static LRESULT CALLBACK task_call_WH_KEYBOARD( INT code, WPARAM wp, LPARAM lp ); static LRESULT CALLBACK task_call_WH_GETMESSAGE( INT code, WPARAM wp, LPARAM lp ); static LRESULT CALLBACK task_call_WH_CALLWNDPROC( INT code, WPARAM wp, LPARAM lp ); static LRESULT CALLBACK task_call_WH_CBT( INT code, WPARAM wp, LPARAM lp ); static LRESULT CALLBACK task_call_WH_SYSMSGFILTER( INT code, WPARAM wp, LPARAM lp ); static LRESULT CALLBACK task_call_WH_MOUSE( INT code, WPARAM wp, LPARAM lp ); static LRESULT CALLBACK task_call_WH_SHELL( INT code, WPARAM wp, LPARAM lp ); static LRESULT CALLBACK global_call_WH_MSGFILTER(INT code, WPARAM wp, LPARAM lp); static LRESULT CALLBACK global_call_WH_KEYBOARD(INT code, WPARAM wp, LPARAM lp); static LRESULT CALLBACK global_call_WH_GETMESSAGE(INT code, WPARAM wp, LPARAM lp); static LRESULT CALLBACK global_call_WH_CALLWNDPROC(INT code, WPARAM wp, LPARAM lp); static LRESULT CALLBACK global_call_WH_CBT(INT code, WPARAM wp, LPARAM lp); static LRESULT CALLBACK global_call_WH_SYSMSGFILTER(INT code, WPARAM wp, LPARAM lp); static LRESULT CALLBACK global_call_WH_MOUSE(INT code, WPARAM wp, LPARAM lp); static LRESULT CALLBACK global_call_WH_SHELL(INT code, WPARAM wp, LPARAM lp); #define WH_MAXHOOK16 WH_SHELL /* Win16 only supports up to WH_SHELL */ #define NB_HOOKS16 (WH_MAXHOOK16 - WH_MINHOOK + 1) static const HOOKPROC hook_procs[NB_HOOKS16] = { task_call_WH_MSGFILTER, /* WH_MSGFILTER */ NULL, /* WH_JOURNALRECORD */ (HOOKPROC)-1, /* WH_JOURNALPLAYBACK */ task_call_WH_KEYBOARD, /* WH_KEYBOARD */ task_call_WH_GETMESSAGE, /* WH_GETMESSAGE */ task_call_WH_CALLWNDPROC, /* WH_CALLWNDPROC */ task_call_WH_CBT, /* WH_CBT */ task_call_WH_SYSMSGFILTER, /* WH_SYSMSGFILTER */ task_call_WH_MOUSE, /* WH_MOUSE */ NULL, /* WH_HARDWARE */ NULL, /* WH_DEBUG */ task_call_WH_SHELL /* WH_SHELL */ }; static const HOOKPROC global_hook_procs[NB_HOOKS16] = { global_call_WH_MSGFILTER, /* WH_MSGFILTER */ NULL, /* WH_JOURNALRECORD */ (HOOKPROC) - 1, /* WH_JOURNALPLAYBACK */ global_call_WH_KEYBOARD, /* WH_KEYBOARD */ global_call_WH_GETMESSAGE, /* WH_GETMESSAGE */ global_call_WH_CALLWNDPROC, /* WH_CALLWNDPROC */ global_call_WH_CBT, /* WH_CBT */ global_call_WH_SYSMSGFILTER, /* WH_SYSMSGFILTER */ global_call_WH_MOUSE, /* WH_MOUSE */ NULL, /* WH_HARDWARE */ NULL, /* WH_DEBUG */ global_call_WH_SHELL /* WH_SHELL */ }; struct hook_entry { struct list entry; SEGPTR proc16; HTASK16 htask16; HINSTANCE16 hinst16; INT type; BOOL global; BOOL deleted; }; extern HQUEUE16 hqFirst; static CRITICAL_SECTION global_hook_section; static CRITICAL_SECTION_DEBUG global_hook_section_debug = { 0, 0, &global_hook_section, { &global_hook_section_debug.ProcessLocksList, &global_hook_section_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": global hook") } }; static CRITICAL_SECTION global_hook_section = { &global_hook_section_debug, -1, 0, 0, 0, 0 }; struct list global_hook_entry[NB_HOOKS16] = { LIST_INIT(global_hook_entry[0]), LIST_INIT(global_hook_entry[1]), LIST_INIT(global_hook_entry[2]), LIST_INIT(global_hook_entry[3]), LIST_INIT(global_hook_entry[4]), LIST_INIT(global_hook_entry[5]), LIST_INIT(global_hook_entry[6]), LIST_INIT(global_hook_entry[7]), LIST_INIT(global_hook_entry[8]), LIST_INIT(global_hook_entry[9]), LIST_INIT(global_hook_entry[10]), LIST_INIT(global_hook_entry[11]), }; struct hook16_queue_info { HHOOK hhook[NB_HOOKS16]; struct list hook_entry[NB_HOOKS16]; HHOOK global_hhook[NB_HOOKS16]; }; static struct hook16_queue_info *get_hook_info( BOOL create, HTASK16 hTask ) { static DWORD hook_tls = TLS_OUT_OF_INDEXES; struct hook16_queue_info *info; TDB *tdb; if (!hTask /* current task */) { info = (struct hook16_queue_info*)TlsGetValue( hook_tls ); } else { tdb = GlobalLock16(hTask); info = (struct hook16_queue_info*)TebTlsGetValue( tdb->teb, hook_tls ); } if (!info && create) { if (hook_tls == TLS_OUT_OF_INDEXES) hook_tls = TlsAlloc(); info = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*info) ); if (!hTask /* current task */) { TlsSetValue( hook_tls, info ); } else { TebTlsSetValue( tdb->teb, hook_tls, info ); } } return info; } #define HHOOK_HIGHWORD MAKEWORD('H', 'K') #define HOOK_MAX 200 /* free list */ struct hook_entry *hook_free; struct list hook_free_list = LIST_INIT(hook_free_list); static void init_hook() { if (hook_free) return; hook_free = HeapAlloc(GetProcessHeap(), 0, HOOK_MAX * sizeof(struct hook_entry)); for (int i = 1; i < HOOK_MAX; i++) { list_add_tail(&hook_free_list, &hook_free[i].entry); hook_free[i].deleted = TRUE; } } static struct hook_entry *allocate_hook() { struct list *alloc; struct hook_entry *entry; init_hook(); alloc = list_head(&hook_free_list); if (!alloc) { ERR("could not allocate HHOOK\n"); return NULL; } list_remove(alloc); entry = LIST_ENTRY(alloc, struct hook_entry, entry); entry->deleted = FALSE; return entry; } static void free_hook(struct hook_entry *entry) { entry->deleted = TRUE; list_add_tail(&hook_free_list, &entry->entry); } /* * HHOOK (~Windows 3.0) * https://devblogs.microsoft.com/oldnewthing/20060809-18/?p=30183 * https://devblogs.microsoft.com/oldnewthing/20060810-06/?p=30173 * HHOOK (Windows 3.1~) * HIWORD: 'HK' * LOWORD: near pointer? * LOWORD: index (NTVDM) */ static HHOOK entry_to_hhook(struct hook_entry *entry) { if (entry->deleted) return NULL; if (hook_free <= entry && hook_free + HOOK_MAX >= entry) return (HHOOK)MAKELONG((WORD)(entry - hook_free), HHOOK_HIGHWORD); return NULL; } static struct hook_entry *hhook_to_entry(HHOOK hhook) { struct hook_entry *entry = (struct hook_entry*)(LOWORD(hhook) + hook_free); if (HIWORD(hhook) != HHOOK_HIGHWORD) return NULL; if (entry->deleted) return NULL; return entry; } /*********************************************************************** * map_msg_16_to_32 */ static inline void map_msg_16_to_32( const MSG16 *msg16, MSG *msg32 ) { msg32->hwnd = WIN_Handle32(msg16->hwnd); msg32->message = msg16->message; msg32->wParam = msg16->wParam; msg32->lParam = msg16->lParam; msg32->time = msg16->time; msg32->pt.x = msg16->pt.x; msg32->pt.y = msg16->pt.y; } /*********************************************************************** * map_msg_32_to_16 */ static inline void map_msg_32_to_16( const MSG *msg32, MSG16 *msg16 ) { msg16->hwnd = HWND_16(msg32->hwnd); msg16->message = msg32->message; msg16->wParam = msg32->wParam; msg16->lParam = msg32->lParam; msg16->time = msg32->time; msg16->pt.x = msg32->pt.x; msg16->pt.y = msg32->pt.y; } static LRESULT call_hook_entry_16(struct hook16_queue_info *info, struct hook_entry *hook_entry, INT id, INT code, WPARAM wp, LPARAM lp); /*********************************************************************** * call_hook_16 */ static LRESULT call_hook_16( INT id, INT code, WPARAM wp, LPARAM lp, BOOL global ) { _EnterWin16Lock(); struct hook16_queue_info *info = get_hook_info(FALSE, 0); struct list *head = list_head(&(global ? global_hook_entry : info->hook_entry)[id - WH_MIN]); LRESULT result = 0; if (head) { struct hook_entry *hook_entry = LIST_ENTRY(head, struct hook_entry, entry); result = call_hook_entry_16(info, hook_entry, id, code, wp, lp); } _LeaveWin16Lock(); return result; } static LRESULT call_hook_entry_16( struct hook16_queue_info *info, struct hook_entry *hook_entry, INT id, INT code, WPARAM wp, LPARAM lp ) { WORD args[4]; DWORD ret; CONTEXT context; args[3] = code; args[2] = wp; args[1] = HIWORD(lp); args[0] = LOWORD(lp); memset(&context, 0, sizeof(context)); context.SegDs = context.SegEs = SELECTOROF(getWOW32Reserved()); context.SegFs = wine_get_fs(); context.SegGs = wine_get_gs(); context.Eax = context.SegDs; context.SegCs = SELECTOROF((DWORD)hook_entry->proc16); context.Eip = OFFSETOF((DWORD)hook_entry->proc16); context.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME, bp); WOWCallback16Ex( (DWORD)hook_entry->proc16, WCB16_REGS | WCB16_PASCAL, sizeof(args), args, (LPDWORD)&context ); ret = MAKELONG(LOWORD(context.Eax), LOWORD(context.Edx)); /* Grrr. While the hook procedure is supposed to have an LRESULT return value even in Win16, it seems that for those hook types where the return value is interpreted as BOOL, Windows doesn't actually check the HIWORD ... Some buggy Win16 programs, notably WINFILE, rely on that, because they neglect to clear DX ... */ if (id != WH_JOURNALPLAYBACK) ret = LOWORD( ret ); return ret; } struct wndproc_hook_params { HHOOK hhook; INT code; WPARAM wparam; BOOL global; }; /* callback for WINPROC_Call16To32A */ static LRESULT wndproc_hook_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { struct wndproc_hook_params *params = arg; CWPSTRUCT cwp; cwp.hwnd = hwnd; cwp.message = msg; cwp.wParam = wp; cwp.lParam = lp; *result = 0; return CallNextHookEx( params->hhook, params->code, params->wparam, (LPARAM)&cwp ); } /* callback for WINPROC_Call32ATo16 */ static LRESULT wndproc_hook_callback16( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp, LRESULT *result, void *arg ) { struct wndproc_hook_params *params = (struct wndproc_hook_params*)arg; CWPSTRUCT16 cwp; LRESULT ret; cwp.hwnd = hwnd; cwp.message = msg; cwp.wParam = wp; cwp.lParam = lp; lp = MapLS( &cwp ); ret = call_hook_16( WH_CALLWNDPROC, params->code, params->wparam, lp, params->global ); UnMapLS( lp ); *result = 0; return ret; } struct msgfilter_hook_params { HHOOK hhook; INT code; DWORD time; POINT pt; WPARAM wparam; BOOL global; INT type; }; static LRESULT msgfilter_hook_callback16( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp, LRESULT *result, void *arg ) { struct msgfilter_hook_params *params = (struct msgfilter_hook_params*)arg; MSG16 msg16; LRESULT ret; msg16.hwnd = hwnd; msg16.message = msg; msg16.wParam = wp; msg16.lParam = lp; msg16.time = params->time; msg16.pt.x = params->pt.x; msg16.pt.y = params->pt.y; lp = MapLS( &msg16 ); ret = call_hook_16( params->type, params->code, params->wparam, lp, params->global ); UnMapLS( lp ); *result = 0; return ret; } /* helper for SendMessage16 */ void call_WH_CALLWNDPROC_hook( HWND16 hwnd, UINT16 *msg, WPARAM16 *wp, LPARAM *lp ) { CWPSTRUCT16 cwp; SEGPTR lpcwp = 0; struct hook16_queue_info *info = get_hook_info( FALSE, 0 ); if (!info || (!info->hhook[WH_CALLWNDPROC - WH_MINHOOK] && !info->global_hhook[WH_CALLWNDPROC - WH_MINHOOK])) return; cwp.hwnd = hwnd; cwp.message = *msg; cwp.wParam = *wp; cwp.lParam = *lp; lpcwp = MapLS( &cwp ); if (info->global_hhook[WH_CALLWNDPROC - WH_MINHOOK]) call_hook_16(WH_CALLWNDPROC, HC_ACTION, 1, lpcwp, TRUE); if (info->hhook[WH_CALLWNDPROC - WH_MINHOOK]) call_hook_16(WH_CALLWNDPROC, HC_ACTION, 1, lpcwp, FALSE); UnMapLS( lpcwp ); *msg = cwp.message; *wp = cwp.wParam; *lp = cwp.lParam; } HHOOK get_hhook(INT code, BOOL global) { if (global) { return get_hook_info(FALSE, 0)->global_hhook[code - WH_MIN]; } return get_hook_info(FALSE, 0)->hhook[code - WH_MIN]; } /*********************************************************************** * call_WH_MSGFILTER */ static LRESULT CALLBACK call_WH_MSGFILTER( INT code, WPARAM wp, LPARAM lp, BOOL global ) { MSG *msg32 = (MSG *)lp; MSG16 msg16; MSG16 *thunk; LRESULT ret; CallNextHookEx(get_hhook(WH_MSGFILTER, global), code, wp, lp); if (thunk = (MSG16 *)GetPropA(msg32->hwnd, "dialogmsgthunk")) ret = call_hook_16( WH_MSGFILTER, code, wp, thunk, global); else { struct msgfilter_hook_params params; MSG *msg = (MSG *)lp; LRESULT result; params.time = msg->time; params.pt.x = msg->pt.x; params.pt.y = msg->pt.y; params.code = code; params.wparam = wp; params.global = global; params.type = WH_MSGFILTER; return WINPROC_CallProc32ATo16( msgfilter_hook_callback16, msg->hwnd, msg->message, msg->wParam, msg->lParam, &result, ¶ms ); } return ret; } static LRESULT CALLBACK task_call_WH_MSGFILTER(INT code, WPARAM wp, LPARAM lp) { return call_WH_MSGFILTER(code, wp, lp, FALSE); } static LRESULT CALLBACK global_call_WH_MSGFILTER(INT code, WPARAM wp, LPARAM lp) { return call_WH_MSGFILTER(code, wp, lp, TRUE); } /*********************************************************************** * call_WH_KEYBOARD */ static LRESULT CALLBACK call_WH_KEYBOARD( INT code, WPARAM wp, LPARAM lp, BOOL global ) { CallNextHookEx(get_hhook(WH_KEYBOARD, global), code, wp, lp); return call_hook_16( WH_KEYBOARD, code, wp, lp, global ); } static LRESULT CALLBACK task_call_WH_KEYBOARD(INT code, WPARAM wp, LPARAM lp) { return call_WH_KEYBOARD(code, wp, lp, FALSE); } static LRESULT CALLBACK global_call_WH_KEYBOARD(INT code, WPARAM wp, LPARAM lp) { return call_WH_KEYBOARD(code, wp, lp, TRUE); } /*********************************************************************** * call_WH_GETMESSAGE */ static LRESULT CALLBACK call_WH_GETMESSAGE( INT code, WPARAM wp, LPARAM lp, BOOL global ) { struct msgfilter_hook_params params; MSG *msg = (MSG *)lp; LRESULT result; CallNextHookEx(get_hhook(WH_GETMESSAGE, global), code, wp, lp); params.time = msg->time; params.pt.x = msg->pt.x; params.pt.y = msg->pt.y; params.code = code; params.wparam = wp; params.global = global; params.type = WH_GETMESSAGE; return WINPROC_CallProc32ATo16( msgfilter_hook_callback16, msg->hwnd, msg->message, msg->wParam, msg->lParam, &result, ¶ms ); } static LRESULT CALLBACK task_call_WH_GETMESSAGE(INT code, WPARAM wp, LPARAM lp) { return call_WH_GETMESSAGE(code, wp, lp, FALSE); } static LRESULT CALLBACK global_call_WH_GETMESSAGE(INT code, WPARAM wp, LPARAM lp) { return call_WH_GETMESSAGE(code, wp, lp, TRUE); } /*********************************************************************** * call_WH_CALLWNDPROC */ static LRESULT CALLBACK call_WH_CALLWNDPROC( INT code, WPARAM wp, LPARAM lp, BOOL global ) { struct wndproc_hook_params params; CWPSTRUCT *cwp32 = (CWPSTRUCT *)lp; LRESULT result; CallNextHookEx(get_hhook(WH_CALLWNDPROC, global), code, wp, lp); params.code = code; params.wparam = wp; params.global = global; return WINPROC_CallProc32ATo16( wndproc_hook_callback16, cwp32->hwnd, cwp32->message, cwp32->wParam, cwp32->lParam, &result, ¶ms ); } static LRESULT CALLBACK task_call_WH_CALLWNDPROC(INT code, WPARAM wp, LPARAM lp) { return call_WH_CALLWNDPROC(code, wp, lp, FALSE); } static LRESULT CALLBACK global_call_WH_CALLWNDPROC(INT code, WPARAM wp, LPARAM lp) { return call_WH_CALLWNDPROC(code, wp, lp, TRUE); } /*********************************************************************** * call_WH_CBT */ static LRESULT CALLBACK call_WH_CBT( INT code, WPARAM wp, LPARAM lp, BOOL global ) { LRESULT ret = 0; CallNextHookEx(get_hhook(WH_CBT, global), code, wp, lp); switch (code) { case HCBT_CREATEWND: { CBT_CREATEWNDA *cbtcw32 = (CBT_CREATEWNDA *)lp; CBT_CREATEWND16 cbtcw16; CREATESTRUCT16 cs16; cs16.lpCreateParams = (SEGPTR)cbtcw32->lpcs->lpCreateParams; cs16.hInstance = HINSTANCE_16(cbtcw32->lpcs->hInstance); cs16.hMenu = HMENU_16(cbtcw32->lpcs->hMenu); cs16.hwndParent = HWND_16(cbtcw32->lpcs->hwndParent); cs16.cy = cbtcw32->lpcs->cy; cs16.cx = cbtcw32->lpcs->cx; cs16.y = cbtcw32->lpcs->y; cs16.x = cbtcw32->lpcs->x; cs16.style = cbtcw32->lpcs->style; cs16.lpszName = MapLS( cbtcw32->lpcs->lpszName ); cs16.lpszClass = MapLS( win16classname(cbtcw32->lpcs->lpszClass) ); cs16.dwExStyle = cbtcw32->lpcs->dwExStyle; cbtcw16.lpcs = (CREATESTRUCT16 *)MapLS( &cs16 ); cbtcw16.hwndInsertAfter = HWND_16( cbtcw32->hwndInsertAfter ); lp = MapLS( &cbtcw16 ); ret = call_hook_16( WH_CBT, code, HWND_16(wp), lp, global ); UnMapLS( cs16.lpszName ); UnMapLS( cs16.lpszClass ); cbtcw32->hwndInsertAfter = WIN_Handle32( cbtcw16.hwndInsertAfter ); UnMapLS( (SEGPTR)cbtcw16.lpcs ); UnMapLS( lp ); break; } case HCBT_ACTIVATE: { CBTACTIVATESTRUCT *cas32 = (CBTACTIVATESTRUCT *)lp; CBTACTIVATESTRUCT16 cas16; cas16.fMouse = cas32->fMouse; cas16.hWndActive = HWND_16( cas32->hWndActive ); lp = MapLS( &cas16 ); ret = call_hook_16( WH_CBT, code, HWND_16(wp), lp, global ); UnMapLS( lp ); break; } case HCBT_CLICKSKIPPED: { MOUSEHOOKSTRUCT *ms32 = (MOUSEHOOKSTRUCT *)lp; MOUSEHOOKSTRUCT16 ms16; ms16.pt.x = ms32->pt.x; ms16.pt.y = ms32->pt.y; ms16.hwnd = HWND_16( ms32->hwnd ); ms16.wHitTestCode = ms32->wHitTestCode; ms16.dwExtraInfo = ms32->dwExtraInfo; lp = MapLS( &ms16 ); ret = call_hook_16( WH_CBT, code, wp, lp, global ); UnMapLS( lp ); break; } case HCBT_MOVESIZE: { RECT *rect32 = (RECT *)lp; RECT16 rect16; rect16.left = rect32->left; rect16.top = rect32->top; rect16.right = rect32->right; rect16.bottom = rect32->bottom; lp = MapLS( &rect16 ); ret = call_hook_16( WH_CBT, code, HWND_16(wp), lp, global ); UnMapLS( lp ); break; } case HCBT_MINMAX: { ret = call_hook_16(WH_CBT, code, HWND_16(wp), lp, global); break; } case HCBT_QS: { ret = call_hook_16(WH_CBT, code, wp, lp, global); break; } case HCBT_DESTROYWND: { ret = call_hook_16(WH_CBT, code, HWND_16(wp), lp, global); break; } case HCBT_KEYSKIPPED: { ret = call_hook_16(WH_CBT, code, wp, lp, global); break; } case HCBT_SYSCOMMAND: { ret = call_hook_16(WH_CBT, code, wp, lp, global); break; } case HCBT_SETFOCUS: { ret = call_hook_16(WH_CBT, code, HWND_16(wp), HWND_16(lp), global); break; } default: ERR("unknown wndproc hook code:%04X, wParam=%p, lParam=%p\n", code, wp, lp); } return ret; } static LRESULT CALLBACK task_call_WH_CBT(INT code, WPARAM wp, LPARAM lp) { return call_WH_CBT(code, wp, lp, FALSE); } static LRESULT CALLBACK global_call_WH_CBT(INT code, WPARAM wp, LPARAM lp) { return call_WH_CBT(code, wp, lp, TRUE); } /*********************************************************************** * call_WH_SYSMSGFILTER */ static LRESULT CALLBACK call_WH_SYSMSGFILTER( INT code, WPARAM wp, LPARAM lp, BOOL global ) { MSG *msg32 = (MSG *)lp; MSG16 msg16; LRESULT ret; CallNextHookEx(get_hhook(WH_SYSMSGFILTER, global), code, wp, lp); map_msg_32_to_16( msg32, &msg16 ); lp = MapLS( &msg16 ); ret = call_hook_16( WH_SYSMSGFILTER, code, wp, lp, global); UnMapLS( lp ); return ret; } static LRESULT CALLBACK task_call_WH_SYSMSGFILTER(INT code, WPARAM wp, LPARAM lp) { return call_WH_SYSMSGFILTER(code, wp, lp, FALSE); } static LRESULT CALLBACK global_call_WH_SYSMSGFILTER(INT code, WPARAM wp, LPARAM lp) { return call_WH_SYSMSGFILTER(code, wp, lp, TRUE); } /*********************************************************************** * call_WH_MOUSE */ static LRESULT CALLBACK call_WH_MOUSE( INT code, WPARAM wp, LPARAM lp, BOOL global ) { MOUSEHOOKSTRUCT *ms32 = (MOUSEHOOKSTRUCT *)lp; MOUSEHOOKSTRUCT16 ms16; LRESULT ret; CallNextHookEx(get_hhook(WH_MOUSE, global), code, wp, lp); ms16.pt.x = ms32->pt.x; ms16.pt.y = ms32->pt.y; ms16.hwnd = HWND_16( ms32->hwnd ); ms16.wHitTestCode = ms32->wHitTestCode; ms16.dwExtraInfo = ms32->dwExtraInfo; lp = MapLS( &ms16 ); ret = call_hook_16( WH_MOUSE, code, wp, lp, global ); UnMapLS( lp ); return ret; } static LRESULT CALLBACK task_call_WH_MOUSE(INT code, WPARAM wp, LPARAM lp) { return call_WH_MOUSE(code, wp, lp, FALSE); } static LRESULT CALLBACK global_call_WH_MOUSE(INT code, WPARAM wp, LPARAM lp) { return call_WH_MOUSE(code, wp, lp, TRUE); } /*********************************************************************** * call_WH_SHELL */ static LRESULT CALLBACK call_WH_SHELL( INT code, WPARAM wp, LPARAM lp, BOOL global ) { CallNextHookEx(get_hhook(WH_SHELL, global), code, wp, lp); return call_hook_16( WH_SHELL, code, wp, lp, global ); } static LRESULT CALLBACK task_call_WH_SHELL(INT code, WPARAM wp, LPARAM lp) { return call_WH_SHELL(code, wp, lp, FALSE); } static LRESULT CALLBACK global_call_WH_SHELL(INT code, WPARAM wp, LPARAM lp) { return call_WH_SHELL(code, wp, lp, TRUE); } struct journal_pb { UINT_PTR timer; EVENTMSG16 emsg; }; // TODO: mouse messages static void WINAPI journal_playback_cb( HWND hwnd, UINT msg, UINT_PTR id, DWORD sysTime ) { EVENTMSG16 emsg; LPARAM lp; INPUT input; LRESULT time = 0; struct hook16_queue_info *info = get_hook_info(FALSE, 0); struct journal_pb *jp = info->global_hhook[WH_JOURNALPLAYBACK - WH_MINHOOK]; BOOL msg_rdy = jp->emsg.message ? TRUE : FALSE; if (msg_rdy) memcpy(&emsg, &jp->emsg, sizeof(EVENTMSG16)); start: if (!msg_rdy) { lp = MapLS( &emsg ); time = call_hook_16( WH_JOURNALPLAYBACK, HC_GETNEXT, 0, lp, TRUE ); UnMapLS( lp ); } if (!time) { TRACE("WH_JOURNALPLAYBACK message: %x paramL: %x paramH: %x\n", emsg.message, emsg.paramL, emsg.paramH); switch( emsg.message ) { case WM_QUEUESYNC: if (GetActiveWindow16()) PostMessage16(GetActiveWindow16(), WM_QUEUESYNC, 0, NULL); else PostThreadMessage(GetCurrentThreadId(), WM_QUEUESYNC, 0, NULL); break; case WM_KEYDOWN: case WM_SYSKEYDOWN: input.type = 1; input.ki.wVk = emsg.paramL; input.ki.wScan = emsg.paramH; input.ki.dwFlags = 0; input.ki.time = 0; input.ki.dwExtraInfo = 0; SendInput( 1, &input, sizeof(input) ); break; case WM_KEYUP: case WM_SYSKEYUP: input.type = 1; input.ki.wVk = emsg.paramL; input.ki.wScan = emsg.paramH; input.ki.dwFlags = 2; input.ki.time = 0; input.ki.dwExtraInfo = 0; SendInput( 1, &input, sizeof(input) ); break; } if (!info->global_hhook[WH_JOURNALPLAYBACK - WH_MINHOOK]) return; call_hook_16( WH_JOURNALPLAYBACK, HC_SKIP, 0, 0, TRUE ); msg_rdy = FALSE; goto start; } if (!info->global_hhook[WH_JOURNALPLAYBACK - WH_MINHOOK]) return; memcpy(&jp->emsg, &emsg, sizeof(EVENTMSG16)); SetTimer(NULL, jp->timer, time, journal_playback_cb); } /*********************************************************************** * SetWindowsHook (USER.121) */ FARPROC16 WINAPI SetWindowsHook16( INT16 id, HOOKPROC16 proc ) { HINSTANCE16 hInst = FarGetOwner16( HIWORD(proc) ); /* WH_MSGFILTER is the only task-specific hook for SetWindowsHook() */ HTASK16 hTask = (id == WH_MSGFILTER) ? GetCurrentTask() : 0; if (SELECTOROF(proc) == 0x4b48) // Don't try to call an hhook, this a valid GDT selector we only use the LDT return 0; return (FARPROC16)SetWindowsHookEx16( id, proc, hInst, hTask ); } void install_global_hook() { QUEUE16 *q = (QUEUE16*)MapSL(MAKESEGPTR(hqFirst, 0)); while (q) { if (IsTask16(q->hTask)) { struct hook16_queue_info *info = get_hook_info(TRUE, q->hTask); TDB *tdb; int id; tdb = GlobalLock16(q->hTask); for (id = WH_MINHOOK; id < WH_MAXHOOK16; id++) { int index = id - WH_MINHOOK; if (!list_empty(&global_hook_entry[index])) { if (!info->global_hhook[index]) { info->global_hhook[index] = SetWindowsHookExA(id, global_hook_procs[index], 0, *(LPDWORD)((LPBYTE)tdb->teb + 0x24)); } } } } q = (QUEUE16*)MapSL(MAKESEGPTR(q->next, 0)); } } /*********************************************************************** * SetWindowsHookEx (USER.291) */ HHOOK WINAPI SetWindowsHookEx16(INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst, HTASK16 hTask) { struct hook16_queue_info *info; int index = id - WH_MINHOOK; DWORD thread = GetCurrentThreadId(); struct hook_entry *entry; TRACE("(%d,%04x:%04x,%04x,%04x)\n", id, SELECTOROF(proc), OFFSETOF(proc), hInst, hTask); if (id < WH_MINHOOK || id > WH_MAXHOOK16) return 0; if (!hook_procs[index]) { FIXME("hook type %d broken in Win16\n", id); return 0; } if (!hTask) WARN("System-global hooks (%d) broken in Win16\n", id); else if (hTask != GetCurrentTask()) { thread = (DWORD)HTASK_32(hTask); if (!thread) { ERR("invalid task? %04x\n", hTask); return 0; } } if (hTask) { info = get_hook_info(TRUE, hTask); if (!info->hhook[index]) { if (id == WH_JOURNALPLAYBACK) { ERR("WH_JOURNALPLAYBACK is always global\n"); return 0; } else { info->hhook[index] = SetWindowsHookExA(id, hook_procs[index], 0, thread); } } if (!info->hhook[index]) return 0; if (info) { struct list *head = &info->hook_entry[index]; entry = (struct hook_entry*)allocate_hook(); if (!entry) { ERR("failed to allocate hook\n"); return 0; } if (!head->next) { list_init(head); } list_add_head(head, &entry->entry); entry->proc16 = proc; entry->hinst16 = GetExePtr(hInst); entry->htask16 = hTask; entry->type = id; entry->global = FALSE; } } else { entry = (struct hook_entry*)allocate_hook(); if (!entry) { ERR("failed to allocate hook\n"); return 0; } if (id == WH_JOURNALPLAYBACK) { struct hook16_queue_info *info = get_hook_info(TRUE, 0); if (info->global_hhook[index]) { ERR("journal playback hook already set\n"); free_hook(entry); return 0; } BlockInput(TRUE); struct journal_pb *jp = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct journal_pb)); jp->timer = SetTimer(NULL, 0, 10, journal_playback_cb); info->global_hhook[index] = jp; } entry->proc16 = proc; entry->hinst16 = GetExePtr(hInst); entry->htask16 = GetCurrentTask(); entry->type = id; entry->global = TRUE; list_add_head(&global_hook_entry[index], &entry->entry); if (id != WH_JOURNALPLAYBACK) install_global_hook(); } return entry_to_hhook(entry); } static BOOL16 unhook_global_hook(INT16 id, HOOKPROC16 proc) { int index = id - WH_MINHOOK; EnterCriticalSection(&global_hook_section); struct hook_entry *hook_entry, *next; LIST_FOR_EACH_ENTRY_SAFE(hook_entry, next, &global_hook_entry[index], struct hook_entry, entry) { if (hook_entry->proc16 == proc) { LeaveCriticalSection(&global_hook_section); return UnhookWindowsHookEx16(entry_to_hhook(hook_entry)); } } LeaveCriticalSection(&global_hook_section); } /*********************************************************************** * UnhookWindowsHook (USER.234) */ BOOL16 WINAPI UnhookWindowsHook16( INT16 id, HOOKPROC16 proc ) { int index = id - WH_MINHOOK; struct hook16_queue_info *info; struct hook_entry *hook_entry, *next; TRACE("(%d,%04x:%04x)\n", id, SELECTOROF(proc), OFFSETOF(proc)); if (id < WH_MINHOOK || id > WH_MAXHOOK16) return FALSE; info = get_hook_info(FALSE, 0); if (!info || info->hook_entry[index].next == NULL) { return unhook_global_hook(id, proc); } LIST_FOR_EACH_ENTRY_SAFE(hook_entry, next, &info->hook_entry[index], struct hook_entry, entry) { if (hook_entry->proc16 == proc) { return UnhookWindowsHookEx16(entry_to_hhook(hook_entry)); } } return unhook_global_hook(id, proc); } /*********************************************************************** * UnhookWindowsHookEx (USER.292) */ BOOL16 WINAPI UnhookWindowsHookEx16(HHOOK hhook) { BOOL result = FALSE; struct hook16_queue_info *info; struct hook_entry *unhook = hhook_to_entry(hhook); INT type; struct list *entry; TRACE("(%08x)\n", hhook); if (!unhook) return FALSE; info = get_hook_info(FALSE, unhook->htask16); type = unhook->type; int index = type - WH_MINHOOK; if (unhook->global) { entry = &global_hook_entry[index]; } else { entry = &info->hook_entry[index]; } if (info) { struct hook_entry *hook_entry, *next; LIST_FOR_EACH_ENTRY_SAFE(hook_entry, next, entry, struct hook_entry, entry) { if (hook_entry == unhook) { list_remove(&hook_entry->entry); free_hook(hook_entry); result = TRUE; } } if (list_empty(entry)) { if (type == WH_JOURNALPLAYBACK) { INPUT input = {0}; input.type = 1; input.ki.dwFlags = KEYEVENTF_KEYUP; // check the modifers and make sure they are released if not pressed if (!(GetAsyncKeyState(VK_SHIFT) & 0x8000)) { input.ki.wVk = VK_SHIFT; SendInput(1, &input, sizeof(INPUT)); } if (!(GetAsyncKeyState(VK_CONTROL) & 0x8000)) { input.ki.wVk = VK_CONTROL; SendInput(1, &input, sizeof(INPUT)); } if (!(GetAsyncKeyState(VK_MENU) & 0x8000)) { input.ki.wVk = VK_MENU; SendInput(1, &input, sizeof(INPUT)); } BlockInput(FALSE); KillTimer(NULL, ((struct journal_pb *)(info->global_hhook[index]))->timer); HeapFree(GetProcessHeap(), 0, (UINT_PTR)info->global_hhook[index]); info->global_hhook[index] = NULL; } else { UnhookWindowsHookEx(info->hhook[index]); } info->hhook[index] = NULL; } } return result; } /*********************************************************************** * CallMsgFilter32 (USER.823) */ BOOL16 WINAPI CallMsgFilter32_16( MSG32_16 *lpmsg16_32, INT16 code, BOOL16 wHaveParamHigh ) { MSG msg32; BOOL16 ret; if (GetSysModalWindow16()) return FALSE; msg32.hwnd = WIN_Handle32( lpmsg16_32->msg.hwnd ); msg32.message = lpmsg16_32->msg.message; msg32.lParam = lpmsg16_32->msg.lParam; msg32.time = lpmsg16_32->msg.time; msg32.pt.x = lpmsg16_32->msg.pt.x; msg32.pt.y = lpmsg16_32->msg.pt.y; if (wHaveParamHigh) msg32.wParam = MAKELONG(lpmsg16_32->msg.wParam, lpmsg16_32->wParamHigh); else msg32.wParam = lpmsg16_32->msg.wParam; ret = (BOOL16)CallMsgFilterA(&msg32, code); lpmsg16_32->msg.hwnd = HWND_16( msg32.hwnd ); lpmsg16_32->msg.message = msg32.message; lpmsg16_32->msg.wParam = LOWORD(msg32.wParam); lpmsg16_32->msg.lParam = msg32.lParam; lpmsg16_32->msg.time = msg32.time; lpmsg16_32->msg.pt.x = msg32.pt.x; lpmsg16_32->msg.pt.y = msg32.pt.y; if (wHaveParamHigh) lpmsg16_32->wParamHigh = HIWORD(msg32.wParam); return ret; } /*********************************************************************** * CallMsgFilter (USER.123) */ BOOL16 WINAPI CallMsgFilter16( MSG16 *msg, INT16 code ) { return CallMsgFilter32_16( (MSG32_16 *)msg, code, FALSE ); } /*********************************************************************** * CallNextHookEx (USER.293) */ LRESULT WINAPI CallNextHookEx16( HHOOK hhook, INT16 code, WPARAM16 wparam, LPARAM lparam ) { struct hook16_queue_info *info = get_hook_info(FALSE, 0); struct hook_entry *entry = hhook_to_entry(hhook); LRESULT ret = 0; struct list *next; struct hook_entry *next_hook; if (!entry) return 0; next = list_next(&(entry->global ? global_hook_entry : info->hook_entry)[entry->type - WH_MIN], &entry->entry); if (!next) return 0; next_hook = LIST_ENTRY(next, struct hook_entry, entry); if (!next_hook) return 0; return call_hook_entry_16(info, next_hook, next_hook->type, code, wparam, lparam); } /*********************************************************************** * DefHookProc (USER.235) */ LRESULT WINAPI DefHookProc16( INT16 code, WPARAM16 wparam, LPARAM lparam, HHOOK *lphhook ) { if (!((LONG_PTR)lphhook >> 16)) { return 0; } return CallNextHookEx16( *lphhook, code, wparam, lparam ); } void free_module_hooks(HINSTANCE16 hinst) { QUEUE16 *q = (QUEUE16*)MapSL(MAKESEGPTR(hqFirst, 0)); while (q) { if (IsTask16(q->hTask)) { struct hook16_queue_info *info = get_hook_info(FALSE, q->hTask); int i; if (info) { for (i = 0; i < NB_HOOKS16; i++) { struct list *list = &info->hook_entry[i]; struct hook_entry *hook_entry, *next; if (list->next == NULL) continue; LIST_FOR_EACH_ENTRY_SAFE(hook_entry, next, list, struct hook_entry, entry) { if (hook_entry->hinst16 == hinst) { UnhookWindowsHookEx16(entry_to_hhook(hook_entry)); } } } } } q = (QUEUE16*)MapSL(MAKESEGPTR(q->next, 0)); } } ================================================ FILE: user/message.c ================================================ /* * 16-bit messaging support * * Copyright 2001 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include "wine/winuser16.h" #include "wownt32.h" #include "winerror.h" #include "dde.h" #include "user_private.h" #include "wine/debug.h" #include "message_table.h" #include "../krnl386/kernel16_private.h" #include "commctrl.h" #include "wine/exception.h" #include #include /* unknwon combobox message When EDIT received WM_KILLFOCUS, EDIT sent this message to COMBOBOX. */ #define CB_UNKNOWN_167 0x167 #define CB_UNKNOWN_167_16 (WM_USER + 27) /* undocumented messages */ //reactos sdk/include/reactos/undocuser.h #define WM_QUERYPARKICON 0x00000036 #define WM_CLIENTSHUTDOWN 0x0000003B #define WM_COPYGLOBALDATA 0x00000049 #define WM_LOGONNOTIFY 0x0000004C #define WM_KLUDGEMINRECT 0x0000008B #define WM_UAHDRAWMENU 0x00000091 #define WM_UAHDRAWITEM 0x00000092 // WM_DRAWITEM #define WM_UAHINITMENU 0x00000093 #define WM_UAHMEASUREITEM 0x00000094 // WM_MEASUREITEM #define WM_UAHDRAWMENUNC 0x00000095 #define WM_NCUAHDRAWCAPTION 0x000000AE #define WM_NCUAHDRAWFRAME 0x000000AF #define WM_CBLOSTTEXTFOCUS 0x00000167 #define MN_SETHMENU 0x000001e0 #define WM_POPUPSYSTEMMENU 0x00000313 #define WM_UAHINIT 0x0000031b #ifndef EM_ENABLEFEATURE /* WINVER < 0x0604 */ #define EM_ENABLEFEATURE 0x00DA #endif WINE_DEFAULT_DEBUG_CHANNEL(msg); WINE_DECLARE_DEBUG_CHANNEL(message); BOOL is_win_menu_disallowed(DWORD style); ULONG WINAPI get_windows_build(); DWORD USER16_AlertableWait = 0; static UINT aviwnd_msg = 0; static void *aviwnd_cwp; static ATOM dialogmsgthunk; struct wow_handlers32 wow_handlers32; #define TIMER32_LPARAM 0x42137460 struct timer32_wrapper { WPARAM wParam; LPARAM lParam; BOOL ref; }; #define TIMER32_WRAP_SIZE 400 static int timer32_count; static struct timer32_wrapper timer32[TIMER32_WRAP_SIZE]; typedef enum { WINDOW_TYPE_WINDOW, WINDOW_TYPE_STATIC, WINDOW_TYPE_BUTTON, WINDOW_TYPE_LISTBOX, WINDOW_TYPE_EDIT, WINDOW_TYPE_SCROLLBAR, WINDOW_TYPE_COMBOBOX, WINDOW_TYPE_MDICLIENT, WINDOW_TYPE_AVIWND, } WINDOW_TYPE; LPBYTE window_type_table; #include typedef struct { UINT16 uNotification; HWND16 hWnd; POINT16 ptCursor; } DRAGLISTINFO16; #include UINT drag_list_message; static void dump_hmenu(HMENU menu) { int count = GetMenuItemCount(menu); for (int i = 0; i < count; i++) { MENUITEMINFOA item = { sizeof(MENUITEMINFOA) }; item.fMask = MIIM_BITMAP | MIIM_ID | MIIM_STRING; char buf[1000]; buf[0] = 0; item.dwTypeData = buf; item.cch = 1000; if (!GetMenuItemInfoA(menu, i, TRUE, &item)) { } MESSAGE("%s bmp:%p id:%04x\n", buf, item.hbmpItem, item.wID); if (item.hSubMenu) { MESSAGE("====BEGIN SUB MENU %p/%p ====\n", menu, item.hSubMenu); dump_hmenu(item.hSubMenu); MESSAGE("====END SUB MENU %p/%p ====\n", menu, item.hSubMenu); } } } static void dump_menu(HWND hwnd) { HMENU menu = GetMenu(hwnd); dump_hmenu(menu); } static LRESULT send_message_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { *result = SendMessageA( hwnd, msg, wp, lp ); return *result; } static LRESULT post_message_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { *result = 0; return PostMessageA( hwnd, msg, wp, lp ); } static LRESULT post_thread_message_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { DWORD_PTR tid = (DWORD_PTR)arg; *result = 0; return PostThreadMessageA( tid, msg, wp, lp ); } /*static */LRESULT get_message_callback( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp, LRESULT *result, void *arg ) { MSG16 *msg16 = arg; msg16->hwnd = hwnd; msg16->message = msg; msg16->wParam = wp; msg16->lParam = lp; *result = 0; return 0; } static LRESULT defdlg_proc_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { *result = DefDlgProcA( hwnd, msg, wp, lp ); return *result; } static LRESULT call_window_proc_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { WNDPROC proc = arg; DWORD count; ReleaseThunkLock(&count); *result = CallWindowProcA( proc, hwnd, msg, wp, lp ); RestoreThunkLock(count); return *result; } /********************************************************************** * Support for window procedure thunks */ #include "pshpack1.h" typedef struct { BYTE popl_eax; /* popl %eax (return address) */ BYTE pushl_func; /* pushl $proc */ WNDPROC proc; BYTE pushl_eax; /* pushl %eax */ BYTE ljmp; /* ljmp relay*/ DWORD relay_offset; /* __wine_call_wndproc */ WORD relay_sel; } WINPROC_THUNK; #include "poppack.h" /* 0xffffxxxx is already used by WOW64. */ #define WINPROC_HANDLE 0xfffe #define MAX_WINPROCS32 4096 #define MAX_WINPROCS16 1024 static WNDPROC16 winproc16_array[MAX_WINPROCS16]; static unsigned int winproc16_used; static WINPROC_THUNK *thunk_array; static UINT thunk_selector; /* return the window proc index for a given handle, or -1 for an invalid handle * indices 0 .. MAX_WINPROCS32-1 are for 32-bit procs, * indices MAX_WINPROCS32 .. MAX_WINPROCS32+MAX_WINPROCS16-1 for 16-bit procs */ static int winproc_to_index( WNDPROC16 handle ) { unsigned int index; if (HIWORD(handle) == thunk_selector) { index = LOWORD(handle) / sizeof(WINPROC_THUNK); /* check alignment */ if (index * sizeof(WINPROC_THUNK) != LOWORD(handle)) return -1; /* check array limits */ if (index >= MAX_WINPROCS32) return -1; } else { index = LOWORD(handle); if ((ULONG_PTR)handle >> 16 != WINPROC_HANDLE) return -1; /* check array limits */ if (index >= winproc16_used + MAX_WINPROCS32) return -1; } return index; } /* allocate a 16-bit thunk for an existing window proc */ static WNDPROC16 alloc_win16_thunk( WNDPROC handle ) { static FARPROC16 relay; WINPROC_THUNK *thunk; #if 0 UINT index = LOWORD( handle ); if (index >= MAX_WINPROCS32) /* already a 16-bit proc */ return winproc16_array[index - MAX_WINPROCS32]; #else UINT index; index = LOWORD(wow_handlers32.alloc_winproc(handle, FALSE)); #endif if (!thunk_array) /* allocate the array and its selector */ { LDT_ENTRY entry; assert( MAX_WINPROCS16 * sizeof(WINPROC_THUNK) <= 0x10000 ); if (!(thunk_selector = wine_ldt_alloc_entries(1))) return NULL; if (!(thunk_array = VirtualAlloc( NULL, MAX_WINPROCS16 * sizeof(WINPROC_THUNK), MEM_COMMIT, PAGE_EXECUTE_READWRITE ))) return NULL; wine_ldt_set_base( &entry, thunk_array ); wine_ldt_set_limit( &entry, MAX_WINPROCS16 * sizeof(WINPROC_THUNK) - 1 ); wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT ); wine_ldt_set_entry( thunk_selector, &entry ); relay = GetProcAddress16( GetModuleHandle16("user"), "__wine_call_wndproc" ); } thunk = &thunk_array[index]; thunk->popl_eax = 0x58; /* popl %eax */ thunk->pushl_func = 0x68; /* pushl $proc */ thunk->proc = handle; thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->ljmp = 0xea; /* ljmp relay*/ thunk->relay_offset = OFFSETOF(relay); thunk->relay_sel = SELECTOROF(relay); return (WNDPROC16)MAKESEGPTR( thunk_selector, index * sizeof(WINPROC_THUNK) ); } LRESULT CALLBACK WindowProc16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK edit_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); /********************************************************************** * WINPROC_GetProc16 * * Get a window procedure pointer that can be passed to the Windows program. */ WNDPROC16 WINPROC_GetProc16( WNDPROC proc, BOOL unicode ) { #if 0 WNDPROC winproc = wow_handlers32.alloc_winproc( proc, unicode ); if ((ULONG_PTR)winproc >> 16 != WINPROC_HANDLE) return (WNDPROC16)winproc; return alloc_win16_thunk( winproc ); #else if (!proc) return NULL; if (proc == WindowProc16) proc = DefWindowProcA; return alloc_win16_thunk(proc); #endif } /* call a 16-bit window procedure */ /*static*/ LRESULT call_window_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg ) { WNDPROC16 func = arg; int index = winproc_to_index( func ); CONTEXT context; size_t size = 0; #include struct { WORD params[5]; union { CREATESTRUCT16 cs16; DRAWITEMSTRUCT16 dis16; COMPAREITEMSTRUCT16 cis16; } u; } args; #include if (index >= MAX_WINPROCS32) func = winproc16_array[index - MAX_WINPROCS32]; /* Window procedures want ax = hInstance, ds = es = ss */ memset(&context, 0, sizeof(context)); context.SegDs = context.SegEs = SELECTOROF(getWOW32Reserved()); context.SegFs = wine_get_fs(); context.SegGs = wine_get_gs(); context.Eax = !hwnd ? 0 : GetWindowWord16(hwnd, GWLP_HINSTANCE) | 1; /* Handle To Sel */ if (!context.Eax || (func == GetDlgProc16(hwnd))) context.Eax = context.SegDs; context.Ebx = 6; context.Esi = hwnd; context.SegCs = SELECTOROF(func); context.Eip = OFFSETOF(func); context.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME, bp); if (lParam) { /* Some programs (eg. the "Undocumented Windows" examples, JWP) only work if structures passed in lParam are placed in the stack/data segment. Programmers easily make the mistake of converting lParam to a near rather than a far pointer, since Windows apparently allows this. We copy the structures to the 16 bit stack; this is ugly but makes these programs work. */ switch (msg) { case WM_CREATE: case WM_NCCREATE: size = sizeof(CREATESTRUCT16); break; case WM_DRAWITEM: size = sizeof(DRAWITEMSTRUCT16); break; case WM_COMPAREITEM: size = sizeof(COMPAREITEMSTRUCT16); break; } if (size) { LPARAM lp = lParam; __TRY // Chessmaster 4000 sends WM_CREATE without a pointer in LPARAM { memcpy( &args.u, MapSL(lParam), size ); lParam = PtrToUlong(getWOW32Reserved()) - size; } __EXCEPT_ALL { lParam = lp; } __ENDTRY } } PVOID old = getWOW32Reserved(); args.params[4] = hwnd; args.params[3] = msg; args.params[2] = wParam; args.params[1] = HIWORD(lParam); args.params[0] = LOWORD(lParam); WOWCallback16Ex( 0, WCB16_REGS, sizeof(args.params) + size, &args, (DWORD *)&context ); //restore stack setWOW32Reserved(old); *result = MAKELONG( LOWORD(context.Eax), LOWORD(context.Edx) ); return *result; } static LRESULT call_dialog_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp, LRESULT *result, void *arg ) { LRESULT ret = call_window_proc16( hwnd, msg, wp, lp, result, arg ); *result = GetWindowLongPtrW( WIN_Handle32(hwnd), DWLP_MSGRESULT ); return LOWORD(ret); } static LRESULT call_window_proc_Ato16( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { return WINPROC_CallProc32ATo16( call_window_proc16, hwnd, msg, wp, lp, result, arg ); } static LRESULT call_dialog_proc_Ato16( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { return WINPROC_CallProc32ATo16( call_dialog_proc16, hwnd, msg, wp, lp, result, arg ); } /********************************************************************** * Support for Edit word break proc thunks */ #define MAX_THUNKS 32 #include static struct word_break_thunk { BYTE popl_eax; /* popl %eax (return address) */ BYTE pushl_proc16; /* pushl proc16 */ EDITWORDBREAKPROC16 proc16; BYTE pushl_eax; /* pushl %eax */ BYTE jmp; /* ljmp call_word_break_proc16 */ DWORD callback; } *word_break_thunks; #include /********************************************************************** * call_word_break_proc16 */ static INT16 CALLBACK call_word_break_proc16( SEGPTR proc16, LPSTR text, INT index, INT count, INT action ) { SEGPTR segptr; WORD args[5]; DWORD result; segptr = MapLS( text ); args[4] = SELECTOROF(segptr); args[3] = OFFSETOF(segptr); args[2] = index; args[1] = count; args[0] = action; WOWCallback16Ex( proc16, WCB16_PASCAL, sizeof(args), args, &result ); UnMapLS( segptr ); return LOWORD(result); } /****************************************************************** * add_word_break_thunk */ static struct word_break_thunk *add_word_break_thunk( EDITWORDBREAKPROC16 proc16 ) { struct word_break_thunk *thunk; if (!word_break_thunks) { word_break_thunks = VirtualAlloc( NULL, MAX_THUNKS * sizeof(*thunk), MEM_COMMIT, PAGE_EXECUTE_READWRITE ); if (!word_break_thunks) return NULL; for (thunk = word_break_thunks; thunk < &word_break_thunks[MAX_THUNKS]; thunk++) { thunk->popl_eax = 0x58; /* popl %eax */ thunk->pushl_proc16 = 0x68; /* pushl proc16 */ thunk->pushl_eax = 0x50; /* pushl %eax */ thunk->jmp = 0xe9; /* jmp call_word_break_proc16 */ thunk->callback = (char *)call_word_break_proc16 - (char *)(&thunk->callback + 1); } } for (thunk = word_break_thunks; thunk < &word_break_thunks[MAX_THUNKS]; thunk++) if (thunk->proc16 == proc16) return thunk; for (thunk = word_break_thunks; thunk < &word_break_thunks[MAX_THUNKS]; thunk++) { if (thunk->proc16) continue; thunk->proc16 = proc16; return thunk; } FIXME("Out of word break thunks\n"); return NULL; } /****************************************************************** * get_word_break_thunk */ static EDITWORDBREAKPROC16 get_word_break_thunk( EDITWORDBREAKPROCA proc ) { struct word_break_thunk *thunk = (struct word_break_thunk *)proc; if (word_break_thunks && thunk >= word_break_thunks && thunk < &word_break_thunks[MAX_THUNKS]) return thunk->proc16; return NULL; } /*********************************************************************** * Support for 16<->32 message mapping */ static inline void *get_buffer( void *static_buffer, size_t size, size_t need ) { if (size >= need) return static_buffer; return HeapAlloc( GetProcessHeap(), 0, need ); } static inline void free_buffer( void *static_buffer, void *buffer ) { if (buffer != static_buffer) HeapFree( GetProcessHeap(), 0, buffer ); } static void RECT16to32( const RECT16 *from, RECT *to ) { to->left = from->left; to->top = from->top; to->right = from->right; to->bottom = from->bottom; } static void RECT32to16( const RECT *from, RECT16 *to ) { to->left = from->left; to->top = from->top; to->right = from->right; to->bottom = from->bottom; } static void MINMAXINFO32to16( const MINMAXINFO *from, MINMAXINFO16 *to ) { to->ptReserved.x = from->ptReserved.x; to->ptReserved.y = from->ptReserved.y; to->ptMaxSize.x = from->ptMaxSize.x; to->ptMaxSize.y = from->ptMaxSize.y; to->ptMaxPosition.x = from->ptMaxPosition.x; to->ptMaxPosition.y = from->ptMaxPosition.y; to->ptMinTrackSize.x = from->ptMinTrackSize.x; to->ptMinTrackSize.y = from->ptMinTrackSize.y; to->ptMaxTrackSize.x = from->ptMaxTrackSize.x; to->ptMaxTrackSize.y = from->ptMaxTrackSize.y; } static void MINMAXINFO16to32( const MINMAXINFO16 *from, MINMAXINFO *to ) { to->ptReserved.x = from->ptReserved.x; to->ptReserved.y = from->ptReserved.y; to->ptMaxSize.x = from->ptMaxSize.x; to->ptMaxSize.y = from->ptMaxSize.y; to->ptMaxPosition.x = from->ptMaxPosition.x; to->ptMaxPosition.y = from->ptMaxPosition.y; to->ptMinTrackSize.x = from->ptMinTrackSize.x; to->ptMinTrackSize.y = from->ptMinTrackSize.y; to->ptMaxTrackSize.x = from->ptMaxTrackSize.x; to->ptMaxTrackSize.y = from->ptMaxTrackSize.y; } static void WINDOWPOS32to16( const WINDOWPOS* from, WINDOWPOS16* to ) { to->hwnd = HWND_16(from->hwnd); to->hwndInsertAfter = HWND_16(from->hwndInsertAfter); to->x = from->x; to->y = from->y; to->cx = from->cx; to->cy = from->cy; to->flags = from->flags; } static void WINDOWPOS16to32( const WINDOWPOS16* from, WINDOWPOS* to ) { to->hwnd = WIN_Handle32(from->hwnd); to->hwndInsertAfter = (from->hwndInsertAfter == (HWND16)-1) ? HWND_TOPMOST : WIN_Handle32(from->hwndInsertAfter); to->x = from->x; to->y = from->y; to->cx = from->cx; to->cy = from->cy; to->flags = from->flags; } /* The strings are not copied */ static void CREATESTRUCT32Ato16( HWND hwnd32, const CREATESTRUCTA* from, CREATESTRUCT16* to ) { to->lpCreateParams = (SEGPTR)from->lpCreateParams; to->hInstance = HINSTANCE_16(from->hInstance); if (!is_win_menu_disallowed(GetWindowLongA(hwnd32, GWL_STYLE))) { to->hMenu = HMENU_16(from->hMenu); } else { to->hMenu = (HMENU16)from->hMenu; } to->hwndParent = HWND_16(from->hwndParent); to->cy = from->cy == CW_USEDEFAULT ? CW_USEDEFAULT16 : from->cy; to->cx = from->cx == CW_USEDEFAULT ? CW_USEDEFAULT16 : from->cx; to->y = from->y == CW_USEDEFAULT ? CW_USEDEFAULT16 : from->y; to->x = from->x == CW_USEDEFAULT ? CW_USEDEFAULT16 : from->x; to->style = from->style; to->dwExStyle = from->dwExStyle; } static void CREATESTRUCT16to32A( HWND hwnd32, const CREATESTRUCT16* from, CREATESTRUCTA *to ) { to->lpCreateParams = (LPVOID)from->lpCreateParams; to->hInstance = HINSTANCE_32(from->hInstance); if (!is_win_menu_disallowed(GetWindowLongA(hwnd32, GWL_STYLE))) { to->hMenu = HMENU_32(from->hMenu); } else { to->hMenu = (HMENU)from->hMenu; } to->hwndParent = WIN_Handle32(from->hwndParent); to->cy = from->cy == CW_USEDEFAULT16 ? CW_USEDEFAULT : from->cy; to->cx = from->cx == CW_USEDEFAULT16 ? CW_USEDEFAULT : from->cx; to->y = from->y == CW_USEDEFAULT16 ? CW_USEDEFAULT : from->y; to->x = from->x == CW_USEDEFAULT16 ? CW_USEDEFAULT : from->x; to->style = from->style; to->dwExStyle = from->dwExStyle; to->lpszName = MapSL(from->lpszName); to->lpszClass = win32classname(from->hInstance, MapSL(from->lpszClass)); } /* The strings are not copied */ static void MDICREATESTRUCT32Ato16( const MDICREATESTRUCTA* from, MDICREATESTRUCT16* to ) { to->hOwner = HINSTANCE_16(from->hOwner); to->x = from->x; to->y = from->y; to->cx = from->cx; to->cy = from->cy; to->style = from->style; to->lParam = from->lParam; } static void MDICREATESTRUCT16to32A( const MDICREATESTRUCT16* from, MDICREATESTRUCTA *to ) { to->hOwner = HINSTANCE_32(from->hOwner); to->x = (from->x == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)from->x; to->y = (from->y == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)from->y; to->cx = (from->cx == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)from->cx; to->cy = (from->cy == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)from->cy; to->style = from->style; to->lParam = from->lParam; to->szTitle = MapSL(from->szTitle); to->szClass = win32classname(from->hOwner, MapSL(from->szClass)); } HGLOBAL GLOBAL_GetLink(HGLOBAL16 hg); void GLOBAL_SetLink(HGLOBAL16 hg16, HGLOBAL hg); HGLOBAL16 GLOBAL_FindLink(HGLOBAL hg); static UINT_PTR convert_handle_16_to_32(HANDLE16 src, unsigned int flags) { HANDLE dst; UINT sz = GlobalSize16(src); LPSTR ptr16, ptr32; if (dst = GLOBAL_GetLink(src)) { if (GlobalSize(dst) != sz) dst = GlobalReAlloc(dst, sz, 0); } else if (!(dst = GlobalAlloc(flags, sz))) return 0; ptr16 = GlobalLock16(src); ptr32 = GlobalLock(dst); if (ptr16 != NULL && ptr32 != NULL) memcpy(ptr32, ptr16, sz); GlobalUnlock16(src); GlobalUnlock(dst); GLOBAL_SetLink(src, dst); return (UINT_PTR)dst; } static HANDLE16 convert_handle_32_to_16(UINT_PTR src, unsigned int flags) { HANDLE16 dst; UINT sz = GlobalSize((HANDLE)src); LPSTR ptr16, ptr32; if (dst = GLOBAL_FindLink(src)) { if (GlobalSize16(dst) != sz) dst = GlobalReAlloc16(dst, sz, 0); } else if (!(dst = GlobalAlloc16(flags, sz))) return 0; ptr32 = GlobalLock((HANDLE)src); ptr16 = GlobalLock16(dst); if (ptr16 != NULL && ptr32 != NULL) memcpy(ptr16, ptr32, sz); GlobalUnlock((HANDLE)src); GlobalUnlock16(dst); GLOBAL_SetLink(dst, (HANDLE)src); return dst; } static BOOL is_old_app( HWND hwnd ) { HINSTANCE inst = (HINSTANCE)GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); return inst && !((ULONG_PTR)inst >> 16) && (GetExpWinVer16(LOWORD(inst)) & 0xFFFF) == 0x0300; } static int find_sub_menu( HMENU *hmenu, HMENU16 target ) { int i, pos, count = GetMenuItemCount( *hmenu ); for (i = 0; i < count; i++) { HMENU sub = GetSubMenu( *hmenu, i ); if (!sub) continue; if (HMENU_16(sub) == target) return i; if ((pos = find_sub_menu( &sub, target )) != -1) { *hmenu = sub; return pos; } } return -1; } WNDPROC get_classinfo_wndproc(const char *class) { WNDCLASSA wc; GetClassInfoA(NULL, class, &wc); return wc.lpfnWndProc; } WNDPROC get_window_wndproc(const char *class) { WNDPROC lpfnWndProc2 = NULL; HWND hWnd = CreateWindowExA(0, class, "", 0, 0, 0, 1, 1, 0, 0, GetModuleHandleA(NULL), 0); if (hWnd) { lpfnWndProc2 = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC); DestroyWindow(hWnd); } return lpfnWndProc2; } BOOL is_listbox_wndproc(WNDPROC lpfnWndProc) { static WNDPROC lpfnWndProc1 = 0; static WNDPROC lpfnWndProc2 = 0; if (!lpfnWndProc1) lpfnWndProc1 = get_classinfo_wndproc("LISTBOX"); if (!lpfnWndProc2) lpfnWndProc2 = get_window_wndproc("LISTBOX"); return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE; } BOOL isListBox(HWND16 hWnd16, HWND hWnd) { if (window_type_table[hWnd16] == WINDOW_TYPE_LISTBOX) return TRUE; WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC); return is_listbox_wndproc(lpfnWndProc); } BOOL is_edit_wndproc(WNDPROC lpfnWndProc) { static WNDPROC lpfnWndProc1 = 0; static WNDPROC lpfnWndProc2 = 0; if (!lpfnWndProc1) lpfnWndProc1 = get_classinfo_wndproc("EDIT"); if (!lpfnWndProc2) lpfnWndProc2 = get_window_wndproc("EDIT"); return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE; } BOOL isEdit(HWND16 hWnd16, HWND hWnd) { if (window_type_table[hWnd16] == WINDOW_TYPE_EDIT) return TRUE; WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC); return is_edit_wndproc(lpfnWndProc); } BOOL is_scrollbar_wndproc(WNDPROC lpfnWndProc) { static WNDPROC lpfnWndProc1 = 0; static WNDPROC lpfnWndProc2 = 0; if (!lpfnWndProc1) lpfnWndProc1 = get_classinfo_wndproc("SCROLLBAR"); if (!lpfnWndProc2) lpfnWndProc2 = get_window_wndproc("SCROLLBAR"); return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE; } BOOL isScrollBar(HWND16 hWnd16, HWND hWnd) { if (window_type_table[hWnd16] == WINDOW_TYPE_SCROLLBAR) return TRUE; WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC); return is_scrollbar_wndproc(lpfnWndProc); } BOOL is_combobox_wndproc(WNDPROC lpfnWndProc) { static WNDPROC lpfnWndProc1 = 0; static WNDPROC lpfnWndProc2 = 0; if (!lpfnWndProc1) lpfnWndProc1 = get_classinfo_wndproc("COMBOBOX"); if (!lpfnWndProc2) lpfnWndProc2 = get_window_wndproc("COMBOBOX"); return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE; } BOOL isComboBox(HWND16 hWnd16, HWND hWnd) { if (window_type_table[hWnd16] == WINDOW_TYPE_COMBOBOX) return TRUE; WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC); return is_combobox_wndproc(lpfnWndProc); } BOOL is_static_wndproc(WNDPROC lpfnWndProc) { static WNDPROC lpfnWndProc1 = 0; static WNDPROC lpfnWndProc2 = 0; if (!lpfnWndProc1) lpfnWndProc1 = get_classinfo_wndproc("STATIC"); if (!lpfnWndProc2) lpfnWndProc2 = get_window_wndproc("STATIC"); return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE; } BOOL isStatic(HWND16 hWnd16, HWND hWnd) { if (window_type_table[hWnd16] == WINDOW_TYPE_STATIC) return TRUE; WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC); return is_static_wndproc(lpfnWndProc); } BOOL is_button_wndproc(WNDPROC lpfnWndProc) { static WNDPROC lpfnWndProc1 = 0; static WNDPROC lpfnWndProc2 = 0; if (!lpfnWndProc1) lpfnWndProc1 = get_classinfo_wndproc("BUTTON"); if (!lpfnWndProc2) lpfnWndProc2 = get_window_wndproc("BUTTON"); return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE; } BOOL isButton(HWND16 hWnd16, HWND hWnd) { if (window_type_table[hWnd16] == WINDOW_TYPE_BUTTON) return TRUE; WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC); return is_button_wndproc(lpfnWndProc); } BOOL is_mdiclient_wndproc(WNDPROC lpfnWndProc) { static WNDPROC lpfnWndProc1 = 0; static WNDPROC lpfnWndProc2 = 0; if (!lpfnWndProc1) lpfnWndProc1 = get_classinfo_wndproc("MDICLIENT"); if (!lpfnWndProc2) { CLIENTCREATESTRUCT ccs = { 0 }; HWND hwnd = CreateWindowExA(0, "MDICLIENT", "", 0, 0, 0, 1, 1, 0, 0, GetModuleHandleA(NULL), &ccs); lpfnWndProc2 = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC); DestroyWindow(hwnd); } return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE; } BOOL is_mdiclient(HWND16 hWnd16, HWND hWnd) { if (window_type_table[hWnd16] == WINDOW_TYPE_MDICLIENT) return TRUE; WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC); return is_mdiclient_wndproc(lpfnWndProc); } BOOL is_aviwnd(HWND16 hWnd16, HWND hWnd) { if (window_type_table[hWnd16] == WINDOW_TYPE_AVIWND) return TRUE; char name[10]; if (GetClassNameA(hWnd, &name, 10)) { if (!strcmp(name, "AVIWnd32")) { window_type_table[hWnd16] = WINDOW_TYPE_AVIWND; return TRUE; } } return FALSE; } /*********************************************************************** * LISTBOX_FindFileStrPos * * Find the nearest string located before a given string in directory * sort order (i.e. first files, then directories, then drives). */ static INT LISTBOX_FindFileStrPos( HWND lbhwnd, LPCSTR str ) { INT min, max, res; CHAR p[MAX_PATH]; if (!(GetWindowLongA(lbhwnd, GWL_STYLE) & LBS_HASSTRINGS)) return SendMessageA(lbhwnd, LB_FINDSTRING, -1, str); min = 0; max = SendMessageA(lbhwnd, LB_GETCOUNT, 0, 0); while (min != max) { INT index = (min + max) / 2; SendMessageA(lbhwnd, LB_GETTEXT, index, p); if (*p == '[') /* drive or directory */ { if (*str != '[') res = -1; else if (p[1] == '-') /* drive */ { if (str[1] == '-') res = str[2] - p[2]; else res = -1; } else /* directory */ { if (str[1] == '-') res = 1; else res = lstrcmpiA( str, p ); } } else /* filename */ { if (*str == '[') res = 1; else res = lstrcmpiA( str, p ); } if (!res) return index; if (res < 0) max = index; else min = index + 1; } return max; } /*********************************************************************** * LISTBOX_Directory */ static LRESULT LISTBOX_Directory( HWND lbhwnd, UINT attrib, LPCWSTR filespec ) { HANDLE handle; LRESULT ret = LB_OKAY; WIN32_FIND_DATAA entry; int pos; LRESULT maxinsert = LB_ERR; /* don't scan directory if we just want drives exclusively */ if (attrib != (DDL_DRIVES | DDL_EXCLUSIVE)) { /* scan directory */ if ((handle = FindFirstFileA(filespec, &entry)) == INVALID_HANDLE_VALUE) { int le = GetLastError(); if ((le != ERROR_NO_MORE_FILES) && (le != ERROR_FILE_NOT_FOUND)) return LB_ERR; } else { do { CHAR buffer[270]; if (entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (!(attrib & DDL_DIRECTORY) || !strcmp( entry.cFileName, "." )) continue; buffer[0] = '['; if (entry.cAlternateFileName[0]) lstrcpyA( buffer + 1, entry.cAlternateFileName ); else lstrcpyA( buffer + 1, entry.cFileName ); lstrcatA(buffer, "]"); } else /* not a directory */ { #define ATTRIBS (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \ FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_DIRECTORY) if ((attrib & DDL_EXCLUSIVE) && ((attrib & ATTRIBS) != (entry.dwFileAttributes & ATTRIBS))) continue; #undef ATTRIBS if (entry.cAlternateFileName[0]) lstrcpyA( buffer, entry.cAlternateFileName ); else lstrcpyA( buffer, entry.cFileName ); } CharLowerA( buffer ); pos = LISTBOX_FindFileStrPos( lbhwnd, buffer ); if ((ret = SendMessageA(lbhwnd, LB_INSERTSTRING, pos, buffer)) < 0) break; if (ret <= maxinsert) maxinsert++; else maxinsert = ret; } while (FindNextFileA( handle, &entry )); FindClose( handle ); } } if (ret >= 0) { ret = maxinsert; /* scan drives */ if (attrib & DDL_DRIVES) { CHAR buffer[] = "[-a-]"; CHAR root[] = "A:\\"; int drive; for (drive = 0; drive < 26; drive++, buffer[2]++, root[0]++) { if (GetDriveTypeA(root) <= DRIVE_NO_ROOT_DIR) continue; if ((ret = SendMessageA(lbhwnd, LB_ADDSTRING, 0, buffer)) < 0) break; } } } return ret; } /*********************************************************************** * listbox_proc16 */ static LRESULT listbox_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f) { static const UINT msg16_offset = LB_ADDSTRING16 - LB_ADDSTRING; LRESULT ret; *f = TRUE; switch (msg) { case WM_SIZE: if (is_old_app(hwnd)) { DWORD style = GetWindowLongW(hwnd, GWL_STYLE); int height, remaining, item_height; RECT rect; /* give a margin for error to old 16 bits programs - if we need less than the height of the nonclient area, round to the *next* number of items */ if (!(style & LBS_NOINTEGRALHEIGHT) && !(style & LBS_OWNERDRAWVARIABLE) && !(style & LBS_OWNERDRAWFIXED)) { GetClientRect(hwnd, &rect); height = rect.bottom - rect.top; item_height = wow_handlers32.listbox_proc(hwnd, LB_GETITEMHEIGHT, 0, 0, FALSE); remaining = item_height ? (height % item_height) : 0; if ((height > item_height) && remaining) { GetWindowRect(hwnd, &rect); if ((item_height - remaining) <= rect.bottom - rect.top - height) remaining = remaining - item_height; TRACE("[%p]: changing height %d -> %d\n", hwnd, height, height - remaining); SetWindowPos(hwnd, 0, 0, 0, rect.right - rect.left, rect.bottom - rect.top - remaining, SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE); *result = 0; return 0; } } } return callback(hwnd, msg, wParam, lParam, result, arg); // return wow_handlers32.listbox_proc(hwnd, msg, wParam, lParam, unicode); case LB_RESETCONTENT16: case LB_DELETESTRING16: case LB_GETITEMDATA16: case LB_SETITEMDATA16: case LB_GETCOUNT16: case LB_GETTEXTLEN16: case LB_GETCURSEL16: case LB_GETTOPINDEX16: case LB_GETITEMHEIGHT16: case LB_SETCARETINDEX16: case LB_GETCARETINDEX16: case LB_SETTOPINDEX16: case LB_SETCOLUMNWIDTH16: case LB_GETSELCOUNT16: case LB_SELITEMRANGE16: case LB_SELITEMRANGEEX16: case LB_GETHORIZONTALEXTENT16: case LB_SETHORIZONTALEXTENT16: case LB_GETANCHORINDEX16: case LB_CARETON16: case LB_CARETOFF16: msg -= msg16_offset; break; case LB_GETSEL16: case LB_SETSEL16: case LB_SETCURSEL16: case LB_SETANCHORINDEX16: wParam = (INT)(INT16)wParam; msg -= msg16_offset; break; case LB_INSERTSTRING16: case LB_FINDSTRING16: case LB_FINDSTRINGEXACT16: case LB_SELECTSTRING16: wParam = (INT)(INT16)wParam; /* fall through */ case LB_ADDSTRING16: case LB_ADDFILE16: { DWORD style = GetWindowLongW(hwnd, GWL_STYLE); if ((style & LBS_HASSTRINGS) || !(style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE))) lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; } case LB_GETTEXT16: lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; ret = callback(hwnd, msg, wParam, lParam, result, arg); return *result; break; case LB_SETITEMHEIGHT16: lParam = LOWORD(lParam); msg -= msg16_offset; break; case LB_GETITEMRECT16: { RECT rect; RECT16 *r16 = MapSL(lParam); ret = callback(hwnd, LB_GETITEMRECT, (INT16)wParam, (LPARAM)&rect, result, arg); // ret = wow_handlers32.listbox_proc(hwnd, LB_GETITEMRECT, (INT16)wParam, (LPARAM)&rect, FALSE); r16->left = rect.left; r16->top = rect.top; r16->right = rect.right; r16->bottom = rect.bottom; return ret; } case LB_GETSELITEMS16: { INT16 *array16 = MapSL(lParam); INT i, count = (INT16)wParam, *array; if (!(array = HeapAlloc(GetProcessHeap(), 0, wParam * sizeof(*array)))) return LB_ERRSPACE; ret = callback(hwnd, LB_GETSELITEMS, count, (LPARAM)array, result, arg); //ret = wow_handlers32.listbox_proc(hwnd, LB_GETSELITEMS, count, (LPARAM)array, FALSE); for (i = 0; i < ret; i++) array16[i] = array[i]; HeapFree(GetProcessHeap(), 0, array); return ret; } case LB_DIR16: /* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE * be set automatically (this is different in Win32) */ if (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE; lParam = (LPARAM)MapSL(lParam); *result = LISTBOX_Directory(hwnd, wParam, lParam); return *result; case LB_SETTABSTOPS16: { INT i, count, *tabs = NULL; INT16 *tabs16 = MapSL(lParam); if ((count = (INT16)wParam) > 0) { if (!(tabs = HeapAlloc(GetProcessHeap(), 0, wParam * sizeof(*tabs)))) return LB_ERRSPACE; for (i = 0; i < count; i++) tabs[i] = tabs16[i]; } ret = callback(hwnd, LB_SETTABSTOPS, count, (LPARAM)tabs, result, arg); //ret = wow_handlers32.listbox_proc(hwnd, LB_SETTABSTOPS, count, (LPARAM)tabs, FALSE); HeapFree(GetProcessHeap(), 0, tabs); return ret; } default: *f = FALSE; return 0; } ret = callback(hwnd, msg, wParam, lParam, result, arg); return ret;//wow_handlers32.listbox_proc(hwnd, msg, wParam, lParam, FALSE); } static LRESULT combo_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f); static LRESULT button_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f); static LRESULT edit_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f); static LRESULT scrollbar_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f); static LRESULT static_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f); void DROPSTRUCT16_32(LPDROPSTRUCT lpds32, LPDROPSTRUCT16 lpds16) { lpds32->hwndSink = HWND_32(lpds16->hwndSink); lpds32->hwndSource = HWND_32(lpds16->hwndSource); lpds32->dwControlData = lpds16->dwControlData; lpds32->dwData = lpds16->dwData; lpds32->wFmt = lpds16->wFmt; lpds32->ptDrop.x = lpds16->ptDrop.x; lpds32->ptDrop.y = lpds16->ptDrop.y; 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); } void DROPSTRUCT32_16(LPDROPSTRUCT lpds32, LPDROPSTRUCT16 lpds16) { DWORD pid; lpds16->hwndSink = HWND_16(lpds32->hwndSink); lpds16->hwndSource = HWND_16(lpds32->hwndSource); lpds16->dwControlData = lpds32->dwControlData; lpds16->dwData = lpds32->dwData; lpds16->wFmt = lpds32->wFmt; lpds16->ptDrop.x = lpds32->ptDrop.x; lpds16->ptDrop.y = lpds32->ptDrop.y; if (GetWindowThreadProcessId(lpds32->hwndSource, &pid)) { if (GetCurrentProcessId() != pid) { WCHAR buf[0x1000]; SIZE_T read; HANDLE process = OpenProcess(PROCESS_VM_READ, FALSE, pid); if (ReadProcessMemory(process, lpds32->dwData, buf, sizeof(buf), &read) && read >= sizeof(*buf)) { buf[(read / sizeof(*buf)) - 1] = 0; ERR("D&D file from other processes is broken in win32. %s\n", debugstr_w(buf)); } CloseHandle(process); } } 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); } ATOM atom_progman; ATOM atom_progman16; ATOM gatom_progman; ATOM gatom_progman16; static void init_atom() { if (!atom_progman) { atom_progman = AddAtomA("Progman"); } if (!gatom_progman) { gatom_progman = GlobalAddAtomA("Progman"); } if (!atom_progman16) { atom_progman16 = AddAtomA("Progman16"); } if (!gatom_progman16) { gatom_progman16 = GlobalAddAtomA("Progman16"); } } static ATOM service16_32(ATOM atom) { init_atom(); if (atom_progman == atom) return atom_progman16; if (gatom_progman == atom) return gatom_progman16; return atom; } static ATOM service32_16(ATOM atom) { init_atom(); if (atom_progman16 == atom) return atom_progman; if (gatom_progman16 == atom) return gatom_progman; return atom; } static ATOM topic16_32(ATOM atom) { init_atom(); if (atom_progman == atom) return atom_progman16; if (gatom_progman == atom) return gatom_progman16; return atom; } static ATOM topic32_16(ATOM atom) { init_atom(); if (atom_progman16 == atom) return atom_progman; if (gatom_progman16 == atom) return gatom_progman; return atom; } static BOOL CALLBACK child_paint(HWND hwnd, LPARAM lparam) { if (IsWindowVisible(hwnd)) { HWND parent = hwnd; RECT crect; GetWindowRect(hwnd, &crect); while (parent = GetAncestor(parent, GA_PARENT)) { RECT prect, irect; GetWindowRect(parent, &prect); if (!IntersectRect(&irect, &prect, &crect)) { RedrawWindow(hwnd, NULL, NULL, RDW_INTERNALPAINT); break; } } } return TRUE; } #include typedef struct { /* structure for dropped files */ WORD wSize; POINT16 ptMousePos; BOOL16 fInNonClientArea; /* memory block with filenames follows */ } DROPFILESTRUCT16, *LPDROPFILESTRUCT16; #include static HDROP16 hdrop32_to_hdrop16(HDROP hdrop32) { LPDROPFILES files = (LPDROPFILES)GlobalLock(hdrop32); int size16 = sizeof(DROPFILESTRUCT16); HDROP16 hdrop16; LPDROPFILESTRUCT16 files16; LPSTR filenames16; if (!files) return (HDROP16)hdrop32; if (!files->fWide) { LPSTR filenames = (LPSTR)((LPBYTE)files + files->pFiles); while (TRUE) { size_t len = strlen(filenames) + 1; size16 += len; filenames += len; if (len == 1) break; } } else { LPWSTR filenames = (LPWSTR)((LPBYTE)files + files->pFiles); while (TRUE) { size_t len = wcslen(filenames) + 1; size16 += WideCharToMultiByte(CP_ACP, NULL, filenames, len, NULL, 0, NULL, NULL); filenames += len; if (len == 1) break; } } hdrop16 = (HDROP16)GlobalAlloc16(0, size16); files16 = GlobalLock16(hdrop16); files16->wSize = sizeof(*files16); files16->ptMousePos.x = files->pt.x; files16->ptMousePos.y = files->pt.y; files16->fInNonClientArea = files->fNC; filenames16 = (LPSTR)((LPBYTE)files16 + files16->wSize); if (!files->fWide) { LPSTR filenames = (LPSTR)((LPBYTE)files + files->pFiles); while (TRUE) { size_t len = strlen(filenames) + 1; memcpy(filenames16, filenames, len); filenames16 += len; filenames += len; if (len == 1) break; } } else { int remain_bytes = size16 - sizeof(*files16); LPWSTR filenames = (LPWSTR)((LPBYTE)files + files->pFiles); while (TRUE) { size_t len = wcslen(filenames) + 1; int mblen = WideCharToMultiByte(CP_ACP, NULL, filenames, len, filenames16, remain_bytes, NULL, NULL); remain_bytes -= mblen; filenames16 += mblen; filenames += len; if (len == 1) break; } } GlobalUnlock16(hdrop16); GlobalUnlock(files); DragFinish(hdrop32); return hdrop16; } static HDROP hdrop16_to_hdrop32(HDROP16 hdrop16) { return (HDROP)hdrop16; /* win32 doesnt process WM_DROPFILES */ #if false LPDROPFILESTRUCT16 files16 = (LPDROPFILESTRUCT16)GlobalLock16(hdrop16); int size32 = sizeof(DROPFILES); LPSTR filenames; LPDROPFILES files32; HDROP hdrop32; LPSTR filenames32; if (!files16) return NULL; filenames = (LPSTR)((LPBYTE)files16 + files16->wSize); while (TRUE) { size_t len = strlen(filenames); filenames += len + 1; size32 += len + 1; if (len == 0) break; } hdrop32 = (HDROP)GlobalAlloc(0, size32); files32 = (LPDROPFILES)GlobalLock(hdrop32); files32->fWide = FALSE; files32->fNC = files16->fInNonClientArea; files32->pt.x = files16->ptMousePos.x; files32->pt.y = files16->ptMousePos.y; files32->pFiles = sizeof(*files32); filenames32 = (LPSTR)((LPBYTE)files32 + files32->pFiles); filenames = (LPSTR)((LPBYTE)files16 + files16->wSize); while (TRUE) { size_t len = strlen(filenames); memcpy(filenames32, filenames, len + 1); filenames += len + 1; filenames32 += len + 1; if (len == 0) break; } GlobalUnlock16(files16); return hdrop32; #endif } // TODO: check for and fix memory leaks HANDLE convert_cb_data_16_32(int format, HANDLE16 data16, BOOL set_format); static void convert_dde_msg_16_to_32(int msg, UINT_PTR handle) { void *ptr = (void *)GlobalLock((HGLOBAL)handle); char *data = 0; WORD format; switch (msg) { case WM_DDE_DATA: data = ((DDEDATA *)ptr)->Value; format = ((DDEDATA *)ptr)->cfFormat; break; case WM_DDE_POKE: data = ((DDEPOKE *)ptr)->Value; format = ((DDEPOKE *)ptr)->cfFormat; break; } if (data && (format < 0xc000) && (format != CF_TEXT) && (format != CF_OEMTEXT) && *(HANDLE16 *)data) *(HANDLE *)data = convert_cb_data_16_32(format, *(HANDLE16 *)data, FALSE); GlobalUnlock((HGLOBAL)handle); } HANDLE16 convert_cb_data_32_16(int format, HANDLE data32, BOOL set_format); static void convert_dde_msg_32_to_16(int msg, HANDLE16 handle) { void *ptr = (void *)GlobalLock16(handle); char *data = 0; WORD format; switch (msg) { case WM_DDE_DATA: data = ((DDEDATA *)ptr)->Value; format = ((DDEDATA *)ptr)->cfFormat; break; case WM_DDE_POKE: data = ((DDEPOKE *)ptr)->Value; format = ((DDEPOKE *)ptr)->cfFormat; break; } if (data && (format < 0xc000) && (format != CF_TEXT) && (format != CF_OEMTEXT) && *(HANDLE *)data) *(HANDLE16 *)data = convert_cb_data_32_16(format, *(HANDLE *)data, FALSE); GlobalUnlock16(handle); } static void check_gptr(HANDLE16 src) { HANDLE dst; if (!src) return; if (dst = GLOBAL_GetLink(src)) { BOOL valid = FALSE; if ((DWORD)dst & 4) { if (GlobalFlags(dst) != GMEM_INVALID_HANDLE) valid = TRUE; } else { if (HeapValidate(GetProcessHeap(), 0, dst)) valid = TRUE; } if (!valid) { GLOBAL_SetLink(src, 0); GlobalFree16(src); } } } /********************************************************************** * WINPROC_CallProc16To32A */ LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg ) { LRESULT ret = 0; HWND hwnd32 = WIN_Handle32( hwnd ); const char *msg_str = message_to_str(msg); TRACE("(%p, %04X, %s(%04X), %04X, %08X)\n", callback, hwnd, msg_str, msg, wParam, lParam); if (isListBox(hwnd, hwnd32) || (call_window_proc_callback == callback && is_listbox_wndproc(arg))) { BOOL f; window_type_table[hwnd] = (BYTE)WINDOW_TYPE_LISTBOX; ret = listbox_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f); if (f) return ret; } if (isComboBox(hwnd, hwnd32) || (call_window_proc_callback == callback && is_combobox_wndproc(arg))) { BOOL f; window_type_table[hwnd] = (BYTE)WINDOW_TYPE_COMBOBOX; ret = combo_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f); if (f) return ret; } if (isButton(hwnd, hwnd32) || (call_window_proc_callback == callback && is_button_wndproc(arg))) { BOOL f; window_type_table[hwnd] = (BYTE)WINDOW_TYPE_BUTTON; ret = button_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f); if (f) return ret; } if (isEdit(hwnd, hwnd32) || (call_window_proc_callback == callback && is_edit_wndproc(arg))) { BOOL f; window_type_table[hwnd] = (BYTE)WINDOW_TYPE_EDIT; ret = edit_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f); if (f) return ret; } if (isScrollBar(hwnd, hwnd32) || (call_window_proc_callback == callback && is_scrollbar_wndproc(arg))) { BOOL f; window_type_table[hwnd] = (BYTE)WINDOW_TYPE_SCROLLBAR; ret = scrollbar_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f); if (f) return ret; } if (isStatic(hwnd, hwnd32) || (call_window_proc_callback == callback && is_static_wndproc(arg))) { BOOL f; window_type_table[hwnd] = (BYTE)WINDOW_TYPE_STATIC; ret = static_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f); if (f) return ret; } if (is_aviwnd(hwnd, hwnd32) && (GetWindowThreadProcessId(hwnd32, NULL) != GetCurrentThreadId())) { aviwnd_cwp = arg; return 1; } switch(msg) { case WM_NCCREATE: case WM_CREATE: { if (!HIWORD(lParam)) { ret = callback(hwnd32, msg, wParam, lParam, result, arg); break; } CREATESTRUCT16 *cs16 = MapSL(lParam); CREATESTRUCTA cs; MDICREATESTRUCTA mdi_cs; CLIENTCREATESTRUCT c32; BOOL mdichild = GetWindowLongW(hwnd32, GWL_EXSTYLE) & WS_EX_MDICHILD ? TRUE : FALSE; BOOL mdiclient = is_mdiclient(hwnd, hwnd32) || (call_window_proc_callback == callback && is_mdiclient_wndproc(arg)); BOOL fixlistbox = (get_windows_build() >= 26100) && (window_type_table[hwnd] == (BYTE)WINDOW_TYPE_LISTBOX) && (msg == WM_CREATE) && (callback != call_window_proc_callback); CREATESTRUCT16to32A( hwnd32, cs16, &cs ); if (mdichild) { MDICREATESTRUCT16 *mdi_cs16 = MapSL(cs16->lpCreateParams); MDICREATESTRUCT16to32A(mdi_cs16, &mdi_cs); cs.lpCreateParams = &mdi_cs; } else if (mdiclient) { CLIENTCREATESTRUCT16 *c16 = MapSL(cs16->lpCreateParams); c32.idFirstChild = c16->idFirstChild; c32.hWindowMenu = HMENU_32(c16->hWindowMenu); cs.lpCreateParams = (LPVOID)&c32; } // some programs set ws_hscroll when they want ws_vscroll // this appears to work in win31 but Windows 11 24H2 broke the compatbility if (fixlistbox) { if (cs.style & WS_HSCROLL) { cs.style |= WS_VSCROLL; SetWindowLongW(hwnd32, GWL_STYLE, cs.style); } } ret = callback( hwnd32, msg, wParam, (LPARAM)&cs, result, arg ); // some programs expect the listbox to be resized in create // again Windows 11 24H2 broke the compatbility if (fixlistbox) { cs.x -= 1; cs.y -= 1; cs.cx += 2; cs.cy += 2; SetWindowPos(hwnd32, 0, cs.x, cs.y, cs.cx, cs.cy, SWP_NOZORDER); } if (mdiclient || mdichild) cs.lpCreateParams = cs16->lpCreateParams; CREATESTRUCT32Ato16( hwnd32, &cs, cs16 ); } break; case WM_MDICREATE: { MDICREATESTRUCT16 *cs16 = MapSL(lParam); MDICREATESTRUCTA cs; MDICREATESTRUCT16to32A( cs16, &cs ); ret = callback( hwnd32, msg, wParam, (LPARAM)&cs, result, arg ); *result = HWND_16((HWND)*result); MDICREATESTRUCT32Ato16( &cs, cs16 ); } break; case WM_MDIACTIVATE: if (lParam) ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32( HIWORD(lParam) ), (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg ); else /* message sent to MDI client */ ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg ); break; case WM_MDIGETACTIVE: { BOOL maximized = FALSE; ret = callback( hwnd32, msg, wParam, (LPARAM)&maximized, result, arg ); *result = MAKELRESULT( LOWORD(HWND_16((HWND)*result)), maximized ); } break; case WM_MDISETMENU: { void SetWindowHMenu16(WORD hWnd16, HMENU16 hinst16); ret = callback( hwnd32, wParam ? WM_MDIREFRESHMENU : WM_MDISETMENU, (WPARAM)HMENU_32(LOWORD(lParam)), (LPARAM)HMENU_32(HIWORD(lParam)), result, arg ); if (ret && LOWORD(lParam)) SetWindowHMenu16(GetParent16(hwnd), LOWORD(lParam)); *result = HMENU_16((HMENU)*result); } break; case WM_MDIRESTORE: ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg ); *result = 0; break; case WM_MDINEXT: ret = callback(hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg); break; case WM_GETMINMAXINFO: { MINMAXINFO16 *mmi16 = MapSL(lParam); MINMAXINFO mmi; MINMAXINFO16to32( mmi16, &mmi ); ret = callback( hwnd32, msg, wParam, (LPARAM)&mmi, result, arg ); MINMAXINFO32to16( &mmi, mmi16 ); } break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: { WINDOWPOS16 *winpos16 = MapSL(lParam); WINDOWPOS winpos; WINDOWPOS16to32( winpos16, &winpos ); ret = callback( hwnd32, msg, wParam, (LPARAM)&winpos, result, arg ); WINDOWPOS32to16( &winpos, winpos16 ); } break; case WM_NCCALCSIZE: { NCCALCSIZE_PARAMS16 *nc16 = MapSL(lParam); NCCALCSIZE_PARAMS nc; WINDOWPOS winpos; RECT16to32( &nc16->rgrc[0], &nc.rgrc[0] ); if (wParam) { RECT16to32( &nc16->rgrc[1], &nc.rgrc[1] ); RECT16to32( &nc16->rgrc[2], &nc.rgrc[2] ); WINDOWPOS16to32( MapSL(nc16->lppos), &winpos ); nc.lppos = &winpos; } ret = callback( hwnd32, msg, wParam, (LPARAM)&nc, result, arg ); RECT32to16( &nc.rgrc[0], &nc16->rgrc[0] ); if (wParam) { RECT32to16( &nc.rgrc[1], &nc16->rgrc[1] ); RECT32to16( &nc.rgrc[2], &nc16->rgrc[2] ); WINDOWPOS32to16( &winpos, MapSL(nc16->lppos) ); } } break; case WM_COMPAREITEM: { COMPAREITEMSTRUCT16* cis16 = MapSL(lParam); COMPAREITEMSTRUCT cis; cis.CtlType = cis16->CtlType; cis.CtlID = cis16->CtlID; cis.hwndItem = WIN_Handle32( cis16->hwndItem ); cis.itemID1 = cis16->itemID1; cis.itemData1 = cis16->itemData1; cis.itemID2 = cis16->itemID2; cis.itemData2 = cis16->itemData2; cis.dwLocaleId = 0; /* FIXME */ ret = callback( hwnd32, msg, wParam, (LPARAM)&cis, result, arg ); } break; case WM_DELETEITEM: { DELETEITEMSTRUCT16* dis16 = MapSL(lParam); DELETEITEMSTRUCT dis; dis.CtlType = dis16->CtlType; dis.CtlID = dis16->CtlID; dis.hwndItem = WIN_Handle32( dis16->hwndItem ); dis.itemData = dis16->itemData; ret = callback( hwnd32, msg, wParam, (LPARAM)&dis, result, arg ); } break; case WM_MEASUREITEM: { MEASUREITEMSTRUCT16* mis16 = MapSL(lParam); MEASUREITEMSTRUCT mis; mis.CtlType = mis16->CtlType; mis.CtlID = mis16->CtlID; mis.itemID = mis16->itemID; mis.itemWidth = mis16->itemWidth; mis.itemHeight = mis16->itemHeight; mis.itemData = mis16->CtlType == ODT_MENU ? MapSL(mis16->itemData) : mis16->itemData; ret = callback( hwnd32, msg, wParam, (LPARAM)&mis, result, arg ); mis16->itemWidth = (UINT16)mis.itemWidth; mis16->itemHeight = (UINT16)mis.itemHeight; } break; case WM_DRAWITEM: { DRAWITEMSTRUCT16* dis16 = MapSL(lParam); DRAWITEMSTRUCT dis; dis.CtlType = dis16->CtlType; dis.CtlID = dis16->CtlID; dis.itemID = dis16->itemID; dis.itemAction = dis16->itemAction; dis.itemState = dis16->itemState; dis.hwndItem = (dis.CtlType == ODT_MENU) ? (HWND)HMENU_32(dis16->hwndItem) : WIN_Handle32( dis16->hwndItem ); dis.hDC = HDC_32(dis16->hDC); dis.itemData = dis16->itemData; dis.rcItem.left = dis16->rcItem.left; dis.rcItem.top = dis16->rcItem.top; dis.rcItem.right = dis16->rcItem.right; dis.rcItem.bottom = dis16->rcItem.bottom; ret = callback( hwnd32, msg, wParam, (LPARAM)&dis, result, arg ); } break; case WM_COPYDATA: { COPYDATASTRUCT16 *cds16 = MapSL(lParam); COPYDATASTRUCT cds; cds.dwData = cds16->dwData; cds.cbData = cds16->cbData; cds.lpData = MapSL(cds16->lpData); ret = callback( hwnd32, msg, (WPARAM)HWND_32(wParam), (LPARAM)&cds, result, arg ); } break; case WM_GETDLGCODE: if (lParam) { MSG16 *msg16 = MapSL(lParam); MSG msg32; msg32.hwnd = WIN_Handle32( msg16->hwnd ); msg32.message = msg16->message; msg32.wParam = msg16->wParam; msg32.lParam = msg16->lParam; msg32.time = msg16->time; msg32.pt.x = msg16->pt.x; msg32.pt.y = msg16->pt.y; ret = callback( hwnd32, msg, wParam, (LPARAM)&msg32, result, arg ); } else ret = callback( hwnd32, msg, wParam, lParam, result, arg ); break; case WM_NEXTMENU: { MDINEXTMENU next; next.hmenuIn = (HMENU)lParam; next.hmenuNext = 0; next.hwndNext = 0; ret = callback( hwnd32, msg, wParam, (LPARAM)&next, result, arg ); *result = MAKELONG( HMENU_16(next.hmenuNext), HWND_16(next.hwndNext) ); } break; case WM_ACTIVATE: case WM_CHARTOITEM: case WM_COMMAND: case WM_VKEYTOITEM: ret = callback( hwnd32, msg, MAKEWPARAM( wParam, HIWORD(lParam) ), (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg ); break; case WM_HSCROLL: case WM_VSCROLL: ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ), (LPARAM)WIN_Handle32( HIWORD(lParam) ), result, arg ); break; case WM_CTLCOLOR: if (HIWORD(lParam) <= CTLCOLOR_STATIC) ret = callback( hwnd32, WM_CTLCOLORMSGBOX + HIWORD(lParam), (WPARAM)HDC_32(wParam), (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg ); *result = HBRUSH_16((HBRUSH)*result); break; case WM_GETTEXT: case WM_SETTEXT: case WM_WININICHANGE: case WM_DEVMODECHANGE: case WM_ASKCBFORMATNAME: case WM_NOTIFY: ret = callback( hwnd32, msg, wParam, (LPARAM)MapSL(lParam), result, arg ); break; case WM_MENUCHAR: ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ), (LPARAM)HMENU_32(HIWORD(lParam)), result, arg ); break; case WM_MENUSELECT: if((LOWORD(lParam) & MF_POPUP) && (LOWORD(lParam) != 0xFFFF)) { HMENU hmenu = HMENU_32(HIWORD(lParam)); int pos = find_sub_menu( &hmenu, wParam ); if (pos == -1) pos = 0; wParam = pos; } ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ), (LPARAM)HMENU_32(HIWORD(lParam)), result, arg ); break; case WM_PARENTNOTIFY: if ((wParam == WM_CREATE) || (wParam == WM_DESTROY)) ret = callback( hwnd32, msg, MAKEWPARAM( wParam, HIWORD(lParam) ), (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg ); else ret = callback( hwnd32, msg, wParam, lParam, result, arg ); break; case WM_ACTIVATEAPP: /* We need this when SetActiveWindow sends a Sendmessage16() to * a 32-bit window. Might be superfluous with 32-bit interprocess * message queues. */ if (lParam) lParam = HTASK_32(lParam); ret = callback( hwnd32, msg, wParam, lParam, result, arg ); break; case WM_DDE_INITIATE: ret = callback(hwnd32, msg, (WPARAM)WIN_Handle32(wParam), MAKELONG(service16_32(LOWORD(lParam)), topic16_32(HIWORD(lParam))), result, arg); break; case WM_DDE_TERMINATE: ret = callback(hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg); break; case WM_DDE_REQUEST: case WM_DDE_UNADVISE: ret = callback(hwnd32, msg, (WPARAM)WIN_Handle32(wParam), MAKELONG(LOWORD(lParam), topic16_32(HIWORD(lParam))), result, arg); break; case WM_DDE_ADVISE: case WM_DDE_DATA: case WM_DDE_POKE: { HANDLE16 lo16 = LOWORD(lParam); UINT_PTR lo32 = 0; if (lo16 && !(lo32 = convert_handle_16_to_32(lo16, GMEM_DDESHARE))) break; convert_dde_msg_16_to_32(msg, lo32); lParam = PackDDElParam( msg, lo32, topic16_32(HIWORD(lParam)) ); ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg ); check_gptr(lo16); } break; case WM_DDE_ACK: { UINT_PTR lo = LOWORD(lParam); UINT_PTR hi = HIWORD(lParam); int flag = 0; UINT_PTR hi16 = 0; char buf[256]; if (hi >= 0xc000 && GlobalGetAtomNameA(hi, buf, 256) > 0) flag |= 1; if (GlobalSize16(hi) != 0) flag |= 2; lo = lo; /* atom or flag */ switch (flag) { case 0: if (hi) { WARN("DDE_ACK: neither atom nor handle!!!\n"); hi = 0; } break; case 1: hi = topic16_32(hi); break; /* atom, nothing to do */ case 3: WARN("DDE_ACK: %lx both atom and handle... choosing handle\n", hi); /* fall through */ case 2: hi16 = hi; hi = convert_handle_16_to_32(hi, GMEM_DDESHARE); break; } lParam = PackDDElParam( WM_DDE_ACK, lo, hi ); ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg ); if (flag >= 2) check_gptr(hi16); } break; case WM_DDE_EXECUTE: { UINT_PTR hi16 = HIWORD(lParam); lParam = convert_handle_16_to_32( hi16, GMEM_DDESHARE ); ret = callback( hwnd32, msg, (WPARAM)HWND_32(wParam), lParam, result, arg ); check_gptr(hi16); } break; case WM_PAINTCLIPBOARD: case WM_SIZECLIPBOARD: FIXME_(msg)( "message %04x needs translation\n", msg ); break; case WM_NCPAINT: if ((get_windows_build() >= 26100) && (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x400)) { LONG style = GetWindowLongA(hwnd32, GWL_STYLE); if ((style & (WS_SYSMENU | WS_CAPTION)) == (WS_SYSMENU | WS_CAPTION)) { HICON icon = SendMessageA(hwnd32, WM_GETICON, ICON_SMALL, 0); if (!icon) { icon = SendMessageA(hwnd32, WM_QUERYDRAGICON, 0, 0); if (icon) SendMessageA(hwnd32, WM_SETICON, ICON_SMALL, icon); } } } ret = callback(hwnd32, msg, (WPARAM)HRGN_32(wParam), lParam, result, arg); break; case WM_ERASEBKGND: ret = callback(hwnd32, msg, (WPARAM)HDC_32(wParam), lParam, result, arg); break; case WM_SETFONT: ret = callback(hwnd32, msg, (WPARAM)HFONT_32(wParam), lParam, result, arg); break; case WM_MOUSEACTIVATE: ret = callback(hwnd32, msg, (WPARAM)HWND_32(wParam), lParam, result, arg); break; case WM_SETFOCUS: case WM_SETCURSOR: ret = callback(hwnd32, msg, (WPARAM)HWND_32(wParam), lParam, result, arg); break; case WM_INITMENU: case WM_INITMENUPOPUP: case WM_UNINITMENUPOPUP: ret = callback(hwnd32, msg, (WPARAM)HMENU_32(wParam), lParam, result, arg); break; case WM_THEMECHANGED: ret = callback(hwnd32, msg, (INT)((INT16)wParam), lParam, result, arg); break; case WM_NCACTIVATE: ret = callback(hwnd32, msg, wParam, (LPARAM)HWND_32((HWND16)lParam), result, arg); break; case WM_GETICON: ret = callback(hwnd32, msg, wParam, lParam, result, arg); *result = get_icon_16((HICON)*result); break; case WM_SETICON: ret = callback(hwnd32, msg, wParam, (LPARAM)get_icon_32((HICON16)lParam), result, arg); break; case WM_QUERYDRAGICON: ret = callback(hwnd32, msg, wParam, lParam, result, arg); *result = get_icon_16((HICON)*result); break; case WM_QUERYDROPOBJECT: case WM_DROPOBJECT: case WM_DRAGLOOP: case WM_DRAGSELECT: case WM_DRAGMOVE: { LPDROPSTRUCT16 lpds16 = (LPDROPSTRUCT16)MapSL(lParam); DROPSTRUCT ds32; HICON16 icon16; DROPSTRUCT16_32(&ds32, lpds16); ret = callback(hwnd32, msg, wParam, (LPARAM)&ds32, result, arg); DROPSTRUCT32_16(&ds32, lpds16); icon16 = get_icon_16((HICON)*result); if (icon16) { *result = (LRESULT)icon16; } break; } case WM_MOUSEWHEEL: case WM_SYSTIMER: case WM_TIMER: if (lParam != TIMER32_LPARAM) { ret = callback(hwnd32, msg, wParam, lParam, result, arg); break; } else { if (wParam < TIMER32_WRAP_SIZE) { ret = callback(hwnd32, msg, timer32[wParam].wParam, timer32[wParam].lParam, result, arg); timer32[wParam].ref = FALSE; timer32_count--; } else { ret = callback(hwnd32, msg, wParam, lParam, result, arg); } break; } case WM_GETFONT: ret = callback(hwnd32, msg, wParam, lParam, result, arg); *result = HFONT_16((HFONT)*result); break; case WM_KILLFOCUS: case WM_INITDIALOG: case WM_MDIDESTROY: case WM_MDIMAXIMIZE: ret = callback(hwnd32, msg, (WPARAM)HWND_32((HWND16)wParam), lParam, result, arg); break; case WM_ENTERIDLE: ret = callback(hwnd32, msg, wParam, (LPARAM)HWND_32((HWND16)lParam), result, arg); break; case WM_UPDATEUISTATE: ret = callback(hwnd32, msg, lParam, lParam, result, arg); break; case WM_PRINT: case WM_PRINTCLIENT: case WM_NCUAHDRAWFRAME: /* undocumented wparam: hdc */ ret = callback(hwnd32, msg, (WPARAM)HDC_32(wParam), lParam, result, arg); break; case WM_PAINT: ret = callback(hwnd32, msg, (WPARAM)HDC_32(wParam), lParam, result, arg); break; case WM_DROPFILES: ret = callback(hwnd32, msg, (WPARAM)hdrop16_to_hdrop32((HDROP16)wParam), lParam, result, arg); break; case WM_SETREDRAW: { BOOL redraw = !(GetWindowLongA(hwnd32, GWL_STYLE) & WS_VISIBLE); ret = callback(hwnd32, msg, wParam, lParam, result, arg); if (redraw) RedrawWindow(hwnd32, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN); break; } default: { if (msg != WM_NULL && msg == drag_list_message) { DRAGLISTINFO16 *di = (DRAGLISTINFO16*)MapSL(lParam); DRAGLISTINFO di32; di32.hWnd = HWND_32(di->hWnd); di32.uNotification = di->uNotification; di32.ptCursor.x = di->ptCursor.x; di32.ptCursor.y = di->ptCursor.y; ret = callback(hwnd32, msg, wParam, (LPARAM)&di32, result, arg); break; } ret = callback(hwnd32, msg, wParam, lParam, result, arg); break; } } return ret; } static HICON16 get_default_icon(HINSTANCE16 inst) { LPBYTE restab; NE_TYPEINFO *type = get_resource_table(inst, RT_GROUP_ICON, &restab); if (!type) type = get_resource_table(inst, RT_ICON, &restab); if (type) { LPCSTR id = (LPCSTR)(((NE_NAMEINFO *)((char *)type + sizeof(NE_TYPEINFO)))->id); char name[32] = {0}; if (!((int)id & 0x8000)) { LPBYTE pos = restab + (int)id; int len = pos[0] > 31 ? 31 : pos[0]; strncpy(name, pos + 1, len); id = name; } return LoadIcon16(inst, id); } return 0; } #include #include #include "../mmsystem/winemm16.h" void InitWndProc16(HWND hWnd, HWND16 hWnd16); /********************************************************************** * WINPROC_CallProc32ATo16 * * Call a 16-bit window procedure, translating the 32-bit args. */ LRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result, void *arg ) { LRESULT ret = 0; HWND16 hwnd16 = HWND_16(hwnd); const char *msg_str = message_to_str(msg); TRACE("(%p, %p, %s(%04X), %08X, %08X)\n", callback, hwnd, msg_str, msg, wParam, lParam); if (BM_GETCHECK <= msg && msg <= BM_SETDONTCLICK) { window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_BUTTON; } if (LB_ADDSTRING <= msg && msg <= LB_MSGMAX) { window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_LISTBOX; } if (STM_SETICON <= msg && msg <= STM_MSGMAX) { window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_STATIC; } if (SBM_SETPOS <= msg && msg <= SBM_GETSCROLLBARINFO) { window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_SCROLLBAR; } if (EM_GETSEL <= msg && msg <= EM_ENABLEFEATURE) { window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_EDIT; } if (CB_GETEDITSEL <= msg && msg <= CB_MSGMAX) { window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_COMBOBOX; } if (is_aviwnd(hwnd16, hwnd) && (GetWindowThreadProcessId(hwnd, NULL) == GetCurrentThreadId())) { if (!aviwnd_msg) aviwnd_msg = RegisterWindowMessageA("AVIWnd_Msg"); HWND parent = GetParent(hwnd); DWORD pid; GetWindowThreadProcessId(parent, &pid); if (pid == GetCurrentProcessId()) { MSG avimsg = { hwnd, msg, wParam, lParam }; LRESULT ret = SendMessageA(parent, aviwnd_msg, NULL, &avimsg); if (msg == WM_DESTROY) window_type_table[hwnd16] = 0; if (avimsg.time) return CallWindowProcA(avimsg.time, hwnd, msg, wParam, lParam); return ret; } } if (msg && (msg == aviwnd_msg)) { MSG *avimsg = (MSG *)lParam; aviwnd_cwp = NULL; LRESULT ret = WindowProc16(avimsg->hwnd, avimsg->message, avimsg->wParam, avimsg->lParam); avimsg->time = aviwnd_cwp; return ret; } switch (msg) { case WM_NCCREATE: case WM_CREATE: { InitWndProc16(hwnd, HWND_16(hwnd)); CREATESTRUCTA *cs32 = (CREATESTRUCTA *)lParam; CREATESTRUCT16 cs; MDICREATESTRUCT16 mdi_cs16; BOOL mdi_child = (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD); CREATESTRUCT32Ato16( hwnd, cs32, &cs ); cs.lpszName = MapLS( cs32->lpszName ); cs.lpszClass = MapLS( win16classname(cs32->lpszClass) ); if (mdi_child) { MDICREATESTRUCTA *mdi_cs = cs32->lpCreateParams; MDICREATESTRUCT32Ato16( mdi_cs, &mdi_cs16 ); mdi_cs16.szTitle = MapLS( mdi_cs->szTitle ); mdi_cs16.szClass = MapLS( win16classname(mdi_cs->szClass) ); cs.lpCreateParams = MapLS( &mdi_cs16 ); } else if (cs32->lpCreateParams) { if (get_windows_build() >= 22621) { // Windows 11 22H2 removed much ntvdm support from user32 including the // lpcreateparams fixup for the dialog item extra bytes char class[10]; HWND roothwnd = GetAncestor(hwnd, GA_ROOT); int ret = GetClassNameA(roothwnd, &class, 10); // if a window is created with a dialog as it's parent lpCreateParams can still be a SEGPTR __TRY { if (ret && !strcmp(class, "#32770") && (*(WORD *)cs32->lpCreateParams == 4)) cs.lpCreateParams = *(SEGPTR *)((BYTE *)cs32->lpCreateParams + 2); } __EXCEPT_ALL { } __ENDTRY } else if (GetModuleHandleA("comdlg32.dll") == cs32->hInstance) { // if a window hinstance lower 16 bits are nonzero which is not true for 32bit dlls // user32 will put the dword in the dialog item extra bytes in lpcreateparams // so fix things up for commdlg since comdlg32 uses it's own hinstance cs.lpCreateParams = *(SEGPTR *)((BYTE *)cs32->lpCreateParams + 2); } } lParam = MapLS( &cs ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); UnMapLS( cs.lpszName ); UnMapLS( cs.lpszClass ); if (mdi_child) { UnMapLS( cs.lpCreateParams ); UnMapLS( mdi_cs16.szTitle ); UnMapLS( mdi_cs16.szClass ); } } break; case WM_MDICREATE: { MDICREATESTRUCTA *cs32 = (MDICREATESTRUCTA *)lParam; MDICREATESTRUCT16 cs; MDICREATESTRUCT32Ato16( cs32, &cs ); cs.szTitle = MapLS( cs32->szTitle ); cs.szClass = MapLS( win16classname(cs32->szClass) ); lParam = MapLS( &cs ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); UnMapLS( cs.szTitle ); UnMapLS( cs.szClass ); } break; case WM_MDIACTIVATE: if (GetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_MDICHILD) ret = callback( HWND_16(hwnd), msg, ((HWND)lParam == hwnd), MAKELPARAM( HWND_16((HWND)lParam), HWND_16((HWND)wParam) ), result, arg ); else ret = callback( HWND_16(hwnd), msg, (WPARAM16)HWND_16( (HWND)wParam ), 0, result, arg ); break; case WM_MDIGETACTIVE: ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); if (lParam) *(BOOL *)lParam = (BOOL16)HIWORD(*result); *result = (LRESULT)WIN_Handle32( LOWORD(*result) ); break; case WM_MDISETMENU: ret = callback( HWND_16(hwnd), msg, (lParam == 0), MAKELPARAM( LOWORD(wParam), LOWORD(lParam) ), result, arg ); *result = (LRESULT)HMENU_32((HMENU16)*result); break; case WM_MDINEXT: ret = callback(HWND_16(hwnd), msg, HWND_16(wParam), lParam, result, arg); break; case WM_GETMINMAXINFO: { MINMAXINFO *mmi32 = (MINMAXINFO *)lParam; MINMAXINFO16 mmi; MINMAXINFO32to16( mmi32, &mmi ); lParam = MapLS( &mmi ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); MINMAXINFO16to32( &mmi, mmi32 ); } break; case WM_NCCALCSIZE: { NCCALCSIZE_PARAMS *nc32 = (NCCALCSIZE_PARAMS *)lParam; NCCALCSIZE_PARAMS16 nc; WINDOWPOS16 winpos; BOOL fixborder = FALSE; if (get_windows_build() >= 26100) { DWORD exstyle = GetWindowLong(hwnd, GWL_EXSTYLE); if ((exstyle & WS_EX_STATICEDGE) && (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x400)) { if (exstyle & WS_EX_WINDOWEDGE) SetWindowLong(hwnd, GWL_EXSTYLE, exstyle & ~WS_EX_WINDOWEDGE); fixborder = TRUE; } } RECT32to16( &nc32->rgrc[0], &nc.rgrc[0] ); if (wParam) { RECT32to16( &nc32->rgrc[1], &nc.rgrc[1] ); RECT32to16( &nc32->rgrc[2], &nc.rgrc[2] ); WINDOWPOS32to16( nc32->lppos, &winpos ); nc.lppos = MapLS( &winpos ); } lParam = MapLS( &nc ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); if (fixborder) { nc.rgrc[0].top--; nc.rgrc[0].left--; nc.rgrc[0].bottom++; nc.rgrc[0].right++; } RECT16to32( &nc.rgrc[0], &nc32->rgrc[0] ); if (wParam) { RECT16to32( &nc.rgrc[1], &nc32->rgrc[1] ); RECT16to32( &nc.rgrc[2], &nc32->rgrc[2] ); WINDOWPOS16to32( &winpos, nc32->lppos ); UnMapLS( nc.lppos ); } } break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: { WINDOWPOS *winpos32 = (WINDOWPOS *)lParam; WINDOWPOS16 winpos; // before windows 10 not set swp_statechanged on a window being maximized if wm_windowposchanging is sent twice if ((msg == WM_WINDOWPOSCHANGED) && GetPropA(hwnd, "WindowMaximized") && (callback == call_window_proc16)) { RemovePropA(hwnd, "WindowMaximized"); winpos32->flags &= ~0x8000; //SWP_STATECHANGED } WINDOWPOS32to16( winpos32, &winpos ); lParam = MapLS( &winpos ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); WINDOWPOS16to32( &winpos, winpos32 ); } break; case WM_COMPAREITEM: { COMPAREITEMSTRUCT *cis32 = (COMPAREITEMSTRUCT *)lParam; COMPAREITEMSTRUCT16 cis; cis.CtlType = cis32->CtlType; cis.CtlID = cis32->CtlID; cis.hwndItem = HWND_16( cis32->hwndItem ); cis.itemID1 = cis32->itemID1; cis.itemData1 = cis32->itemData1; cis.itemID2 = cis32->itemID2; cis.itemData2 = cis32->itemData2; lParam = MapLS( &cis ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); } break; case WM_DELETEITEM: { DELETEITEMSTRUCT *dis32 = (DELETEITEMSTRUCT *)lParam; DELETEITEMSTRUCT16 dis; dis.CtlType = dis32->CtlType; dis.CtlID = dis32->CtlID; dis.itemID = dis32->itemID; dis.hwndItem = (dis.CtlType == ODT_MENU) ? (HWND16)LOWORD(dis32->hwndItem) : HWND_16( dis32->hwndItem ); dis.itemData = dis32->itemData; lParam = MapLS( &dis ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); } break; case WM_DRAWITEM: { DRAWITEMSTRUCT *dis32 = (DRAWITEMSTRUCT *)lParam; DRAWITEMSTRUCT16 dis; dis.CtlType = dis32->CtlType; dis.CtlID = dis32->CtlID; if ((dis32->CtlType == ODT_MENU) && (dis32->itemID > 0xffff)) { HMENU16 menu = HMENU_16(dis32->itemID); if (menu) dis.itemID = menu; else dis.itemID = dis32->itemID; } else dis.itemID = dis32->itemID; dis.itemAction = dis32->itemAction; dis.itemState = dis32->itemState; dis.hwndItem = HWND_16( dis32->hwndItem ); dis.hDC = HDC_16(dis32->hDC); dis.itemData = dis32->itemData; dis.rcItem.left = dis32->rcItem.left; dis.rcItem.top = dis32->rcItem.top; dis.rcItem.right = dis32->rcItem.right; dis.rcItem.bottom = dis32->rcItem.bottom; lParam = MapLS( &dis ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); } break; case WM_MEASUREITEM: { MEASUREITEMSTRUCT *mis32 = (MEASUREITEMSTRUCT *)lParam; MEASUREITEMSTRUCT16 mis; mis.CtlType = mis32->CtlType; mis.CtlID = mis32->CtlID; if ((mis32->CtlType == ODT_MENU) && (mis32->itemID > 0xffff)) { HMENU16 menu = HMENU_16(mis32->itemID); if (menu) mis.itemID = menu; else mis.itemID = mis32->itemID; } else mis.itemID = mis32->itemID; mis.itemWidth = mis32->itemWidth; mis.itemHeight = mis32->itemHeight; mis.itemData = mis32->itemData; lParam = MapLS( &mis ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); mis32->itemWidth = (INT16)mis.itemWidth; mis32->itemHeight = mis.itemHeight; } break; case WM_COPYDATA: { COPYDATASTRUCT *cds32 = (COPYDATASTRUCT *)lParam; COPYDATASTRUCT16 cds; cds.dwData = cds32->dwData; cds.cbData = cds32->cbData; cds.lpData = MapLS( cds32->lpData ); lParam = MapLS( &cds ); ret = callback( HWND_16(hwnd), msg, HWND_16(wParam), lParam, result, arg ); UnMapLS( lParam ); UnMapLS( cds.lpData ); } break; case WM_GETDLGCODE: if (lParam) { MSG *msg32 = (MSG *)lParam; MSG16 msg16; msg16.hwnd = HWND_16( msg32->hwnd ); msg16.message = msg32->message; msg16.wParam = msg32->wParam; msg16.lParam = msg32->lParam; msg16.time = msg32->time; msg16.pt.x = msg32->pt.x; msg16.pt.y = msg32->pt.y; lParam = MapLS( &msg16 ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); } else ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); break; case WM_NEXTMENU: { MDINEXTMENU *next = (MDINEXTMENU *)lParam; ret = callback( HWND_16(hwnd), msg, wParam, (LPARAM)next->hmenuIn, result, arg ); next->hmenuNext = HMENU_32( LOWORD(*result) ); next->hwndNext = WIN_Handle32( HIWORD(*result) ); *result = 0; } break; case WM_GETTEXT: case WM_ASKCBFORMATNAME: wParam = min( wParam, 0xff80 ); /* Must be < 64K */ /* fall through */ case WM_NOTIFY: case WM_SETTEXT: case WM_WININICHANGE: case WM_DEVMODECHANGE: lParam = MapLS( (void *)lParam ); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); UnMapLS( lParam ); break; case WM_COMMAND: if (IsOldWindowsTask(GetCurrentTask()) && (window_type_table[HWND_16((HWND)lParam)] == WINDOW_TYPE_LISTBOX) && (HIWORD(wParam) > LBN_DBLCLK) && (HIWORD(wParam) != LBN_ERRSPACE)) break; if (HIWORD(lParam) == 0) lParam = MAKELPARAM(LOWORD(lParam), HIWORD(wParam)); else lParam = MAKELPARAM(HWND_16((HWND)lParam), HIWORD(wParam)); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); break; case WM_ACTIVATE: if (krnl386_get_compat_mode("256color") && (callback == call_window_proc16) && LOWORD(wParam)) { LRESULT res; callback(HWND_16(hwnd), WM_QUERYNEWPALETTE, NULL, NULL, &res, arg); } case WM_CHARTOITEM: case WM_VKEYTOITEM: { if (HIWORD(lParam) == 0) lParam = MAKELPARAM(LOWORD(lParam), HIWORD(wParam)); else lParam = MAKELPARAM(HWND_16((HWND)lParam), HIWORD(wParam)); ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); } break; case WM_HSCROLL: case WM_VSCROLL: ret = callback( HWND_16(hwnd), msg, wParam, MAKELPARAM( HIWORD(wParam), HWND_16((HWND)lParam) ), result, arg ); break; case WM_CTLCOLORMSGBOX: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLORSCROLLBAR: case WM_CTLCOLORSTATIC: ret = callback( HWND_16(hwnd), WM_CTLCOLOR, HDC_16((HDC)wParam), MAKELPARAM( HWND_16((HWND)lParam), msg - WM_CTLCOLORMSGBOX ), result, arg ); *result = HBRUSH_32((HBRUSH16)*result); break; case WM_MENUSELECT: if(HIWORD(wParam) & MF_POPUP) { HMENU hmenu; if ((HIWORD(wParam) != 0xffff) || lParam) { if ((hmenu = GetSubMenu( (HMENU)lParam, LOWORD(wParam) ))) { ret = callback( HWND_16(hwnd), msg, HMENU_16(hmenu), MAKELPARAM( HIWORD(wParam), (HMENU16)HMENU_16((HMENU)lParam) ), result, arg ); break; } } } else if(lParam == GetMenu(hwnd)) { switch(LOWORD(wParam) & 0xfff0) { case SC_MINIMIZE: case SC_RESTORE: case SC_CLOSE: wParam |= MF_SYSMENU << 16; break; } } case WM_MENUCHAR: ret = callback( HWND_16(hwnd), msg, wParam, MAKELPARAM( HIWORD(wParam), (HMENU16)HMENU_16((HMENU)lParam) ), result, arg ); break; case WM_PARENTNOTIFY: if ((LOWORD(wParam) == WM_CREATE) || (LOWORD(wParam) == WM_DESTROY)) ret = callback( HWND_16(hwnd), msg, wParam, MAKELPARAM( HWND_16((HWND)lParam), HIWORD(wParam) ), result, arg ); else ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); break; case WM_ACTIVATEAPP: ret = callback( HWND_16(hwnd), msg, wParam, HTASK_16( lParam ), result, arg ); break; case WM_PAINT: // force a paint for hidden win30 windows, KB Q80898 if ((GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x30a) && !(GetWindowLongA(hwnd, GWL_STYLE) & WS_CHILD)) EnumChildWindows(hwnd, child_paint, NULL); if (IsIconic( hwnd ) && GetClassLongPtrW( hwnd, GCLP_HICON )) ret = callback( HWND_16(hwnd), WM_PAINTICON, 1, lParam, result, arg ); else ret = callback( HWND_16(hwnd), WM_PAINT, HDC_16(wParam), lParam, result, arg ); break; case WM_NCPAINT: ret = callback(HWND_16(hwnd), WM_NCPAINT, HRGN_16((HRGN)wParam), lParam, result, arg); break; case WM_NCACTIVATE: ret = callback(HWND_16(hwnd), WM_NCACTIVATE, wParam, HWND_16((HWND)lParam), result, arg); break; case WM_ERASEBKGND: if (IsIconic( hwnd ) && GetClassLongPtrW( hwnd, GCLP_HICON )) msg = WM_ICONERASEBKGND; ret = callback( HWND_16(hwnd), msg, HDC_16((HDC)wParam), lParam, result, arg ); break; case WM_SETFONT: ret = callback(HWND_16(hwnd), msg, HFONT_16((HFONT)wParam), lParam, result, arg); break; case WM_DDE_INITIATE: ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), MAKELONG(service32_16(LOWORD(lParam)), topic32_16(HIWORD(lParam))), result, arg ); break; case WM_DDE_TERMINATE: ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg ); break; case WM_DDE_UNADVISE: case WM_DDE_REQUEST: ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), MAKELONG(LOWORD(lParam), topic32_16(HIWORD(lParam))), result, arg ); break; case WM_DDE_ADVISE: case WM_DDE_DATA: case WM_DDE_POKE: { UINT_PTR lo32, hi; HANDLE16 lo16 = 0; if (UnpackDDElParam( msg, lParam, &lo32, &hi ) && (callback == get_message_callback) && (*result & 1)) FreeDDElParam(msg, lParam); if (lo32 && !(lo16 = convert_handle_32_to_16(lo32, GMEM_DDESHARE))) break; convert_dde_msg_32_to_16(msg, lo16); hi = topic32_16(hi); ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), MAKELPARAM(lo16, hi), result, arg ); } break; /* FIXME don't know how to free allocated memory (handle) !! */ case WM_DDE_ACK: { UINT_PTR lo, hi; int flag = 0; char buf[256]; __TRY { // if bit 4 is not set it's either a pointer or atom if (!(lParam & 4)) lo = *(UINT *)lParam; if (!UnpackDDElParam( msg, lParam, &lo, &hi )) { lo = LOWORD(lParam); hi = HIWORD(lParam); } else if((callback == get_message_callback) && (*result & 1)) FreeDDElParam(msg, lParam); } __EXCEPT_ALL { lo = LOWORD(lParam); hi = HIWORD(lParam); } __ENDTRY if (hi >= 0xc000 && GlobalGetAtomNameA((ATOM)hi, buf, sizeof(buf)) > 0) flag |= 1; if (HIWORD(hi) && GlobalSize((HANDLE)hi) != 0) flag |= 2; lo = lo; /* atom or flag */ switch (flag) { case 0: if (hi) { WARN("DDE_ACK: neither atom nor handle!!!\n"); hi = 0; } break; case 1: hi = topic32_16(hi); break; /* atom, nothing to do */ case 3: WARN("DDE_ACK: %lx both atom and handle... choosing handle\n", hi); /* fall through */ case 2: hi = convert_handle_32_to_16(hi, GMEM_DDESHARE); break; } ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), MAKELPARAM(lo, hi), result, arg ); } break; /* FIXME don't know how to free allocated memory (handle) !! */ case WM_DDE_EXECUTE: lParam = MAKELPARAM( 0, convert_handle_32_to_16( lParam, GMEM_DDESHARE )); ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg ); break; /* FIXME don't know how to free allocated memory (handle) !! */ case SBM_SETRANGE: ret = callback( HWND_16(hwnd), SBM_SETRANGE16, 0, MAKELPARAM(wParam, lParam), result, arg ); break; case SBM_GETRANGE: ret = callback( HWND_16(hwnd), SBM_GETRANGE16, wParam, lParam, result, arg ); *(LPINT)wParam = LOWORD(*result); *(LPINT)lParam = HIWORD(*result); break; case BM_GETCHECK: case BM_SETCHECK: case BM_GETSTATE: case BM_SETSTATE: case BM_SETSTYLE: ret = callback( HWND_16(hwnd), msg + BM_GETCHECK16 - BM_GETCHECK, wParam, lParam, result, arg ); break; case EM_GETRECT: { lParam = MapLS(lParam); ret = callback(HWND_16(hwnd), msg + EM_GETSEL16 - EM_GETSEL, wParam, lParam, result, arg); UnMapLS(lParam); } break; case EM_GETLINE: ret = callback(HWND_16(hwnd), msg + EM_GETSEL16 - EM_GETSEL, wParam, (LPARAM)MapLS(lParam), result, arg); break; case EM_GETSEL: ret = callback(HWND_16(hwnd), msg + EM_GETSEL16 - EM_GETSEL, 0, 0, result, arg); break; case EM_SETRECT: case EM_SETRECTNP: case EM_SCROLL: case EM_LINESCROLL: case EM_SCROLLCARET: case EM_GETMODIFY: case EM_SETMODIFY: case EM_GETLINECOUNT: case EM_LINEINDEX: case EM_SETHANDLE: case EM_GETHANDLE: case EM_GETTHUMB: case EM_LINELENGTH: case EM_REPLACESEL: case EM_LIMITTEXT: case EM_CANUNDO: case EM_UNDO: case EM_FMTLINES: case EM_LINEFROMCHAR: case EM_SETTABSTOPS: case EM_SETPASSWORDCHAR: case EM_EMPTYUNDOBUFFER: case EM_GETFIRSTVISIBLELINE: case EM_SETREADONLY: case EM_SETWORDBREAKPROC: case EM_GETWORDBREAKPROC: case EM_GETPASSWORDCHAR: ret = callback( HWND_16(hwnd), msg + EM_GETSEL16 - EM_GETSEL, wParam, lParam, result, arg ); break; case EM_SETSEL: ret = callback( HWND_16(hwnd), EM_SETSEL16, 0, MAKELPARAM( wParam, lParam ), result, arg ); break; case LB_CARETOFF: case LB_CARETON: case LB_DELETESTRING: case LB_GETANCHORINDEX: case LB_GETCARETINDEX: case LB_GETCOUNT: case LB_GETCURSEL: case LB_GETHORIZONTALEXTENT: case LB_GETITEMDATA: case LB_GETITEMHEIGHT: case LB_GETSEL: case LB_GETSELCOUNT: case LB_GETTEXTLEN: case LB_GETTOPINDEX: case LB_RESETCONTENT: case LB_SELITEMRANGE: case LB_SELITEMRANGEEX: case LB_SETANCHORINDEX: case LB_SETCARETINDEX: case LB_SETCOLUMNWIDTH: case LB_SETCURSEL: case LB_SETHORIZONTALEXTENT: case LB_SETITEMDATA: case LB_SETITEMHEIGHT: case LB_SETSEL: case LB_SETTOPINDEX: ret = callback( HWND_16(hwnd), msg + LB_ADDSTRING16 - LB_ADDSTRING, wParam, lParam, result, arg ); break; case LB_ADDSTRING: case LB_FINDSTRING: case LB_FINDSTRINGEXACT: case LB_INSERTSTRING: case LB_SELECTSTRING: case LB_GETTEXT: case LB_DIR: case LB_ADDFILE: lParam = MapLS( (LPSTR)lParam ); ret = callback( HWND_16(hwnd), msg + LB_ADDSTRING16 - LB_ADDSTRING, wParam, lParam, result, arg ); UnMapLS( lParam ); break; case LB_GETSELITEMS: { INT *items32 = (INT *)lParam; INT16 *items, buffer[512]; unsigned int i; wParam = min( wParam, 0x7f80 ); /* Must be < 64K */ if (!(items = get_buffer( buffer, sizeof(buffer), wParam * sizeof(INT16) ))) break; lParam = MapLS( items ); ret = callback( HWND_16(hwnd), LB_GETSELITEMS16, wParam, lParam, result, arg ); UnMapLS( lParam ); for (i = 0; i < wParam; i++) items32[i] = items[i]; free_buffer( buffer, items ); } break; case LB_SETTABSTOPS: if (wParam) { INT *stops32 = (INT *)lParam; INT16 *stops, buffer[512]; unsigned int i; wParam = min( wParam, 0x7f80 ); /* Must be < 64K */ if (!(stops = get_buffer( buffer, sizeof(buffer), wParam * sizeof(INT16) ))) break; for (i = 0; i < wParam; i++) stops[i] = stops32[i]; lParam = MapLS( stops ); ret = callback( HWND_16(hwnd), LB_SETTABSTOPS16, wParam, lParam, result, arg ); UnMapLS( lParam ); free_buffer( buffer, stops ); } else ret = callback( HWND_16(hwnd), LB_SETTABSTOPS16, wParam, lParam, result, arg ); break; case CB_DELETESTRING: case CB_GETCOUNT: case CB_GETLBTEXTLEN: case CB_LIMITTEXT: case CB_RESETCONTENT: case CB_SETEDITSEL: case CB_GETCURSEL: case CB_SETCURSEL: case CB_SHOWDROPDOWN: case CB_SETITEMDATA: case CB_SETITEMHEIGHT: case CB_GETITEMHEIGHT: case CB_SETEXTENDEDUI: case CB_GETEXTENDEDUI: case CB_GETDROPPEDSTATE: ret = callback( HWND_16(hwnd), msg + CB_GETEDITSEL16 - CB_GETEDITSEL, wParam, lParam, result, arg ); break; /* unknown message */ case CB_UNKNOWN_167: ret = callback(HWND_16(hwnd), CB_UNKNOWN_167_16, wParam, lParam, result, arg); break; case CB_GETEDITSEL: ret = callback( HWND_16(hwnd), CB_GETEDITSEL16, wParam, lParam, result, arg ); if (wParam) *((PUINT)(wParam)) = LOWORD(*result); if (lParam) *((PUINT)(lParam)) = HIWORD(*result); /* FIXME: subtract 1? */ break; case CB_ADDSTRING: case CB_FINDSTRING: case CB_FINDSTRINGEXACT: case CB_INSERTSTRING: case CB_SELECTSTRING: case CB_DIR: case CB_GETLBTEXT: lParam = MapLS( (LPSTR)lParam ); ret = callback( HWND_16(hwnd), msg + CB_GETEDITSEL16 - CB_GETEDITSEL, wParam, lParam, result, arg ); UnMapLS( lParam ); break; case LB_GETITEMRECT: case CB_GETDROPPEDCONTROLRECT: { RECT *r32 = (RECT *)lParam; RECT16 rect; lParam = MapLS( &rect ); ret = callback( HWND_16(hwnd), (msg == LB_GETITEMRECT) ? LB_GETITEMRECT16 : CB_GETDROPPEDCONTROLRECT16, wParam, lParam, result, arg ); UnMapLS( lParam ); RECT16to32( &rect, r32 ); } break; case WM_PAINTCLIPBOARD: case WM_SIZECLIPBOARD: FIXME_(msg)( "message %04x needs translation\n", msg ); break; /* the following messages should not be sent to 16-bit apps */ case WM_SIZING: case WM_MOVING: case WM_CAPTURECHANGED: case WM_STYLECHANGING: case WM_STYLECHANGED: break; case WM_MOUSEACTIVATE: ret = callback(HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg); break; case WM_SETFOCUS: case WM_SETCURSOR: ret = callback(HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg); break; case WM_INITMENU: case WM_INITMENUPOPUP: case WM_UNINITMENUPOPUP: ret = callback(HWND_16(hwnd), msg, HMENU_16((HMENU)wParam), lParam, result, arg); break; case WM_GETICON: ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg); *result = (LRESULT)get_icon_32((HICON16)*result); break; case WM_SETICON: ret = callback(HWND_16(hwnd), msg, wParam, get_icon_16((HICON)lParam), result, arg); break; case WM_QUERYDRAGICON: ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg); if (!*result) *result = get_default_icon(GetWindowWord16(HWND_16(hwnd), GWL_HINSTANCE)); *result = (LRESULT)get_icon_32((HICON16)*result); break; case WM_QUERYDROPOBJECT: case WM_DROPOBJECT: case WM_DRAGLOOP: case WM_DRAGSELECT: case WM_DRAGMOVE: { LPDROPSTRUCT lpds32 = (LPDROPSTRUCT)lParam; DROPSTRUCT16 ds16; LPDROPSTRUCT16 lpds16 = &ds16; SEGPTR sds16 = MapLS(lpds16); HICON icon32; DROPSTRUCT32_16(lpds32, lpds16); ret = callback(HWND_16(hwnd), msg, wParam, sds16, result, arg); icon32 = get_icon_32((HICON16)*result); if (icon32) { *result = (LRESULT)icon32; } DROPSTRUCT16_32(lpds32, lpds16); break; } //some applications (afx?) crash when processing this message case WM_THEMECHANGED: break; case MM_WOM_OPEN: case MM_WOM_CLOSE: ret = callback(HWND_16(hwnd), msg, HDRVR_16((HDRVR)wParam), lParam, result, arg); break; case MM_WOM_DONE: { ret = callback(HWND_16(hwnd), msg, HDRVR_16((HDRVR)wParam), lParam, result, arg); break; } case WM_MOUSEWHEEL: case WM_SYSTIMER: case WM_TIMER: if (!HIWORD(wParam)) { ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg); break; } else { int index = -1; for (int i = 0; i < TIMER32_WRAP_SIZE; i++) { if (!timer32[i].ref) { index = i; break; } } if (index == -1) { ERR("could not allocate TIMER32(%s)\n", message_to_str(msg)); ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg); break; } timer32_count++; timer32[index].ref = TRUE; timer32[index].wParam = wParam; timer32[index].lParam = lParam; ret = callback(HWND_16(hwnd), msg, index, TIMER32_LPARAM, result, arg); break; } case WM_GETFONT: ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg); *result = (LRESULT)HFONT_32((HFONT16)*result); break; case WM_KILLFOCUS: case WM_MDIDESTROY: case WM_INITDIALOG: ret = callback(HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg); break; case WM_ENTERIDLE: ret = callback(HWND_16(hwnd), msg, wParam, HWND_16((HWND)lParam), result, arg); break; case WM_UPDATEUISTATE: ret = callback(HWND_16(hwnd), msg, wParam, wParam, result, arg); break; case WM_PRINT: case WM_PRINTCLIENT: case WM_NCUAHDRAWFRAME: /* undocumented wparam: hdc */ ret = callback(HWND_16(hwnd), msg, HDC_16((HDC)wParam), lParam, result, arg); break; case 0x4c8: //MCIWNDM_NOTIFYMODE { char clsname[12]; BOOL r = GetClassNameA(wParam, &clsname, 12); if (r && !stricmp(clsname, "MCIWNDCLASS")) ret = callback(HWND_16(hwnd), msg, HWND_16(wParam), lParam, result, arg); else ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); break; } case WM_DROPFILES: ret = callback(HWND_16(hwnd), msg, (WPARAM16)hdrop32_to_hdrop16((HDROP)wParam), lParam, result, arg); break; default: { if (msg != WM_NULL && msg == drag_list_message) { LPDRAGLISTINFO di = (LPDRAGLISTINFO)lParam; DRAGLISTINFO16 di16; di16.hWnd = HWND_16(di->hWnd); di16.uNotification = di->uNotification; di16.ptCursor.x = di->ptCursor.x; di16.ptCursor.y = di->ptCursor.y; lParam = MapLS(&di16); ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg); UnMapLS(lParam); break; } } ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg ); break; } return ret; } static BOOL CALLBACK win16_windows(HWND hwnd, LPARAM lp) { MSG *msg = (MSG *)lp; char class[256]; LRESULT result; GetClassNameA(hwnd, class, 256); if (!strncmp(class, LOCAL_CLASS_PREFIX, strlen(LOCAL_CLASS_PREFIX))) SendMessageTimeoutA(hwnd, msg->message, msg->wParam, msg->lParam, SMTO_ABORTIFHUNG, 1000, &result); return TRUE; } static LRESULT send_message_timeout_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ) { DWORD count; LRESULT success; ReleaseThunkLock(&count); if (hwnd == HWND_BROADCAST) { // Windows 11 24H2 disabled broadcasting WM_USER and WM_APP messages // so send it ourselves to all winevdm top level windows if ((get_windows_build() >= 26100) && (msg >= WM_USER) && (msg < 0xC000)) { MSG message; message.hwnd = hwnd; message.message = msg; message.wParam = wp; message.lParam = lp; *result = 0; success = EnumWindows(win16_windows, (LPARAM)&message); } else { int timeout = 1000; switch (msg) { case WM_PALETTECHANGED: case WM_SYSCOLORCHANGE: case WM_FONTCHANGE: case WM_SETTINGCHANGE: timeout = 100; break; } success = SendMessageTimeoutA(hwnd, msg, wp, lp, SMTO_ABORTIFHUNG, timeout, result); } } else success = SendMessageTimeoutA(hwnd, msg, wp, lp, SMTO_NORMAL, 1000, result); RestoreThunkLock(count); if (!success) { if (GetLastError() == ERROR_TIMEOUT) { ERR("SendMessage(%p,%s,%04x,%08x,uTimeout=1000ms) timed out.\n", hwnd, message_to_str(msg), wp, lp); } } return *result; } typedef struct { UINT msg; WPARAM wp; LPARAM lp; } send_message_to_same_process_args; BOOL CALLBACK send_message_to_same_process(HWND hwnd, LPARAM lp) { DWORD pid; DWORD_PTR result; send_message_to_same_process_args *args = (send_message_to_same_process_args*)lp; if (GetWindowThreadProcessId(hwnd, &pid) && pid == GetCurrentProcessId()) { SendMessageTimeoutA(hwnd, args->msg, args->wp, args->lp, SMTO_NORMAL, 1000, &result); } return TRUE; } static LRESULT send_message_to_same_process_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg) { DWORD count; send_message_to_same_process_args args; args.msg = msg; args.wp = wp; args.lp = lp; ReleaseThunkLock(&count); *result = 0; EnumWindows(send_message_to_same_process, &args); RestoreThunkLock(count); return *result; } /* InstallShield uses SendMessage(HWND_BROADCAST) for IPC */ LRESULT WINAPI fix_installshield(HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM lparam, BOOL *fixed) { char name[256]; LRESULT result; static const char *table[] = { "LZW_IS_CLIENT_ALIVE_SE", "ISDEL_MSG_DELENABLE", "ISDEL_MSG_DELEXISTS", "ISDEL_MSG_DELDONE", "ISMSG16_TERMINATE", "ISMSG32_TERMINATE", "LOGO_MSG_LOGOCLOSE_30", "LOGO_MSG_LOGOSTATUS_30", }; *fixed = FALSE; if (!GetClipboardFormatNameA(msg, name, ARRAYSIZE(name))) { return 0; } for (SIZE_T i = 0; i < ARRAYSIZE(table); i++) { if (!strcmp(name, table[i])) { *fixed = TRUE; WINPROC_CallProc16To32A(send_message_to_same_process_callback, hwnd16, msg, wparam, lparam, &result, NULL); return result; } } return 0; } /*********************************************************************** * SendMessage (USER.111) */ LRESULT WINAPI SendMessage16( HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM lparam ) { LRESULT result; HWND hwnd = WIN_Handle32( hwnd16 ); DWORD pid; DWORD thid = GetWindowThreadProcessId(hwnd, &pid); // work around for Borland Office 2.0 installer // if ((msg != WM_GETTEXT) || (thid != GetCurrentThreadId())) // SetEvent(kernel_get_thread_data()->idle_event); // SendMessageTimeout always fails with this message if ((msg == WM_DDE_EXECUTE) && (thid != GetCurrentThreadId())) return PostMessage16( hwnd16, msg, wparam, lparam ); if (hwnd != HWND_BROADCAST && thid == GetCurrentThreadId()) { /* call 16-bit window proc directly */ WNDPROC16 winproc; if (!(winproc = (WNDPROC16)GetWndProc16(hwnd16))) { DLGPROC16 dlgproc; /* workaround for PBRUSH.EXE (color palette) */ if (msg == WM_COMMAND) { dlgproc = (DLGPROC16)GetDlgProc16(hwnd16); if (dlgproc) { /* first the WH_CALLWNDPROC hook */ call_WH_CALLWNDPROC_hook(hwnd16, &msg, &wparam, &lparam); CallWindowProc16(dlgproc, hwnd16, msg, wparam, lparam); return GetWindowLong16(hwnd16, DWL_MSGRESULT); } } WINPROC_CallProc16To32A(send_message_callback, hwnd16, msg, wparam, lparam, &result, NULL); return result; } /* first the WH_CALLWNDPROC hook */ call_WH_CALLWNDPROC_hook(hwnd16, &msg, &wparam, &lparam); TRACE_(message)("(0x%04x) [%04x] wp=%04x lp=%08lx\n", hwnd16, msg, wparam, lparam ); result = CallWindowProc16( winproc, hwnd16, msg, wparam, lparam ); TRACE_(message)("(0x%04x) [%04x] wp=%04x lp=%08lx returned %08lx\n", hwnd16, msg, wparam, lparam, result ); } else /* map to 32-bit unicode for inter-thread/process message */ { if (hwnd == HWND_BROADCAST && msg >= 0xC000) { BOOL fixed = FALSE; LRESULT result; result = fix_installshield(hwnd16, msg, wparam, lparam, &fixed); if (fixed) return result; } TRACE_(message)("(0x%04x) to 32-bit [%04x] wp=%04x lp=%08lx\n", hwnd16, msg, wparam, lparam); WINPROC_CallProc16To32A( send_message_timeout_callback, hwnd16, msg, wparam, lparam, &result, NULL ); TRACE_(message)("(0x%04x) to 32-bit [%04x] wp=%04x lp=%08lx returned %08lx\n", hwnd16, msg, wparam, lparam, result); } return result; } /*********************************************************************** * PostMessage (USER.110) */ BOOL16 WINAPI PostMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam ) { LRESULT unused; return WINPROC_CallProc16To32A( post_message_callback, hwnd, msg, wparam, lparam, &unused, NULL ); } /*********************************************************************** * PostAppMessage (USER.116) */ BOOL16 WINAPI PostAppMessage16( HTASK16 hTask, UINT16 msg, WPARAM16 wparam, LPARAM lparam ) { LRESULT unused; DWORD_PTR tid = HTASK_32( hTask ); if (!tid) return FALSE; return WINPROC_CallProc16To32A( post_thread_message_callback, 0, msg, wparam, lparam, &unused, (void *)tid ); } /********************************************************************** * CallWindowProc (USER.122) */ LRESULT WINAPI CallWindowProc16( WNDPROC16 func, HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) { int index = winproc_to_index( func ); LRESULT result; if (!func) return 0; if (index == -1 || index >= MAX_WINPROCS32) call_window_proc16( hwnd, msg, wParam, lParam, &result, func ); else { WNDPROC proc = (WNDPROC)func; if (thunk_array && thunk_array[index].proc) proc = thunk_array[index].proc; WINPROC_CallProc16To32A( call_window_proc_callback, hwnd, msg, wParam, lParam, &result, proc ); } return result; } /********************************************************************** * __wine_call_wndproc (USER.1010) */ LRESULT WINAPI __wine_call_wndproc( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, WNDPROC proc ) { LRESULT result; WINPROC_CallProc16To32A( call_window_proc_callback, hwnd, msg, wParam, lParam, &result, proc ); return result; } /*********************************************************************** * InSendMessage (USER.192) */ BOOL16 WINAPI InSendMessage16(void) { return InSendMessage(); } /*********************************************************************** * ReplyMessage (USER.115) */ void WINAPI ReplyMessage16( LRESULT result ) { ReplyMessage( result ); } BOOL is_timer_thunk(TIMERPROC proc); static ATOM atom_UserAdapterWindowClass; /*********************************************************************** * PeekMessage32 (USER.819) */ BOOL16 WINAPI PeekMessage32_16( MSG32_16 *msg16, HWND16 hwnd16, UINT16 first, UINT16 last, UINT16 flags, BOOL16 wHaveParamHigh ) { MSG msg; LRESULT remove = flags; HWND hwnd = WIN_Handle32( hwnd16 ); if(USER16_AlertableWait) MsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, MWMO_ALERTABLE ); if (!PeekMessageA( &msg, hwnd, first, last, flags )) return FALSE; if ((msg.message == WM_TIMER) && (flags & PM_REMOVE) && !msg.hwnd && msg.lParam && !is_timer_thunk(msg.lParam)) { DispatchMessageA(&msg); return PeekMessage32_16(msg16, hwnd16, first, last, flags, wHaveParamHigh); } if (atom_UserAdapterWindowClass == 0) { WNDCLASSA c; HMODULE hmod = GetModuleHandleW(L"CoreMessaging"); if (hmod) { atom_UserAdapterWindowClass = GetClassInfoA(hmod, "UserAdapterWindowClass", &c); if (!atom_UserAdapterWindowClass) { atom_UserAdapterWindowClass = GetClassInfoA(hmod, "SystemUserAdapterWindowClass", &c); } } } if ((flags & PM_REMOVE) && ((atom_UserAdapterWindowClass != 0 && msg.hwnd != NULL && GetClassWord(msg.hwnd, GCW_ATOM) == atom_UserAdapterWindowClass) || msg.message == WM_DWMNCRENDERINGCHANGED)) { DispatchMessageA(&msg); return PeekMessage32_16(msg16, hwnd16, first, last, flags, wHaveParamHigh); } msg16->msg.time = msg.time; msg16->msg.pt.x = (INT16)msg.pt.x; msg16->msg.pt.y = (INT16)msg.pt.y; if (wHaveParamHigh) msg16->wParamHigh = HIWORD(msg.wParam); WINPROC_CallProc32ATo16( get_message_callback, msg.hwnd, msg.message, msg.wParam, msg.lParam, &remove, &msg16->msg ); return TRUE; } typedef struct { BOOL down; BOOL found; BOOL scrollable; HWND hwnd; } enum_scrollbar_data; static void check_scrollable(enum_scrollbar_data *d, HWND hwnd) { SCROLLINFO si = { 0 }; si.cbSize = sizeof(si); si.fMask = SIF_ALL; char ctrl[12]; RealGetWindowClassA(hwnd, ctrl, 12); if (!stricmp(ctrl, "SCROLLBAR")) { if (GetScrollInfo(hwnd, SB_CTL, &si)) { if ((GetWindowLongW(hwnd, GWL_STYLE) & (SBS_VERT | WS_VISIBLE)) == (SBS_VERT | WS_VISIBLE)) { d->found = TRUE; if ((d->down && si.nMax > si.nPos) || (!d->down && si.nMin < si.nPos)) { d->scrollable = TRUE; d->hwnd = hwnd; } } return; } } if (GetScrollInfo(hwnd, SB_VERT, &si)) { d->found = TRUE; if ((d->down && si.nMax > si.nPos) || (!d->down && si.nMin < si.nPos)) { d->scrollable = TRUE; d->hwnd = NULL; } return; } } static BOOL CALLBACK enum_scrollbar_proc(HWND hwnd, LPARAM lp) { enum_scrollbar_data *d = (enum_scrollbar_data*)lp; check_scrollable(d, hwnd); return TRUE; } static LRESULT defwindow_proc_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg) { DWORD count; HANDLE yevent = kernel_get_thread_data()->yield_event; if (!yevent) ReleaseThunkLock(&count); if (msg == WM_MOUSEWHEEL) { enum_scrollbar_data d = { 0 }; d.down = (INT16)HIWORD(wp) < 0; check_scrollable(&d, hwnd); EnumChildWindows(hwnd, (WNDENUMPROC)enum_scrollbar_proc, (LPARAM)&d); if (d.scrollable) { SendMessage16(HWND_16(hwnd), WM_VSCROLL, d.down ? SB_LINEDOWN : SB_LINEUP, MAKELONG(0, (WORD)HWND_16(d.hwnd))); SendMessage16(HWND_16(hwnd), WM_VSCROLL, SB_ENDSCROLL, MAKELONG(0, (WORD)HWND_16(d.hwnd))); if (!yevent) RestoreThunkLock(count); return 0; } } *result = DefWindowProcA(hwnd, msg, wp, lp); if (!yevent) RestoreThunkLock(count); return *result; } /*********************************************************************** * DefWindowProc (USER.107) */ LRESULT WINAPI DefWindowProc16( HWND16 hwnd16, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) { LRESULT result; WINPROC_CallProc16To32A(defwindow_proc_callback, hwnd16, msg, wParam, lParam, &result, 0); if ((msg == WM_WINDOWPOSCHANGED) && IsOldWindowsTask(GetCurrentTask())) { WINDOWPOS16 *wpos = (WINDOWPOS16 *)MapSL(lParam); if (wpos->flags & 0x1000 /*SWP_NOCLIENTMOVE*/) SendMessage16(hwnd16, WM_MOVE, 0, MAKELONG(wpos->x, wpos->y)); } return result; } /*********************************************************************** * DefDlgProc (USER.308) */ LRESULT WINAPI DefDlgProc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) { LRESULT result; WINPROC_CallProc16To32A( defdlg_proc_callback, hwnd, msg, wParam, lParam, &result, 0 ); return result; } BOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst); /*********************************************************************** * PeekMessage (USER.109) */ BOOL16 WINAPI PeekMessage16( MSG16 *msg, HWND16 hwnd, UINT16 first, UINT16 last, UINT16 flags ) { DWORD count; if (!(flags & PM_NOYIELD)) { SetEvent(kernel_get_thread_data()->idle_event); ReleaseThunkLock(&count); MsgWaitForMultipleObjects(0, NULL, FALSE, 0, QS_ALLINPUT); /* Sleep(1); /* yield thread */ /* Some programs use PeekMessage instead of GetMessage, so use 100% CPU... */ static int extra_sleep = -1; if (extra_sleep == -1) extra_sleep = krnl386_get_config_int("otvdm", "PeekMessageSleep", 0); if (extra_sleep > 0) MsgWaitForMultipleObjects(0, NULL, FALSE, extra_sleep, QS_ALLINPUT); } BOOL ret = PeekMessage32_16((MSG32_16 *)msg, hwnd, first, last, flags, FALSE); if (!(flags & PM_NOYIELD)) { RestoreThunkLock(count); } if (IsOldWindowsTask(GetCurrentTask())) { if (!msg->hwnd) msg->hwnd = HWND_16(GetDesktopWindow()); if (!(flags & PM_REMOVE) && ((msg->message & ~1) == 0x100)) { char key = msg->wParam & 0xff; char keys[256]; GetKeyboardState(keys); keys[key] = (keys[key] & 1) ^ (!(keys[key] & 0x80) && !(msg->message & 1)) ? 1 : 0; keys[key] |= (msg->message & 1) ? 0 : 0x80; SetKeyboardState(keys); } } return ret; } /*********************************************************************** * GetMessage32 (USER.820) */ BOOL16 WINAPI GetMessage32_16( MSG32_16 *msg16, HWND16 hwnd16, UINT16 first, UINT16 last, BOOL16 wHaveParamHigh ) { MSG msg; LRESULT remove = 1; HWND hwnd = WIN_Handle32( hwnd16 ); SetEvent(kernel_get_thread_data()->idle_event); if(USER16_AlertableWait) MsgWaitForMultipleObjectsEx( 0, NULL, INFINITE, 0, MWMO_ALERTABLE ); DWORD count; /* Do not yield when there is a posted message */ if (!PeekMessageA(&msg, hwnd, first, last, PM_REMOVE)) { ReleaseThunkLock(&count); GetMessageA(&msg, hwnd, first, last); RestoreThunkLock(count); } if (msg.message == WM_DWMNCRENDERINGCHANGED) { DispatchMessageA(&msg); return GetMessage32_16(msg16, hwnd16, first, last, wHaveParamHigh); } msg16->msg.time = msg.time; msg16->msg.pt.x = (INT16)msg.pt.x; msg16->msg.pt.y = (INT16)msg.pt.y; if (wHaveParamHigh) msg16->wParamHigh = HIWORD(msg.wParam); WINPROC_CallProc32ATo16( get_message_callback, msg.hwnd, msg.message, msg.wParam, msg.lParam, &remove, &msg16->msg ); TRACE( "message %04x, hwnd %p, filter(%04x - %04x)\n", msg16->msg.message, hwnd, first, last ); return msg16->msg.message != WM_QUIT; } /*********************************************************************** * GetMessage (USER.108) */ BOOL16 WINAPI GetMessage16( MSG16 *msg, HWND16 hwnd, UINT16 first, UINT16 last ) { return GetMessage32_16( (MSG32_16 *)msg, hwnd, first, last, FALSE ); } /*********************************************************************** * TranslateMessage32 (USER.821) */ BOOL16 WINAPI TranslateMessage32_16( const MSG32_16 *msg, BOOL16 wHaveParamHigh ) { MSG msg32; msg32.hwnd = WIN_Handle32( msg->msg.hwnd ); msg32.message = msg->msg.message; msg32.wParam = MAKEWPARAM( msg->msg.wParam, wHaveParamHigh ? msg->wParamHigh : 0 ); msg32.lParam = msg->msg.lParam; return TranslateMessage( &msg32 ); } /*********************************************************************** * TranslateMessage (USER.113) */ BOOL16 WINAPI TranslateMessage16( const MSG16 *msg ) { return TranslateMessage32_16( (const MSG32_16 *)msg, FALSE ); } LRESULT call_native_wndproc(HWND16 hWnd16, UINT16 msg, WPARAM16 wParam, LPARAM lParam) { LRESULT result; WNDPROC wndproc32 = (WNDPROC)GetWindowLongPtrA(HWND_32(hWnd16), GWLP_WNDPROC); if (!wndproc32) { SetLastError(ERROR_INVALID_WINDOW_HANDLE); return 0; } WINPROC_CallProc16To32A(call_window_proc_callback, hWnd16, msg, wParam, lParam, &result, wndproc32); return result; } /*********************************************************************** * DispatchMessage (USER.114) */ LONG WINAPI DispatchMessage16( const MSG16* msg ) { WNDPROC16 winproc; LRESULT retval; WNDPROC wndproc32 = (WNDPROC)GetWindowLongPtrA(HWND_32(msg->hwnd), GWLP_WNDPROC); /* Process timer messages */ if ((msg->message == WM_TIMER) || (msg->message == WM_SYSTIMER)) { if (msg->lParam) { WPARAM wp = (WPARAM)msg->wParam; LPARAM lp = msg->lParam; if (msg->lParam == TIMER32_LPARAM) { timer32[msg->wParam].ref = FALSE; wp = timer32[msg->wParam].wParam; lp = timer32[msg->wParam].lParam; timer32_count--; } if (msg->lParam == TIMER32_LPARAM || (msg->lParam & 0xFFFF0000) != 0xFFFF0000) { MSG msg32; msg32.hwnd = WIN_Handle32(msg->hwnd); msg32.wParam = wp; msg32.lParam = lp; msg32.time = msg->time; msg32.pt.x = msg->pt.x; msg32.pt.y = msg->pt.y; msg32.message = msg->message; return DispatchMessageA(&msg32); } return CallWindowProc16((WNDPROC16)msg->lParam, msg->hwnd, msg->message, (WPARAM16)wp, GetTickCount()); } } if (!msg->hwnd || !(winproc = (WNDPROC16)GetWndProc16( msg->hwnd )) || wndproc32 != WindowProc16 /* OleSetMenuDescriptor put a window in a subclass */) { LRESULT result; if (!wndproc32) { SetLastError(ERROR_INVALID_WINDOW_HANDLE); return 0; } WINPROC_CallProc16To32A(call_window_proc_callback, msg->hwnd, msg->message, msg->wParam, msg->lParam, &result, wndproc32); return result; } TRACE_(message)("(0x%04x) [%04x] wp=%04x lp=%08lx\n", msg->hwnd, msg->message, msg->wParam, msg->lParam); retval = CallWindowProc16( winproc, msg->hwnd, msg->message, msg->wParam, msg->lParam ); TRACE_(message)("(0x%04x) [%04x] wp=%04x lp=%08lx returned %08lx\n", msg->hwnd, msg->message, msg->wParam, msg->lParam, retval); return retval; } /*********************************************************************** * DispatchMessage32 (USER.822) */ LONG WINAPI DispatchMessage32_16( const MSG32_16 *msg16, BOOL16 wHaveParamHigh ) { if (wHaveParamHigh == FALSE) return DispatchMessage16( &msg16->msg ); else { MSG msg; msg.hwnd = WIN_Handle32( msg16->msg.hwnd ); msg.message = msg16->msg.message; msg.wParam = MAKEWPARAM( msg16->msg.wParam, msg16->wParamHigh ); msg.lParam = msg16->msg.lParam; msg.time = msg16->msg.time; msg.pt.x = msg16->msg.pt.x; msg.pt.y = msg16->msg.pt.y; return DispatchMessageA( &msg ); } } static LRESULT is_dialog_message_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg) { MSG16 *msg16 = (MSG16*)arg; MSG mesg; if (msg == WM_DWMNCRENDERINGCHANGED) return; mesg.hwnd = HWND_32(msg16->hwnd); mesg.message = msg; mesg.wParam = wp; mesg.lParam = lp; mesg.time = msg16->time; mesg.pt.x = msg16->pt.x; mesg.pt.y = msg16->pt.y; *result = IsDialogMessageA(hwnd, &mesg); return *result; } /*********************************************************************** * IsDialogMessage (USER.90) */ BOOL16 WINAPI IsDialogMessage16( HWND16 hwndDlg, SEGPTR pmsg16 ) { MSG msg; MSG16 *msg16 = MapSL(pmsg16); HWND hwndDlg32; BOOL ret; msg.hwnd = WIN_Handle32(msg16->hwnd); hwndDlg32 = WIN_Handle32(hwndDlg); switch(msg16->message) { case WM_KEYDOWN: case WM_CHAR: case WM_SYSCHAR: msg.message = msg16->message; msg.wParam = msg16->wParam; msg.lParam = msg16->lParam; msg.time = msg16->time; msg.pt.x = msg16->pt.x; msg.pt.y = msg16->pt.y; SetPropA(msg.hwnd, MAKEINTATOM(dialogmsgthunk), (HANDLE)pmsg16); ret = IsDialogMessageA( hwndDlg32, &msg ); RemovePropA(msg.hwnd, MAKEINTATOM(dialogmsgthunk)); return ret; default: { LPARAM result; SetPropA(msg.hwnd, MAKEINTATOM(dialogmsgthunk), (HANDLE)pmsg16); ret = WINPROC_CallProc16To32A(is_dialog_message_callback, hwndDlg, msg16->message, msg16->wParam, msg16->lParam, &result, msg16); RemovePropA(msg.hwnd, MAKEINTATOM(dialogmsgthunk)); return ret; } } if ((hwndDlg32 != msg.hwnd) && !IsChild( hwndDlg32, msg.hwnd )) return FALSE; TranslateMessage16( msg16 ); //???? if (DispatchMessage16(msg16) == FALSE) DefDlgProc16(hwndDlg, msg16->message, msg16->wParam, msg16->lParam); return TRUE; } /*********************************************************************** * MsgWaitForMultipleObjects (USER.640) */ DWORD WINAPI MsgWaitForMultipleObjects16( DWORD count, const HANDLE *handles, BOOL wait_all, DWORD timeout, DWORD mask ) { return MsgWaitForMultipleObjectsEx( count, handles, timeout, mask, wait_all ? MWMO_WAITALL : 0 ); } /********************************************************************** * SetDoubleClickTime (USER.20) */ void WINAPI SetDoubleClickTime16( UINT16 interval ) { SetDoubleClickTime( interval ); } /********************************************************************** * GetDoubleClickTime (USER.21) */ UINT16 WINAPI GetDoubleClickTime16(void) { return GetDoubleClickTime(); } /*********************************************************************** * PostQuitMessage (USER.6) */ void WINAPI PostQuitMessage16( INT16 exitCode ) { PostQuitMessage( exitCode ); } /********************************************************************** * GetKeyState (USER.106) */ INT16 WINAPI GetKeyState16(INT16 vkey) { return GetKeyState(vkey); } /********************************************************************** * GetKeyboardState (USER.222) */ BOOL WINAPI GetKeyboardState16( LPBYTE state ) { return GetKeyboardState( state ); } /********************************************************************** * SetKeyboardState (USER.223) */ BOOL WINAPI SetKeyboardState16( LPBYTE state ) { return SetKeyboardState( state ); } /*********************************************************************** * SetMessageQueue (USER.266) */ BOOL16 WINAPI SetMessageQueue16( INT16 size ) { return SetMessageQueue( size ); } /*********************************************************************** * UserYield (USER.332) */ void WINAPI UserYield16(void) { MSG msg; PeekMessageW( &msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE ); } /*********************************************************************** * GetQueueStatus (USER.334) */ DWORD WINAPI GetQueueStatus16( UINT16 flags ) { return GetQueueStatus( flags ); } /*********************************************************************** * GetInputState (USER.335) */ BOOL16 WINAPI GetInputState16(void) { return GetInputState(); } /********************************************************************** * TranslateAccelerator (USER.178) */ INT16 WINAPI TranslateAccelerator16( HWND16 hwnd, HACCEL16 hAccel, LPMSG16 msg ) { MSG msg32; ACCEL16 *accel; if (!msg) return 0; switch (msg->message) { case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: case WM_CHAR: case WM_SYSCHAR: break; default: return 0; } msg32.message = msg->message; /* msg32.hwnd not used */ msg32.wParam = msg->wParam; msg32.lParam = msg->lParam; #if 0 /* Some programs allocate the HACCEL directly instead of loading the HACCEL by LoadAccelerators. */ accel = (hAccel & 6) == 6 ? (ACCEL16*)GlobalLock16(hAccel) : 0; if (accel) { int i; int count = GlobalSize16(hAccel) / sizeof(ACCEL16); ACCEL accel32[100]; HACCEL haccel32; int ret; ACCEL *table32 = accel32; if (count * sizeof(ACCEL) > sizeof(accel32)) table32 = HeapAlloc(GetProcessHeap(), 0, count * sizeof(ACCEL)); if (!table32) return 0; for (i = 0; i < count; i++) { table32[i].cmd = accel[i].cmd; table32[i].key = accel[i].key; table32[i].fVirt = accel[i].fVirt & ~0x80; if (accel[i].fVirt & 0x80) { count = i + 1; break; } } haccel32 = CreateAcceleratorTableW(table32, count); GlobalUnlock16(hAccel); if (table32 != accel32) HeapFree(GetProcessHeap(), 0, table32); ret = TranslateAcceleratorW(WIN_Handle32(hwnd), haccel32, &msg32); DestroyAcceleratorTable(haccel32); return ret; } #endif return TranslateAcceleratorW( WIN_Handle32(hwnd), HACCEL_32(hAccel), &msg32 ); } /********************************************************************** * TranslateMDISysAccel (USER.451) */ BOOL16 WINAPI TranslateMDISysAccel16( HWND16 hwndClient, LPMSG16 msg ) { if (msg->message == WM_KEYDOWN || msg->message == WM_SYSKEYDOWN) { MSG msg32; msg32.hwnd = WIN_Handle32(msg->hwnd); msg32.message = msg->message; msg32.wParam = msg->wParam; msg32.lParam = msg->lParam; /* MDICLIENTINFO is still the same for win32 and win16 ... */ return TranslateMDISysAccel( WIN_Handle32(hwndClient), &msg32 ); } return 0; } /*********************************************************************** * button_proc16 */ static LRESULT button_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f) { static const UINT msg16_offset = BM_GETCHECK16 - BM_GETCHECK; *f = TRUE; switch (msg) { case BM_GETCHECK16: case BM_SETCHECK16: case BM_GETSTATE16: case BM_SETSTATE16: case BM_SETSTYLE16: return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg); default: *f = FALSE; return 0; } } /*********************************************************************** * button_proc16 */ static LRESULT button_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { static const UINT msg16_offset = BM_GETCHECK16 - BM_GETCHECK; switch (msg) { case BM_GETCHECK16: case BM_SETCHECK16: case BM_GETSTATE16: case BM_SETSTATE16: case BM_SETSTYLE16: return wow_handlers32.button_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE ); default: return wow_handlers32.button_proc( hwnd, msg, wParam, lParam, unicode ); } } /*********************************************************************** * combo_proc16 */ static LRESULT combo_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { static const UINT msg16_offset = CB_GETEDITSEL16 - CB_GETEDITSEL; switch (msg) { case CB_INSERTSTRING16: case CB_SELECTSTRING16: case CB_FINDSTRING16: case CB_FINDSTRINGEXACT16: wParam = (INT)(INT16)wParam; /* fall through */ case CB_ADDSTRING16: { DWORD style = GetWindowLongW( hwnd, GWL_STYLE ); if ((style & CBS_HASSTRINGS) || !(style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE))) lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; } case CB_SETITEMHEIGHT16: case CB_GETITEMHEIGHT16: case CB_SETCURSEL16: case CB_GETLBTEXTLEN16: case CB_GETITEMDATA16: case CB_SETITEMDATA16: wParam = (INT)(INT16)wParam; /* signed integer */ msg -= msg16_offset; break; case CB_GETDROPPEDCONTROLRECT16: lParam = (LPARAM)MapSL(lParam); if (lParam) { RECT r; RECT16 *r16 = (RECT16 *)lParam; wow_handlers32.combo_proc( hwnd, CB_GETDROPPEDCONTROLRECT, wParam, (LPARAM)&r, FALSE ); r16->left = r.left; r16->top = r.top; r16->right = r.right; r16->bottom = r.bottom; } return CB_OKAY; case CB_DIR16: if (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE; lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; case CB_GETLBTEXT16: wParam = (INT)(INT16)wParam; lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; case CB_GETEDITSEL16: wParam = lParam = 0; /* just in case */ msg -= msg16_offset; break; case CB_LIMITTEXT16: case CB_SETEDITSEL16: case CB_DELETESTRING16: case CB_RESETCONTENT16: case CB_GETDROPPEDSTATE16: case CB_SHOWDROPDOWN16: case CB_GETCOUNT16: case CB_GETCURSEL16: case CB_SETEXTENDEDUI16: case CB_GETEXTENDEDUI16: msg -= msg16_offset; break; default: return wow_handlers32.combo_proc( hwnd, msg, wParam, lParam, unicode ); } return wow_handlers32.combo_proc( hwnd, msg, wParam, lParam, FALSE ); } /*********************************************************************** * combo_proc16 */ static LRESULT combo_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f) { static const UINT msg16_offset = CB_GETEDITSEL16 - CB_GETEDITSEL; *f = TRUE; switch (msg) { case CB_INSERTSTRING16: case CB_SELECTSTRING16: case CB_FINDSTRING16: case CB_FINDSTRINGEXACT16: wParam = (INT)(INT16)wParam; /* fall through */ case CB_ADDSTRING16: { DWORD style = GetWindowLongW(hwnd, GWL_STYLE); if ((style & CBS_HASSTRINGS) || !(style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE))) lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; } case CB_SETITEMHEIGHT16: case CB_GETITEMHEIGHT16: case CB_SETCURSEL16: case CB_GETLBTEXTLEN16: case CB_GETITEMDATA16: case CB_SETITEMDATA16: wParam = (INT)(INT16)wParam; /* signed integer */ msg -= msg16_offset; break; case CB_GETDROPPEDCONTROLRECT16: lParam = (LPARAM)MapSL(lParam); if (lParam) { RECT r; RECT16 *r16 = (RECT16 *)lParam; r.left = r16->left; r.top = r16->top; r.right = r16->right; r.bottom = r16->bottom; LRESULT ret = callback(hwnd, CB_GETDROPPEDCONTROLRECT, wParam, (LPARAM)&r, result, arg);//wow_handlers32.combo_proc(hwnd, CB_GETDROPPEDCONTROLRECT, wParam, (LPARAM)&r, FALSE); r16->left = r.left; r16->top = r.top; r16->right = r.right; r16->bottom = r.bottom; *result = CB_OKAY; return ret; } case CB_DIR16: if (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE; lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; case CB_GETLBTEXT16: wParam = (INT)(INT16)wParam; lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; case CB_GETEDITSEL16: wParam = lParam = 0; /* just in case */ msg -= msg16_offset; break; case CB_LIMITTEXT16: case CB_SETEDITSEL16: case CB_DELETESTRING16: case CB_RESETCONTENT16: case CB_GETDROPPEDSTATE16: case CB_SHOWDROPDOWN16: case CB_GETCOUNT16: case CB_GETCURSEL16: case CB_SETEXTENDEDUI16: case CB_GETEXTENDEDUI16: msg -= msg16_offset; break; case CB_UNKNOWN_167_16: msg = CB_UNKNOWN_167; break; default: *f = FALSE; return 0; } return callback(hwnd, msg, wParam, lParam, result, arg); } /********************************************************************* * edit_lock_buffer (internal) * * A 16 bit application might send an EM_GETHANDLE message and expect a HLOCAL16 * (16 bit SEG:OFF handler). From that moment on we have to keep using this * 16 bit memory handler, because it is supposed to be valid at all times after * EM_GETHANDLE. * We create a HLOCAL16 buffer in edit_get_handle and copy the text from the * HLOCAL buffer, when needed * */ #define GWW_HANDLE16 sizeof(void*) static void edit_lock_buffer( HWND hwnd ) { STACK16FRAME* stack16 = MapSL(PtrToUlong(getWOW32Reserved())); HLOCAL16 hloc16 = GetWindowWord16( HWND_16(hwnd), GWW_HANDLE16 ); HANDLE16 oldDS; HLOCAL hloc32; UINT size; if (!hloc16) return; if (!(hloc32 = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return; oldDS = stack16->ds; stack16->ds = GetWindowWord16( HWND_16(hwnd), GWLP_HINSTANCE ); size = LocalSize16(hloc16); if (LocalReAlloc( hloc32, size, LMEM_MOVEABLE )) { char *text = MapSL( LocalLock16( hloc16 )); char *dest = LocalLock( hloc32 ); memcpy( dest, text, size ); LocalUnlock( hloc32 ); LocalUnlock16( hloc16 ); } stack16->ds = oldDS; } static void edit_unlock_buffer( HWND hwnd ) { STACK16FRAME* stack16 = MapSL(PtrToUlong(getWOW32Reserved())); HLOCAL16 hloc16 = GetWindowWord16( HWND_16(hwnd), GWW_HANDLE16 ); HANDLE16 oldDS; HLOCAL hloc32; UINT size; if (!hloc16) return; if (!(hloc32 = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return; size = LocalSize( hloc32 ); oldDS = stack16->ds; stack16->ds = GetWindowWord16( HWND_16(hwnd), GWLP_HINSTANCE ); if (LocalReAlloc16( hloc16, size, LMEM_MOVEABLE )) { char *text = LocalLock( hloc32 ); char *dest = MapSL( LocalLock16( hloc16 )); memcpy( dest, text, size ); LocalUnlock( hloc32 ); LocalUnlock16( hloc16 ); } stack16->ds = oldDS; } static HLOCAL16 edit_get_handle( HWND hwnd ) { CHAR *textA; UINT alloc_size; HLOCAL hloc; STACK16FRAME* stack16; HANDLE16 oldDS; HLOCAL16 hloc16 = GetWindowWord16( HWND_16(hwnd), GWW_HANDLE16 ); if (hloc16) { edit_unlock_buffer(hwnd); return hloc16; } if (!(hloc = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return 0; alloc_size = LocalSize( hloc ); stack16 = MapSL(PtrToUlong(getWOW32Reserved())); oldDS = stack16->ds; stack16->ds = GetWindowWord16( HWND_16(hwnd), GWLP_HINSTANCE ); if (!LocalHeapSize16()) { if (!LocalInit16(stack16->ds, 0, GlobalSize16(stack16->ds))) { ERR("could not initialize local heap\n"); goto done; } } if (!(hloc16 = LocalAlloc16(LMEM_MOVEABLE | LMEM_ZEROINIT, alloc_size))) { ERR("could not allocate new 16 bit buffer\n"); goto done; } if (!(textA = MapSL(LocalLock16( hloc16)))) { ERR("could not lock new 16 bit buffer\n"); LocalFree16(hloc16); hloc16 = 0; goto done; } memcpy( textA, LocalLock( hloc ), alloc_size ); LocalUnlock( hloc ); LocalUnlock16( hloc16 ); SetWindowWord16( HWND_16(hwnd), GWW_HANDLE16, hloc16 ); done: stack16->ds = oldDS; return hloc16; } static void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 ) { STACK16FRAME* stack16 = MapSL(PtrToUlong(getWOW32Reserved())); HINSTANCE16 hInstance = GetWindowWord16(HWND_16(hwnd), GWLP_HINSTANCE ); HANDLE16 oldDS = stack16->ds; HLOCAL hloc32; INT count; CHAR *text; if (!(GetWindowLongW( hwnd, GWL_STYLE ) & ES_MULTILINE)) return; if (!hloc16) return; stack16->ds = hInstance; count = LocalSize16(hloc16); text = MapSL(LocalLock16(hloc16)); if ((hloc32 = LocalAlloc(LMEM_MOVEABLE, count))) { memcpy( LocalLock(hloc32), text, count ); LocalUnlock(hloc32); LocalUnlock16(hloc16); SetWindowWord16( HWND_16(hwnd), GWW_HANDLE16, hloc16 ); } stack16->ds = oldDS; if (hloc32) wow_handlers32.edit_proc( hwnd, EM_SETHANDLE, (WPARAM)hloc32, 0, FALSE ); } static void edit_destroy_handle( HWND hwnd ) { HLOCAL16 hloc16 = GetWindowWord16( HWND_16(hwnd), GWW_HANDLE16 ); if (hloc16) { STACK16FRAME* stack16 = MapSL(PtrToUlong(getWOW32Reserved())); HANDLE16 oldDS = stack16->ds; stack16->ds = GetWindowWord16( HWND_16(hwnd), GWLP_HINSTANCE ); while (LocalUnlock16(hloc16)) ; LocalFree16(hloc16); stack16->ds = oldDS; SetWindowWord16( HWND_16(hwnd), GWW_HANDLE16, 0 ); } } static LRESULT edit_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f) { static const UINT msg16_offset = EM_GETSEL16 - EM_GETSEL; *f = TRUE; //edit_lock_buffer( hwnd ); switch (msg) { case EM_SCROLL16: case EM_SCROLLCARET16: case EM_GETMODIFY16: case EM_SETMODIFY16: case EM_GETLINECOUNT16: case EM_GETTHUMB16: case EM_LINELENGTH16: case EM_LIMITTEXT16: case EM_CANUNDO16: case EM_UNDO16: case EM_FMTLINES16: case EM_LINEFROMCHAR16: case EM_SETPASSWORDCHAR16: case EM_EMPTYUNDOBUFFER16: case EM_SETREADONLY16: case EM_GETPASSWORDCHAR16: /* these messages missing from specs */ case WM_USER + 15: case WM_USER + 16: case WM_USER + 19: case WM_USER + 26: return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg); case EM_GETSEL16: return callback(hwnd, msg - msg16_offset, 0, 0, result, arg); case EM_REPLACESEL16: case EM_GETLINE16: return callback(hwnd, msg - msg16_offset, wParam, (LPARAM)MapSL(lParam), result, arg); case EM_LINESCROLL16: return callback(hwnd, msg - msg16_offset, (INT)(SHORT)HIWORD(lParam), (INT)(SHORT)LOWORD(lParam), result, arg); break; case EM_LINEINDEX16: if ((INT16)wParam == -1) wParam = -1; return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg); case EM_SETSEL16: if ((short)LOWORD(lParam) == -1) { wParam = -1; lParam = 0; } else { wParam = LOWORD(lParam); lParam = HIWORD(lParam); } return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg); case EM_GETRECT16: if (lParam) { RECT rect; RECT16 *r16 = MapSL(lParam); if (SELECTOROF(r16) == 0x0000) { ERR("EM_GETRECT16:Invalid pointer(%02X:%02X)\n", SELECTOROF(lParam), OFFSETOF(lParam)); return 0; } LRESULT a = callback(hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, result, arg); r16->left = rect.left; r16->top = rect.top; r16->right = rect.right; r16->bottom = rect.bottom; return a; } break; case EM_SETRECT16: case EM_SETRECTNP16: if (lParam) { RECT rect; RECT16 *r16 = MapSL(lParam); rect.left = r16->left; rect.top = r16->top; rect.right = r16->right; rect.bottom = r16->bottom; return callback(hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, result, arg); } break; case EM_SETHANDLE16: edit_set_handle(hwnd, (HLOCAL16)wParam); *result = FALSE; return *result; case EM_GETHANDLE16: *result = edit_get_handle(hwnd); return *result; case EM_SETTABSTOPS16: { INT16 *tabs16 = MapSL(lParam); INT i, count = wParam, *tabs = NULL; if (count > 0) { if (!(tabs = HeapAlloc(GetProcessHeap(), 0, count * sizeof(*tabs)))) return 0; for (i = 0; i < count; i++) tabs[i] = tabs16[i]; } LRESULT r = callback(hwnd, msg - msg16_offset, wParam, (LPARAM)tabs, result, arg); HeapFree(GetProcessHeap(), 0, tabs); return r; } case EM_GETFIRSTVISIBLELINE16: if (!(GetWindowLongW(hwnd, GWL_STYLE) & ES_MULTILINE)) break; return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg); case EM_SETWORDBREAKPROC16: { struct word_break_thunk *thunk = add_word_break_thunk((EDITWORDBREAKPROC16)lParam); return callback(hwnd, EM_SETWORDBREAKPROC, wParam, (LPARAM)thunk, result, arg); } case EM_GETWORDBREAKPROC16: callback(hwnd, msg, wParam, lParam, result, arg); *result = (LRESULT)get_word_break_thunk((EDITWORDBREAKPROCA)*result); return *result; case WM_NCDESTROY: edit_destroy_handle(hwnd); return callback(hwnd, msg, wParam, lParam, result, arg);/* no unlock on destroy */ case WM_HSCROLL: case WM_VSCROLL: if (LOWORD(wParam) == SB_THUMBTRACK || LOWORD(wParam) == SB_THUMBPOSITION) return callback(hwnd, msg, MAKELONG(LOWORD(wParam), LOWORD(lParam)), NULL, result, arg); if (LOWORD(wParam) == EM_GETTHUMB16 || LOWORD(wParam) == EM_LINESCROLL16) wParam -= msg16_offset; return callback(hwnd, msg, wParam, lParam, result, arg); } //edit_unlock_buffer( hwnd ); *f = FALSE; return *result; } /********************************************************************* * edit_proc16 */ static LRESULT edit_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { static const UINT msg16_offset = EM_GETSEL16 - EM_GETSEL; LRESULT result = 0; //edit_lock_buffer( hwnd ); switch (msg) { case EM_SCROLL16: case EM_SCROLLCARET16: case EM_GETMODIFY16: case EM_SETMODIFY16: case EM_GETLINECOUNT16: case EM_GETTHUMB16: case EM_LINELENGTH16: case EM_LIMITTEXT16: case EM_CANUNDO16: case EM_UNDO16: case EM_FMTLINES16: case EM_LINEFROMCHAR16: case EM_SETPASSWORDCHAR16: case EM_EMPTYUNDOBUFFER16: case EM_SETREADONLY16: case EM_GETPASSWORDCHAR16: /* these messages missing from specs */ case WM_USER+15: case WM_USER+16: case WM_USER+19: case WM_USER+26: result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE ); break; case EM_GETSEL16: result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, 0, 0, FALSE ); break; case EM_REPLACESEL16: case EM_GETLINE16: result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, (LPARAM)MapSL(lParam), FALSE ); break; case EM_LINESCROLL16: result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, (INT)(SHORT)HIWORD(lParam), (INT)(SHORT)LOWORD(lParam), FALSE ); break; case EM_LINEINDEX16: if ((INT16)wParam == -1) wParam = -1; result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE ); break; case EM_SETSEL16: if ((short)LOWORD(lParam) == -1) { wParam = -1; lParam = 0; } else { wParam = LOWORD(lParam); lParam = HIWORD(lParam); } result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE ); break; case EM_GETRECT16: if (lParam) { RECT rect; RECT16 *r16 = MapSL(lParam); if (SELECTOROF(r16) == 0x0000) { ERR("EM_GETRECT16:Invalid pointer(%02X:%02X)\n", SELECTOROF(lParam), OFFSETOF(lParam)); return 0; } wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, FALSE ); r16->left = rect.left; r16->top = rect.top; r16->right = rect.right; r16->bottom = rect.bottom; } break; case EM_SETRECT16: case EM_SETRECTNP16: if (lParam) { RECT rect; RECT16 *r16 = MapSL(lParam); rect.left = r16->left; rect.top = r16->top; rect.right = r16->right; rect.bottom = r16->bottom; wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, FALSE ); } break; case EM_SETHANDLE16: edit_set_handle( hwnd, (HLOCAL16)wParam ); break; case EM_GETHANDLE16: result = edit_get_handle( hwnd ); break; case EM_SETTABSTOPS16: { INT16 *tabs16 = MapSL(lParam); INT i, count = wParam, *tabs = NULL; if (count > 0) { if (!(tabs = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*tabs) ))) return 0; for (i = 0; i < count; i++) tabs[i] = tabs16[i]; } result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, count, (LPARAM)tabs, FALSE ); HeapFree( GetProcessHeap(), 0, tabs ); break; } case EM_GETFIRSTVISIBLELINE16: if (!(GetWindowLongW( hwnd, GWL_STYLE ) & ES_MULTILINE)) break; result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE ); break; case EM_SETWORDBREAKPROC16: { struct word_break_thunk *thunk = add_word_break_thunk( (EDITWORDBREAKPROC16)lParam ); result = wow_handlers32.edit_proc( hwnd, EM_SETWORDBREAKPROC, wParam, (LPARAM)thunk, FALSE ); break; } case EM_GETWORDBREAKPROC16: result = wow_handlers32.edit_proc( hwnd, EM_GETWORDBREAKPROC, wParam, lParam, FALSE ); result = (LRESULT)get_word_break_thunk( (EDITWORDBREAKPROCA)result ); break; case WM_NCDESTROY: edit_destroy_handle( hwnd ); return wow_handlers32.edit_proc( hwnd, msg, wParam, lParam, unicode ); /* no unlock on destroy */ case WM_HSCROLL: case WM_VSCROLL: if (LOWORD(wParam) == EM_GETTHUMB16 || LOWORD(wParam) == EM_LINESCROLL16) wParam -= msg16_offset; result = wow_handlers32.edit_proc( hwnd, msg, wParam, lParam, unicode ); break; default: result = wow_handlers32.edit_proc( hwnd, msg, wParam, lParam, unicode ); break; } //edit_unlock_buffer( hwnd ); return result; } /*********************************************************************** * listbox_proc16 */ static LRESULT listbox_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { static const UINT msg16_offset = LB_ADDSTRING16 - LB_ADDSTRING; LRESULT ret; switch (msg) { case WM_SIZE: if (is_old_app( hwnd )) { DWORD style = GetWindowLongW( hwnd, GWL_STYLE ); int height, remaining, item_height; RECT rect; /* give a margin for error to old 16 bits programs - if we need less than the height of the nonclient area, round to the *next* number of items */ if (!(style & LBS_NOINTEGRALHEIGHT) && !(style & LBS_OWNERDRAWVARIABLE)) { GetClientRect( hwnd, &rect ); height = rect.bottom - rect.top; item_height = wow_handlers32.listbox_proc( hwnd, LB_GETITEMHEIGHT, 0, 0, FALSE ); remaining = item_height ? (height % item_height) : 0; if ((height > item_height) && remaining) { GetWindowRect( hwnd, &rect ); if ((item_height - remaining) <= rect.bottom - rect.top - height) remaining = remaining - item_height; TRACE( "[%p]: changing height %d -> %d\n", hwnd, height, height - remaining ); SetWindowPos( hwnd, 0, 0, 0, rect.right - rect.left, rect.bottom - rect.top - remaining, SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE ); return 0; } } } return wow_handlers32.listbox_proc( hwnd, msg, wParam, lParam, unicode ); case LB_RESETCONTENT16: case LB_DELETESTRING16: case LB_GETITEMDATA16: case LB_SETITEMDATA16: case LB_GETCOUNT16: case LB_GETTEXTLEN16: case LB_GETCURSEL16: case LB_GETTOPINDEX16: case LB_GETITEMHEIGHT16: case LB_SETCARETINDEX16: case LB_GETCARETINDEX16: case LB_SETTOPINDEX16: case LB_SETCOLUMNWIDTH16: case LB_GETSELCOUNT16: case LB_SELITEMRANGE16: case LB_SELITEMRANGEEX16: case LB_GETHORIZONTALEXTENT16: case LB_SETHORIZONTALEXTENT16: case LB_GETANCHORINDEX16: case LB_CARETON16: case LB_CARETOFF16: msg -= msg16_offset; break; case LB_GETSEL16: case LB_SETSEL16: case LB_SETCURSEL16: case LB_SETANCHORINDEX16: wParam = (INT)(INT16)wParam; msg -= msg16_offset; break; case LB_INSERTSTRING16: case LB_FINDSTRING16: case LB_FINDSTRINGEXACT16: case LB_SELECTSTRING16: wParam = (INT)(INT16)wParam; /* fall through */ case LB_ADDSTRING16: case LB_ADDFILE16: { DWORD style = GetWindowLongW( hwnd, GWL_STYLE ); if ((style & LBS_HASSTRINGS) || !(style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE))) lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; } case LB_GETTEXT16: lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; case LB_SETITEMHEIGHT16: lParam = LOWORD(lParam); msg -= msg16_offset; break; case LB_GETITEMRECT16: { RECT rect; RECT16 *r16 = MapSL(lParam); ret = wow_handlers32.listbox_proc( hwnd, LB_GETITEMRECT, (INT16)wParam, (LPARAM)&rect, FALSE ); r16->left = rect.left; r16->top = rect.top; r16->right = rect.right; r16->bottom = rect.bottom; return ret; } case LB_GETSELITEMS16: { INT16 *array16 = MapSL( lParam ); INT i, count = (INT16)wParam, *array; if (!(array = HeapAlloc( GetProcessHeap(), 0, wParam * sizeof(*array) ))) return LB_ERRSPACE; ret = wow_handlers32.listbox_proc( hwnd, LB_GETSELITEMS, count, (LPARAM)array, FALSE ); for (i = 0; i < ret; i++) array16[i] = array[i]; HeapFree( GetProcessHeap(), 0, array ); return ret; } case LB_DIR16: /* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE * be set automatically (this is different in Win32) */ if (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE; lParam = (LPARAM)MapSL(lParam); msg -= msg16_offset; break; case LB_SETTABSTOPS16: { INT i, count, *tabs = NULL; INT16 *tabs16 = MapSL( lParam ); if ((count = (INT16)wParam) > 0) { if (!(tabs = HeapAlloc( GetProcessHeap(), 0, wParam * sizeof(*tabs) ))) return LB_ERRSPACE; for (i = 0; i < count; i++) tabs[i] = tabs16[i]; } ret = wow_handlers32.listbox_proc( hwnd, LB_SETTABSTOPS, count, (LPARAM)tabs, FALSE ); HeapFree( GetProcessHeap(), 0, tabs ); return ret; } default: return wow_handlers32.listbox_proc( hwnd, msg, wParam, lParam, unicode ); } return wow_handlers32.listbox_proc( hwnd, msg, wParam, lParam, FALSE ); } /*********************************************************************** * mdiclient_proc16 */ static LRESULT mdiclient_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { if (msg == WM_CREATE) { LPCREATESTRUCTA cs = (LPCREATESTRUCTA)lParam; HINSTANCE instance = (HINSTANCE)GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); BOOL is_win32 = !instance || ((ULONG_PTR)instance >> 16); /* Translation layer doesn't know what's in the cs->lpCreateParams * so we have to keep track of what environment we're in. */ if (!is_win32) { void *orig = cs->lpCreateParams; LRESULT ret; CLIENTCREATESTRUCT ccs; CLIENTCREATESTRUCT16 *ccs16 = MapSL( PtrToUlong( orig )); ccs.hWindowMenu = HMENU_32(ccs16->hWindowMenu); ccs.idFirstChild = ccs16->idFirstChild; cs->lpCreateParams = &ccs; ret = wow_handlers32.mdiclient_proc( hwnd, msg, wParam, lParam, unicode ); cs->lpCreateParams = orig; return ret; } } return wow_handlers32.mdiclient_proc( hwnd, msg, wParam, lParam, unicode ); } static LRESULT scrollbar_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f) { static const UINT msg16_offset = SBM_SETPOS16 - SBM_SETPOS; *f = TRUE; switch (msg) { case SBM_SETPOS16: case SBM_GETPOS16: case SBM_ENABLE_ARROWS16: msg -= msg16_offset; return callback(hwnd, msg, wParam, lParam, result, arg); case SBM_SETRANGE16: msg = wParam ? SBM_SETRANGEREDRAW : SBM_SETRANGE; wParam = LOWORD(lParam); lParam = HIWORD(lParam); return callback(hwnd, msg, wParam, lParam, result, arg); case SBM_GETRANGE16: { INT min, max; callback(hwnd, SBM_GETRANGE, (WPARAM)&min, (LPARAM)&max, result, arg); return *result = MAKELRESULT(min, max); } } return *f = FALSE; } /*********************************************************************** * scrollbar_proc16 */ static LRESULT scrollbar_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { static const UINT msg16_offset = SBM_SETPOS16 - SBM_SETPOS; switch (msg) { case SBM_SETPOS16: case SBM_GETPOS16: case SBM_ENABLE_ARROWS16: msg -= msg16_offset; break; case SBM_SETRANGE16: msg = wParam ? SBM_SETRANGEREDRAW : SBM_SETRANGE; wParam = LOWORD(lParam); lParam = HIWORD(lParam); break; case SBM_GETRANGE16: { INT min, max; wow_handlers32.scrollbar_proc( hwnd, SBM_GETRANGE, (WPARAM)&min, (LPARAM)&max, FALSE ); return MAKELRESULT(min, max); } default: return wow_handlers32.scrollbar_proc( hwnd, msg, wParam, lParam, unicode ); } return wow_handlers32.scrollbar_proc( hwnd, msg, wParam, lParam, FALSE ); } static LRESULT static_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode , LRESULT *result, void *arg, BOOL *f) { LRESULT ret; switch (msg) { case STM_SETICON16: wParam = (WPARAM)get_icon_32((HICON16)wParam); *f = TRUE; ret = callback(hwnd, STM_SETICON, wParam, lParam, result, arg); return ret; case STM_GETICON16: ret = callback(hwnd, STM_GETICON, wParam, lParam, result, arg); *result = get_icon_16((HICON)*result); *f = TRUE; return ret; default: break; } return *f = FALSE; } /*********************************************************************** * static_proc16 */ static LRESULT static_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { switch (msg) { case WM_CREATE://WM_NCCREATE: { CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam; if (((ULONG_PTR)cs->hInstance >> 16)) break; /* 32-bit instance, nothing to do */ switch (cs->style & SS_TYPEMASK) { case SS_ICON: { LRESULT ret = wow_handlers32.static_proc(hwnd, msg, wParam, lParam, unicode); SetWindowTextA(hwnd, ""); HICON16 icon = LoadIcon16( HINSTANCE_16(cs->hInstance), cs->lpszName ); if (!icon) icon = LoadCursor16( HINSTANCE_16(cs->hInstance), cs->lpszName ); if (icon) wow_handlers32.static_proc( hwnd, STM_SETIMAGE, IMAGE_ICON, (LPARAM)get_icon_32(icon), FALSE ); return ret; } case SS_BITMAP: { LRESULT ret = wow_handlers32.static_proc(hwnd, msg, wParam, lParam, unicode); SetWindowTextA(hwnd, ""); HBITMAP16 bitmap = LoadBitmap16( HINSTANCE_16(cs->hInstance), cs->lpszName ); if (bitmap) wow_handlers32.static_proc( hwnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)HBITMAP_32(bitmap), FALSE ); return ret; } } break; } case STM_SETICON16: wParam = (WPARAM)get_icon_32( (HICON16)wParam ); return wow_handlers32.static_proc( hwnd, STM_SETICON, wParam, lParam, FALSE ); case STM_GETICON16: return get_icon_16( (HICON)wow_handlers32.static_proc( hwnd, STM_GETICON, wParam, lParam, FALSE )); default: break; } return wow_handlers32.static_proc(hwnd, msg, wParam, lParam, unicode); } LRESULT CALLBACK static_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { return static_proc16(hwnd, msg, wParam, lParam, FALSE); } LRESULT CALLBACK listbox_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { return listbox_proc16(hwnd, msg, wParam, lParam, FALSE); } LRESULT CALLBACK button_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { return button_proc16(hwnd, msg, wParam, lParam, FALSE); } LRESULT CALLBACK edit_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { return edit_proc16(hwnd, msg, wParam, lParam, FALSE); } BOOL aero_diasble; enum SEPARATE_TASKBAR { SEPARATE_TASKBAR_DONT_SEPARATE = 0, SEPARATE_TASKBAR_SEPARATE_FOR_EACH_WOW = 1, SEPARATE_TASKBAR_SEPARATE = 2, }; enum SEPARATE_TASKBAR separate_taskbar; /* set taskbar id */ #include #include #include void set_app_id(HWND hWnd, LPCWSTR name) { DWORD count; IPropertyStore *propstore; HRESULT hr; static HMODULE shell32; static HRESULT (STDAPICALLTYPE*pSHGetPropertyStoreForWindow)(HWND hwnd, REFIID riid, void** ppv); if (!shell32) { shell32 = GetModuleHandleA("shell32"); pSHGetPropertyStoreForWindow = (HRESULT (STDAPICALLTYPE*)(HWND hwnd, REFIID riid, void** ppv))GetProcAddress(shell32, "SHGetPropertyStoreForWindow"); } if (!pSHGetPropertyStoreForWindow) return; ReleaseThunkLock(&count); hr = pSHGetPropertyStoreForWindow(hWnd, &IID_IPropertyStore, &propstore); if (SUCCEEDED(hr)) { PROPVARIANT pv; SIZE_T len = (wcslen(name) + 1) * sizeof(*name); LPWSTR id2 = CoTaskMemAlloc(len); if (id2) { memcpy(id2, name, len); V_UNION(&pv, pwszVal) = id2; V_VT(&pv) = VT_LPWSTR; hr = propstore->lpVtbl->SetValue(propstore, &PKEY_AppUserModel_ID, &pv); PropVariantClear(&pv); } propstore->lpVtbl->Release(propstore); } RestoreThunkLock(count); } void set_window_app_id(HWND hwnd) { /* OTVDM.{PID}.{module path} */ WCHAR buffer[1024]; CHAR a[MAX_PATH]; INT16 len = GetModuleFileName16(GetCurrentTask(), a, MAX_PATH); /* tiny canonicalize */ for (int i = 0; i < len; i++) { a[i] = (char)toupper(a[i]); } if (separate_taskbar == SEPARATE_TASKBAR_SEPARATE_FOR_EACH_WOW) { wsprintfW(buffer, L"OTVDM.%d.%S", GetCurrentProcessId(), a); } else { wsprintfW(buffer, L"OTVDM.%S", a); } set_app_id(hwnd, buffer); } void detect_window_type(HWND16 hwnd, HWND hwnd32) { char name[100]; RealGetWindowClassA(hwnd32, name, 100); /* detect window type */ if (isListBox(hwnd, hwnd32) || !stricmp(name, "LISTBOX") || !stricmp(name, "COMBOLBOX")) { window_type_table[hwnd] = (BYTE)WINDOW_TYPE_LISTBOX; } if (isComboBox(hwnd, hwnd32) || !stricmp(name, "COMBOBOX")) { window_type_table[hwnd] = (BYTE)WINDOW_TYPE_COMBOBOX; } if (isButton(hwnd, hwnd32) || !stricmp(name, "BUTTON")) { window_type_table[hwnd] = (BYTE)WINDOW_TYPE_BUTTON; } if (isEdit(hwnd, hwnd32) || !stricmp(name, "EDIT")) { window_type_table[hwnd] = (BYTE)WINDOW_TYPE_EDIT; } if (isScrollBar(hwnd, hwnd32) || !stricmp(name, "SCROLLBAR")) { window_type_table[hwnd] = (BYTE)WINDOW_TYPE_SCROLLBAR; } if (isStatic(hwnd, hwnd32) || !stricmp(name, "STATIC")) { window_type_table[hwnd] = (BYTE)WINDOW_TYPE_STATIC; } if (is_mdiclient(hwnd, hwnd32) || !stricmp(name, "MDICLIENT")) { window_type_table[hwnd] = (BYTE)WINDOW_TYPE_MDICLIENT; } } DWORD hhook_tls_index; typedef struct { HHOOK wndproc; HHOOK wndprocret; HHOOK cbt; } user_hook_data; static void UB_Message(HWND hwnd, HDC hDC, UINT action) { RECT rc; HBRUSH hBrush; HFONT hFont; HWND parent; GetClientRect(hwnd, &rc); if ((hFont = SendMessageW(hwnd, WM_GETFONT, 0, 0))) SelectObject(hDC, hFont); parent = GetParent(hwnd); if (!parent) parent = hwnd; hBrush = (HBRUSH)SendMessageW(parent, WM_CTLCOLORBTN, (WPARAM)hDC, (LPARAM)hwnd); if (!hBrush) /* did the app forget to call defwindowproc ? */ hBrush = (HBRUSH)DefWindowProcW(parent, WM_CTLCOLORBTN, (WPARAM)hDC, (LPARAM)hwnd); FillRect(hDC, &rc, hBrush); if (action == BN_SETFOCUS) DrawFocusRect(hDC, &rc); SendMessageW(parent, WM_COMMAND, MAKEWPARAM(GetWindowLongW(hwnd, GWLP_ID), action), hwnd); } static LRESULT UB_DefWndProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) { LRESULT ret = 0; WNDPROC origwndproc = (WNDPROC)GetPropA(hwnd, "origwndproc"); if (origwndproc) ret = origwndproc(hwnd, umsg, wparam, lparam); else ret = DefWindowProcW(hwnd, umsg, wparam, lparam); return ret; } static LRESULT UB_WndProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) { LRESULT ret = 0; switch (umsg) { case WM_PAINT: { PAINTSTRUCT paint; LONG style = GetWindowLongW(hwnd, GWL_STYLE); LONG state = SendMessageW(hwnd, BM_GETSTATE, 0, 0); HDC hDC = BeginPaint(hwnd, &paint); UB_Message(hwnd, hDC, BN_PAINT); if (state & BST_PUSHED) UB_Message(hwnd, hDC, BN_PUSHED); if (style & WS_DISABLED) UB_Message(hwnd, hDC, BN_DISABLE); EndPaint(hwnd, &paint); break; } /* case WM_SETFOCUS: { HDC hdc = GetDC(hwnd); UB_Message(hwnd, hdc, BN_SETFOCUS); ReleaseDC(hwnd, hdc); break; } case WM_KILLFOCUS: { HDC hdc = GetDC(hwnd); UB_Message(hwnd, hdc, BN_KILLFOCUS); ReleaseDC(hwnd, hdc); break; }*/ case BM_SETSTATE: { HDC hdc = GetDC(hwnd); ret = UB_DefWndProc(hwnd, BM_SETSTATE, wparam, lparam); UB_Message(hwnd, hdc, wparam ? BN_PUSHED : BN_UNPUSHED); break; } case WM_LBUTTONDBLCLK: SendMessageW(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetWindowLongW(hwnd, GWLP_ID), BN_DOUBLECLICKED), hwnd); break; default: ret = UB_DefWndProc(hwnd, umsg, wparam, lparam); break; } return ret; } LRESULT CALLBACK CBTHook(int nCode, WPARAM wParam, LPARAM lParam) { user_hook_data *hd = (user_hook_data*)TlsGetValue(hhook_tls_index); HHOOK hook = hd ? hd->cbt : NULL; if (nCode < 0) { return CallNextHookEx(hook, nCode, wParam, lParam); } if (nCode == HCBT_CREATEWND) { HWND hWnd = (HWND)wParam; LPCBT_CREATEWNDA create = (LPCBT_CREATEWNDA)lParam; if (aero_diasble) { SetThemeAppProperties(0); SetWindowTheme(hWnd, L"", L""); } // olesvr doesn't like window properties not set by itself on its windows if (separate_taskbar && GetModuleHandle("olesvr32") && (create->lpcs->hInstance != GetModuleHandle("olesvr32"))) { set_window_app_id(hWnd); } detect_window_type(HWND_16(hWnd), hWnd); if (create->lpcs->lpszName && !strcmp(create->lpcs->lpszName, "Default IME")) { SetWindowLongA(hWnd, GWL_HINSTANCE, 0); } if ((window_type_table[HWND_16(hWnd)] == (BYTE)WINDOW_TYPE_BUTTON) && ((create->lpcs->style & BS_TYPEMASK) == BS_USERBUTTON)) { WNDPROC origwndproc = SetWindowLongW(hWnd, GWL_WNDPROC, UB_WndProc); SetPropA(hWnd, "origwndproc", (HANDLE)origwndproc); } // 24H2 will make integral height listboxes the wrong size // TODO: correct the height if ((get_windows_build() >= 26100) && (window_type_table[HWND_16(hWnd)] == (BYTE)WINDOW_TYPE_LISTBOX) && (create->lpcs->style & LBS_OWNERDRAWFIXED)) { create->lpcs->style |= LBS_NOINTEGRALHEIGHT; SetWindowLongA(hWnd, GWL_STYLE, create->lpcs->style); } } else if((nCode == HCBT_MINMAX) && (lParam == SW_MAXIMIZE) && (GetWindowLongA(wParam, GWL_STYLE) & WS_MAXIMIZE)) SetPropA(wParam, "WindowMaximized", 1); return FALSE; } LRESULT CALLBACK WndProcRetHook(int code, WPARAM wParam, LPARAM lParam) { user_hook_data *hd = (user_hook_data*)TlsGetValue(hhook_tls_index); HHOOK hook = hd ? hd->wndprocret : NULL; if (code < 0) return CallNextHookEx(hook, code, wParam, lParam); if (code == HC_ACTION) { CWPRETSTRUCT *pcwp = (CWPRETSTRUCT *)lParam; HWND hwnd = pcwp->hwnd; if (!IsWindow(hwnd)) { return CallNextHookEx(hook, code, wParam, lParam); } HWND16 hwnd16 = HWND_16(hwnd); detect_window_type(hwnd16, hwnd); if (window_type_table[hwnd16] == WINDOW_TYPE_STATIC) { if (pcwp->message == WM_CREATE) { do { LPARAM lParam = pcwp->lParam; WPARAM wParam = pcwp->wParam; UINT msg = pcwp->message; HWND hwnd = pcwp->hwnd; CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam; if (!cs) break; if (((ULONG_PTR)cs->hInstance >> 16)) break; /* 32-bit instance, nothing to do */ switch (cs->style & SS_TYPEMASK) { case SS_ICON: { SetWindowTextA(hwnd, ""); HICON16 icon = LoadIcon16(HINSTANCE_16(cs->hInstance), cs->lpszName); if (!icon) icon = LoadCursor16(HINSTANCE_16(cs->hInstance), cs->lpszName); if (icon) wow_handlers32.static_proc(hwnd, STM_SETIMAGE, IMAGE_ICON, (LPARAM)get_icon_32(icon), FALSE); break; } case SS_BITMAP: { SetWindowTextA(hwnd, ""); HBITMAP16 bitmap = LoadBitmap16(HINSTANCE_16(cs->hInstance), cs->lpszName); if (bitmap) wow_handlers32.static_proc(hwnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)HBITMAP_32(bitmap), FALSE); break; } } } while (0); } } if ((pcwp->message == WM_CREATE) && IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE)) { char class[6]; if (GetClassNameA(pcwp->hwnd, class, ARRAY_SIZE(class)) && !strcmp(class, "Edit") && !SendMessageA(pcwp->hwnd, WM_GETFONT, 0, 0)) SendMessageA(pcwp->hwnd, WM_SETFONT, GetStockObject(SYSTEM_FIXED_FONT), FALSE); } } return CallNextHookEx(hook, code, wParam, lParam); } LRESULT CALLBACK WndProcHook(int code, WPARAM wParam, LPARAM lParam) { user_hook_data *hd = (user_hook_data*)TlsGetValue(hhook_tls_index); HHOOK hook = hd ? hd->wndproc : NULL; if (code < 0) return CallNextHookEx(hook, code, wParam, lParam); if (code == HC_ACTION) { if (wParam == 0) { CWPSTRUCT *pcwp = (CWPSTRUCT *)lParam; //I don't know. if (pcwp->message == WM_SHOWWINDOW) { //see 42353ecbadd096358f250a9dd931d4cf0981b417 reactos win32ss/user/ntuser/winpos.c:2551 //WM_SETVISIBLE is only valid for win30 and older if (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x30a) SendMessageA(pcwp->hwnd, WM_SETVISIBLE, pcwp->wParam, 0); if (aero_diasble) SetWindowTheme(pcwp->hwnd, L"", L""); } } } return CallNextHookEx(hook, code, wParam, lParam); } LRESULT wow_static_proc_wrapper(HWND a, UINT b, WPARAM c, LPARAM d, BOOL e) { static WNDPROC proc = NULL; if (!proc) { proc = get_classinfo_wndproc("STATIC"); } return CallWindowProcA(proc, a, b, c, d); } LRESULT wow_listbox_proc_wrapper(HWND a, UINT b, WPARAM c, LPARAM d, BOOL e) { static WNDPROC proc = NULL; if (!proc) { proc = get_classinfo_wndproc("LISTBOX"); } return CallWindowProcA(proc, a, b, c, d); } LRESULT wow_button_proc_wrapper(HWND a, UINT b, WPARAM c, LPARAM d, BOOL e) { static WNDPROC proc = NULL; if (!proc) { proc = get_classinfo_wndproc("BUTTON"); } return CallWindowProcA(proc, a, b, c, d); } LRESULT wow_edit_proc_wrapper(HWND a, UINT b, WPARAM c, LPARAM d, BOOL e) { static WNDPROC proc = NULL; if (!proc) { proc = get_classinfo_wndproc("EDIT"); } return CallWindowProcA(proc, a, b, c, d); } void InitNewThreadHook() { if (TlsGetValue(hhook_tls_index)) return; user_hook_data *hd = (user_hook_data*)HeapAlloc(GetProcessHeap(), 0, sizeof(user_hook_data)); TlsSetValue(hhook_tls_index, hd); hd->wndproc = SetWindowsHookExA(WH_CALLWNDPROC, WndProcHook, GetModuleHandle(NULL), GetCurrentThreadId()); hd->wndprocret = SetWindowsHookExA(WH_CALLWNDPROCRET, WndProcRetHook, GetModuleHandle(NULL), GetCurrentThreadId()); hd->cbt = SetWindowsHookExA(WH_CBT, CBTHook, GetModuleHandle(NULL), GetCurrentThreadId()); } void InitHook() { isStatic(0, NULL); isListBox(0, NULL); isButton(0, NULL); isEdit(0, NULL); isComboBox(0, NULL); isScrollBar(0, NULL); is_mdiclient(0, NULL); hhook_tls_index = TlsAlloc(); InitNewThreadHook(); } void WINAPI ShellDDEInit(BOOL bInit); #include "wine/winbase16.h" BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { if (fdwReason == DLL_PROCESS_ATTACH) { load_user32_functions(); window_type_table = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 65536); aero_diasble = krnl386_get_config_int("otvdm", "DisableAero", TRUE); if (!IsThemeActive()) { aero_diasble = FALSE; } drag_list_message = RegisterWindowMessage(DRAGLISTMSGSTRING); separate_taskbar = krnl386_get_config_int("otvdm", "SeparateTaskbar", SEPARATE_TASKBAR_SEPARATE); ShellDDEInit(TRUE); dialogmsgthunk = GlobalAddAtomA("dialogmsgthunk"); } if (fdwReason == DLL_PROCESS_DETACH) { ShellDDEInit(FALSE); GlobalDeleteAtom(dialogmsgthunk); } return TRUE; } BOOL16 WINAPI WaitMessage16() { DWORD lock; ReleaseThunkLock(&lock); SetEvent(kernel_get_thread_data()->idle_event); BOOL ret = WaitMessage(); RestoreThunkLock(lock); return ret; } /*********************************************************************** * wait_message16 */ static DWORD wait_message16( DWORD count, const HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags ) { DWORD lock, ret; ReleaseThunkLock( &lock ); ret = wow_handlers32.wait_message( count, handles, timeout, mask, flags ); RestoreThunkLock( lock ); return ret; } /*********************************************************************** * create_window16 */ HWND create_window16( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE instance, BOOL unicode ) { /* map to module handle */ /*if (instance && !((ULONG_PTR)instance >> 16)) instance = HINSTANCE_32( GetExePtr( HINSTANCE_16(instance) ));*/ return wow_handlers32.create_window( cs, className, instance, unicode ); } /*********************************************************************** * free_icon_param */ static void free_icon_param( ULONG_PTR param ) { GlobalFree16( LOWORD(param) ); } typedef struct tagHWND16Data { HWND hwnd; struct tagHWND16Data *next; struct tagHWND16Data *prev; } HWND16Data; HWND get_win_handle(HWND hWnd16) { return HWND_32((HWND16)hWnd16); } HWND create_window(CREATESTRUCTW* cs, LPCWSTR className, HINSTANCE instance, BOOL unicode) { CLIENTCREATESTRUCT c32; if (!strncasecmp((LPCSTR)className, "MDICLIENT", strlen((LPCSTR)className))) { CLIENTCREATESTRUCT16 *c16 = MapSL(cs->lpCreateParams); c32.idFirstChild = c16->idFirstChild; c32.hWindowMenu = HMENU_32(c16->hWindowMenu); cs->lpCreateParams = (LPVOID)&c32; } SetLastError(0); HWND 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); if (hWnd == 0) { if (GetLastError() == ERROR_INVALID_MENU_HANDLE) { cs->hMenu = HMENU_32((HMENU16)cs->hMenu); 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); } } return hWnd; } __declspec(dllimport) HICON16 K32HICON_16(HICON handle); __declspec(dllimport) HICON K32HICON_32(HICON16 handle); ULONG_PTR hIconParams[65536]; //HICON->HICON16?? ULONG_PTR get_icon_param(HICON hIcon) { return hIconParams[K32HICON_16(hIcon)]; } ULONG_PTR set_icon_param(HICON hIcon, ULONG_PTR param) { return hIconParams[K32HICON_16(hIcon)] = param; } struct tagDIALOGINFO unknown; struct tagDIALOGINFO *get_dialog_info(HWND hWnd, BOOL b) { ERR("should not be called (%p,%d)\n", hWnd, b); return &unknown; } INT dialog_box_loop(HWND hWnd, HWND owner) { ERR("should not be called (%p,%p)\n"); return 0; } /* based on wine 7637e49c448dc0431f9497d0f6ed9854814e8ced:dlls/user32/winproc.c */ typedef struct tagWINDOWPROC { WNDPROC procA; /* ASCII window proc */ WNDPROC procW; /* Unicode window proc */ } WINDOWPROC; #define MAX_WINPROCS 4096 #define MAX_WINPROC_RECURSION 64 #define WINPROC_PROC16 ((WINDOWPROC *)1) /* placeholder for 16-bit window procs */ #if 0 static LRESULT WINAPI ButtonWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI ButtonWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI ComboWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI ComboWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); LRESULT WINAPI EditWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI EditWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI ListBoxWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI ListBoxWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI MDIClientWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI MDIClientWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI ScrollBarWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI ScrollBarWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI StaticWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static LRESULT WINAPI StaticWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); static WINDOWPROC winproc_array[MAX_WINPROCS] = { { ButtonWndProcA, ButtonWndProcW }, /* WINPROC_BUTTON */ { ComboWndProcA, ComboWndProcW }, /* WINPROC_COMBO */ { DefWindowProcA, DefWindowProcW }, /* WINPROC_DEFWND */ { DefDlgProcA, DefDlgProcW }, /* WINPROC_DIALOG */ { EditWndProcA, EditWndProcW }, /* WINPROC_EDIT */ { ListBoxWndProcA, ListBoxWndProcW }, /* WINPROC_LISTBOX */ { MDIClientWndProcA, MDIClientWndProcW }, /* WINPROC_MDICLIENT */ { ScrollBarWndProcA, ScrollBarWndProcW }, /* WINPROC_SCROLLBAR */ { StaticWndProcA, StaticWndProcW }, /* WINPROC_STATIC */ { ImeWndProcA, ImeWndProcW }, /* WINPROC_IME */ { NULL, DesktopWndProc }, /* WINPROC_DESKTOP */ { NULL, IconTitleWndProc }, /* WINPROC_ICONTITLE */ { NULL, PopupMenuWndProc }, /* WINPROC_MENU */ { NULL, MessageWndProc }, /* WINPROC_MESSAGE */ }; #else #define NB_BUILTIN_AW_WINPROCS 0 #define NB_BUILTIN_WINPROCS 0 static WINDOWPROC winproc_array[MAX_WINPROCS]; #endif static UINT winproc_used = NB_BUILTIN_WINPROCS; static CRITICAL_SECTION winproc_cs; static CRITICAL_SECTION_DEBUG critsect_debug = { 0, 0, &winproc_cs, { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, 0, 0, { (DWORD_PTR)(__FILE__ ": winproc_cs") } }; static CRITICAL_SECTION winproc_cs = { &critsect_debug, -1, 0, 0, 0, 0 }; /* find an existing winproc for a given function and type */ /* FIXME: probably should do something more clever than a linear search */ static inline WINDOWPROC *find_winproc( WNDPROC func, BOOL unicode ) { unsigned int i; for (i = 0; i < NB_BUILTIN_AW_WINPROCS; i++) { /* match either proc, some apps confuse A and W */ if (winproc_array[i].procA != func && winproc_array[i].procW != func) continue; return &winproc_array[i]; } for (i = NB_BUILTIN_AW_WINPROCS; i < winproc_used; i++) { if (!unicode && winproc_array[i].procA != func) continue; if (unicode && winproc_array[i].procW != func) continue; return &winproc_array[i]; } return NULL; } /* return the window proc for a given handle, or NULL for an invalid handle, * or WINPROC_PROC16 for a handle to a 16-bit proc. */ static inline WINDOWPROC *handle_to_proc( WNDPROC handle ) { UINT index = LOWORD(handle); if ((ULONG_PTR)handle >> 16 != WINPROC_HANDLE) return NULL; if (index >= MAX_WINPROCS) return WINPROC_PROC16; if (index >= winproc_used) return NULL; return &winproc_array[index]; } /* create a handle for a given window proc */ static inline WNDPROC proc_to_handle( WINDOWPROC *proc ) { return (WNDPROC)(ULONG_PTR)((proc - winproc_array) | (WINPROC_HANDLE << 16)); } /* allocate and initialize a new winproc */ static inline WINDOWPROC *alloc_winproc( WNDPROC func, BOOL unicode ) { WINDOWPROC *proc; /* check if the function is already a win proc */ if (!func) return NULL; if ((proc = handle_to_proc( func ))) return proc; EnterCriticalSection( &winproc_cs ); /* check if we already have a winproc for that function */ if (!(proc = find_winproc( func, unicode ))) { if (winproc_used < MAX_WINPROCS) { proc = &winproc_array[winproc_used++]; if (unicode) proc->procW = func; else proc->procA = func; TRACE( "allocated %p for %c %p (%d/%d used)\n", proc_to_handle(proc), unicode ? 'W' : 'A', func, winproc_used, MAX_WINPROCS ); } else WARN( "too many winprocs, cannot allocate one for %p\n", func ); } else TRACE( "reusing %p for %p\n", proc_to_handle(proc), func ); LeaveCriticalSection( &winproc_cs ); return proc; } WNDPROC WINPROC_AllocProc( WNDPROC func, BOOL unicode ) { WINDOWPROC *proc; if (!(proc = alloc_winproc( func, unicode ))) return func; if (proc == WINPROC_PROC16) return func; return proc_to_handle( proc ); } /* end */ void register_wow_handlers(void) { static const struct wow_handlers16 handlers16 = { button_proc16, combo_proc16, edit_proc16, listbox_proc16, mdiclient_proc16, scrollbar_proc16, static_proc16, wait_message16, create_window16, call_window_proc_Ato16, call_dialog_proc_Ato16, free_icon_param }; struct wow_handlers32 wow_handlers322 = { 0 }; /* UserRegisterWowHandlers( &handlers16, &wow_handlers322 ); */ wow_handlers32 = wow_handlers322; wow_handlers32.get_win_handle = get_win_handle; wow_handlers32.create_window = create_window; wow_handlers32.get_icon_param = get_icon_param; wow_handlers32.set_icon_param = set_icon_param; wow_handlers32.alloc_winproc = WINPROC_AllocProc; wow_handlers32.get_dialog_info = get_dialog_info; wow_handlers32.dialog_box_loop = dialog_box_loop; wow_handlers32.static_proc = wow_static_proc_wrapper; wow_handlers32.listbox_proc = wow_listbox_proc_wrapper; wow_handlers32.button_proc = wow_button_proc_wrapper; wow_handlers32.edit_proc = wow_edit_proc_wrapper; InitHook(); } BOOL is_dialog(HWND hwnd); dialog_data *get_dialog_data(HWND hWnd); void free_proc_thunk(void *thunk); LRESULT CALLBACK WindowProc16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { HWND16 hWnd16 = HWND_16(hDlg); if (!GetWndProc16(hWnd16)) { InitWndProc16(hDlg, hWnd16); } /* some programs don't call DlgProc */ if (Msg == WM_INITDIALOG && is_dialog(hDlg)) { dialog_data *dd = get_dialog_data(hDlg); if (dd) { if (!GetMenu(hDlg) && dd->hMenu16) SetMenu(hDlg, HMENU_32(dd->hMenu16)); dd = get_dialog_data(hDlg); if (dd && !dd->dlgProc) { void *thunk = (void *)GetWindowLongPtrA(hDlg, DWLP_DLGPROC); SetWindowLongPtrA(hDlg, DWLP_DLGPROC, NULL); HeapFree(GetProcessHeap(), 0, dd); free_proc_thunk(thunk); return TRUE; } } } WNDPROC16 wndproc16 = (WNDPROC16)GetWndProc16(hWnd16); if (wndproc16) { int index = winproc_to_index(wndproc16); MSG msg = { 0 }; CLIENTCREATESTRUCT c32; msg.hwnd = hDlg; msg.message = Msg; msg.wParam = wParam; msg.lParam = lParam; LRESULT result; if (index != -1 && index < MAX_WINPROCS32 && thunk_array && thunk_array[index].proc) { WNDPROC wndproc32 = thunk_array[index].proc; if ((Msg == WM_CREATE) && is_mdiclient(hWnd16, hDlg)) { CLIENTCREATESTRUCT16 *c16 = MapSL(*(DWORD *)lParam); c32.idFirstChild = c16->idFirstChild; c32.hWindowMenu = HMENU_32(c16->hWindowMenu); ((CREATESTRUCTA *)lParam)->lpCreateParams = (LPVOID)&c32; } return CallWindowProcA(wndproc32, hDlg, Msg, wParam, lParam); } WINPROC_CallProc32ATo16(call_window_proc16, msg.hwnd, msg.message, msg.wParam, msg.lParam, &result, wndproc16); return result; } return DefWindowProcA(hDlg, Msg, wParam, lParam); } static LRESULT LPMSG16_32_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg) { MSG *msg32 = (MSG*)arg; msg32->hwnd = hwnd; msg32->message = msg; msg32->lParam = lp; msg32->wParam = wp; return *result = 0; } static LRESULT LPMSG32_16_callback(HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp , LRESULT *result, void *arg) { MSG16 *msg16 = (MSG16*)arg; msg16->hwnd = hwnd; msg16->message = msg; msg16->lParam = lp; msg16->wParam = wp; return *result = 0; } void WINAPI window_message32_16(const MSG *msg32, MSG16 *msg16) { LRESULT ret; msg16->pt.x = msg32->pt.x; msg16->pt.y = msg32->pt.y; msg16->time = msg32->time; WINPROC_CallProc32ATo16(LPMSG32_16_callback, msg16->hwnd, msg16->message, msg16->wParam, msg16->lParam, &ret, msg16); } void WINAPI window_message16_32(const MSG16 *msg16, MSG *msg32) { LRESULT ret; msg32->pt.x = msg16->pt.x; msg32->pt.y = msg16->pt.y; msg32->time = msg16->time; WINPROC_CallProc16To32A(LPMSG16_32_callback, msg16->hwnd, msg16->message, msg16->wParam, msg16->lParam, &ret, msg32); } BOOL16 WINAPI QuerySendMessage16(HANDLE16 res1, HANDLE16 res2, HANDLE16 res3, MSG16 *msg) { WARN("not returning message\n"); return InSendMessage(); } ================================================ FILE: user/message_table.h ================================================ static const char *msg_table[] = { [0] = "WM_NULL", [1] = "WM_CREATE", [2] = "WM_DESTROY", [3] = "WM_MOVE", [5] = "WM_SIZE", [6] = "WM_ACTIVATE", [7] = "WM_SETFOCUS", [8] = "WM_KILLFOCUS", [9] = "WM_SETVISIBLE", [10] = "WM_ENABLE", [11] = "WM_SETREDRAW", [12] = "WM_SETTEXT", [13] = "WM_GETTEXT", [14] = "WM_GETTEXTLENGTH", [15] = "WM_PAINT", [16] = "WM_CLOSE", [17] = "WM_QUERYENDSESSION", [18] = "WM_QUIT", [19] = "WM_QUERYOPEN", [20] = "WM_ERASEBKGND", [21] = "WM_SYSCOLORCHANGE", [22] = "WM_ENDSESSION", [24] = "WM_SHOWWINDOW", [25] = "WM_CTLCOLOR", [26] = "WM_WININICHANGE", [27] = "WM_DEVMODECHANGE", [28] = "WM_ACTIVATEAPP", [29] = "WM_FONTCHANGE", [30] = "WM_TIMECHANGE", [31] = "WM_CANCELMODE", [32] = "WM_SETCURSOR", [33] = "WM_MOUSEACTIVATE", [34] = "WM_CHILDACTIVATE", [35] = "WM_QUEUESYNC", [36] = "WM_GETMINMAXINFO", [38] = "WM_PAINTICON", [39] = "WM_ICONERASEBKGND", [40] = "WM_NEXTDLGCTL", [42] = "WM_SPOOLERSTATUS", [43] = "WM_DRAWITEM", [44] = "WM_MEASUREITEM", [45] = "WM_DELETEITEM", [46] = "WM_VKEYTOITEM", [47] = "WM_CHARTOITEM", [48] = "WM_SETFONT", [49] = "WM_GETFONT", [50] = "WM_SETHOTKEY", [51] = "WM_GETHOTKEY", [55] = "WM_QUERYDRAGICON", [57] = "WM_COMPAREITEM", [61] = "WM_GETOBJECT", [65] = "WM_COMPACTING", [68] = "WM_COMMNOTIFY", [70] = "WM_WINDOWPOSCHANGING", [71] = "WM_WINDOWPOSCHANGED", [72] = "WM_POWER", [73] = "WM_COPYGLOBALDATA", [74] = "WM_COPYDATA", [75] = "WM_CANCELJOURNAL", [78] = "WM_NOTIFY", [80] = "WM_INPUTLANGCHANGEREQUEST", [81] = "WM_INPUTLANGCHANGE", [82] = "WM_TCARD", [83] = "WM_HELP", [84] = "WM_USERCHANGED", [85] = "WM_NOTIFYFORMAT", [123] = "WM_CONTEXTMENU", [124] = "WM_STYLECHANGING", [125] = "WM_STYLECHANGED", [126] = "WM_DISPLAYCHANGE", [127] = "WM_GETICON", [128] = "WM_SETICON", [129] = "WM_NCCREATE", [130] = "WM_NCDESTROY", [131] = "WM_NCCALCSIZE", [132] = "WM_NCHITTEST", [133] = "WM_NCPAINT", [134] = "WM_NCACTIVATE", [135] = "WM_GETDLGCODE", [136] = "WM_SYNCPAINT", [160] = "WM_NCMOUSEMOVE", [161] = "WM_NCLBUTTONDOWN", [162] = "WM_NCLBUTTONUP", [163] = "WM_NCLBUTTONDBLCLK", [164] = "WM_NCRBUTTONDOWN", [165] = "WM_NCRBUTTONUP", [166] = "WM_NCRBUTTONDBLCLK", [167] = "WM_NCMBUTTONDOWN", [168] = "WM_NCMBUTTONUP", [169] = "WM_NCMBUTTONDBLCLK", [171] = "WM_NCXBUTTONDOWN", [172] = "WM_NCXBUTTONUP", [173] = "WM_NCXBUTTONDBLCLK", [174] = "WM_NCUAHDRAWCAPTION", [175] = "WM_NCUAHDRAWFRAME", [176] = "EM_GETSEL", [177] = "EM_SETSEL", [178] = "EM_GETRECT", [179] = "EM_SETRECT", [180] = "EM_SETRECTNP", [181] = "EM_SCROLL", [182] = "EM_LINESCROLL", [183] = "EM_SCROLLCARET", [185] = "EM_GETMODIFY", [187] = "EM_SETMODIFY", [188] = "EM_GETLINECOUNT", [189] = "EM_LINEINDEX", [190] = "EM_SETHANDLE", [191] = "EM_GETHANDLE", [192] = "EM_GETTHUMB", [193] = "EM_LINELENGTH", [194] = "EM_REPLACESEL", [195] = "EM_SETFONT", [196] = "EM_GETLINE", [197] = "EM_LIMITTEXT", [197] = "EM_SETLIMITTEXT", [198] = "EM_CANUNDO", [199] = "EM_UNDO", [200] = "EM_FMTLINES", [201] = "EM_LINEFROMCHAR", [202] = "EM_SETWORDBREAK", [203] = "EM_SETTABSTOPS", [204] = "EM_SETPASSWORDCHAR", [205] = "EM_EMPTYUNDOBUFFER", [206] = "EM_GETFIRSTVISIBLELINE", [207] = "EM_SETREADONLY", [209] = "EM_SETWORDBREAKPROC", [209] = "EM_GETWORDBREAKPROC", [210] = "EM_GETPASSWORDCHAR", [211] = "EM_SETMARGINS", [212] = "EM_GETMARGINS", [213] = "EM_GETLIMITTEXT", [214] = "EM_POSFROMCHAR", [215] = "EM_CHARFROMPOS", [216] = "EM_SETIMESTATUS", [217] = "EM_GETIMESTATUS", [224] = "SBM_SETPOS", [225] = "SBM_GETPOS", [226] = "SBM_SETRANGE", [227] = "SBM_GETRANGE", [228] = "SBM_ENABLE_ARROWS", [230] = "SBM_SETRANGEREDRAW", [233] = "SBM_SETSCROLLINFO", [234] = "SBM_GETSCROLLINFO", [235] = "SBM_GETSCROLLBARINFO", [240] = "BM_GETCHECK", [241] = "BM_SETCHECK", [242] = "BM_GETSTATE", [243] = "BM_SETSTATE", [244] = "BM_SETSTYLE", [245] = "BM_CLICK", [246] = "BM_GETIMAGE", [247] = "BM_SETIMAGE", [248] = "BM_SETDONTCLICK", [255] = "WM_INPUT", [256] = "WM_KEYDOWN", [256] = "WM_KEYFIRST", [257] = "WM_KEYUP", [258] = "WM_CHAR", [259] = "WM_DEADCHAR", [260] = "WM_SYSKEYDOWN", [261] = "WM_SYSKEYUP", [262] = "WM_SYSCHAR", [263] = "WM_SYSDEADCHAR", [264] = "WM_KEYLAST", [265] = "WM_UNICHAR", [265] = "WM_WNT_CONVERTREQUESTEX", [266] = "WM_CONVERTREQUEST", [267] = "WM_CONVERTRESULT", [268] = "WM_INTERIM", [269] = "WM_IME_STARTCOMPOSITION", [270] = "WM_IME_ENDCOMPOSITION", [271] = "WM_IME_COMPOSITION", [271] = "WM_IME_KEYLAST", [272] = "WM_INITDIALOG", [273] = "WM_COMMAND", [274] = "WM_SYSCOMMAND", [275] = "WM_TIMER", [276] = "WM_HSCROLL", [277] = "WM_VSCROLL", [278] = "WM_INITMENU", [279] = "WM_INITMENUPOPUP", [280] = "WM_SYSTIMER", [287] = "WM_MENUSELECT", [288] = "WM_MENUCHAR", [289] = "WM_ENTERIDLE", [290] = "WM_MENURBUTTONUP", [291] = "WM_MENUDRAG", [292] = "WM_MENUGETOBJECT", [293] = "WM_UNINITMENUPOPUP", [294] = "WM_MENUCOMMAND", [295] = "WM_CHANGEUISTATE", [296] = "WM_UPDATEUISTATE", [297] = "WM_QUERYUISTATE", [306] = "WM_CTLCOLORMSGBOX", [307] = "WM_CTLCOLOREDIT", [308] = "WM_CTLCOLORLISTBOX", [309] = "WM_CTLCOLORBTN", [310] = "WM_CTLCOLORDLG", [311] = "WM_CTLCOLORSCROLLBAR", [312] = "WM_CTLCOLORSTATIC", [512] = "WM_MOUSEFIRST", [512] = "WM_MOUSEMOVE", [513] = "WM_LBUTTONDOWN", [514] = "WM_LBUTTONUP", [515] = "WM_LBUTTONDBLCLK", [516] = "WM_RBUTTONDOWN", [517] = "WM_RBUTTONUP", [518] = "WM_RBUTTONDBLCLK", [519] = "WM_MBUTTONDOWN", [520] = "WM_MBUTTONUP", [521] = "WM_MBUTTONDBLCLK", [521] = "WM_MOUSELAST", [522] = "WM_MOUSEWHEEL", [523] = "WM_XBUTTONDOWN", [524] = "WM_XBUTTONUP", [525] = "WM_XBUTTONDBLCLK", [528] = "WM_PARENTNOTIFY", [529] = "WM_ENTERMENULOOP", [530] = "WM_EXITMENULOOP", [531] = "WM_NEXTMENU", [532] = "WM_SIZING", [533] = "WM_CAPTURECHANGED", [534] = "WM_MOVING", [536] = "WM_POWERBROADCAST", [537] = "WM_DEVICECHANGE", [544] = "WM_MDICREATE", [545] = "WM_MDIDESTROY", [546] = "WM_MDIACTIVATE", [547] = "WM_MDIRESTORE", [548] = "WM_MDINEXT", [549] = "WM_MDIMAXIMIZE", [550] = "WM_MDITILE", [551] = "WM_MDICASCADE", [552] = "WM_MDIICONARRANGE", [553] = "WM_MDIGETACTIVE", [560] = "WM_MDISETMENU", [561] = "WM_ENTERSIZEMOVE", [562] = "WM_EXITSIZEMOVE", [563] = "WM_DROPFILES", [564] = "WM_MDIREFRESHMENU", [640] = "WM_IME_REPORT", [641] = "WM_IME_SETCONTEXT", [642] = "WM_IME_NOTIFY", [643] = "WM_IME_CONTROL", [644] = "WM_IME_COMPOSITIONFULL", [645] = "WM_IME_SELECT", [646] = "WM_IME_CHAR", [648] = "WM_IME_REQUEST", [656] = "WM_IMEKEYDOWN", [656] = "WM_IME_KEYDOWN", [657] = "WM_IMEKEYUP", [657] = "WM_IME_KEYUP", [672] = "WM_NCMOUSEHOVER", [673] = "WM_MOUSEHOVER", [674] = "WM_NCMOUSELEAVE", [675] = "WM_MOUSELEAVE", [768] = "WM_CUT", [769] = "WM_COPY", [770] = "WM_PASTE", [771] = "WM_CLEAR", [772] = "WM_UNDO", [773] = "WM_RENDERFORMAT", [774] = "WM_RENDERALLFORMATS", [775] = "WM_DESTROYCLIPBOARD", [776] = "WM_DRAWCLIPBOARD", [777] = "WM_PAINTCLIPBOARD", [778] = "WM_VSCROLLCLIPBOARD", [779] = "WM_SIZECLIPBOARD", [780] = "WM_ASKCBFORMATNAME", [781] = "WM_CHANGECBCHAIN", [782] = "WM_HSCROLLCLIPBOARD", [783] = "WM_QUERYNEWPALETTE", [784] = "WM_PALETTEISCHANGING", [785] = "WM_PALETTECHANGED", [786] = "WM_HOTKEY", [791] = "WM_PRINT", [792] = "WM_PRINTCLIENT", [793] = "WM_APPCOMMAND", [794] = "WM_THEMECHANGED", [856] = "WM_HANDHELDFIRST", [863] = "WM_HANDHELDLAST", [864] = "WM_AFXFIRST", [895] = "WM_AFXLAST", [896] = "WM_PENWINFIRST", [897] = "WM_RCRESULT", [898] = "WM_HOOKRCRESULT", [899] = "WM_GLOBALRCCHANGE", [899] = "WM_PENMISCINFO", [900] = "WM_SKB", [901] = "WM_HEDITCTL", [901] = "WM_PENCTL", [902] = "WM_PENMISC", [903] = "WM_CTLINIT", [904] = "WM_PENEVENT", [911] = "WM_PENWINLAST", [1024] = "DDM_SETFMT", [1024] = "DM_GETDEFID", [1024] = "NIN_SELECT", [1024] = "TBM_GETPOS", [1024] = "WM_PSD_PAGESETUPDLG", [1024] = "WM_USER", [1025] = "CBEM_INSERTITEMA", [1025] = "DDM_DRAW", [1025] = "DM_SETDEFID", [1025] = "HKM_SETHOTKEY", [1025] = "PBM_SETRANGE", [1025] = "RB_INSERTBANDA", [1025] = "SB_SETTEXTA", [1025] = "TB_ENABLEBUTTON", [1025] = "TBM_GETRANGEMIN", [1025] = "TTM_ACTIVATE", [1025] = "WM_CHOOSEFONT_GETLOGFONT", [1025] = "WM_PSD_FULLPAGERECT", [1026] = "CBEM_SETIMAGELIST", [1026] = "DDM_CLOSE", [1026] = "DM_REPOSITION", [1026] = "HKM_GETHOTKEY", [1026] = "PBM_SETPOS", [1026] = "RB_DELETEBAND", [1026] = "SB_GETTEXTA", [1026] = "TB_CHECKBUTTON", [1026] = "TBM_GETRANGEMAX", [1026] = "WM_PSD_MINMARGINRECT", [1027] = "CBEM_GETIMAGELIST", [1027] = "DDM_BEGIN", [1027] = "HKM_SETRULES", [1027] = "PBM_DELTAPOS", [1027] = "RB_GETBARINFO", [1027] = "SB_GETTEXTLENGTHA", [1027] = "TBM_GETTIC", [1027] = "TB_PRESSBUTTON", [1027] = "TTM_SETDELAYTIME", [1027] = "WM_PSD_MARGINRECT", [1028] = "CBEM_GETITEMA", [1028] = "DDM_END", [1028] = "PBM_SETSTEP", [1028] = "RB_SETBARINFO", [1028] = "SB_SETPARTS", [1028] = "TB_HIDEBUTTON", [1028] = "TBM_SETTIC", [1028] = "TTM_ADDTOOLA", [1028] = "WM_PSD_GREEKTEXTRECT", [1029] = "CBEM_SETITEMA", [1029] = "PBM_STEPIT", [1029] = "TB_INDETERMINATE", [1029] = "TBM_SETPOS", [1029] = "TTM_DELTOOLA", [1029] = "WM_PSD_ENVSTAMPRECT", [1030] = "CBEM_GETCOMBOCONTROL", [1030] = "PBM_SETRANGE32", [1030] = "RB_SETBANDINFOA", [1030] = "SB_GETPARTS", [1030] = "TB_MARKBUTTON", [1030] = "TBM_SETRANGE", [1030] = "TTM_NEWTOOLRECTA", [1030] = "WM_PSD_YAFULLPAGERECT", [1031] = "CBEM_GETEDITCONTROL", [1031] = "PBM_GETRANGE", [1031] = "RB_SETPARENT", [1031] = "SB_GETBORDERS", [1031] = "TBM_SETRANGEMIN", [1031] = "TTM_RELAYEVENT", [1032] = "CBEM_SETEXSTYLE", [1032] = "PBM_GETPOS", [1032] = "RB_HITTEST", [1032] = "SB_SETMINHEIGHT", [1032] = "TBM_SETRANGEMAX", [1032] = "TTM_GETTOOLINFOA", [1033] = "CBEM_GETEXSTYLE", [1033] = "CBEM_GETEXTENDEDSTYLE", [1033] = "PBM_SETBARCOLOR", [1033] = "RB_GETRECT", [1033] = "SB_SIMPLE", [1033] = "TB_ISBUTTONENABLED", [1033] = "TBM_CLEARTICS", [1033] = "TTM_SETTOOLINFOA", [1034] = "CBEM_HASEDITCHANGED", [1034] = "RB_INSERTBANDW", [1034] = "SB_GETRECT", [1034] = "TB_ISBUTTONCHECKED", [1034] = "TBM_SETSEL", [1034] = "TTM_HITTESTA", [1034] = "WIZ_QUERYNUMPAGES", [1035] = "CBEM_INSERTITEMW", [1035] = "RB_SETBANDINFOW", [1035] = "SB_SETTEXTW", [1035] = "TB_ISBUTTONPRESSED", [1035] = "TBM_SETSELSTART", [1035] = "TTM_GETTEXTA", [1035] = "WIZ_NEXT", [1036] = "CBEM_SETITEMW", [1036] = "RB_GETBANDCOUNT", [1036] = "SB_GETTEXTLENGTHW", [1036] = "TB_ISBUTTONHIDDEN", [1036] = "TBM_SETSELEND", [1036] = "TTM_UPDATETIPTEXTA", [1036] = "WIZ_PREV", [1037] = "CBEM_GETITEMW", [1037] = "RB_GETROWCOUNT", [1037] = "SB_GETTEXTW", [1037] = "TB_ISBUTTONINDETERMINATE", [1037] = "TTM_GETTOOLCOUNT", [1038] = "CBEM_SETEXTENDEDSTYLE", [1038] = "RB_GETROWHEIGHT", [1038] = "SB_ISSIMPLE", [1038] = "TB_ISBUTTONHIGHLIGHTED", [1038] = "TBM_GETPTICS", [1038] = "TTM_ENUMTOOLSA", [1039] = "SB_SETICON", [1039] = "TBM_GETTICPOS", [1039] = "TTM_GETCURRENTTOOLA", [1040] = "RB_IDTOINDEX", [1040] = "SB_SETTIPTEXTA", [1040] = "TBM_GETNUMTICS", [1040] = "TTM_WINDOWFROMPOINT", [1041] = "RB_GETTOOLTIPS", [1041] = "SB_SETTIPTEXTW", [1041] = "TBM_GETSELSTART", [1041] = "TB_SETSTATE", [1041] = "TTM_TRACKACTIVATE", [1042] = "RB_SETTOOLTIPS", [1042] = "SB_GETTIPTEXTA", [1042] = "TB_GETSTATE", [1042] = "TBM_GETSELEND", [1042] = "TTM_TRACKPOSITION", [1043] = "RB_SETBKCOLOR", [1043] = "SB_GETTIPTEXTW", [1043] = "TB_ADDBITMAP", [1043] = "TBM_CLEARSEL", [1043] = "TTM_SETTIPBKCOLOR", [1044] = "RB_GETBKCOLOR", [1044] = "SB_GETICON", [1044] = "TB_ADDBUTTONSA", [1044] = "TBM_SETTICFREQ", [1044] = "TTM_SETTIPTEXTCOLOR", [1045] = "RB_SETTEXTCOLOR", [1045] = "TB_INSERTBUTTONA", [1045] = "TBM_SETPAGESIZE", [1045] = "TTM_GETDELAYTIME", [1046] = "RB_GETTEXTCOLOR", [1046] = "TB_DELETEBUTTON", [1046] = "TBM_GETPAGESIZE", [1046] = "TTM_GETTIPBKCOLOR", [1047] = "RB_SIZETORECT", [1047] = "TB_GETBUTTON", [1047] = "TBM_SETLINESIZE", [1047] = "TTM_GETTIPTEXTCOLOR", [1048] = "RB_BEGINDRAG", [1048] = "TB_BUTTONCOUNT", [1048] = "TBM_GETLINESIZE", [1048] = "TTM_SETMAXTIPWIDTH", [1049] = "RB_ENDDRAG", [1049] = "TB_COMMANDTOINDEX", [1049] = "TBM_GETTHUMBRECT", [1049] = "TTM_GETMAXTIPWIDTH", [1050] = "RB_DRAGMOVE", [1050] = "TBM_GETCHANNELRECT", [1050] = "TB_SAVERESTOREA", [1050] = "TTM_SETMARGIN", [1051] = "RB_GETBARHEIGHT", [1051] = "TB_CUSTOMIZE", [1051] = "TBM_SETTHUMBLENGTH", [1051] = "TTM_GETMARGIN", [1052] = "RB_GETBANDINFOW", [1052] = "TB_ADDSTRINGA", [1052] = "TBM_GETTHUMBLENGTH", [1052] = "TTM_POP", [1053] = "RB_GETBANDINFOA", [1053] = "TB_GETITEMRECT", [1053] = "TBM_SETTOOLTIPS", [1053] = "TTM_UPDATE", [1054] = "RB_MINIMIZEBAND", [1054] = "TB_BUTTONSTRUCTSIZE", [1054] = "TBM_GETTOOLTIPS", [1054] = "TTM_GETBUBBLESIZE", [1055] = "RB_MAXIMIZEBAND", [1055] = "TBM_SETTIPSIDE", [1055] = "TB_SETBUTTONSIZE", [1055] = "TTM_ADJUSTRECT", [1056] = "TBM_SETBUDDY", [1056] = "TB_SETBITMAPSIZE", [1056] = "TTM_SETTITLEA", [1057] = "MSG_FTS_JUMP_VA", [1057] = "TB_AUTOSIZE", [1057] = "TBM_GETBUDDY", [1057] = "TTM_SETTITLEW", [1058] = "RB_GETBANDBORDERS", [1059] = "MSG_FTS_JUMP_QWORD", [1059] = "RB_SHOWBAND", [1059] = "TB_GETTOOLTIPS", [1060] = "MSG_REINDEX_REQUEST", [1060] = "TB_SETTOOLTIPS", [1061] = "MSG_FTS_WHERE_IS_IT", [1061] = "RB_SETPALETTE", [1061] = "TB_SETPARENT", [1062] = "RB_GETPALETTE", [1063] = "RB_MOVEBAND", [1063] = "TB_SETROWS", [1064] = "TB_GETROWS", [1065] = "TB_GETBITMAPFLAGS", [1066] = "TB_SETCMDID", [1067] = "RB_PUSHCHEVRON", [1067] = "TB_CHANGEBITMAP", [1068] = "TB_GETBITMAP", [1069] = "MSG_GET_DEFFONT", [1069] = "TB_GETBUTTONTEXTA", [1070] = "TB_REPLACEBITMAP", [1071] = "TB_SETINDENT", [1072] = "TB_SETIMAGELIST", [1073] = "TB_GETIMAGELIST", [1074] = "TB_LOADIMAGES", [1074] = "EM_CANPASTE", [1074] = "TTM_ADDTOOLW", [1075] = "EM_DISPLAYBAND", [1075] = "TB_GETRECT", [1075] = "TTM_DELTOOLW", [1076] = "EM_EXGETSEL", [1076] = "TB_SETHOTIMAGELIST", [1076] = "TTM_NEWTOOLRECTW", [1077] = "EM_EXLIMITTEXT", [1077] = "TB_GETHOTIMAGELIST", [1077] = "TTM_GETTOOLINFOW", [1078] = "EM_EXLINEFROMCHAR", [1078] = "TB_SETDISABLEDIMAGELIST", [1078] = "TTM_SETTOOLINFOW", [1079] = "EM_EXSETSEL", [1079] = "TB_GETDISABLEDIMAGELIST", [1079] = "TTM_HITTESTW", [1080] = "EM_FINDTEXT", [1080] = "TB_SETSTYLE", [1080] = "TTM_GETTEXTW", [1081] = "EM_FORMATRANGE", [1081] = "TB_GETSTYLE", [1081] = "TTM_UPDATETIPTEXTW", [1082] = "EM_GETCHARFORMAT", [1082] = "TB_GETBUTTONSIZE", [1082] = "TTM_ENUMTOOLSW", [1083] = "EM_GETEVENTMASK", [1083] = "TB_SETBUTTONWIDTH", [1083] = "TTM_GETCURRENTTOOLW", [1084] = "EM_GETOLEINTERFACE", [1084] = "TB_SETMAXTEXTROWS", [1085] = "EM_GETPARAFORMAT", [1085] = "TB_GETTEXTROWS", [1086] = "EM_GETSELTEXT", [1086] = "TB_GETOBJECT", [1087] = "EM_HIDESELECTION", [1087] = "TB_GETBUTTONINFOW", [1088] = "EM_PASTESPECIAL", [1088] = "TB_SETBUTTONINFOW", [1089] = "EM_REQUESTRESIZE", [1089] = "TB_GETBUTTONINFOA", [1090] = "EM_SELECTIONTYPE", [1090] = "TB_SETBUTTONINFOA", [1091] = "EM_SETBKGNDCOLOR", [1091] = "TB_INSERTBUTTONW", [1092] = "EM_SETCHARFORMAT", [1092] = "TB_ADDBUTTONSW", [1093] = "EM_SETEVENTMASK", [1093] = "TB_HITTEST", [1094] = "EM_SETOLECALLBACK", [1094] = "TB_SETDRAWTEXTFLAGS", [1095] = "EM_SETPARAFORMAT", [1095] = "TB_GETHOTITEM", [1096] = "EM_SETTARGETDEVICE", [1096] = "TB_SETHOTITEM", [1097] = "EM_STREAMIN", [1097] = "TB_SETANCHORHIGHLIGHT", [1098] = "EM_STREAMOUT", [1098] = "TB_GETANCHORHIGHLIGHT", [1099] = "EM_GETTEXTRANGE", [1099] = "TB_GETBUTTONTEXTW", [1100] = "EM_FINDWORDBREAK", [1100] = "TB_SAVERESTOREW", [1101] = "EM_SETOPTIONS", [1101] = "TB_ADDSTRINGW", [1102] = "EM_GETOPTIONS", [1102] = "TB_MAPACCELERATORA", [1103] = "EM_FINDTEXTEX", [1103] = "TB_GETINSERTMARK", [1104] = "EM_GETWORDBREAKPROCEX", [1104] = "TB_SETINSERTMARK", [1105] = "EM_SETWORDBREAKPROCEX", [1105] = "TB_INSERTMARKHITTEST", [1106] = "EM_SETUNDOLIMIT", [1106] = "TB_MOVEBUTTON", [1107] = "TB_GETMAXSIZE", [1108] = "EM_REDO", [1108] = "TB_SETEXTENDEDSTYLE", [1109] = "EM_CANREDO", [1109] = "TB_GETEXTENDEDSTYLE", [1110] = "EM_GETUNDONAME", [1110] = "TB_GETPADDING", [1111] = "EM_GETREDONAME", [1111] = "TB_SETPADDING", [1112] = "EM_STOPGROUPTYPING", [1112] = "TB_SETINSERTMARKCOLOR", [1113] = "EM_SETTEXTMODE", [1113] = "TB_GETINSERTMARKCOLOR", [1114] = "EM_GETTEXTMODE", [1114] = "TB_MAPACCELERATORW", [1115] = "EM_AUTOURLDETECT", [1115] = "TB_GETSTRINGW", [1116] = "EM_GETAUTOURLDETECT", [1116] = "TB_GETSTRINGA", [1117] = "EM_SETPALETTE", [1118] = "EM_GETTEXTEX", [1119] = "EM_GETTEXTLENGTHEX", [1120] = "EM_SHOWSCROLLBAR", [1121] = "EM_SETTEXTEX", [1123] = "TAPI_REPLY", [1124] = "ACM_OPENA", [1124] = "BFFM_SETSTATUSTEXTA", [1124] = "CDM_FIRST", [1124] = "CDM_GETSPEC", [1124] = "EM_SETPUNCTUATION", [1124] = "IPM_CLEARADDRESS", [1124] = "WM_CAP_UNICODE_START", [1125] = "ACM_PLAY", [1125] = "BFFM_ENABLEOK", [1125] = "CDM_GETFILEPATH", [1125] = "EM_GETPUNCTUATION", [1125] = "IPM_SETADDRESS", [1125] = "PSM_SETCURSEL", [1125] = "UDM_SETRANGE", [1125] = "WM_CHOOSEFONT_SETLOGFONT", [1126] = "ACM_STOP", [1126] = "BFFM_SETSELECTIONA", [1126] = "CDM_GETFOLDERPATH", [1126] = "EM_SETWORDWRAPMODE", [1126] = "IPM_GETADDRESS", [1126] = "PSM_REMOVEPAGE", [1126] = "UDM_GETRANGE", [1126] = "WM_CAP_SET_CALLBACK_ERRORW", [1126] = "WM_CHOOSEFONT_SETFLAGS", [1127] = "ACM_OPENW", [1127] = "BFFM_SETSELECTIONW", [1127] = "CDM_GETFOLDERIDLIST", [1127] = "EM_GETWORDWRAPMODE", [1127] = "IPM_SETRANGE", [1127] = "PSM_ADDPAGE", [1127] = "UDM_SETPOS", [1127] = "WM_CAP_SET_CALLBACK_STATUSW", [1128] = "BFFM_SETSTATUSTEXTW", [1128] = "CDM_SETCONTROLTEXT", [1128] = "EM_SETIMECOLOR", [1128] = "IPM_SETFOCUS", [1128] = "PSM_CHANGED", [1128] = "UDM_GETPOS", [1129] = "CDM_HIDECONTROL", [1129] = "EM_GETIMECOLOR", [1129] = "IPM_ISBLANK", [1129] = "PSM_RESTARTWINDOWS", [1129] = "UDM_SETBUDDY", [1130] = "CDM_SETDEFEXT", [1130] = "EM_SETIMEOPTIONS", [1130] = "PSM_REBOOTSYSTEM", [1130] = "UDM_GETBUDDY", [1131] = "EM_GETIMEOPTIONS", [1131] = "PSM_CANCELTOCLOSE", [1131] = "UDM_SETACCEL", [1132] = "EM_CONVPOSITION", [1132] = "EM_CONVPOSITION", [1132] = "PSM_QUERYSIBLINGS", [1132] = "UDM_GETACCEL", [1133] = "MCIWNDM_GETZOOM", [1133] = "PSM_UNCHANGED", [1133] = "UDM_SETBASE", [1134] = "PSM_APPLY", [1134] = "UDM_GETBASE", [1135] = "PSM_SETTITLEA", [1135] = "UDM_SETRANGE32", [1136] = "PSM_SETWIZBUTTONS", [1136] = "UDM_GETRANGE32", [1136] = "WM_CAP_DRIVER_GET_NAMEW", [1137] = "PSM_PRESSBUTTON", [1137] = "UDM_SETPOS32", [1137] = "WM_CAP_DRIVER_GET_VERSIONW", [1138] = "PSM_SETCURSELID", [1138] = "UDM_GETPOS32", [1139] = "PSM_SETFINISHTEXTA", [1140] = "PSM_GETTABCONTROL", [1141] = "PSM_ISDIALOGMESSAGE", [1142] = "MCIWNDM_REALIZE", [1142] = "PSM_GETCURRENTPAGEHWND", [1143] = "MCIWNDM_SETTIMEFORMATA", [1143] = "PSM_INSERTPAGE", [1144] = "EM_SETLANGOPTIONS", [1144] = "MCIWNDM_GETTIMEFORMATA", [1144] = "PSM_SETTITLEW", [1144] = "WM_CAP_FILE_SET_CAPTURE_FILEW", [1145] = "EM_GETLANGOPTIONS", [1145] = "MCIWNDM_VALIDATEMEDIA", [1145] = "PSM_SETFINISHTEXTW", [1145] = "WM_CAP_FILE_GET_CAPTURE_FILEW", [1146] = "EM_GETIMECOMPMODE", [1147] = "EM_FINDTEXTW", [1147] = "MCIWNDM_PLAYTO", [1147] = "WM_CAP_FILE_SAVEASW", [1148] = "EM_FINDTEXTEXW", [1148] = "MCIWNDM_GETFILENAMEA", [1149] = "EM_RECONVERSION", [1149] = "MCIWNDM_GETDEVICEA", [1149] = "PSM_SETHEADERTITLEA", [1149] = "WM_CAP_FILE_SAVEDIBW", [1150] = "EM_SETIMEMODEBIAS", [1150] = "MCIWNDM_GETPALETTE", [1150] = "PSM_SETHEADERTITLEW", [1151] = "EM_GETIMEMODEBIAS", [1151] = "MCIWNDM_SETPALETTE", [1151] = "PSM_SETHEADERSUBTITLEA", [1152] = "MCIWNDM_GETERRORA", [1152] = "PSM_SETHEADERSUBTITLEW", [1153] = "PSM_HWNDTOINDEX", [1154] = "PSM_INDEXTOHWND", [1155] = "MCIWNDM_SETINACTIVETIMER", [1155] = "PSM_PAGETOINDEX", [1156] = "PSM_INDEXTOPAGE", [1157] = "DL_BEGINDRAG", [1157] = "MCIWNDM_GETINACTIVETIMER", [1157] = "PSM_IDTOINDEX", [1158] = "DL_DRAGGING", [1158] = "PSM_INDEXTOID", [1159] = "DL_DROPPED", [1159] = "PSM_GETRESULT", [1160] = "DL_CANCELDRAG", [1160] = "PSM_RECALCPAGESIZES", [1164] = "MCIWNDM_GET_SOURCE", [1165] = "MCIWNDM_PUT_SOURCE", [1166] = "MCIWNDM_GET_DEST", [1167] = "MCIWNDM_PUT_DEST", [1168] = "MCIWNDM_CAN_PLAY", [1169] = "MCIWNDM_CAN_WINDOW", [1170] = "MCIWNDM_CAN_RECORD", [1171] = "MCIWNDM_CAN_SAVE", [1172] = "MCIWNDM_CAN_EJECT", [1173] = "MCIWNDM_CAN_CONFIG", [1174] = "IE_GETINK", [1174] = "IE_MSGFIRST", [1174] = "MCIWNDM_PALETTEKICK", [1175] = "IE_SETINK", [1176] = "IE_GETPENTIP", [1177] = "IE_SETPENTIP", [1178] = "IE_GETERASERTIP", [1179] = "IE_SETERASERTIP", [1180] = "IE_GETBKGND", [1181] = "IE_SETBKGND", [1182] = "IE_GETGRIDORIGIN", [1183] = "IE_SETGRIDORIGIN", [1184] = "IE_GETGRIDPEN", [1185] = "IE_SETGRIDPEN", [1186] = "IE_GETGRIDSIZE", [1187] = "IE_SETGRIDSIZE", [1188] = "IE_GETMODE", [1189] = "IE_SETMODE", [1190] = "IE_GETINKRECT", [1190] = "WM_CAP_SET_MCI_DEVICEW", [1191] = "WM_CAP_GET_MCI_DEVICEW", [1204] = "WM_CAP_PAL_OPENW", [1205] = "WM_CAP_PAL_SAVEW", [1208] = "IE_GETAPPDATA", [1209] = "IE_SETAPPDATA", [1210] = "IE_GETDRAWOPTS", [1211] = "IE_SETDRAWOPTS", [1212] = "IE_GETFORMAT", [1213] = "IE_SETFORMAT", [1214] = "IE_GETINKINPUT", [1215] = "IE_SETINKINPUT", [1216] = "IE_GETNOTIFY", [1217] = "IE_SETNOTIFY", [1218] = "IE_GETRECOG", [1219] = "IE_SETRECOG", [1220] = "IE_GETSECURITY", [1221] = "IE_SETSECURITY", [1222] = "IE_GETSEL", [1223] = "IE_SETSEL", [1224] = "CDM_LAST", [1224] = "EM_SETBIDIOPTIONS", [1224] = "IE_DOCOMMAND", [1224] = "MCIWNDM_NOTIFYMODE", [1225] = "EM_GETBIDIOPTIONS", [1225] = "IE_GETCOMMAND", [1226] = "EM_SETTYPOGRAPHYOPTIONS", [1226] = "IE_GETCOUNT", [1227] = "EM_GETTYPOGRAPHYOPTIONS", [1227] = "IE_GETGESTURE", [1227] = "MCIWNDM_NOTIFYMEDIA", [1228] = "EM_SETEDITSTYLE", [1228] = "IE_GETMENU", [1229] = "EM_GETEDITSTYLE", [1229] = "IE_GETPAINTDC", [1229] = "MCIWNDM_NOTIFYERROR", [1230] = "IE_GETPDEVENT", [1231] = "IE_GETSELCOUNT", [1232] = "IE_GETSELITEMS", [1233] = "IE_GETSTYLE", [1243] = "MCIWNDM_SETTIMEFORMATW", [1244] = "EM_OUTLINE", [1244] = "EM_OUTLINE", [1244] = "MCIWNDM_GETTIMEFORMATW", [1245] = "EM_GETSCROLLPOS", [1245] = "EM_GETSCROLLPOS", [1246] = "EM_SETSCROLLPOS", [1246] = "EM_SETSCROLLPOS", [1247] = "EM_SETFONTSIZE", [1247] = "EM_SETFONTSIZE", [1248] = "EM_GETZOOM", [1248] = "MCIWNDM_GETFILENAMEW", [1249] = "EM_SETZOOM", [1249] = "MCIWNDM_GETDEVICEW", [1250] = "EM_GETVIEWKIND", [1251] = "EM_SETVIEWKIND", [1252] = "EM_GETPAGE", [1252] = "MCIWNDM_GETERRORW", [1253] = "EM_SETPAGE", [1254] = "EM_GETHYPHENATEINFO", [1255] = "EM_SETHYPHENATEINFO", [1259] = "EM_GETPAGEROTATE", [1260] = "EM_SETPAGEROTATE", [1261] = "EM_GETCTFMODEBIAS", [1262] = "EM_SETCTFMODEBIAS", [1264] = "EM_GETCTFOPENSTATUS", [1265] = "EM_SETCTFOPENSTATUS", [1266] = "EM_GETIMECOMPTEXT", [1267] = "EM_ISIME", [1268] = "EM_GETIMEPROPERTY", [1293] = "EM_GETQUERYRTFOBJ", [1294] = "EM_SETQUERYRTFOBJ", [1536] = "FM_GETFOCUS", [1537] = "FM_GETDRIVEINFOA", [1538] = "FM_GETSELCOUNT", [1539] = "FM_GETSELCOUNTLFN", [1540] = "FM_GETFILESELA", [1541] = "FM_GETFILESELLFNA", [1542] = "FM_REFRESH_WINDOWS", [1543] = "FM_RELOAD_EXTENSIONS", [1553] = "FM_GETDRIVEINFOW", [1556] = "FM_GETFILESELW", [1557] = "FM_GETFILESELLFNW", [1625] = "WLX_WM_SAS", [2024] = "SM_GETSELCOUNT", [2024] = "UM_GETSELCOUNT", [2024] = "WM_CPL_LAUNCH", [2025] = "SM_GETSERVERSELA", [2025] = "UM_GETUSERSELA", [2025] = "WM_CPL_LAUNCHED", [2026] = "SM_GETSERVERSELW", [2026] = "UM_GETUSERSELW", [2027] = "SM_GETCURFOCUSA", [2027] = "UM_GETGROUPSELA", [2028] = "SM_GETCURFOCUSW", [2028] = "UM_GETGROUPSELW", [2029] = "SM_GETOPTIONS", [2029] = "UM_GETCURFOCUSA", [2030] = "UM_GETCURFOCUSW", [2031] = "UM_GETOPTIONS", [2032] = "UM_GETOPTIONS2", [4096] = "LVM_FIRST", [4096] = "LVM_GETBKCOLOR", [4097] = "LVM_SETBKCOLOR", [4098] = "LVM_GETIMAGELIST", [4099] = "LVM_SETIMAGELIST", [4100] = "LVM_GETITEMCOUNT", [4101] = "LVM_GETITEMA", [4102] = "LVM_SETITEMA", [4103] = "LVM_INSERTITEMA", [4104] = "LVM_DELETEITEM", [4105] = "LVM_DELETEALLITEMS", [4106] = "LVM_GETCALLBACKMASK", [4107] = "LVM_SETCALLBACKMASK", [4108] = "LVM_GETNEXTITEM", [4109] = "LVM_FINDITEMA", [4110] = "LVM_GETITEMRECT", [4111] = "LVM_SETITEMPOSITION", [4112] = "LVM_GETITEMPOSITION", [4113] = "LVM_GETSTRINGWIDTHA", [4114] = "LVM_HITTEST", [4115] = "LVM_ENSUREVISIBLE", [4116] = "LVM_SCROLL", [4117] = "LVM_REDRAWITEMS", [4118] = "LVM_ARRANGE", [4119] = "LVM_EDITLABELA", [4120] = "LVM_GETEDITCONTROL", [4121] = "LVM_GETCOLUMNA", [4122] = "LVM_SETCOLUMNA", [4123] = "LVM_INSERTCOLUMNA", [4124] = "LVM_DELETECOLUMN", [4125] = "LVM_GETCOLUMNWIDTH", [4126] = "LVM_SETCOLUMNWIDTH", [4127] = "LVM_GETHEADER", [4129] = "LVM_CREATEDRAGIMAGE", [4130] = "LVM_GETVIEWRECT", [4131] = "LVM_GETTEXTCOLOR", [4132] = "LVM_SETTEXTCOLOR", [4133] = "LVM_GETTEXTBKCOLOR", [4134] = "LVM_SETTEXTBKCOLOR", [4135] = "LVM_GETTOPINDEX", [4136] = "LVM_GETCOUNTPERPAGE", [4137] = "LVM_GETORIGIN", [4138] = "LVM_UPDATE", [4139] = "LVM_SETITEMSTATE", [4140] = "LVM_GETITEMSTATE", [4141] = "LVM_GETITEMTEXTA", [4142] = "LVM_SETITEMTEXTA", [4143] = "LVM_SETITEMCOUNT", [4144] = "LVM_SORTITEMS", [4145] = "LVM_SETITEMPOSITION32", [4146] = "LVM_GETSELECTEDCOUNT", [4147] = "LVM_GETITEMSPACING", [4148] = "LVM_GETISEARCHSTRINGA", [4149] = "LVM_SETICONSPACING", [4150] = "LVM_SETEXTENDEDLISTVIEWSTYLE", [4151] = "LVM_GETEXTENDEDLISTVIEWSTYLE", [4152] = "LVM_GETSUBITEMRECT", [4153] = "LVM_SUBITEMHITTEST", [4154] = "LVM_SETCOLUMNORDERARRAY", [4155] = "LVM_GETCOLUMNORDERARRAY", [4156] = "LVM_SETHOTITEM", [4157] = "LVM_GETHOTITEM", [4158] = "LVM_SETHOTCURSOR", [4159] = "LVM_GETHOTCURSOR", [4160] = "LVM_APPROXIMATEVIEWRECT", [4161] = "LVM_SETWORKAREAS", [4162] = "LVM_GETSELECTIONMARK", [4163] = "LVM_SETSELECTIONMARK", [4164] = "LVM_SETBKIMAGEA", [4165] = "LVM_GETBKIMAGEA", [4166] = "LVM_GETWORKAREAS", [4167] = "LVM_SETHOVERTIME", [4168] = "LVM_GETHOVERTIME", [4169] = "LVM_GETNUMBEROFWORKAREAS", [4170] = "LVM_SETTOOLTIPS", [4171] = "LVM_GETITEMW", [4172] = "LVM_SETITEMW", [4173] = "LVM_INSERTITEMW", [4174] = "LVM_GETTOOLTIPS", [4179] = "LVM_FINDITEMW", [4183] = "LVM_GETSTRINGWIDTHW", [4191] = "LVM_GETCOLUMNW", [4192] = "LVM_SETCOLUMNW", [4193] = "LVM_INSERTCOLUMNW", [4211] = "LVM_GETITEMTEXTW", [4212] = "LVM_SETITEMTEXTW", [4213] = "LVM_GETISEARCHSTRINGW", [4214] = "LVM_EDITLABELW", [4235] = "LVM_GETBKIMAGEW", [4236] = "LVM_SETSELECTEDCOLUMN", [4237] = "LVM_SETTILEWIDTH", [4238] = "LVM_SETVIEW", [4239] = "LVM_GETVIEW", [4241] = "LVM_INSERTGROUP", [4243] = "LVM_SETGROUPINFO", [4245] = "LVM_GETGROUPINFO", [4246] = "LVM_REMOVEGROUP", [4247] = "LVM_MOVEGROUP", [4250] = "LVM_MOVEITEMTOGROUP", [4251] = "LVM_SETGROUPMETRICS", [4252] = "LVM_GETGROUPMETRICS", [4253] = "LVM_ENABLEGROUPVIEW", [4254] = "LVM_SORTGROUPS", [4255] = "LVM_INSERTGROUPSORTED", [4256] = "LVM_REMOVEALLGROUPS", [4257] = "LVM_HASGROUP", [4258] = "LVM_SETTILEVIEWINFO", [4259] = "LVM_GETTILEVIEWINFO", [4260] = "LVM_SETTILEINFO", [4261] = "LVM_GETTILEINFO", [4262] = "LVM_SETINSERTMARK", [4263] = "LVM_GETINSERTMARK", [4264] = "LVM_INSERTMARKHITTEST", [4265] = "LVM_GETINSERTMARKRECT", [4266] = "LVM_SETINSERTMARKCOLOR", [4267] = "LVM_GETINSERTMARKCOLOR", [4269] = "LVM_SETINFOTIP", [4270] = "LVM_GETSELECTEDCOLUMN", [4271] = "LVM_ISGROUPVIEWENABLED", [4272] = "LVM_GETOUTLINECOLOR", [4273] = "LVM_SETOUTLINECOLOR", [4275] = "LVM_CANCELEDITLABEL", [4276] = "LVM_MAPINDEXTOID", [4277] = "LVM_MAPIDTOINDEX", [4278] = "LVM_ISITEMVISIBLE", [8192] = "OCM__BASE", [8197] = "LVM_SETUNICODEFORMAT", [8198] = "LVM_GETUNICODEFORMAT", [8217] = "OCM_CTLCOLOR", [8235] = "OCM_DRAWITEM", [8236] = "OCM_MEASUREITEM", [8237] = "OCM_DELETEITEM", [8238] = "OCM_VKEYTOITEM", [8239] = "OCM_CHARTOITEM", [8249] = "OCM_COMPAREITEM", [8270] = "OCM_NOTIFY", [8465] = "OCM_COMMAND", [8468] = "OCM_HSCROLL", [8469] = "OCM_VSCROLL", [8498] = "OCM_CTLCOLORMSGBOX", [8499] = "OCM_CTLCOLOREDIT", [8500] = "OCM_CTLCOLORLISTBOX", [8501] = "OCM_CTLCOLORBTN", [8502] = "OCM_CTLCOLORDLG", [8503] = "OCM_CTLCOLORSCROLLBAR", [8504] = "OCM_CTLCOLORSTATIC", [8720] = "OCM_PARENTNOTIFY", [32768] = "WM_APP", }; static const char *message_to_str(UINT msg) { if (sizeof(msg_table) / sizeof(char*) < msg) return NULL; return msg_table[msg]; } ================================================ FILE: user/network.c ================================================ /* * USER Windows Network functions * * Copyright 1995 Martin von Loewis * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include "windef.h" #include "winbase.h" #include "winnetwk.h" #include "wine/winnet16.h" #include "wine/debug.h" #include "wownt32.h" WINE_DEFAULT_DEBUG_CHANNEL(wnet); WORD map_wnet16_status(DWORD wnet32) { switch (wnet32) { case -1: return WN16_CANCEL; case WN_SUCCESS: return WN16_SUCCESS; case WN_NOT_SUPPORTED: return WN16_NOT_SUPPORTED; case WN_NET_ERROR: return WN16_NET_ERROR; case WN_MORE_DATA: return WN16_MORE_DATA; case WN_BAD_POINTER: return WN16_BAD_POINTER; case WN_BAD_VALUE: return WN16_BAD_VALUE; case WN_BAD_PASSWORD: return WN16_BAD_PASSWORD; case WN_ACCESS_DENIED: return WN16_ACCESS_DENIED; case WN_FUNCTION_BUSY: return WN16_FUNCTION_BUSY; /* case WN_WINDOWS_ERROR: return WN16_WINDOWS_ERROR; */ case WN_BAD_USER: return WN16_BAD_USER; case WN_OUT_OF_MEMORY: return WN16_OUT_OF_MEMORY; case WN_CANCEL: return WN16_CANCEL; case WN_NOT_CONNECTED: return WN16_NOT_CONNECTED; case WN_OPEN_FILES: return WN16_OPEN_FILES; case WN_BAD_NETNAME: return WN16_BAD_NETNAME; case WN_BAD_LOCALNAME: return WN16_BAD_LOCALNAME; case WN_ALREADY_CONNECTED: return WN16_ALREADY_CONNECTED; case WN_DEVICE_ERROR: return WN16_DEVICE_ERROR; case WN_CONNECTION_CLOSED: return WN16_CONNECTION_CLOSED; /* case WN_CONTINUE: return WN16_CONTINUE; case WN_BAD_JOBID: return WN16_BAD_JOBID; case WN_JOB_NOT_FOUND: return WN16_JOB_NOT_FOUND; case WN_JOB_NOT_HELD: return WN16_JOB_NOT_HELD; case WN_BAD_QUEUE: return WN16_BAD_QUEUE; case WN_BAD_FILE_HANDLE: return WN16_BAD_FILE_HANDLE; case WN_CANT_SET_COPIES: return WN16_CANT_SET_COPIES; case WN_ALREADY_LOCKED: return WN16_ALREADY_LOCKED; case WN_NO_ERROR: return WN16_NO_ERROR; */ } return WN16_WINDOWS_ERROR; } LPCSTR wnet16_status_error_string(WORD wnet) { #define STR(x) case x:\ return #x switch (wnet) { STR(WN16_SUCCESS); STR(WN16_NOT_SUPPORTED); STR(WN16_NET_ERROR); STR(WN16_MORE_DATA); STR(WN16_BAD_POINTER); STR(WN16_BAD_VALUE); STR(WN16_BAD_PASSWORD); STR(WN16_ACCESS_DENIED); STR(WN16_FUNCTION_BUSY); STR(WN16_WINDOWS_ERROR); STR(WN16_BAD_USER); STR(WN16_OUT_OF_MEMORY); STR(WN16_CANCEL); STR(WN16_CONTINUE); STR(WN16_NOT_CONNECTED); STR(WN16_OPEN_FILES); STR(WN16_BAD_NETNAME); STR(WN16_BAD_LOCALNAME); STR(WN16_ALREADY_CONNECTED); STR(WN16_DEVICE_ERROR); STR(WN16_CONNECTION_CLOSED); STR(WN16_BAD_JOBID); STR(WN16_JOB_NOT_FOUND); STR(WN16_JOB_NOT_HELD); STR(WN16_BAD_QUEUE); STR(WN16_BAD_FILE_HANDLE); STR(WN16_CANT_SET_COPIES); STR(WN16_ALREADY_LOCKED); STR(WN16_NO_ERROR); } #undef STR return NULL; } /* * Remote printing */ /************************************************************************** * WNetOpenJob [USER.501] */ WORD WINAPI WNetOpenJob16( LPSTR szQueue, LPSTR szJobTitle, WORD nCopies, LPINT16 pfh ) { FIXME( "(%s, %s, %d, %p): stub\n", debugstr_a(szQueue), debugstr_a(szJobTitle), nCopies, pfh ); return WN16_NET_ERROR; } /************************************************************************** * WNetCloseJob [USER.502] */ WORD WINAPI WNetCloseJob16( WORD fh, LPINT16 pidJob, LPSTR szQueue ) { FIXME( "(%d, %p, %s): stub\n", fh, pidJob, debugstr_a(szQueue) ); return WN16_NET_ERROR; } /************************************************************************** * WNetWriteJob [USER.524] */ WORD WINAPI WNetWriteJob16( HANDLE16 hJob, LPSTR lpData, LPINT16 lpcbData ) { FIXME( "(%04x, %p, %p): stub\n", hJob, lpData, lpcbData ); return WN16_NET_ERROR; } /************************************************************************** * WNetAbortJob [USER.503] */ WORD WINAPI WNetAbortJob16( LPSTR szQueue, WORD wJobId ) { FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId ); return WN16_NET_ERROR; } /************************************************************************** * WNetHoldJob [USER.504] */ WORD WINAPI WNetHoldJob16( LPSTR szQueue, WORD wJobId ) { FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId ); return WN16_NET_ERROR; } /************************************************************************** * WNetReleaseJob [USER.505] */ WORD WINAPI WNetReleaseJob16( LPSTR szQueue, WORD wJobId ) { FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId ); return WN16_NET_ERROR; } /************************************************************************** * WNetCancelJob [USER.506] */ WORD WINAPI WNetCancelJob16( LPSTR szQueue, WORD wJobId ) { FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId ); return WN16_NET_ERROR; } /************************************************************************** * WNetSetJobCopies [USER.507] */ WORD WINAPI WNetSetJobCopies16( LPSTR szQueue, WORD wJobId, WORD nCopies ) { FIXME( "(%s, %d, %d): stub\n", debugstr_a(szQueue), wJobId, nCopies ); return WN16_NET_ERROR; } /************************************************************************** * WNetWatchQueue [USER.508] */ WORD WINAPI WNetWatchQueue16( HWND16 hWnd, LPSTR szLocal, LPSTR szUser, WORD nQueue ) { FIXME( "(%04x, %s, %s, %d): stub\n", hWnd, debugstr_a(szLocal), debugstr_a(szUser), nQueue ); return WN16_NET_ERROR; } /************************************************************************** * WNetUnwatchQueue [USER.509] */ WORD WINAPI WNetUnwatchQueue16( LPSTR szQueue ) { FIXME( "(%s): stub\n", debugstr_a(szQueue) ); return WN16_NET_ERROR; } /************************************************************************** * WNetLockQueueData [USER.510] */ WORD WINAPI WNetLockQueueData16( LPSTR szQueue, LPSTR szUser, LPQUEUESTRUCT16 *lplpQueueStruct ) { FIXME( "(%s, %s, %p): stub\n", debugstr_a(szQueue), debugstr_a(szUser), lplpQueueStruct ); return WN16_NET_ERROR; } /************************************************************************** * WNetUnlockQueueData [USER.511] */ WORD WINAPI WNetUnlockQueueData16( LPSTR szQueue ) { FIXME( "(%s): stub\n", debugstr_a(szQueue) ); return WN16_NET_ERROR; } /* * Connections */ /******************************************************************** * WNetAddConnection [USER.517] Directs a local device to net * * Redirects a local device (either a disk drive or printer port) * to a shared device on a remote server. */ WORD WINAPI WNetAddConnection16( LPCSTR lpNetPath, LPCSTR lpPassWord, LPCSTR lpLocalName ) { FIXME( "(%s, %p, %s): stub\n", debugstr_a(lpNetPath), lpPassWord, debugstr_a(lpLocalName) ); return WN16_NET_ERROR; } /******************************************************************** * WNetCancelConnection [USER.518] undirects a local device */ WORD WINAPI WNetCancelConnection16( LPSTR lpName, BOOL16 bForce ) { FIXME( "(%s, %04X): stub\n", debugstr_a(lpName), bForce); return WN16_NOT_SUPPORTED; } /******************************************************************** * WNetGetConnection [USER.512] reverse-resolves a local device */ WORD WINAPI WNetGetConnection16( LPSTR lpLocalName, LPSTR lpRemoteName, UINT16 *cbRemoteName ) { char label[32]; TRACE( "local %s\n", lpLocalName ); switch(GetDriveTypeA(lpLocalName)) { case DRIVE_REMOTE: GetVolumeInformationA( lpLocalName, label, sizeof(label), NULL, NULL, NULL, NULL, 0 ); if (strlen(label) + 1 > *cbRemoteName) { *cbRemoteName = strlen(label) + 1; return WN16_MORE_DATA; } strcpy( lpRemoteName, label ); *cbRemoteName = strlen(lpRemoteName) + 1; return WN16_SUCCESS; case DRIVE_REMOVABLE: case DRIVE_FIXED: case DRIVE_CDROM: TRACE("file is local\n"); return WN16_NOT_CONNECTED; default: return WN16_BAD_LOCALNAME; } } /************************************************************************** * WNetRestoreConnection [USER.523] */ WORD WINAPI WNetRestoreConnection16( HWND16 hwndOwner, LPSTR lpszDevice ) { FIXME( "(%04x, %s): stub\n", hwndOwner, debugstr_a(lpszDevice) ); return WN16_NOT_SUPPORTED; } /* * Capabilities */ /************************************************************************** * WNetGetCaps [USER.513] */ WORD WINAPI WNetGetCaps16( WORD capability ) { switch (capability) { case WNNC16_SPEC_VERSION: return 0x30a; /* WfW 3.11 (and apparently other 3.1x) */ case WNNC16_NET_TYPE: /* hi byte = network type, lo byte = network vendor (Netware = 0x03) [15 types] */ return WNNC16_NET_MultiNet | WNNC16_SUBNET_WinWorkgroups; case WNNC16_DRIVER_VERSION: /* driver version of vendor */ return 0x100; /* WfW 3.11 */ case WNNC16_USER: /* 1 = WNetGetUser is supported */ return 1; case WNNC16_CONNECTION: /* returns mask of the supported connection functions */ return WNNC16_CON_AddConnection | WNNC16_CON_CancelConnection | WNNC16_CON_GetConnections /* | WNNC16_CON_AutoConnect */ | WNNC16_CON_BrowseDialog | WNNC16_CON_RestoreConnection; case WNNC16_PRINTING: /* returns mask of the supported printing functions */ return WNNC16_PRT_OpenJob | WNNC16_PRT_CloseJob | WNNC16_PRT_HoldJob | WNNC16_PRT_ReleaseJob | WNNC16_PRT_CancelJob | WNNC16_PRT_SetJobCopies | WNNC16_PRT_WatchQueue | WNNC16_PRT_UnwatchQueue | WNNC16_PRT_LockQueueData | WNNC16_PRT_UnlockQueueData | WNNC16_PRT_AbortJob | WNNC16_PRT_WriteJob; case WNNC16_DIALOG: /* returns mask of the supported dialog functions */ return WNNC16_DLG_DeviceMode | WNNC16_DLG_BrowseDialog | WNNC16_DLG_ConnectDialog | WNNC16_DLG_DisconnectDialog | WNNC16_DLG_ViewQueueDialog | WNNC16_DLG_PropertyDialog | WNNC16_DLG_ConnectionDialog /* | WNNC16_DLG_PrinterConnectDialog | WNNC16_DLG_SharesDialog | WNNC16_DLG_ShareAsDialog */; case WNNC16_ADMIN: /* returns mask of the supported administration functions */ /* not sure if long file names is a good idea */ return WNNC16_ADM_GetDirectoryType /* | WNNC16_ADM_DirectoryNotify */ /*not yet supported*/ | WNNC16_ADM_LongNames /* | WNNC16_ADM_SetDefaultDrive */; case WNNC16_ERROR: /* returns mask of the supported error functions */ return WNNC16_ERR_GetError | WNNC16_ERR_GetErrorText; case WNNC16_PRINTMGREXT: /* returns the Print Manager version in major and minor format if Print Manager functions are available */ return 0x30e; /* printman version of WfW 3.11 */ case 0xffff: /* Win 3.11 returns HMODULE of network driver here FIXME: what should we return ? logonoff.exe needs it, msmail crashes with wrong value */ return 0; default: return 0; } } /* * Get User */ /************************************************************************** * WNetGetUser [USER.516] */ WORD WINAPI WNetGetUser16( LPSTR szUser, LPINT16 nBufferSize ) { DWORD lpBufferSize, ret; if(!szUser || !nBufferSize) return WN16_BAD_POINTER; lpBufferSize = *nBufferSize; ret = WNetGetUserA( NULL, szUser, &lpBufferSize ); *nBufferSize = lpBufferSize; switch (ret) { case NO_ERROR: return WN16_SUCCESS; case ERROR_MORE_DATA: return WN16_MORE_DATA; default: FIXME("Untranslated return value %d\n", ret); } return ret; } /* * Browsing */ /************************************************************************** * WNetDeviceMode [USER.514] */ WORD WINAPI WNetDeviceMode16( HWND16 hWndOwner ) { FIXME( "(%04x): stub\n", hWndOwner ); return WN16_NOT_SUPPORTED; } /************************************************************************** * WNetBrowseDialog [USER.515] */ WORD WINAPI WNetBrowseDialog16( HWND16 hParent, WORD nType, LPSTR szPath ) { FIXME( "(%04x, %x, %s): stub\n", hParent, nType, szPath ); return WN16_NOT_SUPPORTED; } /******************************************************************** * WNetConnectDialog [USER.525] */ WORD WINAPI WNetConnectDialog16( HWND16 hWndParent, WORD iType ) { return map_wnet16_status(WNetConnectionDialog(HWND_32(hWndParent), iType)); } /************************************************************************** * WNetDisconnectDialog [USER.526] */ WORD WINAPI WNetDisconnectDialog16( HWND16 hwndOwner, WORD iType ) { return map_wnet16_status(WNetDisconnectDialog(HWND_32(hwndOwner), iType)); } /************************************************************************** * WNetConnectionDialog [USER.527] */ WORD WINAPI WNetConnectionDialog16( HWND16 hWndParent, WORD iType ) { return map_wnet16_status(WNetConnectionDialog(HWND_32(hWndParent), iType)); } /************************************************************************** * WNetViewQueueDialog [USER.528] */ WORD WINAPI WNetViewQueueDialog16( HWND16 hwndOwner, LPSTR lpszQueue ) { FIXME(" (%04x, %s): stub\n", hwndOwner, debugstr_a(lpszQueue) ); return WN16_NOT_SUPPORTED; } /************************************************************************** * WNetPropertyDialog [USER.529] */ WORD WINAPI WNetPropertyDialog16( HWND16 hwndParent, WORD iButton, WORD nPropSel, LPSTR lpszName, WORD nType ) { FIXME( "(%04x, %x, %x, %s, %x ): stub\n", hwndParent, iButton, nPropSel, debugstr_a(lpszName), nType ); return WN16_NOT_SUPPORTED; } /************************************************************************** * WNetGetPropertyText [USER.532] */ WORD WINAPI WNetGetPropertyText16( WORD iButton, WORD nPropSel, LPSTR lpszName, LPSTR lpszButtonName, WORD cbButtonName, WORD nType ) { FIXME( "(%04x, %04x, %s, %s, %04x): stub\n", iButton, nPropSel, debugstr_a(lpszName), debugstr_a(lpszButtonName), nType); return WN16_NOT_SUPPORTED; } /* * Admin */ /********************************************************************* * WNetGetDirectoryType [USER.530] Decides whether resource is local * * RETURNS * on success, puts one of the following in *lpType: * - WNDT_NETWORK on a network * - WNDT_LOCAL local */ WORD WINAPI WNetGetDirectoryType16( LPSTR lpName, LPINT16 lpType ) { UINT type = GetDriveTypeA(lpName); if ( type == DRIVE_NO_ROOT_DIR ) type = GetDriveTypeA(NULL); *lpType = (type == DRIVE_REMOTE)? WNDT_NETWORK : WNDT_NORMAL; TRACE( "%s is %s\n", debugstr_a(lpName), (*lpType == WNDT_NETWORK)? "WNDT_NETWORK" : "WNDT_NORMAL" ); return WN16_SUCCESS; } /************************************************************************** * WNetDirectoryNotify [USER.531] */ WORD WINAPI WNetDirectoryNotify16( HWND16 hwndOwner, LPSTR lpDir, WORD wOper ) { FIXME( "(%04x, %s, %s): stub\n", hwndOwner, debugstr_a(lpDir), (wOper == WNDN_MKDIR)? "WNDN_MKDIR" : (wOper == WNDN_MVDIR)? "WNDN_MVDIR" : (wOper == WNDN_RMDIR)? "WNDN_RMDIR" : "unknown" ); return WN16_NOT_SUPPORTED; } /* * Error handling */ /************************************************************************** * WNetGetError [USER.519] */ WORD WINAPI WNetGetError16( LPINT16 nError ) { FIXME( "(%p): stub\n", nError ); return WN16_NOT_SUPPORTED; } /************************************************************************** * WNetGetErrorText [USER.520] */ WORD WINAPI WNetGetErrorText16( WORD nError, LPSTR lpBuffer, LPINT16 nBufferSize ) { FIXME( "(%x, %p, %p): stub\n", nError, lpBuffer, nBufferSize ); return WN16_NET_ERROR; } /************************************************************************** * WNetErrorText [USER.499] */ WORD WINAPI WNetErrorText16( WORD nError, LPSTR lpszText, WORD cbText ) { LPCSTR str = wnet16_status_error_string(nError); SIZE_T len; if (!str || !cbText) return FALSE; len = min(cbText, strlen(str) + 1); memcpy(lpszText, str, len); lpszText[len] = 0; return TRUE; } ================================================ FILE: user/stub.c ================================================ #include "wine/debug.h" #include "user_private.h" WINE_DEFAULT_DEBUG_CHANNEL(user); PDrawCaptionTempA DrawCaptionTempA; PScrollChildren ScrollChildren; PCalcChildScroll CalcChildScroll; PSetInternalWindowPos SetInternalWindowPos; PSetSystemMenu SetSystemMenu; PKillSystemTimer KillSystemTimer; PSetSystemTimer SetSystemTimer; PSetDeskWallPaper SetDeskWallPaper; PUserRealizePalette UserRealizePalette; PUserRegisterWowHandlers UserRegisterWowHandlers; void WINAPI CalcChildScrollImpl(HWND hWnd, INT n) { FIXME("CalcChildScrollImpl(%p, %d)\n", hWnd, n); } void load_user32_functions() { #define LOAD_FUNC(dll, name) name = (P##name)GetProcAddress(GetModuleHandleA(dll), #name); #define LOAD_FUNC_FUNC(dll, name, defaultfunc) LOAD_FUNC(dll, name); if(!name) name = defaultfunc; DrawCaptionTempA = (PDrawCaptionTempA)GetProcAddress(GetModuleHandleA("USER32.DLL"), "DrawCaptionTempA"); LOAD_FUNC("USER32.DLL", ScrollChildren); LOAD_FUNC_FUNC("USER32.DLL", CalcChildScroll, CalcChildScrollImpl); LOAD_FUNC("USER32.DLL", SetInternalWindowPos); LOAD_FUNC("USER32.DLL", SetSystemMenu); LOAD_FUNC("USER32.DLL", KillSystemTimer); LOAD_FUNC("USER32.DLL", SetSystemTimer); LOAD_FUNC("USER32.DLL", SetDeskWallPaper); LOAD_FUNC("USER32.DLL", UserRealizePalette); LOAD_FUNC("USER32.DLL", UserRegisterWowHandlers); return; } /*********************************************************************** * SignalProc32 (USER.391) * UserSignalProc (USER32.@) * * The exact meaning of the USER signals is undocumented, but this * should cover the basic idea: * * USIG_DLL_UNLOAD_WIN16 * This is sent when a 16-bit module is unloaded. * * USIG_DLL_UNLOAD_WIN32 * This is sent when a 32-bit module is unloaded. * * USIG_DLL_UNLOAD_ORPHANS * This is sent after the last Win3.1 module is unloaded, * to allow removal of orphaned menus. * * USIG_FAULT_DIALOG_PUSH * USIG_FAULT_DIALOG_POP * These are called to allow USER to prepare for displaying a * fault dialog, even though the fault might have happened while * inside a USER critical section. * * USIG_THREAD_INIT * This is called from the context of a new thread, as soon as it * has started to run. * * USIG_THREAD_EXIT * This is called, still in its context, just before a thread is * about to terminate. * * USIG_PROCESS_CREATE * This is called, in the parent process context, after a new process * has been created. * * USIG_PROCESS_INIT * This is called in the new process context, just after the main thread * has started execution (after the main thread's USIG_THREAD_INIT has * been sent). * * USIG_PROCESS_LOADED * This is called after the executable file has been loaded into the * new process context. * * USIG_PROCESS_RUNNING * This is called immediately before the main entry point is called. * * USIG_PROCESS_EXIT * This is called in the context of a process that is about to * terminate (but before the last thread's USIG_THREAD_EXIT has * been sent). * * USIG_PROCESS_DESTROY * This is called after a process has terminated. * * * The meaning of the dwFlags bits is as follows: * * USIG_FLAGS_WIN32 * Current process is 32-bit. * * USIG_FLAGS_GUI * Current process is a (Win32) GUI process. * * USIG_FLAGS_FEEDBACK * Current process needs 'feedback' (determined from the STARTUPINFO * flags STARTF_FORCEONFEEDBACK / STARTF_FORCEOFFFEEDBACK). * * USIG_FLAGS_FAULT * The signal is being sent due to a fault. */ WORD WINAPI UserSignalProc(UINT uCode, DWORD dwThreadOrProcessID, DWORD dwFlags, HMODULE16 hModule) { FIXME("(%04x, %08x, %04x, %04x)\n", uCode, dwThreadOrProcessID, dwFlags, hModule); /* FIXME: Should chain to GdiSignalProc now. */ return 0; } /* wine adb926d5a5032130d55e4d39316efdb11cc1fe1d/dlls/gdi32/font.c */ /*********************************************************************** * GdiGetCharDimensions (GDI32.@) * * Gets the average width of the characters in the English alphabet. * * PARAMS * hdc [I] Handle to the device context to measure on. * lptm [O] Pointer to memory to store the text metrics into. * height [O] On exit, the maximum height of characters in the English alphabet. * * RETURNS * The average width of characters in the English alphabet. * * NOTES * This function is used by the dialog manager to get the size of a dialog * unit. It should also be used by other pieces of code that need to know * the size of a dialog unit in logical units without having access to the * window handle of the dialog. * Windows caches the font metrics from this function, but we don't and * there doesn't appear to be an immediate advantage to do so. * * SEE ALSO * GetTextExtentPointW, GetTextMetricsW, MapDialogRect. */ LONG WINAPI GdiGetCharDimensions(HDC hdc, LPTEXTMETRICW lptm, LONG *height) { SIZE sz; static const WCHAR alphabet[] = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q', 'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H', 'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',0}; if(lptm && !GetTextMetricsW(hdc, lptm)) return 0; if(!GetTextExtentPointW(hdc, alphabet, 52, &sz)) return 0; if (height) *height = sz.cy; return (sz.cx / 26 + 1) / 2; } ================================================ FILE: user/user.c ================================================ /* * Misc 16-bit USER functions * * Copyright 1993, 1996 Alexandre Julliard * Copyright 2002 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include #define OEMRESOURCE #include "wine/winuser16.h" #include "windef.h" #include "winbase.h" #include "wownt32.h" #include "user_private.h" #include "wine/list.h" #include "wine/debug.h" #include "winver.h" #define COBJMACROS #include "shldisp.h" #include "wine/exception.h" WINE_DEFAULT_DEBUG_CHANNEL(user); /* handle to handle 16 conversions */ #define HANDLE_16(h32) HWND_16(h32) /* (LOWORD(h32)) */ #define HGDIOBJ_16(h32) HDC_16(h32) /* (LOWORD(h32)) */ /* handle16 to handle conversions */ #define HANDLE_32(h16) HWND_32(h16) /* ((HANDLE)(ULONG_PTR)(h16)) */ #define HGDIOBJ_32(h16) HDC_32(h16) /* ((HGDIOBJ)(ULONG_PTR)(h16)) */ #define IS_MENU_STRING_ITEM(flags) \ (((flags) & (MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_SEPARATOR)) == MF_STRING) /* UserSeeUserDo parameters */ #define USUD_LOCALALLOC 0x0001 #define USUD_LOCALFREE 0x0002 #define USUD_LOCALCOMPACT 0x0003 #define USUD_LOCALHEAP 0x0004 #define USUD_FIRSTCLASS 0x0005 #define CID_RESOURCE 0x0001 #define CID_WIN32 0x0004 #define CID_NONSHARED 0x0008 WORD USER_HeapSel = 0; /* USER heap selector */ static HINSTANCE16 gdi_inst; struct gray_string_info { GRAYSTRINGPROC16 proc; LPARAM param; char str[1]; }; /* KRNL386 */ BOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst); /* callback for 16-bit gray string proc with opaque pointer */ static BOOL CALLBACK gray_string_callback( HDC hdc, LPARAM param, INT len ) { const struct gray_string_info *info = (struct gray_string_info *)param; WORD args[4]; DWORD ret; args[3] = HDC_16(hdc); args[2] = HIWORD(info->param); args[1] = LOWORD(info->param); args[0] = len; WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret ); return LOWORD(ret); } /* callback for 16-bit gray string proc with string pointer */ static BOOL CALLBACK gray_string_callback_ptr( HDC hdc, LPARAM param, INT len ) { const struct gray_string_info *info = CONTAINING_RECORD( (void *)param, struct gray_string_info, str ); return gray_string_callback( hdc, (LPARAM)info, len ); } struct draw_state_info { DRAWSTATEPROC16 proc; LPARAM param; }; /* callback for 16-bit DrawState functions */ static BOOL CALLBACK draw_state_callback( HDC hdc, LPARAM lparam, WPARAM wparam, int cx, int cy ) { const struct draw_state_info *info = (struct draw_state_info *)lparam; WORD args[6]; DWORD ret; args[5] = HDC_16(hdc); args[4] = HIWORD(info->param); args[3] = LOWORD(info->param); args[2] = wparam; args[1] = cx; args[0] = cy; WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret ); return LOWORD(ret); } /* This function is a copy of the one in objects/font.c */ static void logfont_32_to_16( const LOGFONTA* font32, LPLOGFONT16 font16 ) { font16->lfHeight = font32->lfHeight; font16->lfWidth = font32->lfWidth; font16->lfEscapement = font32->lfEscapement; font16->lfOrientation = font32->lfOrientation; font16->lfWeight = font32->lfWeight; font16->lfItalic = font32->lfItalic; font16->lfUnderline = font32->lfUnderline; font16->lfStrikeOut = font32->lfStrikeOut; font16->lfCharSet = font32->lfCharSet; font16->lfOutPrecision = font32->lfOutPrecision; font16->lfClipPrecision = font32->lfClipPrecision; font16->lfQuality = font32->lfQuality; font16->lfPitchAndFamily = font32->lfPitchAndFamily; lstrcpynA( font16->lfFaceName, font32->lfFaceName, LF_FACESIZE ); //SYSTEM FONT //lstrcpynA(font16->lfFaceName, "SYSTEM", LF_FACESIZE); } static int get_bitmap_width_bytes( int width, int bpp ) { switch(bpp) { case 1: return 2 * ((width+15) / 16); case 4: return 2 * ((width+3) / 4); case 24: width *= 3; /* fall through */ case 8: return width + (width & 1); case 16: case 15: return width * 2; case 32: return width * 4; default: WARN("Unknown depth %d, please report.\n", bpp ); } return -1; } static HPALETTE realizedpal = 0; int WINAPI set_realized_palette(HDC hdc) { HPALETTE hpal = GetCurrentObject(hdc, OBJ_PAL); if (!hpal) return 0; realizedpal = hpal; return GetPaletteEntries(hpal, 0, 0, NULL); //TODO: adjust palette for usage } HPALETTE WINAPI get_realized_palette() { if (!realizedpal || (GetObjectType(realizedpal) != OBJ_PAL)) { realizedpal = 0; return GetStockObject(DEFAULT_PALETTE); } return realizedpal; } /*********************************************************************** * Helper for wsprintf16 */ #define WPRINTF_LEFTALIGN 0x0001 /* Align output on the left ('-' prefix) */ #define WPRINTF_PREFIX_HEX 0x0002 /* Prefix hex with 0x ('#' prefix) */ #define WPRINTF_ZEROPAD 0x0004 /* Pad with zeros ('0' prefix) */ #define WPRINTF_LONG 0x0008 /* Long arg ('l' prefix) */ #define WPRINTF_SHORT 0x0010 /* Short arg ('h' prefix) */ #define WPRINTF_UPPER_HEX 0x0020 /* Upper-case hex ('X' specifier) */ typedef enum { WPR_UNKNOWN, WPR_CHAR, WPR_STRING, WPR_SIGNED, WPR_UNSIGNED, WPR_HEXA } WPRINTF_TYPE; typedef struct { UINT flags; UINT width; UINT precision; WPRINTF_TYPE type; } WPRINTF_FORMAT; static INT parse_format( LPCSTR format, WPRINTF_FORMAT *res ) { LPCSTR p = format; res->flags = 0; res->width = 0; res->precision = 0; if (*p == '-') { res->flags |= WPRINTF_LEFTALIGN; p++; } if (*p == '#') { res->flags |= WPRINTF_PREFIX_HEX; p++; } if (*p == '0') { res->flags |= WPRINTF_ZEROPAD; p++; } while ((*p >= '0') && (*p <= '9')) /* width field */ { res->width = res->width * 10 + *p - '0'; p++; } if (*p == '.') /* precision field */ { p++; while ((*p >= '0') && (*p <= '9')) { res->precision = res->precision * 10 + *p - '0'; p++; } } if (*p == 'l') { res->flags |= WPRINTF_LONG; p++; } else if (*p == 'h') { res->flags |= WPRINTF_SHORT; p++; } switch(*p) { case 'c': case 'C': /* no Unicode in Win16 */ res->type = WPR_CHAR; break; case 's': case 'S': res->type = WPR_STRING; break; case 'd': case 'i': res->type = WPR_SIGNED; break; case 'u': res->type = WPR_UNSIGNED; break; case 'p': res->width = 8; res->flags |= WPRINTF_ZEROPAD; /* fall through */ case 'X': res->flags |= WPRINTF_UPPER_HEX; /* fall through */ case 'x': res->type = WPR_HEXA; break; default: /* unknown format char */ res->type = WPR_UNKNOWN; p--; /* print format as normal char */ break; } return (INT)(p - format) + 1; } /********************************************************************** * Management of the 16-bit cursors and icons */ struct cache_entry { struct list entry; HINSTANCE16 inst; HRSRC16 rsrc; HRSRC16 group; HICON16 icon; INT count; }; static struct list icon_cache = LIST_INIT( icon_cache ); static const WORD ICON_HOTSPOT = 0x4242; static HICON16 alloc_icon_handle( unsigned int size ) { HGLOBAL16 handle = GlobalAlloc16( GMEM_MOVEABLE, size + sizeof(ULONG_PTR) ); char *ptr = GlobalLock16( handle ); memset( ptr + size, 0, sizeof(ULONG_PTR) ); GlobalUnlock16( handle ); FarSetOwner16( handle, 0 ); return handle; } static CURSORICONINFO *get_icon_ptr( HICON16 handle ) { return GlobalLock16( handle ); } static void release_icon_ptr( HICON16 handle, CURSORICONINFO *ptr ) { GlobalUnlock16( handle ); } static HICON store_icon_32( HICON16 icon16, HICON icon ) { HICON ret = 0; CURSORICONINFO *ptr = get_icon_ptr( icon16 ); if (ptr) { unsigned int and_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, 1 ); unsigned int xor_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, ptr->bBitsPerPixel ); if (GlobalSize16( icon16 ) >= sizeof(*ptr) + sizeof(ULONG_PTR) + and_size + xor_size ) { memcpy( &ret, (char *)(ptr + 1) + and_size + xor_size, sizeof(ret) ); memcpy( (char *)(ptr + 1) + and_size + xor_size, &icon, sizeof(icon) ); wow_handlers32.set_icon_param( icon, icon16 ); } release_icon_ptr( icon16, ptr ); } return ret; } static int free_icon_handle( HICON16 handle ) { HICON icon32; if ((icon32 = wow_handlers32.get_icon_param( handle ))) DestroyIcon( icon32 ); wow_handlers32.set_icon_param( handle, 0); return GlobalFree16( handle ); } /* retrieve the 32-bit counterpart of a 16-bit icon, creating it if needed */ HICON get_icon_32( HICON16 icon16 ) { HICON ret = 0; CURSORICONINFO *ptr = get_icon_ptr( icon16 ); if (ptr) { unsigned int and_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, 1 ); unsigned int xor_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, ptr->bBitsPerPixel ); if (GlobalSize16( icon16 ) >= sizeof(*ptr) + sizeof(ULONG_PTR) + xor_size + and_size ) { memcpy( &ret, (char *)(ptr + 1) + xor_size + and_size, sizeof(ret) ); if (!ret) { ICONINFO iinfo; iinfo.fIcon = (ptr->ptHotSpot.x == ICON_HOTSPOT) && (ptr->ptHotSpot.y == ICON_HOTSPOT); iinfo.xHotspot = ptr->ptHotSpot.x; iinfo.yHotspot = ptr->ptHotSpot.y; if ((ptr->bBitsPerPixel * ptr->bPlanes) > 1) { iinfo.hbmMask = CreateBitmap( ptr->nWidth, ptr->nHeight, 1, 1, ptr + 1 ); iinfo.hbmColor = CreateBitmap( ptr->nWidth, ptr->nHeight, ptr->bPlanes, ptr->bBitsPerPixel, (char *)(ptr + 1) + and_size ); } else { iinfo.hbmMask = CreateBitmap( ptr->nWidth, ptr->nHeight * 2, 1, 1, ptr + 1 ); iinfo.hbmColor = NULL; } ret = CreateIconIndirect( &iinfo ); DeleteObject( iinfo.hbmMask ); if (iinfo.hbmColor) DeleteObject( iinfo.hbmColor ); memcpy( (char *)(ptr + 1) + xor_size + and_size, &ret, sizeof(ret) ); wow_handlers32.set_icon_param( ret, icon16 ); } } release_icon_ptr( icon16, ptr ); } return ret; } struct hicons { HICON oldicon; HICON newicon; }; BOOL CALLBACK enum_cur_wnd(HWND hwnd, LPARAM lparam) { struct hicons *icons = (struct hicons *)lparam; if (GetClassLongA(hwnd, GCL_HCURSOR) == icons->oldicon) SetClassLongA(hwnd, GCL_HCURSOR, icons->newicon); return TRUE; } void regen_icon(HICON16 icon) { CURSORICONINFO *ptr = get_icon_ptr( icon ); if (ptr) { unsigned int and_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, 1 ); unsigned int xor_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, ptr->bBitsPerPixel ); if (GlobalSize16( icon ) >= sizeof(*ptr) + sizeof(ULONG_PTR) + xor_size + and_size ) { DWORD *hiconptr = (DWORD *)((char *)(ptr + 1) + xor_size + and_size); HICON oldicon = *(HICON *)hiconptr, newicon; if (oldicon) { *hiconptr = 0; if (newicon = get_icon_32(icon)) { struct hicons icons = {oldicon, newicon}; // TODO: all window classes EnumThreadWindows(GetCurrentThreadId(), enum_cur_wnd, (LPARAM)&icons); if (GetCursor() == oldicon) SetCursor(newicon); DestroyIcon(oldicon); } else *hiconptr = oldicon; } } } } /* retrieve the 16-bit counterpart of a 32-bit icon, creating it if needed */ HICON16 get_icon_16( HICON icon ) { HICON16 ret = wow_handlers32.get_icon_param( icon ); if (!ret) { ICONINFO info; BITMAP bm; UINT and_size, xor_size; void *xor_bits = NULL, *and_bits; CURSORICONINFO cinfo; if (!(GetIconInfo( icon, &info ))) return 0; GetObjectW( info.hbmMask, sizeof(bm), &bm ); and_size = bm.bmHeight * bm.bmWidthBytes; if (!(and_bits = HeapAlloc( GetProcessHeap(), 0, and_size ))) goto done; GetBitmapBits( info.hbmMask, and_size, and_bits ); if (info.hbmColor) { GetObjectW( info.hbmColor, sizeof(bm), &bm ); xor_size = bm.bmHeight * bm.bmWidthBytes; if (!(xor_bits = HeapAlloc( GetProcessHeap(), 0, xor_size ))) goto done; GetBitmapBits( info.hbmColor, xor_size, xor_bits ); } else { bm.bmHeight /= 2; xor_bits = (char *)and_bits + and_size / 2; } if (!info.fIcon) { cinfo.ptHotSpot.x = info.xHotspot; cinfo.ptHotSpot.y = info.yHotspot; } else cinfo.ptHotSpot.x = cinfo.ptHotSpot.y = ICON_HOTSPOT; cinfo.nWidth = bm.bmWidth; cinfo.nHeight = bm.bmHeight; cinfo.nWidthBytes = bm.bmWidthBytes; cinfo.bPlanes = bm.bmPlanes; cinfo.bBitsPerPixel = bm.bmBitsPixel; if ((ret = CreateCursorIconIndirect16( 0, &cinfo, and_bits, xor_bits ))) store_icon_32( ret, icon ); done: if (info.hbmColor) { HeapFree( GetProcessHeap(), 0, xor_bits ); DeleteObject( info.hbmColor ); } HeapFree( GetProcessHeap(), 0, and_bits ); DeleteObject( info.hbmMask ); } return ret; } static void add_shared_icon( HINSTANCE16 inst, HRSRC16 rsrc, HRSRC16 group, HICON16 icon ) { struct cache_entry *cache = HeapAlloc( GetProcessHeap(), 0, sizeof(*cache) ); if (!cache) return; cache->inst = inst; cache->rsrc = rsrc; cache->group = group; cache->icon = icon; cache->count = 1; list_add_tail( &icon_cache, &cache->entry ); } static HICON16 find_shared_icon( HINSTANCE16 inst, HRSRC16 rsrc ) { struct cache_entry *cache; LIST_FOR_EACH_ENTRY( cache, &icon_cache, struct cache_entry, entry ) { if (cache->inst != inst || cache->rsrc != rsrc) continue; cache->count++; return cache->icon; } return 0; } static int release_shared_icon( HICON16 icon ) { struct cache_entry *cache; LIST_FOR_EACH_ENTRY( cache, &icon_cache, struct cache_entry, entry ) { if (cache->icon != icon) continue; if (!cache->count) return 0; return --cache->count; } return -1; } static void free_module_icons( HINSTANCE16 inst ) { struct cache_entry *cache, *next; LIST_FOR_EACH_ENTRY_SAFE( cache, next, &icon_cache, struct cache_entry, entry ) { if (cache->inst != inst) continue; list_remove( &cache->entry ); free_icon_handle( cache->icon ); HeapFree( GetProcessHeap(), 0, cache ); } } /********************************************************************** * Management of the 16-bit clipboard formats */ struct clipboard_format { struct list entry; UINT format; HANDLE16 data; }; static struct list clipboard_formats = LIST_INIT( clipboard_formats ); static void set_clipboard_format( UINT format, HANDLE16 data ) { struct clipboard_format *fmt; /* replace it if it exists already */ LIST_FOR_EACH_ENTRY( fmt, &clipboard_formats, struct clipboard_format, entry ) { if (fmt->format != format) continue; GlobalFree16( fmt->data ); fmt->data = data; return; } if ((fmt = HeapAlloc( GetProcessHeap(), 0, sizeof(*fmt) ))) { fmt->format = format; fmt->data = data; list_add_tail( &clipboard_formats, &fmt->entry ); } } static void free_clipboard_formats(void) { struct list *head; while ((head = list_head( &clipboard_formats ))) { struct clipboard_format *fmt = LIST_ENTRY( head, struct clipboard_format, entry ); list_remove( &fmt->entry ); GlobalFree16( fmt->data ); HeapFree( GetProcessHeap(), 0, fmt ); } } /*********************************************************************** * OldExitWindows (USER.2) */ void WINAPI OldExitWindows16(void) { ExitWindows16(0, 0); } HQUEUE16 hqFirst; /********************************************************************** * InitApp (USER.5) */ INT16 WINAPI InitApp16( HINSTANCE16 hInstance ) { HGLOBAL hqueue = GlobalAlloc16(GMEM_ZEROINIT | GMEM_SHARE, 0x120); QUEUE16 *queue; TDB *tdb = (TDB*)GlobalLock16(GetCurrentTask()); tdb->hQueue = hqueue; queue = (QUEUE16*)GlobalLock16(hqueue); if (!hqFirst) { hqFirst = hqueue; } else { queue->next = hqFirst; hqFirst = hqueue; } queue->hTask = GetCurrentTask(); queue->cbMessage = 0x16; queue->read = 0x6e; queue->write = 0x6e; queue->cbSize = 0x11e; queue->expVer = tdb->version; void install_global_hook(); install_global_hook(); /* Create task message queue */ return (InitThreadInput16( 0, 0 ) != 0); } static DWORD WINAPI exit_thread(LPVOID param) { IShellDispatch *shelldisp; HRESULT hres; CoInitialize(NULL); hres = CoCreateInstance(&CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, &IID_IShellDispatch, (void **)&shelldisp); if (SUCCEEDED(hres)) { IShellDispatch_ShutdownWindows(shelldisp); IShellDispatch_Release(shelldisp); } CoUninitialize(); return 0; } /*********************************************************************** * ExitWindows (USER.7) */ BOOL16 WINAPI ExitWindows16( DWORD dwReturnCode, UINT16 wReserved ) { HANDLE exitth = CreateThread(NULL, 0, exit_thread, 0, 0, NULL); WaitForSingleObject(exitth, INFINITE); CloseHandle(exitth); ExitProcess(0); } /*********************************************************************** * GetTimerResolution (USER.14) */ LONG WINAPI GetTimerResolution16(void) { return (1000); } /*********************************************************************** * ClipCursor (USER.16) */ BOOL16 WINAPI ClipCursor16( const RECT16 *rect ) { RECT rect32; if (!rect) return ClipCursor( NULL ); rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; return ClipCursor( &rect32 ); } /*********************************************************************** * GetCursorPos (USER.17) */ BOOL16 WINAPI GetCursorPos16( POINT16 *pt ) { POINT pos; if (!pt) return FALSE; GetCursorPos(&pos); pt->x = pos.x; pt->y = pos.y; return TRUE; } /******************************************************************* * AnyPopup (USER.52) */ BOOL16 WINAPI AnyPopup16(void) { return AnyPopup(); } /*********************************************************************** * SetCursor (USER.69) */ HCURSOR16 WINAPI SetCursor16(HCURSOR16 hCursor) { return get_icon_16( SetCursor( get_icon_32(hCursor) )); } /*********************************************************************** * SetCursorPos (USER.70) */ void WINAPI SetCursorPos16( INT16 x, INT16 y ) { SetCursorPos( x, y ); } /*********************************************************************** * ShowCursor (USER.71) */ INT16 WINAPI ShowCursor16(BOOL16 bShow) { return ShowCursor(bShow); } /*********************************************************************** * SetRect (USER.72) */ void WINAPI SetRect16( LPRECT16 rect, INT16 left, INT16 top, INT16 right, INT16 bottom ) { rect->left = left; rect->right = right; rect->top = top; rect->bottom = bottom; } /*********************************************************************** * SetRectEmpty (USER.73) */ void WINAPI SetRectEmpty16( LPRECT16 rect ) { rect->left = rect->right = rect->top = rect->bottom = 0; } /*********************************************************************** * CopyRect (USER.74) */ BOOL16 WINAPI CopyRect16( RECT16 *dest, const RECT16 *src ) { __TRY { *dest = *src; } __EXCEPT_ALL { return FALSE; } __ENDTRY return TRUE; } /*********************************************************************** * IsRectEmpty (USER.75) * * Bug compat: Windows checks for 0 or negative width/height. */ BOOL16 WINAPI IsRectEmpty16( const RECT16 *rect ) { BOOL16 ret; __TRY { ret = ((rect->left >= rect->right) || (rect->top >= rect->bottom)); } __EXCEPT_ALL { ret = TRUE; } __ENDTRY return ret; } /*********************************************************************** * PtInRect (USER.76) */ BOOL16 WINAPI PtInRect16( const RECT16 *rect, POINT16 pt ) { if (IsRectEmpty16(rect)) return FALSE; return ((pt.x >= rect->left) && (pt.x < rect->right) && (pt.y >= rect->top) && (pt.y < rect->bottom)); } /*********************************************************************** * OffsetRect (USER.77) */ void WINAPI OffsetRect16( LPRECT16 rect, INT16 x, INT16 y ) { rect->left += x; rect->right += x; rect->top += y; rect->bottom += y; } /*********************************************************************** * InflateRect (USER.78) */ void WINAPI InflateRect16( LPRECT16 rect, INT16 x, INT16 y ) { rect->left -= x; rect->top -= y; rect->right += x; rect->bottom += y; } /*********************************************************************** * IntersectRect (USER.79) */ BOOL16 WINAPI IntersectRect16( LPRECT16 dest, const RECT16 *src1, const RECT16 *src2 ) { if (IsRectEmpty16(src1) || IsRectEmpty16(src2) || (src1->left >= src2->right) || (src2->left >= src1->right) || (src1->top >= src2->bottom) || (src2->top >= src1->bottom)) { SetRectEmpty16( dest ); return FALSE; } dest->left = max( src1->left, src2->left ); dest->right = min( src1->right, src2->right ); dest->top = max( src1->top, src2->top ); dest->bottom = min( src1->bottom, src2->bottom ); return TRUE; } /*********************************************************************** * UnionRect (USER.80) */ BOOL16 WINAPI UnionRect16( LPRECT16 dest, const RECT16 *src1, const RECT16 *src2 ) { if (IsRectEmpty16(src1)) { if (IsRectEmpty16(src2)) { SetRectEmpty16( dest ); return FALSE; } else *dest = *src2; } else { if (IsRectEmpty16(src2)) *dest = *src1; else { dest->left = min( src1->left, src2->left ); dest->right = max( src1->right, src2->right ); dest->top = min( src1->top, src2->top ); dest->bottom = max( src1->bottom, src2->bottom ); } } return TRUE; } /*********************************************************************** * FillRect (USER.81) * NOTE * The Win16 variant doesn't support special color brushes like * the Win32 one, despite the fact that Win16, as well as Win32, * supports special background brushes for a window class. */ INT16 WINAPI FillRect16( HDC16 hdc, const RECT16 *rect, HBRUSH16 hbrush ) { /*RECT r32; r32.bottom = rect->bottom; r32.left = rect->left; r32.right = rect->right; r32.top = rect->top; HBRUSH hb = HBRUSH_32(hbrush); HDC hd = HDC_32(hdc); int ret = FillRect(hd, &r32, hb); return ret;*/ HBRUSH prevBrush; HBRUSH hbrush32 = HBRUSH_32(hbrush); HDC hdc32 = HDC_32(hdc); if (!(prevBrush = SelectObject( hdc32, hbrush32 ))) return 0; if (krnl386_get_compat_mode("256color") && krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY)) { DIBSECTION dib; HBITMAP hbmp = GetCurrentObject(hdc32, OBJ_BITMAP); int count = GetObject(hbmp, sizeof(DIBSECTION), &dib); if ((count == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(hbmp), 1) == 0xd1b00001)) { LOGBRUSH lb; count = GetObject(hbrush32, sizeof(LOGBRUSH), &lb); if ((count == sizeof(LOGBRUSH)) && (lb.lbStyle == BS_SOLID) && ((lb.lbColor >> 24) == 1)) { HBRUSH newbrush = CreateSolidBrush((lb.lbColor & 0xff) | 0x10ff0000); SelectObject( hdc32, newbrush ); PatBlt( hdc32, rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top, PATCOPY ); SelectObject( hdc32, prevBrush ); DeleteObject( newbrush ); return 1; } } } /* coordinates are logical so we cannot fast-check 'rect', * it will be done later in the PatBlt(). */ PatBlt( hdc32, rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top, PATCOPY ); SelectObject( hdc32, prevBrush ); return 1; } /*********************************************************************** * InvertRect (USER.82) */ void WINAPI InvertRect16( HDC16 hdc, const RECT16 *rect ) { PatBlt( HDC_32(hdc), rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top, DSTINVERT ); } /*********************************************************************** * FrameRect (USER.83) */ INT16 WINAPI FrameRect16( HDC16 hdc, const RECT16 *rect16, HBRUSH16 hbrush ) { RECT rect; rect.left = rect16->left; rect.top = rect16->top; rect.right = rect16->right; rect.bottom = rect16->bottom; return FrameRect( HDC_32(hdc), &rect, HBRUSH_32(hbrush) ); } /*********************************************************************** * DrawIcon (USER.84) */ BOOL16 WINAPI DrawIcon16(HDC16 hdc, INT16 x, INT16 y, HICON16 hIcon) { return DrawIcon(HDC_32(hdc), x, y, get_icon_32(hIcon) ); } /*********************************************************************** * DrawText (USER.85) */ INT16 WINAPI DrawText16( HDC16 hdc, LPCSTR str, INT16 count, LPRECT16 rect, UINT16 flags ) { INT16 ret; __TRY { if (rect) { RECT rect32; rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; ret = DrawTextA( HDC_32(hdc), str, count, &rect32, flags ); rect->left = rect32.left; rect->top = rect32.top; rect->right = rect32.right; rect->bottom = rect32.bottom; } else ret = DrawTextA( HDC_32(hdc), str, count, NULL, flags); } __EXCEPT_ALL { ret = 0; } __ENDTRY return ret; } /*********************************************************************** * IconSize (USER.86) * * See "Undocumented Windows". Used by W2.0 paint.exe. */ DWORD WINAPI IconSize16(void) { return MAKELONG(GetSystemMetrics(SM_CYICON), GetSystemMetrics(SM_CXICON)); } /*********************************************************************** * AdjustWindowRect (USER.102) */ BOOL16 WINAPI AdjustWindowRect16( LPRECT16 rect, DWORD style, BOOL16 menu ) { return AdjustWindowRectEx16( rect, style, menu, 0 ); } /*********************************************************************** * MessageBeep (USER.104) */ void WINAPI MessageBeep16( UINT16 i ) { MessageBeep( i ); } /************************************************************************** * CloseClipboard (USER.138) */ BOOL16 WINAPI CloseClipboard16(void) { BOOL ret = CloseClipboard(); /* Clipboard data is still kept after calling CloseClipboard */ if (0) { if (ret) free_clipboard_formats(); } return ret; } /************************************************************************** * EmptyClipboard (USER.139) */ BOOL16 WINAPI EmptyClipboard16(void) { BOOL ret = EmptyClipboard(); if (ret) free_clipboard_formats(); return ret; } HANDLE convert_cb_data_16_32(int format, HANDLE16 data16, BOOL set_format) { HANDLE data32 = 0; switch (format) { case CF_BITMAP: { DIBSECTION dib; data32 = HGDIOBJ_32(data16); if (GetObject(data32, sizeof(DIBSECTION), &dib) == sizeof(DIBSECTION)) { HDC hdcsrc = CreateCompatibleDC(NULL); HDC hdcdst = CreateCompatibleDC(NULL); HDC hdc = GetDC(NULL); HBITMAP hbmp = CreateCompatibleBitmap(hdc, dib.dsBm.bmWidth, dib.dsBm.bmHeight); ReleaseDC(NULL, hdc); HBITMAP oldhbmpsrc = SelectObject(hdcsrc, data32); HBITMAP oldhbmpdst = SelectObject(hdcdst, hbmp); BitBlt(hdcdst, 0, 0, dib.dsBm.bmWidth, dib.dsBm.bmHeight, hdcsrc, 0, 0, SRCCOPY); SelectObject(hdcsrc, oldhbmpsrc); SelectObject(hdcdst, oldhbmpdst); DeleteDC(hdcsrc); DeleteDC(hdcdst); DeleteObject(data32); data32 = hbmp; } break; } case CF_PALETTE: data32 = HGDIOBJ_32( data16 ); break; case CF_METAFILEPICT: { METAHEADER *header; METAFILEPICT *pict32; METAFILEPICT16 *pict16 = GlobalLock16( data16 ); if (pict16) { if (!(data32 = GlobalAlloc( GMEM_MOVEABLE, sizeof(*pict32) ))) return 0; pict32 = GlobalLock( data32 ); pict32->mm = pict16->mm; pict32->xExt = pict16->xExt; pict32->yExt = pict16->yExt; header = GlobalLock16( pict16->hMF ); pict32->hMF = SetMetaFileBitsEx( header->mtSize * 2, (BYTE *)header ); GlobalUnlock16( pict16->hMF ); GlobalUnlock( data32 ); } if (set_format) set_clipboard_format( format, data16 ); break; } case CF_ENHMETAFILE: FIXME( "enhmetafile not supported in 16-bit\n" ); return 0; default: if (format >= CF_GDIOBJFIRST && format <= CF_GDIOBJLAST) data32 = HGDIOBJ_32( data16 ); else if (format >= CF_PRIVATEFIRST && format <= CF_PRIVATELAST) data32 = HANDLE_32( data16 ); else { UINT size = GlobalSize16( data16 ); void *ptr32, *ptr16 = GlobalLock16( data16 ); if (ptr16) { if (!(data32 = GlobalAlloc( GMEM_MOVEABLE, size ))) return 0; ptr32 = GlobalLock( data32 ); memcpy( ptr32, ptr16, size ); GlobalUnlock( data32 ); } if (set_format) set_clipboard_format( format, data16 ); } break; } return data32; } /************************************************************************** * SetClipboardData (USER.141) */ HANDLE16 WINAPI SetClipboardData16( UINT16 format, HANDLE16 data16 ) { if (!SetClipboardData( format, convert_cb_data_16_32(format, data16, TRUE) )) return 0; return data16; } HANDLE16 convert_cb_data_32_16(int format, HANDLE data32, BOOL set_format) { UINT size; HANDLE16 data16 = 0; void *ptr; switch (format) { case CF_BITMAP: case CF_PALETTE: data16 = HGDIOBJ_16( data32 ); break; case CF_METAFILEPICT: { METAFILEPICT16 *pict16; METAFILEPICT *pict32 = GlobalLock( data32 ); if (pict32) { if (!(data16 = GlobalAlloc16( GMEM_MOVEABLE, sizeof(*pict16) ))) return 0; pict16 = GlobalLock16( data16 ); pict16->mm = pict32->mm; pict16->xExt = pict32->xExt; pict16->yExt = pict32->yExt; size = GetMetaFileBitsEx( pict32->hMF, 0, NULL ); pict16->hMF = GlobalAlloc16( GMEM_MOVEABLE, size ); ptr = GlobalLock16( pict16->hMF ); GetMetaFileBitsEx( pict32->hMF, size, ptr ); GlobalUnlock16( pict16->hMF ); GlobalUnlock16( data16 ); if (set_format) set_clipboard_format( format, data16 ); } break; } case CF_ENHMETAFILE: FIXME( "enhmetafile not supported in 16-bit\n" ); return 0; default: if (format >= CF_GDIOBJFIRST && format <= CF_GDIOBJLAST) data16 = HGDIOBJ_16( data32 ); else if (format >= CF_PRIVATEFIRST && format <= CF_PRIVATELAST) data16 = HANDLE_16( data32 ); else { void *ptr16, *ptr32 = GlobalLock( data32 ); if (ptr32) { size = GlobalSize( data32 ); if (!(data16 = GlobalAlloc16( GMEM_MOVEABLE, size ))) return 0; ptr16 = GlobalLock16( data16 ); memcpy( ptr16, ptr32, size ); GlobalUnlock16( data16 ); if (set_format) set_clipboard_format( format, data16 ); } } break; } return data16; } /************************************************************************** * GetClipboardData (USER.142) */ HANDLE16 WINAPI GetClipboardData16( UINT16 format ) { HANDLE data32 = GetClipboardData( format ); if (!data32) return 0; return convert_cb_data_32_16(format, data32, TRUE); } /************************************************************************** * CountClipboardFormats (USER.143) */ INT16 WINAPI CountClipboardFormats16(void) { return CountClipboardFormats(); } /************************************************************************** * EnumClipboardFormats (USER.144) */ UINT16 WINAPI EnumClipboardFormats16( UINT16 id ) { return EnumClipboardFormats( id ); } /************************************************************************** * RegisterClipboardFormat (USER.145) */ UINT16 WINAPI RegisterClipboardFormat16( LPCSTR name ) { return RegisterClipboardFormatA( name ); } /************************************************************************** * GetClipboardFormatName (USER.146) */ INT16 WINAPI GetClipboardFormatName16( UINT16 id, LPSTR buffer, INT16 maxlen ) { return GetClipboardFormatNameA( id, buffer, maxlen ); } /********************************************************************** * LoadMenu (USER.150) */ HMENU16 WINAPI LoadMenu16( HINSTANCE16 instance, LPCSTR name ) { HRSRC16 hRsrc; HGLOBAL16 handle; HMENU16 hMenu; if (HIWORD(name) && name[0] == '#') name = ULongToPtr(atoi( name + 1 )); if (!name) return 0; instance = GetExePtr( instance ); if (!(hRsrc = FindResource16( instance, name, (LPSTR)RT_MENU ))) return 0; if (!(handle = LoadResource16( instance, hRsrc ))) return 0; hMenu = LoadMenuIndirect16(K32WOWGlobalLock16(handle)); FreeResource16( handle ); return hMenu; } /********************************************************************** * CreateMenu (USER.151) */ HMENU16 WINAPI CreateMenu16(void) { return HMENU_16( CreateMenu() ); } /********************************************************************** * DestroyMenu (USER.152) */ BOOL16 WINAPI DestroyMenu16( HMENU16 hMenu ) { return DestroyMenu( HMENU_32(hMenu) ); } /******************************************************************* * ChangeMenu (USER.153) */ BOOL16 WINAPI ChangeMenu16( HMENU16 hMenu, UINT16 pos, SEGPTR data, UINT16 id, UINT16 flags ) { if (flags & MF_APPEND) return AppendMenu16( hMenu, flags & ~MF_APPEND, id, data ); /* FIXME: Word passes the item id in 'pos' and 0 or 0xffff as id */ /* for MF_DELETE. We should check the parameters for all others */ /* MF_* actions also (anybody got a doc on ChangeMenu?). */ if (flags & MF_DELETE) return DeleteMenu16(hMenu, pos, flags & ~MF_DELETE); if (flags & MF_CHANGE) return ModifyMenu16(hMenu, pos, flags & ~MF_CHANGE, id, data ); if (flags & MF_REMOVE) return RemoveMenu16(hMenu, flags & MF_BYPOSITION ? pos : id, flags & ~MF_REMOVE ); /* Default: MF_INSERT */ return InsertMenu16( hMenu, pos, flags, id, data ); } /******************************************************************* * CheckMenuItem (USER.154) */ BOOL16 WINAPI CheckMenuItem16( HMENU16 hMenu, UINT16 id, UINT16 flags ) { return CheckMenuItem( HMENU_32(hMenu), id, flags ); } /********************************************************************** * EnableMenuItem (USER.155) */ BOOL16 WINAPI EnableMenuItem16( HMENU16 hMenu, UINT16 wItemID, UINT16 wFlags ) { return EnableMenuItem( HMENU_32(hMenu), wItemID, wFlags ); } /********************************************************************** * GetSubMenu (USER.159) */ HMENU16 WINAPI GetSubMenu16( HMENU16 hMenu, INT16 nPos ) { return HMENU_16( GetSubMenu( HMENU_32(hMenu), nPos ) ); } /******************************************************************* * GetMenuString (USER.161) */ INT16 WINAPI GetMenuString16( HMENU16 hMenu, UINT16 wItemID, LPSTR str, INT16 nMaxSiz, UINT16 wFlags ) { return GetMenuStringA( HMENU_32(hMenu), wItemID, str, nMaxSiz, wFlags ); } static BOOL is_builtin_winhlp32_stub() { WCHAR windir[MAX_PATH]; WCHAR winhlp32[MAX_PATH]; static BOOL is_stub = FALSE; static BOOL detected; DWORD ret; if (detected) return is_stub; detected = TRUE; GetSystemWindowsDirectoryW(windir, MAX_PATH); ret = SearchPathW(windir, L"winhlp32.exe", NULL, MAX_PATH, winhlp32, NULL); if (ret && ret < MAX_PATH) { DWORD size = GetFileVersionInfoSizeW(winhlp32, NULL); LPVOID vd = HeapAlloc(GetProcessHeap(), 0, size); #ifndef FILE_VER_GET_NEUTRAL #define FILE_VER_GET_NEUTRAL 0x02 #endif #ifndef GetFileVersionInfoSizeEx typedef BOOL (WINAPI*GetFileVersionInfoExW_t)(LPCWSTR lptstrFilename, LPDWORD lpdwHandle, DWORD dwHandle,DWORD dwLen, LPVOID lpData); static GetFileVersionInfoExW_t GetFileVersionInfoExW; if (!GetFileVersionInfoExW) { GetFileVersionInfoExW = (GetFileVersionInfoExW_t)GetProcAddress(GetModuleHandleA("version"), "GetFileVersionInfoExW"); } #endif if (GetFileVersionInfoExW(FILE_VER_GET_NEUTRAL, winhlp32, 0, size, vd)) { WCHAR *internalname = NULL; UINT ulen; if (VerQueryValueW(vd, L"\\StringFileInfo\\040904B0\\InternalName", &internalname, &ulen)) { if (!memcmp(internalname, L"WINHSTB", sizeof(L"WINHSTB"))) { is_stub = TRUE; } } } HeapFree(GetProcessHeap(), 0, vd); } return is_stub; } //winhelp.c BOOL WINAPI wine_WinHelp16A(HWND16 hWnd, LPCSTR lpHelpFile, UINT wCommand, DWORD_PTR dwData, BOOL *success_exec); BOOL WINAPI wine_WinHelp32A(HWND hWnd, LPCSTR lpHelpFile, UINT wCommand, ULONG_PTR dwData, BOOL *success_exec); /********************************************************************** * WinHelp (USER.171) */ BOOL16 WINAPI WinHelp16( HWND16 hWnd, LPCSTR lpHelpFile, UINT16 wCommand, DWORD dwData ) { BOOL ret; DWORD mutex_count; BOOL success_exec = FALSE; //trying to 16bit WINHELP.EXE switch (wCommand) { case HELP_CONTEXT: case HELP_SETCONTENTS: case HELP_CONTENTS: case HELP_CONTEXTPOPUP: case HELP_FORCEFILE: case HELP_HELPONHELP: case HELP_FINDER: case HELP_QUIT: break; case HELP_KEY: case HELP_PARTIALKEY: case HELP_COMMAND: case HELP_SETWINPOS: case HELP_MULTIKEY: dwData = (DWORD)MapSL(dwData); break; default: FIXME("Unknown help command %d\n",wCommand); return FALSE; } ret = wine_WinHelp16A(hWnd, lpHelpFile, wCommand, dwData, &success_exec); if (!success_exec) { if (!is_builtin_winhlp32_stub()) { /* FIXME: some programs expect WinHelp not to yield. (wCommand=HELP_QUIT) */ ReleaseThunkLock(&mutex_count); ret = WinHelpA(WIN_Handle32(hWnd), lpHelpFile, wCommand, dwData); RestoreThunkLock(mutex_count); } else { ret = wine_WinHelp32A(WIN_Handle32(hWnd), lpHelpFile, wCommand, dwData, &success_exec); if (!success_exec) { /* FIXME: some programs expect WinHelp not to yield. (wCommand=HELP_QUIT) */ ReleaseThunkLock(&mutex_count); ret = WinHelpA(WIN_Handle32(hWnd), lpHelpFile, wCommand, dwData); RestoreThunkLock(mutex_count); } } } return ret; } /*********************************************************************** * LoadCursor (USER.173) */ HCURSOR16 WINAPI LoadCursor16(HINSTANCE16 hInstance, LPCSTR name) { return LoadImage16( hInstance, name, IMAGE_CURSOR, 0, 0, LR_SHARED | LR_DEFAULTSIZE ); } /*********************************************************************** * LoadIcon (USER.174) */ HICON16 WINAPI LoadIcon16(HINSTANCE16 hInstance, LPCSTR name) { return LoadImage16( hInstance, name, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE ); } /********************************************************************** * LoadBitmap (USER.175) */ HBITMAP16 WINAPI LoadBitmap16(HINSTANCE16 hInstance, LPCSTR name) { return LoadImage16( hInstance, name, IMAGE_BITMAP, 0, 0, 0 ); } /********************************************************************** * LoadString (USER.176) */ INT16 WINAPI LoadString16( HINSTANCE16 instance, UINT16 resource_id, LPSTR buffer, INT16 buflen ) { HGLOBAL16 hmem = 0; HRSRC16 hrsrc; unsigned char *p; int string_num; int ret; TRACE("inst=%04x id=%04x buff=%p len=%d\n", instance, resource_id, buffer, buflen); hrsrc = FindResource16( instance, MAKEINTRESOURCEA((resource_id>>4)+1), (LPSTR)RT_STRING ); if (!hrsrc) return 0; hmem = LoadResource16( instance, hrsrc ); if (!hmem) return 0; __TRY { if (buflen && buffer) buffer[0] = 0; p = LockResource16(hmem); string_num = resource_id & 0x000f; while (string_num--) p += *p + 1; if (buffer == NULL) ret = *p; else { ret = min(buflen - 1, *p); if (ret > 0) { memcpy(buffer, p + 1, ret); buffer[ret] = '\0'; } else if (buflen > 1) { buffer[0] = '\0'; ret = 0; } TRACE( "%s loaded\n", debugstr_a(buffer)); } } __EXCEPT_ALL { ret = 0; } __ENDTRY FreeResource16( hmem ); return ret; } /********************************************************************** * LoadAccelerators (USER.177) */ HACCEL16 WINAPI LoadAccelerators16(HINSTANCE16 instance, LPCSTR lpTableName) { HRSRC16 hRsrc; HGLOBAL16 hMem; ACCEL16 *table16; HACCEL ret = 0; TRACE("%04x %s\n", instance, debugstr_a(lpTableName) ); if (!(hRsrc = FindResource16( instance, lpTableName, (LPSTR)RT_ACCELERATOR )) || !(hMem = LoadResource16(instance,hRsrc))) { WARN("couldn't find %04x %s\n", instance, debugstr_a(lpTableName)); return 0; } if ((table16 = LockResource16( hMem ))) { DWORD i, count = SizeofResource16( instance, hRsrc ) / sizeof(*table16); ACCEL *table = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*table) ); if (table) { for (i = 0; i < count; i++) { table[i].fVirt = table16[i].fVirt & 0x7f; table[i].key = table16[i].key; table[i].cmd = table16[i].cmd; if (table16[i].fVirt & 0x80) { count = i + 1; break; } } ret = CreateAcceleratorTableA( table, count ); HeapFree( GetProcessHeap(), 0, table ); } } FreeResource16( hMem ); return HACCEL_16(ret); } /*********************************************************************** * GetSystemMetrics (USER.179) */ INT16 WINAPI GetSystemMetrics16( INT16 index ) { static BOOL init_fix_screen_size; static BOOL fix_screen_size; if (!init_fix_screen_size) { init_fix_screen_size = TRUE; fix_screen_size = krnl386_get_config_int("otvdm", "FixScreenSize", FALSE); } /* Fix the size of the screen to the value considering taskbar. */ if (fix_screen_size && (index == SM_CXSCREEN || index == SM_CYSCREEN)) { RECT point; if (SystemParametersInfoA(SPI_GETWORKAREA, 0, &point, FALSE)) { if (index == SM_CXSCREEN) { return point.right - point.left; } if (index == SM_CYSCREEN) { return point.bottom - point.top; } } } if (krnl386_get_compat_mode("640X480")) { switch (index) { case SM_CXSCREEN: case SM_CXFULLSCREEN: return 640; case SM_CYSCREEN: return 480; case SM_CYFULLSCREEN: return 480 - GetSystemMetrics(SM_CYMIN); } } return GetSystemMetrics( index ); } /************************************************************************* * GetSysColor (USER.180) */ COLORREF WINAPI GetSysColor16( INT16 index ) { return GetSysColor( index ); } /************************************************************************* * SetSysColors (USER.181) */ VOID WINAPI SetSysColors16( INT16 count, const INT16 *list16, const COLORREF *values ) { INT i, *list; if ((list = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*list) ))) { for (i = 0; i < count; i++) list[i] = list16[i]; SetSysColors( count, list, values ); HeapFree( GetProcessHeap(), 0, list ); } } /*********************************************************************** * GrayString (USER.185) */ BOOL16 WINAPI GrayString16( HDC16 hdc, HBRUSH16 hbr, GRAYSTRINGPROC16 gsprc, LPARAM lParam, INT16 cch, INT16 x, INT16 y, INT16 cx, INT16 cy ) { BOOL ret; if (!gsprc) return GrayStringA( HDC_32(hdc), HBRUSH_32(hbr), NULL, (LPARAM)MapSL(lParam), cch, x, y, cx, cy ); if (cch == -1 || (cch && cx && cy)) { /* lParam can be treated as an opaque pointer */ struct gray_string_info info; info.proc = gsprc; info.param = lParam; ret = GrayStringA( HDC_32(hdc), HBRUSH_32(hbr), gray_string_callback, (LPARAM)&info, cch, x, y, cx, cy ); } else /* here we need some string conversions */ { char *str16 = MapSL(lParam); struct gray_string_info *info; if (!cch) cch = strlen(str16); info = HeapAlloc( GetProcessHeap(), 0, FIELD_OFFSET( struct gray_string_info, str[cch] )); if (!info) return FALSE; info->proc = gsprc; info->param = lParam; memcpy( info->str, str16, cch ); ret = GrayStringA( HDC_32(hdc), HBRUSH_32(hbr), gray_string_callback_ptr, (LPARAM)info->str, cch, x, y, cx, cy ); HeapFree( GetProcessHeap(), 0, info ); } return ret; } /*********************************************************************** * SwapMouseButton (USER.186) */ BOOL16 WINAPI SwapMouseButton16( BOOL16 fSwap ) { return SwapMouseButton( fSwap ); } /************************************************************************** * IsClipboardFormatAvailable (USER.193) */ BOOL16 WINAPI IsClipboardFormatAvailable16( UINT16 wFormat ) { return IsClipboardFormatAvailable( wFormat ); } /*********************************************************************** * TabbedTextOut (USER.196) */ LONG WINAPI TabbedTextOut16( HDC16 hdc, INT16 x, INT16 y, LPCSTR lpstr, INT16 count, INT16 nb_tabs, const INT16 *tabs16, INT16 tab_org ) { LONG ret; INT i, *tabs = HeapAlloc( GetProcessHeap(), 0, nb_tabs * sizeof(*tabs) ); if (!tabs) return 0; for (i = 0; i < nb_tabs; i++) tabs[i] = tabs16[i]; ret = TabbedTextOutA( HDC_32(hdc), x, y, lpstr, count, nb_tabs, tabs, tab_org ); HeapFree( GetProcessHeap(), 0, tabs ); return ret; } void check_font_rotation(HDC hdc, SIZE *box) { if (LOWORD(LOBYTE(GetVersion())) >= 0x6) { HFONT hfont = GetCurrentObject(hdc, OBJ_FONT); TEXTMETRICA tm; GetTextMetricsA(hdc, &tm); if((tm.tmPitchAndFamily & (TMPF_VECTOR | TMPF_TRUETYPE)) != TMPF_VECTOR) return; LOGFONT lfont; GetObject(hfont, sizeof(LOGFONT), &lfont); if (lfont.lfEscapement == lfont.lfOrientation) { int angle = lfont.lfEscapement % 1800; const float d2r = 3.14159265358979323846 / 1800; if (angle) { int x = box->cx, y = box->cy; box->cx = (y * cosf((900 - angle) * d2r)) + (x * fabsf(cosf(angle * d2r))); box->cy = (x * cosf((900 - angle) * d2r)) + (y * fabsf(cosf(angle * d2r))); } } } } /*********************************************************************** * GetTabbedTextExtent (USER.197) */ DWORD WINAPI GetTabbedTextExtent16( HDC16 hdc, LPCSTR lpstr, INT16 count, INT16 nb_tabs, const INT16 *tabs16 ) { LONG ret; HDC hdc32 = HDC_32(hdc); INT i, *tabs = HeapAlloc( GetProcessHeap(), 0, nb_tabs * sizeof(*tabs) ); if (!tabs) return 0; for (i = 0; i < nb_tabs; i++) tabs[i] = tabs16[i]; ret = GetTabbedTextExtentA( hdc32, lpstr, count, nb_tabs, tabs ); SIZE size = { LOWORD(ret), HIWORD(ret) }; check_font_rotation( hdc32, &size ); ret = size.cx | (size.cy << 16); HeapFree( GetProcessHeap(), 0, tabs ); return ret; } /*********************************************************************** * UserSeeUserDo (USER.216) */ DWORD WINAPI UserSeeUserDo16(WORD wReqType, WORD wParam1, WORD wParam2, WORD wParam3) { STACK16FRAME* stack16 = MapSL((SEGPTR)getWOW32Reserved()); HANDLE16 oldDS = stack16->ds; DWORD ret = (DWORD)-1; stack16->ds = USER_HeapSel; switch (wReqType) { case USUD_LOCALALLOC: ret = LocalAlloc16(wParam1, wParam3); break; case USUD_LOCALFREE: ret = LocalFree16(wParam1); break; case USUD_LOCALCOMPACT: ret = LocalCompact16(wParam3); break; case USUD_LOCALHEAP: ret = USER_HeapSel; break; case USUD_FIRSTCLASS: FIXME("return a pointer to the first window class.\n"); break; default: WARN("wReqType %04x (unknown)\n", wReqType); } stack16->ds = oldDS; return ret; } /*********************************************************************** * LookupMenuHandle (USER.217) */ HMENU16 WINAPI LookupMenuHandle16( HMENU16 hmenu, INT16 id ) { FIXME( "%04x %04x: stub\n", hmenu, id ); return hmenu; } static LPCSTR parse_menu_resource( SEGPTR segres, HMENU hMenu, BOOL oldFormat ) { WORD flags, id = 0; LPCSTR res = MapSL(segres); LPCSTR start = res; LPCSTR str; BOOL end_flag; do { /* Windows 3.00 and later use a WORD for the flags, whereas 1.x and 2.x use a BYTE. */ if (oldFormat) { flags = GET_BYTE(res); res += sizeof(BYTE); } else { flags = GET_WORD(res); res += sizeof(WORD); } end_flag = flags & MF_END; /* Remove MF_END because it has the same value as MF_HILITE */ flags &= ~MF_END; if (!(flags & MF_POPUP)) { id = GET_WORD(res); res += sizeof(WORD); } str = res; res += strlen(str) + 1; if (flags & MF_OWNERDRAW) str = segres + (str - start); if (flags & MF_POPUP) { HMENU hSubMenu = CreatePopupMenu(); if (!hSubMenu) return NULL; if (!(res = parse_menu_resource( segres + (res - start), hSubMenu, oldFormat ))) return NULL; AppendMenuA( hMenu, flags, (UINT_PTR)hSubMenu, str ); } else /* Not a popup */ { LPCSTR newitem = flags & MF_OWNERDRAW ? str : (*str ? str : NULL); AppendMenuA( hMenu, flags, id, newitem ); } } while (!end_flag); return res; } HMENU WINAPI LoadOldMenuIndirect16(LPCVOID *template) { HMENU hMenu; LPCSTR p = *template; if (!(hMenu = CreateMenu())) return 0; while (TRUE) { UINT flag = (UINT)((BYTE)*p++); BOOL end = flag & MF_END; WORD id = 0; if (!(flag & MF_POPUP)) { id = GET_WORD(p); p += 2; } SIZE_T len = strlen(p); LPCSTR name = p; p += len + 1; if (len == 0) { flag |= MF_SEPARATOR; } if (flag & MF_POPUP) { AppendMenuA(hMenu, flag & ~MF_END, LoadOldMenuIndirect16(&p), name); if (end) { break; } continue; } AppendMenuA(hMenu, flag & ~MF_END, id, name); if (end) { break; } } *template = p; return hMenu; } /********************************************************************** * LoadMenuIndirect (USER.220) */ HMENU16 WINAPI LoadMenuIndirect16( SEGPTR segtemplate ) { BOOL oldFormat; HMENU hMenu; WORD version, offset; LPCSTR template = MapSL(segtemplate); LPCSTR p = template; TRACE("(%p)\n", template ); if (IsOldWindowsTask(GetCurrentTask())) { return HMENU_16(LoadOldMenuIndirect16(&template)); } /* Windows 1.x and 2.x menus have a slightly different menu format from 3.x menus */ oldFormat = (GetExeVersion16() < 0x0300); /* Windows 3.00 and later menu items are preceded by a MENUITEMTEMPLATEHEADER structure */ if (!oldFormat) { version = GET_WORD(p); p += sizeof(WORD); if (version) { WARN("version must be 0 for Win16 >= 3.00 applications\n" ); return 0; } offset = GET_WORD(p); p += sizeof(WORD) + offset; } if (!(hMenu = CreateMenu())) return 0; if (!parse_menu_resource( segtemplate + (p - template), hMenu, oldFormat )) { DestroyMenu( hMenu ); return 0; } return HMENU_16(hMenu); } /************************************************************************* * ScrollDC (USER.221) */ BOOL16 WINAPI ScrollDC16( HDC16 hdc, INT16 dx, INT16 dy, const RECT16 *rect, const RECT16 *cliprc, HRGN16 hrgnUpdate, LPRECT16 rcUpdate ) { RECT rect32, clipRect32, rcUpdate32; BOOL16 ret; if (rect) { rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; } if (cliprc) { clipRect32.left = cliprc->left; clipRect32.top = cliprc->top; clipRect32.right = cliprc->right; clipRect32.bottom = cliprc->bottom; } ret = ScrollDC( HDC_32(hdc), dx, dy, rect ? &rect32 : NULL, cliprc ? &clipRect32 : NULL, HRGN_32(hrgnUpdate), &rcUpdate32 ); if (rcUpdate) { rcUpdate->left = rcUpdate32.left; rcUpdate->top = rcUpdate32.top; rcUpdate->right = rcUpdate32.right; rcUpdate->bottom = rcUpdate32.bottom; } return ret; } /*********************************************************************** * GetSystemDebugState (USER.231) */ WORD WINAPI GetSystemDebugState16(void) { return 0; /* FIXME */ } /*********************************************************************** * EqualRect (USER.244) */ BOOL16 WINAPI EqualRect16( const RECT16* rect1, const RECT16* rect2 ) { return ((rect1->left == rect2->left) && (rect1->right == rect2->right) && (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom)); } /*********************************************************************** * ExitWindowsExec (USER.246) */ BOOL16 WINAPI ExitWindowsExec16( LPCSTR lpszExe, LPCSTR lpszParams ) { TRACE("Should run the following in DOS-mode: \"%s %s\"\n", lpszExe, lpszParams); return ExitWindows16(0, 0); } /*********************************************************************** * GetCursor (USER.247) */ HCURSOR16 WINAPI GetCursor16(void) { return get_icon_16( GetCursor() ); } /********************************************************************** * GetAsyncKeyState (USER.249) */ INT16 WINAPI GetAsyncKeyState16( INT16 key ) { return GetAsyncKeyState( key ); } /********************************************************************** * GetMenuState (USER.250) */ UINT16 WINAPI GetMenuState16( HMENU16 hMenu, UINT16 wItemID, UINT16 wFlags ) { return GetMenuState( HMENU_32(hMenu), wItemID, wFlags ); } /************************************************************************** * SendDriverMessage (USER.251) */ LRESULT WINAPI SendDriverMessage16(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1, LPARAM lParam2) { FIXME("(%04x, %04x, %08lx, %08lx): stub\n", hDriver, msg, lParam1, lParam2); return 0; } /************************************************************************** * OpenDriver (USER.252) */ HDRVR16 WINAPI OpenDriver16(LPCSTR lpDriverName, LPCSTR lpSectionName, LPARAM lParam2) { TRACE( "(%s, %s, %08lx): stub\n", debugstr_a(lpDriverName), debugstr_a(lpSectionName), lParam2); static HDRVR16 (WINAPI *DrvOpen16)(LPCSTR, LPCSTR, LPARAM) = NULL; if (!DrvOpen16) { HMODULE mmsystem = GetModuleHandleA("mmsystem.dll16"); if (!mmsystem) { ERR("mmsystem not loaded\n"); return 0; } DrvOpen16 = (HDRVR16 (WINAPI *)(LPCSTR, LPCSTR, LPARAM))GetProcAddress(mmsystem, "DrvOpen16"); if (!DrvOpen16) { ERR("DrvOpen16 load error\n"); return 0; } } return DrvOpen16(lpDriverName, lpSectionName, lParam2); } /************************************************************************** * CloseDriver (USER.253) */ LRESULT WINAPI CloseDriver16(HDRVR16 hDrvr, LPARAM lParam1, LPARAM lParam2) { FIXME( "(%04x, %08lx, %08lx): stub\n", hDrvr, lParam1, lParam2); return FALSE; } /************************************************************************** * GetDriverModuleHandle (USER.254) */ HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDrvr) { FIXME("(%04x): stub\n", hDrvr); return 0; } /************************************************************************** * DefDriverProc (USER.255) */ LRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, LPARAM lParam1, LPARAM lParam2) { FIXME( "devID=0x%08x hDrv=0x%04x wMsg=%04x lP1=0x%08lx lP2=0x%08lx: stub\n", dwDevID, hDriv, wMsg, lParam1, lParam2); return 0; } /************************************************************************** * GetDriverInfo (USER.256) */ struct DRIVERINFOSTRUCT16; BOOL16 WINAPI GetDriverInfo16(HDRVR16 hDrvr, struct DRIVERINFOSTRUCT16 *lpDrvInfo) { FIXME( "(%04x, %p): stub\n", hDrvr, lpDrvInfo); return FALSE; } /************************************************************************** * GetNextDriver (USER.257) */ HDRVR16 WINAPI GetNextDriver16(HDRVR16 hDrvr, DWORD dwFlags) { FIXME( "(%04x, %08x): stub\n", hDrvr, dwFlags); return 0; } /********************************************************************** * GetMenuItemCount (USER.263) */ INT16 WINAPI GetMenuItemCount16( HMENU16 hMenu ) { return GetMenuItemCount( HMENU_32(hMenu) ); } /********************************************************************** * GetMenuItemID (USER.264) */ UINT16 WINAPI GetMenuItemID16( HMENU16 hMenu, INT16 nPos ) { return GetMenuItemID( HMENU_32(hMenu), nPos ); } /*********************************************************************** * GlobalAddAtom (USER.268) */ ATOM WINAPI GlobalAddAtom16(LPCSTR lpString) { return GlobalAddAtomA(lpString); } /*********************************************************************** * GlobalDeleteAtom (USER.269) */ ATOM WINAPI GlobalDeleteAtom16(ATOM nAtom) { return GlobalDeleteAtom(nAtom); } /*********************************************************************** * GlobalFindAtom (USER.270) */ ATOM WINAPI GlobalFindAtom16(LPCSTR lpString) { return GlobalFindAtomA(lpString); } /*********************************************************************** * GlobalGetAtomName (USER.271) */ UINT16 WINAPI GlobalGetAtomName16(ATOM nAtom, LPSTR lpBuffer, INT16 nSize) { char buffer[256]; extern ATOM gatom_progman16; if (nSize == 0) return 0; if (nAtom == gatom_progman16) { strncpy(lpBuffer, "PROGMAN", nSize); lpBuffer[nSize - 1] = 0; return nSize < 8 ? nSize - 1 : 7; } /* win32 wow32:if specify a small buffer, GlobalGetAtomName returns 0 */ /* win16 :if specify a small buffer, GlobalGetAtomName returns max(0, nSize - 1) */ UINT len = GlobalGetAtomNameA(nAtom, buffer, 256); if (!len) return 0; if (len + 1 <= nSize) { memcpy(lpBuffer, buffer, len + 1); return len; } else { memcpy(lpBuffer, buffer, nSize - 1); lpBuffer[nSize - 1] = 0; return nSize - 1; } } /*********************************************************************** * ControlPanelInfo (USER.273) */ void WINAPI ControlPanelInfo16( INT16 nInfoType, WORD wData, LPSTR lpBuffer ) { FIXME("(%d, %04x, %p): stub.\n", nInfoType, wData, lpBuffer); } /*********************************************************************** * OldSetDeskPattern (USER.279) */ BOOL16 WINAPI SetDeskPattern16(void) { return SystemParametersInfoA( SPI_SETDESKPATTERN, -1, NULL, FALSE ); } /*********************************************************************** * GetSysColorBrush (USER.281) */ HBRUSH16 WINAPI GetSysColorBrush16( INT16 index ) { return HBRUSH_16( GetSysColorBrush(index) ); } /*********************************************************************** * SelectPalette (USER.282) */ HPALETTE16 WINAPI SelectPalette16( HDC16 hdc, HPALETTE16 hpal, BOOL16 bForceBackground ) { HPALETTE hpal32 = HPALETTE_32(hpal); HDC hdc32 = HDC_32(hdc); if ((GetObjectType(hpal32) != OBJ_PAL) || ((GetObjectType(hdc32) != OBJ_DC) && (GetObjectType(hdc32) != OBJ_MEMDC))) return NULL; if (krnl386_get_compat_mode("256color") && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY)) { DWORD *dclist = (WORD *)GetPtr16(hpal, 1); int found = -1; if (!dclist) { dclist = (WORD *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 20 * sizeof(DWORD)); dclist[0] = 20; SetPtr16(hpal, dclist, 1); } retry: for (int i = 1; i < dclist[0]; i++) { if ((!dclist[i] || !GetObjectType(HDC_32(dclist[i])) || (GetCurrentObject(HDC_32(dclist[i]), OBJ_PAL) != hpal32)) && (found == -1)) found = i; if ((dclist[i] & 0xffff) == hdc) found = i; } if (found == -1) { if (dclist[0] < 100) { dclist = (WORD *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dclist, (dclist[0] + 20) * sizeof(DWORD)); dclist[0] = dclist[0] + 20; SetPtr16(hpal, dclist, 1); goto retry; } else ERR("pal->dc list growing too large\n", hpal); } else if (found != -2) dclist[found] = (DWORD)hdc | (bForceBackground << 16); DIBSECTION dib; HBITMAP bitmap = GetCurrentObject(hdc32, OBJ_BITMAP); int ret = GetObject(bitmap, sizeof(DIBSECTION), &dib); if (krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (ret == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(bitmap), 1) == 0xd1b00001)) { PALETTEENTRY pal[256] = {0}; GetPaletteEntries(hpal32, 0, 256, &pal); for (int i = 0; i < 256; i++) { BYTE tmp = pal[i].peRed; pal[i].peRed = pal[i].peBlue; pal[i].peBlue = tmp; } SetDIBColorTable(hdc32, 0, 256, &pal); } } return HPALETTE_16( SelectPalette( hdc32, hpal32, bForceBackground )); } /*********************************************************************** * RealizePalette (USER.283) */ UINT16 WINAPI RealizePalette16( HDC16 hdc ) { HDC hdc32 = HDC_32(hdc); if (krnl386_get_compat_mode("256color")) { if (krnl386_get_config_int("otvdm", "DIBPalette", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY) && (GetObjectType(hdc32) == OBJ_DC)) set_realized_palette(hdc32); } return UserRealizePalette(hdc32); } /*********************************************************************** * GetFreeSystemResources (USER.284) */ WORD WINAPI GetFreeSystemResources16( WORD resType ) { STACK16FRAME* stack16 = MapSL((SEGPTR)getWOW32Reserved()); HANDLE16 oldDS = stack16->ds; int userPercent, gdiPercent; switch(resType) { case GFSR_USERRESOURCES: { stack16->ds = USER_HeapSel; WORD size = LocalHeapSize16(); WORD cf = LocalCountFree16(); if (size == 0) userPercent = 100; else userPercent = (int)cf * 100 / size; gdiPercent = 100; stack16->ds = oldDS; break; } case GFSR_GDIRESOURCES: { stack16->ds = gdi_inst; WORD size = LocalHeapSize16(); WORD cf = LocalCountFree16(); if (size == 0) gdiPercent = 100; else gdiPercent = (int)cf * 100 / size; userPercent = 100; stack16->ds = oldDS; break; } case GFSR_SYSTEMRESOURCES: { stack16->ds = USER_HeapSel; WORD size = LocalHeapSize16(); WORD cf = LocalCountFree16(); if (size == 0) userPercent = 100; else userPercent = (int)cf * 100 / size; stack16->ds = gdi_inst; gdiPercent = userPercent; stack16->ds = oldDS; break; } default: userPercent = gdiPercent = 0; break; } TRACE("<- userPercent %d, gdiPercent %d\n", userPercent, gdiPercent); return (WORD)min( userPercent, gdiPercent ); } /*********************************************************************** * SetDeskWallPaper (USER.285) */ BOOL16 WINAPI SetDeskWallPaper16( LPCSTR filename ) { return SetDeskWallPaper( filename ); } /*********************************************************************** * keybd_event (USER.289) */ void WINAPI keybd_event16( CONTEXT *context ) { DWORD dwFlags = 0; if (HIBYTE(context->Eax) & 0x80) dwFlags |= KEYEVENTF_KEYUP; if (HIBYTE(context->Ebx) & 0x01) dwFlags |= KEYEVENTF_EXTENDEDKEY; keybd_event( LOBYTE(context->Eax), LOBYTE(context->Ebx), dwFlags, MAKELONG(LOWORD(context->Esi), LOWORD(context->Edi)) ); } /*********************************************************************** * mouse_event (USER.299) */ void WINAPI mouse_event16( CONTEXT *context ) { mouse_event( LOWORD(context->Eax), LOWORD(context->Ebx), LOWORD(context->Ecx), LOWORD(context->Edx), MAKELONG(context->Esi, context->Edi) ); } /*********************************************************************** * GetClipCursor (USER.309) */ void WINAPI GetClipCursor16( RECT16 *rect ) { if (rect) { RECT rect32; GetClipCursor( &rect32 ); rect->left = rect32.left; rect->top = rect32.top; rect->right = rect32.right; rect->bottom = rect32.bottom; } } QUEUE16 *hqueue_to_ptr(HQUEUE16 hqueue) { return (QUEUE16*)MapSL(MAKESEGPTR(hqueue, 0)); } void delete_queue(HQUEUE16 hqueue) { HQUEUE16 *prev; QUEUE16 *p; prev = &hqFirst; while (*prev && (*prev != hqueue)) { p = hqueue_to_ptr(*prev); prev = &p->next; } if (*prev) { p = hqueue_to_ptr(*prev); *prev = p->next; p->next = 0; } GlobalFree16(hqueue); } /*********************************************************************** * SignalProc (USER.314) */ void WINAPI SignalProc16( HANDLE16 hModule, UINT16 code, UINT16 uExitFn, HINSTANCE16 hInstance, HQUEUE16 hQueue ) { if (code == USIG16_DLL_UNLOAD) { hModule = GetExePtr(hModule); /* HOOK_FreeModuleHooks( hModule ); */ free_module_hooks( hModule ); free_module_classes( hModule ); free_module_icons( hModule ); } if (code == USIG16_TERMINATION) { /* delete queue */ TDB *tdb = (TDB*)GlobalLock16(GetCurrentTask()); delete_queue(tdb->hQueue); } } /*********************************************************************** * SetEventHook (USER.321) * * Used by Turbo Debugger for Windows */ FARPROC16 WINAPI SetEventHook16(FARPROC16 lpfnEventHook) { FIXME("(lpfnEventHook=%p): stub\n", lpfnEventHook); return 0; } /********************************************************************** * EnableHardwareInput (USER.331) */ BOOL16 WINAPI EnableHardwareInput16(BOOL16 bEnable) { FIXME("(%d) - stub\n", bEnable); return TRUE; } /********************************************************************** * LoadCursorIconHandler (USER.336) * * Supposed to load resources of Windows 2.x applications. */ HGLOBAL16 WINAPI LoadCursorIconHandler16( HGLOBAL16 hResource, HMODULE16 hModule, HRSRC16 hRsrc ) { FIXME("(%04x,%04x,%04x): old 2.x resources are not supported!\n", hResource, hModule, hRsrc); return 0; } /*********************************************************************** * GetMouseEventProc (USER.337) */ FARPROC16 WINAPI GetMouseEventProc16(void) { HMODULE16 hmodule = GetModuleHandle16("USER"); return GetProcAddress16( hmodule, "mouse_event" ); } /*********************************************************************** * IsUserIdle (USER.333) */ BOOL16 WINAPI IsUserIdle16(void) { if ( GetAsyncKeyState( VK_LBUTTON ) & 0x8000 ) return FALSE; if ( GetAsyncKeyState( VK_RBUTTON ) & 0x8000 ) return FALSE; if ( GetAsyncKeyState( VK_MBUTTON ) & 0x8000 ) return FALSE; /* Should check for screen saver activation here ... */ return TRUE; } /********************************************************************** * LoadDIBIconHandler (USER.357) * * RT_ICON resource loader, installed by USER_SignalProc when module * is initialized. */ HGLOBAL16 WINAPI LoadDIBIconHandler16( HGLOBAL16 hMemObj, HMODULE16 hModule, HRSRC16 hRsrc ) { /* If hResource is zero we must allocate a new memory block, if it's * non-zero but GlobalLock() returns NULL then it was discarded and * we have to recommit some memory, otherwise we just need to check * the block size. See LoadProc() in 16-bit SDK for more. */ FIXME( "%x %x %x: stub, not supported anymore\n", hMemObj, hModule, hRsrc ); return 0; } /********************************************************************** * LoadDIBCursorHandler (USER.356) * * RT_CURSOR resource loader. Same as above. */ HGLOBAL16 WINAPI LoadDIBCursorHandler16( HGLOBAL16 hMemObj, HMODULE16 hModule, HRSRC16 hRsrc ) { FIXME( "%x %x %x: stub, not supported anymore\n", hMemObj, hModule, hRsrc ); return 0; } /********************************************************************** * IsMenu (USER.358) */ BOOL16 WINAPI IsMenu16( HMENU16 hmenu ) { return IsMenu( HMENU_32(hmenu) ); } /*********************************************************************** * DCHook (USER.362) */ BOOL16 WINAPI DCHook16( HDC16 hdc, WORD code, DWORD data, LPARAM lParam ) { FIXME( "hDC = %x, %i: stub\n", hdc, code ); return FALSE; } /********************************************************************** * LookupIconIdFromDirectoryEx (USER.364) * * FIXME: exact parameter sizes */ INT16 WINAPI LookupIconIdFromDirectoryEx16( LPBYTE dir, BOOL16 bIcon, INT16 width, INT16 height, UINT16 cFlag ) { return LookupIconIdFromDirectoryEx( dir, bIcon, width, height, cFlag ); } /*********************************************************************** * CopyIcon (USER.368) */ HICON16 WINAPI CopyIcon16( HINSTANCE16 hInstance, HICON16 hIcon ) { CURSORICONINFO *info = get_icon_ptr( hIcon ); void *and_bits = info + 1; void *xor_bits = (BYTE *)and_bits + info->nHeight * get_bitmap_width_bytes( info->nWidth, 1 ); HGLOBAL16 ret = CreateCursorIconIndirect16( hInstance, info, and_bits, xor_bits ); release_icon_ptr( hIcon, info ); return ret; } /*********************************************************************** * CopyCursor (USER.369) */ HCURSOR16 WINAPI CopyCursor16( HINSTANCE16 hInstance, HCURSOR16 hCursor ) { CURSORICONINFO *info = get_icon_ptr( hCursor ); void *and_bits = info + 1; void *xor_bits = (BYTE *)and_bits + info->nHeight * get_bitmap_width_bytes( info->nWidth, 1 ); HGLOBAL16 ret = CreateCursorIconIndirect16( hInstance, info, and_bits, xor_bits ); release_icon_ptr( hCursor, info ); return ret; } /*********************************************************************** * SubtractRect (USER.373) */ BOOL16 WINAPI SubtractRect16( LPRECT16 dest, const RECT16 *src1, const RECT16 *src2 ) { RECT16 tmp; if (IsRectEmpty16( src1 )) { SetRectEmpty16( dest ); return FALSE; } *dest = *src1; if (IntersectRect16( &tmp, src1, src2 )) { if (EqualRect16( &tmp, dest )) { SetRectEmpty16( dest ); return FALSE; } if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom)) { if (tmp.left == dest->left) dest->left = tmp.right; else if (tmp.right == dest->right) dest->right = tmp.left; } else if ((tmp.left == dest->left) && (tmp.right == dest->right)) { if (tmp.top == dest->top) dest->top = tmp.bottom; else if (tmp.bottom == dest->bottom) dest->bottom = tmp.top; } } return TRUE; } /********************************************************************** * DllEntryPoint (USER.374) */ BOOL WINAPI DllEntryPoint( DWORD reason, HINSTANCE16 inst, WORD ds, WORD heap, DWORD reserved1, WORD reserved2 ) { if (reason != DLL_PROCESS_ATTACH) return TRUE; if (USER_HeapSel) { void InitNewThreadHook(); InitNewThreadHook(); return TRUE; /* already called */ } USER_HeapSel = ds; register_wow_handlers(); gdi_inst = LoadLibrary16( "gdi.exe" ); LoadLibrary16( "display.drv" ); LoadLibrary16( "keyboard.drv" ); LoadLibrary16( "mouse.drv" ); LoadLibrary16( "user.exe" ); /* make sure it never gets unloaded */ // create dummy menu window, something like this exists on windows xp created by csrss // but is missing on windows 10 x64 CreateWindowExA(0x181, "#32768", "", 0x84800000, 0, 0, 0, 0, NULL, NULL, NULL, NULL); return TRUE; } /********************************************************************** * SetMenuContextHelpId (USER.384) */ BOOL16 WINAPI SetMenuContextHelpId16( HMENU16 hMenu, DWORD dwContextHelpID) { return SetMenuContextHelpId( HMENU_32(hMenu), dwContextHelpID ); } /********************************************************************** * GetMenuContextHelpId (USER.385) */ DWORD WINAPI GetMenuContextHelpId16( HMENU16 hMenu ) { return GetMenuContextHelpId( HMENU_32(hMenu) ); } struct WIN1XBITMAP { LONG unknown1; WORD width; WORD height; //WORD unknown2[2]; WORD ByteWidth; /* Width of bitmap in bytes */ BYTE Planes; /* Number of color planes */ BYTE BitsPerPixel; /* Number of bits per pixel */ WORD unknown3[2]; //monochrome // BYTE bits;//1byte 8 pixels }; /*********************************************************************** * LoadImage (USER.389) */ HANDLE16 WINAPI LoadImage16(HINSTANCE16 hinst, LPCSTR name, UINT16 type, INT16 cx, INT16 cy, UINT16 flags) { HGLOBAL16 handle; HRSRC16 hRsrc, hGroupRsrc; DWORD size; if (!hinst || (flags & LR_LOADFROMFILE) || (hinst && hinst == GetModuleHandle16("DISPLAY"))) { //OEMRESOURCE WORD n = (WORD)name; HINSTANCE hinst32 = NULL; if ((n == OBM_OLD_CLOSE) || (n == OBM_BTNCORNERS)) hinst32 = GetModuleHandleA("user.exe16"); HANDLE h = LoadImageA(hinst32, n, type, cx, cy, flags); if (!h) { //OBM_OLD_XXXX->OBM_XXXX switch (n) { case OBM_OLD_CLOSE: n = OBM_CLOSE; break; case OBM_OLD_DNARROW: n = OBM_DNARROW; break; case OBM_OLD_LFARROW: n = OBM_LFARROW; break; case OBM_OLD_REDUCE: n = OBM_REDUCE; break; case OBM_OLD_RESTORE: n = OBM_RESTORE; break; case OBM_OLD_RGARROW: n = OBM_RGARROW; break; case OBM_OLD_UPARROW: n = OBM_UPARROW; break; case OBM_OLD_ZOOM: n = OBM_ZOOM; break; case OCR_SIZE: n = OCR_SIZEALL; break; case OCR_ICON: n = OCR_NORMAL; break; case OCR_ICOCUR: n = OIC_WINLOGO; break; default: break; } h = LoadImageA(0, n, type, cx, cy, flags); if (h == 0) { ERR("LoadImageA(%d, %d, %d, %d, %d, %d)\n", 0, n, type, cx, cy, flags); } } if (type == IMAGE_BITMAP) return HBITMAP_16(h); else { HICON16 hIcon; hIcon = get_icon_16(h); if (flags & LR_SHARED) add_shared_icon(hinst, NULL, NULL, hIcon); return hIcon; } } hinst = GetExePtr( hinst ); if (flags & LR_DEFAULTSIZE) { if (type == IMAGE_ICON) { if (!cx) cx = GetSystemMetrics(SM_CXICON); if (!cy) cy = GetSystemMetrics(SM_CYICON); } else if (type == IMAGE_CURSOR) { if (!cx) cx = GetSystemMetrics(SM_CXCURSOR); if (!cy) cy = GetSystemMetrics(SM_CYCURSOR); } } switch (type) { case IMAGE_BITMAP: { HBITMAP ret = 0; char *ptr; static const WCHAR prefixW[] = {'b','m','p',0}; BITMAPFILEHEADER header; WCHAR path[MAX_PATH], filename[MAX_PATH]; HANDLE file; filename[0] = 0; if (!(hRsrc = FindResource16( hinst, name, (LPCSTR)RT_BITMAP ))) return 0; if (!(handle = LoadResource16( hinst, hRsrc ))) return 0; if (!(ptr = LockResource16( handle ))) goto done; size = SizeofResource16( hinst, hRsrc ); if (IsOldWindowsTask(hinst)) { //old old bitmap struct WIN1XBITMAP *win1xbitmap = ptr; BITMAP winbitmap = { 0 }; //winbitmap.bmType = win1xbitmap->unknown1; winbitmap.bmWidth = win1xbitmap->width; winbitmap.bmHeight = win1xbitmap->height; winbitmap.bmWidthBytes = win1xbitmap->ByteWidth; winbitmap.bmPlanes = win1xbitmap->Planes; winbitmap.bmBitsPixel = win1xbitmap->BitsPerPixel; winbitmap.bmBits = &win1xbitmap->bits; HBITMAP ret = CreateBitmapIndirect(&winbitmap); if(!ret) { if (winbitmap.bmPlanes == 3) { HDC scrhdc = GetDC(NULL); HDC hdc = CreateCompatibleDC(scrhdc); ret = CreateCompatibleBitmap(scrhdc, winbitmap.bmWidth, winbitmap.bmHeight); HGDIOBJ oldobj = SelectObject(hdc, ret); int plsize = winbitmap.bmWidthBytes * winbitmap.bmHeight; for (int y = 0; y < winbitmap.bmHeight; y++) { for (int x = 0; x < winbitmap.bmWidth; x++) { UINT8 *addr = (UINT8 *)winbitmap.bmBits + (x / 8) + y * winbitmap.bmWidthBytes; int mask = 0x80 >> (x % 8); UINT8 red = (addr[0] & mask) ? 0xff : 0; UINT8 green = (addr[plsize] & mask) ? 0xff : 0; UINT8 blue = (addr[plsize * 2] & mask) ? 0xff : 0; if (SetPixel(hdc, x, y, RGB(red, green, blue)) == -1) { SelectObject(hdc, oldobj); DeleteDC(hdc); ReleaseDC(NULL, scrhdc); return HBITMAP_16(ret); } } } SelectObject(hdc, oldobj); DeleteDC(hdc); ReleaseDC(NULL, scrhdc); return HBITMAP_16(ret); } else ret = CreateBitmap(win1xbitmap->width, win1xbitmap->height, win1xbitmap->Planes, win1xbitmap->BitsPerPixel, &win1xbitmap->bits); } return HBITMAP_16(ret); } header.bfType = 0x4d42; /* 'BM' */ header.bfReserved1 = 0; header.bfReserved2 = 0; header.bfSize = sizeof(header) + size; header.bfOffBits = 0; /* not used by the 32-bit loading code */ if (!GetTempPathW( MAX_PATH, path )) goto done; if (!GetTempFileNameW( path, prefixW, 0, filename )) goto done; file = CreateFileW( filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 ); if (file != INVALID_HANDLE_VALUE) { DWORD written; BOOL ok; ok = WriteFile( file, &header, sizeof(header), &written, NULL ) && (written == sizeof(header)); if (ok) ok = WriteFile( file, ptr, size, &written, NULL ) && (written == size); CloseHandle( file ); if (ok) ret = LoadImageW( 0, filename, IMAGE_BITMAP, cx, cy, flags | LR_LOADFROMFILE ); } done: if (filename[0]) DeleteFileW( filename ); FreeResource16( handle ); return HBITMAP_16( ret ); } case IMAGE_ICON: case IMAGE_CURSOR: { HICON16 hIcon = 0; BYTE *dir, *bits; INT id = 0; LPCSTR typer = (LPCSTR)(type == IMAGE_ICON ? RT_GROUP_ICON : RT_GROUP_CURSOR); BOOL is_old = FALSE; if (IsOldWindowsTask(hinst)) { is_old = TRUE; typer = (LPCSTR)(type == IMAGE_ICON ? RT_ICON : RT_CURSOR); } if (!(hRsrc = FindResource16( hinst, name, typer))) return 0; hGroupRsrc = hRsrc; if (!is_old) { if (!(handle = LoadResource16(hinst, hRsrc))) return 0; if ((dir = LockResource16(handle))) id = LookupIconIdFromDirectory(dir, type == IMAGE_ICON); FreeResource16(handle); if (!id) return 0; if (!(hRsrc = FindResource16( hinst, MAKEINTRESOURCEA(id), (LPCSTR)(type == IMAGE_ICON ? RT_ICON : RT_CURSOR) ))) return 0; } if ((flags & LR_SHARED) && (hIcon = find_shared_icon( hinst, hRsrc ) ) != 0) return hIcon; if (!(handle = LoadResource16( hinst, hRsrc ))) return 0; bits = LockResource16( handle ); size = SizeofResource16( hinst, hRsrc ); if (is_old) { #include typedef struct { BYTE unknown1[2]; WORD x; WORD y; WORD size1; WORD size2; BYTE unknown3[4]; BYTE bits[0]; } OLDICON, *LPOLDICON; typedef struct { SHORT x; SHORT y; BITMAPINFOHEADER header; RGBQUAD colors[1]; } CURSOR, *LPCURSOR; #include /* FIXME: padding? */ LPOLDICON old = bits; SIZE_T size16 = sizeof(OLDICON) + old->size1 / 8 * old->size2 * 2; if (size16 > size) { FreeResource16(handle); return 0; } SIZE_T size32 = sizeof(CURSOR) + old->size1 / 8 * old->size2 * 2 + sizeof(RGBQUAD) * 2; LPCURSOR b32 = (LPCURSOR)HeapAlloc(GetProcessHeap(), 0, size32); memset(b32, 0xff, size32); b32->x = old->x; b32->y = old->y; b32->header.biBitCount = 1; b32->header.biWidth = old->size1; b32->header.biHeight = old->size2 * 2; b32->header.biSize = sizeof(BITMAPINFOHEADER); b32->header.biPlanes = 1; b32->header.biCompression = BI_RGB; b32->header.biSizeImage = 0; b32->header.biXPelsPerMeter = 0; b32->header.biYPelsPerMeter = 0; b32->header.biClrUsed = 2; b32->header.biClrImportant = 0; b32->colors[0].rgbBlue = 0; b32->colors[0].rgbGreen = 0; b32->colors[0].rgbRed = 0; b32->colors[1].rgbBlue = 255; b32->colors[1].rgbGreen = 255; b32->colors[1].rgbRed = 255; SIZE_T img_size = (old->size2 * old->size1) / 8; for (int y = 0; y < old->size2; y++) { 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); 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); } /* if (type == IMAGE_ICON) hIcon = get_icon_16(CreateIcon(GetModuleHandle(NULL), old->size1, old->size2, 1, 1, (LPBYTE)(old + 1), (LPBYTE)(old + 1) + img_size)); else hIcon = get_icon_16(CreateCursor(GetModuleHandle(NULL), old->x, old->y, old->size1, old->size2, (LPBYTE)(old + 1), (LPBYTE)(old + 1) + img_size)); */ hIcon = CreateIconFromResourceEx16(type == IMAGE_ICON ? &b32->header : b32, size32 - (type == IMAGE_ICON ? 2 : 0), type == IMAGE_ICON, 0x00030000, cx, cy, flags); HeapFree(GetProcessHeap(), 0, b32); } else { hIcon = CreateIconFromResourceEx16(bits, size, type == IMAGE_ICON, 0x00030000, cx, cy, flags); } FreeResource16(handle); if (hIcon && (flags & LR_SHARED)) add_shared_icon( hinst, hRsrc, hGroupRsrc, hIcon ); GLOBAL_SetSeg(hIcon, 0, 5 | (type == IMAGE_ICON ? 14 : 12) << 4); // GT_RESOURCE | (GD_ICON || GD_CURSOR) return hIcon; } default: return 0; } } /****************************************************************************** * CopyImage (USER.390) Creates new image and copies attributes to it * */ HICON16 WINAPI CopyImage16(HANDLE16 hnd, UINT16 type, INT16 desiredx, INT16 desiredy, UINT16 flags) { if (flags & LR_COPYFROMRESOURCE) FIXME( "LR_COPYFROMRESOURCE not supported\n" ); switch (type) { case IMAGE_BITMAP: return HBITMAP_16( CopyImage( HBITMAP_32(hnd), type, desiredx, desiredy, flags )); case IMAGE_ICON: case IMAGE_CURSOR: return CopyIcon16( FarGetOwner16(hnd), hnd ); default: return 0; } } /********************************************************************** * DrawIconEx (USER.394) */ BOOL16 WINAPI DrawIconEx16(HDC16 hdc, INT16 xLeft, INT16 yTop, HICON16 hIcon, INT16 cxWidth, INT16 cyWidth, UINT16 istep, HBRUSH16 hbr, UINT16 flags) { return DrawIconEx(HDC_32(hdc), xLeft, yTop, get_icon_32(hIcon), cxWidth, cyWidth, istep, HBRUSH_32(hbr), flags); } /********************************************************************** * GetIconInfo (USER.395) */ BOOL16 WINAPI GetIconInfo16(HICON16 hIcon, LPICONINFO16 iconinfo) { CURSORICONINFO *info = get_icon_ptr( hIcon ); INT height; if (!info) return FALSE; if ((info->ptHotSpot.x == ICON_HOTSPOT) && (info->ptHotSpot.y == ICON_HOTSPOT)) { iconinfo->fIcon = TRUE; iconinfo->xHotspot = info->nWidth / 2; iconinfo->yHotspot = info->nHeight / 2; } else { iconinfo->fIcon = FALSE; iconinfo->xHotspot = info->ptHotSpot.x; iconinfo->yHotspot = info->ptHotSpot.y; } height = info->nHeight; if (info->bBitsPerPixel > 1) { iconinfo->hbmColor = HBITMAP_16( CreateBitmap( info->nWidth, info->nHeight, info->bPlanes, info->bBitsPerPixel, (char *)(info + 1) + info->nHeight * get_bitmap_width_bytes(info->nWidth,1) )); } else { iconinfo->hbmColor = 0; height *= 2; } iconinfo->hbmMask = HBITMAP_16( CreateBitmap( info->nWidth, height, 1, 1, info + 1 )); release_icon_ptr( hIcon, info ); return TRUE; } /*********************************************************************** * FinalUserInit (USER.400) */ void WINAPI FinalUserInit16( void ) { /* FIXME: Should chain to FinalGdiInit */ } /*********************************************************************** * CreateCursor (USER.406) */ HCURSOR16 WINAPI CreateCursor16(HINSTANCE16 hInstance, INT16 xHotSpot, INT16 yHotSpot, INT16 nWidth, INT16 nHeight, LPCVOID lpANDbits, LPCVOID lpXORbits) { CURSORICONINFO info; info.ptHotSpot.x = xHotSpot; info.ptHotSpot.y = yHotSpot; info.nWidth = nWidth; info.nHeight = nHeight; info.nWidthBytes = 0; info.bPlanes = 1; info.bBitsPerPixel = 1; return CreateCursorIconIndirect16(hInstance, &info, lpANDbits, lpXORbits); } /*********************************************************************** * CreateIcon (USER.407) */ HICON16 WINAPI CreateIcon16( HINSTANCE16 hInstance, INT16 nWidth, INT16 nHeight, BYTE bPlanes, BYTE bBitsPixel, LPCVOID lpANDbits, LPCVOID lpXORbits ) { CURSORICONINFO info; info.ptHotSpot.x = ICON_HOTSPOT; info.ptHotSpot.y = ICON_HOTSPOT; info.nWidth = nWidth; info.nHeight = nHeight; info.nWidthBytes = 0; info.bPlanes = bPlanes; info.bBitsPerPixel = bBitsPixel; return CreateCursorIconIndirect16( hInstance, &info, lpANDbits, lpXORbits ); } /*********************************************************************** * CreateCursorIconIndirect (USER.408) */ HGLOBAL16 WINAPI CreateCursorIconIndirect16( HINSTANCE16 hInstance, CURSORICONINFO *info, LPCVOID lpANDbits, LPCVOID lpXORbits ) { HICON16 handle; CURSORICONINFO *ptr; int sizeAnd, sizeXor; hInstance = GetExePtr( hInstance ); /* Make it a module handle */ if (!lpXORbits || !lpANDbits || info->bPlanes != 1) return 0; info->nWidthBytes = get_bitmap_width_bytes(info->nWidth,info->bBitsPerPixel); sizeXor = info->nHeight * info->nWidthBytes; sizeAnd = info->nHeight * get_bitmap_width_bytes( info->nWidth, 1 ); if (!(handle = alloc_icon_handle( sizeof(CURSORICONINFO) + sizeXor + sizeAnd ))) return 0; FarSetOwner16( handle, hInstance ); ptr = get_icon_ptr( handle ); memcpy( ptr, info, sizeof(*info) ); memcpy( ptr + 1, lpANDbits, sizeAnd ); memcpy( (char *)(ptr + 1) + sizeAnd, lpXORbits, sizeXor ); release_icon_ptr( handle, ptr ); return handle; } /*********************************************************************** * InitThreadInput (USER.409) */ HQUEUE16 WINAPI InitThreadInput16( WORD unknown, WORD flags ) { /* nothing to do here */ return 0xbeef; } /******************************************************************* * InsertMenu (USER.410) */ BOOL16 WINAPI InsertMenu16( HMENU16 hMenu, UINT16 pos, UINT16 flags, UINT16 id, SEGPTR data ) { BOOL16 ret; HMENU menu = HMENU_32(hMenu); UINT pos32 = (UINT)pos; if ((pos == (UINT16)-1) && (flags & MF_BYPOSITION)) pos32 = (UINT)-1; if (flags & MF_BITMAP) data = HBITMAP_32(data); UINT id32 = id; if (flags & MF_POPUP) id32 = HMENU_32(id); if (IS_MENU_STRING_ITEM(flags) && data) return InsertMenuA( menu, pos32, flags, id32, MapSL(data) ); ret = InsertMenuA( menu, pos32, flags, id32, (LPSTR)data ); return ret; } /******************************************************************* * AppendMenu (USER.411) */ BOOL16 WINAPI AppendMenu16(HMENU16 hMenu, UINT16 flags, UINT16 id, SEGPTR data) { return InsertMenu16( hMenu, -1, flags | MF_BYPOSITION, id, data ); } /********************************************************************** * RemoveMenu (USER.412) */ BOOL16 WINAPI RemoveMenu16( HMENU16 hMenu, UINT16 nPos, UINT16 wFlags ) { return RemoveMenu( HMENU_32(hMenu), nPos, wFlags ); } /********************************************************************** * DeleteMenu (USER.413) */ BOOL16 WINAPI DeleteMenu16( HMENU16 hMenu, UINT16 nPos, UINT16 wFlags ) { return DeleteMenu( HMENU_32(hMenu), nPos, wFlags ); } /******************************************************************* * ModifyMenu (USER.414) */ BOOL16 WINAPI ModifyMenu16( HMENU16 hMenu, UINT16 pos, UINT16 flags, UINT16 id, SEGPTR data ) { if (flags & MF_BITMAP) data = HBITMAP_32(data); UINT id32 = id; if (flags & MF_POPUP) id32 = HMENU_32(id); if (IS_MENU_STRING_ITEM(flags)) return ModifyMenuA( HMENU_32(hMenu), pos, flags, id32, MapSL(data) ); return ModifyMenuA( HMENU_32(hMenu), pos, flags, id32, (LPSTR)data ); } /********************************************************************** * CreatePopupMenu (USER.415) */ HMENU16 WINAPI CreatePopupMenu16(void) { return HMENU_16( CreatePopupMenu() ); } /********************************************************************** * SetMenuItemBitmaps (USER.418) */ BOOL16 WINAPI SetMenuItemBitmaps16( HMENU16 hMenu, UINT16 nPos, UINT16 wFlags, HBITMAP16 hNewUnCheck, HBITMAP16 hNewCheck) { return SetMenuItemBitmaps( HMENU_32(hMenu), nPos, wFlags, HBITMAP_32(hNewUnCheck), HBITMAP_32(hNewCheck) ); } /*********************************************************************** * wvsprintf (USER.421) */ INT16 WINAPI wvsprintf16( LPSTR buffer, LPCSTR spec, VA_LIST16 args ) { WPRINTF_FORMAT format; LPSTR p = buffer; UINT i, len, sign; CHAR number[20]; CHAR char_view = 0; LPCSTR lpcstr_view = NULL; INT int_view; SEGPTR seg_str; INT16 ret = 0; __TRY { while (*spec) { if (*spec != '%') { *p++ = *spec++; continue; } spec++; if (*spec == '%') { *p++ = *spec++; continue; } spec += parse_format( spec, &format ); switch(format.type) { case WPR_CHAR: char_view = VA_ARG16( args, CHAR ); len = format.precision = 1; break; case WPR_STRING: seg_str = VA_ARG16( args, SEGPTR ); if (IsBadReadPtr16( seg_str, 1 )) lpcstr_view = ""; else lpcstr_view = MapSL( seg_str ); if (!lpcstr_view) lpcstr_view = "(null)"; for (len = 0; !format.precision || (len < format.precision); len++) if (!lpcstr_view[len]) break; format.precision = len; break; case WPR_SIGNED: if (format.flags & WPRINTF_LONG) int_view = VA_ARG16( args, INT ); else int_view = VA_ARG16( args, INT16 ); len = sprintf( number, "%d", int_view ); break; case WPR_UNSIGNED: if (format.flags & WPRINTF_LONG) int_view = VA_ARG16( args, UINT ); else int_view = VA_ARG16( args, UINT16 ); len = sprintf( number, "%u", int_view ); break; case WPR_HEXA: if (format.flags & WPRINTF_LONG) int_view = VA_ARG16( args, UINT ); else int_view = VA_ARG16( args, UINT16 ); len = sprintf( number, (format.flags & WPRINTF_UPPER_HEX) ? "%X" : "%x", int_view); break; case WPR_UNKNOWN: continue; } if (format.precision < len) format.precision = len; if (format.flags & WPRINTF_LEFTALIGN) format.flags &= ~WPRINTF_ZEROPAD; if ((format.flags & WPRINTF_ZEROPAD) && (format.width > format.precision)) format.precision = format.width; if ((format.flags & WPRINTF_PREFIX_HEX) && (format.type == WPR_HEXA)) len += 2; sign = 0; if (!(format.flags & WPRINTF_LEFTALIGN)) for (i = format.precision; i < format.width; i++) *p++ = ' '; switch(format.type) { case WPR_CHAR: *p = char_view; /* wsprintf16 ignores null characters */ if (*p != '\0') p++; else if (format.width > 1) *p++ = ' '; break; case WPR_STRING: if (len) memcpy( p, lpcstr_view, len ); p += len; break; case WPR_HEXA: if (format.flags & WPRINTF_PREFIX_HEX) { *p++ = '0'; *p++ = (format.flags & WPRINTF_UPPER_HEX) ? 'X' : 'x'; len -= 2; } /* fall through */ case WPR_SIGNED: /* Transfer the sign now, just in case it will be zero-padded*/ if (number[0] == '-') { *p++ = '-'; sign = 1; } /* fall through */ case WPR_UNSIGNED: for (i = len; i < format.precision; i++) *p++ = '0'; if (len > sign) memcpy( p, number + sign, len - sign ); p += len-sign; break; case WPR_UNKNOWN: continue; } if (format.flags & WPRINTF_LEFTALIGN) for (i = format.precision; i < format.width; i++) *p++ = ' '; } *p = 0; ret = p - buffer; } __EXCEPT_ALL { } __ENDTRY return ret; } /*********************************************************************** * _wsprintf (USER.420) */ INT16 WINAPIV wsprintf16( LPSTR buffer, LPCSTR spec, VA_LIST16 valist ) { return wvsprintf16( buffer, spec, valist ); } #if 0 /*********************************************************************** * lstrcmp (USER.430) */ INT16 WINAPI lstrcmp16( LPCSTR str1, LPCSTR str2 ) { int ret; /* Looks too complicated, but in optimized strcpy we might get * a 32bit wide difference and would truncate it to 16 bit, so * erroneously returning equality. */ ret = strcmp( str1, str2 ); if (ret < 0) return -1; if (ret > 0) return 1; return 0; } #endif /*********************************************************************** * AnsiUpper (USER.431) */ SEGPTR WINAPI AnsiUpper16( SEGPTR strOrChar ) { /* uppercase only one char if strOrChar < 0x10000 */ if (HIWORD(strOrChar)) { CharUpperA( MapSL(strOrChar) ); return strOrChar; } else return (SEGPTR)CharUpperA( (LPSTR)strOrChar ); } /*********************************************************************** * AnsiLower (USER.432) */ SEGPTR WINAPI AnsiLower16( SEGPTR strOrChar ) { /* lowercase only one char if strOrChar < 0x10000 */ if (HIWORD(strOrChar)) { CharLowerA( MapSL(strOrChar) ); return strOrChar; } else return (SEGPTR)CharLowerA( (LPSTR)strOrChar ); } /*********************************************************************** * AnsiUpperBuff (USER.437) */ UINT16 WINAPI AnsiUpperBuff16( LPSTR str, UINT16 len ) { CharUpperBuffA( str, len ? len : 65536 ); return len; } /*********************************************************************** * AnsiLowerBuff (USER.438) */ UINT16 WINAPI AnsiLowerBuff16( LPSTR str, UINT16 len ) { CharLowerBuffA( str, len ? len : 65536 ); return len; } /******************************************************************* * InsertMenuItem (USER.441) * * FIXME: untested */ BOOL16 WINAPI InsertMenuItem16( HMENU16 hmenu, UINT16 pos, BOOL16 byposition, const MENUITEMINFO16 *mii ) { MENUITEMINFOA miia; miia.cbSize = sizeof(miia); miia.fMask = mii->fMask; miia.dwTypeData = (LPSTR)mii->dwTypeData; miia.fType = mii->fType; miia.fState = mii->fState; miia.wID = mii->wID; miia.hSubMenu = HMENU_32(mii->hSubMenu); miia.hbmpChecked = HBITMAP_32(mii->hbmpChecked); miia.hbmpUnchecked = HBITMAP_32(mii->hbmpUnchecked); miia.dwItemData = mii->dwItemData; miia.cch = mii->cch; if (IS_MENU_STRING_ITEM(miia.fType)) miia.dwTypeData = MapSL(mii->dwTypeData); return InsertMenuItemA( HMENU_32(hmenu), pos, byposition, &miia ); } /********************************************************************** * DrawState (USER.449) */ BOOL16 WINAPI DrawState16( HDC16 hdc, HBRUSH16 hbr, DRAWSTATEPROC16 func, LPARAM ldata, WPARAM16 wdata, INT16 x, INT16 y, INT16 cx, INT16 cy, UINT16 flags ) { struct draw_state_info info; UINT opcode = flags & 0xf; if (opcode == DST_TEXT || opcode == DST_PREFIXTEXT) { /* make sure DrawStateA doesn't try to use ldata as a pointer */ if (!wdata) wdata = strlen( MapSL(ldata) ); if (!cx || !cy) { SIZE s; if (!GetTextExtentPoint32A( HDC_32(hdc), MapSL(ldata), wdata, &s )) return FALSE; if (!cx) cx = s.cx; if (!cy) cy = s.cy; } } info.proc = func; info.param = ldata; return DrawStateA( HDC_32(hdc), HBRUSH_32(hbr), draw_state_callback, (LPARAM)&info, wdata, x, y, cx, cy, flags ); } /********************************************************************** * CreateIconFromResourceEx (USER.450) * * FIXME: not sure about exact parameter types */ HICON16 WINAPI CreateIconFromResourceEx16(LPBYTE bits, UINT16 cbSize, BOOL16 bIcon, DWORD dwVersion, INT16 width, INT16 height, UINT16 cFlag) { return get_icon_16( CreateIconFromResourceEx( bits, cbSize, bIcon, dwVersion, width, height, cFlag )); } /*********************************************************************** * AdjustWindowRectEx (USER.454) */ BOOL16 WINAPI AdjustWindowRectEx16( LPRECT16 rect, DWORD style, BOOL16 menu, DWORD exStyle ) { RECT rect32; BOOL ret; rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; ret = AdjustWindowRectEx( &rect32, style, menu, exStyle ); /* win16:SM_CYCAPTION = 20 win32:SM_CYCAPTION = 24 win16:SM_CXBORDER = 1 win32:SM_CXBORDER = 1 win16:SM_CYBORDER = 1 win32:SM_CYBORDER = 1 win16:SM_CXDLGFRAME = 4 win32:SM_CXDLGFRAME = 2 win16:SM_CYDLGFRAME = 4 win32:SM_CYDLGFRAME = 2 win16: AdjustWindowRectEx(WS_DLGFRAME,...)=>non-client width(5,5,5,5) win32: AdjustWindowRectEx(WS_DLGFRAME,...)=>non-client width(3,3,3,3) win16: CreateWindow(WS_DLGFRAME,...)=>non-client width(1,20,1,1) win32: CreateWindow(WS_DLGFRAME,...)=>non-client width(3,26,3,3) */ if (menu) { /* win16 bug? +-------------+ <= SM_CYCAPTION (when caption is required) | CAPTION | <= SM_CYCAPTION +-------------+ <= 1px (win16 ignores this?) | MENU | <= SM_CYMENU +-------------+ <= SM_CYMENU | | | client area | | | */ rect32.top++; } rect->left = rect32.left; rect->top = rect32.top; rect->right = rect32.right; rect->bottom = rect32.bottom; return ret; } /********************************************************************** * GetIconID (USER.455) */ WORD WINAPI GetIconID16( HGLOBAL16 hResource, DWORD resType ) { BYTE *dir = GlobalLock16(hResource); switch (resType) { case (DWORD)RT_CURSOR: return LookupIconIdFromDirectoryEx16( dir, FALSE, GetSystemMetrics(SM_CXCURSOR), GetSystemMetrics(SM_CYCURSOR), LR_MONOCHROME ); case (DWORD)RT_ICON: return LookupIconIdFromDirectoryEx16( dir, TRUE, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), 0 ); } return 0; } /********************************************************************** * LoadIconHandler (USER.456) */ HICON16 WINAPI LoadIconHandler16( HGLOBAL16 hResource, BOOL16 bNew ) { return CreateIconFromResourceEx16( LockResource16( hResource ), 0xffff, TRUE, bNew ? 0x00030000 : 0x00020000, 0, 0, LR_DEFAULTCOLOR ); } /*********************************************************************** * DestroyIcon (USER.457) */ BOOL16 WINAPI DestroyIcon16(HICON16 hIcon) { int count; TRACE("%04x\n", hIcon ); count = release_shared_icon( hIcon ); if (count != -1) return !count; /* assume non-shared */ free_icon_handle( hIcon ); return TRUE; } /*********************************************************************** * DestroyCursor (USER.458) */ BOOL16 WINAPI DestroyCursor16(HCURSOR16 hCursor) { return DestroyIcon16( hCursor ); } /*********************************************************************** * DumpIcon (USER.459) */ DWORD WINAPI DumpIcon16( SEGPTR pInfo, WORD *lpLen, SEGPTR *lpAndBits, SEGPTR *lpXorBits ) { CURSORICONINFO *info = MapSL( pInfo ); int sizeAnd, sizeXor; if (!info) return 0; sizeXor = info->nHeight * info->nWidthBytes; sizeAnd = info->nHeight * get_bitmap_width_bytes( info->nWidth, 1 ); if (lpAndBits) *lpAndBits = pInfo + sizeof(CURSORICONINFO); if (lpXorBits) *lpXorBits = pInfo + sizeof(CURSORICONINFO) + sizeAnd; if (lpLen) *lpLen = sizeof(CURSORICONINFO) + sizeAnd + sizeXor; return MAKELONG( ((info->bPlanes * info->bBitsPerPixel) > 1) ? sizeAnd : sizeXor, sizeXor ); } /******************************************************************* * DRAG_QueryUpdate16 * * Recursively find a child that contains spDragInfo->pt point * and send WM_QUERYDROPOBJECT. Helper for DragObject16. */ static BOOL DRAG_QueryUpdate16( HWND hQueryWnd, SEGPTR spDragInfo ) { BOOL bResult; WPARAM wParam; POINT pt, old_pt; LPDRAGINFO16 ptrDragInfo = MapSL(spDragInfo); RECT tempRect; HWND child; if (!IsWindowEnabled(hQueryWnd)) return FALSE; old_pt.x = ptrDragInfo->pt.x; old_pt.y = ptrDragInfo->pt.y; pt = old_pt; ScreenToClient( hQueryWnd, &pt ); child = ChildWindowFromPointEx( hQueryWnd, pt, CWP_SKIPINVISIBLE ); if (!child) return FALSE; if (child != hQueryWnd) { wParam = 0; if (DRAG_QueryUpdate16( child, spDragInfo )) return TRUE; } else { GetClientRect( hQueryWnd, &tempRect ); wParam = !PtInRect( &tempRect, pt ); } ptrDragInfo->pt.x = pt.x; ptrDragInfo->pt.y = pt.y; ptrDragInfo->hScope = HWND_16(hQueryWnd); bResult = SendMessage16( HWND_16(hQueryWnd), WM_QUERYDROPOBJECT, wParam, spDragInfo ); if (!bResult) { ptrDragInfo->pt.x = old_pt.x; ptrDragInfo->pt.y = old_pt.y; } return bResult; } /****************************************************************************** * DragObject (USER.464) */ DWORD WINAPI DragObject16( HWND16 hwndScope, HWND16 hWnd, UINT16 wObj, HANDLE16 hOfStruct, WORD szList, HCURSOR16 hCursor ) { return DragObject(HWND_32(hwndScope), HWND_32(hWnd), wObj, MAKELONG(szList, hOfStruct), get_icon_32(hCursor)); #if 0 MSG msg; LPDRAGINFO16 lpDragInfo; SEGPTR spDragInfo; HCURSOR hOldCursor=0, hBummer=0, hCursor32; HGLOBAL16 hDragInfo = GlobalAlloc16( GMEM_SHARE | GMEM_ZEROINIT, 2*sizeof(DRAGINFO16)); HCURSOR hCurrentCursor = 0; HWND16 hCurrentWnd = 0; lpDragInfo = (LPDRAGINFO16) GlobalLock16(hDragInfo); spDragInfo = WOWGlobalLock16(hDragInfo); if( !lpDragInfo || !spDragInfo ) return 0L; if (!(hBummer = LoadCursorA(0, MAKEINTRESOURCEA(OCR_NO)))) { GlobalFree16(hDragInfo); return 0L; } if ((hCursor32 = get_icon_32( hCursor ))) SetCursor( hCursor32 ); lpDragInfo->hWnd = hWnd; lpDragInfo->hScope = 0; lpDragInfo->wFlags = wObj; lpDragInfo->hList = szList; /* near pointer! */ lpDragInfo->hOfStruct = hOfStruct; lpDragInfo->l = 0L; SetCapture( HWND_32(hWnd) ); ShowCursor( TRUE ); do { GetMessageW( &msg, 0, WM_MOUSEFIRST, WM_MOUSELAST ); *(lpDragInfo+1) = *lpDragInfo; lpDragInfo->pt.x = msg.pt.x; lpDragInfo->pt.y = msg.pt.y; /* update DRAGINFO struct */ if( DRAG_QueryUpdate16(WIN_Handle32(hwndScope), spDragInfo) > 0 ) hCurrentCursor = hCursor32; else { hCurrentCursor = hBummer; lpDragInfo->hScope = 0; } if( hCurrentCursor ) SetCursor(hCurrentCursor); /* send WM_DRAGLOOP */ SendMessage16( hWnd, WM_DRAGLOOP, hCurrentCursor != hBummer, spDragInfo ); /* send WM_DRAGSELECT or WM_DRAGMOVE */ if( hCurrentWnd != lpDragInfo->hScope ) { if( hCurrentWnd ) SendMessage16( hCurrentWnd, WM_DRAGSELECT, 0, MAKELPARAM(LOWORD(spDragInfo)+sizeof(DRAGINFO16), HIWORD(spDragInfo)) ); hCurrentWnd = lpDragInfo->hScope; if( hCurrentWnd ) SendMessage16( hCurrentWnd, WM_DRAGSELECT, 1, spDragInfo); } else if( hCurrentWnd ) SendMessage16( hCurrentWnd, WM_DRAGMOVE, 0, spDragInfo); } while( msg.message != WM_LBUTTONUP && msg.message != WM_NCLBUTTONUP ); ReleaseCapture(); ShowCursor( FALSE ); if( hCursor ) SetCursor(hOldCursor); if( hCurrentCursor != hBummer ) msg.lParam = SendMessage16( lpDragInfo->hScope, WM_DROPOBJECT, hWnd, spDragInfo ); else msg.lParam = 0; GlobalFree16(hDragInfo); return (DWORD)(msg.lParam); #endif } /*********************************************************************** * DrawFocusRect (USER.466) */ void WINAPI DrawFocusRect16( HDC16 hdc, const RECT16* rc ) { RECT rect32; rect32.left = rc->left; rect32.top = rc->top; rect32.right = rc->right; rect32.bottom = rc->bottom; DrawFocusRect( HDC_32(hdc), &rect32 ); } /*********************************************************************** * AnsiNext (USER.472) */ SEGPTR WINAPI AnsiNext16(SEGPTR current) { char *ptr = MapSL(current); if (!*ptr) return current; if (IsDBCSLeadByte( ptr[0] ) && ptr[1]) return current + 2; return current + 1; } /*********************************************************************** * AnsiPrev (USER.473) */ SEGPTR WINAPI AnsiPrev16( SEGPTR sstart, SEGPTR current ) { char *ptr = MapSL(current); SEGPTR sptr = current - 1; ptr--; if (sstart == current) return current; while (sptr != sstart) { ptr--; if (!IsDBCSLeadByte(*ptr)) break; sptr--; } if ((current - sptr) & 1) return current - 1; return current - 2; } /**************************************************************************** * GetKeyboardLayoutName (USER.477) */ INT16 WINAPI GetKeyboardLayoutName16( LPSTR name ) { return GetKeyboardLayoutNameA( name ); } /*********************************************************************** * SystemParametersInfo (USER.483) */ BOOL16 WINAPI SystemParametersInfo16( UINT16 uAction, UINT16 uParam, LPVOID lpvParam, UINT16 fuWinIni ) { BOOL16 ret; TRACE("(%u, %u, %p, %u)\n", uAction, uParam, lpvParam, fuWinIni); switch (uAction) { case SPI_GETBEEP: case SPI_GETSCREENSAVEACTIVE: case SPI_GETICONTITLEWRAP: case SPI_GETMENUDROPALIGNMENT: case SPI_GETFASTTASKSWITCH: case SPI_GETDRAGFULLWINDOWS: { BOOL tmp; ret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni ); if (ret && lpvParam) *(BOOL16 *)lpvParam = tmp; break; } case SPI_GETBORDER: case SPI_ICONHORIZONTALSPACING: case SPI_GETSCREENSAVETIMEOUT: case SPI_GETGRIDGRANULARITY: case SPI_GETKEYBOARDDELAY: case SPI_ICONVERTICALSPACING: { INT tmp; ret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni ); if (ret && lpvParam) *(INT16 *)lpvParam = tmp; break; } case SPI_GETKEYBOARDSPEED: case SPI_GETMOUSEHOVERWIDTH: case SPI_GETMOUSEHOVERHEIGHT: case SPI_GETMOUSEHOVERTIME: { DWORD tmp; ret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni ); if (ret && lpvParam) *(WORD *)lpvParam = tmp; break; } case SPI_GETICONTITLELOGFONT: { LOGFONTA tmp; ret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni ); if (ret && lpvParam) logfont_32_to_16( &tmp, (LPLOGFONT16)lpvParam ); break; } case SPI_GETNONCLIENTMETRICS: { NONCLIENTMETRICSA tmp; LPNONCLIENTMETRICS16 lpnm16 = (LPNONCLIENTMETRICS16)lpvParam; if (lpnm16 && lpnm16->cbSize == sizeof(NONCLIENTMETRICS16)) { tmp.cbSize = sizeof(NONCLIENTMETRICSA); ret = SystemParametersInfoA( uAction, uParam, &tmp, fuWinIni ); if (ret) { lpnm16->iBorderWidth = tmp.iBorderWidth; lpnm16->iScrollWidth = tmp.iScrollWidth; lpnm16->iScrollHeight = tmp.iScrollHeight; lpnm16->iCaptionWidth = tmp.iCaptionWidth; lpnm16->iCaptionHeight = tmp.iCaptionHeight; lpnm16->iSmCaptionWidth = tmp.iSmCaptionWidth; lpnm16->iSmCaptionHeight = tmp.iSmCaptionHeight; lpnm16->iMenuWidth = tmp.iMenuWidth; lpnm16->iMenuHeight = tmp.iMenuHeight; logfont_32_to_16( &tmp.lfCaptionFont, &lpnm16->lfCaptionFont ); logfont_32_to_16( &tmp.lfSmCaptionFont, &lpnm16->lfSmCaptionFont ); logfont_32_to_16( &tmp.lfMenuFont, &lpnm16->lfMenuFont ); logfont_32_to_16( &tmp.lfStatusFont, &lpnm16->lfStatusFont ); logfont_32_to_16( &tmp.lfMessageFont, &lpnm16->lfMessageFont ); } } else /* winfile 95 sets cbSize to 340 */ ret = SystemParametersInfoA( uAction, uParam, lpvParam, fuWinIni ); break; } case SPI_GETWORKAREA: { RECT tmp; ret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni ); if (ret && lpvParam) { RECT16 *r16 = lpvParam; r16->left = tmp.left; r16->top = tmp.top; r16->right = tmp.right; r16->bottom = tmp.bottom; } break; } default: ret = SystemParametersInfoA( uAction, uParam, lpvParam, fuWinIni ); break; } return ret; } /*********************************************************************** * GetKeyboardLanguage (USER.489) */ LONG WINAPI GetKeyboardLanguage16(void) { FIXME("stub()\n"); return 0; } /*********************************************************************** * SetKeyboardLanguage (USER.490) */ LONG WINAPI SetKeyboardLanguage16(WORD a1, WORD a2) { FIXME("stub(%04x,%04x)\n", a1, a2); return 0; } /*********************************************************************** * MakeScrollBarsRToL (USER.492) */ LONG WINAPI MakeScrollBarsRToL(WORD a1, WORD a2, WORD a3) { FIXME("stub(%04x,%04x,%04x)\n", a1, a2, a3); return 0; } /*********************************************************************** * USER_496 (USER.496) */ LONG WINAPI stub_USER_496(void) { FIXME("stub\n"); return 0; } BOOL WINAPI MakeMenuRToL16(HMENU16 hmenu, BOOL16 rol) { FIXME("stub(%04x,%d\n)", hmenu, rol); return 0; } LONG WINAPI stub_USER_486(void) { FIXME("stub\n"); return 0; } INT16 WINAPI RawDrawText16( HDC16 hdc, LPCSTR str, INT16 count, LPRECT16 rect, UINT16 flags ) { FIXME("(%04x,%s,%d,%p,%04x)\n", hdc, debugstr_an(str, count), rect, flags); return DrawText16(hdc, str, count, rect, flags); } LONG WINAPI stub_USER_488(void) { FIXME("stub\n"); return 0; } LONG WINAPI stub_USER_491(void) { FIXME("stub\n"); return 0; } LONG WINAPI stub_USER_493(void) { FIXME("stub\n"); return 0; } LONG WINAPI stub_USER_494(void) { FIXME("stub\n"); return 0; } LONG WINAPI stub_USER_495(void) { FIXME("stub\n"); return 0; } LONG WINAPI LangToBestCodePage16(void) { FIXME("stub\n"); return 0; } LONG WINAPI GetNumKeyboards16(void) { FIXME("stub\n"); return 0; } LONG WINAPI IsCharHebrew16(WORD a) { FIXME("stub(%04x)\n", a); return 0; } LONG WINAPI IsCharFrench16(WORD a) { FIXME("stub(%04x)\n", a); return 0; } LONG WINAPI IsCharArabic16(WORD a) { FIXME("stub(%04x)\n", a); return 0; } /*********************************************************************** * FormatMessage (USER.606) */ DWORD WINAPI FormatMessage16( DWORD dwFlags, SEGPTR lpSource, /* [in] NOTE: not always a valid pointer */ WORD dwMessageId, WORD dwLanguageId, LPSTR lpBuffer, /* [out] NOTE: *((HLOCAL16*)) for FORMAT_MESSAGE_ALLOCATE_BUFFER*/ WORD nSize, LPDWORD args ) /* [in] NOTE: va_list *args */ { /* This implementation is completely dependent on the format of the va_list on x86 CPUs */ LPSTR target,t; DWORD talloced; LPSTR from,f; DWORD width = dwFlags & FORMAT_MESSAGE_MAX_WIDTH_MASK; BOOL eos = FALSE; LPSTR allocstring = NULL; TRACE("(0x%x,%x,%d,0x%x,%p,%d,%p)\n", dwFlags,lpSource,dwMessageId,dwLanguageId,lpBuffer,nSize,args); if ((dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) && (dwFlags & FORMAT_MESSAGE_FROM_HMODULE)) return 0; if ((dwFlags & FORMAT_MESSAGE_FROM_STRING) &&((dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) || (dwFlags & FORMAT_MESSAGE_FROM_HMODULE))) return 0; if (width && width != FORMAT_MESSAGE_MAX_WIDTH_MASK) FIXME("line wrapping (%u) not supported.\n", width); from = NULL; if (dwFlags & FORMAT_MESSAGE_FROM_STRING) { char *source = MapSL(lpSource); from = HeapAlloc( GetProcessHeap(), 0, strlen(source)+1 ); strcpy( from, source ); } else if (dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) { from = HeapAlloc( GetProcessHeap(),0,200 ); sprintf(from,"Systemmessage, messageid = 0x%08x\n",dwMessageId); } else if (dwFlags & FORMAT_MESSAGE_FROM_HMODULE) { INT16 bufsize; HINSTANCE16 hinst16 = ((HINSTANCE16)lpSource & 0xffff); dwMessageId &= 0xFFFF; bufsize=LoadString16(hinst16,dwMessageId,NULL,0); if (bufsize) { from = HeapAlloc( GetProcessHeap(), 0, bufsize +1); LoadString16(hinst16,dwMessageId,from,bufsize+1); } } target = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, 100); t = target; talloced= 100; #define ADD_TO_T(c) \ do { \ *t++=c;\ if (t-target == talloced) {\ target = HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,target,talloced*2);\ t = target+talloced;\ talloced*=2;\ } \ } while(0) if (from) { f=from; while (*f && !eos) { if (*f=='%') { int insertnr; char *fmtstr,*x,*lastf; DWORD *argliststart; fmtstr = NULL; lastf = f; f++; if (!*f) { ADD_TO_T('%'); continue; } switch (*f) { case '1':case '2':case '3':case '4':case '5': case '6':case '7':case '8':case '9': insertnr=*f-'0'; switch (f[1]) { case '0':case '1':case '2':case '3': case '4':case '5':case '6':case '7': case '8':case '9': f++; insertnr=insertnr*10+*f-'0'; f++; break; default: f++; break; } if (*f=='!') { f++; if (NULL!=(x=strchr(f,'!'))) { *x='\0'; fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)+2); sprintf(fmtstr,"%%%s",f); f=x+1; } else { fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)+2); sprintf(fmtstr,"%%%s",f); f+=strlen(f); /*at \0*/ } } else { if(!args) break; fmtstr=HeapAlloc( GetProcessHeap(), 0, 3 ); strcpy( fmtstr, "%s" ); } if (args) { int ret; int sz; LPSTR b = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sz = 100); argliststart=args+insertnr-1; /* CMF - This makes a BIG assumption about va_list */ while ((ret = vsnprintf(b, sz, fmtstr, (va_list) argliststart)) < 0 || ret >= sz) { LPSTR new_b; sz = (ret == -1 ? sz + 100 : ret + 1); new_b = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, b, sz); if (!new_b) break; b = new_b; } for (x=b; *x; x++) ADD_TO_T(*x); HeapFree(GetProcessHeap(), 0, b); } else { /* NULL args - copy formatstr * (probably wrong) */ while ((lastfleft; rect32.top = rc->top; rect32.right = rc->right; rect32.bottom = rc->bottom; ret = DrawFrameControl( HDC_32(hdc), &rect32, uType, uState ); rc->left = rect32.left; rc->top = rect32.top; rc->right = rect32.right; rc->bottom = rect32.bottom; return ret; } /********************************************************************** * DrawEdge (USER.659) */ BOOL16 WINAPI DrawEdge16( HDC16 hdc, LPRECT16 rc, UINT16 edge, UINT16 flags ) { RECT rect32; BOOL ret; rect32.left = rc->left; rect32.top = rc->top; rect32.right = rc->right; rect32.bottom = rc->bottom; ret = DrawEdge( HDC_32(hdc), &rect32, edge, flags ); rc->left = rect32.left; rc->top = rect32.top; rc->right = rect32.right; rc->bottom = rect32.bottom; return ret; } /********************************************************************** * CheckMenuRadioItem (USER.666) */ BOOL16 WINAPI CheckMenuRadioItem16(HMENU16 hMenu, UINT16 first, UINT16 last, UINT16 check, BOOL16 bypos) { return CheckMenuRadioItem( HMENU_32(hMenu), first, last, check, bypos ); } #if 0 /* wow32 */ #define SYSERRORBOX_NONE 0 #define SYSERRORBOX_OK 1 #define SYSERRORBOX_CANCEL 2 #define SYSERRORBOX_YES 3 #define SYSERRORBOX_NO 4 #define SYSERRORBOX_ABORT 5 #define SYSERRORBOX_RETRY 6 #define SYSERRORBOX_IGNORE 7 #define SYSERRORBOX_CLOSE 8 #define SYSERRORBOX_HELP 9 #define SYSERRORBOX_TRYAGAIN 10 #define SYSERRORBOX_CONTINUE 11 #define SYSERRORBOX_MAX 12 #else /* win31 */ #define SYSERRORBOX_NONE 0 #define SYSERRORBOX_OK 1 #define SYSERRORBOX_CANCEL 2 #define SYSERRORBOX_YES 3 #define SYSERRORBOX_NO 4 #define SYSERRORBOX_RETRY 5 #define SYSERRORBOX_ABORT 6 #define SYSERRORBOX_IGNORE 7 /* 終了(&C) (win31JP) 閉じる(&C) (windows) */ #define SYSERRORBOX_CLOSE 8 /* crash! */ #define SYSERRORBOX_HELP 9 #define SYSERRORBOX_TRYAGAIN 10 #define SYSERRORBOX_CONTINUE 11 #define SYSERRORBOX_MAX 12 #endif #define SYSERRORBOX_DEFBUTTON 0x8000 DWORD SysErrorBox_table[] = { [SYSERRORBOX_OK] = IDOK, [SYSERRORBOX_CANCEL] = IDCANCEL, [SYSERRORBOX_YES] = IDYES, [SYSERRORBOX_NO] = IDNO, [SYSERRORBOX_ABORT] = IDABORT, [SYSERRORBOX_RETRY] = IDRETRY, [SYSERRORBOX_IGNORE] = IDIGNORE, [SYSERRORBOX_CLOSE] = IDCLOSE, [SYSERRORBOX_HELP] = IDHELP, [SYSERRORBOX_TRYAGAIN] = IDTRYAGAIN, [SYSERRORBOX_CONTINUE] = IDCONTINUE, }; //Based on 65bfc47fd6ed628f7696080f04857318aef82226 reactos/include/reactos/undocuser.h typedef struct _MSGBOXDATA { MSGBOXPARAMSW mbp; // Size: 0x28 (on x86), 0x50 (on x64) HWND hwndOwner; #if defined(_WIN32) && (_WIN32_WINNT >= _WIN32_WINNT_WIN7) /* (NTDDI_VERSION >= NTDDI_WIN7) */ DWORD dwPadding; #endif WORD wLanguageId; INT* pidButton; // Array of button IDs LPCWSTR* ppszButtonText; // Array of button text strings DWORD dwButtons; // Number of buttons UINT uDefButton; // Default button ID UINT uCancelId; // Button ID for Cancel action #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP) /* (NTDDI_VERSION >= NTDDI_WINXP) */ DWORD dwTimeout; // Message box timeout #endif DWORD dwReserved0; #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7) /* (NTDDI_VERSION >= NTDDI_WIN7) */ DWORD dwReserved[4]; /* win10 (WOW64) has an extra field */ DWORD dwReserved2; #endif } MSGBOXDATA, *PMSGBOXDATA, *LPMSGBOXDATA; typedef int (WINAPI*SoftModalMessageBox_t)(IN LPMSGBOXDATA lpMsgBoxData); SoftModalMessageBox_t SoftModalMessageBox; LPCWSTR(WINAPI*MB_GetString)(int); /* FIXME:wine does not have SoftModalMessageBox implementation */ INT16 WINAPI SysErrorBox16(LPCSTR text, LPCSTR caption, UINT16 btn1, UINT16 btn2, UINT16 btn3) { MSGBOXDATA data; int res = 0; INT pids[3] = { 0 }; LPCWSTR ppText[3] = { 0 }; int i = 0; UINT16 a1 = btn1 & ~SYSERRORBOX_DEFBUTTON; UINT16 a2 = btn2 & ~SYSERRORBOX_DEFBUTTON; UINT16 a3 = btn3 & ~SYSERRORBOX_DEFBUTTON; if (!SoftModalMessageBox) { HMODULE user32 = GetModuleHandleW(L"user32"); SoftModalMessageBox = GetProcAddress(user32, "SoftModalMessageBox"); MB_GetString = (LPCWSTR(WINAPI*)(int))GetProcAddress(user32, "MB_GetString"); } if (a1 != SYSERRORBOX_NONE && a1 < SYSERRORBOX_MAX) { pids[i] = 1; ppText[i] = MB_GetString(SysErrorBox_table[a1] - 1); if (ppText[i]) { i++; } } if (a2 != SYSERRORBOX_NONE && a2 < SYSERRORBOX_MAX) { pids[i] = 2; ppText[i] = MB_GetString(SysErrorBox_table[a2] - 1); if (ppText[i]) { i++; } } if (a3 != SYSERRORBOX_NONE && a3 < SYSERRORBOX_MAX) { pids[i] = 3; ppText[i] = MB_GetString(SysErrorBox_table[a3] - 1); if (ppText[i]) { i++; } } ZeroMemory(&data, sizeof(data)); data.mbp.cbSize = sizeof(data.mbp); data.mbp.hwndOwner = NULL; data.mbp.hInstance = NULL; SIZE_T textwc = MultiByteToWideChar(CP_ACP, 0, text, -1, NULL, 0); SIZE_T capwc = MultiByteToWideChar(CP_ACP, 0, caption, -1, NULL, 0); LPWSTR wtext = HeapAlloc(GetProcessHeap(), 0, textwc * sizeof(WCHAR)); LPWSTR wcaption = HeapAlloc(GetProcessHeap(), 0, capwc * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, text, -1, wtext, textwc); MultiByteToWideChar(CP_ACP, 0, caption, -1, wcaption, capwc); data.mbp.lpszText = wtext; data.mbp.lpszCaption = wcaption; data.mbp.lpfnMsgBoxCallback = NULL; data.mbp.dwStyle = MB_TASKMODAL | MB_OKCANCEL; data.wLanguageId = 0; data.pidButton = pids; data.ppszButtonText = ppText; data.dwButtons = i; data.uDefButton = 4; if (btn3 & SYSERRORBOX_DEFBUTTON) { data.uDefButton = 2; } if (btn2 & SYSERRORBOX_DEFBUTTON) { data.uDefButton = 1; } if (btn1 & SYSERRORBOX_DEFBUTTON) { data.uDefButton = 0; } data.uCancelId = 0; #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP) /* (NTDDI_VERSION >= NTDDI_WINXP) */ data.dwTimeout = INFINITE; #endif int result = SoftModalMessageBox(&data); HeapFree(GetProcessHeap(), 0, wtext); HeapFree(GetProcessHeap(), 0, wcaption); return result; } BOOL16 WINAPI LockInput16(HANDLE16 res, HWND16 hwnd, BOOL16 lock) { FIXME("(%d, %d, %d) - stub\n", res, hwnd, lock); return FALSE; } void WINAPI RepaintScreen16() { FIXME(" - stub\n"); } ================================================ FILE: user/user.def ================================================ ; File generated automatically from user.exe16.spec; do not edit! LIBRARY user.exe16 EXPORTS _wine_spec_dos_header @1 DATA;=.L__wine_spec_dos_header @1 DATA PRIVATE CreateIcon16 @2 CreateIconFromResourceEx16 SelectPalette16 dialog_template16_to_template32 DIALOG_CallDialogProc __wine_call_wndproc LoadBitmap16 window_message16_32 window_message32_16 LoadString16 set_realized_palette get_realized_palette regen_icon ================================================ FILE: user/user.exe16.spec ================================================ 1 pascal -ret16 MessageBox(word str str word) MessageBox16 2 pascal -ret16 OldExitWindows() OldExitWindows16 3 stub EnableOEMLayer 4 stub DisableOEMLayer 5 pascal -ret16 InitApp(word) InitApp16 6 pascal -ret16 PostQuitMessage(word) PostQuitMessage16 7 pascal -ret16 ExitWindows(long word) ExitWindows16 10 pascal -ret16 SetTimer(word word word segptr) SetTimer16 11 pascal -ret16 SetSystemTimer(word word word segptr) SetSystemTimer16 # BEAR11 12 pascal -ret16 KillTimer(word word) KillTimer16 13 pascal GetTickCount() GetTickCount 14 pascal GetTimerResolution() GetTimerResolution16 # GetCurrentTime is effectively identical to GetTickCount 15 pascal GetCurrentTime() GetTickCount 16 pascal -ret16 ClipCursor(ptr) ClipCursor16 17 pascal -ret16 GetCursorPos(ptr) GetCursorPos16 18 pascal -ret16 SetCapture(word) SetCapture16 19 pascal -ret16 ReleaseCapture() ReleaseCapture16 20 pascal -ret16 SetDoubleClickTime(word) SetDoubleClickTime16 21 pascal -ret16 GetDoubleClickTime() GetDoubleClickTime16 22 pascal -ret16 SetFocus(word) SetFocus16 23 pascal -ret16 GetFocus() GetFocus16 24 pascal -ret16 RemoveProp(word ptr) RemoveProp16 25 pascal -ret16 GetProp(word str) GetProp16 26 pascal -ret16 SetProp(word str word) SetProp16 27 pascal -ret16 EnumProps(word segptr) EnumProps16 28 pascal -ret16 ClientToScreen(word ptr) ClientToScreen16 29 pascal -ret16 ScreenToClient(word ptr) ScreenToClient16 30 pascal -ret16 WindowFromPoint(long) WindowFromPoint16 31 pascal -ret16 IsIconic(word) IsIconic16 32 pascal -ret16 GetWindowRect(word ptr) GetWindowRect16 33 pascal -ret16 GetClientRect(word ptr) GetClientRect16 34 pascal -ret16 EnableWindow(word word) EnableWindow16 35 pascal -ret16 IsWindowEnabled(word) IsWindowEnabled16 36 pascal -ret16 GetWindowText(word segptr word) GetWindowText16 37 pascal -ret16 SetWindowText(word segstr) SetWindowText16 38 pascal -ret16 GetWindowTextLength(word) GetWindowTextLength16 39 pascal -ret16 BeginPaint(word ptr) BeginPaint16 40 pascal -ret16 EndPaint(word ptr) EndPaint16 41 pascal -ret16 CreateWindow(str str long s_word s_word s_word s_word word word word segptr) CreateWindow16 42 pascal -ret16 ShowWindow(word word) ShowWindow16 43 pascal -ret16 CloseWindow(word) CloseWindow16 44 pascal -ret16 OpenIcon(word) OpenIcon16 45 pascal -ret16 BringWindowToTop(word) BringWindowToTop16 46 pascal -ret16 GetParent(word) GetParent16 47 pascal -ret16 IsWindow(word) IsWindow16 48 pascal -ret16 IsChild(word word) IsChild16 49 pascal -ret16 IsWindowVisible(word) IsWindowVisible16 50 pascal -ret16 FindWindow(str str) FindWindow16 51 stub BEAR51 # IsTwoByteCharPrefix 52 pascal -ret16 AnyPopup() AnyPopup16 53 pascal -ret16 DestroyWindow(word) DestroyWindow16 54 pascal -ret16 EnumWindows(segptr long) EnumWindows16 55 pascal -ret16 EnumChildWindows(word segptr long) EnumChildWindows16 56 pascal -ret16 MoveWindow(word word word word word word) MoveWindow16 57 pascal -ret16 RegisterClass(ptr) RegisterClass16 58 pascal -ret16 GetClassName(word ptr word) GetClassName16 59 pascal -ret16 SetActiveWindow(word) SetActiveWindow16 60 pascal -ret16 GetActiveWindow() GetActiveWindow16 61 pascal -ret16 ScrollWindow(word s_word s_word ptr ptr) ScrollWindow16 62 pascal -ret16 SetScrollPos(word word s_word word) SetScrollPos16 63 pascal -ret16 GetScrollPos(word word) GetScrollPos16 64 pascal -ret16 SetScrollRange(word word s_word s_word word) SetScrollRange16 65 pascal -ret16 GetScrollRange(word word ptr ptr) GetScrollRange16 66 pascal -ret16 GetDC(word) GetDC16 67 pascal -ret16 GetWindowDC(word) GetWindowDC16 68 pascal -ret16 ReleaseDC(word word) ReleaseDC16 69 pascal -ret16 SetCursor(word) SetCursor16 70 pascal -ret16 SetCursorPos(word word) SetCursorPos16 71 pascal -ret16 ShowCursor(word) ShowCursor16 72 pascal -ret16 SetRect(ptr s_word s_word s_word s_word) SetRect16 73 pascal -ret16 SetRectEmpty(ptr) SetRectEmpty16 74 pascal -ret16 CopyRect(ptr ptr) CopyRect16 75 pascal -ret16 IsRectEmpty(ptr) IsRectEmpty16 76 pascal -ret16 PtInRect(ptr long) PtInRect16 77 pascal -ret16 OffsetRect(ptr s_word s_word) OffsetRect16 78 pascal -ret16 InflateRect(ptr s_word s_word) InflateRect16 79 pascal -ret16 IntersectRect(ptr ptr ptr) IntersectRect16 80 pascal -ret16 UnionRect(ptr ptr ptr) UnionRect16 81 pascal -ret16 FillRect(word ptr word) FillRect16 82 pascal -ret16 InvertRect(word ptr) InvertRect16 83 pascal -ret16 FrameRect(word ptr word) FrameRect16 84 pascal -ret16 DrawIcon(word s_word s_word word) DrawIcon16 85 pascal -ret16 DrawText(word str s_word ptr word) DrawText16 86 pascal IconSize() IconSize16 # later versions: BEAR86 87 pascal -ret16 DialogBox(word str word segptr) DialogBox16 88 pascal -ret16 EndDialog(word s_word) EndDialog16 89 pascal -ret16 CreateDialog(word str word segptr) CreateDialog16 90 pascal -ret16 IsDialogMessage(word segptr) IsDialogMessage16 91 pascal -ret16 GetDlgItem(word word) GetDlgItem16 92 pascal -ret16 SetDlgItemText(word word segstr) SetDlgItemText16 93 pascal -ret16 GetDlgItemText(word word segptr word) GetDlgItemText16 94 pascal -ret16 SetDlgItemInt(word word word word) SetDlgItemInt16 95 pascal -ret16 GetDlgItemInt(word s_word ptr word) GetDlgItemInt16 96 pascal -ret16 CheckRadioButton(word word word word) CheckRadioButton16 97 pascal -ret16 CheckDlgButton(word word word) CheckDlgButton16 98 pascal -ret16 IsDlgButtonChecked(word word) IsDlgButtonChecked16 99 pascal -ret16 DlgDirSelect(word ptr word) DlgDirSelect16 100 pascal -ret16 DlgDirList(word str word word word) DlgDirList16 101 pascal SendDlgItemMessage(word word word word long) SendDlgItemMessage16 102 pascal -ret16 AdjustWindowRect(ptr long word) AdjustWindowRect16 103 pascal -ret16 MapDialogRect(word ptr) MapDialogRect16 104 pascal -ret16 MessageBeep(word) MessageBeep16 105 pascal -ret16 FlashWindow(word word) FlashWindow16 106 pascal -ret16 GetKeyState(word) GetKeyState16 107 pascal DefWindowProc(word word word long) DefWindowProc16 108 pascal -ret16 GetMessage(ptr word word word) GetMessage16 109 pascal -ret16 PeekMessage(ptr word word word word) PeekMessage16 110 pascal -ret16 PostMessage(word word word long) PostMessage16 111 pascal SendMessage(word word word long) SendMessage16 112 pascal -ret16 WaitMessage() WaitMessage16 113 pascal -ret16 TranslateMessage(ptr) TranslateMessage16 114 pascal DispatchMessage(ptr) DispatchMessage16 115 pascal -ret16 ReplyMessage(long) ReplyMessage16 116 pascal -ret16 PostAppMessage(word word word long) PostAppMessage16 117 pascal -ret16 WindowFromDC(word) WindowFromDC16 # not in W1.1, W2.0 118 pascal -ret16 RegisterWindowMessage(str) RegisterWindowMessageA 119 pascal GetMessagePos() GetMessagePos 120 pascal GetMessageTime() GetMessageTime 121 pascal SetWindowsHook(s_word segptr) SetWindowsHook16 122 pascal CallWindowProc(segptr word word word long) CallWindowProc16 123 pascal -ret16 CallMsgFilter(ptr s_word) CallMsgFilter16 124 pascal -ret16 UpdateWindow(word) UpdateWindow16 125 pascal -ret16 InvalidateRect(word ptr word) InvalidateRect16 126 pascal -ret16 InvalidateRgn(word word word) InvalidateRgn16 127 pascal -ret16 ValidateRect(word ptr) ValidateRect16 128 pascal -ret16 ValidateRgn(word word) ValidateRgn16 129 pascal -ret16 GetClassWord(word s_word) GetClassWord16 130 pascal -ret16 SetClassWord(word s_word word) SetClassWord16 131 pascal GetClassLong(word s_word) GetClassLong16 132 pascal SetClassLong(word s_word long) SetClassLong16 133 pascal -ret16 GetWindowWord(word s_word) GetWindowWord16 134 pascal -ret16 SetWindowWord(word s_word word) SetWindowWord16 135 pascal GetWindowLong(word s_word) GetWindowLong16 136 pascal SetWindowLong(word s_word long) SetWindowLong16 137 pascal -ret16 OpenClipboard(word) OpenClipboard16 138 pascal -ret16 CloseClipboard() CloseClipboard16 139 pascal -ret16 EmptyClipboard() EmptyClipboard16 140 pascal -ret16 GetClipboardOwner() GetClipboardOwner16 141 pascal -ret16 SetClipboardData(word word) SetClipboardData16 142 pascal -ret16 GetClipboardData(word) GetClipboardData16 143 pascal -ret16 CountClipboardFormats() CountClipboardFormats16 144 pascal -ret16 EnumClipboardFormats(word) EnumClipboardFormats16 145 pascal -ret16 RegisterClipboardFormat(str) RegisterClipboardFormat16 146 pascal -ret16 GetClipboardFormatName(word ptr s_word) GetClipboardFormatName16 147 pascal -ret16 SetClipboardViewer(word) SetClipboardViewer16 148 pascal -ret16 GetClipboardViewer() GetClipboardViewer16 149 pascal -ret16 ChangeClipboardChain(word word) ChangeClipboardChain16 150 pascal -ret16 LoadMenu(word str) LoadMenu16 151 pascal -ret16 CreateMenu() CreateMenu16 152 pascal -ret16 DestroyMenu(word) DestroyMenu16 153 pascal -ret16 ChangeMenu(word word segstr word word) ChangeMenu16 154 pascal -ret16 CheckMenuItem(word word word) CheckMenuItem16 155 pascal -ret16 EnableMenuItem(word word word) EnableMenuItem16 156 pascal -ret16 GetSystemMenu(word word) GetSystemMenu16 157 pascal -ret16 GetMenu(word) GetMenu16 158 pascal -ret16 SetMenu(word word) SetMenu16 159 pascal -ret16 GetSubMenu(word word) GetSubMenu16 160 pascal -ret16 DrawMenuBar(word) DrawMenuBar16 161 pascal -ret16 GetMenuString(word word ptr s_word word) GetMenuString16 162 pascal -ret16 HiliteMenuItem(word word word word) HiliteMenuItem16 163 pascal -ret16 CreateCaret(word word word word) CreateCaret16 164 pascal -ret16 DestroyCaret() DestroyCaret16 165 pascal -ret16 SetCaretPos(word word) SetCaretPos16 166 pascal -ret16 HideCaret(word) HideCaret16 167 pascal -ret16 ShowCaret(word) ShowCaret16 168 pascal -ret16 SetCaretBlinkTime(word) SetCaretBlinkTime16 169 pascal -ret16 GetCaretBlinkTime() GetCaretBlinkTime16 170 pascal -ret16 ArrangeIconicWindows(word) ArrangeIconicWindows16 # W1.1: CREATECONVERTWINDOW, W2.0: nothing ! 171 pascal -ret16 WinHelp(word str word long) WinHelp16 # W1.1: SHOWCONVERTWINDOW, W2.0: nothing ! 172 pascal -ret16 SwitchToThisWindow(word word) SwitchToThisWindow16 # W1.1: SETCONVERTWINDOWHEIGHT, W2.0: nothing ! 173 pascal -ret16 LoadCursor(word str) LoadCursor16 174 pascal -ret16 LoadIcon(word str) LoadIcon16 175 pascal -ret16 LoadBitmap(word str) LoadBitmap16 176 pascal -ret16 LoadString(word word ptr s_word) LoadString16 177 pascal -ret16 LoadAccelerators(word str) LoadAccelerators16 178 pascal -ret16 TranslateAccelerator(word word ptr) TranslateAccelerator16 179 pascal -ret16 GetSystemMetrics(s_word) GetSystemMetrics16 180 pascal GetSysColor(word) GetSysColor16 181 pascal -ret16 SetSysColors(word ptr ptr) SetSysColors16 182 pascal -ret16 KillSystemTimer(word word) KillSystemTimer16 # BEAR182 183 pascal -ret16 GetCaretPos(ptr) GetCaretPos16 184 pascal -ret16 QuerySendMessage(word word word ptr) QuerySendMessage16 185 pascal -ret16 GrayString(word word segptr segptr s_word s_word s_word s_word s_word) GrayString16 186 pascal -ret16 SwapMouseButton(word) SwapMouseButton16 187 pascal -ret16 EndMenu() EndMenu 188 pascal -ret16 SetSysModalWindow(word) SetSysModalWindow16 189 pascal -ret16 GetSysModalWindow() GetSysModalWindow16 190 pascal -ret16 GetUpdateRect(word ptr word) GetUpdateRect16 191 pascal -ret16 ChildWindowFromPoint(word long) ChildWindowFromPoint16 192 pascal -ret16 InSendMessage() InSendMessage16 193 pascal -ret16 IsClipboardFormatAvailable(word) IsClipboardFormatAvailable16 194 pascal -ret16 DlgDirSelectComboBox(word ptr word) DlgDirSelectComboBox16 195 pascal -ret16 DlgDirListComboBox(word ptr word word word) DlgDirListComboBox16 196 pascal TabbedTextOut(word s_word s_word ptr s_word s_word ptr s_word) TabbedTextOut16 197 pascal GetTabbedTextExtent(word ptr word word ptr) GetTabbedTextExtent16 198 pascal -ret16 CascadeChildWindows(word word) CascadeChildWindows16 199 pascal -ret16 TileChildWindows(word word) TileChildWindows16 200 pascal -ret16 OpenComm(str word word) OpenComm16 201 pascal -ret16 SetCommState(ptr) SetCommState16 202 pascal -ret16 GetCommState(word ptr) GetCommState16 203 pascal -ret16 GetCommError(word ptr) GetCommError16 204 pascal -ret16 ReadComm(word ptr word) ReadComm16 205 pascal -ret16 WriteComm(word ptr word) WriteComm16 206 pascal -ret16 TransmitCommChar(word word) TransmitCommChar16 207 pascal -ret16 CloseComm(word) CloseComm16 208 pascal SetCommEventMask(word word) SetCommEventMask16 209 pascal -ret16 GetCommEventMask(word word) GetCommEventMask16 210 pascal -ret16 SetCommBreak(word) SetCommBreak16 211 pascal -ret16 ClearCommBreak(word) ClearCommBreak16 212 pascal -ret16 UngetCommChar(word word) UngetCommChar16 213 pascal -ret16 BuildCommDCB(ptr ptr) BuildCommDCB16 214 pascal EscapeCommFunction(word word) EscapeCommFunction16 215 pascal -ret16 FlushComm(word word) FlushComm16 216 pascal UserSeeUserDo(word word word word) UserSeeUserDo16 # W1.1, W2.0: MYOPENCOMM #217-299 not in W1.1 217 pascal -ret16 LookupMenuHandle(word s_word) LookupMenuHandle16 218 pascal -ret16 DialogBoxIndirect(word word word segptr) DialogBoxIndirect16 219 pascal -ret16 CreateDialogIndirect(word segptr word segptr) CreateDialogIndirect16 220 pascal -ret16 LoadMenuIndirect(segptr) LoadMenuIndirect16 221 pascal -ret16 ScrollDC(word s_word s_word ptr ptr word ptr) ScrollDC16 222 pascal -ret16 GetKeyboardState(ptr) GetKeyboardState16 223 pascal -ret16 SetKeyboardState(ptr) SetKeyboardState16 224 pascal -ret16 GetWindowTask(word) GetWindowTask16 225 pascal -ret16 EnumTaskWindows(word segptr long) EnumTaskWindows16 226 pascal -ret16 LockInput(word word word) LockInput16 227 pascal -ret16 GetNextDlgGroupItem(word word word) GetNextDlgGroupItem16 228 pascal -ret16 GetNextDlgTabItem(word word word) GetNextDlgTabItem16 229 pascal -ret16 GetTopWindow(word) GetTopWindow16 230 pascal -ret16 GetNextWindow(word word) GetNextWindow16 231 pascal -ret16 GetSystemDebugState() GetSystemDebugState16 232 pascal -ret16 SetWindowPos(word word word word word word word) SetWindowPos16 233 pascal -ret16 SetParent(word word) SetParent16 234 pascal -ret16 UnhookWindowsHook(s_word segptr) UnhookWindowsHook16 235 pascal DefHookProc(s_word word long ptr) DefHookProc16 236 pascal -ret16 GetCapture() GetCapture16 237 pascal -ret16 GetUpdateRgn(word word word) GetUpdateRgn16 238 pascal -ret16 ExcludeUpdateRgn(word word) ExcludeUpdateRgn16 239 pascal -ret16 DialogBoxParam(word str word segptr long) DialogBoxParam16 240 pascal -ret16 DialogBoxIndirectParam(word word word segptr long) DialogBoxIndirectParam16 241 pascal -ret16 CreateDialogParam(word str word segptr long) CreateDialogParam16 242 pascal -ret16 CreateDialogIndirectParam(word segptr word segptr long) CreateDialogIndirectParam16 243 pascal GetDialogBaseUnits() GetDialogBaseUnits16 244 pascal -ret16 EqualRect(ptr ptr) EqualRect16 245 pascal -ret16 EnableCommNotification(s_word word s_word s_word) EnableCommNotification16 246 pascal -ret16 ExitWindowsExec(str str) ExitWindowsExec16 247 pascal -ret16 GetCursor() GetCursor16 248 pascal -ret16 GetOpenClipboardWindow() GetOpenClipboardWindow16 249 pascal -ret16 GetAsyncKeyState(word) GetAsyncKeyState16 250 pascal -ret16 GetMenuState(word word word) GetMenuState16 251 pascal SendDriverMessage(word word long long) SendDriverMessage16 252 pascal -ret16 OpenDriver(str str long) OpenDriver16 253 pascal CloseDriver(word long long) CloseDriver16 254 pascal -ret16 GetDriverModuleHandle(word) GetDriverModuleHandle16 255 pascal DefDriverProc(long word word long long) DefDriverProc16 256 pascal -ret16 GetDriverInfo(word ptr) GetDriverInfo16 257 pascal -ret16 GetNextDriver(word long) GetNextDriver16 258 pascal -ret16 MapWindowPoints(word word ptr word) MapWindowPoints16 259 pascal -ret16 BeginDeferWindowPos(s_word) BeginDeferWindowPos16 260 pascal -ret16 DeferWindowPos(word word word s_word s_word s_word s_word word) DeferWindowPos16 261 pascal -ret16 EndDeferWindowPos(word) EndDeferWindowPos16 262 pascal -ret16 GetWindow(word word) GetWindow16 263 pascal -ret16 GetMenuItemCount(word) GetMenuItemCount16 264 pascal -ret16 GetMenuItemID(word word) GetMenuItemID16 265 pascal -ret16 ShowOwnedPopups(word word) ShowOwnedPopups16 266 pascal -ret16 SetMessageQueue(word) SetMessageQueue16 267 pascal -ret16 ShowScrollBar(word word word) ShowScrollBar16 268 pascal -ret16 GlobalAddAtom(str) GlobalAddAtom16 269 pascal -ret16 GlobalDeleteAtom(word) GlobalDeleteAtom16 270 pascal -ret16 GlobalFindAtom(str) GlobalFindAtom16 271 pascal -ret16 GlobalGetAtomName(word ptr s_word) GlobalGetAtomName16 272 pascal -ret16 IsZoomed(word) IsZoomed16 273 pascal -ret16 ControlPanelInfo(word word str) ControlPanelInfo16 274 stub GetNextQueueWindow 275 pascal -ret16 RepaintScreen() RepaintScreen16 276 stub LockMyTask 277 pascal -ret16 GetDlgCtrlID(word) GetDlgCtrlID16 278 pascal -ret16 GetDesktopHwnd() GetDesktopHwnd16 279 pascal -ret16 OldSetDeskPattern() SetDeskPattern16 280 pascal -ret16 SetSystemMenu(word word) SetSystemMenu16 281 pascal -ret16 GetSysColorBrush(word) GetSysColorBrush16 282 pascal -ret16 SelectPalette(word word word) SelectPalette16 283 pascal -ret16 RealizePalette(word) RealizePalette16 284 pascal -ret16 GetFreeSystemResources(word) GetFreeSystemResources16 285 pascal -ret16 SetDeskWallPaper(ptr) SetDeskWallPaper16 # BEAR285 286 pascal -ret16 GetDesktopWindow() GetDesktopWindow16 287 pascal -ret16 GetLastActivePopup(word) GetLastActivePopup16 288 pascal GetMessageExtraInfo() GetMessageExtraInfo 289 pascal -register keybd_event() keybd_event16 290 pascal -ret16 RedrawWindow(word ptr word word) RedrawWindow16 291 pascal SetWindowsHookEx(s_word segptr word word) SetWindowsHookEx16 292 pascal -ret16 UnhookWindowsHookEx(segptr) UnhookWindowsHookEx16 293 pascal CallNextHookEx(segptr s_word word long) CallNextHookEx16 294 pascal -ret16 LockWindowUpdate(word) LockWindowUpdate16 299 pascal -register mouse_event() mouse_event16 300 stub UnloadInstalledDrivers # W1.1: USER_FARFRAME 301 stub EDITWNDPROC # BOZOSLIVEHERE :-)) 302 stub STATICWNDPROC 303 stub BUTTONWNDPROC 304 stub SBWNDPROC 305 stub DESKTOPWNDPROC # W1.1: ICONWNDPROC 306 stub MENUWNDPROC # BEAR306 307 stub LBOXCTLWNDPROC 308 pascal DefDlgProc(word word word long) DefDlgProc16 # W1.1, W2.0: DLGWNDPROC 309 pascal -ret16 GetClipCursor(ptr) GetClipCursor16 # W1.1, W2.0: MESSAGEBOXWNDPROC #310 ContScroll #311 CaretBlinkProc # W1.1 #312 SendMessage2 #313 PostMessage2 314 pascal -ret16 SignalProc(word word word word word) SignalProc16 #315 XCStoDS #316 CompUpdateRect #317 CompUpdateRgn #318 GetWC2 319 pascal -ret16 ScrollWindowEx(word s_word s_word ptr ptr word ptr word) ScrollWindowEx16 # W1.1, W2.0: SETWC2 320 pascal -ret16 SysErrorBox(str str word word word) SysErrorBox16 # W1.1: ICONNAMEWNDPROC, W2.0: nothing ! 321 pascal SetEventHook(segptr) SetEventHook16 # W1.1, W2.0: DESTROYTASKWINDOWS2 322 stub WinOldAppHackOMatic # W1.1, W2.0: POSTSYSERROR 323 stub GetMessage2 324 pascal -ret16 FillWindow(word word word word) FillWindow16 325 pascal -ret16 PaintRect(word word word word ptr) PaintRect16 326 pascal -ret16 GetControlBrush(word word word) GetControlBrush16 #327 KillTimer2 #328 SetTimer2 #329 MenuItemState # W1.1 #330 SetGetKbdState 331 pascal -ret16 EnableHardwareInput(word) EnableHardwareInput16 332 pascal -ret16 UserYield() UserYield16 333 pascal -ret16 IsUserIdle() IsUserIdle16 334 pascal GetQueueStatus(word) GetQueueStatus16 335 pascal -ret16 GetInputState() GetInputState16 336 pascal -ret16 LoadCursorIconHandler(word word word) LoadCursorIconHandler16 337 pascal GetMouseEventProc() GetMouseEventProc16 338 stub ECGETDS # W2.0 (only ?) #340 WinFarFrame #341 _FFFE_FARFRAME 343 stub GetFilePortName 344 stub COMBOBOXCTLWNDPROC 345 stub BEAR345 #354 TabTheTextOutForWimps #355 BroadcastMessage 356 pascal -ret16 LoadDIBCursorHandler(word word word) LoadDIBCursorHandler16 357 pascal -ret16 LoadDIBIconHandler(word word word) LoadDIBIconHandler16 358 pascal -ret16 IsMenu(word) IsMenu16 359 pascal -ret16 GetDCEx(word word long) GetDCEx16 362 pascal -ret16 DCHook(word word long long) DCHook16 364 pascal -ret16 LookupIconIdFromDirectoryEx(ptr word word word word) LookupIconIdFromDirectoryEx16 368 pascal -ret16 CopyIcon(word word) CopyIcon16 369 pascal -ret16 CopyCursor(word word) CopyCursor16 370 pascal -ret16 GetWindowPlacement(word ptr) GetWindowPlacement16 371 pascal -ret16 SetWindowPlacement(word ptr) SetWindowPlacement16 372 stub GetInternalIconHeader 373 pascal -ret16 SubtractRect(ptr ptr ptr) SubtractRect16 374 pascal -ret16 DllEntryPoint(long word word word long word) 375 stub DrawTextEx 376 stub SetMessageExtraInfo 378 stub SetPropEx 379 stub GetPropEx 380 stub RemovePropEx #381 stub UsrMPR_ThunkData16 382 stub SetWindowContextHelpID 383 stub GetWindowContextHelpID 384 pascal -ret16 SetMenuContextHelpId(word word) SetMenuContextHelpId16 385 pascal -ret16 GetMenuContextHelpId(word) GetMenuContextHelpId16 389 pascal LoadImage(word str word word word word) LoadImage16 390 pascal -ret16 CopyImage(word word word word word) CopyImage16 391 pascal -ret16 SignalProc32(long long long word) UserSignalProc 394 pascal -ret16 DrawIconEx(word word word word word word word word word) DrawIconEx16 395 pascal -ret16 GetIconInfo(word ptr) GetIconInfo16 397 pascal -ret16 RegisterClassEx(ptr) RegisterClassEx16 398 pascal -ret16 GetClassInfoEx(word segstr ptr) GetClassInfoEx16 399 pascal -ret16 ChildWindowFromPointEx(word long word) ChildWindowFromPointEx16 400 pascal -ret16 FinalUserInit() FinalUserInit16 402 pascal -ret16 GetPriorityClipboardFormat(ptr s_word) GetPriorityClipboardFormat16 403 pascal -ret16 UnregisterClass(str word) UnregisterClass16 404 pascal -ret16 GetClassInfo(word segstr ptr) GetClassInfo16 406 pascal -ret16 CreateCursor(word word word word word ptr ptr) CreateCursor16 407 pascal -ret16 CreateIcon(word word word word word ptr ptr) CreateIcon16 408 pascal -ret16 CreateCursorIconIndirect(word ptr ptr ptr) CreateCursorIconIndirect16 409 pascal -ret16 InitThreadInput(word word) InitThreadInput16 410 pascal -ret16 InsertMenu(word word word word segptr) InsertMenu16 411 pascal -ret16 AppendMenu(word word word segptr) AppendMenu16 412 pascal -ret16 RemoveMenu(word word word) RemoveMenu16 413 pascal -ret16 DeleteMenu(word word word) DeleteMenu16 414 pascal -ret16 ModifyMenu(word word word word segptr) ModifyMenu16 415 pascal -ret16 CreatePopupMenu() CreatePopupMenu16 416 pascal -ret16 TrackPopupMenu(word word s_word s_word s_word word ptr) TrackPopupMenu16 417 pascal GetMenuCheckMarkDimensions() GetMenuCheckMarkDimensions 418 pascal -ret16 SetMenuItemBitmaps(word word word word word) SetMenuItemBitmaps16 420 varargs -ret16 _wsprintf(ptr str) wsprintf16 421 pascal -ret16 wvsprintf(ptr str ptr) wvsprintf16 422 pascal -ret16 DlgDirSelectEx(word ptr word word) DlgDirSelectEx16 423 pascal -ret16 DlgDirSelectComboBoxEx(word ptr word word) DlgDirSelectComboBoxEx16 427 pascal -ret16 FindWindowEx(word word str str) FindWindowEx16 428 stub TileWindows 429 stub CascadeWindows 430 pascal -ret16 lstrcmp(str str) lstrcmpA 431 pascal AnsiUpper(segstr) AnsiUpper16 432 pascal AnsiLower(segstr) AnsiLower16 433 pascal -ret16 IsCharAlpha(word) IsCharAlphaA 434 pascal -ret16 IsCharAlphaNumeric(word) IsCharAlphaNumericA 435 pascal -ret16 IsCharUpper(word) IsCharUpperA 436 pascal -ret16 IsCharLower(word) IsCharLowerA 437 pascal -ret16 AnsiUpperBuff(str word) AnsiUpperBuff16 438 pascal -ret16 AnsiLowerBuff(str word) AnsiLowerBuff16 441 pascal -ret16 InsertMenuItem(word word word ptr) InsertMenuItem16 443 stub GetMenuItemInfo 445 pascal DefFrameProc(word word word word long) DefFrameProc16 446 stub SetMenuItemInfo 447 pascal DefMDIChildProc(word word word long) DefMDIChildProc16 448 pascal -ret16 DrawAnimatedRects(word word ptr ptr) DrawAnimatedRects16 449 pascal -ret16 DrawState(word word segptr long word s_word s_word s_word s_word word) DrawState16 450 pascal -ret16 CreateIconFromResourceEx(ptr long word long word word word) CreateIconFromResourceEx16 451 pascal -ret16 TranslateMDISysAccel(word ptr) TranslateMDISysAccel16 452 pascal -ret16 CreateWindowEx(long str str long s_word s_word s_word s_word word word word segptr) CreateWindowEx16 454 pascal -ret16 AdjustWindowRectEx(ptr long word long) AdjustWindowRectEx16 455 pascal -ret16 GetIconID(word long) GetIconID16 456 pascal -ret16 LoadIconHandler(word word) LoadIconHandler16 457 pascal -ret16 DestroyIcon(word) DestroyIcon16 458 pascal -ret16 DestroyCursor(word) DestroyCursor16 459 pascal DumpIcon(segptr ptr ptr ptr) DumpIcon16 460 pascal -ret16 GetInternalWindowPos(word ptr ptr) GetInternalWindowPos16 461 pascal -ret16 SetInternalWindowPos(word word ptr ptr) SetInternalWindowPos16 462 pascal -ret16 CalcChildScroll(word word) CalcChildScroll16 463 pascal -ret16 ScrollChildren(word word word long) ScrollChildren16 464 pascal DragObject(word word word word word word) DragObject16 465 pascal -ret16 DragDetect(word long) DragDetect16 466 pascal -ret16 DrawFocusRect(word ptr) DrawFocusRect16 470 stub StringFunc 471 pascal -ret16 lstrcmpi(str str) lstrcmpiA 472 pascal AnsiNext(segptr) AnsiNext16 473 pascal AnsiPrev(segptr segptr) AnsiPrev16 475 pascal -ret16 SetScrollInfo(word s_word ptr word) SetScrollInfo16 476 pascal -ret16 GetScrollInfo(word s_word ptr) GetScrollInfo16 477 pascal -ret16 GetKeyboardLayoutName(ptr) GetKeyboardLayoutName16 478 stub LoadKeyboardLayout 479 stub MenuItemFromPoint 480 stub GetUserLocalObjType #481 HARDWARE_EVENT 482 pascal -ret16 EnableScrollBar(word word word) EnableScrollBar16 483 pascal -ret16 SystemParametersInfo(word word ptr word) SystemParametersInfo16 #484 __GP # Stubs for Hebrew version 485 pascal -ret16 MakeMenuRToL(word word) MakeMenuRToL16 486 pascal -ret16 RawGetTabbedTextExtent() stub_USER_486 487 pascal -ret16 RawDrawText(word str s_word ptr word) RawDrawText16 488 pascal -ret16 RawTabbedTextOut() stub_USER_488 489 pascal -ret16 GetKeyboardLanguage() GetKeyboardLanguage16 490 pascal -ret16 SetKeyboardLanguage(word word) SetKeyboardLanguage16 491 pascal -ret16 BiDiGrayString() stub_USER_491 492 pascal -ret16 MakeScrollBarsRToL(word word word) MakeScrollBarsRToL 493 pascal -ret16 IsCharBiDi() stub_USER_493 494 pascal -ret16 IsCharEnglish() stub_USER_494 495 pascal -ret16 LenFruser1() stub_USER_495 496 pascal -ret16 DrawTextRToL() stub_USER_496 498 stub BEAR498 499 pascal -ret16 WNetErrorText(word ptr word) WNetErrorText16 500 stub FARCALLNETDRIVER # Undocumented Windows 501 pascal -ret16 WNetOpenJob(ptr ptr word ptr) WNetOpenJob16 502 pascal -ret16 WNetCloseJob(word ptr ptr) WNetCloseJob16 503 pascal -ret16 WNetAbortJob(ptr word) WNetAbortJob16 504 pascal -ret16 WNetHoldJob(ptr word) WNetHoldJob16 505 pascal -ret16 WNetReleaseJob(ptr word) WNetReleaseJob16 506 pascal -ret16 WNetCancelJob(ptr word) WNetCancelJob16 507 pascal -ret16 WNetSetJobCopies(ptr word word) WNetSetJobCopies16 508 pascal -ret16 WNetWatchQueue(word ptr ptr word) WNetWatchQueue16 509 pascal -ret16 WNetUnwatchQueue(str) WNetUnwatchQueue16 510 pascal -ret16 WNetLockQueueData(ptr ptr ptr) WNetLockQueueData16 511 pascal -ret16 WNetUnlockQueueData(ptr) WNetUnlockQueueData16 512 pascal -ret16 WNetGetConnection(ptr ptr ptr) WNetGetConnection16 513 pascal -ret16 WNetGetCaps(word) WNetGetCaps16 514 pascal -ret16 WNetDeviceMode(word) WNetDeviceMode16 515 pascal -ret16 WNetBrowseDialog(word word ptr) WNetBrowseDialog16 516 pascal -ret16 WNetGetUser(ptr ptr) WNetGetUser16 517 pascal -ret16 WNetAddConnection(str str str) WNetAddConnection16 518 pascal -ret16 WNetCancelConnection(str word) WNetCancelConnection16 519 pascal -ret16 WNetGetError(ptr) WNetGetError16 520 pascal -ret16 WNetGetErrorText(word ptr ptr) WNetGetErrorText16 521 stub WNetEnable 522 stub WNetDisable 523 pascal -ret16 WNetRestoreConnection(word ptr) WNetRestoreConnection16 524 pascal -ret16 WNetWriteJob(word ptr ptr) WNetWriteJob16 525 pascal -ret16 WNetConnectDialog(word word) WNetConnectDialog16 526 pascal -ret16 WNetDisconnectDialog(word word) WNetDisconnectDialog16 527 pascal -ret16 WNetConnectionDialog(word word) WNetConnectionDialog16 528 pascal -ret16 WNetViewQueueDialog(word ptr) WNetViewQueueDialog16 529 pascal -ret16 WNetPropertyDialog(word word word str word) WNetPropertyDialog16 530 pascal -ret16 WNetGetDirectoryType(ptr ptr) WNetGetDirectoryType16 531 pascal -ret16 WNetDirectoryNotify(word ptr word) WNetDirectoryNotify16 532 pascal -ret16 WNetGetPropertyText(word word str str word word) WNetGetPropertyText16 533 stub WNetInitialize #533 stub NOTIFYWOW # ordinal conflict with WNetInitialize !! 534 stub WNetLogon #534 stub DEFDLGPROCTHUNK # ordinal conflict with WNetLogon !! 535 stub WOWWORDBREAKPROC 537 stub MOUSEEVENT 538 stub KEYBDEVENT 595 stub OLDEXITWINDOWS 600 pascal -ret16 GetShellWindow() GetShellWindow16 601 stub DoHotkeyStuff 602 stub SetCheckCursorTimer 604 stub BroadcastSystemMessage 605 stub HackTaskMonitor 606 pascal -ret16 FormatMessage(long segptr word word ptr word ptr) FormatMessage16 608 pascal -ret16 GetForegroundWindow() GetForegroundWindow16 609 pascal -ret16 SetForegroundWindow(word) SetForegroundWindow16 610 pascal -ret16 DestroyIcon32(word word) DestroyIcon32 620 pascal ChangeDisplaySettings(ptr long) ChangeDisplaySettings16 621 pascal -ret16 EnumDisplaySettings(str long ptr) EnumDisplaySettings16 640 pascal MsgWaitForMultipleObjects(long ptr long long long) MsgWaitForMultipleObjects16 650 stub ActivateKeyboardLayout 651 stub GetKeyboardLayout 652 stub GetKeyboardLayoutList 654 stub UnloadKeyboardLayout 655 stub PostPostedMessages 656 pascal -ret16 DrawFrameControl(word ptr word word) DrawFrameControl16 657 pascal -ret16 DrawCaptionTemp(word word ptr word word ptr word) DrawCaptionTemp16 658 stub DispatchInput 659 pascal -ret16 DrawEdge(word ptr word word) DrawEdge16 660 pascal -ret16 DrawCaption(word word ptr word) DrawCaption16 661 stub SetSysColorsTemp 662 stub DrawMenubarTemp 663 stub GetMenuDefaultItem 664 stub SetMenuDefaultItem 665 pascal -ret16 GetMenuItemRect(word word word ptr) GetMenuItemRect16 666 pascal -ret16 CheckMenuRadioItem(word word word word word) CheckMenuRadioItem16 667 stub TrackPopupMenuEx 668 pascal -ret16 SetWindowRgn(word word word) SetWindowRgn16 669 stub GetWindowRgn 800 stub CHOOSEFONT_CALLBACK16 801 stub FINDREPLACE_CALLBACK16 802 stub OPENFILENAME_CALLBACK16 803 stub PRINTDLG_CALLBACK16 804 stub CHOOSECOLOR_CALLBACK16 819 pascal -ret16 PeekMessage32(ptr word word word word word) PeekMessage32_16 820 pascal GetMessage32(ptr word word word word) GetMessage32_16 821 pascal -ret16 TranslateMessage32(ptr word) TranslateMessage32_16 #821 stub IsDialogMessage32 # FIXME: two ordinal 821??? 822 pascal DispatchMessage32(ptr word) DispatchMessage32_16 823 pascal -ret16 CallMsgFilter32(ptr word word) CallMsgFilter32_16 825 stub PostMessage32 826 stub PostThreadMessage32 827 pascal -ret16 MessageBoxIndirect(ptr) MessageBoxIndirect16 851 stub MsgThkConnectionDataLS 853 stub FT_USRFTHKTHKCONNECTIONDATA 854 stub FT__USRF2THKTHKCONNECTIONDATA 855 stub Usr32ThkConnectionDataSL 890 stub InstallIMT 891 stub UninstallIMT # API for Hebrew version 901 pascal -ret16 FindResourceEx() FindResourceEx16 902 pascal -ret16 LoadSystemLanguageString(word word ptr word word) LoadSystemLanguageString16 903 pascal -ret16 GetClipboardCodePage(word word word) GetClipboardCodePage16 904 pascal -ret16 ResetDialogTemplate() ResetDialogTemplate16 905 pascal -ret16 ChangeDialogTemplate() ChangeDialogTemplate16 906 pascal -ret16 GetNumLanguages() GetNumLanguages16 907 pascal -ret16 GetLanguageName(word word ptr word) GetLanguageName16 908 pascal -ret16 GetLanguageResId() GetLanguageResId16 909 pascal -ret16 SetWindowTextEx(word str word) SetWindowTextEx16 910 pascal -ret16 BiDiMessageBoxEx(word str str word word) MessageBoxEx16 911 pascal -ret16 SetDlgItemTextEx(word word str word) SetDlgItemTextEx16 912 pascal ChangeKeyboardLanguage(word word) ChangeKeyboardLanguage16 913 pascal -ret16 GetCodePageSystemFont(word word) GetCodePageSystemFont16 914 pascal -ret16 QueryCodePage(word word word long) QueryCodePage16 915 pascal GetAppCodePage(word) GetAppCodePage16 916 pascal -ret16 CreateDialogIndirectParamML(word ptr word ptr long word word str word) CreateDialogIndirectParamML16 917 pascal -ret16 CreateDialogParamML() CreateDialogParamML16 918 pascal -ret16 DialogBoxIndirectParamML(word word word ptr long word word str word) DialogBoxIndirectParamML16 919 pascal -ret16 LoadLanguageString(word word word ptr word) LoadLanguageString16 920 pascal SetAppCodePage(word word word word) SetAppCodePage16 922 pascal GetBaseCodePage() GetBaseCodePage16 923 pascal -ret16 FindLanguageResource(word str str word) FindLanguageResource16 924 pascal ChangeKeyboardCodePage(word word) ChangeKeyboardCodePage16 925 pascal -ret16 LangToBestCodePage() LangToBestCodePage16 926 pascal -ret16 GetNumKeyboards() GetNumKeyboards16 927 pascal -ret16 IsCharHebrew(word) IsCharHebrew16 928 pascal -ret16 IsCharFrench(word) IsCharFrench16 929 pascal -ret16 IsCharArabic(word) IsCharArabic16 930 pascal -ret16 MessageBoxEx(word str str word word) MessageBoxEx16 1000 pascal -ret16 SetProcessDefaultLayout(long) SetProcessDefaultLayout16 1001 pascal -ret16 GetProcessDefaultLayout(ptr) GetProcessDefaultLayout16 # Wine internal functions 1010 pascal __wine_call_wndproc(word word word long long) __wine_call_wndproc ################################################################ # 32-bit exports of the 16-bit functions needed by other dlls # @ stdcall -arch=win32 CreateIcon16(long long long long long ptr ptr) @ stdcall -arch=win32 CreateIconFromResourceEx16(ptr long long long long long long) @ stdcall -arch=win32 SelectPalette16(long long long) @ stdcall -arch=win32 dialog_template16_to_template32(long long ptr ptr) @ stdcall -arch=win32 DIALOG_CallDialogProc(ptr long ptr ptr ptr) @ stdcall -arch=win32 __wine_call_wndproc(long long long long long) @ stdcall -arch=win32 LoadBitmap16(long str) @ stdcall -arch=win32 window_message16_32(ptr ptr) @ stdcall -arch=win32 window_message32_16(ptr ptr) @ stdcall -arch=win32 LoadString16(long long ptr long) @ stdcall -arch=win32 set_realized_palette(long) @ stdcall -arch=win32 get_realized_palette() @ cdecl -arch=win32 regen_icon(long) ================================================ FILE: user/user.vcxproj ================================================  Debug Win32 Release Win32 {066A261B-90F6-4AB7-8F53-1455F068D6F7} user 10.0.17134.0 DynamicLibrary true v141 Unicode Application false v141 true MultiByte .exe16 .exe16 Level3 Disabled false ../wine WIN32;_DEBUG;_WINDOWS;_USRDLL;_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) false true 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 user.def Windows ole32.dll Level3 MaxSpeed true true false ../wine _X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true true true user.def 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 false ole32.dll false false Document "$(OutDir)convspec" "%(Filename).spec" --heap 65520 USER > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" --heap 65520 USER > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: user/user.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ヘッダー ファイル ソース ファイル ソース ファイル リソース ファイル ================================================ FILE: user/user_private.h ================================================ /* * USER private definitions * * Copyright 1993, 2009 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_USER_PRIVATE_H #define __WINE_USER_PRIVATE_H #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "winreg.h" #include "winternl.h" #include "wine/windef16.h" #include "wine/library.h" /* Wow handlers */ /* the structures must match the corresponding ones in user32 */ struct wow_handlers16 { LRESULT (*button_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*combo_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*edit_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*listbox_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*mdiclient_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*scrollbar_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*static_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); DWORD (*wait_message)(DWORD,const HANDLE*,DWORD,DWORD,DWORD); HWND (*create_window)(CREATESTRUCTW*,LPCWSTR,HINSTANCE,BOOL); LRESULT (*call_window_proc)(HWND,UINT,WPARAM,LPARAM,LRESULT*,void*); LRESULT (*call_dialog_proc)(HWND,UINT,WPARAM,LPARAM,LRESULT*,void*); void (*free_icon_param)(ULONG_PTR); }; struct wow_handlers32 { LRESULT (*button_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*combo_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*edit_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*listbox_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*mdiclient_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*scrollbar_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*static_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); DWORD (*wait_message)(DWORD,const HANDLE*,DWORD,DWORD,DWORD); HWND (*create_window)(CREATESTRUCTW*,LPCWSTR,HINSTANCE,BOOL); HWND (*get_win_handle)(HWND); WNDPROC (*alloc_winproc)(WNDPROC,BOOL); struct tagDIALOGINFO *(*get_dialog_info)(HWND,BOOL); INT (*dialog_box_loop)(HWND,HWND); ULONG_PTR (*get_icon_param)(HICON); ULONG_PTR (*set_icon_param)(HICON,ULONG_PTR); }; extern struct wow_handlers32 wow_handlers32 DECLSPEC_HIDDEN; extern HWND create_window16(CREATESTRUCTW*,LPCWSTR,HINSTANCE,BOOL) DECLSPEC_HIDDEN; extern void free_module_classes(HINSTANCE16) DECLSPEC_HIDDEN; extern void register_wow_handlers(void) DECLSPEC_HIDDEN; //extern void WINAPI UserRegisterWowHandlers( const struct wow_handlers16 *new, // struct wow_handlers32 *orig ); static inline HWND WIN_Handle32( HWND16 hwnd16 ) { return wow_handlers32.get_win_handle( (HWND)(ULONG_PTR)hwnd16 ); } typedef LRESULT (*winproc_callback_t)( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg ); typedef LRESULT (*winproc_callback16_t)( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp, LRESULT *result, void *arg ); extern WNDPROC16 WINPROC_GetProc16( WNDPROC proc, BOOL unicode ) DECLSPEC_HIDDEN; extern WNDPROC WINPROC_AllocProc16( WNDPROC16 func ) DECLSPEC_HIDDEN; extern LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg ) DECLSPEC_HIDDEN; extern LRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result, void *arg ) DECLSPEC_HIDDEN; extern void call_WH_CALLWNDPROC_hook( HWND16 hwnd, UINT16 *msg, WPARAM16 *wp, LPARAM *lp ) DECLSPEC_HIDDEN; #define GET_BYTE(ptr) (*(const BYTE *)(ptr)) #define GET_WORD(ptr) (*(const WORD *)(ptr)) #define GET_DWORD(ptr) (*(const DWORD *)(ptr)) #define WM_SYSTIMER 0x0118 /* Dialog info structure (must match the user32 one) */ typedef struct tagDIALOGINFO { HWND hwndFocus; /* Current control with focus */ HFONT hUserFont; /* Dialog font */ HMENU hMenu; /* Dialog menu */ UINT xBaseUnit; /* Dialog units (depends on the font) */ UINT yBaseUnit; INT idResult; /* EndDialog() result / default pushbutton ID */ UINT flags; /* EndDialog() called for this dialog */ } DIALOGINFO; typedef struct { HMENU16 hMenu16; DLGPROC16 dlgProc; } dialog_data; #define DF_END 0x0001 #define DF_OWNERENABLED 0x0002 /* HANDLE16 <-> HANDLE conversions */ #define HINSTANCE_16(h32) (LOWORD(h32)) #define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16)) extern HICON16 get_icon_16( HICON icon ) DECLSPEC_HIDDEN; extern HICON get_icon_32( HICON16 icon16 ) DECLSPEC_HIDDEN; extern DWORD USER16_AlertableWait DECLSPEC_HIDDEN; extern WORD USER_HeapSel DECLSPEC_HIDDEN; //add /* those defines are (some of the) regular LDR_MODULE.Flags values */ #define LDR_IMAGE_IS_DLL 0x00000004 #define LDR_LOAD_IN_PROGRESS 0x00001000 #define LDR_UNLOAD_IN_PROGRESS 0x00002000 #define LDR_NO_DLL_CALLS 0x00040000 #define LDR_PROCESS_ATTACHED 0x00080000 #define LDR_MODULE_REBASED 0x00200000 /* these ones is Wine specific */ #define LDR_DONT_RESOLVE_REFS 0x40000000 #define LDR_WINE_INTERNAL 0x80000000 /* flag for LdrAddRefDll */ #define LDR_ADDREF_DLL_PIN 0x00000001 /* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */ #define WCB16_REGS 2 #define WCB16_REGS_LONG 4 /* function uses 32-bit lret */ /* Windows Exit Procedure flag values */ #define WEP_FREE_DLL 0 #define WEP_SYSTEM_EXIT 1 //wine winbase.h #define OF_SEARCH 0x0400 /* Used without OF_REOPEN */ /* GetTempFileName() Flags */ #define TF_FORCEDRIVE 0x80 //winnt.h /* This flag allows it to create heaps shared by all processes under win95, FIXME: correct name */ #define HEAP_SHARED 0x04000000 #define WH_HARDWARE 8 #define WM_CTLCOLOR 0x0019 /* Added from windowsx.h */ //winuser #define LB_CARETON 0x01a3 #define LB_CARETOFF 0x01a4 #include //#include "winuser.rh" #define WM_SIZEWAIT 0x0004 /* DDK / Win16 */ #define WM_SETVISIBLE 0x0009 /* DDK / Win16 */ #define WM_SYSTEMERROR 0x0017 /* DDK / Win16 */ #define WM_ALTTABACTIVE 0x0029 /* DDK / Win16 */ #define WM_FILESYSCHANGE 0x0034 /* DDK / Win16 */ #define WM_ISACTIVEICON 0x0035 /* DDK / Win16 */ #define WM_TESTING 0x003a /* DDK / Win16 */ #define WM_KEYF1 0x004d /* DDK / Win16 */ #define WM_SYNCTASK 0x0089 /* DDK / Win16 */ #define WM_LBTRACKPOINT 0x0131 /* DDK / Win16 */ /* D&D messages */ #define WM_DROPOBJECT 0x022A /* DDK / Win16 */ #define WM_QUERYDROPOBJECT 0x022B /* DDK / Win16 */ #define WM_BEGINDRAG 0x022C /* DDK / Win16 */ #define WM_DRAGLOOP 0x022D /* DDK / Win16 */ #define WM_DRAGSELECT 0x022E /* DDK / Win16 */ #define WM_DRAGMOVE 0x022F /* DDK / Win16 */ /* DDK / Win16 defines */ #define MFS_MASK __MSABI_LONG(0x0000108B) #define MFS_HOTTRACKDRAWN __MSABI_LONG(0x10000000) #define MFS_CACHEDBMP __MSABI_LONG(0x20000000) #define MFS_BOTTOMGAPDROP __MSABI_LONG(0x40000000) #define MFS_TOPGAPDROP __MSABI_LONG(0x80000000) #define MFS_GAPDROP (MFS_BOTTOMGAPDROP | MFS_TOPGAPDROP) #define OCR_HELP 32651 /* DDK / Win16 */ #define OCR_RDRVERT 32652 /* DDK / Win16 */ #define OCR_RDRHORZ 32653 /* DDK / Win16 */ #define OCR_RDR2DIM 32654 /* DDK / Win16 */ #define OCR_RDRNORTH 32655 /* DDK / Win16 */ #define OCR_RDRSOUTH 32656 /* DDK / Win16 */ #define OCR_RDRWEST 32657 /* DDK / Win16 */ #define OCR_RDREAST 32658 /* DDK / Win16 */ #define OCR_RDRNORTHWEST 32659 /* DDK / Win16 */ #define OCR_RDRNORTHEAST 32660 /* DDK / Win16 */ #define OCR_RDRSOUTHWEST 32661 /* DDK / Win16 */ #define OCR_RDRSOUTHEAST 32662 /* DDK / Win16 */ #define EM_SETFONT 0x00c3 /* DDK / Win16 */ #define EM_SETWORDBREAK 0x00ca /* DDK / Win16 */ //winuser #define DCX_USESTYLE 0x00010000 __declspec(dllimport) PVOID getWOW32Reserved(); __declspec(dllimport) PVOID setWOW32Reserved(PVOID w); LONG WINAPI GdiGetCharDimensions(HDC hdc, LPTEXTMETRICW lptm, LONG *height); typedef BOOL(WINAPI *PDrawCaptionTempA) ( HWND hwnd, HDC hdc, const RECT *rect, HFONT hFont, HICON hIcon, LPCSTR str, UINT32 uFlags ); extern PDrawCaptionTempA DrawCaptionTempA; typedef VOID(WINAPI *PScrollChildren)(HWND, UINT, WPARAM, LPARAM); extern PScrollChildren ScrollChildren; typedef void (WINAPI *PCalcChildScroll)(HWND, INT); extern PCalcChildScroll CalcChildScroll; typedef void (WINAPI *PSetInternalWindowPos)(HWND, UINT, LPRECT, LPPOINT); extern PSetInternalWindowPos SetInternalWindowPos; typedef BOOL (WINAPI *PSetSystemMenu)(HWND, HMENU); extern PSetSystemMenu SetSystemMenu; typedef BOOL (WINAPI *PKillSystemTimer)(HWND, UINT_PTR); extern PKillSystemTimer KillSystemTimer; typedef UINT_PTR (WINAPI *PSetSystemTimer)(HWND, UINT_PTR, UINT, TIMERPROC); extern PSetSystemTimer SetSystemTimer; typedef BOOL (WINAPI *PSetDeskWallPaper)(LPCSTR); extern PSetDeskWallPaper SetDeskWallPaper; typedef UINT (WINAPI *PUserRealizePalette)(HDC); extern PUserRealizePalette UserRealizePalette; typedef void (WINAPI *PUserRegisterWowHandlers)(const struct wow_handlers16 *new, struct wow_handlers32 *orig); extern PUserRegisterWowHandlers UserRegisterWowHandlers; void load_user32_functions(); #define strncasecmp _strnicmp __declspec(dllimport) void SetWndProc16(WORD hWnd16, DWORD WndProc); __declspec(dllimport) DWORD GetWndProc16(WORD hWnd16); #define STR_ATOM_MIN MAXINTATOM #define STR_ATOM_MAX 0xFFFF #define STR_ATOM_SIZE STR_ATOM_MAX - STR_ATOM_MIN struct WNDCLASS16Info { BOOL allocated; DWORD wndproc; WORD cbWndExtra; }; extern struct WNDCLASS16Info WNDCLASS16Info[65536]; extern struct WNDCLASS16Info *WNDCLASS16InfoStringAtom[65536]; #include "wine/list.h" struct class_entry { struct list entry; ATOM atom; HINSTANCE16 inst; DWORD wndproc16; WNDCLASSEXA classInfo; LPCSTR win32_classname; }; struct class_entry *find_win16_class(HINSTANCE16 hInst16, LPCSTR name); struct class_entry *find_win32_class(LPCSTR name); LPCSTR win16classname(LPCSTR name); LPCSTR win32classname(HINSTANCE16 hInst16, LPCSTR name); #define LOCAL_CLASS_PREFIX "WIN16" #include typedef struct { HWND16 hwndSource; HWND16 hwndSink; WORD wFmt; DWORD dwData; POINT16 ptDrop; DWORD dwControlData; } DROPSTRUCT16, *PDROPSTRUCT16, *LPDROPSTRUCT16; #include extern void free_module_hooks(HINSTANCE16) DECLSPEC_HIDDEN; #endif /* __WINE_USER_PRIVATE_H */ ================================================ FILE: user/window.c ================================================ /* * 16-bit windowing functions * * Copyright 2001 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "wine/winuser16.h" #include "wownt32.h" #include "user_private.h" #include "wine/debug.h" #include "wine/exception.h" #include "../krnl386/kernel16_private.h" WINE_DEFAULT_DEBUG_CHANNEL(win); struct { int next; HDC16 dcs[5]; HWND16 wnds[5]; } dcc = {0}; /* Workaround for ReactOS */ BOOL is_reactos() { static BOOL detected; static BOOL is; HKEY hKey; CHAR name[100]; DWORD dwType, dwSize = sizeof(name); if (detected) return is; detected = TRUE; if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_QUERY_VALUE, &hKey)) return FALSE; if (ERROR_SUCCESS != RegQueryValueExA(hKey, "ProductName", NULL, &dwType, (LPBYTE)name, &dwSize)) { RegCloseKey(hKey); return FALSE; } RegCloseKey(hKey); if (dwType != REG_SZ) return FALSE; is = strstr(name, "ReactOS") != NULL; return is; } void WINAPI K32WOWHandle16Destroy(HANDLE handle, WOW_HANDLE_TYPE type); void WINAPI K32WOWHandle16DestroyHint(HANDLE handle, WOW_HANDLE_TYPE type); BOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst); BYTE get_aflags(HMODULE16 hModule); ULONG WINAPI get_windows_build(); LRESULT CALLBACK WindowProc16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); /* size of buffer needed to store an atom string */ #define ATOM_BUFFER_SIZE 256 /* handle <--> handle16 conversions */ #define HANDLE_16(h32) (LOWORD(h32)) #define HANDLE_32(h16) ((HANDLE)(ULONG_PTR)(h16)) /* wine(25cc380b8ed41652b135657ef7651beef2f20ae4) dlls/user32/menu.c */ BOOL is_win_menu_disallowed(DWORD style) { return (style & (WS_CHILD | WS_POPUP)) == WS_CHILD; } static HWND16 hwndSysModal; static struct list class_list = LIST_INIT( class_list ); struct wnd_enum_info { WNDENUMPROC16 proc; LPARAM param; }; /* callback for 16-bit window enumeration functions */ static BOOL CALLBACK wnd_enum_callback( HWND hwnd, LPARAM param ) { const struct wnd_enum_info *info = (struct wnd_enum_info *)param; WORD args[3]; DWORD ret; CONTEXT context = {0}; context.SegDs = context.SegEs = SELECTOROF(getWOW32Reserved()); context.SegFs = wine_get_fs(); context.SegGs = wine_get_gs(); context.Eax = context.SegDs; context.SegCs = SELECTOROF((DWORD)info->proc); context.Eip = OFFSETOF((DWORD)info->proc); context.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME, bp); args[2] = HWND_16(hwnd); args[1] = HIWORD(info->param); args[0] = LOWORD(info->param); WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL | WCB16_REGS, sizeof(args), args, (LPDWORD)&context ); ret = MAKELONG(LOWORD(context.Eax), LOWORD(context.Edx)); return LOWORD(ret); } /* convert insert after window handle to 32-bit */ static inline HWND full_insert_after_hwnd( HWND16 hwnd ) { if (hwnd == (HWND)0xffff) return HWND_TOPMOST; if (hwnd == (HWND)0xfffe) return HWND_NOTOPMOST; if (hwnd == (HWND)HWND_TOP) return HWND_TOP; if (hwnd == (HWND)HWND_BOTTOM) return HWND_BOTTOM; HWND ret = WIN_Handle32( hwnd ); return ret; } BOOL CALLBACK remove_wndproc(HWND hwnd, LPARAM lparam) { if (GetExePtr(GetWindowWord16(HWND_16(hwnd), GWL_HINSTANCE)) == lparam) { TRACE("HWND %x WNDPROC removed\n", hwnd); EnumChildWindows(hwnd, remove_wndproc, lparam); if (GetWindowLongPtrA(hwnd, GWL_WNDPROC) == (LONG_PTR)WindowProc16) SetWindowLongPtrA(hwnd, GWLP_WNDPROC, DefWindowProcA); } return TRUE; } BOOL CALLBACK enum_thread_window(HWND hwnd, LPARAM lparam) { struct class_entry *clazz = (struct class_entry*)lparam; if (GetClassWord(hwnd, GCW_ATOM) == clazz->atom) { if (GetWindowLongPtrA(hwnd, GWLP_WNDPROC) != DefWindowProcA) { TRACE("HWND %x WNDPROC removed\n", hwnd); SetWindowLongPtrA(hwnd, GWLP_WNDPROC, DefWindowProcA); } TRACE("HWND %x destroyed\n", hwnd); DestroyWindow(hwnd); } return TRUE; } void free_module_classes( HINSTANCE16 inst ) { struct class_entry *class, *next; EnumThreadWindows(GetCurrentThreadId(), remove_wndproc, (LPARAM)inst); LIST_FOR_EACH_ENTRY_SAFE( class, next, &class_list, struct class_entry, entry ) { if (class->inst != inst) continue; list_remove( &class->entry ); if (!UnregisterClassA( (LPCSTR)MAKEINTATOM(class->atom), HINSTANCE_32(class->inst) )) { if (GetLastError() == ERROR_CLASS_HAS_WINDOWS) { EnumThreadWindows( GetCurrentThreadId(), enum_thread_window, (LPARAM)class ); UnregisterClassA( (LPCSTR)MAKEINTATOM(class->atom), HINSTANCE_32(class->inst) ); } } WNDCLASS16Info[class->atom].allocated = FALSE; TRACE("Class %s unregistered\n", debugstr_a(class->win32_classname)); HeapFree( GetProcessHeap(), 0, class ); } } BOOL is_dialog(HWND hwnd) { struct WW { union { DWORD state; struct { int WFMPRESENT : 1; int WFVPRESENT : 1; int WFHPRESENT : 1; int WFCPRESENT : 1; int WFSENDSIZEMOVE : 1; int WFMSGBOX : 1; int WFFRAMEON : 1; int WFHASSPB : 1; int WFNONCPAINT : 1; int WFSENDERASEBKGND : 1; int WFERASEBKGND : 1; int WFSENDNCPAINT : 1; int WFINTERNALPAINT : 1; int WFUPDATEDIRTY : 1; int WFHIDDENPOPUP : 1; int WFMENUDRAW : 1; int WFDIALOGWINDOW : 1; /*...*/ } stateFlags; }; DWORD state2; DWORD exstyle; DWORD style; /*...*/ }; BOOL ret = FALSE; if (is_reactos()) { /* see dialog.c DIALOG_CreateIndirect16 */ return HIWORD(GetWindowLongPtrW(hwnd, GWLP_HINSTANCE)) == 0xfefe; } /* undocumented, GetWindowLongW(hwnd, -1) returns a pointer to the internal window structure */ struct WW *ww = GetWindowLongW(hwnd, -1); if (!ww) return FALSE; __TRY { if (ww->stateFlags.WFDIALOGWINDOW) ret = TRUE; } __EXCEPT_ALL { } __ENDTRY return ret; } struct ThreadWindows { UINT numHandles; UINT numAllocs; HWND *handles; }; static BOOL CALLBACK MSGBOX_EnumProc(HWND hwnd, LPARAM lParam) { struct ThreadWindows *threadWindows = (struct ThreadWindows *)lParam; if (!EnableWindow(hwnd, FALSE)) { if(threadWindows->numHandles >= threadWindows->numAllocs) { threadWindows->handles = HeapReAlloc(GetProcessHeap(), 0, threadWindows->handles, (threadWindows->numAllocs*2)*sizeof(HWND)); threadWindows->numAllocs *= 2; } threadWindows->handles[threadWindows->numHandles++]=hwnd; } return TRUE; } /************************************************************************** * MessageBox (USER.1) */ INT16 WINAPI MessageBox16( HWND16 hwnd, LPCSTR text, LPCSTR title, UINT16 type ) { DWORD count; struct ThreadWindows threadWindows; ReleaseThunkLock(&count); #ifdef ATTACH_THREAD_INPUT //Force to set window to foreground. DWORD foregroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL); AttachThreadInput(GetCurrentThreadId(), foregroundID, TRUE); #endif if ((type & MB_TASKMODAL) && (hwnd == NULL)) { threadWindows.numHandles = 0; threadWindows.numAllocs = 10; threadWindows.handles = HeapAlloc(GetProcessHeap(), 0, 10*sizeof(HWND)); EnumThreadWindows(GetCurrentThreadId(), MSGBOX_EnumProc, (LPARAM)&threadWindows); } int ret = MessageBoxA( WIN_Handle32(hwnd), text, title, type & ~MB_TASKMODAL ); if ((type & MB_TASKMODAL) && (hwnd == NULL)) { for (int i = 0; i < threadWindows.numHandles; i++) EnableWindow(threadWindows.handles[i], TRUE); HeapFree(GetProcessHeap(), 0, threadWindows.handles); } #ifdef ATTACH_THREAD_INPUT AttachThreadInput(GetCurrentThreadId(), foregroundID, FALSE); #endif RestoreThunkLock(count); return ret; } #include typedef struct { BYTE pop_eax; /* 58 */ BYTE push_imm; /* 68 */ LPVOID this_; BYTE push_eax; /* 50 */ BYTE jmp; /* E9 */ UINT_PTR func; BOOL used; LPVOID param; } TIMERTHUNK; #include static TIMERTHUNK *timer_thunk_array; static int MAX_TIMER_THUNK; static void init_timer_thunk() { if (timer_thunk_array) return; MAX_TIMER_THUNK = 4096 / sizeof(TIMERTHUNK); timer_thunk_array = VirtualAlloc(NULL, MAX_TIMER_THUNK * sizeof(TIMERTHUNK), MEM_COMMIT, PAGE_EXECUTE_READWRITE); } static TIMERTHUNK *init_timer_thunk_data(LPVOID param, int i, LPVOID func) { timer_thunk_array[i].pop_eax = 0x58; timer_thunk_array[i].push_imm = 0x68; timer_thunk_array[i].this_ = timer_thunk_array + i; timer_thunk_array[i].push_eax = 0x50; timer_thunk_array[i].jmp = 0xE9; timer_thunk_array[i].func = (UINT_PTR)func - (UINT_PTR)(&timer_thunk_array[i].func + 1); timer_thunk_array[i].used = TRUE; timer_thunk_array[i].param = param; return timer_thunk_array + i; } static TIMERPROC allocate_timer_thunk(LPVOID param, LPVOID func, BOOL re) { init_timer_thunk(); if (re) { for (int i = 0; i < MAX_TIMER_THUNK; i++) { if (timer_thunk_array[i].used && timer_thunk_array[i].param == param) { return (TIMERPROC)(timer_thunk_array + i); } } } for (int i = 0; i < MAX_TIMER_THUNK; i++) { if (!timer_thunk_array[i].used) { return (TIMERPROC)init_timer_thunk_data(param, i, func); } } ERR("could not allocate timer thunk!\n"); return NULL; } VOID CALLBACK TimerProc_Thunk(TIMERTHUNK *data, HWND hWnd, UINT msg, UINT_PTR wp, DWORD lp) { CallWindowProc16(data->param, HWND_16(hWnd), msg, wp, lp); return; } BOOL is_timer_thunk(TIMERPROC proc) { return timer_thunk_array <= proc && proc < timer_thunk_array + MAX_TIMER_THUNK; } /*********************************************************************** * SetTimer (USER.10) */ UINT16 WINAPI SetTimer16( HWND16 hwnd, UINT16 id, UINT16 timeout, TIMERPROC16 proc ) { TIMERPROC proc32; UINT ret; timeout = timeout < 55 ? 55 : timeout; if (proc == NULL) { return SetTimer(WIN_Handle32(hwnd), id, timeout, NULL); } proc32 = allocate_timer_thunk(proc, TimerProc_Thunk, TRUE); ret = SetTimer( WIN_Handle32(hwnd), id, timeout, proc32 ); return ret; } /*********************************************************************** * SetSystemTimer (USER.11) */ UINT16 WINAPI SetSystemTimer16( HWND16 hwnd, UINT16 id, UINT16 timeout, TIMERPROC16 proc ) { TIMERPROC proc32 = proc == NULL ? NULL : allocate_timer_thunk(proc, TimerProc_Thunk, TRUE); if (!SetSystemTimer) { ERR("SetSystemTimer NULL\n"); return 0; } return SetSystemTimer( WIN_Handle32(hwnd), id, timeout, proc32 ); } /************************************************************************** * KillTimer (USER.12) */ BOOL16 WINAPI KillTimer16( HWND16 hwnd, UINT16 id ) { return KillTimer( WIN_Handle32(hwnd), id ); } /************************************************************************** * SetCapture (USER.18) */ HWND16 WINAPI SetCapture16( HWND16 hwnd ) { return HWND_16( SetCapture( WIN_Handle32(hwnd) )); } /************************************************************************** * ReleaseCapture (USER.19) */ BOOL16 WINAPI ReleaseCapture16(void) { BOOL result = ReleaseCapture(); static BOOL checked_is_windows_10; static BOOL is_windows_10_or_later; if (!checked_is_windows_10) { checked_is_windows_10 = TRUE; is_windows_10_or_later = GetProcAddress(GetModuleHandleA("KERNEL32"), "InitializeEnclave") != NULL; } if (is_windows_10_or_later) { /* Windows 10 doesn't send WM_MOUSEMOVE */ #if 0 POINT point; if (GetCursorPos(&point)) { HWND hwnd = GetCapture(); if (!hwnd) hwnd = WindowFromPoint(point); if (hwnd) PostMessageA(hwnd, WM_MOUSEMOVE, 0, MAKELPARAM(point.x, point.y)); } #endif INPUT input; input.type = INPUT_MOUSE; input.mi.mouseData = 0; input.mi.dwFlags = MOUSEEVENTF_MOVE; input.mi.time = 0; input.mi.dwExtraInfo = 0; input.mi.dx = 1; input.mi.dy = 0; SendInput(1, &input, sizeof(input)); input.mi.dx = -1; input.mi.dy = 0; SendInput(1, &input, sizeof(input)); } return result; } /************************************************************************** * SetFocus (USER.22) */ HWND16 WINAPI SetFocus16( HWND16 hwnd ) { DWORD count; HWND16 result; ReleaseThunkLock(&count); result = HWND_16(SetFocus(WIN_Handle32(hwnd))); RestoreThunkLock(count); return result; } /************************************************************************** * GetFocus (USER.23) */ HWND16 WINAPI GetFocus16(void) { return HWND_16( GetFocus() ); } /************************************************************************** * RemoveProp (USER.24) */ HANDLE16 WINAPI RemoveProp16( HWND16 hwnd, LPCSTR str ) { return HANDLE_16(RemovePropA( WIN_Handle32(hwnd), str )); } /************************************************************************** * GetProp (USER.25) */ HANDLE16 WINAPI GetProp16( HWND16 hwnd, LPCSTR str ) { return HANDLE_16(GetPropA( WIN_Handle32(hwnd), str )); } /************************************************************************** * SetProp (USER.26) */ BOOL16 WINAPI SetProp16( HWND16 hwnd, LPCSTR str, HANDLE16 handle ) { return SetPropA( WIN_Handle32(hwnd), str, HANDLE_32(handle) ); } /*********************************************************************** * EnumProps (USER.27) */ INT16 WINAPI EnumProps16( HWND16 hwnd, PROPENUMPROC16 func ) { ERR("(%04x,%08x)\n", hwnd, func); return 0; #if 0 int ret = -1, i, count, total = 32; property_data_t *list; while (total) { if (!(list = HeapAlloc( GetProcessHeap(), 0, total * sizeof(*list) ))) break; count = 0; SERVER_START_REQ( get_window_properties ) { req->window = wine_server_user_handle( HWND_32(hwnd) ); wine_server_set_reply( req, list, total * sizeof(*list) ); if (!wine_server_call( req )) count = reply->total; } SERVER_END_REQ; if (count && count <= total) { char string[ATOM_BUFFER_SIZE]; SEGPTR segptr = MapLS( string ); WORD args[4]; DWORD result; for (i = 0; i < count; i++) { if (list[i].string) /* it was a string originally */ { if (!GlobalGetAtomNameA( list[i].atom, string, ATOM_BUFFER_SIZE )) continue; args[3] = hwnd; args[2] = SELECTOROF(segptr); args[1] = OFFSETOF(segptr); args[0] = LOWORD(list[i].data); } else { args[3] = hwnd; args[2] = 0; args[1] = list[i].atom; args[0] = LOWORD(list[i].data); } WOWCallback16Ex( (DWORD)func, WCB16_PASCAL, sizeof(args), args, &result ); if (!(ret = LOWORD(result))) break; } UnMapLS( segptr ); HeapFree( GetProcessHeap(), 0, list ); break; } HeapFree( GetProcessHeap(), 0, list ); total = count; /* restart with larger buffer */ } return ret; #endif } /************************************************************************** * ClientToScreen (USER.28) */ void WINAPI ClientToScreen16( HWND16 hwnd, LPPOINT16 lppnt ) { MapWindowPoints16( hwnd, 0, lppnt, 1 ); } /************************************************************************** * ScreenToClient (USER.29) */ void WINAPI ScreenToClient16( HWND16 hwnd, LPPOINT16 lppnt ) { MapWindowPoints16( 0, hwnd, lppnt, 1 ); } /************************************************************************** * WindowFromPoint (USER.30) */ HWND16 WINAPI WindowFromPoint16( POINT16 pt ) { POINT pt32; pt32.x = pt.x; pt32.y = pt.y; return HWND_16( WindowFromPoint( pt32 ) ); } /************************************************************************** * IsIconic (USER.31) */ BOOL16 WINAPI IsIconic16(HWND16 hwnd) { return IsIconic( WIN_Handle32(hwnd) ); } /************************************************************************** * GetWindowRect (USER.32) */ void WINAPI GetWindowRect16( HWND16 hwnd, LPRECT16 rect ) { RECT rect32; if (GetWindowRect( WIN_Handle32(hwnd), &rect32 )) { rect->left = rect32.left; rect->top = rect32.top; rect->right = rect32.right; rect->bottom = rect32.bottom; } } /************************************************************************** * GetClientRect (USER.33) */ void WINAPI GetClientRect16( HWND16 hwnd, LPRECT16 rect ) { RECT rect32; if (GetClientRect( WIN_Handle32(hwnd), &rect32 )) { rect->left = rect32.left; rect->top = rect32.top; rect->right = rect32.right; rect->bottom = rect32.bottom; } } /************************************************************************** * EnableWindow (USER.34) */ BOOL16 WINAPI EnableWindow16( HWND16 hwnd, BOOL16 enable ) { DWORD count; ReleaseThunkLock(&count); BOOL16 result = EnableWindow( WIN_Handle32(hwnd), enable ); RestoreThunkLock(count); return result; } /************************************************************************** * IsWindowEnabled (USER.35) */ BOOL16 WINAPI IsWindowEnabled16(HWND16 hwnd) { return IsWindowEnabled( WIN_Handle32(hwnd) ); } /************************************************************************** * GetWindowText (USER.36) */ INT16 WINAPI GetWindowText16( HWND16 hwnd, SEGPTR lpString, INT16 nMaxCount ) { return SendMessage16( hwnd, WM_GETTEXT, nMaxCount, lpString ); } /************************************************************************** * SetWindowText (USER.37) */ BOOL16 WINAPI SetWindowText16( HWND16 hwnd, SEGPTR lpString ) { if (IsBadReadPtr16(lpString, 1)) return FALSE; return SendMessage16( hwnd, WM_SETTEXT, 0, lpString ); } /************************************************************************** * GetWindowTextLength (USER.38) */ INT16 WINAPI GetWindowTextLength16( HWND16 hwnd ) { return SendMessage16( hwnd, WM_GETTEXTLENGTH, 0, 0 ); } /*********************************************************************** * BeginPaint (USER.39) */ HDC16 WINAPI BeginPaint16( HWND16 hwnd, LPPAINTSTRUCT16 lps ) { PAINTSTRUCT ps = { 0 }; BeginPaint( WIN_Handle32(hwnd), &ps ); lps->hdc = HDC_16(ps.hdc); lps->fErase = ps.fErase; lps->rcPaint.top = ps.rcPaint.top; lps->rcPaint.left = ps.rcPaint.left; lps->rcPaint.right = ps.rcPaint.right; lps->rcPaint.bottom = ps.rcPaint.bottom; lps->fRestore = ps.fRestore; lps->fIncUpdate = ps.fIncUpdate; if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE) && (GetCurrentObject(ps.hdc, OBJ_FONT) == GetStockObject(SYSTEM_FONT))) SelectObject(ps.hdc, GetStockObject(SYSTEM_FIXED_FONT)); // check the hdc is in the cache becuase it was removed and deleted for (int i = 0; i < 5; i++) { if (dcc.dcs[i] == lps->hdc) { dcc.dcs[i] = 0; dcc.wnds[i] = 0; } } return lps->hdc; } /*********************************************************************** * EndPaint (USER.40) */ BOOL16 WINAPI EndPaint16( HWND16 hwnd, const PAINTSTRUCT16* lps ) { PAINTSTRUCT ps = { 0 }; ps.hdc = HDC_32(lps->hdc); ps.fErase = lps->fErase; ps.rcPaint.top = lps->rcPaint.top; ps.rcPaint.left = lps->rcPaint.left; ps.rcPaint.right = lps->rcPaint.right; ps.rcPaint.bottom = lps->rcPaint.bottom; ps.fRestore = lps->fRestore; ps.fIncUpdate = lps->fIncUpdate; BOOL result = EndPaint( WIN_Handle32(hwnd), &ps ); if (result) { for (int i = 0; i < 5; i++) { if (dcc.dcs[i] == lps->hdc) { dcc.dcs[i] = 0; dcc.wnds[i] = 0; } } K32WOWHandle16DestroyHint(ps.hdc, WOW_TYPE_HDC); } return result; } /*********************************************************************** * CreateWindow (USER.41) */ HWND16 WINAPI CreateWindow16( LPCSTR className, LPCSTR windowName, DWORD style, INT16 x, INT16 y, INT16 width, INT16 height, HWND16 parent, HMENU16 menu, HINSTANCE16 instance, LPVOID data ) { return CreateWindowEx16( 0, className, windowName, style, x, y, width, height, parent, menu, instance, data ); } /************************************************************************** * ShowWindow (USER.42) */ BOOL16 WINAPI ShowWindow16( HWND16 hwnd, INT16 cmd ) { DWORD count; ReleaseThunkLock(&count); #ifdef ATTACH_THREAD_INPUT DWORD foregroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL); //Attach AttachThreadInput(GetCurrentThreadId(), foregroundID, TRUE); #endif BOOL ret = ShowWindow( WIN_Handle32(hwnd), cmd ); #ifdef ATTACH_THREAD_INPUT //Dettach AttachThreadInput(GetCurrentThreadId(), foregroundID, FALSE); #endif RestoreThunkLock(count); return ret; } /************************************************************************** * CloseWindow (USER.43) */ BOOL16 WINAPI CloseWindow16( HWND16 hwnd ) { DWORD count; ReleaseThunkLock(&count); BOOL16 result = CloseWindow( WIN_Handle32(hwnd) ); RestoreThunkLock(count); return result; } /************************************************************************** * OpenIcon (USER.44) */ BOOL16 WINAPI OpenIcon16( HWND16 hwnd ) { return OpenIcon( WIN_Handle32(hwnd) ); } /************************************************************************** * BringWindowToTop (USER.45) */ BOOL16 WINAPI BringWindowToTop16( HWND16 hwnd ) { DWORD count; BOOL16 result; ReleaseThunkLock(&count); #ifdef ATTACH_THREAD_INPUT //Force to set window to foreground. DWORD foregroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL); AttachThreadInput(GetCurrentThreadId(), foregroundID, TRUE); #endif result = (BOOL16)BringWindowToTop( WIN_Handle32(hwnd) ); #ifdef ATTACH_THREAD_INPUT AttachThreadInput(GetCurrentThreadId(), foregroundID, FALSE); #endif RestoreThunkLock(count); return result; } /************************************************************************** * GetParent (USER.46) */ HWND16 WINAPI GetParent16( HWND16 hwnd ) { return HWND_16( GetParent( WIN_Handle32(hwnd) )); } /************************************************************************** * IsWindow (USER.47) */ BOOL16 WINAPI IsWindow16( HWND16 hwnd ) { STACK16FRAME *frame = MapSL( (SEGPTR)getWOW32Reserved() ); frame->es = USER_HeapSel; HWND hwnd32 = HWND_32(hwnd); if (!HIWORD(hwnd32)) { /* invalid handle */ return FALSE; } /* don't use WIN_Handle32 here, we don't care about the full handle */ return IsWindow( hwnd32 ); } /************************************************************************** * IsChild (USER.48) */ BOOL16 WINAPI IsChild16( HWND16 parent, HWND16 child ) { return IsChild( WIN_Handle32(parent), WIN_Handle32(child) ); } /************************************************************************** * IsWindowVisible (USER.49) */ BOOL16 WINAPI IsWindowVisible16( HWND16 hwnd ) { return IsWindowVisible( WIN_Handle32(hwnd) ); } HWND16 WINAPI FindWindowEx16(HWND16 parent, HWND16 child, LPCSTR className, LPCSTR title); /************************************************************************** * FindWindow (USER.50) */ HWND16 WINAPI FindWindow16( LPCSTR className, LPCSTR title ) { return FindWindowEx16( (HWND16)NULL, (HWND16)NULL, className, title ); } /************************************************************************** * DestroyWindow (USER.53) */ BOOL16 WINAPI DestroyWindow16( HWND16 hwnd ) { DWORD count; BOOL result; HMENU16 hmenu16 = GetMenu16(hwnd); ReleaseThunkLock(&count); result = DestroyWindow(WIN_Handle32(hwnd)); RestoreThunkLock(count); if (result && IsMenu16(hmenu16)) DestroyMenu16(hmenu16); return result; } /******************************************************************* * EnumWindows (USER.54) */ BOOL16 WINAPI EnumWindows16( WNDENUMPROC16 func, LPARAM lParam ) { struct wnd_enum_info info; info.proc = func; info.param = lParam; return EnumWindows( wnd_enum_callback, (LPARAM)&info ); } /********************************************************************** * EnumChildWindows (USER.55) */ BOOL16 WINAPI EnumChildWindows16( HWND16 parent, WNDENUMPROC16 func, LPARAM lParam ) { struct wnd_enum_info info; info.proc = func; info.param = lParam; return EnumChildWindows( WIN_Handle32(parent), wnd_enum_callback, (LPARAM)&info ); } /************************************************************************** * MoveWindow (USER.56) */ BOOL16 WINAPI MoveWindow16( HWND16 hwnd, INT16 x, INT16 y, INT16 cx, INT16 cy, BOOL16 repaint ) { return SetWindowPos16(hwnd, 0, x, y, cx, cy, SWP_NOZORDER | SWP_NOACTIVATE | (repaint ? 0 : SWP_NOREDRAW)); } /*********************************************************************** * RegisterClass (USER.57) */ BOOL16 WINAPI RegisterClass16( const WNDCLASS16 *wc ) { WNDCLASSEX16 wcex; wcex.cbSize = sizeof(wcex); wcex.style = wc->style; wcex.lpfnWndProc = wc->lpfnWndProc; wcex.cbClsExtra = wc->cbClsExtra; wcex.cbWndExtra = wc->cbWndExtra; wcex.hInstance = wc->hInstance; wcex.hIcon = wc->hIcon; wcex.hCursor = wc->hCursor; wcex.hbrBackground = wc->hbrBackground; wcex.lpszMenuName = wc->lpszMenuName; wcex.lpszClassName = wc->lpszClassName; wcex.hIconSm = 0; return RegisterClassEx16( &wcex ) != 0; } /************************************************************************** * GetClassName (USER.58) */ INT16 WINAPI GetClassName16( HWND16 hwnd, LPSTR buffer, INT16 count ) { char sclassName[200]; SIZE_T len = sizeof(sclassName) / sizeof(sclassName[0]); LPSTR className = sclassName; SIZE_T clen; if (count == 0) return 0; if (count == 1) { buffer[0] = '\0'; return 0; } while (TRUE) { clen = GetClassNameA(WIN_Handle32(hwnd), className, len); //className is truncated if (len - 1 == clen) { LPVOID heap; if (className != sclassName) { heap = HeapReAlloc(GetProcessHeap(), 0, className, len * 2); } else { heap = HeapAlloc(GetProcessHeap(), 0, len * 2); } if (!heap) break; className = (LPSTR)heap; len *= 2; continue; } break; } if (clen > 32767) { clen = 32767; } if (clen != 0) { struct class_entry *entry = find_win32_class(className); if (!entry) { clen = min(clen, (SIZE_T)(count - 1)); memcpy(buffer, className, clen); buffer[clen] = 0; } else { clen = min(strlen(entry->classInfo.lpszClassName), (SIZE_T)(count - 1)); memcpy(buffer, entry->classInfo.lpszClassName, clen); buffer[clen] = 0; } } if (className != sclassName) { HeapFree(GetProcessHeap(), 0, className); } return (INT16)clen; } /************************************************************************** * SetActiveWindow (USER.59) */ HWND16 WINAPI SetActiveWindow16( HWND16 hwnd ) { return HWND_16( SetActiveWindow( WIN_Handle32(hwnd) )); } /************************************************************************** * GetActiveWindow (USER.60) */ HWND16 WINAPI GetActiveWindow16(void) { return HWND_16( GetActiveWindow() ); } /************************************************************************** * ScrollWindow (USER.61) */ void WINAPI ScrollWindow16( HWND16 hwnd, INT16 dx, INT16 dy, const RECT16 *rect, const RECT16 *clipRect ) { RECT rect32, clipRect32; if (rect) { rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; } if (clipRect) { clipRect32.left = clipRect->left; clipRect32.top = clipRect->top; clipRect32.right = clipRect->right; clipRect32.bottom = clipRect->bottom; } ScrollWindow( WIN_Handle32(hwnd), dx, dy, rect ? &rect32 : NULL, clipRect ? &clipRect32 : NULL ); } /************************************************************************** * SetScrollPos (USER.62) */ INT16 WINAPI SetScrollPos16( HWND16 hwnd, INT16 nBar, INT16 nPos, BOOL16 redraw ) { return SetScrollPos( WIN_Handle32(hwnd), nBar, nPos, redraw ); } /************************************************************************** * GetScrollPos (USER.63) */ INT16 WINAPI GetScrollPos16( HWND16 hwnd, INT16 nBar ) { return GetScrollPos( WIN_Handle32(hwnd), nBar ); } /************************************************************************** * SetScrollRange (USER.64) */ void WINAPI SetScrollRange16( HWND16 hwnd, INT16 nBar, INT16 MinVal, INT16 MaxVal, BOOL16 redraw ) { HWND hwnd32 = HWND_32(hwnd); /* Invalid range -> range is set to (0,0) */ if ((INT)MaxVal - (INT)MinVal > 0x7fff) MinVal = MaxVal = 0; // don't create a scrollbar if none is wanted if (MinVal == MaxVal) { INT min, max; GetScrollRange(hwnd32, nBar, &min, &max); // always returns TRUE if (!min && !max && GetLastError() == ERROR_NO_SCROLLBARS) return; } SetScrollRange(hwnd32, nBar, MinVal, MaxVal, redraw); } /************************************************************************** * GetScrollRange (USER.65) */ BOOL16 WINAPI GetScrollRange16( HWND16 hwnd, INT16 nBar, LPINT16 lpMin, LPINT16 lpMax) { INT min, max; BOOL ret = GetScrollRange( WIN_Handle32(hwnd), nBar, &min, &max ); if (lpMin) *lpMin = min; if (lpMax) *lpMax = max; return ret; } /* layered-window based desktop DC emulation for DWM */ LRESULT WINAPI DesktopDCEmulationWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_NCCALCSIZE: return 0; default: return DefWindowProcW(hwnd, msg, wparam, lparam); } } static HWND dcemu_hwnd; static COLORREF DWMDesktopDCFixBackgroundColor = RGB(254, 254, 254); void init_dcemu() { WNDCLASSW wc = { 0 }; RECT wkara = { 0 }; HWND hwnd; COLORREF colorkey = DWMDesktopDCFixBackgroundColor; if (dcemu_hwnd) return; wc.lpfnWndProc = DesktopDCEmulationWindowProc; wc.style = CS_OWNDC; wc.hbrBackground = CreateSolidBrush(colorkey); wc.hCursor = LoadCursorW(NULL, IDC_ARROW); wc.lpszClassName = L"DesktopDCEmulation"; RegisterClassW(&wc); SystemParametersInfoW(SPI_GETWORKAREA, 0, &wkara, 0); 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); if (!hwnd) return; SetWindowLongW(hwnd, GWL_STYLE, GetWindowLongW(hwnd, GWL_STYLE) & ~WS_BORDER & ~WS_SIZEBOX &~WS_DLGFRAME); SetLayeredWindowAttributes(hwnd, colorkey, 0, LWA_COLORKEY); ShowWindow(hwnd, SW_NORMAL); UpdateWindow(hwnd); dcemu_hwnd = hwnd; } /************************************************************************** * GetDC (USER.66) */ HDC16 WINAPI GetDC16( HWND16 hwnd ) { static BOOL DWMDesktopDCFix_init; static BOOL DWMDesktopDCFix; HDC hdc; if (!DWMDesktopDCFix_init) { DWMDesktopDCFix_init = TRUE; DWMDesktopDCFix = krnl386_get_config_int("otvdm", "DWMDesktopDCFix", FALSE); int R = krnl386_get_config_int("otvdm", "DWMDesktopDCFixBackgroundColorR", 254); int G = krnl386_get_config_int("otvdm", "DWMDesktopDCFixBackgroundColorG", 254); int B = krnl386_get_config_int("otvdm", "DWMDesktopDCFixBackgroundColorB", 254); DWMDesktopDCFixBackgroundColor = RGB(R, G, B); } if (DWMDesktopDCFix && hwnd == 0) { init_dcemu(); SetWindowPos(dcemu_hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOREDRAW); HDC dc = GetDC(dcemu_hwnd); SetWindowOrgEx(dc, 0, 0, NULL); MoveToEx(dc, 0, 0, NULL); SelectClipRgn(dc, NULL); hdc = dc; } else hdc = GetDC( WIN_Handle32(hwnd) ); if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE) && (GetCurrentObject(hdc, OBJ_FONT) == GetStockObject(SYSTEM_FONT))) SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT)); HDC16 hdc16 = HDC_16(hdc); // check the hdc is in the cache becuase it was removed and deleted for (int i = 0; i < 5; i++) { if (dcc.dcs[i] == hdc16) { dcc.dcs[i] = 0; dcc.wnds[i] = 0; } } return hdc16; } /************************************************************************** * GetWindowDC (USER.67) */ HDC16 WINAPI GetWindowDC16( HWND16 hwnd ) { return GetDCEx16( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ); } /************************************************************************** * ReleaseDC (USER.68) */ INT16 WINAPI ReleaseDC16( HWND16 hwnd, HDC16 hdc ) { if (!hwnd) hwnd = HWND_16(GetDesktopWindow()); if (WindowFromDC(HDC_32(hdc)) != HWND_32(hwnd)) return 0; if (dcc.dcs[dcc.next]) { HDC16 oldhdc = dcc.dcs[dcc.next]; HDC16 oldhwnd = dcc.wnds[dcc.next]; if(ReleaseDC( WIN_Handle32(oldhwnd), HDC_32(oldhdc) ) || !IsWindow(HWND_32(oldhwnd))) { K32WOWHandle16DestroyHint(HDC_32(oldhdc), WOW_TYPE_HDC); } for (int i = 0; i < 5; i++) { if (dcc.dcs[i] == oldhdc) { dcc.dcs[i] = 0; dcc.wnds[i] = 0; } } } dcc.dcs[dcc.next] = hdc; dcc.wnds[dcc.next] = hwnd; dcc.next = (dcc.next + 1) % 5; return 1; } /************************************************************************** * FlashWindow (USER.105) */ BOOL16 WINAPI FlashWindow16( HWND16 hwnd, BOOL16 bInvert ) { return FlashWindow( WIN_Handle32(hwnd), bInvert ); } /************************************************************************** * WindowFromDC (USER.117) */ HWND16 WINAPI WindowFromDC16( HDC16 hDC ) { return HWND_16( WindowFromDC( HDC_32(hDC) ) ); } /************************************************************************** * UpdateWindow (USER.124) */ void WINAPI UpdateWindow16( HWND16 hwnd ) { RedrawWindow16( hwnd, NULL, 0, RDW_UPDATENOW | RDW_ALLCHILDREN ); } /************************************************************************** * InvalidateRect (USER.125) */ void WINAPI InvalidateRect16( HWND16 hwnd, const RECT16 *rect, BOOL16 erase ) { UINT16 flags = RDW_INVALIDATE | (erase ? RDW_ERASE : 0); if (!hwnd) { flags = RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_FRAME | RDW_ERASE | RDW_ERASENOW; rect = NULL; } RedrawWindow16( hwnd, rect, 0, flags ); } /************************************************************************** * InvalidateRgn (USER.126) */ void WINAPI InvalidateRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 erase ) { RedrawWindow16( hwnd, NULL, hrgn, RDW_INVALIDATE | (erase ? RDW_ERASE : 0) ); } /************************************************************************** * ValidateRect (USER.127) */ void WINAPI ValidateRect16( HWND16 hwnd, const RECT16 *rect ) { UINT flags = RDW_VALIDATE; if (!hwnd) { flags = RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_FRAME | RDW_ERASE | RDW_ERASENOW; rect = NULL; } RedrawWindow16( hwnd, rect, 0, flags ); } /************************************************************************** * ValidateRgn (USER.128) */ void WINAPI ValidateRgn16( HWND16 hwnd, HRGN16 hrgn ) { RedrawWindow16( hwnd, NULL, hrgn, RDW_VALIDATE ); } static WORD get_system_window_class_wndextra(const char *cls, BOOL *f) { char buf[100]; *f = TRUE; if (IS_INTRESOURCE(cls)) { GlobalGetAtomNameA((ATOM)LOWORD(cls), buf, 100); cls = buf; } if (!strncasecmp(cls, "EDIT", sizeof(cls))) return 6; if (!strncasecmp(cls, "LISTBOX", sizeof(cls))) return 2; if (!strncasecmp(cls, "SCROLLBAR", sizeof(cls))) return 12; if (!strncasecmp(cls, "COMBOBOX", sizeof(cls))) return 2; if (!strncasecmp(cls, "STATIC", sizeof(cls))) return 6; if (!strncasecmp(cls, "BUTTON", sizeof(cls))) return 4; *f = FALSE; return 0; } /************************************************************************** * GetClassWord (USER.129) */ WORD WINAPI GetClassWord16( HWND16 hwnd, INT16 offset ) { HICON icon; switch (offset) { case GCL_CBCLSEXTRA: case GCL_HMODULE: return GetClassLongA(WIN_Handle32(hwnd), offset); case GCL_CBWNDEXTRA: { char cls[1000]; GetClassNameA(HWND_32(hwnd), cls, sizeof(cls)); BOOL f; WORD cb = get_system_window_class_wndextra(cls, &f); if (f) return cb; ATOM atom = GetClassWord(HWND_32(hwnd), GCW_ATOM); if (WNDCLASS16Info[atom].allocated) { return WNDCLASS16Info[atom].cbWndExtra; } else { return (WORD)GetClassLongA(WIN_Handle32(hwnd), offset); } } case GCLP_HCURSOR: case GCLP_HICON: case GCLP_HICONSM: icon = (HICON)GetClassLongPtrW( WIN_Handle32(hwnd), offset ); return get_icon_16( icon ); case GCLP_HBRBACKGROUND: return HBRUSH_16((HBRUSH)GetClassLongPtrW(WIN_Handle32(hwnd), offset)); } return GetClassWord( WIN_Handle32(hwnd), offset ); } /************************************************************************** * SetClassWord (USER.130) */ WORD WINAPI SetClassWord16( HWND16 hwnd, INT16 offset, WORD newval ) { HICON icon; switch (offset) { case GCLP_HCURSOR: case GCLP_HICON: case GCLP_HICONSM: icon = (HICON)SetClassLongPtrW( WIN_Handle32(hwnd), offset, (ULONG_PTR)get_icon_32(newval) ); return get_icon_16( icon ); case GCLP_HBRBACKGROUND: return HBRUSH_16((HBRUSH)SetClassLongPtrW(WIN_Handle32(hwnd), offset, HBRUSH_32(newval))); } return SetClassWord( WIN_Handle32(hwnd), offset, newval ); } LRESULT CALLBACK UserAdapterWindowClass(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { ERR("(%p, %d, %d, %d)\n", msg, wparam, lparam); return FALSE; } /*********************************************************************** * GetClassLong (USER.131) */ LONG WINAPI GetClassLong16( HWND16 hwnd16, INT16 offset ) { LONG_PTR ret = GetClassLongA( WIN_Handle32(hwnd16), offset ); switch( offset ) { case GCLP_WNDPROC: { ATOM atom = GetClassWord(WIN_Handle32(hwnd16), GCW_ATOM); WNDPROC proc = GetClassLongPtrA(WIN_Handle32(hwnd16), GCLP_WNDPROC); return WNDCLASS16Info[atom].wndproc ? WNDCLASS16Info[atom].wndproc : (LONG_PTR)WINPROC_GetProc16((WNDPROC)ret, FALSE); } case GCLP_MENUNAME: return MapLS( (void *)ret ); /* leak */ case GCLP_HCURSOR: case GCLP_HICON: case GCLP_HICONSM: return get_icon_16( (HICON)ret ); case GCLP_HBRBACKGROUND: return HBRUSH_16(ret); default: return ret; } } /*********************************************************************** * SetClassLong (USER.132) */ LONG WINAPI SetClassLong16( HWND16 hwnd16, INT16 offset, LONG newval ) { HICON icon; switch( offset ) { case GCLP_HCURSOR: case GCLP_HICON: case GCLP_HICONSM: icon = (HICON)SetClassLongPtrW( WIN_Handle32(hwnd16), offset, (ULONG_PTR)get_icon_32(newval) ); return get_icon_16( icon ); case GCLP_WNDPROC: { WNDPROC new_proc = (WNDPROC16)newval; //WNDPROC old_proc = (WNDPROC)SetClassLongA( WIN_Handle32(hwnd16), offset, (LONG_PTR)new_proc ); ATOM atom = GetClassWord(WIN_Handle32(hwnd16), GCW_ATOM); WNDPROC old = WNDCLASS16Info[atom].wndproc; WNDCLASS16Info[atom].wndproc = new_proc; return old;//(LONG)WINPROC_GetProc16(old_proc, FALSE); } case GCLP_HBRBACKGROUND: return HBRUSH_32(SetClassLongA(WIN_Handle32(hwnd16), offset, HBRUSH_32(newval))); case GCLP_MENUNAME: newval = (LONG)MapSL( newval ); /* fall through */ default: return SetClassLongA( WIN_Handle32(hwnd16), offset, newval ); } } BYTE *hwndwordbuf[65536]; //__declspec(dllexport) void SetWindowHInst16(WORD hWnd16, HINSTANCE16 hinst16); //__declspec(dllexport) HINSTANCE16 GetWindowHInst16(WORD hWnd16); //__declspec(dllexport) void SetWindowHMenu16(WORD hWnd16, HMENU16 hinst16); //__declspec(dllexport) HMENU16 GetWindowHMenu16(WORD hWnd16); BOOL isButton(HWND16 hWnd16, HWND hWnd); static WORD get_actual_cbwndextra(HWND16 hwnd16) { SIZE_T siz = GetClassWord16(hwnd16, GCL_CBWNDEXTRA); if (siz >= 65536) return 65535; WORD w = (WORD)siz; if (w < DLGWINDOWEXTRA) return DLGWINDOWEXTRA; return w; } /************************************************************************** * GetWindowWord (USER.133) */ WORD WINAPI GetWindowWord16( HWND16 hwnd, INT16 offset ) { if (offset >= 0) { if (!offset && isButton(hwnd, WIN_Handle32(hwnd))) return GetWindowWord( WIN_Handle32(hwnd), offset ); size_t siz = get_actual_cbwndextra(hwnd); if (siz + sizeof(WORD) < offset) { ERR("(0x%04X, %d) Out of range\n", hwnd, offset); return 0; } if (!hwndwordbuf[hwnd]) { //TODO:leak hwndwordbuf[hwnd] = calloc(siz, sizeof(BYTE)); } return *(WORD*)(hwndwordbuf[hwnd] + offset); } switch (offset) { case GWL_STYLE: return (WORD)GetWindowLong16(hwnd, offset); case GWL_HINSTANCE: { HINSTANCE16 h16 = GetWindowHInst16(hwnd); if (h16) { return h16; } HINSTANCE h = GetWindowLongPtrW(WIN_Handle32(hwnd), offset); /* 32-bit dll -> 16-bit hinst mapping? */ /* LoadLibrary16 returns hinst GetModuleHandle16 returns hmodule */ if (h && (h == GetModuleHandleW(L"COMDLG32.DLL") || h == GetModuleHandleW(L"COMMDLG.DLL16"))) { if (GetModuleHandle16("COMMDLG")) { HINSTANCE16 commdlg = LoadLibrary16("COMMDLG"); FreeLibrary16(commdlg); return commdlg; } } if (h == 0xFFFF0000) { HINSTANCE16 user = LoadLibrary16("USER"); FreeLibrary16(user); return user; } if (HIWORD(h)) { HTASK16 task = GetWindowTask16(hwnd); if (!task) { HINSTANCE16 user = LoadLibrary16("USER"); FreeLibrary16(user); return user; } TDB *tdb = GlobalLock16(task); h16 = tdb->hInstance; GlobalUnlock16(task); return h16; } return LOWORD(h); } case GWL_ID: { LONG ret = GetWindowLongA(WIN_Handle32(hwnd), GWL_ID); return ret; } case GWL_HWNDPARENT: return HWND_16(GetWindowLongA(WIN_Handle32(hwnd), offset)); default: break; } return GetWindowWord( WIN_Handle32(hwnd), offset ); } /************************************************************************** * SetWindowWord (USER.134) */ WORD WINAPI SetWindowWord16( HWND16 hwnd, INT16 offset, WORD newval ) { if (offset >= 0) { if (!offset && isButton(hwnd, WIN_Handle32(hwnd))) return SetWindowWord( WIN_Handle32(hwnd), offset, newval ); size_t siz = get_actual_cbwndextra(hwnd); if (siz + sizeof(WORD) < offset) { ERR("(0x%04X, %d, 0x%04X) Out of range\n", hwnd, offset, newval); return 0; } if (!hwndwordbuf[hwnd]) { //TODO:leak hwndwordbuf[hwnd] = calloc(siz, sizeof(BYTE)); } WORD old = *(WORD*)(hwndwordbuf[hwnd] + offset); *(WORD*)(hwndwordbuf[hwnd] + offset) = newval; return old; } switch (offset) { case GWL_HINSTANCE: { HINSTANCE16 old = (HINSTANCE16)GetWindowWord16(hwnd, offset); SetWindowHInst16(hwnd, newval); (SetWindowLongA(WIN_Handle32(hwnd), offset, HINSTANCE_32(newval))); return old; } case GWL_ID: { LONG ret = SetWindowLongA(WIN_Handle32(hwnd), GWL_ID, newval); return ret; } case GWL_HWNDPARENT: return (SetWindowLongA(WIN_Handle32(hwnd), offset, HWND_32(newval))); default: break; } return SetWindowWord( WIN_Handle32(hwnd), offset, newval ); } /********************************************************************** * GetWindowLong (USER.135) */ LONG WINAPI GetWindowLong16( HWND16 hwnd16, INT16 offset ) { HWND hwnd = WIN_Handle32( hwnd16 ); LONG_PTR retvalue; BOOL is_winproc = (offset == GWLP_WNDPROC); if (offset >= 0) { int cbWndExtra = get_actual_cbwndextra( hwnd16 ); if (offset > (int)(cbWndExtra - sizeof(LONG))) { /* * Some programs try to access last element from 16 bit * code using illegal offset value. Hopefully this is * what those programs really expect. */ if (cbWndExtra >= 4 && offset == cbWndExtra - sizeof(WORD)) { offset = cbWndExtra - sizeof(LONG); } else { ERR("(0x%04X, %d) Out of range\n", hwnd, offset); SetLastError( ERROR_INVALID_INDEX ); return 0; } } else if (offset == DWLP_DLGPROC) { is_winproc = is_dialog(hwnd); } } if (is_winproc) { if (offset == DWLP_DLGPROC) { retvalue = (LONG_PTR)GetDlgProc16(hwnd16); } else { retvalue = (LONG_PTR)GetWndProc16(hwnd16); } if (retvalue) return retvalue; retvalue = GetWindowLongA(hwnd, offset); if (retvalue) retvalue = (LONG_PTR)WINPROC_GetProc16( (WNDPROC)retvalue, FALSE ); return retvalue; } if (offset >= 0) { size_t siz = get_actual_cbwndextra(hwnd16); if (siz + sizeof(LONG) < offset) { ERR("(0x%04X, %d) Out of range\n", hwnd, offset); SetLastError(ERROR_INVALID_INDEX); return 0; } if (!hwndwordbuf[hwnd16]) { //TODO:leak hwndwordbuf[hwnd16] = calloc(siz, sizeof(BYTE)); } return *(LONG*)(hwndwordbuf[hwnd16] + offset); } retvalue = GetWindowLongA(hwnd, offset); return retvalue; } void InitWndProc16(HWND hWnd, HWND16 hWnd16); LRESULT get_message_callback(HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp, LRESULT *result, void *arg); LRESULT call_window_proc16(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg); LRESULT CALLBACK DlgProcCall16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); INT_PTR CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); WNDPROC get_classinfo_wndproc(const char *class); /********************************************************************** * SetWindowLong (USER.136) */ LONG WINAPI SetWindowLong16( HWND16 hwnd16, INT16 offset, LONG newval ) { HWND hwnd = WIN_Handle32( hwnd16 ); BOOL is_winproc = (offset == GWLP_WNDPROC); if (offset == DWLP_DLGPROC) is_winproc = is_dialog(hwnd); if (is_winproc) { FARPROC oldproc = GetWindowLongA(hwnd, offset); DWORD old = ((LONG_PTR)GetWindowLong16(hwnd16, offset)); WNDPROC new_proc = (WNDPROC16)newval; if (offset == DWLP_DLGPROC) { SetDlgProc16(hwnd16, new_proc); } else { SetWndProc16(hwnd16, new_proc);//krnl386.exe } if (offset == DWLP_DLGPROC) { if (oldproc != DlgProc) { /* FIXME: set DlgProc */ SetWindowLongA(hwnd, offset, DlgProc); } } else if (oldproc != WindowProc16) { SetWindowLongA(hwnd, offset, WindowProc16); } return old; } if (offset >= 0) { size_t siz = get_actual_cbwndextra(hwnd16); if (siz + sizeof(LONG) < offset) { ERR("(0x%04X, %d) Out of range\n", hwnd, offset); SetLastError(ERROR_INVALID_INDEX); return 0; } if (!hwndwordbuf[hwnd16]) { //TODO:leak hwndwordbuf[hwnd16] = calloc(siz, sizeof(BYTE)); } LONG old = *(LONG*)(hwndwordbuf[hwnd16] + offset); *(LONG*)(hwndwordbuf[hwnd16] + offset) = newval; return old; } else if (offset == GWL_HWNDPARENT) return (SetWindowLongA(WIN_Handle32(hwnd), offset, HWND_32(newval))); else if (offset == GWL_STYLE) // WPWIN61 { DWORD count; ReleaseThunkLock(&count); LONG ret = SetWindowLongA( hwnd, offset, newval ); RestoreThunkLock(count); return ret; } /*else*/ return SetWindowLongA( hwnd, offset, newval ); } /************************************************************************** * OpenClipboard (USER.137) */ BOOL16 WINAPI OpenClipboard16( HWND16 hwnd ) { return OpenClipboard( WIN_Handle32(hwnd) ); } /************************************************************************** * GetClipboardOwner (USER.140) */ HWND16 WINAPI GetClipboardOwner16(void) { return HWND_16( GetClipboardOwner() ); } /************************************************************************** * SetClipboardViewer (USER.147) */ HWND16 WINAPI SetClipboardViewer16( HWND16 hwnd ) { return HWND_16( SetClipboardViewer( WIN_Handle32(hwnd) )); } /************************************************************************** * GetClipboardViewer (USER.148) */ HWND16 WINAPI GetClipboardViewer16(void) { return HWND_16( GetClipboardViewer() ); } /************************************************************************** * ChangeClipboardChain (USER.149) */ BOOL16 WINAPI ChangeClipboardChain16(HWND16 hwnd, HWND16 hwndNext) { return ChangeClipboardChain( WIN_Handle32(hwnd), WIN_Handle32(hwndNext) ); } /************************************************************************** * GetSystemMenu (USER.156) */ HMENU16 WINAPI GetSystemMenu16( HWND16 hwnd, BOOL16 revert ) { return HMENU_16(GetSystemMenu( WIN_Handle32(hwnd), revert )); } /************************************************************************** * GetMenu (USER.157) */ HMENU16 WINAPI GetMenu16( HWND16 hwnd ) { return GetWindowHMenu16(( /*WIN_Handle32*/(hwnd) )); } /************************************************************************** * SetMenu (USER.158) */ BOOL16 WINAPI SetMenu16( HWND16 hwnd, HMENU16 hMenu ) { BOOL result = SetMenu(WIN_Handle32(hwnd), HMENU_32(hMenu)); if (result) { SetWindowHMenu16(hwnd, hMenu); } else if ((GetLastError() == ERROR_INVALID_PARAMETER) && !(GetWindowLongA(HWND_32(hwnd), -20) & WS_CHILD)) { // if last error isn't ERROR_INVALID_xxx_HANDLE then hmenu and hwnd are valid // hmenu is likely a popup, set it and return true SetWindowHMenu16(hwnd, hMenu); return TRUE; } return result; } /************************************************************************** * DrawMenuBar (USER.160) */ void WINAPI DrawMenuBar16( HWND16 hwnd ) { HWND hwnd32 = HWND_32(hwnd); HMENU menu = GetMenu(hwnd32); MENUITEMINFOA mii = {0}; mii.cbSize = sizeof(MENUITEMINFOA); mii.fMask = MIIM_TYPE | MIIM_SUBMENU; if (GetMenuItemInfoA(menu, 0, TRUE, &mii) && (mii.fType & MFT_BITMAP) && mii.hSubMenu) { mii.fMask = MIIM_BITMAP; if (GetMenuItemInfoA(menu, 1, TRUE, &mii)) { // if the second item is a bitmap, it's probably a buttonbar if (!mii.hbmpItem) { mii.hbmpItem = HBMMENU_SYSTEM; SetMenuItemInfoA(menu, 0, TRUE, &mii); } } } DrawMenuBar(hwnd32); } /************************************************************************** * HiliteMenuItem (USER.162) */ BOOL16 WINAPI HiliteMenuItem16( HWND16 hwnd, HMENU16 hMenu, UINT16 id, UINT16 wHilite ) { return HiliteMenuItem( WIN_Handle32(hwnd), HMENU_32(hMenu), id, wHilite ); } /************************************************************************** * CreateCaret (USER.163) */ void WINAPI CreateCaret16( HWND16 hwnd, HBITMAP16 bitmap, INT16 width, INT16 height ) { CreateCaret( WIN_Handle32(hwnd), HBITMAP_32(bitmap), width, height ); } /***************************************************************** * DestroyCaret (USER.164) */ void WINAPI DestroyCaret16(void) { DestroyCaret(); } /***************************************************************** * SetCaretPos (USER.165) */ void WINAPI SetCaretPos16( INT16 x, INT16 y ) { SetCaretPos( x, y ); } /************************************************************************** * HideCaret (USER.166) */ void WINAPI HideCaret16( HWND16 hwnd ) { HideCaret( WIN_Handle32(hwnd) ); } /************************************************************************** * ShowCaret (USER.167) */ void WINAPI ShowCaret16( HWND16 hwnd ) { ShowCaret( WIN_Handle32(hwnd) ); } /***************************************************************** * SetCaretBlinkTime (USER.168) */ void WINAPI SetCaretBlinkTime16( UINT16 msecs ) { SetCaretBlinkTime( msecs ); } /***************************************************************** * GetCaretBlinkTime (USER.169) */ UINT16 WINAPI GetCaretBlinkTime16(void) { return GetCaretBlinkTime(); } /************************************************************************** * ArrangeIconicWindows (USER.170) */ UINT16 WINAPI ArrangeIconicWindows16( HWND16 parent) { return ArrangeIconicWindows( WIN_Handle32(parent) ); } /************************************************************************** * SwitchToThisWindow (USER.172) */ void WINAPI SwitchToThisWindow16( HWND16 hwnd, BOOL16 restore ) { DWORD count; ReleaseThunkLock(&count); SwitchToThisWindow( WIN_Handle32(hwnd), restore ); RestoreThunkLock(count); } /************************************************************************** * KillSystemTimer (USER.182) */ BOOL16 WINAPI KillSystemTimer16( HWND16 hwnd, UINT16 id ) { if (!KillSystemTimer) { ERR("KillSystemTimer NULL\n"); return 0; } return KillSystemTimer( WIN_Handle32(hwnd), id ); } /***************************************************************** * GetCaretPos (USER.183) */ void WINAPI GetCaretPos16( LPPOINT16 pt16 ) { POINT pt; if (GetCaretPos( &pt )) { pt16->x = pt.x; pt16->y = pt.y; } } /************************************************************************** * SetSysModalWindow (USER.188) */ HWND16 WINAPI SetSysModalWindow16( HWND16 hwnd ) { HWND16 old = hwndSysModal; hwndSysModal = hwnd; return old; } /************************************************************************** * GetSysModalWindow (USER.189) */ HWND16 WINAPI GetSysModalWindow16(void) { return hwndSysModal; } /************************************************************************** * GetUpdateRect (USER.190) */ BOOL16 WINAPI GetUpdateRect16( HWND16 hwnd, LPRECT16 rect, BOOL16 erase ) { RECT r; BOOL16 ret; HWND hwnd32 = WIN_Handle32(hwnd); if (!rect) return GetUpdateRect(hwnd32, NULL, erase ); if (!IsWindow(hwnd32)) return FALSE; ret = GetUpdateRect( hwnd32, &r, erase ); rect->left = r.left; rect->top = r.top; rect->right = r.right; rect->bottom = r.bottom; return ret; } /************************************************************************** * ChildWindowFromPoint (USER.191) */ HWND16 WINAPI ChildWindowFromPoint16( HWND16 hwndParent, POINT16 pt ) { POINT pt32; pt32.x = pt.x; pt32.y = pt.y; return HWND_16( ChildWindowFromPoint( WIN_Handle32(hwndParent), pt32 )); } /*********************************************************************** * CascadeChildWindows (USER.198) */ void WINAPI CascadeChildWindows16( HWND16 parent, WORD action ) { CascadeWindows( WIN_Handle32(parent), action, NULL, 0, NULL ); } /*********************************************************************** * TileChildWindows (USER.199) */ void WINAPI TileChildWindows16( HWND16 parent, WORD action ) { TileWindows( WIN_Handle32(parent), action, NULL, 0, NULL ); } /*********************************************************************** * GetWindowTask (USER.224) */ HTASK16 WINAPI GetWindowTask16( HWND16 hwnd ) { DWORD tid = GetWindowThreadProcessId( HWND_32(hwnd), NULL ); if (!tid) return 0; return HTASK_16(tid); } /********************************************************************** * EnumTaskWindows (USER.225) */ BOOL16 WINAPI EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func, LPARAM lParam ) { struct wnd_enum_info info; DWORD tid = HTASK_32( hTask ); if (!tid) return FALSE; info.proc = func; info.param = lParam; return EnumThreadWindows( tid, wnd_enum_callback, (LPARAM)&info ); } /************************************************************************** * GetTopWindow (USER.229) */ HWND16 WINAPI GetTopWindow16( HWND16 hwnd ) { return HWND_16( GetTopWindow( WIN_Handle32(hwnd) )); } /************************************************************************** * GetNextWindow (USER.230) */ HWND16 WINAPI GetNextWindow16( HWND16 hwnd, WORD flag ) { if ((flag != GW_HWNDNEXT) && (flag != GW_HWNDPREV)) return 0; return GetWindow16( hwnd, flag ); } /************************************************************************** * SetWindowPos (USER.232) */ BOOL16 WINAPI SetWindowPos16( HWND16 hwnd, HWND16 hwndInsertAfter, INT16 x, INT16 y, INT16 cx, INT16 cy, WORD flags) { HWND hwnd32 = WIN_Handle32(hwnd); if (hwnd == (WORD)HWND_TOPMOST) { hwnd32 = HWND_TOPMOST; } if (hwnd == (WORD)HWND_NOTOPMOST) { hwnd32 = HWND_NOTOPMOST; } if (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x30a) { RECT rect; if (flags & SWP_NOREDRAW) { GetWindowRect(hwnd32, &rect); /* top-level window */ if (GetAncestor(hwnd32, GA_PARENT) == GetDesktopWindow()) { flags &= ~SWP_NOREDRAW; } if (rect.left == rect.right || rect.bottom == rect.top) { flags &= ~SWP_NOREDRAW; } } if (!(flags & SWP_NOMOVE) && !(flags & SWP_NOSIZE)) { GetClientRect(hwnd32, &rect); if ((cx != rect.right) || (cy != rect.bottom)) flags |= SWP_FRAMECHANGED; // force WM_NCCALCSIZE } } DWORD count; ReleaseThunkLock(&count); BOOL16 result = SetWindowPos( hwnd32, full_insert_after_hwnd(hwndInsertAfter), x, y, cx, cy, flags ); RestoreThunkLock(count); return result; } /************************************************************************** * SetParent (USER.233) */ HWND16 WINAPI SetParent16( HWND16 hwndChild, HWND16 hwndNewParent ) { DWORD count; ReleaseThunkLock(&count); HWND16 hwnd16 = HWND_16( SetParent( WIN_Handle32(hwndChild), WIN_Handle32(hwndNewParent) )); RestoreThunkLock(count); return hwnd16; } /************************************************************************** * GetCapture (USER.236) */ HWND16 WINAPI GetCapture16(void) { return HWND_16( GetCapture() ); } /************************************************************************** * GetUpdateRgn (USER.237) */ INT16 WINAPI GetUpdateRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 erase ) { return GetUpdateRgn( WIN_Handle32(hwnd), HRGN_32(hrgn), erase ); } /************************************************************************** * ExcludeUpdateRgn (USER.238) */ INT16 WINAPI ExcludeUpdateRgn16( HDC16 hdc, HWND16 hwnd ) { return ExcludeUpdateRgn( HDC_32(hdc), WIN_Handle32(hwnd) ); } /************************************************************************** * GetOpenClipboardWindow (USER.248) */ HWND16 WINAPI GetOpenClipboardWindow16(void) { return HWND_16( GetOpenClipboardWindow() ); } /******************************************************************* * MapWindowPoints (USER.258) */ void WINAPI MapWindowPoints16( HWND16 hwndFrom, HWND16 hwndTo, LPPOINT16 lppt, UINT16 count ) { POINT buffer[8], *ppt = buffer; UINT i; if (count > 8) ppt = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*ppt) ); for (i = 0; i < count; i++) { ppt[i].x = lppt[i].x; ppt[i].y = lppt[i].y; } MapWindowPoints( WIN_Handle32(hwndFrom), WIN_Handle32(hwndTo), ppt, count ); for (i = 0; i < count; i++) { lppt[i].x = ppt[i].x; lppt[i].y = ppt[i].y; } if (ppt != buffer) HeapFree( GetProcessHeap(), 0, ppt ); } /************************************************************************** * BeginDeferWindowPos (USER.259) */ HDWP16 WINAPI BeginDeferWindowPos16( INT16 count ) { return HDWP_16(BeginDeferWindowPos( count )); } /************************************************************************** * DeferWindowPos (USER.260) */ HDWP16 WINAPI DeferWindowPos16( HDWP16 hdwp, HWND16 hwnd, HWND16 hwndAfter, INT16 x, INT16 y, INT16 cx, INT16 cy, UINT16 flags ) { return HDWP_16(DeferWindowPos( HDWP_32(hdwp), WIN_Handle32(hwnd), full_insert_after_hwnd(hwndAfter), x, y, cx, cy, flags )); } /************************************************************************** * EndDeferWindowPos (USER.261) */ BOOL16 WINAPI EndDeferWindowPos16( HDWP16 hdwp ) { DWORD count; BOOL result; HDWP hdwp32 = HDWP_32(hdwp); ReleaseThunkLock(&count); result = EndDeferWindowPos(hdwp32); RestoreThunkLock(count); if (result) { K32WOWHandle16Destroy(hdwp32, WOW_TYPE_HDWP); } return result; } /************************************************************************** * GetWindow (USER.262) */ HWND16 WINAPI GetWindow16( HWND16 hwnd, WORD rel ) { return HWND_16( GetWindow( WIN_Handle32(hwnd), rel ) ); } /************************************************************************** * ShowOwnedPopups (USER.265) */ void WINAPI ShowOwnedPopups16( HWND16 owner, BOOL16 fShow ) { ShowOwnedPopups( WIN_Handle32(owner), fShow ); } /************************************************************************** * ShowScrollBar (USER.267) */ void WINAPI ShowScrollBar16( HWND16 hwnd, INT16 nBar, BOOL16 fShow ) { ShowScrollBar( WIN_Handle32(hwnd), nBar, fShow ); } /************************************************************************** * IsZoomed (USER.272) */ BOOL16 WINAPI IsZoomed16(HWND16 hwnd) { return IsZoomed( WIN_Handle32(hwnd) ); } /************************************************************************** * GetDlgCtrlID (USER.277) */ INT16 WINAPI GetDlgCtrlID16( HWND16 hwnd ) { return GetDlgCtrlID( WIN_Handle32(hwnd) ); } /************************************************************************** * GetDesktopHwnd (USER.278) * * Exactly the same thing as GetDesktopWindow(), but not documented. * Don't ask me why... */ HWND16 WINAPI GetDesktopHwnd16(void) { return GetDesktopWindow16(); } /************************************************************************** * SetSystemMenu (USER.280) */ BOOL16 WINAPI SetSystemMenu16( HWND16 hwnd, HMENU16 hMenu ) { return SetSystemMenu( WIN_Handle32(hwnd), HMENU_32(hMenu) ); } /************************************************************************** * GetDesktopWindow (USER.286) */ HWND16 WINAPI GetDesktopWindow16(void) { return HWND_16( GetDesktopWindow() ); } /************************************************************************** * GetLastActivePopup (USER.287) */ HWND16 WINAPI GetLastActivePopup16( HWND16 hwnd ) { return HWND_16( GetLastActivePopup( WIN_Handle32(hwnd) )); } /************************************************************************** * RedrawWindow (USER.290) */ BOOL16 WINAPI RedrawWindow16( HWND16 hwnd, const RECT16 *rectUpdate, HRGN16 hrgnUpdate, UINT16 flags ) { DWORD count; BOOL result; ReleaseThunkLock(&count); if (rectUpdate) { RECT r; r.left = rectUpdate->left; r.top = rectUpdate->top; r.right = rectUpdate->right; r.bottom = rectUpdate->bottom; result = RedrawWindow(WIN_Handle32(hwnd), &r, HRGN_32(hrgnUpdate), flags); } else { result = RedrawWindow(WIN_Handle32(hwnd), NULL, HRGN_32(hrgnUpdate), flags); } RestoreThunkLock(count); return result; } /************************************************************************** * LockWindowUpdate (USER.294) */ BOOL16 WINAPI LockWindowUpdate16( HWND16 hwnd ) { return LockWindowUpdate( WIN_Handle32(hwnd) ); } /************************************************************************** * ScrollWindowEx (USER.319) */ INT16 WINAPI ScrollWindowEx16( HWND16 hwnd, INT16 dx, INT16 dy, const RECT16 *rect, const RECT16 *clipRect, HRGN16 hrgnUpdate, LPRECT16 rcUpdate, UINT16 flags ) { RECT rect32, clipRect32, rcUpdate32; BOOL16 ret; if (rect) { rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; } if (clipRect) { clipRect32.left = clipRect->left; clipRect32.top = clipRect->top; clipRect32.right = clipRect->right; clipRect32.bottom = clipRect->bottom; } ret = ScrollWindowEx( WIN_Handle32(hwnd), dx, dy, rect ? &rect32 : NULL, clipRect ? &clipRect32 : NULL, HRGN_32(hrgnUpdate), (rcUpdate) ? &rcUpdate32 : NULL, flags ); if (rcUpdate) { rcUpdate->left = rcUpdate32.left; rcUpdate->top = rcUpdate32.top; rcUpdate->right = rcUpdate32.right; rcUpdate->bottom = rcUpdate32.bottom; } return ret; } /************************************************************************** * FillWindow (USER.324) */ void WINAPI FillWindow16( HWND16 hwndParent, HWND16 hwnd, HDC16 hdc, HBRUSH16 hbrush ) { RECT rect; RECT16 rc16; GetClientRect( WIN_Handle32(hwnd), &rect ); DPtoLP( HDC_32(hdc), (LPPOINT)&rect, 2 ); rc16.left = rect.left; rc16.top = rect.top; rc16.right = rect.right; rc16.bottom = rect.bottom; PaintRect16( hwndParent, hwnd, hdc, hbrush, &rc16 ); } /************************************************************************** * PaintRect (USER.325) */ void WINAPI PaintRect16( HWND16 hwndParent, HWND16 hwnd, HDC16 hdc, HBRUSH16 hbrush, const RECT16 *rect) { if (hbrush <= CTLCOLOR_STATIC) { HWND parent = WIN_Handle32(hwndParent), hwnd32 = WIN_Handle32(hwnd); if (!parent) return; hbrush = SendMessageW( parent, WM_CTLCOLORMSGBOX + hbrush, hdc, (LPARAM)hwnd32 ); if (!hbrush) hbrush = DefWindowProcW( parent, WM_CTLCOLORMSGBOX + hbrush, hdc, (LPARAM)hwnd32 ); } if (hbrush) FillRect16( hdc, rect, hbrush ); } /************************************************************************** * GetControlBrush (USER.326) */ HBRUSH16 WINAPI GetControlBrush16( HWND16 hwnd, HDC16 hdc, UINT16 ctlType ) { HBRUSH16 ret; HWND hwnd32 = WIN_Handle32(hwnd); HWND parent = GetParent( hwnd32 ); if (!parent) parent = hwnd32; ret = SendMessageW( parent, WM_CTLCOLORMSGBOX + ctlType, hdc, (LPARAM)hwnd32 ); if (!ret) ret = DefWindowProcW( parent, WM_CTLCOLORMSGBOX + ctlType, hdc, (LPARAM)hwnd32 ); return ret; } /************************************************************************** * GetDCEx (USER.359) */ HDC16 WINAPI GetDCEx16( HWND16 hwnd, HRGN16 hrgnClip, DWORD flags ) { return HDC_16(GetDCEx(WIN_Handle32(hwnd), HRGN_32(hrgnClip), flags)); } /************************************************************************** * GetWindowPlacement (USER.370) */ BOOL16 WINAPI GetWindowPlacement16( HWND16 hwnd, WINDOWPLACEMENT16 *wp16 ) { WINDOWPLACEMENT wpl; wpl.length = sizeof(wpl); if (!GetWindowPlacement( WIN_Handle32(hwnd), &wpl )) return FALSE; wp16->length = sizeof(*wp16); wp16->flags = wpl.flags; wp16->showCmd = wpl.showCmd; wp16->ptMinPosition.x = wpl.ptMinPosition.x; wp16->ptMinPosition.y = wpl.ptMinPosition.y; wp16->ptMaxPosition.x = wpl.ptMaxPosition.x; wp16->ptMaxPosition.y = wpl.ptMaxPosition.y; wp16->rcNormalPosition.left = wpl.rcNormalPosition.left; wp16->rcNormalPosition.top = wpl.rcNormalPosition.top; wp16->rcNormalPosition.right = wpl.rcNormalPosition.right; wp16->rcNormalPosition.bottom = wpl.rcNormalPosition.bottom; return TRUE; } /************************************************************************** * SetWindowPlacement (USER.371) */ BOOL16 WINAPI SetWindowPlacement16( HWND16 hwnd, const WINDOWPLACEMENT16 *wp16 ) { WINDOWPLACEMENT wpl; if (!wp16) return FALSE; wpl.length = sizeof(wpl); wpl.flags = wp16->flags; wpl.showCmd = wp16->showCmd; wpl.ptMinPosition.x = wp16->ptMinPosition.x; wpl.ptMinPosition.y = wp16->ptMinPosition.y; wpl.ptMaxPosition.x = wp16->ptMaxPosition.x; wpl.ptMaxPosition.y = wp16->ptMaxPosition.y; wpl.rcNormalPosition.left = wp16->rcNormalPosition.left; wpl.rcNormalPosition.top = wp16->rcNormalPosition.top; wpl.rcNormalPosition.right = wp16->rcNormalPosition.right; wpl.rcNormalPosition.bottom = wp16->rcNormalPosition.bottom; DWORD count; ReleaseThunkLock(&count); BOOL ret = SetWindowPlacement( WIN_Handle32(hwnd), &wpl ); RestoreThunkLock(count); return ret; } struct WNDCLASS16Info WNDCLASS16Info[65536]; struct WNDCLASS16Info *WNDCLASS16InfoStringAtom[65536]; #include "../toolhelp/toolhelp.h" __declspec(dllexport) BOOL16 WINAPI USER_ClassFirst16(CLASSENTRY *pClassEntry) { FIXME("\n"); return FALSE; } __declspec(dllexport) BOOL16 WINAPI USER_ClassNext16(CLASSENTRY *pClassEntry) { FIXME("\n"); return FALSE; } NE_TYPEINFO *get_resource_table(HMODULE16 hmod, LPCSTR type, LPBYTE *restab); /*********************************************************************** * RegisterClassEx (USER.397) */ ATOM WINAPI RegisterClassEx16( const WNDCLASSEX16 *wc ) { struct class_entry *class; WNDCLASSEXA wc32; HINSTANCE16 inst; ATOM atom; SIZE_T class_len; SIZE_T menu_len; SIZE_T buf_len; struct A { LPCSTR local_class_prefix; DWORD hInst; LPCSTR name; } a; char atombuf[256]; va_list arg; LPCSTR buf = NULL; LPCSTR classname32 = MapSL(wc->lpszClassName); inst = GetExePtr( wc->hInstance ); if (!inst) { inst = GetExePtr(GetCurrentTask()); } wc32.cbSize = sizeof(wc32); wc32.style = wc->style | CS_GLOBALCLASS; wc32.lpfnWndProc = WindowProc16; wc32.cbClsExtra = wc->cbClsExtra; wc32.cbWndExtra = 100; wc32.hInstance = HINSTANCE_32(inst); wc32.hIcon = get_icon_32(wc->hIcon); wc32.hCursor = get_icon_32( wc->hCursor ); wc32.hbrBackground = HBRUSH_32(wc->hbrBackground); wc32.lpszMenuName = MapSL(wc->lpszMenuName); wc32.lpszClassName = classname32; wc32.hIconSm = get_icon_32(wc->hIconSm); if (!HIWORD(wc32.lpszClassName)) { GlobalGetAtomNameA(wc32.lpszClassName, atombuf, 256); wc32.lpszClassName = atombuf; } a.hInst = inst; a.name = wc32.lpszClassName; a.local_class_prefix = LOCAL_CLASS_PREFIX; arg = (va_list)&a; /* * add hModule prefix to classname */ 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)) { wc32.lpszClassName = buf; } /* * register same class: * Win3.1 returns 0 * WOW returns same class atom */ atom = RegisterClassExA( &wc32 ); 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); if (atom) { WNDCLASS16Info[atom].allocated = TRUE; WNDCLASS16Info[atom].wndproc = (DWORD)(wc->lpfnWndProc); WNDCLASS16Info[atom].cbWndExtra = wc->cbWndExtra; } class_len = strlen(a.name) + 1; menu_len = !IS_INTRESOURCE(wc->lpszMenuName) && ((ULONG_PTR)wc32.lpszMenuName >> 16) ? strlen(wc32.lpszMenuName) + 1 : 0; buf_len = strlen(buf) + 1; if (atom && (class = HeapAlloc(GetProcessHeap(), 0, sizeof(*class) + class_len + menu_len + buf_len))) { class->atom = atom; class->inst = inst; class->wndproc16 = WNDCLASS16Info[atom].wndproc; class->classInfo = wc32; class->classInfo.style = wc->style | (IsOldWindowsTask(GetCurrentTask()) ? CS_GLOBALCLASS : 0); class->classInfo.lpszClassName = (LPBYTE)class + sizeof(*class); memcpy(class->classInfo.lpszClassName, a.name, class_len); if (menu_len) { class->classInfo.lpszMenuName = (LPBYTE)class + sizeof(*class) + class_len; memcpy(class->classInfo.lpszMenuName, wc32.lpszMenuName, menu_len); } class->win32_classname = (LPBYTE)class + sizeof(*class) + class_len + menu_len; memcpy(class->win32_classname, buf, buf_len); list_add_tail( &class_list, &class->entry ); } LocalFree(buf); return atom; } struct class_entry *find_win32_class(LPCSTR name) { struct class_entry *clazz; ATOM class_atom = LOWORD(name); BOOL is_atom = IS_INTRESOURCE(name); LIST_FOR_EACH_ENTRY(clazz, &class_list, struct class_entry, entry) { if (is_atom) { if (class_atom == clazz->atom) { return clazz; } continue; } if (!strcmpi(name, clazz->win32_classname)) { return clazz; } } return NULL; } struct class_entry *find_win16_class(HINSTANCE16 hInst16, LPCSTR name) { struct class_entry *clazz; ATOM class_atom = LOWORD(name); BOOL is_atom = IS_INTRESOURCE(name); hInst16 = GetExePtr(hInst16); LIST_FOR_EACH_ENTRY(clazz, &class_list, struct class_entry, entry) { if ((clazz->inst == hInst16 || (clazz->classInfo.style & CS_GLOBALCLASS))) { if (is_atom) { if (class_atom == clazz->atom) { return clazz; } continue; } if (!strcmpi(name, clazz->classInfo.lpszClassName)) { return clazz; } } } return NULL; } LPCSTR win16classname(LPCSTR name) { struct class_entry *entry = find_win32_class(name); if (entry) return entry->classInfo.lpszClassName; if (HIWORD(name) && name[0] == '#') { ATOM atom = FindAtomA(name); if (atom != 0) return atom; } return name; } LPCSTR win32classname(HINSTANCE16 hInst16, LPCSTR name) { struct class_entry *entry = find_win16_class(hInst16, name); if (entry) return entry->win32_classname; return name; } /*********************************************************************** * GetClassInfoEx (USER.398) * * FIXME: this is just a guess, I have no idea if GetClassInfoEx() is the * same in Win16 as in Win32. --AJ */ BOOL16 WINAPI GetClassInfoEx16( HINSTANCE16 hInst16, SEGPTR name, WNDCLASSEX16 *wc ) { static HMODULE user32_module; WNDCLASSEXA wc32; HINSTANCE hInstance; ATOM ret = 0; struct class_entry *class; LPCSTR name32 = MapSL(name); ATOM class_atom = LOWORD(name); BOOL is_atom = IS_INTRESOURCE(name); if (!user32_module) user32_module = GetModuleHandleA( "user32.dll" ); if (hInst16 == GetModuleHandle16("user")) hInstance = user32_module; else hInstance = HINSTANCE_32(GetExePtr( hInst16 )); class = find_win16_class(hInst16, name32); if (class) { wc32 = class->classInfo; ret = class->atom; } /* win32 class */ if (!ret) ret = GetClassInfoExA( hInstance, name32, &wc32 ); if (ret) { wc->lpfnWndProc = WNDCLASS16Info[ret].wndproc ? WNDCLASS16Info[ret].wndproc : WINPROC_GetProc16( wc32.lpfnWndProc, FALSE ); wc->style = wc32.style; wc->cbClsExtra = wc32.cbClsExtra; BOOL f; WORD cb = get_system_window_class_wndextra(wc32.lpszClassName, &f); wc->cbWndExtra = f ? cb : wc32.cbWndExtra; if (GetExePtr(hInst16) == HINSTANCE_16(wc32.hInstance)) wc->hInstance = hInst16; else wc->hInstance = (wc32.hInstance == user32_module) ? GetModuleHandle16("user") : HINSTANCE_16(wc32.hInstance); wc->hIcon = get_icon_16( wc32.hIcon ); wc->hIconSm = get_icon_16( wc32.hIconSm ); wc->hCursor = get_icon_16( wc32.hCursor ); wc->hbrBackground = HBRUSH_16(wc32.hbrBackground); wc->lpszClassName = MapLS(wc32.lpszClassName); wc->lpszMenuName = MapLS(wc32.lpszMenuName); /* FIXME: leak */ } return ret; } /************************************************************************** * ChildWindowFromPointEx (USER.399) */ HWND16 WINAPI ChildWindowFromPointEx16( HWND16 hwndParent, POINT16 pt, UINT16 uFlags) { POINT pt32; pt32.x = pt.x; pt32.y = pt.y; return HWND_16( ChildWindowFromPointEx( WIN_Handle32(hwndParent), pt32, uFlags )); } /************************************************************************** * GetPriorityClipboardFormat (USER.402) */ INT16 WINAPI GetPriorityClipboardFormat16( UINT16 *list, INT16 count ) { int i; for (i = 0; i < count; i++) if (IsClipboardFormatAvailable( list[i] )) return list[i]; return -1; } /*********************************************************************** * UnregisterClass (USER.403) */ BOOL16 WINAPI UnregisterClass16( LPCSTR className, HINSTANCE16 hInstance ) { ATOM atom; if (hInstance == GetModuleHandle16("user")) hInstance = 0; else hInstance = GetExePtr( hInstance ); struct class_entry *win32 = find_win16_class(hInstance, className); if (win32) { WNDCLASS16Info[win32->atom].allocated = FALSE; className = win32->win32_classname; BOOL ret = UnregisterClassA(className, HINSTANCE_32(hInstance)); list_remove(&win32->entry); HeapFree(GetProcessHeap(), 0, win32); return ret; } return UnregisterClassA( className, HINSTANCE_32(hInstance) ); } /*********************************************************************** * GetClassInfo (USER.404) */ BOOL16 WINAPI GetClassInfo16( HINSTANCE16 hInst16, SEGPTR name, WNDCLASS16 *wc ) { WNDCLASSEX16 wcex; UINT16 ret = GetClassInfoEx16( hInst16, name, &wcex ); if (ret) { wc->style = wcex.style; wc->lpfnWndProc = wcex.lpfnWndProc; wc->cbClsExtra = wcex.cbClsExtra; wc->cbWndExtra = wcex.cbWndExtra; wc->hInstance = wcex.hInstance; wc->hIcon = wcex.hIcon; wc->hCursor = wcex.hCursor; wc->hbrBackground = wcex.hbrBackground; wc->lpszMenuName = wcex.lpszMenuName; wc->lpszClassName = wcex.lpszClassName; } return ret; } /************************************************************************** * TrackPopupMenu (USER.416) */ BOOL16 WINAPI TrackPopupMenu16( HMENU16 hMenu, UINT16 wFlags, INT16 x, INT16 y, INT16 nReserved, HWND16 hwnd, const RECT16 *lpRect ) { RECT r; BOOL ret, err; if (lpRect) { r.left = lpRect->left; r.top = lpRect->top; r.right = lpRect->right; r.bottom = lpRect->bottom; } ret = TrackPopupMenu( HMENU_32(hMenu), wFlags | TPM_RETURNCMD, x, y, nReserved, WIN_Handle32(hwnd), lpRect ? &r : NULL ); err = GetLastError() ? FALSE : TRUE; if (ret && !(wFlags & TPM_RETURNCMD)) { if (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x30a) SendMessage16(hwnd, WM_COMMAND, ret, 0); else PostMessage16(hwnd, WM_COMMAND, ret, 0); } return wFlags & TPM_RETURNCMD ? ret : err; } /************************************************************************** * FindWindowEx (USER.427) */ HWND16 WINAPI FindWindowEx16( HWND16 parent, HWND16 child, LPCSTR className, LPCSTR title ) { char sbuf[200]; char *buf = sbuf; SIZE_T buf_size = sizeof(sbuf) / sizeof(char); HWND child32 = WIN_Handle32(child); HWND parent32 = WIN_Handle32(parent); LPCSTR lcprefix = LOCAL_CLASS_PREFIX; SIZE_T lcprefix_len = strlen(lcprefix); char atomname[256]; if (!HIWORD(className) && LOWORD(className)) { GlobalGetAtomNameA(className, atomname, ARRAYSIZE(atomname)); className = atomname; } else if (className && !strcmp(className, "PROGMAN")) { parent32 = HWND_MESSAGE; className = "PROGMAN16"; } while (TRUE) { child32 = FindWindowExA(parent32, child32, NULL, title); if (!child32) break; if (!className) break; int classname_len = 0; while (TRUE) { classname_len = GetClassNameA(child32, buf, buf_size); if (!classname_len) { if (buf_size != 0) { sbuf[0] = '\0'; } break; } //truncated if (classname_len == buf_size - 1) { LPVOID heap; if (buf != sbuf) { heap = HeapReAlloc(GetProcessHeap(), 0, buf, buf_size * 2); } else { heap = HeapAlloc(GetProcessHeap(), 0, buf_size * 2); } if (!heap) break; buf = (LPCSTR)heap; buf_size *= 2; continue; } break; } if (classname_len <= lcprefix_len) { if (!strcmpi(sbuf, className)) { break; } continue; } //is win16 local class if (!memicmp(sbuf, LOCAL_CLASS_PREFIX, lcprefix_len)) { LPCSTR win16cls = win16classname(sbuf); if (!strcmpi(win16cls, className)) { break; } } if (!strcmpi(sbuf, className)) { break; } } if (buf != sbuf) { HeapFree(GetProcessHeap(), 0, buf); } return HWND_16(child32); } LRESULT def_frame_proc_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg) { DWORD count; HANDLE yevent = kernel_get_thread_data()->yield_event; if (!yevent) ReleaseThunkLock(&count); if (hwnd == (HWND)arg) arg = NULL; *result = DefFrameProcA(hwnd, (HWND)arg, msg, wp, lp); if (!yevent) RestoreThunkLock(count); return *result; } /*********************************************************************** * DefFrameProc (USER.445) */ LRESULT WINAPI DefFrameProc16( HWND16 hwnd, HWND16 hwndMDIClient, UINT16 message, WPARAM16 wParam, LPARAM lParam ) { switch (message) { case WM_SETTEXT: lParam = (LPARAM)MapSL(lParam); /* fall through */ case WM_COMMAND: case WM_SETFOCUS: case WM_SIZE: return DefFrameProcA( WIN_Handle32(hwnd), WIN_Handle32(hwndMDIClient), message, wParam, lParam ); case WM_NCACTIVATE: return DefFrameProcA(WIN_Handle32(hwnd), WIN_Handle32(hwndMDIClient), message, wParam, HRGN_32(lParam)); case WM_NEXTMENU: { MDINEXTMENU next_menu; DefFrameProcW( WIN_Handle32(hwnd), WIN_Handle32(hwndMDIClient), message, wParam, (LPARAM)&next_menu ); return MAKELONG( HMENU_16(next_menu.hmenuNext), HWND_16(next_menu.hwndNext) ); } default: { LRESULT result; WINPROC_CallProc16To32A(def_frame_proc_callback, hwnd, message, wParam, lParam, &result, HWND_32(hwndMDIClient)); return result; } } } /*********************************************************************** * DefMDIChildProc (USER.447) */ LRESULT WINAPI DefMDIChildProc16( HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam ) { LRESULT ret; DWORD count; switch (message) { case WM_SETTEXT: lParam = (LPARAM)MapSL(lParam); break; case WM_SETFOCUS: wParam = HWND_32(wParam); break; case WM_MENUCHAR: case WM_CLOSE: case WM_CHILDACTIVATE: case WM_SYSCOMMAND: case WM_SETVISIBLE: case WM_SIZE: case WM_SYSCHAR: break; case WM_GETMINMAXINFO: { MINMAXINFO16 *mmi16 = MapSL(lParam); MINMAXINFO mmi; mmi.ptReserved.x = mmi16->ptReserved.x; mmi.ptReserved.y = mmi16->ptReserved.y; mmi.ptMaxSize.x = mmi16->ptMaxSize.x; mmi.ptMaxSize.y = mmi16->ptMaxSize.y; mmi.ptMaxPosition.x = mmi16->ptMaxPosition.x; mmi.ptMaxPosition.y = mmi16->ptMaxPosition.y; mmi.ptMinTrackSize.x = mmi16->ptMinTrackSize.x; mmi.ptMinTrackSize.y = mmi16->ptMinTrackSize.y; mmi.ptMaxTrackSize.x = mmi16->ptMaxTrackSize.x; mmi.ptMaxTrackSize.y = mmi16->ptMaxTrackSize.y; ReleaseThunkLock(&count); DefMDIChildProcA(HWND_32(hwnd), message, wParam, (LPARAM)&mmi); RestoreThunkLock(count); mmi16->ptReserved.x = mmi.ptReserved.x; mmi16->ptReserved.y = mmi.ptReserved.y; mmi16->ptMaxSize.x = mmi.ptMaxSize.x; mmi16->ptMaxSize.y = mmi.ptMaxSize.y; mmi16->ptMaxPosition.x = mmi.ptMaxPosition.x; mmi16->ptMaxPosition.y = mmi.ptMaxPosition.y; mmi16->ptMinTrackSize.x = mmi.ptMinTrackSize.x; mmi16->ptMinTrackSize.y = mmi.ptMinTrackSize.y; mmi16->ptMaxTrackSize.x = mmi.ptMaxTrackSize.x; mmi16->ptMaxTrackSize.y = mmi.ptMaxTrackSize.y; return 0; } case WM_NEXTMENU: { MDINEXTMENU next_menu; ReleaseThunkLock(&count); DefMDIChildProcA(HWND_32(hwnd), message, wParam, (LPARAM)&next_menu); RestoreThunkLock(count); return MAKELONG( HMENU_16(next_menu.hmenuNext), HWND_16(next_menu.hwndNext) ); } default: return DefWindowProc16(hwnd, message, wParam, lParam); } ReleaseThunkLock(&count); ret = DefMDIChildProcA(HWND_32(hwnd), message, wParam, lParam); RestoreThunkLock(count); return ret; } /************************************************************************** * DrawAnimatedRects (USER.448) */ BOOL16 WINAPI DrawAnimatedRects16( HWND16 hwnd, INT16 idAni, const RECT16* lprcFrom, const RECT16* lprcTo ) { RECT rcFrom32, rcTo32; rcFrom32.left = lprcFrom->left; rcFrom32.top = lprcFrom->top; rcFrom32.right = lprcFrom->right; rcFrom32.bottom = lprcFrom->bottom; rcTo32.left = lprcTo->left; rcTo32.top = lprcTo->top; rcTo32.right = lprcTo->right; rcTo32.bottom = lprcTo->bottom; return DrawAnimatedRects( WIN_Handle32(hwnd), idAni, &rcFrom32, &rcTo32 ); } /*********************************************************************** * CreateWindowEx (USER.452) */ HWND16 WINAPI CreateWindowEx16( DWORD exStyle, LPCSTR className, LPCSTR windowName, DWORD style, INT16 x, INT16 y, INT16 width, INT16 height, HWND16 parent, HMENU16 menu, HINSTANCE16 instance, LPVOID data ) { CREATESTRUCTA cs; char buffer[256]; HWND hwnd; BOOL release = FALSE; DWORD count; if (instance == NULL) { HTASK16 task = GetCurrentTask(); TDB *tdb = GlobalLock16(task); instance = tdb->hInstance; GlobalUnlock16(task); } /* Fix the coordinates */ cs.x = (x == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)x; cs.y = (y == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)y; cs.cx = (width == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)width; cs.cy = (height == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)height; if (!(style & (WS_POPUP | WS_CHILD))) style |= WS_CAPTION; // make windows 1.0 programs appear in a usable window if ((GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x201) && !(style & WS_CHILD)) { if (!cs.cx || !cs.cy) { cs.x = CW_USEDEFAULT; cs.y = CW_USEDEFAULT; cs.cx = CW_USEDEFAULT; cs.cy = CW_USEDEFAULT; } if ((style & (WS_CAPTION | WS_SIZEBOX)) == (WS_CAPTION | WS_SIZEBOX)) style |= WS_MINIMIZEBOX | WS_MAXIMIZEBOX; } // work around WS_EX_WINDOWEDGE 3.10 compat breakage in Windows 11 24H2 // must be done after create because otherwise both windowedge and staticedge get set // even though they are supposed to be mutually exclusive if (get_windows_build() >= 26100) { if (((style & (WS_CAPTION | WS_SIZEBOX)) == WS_CAPTION) && !(style & WS_CHILD) && !(exStyle & (WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE)) && (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x400)) exStyle |= WS_EX_STATICEDGE; } /* Create the window */ cs.lpCreateParams = data; cs.hInstance = HINSTANCE_32(instance); cs.hMenu = menu; cs.hwndParent = WIN_Handle32( parent ); cs.style = style; cs.lpszName = windowName; cs.lpszClass = className; cs.dwExStyle = exStyle; if (cs.hwndParent && IsWindow(cs.hwndParent)) { HTASK16 parenttask = GetWindowTask16(parent); if (parenttask != 0 && parenttask != GetCurrentTask()) { TRACE("GetWindowTask16(parent) != GetCurrentTask()\n"); release = TRUE; } } cs.lpszClass = win32classname(cs.hInstance, cs.lpszClass); if (!IS_INTRESOURCE(cs.lpszClass)) { } else { if (!GlobalGetAtomNameA(LOWORD(className), buffer, sizeof(buffer))) return 0; cs.lpszClass = buffer; cs.lpszClass = win32classname(cs.hInstance, cs.lpszClass); } /* load the menu */ if (!menu && !is_win_menu_disallowed(style)) { WNDCLASSA class; HINSTANCE16 module = GetExePtr( instance ); if (GetClassInfoA( HINSTANCE_32(module), cs.lpszClass, &class )) cs.hMenu = HMENU_32( LoadMenu16( module, class.lpszMenuName )); } else if (!is_win_menu_disallowed(style)) { cs.hMenu = HMENU_32(menu); } if (release) { ReleaseThunkLock(&count); } hwnd = create_window16((CREATESTRUCTW *)&cs, (LPCWSTR)cs.lpszClass, HINSTANCE_32(instance), FALSE); if (release) { RestoreThunkLock(count); } if (hwnd == NULL) { 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); return NULL; } HWND16 hWnd16 = HWND_16(hwnd); InitWndProc16(hwnd, hWnd16); SetWindowHInst16(hWnd16, instance); if (!GetWindowHMenu16(hWnd16)) SetWindowHMenu16(hWnd16, menu); return hWnd16; } void InitWndProc16(HWND hWnd, HWND16 hWnd16) { ATOM classatom = GetClassLongA(hWnd, GCW_ATOM);//WNDPROC16 if (classatom && !GetWndProc16(hWnd16)) { SetWndProc16(hWnd16, WNDCLASS16Info[classatom].wndproc); } } /*********************************************************************** * GetInternalWindowPos (USER.460) */ UINT16 WINAPI GetInternalWindowPos16( HWND16 hwnd, LPRECT16 rectWnd, LPPOINT16 ptIcon ) { WINDOWPLACEMENT16 wndpl; if (!GetWindowPlacement16( hwnd, &wndpl )) return 0; if (rectWnd) *rectWnd = wndpl.rcNormalPosition; if (ptIcon) *ptIcon = wndpl.ptMinPosition; return wndpl.showCmd; } /************************************************************************** * SetInternalWindowPos (USER.461) */ void WINAPI SetInternalWindowPos16( HWND16 hwnd, UINT16 showCmd, LPRECT16 rect, LPPOINT16 pt ) { RECT rc32; POINT pt32; if (rect) { rc32.left = rect->left; rc32.top = rect->top; rc32.right = rect->right; rc32.bottom = rect->bottom; } if (pt) { pt32.x = pt->x; pt32.y = pt->y; } SetInternalWindowPos( WIN_Handle32(hwnd), showCmd, rect ? &rc32 : NULL, pt ? &pt32 : NULL ); } /************************************************************************** * CalcChildScroll (USER.462) */ void WINAPI CalcChildScroll16( HWND16 hwnd, WORD scroll ) { CalcChildScroll( WIN_Handle32(hwnd), scroll ); } /************************************************************************** * ScrollChildren (USER.463) */ void WINAPI ScrollChildren16(HWND16 hwnd, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam) { ScrollChildren( WIN_Handle32(hwnd), uMsg, wParam, lParam ); } /************************************************************************** * DragDetect (USER.465) */ BOOL16 WINAPI DragDetect16( HWND16 hwnd, POINT16 pt ) { POINT pt32; pt32.x = pt.x; pt32.y = pt.y; return DragDetect( WIN_Handle32(hwnd), pt32 ); } /************************************************************************** * SetScrollInfo (USER.475) */ INT16 WINAPI SetScrollInfo16( HWND16 hwnd, INT16 nBar, const SCROLLINFO *info, BOOL16 redraw ) { return SetScrollInfo( WIN_Handle32(hwnd), nBar, info, redraw ); } /************************************************************************** * GetScrollInfo (USER.476) */ BOOL16 WINAPI GetScrollInfo16( HWND16 hwnd, INT16 nBar, LPSCROLLINFO info ) { return GetScrollInfo( WIN_Handle32(hwnd), nBar, info ); } /************************************************************************** * EnableScrollBar (USER.482) */ BOOL16 WINAPI EnableScrollBar16( HWND16 hwnd, INT16 nBar, UINT16 flags ) { return EnableScrollBar( WIN_Handle32(hwnd), nBar, flags ); } /************************************************************************** * GetShellWindow (USER.600) */ HWND16 WINAPI GetShellWindow16(void) { return HWND_16( GetShellWindow() ); } /************************************************************************** * GetForegroundWindow (USER.608) */ HWND16 WINAPI GetForegroundWindow16(void) { return HWND_16( GetForegroundWindow() ); } /************************************************************************** * SetForegroundWindow (USER.609) */ BOOL16 WINAPI SetForegroundWindow16( HWND16 hwnd ) { return SetForegroundWindow( WIN_Handle32(hwnd) ); } /************************************************************************** * DrawCaptionTemp (USER.657) */ BOOL16 WINAPI DrawCaptionTemp16( HWND16 hwnd, HDC16 hdc, const RECT16 *rect, HFONT16 hFont, HICON16 hIcon, LPCSTR str, UINT16 uFlags ) { RECT rect32; if (rect) { rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; } return DrawCaptionTempA( WIN_Handle32(hwnd), HDC_32(hdc), rect ? &rect32 : NULL, HFONT_32(hFont), get_icon_32(hIcon), str, uFlags & 0x1f ); } /************************************************************************** * DrawCaption (USER.660) */ BOOL16 WINAPI DrawCaption16( HWND16 hwnd, HDC16 hdc, const RECT16 *rect, UINT16 flags ) { RECT rect32; if (rect) { rect32.left = rect->left; rect32.top = rect->top; rect32.right = rect->right; rect32.bottom = rect->bottom; } return DrawCaption(WIN_Handle32(hwnd), HDC_32(hdc), rect ? &rect32 : NULL, flags); } /************************************************************************** * GetMenuItemRect (USER.665) */ BOOL16 WINAPI GetMenuItemRect16( HWND16 hwnd, HMENU16 hMenu, UINT16 uItem, LPRECT16 rect) { RECT r32; BOOL res; if (!rect) return FALSE; res = GetMenuItemRect( WIN_Handle32(hwnd), HMENU_32(hMenu), uItem, &r32 ); rect->left = r32.left; rect->top = r32.top; rect->right = r32.right; rect->bottom = r32.bottom; return res; } /************************************************************************** * SetWindowRgn (USER.668) */ INT16 WINAPI SetWindowRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 redraw ) { return SetWindowRgn( WIN_Handle32(hwnd), HRGN_32(hrgn), redraw ); } /************************************************************************** * MessageBoxIndirect (USER.827) */ INT16 WINAPI MessageBoxIndirect16( LPMSGBOXPARAMS16 msgbox ) { char caption[256], text[256]; MSGBOXPARAMSA msgbox32; msgbox32.cbSize = msgbox->cbSize; msgbox32.hwndOwner = WIN_Handle32( msgbox->hwndOwner ); msgbox32.hInstance = 0; msgbox32.dwStyle = msgbox->dwStyle; msgbox32.lpszIcon = NULL; msgbox32.dwContextHelpId = msgbox->dwContextHelpId; msgbox32.lpfnMsgBoxCallback = msgbox->lpfnMsgBoxCallback; msgbox32.dwLanguageId = msgbox->dwLanguageId; if (!HIWORD(msgbox->lpszCaption)) { LoadString16( msgbox->hInstance, LOWORD(msgbox->lpszCaption), caption, sizeof(caption) ); msgbox32.lpszCaption = caption; } else msgbox32.lpszCaption = MapSL(msgbox->lpszCaption); if (!HIWORD(msgbox->lpszText)) { LoadString16( msgbox->hInstance, LOWORD(msgbox->lpszText), text, sizeof(text) ); msgbox32.lpszText = text; } else msgbox32.lpszText = MapSL(msgbox->lpszText); if ((msgbox->dwStyle & MB_ICONMASK) == MB_USERICON) { FIXME( "user icon %s not supported\n", debugstr_a( MapSL(msgbox->lpszIcon) )); msgbox32.dwStyle &= ~MB_USERICON; } return MessageBoxIndirectA( &msgbox32 ); } ================================================ FILE: user/winhelp.c ================================================ #include "config.h" #include #include #include #include /* offsetof */ #include #ifdef HAVE_UNISTD_H # include #endif #include "wine/debug.h" #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "winnls.h" #include #include "wine/winuser16.h" WINE_DEFAULT_DEBUG_CHANNEL(win); /* * ReactOS kernel * Copyright (C) 1998, 1999, 2000, 2001, 2002 ReactOS Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * PROJECT: ReactOS user32.dll * FILE: win32ss/user/user32/misc/winhelp.c * PURPOSE: WinHelp * PROGRAMMER: Robert Dickenson(robd@reactos.org) * UPDATE HISTORY: * 23-08-2002 RDD Created from wine sources */ /* WinHelp internal structure */ typedef struct { WORD size; WORD command; LONG data; LONG reserved; WORD ofsFilename; WORD ofsData; } WINHELP, *LPWINHELP; typedef struct { WORD mkSize; CHAR mkKeylist; CHAR szKeyphrase[1]; } MULTIKEYHELP16, *PMULTIKEYHELP16, *LPMULTIKEYHELP16; typedef struct { INT16 wStructSize; INT16 x; INT16 y; INT16 dx; INT16 dy; INT16 wMax; CHAR rgchMember[2]; } HELPWININFO16, *PHELPWININFO16, *LPHELPWININFO16; //16bit WINHELP.EXE HWND16 WINAPI FindWindow16(LPCSTR className, LPCSTR title); BOOL WINAPI wine_WinHelp16A(HWND16 hWnd, LPCSTR lpszHelp, UINT uCommand, DWORD_PTR dwData, BOOL *success_exec) { static WORD WM_WINHELP = 0; HWND hDest; LPWINHELP lpwh; HGLOBAL16 hwh; int size, dsize, nlen; DWORD mutex_count; *success_exec = FALSE; if (!WM_WINHELP) { WM_WINHELP = RegisterWindowMessageA("WM_WINHELP"); if (!WM_WINHELP) return FALSE; } hDest = HWND_32(FindWindow16("MS_WINHELP", NULL)); if (!hDest) { if (uCommand == HELP_QUIT) { *success_exec = TRUE; return TRUE; } ReleaseThunkLock(&mutex_count); if (WinExec16("winhelp.exe -x", SW_SHOWNORMAL) < 32) { RestoreThunkLock(mutex_count); ERR("can't start winhelp.exe -x ?\n"); return FALSE; } RestoreThunkLock(mutex_count); //sleep 100ms~2000ms... for (int i = 0; i < 20; i++) { hDest = HWND_32(FindWindow16("MS_WINHELP", NULL)); if (hDest) break; Sleep(100); } if (!hDest) { FIXME("did not find MS_WINHELP\n"); return FALSE; } } *success_exec = TRUE; switch (uCommand) { case HELP_CONTEXT: case HELP_SETCONTENTS: case HELP_CONTENTS: case HELP_CONTEXTPOPUP: case HELP_FORCEFILE: case HELP_HELPONHELP: case HELP_FINDER: case HELP_QUIT: dsize = 0; break; case HELP_KEY: case HELP_PARTIALKEY: case HELP_COMMAND: dsize = dwData ? strlen((LPSTR)dwData) + 1 : 0; break; case HELP_MULTIKEY: dsize = ((LPMULTIKEYHELP16)dwData)->mkSize; break; case HELP_SETWINPOS: dsize = ((LPHELPWININFO16)dwData)->wStructSize; break; default: FIXME("Unknown help command %d\n",uCommand); return FALSE; } if (lpszHelp) nlen = strlen(lpszHelp) + 1; else nlen = 0; size = sizeof(WINHELP) + nlen + dsize; hwh = GlobalAlloc16(0, size); if (hwh == NULL) return FALSE; lpwh = GlobalLock16(hwh); lpwh->size = size; lpwh->command = uCommand; lpwh->data = dwData; if (nlen) { strcpy(((char*)lpwh) + sizeof(WINHELP), lpszHelp); lpwh->ofsFilename = sizeof(WINHELP); } else { lpwh->ofsFilename = 0; } if (dsize) { memcpy(((char*)lpwh) + sizeof(WINHELP) + nlen, (LPSTR)dwData, dsize); lpwh->ofsData = sizeof(WINHELP) + nlen; } else { lpwh->ofsData = 0; } GlobalUnlock16(hwh); ReleaseThunkLock(&mutex_count); LRESULT result = SendMessageA(hDest, WM_WINHELP, (WPARAM)hWnd, (LPARAM)hwh); RestoreThunkLock(mutex_count); if (!result) { //failure //maybe winhlp32 launcher? GlobalFree16(hwh); *success_exec = FALSE; } return result; } /* WinHelp internal structure */ typedef struct { WORD size; WORD command; LONG data; LONG reserved; WORD ofsFilename; WORD ofsData; WORD ofsPath; } WINEHELP, *LPWINEHELP; /* magic number for this message: * aide means help is French ;-) * SOS means ??? */ #define WINHELP_MAGIC 0xA1DE505 /********************************************************************** * WinHelpA (USER32.@) */ BOOL WINAPI wine_WinHelp32A(HWND hWnd, LPCSTR lpHelpFile, UINT wCommand, ULONG_PTR dwData, BOOL *success_exec) { COPYDATASTRUCT cds; HWND hDest; int size, dsize, nlen, plen; char path[MAX_PATH]; char* pathend; WINEHELP* lpwh; LRESULT ret; DWORD mutex_count; hDest = FindWindowA("MS_WINHELP", NULL); *success_exec = FALSE; if (!hDest) { if (wCommand == HELP_QUIT) { *success_exec = TRUE; return TRUE; } ReleaseThunkLock(&mutex_count); if (WinExec16("winhlp32.exe -x", SW_SHOWNORMAL) < 32) { RestoreThunkLock(mutex_count); ERR("can't start winhlp32.exe -x ?\n"); return FALSE; } RestoreThunkLock(mutex_count); //sleep 100ms~2000ms... for (int i = 0; i < 20; i++) { hDest = FindWindowA("MS_WINHELP", NULL); if (hDest) break; Sleep(100); } if (!(hDest = FindWindowA("MS_WINHELP", NULL))) { FIXME("Did not find a MS_WINHELP Window\n"); return FALSE; } } *success_exec = TRUE; MULTIKEYHELPA *multikey32 = NULL; HELPWININFOA info32; switch (wCommand) { case HELP_CONTEXT: case HELP_SETCONTENTS: case HELP_CONTENTS: case HELP_CONTEXTPOPUP: case HELP_FORCEFILE: case HELP_HELPONHELP: case HELP_FINDER: case HELP_QUIT: dsize = 0; break; case HELP_KEY: case HELP_PARTIALKEY: case HELP_COMMAND: dsize = dwData ? strlen((LPSTR)dwData) + 1 : 0; break; case HELP_MULTIKEY: { //this conversion is not tested. MESSAGE("HELP_MULTIKEY\n"); LPMULTIKEYHELP16 multikey16 = (LPMULTIKEYHELP16)dwData; size = multikey16->mkSize + (sizeof(MULTIKEYHELPA) - sizeof(MULTIKEYHELP16)); multikey32 = HeapAlloc(GetProcessHeap(), 0, size); multikey32->mkKeylist = multikey16->mkKeylist; multikey32->mkSize = size; memcpy(&multikey32->szKeyphrase, multikey16->szKeyphrase, multikey16->mkSize - offsetof(MULTIKEYHELP16, szKeyphrase)); dwData = multikey32; dsize = size; } break; case HELP_SETWINPOS: { //this conversion is not tested. MESSAGE("HELP_SETWINPOS\n"); LPHELPWININFO16 info16 = (LPHELPWININFO16)dwData; info32.dx = info16->dx; info32.dy = info16->dy; info32.x = info16->x; info32.y = info16->y; info32.wStructSize = info16->wStructSize - (sizeof(HELPWININFOA) - sizeof(HELPWININFO16)); info32.rgchMember[0] = info16->rgchMember[0]; info32.rgchMember[2] = info16->rgchMember[1]; dwData = &info32; dsize = ((LPHELPWININFOA)dwData)->wStructSize; } break; default: FIXME("Unknown help command %d\n", wCommand); return FALSE; } if (lpHelpFile) { GetModuleFileName16(NULL, path, MAX_PATH); pathend = strrchr(path, '\\'); if (pathend) { *pathend = '\0'; plen = strlen(path) + 1; } else plen = 0; nlen = strlen(lpHelpFile) + 1; } else { plen = 0; nlen = 0; } size = sizeof(WINEHELP) + nlen + dsize + plen; lpwh = HeapAlloc(GetProcessHeap(), 0, size); if (!lpwh) return FALSE; cds.dwData = WINHELP_MAGIC; cds.cbData = size; cds.lpData = (void*)lpwh; lpwh->size = size; lpwh->command = wCommand; lpwh->data = dwData; if (nlen) { strcpy(((char*)lpwh) + sizeof(WINEHELP), lpHelpFile); lpwh->ofsFilename = sizeof(WINEHELP); } else lpwh->ofsFilename = 0; if (dsize) { memcpy(((char*)lpwh) + sizeof(WINEHELP) + nlen, (LPSTR)dwData, dsize); lpwh->ofsData = sizeof(WINEHELP) + nlen; } else lpwh->ofsData = 0; if (plen) { strcpy(((char*)lpwh) + sizeof(WINEHELP) + nlen + dsize, path); lpwh->ofsPath = sizeof(WINEHELP) + nlen + dsize; } else lpwh->ofsPath = 0; TRACE("Sending[%u]: cmd=%u data=%08x fn=%s\n", lpwh->size, lpwh->command, lpwh->data, lpwh->ofsFilename ? (LPSTR)lpwh + lpwh->ofsFilename : ""); ReleaseThunkLock(&mutex_count); ret = SendMessageA(hDest, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&cds); RestoreThunkLock(mutex_count); HeapFree(GetProcessHeap(), 0, lpwh); if (multikey32) HeapFree(GetProcessHeap(), 0, multikey32); return ret; } ================================================ FILE: ver/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(ver SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ver.def ver.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(ver.dll16 ver) target_link_libraries(ver libwine winecrt0 krnl386 version.lib) set_target_properties(ver PROPERTIES SUFFIX ".dll16") ================================================ FILE: ver/Makefile.in ================================================ MODULE = ver.dll16 IMPORTS = version lz32 EXTRADLLFLAGS = -m16 -Wb,--main-module,version.dll C_SRCS = version.c ================================================ FILE: ver/ver.def ================================================ ; File generated automatically from ..\ver\ver.dll16.spec; do not edit! LIBRARY ver.dll16 EXPORTS _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE ================================================ FILE: ver/ver.dll16.spec ================================================ #1 DLLENTRYPOINT 2 pascal GetFileResourceSize(str str str ptr) GetFileResourceSize16 3 pascal GetFileResource(str str str long long ptr) GetFileResource16 6 pascal GetFileVersionInfoSize(str ptr) GetFileVersionInfoSize16 7 pascal GetFileVersionInfo(str long long ptr) GetFileVersionInfo16 8 pascal VerFindFile(word str str str ptr ptr ptr ptr) VerFindFile16 9 pascal VerInstallFile(word str str str str str ptr ptr) VerInstallFile16 10 pascal VerLanguageName(word ptr word) VerLanguageName16 11 pascal VerQueryValue(segptr str ptr ptr) VerQueryValue16 20 stub GETFILEVERSIONINFORAW #21 VERFTHK_THUNKDATA16 #22 VERTHKSL_THUNKDATA16 ================================================ FILE: ver/ver.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj ver {7C04956D-FEBE-410F-ABB1-945695CDDFE5} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; version.lib;lz32.lib;%(AdditionalDependencies) true ver.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false ver.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; version.lib;lz32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" VER > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" VER > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: ver/version.c ================================================ /* * Implementation of VER.DLL * * Copyright 1996, 1997 Marcus Meissner * Copyright 1997 David Cuthbert * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define NONAMELESSUNION #define NONAMELESSSTRUCT #include #include #include #include #include "windef.h" #include "wine/winbase16.h" #include "winuser.h" #include "winver.h" #include "lzexpand.h" #include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ver); #ifndef SEEK_SET #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #endif #ifdef _MSC_VER #define strncasecmp _strnicmp #endif /* get dll search path */ char *krnl386_get_search_path(void); /********************************************************************** * find_entry_by_id * * Find an entry by id in a resource directory * Copied from loader/pe_resource.c */ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DIRECTORY *dir, WORD id, const void *root ) { const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry; int min, max, pos; entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1); min = dir->NumberOfNamedEntries; max = min + dir->NumberOfIdEntries - 1; while (min <= max) { pos = (min + max) / 2; if (entry[pos].u.Id == id) return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory); if (entry[pos].u.Id > id) max = pos - 1; else min = pos + 1; } return NULL; } /********************************************************************** * find_entry_default * * Find a default entry in a resource directory * Copied from loader/pe_resource.c */ static const IMAGE_RESOURCE_DIRECTORY *find_entry_default( const IMAGE_RESOURCE_DIRECTORY *dir, const void *root ) { const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry; entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1); return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s2.OffsetToDirectory); } /********************************************************************** * find_entry_by_name * * Find an entry by name in a resource directory * Copied from loader/pe_resource.c */ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_name( const IMAGE_RESOURCE_DIRECTORY *dir, LPCSTR name, const void *root ) { const IMAGE_RESOURCE_DIRECTORY *ret = NULL; LPWSTR nameW; DWORD namelen; if (!HIWORD(name)) return find_entry_by_id( dir, LOWORD(name), root ); if (name[0] == '#') { return find_entry_by_id( dir, atoi(name+1), root ); } namelen = MultiByteToWideChar( CP_ACP, 0, name, -1, NULL, 0 ); if ((nameW = HeapAlloc( GetProcessHeap(), 0, namelen * sizeof(WCHAR) ))) { const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry; const IMAGE_RESOURCE_DIR_STRING_U *str; int min, max, res, pos; MultiByteToWideChar( CP_ACP, 0, name, -1, nameW, namelen ); namelen--; /* remove terminating null */ entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1); min = 0; max = dir->NumberOfNamedEntries - 1; while (min <= max) { pos = (min + max) / 2; str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const char *)root + entry[pos].u.s.NameOffset); res = strncmpiW( nameW, str->NameString, str->Length ); if (!res && namelen == str->Length) { ret = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory); break; } if (res < 0) max = pos - 1; else min = pos + 1; } HeapFree( GetProcessHeap(), 0, nameW ); } return ret; } /*********************************************************************** * read_xx_header [internal] */ static int read_xx_header( HFILE lzfd ) { IMAGE_DOS_HEADER mzh; char magic[3]; LZSeek( lzfd, 0, SEEK_SET ); if ( sizeof(mzh) != LZRead( lzfd, (LPSTR)&mzh, sizeof(mzh) ) ) return 0; if ( mzh.e_magic != IMAGE_DOS_SIGNATURE ) return 0; LZSeek( lzfd, mzh.e_lfanew, SEEK_SET ); if ( 2 != LZRead( lzfd, magic, 2 ) ) return 0; LZSeek( lzfd, mzh.e_lfanew, SEEK_SET ); if ( magic[0] == 'N' && magic[1] == 'E' ) return IMAGE_OS2_SIGNATURE; if ( magic[0] == 'P' && magic[1] == 'E' ) return IMAGE_NT_SIGNATURE; if ( magic[0] == 'L' && magic[1] == 'E' ) return IMAGE_VXD_SIGNATURE; magic[2] = '\0'; WARN("Can't handle %s files.\n", magic ); return 0; } /*********************************************************************** * find_ne_resource [internal] */ static BOOL find_ne_resource( HFILE lzfd, LPCSTR typeid, LPCSTR resid, DWORD *resLen, DWORD *resOff ) { IMAGE_OS2_HEADER nehd; NE_TYPEINFO *typeInfo; NE_NAMEINFO *nameInfo; DWORD nehdoffset; LPBYTE resTab; DWORD resTabSize; int count; /* Read in NE header */ nehdoffset = LZSeek( lzfd, 0, SEEK_CUR ); if ( sizeof(nehd) != LZRead( lzfd, (LPSTR)&nehd, sizeof(nehd) ) ) return FALSE; resTabSize = nehd.ne_restab - nehd.ne_rsrctab; if ( !resTabSize ) { TRACE("No resources in NE dll\n" ); return FALSE; } /* Read in resource table */ resTab = HeapAlloc( GetProcessHeap(), 0, resTabSize ); if ( !resTab ) return FALSE; LZSeek( lzfd, nehd.ne_rsrctab + nehdoffset, SEEK_SET ); if ( resTabSize != LZRead( lzfd, (char*)resTab, resTabSize ) ) { HeapFree( GetProcessHeap(), 0, resTab ); return FALSE; } /* Find resource */ typeInfo = (NE_TYPEINFO *)(resTab + 2); if (HIWORD(typeid) != 0) /* named type */ { BYTE len = strlen( typeid ); while (typeInfo->type_id) { if (!(typeInfo->type_id & 0x8000)) { BYTE *p = resTab + typeInfo->type_id; if ((*p == len) && !strncasecmp( (char*)p+1, typeid, len )) goto found_type; } typeInfo = (NE_TYPEINFO *)((char *)(typeInfo + 1) + typeInfo->count * sizeof(NE_NAMEINFO)); } } else /* numeric type id */ { WORD id = LOWORD(typeid) | 0x8000; while (typeInfo->type_id) { if (typeInfo->type_id == id) goto found_type; typeInfo = (NE_TYPEINFO *)((char *)(typeInfo + 1) + typeInfo->count * sizeof(NE_NAMEINFO)); } } TRACE("No typeid entry found for %p\n", typeid ); HeapFree( GetProcessHeap(), 0, resTab ); return FALSE; found_type: nameInfo = (NE_NAMEINFO *)(typeInfo + 1); if (HIWORD(resid) != 0) /* named resource */ { BYTE len = strlen( resid ); for (count = typeInfo->count; count > 0; count--, nameInfo++) { BYTE *p = resTab + nameInfo->id; if (nameInfo->id & 0x8000) continue; if ((*p == len) && !strncasecmp( (char*)p+1, resid, len )) goto found_name; } } else /* numeric resource id */ { WORD id = LOWORD(resid) | 0x8000; for (count = typeInfo->count; count > 0; count--, nameInfo++) if (nameInfo->id == id) goto found_name; } TRACE("No resid entry found for %p\n", typeid ); HeapFree( GetProcessHeap(), 0, resTab ); return FALSE; found_name: /* Return resource data */ if ( resLen ) *resLen = nameInfo->length << *(WORD *)resTab; if ( resOff ) *resOff = nameInfo->offset << *(WORD *)resTab; HeapFree( GetProcessHeap(), 0, resTab ); return TRUE; } /*********************************************************************** * find_pe_resource [internal] */ static BOOL find_pe_resource( HFILE lzfd, LPCSTR typeid, LPCSTR resid, DWORD *resLen, DWORD *resOff ) { IMAGE_NT_HEADERS pehd; DWORD pehdoffset; PIMAGE_DATA_DIRECTORY resDataDir; PIMAGE_SECTION_HEADER sections; LPBYTE resSection; DWORD resSectionSize; const void *resDir; const IMAGE_RESOURCE_DIRECTORY *resPtr; const IMAGE_RESOURCE_DATA_ENTRY *resData; int i, nSections; BOOL ret = FALSE; /* Read in PE header */ pehdoffset = LZSeek( lzfd, 0, SEEK_CUR ); if ( sizeof(pehd) != LZRead( lzfd, (LPSTR)&pehd, sizeof(pehd) ) ) return FALSE; resDataDir = pehd.OptionalHeader.DataDirectory+IMAGE_DIRECTORY_ENTRY_RESOURCE; if ( !resDataDir->Size ) { TRACE("No resources in PE dll\n" ); return FALSE; } /* Read in section table */ nSections = pehd.FileHeader.NumberOfSections; sections = HeapAlloc( GetProcessHeap(), 0, nSections * sizeof(IMAGE_SECTION_HEADER) ); if ( !sections ) return FALSE; LZSeek( lzfd, pehdoffset + sizeof(DWORD) + /* Signature */ sizeof(IMAGE_FILE_HEADER) + pehd.FileHeader.SizeOfOptionalHeader, SEEK_SET ); if ( nSections * sizeof(IMAGE_SECTION_HEADER) != LZRead( lzfd, (LPSTR)sections, nSections * sizeof(IMAGE_SECTION_HEADER) ) ) { HeapFree( GetProcessHeap(), 0, sections ); return FALSE; } /* Find resource section */ for ( i = 0; i < nSections; i++ ) if ( resDataDir->VirtualAddress >= sections[i].VirtualAddress && resDataDir->VirtualAddress < sections[i].VirtualAddress + sections[i].SizeOfRawData ) break; if ( i == nSections ) { HeapFree( GetProcessHeap(), 0, sections ); TRACE("Couldn't find resource section\n" ); return FALSE; } /* Read in resource section */ resSectionSize = sections[i].SizeOfRawData; resSection = HeapAlloc( GetProcessHeap(), 0, resSectionSize ); if ( !resSection ) { HeapFree( GetProcessHeap(), 0, sections ); return FALSE; } LZSeek( lzfd, sections[i].PointerToRawData, SEEK_SET ); if ( resSectionSize != LZRead( lzfd, (char*)resSection, resSectionSize ) ) goto done; /* Find resource */ resDir = resSection + (resDataDir->VirtualAddress - sections[i].VirtualAddress); resPtr = resDir; resPtr = find_entry_by_name( resPtr, typeid, resDir ); if ( !resPtr ) { TRACE("No typeid entry found for %p\n", typeid ); goto done; } resPtr = find_entry_by_name( resPtr, resid, resDir ); if ( !resPtr ) { TRACE("No resid entry found for %p\n", resid ); goto done; } resPtr = find_entry_default( resPtr, resDir ); if ( !resPtr ) { TRACE("No default language entry found for %p\n", resid ); goto done; } /* Find resource data section */ resData = (const IMAGE_RESOURCE_DATA_ENTRY*)resPtr; for ( i = 0; i < nSections; i++ ) if ( resData->OffsetToData >= sections[i].VirtualAddress && resData->OffsetToData < sections[i].VirtualAddress + sections[i].SizeOfRawData ) break; if ( i == nSections ) { TRACE("Couldn't find resource data section\n" ); goto done; } /* Return resource data */ if ( resLen ) *resLen = resData->Size; if ( resOff ) *resOff = resData->OffsetToData - sections[i].VirtualAddress + sections[i].PointerToRawData; ret = TRUE; done: HeapFree( GetProcessHeap(), 0, resSection ); HeapFree( GetProcessHeap(), 0, sections ); return ret; } /*********************************************************************** * find_vxdver_resource [internal] */ static BOOL find_vxdver_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff ) { IMAGE_VXD_HEADER lehd; DWORD lehdoffset; int count; /* Read in LE header */ lehdoffset = LZSeek( lzfd, 0, SEEK_CUR ); if ( sizeof(lehd) != LZRead( lzfd, (LPSTR)&lehd, sizeof(lehd) ) ) return FALSE; if ( !lehd.e32_winreslen ) { TRACE("No resources in vxd\n" ); return FALSE; } LZSeek( lzfd, lehd.e32_winresoff + 8, SEEK_SET ); if ( resLen ) LZRead( lzfd, (LPSTR *)resLen, 4 ); if ( resOff ) *resOff = lehd.e32_winresoff + 12; return TRUE; } /*********************************************************************** * find_resource [internal] */ static DWORD find_resource( HFILE lzfd, LPCSTR type, LPCSTR id, DWORD *reslen, DWORD *offset ) { DWORD magic = read_xx_header( lzfd ); switch (magic) { case IMAGE_OS2_SIGNATURE: if (!find_ne_resource( lzfd, type, id, reslen, offset )) magic = 0; break; case IMAGE_NT_SIGNATURE: if (!find_pe_resource( lzfd, type, id, reslen, offset )) magic = 0; break; case IMAGE_VXD_SIGNATURE: if ((type != RT_VERSION) || !find_vxdver_resource( lzfd, reslen, offset )) magic = 0; break; } return magic; } LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len); char *krnl386_get_search_path(void); BOOL findfile(const char *file, char *out, int size) { const char *path = krnl386_get_search_path(); RedirectSystemDir(file, out, size); if (GetFileAttributesA(out) != INVALID_FILE_ATTRIBUTES) return TRUE; if (SearchPathA(path, file, NULL, size, out, NULL)) return TRUE; HeapFree(GetProcessHeap(), 0, path); return FALSE; } LPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin); /************************************************************************* * GetFileResourceSize [VER.2] */ DWORD WINAPI GetFileResourceSize16( LPCSTR lpszFileName, LPCSTR lpszResType, LPCSTR lpszResId, LPDWORD lpdwFileOffset ) { HFILE lzfd; OFSTRUCT ofs; DWORD reslen = 0; char buf[MAX_PATH]; TRACE("(%s,type=%p,id=%p,off=%p)\n", debugstr_a(lpszFileName), lpszResType, lpszResId, lpszResId ); lpszFileName = krnl386_search_executable_file(lpszFileName, buf, MAX_PATH, TRUE); lzfd = LZOpenFileA( (LPSTR)lpszFileName, &ofs, OF_READ ); if (lzfd < 0) { char path[MAX_PATH]; if (findfile( lpszFileName, path, MAX_PATH )) lzfd = LZOpenFileA( (LPSTR)path, &ofs, OF_READ ); } if (lzfd >= 0) { if (!find_resource( lzfd, lpszResType, lpszResId, &reslen, lpdwFileOffset )) reslen = 0; LZClose( lzfd ); } return reslen; } /************************************************************************* * GetFileResource [VER.3] */ DWORD WINAPI GetFileResource16( LPCSTR lpszFileName, LPCSTR lpszResType, LPCSTR lpszResId, DWORD dwFileOffset, DWORD dwResLen, LPVOID lpvData ) { HFILE lzfd; OFSTRUCT ofs; DWORD reslen = dwResLen; char buf[MAX_PATH]; TRACE("(%s,type=%p,id=%p,off=%d,len=%d,data=%p)\n", debugstr_a(lpszFileName), lpszResType, lpszResId, dwFileOffset, dwResLen, lpvData ); lpszFileName = krnl386_search_executable_file(lpszFileName, buf, MAX_PATH, TRUE); lzfd = LZOpenFileA( (LPSTR)lpszFileName, &ofs, OF_READ ); if (lzfd < 0) { char path[MAX_PATH]; if (findfile( lpszFileName, path, MAX_PATH )) lzfd = LZOpenFileA( (LPSTR)path, &ofs, OF_READ ); } if ( lzfd < 0 ) return 0; if ( !dwFileOffset ) { if (!find_resource( lzfd, lpszResType, lpszResId, &reslen, &dwFileOffset )) { LZClose( lzfd ); return 0; } } LZSeek( lzfd, dwFileOffset, SEEK_SET ); reslen = LZRead( lzfd, lpvData, min( reslen, dwResLen ) ); LZClose( lzfd ); return reslen; } /************************************************************************* * GetFileVersionInfoSize [VER.6] */ DWORD WINAPI GetFileVersionInfoSize16( LPCSTR lpszFileName, LPDWORD lpdwHandle ) { BOOL ret; TRACE("(%s, %p)\n", debugstr_a(lpszFileName), lpdwHandle ); ret = GetFileResourceSize16( lpszFileName, VS_FILE_INFO, VS_VERSION_INFO, lpdwHandle ); if (!ret) { char path[MAX_PATH]; if (findfile( lpszFileName, path, MAX_PATH )) ret = GetFileResourceSize16( lpszFileName, VS_FILE_INFO, VS_VERSION_INFO, lpdwHandle ); } if (!ret) *lpdwHandle = NULL; return ret; } /************************************************************************* * GetFileVersionInfo [VER.7] */ DWORD WINAPI GetFileVersionInfo16( LPCSTR lpszFileName, DWORD handle, DWORD cbBuf, LPVOID lpvData ) { DWORD ret, size; char *buf; TRACE("(%s, %08x, %d, %p)\n", debugstr_a(lpszFileName), handle, cbBuf, lpvData ); ret = GetFileResource16( lpszFileName, VS_FILE_INFO, VS_VERSION_INFO, NULL, cbBuf, lpvData ); if (!ret) { char path[MAX_PATH]; if (findfile( lpszFileName, path, MAX_PATH )) ret = GetFileResource16( lpszFileName, VS_FILE_INFO, VS_VERSION_INFO, NULL, cbBuf, lpvData ); } return ret; } /************************************************************************* * VerFindFile [VER.8] */ DWORD WINAPI VerFindFile16( UINT16 flags, LPSTR lpszFilename, LPSTR lpszWinDir, LPSTR lpszAppDir, LPSTR lpszCurDir, UINT16 *lpuCurDirLen, LPSTR lpszDestDir, UINT16 *lpuDestDirLen ) { UINT curDirLen, destDirLen; UINT *pcurDirLen = NULL, *pdestDirLen = NULL; DWORD retv; char buf[MAX_PATH]; char systemdir[MAX_PATH]; lpszFilename = krnl386_search_executable_file(lpszFilename, buf, MAX_PATH, TRUE); if (lpuCurDirLen) { curDirLen = *lpuCurDirLen; pcurDirLen = &curDirLen; } if (lpuDestDirLen) { destDirLen = *lpuDestDirLen; pdestDirLen = &destDirLen; } if (flags & VFFF_ISSHAREDFILE) { RedirectSystemDir("c:\\windows\\system", systemdir, MAX_PATH); lpszAppDir = systemdir; flags &= ~VFFF_ISSHAREDFILE; } retv = VerFindFileA( flags, lpszFilename, lpszWinDir, lpszAppDir, lpszCurDir, pcurDirLen, lpszDestDir, pdestDirLen ); if (lpuCurDirLen) *lpuCurDirLen = (UINT16)curDirLen; if (lpuDestDirLen) *lpuDestDirLen = (UINT16)destDirLen; return retv; } /************************************************************************* * VerInstallFile [VER.9] */ DWORD WINAPI VerInstallFile16( UINT16 flags, LPSTR lpszSrcFilename, LPSTR lpszDestFilename, LPSTR lpszSrcDir, LPSTR lpszDestDir, LPSTR lpszCurDir, LPSTR lpszTmpFile, UINT16 *lpwTmpFileLen ) { UINT filelen = *lpwTmpFileLen; DWORD retv = VerInstallFileA( flags, lpszSrcFilename, lpszDestFilename, lpszSrcDir, lpszDestDir, lpszCurDir, lpszTmpFile, &filelen); *lpwTmpFileLen = (UINT16)filelen; return retv; } /************************************************************************* * VerLanguageName [VER.10] */ DWORD WINAPI VerLanguageName16( UINT16 uLang, LPSTR lpszLang, UINT16 cbLang ) { return VerLanguageNameA( uLang, lpszLang, cbLang ); } /************************************************************************* * VerQueryValue [VER.11] */ DWORD WINAPI VerQueryValue16( SEGPTR spvBlock, LPSTR lpszSubBlock, SEGPTR *lpspBuffer, UINT16 *lpcb ) { LPVOID lpvBlock = MapSL( spvBlock ); LPVOID buffer = lpvBlock; UINT buflen; DWORD retv; TRACE("(%p, %s, %p, %p)\n", lpvBlock, debugstr_a(lpszSubBlock), lpspBuffer, lpcb ); retv = VerQueryValueA( lpvBlock, lpszSubBlock, &buffer, &buflen ); if ( !retv ) return FALSE; if ( OFFSETOF( spvBlock ) + ((char *) buffer - (char *) lpvBlock) >= 0x10000 ) { FIXME("offset %08X too large relative to %04X:%04X\n", (char *) buffer - (char *) lpvBlock, SELECTOROF( spvBlock ), OFFSETOF( spvBlock ) ); return FALSE; } if (lpcb) *lpcb = buflen; *lpspBuffer = (SEGPTR) ((char *) spvBlock + ((char *) buffer - (char *) lpvBlock)); return retv; } ================================================ FILE: vm86/CMakeLists.txt ================================================ add_library(vm86 SHARED msdos.cpp vm86.def) include_directories(../wine) add_definitions(-D__i386__ -DHAS_I486 -DSUPPORT_FPU -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Uinline -DPSAPI_VERSION=1) if (NOT(MSVC)) string(APPEND CMAKE_CXX_FLAGS " -fpermissive -Wl,--enable-stdcall-fixup ") endif() target_link_libraries(vm86 libwine winecrt0 dbghelp.lib Psapi.lib) set_target_properties(vm86 PROPERTIES PREFIX "") ================================================ FILE: vm86/COPYING.txt ================================================ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ================================================ FILE: vm86/mame/emu/cpu/i386/cycles.h ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett #pragma once #ifndef __CYCLES_H__ #define __CYCLES_H__ enum X86_CYCLES { CYCLES_MOV_REG_REG, CYCLES_MOV_REG_MEM, CYCLES_MOV_MEM_REG, CYCLES_MOV_IMM_REG, CYCLES_MOV_IMM_MEM, CYCLES_MOV_ACC_MEM, CYCLES_MOV_MEM_ACC, CYCLES_MOV_REG_SREG, CYCLES_MOV_MEM_SREG, CYCLES_MOV_SREG_REG, CYCLES_MOV_SREG_MEM, CYCLES_MOVSX_REG_REG, CYCLES_MOVSX_MEM_REG, CYCLES_MOVZX_REG_REG, CYCLES_MOVZX_MEM_REG, CYCLES_PUSH_RM, CYCLES_PUSH_REG_SHORT, CYCLES_PUSH_SREG, CYCLES_PUSH_IMM, CYCLES_PUSHA, CYCLES_POP_RM, CYCLES_POP_REG_SHORT, CYCLES_POP_SREG, CYCLES_POPA, CYCLES_XCHG_REG_REG, CYCLES_XCHG_REG_MEM, CYCLES_IN, CYCLES_IN_VAR, CYCLES_OUT, CYCLES_OUT_VAR, CYCLES_LEA, CYCLES_LDS, CYCLES_LES, CYCLES_LFS, CYCLES_LGS, CYCLES_LSS, CYCLES_CLC, CYCLES_CLD, CYCLES_CLI, CYCLES_CLTS, CYCLES_CMC, CYCLES_LAHF, CYCLES_POPF, CYCLES_PUSHF, CYCLES_SAHF, CYCLES_STC, CYCLES_STD, CYCLES_STI, CYCLES_ALU_REG_REG, CYCLES_ALU_REG_MEM, CYCLES_ALU_MEM_REG, CYCLES_ALU_IMM_REG, CYCLES_ALU_IMM_MEM, CYCLES_ALU_IMM_ACC, CYCLES_INC_REG, CYCLES_INC_MEM, CYCLES_DEC_REG, CYCLES_DEC_MEM, CYCLES_CMP_REG_REG, CYCLES_CMP_REG_MEM, CYCLES_CMP_MEM_REG, CYCLES_CMP_IMM_REG, CYCLES_CMP_IMM_MEM, CYCLES_CMP_IMM_ACC, CYCLES_TEST_REG_REG, CYCLES_TEST_REG_MEM, CYCLES_TEST_IMM_REG, CYCLES_TEST_IMM_MEM, CYCLES_TEST_IMM_ACC, CYCLES_NEG_REG, CYCLES_NEG_MEM, CYCLES_AAA, CYCLES_AAS, CYCLES_DAA, CYCLES_DAS, CYCLES_MUL8_ACC_REG, CYCLES_MUL8_ACC_MEM, CYCLES_MUL16_ACC_REG, CYCLES_MUL16_ACC_MEM, CYCLES_MUL32_ACC_REG, CYCLES_MUL32_ACC_MEM, CYCLES_IMUL8_ACC_REG, CYCLES_IMUL8_ACC_MEM, CYCLES_IMUL16_ACC_REG, CYCLES_IMUL16_ACC_MEM, CYCLES_IMUL32_ACC_REG, CYCLES_IMUL32_ACC_MEM, CYCLES_IMUL8_REG_REG, CYCLES_IMUL8_REG_MEM, CYCLES_IMUL16_REG_REG, CYCLES_IMUL16_REG_MEM, CYCLES_IMUL32_REG_REG, CYCLES_IMUL32_REG_MEM, CYCLES_IMUL16_REG_IMM_REG, CYCLES_IMUL16_MEM_IMM_REG, CYCLES_IMUL32_REG_IMM_REG, CYCLES_IMUL32_MEM_IMM_REG, CYCLES_DIV8_ACC_REG, CYCLES_DIV8_ACC_MEM, CYCLES_DIV16_ACC_REG, CYCLES_DIV16_ACC_MEM, CYCLES_DIV32_ACC_REG, CYCLES_DIV32_ACC_MEM, CYCLES_IDIV8_ACC_REG, CYCLES_IDIV8_ACC_MEM, CYCLES_IDIV16_ACC_REG, CYCLES_IDIV16_ACC_MEM, CYCLES_IDIV32_ACC_REG, CYCLES_IDIV32_ACC_MEM, CYCLES_AAD, CYCLES_AAM, CYCLES_CBW, CYCLES_CWD, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM, CYCLES_SHLD_REG, CYCLES_SHLD_MEM, CYCLES_SHRD_REG, CYCLES_SHRD_MEM, CYCLES_NOT_REG, CYCLES_NOT_MEM, CYCLES_CMPS, CYCLES_INS, CYCLES_LODS, CYCLES_MOVS, CYCLES_OUTS, CYCLES_SCAS, CYCLES_STOS, CYCLES_XLAT, CYCLES_REP_CMPS_BASE, CYCLES_REP_INS_BASE, CYCLES_REP_LODS_BASE, CYCLES_REP_MOVS_BASE, CYCLES_REP_OUTS_BASE, CYCLES_REP_SCAS_BASE, CYCLES_REP_STOS_BASE, CYCLES_REP_CMPS, CYCLES_REP_INS, CYCLES_REP_LODS, CYCLES_REP_MOVS, CYCLES_REP_OUTS, CYCLES_REP_SCAS, CYCLES_REP_STOS, CYCLES_BSF_BASE, CYCLES_BSF, CYCLES_BSR_BASE, CYCLES_BSR, CYCLES_BT_IMM_REG, CYCLES_BT_IMM_MEM, CYCLES_BT_REG_REG, CYCLES_BT_REG_MEM, CYCLES_BTC_IMM_REG, CYCLES_BTC_IMM_MEM, CYCLES_BTC_REG_REG, CYCLES_BTC_REG_MEM, CYCLES_BTR_IMM_REG, CYCLES_BTR_IMM_MEM, CYCLES_BTR_REG_REG, CYCLES_BTR_REG_MEM, CYCLES_BTS_IMM_REG, CYCLES_BTS_IMM_MEM, CYCLES_BTS_REG_REG, CYCLES_BTS_REG_MEM, CYCLES_CALL, // E8 CYCLES_CALL_REG, // FF /2 CYCLES_CALL_MEM, // FF /2 CYCLES_CALL_INTERSEG, // 9A CYCLES_CALL_REG_INTERSEG, // FF /3 CYCLES_CALL_MEM_INTERSEG, // FF /3 CYCLES_JMP_SHORT, // EB CYCLES_JMP, // E9 CYCLES_JMP_REG, // FF /4 CYCLES_JMP_MEM, // FF /4 CYCLES_JMP_INTERSEG, // EA CYCLES_JMP_REG_INTERSEG, // FF /5 CYCLES_JMP_MEM_INTERSEG, // FF /5 CYCLES_RET, // C3 CYCLES_RET_IMM, // C2 CYCLES_RET_INTERSEG, // CB CYCLES_RET_IMM_INTERSEG, // CA CYCLES_JCC_DISP8, CYCLES_JCC_FULL_DISP, CYCLES_JCC_DISP8_NOBRANCH, CYCLES_JCC_FULL_DISP_NOBRANCH, CYCLES_JCXZ, CYCLES_JCXZ_NOBRANCH, CYCLES_LOOP, CYCLES_LOOPZ, CYCLES_LOOPNZ, CYCLES_SETCC_REG, CYCLES_SETCC_MEM, CYCLES_ENTER, CYCLES_LEAVE, CYCLES_INT, CYCLES_INT3, CYCLES_INTO_OF1, CYCLES_INTO_OF0, CYCLES_BOUND_IN_RANGE, CYCLES_BOUND_OUT_RANGE, CYCLES_IRET, CYCLES_HLT, CYCLES_MOV_REG_CR0, CYCLES_MOV_REG_CR2, CYCLES_MOV_REG_CR3, CYCLES_MOV_CR_REG, CYCLES_MOV_REG_DR0_3, CYCLES_MOV_REG_DR6_7, CYCLES_MOV_DR6_7_REG, CYCLES_MOV_DR0_3_REG, CYCLES_MOV_REG_TR6_7, CYCLES_MOV_TR6_7_REG, CYCLES_NOP, CYCLES_WAIT, CYCLES_ARPL_REG, CYCLES_ARPL_MEM, CYCLES_LAR_REG, CYCLES_LAR_MEM, CYCLES_LGDT, CYCLES_LIDT, CYCLES_LLDT_REG, CYCLES_LLDT_MEM, CYCLES_LMSW_REG, CYCLES_LMSW_MEM, CYCLES_LSL_REG, CYCLES_LSL_MEM, CYCLES_LTR_REG, CYCLES_LTR_MEM, CYCLES_SGDT, CYCLES_SIDT, CYCLES_SLDT_REG, CYCLES_SLDT_MEM, CYCLES_SMSW_REG, CYCLES_SMSW_MEM, CYCLES_STR_REG, CYCLES_STR_MEM, CYCLES_VERR_REG, CYCLES_VERR_MEM, CYCLES_VERW_REG, CYCLES_VERW_MEM, CYCLES_LOCK, CYCLES_BSWAP, CYCLES_CMPXCHG8B, CYCLES_CMPXCHG, CYCLES_CPUID, CYCLES_CPUID_EAX1, CYCLES_INVD, CYCLES_XADD, CYCLES_RDTSC, CYCLES_RSM, CYCLES_RDMSR, CYCLES_FABS, CYCLES_FADD, CYCLES_FBLD, CYCLES_FBSTP, CYCLES_FCHS, CYCLES_FCLEX, CYCLES_FCOM, CYCLES_FCOS, CYCLES_FDECSTP, CYCLES_FDISI, CYCLES_FDIV, CYCLES_FDIVR, CYCLES_FENI, CYCLES_FFREE, CYCLES_FIADD, CYCLES_FICOM, CYCLES_FIDIV, CYCLES_FILD, CYCLES_FIMUL, CYCLES_FINCSTP, CYCLES_FINIT, CYCLES_FIST, CYCLES_FISUB, CYCLES_FLD, CYCLES_FLDZ, CYCLES_FLD1, CYCLES_FLDL2E, CYCLES_FLDL2T, CYCLES_FLDLG2, CYCLES_FLDLN2, CYCLES_FLDPI, CYCLES_FLDCW, CYCLES_FLDENV, CYCLES_FMUL, CYCLES_FNOP, CYCLES_FPATAN, CYCLES_FPREM, CYCLES_FPREM1, CYCLES_FPTAN, CYCLES_FRNDINT, CYCLES_FRSTOR, CYCLES_FSAVE, CYCLES_FSCALE, CYCLES_FSETPM, CYCLES_FSIN, CYCLES_FSINCOS, CYCLES_FSQRT, CYCLES_FST, CYCLES_FSTCW, CYCLES_FSTENV, CYCLES_FSTSW, CYCLES_FSUB, CYCLES_FSUBR, CYCLES_FTST, CYCLES_FUCOM, CYCLES_FXAM, CYCLES_FXCH, CYCLES_FXTRACT, CYCLES_FYL2X, CYCLES_FYL2XPI, CYCLES_CMPXCHG_REG_REG_T, CYCLES_CMPXCHG_REG_REG_F, CYCLES_CMPXCHG_REG_MEM_T, CYCLES_CMPXCHG_REG_MEM_F, CYCLES_XADD_REG_REG, CYCLES_XADD_REG_MEM, CYCLES_NUM_OPCODES }; #define X86_NUM_CPUS 4 #define CPU_CYCLES_I386 0 #define CPU_CYCLES_I486 1 #define CPU_CYCLES_PENTIUM 2 #define CPU_CYCLES_MEDIAGX 3 struct X86_CYCLE_TABLE { X86_CYCLES op; UINT8 cpu_cycles[X86_NUM_CPUS][2]; }; static const X86_CYCLE_TABLE x86_cycle_table[] = { // opcode rm/pmode // i386 i486 pentium mediagx { CYCLES_MOV_REG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_REG_MEM, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_MEM_REG, { { 4, 4 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_IMM_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_IMM_MEM, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_ACC_MEM, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_MEM_ACC, { { 4, 4 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_REG_SREG, { { 2, 18 }, { 3, 3 }, { 2, 2 }, { 1, 6 } } }, { CYCLES_MOV_MEM_SREG, { { 5, 19 }, { 9, 9 }, { 3, 3 }, { 1, 6 } } }, { CYCLES_MOV_SREG_REG, { { 2, 2 }, { 3, 3 }, { 1, 1 }, { 1, 6 } } }, { CYCLES_MOV_SREG_MEM, { { 2, 2 }, { 3, 3 }, { 1, 1 }, { 1, 6 } } }, { CYCLES_MOVSX_REG_REG, { { 3, 3 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_MOVSX_MEM_REG, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_MOVZX_REG_REG, { { 3, 3 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_MOVZX_MEM_REG, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_PUSH_RM, { { 5, 5 }, { 4, 4 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_PUSH_REG_SHORT, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_PUSH_SREG, { { 2, 2 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_PUSH_IMM, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_PUSHA, { { 18, 18 }, { 11, 11 }, { 5, 5 }, { 11, 11 } } }, { CYCLES_POP_RM, { { 5, 5 }, { 4, 4 }, { 3, 3 }, { 4, 4 } } }, { CYCLES_POP_REG_SHORT, { { 4, 4 }, { 4, 4 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_POP_SREG, { { 7, 21 }, { 3, 3 }, { 3, 3 }, { 1, 6 } } }, { CYCLES_POPA, { { 24, 24 }, { 9, 9 }, { 5, 5 }, { 9, 9 } } }, { CYCLES_XCHG_REG_REG, { { 3, 3 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_XCHG_REG_MEM, { { 5, 5 }, { 5, 5 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_IN, { { 12, 26 }, { 14, 27 }, { 7, 19 }, { 8, 8 } } }, { CYCLES_IN_VAR, { { 13, 27 }, { 14, 27 }, { 7, 19 }, { 8, 8 } } }, { CYCLES_OUT, { { 10, 24 }, { 16, 29 }, { 12, 24 }, { 14, 14 } } }, { CYCLES_OUT_VAR, { { 11, 25 }, { 16, 29 }, { 12, 24 }, { 14, 14 } } }, { CYCLES_LEA, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_LDS, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 9 } } }, { CYCLES_LES, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 9 } } }, { CYCLES_LFS, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 9 } } }, { CYCLES_LGS, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 9 } } }, { CYCLES_LSS, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 10 } } }, { CYCLES_CLC, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_CLD, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 4, 4 } } }, { CYCLES_CLI, { { 8, 8 }, { 5, 5 }, { 7, 7 }, { 6, 6 } } }, { CYCLES_CLTS, { { 6, 6 }, { 7, 7 }, { 10, 10 }, { 7, 7 } } }, { CYCLES_CMC, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_LAHF, { { 2, 2 }, { 3, 3 }, { 2, 2 }, { 2, 2 } } }, { CYCLES_POPF, { { 5, 5 }, { 9, 9 }, { 6, 6 }, { 8, 8 } } }, { CYCLES_PUSHF, { { 4, 4 }, { 4, 4 }, { 9, 9 }, { 2, 2 } } }, { CYCLES_SAHF, { { 3, 3 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_STC, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_STD, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 4, 4 } } }, { CYCLES_STI, { { 8, 8 }, { 5, 5 }, { 7, 7 }, { 6, 6 } } }, { CYCLES_ALU_REG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_ALU_REG_MEM, { { 7, 7 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_ALU_MEM_REG, { { 6, 6 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_ALU_IMM_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_ALU_IMM_MEM, { { 7, 7 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_ALU_IMM_ACC, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_INC_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_INC_MEM, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_DEC_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_DEC_MEM, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_CMP_REG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_CMP_REG_MEM, { { 5, 5 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_CMP_MEM_REG, { { 6, 6 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_CMP_IMM_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_CMP_IMM_MEM, { { 5, 5 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_CMP_IMM_ACC, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_TEST_REG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_TEST_REG_MEM, { { 5, 5 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_TEST_IMM_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_TEST_IMM_MEM, { { 5, 5 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_TEST_IMM_ACC, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_NEG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_NEG_MEM, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_AAA, { { 4, 4 }, { 3, 3 }, { 3, 3 }, { 3, 3 } } }, { CYCLES_AAS, { { 4, 4 }, { 3, 3 }, { 3, 3 }, { 3, 3 } } }, { CYCLES_DAA, { { 4, 4 }, { 2, 2 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_DAS, { { 4, 4 }, { 2, 2 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_MUL8_ACC_REG, { { 17, 17 }, { 13, 13 }, { 11, 11 }, { 4, 4 } } }, { CYCLES_MUL8_ACC_MEM, { { 20, 20 }, { 13, 13 }, { 11, 11 }, { 4, 4 } } }, { CYCLES_MUL16_ACC_REG, { { 25, 25 }, { 13, 13 }, { 11, 11 }, { 5, 5 } } }, { CYCLES_MUL16_ACC_MEM, { { 28, 28 }, { 13, 13 }, { 11, 11 }, { 5, 5 } } }, { CYCLES_MUL32_ACC_REG, { { 41, 41 }, { 13, 13 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_MUL32_ACC_MEM, { { 44, 44 }, { 13, 13 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL8_ACC_REG, { { 17, 17 }, { 18, 18 }, { 11, 11 }, { 4, 4 } } }, { CYCLES_IMUL8_ACC_MEM, { { 20, 20 }, { 18, 18 }, { 11, 11 }, { 4, 4 } } }, { CYCLES_IMUL16_ACC_REG, { { 25, 25 }, { 26, 26 }, { 11, 11 }, { 5, 5 } } }, { CYCLES_IMUL16_ACC_MEM, { { 28, 28 }, { 26, 26 }, { 11, 11 }, { 5, 5 } } }, { CYCLES_IMUL32_ACC_REG, { { 41, 41 }, { 42, 42 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL32_ACC_MEM, { { 44, 44 }, { 42, 42 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL8_REG_REG, { { 17, 17 }, { 13, 13 }, { 10, 10 }, { 4, 4 } } }, { CYCLES_IMUL8_REG_MEM, { { 20, 20 }, { 13, 13 }, { 10, 10 }, { 4, 4 } } }, { CYCLES_IMUL16_REG_REG, { { 25, 25 }, { 13, 13 }, { 10, 10 }, { 5, 5 } } }, { CYCLES_IMUL16_REG_MEM, { { 28, 28 }, { 13, 13 }, { 10, 10 }, { 5, 5 } } }, { CYCLES_IMUL32_REG_REG, { { 41, 41 }, { 13, 13 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL32_REG_MEM, { { 44, 44 }, { 13, 13 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL16_REG_IMM_REG,{ { 26, 26 }, { 26, 26 }, { 10, 10 }, { 6, 6 } } }, { CYCLES_IMUL16_MEM_IMM_REG,{ { 27, 27 }, { 26, 26 }, { 10, 10 }, { 6, 6 } } }, { CYCLES_IMUL32_REG_IMM_REG,{ { 42, 42 }, { 42, 42 }, { 10, 10 }, { 16, 16 } } }, { CYCLES_IMUL32_MEM_IMM_REG,{ { 43, 43 }, { 42, 42 }, { 10, 10 }, { 16, 16 } } }, { CYCLES_DIV8_ACC_REG, { { 14, 14 }, { 16, 16 }, { 17, 17 }, { 20, 20 } } }, { CYCLES_DIV8_ACC_MEM, { { 17, 17 }, { 16, 16 }, { 17, 17 }, { 20, 20 } } }, { CYCLES_DIV16_ACC_REG, { { 22, 22 }, { 24, 24 }, { 25, 25 }, { 29, 29 } } }, { CYCLES_DIV16_ACC_MEM, { { 25, 25 }, { 24, 24 }, { 25, 25 }, { 29, 29 } } }, { CYCLES_DIV32_ACC_REG, { { 38, 38 }, { 40, 40 }, { 41, 41 }, { 45, 45 } } }, { CYCLES_DIV32_ACC_MEM, { { 41, 41 }, { 40, 40 }, { 41, 41 }, { 45, 45 } } }, { CYCLES_IDIV8_ACC_REG, { { 19, 19 }, { 19, 19 }, { 22, 22 }, { 20, 20 } } }, { CYCLES_IDIV8_ACC_MEM, { { 22, 22 }, { 20, 20 }, { 22, 22 }, { 20, 20 } } }, { CYCLES_IDIV16_ACC_REG, { { 27, 27 }, { 27, 27 }, { 30, 30 }, { 29, 29 } } }, { CYCLES_IDIV16_ACC_MEM, { { 30, 30 }, { 28, 28 }, { 30, 30 }, { 29, 29 } } }, { CYCLES_IDIV32_ACC_REG, { { 43, 43 }, { 43, 43 }, { 46, 46 }, { 45, 45 } } }, { CYCLES_IDIV32_ACC_MEM, { { 46, 46 }, { 44, 44 }, { 46, 46 }, { 45, 45 } } }, { CYCLES_AAD, { { 19, 19 }, { 14, 14 }, { 10, 10 }, { 7, 7 } } }, { CYCLES_AAM, { { 17, 17 }, { 15, 15 }, { 18, 18 }, { 19, 19 } } }, { CYCLES_CBW, { { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 } } }, { CYCLES_CWD, { { 2, 2 }, { 3, 3 }, { 2, 2 }, { 2, 2 } } }, { CYCLES_ROTATE_REG, { { 3, 3 }, { 3, 3 }, { 1, 1 }, { 2, 2 } } }, { CYCLES_ROTATE_MEM, { { 7, 7 }, { 4, 4 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_ROTATE_CARRY_REG, { { 9, 9 }, { 8, 8 }, { 7, 7 }, { 8, 8 } } }, { CYCLES_ROTATE_CARRY_MEM, { { 10, 10 }, { 9, 9 }, { 8, 8 }, { 8, 8 } } }, { CYCLES_SHLD_REG, { { 3, 3 }, { 2, 2 }, { 4, 4 }, { 3, 3 } } }, { CYCLES_SHLD_MEM, { { 7, 7 }, { 3, 3 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_SHRD_REG, { { 3, 3 }, { 2, 2 }, { 4, 4 }, { 3, 3 } } }, { CYCLES_SHRD_MEM, { { 7, 7 }, { 3, 3 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_NOT_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_NOT_MEM, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_CMPS, { { 10, 10 }, { 8, 8 }, { 5, 5 }, { 6, 6 } } }, { CYCLES_INS, { { 15, 29 }, { 17, 30 }, { 9, 22 }, { 11, 11 } } }, { CYCLES_LODS, { { 5, 5 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_MOVS, { { 8, 8 }, { 7, 7 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_OUTS, { { 14, 28 }, { 17, 30 }, { 13, 25 }, { 15, 15 } } }, { CYCLES_SCAS, { { 8, 8 }, { 6, 6 }, { 4, 4 }, { 2, 2 } } }, { CYCLES_STOS, { { 5, 5 }, { 5, 5 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_XLAT, { { 5, 5 }, { 4, 4 }, { 4, 4 }, { 5, 5 } } }, { CYCLES_REP_CMPS_BASE, { { 5, 5 }, { 0, 0 }, { 0, 0 }, { 11, 11 } } }, { CYCLES_REP_INS_BASE, { { 14, 8 }, { 0, 0 }, { 0, 0 }, { 17, 17 } } }, { CYCLES_REP_LODS_BASE, { { 5, 5 }, { 0, 0 }, { 0, 0 }, { 9, 9 } } }, { CYCLES_REP_MOVS_BASE, { { 8, 8 }, { 0, 0 }, { 0, 0 }, { 12, 12 } } }, { CYCLES_REP_OUTS_BASE, { { 12, 6 }, { 0, 0 }, { 0, 0 }, { 24, 24 } } }, { CYCLES_REP_SCAS_BASE, { { 5, 5 }, { 0, 0 }, { 0, 0 }, { 9, 9 } } }, { CYCLES_REP_STOS_BASE, { { 5, 5 }, { 0, 0 }, { 0, 0 }, { 9, 9 } } }, { CYCLES_REP_CMPS, { { 5, 5 }, { 8, 8 }, { 5, 5 }, { 4, 4 } } }, { CYCLES_REP_INS, { { 14, 8 }, { 17, 30 }, { 9, 22 }, { 4, 4 } } }, { CYCLES_REP_LODS, { { 5, 5 }, { 5, 5 }, { 2, 2 }, { 2, 2 } } }, { CYCLES_REP_MOVS, { { 8, 8 }, { 7, 7 }, { 4, 4 }, { 2, 2 } } }, { CYCLES_REP_OUTS, { { 12, 6 }, { 17, 30 }, { 13, 25 }, { 4, 4 } } }, { CYCLES_REP_SCAS, { { 5, 5 }, { 6, 6 }, { 4, 4 }, { 3, 3 } } }, { CYCLES_REP_STOS, { { 5, 5 }, { 5, 5 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_BSF_BASE, { { 11, 11 }, { 6, 6 }, { 6, 6 }, { 4, 4 } } }, { CYCLES_BSF, { { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_BSR_BASE, { { 9, 9 }, { 6, 6 }, { 7, 7 }, { 4, 4 } } }, { CYCLES_BSR, { { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_BT_IMM_REG, { { 3, 3 }, { 3, 3 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_BT_IMM_MEM, { { 6, 6 }, { 6, 6 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_BT_REG_REG, { { 3, 3 }, { 3, 3 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_BT_REG_MEM, { { 12, 12 }, { 12, 12 }, { 9, 9 }, { 7, 7 } } }, { CYCLES_BTC_IMM_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTC_IMM_MEM, { { 8, 8 }, { 8, 8 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_BTC_REG_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTC_REG_MEM, { { 13, 13 }, { 13, 13 }, { 13, 13 }, { 8, 8 } } }, { CYCLES_BTR_IMM_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTR_IMM_MEM, { { 8, 8 }, { 8, 8 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_BTR_REG_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTR_REG_MEM, { { 13, 13 }, { 13, 13 }, { 13, 13 }, { 8, 8 } } }, { CYCLES_BTS_IMM_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTS_IMM_MEM, { { 8, 8 }, { 8, 8 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_BTS_REG_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTS_REG_MEM, { { 13, 13 }, { 13, 13 }, { 13, 13 }, { 8, 8 } } }, { CYCLES_CALL, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 3, 3 } } }, { CYCLES_CALL_REG, { { 7, 7 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_CALL_MEM, { { 10, 10 }, { 5, 5 }, { 2, 2 }, { 4, 4 } } }, { CYCLES_CALL_INTERSEG, { { 17, 34 }, { 18, 20 }, { 4, 13 }, { 9, 14 } } }, { CYCLES_CALL_REG_INTERSEG, { { 22, 38 }, { 17, 20 }, { 4, 14 }, { 11, 15 } } }, { CYCLES_CALL_MEM_INTERSEG, { { 22, 38 }, { 17, 20 }, { 4, 14 }, { 11, 15 } } }, { CYCLES_JMP_SHORT, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JMP, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JMP_REG, { { 7, 7 }, { 5, 5 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_JMP_MEM, { { 10, 10 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_JMP_INTERSEG, { { 12, 27 }, { 17, 19 }, { 3, 3 }, { 8, 12 } } }, { CYCLES_JMP_REG_INTERSEG, { { 17, 31 }, { 13, 18 }, { 4, 4 }, { 10, 10 } } }, { CYCLES_JMP_MEM_INTERSEG, { { 17, 31 }, { 13, 18 }, { 4, 4 }, { 10, 13 } } }, { CYCLES_RET, { { 10, 10 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_RET_IMM, { { 10, 10 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_RET_INTERSEG, { { 18, 32 }, { 13, 13 }, { 4, 4 }, { 10, 13 } } }, { CYCLES_RET_IMM_INTERSEG, { { 18, 32 }, { 14, 14 }, { 4, 4 }, { 10, 13 } } }, { CYCLES_JCC_DISP8, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JCC_FULL_DISP, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JCC_DISP8_NOBRANCH,{ { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JCC_FULL_DISP_NOBRANCH,{ { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JCXZ, { { 9, 9 }, { 1, 1 }, { 1, 1 }, { 2, 2 } } }, { CYCLES_JCXZ_NOBRANCH, { { 5, 5 }, { 1, 1 }, { 1, 1 }, { 2, 2 } } }, { CYCLES_LOOP, { { 11, 11 }, { 6, 6 }, { 5, 5 }, { 2, 2 } } }, { CYCLES_LOOPZ, { { 11, 11 }, { 9, 9 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_LOOPNZ, { { 11, 11 }, { 9, 9 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_SETCC_REG, { { 4, 4 }, { 3, 3 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_SETCC_MEM, { { 5, 5 }, { 4, 4 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_ENTER, { { 10, 10 }, { 14, 14 }, { 11, 11 }, { 13, 13 } } }, { CYCLES_LEAVE, { { 4, 4 }, { 5, 5 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_INT, { { 37, 37 }, { 30, 30 }, { 16, 16 }, { 19, 19 } } }, { CYCLES_INT3, { { 33, 33 }, { 26, 26 }, { 13, 13 }, { 19, 19 } } }, { CYCLES_INTO_OF1, { { 35, 35 }, { 28, 28 }, { 13, 13 }, { 19, 19 } } }, { CYCLES_INTO_OF0, { { 3, 3 }, { 3, 3 }, { 4, 4 }, { 4, 4 } } }, { CYCLES_BOUND_IN_RANGE, { { 10, 10 }, { 7, 7 }, { 8, 8 }, { 7, 7 } } }, { CYCLES_BOUND_OUT_RANGE, { { 44, 44 }, { 7, 7 }, { 8, 8 }, { 8, 8 } } }, { CYCLES_IRET, { { 22, 22 }, { 15, 15 }, { 8, 8 }, { 13, 13 } } }, { CYCLES_HLT, { { 5, 5 }, { 4, 4 }, { 4, 4 }, { 10, 10 } } }, { CYCLES_MOV_REG_CR0, { { 11, 11 }, { 16, 16 }, { 16, 16 }, { 20, 18 } } }, { CYCLES_MOV_REG_CR2, { { 4, 4 }, { 4, 4 }, { 4, 4 }, { 5, 5 } } }, { CYCLES_MOV_REG_CR3, { { 5, 5 }, { 4, 4 }, { 4, 4 }, { 5, 6 } } }, { CYCLES_MOV_CR_REG, { { 6, 6 }, { 4, 4 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_MOV_REG_DR0_3, { { 22, 22 }, { 10, 10 }, { 10, 10 }, { 10, 10 } } }, { CYCLES_MOV_REG_DR6_7, { { 16, 16 }, { 10, 10 }, { 10, 10 }, { 10, 10 } } }, { CYCLES_MOV_DR6_7_REG, { { 14, 14 }, { 11, 11 }, { 11, 11 }, { 9, 9 } } }, { CYCLES_MOV_DR0_3_REG, { { 22, 22 }, { 11, 11 }, { 11, 11 }, { 9, 9 } } }, { CYCLES_MOV_REG_TR6_7, { { 12, 12 }, { 4, 4 }, { 4, 4 }, { 11, 11 } } }, { CYCLES_MOV_TR6_7_REG, { { 12, 12 }, { 3, 3 }, { 3, 3 }, { 3, 3 } } }, { CYCLES_NOP, { { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_WAIT, { { 7, 7 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_ARPL_REG, { { 0, 20 }, { 0, 9 }, { 0, 7 }, { 0, 9 } } }, { CYCLES_ARPL_MEM, { { 0, 21 }, { 0, 9 }, { 0, 7 }, { 0, 9 } } }, { CYCLES_LAR_REG, { { 0, 15 }, { 11, 11 }, { 8, 8 }, { 0, 9 } } }, { CYCLES_LAR_MEM, { { 0, 16 }, { 11, 11 }, { 8, 8 }, { 0, 9 } } }, { CYCLES_LGDT, { { 11, 11 }, { 11, 11 }, { 6, 6 }, { 10, 10 } } }, { CYCLES_LIDT, { { 11, 11 }, { 11, 11 }, { 6, 6 }, { 10, 10 } } }, { CYCLES_LLDT_REG, { { 0, 20 }, { 11, 11 }, { 9, 9 }, { 0, 8 } } }, { CYCLES_LLDT_MEM, { { 0, 24 }, { 11, 11 }, { 9, 9 }, { 0, 8 } } }, { CYCLES_LMSW_REG, { { 11, 11 }, { 13, 13 }, { 8, 8 }, { 11, 11 } } }, { CYCLES_LMSW_MEM, { { 14, 14 }, { 13, 13 }, { 8, 8 }, { 11, 11 } } }, { CYCLES_LSL_REG, { { 0, 21 }, { 10, 10 }, { 8, 8 }, { 0, 9 } } }, { CYCLES_LSL_MEM, { { 0, 22 }, { 10, 10 }, { 8, 8 }, { 0, 9 } } }, { CYCLES_LTR_REG, { { 0, 23 }, { 20, 20 }, { 10, 10 }, { 0, 9 } } }, { CYCLES_LTR_MEM, { { 0, 27 }, { 20, 20 }, { 10, 10 }, { 0, 9 } } }, { CYCLES_SGDT, { { 9, 9 }, { 10, 10 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_SIDT, { { 9, 9 }, { 10, 10 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_SLDT_REG, { { 0, 2 }, { 2, 2 }, { 2, 2 }, { 0, 1 } } }, { CYCLES_SLDT_MEM, { { 0, 2 }, { 3, 3 }, { 2, 2 }, { 0, 1 } } }, { CYCLES_SMSW_REG, { { 2, 2 }, { 2, 2 }, { 4, 4 }, { 4, 4 } } }, { CYCLES_SMSW_MEM, { { 2, 2 }, { 3, 3 }, { 4, 4 }, { 4, 4 } } }, { CYCLES_STR_REG, { { 0, 2 }, { 2, 2 }, { 2, 2 }, { 0, 3 } } }, { CYCLES_STR_MEM, { { 0, 2 }, { 3, 3 }, { 2, 2 }, { 0, 3 } } }, { CYCLES_VERR_REG, { { 0, 10 }, { 11, 11 }, { 7, 7 }, { 0, 8 } } }, { CYCLES_VERR_MEM, { { 0, 11 }, { 11, 11 }, { 7, 7 }, { 0, 8 } } }, { CYCLES_VERW_REG, { { 0, 15 }, { 11, 11 }, { 7, 7 }, { 0, 8 } } }, { CYCLES_VERW_MEM, { { 0, 16 }, { 11, 11 }, { 7, 7 }, { 0, 8 } } }, { CYCLES_LOCK, { { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, // i486+ { CYCLES_BSWAP, { { 0, 0 }, { 1, 1 }, { 1, 1 }, { 6, 6 } } }, { CYCLES_CMPXCHG, { { 0, 0 }, { 6, 6 }, { 5, 5 }, { 6, 6 } } }, { CYCLES_INVD, { { 0, 0 }, { 4, 4 }, { 15, 15 }, { 20, 20 } } }, { CYCLES_XADD, { { 0, 0 }, { 4, 4 }, { 4, 4 }, { 2, 2 } } }, // Pentium+ { CYCLES_CMPXCHG8B, { { 0, 0 }, { 0, 0 }, { 10, 10 }, { 6, 6 } } }, { CYCLES_CPUID, { { 0, 0 }, { 0, 0 }, { 14, 14 }, { 12, 12 } } }, { CYCLES_CPUID_EAX1, { { 0, 0 }, { 0, 0 }, { 14, 14 }, { 12, 12 } } }, { CYCLES_RDTSC, { { 0, 0 }, { 0, 0 }, { 20, 20 }, { 1, 1 } } }, { CYCLES_RSM, { { 0, 0 }, { 0, 0 }, { 82, 82 }, { 57, 57 } } }, { CYCLES_RDMSR, { { 0, 0 }, { 0, 0 }, { 20, 20 }, { 1, 1 } } }, // FPU { CYCLES_FABS, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FADD, { { 0, 0 }, { 8, 8 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FBLD, { { 0, 0 }, { 70, 70 }, { 48, 48 }, { 1, 1 } } }, { CYCLES_FBSTP, { { 0, 0 }, {172,172 }, {148,148 }, { 1, 1 } } }, { CYCLES_FCHS, { { 0, 0 }, { 6, 6 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FCLEX, { { 0, 0 }, { 7, 7 }, { 9, 9 }, { 1, 1 } } }, { CYCLES_FCOM, { { 0, 0 }, { 4, 4 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_FCOS, { { 0, 0 }, {255,255 }, {124,124 }, { 1, 1 } } }, { CYCLES_FDECSTP, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FDISI, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FDIV, { { 0, 0 }, { 73, 73 }, { 39, 39 }, { 1, 1 } } }, { CYCLES_FDIVR, { { 0, 0 }, { 73, 73 }, { 39, 39 }, { 1, 1 } } }, { CYCLES_FENI, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FFREE, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FIADD, { { 0, 0 }, { 20, 20 }, { 7, 7 }, { 1, 1 } } }, { CYCLES_FICOM, { { 0, 0 }, { 16, 16 }, { 8, 8 }, { 1, 1 } } }, { CYCLES_FIDIV, { { 0, 0 }, { 85, 85 }, { 42, 42 }, { 1, 1 } } }, { CYCLES_FILD, { { 0, 0 }, { 13, 13 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FIMUL, { { 0, 0 }, { 23, 23 }, { 7, 7 }, { 1, 1 } } }, { CYCLES_FINCSTP, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FINIT, { { 0, 0 }, { 17, 17 }, { 16, 16 }, { 1, 1 } } }, { CYCLES_FIST, { { 0, 0 }, { 29, 29 }, { 6, 6 }, { 1, 1 } } }, { CYCLES_FISUB, { { 0, 0 }, { 20, 20 }, { 7, 7 }, { 1, 1 } } }, { CYCLES_FLD, { { 0, 0 }, { 4, 4 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FLDZ, { { 0, 0 }, { 4, 4 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_FLD1, { { 0, 0 }, { 4, 4 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_FLDL2E, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDL2T, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDLG2, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDLN2, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDPI, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDCW, { { 0, 0 }, { 4, 4 }, { 7, 7 }, { 1, 1 } } }, { CYCLES_FLDENV, { { 0, 0 }, { 44, 44 }, { 37, 37 }, { 1, 1 } } }, { CYCLES_FMUL, { { 0, 0 }, { 16, 16 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FNOP, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FPATAN, { { 0, 0 }, {218,218 }, {173,173 }, { 1, 1 } } }, { CYCLES_FPREM, { { 0, 0 }, { 70, 70 }, { 16, 16 }, { 1, 1 } } }, { CYCLES_FPREM1, { { 0, 0 }, { 72, 72 }, { 20, 20 }, { 1, 1 } } }, { CYCLES_FPTAN, { { 0, 0 }, {200,200 }, {173,173 }, { 1, 1 } } }, { CYCLES_FRNDINT, { { 0, 0 }, { 21, 21 }, { 9, 9 }, { 1, 1 } } }, { CYCLES_FRSTOR, { { 0, 0 }, {131,131 }, { 75, 75 }, { 1, 1 } } }, { CYCLES_FSAVE, { { 0, 0 }, {154,154 }, {127,127 }, { 1, 1 } } }, { CYCLES_FSCALE, { { 0, 0 }, { 30, 30 }, { 20, 20 }, { 1, 1 } } }, { CYCLES_FSETPM, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FSIN, { { 0, 0 }, {255,255 }, {126,126 }, { 1, 1 } } }, { CYCLES_FSINCOS, { { 0, 0 }, {255,255 }, {137,137 }, { 1, 1 } } }, { CYCLES_FSQRT, { { 0, 0 }, { 83, 83 }, { 70, 70 }, { 1, 1 } } }, { CYCLES_FST, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FSTCW, { { 0, 0 }, { 3, 3 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_FSTENV, { { 0, 0 }, { 67, 67 }, { 48, 48 }, { 1, 1 } } }, { CYCLES_FSTSW, { { 0, 0 }, { 3, 3 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_FSUB, { { 0, 0 }, { 8, 8 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FSUBR, { { 0, 0 }, { 8, 8 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FTST, { { 0, 0 }, { 4, 4 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_FUCOM, { { 0, 0 }, { 4, 4 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_FXAM, { { 0, 0 }, { 8, 8 }, { 21, 21 }, { 1, 1 } } }, { CYCLES_FXCH, { { 0, 0 }, { 4, 4 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FXTRACT, { { 0, 0 }, { 16, 16 }, { 13, 13 }, { 1, 1 } } }, { CYCLES_FYL2X, { { 0, 0 }, {196,196 }, {111,111 }, { 1, 1 } } }, { CYCLES_FYL2XPI, { { 0, 0 }, {171,171 }, {103,103 }, { 1, 1 } } }, { CYCLES_CMPXCHG_REG_REG_T, { { 0, 0 }, { 6, 6 }, { 6, 6 }, { 6, 6 } } }, { CYCLES_CMPXCHG_REG_REG_F, { { 0, 0 }, { 9, 9 }, { 9, 9 }, { 9, 9 } } }, { CYCLES_CMPXCHG_REG_MEM_T, { { 0, 0 }, { 7, 7 }, { 7, 7 }, { 7, 7 } } }, { CYCLES_CMPXCHG_REG_MEM_F, { { 0, 0 }, { 10, 10 }, { 10, 10 }, { 10, 10 } } }, }; #endif /* __CYCLES_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i386/i386.c ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett /* Intel 386 emulator Written by Ville Linde Currently supports: Intel 386 Intel 486 Intel Pentium Cyrix MediaGX Intel Pentium MMX Intel Pentium Pro Intel Pentium II Intel Pentium III Intel Pentium 4 */ //#include "emu.h" //#include "debugger.h" #include "i386priv.h" //#include "i386.h" //#include "debug/debugcpu.h" /* seems to be defined on mingw-gcc */ #undef i386 static CPU_RESET( CPU_MODEL ); int i386_parity_table[256]; MODRM_TABLE i386_MODRM_table[256]; static void i386_trap_with_error(int irq, int irq_gate, int trap_level, UINT32 err); static void i286_task_switch(UINT16 selector, UINT8 nested); static void i386_task_switch(UINT16 selector, UINT8 nested); static void build_opcode_table(UINT32 features); static void zero_state(); static void pentium_smi(); #define FAULT(fault,error) {m_ext = 1; i386_trap_with_error(fault,0,0,error); return;} #define FAULT_EXP(fault,error) {m_ext = 1; i386_trap_with_error(fault,0,trap_level+1,error); return;} /*************************************************************************/ static UINT32 i386_load_protected_mode_segment(I386_SREG *seg, UINT64 *desc ) { UINT32 v1,v2; UINT32 base, limit; int entry; if(!seg->selector) { seg->flags = 0; seg->base = 0; seg->limit = 0; seg->d = 0; seg->valid = false; return 0; } if ( seg->selector & 0x4 ) { base = m_ldtr.base; limit = m_ldtr.limit; } else { base = m_gdtr.base; limit = m_gdtr.limit; } entry = seg->selector & ~0x7; if (limit == 0 || entry + 7 > limit) return 0; v1 = READ32PL0(base + entry ); v2 = READ32PL0(base + entry + 4 ); seg->flags = (v2 >> 8) & 0xf0ff; seg->base = (v2 & 0xff000000) | ((v2 & 0xff) << 16) | ((v1 >> 16) & 0xffff); seg->limit = (v2 & 0xf0000) | (v1 & 0xffff); if (seg->flags & 0x8000) seg->limit = (seg->limit << 12) | 0xfff; seg->d = (seg->flags & 0x4000) ? 1 : 0; seg->valid = true; if(desc) *desc = ((UINT64)v2<<32)|v1; return 1; } static void i386_load_call_gate(I386_CALL_GATE *gate) { UINT32 v1,v2; UINT32 base,limit; int entry; if ( gate->segment & 0x4 ) { base = m_ldtr.base; limit = m_ldtr.limit; } else { base = m_gdtr.base; limit = m_gdtr.limit; } entry = gate->segment & ~0x7; if (limit == 0 || entry + 7 > limit) return; v1 = READ32PL0(base + entry ); v2 = READ32PL0(base + entry + 4 ); /* Note that for task gates, offset and dword_count are not used */ gate->selector = (v1 >> 16) & 0xffff; gate->offset = (v1 & 0x0000ffff) | (v2 & 0xffff0000); gate->ar = (v2 >> 8) & 0xff; gate->dword_count = v2 & 0x001f; gate->present = (gate->ar >> 7) & 0x01; gate->dpl = (gate->ar >> 5) & 0x03; } static void i386_set_descriptor_accessed(UINT16 selector) { // assume the selector is valid, we don't need to check it again UINT32 base, addr; UINT8 rights; if(!(selector & ~3)) return; if ( selector & 0x4 ) base = m_ldtr.base; else base = m_gdtr.base; addr = base + (selector & ~7) + 5; i386_translate_address(TRANSLATE_READ, &addr, NULL); rights = read_byte(addr); // Should a fault be thrown if the table is read only? write_byte(addr, rights | 1); } // void load_segment_descriptor_wine(int sreg); // static void i386_load_segment_descriptor(int segment ) { if (PROTECTED_MODE) { if (!V8086_MODE) { i386_load_protected_mode_segment(&m_sreg[segment], NULL ); if(m_sreg[segment].selector) i386_set_descriptor_accessed(m_sreg[segment].selector); } else { m_sreg[segment].base = m_sreg[segment].selector << 4; m_sreg[segment].limit = 0xffff; m_sreg[segment].flags = (segment == CS) ? 0x00fb : 0x00f3; m_sreg[segment].d = 0; m_sreg[segment].valid = true; } } else { m_sreg[segment].base = m_sreg[segment].selector << 4; // //load_segment_descriptor_wine(segment); // m_sreg[segment].d = 0; m_sreg[segment].valid = true; if( segment == CS && !m_performed_intersegment_jump ) m_sreg[segment].base |= 0xfff00000; } } /* Retrieves the stack selector located in the current TSS */ static UINT32 i386_get_stack_segment(UINT8 privilege) { UINT32 ret; if(privilege >= 3) return 0; if(m_task.flags & 8) ret = READ32PL0((m_task.base+8) + (8*privilege)); else ret = READ16PL0((m_task.base+4) + (4*privilege)); return ret; } /* Retrieves the stack pointer located in the current TSS */ static UINT32 i386_get_stack_ptr(UINT8 privilege) { UINT32 ret; if(privilege >= 3) return 0; if(m_task.flags & 8) ret = READ32PL0((m_task.base+4) + (8*privilege)); else ret = READ16PL0((m_task.base+2) + (4*privilege)); return ret; } static UINT32 get_flags() { UINT32 f = 0x2; f |= m_CF; f |= m_PF << 2; f |= m_AF << 4; f |= m_ZF << 6; f |= m_SF << 7; f |= m_TF << 8; f |= m_IF << 9; f |= m_DF << 10; f |= m_OF << 11; f |= m_IOP1 << 12; f |= m_IOP2 << 13; f |= m_NT << 14; f |= m_RF << 16; f |= m_VM << 17; f |= m_AC << 18; f |= m_VIF << 19; f |= m_VIP << 20; f |= m_ID << 21; return (m_eflags & ~m_eflags_mask) | (f & m_eflags_mask); } static void set_flags(UINT32 f ) { m_CF = (f & 0x1) ? 1 : 0; m_PF = (f & 0x4) ? 1 : 0; m_AF = (f & 0x10) ? 1 : 0; m_ZF = (f & 0x40) ? 1 : 0; m_SF = (f & 0x80) ? 1 : 0; m_TF = (f & 0x100) ? 1 : 0; m_IF = (f & 0x200) ? 1 : 0; m_DF = (f & 0x400) ? 1 : 0; m_OF = (f & 0x800) ? 1 : 0; m_IOP1 = (f & 0x1000) ? 1 : 0; m_IOP2 = (f & 0x2000) ? 1 : 0; m_NT = (f & 0x4000) ? 1 : 0; m_RF = (f & 0x10000) ? 1 : 0; m_VM = (f & 0x20000) ? 1 : 0; m_AC = (f & 0x40000) ? 1 : 0; m_VIF = (f & 0x80000) ? 1 : 0; m_VIP = (f & 0x100000) ? 1 : 0; m_ID = (f & 0x200000) ? 1 : 0; m_eflags = f & m_eflags_mask; } static void sib_byte(UINT8 mod, UINT32* out_ea, UINT8* out_segment) { UINT32 ea = 0; UINT8 segment = 0; UINT8 scale, i, base; UINT8 sib = FETCH(); scale = (sib >> 6) & 0x3; i = (sib >> 3) & 0x7; base = sib & 0x7; switch( base ) { case 0: ea = REG32(EAX); segment = DS; break; case 1: ea = REG32(ECX); segment = DS; break; case 2: ea = REG32(EDX); segment = DS; break; case 3: ea = REG32(EBX); segment = DS; break; case 4: ea = REG32(ESP); segment = SS; break; case 5: if( mod == 0 ) { ea = FETCH32(); segment = DS; } else if( mod == 1 ) { ea = REG32(EBP); segment = SS; } else if( mod == 2 ) { ea = REG32(EBP); segment = SS; } break; case 6: ea = REG32(ESI); segment = DS; break; case 7: ea = REG32(EDI); segment = DS; break; } switch( i ) { case 0: ea += REG32(EAX) * (1 << scale); break; case 1: ea += REG32(ECX) * (1 << scale); break; case 2: ea += REG32(EDX) * (1 << scale); break; case 3: ea += REG32(EBX) * (1 << scale); break; case 4: break; case 5: ea += REG32(EBP) * (1 << scale); break; case 6: ea += REG32(ESI) * (1 << scale); break; case 7: ea += REG32(EDI) * (1 << scale); break; } *out_ea = ea; *out_segment = segment; } static void modrm_to_EA(UINT8 mod_rm, UINT32* out_ea, UINT8* out_segment) { INT8 disp8; INT16 disp16; INT32 disp32; UINT8 mod = (mod_rm >> 6) & 0x3; UINT8 rm = mod_rm & 0x7; UINT32 ea; UINT8 segment; if( mod_rm >= 0xc0 ) fatalerror("i386: Called modrm_to_EA with modrm value %02X!\n",mod_rm); if( m_address_size ) { switch( rm ) { default: case 0: ea = REG32(EAX); segment = DS; break; case 1: ea = REG32(ECX); segment = DS; break; case 2: ea = REG32(EDX); segment = DS; break; case 3: ea = REG32(EBX); segment = DS; break; case 4: sib_byte(mod, &ea, &segment ); break; case 5: if( mod == 0 ) { ea = FETCH32(); segment = DS; } else { ea = REG32(EBP); segment = SS; } break; case 6: ea = REG32(ESI); segment = DS; break; case 7: ea = REG32(EDI); segment = DS; break; } if( mod == 1 ) { disp8 = FETCH(); ea += (INT32)disp8; } else if( mod == 2 ) { disp32 = FETCH32(); ea += disp32; } if( m_segment_prefix ) segment = m_segment_override; *out_ea = ea; *out_segment = segment; } else { switch( rm ) { default: case 0: ea = REG16(BX) + REG16(SI); segment = DS; break; case 1: ea = REG16(BX) + REG16(DI); segment = DS; break; case 2: ea = REG16(BP) + REG16(SI); segment = SS; break; case 3: ea = REG16(BP) + REG16(DI); segment = SS; break; case 4: ea = REG16(SI); segment = DS; break; case 5: ea = REG16(DI); segment = DS; break; case 6: if( mod == 0 ) { ea = FETCH16(); segment = DS; } else { ea = REG16(BP); segment = SS; } break; case 7: ea = REG16(BX); segment = DS; break; } if( mod == 1 ) { disp8 = FETCH(); ea += (INT32)disp8; } else if( mod == 2 ) { disp16 = FETCH16(); ea += (INT32)disp16; } if( m_segment_prefix ) segment = m_segment_override; *out_ea = ea & 0xffff; *out_segment = segment; } } static UINT32 GetNonTranslatedEA(UINT8 modrm,UINT8 *seg) { UINT8 segment; UINT32 ea; modrm_to_EA(modrm, &ea, &segment ); if(seg) *seg = segment; return ea; } static UINT32 GetEA(UINT8 modrm, int rwn) { UINT8 segment; UINT32 ea; modrm_to_EA(modrm, &ea, &segment ); return i386_translate(segment, ea, rwn ); } /* Check segment register for validity when changing privilege level after an RETF */ static void i386_check_sreg_validity(int reg) { UINT16 selector = m_sreg[reg].selector; UINT8 CPL = m_CPL; UINT8 DPL,RPL; I386_SREG desc; int invalid = 0; memset(&desc, 0, sizeof(desc)); desc.selector = selector; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = selector & 0x03; /* Must be within the relevant descriptor table limits */ if(selector & 0x04) { if((selector & ~0x07) > m_ldtr.limit) invalid = 1; } else { if((selector & ~0x07) > m_gdtr.limit) invalid = 1; } /* Must be either a data or readable code segment */ if(((desc.flags & 0x0018) == 0x0018 && (desc.flags & 0x0002)) || (desc.flags & 0x0018) == 0x0010) invalid = 0; else invalid = 1; /* If a data segment or non-conforming code segment, then either DPL >= CPL or DPL >= RPL */ if(((desc.flags & 0x0018) == 0x0018 && (desc.flags & 0x0004) == 0) || (desc.flags & 0x0018) == 0x0010) { if((DPL < CPL) || (DPL < RPL)) invalid = 1; } /* if segment is invalid, then segment register is nulled */ if(invalid != 0) { m_sreg[reg].selector = 0; i386_load_segment_descriptor(reg); } } static int i386_limit_check(int seg, UINT32 offset) { if(PROTECTED_MODE && !V8086_MODE) { if((m_sreg[seg].flags & 0x0018) == 0x0010 && m_sreg[seg].flags & 0x0004) // if expand-down data segment { // compare if greater then 0xffffffff when we're passed the access size if((offset <= m_sreg[seg].limit) || ((m_sreg[seg].d)?0:(offset > 0xffff))) { logerror("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); return 1; } } else { if(offset > m_sreg[seg].limit) { logerror("Limit check at 0x%08x failed. Segment %04x, limit %08x, offset %08x\n",m_pc,m_sreg[seg].selector,m_sreg[seg].limit,offset); return 1; } } } return 0; } static void i386_sreg_load(UINT16 selector, UINT8 reg, bool *fault) { // Checks done when MOV changes a segment register in protected mode UINT8 CPL,RPL,DPL; CPL = m_CPL; RPL = selector & 0x0003; if(!PROTECTED_MODE || V8086_MODE) { m_sreg[reg].selector = selector; i386_load_segment_descriptor(reg); if(fault) *fault = false; return; } if(fault) *fault = true; if(reg == SS) { I386_SREG stack; memset(&stack, 0, sizeof(stack)); stack.selector = selector; i386_load_protected_mode_segment(&stack,NULL); DPL = (stack.flags >> 5) & 0x03; if((selector & ~0x0003) == 0) { logerror("SReg Load (%08x): Selector is null.\n",m_pc); FAULT(FAULT_GP,0) } if(selector & 0x0004) // LDT { if((selector & ~0x0007) > m_ldtr.limit) { logerror("SReg Load (%08x): Selector is out of LDT bounds.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } else // GDT { if((selector & ~0x0007) > m_gdtr.limit) { logerror("SReg Load (%08x): Selector is out of GDT bounds.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } if (RPL != CPL) { logerror("SReg Load (%08x): Selector RPL does not equal CPL.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } if(((stack.flags & 0x0018) != 0x10) && (stack.flags & 0x0002) != 0) { logerror("SReg Load (%08x): Segment is not a writable data segment.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } if(DPL != CPL) { logerror("SReg Load (%08x): Segment DPL does not equal CPL.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } if(!(stack.flags & 0x0080)) { logerror("SReg Load (%08x): Segment is not present.\n",m_pc); FAULT(FAULT_SS,selector & ~0x03) } } if(reg == DS || reg == ES || reg == FS || reg == GS) { I386_SREG desc; if((selector & ~0x0003) == 0) { m_sreg[reg].selector = selector; i386_load_segment_descriptor(reg ); if(fault) *fault = false; return; } memset(&desc, 0, sizeof(desc)); desc.selector = selector; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; if(selector & 0x0004) // LDT { if((selector & ~0x0007) > m_ldtr.limit) { logerror("SReg Load (%08x): Selector is out of LDT bounds.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } else // GDT { if((selector & ~0x0007) > m_gdtr.limit) { logerror("SReg Load (%08x): Selector is out of GDT bounds.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } if((desc.flags & 0x0018) != 0x10) { if((((desc.flags & 0x0002) != 0) && ((desc.flags & 0x0018) != 0x18)) || !(desc.flags & 0x10)) { logerror("SReg Load (%08x): Segment is not a data segment or readable code segment.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } if(((desc.flags & 0x0018) == 0x10) || ((!(desc.flags & 0x0004)) && ((desc.flags & 0x0018) == 0x18))) { // if data or non-conforming code segment if((RPL > DPL) || (CPL > DPL)) { logerror("SReg Load (%08x): Selector RPL or CPL is not less or equal to segment DPL.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } if(!(desc.flags & 0x0080)) { logerror("SReg Load (%08x): Segment is not present.\n",m_pc); FAULT(FAULT_NP,selector & ~0x03) } } m_sreg[reg].selector = selector; i386_load_segment_descriptor(reg ); if(fault) *fault = false; } static void i386_trap(int irq, int irq_gate, int trap_level) { /* I386 Interrupts/Traps/Faults: * * 0x00 Divide by zero * 0x01 Debug exception * 0x02 NMI * 0x03 Int3 * 0x04 Overflow * 0x05 Array bounds check * 0x06 Illegal Opcode * 0x07 FPU not available * 0x08 Double fault * 0x09 Coprocessor segment overrun * 0x0a Invalid task state * 0x0b Segment not present * 0x0c Stack exception * 0x0d General Protection Fault * 0x0e Page fault * 0x0f Reserved * 0x10 Coprocessor error */ UINT32 v1, v2; UINT32 offset, oldflags = get_flags(); UINT16 segment; int entry = irq * (PROTECTED_MODE ? 8 : 4); int SetRPL = 0; m_lock = false; if( !(PROTECTED_MODE) ) { /* 16-bit */ PUSH16(oldflags & 0xffff ); PUSH16(m_sreg[CS].selector ); if(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1) PUSH16(m_eip ); else PUSH16(m_prev_eip ); m_sreg[CS].selector = READ16(m_idtr.base + entry + 2 ); m_eip = READ16(m_idtr.base + entry ); m_TF = 0; m_IF = 0; } else { int type; UINT16 flags; I386_SREG desc; UINT8 CPL = m_CPL, DPL = 0; //, RPL = 0; /* 32-bit */ v1 = READ32PL0(m_idtr.base + entry ); v2 = READ32PL0(m_idtr.base + entry + 4 ); offset = (v2 & 0xffff0000) | (v1 & 0xffff); segment = (v1 >> 16) & 0xffff; type = (v2>>8) & 0x1F; flags = (v2>>8) & 0xf0ff; if(trap_level == 2) { logerror("IRQ: Double fault.\n"); FAULT_EXP(FAULT_DF,0); } if(trap_level >= 3) { logerror("IRQ: Triple fault. CPU reset.\n"); CPU_RESET_CALL(CPU_MODEL); return; } /* segment privilege checks */ if(entry >= m_idtr.limit) { logerror("IRQ (%08x): Vector %02xh is past IDT limit.\n",m_pc,entry); FAULT_EXP(FAULT_GP,entry+2) } /* segment must be interrupt gate, trap gate, or task gate */ if(type != 0x05 && type != 0x06 && type != 0x07 && type != 0x0e && type != 0x0f) { logerror("IRQ#%02x (%08x): Vector segment %04x is not an interrupt, trap or task gate.\n",irq,m_pc,segment); FAULT_EXP(FAULT_GP,entry+2) } if(m_ext == 0) // if software interrupt (caused by INT/INTO/INT3) { if(((flags >> 5) & 0x03) < CPL) { logerror("IRQ (%08x): Software IRQ - gate DPL is less than CPL.\n",m_pc); FAULT_EXP(FAULT_GP,entry+2) } if(V8086_MODE) { if((!m_IOP1 || !m_IOP2) && (m_opcode != 0xcc)) { logerror("IRQ (%08x): Is in Virtual 8086 mode and IOPL != 3.\n",m_pc); FAULT(FAULT_GP,0) } } } if((flags & 0x0080) == 0) { logerror("IRQ: Vector segment is not present.\n"); FAULT_EXP(FAULT_NP,entry+2) } if(type == 0x05) { /* Task gate */ memset(&desc, 0, sizeof(desc)); desc.selector = segment; i386_load_protected_mode_segment(&desc,NULL); if(segment & 0x04) { logerror("IRQ: Task gate: TSS is not in the GDT.\n"); FAULT_EXP(FAULT_TS,segment & ~0x03); } else { if(segment > m_gdtr.limit) { logerror("IRQ: Task gate: TSS is past GDT limit.\n"); FAULT_EXP(FAULT_TS,segment & ~0x03); } } if((desc.flags & 0x000f) != 0x09 && (desc.flags & 0x000f) != 0x01) { logerror("IRQ: Task gate: TSS is not an available TSS.\n"); FAULT_EXP(FAULT_TS,segment & ~0x03); } if((desc.flags & 0x0080) == 0) { logerror("IRQ: Task gate: TSS is not present.\n"); FAULT_EXP(FAULT_NP,segment & ~0x03); } if(!(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1)) m_eip = m_prev_eip; if(desc.flags & 0x08) i386_task_switch(desc.selector,1); else i286_task_switch(desc.selector,1); return; } else { /* Interrupt or Trap gate */ memset(&desc, 0, sizeof(desc)); desc.selector = segment; i386_load_protected_mode_segment(&desc,NULL); CPL = m_CPL; // current privilege level DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level // RPL = segment & 0x03; // requested privilege level if((segment & ~0x03) == 0) { logerror("IRQ: Gate segment is null.\n"); FAULT_EXP(FAULT_GP,m_ext) } if(segment & 0x04) { if((segment & ~0x07) > m_ldtr.limit) { logerror("IRQ: Gate segment is past LDT limit.\n"); FAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext) } } else { if((segment & ~0x07) > m_gdtr.limit) { logerror("IRQ: Gate segment is past GDT limit.\n"); FAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext) } } if((desc.flags & 0x0018) != 0x18) { logerror("IRQ: Gate descriptor is not a code segment.\n"); FAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext) } if((desc.flags & 0x0080) == 0) { logerror("IRQ: Gate segment is not present.\n"); FAULT_EXP(FAULT_NP,(segment & 0x03)+m_ext) } if((desc.flags & 0x0004) == 0 && (DPL < CPL)) { /* IRQ to inner privilege */ I386_SREG stack; UINT32 newESP,oldSS,oldESP; if(V8086_MODE && DPL) { logerror("IRQ: Gate to CPL>0 from VM86 mode.\n"); FAULT_EXP(FAULT_GP,segment & ~0x03); } /* Check new stack segment in TSS */ memset(&stack, 0, sizeof(stack)); stack.selector = i386_get_stack_segment(DPL); i386_load_protected_mode_segment(&stack,NULL); oldSS = m_sreg[SS].selector; if(flags & 0x0008) oldESP = REG32(ESP); else oldESP = REG16(SP); if((stack.selector & ~0x03) == 0) { logerror("IRQ: New stack selector is null.\n"); FAULT_EXP(FAULT_GP,m_ext) } if(stack.selector & 0x04) { if((stack.selector & ~0x07) > m_ldtr.base) { logerror("IRQ: New stack selector is past LDT limit.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) } } else { if((stack.selector & ~0x07) > m_gdtr.base) { logerror("IRQ: New stack selector is past GDT limit.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) } } if((stack.selector & 0x03) != DPL) { logerror("IRQ: New stack selector RPL is not equal to code segment DPL.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) } if(((stack.flags >> 5) & 0x03) != DPL) { logerror("IRQ: New stack segment DPL is not equal to code segment DPL.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) } if(((stack.flags & 0x0018) != 0x10) && (stack.flags & 0x0002) != 0) { logerror("IRQ: New stack segment is not a writable data segment.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) // #TS(stack selector + EXT) } if((stack.flags & 0x0080) == 0) { logerror("IRQ: New stack segment is not present.\n"); FAULT_EXP(FAULT_SS,(stack.selector & ~0x03)+m_ext) // #TS(stack selector + EXT) } newESP = i386_get_stack_ptr(DPL); if(type & 0x08) // 32-bit gate { if(((newESP < (V8086_MODE?36:20)) && !(stack.flags & 0x4)) || ((~stack.limit < (~(newESP - 1) + (V8086_MODE?36:20))) && (stack.flags & 0x4))) { logerror("IRQ: New stack has no space for return addresses.\n"); FAULT_EXP(FAULT_SS,0) } } else // 16-bit gate { newESP &= 0xffff; if(((newESP < (V8086_MODE?18:10)) && !(stack.flags & 0x4)) || ((~stack.limit < (~(newESP - 1) + (V8086_MODE?18:10))) && (stack.flags & 0x4))) { logerror("IRQ: New stack has no space for return addresses.\n"); FAULT_EXP(FAULT_SS,0) } } if(offset > desc.limit) { logerror("IRQ: New EIP is past code segment limit.\n"); FAULT_EXP(FAULT_GP,0) } /* change CPL before accessing the stack */ m_CPL = DPL; /* check for page fault at new stack TODO: check if stack frame crosses page boundary */ WRITE_TEST(stack.base+newESP-1); /* Load new stack segment descriptor */ m_sreg[SS].selector = stack.selector; i386_load_protected_mode_segment(&m_sreg[SS],NULL); i386_set_descriptor_accessed(stack.selector); REG32(ESP) = newESP; if(V8086_MODE) { //logerror("IRQ (%08x): Interrupt during V8086 task\n",m_pc); if(type & 0x08) { PUSH32(m_sreg[GS].selector & 0xffff); PUSH32(m_sreg[FS].selector & 0xffff); PUSH32(m_sreg[DS].selector & 0xffff); PUSH32(m_sreg[ES].selector & 0xffff); } else { PUSH16(m_sreg[GS].selector); PUSH16(m_sreg[FS].selector); PUSH16(m_sreg[DS].selector); PUSH16(m_sreg[ES].selector); } m_sreg[GS].selector = 0; m_sreg[FS].selector = 0; m_sreg[DS].selector = 0; m_sreg[ES].selector = 0; m_VM = 0; i386_load_segment_descriptor(GS); i386_load_segment_descriptor(FS); i386_load_segment_descriptor(DS); i386_load_segment_descriptor(ES); } if(type & 0x08) { // 32-bit gate PUSH32(oldSS); PUSH32(oldESP); } else { // 16-bit gate PUSH16(oldSS); PUSH16(oldESP); } SetRPL = 1; } else { int stack_limit; if((desc.flags & 0x0004) || (DPL == CPL)) { /* IRQ to same privilege */ if(V8086_MODE && !m_ext) { logerror("IRQ: Gate to same privilege from VM86 mode.\n"); FAULT_EXP(FAULT_GP,segment & ~0x03); } if(type == 0x0e || type == 0x0f) // 32-bit gate stack_limit = 10; else stack_limit = 6; // TODO: Add check for error code (2 extra bytes) if(REG32(ESP) < stack_limit) { logerror("IRQ: Stack has no space left (needs %i bytes).\n",stack_limit); FAULT_EXP(FAULT_SS,0) } if(offset > desc.limit) { logerror("IRQ: Gate segment offset is past segment limit.\n"); FAULT_EXP(FAULT_GP,0) } SetRPL = 1; } else { logerror("IRQ: Gate descriptor is non-conforming, and DPL does not equal CPL.\n"); FAULT_EXP(FAULT_GP,segment) } } } UINT32 tempSP = REG32(ESP); try { // this is ugly but the alternative is worse if(type != 0x0e && type != 0x0f) // if not 386 interrupt or trap gate { PUSH16(oldflags & 0xffff ); PUSH16(m_sreg[CS].selector ); if(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1) PUSH16(m_eip ); else PUSH16(m_prev_eip ); } else { PUSH32(oldflags & 0x00ffffff ); PUSH32(m_sreg[CS].selector ); if(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1) PUSH32(m_eip ); else PUSH32(m_prev_eip ); } } catch(UINT64 e) { REG32(ESP) = tempSP; throw e; } if(SetRPL != 0) segment = (segment & ~0x03) | m_CPL; m_sreg[CS].selector = segment; m_eip = offset; if(type == 0x0e || type == 0x06) m_IF = 0; m_TF = 0; m_NT = 0; } i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } static void i386_trap_with_error(int irq, int irq_gate, int trap_level, UINT32 error) { i386_trap(irq,irq_gate,trap_level); if(irq == 8 || irq == 10 || irq == 11 || irq == 12 || irq == 13 || irq == 14) { // for these exceptions, an error code is pushed onto the stack by the processor. // no error code is pushed for software interrupts, either. if(PROTECTED_MODE) { UINT32 entry = irq * 8; UINT32 v2,type; v2 = READ32PL0(m_idtr.base + entry + 4 ); type = (v2>>8) & 0x1F; if(type == 5) { v2 = READ32PL0(m_idtr.base + entry); v2 = READ32PL0(m_gdtr.base + ((v2 >> 16) & 0xfff8) + 4); type = (v2>>8) & 0x1F; } if(type >= 9) PUSH32(error); else PUSH16(error); } else PUSH16(error); } } static void i286_task_switch(UINT16 selector, UINT8 nested) { UINT32 tss; I386_SREG seg; UINT16 old_task; UINT8 ar_byte; // access rights byte /* TODO: Task State Segment privilege checks */ /* For tasks that aren't nested, clear the busy bit in the task's descriptor */ if(nested == 0) { if(m_task.segment & 0x0004) { ar_byte = READ8(m_ldtr.base + (m_task.segment & ~0x0007) + 5); WRITE8(m_ldtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02); } else { ar_byte = READ8(m_gdtr.base + (m_task.segment & ~0x0007) + 5); WRITE8(m_gdtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02); } } /* Save the state of the current task in the current TSS (TR register base) */ tss = m_task.base; WRITE16(tss+0x0e,m_eip & 0x0000ffff); WRITE16(tss+0x10,get_flags() & 0x0000ffff); WRITE16(tss+0x12,REG16(AX)); WRITE16(tss+0x14,REG16(CX)); WRITE16(tss+0x16,REG16(DX)); WRITE16(tss+0x18,REG16(BX)); WRITE16(tss+0x1a,REG16(SP)); WRITE16(tss+0x1c,REG16(BP)); WRITE16(tss+0x1e,REG16(SI)); WRITE16(tss+0x20,REG16(DI)); WRITE16(tss+0x22,m_sreg[ES].selector); WRITE16(tss+0x24,m_sreg[CS].selector); WRITE16(tss+0x26,m_sreg[SS].selector); WRITE16(tss+0x28,m_sreg[DS].selector); old_task = m_task.segment; /* Load task register with the selector of the incoming task */ m_task.segment = selector; memset(&seg, 0, sizeof(seg)); seg.selector = m_task.segment; i386_load_protected_mode_segment(&seg,NULL); m_task.limit = seg.limit; m_task.base = seg.base; m_task.flags = seg.flags; /* Set TS bit in CR0 */ m_cr[0] |= 0x08; /* Load incoming task state from the new task's TSS */ tss = m_task.base; m_ldtr.segment = READ16(tss+0x2a) & 0xffff; seg.selector = m_ldtr.segment; i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = seg.limit; m_ldtr.base = seg.base; m_ldtr.flags = seg.flags; m_eip = READ16(tss+0x0e); set_flags(READ16(tss+0x10)); REG16(AX) = READ16(tss+0x12); REG16(CX) = READ16(tss+0x14); REG16(DX) = READ16(tss+0x16); REG16(BX) = READ16(tss+0x18); REG16(SP) = READ16(tss+0x1a); REG16(BP) = READ16(tss+0x1c); REG16(SI) = READ16(tss+0x1e); REG16(DI) = READ16(tss+0x20); m_sreg[ES].selector = READ16(tss+0x22) & 0xffff; i386_load_segment_descriptor(ES); m_sreg[CS].selector = READ16(tss+0x24) & 0xffff; i386_load_segment_descriptor(CS); m_sreg[SS].selector = READ16(tss+0x26) & 0xffff; i386_load_segment_descriptor(SS); m_sreg[DS].selector = READ16(tss+0x28) & 0xffff; i386_load_segment_descriptor(DS); /* Set the busy bit in the new task's descriptor */ if(selector & 0x0004) { ar_byte = READ8(m_ldtr.base + (selector & ~0x0007) + 5); WRITE8(m_ldtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02); } else { ar_byte = READ8(m_gdtr.base + (selector & ~0x0007) + 5); WRITE8(m_gdtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02); } /* For nested tasks, we write the outgoing task's selector to the back-link field of the new TSS, and set the NT flag in the EFLAGS register */ if(nested != 0) { WRITE16(tss+0,old_task); m_NT = 1; } CHANGE_PC(m_eip); m_CPL = (m_sreg[SS].flags >> 5) & 3; // printf("286 Task Switch from selector %04x to %04x\n",old_task,selector); } static void i386_task_switch(UINT16 selector, UINT8 nested) { UINT32 tss; I386_SREG seg; UINT16 old_task; UINT8 ar_byte; // access rights byte UINT32 oldcr3 = m_cr[3]; /* TODO: Task State Segment privilege checks */ /* For tasks that aren't nested, clear the busy bit in the task's descriptor */ if(nested == 0) { if(m_task.segment & 0x0004) { ar_byte = READ8(m_ldtr.base + (m_task.segment & ~0x0007) + 5); WRITE8(m_ldtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02); } else { ar_byte = READ8(m_gdtr.base + (m_task.segment & ~0x0007) + 5); WRITE8(m_gdtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02); } } /* Save the state of the current task in the current TSS (TR register base) */ tss = m_task.base; WRITE32(tss+0x1c,m_cr[3]); // correct? WRITE32(tss+0x20,m_eip); WRITE32(tss+0x24,get_flags()); WRITE32(tss+0x28,REG32(EAX)); WRITE32(tss+0x2c,REG32(ECX)); WRITE32(tss+0x30,REG32(EDX)); WRITE32(tss+0x34,REG32(EBX)); WRITE32(tss+0x38,REG32(ESP)); WRITE32(tss+0x3c,REG32(EBP)); WRITE32(tss+0x40,REG32(ESI)); WRITE32(tss+0x44,REG32(EDI)); WRITE32(tss+0x48,m_sreg[ES].selector); WRITE32(tss+0x4c,m_sreg[CS].selector); WRITE32(tss+0x50,m_sreg[SS].selector); WRITE32(tss+0x54,m_sreg[DS].selector); WRITE32(tss+0x58,m_sreg[FS].selector); WRITE32(tss+0x5c,m_sreg[GS].selector); old_task = m_task.segment; /* Load task register with the selector of the incoming task */ m_task.segment = selector; memset(&seg, 0, sizeof(seg)); seg.selector = m_task.segment; i386_load_protected_mode_segment(&seg,NULL); m_task.limit = seg.limit; m_task.base = seg.base; m_task.flags = seg.flags; /* Set TS bit in CR0 */ m_cr[0] |= 0x08; /* Load incoming task state from the new task's TSS */ tss = m_task.base; m_ldtr.segment = READ32(tss+0x60) & 0xffff; seg.selector = m_ldtr.segment; i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = seg.limit; m_ldtr.base = seg.base; m_ldtr.flags = seg.flags; m_eip = READ32(tss+0x20); set_flags(READ32(tss+0x24)); REG32(EAX) = READ32(tss+0x28); REG32(ECX) = READ32(tss+0x2c); REG32(EDX) = READ32(tss+0x30); REG32(EBX) = READ32(tss+0x34); REG32(ESP) = READ32(tss+0x38); REG32(EBP) = READ32(tss+0x3c); REG32(ESI) = READ32(tss+0x40); REG32(EDI) = READ32(tss+0x44); m_sreg[ES].selector = READ32(tss+0x48) & 0xffff; i386_load_segment_descriptor(ES); m_sreg[CS].selector = READ32(tss+0x4c) & 0xffff; i386_load_segment_descriptor(CS); m_sreg[SS].selector = READ32(tss+0x50) & 0xffff; i386_load_segment_descriptor(SS); m_sreg[DS].selector = READ32(tss+0x54) & 0xffff; i386_load_segment_descriptor(DS); m_sreg[FS].selector = READ32(tss+0x58) & 0xffff; i386_load_segment_descriptor(FS); m_sreg[GS].selector = READ32(tss+0x5c) & 0xffff; i386_load_segment_descriptor(GS); /* For nested tasks, we write the outgoing task's selector to the back-link field of the new TSS, and set the NT flag in the EFLAGS register before setting cr3 as the old tss address might be gone */ if(nested != 0) { WRITE32(tss+0,old_task); m_NT = 1; } m_cr[3] = READ32(tss+0x1c); // CR3 (PDBR) if(oldcr3 != m_cr[3]) vtlb_flush_dynamic(m_vtlb); /* Set the busy bit in the new task's descriptor */ if(selector & 0x0004) { ar_byte = READ8(m_ldtr.base + (selector & ~0x0007) + 5); WRITE8(m_ldtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02); } else { ar_byte = READ8(m_gdtr.base + (selector & ~0x0007) + 5); WRITE8(m_gdtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02); } CHANGE_PC(m_eip); m_CPL = (m_sreg[SS].flags >> 5) & 3; // printf("386 Task Switch from selector %04x to %04x\n",old_task,selector); } static void i386_check_irq_line() { if(!m_smm && m_smi) { pentium_smi(); return; } /* Check if the interrupts are enabled */ if ( (m_irq_state) && m_IF ) { #ifdef SUPPORT_RDTSC m_cycles -= 2; #endif i386_trap(pic_ack(), 1, 0); m_irq_state = CLEAR_LINE; } } static void i386_protected_mode_jump(UINT16 seg, UINT32 off, int indirect, int operand32) { I386_SREG desc; I386_CALL_GATE call_gate; UINT8 CPL,DPL,RPL; UINT8 SetRPL = 0; UINT16 segment = seg; UINT32 offset = off; /* Check selector is not null */ if((segment & ~0x03) == 0) { logerror("JMP: Segment is null.\n"); FAULT(FAULT_GP,0) } /* Selector is within descriptor table limit */ if((segment & 0x04) == 0) { /* check GDT limit */ if((segment & ~0x07) > (m_gdtr.limit)) { logerror("JMP: Segment is past GDT limit.\n"); FAULT(FAULT_GP,segment & 0xfffc) } } else { /* check LDT limit */ if((segment & ~0x07) > (m_ldtr.limit)) { logerror("JMP: Segment is past LDT limit.\n"); FAULT(FAULT_GP,segment & 0xfffc) } } /* Determine segment type */ memset(&desc, 0, sizeof(desc)); desc.selector = segment; i386_load_protected_mode_segment(&desc,NULL); CPL = m_CPL; // current privilege level DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = segment & 0x03; // requested privilege level if((desc.flags & 0x0018) == 0x0018) { /* code segment */ if((desc.flags & 0x0004) == 0) { /* non-conforming */ if(RPL > CPL) { logerror("JMP: RPL %i is less than CPL %i\n",RPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(DPL != CPL) { logerror("JMP: DPL %i is not equal CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } } else { /* conforming */ if(DPL > CPL) { logerror("JMP: DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } } SetRPL = 1; if((desc.flags & 0x0080) == 0) { logerror("JMP: Segment is not present\n"); FAULT(FAULT_NP,segment & 0xfffc) } if(offset > desc.limit) { logerror("JMP: Offset is past segment limit\n"); FAULT(FAULT_GP,0) } } else { if((desc.flags & 0x0010) != 0) { logerror("JMP: Segment is a data segment\n"); FAULT(FAULT_GP,segment & 0xfffc) // #GP (cannot execute code in a data segment) } else { switch(desc.flags & 0x000f) { case 0x01: // 286 Available TSS case 0x09: // 386 Available TSS logerror("JMP: Available 386 TSS at %08x\n",m_pc); memset(&desc, 0, sizeof(desc)); desc.selector = segment; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level if(DPL < CPL) { logerror("JMP: TSS: DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(DPL < RPL) { logerror("JMP: TSS: DPL %i is less than TSS RPL %i\n",DPL,RPL); FAULT(FAULT_GP,segment & 0xfffc) } if((desc.flags & 0x0080) == 0) { logerror("JMP: TSS: Segment is not present\n"); FAULT(FAULT_GP,segment & 0xfffc) } if(desc.flags & 0x0008) i386_task_switch(desc.selector,0); else i286_task_switch(desc.selector,0); return; case 0x04: // 286 Call Gate case 0x0c: // 386 Call Gate //logerror("JMP: Call gate at %08x\n",m_pc); SetRPL = 1; memset(&call_gate, 0, sizeof(call_gate)); call_gate.segment = segment; i386_load_call_gate(&call_gate); DPL = call_gate.dpl; if(DPL < CPL) { logerror("JMP: Call Gate: DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(DPL < RPL) { logerror("JMP: Call Gate: DPL %i is less than RPL %i\n",DPL,RPL); FAULT(FAULT_GP,segment & 0xfffc) } if((desc.flags & 0x0080) == 0) { logerror("JMP: Call Gate: Segment is not present\n"); FAULT(FAULT_NP,segment & 0xfffc) } /* Now we examine the segment that the call gate refers to */ if(call_gate.selector == 0) { logerror("JMP: Call Gate: Gate selector is null\n"); FAULT(FAULT_GP,0) } if(call_gate.selector & 0x04) { if((call_gate.selector & ~0x07) > m_ldtr.limit) { logerror("JMP: Call Gate: Gate Selector is past LDT segment limit\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } else { if((call_gate.selector & ~0x07) > m_gdtr.limit) { logerror("JMP: Call Gate: Gate Selector is past GDT segment limit\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } desc.selector = call_gate.selector; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; if((desc.flags & 0x0018) != 0x18) { logerror("JMP: Call Gate: Gate does not point to a code segment\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } if((desc.flags & 0x0004) == 0) { // non-conforming if(DPL != CPL) { logerror("JMP: Call Gate: Gate DPL does not equal CPL\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } else { // conforming if(DPL > CPL) { logerror("JMP: Call Gate: Gate DPL is greater than CPL\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } if((desc.flags & 0x0080) == 0) { logerror("JMP: Call Gate: Gate Segment is not present\n"); FAULT(FAULT_NP,call_gate.selector & 0xfffc) } if(call_gate.offset > desc.limit) { logerror("JMP: Call Gate: Gate offset is past Gate segment limit\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } segment = call_gate.selector; offset = call_gate.offset; break; case 0x05: // Task Gate logerror("JMP: Task gate at %08x\n",m_pc); memset(&call_gate, 0, sizeof(call_gate)); call_gate.segment = segment; i386_load_call_gate(&call_gate); DPL = call_gate.dpl; if(DPL < CPL) { logerror("JMP: Task Gate: Gate DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(DPL < RPL) { logerror("JMP: Task Gate: Gate DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(call_gate.present == 0) { logerror("JMP: Task Gate: Gate is not present.\n"); FAULT(FAULT_GP,segment & 0xfffc) } /* Check the TSS that the task gate points to */ desc.selector = call_gate.selector; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = call_gate.selector & 0x03; // requested privilege level if(call_gate.selector & 0x04) { logerror("JMP: Task Gate TSS: TSS must be global.\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } else { if((call_gate.selector & ~0x07) > m_gdtr.limit) { logerror("JMP: Task Gate TSS: TSS is past GDT limit.\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } if((call_gate.ar & 0x000f) == 0x0009 || (call_gate.ar & 0x000f) == 0x0001) { logerror("JMP: Task Gate TSS: Segment is not an available TSS.\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } if(call_gate.present == 0) { logerror("JMP: Task Gate TSS: TSS is not present.\n"); FAULT(FAULT_NP,call_gate.selector & 0xfffc) } if(call_gate.ar & 0x08) i386_task_switch(call_gate.selector,0); else i286_task_switch(call_gate.selector,0); return; default: // invalid segment type logerror("JMP: Invalid segment type (%i) to jump to.\n",desc.flags & 0x000f); FAULT(FAULT_GP,segment & 0xfffc) } } } if(SetRPL != 0) segment = (segment & ~0x03) | m_CPL; if(operand32 == 0) m_eip = offset & 0x0000ffff; else m_eip = offset; m_sreg[CS].selector = segment; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } static void i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect, int operand32) { I386_SREG desc; I386_CALL_GATE gate; UINT8 SetRPL = 0; UINT8 CPL, DPL, RPL; UINT16 selector = seg; UINT32 offset = off; int x; if((selector & ~0x03) == 0) { logerror("CALL (%08x): Selector is null.\n",m_pc); FAULT(FAULT_GP,0) // #GP(0) } if(selector & 0x04) { if((selector & ~0x07) > m_ldtr.limit) { logerror("CALL: Selector is past LDT limit.\n"); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } } else { if((selector & ~0x07) > m_gdtr.limit) { logerror("CALL: Selector is past GDT limit.\n"); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } } /* Determine segment type */ memset(&desc, 0, sizeof(desc)); desc.selector = selector; i386_load_protected_mode_segment(&desc,NULL); CPL = m_CPL; // current privilege level DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = selector & 0x03; // requested privilege level if((desc.flags & 0x0018) == 0x18) // is a code segment { if(desc.flags & 0x0004) { /* conforming */ if(DPL > CPL) { logerror("CALL: Code segment DPL %i is greater than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } } else { /* non-conforming */ if(RPL > CPL) { logerror("CALL: RPL %i is greater than CPL %i\n",RPL,CPL); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } if(DPL != CPL) { logerror("CALL: Code segment DPL %i is not equal to CPL %i\n",DPL,CPL); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } } SetRPL = 1; if((desc.flags & 0x0080) == 0) { logerror("CALL (%08x): Code segment is not present.\n",m_pc); FAULT(FAULT_NP,selector & ~0x03) // #NP(selector) } if (operand32 != 0) // if 32-bit { UINT32 offset = (STACK_32BIT ? REG32(ESP) - 8 : (REG16(SP) - 8) & 0xffff); if(i386_limit_check(SS, offset)) { logerror("CALL (%08x): Stack has no room for return address.\n",m_pc); FAULT(FAULT_SS,0) // #SS(0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) - 4 : (REG16(SP) - 4) & 0xffff); if(i386_limit_check(SS, offset)) { logerror("CALL (%08x): Stack has no room for return address.\n",m_pc); FAULT(FAULT_SS,0) // #SS(0) } } if(offset > desc.limit) { logerror("CALL: EIP is past segment limit.\n"); FAULT(FAULT_GP,0) // #GP(0) } } else { /* special segment type */ if(desc.flags & 0x0010) { logerror("CALL: Segment is a data segment.\n"); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } else { switch(desc.flags & 0x000f) { case 0x01: // Available 286 TSS case 0x09: // Available 386 TSS logerror("CALL: Available TSS at %08x\n",m_pc); if(DPL < CPL) { logerror("CALL: TSS: DPL is less than CPL.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if(DPL < RPL) { logerror("CALL: TSS: DPL is less than RPL.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if(desc.flags & 0x0002) { logerror("CALL: TSS: TSS is busy.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if((desc.flags & 0x0080) == 0) { logerror("CALL: TSS: Segment %02x is not present.\n",selector); FAULT(FAULT_NP,selector & ~0x03) // #NP(selector) } if(desc.flags & 0x08) i386_task_switch(desc.selector,1); else i286_task_switch(desc.selector,1); return; case 0x04: // 286 call gate case 0x0c: // 386 call gate if((desc.flags & 0x000f) == 0x04) operand32 = 0; else operand32 = 1; memset(&gate, 0, sizeof(gate)); gate.segment = selector; i386_load_call_gate(&gate); DPL = gate.dpl; //logerror("CALL: Call gate at %08x (%i parameters)\n",m_pc,gate.dword_count); if(DPL < CPL) { logerror("CALL: Call gate DPL %i is less than CPL %i.\n",DPL,CPL); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } if(DPL < RPL) { logerror("CALL: Call gate DPL %i is less than RPL %i.\n",DPL,RPL); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } if(gate.present == 0) { logerror("CALL: Call gate is not present.\n"); FAULT(FAULT_NP,desc.selector & ~0x03) // #GP(selector) } desc.selector = gate.selector; if((gate.selector & ~0x03) == 0) { logerror("CALL: Call gate: Segment is null.\n"); FAULT(FAULT_GP,0) // #GP(0) } if(desc.selector & 0x04) { if((desc.selector & ~0x07) > m_ldtr.limit) { logerror("CALL: Call gate: Segment is past LDT limit\n"); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } } else { if((desc.selector & ~0x07) > m_gdtr.limit) { logerror("CALL: Call gate: Segment is past GDT limit\n"); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } } i386_load_protected_mode_segment(&desc,NULL); if((desc.flags & 0x0018) != 0x18) { logerror("CALL: Call gate: Segment is not a code segment.\n"); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } DPL = ((desc.flags >> 5) & 0x03); if(DPL > CPL) { logerror("CALL: Call gate: Segment DPL %i is greater than CPL %i.\n",DPL,CPL); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } if((desc.flags & 0x0080) == 0) { logerror("CALL (%08x): Code segment is not present.\n",m_pc); FAULT(FAULT_NP,desc.selector & ~0x03) // #NP(selector) } if(DPL < CPL && (desc.flags & 0x0004) == 0) { I386_SREG stack; I386_SREG temp; UINT32 oldSS,oldESP; /* more privilege */ /* Check new SS segment for privilege level from TSS */ memset(&stack, 0, sizeof(stack)); stack.selector = i386_get_stack_segment(DPL); i386_load_protected_mode_segment(&stack,NULL); if((stack.selector & ~0x03) == 0) { logerror("CALL: Call gate: TSS selector is null\n"); FAULT(FAULT_TS,0) // #TS(0) } if(stack.selector & 0x04) { if((stack.selector & ~0x07) > m_ldtr.limit) { logerror("CALL: Call gate: TSS selector is past LDT limit\n"); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } } else { if((stack.selector & ~0x07) > m_gdtr.limit) { logerror("CALL: Call gate: TSS selector is past GDT limit\n"); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } } if((stack.selector & 0x03) != DPL) { logerror("CALL: Call gate: Stack selector RPL does not equal code segment DPL %i\n",DPL); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } if(((stack.flags >> 5) & 0x03) != DPL) { logerror("CALL: Call gate: Stack DPL does not equal code segment DPL %i\n",DPL); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } if((stack.flags & 0x0018) != 0x10 && (stack.flags & 0x0002)) { logerror("CALL: Call gate: Stack segment is not a writable data segment\n"); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } if((stack.flags & 0x0080) == 0) { logerror("CALL: Call gate: Stack segment is not present\n"); FAULT(FAULT_SS,stack.selector) // #SS(SS selector) } UINT32 newESP = i386_get_stack_ptr(DPL); if(!stack.d) { newESP &= 0xffff; } if(operand32 != 0) { if(newESP < ((gate.dword_count & 0x1f) + 16)) { logerror("CALL: Call gate: New stack has no room for 32-bit return address and parameters.\n"); FAULT(FAULT_SS,0) // #SS(0) } if(gate.offset > desc.limit) { logerror("CALL: Call gate: EIP is past segment limit.\n"); FAULT(FAULT_GP,0) // #GP(0) } } else { if(newESP < ((gate.dword_count & 0x1f) + 8)) { logerror("CALL: Call gate: New stack has no room for 16-bit return address and parameters.\n"); FAULT(FAULT_SS,0) // #SS(0) } if((gate.offset & 0xffff) > desc.limit) { logerror("CALL: Call gate: IP is past segment limit.\n"); FAULT(FAULT_GP,0) // #GP(0) } } selector = gate.selector; offset = gate.offset; m_CPL = (stack.flags >> 5) & 0x03; /* check for page fault at new stack */ WRITE_TEST(stack.base+newESP-1); /* switch to new stack */ oldSS = m_sreg[SS].selector; m_sreg[SS].selector = i386_get_stack_segment(m_CPL); if(operand32 != 0) { oldESP = REG32(ESP); } else { oldESP = REG16(SP); } i386_load_segment_descriptor(SS ); REG32(ESP) = newESP; if(operand32 != 0) { PUSH32(oldSS); PUSH32(oldESP); } else { PUSH16(oldSS); PUSH16(oldESP & 0xffff); } memset(&temp, 0, sizeof(temp)); temp.selector = oldSS; i386_load_protected_mode_segment(&temp,NULL); /* copy parameters from old stack to new stack */ for(x=(gate.dword_count & 0x1f)-1;x>=0;x--) { UINT32 addr = oldESP + (operand32?(x*4):(x*2)); addr = temp.base + (temp.d?addr:(addr&0xffff)); if(operand32) PUSH32(READ32(addr)); else PUSH16(READ16(addr)); } SetRPL = 1; } else { /* same privilege */ if (operand32 != 0) // if 32-bit { UINT32 stkoff = (STACK_32BIT ? REG32(ESP) - 8 : (REG16(SP) - 8) & 0xffff); if(i386_limit_check(SS, stkoff)) { logerror("CALL: Stack has no room for return address.\n"); FAULT(FAULT_SS,0) // #SS(0) } selector = gate.selector; offset = gate.offset; } else { UINT32 stkoff = (STACK_32BIT ? REG32(ESP) - 4 : (REG16(SP) - 4) & 0xffff); if(i386_limit_check(SS, stkoff)) { logerror("CALL: Stack has no room for return address.\n"); FAULT(FAULT_SS,0) // #SS(0) } selector = gate.selector; offset = gate.offset & 0xffff; } if(offset > desc.limit) { logerror("CALL: EIP is past segment limit.\n"); FAULT(FAULT_GP,0) // #GP(0) } SetRPL = 1; } break; case 0x05: // task gate logerror("CALL: Task gate at %08x\n",m_pc); memset(&gate, 0, sizeof(gate)); gate.segment = selector; i386_load_call_gate(&gate); DPL = gate.dpl; if(DPL < CPL) { logerror("CALL: Task Gate: Gate DPL is less than CPL.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if(DPL < RPL) { logerror("CALL: Task Gate: Gate DPL is less than RPL.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if((gate.ar & 0x0080) == 0) { logerror("CALL: Task Gate: Gate is not present.\n"); FAULT(FAULT_NP,selector & ~0x03) // #NP(selector) } /* Check the TSS that the task gate points to */ desc.selector = gate.selector; i386_load_protected_mode_segment(&desc,NULL); if(gate.selector & 0x04) { logerror("CALL: Task Gate: TSS is not global.\n"); FAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector) } else { if((gate.selector & ~0x07) > m_gdtr.limit) { logerror("CALL: Task Gate: TSS is past GDT limit.\n"); FAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector) } } if(desc.flags & 0x0002) { logerror("CALL: Task Gate: TSS is busy.\n"); FAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector) } if((desc.flags & 0x0080) == 0) { logerror("CALL: Task Gate: TSS is not present.\n"); FAULT(FAULT_NP,gate.selector & ~0x03) // #TS(selector) } if(desc.flags & 0x08) i386_task_switch(desc.selector,1); // with nesting else i286_task_switch(desc.selector,1); return; default: logerror("CALL: Invalid special segment type (%i) to jump to.\n",desc.flags & 0x000f); FAULT(FAULT_GP,selector & ~0x07) // #GP(selector) } } } if(SetRPL != 0) selector = (selector & ~0x03) | m_CPL; UINT32 tempSP = REG32(ESP); try { // this is ugly but the alternative is worse if(operand32 == 0) { /* 16-bit operand size */ PUSH16(m_sreg[CS].selector ); PUSH16(m_eip & 0x0000ffff ); m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; m_eip = offset; i386_load_segment_descriptor(CS); } else { /* 32-bit operand size */ PUSH32(m_sreg[CS].selector ); PUSH32(m_eip ); m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; m_eip = offset; i386_load_segment_descriptor(CS ); } } catch(UINT64 e) { REG32(ESP) = tempSP; throw e; } CHANGE_PC(m_eip); } static void i386_protected_mode_retf(UINT16 count, UINT8 operand32) { UINT32 newCS, newEIP; I386_SREG desc; UINT8 CPL, RPL, DPL; UINT32 ea = i386_translate(SS, (STACK_32BIT)?REG32(ESP):REG16(SP), 0); if(operand32 == 0) { newEIP = READ16(ea) & 0xffff; newCS = READ16(ea+2) & 0xffff; } else { newEIP = READ32(ea); newCS = READ32(ea+4) & 0xffff; } memset(&desc, 0, sizeof(desc)); desc.selector = newCS; i386_load_protected_mode_segment(&desc,NULL); CPL = m_CPL; // current privilege level DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = newCS & 0x03; if(RPL < CPL) { logerror("RETF (%08x): Return segment RPL is less than CPL.\n",m_pc); FAULT(FAULT_GP,newCS & ~0x03) } if(RPL == CPL) { /* same privilege level */ if((newCS & ~0x03) == 0) { logerror("RETF: Return segment is null.\n"); FAULT(FAULT_GP,0) } if(newCS & 0x04) { if((newCS & ~0x07) >= m_ldtr.limit) { logerror("RETF: Return segment is past LDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if((newCS & ~0x07) >= m_gdtr.limit) { logerror("RETF: Return segment is past GDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0018) != 0x0018) { logerror("RETF: Return segment is not a code segment.\n"); FAULT(FAULT_GP,newCS & ~0x03) } if(desc.flags & 0x0004) { if(DPL > RPL) { logerror("RETF: Conforming code segment DPL is greater than CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if(DPL != RPL) { logerror("RETF: Non-conforming code segment DPL does not equal CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0080) == 0) { logerror("RETF (%08x): Code segment is not present.\n",m_pc); FAULT(FAULT_NP,newCS & ~0x03) } if(newEIP > desc.limit) { logerror("RETF: EIP is past code segment limit.\n"); FAULT(FAULT_GP,0) } if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+count+3) != 0) { logerror("RETF (%08x): SP is past stack segment limit.\n",m_pc); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+count+7) != 0) { logerror("RETF: ESP is past stack segment limit.\n"); FAULT(FAULT_SS,0) } } if(operand32 == 0) REG16(SP) += (4+count); else REG32(ESP) += (8+count); } else if(RPL > CPL) { UINT32 newSS, newESP; // when changing privilege /* outer privilege level */ if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+count+7) != 0) { logerror("RETF (%08x): SP is past stack segment limit.\n",m_pc); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+count+15) != 0) { logerror("RETF: ESP is past stack segment limit.\n"); FAULT(FAULT_SS,0) } } /* Check CS selector and descriptor */ if((newCS & ~0x03) == 0) { logerror("RETF: CS segment is null.\n"); FAULT(FAULT_GP,0) } if(newCS & 0x04) { if((newCS & ~0x07) >= m_ldtr.limit) { logerror("RETF: CS segment selector is past LDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if((newCS & ~0x07) >= m_gdtr.limit) { logerror("RETF: CS segment selector is past GDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0018) != 0x0018) { logerror("RETF: CS segment is not a code segment.\n"); FAULT(FAULT_GP,newCS & ~0x03) } if(desc.flags & 0x0004) { if(DPL > RPL) { logerror("RETF: Conforming CS segment DPL is greater than return selector RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if(DPL != RPL) { logerror("RETF: Non-conforming CS segment DPL is not equal to return selector RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0080) == 0) { logerror("RETF: CS segment is not present.\n"); FAULT(FAULT_NP,newCS & ~0x03) } if(newEIP > desc.limit) { logerror("RETF: EIP is past return CS segment limit.\n"); FAULT(FAULT_GP,0) } if(operand32 == 0) { ea += count+4; newESP = READ16(ea) & 0xffff; newSS = READ16(ea+2) & 0xffff; } else { ea += count+8; newESP = READ32(ea); newSS = READ32(ea+4) & 0xffff; } /* Check SS selector and descriptor */ desc.selector = newSS; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level if((newSS & ~0x07) == 0) { logerror("RETF: SS segment is null.\n"); FAULT(FAULT_GP,0) } if(newSS & 0x04) { if((newSS & ~0x07) > m_ldtr.limit) { logerror("RETF (%08x): SS segment selector is past LDT limit.\n",m_pc); FAULT(FAULT_GP,newSS & ~0x03) } } else { if((newSS & ~0x07) > m_gdtr.limit) { logerror("RETF (%08x): SS segment selector is past GDT limit.\n",m_pc); FAULT(FAULT_GP,newSS & ~0x03) } } if((newSS & 0x03) != RPL) { logerror("RETF: SS segment RPL is not equal to CS segment RPL.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((desc.flags & 0x0018) != 0x0010 || (desc.flags & 0x0002) == 0) { logerror("RETF: SS segment is not a writable data segment.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if(((desc.flags >> 5) & 0x03) != RPL) { logerror("RETF: SS DPL is not equal to CS segment RPL.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((desc.flags & 0x0080) == 0) { logerror("RETF: SS segment is not present.\n"); FAULT(FAULT_GP,newSS & ~0x03) } m_CPL = newCS & 0x03; /* Load new SS:(E)SP */ if(operand32 == 0) REG16(SP) = (newESP+count) & 0xffff; else REG32(ESP) = newESP+count; m_sreg[SS].selector = newSS; i386_load_segment_descriptor(SS ); /* Check that DS, ES, FS and GS are valid for the new privilege level */ i386_check_sreg_validity(DS); i386_check_sreg_validity(ES); i386_check_sreg_validity(FS); i386_check_sreg_validity(GS); } /* Load new CS:(E)IP */ if(operand32 == 0) m_eip = newEIP & 0xffff; else m_eip = newEIP; m_sreg[CS].selector = newCS; i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); } static void i386_protected_mode_iret(int operand32) { UINT32 newCS, newEIP; UINT32 newSS, newESP; // when changing privilege I386_SREG desc,stack; UINT8 CPL, RPL, DPL; UINT32 newflags; CPL = m_CPL; UINT32 ea = i386_translate(SS, (STACK_32BIT)?REG32(ESP):REG16(SP), 0); if(operand32 == 0) { newEIP = READ16(ea) & 0xffff; newCS = READ16(ea+2) & 0xffff; newflags = READ16(ea+4) & 0xffff; } else { newEIP = READ32(ea); newCS = READ32(ea+4) & 0xffff; newflags = READ32(ea+8); } if(V8086_MODE) { UINT32 oldflags = get_flags(); if(!m_IOP1 || !m_IOP2) { logerror("IRET (%08x): Is in Virtual 8086 mode and IOPL != 3.\n",m_pc); FAULT(FAULT_GP,0) } if(operand32 == 0) { m_eip = newEIP & 0xffff; m_sreg[CS].selector = newCS & 0xffff; newflags &= ~(3<<12); newflags |= (((oldflags>>12)&3)<<12); // IOPL cannot be changed in V86 mode set_flags((newflags & 0xffff) | (oldflags & ~0xffff)); REG16(SP) += 6; } else { m_eip = newEIP; m_sreg[CS].selector = newCS & 0xffff; newflags &= ~(3<<12); newflags |= 0x20000 | (((oldflags>>12)&3)<<12); // IOPL and VM cannot be changed in V86 mode set_flags(newflags); REG32(ESP) += 12; } } else if(NESTED_TASK) { UINT32 task = READ32(m_task.base); /* Task Return */ logerror("IRET (%08x): Nested task return.\n",m_pc); /* Check back-link selector in TSS */ if(task & 0x04) { logerror("IRET: Task return: Back-linked TSS is not in GDT.\n"); FAULT(FAULT_TS,task & ~0x03) } if((task & ~0x07) >= m_gdtr.limit) { logerror("IRET: Task return: Back-linked TSS is not in GDT.\n"); FAULT(FAULT_TS,task & ~0x03) } memset(&desc, 0, sizeof(desc)); desc.selector = task; i386_load_protected_mode_segment(&desc,NULL); if((desc.flags & 0x001f) != 0x000b) { logerror("IRET (%08x): Task return: Back-linked TSS is not a busy TSS.\n",m_pc); FAULT(FAULT_TS,task & ~0x03) } if((desc.flags & 0x0080) == 0) { logerror("IRET: Task return: Back-linked TSS is not present.\n"); FAULT(FAULT_NP,task & ~0x03) } if(desc.flags & 0x08) i386_task_switch(desc.selector,0); else i286_task_switch(desc.selector,0); return; } else { if(newflags & 0x00020000) // if returning to virtual 8086 mode { // 16-bit iret can't reach here newESP = READ32(ea+12); newSS = READ32(ea+16) & 0xffff; /* Return to v86 mode */ //logerror("IRET (%08x): Returning to Virtual 8086 mode.\n",m_pc); if(CPL != 0) { UINT32 oldflags = get_flags(); newflags = (newflags & ~0x00003000) | (oldflags & 0x00003000); } set_flags(newflags); m_eip = POP32() & 0xffff; // high 16 bits are ignored m_sreg[CS].selector = POP32() & 0xffff; POP32(); // already set flags newESP = POP32(); newSS = POP32() & 0xffff; m_sreg[ES].selector = POP32() & 0xffff; m_sreg[DS].selector = POP32() & 0xffff; m_sreg[FS].selector = POP32() & 0xffff; m_sreg[GS].selector = POP32() & 0xffff; REG32(ESP) = newESP; // all 32 bits are loaded m_sreg[SS].selector = newSS; i386_load_segment_descriptor(ES); i386_load_segment_descriptor(DS); i386_load_segment_descriptor(FS); i386_load_segment_descriptor(GS); i386_load_segment_descriptor(SS); m_CPL = 3; // Virtual 8086 tasks are always run at CPL 3 } else { if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) != 0) { logerror("IRET: Data on stack is past SS limit.\n"); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+7) != 0) { logerror("IRET: Data on stack is past SS limit.\n"); FAULT(FAULT_SS,0) } } RPL = newCS & 0x03; if(RPL < CPL) { logerror("IRET (%08x): Return CS RPL is less than CPL.\n",m_pc); FAULT(FAULT_GP,newCS & ~0x03) } if(RPL == CPL) { /* return to same privilege level */ if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+5) != 0) { logerror("IRET (%08x): Data on stack is past SS limit.\n",m_pc); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+11) != 0) { logerror("IRET (%08x): Data on stack is past SS limit.\n",m_pc); FAULT(FAULT_SS,0) } } if((newCS & ~0x03) == 0) { logerror("IRET: Return CS selector is null.\n"); FAULT(FAULT_GP,0) } if(newCS & 0x04) { if((newCS & ~0x07) >= m_ldtr.limit) { logerror("IRET: Return CS selector (%04x) is past LDT limit.\n",newCS); FAULT(FAULT_GP,newCS & ~0x03) } } else { if((newCS & ~0x07) >= m_gdtr.limit) { logerror("IRET: Return CS selector is past GDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } memset(&desc, 0, sizeof(desc)); desc.selector = newCS; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = newCS & 0x03; if((desc.flags & 0x0018) != 0x0018) { logerror("IRET (%08x): Return CS segment is not a code segment.\n",m_pc); FAULT(FAULT_GP,newCS & ~0x07) } if(desc.flags & 0x0004) { if(DPL > RPL) { logerror("IRET: Conforming return CS DPL is greater than CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if(DPL != RPL) { logerror("IRET: Non-conforming return CS DPL is not equal to CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0080) == 0) { logerror("IRET: Return CS segment is not present.\n"); FAULT(FAULT_NP,newCS & ~0x03) } if(newEIP > desc.limit) { logerror("IRET: Return EIP is past return CS limit.\n"); FAULT(FAULT_GP,0) } if(CPL != 0) { UINT32 oldflags = get_flags(); newflags = (newflags & ~0x00003000) | (oldflags & 0x00003000); } if(operand32 == 0) { m_eip = newEIP; m_sreg[CS].selector = newCS; set_flags(newflags); REG16(SP) += 6; } else { m_eip = newEIP; m_sreg[CS].selector = newCS & 0xffff; set_flags(newflags); REG32(ESP) += 12; } } else if(RPL > CPL) { /* return to outer privilege level */ memset(&desc, 0, sizeof(desc)); desc.selector = newCS; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = newCS & 0x03; if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+9) != 0) { logerror("IRET: SP is past SS limit.\n"); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+19) != 0) { logerror("IRET: ESP is past SS limit.\n"); FAULT(FAULT_SS,0) } } /* Check CS selector and descriptor */ if((newCS & ~0x03) == 0) { logerror("IRET: Return CS selector is null.\n"); FAULT(FAULT_GP,0) } if(newCS & 0x04) { if((newCS & ~0x07) >= m_ldtr.limit) { logerror("IRET: Return CS selector is past LDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03); } } else { if((newCS & ~0x07) >= m_gdtr.limit) { logerror("IRET: Return CS selector is past GDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03); } } if((desc.flags & 0x0018) != 0x0018) { logerror("IRET: Return CS segment is not a code segment.\n"); FAULT(FAULT_GP,newCS & ~0x03) } if(desc.flags & 0x0004) { if(DPL > RPL) { logerror("IRET: Conforming return CS DPL is greater than CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if(DPL != RPL) { logerror("IRET: Non-conforming return CS DPL does not equal CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0080) == 0) { logerror("IRET: Return CS segment is not present.\n"); FAULT(FAULT_NP,newCS & ~0x03) } /* Check SS selector and descriptor */ if(operand32 == 0) { newESP = READ16(ea+6) & 0xffff; newSS = READ16(ea+8) & 0xffff; } else { newESP = READ32(ea+12); newSS = READ32(ea+16) & 0xffff; } memset(&stack, 0, sizeof(stack)); stack.selector = newSS; i386_load_protected_mode_segment(&stack,NULL); DPL = (stack.flags >> 5) & 0x03; if((newSS & ~0x03) == 0) { logerror("IRET: Return SS selector is null.\n"); FAULT(FAULT_GP,0) } if(newSS & 0x04) { if((newSS & ~0x07) >= m_ldtr.limit) { logerror("IRET: Return SS selector is past LDT limit.\n"); FAULT(FAULT_GP,newSS & ~0x03); } } else { if((newSS & ~0x07) >= m_gdtr.limit) { logerror("IRET: Return SS selector is past GDT limit.\n"); FAULT(FAULT_GP,newSS & ~0x03); } } if((newSS & 0x03) != RPL) { logerror("IRET: Return SS RPL is not equal to return CS RPL.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((stack.flags & 0x0018) != 0x0010) { logerror("IRET: Return SS segment is not a data segment.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((stack.flags & 0x0002) == 0) { logerror("IRET: Return SS segment is not writable.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if(DPL != RPL) { logerror("IRET: Return SS DPL does not equal SS RPL.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((stack.flags & 0x0080) == 0) { logerror("IRET: Return SS segment is not present.\n"); FAULT(FAULT_NP,newSS & ~0x03) } if(newEIP > desc.limit) { logerror("IRET: EIP is past return CS limit.\n"); FAULT(FAULT_GP,0) } // if(operand32 == 0) // REG16(SP) += 10; // else // REG32(ESP) += 20; // IOPL can only change if CPL is zero if(CPL != 0) { UINT32 oldflags = get_flags(); newflags = (newflags & ~0x00003000) | (oldflags & 0x00003000); } if(operand32 == 0) { m_eip = newEIP & 0xffff; m_sreg[CS].selector = newCS; set_flags(newflags); REG16(SP) = newESP & 0xffff; m_sreg[SS].selector = newSS; } else { m_eip = newEIP; m_sreg[CS].selector = newCS & 0xffff; set_flags(newflags); REG32(ESP) = newESP; m_sreg[SS].selector = newSS & 0xffff; } m_CPL = newCS & 0x03; i386_load_segment_descriptor(SS); /* Check that DS, ES, FS and GS are valid for the new privilege level */ i386_check_sreg_validity(DS); i386_check_sreg_validity(ES); i386_check_sreg_validity(FS); i386_check_sreg_validity(GS); } } } i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } #include "cycles.h" static UINT8 cycle_table_rm[X86_NUM_CPUS][CYCLES_NUM_OPCODES]; static UINT8 cycle_table_pm[X86_NUM_CPUS][CYCLES_NUM_OPCODES]; #ifdef SUPPORT_RDTSC #define CYCLES_NUM(x) (m_cycles -= (x)) INLINE void CYCLES(int x) { if (PROTECTED_MODE) { m_cycles -= m_cycle_table_pm[x]; } else { m_cycles -= m_cycle_table_rm[x]; } } INLINE void CYCLES_RM(int modrm, int r, int m) { if (modrm >= 0xc0) { if (PROTECTED_MODE) { m_cycles -= m_cycle_table_pm[r]; } else { m_cycles -= m_cycle_table_rm[r]; } } else { if (PROTECTED_MODE) { m_cycles -= m_cycle_table_pm[m]; } else { m_cycles -= m_cycle_table_rm[m]; } } } #else /* i386/i486: we don't need to update cycles for rdtsc */ #define CYCLES_NUM(x) #define CYCLES(x) #define CYCLES_RM(modrm, r, m) #endif static void build_cycle_table() { int i, j; for (j=0; j < X86_NUM_CPUS; j++) { // cycle_table_rm[j] = (UINT8 *)malloc(sizeof(UINT8) * CYCLES_NUM_OPCODES); // cycle_table_pm[j] = (UINT8 *)malloc(sizeof(UINT8) * CYCLES_NUM_OPCODES); for (i=0; i < sizeof(x86_cycle_table)/sizeof(X86_CYCLE_TABLE); i++) { int opcode = x86_cycle_table[i].op; cycle_table_rm[j][opcode] = x86_cycle_table[i].cpu_cycles[j][0]; cycle_table_pm[j][opcode] = x86_cycle_table[i].cpu_cycles[j][1]; } } } static void report_invalid_opcode() { #ifndef DEBUG_MISSING_OPCODE logerror("i386: Invalid opcode %02X at %08X %s\n", m_opcode, m_pc - 1, m_lock ? "with lock" : ""); #else logerror("i386: Invalid opcode"); for (int a = 0; a < m_opcode_bytes_length; a++) logerror(" %02X", m_opcode_bytes[a]); logerror(" at %08X\n", m_opcode_pc); #endif } static void report_invalid_modrm(const char* opcode, UINT8 modrm) { #ifndef DEBUG_MISSING_OPCODE logerror("i386: Invalid %s modrm %01X at %08X\n", opcode, modrm, m_pc - 2); #else logerror("i386: Invalid %s modrm %01X", opcode, modrm); for (int a = 0; a < m_opcode_bytes_length; a++) logerror(" %02X", m_opcode_bytes[a]); logerror(" at %08X\n", m_opcode_pc); #endif i386_trap(6, 0, 0); } /* Forward declarations */ static void I386OP(decode_opcode)(); static void I386OP(decode_two_byte)(); static void I386OP(decode_three_byte38)(); static void I386OP(decode_three_byte3a)(); static void I386OP(decode_three_byte66)(); static void I386OP(decode_three_bytef2)(); static void I386OP(decode_three_bytef3)(); static void I386OP(decode_four_byte3866)(); static void I386OP(decode_four_byte3a66)(); static void I386OP(decode_four_byte38f2)(); static void I386OP(decode_four_byte3af2)(); static void I386OP(decode_four_byte38f3)(); #include "i386ops.c" #include "i386op16.c" #include "i386op32.c" #include "i486ops.c" #include "pentops.c" #include "x87ops.c" #include "i386ops.h" static void I386OP(decode_opcode)() { m_opcode = FETCH(); if(m_lock && !m_lock_table[0][m_opcode]) return I386OP(invalid)(); if( m_operand_size ) m_opcode_table1_32[m_opcode](); else m_opcode_table1_16[m_opcode](); } /* Two-byte opcode 0f xx */ static void I386OP(decode_two_byte)() { m_opcode = FETCH(); if(m_lock && !m_lock_table[1][m_opcode]) return I386OP(invalid)(); if( m_operand_size ) m_opcode_table2_32[m_opcode](); else m_opcode_table2_16[m_opcode](); } /* Three-byte opcode 0f 38 xx */ static void I386OP(decode_three_byte38)() { m_opcode = FETCH(); if (m_operand_size) m_opcode_table338_32[m_opcode](); else m_opcode_table338_16[m_opcode](); } /* Three-byte opcode 0f 3a xx */ static void I386OP(decode_three_byte3a)() { m_opcode = FETCH(); if (m_operand_size) m_opcode_table33a_32[m_opcode](); else m_opcode_table33a_16[m_opcode](); } /* Three-byte opcode prefix 66 0f xx */ static void I386OP(decode_three_byte66)() { m_opcode = FETCH(); if( m_operand_size ) m_opcode_table366_32[m_opcode](); else m_opcode_table366_16[m_opcode](); } /* Three-byte opcode prefix f2 0f xx */ static void I386OP(decode_three_bytef2)() { m_opcode = FETCH(); if( m_operand_size ) m_opcode_table3f2_32[m_opcode](); else m_opcode_table3f2_16[m_opcode](); } /* Three-byte opcode prefix f3 0f */ static void I386OP(decode_three_bytef3)() { m_opcode = FETCH(); if( m_operand_size ) m_opcode_table3f3_32[m_opcode](); else m_opcode_table3f3_16[m_opcode](); } /* Four-byte opcode prefix 66 0f 38 xx */ static void I386OP(decode_four_byte3866)() { m_opcode = FETCH(); if (m_operand_size) m_opcode_table46638_32[m_opcode](); else m_opcode_table46638_16[m_opcode](); } /* Four-byte opcode prefix 66 0f 3a xx */ static void I386OP(decode_four_byte3a66)() { m_opcode = FETCH(); if (m_operand_size) m_opcode_table4663a_32[m_opcode](); else m_opcode_table4663a_16[m_opcode](); } /* Four-byte opcode prefix f2 0f 38 xx */ static void I386OP(decode_four_byte38f2)() { m_opcode = FETCH(); if (m_operand_size) m_opcode_table4f238_32[m_opcode](); else m_opcode_table4f238_16[m_opcode](); } /* Four-byte opcode prefix f2 0f 3a xx */ static void I386OP(decode_four_byte3af2)() { m_opcode = FETCH(); if (m_operand_size) m_opcode_table4f23a_32[m_opcode](); else m_opcode_table4f23a_16[m_opcode](); } /* Four-byte opcode prefix f3 0f 38 xx */ static void I386OP(decode_four_byte38f3)() { m_opcode = FETCH(); if (m_operand_size) m_opcode_table4f338_32[m_opcode](); else m_opcode_table4f338_16[m_opcode](); } /*************************************************************************/ static void i386_postload() { int i; for (i = 0; i < 6; i++) i386_load_segment_descriptor(i); CHANGE_PC(m_eip); } static void i386_common_init(int tlbsize) { int i, j; static const int regs8[8] = {AL,CL,DL,BL,AH,CH,DH,BH}; static const int regs16[8] = {AX,CX,DX,BX,SP,BP,SI,DI}; static const int regs32[8] = {EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI}; assert((sizeof(XMM_REG)/sizeof(double)) == 2); build_cycle_table(); for( i=0; i < 256; i++ ) { int c=0; for( j=0; j < 8; j++ ) { if( i & (1 << j) ) c++; } i386_parity_table[i] = ~(c & 0x1) & 0x1; } for( i=0; i < 256; i++ ) { i386_MODRM_table[i].reg.b = regs8[(i >> 3) & 0x7]; i386_MODRM_table[i].reg.w = regs16[(i >> 3) & 0x7]; i386_MODRM_table[i].reg.d = regs32[(i >> 3) & 0x7]; i386_MODRM_table[i].rm.b = regs8[i & 0x7]; i386_MODRM_table[i].rm.w = regs16[i & 0x7]; i386_MODRM_table[i].rm.d = regs32[i & 0x7]; } m_vtlb = vtlb_alloc(AS_PROGRAM, 0, tlbsize); m_smi = false; m_lock = false; // i386_interface *intf = (i386_interface *) device->static_config(); // // if (intf != NULL) // m_smiact.resolve(intf->smiact, *device); // else // memset(&m_smiact, 0, sizeof(m_smiact)); zero_state(); } CPU_INIT( i386 ) { i386_common_init(32); build_opcode_table(OP_I386); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_I386]; m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_I386]; } static void build_opcode_table(UINT32 features) { int i; for (i=0; i < 256; i++) { m_opcode_table1_16[i] = I386OP(invalid); m_opcode_table1_32[i] = I386OP(invalid); m_opcode_table2_16[i] = I386OP(invalid); m_opcode_table2_32[i] = I386OP(invalid); m_opcode_table366_16[i] = I386OP(invalid); m_opcode_table366_32[i] = I386OP(invalid); m_opcode_table3f2_16[i] = I386OP(invalid); m_opcode_table3f2_32[i] = I386OP(invalid); m_opcode_table3f3_16[i] = I386OP(invalid); m_opcode_table3f3_32[i] = I386OP(invalid); m_lock_table[0][i] = false; m_lock_table[1][i] = false; } for (i=0; i < sizeof(x86_opcode_table)/sizeof(X86_OPCODE); i++) { const X86_OPCODE *op = &x86_opcode_table[i]; if ((op->flags & features)) { if (op->flags & OP_2BYTE) { m_opcode_table2_32[op->opcode] = op->handler32; m_opcode_table2_16[op->opcode] = op->handler16; m_opcode_table366_32[op->opcode] = op->handler32; m_opcode_table366_16[op->opcode] = op->handler16; m_lock_table[1][op->opcode] = op->lockable; } else if (op->flags & OP_3BYTE66) { m_opcode_table366_32[op->opcode] = op->handler32; m_opcode_table366_16[op->opcode] = op->handler16; } else if (op->flags & OP_3BYTEF2) { m_opcode_table3f2_32[op->opcode] = op->handler32; m_opcode_table3f2_16[op->opcode] = op->handler16; } else if (op->flags & OP_3BYTEF3) { m_opcode_table3f3_32[op->opcode] = op->handler32; m_opcode_table3f3_16[op->opcode] = op->handler16; } else if (op->flags & OP_3BYTE38) { m_opcode_table338_32[op->opcode] = op->handler32; m_opcode_table338_16[op->opcode] = op->handler16; } else if (op->flags & OP_3BYTE3A) { m_opcode_table33a_32[op->opcode] = op->handler32; m_opcode_table33a_16[op->opcode] = op->handler16; } else if (op->flags & OP_4BYTE3866) { m_opcode_table46638_32[op->opcode] = op->handler32; m_opcode_table46638_16[op->opcode] = op->handler16; } else if (op->flags & OP_4BYTE3A66) { m_opcode_table4663a_32[op->opcode] = op->handler32; m_opcode_table4663a_16[op->opcode] = op->handler16; } else if (op->flags & OP_4BYTE38F2) { m_opcode_table4f238_32[op->opcode] = op->handler32; m_opcode_table4f238_16[op->opcode] = op->handler16; } else if (op->flags & OP_4BYTE3AF2) { m_opcode_table4f23a_32[op->opcode] = op->handler32; m_opcode_table4f23a_16[op->opcode] = op->handler16; } else if (op->flags & OP_4BYTE38F3) { m_opcode_table4f338_32[op->opcode] = op->handler32; m_opcode_table4f338_16[op->opcode] = op->handler16; } else { m_opcode_table1_32[op->opcode] = op->handler32; m_opcode_table1_16[op->opcode] = op->handler16; m_lock_table[0][op->opcode] = op->lockable; } } } } static void zero_state() { memset( &m_reg, 0, sizeof(m_reg) ); memset( m_sreg, 0, sizeof(m_sreg) ); m_eip = 0; m_pc = 0; m_prev_eip = 0; m_eflags = 0; m_eflags_mask = 0; m_CF = 0; m_DF = 0; m_SF = 0; m_OF = 0; m_ZF = 0; m_PF = 0; m_AF = 0; m_IF = 0; m_TF = 0; m_IOP1 = 0; m_IOP2 = 0; m_NT = 0; m_RF = 0; m_VM = 0; m_AC = 0; m_VIF = 0; m_VIP = 0; m_ID = 0; m_CPL = 0; m_performed_intersegment_jump = 0; m_delayed_interrupt_enable = 0; memset( m_cr, 0, sizeof(m_cr) ); memset( m_dr, 0, sizeof(m_dr) ); memset( m_tr, 0, sizeof(m_tr) ); memset( &m_gdtr, 0, sizeof(m_gdtr) ); memset( &m_idtr, 0, sizeof(m_idtr) ); memset( &m_task, 0, sizeof(m_task) ); memset( &m_ldtr, 0, sizeof(m_ldtr) ); m_ext = 0; m_halted = 0; m_operand_size = 0; m_xmm_operand_size = 0; m_address_size = 0; m_operand_prefix = 0; m_address_prefix = 0; m_segment_prefix = 0; m_segment_override = 0; m_cycles = 0; m_base_cycles = 0; m_opcode = 0; m_irq_state = 0; m_a20_mask = 0; m_cpuid_max_input_value_eax = 0; m_cpuid_id0 = 0; m_cpuid_id1 = 0; m_cpuid_id2 = 0; m_cpu_version = 0; m_feature_flags = 0; m_tsc = 0; m_perfctr[0] = m_perfctr[1] = 0; memset( m_x87_reg, 0, sizeof(m_x87_reg) ); m_x87_cw = 0; m_x87_sw = 0; m_x87_tw = 0; m_x87_data_ptr = 0; m_x87_inst_ptr = 0; m_x87_opcode = 0; memset( m_sse_reg, 0, sizeof(m_sse_reg) ); m_mxcsr = 0; m_smm = false; m_smi = false; m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; m_smbase = 0; #ifdef DEBUG_MISSING_OPCODE memset( m_opcode_bytes, 0, sizeof(m_opcode_bytes) ); m_opcode_pc = 0; m_opcode_bytes_length = 0; #endif } static CPU_RESET( i386 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x9b; m_sreg[CS].valid = true; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_sreg[DS].valid = m_sreg[ES].valid = m_sreg[FS].valid = m_sreg[GS].valid = m_sreg[SS].valid =true; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_smm = false; m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; m_a20_mask = ~0; m_cr[0] = 0x7fffffe0; // reserved bits set to 1 m_eflags = 0; m_eflags_mask = 0x00037fd7; m_eip = 0xfff0; // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 3 (386), Model 0 (DX), Stepping 8 (D1) REG32(EAX) = 0; REG32(EDX) = (3 << 8) | (0 << 4) | (8); m_CPL = 0; CHANGE_PC(m_eip); } static void pentium_smi() { UINT32 smram_state = m_smbase + 0xfe00; UINT32 old_cr0 = m_cr[0]; UINT32 old_flags = get_flags(); if(m_smm) return; m_cr[0] &= ~(0x8000000d); set_flags(2); // if(!m_smiact.isnull()) // m_smiact(true); m_smm = true; m_smi_latched = false; // save state WRITE32(m_cr[4], smram_state+SMRAM_IP5_CR4); WRITE32(m_sreg[ES].limit, smram_state+SMRAM_IP5_ESLIM); WRITE32(m_sreg[ES].base, smram_state+SMRAM_IP5_ESBASE); WRITE32(m_sreg[ES].flags, smram_state+SMRAM_IP5_ESACC); WRITE32(m_sreg[CS].limit, smram_state+SMRAM_IP5_CSLIM); WRITE32(m_sreg[CS].base, smram_state+SMRAM_IP5_CSBASE); WRITE32(m_sreg[CS].flags, smram_state+SMRAM_IP5_CSACC); WRITE32(m_sreg[SS].limit, smram_state+SMRAM_IP5_SSLIM); WRITE32(m_sreg[SS].base, smram_state+SMRAM_IP5_SSBASE); WRITE32(m_sreg[SS].flags, smram_state+SMRAM_IP5_SSACC); WRITE32(m_sreg[DS].limit, smram_state+SMRAM_IP5_DSLIM); WRITE32(m_sreg[DS].base, smram_state+SMRAM_IP5_DSBASE); WRITE32(m_sreg[DS].flags, smram_state+SMRAM_IP5_DSACC); WRITE32(m_sreg[FS].limit, smram_state+SMRAM_IP5_FSLIM); WRITE32(m_sreg[FS].base, smram_state+SMRAM_IP5_FSBASE); WRITE32(m_sreg[FS].flags, smram_state+SMRAM_IP5_FSACC); WRITE32(m_sreg[GS].limit, smram_state+SMRAM_IP5_GSLIM); WRITE32(m_sreg[GS].base, smram_state+SMRAM_IP5_GSBASE); WRITE32(m_sreg[GS].flags, smram_state+SMRAM_IP5_GSACC); WRITE32(m_ldtr.flags, smram_state+SMRAM_IP5_LDTACC); WRITE32(m_ldtr.limit, smram_state+SMRAM_IP5_LDTLIM); WRITE32(m_ldtr.base, smram_state+SMRAM_IP5_LDTBASE); WRITE32(m_gdtr.limit, smram_state+SMRAM_IP5_GDTLIM); WRITE32(m_gdtr.base, smram_state+SMRAM_IP5_GDTBASE); WRITE32(m_idtr.limit, smram_state+SMRAM_IP5_IDTLIM); WRITE32(m_idtr.base, smram_state+SMRAM_IP5_IDTBASE); WRITE32(m_task.limit, smram_state+SMRAM_IP5_TRLIM); WRITE32(m_task.base, smram_state+SMRAM_IP5_TRBASE); WRITE32(m_task.flags, smram_state+SMRAM_IP5_TRACC); WRITE32(m_sreg[ES].selector, smram_state+SMRAM_ES); WRITE32(m_sreg[CS].selector, smram_state+SMRAM_CS); WRITE32(m_sreg[SS].selector, smram_state+SMRAM_SS); WRITE32(m_sreg[DS].selector, smram_state+SMRAM_DS); WRITE32(m_sreg[FS].selector, smram_state+SMRAM_FS); WRITE32(m_sreg[GS].selector, smram_state+SMRAM_GS); WRITE32(m_ldtr.segment, smram_state+SMRAM_LDTR); WRITE32(m_task.segment, smram_state+SMRAM_TR); WRITE32(m_dr[7], smram_state+SMRAM_DR7); WRITE32(m_dr[6], smram_state+SMRAM_DR6); WRITE32(REG32(EAX), smram_state+SMRAM_EAX); WRITE32(REG32(ECX), smram_state+SMRAM_ECX); WRITE32(REG32(EDX), smram_state+SMRAM_EDX); WRITE32(REG32(EBX), smram_state+SMRAM_EBX); WRITE32(REG32(ESP), smram_state+SMRAM_ESP); WRITE32(REG32(EBP), smram_state+SMRAM_EBP); WRITE32(REG32(ESI), smram_state+SMRAM_ESI); WRITE32(REG32(EDI), smram_state+SMRAM_EDI); WRITE32(m_eip, smram_state+SMRAM_EIP); WRITE32(old_flags, smram_state+SMRAM_EAX); WRITE32(m_cr[3], smram_state+SMRAM_CR3); WRITE32(old_cr0, smram_state+SMRAM_CR0); m_sreg[DS].selector = m_sreg[ES].selector = m_sreg[FS].selector = m_sreg[GS].selector = m_sreg[SS].selector = 0; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffffffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x8093; m_sreg[DS].valid = m_sreg[ES].valid = m_sreg[FS].valid = m_sreg[GS].valid = m_sreg[SS].valid =true; m_sreg[CS].selector = 0x3000; // pentium only, ppro sel = smbase >> 4 m_sreg[CS].base = m_smbase; m_sreg[CS].limit = 0xffffffff; m_sreg[CS].flags = 0x809b; m_sreg[CS].valid = true; m_cr[4] = 0; m_dr[7] = 0x400; m_eip = 0x8000; m_nmi_masked = true; CHANGE_PC(m_eip); } static void i386_set_irq_line(int irqline, int state) { if (state != CLEAR_LINE && m_halted) { m_halted = 0; } if ( irqline == INPUT_LINE_NMI ) { /* NMI (I do not think that this is 100% right) */ if(m_nmi_masked) { m_nmi_latched = true; return; } if ( state ) i386_trap(2, 1, 0); } else { m_irq_state = state; } } static void i386_set_a20_line(int state) { if (state) { m_a20_mask = ~0; } else { m_a20_mask = ~(1 << 20); } // TODO: how does A20M and the tlb interact vtlb_flush_dynamic(m_vtlb); } static CPU_EXECUTE( i386 ) { #ifdef SUPPORT_RDTSC m_cycles = 1; int cycles = m_cycles; m_base_cycles = cycles; #endif CHANGE_PC(m_eip); // if (m_halted) // { // m_tsc += cycles; // m_cycles = 0; // return; // } // while( m_cycles > 0 ) // { i386_check_irq_line(); m_operand_size = m_sreg[CS].d; m_xmm_operand_size = 0; m_address_size = m_sreg[CS].d; m_operand_prefix = 0; m_address_prefix = 0; m_ext = 1; int old_tf = m_TF; m_segment_prefix = 0; m_prev_eip = m_eip; // debugger_instruction_hook(device, m_pc); if(m_delayed_interrupt_enable != 0) { m_IF = 1; m_delayed_interrupt_enable = 0; } #ifdef DEBUG_MISSING_OPCODE m_opcode_bytes_length = 0; m_opcode_pc = m_pc; #endif try { I386OP(decode_opcode)(); if(m_TF && old_tf) { m_prev_eip = m_eip; m_ext = 1; i386_trap(1,0,0); } if(m_lock && (m_opcode != 0xf0)) m_lock = false; } catch(UINT64 e) { m_ext = 1; i386_trap_with_error(e&0xffffffff,0,0,e>>32); } // } #ifdef SUPPORT_RDTSC m_tsc += (cycles - m_cycles); #endif } /*************************************************************************/ static CPU_TRANSLATE( i386 ) { int ret = TRUE; if(space == AS_PROGRAM) ret = i386_translate_address(intention, address, NULL); *address &= m_a20_mask; return ret; } /*****************************************************************************/ /* Intel 486 */ static CPU_INIT( i486 ) { i386_common_init(32); build_opcode_table(OP_I386 | OP_FPU | OP_I486); build_x87_opcode_table(); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_I486]; m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_I486]; } static CPU_RESET( i486 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x00000010; m_eflags = 0; m_eflags_mask = 0x00077fd7; m_eip = 0xfff0; m_smm = false; m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 4 (486), Model 0/1 (DX), Stepping 3 REG32(EAX) = 0; REG32(EDX) = (4 << 8) | (0 << 4) | (3); CHANGE_PC(m_eip); } /*****************************************************************************/ /* Pentium */ static CPU_INIT( pentium ) { // 64 dtlb small, 8 dtlb large, 32 itlb i386_common_init(96); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM); build_x87_opcode_table(); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; } static CPU_RESET( pentium ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x00000010; m_eflags = 0x00200000; m_eflags_mask = 0x003f7fd7; m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 5 (Pentium), Model 2 (75 - 200MHz), Stepping 5 REG32(EAX) = 0; REG32(EDX) = (5 << 8) | (2 << 4) | (5); m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x01; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip // [ 2:2] I/O breakpoints // [ 4:4] Time Stamp Counter // [ 5:5] Pentium CPU style model specific registers // [ 7:7] Machine Check Exception // [ 8:8] CMPXCHG8B instruction m_feature_flags = 0x000001bf; CHANGE_PC(m_eip); } /*****************************************************************************/ /* Cyrix MediaGX */ static CPU_INIT( mediagx ) { // probably 32 unified i386_common_init(32); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_CYRIX); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_MEDIAGX]; m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_MEDIAGX]; } static CPU_RESET( mediagx ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x00000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_smm = false; m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 4, Model 4 (MediaGX) REG32(EAX) = 0; REG32(EDX) = (4 << 8) | (4 << 4) | (1); /* TODO: is this correct? */ m_cpuid_id0 = 0x69727943; // Cyri m_cpuid_id1 = 0x736e4978; // xIns m_cpuid_id2 = 0x6d616574; // tead m_cpuid_max_input_value_eax = 0x01; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip m_feature_flags = 0x00000001; CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium Pro */ static CPU_INIT( pentium_pro ) { // 64 dtlb small, 32 itlb i386_common_init(96); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium_pro ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 6, Model 1 (Pentium Pro) REG32(EAX) = 0; REG32(EDX) = (6 << 8) | (1 << 4) | (1); /* TODO: is this correct? */ m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x02; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip // [ 2:2] I/O breakpoints // [ 4:4] Time Stamp Counter // [ 5:5] Pentium CPU style model specific registers // [ 7:7] Machine Check Exception // [ 8:8] CMPXCHG8B instruction // [15:15] CMOV and FCMOV // No MMX m_feature_flags = 0x000081bf; CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium MMX */ static CPU_INIT( pentium_mmx ) { // 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large i386_common_init(96); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_MMX); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium_mmx ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 5, Model 4 (P55C) REG32(EAX) = 0; REG32(EDX) = (5 << 8) | (4 << 4) | (1); m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x01; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip // [ 2:2] I/O breakpoints // [ 4:4] Time Stamp Counter // [ 5:5] Pentium CPU style model specific registers // [ 7:7] Machine Check Exception // [ 8:8] CMPXCHG8B instruction // [23:23] MMX instructions m_feature_flags = 0x008001bf; CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium II */ static CPU_INIT( pentium2 ) { // 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large i386_common_init(96); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium2 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 6, Model 3 (Pentium II / Klamath) REG32(EAX) = 0; REG32(EDX) = (6 << 8) | (3 << 4) | (1); /* TODO: is this correct? */ m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x02; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip m_feature_flags = 0x008081bf; // TODO: enable relevant flags here CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium III */ static CPU_INIT( pentium3 ) { // 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large i386_common_init(96); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX | OP_SSE); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium3 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 6, Model 8 (Pentium III / Coppermine) REG32(EAX) = 0; REG32(EDX) = (6 << 8) | (8 << 4) | (10); m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x03; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip // [ 4:4] Time Stamp Counter // [ D:D] PTE Global Bit m_feature_flags = 0x00002011; // TODO: enable relevant flags here CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium 4 */ static CPU_INIT( pentium4 ) { // 128 dtlb, 64 itlb i386_common_init(196); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX | OP_SSE | OP_SSE2); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium4 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [27:20] Extended family // [19:16] Extended model // [13:12] Type // [11: 8] Family // [ 7: 4] Model // [ 3: 0] Stepping ID // Family 15, Model 0 (Pentium 4 / Willamette) REG32(EAX) = 0; REG32(EDX) = (0 << 20) | (0xf << 8) | (0 << 4) | (1); m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x02; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip m_feature_flags = 0x00000001; // TODO: enable relevant flags here CHANGE_PC(m_eip); } ================================================ FILE: vm86/mame/emu/cpu/i386/i386.h ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett #pragma once #ifndef __I386INTF_H__ #define __I386INTF_H__ #define INPUT_LINE_A20 1 #define INPUT_LINE_SMI 2 struct i386_interface { devcb_write_line smiact; }; // mingw has this defined for 32-bit compiles #undef i386 DECLARE_LEGACY_CPU_DEVICE(I386, i386); DECLARE_LEGACY_CPU_DEVICE(I386SX, i386SX); DECLARE_LEGACY_CPU_DEVICE(I486, i486); DECLARE_LEGACY_CPU_DEVICE(PENTIUM, pentium); DECLARE_LEGACY_CPU_DEVICE(MEDIAGX, mediagx); DECLARE_LEGACY_CPU_DEVICE(PENTIUM_PRO, pentium_pro); DECLARE_LEGACY_CPU_DEVICE(PENTIUM_MMX, pentium_mmx); DECLARE_LEGACY_CPU_DEVICE(PENTIUM2, pentium2); DECLARE_LEGACY_CPU_DEVICE(PENTIUM3, pentium3); DECLARE_LEGACY_CPU_DEVICE(PENTIUM4, pentium4); #endif /* __I386INTF_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i386/i386dasm.c ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde /* i386 Disassembler Written by Ville Linde */ //#include "emu.h" enum { PARAM_REG = 1, /* 16 or 32-bit register */ PARAM_REG8, /* 8-bit register */ PARAM_REG16, /* 16-bit register */ PARAM_REG32, /* 32-bit register */ PARAM_REG3264, /* 32-bit or 64-bit register */ PARAM_REG2_32, /* 32-bit register */ PARAM_MMX, /* MMX register */ PARAM_MMX2, /* MMX register in modrm */ PARAM_XMM, /* XMM register */ PARAM_RM, /* 16 or 32-bit memory or register */ PARAM_RM8, /* 8-bit memory or register */ PARAM_RM16, /* 16-bit memory or register */ PARAM_RM32, /* 32-bit memory or register */ PARAM_RMPTR, /* 16 or 32-bit memory or register */ PARAM_RMPTR8, /* 8-bit memory or register */ PARAM_RMPTR16, /* 16-bit memory or register */ PARAM_RMPTR32, /* 32-bit memory or register */ PARAM_RMXMM, /* 32 or 64-bit memory or register */ PARAM_REGORXMM, /* 32 or 64-bit register or XMM register */ PARAM_M64, /* 64-bit memory */ PARAM_M64PTR, /* 64-bit memory */ PARAM_MMXM, /* 64-bit memory or MMX register */ PARAM_XMMM, /* 128-bit memory or XMM register */ PARAM_I4, /* 4-bit signed immediate */ PARAM_I8, /* 8-bit signed immediate */ PARAM_I16, /* 16-bit signed immediate */ PARAM_UI8, /* 8-bit unsigned immediate */ PARAM_UI16, /* 16-bit unsigned immediate */ PARAM_IMM, /* 16 or 32-bit immediate */ PARAM_IMM64, /* 16, 32 or 64-bit immediate */ PARAM_ADDR, /* 16:16 or 16:32 address */ PARAM_REL, /* 16 or 32-bit PC-relative displacement */ PARAM_REL8, /* 8-bit PC-relative displacement */ PARAM_MEM_OFFS, /* 16 or 32-bit mem offset */ PARAM_PREIMP, /* prefix with implicit register */ PARAM_SREG, /* segment register */ PARAM_CREG, /* control register */ PARAM_DREG, /* debug register */ PARAM_TREG, /* test register */ PARAM_1, /* used by shift/rotate instructions */ PARAM_AL, PARAM_CL, PARAM_DL, PARAM_BL, PARAM_AH, PARAM_CH, PARAM_DH, PARAM_BH, PARAM_DX, PARAM_EAX, /* EAX or AX */ PARAM_ECX, /* ECX or CX */ PARAM_EDX, /* EDX or DX */ PARAM_EBX, /* EBX or BX */ PARAM_ESP, /* ESP or SP */ PARAM_EBP, /* EBP or BP */ PARAM_ESI, /* ESI or SI */ PARAM_EDI, /* EDI or DI */ PARAM_XMM0, PARAM_XMM64, /* 64-bit memory or XMM register */ PARAM_XMM32, /* 32-bit memory or XMM register */ PARAM_XMM16, /* 16-bit memory or XMM register */ }; enum { MODRM = 1, GROUP, FPU, OP_SIZE, ADDR_SIZE, TWO_BYTE, PREFIX, SEG_CS, SEG_DS, SEG_ES, SEG_FS, SEG_GS, SEG_SS, ISREX, THREE_BYTE /* [prefix] 0f op1 op2 and then mod/rm */ }; #define FLAGS_MASK 0x0ff #define VAR_NAME 0x100 #define VAR_NAME4 0x200 #define ALWAYS64 0x400 #define SPECIAL64 0x800 #define SPECIAL64_ENT(x) (SPECIAL64 | ((x) << 24)) #define GROUP_MOD 0x1000 struct I386_OPCODE { const char *mnemonic; UINT32 flags; UINT32 param1; UINT32 param2; UINT32 param3; offs_t dasm_flags; }; struct GROUP_OP { char mnemonic[32]; const I386_OPCODE *opcode; }; static const UINT8 *opcode_ptr; static const UINT8 *opcode_ptr_base; static const I386_OPCODE i386_opcode_table1[256] = { // 0x00 {"add", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"add", MODRM, PARAM_RM, PARAM_REG, 0 }, {"add", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"add", MODRM, PARAM_REG, PARAM_RM, 0 }, {"add", 0, PARAM_AL, PARAM_UI8, 0 }, {"add", 0, PARAM_EAX, PARAM_IMM, 0 }, {"push es", 0, 0, 0, 0 }, {"pop es", 0, 0, 0, 0 }, {"or", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"or", MODRM, PARAM_RM, PARAM_REG, 0 }, {"or", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"or", MODRM, PARAM_REG, PARAM_RM, 0 }, {"or", 0, PARAM_AL, PARAM_UI8, 0 }, {"or", 0, PARAM_EAX, PARAM_IMM, 0 }, {"push cs", 0, 0, 0, 0 }, {"two_byte", TWO_BYTE, 0, 0, 0 }, // 0x10 {"adc", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"adc", MODRM, PARAM_RM, PARAM_REG, 0 }, {"adc", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"adc", MODRM, PARAM_REG, PARAM_RM, 0 }, {"adc", 0, PARAM_AL, PARAM_UI8, 0 }, {"adc", 0, PARAM_EAX, PARAM_IMM, 0 }, {"push ss", 0, 0, 0, 0 }, {"pop ss", 0, 0, 0, 0 }, {"sbb", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"sbb", MODRM, PARAM_RM, PARAM_REG, 0 }, {"sbb", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"sbb", MODRM, PARAM_REG, PARAM_RM, 0 }, {"sbb", 0, PARAM_AL, PARAM_UI8, 0 }, {"sbb", 0, PARAM_EAX, PARAM_IMM, 0 }, {"push ds", 0, 0, 0, 0 }, {"pop ds", 0, 0, 0, 0 }, // 0x20 {"and", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"and", MODRM, PARAM_RM, PARAM_REG, 0 }, {"and", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"and", MODRM, PARAM_REG, PARAM_RM, 0 }, {"and", 0, PARAM_AL, PARAM_UI8, 0 }, {"and", 0, PARAM_EAX, PARAM_IMM, 0 }, {"seg_es", SEG_ES, 0, 0, 0 }, {"daa", 0, 0, 0, 0 }, {"sub", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"sub", MODRM, PARAM_RM, PARAM_REG, 0 }, {"sub", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"sub", MODRM, PARAM_REG, PARAM_RM, 0 }, {"sub", 0, PARAM_AL, PARAM_UI8, 0 }, {"sub", 0, PARAM_EAX, PARAM_IMM, 0 }, {"seg_cs", SEG_CS, 0, 0, 0 }, {"das", 0, 0, 0, 0 }, // 0x30 {"xor", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"xor", MODRM, PARAM_RM, PARAM_REG, 0 }, {"xor", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"xor", MODRM, PARAM_REG, PARAM_RM, 0 }, {"xor", 0, PARAM_AL, PARAM_UI8, 0 }, {"xor", 0, PARAM_EAX, PARAM_IMM, 0 }, {"seg_ss", SEG_SS, 0, 0, 0 }, {"aaa", 0, 0, 0, 0 }, {"cmp", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"cmp", MODRM, PARAM_RM, PARAM_REG, 0 }, {"cmp", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"cmp", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmp", 0, PARAM_AL, PARAM_UI8, 0 }, {"cmp", 0, PARAM_EAX, PARAM_IMM, 0 }, {"seg_ds", SEG_DS, 0, 0, 0 }, {"aas", 0, 0, 0, 0 }, // 0x40 {"inc", ISREX, PARAM_EAX, 0, 0 }, {"inc", ISREX, PARAM_ECX, 0, 0 }, {"inc", ISREX, PARAM_EDX, 0, 0 }, {"inc", ISREX, PARAM_EBX, 0, 0 }, {"inc", ISREX, PARAM_ESP, 0, 0 }, {"inc", ISREX, PARAM_EBP, 0, 0 }, {"inc", ISREX, PARAM_ESI, 0, 0 }, {"inc", ISREX, PARAM_EDI, 0, 0 }, {"dec", ISREX, PARAM_EAX, 0, 0 }, {"dec", ISREX, PARAM_ECX, 0, 0 }, {"dec", ISREX, PARAM_EDX, 0, 0 }, {"dec", ISREX, PARAM_EBX, 0, 0 }, {"dec", ISREX, PARAM_ESP, 0, 0 }, {"dec", ISREX, PARAM_EBP, 0, 0 }, {"dec", ISREX, PARAM_ESI, 0, 0 }, {"dec", ISREX, PARAM_EDI, 0, 0 }, // 0x50 {"push", ALWAYS64, PARAM_EAX, 0, 0 }, {"push", ALWAYS64, PARAM_ECX, 0, 0 }, {"push", ALWAYS64, PARAM_EDX, 0, 0 }, {"push", ALWAYS64, PARAM_EBX, 0, 0 }, {"push", ALWAYS64, PARAM_ESP, 0, 0 }, {"push", ALWAYS64, PARAM_EBP, 0, 0 }, {"push", ALWAYS64, PARAM_ESI, 0, 0 }, {"push", ALWAYS64, PARAM_EDI, 0, 0 }, {"pop", ALWAYS64, PARAM_EAX, 0, 0 }, {"pop", ALWAYS64, PARAM_ECX, 0, 0 }, {"pop", ALWAYS64, PARAM_EDX, 0, 0 }, {"pop", ALWAYS64, PARAM_EBX, 0, 0 }, {"pop", ALWAYS64, PARAM_ESP, 0, 0 }, {"pop", ALWAYS64, PARAM_EBP, 0, 0 }, {"pop", ALWAYS64, PARAM_ESI, 0, 0 }, {"pop", ALWAYS64, PARAM_EDI, 0, 0 }, // 0x60 {"pusha\0pushad\0",VAR_NAME,0, 0, 0 }, {"popa\0popad\0", VAR_NAME,0, 0, 0 }, {"bound", MODRM, PARAM_REG, PARAM_RM, 0 }, {"arpl", MODRM | SPECIAL64_ENT(0),PARAM_RM, PARAM_REG16, 0 }, {"seg_fs", SEG_FS, 0, 0, 0 }, {"seg_gs", SEG_GS, 0, 0, 0 }, {"op_size", OP_SIZE, 0, 0, 0 }, {"addr_size", ADDR_SIZE, 0, 0, 0 }, {"push", 0, PARAM_IMM, 0, 0 }, {"imul", MODRM, PARAM_REG, PARAM_RM, PARAM_IMM }, {"push", 0, PARAM_I8, 0, 0 }, {"imul", MODRM, PARAM_REG, PARAM_RM, PARAM_I8 }, {"insb", 0, 0, 0, 0 }, {"insw\0insd\0insd",VAR_NAME, 0, 0, 0 }, {"outsb", 0, PARAM_PREIMP, 0, 0 }, {"outsw\0outsd\0outsd",VAR_NAME, PARAM_PREIMP, 0, 0 }, // 0x70 {"jo", 0, PARAM_REL8, 0, 0 }, {"jno", 0, PARAM_REL8, 0, 0 }, {"jb", 0, PARAM_REL8, 0, 0 }, {"jae", 0, PARAM_REL8, 0, 0 }, {"je", 0, PARAM_REL8, 0, 0 }, {"jne", 0, PARAM_REL8, 0, 0 }, {"jbe", 0, PARAM_REL8, 0, 0 }, {"ja", 0, PARAM_REL8, 0, 0 }, {"js", 0, PARAM_REL8, 0, 0 }, {"jns", 0, PARAM_REL8, 0, 0 }, {"jp", 0, PARAM_REL8, 0, 0 }, {"jnp", 0, PARAM_REL8, 0, 0 }, {"jl", 0, PARAM_REL8, 0, 0 }, {"jge", 0, PARAM_REL8, 0, 0 }, {"jle", 0, PARAM_REL8, 0, 0 }, {"jg", 0, PARAM_REL8, 0, 0 }, // 0x80 {"group80", GROUP, 0, 0, 0 }, {"group81", GROUP, 0, 0, 0 }, {"group80", GROUP, 0, 0, 0 }, {"group83", GROUP, 0, 0, 0 }, {"test", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"test", MODRM, PARAM_RM, PARAM_REG, 0 }, {"xchg", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"xchg", MODRM, PARAM_REG, PARAM_RM, 0 }, {"mov", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"mov", MODRM, PARAM_RM, PARAM_REG, 0 }, {"mov", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"mov", MODRM, PARAM_REG, PARAM_RM, 0 }, {"mov", MODRM, PARAM_RM, PARAM_SREG, 0 }, {"lea", MODRM, PARAM_REG, PARAM_RM, 0 }, {"mov", MODRM, PARAM_SREG, PARAM_RM, 0 }, {"pop", MODRM, PARAM_RM, 0, 0 }, // 0x90 {"nop\0???\0???\0pause", VAR_NAME4, 0, 0, 0 }, {"xchg", 0, PARAM_EAX, PARAM_ECX, 0 }, {"xchg", 0, PARAM_EAX, PARAM_EDX, 0 }, {"xchg", 0, PARAM_EAX, PARAM_EBX, 0 }, {"xchg", 0, PARAM_EAX, PARAM_ESP, 0 }, {"xchg", 0, PARAM_EAX, PARAM_EBP, 0 }, {"xchg", 0, PARAM_EAX, PARAM_ESI, 0 }, {"xchg", 0, PARAM_EAX, PARAM_EDI, 0 }, {"cbw\0cwde\0cdqe", VAR_NAME, 0, 0, 0 }, {"cwd\0cdq\0cqo", VAR_NAME, 0, 0, 0 }, {"call", ALWAYS64, PARAM_ADDR, 0, 0, DASMFLAG_STEP_OVER}, {"wait", 0, 0, 0, 0 }, {"pushf\0pushfd\0pushfq",VAR_NAME, 0, 0, 0 }, {"popf\0popfd\0popfq",VAR_NAME, 0, 0, 0 }, {"sahf", 0, 0, 0, 0 }, {"lahf", 0, 0, 0, 0 }, // 0xa0 {"mov", 0, PARAM_AL, PARAM_MEM_OFFS, 0 }, {"mov", 0, PARAM_EAX, PARAM_MEM_OFFS, 0 }, {"mov", 0, PARAM_MEM_OFFS, PARAM_AL, 0 }, {"mov", 0, PARAM_MEM_OFFS, PARAM_EAX, 0 }, {"movsb", 0, PARAM_PREIMP, 0, 0 }, {"movsw\0movsd\0movsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, {"cmpsb", 0, PARAM_PREIMP, 0, 0 }, {"cmpsw\0cmpsd\0cmpsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, {"test", 0, PARAM_AL, PARAM_UI8, 0 }, {"test", 0, PARAM_EAX, PARAM_IMM, 0 }, {"stosb", 0, 0, 0, 0 }, {"stosw\0stosd\0stosq",VAR_NAME, 0, 0, 0 }, {"lodsb", 0, PARAM_PREIMP, 0, 0 }, {"lodsw\0lodsd\0lodsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, {"scasb", 0, 0, 0, 0 }, {"scasw\0scasd\0scasq",VAR_NAME, 0, 0, 0 }, // 0xb0 {"mov", 0, PARAM_AL, PARAM_UI8, 0 }, {"mov", 0, PARAM_CL, PARAM_UI8, 0 }, {"mov", 0, PARAM_DL, PARAM_UI8, 0 }, {"mov", 0, PARAM_BL, PARAM_UI8, 0 }, {"mov", 0, PARAM_AH, PARAM_UI8, 0 }, {"mov", 0, PARAM_CH, PARAM_UI8, 0 }, {"mov", 0, PARAM_DH, PARAM_UI8, 0 }, {"mov", 0, PARAM_BH, PARAM_UI8, 0 }, {"mov", 0, PARAM_EAX, PARAM_IMM64, 0 }, {"mov", 0, PARAM_ECX, PARAM_IMM64, 0 }, {"mov", 0, PARAM_EDX, PARAM_IMM64, 0 }, {"mov", 0, PARAM_EBX, PARAM_IMM64, 0 }, {"mov", 0, PARAM_ESP, PARAM_IMM64, 0 }, {"mov", 0, PARAM_EBP, PARAM_IMM64, 0 }, {"mov", 0, PARAM_ESI, PARAM_IMM64, 0 }, {"mov", 0, PARAM_EDI, PARAM_IMM64, 0 }, // 0xc0 {"groupC0", GROUP, 0, 0, 0 }, {"groupC1", GROUP, 0, 0, 0 }, {"ret", 0, PARAM_UI16, 0, 0, DASMFLAG_STEP_OUT}, {"ret", 0, 0, 0, 0, DASMFLAG_STEP_OUT}, {"les", MODRM, PARAM_REG, PARAM_RM, 0 }, {"lds", MODRM, PARAM_REG, PARAM_RM, 0 }, {"mov", MODRM, PARAM_RMPTR8, PARAM_UI8, 0 }, {"mov", MODRM, PARAM_RMPTR, PARAM_IMM, 0 }, {"enter", 0, PARAM_UI16, PARAM_UI8, 0 }, {"leave", 0, 0, 0, 0 }, {"retf", 0, PARAM_UI16, 0, 0, DASMFLAG_STEP_OUT}, {"retf", 0, 0, 0, 0, DASMFLAG_STEP_OUT}, {"int 3", 0, 0, 0, 0, DASMFLAG_STEP_OVER}, {"int", 0, PARAM_UI8, 0, 0, DASMFLAG_STEP_OVER}, {"into", 0, 0, 0, 0 }, {"iret", 0, 0, 0, 0, DASMFLAG_STEP_OUT}, // 0xd0 {"groupD0", GROUP, 0, 0, 0 }, {"groupD1", GROUP, 0, 0, 0 }, {"groupD2", GROUP, 0, 0, 0 }, {"groupD3", GROUP, 0, 0, 0 }, {"aam", 0, PARAM_UI8, 0, 0 }, {"aad", 0, PARAM_UI8, 0, 0 }, {"salc", 0, 0, 0, 0 }, //AMD docs name it {"xlat", 0, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, // 0xe0 {"loopne", 0, PARAM_REL8, 0, 0, DASMFLAG_STEP_OVER}, {"loopz", 0, PARAM_REL8, 0, 0, DASMFLAG_STEP_OVER}, {"loop", 0, PARAM_REL8, 0, 0, DASMFLAG_STEP_OVER}, {"jcxz\0jecxz\0jrcxz",VAR_NAME, PARAM_REL8, 0, 0 }, {"in", 0, PARAM_AL, PARAM_UI8, 0 }, {"in", 0, PARAM_EAX, PARAM_UI8, 0 }, {"out", 0, PARAM_UI8, PARAM_AL, 0 }, {"out", 0, PARAM_UI8, PARAM_EAX, 0 }, {"call", 0, PARAM_REL, 0, 0, DASMFLAG_STEP_OVER}, {"jmp", 0, PARAM_REL, 0, 0 }, {"jmp", 0, PARAM_ADDR, 0, 0 }, {"jmp", 0, PARAM_REL8, 0, 0 }, {"in", 0, PARAM_AL, PARAM_DX, 0 }, {"in", 0, PARAM_EAX, PARAM_DX, 0 }, {"out", 0, PARAM_DX, PARAM_AL, 0 }, {"out", 0, PARAM_DX, PARAM_EAX, 0 }, // 0xf0 {"lock", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"repne", PREFIX, 0, 0, 0 }, {"rep", PREFIX, 0, 0, 0 }, {"hlt", 0, 0, 0, 0 }, {"cmc", 0, 0, 0, 0 }, {"groupF6", GROUP, 0, 0, 0 }, {"groupF7", GROUP, 0, 0, 0 }, {"clc", 0, 0, 0, 0 }, {"stc", 0, 0, 0, 0 }, {"cli", 0, 0, 0, 0 }, {"sti", 0, 0, 0, 0 }, {"cld", 0, 0, 0, 0 }, {"std", 0, 0, 0, 0 }, {"groupFE", GROUP, 0, 0, 0 }, {"groupFF", GROUP, 0, 0, 0 } }; static const I386_OPCODE x64_opcode_alt[] = { {"movsxd", MODRM | ALWAYS64,PARAM_REG, PARAM_RMPTR32, 0 }, }; static const I386_OPCODE i386_opcode_table2[256] = { // 0x00 {"group0F00", GROUP, 0, 0, 0 }, {"group0F01", GROUP, 0, 0, 0 }, {"lar", MODRM, PARAM_REG, PARAM_RM, 0 }, {"lsl", MODRM, PARAM_REG, PARAM_RM, 0 }, {"???", 0, 0, 0, 0 }, {"syscall", 0, 0, 0, 0 }, {"clts", 0, 0, 0, 0 }, {"sysret", 0, 0, 0, 0 }, {"invd", 0, 0, 0, 0 }, {"wbinvd", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"ud2", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"group0F0D", GROUP, 0, 0, 0 }, //AMD only {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x10 {"movups\0" "movupd\0" "movsd\0" "movss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movups\0" "movupd\0" "movsd\0" "movss", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"movlps\0" "movlpd\0" "movddup\0" "movsldup", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movlps\0" "movlpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"unpcklps\0" "unpcklpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"unpckhps\0" "unpckhpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, { "group0F16", GROUP|GROUP_MOD, 0, 0, 0 }, {"movhps\0" "movhpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"group0F18", GROUP, 0, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, // 0x20 {"mov", MODRM, PARAM_REG2_32, PARAM_CREG, 0 }, {"mov", MODRM, PARAM_REG2_32, PARAM_DREG, 0 }, {"mov", MODRM, PARAM_CREG, PARAM_REG2_32, 0 }, {"mov", MODRM, PARAM_DREG, PARAM_REG2_32, 0 }, {"mov", MODRM, PARAM_REG2_32, PARAM_TREG, 0 }, {"???", 0, 0, 0, 0 }, {"mov", MODRM, PARAM_TREG, PARAM_REG2_32, 0 }, {"???", 0, 0, 0, 0 }, {"movaps\0" "movapd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movaps\0" "movapd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"cvtpi2ps\0" "cvtpi2pd\0" "cvtsi2sd\0" "cvtsi2ss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_RMXMM, 0 }, {"movntps\0" "movntpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"cvttps2pi\0" "cvttpd2pi\0" "cvttsd2si\0" "cvttss2si", MODRM|VAR_NAME4,PARAM_REGORXMM, PARAM_XMMM, 0 }, {"cvtps2pi\0" "cvtpd2pi\0" "cvtsd2si\0" "cvtss2si", MODRM|VAR_NAME4,PARAM_REGORXMM, PARAM_XMMM, 0 }, {"ucomiss\0" "ucomisd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"comiss\0" "comisd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, // 0x30 {"wrmsr", 0, 0, 0, 0 }, {"rdtsc", 0, 0, 0, 0 }, {"rdmsr", 0, 0, 0, 0 }, {"rdpmc", 0, 0, 0, 0 }, {"sysenter", 0, 0, 0, 0 }, {"sysexit", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"three_byte", THREE_BYTE, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"three_byte", THREE_BYTE, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x40 {"cmovo", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovno", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovb", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovae", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmove", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovne", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovbe", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmova", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovs", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovns", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovpe", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovpo", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovl", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovge", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovle", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovg", MODRM, PARAM_REG, PARAM_RM, 0 }, // 0x50 {"movmskps\0" "movmskpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_REG3264, PARAM_XMMM, 0 }, {"sqrtps\0" "sqrtpd\0" "sqrtsd\0" "sqrtss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"rsqrtps\0" "???\0" "???\0" "rsqrtss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"rcpps\0" "???\0" "???\0" "rcpss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"andps\0" "andpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"andnps\0" "andnpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"orps\0" "orpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"xorps\0" "xorpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"addps\0" "addpd\0" "addsd\0" "addss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"mulps\0" "mulpd\0" "mulsd\0" "mulss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"cvtps2pd\0" "cvtpd2ps\0" "cvtsd2ss\0" "cvtss2sd", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"cvtdq2ps\0" "cvtps2dq\0" "???\0" "cvttps2dq", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"subps\0" "subpd\0" "subsd\0" "subss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"minps\0" "minpd\0" "minsd\0" "minss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"divps\0" "divpd\0" "divsd\0" "divss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"maxps\0" "maxpd\0" "maxsd\0" "maxss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, // 0x60 {"punpcklbw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpcklwd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpckldq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"packsswb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpgtb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpgtw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpgtd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"packuswb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpckhbw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpckhwd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpckhdq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"packssdw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"???\0" "punpcklqdq\0" "???\0" "???\0", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "punpckhqdq\0" "???\0" "???\0", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"movd", MODRM, PARAM_MMX, PARAM_RM, 0 }, {"movq\0" "movdqa\0" "???\0" "movdqu", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, // 0x70 {"pshufw\0" "pshufd\0" "pshuflw\0" "pshufhw", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, PARAM_UI8 }, {"group0F71", GROUP, 0, 0, 0 }, {"group0F72", GROUP, 0, 0, 0 }, {"group0F73", GROUP, 0, 0, 0 }, {"pcmpeqb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpeqw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpeqd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"emms", 0, 0, 0, 0 }, {"vmread", MODRM, PARAM_RM, PARAM_REG, 0 }, {"vmwrite", MODRM, PARAM_RM, PARAM_REG, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "haddpd\0" "haddps\0" "???", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, {"???\0" "hsubpd\0" "hsubps\0" "???", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, {"movd\0" "movd\0" "???\0" "movq", MODRM|VAR_NAME4,PARAM_RM, PARAM_MMX, 0 }, {"movq\0" "movdqa\0" "???\0" "movdqu", MODRM|VAR_NAME4,PARAM_MMXM, PARAM_MMX, 0 }, // 0x80 {"jo", 0, PARAM_REL, 0, 0 }, {"jno", 0, PARAM_REL, 0, 0 }, {"jb", 0, PARAM_REL, 0, 0 }, {"jae", 0, PARAM_REL, 0, 0 }, {"je", 0, PARAM_REL, 0, 0 }, {"jne", 0, PARAM_REL, 0, 0 }, {"jbe", 0, PARAM_REL, 0, 0 }, {"ja", 0, PARAM_REL, 0, 0 }, {"js", 0, PARAM_REL, 0, 0 }, {"jns", 0, PARAM_REL, 0, 0 }, {"jp", 0, PARAM_REL, 0, 0 }, {"jnp", 0, PARAM_REL, 0, 0 }, {"jl", 0, PARAM_REL, 0, 0 }, {"jge", 0, PARAM_REL, 0, 0 }, {"jle", 0, PARAM_REL, 0, 0 }, {"jg", 0, PARAM_REL, 0, 0 }, // 0x90 {"seto", MODRM, PARAM_RMPTR8, 0, 0 }, {"setno", MODRM, PARAM_RMPTR8, 0, 0 }, {"setb", MODRM, PARAM_RMPTR8, 0, 0 }, {"setae", MODRM, PARAM_RMPTR8, 0, 0 }, {"sete", MODRM, PARAM_RMPTR8, 0, 0 }, {"setne", MODRM, PARAM_RMPTR8, 0, 0 }, {"setbe", MODRM, PARAM_RMPTR8, 0, 0 }, {"seta", MODRM, PARAM_RMPTR8, 0, 0 }, {"sets", MODRM, PARAM_RMPTR8, 0, 0 }, {"setns", MODRM, PARAM_RMPTR8, 0, 0 }, {"setp", MODRM, PARAM_RMPTR8, 0, 0 }, {"setnp", MODRM, PARAM_RMPTR8, 0, 0 }, {"setl", MODRM, PARAM_RMPTR8, 0, 0 }, {"setge", MODRM, PARAM_RMPTR8, 0, 0 }, {"setle", MODRM, PARAM_RMPTR8, 0, 0 }, {"setg", MODRM, PARAM_RMPTR8, 0, 0 }, // 0xa0 {"push fs", 0, 0, 0, 0 }, {"pop fs", 0, 0, 0, 0 }, {"cpuid", 0, 0, 0, 0 }, {"bt", MODRM, PARAM_RM, PARAM_REG, 0 }, {"shld", MODRM, PARAM_RM, PARAM_REG, PARAM_UI8 }, {"shld", MODRM, PARAM_RM, PARAM_REG, PARAM_CL }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"push gs", 0, 0, 0, 0 }, {"pop gs", 0, 0, 0, 0 }, {"rsm", 0, 0, 0, 0 }, {"bts", MODRM, PARAM_RM, PARAM_REG, 0 }, {"shrd", MODRM, PARAM_RM, PARAM_REG, PARAM_UI8 }, {"shrd", MODRM, PARAM_RM, PARAM_REG, PARAM_CL }, {"group0FAE", GROUP, 0, 0, 0 }, {"imul", MODRM, PARAM_REG, PARAM_RM, 0 }, // 0xb0 {"cmpxchg", MODRM, PARAM_RM8, PARAM_REG, 0 }, {"cmpxchg", MODRM, PARAM_RM, PARAM_REG, 0 }, {"lss", MODRM, PARAM_REG, PARAM_RM, 0 }, {"btr", MODRM, PARAM_RM, PARAM_REG, 0 }, {"lfs", MODRM, PARAM_REG, PARAM_RM, 0 }, {"lgs", MODRM, PARAM_REG, PARAM_RM, 0 }, {"movzx", MODRM, PARAM_REG, PARAM_RMPTR8, 0 }, {"movzx", MODRM, PARAM_REG, PARAM_RMPTR16, 0 }, {"???\0" "???\0" "???\0" "popcnt", MODRM|VAR_NAME4, PARAM_REG, PARAM_RM16, 0 }, {"ud2", 0, 0, 0, 0 }, {"group0FBA", GROUP, 0, 0, 0 }, {"btc", MODRM, PARAM_RM, PARAM_REG, 0 }, {"bsf\0" "???\0" "???\0" "tzcnt", MODRM|VAR_NAME4, PARAM_REG, PARAM_RM, 0 }, {"bsr\0" "???\0" "???\0" "lzcnt", MODRM|VAR_NAME4, PARAM_REG, PARAM_RM, 0, DASMFLAG_STEP_OVER}, {"movsx", MODRM, PARAM_REG, PARAM_RMPTR8, 0 }, {"movsx", MODRM, PARAM_REG, PARAM_RMPTR16, 0 }, // 0xc0 {"xadd", MODRM, PARAM_RM8, PARAM_REG, 0 }, {"xadd", MODRM, PARAM_RM, PARAM_REG, 0 }, {"cmpps\0" "cmppd\0" "cmpsd\0" "cmpss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movnti", MODRM, PARAM_RM, PARAM_REG, 0 }, {"pinsrw", MODRM, PARAM_MMX, PARAM_RM, PARAM_UI8 }, {"pextrw", MODRM, PARAM_MMX, PARAM_RM, PARAM_UI8 }, {"shufps\0" "shufpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"group0FC7", GROUP, 0, 0, 0 }, {"bswap", 0, PARAM_EAX, 0, 0 }, {"bswap", 0, PARAM_ECX, 0, 0 }, {"bswap", 0, PARAM_EDX, 0, 0 }, {"bswap", 0, PARAM_EBX, 0, 0 }, {"bswap", 0, PARAM_ESP, 0, 0 }, {"bswap", 0, PARAM_EBP, 0, 0 }, {"bswap", 0, PARAM_ESI, 0, 0 }, {"bswap", 0, PARAM_EDI, 0, 0 }, // 0xd0 {"???\0" "addsubpd\0" "addsubps\0" "???\0", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"psrlw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psrld", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psrlq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmullw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"???\0" "movq\0" "movdq2q\0" "movq2dq", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, {"pmovmskb", MODRM, PARAM_REG3264, PARAM_MMXM, 0 }, {"psubusb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubusw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pminub", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pand", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddusb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddusw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmaxub", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pandn", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, // 0xe0 {"pavgb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psraw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psrad", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pavgw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmulhuw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmulhw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"???\0" "cvttpd2dq\0" "cvtpd2dq\0" "cvtdq2pd", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movntq\0" "movntdq\0" "???\0" "???\0", MODRM|VAR_NAME4, PARAM_M64, PARAM_MMX, 0 }, {"psubsb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubsw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pminsw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"por", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddsb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddsw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmaxsw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pxor", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, // 0xf0 {"???\0" "???\0" "lddqu\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"psllw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pslld", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psllq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmuludq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmaddwd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psadbw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"maskmovq\0" "maskmovdqu\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, {"psubb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE i386_opcode_table0F38[256] = { // 0x00 {"pshufb\0" "pshufb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phaddw\0" "phaddw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phaddd\0" "phadd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phaddsw\0" "phaddsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"pmaddubsw\0" "pmaddubsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phsubw\0" "phsubw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phsubd\0" "phsubd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phsubsw\0" "phsubsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"psignb\0" "psignb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"psignw\0" "psignw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"psignd\0" "psignd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"pmulhrsw\0" "pmulhrsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x10 {"???\0" "pblendvb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_XMM0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "blendvps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_XMM0 }, {"???\0" "blendvpd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_XMM0 }, {"???", 0, 0, 0, 0 }, {"???\0" "ptest\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"pabsb\0" "pabsb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"pabsw\0" "pabsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"pabsd\0" "pabsd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, // 0x20 {"???\0" "pmovsxbw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???\0" "pmovsxbd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM32, 0 }, {"???\0" "pmovsxbq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM16, 0 }, {"???\0" "pmovsxwd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???\0" "pmovsxwq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM32, 0 }, {"???\0" "pmovsxdq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "pmuldq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pcmpeqq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "movntdqa\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "packusdw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x30 {"???\0" "pmovzxbw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???\0" "pmovzxbd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM32, 0 }, {"???\0" "pmovzxbq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM16, 0 }, {"???\0" "pmovzxwd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???\0" "pmovzxwq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM32, 0 }, {"???\0" "pmovzxdq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "pcmpgtq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pminsb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pminsd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pminuw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pminud\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pmaxsb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pmaxsd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pmaxuw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pmaxud\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, // 0x40 {"???\0" "pmulld\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "phminposuw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x50 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x60 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x70 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x80 {"???\0" "invept\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_REG32, PARAM_XMMM, 0 }, {"???\0" "invvpid\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_REG32, PARAM_XMMM, 0 }, {"???\0" "invpcid\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_REG32, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x90 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xa0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xb0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xc0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xd0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "aesimc\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "aesenc\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "aesenclast\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "aesdec\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "aesdeclast\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, // 0xe0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xf0 {"movbe\0" "???\0" "crc32\0" "???", MODRM|VAR_NAME4, PARAM_REG32, PARAM_RMPTR, 0 }, // not quite correct {"movbe\0" "???\0" "crc32\0" "???", MODRM|VAR_NAME4, PARAM_RMPTR, PARAM_REG32, 0 }, // not quite correct {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, }; static const I386_OPCODE i386_opcode_table0F3A[256] = { // 0x00 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "roundps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "roundpd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "roundss\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "roundsd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "blendps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "blendpd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "pblendw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"palignr\0" "palignr\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, // 0x10 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "pextrb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_RM8, PARAM_XMM, PARAM_UI8 }, {"???\0" "pextrw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_RM16, PARAM_XMM, PARAM_UI8 }, {"???\0" "pextrd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_RM8, PARAM_XMM, PARAM_UI8 }, {"???\0" "extractps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_RM32, PARAM_XMM, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x20 {"???\0" "pinsrb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_RM8, PARAM_UI8 }, {"???\0" "insertps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_RM8, PARAM_UI8 }, {"???\0" "pinsrd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_RM32, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x30 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x40 {"???\0" "dpps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "dppd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "mpsadbw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???\0" "pclmulqdq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x50 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x60 {"???\0" "pcmestrm\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "pcmestri\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "pcmistrm\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "pcmistri\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x70 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x80 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x90 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xa0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xb0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xc0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xd0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "aeskeygenassist\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, // 0xe0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xf0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, }; static const I386_OPCODE group80_table[8] = { {"add", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"or", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"adc", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"sbb", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"and", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"sub", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"xor", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"cmp", 0, PARAM_RMPTR8, PARAM_UI8, 0 } }; static const I386_OPCODE group81_table[8] = { {"add", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"or", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"adc", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"sbb", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"and", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"sub", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"xor", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"cmp", 0, PARAM_RMPTR, PARAM_IMM, 0 } }; static const I386_OPCODE group83_table[8] = { {"add", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"or", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"adc", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"sbb", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"and", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"sub", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"xor", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"cmp", 0, PARAM_RMPTR, PARAM_I8, 0 } }; static const I386_OPCODE groupC0_table[8] = { {"rol", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"ror", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"rcl", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"rcr", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"shl", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"shr", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"sal", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"sar", 0, PARAM_RMPTR8, PARAM_UI8, 0 } }; static const I386_OPCODE groupC1_table[8] = { {"rol", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"ror", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"rcl", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"rcr", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"shl", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"shr", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"sal", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"sar", 0, PARAM_RMPTR, PARAM_UI8, 0 } }; static const I386_OPCODE groupD0_table[8] = { {"rol", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"ror", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"rcl", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"rcr", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"shl", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"shr", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"sal", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"sar", 0, PARAM_RMPTR8, PARAM_1, 0 } }; static const I386_OPCODE groupD1_table[8] = { {"rol", 0, PARAM_RMPTR, PARAM_1, 0 }, {"ror", 0, PARAM_RMPTR, PARAM_1, 0 }, {"rcl", 0, PARAM_RMPTR, PARAM_1, 0 }, {"rcr", 0, PARAM_RMPTR, PARAM_1, 0 }, {"shl", 0, PARAM_RMPTR, PARAM_1, 0 }, {"shr", 0, PARAM_RMPTR, PARAM_1, 0 }, {"sal", 0, PARAM_RMPTR, PARAM_1, 0 }, {"sar", 0, PARAM_RMPTR, PARAM_1, 0 } }; static const I386_OPCODE groupD2_table[8] = { {"rol", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"ror", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"rcl", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"rcr", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"shl", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"shr", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"sal", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"sar", 0, PARAM_RMPTR8, PARAM_CL, 0 } }; static const I386_OPCODE groupD3_table[8] = { {"rol", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"ror", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"rcl", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"rcr", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"shl", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"shr", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"sal", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"sar", 0, PARAM_RMPTR, PARAM_CL, 0 } }; static const I386_OPCODE groupF6_table[8] = { {"test", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"test", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"not", 0, PARAM_RMPTR8, 0, 0 }, {"neg", 0, PARAM_RMPTR8, 0, 0 }, {"mul", 0, PARAM_RMPTR8, 0, 0 }, {"imul", 0, PARAM_RMPTR8, 0, 0 }, {"div", 0, PARAM_RMPTR8, 0, 0 }, {"idiv", 0, PARAM_RMPTR8, 0, 0 } }; static const I386_OPCODE groupF7_table[8] = { {"test", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"test", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"not", 0, PARAM_RMPTR, 0, 0 }, {"neg", 0, PARAM_RMPTR, 0, 0 }, {"mul", 0, PARAM_RMPTR, 0, 0 }, {"imul", 0, PARAM_RMPTR, 0, 0 }, {"div", 0, PARAM_RMPTR, 0, 0 }, {"idiv", 0, PARAM_RMPTR, 0, 0 } }; static const I386_OPCODE groupFE_table[8] = { {"inc", 0, PARAM_RMPTR8, 0, 0 }, {"dec", 0, PARAM_RMPTR8, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE groupFF_table[8] = { {"inc", 0, PARAM_RMPTR, 0, 0 }, {"dec", 0, PARAM_RMPTR, 0, 0 }, {"call", ALWAYS64, PARAM_RMPTR, 0, 0, DASMFLAG_STEP_OVER}, {"call far ptr ",0, PARAM_RM, 0, 0, DASMFLAG_STEP_OVER}, {"jmp", ALWAYS64, PARAM_RMPTR, 0, 0 }, {"jmp far ptr ",0, PARAM_RM, 0, 0 }, {"push", 0, PARAM_RMPTR, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F00_table[8] = { {"sldt", 0, PARAM_RM, 0, 0 }, {"str", 0, PARAM_RM, 0, 0 }, {"lldt", 0, PARAM_RM, 0, 0 }, {"ltr", 0, PARAM_RM, 0, 0 }, {"verr", 0, PARAM_RM, 0, 0 }, {"verw", 0, PARAM_RM, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F01_table[8] = { {"sgdt", 0, PARAM_RM, 0, 0 }, {"sidt", 0, PARAM_RM, 0, 0 }, {"lgdt", 0, PARAM_RM, 0, 0 }, {"lidt", 0, PARAM_RM, 0, 0 }, {"smsw", 0, PARAM_RM, 0, 0 }, {"???", 0, 0, 0, 0 }, {"lmsw", 0, PARAM_RM, 0, 0 }, {"invlpg", 0, PARAM_RM, 0, 0 } }; static const I386_OPCODE group0F0D_table[8] = { {"prefetch", 0, PARAM_RM8, 0, 0 }, {"prefetchw", 0, PARAM_RM8, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F12_table[4] = { { "movlps\0" "movlpd\0" "movddup\0" "movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, { "movlps\0" "movlpd\0" "movddup\0" "movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, { "movlps\0" "movlpd\0" "movddup\0" "movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, { "movhlps\0" "???\0" "movddup\0" "movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 } }; static const I386_OPCODE group0F16_table[4] = { { "movhps\0" "movhpd\0" "???\0" "movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, { "movhps\0" "movhpd\0" "???\0" "movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, { "movhps\0" "movhpd\0" "???\0" "movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, { "movlhps\0" "movhpd\0" "???\0" "movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 } }; static const I386_OPCODE group0F18_table[8] = { {"prefetchnta", 0, PARAM_RM8, 0, 0 }, {"prefetch0", 0, PARAM_RM8, 0, 0 }, {"prefetch1", 0, PARAM_RM8, 0, 0 }, {"prefetch2", 0, PARAM_RM8, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F71_table[8] = { {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"psrlw", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"psraw", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"psllw", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F72_table[8] = { {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"psrld", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"psrad", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"pslld", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F73_table[8] = { {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"psrlq", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"psrldq", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"psllq", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"pslldq", 0, PARAM_MMX2, PARAM_UI8, 0 }, }; static const I386_OPCODE group0FAE_table[8] = { {"fxsave", 0, PARAM_RM, 0, 0 }, {"fxrstor", 0, PARAM_RM, 0, 0 }, {"ldmxcsr", 0, PARAM_RM, 0, 0 }, {"stmxscr", 0, PARAM_RM, 0, 0 }, {"???", 0, 0, 0, 0 }, {"lfence", 0, 0, 0, 0 }, {"mfence", 0, 0, 0, 0 }, {"sfence", 0, 0, 0, 0 } }; static const I386_OPCODE group0FBA_table[8] = { {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"bt", 0, PARAM_RM, PARAM_UI8, 0 }, {"bts", 0, PARAM_RM, PARAM_UI8, 0 }, {"btr", 0, PARAM_RM, PARAM_UI8, 0 }, {"btc", 0, PARAM_RM, PARAM_UI8, 0 } }; static const I386_OPCODE group0FC7_table[8] = { {"???", 0, 0, 0, 0 }, {"cmpxchg8b", MODRM, PARAM_M64PTR, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"vmptrld\0" "vmclear\0" "???\0" "vmxon", MODRM|VAR_NAME4, PARAM_M64PTR, 0, 0 }, {"vmptrtst", MODRM, PARAM_M64PTR, 0, 0 } }; static const GROUP_OP group_op_table[] = { { "group80", group80_table }, { "group81", group81_table }, { "group83", group83_table }, { "groupC0", groupC0_table }, { "groupC1", groupC1_table }, { "groupD0", groupD0_table }, { "groupD1", groupD1_table }, { "groupD2", groupD2_table }, { "groupD3", groupD3_table }, { "groupF6", groupF6_table }, { "groupF7", groupF7_table }, { "groupFE", groupFE_table }, { "groupFF", groupFF_table }, { "group0F00", group0F00_table }, { "group0F01", group0F01_table }, { "group0F0D", group0F0D_table }, { "group0F12", group0F12_table }, { "group0F16", group0F16_table }, { "group0F18", group0F18_table }, { "group0F71", group0F71_table }, { "group0F72", group0F72_table }, { "group0F73", group0F73_table }, { "group0FAE", group0FAE_table }, { "group0FBA", group0FBA_table }, { "group0FC7", group0FC7_table } }; static const char *const i386_reg[3][16] = { {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "r8w", "r9w", "r10w","r11w","r12w","r13w","r14w","r15w"}, {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "r8d", "r9d", "r10d","r11d","r12d","r13d","r14d","r15d"}, {"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"} }; static const char *const i386_reg8[8] = {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}; static const char *const i386_reg8rex[16] = {"al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil", "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l"}; static const char *const i386_sreg[8] = {"es", "cs", "ss", "ds", "fs", "gs", "???", "???"}; static int address_size; static int operand_size; static int address_prefix; static int operand_prefix; static int max_length; static UINT64 pc; static UINT8 modrm; static UINT32 segment; static offs_t dasm_flags; static char modrm_string[256]; static UINT8 rex, regex, sibex, rmex; static UINT8 pre0f; static UINT8 curmode; #define MODRM_REG1 ((modrm >> 3) & 0x7) #define MODRM_REG2 (modrm & 0x7) #define MODRM_MOD ((modrm >> 6) & 0x3) INLINE UINT8 _FETCH(void) { if ((opcode_ptr - opcode_ptr_base) + 1 > max_length) return 0xff; pc++; return *opcode_ptr++; } #if 0 INLINE UINT16 _FETCH16(void) { UINT16 d; if ((opcode_ptr - opcode_ptr_base) + 2 > max_length) return 0xffff; d = opcode_ptr[0] | (opcode_ptr[1] << 8); opcode_ptr += 2; pc += 2; return d; } #endif INLINE UINT32 _FETCH32(void) { UINT32 d; if ((opcode_ptr - opcode_ptr_base) + 4 > max_length) return 0xffffffff; d = opcode_ptr[0] | (opcode_ptr[1] << 8) | (opcode_ptr[2] << 16) | (opcode_ptr[3] << 24); opcode_ptr += 4; pc += 4; return d; } INLINE UINT8 _FETCHD(void) { if ((opcode_ptr - opcode_ptr_base) + 1 > max_length) return 0xff; pc++; return *opcode_ptr++; } INLINE UINT16 _FETCHD16(void) { UINT16 d; if ((opcode_ptr - opcode_ptr_base) + 2 > max_length) return 0xffff; d = opcode_ptr[0] | (opcode_ptr[1] << 8); opcode_ptr += 2; pc += 2; return d; } INLINE UINT32 _FETCHD32(void) { UINT32 d; if ((opcode_ptr - opcode_ptr_base) + 4 > max_length) return 0xffffffff; d = opcode_ptr[0] | (opcode_ptr[1] << 8) | (opcode_ptr[2] << 16) | (opcode_ptr[3] << 24); opcode_ptr += 4; pc += 4; return d; } static char *hexstring(UINT32 value, int digits) { static char buffer[20]; buffer[0] = '0'; if (digits) sprintf(&buffer[1], "%0*Xh", digits, value); else sprintf(&buffer[1], "%Xh", value); return (buffer[1] >= '0' && buffer[1] <= '9') ? &buffer[1] : &buffer[0]; } static char *hexstring64(UINT32 lo, UINT32 hi) { static char buffer[40]; buffer[0] = '0'; if (hi != 0) sprintf(&buffer[1], "%X%08Xh", hi, lo); else sprintf(&buffer[1], "%Xh", lo); return (buffer[1] >= '0' && buffer[1] <= '9') ? &buffer[1] : &buffer[0]; } static char *hexstringpc(UINT64 pc) { if (curmode == 64) return hexstring64((UINT32)pc, (UINT32)(pc >> 32)); else return hexstring((UINT32)pc, 0); } static char *shexstring(UINT32 value, int digits, int always) { static char buffer[20]; if (value >= 0x80000000) sprintf(buffer, "-%s", hexstring(-value, digits)); else if (always) sprintf(buffer, "+%s", hexstring(value, digits)); else return hexstring(value, digits); return buffer; } static char* handle_sib_byte( char* s, UINT8 mod ) { UINT32 i32; UINT8 scale, i, base; UINT8 sib = _FETCHD(); scale = (sib >> 6) & 0x3; i = ((sib >> 3) & 0x7) | sibex; base = (sib & 0x7) | rmex; if (base == 5 && mod == 0) { i32 = _FETCH32(); s += sprintf( s, "%s", hexstring(i32, 0) ); } else if (base != 5 || mod != 3) s += sprintf( s, "%s", i386_reg[address_size][base] ); if ( i != 4 ) { s += sprintf( s, "+%s", i386_reg[address_size][i] ); if (scale) s += sprintf( s, "*%d", 1 << scale ); } return s; } static void handle_modrm(char* s) { INT8 disp8; INT16 disp16; INT32 disp32; UINT8 mod, rm; modrm = _FETCHD(); mod = (modrm >> 6) & 0x3; rm = (modrm & 0x7) | rmex; if( modrm >= 0xc0 ) return; switch(segment) { case SEG_CS: s += sprintf( s, "cs:" ); break; case SEG_DS: s += sprintf( s, "ds:" ); break; case SEG_ES: s += sprintf( s, "es:" ); break; case SEG_FS: s += sprintf( s, "fs:" ); break; case SEG_GS: s += sprintf( s, "gs:" ); break; case SEG_SS: s += sprintf( s, "ss:" ); break; } s += sprintf( s, "[" ); if( address_size == 2 ) { if ((rm & 7) == 4) s = handle_sib_byte( s, mod ); else if ((rm & 7) == 5 && mod == 0) { disp32 = _FETCHD32(); s += sprintf( s, "rip%s", shexstring(disp32, 0, TRUE) ); } else s += sprintf( s, "%s", i386_reg[2][rm]); if( mod == 1 ) { disp8 = _FETCHD(); if (disp8 != 0) s += sprintf( s, "%s", shexstring((INT32)disp8, 0, TRUE) ); } else if( mod == 2 ) { disp32 = _FETCHD32(); if (disp32 != 0) s += sprintf( s, "%s", shexstring(disp32, 0, TRUE) ); } } else if (address_size == 1) { if ((rm & 7) == 4) s = handle_sib_byte( s, mod ); else if ((rm & 7) == 5 && mod == 0) { disp32 = _FETCHD32(); if (curmode == 64) s += sprintf( s, "eip%s", shexstring(disp32, 0, TRUE) ); else s += sprintf( s, "%s", hexstring(disp32, 0) ); } else s += sprintf( s, "%s", i386_reg[1][rm]); if( mod == 1 ) { disp8 = _FETCHD(); if (disp8 != 0) s += sprintf( s, "%s", shexstring((INT32)disp8, 0, TRUE) ); } else if( mod == 2 ) { disp32 = _FETCHD32(); if (disp32 != 0) s += sprintf( s, "%s", shexstring(disp32, 0, TRUE) ); } } else { switch( rm ) { case 0: s += sprintf( s, "bx+si" ); break; case 1: s += sprintf( s, "bx+di" ); break; case 2: s += sprintf( s, "bp+si" ); break; case 3: s += sprintf( s, "bp+di" ); break; case 4: s += sprintf( s, "si" ); break; case 5: s += sprintf( s, "di" ); break; case 6: if( mod == 0 ) { disp16 = _FETCHD16(); s += sprintf( s, "%s", hexstring((unsigned) (UINT16) disp16, 0) ); } else { s += sprintf( s, "bp" ); } break; case 7: s += sprintf( s, "bx" ); break; } if( mod == 1 ) { disp8 = _FETCHD(); if (disp8 != 0) s += sprintf( s, "%s", shexstring((INT32)disp8, 0, TRUE) ); } else if( mod == 2 ) { disp16 = _FETCHD16(); if (disp16 != 0) s += sprintf( s, "%s", shexstring((INT32)disp16, 0, TRUE) ); } } s += sprintf( s, "]" ); } static char* handle_param(char* s, UINT32 param) { UINT8 i8; UINT16 i16; UINT32 i32; UINT16 ptr; UINT32 addr; INT8 d8; INT16 d16; INT32 d32; switch(param) { case PARAM_REG: s += sprintf( s, "%s", i386_reg[operand_size][MODRM_REG1 | regex] ); break; case PARAM_REG8: s += sprintf( s, "%s", (rex ? i386_reg8rex : i386_reg8)[MODRM_REG1 | regex] ); break; case PARAM_REG16: s += sprintf( s, "%s", i386_reg[0][MODRM_REG1 | regex] ); break; case PARAM_REG32: s += sprintf( s, "%s", i386_reg[1][MODRM_REG1 | regex] ); break; case PARAM_REG3264: s += sprintf( s, "%s", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG1 | regex] ); break; case PARAM_MMX: if (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3) s += sprintf( s, "xmm%d", MODRM_REG1 | regex ); else s += sprintf( s, "mm%d", MODRM_REG1 | regex ); break; case PARAM_MMX2: if (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3) s += sprintf( s, "xmm%d", MODRM_REG2 | regex ); else s += sprintf( s, "mm%d", MODRM_REG2 | regex ); break; case PARAM_XMM: s += sprintf( s, "xmm%d", MODRM_REG1 | regex ); break; case PARAM_REGORXMM: if (pre0f != 0xf2 && pre0f != 0xf3) s += sprintf( s, "xmm%d", MODRM_REG1 | regex ); else s += sprintf( s, "%s", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG1 | regex] ); break; case PARAM_REG2_32: s += sprintf( s, "%s", i386_reg[1][MODRM_REG2 | rmex] ); break; case PARAM_RM: case PARAM_RMPTR: if( modrm >= 0xc0 ) { s += sprintf( s, "%s", i386_reg[operand_size][MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR) { if( operand_size == 2 ) s += sprintf( s, "qword ptr " ); else if (operand_size == 1) s += sprintf( s, "dword ptr " ); else s += sprintf( s, "word ptr " ); } s += sprintf( s, "%s", modrm_string ); } break; case PARAM_RM8: case PARAM_RMPTR8: if( modrm >= 0xc0 ) { s += sprintf( s, "%s", (rex ? i386_reg8rex : i386_reg8)[MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR8) s += sprintf( s, "byte ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_RM16: case PARAM_RMPTR16: if( modrm >= 0xc0 ) { s += sprintf( s, "%s", i386_reg[0][MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR16) s += sprintf( s, "word ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_RM32: case PARAM_RMPTR32: if( modrm >= 0xc0 ) { s += sprintf( s, "%s", i386_reg[1][MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR32) s += sprintf( s, "dword ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_RMXMM: if( modrm >= 0xc0 ) { if (pre0f != 0xf2 && pre0f != 0xf3) s += sprintf( s, "xmm%d", MODRM_REG2 | rmex ); else s += sprintf( s, "%s", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR32) s += sprintf( s, "dword ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_M64: case PARAM_M64PTR: if( modrm >= 0xc0 ) { s += sprintf( s, "???" ); } else { if (param == PARAM_M64PTR) s += sprintf( s, "qword ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_MMXM: if( modrm >= 0xc0 ) { if (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3) s += sprintf( s, "xmm%d", MODRM_REG2 | rmex ); else s += sprintf( s, "mm%d", MODRM_REG2 | rmex ); } else { s += sprintf( s, "%s", modrm_string ); } break; case PARAM_XMMM: if( modrm >= 0xc0 ) { s += sprintf( s, "xmm%d", MODRM_REG2 | rmex ); } else { s += sprintf( s, "%s", modrm_string ); } break; case PARAM_I4: i8 = _FETCHD(); s += sprintf( s, "%d", i8 & 0x0f ); break; case PARAM_I8: i8 = _FETCHD(); s += sprintf( s, "%s", shexstring((INT8)i8, 0, FALSE) ); break; case PARAM_I16: i16 = _FETCHD16(); s += sprintf( s, "%s", shexstring((INT16)i16, 0, FALSE) ); break; case PARAM_UI8: i8 = _FETCHD(); s += sprintf( s, "%s", shexstring((UINT8)i8, 0, FALSE) ); break; case PARAM_UI16: i16 = _FETCHD16(); s += sprintf( s, "%s", shexstring((UINT16)i16, 0, FALSE) ); break; case PARAM_IMM64: if (operand_size == 2) { UINT32 lo32 = _FETCHD32(); i32 = _FETCHD32(); s += sprintf( s, "%s", hexstring64(lo32, i32) ); } else if( operand_size ) { i32 = _FETCHD32(); s += sprintf( s, "%s", hexstring(i32, 0) ); } else { i16 = _FETCHD16(); s += sprintf( s, "%s", hexstring(i16, 0) ); } break; case PARAM_IMM: if( operand_size ) { i32 = _FETCHD32(); s += sprintf( s, "%s", hexstring(i32, 0) ); } else { i16 = _FETCHD16(); s += sprintf( s, "%s", hexstring(i16, 0) ); } break; case PARAM_ADDR: if( operand_size ) { addr = _FETCHD32(); ptr = _FETCHD16(); s += sprintf( s, "%s:", hexstring(ptr, 4) ); s += sprintf( s, "%s", hexstring(addr, 0) ); } else { addr = _FETCHD16(); ptr = _FETCHD16(); s += sprintf( s, "%s:", hexstring(ptr, 4) ); s += sprintf( s, "%s", hexstring(addr, 0) ); } break; case PARAM_REL: if( operand_size ) { d32 = _FETCHD32(); s += sprintf( s, "%s", hexstringpc(pc + d32) ); } else { /* make sure to keep the relative offset within the segment */ d16 = _FETCHD16(); s += sprintf( s, "%s", hexstringpc((pc & 0xFFFF0000) | ((pc + d16) & 0x0000FFFF)) ); } break; case PARAM_REL8: d8 = _FETCHD(); s += sprintf( s, "%s", hexstringpc(pc + d8) ); break; case PARAM_MEM_OFFS: switch(segment) { case SEG_CS: s += sprintf( s, "cs:" ); break; case SEG_DS: s += sprintf( s, "ds:" ); break; case SEG_ES: s += sprintf( s, "es:" ); break; case SEG_FS: s += sprintf( s, "fs:" ); break; case SEG_GS: s += sprintf( s, "gs:" ); break; case SEG_SS: s += sprintf( s, "ss:" ); break; } if( address_size ) { i32 = _FETCHD32(); s += sprintf( s, "[%s]", hexstring(i32, 0) ); } else { i16 = _FETCHD16(); s += sprintf( s, "[%s]", hexstring(i16, 0) ); } break; case PARAM_PREIMP: switch(segment) { case SEG_CS: s += sprintf( s, "cs:" ); break; case SEG_DS: s += sprintf( s, "ds:" ); break; case SEG_ES: s += sprintf( s, "es:" ); break; case SEG_FS: s += sprintf( s, "fs:" ); break; case SEG_GS: s += sprintf( s, "gs:" ); break; case SEG_SS: s += sprintf( s, "ss:" ); break; } break; case PARAM_SREG: s += sprintf( s, "%s", i386_sreg[MODRM_REG1] ); break; case PARAM_CREG: s += sprintf( s, "cr%d", MODRM_REG1 | regex ); break; case PARAM_TREG: s += sprintf( s, "tr%d", MODRM_REG1 | regex ); break; case PARAM_DREG: s += sprintf( s, "dr%d", MODRM_REG1 | regex ); break; case PARAM_1: s += sprintf( s, "1" ); break; case PARAM_DX: s += sprintf( s, "dx" ); break; case PARAM_XMM0: s += sprintf( s, "xmm0" ); break; case PARAM_AL: s += sprintf( s, "al" ); break; case PARAM_CL: s += sprintf( s, "cl" ); break; case PARAM_DL: s += sprintf( s, "dl" ); break; case PARAM_BL: s += sprintf( s, "bl" ); break; case PARAM_AH: s += sprintf( s, "ah" ); break; case PARAM_CH: s += sprintf( s, "ch" ); break; case PARAM_DH: s += sprintf( s, "dh" ); break; case PARAM_BH: s += sprintf( s, "bh" ); break; case PARAM_EAX: s += sprintf( s, "%s", i386_reg[operand_size][0 | rmex] ); break; case PARAM_ECX: s += sprintf( s, "%s", i386_reg[operand_size][1 | rmex] ); break; case PARAM_EDX: s += sprintf( s, "%s", i386_reg[operand_size][2 | rmex] ); break; case PARAM_EBX: s += sprintf( s, "%s", i386_reg[operand_size][3 | rmex] ); break; case PARAM_ESP: s += sprintf( s, "%s", i386_reg[operand_size][4 | rmex] ); break; case PARAM_EBP: s += sprintf( s, "%s", i386_reg[operand_size][5 | rmex] ); break; case PARAM_ESI: s += sprintf( s, "%s", i386_reg[operand_size][6 | rmex] ); break; case PARAM_EDI: s += sprintf( s, "%s", i386_reg[operand_size][7 | rmex] ); break; } return s; } static void handle_fpu(char *s, UINT8 op1, UINT8 op2) { switch (op1 & 0x7) { case 0: // Group D8 { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fadd dword ptr %s", modrm_string); break; case 1: sprintf(s, "fmul dword ptr %s", modrm_string); break; case 2: sprintf(s, "fcom dword ptr %s", modrm_string); break; case 3: sprintf(s, "fcomp dword ptr %s", modrm_string); break; case 4: sprintf(s, "fsub dword ptr %s", modrm_string); break; case 5: sprintf(s, "fsubr dword ptr %s", modrm_string); break; case 6: sprintf(s, "fdiv dword ptr %s", modrm_string); break; case 7: sprintf(s, "fdivr dword ptr %s", modrm_string); break; } } else { switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fadd st(0),st(%d)", op2 & 0x7); break; case 1: sprintf(s, "fmul st(0),st(%d)", op2 & 0x7); break; case 2: sprintf(s, "fcom st(0),st(%d)", op2 & 0x7); break; case 3: sprintf(s, "fcomp st(0),st(%d)", op2 & 0x7); break; case 4: sprintf(s, "fsub st(0),st(%d)", op2 & 0x7); break; case 5: sprintf(s, "fsubr st(0),st(%d)", op2 & 0x7); break; case 6: sprintf(s, "fdiv st(0),st(%d)", op2 & 0x7); break; case 7: sprintf(s, "fdivr st(0),st(%d)", op2 & 0x7); break; } } break; } case 1: // Group D9 { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fld dword ptr %s", modrm_string); break; case 1: sprintf(s, "??? (FPU)"); break; case 2: sprintf(s, "fst dword ptr %s", modrm_string); break; case 3: sprintf(s, "fstp dword ptr %s", modrm_string); break; case 4: sprintf(s, "fldenv word ptr %s", modrm_string); break; case 5: sprintf(s, "fldcw word ptr %s", modrm_string); break; case 6: sprintf(s, "fstenv word ptr %s", modrm_string); break; case 7: sprintf(s, "fstcw word ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "fld st(0),st(%d)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fxch st(0),st(%d)", op2 & 0x7); break; case 0x10: sprintf(s, "fnop"); break; case 0x20: sprintf(s, "fchs"); break; case 0x21: sprintf(s, "fabs"); break; case 0x24: sprintf(s, "ftst"); break; case 0x25: sprintf(s, "fxam"); break; case 0x28: sprintf(s, "fld1"); break; case 0x29: sprintf(s, "fldl2t"); break; case 0x2a: sprintf(s, "fldl2e"); break; case 0x2b: sprintf(s, "fldpi"); break; case 0x2c: sprintf(s, "fldlg2"); break; case 0x2d: sprintf(s, "fldln2"); break; case 0x2e: sprintf(s, "fldz"); break; case 0x30: sprintf(s, "f2xm1"); break; case 0x31: sprintf(s, "fyl2x"); break; case 0x32: sprintf(s, "fptan"); break; case 0x33: sprintf(s, "fpatan"); break; case 0x34: sprintf(s, "fxtract"); break; case 0x35: sprintf(s, "fprem1"); break; case 0x36: sprintf(s, "fdecstp"); break; case 0x37: sprintf(s, "fincstp"); break; case 0x38: sprintf(s, "fprem"); break; case 0x39: sprintf(s, "fyl2xp1"); break; case 0x3a: sprintf(s, "fsqrt"); break; case 0x3b: sprintf(s, "fsincos"); break; case 0x3c: sprintf(s, "frndint"); break; case 0x3d: sprintf(s, "fscale"); break; case 0x3e: sprintf(s, "fsin"); break; case 0x3f: sprintf(s, "fcos"); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 2: // Group DA { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fiadd dword ptr %s", modrm_string); break; case 1: sprintf(s, "fimul dword ptr %s", modrm_string); break; case 2: sprintf(s, "ficom dword ptr %s", modrm_string); break; case 3: sprintf(s, "ficomp dword ptr %s", modrm_string); break; case 4: sprintf(s, "fisub dword ptr %s", modrm_string); break; case 5: sprintf(s, "fisubr dword ptr %s", modrm_string); break; case 6: sprintf(s, "fidiv dword ptr %s", modrm_string); break; case 7: sprintf(s, "fidivr dword ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "fcmovb st(0),st(%d)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fcmove st(0),st(%d)", op2 & 0x7); break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: sprintf(s, "fcmovbe st(0),st(%d)", op2 & 0x7); break; case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: sprintf(s, "fcmovu st(0),st(%d)", op2 & 0x7); break; case 0x29: sprintf(s, "fucompp"); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 3: // Group DB { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fild dword ptr %s", modrm_string); break; case 1: sprintf(s, "fisttp dword ptr %s", modrm_string); break; case 2: sprintf(s, "fist dword ptr %s", modrm_string); break; case 3: sprintf(s, "fistp dword ptr %s", modrm_string); break; case 4: sprintf(s, "??? (FPU)"); break; case 5: sprintf(s, "fld tword ptr %s", modrm_string); break; case 6: sprintf(s, "??? (FPU)"); break; case 7: sprintf(s, "fstp tword ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "fcmovnb st(0),st(%d)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fcmovne st(0),st(%d)", op2 & 0x7); break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: sprintf(s, "fcmovnbe st(0),st(%d)", op2 & 0x7); break; case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: sprintf(s, "fcmovnu st(0),st(%d)", op2 & 0x7); break; case 0x22: sprintf(s, "fclex"); break; case 0x23: sprintf(s, "finit"); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fucomi st(0),st(%d)", op2 & 0x7); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: sprintf(s, "fcomi st(0),st(%d)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 4: // Group DC { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fadd qword ptr %s", modrm_string); break; case 1: sprintf(s, "fmul qword ptr %s", modrm_string); break; case 2: sprintf(s, "fcom qword ptr %s", modrm_string); break; case 3: sprintf(s, "fcomp qword ptr %s", modrm_string); break; case 4: sprintf(s, "fsub qword ptr %s", modrm_string); break; case 5: sprintf(s, "fsubr qword ptr %s", modrm_string); break; case 6: sprintf(s, "fdiv qword ptr %s", modrm_string); break; case 7: sprintf(s, "fdivr qword ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "fadd st(%d),st(0)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fmul st(%d),st(0)", op2 & 0x7); break; case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: sprintf(s, "fsubr st(%d),st(0)", op2 & 0x7); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fsub st(%d),st(0)", op2 & 0x7); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: sprintf(s, "fdivr st(%d),st(0)", op2 & 0x7); break; case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f: sprintf(s, "fdiv st(%d),st(0)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 5: // Group DD { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fld qword ptr %s", modrm_string); break; case 1: sprintf(s, "fisttp qword ptr %s", modrm_string); break; case 2: sprintf(s, "fst qword ptr %s", modrm_string); break; case 3: sprintf(s, "fstp qword ptr %s", modrm_string); break; case 4: sprintf(s, "frstor %s", modrm_string); break; case 5: sprintf(s, "??? (FPU)"); break; case 6: sprintf(s, "fsave %s", modrm_string); break; case 7: sprintf(s, "fstsw word ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "ffree st(%d)", op2 & 0x7); break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: sprintf(s, "fst st(%d)", op2 & 0x7); break; case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: sprintf(s, "fstp st(%d)", op2 & 0x7); break; case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: sprintf(s, "fucom st(%d), st(0)", op2 & 0x7); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fucomp st(%d)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 6: // Group DE { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fiadd word ptr %s", modrm_string); break; case 1: sprintf(s, "fimul word ptr %s", modrm_string); break; case 2: sprintf(s, "ficom word ptr %s", modrm_string); break; case 3: sprintf(s, "ficomp word ptr %s", modrm_string); break; case 4: sprintf(s, "fisub word ptr %s", modrm_string); break; case 5: sprintf(s, "fisubr word ptr %s", modrm_string); break; case 6: sprintf(s, "fidiv word ptr %s", modrm_string); break; case 7: sprintf(s, "fidivr word ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "faddp st(%d)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fmulp st(%d)", op2 & 0x7); break; case 0x19: sprintf(s, "fcompp"); break; case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: sprintf(s, "fsubrp st(%d)", op2 & 0x7); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fsubp st(%d)", op2 & 0x7); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: sprintf(s, "fdivrp st(%d), st(0)", op2 & 0x7); break; case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f: sprintf(s, "fdivp st(%d)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 7: // Group DF { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fild word ptr %s", modrm_string); break; case 1: sprintf(s, "fisttp word ptr %s", modrm_string); break; case 2: sprintf(s, "fist word ptr %s", modrm_string); break; case 3: sprintf(s, "fistp word ptr %s", modrm_string); break; case 4: sprintf(s, "fbld %s", modrm_string); break; case 5: sprintf(s, "fild qword ptr %s", modrm_string); break; case 6: sprintf(s, "fbstp %s", modrm_string); break; case 7: sprintf(s, "fistp qword ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x20: sprintf(s, "fstsw ax"); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fucomip st(%d)", op2 & 0x7); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: sprintf(s, "fcomip st(%d),st(0)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } } } static void decode_opcode(char *s, const I386_OPCODE *op, UINT8 op1) { int i; UINT8 op2; if ((op->flags & SPECIAL64) && (address_size == 2)) op = &x64_opcode_alt[op->flags >> 24]; switch( op->flags & FLAGS_MASK ) { case ISREX: if (curmode == 64) { rex = op1; operand_size = (op1 & 8) ? 2 : 1; regex = (op1 << 1) & 8; sibex = (op1 << 2) & 8; rmex = (op1 << 3) & 8; op2 = _FETCH(); decode_opcode( s, &i386_opcode_table1[op2], op1 ); return; } break; case OP_SIZE: rex = regex = sibex = rmex = 0; if (operand_size < 2 && operand_prefix == 0) { operand_size ^= 1; operand_prefix = 1; } op2 = _FETCH(); decode_opcode( s, &i386_opcode_table1[op2], op2 ); return; case ADDR_SIZE: rex = regex = sibex = rmex = 0; if(address_prefix == 0) { if (curmode != 64) address_size ^= 1; else address_size ^= 3; address_prefix = 1; } op2 = _FETCH(); decode_opcode( s, &i386_opcode_table1[op2], op2 ); return; case TWO_BYTE: if (&opcode_ptr[-2] >= opcode_ptr_base) pre0f = opcode_ptr[-2]; op2 = _FETCHD(); decode_opcode( s, &i386_opcode_table2[op2], op1 ); return; case THREE_BYTE: op2 = _FETCHD(); if (opcode_ptr[-2] == 0x38) decode_opcode( s, &i386_opcode_table0F38[op2], op1 ); else decode_opcode( s, &i386_opcode_table0F3A[op2], op1 ); return; case SEG_CS: case SEG_DS: case SEG_ES: case SEG_FS: case SEG_GS: case SEG_SS: rex = regex = sibex = rmex = 0; segment = op->flags; op2 = _FETCH(); decode_opcode( s, &i386_opcode_table1[op2], op2 ); return; case PREFIX: op2 = _FETCH(); if ((op2 != 0x0f) && (op2 != 0x90)) s += sprintf( s, "%-7s ", op->mnemonic ); if ((op2 == 0x90) && !pre0f) pre0f = op1; decode_opcode( s, &i386_opcode_table1[op2], op2 ); return; case GROUP: handle_modrm( modrm_string ); for( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) { if( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) { if (op->flags & GROUP_MOD) decode_opcode( s, &group_op_table[i].opcode[MODRM_MOD], op1 ); else decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 ); return; } } goto handle_unknown; case FPU: op2 = _FETCHD(); handle_fpu( s, op1, op2); return; case MODRM: handle_modrm( modrm_string ); break; } if ((op->flags & ALWAYS64) && curmode == 64) operand_size = 2; if ((op->flags & VAR_NAME) && operand_size > 0) { const char *mnemonic = op->mnemonic + strlen(op->mnemonic) + 1; if (operand_size == 2) mnemonic += strlen(mnemonic) + 1; s += sprintf( s, "%-7s ", mnemonic ); } else if (op->flags & VAR_NAME4) { const char *mnemonic = op->mnemonic; int which = (pre0f == 0xf3) ? 3 : (pre0f == 0xf2) ? 2 : (pre0f == 0x66) ? 1 : 0; while (which--) mnemonic += strlen(mnemonic) + 1; s += sprintf( s, "%-7s ", mnemonic ); } else s += sprintf( s, "%-7s ", op->mnemonic ); dasm_flags = op->dasm_flags; if( op->param1 != 0 ) { s = handle_param( s, op->param1 ); } if( op->param2 != 0 ) { s += sprintf( s, "," ); s = handle_param( s, op->param2 ); } if( op->param3 != 0 ) { s += sprintf( s, "," ); s = handle_param( s, op->param3 ); } return; handle_unknown: sprintf(s, "???"); } int i386_dasm_one_ex(char *buffer, UINT64 eip, const UINT8 *oprom, int mode) { UINT8 op; opcode_ptr = opcode_ptr_base = oprom; switch(mode) { case 1: /* 8086/8088/80186/80188 */ address_size = 0; operand_size = 0; max_length = 8; /* maximum without redundant prefixes - not enforced by chip */ break; case 2: /* 80286 */ address_size = 0; operand_size = 0; max_length = 10; break; case 16: /* 80386+ 16-bit code segment */ address_size = 0; operand_size = 0; max_length = 15; break; case 32: /* 80386+ 32-bit code segment */ address_size = 1; operand_size = 1; max_length = 15; break; case 64: /* x86_64 */ address_size = 2; operand_size = 1; max_length = 15; break; } pc = eip; dasm_flags = 0; segment = 0; curmode = mode; pre0f = 0; rex = regex = sibex = rmex = 0; address_prefix = 0; operand_prefix = 0; op = _FETCH(); decode_opcode( buffer, &i386_opcode_table1[op], op ); return (pc-eip) | dasm_flags | DASMFLAG_SUPPORTED; } int i386_dasm_one(char *buffer, offs_t eip, const UINT8 *oprom, int mode) { return i386_dasm_one_ex(buffer, eip, oprom, mode); } CPU_DISASSEMBLE( x86_16 ) { return i386_dasm_one_ex(buffer, pc, oprom, 16); } CPU_DISASSEMBLE( x86_32 ) { return i386_dasm_one_ex(buffer, pc, oprom, 32); } CPU_DISASSEMBLE( x86_64 ) { return i386_dasm_one_ex(buffer, pc, oprom, 64); } ================================================ FILE: vm86/mame/emu/cpu/i386/i386op16.c ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett static UINT16 I386OP(shift_rotate16)(UINT8 modrm, UINT32 value, UINT8 shift) { UINT32 src = value & 0xffff; UINT16 dst = value; if( shift == 0 ) { CYCLES_RM(modrm, 3, 7); } else if( shift == 1 ) { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm16, 1 */ m_CF = (src & 0x8000) ? 1 : 0; dst = (src << 1) + m_CF; m_OF = ((src ^ dst) & 0x8000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm16, 1 */ m_CF = (src & 0x1) ? 1 : 0; dst = (m_CF << 15) | (src >> 1); m_OF = ((src ^ dst) & 0x8000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm16, 1 */ dst = (src << 1) + m_CF; m_CF = (src & 0x8000) ? 1 : 0; m_OF = ((src ^ dst) & 0x8000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm16, 1 */ dst = (m_CF << 15) | (src >> 1); m_CF = src & 0x1; m_OF = ((src ^ dst) & 0x8000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm16, 1 */ case 6: dst = src << 1; m_CF = (src & 0x8000) ? 1 : 0; m_OF = (((m_CF << 15) ^ dst) & 0x8000) ? 1 : 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm16, 1 */ dst = src >> 1; m_CF = src & 0x1; m_OF = (dst & 0x8000) ? 1 : 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm16, 1 */ dst = (INT16)(src) >> 1; m_CF = src & 0x1; m_OF = 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } else { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm16, i8 */ if(!(shift & 15)) { if(shift & 16) { m_CF = src & 1; m_OF = (src & 1) ^ ((src >> 15) & 1); } break; } shift &= 15; dst = ((src & ((UINT16)0xffff >> shift)) << shift) | ((src & ((UINT16)0xffff << (16-shift))) >> (16-shift)); m_CF = dst & 0x1; m_OF = (dst & 1) ^ (dst >> 15); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm16, i8 */ if(!(shift & 15)) { if(shift & 16) { m_CF = (src >> 15) & 1; m_OF = ((src >> 15) & 1) ^ ((src >> 14) & 1); } break; } shift &= 15; dst = ((src & ((UINT16)0xffff << shift)) >> shift) | ((src & ((UINT16)0xffff >> (16-shift))) << (16-shift)); m_CF = (dst >> 15) & 1; m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm16, i8 */ shift %= 17; dst = ((src & ((UINT16)0xffff >> shift)) << shift) | ((src & ((UINT16)0xffff << (17-shift))) >> (17-shift)) | (m_CF << (shift-1)); if(shift) m_CF = (src >> (16-shift)) & 0x1; m_OF = m_CF ^ ((dst >> 15) & 1); CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm16, i8 */ shift %= 17; dst = ((src & ((UINT16)0xffff << shift)) >> shift) | ((src & ((UINT16)0xffff >> (16-shift))) << (17-shift)) | (m_CF << (16-shift)); if(shift) m_CF = (src >> (shift-1)) & 0x1; m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm16, i8 */ case 6: shift &= 31; dst = src << shift; m_CF = (shift <= 16) && (src & (1 << (16-shift))); SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm16, i8 */ shift &= 31; dst = src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm16, i8 */ shift &= 31; dst = (INT16)src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } return dst; } static void I386OP(adc_rm16_r16)() // Opcode 0x11 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = ADC16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = ADC16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(adc_r16_rm16)() // Opcode 0x13 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = ADC16(dst, src, m_CF); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = ADC16(dst, src, m_CF); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(adc_ax_i16)() // Opcode 0x15 { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = ADC16(dst, src, m_CF); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(add_rm16_r16)() // Opcode 0x01 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = ADD16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = ADD16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(add_r16_rm16)() // Opcode 0x03 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = ADD16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = ADD16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(add_ax_i16)() // Opcode 0x05 { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = ADD16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(and_rm16_r16)() // Opcode 0x21 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = AND16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = AND16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(and_r16_rm16)() // Opcode 0x23 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = AND16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = AND16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(and_ax_i16)() // Opcode 0x25 { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = AND16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(bsf_r16_rm16)() // Opcode 0x0f bc { UINT16 src, dst, temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); } dst = 0; if( src == 0 ) { m_ZF = 1; } else { m_ZF = 0; temp = 0; while( (src & (1 << temp)) == 0 ) { temp++; dst = temp; CYCLES(CYCLES_BSF); } STORE_REG16(modrm, dst); } CYCLES(CYCLES_BSF_BASE); } static void I386OP(bsr_r16_rm16)() // Opcode 0x0f bd { UINT16 src, dst, temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); } dst = 0; if( src == 0 ) { m_ZF = 1; } else { m_ZF = 0; dst = temp = 15; while( (src & (1 << temp)) == 0 ) { temp--; dst = temp; CYCLES(CYCLES_BSR); } STORE_REG16(modrm, dst); } CYCLES(CYCLES_BSR_BASE); } static void I386OP(bt_rm16_r16)() // Opcode 0x0f a3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 bit = LOAD_REG16(modrm); if( dst & (1 << (bit & 0xf)) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT16 bit = LOAD_REG16(modrm); ea += 2*(bit/16); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),0); bit %= 16; UINT16 dst = READ16(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_REG_MEM); } } static void I386OP(btc_rm16_r16)() // Opcode 0x0f bb { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 bit = LOAD_REG16(modrm); if( dst & (1 << (bit & 0xf)) ) m_CF = 1; else m_CF = 0; dst ^= (1 << (bit & 0xf)); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTC_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT16 bit = LOAD_REG16(modrm); ea += 2*(bit/16); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 16; UINT16 dst = READ16(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTC_REG_MEM); } } static void I386OP(btr_rm16_r16)() // Opcode 0x0f b3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 bit = LOAD_REG16(modrm); if( dst & (1 << (bit & 0xf)) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << (bit & 0xf)); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTR_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT16 bit = LOAD_REG16(modrm); ea += 2*(bit/16); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 16; UINT16 dst = READ16(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTR_REG_MEM); } } static void I386OP(bts_rm16_r16)() // Opcode 0x0f ab { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 bit = LOAD_REG16(modrm); if( dst & (1 << (bit & 0xf)) ) m_CF = 1; else m_CF = 0; dst |= (1 << (bit & 0xf)); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTS_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT16 bit = LOAD_REG16(modrm); ea += 2*(bit/16); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 16; UINT16 dst = READ16(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTS_REG_MEM); } } static void I386OP(call_abs16)() // Opcode 0x9a { UINT16 offset = FETCH16(); UINT16 ptr = FETCH16(); if( PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_call(ptr,offset,0,0); } else { PUSH16(m_sreg[CS].selector ); PUSH16(m_eip ); m_sreg[CS].selector = ptr; m_performed_intersegment_jump = 1; m_eip = offset; i386_load_segment_descriptor(CS); } CYCLES(CYCLES_CALL_INTERSEG); /* TODO: Timing = 17 + m */ CHANGE_PC(m_eip); } static void I386OP(call_rel16)() // Opcode 0xe8 { INT16 disp = FETCH16(); PUSH16(m_eip ); if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_CALL); /* TODO: Timing = 7 + m */ } static void I386OP(cbw)() // Opcode 0x98 { REG16(AX) = (INT16)((INT8)REG8(AL)); CYCLES(CYCLES_CBW); } static void I386OP(cmp_rm16_r16)() // Opcode 0x39 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG16(modrm); dst = READ16(ea); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } } static void I386OP(cmp_r16_rm16)() // Opcode 0x3b { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); SUB16(dst, src); CYCLES(CYCLES_CMP_MEM_REG); } } static void I386OP(cmp_ax_i16)() // Opcode 0x3d { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); SUB16(dst, src); CYCLES(CYCLES_CMP_IMM_ACC); } static void I386OP(cmpsw)() // Opcode 0xa7 { UINT32 eas, ead; UINT16 src, dst; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ16(eas); dst = READ16(ead); SUB16(src,dst); BUMP_SI(2); BUMP_DI(2); CYCLES(CYCLES_CMPS); } static void I386OP(cwd)() // Opcode 0x99 { if( REG16(AX) & 0x8000 ) { REG16(DX) = 0xffff; } else { REG16(DX) = 0x0000; } CYCLES(CYCLES_CWD); } static void I386OP(dec_ax)() // Opcode 0x48 { REG16(AX) = DEC16(REG16(AX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_cx)() // Opcode 0x49 { REG16(CX) = DEC16(REG16(CX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_dx)() // Opcode 0x4a { REG16(DX) = DEC16(REG16(DX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_bx)() // Opcode 0x4b { REG16(BX) = DEC16(REG16(BX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_sp)() // Opcode 0x4c { REG16(SP) = DEC16(REG16(SP) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_bp)() // Opcode 0x4d { REG16(BP) = DEC16(REG16(BP) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_si)() // Opcode 0x4e { REG16(SI) = DEC16(REG16(SI) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_di)() // Opcode 0x4f { REG16(DI) = DEC16(REG16(DI) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(imul_r16_rm16)() // Opcode 0x0f af { UINT8 modrm = FETCH(); INT32 result; INT32 src, dst; if( modrm >= 0xc0 ) { src = (INT32)(INT16)LOAD_RM16(modrm); CYCLES(CYCLES_IMUL16_REG_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT32)(INT16)READ16(ea); CYCLES(CYCLES_IMUL16_REG_MEM); /* TODO: Correct multiply timing */ } dst = (INT32)(INT16)LOAD_REG16(modrm); result = src * dst; STORE_REG16(modrm, (UINT16)result); m_CF = m_OF = !(result == (INT32)(INT16)result); } static void I386OP(imul_r16_rm16_i16)() // Opcode 0x69 { UINT8 modrm = FETCH(); INT32 result; INT32 src, dst; if( modrm >= 0xc0 ) { dst = (INT32)(INT16)LOAD_RM16(modrm); CYCLES(CYCLES_IMUL16_REG_IMM_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); dst = (INT32)(INT16)READ16(ea); CYCLES(CYCLES_IMUL16_MEM_IMM_REG); /* TODO: Correct multiply timing */ } src = (INT32)(INT16)FETCH16(); result = src * dst; STORE_REG16(modrm, (UINT16)result); m_CF = m_OF = !(result == (INT32)(INT16)result); } static void I386OP(imul_r16_rm16_i8)() // Opcode 0x6b { UINT8 modrm = FETCH(); INT32 result; INT32 src, dst; if( modrm >= 0xc0 ) { dst = (INT32)(INT16)LOAD_RM16(modrm); CYCLES(CYCLES_IMUL16_REG_IMM_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); dst = (INT32)(INT16)READ16(ea); CYCLES(CYCLES_IMUL16_MEM_IMM_REG); /* TODO: Correct multiply timing */ } src = (INT32)(INT8)FETCH(); result = src * dst; STORE_REG16(modrm, (UINT16)result); m_CF = m_OF = !(result == (INT32)(INT16)result); } static void I386OP(in_ax_i8)() // Opcode 0xe5 { UINT16 port = FETCH(); UINT16 data = READPORT16(port); REG16(AX) = data; CYCLES(CYCLES_IN_VAR); } static void I386OP(in_ax_dx)() // Opcode 0xed { UINT16 port = REG16(DX); UINT16 data = READPORT16(port); REG16(AX) = data; CYCLES(CYCLES_IN); } static void I386OP(inc_ax)() // Opcode 0x40 { REG16(AX) = INC16(REG16(AX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_cx)() // Opcode 0x41 { REG16(CX) = INC16(REG16(CX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_dx)() // Opcode 0x42 { REG16(DX) = INC16(REG16(DX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_bx)() // Opcode 0x43 { REG16(BX) = INC16(REG16(BX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_sp)() // Opcode 0x44 { REG16(SP) = INC16(REG16(SP) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_bp)() // Opcode 0x45 { REG16(BP) = INC16(REG16(BP) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_si)() // Opcode 0x46 { REG16(SI) = INC16(REG16(SI) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_di)() // Opcode 0x47 { REG16(DI) = INC16(REG16(DI) ); CYCLES(CYCLES_INC_REG); } static void I386OP(iret16)() // Opcode 0xcf { UINT32 old = m_pc - 1; if( PROTECTED_MODE ) { i386_protected_mode_iret(0); } else { /* TODO: #SS(0) exception */ /* TODO: #GP(0) exception */ m_eip = POP16(); m_sreg[CS].selector = POP16(); set_flags(POP16() ); i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } CYCLES(CYCLES_IRET); // MS-DOS system call if(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) { msdos_syscall(old - IRET_TOP); } } static void I386OP(ja_rel16)() // Opcode 0x0f 87 { INT16 disp = FETCH16(); if( m_CF == 0 && m_ZF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jbe_rel16)() // Opcode 0x0f 86 { INT16 disp = FETCH16(); if( m_CF != 0 || m_ZF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jc_rel16)() // Opcode 0x0f 82 { INT16 disp = FETCH16(); if( m_CF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jg_rel16)() // Opcode 0x0f 8f { INT16 disp = FETCH16(); if( m_ZF == 0 && (m_SF == m_OF) ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jge_rel16)() // Opcode 0x0f 8d { INT16 disp = FETCH16(); if(m_SF == m_OF) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jl_rel16)() // Opcode 0x0f 8c { INT16 disp = FETCH16(); if( (m_SF != m_OF) ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jle_rel16)() // Opcode 0x0f 8e { INT16 disp = FETCH16(); if( m_ZF != 0 || (m_SF != m_OF) ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnc_rel16)() // Opcode 0x0f 83 { INT16 disp = FETCH16(); if( m_CF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jno_rel16)() // Opcode 0x0f 81 { INT16 disp = FETCH16(); if( m_OF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnp_rel16)() // Opcode 0x0f 8b { INT16 disp = FETCH16(); if( m_PF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jns_rel16)() // Opcode 0x0f 89 { INT16 disp = FETCH16(); if( m_SF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnz_rel16)() // Opcode 0x0f 85 { INT16 disp = FETCH16(); if( m_ZF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jo_rel16)() // Opcode 0x0f 80 { INT16 disp = FETCH16(); if( m_OF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jp_rel16)() // Opcode 0x0f 8a { INT16 disp = FETCH16(); if( m_PF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(js_rel16)() // Opcode 0x0f 88 { INT16 disp = FETCH16(); if( m_SF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jz_rel16)() // Opcode 0x0f 84 { INT16 disp = FETCH16(); if( m_ZF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jcxz16)() // Opcode 0xe3 { INT8 disp = FETCH(); int val = (m_address_size)?(REG32(ECX) == 0):(REG16(CX) == 0); if( val ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCXZ); /* TODO: Timing = 9 + m */ } else { CYCLES(CYCLES_JCXZ_NOBRANCH); } } static void I386OP(jmp_rel16)() // Opcode 0xe9 { INT16 disp = FETCH16(); if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JMP); /* TODO: Timing = 7 + m */ } static void I386OP(jmp_abs16)() // Opcode 0xea { UINT16 address = FETCH16(); UINT16 segment = FETCH16(); if( PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(segment,address,0,0); } else { m_eip = address; m_sreg[CS].selector = segment; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } CYCLES(CYCLES_JMP_INTERSEG); } static void I386OP(lea16)() // Opcode 0x8d { UINT8 modrm = FETCH(); UINT32 ea = GetNonTranslatedEA(modrm,NULL); STORE_REG16(modrm, ea); CYCLES(CYCLES_LEA); } static void I386OP(enter16)() // Opcode 0xc8 { UINT16 framesize = FETCH16(); UINT8 level = FETCH() % 32; UINT8 x; UINT16 frameptr; PUSH16(REG16(BP)); if(!STACK_32BIT) frameptr = REG16(SP); else frameptr = REG32(ESP); if(level > 0) { for(x=1;x<=level-1;x++) { UINT32 addr; if(!STACK_32BIT) { REG16(BP) -= 2; addr = REG16(BP); } else { REG32(EBP) -= 2; addr = REG32(EBP); } PUSH16(READ16(i386_translate(SS, addr, 0))); } PUSH16(frameptr); } REG16(BP) = frameptr; if(!STACK_32BIT) REG16(SP) -= framesize; else REG32(ESP) -= framesize; CYCLES(CYCLES_ENTER); } static void I386OP(leave16)() // Opcode 0xc9 { if(!STACK_32BIT) REG16(SP) = REG16(BP); else REG32(ESP) = REG32(EBP); REG16(BP) = POP16(); CYCLES(CYCLES_LEAVE); } static void I386OP(lodsw)() // Opcode 0xad { UINT32 eas; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } REG16(AX) = READ16(eas); BUMP_SI(2); CYCLES(CYCLES_LODS); } static void I386OP(loop16)() // Opcode 0xe2 { INT8 disp = FETCH(); INT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX)); if( val != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); } CYCLES(CYCLES_LOOP); /* TODO: Timing = 11 + m */ } static void I386OP(loopne16)() // Opcode 0xe0 { INT8 disp = FETCH(); INT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX)); if( val != 0 && m_ZF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); } CYCLES(CYCLES_LOOPNZ); /* TODO: Timing = 11 + m */ } static void I386OP(loopz16)() // Opcode 0xe1 { INT8 disp = FETCH(); INT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX)); if( val != 0 && m_ZF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); } CYCLES(CYCLES_LOOPZ); /* TODO: Timing = 11 + m */ } static void I386OP(mov_rm16_r16)() // Opcode 0x89 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); STORE_RM16(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); WRITE16(ea, src); CYCLES(CYCLES_MOV_REG_MEM); } } static void I386OP(mov_r16_rm16)() // Opcode 0x8b { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); STORE_REG16(modrm, src); CYCLES(CYCLES_MOV_MEM_REG); } } static void I386OP(mov_rm16_i16)() // Opcode 0xc7 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 value = FETCH16(); STORE_RM16(modrm, value); CYCLES(CYCLES_MOV_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 value = FETCH16(); WRITE16(ea, value); CYCLES(CYCLES_MOV_IMM_MEM); } } static void I386OP(mov_ax_m16)() // Opcode 0xa1 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } /* TODO: Not sure if this is correct... */ if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 0 ); } else { ea = i386_translate(DS, offset, 0 ); } REG16(AX) = READ16(ea); CYCLES(CYCLES_MOV_MEM_ACC); } static void I386OP(mov_m16_ax)() // Opcode 0xa3 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } /* TODO: Not sure if this is correct... */ if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 1 ); } else { ea = i386_translate(DS, offset, 1 ); } WRITE16(ea, REG16(AX) ); CYCLES(CYCLES_MOV_ACC_MEM); } static void I386OP(mov_ax_i16)() // Opcode 0xb8 { REG16(AX) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_cx_i16)() // Opcode 0xb9 { REG16(CX) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_dx_i16)() // Opcode 0xba { REG16(DX) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_bx_i16)() // Opcode 0xbb { REG16(BX) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_sp_i16)() // Opcode 0xbc { REG16(SP) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_bp_i16)() // Opcode 0xbd { REG16(BP) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_si_i16)() // Opcode 0xbe { REG16(SI) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_di_i16)() // Opcode 0xbf { REG16(DI) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(movsw)() // Opcode 0xa5 { UINT32 eas, ead; UINT16 v; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); v = READ16(eas); WRITE16(ead, v); BUMP_SI(2); BUMP_DI(2); CYCLES(CYCLES_MOVS); } static void I386OP(movsx_r16_rm8)() // Opcode 0x0f be { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { INT16 src = (INT8)LOAD_RM8(modrm); STORE_REG16(modrm, src); CYCLES(CYCLES_MOVSX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); INT16 src = (INT8)READ8(ea); STORE_REG16(modrm, src); CYCLES(CYCLES_MOVSX_MEM_REG); } } static void I386OP(movzx_r16_rm8)() // Opcode 0x0f b6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 src = (UINT8)LOAD_RM8(modrm); STORE_REG16(modrm, src); CYCLES(CYCLES_MOVZX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); UINT16 src = (UINT8)READ8(ea); STORE_REG16(modrm, src); CYCLES(CYCLES_MOVZX_MEM_REG); } } static void I386OP(or_rm16_r16)() // Opcode 0x09 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = OR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = OR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(or_r16_rm16)() // Opcode 0x0b { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = OR16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = OR16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(or_ax_i16)() // Opcode 0x0d { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = OR16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(out_ax_i8)() // Opcode 0xe7 { UINT16 port = FETCH(); UINT16 data = REG16(AX); WRITEPORT16(port, data); CYCLES(CYCLES_OUT_VAR); } static void I386OP(out_ax_dx)() // Opcode 0xef { UINT16 port = REG16(DX); UINT16 data = REG16(AX); WRITEPORT16(port, data); CYCLES(CYCLES_OUT); } static void I386OP(pop_ax)() // Opcode 0x58 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(AX) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_cx)() // Opcode 0x59 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(CX) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_dx)() // Opcode 0x5a { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(DX) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_bx)() // Opcode 0x5b { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(BX) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_sp)() // Opcode 0x5c { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(SP) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_bp)() // Opcode 0x5d { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(BP) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_si)() // Opcode 0x5e { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(SI) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_di)() // Opcode 0x5f { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(DI) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static bool I386OP(pop_seg16)(int segment) { UINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); UINT16 value; bool fault; if(i386_limit_check(SS,offset+1) == 0) { ea = i386_translate(SS, offset, 0); value = READ16(ea); i386_sreg_load(value, segment, &fault); if(fault) return false; if(STACK_32BIT) REG32(ESP) = offset + 2; else REG16(SP) = offset + 2; } else { m_ext = 1; i386_trap_with_error(FAULT_SS,0,0,0); return false; } CYCLES(CYCLES_POP_SREG); return true; } static void I386OP(pop_ds16)() // Opcode 0x1f { I386OP(pop_seg16)(DS); } static void I386OP(pop_es16)() // Opcode 0x07 { I386OP(pop_seg16)(ES); } static void I386OP(pop_fs16)() // Opcode 0x0f a1 { I386OP(pop_seg16)(FS); } static void I386OP(pop_gs16)() // Opcode 0x0f a9 { I386OP(pop_seg16)(GS); } static void I386OP(pop_ss16)() // Opcode 0x17 { if(!I386OP(pop_seg16)(SS)) return; if(m_IF != 0) // if external interrupts are enabled { m_IF = 0; // reset IF for the next instruction m_delayed_interrupt_enable = 1; } } static void I386OP(pop_rm16)() // Opcode 0x8f { UINT8 modrm = FETCH(); UINT16 value; UINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) { UINT32 temp_sp = REG32(ESP); value = POP16(); if( modrm >= 0xc0 ) { STORE_RM16(modrm, value); } else { try { ea = GetEA(modrm,1); WRITE16(ea, value); } catch(UINT64 e) { REG32(ESP) = temp_sp; throw e; } } } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_RM); } static void I386OP(popa)() // Opcode 0x61 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+15) == 0) { REG16(DI) = POP16(); REG16(SI) = POP16(); REG16(BP) = POP16(); REG16(SP) += 2; REG16(BX) = POP16(); REG16(DX) = POP16(); REG16(CX) = POP16(); REG16(AX) = POP16(); } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POPA); } static void I386OP(popf)() // Opcode 0x9d { UINT32 value; UINT32 current = get_flags(); UINT8 IOPL = (current >> 12) & 0x03; UINT32 mask = 0x7fd5; UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); // IOPL can only change if CPL is 0 if(m_CPL != 0) mask &= ~0x00003000; // IF can only change if CPL is at least as privileged as IOPL if(m_CPL > IOPL) mask &= ~0x00000200; if(V8086_MODE) { if(IOPL < 3) { logerror("POPFD(%08x): IOPL < 3 while in V86 mode.\n",m_pc); FAULT(FAULT_GP,0) // #GP(0) } mask &= ~0x00003000; // IOPL cannot be changed while in V8086 mode } if(i386_limit_check(SS,offset+1) == 0) { value = POP16(); set_flags((current & ~mask) | (value & mask)); // mask out reserved bits } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POPF); } static void I386OP(push_ax)() // Opcode 0x50 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(AX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_cx)() // Opcode 0x51 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(CX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_dx)() // Opcode 0x52 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(DX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_bx)() // Opcode 0x53 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(BX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_sp)() // Opcode 0x54 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(SP) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_bp)() // Opcode 0x55 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(BP) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_si)() // Opcode 0x56 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(SI) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_di)() // Opcode 0x57 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(DI) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_cs16)() // Opcode 0x0e { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[CS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_ds16)() // Opcode 0x1e { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[DS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_es16)() // Opcode 0x06 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[ES].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_fs16)() // Opcode 0x0f a0 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[FS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_gs16)() // Opcode 0x0f a8 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[GS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_ss16)() // Opcode 0x16 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[SS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_i16)() // Opcode 0x68 { UINT16 value = FETCH16(); UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(value); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_IMM); } static void I386OP(pusha)() // Opcode 0x60 { UINT16 temp = REG16(SP); UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 16; else offset = (REG16(SP) - 16) & 0xffff; if(i386_limit_check(SS,offset) == 0) { PUSH16(REG16(AX) ); PUSH16(REG16(CX) ); PUSH16(REG16(DX) ); PUSH16(REG16(BX) ); PUSH16(temp ); PUSH16(REG16(BP) ); PUSH16(REG16(SI) ); PUSH16(REG16(DI) ); } else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSHA); } static void I386OP(pushf)() // Opcode 0x9c { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(get_flags() & 0xffff ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSHF); } static void I386OP(ret_near16_i16)() // Opcode 0xc2 { INT16 disp = FETCH16(); m_eip = POP16(); REG16(SP) += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_RET_IMM); /* TODO: Timing = 10 + m */ } static void I386OP(ret_near16)() // Opcode 0xc3 { m_eip = POP16(); CHANGE_PC(m_eip); CYCLES(CYCLES_RET); /* TODO: Timing = 10 + m */ } static void I386OP(sbb_rm16_r16)() // Opcode 0x19 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = SBB16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = SBB16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sbb_r16_rm16)() // Opcode 0x1b { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = SBB16(dst, src, m_CF); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = SBB16(dst, src, m_CF); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sbb_ax_i16)() // Opcode 0x1d { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = SBB16(dst, src, m_CF); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(scasw)() // Opcode 0xaf { UINT32 eas; UINT16 src, dst; eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ16(eas); dst = REG16(AX); SUB16(dst, src); BUMP_DI(2); CYCLES(CYCLES_SCAS); } static void I386OP(shld16_i8)() // Opcode 0x0f a4 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else if( shift > 15 ) { m_CF = (upper & (1 << (16-shift))) ? 1 : 0; // ppro and above should be (dst >> (32-shift)) dst = (upper << (shift-16)) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } else { m_CF = (dst & (1 << (16-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (16-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } STORE_RM16(modrm, dst); CYCLES(CYCLES_SHLD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else if( shift > 15 ) { m_CF = (upper & (1 << (16-shift))) ? 1 : 0; dst = (upper << (shift-16)) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } else { m_CF = (dst & (1 << (16-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (16-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } WRITE16(ea, dst); CYCLES(CYCLES_SHLD_MEM); } } static void I386OP(shld16_cl)() // Opcode 0x0f a5 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else if( shift > 15 ) { m_CF = (upper & (1 << (16-shift))) ? 1 : 0; dst = (upper << (shift-16)) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } else { m_CF = (dst & (1 << (16-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (16-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } STORE_RM16(modrm, dst); CYCLES(CYCLES_SHLD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else if( shift > 15 ) { m_CF = (upper & (1 << (16-shift))) ? 1 : 0; dst = (upper << (shift-16)) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } else { m_CF = (dst & (1 << (16-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (16-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } WRITE16(ea, dst); CYCLES(CYCLES_SHLD_MEM); } } static void I386OP(shrd16_i8)() // Opcode 0x0f ac { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0) { } else if( shift > 15 ) { m_CF = (upper & (1 << (shift-1))) ? 1 : 0; dst = (upper >> (shift-16)) | (upper << (32-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (16-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } STORE_RM16(modrm, dst); CYCLES(CYCLES_SHRD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0) { } else if( shift > 15 ) { m_CF = (upper & (1 << (shift-1))) ? 1 : 0; dst = (upper >> (shift-16)) | (upper << (32-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (16-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } WRITE16(ea, dst); CYCLES(CYCLES_SHRD_MEM); } } static void I386OP(shrd16_cl)() // Opcode 0x0f ad { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0) { } else if( shift > 15 ) { m_CF = (upper & (1 << (shift-1))) ? 1 : 0; dst = (upper >> (shift-16)) | (upper << (32-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (16-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } STORE_RM16(modrm, dst); CYCLES(CYCLES_SHRD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0) { } else if( shift > 15 ) { m_CF = (upper & (1 << (shift-1))) ? 1 : 0; dst = (upper >> (shift-16)) | (upper << (32-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (16-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } WRITE16(ea, dst); CYCLES(CYCLES_SHRD_MEM); } } static void I386OP(stosw)() // Opcode 0xab { UINT32 ead; ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); WRITE16(ead, REG16(AX)); BUMP_DI(2); CYCLES(CYCLES_STOS); } static void I386OP(sub_rm16_r16)() // Opcode 0x29 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = SUB16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = SUB16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sub_r16_rm16)() // Opcode 0x2b { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = SUB16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = SUB16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sub_ax_i16)() // Opcode 0x2d { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = SUB16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(test_ax_i16)() // Opcode 0xa9 { UINT16 src = FETCH16(); UINT16 dst = REG16(AX); dst = src & dst; SetSZPF16(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_IMM_ACC); } static void I386OP(test_rm16_r16)() // Opcode 0x85 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = src & dst; SetSZPF16(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG16(modrm); dst = READ16(ea); dst = src & dst; SetSZPF16(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_MEM); } } static void I386OP(xchg_ax_cx)() // Opcode 0x91 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(CX); REG16(CX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_dx)() // Opcode 0x92 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(DX); REG16(DX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_bx)() // Opcode 0x93 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(BX); REG16(BX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_sp)() // Opcode 0x94 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(SP); REG16(SP) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_bp)() // Opcode 0x95 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(BP); REG16(BP) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_si)() // Opcode 0x96 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(SI); REG16(SI) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_di)() // Opcode 0x97 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(DI); REG16(DI) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_r16_rm16)() // Opcode 0x87 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 src = LOAD_RM16(modrm); UINT16 dst = LOAD_REG16(modrm); STORE_REG16(modrm, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_XCHG_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 src = READ16(ea); UINT16 dst = LOAD_REG16(modrm); STORE_REG16(modrm, src); WRITE16(ea, dst); CYCLES(CYCLES_XCHG_REG_MEM); } } static void I386OP(xor_rm16_r16)() // Opcode 0x31 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = XOR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = XOR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(xor_r16_rm16)() // Opcode 0x33 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = XOR16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = XOR16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(xor_ax_i16)() // Opcode 0x35 { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = XOR16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(group81_16)() // Opcode 0x81 { UINT32 ea; UINT16 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = ADD16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = ADD16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = OR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = OR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = ADC16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = ADC16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = SBB16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = SBB16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = AND16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = AND16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = SUB16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = SUB16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = XOR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = XOR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ16(ea); src = FETCH16(); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(group83_16)() // Opcode 0x83 { UINT32 ea; UINT16 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = ADD16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = ADD16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = OR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = OR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = ADC16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = ADC16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = ((UINT16)(INT16)(INT8)FETCH()); dst = SBB16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = ((UINT16)(INT16)(INT8)FETCH()); dst = SBB16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = AND16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = AND16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = SUB16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = SUB16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = XOR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = XOR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(groupC1_16)() // Opcode 0xc1 { UINT16 dst; UINT8 modrm = FETCH(); UINT8 shift; if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); shift = FETCH() & 0x1f; dst = i386_shift_rotate16(modrm, dst, shift); STORE_RM16(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ16(ea); shift = FETCH() & 0x1f; dst = i386_shift_rotate16(modrm, dst, shift); WRITE16(ea, dst); } } static void I386OP(groupD1_16)() // Opcode 0xd1 { UINT16 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); dst = i386_shift_rotate16(modrm, dst, 1); STORE_RM16(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ16(ea); dst = i386_shift_rotate16(modrm, dst, 1); WRITE16(ea, dst); } } static void I386OP(groupD3_16)() // Opcode 0xd3 { UINT16 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); dst = i386_shift_rotate16(modrm, dst, REG8(CL)); STORE_RM16(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ16(ea); dst = i386_shift_rotate16(modrm, dst, REG8(CL)); WRITE16(ea, dst); } } static void I386OP(groupF7_16)() // Opcode 0xf7 { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* TEST Rm16, i16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 src = FETCH16(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF16(dst); CYCLES(CYCLES_TEST_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT16 dst = READ16(ea); UINT16 src = FETCH16(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF16(dst); CYCLES(CYCLES_TEST_IMM_MEM); } break; case 2: /* NOT Rm16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); dst = ~dst; STORE_RM16(modrm, dst); CYCLES(CYCLES_NOT_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); dst = ~dst; WRITE16(ea, dst); CYCLES(CYCLES_NOT_MEM); } break; case 3: /* NEG Rm16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); dst = SUB16(0, dst ); STORE_RM16(modrm, dst); CYCLES(CYCLES_NEG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); dst = SUB16(0, dst ); WRITE16(ea, dst); CYCLES(CYCLES_NEG_MEM); } break; case 4: /* MUL AX, Rm16 */ { UINT32 result; UINT16 src, dst; if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); CYCLES(CYCLES_MUL16_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); CYCLES(CYCLES_MUL16_ACC_MEM); /* TODO: Correct multiply timing */ } dst = REG16(AX); result = (UINT32)src * (UINT32)dst; REG16(DX) = (UINT16)(result >> 16); REG16(AX) = (UINT16)result; m_CF = m_OF = (REG16(DX) != 0); } break; case 5: /* IMUL AX, Rm16 */ { INT32 result; INT32 src, dst; if( modrm >= 0xc0 ) { src = (INT32)(INT16)LOAD_RM16(modrm); CYCLES(CYCLES_IMUL16_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT32)(INT16)READ16(ea); CYCLES(CYCLES_IMUL16_ACC_MEM); /* TODO: Correct multiply timing */ } dst = (INT32)(INT16)REG16(AX); result = src * dst; REG16(DX) = (UINT16)(result >> 16); REG16(AX) = (UINT16)result; m_CF = m_OF = !(result == (INT32)(INT16)result); } break; case 6: /* DIV AX, Rm16 */ { UINT32 quotient, remainder, result; UINT16 src; if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); CYCLES(CYCLES_DIV16_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); CYCLES(CYCLES_DIV16_ACC_MEM); } quotient = ((UINT32)(REG16(DX)) << 16) | (UINT32)(REG16(AX)); if( src ) { remainder = quotient % (UINT32)src; result = quotient / (UINT32)src; if( result > 0xffff ) { /* TODO: Divide error */ } else { REG16(DX) = (UINT16)remainder; REG16(AX) = (UINT16)result; // this flag is actually undefined, enable on non-cyrix if (m_cpuid_id0 != 0x69727943) m_CF = 1; } } else { i386_trap(0, 0, 0); } } break; case 7: /* IDIV AX, Rm16 */ { INT32 quotient, remainder, result; UINT16 src; if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); CYCLES(CYCLES_IDIV16_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); CYCLES(CYCLES_IDIV16_ACC_MEM); } quotient = (((INT32)REG16(DX)) << 16) | ((UINT32)REG16(AX)); if( src ) { remainder = quotient % (INT32)(INT16)src; result = quotient / (INT32)(INT16)src; if( result > 0xffff ) { /* TODO: Divide error */ } else { REG16(DX) = (UINT16)remainder; REG16(AX) = (UINT16)result; // this flag is actually undefined, enable on non-cyrix if (m_cpuid_id0 != 0x69727943) m_CF = 1; } } else { i386_trap(0, 0, 0); } } break; } } static void I386OP(groupFF_16)() // Opcode 0xff { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* INC Rm16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); dst = INC16(dst); STORE_RM16(modrm, dst); CYCLES(CYCLES_INC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); dst = INC16(dst); WRITE16(ea, dst); CYCLES(CYCLES_INC_MEM); } break; case 1: /* DEC Rm16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); dst = DEC16(dst); STORE_RM16(modrm, dst); CYCLES(CYCLES_DEC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); dst = DEC16(dst); WRITE16(ea, dst); CYCLES(CYCLES_DEC_MEM); } break; case 2: /* CALL Rm16 */ { UINT16 address; if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_CALL_REG); /* TODO: Timing = 7 + m */ } else { UINT32 ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_CALL_MEM); /* TODO: Timing = 10 + m */ } PUSH16(m_eip ); m_eip = address; CHANGE_PC(m_eip); } break; case 3: /* CALL FAR Rm16 */ { UINT16 address, selector; if( modrm >= 0xc0 ) { report_invalid_modrm("groupFF_16", modrm); } else { UINT32 ea = GetEA(modrm,0); address = READ16(ea + 0); selector = READ16(ea + 2); CYCLES(CYCLES_CALL_MEM_INTERSEG); /* TODO: Timing = 10 + m */ if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_call(selector,address,1,0); } else { PUSH16(m_sreg[CS].selector ); PUSH16(m_eip ); m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS ); m_eip = address; CHANGE_PC(m_eip); } } } break; case 4: /* JMP Rm16 */ { UINT16 address; if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_JMP_REG); /* TODO: Timing = 7 + m */ } else { UINT32 ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_JMP_MEM); /* TODO: Timing = 10 + m */ } m_eip = address; CHANGE_PC(m_eip); } break; case 5: /* JMP FAR Rm16 */ { UINT16 address, selector; if( modrm >= 0xc0 ) { report_invalid_modrm("groupFF_16", modrm); } else { UINT32 ea = GetEA(modrm,0); address = READ16(ea + 0); selector = READ16(ea + 2); CYCLES(CYCLES_JMP_MEM_INTERSEG); /* TODO: Timing = 10 + m */ if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(selector,address,1,0); } else { m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS ); m_eip = address; CHANGE_PC(m_eip); } } } break; case 6: /* PUSH Rm16 */ { UINT16 value; if( modrm >= 0xc0 ) { value = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); value = READ16(ea); } PUSH16(value); CYCLES(CYCLES_PUSH_RM); } break; default: report_invalid_modrm("groupFF_16", modrm); break; } } static void I386OP(group0F00_16)() // Opcode 0x0f 00 { UINT32 address, ea; UINT8 modrm = FETCH(); I386_SREG seg; UINT8 result; switch( (modrm >> 3) & 0x7 ) { case 0: /* SLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { STORE_RM16(modrm, m_ldtr.segment); CYCLES(CYCLES_SLDT_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_ldtr.segment); CYCLES(CYCLES_SLDT_MEM); } } else { i386_trap(6, 0, 0); } break; case 1: /* STR */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { STORE_RM16(modrm, m_task.segment); CYCLES(CYCLES_STR_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_task.segment); CYCLES(CYCLES_STR_MEM); } } else { i386_trap(6, 0, 0); } break; case 2: /* LLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); m_ldtr.segment = address; CYCLES(CYCLES_LLDT_REG); } else { ea = GetEA(modrm,0); m_ldtr.segment = READ16(ea); CYCLES(CYCLES_LLDT_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = m_ldtr.segment; i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = seg.limit; m_ldtr.base = seg.base; m_ldtr.flags = seg.flags; } else { i386_trap(6, 0, 0); } break; case 3: /* LTR */ if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); m_task.segment = address; CYCLES(CYCLES_LTR_REG); } else { ea = GetEA(modrm,0); m_task.segment = READ16(ea); CYCLES(CYCLES_LTR_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = m_task.segment; i386_load_protected_mode_segment(&seg,NULL); UINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5; i386_translate_address(TRANSLATE_READ, &addr, NULL); write_byte(addr, (seg.flags & 0xff) | 2); m_task.limit = seg.limit; m_task.base = seg.base; m_task.flags = seg.flags | 2; } else { i386_trap(6, 0, 0); } break; case 4: /* VERR */ if ( PROTECTED_MODE && !V8086_MODE ) { result = 1; if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_VERR_REG); } else { ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_VERR_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = address; result = i386_load_protected_mode_segment(&seg,NULL); // check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...) if(!(seg.flags & 0x10)) result = 0; // check that the segment is readable if(seg.flags & 0x10) // is code or data segment { if(seg.flags & 0x08) // is code segment, so check if it's readable { if(!(seg.flags & 0x02)) { result = 0; } else { // check if conforming, these are always readable, regardless of privilege if(!(seg.flags & 0x04)) { // if not conforming, then we must check privilege levels (TODO: current privilege level check) if(((seg.flags >> 5) & 0x03) < (address & 0x03)) result = 0; } } } } // check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO) SetZF(result); } else { i386_trap(6, 0, 0); logerror("i386: VERR: Exception - Running in real mode or virtual 8086 mode.\n"); } break; case 5: /* VERW */ if ( PROTECTED_MODE && !V8086_MODE ) { result = 1; if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_VERW_REG); } else { ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_VERW_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = address; result = i386_load_protected_mode_segment(&seg,NULL); // check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...) if(!(seg.flags & 0x10)) result = 0; // check that the segment is writable if(seg.flags & 0x10) // is code or data segment { if(seg.flags & 0x08) // is code segment (and thus, not writable) { result = 0; } else { // is data segment if(!(seg.flags & 0x02)) result = 0; } } // check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO) if(((seg.flags >> 5) & 0x03) < (address & 0x03)) result = 0; SetZF(result); } else { i386_trap(6, 0, 0); logerror("i386: VERW: Exception - Running in real mode or virtual 8086 mode.\n"); } break; default: report_invalid_modrm("group0F00_16", modrm); break; } } static void I386OP(group0F01_16)() // Opcode 0x0f 01 { UINT8 modrm = FETCH(); UINT16 address; UINT32 ea; switch( (modrm >> 3) & 0x7 ) { case 0: /* SGDT */ { if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate(CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_gdtr.limit); WRITE32(ea + 2, m_gdtr.base); CYCLES(CYCLES_SGDT); break; } case 1: /* SIDT */ { if (modrm >= 0xc0) { address = LOAD_RM16(modrm); ea = i386_translate(CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_idtr.limit); WRITE32(ea + 2, m_idtr.base); CYCLES(CYCLES_SIDT); break; } case 2: /* LGDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate(CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_gdtr.limit = READ16(ea); m_gdtr.base = READ32(ea + 2) & 0xffffff; CYCLES(CYCLES_LGDT); break; } case 3: /* LIDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate(CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_idtr.limit = READ16(ea); m_idtr.base = READ32(ea + 2) & 0xffffff; CYCLES(CYCLES_LIDT); break; } case 4: /* SMSW */ { if( modrm >= 0xc0 ) { STORE_RM16(modrm, m_cr[0]); CYCLES(CYCLES_SMSW_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_cr[0]); CYCLES(CYCLES_SMSW_MEM); } break; } case 6: /* LMSW */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) UINT16 b; if( modrm >= 0xc0 ) { b = LOAD_RM16(modrm); CYCLES(CYCLES_LMSW_REG); } else { ea = GetEA(modrm,0); CYCLES(CYCLES_LMSW_MEM); b = READ16(ea); } if(PROTECTED_MODE) b |= 0x0001; // cannot return to real mode using this instruction. m_cr[0] &= ~0x0000000f; m_cr[0] |= b & 0x0000000f; break; } default: report_invalid_modrm("group0F01_16", modrm); break; } } static void I386OP(group0FBA_16)() // Opcode 0x0f ba { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 4: /* BT Rm16, i8 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT16 dst = READ16(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_IMM_MEM); } break; case 5: /* BTS Rm16, i8 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTS_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTS_IMM_MEM); } break; case 6: /* BTR Rm16, i8 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTR_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTR_IMM_MEM); } break; case 7: /* BTC Rm16, i8 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTC_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTC_IMM_MEM); } break; default: report_invalid_modrm("group0FBA_16", modrm); break; } } static void I386OP(lar_r16_rm16)() // Opcode 0x0f 0x02 { UINT8 modrm = FETCH(); I386_SREG seg; UINT8 type; if(PROTECTED_MODE && !V8086_MODE) { memset(&seg,0,sizeof(seg)); if(modrm >= 0xc0) { seg.selector = LOAD_RM16(modrm); CYCLES(CYCLES_LAR_REG); } else { UINT32 ea = GetEA(modrm,0); seg.selector = READ16(ea); CYCLES(CYCLES_LAR_MEM); } if(seg.selector == 0) { SetZF(0); // not a valid segment // logerror("i386 (%08x): LAR: Selector %04x is invalid type.\n",m_pc,seg.selector); } else { if(!i386_load_protected_mode_segment(&seg,NULL)) { SetZF(0); return; } UINT8 DPL = (seg.flags >> 5) & 3; if(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c)) { SetZF(0); return; } if(!(seg.flags & 0x10)) // special segment { // check for invalid segment types type = seg.flags & 0x000f; if(type == 0x00 || type == 0x08 || type == 0x0a || type == 0x0d) { SetZF(0); // invalid segment type } else { STORE_REG16(modrm,(seg.flags << 8) & 0xff00); SetZF(1); } } else { // data or code segment (both are valid for LAR) STORE_REG16(modrm,(seg.flags << 8) & 0xff00); SetZF(1); } } } else { // illegal opcode i386_trap(6,0, 0); logerror("i386: LAR: Exception - running in real mode or virtual 8086 mode.\n"); } } static void I386OP(lsl_r16_rm16)() // Opcode 0x0f 0x03 { UINT8 modrm = FETCH(); UINT32 limit; I386_SREG seg; if(PROTECTED_MODE && !V8086_MODE) { memset(&seg, 0, sizeof(seg)); if(modrm >= 0xc0) { seg.selector = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); seg.selector = READ16(ea); } if(seg.selector == 0) { SetZF(0); // not a valid segment } else { UINT8 type; if(!i386_load_protected_mode_segment(&seg,NULL)) { SetZF(0); return; } UINT8 DPL = (seg.flags >> 5) & 3; if(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c)) { SetZF(0); return; } type = seg.flags & 0x1f; switch(type) { case 0: case 4: case 5: case 6: case 7: case 8: case 10: case 12: case 13: case 14: case 15: SetZF(0); return; default: limit = seg.limit; STORE_REG16(modrm,limit & 0x0000ffff); SetZF(1); } } } else i386_trap(6, 0, 0); } static void I386OP(bound_r16_m16_m16)() // Opcode 0x62 { UINT8 modrm; INT16 val, low, high; modrm = FETCH(); if (modrm >= 0xc0) { low = high = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); low = READ16(ea + 0); high = READ16(ea + 2); } val = LOAD_REG16(modrm); if ((val < low) || (val > high)) { CYCLES(CYCLES_BOUND_OUT_RANGE); i386_trap(5, 0, 0); } else { CYCLES(CYCLES_BOUND_IN_RANGE); } } static void I386OP(retf16)() // Opcode 0xcb { if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_retf(0,0); } else { m_eip = POP16(); m_sreg[CS].selector = POP16(); i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); } CYCLES(CYCLES_RET_INTERSEG); } static void I386OP(retf_i16)() // Opcode 0xca { UINT16 count = FETCH16(); if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_retf(count,0); } else { m_eip = POP16(); m_sreg[CS].selector = POP16(); i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); REG16(SP) += count; } CYCLES(CYCLES_RET_IMM_INTERSEG); } static bool I386OP(load_far_pointer16)(int s) { UINT8 modrm = FETCH(); UINT16 selector; if( modrm >= 0xc0 ) { //logerror("i386: load_far_pointer16 NYI\n"); // don't log, NT will use this a lot i386_trap(6, 0, 0); return false; } else { UINT32 ea = GetEA(modrm,0); STORE_REG16(modrm, READ16(ea + 0)); selector = READ16(ea + 2); i386_sreg_load(selector,s,NULL); } return true; } static void I386OP(lds16)() // Opcode 0xc5 { if(I386OP(load_far_pointer16)(DS)) { CYCLES(CYCLES_LDS); } } static void I386OP(lss16)() // Opcode 0x0f 0xb2 { if(I386OP(load_far_pointer16)(SS)) { CYCLES(CYCLES_LSS); } } static void I386OP(les16)() // Opcode 0xc4 { if(I386OP(load_far_pointer16)(ES)) { CYCLES(CYCLES_LES); } } static void I386OP(lfs16)() // Opcode 0x0f 0xb4 { if(I386OP(load_far_pointer16)(FS)) { CYCLES(CYCLES_LFS); } } static void I386OP(lgs16)() // Opcode 0x0f 0xb5 { if(I386OP(load_far_pointer16)(GS)) { CYCLES(CYCLES_LGS); } } ================================================ FILE: vm86/mame/emu/cpu/i386/i386op32.c ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett static UINT32 I386OP(shift_rotate32)(UINT8 modrm, UINT32 value, UINT8 shift) { UINT32 dst, src; dst = value; src = value; if( shift == 0 ) { CYCLES_RM(modrm, 3, 7); } else if( shift == 1 ) { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm32, 1 */ m_CF = (src & 0x80000000) ? 1 : 0; dst = (src << 1) + m_CF; m_OF = ((src ^ dst) & 0x80000000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm32, 1 */ m_CF = (src & 0x1) ? 1 : 0; dst = (m_CF << 31) | (src >> 1); m_OF = ((src ^ dst) & 0x80000000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm32, 1 */ dst = (src << 1) + m_CF; m_CF = (src & 0x80000000) ? 1 : 0; m_OF = ((src ^ dst) & 0x80000000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm32, 1 */ dst = (m_CF << 31) | (src >> 1); m_CF = src & 0x1; m_OF = ((src ^ dst) & 0x80000000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm32, 1 */ case 6: dst = src << 1; m_CF = (src & 0x80000000) ? 1 : 0; m_OF = (((m_CF << 31) ^ dst) & 0x80000000) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm32, 1 */ dst = src >> 1; m_CF = src & 0x1; m_OF = (src & 0x80000000) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm32, 1 */ dst = (INT32)(src) >> 1; m_CF = src & 0x1; m_OF = 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } else { shift &= 31; switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm32, i8 */ dst = ((src & ((UINT32)0xffffffff >> shift)) << shift) | ((src & ((UINT32)0xffffffff << (32-shift))) >> (32-shift)); m_CF = dst & 0x1; m_OF = (dst & 1) ^ (dst >> 31); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm32, i8 */ dst = ((src & ((UINT32)0xffffffff << shift)) >> shift) | ((src & ((UINT32)0xffffffff >> (32-shift))) << (32-shift)); m_CF = (dst >> 31) & 0x1; m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm32, i8 */ dst = ((src & ((UINT32)0xffffffff >> shift)) << shift) | ((src & ((UINT32)0xffffffff << (33-shift))) >> (33-shift)) | (m_CF << (shift-1)); m_CF = (src >> (32-shift)) & 0x1; m_OF = m_CF ^ ((dst >> 31) & 1); CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm32, i8 */ dst = ((src & ((UINT32)0xffffffff << shift)) >> shift) | ((src & ((UINT32)0xffffffff >> (32-shift))) << (33-shift)) | (m_CF << (32-shift)); m_CF = (src >> (shift-1)) & 0x1; m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm32, i8 */ case 6: dst = src << shift; m_CF = (src & (1 << (32-shift))) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm32, i8 */ dst = src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm32, i8 */ dst = (INT32)src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } return dst; } static void I386OP(adc_rm32_r32)() // Opcode 0x11 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = ADC32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = ADC32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(adc_r32_rm32)() // Opcode 0x13 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = ADC32(dst, src, m_CF); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = ADC32(dst, src, m_CF); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(adc_eax_i32)() // Opcode 0x15 { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = ADC32(dst, src, m_CF); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(add_rm32_r32)() // Opcode 0x01 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = ADD32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = ADD32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(add_r32_rm32)() // Opcode 0x03 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = ADD32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = ADD32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(add_eax_i32)() // Opcode 0x05 { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = ADD32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(and_rm32_r32)() // Opcode 0x21 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = AND32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = AND32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(and_r32_rm32)() // Opcode 0x23 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = AND32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = AND32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(and_eax_i32)() // Opcode 0x25 { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = AND32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(bsf_r32_rm32)() // Opcode 0x0f bc { UINT32 src, dst, temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); } dst = 0; if( src == 0 ) { m_ZF = 1; } else { m_ZF = 0; temp = 0; while( (src & (1 << temp)) == 0 ) { temp++; dst = temp; CYCLES(CYCLES_BSF); } STORE_REG32(modrm, dst); } CYCLES(CYCLES_BSF_BASE); } static void I386OP(bsr_r32_rm32)() // Opcode 0x0f bd { UINT32 src, dst, temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); } dst = 0; if( src == 0 ) { m_ZF = 1; } else { m_ZF = 0; dst = temp = 31; while( (src & (1 << temp)) == 0 ) { temp--; dst = temp; CYCLES(CYCLES_BSR); } STORE_REG32(modrm, dst); } CYCLES(CYCLES_BSR_BASE); } static void I386OP(bt_rm32_r32)() // Opcode 0x0f a3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 bit = LOAD_REG32(modrm); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT32 bit = LOAD_REG32(modrm); ea += 4*(bit/32); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),0); bit %= 32; UINT32 dst = READ32(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_REG_MEM); } } static void I386OP(btc_rm32_r32)() // Opcode 0x0f bb { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 bit = LOAD_REG32(modrm); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTC_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT32 bit = LOAD_REG32(modrm); ea += 4*(bit/32); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 32; UINT32 dst = READ32(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTC_REG_MEM); } } static void I386OP(btr_rm32_r32)() // Opcode 0x0f b3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 bit = LOAD_REG32(modrm); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTR_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT32 bit = LOAD_REG32(modrm); ea += 4*(bit/32); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 32; UINT32 dst = READ32(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTR_REG_MEM); } } static void I386OP(bts_rm32_r32)() // Opcode 0x0f ab { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 bit = LOAD_REG32(modrm); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTS_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT32 bit = LOAD_REG32(modrm); ea += 4*(bit/32); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 32; UINT32 dst = READ32(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTS_REG_MEM); } } static void I386OP(call_abs32)() // Opcode 0x9a { UINT32 offset = FETCH32(); UINT16 ptr = FETCH16(); if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_call(ptr,offset,0,1); } else { PUSH32(m_sreg[CS].selector ); PUSH32(m_eip ); m_sreg[CS].selector = ptr; m_performed_intersegment_jump = 1; m_eip = offset; i386_load_segment_descriptor(CS); } CYCLES(CYCLES_CALL_INTERSEG); CHANGE_PC(m_eip); } static void I386OP(call_rel32)() // Opcode 0xe8 { INT32 disp = FETCH32(); PUSH32(m_eip ); m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_CALL); /* TODO: Timing = 7 + m */ } static void I386OP(cdq)() // Opcode 0x99 { if( REG32(EAX) & 0x80000000 ) { REG32(EDX) = 0xffffffff; } else { REG32(EDX) = 0x00000000; } CYCLES(CYCLES_CWD); } static void I386OP(cmp_rm32_r32)() // Opcode 0x39 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG32(modrm); dst = READ32(ea); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } } static void I386OP(cmp_r32_rm32)() // Opcode 0x3b { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); SUB32(dst, src); CYCLES(CYCLES_CMP_MEM_REG); } } static void I386OP(cmp_eax_i32)() // Opcode 0x3d { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); SUB32(dst, src); CYCLES(CYCLES_CMP_IMM_ACC); } static void I386OP(cmpsd)() // Opcode 0xa7 { UINT32 eas, ead, src, dst; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ32(eas); dst = READ32(ead); SUB32(src,dst); BUMP_SI(4); BUMP_DI(4); CYCLES(CYCLES_CMPS); } static void I386OP(cwde)() // Opcode 0x98 { REG32(EAX) = (INT32)((INT16)REG16(AX)); CYCLES(CYCLES_CBW); } static void I386OP(dec_eax)() // Opcode 0x48 { REG32(EAX) = DEC32(REG32(EAX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_ecx)() // Opcode 0x49 { REG32(ECX) = DEC32(REG32(ECX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_edx)() // Opcode 0x4a { REG32(EDX) = DEC32(REG32(EDX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_ebx)() // Opcode 0x4b { REG32(EBX) = DEC32(REG32(EBX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_esp)() // Opcode 0x4c { REG32(ESP) = DEC32(REG32(ESP) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_ebp)() // Opcode 0x4d { REG32(EBP) = DEC32(REG32(EBP) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_esi)() // Opcode 0x4e { REG32(ESI) = DEC32(REG32(ESI) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_edi)() // Opcode 0x4f { REG32(EDI) = DEC32(REG32(EDI) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(imul_r32_rm32)() // Opcode 0x0f af { UINT8 modrm = FETCH(); INT64 result; INT64 src, dst; if( modrm >= 0xc0 ) { src = (INT64)(INT32)LOAD_RM32(modrm); CYCLES(CYCLES_IMUL32_REG_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT64)(INT32)READ32(ea); CYCLES(CYCLES_IMUL32_REG_REG); /* TODO: Correct multiply timing */ } dst = (INT64)(INT32)LOAD_REG32(modrm); result = src * dst; STORE_REG32(modrm, (UINT32)result); m_CF = m_OF = !(result == (INT64)(INT32)result); } static void I386OP(imul_r32_rm32_i32)() // Opcode 0x69 { UINT8 modrm = FETCH(); INT64 result; INT64 src, dst; if( modrm >= 0xc0 ) { dst = (INT64)(INT32)LOAD_RM32(modrm); CYCLES(CYCLES_IMUL32_REG_IMM_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); dst = (INT64)(INT32)READ32(ea); CYCLES(CYCLES_IMUL32_MEM_IMM_REG); /* TODO: Correct multiply timing */ } src = (INT64)(INT32)FETCH32(); result = src * dst; STORE_REG32(modrm, (UINT32)result); m_CF = m_OF = !(result == (INT64)(INT32)result); } static void I386OP(imul_r32_rm32_i8)() // Opcode 0x6b { UINT8 modrm = FETCH(); INT64 result; INT64 src, dst; if( modrm >= 0xc0 ) { dst = (INT64)(INT32)LOAD_RM32(modrm); CYCLES(CYCLES_IMUL32_REG_IMM_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); dst = (INT64)(INT32)READ32(ea); CYCLES(CYCLES_IMUL32_MEM_IMM_REG); /* TODO: Correct multiply timing */ } src = (INT64)(INT8)FETCH(); result = src * dst; STORE_REG32(modrm, (UINT32)result); m_CF = m_OF = !(result == (INT64)(INT32)result); } static void I386OP(in_eax_i8)() // Opcode 0xe5 { UINT16 port = FETCH(); UINT32 data = READPORT32(port); REG32(EAX) = data; CYCLES(CYCLES_IN_VAR); } static void I386OP(in_eax_dx)() // Opcode 0xed { UINT16 port = REG16(DX); UINT32 data = READPORT32(port); REG32(EAX) = data; CYCLES(CYCLES_IN); } static void I386OP(inc_eax)() // Opcode 0x40 { REG32(EAX) = INC32(REG32(EAX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_ecx)() // Opcode 0x41 { REG32(ECX) = INC32(REG32(ECX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_edx)() // Opcode 0x42 { REG32(EDX) = INC32(REG32(EDX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_ebx)() // Opcode 0x43 { REG32(EBX) = INC32(REG32(EBX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_esp)() // Opcode 0x44 { REG32(ESP) = INC32(REG32(ESP) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_ebp)() // Opcode 0x45 { REG32(EBP) = INC32(REG32(EBP) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_esi)() // Opcode 0x46 { REG32(ESI) = INC32(REG32(ESI) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_edi)() // Opcode 0x47 { REG32(EDI) = INC32(REG32(EDI) ); CYCLES(CYCLES_INC_REG); } static void I386OP(iret32)() // Opcode 0xcf { UINT32 old = m_eip; if( PROTECTED_MODE ) { i386_protected_mode_iret(1); } else { /* TODO: #SS(0) exception */ /* TODO: #GP(0) exception */ m_eip = POP32(); m_sreg[CS].selector = POP32() & 0xffff; set_flags(POP32() ); i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } CYCLES(CYCLES_IRET); // MS-DOS system call if(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) { msdos_syscall(old - IRET_TOP); } } static void I386OP(ja_rel32)() // Opcode 0x0f 87 { INT32 disp = FETCH32(); if( m_CF == 0 && m_ZF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jbe_rel32)() // Opcode 0x0f 86 { INT32 disp = FETCH32(); if( m_CF != 0 || m_ZF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jc_rel32)() // Opcode 0x0f 82 { INT32 disp = FETCH32(); if( m_CF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jg_rel32)() // Opcode 0x0f 8f { INT32 disp = FETCH32(); if( m_ZF == 0 && (m_SF == m_OF) ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jge_rel32)() // Opcode 0x0f 8d { INT32 disp = FETCH32(); if(m_SF == m_OF) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jl_rel32)() // Opcode 0x0f 8c { INT32 disp = FETCH32(); if( (m_SF != m_OF) ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jle_rel32)() // Opcode 0x0f 8e { INT32 disp = FETCH32(); if( m_ZF != 0 || (m_SF != m_OF) ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnc_rel32)() // Opcode 0x0f 83 { INT32 disp = FETCH32(); if( m_CF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jno_rel32)() // Opcode 0x0f 81 { INT32 disp = FETCH32(); if( m_OF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnp_rel32)() // Opcode 0x0f 8b { INT32 disp = FETCH32(); if( m_PF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jns_rel32)() // Opcode 0x0f 89 { INT32 disp = FETCH32(); if( m_SF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnz_rel32)() // Opcode 0x0f 85 { INT32 disp = FETCH32(); if( m_ZF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jo_rel32)() // Opcode 0x0f 80 { INT32 disp = FETCH32(); if( m_OF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jp_rel32)() // Opcode 0x0f 8a { INT32 disp = FETCH32(); if( m_PF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(js_rel32)() // Opcode 0x0f 88 { INT32 disp = FETCH32(); if( m_SF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jz_rel32)() // Opcode 0x0f 84 { INT32 disp = FETCH32(); if( m_ZF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jcxz32)() // Opcode 0xe3 { INT8 disp = FETCH(); int val = (m_address_size)?(REG32(ECX) == 0):(REG16(CX) == 0); if( val ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCXZ); /* TODO: Timing = 9 + m */ } else { CYCLES(CYCLES_JCXZ_NOBRANCH); } } static void I386OP(jmp_rel32)() // Opcode 0xe9 { UINT32 disp = FETCH32(); /* TODO: Segment limit */ m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JMP); /* TODO: Timing = 7 + m */ } static void I386OP(jmp_abs32)() // Opcode 0xea { UINT32 address = FETCH32(); UINT16 segment = FETCH16(); if( PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(segment,address,0,1); } else { m_eip = address; m_sreg[CS].selector = segment; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } CYCLES(CYCLES_JMP_INTERSEG); } static void I386OP(lea32)() // Opcode 0x8d { UINT8 modrm = FETCH(); UINT32 ea = GetNonTranslatedEA(modrm,NULL); if (!m_address_size) { ea &= 0xffff; } STORE_REG32(modrm, ea); CYCLES(CYCLES_LEA); } static void I386OP(enter32)() // Opcode 0xc8 { UINT16 framesize = FETCH16(); UINT8 level = FETCH() % 32; UINT8 x; UINT32 frameptr; PUSH32(REG32(EBP)); if(!STACK_32BIT) frameptr = REG16(SP); else frameptr = REG32(ESP); if(level > 0) { for(x=1;x<=level-1;x++) { UINT32 addr; if(!STACK_32BIT) { REG16(BP) -= 4; addr = REG16(BP); } else { REG32(EBP) -= 4; addr = REG32(EBP); } PUSH32(READ32(i386_translate(SS, addr, 0))); } PUSH32(frameptr); } REG32(EBP) = frameptr; if(!STACK_32BIT) REG16(SP) -= framesize; else REG32(ESP) -= framesize; CYCLES(CYCLES_ENTER); } static void I386OP(leave32)() // Opcode 0xc9 { if(!STACK_32BIT) REG16(SP) = REG16(BP); else REG32(ESP) = REG32(EBP); REG32(EBP) = POP32(); CYCLES(CYCLES_LEAVE); } static void I386OP(lodsd)() // Opcode 0xad { UINT32 eas; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } REG32(EAX) = READ32(eas); BUMP_SI(4); CYCLES(CYCLES_LODS); } static void I386OP(loop32)() // Opcode 0xe2 { INT8 disp = FETCH(); INT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX); if( reg != 0 ) { m_eip += disp; CHANGE_PC(m_eip); } CYCLES(CYCLES_LOOP); /* TODO: Timing = 11 + m */ } static void I386OP(loopne32)() // Opcode 0xe0 { INT8 disp = FETCH(); INT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX); if( reg != 0 && m_ZF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); } CYCLES(CYCLES_LOOPNZ); /* TODO: Timing = 11 + m */ } static void I386OP(loopz32)() // Opcode 0xe1 { INT8 disp = FETCH(); INT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX); if( reg != 0 && m_ZF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); } CYCLES(CYCLES_LOOPZ); /* TODO: Timing = 11 + m */ } static void I386OP(mov_rm32_r32)() // Opcode 0x89 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); STORE_RM32(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); WRITE32(ea, src); CYCLES(CYCLES_MOV_REG_MEM); } } static void I386OP(mov_r32_rm32)() // Opcode 0x8b { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOV_MEM_REG); } } static void I386OP(mov_rm32_i32)() // Opcode 0xc7 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 value = FETCH32(); STORE_RM32(modrm, value); CYCLES(CYCLES_MOV_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 value = FETCH32(); WRITE32(ea, value); CYCLES(CYCLES_MOV_IMM_MEM); } } static void I386OP(mov_eax_m32)() // Opcode 0xa1 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 0 ); } else { ea = i386_translate(DS, offset, 0 ); } REG32(EAX) = READ32(ea); CYCLES(CYCLES_MOV_MEM_ACC); } static void I386OP(mov_m32_eax)() // Opcode 0xa3 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 1 ); } else { ea = i386_translate(DS, offset, 1 ); } WRITE32(ea, REG32(EAX) ); CYCLES(CYCLES_MOV_ACC_MEM); } static void I386OP(mov_eax_i32)() // Opcode 0xb8 { REG32(EAX) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ecx_i32)() // Opcode 0xb9 { REG32(ECX) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_edx_i32)() // Opcode 0xba { REG32(EDX) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ebx_i32)() // Opcode 0xbb { REG32(EBX) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_esp_i32)() // Opcode 0xbc { REG32(ESP) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ebp_i32)() // Opcode 0xbd { REG32(EBP) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_esi_i32)() // Opcode 0xbe { REG32(ESI) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_edi_i32)() // Opcode 0xbf { REG32(EDI) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(movsd)() // Opcode 0xa5 { UINT32 eas, ead, v; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); v = READ32(eas); WRITE32(ead, v); BUMP_SI(4); BUMP_DI(4); CYCLES(CYCLES_MOVS); } static void I386OP(movsx_r32_rm8)() // Opcode 0x0f be { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { INT32 src = (INT8)LOAD_RM8(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVSX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); INT32 src = (INT8)READ8(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVSX_MEM_REG); } } static void I386OP(movsx_r32_rm16)() // Opcode 0x0f bf { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { INT32 src = (INT16)LOAD_RM16(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVSX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); INT32 src = (INT16)READ16(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVSX_MEM_REG); } } static void I386OP(movzx_r32_rm8)() // Opcode 0x0f b6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 src = (UINT8)LOAD_RM8(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVZX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); UINT32 src = (UINT8)READ8(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVZX_MEM_REG); } } static void I386OP(movzx_r32_rm16)() // Opcode 0x0f b7 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 src = (UINT16)LOAD_RM16(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVZX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); UINT32 src = (UINT16)READ16(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVZX_MEM_REG); } } static void I386OP(or_rm32_r32)() // Opcode 0x09 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = OR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = OR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(or_r32_rm32)() // Opcode 0x0b { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = OR32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = OR32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(or_eax_i32)() // Opcode 0x0d { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = OR32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(out_eax_i8)() // Opcode 0xe7 { UINT16 port = FETCH(); UINT32 data = REG32(EAX); WRITEPORT32(port, data); CYCLES(CYCLES_OUT_VAR); } static void I386OP(out_eax_dx)() // Opcode 0xef { UINT16 port = REG16(DX); UINT32 data = REG32(EAX); WRITEPORT32(port, data); CYCLES(CYCLES_OUT); } static void I386OP(pop_eax)() // Opcode 0x58 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EAX) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_ecx)() // Opcode 0x59 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(ECX) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_edx)() // Opcode 0x5a { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EDX) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_ebx)() // Opcode 0x5b { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EBX) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_esp)() // Opcode 0x5c { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(ESP) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_ebp)() // Opcode 0x5d { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EBP) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_esi)() // Opcode 0x5e { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(ESI) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_edi)() // Opcode 0x5f { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EDI) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static bool I386OP(pop_seg32)(int segment) { UINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); UINT32 value; bool fault; if(i386_limit_check(SS,offset+3) == 0) { ea = i386_translate(SS, offset, 0); value = READ32(ea); i386_sreg_load(value, segment, &fault); if(fault) return false; if(STACK_32BIT) REG32(ESP) = offset + 4; else REG16(SP) = offset + 4; } else { m_ext = 1; i386_trap_with_error(FAULT_SS,0,0,0); return false; } CYCLES(CYCLES_POP_SREG); return true; } static void I386OP(pop_ds32)() // Opcode 0x1f { I386OP(pop_seg32)(DS); } static void I386OP(pop_es32)() // Opcode 0x07 { I386OP(pop_seg32)(ES); } static void I386OP(pop_fs32)() // Opcode 0x0f a1 { I386OP(pop_seg32)(FS); } static void I386OP(pop_gs32)() // Opcode 0x0f a9 { I386OP(pop_seg32)(GS); } static void I386OP(pop_ss32)() // Opcode 0x17 { if(!I386OP(pop_seg32)(SS)) return; if(m_IF != 0) // if external interrupts are enabled { m_IF = 0; // reset IF for the next instruction m_delayed_interrupt_enable = 1; } } static void I386OP(pop_rm32)() // Opcode 0x8f { UINT8 modrm = FETCH(); UINT32 value; UINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) { // be careful here, if the write references the esp register // it expects the post-pop value but esp must be wound back // if the write faults UINT32 temp_sp = REG32(ESP); value = POP32(); if( modrm >= 0xc0 ) { STORE_RM32(modrm, value); } else { try { ea = GetEA(modrm,1); WRITE32(ea, value); } catch(UINT64 e) { REG32(ESP) = temp_sp; throw e; } } } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_RM); } static void I386OP(popad)() // Opcode 0x61 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+31) == 0) { REG32(EDI) = POP32(); REG32(ESI) = POP32(); REG32(EBP) = POP32(); REG32(ESP) += 4; REG32(EBX) = POP32(); REG32(EDX) = POP32(); REG32(ECX) = POP32(); REG32(EAX) = POP32(); } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POPA); } static void I386OP(popfd)() // Opcode 0x9d { UINT32 value; UINT32 current = get_flags(); UINT8 IOPL = (current >> 12) & 0x03; UINT32 mask = 0x00257fd5; // VM, VIP and VIF cannot be set by POPF/POPFD UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); // IOPL can only change if CPL is 0 if(m_CPL != 0) mask &= ~0x00003000; // IF can only change if CPL is at least as privileged as IOPL if(m_CPL > IOPL) mask &= ~0x00000200; if(V8086_MODE) { if(IOPL < 3) { logerror("POPFD(%08x): IOPL < 3 while in V86 mode.\n",m_pc); FAULT(FAULT_GP,0) // #GP(0) } mask &= ~0x00003000; // IOPL cannot be changed while in V8086 mode } if(i386_limit_check(SS,offset+3) == 0) { value = POP32(); value &= ~0x00010000; // RF will always return zero set_flags((current & ~mask) | (value & mask)); // mask out reserved bits } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POPF); } static void I386OP(push_eax)() // Opcode 0x50 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EAX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_ecx)() // Opcode 0x51 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(ECX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_edx)() // Opcode 0x52 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EDX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_ebx)() // Opcode 0x53 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EBX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_esp)() // Opcode 0x54 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(ESP) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_ebp)() // Opcode 0x55 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EBP) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_esi)() // Opcode 0x56 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(ESI) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_edi)() // Opcode 0x57 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EDI) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_cs32)() // Opcode 0x0e { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[CS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_ds32)() // Opcode 0x1e { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[DS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_es32)() // Opcode 0x06 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[ES].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_fs32)() // Opcode 0x0f a0 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[FS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_gs32)() // Opcode 0x0f a8 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[GS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_ss32)() // Opcode 0x16 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[SS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_i32)() // Opcode 0x68 { UINT32 value = FETCH32(); UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(value); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_IMM); } static void I386OP(pushad)() // Opcode 0x60 { UINT32 temp = REG32(ESP); UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 32; else offset = (REG16(SP) - 32) & 0xffff; if(i386_limit_check(SS,offset) == 0) { PUSH32(REG32(EAX) ); PUSH32(REG32(ECX) ); PUSH32(REG32(EDX) ); PUSH32(REG32(EBX) ); PUSH32(temp ); PUSH32(REG32(EBP) ); PUSH32(REG32(ESI) ); PUSH32(REG32(EDI) ); } else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSHA); } static void I386OP(pushfd)() // Opcode 0x9c { if(!m_IOP1 && !m_IOP2 && V8086_MODE) FAULT(FAULT_GP,0) UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(get_flags() & 0x00fcffff ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSHF); } static void I386OP(ret_near32_i16)() // Opcode 0xc2 { INT16 disp = FETCH16(); m_eip = POP32(); REG32(ESP) += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_RET_IMM); /* TODO: Timing = 10 + m */ } static void I386OP(ret_near32)() // Opcode 0xc3 { m_eip = POP32(); CHANGE_PC(m_eip); CYCLES(CYCLES_RET); /* TODO: Timing = 10 + m */ } static void I386OP(sbb_rm32_r32)() // Opcode 0x19 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = SBB32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = SBB32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sbb_r32_rm32)() // Opcode 0x1b { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = SBB32(dst, src, m_CF); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = SBB32(dst, src, m_CF); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sbb_eax_i32)() // Opcode 0x1d { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = SBB32(dst, src, m_CF); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(scasd)() // Opcode 0xaf { UINT32 eas, src, dst; eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ32(eas); dst = REG32(EAX); SUB32(dst, src); BUMP_DI(4); CYCLES(CYCLES_SCAS); } static void I386OP(shld32_i8)() // Opcode 0x0f a4 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (32-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 31); SetSZPF32(dst); } STORE_RM32(modrm, dst); CYCLES(CYCLES_SHLD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (32-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 31); SetSZPF32(dst); } WRITE32(ea, dst); CYCLES(CYCLES_SHLD_MEM); } } static void I386OP(shld32_cl)() // Opcode 0x0f a5 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (32-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 31); SetSZPF32(dst); } STORE_RM32(modrm, dst); CYCLES(CYCLES_SHLD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (32-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 31); SetSZPF32(dst); } WRITE32(ea, dst); CYCLES(CYCLES_SHLD_MEM); } } static void I386OP(shrd32_i8)() // Opcode 0x0f ac { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (32-shift)); m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; SetSZPF32(dst); } STORE_RM32(modrm, dst); CYCLES(CYCLES_SHRD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (32-shift)); m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; SetSZPF32(dst); } WRITE32(ea, dst); CYCLES(CYCLES_SHRD_MEM); } } static void I386OP(shrd32_cl)() // Opcode 0x0f ad { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (32-shift)); m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; SetSZPF32(dst); } STORE_RM32(modrm, dst); CYCLES(CYCLES_SHRD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (32-shift)); m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; SetSZPF32(dst); } WRITE32(ea, dst); CYCLES(CYCLES_SHRD_MEM); } } static void I386OP(stosd)() // Opcode 0xab { UINT32 eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); WRITE32(eas, REG32(EAX)); BUMP_DI(4); CYCLES(CYCLES_STOS); } static void I386OP(sub_rm32_r32)() // Opcode 0x29 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = SUB32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = SUB32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sub_r32_rm32)() // Opcode 0x2b { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = SUB32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = READ32(ea); dst = LOAD_REG32(modrm); dst = SUB32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sub_eax_i32)() // Opcode 0x2d { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = SUB32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(test_eax_i32)() // Opcode 0xa9 { UINT32 src = FETCH32(); UINT32 dst = REG32(EAX); dst = src & dst; SetSZPF32(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_IMM_ACC); } static void I386OP(test_rm32_r32)() // Opcode 0x85 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = src & dst; SetSZPF32(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG32(modrm); dst = READ32(ea); dst = src & dst; SetSZPF32(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_MEM); } } static void I386OP(xchg_eax_ecx)() // Opcode 0x91 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(ECX); REG32(ECX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_edx)() // Opcode 0x92 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(EDX); REG32(EDX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_ebx)() // Opcode 0x93 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(EBX); REG32(EBX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_esp)() // Opcode 0x94 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(ESP); REG32(ESP) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_ebp)() // Opcode 0x95 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(EBP); REG32(EBP) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_esi)() // Opcode 0x96 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(ESI); REG32(ESI) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_edi)() // Opcode 0x97 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(EDI); REG32(EDI) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_r32_rm32)() // Opcode 0x87 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 src = LOAD_RM32(modrm); UINT32 dst = LOAD_REG32(modrm); STORE_REG32(modrm, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_XCHG_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 src = READ32(ea); UINT32 dst = LOAD_REG32(modrm); WRITE32(ea, dst); STORE_REG32(modrm, src); CYCLES(CYCLES_XCHG_REG_MEM); } } static void I386OP(xor_rm32_r32)() // Opcode 0x31 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = XOR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = XOR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(xor_r32_rm32)() // Opcode 0x33 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = XOR32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = XOR32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(xor_eax_i32)() // Opcode 0x35 { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = XOR32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(group81_32)() // Opcode 0x81 { UINT32 ea; UINT32 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = ADD32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = ADD32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = OR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = OR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = ADC32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = ADC32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = SBB32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = SBB32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = AND32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = AND32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = SUB32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = SUB32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = XOR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = XOR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ32(ea); src = FETCH32(); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(group83_32)() // Opcode 0x83 { UINT32 ea; UINT32 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = ADD32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = ADD32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = OR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = OR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = ADC32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = ADC32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = ((UINT32)(INT32)(INT8)FETCH()); dst = SBB32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = ((UINT32)(INT32)(INT8)FETCH()); dst = SBB32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = AND32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = AND32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = SUB32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = SUB32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = XOR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = XOR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(groupC1_32)() // Opcode 0xc1 { UINT32 dst; UINT8 modrm = FETCH(); UINT8 shift; if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); shift = FETCH() & 0x1f; dst = i386_shift_rotate32(modrm, dst, shift); STORE_RM32(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ32(ea); shift = FETCH() & 0x1f; dst = i386_shift_rotate32(modrm, dst, shift); WRITE32(ea, dst); } } static void I386OP(groupD1_32)() // Opcode 0xd1 { UINT32 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); dst = i386_shift_rotate32(modrm, dst, 1); STORE_RM32(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ32(ea); dst = i386_shift_rotate32(modrm, dst, 1); WRITE32(ea, dst); } } static void I386OP(groupD3_32)() // Opcode 0xd3 { UINT32 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); dst = i386_shift_rotate32(modrm, dst, REG8(CL)); STORE_RM32(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ32(ea); dst = i386_shift_rotate32(modrm, dst, REG8(CL)); WRITE32(ea, dst); } } static void I386OP(groupF7_32)() // Opcode 0xf7 { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* TEST Rm32, i32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 src = FETCH32(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF32(dst); CYCLES(CYCLES_TEST_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT32 dst = READ32(ea); UINT32 src = FETCH32(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF32(dst); CYCLES(CYCLES_TEST_IMM_MEM); } break; case 2: /* NOT Rm32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); dst = ~dst; STORE_RM32(modrm, dst); CYCLES(CYCLES_NOT_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); dst = ~dst; WRITE32(ea, dst); CYCLES(CYCLES_NOT_MEM); } break; case 3: /* NEG Rm32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); dst = SUB32(0, dst ); STORE_RM32(modrm, dst); CYCLES(CYCLES_NEG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); dst = SUB32(0, dst ); WRITE32(ea, dst); CYCLES(CYCLES_NEG_MEM); } break; case 4: /* MUL EAX, Rm32 */ { UINT64 result; UINT32 src, dst; if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); CYCLES(CYCLES_MUL32_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); CYCLES(CYCLES_MUL32_ACC_MEM); /* TODO: Correct multiply timing */ } dst = REG32(EAX); result = (UINT64)src * (UINT64)dst; REG32(EDX) = (UINT32)(result >> 32); REG32(EAX) = (UINT32)result; m_CF = m_OF = (REG32(EDX) != 0); } break; case 5: /* IMUL EAX, Rm32 */ { INT64 result; INT64 src, dst; if( modrm >= 0xc0 ) { src = (INT64)(INT32)LOAD_RM32(modrm); CYCLES(CYCLES_IMUL32_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT64)(INT32)READ32(ea); CYCLES(CYCLES_IMUL32_ACC_MEM); /* TODO: Correct multiply timing */ } dst = (INT64)(INT32)REG32(EAX); result = src * dst; REG32(EDX) = (UINT32)(result >> 32); REG32(EAX) = (UINT32)result; m_CF = m_OF = !(result == (INT64)(INT32)result); } break; case 6: /* DIV EAX, Rm32 */ { UINT64 quotient, remainder, result; UINT32 src; if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); CYCLES(CYCLES_DIV32_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); CYCLES(CYCLES_DIV32_ACC_MEM); } quotient = ((UINT64)(REG32(EDX)) << 32) | (UINT64)(REG32(EAX)); if( src ) { remainder = quotient % (UINT64)src; result = quotient / (UINT64)src; if( result > 0xffffffff ) { /* TODO: Divide error */ } else { REG32(EDX) = (UINT32)remainder; REG32(EAX) = (UINT32)result; } } else { i386_trap(0, 0, 0); } } break; case 7: /* IDIV EAX, Rm32 */ { INT64 quotient, remainder, result; UINT32 src; if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); CYCLES(CYCLES_IDIV32_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); CYCLES(CYCLES_IDIV32_ACC_MEM); } quotient = (((INT64)REG32(EDX)) << 32) | ((UINT64)REG32(EAX)); if( src ) { remainder = quotient % (INT64)(INT32)src; result = quotient / (INT64)(INT32)src; if( result > 0xffffffff ) { /* TODO: Divide error */ } else { REG32(EDX) = (UINT32)remainder; REG32(EAX) = (UINT32)result; } } else { i386_trap(0, 0, 0); } } break; } } static void I386OP(groupFF_32)() // Opcode 0xff { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* INC Rm32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); dst = INC32(dst); STORE_RM32(modrm, dst); CYCLES(CYCLES_INC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); dst = INC32(dst); WRITE32(ea, dst); CYCLES(CYCLES_INC_MEM); } break; case 1: /* DEC Rm32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); dst = DEC32(dst); STORE_RM32(modrm, dst); CYCLES(CYCLES_DEC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); dst = DEC32(dst); WRITE32(ea, dst); CYCLES(CYCLES_DEC_MEM); } break; case 2: /* CALL Rm32 */ { UINT32 address; if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); CYCLES(CYCLES_CALL_REG); /* TODO: Timing = 7 + m */ } else { UINT32 ea = GetEA(modrm,0); address = READ32(ea); CYCLES(CYCLES_CALL_MEM); /* TODO: Timing = 10 + m */ } PUSH32(m_eip ); m_eip = address; CHANGE_PC(m_eip); } break; case 3: /* CALL FAR Rm32 */ { UINT16 selector; UINT32 address; if( modrm >= 0xc0 ) { report_invalid_modrm("groupFF_32", modrm); } else { UINT32 ea = GetEA(modrm,0); address = READ32(ea + 0); selector = READ16(ea + 4); CYCLES(CYCLES_CALL_MEM_INTERSEG); /* TODO: Timing = 10 + m */ if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_call(selector,address,1,1); } else { PUSH32(m_sreg[CS].selector ); PUSH32(m_eip ); m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS ); m_eip = address; CHANGE_PC(m_eip); } } } break; case 4: /* JMP Rm32 */ { UINT32 address; if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); CYCLES(CYCLES_JMP_REG); /* TODO: Timing = 7 + m */ } else { UINT32 ea = GetEA(modrm,0); address = READ32(ea); CYCLES(CYCLES_JMP_MEM); /* TODO: Timing = 10 + m */ } m_eip = address; CHANGE_PC(m_eip); } break; case 5: /* JMP FAR Rm32 */ { UINT16 selector; UINT32 address; if( modrm >= 0xc0 ) { report_invalid_modrm("groupFF_32", modrm); } else { UINT32 ea = GetEA(modrm,0); address = READ32(ea + 0); selector = READ16(ea + 4); CYCLES(CYCLES_JMP_MEM_INTERSEG); /* TODO: Timing = 10 + m */ if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(selector,address,1,1); } else { m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS ); m_eip = address; CHANGE_PC(m_eip); } } } break; case 6: /* PUSH Rm32 */ { UINT32 value; if( modrm >= 0xc0 ) { value = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); value = READ32(ea); } PUSH32(value); CYCLES(CYCLES_PUSH_RM); } break; default: report_invalid_modrm("groupFF_32", modrm); break; } } static void I386OP(group0F00_32)() // Opcode 0x0f 00 { UINT32 address, ea; UINT8 modrm = FETCH(); I386_SREG seg; UINT8 result; switch( (modrm >> 3) & 0x7 ) { case 0: /* SLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { STORE_RM32(modrm, m_ldtr.segment); CYCLES(CYCLES_SLDT_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_ldtr.segment); CYCLES(CYCLES_SLDT_MEM); } } else { i386_trap(6, 0, 0); } break; case 1: /* STR */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { STORE_RM32(modrm, m_task.segment); CYCLES(CYCLES_STR_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_task.segment); CYCLES(CYCLES_STR_MEM); } } else { i386_trap(6, 0, 0); } break; case 2: /* LLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); m_ldtr.segment = address; CYCLES(CYCLES_LLDT_REG); } else { ea = GetEA(modrm,0); m_ldtr.segment = READ32(ea); CYCLES(CYCLES_LLDT_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = m_ldtr.segment; i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = seg.limit; m_ldtr.base = seg.base; m_ldtr.flags = seg.flags; } else { i386_trap(6, 0, 0); } break; case 3: /* LTR */ if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); m_task.segment = address; CYCLES(CYCLES_LTR_REG); } else { ea = GetEA(modrm,0); m_task.segment = READ32(ea); CYCLES(CYCLES_LTR_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = m_task.segment; i386_load_protected_mode_segment(&seg,NULL); UINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5; i386_translate_address(TRANSLATE_READ, &addr, NULL); write_byte(addr, (seg.flags & 0xff) | 2); m_task.limit = seg.limit; m_task.base = seg.base; m_task.flags = seg.flags | 2; } else { i386_trap(6, 0, 0); } break; case 4: /* VERR */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); CYCLES(CYCLES_VERR_REG); } else { ea = GetEA(modrm,0); address = READ32(ea); CYCLES(CYCLES_VERR_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = address; result = i386_load_protected_mode_segment(&seg,NULL); // check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...) if(!(seg.flags & 0x10)) result = 0; // check that the segment is readable if(seg.flags & 0x10) // is code or data segment { if(seg.flags & 0x08) // is code segment, so check if it's readable { if(!(seg.flags & 0x02)) { result = 0; } else { // check if conforming, these are always readable, regardless of privilege if(!(seg.flags & 0x04)) { // if not conforming, then we must check privilege levels (TODO: current privilege level check) if(((seg.flags >> 5) & 0x03) < (address & 0x03)) result = 0; } } } } // check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO) SetZF(result); } else { i386_trap(6, 0, 0); logerror("i386: VERR: Exception - Running in real mode or virtual 8086 mode.\n"); } break; case 5: /* VERW */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_VERW_REG); } else { ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_VERW_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = address; result = i386_load_protected_mode_segment(&seg,NULL); // check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...) if(!(seg.flags & 0x10)) result = 0; // check that the segment is writable if(seg.flags & 0x10) // is code or data segment { if(seg.flags & 0x08) // is code segment (and thus, not writable) { result = 0; } else { // is data segment if(!(seg.flags & 0x02)) result = 0; } } // check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO) if(((seg.flags >> 5) & 0x03) < (address & 0x03)) result = 0; SetZF(result); } else { i386_trap(6, 0, 0); logerror("i386: VERW: Exception - Running in real mode or virtual 8086 mode.\n"); } break; default: report_invalid_modrm("group0F00_32", modrm); break; } } static void I386OP(group0F01_32)() // Opcode 0x0f 01 { UINT8 modrm = FETCH(); UINT32 address, ea; switch( (modrm >> 3) & 0x7 ) { case 0: /* SGDT */ { if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate(CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_gdtr.limit); WRITE32(ea + 2, m_gdtr.base); CYCLES(CYCLES_SGDT); break; } case 1: /* SIDT */ { if (modrm >= 0xc0) { address = LOAD_RM32(modrm); ea = i386_translate(CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_idtr.limit); WRITE32(ea + 2, m_idtr.base); CYCLES(CYCLES_SIDT); break; } case 2: /* LGDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate(CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_gdtr.limit = READ16(ea); m_gdtr.base = READ32(ea + 2); CYCLES(CYCLES_LGDT); break; } case 3: /* LIDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate(CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_idtr.limit = READ16(ea); m_idtr.base = READ32(ea + 2); CYCLES(CYCLES_LIDT); break; } case 4: /* SMSW */ { if( modrm >= 0xc0 ) { // smsw stores all of cr0 into register STORE_RM32(modrm, m_cr[0]); CYCLES(CYCLES_SMSW_REG); } else { /* always 16-bit memory operand */ ea = GetEA(modrm,1); WRITE16(ea, m_cr[0]); CYCLES(CYCLES_SMSW_MEM); } break; } case 6: /* LMSW */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) UINT16 b; if( modrm >= 0xc0 ) { b = LOAD_RM16(modrm); CYCLES(CYCLES_LMSW_REG); } else { ea = GetEA(modrm,0); CYCLES(CYCLES_LMSW_MEM); b = READ16(ea); } if(PROTECTED_MODE) b |= 0x0001; // cannot return to real mode using this instruction. m_cr[0] &= ~0x0000000f; m_cr[0] |= b & 0x0000000f; break; } default: report_invalid_modrm("group0F01_32", modrm); break; } } static void I386OP(group0FBA_32)() // Opcode 0x0f ba { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 4: /* BT Rm32, i8 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT32 dst = READ32(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_IMM_MEM); } break; case 5: /* BTS Rm32, i8 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTS_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTS_IMM_MEM); } break; case 6: /* BTR Rm32, i8 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTR_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTR_IMM_MEM); } break; case 7: /* BTC Rm32, i8 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTC_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTC_IMM_MEM); } break; default: report_invalid_modrm("group0FBA_32", modrm); break; } } static void I386OP(lar_r32_rm32)() // Opcode 0x0f 0x02 { UINT8 modrm = FETCH(); I386_SREG seg; UINT8 type; if(PROTECTED_MODE && !V8086_MODE) { memset(&seg,0,sizeof(seg)); if(modrm >= 0xc0) { seg.selector = LOAD_RM32(modrm); CYCLES(CYCLES_LAR_REG); } else { UINT32 ea = GetEA(modrm,0); seg.selector = READ32(ea); CYCLES(CYCLES_LAR_MEM); } if(seg.selector == 0) { SetZF(0); // not a valid segment } else { UINT64 desc; if(!i386_load_protected_mode_segment(&seg,&desc)) { SetZF(0); return; } UINT8 DPL = (seg.flags >> 5) & 3; if(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c)) { SetZF(0); return; } if(!(seg.flags & 0x10)) // special segment { // check for invalid segment types type = seg.flags & 0x000f; if(type == 0x00 || type == 0x08 || type == 0x0a || type == 0x0d) { SetZF(0); // invalid segment type } else { STORE_REG32(modrm,(desc>>32) & 0x00ffff00); SetZF(1); } } else { STORE_REG32(modrm,(desc>>32) & 0x00ffff00); SetZF(1); } } } else { // illegal opcode i386_trap(6,0, 0); logerror("i386: LAR: Exception - running in real mode or virtual 8086 mode.\n"); } } static void I386OP(lsl_r32_rm32)() // Opcode 0x0f 0x03 { UINT8 modrm = FETCH(); UINT32 limit; I386_SREG seg; if(PROTECTED_MODE && !V8086_MODE) { memset(&seg, 0, sizeof(seg)); if(modrm >= 0xc0) { seg.selector = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); seg.selector = READ32(ea); } if(seg.selector == 0) { SetZF(0); // not a valid segment } else { UINT8 type; if(!i386_load_protected_mode_segment(&seg,NULL)) { SetZF(0); return; } UINT8 DPL = (seg.flags >> 5) & 3; if(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c)) { SetZF(0); return; } type = seg.flags & 0x1f; switch(type) { case 0: case 4: case 5: case 6: case 7: case 8: case 10: case 12: case 13: case 14: case 15: SetZF(0); return; default: limit = seg.limit; STORE_REG32(modrm,limit); SetZF(1); } } } else i386_trap(6, 0, 0); } static void I386OP(bound_r32_m32_m32)() // Opcode 0x62 { UINT8 modrm; INT32 val, low, high; modrm = FETCH(); if (modrm >= 0xc0) { low = high = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); low = READ32(ea + 0); high = READ32(ea + 4); } val = LOAD_REG32(modrm); if ((val < low) || (val > high)) { CYCLES(CYCLES_BOUND_OUT_RANGE); i386_trap(5, 0, 0); } else { CYCLES(CYCLES_BOUND_IN_RANGE); } } static void I386OP(retf32)() // Opcode 0xcb { if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_retf(0,1); } else { m_eip = POP32(); m_sreg[CS].selector = POP32(); i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); } CYCLES(CYCLES_RET_INTERSEG); } static void I386OP(retf_i32)() // Opcode 0xca { UINT16 count = FETCH16(); if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_retf(count,1); } else { m_eip = POP32(); m_sreg[CS].selector = POP32(); i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); REG32(ESP) += count; } CYCLES(CYCLES_RET_IMM_INTERSEG); } static void I386OP(load_far_pointer32)(int s) { UINT8 modrm = FETCH(); UINT16 selector; if( modrm >= 0xc0 ) { report_invalid_modrm("load_far_pointer32", modrm); } else { UINT32 ea = GetEA(modrm,0); STORE_REG32(modrm, READ32(ea + 0)); selector = READ16(ea + 4); i386_sreg_load(selector,s,NULL); } } static void I386OP(lds32)() // Opcode 0xc5 { I386OP(load_far_pointer32)(DS); CYCLES(CYCLES_LDS); } static void I386OP(lss32)() // Opcode 0x0f 0xb2 { I386OP(load_far_pointer32)(SS); CYCLES(CYCLES_LSS); } static void I386OP(les32)() // Opcode 0xc4 { I386OP(load_far_pointer32)(ES); CYCLES(CYCLES_LES); } static void I386OP(lfs32)() // Opcode 0x0f 0xb4 { I386OP(load_far_pointer32)(FS); CYCLES(CYCLES_LFS); } static void I386OP(lgs32)() // Opcode 0x0f 0xb5 { I386OP(load_far_pointer32)(GS); CYCLES(CYCLES_LGS); } ================================================ FILE: vm86/mame/emu/cpu/i386/i386ops.c ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett static UINT8 I386OP(shift_rotate8)(UINT8 modrm, UINT32 value, UINT8 shift) { UINT32 src = value & 0xff; UINT8 dst = value; if( shift == 0 ) { CYCLES_RM(modrm, 3, 7); } else if( shift == 1 ) { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm8, 1 */ m_CF = (src & 0x80) ? 1 : 0; dst = (src << 1) + m_CF; m_OF = ((src ^ dst) & 0x80) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm8, 1 */ m_CF = (src & 0x1) ? 1 : 0; dst = (m_CF << 7) | (src >> 1); m_OF = ((src ^ dst) & 0x80) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm8, 1 */ dst = (src << 1) + m_CF; m_CF = (src & 0x80) ? 1 : 0; m_OF = ((src ^ dst) & 0x80) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm8, 1 */ dst = (m_CF << 7) | (src >> 1); m_CF = src & 0x1; m_OF = ((src ^ dst) & 0x80) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm8, 1 */ case 6: dst = src << 1; m_CF = (src & 0x80) ? 1 : 0; m_OF = (((m_CF << 7) ^ dst) & 0x80) ? 1 : 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm8, 1 */ dst = src >> 1; m_CF = src & 0x1; m_OF = (dst & 0x80) ? 1 : 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm8, 1 */ dst = (INT8)(src) >> 1; m_CF = src & 0x1; m_OF = 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } else { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm8, i8 */ if(!(shift & 7)) { if(shift & 0x18) { m_CF = src & 1; m_OF = (src & 1) ^ ((src >> 7) & 1); } break; } shift &= 7; dst = ((src & ((UINT8)0xff >> shift)) << shift) | ((src & ((UINT8)0xff << (8-shift))) >> (8-shift)); m_CF = dst & 0x1; m_OF = (dst & 1) ^ (dst >> 7); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm8, i8 */ if(!(shift & 7)) { if(shift & 0x18) { m_CF = (src >> 7) & 1; m_OF = ((src >> 7) & 1) ^ ((src >> 6) & 1); } break; } shift &= 7; dst = ((src & ((UINT8)0xff << shift)) >> shift) | ((src & ((UINT8)0xff >> (8-shift))) << (8-shift)); m_CF = (dst >> 7) & 1; m_OF = ((dst >> 7) ^ (dst >> 6)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm8, i8 */ shift %= 9; dst = ((src & ((UINT8)0xff >> shift)) << shift) | ((src & ((UINT8)0xff << (9-shift))) >> (9-shift)) | (m_CF << (shift-1)); if(shift) m_CF = (src >> (8-shift)) & 0x1; m_OF = m_CF ^ ((dst >> 7) & 1); CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm8, i8 */ shift %= 9; dst = ((src & ((UINT8)0xff << shift)) >> shift) | ((src & ((UINT8)0xff >> (8-shift))) << (9-shift)) | (m_CF << (8-shift)); if(shift) m_CF = (src >> (shift-1)) & 0x1; m_OF = ((dst >> 7) ^ (dst >> 6)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm8, i8 */ case 6: shift &= 31; dst = src << shift; m_CF = (shift <= 8) && ((src >> (8 - shift)) & 1); SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm8, i8 */ shift &= 31; dst = src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm8, i8 */ shift &= 31; dst = (INT8)src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } return dst; } static void I386OP(adc_rm8_r8)() // Opcode 0x10 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = ADC8(dst, src, m_CF); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = ADC8(dst, src, m_CF); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(adc_r8_rm8)() // Opcode 0x12 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = ADC8(dst, src, m_CF); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = ADC8(dst, src, m_CF); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(adc_al_i8)() // Opcode 0x14 { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = ADC8(dst, src, m_CF); REG8(AL) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(add_rm8_r8)() // Opcode 0x00 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = ADD8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = ADD8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(add_r8_rm8)() // Opcode 0x02 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = ADD8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = ADD8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(add_al_i8)() // Opcode 0x04 { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = ADD8(dst, src); REG8(AL) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(and_rm8_r8)() // Opcode 0x20 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = AND8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = AND8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(and_r8_rm8)() // Opcode 0x22 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = AND8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = AND8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(and_al_i8)() // Opcode 0x24 { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = AND8(dst, src); REG8(AL) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(clc)() // Opcode 0xf8 { m_CF = 0; CYCLES(CYCLES_CLC); } static void I386OP(cld)() // Opcode 0xfc { m_DF = 0; CYCLES(CYCLES_CLD); } static void I386OP(cli)() // Opcode 0xfa { if(PROTECTED_MODE) { UINT8 IOPL = m_IOP1 | (m_IOP2 << 1); if(m_CPL > IOPL) FAULT(FAULT_GP,0); } m_IF = 0; CYCLES(CYCLES_CLI); } static void I386OP(cmc)() // Opcode 0xf5 { m_CF ^= 1; CYCLES(CYCLES_CMC); } static void I386OP(cmp_rm8_r8)() // Opcode 0x38 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG8(modrm); dst = READ8(ea); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } } static void I386OP(cmp_r8_rm8)() // Opcode 0x3a { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); SUB8(dst, src); CYCLES(CYCLES_CMP_MEM_REG); } } static void I386OP(cmp_al_i8)() // Opcode 0x3c { UINT8 src, dst; src = FETCH(); dst = REG8(AL); SUB8(dst, src); CYCLES(CYCLES_CMP_IMM_ACC); } static void I386OP(cmpsb)() // Opcode 0xa6 { UINT32 eas, ead; UINT8 src, dst; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ8(eas); dst = READ8(ead); SUB8(src, dst); BUMP_SI(1); BUMP_DI(1); CYCLES(CYCLES_CMPS); } static void I386OP(in_al_i8)() // Opcode 0xe4 { UINT16 port = FETCH(); UINT8 data = READPORT8(port); REG8(AL) = data; CYCLES(CYCLES_IN_VAR); } static void I386OP(in_al_dx)() // Opcode 0xec { UINT16 port = REG16(DX); UINT8 data = READPORT8(port); REG8(AL) = data; CYCLES(CYCLES_IN); } static void I386OP(ja_rel8)() // Opcode 0x77 { INT8 disp = FETCH(); if( m_CF == 0 && m_ZF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jbe_rel8)() // Opcode 0x76 { INT8 disp = FETCH(); if( m_CF != 0 || m_ZF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jc_rel8)() // Opcode 0x72 { INT8 disp = FETCH(); if( m_CF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jg_rel8)() // Opcode 0x7f { INT8 disp = FETCH(); if( m_ZF == 0 && (m_SF == m_OF) ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jge_rel8)() // Opcode 0x7d { INT8 disp = FETCH(); if(m_SF == m_OF) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jl_rel8)() // Opcode 0x7c { INT8 disp = FETCH(); if( (m_SF != m_OF) ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jle_rel8)() // Opcode 0x7e { INT8 disp = FETCH(); if( m_ZF != 0 || (m_SF != m_OF) ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jnc_rel8)() // Opcode 0x73 { INT8 disp = FETCH(); if( m_CF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jno_rel8)() // Opcode 0x71 { INT8 disp = FETCH(); if( m_OF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jnp_rel8)() // Opcode 0x7b { INT8 disp = FETCH(); if( m_PF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jns_rel8)() // Opcode 0x79 { INT8 disp = FETCH(); if( m_SF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jnz_rel8)() // Opcode 0x75 { INT8 disp = FETCH(); if( m_ZF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jo_rel8)() // Opcode 0x70 { INT8 disp = FETCH(); if( m_OF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jp_rel8)() // Opcode 0x7a { INT8 disp = FETCH(); if( m_PF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(js_rel8)() // Opcode 0x78 { INT8 disp = FETCH(); if( m_SF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jz_rel8)() // Opcode 0x74 { INT8 disp = FETCH(); if( m_ZF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jmp_rel8)() // Opcode 0xeb { INT8 disp = FETCH(); NEAR_BRANCH(disp); CYCLES(CYCLES_JMP_SHORT); /* TODO: Timing = 7 + m */ } static void I386OP(lahf)() // Opcode 0x9f { REG8(AH) = get_flags() & 0xd7; CYCLES(CYCLES_LAHF); } static void I386OP(lodsb)() // Opcode 0xac { UINT32 eas; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } REG8(AL) = READ8(eas); BUMP_SI(1); CYCLES(CYCLES_LODS); } static void I386OP(mov_rm8_r8)() // Opcode 0x88 { UINT8 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); STORE_RM8(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); WRITE8(ea, src); CYCLES(CYCLES_MOV_REG_MEM); } } static void I386OP(mov_r8_rm8)() // Opcode 0x8a { UINT8 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); STORE_REG8(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); STORE_REG8(modrm, src); CYCLES(CYCLES_MOV_MEM_REG); } } static void I386OP(mov_rm8_i8)() // Opcode 0xc6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 value = FETCH(); STORE_RM8(modrm, value); CYCLES(CYCLES_MOV_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 value = FETCH(); WRITE8(ea, value); CYCLES(CYCLES_MOV_IMM_MEM); } } static void I386OP(mov_r32_cr)() // Opcode 0x0f 20 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 cr = (modrm >> 3) & 0x7; STORE_RM32(modrm, m_cr[cr]); CYCLES(CYCLES_MOV_CR_REG); } static void I386OP(mov_r32_dr)() // Opcode 0x0f 21 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 dr = (modrm >> 3) & 0x7; STORE_RM32(modrm, m_dr[dr]); switch(dr) { case 0: case 1: case 2: case 3: CYCLES(CYCLES_MOV_REG_DR0_3); break; case 6: case 7: CYCLES(CYCLES_MOV_REG_DR6_7); break; } } static void I386OP(mov_cr_r32)() // Opcode 0x0f 22 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 cr = (modrm >> 3) & 0x7; UINT32 data = LOAD_RM32(modrm); switch(cr) { case 0: #ifndef PAGING if(data & 0x80000000) fatalerror("paging disabled\n"); #endif data &= 0xfffeffff; // wp not supported on 386 CYCLES(CYCLES_MOV_REG_CR0); break; case 2: CYCLES(CYCLES_MOV_REG_CR2); break; case 3: CYCLES(CYCLES_MOV_REG_CR3); vtlb_flush_dynamic(m_vtlb); break; case 4: CYCLES(1); break; // TODO default: logerror("i386: mov_cr_r32 CR%d!\n", cr); return; } m_cr[cr] = data; } static void I386OP(mov_dr_r32)() // Opcode 0x0f 23 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 dr = (modrm >> 3) & 0x7; m_dr[dr] = LOAD_RM32(modrm); switch(dr) { case 0: case 1: case 2: case 3: CYCLES(CYCLES_MOV_DR0_3_REG); break; case 6: case 7: CYCLES(CYCLES_MOV_DR6_7_REG); break; default: logerror("i386: mov_dr_r32 DR%d!\n", dr); return; } } static void I386OP(mov_al_m8)() // Opcode 0xa0 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } /* TODO: Not sure if this is correct... */ if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 0 ); } else { ea = i386_translate(DS, offset, 0 ); } REG8(AL) = READ8(ea); CYCLES(CYCLES_MOV_IMM_MEM); } static void I386OP(mov_m8_al)() // Opcode 0xa2 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } /* TODO: Not sure if this is correct... */ if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 1 ); } else { ea = i386_translate(DS, offset, 1 ); } WRITE8(ea, REG8(AL) ); CYCLES(CYCLES_MOV_MEM_ACC); } static void I386OP(mov_rm16_sreg)() // Opcode 0x8c { UINT8 modrm = FETCH(); int s = (modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { if(m_operand_size) STORE_RM32(modrm, m_sreg[s].selector); else STORE_RM16(modrm, m_sreg[s].selector); CYCLES(CYCLES_MOV_SREG_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE16(ea, m_sreg[s].selector); CYCLES(CYCLES_MOV_SREG_MEM); } } static void I386OP(mov_sreg_rm16)() // Opcode 0x8e { UINT16 selector; UINT8 modrm = FETCH(); bool fault; int s = (modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { selector = LOAD_RM16(modrm); CYCLES(CYCLES_MOV_REG_SREG); } else { UINT32 ea = GetEA(modrm,0); selector = READ16(ea); CYCLES(CYCLES_MOV_MEM_SREG); } i386_sreg_load(selector,s,&fault); if((s == SS) && !fault) { if(m_IF != 0) // if external interrupts are enabled { m_IF = 0; // reset IF for the next instruction m_delayed_interrupt_enable = 1; } } } static void I386OP(mov_al_i8)() // Opcode 0xb0 { REG8(AL) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_cl_i8)() // Opcode 0xb1 { REG8(CL) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_dl_i8)() // Opcode 0xb2 { REG8(DL) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_bl_i8)() // Opcode 0xb3 { REG8(BL) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ah_i8)() // Opcode 0xb4 { REG8(AH) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ch_i8)() // Opcode 0xb5 { REG8(CH) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_dh_i8)() // Opcode 0xb6 { REG8(DH) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_bh_i8)() // Opcode 0xb7 { REG8(BH) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(movsb)() // Opcode 0xa4 { UINT32 eas, ead; UINT8 v; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); v = READ8(eas); WRITE8(ead, v); BUMP_SI(1); BUMP_DI(1); CYCLES(CYCLES_MOVS); } static void I386OP(or_rm8_r8)() // Opcode 0x08 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = OR8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = OR8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(or_r8_rm8)() // Opcode 0x0a { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = OR8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = OR8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(or_al_i8)() // Opcode 0x0c { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = OR8(dst, src); REG8(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(out_al_i8)() // Opcode 0xe6 { UINT16 port = FETCH(); UINT8 data = REG8(AL); WRITEPORT8(port, data); CYCLES(CYCLES_OUT_VAR); } static void I386OP(out_al_dx)() // Opcode 0xee { UINT16 port = REG16(DX); UINT8 data = REG8(AL); WRITEPORT8(port, data); CYCLES(CYCLES_OUT); } static void I386OP(arpl)() // Opcode 0x63 { UINT16 src, dst; UINT8 modrm = FETCH(); UINT8 flag = 0; if(PROTECTED_MODE && !V8086_MODE) { if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); if( (dst&0x3) < (src&0x3) ) { dst = (dst&0xfffc) | (src&0x3); flag = 1; STORE_RM16(modrm, dst); } } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); if( (dst&0x3) < (src&0x3) ) { dst = (dst&0xfffc) | (src&0x3); flag = 1; WRITE16(ea, dst); } } SetZF(flag); } else i386_trap(6, 0, 0); // invalid opcode in real mode or v8086 mode } static void I386OP(push_i8)() // Opcode 0x6a { UINT8 value = FETCH(); PUSH8(value); CYCLES(CYCLES_PUSH_IMM); } static void I386OP(ins_generic)(int size) { UINT32 ead; UINT8 vb; UINT16 vw; UINT32 vd; ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); switch(size) { case 1: vb = READPORT8(REG16(DX)); WRITE8(ead, vb); break; case 2: vw = READPORT16(REG16(DX)); WRITE16(ead, vw); break; case 4: vd = READPORT32(REG16(DX)); WRITE32(ead, vd); break; } if(m_address_size) REG32(EDI) += ((m_DF) ? -1 : 1) * size; else REG16(DI) += ((m_DF) ? -1 : 1) * size; CYCLES(CYCLES_INS); // TODO: Confirm this value } static void I386OP(insb)() // Opcode 0x6c { I386OP(ins_generic)(1); } static void I386OP(insw)() // Opcode 0x6d { I386OP(ins_generic)(2); } static void I386OP(insd)() // Opcode 0x6d { I386OP(ins_generic)(4); } static void I386OP(outs_generic)(int size) { UINT32 eas; UINT8 vb; UINT16 vw; UINT32 vd; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } switch(size) { case 1: vb = READ8(eas); WRITEPORT8(REG16(DX), vb); break; case 2: vw = READ16(eas); WRITEPORT16(REG16(DX), vw); break; case 4: vd = READ32(eas); WRITEPORT32(REG16(DX), vd); break; } if(m_address_size) REG32(ESI) += ((m_DF) ? -1 : 1) * size; else REG16(SI) += ((m_DF) ? -1 : 1) * size; CYCLES(CYCLES_OUTS); // TODO: Confirm this value } static void I386OP(outsb)() // Opcode 0x6e { I386OP(outs_generic)(1); } static void I386OP(outsw)() // Opcode 0x6f { I386OP(outs_generic)(2); } static void I386OP(outsd)() // Opcode 0x6f { I386OP(outs_generic)(4); } static void I386OP(repeat)(int invert_flag) { UINT32 repeated_eip = m_eip; UINT32 repeated_pc = m_pc; UINT8 opcode; // = FETCH(); // UINT32 eas, ead; UINT32 count; INT32 cycle_base = 0, cycle_adjustment = 0; UINT8 prefix_flag=1; UINT8 *flag = NULL; do { repeated_eip = m_eip; repeated_pc = m_pc; opcode = FETCH(); switch(opcode) { case 0x0f: if (invert_flag == 0) I386OP(decode_three_bytef3)(); // sse f3 0f else I386OP(decode_three_bytef2)(); // sse f2 0f return; case 0x26: m_segment_override=ES; m_segment_prefix=1; break; case 0x2e: m_segment_override=CS; m_segment_prefix=1; break; case 0x36: m_segment_override=SS; m_segment_prefix=1; break; case 0x3e: m_segment_override=DS; m_segment_prefix=1; break; case 0x64: m_segment_override=FS; m_segment_prefix=1; break; case 0x65: m_segment_override=GS; m_segment_prefix=1; break; case 0x66: if(!m_operand_prefix) { m_operand_size ^= 1; m_xmm_operand_size ^= 1; m_operand_prefix = 1; } break; case 0x67: if(!m_address_prefix) { m_address_size ^= 1; m_address_prefix = 1; } break; default: prefix_flag=0; } } while (prefix_flag); if( m_segment_prefix ) { // FIXME: the following does not work if both address override and segment override are used i386_translate(m_segment_override, m_sreg[m_segment_prefix].d ? REG32(ESI) : REG16(SI), -1 ); } else { //eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), -1 ); } i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), -1 ); switch(opcode) { case 0x6c: case 0x6d: /* INSB, INSW, INSD */ // TODO: cycle count cycle_base = 8; cycle_adjustment = -4; flag = NULL; break; case 0x6e: case 0x6f: /* OUTSB, OUTSW, OUTSD */ // TODO: cycle count cycle_base = 8; cycle_adjustment = -4; flag = NULL; break; case 0xa4: case 0xa5: /* MOVSB, MOVSW, MOVSD */ cycle_base = 8; cycle_adjustment = -4; flag = NULL; break; case 0xa6: case 0xa7: /* CMPSB, CMPSW, CMPSD */ cycle_base = 5; cycle_adjustment = -1; flag = &m_ZF; break; case 0xac: case 0xad: /* LODSB, LODSW, LODSD */ cycle_base = 5; cycle_adjustment = 1; flag = NULL; break; case 0xaa: case 0xab: /* STOSB, STOSW, STOSD */ cycle_base = 5; cycle_adjustment = 0; flag = NULL; break; case 0xae: case 0xaf: /* SCASB, SCASW, SCASD */ cycle_base = 5; cycle_adjustment = 0; flag = &m_ZF; break; case 0x90: CYCLES(CYCLES_NOP); return; case 0xc2: // sigh case 0xc3: m_pc--; return; default: fatalerror("i386: Invalid REP/opcode %02X combination\n",opcode); break; } if( m_address_size ) { if( REG32(ECX) == 0 ) return; } else { if( REG16(CX) == 0 ) return; } /* now actually perform the repeat */ CYCLES_NUM(cycle_base); do { m_eip = repeated_eip; m_pc = repeated_pc; try { I386OP(decode_opcode)(); } catch (UINT64 e) { m_eip = m_prev_eip; throw e; } CYCLES_NUM(cycle_adjustment); if (m_address_size) count = --REG32(ECX); else count = --REG16(CX); // if (m_cycles <= 0) // goto outofcycles; } while( count && (!flag || (invert_flag ? !*flag : *flag)) ); // return; // //outofcycles: // /* if we run out of cycles to execute, and we are still in the repeat, we need // * to exit this instruction in such a way to go right back into it when we have // * time to execute cycles */ // if(flag && (invert_flag ? *flag : !*flag)) // return; // m_eip = m_prev_eip; // CHANGE_PC(m_eip); // CYCLES_NUM(-cycle_base); } static void I386OP(rep)() // Opcode 0xf3 { I386OP(repeat)(0); } static void I386OP(repne)() // Opcode 0xf2 { I386OP(repeat)(1); } static void I386OP(sahf)() // Opcode 0x9e { set_flags((get_flags() & 0xffffff00) | (REG8(AH) & 0xd7) ); CYCLES(CYCLES_SAHF); } static void I386OP(sbb_rm8_r8)() // Opcode 0x18 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = SBB8(dst, src, m_CF); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = SBB8(dst, src, m_CF); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sbb_r8_rm8)() // Opcode 0x1a { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = SBB8(dst, src, m_CF); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = SBB8(dst, src, m_CF); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sbb_al_i8)() // Opcode 0x1c { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = SBB8(dst, src, m_CF); REG8(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(scasb)() // Opcode 0xae { UINT32 eas; UINT8 src, dst; eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ8(eas); dst = REG8(AL); SUB8(dst, src); BUMP_DI(1); CYCLES(CYCLES_SCAS); } static void I386OP(setalc)() // Opcode 0xd6 (undocumented) { if( m_CF ) { REG8(AL) = 0xff; } else { REG8(AL) = 0; } CYCLES(3); } static void I386OP(seta_rm8)() // Opcode 0x0f 97 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_CF == 0 && m_ZF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setbe_rm8)() // Opcode 0x0f 96 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_CF != 0 || m_ZF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setc_rm8)() // Opcode 0x0f 92 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_CF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setg_rm8)() // Opcode 0x0f 9f { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_ZF == 0 && (m_SF == m_OF) ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setge_rm8)() // Opcode 0x0f 9d { UINT8 modrm = FETCH(); UINT8 value = 0; if(m_SF == m_OF) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setl_rm8)() // Opcode 0x0f 9c { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_SF != m_OF ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setle_rm8)() // Opcode 0x0f 9e { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_ZF != 0 || (m_SF != m_OF) ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setnc_rm8)() // Opcode 0x0f 93 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_CF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setno_rm8)() // Opcode 0x0f 91 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_OF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setnp_rm8)() // Opcode 0x0f 9b { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_PF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setns_rm8)() // Opcode 0x0f 99 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_SF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setnz_rm8)() // Opcode 0x0f 95 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_ZF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(seto_rm8)() // Opcode 0x0f 90 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_OF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setp_rm8)() // Opcode 0x0f 9a { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_PF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(sets_rm8)() // Opcode 0x0f 98 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_SF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setz_rm8)() // Opcode 0x0f 94 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_ZF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(stc)() // Opcode 0xf9 { m_CF = 1; CYCLES(CYCLES_STC); } static void I386OP(std)() // Opcode 0xfd { m_DF = 1; CYCLES(CYCLES_STD); } static void I386OP(sti)() // Opcode 0xfb { if(PROTECTED_MODE) { UINT8 IOPL = m_IOP1 | (m_IOP2 << 1); if(m_CPL > IOPL) FAULT(FAULT_GP,0); } m_delayed_interrupt_enable = 1; // IF is set after the next instruction. CYCLES(CYCLES_STI); } static void I386OP(stosb)() // Opcode 0xaa { UINT32 ead; ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); WRITE8(ead, REG8(AL)); BUMP_DI(1); CYCLES(CYCLES_STOS); } static void I386OP(sub_rm8_r8)() // Opcode 0x28 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = SUB8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = SUB8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sub_r8_rm8)() // Opcode 0x2a { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = SUB8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = SUB8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sub_al_i8)() // Opcode 0x2c { UINT8 src, dst; src = FETCH(); dst = REG8(EAX); dst = SUB8(dst, src); REG8(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(test_al_i8)() // Opcode 0xa8 { UINT8 src = FETCH(); UINT8 dst = REG8(AL); dst = src & dst; SetSZPF8(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(test_rm8_r8)() // Opcode 0x84 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = src & dst; SetSZPF8(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG8(modrm); dst = READ8(ea); dst = src & dst; SetSZPF8(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_MEM); } } static void I386OP(xchg_r8_rm8)() // Opcode 0x86 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 src = LOAD_RM8(modrm); UINT8 dst = LOAD_REG8(modrm); STORE_REG8(modrm, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_XCHG_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 src = READ8(ea); UINT8 dst = LOAD_REG8(modrm); WRITE8(ea, dst); STORE_REG8(modrm, src); CYCLES(CYCLES_XCHG_REG_MEM); } } static void I386OP(xor_rm8_r8)() // Opcode 0x30 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = XOR8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = XOR8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(xor_r8_rm8)() // Opcode 0x32 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = XOR8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = XOR8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(xor_al_i8)() // Opcode 0x34 { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = XOR8(dst, src); REG8(AL) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(group80_8)() // Opcode 0x80 { UINT32 ea; UINT8 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = ADD8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,0); dst = READ8(ea); src = FETCH(); dst = ADD8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = OR8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = OR8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = ADC8(dst, src, m_CF); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = ADC8(dst, src, m_CF); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = SBB8(dst, src, m_CF); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = SBB8(dst, src, m_CF); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = AND8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = AND8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = SUB8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = SUB8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = XOR8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = XOR8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ8(ea); src = FETCH(); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(groupC0_8)() // Opcode 0xc0 { UINT8 dst; UINT8 modrm = FETCH(); UINT8 shift; if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); shift = FETCH() & 0x1f; dst = i386_shift_rotate8(modrm, dst, shift); STORE_RM8(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ8(ea); shift = FETCH() & 0x1f; dst = i386_shift_rotate8(modrm, dst, shift); WRITE8(ea, dst); } } static void I386OP(groupD0_8)() // Opcode 0xd0 { UINT8 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); dst = i386_shift_rotate8(modrm, dst, 1); STORE_RM8(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ8(ea); dst = i386_shift_rotate8(modrm, dst, 1); WRITE8(ea, dst); } } static void I386OP(groupD2_8)() // Opcode 0xd2 { UINT8 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); dst = i386_shift_rotate8(modrm, dst, REG8(CL)); STORE_RM8(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ8(ea); dst = i386_shift_rotate8(modrm, dst, REG8(CL)); WRITE8(ea, dst); } } static void I386OP(groupF6_8)() // Opcode 0xf6 { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* TEST Rm8, i8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); UINT8 src = FETCH(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF8(dst); CYCLES(CYCLES_TEST_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT8 dst = READ8(ea); UINT8 src = FETCH(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF8(dst); CYCLES(CYCLES_TEST_IMM_MEM); } break; case 2: /* NOT Rm8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); dst = ~dst; STORE_RM8(modrm, dst); CYCLES(CYCLES_NOT_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); dst = ~dst; WRITE8(ea, dst); CYCLES(CYCLES_NOT_MEM); } break; case 3: /* NEG Rm8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); dst = SUB8(0, dst ); STORE_RM8(modrm, dst); CYCLES(CYCLES_NEG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); dst = SUB8(0, dst ); WRITE8(ea, dst); CYCLES(CYCLES_NEG_MEM); } break; case 4: /* MUL AL, Rm8 */ { UINT16 result; UINT8 src, dst; if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); CYCLES(CYCLES_MUL8_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); CYCLES(CYCLES_MUL8_ACC_MEM); /* TODO: Correct multiply timing */ } dst = REG8(AL); result = (UINT16)src * (UINT16)dst; REG16(AX) = (UINT16)result; m_CF = m_OF = (REG16(AX) > 0xff); } break; case 5: /* IMUL AL, Rm8 */ { INT16 result; INT16 src, dst; if( modrm >= 0xc0 ) { src = (INT16)(INT8)LOAD_RM8(modrm); CYCLES(CYCLES_IMUL8_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT16)(INT8)READ8(ea); CYCLES(CYCLES_IMUL8_ACC_MEM); /* TODO: Correct multiply timing */ } dst = (INT16)(INT8)REG8(AL); result = src * dst; REG16(AX) = (UINT16)result; m_CF = m_OF = !(result == (INT16)(INT8)result); } break; case 6: /* DIV AL, Rm8 */ { UINT16 quotient, remainder, result; UINT8 src; if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); CYCLES(CYCLES_DIV8_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); CYCLES(CYCLES_DIV8_ACC_MEM); } quotient = (UINT16)REG16(AX); if( src ) { remainder = quotient % (UINT16)src; result = quotient / (UINT16)src; if( result > 0xff ) { /* TODO: Divide error */ } else { REG8(AH) = (UINT8)remainder & 0xff; REG8(AL) = (UINT8)result & 0xff; // this flag is actually undefined, enable on non-cyrix if (m_cpuid_id0 != 0x69727943) m_CF = 1; } } else { i386_trap(0, 0, 0); } } break; case 7: /* IDIV AL, Rm8 */ { INT16 quotient, remainder, result; UINT8 src; if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); CYCLES(CYCLES_IDIV8_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); CYCLES(CYCLES_IDIV8_ACC_MEM); } quotient = (INT16)REG16(AX); if( src ) { remainder = quotient % (INT16)(INT8)src; result = quotient / (INT16)(INT8)src; if( result > 0xff ) { /* TODO: Divide error */ } else { REG8(AH) = (UINT8)remainder & 0xff; REG8(AL) = (UINT8)result & 0xff; // this flag is actually undefined, enable on non-cyrix if (m_cpuid_id0 != 0x69727943) m_CF = 1; } } else { i386_trap(0, 0, 0); } } break; } } static void I386OP(groupFE_8)() // Opcode 0xfe { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* INC Rm8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); dst = INC8(dst); STORE_RM8(modrm, dst); CYCLES(CYCLES_INC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); dst = INC8(dst); WRITE8(ea, dst); CYCLES(CYCLES_INC_MEM); } break; case 1: /* DEC Rm8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); dst = DEC8(dst); STORE_RM8(modrm, dst); CYCLES(CYCLES_DEC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); dst = DEC8(dst); WRITE8(ea, dst); CYCLES(CYCLES_DEC_MEM); } break; case 6: /* PUSH Rm8*/ { UINT8 value; if( modrm >= 0xc0 ) { value = LOAD_RM8(modrm); } else { UINT32 ea = GetEA(modrm,0); value = READ8(ea); } if( m_operand_size ) { PUSH32(value); } else { PUSH16(value); } CYCLES(CYCLES_PUSH_RM); } break; default: report_invalid_modrm("groupFE_8", modrm); break; } } static void I386OP(segment_CS)() // Opcode 0x2e { m_segment_prefix = 1; m_segment_override = CS; I386OP(decode_opcode)(); } static void I386OP(segment_DS)() // Opcode 0x3e { m_segment_prefix = 1; m_segment_override = DS; CYCLES(0); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(segment_ES)() // Opcode 0x26 { m_segment_prefix = 1; m_segment_override = ES; CYCLES(0); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(segment_FS)() // Opcode 0x64 { m_segment_prefix = 1; m_segment_override = FS; CYCLES(1); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(segment_GS)() // Opcode 0x65 { m_segment_prefix = 1; m_segment_override = GS; CYCLES(1); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(segment_SS)() // Opcode 0x36 { m_segment_prefix = 1; m_segment_override = SS; CYCLES(0); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(operand_size)() // Opcode prefix 0x66 { if(m_operand_prefix == 0) { m_operand_size ^= 1; m_xmm_operand_size ^= 1; m_operand_prefix = 1; } m_opcode = FETCH(); if (m_opcode == 0x0f) I386OP(decode_three_byte66)(); else { if( m_operand_size ) m_opcode_table1_32[m_opcode](); else m_opcode_table1_16[m_opcode](); } } static void I386OP(address_size)() // Opcode 0x67 { if(m_address_prefix == 0) { m_address_size ^= 1; m_address_prefix = 1; } I386OP(decode_opcode)(); } static void I386OP(nop)() // Opcode 0x90 { CYCLES(CYCLES_NOP); } static void I386OP(int3)() // Opcode 0xcc { CYCLES(CYCLES_INT3); m_ext = 0; // not an external interrupt i386_trap(3, 1, 0); m_ext = 1; } static void I386OP(int)() // Opcode 0xcd { int interrupt = FETCH(); CYCLES(CYCLES_INT); m_ext = 0; // not an external interrupt i386_trap(interrupt, 1, 0); m_ext = 1; } static void I386OP(into)() // Opcode 0xce { if( m_OF ) { m_ext = 0; i386_trap(4, 1, 0); m_ext = 1; CYCLES(CYCLES_INTO_OF1); } else { CYCLES(CYCLES_INTO_OF0); } } static UINT32 i386_escape_ea; // hack around GCC 4.6 error because we need the side effects of GetEA() static void I386OP(escape)() // Opcodes 0xd8 - 0xdf { UINT8 modrm = FETCH(); if(modrm < 0xc0) { i386_escape_ea = GetEA(modrm,0); } CYCLES(3); // TODO: confirm this (void) LOAD_RM8(modrm); } static void I386OP(hlt)() // Opcode 0xf4 { if(PROTECTED_MODE && m_CPL != 0) FAULT(FAULT_GP,0); m_halted = 1; CYCLES(CYCLES_HLT); // if (m_cycles > 0) // m_cycles = 0; } static void I386OP(decimal_adjust)(int direction) { UINT8 tmpAL = REG8(AL); UINT8 tmpCF = m_CF; if (m_AF || ((REG8(AL) & 0xf) > 9)) { UINT16 t= (UINT16)REG8(AL) + (direction * 0x06); REG8(AL) = (UINT8)t&0xff; m_AF = 1; if (t & 0x100) m_CF = 1; if (direction > 0) tmpAL = REG8(AL); } if (tmpCF || (tmpAL > 0x99)) { REG8(AL) += (direction * 0x60); m_CF = 1; } SetSZPF8(REG8(AL)); } static void I386OP(daa)() // Opcode 0x27 { I386OP(decimal_adjust)(+1); CYCLES(CYCLES_DAA); } static void I386OP(das)() // Opcode 0x2f { I386OP(decimal_adjust)(-1); CYCLES(CYCLES_DAS); } static void I386OP(aaa)() // Opcode 0x37 { if( ( (REG8(AL) & 0x0f) > 9) || (m_AF != 0) ) { REG16(AX) = REG16(AX) + 6; REG8(AH) = REG8(AH) + 1; m_AF = 1; m_CF = 1; } else { m_AF = 0; m_CF = 0; } REG8(AL) = REG8(AL) & 0x0f; CYCLES(CYCLES_AAA); } static void I386OP(aas)() // Opcode 0x3f { if (m_AF || ((REG8(AL) & 0xf) > 9)) { REG16(AX) -= 6; REG8(AH) -= 1; m_AF = 1; m_CF = 1; } else { m_AF = 0; m_CF = 0; } REG8(AL) &= 0x0f; CYCLES(CYCLES_AAS); } static void I386OP(aad)() // Opcode 0xd5 { UINT8 tempAL = REG8(AL); UINT8 tempAH = REG8(AH); UINT8 i = FETCH(); REG8(AL) = (tempAL + (tempAH * i)) & 0xff; REG8(AH) = 0; SetSZPF8( REG8(AL) ); CYCLES(CYCLES_AAD); } static void I386OP(aam)() // Opcode 0xd4 { UINT8 tempAL = REG8(AL); UINT8 i = FETCH(); if(!i) { i386_trap(0, 0, 0); return; } REG8(AH) = tempAL / i; REG8(AL) = tempAL % i; SetSZPF8( REG8(AL) ); CYCLES(CYCLES_AAM); } static void I386OP(clts)() // Opcode 0x0f 0x06 { // Privileged instruction, CPL must be zero. Can be used in real or v86 mode. if(PROTECTED_MODE && m_CPL != 0) FAULT(FAULT_GP,0) m_cr[0] &= ~0x08; /* clear TS bit */ CYCLES(CYCLES_CLTS); } static void I386OP(wait)() // Opcode 0x9B { // TODO } static void I386OP(lock)() // Opcode 0xf0 { // lock doesn't depend on iopl on 386 m_lock = true; CYCLES(CYCLES_LOCK); // TODO: Determine correct cycle count I386OP(decode_opcode)(); } static void I386OP(mov_r32_tr)() // Opcode 0x0f 24 { FETCH(); CYCLES(1); // TODO: correct cycle count } static void I386OP(mov_tr_r32)() // Opcode 0x0f 26 { FETCH(); CYCLES(1); // TODO: correct cycle count } static void I386OP(loadall)() // Opcode 0x0f 0x07 (0x0f 0x05 on 80286), undocumented { fatalerror("i386: LOADALL unimplemented at %08X\n", m_pc - 1); } static void I386OP(invalid)() { /* for ISH.COM */ // report_invalid_opcode(); // i386_trap(6, 0, 0); } static void I386OP(xlat)() // Opcode 0xd7 { UINT32 ea; if( m_segment_prefix ) { if(!m_address_size) { ea = i386_translate(m_segment_override, REG16(BX) + REG8(AL), 0 ); } else { ea = i386_translate(m_segment_override, REG32(EBX) + REG8(AL), 0 ); } } else { if(!m_address_size) { ea = i386_translate(DS, REG16(BX) + REG8(AL), 0 ); } else { ea = i386_translate(DS, REG32(EBX) + REG8(AL), 0 ); } } REG8(AL) = READ8(ea); CYCLES(CYCLES_XLAT); } ================================================ FILE: vm86/mame/emu/cpu/i386/i386ops.h ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett struct X86_OPCODE { UINT8 opcode; UINT32 flags; void (*handler16)(); void (*handler32)(); bool lockable; }; #define OP_I386 0x1 #define OP_FPU 0x2 #define OP_I486 0x4 #define OP_PENTIUM 0x8 #define OP_MMX 0x10 #define OP_PPRO 0x20 #define OP_SSE 0x40 #define OP_SSE2 0x80 #define OP_SSE3 0x100 #define OP_CYRIX 0x8000 #define OP_2BYTE 0x80000000 #define OP_3BYTE66 0x40000000 #define OP_3BYTEF2 0x20000000 #define OP_3BYTEF3 0x10000000 #define OP_3BYTE38 0x08000000 #define OP_3BYTE3A 0x04000000 #define OP_4BYTE3866 0x02000000 #define OP_4BYTE3A66 0x01000000 #define OP_4BYTE38F2 0x00800000 #define OP_4BYTE3AF2 0x00400000 #define OP_4BYTE38F3 0x00200000 static const X86_OPCODE x86_opcode_table[] = { // Opcode Flags 16-bit handler 32-bit handler { 0x00, OP_I386, I386OP(add_rm8_r8), I386OP(add_rm8_r8), true }, { 0x01, OP_I386, I386OP(add_rm16_r16), I386OP(add_rm32_r32), true }, { 0x02, OP_I386, I386OP(add_r8_rm8), I386OP(add_r8_rm8), false}, { 0x03, OP_I386, I386OP(add_r16_rm16), I386OP(add_r32_rm32), false}, { 0x04, OP_I386, I386OP(add_al_i8), I386OP(add_al_i8), false}, { 0x05, OP_I386, I386OP(add_ax_i16), I386OP(add_eax_i32), false}, { 0x06, OP_I386, I386OP(push_es16), I386OP(push_es32), false}, { 0x07, OP_I386, I386OP(pop_es16), I386OP(pop_es32), false}, { 0x08, OP_I386, I386OP(or_rm8_r8), I386OP(or_rm8_r8), true }, { 0x09, OP_I386, I386OP(or_rm16_r16), I386OP(or_rm32_r32), true }, { 0x0A, OP_I386, I386OP(or_r8_rm8), I386OP(or_r8_rm8), false}, { 0x0B, OP_I386, I386OP(or_r16_rm16), I386OP(or_r32_rm32), false}, { 0x0C, OP_I386, I386OP(or_al_i8), I386OP(or_al_i8), false}, { 0x0D, OP_I386, I386OP(or_ax_i16), I386OP(or_eax_i32), false}, { 0x0E, OP_I386, I386OP(push_cs16), I386OP(push_cs32), false}, { 0x0F, OP_I386, I386OP(decode_two_byte), I386OP(decode_two_byte), true }, { 0x10, OP_I386, I386OP(adc_rm8_r8), I386OP(adc_rm8_r8), true }, { 0x11, OP_I386, I386OP(adc_rm16_r16), I386OP(adc_rm32_r32), true }, { 0x12, OP_I386, I386OP(adc_r8_rm8), I386OP(adc_r8_rm8), false}, { 0x13, OP_I386, I386OP(adc_r16_rm16), I386OP(adc_r32_rm32), false}, { 0x14, OP_I386, I386OP(adc_al_i8), I386OP(adc_al_i8), false}, { 0x15, OP_I386, I386OP(adc_ax_i16), I386OP(adc_eax_i32), false}, { 0x16, OP_I386, I386OP(push_ss16), I386OP(push_ss32), false}, { 0x17, OP_I386, I386OP(pop_ss16), I386OP(pop_ss32), false}, { 0x18, OP_I386, I386OP(sbb_rm8_r8), I386OP(sbb_rm8_r8), true }, { 0x19, OP_I386, I386OP(sbb_rm16_r16), I386OP(sbb_rm32_r32), true }, { 0x1A, OP_I386, I386OP(sbb_r8_rm8), I386OP(sbb_r8_rm8), false}, { 0x1B, OP_I386, I386OP(sbb_r16_rm16), I386OP(sbb_r32_rm32), false}, { 0x1C, OP_I386, I386OP(sbb_al_i8), I386OP(sbb_al_i8), false}, { 0x1D, OP_I386, I386OP(sbb_ax_i16), I386OP(sbb_eax_i32), false}, { 0x1E, OP_I386, I386OP(push_ds16), I386OP(push_ds32), false}, { 0x1F, OP_I386, I386OP(pop_ds16), I386OP(pop_ds32), false}, { 0x20, OP_I386, I386OP(and_rm8_r8), I386OP(and_rm8_r8), true }, { 0x21, OP_I386, I386OP(and_rm16_r16), I386OP(and_rm32_r32), true }, { 0x22, OP_I386, I386OP(and_r8_rm8), I386OP(and_r8_rm8), false}, { 0x23, OP_I386, I386OP(and_r16_rm16), I386OP(and_r32_rm32), false}, { 0x24, OP_I386, I386OP(and_al_i8), I386OP(and_al_i8), false}, { 0x25, OP_I386, I386OP(and_ax_i16), I386OP(and_eax_i32), false}, { 0x26, OP_I386, I386OP(segment_ES), I386OP(segment_ES), false}, { 0x27, OP_I386, I386OP(daa), I386OP(daa), false}, { 0x28, OP_I386, I386OP(sub_rm8_r8), I386OP(sub_rm8_r8), true }, { 0x29, OP_I386, I386OP(sub_rm16_r16), I386OP(sub_rm32_r32), true }, { 0x2A, OP_I386, I386OP(sub_r8_rm8), I386OP(sub_r8_rm8), false}, { 0x2B, OP_I386, I386OP(sub_r16_rm16), I386OP(sub_r32_rm32), false}, { 0x2C, OP_I386, I386OP(sub_al_i8), I386OP(sub_al_i8), false}, { 0x2D, OP_I386, I386OP(sub_ax_i16), I386OP(sub_eax_i32), false}, { 0x2E, OP_I386, I386OP(segment_CS), I386OP(segment_CS), false}, { 0x2F, OP_I386, I386OP(das), I386OP(das), false}, { 0x30, OP_I386, I386OP(xor_rm8_r8), I386OP(xor_rm8_r8), true }, { 0x31, OP_I386, I386OP(xor_rm16_r16), I386OP(xor_rm32_r32), true }, { 0x32, OP_I386, I386OP(xor_r8_rm8), I386OP(xor_r8_rm8), false}, { 0x33, OP_I386, I386OP(xor_r16_rm16), I386OP(xor_r32_rm32), false}, { 0x34, OP_I386, I386OP(xor_al_i8), I386OP(xor_al_i8), false}, { 0x35, OP_I386, I386OP(xor_ax_i16), I386OP(xor_eax_i32), false}, { 0x36, OP_I386, I386OP(segment_SS), I386OP(segment_SS), false}, { 0x37, OP_I386, I386OP(aaa), I386OP(aaa), false}, { 0x38, OP_I386, I386OP(cmp_rm8_r8), I386OP(cmp_rm8_r8), false}, { 0x39, OP_I386, I386OP(cmp_rm16_r16), I386OP(cmp_rm32_r32), false}, { 0x3A, OP_I386, I386OP(cmp_r8_rm8), I386OP(cmp_r8_rm8), false}, { 0x3B, OP_I386, I386OP(cmp_r16_rm16), I386OP(cmp_r32_rm32), false}, { 0x3C, OP_I386, I386OP(cmp_al_i8), I386OP(cmp_al_i8), false}, { 0x3D, OP_I386, I386OP(cmp_ax_i16), I386OP(cmp_eax_i32), false}, { 0x3E, OP_I386, I386OP(segment_DS), I386OP(segment_DS), false}, { 0x3F, OP_I386, I386OP(aas), I386OP(aas), false}, { 0x40, OP_I386, I386OP(inc_ax), I386OP(inc_eax), false}, { 0x41, OP_I386, I386OP(inc_cx), I386OP(inc_ecx), false}, { 0x42, OP_I386, I386OP(inc_dx), I386OP(inc_edx), false}, { 0x43, OP_I386, I386OP(inc_bx), I386OP(inc_ebx), false}, { 0x44, OP_I386, I386OP(inc_sp), I386OP(inc_esp), false}, { 0x45, OP_I386, I386OP(inc_bp), I386OP(inc_ebp), false}, { 0x46, OP_I386, I386OP(inc_si), I386OP(inc_esi), false}, { 0x47, OP_I386, I386OP(inc_di), I386OP(inc_edi), false}, { 0x48, OP_I386, I386OP(dec_ax), I386OP(dec_eax), false}, { 0x49, OP_I386, I386OP(dec_cx), I386OP(dec_ecx), false}, { 0x4A, OP_I386, I386OP(dec_dx), I386OP(dec_edx), false}, { 0x4B, OP_I386, I386OP(dec_bx), I386OP(dec_ebx), false}, { 0x4C, OP_I386, I386OP(dec_sp), I386OP(dec_esp), false}, { 0x4D, OP_I386, I386OP(dec_bp), I386OP(dec_ebp), false}, { 0x4E, OP_I386, I386OP(dec_si), I386OP(dec_esi), false}, { 0x4F, OP_I386, I386OP(dec_di), I386OP(dec_edi), false}, { 0x50, OP_I386, I386OP(push_ax), I386OP(push_eax), false}, { 0x51, OP_I386, I386OP(push_cx), I386OP(push_ecx), false}, { 0x52, OP_I386, I386OP(push_dx), I386OP(push_edx), false}, { 0x53, OP_I386, I386OP(push_bx), I386OP(push_ebx), false}, { 0x54, OP_I386, I386OP(push_sp), I386OP(push_esp), false}, { 0x55, OP_I386, I386OP(push_bp), I386OP(push_ebp), false}, { 0x56, OP_I386, I386OP(push_si), I386OP(push_esi), false}, { 0x57, OP_I386, I386OP(push_di), I386OP(push_edi), false}, { 0x58, OP_I386, I386OP(pop_ax), I386OP(pop_eax), false}, { 0x59, OP_I386, I386OP(pop_cx), I386OP(pop_ecx), false}, { 0x5A, OP_I386, I386OP(pop_dx), I386OP(pop_edx), false}, { 0x5B, OP_I386, I386OP(pop_bx), I386OP(pop_ebx), false}, { 0x5C, OP_I386, I386OP(pop_sp), I386OP(pop_esp), false}, { 0x5D, OP_I386, I386OP(pop_bp), I386OP(pop_ebp), false}, { 0x5E, OP_I386, I386OP(pop_si), I386OP(pop_esi), false}, { 0x5F, OP_I386, I386OP(pop_di), I386OP(pop_edi), false}, { 0x60, OP_I386, I386OP(pusha), I386OP(pushad), false}, { 0x61, OP_I386, I386OP(popa), I386OP(popad), false}, { 0x62, OP_I386, I386OP(bound_r16_m16_m16), I386OP(bound_r32_m32_m32), false}, { 0x63, OP_I386, I386OP(arpl), I386OP(arpl), false}, { 0x64, OP_I386, I386OP(segment_FS), I386OP(segment_FS), false}, { 0x65, OP_I386, I386OP(segment_GS), I386OP(segment_GS), false}, { 0x66, OP_I386, I386OP(operand_size), I386OP(operand_size), false}, { 0x67, OP_I386, I386OP(address_size), I386OP(address_size), false}, { 0x68, OP_I386, I386OP(push_i16), I386OP(push_i32), false}, { 0x69, OP_I386, I386OP(imul_r16_rm16_i16), I386OP(imul_r32_rm32_i32), false}, { 0x6A, OP_I386, I386OP(push_i8), I386OP(push_i8), false}, { 0x6B, OP_I386, I386OP(imul_r16_rm16_i8), I386OP(imul_r32_rm32_i8), false}, { 0x6C, OP_I386, I386OP(insb), I386OP(insb), false}, { 0x6D, OP_I386, I386OP(insw), I386OP(insd), false}, { 0x6E, OP_I386, I386OP(outsb), I386OP(outsb), false}, { 0x6F, OP_I386, I386OP(outsw), I386OP(outsd), false}, { 0x70, OP_I386, I386OP(jo_rel8), I386OP(jo_rel8), false}, { 0x71, OP_I386, I386OP(jno_rel8), I386OP(jno_rel8), false}, { 0x72, OP_I386, I386OP(jc_rel8), I386OP(jc_rel8), false}, { 0x73, OP_I386, I386OP(jnc_rel8), I386OP(jnc_rel8), false}, { 0x74, OP_I386, I386OP(jz_rel8), I386OP(jz_rel8), false}, { 0x75, OP_I386, I386OP(jnz_rel8), I386OP(jnz_rel8), false}, { 0x76, OP_I386, I386OP(jbe_rel8), I386OP(jbe_rel8), false}, { 0x77, OP_I386, I386OP(ja_rel8), I386OP(ja_rel8), false}, { 0x78, OP_I386, I386OP(js_rel8), I386OP(js_rel8), false}, { 0x79, OP_I386, I386OP(jns_rel8), I386OP(jns_rel8), false}, { 0x7A, OP_I386, I386OP(jp_rel8), I386OP(jp_rel8), false}, { 0x7B, OP_I386, I386OP(jnp_rel8), I386OP(jnp_rel8), false}, { 0x7C, OP_I386, I386OP(jl_rel8), I386OP(jl_rel8), false}, { 0x7D, OP_I386, I386OP(jge_rel8), I386OP(jge_rel8), false}, { 0x7E, OP_I386, I386OP(jle_rel8), I386OP(jle_rel8), false}, { 0x7F, OP_I386, I386OP(jg_rel8), I386OP(jg_rel8), false}, { 0x80, OP_I386, I386OP(group80_8), I386OP(group80_8), true }, { 0x81, OP_I386, I386OP(group81_16), I386OP(group81_32), true }, { 0x82, OP_I386, I386OP(group80_8), I386OP(group80_8), true }, { 0x83, OP_I386, I386OP(group83_16), I386OP(group83_32), true }, { 0x84, OP_I386, I386OP(test_rm8_r8), I386OP(test_rm8_r8), false}, { 0x85, OP_I386, I386OP(test_rm16_r16), I386OP(test_rm32_r32), false}, { 0x86, OP_I386, I386OP(xchg_r8_rm8), I386OP(xchg_r8_rm8), true }, { 0x87, OP_I386, I386OP(xchg_r16_rm16), I386OP(xchg_r32_rm32), true }, { 0x88, OP_I386, I386OP(mov_rm8_r8), I386OP(mov_rm8_r8), false}, { 0x89, OP_I386, I386OP(mov_rm16_r16), I386OP(mov_rm32_r32), false}, { 0x8A, OP_I386, I386OP(mov_r8_rm8), I386OP(mov_r8_rm8), false}, { 0x8B, OP_I386, I386OP(mov_r16_rm16), I386OP(mov_r32_rm32), false}, { 0x8C, OP_I386, I386OP(mov_rm16_sreg), I386OP(mov_rm16_sreg), false}, { 0x8D, OP_I386, I386OP(lea16), I386OP(lea32), false}, { 0x8E, OP_I386, I386OP(mov_sreg_rm16), I386OP(mov_sreg_rm16), false}, { 0x8F, OP_I386, I386OP(pop_rm16), I386OP(pop_rm32), false}, { 0x90, OP_I386, I386OP(nop), I386OP(nop), false}, { 0x91, OP_I386, I386OP(xchg_ax_cx), I386OP(xchg_eax_ecx), false}, { 0x92, OP_I386, I386OP(xchg_ax_dx), I386OP(xchg_eax_edx), false}, { 0x93, OP_I386, I386OP(xchg_ax_bx), I386OP(xchg_eax_ebx), false}, { 0x94, OP_I386, I386OP(xchg_ax_sp), I386OP(xchg_eax_esp), false}, { 0x95, OP_I386, I386OP(xchg_ax_bp), I386OP(xchg_eax_ebp), false}, { 0x96, OP_I386, I386OP(xchg_ax_si), I386OP(xchg_eax_esi), false}, { 0x97, OP_I386, I386OP(xchg_ax_di), I386OP(xchg_eax_edi), false}, { 0x98, OP_I386, I386OP(cbw), I386OP(cwde), false}, { 0x99, OP_I386, I386OP(cwd), I386OP(cdq), false}, { 0x9A, OP_I386, I386OP(call_abs16), I386OP(call_abs32), false}, { 0x9B, OP_I386, I386OP(wait), I386OP(wait), false}, { 0x9B, OP_I486, I486OP(wait), I486OP(wait), false}, { 0x9C, OP_I386, I386OP(pushf), I386OP(pushfd), false}, { 0x9D, OP_I386, I386OP(popf), I386OP(popfd), false}, { 0x9E, OP_I386, I386OP(sahf), I386OP(sahf), false}, { 0x9F, OP_I386, I386OP(lahf), I386OP(lahf), false}, { 0xA0, OP_I386, I386OP(mov_al_m8), I386OP(mov_al_m8), false}, { 0xA1, OP_I386, I386OP(mov_ax_m16), I386OP(mov_eax_m32), false}, { 0xA2, OP_I386, I386OP(mov_m8_al), I386OP(mov_m8_al), false}, { 0xA3, OP_I386, I386OP(mov_m16_ax), I386OP(mov_m32_eax), false}, { 0xA4, OP_I386, I386OP(movsb), I386OP(movsb), false}, { 0xA5, OP_I386, I386OP(movsw), I386OP(movsd), false}, { 0xA6, OP_I386, I386OP(cmpsb), I386OP(cmpsb), false}, { 0xA7, OP_I386, I386OP(cmpsw), I386OP(cmpsd), false}, { 0xA8, OP_I386, I386OP(test_al_i8), I386OP(test_al_i8), false}, { 0xA9, OP_I386, I386OP(test_ax_i16), I386OP(test_eax_i32), false}, { 0xAA, OP_I386, I386OP(stosb), I386OP(stosb), false}, { 0xAB, OP_I386, I386OP(stosw), I386OP(stosd), false}, { 0xAC, OP_I386, I386OP(lodsb), I386OP(lodsb), false}, { 0xAD, OP_I386, I386OP(lodsw), I386OP(lodsd), false}, { 0xAE, OP_I386, I386OP(scasb), I386OP(scasb), false}, { 0xAF, OP_I386, I386OP(scasw), I386OP(scasd), false}, { 0xB0, OP_I386, I386OP(mov_al_i8), I386OP(mov_al_i8), false}, { 0xB1, OP_I386, I386OP(mov_cl_i8), I386OP(mov_cl_i8), false}, { 0xB2, OP_I386, I386OP(mov_dl_i8), I386OP(mov_dl_i8), false}, { 0xB3, OP_I386, I386OP(mov_bl_i8), I386OP(mov_bl_i8), false}, { 0xB4, OP_I386, I386OP(mov_ah_i8), I386OP(mov_ah_i8), false}, { 0xB5, OP_I386, I386OP(mov_ch_i8), I386OP(mov_ch_i8), false}, { 0xB6, OP_I386, I386OP(mov_dh_i8), I386OP(mov_dh_i8), false}, { 0xB7, OP_I386, I386OP(mov_bh_i8), I386OP(mov_bh_i8), false}, { 0xB8, OP_I386, I386OP(mov_ax_i16), I386OP(mov_eax_i32), false}, { 0xB9, OP_I386, I386OP(mov_cx_i16), I386OP(mov_ecx_i32), false}, { 0xBA, OP_I386, I386OP(mov_dx_i16), I386OP(mov_edx_i32), false}, { 0xBB, OP_I386, I386OP(mov_bx_i16), I386OP(mov_ebx_i32), false}, { 0xBC, OP_I386, I386OP(mov_sp_i16), I386OP(mov_esp_i32), false}, { 0xBD, OP_I386, I386OP(mov_bp_i16), I386OP(mov_ebp_i32), false}, { 0xBE, OP_I386, I386OP(mov_si_i16), I386OP(mov_esi_i32), false}, { 0xBF, OP_I386, I386OP(mov_di_i16), I386OP(mov_edi_i32), false}, { 0xC0, OP_I386, I386OP(groupC0_8), I386OP(groupC0_8), false}, { 0xC1, OP_I386, I386OP(groupC1_16), I386OP(groupC1_32), false}, { 0xC2, OP_I386, I386OP(ret_near16_i16), I386OP(ret_near32_i16), false}, { 0xC3, OP_I386, I386OP(ret_near16), I386OP(ret_near32), false}, { 0xC4, OP_I386, I386OP(les16), I386OP(les32), false}, { 0xC5, OP_I386, I386OP(lds16), I386OP(lds32), false}, { 0xC6, OP_I386, I386OP(mov_rm8_i8), I386OP(mov_rm8_i8), false}, { 0xC7, OP_I386, I386OP(mov_rm16_i16), I386OP(mov_rm32_i32), false}, { 0xC8, OP_I386, I386OP(enter16), I386OP(enter32), false}, { 0xC9, OP_I386, I386OP(leave16), I386OP(leave32), false}, { 0xCA, OP_I386, I386OP(retf_i16), I386OP(retf_i32), false}, { 0xCB, OP_I386, I386OP(retf16), I386OP(retf32), false}, { 0xCC, OP_I386, I386OP(int3), I386OP(int3), false}, { 0xCD, OP_I386, I386OP(int), I386OP(int), false}, { 0xCE, OP_I386, I386OP(into), I386OP(into), false}, { 0xCF, OP_I386, I386OP(iret16), I386OP(iret32), false}, { 0xD0, OP_I386, I386OP(groupD0_8), I386OP(groupD0_8), false}, { 0xD1, OP_I386, I386OP(groupD1_16), I386OP(groupD1_32), false}, { 0xD2, OP_I386, I386OP(groupD2_8), I386OP(groupD2_8), false}, { 0xD3, OP_I386, I386OP(groupD3_16), I386OP(groupD3_32), false}, { 0xD4, OP_I386, I386OP(aam), I386OP(aam), false}, { 0xD5, OP_I386, I386OP(aad), I386OP(aad), false}, { 0xD6, OP_I386, I386OP(setalc), I386OP(setalc), false}, { 0xD7, OP_I386, I386OP(xlat), I386OP(xlat), false}, { 0xD8, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xD9, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDA, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDB, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDC, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDD, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDE, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDF, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xD8, OP_FPU, I386OP(x87_group_d8), I386OP(x87_group_d8), false}, { 0xD9, OP_FPU, I386OP(x87_group_d9), I386OP(x87_group_d9), false}, { 0xDA, OP_FPU, I386OP(x87_group_da), I386OP(x87_group_da), false}, { 0xDB, OP_FPU, I386OP(x87_group_db), I386OP(x87_group_db), false}, { 0xDC, OP_FPU, I386OP(x87_group_dc), I386OP(x87_group_dc), false}, { 0xDD, OP_FPU, I386OP(x87_group_dd), I386OP(x87_group_dd), false}, { 0xDE, OP_FPU, I386OP(x87_group_de), I386OP(x87_group_de), false}, { 0xDF, OP_FPU, I386OP(x87_group_df), I386OP(x87_group_df), false}, { 0xE0, OP_I386, I386OP(loopne16), I386OP(loopne32), false}, { 0xE1, OP_I386, I386OP(loopz16), I386OP(loopz32), false}, { 0xE2, OP_I386, I386OP(loop16), I386OP(loop32), false}, { 0xE3, OP_I386, I386OP(jcxz16), I386OP(jcxz32), false}, { 0xE4, OP_I386, I386OP(in_al_i8), I386OP(in_al_i8), false}, { 0xE5, OP_I386, I386OP(in_ax_i8), I386OP(in_eax_i8), false}, { 0xE6, OP_I386, I386OP(out_al_i8), I386OP(out_al_i8), false}, { 0xE7, OP_I386, I386OP(out_ax_i8), I386OP(out_eax_i8), false}, { 0xE8, OP_I386, I386OP(call_rel16), I386OP(call_rel32), false}, { 0xE9, OP_I386, I386OP(jmp_rel16), I386OP(jmp_rel32), false}, { 0xEA, OP_I386, I386OP(jmp_abs16), I386OP(jmp_abs32), false}, { 0xEB, OP_I386, I386OP(jmp_rel8), I386OP(jmp_rel8), false}, { 0xEC, OP_I386, I386OP(in_al_dx), I386OP(in_al_dx), false}, { 0xED, OP_I386, I386OP(in_ax_dx), I386OP(in_eax_dx), false}, { 0xEE, OP_I386, I386OP(out_al_dx), I386OP(out_al_dx), false}, { 0xEF, OP_I386, I386OP(out_ax_dx), I386OP(out_eax_dx), false}, { 0xF0, OP_I386, I386OP(lock), I386OP(lock), false}, { 0xF1, OP_I386, I386OP(invalid), I386OP(invalid), false}, { 0xF2, OP_I386, I386OP(repne), I386OP(repne), false}, { 0xF3, OP_I386, I386OP(rep), I386OP(rep), false}, { 0xF4, OP_I386, I386OP(hlt), I386OP(hlt), false}, { 0xF5, OP_I386, I386OP(cmc), I386OP(cmc), false}, { 0xF6, OP_I386, I386OP(groupF6_8), I386OP(groupF6_8), true }, { 0xF7, OP_I386, I386OP(groupF7_16), I386OP(groupF7_32), true }, { 0xF8, OP_I386, I386OP(clc), I386OP(clc), false}, { 0xF9, OP_I386, I386OP(stc), I386OP(stc), false}, { 0xFA, OP_I386, I386OP(cli), I386OP(cli), false}, { 0xFB, OP_I386, I386OP(sti), I386OP(sti), false}, { 0xFC, OP_I386, I386OP(cld), I386OP(cld), false}, { 0xFD, OP_I386, I386OP(std), I386OP(std), false}, { 0xFE, OP_I386, I386OP(groupFE_8), I386OP(groupFE_8), true }, { 0xFF, OP_I386, I386OP(groupFF_16), I386OP(groupFF_32), true }, /* 0F ?? */ { 0x00, OP_2BYTE|OP_I386, I386OP(group0F00_16), I386OP(group0F00_32), false}, { 0x01, OP_2BYTE|OP_I386, I386OP(group0F01_16), I386OP(group0F01_32), false}, { 0x01, OP_2BYTE|OP_I486, I486OP(group0F01_16), I486OP(group0F01_32), false}, { 0x02, OP_2BYTE|OP_I386, I386OP(lar_r16_rm16), I386OP(lar_r32_rm32), false}, { 0x03, OP_2BYTE|OP_I386, I386OP(lsl_r16_rm16), I386OP(lsl_r32_rm32), false}, { 0x06, OP_2BYTE|OP_I386, I386OP(clts), I386OP(clts), false}, { 0x07, OP_2BYTE|OP_I386, I386OP(loadall), I386OP(loadall), false}, { 0x08, OP_2BYTE|OP_I486, I486OP(invd), I486OP(invd), false}, { 0x09, OP_2BYTE|OP_I486, I486OP(wbinvd), I486OP(wbinvd), false}, { 0x0B, OP_2BYTE|OP_PENTIUM, PENTIUMOP(ud2), PENTIUMOP(ud2), false}, { 0x10, OP_2BYTE|OP_SSE, SSEOP(movups_r128_rm128), SSEOP(movups_r128_rm128), false}, { 0x11, OP_2BYTE|OP_SSE, SSEOP(movups_rm128_r128), SSEOP(movups_rm128_r128), false}, { 0x12, OP_2BYTE|OP_SSE, SSEOP(movlps_r128_m64), SSEOP(movlps_r128_m64), false}, { 0x13, OP_2BYTE|OP_SSE, SSEOP(movlps_m64_r128), SSEOP(movlps_m64_r128), false}, { 0x14, OP_2BYTE|OP_SSE, SSEOP(unpcklps_r128_rm128), SSEOP(unpcklps_r128_rm128), false}, { 0x15, OP_2BYTE|OP_SSE, SSEOP(unpckhps_r128_rm128), SSEOP(unpckhps_r128_rm128), false}, { 0x16, OP_2BYTE|OP_SSE, SSEOP(movhps_r128_m64), SSEOP(movhps_r128_m64), false}, { 0x17, OP_2BYTE|OP_SSE, SSEOP(movhps_m64_r128), SSEOP(movhps_m64_r128), false}, { 0x18, OP_2BYTE|OP_PENTIUM, PENTIUMOP(prefetch_m8), PENTIUMOP(prefetch_m8), false}, { 0x20, OP_2BYTE|OP_I386, I386OP(mov_r32_cr), I386OP(mov_r32_cr), false}, { 0x21, OP_2BYTE|OP_I386, I386OP(mov_r32_dr), I386OP(mov_r32_dr), false}, { 0x22, OP_2BYTE|OP_I386, I386OP(mov_cr_r32), I386OP(mov_cr_r32), false}, { 0x22, OP_2BYTE|OP_I486, I486OP(mov_cr_r32), I486OP(mov_cr_r32), false}, { 0x23, OP_2BYTE|OP_I386, I386OP(mov_dr_r32), I386OP(mov_dr_r32), false}, { 0x24, OP_2BYTE|OP_I386, I386OP(mov_r32_tr), I386OP(mov_r32_tr), false}, { 0x26, OP_2BYTE|OP_I386, I386OP(mov_tr_r32), I386OP(mov_tr_r32), false}, { 0x28, OP_2BYTE|OP_SSE, SSEOP(movaps_r128_rm128), SSEOP(movaps_r128_rm128), false}, { 0x29, OP_2BYTE|OP_SSE, SSEOP(movaps_rm128_r128), SSEOP(movaps_rm128_r128), false}, { 0x2a, OP_2BYTE|OP_SSE, SSEOP(cvtpi2ps_r128_rm64), SSEOP(cvtpi2ps_r128_rm64), false}, { 0x2b, OP_2BYTE|OP_SSE, SSEOP(movntps_m128_r128), SSEOP(movntps_m128_r128), false}, { 0x2c, OP_2BYTE|OP_SSE, SSEOP(cvttps2pi_r64_r128m64), SSEOP(cvttps2pi_r64_r128m64),false}, { 0x2d, OP_2BYTE|OP_SSE, SSEOP(cvtps2pi_r64_r128m64), SSEOP(cvtps2pi_r64_r128m64),false}, { 0x2e, OP_2BYTE|OP_SSE, SSEOP(ucomiss_r128_r128m32), SSEOP(ucomiss_r128_r128m32),false}, { 0x2f, OP_2BYTE|OP_SSE, SSEOP(comiss_r128_r128m32), SSEOP(comiss_r128_r128m32), false}, { 0x30, OP_2BYTE|OP_PENTIUM, PENTIUMOP(wrmsr), PENTIUMOP(wrmsr), false}, { 0x31, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdtsc), PENTIUMOP(rdtsc), false}, { 0x32, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdmsr), PENTIUMOP(rdmsr), false}, { 0x38, OP_2BYTE|OP_PENTIUM, I386OP(decode_three_byte38), I386OP(decode_three_byte38),false}, { 0x3A, OP_2BYTE|OP_PENTIUM, I386OP(decode_three_byte3a), I386OP(decode_three_byte3a),false}, { 0x3A, OP_2BYTE|OP_CYRIX, I386OP(cyrix_special), I386OP(cyrix_special), false}, { 0x3B, OP_2BYTE|OP_CYRIX, I386OP(cyrix_special), I386OP(cyrix_special), false}, { 0x3C, OP_2BYTE|OP_CYRIX, I386OP(cyrix_special), I386OP(cyrix_special), false}, { 0x3D, OP_2BYTE|OP_CYRIX, I386OP(cyrix_special), I386OP(cyrix_special), false}, { 0x40, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovo_r16_rm16), PENTIUMOP(cmovo_r32_rm32), false}, { 0x41, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovno_r16_rm16), PENTIUMOP(cmovno_r32_rm32), false}, { 0x42, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovb_r16_rm16), PENTIUMOP(cmovb_r32_rm32), false}, { 0x43, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovae_r16_rm16), PENTIUMOP(cmovae_r32_rm32), false}, { 0x44, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmove_r16_rm16), PENTIUMOP(cmove_r32_rm32), false}, { 0x45, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovne_r16_rm16), PENTIUMOP(cmovne_r32_rm32), false}, { 0x46, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovbe_r16_rm16), PENTIUMOP(cmovbe_r32_rm32), false}, { 0x47, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmova_r16_rm16), PENTIUMOP(cmova_r32_rm32), false}, { 0x48, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovs_r16_rm16), PENTIUMOP(cmovs_r32_rm32), false}, { 0x49, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovns_r16_rm16), PENTIUMOP(cmovns_r32_rm32), false}, { 0x4a, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovp_r16_rm16), PENTIUMOP(cmovp_r32_rm32), false}, { 0x4b, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovnp_r16_rm16), PENTIUMOP(cmovnp_r32_rm32), false}, { 0x4c, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovl_r16_rm16), PENTIUMOP(cmovl_r32_rm32), false}, { 0x4d, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovge_r16_rm16), PENTIUMOP(cmovge_r32_rm32), false}, { 0x4e, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovle_r16_rm16), PENTIUMOP(cmovle_r32_rm32), false}, { 0x4f, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovg_r16_rm16), PENTIUMOP(cmovg_r32_rm32), false}, { 0x50, OP_2BYTE|OP_SSE, SSEOP(movmskps_r16_r128), SSEOP(movmskps_r32_r128), false}, { 0x51, OP_2BYTE|OP_SSE, SSEOP(sqrtps_r128_rm128), SSEOP(sqrtps_r128_rm128), false}, { 0x52, OP_2BYTE|OP_SSE, SSEOP(rsqrtps_r128_rm128), SSEOP(rsqrtps_r128_rm128), false}, { 0x53, OP_2BYTE|OP_SSE, SSEOP(rcpps_r128_rm128), SSEOP(rcpps_r128_rm128), false}, { 0x54, OP_2BYTE|OP_SSE, SSEOP(andps_r128_rm128), SSEOP(andps_r128_rm128), false}, { 0x55, OP_2BYTE|OP_SSE, SSEOP(andnps_r128_rm128), SSEOP(andnps_r128_rm128), false}, { 0x56, OP_2BYTE|OP_SSE, SSEOP(orps_r128_rm128), SSEOP(orps_r128_rm128), false}, { 0x57, OP_2BYTE|OP_SSE, SSEOP(xorps), SSEOP(xorps), false}, { 0x58, OP_2BYTE|OP_SSE, SSEOP(addps), SSEOP(addps), false}, { 0x59, OP_2BYTE|OP_SSE, SSEOP(mulps), SSEOP(mulps), false}, { 0x5a, OP_2BYTE|OP_SSE, SSEOP(cvtps2pd_r128_r128m64), SSEOP(cvtps2pd_r128_r128m64),false}, { 0x5b, OP_2BYTE|OP_SSE, SSEOP(cvtdq2ps_r128_rm128), SSEOP(cvtdq2ps_r128_rm128), false}, { 0x5c, OP_2BYTE|OP_SSE, SSEOP(subps), SSEOP(subps), false}, { 0x5d, OP_2BYTE|OP_SSE, SSEOP(minps), SSEOP(minps), false}, { 0x5e, OP_2BYTE|OP_SSE, SSEOP(divps), SSEOP(divps), false}, { 0x5f, OP_2BYTE|OP_SSE, SSEOP(maxps), SSEOP(maxps), false}, { 0x60, OP_2BYTE|OP_MMX, MMXOP(punpcklbw_r64_r64m32), MMXOP(punpcklbw_r64_r64m32),false}, { 0x61, OP_2BYTE|OP_MMX, MMXOP(punpcklwd_r64_r64m32), MMXOP(punpcklwd_r64_r64m32),false}, { 0x62, OP_2BYTE|OP_MMX, MMXOP(punpckldq_r64_r64m32), MMXOP(punpckldq_r64_r64m32),false}, { 0x63, OP_2BYTE|OP_MMX, MMXOP(packsswb_r64_rm64), MMXOP(packsswb_r64_rm64), false}, { 0x64, OP_2BYTE|OP_MMX, MMXOP(pcmpgtb_r64_rm64), MMXOP(pcmpgtb_r64_rm64), false}, { 0x65, OP_2BYTE|OP_MMX, MMXOP(pcmpgtw_r64_rm64), MMXOP(pcmpgtw_r64_rm64), false}, { 0x66, OP_2BYTE|OP_MMX, MMXOP(pcmpgtd_r64_rm64), MMXOP(pcmpgtd_r64_rm64), false}, { 0x67, OP_2BYTE|OP_MMX, MMXOP(packuswb_r64_rm64), MMXOP(packuswb_r64_rm64), false}, { 0x68, OP_2BYTE|OP_MMX, MMXOP(punpckhbw_r64_rm64), MMXOP(punpckhbw_r64_rm64), false}, { 0x69, OP_2BYTE|OP_MMX, MMXOP(punpckhwd_r64_rm64), MMXOP(punpckhwd_r64_rm64), false}, { 0x6a, OP_2BYTE|OP_MMX, MMXOP(punpckhdq_r64_rm64), MMXOP(punpckhdq_r64_rm64), false}, { 0x6b, OP_2BYTE|OP_MMX, MMXOP(packssdw_r64_rm64), MMXOP(packssdw_r64_rm64), false}, { 0x6e, OP_2BYTE|OP_MMX, MMXOP(movd_r64_rm32), MMXOP(movd_r64_rm32), false}, { 0x6f, OP_2BYTE|OP_MMX, MMXOP(movq_r64_rm64), MMXOP(movq_r64_rm64), false}, { 0x70, OP_2BYTE|OP_MMX, MMXOP(pshufw_r64_rm64_i8), MMXOP(pshufw_r64_rm64_i8), false}, { 0x71, OP_2BYTE|OP_MMX, MMXOP(group_0f71), MMXOP(group_0f71), false}, { 0x72, OP_2BYTE|OP_MMX, MMXOP(group_0f72), MMXOP(group_0f72), false}, { 0x73, OP_2BYTE|OP_MMX, MMXOP(group_0f73), MMXOP(group_0f73), false}, { 0x74, OP_2BYTE|OP_CYRIX, I386OP(cyrix_unknown), I386OP(cyrix_unknown), false}, { 0x74, OP_2BYTE|OP_MMX, MMXOP(pcmpeqb_r64_rm64), MMXOP(pcmpeqb_r64_rm64), false}, { 0x75, OP_2BYTE|OP_MMX, MMXOP(pcmpeqw_r64_rm64), MMXOP(pcmpeqw_r64_rm64), false}, { 0x76, OP_2BYTE|OP_MMX, MMXOP(pcmpeqd_r64_rm64), MMXOP(pcmpeqd_r64_rm64), false}, { 0x77, OP_2BYTE|OP_MMX, MMXOP(emms), MMXOP(emms), false}, { 0x78, OP_2BYTE|OP_CYRIX, I386OP(cyrix_svdc), I386OP(cyrix_svdc), false}, { 0x79, OP_2BYTE|OP_CYRIX, I386OP(cyrix_rsdc), I386OP(cyrix_rsdc), false}, { 0x7a, OP_2BYTE|OP_CYRIX, I386OP(cyrix_svldt), I386OP(cyrix_svldt), false}, { 0x7b, OP_2BYTE|OP_CYRIX, I386OP(cyrix_rsldt), I386OP(cyrix_rsldt), false}, { 0x7c, OP_2BYTE|OP_CYRIX, I386OP(cyrix_svts), I386OP(cyrix_svts), false}, { 0x7d, OP_2BYTE|OP_CYRIX, I386OP(cyrix_rsts), I386OP(cyrix_rsts), false}, { 0x7e, OP_2BYTE|OP_MMX, MMXOP(movd_rm32_r64), MMXOP(movd_rm32_r64), false}, { 0x7f, OP_2BYTE|OP_MMX, MMXOP(movq_rm64_r64), MMXOP(movq_rm64_r64), false}, { 0x80, OP_2BYTE|OP_I386, I386OP(jo_rel16), I386OP(jo_rel32), false}, { 0x81, OP_2BYTE|OP_I386, I386OP(jno_rel16), I386OP(jno_rel32), false}, { 0x82, OP_2BYTE|OP_I386, I386OP(jc_rel16), I386OP(jc_rel32), false}, { 0x83, OP_2BYTE|OP_I386, I386OP(jnc_rel16), I386OP(jnc_rel32), false}, { 0x84, OP_2BYTE|OP_I386, I386OP(jz_rel16), I386OP(jz_rel32), false}, { 0x85, OP_2BYTE|OP_I386, I386OP(jnz_rel16), I386OP(jnz_rel32), false}, { 0x86, OP_2BYTE|OP_I386, I386OP(jbe_rel16), I386OP(jbe_rel32), false}, { 0x87, OP_2BYTE|OP_I386, I386OP(ja_rel16), I386OP(ja_rel32), false}, { 0x88, OP_2BYTE|OP_I386, I386OP(js_rel16), I386OP(js_rel32), false}, { 0x89, OP_2BYTE|OP_I386, I386OP(jns_rel16), I386OP(jns_rel32), false}, { 0x8A, OP_2BYTE|OP_I386, I386OP(jp_rel16), I386OP(jp_rel32), false}, { 0x8B, OP_2BYTE|OP_I386, I386OP(jnp_rel16), I386OP(jnp_rel32), false}, { 0x8C, OP_2BYTE|OP_I386, I386OP(jl_rel16), I386OP(jl_rel32), false}, { 0x8D, OP_2BYTE|OP_I386, I386OP(jge_rel16), I386OP(jge_rel32), false}, { 0x8E, OP_2BYTE|OP_I386, I386OP(jle_rel16), I386OP(jle_rel32), false}, { 0x8F, OP_2BYTE|OP_I386, I386OP(jg_rel16), I386OP(jg_rel32), false}, { 0x90, OP_2BYTE|OP_I386, I386OP(seto_rm8), I386OP(seto_rm8), false}, { 0x91, OP_2BYTE|OP_I386, I386OP(setno_rm8), I386OP(setno_rm8), false}, { 0x92, OP_2BYTE|OP_I386, I386OP(setc_rm8), I386OP(setc_rm8), false}, { 0x93, OP_2BYTE|OP_I386, I386OP(setnc_rm8), I386OP(setnc_rm8), false}, { 0x94, OP_2BYTE|OP_I386, I386OP(setz_rm8), I386OP(setz_rm8), false}, { 0x95, OP_2BYTE|OP_I386, I386OP(setnz_rm8), I386OP(setnz_rm8), false}, { 0x96, OP_2BYTE|OP_I386, I386OP(setbe_rm8), I386OP(setbe_rm8), false}, { 0x97, OP_2BYTE|OP_I386, I386OP(seta_rm8), I386OP(seta_rm8), false}, { 0x98, OP_2BYTE|OP_I386, I386OP(sets_rm8), I386OP(sets_rm8), false}, { 0x99, OP_2BYTE|OP_I386, I386OP(setns_rm8), I386OP(setns_rm8), false}, { 0x9A, OP_2BYTE|OP_I386, I386OP(setp_rm8), I386OP(setp_rm8), false}, { 0x9B, OP_2BYTE|OP_I386, I386OP(setnp_rm8), I386OP(setnp_rm8), false}, { 0x9C, OP_2BYTE|OP_I386, I386OP(setl_rm8), I386OP(setl_rm8), false}, { 0x9D, OP_2BYTE|OP_I386, I386OP(setge_rm8), I386OP(setge_rm8), false}, { 0x9E, OP_2BYTE|OP_I386, I386OP(setle_rm8), I386OP(setle_rm8), false}, { 0x9F, OP_2BYTE|OP_I386, I386OP(setg_rm8), I386OP(setg_rm8), false}, { 0xA0, OP_2BYTE|OP_I386, I386OP(push_fs16), I386OP(push_fs32), false}, { 0xA1, OP_2BYTE|OP_I386, I386OP(pop_fs16), I386OP(pop_fs32), false}, { 0xA2, OP_2BYTE|OP_I486, I486OP(cpuid), I486OP(cpuid), false}, { 0xA3, OP_2BYTE|OP_I386, I386OP(bt_rm16_r16), I386OP(bt_rm32_r32), false}, { 0xA4, OP_2BYTE|OP_I386, I386OP(shld16_i8), I386OP(shld32_i8), false}, { 0xA5, OP_2BYTE|OP_I386, I386OP(shld16_cl), I386OP(shld32_cl), false}, { 0xA8, OP_2BYTE|OP_I386, I386OP(push_gs16), I386OP(push_gs32), false}, { 0xA9, OP_2BYTE|OP_I386, I386OP(pop_gs16), I386OP(pop_gs32), false}, { 0xAA, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rsm), PENTIUMOP(rsm), false}, { 0xAB, OP_2BYTE|OP_I386, I386OP(bts_rm16_r16), I386OP(bts_rm32_r32), true }, { 0xAC, OP_2BYTE|OP_I386, I386OP(shrd16_i8), I386OP(shrd32_i8), false}, { 0xAD, OP_2BYTE|OP_I386, I386OP(shrd16_cl), I386OP(shrd32_cl), false}, { 0xAE, OP_2BYTE|OP_SSE, SSEOP(group_0fae), SSEOP(group_0fae), false}, { 0xAF, OP_2BYTE|OP_I386, I386OP(imul_r16_rm16), I386OP(imul_r32_rm32), false}, { 0xB0, OP_2BYTE|OP_I486, I486OP(cmpxchg_rm8_r8), I486OP(cmpxchg_rm8_r8), true }, { 0xB1, OP_2BYTE|OP_I486, I486OP(cmpxchg_rm16_r16), I486OP(cmpxchg_rm32_r32), true }, { 0xB2, OP_2BYTE|OP_I386, I386OP(lss16), I386OP(lss32), false}, { 0xB3, OP_2BYTE|OP_I386, I386OP(btr_rm16_r16), I386OP(btr_rm32_r32), true }, { 0xB4, OP_2BYTE|OP_I386, I386OP(lfs16), I386OP(lfs32), false}, { 0xB5, OP_2BYTE|OP_I386, I386OP(lgs16), I386OP(lgs32), false}, { 0xB6, OP_2BYTE|OP_I386, I386OP(movzx_r16_rm8), I386OP(movzx_r32_rm8), false}, { 0xB7, OP_2BYTE|OP_I386, I386OP(mov_r16_rm16), I386OP(movzx_r32_rm16), false}, { 0xBA, OP_2BYTE|OP_I386, I386OP(group0FBA_16), I386OP(group0FBA_32), true }, { 0xBB, OP_2BYTE|OP_I386, I386OP(btc_rm16_r16), I386OP(btc_rm32_r32), true }, { 0xBC, OP_2BYTE|OP_I386, I386OP(bsf_r16_rm16), I386OP(bsf_r32_rm32), false}, { 0xBD, OP_2BYTE|OP_I386, I386OP(bsr_r16_rm16), I386OP(bsr_r32_rm32), false}, { 0xBE, OP_2BYTE|OP_I386, I386OP(movsx_r16_rm8), I386OP(movsx_r32_rm8), false}, { 0xBF, OP_2BYTE|OP_I386, I386OP(mov_r16_rm16), I386OP(movsx_r32_rm16), false}, { 0xC0, OP_2BYTE|OP_I486, I486OP(xadd_rm8_r8), I486OP(xadd_rm8_r8), true }, { 0xC1, OP_2BYTE|OP_I486, I486OP(xadd_rm16_r16), I486OP(xadd_rm32_r32), true }, { 0xC2, OP_2BYTE|OP_SSE, SSEOP(cmpps_r128_rm128_i8), SSEOP(cmpps_r128_rm128_i8), false}, { 0xC3, OP_2BYTE|OP_PENTIUM, PENTIUMOP(movnti_m16_r16), PENTIUMOP(movnti_m32_r32), false}, { 0xC4, OP_2BYTE|OP_SSE, SSEOP(pinsrw_r64_r16m16_i8), SSEOP(pinsrw_r64_r32m16_i8),false}, { 0xC5, OP_2BYTE|OP_SSE, SSEOP(pextrw_r16_r64_i8), SSEOP(pextrw_r32_r64_i8), false}, { 0xC6, OP_2BYTE|OP_SSE, SSEOP(shufps), SSEOP(shufps), false}, { 0xC7, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmpxchg8b_m64), PENTIUMOP(cmpxchg8b_m64), true }, { 0xC8, OP_2BYTE|OP_I486, I486OP(bswap_eax), I486OP(bswap_eax), false}, { 0xC9, OP_2BYTE|OP_I486, I486OP(bswap_ecx), I486OP(bswap_ecx), false}, { 0xCA, OP_2BYTE|OP_I486, I486OP(bswap_edx), I486OP(bswap_edx), false}, { 0xCB, OP_2BYTE|OP_I486, I486OP(bswap_ebx), I486OP(bswap_ebx), false}, { 0xCC, OP_2BYTE|OP_I486, I486OP(bswap_esp), I486OP(bswap_esp), false}, { 0xCD, OP_2BYTE|OP_I486, I486OP(bswap_ebp), I486OP(bswap_ebp), false}, { 0xCE, OP_2BYTE|OP_I486, I486OP(bswap_esi), I486OP(bswap_esi), false}, { 0xCF, OP_2BYTE|OP_I486, I486OP(bswap_edi), I486OP(bswap_edi), false}, { 0xD1, OP_2BYTE|OP_MMX, MMXOP(psrlw_r64_rm64), MMXOP(psrlw_r64_rm64), false}, { 0xD2, OP_2BYTE|OP_MMX, MMXOP(psrld_r64_rm64), MMXOP(psrld_r64_rm64), false}, { 0xD3, OP_2BYTE|OP_MMX, MMXOP(psrlq_r64_rm64), MMXOP(psrlq_r64_rm64), false}, { 0xD4, OP_2BYTE|OP_MMX, MMXOP(paddq_r64_rm64), MMXOP(paddq_r64_rm64), false}, { 0xD5, OP_2BYTE|OP_MMX, MMXOP(pmullw_r64_rm64), MMXOP(pmullw_r64_rm64), false}, { 0xD7, OP_2BYTE|OP_SSE, SSEOP(pmovmskb_r16_r64), SSEOP(pmovmskb_r32_r64), false}, { 0xD8, OP_2BYTE|OP_MMX, MMXOP(psubusb_r64_rm64), MMXOP(psubusb_r64_rm64), false}, { 0xD9, OP_2BYTE|OP_MMX, MMXOP(psubusw_r64_rm64), MMXOP(psubusw_r64_rm64), false}, { 0xDA, OP_2BYTE|OP_SSE, SSEOP(pminub_r64_rm64), SSEOP(pminub_r64_rm64), false}, { 0xDB, OP_2BYTE|OP_MMX, MMXOP(pand_r64_rm64), MMXOP(pand_r64_rm64), false}, { 0xDC, OP_2BYTE|OP_MMX, MMXOP(paddusb_r64_rm64), MMXOP(paddusb_r64_rm64), false}, { 0xDD, OP_2BYTE|OP_MMX, MMXOP(paddusw_r64_rm64), MMXOP(paddusw_r64_rm64), false}, { 0xDE, OP_2BYTE|OP_SSE, SSEOP(pmaxub_r64_rm64), SSEOP(pmaxub_r64_rm64), false}, { 0xDF, OP_2BYTE|OP_MMX, MMXOP(pandn_r64_rm64), MMXOP(pandn_r64_rm64), false}, { 0xE0, OP_2BYTE|OP_SSE, SSEOP(pavgb_r64_rm64), SSEOP(pavgb_r64_rm64), false}, { 0xE1, OP_2BYTE|OP_MMX, MMXOP(psraw_r64_rm64), MMXOP(psraw_r64_rm64), false}, { 0xE2, OP_2BYTE|OP_MMX, MMXOP(psrad_r64_rm64), MMXOP(psrad_r64_rm64), false}, { 0xE3, OP_2BYTE|OP_SSE, SSEOP(pavgw_r64_rm64), SSEOP(pavgw_r64_rm64), false}, { 0xE4, OP_2BYTE|OP_SSE, SSEOP(pmulhuw_r64_rm64), SSEOP(pmulhuw_r64_rm64), false}, { 0xE5, OP_2BYTE|OP_MMX, MMXOP(pmulhw_r64_rm64), MMXOP(pmulhw_r64_rm64), false}, { 0xE7, OP_2BYTE|OP_PENTIUM, PENTIUMOP(movntq_m64_r64), PENTIUMOP(movntq_m64_r64), false}, { 0xE8, OP_2BYTE|OP_MMX, MMXOP(psubsb_r64_rm64), MMXOP(psubsb_r64_rm64), false}, { 0xE9, OP_2BYTE|OP_MMX, MMXOP(psubsw_r64_rm64), MMXOP(psubsw_r64_rm64), false}, { 0xEA, OP_2BYTE|OP_SSE, SSEOP(pminsw_r64_rm64), SSEOP(pminsw_r64_rm64), false}, { 0xEB, OP_2BYTE|OP_MMX, MMXOP(por_r64_rm64), MMXOP(por_r64_rm64), false}, { 0xEC, OP_2BYTE|OP_MMX, MMXOP(paddsb_r64_rm64), MMXOP(paddsb_r64_rm64), false}, { 0xED, OP_2BYTE|OP_MMX, MMXOP(paddsw_r64_rm64), MMXOP(paddsw_r64_rm64), false}, { 0xEE, OP_2BYTE|OP_SSE, SSEOP(pmaxsw_r64_rm64), SSEOP(pmaxsw_r64_rm64), false}, { 0xEF, OP_2BYTE|OP_MMX, MMXOP(pxor_r64_rm64), MMXOP(pxor_r64_rm64), false}, { 0xF1, OP_2BYTE|OP_MMX, MMXOP(psllw_r64_rm64), MMXOP(psllw_r64_rm64), false}, { 0xF2, OP_2BYTE|OP_MMX, MMXOP(pslld_r64_rm64), MMXOP(pslld_r64_rm64), false}, { 0xF3, OP_2BYTE|OP_MMX, MMXOP(psllq_r64_rm64), MMXOP(psllq_r64_rm64), false}, { 0xF4, OP_2BYTE|OP_SSE, SSEOP(pmuludq_r64_rm64), SSEOP(pmuludq_r64_rm64), false}, { 0xF5, OP_2BYTE|OP_MMX, MMXOP(pmaddwd_r64_rm64), MMXOP(pmaddwd_r64_rm64), false}, { 0xF6, OP_2BYTE|OP_SSE, SSEOP(psadbw_r64_rm64), SSEOP(psadbw_r64_rm64), false}, { 0xf7, OP_2BYTE|OP_PENTIUM, PENTIUMOP(maskmovq_r64_r64), PENTIUMOP(maskmovq_r64_r64),false}, { 0xF8, OP_2BYTE|OP_MMX, MMXOP(psubb_r64_rm64), MMXOP(psubb_r64_rm64), false}, { 0xF9, OP_2BYTE|OP_MMX, MMXOP(psubw_r64_rm64), MMXOP(psubw_r64_rm64), false}, { 0xFA, OP_2BYTE|OP_MMX, MMXOP(psubd_r64_rm64), MMXOP(psubd_r64_rm64), false}, { 0xFB, OP_2BYTE|OP_SSE, SSEOP(psubq_r64_rm64), SSEOP(psubq_r64_rm64), false}, { 0xFC, OP_2BYTE|OP_MMX, MMXOP(paddb_r64_rm64), MMXOP(paddb_r64_rm64), false}, { 0xFD, OP_2BYTE|OP_MMX, MMXOP(paddw_r64_rm64), MMXOP(paddw_r64_rm64), false}, { 0xFE, OP_2BYTE|OP_MMX, MMXOP(paddd_r64_rm64), MMXOP(paddd_r64_rm64), false}, /* F3 0F ?? */ { 0x10, OP_3BYTEF3|OP_SSE, SSEOP(movss_r128_rm128), SSEOP(movss_r128_rm128), false}, { 0x11, OP_3BYTEF3|OP_SSE, SSEOP(movss_rm128_r128), SSEOP(movss_rm128_r128), false}, { 0x12, OP_3BYTEF3|OP_SSE, SSEOP(movsldup_r128_rm128), SSEOP(movsldup_r128_rm128), false}, { 0x16, OP_3BYTEF3|OP_SSE, SSEOP(movshdup_r128_rm128), SSEOP(movshdup_r128_rm128), false}, { 0x2A, OP_3BYTEF3|OP_SSE, SSEOP(cvtsi2ss_r128_rm32), SSEOP(cvtsi2ss_r128_rm32), false}, { 0x2C, OP_3BYTEF3|OP_SSE, SSEOP(cvttss2si_r32_r128m32), SSEOP(cvttss2si_r32_r128m32),false}, { 0x2D, OP_3BYTEF3|OP_SSE, SSEOP(cvtss2si_r32_r128m32), SSEOP(cvtss2si_r32_r128m32),false}, { 0x51, OP_3BYTEF3|OP_SSE, SSEOP(sqrtss_r128_r128m32), SSEOP(sqrtss_r128_r128m32), false}, { 0x52, OP_3BYTEF3|OP_SSE, SSEOP(rsqrtss_r128_r128m32), SSEOP(rsqrtss_r128_r128m32),false}, { 0x53, OP_3BYTEF3|OP_SSE, SSEOP(rcpss_r128_r128m32), SSEOP(rcpss_r128_r128m32), false}, { 0x58, OP_3BYTEF3|OP_SSE, SSEOP(addss), SSEOP(addss), false}, { 0x59, OP_3BYTEF3|OP_SSE, SSEOP(mulss), SSEOP(mulss), false}, { 0x5A, OP_3BYTEF3|OP_SSE, SSEOP(cvtss2sd_r128_r128m32), SSEOP(cvtss2sd_r128_r128m32),false}, { 0x5B, OP_3BYTEF3|OP_SSE, SSEOP(cvttps2dq_r128_rm128), SSEOP(cvttps2dq_r128_rm128),false}, { 0x5C, OP_3BYTEF3|OP_SSE, SSEOP(subss), SSEOP(subss), false}, { 0x5D, OP_3BYTEF3|OP_SSE, SSEOP(minss_r128_r128m32), SSEOP(minss_r128_r128m32), false}, { 0x5E, OP_3BYTEF3|OP_SSE, SSEOP(divss), SSEOP(divss), false}, { 0x5F, OP_3BYTEF3|OP_SSE, SSEOP(maxss_r128_r128m32), SSEOP(maxss_r128_r128m32), false}, { 0x6F, OP_3BYTEF3|OP_SSE, SSEOP(movdqu_r128_rm128), SSEOP(movdqu_r128_rm128), false}, { 0x70, OP_3BYTEF3|OP_SSE, SSEOP(pshufhw_r128_rm128_i8), SSEOP(pshufhw_r128_rm128_i8),false}, { 0x7E, OP_3BYTEF3|OP_SSE, SSEOP(movq_r128_r128m64), SSEOP(movq_r128_r128m64), false}, { 0x7F, OP_3BYTEF3|OP_SSE, SSEOP(movdqu_rm128_r128), SSEOP(movdqu_rm128_r128), false}, { 0xAE, OP_3BYTE66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xB8, OP_3BYTEF3|OP_PENTIUM, PENTIUMOP(popcnt_r16_rm16), PENTIUMOP(popcnt_r32_rm32), false}, { 0xBC, OP_3BYTEF3|OP_PENTIUM, PENTIUMOP(tzcnt_r16_rm16), PENTIUMOP(tzcnt_r32_rm32), false}, { 0xC2, OP_3BYTEF3|OP_SSE, SSEOP(cmpss_r128_r128m32_i8), SSEOP(cmpss_r128_r128m32_i8),false}, { 0xC7, OP_3BYTEF2|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xD6, OP_3BYTEF3|OP_SSE, SSEOP(movq2dq_r128_r64), SSEOP(movq2dq_r128_r64), false}, { 0xE6, OP_3BYTEF3|OP_SSE, SSEOP(cvtdq2pd_r128_r128m64), SSEOP(cvtdq2pd_r128_r128m64),false}, /* F2 0F ?? */ { 0x10, OP_3BYTEF2|OP_SSE, SSEOP(movsd_r128_r128m64), SSEOP(movsd_r128_r128m64), false}, { 0x11, OP_3BYTEF2|OP_SSE, SSEOP(movsd_r128m64_r128), SSEOP(movsd_r128m64_r128), false}, { 0x12, OP_3BYTEF2|OP_SSE, SSEOP(movddup_r128_r128m64), SSEOP(movddup_r128_r128m64),false}, { 0x2A, OP_3BYTEF2|OP_SSE, SSEOP(cvtsi2sd_r128_rm32), SSEOP(cvtsi2sd_r128_rm32), false}, { 0x2C, OP_3BYTEF2|OP_SSE, SSEOP(cvttsd2si_r32_r128m64), SSEOP(cvttsd2si_r32_r128m64),false}, { 0x2D, OP_3BYTEF2|OP_SSE, SSEOP(cvtsd2si_r32_r128m64), SSEOP(cvtsd2si_r32_r128m64),false}, { 0x51, OP_3BYTEF2|OP_SSE, SSEOP(sqrtsd_r128_r128m64), SSEOP(sqrtsd_r128_r128m64), false}, { 0x58, OP_3BYTEF2|OP_SSE, SSEOP(addsd_r128_r128m64), SSEOP(addsd_r128_r128m64), false}, { 0x59, OP_3BYTEF2|OP_SSE, SSEOP(mulsd_r128_r128m64), SSEOP(mulsd_r128_r128m64), false}, { 0x5A, OP_3BYTEF2|OP_SSE, SSEOP(cvtsd2ss_r128_r128m64), SSEOP(cvtsd2ss_r128_r128m64),false}, { 0x5C, OP_3BYTEF2|OP_SSE, SSEOP(subsd_r128_r128m64), SSEOP(subsd_r128_r128m64), false}, { 0x5D, OP_3BYTEF2|OP_SSE, SSEOP(minsd_r128_r128m64), SSEOP(minsd_r128_r128m64), false}, { 0x5E, OP_3BYTEF2|OP_SSE, SSEOP(divsd_r128_r128m64), SSEOP(divsd_r128_r128m64), false}, { 0x5F, OP_3BYTEF2|OP_SSE, SSEOP(maxsd_r128_r128m64), SSEOP(maxsd_r128_r128m64), false}, { 0x70, OP_3BYTEF2|OP_SSE, SSEOP(pshuflw_r128_rm128_i8), SSEOP(pshuflw_r128_rm128_i8),false}, { 0x7C, OP_3BYTEF2|OP_SSE, SSEOP(haddps_r128_rm128), SSEOP(haddps_r128_rm128), false}, { 0x7D, OP_3BYTEF2|OP_SSE, SSEOP(hsubps_r128_rm128), SSEOP(hsubps_r128_rm128), false}, { 0xC2, OP_3BYTEF2|OP_SSE, SSEOP(cmpsd_r128_r128m64_i8), SSEOP(cmpsd_r128_r128m64_i8),false}, { 0xD0, OP_3BYTEF2|OP_SSE, SSEOP(addsubps_r128_rm128), SSEOP(addsubps_r128_rm128), false}, { 0xD6, OP_3BYTEF2|OP_SSE, SSEOP(movdq2q_r64_r128), SSEOP(movdq2q_r64_r128), false}, { 0xE6, OP_3BYTEF2|OP_SSE, SSEOP(cvtpd2dq_r128_rm128), SSEOP(cvtpd2dq_r128_rm128), false}, { 0xF0, OP_3BYTEF2|OP_SSE, SSEOP(lddqu_r128_m128), SSEOP(lddqu_r128_m128), false}, /* 66 0F ?? */ { 0x10, OP_3BYTE66|OP_SSE, SSEOP(movupd_r128_rm128), SSEOP(movupd_r128_rm128), false}, { 0x11, OP_3BYTE66|OP_SSE, SSEOP(movupd_rm128_r128), SSEOP(movupd_rm128_r128), false}, { 0x12, OP_3BYTE66|OP_SSE, SSEOP(movlpd_r128_m64), SSEOP(movlpd_r128_m64), false}, { 0x13, OP_3BYTE66|OP_SSE, SSEOP(movlpd_m64_r128), SSEOP(movlpd_m64_r128), false}, { 0x14, OP_3BYTE66|OP_SSE, SSEOP(unpcklpd_r128_rm128), SSEOP(unpcklpd_r128_rm128), false}, { 0x15, OP_3BYTE66|OP_SSE, SSEOP(unpckhpd_r128_rm128), SSEOP(unpckhpd_r128_rm128), false}, { 0x16, OP_3BYTE66|OP_SSE, SSEOP(movhpd_r128_m64), SSEOP(movhpd_r128_m64), false}, { 0x17, OP_3BYTE66|OP_SSE, SSEOP(movhpd_m64_r128), SSEOP(movhpd_m64_r128), false}, { 0x28, OP_3BYTE66|OP_SSE, SSEOP(movapd_r128_rm128), SSEOP(movapd_r128_rm128), false}, { 0x29, OP_3BYTE66|OP_SSE, SSEOP(movapd_rm128_r128), SSEOP(movapd_rm128_r128), false}, { 0x2A, OP_3BYTE66|OP_SSE, SSEOP(cvtpi2pd_r128_rm64), SSEOP(cvtpi2pd_r128_rm64), false}, { 0x2B, OP_3BYTE66|OP_SSE, SSEOP(movntpd_m128_r128), SSEOP(movntpd_m128_r128), false}, { 0x2C, OP_3BYTE66|OP_SSE, SSEOP(cvttpd2pi_r64_rm128), SSEOP(cvttpd2pi_r64_rm128), false}, { 0x2D, OP_3BYTE66|OP_SSE, SSEOP(cvtpd2pi_r64_rm128), SSEOP(cvtpd2pi_r64_rm128), false}, { 0x2E, OP_3BYTE66|OP_SSE, SSEOP(ucomisd_r128_r128m64), SSEOP(ucomisd_r128_r128m64),false}, { 0x2F, OP_3BYTE66|OP_SSE, SSEOP(comisd_r128_r128m64), SSEOP(comisd_r128_r128m64), false}, { 0x50, OP_3BYTE66|OP_SSE, SSEOP(movmskpd_r32_r128), SSEOP(movmskpd_r32_r128), false}, { 0x51, OP_3BYTE66|OP_SSE, SSEOP(sqrtpd_r128_rm128), SSEOP(sqrtpd_r128_rm128), false}, { 0x54, OP_3BYTE66|OP_SSE, SSEOP(andpd_r128_rm128), SSEOP(andpd_r128_rm128), false}, { 0x55, OP_3BYTE66|OP_SSE, SSEOP(andnpd_r128_rm128), SSEOP(andnpd_r128_rm128), false}, { 0x56, OP_3BYTE66|OP_SSE, SSEOP(orpd_r128_rm128), SSEOP(orpd_r128_rm128), false}, { 0x57, OP_3BYTE66|OP_SSE, SSEOP(xorpd_r128_rm128), SSEOP(xorpd_r128_rm128), false}, { 0x58, OP_3BYTE66|OP_SSE, SSEOP(addpd_r128_rm128), SSEOP(addpd_r128_rm128), false}, { 0x59, OP_3BYTE66|OP_SSE, SSEOP(mulpd_r128_rm128), SSEOP(mulpd_r128_rm128), false}, { 0x5A, OP_3BYTE66|OP_SSE, SSEOP(cvtpd2ps_r128_rm128), SSEOP(cvtpd2ps_r128_rm128), false}, { 0x5B, OP_3BYTE66|OP_SSE, SSEOP(cvtps2dq_r128_rm128), SSEOP(cvtps2dq_r128_rm128), false}, { 0x5C, OP_3BYTE66|OP_SSE, SSEOP(subpd_r128_rm128), SSEOP(subpd_r128_rm128), false}, { 0x5D, OP_3BYTE66|OP_SSE, SSEOP(minpd_r128_rm128), SSEOP(minpd_r128_rm128), false}, { 0x5E, OP_3BYTE66|OP_SSE, SSEOP(divpd_r128_rm128), SSEOP(divpd_r128_rm128), false}, { 0x5F, OP_3BYTE66|OP_SSE, SSEOP(maxpd_r128_rm128), SSEOP(maxpd_r128_rm128), false}, { 0x60, OP_3BYTE66|OP_SSE, SSEOP(punpcklbw_r128_rm128), SSEOP(punpcklbw_r128_rm128),false}, { 0x61, OP_3BYTE66|OP_SSE, SSEOP(punpcklwd_r128_rm128), SSEOP(punpcklwd_r128_rm128),false}, { 0x62, OP_3BYTE66|OP_SSE, SSEOP(punpckldq_r128_rm128), SSEOP(punpckldq_r128_rm128),false}, { 0x63, OP_3BYTE66|OP_SSE, SSEOP(packsswb_r128_rm128), SSEOP(packsswb_r128_rm128), false}, { 0x64, OP_3BYTE66|OP_SSE, SSEOP(pcmpgtb_r128_rm128), SSEOP(pcmpgtb_r128_rm128), false}, { 0x65, OP_3BYTE66|OP_SSE, SSEOP(pcmpgtw_r128_rm128), SSEOP(pcmpgtw_r128_rm128), false}, { 0x66, OP_3BYTE66|OP_SSE, SSEOP(pcmpgtd_r128_rm128), SSEOP(pcmpgtd_r128_rm128), false}, { 0x67, OP_3BYTE66|OP_SSE, SSEOP(packuswb_r128_rm128), SSEOP(packuswb_r128_rm128), false}, { 0x68, OP_3BYTE66|OP_SSE, SSEOP(punpckhbw_r128_rm128), SSEOP(punpckhbw_r128_rm128),false}, { 0x69, OP_3BYTE66|OP_SSE, SSEOP(punpckhwd_r128_rm128), SSEOP(punpckhwd_r128_rm128),false}, { 0x6A, OP_3BYTE66|OP_SSE, SSEOP(unpckhdq_r128_rm128), SSEOP(unpckhdq_r128_rm128), false}, { 0x6B, OP_3BYTE66|OP_SSE, SSEOP(packssdw_r128_rm128), SSEOP(packssdw_r128_rm128), false}, { 0x6C, OP_3BYTE66|OP_SSE, SSEOP(punpcklqdq_r128_rm128), SSEOP(punpcklqdq_r128_rm128),false}, { 0x6D, OP_3BYTE66|OP_SSE, SSEOP(punpckhqdq_r128_rm128), SSEOP(punpckhqdq_r128_rm128),false}, { 0x6E, OP_3BYTE66|OP_SSE, SSEOP(movd_m128_rm32), SSEOP(movd_m128_rm32), false}, { 0x6F, OP_3BYTE66|OP_SSE, SSEOP(movdqa_m128_rm128), SSEOP(movdqa_m128_rm128), false}, { 0x70, OP_3BYTE66|OP_SSE, SSEOP(pshufd_r128_rm128_i8), SSEOP(pshufd_r128_rm128_i8),false}, { 0x71, OP_3BYTE66|OP_SSE, SSEOP(group_660f71), SSEOP(group_660f71), false}, { 0x72, OP_3BYTE66|OP_SSE, SSEOP(group_660f72), SSEOP(group_660f72), false}, { 0x73, OP_3BYTE66|OP_SSE, SSEOP(group_660f73), SSEOP(group_660f73), false}, { 0x74, OP_3BYTE66|OP_SSE, SSEOP(pcmpeqb_r128_rm128), SSEOP(pcmpeqb_r128_rm128), false}, { 0x75, OP_3BYTE66|OP_SSE, SSEOP(pcmpeqw_r128_rm128), SSEOP(pcmpeqw_r128_rm128), false}, { 0x76, OP_3BYTE66|OP_SSE, SSEOP(pcmpeqd_r128_rm128), SSEOP(pcmpeqd_r128_rm128), false}, { 0x7C, OP_3BYTE66|OP_SSE, SSEOP(haddpd_r128_rm128), SSEOP(haddpd_r128_rm128), false}, { 0x7D, OP_3BYTE66|OP_SSE, SSEOP(hsubpd_r128_rm128), SSEOP(hsubpd_r128_rm128), false}, { 0x7E, OP_3BYTE66|OP_SSE, SSEOP(movd_rm32_r128), SSEOP(movd_rm32_r128), false}, { 0x7F, OP_3BYTE66|OP_SSE, SSEOP(movdqa_rm128_r128), SSEOP(movdqa_rm128_r128), false}, { 0xC2, OP_3BYTE66|OP_SSE, SSEOP(cmppd_r128_rm128_i8), SSEOP(cmppd_r128_rm128_i8), false}, { 0xC4, OP_3BYTE66|OP_SSE, SSEOP(pinsrw_r128_r32m16_i8), SSEOP(pinsrw_r128_r32m16_i8),false}, { 0xC5, OP_3BYTE66|OP_SSE, SSEOP(pextrw_reg_r128_i8), SSEOP(pextrw_reg_r128_i8), false}, { 0xC6, OP_3BYTE66|OP_SSE, SSEOP(shufpd_r128_rm128_i8), SSEOP(shufpd_r128_rm128_i8),false}, { 0xC7, OP_3BYTE66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xD0, OP_3BYTE66|OP_SSE, SSEOP(addsubpd_r128_rm128), SSEOP(addsubpd_r128_rm128), false}, { 0xD1, OP_3BYTE66|OP_SSE, SSEOP(psrlw_r128_rm128), SSEOP(psrlw_r128_rm128), false}, { 0xD2, OP_3BYTE66|OP_SSE, SSEOP(psrld_r128_rm128), SSEOP(psrld_r128_rm128), false}, { 0xD3, OP_3BYTE66|OP_SSE, SSEOP(psrlq_r128_rm128), SSEOP(psrlq_r128_rm128), false}, { 0xD4, OP_3BYTE66|OP_SSE, SSEOP(paddq_r128_rm128), SSEOP(paddq_r128_rm128), false}, { 0xD5, OP_3BYTE66|OP_SSE, SSEOP(pmullw_r128_rm128), SSEOP(pmullw_r128_rm128), false}, { 0xD6, OP_3BYTE66|OP_SSE, SSEOP(movq_r128m64_r128), SSEOP(movq_r128m64_r128), false}, { 0xD7, OP_3BYTE66|OP_SSE, SSEOP(pmovmskb_r32_r128), SSEOP(pmovmskb_r32_r128), false}, { 0xD8, OP_3BYTE66|OP_SSE, SSEOP(psubusb_r128_rm128), SSEOP(psubusb_r128_rm128), false}, { 0xD9, OP_3BYTE66|OP_SSE, SSEOP(psubusw_r128_rm128), SSEOP(psubusw_r128_rm128), false}, { 0xDA, OP_3BYTE66|OP_SSE, SSEOP(pminub_r128_rm128), SSEOP(pminub_r128_rm128), false}, { 0xDB, OP_3BYTE66|OP_SSE, SSEOP(pand_r128_rm128), SSEOP(pand_r128_rm128), false}, { 0xDC, OP_3BYTE66|OP_SSE, SSEOP(paddusb_r128_rm128), SSEOP(paddusb_r128_rm128), false}, { 0xDD, OP_3BYTE66|OP_SSE, SSEOP(paddusw_r128_rm128), SSEOP(paddusw_r128_rm128), false}, { 0xDE, OP_3BYTE66|OP_SSE, SSEOP(pmaxub_r128_rm128), SSEOP(pmaxub_r128_rm128), false}, { 0xDF, OP_3BYTE66|OP_SSE, SSEOP(pandn_r128_rm128), SSEOP(pandn_r128_rm128), false}, { 0xE0, OP_3BYTE66|OP_SSE, SSEOP(pavgb_r128_rm128), SSEOP(pavgb_r128_rm128), false}, { 0xE1, OP_3BYTE66|OP_SSE, SSEOP(psraw_r128_rm128), SSEOP(psraw_r128_rm128), false}, { 0xE2, OP_3BYTE66|OP_SSE, SSEOP(psrad_r128_rm128), SSEOP(psrad_r128_rm128), false}, { 0xE3, OP_3BYTE66|OP_SSE, SSEOP(pavgw_r128_rm128), SSEOP(pavgw_r128_rm128), false}, { 0xE4, OP_3BYTE66|OP_SSE, SSEOP(pmulhuw_r128_rm128), SSEOP(pmulhuw_r128_rm128), false}, { 0xE5, OP_3BYTE66|OP_SSE, SSEOP(pmulhw_r128_rm128), SSEOP(pmulhw_r128_rm128), false}, { 0xE6, OP_3BYTE66|OP_SSE, SSEOP(cvttpd2dq_r128_rm128), SSEOP(cvttpd2dq_r128_rm128),false}, { 0xE7, OP_3BYTE66|OP_SSE, SSEOP(movntdq_m128_r128), SSEOP(movntdq_m128_r128), false}, { 0xE8, OP_3BYTE66|OP_SSE, SSEOP(psubsb_r128_rm128), SSEOP(psubsb_r128_rm128), false}, { 0xE9, OP_3BYTE66|OP_SSE, SSEOP(psubsw_r128_rm128), SSEOP(psubsw_r128_rm128), false}, { 0xEA, OP_3BYTE66|OP_SSE, SSEOP(pminsw_r128_rm128), SSEOP(pminsw_r128_rm128), false}, { 0xEB, OP_3BYTE66|OP_SSE, SSEOP(por_r128_rm128), SSEOP(por_r128_rm128), false}, { 0xEC, OP_3BYTE66|OP_SSE, SSEOP(paddsb_r128_rm128), SSEOP(paddsb_r128_rm128), false}, { 0xED, OP_3BYTE66|OP_SSE, SSEOP(paddsw_r128_rm128), SSEOP(paddsw_r128_rm128), false}, { 0xEE, OP_3BYTE66|OP_SSE, SSEOP(pmaxsw_r128_rm128), SSEOP(pmaxsw_r128_rm128), false}, { 0xEF, OP_3BYTE66|OP_SSE, SSEOP(pxor_r128_rm128), SSEOP(pxor_r128_rm128), false}, { 0xF1, OP_3BYTE66|OP_SSE, SSEOP(psllw_r128_rm128), SSEOP(psllw_r128_rm128), false}, { 0xF2, OP_3BYTE66|OP_SSE, SSEOP(pslld_r128_rm128), SSEOP(pslld_r128_rm128), false}, { 0xF3, OP_3BYTE66|OP_SSE, SSEOP(psllq_r128_rm128), SSEOP(psllq_r128_rm128), false}, { 0xF4, OP_3BYTE66|OP_SSE, SSEOP(pmuludq_r128_rm128), SSEOP(pmuludq_r128_rm128), false}, { 0xF5, OP_3BYTE66|OP_SSE, SSEOP(pmaddwd_r128_rm128), SSEOP(pmaddwd_r128_rm128), false}, { 0xF6, OP_3BYTE66|OP_SSE, SSEOP(psadbw_r128_rm128), SSEOP(psadbw_r128_rm128), false}, { 0xF7, OP_3BYTE66|OP_SSE, SSEOP(maskmovdqu_r128_r128), SSEOP(maskmovdqu_r128_r128),false}, { 0xF8, OP_3BYTE66|OP_SSE, SSEOP(psubb_r128_rm128), SSEOP(psubb_r128_rm128), false}, { 0xF9, OP_3BYTE66|OP_SSE, SSEOP(psubw_r128_rm128), SSEOP(psubw_r128_rm128), false}, { 0xFA, OP_3BYTE66|OP_SSE, SSEOP(psubd_r128_rm128), SSEOP(psubd_r128_rm128), false}, { 0xFB, OP_3BYTE66|OP_SSE, SSEOP(psubq_r128_rm128), SSEOP(psubq_r128_rm128), false}, { 0xFC, OP_3BYTE66|OP_SSE, SSEOP(paddb_r128_rm128), SSEOP(paddb_r128_rm128), false}, { 0xFD, OP_3BYTE66|OP_SSE, SSEOP(paddw_r128_rm128), SSEOP(paddw_r128_rm128), false}, { 0xFE, OP_3BYTE66|OP_SSE, SSEOP(paddd_r128_rm128), SSEOP(paddd_r128_rm128), false}, /* 0F 38 ?? */ { 0x00, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x01, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x02, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x03, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x04, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x05, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x06, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x07, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x08, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x09, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0A, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0B, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x1C, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x1D, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x1E, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF0, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF1, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF2, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF3, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF5, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF7, OP_3BYTE38|OP_SSE, I386OP(invalid), I386OP(invalid), false}, /* 0F 3A ?? */ { 0x0F, OP_3BYTE3A|OP_SSE, I386OP(invalid), I386OP(invalid), false}, /* 66 0F 38 ?? */ { 0x00, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x01, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x02, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x03, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x04, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x05, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x06, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x07, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x08, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x09, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0A, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0B, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0C, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0D, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0E, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0F, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x10, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x13, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x14, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x15, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x16, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x17, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x18, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x19, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x1A, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x1C, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x1D, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x1E, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x20, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x21, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x22, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x23, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x24, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x25, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x28, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x29, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x2A, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x2B, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x2C, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x2D, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x2E, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x2F, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x30, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x31, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x32, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x33, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x34, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x35, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x36, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x37, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x38, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x39, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x3A, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x3B, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x3C, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x3D, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x3E, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x3F, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x40, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x41, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x45, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x46, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x47, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x58, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x59, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x5A, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x78, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x79, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x80, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x81, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x82, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x8C, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x8E, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x90, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x91, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x92, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x93, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x96, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x97, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x98, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x99, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x9A, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x9B, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x9C, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x9D, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x9E, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x9F, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xA6, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xA7, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xA8, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xA9, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xAA, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xAB, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xAC, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xAD, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xAE, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xAF, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xB6, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xB7, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xB8, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xB9, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xBA, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xBB, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xBC, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xBD, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xBE, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xBF, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xDB, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xDC, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xDD, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xDE, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xDF, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF0, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF1, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF3, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF6, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF7, OP_4BYTE3866|OP_SSE, I386OP(invalid), I386OP(invalid), false}, /* F2 0F 38 ?? */ { 0xF0, OP_4BYTE38F2|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF1, OP_4BYTE38F2|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF3, OP_4BYTE38F2|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF5, OP_4BYTE38F2|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF6, OP_4BYTE38F2|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF7, OP_4BYTE38F2|OP_SSE, I386OP(invalid), I386OP(invalid), false}, /* F3 0F 38 ?? */ { 0xF3, OP_4BYTE38F3|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF5, OP_4BYTE38F3|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF6, OP_4BYTE38F3|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xF7, OP_4BYTE38F3|OP_SSE, I386OP(invalid), I386OP(invalid), false}, /* 66 0F 3A ?? */ { 0x00, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x01, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x02, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x04, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x05, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x06, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x08, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x09, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0A, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0B, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0C, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0D, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0E, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x0F, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x14, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x15, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x16, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x17, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x18, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x19, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x1D, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x20, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x21, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x22, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x38, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x39, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x40, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x41, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x42, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x44, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x46, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x4A, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x4B, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x4C, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x60, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x61, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x62, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0x63, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, { 0xDF, OP_4BYTE3A66|OP_SSE, I386OP(invalid), I386OP(invalid), false}, /* F2 0F 3A ?? */ { 0xF0, OP_4BYTE3AF2|OP_SSE, I386OP(invalid), I386OP(invalid), false} }; ================================================ FILE: vm86/mame/emu/cpu/i386/i386priv.h ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett #pragma once #ifndef __I386_H__ #define __I386_H__ //#include "i386.h" #include "../../../lib/softfloat/milieu.h" #include "../../../lib/softfloat/softfloat.h" #include "../vtlb.h" //#define DEBUG_MISSING_OPCODE #define I386OP(XX) i386_##XX #define I486OP(XX) i486_##XX #define PENTIUMOP(XX) pentium_##XX #define MMXOP(XX) mmx_##XX #define SSEOP(XX) sse_##XX extern int i386_dasm_one(char *buffer, UINT32 pc, const UINT8 *oprom, int mode); extern int x87_mf_fault(); enum SREGS { ES, CS, SS, DS, FS, GS }; enum BREGS { AL = NATIVE_ENDIAN_VALUE_LE_BE(0,3), AH = NATIVE_ENDIAN_VALUE_LE_BE(1,2), CL = NATIVE_ENDIAN_VALUE_LE_BE(4,7), CH = NATIVE_ENDIAN_VALUE_LE_BE(5,6), DL = NATIVE_ENDIAN_VALUE_LE_BE(8,11), DH = NATIVE_ENDIAN_VALUE_LE_BE(9,10), BL = NATIVE_ENDIAN_VALUE_LE_BE(12,15), BH = NATIVE_ENDIAN_VALUE_LE_BE(13,14) }; enum WREGS { AX = NATIVE_ENDIAN_VALUE_LE_BE(0,1), CX = NATIVE_ENDIAN_VALUE_LE_BE(2,3), DX = NATIVE_ENDIAN_VALUE_LE_BE(4,5), BX = NATIVE_ENDIAN_VALUE_LE_BE(6,7), SP = NATIVE_ENDIAN_VALUE_LE_BE(8,9), BP = NATIVE_ENDIAN_VALUE_LE_BE(10,11), SI = NATIVE_ENDIAN_VALUE_LE_BE(12,13), DI = NATIVE_ENDIAN_VALUE_LE_BE(14,15) }; enum DREGS { EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI }; enum { I386_PC = 0, /* 8-bit registers */ I386_AL, I386_AH, I386_BL, I386_BH, I386_CL, I386_CH, I386_DL, I386_DH, /* 16-bit registers */ I386_AX, I386_BX, I386_CX, I386_DX, I386_BP, I386_SP, I386_SI, I386_DI, I386_IP, /* 32-bit registers */ I386_EAX, I386_ECX, I386_EDX, I386_EBX, I386_EBP, I386_ESP, I386_ESI, I386_EDI, I386_EIP, /* segment registers */ I386_CS, I386_CS_BASE, I386_CS_LIMIT, I386_CS_FLAGS, I386_SS, I386_SS_BASE, I386_SS_LIMIT, I386_SS_FLAGS, I386_DS, I386_DS_BASE, I386_DS_LIMIT, I386_DS_FLAGS, I386_ES, I386_ES_BASE, I386_ES_LIMIT, I386_ES_FLAGS, I386_FS, I386_FS_BASE, I386_FS_LIMIT, I386_FS_FLAGS, I386_GS, I386_GS_BASE, I386_GS_LIMIT, I386_GS_FLAGS, /* other */ I386_EFLAGS, I386_CR0, I386_CR1, I386_CR2, I386_CR3, I386_CR4, I386_DR0, I386_DR1, I386_DR2, I386_DR3, I386_DR4, I386_DR5, I386_DR6, I386_DR7, I386_TR6, I386_TR7, I386_GDTR_BASE, I386_GDTR_LIMIT, I386_IDTR_BASE, I386_IDTR_LIMIT, I386_TR, I386_TR_BASE, I386_TR_LIMIT, I386_TR_FLAGS, I386_LDTR, I386_LDTR_BASE, I386_LDTR_LIMIT, I386_LDTR_FLAGS, I386_CPL, X87_CTRL, X87_STATUS, X87_TAG, X87_ST0, X87_ST1, X87_ST2, X87_ST3, X87_ST4, X87_ST5, X87_ST6, X87_ST7, SSE_XMM0, SSE_XMM1, SSE_XMM2, SSE_XMM3, SSE_XMM4, SSE_XMM5, SSE_XMM6, SSE_XMM7 }; enum { /* mmx registers aliased to x87 ones */ MMX_MM0=X87_ST0, MMX_MM1=X87_ST1, MMX_MM2=X87_ST2, MMX_MM3=X87_ST3, MMX_MM4=X87_ST4, MMX_MM5=X87_ST5, MMX_MM6=X87_ST6, MMX_MM7=X87_ST7 }; enum smram { SMRAM_SMBASE = 0xF8, SMRAM_SMREV = 0xFC, SMRAM_IORSRT = 0x100, SMRAM_AHALT = 0x102, SMRAM_IOEDI = 0x104, SMRAM_IOECX = 0x108, SMRAM_IOESI = 0x10C, SMRAM_ES = 0x1A8, SMRAM_CS = 0x1AC, SMRAM_SS = 0x1B0, SMRAM_DS = 0x1B4, SMRAM_FS = 0x1B8, SMRAM_GS = 0x1BC, SMRAM_LDTR = 0x1C0, SMRAM_TR = 0x1C4, SMRAM_DR7 = 0x1C8, SMRAM_DR6 = 0x1CC, SMRAM_EAX = 0x1D0, SMRAM_ECX = 0x1D4, SMRAM_EDX = 0x1D8, SMRAM_EBX = 0x1DC, SMRAM_ESP = 0x1E0, SMRAM_EBP = 0x1E4, SMRAM_ESI = 0x1E8, SMRAM_EDI = 0x1EC, SMRAM_EIP = 0x1F0, SMRAM_EFLAGS = 0x1F4, SMRAM_CR3 = 0x1F8, SMRAM_CR0 = 0x1FC, }; enum smram_intel_p5 { SMRAM_IP5_IOEIP = 0x110, SMRAM_IP5_CR4 = 0x128, SMRAM_IP5_ESLIM = 0x130, SMRAM_IP5_ESBASE = 0x134, SMRAM_IP5_ESACC = 0x138, SMRAM_IP5_CSLIM = 0x13C, SMRAM_IP5_CSBASE = 0x140, SMRAM_IP5_CSACC = 0x144, SMRAM_IP5_SSLIM = 0x148, SMRAM_IP5_SSBASE = 0x14C, SMRAM_IP5_SSACC = 0x150, SMRAM_IP5_DSLIM = 0x154, SMRAM_IP5_DSBASE = 0x158, SMRAM_IP5_DSACC = 0x15C, SMRAM_IP5_FSLIM = 0x160, SMRAM_IP5_FSBASE = 0x164, SMRAM_IP5_FSACC = 0x168, SMRAM_IP5_GSLIM = 0x16C, SMRAM_IP5_GSBASE = 0x170, SMRAM_IP5_GSACC = 0x174, SMRAM_IP5_LDTLIM = 0x178, SMRAM_IP5_LDTBASE = 0x17C, SMRAM_IP5_LDTACC = 0x180, SMRAM_IP5_GDTLIM = 0x184, SMRAM_IP5_GDTBASE = 0x188, SMRAM_IP5_GDTACC = 0x18C, SMRAM_IP5_IDTLIM = 0x190, SMRAM_IP5_IDTBASE = 0x194, SMRAM_IP5_IDTACC = 0x198, SMRAM_IP5_TRLIM = 0x19C, SMRAM_IP5_TRBASE = 0x1A0, SMRAM_IP5_TRACC = 0x1A4, }; /* Protected mode exceptions */ #define FAULT_UD 6 // Invalid Opcode #define FAULT_NM 7 // Coprocessor not available #define FAULT_DF 8 // Double Fault #define FAULT_TS 10 // Invalid TSS #define FAULT_NP 11 // Segment or Gate not present #define FAULT_SS 12 // Stack fault #define FAULT_GP 13 // General Protection Fault #define FAULT_PF 14 // Page Fault #define FAULT_MF 16 // Match (Coprocessor) Fault /* MXCSR Control and Status Register */ #define MXCSR_IE (1<<0) // Invalid Operation Flag #define MXCSR_DE (1<<1) // Denormal Flag #define MXCSR_ZE (1<<2) // Divide-by-Zero Flag #define MXCSR_OE (1<<3) // Overflow Flag #define MXCSR_UE (1<<4) // Underflow Flag #define MXCSR_PE (1<<5) // Precision Flag #define MXCSR_DAZ (1<<6) // Denormals Are Zeros #define MXCSR_IM (1<<7) // Invalid Operation Mask #define MXCSR_DM (1<<8) // Denormal Operation Mask #define MXCSR_ZM (1<<9) // Divide-by-Zero Mask #define MXCSR_OM (1<<10) // Overflow Mask #define MXCSR_UM (1<<11) // Underflow Mask #define MXCSR_PM (1<<12) // Precision Mask #define MXCSR_RC (3<<13) // Rounding Control #define MXCSR_FZ (1<<15) // Flush to Zero struct I386_SREG { UINT16 selector; UINT16 flags; UINT32 base; UINT32 limit; int d; // Operand size bool valid; }; struct I386_CALL_GATE { UINT16 segment; UINT16 selector; UINT32 offset; UINT8 ar; // access rights UINT8 dpl; UINT8 dword_count; UINT8 present; }; struct I386_SYS_TABLE { UINT32 base; UINT16 limit; }; struct I386_SEG_DESC { UINT16 segment; UINT16 flags; UINT32 base; UINT32 limit; }; union I386_GPR { UINT32 d[8]; UINT16 w[16]; UINT8 b[32]; }; union MMX_REG { UINT32 d[2]; INT32 i[2]; UINT16 w[4]; INT16 s[4]; UINT8 b[8]; INT8 c[8]; float f[2]; UINT64 q; INT64 l; }; union XMM_REG { UINT8 b[16]; UINT16 w[8]; UINT32 d[4]; UINT64 q[2]; INT8 c[16]; INT16 s[8]; INT32 i[4]; INT64 l[2]; float f[4]; double f64[2]; }; //struct i386_state //{ I386_GPR m_reg; I386_SREG m_sreg[6]; UINT32 m_eip; UINT32 m_pc; UINT32 m_prev_eip; UINT32 m_eflags; UINT32 m_eflags_mask; UINT8 m_CF; UINT8 m_DF; UINT8 m_SF; UINT8 m_OF; UINT8 m_ZF; UINT8 m_PF; UINT8 m_AF; UINT8 m_IF; UINT8 m_TF; UINT8 m_IOP1; UINT8 m_IOP2; UINT8 m_NT; UINT8 m_RF; UINT8 m_VM; UINT8 m_AC; UINT8 m_VIF; UINT8 m_VIP; UINT8 m_ID; UINT8 m_CPL; // current privilege level UINT8 m_performed_intersegment_jump; UINT8 m_delayed_interrupt_enable; UINT32 m_cr[5]; // Control registers UINT32 m_dr[8]; // Debug registers UINT32 m_tr[8]; // Test registers I386_SYS_TABLE m_gdtr; // Global Descriptor Table Register I386_SYS_TABLE m_idtr; // Interrupt Descriptor Table Register I386_SEG_DESC m_task; // Task register I386_SEG_DESC m_ldtr; // Local Descriptor Table Register UINT8 m_ext; // external interrupt int m_halted; int m_operand_size; int m_xmm_operand_size; int m_address_size; int m_operand_prefix; int m_address_prefix; int m_segment_prefix; int m_segment_override; int m_cycles; int m_base_cycles; UINT8 m_opcode; UINT8 m_irq_state; UINT32 m_a20_mask; int m_cpuid_max_input_value_eax; UINT32 m_cpuid_id0, m_cpuid_id1, m_cpuid_id2; UINT32 m_cpu_version; UINT32 m_feature_flags; UINT64 m_tsc; UINT64 m_perfctr[2]; // FPU floatx80 m_x87_reg[8]; UINT16 m_x87_cw; UINT16 m_x87_sw; UINT16 m_x87_tw; UINT16 m_x87_ds; UINT64 m_x87_data_ptr; UINT16 m_x87_cs; UINT64 m_x87_inst_ptr; UINT16 m_x87_opcode; void (*m_opcode_table_x87_d8[256])(UINT8 modrm); void (*m_opcode_table_x87_d9[256])(UINT8 modrm); void (*m_opcode_table_x87_da[256])(UINT8 modrm); void (*m_opcode_table_x87_db[256])(UINT8 modrm); void (*m_opcode_table_x87_dc[256])(UINT8 modrm); void (*m_opcode_table_x87_dd[256])(UINT8 modrm); void (*m_opcode_table_x87_de[256])(UINT8 modrm); void (*m_opcode_table_x87_df[256])(UINT8 modrm); // SSE XMM_REG m_sse_reg[8]; UINT32 m_mxcsr; void (*m_opcode_table1_16[256])(); void (*m_opcode_table1_32[256])(); void (*m_opcode_table2_16[256])(); void (*m_opcode_table2_32[256])(); void (*m_opcode_table338_16[256])(); void (*m_opcode_table338_32[256])(); void (*m_opcode_table33a_16[256])(); void (*m_opcode_table33a_32[256])(); void (*m_opcode_table366_16[256])(); void (*m_opcode_table366_32[256])(); void (*m_opcode_table3f2_16[256])(); void (*m_opcode_table3f2_32[256])(); void (*m_opcode_table3f3_16[256])(); void (*m_opcode_table3f3_32[256])(); void (*m_opcode_table46638_16[256])(); void (*m_opcode_table46638_32[256])(); void (*m_opcode_table4f238_16[256])(); void (*m_opcode_table4f238_32[256])(); void (*m_opcode_table4f338_16[256])(); void (*m_opcode_table4f338_32[256])(); void (*m_opcode_table4663a_16[256])(); void (*m_opcode_table4663a_32[256])(); void (*m_opcode_table4f23a_16[256])(); void (*m_opcode_table4f23a_32[256])(); bool m_lock_table[2][256]; UINT8 *m_cycle_table_pm; UINT8 *m_cycle_table_rm; vtlb_state *m_vtlb; bool m_smm; bool m_smi; bool m_smi_latched; bool m_nmi_masked; bool m_nmi_latched; UINT32 m_smbase; // devcb_resolved_write_line m_smiact; bool m_lock; // bytes in current opcode, debug only #ifdef DEBUG_MISSING_OPCODE UINT8 m_opcode_bytes[16]; UINT32 m_opcode_pc; int m_opcode_bytes_length; #endif //}; extern int i386_parity_table[256]; static int i386_limit_check(int seg, UINT32 offset); #define FAULT_THROW(fault,error) { throw (UINT64)(fault | (UINT64)error << 32); } #define PF_THROW(error) { m_cr[2] = address; FAULT_THROW(FAULT_PF,error); } #define PROTECTED_MODE (m_cr[0] & 0x1) #define STACK_32BIT (m_sreg[SS].d) #define V8086_MODE (m_VM) #define NESTED_TASK (m_NT) #define WP (m_cr[0] & 0x10000) #define SetOF_Add32(r,s,d) (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x80000000) ? 1: 0) #define SetOF_Add16(r,s,d) (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x8000) ? 1 : 0) #define SetOF_Add8(r,s,d) (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x80) ? 1 : 0) #define SetOF_Sub32(r,s,d) (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x80000000) ? 1 : 0) #define SetOF_Sub16(r,s,d) (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x8000) ? 1 : 0) #define SetOF_Sub8(r,s,d) (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x80) ? 1 : 0) #define SetCF8(x) {m_CF = ((x) & 0x100) ? 1 : 0; } #define SetCF16(x) {m_CF = ((x) & 0x10000) ? 1 : 0; } #define SetCF32(x) {m_CF = ((x) & (((UINT64)1) << 32)) ? 1 : 0; } #define SetSF(x) (m_SF = (x)) #define SetZF(x) (m_ZF = (x)) #define SetAF(x,y,z) (m_AF = (((x) ^ ((y) ^ (z))) & 0x10) ? 1 : 0) #define SetPF(x) (m_PF = i386_parity_table[(x) & 0xFF]) #define SetSZPF8(x) {m_ZF = ((UINT8)(x)==0); m_SF = ((x)&0x80) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; } #define SetSZPF16(x) {m_ZF = ((UINT16)(x)==0); m_SF = ((x)&0x8000) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; } #define SetSZPF32(x) {m_ZF = ((UINT32)(x)==0); m_SF = ((x)&0x80000000) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; } #define MMX(n) (*((MMX_REG *)(&m_x87_reg[(n)].low))) #define XMM(n) m_sse_reg[(n)] /***********************************************************************************/ struct MODRM_TABLE { struct { int b; int w; int d; } reg; struct { int b; int w; int d; } rm; }; extern MODRM_TABLE i386_MODRM_table[256]; #define REG8(x) (m_reg.b[x]) #define REG16(x) (m_reg.w[x]) #define REG32(x) (m_reg.d[x]) #define LOAD_REG8(x) (REG8(i386_MODRM_table[x].reg.b)) #define LOAD_REG16(x) (REG16(i386_MODRM_table[x].reg.w)) #define LOAD_REG32(x) (REG32(i386_MODRM_table[x].reg.d)) #define LOAD_RM8(x) (REG8(i386_MODRM_table[x].rm.b)) #define LOAD_RM16(x) (REG16(i386_MODRM_table[x].rm.w)) #define LOAD_RM32(x) (REG32(i386_MODRM_table[x].rm.d)) #define STORE_REG8(x, value) (REG8(i386_MODRM_table[x].reg.b) = value) #define STORE_REG16(x, value) (REG16(i386_MODRM_table[x].reg.w) = value) #define STORE_REG32(x, value) (REG32(i386_MODRM_table[x].reg.d) = value) #define STORE_RM8(x, value) (REG8(i386_MODRM_table[x].rm.b) = value) #define STORE_RM16(x, value) (REG16(i386_MODRM_table[x].rm.w) = value) #define STORE_RM32(x, value) (REG32(i386_MODRM_table[x].rm.d) = value) #define SWITCH_ENDIAN_32(x) (((((x) << 24) & (0xff << 24)) | (((x) << 8) & (0xff << 16)) | (((x) >> 8) & (0xff << 8)) | (((x) >> 24) & (0xff << 0)))) /***********************************************************************************/ // UINT get_segment_descriptor_wine(int sreg); // INLINE UINT32 i386_translate(int segment, UINT32 ip, int rwn) { // TODO: segment limit access size, execution permission, handle exception thrown from exception handler if(PROTECTED_MODE && !V8086_MODE && (rwn != -1)) { if(!(m_sreg[segment].valid)) FAULT_THROW((segment==SS)?FAULT_SS:FAULT_GP, 0); if(i386_limit_check(segment, ip)) FAULT_THROW((segment==SS)?FAULT_SS:FAULT_GP, 0); if((rwn == 0) && ((m_sreg[segment].flags & 8) && !(m_sreg[segment].flags & 2))) FAULT_THROW(FAULT_GP, 0); if((rwn == 1) && ((m_sreg[segment].flags & 8) || !(m_sreg[segment].flags & 2))) FAULT_THROW(FAULT_GP, 0); } // //return get_segment_descriptor_wine(segment) + ip; // return m_sreg[segment].base + ip; } #define VTLB_FLAG_DIRTY 0x100 INLINE vtlb_entry get_permissions(UINT32 pte, int wp) { vtlb_entry ret = VTLB_READ_ALLOWED | ((pte & 4) ? VTLB_USER_READ_ALLOWED : 0); if(!wp) ret |= VTLB_WRITE_ALLOWED; if(pte & 2) ret |= VTLB_WRITE_ALLOWED | ((pte & 4) ? VTLB_USER_WRITE_ALLOWED : 0); return ret; } static int i386_translate_address(int intention, offs_t *address, vtlb_entry *entry) { UINT32 a = *address; UINT32 pdbr = m_cr[3] & 0xfffff000; UINT32 directory = (a >> 22) & 0x3ff; UINT32 table = (a >> 12) & 0x3ff; vtlb_entry perm = 0; int ret = FALSE; bool user = (intention & TRANSLATE_USER_MASK) ? true : false; bool write = (intention & TRANSLATE_WRITE) ? true : false; bool debug = (intention & TRANSLATE_DEBUG_MASK) ? true : false; if(!(m_cr[0] & 0x80000000)) { if(entry) *entry = 0x77; return TRUE; } UINT32 page_dir = read_dword(pdbr + directory * 4); if(page_dir & 1) { if ((page_dir & 0x80) && (m_cr[4] & 0x10)) { a = (page_dir & 0xffc00000) | (a & 0x003fffff); if(debug) { *address = a; return TRUE; } perm = get_permissions(page_dir, WP); if(write && (!(perm & VTLB_WRITE_ALLOWED) || (user && !(perm & VTLB_USER_WRITE_ALLOWED)))) ret = FALSE; else if(user && !(perm & VTLB_USER_READ_ALLOWED)) ret = FALSE; else { if(write) perm |= VTLB_FLAG_DIRTY; if(!(page_dir & 0x40) && write) write_dword(pdbr + directory * 4, page_dir | 0x60); else if(!(page_dir & 0x20)) write_dword(pdbr + directory * 4, page_dir | 0x20); ret = TRUE; } } else { UINT32 page_entry = read_dword((page_dir & 0xfffff000) + (table * 4)); if(!(page_entry & 1)) ret = FALSE; else { a = (page_entry & 0xfffff000) | (a & 0xfff); if(debug) { *address = a; return TRUE; } perm = get_permissions(page_entry, WP); if(write && (!(perm & VTLB_WRITE_ALLOWED) || (user && !(perm & VTLB_USER_WRITE_ALLOWED)))) ret = FALSE; else if(user && !(perm & VTLB_USER_READ_ALLOWED)) ret = FALSE; else { if(write) perm |= VTLB_FLAG_DIRTY; if(!(page_dir & 0x20)) write_dword(pdbr + directory * 4, page_dir | 0x20); if(!(page_entry & 0x40) && write) write_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x60); else if(!(page_entry & 0x20)) write_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x20); ret = TRUE; } } } } else ret = FALSE; if(entry) *entry = perm; if(ret) *address = a; return ret; } //#define TEST_TLB INLINE int translate_address(int pl, int type, UINT32 *address, UINT32 *error) { #ifdef PAGING if(!(m_cr[0] & 0x80000000)) // Some (very few) old OS's won't work with this return TRUE; const vtlb_entry *table = vtlb_table(m_vtlb); UINT32 index = *address >> 12; vtlb_entry entry = table[index]; if(type == TRANSLATE_FETCH) type = TRANSLATE_READ; if(pl == 3) type |= TRANSLATE_USER_MASK; #ifdef TEST_TLB UINT32 test_addr = *address; #endif if(!(entry & VTLB_FLAG_VALID) || ((type & TRANSLATE_WRITE) && !(entry & VTLB_FLAG_DIRTY))) { if(!i386_translate_address(type, address, &entry)) { *error = ((type & TRANSLATE_WRITE) ? 2 : 0) | ((m_CPL == 3) ? 4 : 0); if(entry) *error |= 1; return FALSE; } vtlb_dynload(m_vtlb, index, *address, entry); return TRUE; } if(!(entry & (1 << type))) { *error = ((type & TRANSLATE_WRITE) ? 2 : 0) | ((m_CPL == 3) ? 4 : 0) | 1; return FALSE; } *address = (entry & 0xfffff000) | (*address & 0xfff); #ifdef TEST_TLB int test_ret = i386_translate_address(type | TRANSLATE_DEBUG_MASK, &test_addr, NULL); if(!test_ret || (test_addr != *address)) logerror("TLB-PTE mismatch! %06X %06X %06x\n", *address, test_addr, m_pc); #endif #endif return TRUE; } INLINE void CHANGE_PC(UINT32 pc) { m_pc = i386_translate(CS, pc, -1 ); } INLINE void NEAR_BRANCH(INT32 offs) { /* TODO: limit */ m_eip += offs; m_pc += offs; } INLINE UINT8 FETCH() { UINT8 value; UINT32 address = m_pc, error; if(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error)) PF_THROW(error); value = read_decrypted_byte(address & m_a20_mask); #ifdef DEBUG_MISSING_OPCODE m_opcode_bytes[m_opcode_bytes_length] = value; m_opcode_bytes_length = (m_opcode_bytes_length + 1) & 15; #endif m_eip++; m_pc++; return value; } INLINE UINT16 FETCH16() { UINT16 value; UINT32 address = m_pc, error; if( address & 0x1 ) { /* Unaligned read */ value = (FETCH() << 0); value |= (FETCH() << 8); } else { if(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_decrypted_word(address); m_eip += 2; m_pc += 2; } return value; } INLINE UINT32 FETCH32() { UINT32 value; UINT32 address = m_pc, error; if( m_pc & 0x3 ) { /* Unaligned read */ value = (FETCH() << 0); value |= (FETCH() << 8); value |= (FETCH() << 16); value |= (FETCH() << 24); } else { if(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_decrypted_dword(address); m_eip += 4; m_pc += 4; } return value; } INLINE UINT8 READ8(UINT32 ea) { UINT32 address = ea, error; if(!translate_address(m_CPL,TRANSLATE_READ,&address, &error)) PF_THROW(error); address &= m_a20_mask; return read_byte(address); } INLINE UINT16 READ16(UINT32 ea) { UINT16 value; UINT32 address = ea, error; if( ea & 0x1 ) { /* Unaligned read */ value = (READ8( address+0 ) << 0); value |= (READ8( address+1 ) << 8); } else { if(!translate_address(m_CPL,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_word( address ); } return value; } INLINE UINT32 READ32(UINT32 ea) { UINT32 value; UINT32 address = ea, error; if( ea & 0x3 ) { /* Unaligned read */ value = (READ8( address+0 ) << 0); value |= (READ8( address+1 ) << 8); value |= (READ8( address+2 ) << 16), value |= (READ8( address+3 ) << 24); } else { if(!translate_address(m_CPL,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_dword( address ); } return value; } INLINE UINT64 READ64(UINT32 ea) { UINT64 value; UINT32 address = ea, error; if( ea & 0x7 ) { /* Unaligned read */ value = (((UINT64) READ8( address+0 )) << 0); value |= (((UINT64) READ8( address+1 )) << 8); value |= (((UINT64) READ8( address+2 )) << 16); value |= (((UINT64) READ8( address+3 )) << 24); value |= (((UINT64) READ8( address+4 )) << 32); value |= (((UINT64) READ8( address+5 )) << 40); value |= (((UINT64) READ8( address+6 )) << 48); value |= (((UINT64) READ8( address+7 )) << 56); } else { if(!translate_address(m_CPL,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = (((UINT64) read_dword( address+0 )) << 0); value |= (((UINT64) read_dword( address+4 )) << 32); } return value; } INLINE UINT8 READ8PL0(UINT32 ea) { UINT32 address = ea, error; if(!translate_address(0,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; return read_byte(address); } INLINE UINT16 READ16PL0(UINT32 ea) { UINT16 value; UINT32 address = ea, error; if( ea & 0x1 ) { /* Unaligned read */ value = (READ8PL0( address+0 ) << 0); value |= (READ8PL0( address+1 ) << 8); } else { if(!translate_address(0,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_word( address ); } return value; } INLINE UINT32 READ32PL0(UINT32 ea) { UINT32 value; UINT32 address = ea, error; if( ea & 0x3 ) { /* Unaligned read */ value = (READ8PL0( address+0 ) << 0); value |= (READ8PL0( address+1 ) << 8); value |= (READ8PL0( address+2 ) << 16); value |= (READ8PL0( address+3 ) << 24); } else { if(!translate_address(0,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_dword( address ); } return value; } INLINE void WRITE_TEST(UINT32 ea) { UINT32 address = ea, error; if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); } INLINE void WRITE8(UINT32 ea, UINT8 value) { UINT32 address = ea, error; if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); address &= m_a20_mask; write_byte(address, value); } INLINE void WRITE16(UINT32 ea, UINT16 value) { UINT32 address = ea, error; if( ea & 0x1 ) { /* Unaligned write */ WRITE8( address+0, value & 0xff ); WRITE8( address+1, (value >> 8) & 0xff ); } else { if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); address &= m_a20_mask; write_word(address, value); } } INLINE void WRITE32(UINT32 ea, UINT32 value) { UINT32 address = ea, error; if( ea & 0x3 ) { /* Unaligned write */ WRITE8( address+0, value & 0xff ); WRITE8( address+1, (value >> 8) & 0xff ); WRITE8( address+2, (value >> 16) & 0xff ); WRITE8( address+3, (value >> 24) & 0xff ); } else { if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); ea &= m_a20_mask; write_dword(address, value); } } INLINE void WRITE64(UINT32 ea, UINT64 value) { UINT32 address = ea, error; if( ea & 0x7 ) { /* Unaligned write */ WRITE8( address+0, value & 0xff ); WRITE8( address+1, (value >> 8) & 0xff ); WRITE8( address+2, (value >> 16) & 0xff ); WRITE8( address+3, (value >> 24) & 0xff ); WRITE8( address+4, (value >> 32) & 0xff ); WRITE8( address+5, (value >> 40) & 0xff ); WRITE8( address+6, (value >> 48) & 0xff ); WRITE8( address+7, (value >> 56) & 0xff ); } else { if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); ea &= m_a20_mask; write_dword(address+0, value & 0xffffffff); write_dword(address+4, (value >> 32) & 0xffffffff); } } /***********************************************************************************/ INLINE UINT8 OR8(UINT8 dst, UINT8 src) { UINT8 res = dst | src; m_CF = m_OF = 0; SetSZPF8(res); return res; } INLINE UINT16 OR16(UINT16 dst, UINT16 src) { UINT16 res = dst | src; m_CF = m_OF = 0; SetSZPF16(res); return res; } INLINE UINT32 OR32(UINT32 dst, UINT32 src) { UINT32 res = dst | src; m_CF = m_OF = 0; SetSZPF32(res); return res; } INLINE UINT8 AND8(UINT8 dst, UINT8 src) { UINT8 res = dst & src; m_CF = m_OF = 0; SetSZPF8(res); return res; } INLINE UINT16 AND16(UINT16 dst, UINT16 src) { UINT16 res = dst & src; m_CF = m_OF = 0; SetSZPF16(res); return res; } INLINE UINT32 AND32(UINT32 dst, UINT32 src) { UINT32 res = dst & src; m_CF = m_OF = 0; SetSZPF32(res); return res; } INLINE UINT8 XOR8(UINT8 dst, UINT8 src) { UINT8 res = dst ^ src; m_CF = m_OF = 0; SetSZPF8(res); return res; } INLINE UINT16 XOR16(UINT16 dst, UINT16 src) { UINT16 res = dst ^ src; m_CF = m_OF = 0; SetSZPF16(res); return res; } INLINE UINT32 XOR32(UINT32 dst, UINT32 src) { UINT32 res = dst ^ src; m_CF = m_OF = 0; SetSZPF32(res); return res; } #define SUB8(dst, src) SBB8(dst, src, 0) INLINE UINT8 SBB8(UINT8 dst, UINT8 src, UINT8 b) { UINT16 res = (UINT16)dst - (UINT16)src - (UINT8)b; SetCF8(res); SetOF_Sub8(res,src,dst); SetAF(res,src,dst); SetSZPF8(res); return (UINT8)res; } #define SUB16(dst, src) SBB16(dst, src, 0) INLINE UINT16 SBB16(UINT16 dst, UINT16 src, UINT16 b) { UINT32 res = (UINT32)dst - (UINT32)src - (UINT32)b; SetCF16(res); SetOF_Sub16(res,src,dst); SetAF(res,src,dst); SetSZPF16(res); return (UINT16)res; } #define SUB32(dst, src) SBB32(dst, src, 0) INLINE UINT32 SBB32(UINT32 dst, UINT32 src, UINT32 b) { UINT64 res = (UINT64)dst - (UINT64)src - (UINT64) b; SetCF32(res); SetOF_Sub32(res,src,dst); SetAF(res,src,dst); SetSZPF32(res); return (UINT32)res; } #define ADD8(dst, src) ADC8(dst, src, 0) INLINE UINT8 ADC8(UINT8 dst, UINT8 src, UINT8 c) { UINT16 res = (UINT16)dst + (UINT16)src + (UINT16)c; SetCF8(res); SetOF_Add8(res,src,dst); SetAF(res,src,dst); SetSZPF8(res); return (UINT8)res; } #define ADD16(dst, src) ADC16(dst, src, 0) INLINE UINT16 ADC16(UINT16 dst, UINT16 src, UINT8 c) { UINT32 res = (UINT32)dst + (UINT32)src + (UINT32)c; SetCF16(res); SetOF_Add16(res,src,dst); SetAF(res,src,dst); SetSZPF16(res); return (UINT16)res; } #define ADD32(dst, src) ADC32(dst, src, 0) INLINE UINT32 ADC32(UINT32 dst, UINT32 src, UINT32 c) { UINT64 res = (UINT64)dst + (UINT64)src + (UINT64) c; SetCF32(res); SetOF_Add32(res,src,dst); SetAF(res,src,dst); SetSZPF32(res); return (UINT32)res; } INLINE UINT8 INC8(UINT8 dst) { UINT16 res = (UINT16)dst + 1; SetOF_Add8(res,1,dst); SetAF(res,1,dst); SetSZPF8(res); return (UINT8)res; } INLINE UINT16 INC16(UINT16 dst) { UINT32 res = (UINT32)dst + 1; SetOF_Add16(res,1,dst); SetAF(res,1,dst); SetSZPF16(res); return (UINT16)res; } INLINE UINT32 INC32(UINT32 dst) { UINT64 res = (UINT64)dst + 1; SetOF_Add32(res,1,dst); SetAF(res,1,dst); SetSZPF32(res); return (UINT32)res; } INLINE UINT8 DEC8(UINT8 dst) { UINT16 res = (UINT16)dst - 1; SetOF_Sub8(res,1,dst); SetAF(res,1,dst); SetSZPF8(res); return (UINT8)res; } INLINE UINT16 DEC16(UINT16 dst) { UINT32 res = (UINT32)dst - 1; SetOF_Sub16(res,1,dst); SetAF(res,1,dst); SetSZPF16(res); return (UINT16)res; } INLINE UINT32 DEC32(UINT32 dst) { UINT64 res = (UINT64)dst - 1; SetOF_Sub32(res,1,dst); SetAF(res,1,dst); SetSZPF32(res); return (UINT32)res; } INLINE void PUSH16(UINT16 value) { UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) - 2; ea = i386_translate(SS, new_esp, 1); WRITE16(ea, value ); REG32(ESP) = new_esp; } else { new_esp = (REG16(SP) - 2) & 0xffff; ea = i386_translate(SS, new_esp, 1); WRITE16(ea, value ); REG16(SP) = new_esp; } } INLINE void PUSH32(UINT32 value) { UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) - 4; ea = i386_translate(SS, new_esp, 1); WRITE32(ea, value ); REG32(ESP) = new_esp; } else { new_esp = (REG16(SP) - 4) & 0xffff; ea = i386_translate(SS, new_esp, 1); WRITE32(ea, value ); REG16(SP) = new_esp; } } INLINE void PUSH8(UINT8 value) { if( m_operand_size ) { PUSH32((INT32)(INT8)value); } else { PUSH16((INT16)(INT8)value); } } INLINE UINT8 POP8() { UINT8 value; UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) + 1; ea = i386_translate(SS, new_esp - 1, 0); value = READ8(ea ); REG32(ESP) = new_esp; } else { new_esp = REG16(SP) + 1; ea = i386_translate(SS, (new_esp - 1) & 0xffff, 0); value = READ8(ea ); REG16(SP) = new_esp; } return value; } INLINE UINT16 POP16() { UINT16 value; UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) + 2; ea = i386_translate(SS, new_esp - 2, 0); value = READ16(ea ); REG32(ESP) = new_esp; } else { new_esp = REG16(SP) + 2; ea = i386_translate(SS, (new_esp - 2) & 0xffff, 0); value = READ16(ea ); REG16(SP) = new_esp; } return value; } INLINE UINT32 POP32() { UINT32 value; UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) + 4; ea = i386_translate(SS, new_esp - 4, 0); value = READ32(ea ); REG32(ESP) = new_esp; } else { new_esp = REG16(SP) + 4; ea = i386_translate(SS, (new_esp - 4) & 0xffff, 0); value = READ32(ea ); REG16(SP) = new_esp; } return value; } INLINE void BUMP_SI(int adjustment) { if ( m_address_size ) REG32(ESI) += ((m_DF) ? -adjustment : +adjustment); else REG16(SI) += ((m_DF) ? -adjustment : +adjustment); } INLINE void BUMP_DI(int adjustment) { if ( m_address_size ) REG32(EDI) += ((m_DF) ? -adjustment : +adjustment); else REG16(DI) += ((m_DF) ? -adjustment : +adjustment); } /*********************************************************************************** I/O ACCESS ***********************************************************************************/ INLINE void check_ioperm(offs_t port, UINT8 mask) { UINT8 IOPL, map; UINT16 IOPB; UINT32 address; if(!PROTECTED_MODE) return; IOPL = m_IOP1 | (m_IOP2 << 1); if(!V8086_MODE && (m_CPL <= IOPL)) return; if((m_task.limit < 0x67) || ((m_task.flags & 0xd) != 9)) FAULT_THROW(FAULT_GP,0); address = m_task.base; IOPB = READ16PL0(address+0x66); if((IOPB+(port/8)) > m_task.limit) FAULT_THROW(FAULT_GP,0); map = READ8PL0(address+IOPB+(port/8)); map >>= (port%8); if(map & mask) FAULT_THROW(FAULT_GP,0); } INLINE UINT8 READPORT8(offs_t port) { check_ioperm(port, 1); return read_io_byte(port); } INLINE void WRITEPORT8(offs_t port, UINT8 value) { check_ioperm(port, 1); write_io_byte(port, value); } INLINE UINT16 READPORT16(offs_t port) { if (port & 1) { UINT16 value = READPORT8(port); value |= (READPORT8(port + 1) << 8); return value; } else { check_ioperm(port, 3); return read_io_word(port); } } INLINE void WRITEPORT16(offs_t port, UINT16 value) { if (port & 1) { WRITEPORT8(port, value & 0xff); WRITEPORT8(port + 1, (value >> 8) & 0xff); } else { check_ioperm(port, 3); write_io_word(port, value); } } INLINE UINT32 READPORT32(offs_t port) { if (port & 3) { UINT32 value = READPORT8(port); value |= (READPORT8(port + 1) << 8); value |= (READPORT8(port + 2) << 16); value |= (READPORT8(port + 3) << 24); return value; } else { check_ioperm(port, 0xf); return read_io_dword(port); } } INLINE void WRITEPORT32(offs_t port, UINT32 value) { if (port & 3) { WRITEPORT8(port, value & 0xff); WRITEPORT8(port + 1, (value >> 8) & 0xff); WRITEPORT8(port + 2, (value >> 16) & 0xff); WRITEPORT8(port + 3, (value >> 24) & 0xff); } else { check_ioperm(port, 0xf); write_io_dword(port, value); } } /*********************************************************************************** MSR ACCESS ***********************************************************************************/ // Pentium MSR handling UINT64 pentium_msr_read(UINT32 offset,UINT8 *valid_msr) { switch(offset) { // Machine Check Exception (TODO) case 0x00: *valid_msr = 1; popmessage("RDMSR: Reading P5_MC_ADDR"); return 0; case 0x01: *valid_msr = 1; popmessage("RDMSR: Reading P5_MC_TYPE"); return 0; // Time Stamp Counter case 0x10: *valid_msr = 1; popmessage("RDMSR: Reading TSC"); return m_tsc; // Event Counters (TODO) case 0x11: // CESR *valid_msr = 1; popmessage("RDMSR: Reading CESR"); return 0; case 0x12: // CTR0 *valid_msr = 1; return m_perfctr[0]; case 0x13: // CTR1 *valid_msr = 1; return m_perfctr[1]; default: if(!(offset & ~0xf)) // 2-f are test registers { *valid_msr = 1; logerror("RDMSR: Reading test MSR %x", offset); return 0; } logerror("RDMSR: invalid P5 MSR read %08x at %08x\n",offset,m_pc-2); *valid_msr = 0; return 0; } return -1; } void pentium_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr) { switch(offset) { // Machine Check Exception (TODO) case 0x00: popmessage("WRMSR: Writing P5_MC_ADDR"); *valid_msr = 1; break; case 0x01: popmessage("WRMSR: Writing P5_MC_TYPE"); *valid_msr = 1; break; // Time Stamp Counter case 0x10: m_tsc = data; popmessage("WRMSR: Writing to TSC"); *valid_msr = 1; break; // Event Counters (TODO) case 0x11: // CESR popmessage("WRMSR: Writing to CESR"); *valid_msr = 1; break; case 0x12: // CTR0 m_perfctr[0] = data; *valid_msr = 1; break; case 0x13: // CTR1 m_perfctr[1] = data; *valid_msr = 1; break; default: if(!(offset & ~0xf)) // 2-f are test registers { *valid_msr = 1; logerror("WRMSR: Writing test MSR %x", offset); break; } logerror("WRMSR: invalid MSR write %08x (%08x%08x) at %08x\n",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2); *valid_msr = 0; break; } } // P6 (Pentium Pro, Pentium II, Pentium III) MSR handling UINT64 p6_msr_read(UINT32 offset,UINT8 *valid_msr) { switch(offset) { // Machine Check Exception (TODO) case 0x00: *valid_msr = 1; popmessage("RDMSR: Reading P5_MC_ADDR"); return 0; case 0x01: *valid_msr = 1; popmessage("RDMSR: Reading P5_MC_TYPE"); return 0; // Time Stamp Counter case 0x10: *valid_msr = 1; popmessage("RDMSR: Reading TSC"); return m_tsc; // Performance Counters (TODO) case 0xc1: // PerfCtr0 *valid_msr = 1; return m_perfctr[0]; case 0xc2: // PerfCtr1 *valid_msr = 1; return m_perfctr[1]; default: logerror("RDMSR: unimplemented register called %08x at %08x\n",offset,m_pc-2); *valid_msr = 1; return 0; } return -1; } void p6_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr) { switch(offset) { // Time Stamp Counter case 0x10: m_tsc = data; popmessage("WRMSR: Writing to TSC"); *valid_msr = 1; break; // Performance Counters (TODO) case 0xc1: // PerfCtr0 m_perfctr[0] = data; *valid_msr = 1; break; case 0xc2: // PerfCtr1 m_perfctr[1] = data; *valid_msr = 1; break; default: logerror("WRMSR: unimplemented register called %08x (%08x%08x) at %08x\n",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2); *valid_msr = 1; break; } } // PIV (Pentium 4+) UINT64 piv_msr_read(UINT32 offset,UINT8 *valid_msr) { switch(offset) { default: logerror("RDMSR: unimplemented register called %08x at %08x\n",offset,m_pc-2); *valid_msr = 1; return 0; } return -1; } void piv_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr) { switch(offset) { default: logerror("WRMSR: unimplemented register called %08x (%08x%08x) at %08x\n",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2); *valid_msr = 1; break; } } INLINE UINT64 MSR_READ(UINT32 offset,UINT8 *valid_msr) { UINT64 res; UINT8 cpu_type = (m_cpu_version >> 8) & 0x0f; *valid_msr = 0; switch(cpu_type) { case 5: // Pentium res = pentium_msr_read(offset,valid_msr); break; case 6: // Pentium Pro, Pentium II, Pentium III res = p6_msr_read(offset,valid_msr); break; case 15: // Pentium 4+ res = piv_msr_read(offset,valid_msr); break; default: res = 0; break; } return res; } INLINE void MSR_WRITE(UINT32 offset, UINT64 data, UINT8 *valid_msr) { *valid_msr = 0; UINT8 cpu_type = (m_cpu_version >> 8) & 0x0f; switch(cpu_type) { case 5: // Pentium pentium_msr_write(offset,data,valid_msr); break; case 6: // Pentium Pro, Pentium II, Pentium III p6_msr_write(offset,data,valid_msr); break; case 15: // Pentium 4+ piv_msr_write(offset,data,valid_msr); break; } } #endif /* __I386_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i386/i486ops.c ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett // Intel 486+ specific opcodes static void I486OP(cpuid)() // Opcode 0x0F A2 { if (m_cpuid_id0 == 0) { // this 486 doesn't support the CPUID instruction logerror("CPUID not supported at %08x!\n", m_eip); i386_trap(6, 0, 0); } else { switch (REG32(EAX)) { case 0: { REG32(EAX) = m_cpuid_max_input_value_eax; REG32(EBX) = m_cpuid_id0; REG32(ECX) = m_cpuid_id2; REG32(EDX) = m_cpuid_id1; CYCLES(CYCLES_CPUID); break; } case 1: { REG32(EAX) = m_cpu_version; REG32(EDX) = m_feature_flags; CYCLES(CYCLES_CPUID_EAX1); break; } } } } static void I486OP(invd)() // Opcode 0x0f 08 { // Nothing to do ? CYCLES(CYCLES_INVD); } static void I486OP(wbinvd)() // Opcode 0x0f 09 { // Nothing to do ? } static void I486OP(cmpxchg_rm8_r8)() // Opcode 0x0f b0 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); UINT8 src = LOAD_REG8(modrm); if( REG8(AL) == dst ) { STORE_RM8(modrm, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_REG_T); } else { REG8(AL) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_REG_F); } } else { // TODO: Check write if needed UINT32 ea = GetEA(modrm,0); UINT8 dst = READ8(ea); UINT8 src = LOAD_REG8(modrm); if( REG8(AL) == dst ) { WRITE8(ea, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_MEM_T); } else { REG8(AL) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_MEM_F); } } } static void I486OP(cmpxchg_rm16_r16)() // Opcode 0x0f b1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 src = LOAD_REG16(modrm); if( REG16(AX) == dst ) { STORE_RM16(modrm, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_REG_T); } else { REG16(AX) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_REG_F); } } else { UINT32 ea = GetEA(modrm,0); UINT16 dst = READ16(ea); UINT16 src = LOAD_REG16(modrm); if( REG16(AX) == dst ) { WRITE16(ea, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_MEM_T); } else { REG16(AX) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_MEM_F); } } } static void I486OP(cmpxchg_rm32_r32)() // Opcode 0x0f b1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 src = LOAD_REG32(modrm); if( REG32(EAX) == dst ) { STORE_RM32(modrm, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_REG_T); } else { REG32(EAX) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_REG_F); } } else { UINT32 ea = GetEA(modrm,0); UINT32 dst = READ32(ea); UINT32 src = LOAD_REG32(modrm); if( REG32(EAX) == dst ) { WRITE32(ea, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_MEM_T); } else { REG32(EAX) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_MEM_F); } } } static void I486OP(xadd_rm8_r8)() // Opcode 0x0f c0 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); UINT8 src = LOAD_REG8(modrm); STORE_REG8(modrm, dst); STORE_RM8(modrm, dst + src); CYCLES(CYCLES_XADD_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); UINT8 src = LOAD_REG8(modrm); WRITE8(ea, dst + src); STORE_REG8(modrm, dst); CYCLES(CYCLES_XADD_REG_MEM); } } static void I486OP(xadd_rm16_r16)() // Opcode 0x0f c1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 src = LOAD_REG16(modrm); STORE_REG16(modrm, dst); STORE_RM16(modrm, dst + src); CYCLES(CYCLES_XADD_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 src = LOAD_REG16(modrm); WRITE16(ea, dst + src); STORE_REG16(modrm, dst); CYCLES(CYCLES_XADD_REG_MEM); } } static void I486OP(xadd_rm32_r32)() // Opcode 0x0f c1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 src = LOAD_REG32(modrm); STORE_REG32(modrm, dst); STORE_RM32(modrm, dst + src); CYCLES(CYCLES_XADD_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 src = LOAD_REG32(modrm); WRITE32(ea, dst + src); STORE_REG32(modrm, dst); CYCLES(CYCLES_XADD_REG_MEM); } } static void I486OP(group0F01_16)() // Opcode 0x0f 01 { UINT8 modrm = FETCH(); UINT16 address; UINT32 ea; switch( (modrm >> 3) & 0x7 ) { case 0: /* SGDT */ { if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate( CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_gdtr.limit); WRITE32(ea + 2, m_gdtr.base & 0xffffff); CYCLES(CYCLES_SGDT); break; } case 1: /* SIDT */ { if (modrm >= 0xc0) { address = LOAD_RM16(modrm); ea = i386_translate( CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_idtr.limit); WRITE32(ea + 2, m_idtr.base & 0xffffff); CYCLES(CYCLES_SIDT); break; } case 2: /* LGDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate( CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_gdtr.limit = READ16(ea); m_gdtr.base = READ32(ea + 2) & 0xffffff; CYCLES(CYCLES_LGDT); break; } case 3: /* LIDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate( CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_idtr.limit = READ16(ea); m_idtr.base = READ32(ea + 2) & 0xffffff; CYCLES(CYCLES_LIDT); break; } case 4: /* SMSW */ { if( modrm >= 0xc0 ) { STORE_RM16(modrm, m_cr[0]); CYCLES(CYCLES_SMSW_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_cr[0]); CYCLES(CYCLES_SMSW_MEM); } break; } case 6: /* LMSW */ { UINT16 b; if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { b = LOAD_RM16(modrm); CYCLES(CYCLES_LMSW_REG); } else { ea = GetEA(modrm,0); CYCLES(CYCLES_LMSW_MEM); b = READ16(ea); } if(PROTECTED_MODE) b |= 0x0001; // cannot return to real mode using this instruction. m_cr[0] &= ~0x0000000f; m_cr[0] |= b & 0x0000000f; break; } case 7: /* INVLPG */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if(modrm >= 0xc0) { logerror("i486: invlpg with modrm %02X\n", modrm); FAULT(FAULT_UD,0) } ea = GetEA(modrm,-1); CYCLES(25); // TODO: add to cycles.h vtlb_flush_address(m_vtlb, ea); break; } default: report_invalid_modrm("group0F01_16", modrm); break; } } static void I486OP(group0F01_32)() // Opcode 0x0f 01 { UINT8 modrm = FETCH(); UINT32 address, ea; switch( (modrm >> 3) & 0x7 ) { case 0: /* SGDT */ { if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate( CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_gdtr.limit); WRITE32(ea + 2, m_gdtr.base); CYCLES(CYCLES_SGDT); break; } case 1: /* SIDT */ { if (modrm >= 0xc0) { address = LOAD_RM32(modrm); ea = i386_translate( CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_idtr.limit); WRITE32(ea + 2, m_idtr.base); CYCLES(CYCLES_SIDT); break; } case 2: /* LGDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate( CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_gdtr.limit = READ16(ea); m_gdtr.base = READ32(ea + 2); CYCLES(CYCLES_LGDT); break; } case 3: /* LIDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate( CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_idtr.limit = READ16(ea); m_idtr.base = READ32(ea + 2); CYCLES(CYCLES_LIDT); break; } case 4: /* SMSW */ { if( modrm >= 0xc0 ) { STORE_RM32(modrm, m_cr[0] & 0xffff); CYCLES(CYCLES_SMSW_REG); } else { /* always 16-bit memory operand */ ea = GetEA(modrm,1); WRITE16(ea, m_cr[0]); CYCLES(CYCLES_SMSW_MEM); } break; } case 6: /* LMSW */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) UINT16 b; if( modrm >= 0xc0 ) { b = LOAD_RM16(modrm); CYCLES(CYCLES_LMSW_REG); } else { ea = GetEA(modrm,0); CYCLES(CYCLES_LMSW_MEM); b = READ16(ea); } if(PROTECTED_MODE) b |= 0x0001; // cannot return to real mode using this instruction. m_cr[0] &= ~0x0000000f; m_cr[0] |= b & 0x0000000f; break; } case 7: /* INVLPG */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if(modrm >= 0xc0) { logerror("i486: invlpg with modrm %02X\n", modrm); FAULT(FAULT_UD,0) } ea = GetEA(modrm,-1); CYCLES(25); // TODO: add to cycles.h vtlb_flush_address(m_vtlb, ea); break; } default: report_invalid_modrm("group0F01_32", modrm); break; } } static void I486OP(bswap_eax)() // Opcode 0x0f 38 { REG32(EAX) = SWITCH_ENDIAN_32(REG32(EAX)); CYCLES(1); // TODO } static void I486OP(bswap_ecx)() // Opcode 0x0f 39 { REG32(ECX) = SWITCH_ENDIAN_32(REG32(ECX)); CYCLES(1); // TODO } static void I486OP(bswap_edx)() // Opcode 0x0f 3A { REG32(EDX) = SWITCH_ENDIAN_32(REG32(EDX)); CYCLES(1); // TODO } static void I486OP(bswap_ebx)() // Opcode 0x0f 3B { REG32(EBX) = SWITCH_ENDIAN_32(REG32(EBX)); CYCLES(1); // TODO } static void I486OP(bswap_esp)() // Opcode 0x0f 3C { REG32(ESP) = SWITCH_ENDIAN_32(REG32(ESP)); CYCLES(1); // TODO } static void I486OP(bswap_ebp)() // Opcode 0x0f 3D { REG32(EBP) = SWITCH_ENDIAN_32(REG32(EBP)); CYCLES(1); // TODO } static void I486OP(bswap_esi)() // Opcode 0x0f 3E { REG32(ESI) = SWITCH_ENDIAN_32(REG32(ESI)); CYCLES(1); // TODO } static void I486OP(bswap_edi)() // Opcode 0x0f 3F { REG32(EDI) = SWITCH_ENDIAN_32(REG32(EDI)); CYCLES(1); // TODO } static void I486OP(mov_cr_r32)() // Opcode 0x0f 22 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 cr = (modrm >> 3) & 0x7; UINT32 oldcr = m_cr[cr]; UINT32 data = LOAD_RM32(modrm); switch(cr) { case 0: #ifndef PAGING if(data & 0x80000000) fatalerror("paging disabled\n"); #endif CYCLES(CYCLES_MOV_REG_CR0); if((oldcr ^ m_cr[cr]) & 0x80010000) vtlb_flush_dynamic(m_vtlb); break; case 2: CYCLES(CYCLES_MOV_REG_CR2); break; case 3: CYCLES(CYCLES_MOV_REG_CR3); vtlb_flush_dynamic(m_vtlb); break; case 4: CYCLES(1); break; // TODO default: logerror("i386: mov_cr_r32 CR%d!\n", cr); return; } m_cr[cr] = data; } void I486OP(wait)() { x87_mf_fault(); } ================================================ FILE: vm86/mame/emu/cpu/i386/pentops.c ================================================ // license:BSD-3-Clause // copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett // Pentium+ specific opcodes extern flag float32_is_nan( float32 a ); // since its not defined in softfloat.h extern flag float64_is_nan( float64 a ); // since its not defined in softfloat.h INLINE void MMXPROLOG() { //m_x87_sw &= ~(X87_SW_TOP_MASK << X87_SW_TOP_SHIFT); // top = 0 m_x87_tw = 0; // tag word = 0 } INLINE void READMMX(UINT32 ea,MMX_REG &r) { r.q=READ64(ea); } INLINE void WRITEMMX(UINT32 ea,MMX_REG &r) { WRITE64(ea, r.q); } INLINE void READXMM(UINT32 ea,XMM_REG &r) { r.q[0]=READ64(ea); r.q[1]=READ64(ea+8); } INLINE void WRITEXMM(UINT32 ea,XMM_REG &r) { WRITE64(ea, r.q[0]); WRITE64(ea+8, r.q[1]); } INLINE void READXMM_LO64(UINT32 ea,XMM_REG &r) { r.q[0]=READ64(ea); } INLINE void WRITEXMM_LO64(UINT32 ea,XMM_REG &r) { WRITE64(ea, r.q[0]); } INLINE void READXMM_HI64(UINT32 ea,XMM_REG &r) { r.q[1]=READ64(ea); } INLINE void WRITEXMM_HI64(UINT32 ea,XMM_REG &r) { WRITE64(ea, r.q[1]); } static void PENTIUMOP(rdmsr)() // Opcode 0x0f 32 { UINT64 data; UINT8 valid_msr = 0; data = MSR_READ(REG32(ECX),&valid_msr); REG32(EDX) = data >> 32; REG32(EAX) = data & 0xffffffff; if(m_CPL != 0 || valid_msr == 0) // if current privilege level isn't 0 or the register isn't recognized ... FAULT(FAULT_GP,0) // ... throw a general exception fault CYCLES(CYCLES_RDMSR); } static void PENTIUMOP(wrmsr)() // Opcode 0x0f 30 { UINT64 data; UINT8 valid_msr = 0; data = (UINT64)REG32(EAX); data |= (UINT64)(REG32(EDX)) << 32; MSR_WRITE(REG32(ECX),data,&valid_msr); if(m_CPL != 0 || valid_msr == 0) // if current privilege level isn't 0 or the register isn't recognized FAULT(FAULT_GP,0) // ... throw a general exception fault CYCLES(1); // TODO: correct cycle count (~30-45) } static void PENTIUMOP(rdtsc)() // Opcode 0x0f 31 { UINT64 ts = m_tsc + (m_base_cycles - m_cycles); REG32(EAX) = (UINT32)(ts); REG32(EDX) = (UINT32)(ts >> 32); CYCLES(CYCLES_RDTSC); } static void PENTIUMOP(ud2)() // Opcode 0x0f 0b { i386_trap(6, 0, 0); } static void PENTIUMOP(rsm)() { UINT32 smram_state = m_smbase + 0xfe00; if(!m_smm) { logerror("i386: Invalid RSM outside SMM at %08X\n", m_pc - 1); i386_trap(6, 0, 0); return; } // load state, no sanity checks anywhere m_smbase = READ32(smram_state+SMRAM_SMBASE); m_cr[4] = READ32(smram_state+SMRAM_IP5_CR4); m_sreg[ES].limit = READ32(smram_state+SMRAM_IP5_ESLIM); m_sreg[ES].base = READ32(smram_state+SMRAM_IP5_ESBASE); m_sreg[ES].flags = READ32(smram_state+SMRAM_IP5_ESACC); m_sreg[CS].limit = READ32(smram_state+SMRAM_IP5_CSLIM); m_sreg[CS].base = READ32(smram_state+SMRAM_IP5_CSBASE); m_sreg[CS].flags = READ32(smram_state+SMRAM_IP5_CSACC); m_sreg[SS].limit = READ32(smram_state+SMRAM_IP5_SSLIM); m_sreg[SS].base = READ32(smram_state+SMRAM_IP5_SSBASE); m_sreg[SS].flags = READ32(smram_state+SMRAM_IP5_SSACC); m_sreg[DS].limit = READ32(smram_state+SMRAM_IP5_DSLIM); m_sreg[DS].base = READ32(smram_state+SMRAM_IP5_DSBASE); m_sreg[DS].flags = READ32(smram_state+SMRAM_IP5_DSACC); m_sreg[FS].limit = READ32(smram_state+SMRAM_IP5_FSLIM); m_sreg[FS].base = READ32(smram_state+SMRAM_IP5_FSBASE); m_sreg[FS].flags = READ32(smram_state+SMRAM_IP5_FSACC); m_sreg[GS].limit = READ32(smram_state+SMRAM_IP5_GSLIM); m_sreg[GS].base = READ32(smram_state+SMRAM_IP5_GSBASE); m_sreg[GS].flags = READ32(smram_state+SMRAM_IP5_GSACC); m_ldtr.flags = READ32(smram_state+SMRAM_IP5_LDTACC); m_ldtr.limit = READ32(smram_state+SMRAM_IP5_LDTLIM); m_ldtr.base = READ32(smram_state+SMRAM_IP5_LDTBASE); m_gdtr.limit = READ32(smram_state+SMRAM_IP5_GDTLIM); m_gdtr.base = READ32(smram_state+SMRAM_IP5_GDTBASE); m_idtr.limit = READ32(smram_state+SMRAM_IP5_IDTLIM); m_idtr.base = READ32(smram_state+SMRAM_IP5_IDTBASE); m_task.limit = READ32(smram_state+SMRAM_IP5_TRLIM); m_task.base = READ32(smram_state+SMRAM_IP5_TRBASE); m_task.flags = READ32(smram_state+SMRAM_IP5_TRACC); m_sreg[ES].selector = READ32(smram_state+SMRAM_ES); m_sreg[CS].selector = READ32(smram_state+SMRAM_CS); m_sreg[SS].selector = READ32(smram_state+SMRAM_SS); m_sreg[DS].selector = READ32(smram_state+SMRAM_DS); m_sreg[FS].selector = READ32(smram_state+SMRAM_FS); m_sreg[GS].selector = READ32(smram_state+SMRAM_GS); m_ldtr.segment = READ32(smram_state+SMRAM_LDTR); m_task.segment = READ32(smram_state+SMRAM_TR); m_dr[7] = READ32(smram_state+SMRAM_DR7); m_dr[6] = READ32(smram_state+SMRAM_DR6); REG32(EAX) = READ32(smram_state+SMRAM_EAX); REG32(ECX) = READ32(smram_state+SMRAM_ECX); REG32(EDX) = READ32(smram_state+SMRAM_EDX); REG32(EBX) = READ32(smram_state+SMRAM_EBX); REG32(ESP) = READ32(smram_state+SMRAM_ESP); REG32(EBP) = READ32(smram_state+SMRAM_EBP); REG32(ESI) = READ32(smram_state+SMRAM_ESI); REG32(EDI) = READ32(smram_state+SMRAM_EDI); m_eip = READ32(smram_state+SMRAM_EIP); m_eflags = READ32(smram_state+SMRAM_EAX); m_cr[3] = READ32(smram_state+SMRAM_CR3); m_cr[0] = READ32(smram_state+SMRAM_CR0); m_CPL = (m_sreg[SS].flags >> 13) & 3; // cpl == dpl of ss for(int i = 0; i < GS; i++) { if(PROTECTED_MODE && !V8086_MODE) { m_sreg[i].valid = m_sreg[i].selector ? true : false; m_sreg[i].d = (m_sreg[i].flags & 0x4000) ? 1 : 0; } else m_sreg[i].valid = true; } // if(!m_smiact.isnull()) // m_smiact(false); m_smm = false; CHANGE_PC(m_eip); m_nmi_masked = false; if(m_smi_latched) { pentium_smi(); return; } if(m_nmi_latched) { m_nmi_latched = false; i386_trap(2, 1, 0); } } static void PENTIUMOP(prefetch_m8)() // Opcode 0x0f 18 { UINT8 modrm = FETCH(); UINT32 ea = GetEA(modrm,0); CYCLES(1+(ea & 1)); // TODO: correct cycle count } static void PENTIUMOP(cmovo_r16_rm16)() // Opcode 0x0f 40 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_OF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_OF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovo_r32_rm32)() // Opcode 0x0f 40 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_OF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_OF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovno_r16_rm16)() // Opcode 0x0f 41 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_OF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_OF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovno_r32_rm32)() // Opcode 0x0f 41 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_OF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_OF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovb_r16_rm16)() // Opcode 0x0f 42 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_CF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_CF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovb_r32_rm32)() // Opcode 0x0f 42 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_CF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_CF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovae_r16_rm16)() // Opcode 0x0f 43 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_CF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_CF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovae_r32_rm32)() // Opcode 0x0f 43 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_CF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_CF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmove_r16_rm16)() // Opcode 0x0f 44 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_ZF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_ZF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmove_r32_rm32)() // Opcode 0x0f 44 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_ZF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_ZF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovne_r16_rm16)() // Opcode 0x0f 45 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_ZF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_ZF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovne_r32_rm32)() // Opcode 0x0f 45 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_ZF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_ZF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovbe_r16_rm16)() // Opcode 0x0f 46 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_CF == 1) || (m_ZF == 1)) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_CF == 1) || (m_ZF == 1)) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovbe_r32_rm32)() // Opcode 0x0f 46 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_CF == 1) || (m_ZF == 1)) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_CF == 1) || (m_ZF == 1)) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmova_r16_rm16)() // Opcode 0x0f 47 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_CF == 0) && (m_ZF == 0)) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_CF == 0) && (m_ZF == 0)) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmova_r32_rm32)() // Opcode 0x0f 47 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_CF == 0) && (m_ZF == 0)) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_CF == 0) && (m_ZF == 0)) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovs_r16_rm16)() // Opcode 0x0f 48 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovs_r32_rm32)() // Opcode 0x0f 48 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovns_r16_rm16)() // Opcode 0x0f 49 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovns_r32_rm32)() // Opcode 0x0f 49 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovp_r16_rm16)() // Opcode 0x0f 4a { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_PF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_PF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovp_r32_rm32)() // Opcode 0x0f 4a { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_PF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_PF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovnp_r16_rm16)() // Opcode 0x0f 4b { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_PF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_PF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovnp_r32_rm32)() // Opcode 0x0f 4b { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_PF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_PF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovl_r16_rm16)() // Opcode 0x0f 4c { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF != m_OF) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF != m_OF) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovl_r32_rm32)() // Opcode 0x0f 4c { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF != m_OF) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF != m_OF) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovge_r16_rm16)() // Opcode 0x0f 4d { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == m_OF) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == m_OF) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovge_r32_rm32)() // Opcode 0x0f 4d { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == m_OF) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == m_OF) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovle_r16_rm16)() // Opcode 0x0f 4e { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_ZF == 1) || (m_SF != m_OF)) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_ZF == 1) || (m_SF != m_OF)) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovle_r32_rm32)() // Opcode 0x0f 4e { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_ZF == 1) || (m_SF != m_OF)) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_ZF == 1) || (m_SF != m_OF)) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovg_r16_rm16)() // Opcode 0x0f 4f { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_ZF == 0) && (m_SF == m_OF)) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_ZF == 0) && (m_SF == m_OF)) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovg_r32_rm32)() // Opcode 0x0f 4f { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_ZF == 0) && (m_SF == m_OF)) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_ZF == 0) && (m_SF == m_OF)) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(movnti_m16_r16)() // Opcode 0f c3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITE16(ea,LOAD_RM16(modrm)); CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(movnti_m32_r32)() // Opcode 0f c3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITE32(ea,LOAD_RM32(modrm)); CYCLES(1); // TODO: correct cycle count } } static void I386OP(cyrix_special)() // Opcode 0x0f 3a-3d { /* 0f 3a BB0_RESET (set BB0 pointer = base) 0f 3b BB1_RESET (set BB1 pointer = base) 0f 3c CPU_WRITE (write special CPU memory-mapped register, [ebx] = eax) 0f 3d CPU_READ (read special CPU memory-mapped register, eax, = [ebx]) */ CYCLES(1); } static void I386OP(cyrix_unknown)() // Opcode 0x0f 74 { logerror("Unemulated 0x0f 0x74 opcode called\n"); CYCLES(1); } static void PENTIUMOP(cmpxchg8b_m64)() // Opcode 0x0f c7 { UINT8 modm = FETCH(); if( modm >= 0xc0 ) { report_invalid_modrm("cmpxchg8b_m64", modm); } else { UINT32 ea = GetEA(modm, 0); UINT64 value = READ64(ea); UINT64 edx_eax = (((UINT64) REG32(EDX)) << 32) | REG32(EAX); UINT64 ecx_ebx = (((UINT64) REG32(ECX)) << 32) | REG32(EBX); if( value == edx_eax ) { WRITE64(ea, ecx_ebx); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_MEM_T); } else { REG32(EDX) = (UINT32) (value >> 32); REG32(EAX) = (UINT32) (value >> 0); m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_MEM_F); } } } static void PENTIUMOP(movntq_m64_r64)() // Opcode 0f e7 { //MMXPROLOG(); // TODO: check if needed UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { CYCLES(1); // unsupported } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITEMMX(ea, MMX((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(maskmovq_r64_r64)() // Opcode 0f f7 { int s,m,n; UINT8 modm = FETCH(); UINT32 ea = GetEA(7, 0); // ds:di/edi/rdi register MMXPROLOG(); s=(modm >> 3) & 7; m=modm & 7; for (n=0;n <= 7;n++) if (MMX(m).b[n] & 127) WRITE8(ea+n, MMX(s).b[n]); } static void SSEOP(maskmovdqu_r128_r128)() // Opcode 66 0f f7 { int s,m,n; UINT8 modm = FETCH(); UINT32 ea = GetEA(7, 0); // ds:di/edi/rdi register s=(modm >> 3) & 7; m=modm & 7; for (n=0;n < 16;n++) if (XMM(m).b[n] & 127) WRITE8(ea+n, XMM(s).b[n]); } static void PENTIUMOP(popcnt_r16_rm16)() // Opcode f3 0f b8 { UINT16 src; UINT8 modrm = FETCH(); int n,count; if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); } count=0; for (n=0;n < 16;n++) { count=count+(src & 1); src=src >> 1; } STORE_REG16(modrm, count); CYCLES(1); // TODO: correct cycle count } static void PENTIUMOP(popcnt_r32_rm32)() // Opcode f3 0f b8 { UINT32 src; UINT8 modrm = FETCH(); int n,count; if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); } count=0; for (n=0;n < 32;n++) { count=count+(src & 1); src=src >> 1; } STORE_REG32(modrm, count); CYCLES(1); // TODO: correct cycle count } static void PENTIUMOP(tzcnt_r16_rm16)() { // for CPUs that don't support TZCNT, fall back to BSF i386_bsf_r16_rm16(); // TODO: actually implement TZCNT } static void PENTIUMOP(tzcnt_r32_rm32)() { // for CPUs that don't support TZCNT, fall back to BSF i386_bsf_r32_rm32(); // TODO: actually implement TZCNT } INLINE INT8 SaturatedSignedWordToSignedByte(INT16 word) { if (word > 127) return 127; if (word < -128) return -128; return (INT8)word; } INLINE UINT8 SaturatedSignedWordToUnsignedByte(INT16 word) { if (word > 255) return 255; if (word < 0) return 0; return (UINT8)word; } INLINE INT16 SaturatedSignedDwordToSignedWord(INT32 dword) { if (dword > 32767) return 32767; if (dword < -32768) return -32768; return (INT16)dword; } INLINE UINT16 SaturatedSignedDwordToUnsignedWord(INT32 dword) { if (dword > 65535) return 65535; if (dword < 0) return 0; return (UINT16)dword; } static void MMXOP(group_0f71)() // Opcode 0f 71 { UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); MMXPROLOG(); if( modm >= 0xc0 ) { switch ( (modm & 0x38) >> 3 ) { case 2: // psrlw MMX(modm & 7).w[0]=MMX(modm & 7).w[0] >> imm8; MMX(modm & 7).w[1]=MMX(modm & 7).w[1] >> imm8; MMX(modm & 7).w[2]=MMX(modm & 7).w[2] >> imm8; MMX(modm & 7).w[3]=MMX(modm & 7).w[3] >> imm8; break; case 4: // psraw MMX(modm & 7).s[0]=MMX(modm & 7).s[0] >> imm8; MMX(modm & 7).s[1]=MMX(modm & 7).s[1] >> imm8; MMX(modm & 7).s[2]=MMX(modm & 7).s[2] >> imm8; MMX(modm & 7).s[3]=MMX(modm & 7).s[3] >> imm8; break; case 6: // psllw MMX(modm & 7).w[0]=MMX(modm & 7).w[0] << imm8; MMX(modm & 7).w[1]=MMX(modm & 7).w[1] << imm8; MMX(modm & 7).w[2]=MMX(modm & 7).w[2] << imm8; MMX(modm & 7).w[3]=MMX(modm & 7).w[3] << imm8; break; default: report_invalid_modrm("mmx_group0f71", modm); } } } static void SSEOP(group_660f71)() // Opcode 66 0f 71 { UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); if (modm >= 0xc0) { switch ((modm & 0x38) >> 3) { case 2: // psrlw for (int n = 0; n < 8;n++) XMM(modm & 7).w[n] = XMM(modm & 7).w[n] >> imm8; break; case 4: // psraw for (int n = 0; n < 8;n++) XMM(modm & 7).s[n] = XMM(modm & 7).s[n] >> imm8; break; case 6: // psllw for (int n = 0; n < 8;n++) XMM(modm & 7).w[n] = XMM(modm & 7).w[n] << imm8; break; default: report_invalid_modrm("mmx_group660f71", modm); } } } static void MMXOP(group_0f72)() // Opcode 0f 72 { UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); MMXPROLOG(); if( modm >= 0xc0 ) { switch ( (modm & 0x38) >> 3 ) { case 2: // psrld MMX(modm & 7).d[0]=MMX(modm & 7).d[0] >> imm8; MMX(modm & 7).d[1]=MMX(modm & 7).d[1] >> imm8; break; case 4: // psrad MMX(modm & 7).i[0]=MMX(modm & 7).i[0] >> imm8; MMX(modm & 7).i[1]=MMX(modm & 7).i[1] >> imm8; break; case 6: // pslld MMX(modm & 7).d[0]=MMX(modm & 7).d[0] << imm8; MMX(modm & 7).d[1]=MMX(modm & 7).d[1] << imm8; break; default: report_invalid_modrm("mmx_group0f72", modm); } } } static void SSEOP(group_660f72)() // Opcode 66 0f 72 { UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); if (modm >= 0xc0) { switch ((modm & 0x38) >> 3) { case 2: // psrld for (int n = 0; n < 4;n++) XMM(modm & 7).d[n] = XMM(modm & 7).d[n] >> imm8; break; case 4: // psrad for (int n = 0; n < 4;n++) XMM(modm & 7).i[n] = XMM(modm & 7).i[n] >> imm8; break; case 6: // pslld for (int n = 0; n < 4;n++) XMM(modm & 7).d[n] = XMM(modm & 7).d[n] << imm8; break; default: report_invalid_modrm("mmx_group660f72", modm); } } } static void MMXOP(group_0f73)() // Opcode 0f 73 { UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); MMXPROLOG(); if( modm >= 0xc0 ) { switch ( (modm & 0x38) >> 3 ) { case 2: // psrlq MMX(modm & 7).q = imm8 > 63 ? 0 : MMX(modm & 7).q >> imm8; break; case 6: // psllq MMX(modm & 7).q = imm8 > 63 ? 0 : MMX(modm & 7).q << imm8; break; default: report_invalid_modrm("mmx_group0f73", modm); } } } static void SSEOP(group_660f73)() // Opcode 66 0f 73 { UINT64 t0; UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); if (modm >= 0xc0) { switch ((modm & 0x38) >> 3) { case 2: // psrlq XMM(modm & 7).q[0] = imm8 > 63 ? 0 : XMM(modm & 7).q[0] >> imm8; XMM(modm & 7).q[1] = imm8 > 63 ? 0 : XMM(modm & 7).q[1] >> imm8; break; case 3: // psrldq if (imm8 >= 16) { XMM(modm & 7).q[0] = 0; XMM(modm & 7).q[1] = 0; } else if (imm8 >= 8) { imm8 = (imm8 & 7) << 3; XMM(modm & 7).q[0] = XMM(modm & 7).q[1] >> imm8; XMM(modm & 7).q[1] = 0; } else if (imm8) { t0 = XMM(modm & 7).q[0]; imm8 = imm8 << 3; XMM(modm & 7).q[0] = (XMM(modm & 7).q[1] << (64 - imm8)) | (t0 >> imm8); XMM(modm & 7).q[1] = t0 >> imm8; } break; case 6: // psllq XMM(modm & 7).q[0] = imm8 > 63 ? 0 : XMM(modm & 7).q[0] << imm8; XMM(modm & 7).q[1] = imm8 > 63 ? 0 : XMM(modm & 7).q[1] << imm8; break; case 7: // pslldq if (imm8 >= 16) { XMM(modm & 7).q[0] = 0; XMM(modm & 7).q[1] = 0; } else if (imm8 >= 8) { imm8 = (imm8 & 7) << 3; XMM(modm & 7).q[1] = XMM(modm & 7).q[0] << imm8; XMM(modm & 7).q[0] = 0; } else if (imm8) { imm8 = imm8 << 3; XMM(modm & 7).q[1] = (XMM(modm & 7).q[0] >> (64 - imm8)) | (XMM(modm & 7).q[1] << imm8); XMM(modm & 7).q[0] = XMM(modm & 7).q[0] << imm8; } break; default: report_invalid_modrm("sse_group660f73", modm); } } } static void MMXOP(psrlw_r64_rm64)() // Opcode 0f d1 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] >> count; MMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] >> count; MMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] >> count; MMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] >> count; MMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] >> count; MMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] >> count; MMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psrld_r64_rm64)() // Opcode 0f d2 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] >> count; MMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] >> count; MMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psrlq_r64_rm64)() // Opcode 0f d3 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddq_r64_rm64)() // Opcode 0f d4 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q+MMX(modrm & 7).q; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q+src.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pmullw_r64_rm64)() // Opcode 0f d5 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]) & 0xffff; MMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]) & 0xffff; MMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]) & 0xffff; MMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]) & 0xffff; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)src.s[0]) & 0xffff; MMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)src.s[1]) & 0xffff; MMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)src.s[2]) & 0xffff; MMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)src.s[3]) & 0xffff; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubusb_r64_rm64)() // Opcode 0f d8 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((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]; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] < src.b[n] ? 0 : MMX((modrm >> 3) & 0x7).b[n]-src.b[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubusw_r64_rm64)() // Opcode 0f d9 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((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]; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] < src.w[n] ? 0 : MMX((modrm >> 3) & 0x7).w[n]-src.w[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pand_r64_rm64)() // Opcode 0f db { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q & MMX(modrm & 7).q; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q & src.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddusb_r64_rm64)() // Opcode 0f dc { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((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]; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); for (n=0;n < 8;n++) MMX((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]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddusw_r64_rm64)() // Opcode 0f dd { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((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]; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); for (n=0;n < 4;n++) MMX((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]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pandn_r64_rm64)() // Opcode 0f df { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=(~MMX((modrm >> 3) & 0x7).q) & MMX(modrm & 7).q; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).q=(~MMX((modrm >> 3) & 0x7).q) & src.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psraw_r64_rm64)() // Opcode 0f e1 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).s[0]=MMX((modrm >> 3) & 0x7).s[0] >> count; MMX((modrm >> 3) & 0x7).s[1]=MMX((modrm >> 3) & 0x7).s[1] >> count; MMX((modrm >> 3) & 0x7).s[2]=MMX((modrm >> 3) & 0x7).s[2] >> count; MMX((modrm >> 3) & 0x7).s[3]=MMX((modrm >> 3) & 0x7).s[3] >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).s[0]=MMX((modrm >> 3) & 0x7).s[0] >> count; MMX((modrm >> 3) & 0x7).s[1]=MMX((modrm >> 3) & 0x7).s[1] >> count; MMX((modrm >> 3) & 0x7).s[2]=MMX((modrm >> 3) & 0x7).s[2] >> count; MMX((modrm >> 3) & 0x7).s[3]=MMX((modrm >> 3) & 0x7).s[3] >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psrad_r64_rm64)() // Opcode 0f e2 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).i[0]=MMX((modrm >> 3) & 0x7).i[0] >> count; MMX((modrm >> 3) & 0x7).i[1]=MMX((modrm >> 3) & 0x7).i[1] >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).i[0]=MMX((modrm >> 3) & 0x7).i[0] >> count; MMX((modrm >> 3) & 0x7).i[1]=MMX((modrm >> 3) & 0x7).i[1] >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pmulhw_r64_rm64)() // Opcode 0f e5 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]) >> 16; MMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]) >> 16; MMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]) >> 16; MMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]) >> 16; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)src.s[0]) >> 16; MMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)src.s[1]) >> 16; MMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)src.s[2]) >> 16; MMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)src.s[3]) >> 16; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubsb_r64_rm64)() // Opcode 0f e8 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] - (INT16)MMX(modrm & 7).c[n]); } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] - (INT16)s.c[n]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubsw_r64_rm64)() // Opcode 0f e9 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] - (INT32)MMX(modrm & 7).s[n]); } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] - (INT32)s.s[n]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(por_r64_rm64)() // Opcode 0f eb { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q | MMX(modrm & 7).q; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q | s.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddsb_r64_rm64)() // Opcode 0f ec { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] + (INT16)MMX(modrm & 7).c[n]); } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] + (INT16)s.c[n]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddsw_r64_rm64)() // Opcode 0f ed { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] + (INT32)MMX(modrm & 7).s[n]); } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] + (INT32)s.s[n]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pxor_r64_rm64)() // Opcode 0f ef { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q ^ MMX(modrm & 7).q; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q ^ s.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psllw_r64_rm64)() // Opcode 0f f1 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] << count; MMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] << count; MMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] << count; MMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] << count; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); int count=(int)s.q; MMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] << count; MMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] << count; MMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] << count; MMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] << count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pslld_r64_rm64)() // Opcode 0f f2 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] << count; MMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] << count; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); int count=(int)s.q; MMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] << count; MMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] << count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psllq_r64_rm64)() // Opcode 0f f3 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q << count; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); int count=(int)s.q; MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q << count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pmaddwd_r64_rm64)() // Opcode 0f f5 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]+ (INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]; MMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]+ (INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)s.s[0]+ (INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)s.s[1]; MMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)s.s[2]+ (INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)s.s[3]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubb_r64_rm64)() // Opcode 0f f8 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] - MMX(modrm & 7).b[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] - s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubw_r64_rm64)() // Opcode 0f f9 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] - MMX(modrm & 7).w[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] - s.w[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubd_r64_rm64)() // Opcode 0f fa { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 2;n++) MMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] - MMX(modrm & 7).d[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 2;n++) MMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] - s.d[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddb_r64_rm64)() // Opcode 0f fc { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] + MMX(modrm & 7).b[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] + s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddw_r64_rm64)() // Opcode 0f fd { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] + MMX(modrm & 7).w[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] + s.w[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddd_r64_rm64)() // Opcode 0f fe { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 2;n++) MMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] + MMX(modrm & 7).d[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 2;n++) MMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] + s.d[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(emms)() // Opcode 0f 77 { m_x87_tw = 0xffff; // tag word = 0xffff // TODO CYCLES(1); // TODO: correct cycle count } static void I386OP(cyrix_svdc)() // Opcode 0f 78 { UINT8 modrm = FETCH(); if( modrm < 0xc0 ) { UINT32 ea = GetEA(modrm,0); int index = (modrm >> 3) & 7; int limit; switch (index) { case 0: { index = ES; break; } case 2: { index = SS; break; } case 3: { index = DS; break; } case 4: { index = FS; break; } case 5: { index = GS; break; } default: { i386_trap(6, 0, 0); } } limit = m_sreg[index].limit; if (m_sreg[index].flags & 0x8000) //G bit { limit >>= 12; } WRITE16(ea + 0, limit); WRITE32(ea + 2, m_sreg[index].base); WRITE16(ea + 5, m_sreg[index].flags); //replace top 8 bits of base WRITE8(ea + 7, m_sreg[index].base >> 24); WRITE16(ea + 8, m_sreg[index].selector); } else { i386_trap(6, 0, 0); } CYCLES(1); // TODO: correct cycle count } static void I386OP(cyrix_rsdc)() // Opcode 0f 79 { UINT8 modrm = FETCH(); if( modrm < 0xc0 ) { UINT32 ea = GetEA(modrm,0); int index = (modrm >> 3) & 7; UINT16 flags; UINT32 base; UINT32 limit; switch (index) { case 0: { index = ES; break; } case 2: { index = SS; break; } case 3: { index = DS; break; } case 4: { index = FS; break; } case 5: { index = GS; break; } default: { i386_trap(6, 0, 0); } } base = (READ32(ea + 2) & 0x00ffffff) | (READ8(ea + 7) << 24); flags = READ16(ea + 5); limit = READ16(ea + 0) | ((flags & 3) << 16); if (flags & 0x8000) //G bit { limit = (limit << 12) | 0xfff; } m_sreg[index].selector = READ16(ea + 8); m_sreg[index].flags = flags; m_sreg[index].base = base; m_sreg[index].limit = limit; } else { i386_trap(6, 0, 0); } CYCLES(1); // TODO: correct cycle count } static void I386OP(cyrix_svldt)() // Opcode 0f 7a { if ( PROTECTED_MODE && !V8086_MODE ) { UINT8 modrm = FETCH(); if( !(modrm & 0xf8) ) { UINT32 ea = GetEA(modrm,0); UINT32 limit = m_ldtr.limit; if (m_ldtr.flags & 0x8000) //G bit { limit >>= 12; } WRITE16(ea + 0, limit); WRITE32(ea + 2, m_ldtr.base); WRITE16(ea + 5, m_ldtr.flags); //replace top 8 bits of base WRITE8(ea + 7, m_ldtr.base >> 24); WRITE16(ea + 8, m_ldtr.segment); } else { i386_trap(6, 0, 0); } } else { i386_trap(6, 0, 0); } CYCLES(1); // TODO: correct cycle count } static void I386OP(cyrix_rsldt)() // Opcode 0f 7b { if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) UINT8 modrm = FETCH(); if( !(modrm & 0xf8) ) { UINT32 ea = GetEA(modrm,0); UINT16 flags = READ16(ea + 5); UINT32 base = (READ32(ea + 2) | 0x00ffffff) | (READ8(ea + 7) << 24); UINT32 limit = READ16(ea + 0) | ((flags & 3) << 16); I386_SREG seg; if (flags & 0x8000) //G bit { limit = (limit << 12) | 0xfff; } memset(&seg, 0, sizeof(seg)); seg.selector = READ16(ea + 8); i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = limit; m_ldtr.base = base; m_ldtr.flags = flags; } else { i386_trap(6, 0, 0); } } else { i386_trap(6, 0, 0); } CYCLES(1); // TODO: correct cycle count } static void I386OP(cyrix_svts)() // Opcode 0f 7c { if ( PROTECTED_MODE ) { UINT8 modrm = FETCH(); if( !(modrm & 0xf8) ) { UINT32 ea = GetEA(modrm,0); UINT32 limit = m_task.limit; if (m_task.flags & 0x8000) //G bit { limit >>= 12; } WRITE16(ea + 0, limit); WRITE32(ea + 2, m_task.base); WRITE16(ea + 5, m_task.flags); //replace top 8 bits of base WRITE8(ea + 7, m_task.base >> 24); WRITE16(ea + 8, m_task.segment); } else { i386_trap(6, 0, 0); } } else { i386_trap(6, 0, 0); } } static void I386OP(cyrix_rsts)() // Opcode 0f 7d { if ( PROTECTED_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) UINT8 modrm = FETCH(); if( !(modrm & 0xf8) ) { UINT32 ea = GetEA(modrm,0); UINT16 flags = READ16(ea + 5); UINT32 base = (READ32(ea + 2) | 0x00ffffff) | (READ8(ea + 7) << 24); UINT32 limit = READ16(ea + 0) | ((flags & 3) << 16); if (flags & 0x8000) //G bit { limit = (limit << 12) | 0xfff; } m_task.segment = READ16(ea + 8); m_task.limit = limit; m_task.base = base; m_task.flags = flags; } else { i386_trap(6, 0, 0); } } else { i386_trap(6, 0, 0); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(movd_r64_rm32)() // Opcode 0f 6e { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).d[0]=LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm, 0); MMX((modrm >> 3) & 0x7).d[0]=READ32(ea); } MMX((modrm >> 3) & 0x7).d[1]=0; CYCLES(1); // TODO: correct cycle count } static void MMXOP(movq_r64_rm64)() // Opcode 0f 6f { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).l=MMX(modrm & 0x7).l; } else { UINT32 ea = GetEA(modrm, 0); READMMX(ea, MMX((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(movd_rm32_r64)() // Opcode 0f 7e { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { STORE_RM32(modrm, MMX((modrm >> 3) & 0x7).d[0]); } else { UINT32 ea = GetEA(modrm, 0); WRITE32(ea, MMX((modrm >> 3) & 0x7).d[0]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(movq_rm64_r64)() // Opcode 0f 7f { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX(modrm & 0x7)=MMX((modrm >> 3) & 0x7); } else { UINT32 ea = GetEA(modrm, 0); WRITEMMX(ea, MMX((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpeqb_r64_rm64)() // Opcode 0f 74 { int c; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (c=0;c <= 7;c++) MMX(d).b[c]=(MMX(d).b[c] == MMX(s).b[c]) ? 0xff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (c=0;c <= 7;c++) MMX(d).b[c]=(MMX(d).b[c] == s.b[c]) ? 0xff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpeqw_r64_rm64)() // Opcode 0f 75 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).w[0]=(MMX(d).w[0] == MMX(s).w[0]) ? 0xffff : 0; MMX(d).w[1]=(MMX(d).w[1] == MMX(s).w[1]) ? 0xffff : 0; MMX(d).w[2]=(MMX(d).w[2] == MMX(s).w[2]) ? 0xffff : 0; MMX(d).w[3]=(MMX(d).w[3] == MMX(s).w[3]) ? 0xffff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).w[0]=(MMX(d).w[0] == s.w[0]) ? 0xffff : 0; MMX(d).w[1]=(MMX(d).w[1] == s.w[1]) ? 0xffff : 0; MMX(d).w[2]=(MMX(d).w[2] == s.w[2]) ? 0xffff : 0; MMX(d).w[3]=(MMX(d).w[3] == s.w[3]) ? 0xffff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpeqd_r64_rm64)() // Opcode 0f 76 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).d[0]=(MMX(d).d[0] == MMX(s).d[0]) ? 0xffffffff : 0; MMX(d).d[1]=(MMX(d).d[1] == MMX(s).d[1]) ? 0xffffffff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).d[0]=(MMX(d).d[0] == s.d[0]) ? 0xffffffff : 0; MMX(d).d[1]=(MMX(d).d[1] == s.d[1]) ? 0xffffffff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pshufw_r64_rm64_i8)() // Opcode 0f 70 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX_REG t; int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q=MMX(s).q; MMX(d).w[0]=t.w[imm8 & 3]; MMX(d).w[1]=t.w[(imm8 >> 2) & 3]; MMX(d).w[2]=t.w[(imm8 >> 4) & 3]; MMX(d).w[3]=t.w[(imm8 >> 6) & 3]; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READMMX(ea, s); MMX(d).w[0]=s.w[imm8 & 3]; MMX(d).w[1]=s.w[(imm8 >> 2) & 3]; MMX(d).w[2]=s.w[(imm8 >> 4) & 3]; MMX(d).w[3]=s.w[(imm8 >> 6) & 3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(punpcklbw_r128_rm128)() // Opcode 66 0f 60 { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM_REG xd,xs; int s, d; s = modrm & 0x7; d = (modrm >> 3) & 0x7; xd.l[0] = XMM(d).l[0]; xs.l[0] = XMM(s).l[0]; XMM(d).b[0] = xd.b[0]; XMM(d).b[1] = xs.b[0]; XMM(d).b[2] = xd.b[1]; XMM(d).b[3] = xs.b[1]; XMM(d).b[4] = xd.b[2]; XMM(d).b[5] = xs.b[2]; XMM(d).b[6] = xd.b[3]; XMM(d).b[7] = xs.b[3]; XMM(d).b[8] = xd.b[4]; XMM(d).b[9] = xs.b[4]; XMM(d).b[10] = xd.b[5]; XMM(d).b[11] = xs.b[5]; XMM(d).b[12] = xd.b[6]; XMM(d).b[13] = xs.b[6]; XMM(d).b[14] = xd.b[7]; XMM(d).b[15] = xs.b[7]; } else { XMM_REG xd, xs; int d = (modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); xd.l[0] = XMM(d).l[0]; xs.q[0] = READ64(ea); for (int n = 0; n < 8; n++) { XMM(d).b[n << 1] = xd.b[n]; XMM(d).b[(n << 1) | 1] = xs.b[n]; } } CYCLES(1); // TODO: correct cycle count } static void SSEOP(punpcklwd_r128_rm128)() { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM_REG xd, xs; int s, d; s = modrm & 0x7; d = (modrm >> 3) & 0x7; xd.l[0] = XMM(d).l[0]; xs.l[0] = XMM(s).l[0]; for (int n = 0; n < 4; n++) { XMM(d).w[n << 1] = xd.w[n]; XMM(d).w[(n << 1) | 1] = xs.w[n]; } } else { XMM_REG xd, xs; int d = (modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); xd.l[0] = XMM(d).l[0]; xs.q[0] = READ64(ea); for (int n = 0; n < 4; n++) { XMM(d).w[n << 1] = xd.w[n]; XMM(d).w[(n << 1) | 1] = xs.w[n]; } } CYCLES(1); // TODO: correct cycle count } static void SSEOP(punpckldq_r128_rm128)() { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM_REG xd, xs; int s, d; s = modrm & 0x7; d = (modrm >> 3) & 0x7; xd.l[0] = XMM(d).l[0]; xs.l[0] = XMM(s).l[0]; for (int n = 0; n < 2; n++) { XMM(d).d[n << 1] = xd.d[n]; XMM(d).d[(n << 1) | 1] = xs.d[n]; } } else { XMM_REG xd, xs; int d = (modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); xd.l[0] = XMM(d).l[0]; xs.q[0] = READ64(ea); for (int n = 0; n < 2; n++) { XMM(d).d[n << 1] = xd.d[n]; XMM(d).d[(n << 1) | 1] = xs.d[n]; } } CYCLES(1); // TODO: correct cycle count } static void SSEOP(punpcklqdq_r128_rm128)() { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM_REG xd, xs; int s, d; s = modrm & 0x7; d = (modrm >> 3) & 0x7; xd.l[0] = XMM(d).l[0]; xs.l[0] = XMM(s).l[0]; XMM(d).q[0] = xd.q[0]; XMM(d).q[1] = xs.q[0]; } else { XMM_REG xd, xs; int d = (modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); xd.l[0] = XMM(d).l[0]; xs.q[0] = READ64(ea); XMM(d).q[0] = xd.q[0]; XMM(d).q[1] = xs.q[0]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpcklbw_r64_r64m32)() // Opcode 0f 60 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t=MMX(d).d[0]; MMX(d).b[0]=t & 0xff; MMX(d).b[1]=MMX(s).b[0]; MMX(d).b[2]=(t >> 8) & 0xff; MMX(d).b[3]=MMX(s).b[1]; MMX(d).b[4]=(t >> 16) & 0xff; MMX(d).b[5]=MMX(s).b[2]; MMX(d).b[6]=(t >> 24) & 0xff; MMX(d).b[7]=MMX(s).b[3]; } else { UINT32 s,t; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); s = READ32(ea); t=MMX(d).d[0]; MMX(d).b[0]=t & 0xff; MMX(d).b[1]=s & 0xff; MMX(d).b[2]=(t >> 8) & 0xff; MMX(d).b[3]=(s >> 8) & 0xff; MMX(d).b[4]=(t >> 16) & 0xff; MMX(d).b[5]=(s >> 16) & 0xff; MMX(d).b[6]=(t >> 24) & 0xff; MMX(d).b[7]=(s >> 24) & 0xff; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpcklwd_r64_r64m32)() // Opcode 0f 61 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t=MMX(d).w[1]; MMX(d).w[0]=MMX(d).w[0]; MMX(d).w[1]=MMX(s).w[0]; MMX(d).w[2]=t; MMX(d).w[3]=MMX(s).w[1]; } else { UINT32 s; UINT16 t; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); s = READ32(ea); t=MMX(d).w[1]; MMX(d).w[0]=MMX(d).w[0]; MMX(d).w[1]=s & 0xffff; MMX(d).w[2]=t; MMX(d).w[3]=(s >> 16) & 0xffff; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpckldq_r64_r64m32)() // Opcode 0f 62 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).d[0]=MMX(d).d[0]; MMX(d).d[1]=MMX(s).d[0]; } else { UINT32 s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); s = READ32(ea); MMX(d).d[0]=MMX(d).d[0]; MMX(d).d[1]=s; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(packsswb_r64_rm64)() // Opcode 0f 63 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).c[0]=SaturatedSignedWordToSignedByte(MMX(d).s[0]); MMX(d).c[1]=SaturatedSignedWordToSignedByte(MMX(d).s[1]); MMX(d).c[2]=SaturatedSignedWordToSignedByte(MMX(d).s[2]); MMX(d).c[3]=SaturatedSignedWordToSignedByte(MMX(d).s[3]); MMX(d).c[4]=SaturatedSignedWordToSignedByte(MMX(s).s[0]); MMX(d).c[5]=SaturatedSignedWordToSignedByte(MMX(s).s[1]); MMX(d).c[6]=SaturatedSignedWordToSignedByte(MMX(s).s[2]); MMX(d).c[7]=SaturatedSignedWordToSignedByte(MMX(s).s[3]); } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).c[0]=SaturatedSignedWordToSignedByte(MMX(d).s[0]); MMX(d).c[1]=SaturatedSignedWordToSignedByte(MMX(d).s[1]); MMX(d).c[2]=SaturatedSignedWordToSignedByte(MMX(d).s[2]); MMX(d).c[3]=SaturatedSignedWordToSignedByte(MMX(d).s[3]); MMX(d).c[4]=SaturatedSignedWordToSignedByte(s.s[0]); MMX(d).c[5]=SaturatedSignedWordToSignedByte(s.s[1]); MMX(d).c[6]=SaturatedSignedWordToSignedByte(s.s[2]); MMX(d).c[7]=SaturatedSignedWordToSignedByte(s.s[3]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpgtb_r64_rm64)() // Opcode 0f 64 { int c; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (c=0;c <= 7;c++) MMX(d).b[c]=(MMX(d).c[c] > MMX(s).c[c]) ? 0xff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (c=0;c <= 7;c++) MMX(d).b[c]=(MMX(d).c[c] > s.c[c]) ? 0xff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpgtw_r64_rm64)() // Opcode 0f 65 { int c; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (c=0;c <= 3;c++) MMX(d).w[c]=(MMX(d).s[c] > MMX(s).s[c]) ? 0xffff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (c=0;c <= 3;c++) MMX(d).w[c]=(MMX(d).s[c] > s.s[c]) ? 0xffff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpgtd_r64_rm64)() // Opcode 0f 66 { int c; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (c=0;c <= 1;c++) MMX(d).d[c]=(MMX(d).i[c] > MMX(s).i[c]) ? 0xffffffff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (c=0;c <= 1;c++) MMX(d).d[c]=(MMX(d).i[c] > s.i[c]) ? 0xffffffff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(packuswb_r64_rm64)() // Opcode 0f 67 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX_REG ds, sd; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; ds.q = MMX(d).q; sd.q = MMX(s).q; MMX(d).b[0]=SaturatedSignedWordToUnsignedByte(ds.s[0]); MMX(d).b[1]=SaturatedSignedWordToUnsignedByte(ds.s[1]); MMX(d).b[2]=SaturatedSignedWordToUnsignedByte(ds.s[2]); MMX(d).b[3]=SaturatedSignedWordToUnsignedByte(ds.s[3]); MMX(d).b[4]=SaturatedSignedWordToUnsignedByte(sd.s[0]); MMX(d).b[5]=SaturatedSignedWordToUnsignedByte(sd.s[1]); MMX(d).b[6]=SaturatedSignedWordToUnsignedByte(sd.s[2]); MMX(d).b[7]=SaturatedSignedWordToUnsignedByte(sd.s[3]); } else { MMX_REG s,t; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); t.q = MMX(d).q; MMX(d).b[0]=SaturatedSignedWordToUnsignedByte(t.s[0]); MMX(d).b[1]=SaturatedSignedWordToUnsignedByte(t.s[1]); MMX(d).b[2]=SaturatedSignedWordToUnsignedByte(t.s[2]); MMX(d).b[3]=SaturatedSignedWordToUnsignedByte(t.s[3]); MMX(d).b[4]=SaturatedSignedWordToUnsignedByte(s.s[0]); MMX(d).b[5]=SaturatedSignedWordToUnsignedByte(s.s[1]); MMX(d).b[6]=SaturatedSignedWordToUnsignedByte(s.s[2]); MMX(d).b[7]=SaturatedSignedWordToUnsignedByte(s.s[3]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpckhbw_r64_rm64)() // Opcode 0f 68 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).b[0]=MMX(d).b[4]; MMX(d).b[1]=MMX(s).b[4]; MMX(d).b[2]=MMX(d).b[5]; MMX(d).b[3]=MMX(s).b[5]; MMX(d).b[4]=MMX(d).b[6]; MMX(d).b[5]=MMX(s).b[6]; MMX(d).b[6]=MMX(d).b[7]; MMX(d).b[7]=MMX(s).b[7]; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).b[0]=MMX(d).b[4]; MMX(d).b[1]=s.b[4]; MMX(d).b[2]=MMX(d).b[5]; MMX(d).b[3]=s.b[5]; MMX(d).b[4]=MMX(d).b[6]; MMX(d).b[5]=s.b[6]; MMX(d).b[6]=MMX(d).b[7]; MMX(d).b[7]=s.b[7]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpckhwd_r64_rm64)() // Opcode 0f 69 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).w[0]=MMX(d).w[2]; MMX(d).w[1]=MMX(s).w[2]; MMX(d).w[2]=MMX(d).w[3]; MMX(d).w[3]=MMX(s).w[3]; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).w[0]=MMX(d).w[2]; MMX(d).w[1]=s.w[2]; MMX(d).w[2]=MMX(d).w[3]; MMX(d).w[3]=s.w[3]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpckhdq_r64_rm64)() // Opcode 0f 6a { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).d[0]=MMX(d).d[1]; MMX(d).d[1]=MMX(s).d[1]; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).d[0]=MMX(d).d[1]; MMX(d).d[1]=s.d[1]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(packssdw_r64_rm64)() // Opcode 0f 6b { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; INT32 t1, t2, t3, t4; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t1 = MMX(d).i[0]; t2 = MMX(d).i[1]; t3 = MMX(s).i[0]; t4 = MMX(s).i[1]; MMX(d).s[0] = SaturatedSignedDwordToSignedWord(t1); MMX(d).s[1] = SaturatedSignedDwordToSignedWord(t2); MMX(d).s[2] = SaturatedSignedDwordToSignedWord(t3); MMX(d).s[3] = SaturatedSignedDwordToSignedWord(t4); } else { MMX_REG s; INT32 t1, t2; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); t1 = MMX(d).i[0]; t2 = MMX(d).i[1]; MMX(d).s[0] = SaturatedSignedDwordToSignedWord(t1); MMX(d).s[1] = SaturatedSignedDwordToSignedWord(t2); MMX(d).s[2] = SaturatedSignedDwordToSignedWord(s.i[0]); MMX(d).s[3] = SaturatedSignedDwordToSignedWord(s.i[1]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(group_0fae)() // Opcode 0f ae { UINT8 modm = FETCH(); if( modm == 0xf8 ) { logerror("Unemulated SFENCE opcode called\n"); CYCLES(1); // sfence instruction } else if( modm == 0xf0 ) { CYCLES(1); // mfence instruction } else if( modm == 0xe8 ) { CYCLES(1); // lfence instruction } else if( modm < 0xc0 ) { UINT32 ea; switch ( (modm & 0x38) >> 3 ) { case 2: // ldmxcsr m32 ea = GetEA(modm, 0); m_mxcsr = READ32(ea); break; case 3: // stmxcsr m32 ea = GetEA(modm, 0); WRITE32(ea, m_mxcsr); break; case 7: // clflush m8 GetNonTranslatedEA(modm, NULL); break; default: report_invalid_modrm("sse_group_0fae", modm); } } else { report_invalid_modrm("sse_group_0fae", modm); } } static void SSEOP(cvttps2dq_r128_rm128)() // Opcode f3 0f 5b { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).i[0]=(INT32)XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).i[1]=(INT32)XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).i[2]=(INT32)XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).i[3]=(INT32)XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).i[0]=(INT32)src.f[0]; XMM((modrm >> 3) & 0x7).i[1]=(INT32)src.f[1]; XMM((modrm >> 3) & 0x7).i[2]=(INT32)src.f[2]; XMM((modrm >> 3) & 0x7).i[3]=(INT32)src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtss2sd_r128_r128m32)() // Opcode f3 0f 5a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM(modrm & 0x7).f[0]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0] = READ32(ea); XMM((modrm >> 3) & 0x7).f64[0] = s.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvttss2si_r32_r128m32)() // Opcode f3 0f 2c { INT32 src; UINT8 modrm = FETCH(); // get mordm byte if( modrm >= 0xc0 ) { // if bits 7-6 are 11 the source is a xmm register (low doubleword) src = (INT32)XMM(modrm & 0x7).f[0^NATIVE_ENDIAN_VALUE_LE_BE(0,1)]; } else { // otherwise is a memory address XMM_REG t; UINT32 ea = GetEA(modrm, 0); t.d[0] = READ32(ea); src = (INT32)t.f[0]; } STORE_REG32(modrm, (UINT32)src); CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtss2si_r32_r128m32)() // Opcode f3 0f 2d { INT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = (INT32)XMM(modrm & 0x7).f[0]; } else { XMM_REG t; UINT32 ea = GetEA(modrm, 0); t.d[0] = READ32(ea); src = (INT32)t.f[0]; } STORE_REG32(modrm, (UINT32)src); CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtsi2ss_r128_rm32)() // Opcode f3 0f 2a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = (INT32)LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm, 0); XMM((modrm >> 3) & 0x7).f[0] = (INT32)READ32(ea); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtpi2ps_r128_rm64)() // Opcode 0f 2a { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = (float)MMX(modrm & 0x7).i[0]; XMM((modrm >> 3) & 0x7).f[1] = (float)MMX(modrm & 0x7).i[1]; } else { MMX_REG r; UINT32 ea = GetEA(modrm, 0); READMMX(ea, r); XMM((modrm >> 3) & 0x7).f[0] = (float)r.i[0]; XMM((modrm >> 3) & 0x7).f[1] = (float)r.i[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvttps2pi_r64_r128m64)() // Opcode 0f 2c { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0]; MMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); XMM((modrm >> 3) & 0x7).i[0] = r.f[0]; XMM((modrm >> 3) & 0x7).i[1] = r.f[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtps2pi_r64_r128m64)() // Opcode 0f 2d { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0]; MMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); XMM((modrm >> 3) & 0x7).i[0] = r.f[0]; XMM((modrm >> 3) & 0x7).i[1] = r.f[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtps2pd_r128_r128m64)() // Opcode 0f 5a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = (double)XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)XMM(modrm & 0x7).f[1]; } else { MMX_REG r; UINT32 ea = GetEA(modrm, 0); READMMX(ea, r); XMM((modrm >> 3) & 0x7).f64[0] = (double)r.f[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)r.f[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtdq2ps_r128_rm128)() // Opcode 0f 5b { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = (float)XMM(modrm & 0x7).i[0]; XMM((modrm >> 3) & 0x7).f[1] = (float)XMM(modrm & 0x7).i[1]; XMM((modrm >> 3) & 0x7).f[2] = (float)XMM(modrm & 0x7).i[2]; XMM((modrm >> 3) & 0x7).f[3] = (float)XMM(modrm & 0x7).i[3]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); XMM((modrm >> 3) & 0x7).f[0] = (float)r.i[0]; XMM((modrm >> 3) & 0x7).f[1] = (float)r.i[1]; XMM((modrm >> 3) & 0x7).f[2] = (float)r.i[2]; XMM((modrm >> 3) & 0x7).f[3] = (float)r.i[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtdq2pd_r128_r128m64)() // Opcode f3 0f e6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = (double)XMM(modrm & 0x7).i[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)XMM(modrm & 0x7).i[1]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); XMM((modrm >> 3) & 0x7).f64[0] = (double)s.i[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)s.i[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movss_r128_rm128)() // Opcode f3 0f 10 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[0]; } else { UINT32 ea = GetEA(modrm, 0); XMM((modrm >> 3) & 0x7).d[0] = READ32(ea); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movss_rm128_r128)() // Opcode f3 0f 11 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0]; } else { UINT32 ea = GetEA(modrm, 0); WRITE32(ea, XMM((modrm >> 3) & 0x7).d[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movsldup_r128_rm128)() // Opcode f3 0f 12 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[0]; XMM((modrm >> 3) & 0x7).d[1] = XMM(modrm & 0x7).d[0]; XMM((modrm >> 3) & 0x7).d[2] = XMM(modrm & 0x7).d[2]; XMM((modrm >> 3) & 0x7).d[3] = XMM(modrm & 0x7).d[2]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).d[0] = src.d[0]; XMM((modrm >> 3) & 0x7).d[1] = src.d[0]; XMM((modrm >> 3) & 0x7).d[2] = src.d[2]; XMM((modrm >> 3) & 0x7).d[3] = src.d[2]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movshdup_r128_rm128)() // Opcode f3 0f 16 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[1]; XMM((modrm >> 3) & 0x7).d[1] = XMM(modrm & 0x7).d[1]; XMM((modrm >> 3) & 0x7).d[2] = XMM(modrm & 0x7).d[3]; XMM((modrm >> 3) & 0x7).d[3] = XMM(modrm & 0x7).d[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).d[0] = src.d[1]; XMM((modrm >> 3) & 0x7).d[1] = src.d[1]; XMM((modrm >> 3) & 0x7).d[2] = src.d[3]; XMM((modrm >> 3) & 0x7).d[3] = src.d[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movaps_r128_rm128)() // Opcode 0f 28 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7); } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movaps_rm128_r128)() // Opcode 0f 29 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7); } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movups_r128_rm128)() // Opcode 0f 10 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7); } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movupd_r128_rm128)() // Opcode 66 0f 10 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7); } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movups_rm128_r128)() // Opcode 0f 11 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7); } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movupd_rm128_r128)() // Opcode 66 0f 11 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7); } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movlps_r128_m64)() // Opcode 0f 12 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // MOVHLPS opcode XMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[1]; CYCLES(1); // TODO: correct cycle count } else { // MOVLPS opcode UINT32 ea = GetEA(modrm, 0); READXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movlpd_r128_m64)() // Opcode 66 0f 12 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { CYCLES(1); // TODO: correct cycle count } else { // MOVLPS opcode UINT32 ea = GetEA(modrm, 0); READXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movlps_m64_r128)() // Opcode 0f 13 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movlpd_m64_r128)() // Opcode 66 0f 13 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movhps_r128_m64)() // Opcode 0f 16 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // MOVLHPS opcode XMM((modrm >> 3) & 0x7).q[1] = XMM(modrm & 0x7).q[0]; CYCLES(1); // TODO: correct cycle count } else { // MOVHPS opcode UINT32 ea = GetEA(modrm, 0); READXMM_HI64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movhpd_r128_m64)() // Opcode 66 0f 16 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { // MOVHPS opcode UINT32 ea = GetEA(modrm, 0); READXMM_HI64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movhps_m64_r128)() // Opcode 0f 17 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM_HI64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movhpd_m64_r128)() // Opcode 66 0f 17 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM_HI64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movntps_m128_r128)() // Opcode 0f 2b { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movmskps_r16_r128)() // Opcode 0f 50 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(XMM(modrm & 0x7).d[0] >> 31) & 1; b=b | ((XMM(modrm & 0x7).d[1] >> 30) & 2); b=b | ((XMM(modrm & 0x7).d[2] >> 29) & 4); b=b | ((XMM(modrm & 0x7).d[3] >> 28) & 8); STORE_REG16(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movmskps_r32_r128)() // Opcode 0f 50 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(XMM(modrm & 0x7).d[0] >> 31) & 1; b=b | ((XMM(modrm & 0x7).d[1] >> 30) & 2); b=b | ((XMM(modrm & 0x7).d[2] >> 29) & 4); b=b | ((XMM(modrm & 0x7).d[3] >> 28) & 8); STORE_REG32(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movmskpd_r32_r128)() // Opcode 66 0f 50 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(XMM(modrm & 0x7).q[0] >> 63) & 1; b=b | ((XMM(modrm & 0x7).q[1] >> 62) & 2); STORE_REG32(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movq2dq_r128_r64)() // Opcode f3 0f d6 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = MMX(modrm & 7).q; XMM((modrm >> 3) & 0x7).q[1] = 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movdqu_r128_rm128)() // Opcode f3 0f 6f { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM(modrm & 0x7).q[1]; } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movdqu_rm128_r128)() // Opcode f3 0f 7f { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0]; XMM(modrm & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1]; } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movd_m128_rm32)() // Opcode 66 0f 6e { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM((modrm >> 3) & 0x7).d[0] = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm, 0); XMM((modrm >> 3) & 0x7).d[0] = READ32(ea); } XMM((modrm >> 3) & 0x7).d[1] = 0; XMM((modrm >> 3) & 0x7).q[1] = 0; CYCLES(1); // TODO: correct cycle count } static void SSEOP(movdqa_m128_rm128)() // Opcode 66 0f 6f { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM(modrm & 0x7).q[1]; } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movq_r128_r128m64)() // Opcode f3 0f 7e { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = 0; } else { UINT32 ea = GetEA(modrm, 0); XMM((modrm >> 3) & 0x7).q[0] = READ64(ea); XMM((modrm >> 3) & 0x7).q[1] = 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movd_rm32_r128)() // Opcode 66 0f 7e { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { STORE_RM32(modrm, XMM((modrm >> 3) & 0x7).d[0]); } else { UINT32 ea = GetEA(modrm, 0); WRITE32(ea, XMM((modrm >> 3) & 0x7).d[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movdqa_rm128_r128)() // Opcode 66 0f 7f { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM(modrm & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0]; XMM(modrm & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1]; } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmovmskb_r16_r64)() // Opcode 0f d7 { //MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(MMX(modrm & 0x7).b[0] >> 7) & 1; b=b | ((MMX(modrm & 0x7).b[1] >> 6) & 2); b=b | ((MMX(modrm & 0x7).b[2] >> 5) & 4); b=b | ((MMX(modrm & 0x7).b[3] >> 4) & 8); b=b | ((MMX(modrm & 0x7).b[4] >> 3) & 16); b=b | ((MMX(modrm & 0x7).b[5] >> 2) & 32); b=b | ((MMX(modrm & 0x7).b[6] >> 1) & 64); b=b | ((MMX(modrm & 0x7).b[7] >> 0) & 128); STORE_REG16(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmovmskb_r32_r64)() // Opcode 0f d7 { //MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(MMX(modrm & 0x7).b[0] >> 7) & 1; b=b | ((MMX(modrm & 0x7).b[1] >> 6) & 2); b=b | ((MMX(modrm & 0x7).b[2] >> 5) & 4); b=b | ((MMX(modrm & 0x7).b[3] >> 4) & 8); b=b | ((MMX(modrm & 0x7).b[4] >> 3) & 16); b=b | ((MMX(modrm & 0x7).b[5] >> 2) & 32); b=b | ((MMX(modrm & 0x7).b[6] >> 1) & 64); b=b | ((MMX(modrm & 0x7).b[7] >> 0) & 128); STORE_REG32(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmovmskb_r32_r128)() // Opcode 66 0f d7 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 b; b=(XMM(modrm & 0x7).b[0] >> 7) & 1; b=b | ((XMM(modrm & 0x7).b[1] >> 6) & 2); b=b | ((XMM(modrm & 0x7).b[2] >> 5) & 4); b=b | ((XMM(modrm & 0x7).b[3] >> 4) & 8); b=b | ((XMM(modrm & 0x7).b[4] >> 3) & 16); b=b | ((XMM(modrm & 0x7).b[5] >> 2) & 32); b=b | ((XMM(modrm & 0x7).b[6] >> 1) & 64); b=b | ((XMM(modrm & 0x7).b[7] >> 0) & 128); b=b | ((XMM(modrm & 0x7).b[8] << 1) & 256); b=b | ((XMM(modrm & 0x7).b[9] << 2) & 512); b=b | ((XMM(modrm & 0x7).b[10] << 3) & 1024); b=b | ((XMM(modrm & 0x7).b[11] << 4) & 2048); b=b | ((XMM(modrm & 0x7).b[12] << 5) & 4096); b=b | ((XMM(modrm & 0x7).b[13] << 6) & 8192); b=b | ((XMM(modrm & 0x7).b[14] << 7) & 16384); b=b | ((XMM(modrm & 0x7).b[15] << 8) & 32768); STORE_REG32(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(xorps)() // Opcode 0f 57 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0] ^ XMM(modrm & 0x7).d[0]; XMM((modrm >> 3) & 0x7).d[1] = XMM((modrm >> 3) & 0x7).d[1] ^ XMM(modrm & 0x7).d[1]; XMM((modrm >> 3) & 0x7).d[2] = XMM((modrm >> 3) & 0x7).d[2] ^ XMM(modrm & 0x7).d[2]; XMM((modrm >> 3) & 0x7).d[3] = XMM((modrm >> 3) & 0x7).d[3] ^ XMM(modrm & 0x7).d[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0] ^ src.d[0]; XMM((modrm >> 3) & 0x7).d[1] = XMM((modrm >> 3) & 0x7).d[1] ^ src.d[1]; XMM((modrm >> 3) & 0x7).d[2] = XMM((modrm >> 3) & 0x7).d[2] ^ src.d[2]; XMM((modrm >> 3) & 0x7).d[3] = XMM((modrm >> 3) & 0x7).d[3] ^ src.d[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(xorpd_r128_rm128)() // Opcode 66 0f 57 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] ^ XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] ^ XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] ^ src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] ^ src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(addps)() // Opcode 0f 58 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] + XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] + XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] + XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] + src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] + src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] + src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(sqrtps_r128_rm128)() // Opcode 0f 51 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sqrt(XMM(modrm & 0x7).f[0]); XMM((modrm >> 3) & 0x7).f[1] = sqrt(XMM(modrm & 0x7).f[1]); XMM((modrm >> 3) & 0x7).f[2] = sqrt(XMM(modrm & 0x7).f[2]); XMM((modrm >> 3) & 0x7).f[3] = sqrt(XMM(modrm & 0x7).f[3]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = sqrt(src.f[0]); XMM((modrm >> 3) & 0x7).f[1] = sqrt(src.f[1]); XMM((modrm >> 3) & 0x7).f[2] = sqrt(src.f[2]); XMM((modrm >> 3) & 0x7).f[3] = sqrt(src.f[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(rsqrtps_r128_rm128)() // Opcode 0f 52 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(XMM(modrm & 0x7).f[0]); XMM((modrm >> 3) & 0x7).f[1] = 1.0 / sqrt(XMM(modrm & 0x7).f[1]); XMM((modrm >> 3) & 0x7).f[2] = 1.0 / sqrt(XMM(modrm & 0x7).f[2]); XMM((modrm >> 3) & 0x7).f[3] = 1.0 / sqrt(XMM(modrm & 0x7).f[3]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(src.f[0]); XMM((modrm >> 3) & 0x7).f[1] = 1.0 / sqrt(src.f[1]); XMM((modrm >> 3) & 0x7).f[2] = 1.0 / sqrt(src.f[2]); XMM((modrm >> 3) & 0x7).f[3] = 1.0 / sqrt(src.f[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(rcpps_r128_rm128)() // Opcode 0f 53 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = 1.0 / XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = 1.0 / XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = 1.0 / XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = 1.0 / XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = 1.0 / src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = 1.0 / src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = 1.0 / src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = 1.0 / src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(andps_r128_rm128)() // Opcode 0f 54 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(andpd_r128_rm128)() // Opcode 66 0f 54 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(andnps_r128_rm128)() // Opcode 0f 55 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(andnpd_r128_rm128)() // Opcode 66 0f 55 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(orps_r128_rm128)() // Opcode 0f 56 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(orpd_r128_rm128)() // Opcode 66 0f 56 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(mulps)() // Opcode 0f 59 ???? { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] * XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] * XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] * XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] * src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] * src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] * src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(subps)() // Opcode 0f 5c { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] - XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] - XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] - XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] - src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] - src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] - src.f[3]; } CYCLES(1); // TODO: correct cycle count } INLINE float sse_min_single(float src1, float src2) { /*if ((src1 == 0) && (src2 == 0)) return src2; if (src1 = SNaN) return src2; if (src2 = SNaN) return src2;*/ if (src1 < src2) return src1; return src2; } INLINE double sse_min_double(double src1, double src2) { /*if ((src1 == 0) && (src2 == 0)) return src2; if (src1 = SNaN) return src2; if (src2 = SNaN) return src2;*/ if (src1 < src2) return src1; return src2; } static void SSEOP(minps)() // Opcode 0f 5d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sse_min_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]); XMM((modrm >> 3) & 0x7).f[1] = sse_min_single(XMM((modrm >> 3) & 0x7).f[1], XMM(modrm & 0x7).f[1]); XMM((modrm >> 3) & 0x7).f[2] = sse_min_single(XMM((modrm >> 3) & 0x7).f[2], XMM(modrm & 0x7).f[2]); XMM((modrm >> 3) & 0x7).f[3] = sse_min_single(XMM((modrm >> 3) & 0x7).f[3], XMM(modrm & 0x7).f[3]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = sse_min_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]); XMM((modrm >> 3) & 0x7).f[1] = sse_min_single(XMM((modrm >> 3) & 0x7).f[1], src.f[1]); XMM((modrm >> 3) & 0x7).f[2] = sse_min_single(XMM((modrm >> 3) & 0x7).f[2], src.f[2]); XMM((modrm >> 3) & 0x7).f[3] = sse_min_single(XMM((modrm >> 3) & 0x7).f[3], src.f[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(divps)() // Opcode 0f 5e { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] / XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] / XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] / XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] / src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] / src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] / src.f[3]; } CYCLES(1); // TODO: correct cycle count } INLINE float sse_max_single(float src1, float src2) { /*if ((src1 == 0) && (src2 == 0)) return src2; if (src1 = SNaN) return src2; if (src2 = SNaN) return src2;*/ if (src1 > src2) return src1; return src2; } INLINE double sse_max_double(double src1, double src2) { /*if ((src1 == 0) && (src2 == 0)) return src2; if (src1 = SNaN) return src2; if (src2 = SNaN) return src2;*/ if (src1 > src2) return src1; return src2; } static void SSEOP(maxps)() // Opcode 0f 5f { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]); XMM((modrm >> 3) & 0x7).f[1] = sse_max_single(XMM((modrm >> 3) & 0x7).f[1], XMM(modrm & 0x7).f[1]); XMM((modrm >> 3) & 0x7).f[2] = sse_max_single(XMM((modrm >> 3) & 0x7).f[2], XMM(modrm & 0x7).f[2]); XMM((modrm >> 3) & 0x7).f[3] = sse_max_single(XMM((modrm >> 3) & 0x7).f[3], XMM(modrm & 0x7).f[3]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]); XMM((modrm >> 3) & 0x7).f[1] = sse_max_single(XMM((modrm >> 3) & 0x7).f[1], src.f[1]); XMM((modrm >> 3) & 0x7).f[2] = sse_max_single(XMM((modrm >> 3) & 0x7).f[2], src.f[2]); XMM((modrm >> 3) & 0x7).f[3] = sse_max_single(XMM((modrm >> 3) & 0x7).f[3], src.f[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(maxss_r128_r128m32)() // Opcode f3 0f 5f { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); src.d[0]=READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(addss)() // Opcode f3 0f 58 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + XMM(modrm & 0x7).f[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + src.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(subss)() // Opcode f3 0f 5c { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - src.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(mulss)() // Opcode f3 0f 5e { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * XMM(modrm & 0x7).f[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * src.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(divss)() // Opcode 0f 59 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / XMM(modrm & 0x7).f[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / src.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(rcpss_r128_r128m32)() // Opcode f3 0f 53 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = 1.0 / XMM(modrm & 0x7).f[0]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0]=READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = 1.0 / s.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(sqrtss_r128_r128m32)() // Opcode f3 0f 51 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sqrt(XMM(modrm & 0x7).f[0]); } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0]=READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = sqrt(s.f[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(rsqrtss_r128_r128m32)() // Opcode f3 0f 52 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(XMM(modrm & 0x7).f[0]); } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0]=READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(s.f[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(minss_r128_r128m32)() // Opcode f3 0f 5d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((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]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0] = READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] < s.f[0] ? XMM((modrm >> 3) & 0x7).f[0] : s.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(comiss_r128_r128m32)() // Opcode 0f 2f { float32 a,b; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { a = XMM((modrm >> 3) & 0x7).d[0]; b = XMM(modrm & 0x7).d[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); a = XMM((modrm >> 3) & 0x7).d[0]; b = src.d[0]; } m_OF=0; m_SF=0; m_AF=0; if (float32_is_nan(a) || float32_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (float32_eq(a, b)) m_ZF = 1; if (float32_lt(a, b)) m_CF = 1; } // should generate exception when at least one of the operands is either QNaN or SNaN CYCLES(1); // TODO: correct cycle count } static void SSEOP(comisd_r128_r128m64)() // Opcode 66 0f 2f { float64 a,b; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { a = XMM((modrm >> 3) & 0x7).q[0]; b = XMM(modrm & 0x7).q[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); a = XMM((modrm >> 3) & 0x7).q[0]; b = src.q[0]; } m_OF=0; m_SF=0; m_AF=0; if (float64_is_nan(a) || float64_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (float64_eq(a, b)) m_ZF = 1; if (float64_lt(a, b)) m_CF = 1; } // should generate exception when at least one of the operands is either QNaN or SNaN CYCLES(1); // TODO: correct cycle count } static void SSEOP(ucomiss_r128_r128m32)() // Opcode 0f 2e { float32 a,b; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { a = XMM((modrm >> 3) & 0x7).d[0]; b = XMM(modrm & 0x7).d[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); a = XMM((modrm >> 3) & 0x7).d[0]; b = src.d[0]; } m_OF=0; m_SF=0; m_AF=0; if (float32_is_nan(a) || float32_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (float32_eq(a, b)) m_ZF = 1; if (float32_lt(a, b)) m_CF = 1; } // should generate exception when at least one of the operands is SNaN CYCLES(1); // TODO: correct cycle count } static void SSEOP(ucomisd_r128_r128m64)() // Opcode 66 0f 2e { float64 a,b; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { a = XMM((modrm >> 3) & 0x7).q[0]; b = XMM(modrm & 0x7).q[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); a = XMM((modrm >> 3) & 0x7).q[0]; b = src.q[0]; } m_OF=0; m_SF=0; m_AF=0; if (float64_is_nan(a) || float64_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (float64_eq(a, b)) m_ZF = 1; if (float64_lt(a, b)) m_CF = 1; } // should generate exception when at least one of the operands is SNaN CYCLES(1); // TODO: correct cycle count } static void SSEOP(shufps)() // Opcode 0f c6 { UINT8 modrm = FETCH(); UINT8 sel = FETCH(); int m1,m2,m3,m4; int s,d; m1=sel & 3; m2=(sel >> 2) & 3; m3=(sel >> 4) & 3; m4=(sel >> 6) & 3; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { UINT32 t1,t2,t3,t4; t1=XMM(d).d[m1]; t2=XMM(d).d[m2]; t3=XMM(s).d[m3]; t4=XMM(s).d[m4]; XMM(d).d[0]=t1; XMM(d).d[1]=t2; XMM(d).d[2]=t3; XMM(d).d[3]=t4; } else { UINT32 t1,t2; XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); t1=XMM(d).d[m1]; t2=XMM(d).d[m2]; XMM(d).d[0]=t1; XMM(d).d[1]=t2; XMM(d).d[2]=src.d[m3]; XMM(d).d[3]=src.d[m4]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(shufpd_r128_rm128_i8)() // Opcode 66 0f c6 { UINT8 modrm = FETCH(); UINT8 sel = FETCH(); int m1,m2; int s,d; m1=sel & 1; m2=(sel >> 1) & 1; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { UINT64 t1,t2; t1=XMM(d).q[m1]; t2=XMM(s).q[m2]; XMM(d).q[0]=t1; XMM(d).q[1]=t2; } else { UINT64 t1; XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); t1=XMM(d).q[m1]; XMM(d).q[0]=t1; XMM(d).q[1]=src.q[m2]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(unpcklps_r128_rm128)() // Opcode 0f 14 { UINT8 modrm = FETCH(); int s,d; UINT32 t1, t2, t3, t4; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { t1 = XMM(s).d[1]; t2 = XMM(d).d[1]; t3 = XMM(s).d[0]; t4 = XMM(d).d[0]; XMM(d).d[3]=t1; XMM(d).d[2]=t2; XMM(d).d[1]=t3; XMM(d).d[0]=t4; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); t2 = XMM(d).d[1]; XMM(d).d[3]=src.d[1]; XMM(d).d[2]=t2; XMM(d).d[1]=src.d[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(unpcklpd_r128_rm128)() // Opcode 66 0f 14 { UINT8 modrm = FETCH(); int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { XMM(d).q[1]=XMM(s).q[0]; XMM(d).q[0]=XMM(d).q[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM(d).q[1]=src.q[0]; XMM(d).q[0]=XMM(d).q[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(unpckhps_r128_rm128)() // Opcode 0f 15 { UINT8 modrm = FETCH(); int s,d; UINT32 t1, t2, t3, t4; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { t1 = XMM(d).d[2]; t2 = XMM(s).d[2]; t3 = XMM(d).d[3]; t4 = XMM(s).d[3]; XMM(d).d[0]=t1; XMM(d).d[1]=t2; XMM(d).d[2]=t3; XMM(d).d[3]=t4; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); t1 = XMM(d).d[2]; t2 = XMM(d).d[3]; XMM(d).d[0]=t1; XMM(d).d[1]=src.d[2]; XMM(d).d[2]=t2; XMM(d).d[3]=src.d[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(unpckhpd_r128_rm128)() // Opcode 66 0f 15 { UINT8 modrm = FETCH(); int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { XMM(d).q[0]=XMM(d).q[1]; XMM(d).q[1]=XMM(s).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM(d).q[0]=XMM(d).q[1]; XMM(d).q[1]=src.q[1]; } CYCLES(1); // TODO: correct cycle count } INLINE bool sse_issingleordered(float op1, float op2) { // TODO: true when at least one of the two source operands being compared is a NaN return (op1 != op1) || (op1 != op2); } INLINE bool sse_issingleunordered(float op1, float op2) { // TODO: true when neither source operand is a NaN return !((op1 != op1) || (op1 != op2)); } INLINE bool sse_isdoubleordered(double op1, double op2) { // TODO: true when at least one of the two source operands being compared is a NaN return (op1 != op1) || (op1 != op2); } INLINE bool sse_isdoubleunordered(double op1, double op2) { // TODO: true when neither source operand is a NaN return !((op1 != op1) || (op1 != op2)); } static void SSEOP(predicate_compare_single)(UINT8 imm8, XMM_REG d, XMM_REG s) { switch (imm8 & 7) { case 0: d.d[0]=d.f[0] == s.f[0] ? 0xffffffff : 0; d.d[1]=d.f[1] == s.f[1] ? 0xffffffff : 0; d.d[2]=d.f[2] == s.f[2] ? 0xffffffff : 0; d.d[3]=d.f[3] == s.f[3] ? 0xffffffff : 0; break; case 1: d.d[0]=d.f[0] < s.f[0] ? 0xffffffff : 0; d.d[1]=d.f[1] < s.f[1] ? 0xffffffff : 0; d.d[2]=d.f[2] < s.f[2] ? 0xffffffff : 0; d.d[3]=d.f[3] < s.f[3] ? 0xffffffff : 0; break; case 2: d.d[0]=d.f[0] <= s.f[0] ? 0xffffffff : 0; d.d[1]=d.f[1] <= s.f[1] ? 0xffffffff : 0; d.d[2]=d.f[2] <= s.f[2] ? 0xffffffff : 0; d.d[3]=d.f[3] <= s.f[3] ? 0xffffffff : 0; break; case 3: d.d[0]=sse_issingleunordered(d.f[0], s.f[0]) ? 0xffffffff : 0; d.d[1]=sse_issingleunordered(d.f[1], s.f[1]) ? 0xffffffff : 0; d.d[2]=sse_issingleunordered(d.f[2], s.f[2]) ? 0xffffffff : 0; d.d[3]=sse_issingleunordered(d.f[3], s.f[3]) ? 0xffffffff : 0; break; case 4: d.d[0]=d.f[0] != s.f[0] ? 0xffffffff : 0; d.d[1]=d.f[1] != s.f[1] ? 0xffffffff : 0; d.d[2]=d.f[2] != s.f[2] ? 0xffffffff : 0; d.d[3]=d.f[3] != s.f[3] ? 0xffffffff : 0; break; case 5: d.d[0]=d.f[0] < s.f[0] ? 0 : 0xffffffff; d.d[1]=d.f[1] < s.f[1] ? 0 : 0xffffffff; d.d[2]=d.f[2] < s.f[2] ? 0 : 0xffffffff; d.d[3]=d.f[3] < s.f[3] ? 0 : 0xffffffff; break; case 6: d.d[0]=d.f[0] <= s.f[0] ? 0 : 0xffffffff; d.d[1]=d.f[1] <= s.f[1] ? 0 : 0xffffffff; d.d[2]=d.f[2] <= s.f[2] ? 0 : 0xffffffff; d.d[3]=d.f[3] <= s.f[3] ? 0 : 0xffffffff; break; case 7: d.d[0]=sse_issingleordered(d.f[0], s.f[0]) ? 0xffffffff : 0; d.d[1]=sse_issingleordered(d.f[1], s.f[1]) ? 0xffffffff : 0; d.d[2]=sse_issingleordered(d.f[2], s.f[2]) ? 0xffffffff : 0; d.d[3]=sse_issingleordered(d.f[3], s.f[3]) ? 0xffffffff : 0; break; } } static void SSEOP(predicate_compare_double)(UINT8 imm8, XMM_REG d, XMM_REG s) { switch (imm8 & 7) { case 0: d.q[0]=d.f64[0] == s.f64[0] ? 0xffffffffffffffff : 0; d.q[1]=d.f64[1] == s.f64[1] ? 0xffffffffffffffff : 0; break; case 1: d.q[0]=d.f64[0] < s.f64[0] ? 0xffffffffffffffff : 0; d.q[1]=d.f64[1] < s.f64[1] ? 0xffffffffffffffff : 0; break; case 2: d.q[0]=d.f64[0] <= s.f64[0] ? 0xffffffffffffffff : 0; d.q[1]=d.f64[1] <= s.f64[1] ? 0xffffffffffffffff : 0; break; case 3: d.q[0]=sse_isdoubleunordered(d.f64[0], s.f64[0]) ? 0xffffffffffffffff : 0; d.q[1]=sse_isdoubleunordered(d.f64[1], s.f64[1]) ? 0xffffffffffffffff : 0; break; case 4: d.q[0]=d.f64[0] != s.f64[0] ? 0xffffffffffffffff : 0; d.q[1]=d.f64[1] != s.f64[1] ? 0xffffffffffffffff : 0; break; case 5: d.q[0]=d.f64[0] < s.f64[0] ? 0 : 0xffffffffffffffff; d.q[1]=d.f64[1] < s.f64[1] ? 0 : 0xffffffffffffffff; break; case 6: d.q[0]=d.f64[0] <= s.f64[0] ? 0 : 0xffffffffffffffff; d.q[1]=d.f64[1] <= s.f64[1] ? 0 : 0xffffffffffffffff; break; case 7: d.q[0]=sse_isdoubleordered(d.f64[0], s.f64[0]) ? 0xffffffffffffffff : 0; d.q[1]=sse_isdoubleordered(d.f64[1], s.f64[1]) ? 0xffffffffffffffff : 0; break; } } static void SSEOP(predicate_compare_single_scalar)(UINT8 imm8, XMM_REG d, XMM_REG s) { switch (imm8 & 7) { case 0: d.d[0]=d.f[0] == s.f[0] ? 0xffffffff : 0; break; case 1: d.d[0]=d.f[0] < s.f[0] ? 0xffffffff : 0; break; case 2: d.d[0]=d.f[0] <= s.f[0] ? 0xffffffff : 0; break; case 3: d.d[0]=sse_issingleunordered(d.f[0], s.f[0]) ? 0xffffffff : 0; break; case 4: d.d[0]=d.f[0] != s.f[0] ? 0xffffffff : 0; break; case 5: d.d[0]=d.f[0] < s.f[0] ? 0 : 0xffffffff; break; case 6: d.d[0]=d.f[0] <= s.f[0] ? 0 : 0xffffffff; break; case 7: d.d[0]=sse_issingleordered(d.f[0], s.f[0]) ? 0xffffffff : 0; break; } } static void SSEOP(predicate_compare_double_scalar)(UINT8 imm8, XMM_REG d, XMM_REG s) { switch (imm8 & 7) { case 0: d.q[0]=d.f64[0] == s.f64[0] ? 0xffffffffffffffff : 0; break; case 1: d.q[0]=d.f64[0] < s.f64[0] ? 0xffffffffffffffff : 0; break; case 2: d.q[0]=d.f64[0] <= s.f64[0] ? 0xffffffffffffffff : 0; break; case 3: d.q[0]=sse_isdoubleunordered(d.f64[0], s.f64[0]) ? 0xffffffffffffffff : 0; break; case 4: d.q[0]=d.f64[0] != s.f64[0] ? 0xffffffffffffffff : 0; break; case 5: d.q[0]=d.f64[0] < s.f64[0] ? 0 : 0xffffffffffffffff; break; case 6: d.q[0]=d.f64[0] <= s.f64[0] ? 0 : 0xffffffffffffffff; break; case 7: d.q[0]=sse_isdoubleordered(d.f64[0], s.f64[0]) ? 0xffffffffffffffff : 0; break; } } static void SSEOP(cmpps_r128_rm128_i8)() // Opcode 0f c2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; sse_predicate_compare_single(imm8, XMM(d), XMM(s)); } else { int d; XMM_REG s; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READXMM(ea, s); d=(modrm >> 3) & 0x7; sse_predicate_compare_single(imm8, XMM(d), s); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cmppd_r128_rm128_i8)() // Opcode 66 0f c2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; sse_predicate_compare_double(imm8, XMM(d), XMM(s)); } else { int d; XMM_REG s; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READXMM(ea, s); d=(modrm >> 3) & 0x7; sse_predicate_compare_double(imm8, XMM(d), s); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cmpss_r128_r128m32_i8)() // Opcode f3 0f c2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; sse_predicate_compare_single_scalar(imm8, XMM(d), XMM(s)); } else { int d; XMM_REG s; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); s.d[0]=READ32(ea); d=(modrm >> 3) & 0x7; sse_predicate_compare_single_scalar(imm8, XMM(d), s); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pinsrw_r64_r16m16_i8)() // Opcode 0f c4, 16bit register { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 imm8 = FETCH(); UINT16 v = LOAD_RM16(modrm); if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).w[imm8 & 7] = v; else MMX((modrm >> 3) & 0x7).w[imm8 & 3] = v; } else { UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); UINT16 v = READ16(ea); if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).w[imm8 & 7] = v; else MMX((modrm >> 3) & 0x7).w[imm8 & 3] = v; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pinsrw_r64_r32m16_i8)() // Opcode 0f c4, 32bit register { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 imm8 = FETCH(); UINT16 v = (UINT16)LOAD_RM32(modrm); MMX((modrm >> 3) & 0x7).w[imm8 & 3] = v; } else { UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); UINT16 v = READ16(ea); MMX((modrm >> 3) & 0x7).w[imm8 & 3] = v; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pinsrw_r128_r32m16_i8)() // Opcode 66 0f c4 { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { UINT8 imm8 = FETCH(); UINT16 v = (UINT16)LOAD_RM32(modrm); XMM((modrm >> 3) & 0x7).w[imm8 & 7] = v; } else { UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); UINT16 v = READ16(ea); XMM((modrm >> 3) & 0x7).w[imm8 & 7] = v; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pextrw_r16_r64_i8)() // Opcode 0f c5 { //MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 imm8 = FETCH(); if (m_xmm_operand_size) STORE_REG16(modrm, XMM(modrm & 0x7).w[imm8 & 7]); else STORE_REG16(modrm, MMX(modrm & 0x7).w[imm8 & 3]); } else { //UINT8 imm8 = FETCH(); report_invalid_modrm("pextrw_r16_r64_i8", modrm); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pextrw_r32_r64_i8)() // Opcode 0f c5 { //MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 imm8 = FETCH(); STORE_REG32(modrm, MMX(modrm & 0x7).w[imm8 & 3]); } else { //UINT8 imm8 = FETCH(); report_invalid_modrm("pextrw_r32_r64_i8", modrm); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pextrw_reg_r128_i8)() // Opcode 66 0f c5 { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { UINT8 imm8 = FETCH(); STORE_REG32(modrm, XMM(modrm & 0x7).w[imm8 & 7]); } else { //UINT8 imm8 = FETCH(); report_invalid_modrm("sse_pextrw_reg_r128_i8", modrm); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pminub_r64_rm64)() // Opcode 0f da { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((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]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] < s.b[n] ? MMX((modrm >> 3) & 0x7).b[n] : s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pminub_r128_rm128)() // Opcode 66 0f da { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((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]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n] = XMM((modrm >> 3) & 0x7).b[n] < s.b[n] ? XMM((modrm >> 3) & 0x7).b[n] : s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmaxub_r64_rm64)() // Opcode 0f de { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((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]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] > s.b[n] ? MMX((modrm >> 3) & 0x7).b[n] : s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pavgb_r64_rm64)() // Opcode 0f e0 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n] = ((UINT16)MMX((modrm >> 3) & 0x7).b[n] + (UINT16)MMX(modrm & 0x7).b[n] + 1) >> 1; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n] = ((UINT16)MMX((modrm >> 3) & 0x7).b[n] + (UINT16)s.b[n] + 1) >> 1; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pavgw_r64_rm64)() // Opcode 0f e3 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n] = ((UINT32)MMX((modrm >> 3) & 0x7).w[n] + (UINT32)MMX(modrm & 0x7).w[n] + 1) >> 1; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n] = ((UINT32)MMX((modrm >> 3) & 0x7).w[n] + (UINT32)s.w[n] + 1) >> 1; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmulhuw_r64_rm64)() // Opcode 0f e4 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).w[0]=((UINT32)MMX((modrm >> 3) & 0x7).w[0]*(UINT32)MMX(modrm & 7).w[0]) >> 16; MMX((modrm >> 3) & 0x7).w[1]=((UINT32)MMX((modrm >> 3) & 0x7).w[1]*(UINT32)MMX(modrm & 7).w[1]) >> 16; MMX((modrm >> 3) & 0x7).w[2]=((UINT32)MMX((modrm >> 3) & 0x7).w[2]*(UINT32)MMX(modrm & 7).w[2]) >> 16; MMX((modrm >> 3) & 0x7).w[3]=((UINT32)MMX((modrm >> 3) & 0x7).w[3]*(UINT32)MMX(modrm & 7).w[3]) >> 16; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).w[0]=((UINT32)MMX((modrm >> 3) & 0x7).w[0]*(UINT32)s.w[0]) >> 16; MMX((modrm >> 3) & 0x7).w[1]=((UINT32)MMX((modrm >> 3) & 0x7).w[1]*(UINT32)s.w[1]) >> 16; MMX((modrm >> 3) & 0x7).w[2]=((UINT32)MMX((modrm >> 3) & 0x7).w[2]*(UINT32)s.w[2]) >> 16; MMX((modrm >> 3) & 0x7).w[3]=((UINT32)MMX((modrm >> 3) & 0x7).w[3]*(UINT32)s.w[3]) >> 16; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pminsw_r64_rm64)() // Opcode 0f ea { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((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]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] < s.s[n] ? MMX((modrm >> 3) & 0x7).s[n] : s.s[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmaxsw_r64_rm64)() // Opcode 0f ee { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((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]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] > s.s[n] ? MMX((modrm >> 3) & 0x7).s[n] : s.s[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmuludq_r64_rm64)() // Opcode 0f f4 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q = (UINT64)MMX((modrm >> 3) & 0x7).d[0] * (UINT64)MMX(modrm & 0x7).d[0]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).q = (UINT64)MMX((modrm >> 3) & 0x7).d[0] * (UINT64)s.d[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmuludq_r128_rm128)() // Opcode 66 0f f4 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = (UINT64)XMM((modrm >> 3) & 0x7).d[0] * (UINT64)XMM(modrm & 0x7).d[0]; XMM((modrm >> 3) & 0x7).q[1] = (UINT64)XMM((modrm >> 3) & 0x7).d[2] * (UINT64)XMM(modrm & 0x7).d[2]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); XMM((modrm >> 3) & 0x7).q[0] = (UINT64)XMM((modrm >> 3) & 0x7).d[0] * (UINT64)s.d[0]; XMM((modrm >> 3) & 0x7).q[1] = (UINT64)XMM((modrm >> 3) & 0x7).d[2] * (UINT64)s.d[2]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psadbw_r64_rm64)() // Opcode 0f f6 { int n; INT32 temp; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { temp=0; for (n=0;n < 8;n++) temp += abs((INT32)MMX((modrm >> 3) & 0x7).b[n] - (INT32)MMX(modrm & 0x7).b[n]); MMX((modrm >> 3) & 0x7).l=(UINT64)temp & 0xffff; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); temp=0; for (n=0;n < 8;n++) temp += abs((INT32)MMX((modrm >> 3) & 0x7).b[n] - (INT32)s.b[n]); MMX((modrm >> 3) & 0x7).l=(UINT64)temp & 0xffff; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubq_r64_rm64)() // Opcode 0f fb { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q - MMX(modrm & 7).q; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q - s.q; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubq_r128_rm128)() // Opcode 66 0f fb { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] - XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] - XMM(modrm & 7).q[1]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] - s.q[0]; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] - s.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pshufd_r128_rm128_i8)() // Opcode 66 0f 70 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[0]=XMM(s).q[0]; t.q[1]=XMM(s).q[1]; XMM(d).d[0]=t.d[imm8 & 3]; XMM(d).d[1]=t.d[(imm8 >> 2) & 3]; XMM(d).d[2]=t.d[(imm8 >> 4) & 3]; XMM(d).d[3]=t.d[(imm8 >> 6) & 3]; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READXMM(ea, s); XMM(d).d[0]=s.d[(imm8 & 3)]; XMM(d).d[1]=s.d[((imm8 >> 2) & 3)]; XMM(d).d[2]=s.d[((imm8 >> 4) & 3)]; XMM(d).d[3]=s.d[((imm8 >> 6) & 3)]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pshuflw_r128_rm128_i8)() // Opcode f2 0f 70 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[0]=XMM(s).q[0]; XMM(d).q[1]=XMM(s).q[1]; XMM(d).w[0]=t.w[imm8 & 3]; XMM(d).w[1]=t.w[(imm8 >> 2) & 3]; XMM(d).w[2]=t.w[(imm8 >> 4) & 3]; XMM(d).w[3]=t.w[(imm8 >> 6) & 3]; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READXMM(ea, s); XMM(d).q[1]=s.q[1]; XMM(d).w[0]=s.w[imm8 & 3]; XMM(d).w[1]=s.w[(imm8 >> 2) & 3]; XMM(d).w[2]=s.w[(imm8 >> 4) & 3]; XMM(d).w[3]=s.w[(imm8 >> 6) & 3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pshufhw_r128_rm128_i8)() // Opcode f3 0f 70 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[0]=XMM(s).q[1]; XMM(d).q[0]=XMM(s).q[0]; XMM(d).w[4]=t.w[imm8 & 3]; XMM(d).w[5]=t.w[(imm8 >> 2) & 3]; XMM(d).w[6]=t.w[(imm8 >> 4) & 3]; XMM(d).w[7]=t.w[(imm8 >> 6) & 3]; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READXMM(ea, s); XMM(d).q[0]=s.q[0]; XMM(d).w[4]=s.w[4 + (imm8 & 3)]; XMM(d).w[5]=s.w[4 + ((imm8 >> 2) & 3)]; XMM(d).w[6]=s.w[4 + ((imm8 >> 4) & 3)]; XMM(d).w[7]=s.w[4 + ((imm8 >> 6) & 3)]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(packsswb_r128_rm128)() // Opcode 66 0f 63 { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM_REG t; int s, d; s = modrm & 0x7; d = (modrm >> 3) & 0x7; t.q[0] = XMM(s).q[0]; t.q[1] = XMM(s).q[1]; for (int n = 0; n < 8; n++) XMM(d).c[n] = SaturatedSignedWordToSignedByte(XMM(d).s[n]); for (int n = 0; n < 8; n++) XMM(d).c[n+8] = SaturatedSignedWordToSignedByte(t.s[n]); } else { XMM_REG s; int d = (modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n = 0; n < 8; n++) XMM(d).c[n] = SaturatedSignedWordToSignedByte(XMM(d).s[n]); for (int n = 0; n < 8; n++) XMM(d).c[n + 8] = SaturatedSignedWordToSignedByte(s.s[n]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(packssdw_r128_rm128)() // Opcode 66 0f 6b { UINT8 modrm = FETCH(); if (modrm >= 0xc0) { XMM_REG t; int s, d; s = modrm & 0x7; d = (modrm >> 3) & 0x7; t.q[0] = XMM(s).q[0]; t.q[1] = XMM(s).q[1]; XMM(d).s[0] = SaturatedSignedDwordToSignedWord(XMM(d).i[0]); XMM(d).s[1] = SaturatedSignedDwordToSignedWord(XMM(d).i[1]); XMM(d).s[2] = SaturatedSignedDwordToSignedWord(XMM(d).i[2]); XMM(d).s[3] = SaturatedSignedDwordToSignedWord(XMM(d).i[3]); XMM(d).s[4] = SaturatedSignedDwordToSignedWord(t.i[0]); XMM(d).s[5] = SaturatedSignedDwordToSignedWord(t.i[1]); XMM(d).s[6] = SaturatedSignedDwordToSignedWord(t.i[2]); XMM(d).s[7] = SaturatedSignedDwordToSignedWord(t.i[3]); } else { XMM_REG s; int d = (modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); XMM(d).s[0] = SaturatedSignedDwordToSignedWord(XMM(d).i[0]); XMM(d).s[1] = SaturatedSignedDwordToSignedWord(XMM(d).i[1]); XMM(d).s[2] = SaturatedSignedDwordToSignedWord(XMM(d).i[2]); XMM(d).s[3] = SaturatedSignedDwordToSignedWord(XMM(d).i[3]); XMM(d).s[4] = SaturatedSignedDwordToSignedWord(s.i[0]); XMM(d).s[5] = SaturatedSignedDwordToSignedWord(s.i[1]); XMM(d).s[6] = SaturatedSignedDwordToSignedWord(s.i[2]); XMM(d).s[7] = SaturatedSignedDwordToSignedWord(s.i[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pcmpgtb_r128_rm128)() // Opcode 66 0f 64 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (int c=0;c <= 15;c++) XMM(d).b[c]=(XMM(d).c[c] > XMM(s).c[c]) ? 0xff : 0; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int c=0;c <= 15;c++) XMM(d).b[c]=(XMM(d).c[c] > s.c[c]) ? 0xff : 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pcmpgtw_r128_rm128)() // Opcode 66 0f 65 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (int c=0;c <= 7;c++) XMM(d).w[c]=(XMM(d).s[c] > XMM(s).s[c]) ? 0xffff : 0; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int c=0;c <= 7;c++) XMM(d).w[c]=(XMM(d).s[c] > s.s[c]) ? 0xffff : 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pcmpgtd_r128_rm128)() // Opcode 66 0f 66 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (int c=0;c <= 3;c++) XMM(d).d[c]=(XMM(d).i[c] > XMM(s).i[c]) ? 0xffffffff : 0; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int c=0;c <= 3;c++) XMM(d).d[c]=(XMM(d).i[c] > s.i[c]) ? 0xffffffff : 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(packuswb_r128_rm128)() // Opcode 66 0f 67 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[0] = XMM(s).q[0]; t.q[1] = XMM(s).q[1]; for (int n = 0; n < 8;n++) XMM(d).b[n]=SaturatedSignedWordToUnsignedByte(XMM(d).s[n]); for (int n = 0; n < 8;n++) XMM(d).b[n+8]=SaturatedSignedWordToUnsignedByte(t.s[n]); } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n = 0; n < 8;n++) XMM(d).b[n]=SaturatedSignedWordToUnsignedByte(XMM(d).s[n]); for (int n = 0; n < 8;n++) XMM(d).b[n+8]=SaturatedSignedWordToUnsignedByte(s.s[n]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(punpckhbw_r128_rm128)() // Opcode 66 0f 68 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[1] = XMM(s).q[1]; for (int n = 0; n < 16; n += 2) { XMM(d).b[n]=XMM(d).b[8+(n >> 1)]; XMM(d).b[n+1]=t.b[8+(n >> 1)]; } } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n = 0; n < 16; n += 2) { XMM(d).b[n]=XMM(d).b[8+(n >> 1)]; XMM(d).b[n+1]=s.b[8+(n >> 1)]; } } CYCLES(1); // TODO: correct cycle count } static void SSEOP(punpckhwd_r128_rm128)() // Opcode 66 0f 69 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[1] = XMM(s).q[1]; for (int n = 0; n < 8; n += 2) { XMM(d).w[n]=XMM(d).w[4+(n >> 1)]; XMM(d).w[n+1]=t.w[4+(n >> 1)]; } } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n = 0; n < 8; n += 2) { XMM(d).w[n]=XMM(d).w[4+(n >> 1)]; XMM(d).w[n+1]=s.w[4+(n >> 1)]; } } CYCLES(1); // TODO: correct cycle count } static void SSEOP(unpckhdq_r128_rm128)() // Opcode 66 0f 6a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[1] = XMM(s).q[1]; XMM(d).d[0]=XMM(d).d[2]; XMM(d).d[1]=t.d[2]; XMM(d).d[2]=XMM(d).d[3]; XMM(d).d[3]=t.d[3]; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); XMM(d).d[0]=XMM(d).d[2]; XMM(d).d[1]=s.d[2]; XMM(d).d[2]=XMM(d).d[3]; XMM(d).d[3]=s.d[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(punpckhqdq_r128_rm128)() // Opcode 66 0f 6d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[1] = XMM(s).q[1]; XMM(d).q[0]=XMM(d).q[1]; XMM(d).q[1]=t.q[1]; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); XMM(d).q[0]=XMM(d).q[1]; XMM(d).q[1]=s.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pcmpeqb_r128_rm128)() // Opcode 66 0f 74 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (int c=0;c <= 15;c++) XMM(d).b[c]=(XMM(d).c[c] == XMM(s).c[c]) ? 0xff : 0; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int c=0;c <= 15;c++) XMM(d).b[c]=(XMM(d).c[c] == s.c[c]) ? 0xff : 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pcmpeqw_r128_rm128)() // Opcode 66 0f 75 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (int c=0;c <= 7;c++) XMM(d).w[c]=(XMM(d).s[c] == XMM(s).s[c]) ? 0xffff : 0; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int c=0;c <= 7;c++) XMM(d).w[c]=(XMM(d).s[c] == s.s[c]) ? 0xffff : 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pcmpeqd_r128_rm128)() // Opcode 66 0f 76 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (int c=0;c <= 3;c++) XMM(d).d[c]=(XMM(d).i[c] == XMM(s).i[c]) ? 0xffffffff : 0; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int c=0;c <= 3;c++) XMM(d).d[c]=(XMM(d).i[c] == s.i[c]) ? 0xffffffff : 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(paddq_r128_rm128)() // Opcode 66 0f d4 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; XMM(d).q[0]=XMM(d).q[0]+XMM(s).q[0]; XMM(d).q[1]=XMM(d).q[1]+XMM(s).q[1]; } else { XMM_REG src; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM(d).q[0]=XMM(d).q[0]+src.q[0]; XMM(d).q[1]=XMM(d).q[1]+src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmullw_r128_rm128)() // Opcode 66 0f d5 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (int n = 0; n < 8;n++) XMM(d).w[n]=(UINT32)((INT32)XMM(d).s[n]*(INT32)XMM(s).s[n]) & 0xffff; } else { XMM_REG src; int d; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); d=(modrm >> 3) & 0x7; for (int n = 0; n < 8;n++) XMM(d).w[n]=(UINT32)((INT32)XMM(d).s[n]*(INT32)src.s[n]) & 0xffff; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(paddb_r128_rm128)() // Opcode 66 0f fc { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] + XMM(modrm & 7).b[n]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] + s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(paddw_r128_rm128)() // Opcode 66 0f fd { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] + XMM(modrm & 7).w[n]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] + s.w[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(paddd_r128_rm128)() // Opcode 66 0f fe { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 4;n++) XMM((modrm >> 3) & 0x7).d[n]=XMM((modrm >> 3) & 0x7).d[n] + XMM(modrm & 7).d[n]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 4;n++) XMM((modrm >> 3) & 0x7).d[n]=XMM((modrm >> 3) & 0x7).d[n] + s.d[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubusb_r128_rm128)() // Opcode 66 0f d8 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((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]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] < src.b[n] ? 0 : XMM((modrm >> 3) & 0x7).b[n]-src.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubusw_r128_rm128)() // Opcode 66 0f d9 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((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]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] < src.w[n] ? 0 : XMM((modrm >> 3) & 0x7).w[n]-src.w[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pand_r128_rm128)() // Opcode 66 0f db { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] & XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] & XMM(modrm & 7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] & src.q[0]; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] & src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pandn_r128_rm128)() // Opcode 66 0f df { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0]=(~XMM((modrm >> 3) & 0x7).q[0]) & XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).q[1]=(~XMM((modrm >> 3) & 0x7).q[1]) & XMM(modrm & 7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0]=(~XMM((modrm >> 3) & 0x7).q[0]) & src.q[0]; XMM((modrm >> 3) & 0x7).q[1]=(~XMM((modrm >> 3) & 0x7).q[1]) & src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(paddusb_r128_rm128)() // Opcode 66 0f dc { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((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]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); for (int n=0;n < 16;n++) XMM((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]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(paddusw_r128_rm128)() // Opcode 66 0f dd { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((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]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); for (int n=0;n < 8;n++) XMM((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]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmaxub_r128_rm128)() // Opcode 66 0f de { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((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]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n] = XMM((modrm >> 3) & 0x7).b[n] > s.b[n] ? XMM((modrm >> 3) & 0x7).b[n] : s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmulhuw_r128_rm128)() // Opcode 66 0f e4 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=((UINT32)XMM((modrm >> 3) & 0x7).w[n]*(UINT32)XMM(modrm & 7).w[n]) >> 16; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=((UINT32)XMM((modrm >> 3) & 0x7).w[n]*(UINT32)s.w[n]) >> 16; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmulhw_r128_rm128)() // Opcode 66 0f e5 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=(UINT32)((INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)XMM(modrm & 7).s[n]) >> 16; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=(UINT32)((INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)src.s[n]) >> 16; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubsb_r128_rm128)() // Opcode 66 0f e8 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)XMM((modrm >> 3) & 0x7).c[n] - (INT16)XMM(modrm & 7).c[n]); } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)XMM((modrm >> 3) & 0x7).c[n] - (INT16)s.c[n]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubsw_r128_rm128)() // Opcode 66 0f e9 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)XMM((modrm >> 3) & 0x7).s[n] - (INT32)XMM(modrm & 7).s[n]); } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)XMM((modrm >> 3) & 0x7).s[n] - (INT32)s.s[n]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pminsw_r128_rm128)() // Opcode 66 0f ea { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((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]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).s[n] = XMM((modrm >> 3) & 0x7).s[n] < s.s[n] ? XMM((modrm >> 3) & 0x7).s[n] : s.s[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmaxsw_r128_rm128)() // Opcode 66 0f ee { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((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]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).s[n] = XMM((modrm >> 3) & 0x7).s[n] > s.s[n] ? XMM((modrm >> 3) & 0x7).s[n] : s.s[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(paddsb_r128_rm128)() // Opcode 66 0f ec { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)XMM((modrm >> 3) & 0x7).c[n] + (INT16)XMM(modrm & 7).c[n]); } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)XMM((modrm >> 3) & 0x7).c[n] + (INT16)s.c[n]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(paddsw_r128_rm128)() // Opcode 66 0f ed { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)XMM((modrm >> 3) & 0x7).s[n] + (INT32)XMM(modrm & 7).s[n]); } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)XMM((modrm >> 3) & 0x7).s[n] + (INT32)s.s[n]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(por_r128_rm128)() // Opcode 66 0f eb { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] | XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] | XMM(modrm & 7).q[1]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] | s.q[0]; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] | s.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pxor_r128_rm128)() // Opcode 66 0f ef { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] ^ XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] ^ XMM(modrm & 7).q[1]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] ^ s.q[0]; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] ^ s.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmaddwd_r128_rm128)() // Opcode 66 0f f5 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 4;n++) XMM((modrm >> 3) & 0x7).i[n]=(INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)XMM(modrm & 7).s[n]+ (INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)XMM(modrm & 7).s[n]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 4;n++) XMM((modrm >> 3) & 0x7).i[n]=(INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)s.s[n]+ (INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)s.s[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubb_r128_rm128)() // Opcode 66 0f f8 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] - XMM(modrm & 7).b[n]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] - s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubw_r128_rm128)() // Opcode 66 0f f9 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] - XMM(modrm & 7).w[n]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] - s.w[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubd_r128_rm128)() // Opcode 66 0f fa { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 4;n++) XMM((modrm >> 3) & 0x7).d[n]=XMM((modrm >> 3) & 0x7).d[n] - XMM(modrm & 7).d[n]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 4;n++) XMM((modrm >> 3) & 0x7).d[n]=XMM((modrm >> 3) & 0x7).d[n] - s.d[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psadbw_r128_rm128)() // Opcode 66 0f f6 { INT32 temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { temp=0; for (int n=0;n < 8;n++) temp += abs((INT32)XMM((modrm >> 3) & 0x7).b[n] - (INT32)XMM(modrm & 0x7).b[n]); XMM((modrm >> 3) & 0x7).l[0]=(UINT64)temp & 0xffff; temp=0; for (int n=8;n < 16;n++) temp += abs((INT32)XMM((modrm >> 3) & 0x7).b[n] - (INT32)XMM(modrm & 0x7).b[n]); XMM((modrm >> 3) & 0x7).l[1]=(UINT64)temp & 0xffff; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); temp=0; for (int n=0;n < 8;n++) temp += abs((INT32)XMM((modrm >> 3) & 0x7).b[n] - (INT32)s.b[n]); XMM((modrm >> 3) & 0x7).l[0]=(UINT64)temp & 0xffff; temp=0; for (int n=8;n < 16;n++) temp += abs((INT32)XMM((modrm >> 3) & 0x7).b[n] - (INT32)s.b[n]); XMM((modrm >> 3) & 0x7).l[1]=(UINT64)temp & 0xffff; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pavgb_r128_rm128)() // Opcode 66 0f e0 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n] = ((UINT16)XMM((modrm >> 3) & 0x7).b[n] + (UINT16)XMM(modrm & 0x7).b[n] + 1) >> 1; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 16;n++) XMM((modrm >> 3) & 0x7).b[n] = ((UINT16)XMM((modrm >> 3) & 0x7).b[n] + (UINT16)s.b[n] + 1) >> 1; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pavgw_r128_rm128)() // Opcode 66 0f e3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n] = ((UINT32)XMM((modrm >> 3) & 0x7).w[n] + (UINT32)XMM(modrm & 0x7).w[n] + 1) >> 1; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); for (int n=0;n < 8;n++) XMM((modrm >> 3) & 0x7).w[n] = ((UINT32)XMM((modrm >> 3) & 0x7).w[n] + (UINT32)s.w[n] + 1) >> 1; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psrlw_r128_rm128)() // Opcode 66 0f d1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)XMM(modrm & 7).q[0]; for (int n=0; n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] >> count; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); int count=(int)src.q[0]; for (int n=0; n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] >> count; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psrld_r128_rm128)() // Opcode 66 0f d2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).d[0]=XMM((modrm >> 3) & 0x7).d[0] >> count; XMM((modrm >> 3) & 0x7).d[1]=XMM((modrm >> 3) & 0x7).d[1] >> count; XMM((modrm >> 3) & 0x7).d[2]=XMM((modrm >> 3) & 0x7).d[2] >> count; XMM((modrm >> 3) & 0x7).d[3]=XMM((modrm >> 3) & 0x7).d[3] >> count; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); int count=(int)src.q[0]; XMM((modrm >> 3) & 0x7).d[0]=XMM((modrm >> 3) & 0x7).d[0] >> count; XMM((modrm >> 3) & 0x7).d[1]=XMM((modrm >> 3) & 0x7).d[1] >> count; XMM((modrm >> 3) & 0x7).d[2]=XMM((modrm >> 3) & 0x7).d[2] >> count; XMM((modrm >> 3) & 0x7).d[3]=XMM((modrm >> 3) & 0x7).d[3] >> count; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psrlq_r128_rm128)() // Opcode 66 0f d3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] >> count; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] >> count; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); int count=(int)src.q[0]; XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] >> count; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] >> count; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psllw_r128_rm128)() // Opcode 66 0f f1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)XMM(modrm & 7).q[0]; for (int n=0; n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] << count; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); int count=(int)s.q[0]; for (int n=0; n < 8;n++) XMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] << count; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pslld_r128_rm128)() // Opcode 66 0f f2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).d[0]=XMM((modrm >> 3) & 0x7).d[0] << count; XMM((modrm >> 3) & 0x7).d[1]=XMM((modrm >> 3) & 0x7).d[1] << count; XMM((modrm >> 3) & 0x7).d[2]=XMM((modrm >> 3) & 0x7).d[2] << count; XMM((modrm >> 3) & 0x7).d[3]=XMM((modrm >> 3) & 0x7).d[3] << count; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); int count=(int)s.q[0]; XMM((modrm >> 3) & 0x7).d[0]=XMM((modrm >> 3) & 0x7).d[0] << count; XMM((modrm >> 3) & 0x7).d[1]=XMM((modrm >> 3) & 0x7).d[1] << count; XMM((modrm >> 3) & 0x7).d[2]=XMM((modrm >> 3) & 0x7).d[2] << count; XMM((modrm >> 3) & 0x7).d[3]=XMM((modrm >> 3) & 0x7).d[3] << count; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psllq_r128_rm128)() // Opcode 66 0f f3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] << count; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] << count; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM(ea, s); int count=(int)s.q[0]; XMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] << count; XMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] << count; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psraw_r128_rm128)() // Opcode 66 0f e1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)XMM(modrm & 7).q[0]; for (int n=0; n < 8;n++) XMM((modrm >> 3) & 0x7).s[n]=XMM((modrm >> 3) & 0x7).s[n] >> count; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); int count=(int)src.q[0]; for (int n=0; n < 8;n++) XMM((modrm >> 3) & 0x7).s[n]=XMM((modrm >> 3) & 0x7).s[n] >> count; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psrad_r128_rm128)() // Opcode 66 0f e2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)XMM(modrm & 7).q[0]; XMM((modrm >> 3) & 0x7).i[0]=XMM((modrm >> 3) & 0x7).i[0] >> count; XMM((modrm >> 3) & 0x7).i[1]=XMM((modrm >> 3) & 0x7).i[1] >> count; XMM((modrm >> 3) & 0x7).i[2]=XMM((modrm >> 3) & 0x7).i[2] >> count; XMM((modrm >> 3) & 0x7).i[3]=XMM((modrm >> 3) & 0x7).i[3] >> count; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); int count=(int)src.q[0]; XMM((modrm >> 3) & 0x7).i[0]=XMM((modrm >> 3) & 0x7).i[0] >> count; XMM((modrm >> 3) & 0x7).i[1]=XMM((modrm >> 3) & 0x7).i[1] >> count; XMM((modrm >> 3) & 0x7).i[2]=XMM((modrm >> 3) & 0x7).i[2] >> count; XMM((modrm >> 3) & 0x7).i[3]=XMM((modrm >> 3) & 0x7).i[3] >> count; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movntdq_m128_r128)() // Opcode 66 0f e7 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { CYCLES(1); // unsupported } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(cvttpd2dq_r128_rm128)() // Opcode 66 0f e6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).i[0]=(INT32)XMM((modrm >> 3) & 0x7).f64[0]; XMM((modrm >> 3) & 0x7).i[1]=(INT32)XMM((modrm >> 3) & 0x7).f64[1]; XMM((modrm >> 3) & 0x7).q[1] = 0; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).i[0]=(INT32)src.f64[0]; XMM((modrm >> 3) & 0x7).i[1]=(INT32)src.f64[1]; XMM((modrm >> 3) & 0x7).q[1] = 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movq_r128m64_r128)() // Opcode 66 0f d6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0]; XMM(modrm & 0x7).q[1] = 0; } else { UINT32 ea = GetEA(modrm, 0); WRITE64(ea, XMM((modrm >> 3) & 0x7).q[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(addsubpd_r128_rm128)() // Opcode 66 0f d0 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s, d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; XMM(d).f64[0]=XMM(d).f64[0]-XMM(s).f64[0]; XMM(d).f64[1]=XMM(d).f64[1]+XMM(s).f64[1]; } else { XMM_REG src; int d; UINT32 ea = GetEA(modrm, 0); d=(modrm >> 3) & 0x7; READXMM(ea, src); XMM(d).f64[0]=XMM(d).f64[0]-src.f64[0]; XMM(d).f64[1]=XMM(d).f64[1]+src.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(haddpd_r128_rm128)() // Opcode 66 0f 7c { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s, d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; XMM(d).f64[0]=XMM(d).f64[0]+XMM(d).f64[1]; XMM(d).f64[1]=XMM(s).f64[0]+XMM(s).f64[1]; } else { XMM_REG src; int d; UINT32 ea = GetEA(modrm, 0); d=(modrm >> 3) & 0x7; READXMM(ea, src); XMM(d).f64[0]=XMM(d).f64[0]+XMM(d).f64[1]; XMM(d).f64[1]=src.f64[0]+src.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(hsubpd_r128_rm128)() // Opcode 66 0f 7d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s, d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; XMM(d).f64[0]=XMM(d).f64[0]-XMM(d).f64[1]; XMM(d).f64[1]=XMM(s).f64[0]-XMM(s).f64[1]; } else { XMM_REG src; int d; UINT32 ea = GetEA(modrm, 0); d=(modrm >> 3) & 0x7; READXMM(ea, src); XMM(d).f64[0]=XMM(d).f64[0]-XMM(d).f64[1]; XMM(d).f64[1]=src.f64[0]-src.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(sqrtpd_r128_rm128)() // Opcode 66 0f 51 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s, d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; XMM(d).f64[0]=sqrt(XMM(s).f64[0]); XMM(d).f64[1]=sqrt(XMM(s).f64[1]); } else { XMM_REG src; int d; UINT32 ea = GetEA(modrm, 0); d=(modrm >> 3) & 0x7; READXMM(ea, src); XMM(d).f64[0]=sqrt(src.f64[0]); XMM(d).f64[1]=sqrt(src.f64[1]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtpi2pd_r128_rm64)() // Opcode 66 0f 2a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMXPROLOG(); XMM((modrm >> 3) & 0x7).f64[0] = (double)MMX(modrm & 0x7).i[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)MMX(modrm & 0x7).i[1]; } else { MMX_REG r; UINT32 ea = GetEA(modrm, 0); READMMX(ea, r); XMM((modrm >> 3) & 0x7).f64[0] = (double)r.i[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)r.i[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvttpd2pi_r64_rm128)() // Opcode 66 0f 2c { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f64[0]; MMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f64[1]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); MMX((modrm >> 3) & 0x7).i[0] = r.f64[0]; MMX((modrm >> 3) & 0x7).i[1] = r.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtpd2pi_r64_rm128)() // Opcode 66 0f 2d { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f64[0]; MMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f64[1]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); MMX((modrm >> 3) & 0x7).i[0] = r.f64[0]; MMX((modrm >> 3) & 0x7).i[1] = r.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtpd2ps_r128_rm128)() // Opcode 66 0f 5a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = (float)XMM(modrm & 0x7).f64[0]; XMM((modrm >> 3) & 0x7).f[1] = (float)XMM(modrm & 0x7).f64[1]; XMM((modrm >> 3) & 0x7).q[1] = 0; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); XMM((modrm >> 3) & 0x7).f[0] = (float)r.f64[0]; XMM((modrm >> 3) & 0x7).f[1] = (float)r.f64[1]; XMM((modrm >> 3) & 0x7).q[1] = 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtps2dq_r128_rm128)() // Opcode 66 0f 5b { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).i[2] = XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).i[3] = XMM(modrm & 0x7).f[3]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); XMM((modrm >> 3) & 0x7).i[0] = r.f[0]; XMM((modrm >> 3) & 0x7).i[1] = r.f[1]; XMM((modrm >> 3) & 0x7).i[2] = r.f[2]; XMM((modrm >> 3) & 0x7).i[3] = r.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(addpd_r128_rm128)() // Opcode 66 0f 58 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] + XMM(modrm & 0x7).f64[0]; XMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] + XMM(modrm & 0x7).f64[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] + src.f64[0]; XMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] + src.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(mulpd_r128_rm128)() // Opcode 66 0f 59 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] * XMM(modrm & 0x7).f64[0]; XMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] * XMM(modrm & 0x7).f64[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] * src.f64[0]; XMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] * src.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(subpd_r128_rm128)() // Opcode 66 0f 5c { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] - XMM(modrm & 0x7).f64[0]; XMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] - XMM(modrm & 0x7).f64[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] - src.f64[0]; XMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] - src.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(minpd_r128_rm128)() // Opcode 66 0f 5d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[0], XMM(modrm & 0x7).f64[0]); XMM((modrm >> 3) & 0x7).f64[1] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[1], XMM(modrm & 0x7).f64[1]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[0], src.f64[0]); XMM((modrm >> 3) & 0x7).f64[1] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[1], src.f64[1]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(divpd_r128_rm128)() // Opcode 66 0f 5e { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] / XMM(modrm & 0x7).f64[0]; XMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] / XMM(modrm & 0x7).f64[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] / src.f64[0]; XMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] / src.f64[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(maxpd_r128_rm128)() // Opcode 66 0f 5f { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[0], XMM(modrm & 0x7).f64[0]); XMM((modrm >> 3) & 0x7).f64[1] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[1], XMM(modrm & 0x7).f64[1]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[0], src.f64[0]); XMM((modrm >> 3) & 0x7).f64[1] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[1], src.f64[1]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movntpd_m128_r128)() // Opcode 66 0f 2b { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movapd_r128_rm128)() // Opcode 66 0f 28 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7); } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movapd_rm128_r128)() // Opcode 66 0f 29 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7); } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movsd_r128_r128m64)() // Opcode f2 0f 10 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0]; } else { UINT32 ea = GetEA(modrm, 0); READXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); XMM((modrm >> 3) & 0x7).q[1] = 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movsd_r128m64_r128)() // Opcode f2 0f 11 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0]; } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movddup_r128_r128m64)() // Opcode f2 0f 12 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[0]; } else { UINT32 ea = GetEA(modrm, 0); READXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtsi2sd_r128_rm32)() // Opcode f2 0f 2a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = (INT32)LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm, 0); XMM((modrm >> 3) & 0x7).f64[0] = (INT32)READ32(ea); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvttsd2si_r32_r128m64)() // Opcode f2 0f 2c { INT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = (INT32)XMM(modrm & 0x7).f64[0]; } else { // otherwise is a memory address XMM_REG t; UINT32 ea = GetEA(modrm, 0); READXMM_LO64(ea, t); src = (INT32)t.f64[0]; } STORE_REG32(modrm, (UINT32)src); CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtsd2si_r32_r128m64)() // Opcode f2 0f 2d { INT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = (INT32)XMM(modrm & 0x7).f64[0]; } else { // otherwise is a memory address XMM_REG t; UINT32 ea = GetEA(modrm, 0); READXMM_LO64(ea, t); src = (INT32)t.f64[0]; } STORE_REG32(modrm, (UINT32)src); CYCLES(1); // TODO: correct cycle count } static void SSEOP(sqrtsd_r128_r128m64)() // Opcode f2 0f 51 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s, d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; XMM(d).f64[0]=sqrt(XMM(s).f64[0]); } else { XMM_REG src; int d; UINT32 ea = GetEA(modrm, 0); d=(modrm >> 3) & 0x7; READXMM(ea, src); XMM(d).f64[0]=sqrt(src.f64[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(addsd_r128_r128m64)() // Opcode f2 0f 58 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] + XMM(modrm & 0x7).f64[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] + src.f64[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(mulsd_r128_r128m64)() // Opcode f2 0f 59 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] * XMM(modrm & 0x7).f64[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] * src.f64[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtsd2ss_r128_r128m64)() // Opcode f2 0f 5a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM(modrm & 0x7).f64[0]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); READXMM_LO64(ea, s); XMM((modrm >> 3) & 0x7).f[0] = s.f64[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(subsd_r128_r128m64)() // Opcode f2 0f 5c { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] - XMM(modrm & 0x7).f64[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] - src.f64[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(minsd_r128_r128m64)() // Opcode f2 0f 5d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[0], XMM(modrm & 0x7).f64[0]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[0], src.f64[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(divsd_r128_r128m64)() // Opcode f2 0f 5e { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] / XMM(modrm & 0x7).f64[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] / src.f64[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(maxsd_r128_r128m64)() // Opcode f2 0f 5f { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[0], XMM(modrm & 0x7).f64[0]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f64[0] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[0], src.f64[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(haddps_r128_rm128)() // Opcode f2 0f 7c { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s, d; float f1, f2, f3, f4; s=modrm & 0x7; d=(modrm >> 3) & 0x7; f1=XMM(d).f[0]+XMM(d).f[1]; f2=XMM(d).f[2]+XMM(d).f[3]; f3=XMM(s).f[0]+XMM(s).f[1]; f4=XMM(s).f[2]+XMM(s).f[3]; XMM(d).f[0]=f1; XMM(d).f[1]=f2; XMM(d).f[2]=f3; XMM(d).f[3]=f4; } else { XMM_REG src; int d; float f1, f2; UINT32 ea = GetEA(modrm, 0); d=(modrm >> 3) & 0x7; READXMM(ea, src); f1=XMM(d).f[0]+XMM(d).f[1]; f2=XMM(d).f[2]+XMM(d).f[3]; XMM(d).f[0]=f1; XMM(d).f[1]=f2; XMM(d).f[2]=src.f[0]+src.f[1]; XMM(d).f[3]=src.f[2]+src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(hsubps_r128_rm128)() // Opcode f2 0f 7d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s, d; float f1, f2, f3, f4; s=modrm & 0x7; d=(modrm >> 3) & 0x7; f1=XMM(d).f[0]-XMM(d).f[1]; f2=XMM(d).f[2]-XMM(d).f[3]; f3=XMM(s).f[0]-XMM(s).f[1]; f4=XMM(s).f[2]-XMM(s).f[3]; XMM(d).f[0]=f1; XMM(d).f[1]=f2; XMM(d).f[2]=f3; XMM(d).f[3]=f4; } else { XMM_REG src; int d; float f1, f2; UINT32 ea = GetEA(modrm, 0); d=(modrm >> 3) & 0x7; READXMM(ea, src); f1=XMM(d).f[0]-XMM(d).f[1]; f2=XMM(d).f[2]-XMM(d).f[3]; XMM(d).f[0]=f1; XMM(d).f[1]=f2; XMM(d).f[2]=src.f[0]-src.f[1]; XMM(d).f[3]=src.f[2]-src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cmpsd_r128_r128m64_i8)() // Opcode f2 0f c2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; sse_predicate_compare_double_scalar(imm8, XMM(d), XMM(s)); } else { int d; XMM_REG s; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READXMM_LO64(ea, s); d=(modrm >> 3) & 0x7; sse_predicate_compare_double_scalar(imm8, XMM(d), s); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(addsubps_r128_rm128)() // Opcode f2 0f d0 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0]=XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1]=XMM((modrm >> 3) & 0x7).f[1] + XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2]=XMM((modrm >> 3) & 0x7).f[2] - XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3]=XMM((modrm >> 3) & 0x7).f[3] + XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0]=XMM((modrm >> 3) & 0x7).f[0] - src.f[0]; XMM((modrm >> 3) & 0x7).f[1]=XMM((modrm >> 3) & 0x7).f[1] + src.f[1]; XMM((modrm >> 3) & 0x7).f[2]=XMM((modrm >> 3) & 0x7).f[2] - src.f[2]; XMM((modrm >> 3) & 0x7).f[3]=XMM((modrm >> 3) & 0x7).f[3] + src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movdq2q_r64_r128)() // Opcode f2 0f d6 { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q = XMM(modrm & 0x7).q[0]; CYCLES(1); // TODO: correct cycle count } else { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } } static void SSEOP(cvtpd2dq_r128_rm128)() // Opcode f2 0f e6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).i[0]=(INT32)XMM((modrm >> 3) & 0x7).f64[0]; XMM((modrm >> 3) & 0x7).i[1]=(INT32)XMM((modrm >> 3) & 0x7).f64[1]; XMM((modrm >> 3) & 0x7).q[1] = 0; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).i[0]=(INT32)src.f64[0]; XMM((modrm >> 3) & 0x7).i[1]=(INT32)src.f64[1]; XMM((modrm >> 3) & 0x7).q[1] = 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(lddqu_r128_m128)() // Opcode f2 0f f0 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); } } ================================================ FILE: vm86/mame/emu/cpu/i386/readme_msdos_player.txt ================================================ Based on MAME 0.152. Fixes in MAME 0.154 to 0.160 are applied. i386_state are removed and all its members are changed to global variables. All registers can be accessed directly without cpustate->. cycle_table_rm/pm are changed from dynamic array to static array. ================================================ FILE: vm86/mame/emu/cpu/i386/x87ops.c ================================================ // license:BSD-3-Clause // copyright-holders:Phil Bennett /*************************************************************************** x87 FPU emulation TODO: - 80-bit precision for F2XM1, FYL2X, FPATAN - Figure out why SoftFloat trig extensions produce bad values - Cycle counts for all processors (currently using 486 counts) - Precision-dependent cycle counts for divide instructions - Last instruction, operand pointers etc. - Fix FLDENV, FSTENV, FSAVE, FRSTOR and FPREM - Status word C2 updates to reflect round up/down - Handling of invalid and denormal numbers - Remove redundant operand checks - Exceptions ***************************************************************************/ #include /************************************* * * Defines * *************************************/ #define X87_SW_IE 0x0001 #define X87_SW_DE 0x0002 #define X87_SW_ZE 0x0004 #define X87_SW_OE 0x0008 #define X87_SW_UE 0x0010 #define X87_SW_PE 0x0020 #define X87_SW_SF 0x0040 #define X87_SW_ES 0x0080 #define X87_SW_C0 0x0100 #define X87_SW_C1 0x0200 #define X87_SW_C2 0x0400 #define X87_SW_TOP_SHIFT 11 #define X87_SW_TOP_MASK 7 #define X87_SW_C3 0x4000 #define X87_SW_BUSY 0x8000 #define X87_CW_IM 0x0001 #define X87_CW_DM 0x0002 #define X87_CW_ZM 0x0004 #define X87_CW_OM 0x0008 #define X87_CW_UM 0x0010 #define X87_CW_PM 0x0020 #define X87_CW_PC_SHIFT 8 #define X87_CW_PC_MASK 3 #define X87_CW_PC_SINGLE 0 #define X87_CW_PC_DOUBLE 2 #define X87_CW_PC_EXTEND 3 #define X87_CW_RC_SHIFT 10 #define X87_CW_RC_MASK 3 #define X87_CW_RC_NEAREST 0 #define X87_CW_RC_DOWN 1 #define X87_CW_RC_UP 2 #define X87_CW_RC_ZERO 3 #define X87_TW_MASK 3 #define X87_TW_VALID 0 #define X87_TW_ZERO 1 #define X87_TW_SPECIAL 2 #define X87_TW_EMPTY 3 /************************************* * * Macros * *************************************/ #define ST_TO_PHYS(x) (((m_x87_sw >> X87_SW_TOP_SHIFT) + (x)) & X87_SW_TOP_MASK) #define ST(x) (m_x87_reg[ST_TO_PHYS(x)]) #define X87_TW_FIELD_SHIFT(x) ((x) << 1) #define X87_TAG(x) ((m_x87_tw >> X87_TW_FIELD_SHIFT(x)) & X87_TW_MASK) #define X87_RC ((m_x87_cw >> X87_CW_RC_SHIFT) & X87_CW_RC_MASK) #define X87_IS_ST_EMPTY(x) (X87_TAG(ST_TO_PHYS(x)) == X87_TW_EMPTY) #define X87_SW_C3_0 X87_SW_C0 #define UNIMPLEMENTED fatalerror("Unimplemented x87 op: %s (PC:%x)\n", __FUNCTION__, m_pc) /************************************* * * Constants * *************************************/ static const floatx80 fx80_zero = { 0x0000, U64(0x0000000000000000) }; static const floatx80 fx80_one = { 0x3fff, U64(0x8000000000000000) }; static const floatx80 fx80_ninf = { 0xffff, U64(0x8000000000000000) }; static const floatx80 fx80_inan = { 0xffff, U64(0xc000000000000000) }; /* Maps x87 round modes to SoftFloat round modes */ static const int x87_to_sf_rc[4] = { float_round_nearest_even, float_round_down, float_round_up, float_round_to_zero, }; /************************************* * * SoftFloat helpers * *************************************/ extern flag floatx80_is_nan( floatx80 a ); extern flag floatx80_is_signaling_nan(floatx80 a); INLINE flag floatx80_is_quiet_nan(floatx80 a) { bits64 aLow; aLow = a.low & ~LIT64(0x4000000000000000); return ((a.high & 0x7FFF) == 0x7FFF) && (bits64)(aLow << 1) && (a.low != aLow); } INLINE int floatx80_is_zero(floatx80 fx) { return (((fx.high & 0x7fff) == 0) && ((fx.low << 1) == 0)); } INLINE int floatx80_is_inf(floatx80 fx) { return (((fx.high & 0x7fff) == 0x7fff) && ((fx.low << 1) == 0)); } INLINE int floatx80_is_denormal(floatx80 fx) { return (((fx.high & 0x7fff) == 0) && ((fx.low & U64(0x8000000000000000)) == 0) && ((fx.low << 1) != 0)); } INLINE floatx80 floatx80_abs(floatx80 fx) { fx.high &= 0x7fff; return fx; } INLINE double fx80_to_double(floatx80 fx) { UINT64 d = floatx80_to_float64(fx); return *(double*)&d; } INLINE floatx80 double_to_fx80(double in) { return float64_to_floatx80(*(UINT64*)&in); } INLINE floatx80 READ80(UINT32 ea) { floatx80 t; t.low = READ64(ea); t.high = READ16(ea + 8); return t; } INLINE void WRITE80(UINT32 ea, floatx80 t) { WRITE64(ea, t.low); WRITE16(ea + 8, t.high); } /************************************* * * x87 stack handling * *************************************/ INLINE void x87_set_stack_top(int top) { m_x87_sw &= ~(X87_SW_TOP_MASK << X87_SW_TOP_SHIFT); m_x87_sw |= (top << X87_SW_TOP_SHIFT); } INLINE void x87_set_tag(int reg, int tag) { int shift = X87_TW_FIELD_SHIFT(reg); m_x87_tw &= ~(X87_TW_MASK << shift); m_x87_tw |= (tag << shift); } void x87_write_stack(int i, floatx80 value, int update_tag) { ST(i) = value; if (update_tag) { int tag; if (floatx80_is_zero(value)) { tag = X87_TW_ZERO; } else if (floatx80_is_inf(value) || floatx80_is_nan(value)) { tag = X87_TW_SPECIAL; } else { tag = X87_TW_VALID; } x87_set_tag(ST_TO_PHYS(i), tag); } } INLINE void x87_set_stack_underflow() { m_x87_sw &= ~X87_SW_C1; m_x87_sw |= X87_SW_IE | X87_SW_SF; } INLINE void x87_set_stack_overflow() { m_x87_sw |= X87_SW_C1 | X87_SW_IE | X87_SW_SF; } int x87_inc_stack() { int ret = 1; // Check for stack underflow if (X87_IS_ST_EMPTY(0)) { ret = 0; x87_set_stack_underflow(); // Don't update the stack if the exception is unmasked if (~m_x87_cw & X87_CW_IM) return ret; } x87_set_tag(ST_TO_PHYS(0), X87_TW_EMPTY); x87_set_stack_top(ST_TO_PHYS(1)); return ret; } int x87_dec_stack() { int ret = 1; // Check for stack overflow if (!X87_IS_ST_EMPTY(7)) { ret = 0; x87_set_stack_overflow(); // Don't update the stack if the exception is unmasked if (~m_x87_cw & X87_CW_IM) return ret; } x87_set_stack_top(ST_TO_PHYS(7)); return ret; } /************************************* * * Exception handling * *************************************/ int x87_mf_fault() { if ((m_x87_sw & X87_SW_ES) && (m_cr[0] & 0x20)) // FIXME: 486 and up only { m_ext = 1; i386_trap(FAULT_MF, 0, 0); return 1; } return 0; } UINT32 Getx87EA(UINT8 modrm, int rwn) { UINT8 segment; UINT32 ea; modrm_to_EA(modrm, &ea, &segment); UINT32 ret = i386_translate(segment, ea, rwn); m_x87_ds = m_sreg[segment].selector; if (PROTECTED_MODE && !V8086_MODE) m_x87_data_ptr = ea; else m_x87_data_ptr = ea + (m_x87_ds << 4); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; return ret; } int x87_check_exceptions(bool store = false); int x87_check_exceptions(bool store) { m_x87_cs = m_sreg[CS].selector; if (PROTECTED_MODE && !V8086_MODE) m_x87_inst_ptr = m_prev_eip; else m_x87_inst_ptr = m_prev_eip + (m_x87_cs << 4); /* Update the exceptions from SoftFloat */ if (float_exception_flags & float_flag_invalid) { m_x87_sw |= X87_SW_IE; float_exception_flags &= ~float_flag_invalid; } if (float_exception_flags & float_flag_overflow) { m_x87_sw |= X87_SW_OE; float_exception_flags &= ~float_flag_overflow; } if (float_exception_flags & float_flag_underflow) { m_x87_sw |= X87_SW_UE; float_exception_flags &= ~float_flag_underflow; } if (float_exception_flags & float_flag_inexact) { m_x87_sw |= X87_SW_PE; float_exception_flags &= ~float_flag_inexact; } if (float_exception_flags & float_flag_divbyzero) { m_x87_sw |= X87_SW_ZE; float_exception_flags &= ~float_flag_divbyzero; } UINT16 unmasked = (m_x87_sw & ~m_x87_cw) & 0x3f; if (unmasked) { logerror("Unmasked x87 exception (CW:%.4x, SW:%.4x)\n", m_x87_cw, m_x87_sw); m_x87_sw |= X87_SW_ES; if (store || !(unmasked & (X87_SW_OE | X87_SW_UE))) return 0; } return 1; } INLINE void x87_write_cw(UINT16 cw) { m_x87_cw = cw; /* Update the SoftFloat rounding mode */ float_rounding_mode = x87_to_sf_rc[(m_x87_cw >> X87_CW_RC_SHIFT) & X87_CW_RC_MASK]; } void x87_reset() { x87_write_cw(0x0037f); m_x87_sw = 0; m_x87_tw = 0xffff; // TODO: FEA=0, FDS=0, FIP=0 FOP=0 FCS=0 m_x87_data_ptr = 0; m_x87_inst_ptr = 0; m_x87_opcode = 0; } /************************************* * * Core arithmetic * *************************************/ static floatx80 x87_add(floatx80 a, floatx80 b) { floatx80 result = { 0 }; switch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK) { case X87_CW_PC_SINGLE: { float32 a32 = floatx80_to_float32(a); float32 b32 = floatx80_to_float32(b); result = float32_to_floatx80(float32_add(a32, b32)); break; } case X87_CW_PC_DOUBLE: { float64 a64 = floatx80_to_float64(a); float64 b64 = floatx80_to_float64(b); result = float64_to_floatx80(float64_add(a64, b64)); break; } case X87_CW_PC_EXTEND: { result = floatx80_add(a, b); break; } } return result; } static floatx80 x87_sub(floatx80 a, floatx80 b) { floatx80 result = { 0 }; switch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK) { case X87_CW_PC_SINGLE: { float32 a32 = floatx80_to_float32(a); float32 b32 = floatx80_to_float32(b); result = float32_to_floatx80(float32_sub(a32, b32)); break; } case X87_CW_PC_DOUBLE: { float64 a64 = floatx80_to_float64(a); float64 b64 = floatx80_to_float64(b); result = float64_to_floatx80(float64_sub(a64, b64)); break; } case X87_CW_PC_EXTEND: { result = floatx80_sub(a, b); break; } } return result; } static floatx80 x87_mul(floatx80 a, floatx80 b) { floatx80 val = { 0 }; switch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK) { case X87_CW_PC_SINGLE: { float32 a32 = floatx80_to_float32(a); float32 b32 = floatx80_to_float32(b); val = float32_to_floatx80(float32_mul(a32, b32)); break; } case X87_CW_PC_DOUBLE: { float64 a64 = floatx80_to_float64(a); float64 b64 = floatx80_to_float64(b); val = float64_to_floatx80(float64_mul(a64, b64)); break; } case X87_CW_PC_EXTEND: { val = floatx80_mul(a, b); break; } } return val; } static floatx80 x87_div(floatx80 a, floatx80 b) { floatx80 val = { 0 }; switch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK) { case X87_CW_PC_SINGLE: { float32 a32 = floatx80_to_float32(a); float32 b32 = floatx80_to_float32(b); val = float32_to_floatx80(float32_div(a32, b32)); break; } case X87_CW_PC_DOUBLE: { float64 a64 = floatx80_to_float64(a); float64 b64 = floatx80_to_float64(b); val = float64_to_floatx80(float64_div(a64, b64)); break; } case X87_CW_PC_EXTEND: { val = floatx80_div(a, b); break; } } return val; } /************************************* * * Instructions * *************************************/ /************************************* * * Add * *************************************/ void x87_fadd_m32real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fadd_m64real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fadd_st_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fadd_sti_st(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(i, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_faddp(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fiadd_m32int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(19); } void x87_fiadd_m16int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(20); } /************************************* * * Subtract * *************************************/ void x87_fsub_m32real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsub_m64real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsub_st_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fsub_sti_st(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(i, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fsubp(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fisub_m32int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(19); } void x87_fisub_m16int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(20); } /************************************* * * Reverse Subtract * *************************************/ void x87_fsubr_m32real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = float32_to_floatx80(m32real); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsubr_m64real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = float64_to_floatx80(m64real); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsubr_st_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fsubr_sti_st(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(i, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fsubrp(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fisubr_m32int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = int32_to_floatx80(m32int); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(19); } void x87_fisubr_m16int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ16(ea); floatx80 a = int32_to_floatx80(m16int); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(20); } /************************************* * * Divide * *************************************/ void x87_fdiv_m32real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fdiv_m64real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fdiv_st_sti(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(0, result, TRUE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; // 73, 62, 35 CYCLES(73); } void x87_fdiv_sti_st(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; // 73, 62, 35 CYCLES(73); } void x87_fdivp(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; // 73, 62, 35 CYCLES(73); } void x87_fidiv_m32int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fidiv_m16int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } /************************************* * * Reverse Divide * *************************************/ void x87_fdivr_m32real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = float32_to_floatx80(m32real); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fdivr_m64real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = float64_to_floatx80(m64real); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fdivr_st_sti(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(0, result, TRUE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; // 73, 62, 35 CYCLES(73); } void x87_fdivr_sti_st(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; // 73, 62, 35 CYCLES(73); } void x87_fdivrp(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; // 73, 62, 35 CYCLES(73); } void x87_fidivr_m32int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = int32_to_floatx80(m32int); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fidivr_m16int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ32(ea); floatx80 a = int32_to_floatx80(m16int); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } /************************************* * * Multiply * *************************************/ void x87_fmul_m32real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(11); } void x87_fmul_m64real(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(14); } void x87_fmul_st_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(16); } void x87_fmul_sti_st(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(i, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(16); } void x87_fmulp(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(16); } void x87_fimul_m32int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(22); } void x87_fimul_m16int(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(22); } /************************************* * * Conditional Move * *************************************/ void x87_fcmovb_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (m_CF == 1) { if (X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else result = ST(i); if (x87_check_exceptions()) { ST(0) = result; } } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcmove_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (m_ZF == 1) { if (X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else result = ST(i); if (x87_check_exceptions()) { ST(0) = result; } } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcmovbe_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if ((m_CF | m_ZF) == 1) { if (X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else result = ST(i); if (x87_check_exceptions()) { ST(0) = result; } } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcmovu_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (m_PF == 1) { if (X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else result = ST(i); if (x87_check_exceptions()) { ST(0) = result; } } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcmovnb_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (m_CF == 0) { if (X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else result = ST(i); if (x87_check_exceptions()) { ST(0) = result; } } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcmovne_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (m_ZF == 0) { if (X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else result = ST(i); if (x87_check_exceptions()) { ST(0) = result; } } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcmovnbe_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if ((m_CF == 0) && (m_ZF == 0)) { if (X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else result = ST(i); if (x87_check_exceptions()) { ST(0) = result; } } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcmovnu_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (x87_mf_fault()) return; if (m_PF == 0) { if (X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else result = ST(i); if (x87_check_exceptions()) { ST(0) = result; } } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } /************************************* * * Miscellaneous arithmetic * *************************************/ void x87_fprem(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a0 = ST(0); floatx80 b1 = ST(1); floatx80 a0_abs = packFloatx80(0, (a0.high & 0x7FFF), a0.low); floatx80 b1_abs = packFloatx80(0, (b1.high & 0x7FFF), b1.low); m_x87_sw &= ~X87_SW_C2; //int d=extractFloatx80Exp(a0)-extractFloatx80Exp(b1); int d = (a0.high & 0x7FFF) - (b1.high & 0x7FFF); if (d < 64) { floatx80 t=floatx80_div(a0_abs, b1_abs); int64 q = floatx80_to_int64_round_to_zero(t); floatx80 qf = int64_to_floatx80(q); floatx80 tt = floatx80_mul(b1_abs, qf); result = floatx80_sub(a0_abs, tt); result.high |= a0.high & 0x8000; // C2 already 0 m_x87_sw &= ~(X87_SW_C0|X87_SW_C3|X87_SW_C1); if (q & 1) m_x87_sw |= X87_SW_C1; if (q & 2) m_x87_sw |= X87_SW_C3; if (q & 4) m_x87_sw |= X87_SW_C0; } else { m_x87_sw |= X87_SW_C2; int n = 63; int e = 1 << (d - n); floatx80 ef = int32_to_floatx80(e); floatx80 t=floatx80_div(a0, b1); floatx80 td = floatx80_div(t, ef); int64 qq = floatx80_to_int64_round_to_zero(td); floatx80 qqf = int64_to_floatx80(qq); floatx80 tt = floatx80_mul(b1, qqf); floatx80 ttt = floatx80_mul(tt, ef); result = floatx80_sub(a0, ttt); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(84); } void x87_fprem1(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(1); m_x87_sw &= ~X87_SW_C2; // TODO: Implement Cx bits result = floatx80_rem(a, b); } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(94); } void x87_fsqrt(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 value = ST(0); if ((!floatx80_is_zero(value) && (value.high & 0x8000)) || floatx80_is_denormal(value)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = floatx80_sqrt(value); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } /************************************* * * Trigonometric * *************************************/ void x87_f2xm1(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { extern floatx80 f2xm1(floatx80 a); result = f2xm1(ST(0)); } if (x87_check_exceptions()) { x87_write_stack(0, result, TRUE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(242); } void x87_fyl2x(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 x = ST(0); if (x.high & 0x8000) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { extern floatx80 fyl2x(floatx80 a, floatx80 b); result = fyl2x(ST(0), ST(1)); } } if (x87_check_exceptions()) { x87_write_stack(1, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(250); } void x87_fyl2xp1(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { extern floatx80 fyl2xp1(floatx80 a, floatx80 b); result = fyl2xp1(ST(0), ST(1)); } if (x87_check_exceptions()) { x87_write_stack(1, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(313); } void x87_fptan(UINT8 modrm) { floatx80 result1, result2; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result1 = fx80_inan; result2 = fx80_inan; } else if (!X87_IS_ST_EMPTY(7)) { x87_set_stack_overflow(); result1 = fx80_inan; result2 = fx80_inan; } else { result1 = ST(0); result2 = fx80_one; #if 1 // TODO: Function produces bad values if (floatx80_ftan(result1) != -1) m_x87_sw &= ~X87_SW_C2; else m_x87_sw |= X87_SW_C2; #else double x = fx80_to_double(result1); x = tan(x); result1 = double_to_fx80(x); m_x87_sw &= ~X87_SW_C2; #endif } if (x87_check_exceptions()) { x87_write_stack(0, result1, TRUE); x87_dec_stack(); x87_write_stack(0, result2, TRUE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(244); } void x87_fpatan(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { result = floatx80_fpatan(ST(0), ST(1)); } if (x87_check_exceptions()) { x87_write_stack(1, result, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(289); } void x87_fsin(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { result = ST(0); #if 1 // TODO: Function produces bad values if (floatx80_fsin(result) != -1) m_x87_sw &= ~X87_SW_C2; else m_x87_sw |= X87_SW_C2; #else double x = fx80_to_double(result); x = sin(x); result = double_to_fx80(x); m_x87_sw &= ~X87_SW_C2; #endif } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(241); } void x87_fcos(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { result = ST(0); #if 1 // TODO: Function produces bad values if (floatx80_fcos(result) != -1) m_x87_sw &= ~X87_SW_C2; else m_x87_sw |= X87_SW_C2; #else double x = fx80_to_double(result); x = cos(x); result = double_to_fx80(x); m_x87_sw &= ~X87_SW_C2; #endif } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(241); } void x87_fsincos(UINT8 modrm) { floatx80 s_result, c_result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); s_result = c_result = fx80_inan; } else if (!X87_IS_ST_EMPTY(7)) { x87_set_stack_overflow(); s_result = c_result = fx80_inan; } else { extern int sf_fsincos(floatx80 a, floatx80 *sin_a, floatx80 *cos_a); s_result = c_result = ST(0); #if 1 // TODO: Function produces bad values if (sf_fsincos(s_result, &s_result, &c_result) != -1) m_x87_sw &= ~X87_SW_C2; else m_x87_sw |= X87_SW_C2; #else double s = fx80_to_double(s_result); double c = fx80_to_double(c_result); s = sin(s); c = cos(c); s_result = double_to_fx80(s); c_result = double_to_fx80(c); m_x87_sw &= ~X87_SW_C2; #endif } if (x87_check_exceptions()) { x87_write_stack(0, s_result, TRUE); x87_dec_stack(); x87_write_stack(0, c_result, TRUE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(291); } /************************************* * * Load data * *************************************/ void x87_fld_m32real(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (x87_dec_stack()) { UINT32 m32real = READ32(ea); value = float32_to_floatx80(m32real); m_x87_sw &= ~X87_SW_C1; if (floatx80_is_signaling_nan(value) || floatx80_is_denormal(value)) { m_x87_sw |= X87_SW_IE; value = fx80_inan; } } else { value = fx80_inan; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(3); } void x87_fld_m64real(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (x87_dec_stack()) { UINT64 m64real = READ64(ea); value = float64_to_floatx80(m64real); m_x87_sw &= ~X87_SW_C1; if (floatx80_is_signaling_nan(value) || floatx80_is_denormal(value)) { m_x87_sw |= X87_SW_IE; value = fx80_inan; } } else { value = fx80_inan; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(3); } void x87_fld_m80real(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (x87_dec_stack()) { m_x87_sw &= ~X87_SW_C1; value = READ80(ea); } else { value = fx80_inan; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(6); } void x87_fld_sti(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; if (x87_dec_stack()) { m_x87_sw &= ~X87_SW_C1; value = ST((modrm + 1) & 7); } else { value = fx80_inan; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fild_m16int(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (!x87_dec_stack()) { value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; INT16 m16int = READ16(ea); value = int32_to_floatx80(m16int); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(13); } void x87_fild_m32int(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (!x87_dec_stack()) { value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; INT32 m32int = READ32(ea); value = int32_to_floatx80(m32int); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(9); } void x87_fild_m64int(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (!x87_dec_stack()) { value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; INT64 m64int = READ64(ea); value = int64_to_floatx80(m64int); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(10); } void x87_fbld(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (!x87_dec_stack()) { value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; UINT64 m64val = 0; UINT16 sign; value = READ80(ea); sign = value.high & 0x8000; m64val += ((value.high >> 4) & 0xf) * 10; m64val += ((value.high >> 0) & 0xf); for (int i = 60; i >= 0; i -= 4) { m64val *= 10; m64val += (value.low >> i) & 0xf; } value = int64_to_floatx80(m64val); value.high |= sign; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(75); } /************************************* * * Store data * *************************************/ void x87_fst_m32real(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 1); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } UINT32 m32real = floatx80_to_float32(value); if (x87_check_exceptions(true)) WRITE32(ea, m32real); CYCLES(7); } void x87_fst_m64real(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 1); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } UINT64 m64real = floatx80_to_float64(value); if (x87_check_exceptions(true)) WRITE64(ea, m64real); CYCLES(8); } void x87_fst_sti(UINT8 modrm) { int i = modrm & 7; floatx80 value; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } if (x87_check_exceptions()) x87_write_stack(i, value, TRUE); CYCLES(3); } void x87_fstp_m32real(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 1); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } UINT32 m32real = floatx80_to_float32(value); if (x87_check_exceptions(true)) { WRITE32(ea, m32real); x87_inc_stack(); } CYCLES(7); } void x87_fstp_m64real(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } UINT32 ea = Getx87EA(modrm, 1); UINT64 m64real = floatx80_to_float64(value); if (x87_check_exceptions(true)) { WRITE64(ea, m64real); x87_inc_stack(); } CYCLES(8); } void x87_fstp_m80real(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } UINT32 ea = Getx87EA(modrm, 1); if (x87_check_exceptions(true)) { WRITE80(ea, value); x87_inc_stack(); } CYCLES(6); } void x87_fstp_sti(UINT8 modrm) { int i = modrm & 7; floatx80 value; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } if (x87_check_exceptions()) { x87_write_stack(i, value, TRUE); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(3); } void x87_fist_m16int(UINT8 modrm) { INT16 m16int; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m16int = -32768; } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(-32768); floatx80 upperLim = int32_to_floatx80(32767); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m16int = floatx80_to_int32(fx80); else { float_exception_flags = float_flag_invalid; m16int = -32768; } } UINT32 ea = Getx87EA(modrm, 1); if (x87_check_exceptions(true)) { WRITE16(ea, m16int); } CYCLES(29); } void x87_fist_m32int(UINT8 modrm) { INT32 m32int; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m32int = 0x80000000; } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(0x80000000); floatx80 upperLim = int32_to_floatx80(0x7fffffff); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m32int = floatx80_to_int32(fx80); else { float_exception_flags = float_flag_invalid; m32int = 0x80000000; } } UINT32 ea = Getx87EA(modrm, 1); if (x87_check_exceptions(true)) { WRITE32(ea, m32int); } CYCLES(28); } void x87_fistp_m16int(UINT8 modrm) { INT16 m16int; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m16int = (UINT16)0x8000; } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(-32768); floatx80 upperLim = int32_to_floatx80(32767); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m16int = floatx80_to_int32(fx80); else { float_exception_flags = float_flag_invalid; m16int = (UINT16)0x8000; } } UINT32 ea = Getx87EA(modrm, 1); if (x87_check_exceptions(true)) { WRITE16(ea, m16int); x87_inc_stack(); } CYCLES(29); } void x87_fistp_m32int(UINT8 modrm) { INT32 m32int; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m32int = 0x80000000; } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(0x80000000); floatx80 upperLim = int32_to_floatx80(0x7fffffff); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m32int = floatx80_to_int32(fx80); else { float_exception_flags = float_flag_invalid; m32int = 0x80000000; } } UINT32 ea = Getx87EA(modrm, 1); if (x87_check_exceptions(true)) { WRITE32(ea, m32int); x87_inc_stack(); } CYCLES(29); } void x87_fistp_m64int(UINT8 modrm) { INT64 m64int; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m64int = U64(0x8000000000000000); } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int64_to_floatx80(U64(0x8000000000000000)); floatx80 upperLim = int64_to_floatx80(U64(0x7fffffffffffffff)); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m64int = floatx80_to_int64(fx80); else { float_exception_flags = float_flag_invalid; m64int = U64(0x8000000000000000); } } UINT32 ea = Getx87EA(modrm, 1); if (x87_check_exceptions(true)) { WRITE64(ea, m64int); x87_inc_stack(); } CYCLES(29); } void x87_fbstp(UINT8 modrm) { floatx80 result; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 u64 = floatx80_to_int64(floatx80_abs(ST(0))); result.low = 0; for (int i = 0; i < 64; i += 4) { result.low += (u64 % 10) << i; u64 /= 10; } result.high = (u64 % 10); result.high += ((u64 / 10) % 10) << 4; result.high |= ST(0).high & 0x8000; } UINT32 ea = Getx87EA(modrm, 1); if (x87_check_exceptions(true)) { WRITE80(ea, result); x87_inc_stack(); } CYCLES(175); } /************************************* * * Constant load * *************************************/ void x87_fld1(UINT8 modrm) { floatx80 value; int tag; if (x87_mf_fault()) return; if (x87_dec_stack()) { m_x87_sw &= ~X87_SW_C1; value = fx80_one; tag = X87_TW_VALID; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fldl2t(UINT8 modrm) { floatx80 value; int tag; if (x87_mf_fault()) return; if (x87_dec_stack()) { tag = X87_TW_VALID; value.high = 0x4000; if (X87_RC == X87_CW_RC_UP) value.low = U64(0xd49a784bcd1b8aff); else value.low = U64(0xd49a784bcd1b8afe); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fldl2e(UINT8 modrm) { floatx80 value; int tag; if (x87_mf_fault()) return; if (x87_dec_stack()) { int rc = X87_RC; tag = X87_TW_VALID; value.high = 0x3fff; if (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST) value.low = U64(0xb8aa3b295c17f0bc); else value.low = U64(0xb8aa3b295c17f0bb); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fldpi(UINT8 modrm) { floatx80 value; int tag; if (x87_mf_fault()) return; if (x87_dec_stack()) { int rc = X87_RC; tag = X87_TW_VALID; value.high = 0x4000; if (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST) value.low = U64(0xc90fdaa22168c235); else value.low = U64(0xc90fdaa22168c234); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fldlg2(UINT8 modrm) { floatx80 value; int tag; if (x87_mf_fault()) return; if (x87_dec_stack()) { int rc = X87_RC; tag = X87_TW_VALID; value.high = 0x3ffd; if (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST) value.low = U64(0x9a209a84fbcff799); else value.low = U64(0x9a209a84fbcff798); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fldln2(UINT8 modrm) { floatx80 value; int tag; if (x87_mf_fault()) return; if (x87_dec_stack()) { int rc = X87_RC; tag = X87_TW_VALID; value.high = 0x3ffe; if (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST) value.low = U64(0xb17217f7d1cf79ac); else value.low = U64(0xb17217f7d1cf79ab); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(8); } void x87_fldz(UINT8 modrm) { floatx80 value; int tag; if (x87_mf_fault()) return; if (x87_dec_stack()) { value = fx80_zero; tag = X87_TW_ZERO; m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } /************************************* * * Miscellaneous * *************************************/ void x87_fnop(UINT8 modrm) { x87_mf_fault(); CYCLES(3); } void x87_fchs(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); value.high ^= 0x8000; } if (x87_check_exceptions()) x87_write_stack(0, value, FALSE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(6); } void x87_fabs(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); value.high &= 0x7fff; } if (x87_check_exceptions()) x87_write_stack(0, value, FALSE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(6); } void x87_fscale(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = floatx80_scale(ST(0), ST(1)); } if (x87_check_exceptions()) x87_write_stack(0, value, FALSE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(31); } void x87_frndint(UINT8 modrm) { floatx80 value; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = floatx80_round_to_int(ST(0)); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(21); } void x87_fxtract(UINT8 modrm) { floatx80 sig80, exp80; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); sig80 = exp80 = fx80_inan; } else if (!X87_IS_ST_EMPTY(7)) { x87_set_stack_overflow(); sig80 = exp80 = fx80_inan; } else { floatx80 value = ST(0); if (floatx80_eq(value, fx80_zero)) { m_x87_sw |= X87_SW_ZE; exp80 = fx80_ninf; sig80 = fx80_zero; } else { // Extract the unbiased exponent exp80 = int32_to_floatx80((value.high & 0x7fff) - 0x3fff); // For the significand, replicate the original value and set its true exponent to 0. sig80 = value; sig80.high &= ~0x7fff; sig80.high |= 0x3fff; } } if (x87_check_exceptions()) { x87_write_stack(0, exp80, TRUE); x87_dec_stack(); x87_write_stack(0, sig80, TRUE); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(21); } /************************************* * * Comparison * *************************************/ void x87_ftst(UINT8 modrm) { if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); if (floatx80_is_nan(ST(0))) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(ST(0), fx80_zero)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(ST(0), fx80_zero)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fxam(UINT8 modrm) { floatx80 value = ST(0); if (x87_mf_fault()) return; m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); // TODO: Unsupported and denormal values if (X87_IS_ST_EMPTY(0)) { m_x87_sw |= X87_SW_C3 | X87_SW_C0; } else if (floatx80_is_zero(value)) { m_x87_sw |= X87_SW_C3; } else if (floatx80_is_nan(value)) { m_x87_sw |= X87_SW_C0; } else if (floatx80_is_inf(value)) { m_x87_sw |= X87_SW_C2 | X87_SW_C0; } else { m_x87_sw |= X87_SW_C2; } if (value.high & 0x8000) m_x87_sw |= X87_SW_C1; CYCLES(8); } void x87_ficom_m16int(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if (floatx80_is_nan(a)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(16); } void x87_ficom_m32int(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if (floatx80_is_nan(a)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(15); } void x87_ficomp_m16int(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if (floatx80_is_nan(a)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(16); } void x87_ficomp_m32int(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if (floatx80_is_nan(a)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(15); } void x87_fcom_m32real(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(4); } void x87_fcom_m64real(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(4); } void x87_fcom_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcomp_m32real(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(4); } void x87_fcomp_m64real(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(4); } void x87_fcomp_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fcomi_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_x87_sw &= ~X87_SW_C1; floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; m_x87_sw |= X87_SW_IE; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (floatx80_eq(a, b)) m_ZF = 1; if (floatx80_lt(a, b)) m_CF = 1; } } x87_check_exceptions(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); // TODO: correct cycle count } void x87_fcomip_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_x87_sw &= ~X87_SW_C1; floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; m_x87_sw |= X87_SW_IE; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (floatx80_eq(a, b)) m_ZF = 1; if (floatx80_lt(a, b)) m_CF = 1; } } if (x87_check_exceptions()) x87_inc_stack(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); // TODO: correct cycle count } void x87_fucomi_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_x87_sw &= ~X87_SW_C1; floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_quiet_nan(a) || floatx80_is_quiet_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; } else if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; m_x87_sw |= X87_SW_IE; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (floatx80_eq(a, b)) m_ZF = 1; if (floatx80_lt(a, b)) m_CF = 1; } } x87_check_exceptions(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); // TODO: correct cycle count } void x87_fucomip_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_x87_sw &= ~X87_SW_C1; floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_quiet_nan(a) || floatx80_is_quiet_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; } else if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; m_x87_sw |= X87_SW_IE; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (floatx80_eq(a, b)) m_ZF = 1; if (floatx80_lt(a, b)) m_CF = 1; } } if (x87_check_exceptions()) x87_inc_stack(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); // TODO: correct cycle count } void x87_fcompp(UINT8 modrm) { if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(1); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) { x87_inc_stack(); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(5); } /************************************* * * Unordererd comparison * *************************************/ void x87_fucom_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fucomp_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } void x87_fucompp(UINT8 modrm) { if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(1); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) { x87_inc_stack(); x87_inc_stack(); } m_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff; m_x87_data_ptr = 0; m_x87_ds = 0; CYCLES(4); } /************************************* * * Control * *************************************/ void x87_fdecstp(UINT8 modrm) { if (x87_mf_fault()) return; m_x87_sw &= ~X87_SW_C1; x87_set_stack_top(ST_TO_PHYS(7)); CYCLES(3); } void x87_fincstp(UINT8 modrm) { if (x87_mf_fault()) return; m_x87_sw &= ~X87_SW_C1; x87_set_stack_top(ST_TO_PHYS(1)); CYCLES(3); } void x87_fclex(UINT8 modrm) { m_x87_sw &= ~0x80ff; CYCLES(7); } void x87_ffree(UINT8 modrm) { if (x87_mf_fault()) return; x87_set_tag(ST_TO_PHYS(modrm & 7), X87_TW_EMPTY); CYCLES(3); } void x87_finit(UINT8 modrm) { x87_reset(); CYCLES(17); } void x87_fldcw(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); UINT16 cw = READ16(ea); x87_write_cw(cw); x87_check_exceptions(); CYCLES(4); } extern "C" { typedef void(*fldcw_t)(WORD); typedef void(*wait_t)(); typedef void(*fninit_t)(); typedef void(*fstcw_t)(WORD*); typedef void(*fstsw_t)(WORD*); typedef void(*frndint_t)(); typedef void(*fclex_t)(); typedef void(*fsave_t)(char*); typedef void(*frstor_t)(const char*); typedef void(*fstenv32_t)(char *); typedef DWORD(*fistp_t)(WORD); typedef struct { fldcw_t fldcw; wait_t wait; fninit_t fninit; fstcw_t fstcw; fstsw_t fstsw; frndint_t frndint; fclex_t fclex; fsave_t fsave; frstor_t frstor; fstenv32_t fstenv32; fistp_t fistp; } x87function; void fldcw(WORD cw) { x87_write_cw(cw); x87_check_exceptions(); } void wait() { /* static void I386OP(wait)() // Opcode 0x9B { // TODO } */ } void fninit() { x87_reset(); } void fstcw(WORD *ea) { *ea = m_x87_cw; //WRITE16(ea, m_x87_cw); } void fstsw(WORD *ea) { *ea = m_x87_sw; } void frndint() { floatx80 value; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = floatx80_round_to_int(ST(0)); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); } void fclex() { m_x87_sw &= ~0x80ff; } void fsave(char *ptr) { UINT32 ea = (UINT32)ptr; switch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1) { case 0: // 16-bit real mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); WRITE16(ea + 6, m_x87_inst_ptr & 0xffff); WRITE16(ea + 8, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0x0f0000) >> 4)); WRITE16(ea + 10, m_x87_data_ptr & 0xffff); WRITE16(ea + 12, (m_x87_data_ptr & 0x0f0000) >> 4); ea += 14; break; case 1: // 16-bit protected mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); WRITE16(ea + 6, m_x87_inst_ptr & 0xffff); WRITE16(ea + 8, m_x87_cs); WRITE16(ea + 10, m_x87_data_ptr & 0xffff); WRITE16(ea + 12, m_x87_ds); ea += 14; break; case 2: // 32-bit real mode WRITE32(ea + 0, 0xffff0000 | m_x87_cw); WRITE32(ea + 4, 0xffff0000 | m_x87_sw); WRITE32(ea + 8, 0xffff0000 | m_x87_tw); WRITE32(ea + 12, 0xffff0000 | (m_x87_inst_ptr & 0xffff)); WRITE32(ea + 16, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0xffff0000) >> 4)); WRITE32(ea + 20, 0xffff0000 | (m_x87_data_ptr & 0xffff)); WRITE32(ea + 24, (m_x87_data_ptr & 0xffff0000) >> 4); ea += 28; break; case 3: // 32-bit protected mode WRITE32(ea + 0, 0xffff0000 | m_x87_cw); WRITE32(ea + 4, 0xffff0000 | m_x87_sw); WRITE32(ea + 8, 0xffff0000 | m_x87_tw); WRITE32(ea + 12, m_x87_inst_ptr); WRITE32(ea + 16, (m_x87_opcode << 16) | m_x87_cs); WRITE32(ea + 20, m_x87_data_ptr); WRITE32(ea + 24, 0xffff0000 | m_x87_ds); ea += 28; break; } for (int i = 0; i < 8; ++i) WRITE80(ea + i*10, ST(i)); } void fstenv32(char *ptr) { UINT32 ea = (UINT32)ptr; WRITE32(ea + 0, 0xffff0000 | m_x87_cw); WRITE32(ea + 4, 0xffff0000 | m_x87_sw); WRITE32(ea + 8, 0xffff0000 | m_x87_tw); WRITE32(ea + 12, m_x87_inst_ptr); WRITE32(ea + 16, (m_x87_opcode << 16) | m_x87_cs); WRITE32(ea + 20, m_x87_data_ptr); WRITE32(ea + 24, 0xffff0000 | m_x87_ds); } void frstor(const char *ptr) { UINT32 ea = (UINT32)ptr; x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 2); m_x87_tw = READ16(ea + 4); for (int i = 0; i < 8; ++i) x87_write_stack(i, READ80(ea + i * 10), FALSE); } DWORD fistp(WORD round) { DWORD m32int = 0x80000000; if (!X87_IS_ST_EMPTY(0)) { int8 oldround = float_rounding_mode; float_rounding_mode = x87_to_sf_rc[round & 3]; floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(0x80000000); floatx80 upperLim = int32_to_floatx80(0x7fffffff); if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m32int = floatx80_to_int32(fx80); x87_inc_stack(); float_rounding_mode = oldround; } return m32int; } __declspec(dllexport) void load_x87function(x87function *func) { func->fclex = fclex; func->fldcw = fldcw; func->fninit = fninit; func->frndint = frndint; func->frstor = frstor; func->fsave = fsave; func->fstcw = fstcw; func->fstsw = fstsw; func->wait = wait; func->fistp = fistp; func->fstenv32 = fstenv32; } } void x87_fstcw(UINT8 modrm) { UINT32 ea = GetEA(modrm, 1); WRITE16(ea, m_x87_cw); CYCLES(3); } void x87_fldenv(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = Getx87EA(modrm, 0); UINT32 temp; switch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1) { case 0: // 16-bit real mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 2); m_x87_tw = READ16(ea + 4); m_x87_inst_ptr = READ16(ea + 6); temp = READ16(ea + 8); m_x87_opcode = temp & 0x7ff; m_x87_inst_ptr |= ((temp & 0xf000) << 4); m_x87_data_ptr = READ16(ea + 10) | ((READ16(ea + 12) & 0xf000) << 4); m_x87_cs = 0; m_x87_ds = 0; ea += 14; break; case 1: // 16-bit protected mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 2); m_x87_tw = READ16(ea + 4); m_x87_inst_ptr = READ16(ea + 6); m_x87_opcode = 0; m_x87_cs = READ16(ea + 8); m_x87_data_ptr = READ16(ea + 10); m_x87_ds = READ16(ea + 12); ea += 14; break; case 2: // 32-bit real mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 4); m_x87_tw = READ16(ea + 8); m_x87_inst_ptr = READ16(ea + 12); temp = READ32(ea + 16); m_x87_opcode = temp & 0x7ff; m_x87_inst_ptr |= ((temp & 0xffff000) << 4); m_x87_data_ptr = READ16(ea + 20) | ((READ32(ea + 24) & 0xffff000) << 4); m_x87_cs = 0; m_x87_ds = 0; ea += 28; break; case 3: // 32-bit protected mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 4); m_x87_tw = READ16(ea + 8); m_x87_inst_ptr = READ32(ea + 12); temp = READ32(ea + 16); m_x87_opcode = (temp >> 16) & 0x7ff; m_x87_cs = temp & 0xffff; m_x87_data_ptr = READ32(ea + 20); m_x87_ds = READ16(ea + 24); ea += 28; break; } x87_check_exceptions(); CYCLES((m_cr[0] & 1) ? 34 : 44); } void x87_fstenv(UINT8 modrm) { UINT32 ea = GetEA(modrm, 1); switch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1) { case 0: // 16-bit real mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); WRITE16(ea + 6, m_x87_inst_ptr & 0xffff); WRITE16(ea + 8, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0x0f0000) >> 4)); WRITE16(ea + 10, m_x87_data_ptr & 0xffff); WRITE16(ea + 12, (m_x87_data_ptr & 0x0f0000) >> 4); break; case 1: // 16-bit protected mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); WRITE16(ea + 6, m_x87_inst_ptr & 0xffff); WRITE16(ea + 8, m_x87_cs); WRITE16(ea + 10, m_x87_data_ptr & 0xffff); WRITE16(ea + 12, m_x87_ds); break; case 2: // 32-bit real mode WRITE32(ea + 0, 0xffff0000 | m_x87_cw); WRITE32(ea + 4, 0xffff0000 | m_x87_sw); WRITE32(ea + 8, 0xffff0000 | m_x87_tw); WRITE32(ea + 12, 0xffff0000 | (m_x87_inst_ptr & 0xffff)); WRITE32(ea + 16, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0xffff0000) >> 4)); WRITE32(ea + 20, 0xffff0000 | (m_x87_data_ptr & 0xffff)); WRITE32(ea + 24, (m_x87_data_ptr & 0xffff0000) >> 4); break; case 3: // 32-bit protected mode WRITE32(ea + 0, 0xffff0000 | m_x87_cw); WRITE32(ea + 4, 0xffff0000 | m_x87_sw); WRITE32(ea + 8, 0xffff0000 | m_x87_tw); WRITE32(ea + 12, m_x87_inst_ptr); WRITE32(ea + 16, (m_x87_opcode << 16) | m_x87_cs); WRITE32(ea + 20, m_x87_data_ptr); WRITE32(ea + 24, 0xffff0000 | m_x87_ds); break; } m_x87_cw |= 0x3f; // set all masks CYCLES((m_cr[0] & 1) ? 56 : 67); } void x87_fsave(UINT8 modrm) { UINT32 ea = GetEA(modrm, 1); switch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1) { case 0: // 16-bit real mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); WRITE16(ea + 6, m_x87_inst_ptr & 0xffff); WRITE16(ea + 8, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0x0f0000) >> 4)); WRITE16(ea + 10, m_x87_data_ptr & 0xffff); WRITE16(ea + 12, (m_x87_data_ptr & 0x0f0000) >> 4); ea += 14; break; case 1: // 16-bit protected mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); WRITE16(ea + 6, m_x87_inst_ptr & 0xffff); WRITE16(ea + 8, m_x87_cs); WRITE16(ea + 10, m_x87_data_ptr & 0xffff); WRITE16(ea + 12, m_x87_ds); ea += 14; break; case 2: // 32-bit real mode WRITE32(ea + 0, 0xffff0000 | m_x87_cw); WRITE32(ea + 4, 0xffff0000 | m_x87_sw); WRITE32(ea + 8, 0xffff0000 | m_x87_tw); WRITE32(ea + 12, 0xffff0000 | (m_x87_inst_ptr & 0xffff)); WRITE32(ea + 16, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0xffff0000) >> 4)); WRITE32(ea + 20, 0xffff0000 | (m_x87_data_ptr & 0xffff)); WRITE32(ea + 24, (m_x87_data_ptr & 0xffff0000) >> 4); ea += 28; break; case 3: // 32-bit protected mode WRITE32(ea + 0, 0xffff0000 | m_x87_cw); WRITE32(ea + 4, 0xffff0000 | m_x87_sw); WRITE32(ea + 8, 0xffff0000 | m_x87_tw); WRITE32(ea + 12, m_x87_inst_ptr); WRITE32(ea + 16, (m_x87_opcode << 16) | m_x87_cs); WRITE32(ea + 20, m_x87_data_ptr); WRITE32(ea + 24, 0xffff0000 | m_x87_ds); ea += 28; break; } for (int i = 0; i < 8; ++i) WRITE80(ea + i*10, ST(i)); x87_reset(); CYCLES((m_cr[0] & 1) ? 56 : 67); } void x87_frstor(UINT8 modrm) { if (x87_mf_fault()) return; UINT32 ea = GetEA(modrm, 0); UINT32 temp; switch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1) { case 0: // 16-bit real mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 2); m_x87_tw = READ16(ea + 4); m_x87_inst_ptr = READ16(ea + 6); temp = READ16(ea + 8); m_x87_opcode = temp & 0x7ff; m_x87_inst_ptr |= ((temp & 0xf000) << 4); m_x87_data_ptr = READ16(ea + 10) | ((READ16(ea + 12) & 0xf000) << 4); m_x87_cs = 0; m_x87_ds = 0; ea += 14; break; case 1: // 16-bit protected mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 2); m_x87_tw = READ16(ea + 4); m_x87_inst_ptr = READ16(ea + 6); m_x87_opcode = 0; m_x87_cs = READ16(ea + 8); m_x87_data_ptr = READ16(ea + 10); m_x87_ds = READ16(ea + 12); ea += 14; break; case 2: // 32-bit real mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 4); m_x87_tw = READ16(ea + 8); m_x87_inst_ptr = READ16(ea + 12); temp = READ32(ea + 16); m_x87_opcode = temp & 0x7ff; m_x87_inst_ptr |= ((temp & 0xffff000) << 4); m_x87_data_ptr = READ16(ea + 20) | ((READ32(ea + 24) & 0xffff000) << 4); m_x87_cs = 0; m_x87_ds = 0; ea += 28; break; case 3: // 32-bit protected mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 4); m_x87_tw = READ16(ea + 8); m_x87_inst_ptr = READ32(ea + 12); temp = READ32(ea + 16); m_x87_opcode = (temp >> 16) & 0x7ff; m_x87_cs = temp & 0xffff; m_x87_data_ptr = READ32(ea + 20); m_x87_ds = READ16(ea + 24); ea += 28; break; } for (int i = 0; i < 8; ++i) x87_write_stack(i, READ80(ea + i*10), FALSE); CYCLES((m_cr[0] & 1) ? 34 : 44); } void x87_fxch(UINT8 modrm) { if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) x87_set_stack_underflow(); if (x87_check_exceptions()) { floatx80 tmp = ST(0); ST(0) = ST(1); ST(1) = tmp; // Swap the tags int tag0 = X87_TAG(ST_TO_PHYS(0)); x87_set_tag(ST_TO_PHYS(0), X87_TAG(ST_TO_PHYS(1))); x87_set_tag(ST_TO_PHYS(1), tag0); } CYCLES(4); } void x87_fxch_sti(UINT8 modrm) { int i = modrm & 7; if (x87_mf_fault()) return; if (X87_IS_ST_EMPTY(0)) { ST(0) = fx80_inan; x87_set_tag(ST_TO_PHYS(0), X87_TW_SPECIAL); x87_set_stack_underflow(); } if (X87_IS_ST_EMPTY(i)) { ST(i) = fx80_inan; x87_set_tag(ST_TO_PHYS(i), X87_TW_SPECIAL); x87_set_stack_underflow(); } if (x87_check_exceptions()) { floatx80 tmp = ST(0); ST(0) = ST(i); ST(i) = tmp; // Swap the tags int tag0 = X87_TAG(ST_TO_PHYS(0)); x87_set_tag(ST_TO_PHYS(0), X87_TAG(ST_TO_PHYS(i))); x87_set_tag(ST_TO_PHYS(i), tag0); } CYCLES(4); } void x87_fstsw_ax(UINT8 modrm) { REG16(AX) = m_x87_sw; CYCLES(3); } void x87_fstsw_m2byte(UINT8 modrm) { UINT32 ea = GetEA(modrm, 1); WRITE16(ea, m_x87_sw); CYCLES(3); } void x87_invalid(UINT8 modrm) { // TODO report_invalid_opcode(); i386_trap(6, 0, 0); } /************************************* * * Instruction dispatch * *************************************/ static void I386OP(x87_group_d8)() { UINT8 modrm = FETCH(); m_opcode_table_x87_d8[modrm](modrm); } static void I386OP(x87_group_d9)() { UINT8 modrm = FETCH(); m_opcode_table_x87_d9[modrm](modrm); } static void I386OP(x87_group_da)() { UINT8 modrm = FETCH(); m_opcode_table_x87_da[modrm](modrm); } static void I386OP(x87_group_db)() { UINT8 modrm = FETCH(); m_opcode_table_x87_db[modrm](modrm); } static void I386OP(x87_group_dc)() { UINT8 modrm = FETCH(); m_opcode_table_x87_dc[modrm](modrm); } static void I386OP(x87_group_dd)() { UINT8 modrm = FETCH(); m_opcode_table_x87_dd[modrm](modrm); } static void I386OP(x87_group_de)() { UINT8 modrm = FETCH(); m_opcode_table_x87_de[modrm](modrm); } static void I386OP(x87_group_df)() { UINT8 modrm = FETCH(); m_opcode_table_x87_df[modrm](modrm); } /************************************* * * Opcode table building * *************************************/ void build_x87_opcode_table_d8() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fadd_m32real; break; case 0x01: ptr = x87_fmul_m32real; break; case 0x02: ptr = x87_fcom_m32real; break; case 0x03: ptr = x87_fcomp_m32real; break; case 0x04: ptr = x87_fsub_m32real; break; case 0x05: ptr = x87_fsubr_m32real; break; case 0x06: ptr = x87_fdiv_m32real; break; case 0x07: ptr = x87_fdivr_m32real; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fadd_st_sti; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmul_st_sti; break; case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fcom_sti; break; case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fcomp_sti; break; case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsub_st_sti; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsubr_st_sti; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdiv_st_sti; break; case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdivr_st_sti; break; } } m_opcode_table_x87_d8[modrm] = ptr; } } void build_x87_opcode_table_d9() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fld_m32real; break; case 0x02: ptr = x87_fst_m32real; break; case 0x03: ptr = x87_fstp_m32real; break; case 0x04: ptr = x87_fldenv; break; case 0x05: ptr = x87_fldcw; break; case 0x06: ptr = x87_fstenv; break; case 0x07: ptr = x87_fstcw; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fld_sti; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fxch_sti; break; case 0xd0: ptr = x87_fnop; break; case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fstp_sti; break; case 0xe0: ptr = x87_fchs; break; case 0xe1: ptr = x87_fabs; break; case 0xe4: ptr = x87_ftst; break; case 0xe5: ptr = x87_fxam; break; case 0xe8: ptr = x87_fld1; break; case 0xe9: ptr = x87_fldl2t; break; case 0xea: ptr = x87_fldl2e; break; case 0xeb: ptr = x87_fldpi; break; case 0xec: ptr = x87_fldlg2; break; case 0xed: ptr = x87_fldln2; break; case 0xee: ptr = x87_fldz; break; case 0xf0: ptr = x87_f2xm1; break; case 0xf1: ptr = x87_fyl2x; break; case 0xf2: ptr = x87_fptan; break; case 0xf3: ptr = x87_fpatan; break; case 0xf4: ptr = x87_fxtract; break; case 0xf5: ptr = x87_fprem1; break; case 0xf6: ptr = x87_fdecstp; break; case 0xf7: ptr = x87_fincstp; break; case 0xf8: ptr = x87_fprem; break; case 0xf9: ptr = x87_fyl2xp1; break; case 0xfa: ptr = x87_fsqrt; break; case 0xfb: ptr = x87_fsincos; break; case 0xfc: ptr = x87_frndint; break; case 0xfd: ptr = x87_fscale; break; case 0xfe: ptr = x87_fsin; break; case 0xff: ptr = x87_fcos; break; } } m_opcode_table_x87_d9[modrm] = ptr; } } void build_x87_opcode_table_da() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fiadd_m32int; break; case 0x01: ptr = x87_fimul_m32int; break; case 0x02: ptr = x87_ficom_m32int; break; case 0x03: ptr = x87_ficomp_m32int; break; case 0x04: ptr = x87_fisub_m32int; break; case 0x05: ptr = x87_fisubr_m32int; break; case 0x06: ptr = x87_fidiv_m32int; break; case 0x07: ptr = x87_fidivr_m32int; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fcmovb_sti; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fcmove_sti; break; case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fcmovbe_sti; break; case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fcmovu_sti; break; case 0xe9: ptr = x87_fucompp; break; } } m_opcode_table_x87_da[modrm] = ptr; } } void build_x87_opcode_table_db() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fild_m32int; break; case 0x02: ptr = x87_fist_m32int; break; case 0x03: ptr = x87_fistp_m32int; break; case 0x05: ptr = x87_fld_m80real; break; case 0x07: ptr = x87_fstp_m80real; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fcmovnb_sti; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fcmovne_sti; break; case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fcmovnbe_sti; break; case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fcmovnu_sti; break; case 0xe0: ptr = x87_fnop; break; /* FENI */ case 0xe1: ptr = x87_fnop; break; /* FDISI */ case 0xe2: ptr = x87_fclex; break; case 0xe3: ptr = x87_finit; break; case 0xe4: ptr = x87_fnop; break; /* FSETPM */ case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fucomi_sti; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fcomi_sti; break; } } m_opcode_table_x87_db[modrm] = ptr; } } void build_x87_opcode_table_dc() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fadd_m64real; break; case 0x01: ptr = x87_fmul_m64real; break; case 0x02: ptr = x87_fcom_m64real; break; case 0x03: ptr = x87_fcomp_m64real; break; case 0x04: ptr = x87_fsub_m64real; break; case 0x05: ptr = x87_fsubr_m64real; break; case 0x06: ptr = x87_fdiv_m64real; break; case 0x07: ptr = x87_fdivr_m64real; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fadd_sti_st; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmul_sti_st; break; case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsubr_sti_st; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsub_sti_st; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdivr_sti_st; break; case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdiv_sti_st; break; } } m_opcode_table_x87_dc[modrm] = ptr; } } void build_x87_opcode_table_dd() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fld_m64real; break; case 0x02: ptr = x87_fst_m64real; break; case 0x03: ptr = x87_fstp_m64real; break; case 0x04: ptr = x87_frstor; break; case 0x06: ptr = x87_fsave; break; case 0x07: ptr = x87_fstsw_m2byte; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_ffree; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fxch_sti; break; case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fst_sti; break; case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fstp_sti; break; case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fucom_sti; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fucomp_sti; break; } } m_opcode_table_x87_dd[modrm] = ptr; } } void build_x87_opcode_table_de() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fiadd_m16int; break; case 0x01: ptr = x87_fimul_m16int; break; case 0x02: ptr = x87_ficom_m16int; break; case 0x03: ptr = x87_ficomp_m16int; break; case 0x04: ptr = x87_fisub_m16int; break; case 0x05: ptr = x87_fisubr_m16int; break; case 0x06: ptr = x87_fidiv_m16int; break; case 0x07: ptr = x87_fidivr_m16int; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_faddp; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmulp; break; case 0xd9: ptr = x87_fcompp; break; case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsubrp; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsubp; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdivrp; break; case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdivp; break; } } m_opcode_table_x87_de[modrm] = ptr; } } void build_x87_opcode_table_df() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fild_m16int; break; case 0x02: ptr = x87_fist_m16int; break; case 0x03: ptr = x87_fistp_m16int; break; case 0x04: ptr = x87_fbld; break; case 0x05: ptr = x87_fild_m64int; break; case 0x06: ptr = x87_fbstp; break; case 0x07: ptr = x87_fistp_m64int; break; } } else { switch (modrm) { case 0xe0: ptr = x87_fstsw_ax; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fucomip_sti; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fcomip_sti; break; } } m_opcode_table_x87_df[modrm] = ptr; } } void build_x87_opcode_table() { build_x87_opcode_table_d8(); build_x87_opcode_table_d9(); build_x87_opcode_table_da(); build_x87_opcode_table_db(); build_x87_opcode_table_dc(); build_x87_opcode_table_dd(); build_x87_opcode_table_de(); build_x87_opcode_table_df(); } ================================================ FILE: vm86/mame/emu/cpu/i386.old/cycles.h ================================================ #pragma once #ifndef __CYCLES_H__ #define __CYCLES_H__ enum X86_CYCLES { CYCLES_MOV_REG_REG, CYCLES_MOV_REG_MEM, CYCLES_MOV_MEM_REG, CYCLES_MOV_IMM_REG, CYCLES_MOV_IMM_MEM, CYCLES_MOV_ACC_MEM, CYCLES_MOV_MEM_ACC, CYCLES_MOV_REG_SREG, CYCLES_MOV_MEM_SREG, CYCLES_MOV_SREG_REG, CYCLES_MOV_SREG_MEM, CYCLES_MOVSX_REG_REG, CYCLES_MOVSX_MEM_REG, CYCLES_MOVZX_REG_REG, CYCLES_MOVZX_MEM_REG, CYCLES_PUSH_RM, CYCLES_PUSH_REG_SHORT, CYCLES_PUSH_SREG, CYCLES_PUSH_IMM, CYCLES_PUSHA, CYCLES_POP_RM, CYCLES_POP_REG_SHORT, CYCLES_POP_SREG, CYCLES_POPA, CYCLES_XCHG_REG_REG, CYCLES_XCHG_REG_MEM, CYCLES_IN, CYCLES_IN_VAR, CYCLES_OUT, CYCLES_OUT_VAR, CYCLES_LEA, CYCLES_LDS, CYCLES_LES, CYCLES_LFS, CYCLES_LGS, CYCLES_LSS, CYCLES_CLC, CYCLES_CLD, CYCLES_CLI, CYCLES_CLTS, CYCLES_CMC, CYCLES_LAHF, CYCLES_POPF, CYCLES_PUSHF, CYCLES_SAHF, CYCLES_STC, CYCLES_STD, CYCLES_STI, CYCLES_ALU_REG_REG, CYCLES_ALU_REG_MEM, CYCLES_ALU_MEM_REG, CYCLES_ALU_IMM_REG, CYCLES_ALU_IMM_MEM, CYCLES_ALU_IMM_ACC, CYCLES_INC_REG, CYCLES_INC_MEM, CYCLES_DEC_REG, CYCLES_DEC_MEM, CYCLES_CMP_REG_REG, CYCLES_CMP_REG_MEM, CYCLES_CMP_MEM_REG, CYCLES_CMP_IMM_REG, CYCLES_CMP_IMM_MEM, CYCLES_CMP_IMM_ACC, CYCLES_TEST_REG_REG, CYCLES_TEST_REG_MEM, CYCLES_TEST_IMM_REG, CYCLES_TEST_IMM_MEM, CYCLES_TEST_IMM_ACC, CYCLES_NEG_REG, CYCLES_NEG_MEM, CYCLES_AAA, CYCLES_AAS, CYCLES_DAA, CYCLES_DAS, CYCLES_MUL8_ACC_REG, CYCLES_MUL8_ACC_MEM, CYCLES_MUL16_ACC_REG, CYCLES_MUL16_ACC_MEM, CYCLES_MUL32_ACC_REG, CYCLES_MUL32_ACC_MEM, CYCLES_IMUL8_ACC_REG, CYCLES_IMUL8_ACC_MEM, CYCLES_IMUL16_ACC_REG, CYCLES_IMUL16_ACC_MEM, CYCLES_IMUL32_ACC_REG, CYCLES_IMUL32_ACC_MEM, CYCLES_IMUL8_REG_REG, CYCLES_IMUL8_REG_MEM, CYCLES_IMUL16_REG_REG, CYCLES_IMUL16_REG_MEM, CYCLES_IMUL32_REG_REG, CYCLES_IMUL32_REG_MEM, CYCLES_IMUL16_REG_IMM_REG, CYCLES_IMUL16_MEM_IMM_REG, CYCLES_IMUL32_REG_IMM_REG, CYCLES_IMUL32_MEM_IMM_REG, CYCLES_DIV8_ACC_REG, CYCLES_DIV8_ACC_MEM, CYCLES_DIV16_ACC_REG, CYCLES_DIV16_ACC_MEM, CYCLES_DIV32_ACC_REG, CYCLES_DIV32_ACC_MEM, CYCLES_IDIV8_ACC_REG, CYCLES_IDIV8_ACC_MEM, CYCLES_IDIV16_ACC_REG, CYCLES_IDIV16_ACC_MEM, CYCLES_IDIV32_ACC_REG, CYCLES_IDIV32_ACC_MEM, CYCLES_AAD, CYCLES_AAM, CYCLES_CBW, CYCLES_CWD, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM, CYCLES_SHLD_REG, CYCLES_SHLD_MEM, CYCLES_SHRD_REG, CYCLES_SHRD_MEM, CYCLES_NOT_REG, CYCLES_NOT_MEM, CYCLES_CMPS, CYCLES_INS, CYCLES_LODS, CYCLES_MOVS, CYCLES_OUTS, CYCLES_SCAS, CYCLES_STOS, CYCLES_XLAT, CYCLES_REP_CMPS_BASE, CYCLES_REP_INS_BASE, CYCLES_REP_LODS_BASE, CYCLES_REP_MOVS_BASE, CYCLES_REP_OUTS_BASE, CYCLES_REP_SCAS_BASE, CYCLES_REP_STOS_BASE, CYCLES_REP_CMPS, CYCLES_REP_INS, CYCLES_REP_LODS, CYCLES_REP_MOVS, CYCLES_REP_OUTS, CYCLES_REP_SCAS, CYCLES_REP_STOS, CYCLES_BSF_BASE, CYCLES_BSF, CYCLES_BSR_BASE, CYCLES_BSR, CYCLES_BT_IMM_REG, CYCLES_BT_IMM_MEM, CYCLES_BT_REG_REG, CYCLES_BT_REG_MEM, CYCLES_BTC_IMM_REG, CYCLES_BTC_IMM_MEM, CYCLES_BTC_REG_REG, CYCLES_BTC_REG_MEM, CYCLES_BTR_IMM_REG, CYCLES_BTR_IMM_MEM, CYCLES_BTR_REG_REG, CYCLES_BTR_REG_MEM, CYCLES_BTS_IMM_REG, CYCLES_BTS_IMM_MEM, CYCLES_BTS_REG_REG, CYCLES_BTS_REG_MEM, CYCLES_CALL, // E8 CYCLES_CALL_REG, // FF /2 CYCLES_CALL_MEM, // FF /2 CYCLES_CALL_INTERSEG, // 9A CYCLES_CALL_REG_INTERSEG, // FF /3 CYCLES_CALL_MEM_INTERSEG, // FF /3 CYCLES_JMP_SHORT, // EB CYCLES_JMP, // E9 CYCLES_JMP_REG, // FF /4 CYCLES_JMP_MEM, // FF /4 CYCLES_JMP_INTERSEG, // EA CYCLES_JMP_REG_INTERSEG, // FF /5 CYCLES_JMP_MEM_INTERSEG, // FF /5 CYCLES_RET, // C3 CYCLES_RET_IMM, // C2 CYCLES_RET_INTERSEG, // CB CYCLES_RET_IMM_INTERSEG, // CA CYCLES_JCC_DISP8, CYCLES_JCC_FULL_DISP, CYCLES_JCC_DISP8_NOBRANCH, CYCLES_JCC_FULL_DISP_NOBRANCH, CYCLES_JCXZ, CYCLES_JCXZ_NOBRANCH, CYCLES_LOOP, CYCLES_LOOPZ, CYCLES_LOOPNZ, CYCLES_SETCC_REG, CYCLES_SETCC_MEM, CYCLES_ENTER, CYCLES_LEAVE, CYCLES_INT, CYCLES_INT3, CYCLES_INTO_OF1, CYCLES_INTO_OF0, CYCLES_BOUND_IN_RANGE, CYCLES_BOUND_OUT_RANGE, CYCLES_IRET, CYCLES_HLT, CYCLES_MOV_REG_CR0, CYCLES_MOV_REG_CR2, CYCLES_MOV_REG_CR3, CYCLES_MOV_CR_REG, CYCLES_MOV_REG_DR0_3, CYCLES_MOV_REG_DR6_7, CYCLES_MOV_DR6_7_REG, CYCLES_MOV_DR0_3_REG, CYCLES_MOV_REG_TR6_7, CYCLES_MOV_TR6_7_REG, CYCLES_NOP, CYCLES_WAIT, CYCLES_ARPL_REG, CYCLES_ARPL_MEM, CYCLES_LAR_REG, CYCLES_LAR_MEM, CYCLES_LGDT, CYCLES_LIDT, CYCLES_LLDT_REG, CYCLES_LLDT_MEM, CYCLES_LMSW_REG, CYCLES_LMSW_MEM, CYCLES_LSL_REG, CYCLES_LSL_MEM, CYCLES_LTR_REG, CYCLES_LTR_MEM, CYCLES_SGDT, CYCLES_SIDT, CYCLES_SLDT_REG, CYCLES_SLDT_MEM, CYCLES_SMSW_REG, CYCLES_SMSW_MEM, CYCLES_STR_REG, CYCLES_STR_MEM, CYCLES_VERR_REG, CYCLES_VERR_MEM, CYCLES_VERW_REG, CYCLES_VERW_MEM, CYCLES_LOCK, CYCLES_BSWAP, CYCLES_CMPXCHG8B, CYCLES_CMPXCHG, CYCLES_CPUID, CYCLES_CPUID_EAX1, CYCLES_INVD, CYCLES_XADD, CYCLES_RDTSC, CYCLES_RSM, CYCLES_RDMSR, CYCLES_FABS, CYCLES_FADD, CYCLES_FBLD, CYCLES_FBSTP, CYCLES_FCHS, CYCLES_FCLEX, CYCLES_FCOM, CYCLES_FCOS, CYCLES_FDECSTP, CYCLES_FDISI, CYCLES_FDIV, CYCLES_FDIVR, CYCLES_FENI, CYCLES_FFREE, CYCLES_FIADD, CYCLES_FICOM, CYCLES_FIDIV, CYCLES_FILD, CYCLES_FIMUL, CYCLES_FINCSTP, CYCLES_FINIT, CYCLES_FIST, CYCLES_FISUB, CYCLES_FLD, CYCLES_FLDZ, CYCLES_FLD1, CYCLES_FLDL2E, CYCLES_FLDL2T, CYCLES_FLDLG2, CYCLES_FLDLN2, CYCLES_FLDPI, CYCLES_FLDCW, CYCLES_FLDENV, CYCLES_FMUL, CYCLES_FNOP, CYCLES_FPATAN, CYCLES_FPREM, CYCLES_FPREM1, CYCLES_FPTAN, CYCLES_FRNDINT, CYCLES_FRSTOR, CYCLES_FSAVE, CYCLES_FSCALE, CYCLES_FSETPM, CYCLES_FSIN, CYCLES_FSINCOS, CYCLES_FSQRT, CYCLES_FST, CYCLES_FSTCW, CYCLES_FSTENV, CYCLES_FSTSW, CYCLES_FSUB, CYCLES_FSUBR, CYCLES_FTST, CYCLES_FUCOM, CYCLES_FXAM, CYCLES_FXCH, CYCLES_FXTRACT, CYCLES_FYL2X, CYCLES_FYL2XPI, CYCLES_CMPXCHG_REG_REG_T, CYCLES_CMPXCHG_REG_REG_F, CYCLES_CMPXCHG_REG_MEM_T, CYCLES_CMPXCHG_REG_MEM_F, CYCLES_XADD_REG_REG, CYCLES_XADD_REG_MEM, CYCLES_NUM_OPCODES }; #define X86_NUM_CPUS 4 #define CPU_CYCLES_I386 0 #define CPU_CYCLES_I486 1 #define CPU_CYCLES_PENTIUM 2 #define CPU_CYCLES_MEDIAGX 3 struct X86_CYCLE_TABLE { X86_CYCLES op; UINT8 cpu_cycles[X86_NUM_CPUS][2]; }; static const X86_CYCLE_TABLE x86_cycle_table[] = { // opcode rm/pmode // i386 i486 pentium mediagx { CYCLES_MOV_REG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_REG_MEM, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_MEM_REG, { { 4, 4 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_IMM_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_IMM_MEM, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_ACC_MEM, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_MEM_ACC, { { 4, 4 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_MOV_REG_SREG, { { 2, 18 }, { 3, 3 }, { 2, 2 }, { 1, 6 } } }, { CYCLES_MOV_MEM_SREG, { { 5, 19 }, { 9, 9 }, { 3, 3 }, { 1, 6 } } }, { CYCLES_MOV_SREG_REG, { { 2, 2 }, { 3, 3 }, { 1, 1 }, { 1, 6 } } }, { CYCLES_MOV_SREG_MEM, { { 2, 2 }, { 3, 3 }, { 1, 1 }, { 1, 6 } } }, { CYCLES_MOVSX_REG_REG, { { 3, 3 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_MOVSX_MEM_REG, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_MOVZX_REG_REG, { { 3, 3 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_MOVZX_MEM_REG, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_PUSH_RM, { { 5, 5 }, { 4, 4 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_PUSH_REG_SHORT, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_PUSH_SREG, { { 2, 2 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_PUSH_IMM, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_PUSHA, { { 18, 18 }, { 11, 11 }, { 5, 5 }, { 11, 11 } } }, { CYCLES_POP_RM, { { 5, 5 }, { 4, 4 }, { 3, 3 }, { 4, 4 } } }, { CYCLES_POP_REG_SHORT, { { 4, 4 }, { 4, 4 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_POP_SREG, { { 7, 21 }, { 3, 3 }, { 3, 3 }, { 1, 6 } } }, { CYCLES_POPA, { { 24, 24 }, { 9, 9 }, { 5, 5 }, { 9, 9 } } }, { CYCLES_XCHG_REG_REG, { { 3, 3 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_XCHG_REG_MEM, { { 5, 5 }, { 5, 5 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_IN, { { 12, 26 }, { 14, 27 }, { 7, 19 }, { 8, 8 } } }, { CYCLES_IN_VAR, { { 13, 27 }, { 14, 27 }, { 7, 19 }, { 8, 8 } } }, { CYCLES_OUT, { { 10, 24 }, { 16, 29 }, { 12, 24 }, { 14, 14 } } }, { CYCLES_OUT_VAR, { { 11, 25 }, { 16, 29 }, { 12, 24 }, { 14, 14 } } }, { CYCLES_LEA, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_LDS, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 9 } } }, { CYCLES_LES, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 9 } } }, { CYCLES_LFS, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 9 } } }, { CYCLES_LGS, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 9 } } }, { CYCLES_LSS, { { 7, 22 }, { 6, 12 }, { 4, 4 }, { 4, 10 } } }, { CYCLES_CLC, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_CLD, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 4, 4 } } }, { CYCLES_CLI, { { 8, 8 }, { 5, 5 }, { 7, 7 }, { 6, 6 } } }, { CYCLES_CLTS, { { 6, 6 }, { 7, 7 }, { 10, 10 }, { 7, 7 } } }, { CYCLES_CMC, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_LAHF, { { 2, 2 }, { 3, 3 }, { 2, 2 }, { 2, 2 } } }, { CYCLES_POPF, { { 5, 5 }, { 9, 9 }, { 6, 6 }, { 8, 8 } } }, { CYCLES_PUSHF, { { 4, 4 }, { 4, 4 }, { 9, 9 }, { 2, 2 } } }, { CYCLES_SAHF, { { 3, 3 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_STC, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_STD, { { 2, 2 }, { 2, 2 }, { 2, 2 }, { 4, 4 } } }, { CYCLES_STI, { { 8, 8 }, { 5, 5 }, { 7, 7 }, { 6, 6 } } }, { CYCLES_ALU_REG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_ALU_REG_MEM, { { 7, 7 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_ALU_MEM_REG, { { 6, 6 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_ALU_IMM_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_ALU_IMM_MEM, { { 7, 7 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_ALU_IMM_ACC, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_INC_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_INC_MEM, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_DEC_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_DEC_MEM, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_CMP_REG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_CMP_REG_MEM, { { 5, 5 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_CMP_MEM_REG, { { 6, 6 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_CMP_IMM_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_CMP_IMM_MEM, { { 5, 5 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_CMP_IMM_ACC, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_TEST_REG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_TEST_REG_MEM, { { 5, 5 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_TEST_IMM_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_TEST_IMM_MEM, { { 5, 5 }, { 2, 2 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_TEST_IMM_ACC, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_NEG_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_NEG_MEM, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_AAA, { { 4, 4 }, { 3, 3 }, { 3, 3 }, { 3, 3 } } }, { CYCLES_AAS, { { 4, 4 }, { 3, 3 }, { 3, 3 }, { 3, 3 } } }, { CYCLES_DAA, { { 4, 4 }, { 2, 2 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_DAS, { { 4, 4 }, { 2, 2 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_MUL8_ACC_REG, { { 17, 17 }, { 13, 13 }, { 11, 11 }, { 4, 4 } } }, { CYCLES_MUL8_ACC_MEM, { { 20, 20 }, { 13, 13 }, { 11, 11 }, { 4, 4 } } }, { CYCLES_MUL16_ACC_REG, { { 25, 25 }, { 13, 13 }, { 11, 11 }, { 5, 5 } } }, { CYCLES_MUL16_ACC_MEM, { { 28, 28 }, { 13, 13 }, { 11, 11 }, { 5, 5 } } }, { CYCLES_MUL32_ACC_REG, { { 41, 41 }, { 13, 13 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_MUL32_ACC_MEM, { { 44, 44 }, { 13, 13 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL8_ACC_REG, { { 17, 17 }, { 18, 18 }, { 11, 11 }, { 4, 4 } } }, { CYCLES_IMUL8_ACC_MEM, { { 20, 20 }, { 18, 18 }, { 11, 11 }, { 4, 4 } } }, { CYCLES_IMUL16_ACC_REG, { { 25, 25 }, { 26, 26 }, { 11, 11 }, { 5, 5 } } }, { CYCLES_IMUL16_ACC_MEM, { { 28, 28 }, { 26, 26 }, { 11, 11 }, { 5, 5 } } }, { CYCLES_IMUL32_ACC_REG, { { 41, 41 }, { 42, 42 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL32_ACC_MEM, { { 44, 44 }, { 42, 42 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL8_REG_REG, { { 17, 17 }, { 13, 13 }, { 10, 10 }, { 4, 4 } } }, { CYCLES_IMUL8_REG_MEM, { { 20, 20 }, { 13, 13 }, { 10, 10 }, { 4, 4 } } }, { CYCLES_IMUL16_REG_REG, { { 25, 25 }, { 13, 13 }, { 10, 10 }, { 5, 5 } } }, { CYCLES_IMUL16_REG_MEM, { { 28, 28 }, { 13, 13 }, { 10, 10 }, { 5, 5 } } }, { CYCLES_IMUL32_REG_REG, { { 41, 41 }, { 13, 13 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL32_REG_MEM, { { 44, 44 }, { 13, 13 }, { 10, 10 }, { 15, 15 } } }, { CYCLES_IMUL16_REG_IMM_REG,{ { 26, 26 }, { 26, 26 }, { 10, 10 }, { 6, 6 } } }, { CYCLES_IMUL16_MEM_IMM_REG,{ { 27, 27 }, { 26, 26 }, { 10, 10 }, { 6, 6 } } }, { CYCLES_IMUL32_REG_IMM_REG,{ { 42, 42 }, { 42, 42 }, { 10, 10 }, { 16, 16 } } }, { CYCLES_IMUL32_MEM_IMM_REG,{ { 43, 43 }, { 42, 42 }, { 10, 10 }, { 16, 16 } } }, { CYCLES_DIV8_ACC_REG, { { 14, 14 }, { 16, 16 }, { 17, 17 }, { 20, 20 } } }, { CYCLES_DIV8_ACC_MEM, { { 17, 17 }, { 16, 16 }, { 17, 17 }, { 20, 20 } } }, { CYCLES_DIV16_ACC_REG, { { 22, 22 }, { 24, 24 }, { 25, 25 }, { 29, 29 } } }, { CYCLES_DIV16_ACC_MEM, { { 25, 25 }, { 24, 24 }, { 25, 25 }, { 29, 29 } } }, { CYCLES_DIV32_ACC_REG, { { 38, 38 }, { 40, 40 }, { 41, 41 }, { 45, 45 } } }, { CYCLES_DIV32_ACC_MEM, { { 41, 41 }, { 40, 40 }, { 41, 41 }, { 45, 45 } } }, { CYCLES_IDIV8_ACC_REG, { { 19, 19 }, { 19, 19 }, { 22, 22 }, { 20, 20 } } }, { CYCLES_IDIV8_ACC_MEM, { { 22, 22 }, { 20, 20 }, { 22, 22 }, { 20, 20 } } }, { CYCLES_IDIV16_ACC_REG, { { 27, 27 }, { 27, 27 }, { 30, 30 }, { 29, 29 } } }, { CYCLES_IDIV16_ACC_MEM, { { 30, 30 }, { 28, 28 }, { 30, 30 }, { 29, 29 } } }, { CYCLES_IDIV32_ACC_REG, { { 43, 43 }, { 43, 43 }, { 46, 46 }, { 45, 45 } } }, { CYCLES_IDIV32_ACC_MEM, { { 46, 46 }, { 44, 44 }, { 46, 46 }, { 45, 45 } } }, { CYCLES_AAD, { { 19, 19 }, { 14, 14 }, { 10, 10 }, { 7, 7 } } }, { CYCLES_AAM, { { 17, 17 }, { 15, 15 }, { 18, 18 }, { 19, 19 } } }, { CYCLES_CBW, { { 3, 3 }, { 3, 3 }, { 3, 3 }, { 3, 3 } } }, { CYCLES_CWD, { { 2, 2 }, { 3, 3 }, { 2, 2 }, { 2, 2 } } }, { CYCLES_ROTATE_REG, { { 3, 3 }, { 3, 3 }, { 1, 1 }, { 2, 2 } } }, { CYCLES_ROTATE_MEM, { { 7, 7 }, { 4, 4 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_ROTATE_CARRY_REG, { { 9, 9 }, { 8, 8 }, { 7, 7 }, { 8, 8 } } }, { CYCLES_ROTATE_CARRY_MEM, { { 10, 10 }, { 9, 9 }, { 8, 8 }, { 8, 8 } } }, { CYCLES_SHLD_REG, { { 3, 3 }, { 2, 2 }, { 4, 4 }, { 3, 3 } } }, { CYCLES_SHLD_MEM, { { 7, 7 }, { 3, 3 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_SHRD_REG, { { 3, 3 }, { 2, 2 }, { 4, 4 }, { 3, 3 } } }, { CYCLES_SHRD_MEM, { { 7, 7 }, { 3, 3 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_NOT_REG, { { 2, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_NOT_MEM, { { 6, 6 }, { 3, 3 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_CMPS, { { 10, 10 }, { 8, 8 }, { 5, 5 }, { 6, 6 } } }, { CYCLES_INS, { { 15, 29 }, { 17, 30 }, { 9, 22 }, { 11, 11 } } }, { CYCLES_LODS, { { 5, 5 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_MOVS, { { 8, 8 }, { 7, 7 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_OUTS, { { 14, 28 }, { 17, 30 }, { 13, 25 }, { 15, 15 } } }, { CYCLES_SCAS, { { 8, 8 }, { 6, 6 }, { 4, 4 }, { 2, 2 } } }, { CYCLES_STOS, { { 5, 5 }, { 5, 5 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_XLAT, { { 5, 5 }, { 4, 4 }, { 4, 4 }, { 5, 5 } } }, { CYCLES_REP_CMPS_BASE, { { 5, 5 }, { 0, 0 }, { 0, 0 }, { 11, 11 } } }, { CYCLES_REP_INS_BASE, { { 14, 8 }, { 0, 0 }, { 0, 0 }, { 17, 17 } } }, { CYCLES_REP_LODS_BASE, { { 5, 5 }, { 0, 0 }, { 0, 0 }, { 9, 9 } } }, { CYCLES_REP_MOVS_BASE, { { 8, 8 }, { 0, 0 }, { 0, 0 }, { 12, 12 } } }, { CYCLES_REP_OUTS_BASE, { { 12, 6 }, { 0, 0 }, { 0, 0 }, { 24, 24 } } }, { CYCLES_REP_SCAS_BASE, { { 5, 5 }, { 0, 0 }, { 0, 0 }, { 9, 9 } } }, { CYCLES_REP_STOS_BASE, { { 5, 5 }, { 0, 0 }, { 0, 0 }, { 9, 9 } } }, { CYCLES_REP_CMPS, { { 5, 5 }, { 8, 8 }, { 5, 5 }, { 4, 4 } } }, { CYCLES_REP_INS, { { 14, 8 }, { 17, 30 }, { 9, 22 }, { 4, 4 } } }, { CYCLES_REP_LODS, { { 5, 5 }, { 5, 5 }, { 2, 2 }, { 2, 2 } } }, { CYCLES_REP_MOVS, { { 8, 8 }, { 7, 7 }, { 4, 4 }, { 2, 2 } } }, { CYCLES_REP_OUTS, { { 12, 6 }, { 17, 30 }, { 13, 25 }, { 4, 4 } } }, { CYCLES_REP_SCAS, { { 5, 5 }, { 6, 6 }, { 4, 4 }, { 3, 3 } } }, { CYCLES_REP_STOS, { { 5, 5 }, { 5, 5 }, { 3, 3 }, { 2, 2 } } }, { CYCLES_BSF_BASE, { { 11, 11 }, { 6, 6 }, { 6, 6 }, { 4, 4 } } }, { CYCLES_BSF, { { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_BSR_BASE, { { 9, 9 }, { 6, 6 }, { 7, 7 }, { 4, 4 } } }, { CYCLES_BSR, { { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_BT_IMM_REG, { { 3, 3 }, { 3, 3 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_BT_IMM_MEM, { { 6, 6 }, { 6, 6 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_BT_REG_REG, { { 3, 3 }, { 3, 3 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_BT_REG_MEM, { { 12, 12 }, { 12, 12 }, { 9, 9 }, { 7, 7 } } }, { CYCLES_BTC_IMM_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTC_IMM_MEM, { { 8, 8 }, { 8, 8 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_BTC_REG_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTC_REG_MEM, { { 13, 13 }, { 13, 13 }, { 13, 13 }, { 8, 8 } } }, { CYCLES_BTR_IMM_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTR_IMM_MEM, { { 8, 8 }, { 8, 8 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_BTR_REG_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTR_REG_MEM, { { 13, 13 }, { 13, 13 }, { 13, 13 }, { 8, 8 } } }, { CYCLES_BTS_IMM_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTS_IMM_MEM, { { 8, 8 }, { 8, 8 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_BTS_REG_REG, { { 6, 6 }, { 6, 6 }, { 7, 7 }, { 2, 2 } } }, { CYCLES_BTS_REG_MEM, { { 13, 13 }, { 13, 13 }, { 13, 13 }, { 8, 8 } } }, { CYCLES_CALL, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 3, 3 } } }, { CYCLES_CALL_REG, { { 7, 7 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_CALL_MEM, { { 10, 10 }, { 5, 5 }, { 2, 2 }, { 4, 4 } } }, { CYCLES_CALL_INTERSEG, { { 17, 34 }, { 18, 20 }, { 4, 13 }, { 9, 14 } } }, { CYCLES_CALL_REG_INTERSEG, { { 22, 38 }, { 17, 20 }, { 4, 14 }, { 11, 15 } } }, { CYCLES_CALL_MEM_INTERSEG, { { 22, 38 }, { 17, 20 }, { 4, 14 }, { 11, 15 } } }, { CYCLES_JMP_SHORT, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JMP, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JMP_REG, { { 7, 7 }, { 5, 5 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_JMP_MEM, { { 10, 10 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_JMP_INTERSEG, { { 12, 27 }, { 17, 19 }, { 3, 3 }, { 8, 12 } } }, { CYCLES_JMP_REG_INTERSEG, { { 17, 31 }, { 13, 18 }, { 4, 4 }, { 10, 10 } } }, { CYCLES_JMP_MEM_INTERSEG, { { 17, 31 }, { 13, 18 }, { 4, 4 }, { 10, 13 } } }, { CYCLES_RET, { { 10, 10 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_RET_IMM, { { 10, 10 }, { 5, 5 }, { 2, 2 }, { 3, 3 } } }, { CYCLES_RET_INTERSEG, { { 18, 32 }, { 13, 13 }, { 4, 4 }, { 10, 13 } } }, { CYCLES_RET_IMM_INTERSEG, { { 18, 32 }, { 14, 14 }, { 4, 4 }, { 10, 13 } } }, { CYCLES_JCC_DISP8, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JCC_FULL_DISP, { { 7, 7 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JCC_DISP8_NOBRANCH,{ { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JCC_FULL_DISP_NOBRANCH,{ { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_JCXZ, { { 9, 9 }, { 1, 1 }, { 1, 1 }, { 2, 2 } } }, { CYCLES_JCXZ_NOBRANCH, { { 5, 5 }, { 1, 1 }, { 1, 1 }, { 2, 2 } } }, { CYCLES_LOOP, { { 11, 11 }, { 6, 6 }, { 5, 5 }, { 2, 2 } } }, { CYCLES_LOOPZ, { { 11, 11 }, { 9, 9 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_LOOPNZ, { { 11, 11 }, { 9, 9 }, { 8, 8 }, { 2, 2 } } }, { CYCLES_SETCC_REG, { { 4, 4 }, { 3, 3 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_SETCC_MEM, { { 5, 5 }, { 4, 4 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_ENTER, { { 10, 10 }, { 14, 14 }, { 11, 11 }, { 13, 13 } } }, { CYCLES_LEAVE, { { 4, 4 }, { 5, 5 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_INT, { { 37, 37 }, { 30, 30 }, { 16, 16 }, { 19, 19 } } }, { CYCLES_INT3, { { 33, 33 }, { 26, 26 }, { 13, 13 }, { 19, 19 } } }, { CYCLES_INTO_OF1, { { 35, 35 }, { 28, 28 }, { 13, 13 }, { 19, 19 } } }, { CYCLES_INTO_OF0, { { 3, 3 }, { 3, 3 }, { 4, 4 }, { 4, 4 } } }, { CYCLES_BOUND_IN_RANGE, { { 10, 10 }, { 7, 7 }, { 8, 8 }, { 7, 7 } } }, { CYCLES_BOUND_OUT_RANGE, { { 44, 44 }, { 7, 7 }, { 8, 8 }, { 8, 8 } } }, { CYCLES_IRET, { { 22, 22 }, { 15, 15 }, { 8, 8 }, { 13, 13 } } }, { CYCLES_HLT, { { 5, 5 }, { 4, 4 }, { 4, 4 }, { 10, 10 } } }, { CYCLES_MOV_REG_CR0, { { 11, 11 }, { 16, 16 }, { 16, 16 }, { 20, 18 } } }, { CYCLES_MOV_REG_CR2, { { 4, 4 }, { 4, 4 }, { 4, 4 }, { 5, 5 } } }, { CYCLES_MOV_REG_CR3, { { 5, 5 }, { 4, 4 }, { 4, 4 }, { 5, 6 } } }, { CYCLES_MOV_CR_REG, { { 6, 6 }, { 4, 4 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_MOV_REG_DR0_3, { { 22, 22 }, { 10, 10 }, { 10, 10 }, { 10, 10 } } }, { CYCLES_MOV_REG_DR6_7, { { 16, 16 }, { 10, 10 }, { 10, 10 }, { 10, 10 } } }, { CYCLES_MOV_DR6_7_REG, { { 14, 14 }, { 11, 11 }, { 11, 11 }, { 9, 9 } } }, { CYCLES_MOV_DR0_3_REG, { { 22, 22 }, { 11, 11 }, { 11, 11 }, { 9, 9 } } }, { CYCLES_MOV_REG_TR6_7, { { 12, 12 }, { 4, 4 }, { 4, 4 }, { 11, 11 } } }, { CYCLES_MOV_TR6_7_REG, { { 12, 12 }, { 3, 3 }, { 3, 3 }, { 3, 3 } } }, { CYCLES_NOP, { { 3, 3 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_WAIT, { { 7, 7 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_ARPL_REG, { { 0, 20 }, { 0, 9 }, { 0, 7 }, { 0, 9 } } }, { CYCLES_ARPL_MEM, { { 0, 21 }, { 0, 9 }, { 0, 7 }, { 0, 9 } } }, { CYCLES_LAR_REG, { { 0, 15 }, { 11, 11 }, { 8, 8 }, { 0, 9 } } }, { CYCLES_LAR_MEM, { { 0, 16 }, { 11, 11 }, { 8, 8 }, { 0, 9 } } }, { CYCLES_LGDT, { { 11, 11 }, { 11, 11 }, { 6, 6 }, { 10, 10 } } }, { CYCLES_LIDT, { { 11, 11 }, { 11, 11 }, { 6, 6 }, { 10, 10 } } }, { CYCLES_LLDT_REG, { { 0, 20 }, { 11, 11 }, { 9, 9 }, { 0, 8 } } }, { CYCLES_LLDT_MEM, { { 0, 24 }, { 11, 11 }, { 9, 9 }, { 0, 8 } } }, { CYCLES_LMSW_REG, { { 11, 11 }, { 13, 13 }, { 8, 8 }, { 11, 11 } } }, { CYCLES_LMSW_MEM, { { 14, 14 }, { 13, 13 }, { 8, 8 }, { 11, 11 } } }, { CYCLES_LSL_REG, { { 0, 21 }, { 10, 10 }, { 8, 8 }, { 0, 9 } } }, { CYCLES_LSL_MEM, { { 0, 22 }, { 10, 10 }, { 8, 8 }, { 0, 9 } } }, { CYCLES_LTR_REG, { { 0, 23 }, { 20, 20 }, { 10, 10 }, { 0, 9 } } }, { CYCLES_LTR_MEM, { { 0, 27 }, { 20, 20 }, { 10, 10 }, { 0, 9 } } }, { CYCLES_SGDT, { { 9, 9 }, { 10, 10 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_SIDT, { { 9, 9 }, { 10, 10 }, { 4, 4 }, { 6, 6 } } }, { CYCLES_SLDT_REG, { { 0, 2 }, { 2, 2 }, { 2, 2 }, { 0, 1 } } }, { CYCLES_SLDT_MEM, { { 0, 2 }, { 3, 3 }, { 2, 2 }, { 0, 1 } } }, { CYCLES_SMSW_REG, { { 2, 2 }, { 2, 2 }, { 4, 4 }, { 4, 4 } } }, { CYCLES_SMSW_MEM, { { 2, 2 }, { 3, 3 }, { 4, 4 }, { 4, 4 } } }, { CYCLES_STR_REG, { { 0, 2 }, { 2, 2 }, { 2, 2 }, { 0, 3 } } }, { CYCLES_STR_MEM, { { 0, 2 }, { 3, 3 }, { 2, 2 }, { 0, 3 } } }, { CYCLES_VERR_REG, { { 0, 10 }, { 11, 11 }, { 7, 7 }, { 0, 8 } } }, { CYCLES_VERR_MEM, { { 0, 11 }, { 11, 11 }, { 7, 7 }, { 0, 8 } } }, { CYCLES_VERW_REG, { { 0, 15 }, { 11, 11 }, { 7, 7 }, { 0, 8 } } }, { CYCLES_VERW_MEM, { { 0, 16 }, { 11, 11 }, { 7, 7 }, { 0, 8 } } }, { CYCLES_LOCK, { { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 1 } } }, // i486+ { CYCLES_BSWAP, { { 0, 0 }, { 1, 1 }, { 1, 1 }, { 6, 6 } } }, { CYCLES_CMPXCHG, { { 0, 0 }, { 6, 6 }, { 5, 5 }, { 6, 6 } } }, { CYCLES_INVD, { { 0, 0 }, { 4, 4 }, { 15, 15 }, { 20, 20 } } }, { CYCLES_XADD, { { 0, 0 }, { 4, 4 }, { 4, 4 }, { 2, 2 } } }, // Pentium+ { CYCLES_CMPXCHG8B, { { 0, 0 }, { 0, 0 }, { 10, 10 }, { 6, 6 } } }, { CYCLES_CPUID, { { 0, 0 }, { 0, 0 }, { 14, 14 }, { 12, 12 } } }, { CYCLES_CPUID_EAX1, { { 0, 0 }, { 0, 0 }, { 14, 14 }, { 12, 12 } } }, { CYCLES_RDTSC, { { 0, 0 }, { 0, 0 }, { 20, 20 }, { 1, 1 } } }, { CYCLES_RSM, { { 0, 0 }, { 0, 0 }, { 82, 82 }, { 57, 57 } } }, { CYCLES_RDMSR, { { 0, 0 }, { 0, 0 }, { 20, 20 }, { 1, 1 } } }, // FPU { CYCLES_FABS, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FADD, { { 0, 0 }, { 8, 8 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FBLD, { { 0, 0 }, { 70, 70 }, { 48, 48 }, { 1, 1 } } }, { CYCLES_FBSTP, { { 0, 0 }, {172,172 }, {148,148 }, { 1, 1 } } }, { CYCLES_FCHS, { { 0, 0 }, { 6, 6 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FCLEX, { { 0, 0 }, { 7, 7 }, { 9, 9 }, { 1, 1 } } }, { CYCLES_FCOM, { { 0, 0 }, { 4, 4 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_FCOS, { { 0, 0 }, {255,255 }, {124,124 }, { 1, 1 } } }, { CYCLES_FDECSTP, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FDISI, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FDIV, { { 0, 0 }, { 73, 73 }, { 39, 39 }, { 1, 1 } } }, { CYCLES_FDIVR, { { 0, 0 }, { 73, 73 }, { 39, 39 }, { 1, 1 } } }, { CYCLES_FENI, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FFREE, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FIADD, { { 0, 0 }, { 20, 20 }, { 7, 7 }, { 1, 1 } } }, { CYCLES_FICOM, { { 0, 0 }, { 16, 16 }, { 8, 8 }, { 1, 1 } } }, { CYCLES_FIDIV, { { 0, 0 }, { 85, 85 }, { 42, 42 }, { 1, 1 } } }, { CYCLES_FILD, { { 0, 0 }, { 13, 13 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FIMUL, { { 0, 0 }, { 23, 23 }, { 7, 7 }, { 1, 1 } } }, { CYCLES_FINCSTP, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FINIT, { { 0, 0 }, { 17, 17 }, { 16, 16 }, { 1, 1 } } }, { CYCLES_FIST, { { 0, 0 }, { 29, 29 }, { 6, 6 }, { 1, 1 } } }, { CYCLES_FISUB, { { 0, 0 }, { 20, 20 }, { 7, 7 }, { 1, 1 } } }, { CYCLES_FLD, { { 0, 0 }, { 4, 4 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FLDZ, { { 0, 0 }, { 4, 4 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_FLD1, { { 0, 0 }, { 4, 4 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_FLDL2E, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDL2T, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDLG2, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDLN2, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDPI, { { 0, 0 }, { 8, 8 }, { 5, 5 }, { 1, 1 } } }, { CYCLES_FLDCW, { { 0, 0 }, { 4, 4 }, { 7, 7 }, { 1, 1 } } }, { CYCLES_FLDENV, { { 0, 0 }, { 44, 44 }, { 37, 37 }, { 1, 1 } } }, { CYCLES_FMUL, { { 0, 0 }, { 16, 16 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FNOP, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FPATAN, { { 0, 0 }, {218,218 }, {173,173 }, { 1, 1 } } }, { CYCLES_FPREM, { { 0, 0 }, { 70, 70 }, { 16, 16 }, { 1, 1 } } }, { CYCLES_FPREM1, { { 0, 0 }, { 72, 72 }, { 20, 20 }, { 1, 1 } } }, { CYCLES_FPTAN, { { 0, 0 }, {200,200 }, {173,173 }, { 1, 1 } } }, { CYCLES_FRNDINT, { { 0, 0 }, { 21, 21 }, { 9, 9 }, { 1, 1 } } }, { CYCLES_FRSTOR, { { 0, 0 }, {131,131 }, { 75, 75 }, { 1, 1 } } }, { CYCLES_FSAVE, { { 0, 0 }, {154,154 }, {127,127 }, { 1, 1 } } }, { CYCLES_FSCALE, { { 0, 0 }, { 30, 30 }, { 20, 20 }, { 1, 1 } } }, { CYCLES_FSETPM, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FSIN, { { 0, 0 }, {255,255 }, {126,126 }, { 1, 1 } } }, { CYCLES_FSINCOS, { { 0, 0 }, {255,255 }, {137,137 }, { 1, 1 } } }, { CYCLES_FSQRT, { { 0, 0 }, { 83, 83 }, { 70, 70 }, { 1, 1 } } }, { CYCLES_FST, { { 0, 0 }, { 3, 3 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FSTCW, { { 0, 0 }, { 3, 3 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_FSTENV, { { 0, 0 }, { 67, 67 }, { 48, 48 }, { 1, 1 } } }, { CYCLES_FSTSW, { { 0, 0 }, { 3, 3 }, { 2, 2 }, { 1, 1 } } }, { CYCLES_FSUB, { { 0, 0 }, { 8, 8 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FSUBR, { { 0, 0 }, { 8, 8 }, { 3, 3 }, { 1, 1 } } }, { CYCLES_FTST, { { 0, 0 }, { 4, 4 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_FUCOM, { { 0, 0 }, { 4, 4 }, { 4, 4 }, { 1, 1 } } }, { CYCLES_FXAM, { { 0, 0 }, { 8, 8 }, { 21, 21 }, { 1, 1 } } }, { CYCLES_FXCH, { { 0, 0 }, { 4, 4 }, { 1, 1 }, { 1, 1 } } }, { CYCLES_FXTRACT, { { 0, 0 }, { 16, 16 }, { 13, 13 }, { 1, 1 } } }, { CYCLES_FYL2X, { { 0, 0 }, {196,196 }, {111,111 }, { 1, 1 } } }, { CYCLES_FYL2XPI, { { 0, 0 }, {171,171 }, {103,103 }, { 1, 1 } } }, { CYCLES_CMPXCHG_REG_REG_T, { { 0, 0 }, { 6, 6 }, { 6, 6 }, { 6, 6 } } }, { CYCLES_CMPXCHG_REG_REG_F, { { 0, 0 }, { 9, 9 }, { 9, 9 }, { 9, 9 } } }, { CYCLES_CMPXCHG_REG_MEM_T, { { 0, 0 }, { 7, 7 }, { 7, 7 }, { 7, 7 } } }, { CYCLES_CMPXCHG_REG_MEM_F, { { 0, 0 }, { 10, 10 }, { 10, 10 }, { 10, 10 } } }, }; #endif /* __CYCLES_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i386.old/i386.c ================================================ /* Intel 386 emulator Written by Ville Linde Currently supports: Intel 386 Intel 486 Intel Pentium Cyrix MediaGX Intel Pentium MMX Intel Pentium Pro Intel Pentium II Intel Pentium III Intel Pentium 4 */ //#include "emu.h" //#include "debugger.h" #include "i386priv.h" //#include "i386.h" //#include "debug/debugcpu.h" /* seems to be defined on mingw-gcc */ #undef i386 static CPU_RESET( CPU_MODEL ); int i386_parity_table[256]; MODRM_TABLE i386_MODRM_table[256]; static void i386_trap_with_error(int irq, int irq_gate, int trap_level, UINT32 err); static void i286_task_switch(UINT16 selector, UINT8 nested); static void i386_task_switch(UINT16 selector, UINT8 nested); static void build_opcode_table(UINT32 features); static void zero_state(); static void pentium_smi(); #define FAULT(fault,error) {m_ext = 1; i386_trap_with_error(fault,0,0,error); return;} #define FAULT_EXP(fault,error) {m_ext = 1; i386_trap_with_error(fault,0,trap_level+1,error); return;} /*************************************************************************/ static UINT32 i386_load_protected_mode_segment(I386_SREG *seg, UINT64 *desc ) { UINT32 v1,v2; UINT32 base, limit; int entry; if(!seg->selector) { seg->flags = 0; seg->base = 0; seg->limit = 0; seg->d = 0; seg->valid = false; return 0; } if ( seg->selector & 0x4 ) { base = m_ldtr.base; limit = m_ldtr.limit; } else { base = m_gdtr.base; limit = m_gdtr.limit; } entry = seg->selector & ~0x7; if (limit == 0 || entry + 7 > limit) return 0; v1 = READ32PL0(base + entry ); v2 = READ32PL0(base + entry + 4 ); seg->flags = (v2 >> 8) & 0xf0ff; seg->base = (v2 & 0xff000000) | ((v2 & 0xff) << 16) | ((v1 >> 16) & 0xffff); seg->limit = (v2 & 0xf0000) | (v1 & 0xffff); if (seg->flags & 0x8000) seg->limit = (seg->limit << 12) | 0xfff; seg->d = (seg->flags & 0x4000) ? 1 : 0; seg->valid = true; if(desc) *desc = ((UINT64)v2<<32)|v1; return 1; } static void i386_load_call_gate(I386_CALL_GATE *gate) { UINT32 v1,v2; UINT32 base,limit; int entry; if ( gate->segment & 0x4 ) { base = m_ldtr.base; limit = m_ldtr.limit; } else { base = m_gdtr.base; limit = m_gdtr.limit; } entry = gate->segment & ~0x7; if (limit == 0 || entry + 7 > limit) return; v1 = READ32PL0(base + entry ); v2 = READ32PL0(base + entry + 4 ); /* Note that for task gates, offset and dword_count are not used */ gate->selector = (v1 >> 16) & 0xffff; gate->offset = (v1 & 0x0000ffff) | (v2 & 0xffff0000); gate->ar = (v2 >> 8) & 0xff; gate->dword_count = v2 & 0x001f; gate->present = (gate->ar >> 7) & 0x01; gate->dpl = (gate->ar >> 5) & 0x03; } static void i386_set_descriptor_accessed(UINT16 selector) { // assume the selector is valid, we don't need to check it again UINT32 base, addr; UINT8 rights; if(!(selector & ~3)) return; if ( selector & 0x4 ) base = m_ldtr.base; else base = m_gdtr.base; addr = base + (selector & ~7) + 5; i386_translate_address(TRANSLATE_READ, &addr, NULL); rights = read_byte(addr); // Should a fault be thrown if the table is read only? write_byte(addr, rights | 1); } static void i386_load_segment_descriptor(int segment ) { if (PROTECTED_MODE) { if (!V8086_MODE) { i386_load_protected_mode_segment(&m_sreg[segment], NULL ); if(m_sreg[segment].selector) i386_set_descriptor_accessed(m_sreg[segment].selector); } else { m_sreg[segment].base = m_sreg[segment].selector << 4; m_sreg[segment].limit = 0xffff; m_sreg[segment].flags = (segment == CS) ? 0x00fb : 0x00f3; m_sreg[segment].d = 0; m_sreg[segment].valid = true; } } else { m_sreg[segment].base = m_sreg[segment].selector << 4; m_sreg[segment].d = 0; m_sreg[segment].valid = true; if( segment == CS && !m_performed_intersegment_jump ) m_sreg[segment].base |= 0xfff00000; } } /* Retrieves the stack selector located in the current TSS */ static UINT32 i386_get_stack_segment(UINT8 privilege) { UINT32 ret; if(privilege >= 3) return 0; if(m_task.flags & 8) ret = READ32PL0((m_task.base+8) + (8*privilege)); else ret = READ16PL0((m_task.base+4) + (4*privilege)); return ret; } /* Retrieves the stack pointer located in the current TSS */ static UINT32 i386_get_stack_ptr(UINT8 privilege) { UINT32 ret; if(privilege >= 3) return 0; if(m_task.flags & 8) ret = READ32PL0((m_task.base+4) + (8*privilege)); else ret = READ16PL0((m_task.base+2) + (4*privilege)); return ret; } static UINT32 get_flags() { UINT32 f = 0x2; f |= m_CF; f |= m_PF << 2; f |= m_AF << 4; f |= m_ZF << 6; f |= m_SF << 7; f |= m_TF << 8; f |= m_IF << 9; f |= m_DF << 10; f |= m_OF << 11; f |= m_IOP1 << 12; f |= m_IOP2 << 13; f |= m_NT << 14; f |= m_RF << 16; f |= m_VM << 17; f |= m_AC << 18; f |= m_VIF << 19; f |= m_VIP << 20; f |= m_ID << 21; return (m_eflags & ~m_eflags_mask) | (f & m_eflags_mask); } static void set_flags(UINT32 f ) { m_CF = (f & 0x1) ? 1 : 0; m_PF = (f & 0x4) ? 1 : 0; m_AF = (f & 0x10) ? 1 : 0; m_ZF = (f & 0x40) ? 1 : 0; m_SF = (f & 0x80) ? 1 : 0; m_TF = (f & 0x100) ? 1 : 0; m_IF = (f & 0x200) ? 1 : 0; m_DF = (f & 0x400) ? 1 : 0; m_OF = (f & 0x800) ? 1 : 0; m_IOP1 = (f & 0x1000) ? 1 : 0; m_IOP2 = (f & 0x2000) ? 1 : 0; m_NT = (f & 0x4000) ? 1 : 0; m_RF = (f & 0x10000) ? 1 : 0; m_VM = (f & 0x20000) ? 1 : 0; m_AC = (f & 0x40000) ? 1 : 0; m_VIF = (f & 0x80000) ? 1 : 0; m_VIP = (f & 0x100000) ? 1 : 0; m_ID = (f & 0x200000) ? 1 : 0; m_eflags = f & m_eflags_mask; } static void sib_byte(UINT8 mod, UINT32* out_ea, UINT8* out_segment) { UINT32 ea = 0; UINT8 segment = 0; UINT8 scale, i, base; UINT8 sib = FETCH(); scale = (sib >> 6) & 0x3; i = (sib >> 3) & 0x7; base = sib & 0x7; switch( base ) { case 0: ea = REG32(EAX); segment = DS; break; case 1: ea = REG32(ECX); segment = DS; break; case 2: ea = REG32(EDX); segment = DS; break; case 3: ea = REG32(EBX); segment = DS; break; case 4: ea = REG32(ESP); segment = SS; break; case 5: if( mod == 0 ) { ea = FETCH32(); segment = DS; } else if( mod == 1 ) { ea = REG32(EBP); segment = SS; } else if( mod == 2 ) { ea = REG32(EBP); segment = SS; } break; case 6: ea = REG32(ESI); segment = DS; break; case 7: ea = REG32(EDI); segment = DS; break; } switch( i ) { case 0: ea += REG32(EAX) * (1 << scale); break; case 1: ea += REG32(ECX) * (1 << scale); break; case 2: ea += REG32(EDX) * (1 << scale); break; case 3: ea += REG32(EBX) * (1 << scale); break; case 4: break; case 5: ea += REG32(EBP) * (1 << scale); break; case 6: ea += REG32(ESI) * (1 << scale); break; case 7: ea += REG32(EDI) * (1 << scale); break; } *out_ea = ea; *out_segment = segment; } static void modrm_to_EA(UINT8 mod_rm, UINT32* out_ea, UINT8* out_segment) { INT8 disp8; INT16 disp16; INT32 disp32; UINT8 mod = (mod_rm >> 6) & 0x3; UINT8 rm = mod_rm & 0x7; UINT32 ea; UINT8 segment; if( mod_rm >= 0xc0 ) fatalerror("i386: Called modrm_to_EA with modrm value %02X!\n",mod_rm); if( m_address_size ) { switch( rm ) { default: case 0: ea = REG32(EAX); segment = DS; break; case 1: ea = REG32(ECX); segment = DS; break; case 2: ea = REG32(EDX); segment = DS; break; case 3: ea = REG32(EBX); segment = DS; break; case 4: sib_byte(mod, &ea, &segment ); break; case 5: if( mod == 0 ) { ea = FETCH32(); segment = DS; } else { ea = REG32(EBP); segment = SS; } break; case 6: ea = REG32(ESI); segment = DS; break; case 7: ea = REG32(EDI); segment = DS; break; } if( mod == 1 ) { disp8 = FETCH(); ea += (INT32)disp8; } else if( mod == 2 ) { disp32 = FETCH32(); ea += disp32; } if( m_segment_prefix ) segment = m_segment_override; *out_ea = ea; *out_segment = segment; } else { switch( rm ) { default: case 0: ea = REG16(BX) + REG16(SI); segment = DS; break; case 1: ea = REG16(BX) + REG16(DI); segment = DS; break; case 2: ea = REG16(BP) + REG16(SI); segment = SS; break; case 3: ea = REG16(BP) + REG16(DI); segment = SS; break; case 4: ea = REG16(SI); segment = DS; break; case 5: ea = REG16(DI); segment = DS; break; case 6: if( mod == 0 ) { ea = FETCH16(); segment = DS; } else { ea = REG16(BP); segment = SS; } break; case 7: ea = REG16(BX); segment = DS; break; } if( mod == 1 ) { disp8 = FETCH(); ea += (INT32)disp8; } else if( mod == 2 ) { disp16 = FETCH16(); ea += (INT32)disp16; } if( m_segment_prefix ) segment = m_segment_override; *out_ea = ea & 0xffff; *out_segment = segment; } } static UINT32 GetNonTranslatedEA(UINT8 modrm,UINT8 *seg) { UINT8 segment; UINT32 ea; modrm_to_EA(modrm, &ea, &segment ); if(seg) *seg = segment; return ea; } static UINT32 GetEA(UINT8 modrm, int rwn) { UINT8 segment; UINT32 ea; modrm_to_EA(modrm, &ea, &segment ); return i386_translate(segment, ea, rwn ); } /* Check segment register for validity when changing privilege level after an RETF */ static void i386_check_sreg_validity(int reg) { UINT16 selector = m_sreg[reg].selector; UINT8 CPL = m_CPL; UINT8 DPL,RPL; I386_SREG desc; int invalid = 0; memset(&desc, 0, sizeof(desc)); desc.selector = selector; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = selector & 0x03; /* Must be within the relevant descriptor table limits */ if(selector & 0x04) { if((selector & ~0x07) > m_ldtr.limit) invalid = 1; } else { if((selector & ~0x07) > m_gdtr.limit) invalid = 1; } /* Must be either a data or readable code segment */ if(((desc.flags & 0x0018) == 0x0018 && (desc.flags & 0x0002)) || (desc.flags & 0x0018) == 0x0010) invalid = 0; else invalid = 1; /* If a data segment or non-conforming code segment, then either DPL >= CPL or DPL >= RPL */ if(((desc.flags & 0x0018) == 0x0018 && (desc.flags & 0x0004) == 0) || (desc.flags & 0x0018) == 0x0010) { if((DPL < CPL) || (DPL < RPL)) invalid = 1; } /* if segment is invalid, then segment register is nulled */ if(invalid != 0) { m_sreg[reg].selector = 0; i386_load_segment_descriptor(reg); } } static int i386_limit_check(int seg, UINT32 offset) { if(PROTECTED_MODE && !V8086_MODE) { if((m_sreg[seg].flags & 0x0018) == 0x0010 && m_sreg[seg].flags & 0x0004) // if expand-down data segment { // compare if greater then 0xffffffff when we're passed the access size if((offset <= m_sreg[seg].limit) || ((m_sreg[seg].d)?0:(offset > 0xffff))) { logerror("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); return 1; } } else { if(offset > m_sreg[seg].limit) { logerror("Limit check at 0x%08x failed. Segment %04x, limit %08x, offset %08x\n",m_pc,m_sreg[seg].selector,m_sreg[seg].limit,offset); return 1; } } } return 0; } static void i386_sreg_load(UINT16 selector, UINT8 reg, bool *fault) { // Checks done when MOV changes a segment register in protected mode UINT8 CPL,RPL,DPL; CPL = m_CPL; RPL = selector & 0x0003; if(!PROTECTED_MODE || V8086_MODE) { m_sreg[reg].selector = selector; i386_load_segment_descriptor(reg); if(fault) *fault = false; return; } if(fault) *fault = true; if(reg == SS) { I386_SREG stack; memset(&stack, 0, sizeof(stack)); stack.selector = selector; i386_load_protected_mode_segment(&stack,NULL); DPL = (stack.flags >> 5) & 0x03; if((selector & ~0x0003) == 0) { logerror("SReg Load (%08x): Selector is null.\n",m_pc); FAULT(FAULT_GP,0) } if(selector & 0x0004) // LDT { if((selector & ~0x0007) > m_ldtr.limit) { logerror("SReg Load (%08x): Selector is out of LDT bounds.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } else // GDT { if((selector & ~0x0007) > m_gdtr.limit) { logerror("SReg Load (%08x): Selector is out of GDT bounds.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } if (RPL != CPL) { logerror("SReg Load (%08x): Selector RPL does not equal CPL.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } if(((stack.flags & 0x0018) != 0x10) && (stack.flags & 0x0002) != 0) { logerror("SReg Load (%08x): Segment is not a writable data segment.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } if(DPL != CPL) { logerror("SReg Load (%08x): Segment DPL does not equal CPL.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } if(!(stack.flags & 0x0080)) { logerror("SReg Load (%08x): Segment is not present.\n",m_pc); FAULT(FAULT_SS,selector & ~0x03) } } if(reg == DS || reg == ES || reg == FS || reg == GS) { I386_SREG desc; if((selector & ~0x0003) == 0) { m_sreg[reg].selector = selector; i386_load_segment_descriptor(reg ); if(fault) *fault = false; return; } memset(&desc, 0, sizeof(desc)); desc.selector = selector; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; if(selector & 0x0004) // LDT { if((selector & ~0x0007) > m_ldtr.limit) { logerror("SReg Load (%08x): Selector is out of LDT bounds.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } else // GDT { if((selector & ~0x0007) > m_gdtr.limit) { logerror("SReg Load (%08x): Selector is out of GDT bounds.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } if((desc.flags & 0x0018) != 0x10) { if((((desc.flags & 0x0002) != 0) && ((desc.flags & 0x0018) != 0x18)) || !(desc.flags & 0x10)) { logerror("SReg Load (%08x): Segment is not a data segment or readable code segment.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } if(((desc.flags & 0x0018) == 0x10) || ((!(desc.flags & 0x0004)) && ((desc.flags & 0x0018) == 0x18))) { // if data or non-conforming code segment if((RPL > DPL) || (CPL > DPL)) { logerror("SReg Load (%08x): Selector RPL or CPL is not less or equal to segment DPL.\n",m_pc); FAULT(FAULT_GP,selector & ~0x03) } } if(!(desc.flags & 0x0080)) { logerror("SReg Load (%08x): Segment is not present.\n",m_pc); FAULT(FAULT_NP,selector & ~0x03) } } m_sreg[reg].selector = selector; i386_load_segment_descriptor(reg ); if(fault) *fault = false; } static void i386_trap(int irq, int irq_gate, int trap_level) { /* I386 Interrupts/Traps/Faults: * * 0x00 Divide by zero * 0x01 Debug exception * 0x02 NMI * 0x03 Int3 * 0x04 Overflow * 0x05 Array bounds check * 0x06 Illegal Opcode * 0x07 FPU not available * 0x08 Double fault * 0x09 Coprocessor segment overrun * 0x0a Invalid task state * 0x0b Segment not present * 0x0c Stack exception * 0x0d General Protection Fault * 0x0e Page fault * 0x0f Reserved * 0x10 Coprocessor error */ UINT32 v1, v2; UINT32 offset, oldflags = get_flags(); UINT16 segment; int entry = irq * (PROTECTED_MODE ? 8 : 4); int SetRPL = 0; m_lock = false; if( !(PROTECTED_MODE) ) { /* 16-bit */ PUSH16(oldflags & 0xffff ); PUSH16(m_sreg[CS].selector ); if(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1) PUSH16(m_eip ); else PUSH16(m_prev_eip ); m_sreg[CS].selector = READ16(m_idtr.base + entry + 2 ); m_eip = READ16(m_idtr.base + entry ); m_TF = 0; m_IF = 0; } else { int type; UINT16 flags; I386_SREG desc; UINT8 CPL = m_CPL, DPL = 0; //, RPL = 0; /* 32-bit */ v1 = READ32PL0(m_idtr.base + entry ); v2 = READ32PL0(m_idtr.base + entry + 4 ); offset = (v2 & 0xffff0000) | (v1 & 0xffff); segment = (v1 >> 16) & 0xffff; type = (v2>>8) & 0x1F; flags = (v2>>8) & 0xf0ff; if(trap_level == 2) { logerror("IRQ: Double fault.\n"); FAULT_EXP(FAULT_DF,0); } if(trap_level >= 3) { logerror("IRQ: Triple fault. CPU reset.\n"); CPU_RESET_CALL(CPU_MODEL); return; } /* segment privilege checks */ if(entry >= m_idtr.limit) { logerror("IRQ (%08x): Vector %02xh is past IDT limit.\n",m_pc,entry); FAULT_EXP(FAULT_GP,entry+2) } /* segment must be interrupt gate, trap gate, or task gate */ if(type != 0x05 && type != 0x06 && type != 0x07 && type != 0x0e && type != 0x0f) { logerror("IRQ#%02x (%08x): Vector segment %04x is not an interrupt, trap or task gate.\n",irq,m_pc,segment); FAULT_EXP(FAULT_GP,entry+2) } if(m_ext == 0) // if software interrupt (caused by INT/INTO/INT3) { if(((flags >> 5) & 0x03) < CPL) { logerror("IRQ (%08x): Software IRQ - gate DPL is less than CPL.\n",m_pc); FAULT_EXP(FAULT_GP,entry+2) } if(V8086_MODE) { if((!m_IOP1 || !m_IOP2) && (m_opcode != 0xcc)) { logerror("IRQ (%08x): Is in Virtual 8086 mode and IOPL != 3.\n",m_pc); FAULT(FAULT_GP,0) } } } if((flags & 0x0080) == 0) { logerror("IRQ: Vector segment is not present.\n"); FAULT_EXP(FAULT_NP,entry+2) } if(type == 0x05) { /* Task gate */ memset(&desc, 0, sizeof(desc)); desc.selector = segment; i386_load_protected_mode_segment(&desc,NULL); if(segment & 0x04) { logerror("IRQ: Task gate: TSS is not in the GDT.\n"); FAULT_EXP(FAULT_TS,segment & ~0x03); } else { if(segment > m_gdtr.limit) { logerror("IRQ: Task gate: TSS is past GDT limit.\n"); FAULT_EXP(FAULT_TS,segment & ~0x03); } } if((desc.flags & 0x000f) != 0x09 && (desc.flags & 0x000f) != 0x01) { logerror("IRQ: Task gate: TSS is not an available TSS.\n"); FAULT_EXP(FAULT_TS,segment & ~0x03); } if((desc.flags & 0x0080) == 0) { logerror("IRQ: Task gate: TSS is not present.\n"); FAULT_EXP(FAULT_NP,segment & ~0x03); } if(!(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1)) m_eip = m_prev_eip; if(desc.flags & 0x08) i386_task_switch(desc.selector,1); else i286_task_switch(desc.selector,1); return; } else { /* Interrupt or Trap gate */ memset(&desc, 0, sizeof(desc)); desc.selector = segment; i386_load_protected_mode_segment(&desc,NULL); CPL = m_CPL; // current privilege level DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level // RPL = segment & 0x03; // requested privilege level if((segment & ~0x03) == 0) { logerror("IRQ: Gate segment is null.\n"); FAULT_EXP(FAULT_GP,m_ext) } if(segment & 0x04) { if((segment & ~0x07) > m_ldtr.limit) { logerror("IRQ: Gate segment is past LDT limit.\n"); FAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext) } } else { if((segment & ~0x07) > m_gdtr.limit) { logerror("IRQ: Gate segment is past GDT limit.\n"); FAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext) } } if((desc.flags & 0x0018) != 0x18) { logerror("IRQ: Gate descriptor is not a code segment.\n"); FAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext) } if((desc.flags & 0x0080) == 0) { logerror("IRQ: Gate segment is not present.\n"); FAULT_EXP(FAULT_NP,(segment & 0x03)+m_ext) } if((desc.flags & 0x0004) == 0 && (DPL < CPL)) { /* IRQ to inner privilege */ I386_SREG stack; UINT32 newESP,oldSS,oldESP; if(V8086_MODE && DPL) { logerror("IRQ: Gate to CPL>0 from VM86 mode.\n"); FAULT_EXP(FAULT_GP,segment & ~0x03); } /* Check new stack segment in TSS */ memset(&stack, 0, sizeof(stack)); stack.selector = i386_get_stack_segment(DPL); i386_load_protected_mode_segment(&stack,NULL); oldSS = m_sreg[SS].selector; if(flags & 0x0008) oldESP = REG32(ESP); else oldESP = REG16(SP); if((stack.selector & ~0x03) == 0) { logerror("IRQ: New stack selector is null.\n"); FAULT_EXP(FAULT_GP,m_ext) } if(stack.selector & 0x04) { if((stack.selector & ~0x07) > m_ldtr.base) { logerror("IRQ: New stack selector is past LDT limit.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) } } else { if((stack.selector & ~0x07) > m_gdtr.base) { logerror("IRQ: New stack selector is past GDT limit.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) } } if((stack.selector & 0x03) != DPL) { logerror("IRQ: New stack selector RPL is not equal to code segment DPL.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) } if(((stack.flags >> 5) & 0x03) != DPL) { logerror("IRQ: New stack segment DPL is not equal to code segment DPL.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) } if(((stack.flags & 0x0018) != 0x10) && (stack.flags & 0x0002) != 0) { logerror("IRQ: New stack segment is not a writable data segment.\n"); FAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) // #TS(stack selector + EXT) } if((stack.flags & 0x0080) == 0) { logerror("IRQ: New stack segment is not present.\n"); FAULT_EXP(FAULT_SS,(stack.selector & ~0x03)+m_ext) // #TS(stack selector + EXT) } newESP = i386_get_stack_ptr(DPL); if(type & 0x08) // 32-bit gate { if(((newESP < (V8086_MODE?36:20)) && !(stack.flags & 0x4)) || ((~stack.limit < (~(newESP - 1) + (V8086_MODE?36:20))) && (stack.flags & 0x4))) { logerror("IRQ: New stack has no space for return addresses.\n"); FAULT_EXP(FAULT_SS,0) } } else // 16-bit gate { newESP &= 0xffff; if(((newESP < (V8086_MODE?18:10)) && !(stack.flags & 0x4)) || ((~stack.limit < (~(newESP - 1) + (V8086_MODE?18:10))) && (stack.flags & 0x4))) { logerror("IRQ: New stack has no space for return addresses.\n"); FAULT_EXP(FAULT_SS,0) } } if(offset > desc.limit) { logerror("IRQ: New EIP is past code segment limit.\n"); FAULT_EXP(FAULT_GP,0) } /* change CPL before accessing the stack */ m_CPL = DPL; /* check for page fault at new stack TODO: check if stack frame crosses page boundary */ WRITE_TEST(stack.base+newESP-1); /* Load new stack segment descriptor */ m_sreg[SS].selector = stack.selector; i386_load_protected_mode_segment(&m_sreg[SS],NULL); i386_set_descriptor_accessed(stack.selector); REG32(ESP) = newESP; if(V8086_MODE) { //logerror("IRQ (%08x): Interrupt during V8086 task\n",m_pc); if(type & 0x08) { PUSH32(m_sreg[GS].selector & 0xffff); PUSH32(m_sreg[FS].selector & 0xffff); PUSH32(m_sreg[DS].selector & 0xffff); PUSH32(m_sreg[ES].selector & 0xffff); } else { PUSH16(m_sreg[GS].selector); PUSH16(m_sreg[FS].selector); PUSH16(m_sreg[DS].selector); PUSH16(m_sreg[ES].selector); } m_sreg[GS].selector = 0; m_sreg[FS].selector = 0; m_sreg[DS].selector = 0; m_sreg[ES].selector = 0; m_VM = 0; i386_load_segment_descriptor(GS); i386_load_segment_descriptor(FS); i386_load_segment_descriptor(DS); i386_load_segment_descriptor(ES); } if(type & 0x08) { // 32-bit gate PUSH32(oldSS); PUSH32(oldESP); } else { // 16-bit gate PUSH16(oldSS); PUSH16(oldESP); } SetRPL = 1; } else { int stack_limit; if((desc.flags & 0x0004) || (DPL == CPL)) { /* IRQ to same privilege */ if(V8086_MODE && !m_ext) { logerror("IRQ: Gate to same privilege from VM86 mode.\n"); FAULT_EXP(FAULT_GP,segment & ~0x03); } if(type == 0x0e || type == 0x0f) // 32-bit gate stack_limit = 10; else stack_limit = 6; // TODO: Add check for error code (2 extra bytes) if(REG32(ESP) < stack_limit) { logerror("IRQ: Stack has no space left (needs %i bytes).\n",stack_limit); FAULT_EXP(FAULT_SS,0) } if(offset > desc.limit) { logerror("IRQ: Gate segment offset is past segment limit.\n"); FAULT_EXP(FAULT_GP,0) } SetRPL = 1; } else { logerror("IRQ: Gate descriptor is non-conforming, and DPL does not equal CPL.\n"); FAULT_EXP(FAULT_GP,segment) } } } UINT32 tempSP = REG32(ESP); try { // this is ugly but the alternative is worse if(type != 0x0e && type != 0x0f) // if not 386 interrupt or trap gate { PUSH16(oldflags & 0xffff ); PUSH16(m_sreg[CS].selector ); if(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1) PUSH16(m_eip ); else PUSH16(m_prev_eip ); } else { PUSH32(oldflags & 0x00ffffff ); PUSH32(m_sreg[CS].selector ); if(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1) PUSH32(m_eip ); else PUSH32(m_prev_eip ); } } catch(UINT64 e) { REG32(ESP) = tempSP; throw e; } if(SetRPL != 0) segment = (segment & ~0x03) | m_CPL; m_sreg[CS].selector = segment; m_eip = offset; if(type == 0x0e || type == 0x06) m_IF = 0; m_TF = 0; m_NT = 0; } i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } static void i386_trap_with_error(int irq, int irq_gate, int trap_level, UINT32 error) { i386_trap(irq,irq_gate,trap_level); if(irq == 8 || irq == 10 || irq == 11 || irq == 12 || irq == 13 || irq == 14) { // for these exceptions, an error code is pushed onto the stack by the processor. // no error code is pushed for software interrupts, either. if(PROTECTED_MODE) { UINT32 entry = irq * 8; UINT32 v2,type; v2 = READ32PL0(m_idtr.base + entry + 4 ); type = (v2>>8) & 0x1F; if(type == 5) { v2 = READ32PL0(m_idtr.base + entry); v2 = READ32PL0(m_gdtr.base + ((v2 >> 16) & 0xfff8) + 4); type = (v2>>8) & 0x1F; } if(type >= 9) PUSH32(error); else PUSH16(error); } else PUSH16(error); } } static void i286_task_switch(UINT16 selector, UINT8 nested) { UINT32 tss; I386_SREG seg; UINT16 old_task; UINT8 ar_byte; // access rights byte /* TODO: Task State Segment privilege checks */ /* For tasks that aren't nested, clear the busy bit in the task's descriptor */ if(nested == 0) { if(m_task.segment & 0x0004) { ar_byte = READ8(m_ldtr.base + (m_task.segment & ~0x0007) + 5); WRITE8(m_ldtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02); } else { ar_byte = READ8(m_gdtr.base + (m_task.segment & ~0x0007) + 5); WRITE8(m_gdtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02); } } /* Save the state of the current task in the current TSS (TR register base) */ tss = m_task.base; WRITE16(tss+0x0e,m_eip & 0x0000ffff); WRITE16(tss+0x10,get_flags() & 0x0000ffff); WRITE16(tss+0x12,REG16(AX)); WRITE16(tss+0x14,REG16(CX)); WRITE16(tss+0x16,REG16(DX)); WRITE16(tss+0x18,REG16(BX)); WRITE16(tss+0x1a,REG16(SP)); WRITE16(tss+0x1c,REG16(BP)); WRITE16(tss+0x1e,REG16(SI)); WRITE16(tss+0x20,REG16(DI)); WRITE16(tss+0x22,m_sreg[ES].selector); WRITE16(tss+0x24,m_sreg[CS].selector); WRITE16(tss+0x26,m_sreg[SS].selector); WRITE16(tss+0x28,m_sreg[DS].selector); old_task = m_task.segment; /* Load task register with the selector of the incoming task */ m_task.segment = selector; memset(&seg, 0, sizeof(seg)); seg.selector = m_task.segment; i386_load_protected_mode_segment(&seg,NULL); m_task.limit = seg.limit; m_task.base = seg.base; m_task.flags = seg.flags; /* Set TS bit in CR0 */ m_cr[0] |= 0x08; /* Load incoming task state from the new task's TSS */ tss = m_task.base; m_ldtr.segment = READ16(tss+0x2a) & 0xffff; seg.selector = m_ldtr.segment; i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = seg.limit; m_ldtr.base = seg.base; m_ldtr.flags = seg.flags; m_eip = READ16(tss+0x0e); set_flags(READ16(tss+0x10)); REG16(AX) = READ16(tss+0x12); REG16(CX) = READ16(tss+0x14); REG16(DX) = READ16(tss+0x16); REG16(BX) = READ16(tss+0x18); REG16(SP) = READ16(tss+0x1a); REG16(BP) = READ16(tss+0x1c); REG16(SI) = READ16(tss+0x1e); REG16(DI) = READ16(tss+0x20); m_sreg[ES].selector = READ16(tss+0x22) & 0xffff; i386_load_segment_descriptor(ES); m_sreg[CS].selector = READ16(tss+0x24) & 0xffff; i386_load_segment_descriptor(CS); m_sreg[SS].selector = READ16(tss+0x26) & 0xffff; i386_load_segment_descriptor(SS); m_sreg[DS].selector = READ16(tss+0x28) & 0xffff; i386_load_segment_descriptor(DS); /* Set the busy bit in the new task's descriptor */ if(selector & 0x0004) { ar_byte = READ8(m_ldtr.base + (selector & ~0x0007) + 5); WRITE8(m_ldtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02); } else { ar_byte = READ8(m_gdtr.base + (selector & ~0x0007) + 5); WRITE8(m_gdtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02); } /* For nested tasks, we write the outgoing task's selector to the back-link field of the new TSS, and set the NT flag in the EFLAGS register */ if(nested != 0) { WRITE16(tss+0,old_task); m_NT = 1; } CHANGE_PC(m_eip); m_CPL = (m_sreg[SS].flags >> 5) & 3; // printf("286 Task Switch from selector %04x to %04x\n",old_task,selector); } static void i386_task_switch(UINT16 selector, UINT8 nested) { UINT32 tss; I386_SREG seg; UINT16 old_task; UINT8 ar_byte; // access rights byte UINT32 oldcr3 = m_cr[3]; /* TODO: Task State Segment privilege checks */ /* For tasks that aren't nested, clear the busy bit in the task's descriptor */ if(nested == 0) { if(m_task.segment & 0x0004) { ar_byte = READ8(m_ldtr.base + (m_task.segment & ~0x0007) + 5); WRITE8(m_ldtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02); } else { ar_byte = READ8(m_gdtr.base + (m_task.segment & ~0x0007) + 5); WRITE8(m_gdtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02); } } /* Save the state of the current task in the current TSS (TR register base) */ tss = m_task.base; WRITE32(tss+0x1c,m_cr[3]); // correct? WRITE32(tss+0x20,m_eip); WRITE32(tss+0x24,get_flags()); WRITE32(tss+0x28,REG32(EAX)); WRITE32(tss+0x2c,REG32(ECX)); WRITE32(tss+0x30,REG32(EDX)); WRITE32(tss+0x34,REG32(EBX)); WRITE32(tss+0x38,REG32(ESP)); WRITE32(tss+0x3c,REG32(EBP)); WRITE32(tss+0x40,REG32(ESI)); WRITE32(tss+0x44,REG32(EDI)); WRITE32(tss+0x48,m_sreg[ES].selector); WRITE32(tss+0x4c,m_sreg[CS].selector); WRITE32(tss+0x50,m_sreg[SS].selector); WRITE32(tss+0x54,m_sreg[DS].selector); WRITE32(tss+0x58,m_sreg[FS].selector); WRITE32(tss+0x5c,m_sreg[GS].selector); old_task = m_task.segment; /* Load task register with the selector of the incoming task */ m_task.segment = selector; memset(&seg, 0, sizeof(seg)); seg.selector = m_task.segment; i386_load_protected_mode_segment(&seg,NULL); m_task.limit = seg.limit; m_task.base = seg.base; m_task.flags = seg.flags; /* Set TS bit in CR0 */ m_cr[0] |= 0x08; /* Load incoming task state from the new task's TSS */ tss = m_task.base; m_ldtr.segment = READ32(tss+0x60) & 0xffff; seg.selector = m_ldtr.segment; i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = seg.limit; m_ldtr.base = seg.base; m_ldtr.flags = seg.flags; m_eip = READ32(tss+0x20); set_flags(READ32(tss+0x24)); REG32(EAX) = READ32(tss+0x28); REG32(ECX) = READ32(tss+0x2c); REG32(EDX) = READ32(tss+0x30); REG32(EBX) = READ32(tss+0x34); REG32(ESP) = READ32(tss+0x38); REG32(EBP) = READ32(tss+0x3c); REG32(ESI) = READ32(tss+0x40); REG32(EDI) = READ32(tss+0x44); m_sreg[ES].selector = READ32(tss+0x48) & 0xffff; i386_load_segment_descriptor(ES); m_sreg[CS].selector = READ32(tss+0x4c) & 0xffff; i386_load_segment_descriptor(CS); m_sreg[SS].selector = READ32(tss+0x50) & 0xffff; i386_load_segment_descriptor(SS); m_sreg[DS].selector = READ32(tss+0x54) & 0xffff; i386_load_segment_descriptor(DS); m_sreg[FS].selector = READ32(tss+0x58) & 0xffff; i386_load_segment_descriptor(FS); m_sreg[GS].selector = READ32(tss+0x5c) & 0xffff; i386_load_segment_descriptor(GS); /* For nested tasks, we write the outgoing task's selector to the back-link field of the new TSS, and set the NT flag in the EFLAGS register before setting cr3 as the old tss address might be gone */ if(nested != 0) { WRITE32(tss+0,old_task); m_NT = 1; } m_cr[3] = READ32(tss+0x1c); // CR3 (PDBR) if(oldcr3 != m_cr[3]) vtlb_flush_dynamic(m_vtlb); /* Set the busy bit in the new task's descriptor */ if(selector & 0x0004) { ar_byte = READ8(m_ldtr.base + (selector & ~0x0007) + 5); WRITE8(m_ldtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02); } else { ar_byte = READ8(m_gdtr.base + (selector & ~0x0007) + 5); WRITE8(m_gdtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02); } CHANGE_PC(m_eip); m_CPL = (m_sreg[SS].flags >> 5) & 3; // printf("386 Task Switch from selector %04x to %04x\n",old_task,selector); } static void i386_check_irq_line() { if(!m_smm && m_smi) { pentium_smi(); return; } /* Check if the interrupts are enabled */ if ( (m_irq_state) && m_IF ) { #ifdef SUPPORT_RDTSC m_cycles -= 2; #endif i386_trap(pic_ack(), 1, 0); m_irq_state = CLEAR_LINE; } } static void i386_protected_mode_jump(UINT16 seg, UINT32 off, int indirect, int operand32) { I386_SREG desc; I386_CALL_GATE call_gate; UINT8 CPL,DPL,RPL; UINT8 SetRPL = 0; UINT16 segment = seg; UINT32 offset = off; /* Check selector is not null */ if((segment & ~0x03) == 0) { logerror("JMP: Segment is null.\n"); FAULT(FAULT_GP,0) } /* Selector is within descriptor table limit */ if((segment & 0x04) == 0) { /* check GDT limit */ if((segment & ~0x07) > (m_gdtr.limit)) { logerror("JMP: Segment is past GDT limit.\n"); FAULT(FAULT_GP,segment & 0xfffc) } } else { /* check LDT limit */ if((segment & ~0x07) > (m_ldtr.limit)) { logerror("JMP: Segment is past LDT limit.\n"); FAULT(FAULT_GP,segment & 0xfffc) } } /* Determine segment type */ memset(&desc, 0, sizeof(desc)); desc.selector = segment; i386_load_protected_mode_segment(&desc,NULL); CPL = m_CPL; // current privilege level DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = segment & 0x03; // requested privilege level if((desc.flags & 0x0018) == 0x0018) { /* code segment */ if((desc.flags & 0x0004) == 0) { /* non-conforming */ if(RPL > CPL) { logerror("JMP: RPL %i is less than CPL %i\n",RPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(DPL != CPL) { logerror("JMP: DPL %i is not equal CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } } else { /* conforming */ if(DPL > CPL) { logerror("JMP: DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } } SetRPL = 1; if((desc.flags & 0x0080) == 0) { logerror("JMP: Segment is not present\n"); FAULT(FAULT_NP,segment & 0xfffc) } if(offset > desc.limit) { logerror("JMP: Offset is past segment limit\n"); FAULT(FAULT_GP,0) } } else { if((desc.flags & 0x0010) != 0) { logerror("JMP: Segment is a data segment\n"); FAULT(FAULT_GP,segment & 0xfffc) // #GP (cannot execute code in a data segment) } else { switch(desc.flags & 0x000f) { case 0x01: // 286 Available TSS case 0x09: // 386 Available TSS logerror("JMP: Available 386 TSS at %08x\n",m_pc); memset(&desc, 0, sizeof(desc)); desc.selector = segment; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level if(DPL < CPL) { logerror("JMP: TSS: DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(DPL < RPL) { logerror("JMP: TSS: DPL %i is less than TSS RPL %i\n",DPL,RPL); FAULT(FAULT_GP,segment & 0xfffc) } if((desc.flags & 0x0080) == 0) { logerror("JMP: TSS: Segment is not present\n"); FAULT(FAULT_GP,segment & 0xfffc) } if(desc.flags & 0x0008) i386_task_switch(desc.selector,0); else i286_task_switch(desc.selector,0); return; case 0x04: // 286 Call Gate case 0x0c: // 386 Call Gate //logerror("JMP: Call gate at %08x\n",m_pc); SetRPL = 1; memset(&call_gate, 0, sizeof(call_gate)); call_gate.segment = segment; i386_load_call_gate(&call_gate); DPL = call_gate.dpl; if(DPL < CPL) { logerror("JMP: Call Gate: DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(DPL < RPL) { logerror("JMP: Call Gate: DPL %i is less than RPL %i\n",DPL,RPL); FAULT(FAULT_GP,segment & 0xfffc) } if((desc.flags & 0x0080) == 0) { logerror("JMP: Call Gate: Segment is not present\n"); FAULT(FAULT_NP,segment & 0xfffc) } /* Now we examine the segment that the call gate refers to */ if(call_gate.selector == 0) { logerror("JMP: Call Gate: Gate selector is null\n"); FAULT(FAULT_GP,0) } if(call_gate.selector & 0x04) { if((call_gate.selector & ~0x07) > m_ldtr.limit) { logerror("JMP: Call Gate: Gate Selector is past LDT segment limit\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } else { if((call_gate.selector & ~0x07) > m_gdtr.limit) { logerror("JMP: Call Gate: Gate Selector is past GDT segment limit\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } desc.selector = call_gate.selector; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; if((desc.flags & 0x0018) != 0x18) { logerror("JMP: Call Gate: Gate does not point to a code segment\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } if((desc.flags & 0x0004) == 0) { // non-conforming if(DPL != CPL) { logerror("JMP: Call Gate: Gate DPL does not equal CPL\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } else { // conforming if(DPL > CPL) { logerror("JMP: Call Gate: Gate DPL is greater than CPL\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } if((desc.flags & 0x0080) == 0) { logerror("JMP: Call Gate: Gate Segment is not present\n"); FAULT(FAULT_NP,call_gate.selector & 0xfffc) } if(call_gate.offset > desc.limit) { logerror("JMP: Call Gate: Gate offset is past Gate segment limit\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } segment = call_gate.selector; offset = call_gate.offset; break; case 0x05: // Task Gate logerror("JMP: Task gate at %08x\n",m_pc); memset(&call_gate, 0, sizeof(call_gate)); call_gate.segment = segment; i386_load_call_gate(&call_gate); DPL = call_gate.dpl; if(DPL < CPL) { logerror("JMP: Task Gate: Gate DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(DPL < RPL) { logerror("JMP: Task Gate: Gate DPL %i is less than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,segment & 0xfffc) } if(call_gate.present == 0) { logerror("JMP: Task Gate: Gate is not present.\n"); FAULT(FAULT_GP,segment & 0xfffc) } /* Check the TSS that the task gate points to */ desc.selector = call_gate.selector; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = call_gate.selector & 0x03; // requested privilege level if(call_gate.selector & 0x04) { logerror("JMP: Task Gate TSS: TSS must be global.\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } else { if((call_gate.selector & ~0x07) > m_gdtr.limit) { logerror("JMP: Task Gate TSS: TSS is past GDT limit.\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } } if((call_gate.ar & 0x000f) == 0x0009 || (call_gate.ar & 0x000f) == 0x0001) { logerror("JMP: Task Gate TSS: Segment is not an available TSS.\n"); FAULT(FAULT_GP,call_gate.selector & 0xfffc) } if(call_gate.present == 0) { logerror("JMP: Task Gate TSS: TSS is not present.\n"); FAULT(FAULT_NP,call_gate.selector & 0xfffc) } if(call_gate.ar & 0x08) i386_task_switch(call_gate.selector,0); else i286_task_switch(call_gate.selector,0); return; default: // invalid segment type logerror("JMP: Invalid segment type (%i) to jump to.\n",desc.flags & 0x000f); FAULT(FAULT_GP,segment & 0xfffc) } } } if(SetRPL != 0) segment = (segment & ~0x03) | m_CPL; if(operand32 == 0) m_eip = offset & 0x0000ffff; else m_eip = offset; m_sreg[CS].selector = segment; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } static void i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect, int operand32) { I386_SREG desc; I386_CALL_GATE gate; UINT8 SetRPL = 0; UINT8 CPL, DPL, RPL; UINT16 selector = seg; UINT32 offset = off; int x; if((selector & ~0x03) == 0) { logerror("CALL (%08x): Selector is null.\n",m_pc); FAULT(FAULT_GP,0) // #GP(0) } if(selector & 0x04) { if((selector & ~0x07) > m_ldtr.limit) { logerror("CALL: Selector is past LDT limit.\n"); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } } else { if((selector & ~0x07) > m_gdtr.limit) { logerror("CALL: Selector is past GDT limit.\n"); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } } /* Determine segment type */ memset(&desc, 0, sizeof(desc)); desc.selector = selector; i386_load_protected_mode_segment(&desc,NULL); CPL = m_CPL; // current privilege level DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = selector & 0x03; // requested privilege level if((desc.flags & 0x0018) == 0x18) // is a code segment { if(desc.flags & 0x0004) { /* conforming */ if(DPL > CPL) { logerror("CALL: Code segment DPL %i is greater than CPL %i\n",DPL,CPL); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } } else { /* non-conforming */ if(RPL > CPL) { logerror("CALL: RPL %i is greater than CPL %i\n",RPL,CPL); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } if(DPL != CPL) { logerror("CALL: Code segment DPL %i is not equal to CPL %i\n",DPL,CPL); FAULT(FAULT_GP,selector & ~0x03) // #GP(selector) } } SetRPL = 1; if((desc.flags & 0x0080) == 0) { logerror("CALL (%08x): Code segment is not present.\n",m_pc); FAULT(FAULT_NP,selector & ~0x03) // #NP(selector) } if (operand32 != 0) // if 32-bit { if(i386_limit_check(SS, REG32(ESP) - 8)) { logerror("CALL (%08x): Stack has no room for return address.\n",m_pc); FAULT(FAULT_SS,0) // #SS(0) } } else { if(i386_limit_check(SS, (REG16(SP) - 4) & 0xffff)) { logerror("CALL (%08x): Stack has no room for return address.\n",m_pc); FAULT(FAULT_SS,0) // #SS(0) } } if(offset > desc.limit) { logerror("CALL: EIP is past segment limit.\n"); FAULT(FAULT_GP,0) // #GP(0) } } else { /* special segment type */ if(desc.flags & 0x0010) { logerror("CALL: Segment is a data segment.\n"); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } else { switch(desc.flags & 0x000f) { case 0x01: // Available 286 TSS case 0x09: // Available 386 TSS logerror("CALL: Available TSS at %08x\n",m_pc); if(DPL < CPL) { logerror("CALL: TSS: DPL is less than CPL.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if(DPL < RPL) { logerror("CALL: TSS: DPL is less than RPL.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if(desc.flags & 0x0002) { logerror("CALL: TSS: TSS is busy.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if((desc.flags & 0x0080) == 0) { logerror("CALL: TSS: Segment %02x is not present.\n",selector); FAULT(FAULT_NP,selector & ~0x03) // #NP(selector) } if(desc.flags & 0x08) i386_task_switch(desc.selector,1); else i286_task_switch(desc.selector,1); return; case 0x04: // 286 call gate case 0x0c: // 386 call gate if((desc.flags & 0x000f) == 0x04) operand32 = 0; else operand32 = 1; memset(&gate, 0, sizeof(gate)); gate.segment = selector; i386_load_call_gate(&gate); DPL = gate.dpl; //logerror("CALL: Call gate at %08x (%i parameters)\n",m_pc,gate.dword_count); if(DPL < CPL) { logerror("CALL: Call gate DPL %i is less than CPL %i.\n",DPL,CPL); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } if(DPL < RPL) { logerror("CALL: Call gate DPL %i is less than RPL %i.\n",DPL,RPL); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } if(gate.present == 0) { logerror("CALL: Call gate is not present.\n"); FAULT(FAULT_NP,desc.selector & ~0x03) // #GP(selector) } desc.selector = gate.selector; if((gate.selector & ~0x03) == 0) { logerror("CALL: Call gate: Segment is null.\n"); FAULT(FAULT_GP,0) // #GP(0) } if(desc.selector & 0x04) { if((desc.selector & ~0x07) > m_ldtr.limit) { logerror("CALL: Call gate: Segment is past LDT limit\n"); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } } else { if((desc.selector & ~0x07) > m_gdtr.limit) { logerror("CALL: Call gate: Segment is past GDT limit\n"); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } } i386_load_protected_mode_segment(&desc,NULL); if((desc.flags & 0x0018) != 0x18) { logerror("CALL: Call gate: Segment is not a code segment.\n"); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } DPL = ((desc.flags >> 5) & 0x03); if(DPL > CPL) { logerror("CALL: Call gate: Segment DPL %i is greater than CPL %i.\n",DPL,CPL); FAULT(FAULT_GP,desc.selector & ~0x03) // #GP(selector) } if((desc.flags & 0x0080) == 0) { logerror("CALL (%08x): Code segment is not present.\n",m_pc); FAULT(FAULT_NP,desc.selector & ~0x03) // #NP(selector) } if(DPL < CPL && (desc.flags & 0x0004) == 0) { I386_SREG stack; I386_SREG temp; UINT32 oldSS,oldESP; /* more privilege */ /* Check new SS segment for privilege level from TSS */ memset(&stack, 0, sizeof(stack)); stack.selector = i386_get_stack_segment(DPL); i386_load_protected_mode_segment(&stack,NULL); if((stack.selector & ~0x03) == 0) { logerror("CALL: Call gate: TSS selector is null\n"); FAULT(FAULT_TS,0) // #TS(0) } if(stack.selector & 0x04) { if((stack.selector & ~0x07) > m_ldtr.limit) { logerror("CALL: Call gate: TSS selector is past LDT limit\n"); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } } else { if((stack.selector & ~0x07) > m_gdtr.limit) { logerror("CALL: Call gate: TSS selector is past GDT limit\n"); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } } if((stack.selector & 0x03) != DPL) { logerror("CALL: Call gate: Stack selector RPL does not equal code segment DPL %i\n",DPL); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } if(((stack.flags >> 5) & 0x03) != DPL) { logerror("CALL: Call gate: Stack DPL does not equal code segment DPL %i\n",DPL); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } if((stack.flags & 0x0018) != 0x10 && (stack.flags & 0x0002)) { logerror("CALL: Call gate: Stack segment is not a writable data segment\n"); FAULT(FAULT_TS,stack.selector) // #TS(SS selector) } if((stack.flags & 0x0080) == 0) { logerror("CALL: Call gate: Stack segment is not present\n"); FAULT(FAULT_SS,stack.selector) // #SS(SS selector) } UINT32 newESP = i386_get_stack_ptr(DPL); if(!stack.d) { newESP &= 0xffff; } if(operand32 != 0) { if(newESP < ((gate.dword_count & 0x1f) + 16)) { logerror("CALL: Call gate: New stack has no room for 32-bit return address and parameters.\n"); FAULT(FAULT_SS,0) // #SS(0) } if(gate.offset > desc.limit) { logerror("CALL: Call gate: EIP is past segment limit.\n"); FAULT(FAULT_GP,0) // #GP(0) } } else { if(newESP < ((gate.dword_count & 0x1f) + 8)) { logerror("CALL: Call gate: New stack has no room for 16-bit return address and parameters.\n"); FAULT(FAULT_SS,0) // #SS(0) } if((gate.offset & 0xffff) > desc.limit) { logerror("CALL: Call gate: IP is past segment limit.\n"); FAULT(FAULT_GP,0) // #GP(0) } } selector = gate.selector; offset = gate.offset; m_CPL = (stack.flags >> 5) & 0x03; /* check for page fault at new stack */ WRITE_TEST(stack.base+newESP-1); /* switch to new stack */ oldSS = m_sreg[SS].selector; m_sreg[SS].selector = i386_get_stack_segment(m_CPL); if(operand32 != 0) { oldESP = REG32(ESP); } else { oldESP = REG16(SP); } i386_load_segment_descriptor(SS ); REG32(ESP) = newESP; if(operand32 != 0) { PUSH32(oldSS); PUSH32(oldESP); } else { PUSH16(oldSS); PUSH16(oldESP & 0xffff); } memset(&temp, 0, sizeof(temp)); temp.selector = oldSS; i386_load_protected_mode_segment(&temp,NULL); /* copy parameters from old stack to new stack */ for(x=(gate.dword_count & 0x1f)-1;x>=0;x--) { UINT32 addr = oldESP + (operand32?(x*4):(x*2)); addr = temp.base + (temp.d?addr:(addr&0xffff)); if(operand32) PUSH32(READ32(addr)); else PUSH16(READ16(addr)); } SetRPL = 1; } else { /* same privilege */ if (operand32 != 0) // if 32-bit { if(i386_limit_check(SS, REG32(ESP) - 8)) { logerror("CALL: Stack has no room for return address.\n"); FAULT(FAULT_SS,0) // #SS(0) } selector = gate.selector; offset = gate.offset; } else { if(i386_limit_check(SS, (REG16(SP) - 4) & 0xffff)) { logerror("CALL: Stack has no room for return address.\n"); FAULT(FAULT_SS,0) // #SS(0) } selector = gate.selector; offset = gate.offset & 0xffff; } if(offset > desc.limit) { logerror("CALL: EIP is past segment limit.\n"); FAULT(FAULT_GP,0) // #GP(0) } SetRPL = 1; } break; case 0x05: // task gate logerror("CALL: Task gate at %08x\n",m_pc); memset(&gate, 0, sizeof(gate)); gate.segment = selector; i386_load_call_gate(&gate); DPL = gate.dpl; if(DPL < CPL) { logerror("CALL: Task Gate: Gate DPL is less than CPL.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if(DPL < RPL) { logerror("CALL: Task Gate: Gate DPL is less than RPL.\n"); FAULT(FAULT_TS,selector & ~0x03) // #TS(selector) } if((gate.ar & 0x0080) == 0) { logerror("CALL: Task Gate: Gate is not present.\n"); FAULT(FAULT_NP,selector & ~0x03) // #NP(selector) } /* Check the TSS that the task gate points to */ desc.selector = gate.selector; i386_load_protected_mode_segment(&desc,NULL); if(gate.selector & 0x04) { logerror("CALL: Task Gate: TSS is not global.\n"); FAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector) } else { if((gate.selector & ~0x07) > m_gdtr.limit) { logerror("CALL: Task Gate: TSS is past GDT limit.\n"); FAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector) } } if(desc.flags & 0x0002) { logerror("CALL: Task Gate: TSS is busy.\n"); FAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector) } if((desc.flags & 0x0080) == 0) { logerror("CALL: Task Gate: TSS is not present.\n"); FAULT(FAULT_NP,gate.selector & ~0x03) // #TS(selector) } if(desc.flags & 0x08) i386_task_switch(desc.selector,1); // with nesting else i286_task_switch(desc.selector,1); return; default: logerror("CALL: Invalid special segment type (%i) to jump to.\n",desc.flags & 0x000f); FAULT(FAULT_GP,selector & ~0x07) // #GP(selector) } } } if(SetRPL != 0) selector = (selector & ~0x03) | m_CPL; UINT32 tempSP = REG32(ESP); try { // this is ugly but the alternative is worse if(operand32 == 0) { /* 16-bit operand size */ PUSH16(m_sreg[CS].selector ); PUSH16(m_eip & 0x0000ffff ); m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; m_eip = offset; i386_load_segment_descriptor(CS); } else { /* 32-bit operand size */ PUSH32(m_sreg[CS].selector ); PUSH32(m_eip ); m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; m_eip = offset; i386_load_segment_descriptor(CS ); } } catch(UINT64 e) { REG32(ESP) = tempSP; throw e; } CHANGE_PC(m_eip); } static void i386_protected_mode_retf(UINT8 count, UINT8 operand32) { UINT32 newCS, newEIP; I386_SREG desc; UINT8 CPL, RPL, DPL; UINT32 ea = i386_translate(SS, (STACK_32BIT)?REG32(ESP):REG16(SP), 0); if(operand32 == 0) { newEIP = READ16(ea) & 0xffff; newCS = READ16(ea+2) & 0xffff; } else { newEIP = READ32(ea); newCS = READ32(ea+4) & 0xffff; } memset(&desc, 0, sizeof(desc)); desc.selector = newCS; i386_load_protected_mode_segment(&desc,NULL); CPL = m_CPL; // current privilege level DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = newCS & 0x03; if(RPL < CPL) { logerror("RETF (%08x): Return segment RPL is less than CPL.\n",m_pc); FAULT(FAULT_GP,newCS & ~0x03) } if(RPL == CPL) { /* same privilege level */ if((newCS & ~0x03) == 0) { logerror("RETF: Return segment is null.\n"); FAULT(FAULT_GP,0) } if(newCS & 0x04) { if((newCS & ~0x07) >= m_ldtr.limit) { logerror("RETF: Return segment is past LDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if((newCS & ~0x07) >= m_gdtr.limit) { logerror("RETF: Return segment is past GDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0018) != 0x0018) { logerror("RETF: Return segment is not a code segment.\n"); FAULT(FAULT_GP,newCS & ~0x03) } if(desc.flags & 0x0004) { if(DPL > RPL) { logerror("RETF: Conforming code segment DPL is greater than CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if(DPL != RPL) { logerror("RETF: Non-conforming code segment DPL does not equal CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0080) == 0) { logerror("RETF (%08x): Code segment is not present.\n",m_pc); FAULT(FAULT_NP,newCS & ~0x03) } if(newEIP > desc.limit) { logerror("RETF: EIP is past code segment limit.\n"); FAULT(FAULT_GP,0) } if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+count+3) != 0) { logerror("RETF (%08x): SP is past stack segment limit.\n",m_pc); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+count+7) != 0) { logerror("RETF: ESP is past stack segment limit.\n"); FAULT(FAULT_SS,0) } } if(operand32 == 0) REG16(SP) += (4+count); else REG32(ESP) += (8+count); } else if(RPL > CPL) { UINT32 newSS, newESP; // when changing privilege /* outer privilege level */ if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+count+7) != 0) { logerror("RETF (%08x): SP is past stack segment limit.\n",m_pc); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+count+15) != 0) { logerror("RETF: ESP is past stack segment limit.\n"); FAULT(FAULT_SS,0) } } /* Check CS selector and descriptor */ if((newCS & ~0x03) == 0) { logerror("RETF: CS segment is null.\n"); FAULT(FAULT_GP,0) } if(newCS & 0x04) { if((newCS & ~0x07) >= m_ldtr.limit) { logerror("RETF: CS segment selector is past LDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if((newCS & ~0x07) >= m_gdtr.limit) { logerror("RETF: CS segment selector is past GDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0018) != 0x0018) { logerror("RETF: CS segment is not a code segment.\n"); FAULT(FAULT_GP,newCS & ~0x03) } if(desc.flags & 0x0004) { if(DPL > RPL) { logerror("RETF: Conforming CS segment DPL is greater than return selector RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if(DPL != RPL) { logerror("RETF: Non-conforming CS segment DPL is not equal to return selector RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0080) == 0) { logerror("RETF: CS segment is not present.\n"); FAULT(FAULT_NP,newCS & ~0x03) } if(newEIP > desc.limit) { logerror("RETF: EIP is past return CS segment limit.\n"); FAULT(FAULT_GP,0) } if(operand32 == 0) { ea += count+4; newESP = READ16(ea) & 0xffff; newSS = READ16(ea+2) & 0xffff; } else { ea += count+8; newESP = READ32(ea); newSS = READ32(ea+4) & 0xffff; } /* Check SS selector and descriptor */ desc.selector = newSS; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level if((newSS & ~0x07) == 0) { logerror("RETF: SS segment is null.\n"); FAULT(FAULT_GP,0) } if(newSS & 0x04) { if((newSS & ~0x07) > m_ldtr.limit) { logerror("RETF (%08x): SS segment selector is past LDT limit.\n",m_pc); FAULT(FAULT_GP,newSS & ~0x03) } } else { if((newSS & ~0x07) > m_gdtr.limit) { logerror("RETF (%08x): SS segment selector is past GDT limit.\n",m_pc); FAULT(FAULT_GP,newSS & ~0x03) } } if((newSS & 0x03) != RPL) { logerror("RETF: SS segment RPL is not equal to CS segment RPL.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((desc.flags & 0x0018) != 0x0010 || (desc.flags & 0x0002) == 0) { logerror("RETF: SS segment is not a writable data segment.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if(((desc.flags >> 5) & 0x03) != RPL) { logerror("RETF: SS DPL is not equal to CS segment RPL.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((desc.flags & 0x0080) == 0) { logerror("RETF: SS segment is not present.\n"); FAULT(FAULT_GP,newSS & ~0x03) } m_CPL = newCS & 0x03; /* Load new SS:(E)SP */ if(operand32 == 0) REG16(SP) = (newESP+count) & 0xffff; else REG32(ESP) = newESP+count; m_sreg[SS].selector = newSS; i386_load_segment_descriptor(SS ); /* Check that DS, ES, FS and GS are valid for the new privilege level */ i386_check_sreg_validity(DS); i386_check_sreg_validity(ES); i386_check_sreg_validity(FS); i386_check_sreg_validity(GS); } /* Load new CS:(E)IP */ if(operand32 == 0) m_eip = newEIP & 0xffff; else m_eip = newEIP; m_sreg[CS].selector = newCS; i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); } static void i386_protected_mode_iret(int operand32) { UINT32 newCS, newEIP; UINT32 newSS, newESP; // when changing privilege I386_SREG desc,stack; UINT8 CPL, RPL, DPL; UINT32 newflags; CPL = m_CPL; UINT32 ea = i386_translate(SS, (STACK_32BIT)?REG32(ESP):REG16(SP), 0); if(operand32 == 0) { newEIP = READ16(ea) & 0xffff; newCS = READ16(ea+2) & 0xffff; newflags = READ16(ea+4) & 0xffff; } else { newEIP = READ32(ea); newCS = READ32(ea+4) & 0xffff; newflags = READ32(ea+8); } if(V8086_MODE) { UINT32 oldflags = get_flags(); if(!m_IOP1 || !m_IOP2) { logerror("IRET (%08x): Is in Virtual 8086 mode and IOPL != 3.\n",m_pc); FAULT(FAULT_GP,0) } if(operand32 == 0) { m_eip = newEIP & 0xffff; m_sreg[CS].selector = newCS & 0xffff; newflags &= ~(3<<12); newflags |= (((oldflags>>12)&3)<<12); // IOPL cannot be changed in V86 mode set_flags((newflags & 0xffff) | (oldflags & ~0xffff)); REG16(SP) += 6; } else { m_eip = newEIP; m_sreg[CS].selector = newCS & 0xffff; newflags &= ~(3<<12); newflags |= 0x20000 | (((oldflags>>12)&3)<<12); // IOPL and VM cannot be changed in V86 mode set_flags(newflags); REG32(ESP) += 12; } } else if(NESTED_TASK) { UINT32 task = READ32(m_task.base); /* Task Return */ logerror("IRET (%08x): Nested task return.\n",m_pc); /* Check back-link selector in TSS */ if(task & 0x04) { logerror("IRET: Task return: Back-linked TSS is not in GDT.\n"); FAULT(FAULT_TS,task & ~0x03) } if((task & ~0x07) >= m_gdtr.limit) { logerror("IRET: Task return: Back-linked TSS is not in GDT.\n"); FAULT(FAULT_TS,task & ~0x03) } memset(&desc, 0, sizeof(desc)); desc.selector = task; i386_load_protected_mode_segment(&desc,NULL); if((desc.flags & 0x001f) != 0x000b) { logerror("IRET (%08x): Task return: Back-linked TSS is not a busy TSS.\n",m_pc); FAULT(FAULT_TS,task & ~0x03) } if((desc.flags & 0x0080) == 0) { logerror("IRET: Task return: Back-linked TSS is not present.\n"); FAULT(FAULT_NP,task & ~0x03) } if(desc.flags & 0x08) i386_task_switch(desc.selector,0); else i286_task_switch(desc.selector,0); return; } else { if(newflags & 0x00020000) // if returning to virtual 8086 mode { // 16-bit iret can't reach here newESP = READ32(ea+12); newSS = READ32(ea+16) & 0xffff; /* Return to v86 mode */ //logerror("IRET (%08x): Returning to Virtual 8086 mode.\n",m_pc); if(CPL != 0) { UINT32 oldflags = get_flags(); newflags = (newflags & ~0x00003000) | (oldflags & 0x00003000); } set_flags(newflags); m_eip = POP32() & 0xffff; // high 16 bits are ignored m_sreg[CS].selector = POP32() & 0xffff; POP32(); // already set flags newESP = POP32(); newSS = POP32() & 0xffff; m_sreg[ES].selector = POP32() & 0xffff; m_sreg[DS].selector = POP32() & 0xffff; m_sreg[FS].selector = POP32() & 0xffff; m_sreg[GS].selector = POP32() & 0xffff; REG32(ESP) = newESP; // all 32 bits are loaded m_sreg[SS].selector = newSS; i386_load_segment_descriptor(ES); i386_load_segment_descriptor(DS); i386_load_segment_descriptor(FS); i386_load_segment_descriptor(GS); i386_load_segment_descriptor(SS); m_CPL = 3; // Virtual 8086 tasks are always run at CPL 3 } else { if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) != 0) { logerror("IRET: Data on stack is past SS limit.\n"); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+7) != 0) { logerror("IRET: Data on stack is past SS limit.\n"); FAULT(FAULT_SS,0) } } RPL = newCS & 0x03; if(RPL < CPL) { logerror("IRET (%08x): Return CS RPL is less than CPL.\n",m_pc); FAULT(FAULT_GP,newCS & ~0x03) } if(RPL == CPL) { /* return to same privilege level */ if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+5) != 0) { logerror("IRET (%08x): Data on stack is past SS limit.\n",m_pc); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+11) != 0) { logerror("IRET (%08x): Data on stack is past SS limit.\n",m_pc); FAULT(FAULT_SS,0) } } if((newCS & ~0x03) == 0) { logerror("IRET: Return CS selector is null.\n"); FAULT(FAULT_GP,0) } if(newCS & 0x04) { if((newCS & ~0x07) >= m_ldtr.limit) { logerror("IRET: Return CS selector (%04x) is past LDT limit.\n",newCS); FAULT(FAULT_GP,newCS & ~0x03) } } else { if((newCS & ~0x07) >= m_gdtr.limit) { logerror("IRET: Return CS selector is past GDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } memset(&desc, 0, sizeof(desc)); desc.selector = newCS; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = newCS & 0x03; if((desc.flags & 0x0018) != 0x0018) { logerror("IRET (%08x): Return CS segment is not a code segment.\n",m_pc); FAULT(FAULT_GP,newCS & ~0x07) } if(desc.flags & 0x0004) { if(DPL > RPL) { logerror("IRET: Conforming return CS DPL is greater than CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if(DPL != RPL) { logerror("IRET: Non-conforming return CS DPL is not equal to CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0080) == 0) { logerror("IRET: Return CS segment is not present.\n"); FAULT(FAULT_NP,newCS & ~0x03) } if(newEIP > desc.limit) { logerror("IRET: Return EIP is past return CS limit.\n"); FAULT(FAULT_GP,0) } if(CPL != 0) { UINT32 oldflags = get_flags(); newflags = (newflags & ~0x00003000) | (oldflags & 0x00003000); } if(operand32 == 0) { m_eip = newEIP; m_sreg[CS].selector = newCS; set_flags(newflags); REG16(SP) += 6; } else { m_eip = newEIP; m_sreg[CS].selector = newCS & 0xffff; set_flags(newflags); REG32(ESP) += 12; } } else if(RPL > CPL) { /* return to outer privilege level */ memset(&desc, 0, sizeof(desc)); desc.selector = newCS; i386_load_protected_mode_segment(&desc,NULL); DPL = (desc.flags >> 5) & 0x03; // descriptor privilege level RPL = newCS & 0x03; if(operand32 == 0) { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+9) != 0) { logerror("IRET: SP is past SS limit.\n"); FAULT(FAULT_SS,0) } } else { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+19) != 0) { logerror("IRET: ESP is past SS limit.\n"); FAULT(FAULT_SS,0) } } /* Check CS selector and descriptor */ if((newCS & ~0x03) == 0) { logerror("IRET: Return CS selector is null.\n"); FAULT(FAULT_GP,0) } if(newCS & 0x04) { if((newCS & ~0x07) >= m_ldtr.limit) { logerror("IRET: Return CS selector is past LDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03); } } else { if((newCS & ~0x07) >= m_gdtr.limit) { logerror("IRET: Return CS selector is past GDT limit.\n"); FAULT(FAULT_GP,newCS & ~0x03); } } if((desc.flags & 0x0018) != 0x0018) { logerror("IRET: Return CS segment is not a code segment.\n"); FAULT(FAULT_GP,newCS & ~0x03) } if(desc.flags & 0x0004) { if(DPL > RPL) { logerror("IRET: Conforming return CS DPL is greater than CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } else { if(DPL != RPL) { logerror("IRET: Non-conforming return CS DPL does not equal CS RPL.\n"); FAULT(FAULT_GP,newCS & ~0x03) } } if((desc.flags & 0x0080) == 0) { logerror("IRET: Return CS segment is not present.\n"); FAULT(FAULT_NP,newCS & ~0x03) } /* Check SS selector and descriptor */ if(operand32 == 0) { newESP = READ16(ea+6) & 0xffff; newSS = READ16(ea+8) & 0xffff; } else { newESP = READ32(ea+12); newSS = READ32(ea+16) & 0xffff; } memset(&stack, 0, sizeof(stack)); stack.selector = newSS; i386_load_protected_mode_segment(&stack,NULL); DPL = (stack.flags >> 5) & 0x03; if((newSS & ~0x03) == 0) { logerror("IRET: Return SS selector is null.\n"); FAULT(FAULT_GP,0) } if(newSS & 0x04) { if((newSS & ~0x07) >= m_ldtr.limit) { logerror("IRET: Return SS selector is past LDT limit.\n"); FAULT(FAULT_GP,newSS & ~0x03); } } else { if((newSS & ~0x07) >= m_gdtr.limit) { logerror("IRET: Return SS selector is past GDT limit.\n"); FAULT(FAULT_GP,newSS & ~0x03); } } if((newSS & 0x03) != RPL) { logerror("IRET: Return SS RPL is not equal to return CS RPL.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((stack.flags & 0x0018) != 0x0010) { logerror("IRET: Return SS segment is not a data segment.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((stack.flags & 0x0002) == 0) { logerror("IRET: Return SS segment is not writable.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if(DPL != RPL) { logerror("IRET: Return SS DPL does not equal SS RPL.\n"); FAULT(FAULT_GP,newSS & ~0x03) } if((stack.flags & 0x0080) == 0) { logerror("IRET: Return SS segment is not present.\n"); FAULT(FAULT_NP,newSS & ~0x03) } if(newEIP > desc.limit) { logerror("IRET: EIP is past return CS limit.\n"); FAULT(FAULT_GP,0) } // if(operand32 == 0) // REG16(SP) += 10; // else // REG32(ESP) += 20; // IOPL can only change if CPL is zero if(CPL != 0) { UINT32 oldflags = get_flags(); newflags = (newflags & ~0x00003000) | (oldflags & 0x00003000); } if(operand32 == 0) { m_eip = newEIP & 0xffff; m_sreg[CS].selector = newCS; set_flags(newflags); REG16(SP) = newESP & 0xffff; m_sreg[SS].selector = newSS; } else { m_eip = newEIP; m_sreg[CS].selector = newCS & 0xffff; set_flags(newflags); REG32(ESP) = newESP; m_sreg[SS].selector = newSS & 0xffff; } m_CPL = newCS & 0x03; i386_load_segment_descriptor(SS); /* Check that DS, ES, FS and GS are valid for the new privilege level */ i386_check_sreg_validity(DS); i386_check_sreg_validity(ES); i386_check_sreg_validity(FS); i386_check_sreg_validity(GS); } } } i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } #include "cycles.h" static UINT8 cycle_table_rm[X86_NUM_CPUS][CYCLES_NUM_OPCODES]; static UINT8 cycle_table_pm[X86_NUM_CPUS][CYCLES_NUM_OPCODES]; #ifdef SUPPORT_RDTSC #define CYCLES_NUM(x) (m_cycles -= (x)) INLINE void CYCLES(int x) { if (PROTECTED_MODE) { m_cycles -= m_cycle_table_pm[x]; } else { m_cycles -= m_cycle_table_rm[x]; } } INLINE void CYCLES_RM(int modrm, int r, int m) { if (modrm >= 0xc0) { if (PROTECTED_MODE) { m_cycles -= m_cycle_table_pm[r]; } else { m_cycles -= m_cycle_table_rm[r]; } } else { if (PROTECTED_MODE) { m_cycles -= m_cycle_table_pm[m]; } else { m_cycles -= m_cycle_table_rm[m]; } } } #else /* i386/i486: we don't need to update cycles for rdtsc */ #define CYCLES_NUM(x) #define CYCLES(x) #define CYCLES_RM(modrm, r, m) #endif static void build_cycle_table() { int i, j; for (j=0; j < X86_NUM_CPUS; j++) { // cycle_table_rm[j] = (UINT8 *)malloc(sizeof(UINT8) * CYCLES_NUM_OPCODES); // cycle_table_pm[j] = (UINT8 *)malloc(sizeof(UINT8) * CYCLES_NUM_OPCODES); for (i=0; i < sizeof(x86_cycle_table)/sizeof(X86_CYCLE_TABLE); i++) { int opcode = x86_cycle_table[i].op; cycle_table_rm[j][opcode] = x86_cycle_table[i].cpu_cycles[j][0]; cycle_table_pm[j][opcode] = x86_cycle_table[i].cpu_cycles[j][1]; } } } static void report_invalid_opcode() { #ifndef DEBUG_MISSING_OPCODE logerror("i386: Invalid opcode %02X at %08X %s\n", m_opcode, m_pc - 1, m_lock ? "with lock" : ""); #else logerror("i386: Invalid opcode"); for (int a = 0; a < m_opcode_bytes_length; a++) logerror(" %02X", m_opcode_bytes[a]); logerror(" at %08X\n", m_opcode_pc); #endif } static void report_invalid_modrm(const char* opcode, UINT8 modrm) { #ifndef DEBUG_MISSING_OPCODE logerror("i386: Invalid %s modrm %01X at %08X\n", opcode, modrm, m_pc - 2); #else logerror("i386: Invalid %s modrm %01X", opcode, modrm); for (int a = 0; a < m_opcode_bytes_length; a++) logerror(" %02X", m_opcode_bytes[a]); logerror(" at %08X\n", m_opcode_pc); #endif i386_trap(6, 0, 0); } /* Forward declarations */ static void I386OP(decode_opcode)(); static void I386OP(decode_two_byte)(); static void I386OP(decode_three_byte66)(); static void I386OP(decode_three_bytef2)(); static void I386OP(decode_three_bytef3)(); #include "i386ops.c" #include "i386op16.c" #include "i386op32.c" #include "i486ops.c" #include "pentops.c" #include "x87ops.c" #include "i386ops.h" static void I386OP(decode_opcode)() { m_opcode = FETCH(); if(m_lock && !m_lock_table[0][m_opcode]) return I386OP(invalid)(); if( m_operand_size ) m_opcode_table1_32[m_opcode](); else m_opcode_table1_16[m_opcode](); } /* Two-byte opcode prefix */ static void I386OP(decode_two_byte)() { m_opcode = FETCH(); if(m_lock && !m_lock_table[1][m_opcode]) return I386OP(invalid)(); if( m_operand_size ) m_opcode_table2_32[m_opcode](); else m_opcode_table2_16[m_opcode](); } /* Three-byte opcode prefix 66 0f */ static void I386OP(decode_three_byte66)() { m_opcode = FETCH(); if( m_operand_size ) m_opcode_table366_32[m_opcode](); else m_opcode_table366_16[m_opcode](); } /* Three-byte opcode prefix f2 0f */ static void I386OP(decode_three_bytef2)() { m_opcode = FETCH(); if( m_operand_size ) m_opcode_table3f2_32[m_opcode](); else m_opcode_table3f2_16[m_opcode](); } /* Three-byte opcode prefix f3 0f */ static void I386OP(decode_three_bytef3)() { m_opcode = FETCH(); if( m_operand_size ) m_opcode_table3f3_32[m_opcode](); else m_opcode_table3f3_16[m_opcode](); } /*************************************************************************/ static void i386_postload() { int i; for (i = 0; i < 6; i++) i386_load_segment_descriptor(i); CHANGE_PC(m_eip); } static void i386_common_init(int tlbsize) { int i, j; static const int regs8[8] = {AL,CL,DL,BL,AH,CH,DH,BH}; static const int regs16[8] = {AX,CX,DX,BX,SP,BP,SI,DI}; static const int regs32[8] = {EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI}; assert((sizeof(XMM_REG)/sizeof(double)) == 2); build_cycle_table(); for( i=0; i < 256; i++ ) { int c=0; for( j=0; j < 8; j++ ) { if( i & (1 << j) ) c++; } i386_parity_table[i] = ~(c & 0x1) & 0x1; } for( i=0; i < 256; i++ ) { i386_MODRM_table[i].reg.b = regs8[(i >> 3) & 0x7]; i386_MODRM_table[i].reg.w = regs16[(i >> 3) & 0x7]; i386_MODRM_table[i].reg.d = regs32[(i >> 3) & 0x7]; i386_MODRM_table[i].rm.b = regs8[i & 0x7]; i386_MODRM_table[i].rm.w = regs16[i & 0x7]; i386_MODRM_table[i].rm.d = regs32[i & 0x7]; } m_vtlb = vtlb_alloc(AS_PROGRAM, 0, tlbsize); m_smi = false; m_lock = false; // i386_interface *intf = (i386_interface *) device->static_config(); // // if (intf != NULL) // m_smiact.resolve(intf->smiact, *device); // else // memset(&m_smiact, 0, sizeof(m_smiact)); zero_state(); } CPU_INIT( i386 ) { i386_common_init(32); build_opcode_table(OP_I386); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_I386]; m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_I386]; } static void build_opcode_table(UINT32 features) { int i; for (i=0; i < 256; i++) { m_opcode_table1_16[i] = I386OP(invalid); m_opcode_table1_32[i] = I386OP(invalid); m_opcode_table2_16[i] = I386OP(invalid); m_opcode_table2_32[i] = I386OP(invalid); m_opcode_table366_16[i] = I386OP(invalid); m_opcode_table366_32[i] = I386OP(invalid); m_opcode_table3f2_16[i] = I386OP(invalid); m_opcode_table3f2_32[i] = I386OP(invalid); m_opcode_table3f3_16[i] = I386OP(invalid); m_opcode_table3f3_32[i] = I386OP(invalid); m_lock_table[0][i] = false; m_lock_table[1][i] = false; } for (i=0; i < sizeof(x86_opcode_table)/sizeof(X86_OPCODE); i++) { const X86_OPCODE *op = &x86_opcode_table[i]; if ((op->flags & features)) { if (op->flags & OP_2BYTE) { m_opcode_table2_32[op->opcode] = op->handler32; m_opcode_table2_16[op->opcode] = op->handler16; m_opcode_table366_32[op->opcode] = op->handler32; m_opcode_table366_16[op->opcode] = op->handler16; m_lock_table[1][op->opcode] = op->lockable; } else if (op->flags & OP_3BYTE66) { m_opcode_table366_32[op->opcode] = op->handler32; m_opcode_table366_16[op->opcode] = op->handler16; } else if (op->flags & OP_3BYTEF2) { m_opcode_table3f2_32[op->opcode] = op->handler32; m_opcode_table3f2_16[op->opcode] = op->handler16; } else if (op->flags & OP_3BYTEF3) { m_opcode_table3f3_32[op->opcode] = op->handler32; m_opcode_table3f3_16[op->opcode] = op->handler16; } else { m_opcode_table1_32[op->opcode] = op->handler32; m_opcode_table1_16[op->opcode] = op->handler16; m_lock_table[0][op->opcode] = op->lockable; } } } } static void zero_state() { memset( &m_reg, 0, sizeof(m_reg) ); memset( m_sreg, 0, sizeof(m_sreg) ); m_eip = 0; m_pc = 0; m_prev_eip = 0; m_eflags = 0; m_eflags_mask = 0; m_CF = 0; m_DF = 0; m_SF = 0; m_OF = 0; m_ZF = 0; m_PF = 0; m_AF = 0; m_IF = 0; m_TF = 0; m_IOP1 = 0; m_IOP2 = 0; m_NT = 0; m_RF = 0; m_VM = 0; m_AC = 0; m_VIF = 0; m_VIP = 0; m_ID = 0; m_CPL = 0; m_performed_intersegment_jump = 0; m_delayed_interrupt_enable = 0; memset( m_cr, 0, sizeof(m_cr) ); memset( m_dr, 0, sizeof(m_dr) ); memset( m_tr, 0, sizeof(m_tr) ); memset( &m_gdtr, 0, sizeof(m_gdtr) ); memset( &m_idtr, 0, sizeof(m_idtr) ); memset( &m_task, 0, sizeof(m_task) ); memset( &m_ldtr, 0, sizeof(m_ldtr) ); m_ext = 0; m_halted = 0; m_operand_size = 0; m_xmm_operand_size = 0; m_address_size = 0; m_operand_prefix = 0; m_address_prefix = 0; m_segment_prefix = 0; m_segment_override = 0; m_cycles = 0; m_base_cycles = 0; m_opcode = 0; m_irq_state = 0; m_a20_mask = 0; m_cpuid_max_input_value_eax = 0; m_cpuid_id0 = 0; m_cpuid_id1 = 0; m_cpuid_id2 = 0; m_cpu_version = 0; m_feature_flags = 0; m_tsc = 0; m_perfctr[0] = m_perfctr[1] = 0; memset( m_x87_reg, 0, sizeof(m_x87_reg) ); m_x87_cw = 0; m_x87_sw = 0; m_x87_tw = 0; m_x87_data_ptr = 0; m_x87_inst_ptr = 0; m_x87_opcode = 0; memset( m_sse_reg, 0, sizeof(m_sse_reg) ); m_mxcsr = 0; m_smm = false; m_smi = false; m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; m_smbase = 0; #ifdef DEBUG_MISSING_OPCODE memset( m_opcode_bytes, 0, sizeof(m_opcode_bytes) ); m_opcode_pc = 0; m_opcode_bytes_length = 0; #endif } static CPU_RESET( i386 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x9b; m_sreg[CS].valid = true; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_sreg[DS].valid = m_sreg[ES].valid = m_sreg[FS].valid = m_sreg[GS].valid = m_sreg[SS].valid =true; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_smm = false; m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; m_a20_mask = ~0; m_cr[0] = 0x7fffffe0; // reserved bits set to 1 m_eflags = 0; m_eflags_mask = 0x00037fd7; m_eip = 0xfff0; // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 3 (386), Model 0 (DX), Stepping 8 (D1) REG32(EAX) = 0; REG32(EDX) = (3 << 8) | (0 << 4) | (8); m_CPL = 0; CHANGE_PC(m_eip); } static void pentium_smi() { UINT32 smram_state = m_smbase + 0xfe00; UINT32 old_cr0 = m_cr[0]; UINT32 old_flags = get_flags(); if(m_smm) return; m_cr[0] &= ~(0x8000000d); set_flags(2); // if(!m_smiact.isnull()) // m_smiact(true); m_smm = true; m_smi_latched = false; // save state WRITE32(m_cr[4], smram_state+SMRAM_IP5_CR4); WRITE32(m_sreg[ES].limit, smram_state+SMRAM_IP5_ESLIM); WRITE32(m_sreg[ES].base, smram_state+SMRAM_IP5_ESBASE); WRITE32(m_sreg[ES].flags, smram_state+SMRAM_IP5_ESACC); WRITE32(m_sreg[CS].limit, smram_state+SMRAM_IP5_CSLIM); WRITE32(m_sreg[CS].base, smram_state+SMRAM_IP5_CSBASE); WRITE32(m_sreg[CS].flags, smram_state+SMRAM_IP5_CSACC); WRITE32(m_sreg[SS].limit, smram_state+SMRAM_IP5_SSLIM); WRITE32(m_sreg[SS].base, smram_state+SMRAM_IP5_SSBASE); WRITE32(m_sreg[SS].flags, smram_state+SMRAM_IP5_SSACC); WRITE32(m_sreg[DS].limit, smram_state+SMRAM_IP5_DSLIM); WRITE32(m_sreg[DS].base, smram_state+SMRAM_IP5_DSBASE); WRITE32(m_sreg[DS].flags, smram_state+SMRAM_IP5_DSACC); WRITE32(m_sreg[FS].limit, smram_state+SMRAM_IP5_FSLIM); WRITE32(m_sreg[FS].base, smram_state+SMRAM_IP5_FSBASE); WRITE32(m_sreg[FS].flags, smram_state+SMRAM_IP5_FSACC); WRITE32(m_sreg[GS].limit, smram_state+SMRAM_IP5_GSLIM); WRITE32(m_sreg[GS].base, smram_state+SMRAM_IP5_GSBASE); WRITE32(m_sreg[GS].flags, smram_state+SMRAM_IP5_GSACC); WRITE32(m_ldtr.flags, smram_state+SMRAM_IP5_LDTACC); WRITE32(m_ldtr.limit, smram_state+SMRAM_IP5_LDTLIM); WRITE32(m_ldtr.base, smram_state+SMRAM_IP5_LDTBASE); WRITE32(m_gdtr.limit, smram_state+SMRAM_IP5_GDTLIM); WRITE32(m_gdtr.base, smram_state+SMRAM_IP5_GDTBASE); WRITE32(m_idtr.limit, smram_state+SMRAM_IP5_IDTLIM); WRITE32(m_idtr.base, smram_state+SMRAM_IP5_IDTBASE); WRITE32(m_task.limit, smram_state+SMRAM_IP5_TRLIM); WRITE32(m_task.base, smram_state+SMRAM_IP5_TRBASE); WRITE32(m_task.flags, smram_state+SMRAM_IP5_TRACC); WRITE32(m_sreg[ES].selector, smram_state+SMRAM_ES); WRITE32(m_sreg[CS].selector, smram_state+SMRAM_CS); WRITE32(m_sreg[SS].selector, smram_state+SMRAM_SS); WRITE32(m_sreg[DS].selector, smram_state+SMRAM_DS); WRITE32(m_sreg[FS].selector, smram_state+SMRAM_FS); WRITE32(m_sreg[GS].selector, smram_state+SMRAM_GS); WRITE32(m_ldtr.segment, smram_state+SMRAM_LDTR); WRITE32(m_task.segment, smram_state+SMRAM_TR); WRITE32(m_dr[7], smram_state+SMRAM_DR7); WRITE32(m_dr[6], smram_state+SMRAM_DR6); WRITE32(REG32(EAX), smram_state+SMRAM_EAX); WRITE32(REG32(ECX), smram_state+SMRAM_ECX); WRITE32(REG32(EDX), smram_state+SMRAM_EDX); WRITE32(REG32(EBX), smram_state+SMRAM_EBX); WRITE32(REG32(ESP), smram_state+SMRAM_ESP); WRITE32(REG32(EBP), smram_state+SMRAM_EBP); WRITE32(REG32(ESI), smram_state+SMRAM_ESI); WRITE32(REG32(EDI), smram_state+SMRAM_EDI); WRITE32(m_eip, smram_state+SMRAM_EIP); WRITE32(old_flags, smram_state+SMRAM_EAX); WRITE32(m_cr[3], smram_state+SMRAM_CR3); WRITE32(old_cr0, smram_state+SMRAM_CR0); m_sreg[DS].selector = m_sreg[ES].selector = m_sreg[FS].selector = m_sreg[GS].selector = m_sreg[SS].selector = 0; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffffffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x8093; m_sreg[DS].valid = m_sreg[ES].valid = m_sreg[FS].valid = m_sreg[GS].valid = m_sreg[SS].valid =true; m_sreg[CS].selector = 0x3000; // pentium only, ppro sel = smbase >> 4 m_sreg[CS].base = m_smbase; m_sreg[CS].limit = 0xffffffff; m_sreg[CS].flags = 0x809b; m_sreg[CS].valid = true; m_cr[4] = 0; m_dr[7] = 0x400; m_eip = 0x8000; m_nmi_masked = true; CHANGE_PC(m_eip); } static void i386_set_irq_line(int irqline, int state) { if (state != CLEAR_LINE && m_halted) { m_halted = 0; } if ( irqline == INPUT_LINE_NMI ) { /* NMI (I do not think that this is 100% right) */ if(m_nmi_masked) { m_nmi_latched = true; return; } if ( state ) i386_trap(2, 1, 0); } else { m_irq_state = state; } } static void i386_set_a20_line(int state) { if (state) { m_a20_mask = ~0; } else { m_a20_mask = ~(1 << 20); } // TODO: how does A20M and the tlb interact vtlb_flush_dynamic(m_vtlb); } static CPU_EXECUTE( i386 ) { #ifdef SUPPORT_RDTSC m_cycles = 1; int cycles = m_cycles; m_base_cycles = cycles; #endif CHANGE_PC(m_eip); // if (m_halted) // { // m_tsc += cycles; // m_cycles = 0; // return; // } // while( m_cycles > 0 ) // { i386_check_irq_line(); m_operand_size = m_sreg[CS].d; m_xmm_operand_size = 0; m_address_size = m_sreg[CS].d; m_operand_prefix = 0; m_address_prefix = 0; m_ext = 1; int old_tf = m_TF; m_segment_prefix = 0; m_prev_eip = m_eip; // debugger_instruction_hook(device, m_pc); if(m_delayed_interrupt_enable != 0) { m_IF = 1; m_delayed_interrupt_enable = 0; } #ifdef DEBUG_MISSING_OPCODE m_opcode_bytes_length = 0; m_opcode_pc = m_pc; #endif try { I386OP(decode_opcode)(); if(m_TF && old_tf) { m_prev_eip = m_eip; m_ext = 1; i386_trap(1,0,0); } if(m_lock && (m_opcode != 0xf0)) m_lock = false; } catch(UINT64 e) { m_ext = 1; i386_trap_with_error(e&0xffffffff,0,0,e>>32); } // } #ifdef SUPPORT_RDTSC m_tsc += (cycles - m_cycles); #endif } /*************************************************************************/ static CPU_TRANSLATE( i386 ) { int ret = TRUE; if(space == AS_PROGRAM) ret = i386_translate_address(intention, address, NULL); *address &= m_a20_mask; return ret; } /*****************************************************************************/ /* Intel 486 */ static CPU_INIT( i486 ) { i386_common_init(32); build_opcode_table(OP_I386 | OP_FPU | OP_I486); build_x87_opcode_table(); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_I486]; m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_I486]; } static CPU_RESET( i486 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x00000010; m_eflags = 0; m_eflags_mask = 0x00077fd7; m_eip = 0xfff0; m_smm = false; m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 4 (486), Model 0/1 (DX), Stepping 3 REG32(EAX) = 0; REG32(EDX) = (4 << 8) | (0 << 4) | (3); CHANGE_PC(m_eip); } /*****************************************************************************/ /* Pentium */ static CPU_INIT( pentium ) { // 64 dtlb small, 8 dtlb large, 32 itlb i386_common_init(96); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM); build_x87_opcode_table(); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; } static CPU_RESET( pentium ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x00000010; m_eflags = 0x00200000; m_eflags_mask = 0x003f7fd7; m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 5 (Pentium), Model 2 (75 - 200MHz), Stepping 5 REG32(EAX) = 0; REG32(EDX) = (5 << 8) | (2 << 4) | (5); m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x01; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip // [ 2:2] I/O breakpoints // [ 4:4] Time Stamp Counter // [ 5:5] Pentium CPU style model specific registers // [ 7:7] Machine Check Exception // [ 8:8] CMPXCHG8B instruction m_feature_flags = 0x000001bf; CHANGE_PC(m_eip); } /*****************************************************************************/ /* Cyrix MediaGX */ static CPU_INIT( mediagx ) { // probably 32 unified i386_common_init(32); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_CYRIX); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_MEDIAGX]; m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_MEDIAGX]; } static CPU_RESET( mediagx ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x00000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_smm = false; m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 4, Model 4 (MediaGX) REG32(EAX) = 0; REG32(EDX) = (4 << 8) | (4 << 4) | (1); /* TODO: is this correct? */ m_cpuid_id0 = 0x69727943; // Cyri m_cpuid_id1 = 0x736e4978; // xIns m_cpuid_id2 = 0x6d616574; // tead m_cpuid_max_input_value_eax = 0x01; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip m_feature_flags = 0x00000001; CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium Pro */ static CPU_INIT( pentium_pro ) { // 64 dtlb small, 32 itlb i386_common_init(96); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium_pro ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 6, Model 1 (Pentium Pro) REG32(EAX) = 0; REG32(EDX) = (6 << 8) | (1 << 4) | (1); /* TODO: is this correct? */ m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x02; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip // [ 2:2] I/O breakpoints // [ 4:4] Time Stamp Counter // [ 5:5] Pentium CPU style model specific registers // [ 7:7] Machine Check Exception // [ 8:8] CMPXCHG8B instruction // [15:15] CMOV and FCMOV // No MMX m_feature_flags = 0x000081bf; CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium MMX */ static CPU_INIT( pentium_mmx ) { // 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large i386_common_init(96); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_MMX); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium_mmx ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 5, Model 4 (P55C) REG32(EAX) = 0; REG32(EDX) = (5 << 8) | (4 << 4) | (1); m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x01; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip // [ 2:2] I/O breakpoints // [ 4:4] Time Stamp Counter // [ 5:5] Pentium CPU style model specific registers // [ 7:7] Machine Check Exception // [ 8:8] CMPXCHG8B instruction // [23:23] MMX instructions m_feature_flags = 0x008001bf; CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium II */ static CPU_INIT( pentium2 ) { // 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large i386_common_init(96); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium2 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 6, Model 3 (Pentium II / Klamath) REG32(EAX) = 0; REG32(EDX) = (6 << 8) | (3 << 4) | (1); /* TODO: is this correct? */ m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x02; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip m_feature_flags = 0x008081bf; // TODO: enable relevant flags here CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium III */ static CPU_INIT( pentium3 ) { // 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large i386_common_init(96); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX | OP_SSE); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium3 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [11:8] Family // [ 7:4] Model // [ 3:0] Stepping ID // Family 6, Model 8 (Pentium III / Coppermine) REG32(EAX) = 0; REG32(EDX) = (6 << 8) | (8 << 4) | (10); m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x03; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip // [ 4:4] Time Stamp Counter // [ D:D] PTE Global Bit m_feature_flags = 0x00002011; // TODO: enable relevant flags here CHANGE_PC(m_eip); } /*****************************************************************************/ /* Intel Pentium 4 */ static CPU_INIT( pentium4 ) { // 128 dtlb, 64 itlb i386_common_init(196); build_x87_opcode_table(); build_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX | OP_SSE | OP_SSE2); m_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables m_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM]; // TODO: generate own cycle tables } static CPU_RESET( pentium4 ) { zero_state(); vtlb_flush_dynamic(m_vtlb); m_sreg[CS].selector = 0xf000; m_sreg[CS].base = 0xffff0000; m_sreg[CS].limit = 0xffff; m_sreg[CS].flags = 0x009b; m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000; m_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff; m_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092; m_idtr.base = 0; m_idtr.limit = 0x3ff; m_a20_mask = ~0; m_cr[0] = 0x60000010; m_eflags = 0x00200000; m_eflags_mask = 0x00277fd7; /* TODO: is this correct? */ m_eip = 0xfff0; m_mxcsr = 0x1f80; m_smm = false; m_smi_latched = false; m_smbase = 0x30000; m_nmi_masked = false; m_nmi_latched = false; x87_reset(); // [27:20] Extended family // [19:16] Extended model // [13:12] Type // [11: 8] Family // [ 7: 4] Model // [ 3: 0] Stepping ID // Family 15, Model 0 (Pentium 4 / Willamette) REG32(EAX) = 0; REG32(EDX) = (0 << 20) | (0xf << 8) | (0 << 4) | (1); m_cpuid_id0 = 0x756e6547; // Genu m_cpuid_id1 = 0x49656e69; // ineI m_cpuid_id2 = 0x6c65746e; // ntel m_cpuid_max_input_value_eax = 0x02; m_cpu_version = REG32(EDX); // [ 0:0] FPU on chip m_feature_flags = 0x00000001; // TODO: enable relevant flags here CHANGE_PC(m_eip); } ================================================ FILE: vm86/mame/emu/cpu/i386.old/i386.h ================================================ #pragma once #ifndef __I386INTF_H__ #define __I386INTF_H__ #define INPUT_LINE_A20 1 #define INPUT_LINE_SMI 2 struct i386_interface { devcb_write_line smiact; }; // mingw has this defined for 32-bit compiles #undef i386 DECLARE_LEGACY_CPU_DEVICE(I386, i386); DECLARE_LEGACY_CPU_DEVICE(I386SX, i386SX); DECLARE_LEGACY_CPU_DEVICE(I486, i486); DECLARE_LEGACY_CPU_DEVICE(PENTIUM, pentium); DECLARE_LEGACY_CPU_DEVICE(MEDIAGX, mediagx); DECLARE_LEGACY_CPU_DEVICE(PENTIUM_PRO, pentium_pro); DECLARE_LEGACY_CPU_DEVICE(PENTIUM_MMX, pentium_mmx); DECLARE_LEGACY_CPU_DEVICE(PENTIUM2, pentium2); DECLARE_LEGACY_CPU_DEVICE(PENTIUM3, pentium3); DECLARE_LEGACY_CPU_DEVICE(PENTIUM4, pentium4); #endif /* __I386INTF_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i386.old/i386dasm.c ================================================ /* i386 Disassembler Written by Ville Linde */ //#include "emu.h" enum { PARAM_REG = 1, /* 16 or 32-bit register */ PARAM_REG8, /* 8-bit register */ PARAM_REG16, /* 16-bit register */ PARAM_REG32, /* 32-bit register */ PARAM_REG3264, /* 32-bit or 64-bit register */ PARAM_REG2_32, /* 32-bit register */ PARAM_MMX, /* MMX register */ PARAM_MMX2, /* MMX register in modrm */ PARAM_XMM, /* XMM register */ PARAM_RM, /* 16 or 32-bit memory or register */ PARAM_RM8, /* 8-bit memory or register */ PARAM_RM16, /* 16-bit memory or register */ PARAM_RM32, /* 32-bit memory or register */ PARAM_RMPTR, /* 16 or 32-bit memory or register */ PARAM_RMPTR8, /* 8-bit memory or register */ PARAM_RMPTR16, /* 16-bit memory or register */ PARAM_RMPTR32, /* 32-bit memory or register */ PARAM_RMXMM, /* 32 or 64-bit memory or register */ PARAM_REGORXMM, /* 32 or 64-bit register or XMM register */ PARAM_M64, /* 64-bit memory */ PARAM_M64PTR, /* 64-bit memory */ PARAM_MMXM, /* 64-bit memory or MMX register */ PARAM_XMMM, /* 128-bit memory or XMM register */ PARAM_I4, /* 4-bit signed immediate */ PARAM_I8, /* 8-bit signed immediate */ PARAM_I16, /* 16-bit signed immediate */ PARAM_UI8, /* 8-bit unsigned immediate */ PARAM_UI16, /* 16-bit unsigned immediate */ PARAM_IMM, /* 16 or 32-bit immediate */ PARAM_IMM64, /* 16, 32 or 64-bit immediate */ PARAM_ADDR, /* 16:16 or 16:32 address */ PARAM_REL, /* 16 or 32-bit PC-relative displacement */ PARAM_REL8, /* 8-bit PC-relative displacement */ PARAM_MEM_OFFS, /* 16 or 32-bit mem offset */ PARAM_PREIMP, /* prefix with implicit register */ PARAM_SREG, /* segment register */ PARAM_CREG, /* control register */ PARAM_DREG, /* debug register */ PARAM_TREG, /* test register */ PARAM_1, /* used by shift/rotate instructions */ PARAM_AL, PARAM_CL, PARAM_DL, PARAM_BL, PARAM_AH, PARAM_CH, PARAM_DH, PARAM_BH, PARAM_DX, PARAM_EAX, /* EAX or AX */ PARAM_ECX, /* ECX or CX */ PARAM_EDX, /* EDX or DX */ PARAM_EBX, /* EBX or BX */ PARAM_ESP, /* ESP or SP */ PARAM_EBP, /* EBP or BP */ PARAM_ESI, /* ESI or SI */ PARAM_EDI, /* EDI or DI */ PARAM_XMM0, PARAM_XMM64, /* 64-bit memory or XMM register */ PARAM_XMM32, /* 32-bit memory or XMM register */ PARAM_XMM16, /* 16-bit memory or XMM register */ }; enum { MODRM = 1, GROUP, FPU, OP_SIZE, ADDR_SIZE, TWO_BYTE, PREFIX, SEG_CS, SEG_DS, SEG_ES, SEG_FS, SEG_GS, SEG_SS, ISREX, THREE_BYTE /* [prefix] 0f op1 op2 and then mod/rm */ }; #define FLAGS_MASK 0x0ff #define VAR_NAME 0x100 #define VAR_NAME4 0x200 #define ALWAYS64 0x400 #define SPECIAL64 0x800 #define SPECIAL64_ENT(x) (SPECIAL64 | ((x) << 24)) struct I386_OPCODE { const char *mnemonic; UINT32 flags; UINT32 param1; UINT32 param2; UINT32 param3; offs_t dasm_flags; }; struct GROUP_OP { char mnemonic[32]; const I386_OPCODE *opcode; }; static const UINT8 *opcode_ptr; static const UINT8 *opcode_ptr_base; static const I386_OPCODE i386_opcode_table1[256] = { // 0x00 {"add", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"add", MODRM, PARAM_RM, PARAM_REG, 0 }, {"add", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"add", MODRM, PARAM_REG, PARAM_RM, 0 }, {"add", 0, PARAM_AL, PARAM_UI8, 0 }, {"add", 0, PARAM_EAX, PARAM_IMM, 0 }, {"push es", 0, 0, 0, 0 }, {"pop es", 0, 0, 0, 0 }, {"or", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"or", MODRM, PARAM_RM, PARAM_REG, 0 }, {"or", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"or", MODRM, PARAM_REG, PARAM_RM, 0 }, {"or", 0, PARAM_AL, PARAM_UI8, 0 }, {"or", 0, PARAM_EAX, PARAM_IMM, 0 }, {"push cs", 0, 0, 0, 0 }, {"two_byte", TWO_BYTE, 0, 0, 0 }, // 0x10 {"adc", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"adc", MODRM, PARAM_RM, PARAM_REG, 0 }, {"adc", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"adc", MODRM, PARAM_REG, PARAM_RM, 0 }, {"adc", 0, PARAM_AL, PARAM_UI8, 0 }, {"adc", 0, PARAM_EAX, PARAM_IMM, 0 }, {"push ss", 0, 0, 0, 0 }, {"pop ss", 0, 0, 0, 0 }, {"sbb", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"sbb", MODRM, PARAM_RM, PARAM_REG, 0 }, {"sbb", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"sbb", MODRM, PARAM_REG, PARAM_RM, 0 }, {"sbb", 0, PARAM_AL, PARAM_UI8, 0 }, {"sbb", 0, PARAM_EAX, PARAM_IMM, 0 }, {"push ds", 0, 0, 0, 0 }, {"pop ds", 0, 0, 0, 0 }, // 0x20 {"and", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"and", MODRM, PARAM_RM, PARAM_REG, 0 }, {"and", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"and", MODRM, PARAM_REG, PARAM_RM, 0 }, {"and", 0, PARAM_AL, PARAM_UI8, 0 }, {"and", 0, PARAM_EAX, PARAM_IMM, 0 }, {"seg_es", SEG_ES, 0, 0, 0 }, {"daa", 0, 0, 0, 0 }, {"sub", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"sub", MODRM, PARAM_RM, PARAM_REG, 0 }, {"sub", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"sub", MODRM, PARAM_REG, PARAM_RM, 0 }, {"sub", 0, PARAM_AL, PARAM_UI8, 0 }, {"sub", 0, PARAM_EAX, PARAM_IMM, 0 }, {"seg_cs", SEG_CS, 0, 0, 0 }, {"das", 0, 0, 0, 0 }, // 0x30 {"xor", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"xor", MODRM, PARAM_RM, PARAM_REG, 0 }, {"xor", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"xor", MODRM, PARAM_REG, PARAM_RM, 0 }, {"xor", 0, PARAM_AL, PARAM_UI8, 0 }, {"xor", 0, PARAM_EAX, PARAM_IMM, 0 }, {"seg_ss", SEG_SS, 0, 0, 0 }, {"aaa", 0, 0, 0, 0 }, {"cmp", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"cmp", MODRM, PARAM_RM, PARAM_REG, 0 }, {"cmp", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"cmp", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmp", 0, PARAM_AL, PARAM_UI8, 0 }, {"cmp", 0, PARAM_EAX, PARAM_IMM, 0 }, {"seg_ds", SEG_DS, 0, 0, 0 }, {"aas", 0, 0, 0, 0 }, // 0x40 {"inc", ISREX, PARAM_EAX, 0, 0 }, {"inc", ISREX, PARAM_ECX, 0, 0 }, {"inc", ISREX, PARAM_EDX, 0, 0 }, {"inc", ISREX, PARAM_EBX, 0, 0 }, {"inc", ISREX, PARAM_ESP, 0, 0 }, {"inc", ISREX, PARAM_EBP, 0, 0 }, {"inc", ISREX, PARAM_ESI, 0, 0 }, {"inc", ISREX, PARAM_EDI, 0, 0 }, {"dec", ISREX, PARAM_EAX, 0, 0 }, {"dec", ISREX, PARAM_ECX, 0, 0 }, {"dec", ISREX, PARAM_EDX, 0, 0 }, {"dec", ISREX, PARAM_EBX, 0, 0 }, {"dec", ISREX, PARAM_ESP, 0, 0 }, {"dec", ISREX, PARAM_EBP, 0, 0 }, {"dec", ISREX, PARAM_ESI, 0, 0 }, {"dec", ISREX, PARAM_EDI, 0, 0 }, // 0x50 {"push", ALWAYS64, PARAM_EAX, 0, 0 }, {"push", ALWAYS64, PARAM_ECX, 0, 0 }, {"push", ALWAYS64, PARAM_EDX, 0, 0 }, {"push", ALWAYS64, PARAM_EBX, 0, 0 }, {"push", ALWAYS64, PARAM_ESP, 0, 0 }, {"push", ALWAYS64, PARAM_EBP, 0, 0 }, {"push", ALWAYS64, PARAM_ESI, 0, 0 }, {"push", ALWAYS64, PARAM_EDI, 0, 0 }, {"pop", ALWAYS64, PARAM_EAX, 0, 0 }, {"pop", ALWAYS64, PARAM_ECX, 0, 0 }, {"pop", ALWAYS64, PARAM_EDX, 0, 0 }, {"pop", ALWAYS64, PARAM_EBX, 0, 0 }, {"pop", ALWAYS64, PARAM_ESP, 0, 0 }, {"pop", ALWAYS64, PARAM_EBP, 0, 0 }, {"pop", ALWAYS64, PARAM_ESI, 0, 0 }, {"pop", ALWAYS64, PARAM_EDI, 0, 0 }, // 0x60 {"pusha\0pushad\0",VAR_NAME,0, 0, 0 }, {"popa\0popad\0", VAR_NAME,0, 0, 0 }, {"bound", MODRM, PARAM_REG, PARAM_RM, 0 }, {"arpl", MODRM | SPECIAL64_ENT(0),PARAM_RM, PARAM_REG16, 0 }, {"seg_fs", SEG_FS, 0, 0, 0 }, {"seg_gs", SEG_GS, 0, 0, 0 }, {"op_size", OP_SIZE, 0, 0, 0 }, {"addr_size", ADDR_SIZE, 0, 0, 0 }, {"push", 0, PARAM_IMM, 0, 0 }, {"imul", MODRM, PARAM_REG, PARAM_RM, PARAM_IMM }, {"push", 0, PARAM_I8, 0, 0 }, {"imul", MODRM, PARAM_REG, PARAM_RM, PARAM_I8 }, {"insb", 0, 0, 0, 0 }, {"insw\0insd\0insd",VAR_NAME, 0, 0, 0 }, {"outsb", 0, PARAM_PREIMP, 0, 0 }, {"outsw\0outsd\0outsd",VAR_NAME, PARAM_PREIMP, 0, 0 }, // 0x70 {"jo", 0, PARAM_REL8, 0, 0 }, {"jno", 0, PARAM_REL8, 0, 0 }, {"jb", 0, PARAM_REL8, 0, 0 }, {"jae", 0, PARAM_REL8, 0, 0 }, {"je", 0, PARAM_REL8, 0, 0 }, {"jne", 0, PARAM_REL8, 0, 0 }, {"jbe", 0, PARAM_REL8, 0, 0 }, {"ja", 0, PARAM_REL8, 0, 0 }, {"js", 0, PARAM_REL8, 0, 0 }, {"jns", 0, PARAM_REL8, 0, 0 }, {"jp", 0, PARAM_REL8, 0, 0 }, {"jnp", 0, PARAM_REL8, 0, 0 }, {"jl", 0, PARAM_REL8, 0, 0 }, {"jge", 0, PARAM_REL8, 0, 0 }, {"jle", 0, PARAM_REL8, 0, 0 }, {"jg", 0, PARAM_REL8, 0, 0 }, // 0x80 {"group80", GROUP, 0, 0, 0 }, {"group81", GROUP, 0, 0, 0 }, {"group80", GROUP, 0, 0, 0 }, {"group83", GROUP, 0, 0, 0 }, {"test", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"test", MODRM, PARAM_RM, PARAM_REG, 0 }, {"xchg", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"xchg", MODRM, PARAM_REG, PARAM_RM, 0 }, {"mov", MODRM, PARAM_RM8, PARAM_REG8, 0 }, {"mov", MODRM, PARAM_RM, PARAM_REG, 0 }, {"mov", MODRM, PARAM_REG8, PARAM_RM8, 0 }, {"mov", MODRM, PARAM_REG, PARAM_RM, 0 }, {"mov", MODRM, PARAM_RM, PARAM_SREG, 0 }, {"lea", MODRM, PARAM_REG, PARAM_RM, 0 }, {"mov", MODRM, PARAM_SREG, PARAM_RM, 0 }, {"pop", MODRM, PARAM_RM, 0, 0 }, // 0x90 {"nop\0???\0???\0pause", VAR_NAME4, 0, 0, 0 }, {"xchg", 0, PARAM_EAX, PARAM_ECX, 0 }, {"xchg", 0, PARAM_EAX, PARAM_EDX, 0 }, {"xchg", 0, PARAM_EAX, PARAM_EBX, 0 }, {"xchg", 0, PARAM_EAX, PARAM_ESP, 0 }, {"xchg", 0, PARAM_EAX, PARAM_EBP, 0 }, {"xchg", 0, PARAM_EAX, PARAM_ESI, 0 }, {"xchg", 0, PARAM_EAX, PARAM_EDI, 0 }, {"cbw\0cwde\0cdqe", VAR_NAME, 0, 0, 0 }, {"cwd\0cdq\0cqo", VAR_NAME, 0, 0, 0 }, {"call", ALWAYS64, PARAM_ADDR, 0, 0, DASMFLAG_STEP_OVER}, {"wait", 0, 0, 0, 0 }, {"pushf\0pushfd\0pushfq",VAR_NAME, 0, 0, 0 }, {"popf\0popfd\0popfq",VAR_NAME, 0, 0, 0 }, {"sahf", 0, 0, 0, 0 }, {"lahf", 0, 0, 0, 0 }, // 0xa0 {"mov", 0, PARAM_AL, PARAM_MEM_OFFS, 0 }, {"mov", 0, PARAM_EAX, PARAM_MEM_OFFS, 0 }, {"mov", 0, PARAM_MEM_OFFS, PARAM_AL, 0 }, {"mov", 0, PARAM_MEM_OFFS, PARAM_EAX, 0 }, {"movsb", 0, PARAM_PREIMP, 0, 0 }, {"movsw\0movsd\0movsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, {"cmpsb", 0, PARAM_PREIMP, 0, 0 }, {"cmpsw\0cmpsd\0cmpsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, {"test", 0, PARAM_AL, PARAM_UI8, 0 }, {"test", 0, PARAM_EAX, PARAM_IMM, 0 }, {"stosb", 0, 0, 0, 0 }, {"stosw\0stosd\0stosq",VAR_NAME, 0, 0, 0 }, {"lodsb", 0, PARAM_PREIMP, 0, 0 }, {"lodsw\0lodsd\0lodsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, {"scasb", 0, 0, 0, 0 }, {"scasw\0scasd\0scasq",VAR_NAME, 0, 0, 0 }, // 0xb0 {"mov", 0, PARAM_AL, PARAM_UI8, 0 }, {"mov", 0, PARAM_CL, PARAM_UI8, 0 }, {"mov", 0, PARAM_DL, PARAM_UI8, 0 }, {"mov", 0, PARAM_BL, PARAM_UI8, 0 }, {"mov", 0, PARAM_AH, PARAM_UI8, 0 }, {"mov", 0, PARAM_CH, PARAM_UI8, 0 }, {"mov", 0, PARAM_DH, PARAM_UI8, 0 }, {"mov", 0, PARAM_BH, PARAM_UI8, 0 }, {"mov", 0, PARAM_EAX, PARAM_IMM64, 0 }, {"mov", 0, PARAM_ECX, PARAM_IMM64, 0 }, {"mov", 0, PARAM_EDX, PARAM_IMM64, 0 }, {"mov", 0, PARAM_EBX, PARAM_IMM64, 0 }, {"mov", 0, PARAM_ESP, PARAM_IMM64, 0 }, {"mov", 0, PARAM_EBP, PARAM_IMM64, 0 }, {"mov", 0, PARAM_ESI, PARAM_IMM64, 0 }, {"mov", 0, PARAM_EDI, PARAM_IMM64, 0 }, // 0xc0 {"groupC0", GROUP, 0, 0, 0 }, {"groupC1", GROUP, 0, 0, 0 }, {"ret", 0, PARAM_UI16, 0, 0, DASMFLAG_STEP_OUT}, {"ret", 0, 0, 0, 0, DASMFLAG_STEP_OUT}, {"les", MODRM, PARAM_REG, PARAM_RM, 0 }, {"lds", MODRM, PARAM_REG, PARAM_RM, 0 }, {"mov", MODRM, PARAM_RMPTR8, PARAM_UI8, 0 }, {"mov", MODRM, PARAM_RMPTR, PARAM_IMM, 0 }, {"enter", 0, PARAM_UI16, PARAM_UI8, 0 }, {"leave", 0, 0, 0, 0 }, {"retf", 0, PARAM_UI16, 0, 0, DASMFLAG_STEP_OUT}, {"retf", 0, 0, 0, 0, DASMFLAG_STEP_OUT}, {"int 3", 0, 0, 0, 0, DASMFLAG_STEP_OVER}, {"int", 0, PARAM_UI8, 0, 0, DASMFLAG_STEP_OVER}, {"into", 0, 0, 0, 0 }, {"iret", 0, 0, 0, 0, DASMFLAG_STEP_OUT}, // 0xd0 {"groupD0", GROUP, 0, 0, 0 }, {"groupD1", GROUP, 0, 0, 0 }, {"groupD2", GROUP, 0, 0, 0 }, {"groupD3", GROUP, 0, 0, 0 }, {"aam", 0, PARAM_UI8, 0, 0 }, {"aad", 0, PARAM_UI8, 0, 0 }, {"salc", 0, 0, 0, 0 }, //AMD docs name it {"xlat", 0, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, {"escape", FPU, 0, 0, 0 }, // 0xe0 {"loopne", 0, PARAM_REL8, 0, 0, DASMFLAG_STEP_OVER}, {"loopz", 0, PARAM_REL8, 0, 0, DASMFLAG_STEP_OVER}, {"loop", 0, PARAM_REL8, 0, 0, DASMFLAG_STEP_OVER}, {"jcxz\0jecxz\0jrcxz",VAR_NAME, PARAM_REL8, 0, 0 }, {"in", 0, PARAM_AL, PARAM_UI8, 0 }, {"in", 0, PARAM_EAX, PARAM_UI8, 0 }, {"out", 0, PARAM_UI8, PARAM_AL, 0 }, {"out", 0, PARAM_UI8, PARAM_EAX, 0 }, {"call", 0, PARAM_REL, 0, 0, DASMFLAG_STEP_OVER}, {"jmp", 0, PARAM_REL, 0, 0 }, {"jmp", 0, PARAM_ADDR, 0, 0 }, {"jmp", 0, PARAM_REL8, 0, 0 }, {"in", 0, PARAM_AL, PARAM_DX, 0 }, {"in", 0, PARAM_EAX, PARAM_DX, 0 }, {"out", 0, PARAM_DX, PARAM_AL, 0 }, {"out", 0, PARAM_DX, PARAM_EAX, 0 }, // 0xf0 {"lock", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"repne", PREFIX, 0, 0, 0 }, {"rep", PREFIX, 0, 0, 0 }, {"hlt", 0, 0, 0, 0 }, {"cmc", 0, 0, 0, 0 }, {"groupF6", GROUP, 0, 0, 0 }, {"groupF7", GROUP, 0, 0, 0 }, {"clc", 0, 0, 0, 0 }, {"stc", 0, 0, 0, 0 }, {"cli", 0, 0, 0, 0 }, {"sti", 0, 0, 0, 0 }, {"cld", 0, 0, 0, 0 }, {"std", 0, 0, 0, 0 }, {"groupFE", GROUP, 0, 0, 0 }, {"groupFF", GROUP, 0, 0, 0 } }; static const I386_OPCODE x64_opcode_alt[] = { {"movsxd", MODRM | ALWAYS64,PARAM_REG, PARAM_RMPTR32, 0 }, }; static const I386_OPCODE i386_opcode_table2[256] = { // 0x00 {"group0F00", GROUP, 0, 0, 0 }, {"group0F01", GROUP, 0, 0, 0 }, {"lar", MODRM, PARAM_REG, PARAM_RM, 0 }, {"lsl", MODRM, PARAM_REG, PARAM_RM, 0 }, {"???", 0, 0, 0, 0 }, {"syscall", 0, 0, 0, 0 }, {"clts", 0, 0, 0, 0 }, {"sysret", 0, 0, 0, 0 }, {"invd", 0, 0, 0, 0 }, {"wbinvd", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"ud2", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"group0F0D", GROUP, 0, 0, 0 }, //AMD only {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x10 {"movups\0" "movupd\0" "movsd\0" "movss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movups\0" "movupd\0" "movsd\0" "movss", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"movlps\0" "movlpd\0" "movddup\0" "movsldup", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movlps\0" "movlpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"unpcklps\0" "unpcklpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"unpckhps\0" "unpckhpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movhps\0" "movhpd\0" "???\0" "movshdup", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"movhps\0" "movhpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"group0F18", GROUP, 0, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, // 0x20 {"mov", MODRM, PARAM_REG2_32, PARAM_CREG, 0 }, {"mov", MODRM, PARAM_REG2_32, PARAM_DREG, 0 }, {"mov", MODRM, PARAM_CREG, PARAM_REG2_32, 0 }, {"mov", MODRM, PARAM_DREG, PARAM_REG2_32, 0 }, {"mov", MODRM, PARAM_REG2_32, PARAM_TREG, 0 }, {"???", 0, 0, 0, 0 }, {"mov", MODRM, PARAM_TREG, PARAM_REG2_32, 0 }, {"???", 0, 0, 0, 0 }, {"movaps\0" "movapd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movaps\0" "movapd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"cvtpi2ps\0" "cvtpi2pd\0" "cvtsi2sd\0" "cvtsi2ss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_RMXMM, 0 }, {"movntps\0" "movntpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"cvttps2pi\0" "cvttpd2pi\0" "cvttsd2si\0" "cvttss2si", MODRM|VAR_NAME4,PARAM_REGORXMM, PARAM_XMMM, 0 }, {"cvtps2pi\0" "cvtpd2pi\0" "cvtsd2si\0" "cvtss2si", MODRM|VAR_NAME4,PARAM_REGORXMM, PARAM_XMMM, 0 }, {"ucomiss\0" "ucomisd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"comiss\0" "comisd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, // 0x30 {"wrmsr", 0, 0, 0, 0 }, {"rdtsc", 0, 0, 0, 0 }, {"rdmsr", 0, 0, 0, 0 }, {"rdpmc", 0, 0, 0, 0 }, {"sysenter", 0, 0, 0, 0 }, {"sysexit", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"three_byte", THREE_BYTE, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"three_byte", THREE_BYTE, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x40 {"cmovo", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovno", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovb", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovae", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmove", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovne", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovbe", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmova", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovs", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovns", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovpe", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovpo", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovl", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovge", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovle", MODRM, PARAM_REG, PARAM_RM, 0 }, {"cmovg", MODRM, PARAM_REG, PARAM_RM, 0 }, // 0x50 {"movmskps\0" "movmskpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_REG3264, PARAM_XMMM, 0 }, {"sqrtps\0" "sqrtpd\0" "sqrtsd\0" "sqrtss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"rsqrtps\0" "???\0" "???\0" "rsqrtss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"rcpps\0" "???\0" "???\0" "rcpss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"andps\0" "andpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"andnps\0" "andnpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"orps\0" "orpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"xorps\0" "xorpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"addps\0" "addpd\0" "addsd\0" "addss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"mulps\0" "mulpd\0" "mulsd\0" "mulss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"cvtps2pd\0" "cvtpd2ps\0" "cvtsd2ss\0" "cvtss2sd", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"cvtdq2ps\0" "cvtps2dq\0" "???\0" "cvttps2dq", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"subps\0" "subpd\0" "subsd\0" "subss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"minps\0" "minpd\0" "minsd\0" "minss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"divps\0" "divpd\0" "divsd\0" "divss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"maxps\0" "maxpd\0" "maxsd\0" "maxss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, // 0x60 {"punpcklbw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpcklwd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpckldq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"packsswb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpgtb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpgtw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpgtd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"packuswb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpckhbw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpckhwd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"punpckhdq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"packssdw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"???\0" "punpcklqdq\0" "???\0" "???\0", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "punpckhqdq\0" "???\0" "???\0", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"movd", MODRM, PARAM_MMX, PARAM_RM, 0 }, {"movq\0" "movdqa\0" "???\0" "movdqu", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, // 0x70 {"pshufw\0" "pshufd\0" "pshuflw\0" "pshufhw", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, PARAM_UI8 }, {"group0F71", GROUP, 0, 0, 0 }, {"group0F72", GROUP, 0, 0, 0 }, {"group0F73", GROUP, 0, 0, 0 }, {"pcmpeqb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpeqw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pcmpeqd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"emms", 0, 0, 0, 0 }, {"vmread", MODRM, PARAM_RM, PARAM_REG, 0 }, {"vmwrite", MODRM, PARAM_RM, PARAM_REG, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "haddpd\0" "haddps\0" "???", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, {"???\0" "hsubpd\0" "hsubps\0" "???", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, {"movd\0" "movd\0" "???\0" "movq", MODRM|VAR_NAME4,PARAM_RM, PARAM_MMX, 0 }, {"movq\0" "movdqa\0" "???\0" "movdqu", MODRM|VAR_NAME4,PARAM_MMXM, PARAM_MMX, 0 }, // 0x80 {"jo", 0, PARAM_REL, 0, 0 }, {"jno", 0, PARAM_REL, 0, 0 }, {"jb", 0, PARAM_REL, 0, 0 }, {"jae", 0, PARAM_REL, 0, 0 }, {"je", 0, PARAM_REL, 0, 0 }, {"jne", 0, PARAM_REL, 0, 0 }, {"jbe", 0, PARAM_REL, 0, 0 }, {"ja", 0, PARAM_REL, 0, 0 }, {"js", 0, PARAM_REL, 0, 0 }, {"jns", 0, PARAM_REL, 0, 0 }, {"jp", 0, PARAM_REL, 0, 0 }, {"jnp", 0, PARAM_REL, 0, 0 }, {"jl", 0, PARAM_REL, 0, 0 }, {"jge", 0, PARAM_REL, 0, 0 }, {"jle", 0, PARAM_REL, 0, 0 }, {"jg", 0, PARAM_REL, 0, 0 }, // 0x90 {"seto", MODRM, PARAM_RMPTR8, 0, 0 }, {"setno", MODRM, PARAM_RMPTR8, 0, 0 }, {"setb", MODRM, PARAM_RMPTR8, 0, 0 }, {"setae", MODRM, PARAM_RMPTR8, 0, 0 }, {"sete", MODRM, PARAM_RMPTR8, 0, 0 }, {"setne", MODRM, PARAM_RMPTR8, 0, 0 }, {"setbe", MODRM, PARAM_RMPTR8, 0, 0 }, {"seta", MODRM, PARAM_RMPTR8, 0, 0 }, {"sets", MODRM, PARAM_RMPTR8, 0, 0 }, {"setns", MODRM, PARAM_RMPTR8, 0, 0 }, {"setp", MODRM, PARAM_RMPTR8, 0, 0 }, {"setnp", MODRM, PARAM_RMPTR8, 0, 0 }, {"setl", MODRM, PARAM_RMPTR8, 0, 0 }, {"setge", MODRM, PARAM_RMPTR8, 0, 0 }, {"setle", MODRM, PARAM_RMPTR8, 0, 0 }, {"setg", MODRM, PARAM_RMPTR8, 0, 0 }, // 0xa0 {"push fs", 0, 0, 0, 0 }, {"pop fs", 0, 0, 0, 0 }, {"cpuid", 0, 0, 0, 0 }, {"bt", MODRM, PARAM_RM, PARAM_REG, 0 }, {"shld", MODRM, PARAM_RM, PARAM_REG, PARAM_UI8 }, {"shld", MODRM, PARAM_RM, PARAM_REG, PARAM_CL }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"push gs", 0, 0, 0, 0 }, {"pop gs", 0, 0, 0, 0 }, {"rsm", 0, 0, 0, 0 }, {"bts", MODRM, PARAM_RM, PARAM_REG, 0 }, {"shrd", MODRM, PARAM_RM, PARAM_REG, PARAM_UI8 }, {"shrd", MODRM, PARAM_RM, PARAM_REG, PARAM_CL }, {"group0FAE", GROUP, 0, 0, 0 }, {"imul", MODRM, PARAM_REG, PARAM_RM, 0 }, // 0xb0 {"cmpxchg", MODRM, PARAM_RM8, PARAM_REG, 0 }, {"cmpxchg", MODRM, PARAM_RM, PARAM_REG, 0 }, {"lss", MODRM, PARAM_REG, PARAM_RM, 0 }, {"btr", MODRM, PARAM_RM, PARAM_REG, 0 }, {"lfs", MODRM, PARAM_REG, PARAM_RM, 0 }, {"lgs", MODRM, PARAM_REG, PARAM_RM, 0 }, {"movzx", MODRM, PARAM_REG, PARAM_RMPTR8, 0 }, {"movzx", MODRM, PARAM_REG, PARAM_RMPTR16, 0 }, {"???\0" "???\0" "???\0" "popcnt", MODRM|VAR_NAME4, PARAM_REG, PARAM_RM16, 0 }, {"ud2", 0, 0, 0, 0 }, {"group0FBA", GROUP, 0, 0, 0 }, {"btc", MODRM, PARAM_RM, PARAM_REG, 0 }, {"bsf\0" "???\0" "???\0" "tzcnt", MODRM|VAR_NAME4, PARAM_REG, PARAM_RM, 0 }, {"bsr\0" "???\0" "???\0" "lzcnt", MODRM|VAR_NAME4, PARAM_REG, PARAM_RM, 0, DASMFLAG_STEP_OVER}, {"movsx", MODRM, PARAM_REG, PARAM_RMPTR8, 0 }, {"movsx", MODRM, PARAM_REG, PARAM_RMPTR16, 0 }, // 0xc0 {"xadd", MODRM, PARAM_RM8, PARAM_REG, 0 }, {"xadd", MODRM, PARAM_RM, PARAM_REG, 0 }, {"cmpps\0" "cmppd\0" "cmpsd\0" "cmpss", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movnti", MODRM, PARAM_RM, PARAM_REG, 0 }, {"pinsrw", MODRM, PARAM_MMX, PARAM_RM, PARAM_UI8 }, {"pextrw", MODRM, PARAM_MMX, PARAM_RM, PARAM_UI8 }, {"shufps\0" "shufpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"group0FC7", GROUP, 0, 0, 0 }, {"bswap", 0, PARAM_EAX, 0, 0 }, {"bswap", 0, PARAM_ECX, 0, 0 }, {"bswap", 0, PARAM_EDX, 0, 0 }, {"bswap", 0, PARAM_EBX, 0, 0 }, {"bswap", 0, PARAM_ESP, 0, 0 }, {"bswap", 0, PARAM_EBP, 0, 0 }, {"bswap", 0, PARAM_ESI, 0, 0 }, {"bswap", 0, PARAM_EDI, 0, 0 }, // 0xd0 {"???\0" "addsubpd\0" "addsubps\0" "???\0", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"psrlw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psrld", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psrlq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmullw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"???\0" "movq\0" "movdq2q\0" "movq2dq", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, {"pmovmskb", MODRM, PARAM_REG3264, PARAM_MMXM, 0 }, {"psubusb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubusw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pminub", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pand", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddusb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddusw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmaxub", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pandn", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, // 0xe0 {"pavgb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psraw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psrad", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pavgw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmulhuw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmulhw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"???\0" "cvttpd2dq\0" "cvtpd2dq\0" "cvtdq2pd", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"movntq\0" "movntdq\0" "???\0" "???\0", MODRM|VAR_NAME4, PARAM_M64, PARAM_MMX, 0 }, {"psubsb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubsw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pminsw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"por", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddsb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddsw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmaxsw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pxor", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, // 0xf0 {"???\0" "???\0" "lddqu\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, {"psllw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pslld", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psllq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmuludq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"pmaddwd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psadbw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"maskmovq\0" "maskmovdqu\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_MMX, PARAM_MMXM, 0 }, {"psubb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"psubq", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddb", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddw", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"paddd", MODRM, PARAM_MMX, PARAM_MMXM, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE i386_opcode_table0F38[256] = { // 0x00 {"pshufb\0" "pshufb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phaddw\0" "phaddw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phaddd\0" "phadd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phaddsw\0" "phaddsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"pmaddubsw\0" "pmaddubsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phsubw\0" "phsubw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phsubd\0" "phsubd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"phsubsw\0" "phsubsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"psignb\0" "psignb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"psignw\0" "psignw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"psignd\0" "psignd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"pmulhrsw\0" "pmulhrsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x10 {"???\0" "pblendvb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_XMM0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "blendvps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_XMM0 }, {"???\0" "blendvpd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_XMM0 }, {"???", 0, 0, 0, 0 }, {"???\0" "ptest\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"pabsb\0" "pabsb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"pabsw\0" "pabsw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"pabsd\0" "pabsd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, // 0x20 {"???\0" "pmovsxbw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???\0" "pmovsxbd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM32, 0 }, {"???\0" "pmovsxbq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM16, 0 }, {"???\0" "pmovsxwd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???\0" "pmovsxwq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM32, 0 }, {"???\0" "pmovsxdq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "pmuldq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pcmpeqq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "movntdqa\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "packusdw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x30 {"???\0" "pmovzxbw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???\0" "pmovzxbd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM32, 0 }, {"???\0" "pmovzxbq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM16, 0 }, {"???\0" "pmovzxwd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???\0" "pmovzxwq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM32, 0 }, {"???\0" "pmovzxdq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMM64, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "pcmpgtq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pminsb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pminsd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pminuw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pminud\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pmaxsb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pmaxsd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pmaxuw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "pmaxud\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, // 0x40 {"???\0" "pmulld\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "phminposuw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x50 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x60 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x70 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x80 {"???\0" "invept\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_REG32, PARAM_XMMM, 0 }, {"???\0" "invvpid\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_REG32, PARAM_XMMM, 0 }, {"???\0" "invpcid\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_REG32, PARAM_XMMM, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x90 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xa0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xb0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xc0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xd0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "aesimc\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "aesenc\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "aesenclast\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "aesdec\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, {"???\0" "aesdeclast\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, 0 }, // 0xe0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xf0 {"movbe\0" "???\0" "crc32\0" "???", MODRM|VAR_NAME4, PARAM_REG32, PARAM_RMPTR, 0 }, // not quite correct {"movbe\0" "???\0" "crc32\0" "???", MODRM|VAR_NAME4, PARAM_RMPTR, PARAM_REG32, 0 }, // not quite correct {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, }; static const I386_OPCODE i386_opcode_table0F3A[256] = { // 0x00 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "roundps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "roundpd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "roundss\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "roundsd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "blendps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "blendpd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "pblendw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"palignr\0" "palignr\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, // 0x10 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "pextrb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_RM8, PARAM_XMM, PARAM_UI8 }, {"???\0" "pextrw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_RM16, PARAM_XMM, PARAM_UI8 }, {"???\0" "pextrd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_RM8, PARAM_XMM, PARAM_UI8 }, {"???\0" "extractps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_RM32, PARAM_XMM, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x20 {"???\0" "pinsrb\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_RM8, PARAM_UI8 }, {"???\0" "insertps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_RM8, PARAM_UI8 }, {"???\0" "pinsrd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_RM32, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x30 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x40 {"???\0" "dpps\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "dppd\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "mpsadbw\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???\0" "pclmulqdq\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x50 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x60 {"???\0" "pcmestrm\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "pcmestri\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "pcmistrm\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???\0" "pcmistri\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x70 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x80 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0x90 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xa0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xb0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xc0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xd0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???\0" "aeskeygenassist\0" "???\0" "???", MODRM|VAR_NAME4, PARAM_XMM, PARAM_XMMM, PARAM_UI8 }, // 0xe0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, // 0xf0 {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, }; static const I386_OPCODE group80_table[8] = { {"add", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"or", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"adc", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"sbb", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"and", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"sub", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"xor", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"cmp", 0, PARAM_RMPTR8, PARAM_UI8, 0 } }; static const I386_OPCODE group81_table[8] = { {"add", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"or", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"adc", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"sbb", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"and", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"sub", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"xor", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"cmp", 0, PARAM_RMPTR, PARAM_IMM, 0 } }; static const I386_OPCODE group83_table[8] = { {"add", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"or", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"adc", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"sbb", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"and", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"sub", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"xor", 0, PARAM_RMPTR, PARAM_I8, 0 }, {"cmp", 0, PARAM_RMPTR, PARAM_I8, 0 } }; static const I386_OPCODE groupC0_table[8] = { {"rol", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"ror", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"rcl", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"rcr", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"shl", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"shr", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"sal", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"sar", 0, PARAM_RMPTR8, PARAM_UI8, 0 } }; static const I386_OPCODE groupC1_table[8] = { {"rol", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"ror", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"rcl", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"rcr", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"shl", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"shr", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"sal", 0, PARAM_RMPTR, PARAM_UI8, 0 }, {"sar", 0, PARAM_RMPTR, PARAM_UI8, 0 } }; static const I386_OPCODE groupD0_table[8] = { {"rol", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"ror", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"rcl", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"rcr", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"shl", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"shr", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"sal", 0, PARAM_RMPTR8, PARAM_1, 0 }, {"sar", 0, PARAM_RMPTR8, PARAM_1, 0 } }; static const I386_OPCODE groupD1_table[8] = { {"rol", 0, PARAM_RMPTR, PARAM_1, 0 }, {"ror", 0, PARAM_RMPTR, PARAM_1, 0 }, {"rcl", 0, PARAM_RMPTR, PARAM_1, 0 }, {"rcr", 0, PARAM_RMPTR, PARAM_1, 0 }, {"shl", 0, PARAM_RMPTR, PARAM_1, 0 }, {"shr", 0, PARAM_RMPTR, PARAM_1, 0 }, {"sal", 0, PARAM_RMPTR, PARAM_1, 0 }, {"sar", 0, PARAM_RMPTR, PARAM_1, 0 } }; static const I386_OPCODE groupD2_table[8] = { {"rol", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"ror", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"rcl", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"rcr", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"shl", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"shr", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"sal", 0, PARAM_RMPTR8, PARAM_CL, 0 }, {"sar", 0, PARAM_RMPTR8, PARAM_CL, 0 } }; static const I386_OPCODE groupD3_table[8] = { {"rol", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"ror", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"rcl", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"rcr", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"shl", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"shr", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"sal", 0, PARAM_RMPTR, PARAM_CL, 0 }, {"sar", 0, PARAM_RMPTR, PARAM_CL, 0 } }; static const I386_OPCODE groupF6_table[8] = { {"test", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"test", 0, PARAM_RMPTR8, PARAM_UI8, 0 }, {"not", 0, PARAM_RMPTR8, 0, 0 }, {"neg", 0, PARAM_RMPTR8, 0, 0 }, {"mul", 0, PARAM_RMPTR8, 0, 0 }, {"imul", 0, PARAM_RMPTR8, 0, 0 }, {"div", 0, PARAM_RMPTR8, 0, 0 }, {"idiv", 0, PARAM_RMPTR8, 0, 0 } }; static const I386_OPCODE groupF7_table[8] = { {"test", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"test", 0, PARAM_RMPTR, PARAM_IMM, 0 }, {"not", 0, PARAM_RMPTR, 0, 0 }, {"neg", 0, PARAM_RMPTR, 0, 0 }, {"mul", 0, PARAM_RMPTR, 0, 0 }, {"imul", 0, PARAM_RMPTR, 0, 0 }, {"div", 0, PARAM_RMPTR, 0, 0 }, {"idiv", 0, PARAM_RMPTR, 0, 0 } }; static const I386_OPCODE groupFE_table[8] = { {"inc", 0, PARAM_RMPTR8, 0, 0 }, {"dec", 0, PARAM_RMPTR8, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE groupFF_table[8] = { {"inc", 0, PARAM_RMPTR, 0, 0 }, {"dec", 0, PARAM_RMPTR, 0, 0 }, {"call", ALWAYS64, PARAM_RMPTR, 0, 0, DASMFLAG_STEP_OVER}, {"call far ptr ",0, PARAM_RM, 0, 0, DASMFLAG_STEP_OVER}, {"jmp", ALWAYS64, PARAM_RMPTR, 0, 0 }, {"jmp far ptr ",0, PARAM_RM, 0, 0 }, {"push", 0, PARAM_RMPTR, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F00_table[8] = { {"sldt", 0, PARAM_RM, 0, 0 }, {"str", 0, PARAM_RM, 0, 0 }, {"lldt", 0, PARAM_RM, 0, 0 }, {"ltr", 0, PARAM_RM, 0, 0 }, {"verr", 0, PARAM_RM, 0, 0 }, {"verw", 0, PARAM_RM, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F01_table[8] = { {"sgdt", 0, PARAM_RM, 0, 0 }, {"sidt", 0, PARAM_RM, 0, 0 }, {"lgdt", 0, PARAM_RM, 0, 0 }, {"lidt", 0, PARAM_RM, 0, 0 }, {"smsw", 0, PARAM_RM, 0, 0 }, {"???", 0, 0, 0, 0 }, {"lmsw", 0, PARAM_RM, 0, 0 }, {"invlpg", 0, PARAM_RM, 0, 0 } }; static const I386_OPCODE group0F0D_table[8] = { {"prefetch", 0, PARAM_RM8, 0, 0 }, {"prefetchw", 0, PARAM_RM8, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F18_table[8] = { {"prefetchnta", 0, PARAM_RM8, 0, 0 }, {"prefetch0", 0, PARAM_RM8, 0, 0 }, {"prefetch1", 0, PARAM_RM8, 0, 0 }, {"prefetch2", 0, PARAM_RM8, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F71_table[8] = { {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"psrlw", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"psraw", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"psllw", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F72_table[8] = { {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"psrld", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"psrad", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"pslld", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 } }; static const I386_OPCODE group0F73_table[8] = { {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"psrlq", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"psrldq", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"psllq", 0, PARAM_MMX2, PARAM_UI8, 0 }, {"pslldq", 0, PARAM_MMX2, PARAM_UI8, 0 }, }; static const I386_OPCODE group0FAE_table[8] = { {"fxsave", 0, PARAM_RM, 0, 0 }, {"fxrstor", 0, PARAM_RM, 0, 0 }, {"ldmxcsr", 0, PARAM_RM, 0, 0 }, {"stmxscr", 0, PARAM_RM, 0, 0 }, {"???", 0, 0, 0, 0 }, {"lfence", 0, 0, 0, 0 }, {"mfence", 0, 0, 0, 0 }, {"sfence", 0, 0, 0, 0 } }; static const I386_OPCODE group0FBA_table[8] = { {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"bt", 0, PARAM_RM, PARAM_UI8, 0 }, {"bts", 0, PARAM_RM, PARAM_UI8, 0 }, {"btr", 0, PARAM_RM, PARAM_UI8, 0 }, {"btc", 0, PARAM_RM, PARAM_UI8, 0 } }; static const I386_OPCODE group0FC7_table[8] = { {"???", 0, 0, 0, 0 }, {"cmpxchg8b", MODRM, PARAM_M64PTR, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, {"vmptrld\0" "vmclear\0" "???\0" "vmxon", MODRM|VAR_NAME4, PARAM_M64PTR, 0, 0 }, {"vmptrtst", MODRM, PARAM_M64PTR, 0, 0 } }; static const GROUP_OP group_op_table[] = { { "group80", group80_table }, { "group81", group81_table }, { "group83", group83_table }, { "groupC0", groupC0_table }, { "groupC1", groupC1_table }, { "groupD0", groupD0_table }, { "groupD1", groupD1_table }, { "groupD2", groupD2_table }, { "groupD3", groupD3_table }, { "groupF6", groupF6_table }, { "groupF7", groupF7_table }, { "groupFE", groupFE_table }, { "groupFF", groupFF_table }, { "group0F00", group0F00_table }, { "group0F01", group0F01_table }, { "group0F0D", group0F0D_table }, { "group0F18", group0F18_table }, { "group0F71", group0F71_table }, { "group0F72", group0F72_table }, { "group0F73", group0F73_table }, { "group0FAE", group0FAE_table }, { "group0FBA", group0FBA_table }, { "group0FC7", group0FC7_table } }; static const char *const i386_reg[3][16] = { {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "r8w", "r9w", "r10w","r11w","r12w","r13w","r14w","r15w"}, {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "r8d", "r9d", "r10d","r11d","r12d","r13d","r14d","r15d"}, {"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"} }; static const char *const i386_reg8[8] = {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}; static const char *const i386_reg8rex[16] = {"al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil", "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l"}; static const char *const i386_sreg[8] = {"es", "cs", "ss", "ds", "fs", "gs", "???", "???"}; static int address_size; static int operand_size; static int address_prefix; static int operand_prefix; static int max_length; static UINT64 pc; static UINT8 modrm; static UINT32 segment; static offs_t dasm_flags; static char modrm_string[256]; static UINT8 rex, regex, sibex, rmex; static UINT8 pre0f; static UINT8 curmode; #define MODRM_REG1 ((modrm >> 3) & 0x7) #define MODRM_REG2 (modrm & 0x7) INLINE UINT8 _FETCH(void) { if ((opcode_ptr - opcode_ptr_base) + 1 > max_length) return 0xff; pc++; return *opcode_ptr++; } INLINE UINT16 _FETCH16(void) { UINT16 d; if ((opcode_ptr - opcode_ptr_base) + 2 > max_length) return 0xffff; d = opcode_ptr[0] | (opcode_ptr[1] << 8); opcode_ptr += 2; pc += 2; return d; } INLINE UINT32 _FETCH32(void) { UINT32 d; if ((opcode_ptr - opcode_ptr_base) + 4 > max_length) return 0xffffffff; d = opcode_ptr[0] | (opcode_ptr[1] << 8) | (opcode_ptr[2] << 16) | (opcode_ptr[3] << 24); opcode_ptr += 4; pc += 4; return d; } INLINE UINT8 _FETCHD(void) { if ((opcode_ptr - opcode_ptr_base) + 1 > max_length) return 0xff; pc++; return *opcode_ptr++; } INLINE UINT16 _FETCHD16(void) { UINT16 d; if ((opcode_ptr - opcode_ptr_base) + 2 > max_length) return 0xffff; d = opcode_ptr[0] | (opcode_ptr[1] << 8); opcode_ptr += 2; pc += 2; return d; } INLINE UINT32 _FETCHD32(void) { UINT32 d; if ((opcode_ptr - opcode_ptr_base) + 4 > max_length) return 0xffffffff; d = opcode_ptr[0] | (opcode_ptr[1] << 8) | (opcode_ptr[2] << 16) | (opcode_ptr[3] << 24); opcode_ptr += 4; pc += 4; return d; } static char *hexstring(UINT32 value, int digits) { static char buffer[20]; buffer[0] = '0'; if (digits) sprintf(&buffer[1], "%0*Xh", digits, value); else sprintf(&buffer[1], "%Xh", value); return (buffer[1] >= '0' && buffer[1] <= '9') ? &buffer[1] : &buffer[0]; } static char *hexstring64(UINT32 lo, UINT32 hi) { static char buffer[40]; buffer[0] = '0'; if (hi != 0) sprintf(&buffer[1], "%X%08Xh", hi, lo); else sprintf(&buffer[1], "%Xh", lo); return (buffer[1] >= '0' && buffer[1] <= '9') ? &buffer[1] : &buffer[0]; } static char *hexstringpc(UINT64 pc) { if (curmode == 64) return hexstring64((UINT32)pc, (UINT32)(pc >> 32)); else return hexstring((UINT32)pc, 0); } static char *shexstring(UINT32 value, int digits, int always) { static char buffer[20]; if (value >= 0x80000000) sprintf(buffer, "-%s", hexstring(-value, digits)); else if (always) sprintf(buffer, "+%s", hexstring(value, digits)); else return hexstring(value, digits); return buffer; } static char* handle_sib_byte( char* s, UINT8 mod ) { UINT32 i32; UINT8 scale, i, base; UINT8 sib = _FETCHD(); scale = (sib >> 6) & 0x3; i = ((sib >> 3) & 0x7) | sibex; base = (sib & 0x7) | rmex; if (base == 5 && mod == 0) { i32 = _FETCH32(); s += sprintf( s, "%s", hexstring(i32, 0) ); } else if (base != 5 || mod != 3) s += sprintf( s, "%s", i386_reg[address_size][base] ); if ( i != 4 ) { s += sprintf( s, "+%s", i386_reg[address_size][i] ); if (scale) s += sprintf( s, "*%d", 1 << scale ); } return s; } static void handle_modrm(char* s) { INT8 disp8; INT16 disp16; INT32 disp32; UINT8 mod, rm; modrm = _FETCHD(); mod = (modrm >> 6) & 0x3; rm = (modrm & 0x7) | rmex; if( modrm >= 0xc0 ) return; switch(segment) { case SEG_CS: s += sprintf( s, "cs:" ); break; case SEG_DS: s += sprintf( s, "ds:" ); break; case SEG_ES: s += sprintf( s, "es:" ); break; case SEG_FS: s += sprintf( s, "fs:" ); break; case SEG_GS: s += sprintf( s, "gs:" ); break; case SEG_SS: s += sprintf( s, "ss:" ); break; } s += sprintf( s, "[" ); if( address_size == 2 ) { if ((rm & 7) == 4) s = handle_sib_byte( s, mod ); else if ((rm & 7) == 5 && mod == 0) { disp32 = _FETCHD32(); s += sprintf( s, "rip%s", shexstring(disp32, 0, TRUE) ); } else s += sprintf( s, "%s", i386_reg[2][rm]); if( mod == 1 ) { disp8 = _FETCHD(); if (disp8 != 0) s += sprintf( s, "%s", shexstring((INT32)disp8, 0, TRUE) ); } else if( mod == 2 ) { disp32 = _FETCHD32(); if (disp32 != 0) s += sprintf( s, "%s", shexstring(disp32, 0, TRUE) ); } } else if (address_size == 1) { if ((rm & 7) == 4) s = handle_sib_byte( s, mod ); else if ((rm & 7) == 5 && mod == 0) { disp32 = _FETCHD32(); if (curmode == 64) s += sprintf( s, "eip%s", shexstring(disp32, 0, TRUE) ); else s += sprintf( s, "%s", hexstring(disp32, 0) ); } else s += sprintf( s, "%s", i386_reg[1][rm]); if( mod == 1 ) { disp8 = _FETCHD(); if (disp8 != 0) s += sprintf( s, "%s", shexstring((INT32)disp8, 0, TRUE) ); } else if( mod == 2 ) { disp32 = _FETCHD32(); if (disp32 != 0) s += sprintf( s, "%s", shexstring(disp32, 0, TRUE) ); } } else { switch( rm ) { case 0: s += sprintf( s, "bx+si" ); break; case 1: s += sprintf( s, "bx+di" ); break; case 2: s += sprintf( s, "bp+si" ); break; case 3: s += sprintf( s, "bp+di" ); break; case 4: s += sprintf( s, "si" ); break; case 5: s += sprintf( s, "di" ); break; case 6: if( mod == 0 ) { disp16 = _FETCHD16(); s += sprintf( s, "%s", hexstring((unsigned) (UINT16) disp16, 0) ); } else { s += sprintf( s, "bp" ); } break; case 7: s += sprintf( s, "bx" ); break; } if( mod == 1 ) { disp8 = _FETCHD(); if (disp8 != 0) s += sprintf( s, "%s", shexstring((INT32)disp8, 0, TRUE) ); } else if( mod == 2 ) { disp16 = _FETCHD16(); if (disp16 != 0) s += sprintf( s, "%s", shexstring((INT32)disp16, 0, TRUE) ); } } s += sprintf( s, "]" ); } static char* handle_param(char* s, UINT32 param) { UINT8 i8; UINT16 i16; UINT32 i32; UINT16 ptr; UINT32 addr; INT8 d8; INT16 d16; INT32 d32; switch(param) { case PARAM_REG: s += sprintf( s, "%s", i386_reg[operand_size][MODRM_REG1 | regex] ); break; case PARAM_REG8: s += sprintf( s, "%s", (rex ? i386_reg8rex : i386_reg8)[MODRM_REG1 | regex] ); break; case PARAM_REG16: s += sprintf( s, "%s", i386_reg[0][MODRM_REG1 | regex] ); break; case PARAM_REG32: s += sprintf( s, "%s", i386_reg[1][MODRM_REG1 | regex] ); break; case PARAM_REG3264: s += sprintf( s, "%s", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG1 | regex] ); break; case PARAM_MMX: if (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3) s += sprintf( s, "xmm%d", MODRM_REG1 | regex ); else s += sprintf( s, "mm%d", MODRM_REG1 | regex ); break; case PARAM_MMX2: if (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3) s += sprintf( s, "xmm%d", MODRM_REG2 | regex ); else s += sprintf( s, "mm%d", MODRM_REG2 | regex ); break; case PARAM_XMM: s += sprintf( s, "xmm%d", MODRM_REG1 | regex ); break; case PARAM_REGORXMM: if (pre0f != 0xf2 && pre0f != 0xf3) s += sprintf( s, "xmm%d", MODRM_REG1 | regex ); else s += sprintf( s, "%s", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG1 | regex] ); break; case PARAM_REG2_32: s += sprintf( s, "%s", i386_reg[1][MODRM_REG2 | rmex] ); break; case PARAM_RM: case PARAM_RMPTR: if( modrm >= 0xc0 ) { s += sprintf( s, "%s", i386_reg[operand_size][MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR) { if( operand_size == 2 ) s += sprintf( s, "qword ptr " ); else if (operand_size == 1) s += sprintf( s, "dword ptr " ); else s += sprintf( s, "word ptr " ); } s += sprintf( s, "%s", modrm_string ); } break; case PARAM_RM8: case PARAM_RMPTR8: if( modrm >= 0xc0 ) { s += sprintf( s, "%s", (rex ? i386_reg8rex : i386_reg8)[MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR8) s += sprintf( s, "byte ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_RM16: case PARAM_RMPTR16: if( modrm >= 0xc0 ) { s += sprintf( s, "%s", i386_reg[0][MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR16) s += sprintf( s, "word ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_RM32: case PARAM_RMPTR32: if( modrm >= 0xc0 ) { s += sprintf( s, "%s", i386_reg[1][MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR32) s += sprintf( s, "dword ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_RMXMM: if( modrm >= 0xc0 ) { if (pre0f != 0xf2 && pre0f != 0xf3) s += sprintf( s, "xmm%d", MODRM_REG2 | rmex ); else s += sprintf( s, "%s", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG2 | rmex] ); } else { if (param == PARAM_RMPTR32) s += sprintf( s, "dword ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_M64: case PARAM_M64PTR: if( modrm >= 0xc0 ) { s += sprintf( s, "???" ); } else { if (param == PARAM_M64PTR) s += sprintf( s, "qword ptr " ); s += sprintf( s, "%s", modrm_string ); } break; case PARAM_MMXM: if( modrm >= 0xc0 ) { if (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3) s += sprintf( s, "xmm%d", MODRM_REG2 | rmex ); else s += sprintf( s, "mm%d", MODRM_REG2 | rmex ); } else { s += sprintf( s, "%s", modrm_string ); } break; case PARAM_XMMM: if( modrm >= 0xc0 ) { s += sprintf( s, "xmm%d", MODRM_REG2 | rmex ); } else { s += sprintf( s, "%s", modrm_string ); } break; case PARAM_I4: i8 = _FETCHD(); s += sprintf( s, "%d", i8 & 0x0f ); break; case PARAM_I8: i8 = _FETCHD(); s += sprintf( s, "%s", shexstring((INT8)i8, 0, FALSE) ); break; case PARAM_I16: i16 = _FETCHD16(); s += sprintf( s, "%s", shexstring((INT16)i16, 0, FALSE) ); break; case PARAM_UI8: i8 = _FETCHD(); s += sprintf( s, "%s", shexstring((UINT8)i8, 0, FALSE) ); break; case PARAM_UI16: i16 = _FETCHD16(); s += sprintf( s, "%s", shexstring((UINT16)i16, 0, FALSE) ); break; case PARAM_IMM64: if (operand_size == 2) { UINT32 lo32 = _FETCHD32(); i32 = _FETCHD32(); s += sprintf( s, "%s", hexstring64(lo32, i32) ); } else if( operand_size ) { i32 = _FETCHD32(); s += sprintf( s, "%s", hexstring(i32, 0) ); } else { i16 = _FETCHD16(); s += sprintf( s, "%s", hexstring(i16, 0) ); } break; case PARAM_IMM: if( operand_size ) { i32 = _FETCHD32(); s += sprintf( s, "%s", hexstring(i32, 0) ); } else { i16 = _FETCHD16(); s += sprintf( s, "%s", hexstring(i16, 0) ); } break; case PARAM_ADDR: if( operand_size ) { addr = _FETCHD32(); ptr = _FETCHD16(); s += sprintf( s, "%s:", hexstring(ptr, 4) ); s += sprintf( s, "%s", hexstring(addr, 0) ); } else { addr = _FETCHD16(); ptr = _FETCHD16(); s += sprintf( s, "%s:", hexstring(ptr, 4) ); s += sprintf( s, "%s", hexstring(addr, 0) ); } break; case PARAM_REL: if( operand_size ) { d32 = _FETCHD32(); s += sprintf( s, "%s", hexstringpc(pc + d32) ); } else { /* make sure to keep the relative offset within the segment */ d16 = _FETCHD16(); s += sprintf( s, "%s", hexstringpc((pc & 0xFFFF0000) | ((pc + d16) & 0x0000FFFF)) ); } break; case PARAM_REL8: d8 = _FETCHD(); s += sprintf( s, "%s", hexstringpc(pc + d8) ); break; case PARAM_MEM_OFFS: switch(segment) { case SEG_CS: s += sprintf( s, "cs:" ); break; case SEG_DS: s += sprintf( s, "ds:" ); break; case SEG_ES: s += sprintf( s, "es:" ); break; case SEG_FS: s += sprintf( s, "fs:" ); break; case SEG_GS: s += sprintf( s, "gs:" ); break; case SEG_SS: s += sprintf( s, "ss:" ); break; } if( address_size ) { i32 = _FETCHD32(); s += sprintf( s, "[%s]", hexstring(i32, 0) ); } else { i16 = _FETCHD16(); s += sprintf( s, "[%s]", hexstring(i16, 0) ); } break; case PARAM_PREIMP: switch(segment) { case SEG_CS: s += sprintf( s, "cs:" ); break; case SEG_DS: s += sprintf( s, "ds:" ); break; case SEG_ES: s += sprintf( s, "es:" ); break; case SEG_FS: s += sprintf( s, "fs:" ); break; case SEG_GS: s += sprintf( s, "gs:" ); break; case SEG_SS: s += sprintf( s, "ss:" ); break; } break; case PARAM_SREG: s += sprintf( s, "%s", i386_sreg[MODRM_REG1] ); break; case PARAM_CREG: s += sprintf( s, "cr%d", MODRM_REG1 | regex ); break; case PARAM_TREG: s += sprintf( s, "tr%d", MODRM_REG1 | regex ); break; case PARAM_DREG: s += sprintf( s, "dr%d", MODRM_REG1 | regex ); break; case PARAM_1: s += sprintf( s, "1" ); break; case PARAM_DX: s += sprintf( s, "dx" ); break; case PARAM_XMM0: s += sprintf( s, "xmm0" ); break; case PARAM_AL: s += sprintf( s, "al" ); break; case PARAM_CL: s += sprintf( s, "cl" ); break; case PARAM_DL: s += sprintf( s, "dl" ); break; case PARAM_BL: s += sprintf( s, "bl" ); break; case PARAM_AH: s += sprintf( s, "ah" ); break; case PARAM_CH: s += sprintf( s, "ch" ); break; case PARAM_DH: s += sprintf( s, "dh" ); break; case PARAM_BH: s += sprintf( s, "bh" ); break; case PARAM_EAX: s += sprintf( s, "%s", i386_reg[operand_size][0 | rmex] ); break; case PARAM_ECX: s += sprintf( s, "%s", i386_reg[operand_size][1 | rmex] ); break; case PARAM_EDX: s += sprintf( s, "%s", i386_reg[operand_size][2 | rmex] ); break; case PARAM_EBX: s += sprintf( s, "%s", i386_reg[operand_size][3 | rmex] ); break; case PARAM_ESP: s += sprintf( s, "%s", i386_reg[operand_size][4 | rmex] ); break; case PARAM_EBP: s += sprintf( s, "%s", i386_reg[operand_size][5 | rmex] ); break; case PARAM_ESI: s += sprintf( s, "%s", i386_reg[operand_size][6 | rmex] ); break; case PARAM_EDI: s += sprintf( s, "%s", i386_reg[operand_size][7 | rmex] ); break; } return s; } static void handle_fpu(char *s, UINT8 op1, UINT8 op2) { switch (op1 & 0x7) { case 0: // Group D8 { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fadd dword ptr %s", modrm_string); break; case 1: sprintf(s, "fmul dword ptr %s", modrm_string); break; case 2: sprintf(s, "fcom dword ptr %s", modrm_string); break; case 3: sprintf(s, "fcomp dword ptr %s", modrm_string); break; case 4: sprintf(s, "fsub dword ptr %s", modrm_string); break; case 5: sprintf(s, "fsubr dword ptr %s", modrm_string); break; case 6: sprintf(s, "fdiv dword ptr %s", modrm_string); break; case 7: sprintf(s, "fdivr dword ptr %s", modrm_string); break; } } else { switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fadd st(0),st(%d)", op2 & 0x7); break; case 1: sprintf(s, "fmul st(0),st(%d)", op2 & 0x7); break; case 2: sprintf(s, "fcom st(0),st(%d)", op2 & 0x7); break; case 3: sprintf(s, "fcomp st(0),st(%d)", op2 & 0x7); break; case 4: sprintf(s, "fsub st(0),st(%d)", op2 & 0x7); break; case 5: sprintf(s, "fsubr st(0),st(%d)", op2 & 0x7); break; case 6: sprintf(s, "fdiv st(0),st(%d)", op2 & 0x7); break; case 7: sprintf(s, "fdivr st(0),st(%d)", op2 & 0x7); break; } } break; } case 1: // Group D9 { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fld dword ptr %s", modrm_string); break; case 1: sprintf(s, "??? (FPU)"); break; case 2: sprintf(s, "fst dword ptr %s", modrm_string); break; case 3: sprintf(s, "fstp dword ptr %s", modrm_string); break; case 4: sprintf(s, "fldenv word ptr %s", modrm_string); break; case 5: sprintf(s, "fldcw word ptr %s", modrm_string); break; case 6: sprintf(s, "fstenv word ptr %s", modrm_string); break; case 7: sprintf(s, "fstcw word ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "fld st(0),st(%d)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fxch st(0),st(%d)", op2 & 0x7); break; case 0x10: sprintf(s, "fnop"); break; case 0x20: sprintf(s, "fchs"); break; case 0x21: sprintf(s, "fabs"); break; case 0x24: sprintf(s, "ftst"); break; case 0x25: sprintf(s, "fxam"); break; case 0x28: sprintf(s, "fld1"); break; case 0x29: sprintf(s, "fldl2t"); break; case 0x2a: sprintf(s, "fldl2e"); break; case 0x2b: sprintf(s, "fldpi"); break; case 0x2c: sprintf(s, "fldlg2"); break; case 0x2d: sprintf(s, "fldln2"); break; case 0x2e: sprintf(s, "fldz"); break; case 0x30: sprintf(s, "f2xm1"); break; case 0x31: sprintf(s, "fyl2x"); break; case 0x32: sprintf(s, "fptan"); break; case 0x33: sprintf(s, "fpatan"); break; case 0x34: sprintf(s, "fxtract"); break; case 0x35: sprintf(s, "fprem1"); break; case 0x36: sprintf(s, "fdecstp"); break; case 0x37: sprintf(s, "fincstp"); break; case 0x38: sprintf(s, "fprem"); break; case 0x39: sprintf(s, "fyl2xp1"); break; case 0x3a: sprintf(s, "fsqrt"); break; case 0x3b: sprintf(s, "fsincos"); break; case 0x3c: sprintf(s, "frndint"); break; case 0x3d: sprintf(s, "fscale"); break; case 0x3e: sprintf(s, "fsin"); break; case 0x3f: sprintf(s, "fcos"); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 2: // Group DA { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fiadd dword ptr %s", modrm_string); break; case 1: sprintf(s, "fimul dword ptr %s", modrm_string); break; case 2: sprintf(s, "ficom dword ptr %s", modrm_string); break; case 3: sprintf(s, "ficomp dword ptr %s", modrm_string); break; case 4: sprintf(s, "fisub dword ptr %s", modrm_string); break; case 5: sprintf(s, "fisubr dword ptr %s", modrm_string); break; case 6: sprintf(s, "fidiv dword ptr %s", modrm_string); break; case 7: sprintf(s, "fidivr dword ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "fcmovb st(0),st(%d)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fcmove st(0),st(%d)", op2 & 0x7); break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: sprintf(s, "fcmovbe st(0),st(%d)", op2 & 0x7); break; case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: sprintf(s, "fcmovu st(0),st(%d)", op2 & 0x7); break; case 0x29: sprintf(s, "fucompp"); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 3: // Group DB { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fild dword ptr %s", modrm_string); break; case 1: sprintf(s, "fisttp dword ptr %s", modrm_string); break; case 2: sprintf(s, "fist dword ptr %s", modrm_string); break; case 3: sprintf(s, "fistp dword ptr %s", modrm_string); break; case 4: sprintf(s, "??? (FPU)"); break; case 5: sprintf(s, "fld tword ptr %s", modrm_string); break; case 6: sprintf(s, "??? (FPU)"); break; case 7: sprintf(s, "fstp tword ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "fcmovnb st(0),st(%d)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fcmovne st(0),st(%d)", op2 & 0x7); break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: sprintf(s, "fcmovnbe st(0),st(%d)", op2 & 0x7); break; case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: sprintf(s, "fcmovnu st(0),st(%d)", op2 & 0x7); break; case 0x22: sprintf(s, "fclex"); break; case 0x23: sprintf(s, "finit"); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fucomi st(0),st(%d)", op2 & 0x7); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: sprintf(s, "fcomi st(0),st(%d)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 4: // Group DC { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fadd qword ptr %s", modrm_string); break; case 1: sprintf(s, "fmul qword ptr %s", modrm_string); break; case 2: sprintf(s, "fcom qword ptr %s", modrm_string); break; case 3: sprintf(s, "fcomp qword ptr %s", modrm_string); break; case 4: sprintf(s, "fsub qword ptr %s", modrm_string); break; case 5: sprintf(s, "fsubr qword ptr %s", modrm_string); break; case 6: sprintf(s, "fdiv qword ptr %s", modrm_string); break; case 7: sprintf(s, "fdivr qword ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "fadd st(%d),st(0)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fmul st(%d),st(0)", op2 & 0x7); break; case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: sprintf(s, "fsubr st(%d),st(0)", op2 & 0x7); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fsub st(%d),st(0)", op2 & 0x7); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: sprintf(s, "fdivr st(%d),st(0)", op2 & 0x7); break; case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f: sprintf(s, "fdiv st(%d),st(0)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 5: // Group DD { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fld qword ptr %s", modrm_string); break; case 1: sprintf(s, "fisttp qword ptr %s", modrm_string); break; case 2: sprintf(s, "fst qword ptr %s", modrm_string); break; case 3: sprintf(s, "fstp qword ptr %s", modrm_string); break; case 4: sprintf(s, "frstor %s", modrm_string); break; case 5: sprintf(s, "??? (FPU)"); break; case 6: sprintf(s, "fsave %s", modrm_string); break; case 7: sprintf(s, "fstsw word ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "ffree st(%d)", op2 & 0x7); break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: sprintf(s, "fst st(%d)", op2 & 0x7); break; case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: sprintf(s, "fstp st(%d)", op2 & 0x7); break; case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: sprintf(s, "fucom st(%d), st(0)", op2 & 0x7); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fucomp st(%d)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 6: // Group DE { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fiadd word ptr %s", modrm_string); break; case 1: sprintf(s, "fimul word ptr %s", modrm_string); break; case 2: sprintf(s, "ficom word ptr %s", modrm_string); break; case 3: sprintf(s, "ficomp word ptr %s", modrm_string); break; case 4: sprintf(s, "fisub word ptr %s", modrm_string); break; case 5: sprintf(s, "fisubr word ptr %s", modrm_string); break; case 6: sprintf(s, "fidiv word ptr %s", modrm_string); break; case 7: sprintf(s, "fidivr word ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: sprintf(s, "faddp st(%d)", op2 & 0x7); break; case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: sprintf(s, "fmulp st(%d)", op2 & 0x7); break; case 0x19: sprintf(s, "fcompp"); break; case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: sprintf(s, "fsubrp st(%d)", op2 & 0x7); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fsubp st(%d)", op2 & 0x7); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: sprintf(s, "fdivrp st(%d), st(0)", op2 & 0x7); break; case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f: sprintf(s, "fdivp st(%d)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } case 7: // Group DF { if (op2 < 0xc0) { pc--; // adjust fetch pointer, so modrm byte read again opcode_ptr--; handle_modrm( modrm_string ); switch ((op2 >> 3) & 0x7) { case 0: sprintf(s, "fild word ptr %s", modrm_string); break; case 1: sprintf(s, "fisttp word ptr %s", modrm_string); break; case 2: sprintf(s, "fist word ptr %s", modrm_string); break; case 3: sprintf(s, "fistp word ptr %s", modrm_string); break; case 4: sprintf(s, "fbld %s", modrm_string); break; case 5: sprintf(s, "fild qword ptr %s", modrm_string); break; case 6: sprintf(s, "fbstp %s", modrm_string); break; case 7: sprintf(s, "fistp qword ptr %s", modrm_string); break; } } else { switch (op2 & 0x3f) { case 0x20: sprintf(s, "fstsw ax"); break; case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f: sprintf(s, "fucomip st(%d)", op2 & 0x7); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: sprintf(s, "fcomip st(%d),st(0)", op2 & 0x7); break; default: sprintf(s, "??? (FPU)"); break; } } break; } } } static void decode_opcode(char *s, const I386_OPCODE *op, UINT8 op1) { int i; UINT8 op2; if ((op->flags & SPECIAL64) && (address_size == 2)) op = &x64_opcode_alt[op->flags >> 24]; switch( op->flags & FLAGS_MASK ) { case ISREX: if (curmode == 64) { rex = op1; operand_size = (op1 & 8) ? 2 : 1; regex = (op1 << 1) & 8; sibex = (op1 << 2) & 8; rmex = (op1 << 3) & 8; op2 = _FETCH(); decode_opcode( s, &i386_opcode_table1[op2], op1 ); return; } break; case OP_SIZE: rex = regex = sibex = rmex = 0; if (operand_size < 2 && operand_prefix == 0) { operand_size ^= 1; operand_prefix = 1; } op2 = _FETCH(); decode_opcode( s, &i386_opcode_table1[op2], op2 ); return; case ADDR_SIZE: rex = regex = sibex = rmex = 0; if(address_prefix == 0) { if (curmode != 64) address_size ^= 1; else address_size ^= 3; address_prefix = 1; } op2 = _FETCH(); decode_opcode( s, &i386_opcode_table1[op2], op2 ); return; case TWO_BYTE: if (&opcode_ptr[-2] >= opcode_ptr_base) pre0f = opcode_ptr[-2]; op2 = _FETCHD(); decode_opcode( s, &i386_opcode_table2[op2], op1 ); return; case THREE_BYTE: op2 = _FETCHD(); if (opcode_ptr[-2] == 0x38) decode_opcode( s, &i386_opcode_table0F38[op2], op1 ); else decode_opcode( s, &i386_opcode_table0F3A[op2], op1 ); return; case SEG_CS: case SEG_DS: case SEG_ES: case SEG_FS: case SEG_GS: case SEG_SS: rex = regex = sibex = rmex = 0; segment = op->flags; op2 = _FETCH(); decode_opcode( s, &i386_opcode_table1[op2], op2 ); return; case PREFIX: op2 = _FETCH(); if ((op2 != 0x0f) && (op2 != 0x90)) s += sprintf( s, "%-7s ", op->mnemonic ); if ((op2 == 0x90) && !pre0f) pre0f = op1; decode_opcode( s, &i386_opcode_table1[op2], op2 ); return; case GROUP: handle_modrm( modrm_string ); for( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) { if( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) { decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 ); return; } } goto handle_unknown; case FPU: op2 = _FETCHD(); handle_fpu( s, op1, op2); return; case MODRM: handle_modrm( modrm_string ); break; } if ((op->flags & ALWAYS64) && curmode == 64) operand_size = 2; if ((op->flags & VAR_NAME) && operand_size > 0) { const char *mnemonic = op->mnemonic + strlen(op->mnemonic) + 1; if (operand_size == 2) mnemonic += strlen(mnemonic) + 1; s += sprintf( s, "%-7s ", mnemonic ); } else if (op->flags & VAR_NAME4) { const char *mnemonic = op->mnemonic; int which = (pre0f == 0xf3) ? 3 : (pre0f == 0xf2) ? 2 : (pre0f == 0x66) ? 1 : 0; while (which--) mnemonic += strlen(mnemonic) + 1; s += sprintf( s, "%-7s ", mnemonic ); } else s += sprintf( s, "%-7s ", op->mnemonic ); dasm_flags = op->dasm_flags; if( op->param1 != 0 ) { s = handle_param( s, op->param1 ); } if( op->param2 != 0 ) { s += sprintf( s, "," ); s = handle_param( s, op->param2 ); } if( op->param3 != 0 ) { s += sprintf( s, "," ); s = handle_param( s, op->param3 ); } return; handle_unknown: sprintf(s, "???"); } int i386_dasm_one_ex(char *buffer, UINT64 eip, const UINT8 *oprom, int mode) { UINT8 op; opcode_ptr = opcode_ptr_base = oprom; switch(mode) { case 1: /* 8086/8088/80186/80188 */ address_size = 0; operand_size = 0; max_length = 8; /* maximum without redundant prefixes - not enforced by chip */ break; case 2: /* 80286 */ address_size = 0; operand_size = 0; max_length = 10; break; case 16: /* 80386+ 16-bit code segment */ address_size = 0; operand_size = 0; max_length = 15; break; case 32: /* 80386+ 32-bit code segment */ address_size = 1; operand_size = 1; max_length = 15; break; case 64: /* x86_64 */ address_size = 2; operand_size = 1; max_length = 15; break; } pc = eip; dasm_flags = 0; segment = 0; curmode = mode; pre0f = 0; rex = regex = sibex = rmex = 0; address_prefix = 0; operand_prefix = 0; op = _FETCH(); decode_opcode( buffer, &i386_opcode_table1[op], op ); return (pc-eip) | dasm_flags | DASMFLAG_SUPPORTED; } int i386_dasm_one(char *buffer, offs_t eip, const UINT8 *oprom, int mode) { return i386_dasm_one_ex(buffer, eip, oprom, mode); } CPU_DISASSEMBLE( x86_16 ) { return i386_dasm_one_ex(buffer, pc, oprom, 16); } CPU_DISASSEMBLE( x86_32 ) { return i386_dasm_one_ex(buffer, pc, oprom, 32); } CPU_DISASSEMBLE( x86_64 ) { return i386_dasm_one_ex(buffer, pc, oprom, 64); } ================================================ FILE: vm86/mame/emu/cpu/i386.old/i386op16.c ================================================ static UINT16 I386OP(shift_rotate16)(UINT8 modrm, UINT32 value, UINT8 shift) { UINT32 src = value & 0xffff; UINT16 dst = value; if( shift == 0 ) { CYCLES_RM(modrm, 3, 7); } else if( shift == 1 ) { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm16, 1 */ m_CF = (src & 0x8000) ? 1 : 0; dst = (src << 1) + m_CF; m_OF = ((src ^ dst) & 0x8000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm16, 1 */ m_CF = (src & 0x1) ? 1 : 0; dst = (m_CF << 15) | (src >> 1); m_OF = ((src ^ dst) & 0x8000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm16, 1 */ dst = (src << 1) + m_CF; m_CF = (src & 0x8000) ? 1 : 0; m_OF = ((src ^ dst) & 0x8000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm16, 1 */ dst = (m_CF << 15) | (src >> 1); m_CF = src & 0x1; m_OF = ((src ^ dst) & 0x8000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm16, 1 */ case 6: dst = src << 1; m_CF = (src & 0x8000) ? 1 : 0; m_OF = (((m_CF << 15) ^ dst) & 0x8000) ? 1 : 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm16, 1 */ dst = src >> 1; m_CF = src & 0x1; m_OF = (dst & 0x8000) ? 1 : 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm16, 1 */ dst = (INT16)(src) >> 1; m_CF = src & 0x1; m_OF = 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } else { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm16, i8 */ if(!(shift & 15)) { if(shift & 16) { m_CF = src & 1; m_OF = (src & 1) ^ ((src >> 15) & 1); } break; } shift &= 15; dst = ((src & ((UINT16)0xffff >> shift)) << shift) | ((src & ((UINT16)0xffff << (16-shift))) >> (16-shift)); m_CF = dst & 0x1; m_OF = (dst & 1) ^ (dst >> 15); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm16, i8 */ if(!(shift & 15)) { if(shift & 16) { m_CF = (src >> 15) & 1; m_OF = ((src >> 15) & 1) ^ ((src >> 14) & 1); } break; } shift &= 15; dst = ((src & ((UINT16)0xffff << shift)) >> shift) | ((src & ((UINT16)0xffff >> (16-shift))) << (16-shift)); m_CF = (dst >> 15) & 1; m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm16, i8 */ shift %= 17; dst = ((src & ((UINT16)0xffff >> shift)) << shift) | ((src & ((UINT16)0xffff << (17-shift))) >> (17-shift)) | (m_CF << (shift-1)); if(shift) m_CF = (src >> (16-shift)) & 0x1; m_OF = m_CF ^ ((dst >> 15) & 1); CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm16, i8 */ shift %= 17; dst = ((src & ((UINT16)0xffff << shift)) >> shift) | ((src & ((UINT16)0xffff >> (16-shift))) << (17-shift)) | (m_CF << (16-shift)); if(shift) m_CF = (src >> (shift-1)) & 0x1; m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm16, i8 */ case 6: shift &= 31; dst = src << shift; m_CF = (shift <= 16) && (src & (1 << (16-shift))); SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm16, i8 */ shift &= 31; dst = src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm16, i8 */ shift &= 31; dst = (INT16)src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF16(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } return dst; } static void I386OP(adc_rm16_r16)() // Opcode 0x11 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = ADC16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = ADC16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(adc_r16_rm16)() // Opcode 0x13 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = ADC16(dst, src, m_CF); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = ADC16(dst, src, m_CF); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(adc_ax_i16)() // Opcode 0x15 { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = ADC16(dst, src, m_CF); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(add_rm16_r16)() // Opcode 0x01 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = ADD16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = ADD16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(add_r16_rm16)() // Opcode 0x03 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = ADD16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = ADD16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(add_ax_i16)() // Opcode 0x05 { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = ADD16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(and_rm16_r16)() // Opcode 0x21 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = AND16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = AND16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(and_r16_rm16)() // Opcode 0x23 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = AND16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = AND16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(and_ax_i16)() // Opcode 0x25 { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = AND16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(bsf_r16_rm16)() // Opcode 0x0f bc { UINT16 src, dst, temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); } dst = 0; if( src == 0 ) { m_ZF = 1; } else { m_ZF = 0; temp = 0; while( (src & (1 << temp)) == 0 ) { temp++; dst = temp; CYCLES(CYCLES_BSF); } STORE_REG16(modrm, dst); } CYCLES(CYCLES_BSF_BASE); } static void I386OP(bsr_r16_rm16)() // Opcode 0x0f bd { UINT16 src, dst, temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); } dst = 0; if( src == 0 ) { m_ZF = 1; } else { m_ZF = 0; dst = temp = 15; while( (src & (1 << temp)) == 0 ) { temp--; dst = temp; CYCLES(CYCLES_BSR); } STORE_REG16(modrm, dst); } CYCLES(CYCLES_BSR_BASE); } static void I386OP(bt_rm16_r16)() // Opcode 0x0f a3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 bit = LOAD_REG16(modrm); if( dst & (1 << (bit & 0xf)) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT16 bit = LOAD_REG16(modrm); ea += 2*(bit/16); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),0); bit %= 16; UINT16 dst = READ16(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_REG_MEM); } } static void I386OP(btc_rm16_r16)() // Opcode 0x0f bb { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 bit = LOAD_REG16(modrm); if( dst & (1 << (bit & 0xf)) ) m_CF = 1; else m_CF = 0; dst ^= (1 << (bit & 0xf)); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTC_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT16 bit = LOAD_REG16(modrm); ea += 2*(bit/16); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 16; UINT16 dst = READ16(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTC_REG_MEM); } } static void I386OP(btr_rm16_r16)() // Opcode 0x0f b3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 bit = LOAD_REG16(modrm); if( dst & (1 << (bit & 0xf)) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << (bit & 0xf)); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTR_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT16 bit = LOAD_REG16(modrm); ea += 2*(bit/16); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 16; UINT16 dst = READ16(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTR_REG_MEM); } } static void I386OP(bts_rm16_r16)() // Opcode 0x0f ab { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 bit = LOAD_REG16(modrm); if( dst & (1 << (bit & 0xf)) ) m_CF = 1; else m_CF = 0; dst |= (1 << (bit & 0xf)); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTS_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT16 bit = LOAD_REG16(modrm); ea += 2*(bit/16); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 16; UINT16 dst = READ16(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTS_REG_MEM); } } static void I386OP(call_abs16)() // Opcode 0x9a { UINT16 offset = FETCH16(); UINT16 ptr = FETCH16(); if( PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_call(ptr,offset,0,0); } else { PUSH16(m_sreg[CS].selector ); PUSH16(m_eip ); m_sreg[CS].selector = ptr; m_performed_intersegment_jump = 1; m_eip = offset; i386_load_segment_descriptor(CS); } CYCLES(CYCLES_CALL_INTERSEG); /* TODO: Timing = 17 + m */ CHANGE_PC(m_eip); } static void I386OP(call_rel16)() // Opcode 0xe8 { INT16 disp = FETCH16(); PUSH16(m_eip ); if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_CALL); /* TODO: Timing = 7 + m */ } static void I386OP(cbw)() // Opcode 0x98 { REG16(AX) = (INT16)((INT8)REG8(AL)); CYCLES(CYCLES_CBW); } static void I386OP(cmp_rm16_r16)() // Opcode 0x39 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG16(modrm); dst = READ16(ea); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } } static void I386OP(cmp_r16_rm16)() // Opcode 0x3b { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); SUB16(dst, src); CYCLES(CYCLES_CMP_MEM_REG); } } static void I386OP(cmp_ax_i16)() // Opcode 0x3d { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); SUB16(dst, src); CYCLES(CYCLES_CMP_IMM_ACC); } static void I386OP(cmpsw)() // Opcode 0xa7 { UINT32 eas, ead; UINT16 src, dst; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ16(eas); dst = READ16(ead); SUB16(src,dst); BUMP_SI(2); BUMP_DI(2); CYCLES(CYCLES_CMPS); } static void I386OP(cwd)() // Opcode 0x99 { if( REG16(AX) & 0x8000 ) { REG16(DX) = 0xffff; } else { REG16(DX) = 0x0000; } CYCLES(CYCLES_CWD); } static void I386OP(dec_ax)() // Opcode 0x48 { REG16(AX) = DEC16(REG16(AX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_cx)() // Opcode 0x49 { REG16(CX) = DEC16(REG16(CX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_dx)() // Opcode 0x4a { REG16(DX) = DEC16(REG16(DX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_bx)() // Opcode 0x4b { REG16(BX) = DEC16(REG16(BX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_sp)() // Opcode 0x4c { REG16(SP) = DEC16(REG16(SP) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_bp)() // Opcode 0x4d { REG16(BP) = DEC16(REG16(BP) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_si)() // Opcode 0x4e { REG16(SI) = DEC16(REG16(SI) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_di)() // Opcode 0x4f { REG16(DI) = DEC16(REG16(DI) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(imul_r16_rm16)() // Opcode 0x0f af { UINT8 modrm = FETCH(); INT32 result; INT32 src, dst; if( modrm >= 0xc0 ) { src = (INT32)(INT16)LOAD_RM16(modrm); CYCLES(CYCLES_IMUL16_REG_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT32)(INT16)READ16(ea); CYCLES(CYCLES_IMUL16_REG_MEM); /* TODO: Correct multiply timing */ } dst = (INT32)(INT16)LOAD_REG16(modrm); result = src * dst; STORE_REG16(modrm, (UINT16)result); m_CF = m_OF = !(result == (INT32)(INT16)result); } static void I386OP(imul_r16_rm16_i16)() // Opcode 0x69 { UINT8 modrm = FETCH(); INT32 result; INT32 src, dst; if( modrm >= 0xc0 ) { dst = (INT32)(INT16)LOAD_RM16(modrm); CYCLES(CYCLES_IMUL16_REG_IMM_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); dst = (INT32)(INT16)READ16(ea); CYCLES(CYCLES_IMUL16_MEM_IMM_REG); /* TODO: Correct multiply timing */ } src = (INT32)(INT16)FETCH16(); result = src * dst; STORE_REG16(modrm, (UINT16)result); m_CF = m_OF = !(result == (INT32)(INT16)result); } static void I386OP(imul_r16_rm16_i8)() // Opcode 0x6b { UINT8 modrm = FETCH(); INT32 result; INT32 src, dst; if( modrm >= 0xc0 ) { dst = (INT32)(INT16)LOAD_RM16(modrm); CYCLES(CYCLES_IMUL16_REG_IMM_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); dst = (INT32)(INT16)READ16(ea); CYCLES(CYCLES_IMUL16_MEM_IMM_REG); /* TODO: Correct multiply timing */ } src = (INT32)(INT8)FETCH(); result = src * dst; STORE_REG16(modrm, (UINT16)result); m_CF = m_OF = !(result == (INT32)(INT16)result); } static void I386OP(in_ax_i8)() // Opcode 0xe5 { UINT16 port = FETCH(); UINT16 data = READPORT16(port); REG16(AX) = data; CYCLES(CYCLES_IN_VAR); } static void I386OP(in_ax_dx)() // Opcode 0xed { UINT16 port = REG16(DX); UINT16 data = READPORT16(port); REG16(AX) = data; CYCLES(CYCLES_IN); } static void I386OP(inc_ax)() // Opcode 0x40 { REG16(AX) = INC16(REG16(AX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_cx)() // Opcode 0x41 { REG16(CX) = INC16(REG16(CX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_dx)() // Opcode 0x42 { REG16(DX) = INC16(REG16(DX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_bx)() // Opcode 0x43 { REG16(BX) = INC16(REG16(BX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_sp)() // Opcode 0x44 { REG16(SP) = INC16(REG16(SP) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_bp)() // Opcode 0x45 { REG16(BP) = INC16(REG16(BP) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_si)() // Opcode 0x46 { REG16(SI) = INC16(REG16(SI) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_di)() // Opcode 0x47 { REG16(DI) = INC16(REG16(DI) ); CYCLES(CYCLES_INC_REG); } static void I386OP(iret16)() // Opcode 0xcf { UINT32 old = m_pc - 1; if( PROTECTED_MODE ) { i386_protected_mode_iret(0); } else { /* TODO: #SS(0) exception */ /* TODO: #GP(0) exception */ m_eip = POP16(); m_sreg[CS].selector = POP16(); set_flags(POP16() ); i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } CYCLES(CYCLES_IRET); // MS-DOS system call if(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) { msdos_syscall(old - IRET_TOP); } } static void I386OP(ja_rel16)() // Opcode 0x0f 87 { INT16 disp = FETCH16(); if( m_CF == 0 && m_ZF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jbe_rel16)() // Opcode 0x0f 86 { INT16 disp = FETCH16(); if( m_CF != 0 || m_ZF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jc_rel16)() // Opcode 0x0f 82 { INT16 disp = FETCH16(); if( m_CF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jg_rel16)() // Opcode 0x0f 8f { INT16 disp = FETCH16(); if( m_ZF == 0 && (m_SF == m_OF) ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jge_rel16)() // Opcode 0x0f 8d { INT16 disp = FETCH16(); if(m_SF == m_OF) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jl_rel16)() // Opcode 0x0f 8c { INT16 disp = FETCH16(); if( (m_SF != m_OF) ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jle_rel16)() // Opcode 0x0f 8e { INT16 disp = FETCH16(); if( m_ZF != 0 || (m_SF != m_OF) ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnc_rel16)() // Opcode 0x0f 83 { INT16 disp = FETCH16(); if( m_CF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jno_rel16)() // Opcode 0x0f 81 { INT16 disp = FETCH16(); if( m_OF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnp_rel16)() // Opcode 0x0f 8b { INT16 disp = FETCH16(); if( m_PF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jns_rel16)() // Opcode 0x0f 89 { INT16 disp = FETCH16(); if( m_SF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnz_rel16)() // Opcode 0x0f 85 { INT16 disp = FETCH16(); if( m_ZF == 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jo_rel16)() // Opcode 0x0f 80 { INT16 disp = FETCH16(); if( m_OF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jp_rel16)() // Opcode 0x0f 8a { INT16 disp = FETCH16(); if( m_PF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(js_rel16)() // Opcode 0x0f 88 { INT16 disp = FETCH16(); if( m_SF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jz_rel16)() // Opcode 0x0f 84 { INT16 disp = FETCH16(); if( m_ZF != 0 ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jcxz16)() // Opcode 0xe3 { INT8 disp = FETCH(); int val = (m_address_size)?(REG32(ECX) == 0):(REG16(CX) == 0); if( val ) { if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JCXZ); /* TODO: Timing = 9 + m */ } else { CYCLES(CYCLES_JCXZ_NOBRANCH); } } static void I386OP(jmp_rel16)() // Opcode 0xe9 { INT16 disp = FETCH16(); if (m_sreg[CS].d) { m_eip += disp; } else { m_eip = (m_eip + disp) & 0xffff; } CHANGE_PC(m_eip); CYCLES(CYCLES_JMP); /* TODO: Timing = 7 + m */ } static void I386OP(jmp_abs16)() // Opcode 0xea { UINT16 address = FETCH16(); UINT16 segment = FETCH16(); if( PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(segment,address,0,0); } else { m_eip = address; m_sreg[CS].selector = segment; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } CYCLES(CYCLES_JMP_INTERSEG); } static void I386OP(lea16)() // Opcode 0x8d { UINT8 modrm = FETCH(); UINT32 ea = GetNonTranslatedEA(modrm,NULL); STORE_REG16(modrm, ea); CYCLES(CYCLES_LEA); } static void I386OP(enter16)() // Opcode 0xc8 { UINT16 framesize = FETCH16(); UINT8 level = FETCH() % 32; UINT8 x; UINT16 frameptr; PUSH16(REG16(BP)); if(!STACK_32BIT) frameptr = REG16(SP); else frameptr = REG32(ESP); if(level > 0) { for(x=1;x= 0xc0 ) { src = LOAD_REG16(modrm); STORE_RM16(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); WRITE16(ea, src); CYCLES(CYCLES_MOV_REG_MEM); } } static void I386OP(mov_r16_rm16)() // Opcode 0x8b { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); STORE_REG16(modrm, src); CYCLES(CYCLES_MOV_MEM_REG); } } static void I386OP(mov_rm16_i16)() // Opcode 0xc7 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 value = FETCH16(); STORE_RM16(modrm, value); CYCLES(CYCLES_MOV_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 value = FETCH16(); WRITE16(ea, value); CYCLES(CYCLES_MOV_IMM_MEM); } } static void I386OP(mov_ax_m16)() // Opcode 0xa1 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } /* TODO: Not sure if this is correct... */ if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 0 ); } else { ea = i386_translate(DS, offset, 0 ); } REG16(AX) = READ16(ea); CYCLES(CYCLES_MOV_MEM_ACC); } static void I386OP(mov_m16_ax)() // Opcode 0xa3 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } /* TODO: Not sure if this is correct... */ if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 1 ); } else { ea = i386_translate(DS, offset, 1 ); } WRITE16(ea, REG16(AX) ); CYCLES(CYCLES_MOV_ACC_MEM); } static void I386OP(mov_ax_i16)() // Opcode 0xb8 { REG16(AX) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_cx_i16)() // Opcode 0xb9 { REG16(CX) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_dx_i16)() // Opcode 0xba { REG16(DX) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_bx_i16)() // Opcode 0xbb { REG16(BX) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_sp_i16)() // Opcode 0xbc { REG16(SP) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_bp_i16)() // Opcode 0xbd { REG16(BP) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_si_i16)() // Opcode 0xbe { REG16(SI) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_di_i16)() // Opcode 0xbf { REG16(DI) = FETCH16(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(movsw)() // Opcode 0xa5 { UINT32 eas, ead; UINT16 v; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); v = READ16(eas); WRITE16(ead, v); BUMP_SI(2); BUMP_DI(2); CYCLES(CYCLES_MOVS); } static void I386OP(movsx_r16_rm8)() // Opcode 0x0f be { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { INT16 src = (INT8)LOAD_RM8(modrm); STORE_REG16(modrm, src); CYCLES(CYCLES_MOVSX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); INT16 src = (INT8)READ8(ea); STORE_REG16(modrm, src); CYCLES(CYCLES_MOVSX_MEM_REG); } } static void I386OP(movzx_r16_rm8)() // Opcode 0x0f b6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 src = (UINT8)LOAD_RM8(modrm); STORE_REG16(modrm, src); CYCLES(CYCLES_MOVZX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); UINT16 src = (UINT8)READ8(ea); STORE_REG16(modrm, src); CYCLES(CYCLES_MOVZX_MEM_REG); } } static void I386OP(or_rm16_r16)() // Opcode 0x09 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = OR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = OR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(or_r16_rm16)() // Opcode 0x0b { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = OR16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = OR16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(or_ax_i16)() // Opcode 0x0d { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = OR16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(out_ax_i8)() // Opcode 0xe7 { UINT16 port = FETCH(); UINT16 data = REG16(AX); WRITEPORT16(port, data); CYCLES(CYCLES_OUT_VAR); } static void I386OP(out_ax_dx)() // Opcode 0xef { UINT16 port = REG16(DX); UINT16 data = REG16(AX); WRITEPORT16(port, data); CYCLES(CYCLES_OUT); } static void I386OP(pop_ax)() // Opcode 0x58 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(AX) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_cx)() // Opcode 0x59 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(CX) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_dx)() // Opcode 0x5a { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(DX) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_bx)() // Opcode 0x5b { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(BX) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_sp)() // Opcode 0x5c { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(SP) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_bp)() // Opcode 0x5d { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(BP) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_si)() // Opcode 0x5e { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(SI) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_di)() // Opcode 0x5f { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) REG16(DI) = POP16(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static bool I386OP(pop_seg16)(int segment) { UINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); UINT16 value; bool fault; if(i386_limit_check(SS,offset+1) == 0) { ea = i386_translate(SS, offset, 0); value = READ16(ea); i386_sreg_load(value, segment, &fault); if(fault) return false; if(STACK_32BIT) REG32(ESP) = offset + 2; else REG16(SP) = offset + 2; } else { m_ext = 1; i386_trap_with_error(FAULT_SS,0,0,0); return false; } CYCLES(CYCLES_POP_SREG); return true; } static void I386OP(pop_ds16)() // Opcode 0x1f { I386OP(pop_seg16)(DS); } static void I386OP(pop_es16)() // Opcode 0x07 { I386OP(pop_seg16)(ES); } static void I386OP(pop_fs16)() // Opcode 0x0f a1 { I386OP(pop_seg16)(FS); } static void I386OP(pop_gs16)() // Opcode 0x0f a9 { I386OP(pop_seg16)(GS); } static void I386OP(pop_ss16)() // Opcode 0x17 { if(!I386OP(pop_seg16)(SS)) return; if(m_IF != 0) // if external interrupts are enabled { m_IF = 0; // reset IF for the next instruction m_delayed_interrupt_enable = 1; } } static void I386OP(pop_rm16)() // Opcode 0x8f { UINT8 modrm = FETCH(); UINT16 value; UINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+1) == 0) { UINT32 temp_sp = REG32(ESP); value = POP16(); if( modrm >= 0xc0 ) { STORE_RM16(modrm, value); } else { ea = GetEA(modrm,1); try { WRITE16(ea, value); } catch(UINT64 e) { REG32(ESP) = temp_sp; throw e; } } } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_RM); } static void I386OP(popa)() // Opcode 0x61 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+15) == 0) { REG16(DI) = POP16(); REG16(SI) = POP16(); REG16(BP) = POP16(); REG16(SP) += 2; REG16(BX) = POP16(); REG16(DX) = POP16(); REG16(CX) = POP16(); REG16(AX) = POP16(); } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POPA); } static void I386OP(popf)() // Opcode 0x9d { UINT32 value; UINT32 current = get_flags(); UINT8 IOPL = (current >> 12) & 0x03; UINT32 mask = 0x7fd5; UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); // IOPL can only change if CPL is 0 if(m_CPL != 0) mask &= ~0x00003000; // IF can only change if CPL is at least as privileged as IOPL if(m_CPL > IOPL) mask &= ~0x00000200; if(V8086_MODE) { if(IOPL < 3) { logerror("POPFD(%08x): IOPL < 3 while in V86 mode.\n",m_pc); FAULT(FAULT_GP,0) // #GP(0) } mask &= ~0x00003000; // IOPL cannot be changed while in V8086 mode } if(i386_limit_check(SS,offset+1) == 0) { value = POP16(); set_flags((current & ~mask) | (value & mask)); // mask out reserved bits } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POPF); } static void I386OP(push_ax)() // Opcode 0x50 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(AX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_cx)() // Opcode 0x51 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(CX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_dx)() // Opcode 0x52 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(DX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_bx)() // Opcode 0x53 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(BX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_sp)() // Opcode 0x54 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(SP) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_bp)() // Opcode 0x55 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(BP) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_si)() // Opcode 0x56 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(SI) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_di)() // Opcode 0x57 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(REG16(DI) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_cs16)() // Opcode 0x0e { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[CS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_ds16)() // Opcode 0x1e { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[DS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_es16)() // Opcode 0x06 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[ES].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_fs16)() // Opcode 0x0f a0 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[FS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_gs16)() // Opcode 0x0f a8 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[GS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_ss16)() // Opcode 0x16 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(m_sreg[SS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_i16)() // Opcode 0x68 { UINT16 value = FETCH16(); UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(value); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_IMM); } static void I386OP(pusha)() // Opcode 0x60 { UINT16 temp = REG16(SP); UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 16; else offset = (REG16(SP) - 16) & 0xffff; if(i386_limit_check(SS,offset) == 0) { PUSH16(REG16(AX) ); PUSH16(REG16(CX) ); PUSH16(REG16(DX) ); PUSH16(REG16(BX) ); PUSH16(temp ); PUSH16(REG16(BP) ); PUSH16(REG16(SI) ); PUSH16(REG16(DI) ); } else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSHA); } static void I386OP(pushf)() // Opcode 0x9c { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 2; else offset = (REG16(SP) - 2) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH16(get_flags() & 0xffff ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSHF); } static void I386OP(ret_near16_i16)() // Opcode 0xc2 { INT16 disp = FETCH16(); m_eip = POP16(); REG16(SP) += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_RET_IMM); /* TODO: Timing = 10 + m */ } static void I386OP(ret_near16)() // Opcode 0xc3 { m_eip = POP16(); CHANGE_PC(m_eip); CYCLES(CYCLES_RET); /* TODO: Timing = 10 + m */ } static void I386OP(sbb_rm16_r16)() // Opcode 0x19 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = SBB16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = SBB16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sbb_r16_rm16)() // Opcode 0x1b { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = SBB16(dst, src, m_CF); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = SBB16(dst, src, m_CF); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sbb_ax_i16)() // Opcode 0x1d { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = SBB16(dst, src, m_CF); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(scasw)() // Opcode 0xaf { UINT32 eas; UINT16 src, dst; eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ16(eas); dst = REG16(AX); SUB16(dst, src); BUMP_DI(2); CYCLES(CYCLES_SCAS); } static void I386OP(shld16_i8)() // Opcode 0x0f a4 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else if( shift > 15 ) { m_CF = (upper & (1 << (16-shift))) ? 1 : 0; // ppro and above should be (dst >> (32-shift)) dst = (upper << (shift-16)) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } else { m_CF = (dst & (1 << (16-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (16-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } STORE_RM16(modrm, dst); CYCLES(CYCLES_SHLD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else if( shift > 15 ) { m_CF = (upper & (1 << (16-shift))) ? 1 : 0; dst = (upper << (shift-16)) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } else { m_CF = (dst & (1 << (16-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (16-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } WRITE16(ea, dst); CYCLES(CYCLES_SHLD_MEM); } } static void I386OP(shld16_cl)() // Opcode 0x0f a5 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else if( shift > 15 ) { m_CF = (upper & (1 << (16-shift))) ? 1 : 0; dst = (upper << (shift-16)) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } else { m_CF = (dst & (1 << (16-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (16-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } STORE_RM16(modrm, dst); CYCLES(CYCLES_SHLD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else if( shift > 15 ) { m_CF = (upper & (1 << (16-shift))) ? 1 : 0; dst = (upper << (shift-16)) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } else { m_CF = (dst & (1 << (16-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (16-shift)); m_OF = m_CF ^ (dst >> 15); SetSZPF16(dst); } WRITE16(ea, dst); CYCLES(CYCLES_SHLD_MEM); } } static void I386OP(shrd16_i8)() // Opcode 0x0f ac { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0) { } else if( shift > 15 ) { m_CF = (upper & (1 << (shift-1))) ? 1 : 0; dst = (upper >> (shift-16)) | (upper << (32-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (16-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } STORE_RM16(modrm, dst); CYCLES(CYCLES_SHRD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0) { } else if( shift > 15 ) { m_CF = (upper & (1 << (shift-1))) ? 1 : 0; dst = (upper >> (shift-16)) | (upper << (32-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (16-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } WRITE16(ea, dst); CYCLES(CYCLES_SHRD_MEM); } } static void I386OP(shrd16_cl)() // Opcode 0x0f ad { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0) { } else if( shift > 15 ) { m_CF = (upper & (1 << (shift-1))) ? 1 : 0; dst = (upper >> (shift-16)) | (upper << (32-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (16-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } STORE_RM16(modrm, dst); CYCLES(CYCLES_SHRD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 upper = LOAD_REG16(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0) { } else if( shift > 15 ) { m_CF = (upper & (1 << (shift-1))) ? 1 : 0; dst = (upper >> (shift-16)) | (upper << (32-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (16-shift)); m_OF = ((dst >> 15) ^ (dst >> 14)) & 1; SetSZPF16(dst); } WRITE16(ea, dst); CYCLES(CYCLES_SHRD_MEM); } } static void I386OP(stosw)() // Opcode 0xab { UINT32 ead; ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); WRITE16(ead, REG16(AX)); BUMP_DI(2); CYCLES(CYCLES_STOS); } static void I386OP(sub_rm16_r16)() // Opcode 0x29 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = SUB16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = SUB16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sub_r16_rm16)() // Opcode 0x2b { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = SUB16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = SUB16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sub_ax_i16)() // Opcode 0x2d { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = SUB16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(test_ax_i16)() // Opcode 0xa9 { UINT16 src = FETCH16(); UINT16 dst = REG16(AX); dst = src & dst; SetSZPF16(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_IMM_ACC); } static void I386OP(test_rm16_r16)() // Opcode 0x85 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = src & dst; SetSZPF16(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG16(modrm); dst = READ16(ea); dst = src & dst; SetSZPF16(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_MEM); } } static void I386OP(xchg_ax_cx)() // Opcode 0x91 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(CX); REG16(CX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_dx)() // Opcode 0x92 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(DX); REG16(DX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_bx)() // Opcode 0x93 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(BX); REG16(BX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_sp)() // Opcode 0x94 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(SP); REG16(SP) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_bp)() // Opcode 0x95 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(BP); REG16(BP) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_si)() // Opcode 0x96 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(SI); REG16(SI) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_ax_di)() // Opcode 0x97 { UINT16 temp; temp = REG16(AX); REG16(AX) = REG16(DI); REG16(DI) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_r16_rm16)() // Opcode 0x87 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 src = LOAD_RM16(modrm); UINT16 dst = LOAD_REG16(modrm); STORE_REG16(modrm, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_XCHG_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 src = READ16(ea); UINT16 dst = LOAD_REG16(modrm); STORE_REG16(modrm, src); WRITE16(ea, dst); CYCLES(CYCLES_XCHG_REG_MEM); } } static void I386OP(xor_rm16_r16)() // Opcode 0x31 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); dst = XOR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); dst = XOR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(xor_r16_rm16)() // Opcode 0x33 { UINT16 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); dst = LOAD_REG16(modrm); dst = XOR16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); dst = LOAD_REG16(modrm); dst = XOR16(dst, src); STORE_REG16(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(xor_ax_i16)() // Opcode 0x35 { UINT16 src, dst; src = FETCH16(); dst = REG16(AX); dst = XOR16(dst, src); REG16(AX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(group81_16)() // Opcode 0x81 { UINT32 ea; UINT16 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = ADD16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = ADD16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = OR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = OR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = ADC16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = ADC16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = SBB16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = SBB16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = AND16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = AND16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = SUB16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = SUB16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); dst = XOR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = FETCH16(); dst = XOR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = FETCH16(); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ16(ea); src = FETCH16(); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(group83_16)() // Opcode 0x83 { UINT32 ea; UINT16 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = ADD16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = ADD16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = OR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = OR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = ADC16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = ADC16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = ((UINT16)(INT16)(INT8)FETCH()); dst = SBB16(dst, src, m_CF); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = ((UINT16)(INT16)(INT8)FETCH()); dst = SBB16(dst, src, m_CF); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = AND16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = AND16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = SUB16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = SUB16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); dst = XOR16(dst, src); STORE_RM16(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); dst = XOR16(dst, src); WRITE16(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm16, i16 if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); src = (UINT16)(INT16)(INT8)FETCH(); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ16(ea); src = (UINT16)(INT16)(INT8)FETCH(); SUB16(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(groupC1_16)() // Opcode 0xc1 { UINT16 dst; UINT8 modrm = FETCH(); UINT8 shift; if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); shift = FETCH() & 0x1f; dst = i386_shift_rotate16(modrm, dst, shift); STORE_RM16(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ16(ea); shift = FETCH() & 0x1f; dst = i386_shift_rotate16(modrm, dst, shift); WRITE16(ea, dst); } } static void I386OP(groupD1_16)() // Opcode 0xd1 { UINT16 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); dst = i386_shift_rotate16(modrm, dst, 1); STORE_RM16(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ16(ea); dst = i386_shift_rotate16(modrm, dst, 1); WRITE16(ea, dst); } } static void I386OP(groupD3_16)() // Opcode 0xd3 { UINT16 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM16(modrm); dst = i386_shift_rotate16(modrm, dst, REG8(CL)); STORE_RM16(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ16(ea); dst = i386_shift_rotate16(modrm, dst, REG8(CL)); WRITE16(ea, dst); } } static void I386OP(groupF7_16)() // Opcode 0xf7 { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* TEST Rm16, i16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 src = FETCH16(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF16(dst); CYCLES(CYCLES_TEST_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT16 dst = READ16(ea); UINT16 src = FETCH16(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF16(dst); CYCLES(CYCLES_TEST_IMM_MEM); } break; case 2: /* NOT Rm16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); dst = ~dst; STORE_RM16(modrm, dst); CYCLES(CYCLES_NOT_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); dst = ~dst; WRITE16(ea, dst); CYCLES(CYCLES_NOT_MEM); } break; case 3: /* NEG Rm16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); dst = SUB16(0, dst ); STORE_RM16(modrm, dst); CYCLES(CYCLES_NEG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); dst = SUB16(0, dst ); WRITE16(ea, dst); CYCLES(CYCLES_NEG_MEM); } break; case 4: /* MUL AX, Rm16 */ { UINT32 result; UINT16 src, dst; if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); CYCLES(CYCLES_MUL16_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); CYCLES(CYCLES_MUL16_ACC_MEM); /* TODO: Correct multiply timing */ } dst = REG16(AX); result = (UINT32)src * (UINT32)dst; REG16(DX) = (UINT16)(result >> 16); REG16(AX) = (UINT16)result; m_CF = m_OF = (REG16(DX) != 0); } break; case 5: /* IMUL AX, Rm16 */ { INT32 result; INT32 src, dst; if( modrm >= 0xc0 ) { src = (INT32)(INT16)LOAD_RM16(modrm); CYCLES(CYCLES_IMUL16_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT32)(INT16)READ16(ea); CYCLES(CYCLES_IMUL16_ACC_MEM); /* TODO: Correct multiply timing */ } dst = (INT32)(INT16)REG16(AX); result = src * dst; REG16(DX) = (UINT16)(result >> 16); REG16(AX) = (UINT16)result; m_CF = m_OF = !(result == (INT32)(INT16)result); } break; case 6: /* DIV AX, Rm16 */ { UINT32 quotient, remainder, result; UINT16 src; if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); CYCLES(CYCLES_DIV16_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); CYCLES(CYCLES_DIV16_ACC_MEM); } quotient = ((UINT32)(REG16(DX)) << 16) | (UINT32)(REG16(AX)); if( src ) { remainder = quotient % (UINT32)src; result = quotient / (UINT32)src; if( result > 0xffff ) { /* TODO: Divide error */ } else { REG16(DX) = (UINT16)remainder; REG16(AX) = (UINT16)result; // this flag is actually undefined, enable on non-cyrix if (m_cpuid_id0 != 0x69727943) m_CF = 1; } } else { i386_trap(0, 0, 0); } } break; case 7: /* IDIV AX, Rm16 */ { INT32 quotient, remainder, result; UINT16 src; if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); CYCLES(CYCLES_IDIV16_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); CYCLES(CYCLES_IDIV16_ACC_MEM); } quotient = (((INT32)REG16(DX)) << 16) | ((UINT32)REG16(AX)); if( src ) { remainder = quotient % (INT32)(INT16)src; result = quotient / (INT32)(INT16)src; if( result > 0xffff ) { /* TODO: Divide error */ } else { REG16(DX) = (UINT16)remainder; REG16(AX) = (UINT16)result; // this flag is actually undefined, enable on non-cyrix if (m_cpuid_id0 != 0x69727943) m_CF = 1; } } else { i386_trap(0, 0, 0); } } break; } } static void I386OP(groupFF_16)() // Opcode 0xff { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* INC Rm16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); dst = INC16(dst); STORE_RM16(modrm, dst); CYCLES(CYCLES_INC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); dst = INC16(dst); WRITE16(ea, dst); CYCLES(CYCLES_INC_MEM); } break; case 1: /* DEC Rm16 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); dst = DEC16(dst); STORE_RM16(modrm, dst); CYCLES(CYCLES_DEC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); dst = DEC16(dst); WRITE16(ea, dst); CYCLES(CYCLES_DEC_MEM); } break; case 2: /* CALL Rm16 */ { UINT16 address; if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_CALL_REG); /* TODO: Timing = 7 + m */ } else { UINT32 ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_CALL_MEM); /* TODO: Timing = 10 + m */ } PUSH16(m_eip ); m_eip = address; CHANGE_PC(m_eip); } break; case 3: /* CALL FAR Rm16 */ { UINT16 address, selector; if( modrm >= 0xc0 ) { report_invalid_modrm("groupFF_16", modrm); } else { UINT32 ea = GetEA(modrm,0); address = READ16(ea + 0); selector = READ16(ea + 2); CYCLES(CYCLES_CALL_MEM_INTERSEG); /* TODO: Timing = 10 + m */ if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_call(selector,address,1,0); } else { PUSH16(m_sreg[CS].selector ); PUSH16(m_eip ); m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS ); m_eip = address; CHANGE_PC(m_eip); } } } break; case 4: /* JMP Rm16 */ { UINT16 address; if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_JMP_REG); /* TODO: Timing = 7 + m */ } else { UINT32 ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_JMP_MEM); /* TODO: Timing = 10 + m */ } m_eip = address; CHANGE_PC(m_eip); } break; case 5: /* JMP FAR Rm16 */ { UINT16 address, selector; if( modrm >= 0xc0 ) { report_invalid_modrm("groupFF_16", modrm); } else { UINT32 ea = GetEA(modrm,0); address = READ16(ea + 0); selector = READ16(ea + 2); CYCLES(CYCLES_JMP_MEM_INTERSEG); /* TODO: Timing = 10 + m */ if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(selector,address,1,0); } else { m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS ); m_eip = address; CHANGE_PC(m_eip); } } } break; case 6: /* PUSH Rm16 */ { UINT16 value; if( modrm >= 0xc0 ) { value = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); value = READ16(ea); } PUSH16(value); CYCLES(CYCLES_PUSH_RM); } break; default: report_invalid_modrm("groupFF_16", modrm); break; } } static void I386OP(group0F00_16)() // Opcode 0x0f 00 { UINT32 address, ea; UINT8 modrm = FETCH(); I386_SREG seg; UINT8 result; switch( (modrm >> 3) & 0x7 ) { case 0: /* SLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { STORE_RM16(modrm, m_ldtr.segment); CYCLES(CYCLES_SLDT_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_ldtr.segment); CYCLES(CYCLES_SLDT_MEM); } } else { i386_trap(6, 0, 0); } break; case 1: /* STR */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { STORE_RM16(modrm, m_task.segment); CYCLES(CYCLES_STR_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_task.segment); CYCLES(CYCLES_STR_MEM); } } else { i386_trap(6, 0, 0); } break; case 2: /* LLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); m_ldtr.segment = address; CYCLES(CYCLES_LLDT_REG); } else { ea = GetEA(modrm,0); m_ldtr.segment = READ16(ea); CYCLES(CYCLES_LLDT_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = m_ldtr.segment; i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = seg.limit; m_ldtr.base = seg.base; m_ldtr.flags = seg.flags; } else { i386_trap(6, 0, 0); } break; case 3: /* LTR */ if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); m_task.segment = address; CYCLES(CYCLES_LTR_REG); } else { ea = GetEA(modrm,0); m_task.segment = READ16(ea); CYCLES(CYCLES_LTR_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = m_task.segment; i386_load_protected_mode_segment(&seg,NULL); UINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5; i386_translate_address(TRANSLATE_READ, &addr, NULL); write_byte(addr, (seg.flags & 0xff) | 2); m_task.limit = seg.limit; m_task.base = seg.base; m_task.flags = seg.flags | 2; } else { i386_trap(6, 0, 0); } break; case 4: /* VERR */ if ( PROTECTED_MODE && !V8086_MODE ) { result = 1; if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_VERR_REG); } else { ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_VERR_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = address; result = i386_load_protected_mode_segment(&seg,NULL); // check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...) if(!(seg.flags & 0x10)) result = 0; // check that the segment is readable if(seg.flags & 0x10) // is code or data segment { if(seg.flags & 0x08) // is code segment, so check if it's readable { if(!(seg.flags & 0x02)) { result = 0; } else { // check if conforming, these are always readable, regardless of privilege if(!(seg.flags & 0x04)) { // if not conforming, then we must check privilege levels (TODO: current privilege level check) if(((seg.flags >> 5) & 0x03) < (address & 0x03)) result = 0; } } } } // check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO) SetZF(result); } else { i386_trap(6, 0, 0); logerror("i386: VERR: Exception - Running in real mode or virtual 8086 mode.\n"); } break; case 5: /* VERW */ if ( PROTECTED_MODE && !V8086_MODE ) { result = 1; if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_VERW_REG); } else { ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_VERW_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = address; result = i386_load_protected_mode_segment(&seg,NULL); // check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...) if(!(seg.flags & 0x10)) result = 0; // check that the segment is writable if(seg.flags & 0x10) // is code or data segment { if(seg.flags & 0x08) // is code segment (and thus, not writable) { result = 0; } else { // is data segment if(!(seg.flags & 0x02)) result = 0; } } // check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO) if(((seg.flags >> 5) & 0x03) < (address & 0x03)) result = 0; SetZF(result); } else { i386_trap(6, 0, 0); logerror("i386: VERW: Exception - Running in real mode or virtual 8086 mode.\n"); } break; default: report_invalid_modrm("group0F00_16", modrm); break; } } static void I386OP(group0F01_16)() // Opcode 0x0f 01 { UINT8 modrm = FETCH(); UINT16 address; UINT32 ea; switch( (modrm >> 3) & 0x7 ) { case 0: /* SGDT */ { if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate(CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_gdtr.limit); WRITE32(ea + 2, m_gdtr.base & 0xffffff); CYCLES(CYCLES_SGDT); break; } case 1: /* SIDT */ { if (modrm >= 0xc0) { address = LOAD_RM16(modrm); ea = i386_translate(CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_idtr.limit); WRITE32(ea + 2, m_idtr.base & 0xffffff); CYCLES(CYCLES_SIDT); break; } case 2: /* LGDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate(CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_gdtr.limit = READ16(ea); m_gdtr.base = READ32(ea + 2) & 0xffffff; CYCLES(CYCLES_LGDT); break; } case 3: /* LIDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate(CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_idtr.limit = READ16(ea); m_idtr.base = READ32(ea + 2) & 0xffffff; CYCLES(CYCLES_LIDT); break; } case 4: /* SMSW */ { if( modrm >= 0xc0 ) { STORE_RM16(modrm, m_cr[0]); CYCLES(CYCLES_SMSW_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_cr[0]); CYCLES(CYCLES_SMSW_MEM); } break; } case 6: /* LMSW */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) UINT16 b; if( modrm >= 0xc0 ) { b = LOAD_RM16(modrm); CYCLES(CYCLES_LMSW_REG); } else { ea = GetEA(modrm,0); CYCLES(CYCLES_LMSW_MEM); b = READ16(ea); } if(PROTECTED_MODE) b |= 0x0001; // cannot return to real mode using this instruction. m_cr[0] &= ~0x0000000f; m_cr[0] |= b & 0x0000000f; break; } default: report_invalid_modrm("group0F01_16", modrm); break; } } static void I386OP(group0FBA_16)() // Opcode 0x0f ba { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 4: /* BT Rm16, i8 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT16 dst = READ16(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_IMM_MEM); } break; case 5: /* BTS Rm16, i8 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTS_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTS_IMM_MEM); } break; case 6: /* BTR Rm16, i8 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTR_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTR_IMM_MEM); } break; case 7: /* BTC Rm16, i8 */ if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); STORE_RM16(modrm, dst); CYCLES(CYCLES_BTC_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); WRITE16(ea, dst); CYCLES(CYCLES_BTC_IMM_MEM); } break; default: report_invalid_modrm("group0FBA_16", modrm); break; } } static void I386OP(lar_r16_rm16)() // Opcode 0x0f 0x02 { UINT8 modrm = FETCH(); I386_SREG seg; UINT8 type; if(PROTECTED_MODE && !V8086_MODE) { memset(&seg,0,sizeof(seg)); if(modrm >= 0xc0) { seg.selector = LOAD_RM16(modrm); CYCLES(CYCLES_LAR_REG); } else { UINT32 ea = GetEA(modrm,0); seg.selector = READ16(ea); CYCLES(CYCLES_LAR_MEM); } if(seg.selector == 0) { SetZF(0); // not a valid segment // logerror("i386 (%08x): LAR: Selector %04x is invalid type.\n",m_pc,seg.selector); } else { if(!i386_load_protected_mode_segment(&seg,NULL)) { SetZF(0); return; } UINT8 DPL = (seg.flags >> 5) & 3; if(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c)) { SetZF(0); return; } if(!(seg.flags & 0x10)) // special segment { // check for invalid segment types type = seg.flags & 0x000f; if(type == 0x00 || type == 0x08 || type == 0x0a || type == 0x0d) { SetZF(0); // invalid segment type } else { STORE_REG16(modrm,(seg.flags << 8) & 0xff00); SetZF(1); } } else { // data or code segment (both are valid for LAR) STORE_REG16(modrm,(seg.flags << 8) & 0xff00); SetZF(1); } } } else { // illegal opcode i386_trap(6,0, 0); logerror("i386: LAR: Exception - running in real mode or virtual 8086 mode.\n"); } } static void I386OP(lsl_r16_rm16)() // Opcode 0x0f 0x03 { UINT8 modrm = FETCH(); UINT32 limit; I386_SREG seg; if(PROTECTED_MODE && !V8086_MODE) { memset(&seg, 0, sizeof(seg)); if(modrm >= 0xc0) { seg.selector = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); seg.selector = READ16(ea); } if(seg.selector == 0) { SetZF(0); // not a valid segment } else { UINT8 type; if(!i386_load_protected_mode_segment(&seg,NULL)) { SetZF(0); return; } UINT8 DPL = (seg.flags >> 5) & 3; if(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c)) { SetZF(0); return; } type = seg.flags & 0x1f; switch(type) { case 0: case 4: case 5: case 6: case 7: case 8: case 10: case 12: case 13: case 14: case 15: SetZF(0); return; default: limit = seg.limit; STORE_REG16(modrm,limit & 0x0000ffff); SetZF(1); } } } else i386_trap(6, 0, 0); } static void I386OP(bound_r16_m16_m16)() // Opcode 0x62 { UINT8 modrm; INT16 val, low, high; modrm = FETCH(); if (modrm >= 0xc0) { low = high = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); low = READ16(ea + 0); high = READ16(ea + 2); } val = LOAD_REG16(modrm); if ((val < low) || (val > high)) { CYCLES(CYCLES_BOUND_OUT_RANGE); i386_trap(5, 0, 0); } else { CYCLES(CYCLES_BOUND_IN_RANGE); } } static void I386OP(retf16)() // Opcode 0xcb { if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_retf(0,0); } else { m_eip = POP16(); m_sreg[CS].selector = POP16(); i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); } CYCLES(CYCLES_RET_INTERSEG); } static void I386OP(retf_i16)() // Opcode 0xca { UINT16 count = FETCH16(); if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_retf(count,0); } else { m_eip = POP16(); m_sreg[CS].selector = POP16(); i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); REG16(SP) += count; } CYCLES(CYCLES_RET_IMM_INTERSEG); } static bool I386OP(load_far_pointer16)(int s) { UINT8 modrm = FETCH(); UINT16 selector; if( modrm >= 0xc0 ) { //logerror("i386: load_far_pointer16 NYI\n"); // don't log, NT will use this a lot i386_trap(6, 0, 0); return false; } else { UINT32 ea = GetEA(modrm,0); STORE_REG16(modrm, READ16(ea + 0)); selector = READ16(ea + 2); i386_sreg_load(selector,s,NULL); } return true; } static void I386OP(lds16)() // Opcode 0xc5 { if(I386OP(load_far_pointer16)(DS)) { CYCLES(CYCLES_LDS); } } static void I386OP(lss16)() // Opcode 0x0f 0xb2 { if(I386OP(load_far_pointer16)(SS)) { CYCLES(CYCLES_LSS); } } static void I386OP(les16)() // Opcode 0xc4 { if(I386OP(load_far_pointer16)(ES)) { CYCLES(CYCLES_LES); } } static void I386OP(lfs16)() // Opcode 0x0f 0xb4 { if(I386OP(load_far_pointer16)(FS)) { CYCLES(CYCLES_LFS); } } static void I386OP(lgs16)() // Opcode 0x0f 0xb5 { if(I386OP(load_far_pointer16)(GS)) { CYCLES(CYCLES_LGS); } } ================================================ FILE: vm86/mame/emu/cpu/i386.old/i386op32.c ================================================ static UINT32 I386OP(shift_rotate32)(UINT8 modrm, UINT32 value, UINT8 shift) { UINT32 dst, src; dst = value; src = value; if( shift == 0 ) { CYCLES_RM(modrm, 3, 7); } else if( shift == 1 ) { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm32, 1 */ m_CF = (src & 0x80000000) ? 1 : 0; dst = (src << 1) + m_CF; m_OF = ((src ^ dst) & 0x80000000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm32, 1 */ m_CF = (src & 0x1) ? 1 : 0; dst = (m_CF << 31) | (src >> 1); m_OF = ((src ^ dst) & 0x80000000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm32, 1 */ dst = (src << 1) + m_CF; m_CF = (src & 0x80000000) ? 1 : 0; m_OF = ((src ^ dst) & 0x80000000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm32, 1 */ dst = (m_CF << 31) | (src >> 1); m_CF = src & 0x1; m_OF = ((src ^ dst) & 0x80000000) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm32, 1 */ case 6: dst = src << 1; m_CF = (src & 0x80000000) ? 1 : 0; m_OF = (((m_CF << 31) ^ dst) & 0x80000000) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm32, 1 */ dst = src >> 1; m_CF = src & 0x1; m_OF = (src & 0x80000000) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm32, 1 */ dst = (INT32)(src) >> 1; m_CF = src & 0x1; m_OF = 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } else { shift &= 31; switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm32, i8 */ dst = ((src & ((UINT32)0xffffffff >> shift)) << shift) | ((src & ((UINT32)0xffffffff << (32-shift))) >> (32-shift)); m_CF = dst & 0x1; m_OF = (dst & 1) ^ (dst >> 31); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm32, i8 */ dst = ((src & ((UINT32)0xffffffff << shift)) >> shift) | ((src & ((UINT32)0xffffffff >> (32-shift))) << (32-shift)); m_CF = (dst >> 31) & 0x1; m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm32, i8 */ dst = ((src & ((UINT32)0xffffffff >> shift)) << shift) | ((src & ((UINT32)0xffffffff << (33-shift))) >> (33-shift)) | (m_CF << (shift-1)); m_CF = (src >> (32-shift)) & 0x1; m_OF = m_CF ^ ((dst >> 31) & 1); CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm32, i8 */ dst = ((src & ((UINT32)0xffffffff << shift)) >> shift) | ((src & ((UINT32)0xffffffff >> (32-shift))) << (33-shift)) | (m_CF << (32-shift)); m_CF = (src >> (shift-1)) & 0x1; m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm32, i8 */ case 6: dst = src << shift; m_CF = (src & (1 << (32-shift))) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm32, i8 */ dst = src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm32, i8 */ dst = (INT32)src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF32(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } return dst; } static void I386OP(adc_rm32_r32)() // Opcode 0x11 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = ADC32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = ADC32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(adc_r32_rm32)() // Opcode 0x13 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = ADC32(dst, src, m_CF); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = ADC32(dst, src, m_CF); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(adc_eax_i32)() // Opcode 0x15 { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = ADC32(dst, src, m_CF); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(add_rm32_r32)() // Opcode 0x01 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = ADD32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = ADD32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(add_r32_rm32)() // Opcode 0x03 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = ADD32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = ADD32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(add_eax_i32)() // Opcode 0x05 { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = ADD32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(and_rm32_r32)() // Opcode 0x21 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = AND32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = AND32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(and_r32_rm32)() // Opcode 0x23 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = AND32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = AND32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(and_eax_i32)() // Opcode 0x25 { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = AND32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(bsf_r32_rm32)() // Opcode 0x0f bc { UINT32 src, dst, temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); } dst = 0; if( src == 0 ) { m_ZF = 1; } else { m_ZF = 0; temp = 0; while( (src & (1 << temp)) == 0 ) { temp++; dst = temp; CYCLES(CYCLES_BSF); } STORE_REG32(modrm, dst); } CYCLES(CYCLES_BSF_BASE); } static void I386OP(bsr_r32_rm32)() // Opcode 0x0f bd { UINT32 src, dst, temp; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); } dst = 0; if( src == 0 ) { m_ZF = 1; } else { m_ZF = 0; dst = temp = 31; while( (src & (1 << temp)) == 0 ) { temp--; dst = temp; CYCLES(CYCLES_BSR); } STORE_REG32(modrm, dst); } CYCLES(CYCLES_BSR_BASE); } static void I386OP(bt_rm32_r32)() // Opcode 0x0f a3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 bit = LOAD_REG32(modrm); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT32 bit = LOAD_REG32(modrm); ea += 4*(bit/32); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),0); bit %= 32; UINT32 dst = READ32(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_REG_MEM); } } static void I386OP(btc_rm32_r32)() // Opcode 0x0f bb { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 bit = LOAD_REG32(modrm); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTC_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT32 bit = LOAD_REG32(modrm); ea += 4*(bit/32); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 32; UINT32 dst = READ32(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTC_REG_MEM); } } static void I386OP(btr_rm32_r32)() // Opcode 0x0f b3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 bit = LOAD_REG32(modrm); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTR_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT32 bit = LOAD_REG32(modrm); ea += 4*(bit/32); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 32; UINT32 dst = READ32(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTR_REG_MEM); } } static void I386OP(bts_rm32_r32)() // Opcode 0x0f ab { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 bit = LOAD_REG32(modrm); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTS_REG_REG); } else { UINT8 segment; UINT32 ea = GetNonTranslatedEA(modrm,&segment); UINT32 bit = LOAD_REG32(modrm); ea += 4*(bit/32); ea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1); bit %= 32; UINT32 dst = READ32(ea); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTS_REG_MEM); } } static void I386OP(call_abs32)() // Opcode 0x9a { UINT32 offset = FETCH32(); UINT16 ptr = FETCH16(); if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_call(ptr,offset,0,1); } else { PUSH32(m_sreg[CS].selector ); PUSH32(m_eip ); m_sreg[CS].selector = ptr; m_performed_intersegment_jump = 1; m_eip = offset; i386_load_segment_descriptor(CS); } CYCLES(CYCLES_CALL_INTERSEG); CHANGE_PC(m_eip); } static void I386OP(call_rel32)() // Opcode 0xe8 { INT32 disp = FETCH32(); PUSH32(m_eip ); m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_CALL); /* TODO: Timing = 7 + m */ } static void I386OP(cdq)() // Opcode 0x99 { if( REG32(EAX) & 0x80000000 ) { REG32(EDX) = 0xffffffff; } else { REG32(EDX) = 0x00000000; } CYCLES(CYCLES_CWD); } static void I386OP(cmp_rm32_r32)() // Opcode 0x39 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG32(modrm); dst = READ32(ea); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } } static void I386OP(cmp_r32_rm32)() // Opcode 0x3b { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); SUB32(dst, src); CYCLES(CYCLES_CMP_MEM_REG); } } static void I386OP(cmp_eax_i32)() // Opcode 0x3d { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); SUB32(dst, src); CYCLES(CYCLES_CMP_IMM_ACC); } static void I386OP(cmpsd)() // Opcode 0xa7 { UINT32 eas, ead, src, dst; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ32(eas); dst = READ32(ead); SUB32(src,dst); BUMP_SI(4); BUMP_DI(4); CYCLES(CYCLES_CMPS); } static void I386OP(cwde)() // Opcode 0x98 { REG32(EAX) = (INT32)((INT16)REG16(AX)); CYCLES(CYCLES_CBW); } static void I386OP(dec_eax)() // Opcode 0x48 { REG32(EAX) = DEC32(REG32(EAX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_ecx)() // Opcode 0x49 { REG32(ECX) = DEC32(REG32(ECX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_edx)() // Opcode 0x4a { REG32(EDX) = DEC32(REG32(EDX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_ebx)() // Opcode 0x4b { REG32(EBX) = DEC32(REG32(EBX) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_esp)() // Opcode 0x4c { REG32(ESP) = DEC32(REG32(ESP) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_ebp)() // Opcode 0x4d { REG32(EBP) = DEC32(REG32(EBP) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_esi)() // Opcode 0x4e { REG32(ESI) = DEC32(REG32(ESI) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(dec_edi)() // Opcode 0x4f { REG32(EDI) = DEC32(REG32(EDI) ); CYCLES(CYCLES_DEC_REG); } static void I386OP(imul_r32_rm32)() // Opcode 0x0f af { UINT8 modrm = FETCH(); INT64 result; INT64 src, dst; if( modrm >= 0xc0 ) { src = (INT64)(INT32)LOAD_RM32(modrm); CYCLES(CYCLES_IMUL32_REG_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT64)(INT32)READ32(ea); CYCLES(CYCLES_IMUL32_REG_REG); /* TODO: Correct multiply timing */ } dst = (INT64)(INT32)LOAD_REG32(modrm); result = src * dst; STORE_REG32(modrm, (UINT32)result); m_CF = m_OF = !(result == (INT64)(INT32)result); } static void I386OP(imul_r32_rm32_i32)() // Opcode 0x69 { UINT8 modrm = FETCH(); INT64 result; INT64 src, dst; if( modrm >= 0xc0 ) { dst = (INT64)(INT32)LOAD_RM32(modrm); CYCLES(CYCLES_IMUL32_REG_IMM_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); dst = (INT64)(INT32)READ32(ea); CYCLES(CYCLES_IMUL32_MEM_IMM_REG); /* TODO: Correct multiply timing */ } src = (INT64)(INT32)FETCH32(); result = src * dst; STORE_REG32(modrm, (UINT32)result); m_CF = m_OF = !(result == (INT64)(INT32)result); } static void I386OP(imul_r32_rm32_i8)() // Opcode 0x6b { UINT8 modrm = FETCH(); INT64 result; INT64 src, dst; if( modrm >= 0xc0 ) { dst = (INT64)(INT32)LOAD_RM32(modrm); CYCLES(CYCLES_IMUL32_REG_IMM_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); dst = (INT64)(INT32)READ32(ea); CYCLES(CYCLES_IMUL32_MEM_IMM_REG); /* TODO: Correct multiply timing */ } src = (INT64)(INT8)FETCH(); result = src * dst; STORE_REG32(modrm, (UINT32)result); m_CF = m_OF = !(result == (INT64)(INT32)result); } static void I386OP(in_eax_i8)() // Opcode 0xe5 { UINT16 port = FETCH(); UINT32 data = READPORT32(port); REG32(EAX) = data; CYCLES(CYCLES_IN_VAR); } static void I386OP(in_eax_dx)() // Opcode 0xed { UINT16 port = REG16(DX); UINT32 data = READPORT32(port); REG32(EAX) = data; CYCLES(CYCLES_IN); } static void I386OP(inc_eax)() // Opcode 0x40 { REG32(EAX) = INC32(REG32(EAX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_ecx)() // Opcode 0x41 { REG32(ECX) = INC32(REG32(ECX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_edx)() // Opcode 0x42 { REG32(EDX) = INC32(REG32(EDX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_ebx)() // Opcode 0x43 { REG32(EBX) = INC32(REG32(EBX) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_esp)() // Opcode 0x44 { REG32(ESP) = INC32(REG32(ESP) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_ebp)() // Opcode 0x45 { REG32(EBP) = INC32(REG32(EBP) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_esi)() // Opcode 0x46 { REG32(ESI) = INC32(REG32(ESI) ); CYCLES(CYCLES_INC_REG); } static void I386OP(inc_edi)() // Opcode 0x47 { REG32(EDI) = INC32(REG32(EDI) ); CYCLES(CYCLES_INC_REG); } static void I386OP(iret32)() // Opcode 0xcf { UINT32 old = m_eip; if( PROTECTED_MODE ) { i386_protected_mode_iret(1); } else { /* TODO: #SS(0) exception */ /* TODO: #GP(0) exception */ m_eip = POP32(); m_sreg[CS].selector = POP32() & 0xffff; set_flags(POP32() ); i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } CYCLES(CYCLES_IRET); // MS-DOS system call if(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) { msdos_syscall(old - IRET_TOP); } } static void I386OP(ja_rel32)() // Opcode 0x0f 87 { INT32 disp = FETCH32(); if( m_CF == 0 && m_ZF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jbe_rel32)() // Opcode 0x0f 86 { INT32 disp = FETCH32(); if( m_CF != 0 || m_ZF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jc_rel32)() // Opcode 0x0f 82 { INT32 disp = FETCH32(); if( m_CF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jg_rel32)() // Opcode 0x0f 8f { INT32 disp = FETCH32(); if( m_ZF == 0 && (m_SF == m_OF) ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jge_rel32)() // Opcode 0x0f 8d { INT32 disp = FETCH32(); if(m_SF == m_OF) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jl_rel32)() // Opcode 0x0f 8c { INT32 disp = FETCH32(); if( (m_SF != m_OF) ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jle_rel32)() // Opcode 0x0f 8e { INT32 disp = FETCH32(); if( m_ZF != 0 || (m_SF != m_OF) ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnc_rel32)() // Opcode 0x0f 83 { INT32 disp = FETCH32(); if( m_CF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jno_rel32)() // Opcode 0x0f 81 { INT32 disp = FETCH32(); if( m_OF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnp_rel32)() // Opcode 0x0f 8b { INT32 disp = FETCH32(); if( m_PF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jns_rel32)() // Opcode 0x0f 89 { INT32 disp = FETCH32(); if( m_SF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jnz_rel32)() // Opcode 0x0f 85 { INT32 disp = FETCH32(); if( m_ZF == 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jo_rel32)() // Opcode 0x0f 80 { INT32 disp = FETCH32(); if( m_OF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jp_rel32)() // Opcode 0x0f 8a { INT32 disp = FETCH32(); if( m_PF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(js_rel32)() // Opcode 0x0f 88 { INT32 disp = FETCH32(); if( m_SF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jz_rel32)() // Opcode 0x0f 84 { INT32 disp = FETCH32(); if( m_ZF != 0 ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCC_FULL_DISP); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH); } } static void I386OP(jcxz32)() // Opcode 0xe3 { INT8 disp = FETCH(); int val = (m_address_size)?(REG32(ECX) == 0):(REG16(CX) == 0); if( val ) { m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JCXZ); /* TODO: Timing = 9 + m */ } else { CYCLES(CYCLES_JCXZ_NOBRANCH); } } static void I386OP(jmp_rel32)() // Opcode 0xe9 { UINT32 disp = FETCH32(); /* TODO: Segment limit */ m_eip += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_JMP); /* TODO: Timing = 7 + m */ } static void I386OP(jmp_abs32)() // Opcode 0xea { UINT32 address = FETCH32(); UINT16 segment = FETCH16(); if( PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(segment,address,0,1); } else { m_eip = address; m_sreg[CS].selector = segment; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); } CYCLES(CYCLES_JMP_INTERSEG); } static void I386OP(lea32)() // Opcode 0x8d { UINT8 modrm = FETCH(); UINT32 ea = GetNonTranslatedEA(modrm,NULL); if (!m_address_size) { ea &= 0xffff; } STORE_REG32(modrm, ea); CYCLES(CYCLES_LEA); } static void I386OP(enter32)() // Opcode 0xc8 { UINT16 framesize = FETCH16(); UINT8 level = FETCH() % 32; UINT8 x; UINT32 frameptr; PUSH32(REG32(EBP)); if(!STACK_32BIT) frameptr = REG16(SP); else frameptr = REG32(ESP); if(level > 0) { for(x=1;x= 0xc0 ) { src = LOAD_REG32(modrm); STORE_RM32(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); WRITE32(ea, src); CYCLES(CYCLES_MOV_REG_MEM); } } static void I386OP(mov_r32_rm32)() // Opcode 0x8b { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOV_MEM_REG); } } static void I386OP(mov_rm32_i32)() // Opcode 0xc7 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 value = FETCH32(); STORE_RM32(modrm, value); CYCLES(CYCLES_MOV_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 value = FETCH32(); WRITE32(ea, value); CYCLES(CYCLES_MOV_IMM_MEM); } } static void I386OP(mov_eax_m32)() // Opcode 0xa1 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 0 ); } else { ea = i386_translate(DS, offset, 0 ); } REG32(EAX) = READ32(ea); CYCLES(CYCLES_MOV_MEM_ACC); } static void I386OP(mov_m32_eax)() // Opcode 0xa3 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 1 ); } else { ea = i386_translate(DS, offset, 1 ); } WRITE32(ea, REG32(EAX) ); CYCLES(CYCLES_MOV_ACC_MEM); } static void I386OP(mov_eax_i32)() // Opcode 0xb8 { REG32(EAX) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ecx_i32)() // Opcode 0xb9 { REG32(ECX) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_edx_i32)() // Opcode 0xba { REG32(EDX) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ebx_i32)() // Opcode 0xbb { REG32(EBX) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_esp_i32)() // Opcode 0xbc { REG32(ESP) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ebp_i32)() // Opcode 0xbd { REG32(EBP) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_esi_i32)() // Opcode 0xbe { REG32(ESI) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_edi_i32)() // Opcode 0xbf { REG32(EDI) = FETCH32(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(movsd)() // Opcode 0xa5 { UINT32 eas, ead, v; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); v = READ32(eas); WRITE32(ead, v); BUMP_SI(4); BUMP_DI(4); CYCLES(CYCLES_MOVS); } static void I386OP(movsx_r32_rm8)() // Opcode 0x0f be { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { INT32 src = (INT8)LOAD_RM8(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVSX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); INT32 src = (INT8)READ8(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVSX_MEM_REG); } } static void I386OP(movsx_r32_rm16)() // Opcode 0x0f bf { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { INT32 src = (INT16)LOAD_RM16(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVSX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); INT32 src = (INT16)READ16(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVSX_MEM_REG); } } static void I386OP(movzx_r32_rm8)() // Opcode 0x0f b6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 src = (UINT8)LOAD_RM8(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVZX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); UINT32 src = (UINT8)READ8(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVZX_MEM_REG); } } static void I386OP(movzx_r32_rm16)() // Opcode 0x0f b7 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 src = (UINT16)LOAD_RM16(modrm); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVZX_REG_REG); } else { UINT32 ea = GetEA(modrm,0); UINT32 src = (UINT16)READ16(ea); STORE_REG32(modrm, src); CYCLES(CYCLES_MOVZX_MEM_REG); } } static void I386OP(or_rm32_r32)() // Opcode 0x09 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = OR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = OR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(or_r32_rm32)() // Opcode 0x0b { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = OR32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = OR32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(or_eax_i32)() // Opcode 0x0d { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = OR32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(out_eax_i8)() // Opcode 0xe7 { UINT16 port = FETCH(); UINT32 data = REG32(EAX); WRITEPORT32(port, data); CYCLES(CYCLES_OUT_VAR); } static void I386OP(out_eax_dx)() // Opcode 0xef { UINT16 port = REG16(DX); UINT32 data = REG32(EAX); WRITEPORT32(port, data); CYCLES(CYCLES_OUT); } static void I386OP(pop_eax)() // Opcode 0x58 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EAX) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_ecx)() // Opcode 0x59 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(ECX) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_edx)() // Opcode 0x5a { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EDX) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_ebx)() // Opcode 0x5b { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EBX) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_esp)() // Opcode 0x5c { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(ESP) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_ebp)() // Opcode 0x5d { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EBP) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_esi)() // Opcode 0x5e { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(ESI) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static void I386OP(pop_edi)() // Opcode 0x5f { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) REG32(EDI) = POP32(); else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_REG_SHORT); } static bool I386OP(pop_seg32)(int segment) { UINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); UINT32 value; bool fault; if(i386_limit_check(SS,offset+3) == 0) { ea = i386_translate(SS, offset, 0); value = READ32(ea); i386_sreg_load(value, segment, &fault); if(fault) return false; if(STACK_32BIT) REG32(ESP) = offset + 4; else REG16(SP) = offset + 4; } else { m_ext = 1; i386_trap_with_error(FAULT_SS,0,0,0); return false; } CYCLES(CYCLES_POP_SREG); return true; } static void I386OP(pop_ds32)() // Opcode 0x1f { I386OP(pop_seg32)(DS); } static void I386OP(pop_es32)() // Opcode 0x07 { I386OP(pop_seg32)(ES); } static void I386OP(pop_fs32)() // Opcode 0x0f a1 { I386OP(pop_seg32)(FS); } static void I386OP(pop_gs32)() // Opcode 0x0f a9 { I386OP(pop_seg32)(GS); } static void I386OP(pop_ss32)() // Opcode 0x17 { if(!I386OP(pop_seg32)(SS)) return; if(m_IF != 0) // if external interrupts are enabled { m_IF = 0; // reset IF for the next instruction m_delayed_interrupt_enable = 1; } } static void I386OP(pop_rm32)() // Opcode 0x8f { UINT8 modrm = FETCH(); UINT32 value; UINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+3) == 0) { // be careful here, if the write references the esp register // it expects the post-pop value but esp must be wound back // if the write faults UINT32 temp_sp = REG32(ESP); value = POP32(); if( modrm >= 0xc0 ) { STORE_RM32(modrm, value); } else { ea = GetEA(modrm,1); try { WRITE32(ea, value); } catch(UINT64 e) { REG32(ESP) = temp_sp; throw e; } } } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POP_RM); } static void I386OP(popad)() // Opcode 0x61 { UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); if(i386_limit_check(SS,offset+31) == 0) { REG32(EDI) = POP32(); REG32(ESI) = POP32(); REG32(EBP) = POP32(); REG32(ESP) += 4; REG32(EBX) = POP32(); REG32(EDX) = POP32(); REG32(ECX) = POP32(); REG32(EAX) = POP32(); } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POPA); } static void I386OP(popfd)() // Opcode 0x9d { UINT32 value; UINT32 current = get_flags(); UINT8 IOPL = (current >> 12) & 0x03; UINT32 mask = 0x00257fd5; // VM, VIP and VIF cannot be set by POPF/POPFD UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP)); // IOPL can only change if CPL is 0 if(m_CPL != 0) mask &= ~0x00003000; // IF can only change if CPL is at least as privileged as IOPL if(m_CPL > IOPL) mask &= ~0x00000200; if(V8086_MODE) { if(IOPL < 3) { logerror("POPFD(%08x): IOPL < 3 while in V86 mode.\n",m_pc); FAULT(FAULT_GP,0) // #GP(0) } mask &= ~0x00003000; // IOPL cannot be changed while in V8086 mode } if(i386_limit_check(SS,offset+3) == 0) { value = POP32(); value &= ~0x00010000; // RF will always return zero set_flags((current & ~mask) | (value & mask)); // mask out reserved bits } else FAULT(FAULT_SS,0) CYCLES(CYCLES_POPF); } static void I386OP(push_eax)() // Opcode 0x50 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EAX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_ecx)() // Opcode 0x51 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(ECX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_edx)() // Opcode 0x52 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EDX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_ebx)() // Opcode 0x53 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EBX) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_esp)() // Opcode 0x54 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(ESP) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_ebp)() // Opcode 0x55 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EBP) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_esi)() // Opcode 0x56 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(ESI) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_edi)() // Opcode 0x57 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(REG32(EDI) ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_REG_SHORT); } static void I386OP(push_cs32)() // Opcode 0x0e { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[CS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_ds32)() // Opcode 0x1e { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[DS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_es32)() // Opcode 0x06 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[ES].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_fs32)() // Opcode 0x0f a0 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[FS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_gs32)() // Opcode 0x0f a8 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[GS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_ss32)() // Opcode 0x16 { UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(m_sreg[SS].selector ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_SREG); } static void I386OP(push_i32)() // Opcode 0x68 { UINT32 value = FETCH32(); UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(value); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSH_IMM); } static void I386OP(pushad)() // Opcode 0x60 { UINT32 temp = REG32(ESP); UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 32; else offset = (REG16(SP) - 32) & 0xffff; if(i386_limit_check(SS,offset) == 0) { PUSH32(REG32(EAX) ); PUSH32(REG32(ECX) ); PUSH32(REG32(EDX) ); PUSH32(REG32(EBX) ); PUSH32(temp ); PUSH32(REG32(EBP) ); PUSH32(REG32(ESI) ); PUSH32(REG32(EDI) ); } else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSHA); } static void I386OP(pushfd)() // Opcode 0x9c { if(!m_IOP1 && !m_IOP2 && V8086_MODE) FAULT(FAULT_GP,0) UINT32 offset; if(STACK_32BIT) offset = REG32(ESP) - 4; else offset = (REG16(SP) - 4) & 0xffff; if(i386_limit_check(SS,offset) == 0) PUSH32(get_flags() & 0x00fcffff ); else FAULT(FAULT_SS,0) CYCLES(CYCLES_PUSHF); } static void I386OP(ret_near32_i16)() // Opcode 0xc2 { INT16 disp = FETCH16(); m_eip = POP32(); REG32(ESP) += disp; CHANGE_PC(m_eip); CYCLES(CYCLES_RET_IMM); /* TODO: Timing = 10 + m */ } static void I386OP(ret_near32)() // Opcode 0xc3 { m_eip = POP32(); CHANGE_PC(m_eip); CYCLES(CYCLES_RET); /* TODO: Timing = 10 + m */ } static void I386OP(sbb_rm32_r32)() // Opcode 0x19 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = SBB32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = SBB32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sbb_r32_rm32)() // Opcode 0x1b { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = SBB32(dst, src, m_CF); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = SBB32(dst, src, m_CF); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sbb_eax_i32)() // Opcode 0x1d { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = SBB32(dst, src, m_CF); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(scasd)() // Opcode 0xaf { UINT32 eas, src, dst; eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ32(eas); dst = REG32(EAX); SUB32(dst, src); BUMP_DI(4); CYCLES(CYCLES_SCAS); } static void I386OP(shld32_i8)() // Opcode 0x0f a4 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (32-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 31); SetSZPF32(dst); } STORE_RM32(modrm, dst); CYCLES(CYCLES_SHLD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (32-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 31); SetSZPF32(dst); } WRITE32(ea, dst); CYCLES(CYCLES_SHLD_MEM); } } static void I386OP(shld32_cl)() // Opcode 0x0f a5 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (32-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 31); SetSZPF32(dst); } STORE_RM32(modrm, dst); CYCLES(CYCLES_SHLD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (32-shift))) ? 1 : 0; dst = (dst << shift) | (upper >> (32-shift)); m_OF = m_CF ^ (dst >> 31); SetSZPF32(dst); } WRITE32(ea, dst); CYCLES(CYCLES_SHLD_MEM); } } static void I386OP(shrd32_i8)() // Opcode 0x0f ac { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (32-shift)); m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; SetSZPF32(dst); } STORE_RM32(modrm, dst); CYCLES(CYCLES_SHRD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = FETCH(); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (32-shift)); m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; SetSZPF32(dst); } WRITE32(ea, dst); CYCLES(CYCLES_SHRD_MEM); } } static void I386OP(shrd32_cl)() // Opcode 0x0f ad { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (32-shift)); m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; SetSZPF32(dst); } STORE_RM32(modrm, dst); CYCLES(CYCLES_SHRD_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 upper = LOAD_REG32(modrm); UINT8 shift = REG8(CL); shift &= 31; if( shift == 0 ) { } else { m_CF = (dst & (1 << (shift-1))) ? 1 : 0; dst = (dst >> shift) | (upper << (32-shift)); m_OF = ((dst >> 31) ^ (dst >> 30)) & 1; SetSZPF32(dst); } WRITE32(ea, dst); CYCLES(CYCLES_SHRD_MEM); } } static void I386OP(stosd)() // Opcode 0xab { UINT32 eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); WRITE32(eas, REG32(EAX)); BUMP_DI(4); CYCLES(CYCLES_STOS); } static void I386OP(sub_rm32_r32)() // Opcode 0x29 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = SUB32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = SUB32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sub_r32_rm32)() // Opcode 0x2b { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = SUB32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = READ32(ea); dst = LOAD_REG32(modrm); dst = SUB32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sub_eax_i32)() // Opcode 0x2d { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = SUB32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(test_eax_i32)() // Opcode 0xa9 { UINT32 src = FETCH32(); UINT32 dst = REG32(EAX); dst = src & dst; SetSZPF32(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_IMM_ACC); } static void I386OP(test_rm32_r32)() // Opcode 0x85 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = src & dst; SetSZPF32(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG32(modrm); dst = READ32(ea); dst = src & dst; SetSZPF32(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_MEM); } } static void I386OP(xchg_eax_ecx)() // Opcode 0x91 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(ECX); REG32(ECX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_edx)() // Opcode 0x92 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(EDX); REG32(EDX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_ebx)() // Opcode 0x93 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(EBX); REG32(EBX) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_esp)() // Opcode 0x94 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(ESP); REG32(ESP) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_ebp)() // Opcode 0x95 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(EBP); REG32(EBP) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_esi)() // Opcode 0x96 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(ESI); REG32(ESI) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_eax_edi)() // Opcode 0x97 { UINT32 temp; temp = REG32(EAX); REG32(EAX) = REG32(EDI); REG32(EDI) = temp; CYCLES(CYCLES_XCHG_REG_REG); } static void I386OP(xchg_r32_rm32)() // Opcode 0x87 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 src = LOAD_RM32(modrm); UINT32 dst = LOAD_REG32(modrm); STORE_REG32(modrm, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_XCHG_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 src = READ32(ea); UINT32 dst = LOAD_REG32(modrm); WRITE32(ea, dst); STORE_REG32(modrm, src); CYCLES(CYCLES_XCHG_REG_MEM); } } static void I386OP(xor_rm32_r32)() // Opcode 0x31 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG32(modrm); dst = LOAD_RM32(modrm); dst = XOR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG32(modrm); dst = READ32(ea); dst = XOR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(xor_r32_rm32)() // Opcode 0x33 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); dst = LOAD_REG32(modrm); dst = XOR32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); dst = LOAD_REG32(modrm); dst = XOR32(dst, src); STORE_REG32(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(xor_eax_i32)() // Opcode 0x35 { UINT32 src, dst; src = FETCH32(); dst = REG32(EAX); dst = XOR32(dst, src); REG32(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(group81_32)() // Opcode 0x81 { UINT32 ea; UINT32 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = ADD32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = ADD32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = OR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = OR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = ADC32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = ADC32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = SBB32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = SBB32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = AND32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = AND32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = SUB32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = SUB32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); dst = XOR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = FETCH32(); dst = XOR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = FETCH32(); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ32(ea); src = FETCH32(); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(group83_32)() // Opcode 0x83 { UINT32 ea; UINT32 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = ADD32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = ADD32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = OR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = OR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = ADC32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = ADC32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = ((UINT32)(INT32)(INT8)FETCH()); dst = SBB32(dst, src, m_CF); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = ((UINT32)(INT32)(INT8)FETCH()); dst = SBB32(dst, src, m_CF); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = AND32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = AND32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = SUB32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = SUB32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); dst = XOR32(dst, src); STORE_RM32(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); dst = XOR32(dst, src); WRITE32(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm32, i32 if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); src = (UINT32)(INT32)(INT8)FETCH(); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ32(ea); src = (UINT32)(INT32)(INT8)FETCH(); SUB32(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(groupC1_32)() // Opcode 0xc1 { UINT32 dst; UINT8 modrm = FETCH(); UINT8 shift; if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); shift = FETCH() & 0x1f; dst = i386_shift_rotate32(modrm, dst, shift); STORE_RM32(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ32(ea); shift = FETCH() & 0x1f; dst = i386_shift_rotate32(modrm, dst, shift); WRITE32(ea, dst); } } static void I386OP(groupD1_32)() // Opcode 0xd1 { UINT32 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); dst = i386_shift_rotate32(modrm, dst, 1); STORE_RM32(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ32(ea); dst = i386_shift_rotate32(modrm, dst, 1); WRITE32(ea, dst); } } static void I386OP(groupD3_32)() // Opcode 0xd3 { UINT32 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM32(modrm); dst = i386_shift_rotate32(modrm, dst, REG8(CL)); STORE_RM32(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ32(ea); dst = i386_shift_rotate32(modrm, dst, REG8(CL)); WRITE32(ea, dst); } } static void I386OP(groupF7_32)() // Opcode 0xf7 { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* TEST Rm32, i32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 src = FETCH32(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF32(dst); CYCLES(CYCLES_TEST_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT32 dst = READ32(ea); UINT32 src = FETCH32(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF32(dst); CYCLES(CYCLES_TEST_IMM_MEM); } break; case 2: /* NOT Rm32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); dst = ~dst; STORE_RM32(modrm, dst); CYCLES(CYCLES_NOT_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); dst = ~dst; WRITE32(ea, dst); CYCLES(CYCLES_NOT_MEM); } break; case 3: /* NEG Rm32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); dst = SUB32(0, dst ); STORE_RM32(modrm, dst); CYCLES(CYCLES_NEG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); dst = SUB32(0, dst ); WRITE32(ea, dst); CYCLES(CYCLES_NEG_MEM); } break; case 4: /* MUL EAX, Rm32 */ { UINT64 result; UINT32 src, dst; if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); CYCLES(CYCLES_MUL32_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); CYCLES(CYCLES_MUL32_ACC_MEM); /* TODO: Correct multiply timing */ } dst = REG32(EAX); result = (UINT64)src * (UINT64)dst; REG32(EDX) = (UINT32)(result >> 32); REG32(EAX) = (UINT32)result; m_CF = m_OF = (REG32(EDX) != 0); } break; case 5: /* IMUL EAX, Rm32 */ { INT64 result; INT64 src, dst; if( modrm >= 0xc0 ) { src = (INT64)(INT32)LOAD_RM32(modrm); CYCLES(CYCLES_IMUL32_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT64)(INT32)READ32(ea); CYCLES(CYCLES_IMUL32_ACC_MEM); /* TODO: Correct multiply timing */ } dst = (INT64)(INT32)REG32(EAX); result = src * dst; REG32(EDX) = (UINT32)(result >> 32); REG32(EAX) = (UINT32)result; m_CF = m_OF = !(result == (INT64)(INT32)result); } break; case 6: /* DIV EAX, Rm32 */ { UINT64 quotient, remainder, result; UINT32 src; if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); CYCLES(CYCLES_DIV32_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); CYCLES(CYCLES_DIV32_ACC_MEM); } quotient = ((UINT64)(REG32(EDX)) << 32) | (UINT64)(REG32(EAX)); if( src ) { remainder = quotient % (UINT64)src; result = quotient / (UINT64)src; if( result > 0xffffffff ) { /* TODO: Divide error */ } else { REG32(EDX) = (UINT32)remainder; REG32(EAX) = (UINT32)result; } } else { i386_trap(0, 0, 0); } } break; case 7: /* IDIV EAX, Rm32 */ { INT64 quotient, remainder, result; UINT32 src; if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); CYCLES(CYCLES_IDIV32_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); CYCLES(CYCLES_IDIV32_ACC_MEM); } quotient = (((INT64)REG32(EDX)) << 32) | ((UINT64)REG32(EAX)); if( src ) { remainder = quotient % (INT64)(INT32)src; result = quotient / (INT64)(INT32)src; if( result > 0xffffffff ) { /* TODO: Divide error */ } else { REG32(EDX) = (UINT32)remainder; REG32(EAX) = (UINT32)result; } } else { i386_trap(0, 0, 0); } } break; } } static void I386OP(groupFF_32)() // Opcode 0xff { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* INC Rm32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); dst = INC32(dst); STORE_RM32(modrm, dst); CYCLES(CYCLES_INC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); dst = INC32(dst); WRITE32(ea, dst); CYCLES(CYCLES_INC_MEM); } break; case 1: /* DEC Rm32 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); dst = DEC32(dst); STORE_RM32(modrm, dst); CYCLES(CYCLES_DEC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); dst = DEC32(dst); WRITE32(ea, dst); CYCLES(CYCLES_DEC_MEM); } break; case 2: /* CALL Rm32 */ { UINT32 address; if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); CYCLES(CYCLES_CALL_REG); /* TODO: Timing = 7 + m */ } else { UINT32 ea = GetEA(modrm,0); address = READ32(ea); CYCLES(CYCLES_CALL_MEM); /* TODO: Timing = 10 + m */ } PUSH32(m_eip ); m_eip = address; CHANGE_PC(m_eip); } break; case 3: /* CALL FAR Rm32 */ { UINT16 selector; UINT32 address; if( modrm >= 0xc0 ) { report_invalid_modrm("groupFF_32", modrm); } else { UINT32 ea = GetEA(modrm,0); address = READ32(ea + 0); selector = READ16(ea + 4); CYCLES(CYCLES_CALL_MEM_INTERSEG); /* TODO: Timing = 10 + m */ if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_call(selector,address,1,1); } else { PUSH32(m_sreg[CS].selector ); PUSH32(m_eip ); m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS ); m_eip = address; CHANGE_PC(m_eip); } } } break; case 4: /* JMP Rm32 */ { UINT32 address; if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); CYCLES(CYCLES_JMP_REG); /* TODO: Timing = 7 + m */ } else { UINT32 ea = GetEA(modrm,0); address = READ32(ea); CYCLES(CYCLES_JMP_MEM); /* TODO: Timing = 10 + m */ } m_eip = address; CHANGE_PC(m_eip); } break; case 5: /* JMP FAR Rm32 */ { UINT16 selector; UINT32 address; if( modrm >= 0xc0 ) { report_invalid_modrm("groupFF_32", modrm); } else { UINT32 ea = GetEA(modrm,0); address = READ32(ea + 0); selector = READ16(ea + 4); CYCLES(CYCLES_JMP_MEM_INTERSEG); /* TODO: Timing = 10 + m */ if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(selector,address,1,1); } else { m_sreg[CS].selector = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS ); m_eip = address; CHANGE_PC(m_eip); } } } break; case 6: /* PUSH Rm32 */ { UINT32 value; if( modrm >= 0xc0 ) { value = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); value = READ32(ea); } PUSH32(value); CYCLES(CYCLES_PUSH_RM); } break; default: report_invalid_modrm("groupFF_32", modrm); break; } } static void I386OP(group0F00_32)() // Opcode 0x0f 00 { UINT32 address, ea; UINT8 modrm = FETCH(); I386_SREG seg; UINT8 result; switch( (modrm >> 3) & 0x7 ) { case 0: /* SLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { STORE_RM32(modrm, m_ldtr.segment); CYCLES(CYCLES_SLDT_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_ldtr.segment); CYCLES(CYCLES_SLDT_MEM); } } else { i386_trap(6, 0, 0); } break; case 1: /* STR */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { STORE_RM32(modrm, m_task.segment); CYCLES(CYCLES_STR_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_task.segment); CYCLES(CYCLES_STR_MEM); } } else { i386_trap(6, 0, 0); } break; case 2: /* LLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); m_ldtr.segment = address; CYCLES(CYCLES_LLDT_REG); } else { ea = GetEA(modrm,0); m_ldtr.segment = READ32(ea); CYCLES(CYCLES_LLDT_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = m_ldtr.segment; i386_load_protected_mode_segment(&seg,NULL); m_ldtr.limit = seg.limit; m_ldtr.base = seg.base; m_ldtr.flags = seg.flags; } else { i386_trap(6, 0, 0); } break; case 3: /* LTR */ if ( PROTECTED_MODE && !V8086_MODE ) { if(m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); m_task.segment = address; CYCLES(CYCLES_LTR_REG); } else { ea = GetEA(modrm,0); m_task.segment = READ32(ea); CYCLES(CYCLES_LTR_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = m_task.segment; i386_load_protected_mode_segment(&seg,NULL); UINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5; i386_translate_address(TRANSLATE_READ, &addr, NULL); write_byte(addr, (seg.flags & 0xff) | 2); m_task.limit = seg.limit; m_task.base = seg.base; m_task.flags = seg.flags | 2; } else { i386_trap(6, 0, 0); } break; case 4: /* VERR */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); CYCLES(CYCLES_VERR_REG); } else { ea = GetEA(modrm,0); address = READ32(ea); CYCLES(CYCLES_VERR_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = address; result = i386_load_protected_mode_segment(&seg,NULL); // check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...) if(!(seg.flags & 0x10)) result = 0; // check that the segment is readable if(seg.flags & 0x10) // is code or data segment { if(seg.flags & 0x08) // is code segment, so check if it's readable { if(!(seg.flags & 0x02)) { result = 0; } else { // check if conforming, these are always readable, regardless of privilege if(!(seg.flags & 0x04)) { // if not conforming, then we must check privilege levels (TODO: current privilege level check) if(((seg.flags >> 5) & 0x03) < (address & 0x03)) result = 0; } } } } // check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO) SetZF(result); } else { i386_trap(6, 0, 0); logerror("i386: VERR: Exception - Running in real mode or virtual 8086 mode.\n"); } break; case 5: /* VERW */ if ( PROTECTED_MODE && !V8086_MODE ) { if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); CYCLES(CYCLES_VERW_REG); } else { ea = GetEA(modrm,0); address = READ16(ea); CYCLES(CYCLES_VERW_MEM); } memset(&seg, 0, sizeof(seg)); seg.selector = address; result = i386_load_protected_mode_segment(&seg,NULL); // check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...) if(!(seg.flags & 0x10)) result = 0; // check that the segment is writable if(seg.flags & 0x10) // is code or data segment { if(seg.flags & 0x08) // is code segment (and thus, not writable) { result = 0; } else { // is data segment if(!(seg.flags & 0x02)) result = 0; } } // check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO) if(((seg.flags >> 5) & 0x03) < (address & 0x03)) result = 0; SetZF(result); } else { i386_trap(6, 0, 0); logerror("i386: VERW: Exception - Running in real mode or virtual 8086 mode.\n"); } break; default: report_invalid_modrm("group0F00_32", modrm); break; } } static void I386OP(group0F01_32)() // Opcode 0x0f 01 { UINT8 modrm = FETCH(); UINT32 address, ea; switch( (modrm >> 3) & 0x7 ) { case 0: /* SGDT */ { if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate(CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_gdtr.limit); WRITE32(ea + 2, m_gdtr.base); CYCLES(CYCLES_SGDT); break; } case 1: /* SIDT */ { if (modrm >= 0xc0) { address = LOAD_RM32(modrm); ea = i386_translate(CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_idtr.limit); WRITE32(ea + 2, m_idtr.base); CYCLES(CYCLES_SIDT); break; } case 2: /* LGDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate(CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_gdtr.limit = READ16(ea); m_gdtr.base = READ32(ea + 2); CYCLES(CYCLES_LGDT); break; } case 3: /* LIDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate(CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_idtr.limit = READ16(ea); m_idtr.base = READ32(ea + 2); CYCLES(CYCLES_LIDT); break; } case 4: /* SMSW */ { if( modrm >= 0xc0 ) { // smsw stores all of cr0 into register STORE_RM32(modrm, m_cr[0]); CYCLES(CYCLES_SMSW_REG); } else { /* always 16-bit memory operand */ ea = GetEA(modrm,1); WRITE16(ea, m_cr[0]); CYCLES(CYCLES_SMSW_MEM); } break; } case 6: /* LMSW */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) UINT16 b; if( modrm >= 0xc0 ) { b = LOAD_RM16(modrm); CYCLES(CYCLES_LMSW_REG); } else { ea = GetEA(modrm,0); CYCLES(CYCLES_LMSW_MEM); b = READ16(ea); } if(PROTECTED_MODE) b |= 0x0001; // cannot return to real mode using this instruction. m_cr[0] &= ~0x0000000f; m_cr[0] |= b & 0x0000000f; break; } default: report_invalid_modrm("group0F01_32", modrm); break; } } static void I386OP(group0FBA_32)() // Opcode 0x0f ba { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 4: /* BT Rm32, i8 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT32 dst = READ32(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; CYCLES(CYCLES_BT_IMM_MEM); } break; case 5: /* BTS Rm32, i8 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTS_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst |= (1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTS_IMM_MEM); } break; case 6: /* BTR Rm32, i8 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTR_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst &= ~(1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTR_IMM_MEM); } break; case 7: /* BTC Rm32, i8 */ if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); STORE_RM32(modrm, dst); CYCLES(CYCLES_BTC_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT8 bit = FETCH(); if( dst & (1 << bit) ) m_CF = 1; else m_CF = 0; dst ^= (1 << bit); WRITE32(ea, dst); CYCLES(CYCLES_BTC_IMM_MEM); } break; default: report_invalid_modrm("group0FBA_32", modrm); break; } } static void I386OP(lar_r32_rm32)() // Opcode 0x0f 0x02 { UINT8 modrm = FETCH(); I386_SREG seg; UINT8 type; if(PROTECTED_MODE && !V8086_MODE) { memset(&seg,0,sizeof(seg)); if(modrm >= 0xc0) { seg.selector = LOAD_RM32(modrm); CYCLES(CYCLES_LAR_REG); } else { UINT32 ea = GetEA(modrm,0); seg.selector = READ32(ea); CYCLES(CYCLES_LAR_MEM); } if(seg.selector == 0) { SetZF(0); // not a valid segment } else { UINT64 desc; if(!i386_load_protected_mode_segment(&seg,&desc)) { SetZF(0); return; } UINT8 DPL = (seg.flags >> 5) & 3; if(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c)) { SetZF(0); return; } if(!(seg.flags & 0x10)) // special segment { // check for invalid segment types type = seg.flags & 0x000f; if(type == 0x00 || type == 0x08 || type == 0x0a || type == 0x0d) { SetZF(0); // invalid segment type } else { STORE_REG32(modrm,(desc>>32) & 0x00ffff00); SetZF(1); } } else { STORE_REG32(modrm,(desc>>32) & 0x00ffff00); SetZF(1); } } } else { // illegal opcode i386_trap(6,0, 0); logerror("i386: LAR: Exception - running in real mode or virtual 8086 mode.\n"); } } static void I386OP(lsl_r32_rm32)() // Opcode 0x0f 0x03 { UINT8 modrm = FETCH(); UINT32 limit; I386_SREG seg; if(PROTECTED_MODE && !V8086_MODE) { memset(&seg, 0, sizeof(seg)); if(modrm >= 0xc0) { seg.selector = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); seg.selector = READ32(ea); } if(seg.selector == 0) { SetZF(0); // not a valid segment } else { UINT8 type; if(!i386_load_protected_mode_segment(&seg,NULL)) { SetZF(0); return; } UINT8 DPL = (seg.flags >> 5) & 3; if(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c)) { SetZF(0); return; } type = seg.flags & 0x1f; switch(type) { case 0: case 4: case 5: case 6: case 7: case 8: case 10: case 12: case 13: case 14: case 15: SetZF(0); return; default: limit = seg.limit; STORE_REG32(modrm,limit); SetZF(1); } } } else i386_trap(6, 0, 0); } static void I386OP(bound_r32_m32_m32)() // Opcode 0x62 { UINT8 modrm; INT32 val, low, high; modrm = FETCH(); if (modrm >= 0xc0) { low = high = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); low = READ32(ea + 0); high = READ32(ea + 4); } val = LOAD_REG32(modrm); if ((val < low) || (val > high)) { CYCLES(CYCLES_BOUND_OUT_RANGE); i386_trap(5, 0, 0); } else { CYCLES(CYCLES_BOUND_IN_RANGE); } } static void I386OP(retf32)() // Opcode 0xcb { if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_retf(0,1); } else { m_eip = POP32(); m_sreg[CS].selector = POP32(); i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); } CYCLES(CYCLES_RET_INTERSEG); } static void I386OP(retf_i32)() // Opcode 0xca { UINT16 count = FETCH16(); if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_retf(count,1); } else { m_eip = POP32(); m_sreg[CS].selector = POP32(); i386_load_segment_descriptor(CS ); CHANGE_PC(m_eip); REG32(ESP) += count; } CYCLES(CYCLES_RET_IMM_INTERSEG); } static void I386OP(load_far_pointer32)(int s) { UINT8 modrm = FETCH(); UINT16 selector; if( modrm >= 0xc0 ) { report_invalid_modrm("load_far_pointer32", modrm); } else { UINT32 ea = GetEA(modrm,0); STORE_REG32(modrm, READ32(ea + 0)); selector = READ16(ea + 4); i386_sreg_load(selector,s,NULL); } } static void I386OP(lds32)() // Opcode 0xc5 { I386OP(load_far_pointer32)(DS); CYCLES(CYCLES_LDS); } static void I386OP(lss32)() // Opcode 0x0f 0xb2 { I386OP(load_far_pointer32)(SS); CYCLES(CYCLES_LSS); } static void I386OP(les32)() // Opcode 0xc4 { I386OP(load_far_pointer32)(ES); CYCLES(CYCLES_LES); } static void I386OP(lfs32)() // Opcode 0x0f 0xb4 { I386OP(load_far_pointer32)(FS); CYCLES(CYCLES_LFS); } static void I386OP(lgs32)() // Opcode 0x0f 0xb5 { I386OP(load_far_pointer32)(GS); CYCLES(CYCLES_LGS); } ================================================ FILE: vm86/mame/emu/cpu/i386.old/i386ops.c ================================================ static UINT8 I386OP(shift_rotate8)(UINT8 modrm, UINT32 value, UINT8 shift) { UINT32 src = value & 0xff; UINT8 dst = value; if( shift == 0 ) { CYCLES_RM(modrm, 3, 7); } else if( shift == 1 ) { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm8, 1 */ m_CF = (src & 0x80) ? 1 : 0; dst = (src << 1) + m_CF; m_OF = ((src ^ dst) & 0x80) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm8, 1 */ m_CF = (src & 0x1) ? 1 : 0; dst = (m_CF << 7) | (src >> 1); m_OF = ((src ^ dst) & 0x80) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm8, 1 */ dst = (src << 1) + m_CF; m_CF = (src & 0x80) ? 1 : 0; m_OF = ((src ^ dst) & 0x80) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm8, 1 */ dst = (m_CF << 7) | (src >> 1); m_CF = src & 0x1; m_OF = ((src ^ dst) & 0x80) ? 1 : 0; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm8, 1 */ case 6: dst = src << 1; m_CF = (src & 0x80) ? 1 : 0; m_OF = (((m_CF << 7) ^ dst) & 0x80) ? 1 : 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm8, 1 */ dst = src >> 1; m_CF = src & 0x1; m_OF = (dst & 0x80) ? 1 : 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm8, 1 */ dst = (INT8)(src) >> 1; m_CF = src & 0x1; m_OF = 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } else { switch( (modrm >> 3) & 0x7 ) { case 0: /* ROL rm8, i8 */ if(!(shift & 7)) { if(shift & 0x18) { m_CF = src & 1; m_OF = (src & 1) ^ ((src >> 7) & 1); } break; } shift &= 7; dst = ((src & ((UINT8)0xff >> shift)) << shift) | ((src & ((UINT8)0xff << (8-shift))) >> (8-shift)); m_CF = dst & 0x1; m_OF = (dst & 1) ^ (dst >> 7); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 1: /* ROR rm8, i8 */ if(!(shift & 7)) { if(shift & 0x18) { m_CF = (src >> 7) & 1; m_OF = ((src >> 7) & 1) ^ ((src >> 6) & 1); } break; } shift &= 7; dst = ((src & ((UINT8)0xff << shift)) >> shift) | ((src & ((UINT8)0xff >> (8-shift))) << (8-shift)); m_CF = (dst >> 7) & 1; m_OF = ((dst >> 7) ^ (dst >> 6)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 2: /* RCL rm8, i8 */ shift %= 9; dst = ((src & ((UINT8)0xff >> shift)) << shift) | ((src & ((UINT8)0xff << (9-shift))) >> (9-shift)) | (m_CF << (shift-1)); if(shift) m_CF = (src >> (8-shift)) & 0x1; m_OF = m_CF ^ ((dst >> 7) & 1); CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 3: /* RCR rm8, i8 */ shift %= 9; dst = ((src & ((UINT8)0xff << shift)) >> shift) | ((src & ((UINT8)0xff >> (8-shift))) << (9-shift)) | (m_CF << (8-shift)); if(shift) m_CF = (src >> (shift-1)) & 0x1; m_OF = ((dst >> 7) ^ (dst >> 6)) & 1; CYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM); break; case 4: /* SHL/SAL rm8, i8 */ case 6: shift &= 31; dst = src << shift; m_CF = (shift <= 8) && ((src >> (8 - shift)) & 1); SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 5: /* SHR rm8, i8 */ shift &= 31; dst = src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; case 7: /* SAR rm8, i8 */ shift &= 31; dst = (INT8)src >> shift; m_CF = (src & (1 << (shift-1))) ? 1 : 0; SetSZPF8(dst); CYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM); break; } } return dst; } static void I386OP(adc_rm8_r8)() // Opcode 0x10 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = ADC8(dst, src, m_CF); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = ADC8(dst, src, m_CF); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(adc_r8_rm8)() // Opcode 0x12 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = ADC8(dst, src, m_CF); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = ADC8(dst, src, m_CF); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(adc_al_i8)() // Opcode 0x14 { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = ADC8(dst, src, m_CF); REG8(AL) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(add_rm8_r8)() // Opcode 0x00 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = ADD8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = ADD8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(add_r8_rm8)() // Opcode 0x02 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = ADD8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = ADD8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(add_al_i8)() // Opcode 0x04 { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = ADD8(dst, src); REG8(AL) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(and_rm8_r8)() // Opcode 0x20 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = AND8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = AND8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(and_r8_rm8)() // Opcode 0x22 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = AND8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = AND8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(and_al_i8)() // Opcode 0x24 { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = AND8(dst, src); REG8(AL) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(clc)() // Opcode 0xf8 { m_CF = 0; CYCLES(CYCLES_CLC); } static void I386OP(cld)() // Opcode 0xfc { m_DF = 0; CYCLES(CYCLES_CLD); } static void I386OP(cli)() // Opcode 0xfa { if(PROTECTED_MODE) { UINT8 IOPL = m_IOP1 | (m_IOP2 << 1); if(m_CPL > IOPL) FAULT(FAULT_GP,0); } m_IF = 0; CYCLES(CYCLES_CLI); } static void I386OP(cmc)() // Opcode 0xf5 { m_CF ^= 1; CYCLES(CYCLES_CMC); } static void I386OP(cmp_rm8_r8)() // Opcode 0x38 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG8(modrm); dst = READ8(ea); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } } static void I386OP(cmp_r8_rm8)() // Opcode 0x3a { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); SUB8(dst, src); CYCLES(CYCLES_CMP_MEM_REG); } } static void I386OP(cmp_al_i8)() // Opcode 0x3c { UINT8 src, dst; src = FETCH(); dst = REG8(AL); SUB8(dst, src); CYCLES(CYCLES_CMP_IMM_ACC); } static void I386OP(cmpsb)() // Opcode 0xa6 { UINT32 eas, ead; UINT8 src, dst; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ8(eas); dst = READ8(ead); SUB8(src, dst); BUMP_SI(1); BUMP_DI(1); CYCLES(CYCLES_CMPS); } static void I386OP(in_al_i8)() // Opcode 0xe4 { UINT16 port = FETCH(); UINT8 data = READPORT8(port); REG8(AL) = data; CYCLES(CYCLES_IN_VAR); } static void I386OP(in_al_dx)() // Opcode 0xec { UINT16 port = REG16(DX); UINT8 data = READPORT8(port); REG8(AL) = data; CYCLES(CYCLES_IN); } static void I386OP(ja_rel8)() // Opcode 0x77 { INT8 disp = FETCH(); if( m_CF == 0 && m_ZF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jbe_rel8)() // Opcode 0x76 { INT8 disp = FETCH(); if( m_CF != 0 || m_ZF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jc_rel8)() // Opcode 0x72 { INT8 disp = FETCH(); if( m_CF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jg_rel8)() // Opcode 0x7f { INT8 disp = FETCH(); if( m_ZF == 0 && (m_SF == m_OF) ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jge_rel8)() // Opcode 0x7d { INT8 disp = FETCH(); if(m_SF == m_OF) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jl_rel8)() // Opcode 0x7c { INT8 disp = FETCH(); if( (m_SF != m_OF) ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jle_rel8)() // Opcode 0x7e { INT8 disp = FETCH(); if( m_ZF != 0 || (m_SF != m_OF) ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jnc_rel8)() // Opcode 0x73 { INT8 disp = FETCH(); if( m_CF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jno_rel8)() // Opcode 0x71 { INT8 disp = FETCH(); if( m_OF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jnp_rel8)() // Opcode 0x7b { INT8 disp = FETCH(); if( m_PF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jns_rel8)() // Opcode 0x79 { INT8 disp = FETCH(); if( m_SF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jnz_rel8)() // Opcode 0x75 { INT8 disp = FETCH(); if( m_ZF == 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jo_rel8)() // Opcode 0x70 { INT8 disp = FETCH(); if( m_OF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jp_rel8)() // Opcode 0x7a { INT8 disp = FETCH(); if( m_PF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(js_rel8)() // Opcode 0x78 { INT8 disp = FETCH(); if( m_SF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jz_rel8)() // Opcode 0x74 { INT8 disp = FETCH(); if( m_ZF != 0 ) { NEAR_BRANCH(disp); CYCLES(CYCLES_JCC_DISP8); /* TODO: Timing = 7 + m */ } else { CYCLES(CYCLES_JCC_DISP8_NOBRANCH); } } static void I386OP(jmp_rel8)() // Opcode 0xeb { INT8 disp = FETCH(); NEAR_BRANCH(disp); CYCLES(CYCLES_JMP_SHORT); /* TODO: Timing = 7 + m */ } static void I386OP(lahf)() // Opcode 0x9f { REG8(AH) = get_flags() & 0xd7; CYCLES(CYCLES_LAHF); } static void I386OP(lodsb)() // Opcode 0xac { UINT32 eas; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } REG8(AL) = READ8(eas); BUMP_SI(1); CYCLES(CYCLES_LODS); } static void I386OP(mov_rm8_r8)() // Opcode 0x88 { UINT8 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); STORE_RM8(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); WRITE8(ea, src); CYCLES(CYCLES_MOV_REG_MEM); } } static void I386OP(mov_r8_rm8)() // Opcode 0x8a { UINT8 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); STORE_REG8(modrm, src); CYCLES(CYCLES_MOV_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); STORE_REG8(modrm, src); CYCLES(CYCLES_MOV_MEM_REG); } } static void I386OP(mov_rm8_i8)() // Opcode 0xc6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 value = FETCH(); STORE_RM8(modrm, value); CYCLES(CYCLES_MOV_IMM_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 value = FETCH(); WRITE8(ea, value); CYCLES(CYCLES_MOV_IMM_MEM); } } static void I386OP(mov_r32_cr)() // Opcode 0x0f 20 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 cr = (modrm >> 3) & 0x7; STORE_RM32(modrm, m_cr[cr]); CYCLES(CYCLES_MOV_CR_REG); } static void I386OP(mov_r32_dr)() // Opcode 0x0f 21 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 dr = (modrm >> 3) & 0x7; STORE_RM32(modrm, m_dr[dr]); switch(dr) { case 0: case 1: case 2: case 3: CYCLES(CYCLES_MOV_REG_DR0_3); break; case 6: case 7: CYCLES(CYCLES_MOV_REG_DR6_7); break; } } static void I386OP(mov_cr_r32)() // Opcode 0x0f 22 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 cr = (modrm >> 3) & 0x7; UINT32 data = LOAD_RM32(modrm); switch(cr) { case 0: data &= 0xfffeffff; // wp not supported on 386 CYCLES(CYCLES_MOV_REG_CR0); break; case 2: CYCLES(CYCLES_MOV_REG_CR2); break; case 3: CYCLES(CYCLES_MOV_REG_CR3); vtlb_flush_dynamic(m_vtlb); break; case 4: CYCLES(1); break; // TODO default: logerror("i386: mov_cr_r32 CR%d!\n", cr); return; } m_cr[cr] = data; } static void I386OP(mov_dr_r32)() // Opcode 0x0f 23 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 dr = (modrm >> 3) & 0x7; m_dr[dr] = LOAD_RM32(modrm); switch(dr) { case 0: case 1: case 2: case 3: CYCLES(CYCLES_MOV_DR0_3_REG); break; case 6: case 7: CYCLES(CYCLES_MOV_DR6_7_REG); break; default: logerror("i386: mov_dr_r32 DR%d!\n", dr); return; } } static void I386OP(mov_al_m8)() // Opcode 0xa0 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } /* TODO: Not sure if this is correct... */ if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 0 ); } else { ea = i386_translate(DS, offset, 0 ); } REG8(AL) = READ8(ea); CYCLES(CYCLES_MOV_IMM_MEM); } static void I386OP(mov_m8_al)() // Opcode 0xa2 { UINT32 offset, ea; if( m_address_size ) { offset = FETCH32(); } else { offset = FETCH16(); } /* TODO: Not sure if this is correct... */ if( m_segment_prefix ) { ea = i386_translate(m_segment_override, offset, 1 ); } else { ea = i386_translate(DS, offset, 1 ); } WRITE8(ea, REG8(AL) ); CYCLES(CYCLES_MOV_MEM_ACC); } static void I386OP(mov_rm16_sreg)() // Opcode 0x8c { UINT8 modrm = FETCH(); int s = (modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { if(m_operand_size) STORE_RM32(modrm, m_sreg[s].selector); else STORE_RM16(modrm, m_sreg[s].selector); CYCLES(CYCLES_MOV_SREG_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE16(ea, m_sreg[s].selector); CYCLES(CYCLES_MOV_SREG_MEM); } } static void I386OP(mov_sreg_rm16)() // Opcode 0x8e { UINT16 selector; UINT8 modrm = FETCH(); bool fault; int s = (modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { selector = LOAD_RM16(modrm); CYCLES(CYCLES_MOV_REG_SREG); } else { UINT32 ea = GetEA(modrm,0); selector = READ16(ea); CYCLES(CYCLES_MOV_MEM_SREG); } i386_sreg_load(selector,s,&fault); if((s == SS) && !fault) { if(m_IF != 0) // if external interrupts are enabled { m_IF = 0; // reset IF for the next instruction m_delayed_interrupt_enable = 1; } } } static void I386OP(mov_al_i8)() // Opcode 0xb0 { REG8(AL) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_cl_i8)() // Opcode 0xb1 { REG8(CL) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_dl_i8)() // Opcode 0xb2 { REG8(DL) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_bl_i8)() // Opcode 0xb3 { REG8(BL) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ah_i8)() // Opcode 0xb4 { REG8(AH) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_ch_i8)() // Opcode 0xb5 { REG8(CH) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_dh_i8)() // Opcode 0xb6 { REG8(DH) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(mov_bh_i8)() // Opcode 0xb7 { REG8(BH) = FETCH(); CYCLES(CYCLES_MOV_IMM_REG); } static void I386OP(movsb)() // Opcode 0xa4 { UINT32 eas, ead; UINT8 v; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); v = READ8(eas); WRITE8(ead, v); BUMP_SI(1); BUMP_DI(1); CYCLES(CYCLES_MOVS); } static void I386OP(or_rm8_r8)() // Opcode 0x08 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = OR8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = OR8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(or_r8_rm8)() // Opcode 0x0a { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = OR8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = OR8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(or_al_i8)() // Opcode 0x0c { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = OR8(dst, src); REG8(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(out_al_i8)() // Opcode 0xe6 { UINT16 port = FETCH(); UINT8 data = REG8(AL); WRITEPORT8(port, data); CYCLES(CYCLES_OUT_VAR); } static void I386OP(out_al_dx)() // Opcode 0xee { UINT16 port = REG16(DX); UINT8 data = REG8(AL); WRITEPORT8(port, data); CYCLES(CYCLES_OUT); } static void I386OP(arpl)() // Opcode 0x63 { UINT16 src, dst; UINT8 modrm = FETCH(); UINT8 flag = 0; if(PROTECTED_MODE && !V8086_MODE) { if( modrm >= 0xc0 ) { src = LOAD_REG16(modrm); dst = LOAD_RM16(modrm); if( (dst&0x3) < (src&0x3) ) { dst = (dst&0xfffc) | (src&0x3); flag = 1; STORE_RM16(modrm, dst); } } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG16(modrm); dst = READ16(ea); if( (dst&0x3) < (src&0x3) ) { dst = (dst&0xfffc) | (src&0x3); flag = 1; WRITE16(ea, dst); } } SetZF(flag); } else i386_trap(6, 0, 0); // invalid opcode in real mode or v8086 mode } static void I386OP(push_i8)() // Opcode 0x6a { UINT8 value = FETCH(); PUSH8(value); CYCLES(CYCLES_PUSH_IMM); } static void I386OP(ins_generic)(int size) { UINT32 ead; UINT8 vb; UINT16 vw; UINT32 vd; ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); switch(size) { case 1: vb = READPORT8(REG16(DX)); WRITE8(ead, vb); break; case 2: vw = READPORT16(REG16(DX)); WRITE16(ead, vw); break; case 4: vd = READPORT32(REG16(DX)); WRITE32(ead, vd); break; } if(m_address_size) REG32(EDI) += ((m_DF) ? -1 : 1) * size; else REG16(DI) += ((m_DF) ? -1 : 1) * size; CYCLES(CYCLES_INS); // TODO: Confirm this value } static void I386OP(insb)() // Opcode 0x6c { I386OP(ins_generic)(1); } static void I386OP(insw)() // Opcode 0x6d { I386OP(ins_generic)(2); } static void I386OP(insd)() // Opcode 0x6d { I386OP(ins_generic)(4); } static void I386OP(outs_generic)(int size) { UINT32 eas; UINT8 vb; UINT16 vw; UINT32 vd; if( m_segment_prefix ) { eas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } else { eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 ); } switch(size) { case 1: vb = READ8(eas); WRITEPORT8(REG16(DX), vb); break; case 2: vw = READ16(eas); WRITEPORT16(REG16(DX), vw); break; case 4: vd = READ32(eas); WRITEPORT32(REG16(DX), vd); break; } if(m_address_size) REG32(ESI) += ((m_DF) ? -1 : 1) * size; else REG16(SI) += ((m_DF) ? -1 : 1) * size; CYCLES(CYCLES_OUTS); // TODO: Confirm this value } static void I386OP(outsb)() // Opcode 0x6e { I386OP(outs_generic)(1); } static void I386OP(outsw)() // Opcode 0x6f { I386OP(outs_generic)(2); } static void I386OP(outsd)() // Opcode 0x6f { I386OP(outs_generic)(4); } static void I386OP(repeat)(int invert_flag) { UINT32 repeated_eip = m_eip; UINT32 repeated_pc = m_pc; UINT8 opcode; // = FETCH(); // UINT32 eas, ead; UINT32 count; INT32 cycle_base = 0, cycle_adjustment = 0; UINT8 prefix_flag=1; UINT8 *flag = NULL; do { repeated_eip = m_eip; repeated_pc = m_pc; opcode = FETCH(); switch(opcode) { case 0x0f: if (invert_flag == 0) I386OP(decode_three_bytef3)(); // sse f3 0f else I386OP(decode_three_bytef2)(); // sse f2 0f return; case 0x26: m_segment_override=ES; m_segment_prefix=1; break; case 0x2e: m_segment_override=CS; m_segment_prefix=1; break; case 0x36: m_segment_override=SS; m_segment_prefix=1; break; case 0x3e: m_segment_override=DS; m_segment_prefix=1; break; case 0x64: m_segment_override=FS; m_segment_prefix=1; break; case 0x65: m_segment_override=GS; m_segment_prefix=1; break; case 0x66: m_operand_size ^= 1; m_xmm_operand_size ^= 1; break; case 0x67: m_address_size ^= 1; break; default: prefix_flag=0; } } while (prefix_flag); if( m_segment_prefix ) { // FIXME: the following does not work if both address override and segment override are used i386_translate(m_segment_override, m_sreg[m_segment_prefix].d ? REG32(ESI) : REG16(SI), -1 ); } else { //eas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), -1 ); } i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), -1 ); switch(opcode) { case 0x6c: case 0x6d: /* INSB, INSW, INSD */ // TODO: cycle count cycle_base = 8; cycle_adjustment = -4; flag = NULL; break; case 0x6e: case 0x6f: /* OUTSB, OUTSW, OUTSD */ // TODO: cycle count cycle_base = 8; cycle_adjustment = -4; flag = NULL; break; case 0xa4: case 0xa5: /* MOVSB, MOVSW, MOVSD */ cycle_base = 8; cycle_adjustment = -4; flag = NULL; break; case 0xa6: case 0xa7: /* CMPSB, CMPSW, CMPSD */ cycle_base = 5; cycle_adjustment = -1; flag = &m_ZF; break; case 0xac: case 0xad: /* LODSB, LODSW, LODSD */ cycle_base = 5; cycle_adjustment = 1; flag = NULL; break; case 0xaa: case 0xab: /* STOSB, STOSW, STOSD */ cycle_base = 5; cycle_adjustment = 0; flag = NULL; break; case 0xae: case 0xaf: /* SCASB, SCASW, SCASD */ cycle_base = 5; cycle_adjustment = 0; flag = &m_ZF; break; case 0x90: CYCLES(CYCLES_NOP); return; case 0xc2: // sigh case 0xc3: m_pc--; return; default: fatalerror("i386: Invalid REP/opcode %02X combination\n",opcode); break; } if( m_address_size ) { if( REG32(ECX) == 0 ) return; } else { if( REG16(CX) == 0 ) return; } /* now actually perform the repeat */ CYCLES_NUM(cycle_base); do { m_eip = repeated_eip; m_pc = repeated_pc; try { I386OP(decode_opcode)(); } catch (UINT64 e) { m_eip = m_prev_eip; throw e; } CYCLES_NUM(cycle_adjustment); if (m_address_size) count = --REG32(ECX); else count = --REG16(CX); // if (m_cycles <= 0) // goto outofcycles; } while( count && (!flag || (invert_flag ? !*flag : *flag)) ); // return; // //outofcycles: // /* if we run out of cycles to execute, and we are still in the repeat, we need // * to exit this instruction in such a way to go right back into it when we have // * time to execute cycles */ // if(flag && (invert_flag ? *flag : !*flag)) // return; // m_eip = m_prev_eip; // CHANGE_PC(m_eip); // CYCLES_NUM(-cycle_base); } static void I386OP(rep)() // Opcode 0xf3 { I386OP(repeat)(0); } static void I386OP(repne)() // Opcode 0xf2 { I386OP(repeat)(1); } static void I386OP(sahf)() // Opcode 0x9e { set_flags((get_flags() & 0xffffff00) | (REG8(AH) & 0xd7) ); CYCLES(CYCLES_SAHF); } static void I386OP(sbb_rm8_r8)() // Opcode 0x18 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = SBB8(dst, src, m_CF); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = SBB8(dst, src, m_CF); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sbb_r8_rm8)() // Opcode 0x1a { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = SBB8(dst, src, m_CF); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = SBB8(dst, src, m_CF); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sbb_al_i8)() // Opcode 0x1c { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = SBB8(dst, src, m_CF); REG8(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(scasb)() // Opcode 0xae { UINT32 eas; UINT8 src, dst; eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 ); src = READ8(eas); dst = REG8(AL); SUB8(dst, src); BUMP_DI(1); CYCLES(CYCLES_SCAS); } static void I386OP(setalc)() // Opcode 0xd6 (undocumented) { if( m_CF ) { REG8(AL) = 0xff; } else { REG8(AL) = 0; } CYCLES(3); } static void I386OP(seta_rm8)() // Opcode 0x0f 97 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_CF == 0 && m_ZF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setbe_rm8)() // Opcode 0x0f 96 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_CF != 0 || m_ZF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setc_rm8)() // Opcode 0x0f 92 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_CF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setg_rm8)() // Opcode 0x0f 9f { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_ZF == 0 && (m_SF == m_OF) ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setge_rm8)() // Opcode 0x0f 9d { UINT8 modrm = FETCH(); UINT8 value = 0; if(m_SF == m_OF) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setl_rm8)() // Opcode 0x0f 9c { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_SF != m_OF ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setle_rm8)() // Opcode 0x0f 9e { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_ZF != 0 || (m_SF != m_OF) ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setnc_rm8)() // Opcode 0x0f 93 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_CF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setno_rm8)() // Opcode 0x0f 91 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_OF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setnp_rm8)() // Opcode 0x0f 9b { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_PF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setns_rm8)() // Opcode 0x0f 99 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_SF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setnz_rm8)() // Opcode 0x0f 95 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_ZF == 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(seto_rm8)() // Opcode 0x0f 90 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_OF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setp_rm8)() // Opcode 0x0f 9a { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_PF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(sets_rm8)() // Opcode 0x0f 98 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_SF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(setz_rm8)() // Opcode 0x0f 94 { UINT8 modrm = FETCH(); UINT8 value = 0; if( m_ZF != 0 ) { value = 1; } if( modrm >= 0xc0 ) { STORE_RM8(modrm, value); CYCLES(CYCLES_SETCC_REG); } else { UINT32 ea = GetEA(modrm,1); WRITE8(ea, value); CYCLES(CYCLES_SETCC_MEM); } } static void I386OP(stc)() // Opcode 0xf9 { m_CF = 1; CYCLES(CYCLES_STC); } static void I386OP(std)() // Opcode 0xfd { m_DF = 1; CYCLES(CYCLES_STD); } static void I386OP(sti)() // Opcode 0xfb { if(PROTECTED_MODE) { UINT8 IOPL = m_IOP1 | (m_IOP2 << 1); if(m_CPL > IOPL) FAULT(FAULT_GP,0); } m_delayed_interrupt_enable = 1; // IF is set after the next instruction. CYCLES(CYCLES_STI); } static void I386OP(stosb)() // Opcode 0xaa { UINT32 ead; ead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 ); WRITE8(ead, REG8(AL)); BUMP_DI(1); CYCLES(CYCLES_STOS); } static void I386OP(sub_rm8_r8)() // Opcode 0x28 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = SUB8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = SUB8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(sub_r8_rm8)() // Opcode 0x2a { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = SUB8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = SUB8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(sub_al_i8)() // Opcode 0x2c { UINT8 src, dst; src = FETCH(); dst = REG8(EAX); dst = SUB8(dst, src); REG8(EAX) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(test_al_i8)() // Opcode 0xa8 { UINT8 src = FETCH(); UINT8 dst = REG8(AL); dst = src & dst; SetSZPF8(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(test_rm8_r8)() // Opcode 0x84 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = src & dst; SetSZPF8(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = LOAD_REG8(modrm); dst = READ8(ea); dst = src & dst; SetSZPF8(dst); m_CF = 0; m_OF = 0; CYCLES(CYCLES_TEST_REG_MEM); } } static void I386OP(xchg_r8_rm8)() // Opcode 0x86 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 src = LOAD_RM8(modrm); UINT8 dst = LOAD_REG8(modrm); STORE_REG8(modrm, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_XCHG_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 src = READ8(ea); UINT8 dst = LOAD_REG8(modrm); WRITE8(ea, dst); STORE_REG8(modrm, src); CYCLES(CYCLES_XCHG_REG_MEM); } } static void I386OP(xor_rm8_r8)() // Opcode 0x30 { UINT8 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_REG8(modrm); dst = LOAD_RM8(modrm); dst = XOR8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,1); src = LOAD_REG8(modrm); dst = READ8(ea); dst = XOR8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } } static void I386OP(xor_r8_rm8)() // Opcode 0x32 { UINT32 src, dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); dst = LOAD_REG8(modrm); dst = XOR8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); dst = LOAD_REG8(modrm); dst = XOR8(dst, src); STORE_REG8(modrm, dst); CYCLES(CYCLES_ALU_MEM_REG); } } static void I386OP(xor_al_i8)() // Opcode 0x34 { UINT8 src, dst; src = FETCH(); dst = REG8(AL); dst = XOR8(dst, src); REG8(AL) = dst; CYCLES(CYCLES_ALU_IMM_ACC); } static void I386OP(group80_8)() // Opcode 0x80 { UINT32 ea; UINT8 src, dst; UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: // ADD Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = ADD8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,0); dst = READ8(ea); src = FETCH(); dst = ADD8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 1: // OR Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = OR8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = OR8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 2: // ADC Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = ADC8(dst, src, m_CF); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = ADC8(dst, src, m_CF); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 3: // SBB Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = SBB8(dst, src, m_CF); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = SBB8(dst, src, m_CF); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 4: // AND Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = AND8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = AND8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 5: // SUB Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = SUB8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = SUB8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 6: // XOR Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); dst = XOR8(dst, src); STORE_RM8(modrm, dst); CYCLES(CYCLES_ALU_REG_REG); } else { ea = GetEA(modrm,1); dst = READ8(ea); src = FETCH(); dst = XOR8(dst, src); WRITE8(ea, dst); CYCLES(CYCLES_ALU_REG_MEM); } break; case 7: // CMP Rm8, i8 if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); src = FETCH(); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_REG); } else { ea = GetEA(modrm,0); dst = READ8(ea); src = FETCH(); SUB8(dst, src); CYCLES(CYCLES_CMP_REG_MEM); } break; } } static void I386OP(groupC0_8)() // Opcode 0xc0 { UINT8 dst; UINT8 modrm = FETCH(); UINT8 shift; if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); shift = FETCH() & 0x1f; dst = i386_shift_rotate8(modrm, dst, shift); STORE_RM8(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ8(ea); shift = FETCH() & 0x1f; dst = i386_shift_rotate8(modrm, dst, shift); WRITE8(ea, dst); } } static void I386OP(groupD0_8)() // Opcode 0xd0 { UINT8 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); dst = i386_shift_rotate8(modrm, dst, 1); STORE_RM8(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ8(ea); dst = i386_shift_rotate8(modrm, dst, 1); WRITE8(ea, dst); } } static void I386OP(groupD2_8)() // Opcode 0xd2 { UINT8 dst; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { dst = LOAD_RM8(modrm); dst = i386_shift_rotate8(modrm, dst, REG8(CL)); STORE_RM8(modrm, dst); } else { UINT32 ea = GetEA(modrm,1); dst = READ8(ea); dst = i386_shift_rotate8(modrm, dst, REG8(CL)); WRITE8(ea, dst); } } static void I386OP(groupF6_8)() // Opcode 0xf6 { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* TEST Rm8, i8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); UINT8 src = FETCH(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF8(dst); CYCLES(CYCLES_TEST_IMM_REG); } else { UINT32 ea = GetEA(modrm,0); UINT8 dst = READ8(ea); UINT8 src = FETCH(); dst &= src; m_CF = m_OF = m_AF = 0; SetSZPF8(dst); CYCLES(CYCLES_TEST_IMM_MEM); } break; case 2: /* NOT Rm8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); dst = ~dst; STORE_RM8(modrm, dst); CYCLES(CYCLES_NOT_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); dst = ~dst; WRITE8(ea, dst); CYCLES(CYCLES_NOT_MEM); } break; case 3: /* NEG Rm8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); dst = SUB8(0, dst ); STORE_RM8(modrm, dst); CYCLES(CYCLES_NEG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); dst = SUB8(0, dst ); WRITE8(ea, dst); CYCLES(CYCLES_NEG_MEM); } break; case 4: /* MUL AL, Rm8 */ { UINT16 result; UINT8 src, dst; if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); CYCLES(CYCLES_MUL8_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); CYCLES(CYCLES_MUL8_ACC_MEM); /* TODO: Correct multiply timing */ } dst = REG8(AL); result = (UINT16)src * (UINT16)dst; REG16(AX) = (UINT16)result; m_CF = m_OF = (REG16(AX) > 0xff); } break; case 5: /* IMUL AL, Rm8 */ { INT16 result; INT16 src, dst; if( modrm >= 0xc0 ) { src = (INT16)(INT8)LOAD_RM8(modrm); CYCLES(CYCLES_IMUL8_ACC_REG); /* TODO: Correct multiply timing */ } else { UINT32 ea = GetEA(modrm,0); src = (INT16)(INT8)READ8(ea); CYCLES(CYCLES_IMUL8_ACC_MEM); /* TODO: Correct multiply timing */ } dst = (INT16)(INT8)REG8(AL); result = src * dst; REG16(AX) = (UINT16)result; m_CF = m_OF = !(result == (INT16)(INT8)result); } break; case 6: /* DIV AL, Rm8 */ { UINT16 quotient, remainder, result; UINT8 src; if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); CYCLES(CYCLES_DIV8_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); CYCLES(CYCLES_DIV8_ACC_MEM); } quotient = (UINT16)REG16(AX); if( src ) { remainder = quotient % (UINT16)src; result = quotient / (UINT16)src; if( result > 0xff ) { /* TODO: Divide error */ } else { REG8(AH) = (UINT8)remainder & 0xff; REG8(AL) = (UINT8)result & 0xff; // this flag is actually undefined, enable on non-cyrix if (m_cpuid_id0 != 0x69727943) m_CF = 1; } } else { i386_trap(0, 0, 0); } } break; case 7: /* IDIV AL, Rm8 */ { INT16 quotient, remainder, result; UINT8 src; if( modrm >= 0xc0 ) { src = LOAD_RM8(modrm); CYCLES(CYCLES_IDIV8_ACC_REG); } else { UINT32 ea = GetEA(modrm,0); src = READ8(ea); CYCLES(CYCLES_IDIV8_ACC_MEM); } quotient = (INT16)REG16(AX); if( src ) { remainder = quotient % (INT16)(INT8)src; result = quotient / (INT16)(INT8)src; if( result > 0xff ) { /* TODO: Divide error */ } else { REG8(AH) = (UINT8)remainder & 0xff; REG8(AL) = (UINT8)result & 0xff; // this flag is actually undefined, enable on non-cyrix if (m_cpuid_id0 != 0x69727943) m_CF = 1; } } else { i386_trap(0, 0, 0); } } break; } } static void I386OP(groupFE_8)() // Opcode 0xfe { UINT8 modrm = FETCH(); switch( (modrm >> 3) & 0x7 ) { case 0: /* INC Rm8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); dst = INC8(dst); STORE_RM8(modrm, dst); CYCLES(CYCLES_INC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); dst = INC8(dst); WRITE8(ea, dst); CYCLES(CYCLES_INC_MEM); } break; case 1: /* DEC Rm8 */ if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); dst = DEC8(dst); STORE_RM8(modrm, dst); CYCLES(CYCLES_DEC_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); dst = DEC8(dst); WRITE8(ea, dst); CYCLES(CYCLES_DEC_MEM); } break; case 6: /* PUSH Rm8*/ { UINT8 value; if( modrm >= 0xc0 ) { value = LOAD_RM8(modrm); } else { UINT32 ea = GetEA(modrm,0); value = READ8(ea); } if( m_operand_size ) { PUSH32(value); } else { PUSH16(value); } CYCLES(CYCLES_PUSH_RM); } break; default: report_invalid_modrm("groupFE_8", modrm); break; } } static void I386OP(segment_CS)() // Opcode 0x2e { m_segment_prefix = 1; m_segment_override = CS; I386OP(decode_opcode)(); } static void I386OP(segment_DS)() // Opcode 0x3e { m_segment_prefix = 1; m_segment_override = DS; CYCLES(0); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(segment_ES)() // Opcode 0x26 { m_segment_prefix = 1; m_segment_override = ES; CYCLES(0); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(segment_FS)() // Opcode 0x64 { m_segment_prefix = 1; m_segment_override = FS; CYCLES(1); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(segment_GS)() // Opcode 0x65 { m_segment_prefix = 1; m_segment_override = GS; CYCLES(1); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(segment_SS)() // Opcode 0x36 { m_segment_prefix = 1; m_segment_override = SS; CYCLES(0); // TODO: Specify cycle count I386OP(decode_opcode)(); } static void I386OP(operand_size)() // Opcode prefix 0x66 { if(m_operand_prefix == 0) { m_operand_size ^= 1; m_xmm_operand_size ^= 1; m_operand_prefix = 1; } m_opcode = FETCH(); if (m_opcode == 0x0f) I386OP(decode_three_byte66)(); else { if( m_operand_size ) m_opcode_table1_32[m_opcode](); else m_opcode_table1_16[m_opcode](); } } static void I386OP(address_size)() // Opcode 0x67 { if(m_address_prefix == 0) { m_address_size ^= 1; m_address_prefix = 1; } I386OP(decode_opcode)(); } static void I386OP(nop)() // Opcode 0x90 { CYCLES(CYCLES_NOP); } static void I386OP(int3)() // Opcode 0xcc { CYCLES(CYCLES_INT3); m_ext = 0; // not an external interrupt i386_trap(3, 1, 0); m_ext = 1; } static void I386OP(int)() // Opcode 0xcd { int interrupt = FETCH(); CYCLES(CYCLES_INT); m_ext = 0; // not an external interrupt i386_trap(interrupt, 1, 0); m_ext = 1; } static void I386OP(into)() // Opcode 0xce { if( m_OF ) { m_ext = 0; i386_trap(4, 1, 0); m_ext = 1; CYCLES(CYCLES_INTO_OF1); } else { CYCLES(CYCLES_INTO_OF0); } } static UINT32 i386_escape_ea; // hack around GCC 4.6 error because we need the side effects of GetEA() static void I386OP(escape)() // Opcodes 0xd8 - 0xdf { UINT8 modrm = FETCH(); if(modrm < 0xc0) { i386_escape_ea = GetEA(modrm,0); } CYCLES(3); // TODO: confirm this (void) LOAD_RM8(modrm); } static void I386OP(hlt)() // Opcode 0xf4 { if(PROTECTED_MODE && m_CPL != 0) FAULT(FAULT_GP,0); m_halted = 1; CYCLES(CYCLES_HLT); // if (m_cycles > 0) // m_cycles = 0; } static void I386OP(decimal_adjust)(int direction) { UINT8 tmpAL = REG8(AL); UINT8 tmpCF = m_CF; if (m_AF || ((REG8(AL) & 0xf) > 9)) { UINT16 t= (UINT16)REG8(AL) + (direction * 0x06); REG8(AL) = (UINT8)t&0xff; m_AF = 1; if (t & 0x100) m_CF = 1; if (direction > 0) tmpAL = REG8(AL); } if (tmpCF || (tmpAL > 0x99)) { REG8(AL) += (direction * 0x60); m_CF = 1; } SetSZPF8(REG8(AL)); } static void I386OP(daa)() // Opcode 0x27 { I386OP(decimal_adjust)(+1); CYCLES(CYCLES_DAA); } static void I386OP(das)() // Opcode 0x2f { I386OP(decimal_adjust)(-1); CYCLES(CYCLES_DAS); } static void I386OP(aaa)() // Opcode 0x37 { if( ( (REG8(AL) & 0x0f) > 9) || (m_AF != 0) ) { REG16(AX) = REG16(AX) + 6; REG8(AH) = REG8(AH) + 1; m_AF = 1; m_CF = 1; } else { m_AF = 0; m_CF = 0; } REG8(AL) = REG8(AL) & 0x0f; CYCLES(CYCLES_AAA); } static void I386OP(aas)() // Opcode 0x3f { if (m_AF || ((REG8(AL) & 0xf) > 9)) { REG16(AX) -= 6; REG8(AH) -= 1; m_AF = 1; m_CF = 1; } else { m_AF = 0; m_CF = 0; } REG8(AL) &= 0x0f; CYCLES(CYCLES_AAS); } static void I386OP(aad)() // Opcode 0xd5 { UINT8 tempAL = REG8(AL); UINT8 tempAH = REG8(AH); UINT8 i = FETCH(); REG8(AL) = (tempAL + (tempAH * i)) & 0xff; REG8(AH) = 0; SetSZPF8( REG8(AL) ); CYCLES(CYCLES_AAD); } static void I386OP(aam)() // Opcode 0xd4 { UINT8 tempAL = REG8(AL); UINT8 i = FETCH(); if(!i) { i386_trap(0, 0, 0); return; } REG8(AH) = tempAL / i; REG8(AL) = tempAL % i; SetSZPF8( REG8(AL) ); CYCLES(CYCLES_AAM); } static void I386OP(clts)() // Opcode 0x0f 0x06 { // Privileged instruction, CPL must be zero. Can be used in real or v86 mode. if(PROTECTED_MODE && m_CPL != 0) FAULT(FAULT_GP,0) m_cr[0] &= ~0x08; /* clear TS bit */ CYCLES(CYCLES_CLTS); } static void I386OP(wait)() // Opcode 0x9B { // TODO } static void I386OP(lock)() // Opcode 0xf0 { // lock doesn't depend on iopl on 386 m_lock = true; CYCLES(CYCLES_LOCK); // TODO: Determine correct cycle count I386OP(decode_opcode)(); } static void I386OP(mov_r32_tr)() // Opcode 0x0f 24 { FETCH(); CYCLES(1); // TODO: correct cycle count } static void I386OP(mov_tr_r32)() // Opcode 0x0f 26 { FETCH(); CYCLES(1); // TODO: correct cycle count } static void I386OP(loadall)() // Opcode 0x0f 0x07 (0x0f 0x05 on 80286), undocumented { fatalerror("i386: LOADALL unimplemented at %08X\n", m_pc - 1); } static void I386OP(invalid)() { /* for ISH.COM */ // report_invalid_opcode(); // i386_trap(6, 0, 0); } static void I386OP(xlat)() // Opcode 0xd7 { UINT32 ea; if( m_segment_prefix ) { if(!m_address_size) { ea = i386_translate(m_segment_override, REG16(BX) + REG8(AL), 0 ); } else { ea = i386_translate(m_segment_override, REG32(EBX) + REG8(AL), 0 ); } } else { if(!m_address_size) { ea = i386_translate(DS, REG16(BX) + REG8(AL), 0 ); } else { ea = i386_translate(DS, REG32(EBX) + REG8(AL), 0 ); } } REG8(AL) = READ8(ea); CYCLES(CYCLES_XLAT); } ================================================ FILE: vm86/mame/emu/cpu/i386.old/i386ops.h ================================================ struct X86_OPCODE { UINT8 opcode; UINT32 flags; void (*handler16)(); void (*handler32)(); bool lockable; }; #define OP_I386 0x1 #define OP_FPU 0x2 #define OP_I486 0x4 #define OP_PENTIUM 0x8 #define OP_MMX 0x10 #define OP_PPRO 0x20 #define OP_SSE 0x40 #define OP_SSE2 0x80 #define OP_SSE3 0x100 #define OP_CYRIX 0x8000 #define OP_2BYTE 0x80000000 #define OP_3BYTE66 0x40000000 #define OP_3BYTEF2 0x20000000 #define OP_3BYTEF3 0x10000000 static const X86_OPCODE x86_opcode_table[] = { // Opcode Flags 16-bit handler 32-bit handler { 0x00, OP_I386, I386OP(add_rm8_r8), I386OP(add_rm8_r8), true }, { 0x01, OP_I386, I386OP(add_rm16_r16), I386OP(add_rm32_r32), true }, { 0x02, OP_I386, I386OP(add_r8_rm8), I386OP(add_r8_rm8), false}, { 0x03, OP_I386, I386OP(add_r16_rm16), I386OP(add_r32_rm32), false}, { 0x04, OP_I386, I386OP(add_al_i8), I386OP(add_al_i8), false}, { 0x05, OP_I386, I386OP(add_ax_i16), I386OP(add_eax_i32), false}, { 0x06, OP_I386, I386OP(push_es16), I386OP(push_es32), false}, { 0x07, OP_I386, I386OP(pop_es16), I386OP(pop_es32), false}, { 0x08, OP_I386, I386OP(or_rm8_r8), I386OP(or_rm8_r8), true }, { 0x09, OP_I386, I386OP(or_rm16_r16), I386OP(or_rm32_r32), true }, { 0x0A, OP_I386, I386OP(or_r8_rm8), I386OP(or_r8_rm8), false}, { 0x0B, OP_I386, I386OP(or_r16_rm16), I386OP(or_r32_rm32), false}, { 0x0C, OP_I386, I386OP(or_al_i8), I386OP(or_al_i8), false}, { 0x0D, OP_I386, I386OP(or_ax_i16), I386OP(or_eax_i32), false}, { 0x0E, OP_I386, I386OP(push_cs16), I386OP(push_cs32), false}, { 0x0F, OP_I386, I386OP(decode_two_byte), I386OP(decode_two_byte), true }, { 0x10, OP_I386, I386OP(adc_rm8_r8), I386OP(adc_rm8_r8), true }, { 0x11, OP_I386, I386OP(adc_rm16_r16), I386OP(adc_rm32_r32), true }, { 0x12, OP_I386, I386OP(adc_r8_rm8), I386OP(adc_r8_rm8), false}, { 0x13, OP_I386, I386OP(adc_r16_rm16), I386OP(adc_r32_rm32), false}, { 0x14, OP_I386, I386OP(adc_al_i8), I386OP(adc_al_i8), false}, { 0x15, OP_I386, I386OP(adc_ax_i16), I386OP(adc_eax_i32), false}, { 0x16, OP_I386, I386OP(push_ss16), I386OP(push_ss32), false}, { 0x17, OP_I386, I386OP(pop_ss16), I386OP(pop_ss32), false}, { 0x18, OP_I386, I386OP(sbb_rm8_r8), I386OP(sbb_rm8_r8), true }, { 0x19, OP_I386, I386OP(sbb_rm16_r16), I386OP(sbb_rm32_r32), true }, { 0x1A, OP_I386, I386OP(sbb_r8_rm8), I386OP(sbb_r8_rm8), false}, { 0x1B, OP_I386, I386OP(sbb_r16_rm16), I386OP(sbb_r32_rm32), false}, { 0x1C, OP_I386, I386OP(sbb_al_i8), I386OP(sbb_al_i8), false}, { 0x1D, OP_I386, I386OP(sbb_ax_i16), I386OP(sbb_eax_i32), false}, { 0x1E, OP_I386, I386OP(push_ds16), I386OP(push_ds32), false}, { 0x1F, OP_I386, I386OP(pop_ds16), I386OP(pop_ds32), false}, { 0x20, OP_I386, I386OP(and_rm8_r8), I386OP(and_rm8_r8), true }, { 0x21, OP_I386, I386OP(and_rm16_r16), I386OP(and_rm32_r32), true }, { 0x22, OP_I386, I386OP(and_r8_rm8), I386OP(and_r8_rm8), false}, { 0x23, OP_I386, I386OP(and_r16_rm16), I386OP(and_r32_rm32), false}, { 0x24, OP_I386, I386OP(and_al_i8), I386OP(and_al_i8), false}, { 0x25, OP_I386, I386OP(and_ax_i16), I386OP(and_eax_i32), false}, { 0x26, OP_I386, I386OP(segment_ES), I386OP(segment_ES), false}, { 0x27, OP_I386, I386OP(daa), I386OP(daa), false}, { 0x28, OP_I386, I386OP(sub_rm8_r8), I386OP(sub_rm8_r8), true }, { 0x29, OP_I386, I386OP(sub_rm16_r16), I386OP(sub_rm32_r32), true }, { 0x2A, OP_I386, I386OP(sub_r8_rm8), I386OP(sub_r8_rm8), false}, { 0x2B, OP_I386, I386OP(sub_r16_rm16), I386OP(sub_r32_rm32), false}, { 0x2C, OP_I386, I386OP(sub_al_i8), I386OP(sub_al_i8), false}, { 0x2D, OP_I386, I386OP(sub_ax_i16), I386OP(sub_eax_i32), false}, { 0x2E, OP_I386, I386OP(segment_CS), I386OP(segment_CS), false}, { 0x2F, OP_I386, I386OP(das), I386OP(das), false}, { 0x30, OP_I386, I386OP(xor_rm8_r8), I386OP(xor_rm8_r8), true }, { 0x31, OP_I386, I386OP(xor_rm16_r16), I386OP(xor_rm32_r32), true }, { 0x32, OP_I386, I386OP(xor_r8_rm8), I386OP(xor_r8_rm8), false}, { 0x33, OP_I386, I386OP(xor_r16_rm16), I386OP(xor_r32_rm32), false}, { 0x34, OP_I386, I386OP(xor_al_i8), I386OP(xor_al_i8), false}, { 0x35, OP_I386, I386OP(xor_ax_i16), I386OP(xor_eax_i32), false}, { 0x36, OP_I386, I386OP(segment_SS), I386OP(segment_SS), false}, { 0x37, OP_I386, I386OP(aaa), I386OP(aaa), false}, { 0x38, OP_I386, I386OP(cmp_rm8_r8), I386OP(cmp_rm8_r8), false}, { 0x39, OP_I386, I386OP(cmp_rm16_r16), I386OP(cmp_rm32_r32), false}, { 0x3A, OP_I386, I386OP(cmp_r8_rm8), I386OP(cmp_r8_rm8), false}, { 0x3B, OP_I386, I386OP(cmp_r16_rm16), I386OP(cmp_r32_rm32), false}, { 0x3C, OP_I386, I386OP(cmp_al_i8), I386OP(cmp_al_i8), false}, { 0x3D, OP_I386, I386OP(cmp_ax_i16), I386OP(cmp_eax_i32), false}, { 0x3E, OP_I386, I386OP(segment_DS), I386OP(segment_DS), false}, { 0x3F, OP_I386, I386OP(aas), I386OP(aas), false}, { 0x40, OP_I386, I386OP(inc_ax), I386OP(inc_eax), false}, { 0x41, OP_I386, I386OP(inc_cx), I386OP(inc_ecx), false}, { 0x42, OP_I386, I386OP(inc_dx), I386OP(inc_edx), false}, { 0x43, OP_I386, I386OP(inc_bx), I386OP(inc_ebx), false}, { 0x44, OP_I386, I386OP(inc_sp), I386OP(inc_esp), false}, { 0x45, OP_I386, I386OP(inc_bp), I386OP(inc_ebp), false}, { 0x46, OP_I386, I386OP(inc_si), I386OP(inc_esi), false}, { 0x47, OP_I386, I386OP(inc_di), I386OP(inc_edi), false}, { 0x48, OP_I386, I386OP(dec_ax), I386OP(dec_eax), false}, { 0x49, OP_I386, I386OP(dec_cx), I386OP(dec_ecx), false}, { 0x4A, OP_I386, I386OP(dec_dx), I386OP(dec_edx), false}, { 0x4B, OP_I386, I386OP(dec_bx), I386OP(dec_ebx), false}, { 0x4C, OP_I386, I386OP(dec_sp), I386OP(dec_esp), false}, { 0x4D, OP_I386, I386OP(dec_bp), I386OP(dec_ebp), false}, { 0x4E, OP_I386, I386OP(dec_si), I386OP(dec_esi), false}, { 0x4F, OP_I386, I386OP(dec_di), I386OP(dec_edi), false}, { 0x50, OP_I386, I386OP(push_ax), I386OP(push_eax), false}, { 0x51, OP_I386, I386OP(push_cx), I386OP(push_ecx), false}, { 0x52, OP_I386, I386OP(push_dx), I386OP(push_edx), false}, { 0x53, OP_I386, I386OP(push_bx), I386OP(push_ebx), false}, { 0x54, OP_I386, I386OP(push_sp), I386OP(push_esp), false}, { 0x55, OP_I386, I386OP(push_bp), I386OP(push_ebp), false}, { 0x56, OP_I386, I386OP(push_si), I386OP(push_esi), false}, { 0x57, OP_I386, I386OP(push_di), I386OP(push_edi), false}, { 0x58, OP_I386, I386OP(pop_ax), I386OP(pop_eax), false}, { 0x59, OP_I386, I386OP(pop_cx), I386OP(pop_ecx), false}, { 0x5A, OP_I386, I386OP(pop_dx), I386OP(pop_edx), false}, { 0x5B, OP_I386, I386OP(pop_bx), I386OP(pop_ebx), false}, { 0x5C, OP_I386, I386OP(pop_sp), I386OP(pop_esp), false}, { 0x5D, OP_I386, I386OP(pop_bp), I386OP(pop_ebp), false}, { 0x5E, OP_I386, I386OP(pop_si), I386OP(pop_esi), false}, { 0x5F, OP_I386, I386OP(pop_di), I386OP(pop_edi), false}, { 0x60, OP_I386, I386OP(pusha), I386OP(pushad), false}, { 0x61, OP_I386, I386OP(popa), I386OP(popad), false}, { 0x62, OP_I386, I386OP(bound_r16_m16_m16), I386OP(bound_r32_m32_m32), false}, { 0x63, OP_I386, I386OP(arpl), I386OP(arpl), false}, { 0x64, OP_I386, I386OP(segment_FS), I386OP(segment_FS), false}, { 0x65, OP_I386, I386OP(segment_GS), I386OP(segment_GS), false}, { 0x66, OP_I386, I386OP(operand_size), I386OP(operand_size), false}, { 0x67, OP_I386, I386OP(address_size), I386OP(address_size), false}, { 0x68, OP_I386, I386OP(push_i16), I386OP(push_i32), false}, { 0x69, OP_I386, I386OP(imul_r16_rm16_i16), I386OP(imul_r32_rm32_i32), false}, { 0x6A, OP_I386, I386OP(push_i8), I386OP(push_i8), false}, { 0x6B, OP_I386, I386OP(imul_r16_rm16_i8), I386OP(imul_r32_rm32_i8), false}, { 0x6C, OP_I386, I386OP(insb), I386OP(insb), false}, { 0x6D, OP_I386, I386OP(insw), I386OP(insd), false}, { 0x6E, OP_I386, I386OP(outsb), I386OP(outsb), false}, { 0x6F, OP_I386, I386OP(outsw), I386OP(outsd), false}, { 0x70, OP_I386, I386OP(jo_rel8), I386OP(jo_rel8), false}, { 0x71, OP_I386, I386OP(jno_rel8), I386OP(jno_rel8), false}, { 0x72, OP_I386, I386OP(jc_rel8), I386OP(jc_rel8), false}, { 0x73, OP_I386, I386OP(jnc_rel8), I386OP(jnc_rel8), false}, { 0x74, OP_I386, I386OP(jz_rel8), I386OP(jz_rel8), false}, { 0x75, OP_I386, I386OP(jnz_rel8), I386OP(jnz_rel8), false}, { 0x76, OP_I386, I386OP(jbe_rel8), I386OP(jbe_rel8), false}, { 0x77, OP_I386, I386OP(ja_rel8), I386OP(ja_rel8), false}, { 0x78, OP_I386, I386OP(js_rel8), I386OP(js_rel8), false}, { 0x79, OP_I386, I386OP(jns_rel8), I386OP(jns_rel8), false}, { 0x7A, OP_I386, I386OP(jp_rel8), I386OP(jp_rel8), false}, { 0x7B, OP_I386, I386OP(jnp_rel8), I386OP(jnp_rel8), false}, { 0x7C, OP_I386, I386OP(jl_rel8), I386OP(jl_rel8), false}, { 0x7D, OP_I386, I386OP(jge_rel8), I386OP(jge_rel8), false}, { 0x7E, OP_I386, I386OP(jle_rel8), I386OP(jle_rel8), false}, { 0x7F, OP_I386, I386OP(jg_rel8), I386OP(jg_rel8), false}, { 0x80, OP_I386, I386OP(group80_8), I386OP(group80_8), true }, { 0x81, OP_I386, I386OP(group81_16), I386OP(group81_32), true }, { 0x82, OP_I386, I386OP(group80_8), I386OP(group80_8), true }, { 0x83, OP_I386, I386OP(group83_16), I386OP(group83_32), true }, { 0x84, OP_I386, I386OP(test_rm8_r8), I386OP(test_rm8_r8), false}, { 0x85, OP_I386, I386OP(test_rm16_r16), I386OP(test_rm32_r32), false}, { 0x86, OP_I386, I386OP(xchg_r8_rm8), I386OP(xchg_r8_rm8), true }, { 0x87, OP_I386, I386OP(xchg_r16_rm16), I386OP(xchg_r32_rm32), true }, { 0x88, OP_I386, I386OP(mov_rm8_r8), I386OP(mov_rm8_r8), false}, { 0x89, OP_I386, I386OP(mov_rm16_r16), I386OP(mov_rm32_r32), false}, { 0x8A, OP_I386, I386OP(mov_r8_rm8), I386OP(mov_r8_rm8), false}, { 0x8B, OP_I386, I386OP(mov_r16_rm16), I386OP(mov_r32_rm32), false}, { 0x8C, OP_I386, I386OP(mov_rm16_sreg), I386OP(mov_rm16_sreg), false}, { 0x8D, OP_I386, I386OP(lea16), I386OP(lea32), false}, { 0x8E, OP_I386, I386OP(mov_sreg_rm16), I386OP(mov_sreg_rm16), false}, { 0x8F, OP_I386, I386OP(pop_rm16), I386OP(pop_rm32), false}, { 0x90, OP_I386, I386OP(nop), I386OP(nop), false}, { 0x91, OP_I386, I386OP(xchg_ax_cx), I386OP(xchg_eax_ecx), false}, { 0x92, OP_I386, I386OP(xchg_ax_dx), I386OP(xchg_eax_edx), false}, { 0x93, OP_I386, I386OP(xchg_ax_bx), I386OP(xchg_eax_ebx), false}, { 0x94, OP_I386, I386OP(xchg_ax_sp), I386OP(xchg_eax_esp), false}, { 0x95, OP_I386, I386OP(xchg_ax_bp), I386OP(xchg_eax_ebp), false}, { 0x96, OP_I386, I386OP(xchg_ax_si), I386OP(xchg_eax_esi), false}, { 0x97, OP_I386, I386OP(xchg_ax_di), I386OP(xchg_eax_edi), false}, { 0x98, OP_I386, I386OP(cbw), I386OP(cwde), false}, { 0x99, OP_I386, I386OP(cwd), I386OP(cdq), false}, { 0x9A, OP_I386, I386OP(call_abs16), I386OP(call_abs32), false}, { 0x9B, OP_I386, I386OP(wait), I386OP(wait), false}, { 0x9C, OP_I386, I386OP(pushf), I386OP(pushfd), false}, { 0x9D, OP_I386, I386OP(popf), I386OP(popfd), false}, { 0x9E, OP_I386, I386OP(sahf), I386OP(sahf), false}, { 0x9F, OP_I386, I386OP(lahf), I386OP(lahf), false}, { 0xA0, OP_I386, I386OP(mov_al_m8), I386OP(mov_al_m8), false}, { 0xA1, OP_I386, I386OP(mov_ax_m16), I386OP(mov_eax_m32), false}, { 0xA2, OP_I386, I386OP(mov_m8_al), I386OP(mov_m8_al), false}, { 0xA3, OP_I386, I386OP(mov_m16_ax), I386OP(mov_m32_eax), false}, { 0xA4, OP_I386, I386OP(movsb), I386OP(movsb), false}, { 0xA5, OP_I386, I386OP(movsw), I386OP(movsd), false}, { 0xA6, OP_I386, I386OP(cmpsb), I386OP(cmpsb), false}, { 0xA7, OP_I386, I386OP(cmpsw), I386OP(cmpsd), false}, { 0xA8, OP_I386, I386OP(test_al_i8), I386OP(test_al_i8), false}, { 0xA9, OP_I386, I386OP(test_ax_i16), I386OP(test_eax_i32), false}, { 0xAA, OP_I386, I386OP(stosb), I386OP(stosb), false}, { 0xAB, OP_I386, I386OP(stosw), I386OP(stosd), false}, { 0xAC, OP_I386, I386OP(lodsb), I386OP(lodsb), false}, { 0xAD, OP_I386, I386OP(lodsw), I386OP(lodsd), false}, { 0xAE, OP_I386, I386OP(scasb), I386OP(scasb), false}, { 0xAF, OP_I386, I386OP(scasw), I386OP(scasd), false}, { 0xB0, OP_I386, I386OP(mov_al_i8), I386OP(mov_al_i8), false}, { 0xB1, OP_I386, I386OP(mov_cl_i8), I386OP(mov_cl_i8), false}, { 0xB2, OP_I386, I386OP(mov_dl_i8), I386OP(mov_dl_i8), false}, { 0xB3, OP_I386, I386OP(mov_bl_i8), I386OP(mov_bl_i8), false}, { 0xB4, OP_I386, I386OP(mov_ah_i8), I386OP(mov_ah_i8), false}, { 0xB5, OP_I386, I386OP(mov_ch_i8), I386OP(mov_ch_i8), false}, { 0xB6, OP_I386, I386OP(mov_dh_i8), I386OP(mov_dh_i8), false}, { 0xB7, OP_I386, I386OP(mov_bh_i8), I386OP(mov_bh_i8), false}, { 0xB8, OP_I386, I386OP(mov_ax_i16), I386OP(mov_eax_i32), false}, { 0xB9, OP_I386, I386OP(mov_cx_i16), I386OP(mov_ecx_i32), false}, { 0xBA, OP_I386, I386OP(mov_dx_i16), I386OP(mov_edx_i32), false}, { 0xBB, OP_I386, I386OP(mov_bx_i16), I386OP(mov_ebx_i32), false}, { 0xBC, OP_I386, I386OP(mov_sp_i16), I386OP(mov_esp_i32), false}, { 0xBD, OP_I386, I386OP(mov_bp_i16), I386OP(mov_ebp_i32), false}, { 0xBE, OP_I386, I386OP(mov_si_i16), I386OP(mov_esi_i32), false}, { 0xBF, OP_I386, I386OP(mov_di_i16), I386OP(mov_edi_i32), false}, { 0xC0, OP_I386, I386OP(groupC0_8), I386OP(groupC0_8), false}, { 0xC1, OP_I386, I386OP(groupC1_16), I386OP(groupC1_32), false}, { 0xC2, OP_I386, I386OP(ret_near16_i16), I386OP(ret_near32_i16), false}, { 0xC3, OP_I386, I386OP(ret_near16), I386OP(ret_near32), false}, { 0xC4, OP_I386, I386OP(les16), I386OP(les32), false}, { 0xC5, OP_I386, I386OP(lds16), I386OP(lds32), false}, { 0xC6, OP_I386, I386OP(mov_rm8_i8), I386OP(mov_rm8_i8), false}, { 0xC7, OP_I386, I386OP(mov_rm16_i16), I386OP(mov_rm32_i32), false}, { 0xC8, OP_I386, I386OP(enter16), I386OP(enter32), false}, { 0xC9, OP_I386, I386OP(leave16), I386OP(leave32), false}, { 0xCA, OP_I386, I386OP(retf_i16), I386OP(retf_i32), false}, { 0xCB, OP_I386, I386OP(retf16), I386OP(retf32), false}, { 0xCC, OP_I386, I386OP(int3), I386OP(int3), false}, { 0xCD, OP_I386, I386OP(int), I386OP(int), false}, { 0xCE, OP_I386, I386OP(into), I386OP(into), false}, { 0xCF, OP_I386, I386OP(iret16), I386OP(iret32), false}, { 0xD0, OP_I386, I386OP(groupD0_8), I386OP(groupD0_8), false}, { 0xD1, OP_I386, I386OP(groupD1_16), I386OP(groupD1_32), false}, { 0xD2, OP_I386, I386OP(groupD2_8), I386OP(groupD2_8), false}, { 0xD3, OP_I386, I386OP(groupD3_16), I386OP(groupD3_32), false}, { 0xD4, OP_I386, I386OP(aam), I386OP(aam), false}, { 0xD5, OP_I386, I386OP(aad), I386OP(aad), false}, { 0xD6, OP_I386, I386OP(setalc), I386OP(setalc), false}, { 0xD7, OP_I386, I386OP(xlat), I386OP(xlat), false}, { 0xD8, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xD9, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDA, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDB, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDC, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDD, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDE, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xDF, OP_I386, I386OP(escape), I386OP(escape), false}, { 0xD8, OP_FPU, I386OP(x87_group_d8), I386OP(x87_group_d8), false}, { 0xD9, OP_FPU, I386OP(x87_group_d9), I386OP(x87_group_d9), false}, { 0xDA, OP_FPU, I386OP(x87_group_da), I386OP(x87_group_da), false}, { 0xDB, OP_FPU, I386OP(x87_group_db), I386OP(x87_group_db), false}, { 0xDC, OP_FPU, I386OP(x87_group_dc), I386OP(x87_group_dc), false}, { 0xDD, OP_FPU, I386OP(x87_group_dd), I386OP(x87_group_dd), false}, { 0xDE, OP_FPU, I386OP(x87_group_de), I386OP(x87_group_de), false}, { 0xDF, OP_FPU, I386OP(x87_group_df), I386OP(x87_group_df), false}, { 0xE0, OP_I386, I386OP(loopne16), I386OP(loopne32), false}, { 0xE1, OP_I386, I386OP(loopz16), I386OP(loopz32), false}, { 0xE2, OP_I386, I386OP(loop16), I386OP(loop32), false}, { 0xE3, OP_I386, I386OP(jcxz16), I386OP(jcxz32), false}, { 0xE4, OP_I386, I386OP(in_al_i8), I386OP(in_al_i8), false}, { 0xE5, OP_I386, I386OP(in_ax_i8), I386OP(in_eax_i8), false}, { 0xE6, OP_I386, I386OP(out_al_i8), I386OP(out_al_i8), false}, { 0xE7, OP_I386, I386OP(out_ax_i8), I386OP(out_eax_i8), false}, { 0xE8, OP_I386, I386OP(call_rel16), I386OP(call_rel32), false}, { 0xE9, OP_I386, I386OP(jmp_rel16), I386OP(jmp_rel32), false}, { 0xEA, OP_I386, I386OP(jmp_abs16), I386OP(jmp_abs32), false}, { 0xEB, OP_I386, I386OP(jmp_rel8), I386OP(jmp_rel8), false}, { 0xEC, OP_I386, I386OP(in_al_dx), I386OP(in_al_dx), false}, { 0xED, OP_I386, I386OP(in_ax_dx), I386OP(in_eax_dx), false}, { 0xEE, OP_I386, I386OP(out_al_dx), I386OP(out_al_dx), false}, { 0xEF, OP_I386, I386OP(out_ax_dx), I386OP(out_eax_dx), false}, { 0xF0, OP_I386, I386OP(lock), I386OP(lock), false}, { 0xF1, OP_I386, I386OP(invalid), I386OP(invalid), false}, { 0xF2, OP_I386, I386OP(repne), I386OP(repne), false}, { 0xF3, OP_I386, I386OP(rep), I386OP(rep), false}, { 0xF4, OP_I386, I386OP(hlt), I386OP(hlt), false}, { 0xF5, OP_I386, I386OP(cmc), I386OP(cmc), false}, { 0xF6, OP_I386, I386OP(groupF6_8), I386OP(groupF6_8), true }, { 0xF7, OP_I386, I386OP(groupF7_16), I386OP(groupF7_32), true }, { 0xF8, OP_I386, I386OP(clc), I386OP(clc), false}, { 0xF9, OP_I386, I386OP(stc), I386OP(stc), false}, { 0xFA, OP_I386, I386OP(cli), I386OP(cli), false}, { 0xFB, OP_I386, I386OP(sti), I386OP(sti), false}, { 0xFC, OP_I386, I386OP(cld), I386OP(cld), false}, { 0xFD, OP_I386, I386OP(std), I386OP(std), false}, { 0xFE, OP_I386, I386OP(groupFE_8), I386OP(groupFE_8), true }, { 0xFF, OP_I386, I386OP(groupFF_16), I386OP(groupFF_32), true }, /* 0F ?? */ { 0x00, OP_2BYTE|OP_I386, I386OP(group0F00_16), I386OP(group0F00_32), false}, { 0x01, OP_2BYTE|OP_I386, I386OP(group0F01_16), I386OP(group0F01_32), false}, { 0x01, OP_2BYTE|OP_I486, I486OP(group0F01_16), I486OP(group0F01_32), false}, { 0x02, OP_2BYTE|OP_I386, I386OP(lar_r16_rm16), I386OP(lar_r32_rm32), false}, { 0x03, OP_2BYTE|OP_I386, I386OP(lsl_r16_rm16), I386OP(lsl_r32_rm32), false}, { 0x06, OP_2BYTE|OP_I386, I386OP(clts), I386OP(clts), false}, { 0x07, OP_2BYTE|OP_I386, I386OP(loadall), I386OP(loadall), false}, { 0x08, OP_2BYTE|OP_I486, I486OP(invd), I486OP(invd), false}, { 0x09, OP_2BYTE|OP_I486, I486OP(wbinvd), I486OP(wbinvd), false}, { 0x0B, OP_2BYTE|OP_PENTIUM, PENTIUMOP(ud2), PENTIUMOP(ud2), false}, { 0x10, OP_2BYTE|OP_SSE, SSEOP(movups_r128_rm128), SSEOP(movups_r128_rm128), false}, { 0x11, OP_2BYTE|OP_SSE, SSEOP(movups_rm128_r128), SSEOP(movups_rm128_r128), false}, { 0x12, OP_2BYTE|OP_SSE, SSEOP(movlps_r128_m64), SSEOP(movlps_r128_m64), false}, { 0x13, OP_2BYTE|OP_SSE, SSEOP(movlps_m64_r128), SSEOP(movlps_m64_r128), false}, { 0x14, OP_2BYTE|OP_SSE, SSEOP(unpcklps_r128_rm128), SSEOP(unpcklps_r128_rm128),false}, { 0x15, OP_2BYTE|OP_SSE, SSEOP(unpckhps_r128_rm128), SSEOP(unpckhps_r128_rm128),false}, { 0x16, OP_2BYTE|OP_SSE, SSEOP(movhps_r128_m64), SSEOP(movhps_r128_m64), false}, { 0x17, OP_2BYTE|OP_SSE, SSEOP(movhps_m64_r128), SSEOP(movhps_m64_r128), false}, { 0x18, OP_2BYTE|OP_PENTIUM, PENTIUMOP(prefetch_m8), PENTIUMOP(prefetch_m8), false}, { 0x20, OP_2BYTE|OP_I386, I386OP(mov_r32_cr), I386OP(mov_r32_cr), false}, { 0x21, OP_2BYTE|OP_I386, I386OP(mov_r32_dr), I386OP(mov_r32_dr), false}, { 0x22, OP_2BYTE|OP_I386, I386OP(mov_cr_r32), I386OP(mov_cr_r32), false}, { 0x22, OP_2BYTE|OP_I486, I486OP(mov_cr_r32), I486OP(mov_cr_r32), false}, { 0x23, OP_2BYTE|OP_I386, I386OP(mov_dr_r32), I386OP(mov_dr_r32), false}, { 0x24, OP_2BYTE|OP_I386, I386OP(mov_r32_tr), I386OP(mov_r32_tr), false}, { 0x26, OP_2BYTE|OP_I386, I386OP(mov_tr_r32), I386OP(mov_tr_r32), false}, { 0x28, OP_2BYTE|OP_SSE, SSEOP(movaps_r128_rm128), SSEOP(movaps_r128_rm128), false}, { 0x29, OP_2BYTE|OP_SSE, SSEOP(movaps_rm128_r128), SSEOP(movaps_rm128_r128), false}, { 0x2a, OP_2BYTE|OP_SSE, SSEOP(cvtpi2ps_r128_rm64), SSEOP(cvtpi2ps_r128_rm64), false}, { 0x2b, OP_2BYTE|OP_SSE, SSEOP(movntps_m128_r128), SSEOP(movntps_m128_r128), false}, { 0x2c, OP_2BYTE|OP_SSE, SSEOP(cvttps2pi_r64_r128m64), SSEOP(cvttps2pi_r64_r128m64),false}, { 0x2d, OP_2BYTE|OP_SSE, SSEOP(cvtps2pi_r64_r128m64), SSEOP(cvtps2pi_r64_r128m64),false}, { 0x2e, OP_2BYTE|OP_SSE, SSEOP(ucomiss_r128_r128m32), SSEOP(ucomiss_r128_r128m32),false}, { 0x2f, OP_2BYTE|OP_SSE, SSEOP(comiss_r128_r128m32), SSEOP(comiss_r128_r128m32),false}, { 0x30, OP_2BYTE|OP_PENTIUM, PENTIUMOP(wrmsr), PENTIUMOP(wrmsr), false}, { 0x31, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdtsc), PENTIUMOP(rdtsc), false}, { 0x32, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdmsr), PENTIUMOP(rdmsr), false}, { 0x40, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovo_r16_rm16), PENTIUMOP(cmovo_r32_rm32), false}, { 0x41, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovno_r16_rm16), PENTIUMOP(cmovno_r32_rm32),false}, { 0x42, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovb_r16_rm16), PENTIUMOP(cmovb_r32_rm32), false}, { 0x43, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovae_r16_rm16), PENTIUMOP(cmovae_r32_rm32),false}, { 0x44, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmove_r16_rm16), PENTIUMOP(cmove_r32_rm32), false}, { 0x45, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovne_r16_rm16), PENTIUMOP(cmovne_r32_rm32),false}, { 0x46, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovbe_r16_rm16), PENTIUMOP(cmovbe_r32_rm32),false}, { 0x47, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmova_r16_rm16), PENTIUMOP(cmova_r32_rm32), false}, { 0x48, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovs_r16_rm16), PENTIUMOP(cmovs_r32_rm32), false}, { 0x49, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovns_r16_rm16), PENTIUMOP(cmovns_r32_rm32),false}, { 0x4a, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovp_r16_rm16), PENTIUMOP(cmovp_r32_rm32), false}, { 0x4b, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovnp_r16_rm16), PENTIUMOP(cmovnp_r32_rm32),false}, { 0x4c, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovl_r16_rm16), PENTIUMOP(cmovl_r32_rm32), false}, { 0x4d, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovge_r16_rm16), PENTIUMOP(cmovge_r32_rm32),false}, { 0x4e, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovle_r16_rm16), PENTIUMOP(cmovle_r32_rm32),false}, { 0x4f, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovg_r16_rm16), PENTIUMOP(cmovg_r32_rm32), false}, { 0x50, OP_2BYTE|OP_SSE, SSEOP(movmskps_r16_r128), SSEOP(movmskps_r32_r128), false}, { 0x51, OP_2BYTE|OP_SSE, SSEOP(sqrtps_r128_rm128), SSEOP(sqrtps_r128_rm128), false}, { 0x52, OP_2BYTE|OP_SSE, SSEOP(rsqrtps_r128_rm128), SSEOP(rsqrtps_r128_rm128), false}, { 0x53, OP_2BYTE|OP_SSE, SSEOP(rcpps_r128_rm128), SSEOP(rcpps_r128_rm128), false}, { 0x54, OP_2BYTE|OP_SSE, SSEOP(andps_r128_rm128), SSEOP(andps_r128_rm128), false}, { 0x55, OP_2BYTE|OP_SSE, SSEOP(andnps_r128_rm128), SSEOP(andnps_r128_rm128), false}, { 0x56, OP_2BYTE|OP_SSE, SSEOP(orps_r128_rm128), SSEOP(orps_r128_rm128), false}, { 0x57, OP_2BYTE|OP_SSE, SSEOP(xorps), SSEOP(xorps), false}, { 0x58, OP_2BYTE|OP_SSE, SSEOP(addps), SSEOP(addps), false}, { 0x59, OP_2BYTE|OP_SSE, SSEOP(mulps), SSEOP(mulps), false}, { 0x5a, OP_2BYTE|OP_SSE, SSEOP(cvtps2pd_r128_r128m64), SSEOP(cvtps2pd_r128_r128m64),false}, { 0x5b, OP_2BYTE|OP_SSE, SSEOP(cvtdq2ps_r128_rm128), SSEOP(cvtdq2ps_r128_rm128),false}, { 0x5c, OP_2BYTE|OP_SSE, SSEOP(subps), SSEOP(subps), false}, { 0x5d, OP_2BYTE|OP_SSE, SSEOP(minps), SSEOP(minps), false}, { 0x5e, OP_2BYTE|OP_SSE, SSEOP(divps), SSEOP(divps), false}, { 0x5f, OP_2BYTE|OP_SSE, SSEOP(maxps), SSEOP(maxps), false}, { 0x60, OP_2BYTE|OP_MMX, MMXOP(punpcklbw_r64_r64m32), MMXOP(punpcklbw_r64_r64m32),false}, { 0x61, OP_2BYTE|OP_MMX, MMXOP(punpcklwd_r64_r64m32), MMXOP(punpcklwd_r64_r64m32),false}, { 0x62, OP_2BYTE|OP_MMX, MMXOP(punpckldq_r64_r64m32), MMXOP(punpckldq_r64_r64m32),false}, { 0x63, OP_2BYTE|OP_MMX, MMXOP(packsswb_r64_rm64), MMXOP(packsswb_r64_rm64), false}, { 0x64, OP_2BYTE|OP_MMX, MMXOP(pcmpgtb_r64_rm64), MMXOP(pcmpgtb_r64_rm64), false}, { 0x65, OP_2BYTE|OP_MMX, MMXOP(pcmpgtw_r64_rm64), MMXOP(pcmpgtw_r64_rm64), false}, { 0x66, OP_2BYTE|OP_MMX, MMXOP(pcmpgtd_r64_rm64), MMXOP(pcmpgtd_r64_rm64), false}, { 0x67, OP_2BYTE|OP_MMX, MMXOP(packuswb_r64_rm64), MMXOP(packuswb_r64_rm64), false}, { 0x68, OP_2BYTE|OP_MMX, MMXOP(punpckhbw_r64_rm64), MMXOP(punpckhbw_r64_rm64), false}, { 0x69, OP_2BYTE|OP_MMX, MMXOP(punpckhwd_r64_rm64), MMXOP(punpckhwd_r64_rm64), false}, { 0x6a, OP_2BYTE|OP_MMX, MMXOP(punpckhdq_r64_rm64), MMXOP(punpckhdq_r64_rm64), false}, { 0x6b, OP_2BYTE|OP_MMX, MMXOP(packssdw_r64_rm64), MMXOP(packssdw_r64_rm64), false}, { 0x6e, OP_2BYTE|OP_MMX, MMXOP(movd_r64_rm32), MMXOP(movd_r64_rm32), false}, { 0x6f, OP_2BYTE|OP_MMX, MMXOP(movq_r64_rm64), MMXOP(movq_r64_rm64), false}, { 0x70, OP_2BYTE|OP_MMX, MMXOP(pshufw_r64_rm64_i8), MMXOP(pshufw_r64_rm64_i8), false}, { 0x71, OP_2BYTE|OP_MMX, MMXOP(group_0f71), MMXOP(group_0f71), false}, { 0x72, OP_2BYTE|OP_MMX, MMXOP(group_0f72), MMXOP(group_0f72), false}, { 0x73, OP_2BYTE|OP_MMX, MMXOP(group_0f73), MMXOP(group_0f73), false}, { 0x74, OP_2BYTE|OP_CYRIX, I386OP(cyrix_unknown), I386OP(cyrix_unknown), false}, { 0x74, OP_2BYTE|OP_MMX, MMXOP(pcmpeqb_r64_rm64), MMXOP(pcmpeqb_r64_rm64), false}, { 0x75, OP_2BYTE|OP_MMX, MMXOP(pcmpeqw_r64_rm64), MMXOP(pcmpeqw_r64_rm64), false}, { 0x76, OP_2BYTE|OP_MMX, MMXOP(pcmpeqd_r64_rm64), MMXOP(pcmpeqd_r64_rm64), false}, { 0x77, OP_2BYTE|OP_MMX, MMXOP(emms), MMXOP(emms), false}, { 0x7e, OP_2BYTE|OP_MMX, MMXOP(movd_rm32_r64), MMXOP(movd_rm32_r64), false}, { 0x7f, OP_2BYTE|OP_MMX, MMXOP(movq_rm64_r64), MMXOP(movq_rm64_r64), false}, { 0x80, OP_2BYTE|OP_I386, I386OP(jo_rel16), I386OP(jo_rel32), false}, { 0x81, OP_2BYTE|OP_I386, I386OP(jno_rel16), I386OP(jno_rel32), false}, { 0x82, OP_2BYTE|OP_I386, I386OP(jc_rel16), I386OP(jc_rel32), false}, { 0x83, OP_2BYTE|OP_I386, I386OP(jnc_rel16), I386OP(jnc_rel32), false}, { 0x84, OP_2BYTE|OP_I386, I386OP(jz_rel16), I386OP(jz_rel32), false}, { 0x85, OP_2BYTE|OP_I386, I386OP(jnz_rel16), I386OP(jnz_rel32), false}, { 0x86, OP_2BYTE|OP_I386, I386OP(jbe_rel16), I386OP(jbe_rel32), false}, { 0x87, OP_2BYTE|OP_I386, I386OP(ja_rel16), I386OP(ja_rel32), false}, { 0x88, OP_2BYTE|OP_I386, I386OP(js_rel16), I386OP(js_rel32), false}, { 0x89, OP_2BYTE|OP_I386, I386OP(jns_rel16), I386OP(jns_rel32), false}, { 0x8A, OP_2BYTE|OP_I386, I386OP(jp_rel16), I386OP(jp_rel32), false}, { 0x8B, OP_2BYTE|OP_I386, I386OP(jnp_rel16), I386OP(jnp_rel32), false}, { 0x8C, OP_2BYTE|OP_I386, I386OP(jl_rel16), I386OP(jl_rel32), false}, { 0x8D, OP_2BYTE|OP_I386, I386OP(jge_rel16), I386OP(jge_rel32), false}, { 0x8E, OP_2BYTE|OP_I386, I386OP(jle_rel16), I386OP(jle_rel32), false}, { 0x8F, OP_2BYTE|OP_I386, I386OP(jg_rel16), I386OP(jg_rel32), false}, { 0x90, OP_2BYTE|OP_I386, I386OP(seto_rm8), I386OP(seto_rm8), false}, { 0x91, OP_2BYTE|OP_I386, I386OP(setno_rm8), I386OP(setno_rm8), false}, { 0x92, OP_2BYTE|OP_I386, I386OP(setc_rm8), I386OP(setc_rm8), false}, { 0x93, OP_2BYTE|OP_I386, I386OP(setnc_rm8), I386OP(setnc_rm8), false}, { 0x94, OP_2BYTE|OP_I386, I386OP(setz_rm8), I386OP(setz_rm8), false}, { 0x95, OP_2BYTE|OP_I386, I386OP(setnz_rm8), I386OP(setnz_rm8), false}, { 0x96, OP_2BYTE|OP_I386, I386OP(setbe_rm8), I386OP(setbe_rm8), false}, { 0x97, OP_2BYTE|OP_I386, I386OP(seta_rm8), I386OP(seta_rm8), false}, { 0x98, OP_2BYTE|OP_I386, I386OP(sets_rm8), I386OP(sets_rm8), false}, { 0x99, OP_2BYTE|OP_I386, I386OP(setns_rm8), I386OP(setns_rm8), false}, { 0x9A, OP_2BYTE|OP_I386, I386OP(setp_rm8), I386OP(setp_rm8), false}, { 0x9B, OP_2BYTE|OP_I386, I386OP(setnp_rm8), I386OP(setnp_rm8), false}, { 0x9C, OP_2BYTE|OP_I386, I386OP(setl_rm8), I386OP(setl_rm8), false}, { 0x9D, OP_2BYTE|OP_I386, I386OP(setge_rm8), I386OP(setge_rm8), false}, { 0x9E, OP_2BYTE|OP_I386, I386OP(setle_rm8), I386OP(setle_rm8), false}, { 0x9F, OP_2BYTE|OP_I386, I386OP(setg_rm8), I386OP(setg_rm8), false}, { 0xA0, OP_2BYTE|OP_I386, I386OP(push_fs16), I386OP(push_fs32), false}, { 0xA1, OP_2BYTE|OP_I386, I386OP(pop_fs16), I386OP(pop_fs32), false}, { 0xA2, OP_2BYTE|OP_I486, I486OP(cpuid), I486OP(cpuid), false}, { 0xA3, OP_2BYTE|OP_I386, I386OP(bt_rm16_r16), I386OP(bt_rm32_r32), false}, { 0xA4, OP_2BYTE|OP_I386, I386OP(shld16_i8), I386OP(shld32_i8), false}, { 0xA5, OP_2BYTE|OP_I386, I386OP(shld16_cl), I386OP(shld32_cl), false}, { 0xA8, OP_2BYTE|OP_I386, I386OP(push_gs16), I386OP(push_gs32), false}, { 0xA9, OP_2BYTE|OP_I386, I386OP(pop_gs16), I386OP(pop_gs32), false}, { 0xAA, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rsm), PENTIUMOP(rsm), false}, { 0xAB, OP_2BYTE|OP_I386, I386OP(bts_rm16_r16), I386OP(bts_rm32_r32), true }, { 0xAC, OP_2BYTE|OP_I386, I386OP(shrd16_i8), I386OP(shrd32_i8), false}, { 0xAD, OP_2BYTE|OP_I386, I386OP(shrd16_cl), I386OP(shrd32_cl), false}, { 0xAE, OP_2BYTE|OP_SSE, SSEOP(sse_group0fae), SSEOP(sse_group0fae), false}, { 0xAF, OP_2BYTE|OP_I386, I386OP(imul_r16_rm16), I386OP(imul_r32_rm32), false}, { 0xB0, OP_2BYTE|OP_I486, I486OP(cmpxchg_rm8_r8), I486OP(cmpxchg_rm8_r8), true }, { 0xB1, OP_2BYTE|OP_I486, I486OP(cmpxchg_rm16_r16), I486OP(cmpxchg_rm32_r32), true }, { 0xB2, OP_2BYTE|OP_I386, I386OP(lss16), I386OP(lss32), false}, { 0xB3, OP_2BYTE|OP_I386, I386OP(btr_rm16_r16), I386OP(btr_rm32_r32), true }, { 0xB4, OP_2BYTE|OP_I386, I386OP(lfs16), I386OP(lfs32), false}, { 0xB5, OP_2BYTE|OP_I386, I386OP(lgs16), I386OP(lgs32), false}, { 0xB6, OP_2BYTE|OP_I386, I386OP(movzx_r16_rm8), I386OP(movzx_r32_rm8), false}, { 0xB7, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(movzx_r32_rm16), false}, { 0xBA, OP_2BYTE|OP_I386, I386OP(group0FBA_16), I386OP(group0FBA_32), true }, { 0xBB, OP_2BYTE|OP_I386, I386OP(btc_rm16_r16), I386OP(btc_rm32_r32), true }, { 0xBC, OP_2BYTE|OP_I386, I386OP(bsf_r16_rm16), I386OP(bsf_r32_rm32), false}, { 0xBD, OP_2BYTE|OP_I386, I386OP(bsr_r16_rm16), I386OP(bsr_r32_rm32), false}, { 0xBE, OP_2BYTE|OP_I386, I386OP(movsx_r16_rm8), I386OP(movsx_r32_rm8), false}, { 0xBF, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(movsx_r32_rm16), false}, { 0xC0, OP_2BYTE|OP_I486, I486OP(xadd_rm8_r8), I486OP(xadd_rm8_r8), true }, { 0xC1, OP_2BYTE|OP_I486, I486OP(xadd_rm16_r16), I486OP(xadd_rm32_r32), true }, { 0xC2, OP_2BYTE|OP_SSE, SSEOP(cmpps_r128_rm128_i8), SSEOP(cmpps_r128_rm128_i8),false}, { 0xC3, OP_2BYTE|OP_PENTIUM, PENTIUMOP(movnti_m16_r16), PENTIUMOP(movnti_m32_r32), false}, { 0xC4, OP_2BYTE|OP_SSE, SSEOP(pinsrw_r64_r16m16_i8), SSEOP(pinsrw_r64_r32m16_i8),false}, { 0xC5, OP_2BYTE|OP_SSE, SSEOP(pextrw_r16_r64_i8), SSEOP(pextrw_r32_r64_i8), false}, { 0xC6, OP_2BYTE|OP_SSE, SSEOP(shufps), SSEOP(shufps), false}, { 0xC7, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmpxchg8b_m64), PENTIUMOP(cmpxchg8b_m64), true }, { 0xC8, OP_2BYTE|OP_I486, I486OP(bswap_eax), I486OP(bswap_eax), false}, { 0xC9, OP_2BYTE|OP_I486, I486OP(bswap_ecx), I486OP(bswap_ecx), false}, { 0xCA, OP_2BYTE|OP_I486, I486OP(bswap_edx), I486OP(bswap_edx), false}, { 0xCB, OP_2BYTE|OP_I486, I486OP(bswap_ebx), I486OP(bswap_ebx), false}, { 0xCC, OP_2BYTE|OP_I486, I486OP(bswap_esp), I486OP(bswap_esp), false}, { 0xCD, OP_2BYTE|OP_I486, I486OP(bswap_ebp), I486OP(bswap_ebp), false}, { 0xCE, OP_2BYTE|OP_I486, I486OP(bswap_esi), I486OP(bswap_esi), false}, { 0xCF, OP_2BYTE|OP_I486, I486OP(bswap_edi), I486OP(bswap_edi), false}, { 0xD1, OP_2BYTE|OP_MMX, MMXOP(psrlw_r64_rm64), MMXOP(psrlw_r64_rm64), false}, { 0xD2, OP_2BYTE|OP_MMX, MMXOP(psrld_r64_rm64), MMXOP(psrld_r64_rm64), false}, { 0xD3, OP_2BYTE|OP_MMX, MMXOP(psrlq_r64_rm64), MMXOP(psrlq_r64_rm64), false}, { 0xD4, OP_2BYTE|OP_MMX, MMXOP(paddq_r64_rm64), MMXOP(paddq_r64_rm64), false}, { 0xD5, OP_2BYTE|OP_MMX, MMXOP(pmullw_r64_rm64), MMXOP(pmullw_r64_rm64), false}, { 0xD7, OP_2BYTE|OP_SSE, SSEOP(pmovmskb_r16_r64), SSEOP(pmovmskb_r32_r64), false}, { 0xD8, OP_2BYTE|OP_MMX, MMXOP(psubusb_r64_rm64), MMXOP(psubusb_r64_rm64), false}, { 0xD9, OP_2BYTE|OP_MMX, MMXOP(psubusw_r64_rm64), MMXOP(psubusw_r64_rm64), false}, { 0xDA, OP_2BYTE|OP_SSE, SSEOP(pminub_r64_rm64), SSEOP(pminub_r64_rm64), false}, { 0xDB, OP_2BYTE|OP_MMX, MMXOP(pand_r64_rm64), MMXOP(pand_r64_rm64), false}, { 0xDC, OP_2BYTE|OP_MMX, MMXOP(paddusb_r64_rm64), MMXOP(paddusb_r64_rm64), false}, { 0xDD, OP_2BYTE|OP_MMX, MMXOP(paddusw_r64_rm64), MMXOP(paddusw_r64_rm64), false}, { 0xDE, OP_2BYTE|OP_SSE, SSEOP(pmaxub_r64_rm64), SSEOP(pmaxub_r64_rm64), false}, { 0xDF, OP_2BYTE|OP_MMX, MMXOP(pandn_r64_rm64), MMXOP(pandn_r64_rm64), false}, { 0xE0, OP_2BYTE|OP_SSE, SSEOP(pavgb_r64_rm64), SSEOP(pavgb_r64_rm64), false}, { 0xE1, OP_2BYTE|OP_MMX, MMXOP(psraw_r64_rm64), MMXOP(psraw_r64_rm64), false}, { 0xE2, OP_2BYTE|OP_MMX, MMXOP(psrad_r64_rm64), MMXOP(psrad_r64_rm64), false}, { 0xE3, OP_2BYTE|OP_SSE, SSEOP(pavgw_r64_rm64), SSEOP(pavgw_r64_rm64), false}, { 0xE4, OP_2BYTE|OP_SSE, SSEOP(pmulhuw_r64_rm64), SSEOP(pmulhuw_r64_rm64), false}, { 0xE5, OP_2BYTE|OP_MMX, MMXOP(pmulhw_r64_rm64), MMXOP(pmulhw_r64_rm64), false}, { 0xE7, OP_2BYTE|OP_PENTIUM, PENTIUMOP(movntq_m64_r64), PENTIUMOP(movntq_m64_r64), false}, { 0xE8, OP_2BYTE|OP_MMX, MMXOP(psubsb_r64_rm64), MMXOP(psubsb_r64_rm64), false}, { 0xE9, OP_2BYTE|OP_MMX, MMXOP(psubsw_r64_rm64), MMXOP(psubsw_r64_rm64), false}, { 0xEA, OP_2BYTE|OP_SSE, SSEOP(pminsw_r64_rm64), SSEOP(pminsw_r64_rm64), false}, { 0xEB, OP_2BYTE|OP_MMX, MMXOP(por_r64_rm64), MMXOP(por_r64_rm64), false}, { 0xEC, OP_2BYTE|OP_MMX, MMXOP(paddsb_r64_rm64), MMXOP(paddsb_r64_rm64), false}, { 0xED, OP_2BYTE|OP_MMX, MMXOP(paddsw_r64_rm64), MMXOP(paddsw_r64_rm64), false}, { 0xEE, OP_2BYTE|OP_SSE, SSEOP(pmaxsw_r64_rm64), SSEOP(pmaxsw_r64_rm64), false}, { 0xEF, OP_2BYTE|OP_MMX, MMXOP(pxor_r64_rm64), MMXOP(pxor_r64_rm64), false}, { 0xF1, OP_2BYTE|OP_MMX, MMXOP(psllw_r64_rm64), MMXOP(psllw_r64_rm64), false}, { 0xF2, OP_2BYTE|OP_MMX, MMXOP(pslld_r64_rm64), MMXOP(pslld_r64_rm64), false}, { 0xF3, OP_2BYTE|OP_MMX, MMXOP(psllq_r64_rm64), MMXOP(psllq_r64_rm64), false}, { 0xF4, OP_2BYTE|OP_SSE, SSEOP(pmuludq_r64_rm64), SSEOP(pmuludq_r64_rm64), false}, { 0xF5, OP_2BYTE|OP_MMX, MMXOP(pmaddwd_r64_rm64), MMXOP(pmaddwd_r64_rm64), false}, { 0xF6, OP_2BYTE|OP_SSE, SSEOP(psadbw_r64_rm64), SSEOP(psadbw_r64_rm64), false}, { 0xf7, OP_2BYTE|OP_PENTIUM, PENTIUMOP(maskmovq_r64_r64), PENTIUMOP(maskmovq_r64_r64),false}, { 0xF8, OP_2BYTE|OP_MMX, MMXOP(psubb_r64_rm64), MMXOP(psubb_r64_rm64), false}, { 0xF9, OP_2BYTE|OP_MMX, MMXOP(psubw_r64_rm64), MMXOP(psubw_r64_rm64), false}, { 0xFA, OP_2BYTE|OP_MMX, MMXOP(psubd_r64_rm64), MMXOP(psubd_r64_rm64), false}, { 0xFB, OP_2BYTE|OP_SSE, SSEOP(psubq_r64_rm64), SSEOP(psubq_r64_rm64), false}, { 0xFC, OP_2BYTE|OP_MMX, MMXOP(paddb_r64_rm64), MMXOP(paddb_r64_rm64), false}, { 0xFD, OP_2BYTE|OP_MMX, MMXOP(paddw_r64_rm64), MMXOP(paddw_r64_rm64), false}, { 0xFE, OP_2BYTE|OP_MMX, MMXOP(paddd_r64_rm64), MMXOP(paddd_r64_rm64), false}, /* F3 0F ?? */ { 0x10, OP_3BYTEF3|OP_SSE, SSEOP(movss_r128_rm128), SSEOP(movss_r128_rm128), false}, { 0x11, OP_3BYTEF3|OP_SSE, SSEOP(movss_rm128_r128), SSEOP(movss_rm128_r128), false}, { 0x12, OP_3BYTEF3|OP_SSE, SSEOP(movsldup_r128_rm128), SSEOP(movsldup_r128_rm128),false}, { 0x16, OP_3BYTEF3|OP_SSE, SSEOP(movshdup_r128_rm128), SSEOP(movshdup_r128_rm128),false}, { 0x2A, OP_3BYTEF3|OP_SSE, SSEOP(cvtsi2ss_r128_rm32), SSEOP(cvtsi2ss_r128_rm32), false}, { 0x2C, OP_3BYTEF3|OP_SSE, SSEOP(cvttss2si_r32_r128m32), SSEOP(cvttss2si_r32_r128m32),false}, { 0x2D, OP_3BYTEF3|OP_SSE, SSEOP(cvtss2si_r32_r128m32), SSEOP(cvtss2si_r32_r128m32),false}, { 0x51, OP_3BYTEF3|OP_SSE, SSEOP(sqrtss_r128_r128m32), SSEOP(sqrtss_r128_r128m32),false}, { 0x52, OP_3BYTEF3|OP_SSE, SSEOP(rsqrtss_r128_r128m32), SSEOP(rsqrtss_r128_r128m32),false}, { 0x53, OP_3BYTEF3|OP_SSE, SSEOP(rcpss_r128_r128m32), SSEOP(rcpss_r128_r128m32), false}, { 0x58, OP_3BYTEF3|OP_SSE, SSEOP(addss), SSEOP(addss), false}, { 0x59, OP_3BYTEF3|OP_SSE, SSEOP(mulss), SSEOP(mulss), false}, { 0x5A, OP_3BYTEF3|OP_SSE, SSEOP(cvtss2sd_r128_r128m32), SSEOP(cvtss2sd_r128_r128m32),false}, { 0x5B, OP_3BYTEF3|OP_SSE, SSEOP(cvttps2dq_r128_rm128), SSEOP(cvttps2dq_r128_rm128),false}, { 0x5C, OP_3BYTEF3|OP_SSE, SSEOP(subss), SSEOP(subss), false}, { 0x5D, OP_3BYTEF3|OP_SSE, SSEOP(minss_r128_r128m32), SSEOP(minss_r128_r128m32), false}, { 0x5E, OP_3BYTEF3|OP_SSE, SSEOP(divss), SSEOP(divss), false}, { 0x5F, OP_3BYTEF3|OP_SSE, SSEOP(maxss_r128_r128m32), SSEOP(maxss_r128_r128m32), false}, { 0x6F, OP_3BYTEF3|OP_SSE, SSEOP(movdqu_r128_rm128), SSEOP(movdqu_r128_rm128), false}, { 0x70, OP_3BYTEF3|OP_SSE, SSEOP(pshufhw_r128_rm128_i8), SSEOP(pshufhw_r128_rm128_i8),false}, { 0x7E, OP_3BYTEF3|OP_SSE, SSEOP(movq_r128_r128m64), SSEOP(movq_r128_r128m64), false}, { 0x7F, OP_3BYTEF3|OP_SSE, SSEOP(movdqu_rm128_r128), SSEOP(movdqu_rm128_r128), false}, { 0xB8, OP_3BYTEF3|OP_PENTIUM, PENTIUMOP(popcnt_r16_rm16), PENTIUMOP(popcnt_r32_rm32),false}, { 0xBC, OP_3BYTEF3|OP_PENTIUM, PENTIUMOP(tzcnt_r16_rm16), PENTIUMOP(tzcnt_r32_rm32),false}, { 0xC2, OP_3BYTEF3|OP_SSE, SSEOP(cmpss_r128_r128m32_i8), SSEOP(cmpss_r128_r128m32_i8),false}, { 0xD6, OP_3BYTEF3|OP_SSE, SSEOP(movq2dq_r128_r64), SSEOP(movq2dq_r128_r64), false}, { 0xE6, OP_3BYTEF3|OP_SSE, SSEOP(cvtdq2pd_r128_r128m64), SSEOP(cvtdq2pd_r128_r128m64),false} }; ================================================ FILE: vm86/mame/emu/cpu/i386.old/i386priv.h ================================================ #pragma once #ifndef __I386_H__ #define __I386_H__ //#include "i386.h" #include "../../../lib/softfloat/milieu.h" #include "../../../lib/softfloat/softfloat.h" #include "../vtlb.h" //#define DEBUG_MISSING_OPCODE #define I386OP(XX) i386_##XX #define I486OP(XX) i486_##XX #define PENTIUMOP(XX) pentium_##XX #define MMXOP(XX) mmx_##XX #define SSEOP(XX) sse_##XX extern int i386_dasm_one(char *buffer, UINT32 pc, const UINT8 *oprom, int mode); enum SREGS { ES, CS, SS, DS, FS, GS }; enum BREGS { AL = NATIVE_ENDIAN_VALUE_LE_BE(0,3), AH = NATIVE_ENDIAN_VALUE_LE_BE(1,2), CL = NATIVE_ENDIAN_VALUE_LE_BE(4,7), CH = NATIVE_ENDIAN_VALUE_LE_BE(5,6), DL = NATIVE_ENDIAN_VALUE_LE_BE(8,11), DH = NATIVE_ENDIAN_VALUE_LE_BE(9,10), BL = NATIVE_ENDIAN_VALUE_LE_BE(12,15), BH = NATIVE_ENDIAN_VALUE_LE_BE(13,14) }; enum WREGS { AX = NATIVE_ENDIAN_VALUE_LE_BE(0,1), CX = NATIVE_ENDIAN_VALUE_LE_BE(2,3), DX = NATIVE_ENDIAN_VALUE_LE_BE(4,5), BX = NATIVE_ENDIAN_VALUE_LE_BE(6,7), SP = NATIVE_ENDIAN_VALUE_LE_BE(8,9), BP = NATIVE_ENDIAN_VALUE_LE_BE(10,11), SI = NATIVE_ENDIAN_VALUE_LE_BE(12,13), DI = NATIVE_ENDIAN_VALUE_LE_BE(14,15) }; enum DREGS { EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI }; enum { I386_PC = 0, /* 8-bit registers */ I386_AL, I386_AH, I386_BL, I386_BH, I386_CL, I386_CH, I386_DL, I386_DH, /* 16-bit registers */ I386_AX, I386_BX, I386_CX, I386_DX, I386_BP, I386_SP, I386_SI, I386_DI, I386_IP, /* 32-bit registers */ I386_EAX, I386_ECX, I386_EDX, I386_EBX, I386_EBP, I386_ESP, I386_ESI, I386_EDI, I386_EIP, /* segment registers */ I386_CS, I386_CS_BASE, I386_CS_LIMIT, I386_CS_FLAGS, I386_SS, I386_SS_BASE, I386_SS_LIMIT, I386_SS_FLAGS, I386_DS, I386_DS_BASE, I386_DS_LIMIT, I386_DS_FLAGS, I386_ES, I386_ES_BASE, I386_ES_LIMIT, I386_ES_FLAGS, I386_FS, I386_FS_BASE, I386_FS_LIMIT, I386_FS_FLAGS, I386_GS, I386_GS_BASE, I386_GS_LIMIT, I386_GS_FLAGS, /* other */ I386_EFLAGS, I386_CR0, I386_CR1, I386_CR2, I386_CR3, I386_CR4, I386_DR0, I386_DR1, I386_DR2, I386_DR3, I386_DR4, I386_DR5, I386_DR6, I386_DR7, I386_TR6, I386_TR7, I386_GDTR_BASE, I386_GDTR_LIMIT, I386_IDTR_BASE, I386_IDTR_LIMIT, I386_TR, I386_TR_BASE, I386_TR_LIMIT, I386_TR_FLAGS, I386_LDTR, I386_LDTR_BASE, I386_LDTR_LIMIT, I386_LDTR_FLAGS, I386_CPL, X87_CTRL, X87_STATUS, X87_TAG, X87_ST0, X87_ST1, X87_ST2, X87_ST3, X87_ST4, X87_ST5, X87_ST6, X87_ST7, SSE_XMM0, SSE_XMM1, SSE_XMM2, SSE_XMM3, SSE_XMM4, SSE_XMM5, SSE_XMM6, SSE_XMM7 }; enum { /* mmx registers aliased to x87 ones */ MMX_MM0=X87_ST0, MMX_MM1=X87_ST1, MMX_MM2=X87_ST2, MMX_MM3=X87_ST3, MMX_MM4=X87_ST4, MMX_MM5=X87_ST5, MMX_MM6=X87_ST6, MMX_MM7=X87_ST7 }; enum smram { SMRAM_SMBASE = 0xF8, SMRAM_SMREV = 0xFC, SMRAM_IORSRT = 0x100, SMRAM_AHALT = 0x102, SMRAM_IOEDI = 0x104, SMRAM_IOECX = 0x108, SMRAM_IOESI = 0x10C, SMRAM_ES = 0x1A8, SMRAM_CS = 0x1AC, SMRAM_SS = 0x1B0, SMRAM_DS = 0x1B4, SMRAM_FS = 0x1B8, SMRAM_GS = 0x1BC, SMRAM_LDTR = 0x1C0, SMRAM_TR = 0x1C4, SMRAM_DR7 = 0x1C8, SMRAM_DR6 = 0x1CC, SMRAM_EAX = 0x1D0, SMRAM_ECX = 0x1D4, SMRAM_EDX = 0x1D8, SMRAM_EBX = 0x1DC, SMRAM_ESP = 0x1E0, SMRAM_EBP = 0x1E4, SMRAM_ESI = 0x1E8, SMRAM_EDI = 0x1EC, SMRAM_EIP = 0x1F0, SMRAM_EFLAGS = 0x1F4, SMRAM_CR3 = 0x1F8, SMRAM_CR0 = 0x1FC, }; enum smram_intel_p5 { SMRAM_IP5_IOEIP = 0x110, SMRAM_IP5_CR4 = 0x128, SMRAM_IP5_ESLIM = 0x130, SMRAM_IP5_ESBASE = 0x134, SMRAM_IP5_ESACC = 0x138, SMRAM_IP5_CSLIM = 0x13C, SMRAM_IP5_CSBASE = 0x140, SMRAM_IP5_CSACC = 0x144, SMRAM_IP5_SSLIM = 0x148, SMRAM_IP5_SSBASE = 0x14C, SMRAM_IP5_SSACC = 0x150, SMRAM_IP5_DSLIM = 0x154, SMRAM_IP5_DSBASE = 0x158, SMRAM_IP5_DSACC = 0x15C, SMRAM_IP5_FSLIM = 0x160, SMRAM_IP5_FSBASE = 0x164, SMRAM_IP5_FSACC = 0x168, SMRAM_IP5_GSLIM = 0x16C, SMRAM_IP5_GSBASE = 0x170, SMRAM_IP5_GSACC = 0x174, SMRAM_IP5_LDTLIM = 0x178, SMRAM_IP5_LDTBASE = 0x17C, SMRAM_IP5_LDTACC = 0x180, SMRAM_IP5_GDTLIM = 0x184, SMRAM_IP5_GDTBASE = 0x188, SMRAM_IP5_GDTACC = 0x18C, SMRAM_IP5_IDTLIM = 0x190, SMRAM_IP5_IDTBASE = 0x194, SMRAM_IP5_IDTACC = 0x198, SMRAM_IP5_TRLIM = 0x19C, SMRAM_IP5_TRBASE = 0x1A0, SMRAM_IP5_TRACC = 0x1A4, }; /* Protected mode exceptions */ #define FAULT_UD 6 // Invalid Opcode #define FAULT_NM 7 // Coprocessor not available #define FAULT_DF 8 // Double Fault #define FAULT_TS 10 // Invalid TSS #define FAULT_NP 11 // Segment or Gate not present #define FAULT_SS 12 // Stack fault #define FAULT_GP 13 // General Protection Fault #define FAULT_PF 14 // Page Fault #define FAULT_MF 16 // Match (Coprocessor) Fault /* MXCSR Control and Status Register */ #define MXCSR_IE (1<<0) // Invalid Operation Flag #define MXCSR_DE (1<<1) // Denormal Flag #define MXCSR_ZE (1<<2) // Divide-by-Zero Flag #define MXCSR_OE (1<<3) // Overflow Flag #define MXCSR_UE (1<<4) // Underflow Flag #define MXCSR_PE (1<<5) // Precision Flag #define MXCSR_DAZ (1<<6) // Denormals Are Zeros #define MXCSR_IM (1<<7) // Invalid Operation Mask #define MXCSR_DM (1<<8) // Denormal Operation Mask #define MXCSR_ZM (1<<9) // Divide-by-Zero Mask #define MXCSR_OM (1<<10) // Overflow Mask #define MXCSR_UM (1<<11) // Underflow Mask #define MXCSR_PM (1<<12) // Precision Mask #define MXCSR_RC (3<<13) // Rounding Control #define MXCSR_FZ (1<<15) // Flush to Zero struct I386_SREG { UINT16 selector; UINT16 flags; UINT32 base; UINT32 limit; int d; // Operand size bool valid; }; struct I386_CALL_GATE { UINT16 segment; UINT16 selector; UINT32 offset; UINT8 ar; // access rights UINT8 dpl; UINT8 dword_count; UINT8 present; }; struct I386_SYS_TABLE { UINT32 base; UINT16 limit; }; struct I386_SEG_DESC { UINT16 segment; UINT16 flags; UINT32 base; UINT32 limit; }; union I386_GPR { UINT32 d[8]; UINT16 w[16]; UINT8 b[32]; }; union MMX_REG { UINT32 d[2]; INT32 i[2]; UINT16 w[4]; INT16 s[4]; UINT8 b[8]; INT8 c[8]; float f[2]; UINT64 q; INT64 l; }; union XMM_REG { UINT8 b[16]; UINT16 w[8]; UINT32 d[4]; UINT64 q[2]; INT8 c[16]; INT16 s[8]; INT32 i[4]; INT64 l[2]; float f[4]; double f64[2]; }; //struct i386_state //{ I386_GPR m_reg; I386_SREG m_sreg[6]; UINT32 m_eip; UINT32 m_pc; UINT32 m_prev_eip; UINT32 m_eflags; UINT32 m_eflags_mask; UINT8 m_CF; UINT8 m_DF; UINT8 m_SF; UINT8 m_OF; UINT8 m_ZF; UINT8 m_PF; UINT8 m_AF; UINT8 m_IF; UINT8 m_TF; UINT8 m_IOP1; UINT8 m_IOP2; UINT8 m_NT; UINT8 m_RF; UINT8 m_VM; UINT8 m_AC; UINT8 m_VIF; UINT8 m_VIP; UINT8 m_ID; UINT8 m_CPL; // current privilege level UINT8 m_performed_intersegment_jump; UINT8 m_delayed_interrupt_enable; UINT32 m_cr[5]; // Control registers UINT32 m_dr[8]; // Debug registers UINT32 m_tr[8]; // Test registers I386_SYS_TABLE m_gdtr; // Global Descriptor Table Register I386_SYS_TABLE m_idtr; // Interrupt Descriptor Table Register I386_SEG_DESC m_task; // Task register I386_SEG_DESC m_ldtr; // Local Descriptor Table Register UINT8 m_ext; // external interrupt int m_halted; int m_operand_size; int m_xmm_operand_size; int m_address_size; int m_operand_prefix; int m_address_prefix; int m_segment_prefix; int m_segment_override; int m_cycles; int m_base_cycles; UINT8 m_opcode; UINT8 m_irq_state; UINT32 m_a20_mask; int m_cpuid_max_input_value_eax; UINT32 m_cpuid_id0, m_cpuid_id1, m_cpuid_id2; UINT32 m_cpu_version; UINT32 m_feature_flags; UINT64 m_tsc; UINT64 m_perfctr[2]; // FPU floatx80 m_x87_reg[8]; UINT16 m_x87_cw; UINT16 m_x87_sw; UINT16 m_x87_tw; UINT64 m_x87_data_ptr; UINT64 m_x87_inst_ptr; UINT16 m_x87_opcode; void (*m_opcode_table_x87_d8[256])(UINT8 modrm); void (*m_opcode_table_x87_d9[256])(UINT8 modrm); void (*m_opcode_table_x87_da[256])(UINT8 modrm); void (*m_opcode_table_x87_db[256])(UINT8 modrm); void (*m_opcode_table_x87_dc[256])(UINT8 modrm); void (*m_opcode_table_x87_dd[256])(UINT8 modrm); void (*m_opcode_table_x87_de[256])(UINT8 modrm); void (*m_opcode_table_x87_df[256])(UINT8 modrm); // SSE XMM_REG m_sse_reg[8]; UINT32 m_mxcsr; void (*m_opcode_table1_16[256])(); void (*m_opcode_table1_32[256])(); void (*m_opcode_table2_16[256])(); void (*m_opcode_table2_32[256])(); void (*m_opcode_table366_16[256])(); void (*m_opcode_table366_32[256])(); void (*m_opcode_table3f2_16[256])(); void (*m_opcode_table3f2_32[256])(); void (*m_opcode_table3f3_16[256])(); void (*m_opcode_table3f3_32[256])(); bool m_lock_table[2][256]; UINT8 *m_cycle_table_pm; UINT8 *m_cycle_table_rm; vtlb_state *m_vtlb; bool m_smm; bool m_smi; bool m_smi_latched; bool m_nmi_masked; bool m_nmi_latched; UINT32 m_smbase; // devcb_resolved_write_line m_smiact; bool m_lock; // bytes in current opcode, debug only #ifdef DEBUG_MISSING_OPCODE UINT8 m_opcode_bytes[16]; UINT32 m_opcode_pc; int m_opcode_bytes_length; #endif //}; extern int i386_parity_table[256]; static int i386_limit_check(int seg, UINT32 offset); #define FAULT_THROW(fault,error) { throw (UINT64)(fault | (UINT64)error << 32); } #define PF_THROW(error) { m_cr[2] = address; FAULT_THROW(FAULT_PF,error); } #define PROTECTED_MODE (m_cr[0] & 0x1) #define STACK_32BIT (m_sreg[SS].d) #define V8086_MODE (m_VM) #define NESTED_TASK (m_NT) #define WP (m_cr[0] & 0x10000) #define SetOF_Add32(r,s,d) (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x80000000) ? 1: 0) #define SetOF_Add16(r,s,d) (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x8000) ? 1 : 0) #define SetOF_Add8(r,s,d) (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x80) ? 1 : 0) #define SetOF_Sub32(r,s,d) (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x80000000) ? 1 : 0) #define SetOF_Sub16(r,s,d) (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x8000) ? 1 : 0) #define SetOF_Sub8(r,s,d) (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x80) ? 1 : 0) #define SetCF8(x) {m_CF = ((x) & 0x100) ? 1 : 0; } #define SetCF16(x) {m_CF = ((x) & 0x10000) ? 1 : 0; } #define SetCF32(x) {m_CF = ((x) & (((UINT64)1) << 32)) ? 1 : 0; } #define SetSF(x) (m_SF = (x)) #define SetZF(x) (m_ZF = (x)) #define SetAF(x,y,z) (m_AF = (((x) ^ ((y) ^ (z))) & 0x10) ? 1 : 0) #define SetPF(x) (m_PF = i386_parity_table[(x) & 0xFF]) #define SetSZPF8(x) {m_ZF = ((UINT8)(x)==0); m_SF = ((x)&0x80) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; } #define SetSZPF16(x) {m_ZF = ((UINT16)(x)==0); m_SF = ((x)&0x8000) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; } #define SetSZPF32(x) {m_ZF = ((UINT32)(x)==0); m_SF = ((x)&0x80000000) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; } #define MMX(n) (*((MMX_REG *)(&m_x87_reg[(n)].low))) #define XMM(n) m_sse_reg[(n)] /***********************************************************************************/ struct MODRM_TABLE { struct { int b; int w; int d; } reg; struct { int b; int w; int d; } rm; }; extern MODRM_TABLE i386_MODRM_table[256]; #define REG8(x) (m_reg.b[x]) #define REG16(x) (m_reg.w[x]) #define REG32(x) (m_reg.d[x]) #define LOAD_REG8(x) (REG8(i386_MODRM_table[x].reg.b)) #define LOAD_REG16(x) (REG16(i386_MODRM_table[x].reg.w)) #define LOAD_REG32(x) (REG32(i386_MODRM_table[x].reg.d)) #define LOAD_RM8(x) (REG8(i386_MODRM_table[x].rm.b)) #define LOAD_RM16(x) (REG16(i386_MODRM_table[x].rm.w)) #define LOAD_RM32(x) (REG32(i386_MODRM_table[x].rm.d)) #define STORE_REG8(x, value) (REG8(i386_MODRM_table[x].reg.b) = value) #define STORE_REG16(x, value) (REG16(i386_MODRM_table[x].reg.w) = value) #define STORE_REG32(x, value) (REG32(i386_MODRM_table[x].reg.d) = value) #define STORE_RM8(x, value) (REG8(i386_MODRM_table[x].rm.b) = value) #define STORE_RM16(x, value) (REG16(i386_MODRM_table[x].rm.w) = value) #define STORE_RM32(x, value) (REG32(i386_MODRM_table[x].rm.d) = value) #define SWITCH_ENDIAN_32(x) (((((x) << 24) & (0xff << 24)) | (((x) << 8) & (0xff << 16)) | (((x) >> 8) & (0xff << 8)) | (((x) >> 24) & (0xff << 0)))) /***********************************************************************************/ INLINE UINT32 i386_translate(int segment, UINT32 ip, int rwn) { // TODO: segment limit access size, execution permission, handle exception thrown from exception handler if(PROTECTED_MODE && !V8086_MODE && (rwn != -1)) { if(!(m_sreg[segment].valid)) FAULT_THROW((segment==SS)?FAULT_SS:FAULT_GP, 0); if(i386_limit_check(segment, ip)) FAULT_THROW((segment==SS)?FAULT_SS:FAULT_GP, 0); if((rwn == 0) && ((m_sreg[segment].flags & 8) && !(m_sreg[segment].flags & 2))) FAULT_THROW(FAULT_GP, 0); if((rwn == 1) && ((m_sreg[segment].flags & 8) || !(m_sreg[segment].flags & 2))) FAULT_THROW(FAULT_GP, 0); } return m_sreg[segment].base + ip; } #define VTLB_FLAG_DIRTY 0x100 INLINE vtlb_entry get_permissions(UINT32 pte, int wp) { vtlb_entry ret = VTLB_READ_ALLOWED | ((pte & 4) ? VTLB_USER_READ_ALLOWED : 0); if(!wp) ret |= VTLB_WRITE_ALLOWED; if(pte & 2) ret |= VTLB_WRITE_ALLOWED | ((pte & 4) ? VTLB_USER_WRITE_ALLOWED : 0); return ret; } static int i386_translate_address(int intention, offs_t *address, vtlb_entry *entry) { UINT32 a = *address; UINT32 pdbr = m_cr[3] & 0xfffff000; UINT32 directory = (a >> 22) & 0x3ff; UINT32 table = (a >> 12) & 0x3ff; vtlb_entry perm = 0; int ret = FALSE; bool user = (intention & TRANSLATE_USER_MASK) ? true : false; bool write = (intention & TRANSLATE_WRITE) ? true : false; bool debug = (intention & TRANSLATE_DEBUG_MASK) ? true : false; if(!(m_cr[0] & 0x80000000)) { if(entry) *entry = 0x77; return TRUE; } UINT32 page_dir = read_dword(pdbr + directory * 4); if(page_dir & 1) { if ((page_dir & 0x80) && (m_cr[4] & 0x10)) { a = (page_dir & 0xffc00000) | (a & 0x003fffff); if(debug) { *address = a; return TRUE; } perm = get_permissions(page_dir, WP); if(write && (!(perm & VTLB_WRITE_ALLOWED) || (user && !(perm & VTLB_USER_WRITE_ALLOWED)))) ret = FALSE; else if(user && !(perm & VTLB_USER_READ_ALLOWED)) ret = FALSE; else { if(write) perm |= VTLB_FLAG_DIRTY; if(!(page_dir & 0x40) && write) write_dword(pdbr + directory * 4, page_dir | 0x60); else if(!(page_dir & 0x20)) write_dword(pdbr + directory * 4, page_dir | 0x20); ret = TRUE; } } else { UINT32 page_entry = read_dword((page_dir & 0xfffff000) + (table * 4)); if(!(page_entry & 1)) ret = FALSE; else { a = (page_entry & 0xfffff000) | (a & 0xfff); if(debug) { *address = a; return TRUE; } perm = get_permissions(page_entry, WP); if(write && (!(perm & VTLB_WRITE_ALLOWED) || (user && !(perm & VTLB_USER_WRITE_ALLOWED)))) ret = FALSE; else if(user && !(perm & VTLB_USER_READ_ALLOWED)) ret = FALSE; else { if(write) perm |= VTLB_FLAG_DIRTY; if(!(page_dir & 0x20)) write_dword(pdbr + directory * 4, page_dir | 0x20); if(!(page_entry & 0x40) && write) write_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x60); else if(!(page_entry & 0x20)) write_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x20); ret = TRUE; } } } } else ret = FALSE; if(entry) *entry = perm; if(ret) *address = a; return ret; } //#define TEST_TLB INLINE int translate_address(int pl, int type, UINT32 *address, UINT32 *error) { if(!(m_cr[0] & 0x80000000)) // Some (very few) old OS's won't work with this return TRUE; const vtlb_entry *table = vtlb_table(m_vtlb); UINT32 index = *address >> 12; vtlb_entry entry = table[index]; if(type == TRANSLATE_FETCH) type = TRANSLATE_READ; if(pl == 3) type |= TRANSLATE_USER_MASK; #ifdef TEST_TLB UINT32 test_addr = *address; #endif if(!(entry & VTLB_FLAG_VALID) || ((type & TRANSLATE_WRITE) && !(entry & VTLB_FLAG_DIRTY))) { if(!i386_translate_address(type, address, &entry)) { *error = ((type & TRANSLATE_WRITE) ? 2 : 0) | ((m_CPL == 3) ? 4 : 0); if(entry) *error |= 1; return FALSE; } vtlb_dynload(m_vtlb, index, *address, entry); return TRUE; } if(!(entry & (1 << type))) { *error = ((type & TRANSLATE_WRITE) ? 2 : 0) | ((m_CPL == 3) ? 4 : 0) | 1; return FALSE; } *address = (entry & 0xfffff000) | (*address & 0xfff); #ifdef TEST_TLB int test_ret = i386_translate_address(type | TRANSLATE_DEBUG_MASK, &test_addr, NULL); if(!test_ret || (test_addr != *address)) logerror("TLB-PTE mismatch! %06X %06X %06x\n", *address, test_addr, m_pc); #endif return TRUE; } INLINE void CHANGE_PC(UINT32 pc) { m_pc = i386_translate(CS, pc, -1 ); } INLINE void NEAR_BRANCH(INT32 offs) { /* TODO: limit */ m_eip += offs; m_pc += offs; } INLINE UINT8 FETCH() { UINT8 value; UINT32 address = m_pc, error; if(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error)) PF_THROW(error); value = read_decrypted_byte(address & m_a20_mask); #ifdef DEBUG_MISSING_OPCODE m_opcode_bytes[m_opcode_bytes_length] = value; m_opcode_bytes_length = (m_opcode_bytes_length + 1) & 15; #endif m_eip++; m_pc++; return value; } INLINE UINT16 FETCH16() { UINT16 value; UINT32 address = m_pc, error; if( address & 0x1 ) { /* Unaligned read */ value = (FETCH() << 0); value |= (FETCH() << 8); } else { if(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_decrypted_word(address); m_eip += 2; m_pc += 2; } return value; } INLINE UINT32 FETCH32() { UINT32 value; UINT32 address = m_pc, error; if( m_pc & 0x3 ) { /* Unaligned read */ value = (FETCH() << 0); value |= (FETCH() << 8); value |= (FETCH() << 16); value |= (FETCH() << 24); } else { if(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_decrypted_dword(address); m_eip += 4; m_pc += 4; } return value; } INLINE UINT8 READ8(UINT32 ea) { UINT32 address = ea, error; if(!translate_address(m_CPL,TRANSLATE_READ,&address, &error)) PF_THROW(error); address &= m_a20_mask; return read_byte(address); } INLINE UINT16 READ16(UINT32 ea) { UINT16 value; UINT32 address = ea, error; if( ea & 0x1 ) { /* Unaligned read */ value = (READ8( address+0 ) << 0); value |= (READ8( address+1 ) << 8); } else { if(!translate_address(m_CPL,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_word( address ); } return value; } INLINE UINT32 READ32(UINT32 ea) { UINT32 value; UINT32 address = ea, error; if( ea & 0x3 ) { /* Unaligned read */ value = (READ8( address+0 ) << 0); value |= (READ8( address+1 ) << 8); value |= (READ8( address+2 ) << 16), value |= (READ8( address+3 ) << 24); } else { if(!translate_address(m_CPL,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_dword( address ); } return value; } INLINE UINT64 READ64(UINT32 ea) { UINT64 value; UINT32 address = ea, error; if( ea & 0x7 ) { /* Unaligned read */ value = (((UINT64) READ8( address+0 )) << 0); value |= (((UINT64) READ8( address+1 )) << 8); value |= (((UINT64) READ8( address+2 )) << 16); value |= (((UINT64) READ8( address+3 )) << 24); value |= (((UINT64) READ8( address+4 )) << 32); value |= (((UINT64) READ8( address+5 )) << 40); value |= (((UINT64) READ8( address+6 )) << 48); value |= (((UINT64) READ8( address+7 )) << 56); } else { if(!translate_address(m_CPL,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = (((UINT64) read_dword( address+0 )) << 0); value |= (((UINT64) read_dword( address+4 )) << 32); } return value; } INLINE UINT8 READ8PL0(UINT32 ea) { UINT32 address = ea, error; if(!translate_address(0,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; return read_byte(address); } INLINE UINT16 READ16PL0(UINT32 ea) { UINT16 value; UINT32 address = ea, error; if( ea & 0x1 ) { /* Unaligned read */ value = (READ8PL0( address+0 ) << 0); value |= (READ8PL0( address+1 ) << 8); } else { if(!translate_address(0,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_word( address ); } return value; } INLINE UINT32 READ32PL0(UINT32 ea) { UINT32 value; UINT32 address = ea, error; if( ea & 0x3 ) { /* Unaligned read */ value = (READ8PL0( address+0 ) << 0); value |= (READ8PL0( address+1 ) << 8); value |= (READ8PL0( address+2 ) << 16); value |= (READ8PL0( address+3 ) << 24); } else { if(!translate_address(0,TRANSLATE_READ,&address,&error)) PF_THROW(error); address &= m_a20_mask; value = read_dword( address ); } return value; } INLINE void WRITE_TEST(UINT32 ea) { UINT32 address = ea, error; if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); } INLINE void WRITE8(UINT32 ea, UINT8 value) { UINT32 address = ea, error; if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); address &= m_a20_mask; write_byte(address, value); } INLINE void WRITE16(UINT32 ea, UINT16 value) { UINT32 address = ea, error; if( ea & 0x1 ) { /* Unaligned write */ WRITE8( address+0, value & 0xff ); WRITE8( address+1, (value >> 8) & 0xff ); } else { if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); address &= m_a20_mask; write_word(address, value); } } INLINE void WRITE32(UINT32 ea, UINT32 value) { UINT32 address = ea, error; if( ea & 0x3 ) { /* Unaligned write */ WRITE8( address+0, value & 0xff ); WRITE8( address+1, (value >> 8) & 0xff ); WRITE8( address+2, (value >> 16) & 0xff ); WRITE8( address+3, (value >> 24) & 0xff ); } else { if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); ea &= m_a20_mask; write_dword(address, value); } } INLINE void WRITE64(UINT32 ea, UINT64 value) { UINT32 address = ea, error; if( ea & 0x7 ) { /* Unaligned write */ WRITE8( address+0, value & 0xff ); WRITE8( address+1, (value >> 8) & 0xff ); WRITE8( address+2, (value >> 16) & 0xff ); WRITE8( address+3, (value >> 24) & 0xff ); WRITE8( address+4, (value >> 32) & 0xff ); WRITE8( address+5, (value >> 40) & 0xff ); WRITE8( address+6, (value >> 48) & 0xff ); WRITE8( address+7, (value >> 56) & 0xff ); } else { if(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error)) PF_THROW(error); ea &= m_a20_mask; write_dword(address+0, value & 0xffffffff); write_dword(address+4, (value >> 32) & 0xffffffff); } } /***********************************************************************************/ INLINE UINT8 OR8(UINT8 dst, UINT8 src) { UINT8 res = dst | src; m_CF = m_OF = 0; SetSZPF8(res); return res; } INLINE UINT16 OR16(UINT16 dst, UINT16 src) { UINT16 res = dst | src; m_CF = m_OF = 0; SetSZPF16(res); return res; } INLINE UINT32 OR32(UINT32 dst, UINT32 src) { UINT32 res = dst | src; m_CF = m_OF = 0; SetSZPF32(res); return res; } INLINE UINT8 AND8(UINT8 dst, UINT8 src) { UINT8 res = dst & src; m_CF = m_OF = 0; SetSZPF8(res); return res; } INLINE UINT16 AND16(UINT16 dst, UINT16 src) { UINT16 res = dst & src; m_CF = m_OF = 0; SetSZPF16(res); return res; } INLINE UINT32 AND32(UINT32 dst, UINT32 src) { UINT32 res = dst & src; m_CF = m_OF = 0; SetSZPF32(res); return res; } INLINE UINT8 XOR8(UINT8 dst, UINT8 src) { UINT8 res = dst ^ src; m_CF = m_OF = 0; SetSZPF8(res); return res; } INLINE UINT16 XOR16(UINT16 dst, UINT16 src) { UINT16 res = dst ^ src; m_CF = m_OF = 0; SetSZPF16(res); return res; } INLINE UINT32 XOR32(UINT32 dst, UINT32 src) { UINT32 res = dst ^ src; m_CF = m_OF = 0; SetSZPF32(res); return res; } #define SUB8(dst, src) SBB8(dst, src, 0) INLINE UINT8 SBB8(UINT8 dst, UINT8 src, UINT8 b) { UINT16 res = (UINT16)dst - (UINT16)src - (UINT8)b; SetCF8(res); SetOF_Sub8(res,src,dst); SetAF(res,src,dst); SetSZPF8(res); return (UINT8)res; } #define SUB16(dst, src) SBB16(dst, src, 0) INLINE UINT16 SBB16(UINT16 dst, UINT16 src, UINT16 b) { UINT32 res = (UINT32)dst - (UINT32)src - (UINT32)b; SetCF16(res); SetOF_Sub16(res,src,dst); SetAF(res,src,dst); SetSZPF16(res); return (UINT16)res; } #define SUB32(dst, src) SBB32(dst, src, 0) INLINE UINT32 SBB32(UINT32 dst, UINT32 src, UINT32 b) { UINT64 res = (UINT64)dst - (UINT64)src - (UINT64) b; SetCF32(res); SetOF_Sub32(res,src,dst); SetAF(res,src,dst); SetSZPF32(res); return (UINT32)res; } #define ADD8(dst, src) ADC8(dst, src, 0) INLINE UINT8 ADC8(UINT8 dst, UINT8 src, UINT8 c) { UINT16 res = (UINT16)dst + (UINT16)src + (UINT16)c; SetCF8(res); SetOF_Add8(res,src,dst); SetAF(res,src,dst); SetSZPF8(res); return (UINT8)res; } #define ADD16(dst, src) ADC16(dst, src, 0) INLINE UINT16 ADC16(UINT16 dst, UINT16 src, UINT8 c) { UINT32 res = (UINT32)dst + (UINT32)src + (UINT32)c; SetCF16(res); SetOF_Add16(res,src,dst); SetAF(res,src,dst); SetSZPF16(res); return (UINT16)res; } #define ADD32(dst, src) ADC32(dst, src, 0) INLINE UINT32 ADC32(UINT32 dst, UINT32 src, UINT32 c) { UINT64 res = (UINT64)dst + (UINT64)src + (UINT64) c; SetCF32(res); SetOF_Add32(res,src,dst); SetAF(res,src,dst); SetSZPF32(res); return (UINT32)res; } INLINE UINT8 INC8(UINT8 dst) { UINT16 res = (UINT16)dst + 1; SetOF_Add8(res,1,dst); SetAF(res,1,dst); SetSZPF8(res); return (UINT8)res; } INLINE UINT16 INC16(UINT16 dst) { UINT32 res = (UINT32)dst + 1; SetOF_Add16(res,1,dst); SetAF(res,1,dst); SetSZPF16(res); return (UINT16)res; } INLINE UINT32 INC32(UINT32 dst) { UINT64 res = (UINT64)dst + 1; SetOF_Add32(res,1,dst); SetAF(res,1,dst); SetSZPF32(res); return (UINT32)res; } INLINE UINT8 DEC8(UINT8 dst) { UINT16 res = (UINT16)dst - 1; SetOF_Sub8(res,1,dst); SetAF(res,1,dst); SetSZPF8(res); return (UINT8)res; } INLINE UINT16 DEC16(UINT16 dst) { UINT32 res = (UINT32)dst - 1; SetOF_Sub16(res,1,dst); SetAF(res,1,dst); SetSZPF16(res); return (UINT16)res; } INLINE UINT32 DEC32(UINT32 dst) { UINT64 res = (UINT64)dst - 1; SetOF_Sub32(res,1,dst); SetAF(res,1,dst); SetSZPF32(res); return (UINT32)res; } INLINE void PUSH16(UINT16 value) { UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) - 2; ea = i386_translate(SS, new_esp, 1); WRITE16(ea, value ); REG32(ESP) = new_esp; } else { new_esp = (REG16(SP) - 2) & 0xffff; ea = i386_translate(SS, new_esp, 1); WRITE16(ea, value ); REG16(SP) = new_esp; } } INLINE void PUSH32(UINT32 value) { UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) - 4; ea = i386_translate(SS, new_esp, 1); WRITE32(ea, value ); REG32(ESP) = new_esp; } else { new_esp = (REG16(SP) - 4) & 0xffff; ea = i386_translate(SS, new_esp, 1); WRITE32(ea, value ); REG16(SP) = new_esp; } } INLINE void PUSH8(UINT8 value) { if( m_operand_size ) { PUSH32((INT32)(INT8)value); } else { PUSH16((INT16)(INT8)value); } } INLINE UINT8 POP8() { UINT8 value; UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) + 1; ea = i386_translate(SS, new_esp - 1, 0); value = READ8(ea ); REG32(ESP) = new_esp; } else { new_esp = REG16(SP) + 1; ea = i386_translate(SS, (new_esp - 1) & 0xffff, 0); value = READ8(ea ); REG16(SP) = new_esp; } return value; } INLINE UINT16 POP16() { UINT16 value; UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) + 2; ea = i386_translate(SS, new_esp - 2, 0); value = READ16(ea ); REG32(ESP) = new_esp; } else { new_esp = REG16(SP) + 2; ea = i386_translate(SS, (new_esp - 2) & 0xffff, 0); value = READ16(ea ); REG16(SP) = new_esp; } return value; } INLINE UINT32 POP32() { UINT32 value; UINT32 ea, new_esp; if( STACK_32BIT ) { new_esp = REG32(ESP) + 4; ea = i386_translate(SS, new_esp - 4, 0); value = READ32(ea ); REG32(ESP) = new_esp; } else { new_esp = REG16(SP) + 4; ea = i386_translate(SS, (new_esp - 4) & 0xffff, 0); value = READ32(ea ); REG16(SP) = new_esp; } return value; } INLINE void BUMP_SI(int adjustment) { if ( m_address_size ) REG32(ESI) += ((m_DF) ? -adjustment : +adjustment); else REG16(SI) += ((m_DF) ? -adjustment : +adjustment); } INLINE void BUMP_DI(int adjustment) { if ( m_address_size ) REG32(EDI) += ((m_DF) ? -adjustment : +adjustment); else REG16(DI) += ((m_DF) ? -adjustment : +adjustment); } /*********************************************************************************** I/O ACCESS ***********************************************************************************/ INLINE void check_ioperm(offs_t port, UINT8 mask) { UINT8 IOPL, map; UINT16 IOPB; UINT32 address; if(!PROTECTED_MODE) return; IOPL = m_IOP1 | (m_IOP2 << 1); if(!V8086_MODE && (m_CPL <= IOPL)) return; if((m_task.limit < 0x67) || ((m_task.flags & 0xd) != 9)) FAULT_THROW(FAULT_GP,0); address = m_task.base; IOPB = READ16PL0(address+0x66); if((IOPB+(port/8)) > m_task.limit) FAULT_THROW(FAULT_GP,0); map = READ8PL0(address+IOPB+(port/8)); map >>= (port%8); if(map & mask) FAULT_THROW(FAULT_GP,0); } INLINE UINT8 READPORT8(offs_t port) { check_ioperm(port, 1); return read_io_byte(port); } INLINE void WRITEPORT8(offs_t port, UINT8 value) { check_ioperm(port, 1); write_io_byte(port, value); } INLINE UINT16 READPORT16(offs_t port) { if (port & 1) { UINT16 value = READPORT8(port); value |= (READPORT8(port + 1) << 8); return value; } else { check_ioperm(port, 3); return read_io_word(port); } } INLINE void WRITEPORT16(offs_t port, UINT16 value) { if (port & 1) { WRITEPORT8(port, value & 0xff); WRITEPORT8(port + 1, (value >> 8) & 0xff); } else { check_ioperm(port, 3); write_io_word(port, value); } } INLINE UINT32 READPORT32(offs_t port) { if (port & 3) { UINT32 value = READPORT8(port); value |= (READPORT8(port + 1) << 8); value |= (READPORT8(port + 2) << 16); value |= (READPORT8(port + 3) << 24); return value; } else { check_ioperm(port, 0xf); return read_io_dword(port); } } INLINE void WRITEPORT32(offs_t port, UINT32 value) { if (port & 3) { WRITEPORT8(port, value & 0xff); WRITEPORT8(port + 1, (value >> 8) & 0xff); WRITEPORT8(port + 2, (value >> 16) & 0xff); WRITEPORT8(port + 3, (value >> 24) & 0xff); } else { check_ioperm(port, 0xf); write_io_dword(port, value); } } /*********************************************************************************** MSR ACCESS ***********************************************************************************/ // Pentium MSR handling UINT64 pentium_msr_read(UINT32 offset,UINT8 *valid_msr) { switch(offset) { // Machine Check Exception (TODO) case 0x00: *valid_msr = 1; popmessage("RDMSR: Reading P5_MC_ADDR"); return 0; case 0x01: *valid_msr = 1; popmessage("RDMSR: Reading P5_MC_TYPE"); return 0; // Time Stamp Counter case 0x10: *valid_msr = 1; popmessage("RDMSR: Reading TSC"); return m_tsc; // Event Counters (TODO) case 0x11: // CESR *valid_msr = 1; popmessage("RDMSR: Reading CESR"); return 0; case 0x12: // CTR0 *valid_msr = 1; return m_perfctr[0]; case 0x13: // CTR1 *valid_msr = 1; return m_perfctr[1]; default: if(!(offset & ~0xf)) // 2-f are test registers { *valid_msr = 1; logerror("RDMSR: Reading test MSR %x", offset); return 0; } logerror("RDMSR: invalid P5 MSR read %08x at %08x\n",offset,m_pc-2); *valid_msr = 0; return 0; } return -1; } void pentium_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr) { switch(offset) { // Machine Check Exception (TODO) case 0x00: popmessage("WRMSR: Writing P5_MC_ADDR"); *valid_msr = 1; break; case 0x01: popmessage("WRMSR: Writing P5_MC_TYPE"); *valid_msr = 1; break; // Time Stamp Counter case 0x10: m_tsc = data; popmessage("WRMSR: Writing to TSC"); *valid_msr = 1; break; // Event Counters (TODO) case 0x11: // CESR popmessage("WRMSR: Writing to CESR"); *valid_msr = 1; break; case 0x12: // CTR0 m_perfctr[0] = data; *valid_msr = 1; break; case 0x13: // CTR1 m_perfctr[1] = data; *valid_msr = 1; break; default: if(!(offset & ~0xf)) // 2-f are test registers { *valid_msr = 1; logerror("WRMSR: Writing test MSR %x", offset); break; } logerror("WRMSR: invalid MSR write %08x (%08x%08x) at %08x\n",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2); *valid_msr = 0; break; } } // P6 (Pentium Pro, Pentium II, Pentium III) MSR handling UINT64 p6_msr_read(UINT32 offset,UINT8 *valid_msr) { switch(offset) { // Machine Check Exception (TODO) case 0x00: *valid_msr = 1; popmessage("RDMSR: Reading P5_MC_ADDR"); return 0; case 0x01: *valid_msr = 1; popmessage("RDMSR: Reading P5_MC_TYPE"); return 0; // Time Stamp Counter case 0x10: *valid_msr = 1; popmessage("RDMSR: Reading TSC"); return m_tsc; // Performance Counters (TODO) case 0xc1: // PerfCtr0 *valid_msr = 1; return m_perfctr[0]; case 0xc2: // PerfCtr1 *valid_msr = 1; return m_perfctr[1]; default: logerror("RDMSR: unimplemented register called %08x at %08x\n",offset,m_pc-2); *valid_msr = 1; return 0; } return -1; } void p6_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr) { switch(offset) { // Time Stamp Counter case 0x10: m_tsc = data; popmessage("WRMSR: Writing to TSC"); *valid_msr = 1; break; // Performance Counters (TODO) case 0xc1: // PerfCtr0 m_perfctr[0] = data; *valid_msr = 1; break; case 0xc2: // PerfCtr1 m_perfctr[1] = data; *valid_msr = 1; break; default: logerror("WRMSR: unimplemented register called %08x (%08x%08x) at %08x\n",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2); *valid_msr = 1; break; } } // PIV (Pentium 4+) UINT64 piv_msr_read(UINT32 offset,UINT8 *valid_msr) { switch(offset) { default: logerror("RDMSR: unimplemented register called %08x at %08x\n",offset,m_pc-2); *valid_msr = 1; return 0; } return -1; } void piv_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr) { switch(offset) { default: logerror("WRMSR: unimplemented register called %08x (%08x%08x) at %08x\n",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2); *valid_msr = 1; break; } } INLINE UINT64 MSR_READ(UINT32 offset,UINT8 *valid_msr) { UINT64 res; UINT8 cpu_type = (m_cpu_version >> 8) & 0x0f; *valid_msr = 0; switch(cpu_type) { case 5: // Pentium res = pentium_msr_read(offset,valid_msr); break; case 6: // Pentium Pro, Pentium II, Pentium III res = p6_msr_read(offset,valid_msr); break; case 15: // Pentium 4+ res = piv_msr_read(offset,valid_msr); break; default: res = 0; break; } return res; } INLINE void MSR_WRITE(UINT32 offset, UINT64 data, UINT8 *valid_msr) { *valid_msr = 0; UINT8 cpu_type = (m_cpu_version >> 8) & 0x0f; switch(cpu_type) { case 5: // Pentium pentium_msr_write(offset,data,valid_msr); break; case 6: // Pentium Pro, Pentium II, Pentium III p6_msr_write(offset,data,valid_msr); break; case 15: // Pentium 4+ piv_msr_write(offset,data,valid_msr); break; } } #endif /* __I386_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i386.old/i486ops.c ================================================ // Intel 486+ specific opcodes static void I486OP(cpuid)() // Opcode 0x0F A2 { if (m_cpuid_id0 == 0) { // this 486 doesn't support the CPUID instruction logerror("CPUID not supported at %08x!\n", m_eip); i386_trap(6, 0, 0); } else { switch (REG32(EAX)) { case 0: { REG32(EAX) = m_cpuid_max_input_value_eax; REG32(EBX) = m_cpuid_id0; REG32(ECX) = m_cpuid_id2; REG32(EDX) = m_cpuid_id1; CYCLES(CYCLES_CPUID); break; } case 1: { REG32(EAX) = m_cpu_version; REG32(EDX) = m_feature_flags; CYCLES(CYCLES_CPUID_EAX1); break; } } } } static void I486OP(invd)() // Opcode 0x0f 08 { // Nothing to do ? CYCLES(CYCLES_INVD); } static void I486OP(wbinvd)() // Opcode 0x0f 09 { // Nothing to do ? } static void I486OP(cmpxchg_rm8_r8)() // Opcode 0x0f b0 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); UINT8 src = LOAD_REG8(modrm); if( REG8(AL) == dst ) { STORE_RM8(modrm, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_REG_T); } else { REG8(AL) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_REG_F); } } else { // TODO: Check write if needed UINT32 ea = GetEA(modrm,0); UINT8 dst = READ8(ea); UINT8 src = LOAD_REG8(modrm); if( REG8(AL) == dst ) { WRITE8(ea, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_MEM_T); } else { REG8(AL) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_MEM_F); } } } static void I486OP(cmpxchg_rm16_r16)() // Opcode 0x0f b1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 src = LOAD_REG16(modrm); if( REG16(AX) == dst ) { STORE_RM16(modrm, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_REG_T); } else { REG16(AX) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_REG_F); } } else { UINT32 ea = GetEA(modrm,0); UINT16 dst = READ16(ea); UINT16 src = LOAD_REG16(modrm); if( REG16(AX) == dst ) { WRITE16(ea, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_MEM_T); } else { REG16(AX) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_MEM_F); } } } static void I486OP(cmpxchg_rm32_r32)() // Opcode 0x0f b1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 src = LOAD_REG32(modrm); if( REG32(EAX) == dst ) { STORE_RM32(modrm, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_REG_T); } else { REG32(EAX) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_REG_F); } } else { UINT32 ea = GetEA(modrm,0); UINT32 dst = READ32(ea); UINT32 src = LOAD_REG32(modrm); if( REG32(EAX) == dst ) { WRITE32(ea, src); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_MEM_T); } else { REG32(EAX) = dst; m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_MEM_F); } } } static void I486OP(xadd_rm8_r8)() // Opcode 0x0f c0 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 dst = LOAD_RM8(modrm); UINT8 src = LOAD_REG8(modrm); STORE_REG8(modrm, dst); STORE_RM8(modrm, dst + src); CYCLES(CYCLES_XADD_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT8 dst = READ8(ea); UINT8 src = LOAD_REG8(modrm); WRITE8(ea, dst + src); STORE_REG8(modrm, dst); CYCLES(CYCLES_XADD_REG_MEM); } } static void I486OP(xadd_rm16_r16)() // Opcode 0x0f c1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 dst = LOAD_RM16(modrm); UINT16 src = LOAD_REG16(modrm); STORE_REG16(modrm, dst); STORE_RM16(modrm, dst + src); CYCLES(CYCLES_XADD_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT16 dst = READ16(ea); UINT16 src = LOAD_REG16(modrm); WRITE16(ea, dst + src); STORE_REG16(modrm, dst); CYCLES(CYCLES_XADD_REG_MEM); } } static void I486OP(xadd_rm32_r32)() // Opcode 0x0f c1 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 dst = LOAD_RM32(modrm); UINT32 src = LOAD_REG32(modrm); STORE_REG32(modrm, dst); STORE_RM32(modrm, dst + src); CYCLES(CYCLES_XADD_REG_REG); } else { UINT32 ea = GetEA(modrm,1); UINT32 dst = READ32(ea); UINT32 src = LOAD_REG32(modrm); WRITE32(ea, dst + src); STORE_REG32(modrm, dst); CYCLES(CYCLES_XADD_REG_MEM); } } static void I486OP(group0F01_16)() // Opcode 0x0f 01 { UINT8 modrm = FETCH(); UINT16 address; UINT32 ea; switch( (modrm >> 3) & 0x7 ) { case 0: /* SGDT */ { if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate( CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_gdtr.limit); WRITE32(ea + 2, m_gdtr.base & 0xffffff); CYCLES(CYCLES_SGDT); break; } case 1: /* SIDT */ { if (modrm >= 0xc0) { address = LOAD_RM16(modrm); ea = i386_translate( CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_idtr.limit); WRITE32(ea + 2, m_idtr.base & 0xffffff); CYCLES(CYCLES_SIDT); break; } case 2: /* LGDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate( CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_gdtr.limit = READ16(ea); m_gdtr.base = READ32(ea + 2) & 0xffffff; CYCLES(CYCLES_LGDT); break; } case 3: /* LIDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM16(modrm); ea = i386_translate( CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_idtr.limit = READ16(ea); m_idtr.base = READ32(ea + 2) & 0xffffff; CYCLES(CYCLES_LIDT); break; } case 4: /* SMSW */ { if( modrm >= 0xc0 ) { STORE_RM16(modrm, m_cr[0]); CYCLES(CYCLES_SMSW_REG); } else { ea = GetEA(modrm,1); WRITE16(ea, m_cr[0]); CYCLES(CYCLES_SMSW_MEM); } break; } case 6: /* LMSW */ { UINT16 b; if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { b = LOAD_RM16(modrm); CYCLES(CYCLES_LMSW_REG); } else { ea = GetEA(modrm,0); CYCLES(CYCLES_LMSW_MEM); b = READ16(ea); } if(PROTECTED_MODE) b |= 0x0001; // cannot return to real mode using this instruction. m_cr[0] &= ~0x0000000f; m_cr[0] |= b & 0x0000000f; break; } case 7: /* INVLPG */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if(modrm >= 0xc0) { logerror("i486: invlpg with modrm %02X\n", modrm); FAULT(FAULT_UD,0) } ea = GetEA(modrm,-1); CYCLES(25); // TODO: add to cycles.h vtlb_flush_address(m_vtlb, ea); break; } default: report_invalid_modrm("group0F01_16", modrm); break; } } static void I486OP(group0F01_32)() // Opcode 0x0f 01 { UINT8 modrm = FETCH(); UINT32 address, ea; switch( (modrm >> 3) & 0x7 ) { case 0: /* SGDT */ { if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate( CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_gdtr.limit); WRITE32(ea + 2, m_gdtr.base); CYCLES(CYCLES_SGDT); break; } case 1: /* SIDT */ { if (modrm >= 0xc0) { address = LOAD_RM32(modrm); ea = i386_translate( CS, address, 1 ); } else { ea = GetEA(modrm,1); } WRITE16(ea, m_idtr.limit); WRITE32(ea + 2, m_idtr.base); CYCLES(CYCLES_SIDT); break; } case 2: /* LGDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate( CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_gdtr.limit = READ16(ea); m_gdtr.base = READ32(ea + 2); CYCLES(CYCLES_LGDT); break; } case 3: /* LIDT */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if( modrm >= 0xc0 ) { address = LOAD_RM32(modrm); ea = i386_translate( CS, address, 0 ); } else { ea = GetEA(modrm,0); } m_idtr.limit = READ16(ea); m_idtr.base = READ32(ea + 2); CYCLES(CYCLES_LIDT); break; } case 4: /* SMSW */ { if( modrm >= 0xc0 ) { STORE_RM32(modrm, m_cr[0] & 0xffff); CYCLES(CYCLES_SMSW_REG); } else { /* always 16-bit memory operand */ ea = GetEA(modrm,1); WRITE16(ea, m_cr[0]); CYCLES(CYCLES_SMSW_MEM); } break; } case 6: /* LMSW */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) UINT16 b; if( modrm >= 0xc0 ) { b = LOAD_RM16(modrm); CYCLES(CYCLES_LMSW_REG); } else { ea = GetEA(modrm,0); CYCLES(CYCLES_LMSW_MEM); b = READ16(ea); } if(PROTECTED_MODE) b |= 0x0001; // cannot return to real mode using this instruction. m_cr[0] &= ~0x0000000f; m_cr[0] |= b & 0x0000000f; break; } case 7: /* INVLPG */ { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP,0) if(modrm >= 0xc0) { logerror("i486: invlpg with modrm %02X\n", modrm); FAULT(FAULT_UD,0) } ea = GetEA(modrm,-1); CYCLES(25); // TODO: add to cycles.h vtlb_flush_address(m_vtlb, ea); break; } default: report_invalid_modrm("group0F01_32", modrm); break; } } static void I486OP(bswap_eax)() // Opcode 0x0f 38 { REG32(EAX) = SWITCH_ENDIAN_32(REG32(EAX)); CYCLES(1); // TODO } static void I486OP(bswap_ecx)() // Opcode 0x0f 39 { REG32(ECX) = SWITCH_ENDIAN_32(REG32(ECX)); CYCLES(1); // TODO } static void I486OP(bswap_edx)() // Opcode 0x0f 3A { REG32(EDX) = SWITCH_ENDIAN_32(REG32(EDX)); CYCLES(1); // TODO } static void I486OP(bswap_ebx)() // Opcode 0x0f 3B { REG32(EBX) = SWITCH_ENDIAN_32(REG32(EBX)); CYCLES(1); // TODO } static void I486OP(bswap_esp)() // Opcode 0x0f 3C { REG32(ESP) = SWITCH_ENDIAN_32(REG32(ESP)); CYCLES(1); // TODO } static void I486OP(bswap_ebp)() // Opcode 0x0f 3D { REG32(EBP) = SWITCH_ENDIAN_32(REG32(EBP)); CYCLES(1); // TODO } static void I486OP(bswap_esi)() // Opcode 0x0f 3E { REG32(ESI) = SWITCH_ENDIAN_32(REG32(ESI)); CYCLES(1); // TODO } static void I486OP(bswap_edi)() // Opcode 0x0f 3F { REG32(EDI) = SWITCH_ENDIAN_32(REG32(EDI)); CYCLES(1); // TODO } static void I486OP(mov_cr_r32)() // Opcode 0x0f 22 { if(PROTECTED_MODE && m_CPL) FAULT(FAULT_GP, 0); UINT8 modrm = FETCH(); UINT8 cr = (modrm >> 3) & 0x7; UINT32 oldcr = m_cr[cr]; UINT32 data = LOAD_RM32(modrm); switch(cr) { case 0: CYCLES(CYCLES_MOV_REG_CR0); if((oldcr ^ m_cr[cr]) & 0x80010000) vtlb_flush_dynamic(m_vtlb); break; case 2: CYCLES(CYCLES_MOV_REG_CR2); break; case 3: CYCLES(CYCLES_MOV_REG_CR3); vtlb_flush_dynamic(m_vtlb); break; case 4: CYCLES(1); break; // TODO default: logerror("i386: mov_cr_r32 CR%d!\n", cr); return; } m_cr[cr] = data; } ================================================ FILE: vm86/mame/emu/cpu/i386.old/pentops.c ================================================ // Pentium+ specific opcodes extern flag float32_is_nan( float32 a ); // since its not defined in softfloat.h INLINE void MMXPROLOG() { //m_x87_sw &= ~(X87_SW_TOP_MASK << X87_SW_TOP_SHIFT); // top = 0 m_x87_tw = 0; // tag word = 0 } INLINE void READMMX(UINT32 ea,MMX_REG &r) { r.q=READ64(ea); } INLINE void WRITEMMX(UINT32 ea,MMX_REG &r) { WRITE64(ea, r.q); } INLINE void READXMM(UINT32 ea,XMM_REG &r) { r.q[0]=READ64(ea); r.q[1]=READ64(ea+8); } INLINE void WRITEXMM(UINT32 ea,XMM_REG &r) { WRITE64(ea, r.q[0]); WRITE64(ea+8, r.q[1]); } INLINE void READXMM_LO64(UINT32 ea,XMM_REG &r) { r.q[0]=READ64(ea); } INLINE void WRITEXMM_LO64(UINT32 ea,XMM_REG &r) { WRITE64(ea, r.q[0]); } INLINE void READXMM_HI64(UINT32 ea,XMM_REG &r) { r.q[1]=READ64(ea); } INLINE void WRITEXMM_HI64(UINT32 ea,XMM_REG &r) { WRITE64(ea, r.q[1]); } static void PENTIUMOP(rdmsr)() // Opcode 0x0f 32 { UINT64 data; UINT8 valid_msr = 0; data = MSR_READ(REG32(ECX),&valid_msr); REG32(EDX) = data >> 32; REG32(EAX) = data & 0xffffffff; if(m_CPL != 0 || valid_msr == 0) // if current privilege level isn't 0 or the register isn't recognized ... FAULT(FAULT_GP,0) // ... throw a general exception fault CYCLES(CYCLES_RDMSR); } static void PENTIUMOP(wrmsr)() // Opcode 0x0f 30 { UINT64 data; UINT8 valid_msr = 0; data = (UINT64)REG32(EAX); data |= (UINT64)(REG32(EDX)) << 32; MSR_WRITE(REG32(ECX),data,&valid_msr); if(m_CPL != 0 || valid_msr == 0) // if current privilege level isn't 0 or the register isn't recognized FAULT(FAULT_GP,0) // ... throw a general exception fault CYCLES(1); // TODO: correct cycle count (~30-45) } static void PENTIUMOP(rdtsc)() // Opcode 0x0f 31 { UINT64 ts = m_tsc + (m_base_cycles - m_cycles); REG32(EAX) = (UINT32)(ts); REG32(EDX) = (UINT32)(ts >> 32); CYCLES(CYCLES_RDTSC); } static void PENTIUMOP(ud2)() // Opcode 0x0f 0b { i386_trap(6, 0, 0); } static void PENTIUMOP(rsm)() { UINT32 smram_state = m_smbase + 0xfe00; if(!m_smm) { logerror("i386: Invalid RSM outside SMM at %08X\n", m_pc - 1); i386_trap(6, 0, 0); return; } // load state, no sanity checks anywhere m_smbase = READ32(smram_state+SMRAM_SMBASE); m_cr[4] = READ32(smram_state+SMRAM_IP5_CR4); m_sreg[ES].limit = READ32(smram_state+SMRAM_IP5_ESLIM); m_sreg[ES].base = READ32(smram_state+SMRAM_IP5_ESBASE); m_sreg[ES].flags = READ32(smram_state+SMRAM_IP5_ESACC); m_sreg[CS].limit = READ32(smram_state+SMRAM_IP5_CSLIM); m_sreg[CS].base = READ32(smram_state+SMRAM_IP5_CSBASE); m_sreg[CS].flags = READ32(smram_state+SMRAM_IP5_CSACC); m_sreg[SS].limit = READ32(smram_state+SMRAM_IP5_SSLIM); m_sreg[SS].base = READ32(smram_state+SMRAM_IP5_SSBASE); m_sreg[SS].flags = READ32(smram_state+SMRAM_IP5_SSACC); m_sreg[DS].limit = READ32(smram_state+SMRAM_IP5_DSLIM); m_sreg[DS].base = READ32(smram_state+SMRAM_IP5_DSBASE); m_sreg[DS].flags = READ32(smram_state+SMRAM_IP5_DSACC); m_sreg[FS].limit = READ32(smram_state+SMRAM_IP5_FSLIM); m_sreg[FS].base = READ32(smram_state+SMRAM_IP5_FSBASE); m_sreg[FS].flags = READ32(smram_state+SMRAM_IP5_FSACC); m_sreg[GS].limit = READ32(smram_state+SMRAM_IP5_GSLIM); m_sreg[GS].base = READ32(smram_state+SMRAM_IP5_GSBASE); m_sreg[GS].flags = READ32(smram_state+SMRAM_IP5_GSACC); m_ldtr.flags = READ32(smram_state+SMRAM_IP5_LDTACC); m_ldtr.limit = READ32(smram_state+SMRAM_IP5_LDTLIM); m_ldtr.base = READ32(smram_state+SMRAM_IP5_LDTBASE); m_gdtr.limit = READ32(smram_state+SMRAM_IP5_GDTLIM); m_gdtr.base = READ32(smram_state+SMRAM_IP5_GDTBASE); m_idtr.limit = READ32(smram_state+SMRAM_IP5_IDTLIM); m_idtr.base = READ32(smram_state+SMRAM_IP5_IDTBASE); m_task.limit = READ32(smram_state+SMRAM_IP5_TRLIM); m_task.base = READ32(smram_state+SMRAM_IP5_TRBASE); m_task.flags = READ32(smram_state+SMRAM_IP5_TRACC); m_sreg[ES].selector = READ32(smram_state+SMRAM_ES); m_sreg[CS].selector = READ32(smram_state+SMRAM_CS); m_sreg[SS].selector = READ32(smram_state+SMRAM_SS); m_sreg[DS].selector = READ32(smram_state+SMRAM_DS); m_sreg[FS].selector = READ32(smram_state+SMRAM_FS); m_sreg[GS].selector = READ32(smram_state+SMRAM_GS); m_ldtr.segment = READ32(smram_state+SMRAM_LDTR); m_task.segment = READ32(smram_state+SMRAM_TR); m_dr[7] = READ32(smram_state+SMRAM_DR7); m_dr[6] = READ32(smram_state+SMRAM_DR6); REG32(EAX) = READ32(smram_state+SMRAM_EAX); REG32(ECX) = READ32(smram_state+SMRAM_ECX); REG32(EDX) = READ32(smram_state+SMRAM_EDX); REG32(EBX) = READ32(smram_state+SMRAM_EBX); REG32(ESP) = READ32(smram_state+SMRAM_ESP); REG32(EBP) = READ32(smram_state+SMRAM_EBP); REG32(ESI) = READ32(smram_state+SMRAM_ESI); REG32(EDI) = READ32(smram_state+SMRAM_EDI); m_eip = READ32(smram_state+SMRAM_EIP); m_eflags = READ32(smram_state+SMRAM_EAX); m_cr[3] = READ32(smram_state+SMRAM_CR3); m_cr[0] = READ32(smram_state+SMRAM_CR0); m_CPL = (m_sreg[SS].flags >> 13) & 3; // cpl == dpl of ss for(int i = 0; i < GS; i++) { if(PROTECTED_MODE && !V8086_MODE) { m_sreg[i].valid = m_sreg[i].selector ? true : false; m_sreg[i].d = (m_sreg[i].flags & 0x4000) ? 1 : 0; } else m_sreg[i].valid = true; } // if(!m_smiact.isnull()) // m_smiact(false); m_smm = false; CHANGE_PC(m_eip); m_nmi_masked = false; if(m_smi_latched) { pentium_smi(); return; } if(m_nmi_latched) { m_nmi_latched = false; i386_trap(2, 1, 0); } } static void PENTIUMOP(prefetch_m8)() // Opcode 0x0f 18 { UINT8 modrm = FETCH(); UINT32 ea = GetEA(modrm,0); CYCLES(1+(ea & 1)); // TODO: correct cycle count } static void PENTIUMOP(cmovo_r16_rm16)() // Opcode 0x0f 40 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_OF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_OF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovo_r32_rm32)() // Opcode 0x0f 40 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_OF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_OF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovno_r16_rm16)() // Opcode 0x0f 41 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_OF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_OF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovno_r32_rm32)() // Opcode 0x0f 41 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_OF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_OF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovb_r16_rm16)() // Opcode 0x0f 42 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_CF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_CF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovb_r32_rm32)() // Opcode 0x0f 42 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_CF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_CF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovae_r16_rm16)() // Opcode 0x0f 43 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_CF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_CF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovae_r32_rm32)() // Opcode 0x0f 43 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_CF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_CF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmove_r16_rm16)() // Opcode 0x0f 44 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_ZF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_ZF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmove_r32_rm32)() // Opcode 0x0f 44 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_ZF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_ZF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovne_r16_rm16)() // Opcode 0x0f 45 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_ZF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_ZF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovne_r32_rm32)() // Opcode 0x0f 45 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_ZF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_ZF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovbe_r16_rm16)() // Opcode 0x0f 46 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_CF == 1) || (m_ZF == 1)) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_CF == 1) || (m_ZF == 1)) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovbe_r32_rm32)() // Opcode 0x0f 46 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_CF == 1) || (m_ZF == 1)) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_CF == 1) || (m_ZF == 1)) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmova_r16_rm16)() // Opcode 0x0f 47 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_CF == 0) && (m_ZF == 0)) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_CF == 0) && (m_ZF == 0)) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmova_r32_rm32)() // Opcode 0x0f 47 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_CF == 0) && (m_ZF == 0)) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_CF == 0) && (m_ZF == 0)) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovs_r16_rm16)() // Opcode 0x0f 48 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovs_r32_rm32)() // Opcode 0x0f 48 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovns_r16_rm16)() // Opcode 0x0f 49 { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovns_r32_rm32)() // Opcode 0x0f 49 { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovp_r16_rm16)() // Opcode 0x0f 4a { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_PF == 1) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_PF == 1) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovp_r32_rm32)() // Opcode 0x0f 4a { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_PF == 1) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_PF == 1) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovnp_r16_rm16)() // Opcode 0x0f 4b { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_PF == 0) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_PF == 0) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovnp_r32_rm32)() // Opcode 0x0f 4b { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_PF == 0) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_PF == 0) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovl_r16_rm16)() // Opcode 0x0f 4c { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF != m_OF) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF != m_OF) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovl_r32_rm32)() // Opcode 0x0f 4c { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF != m_OF) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF != m_OF) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovge_r16_rm16)() // Opcode 0x0f 4d { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == m_OF) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == m_OF) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovge_r32_rm32)() // Opcode 0x0f 4d { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_SF == m_OF) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if (m_SF == m_OF) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovle_r16_rm16)() // Opcode 0x0f 4e { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_ZF == 1) || (m_SF != m_OF)) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_ZF == 1) || (m_SF != m_OF)) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovle_r32_rm32)() // Opcode 0x0f 4e { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_ZF == 1) || (m_SF != m_OF)) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_ZF == 1) || (m_SF != m_OF)) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovg_r16_rm16)() // Opcode 0x0f 4f { UINT16 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_ZF == 0) && (m_SF == m_OF)) { src = LOAD_RM16(modrm); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_ZF == 0) && (m_SF == m_OF)) { src = READ16(ea); STORE_REG16(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(cmovg_r32_rm32)() // Opcode 0x0f 4f { UINT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if ((m_ZF == 0) && (m_SF == m_OF)) { src = LOAD_RM32(modrm); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm,0); if ((m_ZF == 0) && (m_SF == m_OF)) { src = READ32(ea); STORE_REG32(modrm, src); } CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(movnti_m16_r16)() // Opcode 0f c3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITE16(ea,LOAD_RM16(modrm)); CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(movnti_m32_r32)() // Opcode 0f c3 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITE32(ea,LOAD_RM32(modrm)); CYCLES(1); // TODO: correct cycle count } } static void I386OP(cyrix_unknown)() // Opcode 0x0f 74 { logerror("Unemulated 0x0f 0x74 opcode called\n"); CYCLES(1); } static void PENTIUMOP(cmpxchg8b_m64)() // Opcode 0x0f c7 { UINT8 modm = FETCH(); if( modm >= 0xc0 ) { report_invalid_modrm("cmpxchg8b_m64", modm); } else { UINT32 ea = GetEA(modm, 0); UINT64 value = READ64(ea); UINT64 edx_eax = (((UINT64) REG32(EDX)) << 32) | REG32(EAX); UINT64 ecx_ebx = (((UINT64) REG32(ECX)) << 32) | REG32(EBX); if( value == edx_eax ) { WRITE64(ea, ecx_ebx); m_ZF = 1; CYCLES(CYCLES_CMPXCHG_REG_MEM_T); } else { REG32(EDX) = (UINT32) (value >> 32); REG32(EAX) = (UINT32) (value >> 0); m_ZF = 0; CYCLES(CYCLES_CMPXCHG_REG_MEM_F); } } } static void PENTIUMOP(movntq_m64_r64)() // Opcode 0f e7 { //MMXPROLOG(); // TODO: check if needed UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { CYCLES(1); // unsupported } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITEMMX(ea, MMX((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void PENTIUMOP(maskmovq_r64_r64)() // Opcode 0f f7 { int s,m,n; UINT8 modm = FETCH(); UINT32 ea = GetEA(7, 0); // ds:di/edi/rdi register MMXPROLOG(); s=(modm >> 3) & 7; m=modm & 7; for (n=0;n <= 7;n++) if (MMX(m).b[n] & 127) WRITE8(ea+n, MMX(s).b[n]); } static void PENTIUMOP(popcnt_r16_rm16)() // Opcode f3 0f b8 { UINT16 src; UINT8 modrm = FETCH(); int n,count; if( modrm >= 0xc0 ) { src = LOAD_RM16(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ16(ea); } count=0; for (n=0;n < 16;n++) { count=count+(src & 1); src=src >> 1; } STORE_REG16(modrm, count); CYCLES(1); // TODO: correct cycle count } static void PENTIUMOP(popcnt_r32_rm32)() // Opcode f3 0f b8 { UINT32 src; UINT8 modrm = FETCH(); int n,count; if( modrm >= 0xc0 ) { src = LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm,0); src = READ32(ea); } count=0; for (n=0;n < 32;n++) { count=count+(src & 1); src=src >> 1; } STORE_REG32(modrm, count); CYCLES(1); // TODO: correct cycle count } static void PENTIUMOP(tzcnt_r16_rm16)() { // for CPUs that don't support TZCNT, fall back to BSF i386_bsf_r16_rm16(); // TODO: actually implement TZCNT } static void PENTIUMOP(tzcnt_r32_rm32)() { // for CPUs that don't support TZCNT, fall back to BSF i386_bsf_r32_rm32(); // TODO: actually implement TZCNT } INLINE INT8 SaturatedSignedWordToSignedByte(INT16 word) { if (word > 127) return 127; if (word < -128) return -128; return (INT8)word; } INLINE UINT8 SaturatedSignedWordToUnsignedByte(INT16 word) { if (word > 255) return 255; if (word < 0) return 0; return (UINT8)word; } INLINE INT16 SaturatedSignedDwordToSignedWord(INT32 dword) { if (dword > 32767) return 32767; if (dword < -32768) return -32768; return (INT16)dword; } static void MMXOP(group_0f71)() // Opcode 0f 71 { UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); MMXPROLOG(); if( modm >= 0xc0 ) { switch ( (modm & 0x38) >> 3 ) { case 2: // psrlw MMX(modm & 7).w[0]=MMX(modm & 7).w[0] >> imm8; MMX(modm & 7).w[1]=MMX(modm & 7).w[1] >> imm8; MMX(modm & 7).w[2]=MMX(modm & 7).w[2] >> imm8; MMX(modm & 7).w[3]=MMX(modm & 7).w[3] >> imm8; break; case 4: // psraw MMX(modm & 7).s[0]=MMX(modm & 7).s[0] >> imm8; MMX(modm & 7).s[1]=MMX(modm & 7).s[1] >> imm8; MMX(modm & 7).s[2]=MMX(modm & 7).s[2] >> imm8; MMX(modm & 7).s[3]=MMX(modm & 7).s[3] >> imm8; break; case 6: // psllw MMX(modm & 7).w[0]=MMX(modm & 7).w[0] << imm8; MMX(modm & 7).w[1]=MMX(modm & 7).w[1] << imm8; MMX(modm & 7).w[2]=MMX(modm & 7).w[2] << imm8; MMX(modm & 7).w[3]=MMX(modm & 7).w[3] << imm8; break; default: report_invalid_modrm("mmx_group0f71", modm); } } } static void MMXOP(group_0f72)() // Opcode 0f 72 { UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); MMXPROLOG(); if( modm >= 0xc0 ) { switch ( (modm & 0x38) >> 3 ) { case 2: // psrld MMX(modm & 7).d[0]=MMX(modm & 7).d[0] >> imm8; MMX(modm & 7).d[1]=MMX(modm & 7).d[1] >> imm8; break; case 4: // psrad MMX(modm & 7).i[0]=MMX(modm & 7).i[0] >> imm8; MMX(modm & 7).i[1]=MMX(modm & 7).i[1] >> imm8; break; case 6: // pslld MMX(modm & 7).d[0]=MMX(modm & 7).d[0] << imm8; MMX(modm & 7).d[1]=MMX(modm & 7).d[1] << imm8; break; default: report_invalid_modrm("mmx_group0f72", modm); } } } static void MMXOP(group_0f73)() // Opcode 0f 73 { UINT8 modm = FETCH(); UINT8 imm8 = FETCH(); MMXPROLOG(); if( modm >= 0xc0 ) { switch ( (modm & 0x38) >> 3 ) { case 2: // psrlq if (m_xmm_operand_size) { XMM(modm & 7).q[0] = imm8 > 63 ? 0 : XMM(modm & 7).q[0] >> imm8; XMM(modm & 7).q[1] = imm8 > 63 ? 0 : XMM(modm & 7).q[1] >> imm8; } else MMX(modm & 7).q = imm8 > 63 ? 0 : MMX(modm & 7).q >> imm8; break; case 3: // psrldq if (imm8 >= 16) { XMM(modm & 7).q[0] = 0; XMM(modm & 7).q[1] = 0; } else if(imm8 >= 8) { imm8 = (imm8 & 7) << 3; XMM(modm & 7).q[0] = XMM(modm & 7).q[1] >> imm8; XMM(modm & 7).q[1] = 0; } else if(imm8) { imm8 = imm8 << 3; XMM(modm & 7).q[0] = (XMM(modm & 7).q[1] << (64 - imm8)) | (XMM(modm & 7).q[0] >> imm8); XMM(modm & 7).q[1] = XMM(modm & 7).q[0] >> imm8; } break; case 6: // psllq if (m_xmm_operand_size) { XMM(modm & 7).q[0] = imm8 > 63 ? 0 : XMM(modm & 7).q[0] << imm8; XMM(modm & 7).q[1] = imm8 > 63 ? 0 : XMM(modm & 7).q[1] << imm8; } else MMX(modm & 7).q = imm8 > 63 ? 0 : MMX(modm & 7).q << imm8; break; case 7: // pslldq if (imm8 >= 16) { XMM(modm & 7).q[0] = 0; XMM(modm & 7).q[1] = 0; } else if(imm8 >= 8) { imm8 = (imm8 & 7) << 3; XMM(modm & 7).q[1] = XMM(modm & 7).q[0] << imm8; XMM(modm & 7).q[0] = 0; } else if(imm8) { imm8 = imm8 << 3; XMM(modm & 7).q[1] = (XMM(modm & 7).q[0] >> (64 - imm8)) | (XMM(modm & 7).q[1] << imm8); XMM(modm & 7).q[0] = XMM(modm & 7).q[0] << imm8; } break; default: report_invalid_modrm("mmx_group0f73", modm); } } } static void MMXOP(psrlw_r64_rm64)() // Opcode 0f d1 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] >> count; MMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] >> count; MMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] >> count; MMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] >> count; MMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] >> count; MMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] >> count; MMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psrld_r64_rm64)() // Opcode 0f d2 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] >> count; MMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] >> count; MMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psrlq_r64_rm64)() // Opcode 0f d3 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddq_r64_rm64)() // Opcode 0f d4 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q+MMX(modrm & 7).q; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q+src.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pmullw_r64_rm64)() // Opcode 0f d5 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]) & 0xffff; MMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]) & 0xffff; MMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]) & 0xffff; MMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]) & 0xffff; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)src.s[0]) & 0xffff; MMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)src.s[1]) & 0xffff; MMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)src.s[2]) & 0xffff; MMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)src.s[3]) & 0xffff; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubusb_r64_rm64)() // Opcode 0f d8 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((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]; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] < src.b[n] ? 0 : MMX((modrm >> 3) & 0x7).b[n]-src.b[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubusw_r64_rm64)() // Opcode 0f d9 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((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]; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] < src.w[n] ? 0 : MMX((modrm >> 3) & 0x7).w[n]-src.w[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pand_r64_rm64)() // Opcode 0f db { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q & MMX(modrm & 7).q; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q & src.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddusb_r64_rm64)() // Opcode 0f dc { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((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]; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); for (n=0;n < 8;n++) MMX((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]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddusw_r64_rm64)() // Opcode 0f dd { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((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]; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); for (n=0;n < 4;n++) MMX((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]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pandn_r64_rm64)() // Opcode 0f df { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=(~MMX((modrm >> 3) & 0x7).q) & MMX(modrm & 7).q; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).q=(~MMX((modrm >> 3) & 0x7).q) & src.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psraw_r64_rm64)() // Opcode 0f e1 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).s[0]=MMX((modrm >> 3) & 0x7).s[0] >> count; MMX((modrm >> 3) & 0x7).s[1]=MMX((modrm >> 3) & 0x7).s[1] >> count; MMX((modrm >> 3) & 0x7).s[2]=MMX((modrm >> 3) & 0x7).s[2] >> count; MMX((modrm >> 3) & 0x7).s[3]=MMX((modrm >> 3) & 0x7).s[3] >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).s[0]=MMX((modrm >> 3) & 0x7).s[0] >> count; MMX((modrm >> 3) & 0x7).s[1]=MMX((modrm >> 3) & 0x7).s[1] >> count; MMX((modrm >> 3) & 0x7).s[2]=MMX((modrm >> 3) & 0x7).s[2] >> count; MMX((modrm >> 3) & 0x7).s[3]=MMX((modrm >> 3) & 0x7).s[3] >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psrad_r64_rm64)() // Opcode 0f e2 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).i[0]=MMX((modrm >> 3) & 0x7).i[0] >> count; MMX((modrm >> 3) & 0x7).i[1]=MMX((modrm >> 3) & 0x7).i[1] >> count; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); int count=(int)src.q; MMX((modrm >> 3) & 0x7).i[0]=MMX((modrm >> 3) & 0x7).i[0] >> count; MMX((modrm >> 3) & 0x7).i[1]=MMX((modrm >> 3) & 0x7).i[1] >> count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pmulhw_r64_rm64)() // Opcode 0f e5 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]) >> 16; MMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]) >> 16; MMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]) >> 16; MMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]) >> 16; } else { MMX_REG src; UINT32 ea = GetEA(modrm, 0); READMMX(ea, src); MMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)src.s[0]) >> 16; MMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)src.s[1]) >> 16; MMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)src.s[2]) >> 16; MMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)src.s[3]) >> 16; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubsb_r64_rm64)() // Opcode 0f e8 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] - (INT16)MMX(modrm & 7).c[n]); } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] - (INT16)s.c[n]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubsw_r64_rm64)() // Opcode 0f e9 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] - (INT32)MMX(modrm & 7).s[n]); } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] - (INT32)s.s[n]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(por_r64_rm64)() // Opcode 0f eb { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q | MMX(modrm & 7).q; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q | s.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddsb_r64_rm64)() // Opcode 0f ec { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] + (INT16)MMX(modrm & 7).c[n]); } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] + (INT16)s.c[n]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddsw_r64_rm64)() // Opcode 0f ed { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] + (INT32)MMX(modrm & 7).s[n]); } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] + (INT32)s.s[n]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pxor_r64_rm64)() // Opcode 0f ef { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q ^ MMX(modrm & 7).q; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q ^ s.q; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psllw_r64_rm64)() // Opcode 0f f1 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] << count; MMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] << count; MMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] << count; MMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] << count; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); int count=(int)s.q; MMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] << count; MMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] << count; MMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] << count; MMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] << count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pslld_r64_rm64)() // Opcode 0f f2 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] << count; MMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] << count; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); int count=(int)s.q; MMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] << count; MMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] << count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psllq_r64_rm64)() // Opcode 0f f3 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int count=(int)MMX(modrm & 7).q; MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q << count; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); int count=(int)s.q; MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q << count; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pmaddwd_r64_rm64)() // Opcode 0f f5 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]+ (INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]; MMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]+ (INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)s.s[0]+ (INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)s.s[1]; MMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)s.s[2]+ (INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)s.s[3]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubb_r64_rm64)() // Opcode 0f f8 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] - MMX(modrm & 7).b[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] - s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubw_r64_rm64)() // Opcode 0f f9 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] - MMX(modrm & 7).w[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] - s.w[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(psubd_r64_rm64)() // Opcode 0f fa { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 2;n++) MMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] - MMX(modrm & 7).d[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 2;n++) MMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] - s.d[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddb_r64_rm64)() // Opcode 0f fc { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] + MMX(modrm & 7).b[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] + s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddw_r64_rm64)() // Opcode 0f fd { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] + MMX(modrm & 7).w[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] + s.w[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(paddd_r64_rm64)() // Opcode 0f fe { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 2;n++) MMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] + MMX(modrm & 7).d[n]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 2;n++) MMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] + s.d[n]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(emms)() // Opcode 0f 77 { m_x87_tw = 0xffff; // tag word = 0xffff // TODO CYCLES(1); // TODO: correct cycle count } static void MMXOP(movd_r64_rm32)() // Opcode 0f 6e { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).d[0]=LOAD_RM32(modrm); else MMX((modrm >> 3) & 0x7).d[0]=LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm, 0); if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).d[0]=READ32(ea); else MMX((modrm >> 3) & 0x7).d[0]=READ32(ea); } MMX((modrm >> 3) & 0x7).d[1]=0; CYCLES(1); // TODO: correct cycle count } static void MMXOP(movq_r64_rm64)() // Opcode 0f 6f { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).l[0]=XMM(modrm & 0x7).l[0]; else MMX((modrm >> 3) & 0x7).l=MMX(modrm & 0x7).l; } else { UINT32 ea = GetEA(modrm, 0); if (m_xmm_operand_size) READXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); else READMMX(ea, MMX((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(movd_rm32_r64)() // Opcode 0f 7e { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_xmm_operand_size) STORE_RM32(modrm, XMM((modrm >> 3) & 0x7).d[0]); else STORE_RM32(modrm, MMX((modrm >> 3) & 0x7).d[0]); } else { UINT32 ea = GetEA(modrm, 0); if (m_xmm_operand_size) WRITE32(ea, XMM((modrm >> 3) & 0x7).d[0]); else WRITE32(ea, MMX((modrm >> 3) & 0x7).d[0]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(movq_rm64_r64)() // Opcode 0f 7f { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { if (m_xmm_operand_size) XMM(modrm & 0x7).l[0]=XMM((modrm >> 3) & 0x7).l[0]; else MMX(modrm & 0x7)=MMX((modrm >> 3) & 0x7); } else { UINT32 ea = GetEA(modrm, 0); WRITEMMX(ea, MMX((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpeqb_r64_rm64)() // Opcode 0f 74 { int c; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (c=0;c <= 7;c++) MMX(d).b[c]=(MMX(d).b[c] == MMX(s).b[c]) ? 0xff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (c=0;c <= 7;c++) MMX(d).b[c]=(MMX(d).b[c] == s.b[c]) ? 0xff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpeqw_r64_rm64)() // Opcode 0f 75 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).w[0]=(MMX(d).w[0] == MMX(s).w[0]) ? 0xffff : 0; MMX(d).w[1]=(MMX(d).w[1] == MMX(s).w[1]) ? 0xffff : 0; MMX(d).w[2]=(MMX(d).w[2] == MMX(s).w[2]) ? 0xffff : 0; MMX(d).w[3]=(MMX(d).w[3] == MMX(s).w[3]) ? 0xffff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).w[0]=(MMX(d).w[0] == s.w[0]) ? 0xffff : 0; MMX(d).w[1]=(MMX(d).w[1] == s.w[1]) ? 0xffff : 0; MMX(d).w[2]=(MMX(d).w[2] == s.w[2]) ? 0xffff : 0; MMX(d).w[3]=(MMX(d).w[3] == s.w[3]) ? 0xffff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpeqd_r64_rm64)() // Opcode 0f 76 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).d[0]=(MMX(d).d[0] == MMX(s).d[0]) ? 0xffffffff : 0; MMX(d).d[1]=(MMX(d).d[1] == MMX(s).d[1]) ? 0xffffffff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).d[0]=(MMX(d).d[0] == s.d[0]) ? 0xffffffff : 0; MMX(d).d[1]=(MMX(d).d[1] == s.d[1]) ? 0xffffffff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pshufw_r64_rm64_i8)() // Opcode 0f 70 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX_REG t; int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q=MMX(s).q; MMX(d).w[0]=t.w[imm8 & 3]; MMX(d).w[1]=t.w[(imm8 >> 2) & 3]; MMX(d).w[2]=t.w[(imm8 >> 4) & 3]; MMX(d).w[3]=t.w[(imm8 >> 6) & 3]; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READMMX(ea, s); MMX(d).w[0]=s.w[imm8 & 3]; MMX(d).w[1]=s.w[(imm8 >> 2) & 3]; MMX(d).w[2]=s.w[(imm8 >> 4) & 3]; MMX(d).w[3]=s.w[(imm8 >> 6) & 3]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpcklbw_r64_r64m32)() // Opcode 0f 60 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT32 t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t=MMX(d).d[0]; MMX(d).b[0]=t & 0xff; MMX(d).b[1]=MMX(s).b[0]; MMX(d).b[2]=(t >> 8) & 0xff; MMX(d).b[3]=MMX(s).b[1]; MMX(d).b[4]=(t >> 16) & 0xff; MMX(d).b[5]=MMX(s).b[2]; MMX(d).b[6]=(t >> 24) & 0xff; MMX(d).b[7]=MMX(s).b[3]; } else { UINT32 s,t; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); s = READ32(ea); t=MMX(d).d[0]; MMX(d).b[0]=t & 0xff; MMX(d).b[1]=s & 0xff; MMX(d).b[2]=(t >> 8) & 0xff; MMX(d).b[3]=(s >> 8) & 0xff; MMX(d).b[4]=(t >> 16) & 0xff; MMX(d).b[5]=(s >> 16) & 0xff; MMX(d).b[6]=(t >> 24) & 0xff; MMX(d).b[7]=(s >> 24) & 0xff; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpcklwd_r64_r64m32)() // Opcode 0f 61 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT16 t; int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; t=MMX(d).w[1]; MMX(d).w[0]=MMX(d).w[0]; MMX(d).w[1]=MMX(s).w[0]; MMX(d).w[2]=t; MMX(d).w[3]=MMX(s).w[1]; } else { UINT32 s; UINT16 t; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); s = READ32(ea); t=MMX(d).w[1]; MMX(d).w[0]=MMX(d).w[0]; MMX(d).w[1]=s & 0xffff; MMX(d).w[2]=t; MMX(d).w[3]=(s >> 16) & 0xffff; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpckldq_r64_r64m32)() // Opcode 0f 62 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).d[0]=MMX(d).d[0]; MMX(d).d[1]=MMX(s).d[0]; } else { UINT32 s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); s = READ32(ea); MMX(d).d[0]=MMX(d).d[0]; MMX(d).d[1]=s; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(packsswb_r64_rm64)() // Opcode 0f 63 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).c[0]=SaturatedSignedWordToSignedByte(MMX(d).s[0]); MMX(d).c[1]=SaturatedSignedWordToSignedByte(MMX(d).s[1]); MMX(d).c[2]=SaturatedSignedWordToSignedByte(MMX(d).s[2]); MMX(d).c[3]=SaturatedSignedWordToSignedByte(MMX(d).s[3]); MMX(d).c[4]=SaturatedSignedWordToSignedByte(MMX(s).s[0]); MMX(d).c[5]=SaturatedSignedWordToSignedByte(MMX(s).s[1]); MMX(d).c[6]=SaturatedSignedWordToSignedByte(MMX(s).s[2]); MMX(d).c[7]=SaturatedSignedWordToSignedByte(MMX(s).s[3]); } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).c[0]=SaturatedSignedWordToSignedByte(MMX(d).s[0]); MMX(d).c[1]=SaturatedSignedWordToSignedByte(MMX(d).s[1]); MMX(d).c[2]=SaturatedSignedWordToSignedByte(MMX(d).s[2]); MMX(d).c[3]=SaturatedSignedWordToSignedByte(MMX(d).s[3]); MMX(d).c[4]=SaturatedSignedWordToSignedByte(s.s[0]); MMX(d).c[5]=SaturatedSignedWordToSignedByte(s.s[1]); MMX(d).c[6]=SaturatedSignedWordToSignedByte(s.s[2]); MMX(d).c[7]=SaturatedSignedWordToSignedByte(s.s[3]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpgtb_r64_rm64)() // Opcode 0f 64 { int c; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (c=0;c <= 7;c++) MMX(d).b[c]=(MMX(d).c[c] > MMX(s).c[c]) ? 0xff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (c=0;c <= 7;c++) MMX(d).b[c]=(MMX(d).c[c] > s.c[c]) ? 0xff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpgtw_r64_rm64)() // Opcode 0f 65 { int c; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (c=0;c <= 3;c++) MMX(d).w[c]=(MMX(d).s[c] > MMX(s).s[c]) ? 0xffff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (c=0;c <= 3;c++) MMX(d).w[c]=(MMX(d).s[c] > s.s[c]) ? 0xffff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(pcmpgtd_r64_rm64)() // Opcode 0f 66 { int c; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; for (c=0;c <= 1;c++) MMX(d).d[c]=(MMX(d).i[c] > MMX(s).i[c]) ? 0xffffffff : 0; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (c=0;c <= 1;c++) MMX(d).d[c]=(MMX(d).i[c] > s.i[c]) ? 0xffffffff : 0; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(packuswb_r64_rm64)() // Opcode 0f 67 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).b[0]=SaturatedSignedWordToUnsignedByte(MMX(d).s[0]); MMX(d).b[1]=SaturatedSignedWordToUnsignedByte(MMX(d).s[1]); MMX(d).b[2]=SaturatedSignedWordToUnsignedByte(MMX(d).s[2]); MMX(d).b[3]=SaturatedSignedWordToUnsignedByte(MMX(d).s[3]); MMX(d).b[4]=SaturatedSignedWordToUnsignedByte(MMX(s).s[0]); MMX(d).b[5]=SaturatedSignedWordToUnsignedByte(MMX(s).s[1]); MMX(d).b[6]=SaturatedSignedWordToUnsignedByte(MMX(s).s[2]); MMX(d).b[7]=SaturatedSignedWordToUnsignedByte(MMX(s).s[3]); } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).b[0]=SaturatedSignedWordToUnsignedByte(MMX(d).s[0]); MMX(d).b[1]=SaturatedSignedWordToUnsignedByte(MMX(d).s[1]); MMX(d).b[2]=SaturatedSignedWordToUnsignedByte(MMX(d).s[2]); MMX(d).b[3]=SaturatedSignedWordToUnsignedByte(MMX(d).s[3]); MMX(d).b[4]=SaturatedSignedWordToUnsignedByte(s.s[0]); MMX(d).b[5]=SaturatedSignedWordToUnsignedByte(s.s[1]); MMX(d).b[6]=SaturatedSignedWordToUnsignedByte(s.s[2]); MMX(d).b[7]=SaturatedSignedWordToUnsignedByte(s.s[3]); } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpckhbw_r64_rm64)() // Opcode 0f 68 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).b[0]=MMX(d).b[4]; MMX(d).b[1]=MMX(s).b[4]; MMX(d).b[2]=MMX(d).b[5]; MMX(d).b[3]=MMX(s).b[5]; MMX(d).b[4]=MMX(d).b[6]; MMX(d).b[5]=MMX(s).b[6]; MMX(d).b[6]=MMX(d).b[7]; MMX(d).b[7]=MMX(s).b[7]; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).b[0]=MMX(d).b[4]; MMX(d).b[1]=s.b[4]; MMX(d).b[2]=MMX(d).b[5]; MMX(d).b[3]=s.b[5]; MMX(d).b[4]=MMX(d).b[6]; MMX(d).b[5]=s.b[6]; MMX(d).b[6]=MMX(d).b[7]; MMX(d).b[7]=s.b[7]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpckhwd_r64_rm64)() // Opcode 0f 69 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).w[0]=MMX(d).w[2]; MMX(d).w[1]=MMX(s).w[2]; MMX(d).w[2]=MMX(d).w[3]; MMX(d).w[3]=MMX(s).w[3]; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).w[0]=MMX(d).w[2]; MMX(d).w[1]=s.w[2]; MMX(d).w[2]=MMX(d).w[3]; MMX(d).w[3]=s.w[3]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(punpckhdq_r64_rm64)() // Opcode 0f 6a { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).d[0]=MMX(d).d[1]; MMX(d).d[1]=MMX(s).d[1]; } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).d[0]=MMX(d).d[1]; MMX(d).d[1]=s.d[1]; } CYCLES(1); // TODO: correct cycle count } static void MMXOP(packssdw_r64_rm64)() // Opcode 0f 6b { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; MMX(d).s[0]=SaturatedSignedDwordToSignedWord(MMX(d).i[0]); MMX(d).s[1]=SaturatedSignedDwordToSignedWord(MMX(d).i[1]); MMX(d).s[2]=SaturatedSignedDwordToSignedWord(MMX(s).i[0]); MMX(d).s[3]=SaturatedSignedDwordToSignedWord(MMX(s).i[1]); } else { MMX_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX(d).s[0]=SaturatedSignedDwordToSignedWord(MMX(d).i[0]); MMX(d).s[1]=SaturatedSignedDwordToSignedWord(MMX(d).i[1]); MMX(d).s[2]=SaturatedSignedDwordToSignedWord(s.i[0]); MMX(d).s[3]=SaturatedSignedDwordToSignedWord(s.i[1]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(sse_group0fae)() // Opcode 0f ae { UINT8 modm = FETCH(); if( modm == 0xf8 ) { logerror("Unemulated SFENCE opcode called\n"); CYCLES(1); // sfence instruction } else if( modm == 0xf0 ) { CYCLES(1); // mfence instruction } else if( modm == 0xe8 ) { CYCLES(1); // lfence instruction } else if( modm < 0xc0 ) { UINT32 ea; switch ( (modm & 0x38) >> 3 ) { case 2: // ldmxcsr m32 ea = GetEA(modm, 0); m_mxcsr = READ32(ea); break; case 3: // stmxcsr m32 ea = GetEA(modm, 0); WRITE32(ea, m_mxcsr); break; case 7: // clflush m8 GetNonTranslatedEA(modm, NULL); break; default: report_invalid_modrm("sse_group0fae", modm); } } else { report_invalid_modrm("sse_group0fae", modm); } } static void SSEOP(cvttps2dq_r128_rm128)() // Opcode f3 0f 5b { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).i[0]=(INT32)XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).i[1]=(INT32)XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).i[2]=(INT32)XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).i[3]=(INT32)XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).i[0]=(INT32)src.f[0]; XMM((modrm >> 3) & 0x7).i[1]=(INT32)src.f[1]; XMM((modrm >> 3) & 0x7).i[2]=(INT32)src.f[2]; XMM((modrm >> 3) & 0x7).i[3]=(INT32)src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtss2sd_r128_r128m32)() // Opcode f3 0f 5a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = XMM(modrm & 0x7).f[0]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0] = READ32(ea); XMM((modrm >> 3) & 0x7).f64[0] = s.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvttss2si_r32_r128m32)() // Opcode f3 0f 2c { INT32 src; UINT8 modrm = FETCH(); // get mordm byte if( modrm >= 0xc0 ) { // if bits 7-6 are 11 the source is a xmm register (low doubleword) src = (INT32)XMM(modrm & 0x7).f[0^NATIVE_ENDIAN_VALUE_LE_BE(0,1)]; } else { // otherwise is a memory address XMM_REG t; UINT32 ea = GetEA(modrm, 0); t.d[0] = READ32(ea); src = (INT32)t.f[0]; } STORE_REG32(modrm, (UINT32)src); CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtss2si_r32_r128m32)() // Opcode f3 0f 2d { INT32 src; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { src = (INT32)XMM(modrm & 0x7).f[0]; } else { XMM_REG t; UINT32 ea = GetEA(modrm, 0); t.d[0] = READ32(ea); src = (INT32)t.f[0]; } STORE_REG32(modrm, (UINT32)src); CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtsi2ss_r128_rm32)() // Opcode f3 0f 2a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = (INT32)LOAD_RM32(modrm); } else { UINT32 ea = GetEA(modrm, 0); XMM((modrm >> 3) & 0x7).f[0] = (INT32)READ32(ea); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtpi2ps_r128_rm64)() // Opcode 0f 2a { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = MMX(modrm & 0x7).i[0]; XMM((modrm >> 3) & 0x7).f[1] = MMX(modrm & 0x7).i[1]; } else { MMX_REG r; UINT32 ea = GetEA(modrm, 0); READMMX(ea, r); XMM((modrm >> 3) & 0x7).f[0] = r.i[0]; XMM((modrm >> 3) & 0x7).f[1] = r.i[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvttps2pi_r64_r128m64)() // Opcode 0f 2c { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0]; MMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); XMM((modrm >> 3) & 0x7).i[0] = r.f[0]; XMM((modrm >> 3) & 0x7).i[1] = r.f[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtps2pi_r64_r128m64)() // Opcode 0f 2d { UINT8 modrm = FETCH(); MMXPROLOG(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0]; MMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); XMM((modrm >> 3) & 0x7).i[0] = r.f[0]; XMM((modrm >> 3) & 0x7).i[1] = r.f[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtps2pd_r128_r128m64)() // Opcode 0f 5a { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = (double)XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)XMM(modrm & 0x7).f[1]; } else { MMX_REG r; UINT32 ea = GetEA(modrm, 0); READMMX(ea, r); XMM((modrm >> 3) & 0x7).f64[0] = (double)r.f[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)r.f[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtdq2ps_r128_rm128)() // Opcode 0f 5b { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = (float)XMM(modrm & 0x7).i[0]; XMM((modrm >> 3) & 0x7).f[1] = (float)XMM(modrm & 0x7).i[1]; XMM((modrm >> 3) & 0x7).f[2] = (float)XMM(modrm & 0x7).i[2]; XMM((modrm >> 3) & 0x7).f[3] = (float)XMM(modrm & 0x7).i[3]; } else { XMM_REG r; UINT32 ea = GetEA(modrm, 0); READXMM(ea, r); XMM((modrm >> 3) & 0x7).f[0] = (float)r.i[0]; XMM((modrm >> 3) & 0x7).f[1] = (float)r.i[1]; XMM((modrm >> 3) & 0x7).f[2] = (float)r.i[2]; XMM((modrm >> 3) & 0x7).f[3] = (float)r.i[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cvtdq2pd_r128_r128m64)() // Opcode f3 0f e6 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f64[0] = (double)XMM(modrm & 0x7).i[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)XMM(modrm & 0x7).i[1]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); XMM((modrm >> 3) & 0x7).f64[0] = (double)s.i[0]; XMM((modrm >> 3) & 0x7).f64[1] = (double)s.i[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movss_r128_rm128)() // Opcode f3 0f 10 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[0]; } else { UINT32 ea = GetEA(modrm, 0); XMM((modrm >> 3) & 0x7).d[0] = READ32(ea); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movss_rm128_r128)() // Opcode f3 0f 11 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0]; } else { UINT32 ea = GetEA(modrm, 0); WRITE32(ea, XMM((modrm >> 3) & 0x7).d[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movsldup_r128_rm128)() // Opcode f3 0f 12 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[0]; XMM((modrm >> 3) & 0x7).d[1] = XMM(modrm & 0x7).d[0]; XMM((modrm >> 3) & 0x7).d[2] = XMM(modrm & 0x7).d[2]; XMM((modrm >> 3) & 0x7).d[3] = XMM(modrm & 0x7).d[2]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).d[0] = src.d[0]; XMM((modrm >> 3) & 0x7).d[1] = src.d[0]; XMM((modrm >> 3) & 0x7).d[2] = src.d[2]; XMM((modrm >> 3) & 0x7).d[3] = src.d[2]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movshdup_r128_rm128)() // Opcode f3 0f 16 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[1]; XMM((modrm >> 3) & 0x7).d[1] = XMM(modrm & 0x7).d[1]; XMM((modrm >> 3) & 0x7).d[2] = XMM(modrm & 0x7).d[3]; XMM((modrm >> 3) & 0x7).d[3] = XMM(modrm & 0x7).d[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).d[0] = src.d[1]; XMM((modrm >> 3) & 0x7).d[1] = src.d[1]; XMM((modrm >> 3) & 0x7).d[2] = src.d[3]; XMM((modrm >> 3) & 0x7).d[3] = src.d[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movaps_r128_rm128)() // Opcode 0f 28 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7); } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movaps_rm128_r128)() // Opcode 0f 29 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7); } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movups_r128_rm128)() // Opcode 0f 10 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7); } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movups_rm128_r128)() // Opcode 0f 11 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7); } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movlps_r128_m64)() // Opcode 0f 12 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); READXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movlps_m64_r128)() // Opcode 0f 13 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM_LO64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movhps_r128_m64)() // Opcode 0f 16 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); READXMM_HI64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movhps_m64_r128)() // Opcode 0f 17 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM_HI64(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movntps_m128_r128)() // Opcode 0f 2b { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { // unsupported by cpu CYCLES(1); // TODO: correct cycle count } else { // since cache is not implemented UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); CYCLES(1); // TODO: correct cycle count } } static void SSEOP(movmskps_r16_r128)() // Opcode 0f 50 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(XMM(modrm & 0x7).d[0] >> 31) & 1; b=b | ((XMM(modrm & 0x7).d[1] >> 30) & 2); b=b | ((XMM(modrm & 0x7).d[2] >> 29) & 4); b=b | ((XMM(modrm & 0x7).d[3] >> 28) & 8); STORE_REG16(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movmskps_r32_r128)() // Opcode 0f 50 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(XMM(modrm & 0x7).d[0] >> 31) & 1; b=b | ((XMM(modrm & 0x7).d[1] >> 30) & 2); b=b | ((XMM(modrm & 0x7).d[2] >> 29) & 4); b=b | ((XMM(modrm & 0x7).d[3] >> 28) & 8); STORE_REG32(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movq2dq_r128_r64)() // Opcode f3 0f d6 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = MMX(modrm & 7).q; XMM((modrm >> 3) & 0x7).q[1] = 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movdqu_r128_rm128)() // Opcode f3 0f 6f { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM(modrm & 0x7).q[1]; } else { UINT32 ea = GetEA(modrm, 0); READXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movdqu_rm128_r128)() // Opcode f3 0f 7f { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM(modrm & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0]; XMM(modrm & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1]; } else { UINT32 ea = GetEA(modrm, 0); WRITEXMM(ea, XMM((modrm >> 3) & 0x7)); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(movq_r128_r128m64)() // Opcode f3 0f 7e { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = 0; } else { UINT32 ea = GetEA(modrm, 0); XMM((modrm >> 3) & 0x7).q[0] = READ64(ea); XMM((modrm >> 3) & 0x7).q[1] = 0; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmovmskb_r16_r64)() // Opcode 0f d7 { //MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(MMX(modrm & 0x7).b[0] >> 7) & 1; b=b | ((MMX(modrm & 0x7).b[1] >> 6) & 2); b=b | ((MMX(modrm & 0x7).b[2] >> 5) & 4); b=b | ((MMX(modrm & 0x7).b[3] >> 4) & 8); b=b | ((MMX(modrm & 0x7).b[4] >> 3) & 16); b=b | ((MMX(modrm & 0x7).b[5] >> 2) & 32); b=b | ((MMX(modrm & 0x7).b[6] >> 1) & 64); b=b | ((MMX(modrm & 0x7).b[7] >> 0) & 128); STORE_REG16(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmovmskb_r32_r64)() // Opcode 0f d7 { //MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int b; b=(MMX(modrm & 0x7).b[0] >> 7) & 1; b=b | ((MMX(modrm & 0x7).b[1] >> 6) & 2); b=b | ((MMX(modrm & 0x7).b[2] >> 5) & 4); b=b | ((MMX(modrm & 0x7).b[3] >> 4) & 8); b=b | ((MMX(modrm & 0x7).b[4] >> 3) & 16); b=b | ((MMX(modrm & 0x7).b[5] >> 2) & 32); b=b | ((MMX(modrm & 0x7).b[6] >> 1) & 64); b=b | ((MMX(modrm & 0x7).b[7] >> 0) & 128); STORE_REG32(modrm, b); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(xorps)() // Opcode 0f 57 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0] ^ XMM(modrm & 0x7).d[0]; XMM((modrm >> 3) & 0x7).d[1] = XMM((modrm >> 3) & 0x7).d[1] ^ XMM(modrm & 0x7).d[1]; XMM((modrm >> 3) & 0x7).d[2] = XMM((modrm >> 3) & 0x7).d[2] ^ XMM(modrm & 0x7).d[2]; XMM((modrm >> 3) & 0x7).d[3] = XMM((modrm >> 3) & 0x7).d[3] ^ XMM(modrm & 0x7).d[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0] ^ src.d[0]; XMM((modrm >> 3) & 0x7).d[1] = XMM((modrm >> 3) & 0x7).d[1] ^ src.d[1]; XMM((modrm >> 3) & 0x7).d[2] = XMM((modrm >> 3) & 0x7).d[2] ^ src.d[2]; XMM((modrm >> 3) & 0x7).d[3] = XMM((modrm >> 3) & 0x7).d[3] ^ src.d[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(addps)() // Opcode 0f 58 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] + XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] + XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] + XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] + src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] + src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] + src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(sqrtps_r128_rm128)() // Opcode 0f 51 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sqrt(XMM(modrm & 0x7).f[0]); XMM((modrm >> 3) & 0x7).f[1] = sqrt(XMM(modrm & 0x7).f[1]); XMM((modrm >> 3) & 0x7).f[2] = sqrt(XMM(modrm & 0x7).f[2]); XMM((modrm >> 3) & 0x7).f[3] = sqrt(XMM(modrm & 0x7).f[3]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = sqrt(src.f[0]); XMM((modrm >> 3) & 0x7).f[1] = sqrt(src.f[1]); XMM((modrm >> 3) & 0x7).f[2] = sqrt(src.f[2]); XMM((modrm >> 3) & 0x7).f[3] = sqrt(src.f[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(rsqrtps_r128_rm128)() // Opcode 0f 52 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(XMM(modrm & 0x7).f[0]); XMM((modrm >> 3) & 0x7).f[1] = 1.0 / sqrt(XMM(modrm & 0x7).f[1]); XMM((modrm >> 3) & 0x7).f[2] = 1.0 / sqrt(XMM(modrm & 0x7).f[2]); XMM((modrm >> 3) & 0x7).f[3] = 1.0 / sqrt(XMM(modrm & 0x7).f[3]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(src.f[0]); XMM((modrm >> 3) & 0x7).f[1] = 1.0 / sqrt(src.f[1]); XMM((modrm >> 3) & 0x7).f[2] = 1.0 / sqrt(src.f[2]); XMM((modrm >> 3) & 0x7).f[3] = 1.0 / sqrt(src.f[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(rcpps_r128_rm128)() // Opcode 0f 53 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = 1.0 / XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = 1.0 / XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = 1.0 / XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = 1.0 / XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = 1.0 / src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = 1.0 / src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = 1.0 / src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = 1.0 / src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(andps_r128_rm128)() // Opcode 0f 54 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(andnps_r128_rm128)() // Opcode 0f 55 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(orps_r128_rm128)() // Opcode 0f 56 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | XMM(modrm & 0x7).q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | XMM(modrm & 0x7).q[1]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | src.q[0]; XMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | src.q[1]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(mulps)() // Opcode 0f 59 ???? { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] * XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] * XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] * XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] * src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] * src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] * src.f[3]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(subps)() // Opcode 0f 5c { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] - XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] - XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] - XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] - src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] - src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] - src.f[3]; } CYCLES(1); // TODO: correct cycle count } INLINE float sse_min_single(float src1, float src2) { /*if ((src1 == 0) && (src2 == 0)) return src2; if (src1 = SNaN) return src2; if (src2 = SNaN) return src2;*/ if (src1 < src2) return src1; return src2; } static void SSEOP(minps)() // Opcode 0f 5d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sse_min_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]); XMM((modrm >> 3) & 0x7).f[1] = sse_min_single(XMM((modrm >> 3) & 0x7).f[1], XMM(modrm & 0x7).f[1]); XMM((modrm >> 3) & 0x7).f[2] = sse_min_single(XMM((modrm >> 3) & 0x7).f[2], XMM(modrm & 0x7).f[2]); XMM((modrm >> 3) & 0x7).f[3] = sse_min_single(XMM((modrm >> 3) & 0x7).f[3], XMM(modrm & 0x7).f[3]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = sse_min_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]); XMM((modrm >> 3) & 0x7).f[1] = sse_min_single(XMM((modrm >> 3) & 0x7).f[1], src.f[1]); XMM((modrm >> 3) & 0x7).f[2] = sse_min_single(XMM((modrm >> 3) & 0x7).f[2], src.f[2]); XMM((modrm >> 3) & 0x7).f[3] = sse_min_single(XMM((modrm >> 3) & 0x7).f[3], src.f[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(divps)() // Opcode 0f 5e { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / XMM(modrm & 0x7).f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] / XMM(modrm & 0x7).f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] / XMM(modrm & 0x7).f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] / XMM(modrm & 0x7).f[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / src.f[0]; XMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] / src.f[1]; XMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] / src.f[2]; XMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] / src.f[3]; } CYCLES(1); // TODO: correct cycle count } INLINE float sse_max_single(float src1, float src2) { /*if ((src1 == 0) && (src2 == 0)) return src2; if (src1 = SNaN) return src2; if (src2 = SNaN) return src2;*/ if (src1 > src2) return src1; return src2; } static void SSEOP(maxps)() // Opcode 0f 5f { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]); XMM((modrm >> 3) & 0x7).f[1] = sse_max_single(XMM((modrm >> 3) & 0x7).f[1], XMM(modrm & 0x7).f[1]); XMM((modrm >> 3) & 0x7).f[2] = sse_max_single(XMM((modrm >> 3) & 0x7).f[2], XMM(modrm & 0x7).f[2]); XMM((modrm >> 3) & 0x7).f[3] = sse_max_single(XMM((modrm >> 3) & 0x7).f[3], XMM(modrm & 0x7).f[3]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]); XMM((modrm >> 3) & 0x7).f[1] = sse_max_single(XMM((modrm >> 3) & 0x7).f[1], src.f[1]); XMM((modrm >> 3) & 0x7).f[2] = sse_max_single(XMM((modrm >> 3) & 0x7).f[2], src.f[2]); XMM((modrm >> 3) & 0x7).f[3] = sse_max_single(XMM((modrm >> 3) & 0x7).f[3], src.f[3]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(maxss_r128_r128m32)() // Opcode f3 0f 5f { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]); } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); src.d[0]=READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(addss)() // Opcode f3 0f 58 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + XMM(modrm & 0x7).f[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + src.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(subss)() // Opcode f3 0f 5c { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - src.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(mulss)() // Opcode f3 0f 5e { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * XMM(modrm & 0x7).f[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * src.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(divss)() // Opcode 0f 59 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / XMM(modrm & 0x7).f[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / src.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(rcpss_r128_r128m32)() // Opcode f3 0f 53 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = 1.0 / XMM(modrm & 0x7).f[0]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0]=READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = 1.0 / s.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(sqrtss_r128_r128m32)() // Opcode f3 0f 51 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = sqrt(XMM(modrm & 0x7).f[0]); } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0]=READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = sqrt(s.f[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(rsqrtss_r128_r128m32)() // Opcode f3 0f 52 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(XMM(modrm & 0x7).f[0]); } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0]=READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(s.f[0]); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(minss_r128_r128m32)() // Opcode f3 0f 5d { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM((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]; } else { XMM_REG s; UINT32 ea = GetEA(modrm, 0); s.d[0] = READ32(ea); XMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] < s.f[0] ? XMM((modrm >> 3) & 0x7).f[0] : s.f[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(comiss_r128_r128m32)() // Opcode 0f 2f { float32 a,b; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { a = XMM((modrm >> 3) & 0x7).d[0]; b = XMM(modrm & 0x7).d[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); a = XMM((modrm >> 3) & 0x7).d[0]; b = src.d[0]; } m_OF=0; m_SF=0; m_AF=0; if (float32_is_nan(a) || float32_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (float32_eq(a, b)) m_ZF = 1; if (float32_lt(a, b)) m_CF = 1; } // should generate exception when at least one of the operands is either QNaN or SNaN CYCLES(1); // TODO: correct cycle count } static void SSEOP(ucomiss_r128_r128m32)() // Opcode 0f 2e { float32 a,b; UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { a = XMM((modrm >> 3) & 0x7).d[0]; b = XMM(modrm & 0x7).d[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); a = XMM((modrm >> 3) & 0x7).d[0]; b = src.d[0]; } m_OF=0; m_SF=0; m_AF=0; if (float32_is_nan(a) || float32_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (float32_eq(a, b)) m_ZF = 1; if (float32_lt(a, b)) m_CF = 1; } // should generate exception when at least one of the operands is SNaN CYCLES(1); // TODO: correct cycle count } static void SSEOP(shufps)() // Opcode 0f 67 { UINT8 modrm = FETCH(); UINT8 sel = FETCH(); int m1,m2,m3,m4; int s,d; m1=sel & 3; m2=(sel >> 2) & 3; m3=(sel >> 4) & 3; m4=(sel >> 6) & 3; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { UINT32 t; t=XMM(d).d[m1]; XMM(d).d[1]=XMM(d).d[m2]; XMM(d).d[0]=t; XMM(d).d[2]=XMM(s).d[m3]; XMM(d).d[3]=XMM(s).d[m4]; } else { UINT32 t; XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); t=XMM(d).d[m1]; XMM(d).d[1]=XMM(d).d[m2]; XMM(d).d[0]=t; XMM(d).d[2]=src.d[m3]; XMM(d).d[3]=src.d[m4]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(unpcklps_r128_rm128)() // Opcode 0f 14 { UINT8 modrm = FETCH(); int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { XMM(d).d[3]=XMM(s).d[1]; XMM(d).d[2]=XMM(d).d[1]; XMM(d).d[1]=XMM(s).d[0]; //XMM(d).d[0]=XMM(d).d[0]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM(d).d[3]=src.d[1]; XMM(d).d[2]=XMM(d).d[1]; XMM(d).d[1]=src.d[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(unpckhps_r128_rm128)() // Opcode 0f 15 { UINT8 modrm = FETCH(); int s,d; s=modrm & 0x7; d=(modrm >> 3) & 0x7; if( modrm >= 0xc0 ) { XMM(d).d[0]=XMM(d).d[2]; XMM(d).d[1]=XMM(s).d[2]; XMM(d).d[2]=XMM(d).d[3]; XMM(d).d[3]=XMM(s).d[3]; } else { XMM_REG src; UINT32 ea = GetEA(modrm, 0); READXMM(ea, src); XMM(d).d[0]=XMM(d).d[2]; XMM(d).d[1]=src.d[2]; XMM(d).d[2]=XMM(d).d[3]; XMM(d).d[3]=src.d[3]; } CYCLES(1); // TODO: correct cycle count } INLINE bool sse_issingleordered(float op1, float op2) { // TODO: true when at least one of the two source operands being compared is a NaN return (op1 != op1) || (op1 != op2); } INLINE bool sse_issingleunordered(float op1, float op2) { // TODO: true when neither source operand is a NaN return !((op1 != op1) || (op1 != op2)); } INLINE void sse_predicate_compare_single(UINT8 imm8, XMM_REG d, XMM_REG s) { switch (imm8 & 7) { case 0: s.d[0]=s.f[0] == s.f[0] ? 0xffffffff : 0; d.d[1]=d.f[1] == s.f[1] ? 0xffffffff : 0; d.d[2]=d.f[2] == s.f[2] ? 0xffffffff : 0; d.d[3]=d.f[3] == s.f[3] ? 0xffffffff : 0; break; case 1: d.d[0]=d.f[0] < s.f[0] ? 0xffffffff : 0; d.d[1]=d.f[1] < s.f[1] ? 0xffffffff : 0; d.d[2]=d.f[2] < s.f[2] ? 0xffffffff : 0; d.d[3]=d.f[3] < s.f[3] ? 0xffffffff : 0; break; case 2: d.d[0]=d.f[0] <= s.f[0] ? 0xffffffff : 0; d.d[1]=d.f[1] <= s.f[1] ? 0xffffffff : 0; d.d[2]=d.f[2] <= s.f[2] ? 0xffffffff : 0; d.d[3]=d.f[3] <= s.f[3] ? 0xffffffff : 0; break; case 3: d.d[0]=sse_issingleunordered(d.f[0], s.f[0]) ? 0xffffffff : 0; d.d[1]=sse_issingleunordered(d.f[1], s.f[1]) ? 0xffffffff : 0; d.d[2]=sse_issingleunordered(d.f[2], s.f[2]) ? 0xffffffff : 0; d.d[3]=sse_issingleunordered(d.f[3], s.f[3]) ? 0xffffffff : 0; break; case 4: d.d[0]=d.f[0] != s.f[0] ? 0xffffffff : 0; d.d[1]=d.f[1] != s.f[1] ? 0xffffffff : 0; d.d[2]=d.f[2] != s.f[2] ? 0xffffffff : 0; d.d[3]=d.f[3] != s.f[3] ? 0xffffffff : 0; break; case 5: d.d[0]=d.f[0] < s.f[0] ? 0 : 0xffffffff; d.d[1]=d.f[1] < s.f[1] ? 0 : 0xffffffff; d.d[2]=d.f[2] < s.f[2] ? 0 : 0xffffffff; d.d[3]=d.f[3] < s.f[3] ? 0 : 0xffffffff; break; case 6: d.d[0]=d.f[0] <= s.f[0] ? 0 : 0xffffffff; d.d[1]=d.f[1] <= s.f[1] ? 0 : 0xffffffff; d.d[2]=d.f[2] <= s.f[2] ? 0 : 0xffffffff; d.d[3]=d.f[3] <= s.f[3] ? 0 : 0xffffffff; break; case 7: d.d[0]=sse_issingleordered(d.f[0], s.f[0]) ? 0xffffffff : 0; d.d[1]=sse_issingleordered(d.f[1], s.f[1]) ? 0xffffffff : 0; d.d[2]=sse_issingleordered(d.f[2], s.f[2]) ? 0xffffffff : 0; d.d[3]=sse_issingleordered(d.f[3], s.f[3]) ? 0xffffffff : 0; break; } } INLINE void sse_predicate_compare_single_scalar(UINT8 imm8, XMM_REG d, XMM_REG s) { switch (imm8 & 7) { case 0: s.d[0]=s.f[0] == s.f[0] ? 0xffffffff : 0; break; case 1: d.d[0]=d.f[0] < s.f[0] ? 0xffffffff : 0; break; case 2: d.d[0]=d.f[0] <= s.f[0] ? 0xffffffff : 0; break; case 3: d.d[0]=sse_issingleunordered(d.f[0], s.f[0]) ? 0xffffffff : 0; break; case 4: d.d[0]=d.f[0] != s.f[0] ? 0xffffffff : 0; break; case 5: d.d[0]=d.f[0] < s.f[0] ? 0 : 0xffffffff; break; case 6: d.d[0]=d.f[0] <= s.f[0] ? 0 : 0xffffffff; break; case 7: d.d[0]=sse_issingleordered(d.f[0], s.f[0]) ? 0xffffffff : 0; break; } } static void SSEOP(cmpps_r128_rm128_i8)() // Opcode 0f c2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; sse_predicate_compare_single(imm8, XMM(d), XMM(s)); } else { int d; XMM_REG s; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READXMM(ea, s); d=(modrm >> 3) & 0x7; sse_predicate_compare_single(imm8, XMM(d), s); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(cmpss_r128_r128m32_i8)() // Opcode f3 0f c2 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; sse_predicate_compare_single_scalar(imm8, XMM(d), XMM(s)); } else { int d; XMM_REG s; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); s.d[0]=READ32(ea); d=(modrm >> 3) & 0x7; sse_predicate_compare_single_scalar(imm8, XMM(d), s); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pinsrw_r64_r16m16_i8)() // Opcode 0f c4 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 imm8 = FETCH(); UINT16 v = LOAD_RM16(modrm); if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).w[imm8 & 7] = v; else MMX((modrm >> 3) & 0x7).w[imm8 & 3] = v; } else { UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); UINT16 v = READ16(ea); if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).w[imm8 & 7] = v; else MMX((modrm >> 3) & 0x7).w[imm8 & 3] = v; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pinsrw_r64_r32m16_i8)() // Opcode 0f c4 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 imm8 = FETCH(); UINT16 v = (UINT16)LOAD_RM32(modrm); if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).w[imm8 & 7] = v; else MMX((modrm >> 3) & 0x7).w[imm8 & 3] = v; } else { UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); UINT16 v = READ16(ea); if (m_xmm_operand_size) XMM((modrm >> 3) & 0x7).w[imm8 & 7] = v; else MMX((modrm >> 3) & 0x7).w[imm8 & 3] = v; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pextrw_r16_r64_i8)() // Opcode 0f c5 { //MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 imm8 = FETCH(); if (m_xmm_operand_size) STORE_REG16(modrm, XMM(modrm & 0x7).w[imm8 & 7]); else STORE_REG16(modrm, MMX(modrm & 0x7).w[imm8 & 3]); } else { //UINT8 imm8 = FETCH(); report_invalid_modrm("pextrw_r16_r64_i8", modrm); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pextrw_r32_r64_i8)() // Opcode 0f c5 { //MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { UINT8 imm8 = FETCH(); if (m_xmm_operand_size) STORE_REG32(modrm, XMM(modrm & 0x7).w[imm8 & 7]); else STORE_REG32(modrm, MMX(modrm & 0x7).w[imm8 & 3]); } else { //UINT8 imm8 = FETCH(); report_invalid_modrm("pextrw_r32_r64_i8", modrm); } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pminub_r64_rm64)() // Opcode 0f da { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((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]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] < s.b[n] ? MMX((modrm >> 3) & 0x7).b[n] : s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmaxub_r64_rm64)() // Opcode 0f de { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((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]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] > s.b[n] ? MMX((modrm >> 3) & 0x7).b[n] : s.b[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pavgb_r64_rm64)() // Opcode 0f e0 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n] = ((UINT16)MMX((modrm >> 3) & 0x7).b[n] + (UINT16)MMX(modrm & 0x7).b[n] + 1) >> 1; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 8;n++) MMX((modrm >> 3) & 0x7).b[n] = ((UINT16)MMX((modrm >> 3) & 0x7).b[n] + (UINT16)s.b[n] + 1) >> 1; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pavgw_r64_rm64)() // Opcode 0f e3 { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n] = ((UINT32)MMX((modrm >> 3) & 0x7).w[n] + (UINT32)MMX(modrm & 0x7).w[n] + 1) >> 1; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).w[n] = ((UINT32)MMX((modrm >> 3) & 0x7).w[n] + (UINT32)s.w[n] + 1) >> 1; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmulhuw_r64_rm64)() // Opcode 0f e4 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).w[0]=((UINT32)MMX((modrm >> 3) & 0x7).w[0]*(UINT32)MMX(modrm & 7).w[0]) >> 16; MMX((modrm >> 3) & 0x7).w[1]=((UINT32)MMX((modrm >> 3) & 0x7).w[1]*(UINT32)MMX(modrm & 7).w[1]) >> 16; MMX((modrm >> 3) & 0x7).w[2]=((UINT32)MMX((modrm >> 3) & 0x7).w[2]*(UINT32)MMX(modrm & 7).w[2]) >> 16; MMX((modrm >> 3) & 0x7).w[3]=((UINT32)MMX((modrm >> 3) & 0x7).w[3]*(UINT32)MMX(modrm & 7).w[3]) >> 16; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).w[0]=((UINT32)MMX((modrm >> 3) & 0x7).w[0]*(UINT32)s.w[0]) >> 16; MMX((modrm >> 3) & 0x7).w[1]=((UINT32)MMX((modrm >> 3) & 0x7).w[1]*(UINT32)s.w[1]) >> 16; MMX((modrm >> 3) & 0x7).w[2]=((UINT32)MMX((modrm >> 3) & 0x7).w[2]*(UINT32)s.w[2]) >> 16; MMX((modrm >> 3) & 0x7).w[3]=((UINT32)MMX((modrm >> 3) & 0x7).w[3]*(UINT32)s.w[3]) >> 16; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pminsw_r64_rm64)() // Opcode 0f ea { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((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]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] < s.s[n] ? MMX((modrm >> 3) & 0x7).s[n] : s.s[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmaxsw_r64_rm64)() // Opcode 0f ee { int n; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { for (n=0;n < 4;n++) MMX((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]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); for (n=0;n < 4;n++) MMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] > s.s[n] ? MMX((modrm >> 3) & 0x7).s[n] : s.s[n]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pmuludq_r64_rm64)() // Opcode 0f f4 { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q = (UINT64)MMX((modrm >> 3) & 0x7).d[0] * (UINT64)MMX(modrm & 0x7).d[0]; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).q = (UINT64)MMX((modrm >> 3) & 0x7).d[0] * (UINT64)s.d[0]; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psadbw_r64_rm64)() // Opcode 0f f6 { int n; INT32 temp; MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { temp=0; for (n=0;n < 8;n++) temp += abs((INT32)MMX((modrm >> 3) & 0x7).b[n] - (INT32)MMX(modrm & 0x7).b[n]); MMX((modrm >> 3) & 0x7).l=(UINT64)temp & 0xffff; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); temp=0; for (n=0;n < 8;n++) temp += abs((INT32)MMX((modrm >> 3) & 0x7).b[n] - (INT32)s.b[n]); MMX((modrm >> 3) & 0x7).l=(UINT64)temp & 0xffff; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(psubq_r64_rm64)() // Opcode 0f fb { MMXPROLOG(); UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q - MMX(modrm & 7).q; } else { MMX_REG s; UINT32 ea = GetEA(modrm, 0); READMMX(ea, s); MMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q - s.q; } CYCLES(1); // TODO: correct cycle count } static void SSEOP(pshufhw_r128_rm128_i8)() // Opcode f3 0f 70 { UINT8 modrm = FETCH(); if( modrm >= 0xc0 ) { XMM_REG t; int s,d; UINT8 imm8 = FETCH(); s=modrm & 0x7; d=(modrm >> 3) & 0x7; t.q[0]=XMM(s).q[1]; XMM(d).q[0]=XMM(s).q[0]; XMM(d).w[4]=t.w[imm8 & 3]; XMM(d).w[5]=t.w[(imm8 >> 2) & 3]; XMM(d).w[6]=t.w[(imm8 >> 4) & 3]; XMM(d).w[7]=t.w[(imm8 >> 6) & 3]; } else { XMM_REG s; int d=(modrm >> 3) & 0x7; UINT32 ea = GetEA(modrm, 0); UINT8 imm8 = FETCH(); READXMM(ea, s); XMM(d).q[0]=s.q[0]; XMM(d).w[4]=s.w[4 + (imm8 & 3)]; XMM(d).w[5]=s.w[4 + ((imm8 >> 2) & 3)]; XMM(d).w[6]=s.w[4 + ((imm8 >> 4) & 3)]; XMM(d).w[7]=s.w[4 + ((imm8 >> 6) & 3)]; } CYCLES(1); // TODO: correct cycle count } ================================================ FILE: vm86/mame/emu/cpu/i386.old/readme_msdos_player.txt ================================================ Based on MAME 0.152. Fixes in MAME 0.154 and 0.157 are applied. i386_state are removed and all its members are changed to global variables. All registers can be accessed directly without cpustate->. cycle_table_rm/pm are changed from dynamic array to static array. ================================================ FILE: vm86/mame/emu/cpu/i386.old/x87ops.c ================================================ /*************************************************************************** x87 FPU emulation TODO: - 80-bit precision for F2XM1, FYL2X, FPATAN - Figure out why SoftFloat trig extensions produce bad values - Cycle counts for all processors (currently using 486 counts) - Precision-dependent cycle counts for divide instructions - Last instruction, operand pointers etc. - Fix FLDENV, FSTENV, FSAVE, FRSTOR and FPREM - Status word C2 updates to reflect round up/down - Handling of invalid and denormal numbers - Remove redundant operand checks - Exceptions ***************************************************************************/ #include /************************************* * * Defines * *************************************/ #define X87_SW_IE 0x0001 #define X87_SW_DE 0x0002 #define X87_SW_ZE 0x0004 #define X87_SW_OE 0x0008 #define X87_SW_UE 0x0010 #define X87_SW_PE 0x0020 #define X87_SW_SF 0x0040 #define X87_SW_ES 0x0080 #define X87_SW_C0 0x0100 #define X87_SW_C1 0x0200 #define X87_SW_C2 0x0400 #define X87_SW_TOP_SHIFT 11 #define X87_SW_TOP_MASK 7 #define X87_SW_C3 0x4000 #define X87_SW_BUSY 0x8000 #define X87_CW_IM 0x0001 #define X87_CW_DM 0x0002 #define X87_CW_ZM 0x0004 #define X87_CW_OM 0x0008 #define X87_CW_UM 0x0010 #define X87_CW_PM 0x0020 #define X87_CW_PC_SHIFT 8 #define X87_CW_PC_MASK 3 #define X87_CW_PC_SINGLE 0 #define X87_CW_PC_DOUBLE 2 #define X87_CW_PC_EXTEND 3 #define X87_CW_RC_SHIFT 10 #define X87_CW_RC_MASK 3 #define X87_CW_RC_NEAREST 0 #define X87_CW_RC_DOWN 1 #define X87_CW_RC_UP 2 #define X87_CW_RC_ZERO 3 #define X87_TW_MASK 3 #define X87_TW_VALID 0 #define X87_TW_ZERO 1 #define X87_TW_SPECIAL 2 #define X87_TW_EMPTY 3 /************************************* * * Macros * *************************************/ #define ST_TO_PHYS(x) (((m_x87_sw >> X87_SW_TOP_SHIFT) + (x)) & X87_SW_TOP_MASK) #define ST(x) (m_x87_reg[ST_TO_PHYS(x)]) #define X87_TW_FIELD_SHIFT(x) ((x) << 1) #define X87_TAG(x) ((m_x87_tw >> X87_TW_FIELD_SHIFT(x)) & X87_TW_MASK) #define X87_RC ((m_x87_cw >> X87_CW_RC_SHIFT) & X87_CW_RC_MASK) #define X87_IS_ST_EMPTY(x) (X87_TAG(ST_TO_PHYS(x)) == X87_TW_EMPTY) #define X87_SW_C3_0 X87_SW_C0 #define UNIMPLEMENTED fatalerror("Unimplemented x87 op: %s (PC:%x)\n", __FUNCTION__, m_pc) /************************************* * * Constants * *************************************/ static const floatx80 fx80_zero = { 0x0000, U64(0x0000000000000000) }; static const floatx80 fx80_one = { 0x3fff, U64(0x8000000000000000) }; static const floatx80 fx80_ninf = { 0xffff, U64(0x8000000000000000) }; static const floatx80 fx80_inan = { 0xffff, U64(0xc000000000000000) }; /* Maps x87 round modes to SoftFloat round modes */ static const int x87_to_sf_rc[4] = { float_round_nearest_even, float_round_down, float_round_up, float_round_to_zero, }; /************************************* * * SoftFloat helpers * *************************************/ extern flag floatx80_is_nan( floatx80 a ); INLINE int floatx80_is_zero(floatx80 fx) { return (((fx.high & 0x7fff) == 0) && ((fx.low << 1) == 0)); } INLINE int floatx80_is_inf(floatx80 fx) { return (((fx.high & 0x7fff) == 0x7fff) && ((fx.low << 1) == 0)); } INLINE int floatx80_is_denormal(floatx80 fx) { return (((fx.high & 0x7fff) == 0) && ((fx.low & U64(0x8000000000000000)) == 0) && ((fx.low << 1) != 0)); } INLINE floatx80 floatx80_abs(floatx80 fx) { fx.high &= 0x7fff; return fx; } INLINE double fx80_to_double(floatx80 fx) { UINT64 d = floatx80_to_float64(fx); return *(double*)&d; } INLINE floatx80 double_to_fx80(double in) { return float64_to_floatx80(*(UINT64*)&in); } INLINE floatx80 READ80(UINT32 ea) { floatx80 t; t.low = READ64(ea); t.high = READ16(ea + 8); return t; } INLINE void WRITE80(UINT32 ea, floatx80 t) { WRITE64(ea, t.low); WRITE16(ea + 8, t.high); } /************************************* * * x87 stack handling * *************************************/ INLINE void x87_set_stack_top(int top) { m_x87_sw &= ~(X87_SW_TOP_MASK << X87_SW_TOP_SHIFT); m_x87_sw |= (top << X87_SW_TOP_SHIFT); } INLINE void x87_set_tag(int reg, int tag) { int shift = X87_TW_FIELD_SHIFT(reg); m_x87_tw &= ~(X87_TW_MASK << shift); m_x87_tw |= (tag << shift); } void x87_write_stack(int i, floatx80 value, int update_tag) { ST(i) = value; if (update_tag) { int tag; if (floatx80_is_zero(value)) { tag = X87_TW_ZERO; } else if (floatx80_is_inf(value) || floatx80_is_nan(value)) { tag = X87_TW_SPECIAL; } else { tag = X87_TW_VALID; } x87_set_tag(ST_TO_PHYS(i), tag); } } INLINE void x87_set_stack_underflow() { m_x87_sw |= X87_SW_C1 | X87_SW_IE | X87_SW_SF; } INLINE void x87_set_stack_overflow() { m_x87_sw &= ~X87_SW_C1; m_x87_sw |= X87_SW_IE | X87_SW_SF; } int x87_inc_stack() { int ret = 1; // Check for stack underflow if (X87_IS_ST_EMPTY(0)) { ret = 0; x87_set_stack_underflow(); // Don't update the stack if the exception is unmasked if (~m_x87_cw & X87_CW_IM) return ret; } x87_set_tag(ST_TO_PHYS(0), X87_TW_EMPTY); x87_set_stack_top(ST_TO_PHYS(1)); return ret; } int x87_dec_stack() { int ret = 1; // Check for stack overflow if (!X87_IS_ST_EMPTY(7)) { ret = 0; x87_set_stack_overflow(); // Don't update the stack if the exception is unmasked if (~m_x87_cw & X87_CW_IM) return ret; } x87_set_stack_top(ST_TO_PHYS(7)); return ret; } /************************************* * * Exception handling * *************************************/ int x87_check_exceptions() { /* Update the exceptions from SoftFloat */ if (float_exception_flags & float_flag_invalid) { m_x87_sw |= X87_SW_IE; float_exception_flags &= ~float_flag_invalid; } if (float_exception_flags & float_flag_overflow) { m_x87_sw |= X87_SW_OE; float_exception_flags &= ~float_flag_overflow; } if (float_exception_flags & float_flag_underflow) { m_x87_sw |= X87_SW_UE; float_exception_flags &= ~float_flag_underflow; } if (float_exception_flags & float_flag_inexact) { m_x87_sw |= X87_SW_PE; float_exception_flags &= ~float_flag_inexact; } if ((m_x87_sw & ~m_x87_cw) & 0x3f) { // m_device->execute().set_input_line(INPUT_LINE_FERR, RAISE_LINE); logerror("Unmasked x87 exception (CW:%.4x, SW:%.4x)\n", m_x87_cw, m_x87_sw); if (m_cr[0] & 0x20) // FIXME: 486 and up only { m_ext = 1; i386_trap(FAULT_MF, 0, 0); } return 0; } return 1; } INLINE void x87_write_cw(UINT16 cw) { m_x87_cw = cw; /* Update the SoftFloat rounding mode */ float_rounding_mode = x87_to_sf_rc[(m_x87_cw >> X87_CW_RC_SHIFT) & X87_CW_RC_MASK]; } void x87_reset() { x87_write_cw(0x0037f); m_x87_sw = 0; m_x87_tw = 0xffff; // TODO: FEA=0, FDS=0, FIP=0 FOP=0 FCS=0 m_x87_data_ptr = 0; m_x87_inst_ptr = 0; m_x87_opcode = 0; } /************************************* * * Core arithmetic * *************************************/ static floatx80 x87_add(floatx80 a, floatx80 b) { floatx80 result = { 0 }; switch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK) { case X87_CW_PC_SINGLE: { float32 a32 = floatx80_to_float32(a); float32 b32 = floatx80_to_float32(b); result = float32_to_floatx80(float32_add(a32, b32)); break; } case X87_CW_PC_DOUBLE: { float64 a64 = floatx80_to_float64(a); float64 b64 = floatx80_to_float64(b); result = float64_to_floatx80(float64_add(a64, b64)); break; } case X87_CW_PC_EXTEND: { result = floatx80_add(a, b); break; } } return result; } static floatx80 x87_sub(floatx80 a, floatx80 b) { floatx80 result = { 0 }; switch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK) { case X87_CW_PC_SINGLE: { float32 a32 = floatx80_to_float32(a); float32 b32 = floatx80_to_float32(b); result = float32_to_floatx80(float32_sub(a32, b32)); break; } case X87_CW_PC_DOUBLE: { float64 a64 = floatx80_to_float64(a); float64 b64 = floatx80_to_float64(b); result = float64_to_floatx80(float64_sub(a64, b64)); break; } case X87_CW_PC_EXTEND: { result = floatx80_sub(a, b); break; } } return result; } static floatx80 x87_mul(floatx80 a, floatx80 b) { floatx80 val = { 0 }; switch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK) { case X87_CW_PC_SINGLE: { float32 a32 = floatx80_to_float32(a); float32 b32 = floatx80_to_float32(b); val = float32_to_floatx80(float32_mul(a32, b32)); break; } case X87_CW_PC_DOUBLE: { float64 a64 = floatx80_to_float64(a); float64 b64 = floatx80_to_float64(b); val = float64_to_floatx80(float64_mul(a64, b64)); break; } case X87_CW_PC_EXTEND: { val = floatx80_mul(a, b); break; } } return val; } static floatx80 x87_div(floatx80 a, floatx80 b) { floatx80 val = { 0 }; switch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK) { case X87_CW_PC_SINGLE: { float32 a32 = floatx80_to_float32(a); float32 b32 = floatx80_to_float32(b); val = float32_to_floatx80(float32_div(a32, b32)); break; } case X87_CW_PC_DOUBLE: { float64 a64 = floatx80_to_float64(a); float64 b64 = floatx80_to_float64(b); val = float64_to_floatx80(float64_div(a64, b64)); break; } case X87_CW_PC_EXTEND: { val = floatx80_div(a, b); break; } } return val; } /************************************* * * Instructions * *************************************/ /************************************* * * Add * *************************************/ void x87_fadd_m32real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fadd_m64real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fadd_st_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fadd_sti_st(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(i, result, TRUE); CYCLES(8); } void x87_faddp(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } CYCLES(8); } void x87_fiadd_m32int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(19); } void x87_fiadd_m16int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_add(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(20); } /************************************* * * Subtract * *************************************/ void x87_fsub_m32real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsub_m64real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsub_st_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsub_sti_st(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(i, result, TRUE); CYCLES(8); } void x87_fsubp(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } CYCLES(8); } void x87_fisub_m32int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(19); } void x87_fisub_m16int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(20); } /************************************* * * Reverse Subtract * *************************************/ void x87_fsubr_m32real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = float32_to_floatx80(m32real); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsubr_m64real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = float64_to_floatx80(m64real); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsubr_st_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } void x87_fsubr_sti_st(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(i, result, TRUE); CYCLES(8); } void x87_fsubrp(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } CYCLES(8); } void x87_fisubr_m32int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = int32_to_floatx80(m32int); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(19); } void x87_fisubr_m16int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ16(ea); floatx80 a = int32_to_floatx80(m16int); floatx80 b = ST(0); if ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) || (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000))) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_sub(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(20); } /************************************* * * Divide * *************************************/ void x87_fdiv_m32real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fdiv_m64real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fdiv_st_sti(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(0, result, TRUE); } // 73, 62, 35 CYCLES(73); } void x87_fdiv_sti_st(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); } // 73, 62, 35 CYCLES(73); } void x87_fdivp(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } // 73, 62, 35 CYCLES(73); } void x87_fidiv_m32int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fidiv_m16int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } /************************************* * * Reverse Divide * *************************************/ void x87_fdivr_m32real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = float32_to_floatx80(m32real); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fdivr_m64real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = float64_to_floatx80(m64real); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fdivr_st_sti(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(i); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(0, result, TRUE); } // 73, 62, 35 CYCLES(73); } void x87_fdivr_sti_st(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); } // 73, 62, 35 CYCLES(73); } void x87_fdivrp(UINT8 modrm) { int i = modrm & 7; floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } // 73, 62, 35 CYCLES(73); } void x87_fidivr_m32int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = int32_to_floatx80(m32int); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } void x87_fidivr_m16int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ32(ea); floatx80 a = int32_to_floatx80(m16int); floatx80 b = ST(0); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_div(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); // 73, 62, 35 CYCLES(73); } /************************************* * * Multiply * *************************************/ void x87_fmul_m32real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(11); } void x87_fmul_m64real(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(14); } void x87_fmul_st_sti(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(16); } void x87_fmul_sti_st(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(i, result, TRUE); CYCLES(16); } void x87_fmulp(UINT8 modrm) { floatx80 result; int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) { x87_write_stack(i, result, TRUE); x87_inc_stack(); } CYCLES(16); } void x87_fimul_m32int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(22); } void x87_fimul_m16int(UINT8 modrm) { floatx80 result; UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = x87_mul(a, b); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(22); } /************************************* * * Miscellaneous arithmetic * *************************************/ void x87_fprem(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(1); m_x87_sw &= ~X87_SW_C2; // TODO: Implement Cx bits result = floatx80_rem(a, b); } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(84); } void x87_fprem1(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 a = ST(0); floatx80 b = ST(1); m_x87_sw &= ~X87_SW_C2; // TODO: Implement Cx bits result = floatx80_rem(a, b); } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(94); } void x87_fsqrt(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 value = ST(0); if ((!floatx80_is_zero(value) && (value.high & 0x8000)) || floatx80_is_denormal(value)) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { result = floatx80_sqrt(value); } } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(8); } /************************************* * * Trigonometric * *************************************/ void x87_f2xm1(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { // TODO: Inaccurate double x = fx80_to_double(ST(0)); double res = pow(2.0, x) - 1; result = double_to_fx80(res); } if (x87_check_exceptions()) { x87_write_stack(0, result, TRUE); } CYCLES(242); } void x87_fyl2x(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 x = ST(0); floatx80 y = ST(1); if (x.high & 0x8000) { m_x87_sw |= X87_SW_IE; result = fx80_inan; } else { // TODO: Inaccurate double d64 = fx80_to_double(x); double l2x = log(d64)/log(2.0); result = floatx80_mul(double_to_fx80(l2x), y); } } if (x87_check_exceptions()) { x87_write_stack(1, result, TRUE); x87_inc_stack(); } CYCLES(250); } void x87_fyl2xp1(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); result = fx80_inan; } else { floatx80 x = ST(0); floatx80 y = ST(1); // TODO: Inaccurate double d64 = fx80_to_double(x); double l2x1 = log(d64 + 1.0)/log(2.0); result = floatx80_mul(double_to_fx80(l2x1), y); } if (x87_check_exceptions()) { x87_write_stack(1, result, TRUE); x87_inc_stack(); } CYCLES(313); } void x87_fptan(UINT8 modrm) { floatx80 result1, result2; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result1 = fx80_inan; result2 = fx80_inan; } else if (!X87_IS_ST_EMPTY(7)) { x87_set_stack_overflow(); result1 = fx80_inan; result2 = fx80_inan; } else { result1 = ST(0); result2 = fx80_one; #if 0 // TODO: Function produces bad values if (floatx80_ftan(result1) != -1) m_x87_sw &= ~X87_SW_C2; else m_x87_sw |= X87_SW_C2; #else double x = fx80_to_double(result1); x = tan(x); result1 = double_to_fx80(x); m_x87_sw &= ~X87_SW_C2; #endif } if (x87_check_exceptions()) { x87_write_stack(0, result1, TRUE); x87_dec_stack(); x87_write_stack(0, result2, TRUE); } CYCLES(244); } void x87_fpatan(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { // TODO: Inaccurate double val = atan(fx80_to_double(ST(1)) / fx80_to_double(ST(0))); result = double_to_fx80(val); } if (x87_check_exceptions()) { x87_write_stack(1, result, TRUE); x87_inc_stack(); } CYCLES(289); } void x87_fsin(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { result = ST(0); #if 0 // TODO: Function produces bad values if (floatx80_fsin(result) != -1) m_x87_sw &= ~X87_SW_C2; else m_x87_sw |= X87_SW_C2; #else double x = fx80_to_double(result); x = sin(x); result = double_to_fx80(x); m_x87_sw &= ~X87_SW_C2; #endif } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(241); } void x87_fcos(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { result = ST(0); #if 0 // TODO: Function produces bad values if (floatx80_fcos(result) != -1) m_x87_sw &= ~X87_SW_C2; else m_x87_sw |= X87_SW_C2; #else double x = fx80_to_double(result); x = cos(x); result = double_to_fx80(x); m_x87_sw &= ~X87_SW_C2; #endif } if (x87_check_exceptions()) x87_write_stack(0, result, TRUE); CYCLES(241); } void x87_fsincos(UINT8 modrm) { floatx80 s_result, c_result; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); s_result = c_result = fx80_inan; } else if (!X87_IS_ST_EMPTY(7)) { x87_set_stack_overflow(); s_result = c_result = fx80_inan; } else { extern int sf_fsincos(floatx80 a, floatx80 *sin_a, floatx80 *cos_a); s_result = c_result = ST(0); #if 0 // TODO: Function produces bad values if (sf_fsincos(s_result, &s_result, &c_result) != -1) m_x87_sw &= ~X87_SW_C2; else m_x87_sw |= X87_SW_C2; #else double s = fx80_to_double(s_result); double c = fx80_to_double(c_result); s = sin(s); c = cos(c); s_result = double_to_fx80(s); c_result = double_to_fx80(c); m_x87_sw &= ~X87_SW_C2; #endif } if (x87_check_exceptions()) { x87_write_stack(0, s_result, TRUE); x87_dec_stack(); x87_write_stack(0, c_result, TRUE); } CYCLES(291); } /************************************* * * Load data * *************************************/ void x87_fld_m32real(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 0); if (x87_dec_stack()) { UINT32 m32real = READ32(ea); value = float32_to_floatx80(m32real); m_x87_sw &= ~X87_SW_C1; if (floatx80_is_signaling_nan(value) || floatx80_is_denormal(value)) { m_x87_sw |= X87_SW_IE; value = fx80_inan; } } else { value = fx80_inan; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(3); } void x87_fld_m64real(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 0); if (x87_dec_stack()) { UINT64 m64real = READ64(ea); value = float64_to_floatx80(m64real); m_x87_sw &= ~X87_SW_C1; if (floatx80_is_signaling_nan(value) || floatx80_is_denormal(value)) { m_x87_sw |= X87_SW_IE; value = fx80_inan; } } else { value = fx80_inan; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(3); } void x87_fld_m80real(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 0); if (x87_dec_stack()) { m_x87_sw &= ~X87_SW_C1; value = READ80(ea); } else { value = fx80_inan; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(6); } void x87_fld_sti(UINT8 modrm) { floatx80 value; if (x87_dec_stack()) { m_x87_sw &= ~X87_SW_C1; value = ST((modrm + 1) & 7); } else { value = fx80_inan; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(4); } void x87_fild_m16int(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 0); if (!x87_dec_stack()) { value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; INT16 m16int = READ16(ea); value = int32_to_floatx80(m16int); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(13); } void x87_fild_m32int(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 0); if (!x87_dec_stack()) { value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; INT32 m32int = READ32(ea); value = int32_to_floatx80(m32int); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(9); } void x87_fild_m64int(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 0); if (!x87_dec_stack()) { value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; INT64 m64int = READ64(ea); value = int64_to_floatx80(m64int); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(10); } void x87_fbld(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 0); if (!x87_dec_stack()) { value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; UINT64 m64val = 0; UINT16 sign; value = READ80(ea); sign = value.high & 0x8000; m64val += ((value.high >> 4) & 0xf) * 10; m64val += ((value.high >> 0) & 0xf); for (int i = 60; i >= 0; i -= 4) { m64val *= 10; m64val += (value.low >> i) & 0xf; } value = int64_to_floatx80(m64val); value.high |= sign; } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(75); } /************************************* * * Store data * *************************************/ void x87_fst_m32real(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 1); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } if (x87_check_exceptions()) { UINT32 m32real = floatx80_to_float32(value); WRITE32(ea, m32real); } CYCLES(7); } void x87_fst_m64real(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 1); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } if (x87_check_exceptions()) { UINT64 m64real = floatx80_to_float64(value); WRITE64(ea, m64real); } CYCLES(8); } void x87_fst_sti(UINT8 modrm) { int i = modrm & 7; floatx80 value; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } if (x87_check_exceptions()) x87_write_stack(i, value, TRUE); CYCLES(3); } void x87_fstp_m32real(UINT8 modrm) { floatx80 value; UINT32 ea = GetEA(modrm, 1); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } if (x87_check_exceptions()) { UINT32 m32real = floatx80_to_float32(value); WRITE32(ea, m32real); x87_inc_stack(); } CYCLES(7); } void x87_fstp_m64real(UINT8 modrm) { floatx80 value; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } UINT32 ea = GetEA(modrm, 1); if (x87_check_exceptions()) { UINT64 m64real = floatx80_to_float64(value); WRITE64(ea, m64real); x87_inc_stack(); } CYCLES(8); } void x87_fstp_m80real(UINT8 modrm) { floatx80 value; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } UINT32 ea = GetEA(modrm, 1); if (x87_check_exceptions()) { WRITE80(ea, value); x87_inc_stack(); } CYCLES(6); } void x87_fstp_sti(UINT8 modrm) { int i = modrm & 7; floatx80 value; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); } if (x87_check_exceptions()) { x87_write_stack(i, value, TRUE); x87_inc_stack(); } CYCLES(3); } void x87_fist_m16int(UINT8 modrm) { INT16 m16int; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m16int = -32768; } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(-32768); floatx80 upperLim = int32_to_floatx80(32767); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m16int = floatx80_to_int32(fx80); else m16int = -32768; } UINT32 ea = GetEA(modrm, 1); if (x87_check_exceptions()) { WRITE16(ea, m16int); } CYCLES(29); } void x87_fist_m32int(UINT8 modrm) { INT32 m32int; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m32int = 0x80000000; } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(0x80000000); floatx80 upperLim = int32_to_floatx80(0x7fffffff); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m32int = floatx80_to_int32(fx80); else m32int = 0x80000000; } UINT32 ea = GetEA(modrm, 1); if (x87_check_exceptions()) { WRITE32(ea, m32int); } CYCLES(28); } void x87_fistp_m16int(UINT8 modrm) { INT16 m16int; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m16int = (UINT16)0x8000; } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(-32768); floatx80 upperLim = int32_to_floatx80(32767); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m16int = floatx80_to_int32(fx80); else m16int = (UINT16)0x8000; } UINT32 ea = GetEA(modrm, 1); if (x87_check_exceptions()) { WRITE16(ea, m16int); x87_inc_stack(); } CYCLES(29); } void x87_fistp_m32int(UINT8 modrm) { INT32 m32int; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m32int = 0x80000000; } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int32_to_floatx80(0x80000000); floatx80 upperLim = int32_to_floatx80(0x7fffffff); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m32int = floatx80_to_int32(fx80); else m32int = 0x80000000; } UINT32 ea = GetEA(modrm, 1); if (x87_check_exceptions()) { WRITE32(ea, m32int); x87_inc_stack(); } CYCLES(29); } void x87_fistp_m64int(UINT8 modrm) { INT64 m64int; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m64int = U64(0x8000000000000000); } else { floatx80 fx80 = floatx80_round_to_int(ST(0)); floatx80 lowerLim = int64_to_floatx80(U64(0x8000000000000000)); floatx80 upperLim = int64_to_floatx80(U64(0x7fffffffffffffff)); m_x87_sw &= ~X87_SW_C1; if (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim)) m64int = floatx80_to_int64(fx80); else m64int = U64(0x8000000000000000); } UINT32 ea = GetEA(modrm, 1); if (x87_check_exceptions()) { WRITE64(ea, m64int); x87_inc_stack(); } CYCLES(29); } void x87_fbstp(UINT8 modrm) { floatx80 result; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); result = fx80_inan; } else { UINT64 u64 = floatx80_to_int64(floatx80_abs(ST(0))); result.low = 0; for (int i = 0; i < 64; i += 4) { result.low += (u64 % 10) << i; u64 /= 10; } result.high = (u64 % 10); result.high += ((u64 / 10) % 10) << 4; result.high |= ST(0).high & 0x8000; } UINT32 ea = GetEA(modrm, 1); if (x87_check_exceptions()) { WRITE80(ea, result); x87_inc_stack(); } CYCLES(175); } /************************************* * * Constant load * *************************************/ void x87_fld1(UINT8 modrm) { floatx80 value; int tag; if (x87_dec_stack()) { m_x87_sw &= ~X87_SW_C1; value = fx80_one; tag = X87_TW_VALID; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } CYCLES(4); } void x87_fldl2t(UINT8 modrm) { floatx80 value; int tag; if (x87_dec_stack()) { tag = X87_TW_VALID; value.high = 0x4000; if (X87_RC == X87_CW_RC_UP) value.low = U64(0xd49a784bcd1b8aff); else value.low = U64(0xd49a784bcd1b8afe); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } CYCLES(8); } void x87_fldl2e(UINT8 modrm) { floatx80 value; int tag; if (x87_dec_stack()) { int rc = X87_RC; tag = X87_TW_VALID; value.high = 0x3fff; if (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST) value.low = U64(0xb8aa3b295c17f0bc); else value.low = U64(0xb8aa3b295c17f0bb); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } CYCLES(8); } void x87_fldpi(UINT8 modrm) { floatx80 value; int tag; if (x87_dec_stack()) { int rc = X87_RC; tag = X87_TW_VALID; value.high = 0x4000; if (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST) value.low = U64(0xc90fdaa22168c235); else value.low = U64(0xc90fdaa22168c234); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } CYCLES(8); } void x87_fldlg2(UINT8 modrm) { floatx80 value; int tag; if (x87_dec_stack()) { int rc = X87_RC; tag = X87_TW_VALID; value.high = 0x3ffd; if (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST) value.low = U64(0x9a209a84fbcff799); else value.low = U64(0x9a209a84fbcff798); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } CYCLES(8); } void x87_fldln2(UINT8 modrm) { floatx80 value; int tag; if (x87_dec_stack()) { int rc = X87_RC; tag = X87_TW_VALID; value.high = 0x3ffe; if (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST) value.low = U64(0xb17217f7d1cf79ac); else value.low = U64(0xb17217f7d1cf79ab); m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } CYCLES(8); } void x87_fldz(UINT8 modrm) { floatx80 value; int tag; if (x87_dec_stack()) { value = fx80_zero; tag = X87_TW_ZERO; m_x87_sw &= ~X87_SW_C1; } else { value = fx80_inan; tag = X87_TW_SPECIAL; } if (x87_check_exceptions()) { x87_set_tag(ST_TO_PHYS(0), tag); x87_write_stack(0, value, FALSE); } CYCLES(4); } /************************************* * * Miscellaneous * *************************************/ void x87_fnop(UINT8 modrm) { CYCLES(3); } void x87_fchs(UINT8 modrm) { floatx80 value; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); value.high ^= 0x8000; } if (x87_check_exceptions()) x87_write_stack(0, value, FALSE); CYCLES(6); } void x87_fabs(UINT8 modrm) { floatx80 value; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); value.high &= 0x7fff; } if (x87_check_exceptions()) x87_write_stack(0, value, FALSE); CYCLES(6); } void x87_fscale(UINT8 modrm) { floatx80 value; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = ST(0); // Set the rounding mode to truncate UINT16 old_cw = m_x87_cw; UINT16 new_cw = (old_cw & ~(X87_CW_RC_MASK << X87_CW_RC_SHIFT)) | (X87_CW_RC_ZERO << X87_CW_RC_SHIFT); x87_write_cw(new_cw); // Interpret ST(1) as an integer UINT32 st1 = floatx80_to_int32(floatx80_round_to_int(ST(1))); // Restore the rounding mode x87_write_cw(old_cw); // Get the unbiased exponent of ST(0) INT16 exp = (ST(0).high & 0x7fff) - 0x3fff; // Calculate the new exponent exp = (exp + st1 + 0x3fff) & 0x7fff; // Write it back value.high = (value.high & ~0x7fff) + exp; } if (x87_check_exceptions()) x87_write_stack(0, value, FALSE); CYCLES(31); } void x87_frndint(UINT8 modrm) { floatx80 value; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); value = fx80_inan; } else { m_x87_sw &= ~X87_SW_C1; value = floatx80_round_to_int(ST(0)); } if (x87_check_exceptions()) x87_write_stack(0, value, TRUE); CYCLES(21); } void x87_fxtract(UINT8 modrm) { floatx80 sig80, exp80; if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); sig80 = exp80 = fx80_inan; } else if (!X87_IS_ST_EMPTY(7)) { x87_set_stack_overflow(); sig80 = exp80 = fx80_inan; } else { floatx80 value = ST(0); if (floatx80_eq(value, fx80_zero)) { m_x87_sw |= X87_SW_ZE; exp80 = fx80_ninf; sig80 = fx80_zero; } else { // Extract the unbiased exponent exp80 = int32_to_floatx80((value.high & 0x7fff) - 0x3fff); // For the significand, replicate the original value and set its true exponent to 0. sig80 = value; sig80.high &= ~0x7fff; sig80.high |= 0x3fff; } } if (x87_check_exceptions()) { x87_write_stack(0, exp80, TRUE); x87_dec_stack(); x87_write_stack(0, sig80, TRUE); } CYCLES(21); } /************************************* * * Comparison * *************************************/ void x87_ftst(UINT8 modrm) { if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); if (floatx80_is_nan(ST(0))) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(ST(0), fx80_zero)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(ST(0), fx80_zero)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(4); } void x87_fxam(UINT8 modrm) { floatx80 value = ST(0); m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); // TODO: Unsupported and denormal values if (X87_IS_ST_EMPTY(0)) { m_x87_sw |= X87_SW_C3 | X87_SW_C0; } else if (floatx80_is_zero(value)) { m_x87_sw |= X87_SW_C3; } if (floatx80_is_nan(value)) { m_x87_sw |= X87_SW_C0; } else if (floatx80_is_inf(value)) { m_x87_sw |= X87_SW_C2 | X87_SW_C0; } else { m_x87_sw |= X87_SW_C2; } if (value.high & 0x8000) m_x87_sw |= X87_SW_C1; CYCLES(8); } void x87_ficom_m16int(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if (floatx80_is_nan(a)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(16); } void x87_ficom_m32int(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if (floatx80_is_nan(a)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(15); } void x87_ficomp_m16int(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); INT16 m16int = READ16(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m16int); if (floatx80_is_nan(a)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(16); } void x87_ficomp_m32int(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); INT32 m32int = READ32(ea); floatx80 a = ST(0); floatx80 b = int32_to_floatx80(m32int); if (floatx80_is_nan(a)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(15); } void x87_fcom_m32real(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(4); } void x87_fcom_m64real(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(4); } void x87_fcom_sti(UINT8 modrm) { int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(4); } void x87_fcomp_m32real(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); UINT32 m32real = READ32(ea); floatx80 a = ST(0); floatx80 b = float32_to_floatx80(m32real); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(4); } void x87_fcomp_m64real(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); if (X87_IS_ST_EMPTY(0)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); UINT64 m64real = READ64(ea); floatx80 a = ST(0); floatx80 b = float64_to_floatx80(m64real); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(4); } void x87_fcomp_sti(UINT8 modrm) { int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(4); } void x87_fcomip_sti(UINT8 modrm) { int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_ZF = 1; m_PF = 1; m_CF = 1; } else { m_x87_sw &= ~X87_SW_C1; floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_ZF = 1; m_PF = 1; m_CF = 1; m_x87_sw |= X87_SW_IE; } else { m_ZF = 0; m_PF = 0; m_CF = 0; if (floatx80_eq(a, b)) m_ZF = 1; if (floatx80_lt(a, b)) m_CF = 1; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(4); // TODO: correct cycle count } void x87_fcompp(UINT8 modrm) { if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(1); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) { x87_inc_stack(); x87_inc_stack(); } CYCLES(5); } /************************************* * * Unordererd comparison * *************************************/ void x87_fucom_sti(UINT8 modrm) { int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } x87_check_exceptions(); CYCLES(4); } void x87_fucomp_sti(UINT8 modrm) { int i = modrm & 7; if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(i); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) x87_inc_stack(); CYCLES(4); } void x87_fucompp(UINT8 modrm) { if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) { x87_set_stack_underflow(); m_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0; } else { m_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0); floatx80 a = ST(0); floatx80 b = ST(1); if (floatx80_is_nan(a) || floatx80_is_nan(b)) { m_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3; if (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b)) m_x87_sw |= X87_SW_IE; } else { if (floatx80_eq(a, b)) m_x87_sw |= X87_SW_C3; if (floatx80_lt(a, b)) m_x87_sw |= X87_SW_C0; } } if (x87_check_exceptions()) { x87_inc_stack(); x87_inc_stack(); } CYCLES(4); } /************************************* * * Control * *************************************/ void x87_fdecstp(UINT8 modrm) { m_x87_sw &= ~X87_SW_C1; x87_dec_stack(); x87_check_exceptions(); CYCLES(3); } void x87_fincstp(UINT8 modrm) { m_x87_sw &= ~X87_SW_C1; x87_inc_stack(); x87_check_exceptions(); CYCLES(3); } void x87_fclex(UINT8 modrm) { m_x87_sw &= ~0x80ff; CYCLES(7); } void x87_ffree(UINT8 modrm) { x87_set_tag(ST_TO_PHYS(modrm & 7), X87_TW_EMPTY); CYCLES(3); } void x87_finit(UINT8 modrm) { x87_reset(); CYCLES(17); } void x87_fldcw(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); UINT16 cw = READ16(ea); x87_write_cw(cw); x87_check_exceptions(); CYCLES(4); } void x87_fstcw(UINT8 modrm) { UINT32 ea = GetEA(modrm, 1); WRITE16(ea, m_x87_cw); CYCLES(3); } void x87_fldenv(UINT8 modrm) { // TODO: Pointers and selectors UINT32 ea = GetEA(modrm, 0); if (m_operand_size) { // 32-bit real/protected mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 4); m_x87_tw = READ16(ea + 8); } else { // 16-bit real/protected mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 2); m_x87_tw = READ16(ea + 4); } x87_check_exceptions(); CYCLES((m_cr[0] & 1) ? 34 : 44); } void x87_fstenv(UINT8 modrm) { UINT32 ea = GetEA(modrm, 1); // TODO: Pointers and selectors switch((m_cr[0] & 1)|(m_operand_size & 1)<<1) { case 0: // 16-bit real mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); // WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 10, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4); break; case 1: // 16-bit protected mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); // WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 10, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4); break; case 2: // 32-bit real mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 4, m_x87_sw); WRITE16(ea + 8, m_x87_tw); // WRITE16(ea + 12, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 20, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE32(ea + 24, (m_fpu_data_ptr >> 16) << 12); break; case 3: // 32-bit protected mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 4, m_x87_sw); WRITE16(ea + 8, m_x87_tw); // WRITE32(ea + 12, m_fpu_inst_ptr); // WRITE32(ea + 16, m_fpu_opcode); // WRITE32(ea + 20, m_fpu_data_ptr); // WRITE32(ea + 24, m_fpu_inst_ptr); break; } CYCLES((m_cr[0] & 1) ? 56 : 67); } void x87_fsave(UINT8 modrm) { UINT32 ea = GetEA(modrm, 1); // TODO: Pointers and selectors switch((m_cr[0] & 1)|(m_operand_size & 1)<<1) { case 0: // 16-bit real mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); // WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 10, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4); ea += 14; break; case 1: // 16-bit protected mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 2, m_x87_sw); WRITE16(ea + 4, m_x87_tw); // WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 10, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4); ea += 14; break; case 2: // 32-bit real mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 4, m_x87_sw); WRITE16(ea + 8, m_x87_tw); // WRITE16(ea + 12, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 20, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE32(ea + 24, (m_fpu_data_ptr >> 16) << 12); ea += 28; break; case 3: // 32-bit protected mode WRITE16(ea + 0, m_x87_cw); WRITE16(ea + 4, m_x87_sw); WRITE16(ea + 8, m_x87_tw); // WRITE32(ea + 12, m_fpu_inst_ptr); // WRITE32(ea + 16, m_fpu_opcode); // WRITE32(ea + 20, m_fpu_data_ptr); // WRITE32(ea + 24, m_fpu_inst_ptr); ea += 28; break; } for (int i = 0; i < 8; ++i) x87_write_stack(i, READ80(ea + i*10), FALSE); CYCLES((m_cr[0] & 1) ? 56 : 67); } void x87_frstor(UINT8 modrm) { UINT32 ea = GetEA(modrm, 0); // TODO: Pointers and selectors switch((m_cr[0] & 1)|(m_operand_size & 1)<<1) { case 0: // 16-bit real mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 2); m_x87_tw = READ16(ea + 4); // WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 10, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4); ea += 14; break; case 1: // 16-bit protected mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 2); m_x87_tw = READ16(ea + 4); // WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 10, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4); ea += 14; break; case 2: // 32-bit real mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 4); m_x87_tw = READ16(ea + 8); // WRITE16(ea + 12, m_fpu_inst_ptr & 0xffff); // WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE16(ea + 20, m_fpu_data_ptr & 0xffff); // WRITE16(ea + 12, ((m_fpu_inst_ptr & 0x0f0000) >> 4)); // WRITE32(ea + 24, (m_fpu_data_ptr >> 16) << 12); ea += 28; break; case 3: // 32-bit protected mode x87_write_cw(READ16(ea)); m_x87_sw = READ16(ea + 4); m_x87_tw = READ16(ea + 8); // WRITE32(ea + 12, m_fpu_inst_ptr); // WRITE32(ea + 16, m_fpu_opcode); // WRITE32(ea + 20, m_fpu_data_ptr); // WRITE32(ea + 24, m_fpu_inst_ptr); ea += 28; break; } for (int i = 0; i < 8; ++i) WRITE80(ea + i*10, ST(i)); CYCLES((m_cr[0] & 1) ? 34 : 44); } void x87_fxch(UINT8 modrm) { if (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1)) x87_set_stack_underflow(); if (x87_check_exceptions()) { floatx80 tmp = ST(0); ST(0) = ST(1); ST(1) = tmp; // Swap the tags int tag0 = X87_TAG(ST_TO_PHYS(0)); x87_set_tag(ST_TO_PHYS(0), X87_TAG(ST_TO_PHYS(1))); x87_set_tag(ST_TO_PHYS(1), tag0); } CYCLES(4); } void x87_fxch_sti(UINT8 modrm) { int i = modrm & 7; if (X87_IS_ST_EMPTY(0)) { ST(0) = fx80_inan; x87_set_tag(ST_TO_PHYS(0), X87_TW_SPECIAL); x87_set_stack_underflow(); } if (X87_IS_ST_EMPTY(i)) { ST(i) = fx80_inan; x87_set_tag(ST_TO_PHYS(i), X87_TW_SPECIAL); x87_set_stack_underflow(); } if (x87_check_exceptions()) { floatx80 tmp = ST(0); ST(0) = ST(i); ST(i) = tmp; // Swap the tags int tag0 = X87_TAG(ST_TO_PHYS(0)); x87_set_tag(ST_TO_PHYS(0), X87_TAG(ST_TO_PHYS(i))); x87_set_tag(ST_TO_PHYS(i), tag0); } CYCLES(4); } void x87_fstsw_ax(UINT8 modrm) { REG16(AX) = m_x87_sw; CYCLES(3); } void x87_fstsw_m2byte(UINT8 modrm) { UINT32 ea = GetEA(modrm, 1); WRITE16(ea, m_x87_sw); CYCLES(3); } void x87_invalid(UINT8 modrm) { // TODO fatalerror("x87 invalid instruction (PC:%.4x)\n", m_pc); } /************************************* * * Instruction dispatch * *************************************/ static void I386OP(x87_group_d8)() { UINT8 modrm = FETCH(); m_opcode_table_x87_d8[modrm](modrm); } static void I386OP(x87_group_d9)() { UINT8 modrm = FETCH(); m_opcode_table_x87_d9[modrm](modrm); } static void I386OP(x87_group_da)() { UINT8 modrm = FETCH(); m_opcode_table_x87_da[modrm](modrm); } static void I386OP(x87_group_db)() { UINT8 modrm = FETCH(); m_opcode_table_x87_db[modrm](modrm); } static void I386OP(x87_group_dc)() { UINT8 modrm = FETCH(); m_opcode_table_x87_dc[modrm](modrm); } static void I386OP(x87_group_dd)() { UINT8 modrm = FETCH(); m_opcode_table_x87_dd[modrm](modrm); } static void I386OP(x87_group_de)() { UINT8 modrm = FETCH(); m_opcode_table_x87_de[modrm](modrm); } static void I386OP(x87_group_df)() { UINT8 modrm = FETCH(); m_opcode_table_x87_df[modrm](modrm); } /************************************* * * Opcode table building * *************************************/ void build_x87_opcode_table_d8() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fadd_m32real; break; case 0x01: ptr = x87_fmul_m32real; break; case 0x02: ptr = x87_fcom_m32real; break; case 0x03: ptr = x87_fcomp_m32real; break; case 0x04: ptr = x87_fsub_m32real; break; case 0x05: ptr = x87_fsubr_m32real; break; case 0x06: ptr = x87_fdiv_m32real; break; case 0x07: ptr = x87_fdivr_m32real; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fadd_st_sti; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmul_st_sti; break; case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fcom_sti; break; case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fcomp_sti; break; case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsub_st_sti; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsubr_st_sti; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdiv_st_sti; break; case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdivr_st_sti; break; } } m_opcode_table_x87_d8[modrm] = ptr; } } void build_x87_opcode_table_d9() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fld_m32real; break; case 0x02: ptr = x87_fst_m32real; break; case 0x03: ptr = x87_fstp_m32real; break; case 0x04: ptr = x87_fldenv; break; case 0x05: ptr = x87_fldcw; break; case 0x06: ptr = x87_fstenv; break; case 0x07: ptr = x87_fstcw; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fld_sti; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fxch_sti; break; case 0xd0: ptr = x87_fnop; break; case 0xe0: ptr = x87_fchs; break; case 0xe1: ptr = x87_fabs; break; case 0xe4: ptr = x87_ftst; break; case 0xe5: ptr = x87_fxam; break; case 0xe8: ptr = x87_fld1; break; case 0xe9: ptr = x87_fldl2t; break; case 0xea: ptr = x87_fldl2e; break; case 0xeb: ptr = x87_fldpi; break; case 0xec: ptr = x87_fldlg2; break; case 0xed: ptr = x87_fldln2; break; case 0xee: ptr = x87_fldz; break; case 0xf0: ptr = x87_f2xm1; break; case 0xf1: ptr = x87_fyl2x; break; case 0xf2: ptr = x87_fptan; break; case 0xf3: ptr = x87_fpatan; break; case 0xf4: ptr = x87_fxtract; break; case 0xf5: ptr = x87_fprem1; break; case 0xf6: ptr = x87_fdecstp; break; case 0xf7: ptr = x87_fincstp; break; case 0xf8: ptr = x87_fprem; break; case 0xf9: ptr = x87_fyl2xp1; break; case 0xfa: ptr = x87_fsqrt; break; case 0xfb: ptr = x87_fsincos; break; case 0xfc: ptr = x87_frndint; break; case 0xfd: ptr = x87_fscale; break; case 0xfe: ptr = x87_fsin; break; case 0xff: ptr = x87_fcos; break; } } m_opcode_table_x87_d9[modrm] = ptr; } } void build_x87_opcode_table_da() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fiadd_m32int; break; case 0x01: ptr = x87_fimul_m32int; break; case 0x02: ptr = x87_ficom_m32int; break; case 0x03: ptr = x87_ficomp_m32int; break; case 0x04: ptr = x87_fisub_m32int; break; case 0x05: ptr = x87_fisubr_m32int; break; case 0x06: ptr = x87_fidiv_m32int; break; case 0x07: ptr = x87_fidivr_m32int; break; } } else { switch (modrm) { case 0xe9: ptr = x87_fucompp; break; } } m_opcode_table_x87_da[modrm] = ptr; } } void build_x87_opcode_table_db() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fild_m32int; break; case 0x02: ptr = x87_fist_m32int; break; case 0x03: ptr = x87_fistp_m32int; break; case 0x05: ptr = x87_fld_m80real; break; case 0x07: ptr = x87_fstp_m80real; break; } } else { switch (modrm) { case 0xe0: ptr = x87_fnop; break; /* FENI */ case 0xe1: ptr = x87_fnop; break; /* FDISI */ case 0xe2: ptr = x87_fclex; break; case 0xe3: ptr = x87_finit; break; case 0xe4: ptr = x87_fnop; break; /* FSETPM */ } } m_opcode_table_x87_db[modrm] = ptr; } } void build_x87_opcode_table_dc() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fadd_m64real; break; case 0x01: ptr = x87_fmul_m64real; break; case 0x02: ptr = x87_fcom_m64real; break; case 0x03: ptr = x87_fcomp_m64real; break; case 0x04: ptr = x87_fsub_m64real; break; case 0x05: ptr = x87_fsubr_m64real; break; case 0x06: ptr = x87_fdiv_m64real; break; case 0x07: ptr = x87_fdivr_m64real; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fadd_sti_st; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmul_sti_st; break; case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsubr_sti_st; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsub_sti_st; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdivr_sti_st; break; case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdiv_sti_st; break; } } m_opcode_table_x87_dc[modrm] = ptr; } } void build_x87_opcode_table_dd() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fld_m64real; break; case 0x02: ptr = x87_fst_m64real; break; case 0x03: ptr = x87_fstp_m64real; break; case 0x04: ptr = x87_frstor; break; case 0x06: ptr = x87_fsave; break; case 0x07: ptr = x87_fstsw_m2byte; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_ffree; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fxch_sti; break; case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fst_sti; break; case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fstp_sti; break; case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fucom_sti; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fucomp_sti; break; } } m_opcode_table_x87_dd[modrm] = ptr; } } void build_x87_opcode_table_de() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fiadd_m16int; break; case 0x01: ptr = x87_fimul_m16int; break; case 0x02: ptr = x87_ficom_m16int; break; case 0x03: ptr = x87_ficomp_m16int; break; case 0x04: ptr = x87_fisub_m16int; break; case 0x05: ptr = x87_fisubr_m16int; break; case 0x06: ptr = x87_fidiv_m16int; break; case 0x07: ptr = x87_fidivr_m16int; break; } } else { switch (modrm) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_faddp; break; case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmulp; break; case 0xd9: ptr = x87_fcompp; break; case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsubrp; break; case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsubp; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdivrp; break; case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdivp; break; } } m_opcode_table_x87_de[modrm] = ptr; } } void build_x87_opcode_table_df() { int modrm = 0; for (modrm = 0; modrm < 0x100; ++modrm) { void (*ptr)(UINT8 modrm) = x87_invalid; if (modrm < 0xc0) { switch ((modrm >> 3) & 0x7) { case 0x00: ptr = x87_fild_m16int; break; case 0x02: ptr = x87_fist_m16int; break; case 0x03: ptr = x87_fistp_m16int; break; case 0x04: ptr = x87_fbld; break; case 0x05: ptr = x87_fild_m64int; break; case 0x06: ptr = x87_fbstp; break; case 0x07: ptr = x87_fistp_m64int; break; } } else { switch (modrm) { case 0xe0: ptr = x87_fstsw_ax; break; case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fcomip_sti; break; } } m_opcode_table_x87_df[modrm] = ptr; } } void build_x87_opcode_table() { build_x87_opcode_table_d8(); build_x87_opcode_table_d9(); build_x87_opcode_table_da(); build_x87_opcode_table_db(); build_x87_opcode_table_dc(); build_x87_opcode_table_dd(); build_x87_opcode_table_de(); build_x87_opcode_table_df(); } ================================================ FILE: vm86/mame/emu/cpu/i86/ea.h ================================================ 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; } static 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; } static 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; } static 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; } static unsigned EA_004() { m_eo=m_regs.w[SI]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; } static unsigned EA_005() { m_eo=m_regs.w[DI]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; } static unsigned EA_006() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; } static unsigned EA_007() { m_eo=m_regs.w[BX]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static 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; } static unsigned (*const GetEA[192])()={ EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007, EA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107, EA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107, EA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107, EA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107, EA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107, EA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107, EA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107, EA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207, EA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207 }; ================================================ FILE: vm86/mame/emu/cpu/i86/host.h ================================================ /*****************************************************************************/ /* host dependent types */ /*#define BIGCASE*/ typedef UINT8 BOOLEAN; typedef UINT8 BYTE; typedef UINT16 WORD; typedef UINT32 DWORD; ================================================ FILE: vm86/mame/emu/cpu/i86/i286.c ================================================ /**************************************************************************** * real mode i286 emulator v1.4 by Fabrice Frances * * (initial work based on David Hedley's pcemu) * ****************************************************************************/ //#include "emu.h" //#include "debugger.h" //#include "host.h" #define VERBOSE 0 #define LOG(x) do { if (VERBOSE) mame_printf_debug x; } while (0) /* All post-i286 CPUs have a 16MB address space */ #define AMASK m_amask #define INPUT_LINE_A20 1 //#include "i286.h" #define TRAP(fault, code) (UINT32)(((fault&0xffff)<<16)|(code&0xffff)) //#include "i86time.c" /***************************************************************************/ /* cpu state */ /***************************************************************************/ /* I86 registers */ union i80286basicregs { /* eight general registers */ UINT16 w[8]; /* viewed as 16 bits registers */ UINT8 b[16]; /* or as 8 bit registers */ }; //struct i80286_state //{ i80286basicregs m_regs; UINT32 m_amask; /* address mask */ UINT32 m_pc; UINT32 m_prevpc; UINT16 m_flags; UINT16 m_msw; UINT32 m_base[4]; UINT16 m_sregs[4]; UINT16 m_limit[4]; UINT8 m_rights[4]; bool m_valid[4]; struct { UINT32 base; UINT16 limit; } m_gdtr, m_idtr; struct { UINT16 sel; UINT32 base; UINT16 limit; UINT8 rights; } m_ldtr, m_tr; INT32 m_AuxVal, m_OverVal, m_SignVal, m_ZeroVal, m_CarryVal, m_DirVal; /* 0 or non-0 valued flags */ UINT8 m_ParityVal; UINT8 m_TF, m_IF; /* 0 or 1 valued flags */ INT8 m_nmi_state; INT8 m_irq_state; INT8 m_test_state; int m_halted; /* Is the CPU halted ? */ int m_trap_level; char m_seg_prefix; UINT8 m_prefix_seg; unsigned m_ea; UINT16 m_eo; /* HJB 12/13/98 effective offset of the address (before segment is added) */ UINT8 m_ea_seg; /* effective segment of the address */ //}; #define INT_IRQ 0x01 #define NMI_IRQ 0x02 static UINT8 parity_table[256]; //static struct i80x86_timing timing; /***************************************************************************/ #define I80286 #include "i86priv.h" #define PREFIX(fname) i80286##fname #define PREFIX86(fname) i80286##fname #define PREFIX186(fname) i80286##fname #define PREFIX286(fname) i80286##fname #define i8086_state i80286_state #include "ea.h" #include "modrm286.h" #include "instr86.h" #include "instr186.h" #include "instr286.h" #include "table286.h" #include "instr86.c" #include "instr186.c" #include "instr286.c" static void i80286_urinit(void) { unsigned int i,j,c; static const BREGS reg_name[8]={ AL, CL, DL, BL, AH, CH, DH, BH }; for (i = 0;i < 256; i++) { for (j = i, c = 0; j > 0; j >>= 1) if (j & 1) c++; parity_table[i] = !(c & 1); } for (i = 0; i < 256; i++) { Mod_RM.reg.b[i] = reg_name[(i & 0x38) >> 3]; Mod_RM.reg.w[i] = (WREGS) ( (i & 0x38) >> 3) ; } for (i = 0xc0; i < 0x100; i++) { Mod_RM.RM.w[i] = (WREGS)( i & 7 ); Mod_RM.RM.b[i] = (BREGS)reg_name[i & 7]; } } static void i80286_set_a20_line(int state) { m_amask = state ? 0x00ffffff : 0x000fffff; } static CPU_RESET( i80286 ) { memset(&m_regs, 0, sizeof(i80286basicregs)); m_sregs[CS] = 0xf000; m_base[CS] = 0xff0000; m_pc = 0xfffff0; m_limit[CS]=m_limit[SS]=m_limit[DS]=m_limit[ES]=0xffff; m_sregs[DS]=m_sregs[SS]=m_sregs[ES]=0; m_base[DS]=m_base[SS]=m_base[ES]=0; m_rights[DS]=m_rights[SS]=m_rights[ES]=0x93; m_rights[CS]=0x9a; m_valid[CS]=m_valid[SS]=m_valid[DS]=m_valid[ES]=1; m_msw=0xfff0; m_flags=2; ExpandFlags(m_flags); m_idtr.base=0;m_idtr.limit=0x3ff; m_gdtr.base=m_ldtr.base=m_tr.base=0; m_gdtr.limit=m_ldtr.limit=m_tr.limit=0; m_ldtr.rights=m_tr.rights=0; m_ldtr.sel=m_tr.sel=0; m_seg_prefix = FALSE; CHANGE_PC(m_pc); m_halted = 0; } /****************************************************************************/ /* ASG 971222 -- added these interface functions */ static void set_irq_line(int irqline, int state) { if (state != CLEAR_LINE && m_halted) { m_halted = 0; } try { if (irqline == INPUT_LINE_NMI) { if (m_nmi_state == state) return; m_nmi_state = state; /* on a rising edge, signal the NMI */ if (state != CLEAR_LINE) i80286_interrupt_descriptor(I8086_NMI_INT_VECTOR, 2, -1); } else { m_irq_state = state; /* if the IF is set, signal an interrupt */ if (state != CLEAR_LINE && m_IF) { i80286_interrupt_descriptor(pic_ack(), 2, -1); m_irq_state = CLEAR_LINE; } } } catch (UINT32 e) { i80286_trap2(e); } } static CPU_EXECUTE( i80286 ) { // if (m_halted) // { // return; // } /* run until we're out */ // while(m_icount>0) // { m_seg_prefix=FALSE; try { if (PM && ((m_pc-m_base[CS]) > m_limit[CS])) throw TRAP(GENERAL_PROTECTION_FAULT, m_sregs[CS] & ~3); m_prevpc = m_pc; TABLE286 // call instruction } catch (UINT32 e) { i80286_trap2(e); } // } } extern int i386_dasm_one(char *buffer, UINT32 eip, const UINT8 *oprom, int mode); static CPU_DISASSEMBLE( i80286 ) { return i386_dasm_one(buffer, m_pc, oprom, 2); } static CPU_INIT( i80286 ) { /* If a reset parameter is given, take it as pointer to an address mask */ m_amask = 0x00ffff; i80286_urinit(); } #undef I80286 ================================================ FILE: vm86/mame/emu/cpu/i86/i286.h ================================================ /* ASG 971222 -- rewrote this interface */ #pragma once #ifndef __I286INTF_H__ #define __I286INTF_H__ #include "i86.h" enum { I286_PC = 0, /* 8-bit registers */ I286_AL, I286_AH, I286_BL, I286_BH, I286_CL, I286_CH, I286_DL, I286_DH, /* 16-bit registers */ I286_AX, I286_BX, I286_CX, I286_DX, I286_BP, I286_SP, I286_SI, I286_DI, I286_IP, /* segment registers */ I286_CS, I286_CS_BASE, I286_CS_LIMIT, I286_CS_FLAGS, I286_SS, I286_SS_BASE, I286_SS_LIMIT, I286_SS_FLAGS, I286_DS, I286_DS_BASE, I286_DS_LIMIT, I286_DS_FLAGS, I286_ES, I286_ES_BASE, I286_ES_LIMIT, I286_ES_FLAGS, /* other */ I286_FLAGS, I286_MSW, I286_GDTR_BASE, I286_GDTR_LIMIT, I286_IDTR_BASE, I286_IDTR_LIMIT, I286_TR, I286_TR_BASE, I286_TR_LIMIT, I286_TR_FLAGS, I286_LDTR, I286_LDTR_BASE, I286_LDTR_LIMIT, I286_LDTR_FLAGS, }; #define TRAP(fault, code) (UINT32)(((fault&0xffff)<<16)|(code&0xffff)) /* Public functions */ DECLARE_LEGACY_CPU_DEVICE(I80286, i80286); #endif /* __I286INTF_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i86/i86.c ================================================ /**************************************************************************** * real mode i286 emulator v1.4 by Fabrice Frances * * (initial work based on David Hedley's pcemu) * ****************************************************************************/ /* 26.March 2000 PeT changed set_irq_line */ //#include "emu.h" //#include "debugger.h" //#include "host.h" #include "i86priv.h" //#include "i86.h" extern int i386_dasm_one(char *buffer, UINT32 eip, const UINT8 *oprom, int mode); #define VERBOSE 0 #define LOG(x) do { if (VERBOSE) mame_printf_debug x; } while (0) /* All pre-i286 CPUs have a 1MB address space */ #define AMASK 0xfffff #define AMASK UINT_MAX /* I86 registers */ union i8086basicregs { /* eight general registers */ UINT16 w[8]; /* viewed as 16 bits registers */ UINT8 b[16]; /* or as 8 bit registers */ }; //struct i8086_state //{ i8086basicregs m_regs; UINT32 m_pc; UINT32 m_prevpc; UINT32 m_base[4]; UINT16 m_sregs[4]; UINT16 m_flags; INT32 m_AuxVal, m_OverVal, m_SignVal, m_ZeroVal, m_CarryVal, m_DirVal; /* 0 or non-0 valued flags */ UINT8 m_ParityVal; UINT8 m_TF, m_IF; /* 0 or 1 valued flags */ UINT8 m_MF; /* V30 mode flag */ UINT8 m_int_vector; INT8 m_nmi_state; INT8 m_irq_state; INT8 m_test_state; int m_halted; /* Is the CPU halted ? */ UINT16 m_ip; UINT32 m_sp; char m_seg_prefix; /* prefix segment indicator */ UINT8 m_prefix_seg; /* The prefixed segment */ unsigned m_ea; UINT16 m_eo; /* HJB 12/13/98 effective offset of the address (before segment is added) */ UINT8 m_ea_seg; /* effective segment of the address */ //}; //#include "i86time.c" /***************************************************************************/ /* cpu state */ /***************************************************************************/ //static struct i80x86_timing timing; static UINT8 parity_table[256]; /* The interrupt number of a pending external interrupt pending NMI is 2. */ /* For INTR interrupts, the level is caught on the bus during an INTA cycle */ #define PREFIX(name) i8086##name #define PREFIX86(name) i8086##name #define I8086 #include "instr86.h" #include "ea.h" #include "modrm.h" #include "table86.h" #include "instr86.c" #undef I8086 /***************************************************************************/ static CPU_INIT( i8086 ) { unsigned int i, j, c; static const BREGS reg_name[8] = {AL, CL, DL, BL, AH, CH, DH, BH}; for (i = 0; i < 256; i++) { for (j = i, c = 0; j > 0; j >>= 1) if (j & 1) c++; parity_table[i] = !(c & 1); } for (i = 0; i < 256; i++) { Mod_RM.reg.b[i] = reg_name[(i & 0x38) >> 3]; Mod_RM.reg.w[i] = (WREGS) ((i & 0x38) >> 3); } for (i = 0xc0; i < 0x100; i++) { Mod_RM.RM.w[i] = (WREGS) (i & 7); Mod_RM.RM.b[i] = (BREGS) reg_name[i & 7]; } } static CPU_INIT( i8088 ) { CPU_INIT_CALL(i8086); } static CPU_INIT( i80186 ) { CPU_INIT_CALL(i8086); } static CPU_RESET( i8086 ) { memset(&m_regs, 0, sizeof(m_regs)); memset(m_base, 0, sizeof(m_base)); memset(m_sregs, 0, sizeof(m_sregs)); m_flags = 0; m_int_vector = 0; m_nmi_state = 0; m_irq_state = 0; m_test_state = 0; m_halted = 0; m_ip = 0; m_sp = 0; m_seg_prefix = 0; m_prefix_seg = 0; m_ea = 0; m_eo = 0; m_ea_seg = 0; m_sregs[CS] = 0xffff; m_base[CS] = SegBase(CS); m_pc = 0xffff0 & AMASK; ExpandFlags(m_flags); m_halted = 0; } static CPU_RESET( i8088 ) { CPU_INIT_CALL(i8086); } static CPU_RESET( i80186 ) { CPU_INIT_CALL(i8086); } /* ASG 971222 -- added these interface functions */ static void set_irq_line(int irqline, int state) { if (state != CLEAR_LINE && m_halted) { m_halted = 0; } if (irqline == INPUT_LINE_NMI) { if (m_nmi_state == state) return; m_nmi_state = state; /* on a rising edge, signal the NMI */ if (state != CLEAR_LINE) { PREFIX(_interrupt)(I8086_NMI_INT_VECTOR); } } else { m_irq_state = state; /* if the IF is set, signal an interrupt */ if (state != CLEAR_LINE && m_IF) { PREFIX(_interrupt)((UINT32)-1); m_irq_state = CLEAR_LINE; } } } static void set_drq_line(int irqline, int state) { // TODO implement me } static void set_tmrin_line(int irqline, int state) { // TODO implement me } /* PJB 03/05 */ static void set_test_line(int state) { m_test_state = !state; } static CPU_EXECUTE( i8086 ) { if (m_halted) { return; } m_seg_prefix = FALSE; m_prevpc = m_pc; TABLE86; } static CPU_DISASSEMBLE( i8086 ) { return i386_dasm_one(buffer, m_pc, oprom, 1); } //#include "i86.h" #undef PREFIX #define PREFIX(name) i80186##name #define PREFIX186(name) i80186##name #define I80186 #include "instr186.h" #include "table186.h" #include "instr86.c" #include "instr186.c" #undef I80186 static CPU_EXECUTE( i80186 ) { if (m_halted) { return; } m_seg_prefix = FALSE; m_prevpc = m_pc; TABLE186; } ================================================ FILE: vm86/mame/emu/cpu/i86/i86.h ================================================ /* ASG 971222 -- rewrote this interface */ #pragma once #ifndef __I86INTF_H__ #define __I86INTF_H__ #define INPUT_LINE_INT0 INPUT_LINE_IRQ0 #define INPUT_LINE_INT1 INPUT_LINE_IRQ1 #define INPUT_LINE_INT2 INPUT_LINE_IRQ2 #define INPUT_LINE_INT3 INPUT_LINE_IRQ3 #define INPUT_LINE_TEST 20 /* PJB 03/05 */ #define INPUT_LINE_DRQ0 21 #define INPUT_LINE_DRQ1 22 #define INPUT_LINE_TMRIN0 23 #define INPUT_LINE_TMRIN1 24 struct i80186_interface { devcb_write_line out_tmrout0_func; devcb_write_line out_tmrout1_func; }; #define I80186_INTERFACE(name) const i80186_interface (name) = enum { I8086_IP, I8086_AX, I8086_CX, I8086_DX, I8086_BX, I8086_SP, I8086_BP, I8086_SI, I8086_DI, I8086_AL, I8086_CL, I8086_DL, I8086_BL, I8086_AH, I8086_CH, I8086_DH, I8086_BH, I8086_FLAGS, I8086_ES, I8086_CS, I8086_SS, I8086_DS, I8086_VECTOR, I8086_GENPC = STATE_GENPC, I8086_GENSP = STATE_GENSP, I8086_GENPCBASE = STATE_GENPCBASE }; /* Public functions */ DECLARE_LEGACY_CPU_DEVICE(I8086, i8086); DECLARE_LEGACY_CPU_DEVICE(I8088, i8088); DECLARE_LEGACY_CPU_DEVICE(I80186, i80186); DECLARE_LEGACY_CPU_DEVICE(I80188, i80188); #endif /* __I86INTF_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i86/i86.txt ================================================ intel 8086 and compatibles -------------------------- this info is here, to list and give some remarks on all 8086 compatible processors excellent info in Hamarsoft's 86BUGS list (also distributed in ralf browns interrupt list) 8086/8088 --------- 20 bit address bus, 16 bit data bus and registers many 8080 assembler sources should be compilable/reusable 8086 ---- 6 bytes prefetch queue 8088 ---- 8086 with 8 bit data bus, prefetch queue only 4 byte, and refilled when 1 byte empty early 8086/8088 revisions bug ----------------------------- (copyright 1978 on package) mov sreg, doesnot disable until next operation is executed 8086/8088 --------- "mov cs, " causes unconditional jump! 80C86/80C88 ----------- "mov cs, " ignored 80186/80188 ----------- integrated pic8259, pit8253, dma8253 (but not at standard pc addresses) additional instructions "mov cs, " ? shift count anded with 0x1f 80188 ----- 8bit data bus NEC series ---------- 80186 instruction set, additional nec instructions although it is based on 80186 instruction set, some behaviours follow 8086 8080 emulation mode "mov cs, " ignored shift count not anded (acts like 8086) NEC 70116 (V30) --------------- 8086 pin compatible NEC 70108 (V20) --------------- 8088 pinout NEC V30MX --------- on die ems hardware 24 bit address but for ems memory!? no 8080 emulation mode NEC V40 ------- pinout, integrated peripherals as 80186 NEC V50 ------- pinout, integrated peripherals as 80188 NEC V33? -------- speed optimized V30? NEC V25/V35? ------------ NEC V25+/V35+? -------------- NEC V60/V70 ----------- risc (misc/delux) like instruction set v30? emulation mode (without 8080 emulation mode) 80286 ----- 80186 with additional instructions 24 bit address bus, protected mode 80386 and later --------------- not covered here 8087/80287/80387/80387sx ------------------------ mathematical coprocessors weitek, iit variants in 80486 coprocessor integrated (except 80486sx and several clones) 80487: 80486 with other pinout ================================================ FILE: vm86/mame/emu/cpu/i86/i86priv.h ================================================ /****************************************************************************/ /* real mode i286 emulator by Fabrice Frances */ /* (initial work based on David Hedley's pcemu) */ /* */ /****************************************************************************/ #pragma once #ifndef __I86_H__ #define __I86_H__ #define I8086_NMI_INT_VECTOR 2 enum SREGS { ES, CS, SS, DS }; enum WREGS { AX, CX, DX, BX, SP, BP, SI, DI }; #ifndef FALSE #define FALSE 0 #define TRUE 1 #endif enum BREGS { AL = NATIVE_ENDIAN_VALUE_LE_BE(0x0, 0x1), AH = NATIVE_ENDIAN_VALUE_LE_BE(0x1, 0x0), CL = NATIVE_ENDIAN_VALUE_LE_BE(0x2, 0x3), CH = NATIVE_ENDIAN_VALUE_LE_BE(0x3, 0x2), DL = NATIVE_ENDIAN_VALUE_LE_BE(0x4, 0x5), DH = NATIVE_ENDIAN_VALUE_LE_BE(0x5, 0x4), BL = NATIVE_ENDIAN_VALUE_LE_BE(0x6, 0x7), BH = NATIVE_ENDIAN_VALUE_LE_BE(0x7, 0x6), SPL = NATIVE_ENDIAN_VALUE_LE_BE(0x8, 0x9), SPH = NATIVE_ENDIAN_VALUE_LE_BE(0x9, 0x8), BPL = NATIVE_ENDIAN_VALUE_LE_BE(0xa, 0xb), BPH = NATIVE_ENDIAN_VALUE_LE_BE(0xb, 0xa), SIL = NATIVE_ENDIAN_VALUE_LE_BE(0xc, 0xd), SIH = NATIVE_ENDIAN_VALUE_LE_BE(0xd, 0xc), DIL = NATIVE_ENDIAN_VALUE_LE_BE(0xe, 0xf), DIH = NATIVE_ENDIAN_VALUE_LE_BE(0xf, 0xe) }; /* parameter x = result, y = source 1, z = source 2 */ #define SetTF(x) (m_TF = (x)) #define SetIF(x) (m_IF = (x)) #define SetDF(x) (m_DirVal = (x) ? -1 : 1) #define SetOFW_Add(x,y,z) (m_OverVal = ((x) ^ (y)) & ((x) ^ (z)) & 0x8000) #define SetOFB_Add(x,y,z) (m_OverVal = ((x) ^ (y)) & ((x) ^ (z)) & 0x80) #define SetOFW_Sub(x,y,z) (m_OverVal = ((z) ^ (y)) & ((z) ^ (x)) & 0x8000) #define SetOFB_Sub(x,y,z) (m_OverVal = ((z) ^ (y)) & ((z) ^ (x)) & 0x80) #define SetCFB(x) (m_CarryVal = (x) & 0x100) #define SetCFW(x) (m_CarryVal = (x) & 0x10000) #define SetAF(x,y,z) (m_AuxVal = ((x) ^ ((y) ^ (z))) & 0x10) #define SetSF(x) (m_SignVal = (x)) #define SetZF(x) (m_ZeroVal = (x)) #define SetPF(x) (m_ParityVal = (x)) #define SetSZPF_Byte(x) (m_ParityVal = m_SignVal = m_ZeroVal = (INT8)(x)) #define SetSZPF_Word(x) (m_ParityVal = m_SignVal = m_ZeroVal = (INT16)(x)) #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; } #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; } #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; } #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; } // don't modify CF in case fault occurs #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; } #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; } #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; } #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; } #define ORB(dst,src) dst |= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Byte(dst) #define ORW(dst,src) dst |= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Word(dst) #define ANDB(dst,src) dst &= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Byte(dst) #define ANDW(dst,src) dst &= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Word(dst) #define XORB(dst,src) dst ^= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Byte(dst) #define XORW(dst,src) dst ^= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Word(dst) #define CF (int)(m_CarryVal != 0) #define SF (int)(m_SignVal < 0) #define ZF (int)(m_ZeroVal == 0) #define PF parity_table[m_ParityVal&0xff] #define AF (int)(m_AuxVal != 0) #define OF (int)(m_OverVal != 0) #define DF (int)(m_DirVal < 0) /************************************************************************/ #define read_mem_byte(a) read_byte(a) #define read_mem_word(a) read_word_unaligned(a) #define write_mem_byte(a,d) write_byte((a),(d)) #define write_mem_word(a,d) write_word_unaligned((a),(d)) #define read_port_byte(a) read_io_byte(a) #define read_port_word(a) read_io_word_unaligned(a) #define write_port_byte(a,d) write_io_byte((a),(d)) #define write_port_word(a,d) write_io_word_unaligned((a),(d)) /************************************************************************/ #define SegBase(Seg) (m_sregs[Seg] << 4) #define DefaultSeg(Seg) ((m_seg_prefix && (Seg == DS || Seg == SS)) ? m_prefix_seg : Seg) #define DefaultBase(Seg) ((m_seg_prefix && (Seg == DS || Seg == SS)) ? m_base[m_prefix_seg] : m_base[Seg]) #ifdef I80286 #define GetMemB(Seg,Off) (read_mem_byte(GetMemAddr(Seg,Off,1,I80286_READ))) #define GetMemW(Seg,Off) (read_mem_word(GetMemAddr(Seg,Off,2,I80286_READ))) #define PutMemB(Seg,Off,x) write_mem_byte(GetMemAddr(Seg,Off,1,I80286_WRITE), (x)) #define PutMemW(Seg,Off,x) write_mem_word(GetMemAddr(Seg,Off,2,I80286_WRITE), (x)) #else #define GetMemB(Seg,Off) (read_mem_byte((DefaultBase(Seg) + (Off)) & AMASK)) #define GetMemW(Seg,Off) (read_mem_word((DefaultBase(Seg) + (Off)) & AMASK)) #define PutMemB(Seg,Off,x) write_mem_byte((DefaultBase(Seg) + (Off)) & AMASK, (x)) #define PutMemW(Seg,Off,x) write_mem_word((DefaultBase(Seg) + (Off)) & AMASK, (x)) #endif #define PEEKBYTE(ea) (read_mem_byte((ea) & AMASK)) #define ReadByte(ea) (read_mem_byte((ea) & AMASK)) #define ReadWord(ea) (read_mem_word((ea) & AMASK)) #define WriteByte(ea,val) write_mem_byte((ea) & AMASK, val); #define WriteWord(ea,val) write_mem_word((ea) & AMASK, val); #define FETCH (read_raw_byte(m_pc++)) #define FETCHOP (read_decrypted_byte(m_pc++)) #define PEEKOP(addr) (read_decrypted_byte(addr)) #define FETCHWORD(var) { var = read_raw_byte(m_pc); var += (read_raw_byte(m_pc + 1) << 8); m_pc += 2; } #define CHANGE_PC(addr) #ifdef I80286 #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); } #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)); } #else #define PUSH(val) { m_regs.w[SP] -= 2; WriteWord(((m_base[SS] + m_regs.w[SP]) & AMASK), val); } #define POP(var) { m_regs.w[SP] += 2; var = ReadWord(((m_base[SS] + ((m_regs.w[SP]-2) & 0xffff)) & AMASK)); } #endif /************************************************************************/ #ifdef I80286 #define IOPL ((m_flags&0x3000)>>12) #define NT ((m_flags&0x4000)>>14) #define xF (0) #else #define IOPL (3) #define NT (1) #define xF (1) #endif #define CompressFlags() (WORD)(CF | 2 |(PF << 2) | (AF << 4) | (ZF << 6) \ | (SF << 7) | (m_TF << 8) | (m_IF << 9) \ | (DF << 10) | (OF << 11) | (IOPL << 12) | (NT << 14) | (xF << 15)) #define ExpandFlags(f) \ { \ m_CarryVal = (f) & 1; \ m_ParityVal = !((f) & 4); \ m_AuxVal = (f) & 16; \ m_ZeroVal = !((f) & 64); \ m_SignVal = ((f) & 128) ? -1 : 0; \ m_TF = ((f) & 256) >> 8; \ m_IF = ((f) & 512) >> 9; \ m_DirVal = ((f) & 1024) ? -1 : 1; \ m_OverVal = (f) & 2048; \ } #endif /* __I86_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i86/i86time.c ================================================ /**************************************************************************** * real mode i286 emulator v1.4 by Fabrice Frances * * (initial work based on David Hedley's pcemu) * ****************************************************************************/ struct i80x86_timing { int id; UINT8 exception, iret; /* exception, IRET */ UINT8 int3, int_imm, into_nt, into_t; /* INTs */ UINT8 override; /* segment overrides */ UINT8 flag_ops, lahf, sahf; /* flag operations */ UINT8 aaa, aas, aam, aad; /* arithmetic adjusts */ UINT8 daa, das; /* decimal adjusts */ UINT8 cbw, cwd; /* sign extension */ UINT8 hlt, load_ptr, lea, nop, wait, xlat; /* misc */ UINT8 jmp_short, jmp_near, jmp_far; /* direct JMPs */ UINT8 jmp_r16, jmp_m16, jmp_m32; /* indirect JMPs */ UINT8 call_near, call_far; /* direct CALLs */ UINT8 call_r16, call_m16, call_m32; /* indirect CALLs */ UINT8 ret_near, ret_far, ret_near_imm, ret_far_imm; /* returns */ UINT8 jcc_nt, jcc_t, jcxz_nt, jcxz_t; /* conditional JMPs */ UINT8 loop_nt, loop_t, loope_nt, loope_t; /* loops */ UINT8 in_imm8, in_imm16, in_dx8, in_dx16; /* port reads */ UINT8 out_imm8, out_imm16, out_dx8, out_dx16; /* port writes */ UINT8 mov_rr8, mov_rm8, mov_mr8; /* move, 8-bit */ UINT8 mov_ri8, mov_mi8; /* move, 8-bit immediate */ UINT8 mov_rr16, mov_rm16, mov_mr16; /* move, 16-bit */ UINT8 mov_ri16, mov_mi16; /* move, 16-bit immediate */ UINT8 mov_am8, mov_am16, mov_ma8, mov_ma16; /* move, AL/AX memory */ UINT8 mov_sr, mov_sm, mov_rs, mov_ms; /* move, segment registers */ UINT8 xchg_rr8, xchg_rm8; /* exchange, 8-bit */ UINT8 xchg_rr16, xchg_rm16, xchg_ar16; /* exchange, 16-bit */ UINT8 push_r16, push_m16, push_seg, pushf; /* pushes */ UINT8 pop_r16, pop_m16, pop_seg, popf; /* pops */ UINT8 alu_rr8, alu_rm8, alu_mr8; /* ALU ops, 8-bit */ UINT8 alu_ri8, alu_mi8, alu_mi8_ro; /* ALU ops, 8-bit immediate */ UINT8 alu_rr16, alu_rm16, alu_mr16; /* ALU ops, 16-bit */ UINT8 alu_ri16, alu_mi16, alu_mi16_ro; /* ALU ops, 16-bit immediate */ UINT8 alu_r16i8, alu_m16i8, alu_m16i8_ro; /* ALU ops, 16-bit w/8-bit immediate */ UINT8 mul_r8, mul_r16, mul_m8, mul_m16; /* MUL */ UINT8 imul_r8, imul_r16, imul_m8, imul_m16; /* IMUL */ UINT8 div_r8, div_r16, div_m8, div_m16; /* DIV */ UINT8 idiv_r8, idiv_r16, idiv_m8, idiv_m16; /* IDIV */ UINT8 incdec_r8, incdec_r16, incdec_m8, incdec_m16; /* INC/DEC */ UINT8 negnot_r8, negnot_r16, negnot_m8, negnot_m16; /* NEG/NOT */ UINT8 rot_reg_1, rot_reg_base, rot_reg_bit; /* reg shift/rotate */ UINT8 rot_m8_1, rot_m8_base, rot_m8_bit; /* m8 shift/rotate */ UINT8 rot_m16_1, rot_m16_base, rot_m16_bit; /* m16 shift/rotate */ UINT8 cmps8, rep_cmps8_base, rep_cmps8_count; /* CMPS 8-bit */ UINT8 cmps16, rep_cmps16_base, rep_cmps16_count; /* CMPS 16-bit */ UINT8 scas8, rep_scas8_base, rep_scas8_count; /* SCAS 8-bit */ UINT8 scas16, rep_scas16_base, rep_scas16_count; /* SCAS 16-bit */ UINT8 lods8, rep_lods8_base, rep_lods8_count; /* LODS 8-bit */ UINT8 lods16, rep_lods16_base, rep_lods16_count; /* LODS 16-bit */ UINT8 stos8, rep_stos8_base, rep_stos8_count; /* STOS 8-bit */ UINT8 stos16, rep_stos16_base, rep_stos16_count; /* STOS 16-bit */ UINT8 movs8, rep_movs8_base, rep_movs8_count; /* MOVS 8-bit */ UINT8 movs16, rep_movs16_base, rep_movs16_count; /* MOVS 16-bit */ void * check1; /* marker to make sure we line up */ UINT8 ins8, rep_ins8_base, rep_ins8_count; /* (80186) INS 8-bit */ UINT8 ins16, rep_ins16_base, rep_ins16_count; /* (80186) INS 16-bit */ UINT8 outs8, rep_outs8_base, rep_outs8_count; /* (80186) OUTS 8-bit */ UINT8 outs16, rep_outs16_base, rep_outs16_count; /* (80186) OUTS 16-bit */ UINT8 push_imm, pusha, popa; /* (80186) PUSH immediate, PUSHA/POPA */ UINT8 imul_rri8, imul_rmi8; /* (80186) IMUL immediate 8-bit */ UINT8 imul_rri16, imul_rmi16; /* (80186) IMUL immediate 16-bit */ UINT8 enter0, enter1, enter_base, enter_count, leave; /* (80186) ENTER/LEAVE */ UINT8 bound; /* (80186) BOUND */ void * check2; /* marker to make sure we line up */ }; /* these come from the 8088 timings in OPCODE.LST, but with the penalty for 16-bit memory accesses removed wherever possible */ static const struct i80x86_timing i8086_cycles = { 8086, 51,32, /* exception, IRET */ 2, 0, 4, 2, /* INTs */ 2, /* segment overrides */ 2, 4, 4, /* flag operations */ 4, 4,83,60, /* arithmetic adjusts */ 4, 4, /* decimal adjusts */ 2, 5, /* sign extension */ 2,24, 2, 2, 3,11, /* misc */ 15,15,15, /* direct JMPs */ 11,18,24, /* indirect JMPs */ 19,28, /* direct CALLs */ 16,21,37, /* indirect CALLs */ 20,32,24,31, /* returns */ 4,16, 6,18, /* conditional JMPs */ 5,17, 6,18, /* loops */ 10,14, 8,12, /* port reads */ 10,14, 8,12, /* port writes */ 2, 8, 9, /* move, 8-bit */ 4,10, /* move, 8-bit immediate */ 2, 8, 9, /* move, 16-bit */ 4,10, /* move, 16-bit immediate */ 10,10,10,10, /* move, AL/AX memory */ 2, 8, 2, 9, /* move, segment registers */ 4,17, /* exchange, 8-bit */ 4,17, 3, /* exchange, 16-bit */ 15,24,14,14, /* pushes */ 12,25,12,12, /* pops */ 3, 9,16, /* ALU ops, 8-bit */ 4,17,10, /* ALU ops, 8-bit immediate */ 3, 9,16, /* ALU ops, 16-bit */ 4,17,10, /* ALU ops, 16-bit immediate */ 4,17,10, /* ALU ops, 16-bit w/8-bit immediate */ 70,118,76,128, /* MUL */ 80,128,86,138, /* IMUL */ 80,144,86,154, /* DIV */ 101,165,107,175,/* IDIV */ 3, 2,15,15, /* INC/DEC */ 3, 3,16,16, /* NEG/NOT */ 2, 8, 4, /* reg shift/rotate */ 15,20, 4, /* m8 shift/rotate */ 15,20, 4, /* m16 shift/rotate */ 22, 9,21, /* CMPS 8-bit */ 22, 9,21, /* CMPS 16-bit */ 15, 9,14, /* SCAS 8-bit */ 15, 9,14, /* SCAS 16-bit */ 12, 9,11, /* LODS 8-bit */ 12, 9,11, /* LODS 16-bit */ 11, 9,10, /* STOS 8-bit */ 11, 9,10, /* STOS 16-bit */ 18, 9,17, /* MOVS 8-bit */ 18, 9,17, /* MOVS 16-bit */ (void *)-1 /* marker to make sure we line up */ }; /* these come from the Intel 80186 datasheet */ static const struct i80x86_timing i80186_cycles = { 80186, 45,28, /* exception, IRET */ 0, 2, 4, 3, /* INTs */ 2, /* segment overrides */ 2, 2, 3, /* flag operations */ 8, 7,19,15, /* arithmetic adjusts */ 4, 4, /* decimal adjusts */ 2, 4, /* sign extension */ 2,18, 6, 2, 6,11, /* misc */ 14,14,14, /* direct JMPs */ 11,17,26, /* indirect JMPs */ 15,23, /* direct CALLs */ 13,19,38, /* indirect CALLs */ 16,22,18,25, /* returns */ 4,13, 5,15, /* conditional JMPs */ 6,16, 6,16, /* loops */ 10,10, 8, 8, /* port reads */ 9, 9, 7, 7, /* port writes */ 2, 9,12, /* move, 8-bit */ 3,12, /* move, 8-bit immediate */ 2, 9,12, /* move, 16-bit */ 4,13, /* move, 16-bit immediate */ 8, 8, 9, 9, /* move, AL/AX memory */ 2,11, 2,11, /* move, segment registers */ 4,17, /* exchange, 8-bit */ 4,17, 3, /* exchange, 16-bit */ 10,16, 9, 9, /* pushes */ 10,20, 8, 8, /* pops */ 3,10,10, /* ALU ops, 8-bit */ 4,16,10, /* ALU ops, 8-bit immediate */ 3,10,10, /* ALU ops, 16-bit */ 4,16,10, /* ALU ops, 16-bit immediate */ 4,16,10, /* ALU ops, 16-bit w/8-bit immediate */ 26,35,32,41, /* MUL */ 25,34,31,40, /* IMUL */ 29,38,35,44, /* DIV */ 44,53,50,59, /* IDIV */ 3, 3,15,15, /* INC/DEC */ 3, 3,10,10, /* NEG/NOT */ 2, 5, 1, /* reg shift/rotate */ 15,17, 1, /* m8 shift/rotate */ 15,17, 1, /* m16 shift/rotate */ 22, 5,22, /* CMPS 8-bit */ 22, 5,22, /* CMPS 16-bit */ 15, 5,15, /* SCAS 8-bit */ 15, 5,15, /* SCAS 16-bit */ 12, 6,11, /* LODS 8-bit */ 12, 6,11, /* LODS 16-bit */ 10, 6, 9, /* STOS 8-bit */ 10, 6, 9, /* STOS 16-bit */ 14, 8, 8, /* MOVS 8-bit */ 14, 8, 8, /* MOVS 16-bit */ (void *)-1, /* marker to make sure we line up */ 14, 8, 8, /* (80186) INS 8-bit */ 14, 8, 8, /* (80186) INS 16-bit */ 14, 8, 8, /* (80186) OUTS 8-bit */ 14, 8, 8, /* (80186) OUTS 16-bit */ 14,68,83, /* (80186) PUSH immediate, PUSHA/POPA */ 22,29, /* (80186) IMUL immediate 8-bit */ 25,32, /* (80186) IMUL immediate 16-bit */ 15,25,4,16, 8, /* (80186) ENTER/LEAVE */ 33, /* (80186) BOUND */ (void *)-1 /* marker to make sure we line up */ }; /* these come from the 80286 timings in OPCODE.LST */ /* many of these numbers are suspect */ static const struct i80x86_timing i80286_cycles = { 80286, 23,17, /* exception, IRET */ 0, 2, 3, 1, /* INTs */ 2, /* segment overrides */ 2, 2, 2, /* flag operations */ 3, 3,16,14, /* arithmetic adjusts */ 3, 3, /* decimal adjusts */ 2, 2, /* sign extension */ 2, 7, 3, 3, 3, 5, /* misc */ 7, 7,11, /* direct JMPs */ 7,11,26, /* indirect JMPs */ 7,13, /* direct CALLs */ 7,11,29, /* indirect CALLs */ 11,15,11,15, /* returns */ 3, 7, 4, 8, /* conditional JMPs */ 4, 8, 4, 8, /* loops */ 5, 5, 5, 5, /* port reads */ 3, 3, 3, 3, /* port writes */ 2, 3, 3, /* move, 8-bit */ 2, 3, /* move, 8-bit immediate */ 2, 3, 3, /* move, 16-bit */ 2, 3, /* move, 16-bit immediate */ 5, 5, 3, 3, /* move, AL/AX memory */ 2, 5, 2, 3, /* move, segment registers */ 3, 5, /* exchange, 8-bit */ 3, 5, 3, /* exchange, 16-bit */ 5, 5, 3, 3, /* pushes */ 5, 5, 5, 5, /* pops */ 2, 7, 7, /* ALU ops, 8-bit */ 3, 7, 7, /* ALU ops, 8-bit immediate */ 2, 7, 7, /* ALU ops, 16-bit */ 3, 7, 7, /* ALU ops, 16-bit immediate */ 3, 7, 7, /* ALU ops, 16-bit w/8-bit immediate */ 13,21,16,24, /* MUL */ 13,21,16,24, /* IMUL */ 14,22,17,25, /* DIV */ 17,25,20,28, /* IDIV */ 2, 2, 7, 7, /* INC/DEC */ 2, 2, 7, 7, /* NEG/NOT */ 2, 5, 1, /* reg shift/rotate */ 7, 8, 1, /* m8 shift/rotate */ 7, 8, 1, /* m16 shift/rotate */ 13, 5,12, /* CMPS 8-bit */ 13, 5,12, /* CMPS 16-bit */ 9, 5, 8, /* SCAS 8-bit */ 9, 5, 8, /* SCAS 16-bit */ 5, 5, 4, /* LODS 8-bit */ 5, 5, 4, /* LODS 16-bit */ 4, 4, 3, /* STOS 8-bit */ 4, 4, 3, /* STOS 16-bit */ 5, 5, 4, /* MOVS 8-bit */ 5, 5, 4, /* MOVS 16-bit */ (void *)-1, /* marker to make sure we line up */ 5, 5, 4, /* (80186) INS 8-bit */ 5, 5, 4, /* (80186) INS 16-bit */ 5, 5, 4, /* (80186) OUTS 8-bit */ 5, 5, 4, /* (80186) OUTS 16-bit */ 3,17,19, /* (80186) PUSH immediate, PUSHA/POPA */ 21,24, /* (80186) IMUL immediate 8-bit */ 21,24, /* (80186) IMUL immediate 16-bit */ 11,15,12, 4, 5, /* (80186) ENTER/LEAVE */ 13, /* (80186) BOUND */ (void *)-1 /* marker to make sure we line up */ }; ================================================ FILE: vm86/mame/emu/cpu/i86/instr186.c ================================================ /**************************************************************************** * real mode i286 emulator v1.4 by Fabrice Frances * * (initial work based on David Hedley's pcemu) * ****************************************************************************/ // file will be included in all cpu variants // function renaming will be added when necessary // timing value should move to separate array static void PREFIX186(_pusha)() /* Opcode 0x60 */ { unsigned tmp=m_regs.w[SP]; #ifdef I80286 if(PM) i80286_check_permission(SS, m_regs.w[SP]-16, 16, I80286_WRITE); #endif PUSH(m_regs.w[AX]); PUSH(m_regs.w[CX]); PUSH(m_regs.w[DX]); PUSH(m_regs.w[BX]); PUSH(tmp); PUSH(m_regs.w[BP]); PUSH(m_regs.w[SI]); PUSH(m_regs.w[DI]); } static unsigned i186_popa_tmp; // hack around GCC 4.6 error because we need the side effects of POP static void PREFIX186(_popa)() /* Opcode 0x61 */ { #ifdef I80286 if(PM) i80286_check_permission(SS, m_regs.w[SP], 16, I80286_READ); #endif POP(m_regs.w[DI]); POP(m_regs.w[SI]); POP(m_regs.w[BP]); POP(i186_popa_tmp); POP(m_regs.w[BX]); POP(m_regs.w[DX]); POP(m_regs.w[CX]); POP(m_regs.w[AX]); } static void PREFIX186(_bound)() /* Opcode 0x62 */ { unsigned ModRM = FETCHOP; int low = (INT16)GetRMWord(ModRM); int high= (INT16)GetnextRMWord; int tmp= (INT16)RegWord(ModRM); if (tmphigh) { m_pc-= ( m_seg_prefix ? 3 : 2 ); PREFIX86(_interrupt)(5); } } static void PREFIX186(_push_d16)() /* Opcode 0x68 */ { unsigned tmp = FETCH; tmp += FETCH << 8; PUSH(tmp); } static void PREFIX186(_imul_d16)() /* Opcode 0x69 */ { DEF_r16w(dst,src); unsigned src2=FETCH; src2+=(FETCH<<8); dst = (INT32)((INT16)src)*(INT32)((INT16)src2); m_CarryVal = m_OverVal = (((INT32)dst) >> 15 != 0) && (((INT32)dst) >> 15 != -1); RegWord(ModRM)=(WORD)dst; } static void PREFIX186(_push_d8)() /* Opcode 0x6a */ { unsigned tmp = (WORD)((INT16)((INT8)FETCH)); PUSH(tmp); } static void PREFIX186(_imul_d8)() /* Opcode 0x6b */ { DEF_r16w(dst,src); unsigned src2= (WORD)((INT16)((INT8)FETCH)); dst = (INT32)((INT16)src)*(INT32)((INT16)src2); m_CarryVal = m_OverVal = (((INT32)dst) >> 15 != 0) && (((INT32)dst) >> 15 != -1); RegWord(ModRM)=(WORD)dst; } static void PREFIX186(_insb)() /* Opcode 0x6c */ { #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif PutMemB(ES,m_regs.w[DI],read_port_byte(m_regs.w[DX])); m_regs.w[DI] += m_DirVal; } static void PREFIX186(_insw)() /* Opcode 0x6d */ { #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif PutMemW(ES,m_regs.w[DI],read_port_word(m_regs.w[DX])); m_regs.w[DI] += 2 * m_DirVal; } static void PREFIX186(_outsb)() /* Opcode 0x6e */ { #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif write_port_byte(m_regs.w[DX],GetMemB(DS,m_regs.w[SI])); m_regs.w[SI] += m_DirVal; /* GOL 11/27/01 */ } static void PREFIX186(_outsw)() /* Opcode 0x6f */ { #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif write_port_word(m_regs.w[DX],GetMemW(DS,m_regs.w[SI])); m_regs.w[SI] += 2 * m_DirVal; /* GOL 11/27/01 */ } static void PREFIX186(_rotshft_bd8)() /* Opcode 0xc0 */ { unsigned ModRM = FETCH; unsigned src = GetRMByte(ModRM); unsigned count = FETCH; PREFIX86(_rotate_shift_Byte)(ModRM,count & 0x1f,src); } static void PREFIX186(_rotshft_wd8)() /* Opcode 0xc1 */ { unsigned ModRM = FETCH; unsigned src = GetRMWord(ModRM); unsigned count = FETCH; PREFIX86(_rotate_shift_Word)(ModRM,count & 0x1f,src); } static void PREFIX186(_enter)() /* Opcode 0xc8 */ { unsigned nb = FETCH; unsigned i,level; UINT16 fp; nb += FETCH << 8; #ifdef I80286 level = FETCH & 0x1f; if(PM) i80286_check_permission(SS, m_regs.w[SP]-2-(level*2), 2+(level*2), I80286_WRITE); #else level = FETCH; #endif PUSH(m_regs.w[BP]); fp = m_regs.w[SP]; for (i=1;i>8)&0xff) #define ACCESS(r) (r&1) #define SET_ACC(desc) (desc[2]|=0x100) #define RW(r) ((r>>1)&1) #define READ(r) ((r>>1)&1) #define CONF(r) ((r>>2)&1) #define EXPDOWN(r) ((r>>2)&1) #define CODE(r) ((r>>3)&1) #define SEGDESC(r) ((r>>4)&1) #define DPL(r) ((r>>5)&3) #define PRES(r) ((r>>7)&1) #define GATE(r) (r&31) #define GATESEL(desc) (desc[1]) #define GATEOFF(desc) (desc[0]) #define GATECNT(desc) (desc[2]&31) #define RPL(s) (s&3) #define IDX(s) (s&(~7)) #define IDXTBL(s) (s&(~3)) #define TBL(s) (s&4) #define TSSDESCIDLE 1 #define LDTDESC 2 #define TSSDESCBUSY 3 #define CALLGATE 4 #define TASKGATE 5 #define INTGATE 6 #define TRAPGATE 7 #define TSS_BACK 0 #define TSS_SP0 1 #define TSS_SS0 2 #define TSS_SP1 3 #define TSS_SS1 4 #define TSS_SP2 5 #define TSS_SS2 6 #define TSS_IP 7 #define TSS_FLAG 8 #define TSS_AX 9 #define TSS_CX 10 #define TSS_DX 11 #define TSS_BX 12 #define TSS_SP 13 #define TSS_BP 14 #define TSS_SI 15 #define TSS_DI 16 #define TSS_ES 17 #define TSS_CS 18 #define TSS_SS 19 #define TSS_DS 20 #define TSS_LDT 21 #define PMAX(a,b) ((a> 16; if(error_code == 0xffff) error_code = -1; m_pc = m_prevpc; try { switch(number) { case DIVIDE_BY_ZERO: case INVALID_TSS: case SEG_NOT_PRESENT: case STACK_FAULT: case GENERAL_PROTECTION_FAULT: m_trap_level++; if(m_trap_level == 2) throw TRAP(DOUBLE_FAULT,0); if(m_trap_level == 3) break; i80286_interrupt_descriptor(number,1,error_code); break; case DOUBLE_FAULT: i80286_interrupt_descriptor(number,1,0); break; default: i80286_interrupt_descriptor(number,1,-1); } } catch(UINT32 e) { i80286_trap2(e); } if(m_trap_level == 3) // this is supposed to triggered by support hardware // create a shutdown output line that causes a reset // NMI can wake processor without reset CPU_RESET_CALL(CPU_MODEL); m_trap_level = 0; } static UINT32 i80286_selector_address(UINT16 sel) { UINT32 base; UINT16 limit; if(TBL(sel)) { base = m_ldtr.base; limit = m_ldtr.limit; } else { base = m_gdtr.base; limit = m_gdtr.limit; } return ((IDX(sel)>=limit)||!IDXTBL(sel)?-1:base+IDX(sel)); } static int i80286_verify(UINT16 selector, i80286_operation operation, UINT8 rights, bool valid) { if (!IDXTBL(selector) && !valid) return GENERAL_PROTECTION_FAULT; if (!SEGDESC(rights)) return GENERAL_PROTECTION_FAULT; switch(operation) { case I80286_READ: if (CODE(rights) && !READ(rights)) return GENERAL_PROTECTION_FAULT; break; case I80286_WRITE: if (CODE(rights) || !RW(rights)) return GENERAL_PROTECTION_FAULT; break; case I80286_EXECUTE: if (!CODE(rights)) return GENERAL_PROTECTION_FAULT; break; } return 0; } static void i80286_pop_seg(int reg) { UINT16 sel; if(PM) i80286_check_permission(SS, m_regs.w[SP], I80286_WORD, I80286_READ); sel = ReadWord(m_base[SS]+m_regs.w[SP]); i80286_data_descriptor(reg, sel); m_regs.w[SP] += 2; } static void i80286_data_descriptor_full(int reg, UINT16 selector, int cpl, UINT32 trap, UINT16 offset, int size) { if (PM) { UINT16 desc[3]; UINT8 r; UINT32 addr; /* selector format 15..3 number/address in descriptor table 2: 0 global, 1 local descriptor table 1,0: requested privileg level must be higher or same as current privileg level in code selector */ if ((reg != SS) && !IDXTBL(selector)) { m_sregs[reg]=0; m_limit[reg]=0; m_base[reg]=0; m_rights[reg]=0; m_valid[reg]=0; return; } if ((addr = i80286_selector_address(selector)) == -1) throw trap; desc[0] = ReadWord(addr); desc[1] = ReadWord(addr+2); desc[2] = ReadWord(addr+4); r = RIGHTS(desc); if (!SEGDESC(r)) throw trap; if (reg == SS) { if (!IDXTBL(selector)) throw trap; if (DPL(r)!=cpl) throw trap; if (RPL(selector)!=cpl) throw trap; if (!RW(r) || CODE(r)) throw trap; if (!PRES(r)) throw TRAP(STACK_FAULT,(IDXTBL(selector)+(trap&1))); } else { if ((DPL(r) < PMAX(cpl,RPL(selector))) && (!CODE(r) || (CODE(r) && !CONF(r)))) throw trap; if (CODE(r) && !READ(r)) throw trap; if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,(IDXTBL(selector)+(trap&1))); } if (offset+size) { if ((CODE(r) || !EXPDOWN(r)) && ((offset+size-1) > LIMIT(desc))) throw (reg==SS)?TRAP(STACK_FAULT,(trap&1)):trap; if (!CODE(r) && EXPDOWN(r) && ((offset <= LIMIT(desc)) || ((offset+size-1) > 0xffff))) throw (reg==SS)?TRAP(STACK_FAULT,(trap&1)):trap; } SET_ACC(desc); WriteWord(addr+4, desc[2]); m_sregs[reg]=selector; m_limit[reg]=LIMIT(desc); m_base[reg]=BASE(desc); m_rights[reg]=RIGHTS(desc); } else { m_sregs[reg]=selector; m_base[reg]=selector<<4; } m_valid[reg]=1; } static void i80286_data_descriptor(int reg, UINT16 selector) { i80286_data_descriptor_full(reg, selector, CPL, TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)), 0, 0); } static void i80286_switch_task(UINT16 ntask, int type) { UINT16 ndesc[3], desc[3], ntss[22], otss[22]; UINT8 r, lr; UINT32 naddr, oaddr, ldtaddr; int i; logerror("This program uses TSSs, how rare. Please report this to the developers.\n"); if (TBL(ntask)) throw TRAP(INVALID_TSS,IDXTBL(ntask)); if ((naddr = i80286_selector_address(ntask)) == -1) throw TRAP(INVALID_TSS,IDXTBL(ntask)); oaddr = i80286_selector_address(m_tr.sel); ndesc[0] = ReadWord(naddr); ndesc[1] = ReadWord(naddr+2); ndesc[2] = ReadWord(naddr+4); desc[2] = ReadWord(oaddr+4); r = RIGHTS(ndesc); if (SEGDESC(r) || ((GATE(r) & ~2) != TSSDESCIDLE)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(ntask)); if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT, IDXTBL(ntask)); if (LIMIT(ndesc) < 43) throw TRAP(INVALID_TSS,IDXTBL(ntask)); for (i = 0; i < 44; i+=2) ntss[i/2] = ReadWord(BASE(ndesc)+i); m_flags = CompressFlags(); if (type == CALL) WriteWord(BASE(ndesc)+TSS_BACK*2, m_tr.sel); if (type == IRET) m_flags &= ~0x4000; otss[TSS_IP] = m_pc-m_base[CS]; otss[TSS_FLAG] = m_flags; otss[TSS_AX] = m_regs.w[AX]; otss[TSS_CX] = m_regs.w[CX]; otss[TSS_DX] = m_regs.w[DX]; otss[TSS_BX] = m_regs.w[BX]; otss[TSS_SP] = m_regs.w[SP]; otss[TSS_BP] = m_regs.w[BP]; otss[TSS_SI] = m_regs.w[SI]; otss[TSS_DI] = m_regs.w[DI]; otss[TSS_ES] = m_sregs[ES]; otss[TSS_CS] = m_sregs[CS]; otss[TSS_SS] = m_sregs[SS]; otss[TSS_DS] = m_sregs[DS]; otss[TSS_LDT] = m_ldtr.sel; for (i = 14; i < 44; i+=2) WriteWord(m_tr.base+i, otss[i/2]); // jmp does both if (type != CALL) { desc[2] &= ~0x200; // mark idle WriteWord(oaddr+4, desc[2]); } if (type != IRET) { ndesc[2] |= 0x200; WriteWord(naddr+4, ndesc[2]); } m_tr.sel=ntask; m_tr.limit=LIMIT(ndesc); m_tr.base=BASE(ndesc); m_tr.rights=RIGHTS(ndesc); m_flags = ntss[TSS_FLAG]; m_regs.w[AX] = ntss[TSS_AX]; m_regs.w[CX] = ntss[TSS_CX]; m_regs.w[DX] = ntss[TSS_DX]; m_regs.w[BX] = ntss[TSS_BX]; m_regs.w[SP] = ntss[TSS_SP]; m_regs.w[BP] = ntss[TSS_BP]; m_regs.w[SI] = ntss[TSS_SI]; m_regs.w[DI] = ntss[TSS_DI]; if (TBL(ntss[TSS_LDT])) throw TRAP(INVALID_TSS,IDXTBL(ntss[TSS_LDT])); if (IDXTBL(ntss[TSS_LDT])) { if ((ldtaddr = i80286_selector_address(ntss[TSS_LDT])) == -1) throw TRAP(INVALID_TSS,IDXTBL(ntss[TSS_LDT])); desc[0] = ReadWord(ldtaddr); desc[1] = ReadWord(ldtaddr+2); desc[2] = ReadWord(ldtaddr+4); lr = RIGHTS(desc); if (SEGDESC(lr) || (GATE(lr) != LDTDESC)) throw TRAP(INVALID_TSS,IDXTBL(ntss[TSS_LDT])); if (!PRES(lr)) throw TRAP(INVALID_TSS,IDXTBL(ntss[TSS_LDT])); m_ldtr.sel=ntss[TSS_LDT]; m_ldtr.limit=LIMIT(desc); m_ldtr.base=BASE(desc); m_ldtr.rights=RIGHTS(desc); } else { m_ldtr.sel=0; m_ldtr.limit=0; m_ldtr.base=0; m_ldtr.rights=0; } if (type == CALL) m_flags |= 0x4000; m_msw |= 8; i80286_data_descriptor_full(SS, ntss[TSS_SS], RPL(ntss[TSS_CS]), TRAP(INVALID_TSS,IDXTBL(ntss[TSS_SS])), 0, 0); m_sregs[CS] = IDXTBL(m_sregs[CS]) | RPL(ntss[TSS_CS]); // fixme try { i80286_code_descriptor(ntss[TSS_CS], ntss[TSS_IP], 0); } catch(UINT32 e) { int error_code = e & 0xffff; if(error_code == GENERAL_PROTECTION_FAULT) e = TRAP(INVALID_TSS,(e >> 16)); // #NP fault is correct throw e; } i80286_data_descriptor_full(ES, ntss[TSS_ES], RPL(ntss[TSS_CS]), TRAP(INVALID_TSS,IDXTBL(ntss[TSS_ES])), 0, 0); i80286_data_descriptor_full(DS, ntss[TSS_DS], RPL(ntss[TSS_CS]), TRAP(INVALID_TSS,IDXTBL(ntss[TSS_DS])), 0, 0); } static void i80286_code_descriptor(UINT16 selector, UINT16 offset, int gate) { if (PM) { UINT16 desc[3]; UINT8 r; UINT32 addr; /* selector format 15..3 number/address in descriptor table 2: 0 global, 1 local descriptor table 1,0: requested privileg level must be higher or same as current privileg level in code selector */ if ((addr = i80286_selector_address(selector)) == -1) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); desc[0] = ReadWord(addr); desc[1] = ReadWord(addr+2); desc[2] = ReadWord(addr+4); r = RIGHTS(desc); if (SEGDESC(r)) { if (!CODE(r)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); if (CONF(r)) { if(DPL(r)>CPL) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); } else if ((RPL(selector)>CPL) || (DPL(r)!=CPL)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(selector)); // this order is important if (offset > LIMIT(desc)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); SET_ACC(desc); WriteWord(addr+4, desc[2]); m_sregs[CS]=IDXTBL(selector) | CPL; m_limit[CS]=LIMIT(desc); m_base[CS]=BASE(desc); m_rights[CS]=RIGHTS(desc); m_pc=m_base[CS]+offset; } else { // systemdescriptor UINT16 gatedesc[3]={0,0,0}; UINT16 gatesel = GATESEL(desc); if (!gate) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); // tss cs must be segment if (DPL(r) < PMAX(CPL,RPL(selector))) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT, IDXTBL(selector)); switch (GATE(r)) { case CALLGATE: if ((addr = i80286_selector_address(gatesel)) == -1) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(gatesel)); gatedesc[0] = ReadWord(addr); gatedesc[1] = ReadWord(addr+2); gatedesc[2] = ReadWord(addr+4); r = RIGHTS(gatedesc); if (!CODE(r) || !SEGDESC(r)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(gatesel)); if (DPL(r)>CPL) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(gatesel)); if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(gatesel)); if (GATEOFF(desc) > LIMIT(gatedesc)) throw TRAP(GENERAL_PROTECTION_FAULT,0); if (!CONF(r)&&(DPL(r)= 0; i--) PUSH(ReadWord(oldstk+(i*2))); } else i80286_check_permission(SS, m_regs.w[SP]-4, 4, I80286_READ); SET_ACC(gatedesc); WriteWord(addr+4, gatedesc[2]); m_sregs[CS]=IDXTBL(gatesel) | DPL(r); m_limit[CS]=LIMIT(gatedesc); m_base[CS]=BASE(gatedesc); m_rights[CS]=RIGHTS(gatedesc); m_pc=(m_base[CS]+GATEOFF(desc))&AMASK; break; case TASKGATE: selector = gatesel; if ((addr = i80286_selector_address(selector)) == -1) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); desc[2] = ReadWord(addr+4); r = RIGHTS(desc); if (SEGDESC(r) || (GATE(r) != TSSDESCIDLE)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); case TSSDESCIDLE: i80286_switch_task(selector, gate); i80286_load_flags(m_flags, CPL); break; default: throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); } } } else { m_sregs[CS]=selector; m_base[CS]=selector<<4; m_rights[CS]=0x9a; m_limit[CS]=0xffff; m_pc=(m_base[CS]+offset)&AMASK; } } static void i80286_interrupt_descriptor(UINT16 number, int hwint, int error) { UINT16 desc[3], gatedesc[3]={0,0,0}, gatesel; UINT8 r; UINT32 addr; if(!PM) return PREFIX86(_interrupt)(number); if ((number<<3)>=m_idtr.limit) throw TRAP(GENERAL_PROTECTION_FAULT,(number*8+2+(hwint&&1))); desc[0] = ReadWord(m_idtr.base+(number<<3)); desc[1] = ReadWord(m_idtr.base+(number<<3)+2); desc[2] = ReadWord(m_idtr.base+(number<<3)+4); r = RIGHTS(desc); if (!hwint && (DPL(r)CPL) throw TRAP(GENERAL_PROTECTION_FAULT,(IDXTBL(gatesel)+(hwint&&1))); if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,(IDXTBL(gatesel)+(hwint&&1))); if (GATEOFF(desc) > LIMIT(gatedesc)) throw TRAP(GENERAL_PROTECTION_FAULT,(int)(hwint&&1)); if (!CONF(r)&&(DPL(r)=m_gdtr.limit) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel)); addr = m_gdtr.base + IDX(sel); desc[0] = ReadWord(addr); desc[1] = ReadWord(addr+2); desc[2] = ReadWord(addr+4); r = RIGHTS(desc); if (SEGDESC(r) || (GATE(r) != LDTDESC)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel)); if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(sel)); } else { desc[0] = 0; desc[1] = 0; desc[2] = 0; } m_ldtr.sel=sel; m_ldtr.limit=LIMIT(desc); m_ldtr.base=BASE(desc); m_ldtr.rights=RIGHTS(desc); break; case 0x18: /* ltr */ if (CPL!=0) throw TRAP(GENERAL_PROTECTION_FAULT,0); sel=GetRMWord(ModRM); if ((addr = i80286_selector_address(sel)) == -1) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel)); desc[0] = ReadWord(addr); desc[1] = ReadWord(addr+2); desc[2] = ReadWord(addr+4); r = RIGHTS(desc); if (SEGDESC(r) || (GATE(r) != TSSDESCIDLE)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel)); if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(sel)); desc[2] |= 0x200; // mark busy WriteWord(addr+4, desc[2]); m_tr.sel=sel; m_tr.limit=LIMIT(desc); m_tr.base=BASE(desc); m_tr.rights=RIGHTS(desc); break; case 0x20: /* verr */ tmp=GetRMWord(ModRM); if ((addr = i80286_selector_address(tmp)) == -1) m_ZeroVal = 1; else { desc[2] = ReadWord(addr+4); r = RIGHTS(desc); m_ZeroVal = i80286_verify(tmp, I80286_READ, RIGHTS(desc), 0); m_ZeroVal = m_ZeroVal || (CODE(r) && CONF(r) ? 0 : (DPL(r)>16); break; case 8: /* sidt */ PutRMWord(ModRM,m_idtr.limit); PutRMWordOffset(2,m_idtr.base&0xffff); PutRMWordOffset(4,0xff00|m_idtr.base>>16); break; case 0x10: /* lgdt */ if (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0); m_gdtr.limit=GetRMWord(ModRM); m_gdtr.base=GetRMWordOffset(2)|(GetRMByteOffset(4)<<16); break; case 0x18: /* lidt */ if (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0); m_idtr.limit=GetRMWord(ModRM); m_idtr.base=GetRMWordOffset(2)|(GetRMByteOffset(4)<<16); break; case 0x20: /* smsw */ PutRMWord(ModRM, m_msw); break; case 0x30: /* lmsw */ if (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0); msw = GetRMWord(ModRM); if (!PM&&(msw&1)) m_sregs[CS] = IDX(m_sregs[CS]); // cheat and set cpl to 0 m_msw=(m_msw&1)|msw; break; default: throw TRAP(ILLEGAL_INSTRUCTION,-1); } break; case 2: /* LAR */ if (!PM) throw TRAP(ILLEGAL_INSTRUCTION,-1); ModRM = FETCHOP; tmp=GetRMWord(ModRM); if ((addr = i80286_selector_address(tmp)) == -1) m_ZeroVal = 1; else { desc[2] = ReadWord(addr+4); r = RIGHTS(desc); if (DPL(r)>=PMAX(RPL(tmp),CPL) || (SEGDESC(r) && CODE(r) && CONF(r))) { m_ZeroVal = 0; // rights are expected to be in upper byte RegWord(ModRM) = r << 8; } else m_ZeroVal = 1; } break; case 3: /* LSL */ if (!PM) throw TRAP(ILLEGAL_INSTRUCTION,-1); ModRM = FETCHOP; tmp=GetRMWord(ModRM); if ((addr = i80286_selector_address(tmp)) == -1) m_ZeroVal = 1; else { desc[2] = ReadWord(addr+4); r = RIGHTS(desc); if (!SEGDESC(r) && (GATE(r) >= CALLGATE)) m_ZeroVal = 1; // not valid for gates else if (DPL(r)>=PMAX(RPL(tmp),CPL) || (SEGDESC(r) && CODE(r) && CONF(r))) { m_ZeroVal = 0; RegWord(ModRM) = ReadWord(addr); } else m_ZeroVal = 1; } break; case 5: /* loadall */ if (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0); m_msw = (m_msw&1)|ReadWord(0x806); m_tr.sel = ReadWord(0x816); tmp = ReadWord(0x818); ExpandFlags(tmp); m_flags = tmp; m_flags = CompressFlags(); m_pc = ReadWord(0x81a); m_ldtr.sel = ReadWord(0x81c); m_sregs[DS] = ReadWord(0x81e); m_sregs[SS] = ReadWord(0x820); m_sregs[CS] = ReadWord(0x822); m_sregs[ES] = ReadWord(0x824); m_regs.w[DI] = ReadWord(0x826); m_regs.w[SI] = ReadWord(0x828); m_regs.w[BP] = ReadWord(0x82a); m_regs.w[SP] = ReadWord(0x82c); m_regs.w[BX] = ReadWord(0x82e); m_regs.w[DX] = ReadWord(0x830); m_regs.w[CX] = ReadWord(0x832); m_regs.w[AX] = ReadWord(0x834); // loadall uses base-rights-limit order #define LOADDESC(addr, sreg) { desc[1] = ReadWord(addr); desc[2] = ReadWord(addr+2); desc[0] = ReadWord(addr+4); \ m_base[sreg] = BASE(desc); m_rights[sreg] = RIGHTS(desc); \ m_limit[sreg] = LIMIT(desc); } LOADDESC(0x836, ES); LOADDESC(0x83C, CS); LOADDESC(0x842, SS); LOADDESC(0x848, DS); #undef LOADDESC // void cast supresses warning #define LOADDESC(addr, reg, r) { desc[1] = ReadWord(addr); desc[2] = ReadWord(addr+2); desc[0] = ReadWord(addr+4); \ reg.base = BASE(desc); (void)(r); reg.limit = LIMIT(desc); } LOADDESC(0x84e, m_gdtr, 1); LOADDESC(0x854, m_ldtr, m_ldtr.rights = RIGHTS(desc)); LOADDESC(0x85a, m_idtr, 1); LOADDESC(0x860, m_tr, m_tr.rights = RIGHTS(desc)); #undef LOADDESC m_pc = (m_pc + m_base[CS]) & AMASK; CHANGE_PC(m_pc); break; case 6: /* clts */ if (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0); m_msw&=~8; break; default: throw TRAP(ILLEGAL_INSTRUCTION,-1); } } static void PREFIX286(_arpl)() /* 0x63 */ { UINT16 ModRM, tmp, source; if (!PM) throw TRAP(ILLEGAL_INSTRUCTION,-1); ModRM=FETCHOP; tmp=GetRMWord(ModRM); source=RegWord(ModRM); if (RPL(tmp)IOPL) mask |= 0x200; flags &= ~mask; flags |= (m_flags & mask); } else if(!PM) (flags &= ~0xf000); ExpandFlags(flags); m_flags = flags; if (m_TF) PREFIX(_trap)(); /* if the IF is set, and an interrupt is pending, signal an interrupt */ if (m_IF && m_irq_state) { i80286_interrupt_descriptor(pic_ack(), 2, -1); m_irq_state = CLEAR_LINE; } } static void PREFIX286(_popf)() { UINT16 flags; POP(flags); i80286_load_flags(flags, CPL); } static UINT16 i80286_far_return(int iret, int bytes) { UINT16 sel, off, flags = 0; int spaddr; if (PM && NT && iret) { i80286_switch_task(ReadWord(m_tr.base+TSS_BACK*2), IRET); return m_flags; } // must be restartable if(PM) i80286_check_permission(SS, m_regs.w[SP], (iret?6:4), I80286_READ); spaddr = (m_base[SS] + m_regs.w[SP]) & AMASK; off = ReadWord(spaddr); sel = ReadWord(spaddr+2); if(iret) flags = ReadWord(spaddr+4); if(PM) { UINT16 desc[3], newsp, newss; int addr, r; if ((addr = i80286_selector_address(sel)) == -1) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel)); if (RPL(sel)RPL(sel)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel)); } else if (DPL(r)!=RPL(sel)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel)); if (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(sel)); if (off > LIMIT(desc)) throw TRAP(GENERAL_PROTECTION_FAULT,0); if (CPL m_limit[check_seg])) trap = GENERAL_PROTECTION_FAULT; if (!CODE(rights) && EXPDOWN(rights) && ((offset <= m_limit[check_seg]) || ((offset+size-1) > 0xffff))) trap = GENERAL_PROTECTION_FAULT; if ((trap == GENERAL_PROTECTION_FAULT) && (check_seg == SS)) trap = STACK_FAULT; if (trap) throw TRAP(trap, 0); } } ================================================ FILE: vm86/mame/emu/cpu/i86/instr286.h ================================================ #define DIVIDE_BY_ZERO 0 #define SINGLE_STEP 1 #define NMI 2 #define BREAK 3 #define INTO_OVERFLOW 4 #define BOUND_OVERRUN 5 #define ILLEGAL_INSTRUCTION 6 #define FPU_UNAVAILABLE 7 #define DOUBLE_FAULT 8 #define FPU_SEG_OVERRUN 9 #define INVALID_TSS 10 #define SEG_NOT_PRESENT 11 #define STACK_FAULT 12 #define GENERAL_PROTECTION_FAULT 13 #define CPL (m_sregs[CS]&3) #define PM (m_msw&1) static void i80286_trap2(UINT32 error); static void i80286_interrupt_descriptor(UINT16 number, int trap, int error); static void i80286_code_descriptor(UINT16 selector, UINT16 offset, int gate); static void i80286_data_descriptor(int reg, UINT16 selector); static void PREFIX286(_0fpre)(); static void PREFIX286(_arpl)(); static void PREFIX286(_escape_7)(); static void i80286_pop_seg(int reg); static void i80286_load_flags(UINT16 flags, int cpl); enum i80286_size { I80286_BYTE = 1, I80286_WORD = 2 }; enum i80286_operation { I80286_READ = 1, I80286_WRITE, I80286_EXECUTE }; static void i80286_check_permission(UINT8 check_seg, UINT32 offset, UINT16 size, i80286_operation operation); static inline UINT32 GetMemAddr(UINT8 seg, UINT32 off, UINT16 size, i80286_operation op) { seg = DefaultSeg(seg); if(PM) i80286_check_permission(seg, off, size, op); return (m_base[seg] + off) & AMASK; } ================================================ FILE: vm86/mame/emu/cpu/i86/instr86.c ================================================ /**************************************************************************** * real mode i286 emulator v1.4 by Fabrice Frances * * (initial work based on David Hedley's pcemu) * ****************************************************************************/ /* * file will be included in all cpu variants * put non i86 instructions in own files (i286, i386, nec) * function renaming will be added when necessary * timing value should move to separate array */ /* PHS - 2010-12-29 Moved several instruction stubs so that they are compiled separately for the 8086 and 80186. The instructions affected are : _pop_ss, _es, _cs, _ss, _ds, _mov_sregw and _sti This is because they call the next instruction directly as it cannot be interrupted. If they are not compiled separately when executing on an 80186, the wrong set of instructions are used (the 8086 set). This has the serious effect of ignoring the next instruction, as invalid, *IF* it is an 80186 specific instruction. */ #if !defined(I80186) static void PREFIX86(_interrupt)(unsigned int_num) { unsigned dest_seg, dest_off; WORD ip = m_pc - m_base[CS]; if (int_num == -1) int_num = pic_ack(); #ifdef I80286 if (PM) { i80286_interrupt_descriptor(int_num, 0, 0); } else { #endif dest_off = ReadWord(int_num*4); dest_seg = ReadWord(int_num*4+2); PREFIX(_pushf()); m_TF = m_IF = 0; PUSH(m_sregs[CS]); PUSH(ip); m_sregs[CS] = (WORD)dest_seg; m_base[CS] = SegBase(CS); m_pc = (m_base[CS] + dest_off) & AMASK; CHANGE_PC(m_pc); #ifdef I80286 } #endif } static void PREFIX86(_trap)() { PREFIX(_instruction)[FETCHOP](); PREFIX(_interrupt)(1); } #endif #ifndef I80186 static void PREFIX86(_rotate_shift_Byte)(unsigned ModRM, unsigned count, unsigned src) { // unsigned src = (unsigned)GetRMByte(ModRM); unsigned dst=src; if (count==0) { } else if (count==1) { switch (ModRM & 0x38) { case 0x00: /* ROL eb,1 */ m_CarryVal = src & 0x80; dst=(src<<1)+CF; PutbackRMByte(ModRM,dst); m_OverVal = (src^dst)&0x80; break; case 0x08: /* ROR eb,1 */ m_CarryVal = src & 0x01; dst = ((CF<<8)+src) >> 1; PutbackRMByte(ModRM,dst); m_OverVal = (src^dst)&0x80; break; case 0x10: /* RCL eb,1 */ dst=(src<<1)+CF; PutbackRMByte(ModRM,dst); SetCFB(dst); m_OverVal = (src^dst)&0x80; break; case 0x18: /* RCR eb,1 */ dst = ((CF<<8)+src) >> 1; PutbackRMByte(ModRM,dst); m_CarryVal = src & 0x01; m_OverVal = (src^dst)&0x80; break; case 0x20: /* SHL eb,1 */ case 0x30: dst = src << 1; PutbackRMByte(ModRM,dst); SetCFB(dst); m_OverVal = (src^dst)&0x80; m_AuxVal = 1; SetSZPF_Byte(dst); break; case 0x28: /* SHR eb,1 */ dst = src >> 1; PutbackRMByte(ModRM,dst); m_CarryVal = src & 0x01; m_OverVal = src & 0x80; m_AuxVal = 1; SetSZPF_Byte(dst); break; case 0x38: /* SAR eb,1 */ dst = ((INT8)src) >> 1; PutbackRMByte(ModRM,dst); m_CarryVal = src & 0x01; m_OverVal = 0; m_AuxVal = 1; SetSZPF_Byte(dst); break; } } else { int tmpcf = CF; switch (ModRM & 0x38) { case 0x00: /* ROL eb,count */ for (; count > 0; count--) { m_CarryVal = dst & 0x80; dst = (dst << 1) + CF; } PutbackRMByte(ModRM,(BYTE)dst); break; case 0x08: /* ROR eb,count */ for (; count > 0; count--) { m_CarryVal = dst & 0x01; dst = (dst >> 1) + (CF << 7); } PutbackRMByte(ModRM,(BYTE)dst); break; case 0x10: /* RCL eb,count */ for (; count > 0; count--) { dst = (dst << 1) + tmpcf; tmpcf = (int)((dst & 0x100) != 0); } PutbackRMByte(ModRM,(BYTE)dst); m_CarryVal = tmpcf; break; case 0x18: /* RCR eb,count */ for (; count > 0; count--) { dst = (tmpcf<<8)+dst; tmpcf = dst & 0x01; dst >>= 1; } PutbackRMByte(ModRM,(BYTE)dst); m_CarryVal = tmpcf; break; case 0x20: case 0x30: /* SHL eb,count */ for(int i=0;i>= 1; m_CarryVal = dst & 0x1; dst >>= 1; SetSZPF_Byte(dst); m_AuxVal = 1; PutbackRMByte(ModRM,(BYTE)dst); break; case 0x38: /* SAR eb,count */ for(int i=0;i> 1; m_CarryVal = dst & 0x1; dst = ((INT8)((BYTE)dst)) >> 1; SetSZPF_Byte(dst); m_AuxVal = 1; PutbackRMByte(ModRM,(BYTE)dst); break; } } } static void PREFIX86(_rotate_shift_Word)(unsigned ModRM, unsigned count, unsigned src) { // unsigned src = GetRMWord(ModRM); unsigned dst=src; if (count==0) { } else if (count==1) { switch (ModRM & 0x38) { #if 0 case 0x00: /* ROL ew,1 */ tmp2 = (tmp << 1) + CF; SetCFW(tmp2); m_OverVal = !(!(tmp & 0x4000)) != CF; PutbackRMWord(ModRM,tmp2); break; case 0x08: /* ROR ew,1 */ m_CarryVal = tmp & 0x01; tmp2 = (tmp >> 1) + ((unsigned)CF << 15); m_OverVal = !(!(tmp & 0x8000)) != CF; PutbackRMWord(ModRM,tmp2); break; case 0x10: /* RCL ew,1 */ tmp2 = (tmp << 1) + CF; SetCFW(tmp2); m_OverVal = (tmp ^ (tmp << 1)) & 0x8000; PutbackRMWord(ModRM,tmp2); break; case 0x18: /* RCR ew,1 */ tmp2 = (tmp >> 1) + ((unsigned)CF << 15); m_OverVal = !(!(tmp & 0x8000)) != CF; m_CarryVal = tmp & 0x01; PutbackRMWord(ModRM,tmp2); break; case 0x20: /* SHL ew,1 */ case 0x30: tmp <<= 1; SetCFW(tmp); SetOFW_Add(tmp,tmp2,tmp2); m_AuxVal = 1; SetSZPF_Word(tmp); PutbackRMWord(ModRM,tmp); break; case 0x28: /* SHR ew,1 */ m_CarryVal = tmp & 0x01; m_OverVal = tmp & 0x8000; tmp2 = tmp >> 1; SetSZPF_Word(tmp2); m_AuxVal = 1; PutbackRMWord(ModRM,tmp2); break; case 0x38: /* SAR ew,1 */ m_CarryVal = tmp & 0x01; m_OverVal = 0; tmp2 = (tmp >> 1) | (tmp & 0x8000); SetSZPF_Word(tmp2); m_AuxVal = 1; PutbackRMWord(ModRM,tmp2); break; #else case 0x00: /* ROL ew,1 */ m_CarryVal = src & 0x8000; dst=(src<<1)+CF; PutbackRMWord(ModRM,dst); m_OverVal = (src^dst)&0x8000; break; case 0x08: /* ROR ew,1 */ m_CarryVal = src & 0x01; dst = ((CF<<16)+src) >> 1; PutbackRMWord(ModRM,dst); m_OverVal = (src^dst)&0x8000; break; case 0x10: /* RCL ew,1 */ dst=(src<<1)+CF; PutbackRMWord(ModRM,dst); SetCFW(dst); m_OverVal = (src^dst)&0x8000; break; case 0x18: /* RCR ew,1 */ dst = ((CF<<16)+src) >> 1; PutbackRMWord(ModRM,dst); m_CarryVal = src & 0x01; m_OverVal = (src^dst)&0x8000; break; case 0x20: /* SHL ew,1 */ case 0x30: dst = src << 1; PutbackRMWord(ModRM,dst); SetCFW(dst); m_OverVal = (src^dst)&0x8000; m_AuxVal = 1; SetSZPF_Word(dst); break; case 0x28: /* SHR ew,1 */ dst = src >> 1; PutbackRMWord(ModRM,dst); m_CarryVal = src & 0x01; m_OverVal = src & 0x8000; m_AuxVal = 1; SetSZPF_Word(dst); break; case 0x38: /* SAR ew,1 */ dst = ((INT16)src) >> 1; PutbackRMWord(ModRM,dst); m_CarryVal = src & 0x01; m_OverVal = 0; m_AuxVal = 1; SetSZPF_Word(dst); break; #endif } } else { int tmpcf = CF; switch (ModRM & 0x38) { case 0x00: /* ROL ew,count */ for (; count > 0; count--) { m_CarryVal = dst & 0x8000; dst = (dst << 1) + CF; } PutbackRMWord(ModRM,dst); break; case 0x08: /* ROR ew,count */ for (; count > 0; count--) { m_CarryVal = dst & 0x01; dst = (dst >> 1) + (CF << 15); } PutbackRMWord(ModRM,dst); break; case 0x10: /* RCL ew,count */ for (; count > 0; count--) { dst = (dst << 1) + tmpcf; tmpcf = (int)((dst & 0x10000) != 0); } PutbackRMWord(ModRM,dst); m_CarryVal = tmpcf; break; case 0x18: /* RCR ew,count */ for (; count > 0; count--) { dst = dst + (tmpcf << 16); tmpcf = dst & 0x01; dst >>= 1; } PutbackRMWord(ModRM,dst); m_CarryVal = tmpcf; break; case 0x20: case 0x30: /* SHL ew,count */ for(int i=0;i>= 1; m_CarryVal = dst & 0x1; dst >>= 1; SetSZPF_Word(dst); m_AuxVal = 1; PutbackRMWord(ModRM,dst); break; case 0x38: /* SAR ew,count */ for(int i=0;i> 1; m_CarryVal = dst & 0x01; dst = ((INT16)((WORD)dst)) >> 1; SetSZPF_Word(dst); m_AuxVal = 1; PutbackRMWord(ModRM,dst); break; } } } #endif static void PREFIX(rep)(int flagval) { /* Handles rep- and repnz- prefixes. flagval is the value of ZF for the loop to continue for CMPS and SCAS instructions. */ unsigned next = FETCHOP; switch(next) { case 0x26: /* ES: */ m_seg_prefix = TRUE; m_prefix_seg = ES; PREFIX(rep)(flagval); break; case 0x2e: /* CS: */ m_seg_prefix = TRUE; m_prefix_seg = CS; PREFIX(rep)(flagval); break; case 0x36: /* SS: */ m_seg_prefix = TRUE; m_prefix_seg = SS; PREFIX(rep)(flagval); break; case 0x3e: /* DS: */ m_seg_prefix = TRUE; m_prefix_seg = DS; PREFIX(rep)(flagval); break; #ifndef I8086 case 0x6c: /* REP INSB */ #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif while(m_regs.w[CX]) { PutMemB(ES,m_regs.w[DI],read_port_byte(m_regs.w[DX])); m_regs.w[CX]--; m_regs.w[DI] += m_DirVal; } break; case 0x6d: /* REP INSW */ #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif while(m_regs.w[CX]) { PutMemW(ES,m_regs.w[DI],read_port_word(m_regs.w[DX])); m_regs.w[CX]--; m_regs.w[DI] += 2 * m_DirVal; } break; case 0x6e: /* REP OUTSB */ #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif while(m_regs.w[CX]) { write_port_byte(m_regs.w[DX],GetMemB(DS,m_regs.w[SI])); m_regs.w[CX]--; m_regs.w[SI] += m_DirVal; /* GOL 11/27/01 */ } break; case 0x6f: /* REP OUTSW */ #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif while(m_regs.w[CX]) { write_port_word(m_regs.w[DX],GetMemW(DS,m_regs.w[SI])); m_regs.w[CX]--; m_regs.w[SI] += 2 * m_DirVal; /* GOL 11/27/01 */ } break; #endif case 0xa4: /* REP MOVSB */ while(m_regs.w[CX]) { BYTE tmp; tmp = GetMemB(DS,m_regs.w[SI]); PutMemB(ES,m_regs.w[DI], tmp); m_regs.w[CX]--; m_regs.w[DI] += m_DirVal; m_regs.w[SI] += m_DirVal; } break; case 0xa5: /* REP MOVSW */ while(m_regs.w[CX]) { WORD tmp; tmp = GetMemW(DS,m_regs.w[SI]); PutMemW(ES,m_regs.w[DI], tmp); m_regs.w[CX]--; m_regs.w[DI] += 2 * m_DirVal; m_regs.w[SI] += 2 * m_DirVal; } break; case 0xa6: /* REP(N)E CMPSB */ m_ZeroVal = !flagval; while(m_regs.w[CX] && (ZF == flagval)) { unsigned dst, src; dst = GetMemB(ES, m_regs.w[DI]); src = GetMemB(DS, m_regs.w[SI]); SUBB(src,dst); /* opposite of the usual convention */ m_regs.w[CX]--; m_regs.w[DI] += m_DirVal; m_regs.w[SI] += m_DirVal; } break; case 0xa7: /* REP(N)E CMPSW */ m_ZeroVal = !flagval; while(m_regs.w[CX] && (ZF == flagval)) { unsigned dst, src; dst = GetMemW(ES, m_regs.w[DI]); src = GetMemW(DS, m_regs.w[SI]); SUBW(src,dst); /* opposite of the usual convention */ m_regs.w[CX]--; m_regs.w[DI] += 2 * m_DirVal; m_regs.w[SI] += 2 * m_DirVal; } break; case 0xaa: /* REP STOSB */ while(m_regs.w[CX]) { PutMemB(ES,m_regs.w[DI],m_regs.b[AL]); m_regs.w[CX]--; m_regs.w[DI] += m_DirVal; } break; case 0xab: /* REP STOSW */ while(m_regs.w[CX]) { PutMemW(ES,m_regs.w[DI],m_regs.w[AX]); m_regs.w[CX]--; m_regs.w[DI] += 2 * m_DirVal; } break; case 0xac: /* REP LODSB */ while(m_regs.w[CX]) { m_regs.b[AL] = GetMemB(DS,m_regs.w[SI]); m_regs.w[CX]--; m_regs.w[SI] += m_DirVal; } break; case 0xad: /* REP LODSW */ while(m_regs.w[CX]) { m_regs.w[AX] = GetMemW(DS,m_regs.w[SI]); m_regs.w[CX]--; m_regs.w[SI] += 2 * m_DirVal; } break; case 0xae: /* REP(N)E SCASB */ m_ZeroVal = !flagval; while(m_regs.w[CX] && (ZF == flagval)) { unsigned src, dst; src = GetMemB(ES, m_regs.w[DI]); dst = m_regs.b[AL]; SUBB(dst,src); m_regs.w[CX]--; m_regs.w[DI] += m_DirVal; } break; case 0xaf: /* REP(N)E SCASW */ m_ZeroVal = !flagval; while(m_regs.w[CX] && (ZF == flagval)) { unsigned src, dst; src = GetMemW(ES, m_regs.w[DI]); dst = m_regs.w[AX]; SUBW(dst,src); m_regs.w[CX]--; m_regs.w[DI] += 2 * m_DirVal; } break; default: PREFIX(_instruction)[next](); } } #ifndef I80186 static void PREFIX86(_add_br8)() /* Opcode 0x00 */ { DEF_br8(dst,src); ADDB(dst,src); PutbackRMByte(ModRM,dst); } static void PREFIX86(_add_wr16)() /* Opcode 0x01 */ { DEF_wr16(dst,src); ADDW(dst,src); PutbackRMWord(ModRM,dst); } static void PREFIX86(_add_r8b)() /* Opcode 0x02 */ { DEF_r8b(dst,src); ADDB(dst,src); RegByte(ModRM)=dst; } static void PREFIX86(_add_r16w)() /* Opcode 0x03 */ { DEF_r16w(dst,src); ADDW(dst,src); RegWord(ModRM)=dst; } static void PREFIX86(_add_ald8)() /* Opcode 0x04 */ { DEF_ald8(dst,src); ADDB(dst,src); m_regs.b[AL]=dst; } static void PREFIX86(_add_axd16)() /* Opcode 0x05 */ { DEF_axd16(dst,src); ADDW(dst,src); m_regs.w[AX]=dst; } static void PREFIX86(_push_es)() /* Opcode 0x06 */ { PUSH(m_sregs[ES]); } static void PREFIX86(_pop_es)() /* Opcode 0x07 */ { #ifdef I80286 i80286_pop_seg(ES); #else POP(m_sregs[ES]); m_base[ES] = SegBase(ES); #endif } static void PREFIX86(_or_br8)() /* Opcode 0x08 */ { DEF_br8(dst,src); ORB(dst,src); PutbackRMByte(ModRM,dst); } static void PREFIX86(_or_wr16)() /* Opcode 0x09 */ { DEF_wr16(dst,src); ORW(dst,src); PutbackRMWord(ModRM,dst); } static void PREFIX86(_or_r8b)() /* Opcode 0x0a */ { DEF_r8b(dst,src); ORB(dst,src); RegByte(ModRM)=dst; } static void PREFIX86(_or_r16w)() /* Opcode 0x0b */ { DEF_r16w(dst,src); ORW(dst,src); RegWord(ModRM)=dst; } static void PREFIX86(_or_ald8)() /* Opcode 0x0c */ { DEF_ald8(dst,src); ORB(dst,src); m_regs.b[AL]=dst; } static void PREFIX86(_or_axd16)() /* Opcode 0x0d */ { DEF_axd16(dst,src); ORW(dst,src); m_regs.w[AX]=dst; } static void PREFIX86(_push_cs)() /* Opcode 0x0e */ { PUSH(m_sregs[CS]); } #ifndef I80286 static void PREFIX86(_pop_cs)() /* Opcode 0x0f */ { int ip = m_pc - m_base[CS]; POP(m_sregs[CS]); m_base[CS] = SegBase(CS); m_pc = (ip + m_base[CS]) & AMASK; CHANGE_PC(m_pc); } #endif static void PREFIX86(_adc_br8)() /* Opcode 0x10 */ { int tmpcf; DEF_br8(dst,src); src+=CF; ADCB(dst,src,tmpcf); PutbackRMByte(ModRM,dst); m_CarryVal = tmpcf; } static void PREFIX86(_adc_wr16)() /* Opcode 0x11 */ { int tmpcf; DEF_wr16(dst,src); src+=CF; ADCW(dst,src,tmpcf); PutbackRMWord(ModRM,dst); m_CarryVal = tmpcf; } static void PREFIX86(_adc_r8b)() /* Opcode 0x12 */ { DEF_r8b(dst,src); src+=CF; ADDB(dst,src); RegByte(ModRM)=dst; } static void PREFIX86(_adc_r16w)() /* Opcode 0x13 */ { DEF_r16w(dst,src); src+=CF; ADDW(dst,src); RegWord(ModRM)=dst; } static void PREFIX86(_adc_ald8)() /* Opcode 0x14 */ { DEF_ald8(dst,src); src+=CF; ADDB(dst,src); m_regs.b[AL] = dst; } static void PREFIX86(_adc_axd16)() /* Opcode 0x15 */ { DEF_axd16(dst,src); src+=CF; ADDW(dst,src); m_regs.w[AX]=dst; } static void PREFIX86(_push_ss)() /* Opcode 0x16 */ { PUSH(m_sregs[SS]); } static void PREFIX86(_sbb_br8)() /* Opcode 0x18 */ { int tmpcf; DEF_br8(dst,src); src+=CF; SBBB(dst,src,tmpcf); PutbackRMByte(ModRM,dst); m_CarryVal = tmpcf; } static void PREFIX86(_sbb_wr16)() /* Opcode 0x19 */ { int tmpcf; DEF_wr16(dst,src); src+=CF; SBBW(dst,src,tmpcf); PutbackRMWord(ModRM,dst); m_CarryVal = tmpcf; } static void PREFIX86(_sbb_r8b)() /* Opcode 0x1a */ { DEF_r8b(dst,src); src+=CF; SUBB(dst,src); RegByte(ModRM)=dst; } static void PREFIX86(_sbb_r16w)() /* Opcode 0x1b */ { DEF_r16w(dst,src); src+=CF; SUBW(dst,src); RegWord(ModRM)= dst; } static void PREFIX86(_sbb_ald8)() /* Opcode 0x1c */ { DEF_ald8(dst,src); src+=CF; SUBB(dst,src); m_regs.b[AL] = dst; } static void PREFIX86(_sbb_axd16)() /* Opcode 0x1d */ { DEF_axd16(dst,src); src+=CF; SUBW(dst,src); m_regs.w[AX]=dst; } static void PREFIX86(_push_ds)() /* Opcode 0x1e */ { PUSH(m_sregs[DS]); } static void PREFIX86(_pop_ds)() /* Opcode 0x1f */ { #ifdef I80286 i80286_pop_seg(DS); #else POP(m_sregs[DS]); m_base[DS] = SegBase(DS); #endif } static void PREFIX86(_and_br8)() /* Opcode 0x20 */ { DEF_br8(dst,src); ANDB(dst,src); PutbackRMByte(ModRM,dst); } static void PREFIX86(_and_wr16)() /* Opcode 0x21 */ { DEF_wr16(dst,src); ANDW(dst,src); PutbackRMWord(ModRM,dst); } static void PREFIX86(_and_r8b)() /* Opcode 0x22 */ { DEF_r8b(dst,src); ANDB(dst,src); RegByte(ModRM)=dst; } static void PREFIX86(_and_r16w)() /* Opcode 0x23 */ { DEF_r16w(dst,src); ANDW(dst,src); RegWord(ModRM)=dst; } static void PREFIX86(_and_ald8)() /* Opcode 0x24 */ { DEF_ald8(dst,src); ANDB(dst,src); m_regs.b[AL] = dst; } static void PREFIX86(_and_axd16)() /* Opcode 0x25 */ { DEF_axd16(dst,src); ANDW(dst,src); m_regs.w[AX]=dst; } static void PREFIX86(_daa)() /* Opcode 0x27 */ { if (AF || ((m_regs.b[AL] & 0xf) > 9)) { int tmp; m_regs.b[AL] = tmp = m_regs.b[AL] + 6; m_AuxVal = 1; m_CarryVal |= tmp & 0x100; } if (CF || (m_regs.b[AL] > 0x9f)) { m_regs.b[AL] += 0x60; m_CarryVal = 1; } SetSZPF_Byte(m_regs.b[AL]); } static void PREFIX86(_sub_br8)() /* Opcode 0x28 */ { DEF_br8(dst,src); SUBB(dst,src); PutbackRMByte(ModRM,dst); } static void PREFIX86(_sub_wr16)() /* Opcode 0x29 */ { DEF_wr16(dst,src); SUBW(dst,src); PutbackRMWord(ModRM,dst); } static void PREFIX86(_sub_r8b)() /* Opcode 0x2a */ { DEF_r8b(dst,src); SUBB(dst,src); RegByte(ModRM)=dst; } static void PREFIX86(_sub_r16w)() /* Opcode 0x2b */ { DEF_r16w(dst,src); SUBW(dst,src); RegWord(ModRM)=dst; } static void PREFIX86(_sub_ald8)() /* Opcode 0x2c */ { DEF_ald8(dst,src); SUBB(dst,src); m_regs.b[AL] = dst; } static void PREFIX86(_sub_axd16)() /* Opcode 0x2d */ { DEF_axd16(dst,src); SUBW(dst,src); m_regs.w[AX]=dst; } static void PREFIX86(_das)() /* Opcode 0x2f */ { UINT8 tmpAL=m_regs.b[AL]; if (AF || ((m_regs.b[AL] & 0xf) > 9)) { int tmp; m_regs.b[AL] = tmp = m_regs.b[AL] - 6; m_AuxVal = 1; m_CarryVal |= tmp & 0x100; } if (CF || (tmpAL > 0x9f)) { m_regs.b[AL] -= 0x60; m_CarryVal = 1; } SetSZPF_Byte(m_regs.b[AL]); } static void PREFIX86(_xor_br8)() /* Opcode 0x30 */ { DEF_br8(dst,src); XORB(dst,src); PutbackRMByte(ModRM,dst); } static void PREFIX86(_xor_wr16)() /* Opcode 0x31 */ { DEF_wr16(dst,src); XORW(dst,src); PutbackRMWord(ModRM,dst); } static void PREFIX86(_xor_r8b)() /* Opcode 0x32 */ { DEF_r8b(dst,src); XORB(dst,src); RegByte(ModRM)=dst; } static void PREFIX86(_xor_r16w)() /* Opcode 0x33 */ { DEF_r16w(dst,src); XORW(dst,src); RegWord(ModRM)=dst; } static void PREFIX86(_xor_ald8)() /* Opcode 0x34 */ { DEF_ald8(dst,src); XORB(dst,src); m_regs.b[AL] = dst; } static void PREFIX86(_xor_axd16)() /* Opcode 0x35 */ { DEF_axd16(dst,src); XORW(dst,src); m_regs.w[AX]=dst; } static void PREFIX86(_aaa)() /* Opcode 0x37 */ { UINT8 ALcarry=1; if (m_regs.b[AL]>0xf9) ALcarry=2; if (AF || ((m_regs.b[AL] & 0xf) > 9)) { m_regs.b[AL] += 6; m_regs.b[AH] += ALcarry; m_AuxVal = 1; m_CarryVal = 1; } else { m_AuxVal = 0; m_CarryVal = 0; } m_regs.b[AL] &= 0x0F; } static void PREFIX86(_cmp_br8)() /* Opcode 0x38 */ { DEF_br8(dst,src); SUBB(dst,src); } static void PREFIX86(_cmp_wr16)() /* Opcode 0x39 */ { DEF_wr16(dst,src); SUBW(dst,src); } static void PREFIX86(_cmp_r8b)() /* Opcode 0x3a */ { DEF_r8b(dst,src); SUBB(dst,src); } static void PREFIX86(_cmp_r16w)() /* Opcode 0x3b */ { DEF_r16w(dst,src); SUBW(dst,src); } static void PREFIX86(_cmp_ald8)() /* Opcode 0x3c */ { DEF_ald8(dst,src); SUBB(dst,src); } static void PREFIX86(_cmp_axd16)() /* Opcode 0x3d */ { DEF_axd16(dst,src); SUBW(dst,src); } static void PREFIX86(_aas)() /* Opcode 0x3f */ { // UINT8 ALcarry=1; // if (m_regs.b[AL]>0xf9) ALcarry=2; if (AF || ((m_regs.b[AL] & 0xf) > 9)) { m_regs.b[AL] -= 6; m_regs.b[AH] -= 1; m_AuxVal = 1; m_CarryVal = 1; } else { m_AuxVal = 0; m_CarryVal = 0; } m_regs.b[AL] &= 0x0F; } #define IncWordReg(Reg) \ { \ unsigned tmp = (unsigned)m_regs.w[Reg]; \ unsigned tmp1 = tmp+1; \ SetOFW_Add(tmp1,tmp,1); \ SetAF(tmp1,tmp,1); \ SetSZPF_Word(tmp1); \ m_regs.w[Reg]=tmp1; \ } static void PREFIX86(_inc_ax)() /* Opcode 0x40 */ { IncWordReg(AX); } static void PREFIX86(_inc_cx)() /* Opcode 0x41 */ { IncWordReg(CX); } static void PREFIX86(_inc_dx)() /* Opcode 0x42 */ { IncWordReg(DX); } static void PREFIX(_inc_bx)() /* Opcode 0x43 */ { IncWordReg(BX); } static void PREFIX86(_inc_sp)() /* Opcode 0x44 */ { IncWordReg(SP); } static void PREFIX86(_inc_bp)() /* Opcode 0x45 */ { IncWordReg(BP); } static void PREFIX86(_inc_si)() /* Opcode 0x46 */ { IncWordReg(SI); } static void PREFIX86(_inc_di)() /* Opcode 0x47 */ { IncWordReg(DI); } #define DecWordReg(Reg) \ { \ unsigned tmp = (unsigned)m_regs.w[Reg]; \ unsigned tmp1 = tmp-1; \ SetOFW_Sub(tmp1,1,tmp); \ SetAF(tmp1,tmp,1); \ SetSZPF_Word(tmp1); \ m_regs.w[Reg]=tmp1; \ } static void PREFIX86(_dec_ax)() /* Opcode 0x48 */ { DecWordReg(AX); } static void PREFIX86(_dec_cx)() /* Opcode 0x49 */ { DecWordReg(CX); } static void PREFIX86(_dec_dx)() /* Opcode 0x4a */ { DecWordReg(DX); } static void PREFIX86(_dec_bx)() /* Opcode 0x4b */ { DecWordReg(BX); } static void PREFIX86(_dec_sp)() /* Opcode 0x4c */ { DecWordReg(SP); } static void PREFIX86(_dec_bp)() /* Opcode 0x4d */ { DecWordReg(BP); } static void PREFIX86(_dec_si)() /* Opcode 0x4e */ { DecWordReg(SI); } static void PREFIX86(_dec_di)() /* Opcode 0x4f */ { DecWordReg(DI); } static void PREFIX86(_push_ax)() /* Opcode 0x50 */ { PUSH(m_regs.w[AX]); } static void PREFIX86(_push_cx)() /* Opcode 0x51 */ { PUSH(m_regs.w[CX]); } static void PREFIX86(_push_dx)() /* Opcode 0x52 */ { PUSH(m_regs.w[DX]); } static void PREFIX86(_push_bx)() /* Opcode 0x53 */ { PUSH(m_regs.w[BX]); } static void PREFIX86(_push_sp)() /* Opcode 0x54 */ { #ifdef I80286 PUSH(m_regs.w[SP]+2); #else PUSH(m_regs.w[SP]); #endif } static void PREFIX86(_push_bp)() /* Opcode 0x55 */ { PUSH(m_regs.w[BP]); } static void PREFIX86(_push_si)() /* Opcode 0x56 */ { PUSH(m_regs.w[SI]); } static void PREFIX86(_push_di)() /* Opcode 0x57 */ { PUSH(m_regs.w[DI]); } static void PREFIX86(_pop_ax)() /* Opcode 0x58 */ { POP(m_regs.w[AX]); } static void PREFIX86(_pop_cx)() /* Opcode 0x59 */ { POP(m_regs.w[CX]); } static void PREFIX86(_pop_dx)() /* Opcode 0x5a */ { POP(m_regs.w[DX]); } static void PREFIX86(_pop_bx)() /* Opcode 0x5b */ { POP(m_regs.w[BX]); } static void PREFIX86(_pop_sp)() /* Opcode 0x5c */ { POP(m_regs.w[SP]); } static void PREFIX86(_pop_bp)() /* Opcode 0x5d */ { POP(m_regs.w[BP]); } static void PREFIX86(_pop_si)() /* Opcode 0x5e */ { POP(m_regs.w[SI]); } static void PREFIX86(_pop_di)() /* Opcode 0x5f */ { POP(m_regs.w[DI]); } static void PREFIX86(_jo)() /* Opcode 0x70 */ { int tmp = (int)((INT8)FETCH); if (OF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jno)() /* Opcode 0x71 */ { int tmp = (int)((INT8)FETCH); if (!OF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jb)() /* Opcode 0x72 */ { int tmp = (int)((INT8)FETCH); if (CF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jnb)() /* Opcode 0x73 */ { int tmp = (int)((INT8)FETCH); if (!CF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jz)() /* Opcode 0x74 */ { int tmp = (int)((INT8)FETCH); if (ZF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jnz)() /* Opcode 0x75 */ { int tmp = (int)((INT8)FETCH); if (!ZF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jbe)() /* Opcode 0x76 */ { int tmp = (int)((INT8)FETCH); if (CF || ZF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jnbe)() /* Opcode 0x77 */ { int tmp = (int)((INT8)FETCH); if (!(CF || ZF)) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_js)() /* Opcode 0x78 */ { int tmp = (int)((INT8)FETCH); if (SF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jns)() /* Opcode 0x79 */ { int tmp = (int)((INT8)FETCH); if (!SF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jp)() /* Opcode 0x7a */ { int tmp = (int)((INT8)FETCH); if (PF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jnp)() /* Opcode 0x7b */ { int tmp = (int)((INT8)FETCH); if (!PF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jl)() /* Opcode 0x7c */ { int tmp = (int)((INT8)FETCH); if ((SF!=OF)&&!ZF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jnl)() /* Opcode 0x7d */ { int tmp = (int)((INT8)FETCH); if (ZF||(SF==OF)) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jle)() /* Opcode 0x7e */ { int tmp = (int)((INT8)FETCH); if (ZF||(SF!=OF)) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jnle)() /* Opcode 0x7f */ { int tmp = (int)((INT8)FETCH); if ((SF==OF)&&!ZF) { m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_80pre)() /* Opcode 0x80 */ { unsigned ModRM = FETCHOP; unsigned dst = GetRMByte(ModRM); unsigned src = FETCH; int tmpcf; switch (ModRM & 0x38) { case 0x00: /* ADD eb,d8 */ ADDB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x08: /* OR eb,d8 */ ORB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x10: /* ADC eb,d8 */ src+=CF; ADCB(dst,src,tmpcf); PutbackRMByte(ModRM,dst); m_CarryVal = tmpcf; break; case 0x18: /* SBB eb,b8 */ src+=CF; SBBB(dst,src,tmpcf); PutbackRMByte(ModRM,dst); m_CarryVal = tmpcf; break; case 0x20: /* AND eb,d8 */ ANDB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x28: /* SUB eb,d8 */ SUBB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x30: /* XOR eb,d8 */ XORB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x38: /* CMP eb,d8 */ SUBB(dst,src); break; } } static void PREFIX86(_81pre)() /* Opcode 0x81 */ { unsigned ModRM = FETCH; unsigned dst = GetRMWord(ModRM); unsigned src = FETCH; int tmpcf; src+= (FETCH << 8); switch (ModRM & 0x38) { case 0x00: /* ADD ew,d16 */ ADDW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x08: /* OR ew,d16 */ ORW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x10: /* ADC ew,d16 */ src+=CF; ADCW(dst,src,tmpcf); PutbackRMWord(ModRM,dst); m_CarryVal = tmpcf; break; case 0x18: /* SBB ew,d16 */ src+=CF; SBBW(dst,src,tmpcf); PutbackRMWord(ModRM,dst); m_CarryVal = tmpcf; break; case 0x20: /* AND ew,d16 */ ANDW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x28: /* SUB ew,d16 */ SUBW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x30: /* XOR ew,d16 */ XORW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x38: /* CMP ew,d16 */ SUBW(dst,src); break; } } static void PREFIX86(_82pre)() /* Opcode 0x82 */ { unsigned ModRM = FETCH; unsigned dst = GetRMByte(ModRM); unsigned src = FETCH; int tmpcf; switch (ModRM & 0x38) { case 0x00: /* ADD eb,d8 */ ADDB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x08: /* OR eb,d8 */ ORB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x10: /* ADC eb,d8 */ src+=CF; ADCB(dst,src,tmpcf); PutbackRMByte(ModRM,dst); m_CarryVal = tmpcf; break; case 0x18: /* SBB eb,d8 */ src+=CF; SBBB(dst,src,tmpcf); PutbackRMByte(ModRM,dst); m_CarryVal = tmpcf; break; case 0x20: /* AND eb,d8 */ ANDB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x28: /* SUB eb,d8 */ SUBB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x30: /* XOR eb,d8 */ XORB(dst,src); PutbackRMByte(ModRM,dst); break; case 0x38: /* CMP eb,d8 */ SUBB(dst,src); break; } } static void PREFIX86(_83pre)() /* Opcode 0x83 */ { unsigned ModRM = FETCH; unsigned dst = GetRMWord(ModRM); unsigned src = (WORD)((INT16)((INT8)FETCH)); int tmpcf; switch (ModRM & 0x38) { case 0x00: /* ADD ew,d16 */ ADDW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x08: /* OR ew,d16 */ ORW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x10: /* ADC ew,d16 */ src+=CF; ADCW(dst,src,tmpcf); PutbackRMWord(ModRM,dst); m_CarryVal = tmpcf; break; case 0x18: /* SBB ew,d16 */ src+=CF; SBBW(dst,src,tmpcf); PutbackRMWord(ModRM,dst); m_CarryVal = tmpcf; break; case 0x20: /* AND ew,d16 */ ANDW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x28: /* SUB ew,d16 */ SUBW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x30: /* XOR ew,d16 */ XORW(dst,src); PutbackRMWord(ModRM,dst); break; case 0x38: /* CMP ew,d16 */ SUBW(dst,src); break; } } static void PREFIX86(_test_br8)() /* Opcode 0x84 */ { DEF_br8(dst,src); ANDB(dst,src); } static void PREFIX86(_test_wr16)() /* Opcode 0x85 */ { DEF_wr16(dst,src); ANDW(dst,src); } static void PREFIX86(_xchg_br8)() /* Opcode 0x86 */ { DEF_br8(dst,src); PutbackRMByte(ModRM,src); RegByte(ModRM)=dst; } static void PREFIX86(_xchg_wr16)() /* Opcode 0x87 */ { DEF_wr16(dst,src); PutbackRMWord(ModRM,src); RegWord(ModRM)=dst; } static void PREFIX86(_mov_br8)() /* Opcode 0x88 */ { unsigned ModRM = FETCH; BYTE src = RegByte(ModRM); PutRMByte(ModRM,src); } static void PREFIX86(_mov_wr16)() /* Opcode 0x89 */ { unsigned ModRM = FETCH; WORD src = RegWord(ModRM); PutRMWord(ModRM,src); } static void PREFIX86(_mov_r8b)() /* Opcode 0x8a */ { unsigned ModRM = FETCH; BYTE src = GetRMByte(ModRM); RegByte(ModRM)=src; } static void PREFIX86(_mov_r16w)() /* Opcode 0x8b */ { unsigned ModRM = FETCH; WORD src = GetRMWord(ModRM); RegWord(ModRM)=src; } static void PREFIX86(_mov_wsreg)() /* Opcode 0x8c */ { unsigned ModRM = FETCH; if (ModRM & 0x20) { /* HJB 12/13/98 1xx is invalid */ m_pc = m_prevpc; return PREFIX86(_invalid)(); } PutRMWord(ModRM,m_sregs[(ModRM & 0x38) >> 3]); } static void PREFIX86(_lea)() /* Opcode 0x8d */ { unsigned ModRM = FETCH; (void)(*GetEA[ModRM])(); RegWord(ModRM)=m_eo; /* HJB 12/13/98 effective offset (no segment part) */ } static void PREFIX86(_popw)() /* Opcode 0x8f */ { unsigned ModRM = FETCH; WORD tmp; tmp = ReadWord(m_base[SS] + m_regs.w[SP]); PutRMWord(ModRM,tmp); m_regs.w[SP] += 2; } #define XchgAXReg(Reg) \ { \ WORD tmp; \ tmp = m_regs.w[Reg]; \ m_regs.w[Reg] = m_regs.w[AX]; \ m_regs.w[AX] = tmp; \ } static void PREFIX86(_nop)() /* Opcode 0x90 */ { /* this is XchgAXReg(AX); */ } static void PREFIX86(_xchg_axcx)() /* Opcode 0x91 */ { XchgAXReg(CX); } static void PREFIX86(_xchg_axdx)() /* Opcode 0x92 */ { XchgAXReg(DX); } static void PREFIX86(_xchg_axbx)() /* Opcode 0x93 */ { XchgAXReg(BX); } static void PREFIX86(_xchg_axsp)() /* Opcode 0x94 */ { XchgAXReg(SP); } static void PREFIX86(_xchg_axbp)() /* Opcode 0x95 */ { XchgAXReg(BP); } static void PREFIX86(_xchg_axsi)() /* Opcode 0x96 */ { XchgAXReg(SI); } static void PREFIX86(_xchg_axdi)() /* Opcode 0x97 */ { XchgAXReg(DI); } static void PREFIX86(_cbw)() /* Opcode 0x98 */ { m_regs.b[AH] = (m_regs.b[AL] & 0x80) ? 0xff : 0; } static void PREFIX86(_cwd)() /* Opcode 0x99 */ { m_regs.w[DX] = (m_regs.b[AH] & 0x80) ? 0xffff : 0; } static void PREFIX86(_call_far)() { unsigned int tmp, tmp2; WORD cs, ip; tmp = FETCH; tmp += FETCH << 8; tmp2 = FETCH; tmp2 += FETCH << 8; ip = m_pc - m_base[CS]; cs = m_sregs[CS]; #ifdef I80286 i80286_code_descriptor(tmp2, tmp, 2); #else m_sregs[CS] = (WORD)tmp2; m_base[CS] = SegBase(CS); m_pc = (m_base[CS] + (WORD)tmp) & AMASK; #endif PUSH(cs); PUSH(ip); CHANGE_PC(m_pc); } static void PREFIX86(_wait)() /* Opcode 0x9b */ { #ifdef I80286 if ((m_msw&0x0a) == 0x0a) throw TRAP(FPU_UNAVAILABLE,-1); #endif if (m_test_state) { m_pc--; } } static void PREFIX86(_pushf)() /* Opcode 0x9c */ { unsigned tmp; tmp = CompressFlags(); #ifdef I80286 if(!PM) ( tmp &= ~0xf000 ); #endif PUSH( tmp ); } #ifndef I80286 static void PREFIX86(_popf)() /* Opcode 0x9d */ { unsigned tmp; POP(tmp); ExpandFlags(tmp); m_flags = tmp; m_flags = CompressFlags(); if (m_TF) PREFIX(_trap)(); /* if the IF is set, and an interrupt is pending, signal an interrupt */ if (m_IF && m_irq_state) { PREFIX(_interrupt)((UINT32)-1); m_irq_state = CLEAR_LINE; } } #endif static void PREFIX86(_sahf)() /* Opcode 0x9e */ { unsigned tmp = (CompressFlags() & 0xff00) | (m_regs.b[AH] & 0xd5); ExpandFlags(tmp); } static void PREFIX86(_lahf)() /* Opcode 0x9f */ { m_regs.b[AH] = CompressFlags() & 0xff; } static void PREFIX86(_mov_aldisp)() /* Opcode 0xa0 */ { unsigned addr; addr = FETCH; addr += FETCH << 8; m_regs.b[AL] = GetMemB(DS, addr); } static void PREFIX86(_mov_axdisp)() /* Opcode 0xa1 */ { unsigned addr; addr = FETCH; addr += FETCH << 8; m_regs.w[AX] = GetMemW(DS, addr); } static void PREFIX86(_mov_dispal)() /* Opcode 0xa2 */ { unsigned addr; addr = FETCH; addr += FETCH << 8; PutMemB(DS, addr, m_regs.b[AL]); } static void PREFIX86(_mov_dispax)() /* Opcode 0xa3 */ { unsigned addr; addr = FETCH; addr += FETCH << 8; PutMemW(DS, addr, m_regs.w[AX]); } static void PREFIX86(_movsb)() /* Opcode 0xa4 */ { BYTE tmp = GetMemB(DS,m_regs.w[SI]); PutMemB(ES,m_regs.w[DI], tmp); m_regs.w[DI] += m_DirVal; m_regs.w[SI] += m_DirVal; } static void PREFIX86(_movsw)() /* Opcode 0xa5 */ { WORD tmp = GetMemW(DS,m_regs.w[SI]); PutMemW(ES,m_regs.w[DI], tmp); m_regs.w[DI] += 2 * m_DirVal; m_regs.w[SI] += 2 * m_DirVal; } static void PREFIX86(_cmpsb)() /* Opcode 0xa6 */ { unsigned dst = GetMemB(ES, m_regs.w[DI]); unsigned src = GetMemB(DS, m_regs.w[SI]); SUBB(src,dst); /* opposite of the usual convention */ m_regs.w[DI] += m_DirVal; m_regs.w[SI] += m_DirVal; } static void PREFIX86(_cmpsw)() /* Opcode 0xa7 */ { unsigned dst = GetMemW(ES, m_regs.w[DI]); unsigned src = GetMemW(DS, m_regs.w[SI]); SUBW(src,dst); /* opposite of the usual convention */ m_regs.w[DI] += 2 * m_DirVal; m_regs.w[SI] += 2 * m_DirVal; } static void PREFIX86(_test_ald8)() /* Opcode 0xa8 */ { DEF_ald8(dst,src); ANDB(dst,src); } static void PREFIX86(_test_axd16)() /* Opcode 0xa9 */ { DEF_axd16(dst,src); ANDW(dst,src); } static void PREFIX86(_stosb)() /* Opcode 0xaa */ { PutMemB(ES,m_regs.w[DI],m_regs.b[AL]); m_regs.w[DI] += m_DirVal; } static void PREFIX86(_stosw)() /* Opcode 0xab */ { PutMemW(ES,m_regs.w[DI],m_regs.w[AX]); m_regs.w[DI] += 2 * m_DirVal; } static void PREFIX86(_lodsb)() /* Opcode 0xac */ { m_regs.b[AL] = GetMemB(DS,m_regs.w[SI]); m_regs.w[SI] += m_DirVal; } static void PREFIX86(_lodsw)() /* Opcode 0xad */ { m_regs.w[AX] = GetMemW(DS,m_regs.w[SI]); m_regs.w[SI] += 2 * m_DirVal; } static void PREFIX86(_scasb)() /* Opcode 0xae */ { unsigned src = GetMemB(ES, m_regs.w[DI]); unsigned dst = m_regs.b[AL]; SUBB(dst,src); m_regs.w[DI] += m_DirVal; } static void PREFIX86(_scasw)() /* Opcode 0xaf */ { unsigned src = GetMemW(ES, m_regs.w[DI]); unsigned dst = m_regs.w[AX]; SUBW(dst,src); m_regs.w[DI] += 2 * m_DirVal; } static void PREFIX86(_mov_ald8)() /* Opcode 0xb0 */ { m_regs.b[AL] = FETCH; } static void PREFIX86(_mov_cld8)() /* Opcode 0xb1 */ { m_regs.b[CL] = FETCH; } static void PREFIX86(_mov_dld8)() /* Opcode 0xb2 */ { m_regs.b[DL] = FETCH; } static void PREFIX86(_mov_bld8)() /* Opcode 0xb3 */ { m_regs.b[BL] = FETCH; } static void PREFIX86(_mov_ahd8)() /* Opcode 0xb4 */ { m_regs.b[AH] = FETCH; } static void PREFIX86(_mov_chd8)() /* Opcode 0xb5 */ { m_regs.b[CH] = FETCH; } static void PREFIX86(_mov_dhd8)() /* Opcode 0xb6 */ { m_regs.b[DH] = FETCH; } static void PREFIX86(_mov_bhd8)() /* Opcode 0xb7 */ { m_regs.b[BH] = FETCH; } static void PREFIX86(_mov_axd16)() /* Opcode 0xb8 */ { m_regs.b[AL] = FETCH; m_regs.b[AH] = FETCH; } static void PREFIX86(_mov_cxd16)() /* Opcode 0xb9 */ { m_regs.b[CL] = FETCH; m_regs.b[CH] = FETCH; } static void PREFIX86(_mov_dxd16)() /* Opcode 0xba */ { m_regs.b[DL] = FETCH; m_regs.b[DH] = FETCH; } static void PREFIX86(_mov_bxd16)() /* Opcode 0xbb */ { m_regs.b[BL] = FETCH; m_regs.b[BH] = FETCH; } static void PREFIX86(_mov_spd16)() /* Opcode 0xbc */ { m_regs.b[SPL] = FETCH; m_regs.b[SPH] = FETCH; } static void PREFIX86(_mov_bpd16)() /* Opcode 0xbd */ { m_regs.b[BPL] = FETCH; m_regs.b[BPH] = FETCH; } static void PREFIX86(_mov_sid16)() /* Opcode 0xbe */ { m_regs.b[SIL] = FETCH; m_regs.b[SIH] = FETCH; } static void PREFIX86(_mov_did16)() /* Opcode 0xbf */ { m_regs.b[DIL] = FETCH; m_regs.b[DIH] = FETCH; } static void PREFIX86(_ret_d16)() /* Opcode 0xc2 */ { unsigned count = FETCH; count += FETCH << 8; POP(m_pc); m_pc = (m_pc + m_base[CS]) & AMASK; m_regs.w[SP]+=count; CHANGE_PC(m_pc); } static void PREFIX86(_ret)() /* Opcode 0xc3 */ { POP(m_pc); m_pc = (m_pc + m_base[CS]) & AMASK; CHANGE_PC(m_pc); } static void PREFIX86(_les_dw)() /* Opcode 0xc4 */ { unsigned ModRM = FETCH; WORD tmp = GetRMWord(ModRM); #ifdef I80286 i80286_data_descriptor(ES,GetnextRMWord); #else m_sregs[ES] = GetnextRMWord; m_base[ES] = SegBase(ES); #endif RegWord(ModRM)= tmp; } static void PREFIX86(_lds_dw)() /* Opcode 0xc5 */ { unsigned ModRM = FETCH; WORD tmp = GetRMWord(ModRM); #ifdef I80286 i80286_data_descriptor(DS,GetnextRMWord); #else m_sregs[DS] = GetnextRMWord; m_base[DS] = SegBase(DS); #endif RegWord(ModRM)=tmp; } static void PREFIX86(_mov_bd8)() /* Opcode 0xc6 */ { unsigned ModRM = FETCH; PutImmRMByte(ModRM); } static void PREFIX86(_mov_wd16)() /* Opcode 0xc7 */ { unsigned ModRM = FETCH; PutImmRMWord(ModRM); } #ifndef I80286 static void PREFIX86(_retf_d16)() /* Opcode 0xca */ { unsigned count = FETCH; count += FETCH << 8; POP(m_pc); POP(m_sregs[CS]); m_base[CS] = SegBase(CS); m_pc = (m_pc + m_base[CS]) & AMASK; m_regs.w[SP]+=count; CHANGE_PC(m_pc); } static void PREFIX86(_retf)() /* Opcode 0xcb */ { POP(m_pc); POP(m_sregs[CS]); m_base[CS] = SegBase(CS); m_pc = (m_pc + m_base[CS]) & AMASK; CHANGE_PC(m_pc); } #endif static void PREFIX86(_int3)() /* Opcode 0xcc */ { PREFIX(_interrupt)(3); } static void PREFIX86(_int)() /* Opcode 0xcd */ { unsigned int_num = FETCH; PREFIX(_interrupt)(int_num); } static void PREFIX86(_into)() /* Opcode 0xce */ { if (OF) { PREFIX(_interrupt)(4); } } #ifndef I80286 static void PREFIX86(_iret)() /* Opcode 0xcf */ { UINT32 old = m_pc - 1; POP(m_pc); POP(m_sregs[CS]); m_base[CS] = SegBase(CS); m_pc = (m_pc + m_base[CS]) & AMASK; PREFIX(_popf)(); CHANGE_PC(m_pc); /* if the IF is set, and an interrupt is pending, signal an interrupt */ if (m_IF && m_irq_state) { PREFIX(_interrupt)((UINT32)-1); m_irq_state = CLEAR_LINE; } // MS-DOS system call if(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) { msdos_syscall(old - IRET_TOP); } } #endif static void PREFIX86(_rotshft_b)() /* Opcode 0xd0 */ { unsigned ModRM = FETCHOP; PREFIX(_rotate_shift_Byte)(ModRM,1,GetRMByte(ModRM)); } static void PREFIX86(_rotshft_w)() /* Opcode 0xd1 */ { unsigned ModRM = FETCHOP; PREFIX(_rotate_shift_Word)(ModRM,1,GetRMWord(ModRM)); } #ifdef I8086 static void PREFIX86(_rotshft_bcl)() /* Opcode 0xd2 */ { unsigned ModRM = FETCHOP; PREFIX(_rotate_shift_Byte)(ModRM,m_regs.b[CL],GetRMByte(ModRM)); } static void PREFIX86(_rotshft_wcl)() /* Opcode 0xd3 */ { unsigned ModRM = FETCHOP; PREFIX(_rotate_shift_Word)(ModRM,m_regs.b[CL],GetRMWord(ModRM)); } #endif /* OB: Opcode works on NEC V-Series but not the Variants */ /* one could specify any byte value as operand but the NECs */ /* always substitute 0x0a. */ static void PREFIX86(_aam)() /* Opcode 0xd4 */ { unsigned mult = FETCH; if (mult == 0) PREFIX(_interrupt)(0); else { m_regs.b[AH] = m_regs.b[AL] / mult; m_regs.b[AL] %= mult; SetSZPF_Word(m_regs.w[AX]); } } static void PREFIX86(_aad)() /* Opcode 0xd5 */ { unsigned mult = FETCH; m_regs.b[AL] = m_regs.b[AH] * mult + m_regs.b[AL]; m_regs.b[AH] = 0; SetZF(m_regs.b[AL]); SetPF(m_regs.b[AL]); m_SignVal = 0; } static void PREFIX86(_xlat)() /* Opcode 0xd7 */ { unsigned dest = m_regs.w[BX]+m_regs.b[AL]; m_regs.b[AL] = GetMemB(DS, dest); } #ifndef I80286 static void PREFIX86(_escape)() /* Opcodes 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde and 0xdf */ { unsigned ModRM = FETCH; GetRMByte(ModRM); } #endif static void PREFIX86(_loopne)() /* Opcode 0xe0 */ { int disp = (int)((INT8)FETCH); unsigned tmp = m_regs.w[CX]-1; m_regs.w[CX]=tmp; if (!ZF && tmp) { m_pc += disp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_loope)() /* Opcode 0xe1 */ { int disp = (int)((INT8)FETCH); unsigned tmp = m_regs.w[CX]-1; m_regs.w[CX]=tmp; if (ZF && tmp) { m_pc += disp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_loop)() /* Opcode 0xe2 */ { int disp = (int)((INT8)FETCH); unsigned tmp = m_regs.w[CX]-1; m_regs.w[CX]=tmp; if (tmp) { m_pc += disp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_jcxz)() /* Opcode 0xe3 */ { int disp = (int)((INT8)FETCH); if (m_regs.w[CX] == 0) { m_pc += disp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } } static void PREFIX86(_inal)() /* Opcode 0xe4 */ { unsigned port; #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif port = FETCH; m_regs.b[AL] = read_port_byte(port); } static void PREFIX86(_inax)() /* Opcode 0xe5 */ { unsigned port; #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif port = FETCH; m_regs.w[AX] = read_port_word(port); } static void PREFIX86(_outal)() /* Opcode 0xe6 */ { unsigned port; #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif port = FETCH; write_port_byte(port, m_regs.b[AL]); } static void PREFIX86(_outax)() /* Opcode 0xe7 */ { unsigned port; #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif port = FETCH; write_port_word(port, m_regs.w[AX]); } static void PREFIX86(_call_d16)() /* Opcode 0xe8 */ { WORD ip, tmp; FETCHWORD(tmp); ip = m_pc - m_base[CS]; PUSH(ip); ip += tmp; m_pc = (ip + m_base[CS]) & AMASK; CHANGE_PC(m_pc); } static void PREFIX86(_jmp_d16)() /* Opcode 0xe9 */ { WORD ip, tmp; FETCHWORD(tmp); ip = m_pc - m_base[CS] + tmp; m_pc = (ip + m_base[CS]) & AMASK; CHANGE_PC(m_pc); } static void PREFIX86(_jmp_far)() /* Opcode 0xea */ { unsigned tmp,tmp1; tmp = FETCH; tmp += FETCH << 8; tmp1 = FETCH; tmp1 += FETCH << 8; #ifdef I80286 i80286_code_descriptor(tmp1,tmp, 1); #else m_sregs[CS] = (WORD)tmp1; m_base[CS] = SegBase(CS); m_pc = (m_base[CS] + tmp) & AMASK; #endif CHANGE_PC(m_pc); } static void PREFIX86(_jmp_d8)() /* Opcode 0xeb */ { int tmp = (int)((INT8)FETCH); m_pc += tmp; /* ASG - can probably assume this is safe CHANGE_PC(m_pc);*/ } static void PREFIX86(_inaldx)() /* Opcode 0xec */ { #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif m_regs.b[AL] = read_port_byte(m_regs.w[DX]); } static void PREFIX86(_inaxdx)() /* Opcode 0xed */ { unsigned port = m_regs.w[DX]; #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif m_regs.w[AX] = read_port_word(port); } static void PREFIX86(_outdxal)() /* Opcode 0xee */ { #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif write_port_byte(m_regs.w[DX], m_regs.b[AL]); } static void PREFIX86(_outdxax)() /* Opcode 0xef */ { unsigned port = m_regs.w[DX]; #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif write_port_word(port, m_regs.w[AX]); } /* I think thats not a V20 instruction...*/ static void PREFIX86(_lock)() /* Opcode 0xf0 */ { #ifdef I80286 if(PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT,0); #endif PREFIX(_instruction)[FETCHOP](); /* un-interruptible */ } #endif static void PREFIX(_pop_ss)() /* Opcode 0x17 */ { #ifdef I80286 i80286_pop_seg(SS); #else POP(m_sregs[SS]); m_base[SS] = SegBase(SS); #endif PREFIX(_instruction)[FETCHOP](); /* no interrupt before next instruction */ } static void PREFIX(_es)() /* Opcode 0x26 */ { m_seg_prefix = TRUE; m_prefix_seg = ES; PREFIX(_instruction)[FETCHOP](); } static void PREFIX(_cs)() /* Opcode 0x2e */ { m_seg_prefix = TRUE; m_prefix_seg = CS; PREFIX(_instruction)[FETCHOP](); } static void PREFIX(_ss)() /* Opcode 0x36 */ { m_seg_prefix = TRUE; m_prefix_seg = SS; PREFIX(_instruction)[FETCHOP](); } static void PREFIX(_ds)() /* Opcode 0x3e */ { m_seg_prefix = TRUE; m_prefix_seg = DS; PREFIX(_instruction)[FETCHOP](); } static void PREFIX(_mov_sregw)() /* Opcode 0x8e */ { unsigned ModRM = FETCH; WORD src = GetRMWord(ModRM); #ifdef I80286 switch (ModRM & 0x38) { case 0x00: /* mov es,ew */ i80286_data_descriptor(ES,src); break; case 0x18: /* mov ds,ew */ i80286_data_descriptor(DS,src); break; case 0x10: /* mov ss,ew */ i80286_data_descriptor(SS,src); m_seg_prefix = FALSE; PREFIX(_instruction)[FETCHOP](); break; case 0x08: /* mov cs,ew */ PREFIX(_invalid)(); break; /* doesn't do a jump far */ } #else switch (ModRM & 0x38) { case 0x00: /* mov es,ew */ m_sregs[ES] = src; m_base[ES] = SegBase(ES); break; case 0x18: /* mov ds,ew */ m_sregs[DS] = src; m_base[DS] = SegBase(DS); break; case 0x10: /* mov ss,ew */ m_sregs[SS] = src; m_base[SS] = SegBase(SS); /* no interrupt allowed before next instr */ m_seg_prefix = FALSE; PREFIX(_instruction)[FETCHOP](); break; case 0x08: /* mov cs,ew */ #ifndef I80186 int ip = m_pc - m_base[CS]; m_sregs[CS] = src; m_base[CS] = SegBase(CS); m_pc = (ip + m_base[CS]) & AMASK; CHANGE_PC(m_pc); #endif break; } #endif } static void PREFIX(_repne)() /* Opcode 0xf2 */ { PREFIX(rep)(0); } static void PREFIX(_repe)() /* Opcode 0xf3 */ { PREFIX(rep)(1); } static void PREFIX(_sti)() /* Opcode 0xfb */ { #ifdef I80286 if(PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT,0); #endif SetIF(1); PREFIX(_instruction)[FETCHOP](); /* no interrupt before next instruction */ /* if an interrupt is pending, signal an interrupt */ if (m_irq_state) { #ifdef I80286 i80286_interrupt_descriptor(pic_ack(), 2, -1); #else PREFIX86(_interrupt)((UINT32)-1); #endif m_irq_state = CLEAR_LINE; } } #ifndef I80186 static void PREFIX86(_hlt)() /* Opcode 0xf4 */ { #ifdef I80286 if(PM && (CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0); #endif m_halted=1; } static void PREFIX86(_cmc)() /* Opcode 0xf5 */ { m_CarryVal = !CF; } static void PREFIX86(_f6pre)() { /* Opcode 0xf6 */ unsigned ModRM = FETCH; unsigned tmp = (unsigned)GetRMByte(ModRM); unsigned tmp2; switch (ModRM & 0x38) { case 0x00: /* TEST Eb, data8 */ case 0x08: /* ??? */ tmp &= FETCH; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Byte(tmp); break; case 0x10: /* NOT Eb */ PutbackRMByte(ModRM,~tmp); break; case 0x18: /* NEG Eb */ tmp2=0; SUBB(tmp2,tmp); PutbackRMByte(ModRM,tmp2); break; case 0x20: /* MUL AL, Eb */ { UINT16 result; tmp2 = m_regs.b[AL]; SetSF((INT8)tmp2); SetPF(tmp2); result = (UINT16)tmp2*tmp; m_regs.w[AX]=(WORD)result; SetZF(m_regs.w[AX]); m_CarryVal = m_OverVal = (m_regs.b[AH] != 0); } break; case 0x28: /* IMUL AL, Eb */ { INT16 result; tmp2 = (unsigned)m_regs.b[AL]; SetSF((INT8)tmp2); SetPF(tmp2); result = (INT16)((INT8)tmp2)*(INT16)((INT8)tmp); m_regs.w[AX]=(WORD)result; SetZF(m_regs.w[AX]); m_CarryVal = m_OverVal = (result >> 7 != 0) && (result >> 7 != -1); } break; case 0x30: /* DIV AL, Ew */ { UINT16 result; result = m_regs.w[AX]; if (tmp) { if ((result / tmp) > 0xff) { PREFIX(_interrupt)(0); break; } else { m_regs.b[AH] = result % tmp; m_regs.b[AL] = result / tmp; } } else { PREFIX(_interrupt)(0); break; } } break; case 0x38: /* IDIV AL, Ew */ { INT16 result; result = m_regs.w[AX]; if (tmp) { tmp2 = result % (INT16)((INT8)tmp); if ((result /= (INT16)((INT8)tmp)) > 0xff) { PREFIX(_interrupt)(0); break; } else { m_regs.b[AL] = result; m_regs.b[AH] = tmp2; } } else { PREFIX(_interrupt)(0); break; } } break; } } static void PREFIX86(_f7pre)() { /* Opcode 0xf7 */ unsigned ModRM = FETCH; unsigned tmp = GetRMWord(ModRM); unsigned tmp2; switch (ModRM & 0x38) { case 0x00: /* TEST Ew, data16 */ case 0x08: /* ??? */ tmp2 = FETCH; tmp2 += FETCH << 8; tmp &= tmp2; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Word(tmp); break; case 0x10: /* NOT Ew */ tmp = ~tmp; PutbackRMWord(ModRM,tmp); break; case 0x18: /* NEG Ew */ tmp2 = 0; SUBW(tmp2,tmp); PutbackRMWord(ModRM,tmp2); break; case 0x20: /* MUL AX, Ew */ { UINT32 result; tmp2 = m_regs.w[AX]; SetSF((INT16)tmp2); SetPF(tmp2); result = (UINT32)tmp2*tmp; m_regs.w[AX]=(WORD)result; result >>= 16; m_regs.w[DX]=result; SetZF(m_regs.w[AX] | m_regs.w[DX]); m_CarryVal = m_OverVal = (m_regs.w[DX] != 0); } break; case 0x28: /* IMUL AX, Ew */ { INT32 result; tmp2 = m_regs.w[AX]; SetSF((INT16)tmp2); SetPF(tmp2); result = (INT32)((INT16)tmp2)*(INT32)((INT16)tmp); m_CarryVal = m_OverVal = (result >> 15 != 0) && (result >> 15 != -1); m_regs.w[AX]=(WORD)result; result = (WORD)(result >> 16); m_regs.w[DX]=result; SetZF(m_regs.w[AX] | m_regs.w[DX]); } break; case 0x30: /* DIV AX, Ew */ { UINT32 result; result = (m_regs.w[DX] << 16) + m_regs.w[AX]; if (tmp) { tmp2 = result % tmp; if ((result / tmp) > 0xffff) { PREFIX(_interrupt)(0); break; } else { m_regs.w[DX]=tmp2; result /= tmp; m_regs.w[AX]=result; } } else { PREFIX(_interrupt)(0); break; } } break; case 0x38: /* IDIV AX, Ew */ { INT32 result; result = (m_regs.w[DX] << 16) + m_regs.w[AX]; if (tmp) { tmp2 = result % (INT32)((INT16)tmp); if ((result /= (INT32)((INT16)tmp)) > 0xffff) { PREFIX(_interrupt)(0); break; } else { m_regs.w[AX]=result; m_regs.w[DX]=tmp2; } } else { PREFIX(_interrupt)(0); break; } } break; } } static void PREFIX86(_clc)() /* Opcode 0xf8 */ { m_CarryVal = 0; } static void PREFIX86(_stc)() /* Opcode 0xf9 */ { m_CarryVal = 1; } static void PREFIX86(_cli)() /* Opcode 0xfa */ { #ifdef I80286 if(PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT,0); #endif SetIF(0); } static void PREFIX86(_cld)() /* Opcode 0xfc */ { SetDF(0); } static void PREFIX86(_std)() /* Opcode 0xfd */ { SetDF(1); } static void PREFIX86(_fepre)() /* Opcode 0xfe */ { unsigned ModRM = FETCH; unsigned tmp = GetRMByte(ModRM); unsigned tmp1; if ((ModRM & 0x38) == 0) /* INC eb */ { tmp1 = tmp+1; SetOFB_Add(tmp1,tmp,1); } else /* DEC eb */ { tmp1 = tmp-1; SetOFB_Sub(tmp1,1,tmp); } SetAF(tmp1,tmp,1); SetSZPF_Byte(tmp1); PutbackRMByte(ModRM,(BYTE)tmp1); } static void PREFIX86(_ffpre)() /* Opcode 0xff */ { unsigned ModRM = FETCHOP; unsigned tmp; unsigned tmp1; WORD ip; switch(ModRM & 0x38) { case 0x00: /* INC ew */ tmp = GetRMWord(ModRM); tmp1 = tmp+1; SetOFW_Add(tmp1,tmp,1); SetAF(tmp1,tmp,1); SetSZPF_Word(tmp1); PutbackRMWord(ModRM,(WORD)tmp1); break; case 0x08: /* DEC ew */ tmp = GetRMWord(ModRM); tmp1 = tmp-1; SetOFW_Sub(tmp1,1,tmp); SetAF(tmp1,tmp,1); SetSZPF_Word(tmp1); PutbackRMWord(ModRM,(WORD)tmp1); break; case 0x10: /* CALL ew */ tmp = GetRMWord(ModRM); ip = m_pc - m_base[CS]; PUSH(ip); m_pc = (m_base[CS] + (WORD)tmp) & AMASK; CHANGE_PC(m_pc); break; case 0x18: /* CALL FAR ea */ tmp = m_sregs[CS]; /* HJB 12/13/98 need to skip displacements of m_ea */ tmp1 = GetRMWord(ModRM); ip = m_pc - m_base[CS]; #ifdef I80286 i80286_code_descriptor(GetnextRMWord, tmp1, 2); #else m_sregs[CS] = GetnextRMWord; m_base[CS] = SegBase(CS); m_pc = (m_base[CS] + tmp1) & AMASK; #endif PUSH(tmp); PUSH(ip); CHANGE_PC(m_pc); break; case 0x20: /* JMP ea */ ip = GetRMWord(ModRM); m_pc = (m_base[CS] + ip) & AMASK; CHANGE_PC(m_pc); break; case 0x28: /* JMP FAR ea */ #ifdef I80286 tmp = GetRMWord(ModRM); i80286_code_descriptor(GetnextRMWord, tmp, 1); #else m_pc = GetRMWord(ModRM); m_sregs[CS] = GetnextRMWord; m_base[CS] = SegBase(CS); m_pc = (m_pc + m_base[CS]) & AMASK; #endif CHANGE_PC(m_pc); break; case 0x30: /* PUSH ea */ tmp = GetRMWord(ModRM); PUSH(tmp); break; default: tmp = GetRMWord(ModRM); // 286 doesn't matter but 8086? return PREFIX(_invalid)(); } } static void PREFIX86(_invalid)() { logerror("illegal instruction %.2x at %.5x\n",PEEKBYTE(m_pc-1), m_pc); #ifdef I80286 throw TRAP(ILLEGAL_INSTRUCTION,-1); #else /* i8086/i8088 ignore an invalid opcode. */ /* i80186/i80188 probably also ignore an invalid opcode. */ #endif } #ifndef I80286 static void PREFIX86(_invalid_2b)() { unsigned ModRM = FETCH; GetRMByte(ModRM); logerror("illegal 2 byte instruction %.2x at %.5x\n",PEEKBYTE(m_pc-2), m_pc-2); } #endif #endif ================================================ FILE: vm86/mame/emu/cpu/i86/instr86.h ================================================ #pragma once #ifndef __INSTR86_H__ #define __INSTR86_H__ /**************************************************************************** * real mode i286 emulator v1.4 by Fabrice Frances * * (initial work based on David Hedley's pcemu) * ****************************************************************************/ // file will be included in all cpu variants // put non i86 instructions in own files (i286, i386, nec) // function renaming will be added when necessary // timing value should move to separate array static void PREFIX86(_add_br8)(); static void PREFIX86(_add_wr16)(); static void PREFIX86(_add_r8b)(); static void PREFIX86(_add_r16w)(); static void PREFIX86(_add_ald8)(); static void PREFIX86(_add_axd16)(); static void PREFIX86(_push_es)(); static void PREFIX86(_pop_es)(); static void PREFIX86(_or_br8)(); static void PREFIX86(_or_r8b)(); static void PREFIX86(_or_wr16)(); static void PREFIX86(_or_r16w)(); static void PREFIX86(_or_ald8)(); static void PREFIX86(_or_axd16)(); static void PREFIX86(_push_cs)(); #ifndef I80286 static void PREFIX86(_pop_cs)(); #endif static void PREFIX86(_adc_br8)(); static void PREFIX86(_adc_wr16)(); static void PREFIX86(_adc_r8b)(); static void PREFIX86(_adc_r16w)(); static void PREFIX86(_adc_ald8)(); static void PREFIX86(_adc_axd16)(); static void PREFIX86(_push_ss)(); static void PREFIX86(_pop_ss)(); static void PREFIX86(_sbb_br8)(); static void PREFIX86(_sbb_wr16)(); static void PREFIX86(_sbb_r8b)(); static void PREFIX86(_sbb_r16w)(); static void PREFIX86(_sbb_ald8)(); static void PREFIX86(_sbb_axd16)(); static void PREFIX86(_push_ds)(); static void PREFIX86(_pop_ds)(); static void PREFIX86(_and_br8)(); static void PREFIX86(_and_r8b)(); static void PREFIX86(_and_wr16)(); static void PREFIX86(_and_r16w)(); static void PREFIX86(_and_ald8)(); static void PREFIX86(_and_axd16)(); static void PREFIX86(_es)(); static void PREFIX86(_daa)(); static void PREFIX86(_sub_br8)(); static void PREFIX86(_sub_wr16)(); static void PREFIX86(_sub_r8b)(); static void PREFIX86(_sub_r16w)(); static void PREFIX86(_sub_ald8)(); static void PREFIX86(_sub_axd16)(); static void PREFIX86(_cs)(); static void PREFIX86(_das)(); static void PREFIX86(_xor_br8)(); static void PREFIX86(_xor_r8b)(); static void PREFIX86(_xor_wr16)(); static void PREFIX86(_xor_r16w)(); static void PREFIX86(_xor_ald8)(); static void PREFIX86(_xor_axd16)(); static void PREFIX86(_ss)(); static void PREFIX86(_aaa)(); static void PREFIX86(_cmp_br8)(); static void PREFIX86(_cmp_wr16)(); static void PREFIX86(_cmp_r8b)(); static void PREFIX86(_cmp_r16w)(); static void PREFIX86(_cmp_ald8)(); static void PREFIX86(_cmp_axd16)(); static void PREFIX86(_ds)(); static void PREFIX86(_aas)(); static void PREFIX86(_inc_ax)(); static void PREFIX86(_inc_cx)(); static void PREFIX86(_inc_dx)(); static void PREFIX86(_inc_bx)(); static void PREFIX86(_inc_sp)(); static void PREFIX86(_inc_bp)(); static void PREFIX86(_inc_si)(); static void PREFIX86(_inc_di)(); static void PREFIX86(_dec_ax)(); static void PREFIX86(_dec_cx)(); static void PREFIX86(_dec_dx)(); static void PREFIX86(_dec_bx)(); static void PREFIX86(_dec_sp)(); static void PREFIX86(_dec_bp)(); static void PREFIX86(_dec_si)(); static void PREFIX86(_dec_di)(); static void PREFIX86(_push_ax)(); static void PREFIX86(_push_cx)(); static void PREFIX86(_push_dx)(); static void PREFIX86(_push_bx)(); static void PREFIX86(_push_sp)(); static void PREFIX86(_push_bp)(); static void PREFIX86(_push_si)(); static void PREFIX86(_push_di)(); static void PREFIX86(_pop_ax)(); static void PREFIX86(_pop_cx)(); static void PREFIX86(_pop_dx)(); static void PREFIX86(_pop_bx)(); static void PREFIX86(_pop_sp)(); static void PREFIX86(_pop_bp)(); static void PREFIX86(_pop_si)(); static void PREFIX86(_pop_di)(); static void PREFIX86(_jo)(); static void PREFIX86(_jno)(); static void PREFIX86(_jb)(); static void PREFIX86(_jnb)(); static void PREFIX86(_jz)(); static void PREFIX86(_jnz)(); static void PREFIX86(_jbe)(); static void PREFIX86(_jnbe)(); static void PREFIX86(_js)(); static void PREFIX86(_jns)(); static void PREFIX86(_jp)(); static void PREFIX86(_jnp)(); static void PREFIX86(_jl)(); static void PREFIX86(_jnl)(); static void PREFIX86(_jle)(); static void PREFIX86(_jnle)(); static void PREFIX86(_80pre)(); static void PREFIX86(_82pre)(); static void PREFIX86(_81pre)(); static void PREFIX86(_83pre)(); static void PREFIX86(_test_br8)(); static void PREFIX86(_test_wr16)(); static void PREFIX86(_xchg_br8)(); static void PREFIX86(_xchg_wr16)(); static void PREFIX86(_mov_br8)(); static void PREFIX86(_mov_r8b)(); static void PREFIX86(_mov_wr16)(); static void PREFIX86(_mov_r16w)(); static void PREFIX86(_mov_wsreg)(); static void PREFIX86(_lea)(); static void PREFIX86(_mov_sregw)(); static void PREFIX86(_invalid)(); #ifndef I80286 static void PREFIX86(_invalid_2b)(); #endif static void PREFIX86(_popw)(); static void PREFIX86(_nop)(); static void PREFIX86(_xchg_axcx)(); static void PREFIX86(_xchg_axdx)(); static void PREFIX86(_xchg_axbx)(); static void PREFIX86(_xchg_axsp)(); static void PREFIX86(_xchg_axbp)(); static void PREFIX86(_xchg_axsi)(); static void PREFIX86(_xchg_axdi)(); static void PREFIX86(_cbw)(); static void PREFIX86(_cwd)(); static void PREFIX86(_call_far)(); static void PREFIX86(_pushf)(); static void PREFIX86(_popf)(); static void PREFIX86(_sahf)(); static void PREFIX86(_lahf)(); static void PREFIX86(_mov_aldisp)(); static void PREFIX86(_mov_axdisp)(); static void PREFIX86(_mov_dispal)(); static void PREFIX86(_mov_dispax)(); static void PREFIX86(_movsb)(); static void PREFIX86(_movsw)(); static void PREFIX86(_cmpsb)(); static void PREFIX86(_cmpsw)(); static void PREFIX86(_test_ald8)(); static void PREFIX86(_test_axd16)(); static void PREFIX86(_stosb)(); static void PREFIX86(_stosw)(); static void PREFIX86(_lodsb)(); static void PREFIX86(_lodsw)(); static void PREFIX86(_scasb)(); static void PREFIX86(_scasw)(); static void PREFIX86(_mov_ald8)(); static void PREFIX86(_mov_cld8)(); static void PREFIX86(_mov_dld8)(); static void PREFIX86(_mov_bld8)(); static void PREFIX86(_mov_ahd8)(); static void PREFIX86(_mov_chd8)(); static void PREFIX86(_mov_dhd8)(); static void PREFIX86(_mov_bhd8)(); static void PREFIX86(_mov_axd16)(); static void PREFIX86(_mov_cxd16)(); static void PREFIX86(_mov_dxd16)(); static void PREFIX86(_mov_bxd16)(); static void PREFIX86(_mov_spd16)(); static void PREFIX86(_mov_bpd16)(); static void PREFIX86(_mov_sid16)(); static void PREFIX86(_mov_did16)(); static void PREFIX86(_ret_d16)(); static void PREFIX86(_ret)(); static void PREFIX86(_les_dw)(); static void PREFIX86(_lds_dw)(); static void PREFIX86(_mov_bd8)(); static void PREFIX86(_mov_wd16)(); static void PREFIX86(_retf_d16)(); static void PREFIX86(_retf)(); static void PREFIX86(_int3)(); static void PREFIX86(_int)(); static void PREFIX86(_into)(); static void PREFIX86(_iret)(); static void PREFIX86(_rotshft_b)(); static void PREFIX86(_rotshft_w)(); static void PREFIX86(_rotshft_bcl)(); static void PREFIX86(_rotshft_wcl)(); static void PREFIX86(_aam)(); static void PREFIX86(_aad)(); static void PREFIX86(_xlat)(); static void PREFIX86(_escape)(); static void PREFIX86(_loopne)(); static void PREFIX86(_loope)(); static void PREFIX86(_loop)(); static void PREFIX86(_jcxz)(); static void PREFIX86(_inal)(); static void PREFIX86(_inax)(); static void PREFIX86(_outal)(); static void PREFIX86(_outax)(); static void PREFIX86(_call_d16)(); static void PREFIX86(_jmp_d16)(); static void PREFIX86(_jmp_far)(); static void PREFIX86(_jmp_d8)(); static void PREFIX86(_inaldx)(); static void PREFIX86(_inaxdx)(); static void PREFIX86(_outdxal)(); static void PREFIX86(_outdxax)(); static void PREFIX86(_lock)(); static void PREFIX86(_repne)(); static void PREFIX86(_repe)(); static void PREFIX86(_hlt)(); static void PREFIX86(_cmc)(); static void PREFIX86(_f6pre)(); static void PREFIX86(_f7pre)(); static void PREFIX86(_clc)(); static void PREFIX86(_stc)(); static void PREFIX86(_cli)(); static void PREFIX86(_sti)(); static void PREFIX86(_cld)(); static void PREFIX86(_std)(); static void PREFIX86(_fepre)(); static void PREFIX86(_ffpre)(); static void PREFIX86(_wait)(); #endif /* __INSTR86_H__ */ ================================================ FILE: vm86/mame/emu/cpu/i86/modrm.h ================================================ static struct { struct { WREGS w[256]; BREGS b[256]; } reg; struct { WREGS w[256]; BREGS b[256]; } RM; } Mod_RM; #define RegWord(ModRM) m_regs.w[Mod_RM.reg.w[ModRM]] #define RegByte(ModRM) m_regs.b[Mod_RM.reg.b[ModRM]] #define GetRMWord(ModRM) \ ((ModRM) >= 0xc0 ? m_regs.w[Mod_RM.RM.w[ModRM]] : ( (*GetEA[ModRM])(), ReadWord( m_ea ) )) #define PutbackRMWord(ModRM,val) \ { \ if (ModRM >= 0xc0) m_regs.w[Mod_RM.RM.w[ModRM]]=val; \ else WriteWord(m_ea,val); \ } #define GetnextRMWord ReadWord(m_ea+2) #define GetRMWordOffset(offs) \ ReadWord(m_ea-m_eo+(UINT16)(m_eo+offs)) #define GetRMByteOffset(offs) \ ReadByte(m_ea-m_eo+(UINT16)(m_eo+offs)) #define PutRMWord(ModRM,val) \ { \ if (ModRM >= 0xc0) \ m_regs.w[Mod_RM.RM.w[ModRM]]=val; \ else { \ (*GetEA[ModRM])(); \ WriteWord( m_ea ,val); \ } \ } #define PutRMWordOffset(offs, val) \ WriteWord( m_ea-m_eo+(UINT16)(m_eo+offs), val) #define PutRMByteOffset(offs, val) \ WriteByte( m_ea-m_eo+(UINT16)(m_eo+offs), val) #define PutImmRMWord(ModRM) \ { \ WORD val; \ if (ModRM >= 0xc0) \ FETCHWORD(m_regs.w[Mod_RM.RM.w[ModRM]]) \ else { \ (*GetEA[ModRM])(); \ FETCHWORD(val) \ WriteWord( m_ea , val); \ } \ } #define GetRMByte(ModRM) \ ((ModRM) >= 0xc0 ? m_regs.b[Mod_RM.RM.b[ModRM]] : ReadByte( (*GetEA[ModRM])() )) #define PutRMByte(ModRM,val) \ { \ if (ModRM >= 0xc0) \ m_regs.b[Mod_RM.RM.b[ModRM]]=val; \ else \ WriteByte( (*GetEA[ModRM])() ,val); \ } #define PutImmRMByte(ModRM) \ { \ if (ModRM >= 0xc0) \ m_regs.b[Mod_RM.RM.b[ModRM]]=FETCH; \ else { \ (*GetEA[ModRM])(); \ WriteByte( m_ea , FETCH ); \ } \ } #define PutbackRMByte(ModRM,val) \ { \ if (ModRM >= 0xc0) \ m_regs.b[Mod_RM.RM.b[ModRM]]=val; \ else \ WriteByte(m_ea,val); \ } #define DEF_br8(dst,src) \ unsigned ModRM = FETCHOP; \ unsigned src = RegByte(ModRM); \ unsigned dst = GetRMByte(ModRM) #define DEF_wr16(dst,src) \ unsigned ModRM = FETCHOP; \ unsigned src = RegWord(ModRM); \ unsigned dst = GetRMWord(ModRM) #define DEF_r8b(dst,src) \ unsigned ModRM = FETCHOP; \ unsigned dst = RegByte(ModRM); \ unsigned src = GetRMByte(ModRM) #define DEF_r16w(dst,src) \ unsigned ModRM = FETCHOP; \ unsigned dst = RegWord(ModRM); \ unsigned src = GetRMWord(ModRM) #define DEF_ald8(dst,src) \ unsigned src = FETCHOP; \ unsigned dst = m_regs.b[AL] #define DEF_axd16(dst,src) \ unsigned src = FETCHOP; \ unsigned dst = m_regs.w[AX]; \ src += (FETCH << 8) ================================================ FILE: vm86/mame/emu/cpu/i86/modrm286.h ================================================ static struct { struct { WREGS w[256]; BREGS b[256]; } reg; struct { WREGS w[256]; BREGS b[256]; } RM; } Mod_RM; #define RegWord(ModRM) m_regs.w[Mod_RM.reg.w[ModRM]] #define RegByte(ModRM) m_regs.b[Mod_RM.reg.b[ModRM]] #define GetRMWord(ModRM) \ ((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 ) )) #define PutbackRMWord(ModRM,val) \ { \ if (ModRM >= 0xc0) m_regs.w[Mod_RM.RM.w[ModRM]]=val; \ else \ { \ i80286_check_permission(m_ea_seg, m_eo, I80286_WORD, I80286_WRITE); \ WriteWord(m_ea,val); \ } \ } #define GetnextRMWord \ ( \ i80286_check_permission(m_ea_seg, m_ea + 2 - m_base[m_ea_seg], I80286_WORD, I80286_READ), \ ReadWord(m_ea+2) \ ) #define GetRMWordOffset(offs) \ ( \ i80286_check_permission(m_ea_seg, (UINT16)(m_eo+offs), I80286_WORD, I80286_READ), \ ReadWord(m_ea-m_eo+(UINT16)(m_eo+offs)) \ ) #define GetRMByteOffset(offs) \ ( \ i80286_check_permission(m_ea_seg, (UINT16)(m_eo+offs), I80286_BYTE, I80286_READ), \ ReadByte(m_ea-m_eo+(UINT16)(m_eo+offs)) \ ) #define PutRMWord(ModRM,val) \ { \ if (ModRM >= 0xc0) \ m_regs.w[Mod_RM.RM.w[ModRM]]=val; \ else { \ (*GetEA[ModRM])(); \ i80286_check_permission(m_ea_seg, m_eo, I80286_WORD, I80286_WRITE); \ WriteWord( m_ea ,val); \ } \ } #define PutRMWordOffset(offs, val) \ i80286_check_permission(m_ea_seg, (UINT16)(m_eo+offs), I80286_WORD, I80286_WRITE); \ WriteWord( m_ea-m_eo+(UINT16)(m_eo+offs), val) #define PutRMByteOffset(offs, val) \ i80286_check_permission(m_ea_seg, (UINT16)(m_eo+offs), I80286_BYTE, I80286_WRITE); \ WriteByte( m_ea-m_eo+(UINT16)(m_eo+offs), val) #define PutImmRMWord(ModRM) \ { \ WORD val; \ if (ModRM >= 0xc0) \ FETCHWORD(m_regs.w[Mod_RM.RM.w[ModRM]]) \ else { \ (*GetEA[ModRM])(); \ i80286_check_permission(m_ea_seg, m_eo, I80286_WORD, I80286_WRITE); \ FETCHWORD(val) \ WriteWord( m_ea , val); \ } \ } #define GetRMByte(ModRM) \ ((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 )) ) #define PutRMByte(ModRM,val) \ { \ if (ModRM >= 0xc0) \ m_regs.b[Mod_RM.RM.b[ModRM]]=val; \ else \ { \ (*GetEA[ModRM])(); \ i80286_check_permission(m_ea_seg, m_eo, I80286_BYTE, I80286_WRITE); \ WriteByte( m_ea,val); \ } \ } #define PutImmRMByte(ModRM) \ { \ if (ModRM >= 0xc0) \ m_regs.b[Mod_RM.RM.b[ModRM]]=FETCH; \ else { \ (*GetEA[ModRM])(); \ i80286_check_permission(m_ea_seg, m_eo, I80286_BYTE, I80286_WRITE); \ WriteByte( m_ea , FETCH ); \ } \ } #define PutbackRMByte(ModRM,val) \ { \ if (ModRM >= 0xc0) \ m_regs.b[Mod_RM.RM.b[ModRM]]=val; \ else \ { \ i80286_check_permission(m_ea_seg, m_eo, I80286_BYTE, I80286_WRITE); \ WriteByte(m_ea,val); \ } \ } #define DEF_br8(dst,src) \ unsigned ModRM = FETCHOP; \ unsigned src = RegByte(ModRM); \ unsigned dst = GetRMByte(ModRM) #define DEF_wr16(dst,src) \ unsigned ModRM = FETCHOP; \ unsigned src = RegWord(ModRM); \ unsigned dst = GetRMWord(ModRM) #define DEF_r8b(dst,src) \ unsigned ModRM = FETCHOP; \ unsigned dst = RegByte(ModRM); \ unsigned src = GetRMByte(ModRM) #define DEF_r16w(dst,src) \ unsigned ModRM = FETCHOP; \ unsigned dst = RegWord(ModRM); \ unsigned src = GetRMWord(ModRM) #define DEF_ald8(dst,src) \ unsigned src = FETCHOP; \ unsigned dst = m_regs.b[AL] #define DEF_axd16(dst,src) \ unsigned src = FETCHOP; \ unsigned dst = m_regs.w[AX]; \ src += (FETCH << 8) ================================================ FILE: vm86/mame/emu/cpu/i86/readme_msdos_player.txt ================================================ Based on MAME 0.149. i8086_state/i80286_state are removed and all their members are changed to global variables. All registers can be accessed directly without cpustate->. Timing codes are removed. ================================================ FILE: vm86/mame/emu/cpu/i86/table186.h ================================================ static void (*const PREFIX186(_instruction)[256])() = { PREFIX86(_add_br8), /* 0x00 */ PREFIX86(_add_wr16), /* 0x01 */ PREFIX86(_add_r8b), /* 0x02 */ PREFIX86(_add_r16w), /* 0x03 */ PREFIX86(_add_ald8), /* 0x04 */ PREFIX86(_add_axd16), /* 0x05 */ PREFIX86(_push_es), /* 0x06 */ PREFIX86(_pop_es), /* 0x07 */ PREFIX86(_or_br8), /* 0x08 */ PREFIX86(_or_wr16), /* 0x09 */ PREFIX86(_or_r8b), /* 0x0a */ PREFIX86(_or_r16w), /* 0x0b */ PREFIX86(_or_ald8), /* 0x0c */ PREFIX86(_or_axd16), /* 0x0d */ PREFIX86(_push_cs), /* 0x0e */ PREFIX86(_invalid), PREFIX86(_adc_br8), /* 0x10 */ PREFIX86(_adc_wr16), /* 0x11 */ PREFIX86(_adc_r8b), /* 0x12 */ PREFIX86(_adc_r16w), /* 0x13 */ PREFIX86(_adc_ald8), /* 0x14 */ PREFIX86(_adc_axd16), /* 0x15 */ PREFIX86(_push_ss), /* 0x16 */ PREFIX186(_pop_ss), /* 0x17 */ PREFIX86(_sbb_br8), /* 0x18 */ PREFIX86(_sbb_wr16), /* 0x19 */ PREFIX86(_sbb_r8b), /* 0x1a */ PREFIX86(_sbb_r16w), /* 0x1b */ PREFIX86(_sbb_ald8), /* 0x1c */ PREFIX86(_sbb_axd16), /* 0x1d */ PREFIX86(_push_ds), /* 0x1e */ PREFIX86(_pop_ds), /* 0x1f */ PREFIX86(_and_br8), /* 0x20 */ PREFIX86(_and_wr16), /* 0x21 */ PREFIX86(_and_r8b), /* 0x22 */ PREFIX86(_and_r16w), /* 0x23 */ PREFIX86(_and_ald8), /* 0x24 */ PREFIX86(_and_axd16), /* 0x25 */ PREFIX186(_es), /* 0x26 */ PREFIX86(_daa), /* 0x27 */ PREFIX86(_sub_br8), /* 0x28 */ PREFIX86(_sub_wr16), /* 0x29 */ PREFIX86(_sub_r8b), /* 0x2a */ PREFIX86(_sub_r16w), /* 0x2b */ PREFIX86(_sub_ald8), /* 0x2c */ PREFIX86(_sub_axd16), /* 0x2d */ PREFIX186(_cs), /* 0x2e */ PREFIX86(_das), /* 0x2f */ PREFIX86(_xor_br8), /* 0x30 */ PREFIX86(_xor_wr16), /* 0x31 */ PREFIX86(_xor_r8b), /* 0x32 */ PREFIX86(_xor_r16w), /* 0x33 */ PREFIX86(_xor_ald8), /* 0x34 */ PREFIX86(_xor_axd16), /* 0x35 */ PREFIX186(_ss), /* 0x36 */ PREFIX86(_aaa), /* 0x37 */ PREFIX86(_cmp_br8), /* 0x38 */ PREFIX86(_cmp_wr16), /* 0x39 */ PREFIX86(_cmp_r8b), /* 0x3a */ PREFIX86(_cmp_r16w), /* 0x3b */ PREFIX86(_cmp_ald8), /* 0x3c */ PREFIX86(_cmp_axd16), /* 0x3d */ PREFIX186(_ds), /* 0x3e */ PREFIX86(_aas), /* 0x3f */ PREFIX86(_inc_ax), /* 0x40 */ PREFIX86(_inc_cx), /* 0x41 */ PREFIX86(_inc_dx), /* 0x42 */ PREFIX86(_inc_bx), /* 0x43 */ PREFIX86(_inc_sp), /* 0x44 */ PREFIX86(_inc_bp), /* 0x45 */ PREFIX86(_inc_si), /* 0x46 */ PREFIX86(_inc_di), /* 0x47 */ PREFIX86(_dec_ax), /* 0x48 */ PREFIX86(_dec_cx), /* 0x49 */ PREFIX86(_dec_dx), /* 0x4a */ PREFIX86(_dec_bx), /* 0x4b */ PREFIX86(_dec_sp), /* 0x4c */ PREFIX86(_dec_bp), /* 0x4d */ PREFIX86(_dec_si), /* 0x4e */ PREFIX86(_dec_di), /* 0x4f */ PREFIX86(_push_ax), /* 0x50 */ PREFIX86(_push_cx), /* 0x51 */ PREFIX86(_push_dx), /* 0x52 */ PREFIX86(_push_bx), /* 0x53 */ PREFIX86(_push_sp), /* 0x54 */ PREFIX86(_push_bp), /* 0x55 */ PREFIX86(_push_si), /* 0x56 */ PREFIX86(_push_di), /* 0x57 */ PREFIX86(_pop_ax), /* 0x58 */ PREFIX86(_pop_cx), /* 0x59 */ PREFIX86(_pop_dx), /* 0x5a */ PREFIX86(_pop_bx), /* 0x5b */ PREFIX86(_pop_sp), /* 0x5c */ PREFIX86(_pop_bp), /* 0x5d */ PREFIX86(_pop_si), /* 0x5e */ PREFIX86(_pop_di), /* 0x5f */ PREFIX186(_pusha), /* 0x60 */ PREFIX186(_popa), /* 0x61 */ PREFIX186(_bound), /* 0x62 */ PREFIX86(_invalid), PREFIX86(_invalid), PREFIX86(_invalid), PREFIX86(_invalid), PREFIX86(_invalid), PREFIX186(_push_d16), /* 0x68 */ PREFIX186(_imul_d16), /* 0x69 */ PREFIX186(_push_d8), /* 0x6a */ PREFIX186(_imul_d8), /* 0x6b */ PREFIX186(_insb), /* 0x6c */ PREFIX186(_insw), /* 0x6d */ PREFIX186(_outsb), /* 0x6e */ PREFIX186(_outsw), /* 0x6f */ PREFIX86(_jo), /* 0x70 */ PREFIX86(_jno), /* 0x71 */ PREFIX86(_jb), /* 0x72 */ PREFIX86(_jnb), /* 0x73 */ PREFIX86(_jz), /* 0x74 */ PREFIX86(_jnz), /* 0x75 */ PREFIX86(_jbe), /* 0x76 */ PREFIX86(_jnbe), /* 0x77 */ PREFIX86(_js), /* 0x78 */ PREFIX86(_jns), /* 0x79 */ PREFIX86(_jp), /* 0x7a */ PREFIX86(_jnp), /* 0x7b */ PREFIX86(_jl), /* 0x7c */ PREFIX86(_jnl), /* 0x7d */ PREFIX86(_jle), /* 0x7e */ PREFIX86(_jnle), /* 0x7f */ PREFIX86(_80pre), /* 0x80 */ PREFIX86(_81pre), /* 0x81 */ PREFIX86(_82pre), /* 0x82 */ PREFIX86(_83pre), /* 0x83 */ PREFIX86(_test_br8), /* 0x84 */ PREFIX86(_test_wr16), /* 0x85 */ PREFIX86(_xchg_br8), /* 0x86 */ PREFIX86(_xchg_wr16), /* 0x87 */ PREFIX86(_mov_br8), /* 0x88 */ PREFIX86(_mov_wr16), /* 0x89 */ PREFIX86(_mov_r8b), /* 0x8a */ PREFIX86(_mov_r16w), /* 0x8b */ PREFIX86(_mov_wsreg), /* 0x8c */ PREFIX86(_lea), /* 0x8d */ PREFIX186(_mov_sregw), /* 0x8e */ PREFIX86(_popw), /* 0x8f */ PREFIX86(_nop), /* 0x90 */ PREFIX86(_xchg_axcx), /* 0x91 */ PREFIX86(_xchg_axdx), /* 0x92 */ PREFIX86(_xchg_axbx), /* 0x93 */ PREFIX86(_xchg_axsp), /* 0x94 */ PREFIX86(_xchg_axbp), /* 0x95 */ PREFIX86(_xchg_axsi), /* 0x97 */ PREFIX86(_xchg_axdi), /* 0x97 */ PREFIX86(_cbw), /* 0x98 */ PREFIX86(_cwd), /* 0x99 */ PREFIX86(_call_far), /* 0x9a */ PREFIX86(_wait), /* 0x9b */ PREFIX86(_pushf), /* 0x9c */ PREFIX86(_popf), /* 0x9d */ PREFIX86(_sahf), /* 0x9e */ PREFIX86(_lahf), /* 0x9f */ PREFIX86(_mov_aldisp), /* 0xa0 */ PREFIX86(_mov_axdisp), /* 0xa1 */ PREFIX86(_mov_dispal), /* 0xa2 */ PREFIX86(_mov_dispax), /* 0xa3 */ PREFIX86(_movsb), /* 0xa4 */ PREFIX86(_movsw), /* 0xa5 */ PREFIX86(_cmpsb), /* 0xa6 */ PREFIX86(_cmpsw), /* 0xa7 */ PREFIX86(_test_ald8), /* 0xa8 */ PREFIX86(_test_axd16), /* 0xa9 */ PREFIX86(_stosb), /* 0xaa */ PREFIX86(_stosw), /* 0xab */ PREFIX86(_lodsb), /* 0xac */ PREFIX86(_lodsw), /* 0xad */ PREFIX86(_scasb), /* 0xae */ PREFIX86(_scasw), /* 0xaf */ PREFIX86(_mov_ald8), /* 0xb0 */ PREFIX86(_mov_cld8), /* 0xb1 */ PREFIX86(_mov_dld8), /* 0xb2 */ PREFIX86(_mov_bld8), /* 0xb3 */ PREFIX86(_mov_ahd8), /* 0xb4 */ PREFIX86(_mov_chd8), /* 0xb5 */ PREFIX86(_mov_dhd8), /* 0xb6 */ PREFIX86(_mov_bhd8), /* 0xb7 */ PREFIX86(_mov_axd16), /* 0xb8 */ PREFIX86(_mov_cxd16), /* 0xb9 */ PREFIX86(_mov_dxd16), /* 0xba */ PREFIX86(_mov_bxd16), /* 0xbb */ PREFIX86(_mov_spd16), /* 0xbc */ PREFIX86(_mov_bpd16), /* 0xbd */ PREFIX86(_mov_sid16), /* 0xbe */ PREFIX86(_mov_did16), /* 0xbf */ PREFIX186(_rotshft_bd8), /* 0xc0 */ PREFIX186(_rotshft_wd8), /* 0xc1 */ PREFIX86(_ret_d16), /* 0xc2 */ PREFIX86(_ret), /* 0xc3 */ PREFIX86(_les_dw), /* 0xc4 */ PREFIX86(_lds_dw), /* 0xc5 */ PREFIX86(_mov_bd8), /* 0xc6 */ PREFIX86(_mov_wd16), /* 0xc7 */ PREFIX186(_enter), /* 0xc8 */ PREFIX186(_leave), /* 0xc9 */ PREFIX86(_retf_d16), /* 0xca */ PREFIX86(_retf), /* 0xcb */ PREFIX86(_int3), /* 0xcc */ PREFIX86(_int), /* 0xcd */ PREFIX86(_into), /* 0xce */ PREFIX86(_iret), /* 0xcf */ PREFIX86(_rotshft_b), /* 0xd0 */ PREFIX86(_rotshft_w), /* 0xd1 */ PREFIX186(_rotshft_bcl), /* 0xd2 */ PREFIX186(_rotshft_wcl), /* 0xd3 */ PREFIX86(_aam), /* 0xd4 */ PREFIX86(_aad), /* 0xd5 */ PREFIX86(_invalid), PREFIX86(_xlat), /* 0xd7 */ PREFIX86(_escape), /* 0xd8 */ PREFIX86(_escape), /* 0xd9 */ PREFIX86(_escape), /* 0xda */ PREFIX86(_escape), /* 0xdb */ PREFIX86(_escape), /* 0xdc */ PREFIX86(_escape), /* 0xdd */ PREFIX86(_escape), /* 0xde */ PREFIX86(_escape), /* 0xdf */ PREFIX86(_loopne), /* 0xe0 */ PREFIX86(_loope), /* 0xe1 */ PREFIX86(_loop), /* 0xe2 */ PREFIX86(_jcxz), /* 0xe3 */ PREFIX86(_inal), /* 0xe4 */ PREFIX86(_inax), /* 0xe5 */ PREFIX86(_outal), /* 0xe6 */ PREFIX86(_outax), /* 0xe7 */ PREFIX86(_call_d16), /* 0xe8 */ PREFIX86(_jmp_d16), /* 0xe9 */ PREFIX86(_jmp_far), /* 0xea */ PREFIX86(_jmp_d8), /* 0xeb */ PREFIX86(_inaldx), /* 0xec */ PREFIX86(_inaxdx), /* 0xed */ PREFIX86(_outdxal), /* 0xee */ PREFIX86(_outdxax), /* 0xef */ PREFIX86(_lock), /* 0xf0 */ PREFIX86(_invalid), /* 0xf1 */ PREFIX186(_repne), /* 0xf2 */ PREFIX186(_repe), /* 0xf3 */ PREFIX86(_hlt), /* 0xf4 */ PREFIX86(_cmc), /* 0xf5 */ PREFIX86(_f6pre), /* 0xf6 */ PREFIX86(_f7pre), /* 0xf7 */ PREFIX86(_clc), /* 0xf8 */ PREFIX86(_stc), /* 0xf9 */ PREFIX86(_cli), /* 0xfa */ PREFIX186(_sti), /* 0xfb */ PREFIX86(_cld), /* 0xfc */ PREFIX86(_std), /* 0xfd */ PREFIX86(_fepre), /* 0xfe */ PREFIX86(_ffpre) /* 0xff */ }; #if defined(BIGCASE) && !defined(RS6000) /* Some compilers cannot handle large case statements */ #define TABLE186 \ switch(FETCHOP)\ {\ case 0x00: PREFIX86(_add_br8)(); break;\ case 0x01: PREFIX86(_add_wr16)(); break;\ case 0x02: PREFIX86(_add_r8b)(); break;\ case 0x03: PREFIX86(_add_r16w)(); break;\ case 0x04: PREFIX86(_add_ald8)(); break;\ case 0x05: PREFIX86(_add_axd16)(); break;\ case 0x06: PREFIX86(_push_es)(); break;\ case 0x07: PREFIX86(_pop_es)(); break;\ case 0x08: PREFIX86(_or_br8)(); break;\ case 0x09: PREFIX86(_or_wr16)(); break;\ case 0x0a: PREFIX86(_or_r8b)(); break;\ case 0x0b: PREFIX86(_or_r16w)(); break;\ case 0x0c: PREFIX86(_or_ald8)(); break;\ case 0x0d: PREFIX86(_or_axd16)(); break;\ case 0x0e: PREFIX86(_push_cs)(); break;\ case 0x0f: PREFIX86(_invalid)(); break;\ case 0x10: PREFIX86(_adc_br8)(); break;\ case 0x11: PREFIX86(_adc_wr16)(); break;\ case 0x12: PREFIX86(_adc_r8b)(); break;\ case 0x13: PREFIX86(_adc_r16w)(); break;\ case 0x14: PREFIX86(_adc_ald8)(); break;\ case 0x15: PREFIX86(_adc_axd16)(); break;\ case 0x16: PREFIX86(_push_ss)(); break;\ case 0x17: PREFIX86(_pop_ss)(); break;\ case 0x18: PREFIX86(_sbb_br8)(); break;\ case 0x19: PREFIX86(_sbb_wr16)(); break;\ case 0x1a: PREFIX86(_sbb_r8b)(); break;\ case 0x1b: PREFIX86(_sbb_r16w)(); break;\ case 0x1c: PREFIX86(_sbb_ald8)(); break;\ case 0x1d: PREFIX86(_sbb_axd16)(); break;\ case 0x1e: PREFIX86(_push_ds)(); break;\ case 0x1f: PREFIX86(_pop_ds)(); break;\ case 0x20: PREFIX86(_and_br8)(); break;\ case 0x21: PREFIX86(_and_wr16)(); break;\ case 0x22: PREFIX86(_and_r8b)(); break;\ case 0x23: PREFIX86(_and_r16w)(); break;\ case 0x24: PREFIX86(_and_ald8)(); break;\ case 0x25: PREFIX86(_and_axd16)(); break;\ case 0x26: PREFIX86(_es)(); break;\ case 0x27: PREFIX86(_daa)(); break;\ case 0x28: PREFIX86(_sub_br8)(); break;\ case 0x29: PREFIX86(_sub_wr16)(); break;\ case 0x2a: PREFIX86(_sub_r8b)(); break;\ case 0x2b: PREFIX86(_sub_r16w)(); break;\ case 0x2c: PREFIX86(_sub_ald8)(); break;\ case 0x2d: PREFIX86(_sub_axd16)(); break;\ case 0x2e: PREFIX86(_cs)(); break;\ case 0x2f: PREFIX86(_das)(); break;\ case 0x30: PREFIX86(_xor_br8)(); break;\ case 0x31: PREFIX86(_xor_wr16)(); break;\ case 0x32: PREFIX86(_xor_r8b)(); break;\ case 0x33: PREFIX86(_xor_r16w)(); break;\ case 0x34: PREFIX86(_xor_ald8)(); break;\ case 0x35: PREFIX86(_xor_axd16)(); break;\ case 0x36: PREFIX86(_ss)(); break;\ case 0x37: PREFIX86(_aaa)(); break;\ case 0x38: PREFIX86(_cmp_br8)(); break;\ case 0x39: PREFIX86(_cmp_wr16)(); break;\ case 0x3a: PREFIX86(_cmp_r8b)(); break;\ case 0x3b: PREFIX86(_cmp_r16w)(); break;\ case 0x3c: PREFIX86(_cmp_ald8)(); break;\ case 0x3d: PREFIX86(_cmp_axd16)(); break;\ case 0x3e: PREFIX86(_ds)(); break;\ case 0x3f: PREFIX86(_aas)(); break;\ case 0x40: PREFIX86(_inc_ax)(); break;\ case 0x41: PREFIX86(_inc_cx)(); break;\ case 0x42: PREFIX86(_inc_dx)(); break;\ case 0x43: PREFIX86(_inc_bx)(); break;\ case 0x44: PREFIX86(_inc_sp)(); break;\ case 0x45: PREFIX86(_inc_bp)(); break;\ case 0x46: PREFIX86(_inc_si)(); break;\ case 0x47: PREFIX86(_inc_di)(); break;\ case 0x48: PREFIX86(_dec_ax)(); break;\ case 0x49: PREFIX86(_dec_cx)(); break;\ case 0x4a: PREFIX86(_dec_dx)(); break;\ case 0x4b: PREFIX86(_dec_bx)(); break;\ case 0x4c: PREFIX86(_dec_sp)(); break;\ case 0x4d: PREFIX86(_dec_bp)(); break;\ case 0x4e: PREFIX86(_dec_si)(); break;\ case 0x4f: PREFIX86(_dec_di)(); break;\ case 0x50: PREFIX86(_push_ax)(); break;\ case 0x51: PREFIX86(_push_cx)(); break;\ case 0x52: PREFIX86(_push_dx)(); break;\ case 0x53: PREFIX86(_push_bx)(); break;\ case 0x54: PREFIX86(_push_sp)(); break;\ case 0x55: PREFIX86(_push_bp)(); break;\ case 0x56: PREFIX86(_push_si)(); break;\ case 0x57: PREFIX86(_push_di)(); break;\ case 0x58: PREFIX86(_pop_ax)(); break;\ case 0x59: PREFIX86(_pop_cx)(); break;\ case 0x5a: PREFIX86(_pop_dx)(); break;\ case 0x5b: PREFIX86(_pop_bx)(); break;\ case 0x5c: PREFIX86(_pop_sp)(); break;\ case 0x5d: PREFIX86(_pop_bp)(); break;\ case 0x5e: PREFIX86(_pop_si)(); break;\ case 0x5f: PREFIX86(_pop_di)(); break;\ case 0x60: PREFIX186(_pusha)(); break;\ case 0x61: PREFIX186(_popa)(); break;\ case 0x62: PREFIX186(_bound)(); break;\ case 0x63: PREFIX86(_invalid)(); break;\ case 0x64: PREFIX86(_invalid)(); break;\ case 0x65: PREFIX86(_invalid)(); break;\ case 0x66: PREFIX86(_invalid)(); break;\ case 0x67: PREFIX86(_invalid)(); break;\ case 0x68: PREFIX186(_push_d16)(); break;\ case 0x69: PREFIX186(_imul_d16)(); break;\ case 0x6a: PREFIX186(_push_d8)(); break;\ case 0x6b: PREFIX186(_imul_d8)(); break;\ case 0x6c: PREFIX186(_insb)(); break;\ case 0x6d: PREFIX186(_insw)(); break;\ case 0x6e: PREFIX186(_outsb)(); break;\ case 0x6f: PREFIX186(_outsw)(); break;\ case 0x70: PREFIX86(_jo)(); break;\ case 0x71: PREFIX86(_jno)(); break;\ case 0x72: PREFIX86(_jb)(); break;\ case 0x73: PREFIX86(_jnb)(); break;\ case 0x74: PREFIX86(_jz)(); break;\ case 0x75: PREFIX86(_jnz)(); break;\ case 0x76: PREFIX86(_jbe)(); break;\ case 0x77: PREFIX86(_jnbe)(); break;\ case 0x78: PREFIX86(_js)(); break;\ case 0x79: PREFIX86(_jns)(); break;\ case 0x7a: PREFIX86(_jp)(); break;\ case 0x7b: PREFIX86(_jnp)(); break;\ case 0x7c: PREFIX86(_jl)(); break;\ case 0x7d: PREFIX86(_jnl)(); break;\ case 0x7e: PREFIX86(_jle)(); break;\ case 0x7f: PREFIX86(_jnle)(); break;\ case 0x80: PREFIX86(_80pre)(); break;\ case 0x81: PREFIX86(_81pre)(); break;\ case 0x82: PREFIX86(_82pre)(); break;\ case 0x83: PREFIX86(_83pre)(); break;\ case 0x84: PREFIX86(_test_br8)(); break;\ case 0x85: PREFIX86(_test_wr16)(); break;\ case 0x86: PREFIX86(_xchg_br8)(); break;\ case 0x87: PREFIX86(_xchg_wr16)(); break;\ case 0x88: PREFIX86(_mov_br8)(); break;\ case 0x89: PREFIX86(_mov_wr16)(); break;\ case 0x8a: PREFIX86(_mov_r8b)(); break;\ case 0x8b: PREFIX86(_mov_r16w)(); break;\ case 0x8c: PREFIX86(_mov_wsreg)(); break;\ case 0x8d: PREFIX86(_lea)(); break;\ case 0x8e: PREFIX86(_mov_sregw)(); break;\ case 0x8f: PREFIX86(_popw)(); break;\ case 0x90: PREFIX86(_nop)(); break;\ case 0x91: PREFIX86(_xchg_axcx)(); break;\ case 0x92: PREFIX86(_xchg_axdx)(); break;\ case 0x93: PREFIX86(_xchg_axbx)(); break;\ case 0x94: PREFIX86(_xchg_axsp)(); break;\ case 0x95: PREFIX86(_xchg_axbp)(); break;\ case 0x96: PREFIX86(_xchg_axsi)(); break;\ case 0x97: PREFIX86(_xchg_axdi)(); break;\ case 0x98: PREFIX86(_cbw)(); break;\ case 0x99: PREFIX86(_cwd)(); break;\ case 0x9a: PREFIX86(_call_far)(); break;\ case 0x9b: PREFIX86(_wait)(); break;\ case 0x9c: PREFIX86(_pushf)(); break;\ case 0x9d: PREFIX86(_popf)(); break;\ case 0x9e: PREFIX86(_sahf)(); break;\ case 0x9f: PREFIX86(_lahf)(); break;\ case 0xa0: PREFIX86(_mov_aldisp)(); break;\ case 0xa1: PREFIX86(_mov_axdisp)(); break;\ case 0xa2: PREFIX86(_mov_dispal)(); break;\ case 0xa3: PREFIX86(_mov_dispax)(); break;\ case 0xa4: PREFIX86(_movsb)(); break;\ case 0xa5: PREFIX86(_movsw)(); break;\ case 0xa6: PREFIX86(_cmpsb)(); break;\ case 0xa7: PREFIX86(_cmpsw)(); break;\ case 0xa8: PREFIX86(_test_ald8)(); break;\ case 0xa9: PREFIX86(_test_axd16)(); break;\ case 0xaa: PREFIX86(_stosb)(); break;\ case 0xab: PREFIX86(_stosw)(); break;\ case 0xac: PREFIX86(_lodsb)(); break;\ case 0xad: PREFIX86(_lodsw)(); break;\ case 0xae: PREFIX86(_scasb)(); break;\ case 0xaf: PREFIX86(_scasw)(); break;\ case 0xb0: PREFIX86(_mov_ald8)(); break;\ case 0xb1: PREFIX86(_mov_cld8)(); break;\ case 0xb2: PREFIX86(_mov_dld8)(); break;\ case 0xb3: PREFIX86(_mov_bld8)(); break;\ case 0xb4: PREFIX86(_mov_ahd8)(); break;\ case 0xb5: PREFIX86(_mov_chd8)(); break;\ case 0xb6: PREFIX86(_mov_dhd8)(); break;\ case 0xb7: PREFIX86(_mov_bhd8)(); break;\ case 0xb8: PREFIX86(_mov_axd16)(); break;\ case 0xb9: PREFIX86(_mov_cxd16)(); break;\ case 0xba: PREFIX86(_mov_dxd16)(); break;\ case 0xbb: PREFIX86(_mov_bxd16)(); break;\ case 0xbc: PREFIX86(_mov_spd16)(); break;\ case 0xbd: PREFIX86(_mov_bpd16)(); break;\ case 0xbe: PREFIX86(_mov_sid16)(); break;\ case 0xbf: PREFIX86(_mov_did16)(); break;\ case 0xc0: PREFIX186(_rotshft_bd8)(); break;\ case 0xc1: PREFIX186(_rotshft_wd8)(); break;\ case 0xc2: PREFIX86(_ret_d16)(); break;\ case 0xc3: PREFIX86(_ret)(); break;\ case 0xc4: PREFIX86(_les_dw)(); break;\ case 0xc5: PREFIX86(_lds_dw)(); break;\ case 0xc6: PREFIX86(_mov_bd8)(); break;\ case 0xc7: PREFIX86(_mov_wd16)(); break;\ case 0xc8: PREFIX186(_enter)(); break;\ case 0xc9: PREFIX186(_leave)(); break;\ case 0xca: PREFIX86(_retf_d16)(); break;\ case 0xcb: PREFIX86(_retf)(); break;\ case 0xcc: PREFIX86(_int3)(); break;\ case 0xcd: PREFIX86(_int)(); break;\ case 0xce: PREFIX86(_into)(); break;\ case 0xcf: PREFIX86(_iret)(); break;\ case 0xd0: PREFIX86(_rotshft_b)(); break;\ case 0xd1: PREFIX86(_rotshft_w)(); break;\ case 0xd2: PREFIX186(_rotshft_bcl)(); break;\ case 0xd3: PREFIX186(_rotshft_wcl)(); break;\ case 0xd4: PREFIX86(_aam)(); break;\ case 0xd5: PREFIX86(_aad)(); break;\ case 0xd6: PREFIX86(_invalid)(); break;\ case 0xd7: PREFIX86(_xlat)(); break;\ case 0xd8: PREFIX86(_escape)(); break;\ case 0xd9: PREFIX86(_escape)(); break;\ case 0xda: PREFIX86(_escape)(); break;\ case 0xdb: PREFIX86(_escape)(); break;\ case 0xdc: PREFIX86(_escape)(); break;\ case 0xdd: PREFIX86(_escape)(); break;\ case 0xde: PREFIX86(_escape)(); break;\ case 0xdf: PREFIX86(_escape)(); break;\ case 0xe0: PREFIX86(_loopne)(); break;\ case 0xe1: PREFIX86(_loope)(); break;\ case 0xe2: PREFIX86(_loop)(); break;\ case 0xe3: PREFIX86(_jcxz)(); break;\ case 0xe4: PREFIX86(_inal)(); break;\ case 0xe5: PREFIX86(_inax)(); break;\ case 0xe6: PREFIX86(_outal)(); break;\ case 0xe7: PREFIX86(_outax)(); break;\ case 0xe8: PREFIX86(_call_d16)(); break;\ case 0xe9: PREFIX86(_jmp_d16)(); break;\ case 0xea: PREFIX86(_jmp_far)(); break;\ case 0xeb: PREFIX86(_jmp_d8)(); break;\ case 0xec: PREFIX86(_inaldx)(); break;\ case 0xed: PREFIX86(_inaxdx)(); break;\ case 0xee: PREFIX86(_outdxal)(); break;\ case 0xef: PREFIX86(_outdxax)(); break;\ case 0xf0: PREFIX86(_lock)(); break;\ case 0xf1: PREFIX86(_invalid)(); break;\ case 0xf2: PREFIX186(_repne)(); break;\ case 0xf3: PREFIX186(_repe)(); break;\ case 0xf4: PREFIX86(_hlt)(); break;\ case 0xf5: PREFIX86(_cmc)(); break;\ case 0xf6: PREFIX86(_f6pre)(); break;\ case 0xf7: PREFIX86(_f7pre)(); break;\ case 0xf8: PREFIX86(_clc)(); break;\ case 0xf9: PREFIX86(_stc)(); break;\ case 0xfa: PREFIX86(_cli)(); break;\ case 0xfb: PREFIX186(_sti)(); break;\ case 0xfc: PREFIX86(_cld)(); break;\ case 0xfd: PREFIX86(_std)(); break;\ case 0xfe: PREFIX86(_fepre)(); break;\ case 0xff: PREFIX86(_ffpre)(); break;\ }; #else #define TABLE186 PREFIX186(_instruction)[FETCHOP](); #endif ================================================ FILE: vm86/mame/emu/cpu/i86/table286.h ================================================ /* * special 286 protected mode instructions missing * at the time the same like table186.h */ static void (*const PREFIX286(_instruction)[256])() = { PREFIX86(_add_br8), /* 0x00 */ PREFIX86(_add_wr16), /* 0x01 */ PREFIX86(_add_r8b), /* 0x02 */ PREFIX86(_add_r16w), /* 0x03 */ PREFIX86(_add_ald8), /* 0x04 */ PREFIX86(_add_axd16), /* 0x05 */ PREFIX86(_push_es), /* 0x06 */ PREFIX86(_pop_es), /* 0x07 */ PREFIX86(_or_br8), /* 0x08 */ PREFIX86(_or_wr16), /* 0x09 */ PREFIX86(_or_r8b), /* 0x0a */ PREFIX86(_or_r16w), /* 0x0b */ PREFIX86(_or_ald8), /* 0x0c */ PREFIX86(_or_axd16), /* 0x0d */ PREFIX86(_push_cs), /* 0x0e */ PREFIX286(_0fpre), PREFIX86(_adc_br8), /* 0x10 */ PREFIX86(_adc_wr16), /* 0x11 */ PREFIX86(_adc_r8b), /* 0x12 */ PREFIX86(_adc_r16w), /* 0x13 */ PREFIX86(_adc_ald8), /* 0x14 */ PREFIX86(_adc_axd16), /* 0x15 */ PREFIX86(_push_ss), /* 0x16 */ PREFIX86(_pop_ss), /* 0x17 */ PREFIX86(_sbb_br8), /* 0x18 */ PREFIX86(_sbb_wr16), /* 0x19 */ PREFIX86(_sbb_r8b), /* 0x1a */ PREFIX86(_sbb_r16w), /* 0x1b */ PREFIX86(_sbb_ald8), /* 0x1c */ PREFIX86(_sbb_axd16), /* 0x1d */ PREFIX86(_push_ds), /* 0x1e */ PREFIX86(_pop_ds), /* 0x1f */ PREFIX86(_and_br8), /* 0x20 */ PREFIX86(_and_wr16), /* 0x21 */ PREFIX86(_and_r8b), /* 0x22 */ PREFIX86(_and_r16w), /* 0x23 */ PREFIX86(_and_ald8), /* 0x24 */ PREFIX86(_and_axd16), /* 0x25 */ PREFIX86(_es), /* 0x26 */ PREFIX86(_daa), /* 0x27 */ PREFIX86(_sub_br8), /* 0x28 */ PREFIX86(_sub_wr16), /* 0x29 */ PREFIX86(_sub_r8b), /* 0x2a */ PREFIX86(_sub_r16w), /* 0x2b */ PREFIX86(_sub_ald8), /* 0x2c */ PREFIX86(_sub_axd16), /* 0x2d */ PREFIX86(_cs), /* 0x2e */ PREFIX86(_das), /* 0x2f */ PREFIX86(_xor_br8), /* 0x30 */ PREFIX86(_xor_wr16), /* 0x31 */ PREFIX86(_xor_r8b), /* 0x32 */ PREFIX86(_xor_r16w), /* 0x33 */ PREFIX86(_xor_ald8), /* 0x34 */ PREFIX86(_xor_axd16), /* 0x35 */ PREFIX86(_ss), /* 0x36 */ PREFIX86(_aaa), /* 0x37 */ PREFIX86(_cmp_br8), /* 0x38 */ PREFIX86(_cmp_wr16), /* 0x39 */ PREFIX86(_cmp_r8b), /* 0x3a */ PREFIX86(_cmp_r16w), /* 0x3b */ PREFIX86(_cmp_ald8), /* 0x3c */ PREFIX86(_cmp_axd16), /* 0x3d */ PREFIX86(_ds), /* 0x3e */ PREFIX86(_aas), /* 0x3f */ PREFIX86(_inc_ax), /* 0x40 */ PREFIX86(_inc_cx), /* 0x41 */ PREFIX86(_inc_dx), /* 0x42 */ PREFIX86(_inc_bx), /* 0x43 */ PREFIX86(_inc_sp), /* 0x44 */ PREFIX86(_inc_bp), /* 0x45 */ PREFIX86(_inc_si), /* 0x46 */ PREFIX86(_inc_di), /* 0x47 */ PREFIX86(_dec_ax), /* 0x48 */ PREFIX86(_dec_cx), /* 0x49 */ PREFIX86(_dec_dx), /* 0x4a */ PREFIX86(_dec_bx), /* 0x4b */ PREFIX86(_dec_sp), /* 0x4c */ PREFIX86(_dec_bp), /* 0x4d */ PREFIX86(_dec_si), /* 0x4e */ PREFIX86(_dec_di), /* 0x4f */ PREFIX86(_push_ax), /* 0x50 */ PREFIX86(_push_cx), /* 0x51 */ PREFIX86(_push_dx), /* 0x52 */ PREFIX86(_push_bx), /* 0x53 */ PREFIX86(_push_sp), /* 0x54 */ PREFIX86(_push_bp), /* 0x55 */ PREFIX86(_push_si), /* 0x56 */ PREFIX86(_push_di), /* 0x57 */ PREFIX86(_pop_ax), /* 0x58 */ PREFIX86(_pop_cx), /* 0x59 */ PREFIX86(_pop_dx), /* 0x5a */ PREFIX86(_pop_bx), /* 0x5b */ PREFIX86(_pop_sp), /* 0x5c */ PREFIX86(_pop_bp), /* 0x5d */ PREFIX86(_pop_si), /* 0x5e */ PREFIX86(_pop_di), /* 0x5f */ PREFIX186(_pusha), /* 0x60 */ PREFIX186(_popa), /* 0x61 */ PREFIX186(_bound), /* 0x62 */ PREFIX286(_arpl), /* 0x63 */ PREFIX286(_invalid), PREFIX286(_invalid), PREFIX286(_invalid), PREFIX286(_invalid), PREFIX186(_push_d16), /* 0x68 */ PREFIX186(_imul_d16), /* 0x69 */ PREFIX186(_push_d8), /* 0x6a */ PREFIX186(_imul_d8), /* 0x6b */ PREFIX186(_insb), /* 0x6c */ PREFIX186(_insw), /* 0x6d */ PREFIX186(_outsb), /* 0x6e */ PREFIX186(_outsw), /* 0x6f */ PREFIX86(_jo), /* 0x70 */ PREFIX86(_jno), /* 0x71 */ PREFIX86(_jb), /* 0x72 */ PREFIX86(_jnb), /* 0x73 */ PREFIX86(_jz), /* 0x74 */ PREFIX86(_jnz), /* 0x75 */ PREFIX86(_jbe), /* 0x76 */ PREFIX86(_jnbe), /* 0x77 */ PREFIX86(_js), /* 0x78 */ PREFIX86(_jns), /* 0x79 */ PREFIX86(_jp), /* 0x7a */ PREFIX86(_jnp), /* 0x7b */ PREFIX86(_jl), /* 0x7c */ PREFIX86(_jnl), /* 0x7d */ PREFIX86(_jle), /* 0x7e */ PREFIX86(_jnle), /* 0x7f */ PREFIX86(_80pre), /* 0x80 */ PREFIX86(_81pre), /* 0x81 */ PREFIX86(_82pre), /* 0x82 */ PREFIX86(_83pre), /* 0x83 */ PREFIX86(_test_br8), /* 0x84 */ PREFIX86(_test_wr16), /* 0x85 */ PREFIX86(_xchg_br8), /* 0x86 */ PREFIX86(_xchg_wr16), /* 0x87 */ PREFIX86(_mov_br8), /* 0x88 */ PREFIX86(_mov_wr16), /* 0x89 */ PREFIX86(_mov_r8b), /* 0x8a */ PREFIX86(_mov_r16w), /* 0x8b */ PREFIX86(_mov_wsreg), /* 0x8c */ PREFIX86(_lea), /* 0x8d */ PREFIX86(_mov_sregw), /* 0x8e */ PREFIX86(_popw), /* 0x8f */ PREFIX86(_nop), /* 0x90 */ PREFIX86(_xchg_axcx), /* 0x91 */ PREFIX86(_xchg_axdx), /* 0x92 */ PREFIX86(_xchg_axbx), /* 0x93 */ PREFIX86(_xchg_axsp), /* 0x94 */ PREFIX86(_xchg_axbp), /* 0x95 */ PREFIX86(_xchg_axsi), /* 0x97 */ PREFIX86(_xchg_axdi), /* 0x97 */ PREFIX86(_cbw), /* 0x98 */ PREFIX86(_cwd), /* 0x99 */ PREFIX86(_call_far), /* 0x9a */ PREFIX86(_wait), /* 0x9b */ PREFIX86(_pushf), /* 0x9c */ PREFIX286(_popf), /* 0x9d */ PREFIX86(_sahf), /* 0x9e */ PREFIX86(_lahf), /* 0x9f */ PREFIX86(_mov_aldisp), /* 0xa0 */ PREFIX86(_mov_axdisp), /* 0xa1 */ PREFIX86(_mov_dispal), /* 0xa2 */ PREFIX86(_mov_dispax), /* 0xa3 */ PREFIX86(_movsb), /* 0xa4 */ PREFIX86(_movsw), /* 0xa5 */ PREFIX86(_cmpsb), /* 0xa6 */ PREFIX86(_cmpsw), /* 0xa7 */ PREFIX86(_test_ald8), /* 0xa8 */ PREFIX86(_test_axd16), /* 0xa9 */ PREFIX86(_stosb), /* 0xaa */ PREFIX86(_stosw), /* 0xab */ PREFIX86(_lodsb), /* 0xac */ PREFIX86(_lodsw), /* 0xad */ PREFIX86(_scasb), /* 0xae */ PREFIX86(_scasw), /* 0xaf */ PREFIX86(_mov_ald8), /* 0xb0 */ PREFIX86(_mov_cld8), /* 0xb1 */ PREFIX86(_mov_dld8), /* 0xb2 */ PREFIX86(_mov_bld8), /* 0xb3 */ PREFIX86(_mov_ahd8), /* 0xb4 */ PREFIX86(_mov_chd8), /* 0xb5 */ PREFIX86(_mov_dhd8), /* 0xb6 */ PREFIX86(_mov_bhd8), /* 0xb7 */ PREFIX86(_mov_axd16), /* 0xb8 */ PREFIX86(_mov_cxd16), /* 0xb9 */ PREFIX86(_mov_dxd16), /* 0xba */ PREFIX86(_mov_bxd16), /* 0xbb */ PREFIX86(_mov_spd16), /* 0xbc */ PREFIX86(_mov_bpd16), /* 0xbd */ PREFIX86(_mov_sid16), /* 0xbe */ PREFIX86(_mov_did16), /* 0xbf */ PREFIX186(_rotshft_bd8), /* 0xc0 */ PREFIX186(_rotshft_wd8), /* 0xc1 */ PREFIX86(_ret_d16), /* 0xc2 */ PREFIX86(_ret), /* 0xc3 */ PREFIX86(_les_dw), /* 0xc4 */ PREFIX86(_lds_dw), /* 0xc5 */ PREFIX86(_mov_bd8), /* 0xc6 */ PREFIX86(_mov_wd16), /* 0xc7 */ PREFIX186(_enter), /* 0xc8 */ PREFIX186(_leave), /* 0xc9 */ PREFIX286(_retf_d16), /* 0xca */ PREFIX286(_retf), /* 0xcb */ PREFIX86(_int3), /* 0xcc */ PREFIX86(_int), /* 0xcd */ PREFIX86(_into), /* 0xce */ PREFIX286(_iret), /* 0xcf */ PREFIX86(_rotshft_b), /* 0xd0 */ PREFIX86(_rotshft_w), /* 0xd1 */ PREFIX186(_rotshft_bcl), /* 0xd2 */ PREFIX186(_rotshft_wcl), /* 0xd3 */ PREFIX86(_aam), /* 0xd4 */ PREFIX86(_aad), /* 0xd5 */ PREFIX286(_invalid), PREFIX86(_xlat), /* 0xd7 */ PREFIX286(_escape), /* 0xd8 */ PREFIX286(_escape), /* 0xd9 */ PREFIX286(_escape), /* 0xda */ PREFIX286(_escape), /* 0xdb */ PREFIX286(_escape), /* 0xdc */ PREFIX286(_escape), /* 0xdd */ PREFIX286(_escape), /* 0xde */ PREFIX286(_escape_7), /* 0xdf */ PREFIX86(_loopne), /* 0xe0 */ PREFIX86(_loope), /* 0xe1 */ PREFIX86(_loop), /* 0xe2 */ PREFIX86(_jcxz), /* 0xe3 */ PREFIX86(_inal), /* 0xe4 */ PREFIX86(_inax), /* 0xe5 */ PREFIX86(_outal), /* 0xe6 */ PREFIX86(_outax), /* 0xe7 */ PREFIX86(_call_d16), /* 0xe8 */ PREFIX86(_jmp_d16), /* 0xe9 */ PREFIX86(_jmp_far), /* 0xea */ PREFIX86(_jmp_d8), /* 0xeb */ PREFIX86(_inaldx), /* 0xec */ PREFIX86(_inaxdx), /* 0xed */ PREFIX86(_outdxal), /* 0xee */ PREFIX86(_outdxax), /* 0xef */ PREFIX86(_lock), /* 0xf0 */ PREFIX286(_invalid), /* 0xf1 */ PREFIX186(_repne), /* 0xf2 */ PREFIX186(_repe), /* 0xf3 */ PREFIX86(_hlt), /* 0xf4 */ PREFIX86(_cmc), /* 0xf5 */ PREFIX86(_f6pre), /* 0xf6 */ PREFIX86(_f7pre), /* 0xf7 */ PREFIX86(_clc), /* 0xf8 */ PREFIX86(_stc), /* 0xf9 */ PREFIX86(_cli), /* 0xfa */ PREFIX86(_sti), /* 0xfb */ PREFIX86(_cld), /* 0xfc */ PREFIX86(_std), /* 0xfd */ PREFIX86(_fepre), /* 0xfe */ PREFIX86(_ffpre) /* 0xff */ }; #if defined(BIGCASE) && !defined(RS6000) /* Some compilers cannot handle large case statements */ #define TABLE286 \ switch(FETCHOP)\ {\ case 0x00: PREFIX86(_add_br8)(); break;\ case 0x01: PREFIX86(_add_wr16)(); break;\ case 0x02: PREFIX86(_add_r8b)(); break;\ case 0x03: PREFIX86(_add_r16w)(); break;\ case 0x04: PREFIX86(_add_ald8)(); break;\ case 0x05: PREFIX86(_add_axd16)(); break;\ case 0x06: PREFIX86(_push_es)(); break;\ case 0x07: PREFIX86(_pop_es)(); break;\ case 0x08: PREFIX86(_or_br8)(); break;\ case 0x09: PREFIX86(_or_wr16)(); break;\ case 0x0a: PREFIX86(_or_r8b)(); break;\ case 0x0b: PREFIX86(_or_r16w)(); break;\ case 0x0c: PREFIX86(_or_ald8)(); break;\ case 0x0d: PREFIX86(_or_axd16)(); break;\ case 0x0e: PREFIX86(_push_cs)(); break;\ case 0x0f: PREFIX286(_0fpre)(); break;\ case 0x10: PREFIX86(_adc_br8)(); break;\ case 0x11: PREFIX86(_adc_wr16)(); break;\ case 0x12: PREFIX86(_adc_r8b)(); break;\ case 0x13: PREFIX86(_adc_r16w)(); break;\ case 0x14: PREFIX86(_adc_ald8)(); break;\ case 0x15: PREFIX86(_adc_axd16)(); break;\ case 0x16: PREFIX86(_push_ss)(); break;\ case 0x17: PREFIX86(_pop_ss)(); break;\ case 0x18: PREFIX86(_sbb_br8)(); break;\ case 0x19: PREFIX86(_sbb_wr16)(); break;\ case 0x1a: PREFIX86(_sbb_r8b)(); break;\ case 0x1b: PREFIX86(_sbb_r16w)(); break;\ case 0x1c: PREFIX86(_sbb_ald8)(); break;\ case 0x1d: PREFIX86(_sbb_axd16)(); break;\ case 0x1e: PREFIX86(_push_ds)(); break;\ case 0x1f: PREFIX86(_pop_ds)(); break;\ case 0x20: PREFIX86(_and_br8)(); break;\ case 0x21: PREFIX86(_and_wr16)(); break;\ case 0x22: PREFIX86(_and_r8b)(); break;\ case 0x23: PREFIX86(_and_r16w)(); break;\ case 0x24: PREFIX86(_and_ald8)(); break;\ case 0x25: PREFIX86(_and_axd16)(); break;\ case 0x26: PREFIX86(_es)(); break;\ case 0x27: PREFIX86(_daa)(); break;\ case 0x28: PREFIX86(_sub_br8)(); break;\ case 0x29: PREFIX86(_sub_wr16)(); break;\ case 0x2a: PREFIX86(_sub_r8b)(); break;\ case 0x2b: PREFIX86(_sub_r16w)(); break;\ case 0x2c: PREFIX86(_sub_ald8)(); break;\ case 0x2d: PREFIX86(_sub_axd16)(); break;\ case 0x2e: PREFIX86(_cs)(); break;\ case 0x2f: PREFIX86(_das)(); break;\ case 0x30: PREFIX86(_xor_br8)(); break;\ case 0x31: PREFIX86(_xor_wr16)(); break;\ case 0x32: PREFIX86(_xor_r8b)(); break;\ case 0x33: PREFIX86(_xor_r16w)(); break;\ case 0x34: PREFIX86(_xor_ald8)(); break;\ case 0x35: PREFIX86(_xor_axd16)(); break;\ case 0x36: PREFIX86(_ss)(); break;\ case 0x37: PREFIX86(_aaa)(); break;\ case 0x38: PREFIX86(_cmp_br8)(); break;\ case 0x39: PREFIX86(_cmp_wr16)(); break;\ case 0x3a: PREFIX86(_cmp_r8b)(); break;\ case 0x3b: PREFIX86(_cmp_r16w)(); break;\ case 0x3c: PREFIX86(_cmp_ald8)(); break;\ case 0x3d: PREFIX86(_cmp_axd16)(); break;\ case 0x3e: PREFIX86(_ds)(); break;\ case 0x3f: PREFIX86(_aas)(); break;\ case 0x40: PREFIX86(_inc_ax)(); break;\ case 0x41: PREFIX86(_inc_cx)(); break;\ case 0x42: PREFIX86(_inc_dx)(); break;\ case 0x43: PREFIX86(_inc_bx)(); break;\ case 0x44: PREFIX86(_inc_sp)(); break;\ case 0x45: PREFIX86(_inc_bp)(); break;\ case 0x46: PREFIX86(_inc_si)(); break;\ case 0x47: PREFIX86(_inc_di)(); break;\ case 0x48: PREFIX86(_dec_ax)(); break;\ case 0x49: PREFIX86(_dec_cx)(); break;\ case 0x4a: PREFIX86(_dec_dx)(); break;\ case 0x4b: PREFIX86(_dec_bx)(); break;\ case 0x4c: PREFIX86(_dec_sp)(); break;\ case 0x4d: PREFIX86(_dec_bp)(); break;\ case 0x4e: PREFIX86(_dec_si)(); break;\ case 0x4f: PREFIX86(_dec_di)(); break;\ case 0x50: PREFIX86(_push_ax)(); break;\ case 0x51: PREFIX86(_push_cx)(); break;\ case 0x52: PREFIX86(_push_dx)(); break;\ case 0x53: PREFIX86(_push_bx)(); break;\ case 0x54: PREFIX86(_push_sp)(); break;\ case 0x55: PREFIX86(_push_bp)(); break;\ case 0x56: PREFIX86(_push_si)(); break;\ case 0x57: PREFIX86(_push_di)(); break;\ case 0x58: PREFIX86(_pop_ax)(); break;\ case 0x59: PREFIX86(_pop_cx)(); break;\ case 0x5a: PREFIX86(_pop_dx)(); break;\ case 0x5b: PREFIX86(_pop_bx)(); break;\ case 0x5c: PREFIX86(_pop_sp)(); break;\ case 0x5d: PREFIX86(_pop_bp)(); break;\ case 0x5e: PREFIX86(_pop_si)(); break;\ case 0x5f: PREFIX86(_pop_di)(); break;\ case 0x60: PREFIX186(_pusha)(); break;\ case 0x61: PREFIX186(_popa)(); break;\ case 0x62: PREFIX186(_bound)(); break;\ case 0x63: PREFIX286(_arpl)(); break;\ case 0x64: PREFIX286(_invalid)(); break;\ case 0x65: PREFIX286(_invalid)(); break;\ case 0x66: PREFIX286(_invalid)(); break;\ case 0x67: PREFIX286(_invalid)(); break;\ case 0x68: PREFIX186(_push_d16)(); break;\ case 0x69: PREFIX186(_imul_d16)(); break;\ case 0x6a: PREFIX186(_push_d8)(); break;\ case 0x6b: PREFIX186(_imul_d8)(); break;\ case 0x6c: PREFIX186(_insb)(); break;\ case 0x6d: PREFIX186(_insw)(); break;\ case 0x6e: PREFIX186(_outsb)(); break;\ case 0x6f: PREFIX186(_outsw)(); break;\ case 0x70: PREFIX86(_jo)(); break;\ case 0x71: PREFIX86(_jno)(); break;\ case 0x72: PREFIX86(_jb)(); break;\ case 0x73: PREFIX86(_jnb)(); break;\ case 0x74: PREFIX86(_jz)(); break;\ case 0x75: PREFIX86(_jnz)(); break;\ case 0x76: PREFIX86(_jbe)(); break;\ case 0x77: PREFIX86(_jnbe)(); break;\ case 0x78: PREFIX86(_js)(); break;\ case 0x79: PREFIX86(_jns)(); break;\ case 0x7a: PREFIX86(_jp)(); break;\ case 0x7b: PREFIX86(_jnp)(); break;\ case 0x7c: PREFIX86(_jl)(); break;\ case 0x7d: PREFIX86(_jnl)(); break;\ case 0x7e: PREFIX86(_jle)(); break;\ case 0x7f: PREFIX86(_jnle)(); break;\ case 0x80: PREFIX86(_80pre)(); break;\ case 0x81: PREFIX86(_81pre)(); break;\ case 0x82: PREFIX86(_82pre)(); break;\ case 0x83: PREFIX86(_83pre)(); break;\ case 0x84: PREFIX86(_test_br8)(); break;\ case 0x85: PREFIX86(_test_wr16)(); break;\ case 0x86: PREFIX86(_xchg_br8)(); break;\ case 0x87: PREFIX86(_xchg_wr16)(); break;\ case 0x88: PREFIX86(_mov_br8)(); break;\ case 0x89: PREFIX86(_mov_wr16)(); break;\ case 0x8a: PREFIX86(_mov_r8b)(); break;\ case 0x8b: PREFIX86(_mov_r16w)(); break;\ case 0x8c: PREFIX86(_mov_wsreg)(); break;\ case 0x8d: PREFIX86(_lea)(); break;\ case 0x8e: PREFIX86(_mov_sregw)(); break;\ case 0x8f: PREFIX86(_popw)(); break;\ case 0x90: PREFIX86(_nop)(); break;\ case 0x91: PREFIX86(_xchg_axcx)(); break;\ case 0x92: PREFIX86(_xchg_axdx)(); break;\ case 0x93: PREFIX86(_xchg_axbx)(); break;\ case 0x94: PREFIX86(_xchg_axsp)(); break;\ case 0x95: PREFIX86(_xchg_axbp)(); break;\ case 0x96: PREFIX86(_xchg_axsi)(); break;\ case 0x97: PREFIX86(_xchg_axdi)(); break;\ case 0x98: PREFIX86(_cbw)(); break;\ case 0x99: PREFIX86(_cwd)(); break;\ case 0x9a: PREFIX86(_call_far)(); break;\ case 0x9b: PREFIX86(_wait)(); break;\ case 0x9c: PREFIX86(_pushf)(); break;\ case 0x9d: PREFIX286(_popf)(); break;\ case 0x9e: PREFIX86(_sahf)(); break;\ case 0x9f: PREFIX86(_lahf)(); break;\ case 0xa0: PREFIX86(_mov_aldisp)(); break;\ case 0xa1: PREFIX86(_mov_axdisp)(); break;\ case 0xa2: PREFIX86(_mov_dispal)(); break;\ case 0xa3: PREFIX86(_mov_dispax)(); break;\ case 0xa4: PREFIX86(_movsb)(); break;\ case 0xa5: PREFIX86(_movsw)(); break;\ case 0xa6: PREFIX86(_cmpsb)(); break;\ case 0xa7: PREFIX86(_cmpsw)(); break;\ case 0xa8: PREFIX86(_test_ald8)(); break;\ case 0xa9: PREFIX86(_test_axd16)(); break;\ case 0xaa: PREFIX86(_stosb)(); break;\ case 0xab: PREFIX86(_stosw)(); break;\ case 0xac: PREFIX86(_lodsb)(); break;\ case 0xad: PREFIX86(_lodsw)(); break;\ case 0xae: PREFIX86(_scasb)(); break;\ case 0xaf: PREFIX86(_scasw)(); break;\ case 0xb0: PREFIX86(_mov_ald8)(); break;\ case 0xb1: PREFIX86(_mov_cld8)(); break;\ case 0xb2: PREFIX86(_mov_dld8)(); break;\ case 0xb3: PREFIX86(_mov_bld8)(); break;\ case 0xb4: PREFIX86(_mov_ahd8)(); break;\ case 0xb5: PREFIX86(_mov_chd8)(); break;\ case 0xb6: PREFIX86(_mov_dhd8)(); break;\ case 0xb7: PREFIX86(_mov_bhd8)(); break;\ case 0xb8: PREFIX86(_mov_axd16)(); break;\ case 0xb9: PREFIX86(_mov_cxd16)(); break;\ case 0xba: PREFIX86(_mov_dxd16)(); break;\ case 0xbb: PREFIX86(_mov_bxd16)(); break;\ case 0xbc: PREFIX86(_mov_spd16)(); break;\ case 0xbd: PREFIX86(_mov_bpd16)(); break;\ case 0xbe: PREFIX86(_mov_sid16)(); break;\ case 0xbf: PREFIX86(_mov_did16)(); break;\ case 0xc0: PREFIX186(_rotshft_bd8)(); break;\ case 0xc1: PREFIX186(_rotshft_wd8)(); break;\ case 0xc2: PREFIX86(_ret_d16)(); break;\ case 0xc3: PREFIX86(_ret)(); break;\ case 0xc4: PREFIX86(_les_dw)(); break;\ case 0xc5: PREFIX86(_lds_dw)(); break;\ case 0xc6: PREFIX86(_mov_bd8)(); break;\ case 0xc7: PREFIX86(_mov_wd16)(); break;\ case 0xc8: PREFIX186(_enter)(); break;\ case 0xc9: PREFIX186(_leave)(); break;\ case 0xca: PREFIX286(_retf_d16)(); break;\ case 0xcb: PREFIX286(_retf)(); break;\ case 0xcc: PREFIX86(_int3)(); break;\ case 0xcd: PREFIX86(_int)(); break;\ case 0xce: PREFIX86(_into)(); break;\ case 0xcf: PREFIX286(_iret)(); break;\ case 0xd0: PREFIX86(_rotshft_b)(); break;\ case 0xd1: PREFIX86(_rotshft_w)(); break;\ case 0xd2: PREFIX186(_rotshft_bcl)(); break;\ case 0xd3: PREFIX186(_rotshft_wcl)(); break;\ case 0xd4: PREFIX86(_aam)(); break;\ case 0xd5: PREFIX86(_aad)(); break;\ case 0xd6: PREFIX286(_invalid)(); break;\ case 0xd7: PREFIX86(_xlat)(); break;\ case 0xd8: PREFIX286(_escape)(); break;\ case 0xd9: PREFIX286(_escape)(); break;\ case 0xda: PREFIX286(_escape)(); break;\ case 0xdb: PREFIX286(_escape)(); break;\ case 0xdc: PREFIX286(_escape)(); break;\ case 0xdd: PREFIX286(_escape)(); break;\ case 0xde: PREFIX286(_escape)(); break;\ case 0xdf: PREFIX286(_escape_7)(); break;\ case 0xe0: PREFIX86(_loopne)(); break;\ case 0xe1: PREFIX86(_loope)(); break;\ case 0xe2: PREFIX86(_loop)(); break;\ case 0xe3: PREFIX86(_jcxz)(); break;\ case 0xe4: PREFIX86(_inal)(); break;\ case 0xe5: PREFIX86(_inax)(); break;\ case 0xe6: PREFIX86(_outal)(); break;\ case 0xe7: PREFIX86(_outax)(); break;\ case 0xe8: PREFIX86(_call_d16)(); break;\ case 0xe9: PREFIX86(_jmp_d16)(); break;\ case 0xea: PREFIX86(_jmp_far)(); break;\ case 0xeb: PREFIX86(_jmp_d8)(); break;\ case 0xec: PREFIX86(_inaldx)(); break;\ case 0xed: PREFIX86(_inaxdx)(); break;\ case 0xee: PREFIX86(_outdxal)(); break;\ case 0xef: PREFIX86(_outdxax)(); break;\ case 0xf0: PREFIX86(_lock)(); break;\ case 0xf1: PREFIX286(_invalid)(); break;\ case 0xf2: PREFIX186(_repne)(); break;\ case 0xf3: PREFIX186(_repe)(); break;\ case 0xf4: PREFIX86(_hlt)(); break;\ case 0xf5: PREFIX86(_cmc)(); break;\ case 0xf6: PREFIX86(_f6pre)(); break;\ case 0xf7: PREFIX86(_f7pre)(); break;\ case 0xf8: PREFIX86(_clc)(); break;\ case 0xf9: PREFIX86(_stc)(); break;\ case 0xfa: PREFIX86(_cli)(); break;\ case 0xfb: PREFIX86(_sti)(); break;\ case 0xfc: PREFIX86(_cld)(); break;\ case 0xfd: PREFIX86(_std)(); break;\ case 0xfe: PREFIX86(_fepre)(); break;\ case 0xff: PREFIX86(_ffpre)(); break;\ }; #else #define TABLE286 PREFIX286(_instruction)[FETCHOP](); #endif ================================================ FILE: vm86/mame/emu/cpu/i86/table86.h ================================================ static void (*const PREFIX86(_instruction)[256])() = { PREFIX86(_add_br8), /* 0x00 */ PREFIX86(_add_wr16), /* 0x01 */ PREFIX86(_add_r8b), /* 0x02 */ PREFIX86(_add_r16w), /* 0x03 */ PREFIX86(_add_ald8), /* 0x04 */ PREFIX86(_add_axd16), /* 0x05 */ PREFIX86(_push_es), /* 0x06 */ PREFIX86(_pop_es), /* 0x07 */ PREFIX86(_or_br8), /* 0x08 */ PREFIX86(_or_wr16), /* 0x09 */ PREFIX86(_or_r8b), /* 0x0a */ PREFIX86(_or_r16w), /* 0x0b */ PREFIX86(_or_ald8), /* 0x0c */ PREFIX86(_or_axd16), /* 0x0d */ PREFIX86(_push_cs), /* 0x0e */ PREFIX86(_pop_cs), /* 0x0f */ PREFIX86(_adc_br8), /* 0x10 */ PREFIX86(_adc_wr16), /* 0x11 */ PREFIX86(_adc_r8b), /* 0x12 */ PREFIX86(_adc_r16w), /* 0x13 */ PREFIX86(_adc_ald8), /* 0x14 */ PREFIX86(_adc_axd16), /* 0x15 */ PREFIX86(_push_ss), /* 0x16 */ PREFIX86(_pop_ss), /* 0x17 */ PREFIX86(_sbb_br8), /* 0x18 */ PREFIX86(_sbb_wr16), /* 0x19 */ PREFIX86(_sbb_r8b), /* 0x1a */ PREFIX86(_sbb_r16w), /* 0x1b */ PREFIX86(_sbb_ald8), /* 0x1c */ PREFIX86(_sbb_axd16), /* 0x1d */ PREFIX86(_push_ds), /* 0x1e */ PREFIX86(_pop_ds), /* 0x1f */ PREFIX86(_and_br8), /* 0x20 */ PREFIX86(_and_wr16), /* 0x21 */ PREFIX86(_and_r8b), /* 0x22 */ PREFIX86(_and_r16w), /* 0x23 */ PREFIX86(_and_ald8), /* 0x24 */ PREFIX86(_and_axd16), /* 0x25 */ PREFIX86(_es), /* 0x26 */ PREFIX86(_daa), /* 0x27 */ PREFIX86(_sub_br8), /* 0x28 */ PREFIX86(_sub_wr16), /* 0x29 */ PREFIX86(_sub_r8b), /* 0x2a */ PREFIX86(_sub_r16w), /* 0x2b */ PREFIX86(_sub_ald8), /* 0x2c */ PREFIX86(_sub_axd16), /* 0x2d */ PREFIX86(_cs), /* 0x2e */ PREFIX86(_das), /* 0x2f */ PREFIX86(_xor_br8), /* 0x30 */ PREFIX86(_xor_wr16), /* 0x31 */ PREFIX86(_xor_r8b), /* 0x32 */ PREFIX86(_xor_r16w), /* 0x33 */ PREFIX86(_xor_ald8), /* 0x34 */ PREFIX86(_xor_axd16), /* 0x35 */ PREFIX86(_ss), /* 0x36 */ PREFIX86(_aaa), /* 0x37 */ PREFIX86(_cmp_br8), /* 0x38 */ PREFIX86(_cmp_wr16), /* 0x39 */ PREFIX86(_cmp_r8b), /* 0x3a */ PREFIX86(_cmp_r16w), /* 0x3b */ PREFIX86(_cmp_ald8), /* 0x3c */ PREFIX86(_cmp_axd16), /* 0x3d */ PREFIX86(_ds), /* 0x3e */ PREFIX86(_aas), /* 0x3f */ PREFIX86(_inc_ax), /* 0x40 */ PREFIX86(_inc_cx), /* 0x41 */ PREFIX86(_inc_dx), /* 0x42 */ PREFIX86(_inc_bx), /* 0x43 */ PREFIX86(_inc_sp), /* 0x44 */ PREFIX86(_inc_bp), /* 0x45 */ PREFIX86(_inc_si), /* 0x46 */ PREFIX86(_inc_di), /* 0x47 */ PREFIX86(_dec_ax), /* 0x48 */ PREFIX86(_dec_cx), /* 0x49 */ PREFIX86(_dec_dx), /* 0x4a */ PREFIX86(_dec_bx), /* 0x4b */ PREFIX86(_dec_sp), /* 0x4c */ PREFIX86(_dec_bp), /* 0x4d */ PREFIX86(_dec_si), /* 0x4e */ PREFIX86(_dec_di), /* 0x4f */ PREFIX86(_push_ax), /* 0x50 */ PREFIX86(_push_cx), /* 0x51 */ PREFIX86(_push_dx), /* 0x52 */ PREFIX86(_push_bx), /* 0x53 */ PREFIX86(_push_sp), /* 0x54 */ PREFIX86(_push_bp), /* 0x55 */ PREFIX86(_push_si), /* 0x56 */ PREFIX86(_push_di), /* 0x57 */ PREFIX86(_pop_ax), /* 0x58 */ PREFIX86(_pop_cx), /* 0x59 */ PREFIX86(_pop_dx), /* 0x5a */ PREFIX86(_pop_bx), /* 0x5b */ PREFIX86(_pop_sp), /* 0x5c */ PREFIX86(_pop_bp), /* 0x5d */ PREFIX86(_pop_si), /* 0x5e */ PREFIX86(_pop_di), /* 0x5f */ PREFIX86(_invalid_2b), // PREFIX86(_pusha), /* 0x60 */ PREFIX86(_invalid_2b), // PREFIX86(_popa), /* 0x61 */ PREFIX86(_invalid_2b), // PREFIX86(_bound), /* 0x62 */ PREFIX86(_invalid_2b), PREFIX86(_invalid_2b), PREFIX86(_invalid_2b), PREFIX86(_invalid_2b), PREFIX86(_invalid_2b), PREFIX86(_invalid_2b), //i_push_d16), /* 0x68 */ PREFIX86(_invalid_2b), //i_imul_d16), /* 0x69 */ PREFIX86(_invalid_2b), //i_push_d8), /* 0x6a */ PREFIX86(_invalid_2b), //i_imul_d8), /* 0x6b */ PREFIX86(_invalid_2b), //i_insb), /* 0x6c */ PREFIX86(_invalid_2b), //i_insw), /* 0x6d */ PREFIX86(_invalid_2b), //i_outsb), /* 0x6e */ PREFIX86(_invalid_2b), //i_outsw), /* 0x6f */ PREFIX86(_jo), /* 0x70 */ PREFIX86(_jno), /* 0x71 */ PREFIX86(_jb), /* 0x72 */ PREFIX86(_jnb), /* 0x73 */ PREFIX86(_jz), /* 0x74 */ PREFIX86(_jnz), /* 0x75 */ PREFIX86(_jbe), /* 0x76 */ PREFIX86(_jnbe), /* 0x77 */ PREFIX86(_js), /* 0x78 */ PREFIX86(_jns), /* 0x79 */ PREFIX86(_jp), /* 0x7a */ PREFIX86(_jnp), /* 0x7b */ PREFIX86(_jl), /* 0x7c */ PREFIX86(_jnl), /* 0x7d */ PREFIX86(_jle), /* 0x7e */ PREFIX86(_jnle), /* 0x7f */ PREFIX86(_80pre), /* 0x80 */ PREFIX86(_81pre), /* 0x81 */ PREFIX86(_82pre), /* 0x82 */ PREFIX86(_83pre), /* 0x83 */ PREFIX86(_test_br8), /* 0x84 */ PREFIX86(_test_wr16), /* 0x85 */ PREFIX86(_xchg_br8), /* 0x86 */ PREFIX86(_xchg_wr16), /* 0x87 */ PREFIX86(_mov_br8), /* 0x88 */ PREFIX86(_mov_wr16), /* 0x89 */ PREFIX86(_mov_r8b), /* 0x8a */ PREFIX86(_mov_r16w), /* 0x8b */ PREFIX86(_mov_wsreg), /* 0x8c */ PREFIX86(_lea), /* 0x8d */ PREFIX86(_mov_sregw), /* 0x8e */ PREFIX86(_popw), /* 0x8f */ PREFIX86(_nop), /* 0x90 */ PREFIX86(_xchg_axcx), /* 0x91 */ PREFIX86(_xchg_axdx), /* 0x92 */ PREFIX86(_xchg_axbx), /* 0x93 */ PREFIX86(_xchg_axsp), /* 0x94 */ PREFIX86(_xchg_axbp), /* 0x95 */ PREFIX86(_xchg_axsi), /* 0x97 */ PREFIX86(_xchg_axdi), /* 0x97 */ PREFIX86(_cbw), /* 0x98 */ PREFIX86(_cwd), /* 0x99 */ PREFIX86(_call_far), /* 0x9a */ PREFIX86(_wait), /* 0x9b */ PREFIX86(_pushf), /* 0x9c */ PREFIX86(_popf), /* 0x9d */ PREFIX86(_sahf), /* 0x9e */ PREFIX86(_lahf), /* 0x9f */ PREFIX86(_mov_aldisp), /* 0xa0 */ PREFIX86(_mov_axdisp), /* 0xa1 */ PREFIX86(_mov_dispal), /* 0xa2 */ PREFIX86(_mov_dispax), /* 0xa3 */ PREFIX86(_movsb), /* 0xa4 */ PREFIX86(_movsw), /* 0xa5 */ PREFIX86(_cmpsb), /* 0xa6 */ PREFIX86(_cmpsw), /* 0xa7 */ PREFIX86(_test_ald8), /* 0xa8 */ PREFIX86(_test_axd16), /* 0xa9 */ PREFIX86(_stosb), /* 0xaa */ PREFIX86(_stosw), /* 0xab */ PREFIX86(_lodsb), /* 0xac */ PREFIX86(_lodsw), /* 0xad */ PREFIX86(_scasb), /* 0xae */ PREFIX86(_scasw), /* 0xaf */ PREFIX86(_mov_ald8), /* 0xb0 */ PREFIX86(_mov_cld8), /* 0xb1 */ PREFIX86(_mov_dld8), /* 0xb2 */ PREFIX86(_mov_bld8), /* 0xb3 */ PREFIX86(_mov_ahd8), /* 0xb4 */ PREFIX86(_mov_chd8), /* 0xb5 */ PREFIX86(_mov_dhd8), /* 0xb6 */ PREFIX86(_mov_bhd8), /* 0xb7 */ PREFIX86(_mov_axd16), /* 0xb8 */ PREFIX86(_mov_cxd16), /* 0xb9 */ PREFIX86(_mov_dxd16), /* 0xba */ PREFIX86(_mov_bxd16), /* 0xbb */ PREFIX86(_mov_spd16), /* 0xbc */ PREFIX86(_mov_bpd16), /* 0xbd */ PREFIX86(_mov_sid16), /* 0xbe */ PREFIX86(_mov_did16), /* 0xbf */ PREFIX86(_invalid), // PREFIX86(_rotshft_bd8), /* 0xc0 */ PREFIX86(_invalid), // PREFIX86(_rotshft_wd8), /* 0xc1 */ PREFIX86(_ret_d16), /* 0xc2 */ PREFIX86(_ret), /* 0xc3 */ PREFIX86(_les_dw), /* 0xc4 */ PREFIX86(_lds_dw), /* 0xc5 */ PREFIX86(_mov_bd8), /* 0xc6 */ PREFIX86(_mov_wd16), /* 0xc7 */ PREFIX86(_invalid), //i_enter), /* 0xc8 */ PREFIX86(_invalid), //leave), /* 0xc9 */ PREFIX86(_retf_d16), /* 0xca */ PREFIX86(_retf), /* 0xcb */ PREFIX86(_int3), /* 0xcc */ PREFIX86(_int), /* 0xcd */ PREFIX86(_into), /* 0xce */ PREFIX86(_iret), /* 0xcf */ PREFIX86(_rotshft_b), /* 0xd0 */ PREFIX86(_rotshft_w), /* 0xd1 */ PREFIX86(_rotshft_bcl), /* 0xd2 */ PREFIX86(_rotshft_wcl), /* 0xd3 */ PREFIX86(_aam), /* 0xd4 */ PREFIX86(_aad), /* 0xd5 */ PREFIX86(_invalid), PREFIX86(_xlat), /* 0xd7 */ PREFIX86(_escape), /* 0xd8 */ PREFIX86(_escape), /* 0xd9 */ PREFIX86(_escape), /* 0xda */ PREFIX86(_escape), /* 0xdb */ PREFIX86(_escape), /* 0xdc */ PREFIX86(_escape), /* 0xdd */ PREFIX86(_escape), /* 0xde */ PREFIX86(_escape), /* 0xdf */ PREFIX86(_loopne), /* 0xe0 */ PREFIX86(_loope), /* 0xe1 */ PREFIX86(_loop), /* 0xe2 */ PREFIX86(_jcxz), /* 0xe3 */ PREFIX86(_inal), /* 0xe4 */ PREFIX86(_inax), /* 0xe5 */ PREFIX86(_outal), /* 0xe6 */ PREFIX86(_outax), /* 0xe7 */ PREFIX86(_call_d16), /* 0xe8 */ PREFIX86(_jmp_d16), /* 0xe9 */ PREFIX86(_jmp_far), /* 0xea */ PREFIX86(_jmp_d8), /* 0xeb */ PREFIX86(_inaldx), /* 0xec */ PREFIX86(_inaxdx), /* 0xed */ PREFIX86(_outdxal), /* 0xee */ PREFIX86(_outdxax), /* 0xef */ PREFIX86(_lock), /* 0xf0 */ PREFIX86(_invalid), /* 0xf1 */ PREFIX86(_repne), /* 0xf2 */ PREFIX86(_repe), /* 0xf3 */ PREFIX86(_hlt), /* 0xf4 */ PREFIX86(_cmc), /* 0xf5 */ PREFIX86(_f6pre), /* 0xf6 */ PREFIX86(_f7pre), /* 0xf7 */ PREFIX86(_clc), /* 0xf8 */ PREFIX86(_stc), /* 0xf9 */ PREFIX86(_cli), /* 0xfa */ PREFIX86(_sti), /* 0xfb */ PREFIX86(_cld), /* 0xfc */ PREFIX86(_std), /* 0xfd */ PREFIX86(_fepre), /* 0xfe */ PREFIX86(_ffpre) /* 0xff */ }; #if defined(BIGCASE) && !defined(RS6000) /* Some compilers cannot handle large case statements */ #define TABLE86 \ switch(FETCHOP)\ {\ case 0x00: PREFIX86(_add_br8)(); break;\ case 0x01: PREFIX86(_add_wr16)(); break;\ case 0x02: PREFIX86(_add_r8b)(); break;\ case 0x03: PREFIX86(_add_r16w)(); break;\ case 0x04: PREFIX86(_add_ald8)(); break;\ case 0x05: PREFIX86(_add_axd16)(); break;\ case 0x06: PREFIX86(_push_es)(); break;\ case 0x07: PREFIX86(_pop_es)(); break;\ case 0x08: PREFIX86(_or_br8)(); break;\ case 0x09: PREFIX86(_or_wr16)(); break;\ case 0x0a: PREFIX86(_or_r8b)(); break;\ case 0x0b: PREFIX86(_or_r16w)(); break;\ case 0x0c: PREFIX86(_or_ald8)(); break;\ case 0x0d: PREFIX86(_or_axd16)(); break;\ case 0x0e: PREFIX86(_push_cs)(); break;\ case 0x0f: PREFIX86(_invalid)(); break;\ case 0x10: PREFIX86(_adc_br8)(); break;\ case 0x11: PREFIX86(_adc_wr16)(); break;\ case 0x12: PREFIX86(_adc_r8b)(); break;\ case 0x13: PREFIX86(_adc_r16w)(); break;\ case 0x14: PREFIX86(_adc_ald8)(); break;\ case 0x15: PREFIX86(_adc_axd16)(); break;\ case 0x16: PREFIX86(_push_ss)(); break;\ case 0x17: PREFIX86(_pop_ss)(); break;\ case 0x18: PREFIX86(_sbb_br8)(); break;\ case 0x19: PREFIX86(_sbb_wr16)(); break;\ case 0x1a: PREFIX86(_sbb_r8b)(); break;\ case 0x1b: PREFIX86(_sbb_r16w)(); break;\ case 0x1c: PREFIX86(_sbb_ald8)(); break;\ case 0x1d: PREFIX86(_sbb_axd16)(); break;\ case 0x1e: PREFIX86(_push_ds)(); break;\ case 0x1f: PREFIX86(_pop_ds)(); break;\ case 0x20: PREFIX86(_and_br8)(); break;\ case 0x21: PREFIX86(_and_wr16)(); break;\ case 0x22: PREFIX86(_and_r8b)(); break;\ case 0x23: PREFIX86(_and_r16w)(); break;\ case 0x24: PREFIX86(_and_ald8)(); break;\ case 0x25: PREFIX86(_and_axd16)(); break;\ case 0x26: PREFIX86(_es)(); break;\ case 0x27: PREFIX86(_daa)(); break;\ case 0x28: PREFIX86(_sub_br8)(); break;\ case 0x29: PREFIX86(_sub_wr16)(); break;\ case 0x2a: PREFIX86(_sub_r8b)(); break;\ case 0x2b: PREFIX86(_sub_r16w)(); break;\ case 0x2c: PREFIX86(_sub_ald8)(); break;\ case 0x2d: PREFIX86(_sub_axd16)(); break;\ case 0x2e: PREFIX86(_cs)(); break;\ case 0x2f: PREFIX86(_das)(); break;\ case 0x30: PREFIX86(_xor_br8)(); break;\ case 0x31: PREFIX86(_xor_wr16)(); break;\ case 0x32: PREFIX86(_xor_r8b)(); break;\ case 0x33: PREFIX86(_xor_r16w)(); break;\ case 0x34: PREFIX86(_xor_ald8)(); break;\ case 0x35: PREFIX86(_xor_axd16)(); break;\ case 0x36: PREFIX86(_ss)(); break;\ case 0x37: PREFIX86(_aaa)(); break;\ case 0x38: PREFIX86(_cmp_br8)(); break;\ case 0x39: PREFIX86(_cmp_wr16)(); break;\ case 0x3a: PREFIX86(_cmp_r8b)(); break;\ case 0x3b: PREFIX86(_cmp_r16w)(); break;\ case 0x3c: PREFIX86(_cmp_ald8)(); break;\ case 0x3d: PREFIX86(_cmp_axd16)(); break;\ case 0x3e: PREFIX86(_ds)(); break;\ case 0x3f: PREFIX86(_aas)(); break;\ case 0x40: PREFIX86(_inc_ax)(); break;\ case 0x41: PREFIX86(_inc_cx)(); break;\ case 0x42: PREFIX86(_inc_dx)(); break;\ case 0x43: PREFIX86(_inc_bx)(); break;\ case 0x44: PREFIX86(_inc_sp)(); break;\ case 0x45: PREFIX86(_inc_bp)(); break;\ case 0x46: PREFIX86(_inc_si)(); break;\ case 0x47: PREFIX86(_inc_di)(); break;\ case 0x48: PREFIX86(_dec_ax)(); break;\ case 0x49: PREFIX86(_dec_cx)(); break;\ case 0x4a: PREFIX86(_dec_dx)(); break;\ case 0x4b: PREFIX86(_dec_bx)(); break;\ case 0x4c: PREFIX86(_dec_sp)(); break;\ case 0x4d: PREFIX86(_dec_bp)(); break;\ case 0x4e: PREFIX86(_dec_si)(); break;\ case 0x4f: PREFIX86(_dec_di)(); break;\ case 0x50: PREFIX86(_push_ax)(); break;\ case 0x51: PREFIX86(_push_cx)(); break;\ case 0x52: PREFIX86(_push_dx)(); break;\ case 0x53: PREFIX86(_push_bx)(); break;\ case 0x54: PREFIX86(_push_sp)(); break;\ case 0x55: PREFIX86(_push_bp)(); break;\ case 0x56: PREFIX86(_push_si)(); break;\ case 0x57: PREFIX86(_push_di)(); break;\ case 0x58: PREFIX86(_pop_ax)(); break;\ case 0x59: PREFIX86(_pop_cx)(); break;\ case 0x5a: PREFIX86(_pop_dx)(); break;\ case 0x5b: PREFIX86(_pop_bx)(); break;\ case 0x5c: PREFIX86(_pop_sp)(); break;\ case 0x5d: PREFIX86(_pop_bp)(); break;\ case 0x5e: PREFIX86(_pop_si)(); break;\ case 0x5f: PREFIX86(_pop_di)(); break;\ case 0x60: PREFIX86(_invalid_2b)(); break;\ case 0x61: PREFIX86(_invalid_2b)(); break;\ case 0x62: PREFIX86(_invalid_2b)(); break;\ case 0x63: PREFIX86(_invalid_2b)(); break;\ case 0x64: PREFIX86(_invalid_2b)(); break;\ case 0x65: PREFIX86(_invalid_2b)(); break;\ case 0x66: PREFIX86(_invalid_2b)(); break;\ case 0x67: PREFIX86(_invalid_2b)(); break;\ case 0x68: PREFIX86(_invalid_2b)(); break;\ case 0x69: PREFIX86(_invalid_2b)(); break;\ case 0x6a: PREFIX86(_invalid_2b)(); break;\ case 0x6b: PREFIX86(_invalid_2b)(); break;\ case 0x6c: PREFIX86(_invalid_2b)(); break;\ case 0x6d: PREFIX86(_invalid_2b)(); break;\ case 0x6e: PREFIX86(_invalid_2b)(); break;\ case 0x6f: PREFIX86(_invalid_2b)(); break;\ case 0x70: PREFIX86(_jo)(); break;\ case 0x71: PREFIX86(_jno)(); break;\ case 0x72: PREFIX86(_jb)(); break;\ case 0x73: PREFIX86(_jnb)(); break;\ case 0x74: PREFIX86(_jz)(); break;\ case 0x75: PREFIX86(_jnz)(); break;\ case 0x76: PREFIX86(_jbe)(); break;\ case 0x77: PREFIX86(_jnbe)(); break;\ case 0x78: PREFIX86(_js)(); break;\ case 0x79: PREFIX86(_jns)(); break;\ case 0x7a: PREFIX86(_jp)(); break;\ case 0x7b: PREFIX86(_jnp)(); break;\ case 0x7c: PREFIX86(_jl)(); break;\ case 0x7d: PREFIX86(_jnl)(); break;\ case 0x7e: PREFIX86(_jle)(); break;\ case 0x7f: PREFIX86(_jnle)(); break;\ case 0x80: PREFIX86(_80pre)(); break;\ case 0x81: PREFIX86(_81pre)(); break;\ case 0x82: PREFIX86(_82pre)(); break;\ case 0x83: PREFIX86(_83pre)(); break;\ case 0x84: PREFIX86(_test_br8)(); break;\ case 0x85: PREFIX86(_test_wr16)(); break;\ case 0x86: PREFIX86(_xchg_br8)(); break;\ case 0x87: PREFIX86(_xchg_wr16)(); break;\ case 0x88: PREFIX86(_mov_br8)(); break;\ case 0x89: PREFIX86(_mov_wr16)(); break;\ case 0x8a: PREFIX86(_mov_r8b)(); break;\ case 0x8b: PREFIX86(_mov_r16w)(); break;\ case 0x8c: PREFIX86(_mov_wsreg)(); break;\ case 0x8d: PREFIX86(_lea)(); break;\ case 0x8e: PREFIX86(_mov_sregw)(); break;\ case 0x8f: PREFIX86(_popw)(); break;\ case 0x90: PREFIX86(_nop)(); break;\ case 0x91: PREFIX86(_xchg_axcx)(); break;\ case 0x92: PREFIX86(_xchg_axdx)(); break;\ case 0x93: PREFIX86(_xchg_axbx)(); break;\ case 0x94: PREFIX86(_xchg_axsp)(); break;\ case 0x95: PREFIX86(_xchg_axbp)(); break;\ case 0x96: PREFIX86(_xchg_axsi)(); break;\ case 0x97: PREFIX86(_xchg_axdi)(); break;\ case 0x98: PREFIX86(_cbw)(); break;\ case 0x99: PREFIX86(_cwd)(); break;\ case 0x9a: PREFIX86(_call_far)(); break;\ case 0x9b: PREFIX86(_wait)(); break;\ case 0x9c: PREFIX86(_pushf)(); break;\ case 0x9d: PREFIX86(_popf)(); break;\ case 0x9e: PREFIX86(_sahf)(); break;\ case 0x9f: PREFIX86(_lahf)(); break;\ case 0xa0: PREFIX86(_mov_aldisp)(); break;\ case 0xa1: PREFIX86(_mov_axdisp)(); break;\ case 0xa2: PREFIX86(_mov_dispal)(); break;\ case 0xa3: PREFIX86(_mov_dispax)(); break;\ case 0xa4: PREFIX86(_movsb)(); break;\ case 0xa5: PREFIX86(_movsw)(); break;\ case 0xa6: PREFIX86(_cmpsb)(); break;\ case 0xa7: PREFIX86(_cmpsw)(); break;\ case 0xa8: PREFIX86(_test_ald8)(); break;\ case 0xa9: PREFIX86(_test_axd16)(); break;\ case 0xaa: PREFIX86(_stosb)(); break;\ case 0xab: PREFIX86(_stosw)(); break;\ case 0xac: PREFIX86(_lodsb)(); break;\ case 0xad: PREFIX86(_lodsw)(); break;\ case 0xae: PREFIX86(_scasb)(); break;\ case 0xaf: PREFIX86(_scasw)(); break;\ case 0xb0: PREFIX86(_mov_ald8)(); break;\ case 0xb1: PREFIX86(_mov_cld8)(); break;\ case 0xb2: PREFIX86(_mov_dld8)(); break;\ case 0xb3: PREFIX86(_mov_bld8)(); break;\ case 0xb4: PREFIX86(_mov_ahd8)(); break;\ case 0xb5: PREFIX86(_mov_chd8)(); break;\ case 0xb6: PREFIX86(_mov_dhd8)(); break;\ case 0xb7: PREFIX86(_mov_bhd8)(); break;\ case 0xb8: PREFIX86(_mov_axd16)(); break;\ case 0xb9: PREFIX86(_mov_cxd16)(); break;\ case 0xba: PREFIX86(_mov_dxd16)(); break;\ case 0xbb: PREFIX86(_mov_bxd16)(); break;\ case 0xbc: PREFIX86(_mov_spd16)(); break;\ case 0xbd: PREFIX86(_mov_bpd16)(); break;\ case 0xbe: PREFIX86(_mov_sid16)(); break;\ case 0xbf: PREFIX86(_mov_did16)(); break;\ case 0xc0: PREFIX86(_invalid)(); break;\ case 0xc1: PREFIX86(_invalid)(); break;\ case 0xc2: PREFIX86(_ret_d16)(); break;\ case 0xc3: PREFIX86(_ret)(); break;\ case 0xc4: PREFIX86(_les_dw)(); break;\ case 0xc5: PREFIX86(_lds_dw)(); break;\ case 0xc6: PREFIX86(_mov_bd8)(); break;\ case 0xc7: PREFIX86(_mov_wd16)(); break;\ case 0xc8: PREFIX86(_invalid)(); break;\ case 0xc9: PREFIX86(_invalid)(); break;\ case 0xca: PREFIX86(_retf_d16)(); break;\ case 0xcb: PREFIX86(_retf)(); break;\ case 0xcc: PREFIX86(_int3)(); break;\ case 0xcd: PREFIX86(_int)(); break;\ case 0xce: PREFIX86(_into)(); break;\ case 0xcf: PREFIX86(_iret)(); break;\ case 0xd0: PREFIX86(_rotshft_b)(); break;\ case 0xd1: PREFIX86(_rotshft_w)(); break;\ case 0xd2: PREFIX86(_rotshft_bcl)(); break;\ case 0xd3: PREFIX86(_rotshft_wcl)(); break;\ case 0xd4: PREFIX86(_aam)(); break;\ case 0xd5: PREFIX86(_aad)(); break;\ case 0xd6: PREFIX86(_invalid)(); break;\ case 0xd7: PREFIX86(_xlat)(); break;\ case 0xd8: PREFIX86(_escape)(); break;\ case 0xd9: PREFIX86(_escape)(); break;\ case 0xda: PREFIX86(_escape)(); break;\ case 0xdb: PREFIX86(_escape)(); break;\ case 0xdc: PREFIX86(_escape)(); break;\ case 0xdd: PREFIX86(_escape)(); break;\ case 0xde: PREFIX86(_escape)(); break;\ case 0xdf: PREFIX86(_escape)(); break;\ case 0xe0: PREFIX86(_loopne)(); break;\ case 0xe1: PREFIX86(_loope)(); break;\ case 0xe2: PREFIX86(_loop)(); break;\ case 0xe3: PREFIX86(_jcxz)(); break;\ case 0xe4: PREFIX86(_inal)(); break;\ case 0xe5: PREFIX86(_inax)(); break;\ case 0xe6: PREFIX86(_outal)(); break;\ case 0xe7: PREFIX86(_outax)(); break;\ case 0xe8: PREFIX86(_call_d16)(); break;\ case 0xe9: PREFIX86(_jmp_d16)(); break;\ case 0xea: PREFIX86(_jmp_far)(); break;\ case 0xeb: PREFIX86(_jmp_d8)(); break;\ case 0xec: PREFIX86(_inaldx)(); break;\ case 0xed: PREFIX86(_inaxdx)(); break;\ case 0xee: PREFIX86(_outdxal)(); break;\ case 0xef: PREFIX86(_outdxax)(); break;\ case 0xf0: PREFIX86(_lock)(); break;\ case 0xf1: PREFIX86(_invalid)(); break;\ case 0xf2: PREFIX86(_repne)(); break;\ case 0xf3: PREFIX86(_repe)(); break;\ case 0xf4: PREFIX86(_hlt)(); break;\ case 0xf5: PREFIX86(_cmc)(); break;\ case 0xf6: PREFIX86(_f6pre)(); break;\ case 0xf7: PREFIX86(_f7pre)(); break;\ case 0xf8: PREFIX86(_clc)(); break;\ case 0xf9: PREFIX86(_stc)(); break;\ case 0xfa: PREFIX86(_cli)(); break;\ case 0xfb: PREFIX86(_sti)(); break;\ case 0xfc: PREFIX86(_cld)(); break;\ case 0xfd: PREFIX86(_std)(); break;\ case 0xfe: PREFIX86(_fepre)(); break;\ case 0xff: PREFIX86(_ffpre)(); break;\ }; #else #define TABLE86 PREFIX86(_instruction)[FETCHOP](); #endif ================================================ FILE: vm86/mame/emu/cpu/readme_msdos_player.txt ================================================ Based on MAME 0.152. ================================================ FILE: vm86/mame/emu/cpu/vtlb.c ================================================ // license:BSD-3-Clause // copyright-holders:Aaron Giles /*************************************************************************** vtlb.c Generic virtual TLB implementation. ***************************************************************************/ //#include "emu.h" #include "vtlb.h" /*************************************************************************** DEBUGGING ***************************************************************************/ #define PRINTF_TLB (0) /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ /* VTLB state */ struct vtlb_state { // cpu_device * cpudevice; /* CPU device */ address_spacenum space; /* address space */ int dynamic; /* number of dynamic entries */ int fixed; /* number of fixed entries */ int dynindex; /* index of next dynamic entry */ int pageshift; /* bits to shift to get page index */ int addrwidth; /* logical address bus width */ offs_t * live; /* array of live entries by table index */ int * fixedpages; /* number of pages each fixed entry covers */ vtlb_entry * table; /* table of entries by address */ vtlb_entry * save; /* cache of live table entries for saving */ }; /*************************************************************************** INITIALIZATION/TEARDOWN ***************************************************************************/ /*------------------------------------------------- vtlb_alloc - allocate a new VTLB for the given CPU -------------------------------------------------*/ vtlb_state *vtlb_alloc(/*device_t *cpu, */address_spacenum space, int fixed_entries, int dynamic_entries) { vtlb_state *vtlb; /* allocate memory for the core structure */ vtlb = (vtlb_state *)calloc(1, sizeof(vtlb_state)); /* fill in CPU information */ // vtlb->cpudevice = downcast(cpu); vtlb->space = space; vtlb->dynamic = dynamic_entries; vtlb->fixed = fixed_entries; // const address_space_config *spaceconfig = device_get_space_config(*cpu, space); // assert(spaceconfig != NULL); // vtlb->pageshift = spaceconfig->m_page_shift; // vtlb->addrwidth = spaceconfig->m_logaddr_width; /* for i386 */ vtlb->pageshift = 12; vtlb->addrwidth = 32; /* validate CPU information */ assert((1 << vtlb->pageshift) > VTLB_FLAGS_MASK); assert(vtlb->addrwidth > vtlb->pageshift); /* allocate the entry array */ vtlb->live = (offs_t *)calloc(fixed_entries + dynamic_entries, sizeof(offs_t)); // cpu->save_pointer(NAME(vtlb->live), fixed_entries + dynamic_entries, space); /* allocate the lookup table */ vtlb->table = (vtlb_entry *)calloc((size_t) 1 << (vtlb->addrwidth - vtlb->pageshift), sizeof(vtlb_entry)); // cpu->save_pointer(NAME(vtlb->table), 1 << (vtlb->addrwidth - vtlb->pageshift), space); /* allocate the fixed page count array */ if (fixed_entries > 0) { vtlb->fixedpages = (int *)calloc(fixed_entries, sizeof(int)); // cpu->save_pointer(NAME(vtlb->fixedpages), fixed_entries, space); } return vtlb; } /*------------------------------------------------- vtlb_free - free an allocated VTLB -------------------------------------------------*/ void vtlb_free(vtlb_state *vtlb) { /* free the fixed pages if allocated */ if (vtlb->fixedpages != NULL) free(vtlb->fixedpages); /* free the table and array if they exist */ if (vtlb->live != NULL) free(vtlb->live); if (vtlb->table != NULL) free(vtlb->table); /* and then the VTLB object itself */ free(vtlb); } /*************************************************************************** FILLING ***************************************************************************/ /*------------------------------------------------- vtlb_fill - rcalled by the CPU core in response to an unmapped access -------------------------------------------------*/ int vtlb_fill(vtlb_state *vtlb, offs_t address, int intention) { offs_t tableindex = address >> vtlb->pageshift; vtlb_entry entry = vtlb->table[tableindex]; offs_t taddress; // if (PRINTF_TLB) // printf("vtlb_fill: %08X(%X) ... ", address, intention); /* should not be called here if the entry is in the table already */ // assert((entry & (1 << intention)) == 0); /* if we have no dynamic entries, we always fail */ if (vtlb->dynamic == 0) { // if (PRINTF_TLB) // printf("failed: no dynamic entries\n"); return FALSE; } /* ask the CPU core to translate for us */ taddress = address; // if (!vtlb->cpudevice->translate(vtlb->space, intention, taddress)) if (!CPU_TRANSLATE_NAME(i386)(vtlb->space, intention, &taddress)) { // if (PRINTF_TLB) // printf("failed: no translation\n"); return FALSE; } /* if this is the first successful translation for this address, allocate a new entry */ if ((entry & VTLB_FLAGS_MASK) == 0) { int liveindex = vtlb->dynindex++ % vtlb->dynamic; /* if an entry already exists at this index, free it */ if (vtlb->live[liveindex] != 0) vtlb->table[vtlb->live[liveindex] - 1] = 0; /* claim this new entry */ vtlb->live[liveindex] = tableindex + 1; /* form a new blank entry */ entry = (taddress >> vtlb->pageshift) << vtlb->pageshift; entry |= VTLB_FLAG_VALID; // if (PRINTF_TLB) // printf("success (%08X), new entry\n", taddress); } /* otherwise, ensure that different intentions do not produce different addresses */ else { assert((entry >> vtlb->pageshift) == (taddress >> vtlb->pageshift)); assert(entry & VTLB_FLAG_VALID); // if (PRINTF_TLB) // printf("success (%08X), existing entry\n", taddress); } /* add the intention to the list of valid intentions and store */ entry |= 1 << (intention & (TRANSLATE_TYPE_MASK | TRANSLATE_USER_MASK)); vtlb->table[tableindex] = entry; return TRUE; } /*------------------------------------------------- vtlb_load - load a fixed VTLB entry -------------------------------------------------*/ void vtlb_load(vtlb_state *vtlb, int entrynum, int numpages, offs_t address, vtlb_entry value) { offs_t tableindex = address >> vtlb->pageshift; int liveindex = vtlb->dynamic + entrynum; int pagenum; /* must be in range */ assert(entrynum >= 0 && entrynum < vtlb->fixed); // if (PRINTF_TLB) // printf("vtlb_load %d for %d pages at %08X == %08X\n", entrynum, numpages, address, value); /* if an entry already exists at this index, free it */ if (vtlb->live[liveindex] != 0) { int pagecount = vtlb->fixedpages[entrynum]; int oldtableindex = vtlb->live[liveindex] - 1; for (pagenum = 0; pagenum < pagecount; pagenum++) vtlb->table[oldtableindex + pagenum] = 0; } /* claim this new entry */ vtlb->live[liveindex] = tableindex + 1; /* store the raw value, making sure the "fixed" flag is set */ value |= VTLB_FLAG_FIXED; vtlb->fixedpages[entrynum] = numpages; for (pagenum = 0; pagenum < numpages; pagenum++) vtlb->table[tableindex + pagenum] = value + (pagenum << vtlb->pageshift); } /*------------------------------------------------- vtlb_dynload - load a dynamic VTLB entry -------------------------------------------------*/ void vtlb_dynload(vtlb_state *vtlb, UINT32 index, offs_t address, vtlb_entry value) { vtlb_entry entry = vtlb->table[index]; if (vtlb->dynamic == 0) { // if (PRINTF_TLB) // printf("failed: no dynamic entries\n"); return; } int liveindex = vtlb->dynindex++ % vtlb->dynamic; /* is entry already live? */ if (!(entry & VTLB_FLAG_VALID)) { /* if an entry already exists at this index, free it */ if (vtlb->live[liveindex] != 0) vtlb->table[vtlb->live[liveindex] - 1] = 0; /* claim this new entry */ vtlb->live[liveindex] = index + 1; } /* form a new blank entry */ entry = (address >> vtlb->pageshift) << vtlb->pageshift; entry |= VTLB_FLAG_VALID | value; // if (PRINTF_TLB) // printf("success (%08X), new entry\n", address); vtlb->table[index] = entry; } /*************************************************************************** FLUSHING ***************************************************************************/ /*------------------------------------------------- vtlb_flush_dynamic - flush all knowledge from the dynamic part of the VTLB -------------------------------------------------*/ void vtlb_flush_dynamic(vtlb_state *vtlb) { int liveindex; // if (PRINTF_TLB) // printf("vtlb_flush_dynamic\n"); /* loop over live entries and release them from the table */ for (liveindex = 0; liveindex < vtlb->dynamic; liveindex++) if (vtlb->live[liveindex] != 0) { offs_t tableindex = vtlb->live[liveindex] - 1; vtlb->table[tableindex] = 0; vtlb->live[liveindex] = 0; } } /*------------------------------------------------- vtlb_flush_address - flush knowledge of a particular address from the VTLB -------------------------------------------------*/ void vtlb_flush_address(vtlb_state *vtlb, offs_t address) { offs_t tableindex = address >> vtlb->pageshift; // if (PRINTF_TLB) // printf("vtlb_flush_address %08X\n", address); /* free the entry in the table; for speed, we leave the entry in the live array */ vtlb->table[tableindex] = 0; } /*************************************************************************** ACCESSORS ***************************************************************************/ /*------------------------------------------------- vtlb_table - return a pointer to the base of the linear VTLB lookup table -------------------------------------------------*/ const vtlb_entry *vtlb_table(vtlb_state *vtlb) { return vtlb->table; } ================================================ FILE: vm86/mame/emu/cpu/vtlb.h ================================================ // license:BSD-3-Clause // copyright-holders:Aaron Giles /*************************************************************************** vtlb.h Generic virtual TLB implementation. ***************************************************************************/ #pragma once #ifndef __VTLB_H__ #define __VTLB_H__ /*************************************************************************** CONSTANTS ***************************************************************************/ #define VTLB_FLAGS_MASK 0xff #define VTLB_READ_ALLOWED 0x01 /* (1 << TRANSLATE_READ) */ #define VTLB_WRITE_ALLOWED 0x02 /* (1 << TRANSLATE_WRITE) */ #define VTLB_FETCH_ALLOWED 0x04 /* (1 << TRANSLATE_FETCH) */ #define VTLB_FLAG_VALID 0x08 #define VTLB_USER_READ_ALLOWED 0x10 /* (1 << TRANSLATE_READ_USER) */ #define VTLB_USER_WRITE_ALLOWED 0x20 /* (1 << TRANSLATE_WRITE_USER) */ #define VTLB_USER_FETCH_ALLOWED 0x40 /* (1 << TRANSLATE_FETCH_USER) */ #define VTLB_FLAG_FIXED 0x80 /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ /* represents an entry in the VTLB */ typedef UINT32 vtlb_entry; /* opaque structure describing VTLB state */ struct vtlb_state; /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ /* ----- initialization/teardown ----- */ /* allocate a new VTLB for the given CPU */ vtlb_state *vtlb_alloc(/*device_t *cpu, */address_spacenum space, int fixed_entries, int dynamic_entries); /* free an allocated VTLB */ void vtlb_free(vtlb_state *vtlb); /* ----- filling ----- */ /* called by the CPU core in response to an unmapped access */ int vtlb_fill(vtlb_state *vtlb, offs_t address, int intention); /* load a fixed VTLB entry */ void vtlb_load(vtlb_state *vtlb, int entrynum, int numpages, offs_t address, vtlb_entry value); /* load a dynamic VTLB entry */ void vtlb_dynload(vtlb_state *vtlb, UINT32 index, offs_t address, vtlb_entry value); /* ----- flushing ----- */ /* flush all knowledge from the dynamic part of the VTLB */ void vtlb_flush_dynamic(vtlb_state *vtlb); /* flush knowledge of a particular address from the VTLB */ void vtlb_flush_address(vtlb_state *vtlb, offs_t address); /* ----- accessors ----- */ /* return a pointer to the base of the linear VTLB lookup table */ const vtlb_entry *vtlb_table(vtlb_state *vtlb); #endif /* __VTLB_H__ */ ================================================ FILE: vm86/mame/lib/softfloat/README.txt ================================================ MAME note: this package is derived from the following original SoftFloat package and has been "re-packaged" to work with MAME's conventions and build system. The source files come from bits64/ and bits64/templates in the original distribution as MAME requires a compiler with a 64-bit integer type. Package Overview for SoftFloat Release 2b John R. Hauser 2002 May 27 ---------------------------------------------------------------------------- Overview SoftFloat is a software implementation of floating-point that conforms to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. SoftFloat is distributed in the form of C source code. Compiling the SoftFloat sources generates two things: -- A SoftFloat object file (typically `softfloat.o') containing the complete set of IEC/IEEE floating-point routines. -- A `timesoftfloat' program for evaluating the speed of the SoftFloat routines. (The SoftFloat module is linked into this program.) The SoftFloat package is documented in four text files: SoftFloat.txt Documentation for using the SoftFloat functions. SoftFloat-source.txt Documentation for compiling SoftFloat. SoftFloat-history.txt History of major changes to SoftFloat. timesoftfloat.txt Documentation for using `timesoftfloat'. Other files in the package comprise the source code for SoftFloat. Please be aware that some work is involved in porting this software to other targets. It is not just a matter of getting `make' to complete without error messages. I would have written the code that way if I could, but there are fundamental differences between systems that can't be hidden. You should not attempt to compile SoftFloat without first reading both `SoftFloat.txt' and `SoftFloat-source.txt'. ---------------------------------------------------------------------------- Legal Notice SoftFloat was written by me, John R. Hauser. This work was made possible in part by the International Computer Science Institute, located at Suite 600, 1947 Center Street, Berkeley, California 94704. Funding was partially provided by the National Science Foundation under grant MIP-9311980. The original version of this code was written as part of a project to build a fixed-point vector processor in collaboration with the University of California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, provided that the minimal documentation requirements stated in the source code are satisfied. ---------------------------------------------------------------------------- Contact Information At the time of this writing, the most up-to-date information about SoftFloat and the latest release can be found at the Web page `http:// www.cs.berkeley.edu/~jhauser/arithmetic/SoftFloat.html'. ================================================ FILE: vm86/mame/lib/softfloat/f2xm1.c ================================================ /*============================================================================ This source file is an extension to the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) floating point emulation. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ /*============================================================================ * Written for Bochs (x86 achitecture simulator) by * Stanislav Shwartsman [sshwarts at sourceforge net] * ==========================================================================*/ #define FLOAT128 #define USE_estimateDiv128To64 #include "mamesf.h" #include "softfloat.h" #include "fpu_constant.h" #define packFloat_128(zHi, zLo) {(zHi), (zLo)} #define PACK_FLOAT_128(hi,lo) packFloat_128(LIT64(hi),LIT64(lo)) static const floatx80 floatx80_negone = packFloatx80(1, 0x3fff, 0x8000000000000000U); static const floatx80 floatx80_neghalf = packFloatx80(1, 0x3ffe, 0x8000000000000000U); static const float128 float128_ln2 = packFloat_128(0x3ffe62e42fefa39eU, 0xf35793c7673007e6U); #define LN2_SIG_HI 0xb17217f7d1cf79abU #define LN2_SIG_LO 0xc000000000000000U /* 67-bit precision */ #define EXP_ARR_SIZE 15 static float128 exp_arr[EXP_ARR_SIZE] = { PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 1 */ PACK_FLOAT_128(0x3ffe000000000000, 0x0000000000000000), /* 2 */ PACK_FLOAT_128(0x3ffc555555555555, 0x5555555555555555), /* 3 */ PACK_FLOAT_128(0x3ffa555555555555, 0x5555555555555555), /* 4 */ PACK_FLOAT_128(0x3ff8111111111111, 0x1111111111111111), /* 5 */ PACK_FLOAT_128(0x3ff56c16c16c16c1, 0x6c16c16c16c16c17), /* 6 */ PACK_FLOAT_128(0x3ff2a01a01a01a01, 0xa01a01a01a01a01a), /* 7 */ PACK_FLOAT_128(0x3fefa01a01a01a01, 0xa01a01a01a01a01a), /* 8 */ PACK_FLOAT_128(0x3fec71de3a556c73, 0x38faac1c88e50017), /* 9 */ PACK_FLOAT_128(0x3fe927e4fb7789f5, 0xc72ef016d3ea6679), /* 10 */ PACK_FLOAT_128(0x3fe5ae64567f544e, 0x38fe747e4b837dc7), /* 11 */ PACK_FLOAT_128(0x3fe21eed8eff8d89, 0x7b544da987acfe85), /* 12 */ PACK_FLOAT_128(0x3fde6124613a86d0, 0x97ca38331d23af68), /* 13 */ PACK_FLOAT_128(0x3fda93974a8c07c9, 0xd20badf145dfa3e5), /* 14 */ PACK_FLOAT_128(0x3fd6ae7f3e733b81, 0xf11d8656b0ee8cb0) /* 15 */ }; #define EXP_BIAS 0x3FFF #if 0 /*---------------------------------------------------------------------------- | Returns the fraction bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ INLINE UINT64 extractFloatx80Frac( floatx80 a ) { return a.low; } /*---------------------------------------------------------------------------- | Returns the exponent bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ INLINE int32 extractFloatx80Exp( floatx80 a ) { return a.high & 0x7FFF; } /*---------------------------------------------------------------------------- | Returns the sign bit of the extended double-precision floating-point value | `a'. *----------------------------------------------------------------------------*/ INLINE flag extractFloatx80Sign( floatx80 a ) { return a.high>>15; } /*---------------------------------------------------------------------------- | Normalizes the subnormal extended double-precision floating-point value | represented by the denormalized significand `aSig'. The normalized exponent | and significand are stored at the locations pointed to by `zExpPtr' and | `zSigPtr', respectively. *----------------------------------------------------------------------------*/ INLINE void normalizeFloatx80Subnormal(uint64_t aSig, int32_t *zExpPtr, uint64_t *zSigPtr) { int shiftCount = countLeadingZeros64(aSig); *zSigPtr = aSig< C * x q(x) = > C * x // -- 2k -- 2k+1 // // f(x) ~ [ p(x) + x * q(x) ] // static float128 EvalPoly(float128 x, float128 *arr, unsigned n) { float128 x2 = float128_mul(x, x); unsigned i; assert(n > 1); float128 r1 = arr[--n]; i = n; while(i >= 2) { r1 = float128_mul(r1, x2); i -= 2; r1 = float128_add(r1, arr[i]); } if (i) r1 = float128_mul(r1, x); float128 r2 = arr[--n]; i = n; while(i >= 2) { r2 = float128_mul(r2, x2); i -= 2; r2 = float128_add(r2, arr[i]); } if (i) r2 = float128_mul(r2, x); return float128_add(r1, r2); } #endif /* required -1 < x < 1 */ static float128 poly_exp(float128 x) { /* // 2 3 4 5 6 7 8 9 // x x x x x x x x x // e - 1 ~ x + --- + --- + --- + --- + --- + --- + --- + --- + ... // 2! 3! 4! 5! 6! 7! 8! 9! // // 2 3 4 5 6 7 8 // x x x x x x x x // = x [ 1 + --- + --- + --- + --- + --- + --- + --- + --- + ... ] // 2! 3! 4! 5! 6! 7! 8! 9! // // 8 8 // -- 2k -- 2k+1 // p(x) = > C * x q(x) = > C * x // -- 2k -- 2k+1 // k=0 k=0 // // x // e - 1 ~ x * [ p(x) + x * q(x) ] // */ float128 t = EvalPoly(x, exp_arr, EXP_ARR_SIZE); return float128_mul(t, x); } // ================================================= // x // FX2M1 Compute 2 - 1 // ================================================= // // Uses the following identities: // // 1. ---------------------------------------------------------- // x x*ln(2) // 2 = e // // 2. ---------------------------------------------------------- // 2 3 4 5 n // x x x x x x x // e = 1 + --- + --- + --- + --- + --- + ... + --- + ... // 1! 2! 3! 4! 5! n! // floatx80 f2xm1(floatx80 a) { UINT64 zSig0, zSig1, zSig2; UINT64 aSig = extractFloatx80Frac(a); INT32 aExp = extractFloatx80Exp(a); int aSign = extractFloatx80Sign(a); if (aExp == 0x7FFF) { if ((UINT64) (aSig<<1)) return propagateFloatx80NaN1(a); return (aSign) ? floatx80_negone : a; } if (aExp == 0) { if (aSig == 0) return a; float_raise(float_flag_denormal | float_flag_inexact); normalizeFloatx80Subnormal(aSig, &aExp, &aSig); tiny_argument: mul128By64To192(LN2_SIG_HI, LN2_SIG_LO, aSig, &zSig0, &zSig1, &zSig2); if (0 < (INT64) zSig0) { shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1); --aExp; } return roundAndPackFloatx80(80, aSign, aExp, zSig0, zSig1); } float_raise(float_flag_inexact); if (aExp < 0x3FFF) { if (aExp < EXP_BIAS-68) goto tiny_argument; /* ******************************** */ /* using float128 for approximation */ /* ******************************** */ float128 x = floatx80_to_float128(a); x = float128_mul(x, float128_ln2); x = poly_exp(x); return float128_to_floatx80(x); } else { if (a.high == 0xBFFF && ! (aSig<<1)) return floatx80_neghalf; return a; } } ================================================ FILE: vm86/mame/lib/softfloat/fpatan.c ================================================ /*============================================================================ This source file is an extension to the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) floating point emulation. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ /*============================================================================ * Written for Bochs (x86 achitecture simulator) by * Stanislav Shwartsman [sshwarts at sourceforge net] * Adapted for 3rdparty/softfloat in MAME by Calvin Buckley (05/2021) * ==========================================================================*/ #define FLOAT128 #include "mamesf.h" #include "softfloat.h" //#include "softfloat-specialize" #include "fpu_constant.h" /* XXX: These are common w/ fsincos/fyl2x; should be moved to common header? */ #define packFloat_128(zHi, zLo) {(zHi), (zLo)} //#define packFloat2x128m(zHi, zLo) {(zHi), (zLo)} #define PACK_FLOAT_128(hi,lo) packFloat2x128m(LIT64(hi),LIT64(lo)) #define EXP_BIAS 0x3FFF /*---------------------------------------------------------------------------- | Returns the fraction bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ #if 0 INLINE UINT64 extractFloatx80Frac( floatx80 a ) { return a.low; } /*---------------------------------------------------------------------------- | Returns the exponent bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ INLINE int32 extractFloatx80Exp( floatx80 a ) { return a.high & 0x7FFF; } /*---------------------------------------------------------------------------- | Returns the sign bit of the extended double-precision floating-point value | `a'. *----------------------------------------------------------------------------*/ INLINE flag extractFloatx80Sign( floatx80 a ) { return a.high>>15; } /*---------------------------------------------------------------------------- | Normalizes the subnormal extended double-precision floating-point value | represented by the denormalized significand `aSig'. The normalized exponent | and significand are stored at the locations pointed to by `zExpPtr' and | `zSigPtr', respectively. *----------------------------------------------------------------------------*/ INLINE void normalizeFloatx80Subnormal(UINT64 aSig, INT32 *zExpPtr, UINT64 *zSigPtr) { int shiftCount = countLeadingZeros64(aSig); *zSigPtr = aSig<>48 ) & 0x7FFF; } #endif /* end copied */ #define FPATAN_ARR_SIZE 11 static const float128 float128_one = packFloat_128(0x3fff000000000000U, 0x0000000000000000U); static const float128 float128_sqrt3 = packFloat_128(0x3fffbb67ae8584caU, 0xa73b25742d7078b8U); //static const floatx80 floatx80_one = packFloatx80(0, 0x3fff, 0x8000000000000000U); static const floatx80 floatx80_pi = packFloatx80(0, 0x4000, 0xc90fdaa22168c235U); static const float128 float128_pi2 = packFloat_128(0x3fff921fb54442d1U, 0x8469898CC5170416U); static const float128 float128_pi4 = packFloat_128(0x3ffe921fb54442d1U, 0x8469898CC5170416U); static const float128 float128_pi6 = packFloat_128(0x3ffe0c152382d736U, 0x58465BB32E0F580FU); static float128 atan_arr[FPATAN_ARR_SIZE] = { PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 1 */ PACK_FLOAT_128(0xbffd555555555555, 0x5555555555555555), /* 3 */ PACK_FLOAT_128(0x3ffc999999999999, 0x999999999999999a), /* 5 */ PACK_FLOAT_128(0xbffc249249249249, 0x2492492492492492), /* 7 */ PACK_FLOAT_128(0x3ffbc71c71c71c71, 0xc71c71c71c71c71c), /* 9 */ PACK_FLOAT_128(0xbffb745d1745d174, 0x5d1745d1745d1746), /* 11 */ PACK_FLOAT_128(0x3ffb3b13b13b13b1, 0x3b13b13b13b13b14), /* 13 */ PACK_FLOAT_128(0xbffb111111111111, 0x1111111111111111), /* 15 */ PACK_FLOAT_128(0x3ffae1e1e1e1e1e1, 0xe1e1e1e1e1e1e1e2), /* 17 */ PACK_FLOAT_128(0xbffaaf286bca1af2, 0x86bca1af286bca1b), /* 19 */ PACK_FLOAT_128(0x3ffa861861861861, 0x8618618618618618) /* 21 */ }; extern float128 OddPoly(float128 x, float128 *arr, unsigned n); /* |x| < 1/4 */ static float128 poly_atan(float128 x1) { /* // 3 5 7 9 11 13 15 17 // x x x x x x x x // atan(x) ~ x - --- + --- - --- + --- - ---- + ---- - ---- + ---- // 3 5 7 9 11 13 15 17 // // 2 4 6 8 10 12 14 16 // x x x x x x x x // = x * [ 1 - --- + --- - --- + --- - ---- + ---- - ---- + ---- ] // 3 5 7 9 11 13 15 17 // // 5 5 // -- 4k -- 4k+2 // p(x) = > C * x q(x) = > C * x // -- 2k -- 2k+1 // k=0 k=0 // // 2 // atan(x) ~ x * [ p(x) + x * q(x) ] // */ return OddPoly(x1, atan_arr, FPATAN_ARR_SIZE); } // ================================================= // FPATAN Compute y * log (x) // 2 // ================================================= // // Uses the following identities: // // 1. ---------------------------------------------------------- // // atan(-x) = -atan(x) // // 2. ---------------------------------------------------------- // // x + y // atan(x) + atan(y) = atan -------, xy < 1 // 1-xy // // x + y // atan(x) + atan(y) = atan ------- + PI, x > 0, xy > 1 // 1-xy // // x + y // atan(x) + atan(y) = atan ------- - PI, x < 0, xy > 1 // 1-xy // // 3. ---------------------------------------------------------- // // atan(x) = atan(INF) + atan(- 1/x) // // x-1 // atan(x) = PI/4 + atan( ----- ) // x+1 // // x * sqrt(3) - 1 // atan(x) = PI/6 + atan( ----------------- ) // x + sqrt(3) // // 4. ---------------------------------------------------------- // 3 5 7 9 2n+1 // x x x x n x // atan(x) = x - --- + --- - --- + --- - ... + (-1) ------ + ... // 3 5 7 9 2n+1 // floatx80 floatx80_fpatan(floatx80 a, floatx80 b) { UINT64 aSig = extractFloatx80Frac(a); INT32 aExp = extractFloatx80Exp(a); int aSign = extractFloatx80Sign(a); UINT64 bSig = extractFloatx80Frac(b); INT32 bExp = extractFloatx80Exp(b); int bSign = extractFloatx80Sign(b); int zSign = aSign ^ bSign; if (bExp == 0x7FFF) { if ((UINT64) (bSig<<1)) return propagateFloatx80NaN(a, b); if (aExp == 0x7FFF) { if ((UINT64) (aSig<<1)) return propagateFloatx80NaN(a, b); if (aSign) { /* return 3PI/4 */ return roundAndPackFloatx80(80, bSign, FLOATX80_3PI4_EXP, FLOAT_3PI4_HI, FLOAT_3PI4_LO); } else { /* return PI/4 */ return roundAndPackFloatx80(80, bSign, FLOATX80_PI4_EXP, FLOAT_PI_HI, FLOAT_PI_LO); } } if (aSig && (aExp == 0)) float_raise(float_flag_denormal); /* return PI/2 */ return roundAndPackFloatx80(80, bSign, FLOATX80_PI2_EXP, FLOAT_PI_HI, FLOAT_PI_LO); } if (aExp == 0x7FFF) { if ((UINT64) (aSig<<1)) return propagateFloatx80NaN(a, b); if (bSig && (bExp == 0)) float_raise(float_flag_denormal); return_PI_or_ZERO: if (aSign) { /* return PI */ return roundAndPackFloatx80(80, bSign, FLOATX80_PI_EXP, FLOAT_PI_HI, FLOAT_PI_LO); } else { /* return 0 */ return packFloatx80(bSign, 0, 0); } } if (bExp == 0) { if (bSig == 0) { if (aSig && (aExp == 0)) float_raise(float_flag_denormal); goto return_PI_or_ZERO; } float_raise(float_flag_denormal); normalizeFloatx80Subnormal(bSig, &bExp, &bSig); } if (aExp == 0) { if (aSig == 0) /* return PI/2 */ return roundAndPackFloatx80(80, bSign, FLOATX80_PI2_EXP, FLOAT_PI_HI, FLOAT_PI_LO); float_raise(float_flag_denormal); normalizeFloatx80Subnormal(aSig, &aExp, &aSig); } float_raise(float_flag_inexact); /* |a| = |b| ==> return PI/4 */ if (aSig == bSig && aExp == bExp) return roundAndPackFloatx80(80, bSign, FLOATX80_PI4_EXP, FLOAT_PI_HI, FLOAT_PI_LO); /* ******************************** */ /* using float128 for approximation */ /* ******************************** */ float128 a128 = normalizeRoundAndPackFloat128(0, aExp-0x10, aSig, 0); float128 b128 = normalizeRoundAndPackFloat128(0, bExp-0x10, bSig, 0); float128 x; int swap = 0, add_pi6 = 0, add_pi4 = 0; if (aExp > bExp || (aExp == bExp && aSig > bSig)) { x = float128_div(b128, a128); } else { x = float128_div(a128, b128); swap = 1; } INT32 xExp = extractFloat128Exp(x); if (xExp <= EXP_BIAS-40) goto approximation_completed; if (x.high >= 0x3ffe800000000000U) // 3/4 < x < 1 { /* arctan(x) = arctan((x-1)/(x+1)) + pi/4 */ float128 t1 = float128_sub(x, float128_one); float128 t2 = float128_add(x, float128_one); x = float128_div(t1, t2); add_pi4 = 1; } else { /* argument correction */ if (xExp >= 0x3FFD) // 1/4 < x < 3/4 { /* arctan(x) = arctan((x*sqrt(3)-1)/(x+sqrt(3))) + pi/6 */ float128 t1 = float128_mul(x, float128_sqrt3); float128 t2 = float128_add(x, float128_sqrt3); x = float128_sub(t1, float128_one); x = float128_div(x, t2); add_pi6 = 1; } } x = poly_atan(x); if (add_pi6) x = float128_add(x, float128_pi6); if (add_pi4) x = float128_add(x, float128_pi4); approximation_completed: if (swap) x = float128_sub(float128_pi2, x); floatx80 result = float128_to_floatx80(x); if (zSign) result = floatx80_chs(result); int rSign = extractFloatx80Sign(result); if (!bSign && rSign) return floatx80_add(result, floatx80_pi); if (bSign && !rSign) return floatx80_sub(result, floatx80_pi); return result; } // The former function maps to x87 FPATAN, but we can simulate 68881 FATAN with // it by simply hardcoding one here. floatx80 floatx80_fatan(floatx80 a) { return floatx80_fpatan(a, floatx80_one); } ================================================ FILE: vm86/mame/lib/softfloat/fpu_constant.h ================================================ /*============================================================================ This source file is an extension to the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) floating point emulation. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ #ifndef _FPU_CONSTANTS_H_ #define _FPU_CONSTANTS_H_ // Pentium CPU uses only 68-bit precision M_PI approximation #define BETTER_THAN_PENTIUM /*============================================================================ * Written for Bochs (x86 achitecture simulator) by * Stanislav Shwartsman [sshwarts at sourceforge net] * ==========================================================================*/ ////////////////////////////// // PI, PI/2, PI/4 constants ////////////////////////////// #define FLOATX80_PI_EXP (0x4000) // 128-bit PI fraction #ifdef BETTER_THAN_PENTIUM #define FLOAT_PI_HI (U64(0xc90fdaa22168c234)) #define FLOAT_PI_LO (U64(0xc4c6628b80dc1cd1)) #else #define FLOAT_PI_HI (U64(0xc90fdaa22168c234)) #define FLOAT_PI_LO (U64(0xC000000000000000)) #endif #define FLOATX80_PI2_EXP (0x3FFF) #define FLOATX80_PI4_EXP (0x3FFE) ////////////////////////////// // 3PI/4 constant ////////////////////////////// #define FLOATX80_3PI4_EXP (0x4000) // 128-bit 3PI/4 fraction #ifdef BETTER_THAN_PENTIUM #define FLOAT_3PI4_HI (U64(0x96cbe3f9990e91a7)) #define FLOAT_3PI4_LO (U64(0x9394c9e8a0a5159c)) #else #define FLOAT_3PI4_HI (U64(0x96cbe3f9990e91a7)) #define FLOAT_3PI4_LO (U64(0x9000000000000000)) #endif ////////////////////////////// // 1/LN2 constant ////////////////////////////// #define FLOAT_LN2INV_EXP (0x3FFF) // 128-bit 1/LN2 fraction #ifdef BETTER_THAN_PENTIUM #define FLOAT_LN2INV_HI (U64(0xb8aa3b295c17f0bb)) #define FLOAT_LN2INV_LO (U64(0xbe87fed0691d3e89)) #else #define FLOAT_LN2INV_HI (U64(0xb8aa3b295c17f0bb)) #define FLOAT_LN2INV_LO (U64(0xC000000000000000)) #endif #endif ================================================ FILE: vm86/mame/lib/softfloat/fsincos.c ================================================ /*============================================================================ This source file is an extension to the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) floating point emulation. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ /*============================================================================ * Written for Bochs (x86 achitecture simulator) by * Stanislav Shwartsman [sshwarts at sourceforge net] * ==========================================================================*/ #define FLOAT128 #define USE_estimateDiv128To64 #include "mamesf.h" #include "softfloat.h" //#include "softfloat-specialize" #include "fpu_constant.h" static const floatx80 floatx80_one = packFloatx80(0, 0x3fff, U64(0x8000000000000000)); static const floatx80 floatx80_default_nan = packFloatx80(0, 0xffff, U64(0xffffffffffffffff)); #define packFloat2x128m(zHi, zLo) {(zHi), (zLo)} #define PACK_FLOAT_128(hi,lo) packFloat2x128m(LIT64(hi),LIT64(lo)) #define EXP_BIAS 0x3FFF /*---------------------------------------------------------------------------- | Returns the fraction bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ #if 0 INLINE bits64 extractFloatx80Frac( floatx80 a ) { return a.low; } /*---------------------------------------------------------------------------- | Returns the exponent bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ INLINE int32 extractFloatx80Exp( floatx80 a ) { return a.high & 0x7FFF; } /*---------------------------------------------------------------------------- | Returns the sign bit of the extended double-precision floating-point value | `a'. *----------------------------------------------------------------------------*/ INLINE flag extractFloatx80Sign( floatx80 a ) { return a.high>>15; } #endif /*---------------------------------------------------------------------------- | Takes extended double-precision floating-point NaN `a' and returns the | appropriate NaN result. If `a' is a signaling NaN, the invalid exception | is raised. *----------------------------------------------------------------------------*/ INLINE floatx80 propagateFloatx80NaNOneArg(floatx80 a) { if (floatx80_is_signaling_nan(a)) float_raise(float_flag_invalid); a.low |= U64(0xC000000000000000); return a; } /*---------------------------------------------------------------------------- | Normalizes the subnormal extended double-precision floating-point value | represented by the denormalized significand `aSig'. The normalized exponent | and significand are stored at the locations pointed to by `zExpPtr' and | `zSigPtr', respectively. *----------------------------------------------------------------------------*/ #if 0 void normalizeFloatx80Subnormal(UINT64 aSig, INT32 *zExpPtr, UINT64 *zSigPtr) { int shiftCount = countLeadingZeros64(aSig); *zSigPtr = aSig< 0) { q = argument_reduction_kernel(aSig0, expDiff, &aSig0, &aSig1); } else { if (FLOAT_PI_HI <= aSig0) { aSig0 -= FLOAT_PI_HI; q = 1; } } shift128Right(FLOAT_PI_HI, FLOAT_PI_LO, 1, &term0, &term1); if (! lt128(aSig0, aSig1, term0, term1)) { int lt = lt128(term0, term1, aSig0, aSig1); int eq = eq128(aSig0, aSig1, term0, term1); if ((eq && (q & 1)) || lt) { zSign = !zSign; ++q; } if (lt) sub128(FLOAT_PI_HI, FLOAT_PI_LO, aSig0, aSig1, &aSig0, &aSig1); } return (int)(q & 3); } #define SIN_ARR_SIZE 11 #define COS_ARR_SIZE 11 static float128 sin_arr[SIN_ARR_SIZE] = { PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 1 */ PACK_FLOAT_128(0xbffc555555555555, 0x5555555555555555), /* 3 */ PACK_FLOAT_128(0x3ff8111111111111, 0x1111111111111111), /* 5 */ PACK_FLOAT_128(0xbff2a01a01a01a01, 0xa01a01a01a01a01a), /* 7 */ PACK_FLOAT_128(0x3fec71de3a556c73, 0x38faac1c88e50017), /* 9 */ PACK_FLOAT_128(0xbfe5ae64567f544e, 0x38fe747e4b837dc7), /* 11 */ PACK_FLOAT_128(0x3fde6124613a86d0, 0x97ca38331d23af68), /* 13 */ PACK_FLOAT_128(0xbfd6ae7f3e733b81, 0xf11d8656b0ee8cb0), /* 15 */ PACK_FLOAT_128(0x3fce952c77030ad4, 0xa6b2605197771b00), /* 17 */ PACK_FLOAT_128(0xbfc62f49b4681415, 0x724ca1ec3b7b9675), /* 19 */ PACK_FLOAT_128(0x3fbd71b8ef6dcf57, 0x18bef146fcee6e45) /* 21 */ }; static float128 cos_arr[COS_ARR_SIZE] = { PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /* 0 */ PACK_FLOAT_128(0xbffe000000000000, 0x0000000000000000), /* 2 */ PACK_FLOAT_128(0x3ffa555555555555, 0x5555555555555555), /* 4 */ PACK_FLOAT_128(0xbff56c16c16c16c1, 0x6c16c16c16c16c17), /* 6 */ PACK_FLOAT_128(0x3fefa01a01a01a01, 0xa01a01a01a01a01a), /* 8 */ PACK_FLOAT_128(0xbfe927e4fb7789f5, 0xc72ef016d3ea6679), /* 10 */ PACK_FLOAT_128(0x3fe21eed8eff8d89, 0x7b544da987acfe85), /* 12 */ PACK_FLOAT_128(0xbfda93974a8c07c9, 0xd20badf145dfa3e5), /* 14 */ PACK_FLOAT_128(0x3fd2ae7f3e733b81, 0xf11d8656b0ee8cb0), /* 16 */ PACK_FLOAT_128(0xbfca6827863b97d9, 0x77bb004886a2c2ab), /* 18 */ PACK_FLOAT_128(0x3fc1e542ba402022, 0x507a9cad2bf8f0bb) /* 20 */ }; extern float128 OddPoly (float128 x, float128 *arr, unsigned n); /* 0 <= x <= pi/4 */ INLINE float128 poly_sin(float128 x) { // 3 5 7 9 11 13 15 // x x x x x x x // sin (x) ~ x - --- + --- - --- + --- - ---- + ---- - ---- = // 3! 5! 7! 9! 11! 13! 15! // // 2 4 6 8 10 12 14 // x x x x x x x // = x * [ 1 - --- + --- - --- + --- - ---- + ---- - ---- ] = // 3! 5! 7! 9! 11! 13! 15! // // 3 3 // -- 4k -- 4k+2 // p(x) = > C * x > 0 q(x) = > C * x < 0 // -- 2k -- 2k+1 // k=0 k=0 // // 2 // sin(x) ~ x * [ p(x) + x * q(x) ] // return OddPoly(x, sin_arr, SIN_ARR_SIZE); } extern float128 EvenPoly(float128 x, float128 *arr, unsigned n); /* 0 <= x <= pi/4 */ INLINE float128 poly_cos(float128 x) { // 2 4 6 8 10 12 14 // x x x x x x x // cos (x) ~ 1 - --- + --- - --- + --- - ---- + ---- - ---- // 2! 4! 6! 8! 10! 12! 14! // // 3 3 // -- 4k -- 4k+2 // p(x) = > C * x > 0 q(x) = > C * x < 0 // -- 2k -- 2k+1 // k=0 k=0 // // 2 // cos(x) ~ [ p(x) + x * q(x) ] // return EvenPoly(x, cos_arr, COS_ARR_SIZE); } INLINE void sincos_invalid(floatx80 *sin_a, floatx80 *cos_a, floatx80 a) { if (sin_a) *sin_a = a; if (cos_a) *cos_a = a; } INLINE void sincos_tiny_argument(floatx80 *sin_a, floatx80 *cos_a, floatx80 a) { if (sin_a) *sin_a = a; if (cos_a) *cos_a = floatx80_one; } static floatx80 sincos_approximation(int neg, float128 r, UINT64 quotient) { if (quotient & 0x1) { r = poly_cos(r); neg = 0; } else { r = poly_sin(r); } floatx80 result = float128_to_floatx80(r); if (quotient & 0x2) neg = ! neg; if (neg) result = floatx80_chs(result); return result; } // ================================================= // SFFSINCOS Compute sin(x) and cos(x) // ================================================= // // Uses the following identities: // ---------------------------------------------------------- // // sin(-x) = -sin(x) // cos(-x) = cos(x) // // sin(x+y) = sin(x)*cos(y)+cos(x)*sin(y) // cos(x+y) = sin(x)*sin(y)+cos(x)*cos(y) // // sin(x+ pi/2) = cos(x) // sin(x+ pi) = -sin(x) // sin(x+3pi/2) = -cos(x) // sin(x+2pi) = sin(x) // int sf_fsincos(floatx80 a, floatx80 *sin_a, floatx80 *cos_a) { UINT64 aSig0, aSig1 = 0; INT32 aExp, zExp, expDiff; int aSign, zSign; int q = 0; aSig0 = extractFloatx80Frac(a); aExp = extractFloatx80Exp(a); aSign = extractFloatx80Sign(a); /* invalid argument */ if (aExp == 0x7FFF) { if ((UINT64) (aSig0<<1)) { sincos_invalid(sin_a, cos_a, propagateFloatx80NaNOneArg(a)); return 0; } float_raise(float_flag_invalid); sincos_invalid(sin_a, cos_a, floatx80_default_nan); return 0; } if (aExp == 0) { if (aSig0 == 0) { sincos_tiny_argument(sin_a, cos_a, a); return 0; } // float_raise(float_flag_denormal); /* handle pseudo denormals */ if (! (aSig0 & U64(0x8000000000000000))) { float_raise(float_flag_inexact); if (sin_a) float_raise(float_flag_underflow); sincos_tiny_argument(sin_a, cos_a, a); return 0; } normalizeFloatx80Subnormal(aSig0, &aExp, &aSig0); } zSign = aSign; zExp = EXP_BIAS; expDiff = aExp - zExp; /* argument is out-of-range */ if (expDiff >= 63) return -1; float_raise(float_flag_inexact); if (expDiff < -1) { // doesn't require reduction if (expDiff <= -68) { a = packFloatx80(aSign, aExp, aSig0); sincos_tiny_argument(sin_a, cos_a, a); return 0; } zExp = aExp; } else { q = reduce_trig_arg(expDiff, zSign, aSig0, aSig1); } /* **************************** */ /* argument reduction completed */ /* **************************** */ /* using float128 for approximation */ float128 r = normalizeRoundAndPackFloat128(0, zExp-0x10, aSig0, aSig1); if (aSign) q = -q; if (sin_a) *sin_a = sincos_approximation(zSign, r, q); if (cos_a) *cos_a = sincos_approximation(zSign, r, q+1); return 0; } int floatx80_fsin(floatx80 &a) { return sf_fsincos(a, &a, 0); } int floatx80_fcos(floatx80 &a) { return sf_fsincos(a, 0, &a); } // ================================================= // FPTAN Compute tan(x) // ================================================= // // Uses the following identities: // // 1. ---------------------------------------------------------- // // sin(-x) = -sin(x) // cos(-x) = cos(x) // // sin(x+y) = sin(x)*cos(y)+cos(x)*sin(y) // cos(x+y) = sin(x)*sin(y)+cos(x)*cos(y) // // sin(x+ pi/2) = cos(x) // sin(x+ pi) = -sin(x) // sin(x+3pi/2) = -cos(x) // sin(x+2pi) = sin(x) // // 2. ---------------------------------------------------------- // // sin(x) // tan(x) = ------ // cos(x) // int floatx80_ftan(floatx80 &a) { UINT64 aSig0, aSig1 = 0; INT32 aExp, zExp, expDiff; int aSign, zSign; int q = 0; aSig0 = extractFloatx80Frac(a); aExp = extractFloatx80Exp(a); aSign = extractFloatx80Sign(a); /* invalid argument */ if (aExp == 0x7FFF) { if ((UINT64) (aSig0<<1)) { a = propagateFloatx80NaNOneArg(a); return 0; } float_raise(float_flag_invalid); a = floatx80_default_nan; return 0; } if (aExp == 0) { if (aSig0 == 0) return 0; // float_raise(float_flag_denormal); /* handle pseudo denormals */ if (! (aSig0 & U64(0x8000000000000000))) { float_raise(float_flag_inexact | float_flag_underflow); return 0; } normalizeFloatx80Subnormal(aSig0, &aExp, &aSig0); } zSign = aSign; zExp = EXP_BIAS; expDiff = aExp - zExp; /* argument is out-of-range */ if (expDiff >= 63) return -1; float_raise(float_flag_inexact); if (expDiff < -1) { // doesn't require reduction if (expDiff <= -68) { a = packFloatx80(aSign, aExp, aSig0); return 0; } zExp = aExp; } else { q = reduce_trig_arg(expDiff, zSign, aSig0, aSig1); } /* **************************** */ /* argument reduction completed */ /* **************************** */ /* using float128 for approximation */ float128 r = normalizeRoundAndPackFloat128(0, zExp-0x10, aSig0, aSig1); float128 sin_r = poly_sin(r); float128 cos_r = poly_cos(r); if (q & 0x1) { r = float128_div(cos_r, sin_r); zSign = ! zSign; } else { r = float128_div(sin_r, cos_r); } a = float128_to_floatx80(r); if (zSign) a = floatx80_chs(a); return 0; } // 2 3 4 n // f(x) ~ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x) // 0 1 2 3 4 n // // -- 2k -- 2k+1 // p(x) = > C * x q(x) = > C * x // -- 2k -- 2k+1 // // f(x) ~ [ p(x) + x * q(x) ] // float128 EvalPoly(float128 x, float128 *arr, unsigned n) { float128 x2 = float128_mul(x, x); unsigned i; assert(n > 1); float128 r1 = arr[--n]; i = n; while(i >= 2) { r1 = float128_mul(r1, x2); i -= 2; r1 = float128_add(r1, arr[i]); } if (i) r1 = float128_mul(r1, x); float128 r2 = arr[--n]; i = n; while(i >= 2) { r2 = float128_mul(r2, x2); i -= 2; r2 = float128_add(r2, arr[i]); } if (i) r2 = float128_mul(r2, x); return float128_add(r1, r2); } // 2 4 6 8 2n // f(x) ~ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x) // 0 1 2 3 4 n // // -- 4k -- 4k+2 // p(x) = > C * x q(x) = > C * x // -- 2k -- 2k+1 // // 2 // f(x) ~ [ p(x) + x * q(x) ] // float128 EvenPoly(float128 x, float128 *arr, unsigned n) { return EvalPoly(float128_mul(x, x), arr, n); } // 3 5 7 9 2n+1 // f(x) ~ (C * x) + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x) // 0 1 2 3 4 n // 2 4 6 8 2n // = x * [ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x) // 0 1 2 3 4 n // // -- 4k -- 4k+2 // p(x) = > C * x q(x) = > C * x // -- 2k -- 2k+1 // // 2 // f(x) ~ x * [ p(x) + x * q(x) ] // float128 OddPoly(float128 x, float128 *arr, unsigned n) { return float128_mul(x, EvenPoly(x, arr, n)); } /*---------------------------------------------------------------------------- | Scales extended double-precision floating-point value in operand `a' by | value `b'. The function truncates the value in the second operand 'b' to | an integral value and adds that value to the exponent of the operand 'a'. | The operation performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ extern floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b ); floatx80 floatx80_scale(floatx80 a, floatx80 b) { sbits32 aExp, bExp; bits64 aSig, bSig; // handle unsupported extended double-precision floating encodings /* if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b)) { float_raise(float_flag_invalid); return floatx80_default_nan; }*/ aSig = extractFloatx80Frac(a); aExp = extractFloatx80Exp(a); int aSign = extractFloatx80Sign(a); bSig = extractFloatx80Frac(b); bExp = extractFloatx80Exp(b); int bSign = extractFloatx80Sign(b); if (aExp == 0x7FFF) { if ((bits64) (aSig<<1) || ((bExp == 0x7FFF) && (bits64) (bSig<<1))) { return propagateFloatx80NaN(a, b); } if ((bExp == 0x7FFF) && bSign) { float_raise(float_flag_invalid); return floatx80_default_nan; } if (bSig && (bExp == 0)) float_raise(float_flag_denormal); return a; } if (bExp == 0x7FFF) { if ((bits64) (bSig<<1)) return propagateFloatx80NaN(a, b); if ((aExp | aSig) == 0) { if (! bSign) { float_raise(float_flag_invalid); return floatx80_default_nan; } return a; } if (aSig && (aExp == 0)) float_raise(float_flag_denormal); if (bSign) return packFloatx80(aSign, 0, 0); return packFloatx80(aSign, 0x7FFF, U64(0x8000000000000000)); } if (aExp == 0) { if (aSig == 0) return a; float_raise(float_flag_denormal); normalizeFloatx80Subnormal(aSig, &aExp, &aSig); } if (bExp == 0) { if (bSig == 0) return a; float_raise(float_flag_denormal); normalizeFloatx80Subnormal(bSig, &bExp, &bSig); } if (bExp > 0x400E) { /* generate appropriate overflow/underflow */ return roundAndPackFloatx80(80, aSign, bSign ? -0x3FFF : 0x7FFF, aSig, 0); } if (bExp < 0x3FFF) return a; int shiftCount = 0x403E - bExp; bSig >>= shiftCount; sbits32 scale = bSig; if (bSign) scale = -scale; /* -32768..32767 */ return roundAndPackFloatx80(80, aSign, aExp+scale, aSig, 0); } ================================================ FILE: vm86/mame/lib/softfloat/fyl2x.c ================================================ /*============================================================================ This source file is an extension to the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator) floating point emulation. float_raise(float_flag_invalid) THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ /*============================================================================ * Written for Bochs (x86 achitecture simulator) by * Stanislav Shwartsman [sshwarts at sourceforge net] * Adapted for lib/softfloat in MESS by Hans Ostermeyer (03/2012) * ==========================================================================*/ #define FLOAT128 #define USE_estimateDiv128To64 #include "mamesf.h" #include "softfloat.h" //#include "softfloat-specialize" #include "fpu_constant.h" static const floatx80 floatx80_log10_2 = packFloatx80(0, 0x3ffd, U64(0x9a209a84fbcff798)); static const floatx80 floatx80_ln_2 = packFloatx80(0, 0x3ffe, U64(0xb17217f7d1cf79ac)); //static const floatx80 floatx80_one = packFloatx80(0, 0x3fff, U64(0x8000000000000000)); //static const floatx80 floatx80_default_nan = packFloatx80(0, 0xffff, U64(0xffffffffffffffff)); #define packFloat_128(zHi, zLo) {(zHi), (zLo)} #define PACK_FLOAT_128(hi,lo) packFloat_128(LIT64(hi),LIT64(lo)) #define EXP_BIAS 0x3FFF #if 0 /*---------------------------------------------------------------------------- | Returns the fraction bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ INLINE bits64 extractFloatx80Frac( floatx80 a ) { return a.low; } /*---------------------------------------------------------------------------- | Returns the exponent bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ INLINE int32 extractFloatx80Exp( floatx80 a ) { return a.high & 0x7FFF; } /*---------------------------------------------------------------------------- | Returns the sign bit of the extended double-precision floating-point value | `a'. *----------------------------------------------------------------------------*/ INLINE flag extractFloatx80Sign( floatx80 a ) { return a.high>>15; } /*---------------------------------------------------------------------------- | Takes extended double-precision floating-point NaN `a' and returns the | appropriate NaN result. If `a' is a signaling NaN, the invalid exception | is raised. *----------------------------------------------------------------------------*/ INLINE floatx80 propagateFloatx80NaNOneArg(floatx80 a) { if (floatx80_is_signaling_nan(a)) float_raise(float_flag_invalid); a.low |= U64(0xC000000000000000); return a; } /*---------------------------------------------------------------------------- | Normalizes the subnormal extended double-precision floating-point value | represented by the denormalized significand `aSig'. The normalized exponent | and significand are stored at the locations pointed to by `zExpPtr' and | `zSigPtr', respectively. *----------------------------------------------------------------------------*/ INLINE void normalizeFloatx80Subnormal(UINT64 aSig, INT32 *zExpPtr, UINT64 *zSigPtr) { int shiftCount = countLeadingZeros64(aSig); *zSigPtr = aSig< C * u q(u) = > C * u // -- 2k -- 2k+1 // k=0 k=0 // // 1+u 2 // 1/2 ln --- ~ u * [ p(u) + u * q(u) ] // 1-u // */ return OddPoly(x1, ln_arr, L2_ARR_SIZE); } /* required sqrt(2)/2 < x < sqrt(2) */ static float128 poly_l2(float128 x) { /* using float128 for approximation */ float128 x_p1 = float128_add(x, float128_one); float128 x_m1 = float128_sub(x, float128_one); x = float128_div(x_m1, x_p1); x = poly_ln(x); x = float128_mul(x, float128_ln2inv2); return x; } static float128 poly_l2p1(float128 x) { /* using float128 for approximation */ float128 x_p2 = float128_add(x, float128_two); x = float128_div(x, x_p2); x = poly_ln(x); x = float128_mul(x, float128_ln2inv2); return x; } // ================================================= // FYL2X Compute y * log (x) // 2 // ================================================= // // Uses the following identities: // // 1. ---------------------------------------------------------- // ln(x) // log (x) = -------, ln (x*y) = ln(x) + ln(y) // 2 ln(2) // // 2. ---------------------------------------------------------- // 1+u x-1 // ln (x) = ln -----, when u = ----- // 1-u x+1 // // 3. ---------------------------------------------------------- // 3 5 7 2n+1 // 1+u u u u u // ln ----- = 2 [ u + --- + --- + --- + ... + ------ + ... ] // 1-u 3 5 7 2n+1 // floatx80 fyl2x(floatx80 a, floatx80 b) { UINT64 aSig = extractFloatx80Frac(a); INT32 aExp = extractFloatx80Exp(a); int aSign = extractFloatx80Sign(a); UINT64 bSig = extractFloatx80Frac(b); INT32 bExp = extractFloatx80Exp(b); int bSign = extractFloatx80Sign(b); int zSign = bSign ^ 1; if (aExp == 0x7FFF) { if ((UINT64) (aSig<<1) || ((bExp == 0x7FFF) && (UINT64) (bSig<<1))) { return propagateFloatx80NaN(a, b); } if (aSign) { invalid: float_raise(float_flag_invalid); return floatx80_default_nan; } else { if (bExp == 0) { if (bSig == 0) goto invalid; float_raise(float_flag_denormal); } return packFloatx80(bSign, 0x7FFF, U64(0x8000000000000000)); } } if (bExp == 0x7FFF) { if ((UINT64) (bSig<<1)) return propagateFloatx80NaN(a, b); if (aSign && (UINT64)(aExp | aSig)) goto invalid; if (aSig && (aExp == 0)) float_raise(float_flag_denormal); if (aExp < 0x3FFF) { return packFloatx80(zSign, 0x7FFF, U64(0x8000000000000000)); } if (aExp == 0x3FFF && ((UINT64) (aSig<<1) == 0)) goto invalid; return packFloatx80(bSign, 0x7FFF, U64(0x8000000000000000)); } if (aExp == 0) { if (aSig == 0) { if ((bExp | bSig) == 0) goto invalid; float_raise(float_flag_divbyzero); return packFloatx80(zSign, 0x7FFF, U64(0x8000000000000000)); } if (aSign) goto invalid; float_raise(float_flag_denormal); normalizeFloatx80Subnormal(aSig, &aExp, &aSig); } if (aSign) goto invalid; if (bExp == 0) { if (bSig == 0) { if (aExp < 0x3FFF) return packFloatx80(zSign, 0, 0); return packFloatx80(bSign, 0, 0); } float_raise(float_flag_denormal); normalizeFloatx80Subnormal(bSig, &bExp, &bSig); } if (aExp == 0x3FFF && ((UINT64) (aSig<<1) == 0)) return packFloatx80(bSign, 0, 0); float_raise(float_flag_inexact); int ExpDiff = aExp - 0x3FFF; aExp = 0; if (aSig >= SQRT2_HALF_SIG) { ExpDiff++; aExp--; } /* ******************************** */ /* using float128 for approximation */ /* ******************************** */ UINT64 zSig0, zSig1; shift128Right(aSig<<1, 0, 16, &zSig0, &zSig1); float128 x = packFloat128(0, aExp+0x3FFF, zSig0, zSig1); x = poly_l2(x); x = float128_add(x, int64_to_float128((INT64) ExpDiff)); return floatx80_mul(b, float128_to_floatx80(x)); } // ================================================= // FYL2XP1 Compute y * log (x + 1) // 2 // ================================================= // // Uses the following identities: // // 1. ---------------------------------------------------------- // ln(x) // log (x) = ------- // 2 ln(2) // // 2. ---------------------------------------------------------- // 1+u x // ln (x+1) = ln -----, when u = ----- // 1-u x+2 // // 3. ---------------------------------------------------------- // 3 5 7 2n+1 // 1+u u u u u // ln ----- = 2 [ u + --- + --- + --- + ... + ------ + ... ] // 1-u 3 5 7 2n+1 // floatx80 fyl2xp1(floatx80 a, floatx80 b) { INT32 aExp, bExp; UINT64 aSig, bSig, zSig0, zSig1, zSig2; int aSign, bSign; aSig = extractFloatx80Frac(a); aExp = extractFloatx80Exp(a); aSign = extractFloatx80Sign(a); bSig = extractFloatx80Frac(b); bExp = extractFloatx80Exp(b); bSign = extractFloatx80Sign(b); int zSign = aSign ^ bSign; if (aExp == 0x7FFF) { if ((UINT64) (aSig<<1) || ((bExp == 0x7FFF) && (UINT64) (bSig<<1))) { return propagateFloatx80NaN(a, b); } if (aSign) { invalid: float_raise(float_flag_invalid); return floatx80_default_nan; } else { if (bExp == 0) { if (bSig == 0) goto invalid; float_raise(float_flag_denormal); } return packFloatx80(bSign, 0x7FFF, U64(0x8000000000000000)); } } if (bExp == 0x7FFF) { if ((UINT64) (bSig<<1)) return propagateFloatx80NaN(a, b); if (aExp == 0) { if (aSig == 0) goto invalid; float_raise(float_flag_denormal); } return packFloatx80(zSign, 0x7FFF, U64(0x8000000000000000)); } if (aExp == 0) { if (aSig == 0) { if (bSig && (bExp == 0)) float_raise(float_flag_denormal); return packFloatx80(zSign, 0, 0); } float_raise(float_flag_denormal); normalizeFloatx80Subnormal(aSig, &aExp, &aSig); } if (bExp == 0) { if (bSig == 0) return packFloatx80(zSign, 0, 0); float_raise(float_flag_denormal); normalizeFloatx80Subnormal(bSig, &bExp, &bSig); } float_raise(float_flag_inexact); if (aSign && aExp >= 0x3FFF) return a; if (aExp >= 0x3FFC) // big argument { return fyl2x(floatx80_add(a, floatx80_one), b); } // handle tiny argument if (aExp < EXP_BIAS-70) { // first order approximation, return (a*b)/ln(2) INT32 zExp = aExp + FLOAT_LN2INV_EXP - 0x3FFE; mul128By64To192(FLOAT_LN2INV_HI, FLOAT_LN2INV_LO, aSig, &zSig0, &zSig1, &zSig2); if (0 < (INT64) zSig0) { shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1); --zExp; } zExp = zExp + bExp - 0x3FFE; mul128By64To192(zSig0, zSig1, bSig, &zSig0, &zSig1, &zSig2); if (0 < (INT64) zSig0) { shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1); --zExp; } return roundAndPackFloatx80(80, aSign ^ bSign, zExp, zSig0, zSig1); } /* ******************************** */ /* using float128 for approximation */ /* ******************************** */ shift128Right(aSig<<1, 0, 16, &zSig0, &zSig1); float128 x = packFloat128(aSign, aExp, zSig0, zSig1); x = poly_l2p1(x); return floatx80_mul(b, float128_to_floatx80(x)); } floatx80 floatx80_flognp1(floatx80 a) { return fyl2xp1(a, floatx80_ln_2); } floatx80 floatx80_flogn(floatx80 a) { return fyl2x(a, floatx80_ln_2); } floatx80 floatx80_flog2(floatx80 a) { return fyl2x(a, floatx80_one); } floatx80 floatx80_flog10(floatx80 a) { return fyl2x(a, floatx80_log10_2); } ================================================ FILE: vm86/mame/lib/softfloat/mamesf.h ================================================ #pragma once /*---------------------------------------------------------------------------- | One of the macros `BIGENDIAN' or `LITTLEENDIAN' must be defined. *----------------------------------------------------------------------------*/ #ifdef LSB_FIRST #define LITTLEENDIAN #else #define BIGENDIAN #endif /*---------------------------------------------------------------------------- | The macro `BITS64' can be defined to indicate that 64-bit integer types are | supported by the compiler. *----------------------------------------------------------------------------*/ #define BITS64 /*---------------------------------------------------------------------------- | Each of the following `typedef's defines the most convenient type that holds | integers of at least as many bits as specified. For example, `uint8' should | be the most convenient type that can hold unsigned integers of as many as | 8 bits. The `flag' type must be able to hold either a 0 or 1. For most | implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed | to the same as `int'. *----------------------------------------------------------------------------*/ //#include "emu.h" typedef INT8 flag; typedef UINT8 uint8; typedef INT8 int8; typedef UINT16 uint16; typedef INT16 int16; typedef UINT32 uint32; typedef INT32 int32; typedef UINT64 uint64; typedef INT64 int64; /*---------------------------------------------------------------------------- | Each of the following `typedef's defines a type that holds integers | of _exactly_ the number of bits specified. For instance, for most | implementation of C, `bits16' and `sbits16' should be `typedef'ed to | `unsigned short int' and `signed short int' (or `short int'), respectively. *----------------------------------------------------------------------------*/ typedef UINT8 bits8; typedef INT8 sbits8; typedef UINT16 bits16; typedef INT16 sbits16; typedef UINT32 bits32; typedef INT32 sbits32; typedef UINT64 bits64; typedef INT64 sbits64; /*---------------------------------------------------------------------------- | The `LIT64' macro takes as its argument a textual integer literal and | if necessary ``marks'' the literal as having a 64-bit integer type. | For example, the GNU C Compiler (`gcc') requires that 64-bit literals be | appended with the letters `LL' standing for `long long', which is `gcc's | name for the 64-bit integer type. Some compilers may allow `LIT64' to be | defined as the identity macro: `#define LIT64( a ) a'. *----------------------------------------------------------------------------*/ #define LIT64( a ) a##ULL /*---------------------------------------------------------------------------- | The macro `INLINE' can be used before functions that should be inlined. If | a compiler does not support explicit inlining, this macro should be defined | to be `static'. *----------------------------------------------------------------------------*/ // MAME defines INLINE ================================================ FILE: vm86/mame/lib/softfloat/milieu.h ================================================ /*============================================================================ This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b. Written by John R. Hauser. This work was made possible in part by the International Computer Science Institute, located at Suite 600, 1947 Center Street, Berkeley, California 94704. Funding was partially provided by the National Science Foundation under grant MIP-9311980. The original version of this code was written as part of a project to build a fixed-point vector processor in collaboration with the University of California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek. More information is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ arithmetic/SoftFloat.html'. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ /*---------------------------------------------------------------------------- | Include common integer types and flags. *----------------------------------------------------------------------------*/ #include "mamesf.h" /*---------------------------------------------------------------------------- | Symbolic Boolean literals. *----------------------------------------------------------------------------*/ #define FALSE 0 #define TRUE 1 ================================================ FILE: vm86/mame/lib/softfloat/readme_msdos_player.txt ================================================ Based on MAME 0.152. ================================================ FILE: vm86/mame/lib/softfloat/softfloat-macros ================================================ /*============================================================================ This C source fragment is part of the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b. Written by John R. Hauser. This work was made possible in part by the International Computer Science Institute, located at Suite 600, 1947 Center Street, Berkeley, California 94704. Funding was partially provided by the National Science Foundation under grant MIP-9311980. The original version of this code was written as part of a project to build a fixed-point vector processor in collaboration with the University of California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek. More information is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ arithmetic/SoftFloat.html'. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal notice) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ /*---------------------------------------------------------------------------- | Shifts `a' right by the number of bits given in `count'. If any nonzero | bits are shifted off, they are ``jammed'' into the least significant bit of | the result by setting the least significant bit to 1. The value of `count' | can be arbitrarily large; in particular, if `count' is greater than 32, the | result will be either 0 or 1, depending on whether `a' is zero or nonzero. | The result is stored in the location pointed to by `zPtr'. *----------------------------------------------------------------------------*/ INLINE void shift32RightJamming( bits32 a, int16 count, bits32 *zPtr ) { bits32 z; if ( count == 0 ) { z = a; } else if ( count < 32 ) { z = ( a>>count ) | ( ( a<<( ( - count ) & 31 ) ) != 0 ); } else { z = ( a != 0 ); } *zPtr = z; } /*---------------------------------------------------------------------------- | Shifts `a' right by the number of bits given in `count'. If any nonzero | bits are shifted off, they are ``jammed'' into the least significant bit of | the result by setting the least significant bit to 1. The value of `count' | can be arbitrarily large; in particular, if `count' is greater than 64, the | result will be either 0 or 1, depending on whether `a' is zero or nonzero. | The result is stored in the location pointed to by `zPtr'. *----------------------------------------------------------------------------*/ INLINE void shift64RightJamming( bits64 a, int16 count, bits64 *zPtr ) { bits64 z; if ( count == 0 ) { z = a; } else if ( count < 64 ) { z = ( a>>count ) | ( ( a<<( ( - count ) & 63 ) ) != 0 ); } else { z = ( a != 0 ); } *zPtr = z; } /*---------------------------------------------------------------------------- | Shifts the 128-bit value formed by concatenating `a0' and `a1' right by 64 | _plus_ the number of bits given in `count'. The shifted result is at most | 64 nonzero bits; this is stored at the location pointed to by `z0Ptr'. The | bits shifted off form a second 64-bit result as follows: The _last_ bit | shifted off is the most-significant bit of the extra result, and the other | 63 bits of the extra result are all zero if and only if _all_but_the_last_ | bits shifted off were all zero. This extra result is stored in the location | pointed to by `z1Ptr'. The value of `count' can be arbitrarily large. | (This routine makes more sense if `a0' and `a1' are considered to form | a fixed-point value with binary point between `a0' and `a1'. This fixed- | point value is shifted right by the number of bits given in `count', and | the integer part of the result is returned at the location pointed to by | `z0Ptr'. The fractional part of the result may be slightly corrupted as | described above, and is returned at the location pointed to by `z1Ptr'.) *----------------------------------------------------------------------------*/ INLINE void shift64ExtraRightJamming( bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr ) { bits64 z0, z1; int8 negCount = ( - count ) & 63; if ( count == 0 ) { z1 = a1; z0 = a0; } else if ( count < 64 ) { z1 = ( a0<>count; } else { if ( count == 64 ) { z1 = a0 | ( a1 != 0 ); } else { z1 = ( ( a0 | a1 ) != 0 ); } z0 = 0; } *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the | number of bits given in `count'. Any bits shifted off are lost. The value | of `count' can be arbitrarily large; in particular, if `count' is greater | than 128, the result will be 0. The result is broken into two 64-bit pieces | which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. *----------------------------------------------------------------------------*/ INLINE void shift128Right( bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr ) { bits64 z0, z1; int8 negCount = ( - count ) & 63; if ( count == 0 ) { z1 = a1; z0 = a0; } else if ( count < 64 ) { z1 = ( a0<>count ); z0 = a0>>count; } else { z1 = ( count < 64 ) ? ( a0>>( count & 63 ) ) : 0; z0 = 0; } *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the | number of bits given in `count'. If any nonzero bits are shifted off, they | are ``jammed'' into the least significant bit of the result by setting the | least significant bit to 1. The value of `count' can be arbitrarily large; | in particular, if `count' is greater than 128, the result will be either | 0 or 1, depending on whether the concatenation of `a0' and `a1' is zero or | nonzero. The result is broken into two 64-bit pieces which are stored at | the locations pointed to by `z0Ptr' and `z1Ptr'. *----------------------------------------------------------------------------*/ INLINE void shift128RightJamming( bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr ) { bits64 z0, z1; int8 negCount = ( - count ) & 63; if ( count == 0 ) { z1 = a1; z0 = a0; } else if ( count < 64 ) { z1 = ( a0<>count ) | ( ( a1<>count; } else { if ( count == 64 ) { z1 = a0 | ( a1 != 0 ); } else if ( count < 128 ) { z1 = ( a0>>( count & 63 ) ) | ( ( ( a0<>count ); z0 = a0>>count; } else { if ( count == 64 ) { z2 = a1; z1 = a0; } else { a2 |= a1; if ( count < 128 ) { z2 = a0<>( count & 63 ); } else { z2 = ( count == 128 ) ? a0 : ( a0 != 0 ); z1 = 0; } } z0 = 0; } z2 |= ( a2 != 0 ); } *z2Ptr = z2; *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Shifts the 128-bit value formed by concatenating `a0' and `a1' left by the | number of bits given in `count'. Any bits shifted off are lost. The value | of `count' must be less than 64. The result is broken into two 64-bit | pieces which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. *----------------------------------------------------------------------------*/ INLINE void shortShift128Left( bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr ) { *z1Ptr = a1<>( ( - count ) & 63 ) ); } /*---------------------------------------------------------------------------- | Shifts the 192-bit value formed by concatenating `a0', `a1', and `a2' left | by the number of bits given in `count'. Any bits shifted off are lost. | The value of `count' must be less than 64. The result is broken into three | 64-bit pieces which are stored at the locations pointed to by `z0Ptr', | `z1Ptr', and `z2Ptr'. *----------------------------------------------------------------------------*/ INLINE void shortShift192Left( bits64 a0, bits64 a1, bits64 a2, int16 count, bits64 *z0Ptr, bits64 *z1Ptr, bits64 *z2Ptr ) { bits64 z0, z1, z2; int8 negCount; z2 = a2<>negCount; z0 |= a1>>negCount; } *z2Ptr = z2; *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Adds the 128-bit value formed by concatenating `a0' and `a1' to the 128-bit | value formed by concatenating `b0' and `b1'. Addition is modulo 2^128, so | any carry out is lost. The result is broken into two 64-bit pieces which | are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. *----------------------------------------------------------------------------*/ INLINE void add128( bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr ) { bits64 z1; z1 = a1 + b1; *z1Ptr = z1; *z0Ptr = a0 + b0 + ( z1 < a1 ); } /*---------------------------------------------------------------------------- | Adds the 192-bit value formed by concatenating `a0', `a1', and `a2' to the | 192-bit value formed by concatenating `b0', `b1', and `b2'. Addition is | modulo 2^192, so any carry out is lost. The result is broken into three | 64-bit pieces which are stored at the locations pointed to by `z0Ptr', | `z1Ptr', and `z2Ptr'. *----------------------------------------------------------------------------*/ INLINE void add192( bits64 a0, bits64 a1, bits64 a2, bits64 b0, bits64 b1, bits64 b2, bits64 *z0Ptr, bits64 *z1Ptr, bits64 *z2Ptr ) { bits64 z0, z1, z2; uint8 carry0, carry1; z2 = a2 + b2; carry1 = ( z2 < a2 ); z1 = a1 + b1; carry0 = ( z1 < a1 ); z0 = a0 + b0; z1 += carry1; z0 += ( z1 < carry1 ); z0 += carry0; *z2Ptr = z2; *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Subtracts the 128-bit value formed by concatenating `b0' and `b1' from the | 128-bit value formed by concatenating `a0' and `a1'. Subtraction is modulo | 2^128, so any borrow out (carry out) is lost. The result is broken into two | 64-bit pieces which are stored at the locations pointed to by `z0Ptr' and | `z1Ptr'. *----------------------------------------------------------------------------*/ INLINE void sub128( bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr ) { *z1Ptr = a1 - b1; *z0Ptr = a0 - b0 - ( a1 < b1 ); } /*---------------------------------------------------------------------------- | Subtracts the 192-bit value formed by concatenating `b0', `b1', and `b2' | from the 192-bit value formed by concatenating `a0', `a1', and `a2'. | Subtraction is modulo 2^192, so any borrow out (carry out) is lost. The | result is broken into three 64-bit pieces which are stored at the locations | pointed to by `z0Ptr', `z1Ptr', and `z2Ptr'. *----------------------------------------------------------------------------*/ INLINE void sub192( bits64 a0, bits64 a1, bits64 a2, bits64 b0, bits64 b1, bits64 b2, bits64 *z0Ptr, bits64 *z1Ptr, bits64 *z2Ptr ) { bits64 z0, z1, z2; uint8 borrow0, borrow1; z2 = a2 - b2; borrow1 = ( a2 < b2 ); z1 = a1 - b1; borrow0 = ( a1 < b1 ); z0 = a0 - b0; z0 -= ( z1 < borrow1 ); z1 -= borrow1; z0 -= borrow0; *z2Ptr = z2; *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Multiplies `a' by `b' to obtain a 128-bit product. The product is broken | into two 64-bit pieces which are stored at the locations pointed to by | `z0Ptr' and `z1Ptr'. *----------------------------------------------------------------------------*/ INLINE void mul64To128( bits64 a, bits64 b, bits64 *z0Ptr, bits64 *z1Ptr ) { bits32 aHigh, aLow, bHigh, bLow; bits64 z0, zMiddleA, zMiddleB, z1; aLow = a; aHigh = a>>32; bLow = b; bHigh = b>>32; z1 = ( (bits64) aLow ) * bLow; zMiddleA = ( (bits64) aLow ) * bHigh; zMiddleB = ( (bits64) aHigh ) * bLow; z0 = ( (bits64) aHigh ) * bHigh; zMiddleA += zMiddleB; z0 += ( ( (bits64) ( zMiddleA < zMiddleB ) )<<32 ) + ( zMiddleA>>32 ); zMiddleA <<= 32; z1 += zMiddleA; z0 += ( z1 < zMiddleA ); *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Multiplies the 128-bit value formed by concatenating `a0' and `a1' by | `b' to obtain a 192-bit product. The product is broken into three 64-bit | pieces which are stored at the locations pointed to by `z0Ptr', `z1Ptr', and | `z2Ptr'. *----------------------------------------------------------------------------*/ INLINE void mul128By64To192( bits64 a0, bits64 a1, bits64 b, bits64 *z0Ptr, bits64 *z1Ptr, bits64 *z2Ptr ) { bits64 z0, z1, z2, more1; mul64To128( a1, b, &z1, &z2 ); mul64To128( a0, b, &z0, &more1 ); add128( z0, more1, 0, z1, &z0, &z1 ); *z2Ptr = z2; *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Multiplies the 128-bit value formed by concatenating `a0' and `a1' to the | 128-bit value formed by concatenating `b0' and `b1' to obtain a 256-bit | product. The product is broken into four 64-bit pieces which are stored at | the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'. *----------------------------------------------------------------------------*/ INLINE void mul128To256( bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr, bits64 *z2Ptr, bits64 *z3Ptr ) { bits64 z0, z1, z2, z3; bits64 more1, more2; mul64To128( a1, b1, &z2, &z3 ); mul64To128( a1, b0, &z1, &more2 ); add128( z1, more2, 0, z2, &z1, &z2 ); mul64To128( a0, b0, &z0, &more1 ); add128( z0, more1, 0, z1, &z0, &z1 ); mul64To128( a0, b1, &more1, &more2 ); add128( more1, more2, 0, z2, &more1, &z2 ); add128( z0, z1, 0, more1, &z0, &z1 ); *z3Ptr = z3; *z2Ptr = z2; *z1Ptr = z1; *z0Ptr = z0; } /*---------------------------------------------------------------------------- | Returns an approximation to the 64-bit integer quotient obtained by dividing | `b' into the 128-bit value formed by concatenating `a0' and `a1'. The | divisor `b' must be at least 2^63. If q is the exact quotient truncated | toward zero, the approximation returned lies between q and q + 2 inclusive. | If the exact quotient q is larger than 64 bits, the maximum positive 64-bit | unsigned integer is returned. *----------------------------------------------------------------------------*/ INLINE bits64 estimateDiv128To64( bits64 a0, bits64 a1, bits64 b ) { bits64 b0, b1; bits64 rem0, rem1, term0, term1; bits64 z; if ( b <= a0 ) return LIT64( 0xFFFFFFFFFFFFFFFF ); b0 = b>>32; z = ( b0<<32 <= a0 ) ? LIT64( 0xFFFFFFFF00000000 ) : ( a0 / b0 )<<32; mul64To128( b, z, &term0, &term1 ); sub128( a0, a1, term0, term1, &rem0, &rem1 ); while ( ( (sbits64) rem0 ) < 0 ) { z -= LIT64( 0x100000000 ); b1 = b<<32; add128( rem0, rem1, b0, b1, &rem0, &rem1 ); } rem0 = ( rem0<<32 ) | ( rem1>>32 ); z |= ( b0<<32 <= rem0 ) ? 0xFFFFFFFF : rem0 / b0; return z; } /*---------------------------------------------------------------------------- | Returns an approximation to the square root of the 32-bit significand given | by `a'. Considered as an integer, `a' must be at least 2^31. If bit 0 of | `aExp' (the least significant bit) is 1, the integer returned approximates | 2^31*sqrt(`a'/2^31), where `a' is considered an integer. If bit 0 of `aExp' | is 0, the integer returned approximates 2^31*sqrt(`a'/2^30). In either | case, the approximation returned lies strictly within +/-2 of the exact | value. *----------------------------------------------------------------------------*/ INLINE bits32 estimateSqrt32( int16 aExp, bits32 a ) { static const bits16 sqrtOddAdjustments[] = { 0x0004, 0x0022, 0x005D, 0x00B1, 0x011D, 0x019F, 0x0236, 0x02E0, 0x039C, 0x0468, 0x0545, 0x0631, 0x072B, 0x0832, 0x0946, 0x0A67 }; static const bits16 sqrtEvenAdjustments[] = { 0x0A2D, 0x08AF, 0x075A, 0x0629, 0x051A, 0x0429, 0x0356, 0x029E, 0x0200, 0x0179, 0x0109, 0x00AF, 0x0068, 0x0034, 0x0012, 0x0002 }; int8 index; bits32 z; index = ( a>>27 ) & 15; if ( aExp & 1 ) { z = 0x4000 + ( a>>17 ) - sqrtOddAdjustments[ index ]; z = ( ( a / z )<<14 ) + ( z<<15 ); a >>= 1; } else { z = 0x8000 + ( a>>17 ) - sqrtEvenAdjustments[ index ]; z = a / z + z; z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 ); if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 ); } return ( (bits32) ( ( ( (bits64) a )<<31 ) / z ) ) + ( z>>1 ); } /*---------------------------------------------------------------------------- | Returns the number of leading 0 bits before the most-significant 1 bit of | `a'. If `a' is zero, 32 is returned. *----------------------------------------------------------------------------*/ static int8 countLeadingZeros32( bits32 a ) { static const int8 countLeadingZerosHigh[] = { 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int8 shiftCount; shiftCount = 0; if ( a < 0x10000 ) { shiftCount += 16; a <<= 16; } if ( a < 0x1000000 ) { shiftCount += 8; a <<= 8; } shiftCount += countLeadingZerosHigh[ a>>24 ]; return shiftCount; } /*---------------------------------------------------------------------------- | Returns the number of leading 0 bits before the most-significant 1 bit of | `a'. If `a' is zero, 64 is returned. *----------------------------------------------------------------------------*/ static int8 countLeadingZeros64( bits64 a ) { int8 shiftCount; shiftCount = 0; if ( a < ( (bits64) 1 )<<32 ) { shiftCount += 32; } else { a >>= 32; } shiftCount += countLeadingZeros32( a ); return shiftCount; } /*---------------------------------------------------------------------------- | Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' | is equal to the 128-bit value formed by concatenating `b0' and `b1'. | Otherwise, returns 0. *----------------------------------------------------------------------------*/ INLINE flag eq128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 ) { return ( a0 == b0 ) && ( a1 == b1 ); } /*---------------------------------------------------------------------------- | Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less | than or equal to the 128-bit value formed by concatenating `b0' and `b1'. | Otherwise, returns 0. *----------------------------------------------------------------------------*/ INLINE flag le128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 ) { return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 <= b1 ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less | than the 128-bit value formed by concatenating `b0' and `b1'. Otherwise, | returns 0. *----------------------------------------------------------------------------*/ INLINE flag lt128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 ) { return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 < b1 ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is | not equal to the 128-bit value formed by concatenating `b0' and `b1'. | Otherwise, returns 0. *----------------------------------------------------------------------------*/ INLINE flag ne128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 ) { return ( a0 != b0 ) || ( a1 != b1 ); } /*----------------------------------------------------------------------------- | Changes the sign of the extended double-precision floating-point value 'a'. | The operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ INLINE floatx80 floatx80_chs(floatx80 reg) { reg.high ^= 0x8000; return reg; } ================================================ FILE: vm86/mame/lib/softfloat/softfloat-specialize ================================================ /*============================================================================ This C source fragment is part of the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b. Written by John R. Hauser. This work was made possible in part by the International Computer Science Institute, located at Suite 600, 1947 Center Street, Berkeley, California 94704. Funding was partially provided by the National Science Foundation under grant MIP-9311980. The original version of this code was written as part of a project to build a fixed-point vector processor in collaboration with the University of California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek. More information is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ arithmetic/SoftFloat.html'. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ /*---------------------------------------------------------------------------- | Underflow tininess-detection mode, statically initialized to default value. | (The declaration in `softfloat.h' must match the `int8' type here.) *----------------------------------------------------------------------------*/ int8 float_detect_tininess = float_tininess_after_rounding; /*---------------------------------------------------------------------------- | Raises the exceptions specified by `flags'. Floating-point traps can be | defined here if desired. It is currently not possible for such a trap to | substitute a result value. If traps are not implemented, this routine | should be simply `float_exception_flags |= flags;'. *----------------------------------------------------------------------------*/ void float_raise( int8 flags ) { float_exception_flags |= flags; } /*---------------------------------------------------------------------------- | Internal canonical NaN format. *----------------------------------------------------------------------------*/ typedef struct { flag sign; bits64 high, low; } commonNaNT; /*---------------------------------------------------------------------------- | The pattern for a default generated single-precision NaN. *----------------------------------------------------------------------------*/ #define float32_default_nan 0xFFFFFFFF /*---------------------------------------------------------------------------- | Returns 1 if the single-precision floating-point value `a' is a NaN; | otherwise returns 0. *----------------------------------------------------------------------------*/ flag float32_is_nan( float32 a ) { return ( 0xFF000000 < (bits32) ( a<<1 ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the single-precision floating-point value `a' is a signaling | NaN; otherwise returns 0. *----------------------------------------------------------------------------*/ flag float32_is_signaling_nan( float32 a ) { return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF ); } /*---------------------------------------------------------------------------- | Returns the result of converting the single-precision floating-point NaN | `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid | exception is raised. *----------------------------------------------------------------------------*/ static commonNaNT float32ToCommonNaN( float32 a ) { commonNaNT z; if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid ); z.sign = a>>31; z.low = 0; z.high = ( (bits64) a )<<41; return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the canonical NaN `a' to the single- | precision floating-point format. *----------------------------------------------------------------------------*/ static float32 commonNaNToFloat32( commonNaNT a ) { return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 ); } /*---------------------------------------------------------------------------- | Takes two single-precision floating-point values `a' and `b', one of which | is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a | signaling NaN, the invalid exception is raised. *----------------------------------------------------------------------------*/ static float32 propagateFloat32NaN( float32 a, float32 b ) { flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN; aIsNaN = float32_is_nan( a ); aIsSignalingNaN = float32_is_signaling_nan( a ); bIsNaN = float32_is_nan( b ); bIsSignalingNaN = float32_is_signaling_nan( b ); a |= 0x00400000; b |= 0x00400000; if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid ); if ( aIsNaN ) { return ( aIsSignalingNaN & bIsNaN ) ? b : a; } else { return b; } } /*---------------------------------------------------------------------------- | The pattern for a default generated double-precision NaN. *----------------------------------------------------------------------------*/ #define float64_default_nan LIT64( 0xFFFFFFFFFFFFFFFF ) /*---------------------------------------------------------------------------- | Returns 1 if the double-precision floating-point value `a' is a NaN; | otherwise returns 0. *----------------------------------------------------------------------------*/ flag float64_is_nan( float64 a ) { return ( LIT64( 0xFFE0000000000000 ) < (bits64) ( a<<1 ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the double-precision floating-point value `a' is a signaling | NaN; otherwise returns 0. *----------------------------------------------------------------------------*/ flag float64_is_signaling_nan( float64 a ) { return ( ( ( a>>51 ) & 0xFFF ) == 0xFFE ) && ( a & LIT64( 0x0007FFFFFFFFFFFF ) ); } /*---------------------------------------------------------------------------- | Returns the result of converting the double-precision floating-point NaN | `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid | exception is raised. *----------------------------------------------------------------------------*/ static commonNaNT float64ToCommonNaN( float64 a ) { commonNaNT z; if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid ); z.sign = a>>63; z.low = 0; z.high = a<<12; return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the canonical NaN `a' to the double- | precision floating-point format. *----------------------------------------------------------------------------*/ static float64 commonNaNToFloat64( commonNaNT a ) { return ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FF8000000000000 ) | ( a.high>>12 ); } /*---------------------------------------------------------------------------- | Takes two double-precision floating-point values `a' and `b', one of which | is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a | signaling NaN, the invalid exception is raised. *----------------------------------------------------------------------------*/ static float64 propagateFloat64NaN( float64 a, float64 b ) { flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN; aIsNaN = float64_is_nan( a ); aIsSignalingNaN = float64_is_signaling_nan( a ); bIsNaN = float64_is_nan( b ); bIsSignalingNaN = float64_is_signaling_nan( b ); a |= LIT64( 0x0008000000000000 ); b |= LIT64( 0x0008000000000000 ); if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid ); if ( aIsNaN ) { return ( aIsSignalingNaN & bIsNaN ) ? b : a; } else { return b; } } #ifdef FLOATX80 /*---------------------------------------------------------------------------- | The pattern for a default generated extended double-precision NaN. The | `high' and `low' values hold the most- and least-significant bits, | respectively. *----------------------------------------------------------------------------*/ #define floatx80_default_nan_high 0xFFFF #define floatx80_default_nan_low LIT64( 0xFFFFFFFFFFFFFFFF ) /*---------------------------------------------------------------------------- | Returns 1 if the extended double-precision floating-point value `a' is a | NaN; otherwise returns 0. *----------------------------------------------------------------------------*/ flag floatx80_is_nan( floatx80 a ) { return ( ( a.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( a.low<<1 ); } /*---------------------------------------------------------------------------- | Returns 1 if the extended double-precision floating-point value `a' is a | signaling NaN; otherwise returns 0. *----------------------------------------------------------------------------*/ flag floatx80_is_signaling_nan( floatx80 a ) { bits64 aLow; aLow = a.low & ~ LIT64( 0x4000000000000000 ); return ( ( a.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( aLow<<1 ) && ( a.low == aLow ); } /*---------------------------------------------------------------------------- | Returns the result of converting the extended double-precision floating- | point NaN `a' to the canonical NaN format. If `a' is a signaling NaN, the | invalid exception is raised. *----------------------------------------------------------------------------*/ static commonNaNT floatx80ToCommonNaN( floatx80 a ) { commonNaNT z; if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid ); z.sign = a.high>>15; z.low = 0; z.high = a.low<<1; return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the canonical NaN `a' to the extended | double-precision floating-point format. *----------------------------------------------------------------------------*/ static floatx80 commonNaNToFloatx80( commonNaNT a ) { floatx80 z; z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 ); z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF; return z; } /*---------------------------------------------------------------------------- | Takes two extended double-precision floating-point values `a' and `b', one | of which is a NaN, and returns the appropriate NaN result. If either `a' or | `b' is a signaling NaN, the invalid exception is raised. *----------------------------------------------------------------------------*/ floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b ) { flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN; aIsNaN = floatx80_is_nan( a ); aIsSignalingNaN = floatx80_is_signaling_nan( a ); bIsNaN = floatx80_is_nan( b ); bIsSignalingNaN = floatx80_is_signaling_nan( b ); a.low |= LIT64( 0xC000000000000000 ); b.low |= LIT64( 0xC000000000000000 ); if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid ); if ( aIsNaN ) { return ( aIsSignalingNaN & bIsNaN ) ? b : a; } else { return b; } } #define EXP_BIAS 0x3FFF /*---------------------------------------------------------------------------- | Returns the fraction bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ INLINE bits64 extractFloatx80Frac( floatx80 a ) { return a.low; } /*---------------------------------------------------------------------------- | Returns the exponent bits of the extended double-precision floating-point | value `a'. *----------------------------------------------------------------------------*/ INLINE int32 extractFloatx80Exp( floatx80 a ) { return a.high & 0x7FFF; } /*---------------------------------------------------------------------------- | Returns the sign bit of the extended double-precision floating-point value | `a'. *----------------------------------------------------------------------------*/ INLINE flag extractFloatx80Sign( floatx80 a ) { return a.high>>15; } #endif #ifdef FLOAT128 /*---------------------------------------------------------------------------- | The pattern for a default generated quadruple-precision NaN. The `high' and | `low' values hold the most- and least-significant bits, respectively. *----------------------------------------------------------------------------*/ #define float128_default_nan_high LIT64( 0xFFFFFFFFFFFFFFFF ) #define float128_default_nan_low LIT64( 0xFFFFFFFFFFFFFFFF ) /*---------------------------------------------------------------------------- | Returns 1 if the quadruple-precision floating-point value `a' is a NaN; | otherwise returns 0. *----------------------------------------------------------------------------*/ flag float128_is_nan( float128 a ) { return ( LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) ) && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the quadruple-precision floating-point value `a' is a | signaling NaN; otherwise returns 0. *----------------------------------------------------------------------------*/ flag float128_is_signaling_nan( float128 a ) { return ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE ) && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) ); } /*---------------------------------------------------------------------------- | Returns the result of converting the quadruple-precision floating-point NaN | `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid | exception is raised. *----------------------------------------------------------------------------*/ static commonNaNT float128ToCommonNaN( float128 a ) { commonNaNT z; if ( float128_is_signaling_nan( a ) ) float_raise( float_flag_invalid ); z.sign = a.high>>63; shortShift128Left( a.high, a.low, 16, &z.high, &z.low ); return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the canonical NaN `a' to the quadruple- | precision floating-point format. *----------------------------------------------------------------------------*/ static float128 commonNaNToFloat128( commonNaNT a ) { float128 z; shift128Right( a.high, a.low, 16, &z.high, &z.low ); z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF800000000000 ); return z; } /*---------------------------------------------------------------------------- | Takes two quadruple-precision floating-point values `a' and `b', one of | which is a NaN, and returns the appropriate NaN result. If either `a' or | `b' is a signaling NaN, the invalid exception is raised. *----------------------------------------------------------------------------*/ static float128 propagateFloat128NaN( float128 a, float128 b ) { flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN; aIsNaN = float128_is_nan( a ); aIsSignalingNaN = float128_is_signaling_nan( a ); bIsNaN = float128_is_nan( b ); bIsSignalingNaN = float128_is_signaling_nan( b ); a.high |= LIT64( 0x0000800000000000 ); b.high |= LIT64( 0x0000800000000000 ); if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid ); if ( aIsNaN ) { return ( aIsSignalingNaN & bIsNaN ) ? b : a; } else { return b; } } #endif ================================================ FILE: vm86/mame/lib/softfloat/softfloat.c ================================================ /*============================================================================ This C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b. Written by John R. Hauser. This work was made possible in part by the International Computer Science Institute, located at Suite 600, 1947 Center Street, Berkeley, California 94704. Funding was partially provided by the National Science Foundation under grant MIP-9311980. The original version of this code was written as part of a project to build a fixed-point vector processor in collaboration with the University of California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek. More information is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ arithmetic/SoftFloat.html'. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ #include "milieu.h" #include "softfloat.h" /*---------------------------------------------------------------------------- | Floating-point rounding mode, extended double-precision rounding precision, | and exception flags. *----------------------------------------------------------------------------*/ int8 float_exception_flags = 0; #ifdef FLOATX80 int8 floatx80_rounding_precision = 80; #endif int8 float_rounding_mode = float_round_nearest_even; /*---------------------------------------------------------------------------- | Functions and definitions to determine: (1) whether tininess for underflow | is detected before or after rounding by default, (2) what (if anything) | happens when exceptions are raised, (3) how signaling NaNs are distinguished | from quiet NaNs, (4) the default generated quiet NaNs, and (5) how NaNs | are propagated from function inputs to output. These details are target- | specific. *----------------------------------------------------------------------------*/ #include "softfloat-specialize" /*---------------------------------------------------------------------------- | Takes a 64-bit fixed-point value `absZ' with binary point between bits 6 | and 7, and returns the properly rounded 32-bit integer corresponding to the | input. If `zSign' is 1, the input is negated before being converted to an | integer. Bit 63 of `absZ' must be zero. Ordinarily, the fixed-point input | is simply rounded to an integer, with the inexact exception raised if the | input cannot be represented exactly as an integer. However, if the fixed- | point input is too large, the invalid exception is raised and the largest | positive or negative integer is returned. *----------------------------------------------------------------------------*/ static int32 roundAndPackInt32( flag zSign, bits64 absZ ) { int8 roundingMode; flag roundNearestEven; int8 roundIncrement, roundBits; int32 z; roundingMode = float_rounding_mode; roundNearestEven = ( roundingMode == float_round_nearest_even ); roundIncrement = 0x40; if ( ! roundNearestEven ) { if ( roundingMode == float_round_to_zero ) { roundIncrement = 0; } else { roundIncrement = 0x7F; if ( zSign ) { if ( roundingMode == float_round_up ) roundIncrement = 0; } else { if ( roundingMode == float_round_down ) roundIncrement = 0; } } } roundBits = absZ & 0x7F; absZ = ( absZ + roundIncrement )>>7; absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven ); z = absZ; if ( zSign ) z = - z; if ( ( absZ>>32 ) || ( z && ( ( z < 0 ) ^ zSign ) ) ) { float_raise( float_flag_invalid ); return zSign ? (sbits32) 0x80000000 : 0x7FFFFFFF; } if ( roundBits ) float_exception_flags |= float_flag_inexact; return z; } /*---------------------------------------------------------------------------- | Takes the 128-bit fixed-point value formed by concatenating `absZ0' and | `absZ1', with binary point between bits 63 and 64 (between the input words), | and returns the properly rounded 64-bit integer corresponding to the input. | If `zSign' is 1, the input is negated before being converted to an integer. | Ordinarily, the fixed-point input is simply rounded to an integer, with | the inexact exception raised if the input cannot be represented exactly as | an integer. However, if the fixed-point input is too large, the invalid | exception is raised and the largest positive or negative integer is | returned. *----------------------------------------------------------------------------*/ static int64 roundAndPackInt64( flag zSign, bits64 absZ0, bits64 absZ1 ) { int8 roundingMode; flag roundNearestEven, increment; int64 z; roundingMode = float_rounding_mode; roundNearestEven = ( roundingMode == float_round_nearest_even ); increment = ( (sbits64) absZ1 < 0 ); if ( ! roundNearestEven ) { if ( roundingMode == float_round_to_zero ) { increment = 0; } else { if ( zSign ) { increment = ( roundingMode == float_round_down ) && absZ1; } else { increment = ( roundingMode == float_round_up ) && absZ1; } } } if ( increment ) { ++absZ0; if ( absZ0 == 0 ) goto overflow; absZ0 &= ~ ( ( (bits64) ( absZ1<<1 ) == 0 ) & roundNearestEven ); } z = absZ0; if ( zSign ) z = - z; if ( z && ( ( z < 0 ) ^ zSign ) ) { overflow: float_raise( float_flag_invalid ); return zSign ? (sbits64) LIT64( 0x8000000000000000 ) : LIT64( 0x7FFFFFFFFFFFFFFF ); } if ( absZ1 ) float_exception_flags |= float_flag_inexact; return z; } /*---------------------------------------------------------------------------- | Returns the fraction bits of the single-precision floating-point value `a'. *----------------------------------------------------------------------------*/ INLINE bits32 extractFloat32Frac( float32 a ) { return a & 0x007FFFFF; } /*---------------------------------------------------------------------------- | Returns the exponent bits of the single-precision floating-point value `a'. *----------------------------------------------------------------------------*/ INLINE int16 extractFloat32Exp( float32 a ) { return ( a>>23 ) & 0xFF; } /*---------------------------------------------------------------------------- | Returns the sign bit of the single-precision floating-point value `a'. *----------------------------------------------------------------------------*/ INLINE flag extractFloat32Sign( float32 a ) { return a>>31; } /*---------------------------------------------------------------------------- | Normalizes the subnormal single-precision floating-point value represented | by the denormalized significand `aSig'. The normalized exponent and | significand are stored at the locations pointed to by `zExpPtr' and | `zSigPtr', respectively. *----------------------------------------------------------------------------*/ static void normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr ) { int8 shiftCount; shiftCount = countLeadingZeros32( aSig ) - 8; *zSigPtr = aSig<>7; zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven ); if ( zSig == 0 ) zExp = 0; return packFloat32( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Takes an abstract floating-point value having sign `zSign', exponent `zExp', | and significand `zSig', and returns the proper single-precision floating- | point value corresponding to the abstract input. This routine is just like | `roundAndPackFloat32' except that `zSig' does not have to be normalized. | Bit 31 of `zSig' must be zero, and `zExp' must be 1 less than the ``true'' | floating-point exponent. *----------------------------------------------------------------------------*/ static float32 normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig ) { int8 shiftCount; shiftCount = countLeadingZeros32( zSig ) - 1; return roundAndPackFloat32( zSign, zExp - shiftCount, zSig<>52 ) & 0x7FF; } /*---------------------------------------------------------------------------- | Returns the sign bit of the double-precision floating-point value `a'. *----------------------------------------------------------------------------*/ INLINE flag extractFloat64Sign( float64 a ) { return a>>63; } /*---------------------------------------------------------------------------- | Normalizes the subnormal double-precision floating-point value represented | by the denormalized significand `aSig'. The normalized exponent and | significand are stored at the locations pointed to by `zExpPtr' and | `zSigPtr', respectively. *----------------------------------------------------------------------------*/ static void normalizeFloat64Subnormal( bits64 aSig, int16 *zExpPtr, bits64 *zSigPtr ) { int8 shiftCount; shiftCount = countLeadingZeros64( aSig ) - 11; *zSigPtr = aSig<>10; zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven ); if ( zSig == 0 ) zExp = 0; return packFloat64( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Takes an abstract floating-point value having sign `zSign', exponent `zExp', | and significand `zSig', and returns the proper double-precision floating- | point value corresponding to the abstract input. This routine is just like | `roundAndPackFloat64' except that `zSig' does not have to be normalized. | Bit 63 of `zSig' must be zero, and `zExp' must be 1 less than the ``true'' | floating-point exponent. *----------------------------------------------------------------------------*/ static float64 normalizeRoundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig ) { int8 shiftCount; shiftCount = countLeadingZeros64( zSig ) - 1; return roundAndPackFloat64( zSign, zExp - shiftCount, zSig<>48 ) & 0x7FFF; } /*---------------------------------------------------------------------------- | Returns the sign bit of the quadruple-precision floating-point value `a'. *----------------------------------------------------------------------------*/ INLINE flag extractFloat128Sign( float128 a ) { return a.high>>63; } /*---------------------------------------------------------------------------- | Normalizes the subnormal quadruple-precision floating-point value | represented by the denormalized significand formed by the concatenation of | `aSig0' and `aSig1'. The normalized exponent is stored at the location | pointed to by `zExpPtr'. The most significant 49 bits of the normalized | significand are stored at the location pointed to by `zSig0Ptr', and the | least significant 64 bits of the normalized significand are stored at the | location pointed to by `zSig1Ptr'. *----------------------------------------------------------------------------*/ static void normalizeFloat128Subnormal( bits64 aSig0, bits64 aSig1, int32 *zExpPtr, bits64 *zSig0Ptr, bits64 *zSig1Ptr ) { int8 shiftCount; if ( aSig0 == 0 ) { shiftCount = countLeadingZeros64( aSig1 ) - 15; if ( shiftCount < 0 ) { *zSig0Ptr = aSig1>>( - shiftCount ); *zSig1Ptr = aSig1<<( shiftCount & 63 ); } else { *zSig0Ptr = aSig1<>( - shiftCount ); if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) { float_exception_flags |= float_flag_inexact; } if ( aSign ) z = - z; return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the single-precision floating-point value | `a' to the 64-bit two's complement integer format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic---which means in particular that the conversion is rounded | according to the current rounding mode. If `a' is a NaN, the largest | positive integer is returned. Otherwise, if the conversion overflows, the | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ int64 float32_to_int64( float32 a ) { flag aSign; int16 aExp, shiftCount; bits32 aSig; bits64 aSig64, aSigExtra; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); shiftCount = 0xBE - aExp; if ( shiftCount < 0 ) { float_raise( float_flag_invalid ); if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) { return LIT64( 0x7FFFFFFFFFFFFFFF ); } return (sbits64) LIT64( 0x8000000000000000 ); } if ( aExp ) aSig |= 0x00800000; aSig64 = aSig; aSig64 <<= 40; shift64ExtraRightJamming( aSig64, 0, shiftCount, &aSig64, &aSigExtra ); return roundAndPackInt64( aSign, aSig64, aSigExtra ); } /*---------------------------------------------------------------------------- | Returns the result of converting the single-precision floating-point value | `a' to the 64-bit two's complement integer format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic, except that the conversion is always rounded toward zero. If | `a' is a NaN, the largest positive integer is returned. Otherwise, if the | conversion overflows, the largest integer with the same sign as `a' is | returned. *----------------------------------------------------------------------------*/ int64 float32_to_int64_round_to_zero( float32 a ) { flag aSign; int16 aExp, shiftCount; bits32 aSig; bits64 aSig64; int64 z; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); shiftCount = aExp - 0xBE; if ( 0 <= shiftCount ) { if ( a != 0xDF000000 ) { float_raise( float_flag_invalid ); if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) { return LIT64( 0x7FFFFFFFFFFFFFFF ); } } return (sbits64) LIT64( 0x8000000000000000 ); } else if ( aExp <= 0x7E ) { if ( aExp | aSig ) float_exception_flags |= float_flag_inexact; return 0; } aSig64 = aSig | 0x00800000; aSig64 <<= 40; z = aSig64>>( - shiftCount ); if ( (bits64) ( aSig64<<( shiftCount & 63 ) ) ) { float_exception_flags |= float_flag_inexact; } if ( aSign ) z = - z; return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the single-precision floating-point value | `a' to the double-precision floating-point format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ float64 float32_to_float64( float32 a ) { flag aSign; int16 aExp; bits32 aSig; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); if ( aExp == 0xFF ) { if ( aSig ) return commonNaNToFloat64( float32ToCommonNaN( a ) ); return packFloat64( aSign, 0x7FF, 0 ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloat64( aSign, 0, 0 ); normalizeFloat32Subnormal( aSig, &aExp, &aSig ); --aExp; } return packFloat64( aSign, aExp + 0x380, ( (bits64) aSig )<<29 ); } #ifdef FLOATX80 /*---------------------------------------------------------------------------- | Returns the result of converting the single-precision floating-point value | `a' to the extended double-precision floating-point format. The conversion | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ floatx80 float32_to_floatx80( float32 a ) { flag aSign; int16 aExp; bits32 aSig; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); if ( aExp == 0xFF ) { if ( aSig ) return commonNaNToFloatx80( float32ToCommonNaN( a ) ); return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 ); normalizeFloat32Subnormal( aSig, &aExp, &aSig ); } aSig |= 0x00800000; return packFloatx80( aSign, aExp + 0x3F80, ( (bits64) aSig )<<40 ); } #endif #ifdef FLOAT128 /*---------------------------------------------------------------------------- | Returns the result of converting the single-precision floating-point value | `a' to the double-precision floating-point format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ float128 float32_to_float128( float32 a ) { flag aSign; int16 aExp; bits32 aSig; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); if ( aExp == 0xFF ) { if ( aSig ) return commonNaNToFloat128( float32ToCommonNaN( a ) ); return packFloat128( aSign, 0x7FFF, 0, 0 ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloat128( aSign, 0, 0, 0 ); normalizeFloat32Subnormal( aSig, &aExp, &aSig ); --aExp; } return packFloat128( aSign, aExp + 0x3F80, ( (bits64) aSig )<<25, 0 ); } #endif /*---------------------------------------------------------------------------- | Rounds the single-precision floating-point value `a' to an integer, and | returns the result as a single-precision floating-point value. The | operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float32 float32_round_to_int( float32 a ) { flag aSign; int16 aExp; bits32 lastBitMask, roundBitsMask; int8 roundingMode; float32 z; aExp = extractFloat32Exp( a ); if ( 0x96 <= aExp ) { if ( ( aExp == 0xFF ) && extractFloat32Frac( a ) ) { return propagateFloat32NaN( a, a ); } return a; } if ( aExp <= 0x7E ) { if ( (bits32) ( a<<1 ) == 0 ) return a; float_exception_flags |= float_flag_inexact; aSign = extractFloat32Sign( a ); switch ( float_rounding_mode ) { case float_round_nearest_even: if ( ( aExp == 0x7E ) && extractFloat32Frac( a ) ) { return packFloat32( aSign, 0x7F, 0 ); } break; case float_round_down: return aSign ? 0xBF800000 : 0; case float_round_up: return aSign ? 0x80000000 : 0x3F800000; } return packFloat32( aSign, 0, 0 ); } lastBitMask = 1; lastBitMask <<= 0x96 - aExp; roundBitsMask = lastBitMask - 1; z = a; roundingMode = float_rounding_mode; if ( roundingMode == float_round_nearest_even ) { z += lastBitMask>>1; if ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask; } else if ( roundingMode != float_round_to_zero ) { if ( extractFloat32Sign( z ) ^ ( roundingMode == float_round_up ) ) { z += roundBitsMask; } } z &= ~ roundBitsMask; if ( z != a ) float_exception_flags |= float_flag_inexact; return z; } /*---------------------------------------------------------------------------- | Returns the result of adding the absolute values of the single-precision | floating-point values `a' and `b'. If `zSign' is 1, the sum is negated | before being returned. `zSign' is ignored if the result is a NaN. | The addition is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ static float32 addFloat32Sigs( float32 a, float32 b, flag zSign ) { int16 aExp, bExp, zExp; bits32 aSig, bSig, zSig; int16 expDiff; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); bSig = extractFloat32Frac( b ); bExp = extractFloat32Exp( b ); expDiff = aExp - bExp; aSig <<= 6; bSig <<= 6; if ( 0 < expDiff ) { if ( aExp == 0xFF ) { if ( aSig ) return propagateFloat32NaN( a, b ); return a; } if ( bExp == 0 ) { --expDiff; } else { bSig |= 0x20000000; } shift32RightJamming( bSig, expDiff, &bSig ); zExp = aExp; } else if ( expDiff < 0 ) { if ( bExp == 0xFF ) { if ( bSig ) return propagateFloat32NaN( a, b ); return packFloat32( zSign, 0xFF, 0 ); } if ( aExp == 0 ) { ++expDiff; } else { aSig |= 0x20000000; } shift32RightJamming( aSig, - expDiff, &aSig ); zExp = bExp; } else { if ( aExp == 0xFF ) { if ( aSig | bSig ) return propagateFloat32NaN( a, b ); return a; } if ( aExp == 0 ) return packFloat32( zSign, 0, ( aSig + bSig )>>6 ); zSig = 0x40000000 + aSig + bSig; zExp = aExp; goto roundAndPack; } aSig |= 0x20000000; zSig = ( aSig + bSig )<<1; --zExp; if ( (sbits32) zSig < 0 ) { zSig = aSig + bSig; ++zExp; } roundAndPack: return roundAndPackFloat32( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns the result of subtracting the absolute values of the single- | precision floating-point values `a' and `b'. If `zSign' is 1, the | difference is negated before being returned. `zSign' is ignored if the | result is a NaN. The subtraction is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ static float32 subFloat32Sigs( float32 a, float32 b, flag zSign ) { int16 aExp, bExp, zExp; bits32 aSig, bSig, zSig; int16 expDiff; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); bSig = extractFloat32Frac( b ); bExp = extractFloat32Exp( b ); expDiff = aExp - bExp; aSig <<= 7; bSig <<= 7; if ( 0 < expDiff ) goto aExpBigger; if ( expDiff < 0 ) goto bExpBigger; if ( aExp == 0xFF ) { if ( aSig | bSig ) return propagateFloat32NaN( a, b ); float_raise( float_flag_invalid ); return float32_default_nan; } if ( aExp == 0 ) { aExp = 1; bExp = 1; } if ( bSig < aSig ) goto aBigger; if ( aSig < bSig ) goto bBigger; return packFloat32( float_rounding_mode == float_round_down, 0, 0 ); bExpBigger: if ( bExp == 0xFF ) { if ( bSig ) return propagateFloat32NaN( a, b ); return packFloat32( zSign ^ 1, 0xFF, 0 ); } if ( aExp == 0 ) { ++expDiff; } else { aSig |= 0x40000000; } shift32RightJamming( aSig, - expDiff, &aSig ); bSig |= 0x40000000; bBigger: zSig = bSig - aSig; zExp = bExp; zSign ^= 1; goto normalizeRoundAndPack; aExpBigger: if ( aExp == 0xFF ) { if ( aSig ) return propagateFloat32NaN( a, b ); return a; } if ( bExp == 0 ) { --expDiff; } else { bSig |= 0x40000000; } shift32RightJamming( bSig, expDiff, &bSig ); aSig |= 0x40000000; aBigger: zSig = aSig - bSig; zExp = aExp; normalizeRoundAndPack: --zExp; return normalizeRoundAndPackFloat32( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns the result of adding the single-precision floating-point values `a' | and `b'. The operation is performed according to the IEC/IEEE Standard for | Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float32 float32_add( float32 a, float32 b ) { flag aSign, bSign; aSign = extractFloat32Sign( a ); bSign = extractFloat32Sign( b ); if ( aSign == bSign ) { return addFloat32Sigs( a, b, aSign ); } else { return subFloat32Sigs( a, b, aSign ); } } /*---------------------------------------------------------------------------- | Returns the result of subtracting the single-precision floating-point values | `a' and `b'. The operation is performed according to the IEC/IEEE Standard | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float32 float32_sub( float32 a, float32 b ) { flag aSign, bSign; aSign = extractFloat32Sign( a ); bSign = extractFloat32Sign( b ); if ( aSign == bSign ) { return subFloat32Sigs( a, b, aSign ); } else { return addFloat32Sigs( a, b, aSign ); } } /*---------------------------------------------------------------------------- | Returns the result of multiplying the single-precision floating-point values | `a' and `b'. The operation is performed according to the IEC/IEEE Standard | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float32 float32_mul( float32 a, float32 b ) { flag aSign, bSign, zSign; int16 aExp, bExp, zExp; bits32 aSig, bSig; bits64 zSig64; bits32 zSig; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); bSig = extractFloat32Frac( b ); bExp = extractFloat32Exp( b ); bSign = extractFloat32Sign( b ); zSign = aSign ^ bSign; if ( aExp == 0xFF ) { if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) { return propagateFloat32NaN( a, b ); } if ( ( bExp | bSig ) == 0 ) { float_raise( float_flag_invalid ); return float32_default_nan; } return packFloat32( zSign, 0xFF, 0 ); } if ( bExp == 0xFF ) { if ( bSig ) return propagateFloat32NaN( a, b ); if ( ( aExp | aSig ) == 0 ) { float_raise( float_flag_invalid ); return float32_default_nan; } return packFloat32( zSign, 0xFF, 0 ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloat32( zSign, 0, 0 ); normalizeFloat32Subnormal( aSig, &aExp, &aSig ); } if ( bExp == 0 ) { if ( bSig == 0 ) return packFloat32( zSign, 0, 0 ); normalizeFloat32Subnormal( bSig, &bExp, &bSig ); } zExp = aExp + bExp - 0x7F; aSig = ( aSig | 0x00800000 )<<7; bSig = ( bSig | 0x00800000 )<<8; shift64RightJamming( ( (bits64) aSig ) * bSig, 32, &zSig64 ); zSig = zSig64; if ( 0 <= (sbits32) ( zSig<<1 ) ) { zSig <<= 1; --zExp; } return roundAndPackFloat32( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns the result of dividing the single-precision floating-point value `a' | by the corresponding value `b'. The operation is performed according to the | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float32 float32_div( float32 a, float32 b ) { flag aSign, bSign, zSign; int16 aExp, bExp, zExp; bits32 aSig, bSig, zSig; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); bSig = extractFloat32Frac( b ); bExp = extractFloat32Exp( b ); bSign = extractFloat32Sign( b ); zSign = aSign ^ bSign; if ( aExp == 0xFF ) { if ( aSig ) return propagateFloat32NaN( a, b ); if ( bExp == 0xFF ) { if ( bSig ) return propagateFloat32NaN( a, b ); float_raise( float_flag_invalid ); return float32_default_nan; } return packFloat32( zSign, 0xFF, 0 ); } if ( bExp == 0xFF ) { if ( bSig ) return propagateFloat32NaN( a, b ); return packFloat32( zSign, 0, 0 ); } if ( bExp == 0 ) { if ( bSig == 0 ) { if ( ( aExp | aSig ) == 0 ) { float_raise( float_flag_invalid ); return float32_default_nan; } float_raise( float_flag_divbyzero ); return packFloat32( zSign, 0xFF, 0 ); } normalizeFloat32Subnormal( bSig, &bExp, &bSig ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloat32( zSign, 0, 0 ); normalizeFloat32Subnormal( aSig, &aExp, &aSig ); } zExp = aExp - bExp + 0x7D; aSig = ( aSig | 0x00800000 )<<7; bSig = ( bSig | 0x00800000 )<<8; if ( bSig <= ( aSig + aSig ) ) { aSig >>= 1; ++zExp; } zSig = ( ( (bits64) aSig )<<32 ) / bSig; if ( ( zSig & 0x3F ) == 0 ) { zSig |= ( (bits64) bSig * zSig != ( (bits64) aSig )<<32 ); } return roundAndPackFloat32( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns the remainder of the single-precision floating-point value `a' | with respect to the corresponding value `b'. The operation is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float32 float32_rem( float32 a, float32 b ) { flag aSign, zSign; int16 aExp, bExp, expDiff; bits32 aSig, bSig; bits32 q; bits64 aSig64, bSig64, q64; bits32 alternateASig; sbits32 sigMean; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); bSig = extractFloat32Frac( b ); bExp = extractFloat32Exp( b ); // bSign = extractFloat32Sign( b ); if ( aExp == 0xFF ) { if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) { return propagateFloat32NaN( a, b ); } float_raise( float_flag_invalid ); return float32_default_nan; } if ( bExp == 0xFF ) { if ( bSig ) return propagateFloat32NaN( a, b ); return a; } if ( bExp == 0 ) { if ( bSig == 0 ) { float_raise( float_flag_invalid ); return float32_default_nan; } normalizeFloat32Subnormal( bSig, &bExp, &bSig ); } if ( aExp == 0 ) { if ( aSig == 0 ) return a; normalizeFloat32Subnormal( aSig, &aExp, &aSig ); } expDiff = aExp - bExp; aSig |= 0x00800000; bSig |= 0x00800000; if ( expDiff < 32 ) { aSig <<= 8; bSig <<= 8; if ( expDiff < 0 ) { if ( expDiff < -1 ) return a; aSig >>= 1; } q = ( bSig <= aSig ); if ( q ) aSig -= bSig; if ( 0 < expDiff ) { q = ( ( (bits64) aSig )<<32 ) / bSig; q >>= 32 - expDiff; bSig >>= 2; aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q; } else { aSig >>= 2; bSig >>= 2; } } else { if ( bSig <= aSig ) aSig -= bSig; aSig64 = ( (bits64) aSig )<<40; bSig64 = ( (bits64) bSig )<<40; expDiff -= 64; while ( 0 < expDiff ) { q64 = estimateDiv128To64( aSig64, 0, bSig64 ); q64 = ( 2 < q64 ) ? q64 - 2 : 0; aSig64 = - ( ( bSig * q64 )<<38 ); expDiff -= 62; } expDiff += 64; q64 = estimateDiv128To64( aSig64, 0, bSig64 ); q64 = ( 2 < q64 ) ? q64 - 2 : 0; q = q64>>( 64 - expDiff ); bSig <<= 6; aSig = ( ( aSig64>>33 )<<( expDiff - 1 ) ) - bSig * q; } do { alternateASig = aSig; ++q; aSig -= bSig; } while ( 0 <= (sbits32) aSig ); sigMean = aSig + alternateASig; if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) { aSig = alternateASig; } zSign = ( (sbits32) aSig < 0 ); if ( zSign ) aSig = - aSig; return normalizeRoundAndPackFloat32( aSign ^ zSign, bExp, aSig ); } /*---------------------------------------------------------------------------- | Returns the square root of the single-precision floating-point value `a'. | The operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float32 float32_sqrt( float32 a ) { flag aSign; int16 aExp, zExp; bits32 aSig, zSig; bits64 rem, term; aSig = extractFloat32Frac( a ); aExp = extractFloat32Exp( a ); aSign = extractFloat32Sign( a ); if ( aExp == 0xFF ) { if ( aSig ) return propagateFloat32NaN( a, 0 ); if ( ! aSign ) return a; float_raise( float_flag_invalid ); return float32_default_nan; } if ( aSign ) { if ( ( aExp | aSig ) == 0 ) return a; float_raise( float_flag_invalid ); return float32_default_nan; } if ( aExp == 0 ) { if ( aSig == 0 ) return 0; normalizeFloat32Subnormal( aSig, &aExp, &aSig ); } zExp = ( ( aExp - 0x7F )>>1 ) + 0x7E; aSig = ( aSig | 0x00800000 )<<8; zSig = estimateSqrt32( aExp, aSig ) + 2; if ( ( zSig & 0x7F ) <= 5 ) { if ( zSig < 2 ) { zSig = 0x7FFFFFFF; goto roundAndPack; } aSig >>= aExp & 1; term = ( (bits64) zSig ) * zSig; rem = ( ( (bits64) aSig )<<32 ) - term; while ( (sbits64) rem < 0 ) { --zSig; rem += ( ( (bits64) zSig )<<1 ) | 1; } zSig |= ( rem != 0 ); } shift32RightJamming( zSig, 1, &zSig ); roundAndPack: return roundAndPackFloat32( 0, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns 1 if the single-precision floating-point value `a' is equal to | the corresponding value `b', and 0 otherwise. The comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float32_eq( float32 a, float32 b ) { if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) ) || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) ) ) { if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 ); } /*---------------------------------------------------------------------------- | Returns 1 if the single-precision floating-point value `a' is less than | or equal to the corresponding value `b', and 0 otherwise. The comparison | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ flag float32_le( float32 a, float32 b ) { flag aSign, bSign; if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) ) || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) ) ) { float_raise( float_flag_invalid ); return 0; } aSign = extractFloat32Sign( a ); bSign = extractFloat32Sign( b ); if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 ); return ( a == b ) || ( aSign ^ ( a < b ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the single-precision floating-point value `a' is less than | the corresponding value `b', and 0 otherwise. The comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float32_lt( float32 a, float32 b ) { flag aSign, bSign; if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) ) || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) ) ) { float_raise( float_flag_invalid ); return 0; } aSign = extractFloat32Sign( a ); bSign = extractFloat32Sign( b ); if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 ); return ( a != b ) && ( aSign ^ ( a < b ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the single-precision floating-point value `a' is equal to | the corresponding value `b', and 0 otherwise. The invalid exception is | raised if either operand is a NaN. Otherwise, the comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float32_eq_signaling( float32 a, float32 b ) { if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) ) || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) ) ) { float_raise( float_flag_invalid ); return 0; } return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 ); } /*---------------------------------------------------------------------------- | Returns 1 if the single-precision floating-point value `a' is less than or | equal to the corresponding value `b', and 0 otherwise. Quiet NaNs do not | cause an exception. Otherwise, the comparison is performed according to the | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float32_le_quiet( float32 a, float32 b ) { flag aSign, bSign; // int16 aExp, bExp; if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) ) || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) ) ) { if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } aSign = extractFloat32Sign( a ); bSign = extractFloat32Sign( b ); if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 ); return ( a == b ) || ( aSign ^ ( a < b ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the single-precision floating-point value `a' is less than | the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause an | exception. Otherwise, the comparison is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float32_lt_quiet( float32 a, float32 b ) { flag aSign, bSign; if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) ) || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) ) ) { if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } aSign = extractFloat32Sign( a ); bSign = extractFloat32Sign( b ); if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 ); return ( a != b ) && ( aSign ^ ( a < b ) ); } /*---------------------------------------------------------------------------- | Returns the result of converting the double-precision floating-point value | `a' to the 32-bit two's complement integer format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic---which means in particular that the conversion is rounded | according to the current rounding mode. If `a' is a NaN, the largest | positive integer is returned. Otherwise, if the conversion overflows, the | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ int32 float64_to_int32( float64 a ) { flag aSign; int16 aExp, shiftCount; bits64 aSig; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); if ( ( aExp == 0x7FF ) && aSig ) aSign = 0; if ( aExp ) aSig |= LIT64( 0x0010000000000000 ); shiftCount = 0x42C - aExp; if ( 0 < shiftCount ) shift64RightJamming( aSig, shiftCount, &aSig ); return roundAndPackInt32( aSign, aSig ); } /*---------------------------------------------------------------------------- | Returns the result of converting the double-precision floating-point value | `a' to the 32-bit two's complement integer format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic, except that the conversion is always rounded toward zero. | If `a' is a NaN, the largest positive integer is returned. Otherwise, if | the conversion overflows, the largest integer with the same sign as `a' is | returned. *----------------------------------------------------------------------------*/ int32 float64_to_int32_round_to_zero( float64 a ) { flag aSign; int16 aExp, shiftCount; bits64 aSig, savedASig; int32 z; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); if ( 0x41E < aExp ) { if ( ( aExp == 0x7FF ) && aSig ) aSign = 0; goto invalid; } else if ( aExp < 0x3FF ) { if ( aExp || aSig ) float_exception_flags |= float_flag_inexact; return 0; } aSig |= LIT64( 0x0010000000000000 ); shiftCount = 0x433 - aExp; savedASig = aSig; aSig >>= shiftCount; z = aSig; if ( aSign ) z = - z; if ( ( z < 0 ) ^ aSign ) { invalid: float_raise( float_flag_invalid ); return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF; } if ( ( aSig<>( - shiftCount ); if ( (bits64) ( aSig<<( shiftCount & 63 ) ) ) { float_exception_flags |= float_flag_inexact; } } if ( aSign ) z = - z; return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the double-precision floating-point value | `a' to the single-precision floating-point format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ float32 float64_to_float32( float64 a ) { flag aSign; int16 aExp; bits64 aSig; bits32 zSig; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); if ( aExp == 0x7FF ) { if ( aSig ) return commonNaNToFloat32( float64ToCommonNaN( a ) ); return packFloat32( aSign, 0xFF, 0 ); } shift64RightJamming( aSig, 22, &aSig ); zSig = aSig; if ( aExp || zSig ) { zSig |= 0x40000000; aExp -= 0x381; } return roundAndPackFloat32( aSign, aExp, zSig ); } #ifdef FLOATX80 /*---------------------------------------------------------------------------- | Returns the result of converting the double-precision floating-point value | `a' to the extended double-precision floating-point format. The conversion | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ floatx80 float64_to_floatx80( float64 a ) { flag aSign; int16 aExp; bits64 aSig; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); if ( aExp == 0x7FF ) { if ( aSig ) return commonNaNToFloatx80( float64ToCommonNaN( a ) ); return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 ); normalizeFloat64Subnormal( aSig, &aExp, &aSig ); } return packFloatx80( aSign, aExp + 0x3C00, ( aSig | LIT64( 0x0010000000000000 ) )<<11 ); } #endif #ifdef FLOAT128 /*---------------------------------------------------------------------------- | Returns the result of converting the double-precision floating-point value | `a' to the quadruple-precision floating-point format. The conversion is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ float128 float64_to_float128( float64 a ) { flag aSign; int16 aExp; bits64 aSig, zSig0, zSig1; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); if ( aExp == 0x7FF ) { if ( aSig ) return commonNaNToFloat128( float64ToCommonNaN( a ) ); return packFloat128( aSign, 0x7FFF, 0, 0 ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloat128( aSign, 0, 0, 0 ); normalizeFloat64Subnormal( aSig, &aExp, &aSig ); --aExp; } shift128Right( aSig, 0, 4, &zSig0, &zSig1 ); return packFloat128( aSign, aExp + 0x3C00, zSig0, zSig1 ); } #endif /*---------------------------------------------------------------------------- | Rounds the double-precision floating-point value `a' to an integer, and | returns the result as a double-precision floating-point value. The | operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float64 float64_round_to_int( float64 a ) { flag aSign; int16 aExp; bits64 lastBitMask, roundBitsMask; int8 roundingMode; float64 z; aExp = extractFloat64Exp( a ); if ( 0x433 <= aExp ) { if ( ( aExp == 0x7FF ) && extractFloat64Frac( a ) ) { return propagateFloat64NaN( a, a ); } return a; } if ( aExp < 0x3FF ) { if ( (bits64) ( a<<1 ) == 0 ) return a; float_exception_flags |= float_flag_inexact; aSign = extractFloat64Sign( a ); switch ( float_rounding_mode ) { case float_round_nearest_even: if ( ( aExp == 0x3FE ) && extractFloat64Frac( a ) ) { return packFloat64( aSign, 0x3FF, 0 ); } break; case float_round_down: return aSign ? LIT64( 0xBFF0000000000000 ) : 0; case float_round_up: return aSign ? LIT64( 0x8000000000000000 ) : LIT64( 0x3FF0000000000000 ); } return packFloat64( aSign, 0, 0 ); } lastBitMask = 1; lastBitMask <<= 0x433 - aExp; roundBitsMask = lastBitMask - 1; z = a; roundingMode = float_rounding_mode; if ( roundingMode == float_round_nearest_even ) { z += lastBitMask>>1; if ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask; } else if ( roundingMode != float_round_to_zero ) { if ( extractFloat64Sign( z ) ^ ( roundingMode == float_round_up ) ) { z += roundBitsMask; } } z &= ~ roundBitsMask; if ( z != a ) float_exception_flags |= float_flag_inexact; return z; } /*---------------------------------------------------------------------------- | Returns the result of adding the absolute values of the double-precision | floating-point values `a' and `b'. If `zSign' is 1, the sum is negated | before being returned. `zSign' is ignored if the result is a NaN. | The addition is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ static float64 addFloat64Sigs( float64 a, float64 b, flag zSign ) { int16 aExp, bExp, zExp; bits64 aSig, bSig, zSig; int16 expDiff; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); bSig = extractFloat64Frac( b ); bExp = extractFloat64Exp( b ); expDiff = aExp - bExp; aSig <<= 9; bSig <<= 9; if ( 0 < expDiff ) { if ( aExp == 0x7FF ) { if ( aSig ) return propagateFloat64NaN( a, b ); return a; } if ( bExp == 0 ) { --expDiff; } else { bSig |= LIT64( 0x2000000000000000 ); } shift64RightJamming( bSig, expDiff, &bSig ); zExp = aExp; } else if ( expDiff < 0 ) { if ( bExp == 0x7FF ) { if ( bSig ) return propagateFloat64NaN( a, b ); return packFloat64( zSign, 0x7FF, 0 ); } if ( aExp == 0 ) { ++expDiff; } else { aSig |= LIT64( 0x2000000000000000 ); } shift64RightJamming( aSig, - expDiff, &aSig ); zExp = bExp; } else { if ( aExp == 0x7FF ) { if ( aSig | bSig ) return propagateFloat64NaN( a, b ); return a; } if ( aExp == 0 ) return packFloat64( zSign, 0, ( aSig + bSig )>>9 ); zSig = LIT64( 0x4000000000000000 ) + aSig + bSig; zExp = aExp; goto roundAndPack; } aSig |= LIT64( 0x2000000000000000 ); zSig = ( aSig + bSig )<<1; --zExp; if ( (sbits64) zSig < 0 ) { zSig = aSig + bSig; ++zExp; } roundAndPack: return roundAndPackFloat64( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns the result of subtracting the absolute values of the double- | precision floating-point values `a' and `b'. If `zSign' is 1, the | difference is negated before being returned. `zSign' is ignored if the | result is a NaN. The subtraction is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ static float64 subFloat64Sigs( float64 a, float64 b, flag zSign ) { int16 aExp, bExp, zExp; bits64 aSig, bSig, zSig; int16 expDiff; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); bSig = extractFloat64Frac( b ); bExp = extractFloat64Exp( b ); expDiff = aExp - bExp; aSig <<= 10; bSig <<= 10; if ( 0 < expDiff ) goto aExpBigger; if ( expDiff < 0 ) goto bExpBigger; if ( aExp == 0x7FF ) { if ( aSig | bSig ) return propagateFloat64NaN( a, b ); float_raise( float_flag_invalid ); return float64_default_nan; } if ( aExp == 0 ) { aExp = 1; bExp = 1; } if ( bSig < aSig ) goto aBigger; if ( aSig < bSig ) goto bBigger; return packFloat64( float_rounding_mode == float_round_down, 0, 0 ); bExpBigger: if ( bExp == 0x7FF ) { if ( bSig ) return propagateFloat64NaN( a, b ); return packFloat64( zSign ^ 1, 0x7FF, 0 ); } if ( aExp == 0 ) { ++expDiff; } else { aSig |= LIT64( 0x4000000000000000 ); } shift64RightJamming( aSig, - expDiff, &aSig ); bSig |= LIT64( 0x4000000000000000 ); bBigger: zSig = bSig - aSig; zExp = bExp; zSign ^= 1; goto normalizeRoundAndPack; aExpBigger: if ( aExp == 0x7FF ) { if ( aSig ) return propagateFloat64NaN( a, b ); return a; } if ( bExp == 0 ) { --expDiff; } else { bSig |= LIT64( 0x4000000000000000 ); } shift64RightJamming( bSig, expDiff, &bSig ); aSig |= LIT64( 0x4000000000000000 ); aBigger: zSig = aSig - bSig; zExp = aExp; normalizeRoundAndPack: --zExp; return normalizeRoundAndPackFloat64( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns the result of adding the double-precision floating-point values `a' | and `b'. The operation is performed according to the IEC/IEEE Standard for | Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float64 float64_add( float64 a, float64 b ) { flag aSign, bSign; aSign = extractFloat64Sign( a ); bSign = extractFloat64Sign( b ); if ( aSign == bSign ) { return addFloat64Sigs( a, b, aSign ); } else { return subFloat64Sigs( a, b, aSign ); } } /*---------------------------------------------------------------------------- | Returns the result of subtracting the double-precision floating-point values | `a' and `b'. The operation is performed according to the IEC/IEEE Standard | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float64 float64_sub( float64 a, float64 b ) { flag aSign, bSign; aSign = extractFloat64Sign( a ); bSign = extractFloat64Sign( b ); if ( aSign == bSign ) { return subFloat64Sigs( a, b, aSign ); } else { return addFloat64Sigs( a, b, aSign ); } } /*---------------------------------------------------------------------------- | Returns the result of multiplying the double-precision floating-point values | `a' and `b'. The operation is performed according to the IEC/IEEE Standard | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float64 float64_mul( float64 a, float64 b ) { flag aSign, bSign, zSign; int16 aExp, bExp, zExp; bits64 aSig, bSig, zSig0, zSig1; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); bSig = extractFloat64Frac( b ); bExp = extractFloat64Exp( b ); bSign = extractFloat64Sign( b ); zSign = aSign ^ bSign; if ( aExp == 0x7FF ) { if ( aSig || ( ( bExp == 0x7FF ) && bSig ) ) { return propagateFloat64NaN( a, b ); } if ( ( bExp | bSig ) == 0 ) { float_raise( float_flag_invalid ); return float64_default_nan; } return packFloat64( zSign, 0x7FF, 0 ); } if ( bExp == 0x7FF ) { if ( bSig ) return propagateFloat64NaN( a, b ); if ( ( aExp | aSig ) == 0 ) { float_raise( float_flag_invalid ); return float64_default_nan; } return packFloat64( zSign, 0x7FF, 0 ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloat64( zSign, 0, 0 ); normalizeFloat64Subnormal( aSig, &aExp, &aSig ); } if ( bExp == 0 ) { if ( bSig == 0 ) return packFloat64( zSign, 0, 0 ); normalizeFloat64Subnormal( bSig, &bExp, &bSig ); } zExp = aExp + bExp - 0x3FF; aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<10; bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11; mul64To128( aSig, bSig, &zSig0, &zSig1 ); zSig0 |= ( zSig1 != 0 ); if ( 0 <= (sbits64) ( zSig0<<1 ) ) { zSig0 <<= 1; --zExp; } return roundAndPackFloat64( zSign, zExp, zSig0 ); } /*---------------------------------------------------------------------------- | Returns the result of dividing the double-precision floating-point value `a' | by the corresponding value `b'. The operation is performed according to | the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float64 float64_div( float64 a, float64 b ) { flag aSign, bSign, zSign; int16 aExp, bExp, zExp; bits64 aSig, bSig, zSig; bits64 rem0, rem1; bits64 term0, term1; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); bSig = extractFloat64Frac( b ); bExp = extractFloat64Exp( b ); bSign = extractFloat64Sign( b ); zSign = aSign ^ bSign; if ( aExp == 0x7FF ) { if ( aSig ) return propagateFloat64NaN( a, b ); if ( bExp == 0x7FF ) { if ( bSig ) return propagateFloat64NaN( a, b ); float_raise( float_flag_invalid ); return float64_default_nan; } return packFloat64( zSign, 0x7FF, 0 ); } if ( bExp == 0x7FF ) { if ( bSig ) return propagateFloat64NaN( a, b ); return packFloat64( zSign, 0, 0 ); } if ( bExp == 0 ) { if ( bSig == 0 ) { if ( ( aExp | aSig ) == 0 ) { float_raise( float_flag_invalid ); return float64_default_nan; } float_raise( float_flag_divbyzero ); return packFloat64( zSign, 0x7FF, 0 ); } normalizeFloat64Subnormal( bSig, &bExp, &bSig ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloat64( zSign, 0, 0 ); normalizeFloat64Subnormal( aSig, &aExp, &aSig ); } zExp = aExp - bExp + 0x3FD; aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<10; bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11; if ( bSig <= ( aSig + aSig ) ) { aSig >>= 1; ++zExp; } zSig = estimateDiv128To64( aSig, 0, bSig ); if ( ( zSig & 0x1FF ) <= 2 ) { mul64To128( bSig, zSig, &term0, &term1 ); sub128( aSig, 0, term0, term1, &rem0, &rem1 ); while ( (sbits64) rem0 < 0 ) { --zSig; add128( rem0, rem1, 0, bSig, &rem0, &rem1 ); } zSig |= ( rem1 != 0 ); } return roundAndPackFloat64( zSign, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns the remainder of the double-precision floating-point value `a' | with respect to the corresponding value `b'. The operation is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float64 float64_rem( float64 a, float64 b ) { flag aSign, zSign; int16 aExp, bExp, expDiff; bits64 aSig, bSig; bits64 q, alternateASig; sbits64 sigMean; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); bSig = extractFloat64Frac( b ); bExp = extractFloat64Exp( b ); // bSign = extractFloat64Sign( b ); if ( aExp == 0x7FF ) { if ( aSig || ( ( bExp == 0x7FF ) && bSig ) ) { return propagateFloat64NaN( a, b ); } float_raise( float_flag_invalid ); return float64_default_nan; } if ( bExp == 0x7FF ) { if ( bSig ) return propagateFloat64NaN( a, b ); return a; } if ( bExp == 0 ) { if ( bSig == 0 ) { float_raise( float_flag_invalid ); return float64_default_nan; } normalizeFloat64Subnormal( bSig, &bExp, &bSig ); } if ( aExp == 0 ) { if ( aSig == 0 ) return a; normalizeFloat64Subnormal( aSig, &aExp, &aSig ); } expDiff = aExp - bExp; aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<11; bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11; if ( expDiff < 0 ) { if ( expDiff < -1 ) return a; aSig >>= 1; } q = ( bSig <= aSig ); if ( q ) aSig -= bSig; expDiff -= 64; while ( 0 < expDiff ) { q = estimateDiv128To64( aSig, 0, bSig ); q = ( 2 < q ) ? q - 2 : 0; aSig = - ( ( bSig>>2 ) * q ); expDiff -= 62; } expDiff += 64; if ( 0 < expDiff ) { q = estimateDiv128To64( aSig, 0, bSig ); q = ( 2 < q ) ? q - 2 : 0; q >>= 64 - expDiff; bSig >>= 2; aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q; } else { aSig >>= 2; bSig >>= 2; } do { alternateASig = aSig; ++q; aSig -= bSig; } while ( 0 <= (sbits64) aSig ); sigMean = aSig + alternateASig; if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) { aSig = alternateASig; } zSign = ( (sbits64) aSig < 0 ); if ( zSign ) aSig = - aSig; return normalizeRoundAndPackFloat64( aSign ^ zSign, bExp, aSig ); } /*---------------------------------------------------------------------------- | Returns the square root of the double-precision floating-point value `a'. | The operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float64 float64_sqrt( float64 a ) { flag aSign; int16 aExp, zExp; bits64 aSig, zSig, doubleZSig; bits64 rem0, rem1, term0, term1; // float64 z; aSig = extractFloat64Frac( a ); aExp = extractFloat64Exp( a ); aSign = extractFloat64Sign( a ); if ( aExp == 0x7FF ) { if ( aSig ) return propagateFloat64NaN( a, a ); if ( ! aSign ) return a; float_raise( float_flag_invalid ); return float64_default_nan; } if ( aSign ) { if ( ( aExp | aSig ) == 0 ) return a; float_raise( float_flag_invalid ); return float64_default_nan; } if ( aExp == 0 ) { if ( aSig == 0 ) return 0; normalizeFloat64Subnormal( aSig, &aExp, &aSig ); } zExp = ( ( aExp - 0x3FF )>>1 ) + 0x3FE; aSig |= LIT64( 0x0010000000000000 ); zSig = estimateSqrt32( aExp, aSig>>21 ); aSig <<= 9 - ( aExp & 1 ); zSig = estimateDiv128To64( aSig, 0, zSig<<32 ) + ( zSig<<30 ); if ( ( zSig & 0x1FF ) <= 5 ) { doubleZSig = zSig<<1; mul64To128( zSig, zSig, &term0, &term1 ); sub128( aSig, 0, term0, term1, &rem0, &rem1 ); while ( (sbits64) rem0 < 0 ) { --zSig; doubleZSig -= 2; add128( rem0, rem1, zSig>>63, doubleZSig | 1, &rem0, &rem1 ); } zSig |= ( ( rem0 | rem1 ) != 0 ); } return roundAndPackFloat64( 0, zExp, zSig ); } /*---------------------------------------------------------------------------- | Returns 1 if the double-precision floating-point value `a' is equal to the | corresponding value `b', and 0 otherwise. The comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float64_eq( float64 a, float64 b ) { if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) ) || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) ) ) { if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } return ( a == b ) || ( (bits64) ( ( a | b )<<1 ) == 0 ); } /*---------------------------------------------------------------------------- | Returns 1 if the double-precision floating-point value `a' is less than or | equal to the corresponding value `b', and 0 otherwise. The comparison is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ flag float64_le( float64 a, float64 b ) { flag aSign, bSign; if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) ) || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) ) ) { float_raise( float_flag_invalid ); return 0; } aSign = extractFloat64Sign( a ); bSign = extractFloat64Sign( b ); if ( aSign != bSign ) return aSign || ( (bits64) ( ( a | b )<<1 ) == 0 ); return ( a == b ) || ( aSign ^ ( a < b ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the double-precision floating-point value `a' is less than | the corresponding value `b', and 0 otherwise. The comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float64_lt( float64 a, float64 b ) { flag aSign, bSign; if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) ) || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) ) ) { float_raise( float_flag_invalid ); return 0; } aSign = extractFloat64Sign( a ); bSign = extractFloat64Sign( b ); if ( aSign != bSign ) return aSign && ( (bits64) ( ( a | b )<<1 ) != 0 ); return ( a != b ) && ( aSign ^ ( a < b ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the double-precision floating-point value `a' is equal to the | corresponding value `b', and 0 otherwise. The invalid exception is raised | if either operand is a NaN. Otherwise, the comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float64_eq_signaling( float64 a, float64 b ) { if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) ) || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) ) ) { float_raise( float_flag_invalid ); return 0; } return ( a == b ) || ( (bits64) ( ( a | b )<<1 ) == 0 ); } /*---------------------------------------------------------------------------- | Returns 1 if the double-precision floating-point value `a' is less than or | equal to the corresponding value `b', and 0 otherwise. Quiet NaNs do not | cause an exception. Otherwise, the comparison is performed according to the | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float64_le_quiet( float64 a, float64 b ) { flag aSign, bSign; // int16 aExp, bExp; if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) ) || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) ) ) { if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } aSign = extractFloat64Sign( a ); bSign = extractFloat64Sign( b ); if ( aSign != bSign ) return aSign || ( (bits64) ( ( a | b )<<1 ) == 0 ); return ( a == b ) || ( aSign ^ ( a < b ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the double-precision floating-point value `a' is less than | the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause an | exception. Otherwise, the comparison is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float64_lt_quiet( float64 a, float64 b ) { flag aSign, bSign; if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) ) || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) ) ) { if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } aSign = extractFloat64Sign( a ); bSign = extractFloat64Sign( b ); if ( aSign != bSign ) return aSign && ( (bits64) ( ( a | b )<<1 ) != 0 ); return ( a != b ) && ( aSign ^ ( a < b ) ); } #ifdef FLOATX80 /*---------------------------------------------------------------------------- | Returns the result of converting the extended double-precision floating- | point value `a' to the 32-bit two's complement integer format. The | conversion is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic---which means in particular that the conversion | is rounded according to the current rounding mode. If `a' is a NaN, the | largest positive integer is returned. Otherwise, if the conversion | overflows, the largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ int32 floatx80_to_int32( floatx80 a ) { flag aSign; int32 aExp, shiftCount; bits64 aSig; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) aSign = 0; shiftCount = 0x4037 - aExp; if ( shiftCount <= 0 ) shiftCount = 1; shift64RightJamming( aSig, shiftCount, &aSig ); return roundAndPackInt32( aSign, aSig ); } /*---------------------------------------------------------------------------- | Returns the result of converting the extended double-precision floating- | point value `a' to the 32-bit two's complement integer format. The | conversion is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic, except that the conversion is always rounded | toward zero. If `a' is a NaN, the largest positive integer is returned. | Otherwise, if the conversion overflows, the largest integer with the same | sign as `a' is returned. *----------------------------------------------------------------------------*/ int32 floatx80_to_int32_round_to_zero( floatx80 a ) { flag aSign; int32 aExp, shiftCount; bits64 aSig, savedASig; int32 z; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); if ( 0x401E < aExp ) { if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) aSign = 0; goto invalid; } else if ( aExp < 0x3FFF ) { if ( aExp || aSig ) float_exception_flags |= float_flag_inexact; return 0; } shiftCount = 0x403E - aExp; savedASig = aSig; aSig >>= shiftCount; z = aSig; if ( aSign ) z = - z; if ( ( z < 0 ) ^ aSign ) { invalid: float_raise( float_flag_invalid ); return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF; } if ( ( aSig<>( - shiftCount ); if ( (bits64) ( aSig<<( shiftCount & 63 ) ) ) { float_exception_flags |= float_flag_inexact; } if ( aSign ) z = - z; return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the extended double-precision floating- | point value `a' to the single-precision floating-point format. The | conversion is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float32 floatx80_to_float32( floatx80 a ) { flag aSign; int32 aExp; bits64 aSig; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); if ( aExp == 0x7FFF ) { if ( (bits64) ( aSig<<1 ) ) { return commonNaNToFloat32( floatx80ToCommonNaN( a ) ); } return packFloat32( aSign, 0xFF, 0 ); } shift64RightJamming( aSig, 33, &aSig ); if ( aExp || aSig ) aExp -= 0x3F81; return roundAndPackFloat32( aSign, aExp, aSig ); } /*---------------------------------------------------------------------------- | Returns the result of converting the extended double-precision floating- | point value `a' to the double-precision floating-point format. The | conversion is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float64 floatx80_to_float64( floatx80 a ) { flag aSign; int32 aExp; bits64 aSig, zSig; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); if ( aExp == 0x7FFF ) { if ( (bits64) ( aSig<<1 ) ) { return commonNaNToFloat64( floatx80ToCommonNaN( a ) ); } return packFloat64( aSign, 0x7FF, 0 ); } shift64RightJamming( aSig, 1, &zSig ); if ( aExp || aSig ) aExp -= 0x3C01; return roundAndPackFloat64( aSign, aExp, zSig ); } #ifdef FLOAT128 /*---------------------------------------------------------------------------- | Returns the result of converting the extended double-precision floating- | point value `a' to the quadruple-precision floating-point format. The | conversion is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float128 floatx80_to_float128( floatx80 a ) { flag aSign; int16 aExp; bits64 aSig, zSig0, zSig1; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) { return commonNaNToFloat128( floatx80ToCommonNaN( a ) ); } shift128Right( aSig<<1, 0, 16, &zSig0, &zSig1 ); return packFloat128( aSign, aExp, zSig0, zSig1 ); } #endif /*---------------------------------------------------------------------------- | Rounds the extended double-precision floating-point value `a' to an integer, | and returns the result as an extended quadruple-precision floating-point | value. The operation is performed according to the IEC/IEEE Standard for | Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ floatx80 floatx80_round_to_int( floatx80 a ) { flag aSign; int32 aExp; bits64 lastBitMask, roundBitsMask; int8 roundingMode; floatx80 z; aExp = extractFloatx80Exp( a ); if ( 0x403E <= aExp ) { if ( ( aExp == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) { return propagateFloatx80NaN( a, a ); } return a; } if ( aExp < 0x3FFF ) { if ( ( aExp == 0 ) && ( (bits64) ( extractFloatx80Frac( a )<<1 ) == 0 ) ) { return a; } float_exception_flags |= float_flag_inexact; aSign = extractFloatx80Sign( a ); switch ( float_rounding_mode ) { case float_round_nearest_even: if ( ( aExp == 0x3FFE ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) { return packFloatx80( aSign, 0x3FFF, LIT64( 0x8000000000000000 ) ); } break; case float_round_down: return aSign ? packFloatx80( 1, 0x3FFF, LIT64( 0x8000000000000000 ) ) : packFloatx80( 0, 0, 0 ); case float_round_up: return aSign ? packFloatx80( 1, 0, 0 ) : packFloatx80( 0, 0x3FFF, LIT64( 0x8000000000000000 ) ); } return packFloatx80( aSign, 0, 0 ); } lastBitMask = 1; lastBitMask <<= 0x403E - aExp; roundBitsMask = lastBitMask - 1; z = a; roundingMode = float_rounding_mode; if ( roundingMode == float_round_nearest_even ) { z.low += lastBitMask>>1; if ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask; } else if ( roundingMode != float_round_to_zero ) { if ( extractFloatx80Sign( z ) ^ ( roundingMode == float_round_up ) ) { z.low += roundBitsMask; } } z.low &= ~ roundBitsMask; if ( z.low == 0 ) { ++z.high; z.low = LIT64( 0x8000000000000000 ); } if ( z.low != a.low ) float_exception_flags |= float_flag_inexact; return z; } /*---------------------------------------------------------------------------- | Returns the result of adding the absolute values of the extended double- | precision floating-point values `a' and `b'. If `zSign' is 1, the sum is | negated before being returned. `zSign' is ignored if the result is a NaN. | The addition is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ static floatx80 addFloatx80Sigs( floatx80 a, floatx80 b, flag zSign ) { int32 aExp, bExp, zExp; bits64 aSig, bSig, zSig0, zSig1; int32 expDiff; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); bSig = extractFloatx80Frac( b ); bExp = extractFloatx80Exp( b ); expDiff = aExp - bExp; if ( 0 < expDiff ) { if ( aExp == 0x7FFF ) { if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b ); return a; } if ( bExp == 0 ) --expDiff; shift64ExtraRightJamming( bSig, 0, expDiff, &bSig, &zSig1 ); zExp = aExp; } else if ( expDiff < 0 ) { if ( bExp == 0x7FFF ) { if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b ); return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); } if ( aExp == 0 ) ++expDiff; shift64ExtraRightJamming( aSig, 0, - expDiff, &aSig, &zSig1 ); zExp = bExp; } else { if ( aExp == 0x7FFF ) { if ( (bits64) ( ( aSig | bSig )<<1 ) ) { return propagateFloatx80NaN( a, b ); } return a; } zSig1 = 0; zSig0 = aSig + bSig; if ( aExp == 0 ) { normalizeFloatx80Subnormal( zSig0, &zExp, &zSig0 ); goto roundAndPack; } zExp = aExp; goto shiftRight1; } zSig0 = aSig + bSig; if ( (sbits64) zSig0 < 0 ) goto roundAndPack; shiftRight1: shift64ExtraRightJamming( zSig0, zSig1, 1, &zSig0, &zSig1 ); zSig0 |= LIT64( 0x8000000000000000 ); ++zExp; roundAndPack: return roundAndPackFloatx80( floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 ); } /*---------------------------------------------------------------------------- | Returns the result of subtracting the absolute values of the extended | double-precision floating-point values `a' and `b'. If `zSign' is 1, the | difference is negated before being returned. `zSign' is ignored if the | result is a NaN. The subtraction is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ static floatx80 subFloatx80Sigs( floatx80 a, floatx80 b, flag zSign ) { int32 aExp, bExp, zExp; bits64 aSig, bSig, zSig0, zSig1; int32 expDiff; floatx80 z; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); bSig = extractFloatx80Frac( b ); bExp = extractFloatx80Exp( b ); expDiff = aExp - bExp; if ( 0 < expDiff ) goto aExpBigger; if ( expDiff < 0 ) goto bExpBigger; if ( aExp == 0x7FFF ) { if ( (bits64) ( ( aSig | bSig )<<1 ) ) { return propagateFloatx80NaN( a, b ); } float_raise( float_flag_invalid ); z.low = floatx80_default_nan_low; z.high = floatx80_default_nan_high; return z; } if ( aExp == 0 ) { aExp = 1; bExp = 1; } zSig1 = 0; if ( bSig < aSig ) goto aBigger; if ( aSig < bSig ) goto bBigger; return packFloatx80( float_rounding_mode == float_round_down, 0, 0 ); bExpBigger: if ( bExp == 0x7FFF ) { if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b ); return packFloatx80( zSign ^ 1, 0x7FFF, LIT64( 0x8000000000000000 ) ); } if ( aExp == 0 ) ++expDiff; shift128RightJamming( aSig, 0, - expDiff, &aSig, &zSig1 ); bBigger: sub128( bSig, 0, aSig, zSig1, &zSig0, &zSig1 ); zExp = bExp; zSign ^= 1; goto normalizeRoundAndPack; aExpBigger: if ( aExp == 0x7FFF ) { if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b ); return a; } if ( bExp == 0 ) --expDiff; shift128RightJamming( bSig, 0, expDiff, &bSig, &zSig1 ); aBigger: sub128( aSig, 0, bSig, zSig1, &zSig0, &zSig1 ); zExp = aExp; normalizeRoundAndPack: return normalizeRoundAndPackFloatx80( floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 ); } /*---------------------------------------------------------------------------- | Returns the result of adding the extended double-precision floating-point | values `a' and `b'. The operation is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ floatx80 floatx80_add( floatx80 a, floatx80 b ) { flag aSign, bSign; aSign = extractFloatx80Sign( a ); bSign = extractFloatx80Sign( b ); if ( aSign == bSign ) { return addFloatx80Sigs( a, b, aSign ); } else { return subFloatx80Sigs( a, b, aSign ); } } /*---------------------------------------------------------------------------- | Returns the result of subtracting the extended double-precision floating- | point values `a' and `b'. The operation is performed according to the | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ floatx80 floatx80_sub( floatx80 a, floatx80 b ) { flag aSign, bSign; aSign = extractFloatx80Sign( a ); bSign = extractFloatx80Sign( b ); if ( aSign == bSign ) { return subFloatx80Sigs( a, b, aSign ); } else { return addFloatx80Sigs( a, b, aSign ); } } /*---------------------------------------------------------------------------- | Returns the result of multiplying the extended double-precision floating- | point values `a' and `b'. The operation is performed according to the | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ floatx80 floatx80_mul( floatx80 a, floatx80 b ) { flag aSign, bSign, zSign; int32 aExp, bExp, zExp; bits64 aSig, bSig, zSig0, zSig1; floatx80 z; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); bSig = extractFloatx80Frac( b ); bExp = extractFloatx80Exp( b ); bSign = extractFloatx80Sign( b ); zSign = aSign ^ bSign; if ( aExp == 0x7FFF ) { if ( (bits64) ( aSig<<1 ) || ( ( bExp == 0x7FFF ) && (bits64) ( bSig<<1 ) ) ) { return propagateFloatx80NaN( a, b ); } if ( ( bExp | bSig ) == 0 ) goto invalid; return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); } if ( bExp == 0x7FFF ) { if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b ); if ( ( aExp | aSig ) == 0 ) { invalid: float_raise( float_flag_invalid ); z.low = floatx80_default_nan_low; z.high = floatx80_default_nan_high; return z; } return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloatx80( zSign, 0, 0 ); normalizeFloatx80Subnormal( aSig, &aExp, &aSig ); } if ( bExp == 0 ) { if ( bSig == 0 ) return packFloatx80( zSign, 0, 0 ); normalizeFloatx80Subnormal( bSig, &bExp, &bSig ); } zExp = aExp + bExp - 0x3FFE; mul64To128( aSig, bSig, &zSig0, &zSig1 ); if ( 0 < (sbits64) zSig0 ) { shortShift128Left( zSig0, zSig1, 1, &zSig0, &zSig1 ); --zExp; } return roundAndPackFloatx80( floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 ); } /*---------------------------------------------------------------------------- | Returns the result of dividing the extended double-precision floating-point | value `a' by the corresponding value `b'. The operation is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ floatx80 floatx80_div( floatx80 a, floatx80 b ) { flag aSign, bSign, zSign; int32 aExp, bExp, zExp; bits64 aSig, bSig, zSig0, zSig1; bits64 rem0, rem1, rem2, term0, term1, term2; floatx80 z; aSig = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); bSig = extractFloatx80Frac( b ); bExp = extractFloatx80Exp( b ); bSign = extractFloatx80Sign( b ); zSign = aSign ^ bSign; if ( aExp == 0x7FFF ) { if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b ); if ( bExp == 0x7FFF ) { if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b ); goto invalid; } return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); } if ( bExp == 0x7FFF ) { if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b ); return packFloatx80( zSign, 0, 0 ); } if ( bExp == 0 ) { if ( bSig == 0 ) { if ( ( aExp | aSig ) == 0 ) { invalid: float_raise( float_flag_invalid ); z.low = floatx80_default_nan_low; z.high = floatx80_default_nan_high; return z; } float_raise( float_flag_divbyzero ); return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); } normalizeFloatx80Subnormal( bSig, &bExp, &bSig ); } if ( aExp == 0 ) { if ( aSig == 0 ) return packFloatx80( zSign, 0, 0 ); normalizeFloatx80Subnormal( aSig, &aExp, &aSig ); } zExp = aExp - bExp + 0x3FFE; rem1 = 0; if ( bSig <= aSig ) { shift128Right( aSig, 0, 1, &aSig, &rem1 ); ++zExp; } zSig0 = estimateDiv128To64( aSig, rem1, bSig ); mul64To128( bSig, zSig0, &term0, &term1 ); sub128( aSig, rem1, term0, term1, &rem0, &rem1 ); while ( (sbits64) rem0 < 0 ) { --zSig0; add128( rem0, rem1, 0, bSig, &rem0, &rem1 ); } zSig1 = estimateDiv128To64( rem1, 0, bSig ); if ( (bits64) ( zSig1<<1 ) <= 8 ) { mul64To128( bSig, zSig1, &term1, &term2 ); sub128( rem1, 0, term1, term2, &rem1, &rem2 ); while ( (sbits64) rem1 < 0 ) { --zSig1; add128( rem1, rem2, 0, bSig, &rem1, &rem2 ); } zSig1 |= ( ( rem1 | rem2 ) != 0 ); } return roundAndPackFloatx80( floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 ); } /*---------------------------------------------------------------------------- | Returns the remainder of the extended double-precision floating-point value | `a' with respect to the corresponding value `b'. The operation is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ floatx80 floatx80_rem( floatx80 a, floatx80 b ) { flag aSign, zSign; int32 aExp, bExp, expDiff; bits64 aSig0, aSig1, bSig; bits64 q, term0, term1, alternateASig0, alternateASig1; floatx80 z; aSig0 = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); bSig = extractFloatx80Frac( b ); bExp = extractFloatx80Exp( b ); // bSign = extractFloatx80Sign( b ); if ( aExp == 0x7FFF ) { if ( (bits64) ( aSig0<<1 ) || ( ( bExp == 0x7FFF ) && (bits64) ( bSig<<1 ) ) ) { return propagateFloatx80NaN( a, b ); } goto invalid; } if ( bExp == 0x7FFF ) { if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b ); return a; } if ( bExp == 0 ) { if ( bSig == 0 ) { invalid: float_raise( float_flag_invalid ); z.low = floatx80_default_nan_low; z.high = floatx80_default_nan_high; return z; } normalizeFloatx80Subnormal( bSig, &bExp, &bSig ); } if ( aExp == 0 ) { if ( (bits64) ( aSig0<<1 ) == 0 ) return a; normalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 ); } bSig |= LIT64( 0x8000000000000000 ); zSign = aSign; expDiff = aExp - bExp; aSig1 = 0; if ( expDiff < 0 ) { if ( expDiff < -1 ) return a; shift128Right( aSig0, 0, 1, &aSig0, &aSig1 ); expDiff = 0; } q = ( bSig <= aSig0 ); if ( q ) aSig0 -= bSig; expDiff -= 64; while ( 0 < expDiff ) { q = estimateDiv128To64( aSig0, aSig1, bSig ); q = ( 2 < q ) ? q - 2 : 0; mul64To128( bSig, q, &term0, &term1 ); sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 ); shortShift128Left( aSig0, aSig1, 62, &aSig0, &aSig1 ); expDiff -= 62; } expDiff += 64; if ( 0 < expDiff ) { q = estimateDiv128To64( aSig0, aSig1, bSig ); q = ( 2 < q ) ? q - 2 : 0; q >>= 64 - expDiff; mul64To128( bSig, q<<( 64 - expDiff ), &term0, &term1 ); sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 ); shortShift128Left( 0, bSig, 64 - expDiff, &term0, &term1 ); while ( le128( term0, term1, aSig0, aSig1 ) ) { ++q; sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 ); } } else { term1 = 0; term0 = bSig; } sub128( term0, term1, aSig0, aSig1, &alternateASig0, &alternateASig1 ); if ( lt128( alternateASig0, alternateASig1, aSig0, aSig1 ) || ( eq128( alternateASig0, alternateASig1, aSig0, aSig1 ) && ( q & 1 ) ) ) { aSig0 = alternateASig0; aSig1 = alternateASig1; zSign = ! zSign; } return normalizeRoundAndPackFloatx80( 80, zSign, bExp + expDiff, aSig0, aSig1 ); } /*---------------------------------------------------------------------------- | Returns the square root of the extended double-precision floating-point | value `a'. The operation is performed according to the IEC/IEEE Standard | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ floatx80 floatx80_sqrt( floatx80 a ) { flag aSign; int32 aExp, zExp; bits64 aSig0, aSig1, zSig0, zSig1, doubleZSig0; bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3; floatx80 z; aSig0 = extractFloatx80Frac( a ); aExp = extractFloatx80Exp( a ); aSign = extractFloatx80Sign( a ); if ( aExp == 0x7FFF ) { if ( (bits64) ( aSig0<<1 ) ) return propagateFloatx80NaN( a, a ); if ( ! aSign ) return a; goto invalid; } if ( aSign ) { if ( ( aExp | aSig0 ) == 0 ) return a; invalid: float_raise( float_flag_invalid ); z.low = floatx80_default_nan_low; z.high = floatx80_default_nan_high; return z; } if ( aExp == 0 ) { if ( aSig0 == 0 ) return packFloatx80( 0, 0, 0 ); normalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 ); } zExp = ( ( aExp - 0x3FFF )>>1 ) + 0x3FFF; zSig0 = estimateSqrt32( aExp, aSig0>>32 ); shift128Right( aSig0, 0, 2 + ( aExp & 1 ), &aSig0, &aSig1 ); zSig0 = estimateDiv128To64( aSig0, aSig1, zSig0<<32 ) + ( zSig0<<30 ); doubleZSig0 = zSig0<<1; mul64To128( zSig0, zSig0, &term0, &term1 ); sub128( aSig0, aSig1, term0, term1, &rem0, &rem1 ); while ( (sbits64) rem0 < 0 ) { --zSig0; doubleZSig0 -= 2; add128( rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1 ); } zSig1 = estimateDiv128To64( rem1, 0, doubleZSig0 ); if ( ( zSig1 & LIT64( 0x3FFFFFFFFFFFFFFF ) ) <= 5 ) { if ( zSig1 == 0 ) zSig1 = 1; mul64To128( doubleZSig0, zSig1, &term1, &term2 ); sub128( rem1, 0, term1, term2, &rem1, &rem2 ); mul64To128( zSig1, zSig1, &term2, &term3 ); sub192( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 ); while ( (sbits64) rem1 < 0 ) { --zSig1; shortShift128Left( 0, zSig1, 1, &term2, &term3 ); term3 |= 1; term2 |= doubleZSig0; add192( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 ); } zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 ); } shortShift128Left( 0, zSig1, 1, &zSig0, &zSig1 ); zSig0 |= doubleZSig0; return roundAndPackFloatx80( floatx80_rounding_precision, 0, zExp, zSig0, zSig1 ); } /*---------------------------------------------------------------------------- | Returns 1 if the extended double-precision floating-point value `a' is | equal to the corresponding value `b', and 0 otherwise. The comparison is | performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ flag floatx80_eq( floatx80 a, floatx80 b ) { if ( ( ( extractFloatx80Exp( a ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) || ( ( extractFloatx80Exp( b ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( b )<<1 ) ) ) { if ( floatx80_is_signaling_nan( a ) || floatx80_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } return ( a.low == b.low ) && ( ( a.high == b.high ) || ( ( a.low == 0 ) && ( (bits16) ( ( a.high | b.high )<<1 ) == 0 ) ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the extended double-precision floating-point value `a' is | less than or equal to the corresponding value `b', and 0 otherwise. The | comparison is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag floatx80_le( floatx80 a, floatx80 b ) { flag aSign, bSign; if ( ( ( extractFloatx80Exp( a ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) || ( ( extractFloatx80Exp( b ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( b )<<1 ) ) ) { float_raise( float_flag_invalid ); return 0; } aSign = extractFloatx80Sign( a ); bSign = extractFloatx80Sign( b ); if ( aSign != bSign ) { return aSign || ( ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low ) == 0 ); } return aSign ? le128( b.high, b.low, a.high, a.low ) : le128( a.high, a.low, b.high, b.low ); } /*---------------------------------------------------------------------------- | Returns 1 if the extended double-precision floating-point value `a' is | less than the corresponding value `b', and 0 otherwise. The comparison | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ flag floatx80_lt( floatx80 a, floatx80 b ) { flag aSign, bSign; if ( ( ( extractFloatx80Exp( a ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) || ( ( extractFloatx80Exp( b ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( b )<<1 ) ) ) { float_raise( float_flag_invalid ); return 0; } aSign = extractFloatx80Sign( a ); bSign = extractFloatx80Sign( b ); if ( aSign != bSign ) { return aSign && ( ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low ) != 0 ); } return aSign ? lt128( b.high, b.low, a.high, a.low ) : lt128( a.high, a.low, b.high, b.low ); } /*---------------------------------------------------------------------------- | Returns 1 if the extended double-precision floating-point value `a' is equal | to the corresponding value `b', and 0 otherwise. The invalid exception is | raised if either operand is a NaN. Otherwise, the comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag floatx80_eq_signaling( floatx80 a, floatx80 b ) { if ( ( ( extractFloatx80Exp( a ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) || ( ( extractFloatx80Exp( b ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( b )<<1 ) ) ) { float_raise( float_flag_invalid ); return 0; } return ( a.low == b.low ) && ( ( a.high == b.high ) || ( ( a.low == 0 ) && ( (bits16) ( ( a.high | b.high )<<1 ) == 0 ) ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the extended double-precision floating-point value `a' is less | than or equal to the corresponding value `b', and 0 otherwise. Quiet NaNs | do not cause an exception. Otherwise, the comparison is performed according | to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag floatx80_le_quiet( floatx80 a, floatx80 b ) { flag aSign, bSign; if ( ( ( extractFloatx80Exp( a ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) || ( ( extractFloatx80Exp( b ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( b )<<1 ) ) ) { if ( floatx80_is_signaling_nan( a ) || floatx80_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } aSign = extractFloatx80Sign( a ); bSign = extractFloatx80Sign( b ); if ( aSign != bSign ) { return aSign || ( ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low ) == 0 ); } return aSign ? le128( b.high, b.low, a.high, a.low ) : le128( a.high, a.low, b.high, b.low ); } /*---------------------------------------------------------------------------- | Returns 1 if the extended double-precision floating-point value `a' is less | than the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause | an exception. Otherwise, the comparison is performed according to the | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag floatx80_lt_quiet( floatx80 a, floatx80 b ) { flag aSign, bSign; if ( ( ( extractFloatx80Exp( a ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) || ( ( extractFloatx80Exp( b ) == 0x7FFF ) && (bits64) ( extractFloatx80Frac( b )<<1 ) ) ) { if ( floatx80_is_signaling_nan( a ) || floatx80_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } aSign = extractFloatx80Sign( a ); bSign = extractFloatx80Sign( b ); if ( aSign != bSign ) { return aSign && ( ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low ) != 0 ); } return aSign ? lt128( b.high, b.low, a.high, a.low ) : lt128( a.high, a.low, b.high, b.low ); } #endif #ifdef FLOAT128 /*---------------------------------------------------------------------------- | Returns the result of converting the quadruple-precision floating-point | value `a' to the 32-bit two's complement integer format. The conversion | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic---which means in particular that the conversion is rounded | according to the current rounding mode. If `a' is a NaN, the largest | positive integer is returned. Otherwise, if the conversion overflows, the | largest integer with the same sign as `a' is returned. *----------------------------------------------------------------------------*/ int32 float128_to_int32( float128 a ) { flag aSign; int32 aExp, shiftCount; bits64 aSig0, aSig1; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); if ( ( aExp == 0x7FFF ) && ( aSig0 | aSig1 ) ) aSign = 0; if ( aExp ) aSig0 |= LIT64( 0x0001000000000000 ); aSig0 |= ( aSig1 != 0 ); shiftCount = 0x4028 - aExp; if ( 0 < shiftCount ) shift64RightJamming( aSig0, shiftCount, &aSig0 ); return roundAndPackInt32( aSign, aSig0 ); } /*---------------------------------------------------------------------------- | Returns the result of converting the quadruple-precision floating-point | value `a' to the 32-bit two's complement integer format. The conversion | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic, except that the conversion is always rounded toward zero. If | `a' is a NaN, the largest positive integer is returned. Otherwise, if the | conversion overflows, the largest integer with the same sign as `a' is | returned. *----------------------------------------------------------------------------*/ int32 float128_to_int32_round_to_zero( float128 a ) { flag aSign; int32 aExp, shiftCount; bits64 aSig0, aSig1, savedASig; int32 z; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); aSig0 |= ( aSig1 != 0 ); if ( 0x401E < aExp ) { if ( ( aExp == 0x7FFF ) && aSig0 ) aSign = 0; goto invalid; } else if ( aExp < 0x3FFF ) { if ( aExp || aSig0 ) float_exception_flags |= float_flag_inexact; return 0; } aSig0 |= LIT64( 0x0001000000000000 ); shiftCount = 0x402F - aExp; savedASig = aSig0; aSig0 >>= shiftCount; z = aSig0; if ( aSign ) z = - z; if ( ( z < 0 ) ^ aSign ) { invalid: float_raise( float_flag_invalid ); return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF; } if ( ( aSig0<>( ( - shiftCount ) & 63 ) ); if ( (bits64) ( aSig1<>( - shiftCount ); if ( aSig1 || ( shiftCount && (bits64) ( aSig0<<( shiftCount & 63 ) ) ) ) { float_exception_flags |= float_flag_inexact; } } if ( aSign ) z = - z; return z; } /*---------------------------------------------------------------------------- | Returns the result of converting the quadruple-precision floating-point | value `a' to the single-precision floating-point format. The conversion | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ float32 float128_to_float32( float128 a ) { flag aSign; int32 aExp; bits64 aSig0, aSig1; bits32 zSig; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 ) { return commonNaNToFloat32( float128ToCommonNaN( a ) ); } return packFloat32( aSign, 0xFF, 0 ); } aSig0 |= ( aSig1 != 0 ); shift64RightJamming( aSig0, 18, &aSig0 ); zSig = aSig0; if ( aExp || zSig ) { zSig |= 0x40000000; aExp -= 0x3F81; } return roundAndPackFloat32( aSign, aExp, zSig ); } /*---------------------------------------------------------------------------- | Returns the result of converting the quadruple-precision floating-point | value `a' to the double-precision floating-point format. The conversion | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ float64 float128_to_float64( float128 a ) { flag aSign; int32 aExp; bits64 aSig0, aSig1; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 ) { return commonNaNToFloat64( float128ToCommonNaN( a ) ); } return packFloat64( aSign, 0x7FF, 0 ); } shortShift128Left( aSig0, aSig1, 14, &aSig0, &aSig1 ); aSig0 |= ( aSig1 != 0 ); if ( aExp || aSig0 ) { aSig0 |= LIT64( 0x4000000000000000 ); aExp -= 0x3C01; } return roundAndPackFloat64( aSign, aExp, aSig0 ); } #ifdef FLOATX80 /*---------------------------------------------------------------------------- | Returns the result of converting the quadruple-precision floating-point | value `a' to the extended double-precision floating-point format. The | conversion is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ floatx80 float128_to_floatx80( float128 a ) { flag aSign; int32 aExp; bits64 aSig0, aSig1; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 ) { return commonNaNToFloatx80( float128ToCommonNaN( a ) ); } return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) ); } if ( aExp == 0 ) { if ( ( aSig0 | aSig1 ) == 0 ) return packFloatx80( aSign, 0, 0 ); normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 ); } else { aSig0 |= LIT64( 0x0001000000000000 ); } shortShift128Left( aSig0, aSig1, 15, &aSig0, &aSig1 ); return roundAndPackFloatx80( 80, aSign, aExp, aSig0, aSig1 ); } #endif /*---------------------------------------------------------------------------- | Rounds the quadruple-precision floating-point value `a' to an integer, and | returns the result as a quadruple-precision floating-point value. The | operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float128 float128_round_to_int( float128 a ) { flag aSign; int32 aExp; bits64 lastBitMask, roundBitsMask; int8 roundingMode; float128 z; aExp = extractFloat128Exp( a ); if ( 0x402F <= aExp ) { if ( 0x406F <= aExp ) { if ( ( aExp == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) { return propagateFloat128NaN( a, a ); } return a; } lastBitMask = 1; lastBitMask = ( lastBitMask<<( 0x406E - aExp ) )<<1; roundBitsMask = lastBitMask - 1; z = a; roundingMode = float_rounding_mode; if ( roundingMode == float_round_nearest_even ) { if ( lastBitMask ) { add128( z.high, z.low, 0, lastBitMask>>1, &z.high, &z.low ); if ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask; } else { if ( (sbits64) z.low < 0 ) { ++z.high; if ( (bits64) ( z.low<<1 ) == 0 ) z.high &= ~1; } } } else if ( roundingMode != float_round_to_zero ) { if ( extractFloat128Sign( z ) ^ ( roundingMode == float_round_up ) ) { add128( z.high, z.low, 0, roundBitsMask, &z.high, &z.low ); } } z.low &= ~ roundBitsMask; } else { if ( aExp < 0x3FFF ) { if ( ( ( (bits64) ( a.high<<1 ) ) | a.low ) == 0 ) return a; float_exception_flags |= float_flag_inexact; aSign = extractFloat128Sign( a ); switch ( float_rounding_mode ) { case float_round_nearest_even: if ( ( aExp == 0x3FFE ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) { return packFloat128( aSign, 0x3FFF, 0, 0 ); } break; case float_round_down: return aSign ? packFloat128( 1, 0x3FFF, 0, 0 ) : packFloat128( 0, 0, 0, 0 ); case float_round_up: return aSign ? packFloat128( 1, 0, 0, 0 ) : packFloat128( 0, 0x3FFF, 0, 0 ); } return packFloat128( aSign, 0, 0, 0 ); } lastBitMask = 1; lastBitMask <<= 0x402F - aExp; roundBitsMask = lastBitMask - 1; z.low = 0; z.high = a.high; roundingMode = float_rounding_mode; if ( roundingMode == float_round_nearest_even ) { z.high += lastBitMask>>1; if ( ( ( z.high & roundBitsMask ) | a.low ) == 0 ) { z.high &= ~ lastBitMask; } } else if ( roundingMode != float_round_to_zero ) { if ( extractFloat128Sign( z ) ^ ( roundingMode == float_round_up ) ) { z.high |= ( a.low != 0 ); z.high += roundBitsMask; } } z.high &= ~ roundBitsMask; } if ( ( z.low != a.low ) || ( z.high != a.high ) ) { float_exception_flags |= float_flag_inexact; } return z; } /*---------------------------------------------------------------------------- | Returns the result of adding the absolute values of the quadruple-precision | floating-point values `a' and `b'. If `zSign' is 1, the sum is negated | before being returned. `zSign' is ignored if the result is a NaN. | The addition is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ static float128 addFloat128Sigs( float128 a, float128 b, flag zSign ) { int32 aExp, bExp, zExp; bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2; int32 expDiff; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); bSig1 = extractFloat128Frac1( b ); bSig0 = extractFloat128Frac0( b ); bExp = extractFloat128Exp( b ); expDiff = aExp - bExp; if ( 0 < expDiff ) { if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b ); return a; } if ( bExp == 0 ) { --expDiff; } else { bSig0 |= LIT64( 0x0001000000000000 ); } shift128ExtraRightJamming( bSig0, bSig1, 0, expDiff, &bSig0, &bSig1, &zSig2 ); zExp = aExp; } else if ( expDiff < 0 ) { if ( bExp == 0x7FFF ) { if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b ); return packFloat128( zSign, 0x7FFF, 0, 0 ); } if ( aExp == 0 ) { ++expDiff; } else { aSig0 |= LIT64( 0x0001000000000000 ); } shift128ExtraRightJamming( aSig0, aSig1, 0, - expDiff, &aSig0, &aSig1, &zSig2 ); zExp = bExp; } else { if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 | bSig0 | bSig1 ) { return propagateFloat128NaN( a, b ); } return a; } add128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 ); if ( aExp == 0 ) return packFloat128( zSign, 0, zSig0, zSig1 ); zSig2 = 0; zSig0 |= LIT64( 0x0002000000000000 ); zExp = aExp; goto shiftRight1; } aSig0 |= LIT64( 0x0001000000000000 ); add128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 ); --zExp; if ( zSig0 < LIT64( 0x0002000000000000 ) ) goto roundAndPack; ++zExp; shiftRight1: shift128ExtraRightJamming( zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 ); roundAndPack: return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 ); } /*---------------------------------------------------------------------------- | Returns the result of subtracting the absolute values of the quadruple- | precision floating-point values `a' and `b'. If `zSign' is 1, the | difference is negated before being returned. `zSign' is ignored if the | result is a NaN. The subtraction is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ static float128 subFloat128Sigs( float128 a, float128 b, flag zSign ) { int32 aExp, bExp, zExp; bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1; int32 expDiff; float128 z; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); bSig1 = extractFloat128Frac1( b ); bSig0 = extractFloat128Frac0( b ); bExp = extractFloat128Exp( b ); expDiff = aExp - bExp; shortShift128Left( aSig0, aSig1, 14, &aSig0, &aSig1 ); shortShift128Left( bSig0, bSig1, 14, &bSig0, &bSig1 ); if ( 0 < expDiff ) goto aExpBigger; if ( expDiff < 0 ) goto bExpBigger; if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 | bSig0 | bSig1 ) { return propagateFloat128NaN( a, b ); } float_raise( float_flag_invalid ); z.low = float128_default_nan_low; z.high = float128_default_nan_high; return z; } if ( aExp == 0 ) { aExp = 1; bExp = 1; } if ( bSig0 < aSig0 ) goto aBigger; if ( aSig0 < bSig0 ) goto bBigger; if ( bSig1 < aSig1 ) goto aBigger; if ( aSig1 < bSig1 ) goto bBigger; return packFloat128( float_rounding_mode == float_round_down, 0, 0, 0 ); bExpBigger: if ( bExp == 0x7FFF ) { if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b ); return packFloat128( zSign ^ 1, 0x7FFF, 0, 0 ); } if ( aExp == 0 ) { ++expDiff; } else { aSig0 |= LIT64( 0x4000000000000000 ); } shift128RightJamming( aSig0, aSig1, - expDiff, &aSig0, &aSig1 ); bSig0 |= LIT64( 0x4000000000000000 ); bBigger: sub128( bSig0, bSig1, aSig0, aSig1, &zSig0, &zSig1 ); zExp = bExp; zSign ^= 1; goto normalizeRoundAndPack; aExpBigger: if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b ); return a; } if ( bExp == 0 ) { --expDiff; } else { bSig0 |= LIT64( 0x4000000000000000 ); } shift128RightJamming( bSig0, bSig1, expDiff, &bSig0, &bSig1 ); aSig0 |= LIT64( 0x4000000000000000 ); aBigger: sub128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 ); zExp = aExp; normalizeRoundAndPack: --zExp; return normalizeRoundAndPackFloat128( zSign, zExp - 14, zSig0, zSig1 ); } /*---------------------------------------------------------------------------- | Returns the result of adding the quadruple-precision floating-point values | `a' and `b'. The operation is performed according to the IEC/IEEE Standard | for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float128 float128_add( float128 a, float128 b ) { flag aSign, bSign; aSign = extractFloat128Sign( a ); bSign = extractFloat128Sign( b ); if ( aSign == bSign ) { return addFloat128Sigs( a, b, aSign ); } else { return subFloat128Sigs( a, b, aSign ); } } /*---------------------------------------------------------------------------- | Returns the result of subtracting the quadruple-precision floating-point | values `a' and `b'. The operation is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float128 float128_sub( float128 a, float128 b ) { flag aSign, bSign; aSign = extractFloat128Sign( a ); bSign = extractFloat128Sign( b ); if ( aSign == bSign ) { return subFloat128Sigs( a, b, aSign ); } else { return addFloat128Sigs( a, b, aSign ); } } /*---------------------------------------------------------------------------- | Returns the result of multiplying the quadruple-precision floating-point | values `a' and `b'. The operation is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float128 float128_mul( float128 a, float128 b ) { flag aSign, bSign, zSign; int32 aExp, bExp, zExp; bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2, zSig3; float128 z; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); bSig1 = extractFloat128Frac1( b ); bSig0 = extractFloat128Frac0( b ); bExp = extractFloat128Exp( b ); bSign = extractFloat128Sign( b ); zSign = aSign ^ bSign; if ( aExp == 0x7FFF ) { if ( ( aSig0 | aSig1 ) || ( ( bExp == 0x7FFF ) && ( bSig0 | bSig1 ) ) ) { return propagateFloat128NaN( a, b ); } if ( ( bExp | bSig0 | bSig1 ) == 0 ) goto invalid; return packFloat128( zSign, 0x7FFF, 0, 0 ); } if ( bExp == 0x7FFF ) { if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b ); if ( ( aExp | aSig0 | aSig1 ) == 0 ) { invalid: float_raise( float_flag_invalid ); z.low = float128_default_nan_low; z.high = float128_default_nan_high; return z; } return packFloat128( zSign, 0x7FFF, 0, 0 ); } if ( aExp == 0 ) { if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 ); normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 ); } if ( bExp == 0 ) { if ( ( bSig0 | bSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 ); normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 ); } zExp = aExp + bExp - 0x4000; aSig0 |= LIT64( 0x0001000000000000 ); shortShift128Left( bSig0, bSig1, 16, &bSig0, &bSig1 ); mul128To256( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1, &zSig2, &zSig3 ); add128( zSig0, zSig1, aSig0, aSig1, &zSig0, &zSig1 ); zSig2 |= ( zSig3 != 0 ); if ( LIT64( 0x0002000000000000 ) <= zSig0 ) { shift128ExtraRightJamming( zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 ); ++zExp; } return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 ); } /*---------------------------------------------------------------------------- | Returns the result of dividing the quadruple-precision floating-point value | `a' by the corresponding value `b'. The operation is performed according to | the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float128 float128_div( float128 a, float128 b ) { flag aSign, bSign, zSign; int32 aExp, bExp, zExp; bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2; bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3; float128 z; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); bSig1 = extractFloat128Frac1( b ); bSig0 = extractFloat128Frac0( b ); bExp = extractFloat128Exp( b ); bSign = extractFloat128Sign( b ); zSign = aSign ^ bSign; if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b ); if ( bExp == 0x7FFF ) { if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b ); goto invalid; } return packFloat128( zSign, 0x7FFF, 0, 0 ); } if ( bExp == 0x7FFF ) { if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b ); return packFloat128( zSign, 0, 0, 0 ); } if ( bExp == 0 ) { if ( ( bSig0 | bSig1 ) == 0 ) { if ( ( aExp | aSig0 | aSig1 ) == 0 ) { invalid: float_raise( float_flag_invalid ); z.low = float128_default_nan_low; z.high = float128_default_nan_high; return z; } float_raise( float_flag_divbyzero ); return packFloat128( zSign, 0x7FFF, 0, 0 ); } normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 ); } if ( aExp == 0 ) { if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 ); normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 ); } zExp = aExp - bExp + 0x3FFD; shortShift128Left( aSig0 | LIT64( 0x0001000000000000 ), aSig1, 15, &aSig0, &aSig1 ); shortShift128Left( bSig0 | LIT64( 0x0001000000000000 ), bSig1, 15, &bSig0, &bSig1 ); if ( le128( bSig0, bSig1, aSig0, aSig1 ) ) { shift128Right( aSig0, aSig1, 1, &aSig0, &aSig1 ); ++zExp; } zSig0 = estimateDiv128To64( aSig0, aSig1, bSig0 ); mul128By64To192( bSig0, bSig1, zSig0, &term0, &term1, &term2 ); sub192( aSig0, aSig1, 0, term0, term1, term2, &rem0, &rem1, &rem2 ); while ( (sbits64) rem0 < 0 ) { --zSig0; add192( rem0, rem1, rem2, 0, bSig0, bSig1, &rem0, &rem1, &rem2 ); } zSig1 = estimateDiv128To64( rem1, rem2, bSig0 ); if ( ( zSig1 & 0x3FFF ) <= 4 ) { mul128By64To192( bSig0, bSig1, zSig1, &term1, &term2, &term3 ); sub192( rem1, rem2, 0, term1, term2, term3, &rem1, &rem2, &rem3 ); while ( (sbits64) rem1 < 0 ) { --zSig1; add192( rem1, rem2, rem3, 0, bSig0, bSig1, &rem1, &rem2, &rem3 ); } zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 ); } shift128ExtraRightJamming( zSig0, zSig1, 0, 15, &zSig0, &zSig1, &zSig2 ); return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 ); } /*---------------------------------------------------------------------------- | Returns the remainder of the quadruple-precision floating-point value `a' | with respect to the corresponding value `b'. The operation is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float128 float128_rem( float128 a, float128 b ) { flag aSign, zSign; int32 aExp, bExp, expDiff; bits64 aSig0, aSig1, bSig0, bSig1, q, term0, term1, term2; bits64 allZero, alternateASig0, alternateASig1, sigMean1; sbits64 sigMean0; float128 z; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); bSig1 = extractFloat128Frac1( b ); bSig0 = extractFloat128Frac0( b ); bExp = extractFloat128Exp( b ); // bSign = extractFloat128Sign( b ); if ( aExp == 0x7FFF ) { if ( ( aSig0 | aSig1 ) || ( ( bExp == 0x7FFF ) && ( bSig0 | bSig1 ) ) ) { return propagateFloat128NaN( a, b ); } goto invalid; } if ( bExp == 0x7FFF ) { if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b ); return a; } if ( bExp == 0 ) { if ( ( bSig0 | bSig1 ) == 0 ) { invalid: float_raise( float_flag_invalid ); z.low = float128_default_nan_low; z.high = float128_default_nan_high; return z; } normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 ); } if ( aExp == 0 ) { if ( ( aSig0 | aSig1 ) == 0 ) return a; normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 ); } expDiff = aExp - bExp; if ( expDiff < -1 ) return a; shortShift128Left( aSig0 | LIT64( 0x0001000000000000 ), aSig1, 15 - ( expDiff < 0 ), &aSig0, &aSig1 ); shortShift128Left( bSig0 | LIT64( 0x0001000000000000 ), bSig1, 15, &bSig0, &bSig1 ); q = le128( bSig0, bSig1, aSig0, aSig1 ); if ( q ) sub128( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 ); expDiff -= 64; while ( 0 < expDiff ) { q = estimateDiv128To64( aSig0, aSig1, bSig0 ); q = ( 4 < q ) ? q - 4 : 0; mul128By64To192( bSig0, bSig1, q, &term0, &term1, &term2 ); shortShift192Left( term0, term1, term2, 61, &term1, &term2, &allZero ); shortShift128Left( aSig0, aSig1, 61, &aSig0, &allZero ); sub128( aSig0, 0, term1, term2, &aSig0, &aSig1 ); expDiff -= 61; } if ( -64 < expDiff ) { q = estimateDiv128To64( aSig0, aSig1, bSig0 ); q = ( 4 < q ) ? q - 4 : 0; q >>= - expDiff; shift128Right( bSig0, bSig1, 12, &bSig0, &bSig1 ); expDiff += 52; if ( expDiff < 0 ) { shift128Right( aSig0, aSig1, - expDiff, &aSig0, &aSig1 ); } else { shortShift128Left( aSig0, aSig1, expDiff, &aSig0, &aSig1 ); } mul128By64To192( bSig0, bSig1, q, &term0, &term1, &term2 ); sub128( aSig0, aSig1, term1, term2, &aSig0, &aSig1 ); } else { shift128Right( aSig0, aSig1, 12, &aSig0, &aSig1 ); shift128Right( bSig0, bSig1, 12, &bSig0, &bSig1 ); } do { alternateASig0 = aSig0; alternateASig1 = aSig1; ++q; sub128( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 ); } while ( 0 <= (sbits64) aSig0 ); add128( aSig0, aSig1, alternateASig0, alternateASig1, (bits64 *)&sigMean0, &sigMean1 ); if ( ( sigMean0 < 0 ) || ( ( ( sigMean0 | sigMean1 ) == 0 ) && ( q & 1 ) ) ) { aSig0 = alternateASig0; aSig1 = alternateASig1; } zSign = ( (sbits64) aSig0 < 0 ); if ( zSign ) sub128( 0, 0, aSig0, aSig1, &aSig0, &aSig1 ); return normalizeRoundAndPackFloat128( aSign ^ zSign, bExp - 4, aSig0, aSig1 ); } /*---------------------------------------------------------------------------- | Returns the square root of the quadruple-precision floating-point value `a'. | The operation is performed according to the IEC/IEEE Standard for Binary | Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ float128 float128_sqrt( float128 a ) { flag aSign; int32 aExp, zExp; bits64 aSig0, aSig1, zSig0, zSig1, zSig2, doubleZSig0; bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3; float128 z; aSig1 = extractFloat128Frac1( a ); aSig0 = extractFloat128Frac0( a ); aExp = extractFloat128Exp( a ); aSign = extractFloat128Sign( a ); if ( aExp == 0x7FFF ) { if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, a ); if ( ! aSign ) return a; goto invalid; } if ( aSign ) { if ( ( aExp | aSig0 | aSig1 ) == 0 ) return a; invalid: float_raise( float_flag_invalid ); z.low = float128_default_nan_low; z.high = float128_default_nan_high; return z; } if ( aExp == 0 ) { if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( 0, 0, 0, 0 ); normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 ); } zExp = ( ( aExp - 0x3FFF )>>1 ) + 0x3FFE; aSig0 |= LIT64( 0x0001000000000000 ); zSig0 = estimateSqrt32( aExp, aSig0>>17 ); shortShift128Left( aSig0, aSig1, 13 - ( aExp & 1 ), &aSig0, &aSig1 ); zSig0 = estimateDiv128To64( aSig0, aSig1, zSig0<<32 ) + ( zSig0<<30 ); doubleZSig0 = zSig0<<1; mul64To128( zSig0, zSig0, &term0, &term1 ); sub128( aSig0, aSig1, term0, term1, &rem0, &rem1 ); while ( (sbits64) rem0 < 0 ) { --zSig0; doubleZSig0 -= 2; add128( rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1 ); } zSig1 = estimateDiv128To64( rem1, 0, doubleZSig0 ); if ( ( zSig1 & 0x1FFF ) <= 5 ) { if ( zSig1 == 0 ) zSig1 = 1; mul64To128( doubleZSig0, zSig1, &term1, &term2 ); sub128( rem1, 0, term1, term2, &rem1, &rem2 ); mul64To128( zSig1, zSig1, &term2, &term3 ); sub192( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 ); while ( (sbits64) rem1 < 0 ) { --zSig1; shortShift128Left( 0, zSig1, 1, &term2, &term3 ); term3 |= 1; term2 |= doubleZSig0; add192( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 ); } zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 ); } shift128ExtraRightJamming( zSig0, zSig1, 0, 14, &zSig0, &zSig1, &zSig2 ); return roundAndPackFloat128( 0, zExp, zSig0, zSig1, zSig2 ); } /*---------------------------------------------------------------------------- | Returns 1 if the quadruple-precision floating-point value `a' is equal to | the corresponding value `b', and 0 otherwise. The comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float128_eq( float128 a, float128 b ) { if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) || ( ( extractFloat128Exp( b ) == 0x7FFF ) && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) ) ) { if ( float128_is_signaling_nan( a ) || float128_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } return ( a.low == b.low ) && ( ( a.high == b.high ) || ( ( a.low == 0 ) && ( (bits64) ( ( a.high | b.high )<<1 ) == 0 ) ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the quadruple-precision floating-point value `a' is less than | or equal to the corresponding value `b', and 0 otherwise. The comparison | is performed according to the IEC/IEEE Standard for Binary Floating-Point | Arithmetic. *----------------------------------------------------------------------------*/ flag float128_le( float128 a, float128 b ) { flag aSign, bSign; if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) || ( ( extractFloat128Exp( b ) == 0x7FFF ) && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) ) ) { float_raise( float_flag_invalid ); return 0; } aSign = extractFloat128Sign( a ); bSign = extractFloat128Sign( b ); if ( aSign != bSign ) { return aSign || ( ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low ) == 0 ); } return aSign ? le128( b.high, b.low, a.high, a.low ) : le128( a.high, a.low, b.high, b.low ); } /*---------------------------------------------------------------------------- | Returns 1 if the quadruple-precision floating-point value `a' is less than | the corresponding value `b', and 0 otherwise. The comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float128_lt( float128 a, float128 b ) { flag aSign, bSign; if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) || ( ( extractFloat128Exp( b ) == 0x7FFF ) && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) ) ) { float_raise( float_flag_invalid ); return 0; } aSign = extractFloat128Sign( a ); bSign = extractFloat128Sign( b ); if ( aSign != bSign ) { return aSign && ( ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low ) != 0 ); } return aSign ? lt128( b.high, b.low, a.high, a.low ) : lt128( a.high, a.low, b.high, b.low ); } /*---------------------------------------------------------------------------- | Returns 1 if the quadruple-precision floating-point value `a' is equal to | the corresponding value `b', and 0 otherwise. The invalid exception is | raised if either operand is a NaN. Otherwise, the comparison is performed | according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float128_eq_signaling( float128 a, float128 b ) { if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) || ( ( extractFloat128Exp( b ) == 0x7FFF ) && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) ) ) { float_raise( float_flag_invalid ); return 0; } return ( a.low == b.low ) && ( ( a.high == b.high ) || ( ( a.low == 0 ) && ( (bits64) ( ( a.high | b.high )<<1 ) == 0 ) ) ); } /*---------------------------------------------------------------------------- | Returns 1 if the quadruple-precision floating-point value `a' is less than | or equal to the corresponding value `b', and 0 otherwise. Quiet NaNs do not | cause an exception. Otherwise, the comparison is performed according to the | IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float128_le_quiet( float128 a, float128 b ) { flag aSign, bSign; if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) || ( ( extractFloat128Exp( b ) == 0x7FFF ) && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) ) ) { if ( float128_is_signaling_nan( a ) || float128_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } aSign = extractFloat128Sign( a ); bSign = extractFloat128Sign( b ); if ( aSign != bSign ) { return aSign || ( ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low ) == 0 ); } return aSign ? le128( b.high, b.low, a.high, a.low ) : le128( a.high, a.low, b.high, b.low ); } /*---------------------------------------------------------------------------- | Returns 1 if the quadruple-precision floating-point value `a' is less than | the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause an | exception. Otherwise, the comparison is performed according to the IEC/IEEE | Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ flag float128_lt_quiet( float128 a, float128 b ) { flag aSign, bSign; if ( ( ( extractFloat128Exp( a ) == 0x7FFF ) && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) ) || ( ( extractFloat128Exp( b ) == 0x7FFF ) && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) ) ) { if ( float128_is_signaling_nan( a ) || float128_is_signaling_nan( b ) ) { float_raise( float_flag_invalid ); } return 0; } aSign = extractFloat128Sign( a ); bSign = extractFloat128Sign( b ); if ( aSign != bSign ) { return aSign && ( ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low ) != 0 ); } return aSign ? lt128( b.high, b.low, a.high, a.low ) : lt128( a.high, a.low, b.high, b.low ); } #endif ================================================ FILE: vm86/mame/lib/softfloat/softfloat.h ================================================ #pragma once /*============================================================================ This C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic Package, Release 2b. Written by John R. Hauser. This work was made possible in part by the International Computer Science Institute, located at Suite 600, 1947 Center Street, Berkeley, California 94704. Funding was partially provided by the National Science Foundation under grant MIP-9311980. The original version of this code was written as part of a project to build a fixed-point vector processor in collaboration with the University of California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek. More information is available through the Web page `http://www.cs.berkeley.edu/~jhauser/ arithmetic/SoftFloat.html'. THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE. Derivative works are acceptable, even for commercial purposes, so long as (1) the source code for the derivative work includes prominent notice that the work is derivative, and (2) the source code includes prominent notice with these four paragraphs for those parts of this code that are retained. =============================================================================*/ /*---------------------------------------------------------------------------- | The macro `FLOATX80' must be defined to enable the extended double-precision | floating-point format `floatx80'. If this macro is not defined, the | `floatx80' type will not be defined, and none of the functions that either | input or output the `floatx80' type will be defined. The same applies to | the `FLOAT128' macro and the quadruple-precision format `float128'. *----------------------------------------------------------------------------*/ #define FLOATX80 #define FLOAT128 /*---------------------------------------------------------------------------- | Software IEC/IEEE floating-point types. *----------------------------------------------------------------------------*/ typedef bits32 float32; typedef bits64 float64; #ifdef FLOATX80 typedef struct { bits16 high; bits64 low; } floatx80; #endif #ifdef FLOAT128 typedef struct { bits64 high, low; } float128; #endif /*---------------------------------------------------------------------------- | Primitive arithmetic functions, including multi-word arithmetic, and | division and square root approximations. (Can be specialized to target if | desired.) *----------------------------------------------------------------------------*/ #include "softfloat-macros" /*---------------------------------------------------------------------------- | Software IEC/IEEE floating-point underflow tininess-detection mode. *----------------------------------------------------------------------------*/ extern int8 float_detect_tininess; enum { float_tininess_after_rounding = 0, float_tininess_before_rounding = 1 }; /*---------------------------------------------------------------------------- | Software IEC/IEEE floating-point rounding mode. *----------------------------------------------------------------------------*/ extern int8 float_rounding_mode; enum { float_round_nearest_even = 0, float_round_to_zero = 1, float_round_down = 2, float_round_up = 3 }; /*---------------------------------------------------------------------------- | Software IEC/IEEE floating-point exception flags. *----------------------------------------------------------------------------*/ extern int8 float_exception_flags; enum { float_flag_invalid = 0x01, float_flag_denormal = 0x02, float_flag_divbyzero = 0x04, float_flag_overflow = 0x08, float_flag_underflow = 0x10, float_flag_inexact = 0x20 }; /*---------------------------------------------------------------------------- | Routine to raise any or all of the software IEC/IEEE floating-point | exception flags. *----------------------------------------------------------------------------*/ void float_raise( int8 ); /*---------------------------------------------------------------------------- | Software IEC/IEEE integer-to-floating-point conversion routines. *----------------------------------------------------------------------------*/ float32 int32_to_float32( int32 ); float64 int32_to_float64( int32 ); #ifdef FLOATX80 floatx80 int32_to_floatx80( int32 ); #endif #ifdef FLOAT128 float128 int32_to_float128( int32 ); #endif float32 int64_to_float32( int64 ); float64 int64_to_float64( int64 ); #ifdef FLOATX80 floatx80 int64_to_floatx80( int64 ); #endif #ifdef FLOAT128 float128 int64_to_float128( int64 ); #endif /*---------------------------------------------------------------------------- | Software IEC/IEEE single-precision conversion routines. *----------------------------------------------------------------------------*/ int32 float32_to_int32( float32 ); int32 float32_to_int32_round_to_zero( float32 ); int64 float32_to_int64( float32 ); int64 float32_to_int64_round_to_zero( float32 ); float64 float32_to_float64( float32 ); #ifdef FLOATX80 floatx80 float32_to_floatx80( float32 ); #endif #ifdef FLOAT128 float128 float32_to_float128( float32 ); #endif /*---------------------------------------------------------------------------- | Software IEC/IEEE single-precision operations. *----------------------------------------------------------------------------*/ float32 float32_round_to_int( float32 ); float32 float32_add( float32, float32 ); float32 float32_sub( float32, float32 ); float32 float32_mul( float32, float32 ); float32 float32_div( float32, float32 ); float32 float32_rem( float32, float32 ); float32 float32_sqrt( float32 ); flag float32_eq( float32, float32 ); flag float32_le( float32, float32 ); flag float32_lt( float32, float32 ); flag float32_eq_signaling( float32, float32 ); flag float32_le_quiet( float32, float32 ); flag float32_lt_quiet( float32, float32 ); flag float32_is_signaling_nan( float32 ); /*---------------------------------------------------------------------------- | Software IEC/IEEE double-precision conversion routines. *----------------------------------------------------------------------------*/ int32 float64_to_int32( float64 ); int32 float64_to_int32_round_to_zero( float64 ); int64 float64_to_int64( float64 ); int64 float64_to_int64_round_to_zero( float64 ); float32 float64_to_float32( float64 ); #ifdef FLOATX80 floatx80 float64_to_floatx80( float64 ); #endif #ifdef FLOAT128 float128 float64_to_float128( float64 ); #endif /*---------------------------------------------------------------------------- | Software IEC/IEEE double-precision operations. *----------------------------------------------------------------------------*/ float64 float64_round_to_int( float64 ); float64 float64_add( float64, float64 ); float64 float64_sub( float64, float64 ); float64 float64_mul( float64, float64 ); float64 float64_div( float64, float64 ); float64 float64_rem( float64, float64 ); float64 float64_sqrt( float64 ); flag float64_eq( float64, float64 ); flag float64_le( float64, float64 ); flag float64_lt( float64, float64 ); flag float64_eq_signaling( float64, float64 ); flag float64_le_quiet( float64, float64 ); flag float64_lt_quiet( float64, float64 ); flag float64_is_signaling_nan( float64 ); #ifdef FLOATX80 /*---------------------------------------------------------------------------- | Software IEC/IEEE extended double-precision conversion routines. *----------------------------------------------------------------------------*/ int32 floatx80_to_int32( floatx80 ); int32 floatx80_to_int32_round_to_zero( floatx80 ); int64 floatx80_to_int64( floatx80 ); int64 floatx80_to_int64_round_to_zero( floatx80 ); float32 floatx80_to_float32( floatx80 ); float64 floatx80_to_float64( floatx80 ); #ifdef FLOAT128 float128 floatx80_to_float128( floatx80 ); #endif floatx80 floatx80_scale(floatx80 a, floatx80 b); /*---------------------------------------------------------------------------- | Packs the sign `zSign', exponent `zExp', and significand `zSig' into an | extended double-precision floating-point value, returning the result. *----------------------------------------------------------------------------*/ INLINE floatx80 packFloatx80( flag zSign, int32 zExp, bits64 zSig ) { floatx80 z; z.low = zSig; z.high = ( ( (bits16) zSign )<<15 ) + zExp; return z; } /*---------------------------------------------------------------------------- | Software IEC/IEEE extended double-precision rounding precision. Valid | values are 32, 64, and 80. *----------------------------------------------------------------------------*/ extern int8 floatx80_rounding_precision; /*---------------------------------------------------------------------------- | Software IEC/IEEE extended double-precision operations. *----------------------------------------------------------------------------*/ floatx80 floatx80_round_to_int( floatx80 ); floatx80 floatx80_add( floatx80, floatx80 ); floatx80 floatx80_sub( floatx80, floatx80 ); floatx80 floatx80_mul( floatx80, floatx80 ); floatx80 floatx80_div( floatx80, floatx80 ); floatx80 floatx80_rem( floatx80, floatx80 ); floatx80 floatx80_sqrt( floatx80 ); flag floatx80_eq( floatx80, floatx80 ); flag floatx80_le( floatx80, floatx80 ); flag floatx80_lt( floatx80, floatx80 ); flag floatx80_eq_signaling( floatx80, floatx80 ); flag floatx80_le_quiet( floatx80, floatx80 ); flag floatx80_lt_quiet( floatx80, floatx80 ); flag floatx80_is_signaling_nan( floatx80 ); int floatx80_fsin(floatx80 &a); int floatx80_fcos(floatx80 &a); int floatx80_ftan(floatx80 &a); floatx80 floatx80_flognp1(floatx80 a); floatx80 floatx80_flogn(floatx80 a); floatx80 floatx80_flog2(floatx80 a); floatx80 floatx80_flog10(floatx80 a); // roundAndPackFloatx80 used to be in softfloat-round-pack, is now in softfloat.c floatx80 roundAndPackFloatx80(int8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1); #endif #ifdef FLOAT128 /*---------------------------------------------------------------------------- | Software IEC/IEEE quadruple-precision conversion routines. *----------------------------------------------------------------------------*/ int32 float128_to_int32( float128 ); int32 float128_to_int32_round_to_zero( float128 ); int64 float128_to_int64( float128 ); int64 float128_to_int64_round_to_zero( float128 ); float32 float128_to_float32( float128 ); float64 float128_to_float64( float128 ); #ifdef FLOATX80 floatx80 float128_to_floatx80( float128 ); #endif /*---------------------------------------------------------------------------- | Software IEC/IEEE quadruple-precision operations. *----------------------------------------------------------------------------*/ float128 float128_round_to_int( float128 ); float128 float128_add( float128, float128 ); float128 float128_sub( float128, float128 ); float128 float128_mul( float128, float128 ); float128 float128_div( float128, float128 ); float128 float128_rem( float128, float128 ); float128 float128_sqrt( float128 ); flag float128_eq( float128, float128 ); flag float128_le( float128, float128 ); flag float128_lt( float128, float128 ); flag float128_eq_signaling( float128, float128 ); flag float128_le_quiet( float128, float128 ); flag float128_lt_quiet( float128, float128 ); flag float128_is_signaling_nan( float128 ); /*---------------------------------------------------------------------------- | Packs the sign `zSign', the exponent `zExp', and the significand formed | by the concatenation of `zSig0' and `zSig1' into a quadruple-precision | floating-point value, returning the result. After being shifted into the | proper positions, the three fields `zSign', `zExp', and `zSig0' are simply | added together to form the most significant 32 bits of the result. This | means that any integer portion of `zSig0' will be added into the exponent. | Since a properly normalized significand will have an integer portion equal | to 1, the `zExp' input should be 1 less than the desired result exponent | whenever `zSig0' and `zSig1' concatenated form a complete, normalized | significand. *----------------------------------------------------------------------------*/ INLINE float128 packFloat128( flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 ) { float128 z; z.low = zSig1; z.high = ( ( (bits64) zSign )<<63 ) + ( ( (bits64) zExp )<<48 ) + zSig0; return z; } /*---------------------------------------------------------------------------- | Takes an abstract floating-point value having sign `zSign', exponent `zExp', | and extended significand formed by the concatenation of `zSig0', `zSig1', | and `zSig2', and returns the proper quadruple-precision floating-point value | corresponding to the abstract input. Ordinarily, the abstract value is | simply rounded and packed into the quadruple-precision format, with the | inexact exception raised if the abstract input cannot be represented | exactly. However, if the abstract value is too large, the overflow and | inexact exceptions are raised and an infinity or maximal finite value is | returned. If the abstract value is too small, the input value is rounded to | a subnormal number, and the underflow and inexact exceptions are raised if | the abstract input cannot be represented exactly as a subnormal quadruple- | precision floating-point number. | The input significand must be normalized or smaller. If the input | significand is not normalized, `zExp' must be 0; in that case, the result | returned is a subnormal number, and it must not require rounding. In the | usual case that the input significand is normalized, `zExp' must be 1 less | than the ``true'' floating-point exponent. The handling of underflow and | overflow follows the IEC/IEEE Standard for Binary Floating-Point Arithmetic. *----------------------------------------------------------------------------*/ INLINE float128 roundAndPackFloat128( flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1, bits64 zSig2 ) { int8 roundingMode; flag roundNearestEven, increment, isTiny; roundingMode = float_rounding_mode; roundNearestEven = ( roundingMode == float_round_nearest_even ); increment = ( (sbits64) zSig2 < 0 ); if ( ! roundNearestEven ) { if ( roundingMode == float_round_to_zero ) { increment = 0; } else { if ( zSign ) { increment = ( roundingMode == float_round_down ) && zSig2; } else { increment = ( roundingMode == float_round_up ) && zSig2; } } } if ( 0x7FFD <= (bits32) zExp ) { if ( ( 0x7FFD < zExp ) || ( ( zExp == 0x7FFD ) && eq128( LIT64( 0x0001FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ), zSig0, zSig1 ) && increment ) ) { float_raise( float_flag_overflow | float_flag_inexact ); if ( ( roundingMode == float_round_to_zero ) || ( zSign && ( roundingMode == float_round_up ) ) || ( ! zSign && ( roundingMode == float_round_down ) ) ) { return packFloat128( zSign, 0x7FFE, LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) ); } return packFloat128( zSign, 0x7FFF, 0, 0 ); } if ( zExp < 0 ) { isTiny = ( float_detect_tininess == float_tininess_before_rounding ) || ( zExp < -1 ) || ! increment || lt128( zSig0, zSig1, LIT64( 0x0001FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) ); shift128ExtraRightJamming( zSig0, zSig1, zSig2, - zExp, &zSig0, &zSig1, &zSig2 ); zExp = 0; if ( isTiny && zSig2 ) float_raise( float_flag_underflow ); if ( roundNearestEven ) { increment = ( (sbits64) zSig2 < 0 ); } else { if ( zSign ) { increment = ( roundingMode == float_round_down ) && zSig2; } else { increment = ( roundingMode == float_round_up ) && zSig2; } } } } if ( zSig2 ) float_exception_flags |= float_flag_inexact; if ( increment ) { add128( zSig0, zSig1, 0, 1, &zSig0, &zSig1 ); zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven ); } else { if ( ( zSig0 | zSig1 ) == 0 ) zExp = 0; } return packFloat128( zSign, zExp, zSig0, zSig1 ); } /*---------------------------------------------------------------------------- | Takes an abstract floating-point value having sign `zSign', exponent `zExp', | and significand formed by the concatenation of `zSig0' and `zSig1', and | returns the proper quadruple-precision floating-point value corresponding | to the abstract input. This routine is just like `roundAndPackFloat128' | except that the input significand has fewer bits and does not have to be | normalized. In all cases, `zExp' must be 1 less than the ``true'' floating- | point exponent. *----------------------------------------------------------------------------*/ INLINE float128 normalizeRoundAndPackFloat128( flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 ) { int8 shiftCount; bits64 zSig2; if ( zSig0 == 0 ) { zSig0 = zSig1; zSig1 = 0; zExp -= 64; } shiftCount = countLeadingZeros64( zSig0 ) - 15; if ( 0 <= shiftCount ) { zSig2 = 0; shortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 ); } else { shift128ExtraRightJamming( zSig0, zSig1, 0, - shiftCount, &zSig0, &zSig1, &zSig2 ); } zExp -= shiftCount; return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 ); } #endif ================================================ FILE: vm86/msdos.cpp ================================================ /* MS-DOS Player for Win32 console Author : Takeda.Toshiya Date : 2009.11.09- */ int ignore_illegal_insn; #include "msdos.h" #define my_strchr(str, chr) (char *)_mbschr((unsigned char *)(str), (unsigned int)(chr)) #define my_strtok(tok, del) (char *)_mbstok((unsigned char *)(tok), (const unsigned char *)(del)) #define my_strupr(str) (char *)_mbsupr((unsigned char *)(str)) #define fatalerror(...) { \ fprintf(stderr, __VA_ARGS__); \ exit(1); \ } #define error(...) fprintf(stderr, "error: " __VA_ARGS__) #if defined(__MINGW32__) extern "C" int _CRT_glob = 0; #endif /* kludge for "more-standardized" C++ */ #if !defined(_MSC_VER) inline int kludge_min(int a, int b) { return (ab ? a:b); } #define min(a,b) kludge_min(a,b) #define max(a,b) kludge_max(a,b) #endif void change_console_size_to_80x25(); /* ---------------------------------------------------------------------------- MAME i86/i386 ---------------------------------------------------------------------------- */ #define SUPPORT_DISASSEMBLER #if defined(HAS_I86) #define CPU_MODEL i8086 #elif defined(HAS_I186) #define CPU_MODEL i80186 #elif defined(HAS_I286) #define CPU_MODEL i80286 #elif defined(HAS_I386) #define CPU_MODEL i386 #else #if defined(HAS_I386SX) #define CPU_MODEL i386SX #else #if defined(HAS_I486) #define CPU_MODEL i486 #else #if defined(HAS_PENTIUM) #define CPU_MODEL pentium #elif defined(HAS_MEDIAGX) #define CPU_MODEL mediagx #elif defined(HAS_PENTIUM_PRO) #define CPU_MODEL pentium_pro #elif defined(HAS_PENTIUM_MMX) #define CPU_MODEL pentium_mmx #elif defined(HAS_PENTIUM2) #define CPU_MODEL pentium2 #elif defined(HAS_PENTIUM3) #define CPU_MODEL pentium3 #elif defined(HAS_PENTIUM4) #define CPU_MODEL pentium4 #endif #define SUPPORT_RDTSC #endif #define SUPPORT_FPU #endif #define HAS_I386 #endif #ifndef __BIG_ENDIAN__ #define LSB_FIRST #endif #ifndef INLINE #define INLINE inline #endif #define U64(v) UINT64(v) //#ifdef _DEBUG void logerror(const char *format, ...) { va_list arg; va_start(arg, format); vfprintf(stderr, format, arg); va_end(arg); } //#else //#define logerror(...) //#endif //#define logerror(...) fprintf(stderr, __VA_ARGS__) //#define logerror(...) //#define popmessage(...) fprintf(stderr, __VA_ARGS__) #define popmessage(...) /*****************************************************************************/ /* src/emu/devcpu.h */ // CPU interface functions #define CPU_INIT_NAME(name) cpu_init_##name #define CPU_INIT(name) void CPU_INIT_NAME(name)() #define CPU_INIT_CALL(name) CPU_INIT_NAME(name)() #define CPU_RESET_NAME(name) cpu_reset_##name #define CPU_RESET(name) void CPU_RESET_NAME(name)() #define CPU_RESET_CALL(name) CPU_RESET_NAME(name)() #define CPU_EXECUTE_NAME(name) cpu_execute_##name #define CPU_EXECUTE(name) void CPU_EXECUTE_NAME(name)() #define CPU_EXECUTE_CALL(name) CPU_EXECUTE_NAME(name)() #define CPU_TRANSLATE_NAME(name) cpu_translate_##name #define CPU_TRANSLATE(name) int CPU_TRANSLATE_NAME(name)(address_spacenum space, int intention, offs_t *address) #define CPU_TRANSLATE_CALL(name) CPU_TRANSLATE_NAME(name)(space, intention, address) #define CPU_DISASSEMBLE_NAME(name) cpu_disassemble_##name #define CPU_DISASSEMBLE(name) int CPU_DISASSEMBLE_NAME(name)(char *buffer, offs_t eip, const UINT8 *oprom) #define CPU_DISASSEMBLE_CALL(name) CPU_DISASSEMBLE_NAME(name)(buffer, eip, oprom) /*****************************************************************************/ /* src/emu/didisasm.h */ // Disassembler constants const UINT32 DASMFLAG_SUPPORTED = 0x80000000; // are disassembly flags supported? const UINT32 DASMFLAG_STEP_OUT = 0x40000000; // this instruction should be the end of a step out sequence const UINT32 DASMFLAG_STEP_OVER = 0x20000000; // this instruction should be stepped over by setting a breakpoint afterwards const UINT32 DASMFLAG_OVERINSTMASK = 0x18000000; // number of extra instructions to skip when stepping over const UINT32 DASMFLAG_OVERINSTSHIFT = 27; // bits to shift after masking to get the value const UINT32 DASMFLAG_LENGTHMASK = 0x0000ffff; // the low 16-bits contain the actual length /*****************************************************************************/ /* src/emu/diexec.h */ // I/O line states enum line_state { CLEAR_LINE = 0, // clear (a fired or held) line ASSERT_LINE, // assert an interrupt immediately HOLD_LINE, // hold interrupt line until acknowledged PULSE_LINE // pulse interrupt line instantaneously (only for NMI, RESET) }; // I/O line definitions enum { INPUT_LINE_IRQ = 0, INPUT_LINE_NMI }; /*****************************************************************************/ /* src/emu/dimemory.h */ // Translation intentions const int TRANSLATE_TYPE_MASK = 0x03; // read write or fetch const int TRANSLATE_USER_MASK = 0x04; // user mode or fully privileged const int TRANSLATE_DEBUG_MASK = 0x08; // debug mode (no side effects) const int TRANSLATE_READ = 0; // translate for read const int TRANSLATE_WRITE = 1; // translate for write const int TRANSLATE_FETCH = 2; // translate for instruction fetch const int TRANSLATE_READ_USER = (TRANSLATE_READ | TRANSLATE_USER_MASK); const int TRANSLATE_WRITE_USER = (TRANSLATE_WRITE | TRANSLATE_USER_MASK); const int TRANSLATE_FETCH_USER = (TRANSLATE_FETCH | TRANSLATE_USER_MASK); const int TRANSLATE_READ_DEBUG = (TRANSLATE_READ | TRANSLATE_DEBUG_MASK); const int TRANSLATE_WRITE_DEBUG = (TRANSLATE_WRITE | TRANSLATE_DEBUG_MASK); const int TRANSLATE_FETCH_DEBUG = (TRANSLATE_FETCH | TRANSLATE_DEBUG_MASK); /*****************************************************************************/ /* src/emu/emucore.h */ // constants for expression endianness enum endianness_t { ENDIANNESS_LITTLE, ENDIANNESS_BIG }; // declare native endianness to be one or the other #ifdef LSB_FIRST const endianness_t ENDIANNESS_NATIVE = ENDIANNESS_LITTLE; #else const endianness_t ENDIANNESS_NATIVE = ENDIANNESS_BIG; #endif // endian-based value: first value is if 'endian' is little-endian, second is if 'endian' is big-endian #define ENDIAN_VALUE_LE_BE(endian,leval,beval) (((endian) == ENDIANNESS_LITTLE) ? (leval) : (beval)) // endian-based value: first value is if native endianness is little-endian, second is if native is big-endian #define NATIVE_ENDIAN_VALUE_LE_BE(leval,beval) ENDIAN_VALUE_LE_BE(ENDIANNESS_NATIVE, leval, beval) // endian-based value: first value is if 'endian' matches native, second is if 'endian' doesn't match native #define ENDIAN_VALUE_NE_NNE(endian,leval,beval) (((endian) == ENDIANNESS_NATIVE) ? (neval) : (nneval)) /*****************************************************************************/ /* src/emu/memory.h */ // address spaces enum address_spacenum { AS_0, // first address space AS_1, // second address space AS_2, // third address space AS_3, // fourth address space ADDRESS_SPACES, // maximum number of address spaces // alternate address space names for common use AS_PROGRAM = AS_0, // program address space AS_DATA = AS_1, // data address space AS_IO = AS_2 // I/O address space }; // offsets and addresses are 32-bit (for now...) typedef UINT32 offs_t; extern "C" void *wine_ldt_get_ptr(unsigned short sel, unsigned long offset); void *read_ptr(offs_t byteaddress) { return nullptr; } // read accessors UINT8 read_byte(offs_t byteaddress) { #if 0// defined(HAS_I386) if(byteaddress < MAX_MEM) { return mem[byteaddress]; // } else if((byteaddress & 0xfffffff0) == 0xfffffff0) { // return read_byte(byteaddress & 0xfffff); } return 0; #else return mem[byteaddress]; #endif } UINT16 read_word(offs_t byteaddress) { #if 0// defined(HAS_I386) if(byteaddress < MAX_MEM - 1) { return *(UINT16 *)(mem + byteaddress); // } else if((byteaddress & 0xfffffff0) == 0xfffffff0) { // return read_word(byteaddress & 0xfffff); } return 0; #else return *(UINT16 *)(mem + byteaddress); #endif } UINT32 read_dword(offs_t byteaddress) { #if 0// defined(HAS_I386) if(byteaddress < MAX_MEM - 3) { return *(UINT32 *)(mem + byteaddress); // } else if((byteaddress & 0xfffffff0) == 0xfffffff0) { // return read_dword(byteaddress & 0xfffff); } return 0; #else return *(UINT32 *)(mem + byteaddress); #endif } void write_byte(offs_t byteaddress, UINT8 data) { /* if(byteaddress < MEMORY_END) { mem[byteaddress] = data; } else if(byteaddress >= text_vram_top_address && byteaddress < text_vram_end_address) { if(!restore_console_on_exit && (scr_width != 80 || scr_height != 25)) { change_console_size_to_80x25(); restore_console_on_exit = true; } write_text_vram_byte(byteaddress - text_vram_top_address, data); mem[byteaddress] = data; } else if(byteaddress >= shadow_buffer_top_address && byteaddress < shadow_buffer_end_address) { if(int_10h_feh_called && !int_10h_ffh_called) { write_text_vram_byte(byteaddress - shadow_buffer_top_address, data); } mem[byteaddress] = data; #if defined(HAS_I386) } else if(byteaddress < MAX_MEM) { #else } else { #endif mem[byteaddress] = data; } */ mem[byteaddress] = data; } void write_word(offs_t byteaddress, UINT16 data) { *(UINT16 *)(mem + byteaddress) = data; /* if(byteaddress < MEMORY_END) { *(UINT16 *)(mem + byteaddress) = data; } else if(byteaddress >= text_vram_top_address && byteaddress < text_vram_end_address) { if(!restore_console_on_exit && (scr_width != 80 || scr_height != 25)) { change_console_size_to_80x25(); restore_console_on_exit = true; } write_text_vram_word(byteaddress - text_vram_top_address, data); *(UINT16 *)(mem + byteaddress) = data; } else if(byteaddress >= shadow_buffer_top_address && byteaddress < shadow_buffer_end_address) { if(int_10h_feh_called && !int_10h_ffh_called) { write_text_vram_word(byteaddress - shadow_buffer_top_address, data); } *(UINT16 *)(mem + byteaddress) = data; #if defined(HAS_I386) } else if(byteaddress < MAX_MEM - 1) { #else } else { #endif *(UINT16 *)(mem + byteaddress) = data; }*/ } void write_dword(offs_t byteaddress, UINT32 data) { *(UINT32 *)(mem + byteaddress) = data; /* if(byteaddress < MEMORY_END) { *(UINT32 *)(mem + byteaddress) = data; } else if(byteaddress >= text_vram_top_address && byteaddress < text_vram_end_address) { if(!restore_console_on_exit && (scr_width != 80 || scr_height != 25)) { change_console_size_to_80x25(); restore_console_on_exit = true; } write_text_vram_dword(byteaddress - text_vram_top_address, data); *(UINT32 *)(mem + byteaddress) = data; } else if(byteaddress >= shadow_buffer_top_address && byteaddress < shadow_buffer_end_address) { if(int_10h_feh_called && !int_10h_ffh_called) { write_text_vram_dword(byteaddress - shadow_buffer_top_address, data); } *(UINT32 *)(mem + byteaddress) = data; #if defined(HAS_I386) } else if(byteaddress < MAX_MEM - 3) { #else } else { #endif *(UINT32 *)(mem + byteaddress) = data; } */ } #define read_decrypted_byte read_byte #define read_decrypted_word read_word #define read_decrypted_dword read_dword #define read_raw_byte read_byte #define write_raw_byte write_byte #define read_word_unaligned read_word #define write_word_unaligned write_word #define read_io_word_unaligned read_io_word #define write_io_word_unaligned write_io_word UINT8 read_io_byte(offs_t byteaddress); UINT16 read_io_word(offs_t byteaddress); UINT32 read_io_dword(offs_t byteaddress); void write_io_byte(offs_t byteaddress, UINT8 data); void write_io_word(offs_t byteaddress, UINT16 data); void write_io_dword(offs_t byteaddress, UINT32 data); /*****************************************************************************/ /* src/osd/osdcomm.h */ /* Highly useful macro for compile-time knowledge of an array size */ #define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0])) #if defined(HAS_I386) static CPU_TRANSLATE(i386); #include "mame/lib/softfloat/softfloat.c" #include "mame/lib/softfloat/fsincos.c" #include "mame/lib/softfloat/f2xm1.c" #include "mame/lib/softfloat/fpatan.c" #include "mame/lib/softfloat/fyl2x.c" #include "mame/emu/cpu/i386/i386.c" #include "mame/emu/cpu/vtlb.c" #elif defined(HAS_I286) #include "mame/emu/cpu/i86/i286.c" #else #include "mame/emu/cpu/i86/i86.c" #endif #ifdef SUPPORT_DISASSEMBLER #include "mame/emu/cpu/i386/i386dasm.c" bool dasm = false; #endif #if defined(HAS_I386) #define SREG(x) m_sreg[x].selector #define SREG_BASE(x) m_sreg[x].base int cpu_type, cpu_step; #else #define REG8(x) m_regs.b[x] #define REG16(x) m_regs.w[x] #define SREG(x) m_sregs[x] #define SREG_BASE(x) m_base[x] #define m_CF m_CarryVal #define m_a20_mask AMASK //#define i386_load_segment_descriptor(x) m_base[x] = SegBase(x) void load_segment_descriptor_wine(int sreg); #define i386_load_segment_descriptor(x) load_segment_descriptor_wine(x) #if defined(HAS_I286) #define i386_set_a20_line(x) i80286_set_a20_line(x) #else #define i386_set_a20_line(x) #endif #define i386_set_irq_line(x, y) set_irq_line(x, y) #endif void i386_jmp_far(UINT16 selector, UINT32 address) { #if defined(HAS_I386) if(PROTECTED_MODE && !V8086_MODE) { i386_protected_mode_jump(selector, address, 1, m_operand_size); } else { SREG(CS) = selector; m_performed_intersegment_jump = 1; i386_load_segment_descriptor(CS); m_eip = address; CHANGE_PC(m_eip); } #elif defined(HAS_I286) i80286_code_descriptor(selector, address, 1); #else SREG(CS) = selector; i386_load_segment_descriptor(CS); m_pc = (SREG_BASE(CS) + address) & m_a20_mask; #endif } /* ---------------------------------------------------------------------------- MS-DOS virtual machine ---------------------------------------------------------------------------- */ void msdos_syscall(unsigned int a) { } /* ---------------------------------------------------------------------------- PC/AT hardware emulation ---------------------------------------------------------------------------- */ void hardware_init() { CPU_INIT_CALL(CPU_MODEL); CPU_RESET_CALL(CPU_MODEL); #if defined(HAS_I386) cpu_type = (REG32(EDX) >> 8) & 0x0f; cpu_step = (REG32(EDX) >> 0) & 0x0f; #endif i386_set_a20_line(0); } void hardware_finish() { #if defined(HAS_I386) vtlb_free(m_vtlb); #endif } int pic_ack() { return 0; } typedef DWORD (*DOSVM_inport_t)(int port, int size, CONTEXT *ctx); typedef void (*DOSVM_outport_t)(int port, int size, DWORD value, CONTEXT *ctx); DOSVM_inport_t DOSVM_inport; DOSVM_outport_t DOSVM_outport; extern "C" void save_context(CONTEXT *context); extern "C" void load_context(CONTEXT *context); // i/o bus UINT8 read_io_byte(offs_t addr) { CONTEXT ctx; save_context(&ctx); UINT8 ret = (UINT8)DOSVM_inport(addr, 1, &ctx); load_context(&ctx); return ret; } UINT16 read_io_word(offs_t addr) { CONTEXT ctx; save_context(&ctx); UINT16 ret = (UINT16)DOSVM_inport(addr, 2, &ctx); load_context(&ctx); return ret; } UINT32 read_io_dword(offs_t addr) { CONTEXT ctx; save_context(&ctx); UINT32 ret = DOSVM_inport(addr, 4, &ctx); load_context(&ctx); return ret; } void write_io_byte(offs_t addr, UINT8 val) { CONTEXT ctx; save_context(&ctx); DOSVM_outport(addr, 1, val, &ctx); load_context(&ctx); } void write_io_word(offs_t addr, UINT16 val) { CONTEXT ctx; save_context(&ctx); DOSVM_outport(addr, 2, val, &ctx); load_context(&ctx); } void write_io_dword(offs_t addr, UINT32 val) { CONTEXT ctx; save_context(&ctx); DOSVM_outport(addr, 4, val, &ctx); load_context(&ctx); } #undef min #undef max static HMODULE krnl386 = 0; extern "C" { #define EXCEPTION_PROTECTED_MODE 0x80020100 //kenel16_private.h #include "wine/exception.h" #include "../krnl386/kernel16_private.h" #include #define KRNL386 "krnl386.exe16" PVOID dynamic_setWOW32Reserved(PVOID w) { static PVOID(*setWOW32Reserved)(PVOID); if (!setWOW32Reserved) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); setWOW32Reserved = (PVOID(*)(PVOID))GetProcAddress(krnl386, "setWOW32Reserved"); } return setWOW32Reserved(w); } PVOID dynamic_getWOW32Reserved() { static PVOID(*getWOW32Reserved)(); if (!getWOW32Reserved) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); getWOW32Reserved = (PVOID(*)())GetProcAddress(krnl386, "getWOW32Reserved"); } return getWOW32Reserved(); } WINE_VM86_TEB_INFO *dynamic_getGdiTebBatch() { static WINE_VM86_TEB_INFO*(*getGdiTebBatch)(); if (!getGdiTebBatch) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); getGdiTebBatch = (WINE_VM86_TEB_INFO*(*)())GetProcAddress(krnl386, "getGdiTebBatch"); } return getGdiTebBatch(); } void dynamic__wine_call_int_handler(CONTEXT *context, BYTE intnum) { static void(*__wine_call_int_handler)(CONTEXT *context, BYTE intnum); if (!__wine_call_int_handler) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); __wine_call_int_handler = (void(*)(CONTEXT *context, BYTE intnum))GetProcAddress(krnl386, "__wine_call_int_handler"); } __wine_call_int_handler(context, intnum); } __declspec(dllimport) LDT_ENTRY wine_ldt[8192]; /*********************************************************************** * SELECTOR_SetEntries * * Set the LDT entries for an array of selectors. */ static BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags) { LDT_ENTRY entry; WORD i, count; wine_ldt_set_base(&entry, base); wine_ldt_set_limit(&entry, size - 1); wine_ldt_set_flags(&entry, flags); count = (size + 0xffff) / 0x10000; for (i = 0; i < count; i++) { if (wine_ldt_set_entry(sel + (i << 3), &entry) < 0) return FALSE; wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000); /* yep, Windows sets limit like that, not 64K sel units */ wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000); } return TRUE; } void wine_ldt_free_entries(unsigned short sel, int count); /*********************************************************************** * SELECTOR_AllocBlock * * Allocate selectors for a block of linear memory. */ WORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags) { WORD sel, count; if (!size) return 0; count = (size + 0xffff) / 0x10000; if ((sel = wine_ldt_alloc_entries(count))) { if (SELECTOR_SetEntries(sel, base, size, flags)) return sel; wine_ldt_free_entries(sel, count); sel = 0; } return sel; } WORD reg_fs = 0; WORD reg_gs = 0; WORD reg_cs = 0; WORD reg_ss = 0; WORD reg_ds = 0; WORD reg_es = 0; void save_context(CONTEXT *context) { context->Eax = REG32(EAX); context->Ecx = REG32(ECX); context->Edx = REG32(EDX); context->Ebx = REG32(EBX); context->Esp = REG32(ESP); context->Ebp = REG32(EBP); context->Esi = REG32(ESI); context->Edi = REG32(EDI); context->Ebp = REG32(EBP); context->Eip = m_eip; context->SegEs = SREG(ES); context->SegCs = SREG(CS); context->SegSs = SREG(SS); context->SegDs = SREG(DS); context->SegFs = SREG(FS); context->SegGs = SREG(GS); context->EFlags = get_flags(); if (!V8086_MODE) dynamic_setWOW32Reserved((PVOID)(SREG(SS) << 16 | REG16(SP))); } void load_context(CONTEXT *context) { REG32(EAX) = (DWORD)context->Eax; REG32(ECX) = (DWORD)context->Ecx; REG32(EDX) = (DWORD)context->Edx; REG32(EBX) = (DWORD)context->Ebx; REG32(ESP) = (DWORD)context->Esp; REG32(EBP) = (DWORD)context->Ebp; REG32(ESI) = (DWORD)context->Esi; REG32(EDI) = (DWORD)context->Edi; REG32(EBP) = (DWORD)context->Ebp; SREG(ES) = (WORD)context->SegEs; SREG(CS) = (WORD)context->SegCs; SREG(SS) = (WORD)context->SegSs; SREG(DS) = (WORD)context->SegDs;//ES, CS, SS, DS //ES, CS, SS, DS, FS, GS /* Some programs expect that gs is not a valid selector! */ /* Some programs expect that fs is not a valid selector! */ SREG(FS) = (WORD)context->SegFs == reg_fs ? 0 : context->SegFs; SREG(GS) = (WORD)context->SegGs == reg_gs ? 0 : context->SegGs; i386_load_segment_descriptor(ES); i386_load_segment_descriptor(SS); i386_load_segment_descriptor(DS); i386_load_segment_descriptor(FS); i386_load_segment_descriptor(GS); i386_jmp_far(SREG(CS), context->Eip); m_eip = context->Eip; set_flags(context->EFlags); } unsigned char table[256 * 4 + 2 + 0x8 * 256] = { 0xcf }; unsigned char iret[256] = { 0xcf }; WORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags); #include #pragma comment(lib, "imagehlp.lib") const size_t stack_frame_size = 100; thread_local void* current_stack_frame[100]; thread_local size_t current_stack_frame_size; void capture_stack_trace() { auto process = GetCurrentProcess(); current_stack_frame_size = CaptureStackBackTrace(0, stack_frame_size, current_stack_frame, NULL); } static DWORD wow_calllback_retaddr; static void print_16bit_stack(DWORD ret_addr, DWORD old_ebp) { auto ret_cs = SELECTOROF(ret_addr); auto ret_ip = OFFSETOF(ret_addr); typedef void(*vm_debug_get_entry_point_t)(char *module, char *func, WORD *ordinal, STACK16FRAME *frame); static vm_debug_get_entry_point_t vm_debug_get_entry_point; if (!vm_debug_get_entry_point) { vm_debug_get_entry_point = (vm_debug_get_entry_point_t)GetProcAddress(LoadLibraryA(KRNL386), "vm_debug_get_entry_point"); } if (ret_addr == wow_calllback_retaddr) { fprintf(stderr, "(callback)cs:ip=%04x:%04x bp=%04x\n", ret_cs, ret_ip, old_ebp); } else { auto call_instr = read_byte((DWORD)wine_ldt_copy.base[ret_cs >> 3] + ret_ip - 5); auto call_addr = read_dword((DWORD)wine_ldt_copy.base[ret_cs >> 3] + ret_ip - 4); fprintf(stderr, "cs:ip=%04x:%04x bp=%04x", ret_cs, ret_ip, old_ebp); if (call_instr == 0x9a) /* call far imm */ { fprintf(stderr, "(call %04x:%04x)", SELECTOROF(call_addr), OFFSETOF(call_addr)); if (wine_ldt[SELECTOROF(call_addr) >> __AHSHIFT].HighWord.Bits.Default_Big) { char module[100], func[100]; WORD ordinal = 0; STACK16FRAME frame = { 0 }; frame.module_cs = SELECTOROF(call_addr); frame.entry_ip = OFFSETOF(call_addr) + 7; vm_debug_get_entry_point(module, func, &ordinal, &frame); fprintf(stderr, "\n%s.%d: %s", module, ordinal, func); } } else { fprintf(stderr, " "); } fprintf(stderr, " args("); BOOL farframe = old_ebp & 1; old_ebp &= ~1; for (int i = 0; i < 10; i++) { fprintf(stderr, i ? ",%04x" : "%04x", read_word(SREG_BASE(SS) + old_ebp + (farframe ? 6 : 4) + i * 2)); } fprintf(stderr, ")\n"); } } void walk_16bit_stack(void) { if (V8086_MODE) return; __TRY { auto ebp = REG32(EBP); auto last_cs = SREG(CS); print_16bit_stack(MAKESEGPTR(last_cs, m_eip), ebp); for (int i = 0; i < 60; i++) { auto old_ebp = read_word(SREG_BASE(SS) + ebp); DWORD ret_addr = read_dword(SREG_BASE(SS) + ebp + 2); if ((old_ebp & 1) || ((wine_ldt_copy.flags[SELECTOROF(ret_addr) >> 3] & WINE_LDT_FLAGS_TYPE_MASK) == WINE_LDT_FLAGS_CODE)) { old_ebp |= 1; last_cs = SELECTOROF(ret_addr); } else ret_addr = MAKESEGPTR(last_cs, OFFSETOF(ret_addr)); print_16bit_stack(ret_addr, old_ebp); if (old_ebp == ebp) { break; } ebp = old_ebp & ~1; } } __EXCEPT_PAGE_FAULT { } __ENDTRY } void dump_stack_trace(void) { unsigned int i; SYMBOL_INFO * symbol; HANDLE process; process = GetCurrentProcess(); symbol = (SYMBOL_INFO *)calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1); symbol->MaxNameLen = 255; symbol->SizeOfStruct = sizeof(SYMBOL_INFO); for (i = 0; i < current_stack_frame_size; i++) { IMAGEHLP_LINE line = {}; line.SizeOfStruct = sizeof(IMAGEHLP_LINE); DWORD d = 0; auto success = SymGetLineFromAddr(process, (DWORD64)current_stack_frame[i], &d, &line); SymFromAddr(process, (DWORD64)(current_stack_frame[i]), 0, symbol); IMAGEHLP_MODULE mod_info = { 0 }; mod_info.SizeOfStruct = sizeof(mod_info); const char *imgname = ""; if (SymGetModuleInfo(process, (ULONG_PTR)current_stack_frame[i], &mod_info)) { imgname = strrchr(mod_info.ImageName, '\\'); if (!imgname) imgname = mod_info.ImageName; else imgname = imgname + 1; } 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); if (!strcmp(symbol->Name, "KiUserExceptionDispatcher")) { fprintf(stderr, "\n"); } } free(symbol); current_stack_frame_size = 0; } void dump_all_modules(void) { DWORD cb; HMODULE *hModules = nullptr; HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, GetCurrentProcessId()); if (!EnumProcessModules(hProcess, nullptr, 0, &cb)) goto exit; hModules = new HMODULE[cb / sizeof(HMODULE)]; if (!EnumProcessModules(hProcess, hModules, cb, &cb)) goto exit; for (int i = 0; i < cb / sizeof(HMODULE); i++) { WCHAR name[MAX_PATH]; MODULEINFO module_info; if (GetModuleFileNameExW(hProcess, hModules[i], name, ARRAY_SIZE(name)) && GetModuleInformation(hProcess, hModules[i], &module_info, sizeof(module_info))) { LPWSTR n = wcsrchr(name, L'\\'); fwprintf(stderr, L"%p-%p %ls\n", hModules[i], (ULONG_PTR)hModules[i] + module_info.SizeOfImage, n ? n + 1 : name); } } exit: CloseHandle(hProcess); delete[] hModules; } BOOL WINAPI dump(DWORD CtrlType) { static BOOL dump; DWORD pid = GetCurrentProcessId(); DWORD tid = GetCurrentThreadId(); HANDLE hThreadSnap = INVALID_HANDLE_VALUE; THREADENTRY32 te32; if (dump) { ExitProcess(0); } dump = TRUE; hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (hThreadSnap == INVALID_HANDLE_VALUE) return false; FILE *out = fdopen(dup(fileno(stdout)), "w"); fprintf(out, "dump\n"); te32.dwSize = sizeof(THREADENTRY32); if (!Thread32First(hThreadSnap, &te32)) { CloseHandle(hThreadSnap); return false; } do { if (te32.th32OwnerProcessID == pid) { if (tid != te32.th32ThreadID) { HANDLE threads = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID); SuspendThread(threads); CloseHandle(threads); } } } while (Thread32Next(hThreadSnap, &te32)); CloseHandle(hThreadSnap); /* prevent deadlock */ FILE *err = fdopen(dup(fileno(stderr)), "w"); __TRY { char buffer[256]; #if defined(HAS_I386) UINT64 eip = m_eip; #else UINT64 eip = m_pc - SREG_BASE(CS); #endif UINT8 *oprom = mem + SREG_BASE(CS) + eip; int result; for (int i = 0; i < 8192; i++) { LDT_ENTRY entry = wine_ldt[i]; DWORD base = entry.BaseLow | (entry.HighWord.Bytes.BaseMid << 16); DWORD limit = wine_ldt_get_limit(&entry); if (!base) continue; if ((entry.HighWord.Bytes.Flags1 & 0x0018) == 0x0018) { } else if ((entry.HighWord.Bytes.Flags1 & 0x0010) != 0) continue; fprintf(err, "%04X %p-%p\n", i << 3 | 7, (void*)base, (void*)limit); __TRY { for (int j = 0; j < limit; ) { m_eip = j; m_sreg[CS].selector = i << 3 | 7; i386_load_segment_descriptor(CS); m_operand_size = m_sreg[CS].d; m_xmm_operand_size = 0; m_address_size = m_sreg[CS].d; m_operand_prefix = 0; m_address_prefix = 0; m_operand_size = m_address_size = 0; i386_jmp_far(i << 3 | 7, j); eip = m_eip; oprom = mem + SREG_BASE(CS) + eip; /* call */ if (*oprom == 0x9A &&!m_sreg[CS].d) { WORD addr = *(LPWORD)(oprom + 1); WORD seg = *(LPWORD)(oprom + 3); LPLDT_ENTRY entry = wine_ldt + (seg >> 3); LPBYTE base = (LPBYTE)wine_ldt_get_base(entry); LPBYTE relay = base + addr; relay += 2; /* push bp */ relay += 1; /* push func */ LPVOID func = (LPVOID)relay; relay += 4; STACK16FRAME frame = { 0 }; frame.module_cs = seg; frame.entry_ip = addr + 7; STACK16FRAME *framep = (STACK16FRAME*)(SREG_BASE(SS) + REG32(ESP)); *framep = frame; dynamic_setWOW32Reserved((LPVOID)(SREG(SS) << 16 | REG16(SP))); { typedef void(*vm_debug_get_entry_point_t)(char *module, char *func, WORD *ordinal, STACK16FRAME *frame); static vm_debug_get_entry_point_t vm_debug_get_entry_point; if (!vm_debug_get_entry_point) { vm_debug_get_entry_point = (vm_debug_get_entry_point_t)GetProcAddress(LoadLibraryA(KRNL386), "vm_debug_get_entry_point"); } char module[100], func[100]; WORD ordinal = 0; vm_debug_get_entry_point(module, func, &ordinal, NULL); fprintf(err, "call built-in func %p %s.%d: %s\n", entry, module, ordinal, func); } } result = i386_dasm_one_ex(buffer, eip, oprom, 16);// CPU_DISASSEMBLE_CALL(x86_32);//i386_dasm_one_ex(buffer, 0, (UINT8*)(base + j), 16); fprintf(err, "%04X:%04X %s\n", i << 3 | 7, j, buffer); j += result & 0xFF; } } __EXCEPT_ALL { } __ENDTRY } } __EXCEPT_ALL { } __ENDTRY return FALSE; } static BOOL is_error(PEXCEPTION_RECORD rec) { return rec->ExceptionCode == EXCEPTION_PROTECTED_MODE || rec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION; } LONG NTAPI vm86_vectored_exception_handler(struct _EXCEPTION_POINTERS *ExceptionInfo) { if (is_error(ExceptionInfo->ExceptionRecord)) capture_stack_trace(); return EXCEPTION_CONTINUE_SEARCH; } LPCWSTR(WINAPI*MB_GetString)(int); HANDLE inject_event; CRITICAL_SECTION inject_crit_section; typedef VOID (WINAPI *GetpWin16Lock_t)(SYSLEVEL **lock); GetpWin16Lock_t pGetpWin16Lock; SYSLEVEL *win16_syslevel; HANDLE *vm_idle_event; typedef BOOL(WINAPI *WOWCallback16Ex_t)(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); WOWCallback16Ex_t pWOWCallback16Ex; static WORD tss[0x68 + 65536 / 8] = { 0 }; typedef BOOL (WINAPI *vm_inject_t)(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); __declspec(dllexport) BOOL init_vm86(BOOL is_vm86) { SymInitialize(GetCurrentProcess(), NULL, TRUE); HMODULE user32 = GetModuleHandleW(L"user32.dll"); MB_GetString = (LPCWSTR(WINAPI*)(int))GetProcAddress(user32, "MB_GetString"); if (!krnl386) krnl386 = LoadLibraryA(KRNL386); DOSVM_inport = (DOSVM_inport_t)GetProcAddress(krnl386, "DOSVM_inport"); DOSVM_outport = (DOSVM_outport_t)GetProcAddress(krnl386, "DOSVM_outport"); void(WINAPI *set_vm_inject_cb)(vm_inject_t) = (void(WINAPI *)(vm_inject_t))GetProcAddress(krnl386, "set_vm_inject_cb"); set_vm_inject_cb(vm_inject); inject_event = CreateEventW(NULL, TRUE, FALSE, NULL); InitializeCriticalSection(&inject_crit_section); pGetpWin16Lock = (GetpWin16Lock_t)GetProcAddress(krnl386, "GetpWin16Lock"); pGetpWin16Lock(&win16_syslevel); pWOWCallback16Ex = (WOWCallback16Ex_t)GetProcAddress(krnl386, "K32WOWCallback16Ex"); HANDLE *(WINAPI *get_idle_event)() = (HANDLE *(WINAPI *)())GetProcAddress(krnl386, "get_idle_event"); vm_idle_event = get_idle_event(); //SetConsoleCtrlHandler(dump, TRUE); AddVectoredExceptionHandler(TRUE, vm86_vectored_exception_handler); WORD sel = SELECTOR_AllocBlock(iret, 256, WINE_LDT_FLAGS_CODE); CPU_INIT_CALL(CPU_MODEL); CPU_RESET_CALL(CPU_MODEL); m_cr[0] |= 0x20; //we don't support irq13 for fpe UINT8 *base = 0;//mem; m_idtr.base = (UINT32)(table - base); m_ldtr.limit = 65535; m_ldtr.base = (UINT32)((UINT8*)&wine_ldt - base); m_gdtr.limit = 65535; m_gdtr.base = (UINT32)((UINT8*)&wine_ldt - base); m_CPL = 3; wine_ldt[4].HighWord.Bits.Type = 0x18; wine_ldt[4].HighWord.Bits.Pres = 1; wine_ldt[4].HighWord.Bits.Sys = 1; wine_ldt[4].LimitLow = 0xFFFF; wine_ldt[4].HighWord.Bits.LimitHi = 0xF; wine_ldt[4].HighWord.Bits.Default_Big = 1; wine_ldt[4].HighWord.Bits.Granularity = 1; wine_ldt[4].HighWord.Bits.Dpl = m_CPL; memset(iret, 0xcf, 256); for (int i = 0; i < 256; i++) { *(WORD*)&table[i * 4 + 2] = sel; *(WORD*)&table[i * 4] = i; *(WORD*)&table[i * 4 + 2] = sel; *(WORD*)&table[i * 4] = i; } //PROTECTED MODE for (int i = 0; i < 256; i++) { *(WORD*)&table[i * 8] = i; *(WORD*)&table[i * 8 + 2] = sel; *(BYTE*)&table[i * 8 + 4] = 0x00; *(BYTE*)&table[i * 8 + 5] = 0x66 | 0x80; *(WORD*)&table[i * 8 + 6] = 0; } reg_fs = wine_get_fs(); reg_gs = wine_get_gs(); reg_cs = wine_get_cs(); reg_ss = wine_get_ss(); reg_ds = wine_get_ds(); reg_es = wine_get_es(); wine_ldt[reg_gs >> 3].HighWord.Bits.Type = 0x18; wine_ldt[reg_gs >> 3].HighWord.Bits.Pres = 1; wine_ldt[reg_gs >> 3].HighWord.Bits.Sys = 1; wine_ldt[reg_gs >> 3].LimitLow = 0xFFFF; wine_ldt[reg_gs >> 3].HighWord.Bits.LimitHi = 0xF; wine_ldt[reg_gs >> 3].HighWord.Bits.Default_Big = 1; wine_ldt[reg_gs >> 3].HighWord.Bits.Granularity = 1; wine_ldt[reg_gs >> 3].HighWord.Bits.Dpl = m_CPL; wine_ldt[reg_fs >> 3].HighWord.Bits.Type = 0x18; wine_ldt[reg_fs >> 3].HighWord.Bits.Pres = 1; wine_ldt[reg_fs >> 3].HighWord.Bits.Sys = 1; wine_ldt[reg_fs >> 3].LimitLow = 0xFFFF; wine_ldt[reg_fs >> 3].HighWord.Bits.LimitHi = 0xF; wine_ldt[reg_fs >> 3].HighWord.Bits.Default_Big = 1; wine_ldt[reg_fs >> 3].HighWord.Bits.Granularity = 1; wine_ldt[reg_fs >> 3].HighWord.Bits.Dpl = m_CPL; wine_ldt[reg_cs >> 3].HighWord.Bits.Type = 0x18; wine_ldt[reg_cs >> 3].HighWord.Bits.Pres = 1; wine_ldt[reg_cs >> 3].HighWord.Bits.Sys = 1; wine_ldt[reg_cs >> 3].LimitLow = 0xFFFF; wine_ldt[reg_cs >> 3].HighWord.Bits.LimitHi = 0xFFFF; wine_ldt[reg_cs >> 3].HighWord.Bits.Default_Big = 1; wine_ldt[reg_cs >> 3].HighWord.Bits.Granularity = 1; wine_ldt[reg_cs >> 3].HighWord.Bits.Dpl = m_CPL; wine_ldt[reg_ds >> 3].HighWord.Bits.Type = 0x18; wine_ldt[reg_ds >> 3].HighWord.Bits.Pres = 1; wine_ldt[reg_ds >> 3].HighWord.Bits.Sys = 1; wine_ldt[reg_ds >> 3].LimitLow = 0xFFFF; wine_ldt[reg_ds >> 3].HighWord.Bits.LimitHi = 0xFFFF; wine_ldt[reg_ds >> 3].HighWord.Bits.Default_Big = 1; wine_ldt[reg_ds >> 3].HighWord.Bits.Granularity = 1; wine_ldt[reg_ds >> 3].HighWord.Bits.Dpl = m_CPL; #if defined(HAS_I386) cpu_type = (REG32(EDX) >> 8) & 0x0f; cpu_step = (REG32(EDX) >> 0) & 0x0f; #endif //m_amask = -1; m_a20_mask = -1; if (is_vm86) { m_cr[0] |= 1;//PROTECTED MODE set_flags(0x20000);//V8086_MODE //assert(V8086_MODE); } else { m_cr[0] |= 1;//PROTECTED MODE } /* task state segment */ m_task.flags = 9; m_task.base = (UINT32)tss; m_task.limit = sizeof(tss); *(WORD*)((char*)tss + 0x66) = sizeof(tss) - 65536 / 8; memset((char*)tss + sizeof(tss) - 65536 / 8, 0x00, 65536 / 8); return TRUE; } DWORD mergeReg(DWORD a1, DWORD a2) { return a1 == a2 ? a1 : a2; } BOOL initflag; void vm86main(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, UINT8 *memory_base, pm_interrupt_handler pih ); //__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, void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, bool vm86, void *memory_base, pm_interrupt_handler pih ) { mem = vm86 ? (UINT8*)memory_base : NULL; if (!initflag) initflag = init_vm86(vm86); vm86main(context, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, mem, pih); } DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, bool vm86, void *memory_base, pm_interrupt_handler pih ) { mem = vm86 ? (UINT8*)memory_base : NULL; if (!initflag) initflag = init_vm86(vm86); CONTEXT context; PVOID oldstack = dynamic_getWOW32Reserved(); save_context(&context); //why?? dynamic_setWOW32Reserved(oldstack); context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF; context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF; context.SegCs = target >> 16; context.Eip = target & 0xFFFF;//i386_jmp_far(target >> 16, target & 0xFFFF); vm86main(&context, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, mem, pih); return (context.Eax & 0xffff) | context.Edx << 16; } UINT old_eip = 0; BOOL has_x86_exception_err(WORD num) { switch (num) { case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7: return FALSE; case 8: return TRUE; case 9: return FALSE; case 10:case 11:case 12:case 13:case 14: return TRUE; case 15:case 16: return FALSE; case 17: return TRUE; case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29: return FALSE; case 30: return TRUE; case 31: return FALSE; } return FALSE; } static int disassemble(char *buffer) { int ret; __TRY { #if defined(HAS_I386) UINT64 eip = m_eip; #else UINT64 eip = m_pc - SREG_BASE(CS); #endif UINT8 *oprom = mem + SREG_BASE(CS) + eip; m_operand_size = m_sreg[CS].d; #if defined(HAS_I386) if (m_sreg[CS].d) { ret = CPU_DISASSEMBLE_CALL(x86_32) & 0xff; } else #endif { ret = i386_dasm_one_ex(buffer, m_eip, oprom, 16) & 0xff;//CPU_DISASSEMBLE_CALL(x86_16); } } __EXCEPT_PAGE_FAULT { *buffer = 0; ret = 0; } __ENDTRY return ret; } __declspec(dllexport) int disassemble_debug(char *buffer, UINT8 *oprom, BOOL op_size, UINT64 eip) { int old_m_operand_size = m_operand_size; int old_m_eip = m_eip; int r = 0; __TRY { m_operand_size = op_size; m_eip = eip; #if defined(HAS_I386) if (op_size) { r = CPU_DISASSEMBLE_CALL(x86_32) & 0xff; } else #endif { r = i386_dasm_one_ex(buffer, m_eip, oprom, 16) & 0xff;//CPU_DISASSEMBLE_CALL(x86_16); } } __EXCEPT_PAGE_FAULT { *buffer = 0; r = 0; } __ENDTRY m_eip = old_m_eip; m_operand_size = old_m_operand_size; return r; } void protected_mode_exception_handler(WORD num, const char *name, pm_interrupt_handler pih) { WORD err = has_x86_exception_err(num) ? POP16() : num; WORD ip = POP16(); WORD cs = POP16(); WORD flags = POP16(); m_eip = ip; m_sreg[CS].selector = cs; i386_load_segment_descriptor(CS); if (num == FAULT_GP) { char buffer[256]; int len = disassemble(buffer); if(err == 0x40) { // many startups access the BDA directly static WORD dosmem_0040H = 0; if (!dosmem_0040H) { DWORD(WINAPI *GetProcAddress16)(HMODULE16, LPCSTR); HMODULE16(WINAPI *GetModuleHandle16)(LPCSTR); if (!krnl386) krnl386 = LoadLibraryA(KRNL386); GetProcAddress16 = (DWORD(WINAPI *)(HMODULE16, LPCSTR))GetProcAddress(krnl386, "GetProcAddress16"); GetModuleHandle16 = (HMODULE16(WINAPI *)(LPCSTR))GetProcAddress(krnl386, "GetModuleHandle16"); dosmem_0040H = (WORD)GetProcAddress16(GetModuleHandle16("KERNEL"), (LPCSTR)193); (void(*)(void))GetProcAddress(krnl386, "DOSVM_start_bios_timer")(); } /* allocate segment 40h */ LPLDT_ENTRY entry = wine_ldt + (dosmem_0040H >> __AHSHIFT); wine_ldt[0x40 >> __AHSHIFT] = *entry; wine_ldt_copy.base[0x40 >> __AHSHIFT] = wine_ldt_get_base(entry); wine_ldt_copy.limit[0x40 >> __AHSHIFT] = wine_ldt_get_limit(entry); wine_ldt_copy.flags[0x40 >> __AHSHIFT] = (entry->HighWord.Bits.Type | (entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) | (wine_ldt_copy.flags[0x40 >> __AHSHIFT] & WINE_LDT_FLAGS_ALLOCATED)); i386_jmp_far(cs, ip); return; } HMODULE toolhelp = GetModuleHandleA("toolhelp.dll16"); if (toolhelp) { SEGPTR stack = MAKESEGPTR(SREG(SS), REG16(SP)); FARPROC16 intcb = ((FARPROC16(WINAPI *)(SEGPTR *, SEGPTR, WORD, WORD, WORD))GetProcAddress(toolhelp, "get_intcb"))(&stack, MAKESEGPTR(cs, ip), flags, num, REG16(AX)); if (intcb) { SREG(SS) = SELECTOROF(stack); REG16(SP) = OFFSETOF(stack); i386_jmp_far(SELECTOROF(intcb), OFFSETOF(intcb)); return; } } } DWORD ret = pih(num, MAKESEGPTR(cs, ip)); if (ret) { //TODO:arguments? i386_jmp_far((ret >> 16) & 0xFFFF, ret & 0xFFFF); return; } PSTR dasm = (PSTR)calloc(10000, 1); 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 }; //jump to next instr char buffer[256]; int opsize = disassemble(buffer); memcpy(dasm, buffer, sizeof(buffer)); if ((int)ip + opsize <= 0xFFFF) { ip += opsize; m_eip = ip; m_sreg[CS].selector = cs; i386_load_segment_descriptor(CS); } set_flags(flags); RaiseException(EXCEPTION_PROTECTED_MODE, 0, sizeof(arguments) / sizeof(ULONG_PTR), arguments); } volatile struct { BOOL inject; DWORD vpfn16; DWORD dwFlags; DWORD cbArgs; LPVOID pArgs; volatile LONG *freed; LPDWORD pdwRetCode; } vm_inject_state; BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode) { assert(dwFlags == WCB16_PASCAL); LPVOID args = HeapAlloc(GetProcessHeap(), 0, cbArgs); memcpy(args, pArgs, cbArgs); EnterCriticalSection(&inject_crit_section); try_again: if (TryEnterCriticalSection(&win16_syslevel->crst)) { /* There are no threads running VM. (e.g. call GetMessage) */ /* 16-bit stack is allocated by thread_attach(krnl386/kernel.c) */ BOOL result = pWOWCallback16Ex(vpfn16, dwFlags, cbArgs, args, pdwRetCode); LeaveCriticalSection(&inject_crit_section); LeaveCriticalSection(&win16_syslevel->crst); HeapFree(GetProcessHeap(), 0, args); return result; } volatile LONG freed = 0; { if (vm_inject_state.inject) { /* FIXME: multiple interrupts */ LeaveCriticalSection(&inject_crit_section); return FALSE; } vm_inject_state.vpfn16 = vpfn16; vm_inject_state.dwFlags = dwFlags; vm_inject_state.cbArgs = cbArgs; vm_inject_state.pArgs = args; vm_inject_state.pdwRetCode = pdwRetCode; vm_inject_state.inject = TRUE; vm_inject_state.freed = &freed; ResetEvent(inject_event); } LeaveCriticalSection(&inject_crit_section); HANDLE objs[2] = { inject_event, vm_idle_event }; DWORD ret = WaitForMultipleObjects(2, objs, FALSE, INFINITE); EnterCriticalSection(&inject_crit_section); if (ret == (WAIT_OBJECT_0 + 1) && !freed) { vm_inject_state.inject = FALSE; SetEvent(inject_event); goto try_again; } LeaveCriticalSection(&inject_crit_section); return TRUE; } void vm_inject_call(SEGPTR ret_addr, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, pm_interrupt_handler pih) { CONTEXT context; DWORD ret; static char intstack[4096]; static WORD intstksel = 0; if (!intstksel) intstksel = SELECTOR_AllocBlock(intstack, 4096, WINE_LDT_FLAGS_DATA); save_context(&context); EnterCriticalSection(&inject_crit_section); WORD sp = context.Esp; DWORD ss_base = m_sreg[SS].base; if (m_sreg[SS].d) // don't call int handler on a large stack { ss_base = (DWORD)intstack; sp = 4096; dynamic_setWOW32Reserved((PVOID)MAKESEGPTR(intstksel, 4096)); } { char *stack = (char *)ss_base + sp - vm_inject_state.cbArgs; vm_inject_state.inject = FALSE; memcpy(stack, vm_inject_state.pArgs, vm_inject_state.cbArgs); /* push return address */ stack -= sizeof(SEGPTR); *((SEGPTR *)stack) = ret_addr; vm_inject_state.cbArgs += sizeof(SEGPTR); } HeapFree(GetProcessHeap(), 0, vm_inject_state.pArgs); InterlockedIncrement(vm_inject_state.freed); LeaveCriticalSection(&inject_crit_section); 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); if (vm_inject_state.pdwRetCode) *vm_inject_state.pdwRetCode = ret; load_context(&context); SetEvent(inject_event); } LONG catch_exception(_EXCEPTION_POINTERS *ep, PEXCEPTION_ROUTINE er); #if defined(TEMP_DASM) BOOL dd; __declspec(dllexport) void temp_dasm(BOOL a) { printf("temp_dasm\n"); dd = a; } #endif void raise_vm86_int(int vec) { /* raise EXCEPTION_VM86_INTx */ CONTEXT vcontext = {}; save_context(&vcontext); //dosvm.c exception_handler CONTEXT *ppcontext = &vcontext; ULONG exception_args[1 + sizeof(CONTEXT*) / sizeof(ULONG)] = { (ULONG)vec }; *(CONTEXT**)(&exception_args[1]) = ppcontext; RaiseException(0x80000110 /* EXCEPTION_VM86_INTx */, 0, sizeof(exception_args) / sizeof(ULONG), (ULONG_PTR*)exception_args); load_context(&vcontext); } void vm86main(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, UINT8 *memory_base, pm_interrupt_handler pih ) { DWORD old_frame16 = PtrToUlong(dynamic_getWOW32Reserved()); __TRY { m_task.base = (UINT32)tss - (UINT32)memory_base; if (!initflag) initflag = init_vm86(false); REG32(EAX) = (DWORD)context->Eax; REG32(ECX) = (DWORD)context->Ecx; REG32(EDX) = (DWORD)context->Edx; REG32(EBX) = (DWORD)context->Ebx; REG32(ESP) = (DWORD)context->Esp - cbArgs; REG32(EBP) = (DWORD)context->Ebp; REG32(ESI) = (DWORD)context->Esi; REG32(EDI) = (DWORD)context->Edi; SREG(ES) = (WORD)context->SegEs; SREG(CS) = (WORD)context->SegCs; SREG(SS) = (WORD)context->SegSs; SREG(DS) = (context->EFlags & 0x20000) || (wine_ldt_copy.flags[(WORD)context->SegDs >> 3] & WINE_LDT_FLAGS_ALLOCATED) ? (WORD)context->SegDs : 0; /* Some programs expect that gs is not a valid selector! */ /* Some programs expect that fs is not a valid selector! */ SREG(FS) = (WORD)context->SegFs == reg_fs ? 0 : context->SegFs; SREG(GS) = (WORD)context->SegGs == reg_gs ? 0 : context->SegGs; set_flags(context->EFlags | 0x200/* IF */); i386_load_segment_descriptor(ES); i386_jmp_far(context->SegCs, context->Eip); i386_load_segment_descriptor(SS); i386_load_segment_descriptor(DS); i386_load_segment_descriptor(FS); i386_load_segment_descriptor(GS); m_IOP1 = 1; m_IOP2 = 1; m_eflags |= 0x3000; DWORD ret_addr = 0; if (cbArgs >= 2) { unsigned char *stack = (unsigned char*)i386_translate(SS, REG16(SP), 0); ret_addr = *(DWORD*)stack; if (!wow_calllback_retaddr) wow_calllback_retaddr = ret_addr; } bool isVM86mode = false; while (!m_halted) { if (vm_inject_state.inject && m_IF) { vm_inject_call(ret_addr, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih); } if ((m_eip & 0xFFFF) == (ret_addr & 0xFFFF) && SREG(CS) == ret_addr >> 16) { break;//return VM } bool reg = false; if (m_pc >= (UINT)iret && m_pc <= (UINT)iret + 255) { CONTEXT context; { UINT32 num = m_pc - (UINT32)iret; const char *name = NULL; //win16 handles int 2/4/6/7 switch (num) { case 0:name = "#DE"; break; case 2:name = "int 2h"; break; case 4:name = "#OF"; break; case FAULT_NM:name = "#NM"; break; case FAULT_DF:name = "#DF"; break; case FAULT_TS:name = "#TS"; break; case FAULT_NP:name = "#NP"; break; case FAULT_SS:name = "#SS"; break; case FAULT_GP:name = "#GP"; break; case FAULT_PF:name = "#PF"; break; case FAULT_MF:name = "#MF"; break; } if (name && num != FAULT_MF) { protected_mode_exception_handler(num, name, pih); continue; } WORD return_ip = POP16(); WORD return_cs = POP16(); WORD flags = POP16(); save_context(&context); context.Eip = return_ip; context.SegCs = return_cs; context.EFlags = flags; if ((num == FAULT_MF) && (m_x87_sw & 0x80)) num = 2; // redirect fpu error to nmi dynamic__wine_call_int_handler(&context, num); if (num == FAULT_UD) { if (context.Eip == return_ip && context.SegCs == return_cs) { name = "#UD"; protected_mode_exception_handler(num, name, pih); continue; } } mem = memory_base; load_context(&context); continue; } } if ((void(*)(void))m_eip == from16_reg) { reg = true; } if ((LONG(*)(void))m_eip == __wine_call_from_16 || reg) { unsigned char *stack1 = (unsigned char*)i386_translate(SS, REG16(SP), 0); unsigned char *stack = stack1; /* * (sp+24) word first 16-bit arg * (sp+22) word cs * (sp+20) word ip * (sp+18) word bp * (sp+14) long 32-bit entry point (reused for Win16 mutex recursion count) * (sp+12) word ip of actual entry point (necessary for relay debugging) * (sp+8) long relay (argument conversion) function entry point * (sp+4) long cs of 16-bit entry point * (sp) long ip of 16-bit entry point */ DWORD ip = *(DWORD*)stack; stack += sizeof(DWORD); DWORD cs = *(DWORD*)stack; stack += sizeof(DWORD); DWORD relay = *(DWORD*)stack; stack += sizeof(DWORD); WORD ip2 = *(WORD*)stack; stack += sizeof(WORD); DWORD entry = *(DWORD*)stack; //for debug void *entryf = (void*)entry; stack += sizeof(DWORD); WORD bp = *(WORD*)stack; stack += sizeof(WORD); WORD ip19 = *(WORD*)stack; stack += sizeof(WORD); WORD cs16 = *(WORD*)stack; stack += sizeof(WORD); WORD *args = (WORD*)stack; m_eip = ip; m_sreg[CS].selector = cs; i386_load_segment_descriptor(CS); CHANGE_PC(m_eip); if (relay == (UINT)relay_call_from_16 || 1) { CONTEXT context; STACK32FRAME dummy_stack32 = { 0 }; dummy_stack32.retaddr = ret_addr; dummy_stack32.nb_args = cbArgs; dummy_stack32.frame.Handler = handler; DWORD osp = REG32(ESP); PUSH16(SREG(GS)); PUSH16(SREG(FS)); PUSH16(SREG(ES)); PUSH16(SREG(DS)); PUSH32(REG32(EBP)); PUSH32(REG32(ECX)); PUSH32(REG32(EDX)); PUSH32((DWORD)&dummy_stack32); save_context(&context); STACK16FRAME *oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp); DWORD ooo = (WORD)context.Esp; int off = 0; if (reg) { context.Esp = osp + (SIZE_T)stack - (SIZE_T)stack1 - 4; off = ooo - context.Esp; context.Ebp = (context.Ebp & ~0xffff) | bp; context.Eip = ip19; context.SegCs = cs16; } int fret; LPVOID old; PCONTEXT pctx = NULL; #ifdef _MSC_VER __asm { mov old, esp push cbArgs push old /* target(esp) */ push retaddr /* retaddr */ push ebp push ebx push esi push edi push old_frame16 /* frame16 */ /* set up exception handler */ push handler mov eax, fs:[0] push eax mov dummy_stack32.frame.Next, eax mov fs:[0], esp push cs push 0 mov eax, [oa] mov[eax], esp lea eax, [context] push eax push args push entry call relay_call_from_16 add esp, 12 + 8 mov fret, eax pop dword ptr fs:[0] pop eax jmp skip retaddr: mov pctx, ecx skip: mov esp, old } #else fret = relay_call_from_16((void*)entry, (unsigned char*)args, &context); #endif mem = memory_base; if (pctx) { /* Throw16 */ context = *pctx; reg = TRUE; } if (!reg) { REG32(EAX) = fret; context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF; context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF; oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp); } else { oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp + off); } if (reg) REG32(EAX) = (DWORD)context.Eax; REG32(ECX) = reg ? (DWORD)context.Ecx : (DWORD)oa->ecx; if (reg) REG32(EDX) = (DWORD)context.Edx; else REG32(EDX) = (DWORD)oa->edx; REG32(EBX) = (DWORD)context.Ebx; REG32(ESP) = (DWORD)context.Esp; REG32(EBP) = (DWORD)context.Ebp; REG32(ESI) = (DWORD)context.Esi; REG32(EDI) = (DWORD)context.Edi; SREG(ES) = reg ? (WORD)context.SegEs : (WORD)oa->es; SREG(SS) = (WORD)context.SegSs; SREG(DS) = reg ? (WORD)context.SegDs : (WORD)oa->ds;//ES, CS, SS, DS //ES, CS, SS, DS, FS, GS /* Some programs expect that gs is not a valid selector! */ /* Some programs expect that fs is not a valid selector! */ /* win16 sets 0? */ SREG(FS) = reg ? (WORD)context.SegFs : (WORD)oa->fs; SREG(GS) = reg ? (WORD)context.SegGs : (WORD)oa->gs; if (reg) { if (!(ip19 != context.Eip || cs16 != context.SegCs)) { context.Eip = oa->callfrom_ip; context.SegCs = oa->module_cs; } else { /* CS:IP changed! */ context.Eip = context.Eip; } REG32(ESP) = context.Esp; REG32(EBP) = context.Ebp; } else { REG16(SP) = osp + 18 + 2; REG16(SP) -= (ooo - context.Esp); WORD bpp = REG16(SP); REG16(SP) = context.Esp + 0x2c; REG16(BP) = bp; } SREG(CS) = (WORD)context.SegCs; set_flags(context.EFlags); i386_load_segment_descriptor(ES); i386_load_segment_descriptor(SS); i386_load_segment_descriptor(DS); i386_load_segment_descriptor(FS); i386_load_segment_descriptor(GS); m_eip = context.Eip; i386_jmp_far(SREG(CS), context.Eip); } } //merge_vm86_pending_flags if (V8086_MODE) { if (dynamic_getGdiTebBatch()->vm86_pending & 0x100000)//VIP flag { //dlls/ntdll/signal_i386.c merge_vm86_pending_flags BOOL check_pending = TRUE; /* * In order to prevent a race when SIGUSR2 occurs while * we are returning from exception handler, pending events * will be rechecked after each raised exception. */ while (check_pending && dynamic_getGdiTebBatch()->vm86_pending) { check_pending = FALSE; //x86_thread_data()->vm86_ptr = NULL; /* * If VIF is set, throw exception. * Note that SIGUSR2 may turn VIF flag off so * VIF check must occur only when TEB.vm86_ptr is NULL. */ if (1 || m_VIF) { CONTEXT vcontext = {}; save_context(&vcontext); EXCEPTION_RECORD reca, *rec = &reca; rec->ExceptionCode = 0x80000111; rec->ExceptionFlags = 0; rec->ExceptionRecord = NULL; rec->NumberParameters = 0; rec->ExceptionAddress = (LPVOID)vcontext.Eip; vcontext.EFlags &= ~0x100000; dynamic_getGdiTebBatch()->vm86_pending = 0; //dosvm.c exception_handler CONTEXT *ppcontext = &vcontext; ULONG exception_args[1 + sizeof(CONTEXT*) / sizeof(ULONG)] = {}; *(CONTEXT**)(&exception_args[1]) = ppcontext; RaiseException(0x80000111, 0, sizeof(exception_args) / sizeof(ULONG), (ULONG_PTR*)exception_args); //NTSTATUS a = NtRaiseException(rec, &vcontext, TRUE); load_context(&vcontext); check_pending = TRUE; } //x86_thread_data()->vm86_ptr = vm86; } /* * Merge VIP flags in a signal safe way. This requires * that the following operation compiles into atomic * instruction. */ set_flags(get_flags() | dynamic_getGdiTebBatch()->vm86_pending); } UINT8 *op = mem + SREG_BASE(CS) + m_eip; if (*op == 0xCD)//INT imm8 { UINT8 vec = *(op + 1); m_eip += 2; raise_vm86_int(vec); continue; } else if (*op == 0xCC) { m_eip += 1; raise_vm86_int(3); continue; } else if (*op == 0xF1) { m_eip += 1; raise_vm86_int(1); continue; } } #if defined(ADDR_TRACE) static DWORD oldk = -1; static DWORD old_cs; static DWORD old_eip; WORD k = 0xdead; __try { k = !wine_ldt_copy.base[SELECTOROF(ADDR_TRACE) >> 3] ? 0xdead : *(LPWORD)((LPBYTE)wine_ldt_copy.base[SELECTOROF(ADDR_TRACE) >> 3] + OFFSETOF(ADDR_TRACE)); } __except (EXCEPTION_EXECUTE_HANDLER) { } #endif #ifdef SUPPORT_DISASSEMBLER if (dasm #if defined(TEMP_DASM) || dd #endif #if defined(ADDR_TRACE) || oldk != k #endif ) { char *dbuf = NULL; #if defined(ADDR_TRACE) if (oldk != k) { fprintf(stderr, "CHANGED=========\n%04x:%04x %04x\n", SREG(CS), m_eip, k); } #endif char buffer[256]; #if defined(HAS_I386) UINT64 eip = m_eip; #else UINT64 eip = m_pc - SREG_BASE(CS); #endif UINT8 *oprom = mem + SREG_BASE(CS) + eip; #if defined(ADDR_TRACE) if (oldk != k) { if ((SIZE_T)wine_ldt_copy.base[old_cs >> 3]) { eip = old_eip; oprom = mem + (SIZE_T)wine_ldt_copy.base[old_cs >> 3] + eip; } } oldk = k; #endif fprintf(stderr, "%04x:%04x", SREG(CS), (unsigned)eip); int result; #if defined(HAS_I386) if (m_sreg[CS].d) { result = CPU_DISASSEMBLE_CALL(x86_32); } else #endif { result = i386_dasm_one_ex(buffer, eip, oprom, 16);//CPU_DISASSEMBLE_CALL(x86_16); } int opsize = result & 0xFF; #ifdef DUMP_INSTRMEM fprintf(stderr, "\t"); for (int i = 0; i < opsize; i++) { fprintf(stderr, "%02x", oprom[i]); } #endif fprintf(stderr, "\t%s\n", buffer); #if !defined(TRACE_REGS) DWORD stkptr = m_sreg[SS].base + (m_sreg[SS].d ? REG32(ESP) : REG16(SP)); if (SREG(FS) || SREG(GS)) { fprintf(stderr, "\ EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\ ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\ ES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04x,GS:%04x,\ IP:%04X,stack:%08X,\ EFLAGS:%08X\ \n", REG32(EAX), REG32(ECX), REG32(EDX), REG32(EBX), REG32(ESP), REG32(EBP), REG32(ESI), REG32(EDI), SREG(ES), SREG(CS), SREG(SS), SREG(DS), SREG(FS), SREG(GS), m_eip, read_dword(stkptr), m_eflags); } else { fprintf(stderr, "\ EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\ ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\ ES:%04X,CS:%04X,SS:%04X,DS:%04X,\ IP:%04X,stack:%08X,\ EFLAGS:%08X\ \n", REG32(EAX), REG32(ECX), REG32(EDX), REG32(EBX), REG32(ESP), REG32(EBP), REG32(ESI), REG32(EDI), SREG(ES), SREG(CS), SREG(SS), SREG(DS), m_eip, read_dword(stkptr), m_eflags); } #endif } #endif #if defined(ADDR_TRACE) old_cs = SREG(CS); old_eip = m_eip; #endif #if defined(HAS_I386) m_cycles = 1; CPU_EXECUTE_CALL(i386); #else CPU_EXECUTE_CALL(CPU_MODEL); #endif } save_context(context); } __EXCEPT_CTX (catch_exception, (PEXCEPTION_ROUTINE)handler) { } __ENDTRY } #include #pragma comment(lib, "imagehlp.lib") void print_stack(void) { unsigned int i; void * stack[100]; unsigned short frames; SYMBOL_INFO * symbol; HANDLE process; process = GetCurrentProcess(); SymInitialize(process, NULL, TRUE); frames = CaptureStackBackTrace(0, 100, stack, NULL); symbol = (SYMBOL_INFO *)calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1); symbol->MaxNameLen = 255; symbol->SizeOfStruct = sizeof(SYMBOL_INFO); for (i = 0; i < frames; i++) { SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); fprintf(stderr, "%i: %s+0x%llx - 0x%p\n", frames - i - 1, symbol->Name, (ULONG64)stack[i] - symbol->Address, (LPVOID)symbol->Address); } free(symbol); } static DWORD thread_messagebox(HWND hWnd, LPCSTR text, LPCSTR caption, DWORD flags) { DWORD threadId; //same thread: //MessageBox->WndProc->exception->MessageBox->WndProc->... const char *a[4]; a[0] = (const char*)hWnd; a[1] = text; a[2] = caption; a[3] = (const char*)flags; auto lam = [](void *lpThreadParameter) { DWORD result = 0; __TRY { result = (DWORD)MessageBoxA((HWND)((const char**)lpThreadParameter)[0], ((const char**)lpThreadParameter)[1], ((const char**)lpThreadParameter)[2], (DWORD)((const char**)lpThreadParameter)[3]); } __EXCEPT_ALL { } __ENDTRY return result; }; LPTHREAD_START_ROUTINE routine = lam; HANDLE hThread = CreateThread(NULL, 0, routine, a, 0, &threadId); WaitForSingleObject(hThread, INFINITE); DWORD exitcode; BOOL success = GetExitCodeThread(hThread, &exitcode); CloseHandle(hThread); return exitcode; } LONG catch_exception(_EXCEPTION_POINTERS *ep, PEXCEPTION_ROUTINE winehandler) { PEXCEPTION_RECORD rec = ep->ExceptionRecord; if (rec->ExceptionCode == 0x80000100/*EXCEPTION_WINE_STUB*/) { char buffer[1024]; fprintf(stderr, "stub function %s %s\n", (const char*)rec->ExceptionInformation[0], (const char*)rec->ExceptionInformation[1]); LPCWSTR retry = MB_GetString(3); LPCWSTR cancel = MB_GetString(1); 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); DWORD result = thread_messagebox(NULL, buffer, "fatal error", MB_ICONERROR | MB_RETRYCANCEL); if (result == IDCANCEL) { ExitThread(rec->ExceptionCode); } return EXCEPTION_EXECUTE_HANDLER; } if (!is_error(rec)) return EXCEPTION_CONTINUE_SEARCH; static void(*NE_DumpAllModules)(); if (!NE_DumpAllModules) { NE_DumpAllModules = ((void(*)())GetProcAddress(LoadLibraryA(KRNL386), "NE_DumpAllModules")); } if (NE_DumpAllModules) { __TRY { fprintf(stderr, "=====dump all modules=====\n"); NE_DumpAllModules(); fprintf(stderr, "=====dump all modules=====\n"); } __EXCEPT_ALL { } __ENDTRY } CONTEXT context; save_context(&context); char buf_pre[2048]; buf_pre[0] = '\0'; if (rec->ExceptionCode == EXCEPTION_PROTECTED_MODE) { //ULONG_PTR arguments[6] = { (ULONG_PTR)num, (ULONG_PTR)name, (ULONG_PTR)err, (ULONG_PTR)ip, (ULONG_PTR)cs, (ULONG_PTR)flags }; WORD num = (WORD)rec->ExceptionInformation[0]; const char *name = (const char*)rec->ExceptionInformation[1]; WORD err = (WORD)rec->ExceptionInformation[2]; WORD ip = (WORD)rec->ExceptionInformation[3]; WORD cs = (WORD)rec->ExceptionInformation[4]; WORD flags = (WORD)rec->ExceptionInformation[5]; LPSTR dasm = (LPSTR)rec->ExceptionInformation[6]; sprintf(buf_pre, "Interrupt %02X %s (%04X:%04X) flags %04X err %04X\n%s\n", num, name, cs, ip, flags, err, dasm); free(dasm); } else { snprintf(buf_pre, sizeof(buf_pre), "SEGV"); } char buf[2048]; sprintf(buf, "address=%p\naccess address=%p\n\ VM context\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, address:%08X\n\ EFLAGS:%08X\ \n\n%s\n", rec->ExceptionAddress, (void*)rec->ExceptionInformation[1], REG32(EAX), REG32(ECX), REG32(EDX), REG32(EBX), REG32(ESP), REG32(EBP), REG32(ESI), REG32(EDI), SREG(ES), SREG(CS), SREG(SS), SREG(DS), SREG(FS), SREG(GS), m_eip, m_pc, m_eflags, buf_pre); dump_all_modules(); dump_stack_trace(); walk_16bit_stack(); fprintf(stderr, "\n"); #if 0 print_stack(); #endif fprintf(stderr, "%s", buf); fflush(stderr); #if defined(STACK_DUMP) __try { int i = 0; for (int y = 0; y < 16; y++) { fprintf(stderr, "+%02x", i); for (int x = 0; x < 16; x++) { fprintf(stderr, " %02x", *(LPBYTE)(SREG_BASE(SS) + REG32(ESP) + i)); i++; } fprintf(stderr, "\n"); } i = 0; for (int y = 0; y < 16; y++) { fprintf(stderr, "-%02x", i); for (int x = 0; x < 16; x++) { fprintf(stderr, " %02x", *(LPBYTE)(SREG_BASE(SS) + REG32(ESP) - i)); i++; } fprintf(stderr, "\n"); } fflush(stderr); } __EXCEPT_ALL { } #endif DWORD exitcode = thread_messagebox(NULL, buf, buf_pre, MB_CANCELTRYCONTINUE | MB_ICONERROR); if (exitcode == IDCANCEL) { ExitThread(rec->ExceptionCode); } if (exitcode == IDRETRY) { return EXCEPTION_CONTINUE_EXECUTION; } if (exitcode == IDCONTINUE) { return EXCEPTION_EXECUTE_HANDLER; } return EXCEPTION_EXECUTE_HANDLER; } } ================================================ FILE: vm86/msdos.h ================================================ /* MS-DOS Player for Win32 console Author : Takeda.Toshiya Date : 2009.11.09- */ #ifndef _MSDOS_H_ #define _MSDOS_H_ #ifdef _DEBUG #define __DEBUG #undef _DEBUG #define NDEBUG #endif #include #ifdef __DEBUG #undef __DEBUG #define _DEBUG #undef NDEBUG #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // variable scope of 'for' loop for Microsoft Visual C++ 6.0 #if defined(_MSC_VER) && (_MSC_VER == 1200) #define for if(0);else for #endif // disable warnings for Microsoft Visual C++ 2005 or later #if defined(_MSC_VER) && (_MSC_VER >= 1400) #pragma warning( disable : 4819 ) #pragma warning( disable : 4995 ) #pragma warning( disable : 4996 ) // for MAME i86/i386 #pragma warning( disable : 4018 ) #pragma warning( disable : 4065 ) #pragma warning( disable : 4146 ) #pragma warning( disable : 4244 ) #pragma warning( disable : 4267 ) #endif // endian #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) #if defined(__BYTE_ORDER) && (defined(__LITTLE_ENDIAN) || defined(__BIG_ENDIAN)) #if __BYTE_ORDER == __LITTLE_ENDIAN #define __LITTLE_ENDIAN__ #elif __BYTE_ORDER == __BIG_ENDIAN #define __BIG_ENDIAN__ #endif #elif defined(WORDS_LITTLEENDIAN) #define __LITTLE_ENDIAN__ #elif defined(WORDS_BIGENDIAN) #define __BIG_ENDIAN__ #endif #endif #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) // Microsoft Visual C++ #define __LITTLE_ENDIAN__ #endif // compat for mingw32 headers #ifndef COMMON_LVB_UNDERSCORE #define COMMON_LVB_UNDERSCORE 0x8000 #endif // type definition #ifndef UINT8 typedef unsigned char UINT8; #endif #ifndef UINT16 typedef unsigned short UINT16; #endif #ifndef UINT32 typedef unsigned int UINT32; #endif #ifndef INT8 typedef signed char INT8; #endif #ifndef INT16 typedef signed short INT16; #endif #ifndef INT32 typedef signed int INT32; #endif #pragma pack(1) typedef union { UINT32 dw; struct { #ifdef __BIG_ENDIAN__ UINT16 h, l; #else UINT16 l, h; #endif } w; } PAIR32; #pragma pack() /* ---------------------------------------------------------------------------- FIFO buffer ---------------------------------------------------------------------------- */ #define MAX_FIFO 256 class FIFO { private: int buf[MAX_FIFO]; int cnt, rpt, wpt, stored[3]; public: FIFO() { cnt = rpt = wpt = 0; } void write(int val) { if(cnt < MAX_FIFO) { buf[wpt++] = val; if(wpt >= MAX_FIFO) { wpt = 0; } cnt++; } } int read() { int val = 0; if(cnt) { val = buf[rpt++]; if(rpt >= MAX_FIFO) { rpt = 0; } cnt--; } return val; } int count() { return cnt; } void store_buffer() { stored[0] = cnt; stored[1] = rpt; stored[2] = wpt; } void restore_buffer() { cnt = stored[0]; rpt = stored[1]; wpt = stored[2]; } }; /* ---------------------------------------------------------------------------- MS-DOS virtual machine ---------------------------------------------------------------------------- */ #define VECTOR_TOP 0 #define VECTOR_SIZE 0x400 #define BIOS_TOP (VECTOR_TOP + VECTOR_SIZE) #define BIOS_SIZE 0x100 #define WORK_TOP (BIOS_TOP + BIOS_SIZE) #define WORK_SIZE 0x300 #define IRET_TOP (WORK_TOP + WORK_SIZE) #define IRET_SIZE 0x100 #define DOS_INFO_TOP (IRET_TOP + IRET_SIZE) #define DOS_INFO_BASE (DOS_INFO_TOP + 24) #define DOS_INFO_SIZE 0x100 #define DPB_TOP (DOS_INFO_TOP + DOS_INFO_SIZE) #define DPB_SIZE 0x400 #define FILE_TABLE_TOP (DPB_TOP + DPB_SIZE) #define FILE_TABLE_SIZE 0x10 #define CDS_TOP (FILE_TABLE_TOP + FILE_TABLE_SIZE) #define CDS_SIZE 0x80 #define FCB_TABLE_TOP (CDS_TOP + CDS_SIZE) #define FCB_TABLE_SIZE 0x10 #define DBCS_TOP (FCB_TABLE_TOP + FCB_TABLE_SIZE) #define DBCS_TABLE (DBCS_TOP + 2) #define DBCS_SIZE 0x10 #define MEMORY_TOP (DBCS_TOP + DBCS_SIZE) #define MEMORY_END 0xb8000 #define TEXT_VRAM_TOP 0xb8000 #define UMB_TOP 0xc0000 #define UMB_END 0xf8000 #define SHADOW_BUF_TOP 0xf8000 //#define ENV_SIZE 0x800 #define ENV_SIZE 0x2000 #define PSP_SIZE 0x100 #define MAX_FILES 128 #define MAX_PROCESS 16 #define MAX_DTAINFO 32 #define LFN_DTA_LADDR 0x10FFF0 #define DUP_STDIN 29 #define DUP_STDOUT 30 #define DUP_STDERR 31 //#define SUPPORT_AUX_PRN #pragma pack(1) typedef struct { UINT8 mz; UINT16 psp; UINT16 paragraphs; UINT8 reserved[3]; char prog_name[8]; } mcb_t; #pragma pack() #pragma pack(1) typedef struct { UINT16 env_seg; PAIR32 cmd_line; PAIR32 fcb1; PAIR32 fcb2; UINT16 sp; UINT16 ss; UINT16 ip; UINT16 cs; } param_block_t; #pragma pack() #pragma pack(1) typedef struct { UINT8 len; char cmd[127]; } cmd_line_t; #pragma pack() #pragma pack(1) typedef struct { UINT8 exit[2]; UINT16 first_mcb; UINT8 reserved_1; UINT8 far_call; PAIR32 cpm_entry; PAIR32 int_22h; PAIR32 int_23h; PAIR32 int_24h; UINT16 parent_psp; UINT8 file_table[20]; UINT16 env_seg; PAIR32 stack; UINT8 reserved_2[30]; UINT8 service[3]; UINT8 reserved_3[2]; UINT8 ex_fcb[7]; UINT8 fcb1[16]; UINT8 fcb2[20]; UINT8 buffer[128]; } psp_t; #pragma pack() #pragma pack(1) typedef struct { UINT16 mz; UINT16 extra_bytes; UINT16 pages; UINT16 relocations; UINT16 header_size; UINT16 min_alloc; UINT16 max_alloc; UINT16 init_ss; UINT16 init_sp; UINT16 check_sum; UINT16 init_ip; UINT16 init_cs; UINT16 relocation_table; UINT16 overlay; } exe_header_t; #pragma pack() #pragma pack(1) typedef struct { UINT8 flag; UINT8 reserved[5]; UINT8 attribute; } ext_fcb_t; #pragma pack() #pragma pack(1) typedef struct { UINT8 drive; UINT8 file_name[8 + 3]; UINT16 current_block; UINT16 record_size; UINT32 file_size; UINT16 date; UINT16 time; UINT8 reserved[8]; UINT8 cur_record; UINT32 rand_record; } fcb_t; #pragma pack() #pragma pack(1) typedef struct { UINT8 drive; UINT8 file_name[8 + 3]; UINT8 attribute; UINT8 nt_res; UINT8 create_time_ms; UINT16 creation_time; UINT16 creation_date; UINT16 last_access_date; UINT16 cluster_hi; UINT16 last_write_time; UINT16 last_write_date; UINT16 cluster_lo; UINT32 file_size; } find_fcb_t; #pragma pack() #pragma pack(1) typedef struct { UINT8 reserved[21]; UINT8 attrib; UINT16 time; UINT16 date; UINT32 size; char name[13]; } find_t; #pragma pack() #pragma pack(1) typedef struct { UINT32 attrib; PAIR32 ctime_lo; PAIR32 ctime_hi; PAIR32 atime_lo; PAIR32 atime_hi; PAIR32 mtime_lo; PAIR32 mtime_hi; UINT32 size_hi; UINT32 size_lo; UINT8 reserved[8]; char full_name[260]; char short_name[14]; } find_lfn_t; #pragma pack() #pragma pack(1) typedef struct { UINT16 info_level; UINT32 serial_number; char volume_label[11]; char file_system[8]; } drive_info_t; #pragma pack() #pragma pack(1) typedef struct { UINT16 size_of_structure; UINT16 structure_version; UINT32 sectors_per_cluster; UINT32 bytes_per_sector; UINT32 available_clusters_on_drive; UINT32 total_clusters_on_drive; UINT32 available_sectors_on_drive; UINT32 total_sectors_on_drive; UINT32 available_allocation_units; UINT32 total_allocation_units; UINT8 reserved[8]; } ext_space_info_t; #pragma pack() #pragma pack(1) typedef struct { UINT8 drive_num; UINT8 unit_num; UINT16 bytes_per_sector; UINT8 highest_sector_num; UINT8 shift_count; UINT16 reserved_sectors; UINT8 fat_num; UINT16 root_entries; UINT16 first_data_sector; UINT16 highest_cluster_num; UINT16 sectors_per_fat; UINT16 first_dir_sector; UINT32 device_driver_header; UINT8 media_type; UINT8 drive_accessed; UINT16 next_dpb_ofs; UINT16 next_dpb_seg; UINT16 first_free_cluster; UINT16 free_clusters; } dpb_t; #pragma pack() #pragma pack(1) typedef struct { char path_name[67]; UINT16 drive_attrib; UINT8 physical_drive_number; } cds_t; #pragma pack() #pragma pack(1) typedef struct { UINT8 reserved_1[22]; // -24 UINT16 first_mcb; // -2 PAIR32 first_dpb; // +0 PAIR32 first_sft; // +0 UINT8 reserved_2[14]; PAIR32 cds; // +22 PAIR32 fcb_table; // +26 UINT8 reserved_3[3]; UINT8 last_drive; // +33 UINT8 reserved_4[29]; UINT16 buffers_x; // +63 UINT16 buffers_y; // +65 UINT8 boot_drive; // +67 UINT8 i386_or_later; // +68 UINT16 ext_mem_size; // +69 UINT8 reserved_5[25]; UINT8 dos_flag; // +96 } dos_info_t; #pragma pack() typedef struct { char path[MAX_PATH]; int valid; int id; int atty; int mode; UINT16 info; UINT16 psp; } file_handler_t; static const struct { int mode; int in; int out; } file_mode[] = { { _O_RDONLY | _O_BINARY, 1, 0 }, { _O_WRONLY | _O_BINARY, 0, 1 }, { _O_RDWR | _O_BINARY, 1, 1 }, }; typedef struct { UINT16 psp; char module_dir[MAX_PATH]; PAIR32 dta; UINT8 switchar; UINT8 verify; int max_files; UINT8 allowable_mask; UINT8 required_mask; char volume_label[MAX_PATH]; bool parent_int_10h_feh_called; bool parent_int_10h_ffh_called; } process_t; typedef struct { UINT16 psp; UINT32 dta; HANDLE find_handle; } dtainfo_t; UINT8 major_version = 7; UINT8 minor_version = 10; UINT16 first_mcb; UINT16 current_psp; int retval = 0; UINT16 error_code = 0; file_handler_t file_handler[MAX_FILES]; UINT8 file_buffer[0x100000]; process_t process[MAX_PROCESS]; dtainfo_t dtalist[MAX_DTAINFO]; UINT16 malloc_strategy = 0; UINT8 umb_linked = 0; void msdos_syscall(unsigned num); int msdos_init(int argc, char *argv[], char *envp[], int standard_env); void msdos_finish(); // console #define SCR_BUF_SIZE 1200 #define SET_RECT(rect, l, t, r, b) { \ rect.Left = l; \ rect.Top = t; \ rect.Right = r; \ rect.Bottom = b; \ } HANDLE hStdin; HANDLE hStdout; CHAR_INFO scr_buf[SCR_BUF_SIZE][80]; char scr_char[80 * 25]; WORD scr_attr[80 * 25]; COORD scr_buf_size; COORD scr_buf_pos; int scr_width, scr_height; bool restore_console_on_exit = false; bool cursor_moved; FIFO *key_buf_char; FIFO *key_buf_scan; int key_input = 0; UINT32 key_code = 0; int active_code_page; int system_code_page; UINT32 text_vram_top_address = TEXT_VRAM_TOP; UINT32 text_vram_end_address = TEXT_VRAM_TOP + 4000; UINT32 shadow_buffer_top_address = SHADOW_BUF_TOP; UINT32 shadow_buffer_end_address = SHADOW_BUF_TOP + 4000; bool int_10h_feh_called = false; bool int_10h_ffh_called = false; /* ---------------------------------------------------------------------------- PC/AT hardware emulation ---------------------------------------------------------------------------- */ void hardware_init(); void hardware_finish(); void hardware_run(); void hardware_update(); // memory #define MAX_MEM INT_MAX//0x1000000 //UINT8 mem[MAX_MEM + 3]; UINT8 *mem = 0; // pic typedef struct { UINT8 imr, isr, irr, prio; UINT8 icw1, icw2, icw3, icw4; UINT8 ocw3; UINT8 icw2_r, icw3_r, icw4_r; } pic_t; pic_t pic[2]; int pic_req_chip, pic_req_level; UINT8 pic_req_bit; void pic_init(); void pic_write(int c, UINT32 addr, UINT8 data); UINT8 pic_read(int c, UINT32 addr); void pic_req(int c, int level, int signal); int pic_ack(); void pic_update(); // pit #define PIT_ALWAYS_RUNNING typedef struct { INT32 count; UINT16 latch; UINT16 count_reg; UINT8 ctrl_reg; int count_latched; int low_read, high_read; int low_write, high_write; int mode; int status_latched; UINT8 status; // constant clock UINT32 expired_time; UINT32 prev_time; } pit_t; pit_t pit[3]; #ifndef PIT_ALWAYS_RUNNING int pit_active; #endif void pit_init(); void pit_write(int ch, UINT8 val); UINT8 pit_read(int ch); int pit_run(int ch, UINT32 cur_time); void pit_latch_count(int ch); int pit_get_expired_time(int ch); UINT8 system_port = 0; // cmos UINT8 cmos[128]; UINT8 cmos_addr; void cmos_init(); void cmos_write(int addr, UINT8 val); UINT8 cmos_read(int addr); // kbd (a20) UINT8 kbd_data; UINT8 kbd_status; UINT8 kbd_command; void kbd_init(); UINT8 kbd_read_data(); void kbd_write_data(UINT8 val); UINT8 kbd_read_status(); void kbd_write_command(UINT8 val); #endif ================================================ FILE: vm86/vm86.def ================================================ LIBRARY vm86.dll EXPORTS wine_call_to_16_regs_vm86 wine_call_to_16_vm86 ================================================ FILE: vm86/vm86.vcxproj ================================================  Debug Win32 Release Win32 {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C} Win32Proj vm86 10.0.17134.0 DynamicLibrary true v141 MultiByte DynamicLibrary false v141 true Unicode true false Level3 Disabled USE_COMPILER_EXCEPTIONS;__i386__;WIN32;_DEBUG;_WINDOWS;_USRDLL;VM86_EXPORTS;_CONSOLE;HAS_I486;SUPPORT_FPU;NtCurrentTeb=NtCurrentTeb__;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true odbc32.lib;odbccp32.lib;winmm.lib;psapi.lib;$(OutDir)libwine.lib;user32.lib vm86.def Level3 MaxSpeed true true USE_COMPILER_EXCEPTIONS;__i386__;WIN32;NDEBUG;_WINDOWS;_USRDLL;VM86_EXPORTS;HAS_I486;SUPPORT_FPU;NtCurrentTeb=NtCurrentTeb__;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true vm86.def odbc32.lib;odbccp32.lib;winmm.lib;psapi.lib;$(OutDir)libwine.lib;user32.lib ================================================ FILE: vm86/vm86.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: whpxvm/CMakeLists.txt ================================================ add_library(whpxvm SHARED whpxvm.c) include_directories(../wine) add_definitions(-D__i386__ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN=) target_link_libraries(whpxvm libwine) set_target_properties(whpxvm PROPERTIES PREFIX "") ================================================ FILE: whpxvm/whpxvm.c ================================================ #include "whpxvm.h" #include "../krnl386/kernel16_private.h" #include "wownt32.h" BOOL initflag; UINT8 *mem; #define KRNL386 "krnl386.exe16" BOOL is_single_step = FALSE; HRESULT(WINAPI *pWHvCreatePartition)(WHV_PARTITION_HANDLE *Partition); HRESULT(WINAPI *pWHvSetupPartition)(WHV_PARTITION_HANDLE Partition); HRESULT(WINAPI *pWHvMapGpaRange)( _In_ WHV_PARTITION_HANDLE Partition, _In_ VOID* SourceAddress, _In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress, _In_ UINT64 SizeInBytes, _In_ WHV_MAP_GPA_RANGE_FLAGS Flags ); HRESULT(WINAPI *pWHvUnmapGpaRange)( _In_ WHV_PARTITION_HANDLE Partition, _In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress, _In_ UINT64 SizeInBytes ); HRESULT(WINAPI *pWHvCreateVirtualProcessor)( _In_ WHV_PARTITION_HANDLE Partition, _In_ UINT32 VpIndex, _In_ UINT32 Flags ); HRESULT(WINAPI *pWHvGetVirtualProcessorRegisters)( _In_ WHV_PARTITION_HANDLE Partition, _In_ UINT32 VpIndex, _In_reads_(RegisterCount) const WHV_REGISTER_NAME* RegisterNames, _In_ UINT32 RegisterCount, _Out_writes_(RegisterCount) WHV_REGISTER_VALUE* RegisterValues ); HRESULT(WINAPI *pWHvSetVirtualProcessorRegisters)( _In_ WHV_PARTITION_HANDLE Partition, _In_ UINT32 VpIndex, _In_reads_(RegisterCount) const WHV_REGISTER_NAME* RegisterNames, _In_ UINT32 RegisterCount, _In_reads_(RegisterCount) const WHV_REGISTER_VALUE* RegisterValues ); HRESULT(WINAPI *pWHvSetPartitionProperty)( _In_ WHV_PARTITION_HANDLE Partition, _In_ WHV_PARTITION_PROPERTY_CODE PropertyCode, _In_reads_bytes_(PropertyBufferSizeInBytes) const VOID* PropertyBuffer, _In_ UINT32 PropertyBufferSizeInBytes ); HRESULT(WINAPI *pWHvRunVirtualProcessor)( _In_ WHV_PARTITION_HANDLE Partition, _In_ UINT32 VpIndex, _Out_writes_bytes_(ExitContextSizeInBytes) VOID* ExitContext, _In_ UINT32 ExitContextSizeInBytes ); HRESULT(WINAPI *pWHvCancelRunVirtualProcessor)( _In_ WHV_PARTITION_HANDLE Partition, _In_ UINT32 VpIndex, _In_ UINT32 Flags ); DWORD WINAPI panic_msgbox(LPVOID data) { MessageBoxA(NULL, (LPCSTR)data, "Hypervisor error", MB_OK | MB_ICONERROR); HeapFree(GetProcessHeap(), 0, data); return 0; } #define PANIC_HRESULT(msg, hresult) panic_hresult(msg, hresult, __FUNCTION__, __LINE__) #ifdef _MSC_VER #define PANIC(msg, ...) panic("%s:%d\n" msg, __FUNCTION__, __LINE__, __VA_ARGS__) #else #define PANIC(msg, ...) panic("%s:%d\n" msg, __FUNCTION__, __LINE__ __VA_OPT__(,) __VA_ARGS__) #endif /* _Noreturn */ void panic(const char *msg, ...) { LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512); DWORD threadId; va_list arg; va_start(arg, msg); vsnprintf(buffer, 512, msg, arg); va_end(arg); HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId); WaitForSingleObject(hThread, INFINITE); ExitThread(1); return; } /* _Noreturn */ void panic_hresult(const char *msg, HRESULT result, const char *func, int line) { LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512); DWORD threadId; snprintf(buffer, 512, "%s:%d\n%s HRESULT=%08x", func, line, msg, result); HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId); WaitForSingleObject(hThread, INFINITE); ExitThread(1); return; } static HMODULE krnl386 = 0; PVOID dynamic_setWOW32Reserved(PVOID w) { static PVOID(*setWOW32Reserved)(PVOID); if (!setWOW32Reserved) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); setWOW32Reserved = (PVOID(*)(PVOID))GetProcAddress(krnl386, "setWOW32Reserved"); } return setWOW32Reserved(w); } PVOID dynamic_getWOW32Reserved() { static PVOID(*getWOW32Reserved)(); if (!getWOW32Reserved) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); getWOW32Reserved = (PVOID(*)())GetProcAddress(krnl386, "getWOW32Reserved"); } return getWOW32Reserved(); } WINE_VM86_TEB_INFO *dynamic_getGdiTebBatch() { static WINE_VM86_TEB_INFO*(*getGdiTebBatch)(); if (!getGdiTebBatch) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); getGdiTebBatch = (WINE_VM86_TEB_INFO*(*)())GetProcAddress(krnl386, "getGdiTebBatch"); } return getGdiTebBatch(); } void dynamic__wine_call_int_handler(CONTEXT *context, BYTE intnum) { static void(*__wine_call_int_handler)(CONTEXT *context, BYTE intnum); if (!__wine_call_int_handler) { if (!krnl386) krnl386 = LoadLibraryA(KRNL386); __wine_call_int_handler = (void(*)(CONTEXT *context, BYTE intnum))GetProcAddress(krnl386, "__wine_call_int_handler"); } __wine_call_int_handler(context, intnum); } /*********************************************************************** * SELECTOR_SetEntries * * Set the LDT entries for an array of selectors. */ static BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags) { LDT_ENTRY entry; WORD i, count; wine_ldt_set_base(&entry, base); wine_ldt_set_limit(&entry, size - 1); wine_ldt_set_flags(&entry, flags); count = (size + 0xffff) / 0x10000; for (i = 0; i < count; i++) { if (wine_ldt_set_entry(sel + (i << 3), &entry) < 0) return FALSE; wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000); /* yep, Windows sets limit like that, not 64K sel units */ wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000); } return TRUE; } void wine_ldt_free_entries(unsigned short sel, int count); /*********************************************************************** * SELECTOR_AllocBlock * * Allocate selectors for a block of linear memory. */ WORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags) { WORD sel, count; if (!size) return 0; count = (size + 0xffff) / 0x10000; if ((sel = wine_ldt_alloc_entries(count))) { if (SELECTOR_SetEntries(sel, base, size, flags)) return sel; wine_ldt_free_entries(sel, count); sel = 0; } return sel; } __declspec(dllimport) LDT_ENTRY wine_ldt[8192]; LDT_ENTRY gdt[]; void load_seg(WHV_X64_SEGMENT_REGISTER *segment, WORD sel) { const LDT_ENTRY *entry = (sel & 0x4 || (sel >> 3) >= 512) ? wine_ldt : gdt; segment->Selector = sel; segment->Base = (UINT64)wine_ldt_get_base(entry + (sel >> 3)); segment->Limit = (UINT64)wine_ldt_get_limit(entry + (sel >> 3)); segment->Attributes = 0; segment->SegmentType = entry[sel >> 3].HighWord.Bits.Type; segment->Present = entry[sel >> 3].HighWord.Bits.Pres; segment->Default = entry[sel >> 3].HighWord.Bits.Default_Big; segment->DescriptorPrivilegeLevel = entry[sel >> 3].HighWord.Bits.Dpl; segment->Granularity = entry[sel >> 3].HighWord.Bits.Granularity; segment->NonSystemSegment = entry[sel >> 3].HighWord.Bits.Type >> 4; if (!sel || !segment->SegmentType || !segment->Present) segment->Attributes = 0; } void set_eflags(struct whpx_vcpu_state *state, DWORD eflags) { state->rflags.Reg32 = eflags | 2 | 0x3000 | (is_single_step ? 0x100 : 0) | 0x200; } void load_context_to_state(CONTEXT *context, struct whpx_vcpu_state *state) { DWORD bytes; load_seg(get_gs(state), (WORD)context->SegGs); load_seg(get_fs(state), (WORD)context->SegFs); load_seg(get_es(state), (WORD)context->SegEs); load_seg(get_ds(state), (WORD)context->SegDs); load_seg(get_cs(state), (WORD)context->SegCs); load_seg(get_ss(state), (WORD)context->SegSs); set_edi(state, context->Edi); set_esi(state, context->Esi); set_ebx(state, context->Ebx); set_edx(state, context->Edx); set_ecx(state, context->Ecx); set_eax(state, context->Eax); set_ebp(state, context->Ebp); set_eip(state, context->Eip); set_eflags(state, context->EFlags); set_esp(state, context->Esp); } void save_context_from_state(CONTEXT *context, struct whpx_vcpu_state *state) { context->SegGs = get_seg_selector(get_gs(state)); context->SegFs = get_seg_selector(get_fs(state)); context->SegEs = get_seg_selector(get_es(state)); context->SegDs = get_seg_selector(get_ds(state)); context->SegCs = get_seg_selector(get_cs(state)); context->SegSs = get_seg_selector(get_ss(state)); context->Edi = get_edi(state); context->Esi = get_esi(state); context->Ebx = get_ebx(state); context->Edx = get_edx(state); context->Ecx = get_ecx(state); context->Eax = get_eax(state); context->Ebp = get_ebp(state); context->Eip = get_eip(state); context->EFlags = get_eflags(state) & ~2; context->Esp = get_esp(state); dynamic_setWOW32Reserved((PVOID)(get_seg_selector(get_ss(state)) << 16 | get_sp(state))); } #include typedef enum { INT_GATE_TASK = 5, INT_GATE_INT16 = 6, INT_GATE_TRAP16 = 7, INT_GATE_INT32 = 0xE, INT_GATE_TRAP32 = 0xF, } interrupt_gate_type; typedef struct { WORD offset_low; WORD selector; BYTE reserved; union { struct { BYTE type : 4 /* INT_GATE_TASK */, S : 1, DPL : 2, P : 1; }; BYTE data; }; WORD offset_high; } interrupt_gate; _STATIC_ASSERT(sizeof(interrupt_gate) == 8); #include LPVOID trap_int; #ifdef _MSC_VER __declspec(align(4096)) #endif interrupt_gate idt[256]; #ifdef __GNUC__ __attribute__ ((aligned(4096))) #endif ; #ifdef _MSC_VER __declspec(align(4096)) #endif LDT_ENTRY gdt[512] = { 0 }; #ifdef __GNUC__ __attribute__ ((aligned(4096))) #endif ; WORD seg_cs; WORD seg_ds; typedef DWORD (*DOSVM_inport_t)(int port, int size, CONTEXT *ctx); typedef void (*DOSVM_outport_t)(int port, int size, DWORD value, CONTEXT *ctx); DOSVM_inport_t DOSVM_inport; DOSVM_outport_t DOSVM_outport; HANDLE inject_event; CRITICAL_SECTION inject_crit_section; typedef VOID (WINAPI *GetpWin16Lock_t)(SYSLEVEL **lock); GetpWin16Lock_t pGetpWin16Lock; SYSLEVEL *win16_syslevel; typedef BOOL(WINAPI *WOWCallback16Ex_t)(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); WOWCallback16Ex_t pWOWCallback16Ex; typedef BOOL (WINAPI *vm_inject_t)(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode); __declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih); static CRITICAL_SECTION running_critical_section; static WHV_PARTITION_HANDLE partition; static BOOL load_func(HMODULE hmod, LPCSTR fname, LPVOID *dest) { *dest = GetProcAddress(hmod, fname); return *dest != NULL; } static BOOL load_funcs(void) { HMODULE hmod = LoadLibraryW(L"WinHvPlatform.dll"); BOOL result = TRUE; result = result && load_func(hmod, "WHvCreatePartition", (LPVOID*)&pWHvCreatePartition); result = result && load_func(hmod, "WHvSetupPartition", (LPVOID*)&pWHvSetupPartition); result = result && load_func(hmod, "WHvMapGpaRange", (LPVOID*)&pWHvMapGpaRange); result = result && load_func(hmod, "WHvUnmapGpaRange", (LPVOID*)&pWHvUnmapGpaRange); result = result && load_func(hmod, "WHvCreateVirtualProcessor", (LPVOID*)&pWHvCreateVirtualProcessor); result = result && load_func(hmod, "WHvGetVirtualProcessorRegisters", (LPVOID*)&pWHvGetVirtualProcessorRegisters); result = result && load_func(hmod, "WHvSetVirtualProcessorRegisters", (LPVOID*)&pWHvSetVirtualProcessorRegisters); result = result && load_func(hmod, "WHvSetPartitionProperty", (LPVOID*)&pWHvSetPartitionProperty); result = result && load_func(hmod, "WHvRunVirtualProcessor", (LPVOID*)&pWHvRunVirtualProcessor); result = result && load_func(hmod, "WHvCancelRunVirtualProcessor", (LPVOID*)&pWHvCancelRunVirtualProcessor); return result; } BOOL init_vm86(BOOL vm86) { if (!load_funcs()) { PANIC("Failed to load WinHvPlatform.dll"); return FALSE; } HRESULT result; WHV_PARTITION_PROPERTY prop; InitializeCriticalSection(&running_critical_section); #ifdef _MSC_VER __asm { mov seg_cs, cs mov seg_ds, ds } #else seg_cs = wine_get_cs(); seg_ds = wine_get_ds(); #endif if (FAILED(result = pWHvCreatePartition(&partition))) { PANIC_HRESULT("WHvCreatePartition", result); return FALSE; } prop.ProcessorCount = 1; if (FAILED(result = pWHvSetPartitionProperty(partition, WHvPartitionPropertyCodeProcessorCount, &prop, sizeof(prop)))) { PANIC_HRESULT("WHvSetPartitionProperty", result); return FALSE; } if (FAILED(result = pWHvSetupPartition(partition))) { PANIC_HRESULT("WHvSetupPartition", result); return FALSE; } if (FAILED(result = pWHvCreateVirtualProcessor(partition, 0, 0))) { PANIC_HRESULT("WHvCreateVirtualProcessor", result); return FALSE; } struct whpx_vcpu_state state; if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values))) { PANIC_HRESULT("WHvGetVirtualProcessorRegisters", result); return FALSE; } /* setup initial states */ state.gdtr.Table.Base = (UINT64)gdt; state.gdtr.Table.Limit = 0x7ff; trap_int = VirtualAlloc(NULL, 0x10000, MEM_COMMIT, PAGE_READWRITE); DWORD trap_addr = (DWORD)trap_int; gdt[1].BaseLow = trap_addr & 0xffff; gdt[1].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff; gdt[1].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff; gdt[1].LimitLow = 0xffff; gdt[1].HighWord.Bytes.Flags1 = 0x9b; gdt[1].HighWord.Bytes.Flags2 = 0x40; gdt[2].BaseLow = trap_addr & 0xffff; gdt[2].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff; gdt[2].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff; gdt[2].LimitLow = 0xffff; gdt[2].HighWord.Bytes.Flags1 = 0x93; gdt[2].HighWord.Bytes.Flags2 = 0x40; GetThreadSelectorEntry(GetCurrentThread(), seg_cs, gdt + (seg_cs >> 3)); GetThreadSelectorEntry(GetCurrentThread(), seg_ds, gdt + (seg_ds >> 3)); state.ldtr.Segment.Selector = 0x18; state.ldtr.Segment.Base = (UINT64)&wine_ldt[0]; state.ldtr.Segment.Limit = 65535; UINT32 *tss = (UINT32 *)gdt + 0x200; state.tr.Segment.Selector = 0x18; state.tr.Segment.Base = (UINT64)tss; state.tr.Segment.Limit = 0x64; state.tr.Segment.Attributes = 0x8b; tss[1] = 0x10000; // SP0 tss[2] = 0x10; // SS0 state.idtr.Table.Limit = 0x8 * 256 - 1; state.idtr.Table.Base = (SIZE_T)&idt[0]; state.cr0.Reg32 |= 1; state.rflags.Reg32 |= 0x200; for (int i = 0; i < 256; i++) { idt[i].DPL = 3; idt[i].type = INT_GATE_INT32; idt[i].selector = 0x0b; idt[i].P = 1; idt[i].offset_low = i; idt[i].offset_high = 0; } memset(trap_int, 0xF4, 256); /* hlt */ ((char *)trap_int)[256] = 0xcf; /* iret */ if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values))) { PANIC_HRESULT("WHvSetVirtualProcessorRegisters", result); return FALSE; } if (!krnl386) krnl386 = LoadLibraryA(KRNL386); pWOWCallback16Ex = (WOWCallback16Ex_t)GetProcAddress(krnl386, "K32WOWCallback16Ex"); void(WINAPI *set_vm_inject_cb)(vm_inject_t) = (void(WINAPI *)(vm_inject_t))GetProcAddress(krnl386, "set_vm_inject_cb"); set_vm_inject_cb(vm_inject); inject_event = CreateEventW(NULL, TRUE, FALSE, NULL); InitializeCriticalSection(&inject_crit_section); pGetpWin16Lock = (GetpWin16Lock_t)GetProcAddress(krnl386, "GetpWin16Lock"); pGetpWin16Lock(&win16_syslevel); DOSVM_inport = (DOSVM_inport_t)GetProcAddress(krnl386, "DOSVM_inport"); DOSVM_outport = (DOSVM_outport_t)GetProcAddress(krnl386, "DOSVM_outport"); return TRUE; } void PUSH16(struct whpx_vcpu_state *state, WORD val) { if (state->ss.Segment.Default) { state->rsp.Reg32 -= 2; unsigned char *stack = (unsigned char*)(state->ss.Segment.Base + state->rsp.Reg32); *(LPWORD)stack = val; } else { state->rsp.Reg16 -= 2; unsigned char *stack = (unsigned char*)(state->ss.Segment.Base + state->rsp.Reg16); *(LPWORD)stack = val; } } void PUSH32(struct whpx_vcpu_state *state, DWORD val) { if (state->ss.Segment.Default) { state->rsp.Reg32 -= 4; unsigned char *stack = (unsigned char*)(state->ss.Segment.Base + state->rsp.Reg32); *(LPDWORD)stack = val; } else { state->rsp.Reg16 -= 4; unsigned char *stack = (unsigned char*)(state->ss.Segment.Base + state->rsp.Reg16); *(LPDWORD)stack = val; } } WORD POP16(struct whpx_vcpu_state *state) { if (state->ss.Segment.Default) { LPWORD stack = (LPWORD)(state->ss.Segment.Base + state->rsp.Reg32); state->rsp.Reg32 += 2; return *stack; } else { LPWORD stack = (LPWORD)(state->ss.Segment.Base + state->rsp.Reg16); state->rsp.Reg16 += 2; return *stack; } } DWORD POP32(struct whpx_vcpu_state *state) { if (state->ss.Segment.Default) { LPDWORD stack = (LPDWORD)(state->ss.Segment.Base + state->rsp.Reg32); state->rsp.Reg32 += 4; return *stack; } else { LPDWORD stack = (LPDWORD)(state->ss.Segment.Base + state->rsp.Reg16); state->rsp.Reg16 += 4; return *stack; } } WORD PEEK16(struct whpx_vcpu_state *state, int i) { if (state->ss.Segment.Default) { LPWORD stack = (LPWORD)(state->ss.Segment.Base + state->rsp.Reg32); return stack[i]; } else { LPWORD stack = (LPWORD)(state->ss.Segment.Base + state->rsp.Reg16); return stack[i]; } } DWORD PEEK32(struct whpx_vcpu_state *state, int i) { if (state->ss.Segment.Default) { LPDWORD stack = (LPDWORD)(state->ss.Segment.Base + state->rsp.Reg32); return stack[i]; } else { LPDWORD stack = (LPDWORD)(state->ss.Segment.Base + state->rsp.Reg16); return stack[i]; } } void relay(LPVOID relay_func, BOOL reg, struct whpx_vcpu_state *state, DWORD ret_addr, DWORD cbArgs, PEXCEPTION_HANDLER handler, DWORD old_frame16) { unsigned char *stack1 = (unsigned char*)(get_seg_base(get_ss(state))+ get_sp(state)); unsigned char *stack = stack1; /* * (sp+24) word first 16-bit arg * (sp+22) word cs * (sp+20) word ip * (sp+18) word bp * (sp+14) long 32-bit entry point (reused for Win16 mutex recursion count) * (sp+12) word ip of actual entry point (necessary for relay debugging) * (sp+8) long relay (argument conversion) function entry point * (sp+4) long cs of 16-bit entry point * (sp) long ip of 16-bit entry point */ DWORD ip = *(DWORD*)stack; stack += sizeof(DWORD); DWORD cs = *(DWORD*)stack; stack += sizeof(DWORD); DWORD relay = *(DWORD*)stack; stack += sizeof(DWORD); WORD ip2 = *(WORD*)stack; stack += sizeof(WORD); DWORD entry = *(DWORD*)stack; //for debug void *entryf = (void*)entry; stack += sizeof(DWORD); WORD bp = *(WORD*)stack; stack += sizeof(WORD); WORD ip19 = *(WORD*)stack; stack += sizeof(WORD); WORD cs16 = *(WORD*)stack; stack += sizeof(WORD); WORD *args = (WORD*)stack; set_eip(state, ip); load_seg(get_cs(state), (WORD)cs); #include /* 16-bit stack layout after __wine_call_from_16() */ typedef struct _STACK16FRAME { struct STACK32FRAME *frame32; /* 00 32-bit frame from last CallTo16() */ DWORD edx; /* 04 saved registers */ DWORD ecx; /* 08 */ DWORD ebp; /* 0c */ WORD ds; /* 10 */ WORD es; /* 12 */ WORD fs; /* 14 */ WORD gs; /* 16 */ DWORD callfrom_ip; /* 18 callfrom tail IP */ DWORD module_cs; /* 1c module code segment */ DWORD relay; /* 20 relay function address */ WORD entry_ip; /* 22 entry point IP */ DWORD entry_point; /* 26 API entry point to call, reused as mutex count */ WORD bp; /* 2a 16-bit stack frame chain */ WORD ip; /* 2c return address */ WORD cs; /* 2e */ } STACK16FRAME; #include CONTEXT context; STACK32FRAME dummy_stack32 = { 0 }; dummy_stack32.retaddr = ret_addr; dummy_stack32.nb_args = cbArgs; dummy_stack32.frame.Handler = handler; DWORD osp = get_esp(state); PUSH16(state, get_seg_selector(get_gs(state))); PUSH16(state, get_seg_selector(get_fs(state))); PUSH16(state, get_seg_selector(get_es(state))); PUSH16(state, get_seg_selector(get_ds(state))); PUSH32(state, get_ebp(state)); PUSH32(state, get_ecx(state)); PUSH32(state, get_edx(state)); PUSH32(state, osp); save_context_from_state(&context, state); STACK16FRAME *oa = (STACK16FRAME*)wine_ldt_get_ptr((WORD)context.SegSs, context.Esp); DWORD ooo = (WORD)context.Esp; int off = 0; if (reg) { context.Esp = osp + (SIZE_T)stack - (SIZE_T)stack1 - 4; off = ooo - context.Esp; context.Ebp = (context.Ebp & ~0xffff) | bp; context.Eip = ip19; context.SegCs = cs16; } int fret; LPVOID old; PCONTEXT pctx = NULL; #if _MSC_VER __asm { mov old, esp push cbArgs push old /* target(esp) */ push retaddr /* retaddr */ push ebp push ebx push esi push edi push old_frame16 /* frame16 */ /* set up exception handler */ push handler mov eax, fs:[0] push eax mov dummy_stack32.frame.Next, eax mov fs : [0], esp push cs push 0 mov eax, [oa] mov[eax], esp lea eax, [context] push eax push args push entry call relay_func add esp, 12 + 8 mov fret, eax pop dword ptr fs : [0] pop eax jmp skip retaddr : mov pctx, ecx skip: mov esp, old } #else fret = ((int(*)(void *entry_point, unsigned char *args16, CONTEXT *context))relay_func)((void*)entry, (unsigned char*)args, &context); #endif if (!reg) { set_eax(state, fret); } if (pctx) { /* Throw16 */ context = *pctx; reg = TRUE; } if (!reg) { set_eax(state, fret); context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF; context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF; oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp); } else { oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp + off); } if (reg) set_eax(state, (DWORD)context.Eax); set_ecx(state, reg ? (DWORD)context.Ecx : (DWORD)oa->ecx); if (reg) set_edx(state, (DWORD)context.Edx); else set_edx(state, (DWORD)oa->edx); set_ebx(state, (DWORD)context.Ebx); set_esp(state, (DWORD)context.Esp); set_ebp(state, (DWORD)context.Ebp); set_esi(state, (DWORD)context.Esi); set_edi(state, (DWORD)context.Edi); load_seg(get_es(state), reg ? (WORD)context.SegEs : (WORD)oa->es); load_seg(get_ss(state), (WORD)context.SegSs); load_seg(get_ds(state), reg ? (WORD)context.SegDs : (WORD)oa->ds); //ES, CS, SS, DS, FS, GS /* Some programs expect that gs is not a valid selector! */ /* Some programs expect that fs is not a valid selector! */ /* win16 sets 0? */ load_seg(get_fs(state), 0); load_seg(get_gs(state), 0); if (reg) { if (!(ip19 != context.Eip || cs16 != context.SegCs)) { context.Eip = oa->callfrom_ip; context.SegCs = oa->module_cs; } else { /* CS:IP changed! */ context.Eip = context.Eip; } set_esp(state, context.Esp); set_ebp(state, context.Ebp); } else { set_sp(state, context.Esp + 0x2c); set_bp(state, bp); } set_eflags(state, context.EFlags); set_eip(state, context.Eip); load_seg(get_cs(state), (WORD)context.SegCs); } LPBYTE get_base_addr(WORD sel) { return wine_ldt_get_base(wine_ldt + (sel >> 3)); } static uint64 dr7; void set_break_point(struct whpx_vcpu_state *state, WORD sel, DWORD addr, int breakpoint) { LPBYTE base = get_base_addr(sel); if (!base) return; if (wine_ldt_get_limit(wine_ldt + (sel >> 3)) < addr) return; uint64 linear = (uint64)base + addr; switch (breakpoint) { case 0: state->dr0.Reg32 = linear; break; case 1: state->dr1.Reg32 = linear; break; case 2: state->dr2.Reg32 = linear; break; case 3: state->dr3.Reg32 = linear; break; default: return; } state->dr7.Reg32 |= (1 << (2 * breakpoint + 1)) | (0 << (18 + 4 * breakpoint)); state->dr6.Reg32 = 0; } typedef int disassemble_debug_t(char *buffer, UINT8 *oprom, BOOL op_size, UINT64 eip); static disassemble_debug_t *disassemble_debug; static void trace(struct whpx_vcpu_state *state, uint16 cs, uint32 eip, uint16 ss, uint32 esp, uint32 eflags) { char buf[512]; UINT8 *d = get_base_addr(cs) + eip; if (!disassemble_debug) { disassemble_debug = (disassemble_debug_t*)GetProcAddress(LoadLibraryA("vm86.dll"), "disassemble_debug"); } int len = disassemble_debug(buf, d, (wine_ldt_get_flags(wine_ldt + (cs >> 3)) & WINE_LDT_FLAGS_32BIT) == WINE_LDT_FLAGS_32BIT, eip); int i; fprintf(stderr, "%04x:%04x\t", cs, eip); for (i = 0; i < len; i++) { fprintf(stderr, "%02x", d[i]); } fprintf(stderr, "\t%s\n", buf); eflags &= ~2; eflags &= ~0x100; if (state->fs.Segment.Selector || state->gs.Segment.Selector) { fprintf(stderr, "EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X," "ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X," "ES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04x,GS:%04x," "IP:%04X,stack:%08X," "EFLAGS:%08X" "\n", get_eax(state), get_ecx(state), get_edx(state), get_ebx(state), esp, get_ebp(state), get_esi(state), get_edi(state), 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)), eip, *(LPDWORD)(get_base_addr(ss) + esp), eflags ); } else { fprintf(stderr, "EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X," "ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X," "ES:%04X,CS:%04X,SS:%04X,DS:%04X," "IP:%04X,stack:%08X," "EFLAGS:%08X" "\n", get_eax(state), get_ecx(state), get_edx(state), get_ebx(state), esp, get_ebp(state), get_esi(state), get_edi(state), get_seg_selector(get_es(state)), cs, ss, get_seg_selector(get_ds(state)), eip, *(LPDWORD)(get_base_addr(ss) + esp), eflags ); } } BOOL has_x86_exception_err(WORD num, DWORD code) { switch (num) { case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7: return FALSE; case 8: return TRUE; case 9: return FALSE; case 10:case 11:case 12:case 13:case 14: return TRUE; case 15:case 16: return FALSE; case 17: return code ? FALSE : TRUE; // ac exception has a null error code otherwise is equipment list case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29: return FALSE; case 30: return TRUE; case 31: return FALSE; } return FALSE; } static void set_int() { const WHV_REGISTER_NAME notreg = WHvX64RegisterDeliverabilityNotifications; WHV_REGISTER_VALUE delnot = {0}; delnot.DeliverabilityNotifications.InterruptNotification = 1; pWHvSetVirtualProcessorRegisters(partition, 0, ¬reg, 1, &delnot); } volatile struct { BOOL inject; DWORD vpfn16; DWORD dwFlags; DWORD cbArgs; LPVOID pArgs; LPDWORD pdwRetCode; } vm_inject_state; BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode) { if(dwFlags != WCB16_PASCAL) PANIC("vm_inject call not pascal"); if (TryEnterCriticalSection(&win16_syslevel->crst)) { /* There are no threads running VM. (e.g. call GetMessage) */ EnterCriticalSection(&inject_crit_section); /* 16-bit stack is allocated by thread_attach(krnl386/kernel.c) */ BOOL result = pWOWCallback16Ex(vpfn16, dwFlags, cbArgs, pArgs, pdwRetCode); LeaveCriticalSection(&inject_crit_section); LeaveCriticalSection(&win16_syslevel->crst); return result; } EnterCriticalSection(&inject_crit_section); { if (vm_inject_state.inject) { /* FIXME: multiple interrupts */ LeaveCriticalSection(&inject_crit_section); return FALSE; } vm_inject_state.vpfn16 = vpfn16; vm_inject_state.dwFlags = dwFlags; vm_inject_state.cbArgs = cbArgs; vm_inject_state.pArgs = pArgs; vm_inject_state.pdwRetCode = pdwRetCode; vm_inject_state.inject = TRUE; ResetEvent(inject_event); } LeaveCriticalSection(&inject_crit_section); if (pWHvCancelRunVirtualProcessor(partition, 0, 0) != ERROR_SUCCESS) set_int(); WaitForSingleObject(inject_event, INFINITE); return TRUE; } void vm_inject_call(SEGPTR ret_addr, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, pm_interrupt_handler pih, CONTEXT *context) { DWORD ret; EnterCriticalSection(&inject_crit_section); static char intstack[4096]; static WORD intstksel = 0; if (!intstksel) intstksel = SELECTOR_AllocBlock(intstack, 4096, WINE_LDT_FLAGS_DATA); WORD sp = context->Esp; DWORD ss_base = get_base_addr(context->SegSs); if (wine_ldt_get_flags(wine_ldt + (context->SegSs >> 3)) & WINE_LDT_FLAGS_32BIT) // don't call int handler on a large stack { ss_base = (DWORD)intstack; sp = 4096; dynamic_setWOW32Reserved((PVOID)MAKESEGPTR(intstksel, 4096)); } { char *stack = ss_base + sp - vm_inject_state.cbArgs; vm_inject_state.inject = FALSE; memcpy(stack, vm_inject_state.pArgs, vm_inject_state.cbArgs); /* push return address */ stack -= sizeof(SEGPTR); *((SEGPTR *)stack) = ret_addr; vm_inject_state.cbArgs += sizeof(SEGPTR); } LeaveCriticalSection(&inject_crit_section); 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); if (vm_inject_state.pdwRetCode) *vm_inject_state.pdwRetCode = ret; SetEvent(inject_event); } BOOL syscall_init = FALSE; void fstsw(WORD* a); static int compare(const void *a1, const void *a2) { SIZE_T lhs = *(const SIZE_T*)a1; SIZE_T rhs = *(const SIZE_T*)a2; if (lhs == rhs) return 0; if (lhs < rhs) return -1; return 1; } void vm86main(CONTEXT *context, DWORD csip, DWORD sssp, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, pm_interrupt_handler pih ) { DWORD old_frame16 = PtrToUlong(dynamic_getWOW32Reserved()); HRESULT result; EnterCriticalSection(&running_critical_section); if (!syscall_init) { 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 }; int i; SIZE_T map_addr = 0x1000; qsort((void*)pages, sizeof(pages) / sizeof(pages[0]), sizeof(pages[0]), compare); for (i = 0; i < sizeof(pages) / sizeof(pages[0]); i++) { SIZE_T len = pages[i] - map_addr; if (pages[i] > map_addr) { if (FAILED(result = pWHvMapGpaRange(partition, (LPVOID)map_addr, map_addr, len, WHvMapGpaRangeFlagRead | WHvMapGpaRangeFlagWrite | WHvMapGpaRangeFlagExecute))) { PANIC_HRESULT("WHvMapGpaRange", result); return; } } map_addr = pages[i] + 4096; } syscall_init = TRUE; } is_single_step = dasm; DWORD ret_addr; struct whpx_vcpu_state state; { if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values))) { PANIC_HRESULT("WHvGetVirtualProcessorRegisters", result); } load_seg(&state.gs, (WORD)0); load_seg(&state.fs, (WORD)0); if (!csip) { load_seg(&state.es, (WORD)context->SegEs); load_seg(&state.ds, (WORD)context->SegDs); load_seg(&state.cs, (WORD)context->SegCs); load_seg(&state.ss, (WORD)context->SegSs); state.rdi.Reg32 = context->Edi; state.rsi.Reg32 = context->Esi; state.rbx.Reg32 = context->Ebx; state.rdx.Reg32 = context->Edx; state.rcx.Reg32 = context->Ecx; state.rax.Reg32 = context->Eax; state.rbp.Reg32 = context->Ebp; state.rip.Reg32 = context->Eip; set_eflags(&state, context->EFlags); state.rsp.Reg32 = context->Esp - cbArgs; } else { load_seg(&state.cs, (WORD)SELECTOROF(csip)); load_seg(&state.ss, (WORD)SELECTOROF(sssp)); state.rip.Reg32 = OFFSETOF(csip); state.rsp.Reg32 = OFFSETOF(sssp) - cbArgs; if (!(wine_ldt_copy.flags[state.ds.Segment.Selector >> 3] & WINE_LDT_FLAGS_ALLOCATED)) load_seg(&state.ds, (WORD)0); } if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values))) { PANIC_HRESULT("WHvSetVirtualProcessorRegisters", result); } unsigned char *stack = (unsigned char*)state.ss.Segment.Base + state.rsp.Reg32; ret_addr = (*(LPDWORD)stack); } struct whpx_vcpu_state state2 = state; if (is_single_step) { trace(&state2, get_seg_selector(get_cs(&state2)), get_eip(&state2), get_seg_selector(get_ss(&state2)), get_esp(&state2), get_eflags(&state2)); } while (TRUE) { WHV_RUN_VP_EXIT_CONTEXT exit; if (state2.cs.Segment.Selector == (ret_addr >> 16) && state2.rip.Reg32 == (ret_addr & 0xFFFF)) { if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { PANIC_HRESULT("WHvSetVirtualProcessorRegisters", result); } break; } if (FAILED(result = pWHvRunVirtualProcessor(partition, 0, &exit, sizeof(exit)))) { LeaveCriticalSection(&running_critical_section); PANIC_HRESULT("WHvRunVirtualProcessor", result); return; } if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { PANIC_HRESULT("WHvGetVirtualProcessorRegisters", result); } UINT32 ptr = (UINT32)exit.VpContext.Cs.Base + (UINT32)exit.VpContext.Rip; switch (exit.ExitReason) { case WHvRunVpExitReasonMemoryAccess: if (exit.MemoryAccess.AccessInfo.GpaUnmapped) { if (exit.VpContext.Cs.Selector == seg_cs) { BOOL is_reg = ptr == from16_reg; if (is_reg || ptr == __wine_call_from_16) { LeaveCriticalSection(&running_critical_section); relay(relay_call_from_16, is_reg, &state2, ret_addr, cbArgs, handler, old_frame16); EnterCriticalSection(&running_critical_section); } } if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { PANIC_HRESULT("WHvSetVirtualProcessorRegisters", result); } } break; case WHvRunVpExitReasonX64Halt: if (((DWORD)ptr >= (DWORD)trap_int) && ((DWORD)ptr <= ((DWORD)trap_int + 256))) { int intvec = ((DWORD)ptr & 0xff) - 1; BOOL has_err = has_x86_exception_err(intvec, PEEK32(&state2, 0)); DWORD err = has_err ? PEEK32(&state2, 0) : 0; DWORD eip = PEEK32(&state2, (has_err ? 1 : 0) + 0); DWORD cs = PEEK32(&state2, (has_err ? 1 : 0) + 1); DWORD flags = PEEK32(&state2, (has_err ? 1 : 0) + 2); DWORD old_esp = PEEK32(&state2, (has_err ? 1 : 0) + 3); DWORD old_ss = PEEK32(&state2, (has_err ? 1 : 0) + 4); const char *name = NULL; switch (intvec) { case 0: name = "#DE"; break; case 2: name = "int 2h"; break; case 4: name = "#OF"; break; case 6: name = "#UD"; break; case 7: name = "#NM"; break; case 8: name = "#DF"; break; case 10: name = "#TS"; break; case 11: name = "#NP"; break; case 12: name = "#SS"; break; case 13: name = "#GP"; break; case 14: name = "#PF"; break; } set_eip(&state2, 256); if (intvec == 1 && (state2.dr6.Reg32 & 15 || is_single_step)) { if (state2.dr6.Reg32 & 15) { if (state2.dr6.Reg32 & 1) { fprintf(stderr, "breakpoint 0\n"); } if (state2.dr6.Reg32 & 2) { fprintf(stderr, "breakpoint 1\n"); } if (state2.dr6.Reg32 & 4) { fprintf(stderr, "breakpoint 2\n"); } if (state2.dr6.Reg32 & 8) { fprintf(stderr, "breakpoint 3\n"); } state2.dr6.Reg32 = 0; flags |= 0x100; dr7 = state2.dr7.Reg32; state2.dr7.Reg32 = 0; /* breakpoint -> disable -> step -> enable */ } else if (!is_single_step) { flags &= ~0x100; state2.dr7.Reg32 = dr7; } trace(&state2, cs, eip, old_ss, old_esp, flags); if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { } break; } else if (name) { if (intvec == 13) { if (err == 0x40) { /* many startups access the BDA directly */ static WORD dosmem_0040H = 0; if (!dosmem_0040H) { DWORD(WINAPI *GetProcAddress16)(HMODULE16, LPCSTR); HMODULE16(WINAPI *GetModuleHandle16)(LPCSTR); static HMODULE krnl386; if (!krnl386) krnl386 = LoadLibraryA(KRNL386); GetProcAddress16 = (DWORD(WINAPI *)(HMODULE16, LPCSTR))GetProcAddress(krnl386, "GetProcAddress16"); GetModuleHandle16 = (HMODULE16(WINAPI *)(LPCSTR))GetProcAddress(krnl386, "GetModuleHandle16"); dosmem_0040H = (WORD)GetProcAddress16(GetModuleHandle16("KERNEL"), (LPCSTR)193); (void(*)(void))GetProcAddress(krnl386, "DOSVM_start_bios_timer")(); } /* allocate segment 40h */ LPLDT_ENTRY entry = wine_ldt + (dosmem_0040H >> __AHSHIFT); gdt[0x40 >> __AHSHIFT] = *entry; load_seg(get_cs(&state2), cs); set_eip(&state2, eip); set_eflags(&state2, flags & ~0x10000); load_seg(get_ss(&state2), old_ss); set_esp(&state2, old_esp); if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { } break; } HMODULE toolhelp = GetModuleHandleA("toolhelp.dll16"); if (toolhelp) { SEGPTR stack = MAKESEGPTR(old_ss, (WORD)old_esp); FARPROC16 intcb = ((FARPROC16(WINAPI *)(SEGPTR *, SEGPTR, WORD, WORD, WORD))GetProcAddress(toolhelp, "get_intcb"))(&stack, MAKESEGPTR(cs, (WORD)eip), flags, intvec, (WORD)get_eax(&state2)); if (intcb) { load_seg(get_ss(&state2), SELECTOROF(stack)); set_esp(&state2, OFFSETOF(stack)); load_seg(get_cs(&state2), SELECTOROF(intcb)); set_eip(&state2, OFFSETOF(intcb)); if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { } break; } } } DWORD handler = pih(intvec, MAKESEGPTR(cs, eip)); if (!handler) { DWORD cpusig[4]; #ifdef _MSC_VER __cpuid(cpusig, 0); #else __cpuid(0, cpusig[0], cpusig[1], cpusig[2], cpusig[3]); #endif fprintf(stderr, "cpu type %x %x %x %x\n", cpusig[0], cpusig[1], cpusig[2], cpusig[3]); trace(&state2, cs, eip, old_ss, old_esp, flags); PANIC("exception %s", name); } set_eip(&state2, OFFSETOF(handler)); set_eflags(&state2, flags); load_seg(get_cs(&state2), SELECTOROF(handler)); load_seg(get_ss(&state2), old_ss); set_esp(&state2, old_esp); if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { } break; } else { load_seg(get_cs(&state2), (WORD)cs); set_eip(&state2, eip); load_seg(get_ss(&state2), (WORD)old_ss); set_esp(&state2, old_esp); set_eflags(&state2, flags); CONTEXT ctx; save_context_from_state(&ctx, &state2); if (intvec == 0x10) // redirect fpu errors to nmi { WORD sw; fstsw(&sw); if (sw & 0x80) intvec = 2; } if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { } LeaveCriticalSection(&running_critical_section); dynamic__wine_call_int_handler(&ctx, intvec); EnterCriticalSection(&running_critical_section); load_context_to_state(&ctx, &state2); if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { } } } else { PANIC("HALT"); } break; case WHvRunVpExitReasonCanceled: { if (!vm_inject_state.inject) PANIC("unexpected vm cancellation"); const WHV_REGISTER_NAME reg = WHvX64RegisterRflags; WHV_REGISTER_VALUE flags = {0}; pWHvGetVirtualProcessorRegisters(partition, 0, ®, 1, &flags); if (!(flags.Reg32 & 0x200)) { set_int(); break; } } case WHvRunVpExitReasonX64InterruptWindow: { if (!vm_inject_state.inject) PANIC("unexpected vm interrupt"); CONTEXT ictx; save_context_from_state(&ictx, &state2); vm_inject_call(ret_addr, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih, &ictx); load_context_to_state(&ictx, &state2); if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { } break; } case WHvRunVpExitReasonX64IoPortAccess: { WHV_X64_IO_PORT_ACCESS_CONTEXT *io = &exit.IoPortAccess; CONTEXT ctx; save_context_from_state(&ctx, &state2); ctx.Eip = exit.VpContext.Rip + exit.VpContext.InstructionLength; ctx.Eax = io->Rax; if(!(io->AccessInfo.StringOp)) { switch(io->AccessInfo.AccessSize) { case 1: if(!io->AccessInfo.IsWrite) ctx.Eax = (io->Rax & ~0xff) | (UINT8)DOSVM_inport(io->PortNumber, 1, &ctx); else DOSVM_outport(io->PortNumber, io->Rax, 1, &ctx); break; case 2: if(!io->AccessInfo.IsWrite) { ctx.Eax = (io->Rax & ~0xffff); ctx.Eax |= (UINT16)DOSVM_inport(io->PortNumber, 2, &ctx); } else { DOSVM_outport(io->PortNumber, io->Rax, 2, &ctx); } break; case 4: if(!io->AccessInfo.IsWrite) { ctx.Eax = DOSVM_inport(io->PortNumber, 4, &ctx); } else { DOSVM_outport(io->PortNumber, io->Rax, 4, &ctx); } break; } } else { UINT32 count = io->AccessInfo.RepPrefix ? io->Rcx : 1; UINT8 *addr; if(!io->AccessInfo.IsWrite) addr = mem + io->Ds.Base + io->Rsi; else addr = mem + io->Es.Base + io->Rdi; for(int i = 0; i < count; i++) { addr = ctx.EFlags & 0x400 ? addr - io->AccessInfo.AccessSize : addr + io->AccessInfo.AccessSize; switch(io->AccessInfo.AccessSize) { case 1: if(!io->AccessInfo.IsWrite) DOSVM_outport(io->PortNumber, *addr, 1, &ctx); else *addr = DOSVM_inport(io->PortNumber, 1, &ctx); break; case 2: if(!io->AccessInfo.IsWrite) { DOSVM_outport(io->PortNumber, *addr, 2, &ctx); } else { UINT16 val = DOSVM_inport(io->PortNumber, 2, &ctx); *addr = val; *(addr + 1) = val >> 8; } break; case 4: if(!io->AccessInfo.IsWrite) { DOSVM_outport(io->PortNumber, *addr, 4, &ctx); } else { UINT16 val = DOSVM_inport(io->PortNumber, 4, &ctx); *addr = val; *(addr + 1) = val >> 8; *(addr + 2) = val >> 16; *(addr + 3) = val >> 24; } break; } } } load_context_to_state(&ctx, &state2); if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values))) { } break; } default: PANIC("unexpected exit reason %d", exit.ExitReason); break; } } save_context_from_state(context, &state2); LeaveCriticalSection(&running_critical_section); } __declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih) { mem = vm86 ? (UINT8*)memory_base : NULL; if (!initflag) initflag = init_vm86(vm86); CONTEXT context = { 0 }; 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); return (context.Eax & 0xffff) | context.Edx << 16; } __declspec(dllexport) void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler, void(*from16_reg)(void), LONG(*__wine_call_from_16)(void), int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context), void(*__wine_call_to_16_ret)(void), int dasm, BOOL vm86, void *memory_base, pm_interrupt_handler pih ) { mem = vm86 ? (UINT8*)memory_base : NULL; if (!initflag) initflag = init_vm86(vm86); vm86main(context, 0, 0, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih); } void callx87(const char *addr, LPCVOID eax) { HRESULT result; struct whpx_vcpu_state state; if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values))) { PANIC_HRESULT("WHvGetVirtualProcessorRegisters", result); return; } set_eip(&state, (UINT32)addr); set_eax(&state, (UINT32)eax); load_seg(get_cs(&state), seg_cs); load_seg(get_ds(&state), seg_ds); while (TRUE) { WHV_RUN_VP_EXIT_CONTEXT exit; EnterCriticalSection(&running_critical_section); if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values))) { PANIC_HRESULT("WHvSetVirtualProcessorRegisters", result); return; } if (FAILED(result = pWHvRunVirtualProcessor(partition, 0, &exit, sizeof(exit)))) { LeaveCriticalSection(&running_critical_section); PANIC_HRESULT("WHvRunVirtualProcessor", result); return; } if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values))) { PANIC_HRESULT("WHvGetVirtualProcessorRegisters", result); } LeaveCriticalSection(&running_critical_section); if (exit.ExitReason == WHvRunVpExitReasonX64IoPortAccess) { break; } PANIC("unexpected exit reason %d", exit.ExitReason); } } void fldcw(WORD a) { HRESULT result; WHV_REGISTER_NAME reg = WHvX64RegisterFpControlStatus; WHV_REGISTER_VALUE s; if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, ®, 1, &s))) { PANIC_HRESULT("WHvGetVirtualProcessorRegisters", result); } s.FpControlStatus.FpControl = a; if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, ®, 1, &s))) { PANIC_HRESULT("WHvSetVirtualProcessorRegisters", result); } } void wait() { char instr[] = { 0x9b, 0xee }; /* wait */ callx87(instr, NULL); } void fninit() { char instr[] = { 0xdb, 0xe3, 0xee }; /* fninit */ callx87(instr, NULL); } void fstcw(WORD* a) { HRESULT result; WHV_REGISTER_NAME reg = WHvX64RegisterFpControlStatus; WHV_REGISTER_VALUE s; if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, ®, 1, &s))) { PANIC_HRESULT("WHvGetVirtualProcessorRegisters", result); } *a = s.FpControlStatus.FpControl; } void fstsw(WORD* a) { HRESULT result; WHV_REGISTER_NAME reg = WHvX64RegisterFpControlStatus; WHV_REGISTER_VALUE s; if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, ®, 1, &s))) { PANIC_HRESULT("WHvGetVirtualProcessorRegisters", result); } *a = s.FpControlStatus.FpStatus; } void frndint() { char instr[] = { 0xd9, 0xfc, 0xee }; /* frndint */ callx87(instr, NULL); } void fclex() { char instr[] = { 0xdb, 0xe2, 0xee }; /* fnclex */ callx87(instr, NULL); } void fsave(char* a) { char instr[] = { 0xdd, 0x30, 0xee }; /* fnsave [eax] */ callx87(instr, a); } void frstor(const char* a) { char instr[] = { 0xdd, 0x20, 0xee }; /* frstor [eax] */ callx87(instr, a); } void fstenv32(char* a) { const char instr[] = { 0xd9, 0x30, 0xee }; /* fnstenv dword ptr [eax] */ callx87(instr, a); return; } DWORD fistp(WORD rnd) { const char instr[] = { 0xdb, 0x18, 0xee }; /* fistp dword ptr [eax] */ WORD oldcw, newcw; DWORD a; fstcw(&oldcw); newcw = (oldcw & ~0xc00) | ((rnd & 3) << 10); fldcw(newcw); callx87(instr, &a); fldcw(oldcw); return a; } typedef void(*fldcw_t)(WORD); typedef void(*wait_t)(); typedef void(*fninit_t)(); typedef void(*fstcw_t)(WORD*); typedef void(*fstsw_t)(WORD*); typedef void(*frndint_t)(); typedef void(*fclex_t)(); typedef void(*fsave_t)(char*); typedef void(*fstenv32_t)(char*); typedef void(*frstor_t)(const char*); typedef DWORD(*fistp_t)(WORD); typedef struct { fldcw_t fldcw; wait_t wait; fninit_t fninit; fstcw_t fstcw; fstsw_t fstsw; frndint_t frndint; fclex_t fclex; fsave_t fsave; frstor_t frstor; fstenv32_t fstenv32; fistp_t fistp; } x87function; __declspec(dllexport) void load_x87function(x87function *func) { func->fclex = fclex; func->fldcw = fldcw; func->fninit = fninit; func->frndint = frndint; func->frstor = frstor; func->fsave = fsave; func->fstcw = fstcw; func->fstsw = fstsw; func->wait = wait; func->fstenv32 = fstenv32; func->fistp = fistp; } ================================================ FILE: whpxvm/whpxvm.def ================================================ ================================================ FILE: whpxvm/whpxvm.h ================================================ #pragma once #include #include #define WHV_PARTITION_HANDLE WHV_PARTITION_HANDLE32 /* hack! */ #include #undef WHV_PARTITION_HANDLE typedef UINT64 WHV_PARTITION_HANDLE; #include struct whpx_vcpu_state { union { struct { WHV_REGISTER_VALUE rax; WHV_REGISTER_VALUE rcx; WHV_REGISTER_VALUE rdx; WHV_REGISTER_VALUE rbx; WHV_REGISTER_VALUE rsp; WHV_REGISTER_VALUE rbp; WHV_REGISTER_VALUE rsi; WHV_REGISTER_VALUE rdi; WHV_REGISTER_VALUE rip; WHV_REGISTER_VALUE rflags; WHV_REGISTER_VALUE es; WHV_REGISTER_VALUE cs; WHV_REGISTER_VALUE ss; WHV_REGISTER_VALUE ds; WHV_REGISTER_VALUE fs; WHV_REGISTER_VALUE gs; WHV_REGISTER_VALUE ldtr; WHV_REGISTER_VALUE tr; WHV_REGISTER_VALUE idtr; WHV_REGISTER_VALUE gdtr; WHV_REGISTER_VALUE cr0; WHV_REGISTER_VALUE cr3; WHV_REGISTER_VALUE dr0; WHV_REGISTER_VALUE dr1; WHV_REGISTER_VALUE dr2; WHV_REGISTER_VALUE dr3; WHV_REGISTER_VALUE dr6; WHV_REGISTER_VALUE dr7; }; WHV_REGISTER_VALUE values[28]; }; }; typedef UINT16 uint16; typedef UINT32 uint32; typedef UINT64 uint64; static WHV_REGISTER_NAME whpx_vcpu_reg_names[] = { WHvX64RegisterRax, WHvX64RegisterRcx, WHvX64RegisterRdx, WHvX64RegisterRbx, WHvX64RegisterRsp, WHvX64RegisterRbp, WHvX64RegisterRsi, WHvX64RegisterRdi, WHvX64RegisterRip, WHvX64RegisterRflags, WHvX64RegisterEs, WHvX64RegisterCs, WHvX64RegisterSs, WHvX64RegisterDs, WHvX64RegisterFs, WHvX64RegisterGs, WHvX64RegisterLdtr, WHvX64RegisterTr, WHvX64RegisterIdtr, WHvX64RegisterGdtr, WHvX64RegisterCr0, WHvX64RegisterCr3, WHvX64RegisterDr0, WHvX64RegisterDr1, WHvX64RegisterDr2, WHvX64RegisterDr3, WHvX64RegisterDr6, WHvX64RegisterDr7, }; /* register utils */ typedef struct whpx_vcpu_state vcpu_state; typedef WHV_X64_SEGMENT_REGISTER segment; /* 16-bit regs */ static inline uint16 get_ax(vcpu_state *state) { return state->rax.Reg16; } static inline uint16 get_cx(vcpu_state *state) { return state->rcx.Reg16; } static inline uint16 get_dx(vcpu_state *state) { return state->rdx.Reg16; } static inline uint16 get_bx(vcpu_state *state) { return state->rbx.Reg16; } static inline uint16 get_sp(vcpu_state *state) { return state->rsp.Reg16; } static inline uint16 get_bp(vcpu_state *state) { return state->rbp.Reg16; } static inline uint16 get_si(vcpu_state *state) { return state->rsi.Reg16; } static inline uint16 get_di(vcpu_state *state) { return state->rdi.Reg16; } static inline uint16 get_ip(vcpu_state *state) { return state->rip.Reg16; } static inline uint16 get_flags(vcpu_state *state) { return state->rflags.Reg16; } static inline uint16 set_ax(vcpu_state *state, uint16 val) { return state->rax.Reg16 = val; } static inline uint16 set_cx(vcpu_state *state, uint16 val) { return state->rcx.Reg16 = val; } static inline uint16 set_dx(vcpu_state *state, uint16 val) { return state->rdx.Reg16 = val; } static inline uint16 set_bx(vcpu_state *state, uint16 val) { return state->rbx.Reg16 = val; } static inline uint16 set_sp(vcpu_state *state, uint16 val) { return state->rsp.Reg16 = val; } static inline uint16 set_bp(vcpu_state *state, uint16 val) { return state->rbp.Reg16 = val; } static inline uint16 set_si(vcpu_state *state, uint16 val) { return state->rsi.Reg16 = val; } static inline uint16 set_di(vcpu_state *state, uint16 val) { return state->rdi.Reg16 = val; } static inline uint16 set_ip(vcpu_state *state, uint16 val) { return state->rip.Reg16 = val; } static inline segment *get_es(vcpu_state *state) { return &state->es; } static inline segment *get_cs(vcpu_state *state) { return &state->cs; } static inline segment *get_ss(vcpu_state *state) { return &state->ss; } static inline segment *get_ds(vcpu_state *state) { return &state->ds; } static inline segment *get_fs(vcpu_state *state) { return &state->fs; } static inline segment *get_gs(vcpu_state *state) { return &state->gs; } static inline uint16 get_seg_selector(segment *seg) { return seg->Selector; } static inline uint32 get_seg_base(segment *seg) { return (uint32)seg->Base; } static inline uint32 get_seg_limit(segment *seg) { return seg->Limit; } /* 32-bit regs */ static inline uint32 get_eax(vcpu_state *state) { return state->rax.Reg32; } static inline uint32 get_ecx(vcpu_state *state) { return state->rcx.Reg32; } static inline uint32 get_edx(vcpu_state *state) { return state->rdx.Reg32; } static inline uint32 get_ebx(vcpu_state *state) { return state->rbx.Reg32; } static inline uint32 get_esp(vcpu_state *state) { return state->rsp.Reg32; } static inline uint32 get_ebp(vcpu_state *state) { return state->rbp.Reg32; } static inline uint32 get_esi(vcpu_state *state) { return state->rsi.Reg32; } static inline uint32 get_edi(vcpu_state *state) { return state->rdi.Reg32; } static inline uint32 get_eip(vcpu_state *state) { return state->rip.Reg32; } static inline uint32 get_eflags(vcpu_state *state) { return state->rflags.Reg32; } static inline uint32 set_eax(vcpu_state *state, uint32 val) { return state->rax.Reg32 = val; } static inline uint32 set_ecx(vcpu_state *state, uint32 val) { return state->rcx.Reg32 = val; } static inline uint32 set_edx(vcpu_state *state, uint32 val) { return state->rdx.Reg32 = val; } static inline uint32 set_ebx(vcpu_state *state, uint32 val) { return state->rbx.Reg32 = val; } static inline uint32 set_esp(vcpu_state *state, uint32 val) { return state->rsp.Reg32 = val; } static inline uint32 set_ebp(vcpu_state *state, uint32 val) { return state->rbp.Reg32 = val; } static inline uint32 set_esi(vcpu_state *state, uint32 val) { return state->rsi.Reg32 = val; } static inline uint32 set_edi(vcpu_state *state, uint32 val) { return state->rdi.Reg32 = val; } static inline uint32 set_eip(vcpu_state *state, uint32 val) { return state->rip.Reg32 = val; } ================================================ FILE: whpxvm/whpxvm.vcxproj ================================================ Debug Win32 Release Win32 15.0 Win32Proj whpxvm 10.0.17134.0 {2DF233FE-CBB8-4102-A68D-7D30C38961C1} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode false true true false NotUsing Level3 MaxSpeed true true true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true true true $(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) whpxvm.def NotUsing Level3 Disabled true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true $(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) whpxvm.def NotUsing Level3 Disabled true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true $(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) whpxvm.def NotUsing Level3 MaxSpeed true true true __i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Console true true true $(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) whpxvm.def ================================================ FILE: widl/CMakeLists.txt ================================================ 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) include_directories(../wine .) bison_target(widl_parser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c COMPILE_FLAGS "-p parser_") flex_target(widl_scanner parser.l ${CMAKE_CURRENT_BINARY_DIR}/parser.l.c COMPILE_FLAGS) add_flex_bison_dependency(widl_scanner widl_parser) add_executable(widl ${SOURCE} ${BISON_widl_parser_OUTPUTS} ${FLEX_widl_scanner_OUTPUTS}) add_definitions(-D_X86_ -D__i386__ -Dpopen=_popen -Dpclose=_pclose -Dstrncasecmp=_strnicmp -Dstrcasecmp=_stricmp) if (NOT(MSVC)) add_definitions(-DHAVE_GETOPT_H) endif() target_link_libraries(widl wpp libwine) ================================================ FILE: widl/client.c ================================================ /* * IDL Compiler * * Copyright 2005-2006 Eric Kohl * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" #include "widltypes.h" #include "typegen.h" #include "expr.h" static FILE* client; static int indent = 0; static void print_client( const char *format, ... ) __attribute__((format (printf, 1, 2))); static void print_client( const char *format, ... ) { va_list va; va_start(va, format); print(client, indent, format, va); va_end(va); } static void write_client_func_decl( const type_t *iface, const var_t *func ) { const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); const var_list_t *args = type_get_function_args(func->type); type_t *rettype = type_function_get_rettype(func->type); if (!callconv) callconv = "__cdecl"; write_type_decl_left(client, rettype); fprintf(client, " %s ", callconv); fprintf(client, "%s%s(\n", prefix_client, get_name(func)); indent++; if (args) write_args(client, args, iface->name, 0, TRUE); else print_client("void"); fprintf(client, ")\n"); indent--; } static void write_function_stub( const type_t *iface, const var_t *func, int method_count, unsigned int proc_offset ) { unsigned char explicit_fc, implicit_fc; int has_full_pointer = is_full_pointer_function(func); var_t *retval = type_function_get_retval(func->type); const var_t *handle_var = get_func_handle_var( iface, func, &explicit_fc, &implicit_fc ); int has_ret = !is_void(retval->type); if (is_interpreted_func( iface, func )) { write_client_func_decl( iface, func ); write_client_call_routine( client, iface, func, iface->name, proc_offset ); return; } print_client( "struct __frame_%s%s\n{\n", prefix_client, get_name(func) ); indent++; print_client( "__DECL_EXCEPTION_FRAME\n" ); print_client("MIDL_STUB_MESSAGE _StubMsg;\n"); if (handle_var) { if (explicit_fc == FC_BIND_GENERIC) print_client("%s %s;\n", get_explicit_generic_handle_type(handle_var)->name, handle_var->name ); print_client("RPC_BINDING_HANDLE _Handle;\n"); } if (has_ret && decl_indirect(retval->type)) { print_client("void *_p_%s;\n", retval->name); } indent--; print_client( "};\n\n" ); print_client( "static void __finally_%s%s(", prefix_client, get_name(func) ); print_client( " struct __frame_%s%s *__frame )\n{\n", prefix_client, get_name(func) ); indent++; if (has_full_pointer) write_full_pointer_free(client, indent, func); print_client("NdrFreeBuffer(&__frame->_StubMsg);\n"); if (explicit_fc == FC_BIND_GENERIC) { fprintf(client, "\n"); print_client("if (__frame->_Handle)\n"); indent++; print_client("%s_unbind(__frame->%s, __frame->_Handle);\n", get_explicit_generic_handle_type(handle_var)->name, handle_var->name); indent--; } indent--; print_client( "}\n\n" ); write_client_func_decl( iface, func ); /* write the functions body */ fprintf(client, "{\n"); indent++; print_client( "struct __frame_%s%s __f, * const __frame = &__f;\n", prefix_client, get_name(func) ); /* declare return value */ if (has_ret) { print_client("%s", ""); write_type_decl(client, retval->type, retval->name); fprintf(client, ";\n"); } print_client("RPC_MESSAGE _RpcMessage;\n"); if (handle_var) { print_client( "__frame->_Handle = 0;\n" ); if (explicit_fc == FC_BIND_GENERIC) print_client("__frame->%s = %s;\n", handle_var->name, handle_var->name ); } if (has_ret && decl_indirect(retval->type)) { print_client("__frame->_p_%s = &%s;\n", retval->name, retval->name); } fprintf(client, "\n"); print_client( "RpcExceptionInit( 0, __finally_%s%s );\n", prefix_client, get_name(func) ); if (has_full_pointer) write_full_pointer_init(client, indent, func, FALSE); /* check pointers */ write_pointer_checks( client, indent, func ); print_client("RpcTryFinally\n"); print_client("{\n"); indent++; print_client("NdrClientInitializeNew(&_RpcMessage, &__frame->_StubMsg, &%s_StubDesc, %d);\n", iface->name, method_count); if (is_attr(func->attrs, ATTR_IDEMPOTENT) || is_attr(func->attrs, ATTR_BROADCAST)) { print_client("_RpcMessage.RpcFlags = ( RPC_NCA_FLAGS_DEFAULT "); if (is_attr(func->attrs, ATTR_IDEMPOTENT)) fprintf(client, "| RPC_NCA_FLAGS_IDEMPOTENT "); if (is_attr(func->attrs, ATTR_BROADCAST)) fprintf(client, "| RPC_NCA_FLAGS_BROADCAST "); fprintf(client, ");\n\n"); } switch (explicit_fc) { case FC_BIND_PRIMITIVE: print_client("__frame->_Handle = %s;\n", handle_var->name); fprintf(client, "\n"); break; case FC_BIND_GENERIC: print_client("__frame->_Handle = %s_bind(%s);\n", get_explicit_generic_handle_type(handle_var)->name, handle_var->name); fprintf(client, "\n"); break; case FC_BIND_CONTEXT: { /* if the context_handle attribute appears in the chain of types * without pointers being followed, then the context handle must * be direct, otherwise it is a pointer */ int is_ch_ptr = !is_aliaschain_attr(handle_var->type, ATTR_CONTEXTHANDLE); print_client("if (%s%s != 0)\n", is_ch_ptr ? "*" : "", handle_var->name); indent++; print_client("__frame->_Handle = NDRCContextBinding(%s%s);\n", is_ch_ptr ? "*" : "", handle_var->name); indent--; if (is_attr(handle_var->attrs, ATTR_IN) && !is_attr(handle_var->attrs, ATTR_OUT)) { print_client("else\n"); indent++; print_client("RpcRaiseException(RPC_X_SS_IN_NULL_CONTEXT);\n"); indent--; } fprintf(client, "\n"); break; } case 0: /* implicit handle */ if (handle_var) { print_client("__frame->_Handle = %s;\n", handle_var->name); fprintf(client, "\n"); } break; } write_remoting_arguments(client, indent, func, "", PASS_IN, PHASE_BUFFERSIZE); print_client("NdrGetBuffer(&__frame->_StubMsg, __frame->_StubMsg.BufferLength, "); if (handle_var) fprintf(client, "__frame->_Handle);\n\n"); else fprintf(client,"%s__MIDL_AutoBindHandle);\n\n", iface->name); /* marshal arguments */ write_remoting_arguments(client, indent, func, "", PASS_IN, PHASE_MARSHAL); /* send/receive message */ /* print_client("NdrNsSendReceive(\n"); */ /* print_client("(unsigned char *)__frame->_StubMsg.Buffer,\n"); */ /* print_client("(RPC_BINDING_HANDLE *) &%s__MIDL_AutoBindHandle);\n", iface->name); */ print_client("NdrSendReceive(&__frame->_StubMsg, __frame->_StubMsg.Buffer);\n\n"); print_client("__frame->_StubMsg.BufferStart = _RpcMessage.Buffer;\n"); print_client("__frame->_StubMsg.BufferEnd = __frame->_StubMsg.BufferStart + _RpcMessage.BufferLength;\n"); if (has_out_arg_or_return(func)) { fprintf(client, "\n"); print_client("if ((_RpcMessage.DataRepresentation & 0x0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION)\n"); indent++; print_client("NdrConvert(&__frame->_StubMsg, (PFORMAT_STRING)&__MIDL_ProcFormatString.Format[%u]);\n", proc_offset); indent--; } /* unmarshall arguments */ fprintf(client, "\n"); write_remoting_arguments(client, indent, func, "", PASS_OUT, PHASE_UNMARSHAL); /* unmarshal return value */ if (has_ret) { if (decl_indirect(retval->type)) print_client("MIDL_memset(&%s, 0, sizeof(%s));\n", retval->name, retval->name); else if (is_ptr(retval->type) || is_array(retval->type)) print_client("%s = 0;\n", retval->name); write_remoting_arguments(client, indent, func, "", PASS_RETURN, PHASE_UNMARSHAL); } indent--; print_client("}\n"); print_client("RpcFinally\n"); print_client("{\n"); indent++; print_client( "__finally_%s%s( __frame );\n", prefix_client, get_name(func) ); indent--; print_client("}\n"); print_client("RpcEndFinally\n"); /* emit return code */ if (has_ret) { fprintf(client, "\n"); print_client("return %s;\n", retval->name); } indent--; fprintf(client, "}\n"); fprintf(client, "\n"); } static void write_function_stubs(type_t *iface, unsigned int *proc_offset) { const statement_t *stmt; const var_t *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); int method_count = 0; if (!implicit_handle) print_client("static RPC_BINDING_HANDLE %s__MIDL_AutoBindHandle;\n\n", iface->name); STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { const var_t *func = stmt->u.var; write_function_stub( iface, func, method_count++, *proc_offset ); *proc_offset += get_size_procformatstring_func( iface, func ); } } static void write_stubdescdecl(type_t *iface) { print_client("static const MIDL_STUB_DESC %s_StubDesc;\n", iface->name); fprintf(client, "\n"); } static void write_stubdescriptor(type_t *iface, int expr_eval_routines) { const var_t *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); print_client("static const MIDL_STUB_DESC %s_StubDesc =\n", iface->name); print_client("{\n"); indent++; print_client("(void *)& %s___RpcClientInterface,\n", iface->name); print_client("MIDL_user_allocate,\n"); print_client("MIDL_user_free,\n"); print_client("{\n"); indent++; if (implicit_handle) print_client("&%s,\n", implicit_handle->name); else print_client("&%s__MIDL_AutoBindHandle,\n", iface->name); indent--; print_client("},\n"); print_client("0,\n"); if (!list_empty( &generic_handle_list )) print_client("BindingRoutines,\n"); else print_client("0,\n"); if (expr_eval_routines) print_client("ExprEvalRoutines,\n"); else print_client("0,\n"); print_client("0,\n"); print_client("__MIDL_TypeFormatString.Format,\n"); print_client("1, /* -error bounds_check flag */\n"); print_client("0x%x, /* Ndr library version */\n", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001); print_client("0,\n"); print_client("0x50100a4, /* MIDL Version 5.1.164 */\n"); print_client("0,\n"); print_client("%s,\n", list_empty(&user_type_list) ? "0" : "UserMarshalRoutines"); print_client("0, /* notify & notify_flag routine table */\n"); print_client("1, /* Flags */\n"); print_client("0, /* Reserved3 */\n"); print_client("0, /* Reserved4 */\n"); print_client("0 /* Reserved5 */\n"); indent--; print_client("};\n"); fprintf(client, "\n"); } static void write_clientinterfacedecl(type_t *iface) { unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION); const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); const str_list_t *endpoints = get_attrp(iface->attrs, ATTR_ENDPOINT); if (endpoints) write_endpoints( client, iface->name, endpoints ); print_client("static const RPC_CLIENT_INTERFACE %s___RpcClientInterface =\n", iface->name ); print_client("{\n"); indent++; print_client("sizeof(RPC_CLIENT_INTERFACE),\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", uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7], MAJORVERSION(ver), MINORVERSION(ver)); print_client("{{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}},\n"); /* FIXME */ print_client("0,\n"); if (endpoints) { print_client("%u,\n", list_count(endpoints)); print_client("(PRPC_PROTSEQ_ENDPOINT)%s__RpcProtseqEndpoint,\n", iface->name); } else { print_client("0,\n"); print_client("0,\n"); } print_client("0,\n"); print_client("0,\n"); print_client("0,\n"); indent--; print_client("};\n"); if (old_names) print_client("RPC_IF_HANDLE %s_ClientIfHandle DECLSPEC_HIDDEN = (RPC_IF_HANDLE)& %s___RpcClientInterface;\n", iface->name, iface->name); else print_client("RPC_IF_HANDLE %s%s_v%d_%d_c_ifspec DECLSPEC_HIDDEN = (RPC_IF_HANDLE)& %s___RpcClientInterface;\n", prefix_client, iface->name, MAJORVERSION(ver), MINORVERSION(ver), iface->name); fprintf(client, "\n"); } static void write_implicithandledecl(type_t *iface) { const var_t *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); if (implicit_handle) { write_type_decl( client, implicit_handle->type, implicit_handle->name ); fprintf(client, ";\n\n"); } } static void init_client(void) { if (client) return; if (!(client = fopen(client_name, "w"))) error("Could not open %s for output\n", client_name); print_client("/*** Autogenerated by WIDL %s from %s - Do not edit ***/\n", PACKAGE_VERSION, input_name); print_client("#include \n"); print_client( "\n"); print_client("#include \"%s\"\n", header_name); print_client( "\n"); print_client( "#ifndef DECLSPEC_HIDDEN\n"); print_client( "#define DECLSPEC_HIDDEN\n"); print_client( "#endif\n"); print_client( "\n"); } static void write_client_ifaces(const statement_list_t *stmts, int expr_eval_routines, unsigned int *proc_offset) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE) { int has_func = 0; const statement_t *stmt2; type_t *iface = stmt->u.type; if (!need_stub(iface)) return; fprintf(client, "/*****************************************************************************\n"); fprintf(client, " * %s interface\n", iface->name); fprintf(client, " */\n"); fprintf(client, "\n"); STATEMENTS_FOR_EACH_FUNC(stmt2, type_iface_get_stmts(iface)) { has_func = 1; break; } if (has_func) { write_implicithandledecl(iface); write_clientinterfacedecl(iface); write_stubdescdecl(iface); write_function_stubs(iface, proc_offset); print_client("#if !defined(__RPC_WIN%u__)\n", pointer_size == 8 ? 64 : 32); print_client("#error Invalid build platform for this stub.\n"); print_client("#endif\n"); fprintf(client, "\n"); write_stubdescriptor(iface, expr_eval_routines); } } } } static void write_generic_handle_routine_list(void) { generic_handle_t *gh; if (list_empty( &generic_handle_list )) return; print_client( "static const GENERIC_BINDING_ROUTINE_PAIR BindingRoutines[] =\n" ); print_client( "{\n" ); indent++; LIST_FOR_EACH_ENTRY( gh, &generic_handle_list, generic_handle_t, entry ) { print_client( "{ (GENERIC_BINDING_ROUTINE)%s_bind, (GENERIC_UNBIND_ROUTINE)%s_unbind },\n", gh->name, gh->name ); } indent--; print_client( "};\n\n" ); } static void write_client_routines(const statement_list_t *stmts) { unsigned int proc_offset = 0; int expr_eval_routines; if (need_inline_stubs_file( stmts )) { write_exceptions( client ); print_client( "\n"); } write_formatstringsdecl(client, indent, stmts, need_stub); expr_eval_routines = write_expr_eval_routines(client, client_token); if (expr_eval_routines) write_expr_eval_routine_list(client, client_token); write_generic_handle_routine_list(); write_user_quad_list(client); write_client_ifaces(stmts, expr_eval_routines, &proc_offset); fprintf(client, "\n"); write_procformatstring(client, stmts, need_stub); write_typeformatstring(client, stmts, need_stub); } void write_client(const statement_list_t *stmts) { if (!do_client) return; if (do_everything && !need_stub_files(stmts)) return; init_client(); if (!client) return; if (do_win32 && do_win64) { fprintf(client, "#ifndef _WIN64\n\n"); pointer_size = 4; write_client_routines( stmts ); fprintf(client, "\n#else /* _WIN64 */\n\n"); pointer_size = 8; write_client_routines( stmts ); fprintf(client, "\n#endif /* _WIN64 */\n"); } else if (do_win32) { pointer_size = 4; write_client_routines( stmts ); } else if (do_win64) { pointer_size = 8; write_client_routines( stmts ); } fclose(client); } ================================================ FILE: widl/expr.c ================================================ /* * Expression Abstract Syntax Tree Functions * * Copyright 2002 Ove Kaaven * Copyright 2006-2008 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include #include #include #include "widl.h" #include "utils.h" #include "expr.h" #include "header.h" #include "typetree.h" #include "typegen.h" static int is_integer_type(const type_t *type) { switch (type_get_type(type)) { case TYPE_ENUM: return TRUE; case TYPE_BASIC: switch (type_basic_get_type(type)) { case TYPE_BASIC_INT8: case TYPE_BASIC_INT16: case TYPE_BASIC_INT32: case TYPE_BASIC_INT64: case TYPE_BASIC_INT: case TYPE_BASIC_INT3264: case TYPE_BASIC_CHAR: case TYPE_BASIC_HYPER: case TYPE_BASIC_BYTE: case TYPE_BASIC_WCHAR: case TYPE_BASIC_ERROR_STATUS_T: return TRUE; case TYPE_BASIC_FLOAT: case TYPE_BASIC_DOUBLE: case TYPE_BASIC_HANDLE: return FALSE; } return FALSE; default: return FALSE; } } static int is_signed_integer_type(const type_t *type) { switch (type_get_type(type)) { case TYPE_ENUM: return FALSE; case TYPE_BASIC: switch (type_basic_get_type(type)) { case TYPE_BASIC_INT8: case TYPE_BASIC_INT16: case TYPE_BASIC_INT32: case TYPE_BASIC_INT64: case TYPE_BASIC_INT: case TYPE_BASIC_INT3264: return type_basic_get_sign(type) < 0; case TYPE_BASIC_CHAR: return TRUE; case TYPE_BASIC_HYPER: case TYPE_BASIC_BYTE: case TYPE_BASIC_WCHAR: case TYPE_BASIC_ERROR_STATUS_T: case TYPE_BASIC_FLOAT: case TYPE_BASIC_DOUBLE: case TYPE_BASIC_HANDLE: return FALSE; } /* FALLTHROUGH */ default: return FALSE; } } static int is_float_type(const type_t *type) { return (type_get_type(type) == TYPE_BASIC && (type_basic_get_type(type) == TYPE_BASIC_FLOAT || type_basic_get_type(type) == TYPE_BASIC_DOUBLE)); } expr_t *make_expr(enum expr_type type) { expr_t *e = xmalloc(sizeof(expr_t)); e->type = type; e->ref = NULL; e->u.lval = 0; e->is_const = FALSE; e->cval = 0; return e; } expr_t *make_exprl(enum expr_type type, int val) { expr_t *e = xmalloc(sizeof(expr_t)); e->type = type; e->ref = NULL; e->u.lval = val; e->is_const = FALSE; /* check for numeric constant */ if (type == EXPR_NUM || type == EXPR_HEXNUM || type == EXPR_TRUEFALSE) { /* make sure true/false value is valid */ assert(type != EXPR_TRUEFALSE || val == 0 || val == 1); e->is_const = TRUE; e->cval = val; } return e; } expr_t *make_exprd(enum expr_type type, double val) { expr_t *e = xmalloc(sizeof(expr_t)); e->type = type; e->ref = NULL; e->u.dval = val; e->is_const = TRUE; e->cval = val; return e; } expr_t *make_exprs(enum expr_type type, char *val) { expr_t *e; e = xmalloc(sizeof(expr_t)); e->type = type; e->ref = NULL; e->u.sval = val; e->is_const = FALSE; /* check for predefined constants */ switch (type) { case EXPR_IDENTIFIER: { var_t *c = find_const(val, 0); if (c) { e->u.sval = c->name; free(val); e->is_const = TRUE; e->cval = c->eval->cval; } break; } case EXPR_CHARCONST: if (!val[0]) error_loc("empty character constant\n"); else if (val[1]) error_loc("multi-character constants are endian dependent\n"); else { e->is_const = TRUE; e->cval = *val; } break; default: break; } return e; } expr_t *make_exprt(enum expr_type type, var_t *var, expr_t *expr) { expr_t *e; type_t *tref; if (var->stgclass != STG_NONE && var->stgclass != STG_REGISTER) error_loc("invalid storage class for type expression\n"); tref = var->type; e = xmalloc(sizeof(expr_t)); e->type = type; e->ref = expr; e->u.tref = tref; e->is_const = FALSE; if (type == EXPR_SIZEOF) { /* only do this for types that should be the same on all platforms */ if (is_integer_type(tref) || is_float_type(tref)) { e->is_const = TRUE; e->cval = type_memsize(tref); } } /* check for cast of constant expression */ if (type == EXPR_CAST && expr->is_const) { if (is_integer_type(tref)) { unsigned int cast_type_bits = type_memsize(tref) * 8; unsigned int cast_mask; e->is_const = TRUE; if (is_signed_integer_type(tref)) { cast_mask = (1u << (cast_type_bits - 1)) - 1; if (expr->cval & (1u << (cast_type_bits - 1))) e->cval = -((-expr->cval) & cast_mask); else e->cval = expr->cval & cast_mask; } else { /* calculate ((1 << cast_type_bits) - 1) avoiding overflow */ cast_mask = ((1u << (cast_type_bits - 1)) - 1) | 1u << (cast_type_bits - 1); e->cval = expr->cval & cast_mask; } } else { e->is_const = TRUE; e->cval = expr->cval; } } free(var); return e; } expr_t *make_expr1(enum expr_type type, expr_t *expr) { expr_t *e; e = xmalloc(sizeof(expr_t)); e->type = type; e->ref = expr; e->u.lval = 0; e->is_const = FALSE; /* check for compile-time optimization */ if (expr->is_const) { e->is_const = TRUE; switch (type) { case EXPR_LOGNOT: e->cval = !expr->cval; break; case EXPR_POS: e->cval = +expr->cval; break; case EXPR_NEG: e->cval = -expr->cval; break; case EXPR_NOT: e->cval = ~expr->cval; break; default: e->is_const = FALSE; break; } } return e; } expr_t *make_expr2(enum expr_type type, expr_t *expr1, expr_t *expr2) { expr_t *e; e = xmalloc(sizeof(expr_t)); e->type = type; e->ref = expr1; e->u.ext = expr2; e->is_const = FALSE; /* check for compile-time optimization */ if (expr1->is_const && expr2->is_const) { e->is_const = TRUE; switch (type) { case EXPR_ADD: e->cval = expr1->cval + expr2->cval; break; case EXPR_SUB: e->cval = expr1->cval - expr2->cval; break; case EXPR_MOD: if (expr2->cval == 0) { error_loc("divide by zero in expression\n"); e->cval = 0; } else e->cval = expr1->cval % expr2->cval; break; case EXPR_MUL: e->cval = expr1->cval * expr2->cval; break; case EXPR_DIV: if (expr2->cval == 0) { error_loc("divide by zero in expression\n"); e->cval = 0; } else e->cval = expr1->cval / expr2->cval; break; case EXPR_OR: e->cval = expr1->cval | expr2->cval; break; case EXPR_AND: e->cval = expr1->cval & expr2->cval; break; case EXPR_SHL: e->cval = expr1->cval << expr2->cval; break; case EXPR_SHR: e->cval = expr1->cval >> expr2->cval; break; case EXPR_LOGOR: e->cval = expr1->cval || expr2->cval; break; case EXPR_LOGAND: e->cval = expr1->cval && expr2->cval; break; case EXPR_XOR: e->cval = expr1->cval ^ expr2->cval; break; case EXPR_EQUALITY: e->cval = expr1->cval == expr2->cval; break; case EXPR_INEQUALITY: e->cval = expr1->cval != expr2->cval; break; case EXPR_GTR: e->cval = expr1->cval > expr2->cval; break; case EXPR_LESS: e->cval = expr1->cval < expr2->cval; break; case EXPR_GTREQL: e->cval = expr1->cval >= expr2->cval; break; case EXPR_LESSEQL: e->cval = expr1->cval <= expr2->cval; break; default: e->is_const = FALSE; break; } } return e; } expr_t *make_expr3(enum expr_type type, expr_t *expr1, expr_t *expr2, expr_t *expr3) { expr_t *e; e = xmalloc(sizeof(expr_t)); e->type = type; e->ref = expr1; e->u.ext = expr2; e->ext2 = expr3; e->is_const = FALSE; /* check for compile-time optimization */ if (expr1->is_const && expr2->is_const && expr3->is_const) { e->is_const = TRUE; switch (type) { case EXPR_COND: e->cval = expr1->cval ? expr2->cval : expr3->cval; break; default: e->is_const = FALSE; break; } } return e; } struct expression_type { int is_variable; /* is the expression resolved to a variable? */ int is_temporary; /* should the type be freed? */ type_t *type; }; static void check_scalar_type(const struct expr_loc *expr_loc, const type_t *cont_type, const type_t *type) { if (!cont_type || (!is_integer_type(type) && !is_ptr(type) && !is_float_type(type))) error_loc_info(&expr_loc->v->loc_info, "scalar type required in expression%s%s\n", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); } static void check_arithmetic_type(const struct expr_loc *expr_loc, const type_t *cont_type, const type_t *type) { if (!cont_type || (!is_integer_type(type) && !is_float_type(type))) error_loc_info(&expr_loc->v->loc_info, "arithmetic type required in expression%s%s\n", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); } static void check_integer_type(const struct expr_loc *expr_loc, const type_t *cont_type, const type_t *type) { if (!cont_type || !is_integer_type(type)) error_loc_info(&expr_loc->v->loc_info, "integer type required in expression%s%s\n", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); } static type_t *find_identifier(const char *identifier, const type_t *cont_type, int *found_in_cont_type) { type_t *type = NULL; const var_t *field; const var_list_t *fields = NULL; *found_in_cont_type = 0; if (cont_type) { switch (type_get_type(cont_type)) { case TYPE_FUNCTION: fields = type_function_get_args(cont_type); break; case TYPE_STRUCT: fields = type_struct_get_fields(cont_type); break; case TYPE_UNION: case TYPE_ENCAPSULATED_UNION: fields = type_union_get_cases(cont_type); break; case TYPE_VOID: case TYPE_BASIC: case TYPE_ENUM: case TYPE_MODULE: case TYPE_COCLASS: case TYPE_INTERFACE: case TYPE_POINTER: case TYPE_ARRAY: case TYPE_BITFIELD: /* nothing to do */ break; case TYPE_ALIAS: /* shouldn't get here because of using type_get_type above */ assert(0); break; } } if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) if (field->name && !strcmp(identifier, field->name)) { type = field->type; *found_in_cont_type = 1; break; } if (!type) { var_t *const_var = find_const(identifier, 0); if (const_var) type = const_var->type; } return type; } static int is_valid_member_operand(const type_t *type) { switch (type_get_type(type)) { case TYPE_STRUCT: case TYPE_UNION: case TYPE_ENUM: return TRUE; default: return FALSE; } } static struct expression_type resolve_expression(const struct expr_loc *expr_loc, const type_t *cont_type, const expr_t *e) { struct expression_type result; result.is_variable = FALSE; result.is_temporary = FALSE; result.type = NULL; switch (e->type) { case EXPR_VOID: break; case EXPR_HEXNUM: case EXPR_NUM: case EXPR_TRUEFALSE: result.is_temporary = FALSE; result.type = type_new_int(TYPE_BASIC_INT, 0); break; case EXPR_STRLIT: result.is_temporary = TRUE; result.type = type_new_pointer(FC_UP, type_new_int(TYPE_BASIC_CHAR, 0), NULL); break; case EXPR_WSTRLIT: result.is_temporary = TRUE; result.type = type_new_pointer(FC_UP, type_new_int(TYPE_BASIC_WCHAR, 0), NULL); break; case EXPR_CHARCONST: result.is_temporary = TRUE; result.type = type_new_int(TYPE_BASIC_CHAR, 0); break; case EXPR_DOUBLE: result.is_temporary = TRUE; result.type = type_new_basic(TYPE_BASIC_DOUBLE); break; case EXPR_IDENTIFIER: { int found_in_cont_type; result.is_variable = TRUE; result.is_temporary = FALSE; result.type = find_identifier(e->u.sval, cont_type, &found_in_cont_type); if (!result.type) { error_loc_info(&expr_loc->v->loc_info, "identifier %s cannot be resolved in expression%s%s\n", e->u.sval, expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); } break; } case EXPR_LOGNOT: result = resolve_expression(expr_loc, cont_type, e->ref); check_scalar_type(expr_loc, cont_type, result.type); result.is_variable = FALSE; result.is_temporary = FALSE; result.type = type_new_int(TYPE_BASIC_INT, 0); break; case EXPR_NOT: result = resolve_expression(expr_loc, cont_type, e->ref); check_integer_type(expr_loc, cont_type, result.type); result.is_variable = FALSE; break; case EXPR_POS: case EXPR_NEG: result = resolve_expression(expr_loc, cont_type, e->ref); check_arithmetic_type(expr_loc, cont_type, result.type); result.is_variable = FALSE; break; case EXPR_ADDRESSOF: result = resolve_expression(expr_loc, cont_type, e->ref); if (!result.is_variable) error_loc_info(&expr_loc->v->loc_info, "address-of operator applied to non-variable type in expression%s%s\n", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); result.is_variable = FALSE; result.is_temporary = TRUE; result.type = type_new_pointer(FC_UP, result.type, NULL); break; case EXPR_PPTR: result = resolve_expression(expr_loc, cont_type, e->ref); if (result.type && is_ptr(result.type)) result.type = type_pointer_get_ref(result.type); else if(result.type && is_array(result.type) && type_array_is_decl_as_ptr(result.type)) result.type = type_array_get_element(result.type); else error_loc_info(&expr_loc->v->loc_info, "dereference operator applied to non-pointer type in expression%s%s\n", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); break; case EXPR_CAST: result = resolve_expression(expr_loc, cont_type, e->ref); result.type = e->u.tref; break; case EXPR_SIZEOF: result.is_temporary = FALSE; result.type = type_new_int(TYPE_BASIC_INT, 0); break; case EXPR_SHL: case EXPR_SHR: case EXPR_MOD: case EXPR_MUL: case EXPR_DIV: case EXPR_ADD: case EXPR_SUB: case EXPR_AND: case EXPR_OR: case EXPR_XOR: { struct expression_type result_right; result = resolve_expression(expr_loc, cont_type, e->ref); result.is_variable = FALSE; result_right = resolve_expression(expr_loc, cont_type, e->u.ext); /* FIXME: these checks aren't strict enough for some of the operators */ check_scalar_type(expr_loc, cont_type, result.type); check_scalar_type(expr_loc, cont_type, result_right.type); break; } case EXPR_LOGOR: case EXPR_LOGAND: case EXPR_EQUALITY: case EXPR_INEQUALITY: case EXPR_GTR: case EXPR_LESS: case EXPR_GTREQL: case EXPR_LESSEQL: { struct expression_type result_left, result_right; result_left = resolve_expression(expr_loc, cont_type, e->ref); result_right = resolve_expression(expr_loc, cont_type, e->u.ext); check_scalar_type(expr_loc, cont_type, result_left.type); check_scalar_type(expr_loc, cont_type, result_right.type); result.is_temporary = FALSE; result.type = type_new_int(TYPE_BASIC_INT, 0); break; } case EXPR_MEMBER: result = resolve_expression(expr_loc, cont_type, e->ref); if (result.type && is_valid_member_operand(result.type)) result = resolve_expression(expr_loc, result.type, e->u.ext); else 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", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); break; case EXPR_COND: { struct expression_type result_first, result_second, result_third; result_first = resolve_expression(expr_loc, cont_type, e->ref); check_scalar_type(expr_loc, cont_type, result_first.type); result_second = resolve_expression(expr_loc, cont_type, e->u.ext); result_third = resolve_expression(expr_loc, cont_type, e->ext2); check_scalar_type(expr_loc, cont_type, result_second.type); check_scalar_type(expr_loc, cont_type, result_third.type); if (!is_ptr(result_second.type) ^ !is_ptr(result_third.type)) error_loc_info(&expr_loc->v->loc_info, "type mismatch in ?: expression\n" ); /* FIXME: determine the correct return type */ result = result_second; result.is_variable = FALSE; break; } case EXPR_ARRAY: result = resolve_expression(expr_loc, cont_type, e->ref); if (result.type && is_array(result.type)) { struct expression_type index_result; result.type = type_array_get_element(result.type); index_result = resolve_expression(expr_loc, cont_type /* FIXME */, e->u.ext); if (!index_result.type || !is_integer_type(index_result.type)) error_loc_info(&expr_loc->v->loc_info, "array subscript not of integral type in expression%s%s\n", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); } else error_loc_info(&expr_loc->v->loc_info, "array subscript operator applied to non-array type in expression%s%s\n", expr_loc->attr ? " for attribute " : "", expr_loc->attr ? expr_loc->attr : ""); break; } return result; } const type_t *expr_resolve_type(const struct expr_loc *expr_loc, const type_t *cont_type, const expr_t *expr) { struct expression_type expr_type; expr_type = resolve_expression(expr_loc, cont_type, expr); return expr_type.type; } void write_expr(FILE *h, const expr_t *e, int brackets, int toplevel, const char *toplevel_prefix, const type_t *cont_type, const char *local_var_prefix) { switch (e->type) { case EXPR_VOID: break; case EXPR_NUM: fprintf(h, "%u", e->u.lval); break; case EXPR_HEXNUM: fprintf(h, "0x%x", e->u.lval); break; case EXPR_DOUBLE: fprintf(h, "%#.15g", e->u.dval); break; case EXPR_TRUEFALSE: if (e->u.lval == 0) fprintf(h, "FALSE"); else fprintf(h, "TRUE"); break; case EXPR_IDENTIFIER: if (toplevel && toplevel_prefix && cont_type) { int found_in_cont_type; find_identifier(e->u.sval, cont_type, &found_in_cont_type); if (found_in_cont_type) { fprintf(h, "%s%s", toplevel_prefix, e->u.sval); break; } } fprintf(h, "%s%s", local_var_prefix, e->u.sval); break; case EXPR_STRLIT: fprintf(h, "\"%s\"", e->u.sval); break; case EXPR_WSTRLIT: fprintf(h, "L\"%s\"", e->u.sval); break; case EXPR_CHARCONST: fprintf(h, "'%s'", e->u.sval); break; case EXPR_LOGNOT: fprintf(h, "!"); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); break; case EXPR_NOT: fprintf(h, "~"); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); break; case EXPR_POS: fprintf(h, "+"); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); break; case EXPR_NEG: fprintf(h, "-"); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); break; case EXPR_ADDRESSOF: fprintf(h, "&"); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); break; case EXPR_PPTR: fprintf(h, "*"); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); break; case EXPR_CAST: fprintf(h, "("); write_type_decl(h, e->u.tref, NULL); fprintf(h, ")"); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); break; case EXPR_SIZEOF: fprintf(h, "sizeof("); write_type_decl(h, e->u.tref, NULL); fprintf(h, ")"); break; case EXPR_SHL: case EXPR_SHR: case EXPR_MOD: case EXPR_MUL: case EXPR_DIV: case EXPR_ADD: case EXPR_SUB: case EXPR_AND: case EXPR_OR: case EXPR_LOGOR: case EXPR_LOGAND: case EXPR_XOR: case EXPR_EQUALITY: case EXPR_INEQUALITY: case EXPR_GTR: case EXPR_LESS: case EXPR_GTREQL: case EXPR_LESSEQL: if (brackets) fprintf(h, "("); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); switch (e->type) { case EXPR_SHL: fprintf(h, " << "); break; case EXPR_SHR: fprintf(h, " >> "); break; case EXPR_MOD: fprintf(h, " %% "); break; case EXPR_MUL: fprintf(h, " * "); break; case EXPR_DIV: fprintf(h, " / "); break; case EXPR_ADD: fprintf(h, " + "); break; case EXPR_SUB: fprintf(h, " - "); break; case EXPR_AND: fprintf(h, " & "); break; case EXPR_OR: fprintf(h, " | "); break; case EXPR_LOGOR: fprintf(h, " || "); break; case EXPR_LOGAND: fprintf(h, " && "); break; case EXPR_XOR: fprintf(h, " ^ "); break; case EXPR_EQUALITY: fprintf(h, " == "); break; case EXPR_INEQUALITY: fprintf(h, " != "); break; case EXPR_GTR: fprintf(h, " > "); break; case EXPR_LESS: fprintf(h, " < "); break; case EXPR_GTREQL: fprintf(h, " >= "); break; case EXPR_LESSEQL: fprintf(h, " <= "); break; default: break; } write_expr(h, e->u.ext, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); if (brackets) fprintf(h, ")"); break; case EXPR_MEMBER: if (brackets) fprintf(h, "("); if (e->ref->type == EXPR_PPTR) { write_expr(h, e->ref->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); fprintf(h, "->"); } else { write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); fprintf(h, "."); } write_expr(h, e->u.ext, 1, 0, toplevel_prefix, cont_type, ""); if (brackets) fprintf(h, ")"); break; case EXPR_COND: if (brackets) fprintf(h, "("); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); fprintf(h, " ? "); write_expr(h, e->u.ext, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); fprintf(h, " : "); write_expr(h, e->ext2, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); if (brackets) fprintf(h, ")"); break; case EXPR_ARRAY: if (brackets) fprintf(h, "("); write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix); fprintf(h, "["); write_expr(h, e->u.ext, 1, 1, toplevel_prefix, cont_type, local_var_prefix); fprintf(h, "]"); if (brackets) fprintf(h, ")"); break; } } /* This is actually fairly involved to implement precisely, due to the effects attributes may have and things like that. Right now this is only used for optimization, so just check for a very small set of criteria that guarantee the types are equivalent; assume every thing else is different. */ static int compare_type(const type_t *a, const type_t *b) { if (a == b || (a->name && b->name && strcmp(a->name, b->name) == 0)) return 0; /* Ordering doesn't need to be implemented yet. */ return 1; } int compare_expr(const expr_t *a, const expr_t *b) { int ret; if (a->type != b->type) return a->type - b->type; switch (a->type) { case EXPR_NUM: case EXPR_HEXNUM: case EXPR_TRUEFALSE: return a->u.lval - b->u.lval; case EXPR_DOUBLE: return a->u.dval - b->u.dval; case EXPR_IDENTIFIER: case EXPR_STRLIT: case EXPR_WSTRLIT: case EXPR_CHARCONST: return strcmp(a->u.sval, b->u.sval); case EXPR_COND: ret = compare_expr(a->ref, b->ref); if (ret != 0) return ret; ret = compare_expr(a->u.ext, b->u.ext); if (ret != 0) return ret; return compare_expr(a->ext2, b->ext2); case EXPR_OR: case EXPR_AND: case EXPR_ADD: case EXPR_SUB: case EXPR_MOD: case EXPR_MUL: case EXPR_DIV: case EXPR_SHL: case EXPR_SHR: case EXPR_MEMBER: case EXPR_ARRAY: case EXPR_LOGOR: case EXPR_LOGAND: case EXPR_XOR: case EXPR_EQUALITY: case EXPR_INEQUALITY: case EXPR_GTR: case EXPR_LESS: case EXPR_GTREQL: case EXPR_LESSEQL: ret = compare_expr(a->ref, b->ref); if (ret != 0) return ret; return compare_expr(a->u.ext, b->u.ext); case EXPR_CAST: ret = compare_type(a->u.tref, b->u.tref); if (ret != 0) return ret; /* Fall through. */ case EXPR_NOT: case EXPR_NEG: case EXPR_PPTR: case EXPR_ADDRESSOF: case EXPR_LOGNOT: case EXPR_POS: return compare_expr(a->ref, b->ref); case EXPR_SIZEOF: return compare_type(a->u.tref, b->u.tref); case EXPR_VOID: return 0; } return -1; } ================================================ FILE: widl/expr.h ================================================ /* * Expression Abstract Syntax Tree Functions * * Copyright 2002 Ove Kaaven * Copyright 2006-2008 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ struct expr_loc { const var_t *v; const char *attr; }; extern expr_t *make_expr(enum expr_type type); extern expr_t *make_exprl(enum expr_type type, int val); extern expr_t *make_exprd(enum expr_type type, double val); extern expr_t *make_exprs(enum expr_type type, char *val); extern expr_t *make_exprt(enum expr_type type, var_t *var, expr_t *expr); extern expr_t *make_expr1(enum expr_type type, expr_t *expr); extern expr_t *make_expr2(enum expr_type type, expr_t *exp1, expr_t *exp2); extern expr_t *make_expr3(enum expr_type type, expr_t *expr1, expr_t *expr2, expr_t *expr3); extern const type_t *expr_resolve_type(const struct expr_loc *expr_loc, const type_t *cont_type, const expr_t *expr); extern int compare_expr(const expr_t *a, const expr_t *b); extern void write_expr(FILE *h, const expr_t *e, int brackets, int toplevel, const char *toplevel_prefix, const type_t *cont_type, const char *local_var_prefix); ================================================ FILE: widl/getopt.c ================================================ #ifdef _MSC_VER /* Getopt for Microsoft C This code is a modification of the Free Software Foundation, Inc. Getopt library for parsing command line argument the purpose was to provide a Microsoft Visual C friendly derivative. This code provides functionality for both Unicode and Multibyte builds. Date: 02/03/2011 - Ludvik Jerabek - Initial Release Version: 1.0 Comment: Supports getopt, getopt_long, and getopt_long_only and POSIXLY_CORRECT environment flag License: LGPL Revisions: 02/03/2011 - Ludvik Jerabek - Initial Release 02/20/2011 - Ludvik Jerabek - Fixed compiler warnings at Level 4 07/05/2011 - Ludvik Jerabek - Added no_argument, required_argument, optional_argument defs 08/03/2011 - Ludvik Jerabek - Fixed non-argument runtime bug which caused runtime exception 08/09/2011 - Ludvik Jerabek - Added code to export functions for DLL and LIB 02/15/2012 - Ludvik Jerabek - Fixed _GETOPT_THROW definition missing in implementation file 08/01/2012 - Ludvik Jerabek - Created separate functions for char and wchar_t characters so single dll can do both unicode and ansi 10/15/2012 - Ludvik Jerabek - Modified to match latest GNU features 06/19/2015 - Ludvik Jerabek - Fixed maximum option limitation caused by option_a (255) and option_w (65535) structure val variable **DISCLAIMER** THIS MATERIAL IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT Not LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. IN NO EVENT WILL I BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THIS MATERIAL INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON YOUR INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN If WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. */ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include "getopt_msvc.h" #ifdef __cplusplus #define _GETOPT_THROW throw() #else #define _GETOPT_THROW #endif int optind = 1; int opterr = 1; int optopt = '?'; enum ENUM_ORDERING { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER }; // // // Ansi structures and functions follow // // static struct _getopt_data_a { int optind; int opterr; int optopt; char *optarg; int __initialized; char *__nextchar; enum ENUM_ORDERING __ordering; int __posixly_correct; int __first_nonopt; int __last_nonopt; } getopt_data_a; char *optarg_a; static void exchange_a(char **argv, struct _getopt_data_a *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; char *tem; while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { int len = middle - bottom; register int i; for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } top -= len; } else { int len = top - middle; register int i; for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } bottom += len; } } d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } static const char *_getopt_initialize_a (const char *optstring, struct _getopt_data_a *d, int posixly_correct) { d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; d->__posixly_correct = posixly_correct | !!getenv("POSIXLY_CORRECT"); if (optstring[0] == '-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (d->__posixly_correct) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; return optstring; } int _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) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) { if (d->optind == 0) d->optind = 1; optstring = _getopt_initialize_a (optstring, d, posixly_correct); d->__initialized = 1; } else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; if (d->__nextchar == NULL || *d->__nextchar == '\0') { if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange_a ((char **) argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; while (d->optind < argc && (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')) d->optind++; d->__last_nonopt = d->optind; } if (d->optind != argc && !strcmp(argv[d->optind], "--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange_a((char **) argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } if (d->optind == argc) { if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } if ((argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } d->__nextchar = (argv[d->optind] + 1 + (longopts != NULL && argv[d->optind][1] == '-')); } if (longopts != NULL && (argv[d->optind][1] == '-' || (long_only && (argv[d->optind][2] || !strchr(optstring, argv[d->optind][1]))))) { char *nameend; unsigned int namelen; const struct option_a *p; const struct option_a *pfound = NULL; struct option_list { const struct option_a *p; struct option_list *next; } *ambig_list = NULL; int exact = 0; int indfound = -1; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++); namelen = (unsigned int)(nameend - d->__nextchar); for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp(p->name, d->__nextchar, namelen)) { if (namelen == (unsigned int)strlen(p->name)) { pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { struct option_list *newp = (struct option_list*)alloca(sizeof(*newp)); newp->p = p; newp->next = ambig_list; ambig_list = newp; } } if (ambig_list != NULL && !exact) { if (print_errors) { struct option_list first; first.p = pfound; first.next = ambig_list; ambig_list = &first; fprintf (stderr, "%s: option '%s' is ambiguous; possibilities:", argv[0], argv[d->optind]); do { fprintf (stderr, " '--%s'", ambig_list->p->name); ambig_list = ambig_list->next; } while (ambig_list != NULL); fputc ('\n', stderr); } d->__nextchar += strlen(d->__nextchar); d->optind++; d->optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; d->optind++; if (*nameend) { if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) { if (argv[d->optind - 1][1] == '-') { fprintf(stderr, "%s: option '--%s' doesn't allow an argument\n",argv[0], pfound->name); } else { fprintf(stderr, "%s: option '%c%s' doesn't allow an argument\n",argv[0], argv[d->optind - 1][0],pfound->name); } } d->__nextchar += strlen(d->__nextchar); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) { fprintf(stderr,"%s: option '--%s' requires an argument\n",argv[0], pfound->name); } d->__nextchar += strlen(d->__nextchar); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } d->__nextchar += strlen(d->__nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } if (!long_only || argv[d->optind][1] == '-' || strchr(optstring, *d->__nextchar) == NULL) { if (print_errors) { if (argv[d->optind][1] == '-') { fprintf(stderr, "%s: unrecognized option '--%s'\n",argv[0], d->__nextchar); } else { fprintf(stderr, "%s: unrecognized option '%c%s'\n",argv[0], argv[d->optind][0], d->__nextchar); } } d->__nextchar = (char *)""; d->optind++; d->optopt = 0; return '?'; } } { char c = *d->__nextchar++; char *temp = (char*)strchr(optstring, c); if (*d->__nextchar == '\0') ++d->optind; if (temp == NULL || c == ':' || c == ';') { if (print_errors) { fprintf(stderr, "%s: invalid option -- '%c'\n", argv[0], c); } d->optopt = c; return '?'; } if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option_a *p; const struct option_a *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; if (longopts == NULL) goto no_longs; if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else if (d->optind == argc) { if (print_errors) { fprintf(stderr,"%s: option requires an argument -- '%c'\n",argv[0], c); } d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else d->optarg = argv[d->optind++]; for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; nameend++); for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp(p->name, d->__nextchar, nameend - d->__nextchar)) { if ((unsigned int) (nameend - d->__nextchar) == strlen(p->name)) { pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) ambig = 1; } if (ambig && !exact) { if (print_errors) { fprintf(stderr, "%s: option '-W %s' is ambiguous\n",argv[0], d->optarg); } d->__nextchar += strlen(d->__nextchar); d->optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) { fprintf(stderr, "%s: option '-W %s' doesn't allow an argument\n",argv[0], pfound->name); } d->__nextchar += strlen(d->__nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) { fprintf(stderr, "%s: option '-W %s' requires an argument\n",argv[0], pfound->name); } d->__nextchar += strlen(d->__nextchar); return optstring[0] == ':' ? ':' : '?'; } } else d->optarg = NULL; d->__nextchar += strlen(d->__nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } no_longs: d->__nextchar = NULL; return 'W'; } if (temp[1] == ':') { if (temp[2] == ':') { if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else if (d->optind == argc) { if (print_errors) { fprintf(stderr,"%s: option requires an argument -- '%c'\n",argv[0], c); } d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _getopt_internal_a (int argc, char *const *argv, const char *optstring, const struct option_a *longopts, int *longind, int long_only, int posixly_correct) { int result; getopt_data_a.optind = optind; getopt_data_a.opterr = opterr; result = _getopt_internal_r_a (argc, argv, optstring, longopts,longind, long_only, &getopt_data_a,posixly_correct); optind = getopt_data_a.optind; optarg_a = getopt_data_a.optarg; optopt = getopt_data_a.optopt; return result; } int getopt_a (int argc, char *const *argv, const char *optstring) _GETOPT_THROW { return _getopt_internal_a (argc, argv, optstring, (const struct option_a *) 0, (int *) 0, 0, 0); } int getopt_long_a (int argc, char *const *argv, const char *options, const struct option_a *long_options, int *opt_index) _GETOPT_THROW { return _getopt_internal_a (argc, argv, options, long_options, opt_index, 0, 0); } int getopt_long_only_a (int argc, char *const *argv, const char *options, const struct option_a *long_options, int *opt_index) _GETOPT_THROW { return _getopt_internal_a (argc, argv, options, long_options, opt_index, 1, 0); } int _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) { return _getopt_internal_r_a (argc, argv, options, long_options, opt_index,0, d, 0); } int _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) { return _getopt_internal_r_a (argc, argv, options, long_options, opt_index, 1, d, 0); } // // // Unicode Structures and Functions // // static struct _getopt_data_w { int optind; int opterr; int optopt; wchar_t *optarg; int __initialized; wchar_t *__nextchar; enum ENUM_ORDERING __ordering; int __posixly_correct; int __first_nonopt; int __last_nonopt; } getopt_data_w; wchar_t *optarg_w; static void exchange_w(wchar_t **argv, struct _getopt_data_w *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; wchar_t *tem; while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { int len = middle - bottom; register int i; for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } top -= len; } else { int len = top - middle; register int i; for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } bottom += len; } } d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } static const wchar_t *_getopt_initialize_w (const wchar_t *optstring, struct _getopt_data_w *d, int posixly_correct) { d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; d->__posixly_correct = posixly_correct | !!_wgetenv(L"POSIXLY_CORRECT"); if (optstring[0] == L'-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == L'+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (d->__posixly_correct) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; return optstring; } int _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) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) { if (d->optind == 0) d->optind = 1; optstring = _getopt_initialize_w (optstring, d, posixly_correct); d->__initialized = 1; } else if (optstring[0] == L'-' || optstring[0] == L'+') optstring++; if (optstring[0] == L':') print_errors = 0; if (d->__nextchar == NULL || *d->__nextchar == L'\0') { if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange_w((wchar_t **) argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; while (d->optind < argc && (argv[d->optind][0] != L'-' || argv[d->optind][1] == L'\0')) d->optind++; d->__last_nonopt = d->optind; } if (d->optind != argc && !wcscmp(argv[d->optind], L"--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange_w((wchar_t **) argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } if (d->optind == argc) { if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } if ((argv[d->optind][0] != L'-' || argv[d->optind][1] == L'\0')) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } d->__nextchar = (argv[d->optind] + 1 + (longopts != NULL && argv[d->optind][1] == L'-')); } if (longopts != NULL && (argv[d->optind][1] == L'-' || (long_only && (argv[d->optind][2] || !wcschr(optstring, argv[d->optind][1]))))) { wchar_t *nameend; unsigned int namelen; const struct option_w *p; const struct option_w *pfound = NULL; struct option_list { const struct option_w *p; struct option_list *next; } *ambig_list = NULL; int exact = 0; int indfound = -1; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != L'='; nameend++); namelen = (unsigned int)(nameend - d->__nextchar); for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!wcsncmp(p->name, d->__nextchar, namelen)) { if (namelen == (unsigned int)wcslen(p->name)) { pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { struct option_list *newp = (struct option_list*)alloca(sizeof(*newp)); newp->p = p; newp->next = ambig_list; ambig_list = newp; } } if (ambig_list != NULL && !exact) { if (print_errors) { struct option_list first; first.p = pfound; first.next = ambig_list; ambig_list = &first; fwprintf(stderr, L"%s: option '%s' is ambiguous; possibilities:", argv[0], argv[d->optind]); do { fwprintf (stderr, L" '--%s'", ambig_list->p->name); ambig_list = ambig_list->next; } while (ambig_list != NULL); fputwc (L'\n', stderr); } d->__nextchar += wcslen(d->__nextchar); d->optind++; d->optopt = 0; return L'?'; } if (pfound != NULL) { option_index = indfound; d->optind++; if (*nameend) { if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) { if (argv[d->optind - 1][1] == L'-') { fwprintf(stderr, L"%s: option '--%s' doesn't allow an argument\n",argv[0], pfound->name); } else { fwprintf(stderr, L"%s: option '%c%s' doesn't allow an argument\n",argv[0], argv[d->optind - 1][0],pfound->name); } } d->__nextchar += wcslen(d->__nextchar); d->optopt = pfound->val; return L'?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) { fwprintf(stderr,L"%s: option '--%s' requires an argument\n",argv[0], pfound->name); } d->__nextchar += wcslen(d->__nextchar); d->optopt = pfound->val; return optstring[0] == L':' ? L':' : L'?'; } } d->__nextchar += wcslen(d->__nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } if (!long_only || argv[d->optind][1] == L'-' || wcschr(optstring, *d->__nextchar) == NULL) { if (print_errors) { if (argv[d->optind][1] == L'-') { fwprintf(stderr, L"%s: unrecognized option '--%s'\n",argv[0], d->__nextchar); } else { fwprintf(stderr, L"%s: unrecognized option '%c%s'\n",argv[0], argv[d->optind][0], d->__nextchar); } } d->__nextchar = (wchar_t *)L""; d->optind++; d->optopt = 0; return L'?'; } } { wchar_t c = *d->__nextchar++; wchar_t *temp = (wchar_t*)wcschr(optstring, c); if (*d->__nextchar == L'\0') ++d->optind; if (temp == NULL || c == L':' || c == L';') { if (print_errors) { fwprintf(stderr, L"%s: invalid option -- '%c'\n", argv[0], c); } d->optopt = c; return L'?'; } if (temp[0] == L'W' && temp[1] == L';') { wchar_t *nameend; const struct option_w *p; const struct option_w *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; if (longopts == NULL) goto no_longs; if (*d->__nextchar != L'\0') { d->optarg = d->__nextchar; d->optind++; } else if (d->optind == argc) { if (print_errors) { fwprintf(stderr,L"%s: option requires an argument -- '%c'\n",argv[0], c); } d->optopt = c; if (optstring[0] == L':') c = L':'; else c = L'?'; return c; } else d->optarg = argv[d->optind++]; for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != L'='; nameend++); for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!wcsncmp(p->name, d->__nextchar, nameend - d->__nextchar)) { if ((unsigned int) (nameend - d->__nextchar) == wcslen(p->name)) { pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) ambig = 1; } if (ambig && !exact) { if (print_errors) { fwprintf(stderr, L"%s: option '-W %s' is ambiguous\n",argv[0], d->optarg); } d->__nextchar += wcslen(d->__nextchar); d->optind++; return L'?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) { fwprintf(stderr, L"%s: option '-W %s' doesn't allow an argument\n",argv[0], pfound->name); } d->__nextchar += wcslen(d->__nextchar); return L'?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) { fwprintf(stderr, L"%s: option '-W %s' requires an argument\n",argv[0], pfound->name); } d->__nextchar += wcslen(d->__nextchar); return optstring[0] == L':' ? L':' : L'?'; } } else d->optarg = NULL; d->__nextchar += wcslen(d->__nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } no_longs: d->__nextchar = NULL; return L'W'; } if (temp[1] == L':') { if (temp[2] == L':') { if (*d->__nextchar != L'\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { if (*d->__nextchar != L'\0') { d->optarg = d->__nextchar; d->optind++; } else if (d->optind == argc) { if (print_errors) { fwprintf(stderr,L"%s: option requires an argument -- '%c'\n",argv[0], c); } d->optopt = c; if (optstring[0] == L':') c = L':'; else c = L'?'; } else d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _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) { int result; getopt_data_w.optind = optind; getopt_data_w.opterr = opterr; result = _getopt_internal_r_w (argc, argv, optstring, longopts,longind, long_only, &getopt_data_w,posixly_correct); optind = getopt_data_w.optind; optarg_w = getopt_data_w.optarg; optopt = getopt_data_w.optopt; return result; } int getopt_w (int argc, wchar_t *const *argv, const wchar_t *optstring) _GETOPT_THROW { return _getopt_internal_w (argc, argv, optstring, (const struct option_w *) 0, (int *) 0, 0, 0); } 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 { return _getopt_internal_w (argc, argv, options, long_options, opt_index, 0, 0); } 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 { return _getopt_internal_w (argc, argv, options, long_options, opt_index, 1, 0); } int _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) { return _getopt_internal_r_w (argc, argv, options, long_options, opt_index,0, d, 0); } int _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) { return _getopt_internal_r_w (argc, argv, options, long_options, opt_index, 1, d, 0); } #endif ================================================ FILE: widl/getopt_msvc.h ================================================ #ifdef _MSC_VER /* Getopt for Microsoft C This code is a modification of the Free Software Foundation, Inc. Getopt library for parsing command line argument the purpose was to provide a Microsoft Visual C friendly derivative. This code provides functionality for both Unicode and Multibyte builds. Date: 02/03/2011 - Ludvik Jerabek - Initial Release Version: 1.0 Comment: Supports getopt, getopt_long, and getopt_long_only and POSIXLY_CORRECT environment flag License: LGPL Revisions: 02/03/2011 - Ludvik Jerabek - Initial Release 02/20/2011 - Ludvik Jerabek - Fixed compiler warnings at Level 4 07/05/2011 - Ludvik Jerabek - Added no_argument, required_argument, optional_argument defs 08/03/2011 - Ludvik Jerabek - Fixed non-argument runtime bug which caused runtime exception 08/09/2011 - Ludvik Jerabek - Added code to export functions for DLL and LIB 02/15/2012 - Ludvik Jerabek - Fixed _GETOPT_THROW definition missing in implementation file 08/01/2012 - Ludvik Jerabek - Created separate functions for char and wchar_t characters so single dll can do both unicode and ansi 10/15/2012 - Ludvik Jerabek - Modified to match latest GNU features 06/19/2015 - Ludvik Jerabek - Fixed maximum option limitation caused by option_a (255) and option_w (65535) structure val variable **DISCLAIMER** THIS MATERIAL IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT Not LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. IN NO EVENT WILL I BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THIS MATERIAL INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON YOUR INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN If WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. */ #ifndef __GETOPT_H_ #define __GETOPT_H_ #ifdef _GETOPT_API #undef _GETOPT_API #endif #if defined(EXPORTS_GETOPT) && defined(STATIC_GETOPT) #error "The preprocessor definitions of EXPORTS_GETOPT and STATIC_GETOPT can only be used individually" #elif defined(STATIC_GETOPT) #pragma message("Warning static builds of getopt violate the Lesser GNU Public License") #define _GETOPT_API #elif defined(EXPORTS_GETOPT) #pragma message("Exporting getopt library") #define _GETOPT_API __declspec(dllexport) #else #pragma message("Importing getopt library") #define _GETOPT_API __declspec(dllimport) #endif // Change behavior for C\C++ #ifdef __cplusplus #define _BEGIN_EXTERN_C extern "C" { #define _END_EXTERN_C } #define _GETOPT_THROW throw() #else #define _BEGIN_EXTERN_C #define _END_EXTERN_C #define _GETOPT_THROW #endif // Standard GNU options #define null_argument 0 /*Argument Null*/ #define no_argument 0 /*Argument Switch Only*/ #define required_argument 1 /*Argument Required*/ #define optional_argument 2 /*Argument Optional*/ // Shorter Options #define ARG_NULL 0 /*Argument Null*/ #define ARG_NONE 0 /*Argument Switch Only*/ #define ARG_REQ 1 /*Argument Required*/ #define ARG_OPT 2 /*Argument Optional*/ #include #include _BEGIN_EXTERN_C extern _GETOPT_API int optind; extern _GETOPT_API int opterr; extern _GETOPT_API int optopt; // Ansi struct option_a { const char* name; int has_arg; int *flag; int val; }; extern _GETOPT_API char *optarg_a; extern _GETOPT_API int getopt_a(int argc, char *const *argv, const char *optstring) _GETOPT_THROW; extern _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; extern _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; // Unicode struct option_w { const wchar_t* name; int has_arg; int *flag; int val; }; extern _GETOPT_API wchar_t *optarg_w; extern _GETOPT_API int getopt_w(int argc, wchar_t *const *argv, const wchar_t *optstring) _GETOPT_THROW; extern _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; extern _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; _END_EXTERN_C #undef _BEGIN_EXTERN_C #undef _END_EXTERN_C #undef _GETOPT_THROW #undef _GETOPT_API #ifdef _UNICODE #define getopt getopt_w #define getopt_long getopt_long_w #define getopt_long_only getopt_long_only_w #define option option_w #define optarg optarg_w #else #define getopt getopt_a #define getopt_long getopt_long_a #define getopt_long_only getopt_long_only_a #define option option_a #define optarg optarg_a #endif #endif // __GETOPT_H_ #endif ================================================ FILE: widl/hash.c ================================================ /* * Oleaut32 hash functions * * Copyright 1999 Corel Corporation * Copyright 2001-2003 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include "windef.h" #include "winbase.h" #include "winnls.h" #include "widltypes.h" #include "hash.h" static const unsigned char Lookup_16[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, /* Windows */ 0x7F, 0x7F, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x7F, 0x89, 0x53, 0x8B, 0x8C, 0x7F, 0x7F, 0x7F, 0x7F, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x96, 0x98, 0x99, 0x53, 0x9B, 0x8C, 0x7F, 0x7F, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x96, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x55, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xF7, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x55, 0xDE, 0x55, /* Mac */ 0x41, 0x41, 0x43, 0x45, 0x4E, 0x4F, 0x55, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x55, 0x55, 0x55, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0x41, 0x4F, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0x41, 0x4F, 0xBD, 0x41, 0x4F, 0xC0, 0xC1, 0xC2, 0xC3, 0x46, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0x41, 0x41, 0x4F, 0xCE, 0xCE, 0xD0, 0xD0, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0x55, 0x55, 0xDA, 0xDB, 0xDC, 0xDD, 0x3F, 0x3F, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0x41, 0x45, 0x41, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4F, 0x4F, 0x3F, 0x4F, 0x55, 0x55, 0x55, 0x49, 0x7F, 0xF7, 0x7F, 0xF9, 0xFA, 0xFB, 0x3F, 0xFD, 0xFE, 0x7F }; static const unsigned char Lookup_32[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, /* Windows */ 0x7F, 0x7F, 0x82, 0x7F, 0x84, 0x85, 0x86, 0x87, 0x7F, 0x89, 0x53, 0x8B, 0x53, 0x54, 0x5A, 0x5A, 0x7F, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x96, 0x7F, 0x99, 0x53, 0x9B, 0x53, 0x54, 0x5A, 0x5A, 0xA0, 0x7F, 0xA2, 0x4C, 0xA4, 0x41, 0xA6, 0xA7, 0xA8, 0xA9, 0x53, 0xAB, 0xAC, 0x96, 0xAE, 0x5A, 0xB0, 0xB1, 0xB2, 0x4C, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x41, 0x53, 0xBB, 0x4C, 0xBD, 0x4C, 0x5A, 0x52, 0x41, 0x41, 0x41, 0x41, 0x4C, 0x43, 0x43, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x44, 0xD0, 0x4E, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x52, 0x55, 0x55, 0x55, 0x55, 0x59, 0x54, 0xDF, 0x52, 0x41, 0x41, 0x41, 0x41, 0x4C, 0x43, 0x43, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x44, 0xD0, 0x4E, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xF7, 0x52, 0x55, 0x55, 0x55, 0x55, 0x59, 0x54, 0xFF, /* Mac */ 0x41, 0x41, 0x41, 0x45, 0x41, 0x4F, 0x55, 0x41, 0x41, 0x43, 0x41, 0x43, 0x43, 0x43, 0x45, 0x5A, 0x5A, 0x44, 0x49, 0x44, 0x45, 0x45, 0x45, 0x4F, 0x45, 0x4F, 0x4F, 0x4F, 0x55, 0x45, 0x45, 0x55, 0xA0, 0xA1, 0x45, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0x45, 0xAC, 0xAD, 0x47, 0x49, 0x49, 0x49, 0xB2, 0xB3, 0x49, 0x4B, 0xB6, 0xB7, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4E, 0x4E, 0x4E, 0xC2, 0xC3, 0x4E, 0x4E, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD0, 0xD0, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0x4F, 0x52, 0x52, 0x52, 0xDC, 0xDD, 0x52, 0x52, 0x52, 0x53, 0xE2, 0xE3, 0x53, 0x53, 0x53, 0x41, 0x54, 0x54, 0x49, 0x5A, 0x5A, 0x55, 0x4F, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x59, 0x59, 0x4B, 0x5A, 0x4C, 0x4C, 0x47, 0xFF }; static const unsigned char Lookup_48[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, /* Windows */ 0x7F, 0x7F, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x7F, 0x89, 0x53, 0x8B, 0x8C, 0x7F, 0x7F, 0x7F, 0x7F, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x96, 0x98, 0x99, 0x53, 0x9B, 0x8C, 0x7F, 0x7F, 0x59, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x96, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x59, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xF7, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x59, 0xDE, 0x59, /* Mac */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAB, 0xAD, 0xAE, 0xAE, 0xB0, 0xB1, 0xB2, 0xB3, 0xA7, 0xB5, 0xB6, 0xB7, 0xB8, 0xB8, 0xBA, 0xBA, 0xBC, 0xBC, 0xBE, 0xBE, 0xB7, 0xC1, 0xC2, 0xC3, 0x46, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCB, 0xCD, 0xCD, 0xC1, 0xD0, 0xD0, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD8, 0xDA, 0xDA, 0xDC, 0xDD, 0xDD, 0x9F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F }; static const unsigned char Lookup_64[128 * 3] = { /* Common */ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, /* Windows */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x96, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x55, 0xDE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Mac */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x96, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x55, 0xDE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned char Lookup_80[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, /* Windows */ 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, /* Mac */ 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, }; static const unsigned char Lookup_112[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, /* Windows */ 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, /* Mac */ 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, }; static const unsigned char Lookup_128[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x00, /* Windows */ 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x00, 0x8B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x00, 0x99, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x00, 0xAB, 0xAC, 0x2D, 0xAE, 0x2D, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xBA, 0xA2, 0xC2, 0xC3, 0xC4, 0xB8, 0xC6, 0xB9, 0xC8, 0xBA, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xBC, 0xD0, 0xD1, 0x00, 0xD3, 0xD4, 0xBE, 0xD6, 0xD7, 0xD8, 0xBF, 0xBA, 0xBE, 0xA2, 0xB8, 0xB9, 0xBA, 0xBE, 0xA2, 0xC2, 0xC3, 0xC4, 0xB8, 0xC6, 0xB9, 0xC8, 0xBA, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xBC, 0xD0, 0xD1, 0xD3, 0xD3, 0xD4, 0xBE, 0xD6, 0xD7, 0xD8, 0xBF, 0xBA, 0xBE, 0xBC, 0xBE, 0xBF, 0x00, /* Mac */ 0x41, 0x31, 0x32, 0x45, 0x33, 0x4F, 0x55, 0x87, 0x41, 0x41, 0x41, 0x00, 0x8C, 0x43, 0x45, 0x45, 0x45, 0x45, 0x92, 0x93, 0x49, 0x49, 0x96, 0x97, 0x98, 0x4F, 0x4F, 0x9B, 0x3F, 0x55, 0x55, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xAB, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xB0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0x09, 0xBD, 0xCC, 0xB0, 0xB6, 0xCF, 0x2D, 0x2D, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xB8, 0xAB, 0xC3, 0xBD, 0xB6, 0xB8, 0xAB, 0xC3, 0xBF, 0xBD, 0xB0, 0xB5, 0xBE, 0xA2, 0xB6, 0xBC, 0xA1, 0xB8, 0xAB, 0xA5, 0xBA, 0xA4, 0xBB, 0xC1, 0xC3, 0xA6, 0xBF, 0xC4, 0xAA, 0xC6, 0xA3, 0xBF, 0xAA, 0xCC, 0xBD, 0xB7, 0xAB, 0xBD, 0xAB, 0xBD, 0x3F, }; static const unsigned char Lookup_144[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x00, /* Windows */ 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99, 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0xC1, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0xC9, 0x45, 0x45, 0x49, 0xCD, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0xD3, 0x4F, 0x4F, 0xD6, 0xD7, 0xD6, 0x55, 0xDA, 0x55, 0x55, 0xDD, 0xDE, 0xDF, 0x41, 0xC1, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0xC9, 0x45, 0x45, 0x49, 0xCD, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0xD3, 0x4F, 0x4F, 0xD6, 0xF7, 0xD6, 0x55, 0xDA, 0x55, 0x55, 0xDD, 0xDE, 0x59, /* Mac */ 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99, 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0xC1, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0xC9, 0x45, 0x45, 0x49, 0xCD, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0xD3, 0x4F, 0x4F, 0xD6, 0xD7, 0xD6, 0x55, 0xDA, 0x55, 0x55, 0xDD, 0xDE, 0xDF, 0x41, 0xC1, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0xC9, 0x45, 0x45, 0x49, 0xCD, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0xD3, 0x4F, 0x4F, 0xD6, 0xF7, 0xD6, 0x55, 0xDA, 0x55, 0x55, 0xDD, 0xDE, 0x59, }; static const unsigned char Lookup_160[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x00, /* Windows */ 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99, 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0xC7, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xD7, 0x4F, 0x55, 0x55, 0x55, 0xDC, 0xDD, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0xC7, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xF7, 0x4F, 0x55, 0x55, 0x55, 0xDC, 0xDD, 0xDE, 0x59, /* Mac */ 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99, 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0xC7, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xD7, 0x4F, 0x55, 0x55, 0x55, 0xDC, 0xDD, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0xC7, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xF7, 0x4F, 0x55, 0x55, 0x55, 0xDC, 0xDD, 0xDE, 0x59, }; static const unsigned char Lookup_176[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x00, /* Windows */ 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99, 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41, 0x41, 0x41, 0x41, 0xC4, 0xC5, 0xC4, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xD7, 0xD6, 0x55, 0x55, 0x55, 0x59, 0x59, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0xC4, 0xC5, 0xC4, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xF7, 0xD6, 0x55, 0x55, 0x55, 0x59, 0x59, 0xDE, 0x59, /* Mac */ 0x80, 0x81, 0x43, 0x45, 0x4E, 0x85, 0x59, 0x41, 0x41, 0x41, 0x80, 0x41, 0x81, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4E, 0x4F, 0x4F, 0x4F, 0x85, 0x4F, 0x55, 0x55, 0x55, 0x59, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0x80, 0x85, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0x41, 0x4F, 0xBD, 0x80, 0x85, 0xC0, 0xC1, 0xC2, 0xC3, 0x46, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0x09, 0x41, 0x41, 0x4F, 0xCE, 0xCE, 0x2D, 0x2D, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0x59, 0x59, 0xDA, 0xDB, 0xDC, 0xDD, 0x3F, 0x3F, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0x41, 0x45, 0x41, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4F, 0x4F, 0x3F, 0x4F, 0x55, 0x55, 0x55, 0x49, 0x00, 0xF7, 0x00, 0xF9, 0xFA, 0xFB, 0x3F, 0xFD, 0xFE, 0x00 }; static const unsigned char Lookup_208[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, /* Windows */ 0x80, 0x81, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x5E, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x8C, 0x9D, 0x00, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC7, 0xC8, 0xC9, 0xC9, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0x00, 0xDD, 0xDE, 0xDF, 0x41, 0xE1, 0x41, 0xE3, 0xE4, 0xE5, 0xE6, 0x43, 0x45, 0x45, 0x45, 0x45, 0xEC, 0xEC, 0x49, 0x49, 0xF0, 0xF1, 0xF2, 0xF3, 0x4F, 0xF5, 0xF6, 0xF7, 0xF8, 0x55, 0xFA, 0x55, 0x55, 0x00, 0x00, 0xFF, /* Mac */ 0x41, 0x81, 0x43, 0x45, 0x4E, 0x4F, 0x55, 0x41, 0x41, 0x41, 0x41, 0x8B, 0x8C, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x93, 0x49, 0x49, 0x4E, 0x4F, 0x98, 0x4F, 0x4F, 0x9B, 0x55, 0x55, 0x55, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC7, 0xC8, 0xC9, 0xC9, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x00, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xE9, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, }; static const unsigned char Lookup_224[128 * 3] = { /* Common */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, /* Windows */ 0x80, 0x81, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x5E, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEA, 0xEC, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF2, 0xF3, 0xF3, 0xF5, 0xF5, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x00, 0x00, 0xFF, /* Mac */ 0x41, 0x41, 0x43, 0x45, 0x4E, 0x4F, 0x55, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x55, 0x55, 0x55, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEA, 0xEC, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF2, 0xF3, 0xF3, 0xF5, 0xF5, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, }; /*********************************************************************** * lhash_val_of_name_sys * * Copy of oleaut32.LHashValOfNameSysA * Produce a string hash value. * * PARAMS * skind [I] Type of the system. * lcid [I] Locale id for the hash. * lpStr [I] String to hash. * * RETURNS * Success: The hash value of the string. * Failure: 0, if lpStr is NULL. * * NOTES * This function produces a two part hash: The high word is based on * skind and lcid, while the low word is based on a repeated string * hash of skind/str. */ unsigned int lhash_val_of_name_sys( syskind_t skind, LCID lcid, LPCSTR lpStr) { ULONG nOffset, nMask = skind == SYS_MAC ? 1 : 0; ULONG nHiWord, nLoWord = 0x0deadbee; const unsigned char *str = (const unsigned char *)lpStr, *pnLookup = NULL; if (!str) return 0; switch (PRIMARYLANGID(LANGIDFROMLCID(lcid))) { default: fprintf(stderr, "Unknown lcid %x, treating as latin-based, please report\n", lcid); /* .. Fall Through .. */ case LANG_AFRIKAANS: case LANG_ALBANIAN: case LANG_ARMENIAN: case LANG_ASSAMESE: case LANG_AZERI: case LANG_BASQUE: case LANG_BELARUSIAN: case LANG_BENGALI: case LANG_BULGARIAN: case LANG_CATALAN: case LANG_DANISH: case LANG_DIVEHI: case LANG_DUTCH: case LANG_ENGLISH: case LANG_ESTONIAN: case LANG_FAEROESE: case LANG_FINNISH: case LANG_FRENCH: case LANG_GALICIAN: case LANG_GEORGIAN: case LANG_GERMAN: case LANG_GUJARATI: case LANG_HINDI: case LANG_INDONESIAN: case LANG_ITALIAN: case LANG_KANNADA: case LANG_KASHMIRI: case LANG_KAZAK: case LANG_KONKANI: case LANG_KYRGYZ: case LANG_LATVIAN: case LANG_LITHUANIAN: case LANG_MACEDONIAN: case LANG_MALAY: case LANG_MALAYALAM: case LANG_MANIPURI: case LANG_MARATHI: case LANG_MONGOLIAN: case LANG_NEPALI: case LANG_ORIYA: case LANG_PORTUGUESE: case LANG_PUNJABI: case LANG_ROMANIAN: case LANG_SANSKRIT: case LANG_SERBIAN: case LANG_SINDHI: case LANG_SLOVENIAN: case LANG_SWAHILI: case LANG_SWEDISH: case LANG_SYRIAC: case LANG_TAMIL: case LANG_TATAR: case LANG_TELUGU: case LANG_THAI: case LANG_UKRAINIAN: case LANG_URDU: case LANG_UZBEK: case LANG_VIETNAMESE: case LANG_MALTESE: case LANG_IRISH: case LANG_SAMI: case LANG_UPPER_SORBIAN: case LANG_TSWANA: case LANG_XHOSA: case LANG_ZULU: case LANG_WELSH: case LANG_BRETON: case LANG_SCOTTISH_GAELIC: case LANG_NEUTRAL: /* some languages not in all windows versions or ReactOS */ #ifdef LANG_MANX_GAELIC case LANG_MANX_GAELIC: #endif #ifdef LANG_TAJIK case LANG_TAJIK: #endif #ifdef LANG_ROMANSH case LANG_ROMANSH: #endif #ifdef LANG_SUTU case LANG_SUTU: #endif #ifdef LANG_TSONGA case LANG_TSONGA: #endif #ifdef LANG_VENDA case LANG_VENDA: #endif #ifdef LANG_ESPERANTO case LANG_ESPERANTO: #endif #ifdef LANG_WALON case LANG_WALON: #endif #ifdef LANG_CORNISH case LANG_CORNISH: #endif nOffset = 16; pnLookup = Lookup_16; break; case LANG_CZECH: case LANG_HUNGARIAN: case LANG_POLISH: case LANG_SLOVAK: case LANG_SPANISH: nOffset = 32; pnLookup = Lookup_32; break; case LANG_HEBREW: nOffset = 48; pnLookup = Lookup_48; break; case LANG_JAPANESE: nOffset = 64; pnLookup = Lookup_64; break; case LANG_KOREAN: nOffset = 80; pnLookup = Lookup_80; break; case LANG_CHINESE: nOffset = 112; pnLookup = Lookup_112; break; case LANG_GREEK: nOffset = 128; pnLookup = Lookup_128; break; case LANG_ICELANDIC: nOffset = 144; pnLookup = Lookup_144; break; case LANG_TURKISH: nOffset = 160; pnLookup = Lookup_160; break; case LANG_NORWEGIAN: if (SUBLANGID(LANGIDFROMLCID(lcid)) == SUBLANG_NORWEGIAN_NYNORSK) { nOffset = 176; pnLookup = Lookup_176; } else { nOffset = 16; pnLookup = Lookup_16; } break; case LANG_ARABIC: case LANG_FARSI: nOffset = 208; pnLookup = Lookup_208; break; case LANG_RUSSIAN: nOffset = 224; pnLookup = Lookup_224; break; } nHiWord = (nOffset | nMask) << 16; while (*str) { nLoWord = 37 * nLoWord + pnLookup[*str > 0x7f && nMask ? *str + 0x80 : *str]; str++; } /* Constrain to a prime modulo and sizeof(WORD) */ nLoWord = (nLoWord % 65599) & 0xffff; return nHiWord | nLoWord; } ================================================ FILE: widl/hash.h ================================================ /* * Hash definitions * * Copyright 2005 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef __WIDL_HASH_H #define __WIDL_HASH_H extern unsigned int lhash_val_of_name_sys( syskind_t skind, LCID lcid, LPCSTR lpStr); #endif ================================================ FILE: widl/header.c ================================================ /* * IDL Compiler * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" #include "expr.h" #include "typetree.h" #include "typelib.h" static int indentation = 0; static int is_object_interface = 0; user_type_list_t user_type_list = LIST_INIT(user_type_list); context_handle_list_t context_handle_list = LIST_INIT(context_handle_list); generic_handle_list_t generic_handle_list = LIST_INIT(generic_handle_list); static void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name); static void indent(FILE *h, int delta) { int c; if (delta < 0) indentation += delta; for (c=0; c 0) indentation += delta; } static void write_line(FILE *f, int delta, const char *fmt, ...) { va_list ap; indent(f, delta); va_start(ap, fmt); vfprintf(f, fmt, ap); va_end(ap); fprintf(f, "\n"); } int is_ptrchain_attr(const var_t *var, enum attr_type t) { if (is_attr(var->attrs, t)) return 1; else { type_t *type = var->type; for (;;) { if (is_attr(type->attrs, t)) return 1; else if (type_is_alias(type)) type = type_alias_get_aliasee(type); else if (is_ptr(type)) type = type_pointer_get_ref(type); else return 0; } } } int is_aliaschain_attr(const type_t *type, enum attr_type attr) { const type_t *t = type; for (;;) { if (is_attr(t->attrs, attr)) return 1; else if (type_is_alias(t)) t = type_alias_get_aliasee(t); else return 0; } } int is_attr(const attr_list_t *list, enum attr_type t) { const attr_t *attr; if (list) LIST_FOR_EACH_ENTRY( attr, list, const attr_t, entry ) if (attr->type == t) return 1; return 0; } void *get_attrp(const attr_list_t *list, enum attr_type t) { const attr_t *attr; if (list) LIST_FOR_EACH_ENTRY( attr, list, const attr_t, entry ) if (attr->type == t) return attr->u.pval; return NULL; } unsigned int get_attrv(const attr_list_t *list, enum attr_type t) { const attr_t *attr; if (list) LIST_FOR_EACH_ENTRY( attr, list, const attr_t, entry ) if (attr->type == t) return attr->u.ival; return 0; } static void write_guid(FILE *f, const char *guid_prefix, const char *name, const UUID *uuid) { if (!uuid) return; fprintf(f, "DEFINE_GUID(%s_%s, 0x%08x, 0x%04x, 0x%04x, 0x%02x,0x%02x, 0x%02x," "0x%02x,0x%02x,0x%02x,0x%02x,0x%02x);\n", guid_prefix, name, uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7]); } static void write_uuid_decl(FILE *f, type_t *type, const UUID *uuid) { char *name = format_namespace(type->namespace, "", "::", type->name); fprintf(f, "#ifdef __CRT_UUID_DECL\n"); fprintf(f, "__CRT_UUID_DECL(%s, 0x%08x, 0x%04x, 0x%04x, 0x%02x,0x%02x, 0x%02x," "0x%02x,0x%02x,0x%02x,0x%02x,0x%02x)\n", name, uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7]); fprintf(f, "#endif\n"); free(name); } static const char *uuid_string(const UUID *uuid) { static char buf[37]; sprintf(buf, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7]); return buf; } static void write_namespace_start(FILE *header, struct namespace *namespace) { if(is_global_namespace(namespace)) { if(use_abi_namespace) write_line(header, 1, "namespace ABI {"); return; } write_namespace_start(header, namespace->parent); write_line(header, 1, "namespace %s {", namespace->name); } static void write_namespace_end(FILE *header, struct namespace *namespace) { if(is_global_namespace(namespace)) { if(use_abi_namespace) write_line(header, -1, "}", namespace->name); return; } write_line(header, -1, "}", namespace->name); write_namespace_end(header, namespace->parent); } const char *get_name(const var_t *v) { static char buffer[256]; if (is_attr( v->attrs, ATTR_PROPGET )) strcpy( buffer, "get_" ); else if (is_attr( v->attrs, ATTR_PROPPUT )) strcpy( buffer, "put_" ); else if (is_attr( v->attrs, ATTR_PROPPUTREF )) strcpy( buffer, "putref_" ); else buffer[0] = 0; strcat( buffer, v->name ); return buffer; } static void write_fields(FILE *h, var_list_t *fields) { unsigned nameless_struct_cnt = 0, nameless_struct_i = 0, nameless_union_cnt = 0, nameless_union_i = 0; const char *name; char buf[32]; var_t *v; if (!fields) return; LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) { if (!v || !v->type) continue; switch(type_get_type_detect_alias(v->type)) { case TYPE_STRUCT: case TYPE_ENCAPSULATED_UNION: nameless_struct_cnt++; break; case TYPE_UNION: nameless_union_cnt++; break; default: ; } } LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) { if (!v || !v->type) continue; indent(h, 0); name = v->name; switch(type_get_type_detect_alias(v->type)) { case TYPE_STRUCT: case TYPE_ENCAPSULATED_UNION: if(!v->name) { fprintf(h, "__C89_NAMELESS "); if(nameless_struct_cnt == 1) { name = "__C89_NAMELESSSTRUCTNAME"; }else if(nameless_struct_i < 5 /* # of supporting macros */) { sprintf(buf, "__C89_NAMELESSSTRUCTNAME%d", ++nameless_struct_i); name = buf; } } break; case TYPE_UNION: if(!v->name) { fprintf(h, "__C89_NAMELESS "); if(nameless_union_cnt == 1) { name = "__C89_NAMELESSUNIONNAME"; }else if(nameless_union_i < 8 /* # of supporting macros */ ) { sprintf(buf, "__C89_NAMELESSUNIONNAME%d", ++nameless_union_i); name = buf; } } break; default: ; } write_type_def_or_decl(h, v->type, TRUE, name); fprintf(h, ";\n"); } } static void write_enums(FILE *h, var_list_t *enums, const char *enum_name) { var_t *v; if (!enums) return; LIST_FOR_EACH_ENTRY( v, enums, var_t, entry ) { if (v->name) { indent(h, 0); if(!enum_name) fprintf(h, "%s", get_name(v)); else fprintf(h, "%s_%s", enum_name, get_name(v)); if (v->eval) { fprintf(h, " = "); write_expr(h, v->eval, 0, 1, NULL, NULL, ""); } } if (list_next( enums, &v->entry )) fprintf(h, ",\n"); } fprintf(h, "\n"); } int needs_space_after(type_t *t) { return (type_is_alias(t) || (!is_ptr(t) && (!is_array(t) || !type_array_is_decl_as_ptr(t) || t->name))); } void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly) { const char *name; if (!h) return; name = type_get_name(t, name_type); if (is_attr(t->attrs, ATTR_CONST) && (type_is_alias(t) || !is_ptr(t))) fprintf(h, "const "); if (type_is_alias(t)) fprintf(h, "%s", t->name); else { switch (type_get_type_detect_alias(t)) { case TYPE_ENUM: if (!declonly && t->defined && !t->written) { if (name) fprintf(h, "enum %s {\n", name); else fprintf(h, "enum {\n"); t->written = TRUE; indentation++; write_enums(h, type_enum_get_values(t), is_global_namespace(t->namespace) ? NULL : t->name); indent(h, -1); fprintf(h, "}"); } else fprintf(h, "enum %s", name ? name : ""); break; case TYPE_STRUCT: case TYPE_ENCAPSULATED_UNION: if (!declonly && t->defined && !t->written) { if (name) fprintf(h, "struct %s {\n", name); else fprintf(h, "struct {\n"); t->written = TRUE; indentation++; if (type_get_type(t) != TYPE_STRUCT) write_fields(h, type_encapsulated_union_get_fields(t)); else write_fields(h, type_struct_get_fields(t)); indent(h, -1); fprintf(h, "}"); } else fprintf(h, "struct %s", name ? name : ""); break; case TYPE_UNION: if (!declonly && t->defined && !t->written) { if (t->name) fprintf(h, "union %s {\n", t->name); else fprintf(h, "union {\n"); t->written = TRUE; indentation++; write_fields(h, type_union_get_cases(t)); indent(h, -1); fprintf(h, "}"); } else fprintf(h, "union %s", t->name ? t->name : ""); break; case TYPE_POINTER: write_type_left(h, type_pointer_get_ref(t), name_type, declonly); fprintf(h, "%s*", needs_space_after(type_pointer_get_ref(t)) ? " " : ""); if (is_attr(t->attrs, ATTR_CONST)) fprintf(h, "const "); break; case TYPE_ARRAY: if (t->name && type_array_is_decl_as_ptr(t)) fprintf(h, "%s", t->name); else { write_type_left(h, type_array_get_element(t), name_type, declonly); if (type_array_is_decl_as_ptr(t)) fprintf(h, "%s*", needs_space_after(type_array_get_element(t)) ? " " : ""); } break; case TYPE_BASIC: if (type_basic_get_type(t) != TYPE_BASIC_INT32 && type_basic_get_type(t) != TYPE_BASIC_INT64 && type_basic_get_type(t) != TYPE_BASIC_HYPER) { if (type_basic_get_sign(t) < 0) fprintf(h, "signed "); else if (type_basic_get_sign(t) > 0) fprintf(h, "unsigned "); } switch (type_basic_get_type(t)) { case TYPE_BASIC_INT8: fprintf(h, "small"); break; case TYPE_BASIC_INT16: fprintf(h, "short"); break; case TYPE_BASIC_INT: fprintf(h, "int"); break; case TYPE_BASIC_INT3264: fprintf(h, "__int3264"); break; case TYPE_BASIC_BYTE: fprintf(h, "byte"); break; case TYPE_BASIC_CHAR: fprintf(h, "char"); break; case TYPE_BASIC_WCHAR: fprintf(h, "wchar_t"); break; case TYPE_BASIC_FLOAT: fprintf(h, "float"); break; case TYPE_BASIC_DOUBLE: fprintf(h, "double"); break; case TYPE_BASIC_ERROR_STATUS_T: fprintf(h, "error_status_t"); break; case TYPE_BASIC_HANDLE: fprintf(h, "handle_t"); break; case TYPE_BASIC_INT32: if (type_basic_get_sign(t) > 0) fprintf(h, "ULONG"); else fprintf(h, "LONG"); break; case TYPE_BASIC_INT64: if (type_basic_get_sign(t) > 0) fprintf(h, "UINT64"); else fprintf(h, "INT64"); break; case TYPE_BASIC_HYPER: if (type_basic_get_sign(t) > 0) fprintf(h, "MIDL_uhyper"); else fprintf(h, "hyper"); break; } break; case TYPE_INTERFACE: case TYPE_MODULE: case TYPE_COCLASS: fprintf(h, "%s", t->name); break; case TYPE_VOID: fprintf(h, "void"); break; case TYPE_BITFIELD: write_type_left(h, type_bitfield_get_field(t), name_type, declonly); break; case TYPE_ALIAS: case TYPE_FUNCTION: /* handled elsewhere */ assert(0); break; } } } void write_type_right(FILE *h, type_t *t, int is_field) { if (!h) return; switch (type_get_type(t)) { case TYPE_ARRAY: if (!type_array_is_decl_as_ptr(t)) { if (is_conformant_array(t)) { fprintf(h, "[%s]", is_field ? "1" : ""); t = type_array_get_element(t); } for ( ; type_get_type(t) == TYPE_ARRAY && !type_array_is_decl_as_ptr(t); t = type_array_get_element(t)) fprintf(h, "[%u]", type_array_get_dim(t)); } break; case TYPE_BITFIELD: fprintf(h, " : %u", type_bitfield_get_bits(t)->cval); break; case TYPE_VOID: case TYPE_BASIC: case TYPE_ENUM: case TYPE_STRUCT: case TYPE_ENCAPSULATED_UNION: case TYPE_UNION: case TYPE_ALIAS: case TYPE_MODULE: case TYPE_COCLASS: case TYPE_FUNCTION: case TYPE_INTERFACE: case TYPE_POINTER: break; } } static void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const char *name) { type_t *pt = NULL; int ptr_level = 0; if (!h) return; if (t) { for (pt = t; is_ptr(pt); pt = type_pointer_get_ref(pt), ptr_level++) ; if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) { int i; const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV); if (!callconv && is_object_interface) callconv = "STDMETHODCALLTYPE"; if (is_attr(pt->attrs, ATTR_INLINE)) fprintf(h, "inline "); write_type_left(h, type_function_get_rettype(pt), NAME_DEFAULT, declonly); fputc(' ', h); if (ptr_level) fputc('(', h); if (callconv) fprintf(h, "%s ", callconv); for (i = 0; i < ptr_level; i++) fputc('*', h); } else write_type_left(h, t, NAME_DEFAULT, declonly); } if (name) fprintf(h, "%s%s", !t || needs_space_after(t) ? " " : "", name ); if (t) { if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) { const var_list_t *args = type_function_get_args(pt); if (ptr_level) fputc(')', h); fputc('(', h); if (args) write_args(h, args, NULL, 0, FALSE); else fprintf(h, "void"); fputc(')', h); } else write_type_right(h, t, is_field); } } static void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name) { write_type_v(f, t, field, FALSE, name); } static void write_type_definition(FILE *f, type_t *t) { int in_namespace = t->namespace && !is_global_namespace(t->namespace); int save_written = t->written; if(in_namespace) { fprintf(f, "#ifdef __cplusplus\n"); fprintf(f, "} /* extern \"C\" */\n"); write_namespace_start(f, t->namespace); } indent(f, 0); write_type_left(f, t, NAME_DEFAULT, FALSE); fprintf(f, ";\n"); if(in_namespace) { t->written = save_written; write_namespace_end(f, t->namespace); fprintf(f, "extern \"C\" {\n"); fprintf(f, "#else\n"); write_type_left(f, t, NAME_C, FALSE); fprintf(f, ";\n"); fprintf(f, "#endif\n\n"); } } void write_type_decl(FILE *f, type_t *t, const char *name) { write_type_v(f, t, FALSE, TRUE, name); } void write_type_decl_left(FILE *f, type_t *t) { write_type_left(f, t, NAME_DEFAULT, TRUE); } static int user_type_registered(const char *name) { user_type_t *ut; LIST_FOR_EACH_ENTRY(ut, &user_type_list, user_type_t, entry) if (!strcmp(name, ut->name)) return 1; return 0; } static int context_handle_registered(const char *name) { context_handle_t *ch; LIST_FOR_EACH_ENTRY(ch, &context_handle_list, context_handle_t, entry) if (!strcmp(name, ch->name)) return 1; return 0; } static int generic_handle_registered(const char *name) { generic_handle_t *gh; LIST_FOR_EACH_ENTRY(gh, &generic_handle_list, generic_handle_t, entry) if (!strcmp(name, gh->name)) return 1; return 0; } unsigned int get_context_handle_offset( const type_t *type ) { context_handle_t *ch; unsigned int index = 0; while (!is_attr( type->attrs, ATTR_CONTEXTHANDLE )) { if (type_is_alias( type )) type = type_alias_get_aliasee( type ); else if (is_ptr( type )) type = type_pointer_get_ref( type ); else error( "internal error: %s is not a context handle\n", type->name ); } LIST_FOR_EACH_ENTRY( ch, &context_handle_list, context_handle_t, entry ) { if (!strcmp( type->name, ch->name )) return index; index++; } error( "internal error: %s is not registered as a context handle\n", type->name ); return index; } unsigned int get_generic_handle_offset( const type_t *type ) { generic_handle_t *gh; unsigned int index = 0; while (!is_attr( type->attrs, ATTR_HANDLE )) { if (type_is_alias( type )) type = type_alias_get_aliasee( type ); else if (is_ptr( type )) type = type_pointer_get_ref( type ); else error( "internal error: %s is not a generic handle\n", type->name ); } LIST_FOR_EACH_ENTRY( gh, &generic_handle_list, generic_handle_t, entry ) { if (!strcmp( type->name, gh->name )) return index; index++; } error( "internal error: %s is not registered as a generic handle\n", type->name ); return index; } /* check for types which require additional prototypes to be generated in the * header */ void check_for_additional_prototype_types(const var_list_t *list) { const var_t *v; if (!list) return; LIST_FOR_EACH_ENTRY( v, list, const var_t, entry ) { type_t *type = v->type; if (!type) continue; for (;;) { const char *name = type->name; if (type->user_types_registered) break; type->user_types_registered = 1; if (is_attr(type->attrs, ATTR_CONTEXTHANDLE)) { if (!context_handle_registered(name)) { context_handle_t *ch = xmalloc(sizeof(*ch)); ch->name = xstrdup(name); list_add_tail(&context_handle_list, &ch->entry); } /* don't carry on parsing fields within this type */ break; } if ((type_get_type(type) != TYPE_BASIC || type_basic_get_type(type) != TYPE_BASIC_HANDLE) && is_attr(type->attrs, ATTR_HANDLE)) { if (!generic_handle_registered(name)) { generic_handle_t *gh = xmalloc(sizeof(*gh)); gh->name = xstrdup(name); list_add_tail(&generic_handle_list, &gh->entry); } /* don't carry on parsing fields within this type */ break; } if (is_attr(type->attrs, ATTR_WIREMARSHAL)) { if (!user_type_registered(name)) { user_type_t *ut = xmalloc(sizeof *ut); ut->name = xstrdup(name); list_add_tail(&user_type_list, &ut->entry); } /* don't carry on parsing fields within this type as we are already * using a wire marshaled type */ break; } else if (type_is_complete(type)) { var_list_t *vars; switch (type_get_type_detect_alias(type)) { case TYPE_ENUM: vars = type_enum_get_values(type); break; case TYPE_STRUCT: vars = type_struct_get_fields(type); break; case TYPE_UNION: vars = type_union_get_cases(type); break; default: vars = NULL; break; } check_for_additional_prototype_types(vars); } if (type_is_alias(type)) type = type_alias_get_aliasee(type); else if (is_ptr(type)) type = type_pointer_get_ref(type); else if (is_array(type)) type = type_array_get_element(type); else break; } } } static void write_user_types(FILE *header) { user_type_t *ut; LIST_FOR_EACH_ENTRY(ut, &user_type_list, user_type_t, entry) { const char *name = ut->name; fprintf(header, "ULONG __RPC_USER %s_UserSize (ULONG *, ULONG, %s *);\n", name, name); fprintf(header, "unsigned char * __RPC_USER %s_UserMarshal (ULONG *, unsigned char *, %s *);\n", name, name); fprintf(header, "unsigned char * __RPC_USER %s_UserUnmarshal(ULONG *, unsigned char *, %s *);\n", name, name); fprintf(header, "void __RPC_USER %s_UserFree (ULONG *, %s *);\n", name, name); } } static void write_context_handle_rundowns(FILE *header) { context_handle_t *ch; LIST_FOR_EACH_ENTRY(ch, &context_handle_list, context_handle_t, entry) { const char *name = ch->name; fprintf(header, "void __RPC_USER %s_rundown(%s);\n", name, name); } } static void write_generic_handle_routines(FILE *header) { generic_handle_t *gh; LIST_FOR_EACH_ENTRY(gh, &generic_handle_list, generic_handle_t, entry) { const char *name = gh->name; fprintf(header, "handle_t __RPC_USER %s_bind(%s);\n", name, name); fprintf(header, "void __RPC_USER %s_unbind(%s, handle_t);\n", name, name); } } static void write_typedef(FILE *header, type_t *type) { fprintf(header, "typedef "); write_type_def_or_decl(header, type_alias_get_aliasee(type), FALSE, type->name); fprintf(header, ";\n"); } int is_const_decl(const var_t *var) { const type_t *t; /* strangely, MIDL accepts a const attribute on any pointer in the * declaration to mean that data isn't being instantiated. this appears * to be a bug, but there is no benefit to being incompatible with MIDL, * so we'll do the same thing */ for (t = var->type; ; ) { if (is_attr(t->attrs, ATTR_CONST)) return TRUE; else if (is_ptr(t)) t = type_pointer_get_ref(t); else break; } return FALSE; } static void write_declaration(FILE *header, const var_t *v) { if (is_const_decl(v) && v->eval) { fprintf(header, "#define %s (", v->name); write_expr(header, v->eval, 0, 1, NULL, NULL, ""); fprintf(header, ")\n\n"); } else { switch (v->stgclass) { case STG_NONE: case STG_REGISTER: /* ignored */ break; case STG_STATIC: fprintf(header, "static "); break; case STG_EXTERN: fprintf(header, "extern "); break; } write_type_def_or_decl(header, v->type, FALSE, v->name); fprintf(header, ";\n\n"); } } static void write_library(FILE *header, const typelib_t *typelib) { const UUID *uuid = get_attrp(typelib->attrs, ATTR_UUID); fprintf(header, "\n"); write_guid(header, "LIBID", typelib->name, uuid); fprintf(header, "\n"); } const type_t* get_explicit_generic_handle_type(const var_t* var) { const type_t *t; for (t = var->type; is_ptr(t) || type_is_alias(t); t = type_is_alias(t) ? type_alias_get_aliasee(t) : type_pointer_get_ref(t)) if ((type_get_type_detect_alias(t) != TYPE_BASIC || type_basic_get_type(t) != TYPE_BASIC_HANDLE) && is_attr(t->attrs, ATTR_HANDLE)) return t; return NULL; } const var_t *get_func_handle_var( const type_t *iface, const var_t *func, unsigned char *explicit_fc, unsigned char *implicit_fc ) { const var_t *var; const var_list_t *args = type_get_function_args( func->type ); *explicit_fc = *implicit_fc = 0; if (args) LIST_FOR_EACH_ENTRY( var, args, const var_t, entry ) { if (!is_attr( var->attrs, ATTR_IN ) && is_attr( var->attrs, ATTR_OUT )) continue; if (type_get_type( var->type ) == TYPE_BASIC && type_basic_get_type( var->type ) == TYPE_BASIC_HANDLE) { *explicit_fc = FC_BIND_PRIMITIVE; return var; } if (get_explicit_generic_handle_type( var )) { *explicit_fc = FC_BIND_GENERIC; return var; } if (is_context_handle( var->type )) { *explicit_fc = FC_BIND_CONTEXT; return var; } } if ((var = get_attrp( iface->attrs, ATTR_IMPLICIT_HANDLE ))) { if (type_get_type( var->type ) == TYPE_BASIC && type_basic_get_type( var->type ) == TYPE_BASIC_HANDLE) *implicit_fc = FC_BIND_PRIMITIVE; else *implicit_fc = FC_BIND_GENERIC; return var; } *implicit_fc = FC_AUTO_HANDLE; return NULL; } int has_out_arg_or_return(const var_t *func) { const var_t *var; if (!is_void(type_function_get_rettype(func->type))) return 1; if (!type_get_function_args(func->type)) return 0; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) if (is_attr(var->attrs, ATTR_OUT)) return 1; return 0; } /********** INTERFACES **********/ int is_object(const type_t *iface) { const attr_t *attr; if (type_is_defined(iface) && type_iface_get_inherit(iface)) return 1; if (iface->attrs) LIST_FOR_EACH_ENTRY( attr, iface->attrs, const attr_t, entry ) if (attr->type == ATTR_OBJECT || attr->type == ATTR_ODL) return 1; return 0; } int is_local(const attr_list_t *a) { return is_attr(a, ATTR_LOCAL); } const var_t *is_callas(const attr_list_t *a) { return get_attrp(a, ATTR_CALLAS); } static int is_inherited_method(const type_t *iface, const var_t *func) { while ((iface = type_iface_get_inherit(iface))) { const statement_t *stmt; STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *funccmp = stmt->u.var; if (!is_callas(func->attrs)) { char inherit_name[256]; /* compare full name including property prefix */ strcpy(inherit_name, get_name(funccmp)); if (!strcmp(inherit_name, get_name(func))) return 1; } } } return 0; } static int is_override_method(const type_t *iface, const type_t *child, const var_t *func) { if (iface == child) return 0; do { const statement_t *stmt; STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(child)) { const var_t *funccmp = stmt->u.var; if (!is_callas(func->attrs)) { char inherit_name[256]; /* compare full name including property prefix */ strcpy(inherit_name, get_name(funccmp)); if (!strcmp(inherit_name, get_name(func))) return 1; } } } while ((child = type_iface_get_inherit(child)) && child != iface); return 0; } static int is_aggregate_return(const var_t *func) { enum type_type type = type_get_type(type_function_get_rettype(func->type)); return type == TYPE_STRUCT || type == TYPE_UNION || type == TYPE_COCLASS || type == TYPE_INTERFACE; } static char *get_vtbl_entry_name(const type_t *iface, const var_t *func) { static char buff[255]; if (is_inherited_method(iface, func)) sprintf(buff, "%s_%s", iface->name, get_name(func)); else sprintf(buff, "%s", get_name(func)); return buff; } static void write_method_macro(FILE *header, const type_t *iface, const type_t *child, const char *name) { const statement_t *stmt; int first_iface = 1; if (type_iface_get_inherit(iface)) write_method_macro(header, type_iface_get_inherit(iface), child, name); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (first_iface) { fprintf(header, "/*** %s methods ***/\n", iface->name); first_iface = 0; } if (is_override_method(iface, child, func)) continue; if (!is_callas(func->attrs)) { const var_t *arg; fprintf(header, "#define %s_%s(This", name, get_name(func)); if (type_get_function_args(func->type)) LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), const var_t, entry ) fprintf(header, ",%s", arg->name); fprintf(header, ") "); if (is_aggregate_return(func)) { fprintf(header, "%s_%s_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support\n", name, get_name(func)); continue; } fprintf(header, "(This)->lpVtbl->%s(This", get_vtbl_entry_name(iface, func)); if (type_get_function_args(func->type)) LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), const var_t, entry ) fprintf(header, ",%s", arg->name); fprintf(header, ")\n"); } } } void write_args(FILE *h, const var_list_t *args, const char *name, int method, int do_indent) { const var_t *arg; int count = 0; if (do_indent) { indentation++; indent(h, 0); } if (method == 1) { fprintf(h, "%s* This", name); count++; } if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) { if (count) { if (do_indent) { fprintf(h, ",\n"); indent(h, 0); } else fprintf(h, ","); } write_type_decl(h, arg->type, arg->name); if (method == 2) { const expr_t *expr = get_attrp(arg->attrs, ATTR_DEFAULTVALUE); if (expr) { const var_t *tail_arg; /* Output default value only if all following arguments also have default value. */ LIST_FOR_EACH_ENTRY_REV( tail_arg, args, const var_t, entry ) { if(tail_arg == arg) { expr_t bstr; /* Fixup the expression type for a BSTR like midl does. */ if (get_type_vt(arg->type) == VT_BSTR && expr->type == EXPR_STRLIT) { bstr = *expr; bstr.type = EXPR_WSTRLIT; expr = &bstr; } fprintf(h, " = "); write_expr( h, expr, 0, 1, NULL, NULL, "" ); break; } if(!get_attrp(tail_arg->attrs, ATTR_DEFAULTVALUE)) break; } } } count++; } if (do_indent) indentation--; } static void write_cpp_method_def(FILE *header, const type_t *iface) { const statement_t *stmt; STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (!is_callas(func->attrs)) { const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); const var_list_t *args = type_get_function_args(func->type); const var_t *arg; if (!callconv) callconv = "STDMETHODCALLTYPE"; if (is_aggregate_return(func)) { fprintf(header, "#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS\n"); indent(header, 0); fprintf(header, "virtual "); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, "* %s %s(\n", callconv, get_name(func)); ++indentation; indent(header, 0); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " *__ret"); --indentation; if (args) { fprintf(header, ",\n"); write_args(header, args, iface->name, 2, TRUE); } fprintf(header, ") = 0;\n"); indent(header, 0); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " %s %s(\n", callconv, get_name(func)); write_args(header, args, iface->name, 2, TRUE); fprintf(header, ")\n"); indent(header, 0); fprintf(header, "{\n"); ++indentation; indent(header, 0); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " __ret;\n"); indent(header, 0); fprintf(header, "return *%s(&__ret", get_name(func)); if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) fprintf(header, ", %s", arg->name); fprintf(header, ");\n"); --indentation; indent(header, 0); fprintf(header, "}\n"); fprintf(header, "#else\n"); } indent(header, 0); fprintf(header, "virtual "); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " %s %s(\n", callconv, get_name(func)); write_args(header, args, iface->name, 2, TRUE); fprintf(header, ") = 0;\n"); if (is_aggregate_return(func)) fprintf(header, "#endif\n"); fprintf(header, "\n"); } } } static void write_inline_wrappers(FILE *header, const type_t *iface, const type_t *child, const char *name) { const statement_t *stmt; int first_iface = 1; if (type_iface_get_inherit(iface)) write_inline_wrappers(header, type_iface_get_inherit(iface), child, name); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (first_iface) { fprintf(header, "/*** %s methods ***/\n", iface->name); first_iface = 0; } if (is_override_method(iface, child, func)) continue; if (!is_callas(func->attrs)) { const var_t *arg; fprintf(header, "static FORCEINLINE "); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " %s_%s(", name, get_name(func)); write_args(header, type_get_function_args(func->type), name, 1, FALSE); fprintf(header, ") {\n"); ++indentation; if (!is_aggregate_return(func)) { indent(header, 0); fprintf(header, "%sThis->lpVtbl->%s(This", is_void(type_function_get_rettype(func->type)) ? "" : "return ", get_vtbl_entry_name(iface, func)); } else { indent(header, 0); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " __ret;\n"); indent(header, 0); fprintf(header, "return *This->lpVtbl->%s(This,&__ret", get_vtbl_entry_name(iface, func)); } if (type_get_function_args(func->type)) LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), const var_t, entry ) fprintf(header, ",%s", arg->name); fprintf(header, ");\n"); --indentation; fprintf(header, "}\n"); } } } static void do_write_c_method_def(FILE *header, const type_t *iface, const char *name) { const statement_t *stmt; int first_iface = 1; if (type_iface_get_inherit(iface)) do_write_c_method_def(header, type_iface_get_inherit(iface), name); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (first_iface) { indent(header, 0); fprintf(header, "/*** %s methods ***/\n", iface->name); first_iface = 0; } if (!is_callas(func->attrs)) { const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); if (!callconv) callconv = "STDMETHODCALLTYPE"; indent(header, 0); write_type_decl_left(header, type_function_get_rettype(func->type)); if (is_aggregate_return(func)) fprintf(header, " *"); if (is_inherited_method(iface, func)) fprintf(header, " (%s *%s_%s)(\n", callconv, iface->name, func->name); else fprintf(header, " (%s *%s)(\n", callconv, get_name(func)); ++indentation; indent(header, 0); fprintf(header, "%s *This", name); if (is_aggregate_return(func)) { fprintf(header, ",\n"); indent(header, 0); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " *__ret"); } --indentation; if (type_get_function_args(func->type)) { fprintf(header, ",\n"); write_args(header, type_get_function_args(func->type), name, 0, TRUE); } fprintf(header, ");\n"); fprintf(header, "\n"); } } } static void write_c_method_def(FILE *header, const type_t *iface) { do_write_c_method_def(header, iface, iface->c_name); } static void write_c_disp_method_def(FILE *header, const type_t *iface) { do_write_c_method_def(header, type_iface_get_inherit(iface), iface->c_name); } static void write_method_proto(FILE *header, const type_t *iface) { const statement_t *stmt; STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (is_callas(func->attrs)) { const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); if (!callconv) callconv = "STDMETHODCALLTYPE"; /* proxy prototype */ write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func)); write_args(header, type_get_function_args(func->type), iface->name, 1, TRUE); fprintf(header, ");\n"); /* stub prototype */ fprintf(header, "void __RPC_STUB %s_%s_Stub(\n", iface->name, get_name(func)); fprintf(header, " IRpcStubBuffer* This,\n"); fprintf(header, " IRpcChannelBuffer* pRpcChannelBuffer,\n"); fprintf(header, " PRPC_MESSAGE pRpcMessage,\n"); fprintf(header, " DWORD* pdwStubPhase);\n"); } } } static void write_locals(FILE *fp, const type_t *iface, int body) { static const char comment[] = "/* WIDL-generated stub. You must provide an implementation for this. */"; const statement_t *stmt; if (!is_object(iface)) return; STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; const var_t *cas = is_callas(func->attrs); if (cas) { const statement_t *stmt2 = NULL; STATEMENTS_FOR_EACH_FUNC(stmt2, type_iface_get_stmts(iface)) if (!strcmp(stmt2->u.var->name, cas->name)) break; if (&stmt2->entry != type_iface_get_stmts(iface)) { const var_t *m = stmt2->u.var; /* proxy prototype - use local prototype */ write_type_decl_left(fp, type_function_get_rettype(m->type)); fprintf(fp, " CALLBACK %s_%s_Proxy(\n", iface->name, get_name(m)); write_args(fp, type_get_function_args(m->type), iface->name, 1, TRUE); fprintf(fp, ")"); if (body) { type_t *rt = type_function_get_rettype(m->type); fprintf(fp, "\n{\n"); fprintf(fp, " %s\n", comment); if (rt->name && strcmp(rt->name, "HRESULT") == 0) fprintf(fp, " return E_NOTIMPL;\n"); else if (type_get_type(rt) != TYPE_VOID) { fprintf(fp, " "); write_type_decl(fp, rt, "rv"); fprintf(fp, ";\n"); fprintf(fp, " memset(&rv, 0, sizeof rv);\n"); fprintf(fp, " return rv;\n"); } fprintf(fp, "}\n\n"); } else fprintf(fp, ";\n"); /* stub prototype - use remotable prototype */ write_type_decl_left(fp, type_function_get_rettype(func->type)); fprintf(fp, " __RPC_STUB %s_%s_Stub(\n", iface->name, get_name(m)); write_args(fp, type_get_function_args(func->type), iface->name, 1, TRUE); fprintf(fp, ")"); if (body) /* Remotable methods must all return HRESULTs. */ fprintf(fp, "\n{\n %s\n return E_NOTIMPL;\n}\n\n", comment); else fprintf(fp, ";\n"); } else error_loc("invalid call_as attribute (%s -> %s)\n", func->name, cas->name); } } } static void write_local_stubs_stmts(FILE *local_stubs, const statement_list_t *stmts) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE) write_locals(local_stubs, stmt->u.type, TRUE); } } void write_local_stubs(const statement_list_t *stmts) { FILE *local_stubs; if (!local_stubs_name) return; local_stubs = fopen(local_stubs_name, "w"); if (!local_stubs) { error("Could not open %s for output\n", local_stubs_name); return; } fprintf(local_stubs, "/* call_as/local stubs for %s */\n\n", input_name); fprintf(local_stubs, "#include \n"); fprintf(local_stubs, "#include \"%s\"\n\n", header_name); write_local_stubs_stmts(local_stubs, stmts); fclose(local_stubs); } static void write_function_proto(FILE *header, const type_t *iface, const var_t *fun, const char *prefix) { const char *callconv = get_attrp(fun->type->attrs, ATTR_CALLCONV); if (!callconv) callconv = "__cdecl"; /* FIXME: do we need to handle call_as? */ write_type_decl_left(header, type_function_get_rettype(fun->type)); fprintf(header, " %s ", callconv); fprintf(header, "%s%s(\n", prefix, get_name(fun)); if (type_get_function_args(fun->type)) write_args(header, type_get_function_args(fun->type), iface->name, 0, TRUE); else fprintf(header, " void"); fprintf(header, ");\n\n"); } static void write_forward(FILE *header, type_t *iface) { fprintf(header, "#ifndef __%s_FWD_DEFINED__\n", iface->c_name); fprintf(header, "#define __%s_FWD_DEFINED__\n", iface->c_name); fprintf(header, "typedef interface %s %s;\n", iface->c_name, iface->c_name); fprintf(header, "#ifdef __cplusplus\n"); write_namespace_start(header, iface->namespace); write_line(header, 0, "interface %s;", iface->name); write_namespace_end(header, iface->namespace); fprintf(header, "#endif /* __cplusplus */\n"); fprintf(header, "#endif\n\n" ); } static void write_com_interface_start(FILE *header, const type_t *iface) { int dispinterface = is_attr(iface->attrs, ATTR_DISPINTERFACE); fprintf(header, "/*****************************************************************************\n"); fprintf(header, " * %s %sinterface\n", iface->name, dispinterface ? "disp" : ""); fprintf(header, " */\n"); fprintf(header,"#ifndef __%s_%sINTERFACE_DEFINED__\n", iface->c_name, dispinterface ? "DISP" : ""); fprintf(header,"#define __%s_%sINTERFACE_DEFINED__\n\n", iface->c_name, dispinterface ? "DISP" : ""); } static void write_com_interface_end(FILE *header, type_t *iface) { int dispinterface = is_attr(iface->attrs, ATTR_DISPINTERFACE); const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); type_t *type; if (uuid) write_guid(header, dispinterface ? "DIID" : "IID", iface->c_name, uuid); /* C++ interface */ fprintf(header, "#if defined(__cplusplus) && !defined(CINTERFACE)\n"); if (!is_global_namespace(iface->namespace)) { write_line(header, 0, "} /* extern \"C\" */"); write_namespace_start(header, iface->namespace); } if (uuid) { write_line(header, 0, "MIDL_INTERFACE(\"%s\")", uuid_string(uuid)); indent(header, 0); }else { indent(header, 0); fprintf(header, "interface "); } if (type_iface_get_inherit(iface)) { fprintf(header, "%s : public %s\n", iface->name, type_iface_get_inherit(iface)->name); write_line(header, 1, "{"); } else { fprintf(header, "%s\n", iface->name); write_line(header, 1, "{\n"); write_line(header, 0, "BEGIN_INTERFACE\n"); } /* dispinterfaces don't have real functions, so don't write C++ functions for * them */ if (!dispinterface) write_cpp_method_def(header, iface); if (!type_iface_get_inherit(iface)) write_line(header, 0, "END_INTERFACE\n"); write_line(header, -1, "};"); if (!is_global_namespace(iface->namespace)) { write_namespace_end(header, iface->namespace); write_line(header, 0, "extern \"C\" {"); } if (uuid) write_uuid_decl(header, iface, uuid); fprintf(header, "#else\n"); /* C interface */ write_line(header, 1, "typedef struct %sVtbl {", iface->c_name); write_line(header, 0, "BEGIN_INTERFACE\n"); if (dispinterface) write_c_disp_method_def(header, iface); else write_c_method_def(header, iface); write_line(header, 0, "END_INTERFACE"); write_line(header, -1, "} %sVtbl;\n", iface->c_name); fprintf(header, "interface %s {\n", iface->c_name); fprintf(header, " CONST_VTBL %sVtbl* lpVtbl;\n", iface->c_name); fprintf(header, "};\n\n"); fprintf(header, "#ifdef COBJMACROS\n"); /* dispinterfaces don't have real functions, so don't write macros for them, * only for the interface this interface inherits from, i.e. IDispatch */ fprintf(header, "#ifndef WIDL_C_INLINE_WRAPPERS\n"); type = dispinterface ? type_iface_get_inherit(iface) : iface; write_method_macro(header, type, type, iface->c_name); fprintf(header, "#else\n"); write_inline_wrappers(header, type, type, iface->c_name); fprintf(header, "#endif\n"); fprintf(header, "#endif\n"); fprintf(header, "\n"); fprintf(header, "#endif\n"); fprintf(header, "\n"); /* dispinterfaces don't have real functions, so don't write prototypes for * them */ if (!dispinterface && !winrt_mode) { write_method_proto(header, iface); write_locals(header, iface, FALSE); fprintf(header, "\n"); } fprintf(header,"#endif /* __%s_%sINTERFACE_DEFINED__ */\n\n", iface->c_name, dispinterface ? "DISP" : ""); } static void write_rpc_interface_start(FILE *header, const type_t *iface) { unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION); const var_t *var = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); fprintf(header, "/*****************************************************************************\n"); fprintf(header, " * %s interface (v%d.%d)\n", iface->name, MAJORVERSION(ver), MINORVERSION(ver)); fprintf(header, " */\n"); fprintf(header,"#ifndef __%s_INTERFACE_DEFINED__\n", iface->name); fprintf(header,"#define __%s_INTERFACE_DEFINED__\n\n", iface->name); if (var) { fprintf(header, "extern "); write_type_decl( header, var->type, var->name ); fprintf(header, ";\n"); } if (old_names) { fprintf(header, "extern RPC_IF_HANDLE %s%s_ClientIfHandle;\n", prefix_client, iface->name); fprintf(header, "extern RPC_IF_HANDLE %s%s_ServerIfHandle;\n", prefix_server, iface->name); } else { fprintf(header, "extern RPC_IF_HANDLE %s%s_v%d_%d_c_ifspec;\n", prefix_client, iface->name, MAJORVERSION(ver), MINORVERSION(ver)); fprintf(header, "extern RPC_IF_HANDLE %s%s_v%d_%d_s_ifspec;\n", prefix_server, iface->name, MAJORVERSION(ver), MINORVERSION(ver)); } } static void write_rpc_interface_end(FILE *header, const type_t *iface) { fprintf(header,"\n#endif /* __%s_INTERFACE_DEFINED__ */\n\n", iface->name); } static void write_coclass(FILE *header, type_t *cocl) { const UUID *uuid = get_attrp(cocl->attrs, ATTR_UUID); fprintf(header, "/*****************************************************************************\n"); fprintf(header, " * %s coclass\n", cocl->name); fprintf(header, " */\n\n"); if (uuid) write_guid(header, "CLSID", cocl->name, uuid); fprintf(header, "\n#ifdef __cplusplus\n"); if (uuid) { fprintf(header, "class DECLSPEC_UUID(\"%s\") %s;\n", uuid_string(uuid), cocl->name); write_uuid_decl(header, cocl, uuid); } else { fprintf(header, "class %s;\n", cocl->name); } fprintf(header, "#endif\n"); fprintf(header, "\n"); } static void write_coclass_forward(FILE *header, type_t *cocl) { fprintf(header, "#ifndef __%s_FWD_DEFINED__\n", cocl->name); fprintf(header, "#define __%s_FWD_DEFINED__\n", cocl->name); fprintf(header, "#ifdef __cplusplus\n"); fprintf(header, "typedef class %s %s;\n", cocl->name, cocl->name); fprintf(header, "#else\n"); fprintf(header, "typedef struct %s %s;\n", cocl->name, cocl->name); fprintf(header, "#endif /* defined __cplusplus */\n"); fprintf(header, "#endif /* defined __%s_FWD_DEFINED__ */\n\n", cocl->name ); } static void write_import(FILE *header, const char *fname) { char *hname, *p; hname = dup_basename(fname, ".idl"); p = hname + strlen(hname) - 2; if (p <= hname || strcmp( p, ".h" )) strcat(hname, ".h"); fprintf(header, "#include <%s>\n", hname); free(hname); } static void write_imports(FILE *header, const statement_list_t *stmts) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { switch (stmt->type) { case STMT_TYPE: if (type_get_type(stmt->u.type) == TYPE_INTERFACE) write_imports(header, type_iface_get_stmts(stmt->u.type)); break; case STMT_TYPEREF: case STMT_IMPORTLIB: /* not included in header */ break; case STMT_IMPORT: write_import(header, stmt->u.str); break; case STMT_TYPEDEF: case STMT_MODULE: case STMT_CPPQUOTE: case STMT_PRAGMA: case STMT_DECLARATION: /* not processed here */ break; case STMT_LIBRARY: write_imports(header, stmt->u.lib->stmts); break; } } } static void write_forward_decls(FILE *header, const statement_list_t *stmts) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { switch (stmt->type) { case STMT_TYPE: if (type_get_type(stmt->u.type) == TYPE_INTERFACE) { if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE)) write_forward(header, stmt->u.type); } else if (type_get_type(stmt->u.type) == TYPE_COCLASS) write_coclass_forward(header, stmt->u.type); break; case STMT_TYPEREF: case STMT_IMPORTLIB: /* not included in header */ break; case STMT_IMPORT: case STMT_TYPEDEF: case STMT_MODULE: case STMT_CPPQUOTE: case STMT_PRAGMA: case STMT_DECLARATION: /* not processed here */ break; case STMT_LIBRARY: write_forward_decls(header, stmt->u.lib->stmts); break; } } } static void write_header_stmts(FILE *header, const statement_list_t *stmts, const type_t *iface, int ignore_funcs) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { switch (stmt->type) { case STMT_TYPE: if (type_get_type(stmt->u.type) == TYPE_INTERFACE) { type_t *iface = stmt->u.type; if (is_object(iface)) is_object_interface++; if (is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE) || is_object(stmt->u.type)) { write_com_interface_start(header, iface); write_header_stmts(header, type_iface_get_stmts(iface), stmt->u.type, TRUE); write_com_interface_end(header, iface); } else { write_rpc_interface_start(header, iface); write_header_stmts(header, type_iface_get_stmts(iface), iface, FALSE); write_rpc_interface_end(header, iface); } if (is_object(iface)) is_object_interface--; } else if (type_get_type(stmt->u.type) == TYPE_COCLASS) write_coclass(header, stmt->u.type); else { write_type_definition(header, stmt->u.type); } break; case STMT_TYPEREF: /* FIXME: shouldn't write out forward declarations for undefined * interfaces but a number of our IDL files depend on this */ if (type_get_type(stmt->u.type) == TYPE_INTERFACE && !stmt->u.type->written) write_forward(header, stmt->u.type); break; case STMT_IMPORTLIB: case STMT_MODULE: case STMT_PRAGMA: /* not included in header */ break; case STMT_IMPORT: /* not processed here */ break; case STMT_TYPEDEF: { const type_list_t *type_entry = stmt->u.type_list; for (; type_entry; type_entry = type_entry->next) write_typedef(header, type_entry->type); break; } case STMT_LIBRARY: write_library(header, stmt->u.lib); write_header_stmts(header, stmt->u.lib->stmts, NULL, FALSE); break; case STMT_CPPQUOTE: fprintf(header, "%s\n", stmt->u.str); break; case STMT_DECLARATION: if (iface && type_get_type(stmt->u.var->type) == TYPE_FUNCTION) { if (!ignore_funcs) { int prefixes_differ = strcmp(prefix_client, prefix_server); if (prefixes_differ) { fprintf(header, "/* client prototype */\n"); write_function_proto(header, iface, stmt->u.var, prefix_client); fprintf(header, "/* server prototype */\n"); } write_function_proto(header, iface, stmt->u.var, prefix_server); } } else write_declaration(header, stmt->u.var); break; } } } void write_header(const statement_list_t *stmts) { FILE *header; if (!do_header) return; if(!(header = fopen(header_name, "w"))) { error("Could not open %s for output\n", header_name); return; } fprintf(header, "/*** Autogenerated by WIDL %s from %s - Do not edit ***/\n\n", PACKAGE_VERSION, input_name); fprintf(header, "#ifndef __REQUIRED_RPCNDR_H_VERSION__\n"); fprintf(header, "#define __REQUIRED_RPCNDR_H_VERSION__ 475\n"); fprintf(header, "#endif\n\n"); fprintf(header, "#include \n" ); fprintf(header, "#include \n\n" ); fprintf(header, "#ifndef COM_NO_WINDOWS_H\n"); fprintf(header, "#include \n"); fprintf(header, "#include \n"); fprintf(header, "#endif\n\n"); fprintf(header, "#ifndef __%s__\n", header_token); fprintf(header, "#define __%s__\n\n", header_token); fprintf(header, "/* Forward declarations */\n\n"); write_forward_decls(header, stmts); fprintf(header, "/* Headers for imported files */\n\n"); write_imports(header, stmts); fprintf(header, "\n"); start_cplusplus_guard(header); write_header_stmts(header, stmts, NULL, FALSE); fprintf(header, "/* Begin additional prototypes for all interfaces */\n"); fprintf(header, "\n"); write_user_types(header); write_generic_handle_routines(header); write_context_handle_rundowns(header); fprintf(header, "\n"); fprintf(header, "/* End additional prototypes */\n"); fprintf(header, "\n"); end_cplusplus_guard(header); fprintf(header, "#endif /* __%s__ */\n", header_token); fclose(header); } ================================================ FILE: widl/header.h ================================================ /* * IDL Compiler * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WIDL_HEADER_H #define __WIDL_HEADER_H #include "typetree.h" extern int is_ptrchain_attr(const var_t *var, enum attr_type t); extern int is_aliaschain_attr(const type_t *var, enum attr_type t); extern int is_attr(const attr_list_t *list, enum attr_type t); extern void *get_attrp(const attr_list_t *list, enum attr_type t); extern unsigned int get_attrv(const attr_list_t *list, enum attr_type t); extern const char* get_name(const var_t *v); extern void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly); extern void write_type_right(FILE *h, type_t *t, int is_field); extern void write_type_decl(FILE *f, type_t *t, const char *name); extern void write_type_decl_left(FILE *f, type_t *t); extern unsigned int get_context_handle_offset( const type_t *type ); extern unsigned int get_generic_handle_offset( const type_t *type ); extern int needs_space_after(type_t *t); extern int is_object(const type_t *iface); extern int is_local(const attr_list_t *list); extern int count_methods(const type_t *iface); extern int need_stub(const type_t *iface); extern int need_proxy(const type_t *iface); extern int need_inline_stubs(const type_t *iface); extern int need_stub_files(const statement_list_t *stmts); extern int need_proxy_file(const statement_list_t *stmts); extern int need_proxy_delegation(const statement_list_t *stmts); extern int need_inline_stubs_file(const statement_list_t *stmts); extern const var_t *is_callas(const attr_list_t *list); extern void write_args(FILE *h, const var_list_t *arg, const char *name, int obj, int do_indent); extern void write_array(FILE *h, array_dims_t *v, int field); extern const type_t* get_explicit_generic_handle_type(const var_t* var); extern const var_t *get_func_handle_var( const type_t *iface, const var_t *func, unsigned char *explicit_fc, unsigned char *implicit_fc ); extern int has_out_arg_or_return(const var_t *func); extern int is_const_decl(const var_t *var); static inline int is_ptr(const type_t *t) { return type_get_type(t) == TYPE_POINTER; } static inline int is_array(const type_t *t) { return type_get_type(t) == TYPE_ARRAY; } static inline int is_void(const type_t *t) { return type_get_type(t) == TYPE_VOID; } static inline int is_declptr(const type_t *t) { return is_ptr(t) || (type_get_type(t) == TYPE_ARRAY && type_array_is_decl_as_ptr(t)); } static inline int is_conformant_array(const type_t *t) { return is_array(t) && type_array_has_conformance(t); } static inline int last_ptr(const type_t *type) { return is_ptr(type) && !is_declptr(type_pointer_get_ref(type)); } static inline int last_array(const type_t *type) { return is_array(type) && !is_array(type_array_get_element(type)); } static inline int is_string_type(const attr_list_t *attrs, const type_t *type) { return ((is_attr(attrs, ATTR_STRING) || is_aliaschain_attr(type, ATTR_STRING)) && (last_ptr(type) || last_array(type))); } static inline int is_context_handle(const type_t *type) { const type_t *t; for (t = type; is_ptr(t) || type_is_alias(t); t = type_is_alias(t) ? type_alias_get_aliasee(t) : type_pointer_get_ref(t)) if (is_attr(t->attrs, ATTR_CONTEXTHANDLE)) return 1; return 0; } #endif ================================================ FILE: widl/parser.h ================================================ /* * IDL Compiler * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WIDL_PARSER_H #define __WIDL_PARSER_H typedef struct { type_t *interface; unsigned char old_pointer_default; } interface_info_t; int parser_parse(void); extern FILE *parser_in; extern char *parser_text; extern int parser_debug; extern int yy_flex_debug; int parser_lex(void); extern int import_stack_ptr; int do_import(char *fname); void abort_import(void); void pop_import(void); #define parse_only import_stack_ptr int is_type(const char *name); int do_warning(char *toggle, warning_list_t *wnum); int is_warning_enabled(int warning); extern char *temp_name; #endif ================================================ FILE: widl/parser.l ================================================ /* -*-C-*- * IDL Compiler * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ %option stack %option noinput nounput noyy_top_state %option 8bit never-interactive prefix="parser_" nl \r?\n ws [ \f\t\r] cident [a-zA-Z_][0-9a-zA-Z_]* u_suffix (u|U) l_suffix (l|L) int [0-9]+({l_suffix}?{u_suffix}?|{u_suffix}?{l_suffix}?)? hexd [0-9a-fA-F] hex 0(x|X){hexd}+({l_suffix}?{u_suffix}?|{u_suffix}?{l_suffix}?)? uuid {hexd}{8}-{hexd}{4}-{hexd}{4}-{hexd}{4}-{hexd}{12} double [0-9]+\.[0-9]+([eE][+-]?[0-9]+)* %x QUOTE %x WSTRQUOTE %x ATTR %x PP_LINE %x PP_PRAGMA %x SQUOTE %{ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #else #define YY_NO_UNISTD_H #endif #include "widl.h" #include "utils.h" #include "parser.h" #include "wine/wpp.h" #include "parser.tab.h" static void addcchar(char c); static char *get_buffered_cstring(void); static char *cbuffer; static int cbufidx; static int cbufalloc = 0; static int kw_token(const char *kw); static int attr_token(const char *kw); static warning_list_t *disabled_warnings = NULL; #define MAX_IMPORT_DEPTH 20 struct { YY_BUFFER_STATE state; char *input_name; int line_number; char *temp_name; } import_stack[MAX_IMPORT_DEPTH]; int import_stack_ptr = 0; /* converts an integer in string form to an unsigned long and prints an error * on overflow */ static unsigned int xstrtoul(const char *nptr, char **endptr, int base) { unsigned long val; errno = 0; val = strtoul(nptr, endptr, base); if ((val == ULONG_MAX && errno == ERANGE) || ((unsigned int)val != val)) error_loc("integer constant %s is too large\n", nptr); return val; } UUID *parse_uuid(const char *u) { UUID* uuid = xmalloc(sizeof(UUID)); char b[3]; /* it would be nice to use UuidFromStringA */ uuid->Data1 = strtoul(u, NULL, 16); uuid->Data2 = strtoul(u+9, NULL, 16); uuid->Data3 = strtoul(u+14, NULL, 16); b[2] = 0; memcpy(b, u+19, 2); uuid->Data4[0] = strtoul(b, NULL, 16); memcpy(b, u+21, 2); uuid->Data4[1] = strtoul(b, NULL, 16); memcpy(b, u+24, 2); uuid->Data4[2] = strtoul(b, NULL, 16); memcpy(b, u+26, 2); uuid->Data4[3] = strtoul(b, NULL, 16); memcpy(b, u+28, 2); uuid->Data4[4] = strtoul(b, NULL, 16); memcpy(b, u+30, 2); uuid->Data4[5] = strtoul(b, NULL, 16); memcpy(b, u+32, 2); uuid->Data4[6] = strtoul(b, NULL, 16); memcpy(b, u+34, 2); uuid->Data4[7] = strtoul(b, NULL, 16); return uuid; } %} /* ************************************************************************** * The flexer starts here ************************************************************************** */ %% ^{ws}*\#{ws}*pragma{ws}+ yy_push_state(PP_PRAGMA); ^{ws}*\#{ws}* yy_push_state(PP_LINE); [^\n]* { int lineno; char *cptr, *fname; yy_pop_state(); lineno = (int)strtol(yytext, &cptr, 10); if(!lineno) error_loc("Malformed '#...' line-directive; invalid linenumber\n"); fname = strchr(cptr, '"'); if(!fname) error_loc("Malformed '#...' line-directive; missing filename\n"); fname++; cptr = strchr(fname, '"'); if(!cptr) error_loc("Malformed '#...' line-directive; missing terminating \"\n"); *cptr = '\0'; line_number = lineno - 1; /* We didn't read the newline */ input_name = xstrdup(fname); } midl_echo[^\n]* yyless(9); yy_pop_state(); return tCPPQUOTE; winrt[^\n]* { if(import_stack_ptr) { if(!winrt_mode) error_loc("winrt IDL file imported in non-winrt mode\n"); }else { const char *ptr = yytext+5; winrt_mode = TRUE; while(isspace(*ptr)) ptr++; if(!strncmp(ptr, "ns_prefix", 9) && (!*(ptr += 9) || isspace(*ptr))) use_abi_namespace = TRUE; } yy_pop_state(); } [^\n]* parser_lval.str = xstrdup(yytext); yy_pop_state(); return aPRAGMA; ^{ws}*midl_pragma{ws}+warning return tPRAGMA_WARNING; \" yy_push_state(QUOTE); cbufidx = 0; \" { yy_pop_state(); parser_lval.str = get_buffered_cstring(); return aSTRING; } L\" yy_push_state(WSTRQUOTE); cbufidx = 0; \" { yy_pop_state(); parser_lval.str = get_buffered_cstring(); return aWSTRING; } \' yy_push_state(SQUOTE); cbufidx = 0; \' { yy_pop_state(); parser_lval.str = get_buffered_cstring(); return aSQSTRING; } \\\\ | \\\" addcchar(yytext[1]); \\\' addcchar(yytext[1]); \\. addcchar('\\'); addcchar(yytext[1]); . addcchar(yytext[0]); \[ yy_push_state(ATTR); return '['; \] yy_pop_state(); return ']'; {cident} return attr_token(yytext); {uuid} { parser_lval.uuid = parse_uuid(yytext); return aUUID; } {hex} { parser_lval.num = xstrtoul(yytext, NULL, 0); return aHEXNUM; } {int} { parser_lval.num = xstrtoul(yytext, NULL, 0); return aNUM; } {double} { parser_lval.dbl = strtod(yytext, NULL); return aDOUBLE; } SAFEARRAY{ws}*/\( return tSAFEARRAY; {cident} return kw_token(yytext); \n line_number++; {ws} \<\< return SHL; \>\> return SHR; \-\> return MEMBERPTR; == return EQUALITY; != return INEQUALITY; \>= return GREATEREQUAL; \<= return LESSEQUAL; \|\| return LOGICALOR; && return LOGICALAND; \.\.\. return ELLIPSIS; . return yytext[0]; <> { if (import_stack_ptr) return aEOF; else yyterminate(); } %% #ifndef parser_wrap int parser_wrap(void) { return 1; } #endif struct keyword { const char *kw; int token; }; /* This table MUST be alphabetically sorted on the kw field */ static const struct keyword keywords[] = { {"FALSE", tFALSE}, {"NULL", tNULL}, {"TRUE", tTRUE}, {"__cdecl", tCDECL}, {"__fastcall", tFASTCALL}, {"__int3264", tINT3264}, {"__int64", tINT64}, {"__pascal", tPASCAL}, {"__stdcall", tSTDCALL}, {"_cdecl", tCDECL}, {"_fastcall", tFASTCALL}, {"_pascal", tPASCAL}, {"_stdcall", tSTDCALL}, {"boolean", tBOOLEAN}, {"byte", tBYTE}, {"case", tCASE}, {"cdecl", tCDECL}, {"char", tCHAR}, {"coclass", tCOCLASS}, {"const", tCONST}, {"cpp_quote", tCPPQUOTE}, {"default", tDEFAULT}, {"dispinterface", tDISPINTERFACE}, {"double", tDOUBLE}, {"enum", tENUM}, {"error_status_t", tERRORSTATUST}, {"extern", tEXTERN}, {"float", tFLOAT}, {"handle_t", tHANDLET}, {"hyper", tHYPER}, {"import", tIMPORT}, {"importlib", tIMPORTLIB}, {"inline", tINLINE}, {"int", tINT}, {"interface", tINTERFACE}, {"library", tLIBRARY}, {"long", tLONG}, {"methods", tMETHODS}, {"module", tMODULE}, {"namespace", tNAMESPACE}, {"pascal", tPASCAL}, {"properties", tPROPERTIES}, {"register", tREGISTER}, {"short", tSHORT}, {"signed", tSIGNED}, {"sizeof", tSIZEOF}, {"small", tSMALL}, {"static", tSTATIC}, {"stdcall", tSTDCALL}, {"struct", tSTRUCT}, {"switch", tSWITCH}, {"typedef", tTYPEDEF}, {"union", tUNION}, {"unsigned", tUNSIGNED}, {"void", tVOID}, {"wchar_t", tWCHAR}, }; #define NKEYWORDS (sizeof(keywords)/sizeof(keywords[0])) /* keywords only recognized in attribute lists * This table MUST be alphabetically sorted on the kw field */ static const struct keyword attr_keywords[] = { {"aggregatable", tAGGREGATABLE}, {"allocate", tALLOCATE}, {"annotation", tANNOTATION}, {"apartment", tAPARTMENT}, {"appobject", tAPPOBJECT}, {"async", tASYNC}, {"async_uuid", tASYNCUUID}, {"auto_handle", tAUTOHANDLE}, {"bindable", tBINDABLE}, {"both", tBOTH}, {"broadcast", tBROADCAST}, {"byte_count", tBYTECOUNT}, {"call_as", tCALLAS}, {"callback", tCALLBACK}, {"code", tCODE}, {"comm_status", tCOMMSTATUS}, {"context_handle", tCONTEXTHANDLE}, {"context_handle_noserialize", tCONTEXTHANDLENOSERIALIZE}, {"context_handle_serialize", tCONTEXTHANDLENOSERIALIZE}, {"control", tCONTROL}, {"decode", tDECODE}, {"defaultbind", tDEFAULTBIND}, {"defaultcollelem", tDEFAULTCOLLELEM}, {"defaultvalue", tDEFAULTVALUE}, {"defaultvtable", tDEFAULTVTABLE}, {"disable_consistency_check", tDISABLECONSISTENCYCHECK}, {"displaybind", tDISPLAYBIND}, {"dllname", tDLLNAME}, {"dual", tDUAL}, {"enable_allocate", tENABLEALLOCATE}, {"encode", tENCODE}, {"endpoint", tENDPOINT}, {"entry", tENTRY}, {"explicit_handle", tEXPLICITHANDLE}, {"fault_status", tFAULTSTATUS}, {"force_allocate", tFORCEALLOCATE}, {"free", tFREE}, {"handle", tHANDLE}, {"helpcontext", tHELPCONTEXT}, {"helpfile", tHELPFILE}, {"helpstring", tHELPSTRING}, {"helpstringcontext", tHELPSTRINGCONTEXT}, {"helpstringdll", tHELPSTRINGDLL}, {"hidden", tHIDDEN}, {"id", tID}, {"idempotent", tIDEMPOTENT}, {"ignore", tIGNORE}, {"iid_is", tIIDIS}, {"immediatebind", tIMMEDIATEBIND}, {"implicit_handle", tIMPLICITHANDLE}, {"in", tIN}, {"in_line", tIN_LINE}, {"input_sync", tINPUTSYNC}, {"lcid", tLCID}, {"length_is", tLENGTHIS}, {"licensed", tLICENSED}, {"local", tLOCAL}, {"maybe", tMAYBE}, {"message", tMESSAGE}, {"neutral", tNEUTRAL}, {"nocode", tNOCODE}, {"nonbrowsable", tNONBROWSABLE}, {"noncreatable", tNONCREATABLE}, {"nonextensible", tNONEXTENSIBLE}, {"notify", tNOTIFY}, {"notify_flag", tNOTIFYFLAG}, {"object", tOBJECT}, {"odl", tODL}, {"oleautomation", tOLEAUTOMATION}, {"optimize", tOPTIMIZE}, {"optional", tOPTIONAL}, {"out", tOUT}, {"partial_ignore", tPARTIALIGNORE}, {"pointer_default", tPOINTERDEFAULT}, {"progid", tPROGID}, {"propget", tPROPGET}, {"propput", tPROPPUT}, {"propputref", tPROPPUTREF}, {"proxy", tPROXY}, {"ptr", tPTR}, {"public", tPUBLIC}, {"range", tRANGE}, {"readonly", tREADONLY}, {"ref", tREF}, {"represent_as", tREPRESENTAS}, {"requestedit", tREQUESTEDIT}, {"restricted", tRESTRICTED}, {"retval", tRETVAL}, {"single", tSINGLE}, {"size_is", tSIZEIS}, {"source", tSOURCE}, {"strict_context_handle", tSTRICTCONTEXTHANDLE}, {"string", tSTRING}, {"switch_is", tSWITCHIS}, {"switch_type", tSWITCHTYPE}, {"threading", tTHREADING}, {"transmit_as", tTRANSMITAS}, {"uidefault", tUIDEFAULT}, {"unique", tUNIQUE}, {"user_marshal", tUSERMARSHAL}, {"usesgetlasterror", tUSESGETLASTERROR}, {"uuid", tUUID}, {"v1_enum", tV1ENUM}, {"vararg", tVARARG}, {"version", tVERSION}, {"vi_progid", tVIPROGID}, {"wire_marshal", tWIREMARSHAL}, }; /* attributes TODO: custom first_is last_is max_is min_is */ #define KWP(p) ((const struct keyword *)(p)) static int kw_cmp_func(const void *s1, const void *s2) { return strcmp(KWP(s1)->kw, KWP(s2)->kw); } static int kw_token(const char *kw) { struct keyword key, *kwp; key.kw = kw; kwp = bsearch(&key, keywords, NKEYWORDS, sizeof(keywords[0]), kw_cmp_func); if (kwp && (winrt_mode || kwp->token != tNAMESPACE)) { parser_lval.str = xstrdup(kwp->kw); return kwp->token; } parser_lval.str = xstrdup(kw); return is_type(kw) ? aKNOWNTYPE : aIDENTIFIER; } static int attr_token(const char *kw) { struct keyword key, *kwp; key.kw = kw; kwp = bsearch(&key, attr_keywords, sizeof(attr_keywords)/sizeof(attr_keywords[0]), sizeof(attr_keywords[0]), kw_cmp_func); if (kwp) { parser_lval.str = xstrdup(kwp->kw); return kwp->token; } return kw_token(kw); } static void addcchar(char c) { if(cbufidx >= cbufalloc) { cbufalloc += 1024; cbuffer = xrealloc(cbuffer, cbufalloc * sizeof(cbuffer[0])); if(cbufalloc > 65536) parser_warning("Reallocating string buffer larger than 64kB\n"); } cbuffer[cbufidx++] = c; } static char *get_buffered_cstring(void) { addcchar(0); return xstrdup(cbuffer); } void pop_import(void) { int ptr = import_stack_ptr-1; fclose(yyin); yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( import_stack[ptr].state ); if (temp_name) { unlink(temp_name); free(temp_name); } temp_name = import_stack[ptr].temp_name; input_name = import_stack[ptr].input_name; line_number = import_stack[ptr].line_number; import_stack_ptr--; } struct imports { char *name; struct imports *next; } *first_import; int do_import(char *fname) { FILE *f; char *path, *name; struct imports *import; int ptr = import_stack_ptr; int ret, fd; import = first_import; while (import && strcmp(import->name, fname)) import = import->next; if (import) return 0; /* already imported */ import = xmalloc(sizeof(struct imports)); import->name = xstrdup(fname); import->next = first_import; first_import = import; /* don't search for a file name with a path in the include directories, * for compatibility with MIDL */ if (strchr( fname, '/' ) || strchr( fname, '\\' )) path = xstrdup( fname ); else if (!(path = wpp_find_include( fname, input_name ))) error_loc("Unable to open include file %s\n", fname); if (import_stack_ptr == MAX_IMPORT_DEPTH) error_loc("Exceeded max import depth\n"); import_stack[ptr].temp_name = temp_name; import_stack[ptr].input_name = input_name; import_stack[ptr].line_number = line_number; import_stack_ptr++; input_name = path; line_number = 1; name = xstrdup( "widl.XXXXXX" ); if((fd = mkstemps( name, 0 )) == -1) error("Could not generate a temp name from %s\n", name); temp_name = name; if (!(f = fdopen(fd, "wt"))) error("Could not open fd %s for writing\n", name); ret = wpp_parse( path, f ); fclose( f ); if (ret) exit(1); if((f = fopen(temp_name, "r")) == NULL) error_loc("Unable to open %s\n", temp_name); import_stack[ptr].state = YY_CURRENT_BUFFER; yy_switch_to_buffer(yy_create_buffer(f, YY_BUF_SIZE)); return 1; } void abort_import(void) { int ptr; for (ptr=0; ptrnum == warning) return; warning_entry = xmalloc( sizeof(*warning_entry) ); warning_entry->num = warning; list_add_tail(disabled_warnings, &warning_entry->entry); } static void warning_enable(int warning) { warning_t *warning_entry; LIST_FOR_EACH_ENTRY(warning_entry, disabled_warnings, warning_t, entry) if(warning_entry->num == warning) { list_remove(&warning_entry->entry); free(warning_entry); break; } } int do_warning(char *toggle, warning_list_t *wnum) { warning_t *warning, *next; int ret = 1; if(!disabled_warnings) { disabled_warnings = xmalloc( sizeof(*disabled_warnings) ); list_init( disabled_warnings ); } if(!strcmp(toggle, "disable")) LIST_FOR_EACH_ENTRY(warning, wnum, warning_t, entry) warning_disable(warning->num); else if(!strcmp(toggle, "enable")) LIST_FOR_EACH_ENTRY(warning, wnum, warning_t, entry) warning_enable(warning->num); else ret = 0; LIST_FOR_EACH_ENTRY_SAFE(warning, next, wnum, warning_t, entry) free(warning); return ret; } int is_warning_enabled(int warning) { warning_t *warning_entry; if(!disabled_warnings) return 1; LIST_FOR_EACH_ENTRY(warning_entry, disabled_warnings, warning_t, entry) if(warning_entry->num == warning) return 0; return 1; } ================================================ FILE: widl/parser.y ================================================ %{ /* * IDL Compiler * * Copyright 2002 Ove Kaaven * Copyright 2006-2008 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" #include "typelib.h" #include "typegen.h" #include "expr.h" #include "typetree.h" static unsigned char pointer_default = FC_UP; typedef struct list typelist_t; struct typenode { type_t *type; struct list entry; }; struct _import_t { char *name; int import_performed; }; typedef struct _decl_spec_t { type_t *type; attr_list_t *attrs; enum storage_class stgclass; } decl_spec_t; typelist_t incomplete_types = LIST_INIT(incomplete_types); static void fix_incomplete(void); static void fix_incomplete_types(type_t *complete_type); static str_list_t *append_str(str_list_t *list, char *str); static attr_list_t *append_attr(attr_list_t *list, attr_t *attr); static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list); static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass); static attr_t *make_attr(enum attr_type type); static attr_t *make_attrv(enum attr_type type, unsigned int val); static attr_t *make_attrp(enum attr_type type, void *val); static expr_list_t *append_expr(expr_list_t *list, expr_t *expr); static array_dims_t *append_array(array_dims_t *list, expr_t *expr); static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl, int top); static var_list_t *set_var_types(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_list_t *decls); static ifref_list_t *append_ifref(ifref_list_t *list, ifref_t *iface); static ifref_t *make_ifref(type_t *iface); static var_list_t *append_var_list(var_list_t *list, var_list_t *vars); static declarator_list_t *append_declarator(declarator_list_t *list, declarator_t *p); static declarator_t *make_declarator(var_t *var); static type_t *make_safearray(type_t *type); static typelib_t *make_library(const char *name, const attr_list_t *attrs); static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type); static warning_list_t *append_warning(warning_list_t *, int); static type_t *reg_typedefs(decl_spec_t *decl_spec, var_list_t *names, attr_list_t *attrs); static type_t *find_type_or_error(const char *name, int t); static type_t *find_type_or_error2(char *name, int t); static var_t *reg_const(var_t *var); static void push_namespace(const char *name); static void pop_namespace(const char *name); static char *gen_name(void); static void check_arg_attrs(const var_t *arg); static void check_statements(const statement_list_t *stmts, int is_inside_library); static void check_all_user_types(const statement_list_t *stmts); static attr_list_t *check_iface_attrs(const char *name, attr_list_t *attrs); static attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs); static attr_list_t *check_typedef_attrs(attr_list_t *attrs); static attr_list_t *check_enum_attrs(attr_list_t *attrs); static attr_list_t *check_struct_attrs(attr_list_t *attrs); static attr_list_t *check_union_attrs(attr_list_t *attrs); static attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs); static attr_list_t *check_library_attrs(const char *name, attr_list_t *attrs); static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs); static attr_list_t *check_module_attrs(const char *name, attr_list_t *attrs); static attr_list_t *check_coclass_attrs(const char *name, attr_list_t *attrs); const char *get_attr_display_name(enum attr_type type); static void add_explicit_handle_if_necessary(const type_t *iface, var_t *func); static void check_def(const type_t *t); static statement_t *make_statement(enum statement_type type); static statement_t *make_statement_type_decl(type_t *type); static statement_t *make_statement_reference(type_t *type); static statement_t *make_statement_declaration(var_t *var); static statement_t *make_statement_library(typelib_t *typelib); static statement_t *make_statement_pragma(const char *str); static statement_t *make_statement_cppquote(const char *str); static statement_t *make_statement_importlib(const char *str); static statement_t *make_statement_module(type_t *type); static statement_t *make_statement_typedef(var_list_t *names); static statement_t *make_statement_import(const char *str); static statement_list_t *append_statement(statement_list_t *list, statement_t *stmt); static statement_list_t *append_statements(statement_list_t *, statement_list_t *); static attr_list_t *append_attribs(attr_list_t *, attr_list_t *); static struct namespace global_namespace = { NULL, NULL, LIST_INIT(global_namespace.entry), LIST_INIT(global_namespace.children) }; static struct namespace *current_namespace = &global_namespace; %} %union { attr_t *attr; attr_list_t *attr_list; str_list_t *str_list; expr_t *expr; expr_list_t *expr_list; array_dims_t *array_dims; type_t *type; var_t *var; var_list_t *var_list; declarator_t *declarator; declarator_list_t *declarator_list; statement_t *statement; statement_list_t *stmt_list; warning_t *warning; warning_list_t *warning_list; ifref_t *ifref; ifref_list_t *ifref_list; char *str; UUID *uuid; unsigned int num; double dbl; interface_info_t ifinfo; typelib_t *typelib; struct _import_t *import; struct _decl_spec_t *declspec; enum storage_class stgclass; } %token aIDENTIFIER aPRAGMA %token aKNOWNTYPE %token aNUM aHEXNUM %token aDOUBLE %token aSTRING aWSTRING aSQSTRING %token aUUID %token aEOF %token SHL SHR %token MEMBERPTR %token EQUALITY INEQUALITY %token GREATEREQUAL LESSEQUAL %token LOGICALOR LOGICALAND %token ELLIPSIS %token tAGGREGATABLE tALLOCATE tANNOTATION tAPPOBJECT tASYNC tASYNCUUID %token tAUTOHANDLE tBINDABLE tBOOLEAN tBROADCAST tBYTE tBYTECOUNT %token tCALLAS tCALLBACK tCASE tCDECL tCHAR tCOCLASS tCODE tCOMMSTATUS %token tCONST tCONTEXTHANDLE tCONTEXTHANDLENOSERIALIZE %token tCONTEXTHANDLESERIALIZE tCONTROL tCPPQUOTE %token tDECODE tDEFAULT tDEFAULTBIND %token tDEFAULTCOLLELEM %token tDEFAULTVALUE %token tDEFAULTVTABLE %token tDISABLECONSISTENCYCHECK tDISPLAYBIND %token tDISPINTERFACE %token tDLLNAME tDOUBLE tDUAL %token tENABLEALLOCATE tENCODE tENDPOINT %token tENTRY tENUM tERRORSTATUST %token tEXPLICITHANDLE tEXTERN %token tFALSE %token tFASTCALL tFAULTSTATUS %token tFLOAT tFORCEALLOCATE %token tHANDLE %token tHANDLET %token tHELPCONTEXT tHELPFILE %token tHELPSTRING tHELPSTRINGCONTEXT tHELPSTRINGDLL %token tHIDDEN %token tHYPER tID tIDEMPOTENT %token tIGNORE tIIDIS %token tIMMEDIATEBIND %token tIMPLICITHANDLE %token tIMPORT tIMPORTLIB %token tIN tIN_LINE tINLINE %token tINPUTSYNC %token tINT tINT3264 tINT64 %token tINTERFACE %token tLCID %token tLENGTHIS tLIBRARY %token tLICENSED tLOCAL %token tLONG %token tMAYBE tMESSAGE %token tMETHODS %token tMODULE %token tNAMESPACE %token tNOCODE tNONBROWSABLE %token tNONCREATABLE %token tNONEXTENSIBLE %token tNOTIFY tNOTIFYFLAG %token tNULL %token tOBJECT tODL tOLEAUTOMATION %token tOPTIMIZE tOPTIONAL %token tOUT %token tPARTIALIGNORE tPASCAL %token tPOINTERDEFAULT %token tPRAGMA_WARNING %token tPROGID tPROPERTIES %token tPROPGET tPROPPUT tPROPPUTREF %token tPROXY tPTR %token tPUBLIC %token tRANGE %token tREADONLY tREF %token tREGISTER tREPRESENTAS %token tREQUESTEDIT %token tRESTRICTED %token tRETVAL %token tSAFEARRAY %token tSHORT %token tSIGNED %token tSIZEIS tSIZEOF %token tSMALL %token tSOURCE %token tSTATIC %token tSTDCALL %token tSTRICTCONTEXTHANDLE %token tSTRING tSTRUCT %token tSWITCH tSWITCHIS tSWITCHTYPE %token tTHREADING tTRANSMITAS %token tTRUE %token tTYPEDEF %token tUIDEFAULT tUNION %token tUNIQUE %token tUNSIGNED %token tUSESGETLASTERROR tUSERMARSHAL tUUID %token tV1ENUM %token tVARARG %token tVERSION tVIPROGID %token tVOID %token tWCHAR tWIREMARSHAL %token tAPARTMENT tNEUTRAL tSINGLE tFREE tBOTH %type attribute type_qualifier function_specifier %type m_attributes attributes attrib_list m_type_qual_list %type str_list %type m_expr expr expr_const expr_int_const array m_bitfield %type m_exprs /* exprs expr_list */ expr_list_int_const %type interfacehdr %type storage_cls_spec %type decl_spec decl_spec_no_type m_decl_spec_no_type %type inherit interface interfacedef interfacedec %type dispinterface dispinterfacehdr dispinterfacedef %type module modulehdr moduledef %type namespacedef %type base_type int_std %type enumdef structdef uniondef typedecl %type type %type coclass_int %type coclass_ints %type arg ne_union_field union_field s_field case enum declaration %type funcdef %type m_args arg_list args dispint_meths %type fields ne_union_fields cases enums enum_list dispint_props field %type m_ident ident %type declarator direct_declarator init_declarator struct_declarator %type m_any_declarator any_declarator any_declarator_no_direct any_direct_declarator %type m_abstract_declarator abstract_declarator abstract_declarator_no_direct abstract_direct_declarator %type declarator_list struct_declarator_list %type coclass coclasshdr coclassdef %type pointer_type threading_type version %type libraryhdr callconv cppquote importlib import t_ident %type uuid_string %type import_start %type library_start librarydef %type statement typedef pragma_warning %type gbl_statements imp_statements int_statements %type warnings %left ',' %right '?' ':' %left LOGICALOR %left LOGICALAND %left '|' %left '^' %left '&' %left EQUALITY INEQUALITY %left '<' '>' LESSEQUAL GREATEREQUAL %left SHL SHR %left '-' '+' %left '*' '/' '%' %right '!' '~' CAST PPTR POS NEG ADDRESSOF tSIZEOF %left '.' MEMBERPTR '[' ']' %define parse.error verbose %% input: gbl_statements { fix_incomplete(); check_statements($1, FALSE); check_all_user_types($1); write_header($1); write_id_data($1); write_proxies($1); write_client($1); write_server($1); write_regscript($1); write_dlldata($1); write_local_stubs($1); write_relay16($1); } ; gbl_statements: { $$ = NULL; } | gbl_statements namespacedef '{' { push_namespace($2); } gbl_statements '}' { pop_namespace($2); $$ = append_statements($1, $5); } | gbl_statements interfacedec { $$ = append_statement($1, make_statement_reference($2)); } | gbl_statements interfacedef { $$ = append_statement($1, make_statement_type_decl($2)); } | gbl_statements coclass ';' { $$ = $1; reg_type($2, $2->name, current_namespace, 0); } | gbl_statements coclassdef { $$ = append_statement($1, make_statement_type_decl($2)); reg_type($2, $2->name, current_namespace, 0); } | gbl_statements moduledef { $$ = append_statement($1, make_statement_module($2)); } | gbl_statements librarydef { $$ = append_statement($1, make_statement_library($2)); } | gbl_statements statement { $$ = append_statement($1, $2); } ; imp_statements: { $$ = NULL; } | imp_statements interfacedec { $$ = append_statement($1, make_statement_reference($2)); } | imp_statements namespacedef '{' { push_namespace($2); } imp_statements '}' { pop_namespace($2); $$ = append_statements($1, $5); } | imp_statements interfacedef { $$ = append_statement($1, make_statement_type_decl($2)); } | imp_statements coclass ';' { $$ = $1; reg_type($2, $2->name, current_namespace, 0); } | imp_statements coclassdef { $$ = append_statement($1, make_statement_type_decl($2)); reg_type($2, $2->name, current_namespace, 0); } | imp_statements moduledef { $$ = append_statement($1, make_statement_module($2)); } | imp_statements statement { $$ = append_statement($1, $2); } | imp_statements importlib { $$ = append_statement($1, make_statement_importlib($2)); } | imp_statements librarydef { $$ = append_statement($1, make_statement_library($2)); } ; int_statements: { $$ = NULL; } | int_statements statement { $$ = append_statement($1, $2); } ; semicolon_opt: | ';' ; statement: cppquote { $$ = make_statement_cppquote($1); } | typedecl ';' { $$ = make_statement_type_decl($1); } | declaration ';' { $$ = make_statement_declaration($1); } | import { $$ = make_statement_import($1); } | typedef ';' { $$ = $1; } | aPRAGMA { $$ = make_statement_pragma($1); } | pragma_warning { $$ = NULL; } ; pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')' { int result; $$ = NULL; result = do_warning($3, $5); if(!result) error_loc("expected \"disable\" or \"enable\"\n"); } ; warnings: aNUM { $$ = append_warning(NULL, $1); } | warnings aNUM { $$ = append_warning($1, $2); } ; typedecl: enumdef | tENUM aIDENTIFIER { $$ = type_new_enum($2, current_namespace, FALSE, NULL); } | structdef | tSTRUCT aIDENTIFIER { $$ = type_new_struct($2, current_namespace, FALSE, NULL); } | uniondef | tUNION aIDENTIFIER { $$ = type_new_nonencapsulated_union($2, FALSE, NULL); } | attributes enumdef { $$ = $2; $$->attrs = check_enum_attrs($1); } | attributes structdef { $$ = $2; $$->attrs = check_struct_attrs($1); } | attributes uniondef { $$ = $2; $$->attrs = check_union_attrs($1); } ; cppquote: tCPPQUOTE '(' aSTRING ')' { $$ = $3; } ; import_start: tIMPORT aSTRING ';' { assert(yychar == YYEMPTY); $$ = xmalloc(sizeof(struct _import_t)); $$->name = $2; $$->import_performed = do_import($2); if (!$$->import_performed) yychar = aEOF; } ; import: import_start imp_statements aEOF { $$ = $1->name; if ($1->import_performed) pop_import(); free($1); } ; importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt { $$ = $3; if(!parse_only) add_importlib($3); } ; libraryhdr: tLIBRARY aIDENTIFIER { $$ = $2; } | tLIBRARY aKNOWNTYPE { $$ = $2; } ; library_start: attributes libraryhdr '{' { $$ = make_library($2, check_library_attrs($2, $1)); if (!parse_only) start_typelib($$); } ; librarydef: library_start imp_statements '}' semicolon_opt { $$ = $1; $$->stmts = $2; if (!parse_only) end_typelib(); } ; m_args: { $$ = NULL; } | args ; arg_list: arg { check_arg_attrs($1); $$ = append_var( NULL, $1 ); } | arg_list ',' arg { check_arg_attrs($3); $$ = append_var( $1, $3 ); } ; args: arg_list | arg_list ',' ELLIPSIS { $$ = append_var( $1, make_var(strdup("...")) ); } ; /* split into two rules to get bison to resolve a tVOID conflict */ arg: attributes decl_spec m_any_declarator { if ($2->stgclass != STG_NONE && $2->stgclass != STG_REGISTER) error_loc("invalid storage class for function parameter\n"); $$ = declare_var($1, $2, $3, TRUE); free($2); free($3); } | decl_spec m_any_declarator { if ($1->stgclass != STG_NONE && $1->stgclass != STG_REGISTER) error_loc("invalid storage class for function parameter\n"); $$ = declare_var(NULL, $1, $2, TRUE); free($1); free($2); } ; array: '[' expr ']' { $$ = $2; if (!$$->is_const) error_loc("array dimension is not an integer constant\n"); } | '[' '*' ']' { $$ = make_expr(EXPR_VOID); } | '[' ']' { $$ = make_expr(EXPR_VOID); } ; m_attributes: { $$ = NULL; } | attributes ; attributes: '[' attrib_list ']' { $$ = $2; } ; attrib_list: attribute { $$ = append_attr( NULL, $1 ); } | attrib_list ',' attribute { $$ = append_attr( $1, $3 ); } | attrib_list ']' '[' attribute { $$ = append_attr( $1, $4 ); } ; str_list: aSTRING { $$ = append_str( NULL, $1 ); } | str_list ',' aSTRING { $$ = append_str( $1, $3 ); } ; attribute: { $$ = NULL; } | tAGGREGATABLE { $$ = make_attr(ATTR_AGGREGATABLE); } | tANNOTATION '(' aSTRING ')' { $$ = make_attrp(ATTR_ANNOTATION, $3); } | tAPPOBJECT { $$ = make_attr(ATTR_APPOBJECT); } | tASYNC { $$ = make_attr(ATTR_ASYNC); } | tAUTOHANDLE { $$ = make_attr(ATTR_AUTO_HANDLE); } | tBINDABLE { $$ = make_attr(ATTR_BINDABLE); } | tBROADCAST { $$ = make_attr(ATTR_BROADCAST); } | tCALLAS '(' ident ')' { $$ = make_attrp(ATTR_CALLAS, $3); } | tCASE '(' expr_list_int_const ')' { $$ = make_attrp(ATTR_CASE, $3); } | tCODE { $$ = make_attr(ATTR_CODE); } | tCOMMSTATUS { $$ = make_attr(ATTR_COMMSTATUS); } | tCONTEXTHANDLE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); } | tCONTEXTHANDLENOSERIALIZE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ } | tCONTEXTHANDLESERIALIZE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ } | tCONTROL { $$ = make_attr(ATTR_CONTROL); } | tDECODE { $$ = make_attr(ATTR_DECODE); } | tDEFAULT { $$ = make_attr(ATTR_DEFAULT); } | tDEFAULTBIND { $$ = make_attr(ATTR_DEFAULTBIND); } | tDEFAULTCOLLELEM { $$ = make_attr(ATTR_DEFAULTCOLLELEM); } | tDEFAULTVALUE '(' expr_const ')' { $$ = make_attrp(ATTR_DEFAULTVALUE, $3); } | tDEFAULTVTABLE { $$ = make_attr(ATTR_DEFAULTVTABLE); } | tDISABLECONSISTENCYCHECK { $$ = make_attr(ATTR_DISABLECONSISTENCYCHECK); } | tDISPLAYBIND { $$ = make_attr(ATTR_DISPLAYBIND); } | tDLLNAME '(' aSTRING ')' { $$ = make_attrp(ATTR_DLLNAME, $3); } | tDUAL { $$ = make_attr(ATTR_DUAL); } | tENABLEALLOCATE { $$ = make_attr(ATTR_ENABLEALLOCATE); } | tENCODE { $$ = make_attr(ATTR_ENCODE); } | tENDPOINT '(' str_list ')' { $$ = make_attrp(ATTR_ENDPOINT, $3); } | tENTRY '(' expr_const ')' { $$ = make_attrp(ATTR_ENTRY, $3); } | tEXPLICITHANDLE { $$ = make_attr(ATTR_EXPLICIT_HANDLE); } | tFAULTSTATUS { $$ = make_attr(ATTR_FAULTSTATUS); } | tFORCEALLOCATE { $$ = make_attr(ATTR_FORCEALLOCATE); } | tHANDLE { $$ = make_attr(ATTR_HANDLE); } | tHELPCONTEXT '(' expr_int_const ')' { $$ = make_attrp(ATTR_HELPCONTEXT, $3); } | tHELPFILE '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPFILE, $3); } | tHELPSTRING '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPSTRING, $3); } | tHELPSTRINGCONTEXT '(' expr_int_const ')' { $$ = make_attrp(ATTR_HELPSTRINGCONTEXT, $3); } | tHELPSTRINGDLL '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPSTRINGDLL, $3); } | tHIDDEN { $$ = make_attr(ATTR_HIDDEN); } | tID '(' expr_int_const ')' { $$ = make_attrp(ATTR_ID, $3); } | tIDEMPOTENT { $$ = make_attr(ATTR_IDEMPOTENT); } | tIGNORE { $$ = make_attr(ATTR_IGNORE); } | tIIDIS '(' expr ')' { $$ = make_attrp(ATTR_IIDIS, $3); } | tIMMEDIATEBIND { $$ = make_attr(ATTR_IMMEDIATEBIND); } | tIMPLICITHANDLE '(' arg ')' { $$ = make_attrp(ATTR_IMPLICIT_HANDLE, $3); } | tIN { $$ = make_attr(ATTR_IN); } | tINPUTSYNC { $$ = make_attr(ATTR_INPUTSYNC); } | tLENGTHIS '(' m_exprs ')' { $$ = make_attrp(ATTR_LENGTHIS, $3); } | tLCID '(' expr_int_const ')' { $$ = make_attrp(ATTR_LIBLCID, $3); } | tLCID { $$ = make_attr(ATTR_PARAMLCID); } | tLICENSED { $$ = make_attr(ATTR_LICENSED); } | tLOCAL { $$ = make_attr(ATTR_LOCAL); } | tMAYBE { $$ = make_attr(ATTR_MAYBE); } | tMESSAGE { $$ = make_attr(ATTR_MESSAGE); } | tNOCODE { $$ = make_attr(ATTR_NOCODE); } | tNONBROWSABLE { $$ = make_attr(ATTR_NONBROWSABLE); } | tNONCREATABLE { $$ = make_attr(ATTR_NONCREATABLE); } | tNONEXTENSIBLE { $$ = make_attr(ATTR_NONEXTENSIBLE); } | tNOTIFY { $$ = make_attr(ATTR_NOTIFY); } | tNOTIFYFLAG { $$ = make_attr(ATTR_NOTIFYFLAG); } | tOBJECT { $$ = make_attr(ATTR_OBJECT); } | tODL { $$ = make_attr(ATTR_ODL); } | tOLEAUTOMATION { $$ = make_attr(ATTR_OLEAUTOMATION); } | tOPTIMIZE '(' aSTRING ')' { $$ = make_attrp(ATTR_OPTIMIZE, $3); } | tOPTIONAL { $$ = make_attr(ATTR_OPTIONAL); } | tOUT { $$ = make_attr(ATTR_OUT); } | tPARTIALIGNORE { $$ = make_attr(ATTR_PARTIALIGNORE); } | tPOINTERDEFAULT '(' pointer_type ')' { $$ = make_attrv(ATTR_POINTERDEFAULT, $3); } | tPROGID '(' aSTRING ')' { $$ = make_attrp(ATTR_PROGID, $3); } | tPROPGET { $$ = make_attr(ATTR_PROPGET); } | tPROPPUT { $$ = make_attr(ATTR_PROPPUT); } | tPROPPUTREF { $$ = make_attr(ATTR_PROPPUTREF); } | tPROXY { $$ = make_attr(ATTR_PROXY); } | tPUBLIC { $$ = make_attr(ATTR_PUBLIC); } | tRANGE '(' expr_int_const ',' expr_int_const ')' { expr_list_t *list = append_expr( NULL, $3 ); list = append_expr( list, $5 ); $$ = make_attrp(ATTR_RANGE, list); } | tREADONLY { $$ = make_attr(ATTR_READONLY); } | tREPRESENTAS '(' type ')' { $$ = make_attrp(ATTR_REPRESENTAS, $3); } | tREQUESTEDIT { $$ = make_attr(ATTR_REQUESTEDIT); } | tRESTRICTED { $$ = make_attr(ATTR_RESTRICTED); } | tRETVAL { $$ = make_attr(ATTR_RETVAL); } | tSIZEIS '(' m_exprs ')' { $$ = make_attrp(ATTR_SIZEIS, $3); } | tSOURCE { $$ = make_attr(ATTR_SOURCE); } | tSTRICTCONTEXTHANDLE { $$ = make_attr(ATTR_STRICTCONTEXTHANDLE); } | tSTRING { $$ = make_attr(ATTR_STRING); } | tSWITCHIS '(' expr ')' { $$ = make_attrp(ATTR_SWITCHIS, $3); } | tSWITCHTYPE '(' type ')' { $$ = make_attrp(ATTR_SWITCHTYPE, $3); } | tTRANSMITAS '(' type ')' { $$ = make_attrp(ATTR_TRANSMITAS, $3); } | tTHREADING '(' threading_type ')' { $$ = make_attrv(ATTR_THREADING, $3); } | tUIDEFAULT { $$ = make_attr(ATTR_UIDEFAULT); } | tUSESGETLASTERROR { $$ = make_attr(ATTR_USESGETLASTERROR); } | tUSERMARSHAL '(' type ')' { $$ = make_attrp(ATTR_USERMARSHAL, $3); } | tUUID '(' uuid_string ')' { $$ = make_attrp(ATTR_UUID, $3); } | tASYNCUUID '(' uuid_string ')' { $$ = make_attrp(ATTR_ASYNCUUID, $3); } | tV1ENUM { $$ = make_attr(ATTR_V1ENUM); } | tVARARG { $$ = make_attr(ATTR_VARARG); } | tVERSION '(' version ')' { $$ = make_attrv(ATTR_VERSION, $3); } | tVIPROGID '(' aSTRING ')' { $$ = make_attrp(ATTR_VIPROGID, $3); } | tWIREMARSHAL '(' type ')' { $$ = make_attrp(ATTR_WIREMARSHAL, $3); } | pointer_type { $$ = make_attrv(ATTR_POINTERTYPE, $1); } ; uuid_string: aUUID | aSTRING { if (!is_valid_uuid($1)) error_loc("invalid UUID: %s\n", $1); $$ = parse_uuid($1); } ; callconv: tCDECL { $$ = xstrdup("__cdecl"); } | tFASTCALL { $$ = xstrdup("__fastcall"); } | tPASCAL { $$ = xstrdup("__pascal"); } | tSTDCALL { $$ = xstrdup("__stdcall"); } ; cases: { $$ = NULL; } | cases case { $$ = append_var( $1, $2 ); } ; case: tCASE expr_int_const ':' union_field { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, $2 )); $$ = $4; if (!$$) $$ = make_var(NULL); $$->attrs = append_attr( $$->attrs, a ); } | tDEFAULT ':' union_field { attr_t *a = make_attr(ATTR_DEFAULT); $$ = $3; if (!$$) $$ = make_var(NULL); $$->attrs = append_attr( $$->attrs, a ); } ; enums: { $$ = NULL; } | enum_list ',' { $$ = $1; } | enum_list ; enum_list: enum { if (!$1->eval) $1->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */); $$ = append_var( NULL, $1 ); } | enum_list ',' enum { if (!$3->eval) { var_t *last = LIST_ENTRY( list_tail($$), var_t, entry ); enum expr_type type = EXPR_NUM; if (last->eval->type == EXPR_HEXNUM) type = EXPR_HEXNUM; if (last->eval->cval + 1 < 0) type = EXPR_HEXNUM; $3->eval = make_exprl(type, last->eval->cval + 1); } $$ = append_var( $1, $3 ); } ; enum: ident '=' expr_int_const { $$ = reg_const($1); $$->eval = $3; $$->type = type_new_int(TYPE_BASIC_INT, 0); } | ident { $$ = reg_const($1); $$->type = type_new_int(TYPE_BASIC_INT, 0); } ; enumdef: tENUM t_ident '{' enums '}' { $$ = type_new_enum($2, current_namespace, TRUE, $4); } ; m_exprs: m_expr { $$ = append_expr( NULL, $1 ); } | m_exprs ',' m_expr { $$ = append_expr( $1, $3 ); } ; m_expr: { $$ = make_expr(EXPR_VOID); } | expr ; expr: aNUM { $$ = make_exprl(EXPR_NUM, $1); } | aHEXNUM { $$ = make_exprl(EXPR_HEXNUM, $1); } | aDOUBLE { $$ = make_exprd(EXPR_DOUBLE, $1); } | tFALSE { $$ = make_exprl(EXPR_TRUEFALSE, 0); } | tNULL { $$ = make_exprl(EXPR_NUM, 0); } | tTRUE { $$ = make_exprl(EXPR_TRUEFALSE, 1); } | aSTRING { $$ = make_exprs(EXPR_STRLIT, $1); } | aWSTRING { $$ = make_exprs(EXPR_WSTRLIT, $1); } | aSQSTRING { $$ = make_exprs(EXPR_CHARCONST, $1); } | aIDENTIFIER { $$ = make_exprs(EXPR_IDENTIFIER, $1); } | expr '?' expr ':' expr { $$ = make_expr3(EXPR_COND, $1, $3, $5); } | expr LOGICALOR expr { $$ = make_expr2(EXPR_LOGOR, $1, $3); } | expr LOGICALAND expr { $$ = make_expr2(EXPR_LOGAND, $1, $3); } | expr '|' expr { $$ = make_expr2(EXPR_OR , $1, $3); } | expr '^' expr { $$ = make_expr2(EXPR_XOR, $1, $3); } | expr '&' expr { $$ = make_expr2(EXPR_AND, $1, $3); } | expr EQUALITY expr { $$ = make_expr2(EXPR_EQUALITY, $1, $3); } | expr INEQUALITY expr { $$ = make_expr2(EXPR_INEQUALITY, $1, $3); } | expr '>' expr { $$ = make_expr2(EXPR_GTR, $1, $3); } | expr '<' expr { $$ = make_expr2(EXPR_LESS, $1, $3); } | expr GREATEREQUAL expr { $$ = make_expr2(EXPR_GTREQL, $1, $3); } | expr LESSEQUAL expr { $$ = make_expr2(EXPR_LESSEQL, $1, $3); } | expr SHL expr { $$ = make_expr2(EXPR_SHL, $1, $3); } | expr SHR expr { $$ = make_expr2(EXPR_SHR, $1, $3); } | expr '+' expr { $$ = make_expr2(EXPR_ADD, $1, $3); } | expr '-' expr { $$ = make_expr2(EXPR_SUB, $1, $3); } | expr '%' expr { $$ = make_expr2(EXPR_MOD, $1, $3); } | expr '*' expr { $$ = make_expr2(EXPR_MUL, $1, $3); } | expr '/' expr { $$ = make_expr2(EXPR_DIV, $1, $3); } | '!' expr { $$ = make_expr1(EXPR_LOGNOT, $2); } | '~' expr { $$ = make_expr1(EXPR_NOT, $2); } | '+' expr %prec POS { $$ = make_expr1(EXPR_POS, $2); } | '-' expr %prec NEG { $$ = make_expr1(EXPR_NEG, $2); } | '&' expr %prec ADDRESSOF { $$ = make_expr1(EXPR_ADDRESSOF, $2); } | '*' expr %prec PPTR { $$ = make_expr1(EXPR_PPTR, $2); } | expr MEMBERPTR aIDENTIFIER { $$ = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, $1), make_exprs(EXPR_IDENTIFIER, $3)); } | expr '.' aIDENTIFIER { $$ = make_expr2(EXPR_MEMBER, $1, make_exprs(EXPR_IDENTIFIER, $3)); } | '(' decl_spec m_abstract_declarator ')' expr %prec CAST { $$ = make_exprt(EXPR_CAST, declare_var(NULL, $2, $3, 0), $5); free($2); free($3); } | tSIZEOF '(' decl_spec m_abstract_declarator ')' { $$ = make_exprt(EXPR_SIZEOF, declare_var(NULL, $3, $4, 0), NULL); free($3); free($4); } | expr '[' expr ']' { $$ = make_expr2(EXPR_ARRAY, $1, $3); } | '(' expr ')' { $$ = $2; } ; expr_list_int_const: expr_int_const { $$ = append_expr( NULL, $1 ); } | expr_list_int_const ',' expr_int_const { $$ = append_expr( $1, $3 ); } ; expr_int_const: expr { $$ = $1; if (!$$->is_const) error_loc("expression is not an integer constant\n"); } ; expr_const: expr { $$ = $1; if (!$$->is_const && $$->type != EXPR_STRLIT && $$->type != EXPR_WSTRLIT) error_loc("expression is not constant\n"); } ; fields: { $$ = NULL; } | fields field { $$ = append_var_list($1, $2); } ; field: m_attributes decl_spec struct_declarator_list ';' { const char *first = LIST_ENTRY(list_head($3), declarator_t, entry)->var->name; check_field_attrs(first, $1); $$ = set_var_types($1, $2, $3); } | m_attributes uniondef ';' { var_t *v = make_var(NULL); v->type = $2; v->attrs = $1; $$ = append_var(NULL, v); } ; ne_union_field: s_field ';' { $$ = $1; } | attributes ';' { $$ = make_var(NULL); $$->attrs = $1; } ; ne_union_fields: { $$ = NULL; } | ne_union_fields ne_union_field { $$ = append_var( $1, $2 ); } ; union_field: s_field ';' { $$ = $1; } | ';' { $$ = NULL; } ; s_field: m_attributes decl_spec declarator { $$ = declare_var(check_field_attrs($3->var->name, $1), $2, $3, FALSE); free($3); } | m_attributes structdef { var_t *v = make_var(NULL); v->type = $2; v->attrs = $1; $$ = v; } ; funcdef: declaration { $$ = $1; if (type_get_type($$->type) != TYPE_FUNCTION) error_loc("only methods may be declared inside the methods section of a dispinterface\n"); check_function_attrs($$->name, $$->attrs); } ; declaration: attributes decl_spec init_declarator { $$ = declare_var($1, $2, $3, FALSE); free($3); } | decl_spec init_declarator { $$ = declare_var(NULL, $1, $2, FALSE); free($2); } ; m_ident: { $$ = NULL; } | ident ; t_ident: { $$ = NULL; } | aIDENTIFIER { $$ = $1; } | aKNOWNTYPE { $$ = $1; } ; ident: aIDENTIFIER { $$ = make_var($1); } /* some "reserved words" used in attributes are also used as field names in some MS IDL files */ | aKNOWNTYPE { $$ = make_var($1); } ; base_type: tBYTE { $$ = find_type_or_error($1, 0); } | tWCHAR { $$ = find_type_or_error($1, 0); } | int_std | tSIGNED int_std { $$ = type_new_int(type_basic_get_type($2), -1); } | tUNSIGNED int_std { $$ = type_new_int(type_basic_get_type($2), 1); } | tUNSIGNED { $$ = type_new_int(TYPE_BASIC_INT, 1); } | tFLOAT { $$ = find_type_or_error($1, 0); } | tDOUBLE { $$ = find_type_or_error($1, 0); } | tBOOLEAN { $$ = find_type_or_error($1, 0); } | tERRORSTATUST { $$ = find_type_or_error($1, 0); } | tHANDLET { $$ = find_type_or_error($1, 0); } ; m_int: | tINT ; int_std: tINT { $$ = type_new_int(TYPE_BASIC_INT, 0); } | tSHORT m_int { $$ = type_new_int(TYPE_BASIC_INT16, 0); } | tSMALL { $$ = type_new_int(TYPE_BASIC_INT8, 0); } | tLONG m_int { $$ = type_new_int(TYPE_BASIC_INT32, 0); } | tHYPER m_int { $$ = type_new_int(TYPE_BASIC_HYPER, 0); } | tINT64 { $$ = type_new_int(TYPE_BASIC_INT64, 0); } | tCHAR { $$ = type_new_int(TYPE_BASIC_CHAR, 0); } | tINT3264 { $$ = type_new_int(TYPE_BASIC_INT3264, 0); } ; coclass: tCOCLASS aIDENTIFIER { $$ = type_new_coclass($2); } | tCOCLASS aKNOWNTYPE { $$ = find_type($2, NULL, 0); if (type_get_type_detect_alias($$) != TYPE_COCLASS) error_loc("%s was not declared a coclass at %s:%d\n", $2, $$->loc_info.input_name, $$->loc_info.line_number); } ; coclasshdr: attributes coclass { $$ = $2; check_def($$); $$->attrs = check_coclass_attrs($2->name, $1); } ; coclassdef: coclasshdr '{' coclass_ints '}' semicolon_opt { $$ = type_coclass_define($1, $3); } ; namespacedef: tNAMESPACE aIDENTIFIER { $$ = $2; } ; coclass_ints: { $$ = NULL; } | coclass_ints coclass_int { $$ = append_ifref( $1, $2 ); } ; coclass_int: m_attributes interfacedec { $$ = make_ifref($2); $$->attrs = $1; } ; dispinterface: tDISPINTERFACE aIDENTIFIER { $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); } | tDISPINTERFACE aKNOWNTYPE { $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); } ; dispinterfacehdr: attributes dispinterface { attr_t *attrs; $$ = $2; check_def($$); attrs = make_attr(ATTR_DISPINTERFACE); $$->attrs = append_attr( check_dispiface_attrs($2->name, $1), attrs ); $$->defined = TRUE; } ; dispint_props: tPROPERTIES ':' { $$ = NULL; } | dispint_props s_field ';' { $$ = append_var( $1, $2 ); } ; dispint_meths: tMETHODS ':' { $$ = NULL; } | dispint_meths funcdef ';' { $$ = append_var( $1, $2 ); } ; dispinterfacedef: dispinterfacehdr '{' dispint_props dispint_meths '}' { $$ = $1; type_dispinterface_define($$, $3, $4); } | dispinterfacehdr '{' interface ';' '}' { $$ = $1; type_dispinterface_define_from_iface($$, $3); } ; inherit: { $$ = NULL; } | ':' aKNOWNTYPE { $$ = find_type_or_error2($2, 0); } ; interface: tINTERFACE aIDENTIFIER { $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); } | tINTERFACE aKNOWNTYPE { $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); } ; interfacehdr: attributes interface { $$.interface = $2; $$.old_pointer_default = pointer_default; if (is_attr($1, ATTR_POINTERDEFAULT)) pointer_default = get_attrv($1, ATTR_POINTERDEFAULT); check_def($2); $2->attrs = check_iface_attrs($2->name, $1); $2->defined = TRUE; } ; interfacedef: interfacehdr inherit '{' int_statements '}' semicolon_opt { $$ = $1.interface; if($$ == $2) error_loc("Interface can't inherit from itself\n"); type_interface_define($$, $2, $4); pointer_default = $1.old_pointer_default; } /* MIDL is able to import the definition of a base class from inside the * definition of a derived class, I'll try to support it with this rule */ | interfacehdr ':' aIDENTIFIER '{' import int_statements '}' semicolon_opt { $$ = $1.interface; type_interface_define($$, find_type_or_error2($3, 0), $6); pointer_default = $1.old_pointer_default; } | dispinterfacedef semicolon_opt { $$ = $1; } ; interfacedec: interface ';' { $$ = $1; } | dispinterface ';' { $$ = $1; } ; module: tMODULE aIDENTIFIER { $$ = type_new_module($2); } | tMODULE aKNOWNTYPE { $$ = type_new_module($2); } ; modulehdr: attributes module { $$ = $2; $$->attrs = check_module_attrs($2->name, $1); } ; moduledef: modulehdr '{' int_statements '}' semicolon_opt { $$ = $1; type_module_define($$, $3); } ; storage_cls_spec: tEXTERN { $$ = STG_EXTERN; } | tSTATIC { $$ = STG_STATIC; } | tREGISTER { $$ = STG_REGISTER; } ; function_specifier: tINLINE { $$ = make_attr(ATTR_INLINE); } ; type_qualifier: tCONST { $$ = make_attr(ATTR_CONST); } ; m_type_qual_list: { $$ = NULL; } | m_type_qual_list type_qualifier { $$ = append_attr($1, $2); } ; decl_spec: type m_decl_spec_no_type { $$ = make_decl_spec($1, $2, NULL, NULL, STG_NONE); } | decl_spec_no_type type m_decl_spec_no_type { $$ = make_decl_spec($2, $1, $3, NULL, STG_NONE); } ; m_decl_spec_no_type: { $$ = NULL; } | decl_spec_no_type ; decl_spec_no_type: type_qualifier m_decl_spec_no_type { $$ = make_decl_spec(NULL, $2, NULL, $1, STG_NONE); } | function_specifier m_decl_spec_no_type { $$ = make_decl_spec(NULL, $2, NULL, $1, STG_NONE); } | storage_cls_spec m_decl_spec_no_type { $$ = make_decl_spec(NULL, $2, NULL, NULL, $1); } ; declarator: '*' m_type_qual_list declarator %prec PPTR { $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); } | callconv declarator { $$ = $2; if ($$->func_type) $$->func_type->attrs = append_attr($$->func_type->attrs, make_attrp(ATTR_CALLCONV, $1)); else if ($$->type) $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); } | direct_declarator ; direct_declarator: ident { $$ = make_declarator($1); } | '(' declarator ')' { $$ = $2; } | direct_declarator array { $$ = $1; $$->array = append_array($$->array, $2); } | direct_declarator '(' m_args ')' { $$ = $1; $$->func_type = append_ptrchain_type($$->type, type_new_function($3)); $$->type = NULL; } ; /* abstract declarator */ abstract_declarator: '*' m_type_qual_list m_abstract_declarator %prec PPTR { $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); } | callconv m_abstract_declarator { $$ = $2; if ($$->func_type) $$->func_type->attrs = append_attr($$->func_type->attrs, make_attrp(ATTR_CALLCONV, $1)); else if ($$->type) $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); } | abstract_direct_declarator ; /* abstract declarator without accepting direct declarator */ abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator %prec PPTR { $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); } | callconv m_any_declarator { $$ = $2; if ($$->func_type) $$->func_type->attrs = append_attr($$->func_type->attrs, make_attrp(ATTR_CALLCONV, $1)); else if ($$->type) $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); } ; /* abstract declarator or empty */ m_abstract_declarator: { $$ = make_declarator(NULL); } | abstract_declarator ; /* abstract direct declarator */ abstract_direct_declarator: '(' abstract_declarator_no_direct ')' { $$ = $2; } | abstract_direct_declarator array { $$ = $1; $$->array = append_array($$->array, $2); } | array { $$ = make_declarator(NULL); $$->array = append_array($$->array, $1); } | '(' m_args ')' { $$ = make_declarator(NULL); $$->func_type = append_ptrchain_type($$->type, type_new_function($2)); $$->type = NULL; } | abstract_direct_declarator '(' m_args ')' { $$ = $1; $$->func_type = append_ptrchain_type($$->type, type_new_function($3)); $$->type = NULL; } ; /* abstract or non-abstract declarator */ any_declarator: '*' m_type_qual_list m_any_declarator %prec PPTR { $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); } | callconv m_any_declarator { $$ = $2; $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); } | any_direct_declarator ; /* abstract or non-abstract declarator without accepting direct declarator */ any_declarator_no_direct: '*' m_type_qual_list m_any_declarator %prec PPTR { $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); } | callconv m_any_declarator { $$ = $2; $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); } ; /* abstract or non-abstract declarator or empty */ m_any_declarator: { $$ = make_declarator(NULL); } | any_declarator ; /* abstract or non-abstract direct declarator. note: direct declarators * aren't accepted inside brackets to avoid ambiguity with the rule for * function arguments */ any_direct_declarator: ident { $$ = make_declarator($1); } | '(' any_declarator_no_direct ')' { $$ = $2; } | any_direct_declarator array { $$ = $1; $$->array = append_array($$->array, $2); } | array { $$ = make_declarator(NULL); $$->array = append_array($$->array, $1); } | '(' m_args ')' { $$ = make_declarator(NULL); $$->func_type = append_ptrchain_type($$->type, type_new_function($2)); $$->type = NULL; } | any_direct_declarator '(' m_args ')' { $$ = $1; $$->func_type = append_ptrchain_type($$->type, type_new_function($3)); $$->type = NULL; } ; declarator_list: declarator { $$ = append_declarator( NULL, $1 ); } | declarator_list ',' declarator { $$ = append_declarator( $1, $3 ); } ; m_bitfield: { $$ = NULL; } | ':' expr_const { $$ = $2; } ; struct_declarator: any_declarator m_bitfield { $$ = $1; $$->bits = $2; if (!$$->bits && !$$->var->name) error_loc("unnamed fields are not allowed\n"); } ; struct_declarator_list: struct_declarator { $$ = append_declarator( NULL, $1 ); } | struct_declarator_list ',' struct_declarator { $$ = append_declarator( $1, $3 ); } ; init_declarator: declarator { $$ = $1; } | declarator '=' expr_const { $$ = $1; $1->var->eval = $3; } ; threading_type: tAPARTMENT { $$ = THREADING_APARTMENT; } | tNEUTRAL { $$ = THREADING_NEUTRAL; } | tSINGLE { $$ = THREADING_SINGLE; } | tFREE { $$ = THREADING_FREE; } | tBOTH { $$ = THREADING_BOTH; } ; pointer_type: tREF { $$ = FC_RP; } | tUNIQUE { $$ = FC_UP; } | tPTR { $$ = FC_FP; } ; structdef: tSTRUCT t_ident '{' fields '}' { $$ = type_new_struct($2, current_namespace, TRUE, $4); } ; type: tVOID { $$ = type_new_void(); } | aKNOWNTYPE { $$ = find_type_or_error($1, 0); } | base_type { $$ = $1; } | enumdef { $$ = $1; } | tENUM aIDENTIFIER { $$ = type_new_enum($2, current_namespace, FALSE, NULL); } | structdef { $$ = $1; } | tSTRUCT aIDENTIFIER { $$ = type_new_struct($2, current_namespace, FALSE, NULL); } | uniondef { $$ = $1; } | tUNION aIDENTIFIER { $$ = type_new_nonencapsulated_union($2, FALSE, NULL); } | tSAFEARRAY '(' type ')' { $$ = make_safearray($3); } ; typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list { $1 = append_attribs($1, $3); reg_typedefs($4, $5, check_typedef_attrs($1)); $$ = make_statement_typedef($5); } ; uniondef: tUNION t_ident '{' ne_union_fields '}' { $$ = type_new_nonencapsulated_union($2, TRUE, $4); } | tUNION t_ident tSWITCH '(' s_field ')' m_ident '{' cases '}' { $$ = type_new_encapsulated_union($2, $5, $7, $9); } ; version: aNUM { $$ = MAKEVERSION($1, 0); } | aNUM '.' aNUM { $$ = MAKEVERSION($1, $3); } | aHEXNUM { $$ = $1; } ; %% static void decl_builtin_basic(const char *name, enum type_basic_type type) { type_t *t = type_new_basic(type); reg_type(t, name, NULL, 0); } static void decl_builtin_alias(const char *name, type_t *t) { reg_type(type_new_alias(t, name), name, NULL, 0); } void init_types(void) { decl_builtin_basic("byte", TYPE_BASIC_BYTE); decl_builtin_basic("wchar_t", TYPE_BASIC_WCHAR); decl_builtin_basic("float", TYPE_BASIC_FLOAT); decl_builtin_basic("double", TYPE_BASIC_DOUBLE); decl_builtin_basic("error_status_t", TYPE_BASIC_ERROR_STATUS_T); decl_builtin_basic("handle_t", TYPE_BASIC_HANDLE); decl_builtin_alias("boolean", type_new_basic(TYPE_BASIC_BYTE)); } static str_list_t *append_str(str_list_t *list, char *str) { struct str_list_entry_t *entry; if (!str) return list; if (!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } entry = xmalloc( sizeof(*entry) ); entry->str = str; list_add_tail( list, &entry->entry ); return list; } static attr_list_t *append_attr(attr_list_t *list, attr_t *attr) { attr_t *attr_existing; if (!attr) return list; if (!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } LIST_FOR_EACH_ENTRY(attr_existing, list, attr_t, entry) if (attr_existing->type == attr->type) { parser_warning("duplicate attribute %s\n", get_attr_display_name(attr->type)); /* use the last attribute, like MIDL does */ list_remove(&attr_existing->entry); break; } list_add_tail( list, &attr->entry ); return list; } static attr_list_t *move_attr(attr_list_t *dst, attr_list_t *src, enum attr_type type) { attr_t *attr; if (!src) return dst; LIST_FOR_EACH_ENTRY(attr, src, attr_t, entry) if (attr->type == type) { list_remove(&attr->entry); return append_attr(dst, attr); } return dst; } static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list) { struct list *entry; if (!old_list) return new_list; while ((entry = list_head(old_list))) { attr_t *attr = LIST_ENTRY(entry, attr_t, entry); list_remove(entry); new_list = append_attr(new_list, attr); } return new_list; } static attr_list_t *dupattrs(const attr_list_t *list) { attr_list_t *new_list; const attr_t *attr; if (!list) return NULL; new_list = xmalloc( sizeof(*list) ); list_init( new_list ); LIST_FOR_EACH_ENTRY(attr, list, const attr_t, entry) { attr_t *new_attr = xmalloc(sizeof(*new_attr)); *new_attr = *attr; list_add_tail(new_list, &new_attr->entry); } return new_list; } static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass) { decl_spec_t *declspec = left ? left : right; if (!declspec) { declspec = xmalloc(sizeof(*declspec)); declspec->type = NULL; declspec->attrs = NULL; declspec->stgclass = STG_NONE; } declspec->type = type; if (left && declspec != left) { declspec->attrs = append_attr_list(declspec->attrs, left->attrs); if (declspec->stgclass == STG_NONE) declspec->stgclass = left->stgclass; else if (left->stgclass != STG_NONE) error_loc("only one storage class can be specified\n"); assert(!left->type); free(left); } if (right && declspec != right) { declspec->attrs = append_attr_list(declspec->attrs, right->attrs); if (declspec->stgclass == STG_NONE) declspec->stgclass = right->stgclass; else if (right->stgclass != STG_NONE) error_loc("only one storage class can be specified\n"); assert(!right->type); free(right); } declspec->attrs = append_attr(declspec->attrs, attr); if (declspec->stgclass == STG_NONE) declspec->stgclass = stgclass; else if (stgclass != STG_NONE) error_loc("only one storage class can be specified\n"); /* apply attributes to type */ if (type && declspec->attrs) { attr_list_t *attrs; declspec->type = duptype(type, 1); attrs = dupattrs(type->attrs); declspec->type->attrs = append_attr_list(attrs, declspec->attrs); declspec->attrs = NULL; } return declspec; } static attr_t *make_attr(enum attr_type type) { attr_t *a = xmalloc(sizeof(attr_t)); a->type = type; a->u.ival = 0; return a; } static attr_t *make_attrv(enum attr_type type, unsigned int val) { attr_t *a = xmalloc(sizeof(attr_t)); a->type = type; a->u.ival = val; return a; } static attr_t *make_attrp(enum attr_type type, void *val) { attr_t *a = xmalloc(sizeof(attr_t)); a->type = type; a->u.pval = val; return a; } static expr_list_t *append_expr(expr_list_t *list, expr_t *expr) { if (!expr) return list; if (!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } list_add_tail( list, &expr->entry ); return list; } static array_dims_t *append_array(array_dims_t *list, expr_t *expr) { if (!expr) return list; if (!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } list_add_tail( list, &expr->entry ); return list; } static struct list type_pool = LIST_INIT(type_pool); typedef struct { type_t data; struct list link; } type_pool_node_t; type_t *alloc_type(void) { type_pool_node_t *node = xmalloc(sizeof *node); list_add_tail(&type_pool, &node->link); return &node->data; } void set_all_tfswrite(int val) { type_pool_node_t *node; LIST_FOR_EACH_ENTRY(node, &type_pool, type_pool_node_t, link) node->data.tfswrite = val; } void clear_all_offsets(void) { type_pool_node_t *node; LIST_FOR_EACH_ENTRY(node, &type_pool, type_pool_node_t, link) node->data.typestring_offset = node->data.ptrdesc = 0; } static void type_function_add_head_arg(type_t *type, var_t *arg) { if (!type->details.function->args) { type->details.function->args = xmalloc( sizeof(*type->details.function->args) ); list_init( type->details.function->args ); } list_add_head( type->details.function->args, &arg->entry ); } static int is_allowed_range_type(const type_t *type) { switch (type_get_type(type)) { case TYPE_ENUM: return TRUE; case TYPE_BASIC: switch (type_basic_get_type(type)) { case TYPE_BASIC_INT8: case TYPE_BASIC_INT16: case TYPE_BASIC_INT32: case TYPE_BASIC_INT64: case TYPE_BASIC_INT: case TYPE_BASIC_INT3264: case TYPE_BASIC_BYTE: case TYPE_BASIC_CHAR: case TYPE_BASIC_WCHAR: case TYPE_BASIC_HYPER: return TRUE; case TYPE_BASIC_FLOAT: case TYPE_BASIC_DOUBLE: case TYPE_BASIC_ERROR_STATUS_T: case TYPE_BASIC_HANDLE: return FALSE; } return FALSE; default: return FALSE; } } static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type) { type_t *ptrchain_type; if (!ptrchain) return type; for (ptrchain_type = ptrchain; type_pointer_get_ref(ptrchain_type); ptrchain_type = type_pointer_get_ref(ptrchain_type)) ; assert(ptrchain_type->type_type == TYPE_POINTER); ptrchain_type->details.pointer.ref = type; return ptrchain; } static warning_list_t *append_warning(warning_list_t *list, int num) { warning_t *entry; if(!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } entry = xmalloc( sizeof(*entry) ); entry->num = num; list_add_tail( list, &entry->entry ); return list; } static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl, int top) { var_t *v = decl->var; expr_list_t *sizes = get_attrp(attrs, ATTR_SIZEIS); expr_list_t *lengs = get_attrp(attrs, ATTR_LENGTHIS); int sizeless; expr_t *dim; type_t **ptype; array_dims_t *arr = decl ? decl->array : NULL; type_t *func_type = decl ? decl->func_type : NULL; type_t *type = decl_spec->type; if (is_attr(type->attrs, ATTR_INLINE)) { if (!func_type) error_loc("inline attribute applied to non-function type\n"); else { type_t *t; /* move inline attribute from return type node to function node */ for (t = func_type; is_ptr(t); t = type_pointer_get_ref(t)) ; t->attrs = move_attr(t->attrs, type->attrs, ATTR_INLINE); } } /* add type onto the end of the pointers in pident->type */ v->type = append_ptrchain_type(decl ? decl->type : NULL, type); v->stgclass = decl_spec->stgclass; v->attrs = attrs; /* check for pointer attribute being applied to non-pointer, non-array * type */ if (!arr) { int ptr_attr = get_attrv(v->attrs, ATTR_POINTERTYPE); const type_t *ptr = NULL; /* pointer attributes on the left side of the type belong to the function * pointer, if one is being declared */ type_t **pt = func_type ? &func_type : &v->type; for (ptr = *pt; ptr && !ptr_attr; ) { ptr_attr = get_attrv(ptr->attrs, ATTR_POINTERTYPE); if (!ptr_attr && type_is_alias(ptr)) ptr = type_alias_get_aliasee(ptr); else break; } if (is_ptr(ptr)) { if (ptr_attr && ptr_attr != FC_UP && type_get_type(type_pointer_get_ref(ptr)) == TYPE_INTERFACE) warning_loc_info(&v->loc_info, "%s: pointer attribute applied to interface " "pointer type has no effect\n", v->name); if (!ptr_attr && top && (*pt)->details.pointer.def_fc != FC_RP) { /* FIXME: this is a horrible hack to cope with the issue that we * store an offset to the typeformat string in the type object, but * two typeformat strings may be written depending on whether the * pointer is a toplevel parameter or not */ *pt = duptype(*pt, 1); } } else if (ptr_attr) error_loc("%s: pointer attribute applied to non-pointer type\n", v->name); } if (is_attr(v->attrs, ATTR_STRING)) { type_t *t = type; if (!is_ptr(v->type) && !arr) error_loc("'%s': [string] attribute applied to non-pointer, non-array type\n", v->name); while (is_ptr(t)) t = type_pointer_get_ref(t); if (type_get_type(t) != TYPE_BASIC && (get_basic_fc(t) != FC_CHAR && get_basic_fc(t) != FC_BYTE && get_basic_fc(t) != FC_WCHAR)) { error_loc("'%s': [string] attribute is only valid on 'char', 'byte', or 'wchar_t' pointers and arrays\n", v->name); } } if (is_attr(v->attrs, ATTR_V1ENUM)) { if (type_get_type_detect_alias(v->type) != TYPE_ENUM) error_loc("'%s': [v1_enum] attribute applied to non-enum type\n", v->name); } if (is_attr(v->attrs, ATTR_RANGE) && !is_allowed_range_type(v->type)) error_loc("'%s': [range] attribute applied to non-integer type\n", v->name); ptype = &v->type; sizeless = FALSE; if (arr) LIST_FOR_EACH_ENTRY_REV(dim, arr, expr_t, entry) { if (sizeless) error_loc("%s: only the first array dimension can be unspecified\n", v->name); if (dim->is_const) { if (dim->cval <= 0) error_loc("%s: array dimension must be positive\n", v->name); /* FIXME: should use a type_memsize that allows us to pass in a pointer size */ if (0) { unsigned int size = type_memsize(v->type); if (0xffffffffu / size < dim->cval) error_loc("%s: total array size is too large\n", v->name); } } else sizeless = TRUE; *ptype = type_new_array(NULL, *ptype, FALSE, dim->is_const ? dim->cval : 0, dim->is_const ? NULL : dim, NULL, pointer_default); } ptype = &v->type; if (sizes) LIST_FOR_EACH_ENTRY(dim, sizes, expr_t, entry) { if (dim->type != EXPR_VOID) { if (is_array(*ptype)) { if (!type_array_get_conformance(*ptype) || type_array_get_conformance(*ptype)->type != EXPR_VOID) error_loc("%s: cannot specify size_is for an already sized array\n", v->name); else *ptype = type_new_array((*ptype)->name, type_array_get_element(*ptype), FALSE, 0, dim, NULL, 0); } else if (is_ptr(*ptype)) *ptype = type_new_array((*ptype)->name, type_pointer_get_ref(*ptype), TRUE, 0, dim, NULL, pointer_default); else error_loc("%s: size_is attribute applied to illegal type\n", v->name); } if (is_ptr(*ptype)) ptype = &(*ptype)->details.pointer.ref; else if (is_array(*ptype)) ptype = &(*ptype)->details.array.elem; else error_loc("%s: too many expressions in size_is attribute\n", v->name); } ptype = &v->type; if (lengs) LIST_FOR_EACH_ENTRY(dim, lengs, expr_t, entry) { if (dim->type != EXPR_VOID) { if (is_array(*ptype)) { *ptype = type_new_array((*ptype)->name, type_array_get_element(*ptype), type_array_is_decl_as_ptr(*ptype), type_array_get_dim(*ptype), type_array_get_conformance(*ptype), dim, type_array_get_ptr_default_fc(*ptype)); } else error_loc("%s: length_is attribute applied to illegal type\n", v->name); } if (is_ptr(*ptype)) ptype = &(*ptype)->details.pointer.ref; else if (is_array(*ptype)) ptype = &(*ptype)->details.array.elem; else error_loc("%s: too many expressions in length_is attribute\n", v->name); } /* v->type is currently pointing to the type on the left-side of the * declaration, so we need to fix this up so that it is the return type of the * function and make v->type point to the function side of the declaration */ if (func_type) { type_t *ft, *t; type_t *return_type = v->type; v->type = func_type; for (ft = v->type; is_ptr(ft); ft = type_pointer_get_ref(ft)) ; assert(type_get_type_detect_alias(ft) == TYPE_FUNCTION); ft->details.function->retval = make_var(xstrdup("_RetVal")); ft->details.function->retval->type = return_type; /* move calling convention attribute, if present, from pointer nodes to * function node */ for (t = v->type; is_ptr(t); t = type_pointer_get_ref(t)) ft->attrs = move_attr(ft->attrs, t->attrs, ATTR_CALLCONV); } else { type_t *t; for (t = v->type; is_ptr(t); t = type_pointer_get_ref(t)) if (is_attr(t->attrs, ATTR_CALLCONV)) error_loc("calling convention applied to non-function-pointer type\n"); } if (decl->bits) v->type = type_new_bitfield(v->type, decl->bits); return v; } static var_list_t *set_var_types(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_list_t *decls) { declarator_t *decl, *next; var_list_t *var_list = NULL; LIST_FOR_EACH_ENTRY_SAFE( decl, next, decls, declarator_t, entry ) { var_t *var = declare_var(attrs, decl_spec, decl, 0); var_list = append_var(var_list, var); free(decl); } free(decl_spec); return var_list; } static ifref_list_t *append_ifref(ifref_list_t *list, ifref_t *iface) { if (!iface) return list; if (!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } list_add_tail( list, &iface->entry ); return list; } static ifref_t *make_ifref(type_t *iface) { ifref_t *l = xmalloc(sizeof(ifref_t)); l->iface = iface; l->attrs = NULL; return l; } var_list_t *append_var(var_list_t *list, var_t *var) { if (!var) return list; if (!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } list_add_tail( list, &var->entry ); return list; } static var_list_t *append_var_list(var_list_t *list, var_list_t *vars) { if (!vars) return list; if (!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } list_move_tail( list, vars ); return list; } var_t *make_var(char *name) { var_t *v = xmalloc(sizeof(var_t)); v->name = name; v->type = NULL; v->attrs = NULL; v->eval = NULL; v->stgclass = STG_NONE; init_loc_info(&v->loc_info); return v; } static declarator_list_t *append_declarator(declarator_list_t *list, declarator_t *d) { if (!d) return list; if (!list) { list = xmalloc(sizeof(*list)); list_init(list); } list_add_tail(list, &d->entry); return list; } static declarator_t *make_declarator(var_t *var) { declarator_t *d = xmalloc(sizeof(*d)); d->var = var ? var : make_var(NULL); d->type = NULL; d->func_type = NULL; d->array = NULL; d->bits = NULL; return d; } static type_t *make_safearray(type_t *type) { return type_new_array(NULL, type_new_alias(type, "SAFEARRAY"), TRUE, 0, NULL, NULL, FC_RP); } static typelib_t *make_library(const char *name, const attr_list_t *attrs) { typelib_t *typelib = xmalloc(sizeof(*typelib)); typelib->name = xstrdup(name); typelib->attrs = attrs; list_init( &typelib->importlibs ); return typelib; } static int hash_ident(const char *name) { const char *p = name; int sum = 0; /* a simple sum hash is probably good enough */ while (*p) { sum += *p; p++; } return sum & (HASHMAX-1); } /***** type repository *****/ static struct namespace *find_sub_namespace(struct namespace *namespace, const char *name) { struct namespace *cur; LIST_FOR_EACH_ENTRY(cur, &namespace->children, struct namespace, entry) { if(!strcmp(cur->name, name)) return cur; } return NULL; } static void push_namespace(const char *name) { struct namespace *namespace; namespace = find_sub_namespace(current_namespace, name); if(!namespace) { namespace = xmalloc(sizeof(*namespace)); namespace->name = xstrdup(name); namespace->parent = current_namespace; list_add_tail(¤t_namespace->children, &namespace->entry); list_init(&namespace->children); memset(namespace->type_hash, 0, sizeof(namespace->type_hash)); } current_namespace = namespace; } static void pop_namespace(const char *name) { assert(!strcmp(current_namespace->name, name) && current_namespace->parent); current_namespace = current_namespace->parent; } struct rtype { const char *name; type_t *type; int t; struct rtype *next; }; type_t *reg_type(type_t *type, const char *name, struct namespace *namespace, int t) { struct rtype *nt; int hash; if (!name) { error_loc("registering named type without name\n"); return type; } if (!namespace) namespace = &global_namespace; hash = hash_ident(name); nt = xmalloc(sizeof(struct rtype)); nt->name = name; if (is_global_namespace(namespace)) type->c_name = name; else type->c_name = format_namespace(namespace, "__x_", "_C", name); nt->type = type; nt->t = t; nt->next = namespace->type_hash[hash]; namespace->type_hash[hash] = nt; if ((t == tsSTRUCT || t == tsUNION)) fix_incomplete_types(type); return type; } static int is_incomplete(const type_t *t) { return !t->defined && (type_get_type_detect_alias(t) == TYPE_STRUCT || type_get_type_detect_alias(t) == TYPE_UNION || type_get_type_detect_alias(t) == TYPE_ENCAPSULATED_UNION); } void add_incomplete(type_t *t) { struct typenode *tn = xmalloc(sizeof *tn); tn->type = t; list_add_tail(&incomplete_types, &tn->entry); } static void fix_type(type_t *t) { if (type_is_alias(t) && is_incomplete(t)) { type_t *ot = type_alias_get_aliasee(t); fix_type(ot); if (type_get_type_detect_alias(ot) == TYPE_STRUCT || type_get_type_detect_alias(ot) == TYPE_UNION || type_get_type_detect_alias(ot) == TYPE_ENCAPSULATED_UNION) t->details.structure = ot->details.structure; t->defined = ot->defined; } } static void fix_incomplete(void) { struct typenode *tn, *next; LIST_FOR_EACH_ENTRY_SAFE(tn, next, &incomplete_types, struct typenode, entry) { fix_type(tn->type); list_remove(&tn->entry); free(tn); } } static void fix_incomplete_types(type_t *complete_type) { struct typenode *tn, *next; LIST_FOR_EACH_ENTRY_SAFE(tn, next, &incomplete_types, struct typenode, entry) { if (type_is_equal(complete_type, tn->type)) { tn->type->details.structure = complete_type->details.structure; list_remove(&tn->entry); free(tn); } } } static type_t *reg_typedefs(decl_spec_t *decl_spec, declarator_list_t *decls, attr_list_t *attrs) { const declarator_t *decl; type_t *type = decl_spec->type; if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC)) attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) ); /* We must generate names for tagless enum, struct or union. Typedef-ing a tagless enum, struct or union means we want the typedef to be included in a library hence the public attribute. */ if (type_get_type_detect_alias(type) == TYPE_ENUM || type_get_type_detect_alias(type) == TYPE_STRUCT || type_get_type_detect_alias(type) == TYPE_UNION || type_get_type_detect_alias(type) == TYPE_ENCAPSULATED_UNION) { if (!type->name) type->name = gen_name(); /* replace existing attributes when generating a typelib */ if (do_typelib) type->attrs = attrs; } LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry ) { if (decl->var->name) { type_t *cur; var_t *name; cur = find_type(decl->var->name, current_namespace, 0); /* * MIDL allows shadowing types that are declared in imported files. * We don't throw an error in this case and instead add a new type * (which is earlier on the list in hash table, so it will be used * instead of shadowed type). * * FIXME: We may consider string separated type tables for each input * for cleaner solution. */ if (cur && input_name == cur->loc_info.input_name) error_loc("%s: redefinition error; original definition was at %s:%d\n", cur->name, cur->loc_info.input_name, cur->loc_info.line_number); name = declare_var(attrs, decl_spec, decl, 0); cur = type_new_alias(name->type, name->name); cur->attrs = attrs; if (is_incomplete(cur)) add_incomplete(cur); reg_type(cur, cur->name, current_namespace, 0); } } return type; } type_t *find_type(const char *name, struct namespace *namespace, int t) { struct rtype *cur; if(namespace && namespace != &global_namespace) { for(cur = namespace->type_hash[hash_ident(name)]; cur; cur = cur->next) { if(cur->t == t && !strcmp(cur->name, name)) return cur->type; } } for(cur = global_namespace.type_hash[hash_ident(name)]; cur; cur = cur->next) { if(cur->t == t && !strcmp(cur->name, name)) return cur->type; } return NULL; } static type_t *find_type_or_error(const char *name, int t) { type_t *type = find_type(name, NULL, t); if (!type) { error_loc("type '%s' not found\n", name); return NULL; } return type; } static type_t *find_type_or_error2(char *name, int t) { type_t *tp = find_type_or_error(name, t); free(name); return tp; } int is_type(const char *name) { return find_type(name, current_namespace, 0) != NULL; } type_t *get_type(enum type_type type, char *name, struct namespace *namespace, int t) { type_t *tp; if (!namespace) namespace = &global_namespace; if (name) { tp = find_type(name, namespace, t); if (tp) { free(name); return tp; } } tp = make_type(type); tp->name = name; tp->namespace = namespace; if (!name) return tp; return reg_type(tp, name, namespace, t); } /***** constant repository *****/ struct rconst { char *name; var_t *var; struct rconst *next; }; struct rconst *const_hash[HASHMAX]; static var_t *reg_const(var_t *var) { struct rconst *nc; int hash; if (!var->name) { error_loc("registering constant without name\n"); return var; } hash = hash_ident(var->name); nc = xmalloc(sizeof(struct rconst)); nc->name = var->name; nc->var = var; nc->next = const_hash[hash]; const_hash[hash] = nc; return var; } var_t *find_const(const char *name, int f) { struct rconst *cur = const_hash[hash_ident(name)]; while (cur && strcmp(cur->name, name)) cur = cur->next; if (!cur) { if (f) error_loc("constant '%s' not found\n", name); return NULL; } return cur->var; } static char *gen_name(void) { static const char format[] = "__WIDL_%s_generated_name_%08lX"; static unsigned long n = 0; static const char *file_id; static size_t size; char *name; if (! file_id) { char *dst = dup_basename(input_idl_name, ".idl"); file_id = dst; for (; *dst; ++dst) if (! isalnum((unsigned char) *dst)) *dst = '_'; size = sizeof format - 7 + strlen(file_id) + 8; } name = xmalloc(size); sprintf(name, format, file_id, n++); return name; } struct allowed_attr { unsigned int dce_compatible : 1; unsigned int acf : 1; unsigned int on_interface : 1; unsigned int on_function : 1; unsigned int on_arg : 1; unsigned int on_type : 1; unsigned int on_enum : 1; unsigned int on_struct : 2; unsigned int on_union : 1; unsigned int on_field : 1; unsigned int on_library : 1; unsigned int on_dispinterface : 1; unsigned int on_module : 1; unsigned int on_coclass : 1; const char *display_name; }; struct allowed_attr allowed_attr[] = { /* attr { D ACF I Fn ARG T En St Un Fi L DI M C } */ /* ATTR_AGGREGATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "aggregatable" }, /* ATTR_ANNOTATION */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" }, /* ATTR_APPOBJECT */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "appobject" }, /* ATTR_ASYNC */ { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "async" }, /* ATTR_ASYNCUUID */ { 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "async_uuid" }, /* ATTR_AUTO_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "auto_handle" }, /* ATTR_BINDABLE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "bindable" }, /* ATTR_BROADCAST */ { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "broadcast" }, /* ATTR_CALLAS */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "call_as" }, /* ATTR_CALLCONV */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, /* ATTR_CASE */ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "case" }, /* ATTR_CODE */ { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "code" }, /* ATTR_COMMSTATUS */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" }, /* ATTR_CONST */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "const" }, /* ATTR_CONTEXTHANDLE */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" }, /* ATTR_CONTROL */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, "control" }, /* ATTR_DECODE */ { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "decode" }, /* ATTR_DEFAULT */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, "default" }, /* ATTR_DEFAULTBIND */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" }, /* ATTR_DEFAULTCOLLELEM */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" }, /* ATTR_DEFAULTVALUE */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultvalue" }, /* ATTR_DEFAULTVTABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "defaultvtable" }, /* ATTR_DISABLECONSISTENCYCHECK */{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "disable_consistency_check" }, /* ATTR_DISPINTERFACE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, /* ATTR_DISPLAYBIND */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "displaybind" }, /* ATTR_DLLNAME */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "dllname" }, /* ATTR_DUAL */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "dual" }, /* ATTR_ENABLEALLOCATE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "enable_allocate" }, /* ATTR_ENCODE */ { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "encode" }, /* ATTR_ENDPOINT */ { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" }, /* ATTR_ENTRY */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "entry" }, /* ATTR_EXPLICIT_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" }, /* ATTR_FAULTSTATUS */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "fault_status" }, /* ATTR_FORCEALLOCATE */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "force_allocate" }, /* ATTR_HANDLE */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "handle" }, /* ATTR_HELPCONTEXT */ { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "helpcontext" }, /* ATTR_HELPFILE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpfile" }, /* ATTR_HELPSTRING */ { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "helpstring" }, /* ATTR_HELPSTRINGCONTEXT */ { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "helpstringcontext" }, /* ATTR_HELPSTRINGDLL */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpstringdll" }, /* ATTR_HIDDEN */ { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, "hidden" }, /* ATTR_ID */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, "id" }, /* ATTR_IDEMPOTENT */ { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" }, /* ATTR_IGNORE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "ignore" }, /* ATTR_IIDIS */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "iid_is" }, /* ATTR_IMMEDIATEBIND */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "immediatebind" }, /* ATTR_IMPLICIT_HANDLE */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" }, /* ATTR_IN */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "in" }, /* ATTR_INLINE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inline" }, /* ATTR_INPUTSYNC */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" }, /* ATTR_LENGTHIS */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "length_is" }, /* ATTR_LIBLCID */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "lcid" }, /* ATTR_LICENSED */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "licensed" }, /* ATTR_LOCAL */ { 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "local" }, /* ATTR_MAYBE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "maybe" }, /* ATTR_MESSAGE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "message" }, /* ATTR_NOCODE */ { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nocode" }, /* ATTR_NONBROWSABLE */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" }, /* ATTR_NONCREATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "noncreatable" }, /* ATTR_NONEXTENSIBLE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" }, /* ATTR_NOTIFY */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify" }, /* ATTR_NOTIFYFLAG */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify_flag" }, /* ATTR_OBJECT */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "object" }, /* ATTR_ODL */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "odl" }, /* ATTR_OLEAUTOMATION */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" }, /* ATTR_OPTIMIZE */ { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optimize" }, /* ATTR_OPTIONAL */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optional" }, /* ATTR_OUT */ { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "out" }, /* ATTR_PARAMLCID */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "lcid" }, /* ATTR_PARTIALIGNORE */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "partial_ignore" }, /* ATTR_POINTERDEFAULT */ { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" }, /* ATTR_POINTERTYPE */ { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, "ref, unique or ptr" }, /* ATTR_PROGID */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "progid" }, /* ATTR_PROPGET */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propget" }, /* ATTR_PROPPUT */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propput" }, /* ATTR_PROPPUTREF */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propputref" }, /* ATTR_PROXY */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "proxy" }, /* ATTR_PUBLIC */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "public" }, /* ATTR_RANGE */ { 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, "range" }, /* ATTR_READONLY */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "readonly" }, /* ATTR_REPRESENTAS */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "represent_as" }, /* ATTR_REQUESTEDIT */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "requestedit" }, /* ATTR_RESTRICTED */ { 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, "restricted" }, /* ATTR_RETVAL */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "retval" }, /* ATTR_SIZEIS */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "size_is" }, /* ATTR_SOURCE */ { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "source" }, /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" }, /* ATTR_STRING */ { 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, "string" }, /* ATTR_SWITCHIS */ { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "switch_is" }, /* ATTR_SWITCHTYPE */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, "switch_type" }, /* ATTR_THREADING */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "threading" }, /* ATTR_TRANSMITAS */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "transmit_as" }, /* ATTR_UIDEFAULT */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "uidefault" }, /* ATTR_USESGETLASTERROR */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "usesgetlasterror" }, /* ATTR_USERMARSHAL */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "user_marshal" }, /* ATTR_UUID */ { 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, "uuid" }, /* ATTR_V1ENUM */ { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, "v1_enum" }, /* ATTR_VARARG */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" }, /* ATTR_VERSION */ { 1, 0, 1, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 1, "version" }, /* ATTR_VIPROGID */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "vi_progid" }, /* ATTR_WIREMARSHAL */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" }, }; const char *get_attr_display_name(enum attr_type type) { return allowed_attr[type].display_name; } static attr_list_t *check_iface_attrs(const char *name, attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_interface) error_loc("inapplicable attribute %s for interface %s\n", allowed_attr[attr->type].display_name, name); if (attr->type == ATTR_IMPLICIT_HANDLE) { const var_t *var = attr->u.pval; if (type_get_type( var->type) == TYPE_BASIC && type_basic_get_type( var->type ) == TYPE_BASIC_HANDLE) continue; if (is_aliaschain_attr( var->type, ATTR_HANDLE )) continue; error_loc("attribute %s requires a handle type in interface %s\n", allowed_attr[attr->type].display_name, name); } } return attrs; } static attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_function) error_loc("inapplicable attribute %s for function %s\n", allowed_attr[attr->type].display_name, name); } return attrs; } static void check_arg_attrs(const var_t *arg) { const attr_t *attr; if (arg->attrs) { LIST_FOR_EACH_ENTRY(attr, arg->attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_arg) error_loc("inapplicable attribute %s for argument %s\n", allowed_attr[attr->type].display_name, arg->name); } } } static attr_list_t *check_typedef_attrs(attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_type) error_loc("inapplicable attribute %s for typedef\n", allowed_attr[attr->type].display_name); } return attrs; } static attr_list_t *check_enum_attrs(attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_enum) error_loc("inapplicable attribute %s for enum\n", allowed_attr[attr->type].display_name); } return attrs; } static attr_list_t *check_struct_attrs(attr_list_t *attrs) { int mask = winrt_mode ? 3 : 1; const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!(allowed_attr[attr->type].on_struct & mask)) error_loc("inapplicable attribute %s for struct\n", allowed_attr[attr->type].display_name); } return attrs; } static attr_list_t *check_union_attrs(attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_union) error_loc("inapplicable attribute %s for union\n", allowed_attr[attr->type].display_name); } return attrs; } static attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_field) error_loc("inapplicable attribute %s for field %s\n", allowed_attr[attr->type].display_name, name); } return attrs; } static attr_list_t *check_library_attrs(const char *name, attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_library) error_loc("inapplicable attribute %s for library %s\n", allowed_attr[attr->type].display_name, name); } return attrs; } static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_dispinterface) error_loc("inapplicable attribute %s for dispinterface %s\n", allowed_attr[attr->type].display_name, name); } return attrs; } static attr_list_t *check_module_attrs(const char *name, attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_module) error_loc("inapplicable attribute %s for module %s\n", allowed_attr[attr->type].display_name, name); } return attrs; } static attr_list_t *check_coclass_attrs(const char *name, attr_list_t *attrs) { const attr_t *attr; if (!attrs) return attrs; LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry) { if (!allowed_attr[attr->type].on_coclass) error_loc("inapplicable attribute %s for coclass %s\n", allowed_attr[attr->type].display_name, name); } return attrs; } static int is_allowed_conf_type(const type_t *type) { switch (type_get_type(type)) { case TYPE_ENUM: return TRUE; case TYPE_BASIC: switch (type_basic_get_type(type)) { case TYPE_BASIC_INT8: case TYPE_BASIC_INT16: case TYPE_BASIC_INT32: case TYPE_BASIC_INT64: case TYPE_BASIC_INT: case TYPE_BASIC_CHAR: case TYPE_BASIC_HYPER: case TYPE_BASIC_BYTE: case TYPE_BASIC_WCHAR: return TRUE; default: return FALSE; } case TYPE_ALIAS: /* shouldn't get here because of type_get_type call above */ assert(0); /* fall through */ case TYPE_STRUCT: case TYPE_UNION: case TYPE_ENCAPSULATED_UNION: case TYPE_ARRAY: case TYPE_POINTER: case TYPE_VOID: case TYPE_MODULE: case TYPE_COCLASS: case TYPE_FUNCTION: case TYPE_INTERFACE: case TYPE_BITFIELD: return FALSE; } return FALSE; } static int is_ptr_guid_type(const type_t *type) { /* first, make sure it is a pointer to something */ if (!is_ptr(type)) return FALSE; /* second, make sure it is a pointer to something of size sizeof(GUID), * i.e. 16 bytes */ return (type_memsize(type_pointer_get_ref(type)) == 16); } static void check_conformance_expr_list(const char *attr_name, const var_t *arg, const type_t *container_type, expr_list_t *expr_list) { expr_t *dim; struct expr_loc expr_loc; expr_loc.v = arg; expr_loc.attr = attr_name; if (expr_list) LIST_FOR_EACH_ENTRY(dim, expr_list, expr_t, entry) { if (dim->type != EXPR_VOID) { const type_t *expr_type = expr_resolve_type(&expr_loc, container_type, dim); if (!is_allowed_conf_type(expr_type)) error_loc_info(&arg->loc_info, "expression must resolve to integral type <= 32bits for attribute %s\n", attr_name); } } } static void check_remoting_fields(const var_t *var, type_t *type); /* checks that properties common to fields and arguments are consistent */ static void check_field_common(const type_t *container_type, const char *container_name, const var_t *arg) { type_t *type = arg->type; int more_to_do; const char *container_type_name; const char *var_type; switch (type_get_type(container_type)) { case TYPE_STRUCT: container_type_name = "struct"; var_type = "field"; break; case TYPE_UNION: container_type_name = "union"; var_type = "arm"; break; case TYPE_ENCAPSULATED_UNION: container_type_name = "encapsulated union"; var_type = "arm"; break; case TYPE_FUNCTION: container_type_name = "function"; var_type = "parameter"; break; default: /* should be no other container types */ assert(0); return; } if (is_attr(arg->attrs, ATTR_LENGTHIS) && (is_attr(arg->attrs, ATTR_STRING) || is_aliaschain_attr(arg->type, ATTR_STRING))) error_loc_info(&arg->loc_info, "string and length_is specified for argument %s are mutually exclusive attributes\n", arg->name); if (is_attr(arg->attrs, ATTR_SIZEIS)) { expr_list_t *size_is_exprs = get_attrp(arg->attrs, ATTR_SIZEIS); check_conformance_expr_list("size_is", arg, container_type, size_is_exprs); } if (is_attr(arg->attrs, ATTR_LENGTHIS)) { expr_list_t *length_is_exprs = get_attrp(arg->attrs, ATTR_LENGTHIS); check_conformance_expr_list("length_is", arg, container_type, length_is_exprs); } if (is_attr(arg->attrs, ATTR_IIDIS)) { struct expr_loc expr_loc; expr_t *expr = get_attrp(arg->attrs, ATTR_IIDIS); if (expr->type != EXPR_VOID) { const type_t *expr_type; expr_loc.v = arg; expr_loc.attr = "iid_is"; expr_type = expr_resolve_type(&expr_loc, container_type, expr); if (!expr_type || !is_ptr_guid_type(expr_type)) error_loc_info(&arg->loc_info, "expression must resolve to pointer to GUID type for attribute iid_is\n"); } } if (is_attr(arg->attrs, ATTR_SWITCHIS)) { struct expr_loc expr_loc; expr_t *expr = get_attrp(arg->attrs, ATTR_SWITCHIS); if (expr->type != EXPR_VOID) { const type_t *expr_type; expr_loc.v = arg; expr_loc.attr = "switch_is"; expr_type = expr_resolve_type(&expr_loc, container_type, expr); if (!expr_type || !is_allowed_conf_type(expr_type)) error_loc_info(&arg->loc_info, "expression must resolve to integral type <= 32bits for attribute %s\n", expr_loc.attr); } } do { more_to_do = FALSE; switch (typegen_detect_type(type, arg->attrs, TDT_IGNORE_STRINGS)) { case TGT_STRUCT: case TGT_UNION: check_remoting_fields(arg, type); break; case TGT_INVALID: { const char *reason = "is invalid"; switch (type_get_type(type)) { case TYPE_VOID: reason = "cannot derive from void *"; break; case TYPE_FUNCTION: reason = "cannot be a function pointer"; break; case TYPE_BITFIELD: reason = "cannot be a bit-field"; break; case TYPE_COCLASS: reason = "cannot be a class"; break; case TYPE_INTERFACE: reason = "cannot be a non-pointer to an interface"; break; case TYPE_MODULE: reason = "cannot be a module"; break; default: break; } error_loc_info(&arg->loc_info, "%s \'%s\' of %s \'%s\' %s\n", var_type, arg->name, container_type_name, container_name, reason); break; } case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: if (type_get_type(container_type) != TYPE_FUNCTION) error_loc_info(&arg->loc_info, "%s \'%s\' of %s \'%s\' cannot be a context handle\n", var_type, arg->name, container_type_name, container_name); break; case TGT_STRING: { const type_t *t = type; while (is_ptr(t)) t = type_pointer_get_ref(t); if (is_aliaschain_attr(t, ATTR_RANGE)) warning_loc_info(&arg->loc_info, "%s: range not verified for a string of ranged types\n", arg->name); break; } case TGT_POINTER: type = type_pointer_get_ref(type); more_to_do = TRUE; break; case TGT_ARRAY: type = type_array_get_element(type); more_to_do = TRUE; break; case TGT_USER_TYPE: case TGT_IFACE_POINTER: case TGT_BASIC: case TGT_ENUM: case TGT_RANGE: /* nothing to do */ break; } } while (more_to_do); } static void check_remoting_fields(const var_t *var, type_t *type) { const var_t *field; const var_list_t *fields = NULL; type = type_get_real_type(type); if (type->checked) return; type->checked = TRUE; if (type_get_type(type) == TYPE_STRUCT) { if (type_is_complete(type)) fields = type_struct_get_fields(type); else error_loc_info(&var->loc_info, "undefined type declaration %s\n", type->name); } else if (type_get_type(type) == TYPE_UNION || type_get_type(type) == TYPE_ENCAPSULATED_UNION) fields = type_union_get_cases(type); if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) if (field->type) check_field_common(type, type->name, field); } /* checks that arguments for a function make sense for marshalling and unmarshalling */ static void check_remoting_args(const var_t *func) { const char *funcname = func->name; const var_t *arg; if (func->type->details.function->args) LIST_FOR_EACH_ENTRY( arg, func->type->details.function->args, const var_t, entry ) { const type_t *type = arg->type; /* check that [out] parameters have enough pointer levels */ if (is_attr(arg->attrs, ATTR_OUT)) { switch (typegen_detect_type(type, arg->attrs, TDT_ALL_TYPES)) { case TGT_BASIC: case TGT_ENUM: case TGT_RANGE: case TGT_STRUCT: case TGT_UNION: case TGT_CTXT_HANDLE: case TGT_USER_TYPE: error_loc_info(&arg->loc_info, "out parameter \'%s\' of function \'%s\' is not a pointer\n", arg->name, funcname); break; case TGT_IFACE_POINTER: error_loc_info(&arg->loc_info, "out interface pointer \'%s\' of function \'%s\' is not a double pointer\n", arg->name, funcname); break; case TGT_STRING: if (is_array(type)) { /* needs conformance or fixed dimension */ if (type_array_has_conformance(type) && type_array_get_conformance(type)->type != EXPR_VOID) break; if (!type_array_has_conformance(type) && type_array_get_dim(type)) break; } if (is_attr( arg->attrs, ATTR_IN )) break; error_loc_info(&arg->loc_info, "out parameter \'%s\' of function \'%s\' cannot be an unsized string\n", arg->name, funcname); break; case TGT_INVALID: /* already error'd before we get here */ case TGT_CTXT_HANDLE_POINTER: case TGT_POINTER: case TGT_ARRAY: /* OK */ break; } } check_field_common(func->type, funcname, arg); } if (type_get_type(type_function_get_rettype(func->type)) != TYPE_VOID) { var_t var; var = *func; var.type = type_function_get_rettype(func->type); var.name = xstrdup("return value"); check_field_common(func->type, funcname, &var); free(var.name); } } static void add_explicit_handle_if_necessary(const type_t *iface, var_t *func) { unsigned char explicit_fc, implicit_fc; /* check for a defined binding handle */ if (!get_func_handle_var( iface, func, &explicit_fc, &implicit_fc ) || !explicit_fc) { /* no explicit handle specified so add * "[in] handle_t IDL_handle" as the first parameter to the * function */ var_t *idl_handle = make_var(xstrdup("IDL_handle")); idl_handle->attrs = append_attr(NULL, make_attr(ATTR_IN)); idl_handle->type = find_type_or_error("handle_t", 0); type_function_add_head_arg(func->type, idl_handle); } } static void check_functions(const type_t *iface, int is_inside_library) { const statement_t *stmt; if (is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE)) { STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { var_t *func = stmt->u.var; add_explicit_handle_if_necessary(iface, func); } } if (!is_inside_library && !is_attr(iface->attrs, ATTR_LOCAL)) { STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { const var_t *func = stmt->u.var; if (!is_attr(func->attrs, ATTR_LOCAL)) check_remoting_args(func); } } } static void check_statements(const statement_list_t *stmts, int is_inside_library) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry) { switch(stmt->type) { case STMT_LIBRARY: check_statements(stmt->u.lib->stmts, TRUE); break; case STMT_TYPE: switch(type_get_type(stmt->u.type)) { case TYPE_INTERFACE: check_functions(stmt->u.type, is_inside_library); break; case TYPE_COCLASS: if(winrt_mode) error_loc("coclass is not allowed in Windows Runtime mode\n"); break; default: break; } break; default: break; } } } static void check_all_user_types(const statement_list_t *stmts) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry) { if (stmt->type == STMT_LIBRARY) check_all_user_types(stmt->u.lib->stmts); else if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE && !is_local(stmt->u.type->attrs)) { const statement_t *stmt_func; STATEMENTS_FOR_EACH_FUNC(stmt_func, type_iface_get_stmts(stmt->u.type)) { const var_t *func = stmt_func->u.var; check_for_additional_prototype_types(func->type->details.function->args); } } } } int is_valid_uuid(const char *s) { int i; for (i = 0; i < 36; ++i) if (i == 8 || i == 13 || i == 18 || i == 23) { if (s[i] != '-') return FALSE; } else if (!isxdigit(s[i])) return FALSE; return s[i] == '\0'; } static statement_t *make_statement(enum statement_type type) { statement_t *stmt = xmalloc(sizeof(*stmt)); stmt->type = type; return stmt; } static statement_t *make_statement_type_decl(type_t *type) { statement_t *stmt = make_statement(STMT_TYPE); stmt->u.type = type; return stmt; } static statement_t *make_statement_reference(type_t *type) { statement_t *stmt = make_statement(STMT_TYPEREF); stmt->u.type = type; return stmt; } static statement_t *make_statement_declaration(var_t *var) { statement_t *stmt = make_statement(STMT_DECLARATION); stmt->u.var = var; if (var->stgclass == STG_EXTERN && var->eval) warning("'%s' initialised and declared extern\n", var->name); if (is_const_decl(var)) { if (var->eval) reg_const(var); } else if (type_get_type(var->type) == TYPE_FUNCTION) check_function_attrs(var->name, var->attrs); else if (var->stgclass == STG_NONE || var->stgclass == STG_REGISTER) error_loc("instantiation of data is illegal\n"); return stmt; } static statement_t *make_statement_library(typelib_t *typelib) { statement_t *stmt = make_statement(STMT_LIBRARY); stmt->u.lib = typelib; return stmt; } static statement_t *make_statement_pragma(const char *str) { statement_t *stmt = make_statement(STMT_PRAGMA); stmt->u.str = str; return stmt; } static statement_t *make_statement_cppquote(const char *str) { statement_t *stmt = make_statement(STMT_CPPQUOTE); stmt->u.str = str; return stmt; } static statement_t *make_statement_importlib(const char *str) { statement_t *stmt = make_statement(STMT_IMPORTLIB); stmt->u.str = str; return stmt; } static statement_t *make_statement_import(const char *str) { statement_t *stmt = make_statement(STMT_IMPORT); stmt->u.str = str; return stmt; } static statement_t *make_statement_module(type_t *type) { statement_t *stmt = make_statement(STMT_MODULE); stmt->u.type = type; return stmt; } static statement_t *make_statement_typedef(declarator_list_t *decls) { declarator_t *decl, *next; statement_t *stmt; type_list_t **type_list; if (!decls) return NULL; stmt = make_statement(STMT_TYPEDEF); stmt->u.type_list = NULL; type_list = &stmt->u.type_list; LIST_FOR_EACH_ENTRY_SAFE( decl, next, decls, declarator_t, entry ) { var_t *var = decl->var; type_t *type = find_type_or_error(var->name, 0); *type_list = xmalloc(sizeof(type_list_t)); (*type_list)->type = type; (*type_list)->next = NULL; type_list = &(*type_list)->next; free(decl); free(var); } return stmt; } static statement_list_t *append_statements(statement_list_t *l1, statement_list_t *l2) { if (!l2) return l1; if (!l1 || l1 == l2) return l2; list_move_tail (l1, l2); return l1; } static attr_list_t *append_attribs(attr_list_t *l1, attr_list_t *l2) { if (!l2) return l1; if (!l1 || l1 == l2) return l2; list_move_tail (l1, l2); return l1; } static statement_list_t *append_statement(statement_list_t *list, statement_t *stmt) { if (!stmt) return list; if (!list) { list = xmalloc( sizeof(*list) ); list_init( list ); } list_add_tail( list, &stmt->entry ); return list; } void init_loc_info(loc_info_t *i) { i->input_name = input_name ? input_name : "stdin"; i->line_number = line_number; i->near_text = parser_text; } static void check_def(const type_t *t) { if (t->defined) error_loc("%s: redefinition error; original definition was at %s:%d\n", t->name, t->loc_info.input_name, t->loc_info.line_number); } ================================================ FILE: widl/proxy.c ================================================ /* * IDL Compiler * * Copyright 2002 Ove Kaaven * Copyright 2004 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" #include "typegen.h" #include "expr.h" static FILE* proxy; static int indent = 0; static void print_proxy( const char *format, ... ) __attribute__((format (printf, 1, 2))); static void print_proxy( const char *format, ... ) { va_list va; va_start( va, format ); print( proxy, indent, format, va ); va_end( va ); } static void write_stubdescproto(void) { print_proxy( "static const MIDL_STUB_DESC Object_StubDesc;\n"); print_proxy( "\n"); } static void write_stubdesc(int expr_eval_routines) { print_proxy( "static const MIDL_STUB_DESC Object_StubDesc =\n{\n"); indent++; print_proxy( "0,\n"); print_proxy( "NdrOleAllocate,\n"); print_proxy( "NdrOleFree,\n"); print_proxy( "{0}, 0, 0, %s, 0,\n", expr_eval_routines ? "ExprEvalRoutines" : "0"); print_proxy( "__MIDL_TypeFormatString.Format,\n"); print_proxy( "1, /* -error bounds_check flag */\n"); print_proxy( "0x%x, /* Ndr library version */\n", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001); print_proxy( "0,\n"); print_proxy( "0x50100a4, /* MIDL Version 5.1.164 */\n"); print_proxy( "0,\n"); print_proxy("%s,\n", list_empty(&user_type_list) ? "0" : "UserMarshalRoutines"); print_proxy( "0, /* notify & notify_flag routine table */\n"); print_proxy( "1, /* Flags */\n"); print_proxy( "0, /* Reserved3 */\n"); print_proxy( "0, /* Reserved4 */\n"); print_proxy( "0 /* Reserved5 */\n"); indent--; print_proxy( "};\n"); print_proxy( "\n"); } static void init_proxy(const statement_list_t *stmts) { if (proxy) return; if(!(proxy = fopen(proxy_name, "w"))) error("Could not open %s for output\n", proxy_name); print_proxy( "/*** Autogenerated by WIDL %s from %s - Do not edit ***/\n", PACKAGE_VERSION, input_name); print_proxy( "\n"); print_proxy( "#define __midl_proxy\n"); print_proxy( "#include \"objbase.h\"\n"); print_proxy( "\n"); print_proxy( "#ifndef DECLSPEC_HIDDEN\n"); print_proxy( "#define DECLSPEC_HIDDEN\n"); print_proxy( "#endif\n"); print_proxy( "\n"); } static void clear_output_vars( const var_list_t *args ) { const var_t *arg; if (!args) return; LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) { if (is_attr(arg->attrs, ATTR_IN)) continue; if (!is_attr(arg->attrs, ATTR_OUT)) continue; if (is_ptr(arg->type)) { if (type_get_type(type_pointer_get_ref(arg->type)) == TYPE_BASIC) continue; if (type_get_type(type_pointer_get_ref(arg->type)) == TYPE_ENUM) continue; } print_proxy( "if (%s) MIDL_memset( %s, 0, sizeof( *%s ));\n", arg->name, arg->name, arg->name ); } } static int need_delegation(const type_t *iface) { const type_t *parent = type_iface_get_inherit( iface ); return parent && type_iface_get_inherit(parent) && (parent->ignore || is_local( parent->attrs )); } static int get_delegation_indirect(const type_t *iface, const type_t ** delegate_to) { const type_t * cur_iface; for (cur_iface = iface; cur_iface != NULL; cur_iface = type_iface_get_inherit(cur_iface)) if (need_delegation(cur_iface)) { if(delegate_to) *delegate_to = type_iface_get_inherit(cur_iface); return 1; } return 0; } static int need_delegation_indirect(const type_t *iface) { return get_delegation_indirect(iface, NULL); } static void free_variable( const var_t *arg, const char *local_var_prefix ) { unsigned int type_offset = arg->typestring_offset; type_t *type = arg->type; write_parameter_conf_or_var_exprs(proxy, indent, local_var_prefix, PHASE_FREE, arg, FALSE); switch (typegen_detect_type(type, arg->attrs, TDT_IGNORE_STRINGS)) { case TGT_ENUM: case TGT_BASIC: break; case TGT_STRUCT: if (get_struct_fc(type) != FC_STRUCT) print_proxy("/* FIXME: %s code for %s struct type 0x%x missing */\n", __FUNCTION__, arg->name, get_struct_fc(type) ); break; case TGT_IFACE_POINTER: case TGT_POINTER: case TGT_ARRAY: print_proxy( "NdrClearOutParameters( &__frame->_StubMsg, "); fprintf(proxy, "&__MIDL_TypeFormatString.Format[%u], ", type_offset ); fprintf(proxy, "(void *)%s );\n", arg->name ); break; default: print_proxy("/* FIXME: %s code for %s type %d missing */\n", __FUNCTION__, arg->name, type_get_type(type) ); } } static void proxy_free_variables( var_list_t *args, const char *local_var_prefix ) { const var_t *arg; if (!args) return; LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) if (is_attr(arg->attrs, ATTR_OUT)) { free_variable( arg, local_var_prefix ); fprintf(proxy, "\n"); } } static void gen_proxy(type_t *iface, const var_t *func, int idx, unsigned int proc_offset) { var_t *retval = type_function_get_retval(func->type); int has_ret = !is_void(retval->type); int has_full_pointer = is_full_pointer_function(func); const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); const var_list_t *args = type_get_function_args(func->type); if (!callconv) callconv = "STDMETHODCALLTYPE"; indent = 0; if (is_interpreted_func( iface, func )) { if (get_stub_mode() == MODE_Oif && !is_callas( func->attrs )) return; write_type_decl_left(proxy, retval->type); print_proxy( " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func)); write_args(proxy, args, iface->name, 1, TRUE); print_proxy( ")\n"); write_client_call_routine( proxy, iface, func, "Object", proc_offset ); return; } print_proxy( "static void __finally_%s_%s_Proxy( struct __proxy_frame *__frame )\n", iface->name, get_name(func) ); print_proxy( "{\n"); indent++; if (has_full_pointer) write_full_pointer_free(proxy, indent, func); print_proxy( "NdrProxyFreeBuffer( __frame->This, &__frame->_StubMsg );\n" ); indent--; print_proxy( "}\n"); print_proxy( "\n"); write_type_decl_left(proxy, retval->type); print_proxy( " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func)); write_args(proxy, args, iface->name, 1, TRUE); print_proxy( ")\n"); print_proxy( "{\n"); indent ++; print_proxy( "struct __proxy_frame __f, * const __frame = &__f;\n" ); /* local variables */ if (has_ret) { print_proxy( "%s", "" ); write_type_decl(proxy, retval->type, retval->name); fprintf( proxy, ";\n" ); } print_proxy( "RPC_MESSAGE _RpcMessage;\n" ); if (has_ret) { if (decl_indirect(retval->type)) print_proxy("void *_p_%s = &%s;\n", retval->name, retval->name); } print_proxy( "\n"); print_proxy( "RpcExceptionInit( __proxy_filter, __finally_%s_%s_Proxy );\n", iface->name, get_name(func) ); print_proxy( "__frame->This = This;\n" ); if (has_full_pointer) write_full_pointer_init(proxy, indent, func, FALSE); /* FIXME: trace */ clear_output_vars( type_get_function_args(func->type) ); print_proxy( "RpcTryExcept\n" ); print_proxy( "{\n" ); indent++; print_proxy( "NdrProxyInitialize(This, &_RpcMessage, &__frame->_StubMsg, &Object_StubDesc, %d);\n", idx); write_pointer_checks( proxy, indent, func ); print_proxy( "RpcTryFinally\n" ); print_proxy( "{\n" ); indent++; write_remoting_arguments(proxy, indent, func, "", PASS_IN, PHASE_BUFFERSIZE); print_proxy( "NdrProxyGetBuffer(This, &__frame->_StubMsg);\n" ); write_remoting_arguments(proxy, indent, func, "", PASS_IN, PHASE_MARSHAL); print_proxy( "NdrProxySendReceive(This, &__frame->_StubMsg);\n" ); fprintf(proxy, "\n"); print_proxy( "__frame->_StubMsg.BufferStart = _RpcMessage.Buffer;\n" ); print_proxy( "__frame->_StubMsg.BufferEnd = __frame->_StubMsg.BufferStart + _RpcMessage.BufferLength;\n\n" ); print_proxy("if ((_RpcMessage.DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)\n"); indent++; print_proxy("NdrConvert( &__frame->_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\n", proc_offset ); indent--; fprintf(proxy, "\n"); write_remoting_arguments(proxy, indent, func, "", PASS_OUT, PHASE_UNMARSHAL); if (has_ret) { if (decl_indirect(retval->type)) print_proxy("MIDL_memset(&%s, 0, sizeof(%s));\n", retval->name, retval->name); else if (is_ptr(retval->type) || is_array(retval->type)) print_proxy("%s = 0;\n", retval->name); write_remoting_arguments(proxy, indent, func, "", PASS_RETURN, PHASE_UNMARSHAL); } indent--; print_proxy( "}\n"); print_proxy( "RpcFinally\n" ); print_proxy( "{\n" ); indent++; print_proxy( "__finally_%s_%s_Proxy( __frame );\n", iface->name, get_name(func) ); indent--; print_proxy( "}\n"); print_proxy( "RpcEndFinally\n" ); indent--; print_proxy( "}\n" ); print_proxy( "RpcExcept(__frame->_StubMsg.dwStubPhase != PROXY_SENDRECEIVE)\n" ); print_proxy( "{\n" ); if (has_ret) { indent++; proxy_free_variables( type_get_function_args(func->type), "" ); print_proxy( "_RetVal = NdrProxyErrorHandler(RpcExceptionCode());\n" ); indent--; } print_proxy( "}\n" ); print_proxy( "RpcEndExcept\n" ); if (has_ret) { print_proxy( "return _RetVal;\n" ); } indent--; print_proxy( "}\n"); print_proxy( "\n"); } static void gen_stub(type_t *iface, const var_t *func, const char *cas, unsigned int proc_offset) { const var_t *arg; int has_ret = !is_void(type_function_get_rettype(func->type)); int has_full_pointer = is_full_pointer_function(func); if (is_interpreted_func( iface, func )) return; indent = 0; print_proxy( "struct __frame_%s_%s_Stub\n{\n", iface->name, get_name(func)); indent++; print_proxy( "__DECL_EXCEPTION_FRAME\n" ); print_proxy( "MIDL_STUB_MESSAGE _StubMsg;\n"); print_proxy( "%s * _This;\n", iface->name ); declare_stub_args( proxy, indent, func ); indent--; print_proxy( "};\n\n" ); print_proxy( "static void __finally_%s_%s_Stub(", iface->name, get_name(func) ); print_proxy( " struct __frame_%s_%s_Stub *__frame )\n{\n", iface->name, get_name(func) ); indent++; write_remoting_arguments(proxy, indent, func, "__frame->", PASS_OUT, PHASE_FREE); if (has_full_pointer) write_full_pointer_free(proxy, indent, func); indent--; print_proxy( "}\n\n" ); print_proxy( "void __RPC_STUB %s_%s_Stub(\n", iface->name, get_name(func)); indent++; print_proxy( "IRpcStubBuffer* This,\n"); print_proxy( "IRpcChannelBuffer *_pRpcChannelBuffer,\n"); print_proxy( "PRPC_MESSAGE _pRpcMessage,\n"); print_proxy( "DWORD* _pdwStubPhase)\n"); indent--; print_proxy( "{\n"); indent++; print_proxy( "struct __frame_%s_%s_Stub __f, * const __frame = &__f;\n\n", iface->name, get_name(func) ); print_proxy("__frame->_This = (%s*)((CStdStubBuffer*)This)->pvServerObject;\n\n", iface->name); /* FIXME: trace */ print_proxy("NdrStubInitialize(_pRpcMessage, &__frame->_StubMsg, &Object_StubDesc, _pRpcChannelBuffer);\n"); fprintf(proxy, "\n"); print_proxy( "RpcExceptionInit( 0, __finally_%s_%s_Stub );\n", iface->name, get_name(func) ); write_parameters_init(proxy, indent, func, "__frame->"); print_proxy("RpcTryFinally\n"); print_proxy("{\n"); indent++; if (has_full_pointer) write_full_pointer_init(proxy, indent, func, TRUE); print_proxy("if ((_pRpcMessage->DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)\n"); indent++; print_proxy("NdrConvert( &__frame->_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\n", proc_offset ); indent--; fprintf(proxy, "\n"); write_remoting_arguments(proxy, indent, func, "__frame->", PASS_IN, PHASE_UNMARSHAL); fprintf(proxy, "\n"); assign_stub_out_args( proxy, indent, func, "__frame->" ); print_proxy("*_pdwStubPhase = STUB_CALL_SERVER;\n"); fprintf(proxy, "\n"); print_proxy( "%s", has_ret ? "__frame->_RetVal = " : "" ); if (cas) fprintf(proxy, "%s_%s_Stub", iface->name, cas); else fprintf(proxy, "__frame->_This->lpVtbl->%s", get_name(func)); fprintf(proxy, "(__frame->_This"); if (type_get_function_args(func->type)) { LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), const var_t, entry ) fprintf(proxy, ", %s__frame->%s", is_array(arg->type) && !type_array_is_decl_as_ptr(arg->type) ? "*" :"" , arg->name); } fprintf(proxy, ");\n"); fprintf(proxy, "\n"); print_proxy("*_pdwStubPhase = STUB_MARSHAL;\n"); fprintf(proxy, "\n"); write_remoting_arguments(proxy, indent, func, "__frame->", PASS_OUT, PHASE_BUFFERSIZE); if (!is_void(type_function_get_rettype(func->type))) write_remoting_arguments(proxy, indent, func, "__frame->", PASS_RETURN, PHASE_BUFFERSIZE); print_proxy("NdrStubGetBuffer(This, _pRpcChannelBuffer, &__frame->_StubMsg);\n"); write_remoting_arguments(proxy, indent, func, "__frame->", PASS_OUT, PHASE_MARSHAL); fprintf(proxy, "\n"); /* marshall the return value */ if (!is_void(type_function_get_rettype(func->type))) write_remoting_arguments(proxy, indent, func, "__frame->", PASS_RETURN, PHASE_MARSHAL); indent--; print_proxy("}\n"); print_proxy("RpcFinally\n"); print_proxy("{\n"); indent++; print_proxy( "__finally_%s_%s_Stub( __frame );\n", iface->name, get_name(func) ); indent--; print_proxy("}\n"); print_proxy("RpcEndFinally\n"); print_proxy("_pRpcMessage->BufferLength = __frame->_StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer;\n"); indent--; print_proxy("}\n"); print_proxy("\n"); } static void gen_stub_thunk( type_t *iface, const var_t *func, unsigned int proc_offset ) { int has_ret = !is_void( type_function_get_rettype( func->type )); const var_t *arg, *callas = is_callas( func->attrs ); const var_list_t *args = type_get_function_args( func->type ); indent = 0; print_proxy( "void __RPC_API %s_%s_Thunk( PMIDL_STUB_MESSAGE pStubMsg )\n", iface->name, get_name(func) ); print_proxy( "{\n"); indent++; write_func_param_struct( proxy, iface, func->type, "*pParamStruct = (struct _PARAM_STRUCT *)pStubMsg->StackTop", has_ret ); print_proxy( "%s%s_%s_Stub( pParamStruct->This", has_ret ? "pParamStruct->_RetVal = " : "", iface->name, callas->name ); indent++; if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) { fprintf( proxy, ",\n%*spParamStruct->%s", 4 * indent, "", arg->name ); } fprintf( proxy, " );\n" ); indent--; indent--; print_proxy( "}\n\n"); } int count_methods(const type_t *iface) { const statement_t *stmt; int count = 0; if (type_iface_get_inherit(iface)) count = count_methods(type_iface_get_inherit(iface)); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (!is_callas(func->attrs)) count++; } return count; } static const statement_t * get_callas_source(const type_t * iface, const var_t * def) { const statement_t * source; STATEMENTS_FOR_EACH_FUNC( source, type_iface_get_stmts(iface)) { const var_t * cas = is_callas(source->u.var->attrs ); if (cas && !strcmp(def->name, cas->name)) return source; } return NULL; } static void write_proxy_procformatstring_offsets( const type_t *iface, int skip ) { const statement_t *stmt; if (type_iface_get_inherit(iface)) write_proxy_procformatstring_offsets( type_iface_get_inherit(iface), need_delegation(iface)); else return; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { const var_t *func = stmt->u.var; int missing = 0; if (is_callas(func->attrs)) continue; if (is_local(func->attrs)) { const statement_t * callas_source = get_callas_source(iface, func); if (!callas_source) missing = 1; else func = callas_source->u.var; } if (skip || missing) print_proxy( "(unsigned short)-1, /* %s::%s */\n", iface->name, get_name(func)); else print_proxy( "%u, /* %s::%s */\n", func->procstring_offset, iface->name, get_name(func)); } } static int write_proxy_methods(type_t *iface, int skip) { const statement_t *stmt; int i = 0; if (type_iface_get_inherit(iface)) i = write_proxy_methods(type_iface_get_inherit(iface), need_delegation(iface)); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (!is_callas(func->attrs)) { if (skip || (is_local(func->attrs) && !get_callas_source(iface, func))) print_proxy( "0, /* %s::%s */\n", iface->name, get_name(func)); else if (is_interpreted_func( iface, func ) && !is_local( func->attrs ) && type_iface_get_inherit(iface)) print_proxy( "(void *)-1, /* %s::%s */\n", iface->name, get_name(func)); else print_proxy( "%s_%s_Proxy,\n", iface->name, get_name(func)); i++; } } return i; } static int write_stub_methods(type_t *iface, int skip) { const statement_t *stmt; int i = 0; if (type_iface_get_inherit(iface)) i = write_stub_methods(type_iface_get_inherit(iface), need_delegation(iface)); else return i; /* skip IUnknown */ STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (!is_callas(func->attrs)) { int missing = 0; const char * fname = get_name(func); if(is_local(func->attrs)) { const statement_t * callas_source = get_callas_source(iface, func); if(!callas_source) missing = 1; else fname = get_name(callas_source->u.var); } if (i) fprintf(proxy,",\n"); if (skip || missing) print_proxy("STUB_FORWARDING_FUNCTION"); else if (is_interpreted_func( iface, func )) print_proxy( "(PRPC_STUB_FUNCTION)%s", get_stub_mode() == MODE_Oif ? "NdrStubCall2" : "NdrStubCall" ); else print_proxy( "%s_%s_Stub", iface->name, fname); i++; } } return i; } static void write_thunk_methods( type_t *iface, int skip ) { const statement_t *stmt; if (type_iface_get_inherit( iface )) write_thunk_methods( type_iface_get_inherit(iface), need_delegation(iface) ); else return; /* skip IUnknown */ STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { var_t *func = stmt->u.var; const statement_t * callas_source = NULL; if (is_callas(func->attrs)) continue; if (is_local(func->attrs)) callas_source = get_callas_source(iface, func); if (!skip && callas_source && is_interpreted_func( iface, func )) print_proxy( "%s_%s_Thunk,\n", iface->name, get_name(callas_source->u.var) ); else print_proxy( "0, /* %s::%s */\n", iface->name, get_name(func) ); } } static void write_proxy(type_t *iface, unsigned int *proc_offset) { int count; const statement_t *stmt; int first_func = 1; int needs_stub_thunks = 0; int needs_inline_stubs = need_inline_stubs( iface ) || need_delegation( iface ); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { var_t *func = stmt->u.var; if (first_func) { fprintf(proxy, "/*****************************************************************************\n"); fprintf(proxy, " * %s interface\n", iface->name); fprintf(proxy, " */\n"); first_func = 0; } if (!is_local(func->attrs)) { const var_t *cas = is_callas(func->attrs); const char *cname = cas ? cas->name : NULL; int idx = func->type->details.function->idx; if (cname) { const statement_t *stmt2; STATEMENTS_FOR_EACH_FUNC(stmt2, type_iface_get_stmts(iface)) { const var_t *m = stmt2->u.var; if (!strcmp(m->name, cname)) { idx = m->type->details.function->idx; break; } } } func->procstring_offset = *proc_offset; gen_proxy(iface, func, idx, *proc_offset); gen_stub(iface, func, cname, *proc_offset); if (cas && is_interpreted_func( iface, func )) { needs_stub_thunks = 1; gen_stub_thunk(iface, func, *proc_offset); } *proc_offset += get_size_procformatstring_func( iface, func ); } } count = count_methods(iface); print_proxy( "static const unsigned short %s_FormatStringOffsetTable[] =\n", iface->name ); print_proxy( "{\n" ); indent++; write_proxy_procformatstring_offsets( iface, 0 ); indent--; print_proxy( "};\n\n" ); /* proxy info */ if (get_stub_mode() == MODE_Oif) { print_proxy( "static const MIDL_STUBLESS_PROXY_INFO %s_ProxyInfo =\n", iface->name ); print_proxy( "{\n" ); indent++; print_proxy( "&Object_StubDesc,\n" ); print_proxy( "__MIDL_ProcFormatString.Format,\n" ); print_proxy( "&%s_FormatStringOffsetTable[-3],\n", iface->name ); print_proxy( "0,\n" ); print_proxy( "0,\n" ); print_proxy( "0\n" ); indent--; print_proxy( "};\n\n" ); } /* proxy vtable */ print_proxy( "static %sCINTERFACE_PROXY_VTABLE(%d) _%sProxyVtbl =\n", need_delegation_indirect(iface) ? "" : "const ", count, iface->name); print_proxy( "{\n"); indent++; print_proxy( "{\n"); indent++; if (get_stub_mode() == MODE_Oif) print_proxy( "&%s_ProxyInfo,\n", iface->name ); print_proxy( "&IID_%s,\n", iface->name); indent--; print_proxy( "},\n"); print_proxy( "{\n"); indent++; write_proxy_methods(iface, FALSE); indent--; print_proxy( "}\n"); indent--; print_proxy( "};\n\n"); /* stub thunk table */ if (needs_stub_thunks) { print_proxy( "static const STUB_THUNK %s_StubThunkTable[] =\n", iface->name); print_proxy( "{\n"); indent++; write_thunk_methods( iface, 0 ); indent--; print_proxy( "};\n\n"); } /* server info */ print_proxy( "static const MIDL_SERVER_INFO %s_ServerInfo =\n", iface->name ); print_proxy( "{\n" ); indent++; print_proxy( "&Object_StubDesc,\n" ); print_proxy( "0,\n" ); print_proxy( "__MIDL_ProcFormatString.Format,\n" ); print_proxy( "&%s_FormatStringOffsetTable[-3],\n", iface->name ); if (needs_stub_thunks) print_proxy( "&%s_StubThunkTable[-3],\n", iface->name ); else print_proxy( "0,\n" ); print_proxy( "0,\n" ); print_proxy( "0,\n" ); print_proxy( "0\n" ); indent--; print_proxy( "};\n\n" ); /* stub vtable */ if (needs_inline_stubs) { print_proxy( "static const PRPC_STUB_FUNCTION %s_table[] =\n", iface->name); print_proxy( "{\n"); indent++; write_stub_methods(iface, FALSE); fprintf(proxy, "\n"); indent--; fprintf(proxy, "};\n\n"); } print_proxy( "static %sCInterfaceStubVtbl _%sStubVtbl =\n", need_delegation_indirect(iface) ? "" : "const ", iface->name); print_proxy( "{\n"); indent++; print_proxy( "{\n"); indent++; print_proxy( "&IID_%s,\n", iface->name); print_proxy( "&%s_ServerInfo,\n", iface->name ); print_proxy( "%d,\n", count); if (needs_inline_stubs) print_proxy( "&%s_table[-3]\n", iface->name ); else print_proxy( "0\n" ); indent--; print_proxy( "},\n"); print_proxy( "{\n"); indent++; print_proxy( "CStdStubBuffer_%s\n", need_delegation_indirect(iface) ? "DELEGATING_METHODS" : "METHODS"); indent--; print_proxy( "}\n"); indent--; print_proxy( "};\n"); print_proxy( "\n"); } static int does_any_iface(const statement_list_t *stmts, type_pred_t pred) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry) { if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE) { if (pred(stmt->u.type)) return TRUE; } } return FALSE; } int need_proxy(const type_t *iface) { if (!is_object( iface )) return 0; if (is_local( iface->attrs )) return 0; if (is_attr( iface->attrs, ATTR_DISPINTERFACE )) return 0; return 1; } int need_stub(const type_t *iface) { return !is_object(iface) && !is_local(iface->attrs); } int need_proxy_file(const statement_list_t *stmts) { return does_any_iface(stmts, need_proxy); } int need_proxy_delegation(const statement_list_t *stmts) { return does_any_iface(stmts, need_delegation); } int need_inline_stubs(const type_t *iface) { const statement_t *stmt; if (get_stub_mode() == MODE_Os) return 1; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { const var_t *func = stmt->u.var; if (is_local( func->attrs )) continue; if (!is_interpreted_func( iface, func )) return 1; } return 0; } static int need_proxy_and_inline_stubs(const type_t *iface) { const statement_t *stmt; if (!need_proxy( iface )) return 0; if (get_stub_mode() == MODE_Os) return 1; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { const var_t *func = stmt->u.var; if (is_local( func->attrs )) continue; if (!is_interpreted_func( iface, func )) return 1; } return 0; } int need_stub_files(const statement_list_t *stmts) { return does_any_iface(stmts, need_stub); } int need_inline_stubs_file(const statement_list_t *stmts) { return does_any_iface(stmts, need_inline_stubs); } static void write_proxy_stmts(const statement_list_t *stmts, unsigned int *proc_offset) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE) { if (need_proxy(stmt->u.type)) write_proxy(stmt->u.type, proc_offset); } } } static int cmp_iid( const void *ptr1, const void *ptr2 ) { const type_t * const *iface1 = ptr1; const type_t * const *iface2 = ptr2; const UUID *uuid1 = get_attrp( (*iface1)->attrs, ATTR_UUID ); const UUID *uuid2 = get_attrp( (*iface2)->attrs, ATTR_UUID ); return memcmp( uuid1, uuid2, sizeof(UUID) ); } static void build_iface_list( const statement_list_t *stmts, type_t **ifaces[], int *count ) { const statement_t *stmt; if (!stmts) return; LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE) { type_t *iface = stmt->u.type; if (type_iface_get_inherit(iface) && need_proxy(iface)) { *ifaces = xrealloc( *ifaces, (*count + 1) * sizeof(**ifaces) ); (*ifaces)[(*count)++] = iface; } } } } static type_t **sort_interfaces( const statement_list_t *stmts, int *count ) { type_t **ifaces = NULL; *count = 0; build_iface_list( stmts, &ifaces, count ); qsort( ifaces, *count, sizeof(*ifaces), cmp_iid ); return ifaces; } static void write_proxy_routines(const statement_list_t *stmts) { int expr_eval_routines; unsigned int proc_offset = 0; char *file_id = proxy_token; int i, count, have_baseiid = 0; type_t **interfaces; const type_t * delegate_to; print_proxy( "#ifndef __REDQ_RPCPROXY_H_VERSION__\n"); print_proxy( "#define __REQUIRED_RPCPROXY_H_VERSION__ %u\n", get_stub_mode() == MODE_Oif ? 475 : 440); print_proxy( "#endif\n"); print_proxy( "\n"); if (get_stub_mode() == MODE_Oif) print_proxy( "#define USE_STUBLESS_PROXY\n"); print_proxy( "#include \"rpcproxy.h\"\n"); print_proxy( "#ifndef __RPCPROXY_H_VERSION__\n"); print_proxy( "#error This code needs a newer version of rpcproxy.h\n"); print_proxy( "#endif /* __RPCPROXY_H_VERSION__ */\n"); print_proxy( "\n"); print_proxy( "#include \"%s\"\n", header_name); print_proxy( "\n"); if (does_any_iface(stmts, need_proxy_and_inline_stubs)) { write_exceptions( proxy ); print_proxy( "\n"); print_proxy( "struct __proxy_frame\n"); print_proxy( "{\n"); print_proxy( " __DECL_EXCEPTION_FRAME\n"); print_proxy( " MIDL_STUB_MESSAGE _StubMsg;\n"); print_proxy( " void *This;\n"); print_proxy( "};\n"); print_proxy( "\n"); print_proxy("static int __proxy_filter( struct __proxy_frame *__frame )\n"); print_proxy( "{\n"); print_proxy( " return (__frame->_StubMsg.dwStubPhase != PROXY_SENDRECEIVE);\n"); print_proxy( "}\n"); print_proxy( "\n"); } write_formatstringsdecl(proxy, indent, stmts, need_proxy); write_stubdescproto(); write_proxy_stmts(stmts, &proc_offset); expr_eval_routines = write_expr_eval_routines(proxy, proxy_token); if (expr_eval_routines) write_expr_eval_routine_list(proxy, proxy_token); write_user_quad_list(proxy); write_stubdesc(expr_eval_routines); print_proxy( "#if !defined(__RPC_WIN%u__)\n", pointer_size == 8 ? 64 : 32); print_proxy( "#error Currently only Wine and WIN32 are supported.\n"); print_proxy( "#endif\n"); print_proxy( "\n"); write_procformatstring(proxy, stmts, need_proxy); write_typeformatstring(proxy, stmts, need_proxy); interfaces = sort_interfaces(stmts, &count); fprintf(proxy, "static const CInterfaceProxyVtbl* const _%s_ProxyVtblList[] =\n", file_id); fprintf(proxy, "{\n"); for (i = 0; i < count; i++) fprintf(proxy, " (const CInterfaceProxyVtbl*)&_%sProxyVtbl,\n", interfaces[i]->name); fprintf(proxy, " 0\n"); fprintf(proxy, "};\n"); fprintf(proxy, "\n"); fprintf(proxy, "static const CInterfaceStubVtbl* const _%s_StubVtblList[] =\n", file_id); fprintf(proxy, "{\n"); for (i = 0; i < count; i++) fprintf(proxy, " &_%sStubVtbl,\n", interfaces[i]->name); fprintf(proxy, " 0\n"); fprintf(proxy, "};\n"); fprintf(proxy, "\n"); fprintf(proxy, "static PCInterfaceName const _%s_InterfaceNamesList[] =\n", file_id); fprintf(proxy, "{\n"); for (i = 0; i < count; i++) fprintf(proxy, " \"%s\",\n", interfaces[i]->name); fprintf(proxy, " 0\n"); fprintf(proxy, "};\n"); fprintf(proxy, "\n"); for (i = 0; i < count; i++) if ((have_baseiid = get_delegation_indirect( interfaces[i], NULL ))) break; if (have_baseiid) { fprintf(proxy, "static const IID * _%s_BaseIIDList[] =\n", file_id); fprintf(proxy, "{\n"); for (i = 0; i < count; i++) { if (get_delegation_indirect(interfaces[i], &delegate_to)) fprintf( proxy, " &IID_%s, /* %s */\n", delegate_to->name, interfaces[i]->name ); else fprintf( proxy, " 0,\n" ); } fprintf(proxy, " 0\n"); fprintf(proxy, "};\n"); fprintf(proxy, "\n"); } fprintf(proxy, "static int __stdcall _%s_IID_Lookup(const IID* pIID, int* pIndex)\n", file_id); fprintf(proxy, "{\n"); fprintf(proxy, " int low = 0, high = %d;\n", count - 1); fprintf(proxy, "\n"); fprintf(proxy, " while (low <= high)\n"); fprintf(proxy, " {\n"); fprintf(proxy, " int pos = (low + high) / 2;\n"); fprintf(proxy, " int res = IID_GENERIC_CHECK_IID(_%s, pIID, pos);\n", file_id); fprintf(proxy, " if (!res) { *pIndex = pos; return 1; }\n"); fprintf(proxy, " if (res > 0) low = pos + 1;\n"); fprintf(proxy, " else high = pos - 1;\n"); fprintf(proxy, " }\n"); fprintf(proxy, " return 0;\n"); fprintf(proxy, "}\n"); fprintf(proxy, "\n"); fprintf(proxy, "const ExtendedProxyFileInfo %s_ProxyFileInfo DECLSPEC_HIDDEN =\n", file_id); fprintf(proxy, "{\n"); fprintf(proxy, " (const PCInterfaceProxyVtblList*)_%s_ProxyVtblList,\n", file_id); fprintf(proxy, " (const PCInterfaceStubVtblList*)_%s_StubVtblList,\n", file_id); fprintf(proxy, " _%s_InterfaceNamesList,\n", file_id); if (have_baseiid) fprintf(proxy, " _%s_BaseIIDList,\n", file_id); else fprintf(proxy, " 0,\n"); fprintf(proxy, " _%s_IID_Lookup,\n", file_id); fprintf(proxy, " %d,\n", count); fprintf(proxy, " %d,\n", get_stub_mode() == MODE_Oif ? 2 : 1); fprintf(proxy, " 0,\n"); fprintf(proxy, " 0,\n"); fprintf(proxy, " 0,\n"); fprintf(proxy, " 0\n"); fprintf(proxy, "};\n"); } void write_proxies(const statement_list_t *stmts) { if (!do_proxies) return; if (do_everything && !need_proxy_file(stmts)) return; init_proxy(stmts); if(!proxy) return; if (do_win32 && do_win64) { fprintf(proxy, "\n#ifndef _WIN64\n\n"); pointer_size = 4; write_proxy_routines( stmts ); fprintf(proxy, "\n#else /* _WIN64 */\n\n"); pointer_size = 8; write_proxy_routines( stmts ); fprintf(proxy, "\n#endif /* _WIN64 */\n"); } else if (do_win32) { pointer_size = 4; write_proxy_routines( stmts ); } else if (do_win64) { pointer_size = 8; write_proxy_routines( stmts ); } fclose(proxy); } ================================================ FILE: widl/register.c ================================================ /* * Generation of dll registration scripts * * Copyright 2010 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" #include "typegen.h" static int indent; static const char *format_uuid( const UUID *uuid ) { static char buffer[40]; sprintf( buffer, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7] ); return buffer; } static const char *get_coclass_threading( const type_t *class ) { static const char * const models[] = { NULL, "Apartment", /* THREADING_APARTMENT */ "Neutral", /* THREADING_NEUTRAL */ "Single", /* THREADING_SINGLE */ "Free", /* THREADING_FREE */ "Both", /* THREADING_BOTH */ }; return models[get_attrv( class->attrs, ATTR_THREADING )]; } static const type_t *find_ps_factory( const statement_list_t *stmts ) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE) { const type_t *type = stmt->u.type; if (type_get_type(type) == TYPE_COCLASS && !strcmp( type->name, "PSFactoryBuffer" )) return type; } } return NULL; } static void write_interface( const type_t *iface, const type_t *ps_factory ) { const UUID *uuid = get_attrp( iface->attrs, ATTR_UUID ); const UUID *ps_uuid = get_attrp( ps_factory->attrs, ATTR_UUID ); if (!uuid) return; if (!is_object( iface )) return; if (!type_iface_get_inherit(iface)) /* special case for IUnknown */ { put_str( indent, "'%s' = s '%s'\n", format_uuid( uuid ), iface->name ); return; } if (is_local( iface->attrs )) return; put_str( indent, "'%s' = s '%s'\n", format_uuid( uuid ), iface->name ); put_str( indent, "{\n" ); indent++; put_str( indent, "NumMethods = s %u\n", count_methods( iface )); put_str( indent, "ProxyStubClsid32 = s '%s'\n", format_uuid( ps_uuid )); indent--; put_str( indent, "}\n" ); } static void write_interfaces( const statement_list_t *stmts, const type_t *ps_factory ) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type( stmt->u.type ) == TYPE_INTERFACE) write_interface( stmt->u.type, ps_factory ); } } static void write_typelib_interface( const type_t *iface, const typelib_t *typelib ) { const UUID *typelib_uuid = get_attrp( typelib->attrs, ATTR_UUID ); const UUID *uuid = get_attrp( iface->attrs, ATTR_UUID ); unsigned int version = get_attrv( typelib->attrs, ATTR_VERSION ); if (!uuid) return; if (!is_object( iface )) return; if (!is_attr( iface->attrs, ATTR_OLEAUTOMATION ) && !is_attr( iface->attrs, ATTR_DISPINTERFACE )) return; put_str( indent, "'%s' = s '%s'\n", format_uuid( uuid ), iface->name ); put_str( indent, "{\n" ); indent++; put_str( indent, "ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'\n" ); put_str( indent, "ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'\n" ); if (version) put_str( indent, "TypeLib = s '%s' { val Version = s '%u.%u' }\n", format_uuid( typelib_uuid ), MAJORVERSION(version), MINORVERSION(version) ); else put_str( indent, "TypeLib = s '%s'", format_uuid( typelib_uuid )); indent--; put_str( indent, "}\n" ); } static void write_typelib_interfaces( const typelib_t *typelib ) { const statement_t *stmt; if (typelib->stmts) LIST_FOR_EACH_ENTRY( stmt, typelib->stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type( stmt->u.type ) == TYPE_INTERFACE) write_typelib_interface( stmt->u.type, typelib ); } } static int write_coclass( const type_t *class, const typelib_t *typelib ) { const UUID *uuid = get_attrp( class->attrs, ATTR_UUID ); const char *descr = get_attrp( class->attrs, ATTR_HELPSTRING ); const char *progid = get_attrp( class->attrs, ATTR_PROGID ); const char *vi_progid = get_attrp( class->attrs, ATTR_VIPROGID ); const char *threading = get_coclass_threading( class ); unsigned int version = get_attrv( class->attrs, ATTR_VERSION ); if (!uuid) return 0; if (typelib && !threading && !progid) return 0; if (!descr) descr = class->name; put_str( indent, "'%s' = s '%s'\n", format_uuid( uuid ), descr ); put_str( indent++, "{\n" ); if (threading) put_str( indent, "InprocServer32 = s '%%MODULE%%' { val ThreadingModel = s '%s' }\n", threading ); if (progid) put_str( indent, "ProgId = s '%s'\n", progid ); if (typelib) { const UUID *typelib_uuid = get_attrp( typelib->attrs, ATTR_UUID ); put_str( indent, "TypeLib = s '%s'\n", format_uuid( typelib_uuid )); if (!version) version = get_attrv( typelib->attrs, ATTR_VERSION ); } if (version) put_str( indent, "Version = s '%u.%u'\n", MAJORVERSION(version), MINORVERSION(version) ); if (vi_progid) put_str( indent, "VersionIndependentProgId = s '%s'\n", vi_progid ); put_str( --indent, "}\n" ); return 1; } static void write_coclasses( const statement_list_t *stmts, const typelib_t *typelib ) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE) { const type_t *type = stmt->u.type; if (type_get_type(type) == TYPE_COCLASS) write_coclass( type, typelib ); } } } static int write_progid( const type_t *class ) { const UUID *uuid = get_attrp( class->attrs, ATTR_UUID ); const char *descr = get_attrp( class->attrs, ATTR_HELPSTRING ); const char *progid = get_attrp( class->attrs, ATTR_PROGID ); const char *vi_progid = get_attrp( class->attrs, ATTR_VIPROGID ); if (!uuid) return 0; if (!descr) descr = class->name; if (progid) { put_str( indent, "'%s' = s '%s'\n", progid, descr ); put_str( indent++, "{\n" ); put_str( indent, "CLSID = s '%s'\n", format_uuid( uuid ) ); put_str( --indent, "}\n" ); } if (vi_progid) { put_str( indent, "'%s' = s '%s'\n", vi_progid, descr ); put_str( indent++, "{\n" ); put_str( indent, "CLSID = s '%s'\n", format_uuid( uuid ) ); if (progid && strcmp( progid, vi_progid )) put_str( indent, "CurVer = s '%s'\n", progid ); put_str( --indent, "}\n" ); } return 1; } static void write_progids( const statement_list_t *stmts ) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE) { const type_t *type = stmt->u.type; if (type_get_type(type) == TYPE_COCLASS) write_progid( type ); } } } void write_regscript( const statement_list_t *stmts ) { const type_t *ps_factory; if (!do_regscript) return; if (do_everything && !need_proxy_file( stmts )) return; init_output_buffer(); put_str( indent, "HKCR\n" ); put_str( indent++, "{\n" ); put_str( indent, "NoRemove Interface\n" ); put_str( indent++, "{\n" ); ps_factory = find_ps_factory( stmts ); if (ps_factory) write_interfaces( stmts, ps_factory ); put_str( --indent, "}\n" ); put_str( indent, "NoRemove CLSID\n" ); put_str( indent++, "{\n" ); write_coclasses( stmts, NULL ); put_str( --indent, "}\n" ); write_progids( stmts ); put_str( --indent, "}\n" ); if (strendswith( regscript_name, ".res" )) /* create a binary resource file */ { add_output_to_resources( "WINE_REGISTRY", regscript_token ); flush_output_resources( regscript_name ); } else { FILE *f = fopen( regscript_name, "w" ); if (!f) error( "Could not open %s for output\n", regscript_name ); if (fwrite( output_buffer, 1, output_buffer_pos, f ) != output_buffer_pos) error( "Failed to write to %s\n", regscript_name ); if (fclose( f )) error( "Failed to write to %s\n", regscript_name ); } } void output_typelib_regscript( const typelib_t *typelib ) { const UUID *typelib_uuid = get_attrp( typelib->attrs, ATTR_UUID ); const char *descr = get_attrp( typelib->attrs, ATTR_HELPSTRING ); const expr_t *lcid_expr = get_attrp( typelib->attrs, ATTR_LIBLCID ); unsigned int version = get_attrv( typelib->attrs, ATTR_VERSION ); unsigned int flags = 0; char id_part[12] = ""; expr_t *expr; if (is_attr( typelib->attrs, ATTR_RESTRICTED )) flags |= 1; /* LIBFLAG_FRESTRICTED */ if (is_attr( typelib->attrs, ATTR_CONTROL )) flags |= 2; /* LIBFLAG_FCONTROL */ if (is_attr( typelib->attrs, ATTR_HIDDEN )) flags |= 4; /* LIBFLAG_FHIDDEN */ put_str( indent, "HKCR\n" ); put_str( indent++, "{\n" ); put_str( indent, "NoRemove Typelib\n" ); put_str( indent++, "{\n" ); put_str( indent, "NoRemove '%s'\n", format_uuid( typelib_uuid )); put_str( indent++, "{\n" ); put_str( indent, "'%u.%u' = s '%s'\n", MAJORVERSION(version), MINORVERSION(version), descr ? descr : typelib->name ); put_str( indent++, "{\n" ); expr = get_attrp( typelib->attrs, ATTR_ID ); if (expr) sprintf(id_part, "\\%d", expr->cval); put_str( indent, "'%x' { %s = s '%%MODULE%%%s' }\n", lcid_expr ? lcid_expr->cval : 0, typelib_kind == SYS_WIN64 ? "win64" : "win32", id_part ); put_str( indent, "FLAGS = s '%u'\n", flags ); put_str( --indent, "}\n" ); put_str( --indent, "}\n" ); put_str( --indent, "}\n" ); put_str( indent, "NoRemove Interface\n" ); put_str( indent++, "{\n" ); write_typelib_interfaces( typelib ); put_str( --indent, "}\n" ); put_str( indent, "NoRemove CLSID\n" ); put_str( indent++, "{\n" ); write_coclasses( typelib->stmts, typelib ); put_str( --indent, "}\n" ); write_progids( typelib->stmts ); put_str( --indent, "}\n" ); add_output_to_resources( "WINE_REGISTRY", typelib_name ); } ================================================ FILE: widl/relay16.c ================================================ #include "config.h" #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "expr.h" #include "typetree.h" #include "typelib.h" #include "header.h" static void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const char *name); static void get_type_size16(const type_t *type, int *size, int *is_ptr); static void write_args1632(FILE *h, const var_list_t *args, const char *name, int method) { const var_t *arg; int count = 0; if (method == 1) { fprintf(h, "%s* This", name); count++; } if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) { int size, is_ptr; if (count) { fprintf(h, ", "); } get_type_size16(arg->type, &size, &is_ptr); if (size == 4) { if (is_ptr) { fprintf(h, "SEGPTR args16_%s", arg->name); } else { /* hard-coded */ if (!strcmp(arg->type->c_name, "POINT")) { fprintf(h, "POINT16 args16_%s", arg->name); } else if (!strcmp(arg->type->c_name, "SIZE")) { fprintf(h, "SIZE16 args16_%s", arg->name); } else { fprintf(h, "DWORD args16_%s", arg->name); } } } else if (size == 2) { assert(!is_ptr); fprintf(h, "WORD args16_%s", arg->name); } else if (size == 8) { assert(!is_ptr); /* hard-coded */ if (!strcmp(arg->type->c_name, "LARGE_INTEGER")) { fprintf(h, "LARGE_INTEGER args16_%s", arg->name); } else if (!strcmp(arg->type->c_name, "ULARGE_INTEGER")) { fprintf(h, "ULARGE_INTEGER args16_%s", arg->name); } else if (!strcmp(arg->type->c_name, "POINTL")) { fprintf(h, "POINTL args16_%s", arg->name); } else if (!strcmp(arg->type->c_name, "CY")) { fprintf(h, "CY args16_%s", arg->name); } else { assert(0); } } else { assert(0); } count++; } } static void write_type_conv_macro(FILE *h, type_t *t) { enum type_type type = type_get_type(t); if (type_is_alias(t)) { fprintf(h, "%s", t->name); return; } switch (type) { case TYPE_VOID: { fprintf(h, "VOID"); return; } case TYPE_BASIC: switch (type_basic_get_type(t)) { case TYPE_BASIC_INT8: fprintf(h, "INT8"); return; case TYPE_BASIC_INT16: fprintf(h, "INT16"); return; case TYPE_BASIC_INT32: fprintf(h, "INT32"); return; case TYPE_BASIC_INT64: fprintf(h, "INT64"); return; case TYPE_BASIC_INT: fprintf(h, "INT"); return; case TYPE_BASIC_INT3264: fprintf(h, "INT3264"); return; case TYPE_BASIC_CHAR: fprintf(h, "CHAR"); return; case TYPE_BASIC_HYPER: fprintf(h, "HYPER"); return; case TYPE_BASIC_BYTE: fprintf(h, "BYTE"); return; case TYPE_BASIC_WCHAR: fprintf(h, "WCHAR"); return; case TYPE_BASIC_ERROR_STATUS_T: case TYPE_BASIC_FLOAT: assert((TYPE_BASIC_FLOAT, 0)); case TYPE_BASIC_DOUBLE: assert((TYPE_BASIC_DOUBLE, 0)); case TYPE_BASIC_HANDLE: assert((TYPE_BASIC_HANDLE, 0)); } break; case TYPE_ENUM: break; case TYPE_STRUCT: assert(type_get_name(t, NAME_DEFAULT)); fprintf(h, "STRUCT_%s", type_get_name(t, NAME_DEFAULT)); return; case TYPE_ENCAPSULATED_UNION: break; case TYPE_UNION: break; case TYPE_ALIAS: break; case TYPE_MODULE: break; case TYPE_COCLASS: break; case TYPE_FUNCTION: break; case TYPE_INTERFACE: { fprintf(h, "IFACE_%s", t->name); return; } case TYPE_POINTER: { fprintf(h, "PTR_"); write_type_conv_macro(h, type_pointer_get_ref(t)); return; } case TYPE_ARRAY: if (t->name && type_array_is_decl_as_ptr(t)) fprintf(h, "%s", t->name); else { write_type_conv_macro(h, type_array_get_element(t)); if (type_array_is_decl_as_ptr(t)) fprintf(h, "_PTR"); } return; case TYPE_BITFIELD: break; default: break; } assert(0); } enum type_conv_map { TYPE_CONV_MAP, TYPE_CONV_UNMAP, TYPE_CONV_INMAP, TYPE_CONV_OUTMAP, TYPE_CONV_MAP_MAPSL, /* (*(typ16*)MapSL(%s%s)) */ TYPE_CONV_MAP_ARRAY, /* (((typ16*)dst__)[i__]) */ TYPE_CONV_OUTMAP_MAPSL, /* (*(typ16*)MapSL(%s%s)) */ }; static void write_type_decl_left3216(FILE *f, type_t *t); static void write_type_conv3216(FILE *h, type_t *t, const char *expr_prefix, const char *expr, const char *to, const char *to2, int unmap) { enum type_type typtyp1 = type_get_type(t); enum type_conv_map type_conv_map = (enum type_conv_map)unmap; int is_out = type_conv_map == TYPE_CONV_OUTMAP || type_conv_map == TYPE_CONV_OUTMAP_MAPSL; if (!is_out && typtyp1 == TYPE_BASIC && !t->is_alias) { switch (type_basic_get_type(t)) { case TYPE_BASIC_INT8: case TYPE_BASIC_INT16: case TYPE_BASIC_INT32: case TYPE_BASIC_INT64: if (type_conv_map == TYPE_CONV_UNMAP) return; if (type_conv_map == TYPE_CONV_MAP_MAPSL) { fprintf(h, " *("); write_type_decl_left3216(h, t); fprintf(h, "*)MapSL(%s%s) = %s%s;\n", to, to2, expr_prefix, expr); } else if (type_conv_map == TYPE_CONV_MAP_ARRAY) { fprintf(h, " (("); write_type_decl_left3216(h, t); fprintf(h, "*)(%s%s))[i__] = %s%s;\n", to, to2, expr_prefix, expr); } else { fprintf(h, " %s%s = %s%s;\n", to, to2, expr_prefix, expr); } return; } } type_t *typ2 = typtyp1 == TYPE_POINTER ? type_pointer_get_ref(t) : NULL; enum type_type typtyp2 = typ2 ? type_get_type(typ2) : -1; if (!is_out && typtyp2 == TYPE_INTERFACE) { if (type_conv_map == TYPE_CONV_UNMAP) return; if (type_conv_map == TYPE_CONV_MAP_MAPSL) { fprintf(h, " *(SEGPTR*)MapSL(%s%s) = iface32_16(&IID_%s, %s%s);\n", to, to2, typ2->name, expr_prefix, expr); } else if (type_conv_map == TYPE_CONV_MAP_ARRAY) { fprintf(h, " ((SEGPTR*)(%s%s))[i__] = iface32_16(&IID_%s, %s%s);\n", to, to2, typ2->name, expr_prefix, expr); } else { fprintf(h, " %s%s = iface32_16(&IID_%s, %s%s);\n", to, to2, typ2->name, expr_prefix, expr); } return; } if (type_conv_map == TYPE_CONV_UNMAP) fprintf(h, " UNMAP_"); else if (type_conv_map == TYPE_CONV_INMAP) fprintf(h, " INMAP_"); else if (type_conv_map == TYPE_CONV_OUTMAP) fprintf(h, " OUTMAP_"); else if (type_conv_map == TYPE_CONV_OUTMAP_MAPSL) fprintf(h, " OUTMAP_"); else fprintf(h, " MAP_"); write_type_conv_macro(h, t); if (type_conv_map == TYPE_CONV_MAP_MAPSL || type_conv_map == TYPE_CONV_OUTMAP_MAPSL) { fprintf(h, "32_16((*("); write_type_decl_left3216(h, t); fprintf(h, "*)MapSL(%s%s)), %s%s)", to, to2, expr_prefix, expr); } else if (type_conv_map == TYPE_CONV_MAP_ARRAY) { fprintf(h, "32_16(((("); write_type_decl_left3216(h, t); fprintf(h, "*)(%s%s))[i__]), %s%s)", to, to2, expr_prefix, expr); } else { fprintf(h, "32_16(%s%s, %s%s)", to, to2, expr_prefix, expr); } fprintf(h, ";\n"); } static void write_type_conv1632(FILE *h, type_t *t, const char *expr_prefix, const char *expr, const char *to, const char *to2, int unmap) { enum type_type typtyp1 = type_get_type(t); type_t *typ2 = typtyp1 == TYPE_POINTER ? type_pointer_get_ref(t) : NULL; enum type_type typtyp2 = typ2 ? type_get_type(typ2) : -1; enum type_conv_map type_conv_map = (enum type_conv_map)unmap; if (typtyp1 == TYPE_BASIC && !t->is_alias) { switch (type_basic_get_type(t)) { case TYPE_BASIC_INT8: case TYPE_BASIC_INT16: case TYPE_BASIC_INT32: case TYPE_BASIC_INT64: if (type_conv_map == TYPE_CONV_UNMAP) return; if (type_conv_map == TYPE_CONV_MAP_ARRAY) { fprintf(h, " %s%s = ((", to, to2); write_type_decl_left(h, t); fprintf(h, "*)(%s%s))[i__];\n", expr_prefix, expr); } else { fprintf(h, " %s%s = %s%s;\n", to, to2, expr_prefix, expr); } return; } } if (typtyp2 == TYPE_INTERFACE) { if (type_conv_map == TYPE_CONV_UNMAP) return; if (type_conv_map == TYPE_CONV_MAP_ARRAY) { fprintf(h, " %s%s = iface16_32(&IID_%s, ((void**)%s%s)[i__]);\n", to, to2, typ2->name, expr_prefix, expr); } else { fprintf(h, " %s%s = iface16_32(&IID_%s, %s%s);\n", to, to2, typ2->name, expr_prefix, expr); } return; } if (type_conv_map == TYPE_CONV_UNMAP) fprintf(h," UNMAP_"); else if (type_conv_map == TYPE_CONV_INMAP) fprintf(h, " INMAP_"); else if (type_conv_map == TYPE_CONV_OUTMAP) fprintf(h, " OUTMAP_"); else fprintf(h, " MAP_"); write_type_conv_macro(h, t); if (type_conv_map == TYPE_CONV_MAP_ARRAY) { fprintf(h, "16_32(%s%s, ", to, to2); fprintf(h, "((("); write_type_decl_left(h, t); fprintf(h, "*)%s%s)[i__]))", expr_prefix, expr); } else { fprintf(h, "16_32(%s%s, %s%s)", to, to2, expr_prefix, expr); } fprintf(h, ";\n"); } static const var_t *find_args(const var_list_t *args, const char *name) { const var_t *arg; if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) { if (!strcmp(arg->name, name)) return arg; } return NULL; } /* hard-coded */ static const char *handle16_table[] = { "HTASK", "HWND", "HMENU", "HICON", "HBITMAP", "HOLEMENU", "HDC", "HGLOBAL", "HFONT", "HRGN", }; static void get_type_size16(const type_t *type, int *size, int *is_ptr) { enum type_type typtyp1 = type_get_type(type); *size = 0; *is_ptr = 0; if (type_is_alias(type)) { if (*type->name == 'H') { int i; for (i = 0; i < sizeof(handle16_table) / sizeof(*handle16_table); i++) { if (!strcmp(type->name, handle16_table[i])) { *size = 2; return; } } /* hard-coded */ if (strcmp(type->name, "HREFTYPE") && strcmp(type->name, "HRESULT")) { *size = 0; } } if (!strcmp(type->name, "BOOL")) { *size = 2; return; } } switch (typtyp1) { case TYPE_ENUM: /* fixme:ATTR_V1ENUM */ if (is_attr(type->attrs, ATTR_V1ENUM)) *size = 2; else *size = 2; break; case TYPE_INTERFACE: case TYPE_POINTER: *size = 4; *is_ptr = 1; break; case TYPE_BASIC: switch (type_basic_get_type(type)) { case TYPE_BASIC_INT8: *size = 1; break; case TYPE_BASIC_INT16: *size = 2; break; case TYPE_BASIC_INT32: *size = 4; break; case TYPE_BASIC_INT64: *size = 8; break; case TYPE_BASIC_INT: *size = 2; break; case TYPE_BASIC_INT3264: *size = 4; break; case TYPE_BASIC_CHAR: *size = 1; break; case TYPE_BASIC_HYPER: assert((TYPE_BASIC_HYPER, 0)); case TYPE_BASIC_BYTE: *size = 1; break; case TYPE_BASIC_WCHAR: *size = 2; break; case TYPE_BASIC_ERROR_STATUS_T: case TYPE_BASIC_FLOAT: assert((TYPE_BASIC_FLOAT, 0)); case TYPE_BASIC_DOUBLE: assert((TYPE_BASIC_DOUBLE, 0)); case TYPE_BASIC_HANDLE: assert((TYPE_BASIC_HANDLE, 0)); } break; case TYPE_ARRAY: *size = 4; *is_ptr = 1; break; case TYPE_STRUCT: /* hard-coded */ if (!strcmp("LARGE_INTEGER", type_get_name(type, NAME_DEFAULT))) { *size = 8; break; } if (!strcmp("ULARGE_INTEGER", type_get_name(type, NAME_DEFAULT))) { *size = 8; break; } if (!strcmp("SIZE", type_get_name(type, NAME_DEFAULT))) { *size = 4; break; } if (!strcmp("POINT", type_get_name(type, NAME_DEFAULT))) { *size = 4; break; } if (!strcmp("POINTL", type_get_name(type, NAME_DEFAULT))) { *size = 8; break; } if (!strcmp("CY", type_get_name(type, NAME_DEFAULT))) { *size = 8; break; } /* FIXME */ if (!strcmp("IViewObjectCallback", type_get_name(type, NAME_DEFAULT))) { *size = 4; break; } assert(0); case TYPE_VOID: case TYPE_ENCAPSULATED_UNION: case TYPE_UNION: case TYPE_ALIAS: case TYPE_MODULE: case TYPE_COCLASS: case TYPE_FUNCTION: case TYPE_BITFIELD: default: assert(0); } return; } static type_t *find_identifier(const char *identifier, const type_t *cont_type, int *found_in_cont_type) { type_t *type = NULL; const var_t *field; const var_list_t *fields = NULL; *found_in_cont_type = 0; if (cont_type) { switch (type_get_type(cont_type)) { case TYPE_FUNCTION: fields = type_function_get_args(cont_type); break; case TYPE_STRUCT: fields = type_struct_get_fields(cont_type); break; case TYPE_UNION: case TYPE_ENCAPSULATED_UNION: fields = type_union_get_cases(cont_type); break; case TYPE_VOID: case TYPE_BASIC: case TYPE_ENUM: case TYPE_MODULE: case TYPE_COCLASS: case TYPE_INTERFACE: case TYPE_POINTER: case TYPE_ARRAY: case TYPE_BITFIELD: /* nothing to do */ break; case TYPE_ALIAS: /* shouldn't get here because of using type_get_type above */ assert(0); break; } } if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) if (field->name && !strcmp(identifier, field->name)) { type = field->type; *found_in_cont_type = 1; break; } if (!type) { var_t *const_var = find_const(identifier, 0); if (const_var) type = const_var->type; } return type; } typedef void(*write_expr_callback_t)(FILE *h, void *udata, const char *iden, const char *local_var_prefix); void write_expr16(FILE *h, const expr_t *e, int brackets, int toplevel, const char *toplevel_prefix, const type_t *cont_type, const char *local_var_prefix, void *udata, write_expr_callback_t callback) { switch (e->type) { case EXPR_VOID: break; case EXPR_NUM: fprintf(h, "%u", e->u.lval); break; case EXPR_HEXNUM: fprintf(h, "0x%x", e->u.lval); break; case EXPR_DOUBLE: fprintf(h, "%#.15g", e->u.dval); break; case EXPR_TRUEFALSE: if (e->u.lval == 0) fprintf(h, "FALSE"); else fprintf(h, "TRUE"); break; case EXPR_IDENTIFIER: if (toplevel && toplevel_prefix && cont_type) { int found_in_cont_type; find_identifier(e->u.sval, cont_type, &found_in_cont_type); if (found_in_cont_type) { fprintf(h, "%s%s", toplevel_prefix, e->u.sval); break; } } if (callback) { callback(h, udata, e->u.sval, local_var_prefix); } else { fprintf(h, "%s%s", local_var_prefix, e->u.sval); } break; case EXPR_STRLIT: fprintf(h, "\"%s\"", e->u.sval); break; case EXPR_WSTRLIT: fprintf(h, "L\"%s\"", e->u.sval); break; case EXPR_CHARCONST: fprintf(h, "'%s'", e->u.sval); break; case EXPR_LOGNOT: fprintf(h, "!"); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); break; case EXPR_NOT: fprintf(h, "~"); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); break; case EXPR_POS: fprintf(h, "+"); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); break; case EXPR_NEG: fprintf(h, "-"); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); break; case EXPR_ADDRESSOF: fprintf(h, "&"); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); break; case EXPR_PPTR: fprintf(h, "*"); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); break; case EXPR_CAST: fprintf(h, "("); write_type_decl(h, e->u.tref, NULL); fprintf(h, ")"); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); break; case EXPR_SIZEOF: fprintf(h, "sizeof("); write_type_decl(h, e->u.tref, NULL); fprintf(h, ")"); break; case EXPR_SHL: case EXPR_SHR: case EXPR_MOD: case EXPR_MUL: case EXPR_DIV: case EXPR_ADD: case EXPR_SUB: case EXPR_AND: case EXPR_OR: case EXPR_LOGOR: case EXPR_LOGAND: case EXPR_XOR: case EXPR_EQUALITY: case EXPR_INEQUALITY: case EXPR_GTR: case EXPR_LESS: case EXPR_GTREQL: case EXPR_LESSEQL: if (brackets) fprintf(h, "("); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); switch (e->type) { case EXPR_SHL: fprintf(h, " << "); break; case EXPR_SHR: fprintf(h, " >> "); break; case EXPR_MOD: fprintf(h, " %% "); break; case EXPR_MUL: fprintf(h, " * "); break; case EXPR_DIV: fprintf(h, " / "); break; case EXPR_ADD: fprintf(h, " + "); break; case EXPR_SUB: fprintf(h, " - "); break; case EXPR_AND: fprintf(h, " & "); break; case EXPR_OR: fprintf(h, " | "); break; case EXPR_LOGOR: fprintf(h, " || "); break; case EXPR_LOGAND: fprintf(h, " && "); break; case EXPR_XOR: fprintf(h, " ^ "); break; case EXPR_EQUALITY: fprintf(h, " == "); break; case EXPR_INEQUALITY: fprintf(h, " != "); break; case EXPR_GTR: fprintf(h, " > "); break; case EXPR_LESS: fprintf(h, " < "); break; case EXPR_GTREQL: fprintf(h, " >= "); break; case EXPR_LESSEQL: fprintf(h, " <= "); break; default: break; } write_expr16(h, e->u.ext, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); if (brackets) fprintf(h, ")"); break; case EXPR_MEMBER: if (brackets) fprintf(h, "("); if (e->ref->type == EXPR_PPTR) { write_expr16(h, e->ref->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); fprintf(h, "->"); } else { write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); fprintf(h, "."); } write_expr16(h, e->u.ext, 1, 0, toplevel_prefix, cont_type, "", udata, callback); if (brackets) fprintf(h, ")"); break; case EXPR_COND: if (brackets) fprintf(h, "("); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); fprintf(h, " ? "); write_expr16(h, e->u.ext, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); fprintf(h, " : "); write_expr16(h, e->ext2, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); if (brackets) fprintf(h, ")"); break; case EXPR_ARRAY: if (brackets) fprintf(h, "("); write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback); fprintf(h, "["); write_expr16(h, e->u.ext, 1, 1, toplevel_prefix, cont_type, local_var_prefix, udata, callback); fprintf(h, "]"); if (brackets) fprintf(h, ")"); break; } } struct args_conv_callback_udata { const var_list_t *args; }; void args_conv_callback(FILE *h, void *udata, const char *iden, const char *local_prefix) { const var_t *arg; struct args_conv_callback_udata *ud = (struct args_conv_callback_udata*)udata; LIST_FOR_EACH_ENTRY(arg, ud->args, const var_t, entry) { expr_t *iid = get_attrp(arg->attrs, ATTR_IIDIS); int is_out = is_attr(arg->attrs, ATTR_OUT); int is_in = is_attr(arg->attrs, ATTR_IN); int is_array = 0; int is_byte_out = 0; enum type_type typtyp1 = type_get_type(arg->type); type_t *typ2 = typtyp1 == TYPE_POINTER ? type_pointer_get_ref(arg->type) : NULL; enum type_type typtyp2 = typ2 ? type_get_type(typ2) : -1; if (typtyp1 == TYPE_ARRAY) { type_t *array_elem_type = type_array_get_element(arg->type); enum type_type array_elem_type_type = type_get_type(array_elem_type); if (array_elem_type_type != TYPE_VOID) { typ2 = array_elem_type; typtyp1 = array_elem_type_type; is_array = TRUE; } else { is_byte_out = TRUE; typ2 = array_elem_type; typtyp1 = array_elem_type_type; is_array = TRUE; } } if (is_out && !strcmp(arg->name, iden)) { fprintf(h, "(&%s%s)", local_prefix, iden); return; } } fprintf(h, "%s%s", local_prefix, iden); return; } enum args_conv { ARGS_CONV_DECL, ARGS_CONV_AFTER_CONV, ARGS_CONV_CALL, ARGS_CONV_MAP, ARGS_CONV_MAP_OUTARRAY, ARGS_CONV_UNMAP, ARGS_CONV_TRACE, ARGS_CONV_TRACE_ARGS, }; static void write_args_conv(FILE *h, const var_list_t *args, const char *name, enum args_conv args_conv, int is_1632) { const var_t *arg; int count = 0; int ivar_defined = FALSE; if (args_conv == ARGS_CONV_TRACE) { if (is_1632) fprintf(h, "%s", "%04x:%04x(%p)"); else fprintf(h, "%s", "%p(%04x:%04x)"); } if (args_conv == ARGS_CONV_TRACE_ARGS) { if (is_1632) fprintf(h, ", SELECTOROF(This), OFFSETOF(This), iface32"); else fprintf(h, ", This, SELECTOROF(iface16), OFFSETOF(iface16)"); } if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) { /* ATTR_IIDIS ATTR_OUT ATTR_IN */ expr_t *iid = get_attrp(arg->attrs, ATTR_IIDIS); int is_out = is_attr(arg->attrs, ATTR_OUT); int is_in = is_attr(arg->attrs, ATTR_IN); int is_array = 0; int is_byte_out = 0; enum type_type typtyp1 = type_get_type(arg->type); type_t *typ2 = typtyp1 == TYPE_POINTER ? type_pointer_get_ref(arg->type) : NULL; enum type_type typtyp2 = typ2 ? type_get_type(typ2) : -1; type_t *typ3 = typ2 && typtyp2 == TYPE_POINTER ? type_pointer_get_ref(typ2) : NULL; enum type_type typtyp3 = typ3 ? type_get_type(typ3) : -1; if (typtyp1 == TYPE_ARRAY) { type_t *array_elem_type = type_array_get_element(arg->type); enum type_type array_elem_type_type = type_get_type(array_elem_type); if (array_elem_type_type != TYPE_VOID) { typ2 = array_elem_type; typtyp1 = array_elem_type_type; is_array = TRUE; } else { is_byte_out = TRUE; typ2 = array_elem_type; typtyp1 = array_elem_type_type; is_array = TRUE; } } if (args_conv == ARGS_CONV_CALL) { if (is_out) { if (is_1632) { if (is_array) { fprintf(h, ", args32_%s", arg->name); } else { fprintf(h, ", &args32_%s", arg->name); } } else { if (is_array) { fprintf(h, ", MapLS(args16_%s)", arg->name); } else { fprintf(h, ", MapLS(&args16_%s)", arg->name); } } } else { if (is_in && is_array && !is_1632) { fprintf(h, ", MapLS(args16_%s)", arg->name); } else { fprintf(h, ", args%d_%s", is_1632 ? 32 : 16, arg->name); } } } else if (args_conv == ARGS_CONV_MAP || args_conv == ARGS_CONV_UNMAP) { type_t *map_type; const char *prefix_src; const char *prefix_dst; map_type = arg->type; if (is_1632) prefix_dst = "args32_"; else prefix_dst = "args16_"; if (is_1632) prefix_src = "args16_"; else prefix_src = ""; if (is_in && (!is_array)) { enum type_conv_map map = TYPE_CONV_MAP; if (is_out) map = TYPE_CONV_INMAP; if (args_conv == ARGS_CONV_UNMAP) map = TYPE_CONV_UNMAP; if (args_conv != ARGS_CONV_UNMAP || !is_out) { if (is_1632) { write_type_conv1632(h, map_type, prefix_src, arg->name, prefix_dst, arg->name, map); } else { write_type_conv3216(h, map_type, prefix_src, arg->name, prefix_dst, arg->name, map); } } } } else if (args_conv == ARGS_CONV_DECL) { if (is_out || (is_in && is_array)) { assert(typ2); if (is_array && !ivar_defined) { fprintf(h, " int i__;\n"); if (is_1632 || (is_in && is_array)) fprintf(h, " void *dst__;\n"); ivar_defined = 1; } /* indent */ fprintf(h, " "); if (is_1632) write_type_decl_left(h, typ2); else write_type_decl_left3216(h, typ2); /* [out] interface conversion */ if (is_array && !is_byte_out) { fprintf(h, " *args%d_%s;\n", is_1632 ? 32 : 16, arg->name); } else if (is_byte_out) { assert(is_array); fprintf(h, " *args%d_%s = ", is_1632 ? 32 : 16, arg->name); if (is_1632) { fprintf(h, "MapSL(args16_%s);\n", arg->name); } else { fprintf(h, "%s;\n", arg->name); } } else { fprintf(h, " args%d_%s = {0};\n", is_1632 ? 32 : 16, arg->name); } } else { fprintf(h, " "); if (is_1632) write_type_decl_left(h, arg->type); else write_type_decl_left3216(h, arg->type); fprintf(h, " args%d_%s;\n", is_1632 ? 32 : 16, arg->name); } } else if (args_conv == ARGS_CONV_MAP_OUTARRAY) { if (is_out || (is_in && is_array)) { assert(typ2); /* [out] interface conversion */ if (is_array && !is_byte_out) { struct args_conv_callback_udata udata = { args }; int count = 0; expr_t *e; expr_list_t *size_is = get_attrp(arg->attrs, ATTR_SIZEIS); assert(size_is); fprintf(h, " args%d_%s = ", is_1632 ? 32 : 16, arg->name); fprintf(h, " IFACE_ALLOC_ARRAY("); if (is_1632) write_type_decl_left(h, typ2); else write_type_decl_left3216(h, typ2); fprintf(h, " ,"); LIST_FOR_EACH_ENTRY(e, size_is, expr_t, entry) { write_expr16(h, e, 1, 1, NULL, NULL, is_1632 ? "args32_" : "", &udata, is_1632 ? args_conv_callback : NULL); assert(count++ == 0); } fprintf(h, " );\n"); if (is_in && is_array) { char buf2[256]; struct args_conv_callback_udata udata = { args }; int count = 0; expr_t *e; expr_list_t *len_is = get_attrp(arg->attrs, ATTR_LENGTHIS); if (!len_is) len_is = get_attrp(arg->attrs, ATTR_SIZEIS); assert(len_is); if (is_1632) { fprintf(h, " dst__ = MapSL(args16_%s);\n", arg->name); } fprintf(h, " for (i__ = 0; i__ < ("); LIST_FOR_EACH_ENTRY(e, len_is, expr_t, entry) { write_expr16(h, e, 1, 1, NULL, NULL, is_1632 ? "args32_" : "args16_", &udata, args_conv_callback); assert(count++ == 0); } fprintf(h, ") ; i__++)\n"); fprintf(h, " {\n"); fprintf(h, " "); if (!is_1632) { snprintf(buf2, 256, "args16_%s[i__]", arg->name); /* FIXME */ write_type_conv3216(h, typ2, arg->name, "[i__]", buf2, "", FALSE); } else { snprintf(buf2, 256, "args32_%s[i__]", arg->name); /* FIXME */ write_type_conv1632(h, typ2, "dst__", "", buf2, "", TYPE_CONV_MAP_ARRAY); } fprintf(h, " }\n"); /* FIXME: UNMAP */ } } } } else if (args_conv == ARGS_CONV_AFTER_CONV) { /* [out] conversion */ if (iid && is_out) { /* indent */ assert(iid->type == EXPR_IDENTIFIER); const char *iid_arg_name = iid->u.sval; const var_t *iid_arg = find_args(args, iid_arg_name); assert(iid_arg); fprintf(h, " "); /* args32_riid? args16_riid? */ if (is_1632) fprintf(h, "*(SEGPTR*)MapSL(args16_%s) = iface32_16(args32_%s, args32_%s);\n", arg->name, iid_arg_name, arg->name); else fprintf(h, "*%s = iface16_32(%s, args16_%s);\n", arg->name, iid_arg_name, arg->name); } else if (typ2 && is_out) { char buf[256]; char buf2[256]; if (is_array && !is_byte_out) { struct args_conv_callback_udata udata = { args }; int count = 0; expr_t *e; expr_list_t *len_is = get_attrp(arg->attrs, ATTR_LENGTHIS); if (!len_is) len_is = get_attrp(arg->attrs, ATTR_SIZEIS); assert(len_is); if (is_1632) { fprintf(h, " dst__ = MapSL(args16_%s);\n", arg->name); } fprintf(h, " for (i__ = 0; i__ < ("); LIST_FOR_EACH_ENTRY(e, len_is, expr_t, entry) { write_expr16(h, e, 1, 1, NULL, NULL, is_1632 ? "args32_" : "args16_", &udata, args_conv_callback); assert(count++ == 0); } fprintf(h, ") ; i__++)\n"); fprintf(h, " {\n"); fprintf(h, " "); if (is_1632) { snprintf(buf2, 256, "args32_%s[i__]", arg->name); /* FIXME */ write_type_conv3216(h, typ2, buf2, "", "dst__", "", TYPE_CONV_MAP_ARRAY); } else { snprintf(buf2, 256, "args16_%s[i__]", arg->name); /* FIXME */ write_type_conv1632(h, typ2, buf2, "", arg->name, "[i__]", FALSE); } fprintf(h, " }\n"); if (is_1632) fprintf(h, " IFACE_FREE_ARRAY(args32_%s);\n", arg->name); else fprintf(h, " IFACE_FREE_ARRAY(args16_%s);\n", arg->name); } else if (is_byte_out) { } else { if (is_1632) { fprintf(h, " if (args16_%s)\n {\n ", arg->name); write_type_conv3216(h, typ2, "args32_", arg->name, "args16_", arg->name, is_in ? TYPE_CONV_OUTMAP_MAPSL : TYPE_CONV_MAP_MAPSL); fprintf(h, " }\n", arg->name); } else { fprintf(h, " if (%s)\n {\n ", arg->name); write_type_conv1632(h, typ2, "args16_", arg->name, "*", arg->name, is_in ? TYPE_CONV_OUTMAP : TYPE_CONV_MAP); fprintf(h, " }\n", arg->name); } } } } else if (args_conv == ARGS_CONV_TRACE || args_conv == ARGS_CONV_TRACE_ARGS) { int size, is_ptr; int is_iid = typ2 && type_get_name(typ2, NAME_DEFAULT) && !strcmp(type_get_name(typ2, NAME_DEFAULT), "IID"); get_type_size16(arg->type, &size, &is_ptr); if (args_conv == ARGS_CONV_TRACE_ARGS) { if (!is_out && is_iid) { fprintf(h, ", debugstr_guid(%s%s)", is_1632 ? "args32_" : "", arg->name); } else { fprintf(h, ", %s%s", is_1632 ? "args16_" : "", arg->name); } } else { if (!is_out && is_iid) { fprintf(h, ",%s", "%s"); } else if (is_1632 && (is_ptr || is_out)) { fprintf(h, ",%s", "%08x"); } else { if (is_ptr || is_out) { fprintf(h, ",%s", "%p"); } else if (size == 8) { fprintf(h, ",%s", "%016llx"); } else { fprintf(h, ",%s", "%08x"); } } } } else { assert(0); } count++; } } static int indentation; static void write_type_left3216(FILE *h, type_t *t, enum name_type name_type, int declonly, const char *typ_prefix) { const char *name; if (!h) return; name = type_get_name(t, name_type); if (is_attr(t->attrs, ATTR_CONST) && (type_is_alias(t) || !is_ptr(t))) fprintf(h, "const "); if (type_is_alias(t)) fprintf(h, "%s%s", typ_prefix, t->name); else { switch (type_get_type_detect_alias(t)) { case TYPE_ENUM: if (!declonly && t->defined && !t->written) { assert(0); } else fprintf(h, "enum %s%s", t->name ? typ_prefix : "", name ? name : ""); break; case TYPE_STRUCT: case TYPE_ENCAPSULATED_UNION: if (!declonly && t->defined && !t->written) { assert(0); } else fprintf(h, "struct %s%s", t->name ? typ_prefix : "", name ? name : ""); break; case TYPE_UNION: if (!declonly && t->defined && !t->written) { assert(0); } else fprintf(h, "union %s%s", t->name ? typ_prefix : "", t->name ? t->name : ""); break; case TYPE_POINTER: fprintf(h, "SEGPTR"); //write_type_left3216(h, type_pointer_get_ref(t), name_type, declonly, typ_prefix); ////fprintf(h, "%s*", needs_space_after(type_pointer_get_ref(t)) ? " " : ""); //if (is_attr(t->attrs, ATTR_CONST)) fprintf(h, "const "); break; case TYPE_ARRAY: fprintf(h, "SEGPTR"); //if (t->name && type_array_is_decl_as_ptr(t)) // fprintf(h, "%s%s", typ_prefix, t->name); //else //{ // write_type_left3216(h, type_array_get_element(t), name_type, declonly, typ_prefix); // if (type_array_is_decl_as_ptr(t)) // fprintf(h, "%s", needs_space_after(type_array_get_element(t)) ? " " : ""); //} break; case TYPE_BASIC: if (type_basic_get_type(t) != TYPE_BASIC_INT32 && type_basic_get_type(t) != TYPE_BASIC_INT64 && type_basic_get_type(t) != TYPE_BASIC_HYPER) { if (type_basic_get_sign(t) < 0) fprintf(h, "signed "); else if (type_basic_get_sign(t) > 0) fprintf(h, "unsigned "); } switch (type_basic_get_type(t)) { case TYPE_BASIC_INT8: fprintf(h, "small"); break; case TYPE_BASIC_INT16: fprintf(h, "short"); break; case TYPE_BASIC_INT: fprintf(h, "int"); break; case TYPE_BASIC_INT3264: fprintf(h, "__int3264"); break; case TYPE_BASIC_BYTE: fprintf(h, "byte"); break; case TYPE_BASIC_CHAR: fprintf(h, "char"); break; case TYPE_BASIC_WCHAR: fprintf(h, "wchar_t"); break; case TYPE_BASIC_FLOAT: fprintf(h, "float"); break; case TYPE_BASIC_DOUBLE: fprintf(h, "double"); break; case TYPE_BASIC_ERROR_STATUS_T: fprintf(h, "error_status_t"); break; case TYPE_BASIC_HANDLE: fprintf(h, "handle_t"); break; case TYPE_BASIC_INT32: if (type_basic_get_sign(t) > 0) fprintf(h, "ULONG"); else fprintf(h, "LONG"); break; case TYPE_BASIC_INT64: if (type_basic_get_sign(t) > 0) fprintf(h, "UINT64"); else fprintf(h, "INT64"); break; case TYPE_BASIC_HYPER: if (type_basic_get_sign(t) > 0) fprintf(h, "MIDL_uhyper"); else fprintf(h, "hyper"); break; } break; case TYPE_INTERFACE: case TYPE_MODULE: case TYPE_COCLASS: fprintf(h, "%s%s", typ_prefix, t->name); break; case TYPE_VOID: fprintf(h, "void"); break; case TYPE_BITFIELD: write_type_left3216(h, type_bitfield_get_field(t), name_type, declonly, typ_prefix); break; case TYPE_ALIAS: case TYPE_FUNCTION: /* handled elsewhere */ assert(0); break; } } } static int is_pascal(const char *cconv) { if (!cconv) return FALSE; return !strcmp(cconv, "__stdcall"); } static void write_type_decl_left3216(FILE *f, type_t *t) { write_type_left3216(f, t, NAME_DEFAULT, TRUE, "TYP16_"); } static void write_32_16_func(FILE *header, const statement_t *stmt, const type_t *iface, const char *name) { const var_t *func = stmt->u.var; if (!is_callas(func->attrs)) { const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); type_t *ret_type = type_function_get_rettype(func->type); fprintf(header, "#ifndef IFS3216_OVERWRITE_%s_%s\n", name, get_name(func)); if (!callconv) callconv = "STDMETHODCALLTYPE"; write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " %s %s_32_16_%s(%s *This", callconv, name, get_name(func), name); if (type_get_function_args(func->type)) { fprintf(header, ", "); write_args(header, type_get_function_args(func->type), name, 0, 0); } fprintf(header, ")\n"); fprintf(header, "{\n"); fprintf(header, " SEGPTR iface16 = get_interface16(This);\n"); if (type_get_type(ret_type) != TYPE_VOID) { fprintf(header, " "); write_type_decl_left3216(header, type_function_get_rettype(func->type)); fprintf(header, " result__ = {0};\n"); fprintf(header, " "); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " result32__ = {0};\n"); } write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_DECL, FALSE); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_MAP, FALSE); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_MAP_OUTARRAY, FALSE); fprintf(header, " TRACE(\"("); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_TRACE, FALSE); fprintf(header, ")\\n\""); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_TRACE_ARGS, FALSE); fprintf(header, ");\n"); fprintf(header, " "); ret_type = type_function_get_rettype(func->type); if (type_get_type(ret_type) != TYPE_VOID) { fprintf(header, "result__ = ("); write_type_decl_left3216(header, ret_type); fprintf(header, ")"); } fprintf(header, "%s16_%s(iface16", name, get_name(func)); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_CALL, FALSE); fprintf(header, ");\n"); if (type_get_type(ret_type) != TYPE_VOID) { write_type_conv1632(header, ret_type, "", "result__", "", "result32__", TYPE_CONV_MAP); } write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_UNMAP, FALSE); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_AFTER_CONV, FALSE); if (type_get_type(ret_type) != TYPE_VOID) { fprintf(header, " return result32__;\n"); } fprintf(header, "}\n"); fprintf(header, "#endif\n"); } } static void write_16_32_func(FILE *header, const statement_t *stmt, const type_t *iface, const char *name) { const var_t *func = stmt->u.var; const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); type_t *ret_type = type_function_get_rettype(func->type); fprintf(header, "#ifndef IFS1632_OVERWRITE_%s_%s\n", name, get_name(func)); if (!callconv) callconv = "STDMETHODCALLTYPE"; write_type_decl_left(header, type_function_get_rettype(func->type)); if (!is_pascal(callconv)) { callconv = "CDECL"; } fprintf(header, " %s %s_16_32_%s(SEGPTR This", callconv, name, get_name(func)); if (type_get_function_args(func->type)) { fprintf(header, ", "); write_args1632(header, type_get_function_args(func->type), name, 0); } fprintf(header, ")\n"); fprintf(header, "{\n"); fprintf(header, " %s *iface32 = (%s*)get_interface32(This);\n", name, name); if (type_get_type(ret_type) != TYPE_VOID) { fprintf(header, " "); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " result__ = {0};\n"); fprintf(header, " "); write_type_decl_left3216(header, type_function_get_rettype(func->type)); fprintf(header, " result16__ = {0};\n"); } write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_DECL, TRUE); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_MAP, TRUE); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_MAP_OUTARRAY, TRUE); fprintf(header, " TRACE(\"("); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_TRACE, TRUE); fprintf(header, ")\\n\""); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_TRACE_ARGS, TRUE); fprintf(header, ");\n"); fprintf(header, " "); if (type_get_type(ret_type) != TYPE_VOID) { fprintf(header, "result__ = ("); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, ")"); } fprintf(header, "iface32->lpVtbl->%s(iface32", get_name(func)); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_CALL, TRUE); fprintf(header, ");\n"); if (type_get_type(ret_type) != TYPE_VOID) { write_type_conv3216(header, ret_type, "", "result__", "", "result16__", TYPE_CONV_MAP); } write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_UNMAP, TRUE); write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_AFTER_CONV, TRUE); if (type_get_type(ret_type) != TYPE_VOID) { fprintf(header, " return result16__;\n"); } fprintf(header, "}\n"); fprintf(header, "#endif\n"); } static void do_write_c_method_def(FILE *header, const type_t *iface, const char *name) { const statement_t *stmt; int first_iface = 1; if (type_iface_get_inherit(iface)) do_write_c_method_def(header, type_iface_get_inherit(iface), name); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (first_iface) { fprintf(header, "/*** %s methods ***/\n", iface->name); first_iface = 0; } if (!is_callas(func->attrs)) { write_16_32_func(header, stmt, iface, name); write_32_16_func(header, stmt, iface, name); } } } static int filter_iface(const char *name) { return 1; } static void write_thunk_1632_3216(FILE *file, type_t *iface) { if (filter_iface(iface->c_name)) { /* fprintf(file, "typedef interface %s %s;\n", iface->c_name, iface->c_name); */ do_write_c_method_def(file, iface, iface->c_name); } } static void write_guid(FILE *f, const UUID *uuid) { if (!uuid) return; fprintf(f, "{0x%08x, 0x%04x, 0x%04x, {0x%02x,0x%02x, 0x%02x," "0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}}", uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7]); } static void do_write_vtable32(FILE *header, const type_t *iface, const char *name) { const statement_t *stmt; int first_iface = 1; if (type_iface_get_inherit(iface)) do_write_vtable32(header, type_iface_get_inherit(iface), name); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (first_iface) { fprintf(header, " /*** %s methods ***/\n", iface->name); first_iface = 0; } if (!is_callas(func->attrs)) { fprintf(header, " %s_32_16_%s,\n", name, get_name(func)); } } } static void write_args16_str(FILE *header, const var_list_t *args) { const var_t *arg; fprintf(header, "s"); if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) { int size, is_ptr; get_type_size16(arg->type, &size, &is_ptr); if (size == 2) { fprintf(header, "w"); } if (size == 4) { if (is_ptr) fprintf(header, "s"); else fprintf(header, "l"); } if (size == 8) { fprintf(header, "ll"); } } return NULL; } static void do_write_vtable16(FILE *header, const type_t *iface, const char *name) { const statement_t *stmt; int first_iface = 1; if (type_iface_get_inherit(iface)) do_write_vtable16(header, type_iface_get_inherit(iface), name); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (first_iface) { fprintf(header, " /*** %s methods ***/\n", iface->name); first_iface = 0; } if (!is_callas(func->attrs)) { const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); fprintf(header, " {"); fprintf(header, "%s_16_32_%s,\"%s::%s\",\"", name, get_name(func), name, get_name(func)); write_args16_str(header, type_get_function_args(func->type)); fprintf(header, "\""); if (is_pascal(callconv)) fprintf(header, ",1"); fprintf(header, "},\n"); } } } static type_t **sort_interfaces(const statement_list_t *stmts, int *count); static void write_vtable(FILE *file, const statement_list_t *stmts) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry) { switch (stmt->type) { case STMT_TYPE: if (type_get_type(stmt->u.type) == TYPE_INTERFACE) { if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE)) { if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE)) { const type_t *type = stmt->u.type; if (!filter_iface(type->c_name)) continue; fprintf(file, "%sVtbl %s_vtbl =\n{\n", type->c_name, type->c_name); do_write_vtable32(file, type, type->c_name); fprintf(file, "};\n"); fprintf(file, "%s16Vtbl %s_vtbl16;\n", type->c_name, type->c_name); fprintf(file, "vtbl_entry %s_vtbl16_entries[] =\n{\n", type->c_name); do_write_vtable16(file, type, type->c_name); fprintf(file, " {0}\n};\n"); } } } break; } } } static int cmp_iid( const void *ptr1, const void *ptr2 ) { const type_t * const *iface1 = ptr1; const type_t * const *iface2 = ptr2; const UUID *uuid1 = get_attrp( (*iface1)->attrs, ATTR_UUID ); const UUID *uuid2 = get_attrp( (*iface2)->attrs, ATTR_UUID ); return memcmp( uuid1, uuid2, sizeof(UUID) ); } static void build_iface_list( const statement_list_t *stmts, type_t **ifaces[], int *count ) { const statement_t *stmt; if (!stmts) return; LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE) { type_t *iface = stmt->u.type; if (!get_attrp(iface->attrs, ATTR_UUID)) continue; *ifaces = xrealloc( *ifaces, (*count + 1) * sizeof(**ifaces) ); (*ifaces)[(*count)++] = iface; } } } static type_t **sort_interfaces( const statement_list_t *stmts, int *count ) { type_t **ifaces = NULL; *count = 0; build_iface_list( stmts, &ifaces, count ); qsort( ifaces, *count, sizeof(*ifaces), cmp_iid ); return ifaces; } static void write_vtable2(FILE *file, const statement_list_t *stmts) { const statement_t *stmt; int count; type_t **types; types = sort_interfaces(stmts, &count); fprintf(file, "interface_entry interfaces[] =\n{\n"); for (int i = 0; i < count; i++) { if (type_get_type(types[i]) == TYPE_INTERFACE) { if (is_object(types[i]) || is_attr(types[i]->attrs, ATTR_DISPINTERFACE)) { if (is_object(types[i]) || is_attr(types[i]->attrs, ATTR_DISPINTERFACE)) { const type_t *type = types[i]; if (!filter_iface(type->c_name)) continue; const UUID *uuid = get_attrp(type->attrs, ATTR_UUID); fprintf(file, " {\n "); write_guid(file, uuid); fprintf(file, ",\n &%s_vtbl,\n", type->c_name); fprintf(file, " %s_vtbl16_entries,\n", type->c_name); fprintf(file, " &%s_vtbl16\n", type->c_name); fprintf(file, " },\n"); } } } } fprintf(file, "};\n"); fprintf(file, "size_t interfaces_count = %d;\n", count); } static void write_thunks_1632_3216(FILE *file, const statement_list_t *stmts) { const statement_t *stmt; fprintf(file, "#include \"ifs_thunk.h\"\n"); if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry) { switch (stmt->type) { case STMT_TYPE: if (type_get_type(stmt->u.type) == TYPE_INTERFACE) { if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE)) write_thunk_1632_3216(file, stmt->u.type); } break; } } } static void do_write_header_def(FILE *header, const type_t *iface, const char *name) { const statement_t *stmt; int first_iface = 1; if (type_iface_get_inherit(iface)) do_write_header_def(header, type_iface_get_inherit(iface), name); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (first_iface) { fprintf(header, "/*** %s methods ***/\n", iface->name); first_iface = 0; } if (!is_callas(func->attrs)) { fprintf(header, " SEGPTR %s;\n", get_name(func)); } } } static int is_inherited_method(const type_t *iface, const var_t *func) { while ((iface = type_iface_get_inherit(iface))) { const statement_t *stmt; STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *funccmp = stmt->u.var; if (!is_callas(func->attrs)) { char inherit_name[256]; /* compare full name including property prefix */ strcpy(inherit_name, get_name(funccmp)); if (!strcmp(inherit_name, get_name(func))) return 1; } } } return 0; } static int is_override_method(const type_t *iface, const type_t *child, const var_t *func) { if (iface == child) return 0; do { const statement_t *stmt; STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(child)) { const var_t *funccmp = stmt->u.var; if (!is_callas(func->attrs)) { char inherit_name[256]; /* compare full name including property prefix */ strcpy(inherit_name, get_name(funccmp)); if (!strcmp(inherit_name, get_name(func))) return 1; } } } while ((child = type_iface_get_inherit(child)) && child != iface); return 0; } static int is_aggregate_return(const var_t *func) { enum type_type type = type_get_type(type_function_get_rettype(func->type)); return type == TYPE_STRUCT || type == TYPE_UNION || type == TYPE_COCLASS || type == TYPE_INTERFACE; } static char *get_vtbl_entry_name(const type_t *iface, const var_t *func) { static char buff[255]; if (is_inherited_method(iface, func)) sprintf(buff, "%s_%s", iface->name, get_name(func)); else sprintf(buff, "%s", get_name(func)); return buff; } static void write_forward16(FILE *header, type_t *iface) { fprintf(header, "#ifndef __%s16_FWD_DEFINED__\n", iface->c_name); fprintf(header, "#define __%s16_FWD_DEFINED__\n", iface->c_name); fprintf(header, "typedef interface %s16 %s16;\n", iface->c_name, iface->c_name); fprintf(header, "#endif\n\n" ); } static void write_forward_decls16(FILE *header, const statement_list_t *stmts) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { switch (stmt->type) { case STMT_TYPE: if (type_get_type(stmt->u.type) == TYPE_INTERFACE) { if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE)) write_forward16(header, stmt->u.type); } else if (type_get_type(stmt->u.type) == TYPE_COCLASS) /*write_coclass_forward(header, stmt->u.type);*/; break; case STMT_TYPEREF: case STMT_IMPORTLIB: /* not included in header */ break; case STMT_IMPORT: case STMT_TYPEDEF: case STMT_MODULE: case STMT_CPPQUOTE: case STMT_PRAGMA: case STMT_DECLARATION: /* not processed here */ break; case STMT_LIBRARY: /*write_forward_decls(header, stmt->u.lib->stmts);*/ break; } } } static void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name) { write_type_v(f, t, field, FALSE, name); } static void write_fields16(FILE *h, var_list_t *fields) { unsigned nameless_struct_cnt = 0, nameless_struct_i = 0, nameless_union_cnt = 0, nameless_union_i = 0; const char *name; char buf[32]; var_t *v; if (!fields) return; LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) { if (!v || !v->type) continue; switch(type_get_type_detect_alias(v->type)) { case TYPE_STRUCT: case TYPE_ENCAPSULATED_UNION: nameless_struct_cnt++; break; case TYPE_UNION: nameless_union_cnt++; break; default: ; } } LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) { if (!v || !v->type) continue; /* indent(h, 0); */ name = v->name; switch(type_get_type_detect_alias(v->type)) { case TYPE_STRUCT: case TYPE_ENCAPSULATED_UNION: if(!v->name) { fprintf(h, "__C89_NAMELESS "); if(nameless_struct_cnt == 1) { name = "__C89_NAMELESSSTRUCTNAME"; }else if(nameless_struct_i < 5 /* # of supporting macros */) { sprintf(buf, "__C89_NAMELESSSTRUCTNAME%d", ++nameless_struct_i); name = buf; } } break; case TYPE_UNION: if(!v->name) { fprintf(h, "__C89_NAMELESS "); if(nameless_union_cnt == 1) { name = "__C89_NAMELESSUNIONNAME"; }else if(nameless_union_i < 8 /* # of supporting macros */ ) { sprintf(buf, "__C89_NAMELESSUNIONNAME%d", ++nameless_union_i); name = buf; } } break; default: ; } write_type_def_or_decl(h, v->type, TRUE, name); fprintf(h, ";\n"); } } static void write_enums16(FILE *h, var_list_t *enums, const char *enum_name) { var_t *v; if (!enums) return; LIST_FOR_EACH_ENTRY( v, enums, var_t, entry ) { if (v->name) { if(!enum_name) fprintf(h, "%s16", get_name(v)); else fprintf(h, "%s16_%s16", enum_name, get_name(v)); if (v->eval) { fprintf(h, " = "); write_expr(h, v->eval, 0, 1, NULL, NULL, ""); } } if (list_next( enums, &v->entry )) fprintf(h, ",\n"); } fprintf(h, "\n"); } static void write_type_left16(FILE *h, type_t *t, enum name_type name_type, int declonly) { const char *name; if (!h) return; name = type_get_name(t, name_type); switch (type_get_type_detect_alias(t)) { case TYPE_ENUM: if (is_attr(t->attrs, ATTR_CONST) && (type_is_alias(t) || !is_ptr(t))) fprintf(h, "const "); if (!declonly && t->defined && !t->written) { if (name) fprintf(h, "enum %s16 {\n", name); else fprintf(h, "enum {\n"); t->written = TRUE; write_enums16(h, type_enum_get_values(t), is_global_namespace(t->namespace) ? NULL : t->name); fprintf(h, "}"); } else fprintf(h, "enum %s16", name ? name : ""); return; case TYPE_POINTER: if (is_attr(t->attrs, ATTR_CONST) && (type_is_alias(t) || !is_ptr(t))) fprintf(h, "const "); write_type_left16(h, type_pointer_get_ref(t), name_type, declonly); fprintf(h, "%s*", needs_space_after(type_pointer_get_ref(t)) ? " " : ""); if (is_attr(t->attrs, ATTR_CONST)) fprintf(h, "const "); return; case TYPE_INTERFACE: case TYPE_MODULE: case TYPE_COCLASS: if (is_attr(t->attrs, ATTR_CONST) && (type_is_alias(t) || !is_ptr(t))) fprintf(h, "const "); fprintf(h, "%s16", t->name); return; case TYPE_STRUCT: if (is_attr(t->attrs, ATTR_CONST) && (type_is_alias(t) || !is_ptr(t))) fprintf(h, "const "); if (!declonly && t->defined && !t->written) { if (name) fprintf(h, "struct %s16 {\n", name); else fprintf(h, "struct {\n"); t->written = TRUE; if (type_get_type(t) != TYPE_STRUCT) write_fields16(h, type_encapsulated_union_get_fields(t)); else write_fields16(h, type_struct_get_fields(t)); //indent(h, -1); fprintf(h, "}"); } else { if (name) fprintf(h, "struct %s16", name); else fprintf(h, "struct "); } return; } write_type_left(h, t, name_type, declonly); } static int is_object_interface = 0; static void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const char *name) { type_t *pt = NULL; int ptr_level = 0; if (!h) return; if (t) { for (pt = t; is_ptr(pt); pt = type_pointer_get_ref(pt), ptr_level++) ; if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) { int i; const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV); if (!callconv && is_object_interface) callconv = "STDMETHODCALLTYPE"; if (is_attr(pt->attrs, ATTR_INLINE)) fprintf(h, "inline "); write_type_left16(h, type_function_get_rettype(pt), NAME_DEFAULT, declonly); fputc(' ', h); if (ptr_level) fputc('(', h); if (callconv) fprintf(h, "%s ", callconv); for (i = 0; i < ptr_level; i++) fputc('*', h); } else write_type_left16(h, t, NAME_DEFAULT, declonly); } if (name) fprintf(h, "%s%s16", !t || needs_space_after(t) ? " " : "", name ); if (t) { if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) { const var_list_t *args = type_function_get_args(pt); if (ptr_level) fputc(')', h); fputc('(', h); if (args) write_args(h, args, NULL, 0, FALSE); else fprintf(h, "void"); fputc(')', h); } else write_type_right(h, t, is_field); } } static void write_type_def_or_decl16(FILE *f, type_t *t, int field, const char *name) { write_type_v(f, t, field, FALSE, name); } static void write_typedef16(FILE *header, type_t *type) { 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) return; fprintf(header, "typedef "); write_type_def_or_decl16(header, type_alias_get_aliasee(type), FALSE, type->name); fprintf(header, ";\n"); } static void write_method_macro16(FILE *header, const type_t *iface, const type_t *child, const char *name) { const statement_t *stmt; int first_iface = 1; if (type_iface_get_inherit(iface)) write_method_macro16(header, type_iface_get_inherit(iface), child, name); STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) { const var_t *func = stmt->u.var; if (first_iface) { fprintf(header, "/*** %s methods ***/\n", iface->name); first_iface = 0; } if (is_override_method(iface, child, func)) continue; if (!is_callas(func->attrs)) { const var_t *arg; int args_size = 2; const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV); int reverse = is_pascal(callconv); fprintf(header, "static "); write_type_decl_left(header, type_function_get_rettype(func->type)); fprintf(header, " %s16_%s(SEGPTR This", name, get_name(func)); if (type_get_function_args(func->type)) { LIST_FOR_EACH_ENTRY(arg, type_get_function_args(func->type), const var_t, entry) { int size, is_ptr; get_type_size16(arg->type, &size, &is_ptr); if (size == 4) { const char *n = type_get_name(arg->type, NAME_DEFAULT); /* hard-coded */ if (n && !strcmp(n, "SIZE")) { fprintf(header, ",SIZE16 %s", arg->name); } else if (n && !strcmp(n, "POINT")) { fprintf(header, ",POINT16 %s", arg->name); } else { fprintf(header, ",DWORD %s", arg->name); } args_size += 2; } else if (size == 8) { const char *n = type_get_name(arg->type, NAME_DEFAULT); /* hard-coded */ if (n && !strcmp(n, "POINTL")) { fprintf(header, ",POINTL %s", arg->name); } else if (n && !strcmp(n, "CY")) { fprintf(header, ",CY %s", arg->name); } else { fprintf(header, ",ULARGE_INTEGER %s", arg->name); } args_size += 4; } else { fprintf(header, ",WORD %s", arg->name); args_size++; } } } fprintf(header, ")\n{\n"); fprintf(header, " WORD args[] = "); if (is_aggregate_return(func)) { fprintf(header, "%s_%s_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support\n", name, get_name(func)); continue; } if (reverse) { fprintf(header, "{"); } else { fprintf(header, "{LOWORD(%s)", "This"); fprintf(header, ", HIWORD(%s)", "This"); } if (type_get_function_args(func->type)) { #define LIST_FOR_EACH_ENTRY_REV2(reverse, elem, list, type, field) \ for ((elem) = (reverse) ? LIST_ENTRY((list)->prev, type, field) : LIST_ENTRY((list)->next, type, field); \ &(elem)->field != (list); \ (elem) = (reverse) ? LIST_ENTRY((elem)->field.prev, type, field) : LIST_ENTRY((elem)->field.next, type, field)) LIST_FOR_EACH_ENTRY_REV2(reverse, arg, type_get_function_args(func->type), const var_t, entry) { int size, is_ptr; get_type_size16(arg->type, &size, &is_ptr); if (!reverse) { fprintf(header, ", "); } if (size == 4) { const char *n = type_get_name(arg->type, NAME_DEFAULT); /* hard-coded */ if (n && !strcmp(n, "SIZE")) { fprintf(header, "%s.cx", arg->name); fprintf(header, ", %s.cy", arg->name); } else if (n && !strcmp(n, "POINT")) { fprintf(header, "%s.x", arg->name); fprintf(header, ", %s.y", arg->name); } else { fprintf(header, "LOWORD(%s)", arg->name); fprintf(header, ", HIWORD(%s)", arg->name); } } else if (size == 8) { const char *n = type_get_name(arg->type, NAME_DEFAULT); /* hard-coded */ if (n && !strcmp(n, "POINTL")) { fprintf(header, "LOWORD(%s.x)", arg->name); fprintf(header, ", HIWORD(%s.x)", arg->name); fprintf(header, ", LOWORD(%s.y)", arg->name); fprintf(header, ", HIWORD(%s.y)", arg->name); } else if (n && !strcmp(n, "CY")) { fprintf(header, "\n#if defined(NONAMELESSUNION) || defined(NONAMELESSSTRUCT)\n", arg->name); fprintf(header, "LOWORD(%s.DUMMYSTRUCTNAME.Lo)", arg->name); fprintf(header, ", HIWORD(%s.DUMMYSTRUCTNAME.Lo)", arg->name); fprintf(header, ", LOWORD(%s.DUMMYSTRUCTNAME.Hi)", arg->name); fprintf(header, ", HIWORD(%s.DUMMYSTRUCTNAME.Hi)", arg->name); fprintf(header, "\n#else\n", arg->name); fprintf(header, "LOWORD(%s.Lo)", arg->name); fprintf(header, ", HIWORD(%s.Lo)", arg->name); fprintf(header, ", LOWORD(%s.Hi)", arg->name); fprintf(header, ", HIWORD(%s.Hi)", arg->name); fprintf(header, "\n#endif\n", arg->name); } else { fprintf(header, "LOWORD(%s.u.LowPart)", arg->name); fprintf(header, ", HIWORD(%s.u.LowPart)", arg->name); fprintf(header, ", LOWORD(%s.u.HighPart)", arg->name); fprintf(header, ", HIWORD(%s.u.HighPart)", arg->name); } } else { fprintf(header, "%s", arg->name); } if (reverse) { fprintf(header, ", "); } } } if (reverse) { fprintf(header, "LOWORD(%s)", "This"); fprintf(header, ", HIWORD(%s)", "This"); } fprintf(header, "};\n"); fprintf(header, " DWORD res;\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); if (type_get_type(type_function_get_rettype(func->type)) != TYPE_VOID) { fprintf(header, " return res;\n"); } fprintf(header, "}\n\n"); } } } static void write_header16_decl(FILE *file, type_t *iface) { int dispinterface = is_attr(iface->attrs, ATTR_DISPINTERFACE); const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); type_t *type; const statement_t *stmt; const statement_list_t *stmts = type_iface_get_stmts(iface); if (!filter_iface(iface->c_name)) return; if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry) { switch (stmt->type) { case STMT_TYPEDEF: { const type_list_t *type_entry = stmt->u.type_list; for (; type_entry; type_entry = type_entry->next) write_typedef16(file, type_entry->type); break; } } } fprintf(file, "typedef struct %s16Vtbl\n{\n", iface->c_name); do_write_header_def(file, iface, iface->c_name); fprintf(file, "} %s16Vtbl;\n", iface->c_name); fprintf(file, "typedef struct %s16\n{\n /* %s16Vtbl* */SEGPTR lpVtbl;\n", iface->c_name, iface->c_name); fprintf(file, "} %s16;\n", iface->c_name); type = dispinterface ? type_iface_get_inherit(iface) : iface; write_method_macro16(file, type, type, iface->c_name); } static void write_header16_decls(FILE *file, const statement_list_t *stmts) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry) { switch (stmt->type) { case STMT_TYPE: if (type_get_type(stmt->u.type) == TYPE_INTERFACE) { if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE)) { if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE)) write_header16_decl(file, stmt->u.type); } } break; } } } void write_relay16(const statement_list_t *stmts) { FILE *file; if (!do_relay16) return; if (!(file = fopen(relay16_name, "w"))) { error("Could not open %s for output\n", relay16_name); return; } fprintf(file, "/*** Autogenerated by WIDL %s from %s - Do not edit ***/\n\n", PACKAGE_VERSION, input_name); if (strendswith(relay16_name, ".h")) { fprintf(file, "#ifndef __%s__\n", header_token); fprintf(file, "#define __%s__\n\n", header_token); write_forward_decls16(file, stmts); write_header16_decls(file, stmts); fprintf(file, "#endif /* __%s__ */\n", header_token); } else { write_thunks_1632_3216(file, stmts); write_vtable(file, stmts); write_vtable2(file, stmts); } } ================================================ FILE: widl/server.c ================================================ /* * IDL Compiler * * Copyright 2005-2006 Eric Kohl * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" #include "typegen.h" static FILE* server; static int indent = 0; static void print_server(const char *format, ...) __attribute__((format (printf, 1, 2))); static void print_server(const char *format, ...) { va_list va; va_start(va, format); print(server, indent, format, va); va_end(va); } static void write_function_stub(const type_t *iface, const var_t *func, unsigned int proc_offset) { const var_t *var; unsigned char explicit_fc, implicit_fc; int has_full_pointer = is_full_pointer_function(func); const var_t *handle_var = get_func_handle_var( iface, func, &explicit_fc, &implicit_fc ); if (is_interpreted_func( iface, func )) return; print_server("struct __frame_%s_%s\n{\n", iface->name, get_name(func)); indent++; print_server("__DECL_EXCEPTION_FRAME\n"); print_server("MIDL_STUB_MESSAGE _StubMsg;\n"); /* Declare arguments */ declare_stub_args(server, indent, func); indent--; print_server("};\n\n"); print_server("static void __finally_%s_%s(", iface->name, get_name(func)); fprintf(server," struct __frame_%s_%s *__frame )\n{\n", iface->name, get_name(func)); indent++; write_remoting_arguments(server, indent, func, "__frame->", PASS_OUT, PHASE_FREE); if (!is_void(type_function_get_rettype(func->type))) write_remoting_arguments(server, indent, func, "__frame->", PASS_RETURN, PHASE_FREE); if (has_full_pointer) write_full_pointer_free(server, indent, func); indent--; print_server("}\n\n"); print_server("void __RPC_STUB %s_%s( PRPC_MESSAGE _pRpcMessage )\n", iface->name, get_name(func)); /* write the functions body */ fprintf(server, "{\n"); indent++; print_server("struct __frame_%s_%s __f, * const __frame = &__f;\n", iface->name, get_name(func)); if (has_out_arg_or_return(func)) print_server("RPC_STATUS _Status;\n"); fprintf(server, "\n"); print_server("NdrServerInitializeNew(\n"); indent++; print_server("_pRpcMessage,\n"); print_server("&__frame->_StubMsg,\n"); print_server("&%s_StubDesc);\n", iface->name); indent--; fprintf(server, "\n"); print_server( "RpcExceptionInit( __server_filter, __finally_%s_%s );\n", iface->name, get_name(func)); write_parameters_init(server, indent, func, "__frame->"); if (explicit_fc == FC_BIND_PRIMITIVE) { print_server("__frame->%s = _pRpcMessage->Handle;\n", handle_var->name); fprintf(server, "\n"); } print_server("RpcTryFinally\n"); print_server("{\n"); indent++; print_server("RpcTryExcept\n"); print_server("{\n"); indent++; if (has_full_pointer) write_full_pointer_init(server, indent, func, TRUE); if (type_get_function_args(func->type)) { print_server("if ((_pRpcMessage->DataRepresentation & 0x0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION)\n"); indent++; print_server("NdrConvert(&__frame->_StubMsg, (PFORMAT_STRING)&__MIDL_ProcFormatString.Format[%u]);\n", proc_offset); indent--; fprintf(server, "\n"); /* unmarshall arguments */ write_remoting_arguments(server, indent, func, "__frame->", PASS_IN, PHASE_UNMARSHAL); } print_server("if (__frame->_StubMsg.Buffer > __frame->_StubMsg.BufferEnd)\n"); print_server("{\n"); indent++; print_server("RpcRaiseException(RPC_X_BAD_STUB_DATA);\n"); indent--; print_server("}\n"); indent--; print_server("}\n"); print_server("RpcExcept(RPC_BAD_STUB_DATA_EXCEPTION_FILTER)\n"); print_server("{\n"); indent++; print_server("RpcRaiseException(RPC_X_BAD_STUB_DATA);\n"); indent--; print_server("}\n"); print_server("RpcEndExcept\n"); fprintf(server, "\n"); /* Assign 'out' arguments */ assign_stub_out_args(server, indent, func, "__frame->"); /* Call the real server function */ print_server("%s%s%s", is_void(type_function_get_rettype(func->type)) ? "" : "__frame->_RetVal = ", prefix_server, get_name(func)); if (type_get_function_args(func->type)) { int first_arg = 1; fprintf(server, "(\n"); indent++; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) { if (first_arg) first_arg = 0; else fprintf(server, ",\n"); if (is_context_handle(var->type)) { /* if the context_handle attribute appears in the chain of types * without pointers being followed, then the context handle must * be direct, otherwise it is a pointer */ const char *ch_ptr = is_aliaschain_attr(var->type, ATTR_CONTEXTHANDLE) ? "*" : ""; print_server("("); write_type_decl_left(server, var->type); fprintf(server, ")%sNDRSContextValue(__frame->%s)", ch_ptr, var->name); } else { print_server("%s__frame->%s", is_array(var->type) && !type_array_is_decl_as_ptr(var->type) ? "*" : "", var->name); } } fprintf(server, ");\n"); indent--; } else { fprintf(server, "();\n"); } if (has_out_arg_or_return(func)) { write_remoting_arguments(server, indent, func, "__frame->", PASS_OUT, PHASE_BUFFERSIZE); if (!is_void(type_function_get_rettype(func->type))) write_remoting_arguments(server, indent, func, "__frame->", PASS_RETURN, PHASE_BUFFERSIZE); print_server("_pRpcMessage->BufferLength = __frame->_StubMsg.BufferLength;\n"); fprintf(server, "\n"); print_server("_Status = I_RpcGetBuffer(_pRpcMessage);\n"); print_server("if (_Status)\n"); indent++; print_server("RpcRaiseException(_Status);\n"); indent--; fprintf(server, "\n"); print_server("__frame->_StubMsg.Buffer = _pRpcMessage->Buffer;\n"); fprintf(server, "\n"); } /* marshall arguments */ write_remoting_arguments(server, indent, func, "__frame->", PASS_OUT, PHASE_MARSHAL); /* marshall the return value */ if (!is_void(type_function_get_rettype(func->type))) write_remoting_arguments(server, indent, func, "__frame->", PASS_RETURN, PHASE_MARSHAL); indent--; print_server("}\n"); print_server("RpcFinally\n"); print_server("{\n"); indent++; print_server("__finally_%s_%s( __frame );\n", iface->name, get_name(func)); indent--; print_server("}\n"); print_server("RpcEndFinally\n"); /* calculate buffer length */ fprintf(server, "\n"); print_server("_pRpcMessage->BufferLength = __frame->_StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer;\n"); indent--; fprintf(server, "}\n"); fprintf(server, "\n"); } static void write_function_stubs(type_t *iface, unsigned int *proc_offset) { const statement_t *stmt; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { var_t *func = stmt->u.var; write_function_stub( iface, func, *proc_offset ); /* update proc_offset */ func->procstring_offset = *proc_offset; *proc_offset += get_size_procformatstring_func( iface, func ); } } static void write_dispatchtable(type_t *iface) { unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION); unsigned int method_count = 0; const statement_t *stmt; print_server("static RPC_DISPATCH_FUNCTION %s_table[] =\n", iface->name); print_server("{\n"); indent++; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { var_t *func = stmt->u.var; if (is_interpreted_func( iface, func )) print_server("%s,\n", get_stub_mode() == MODE_Oif ? "NdrServerCall2" : "NdrServerCall"); else print_server("%s_%s,\n", iface->name, get_name(func)); method_count++; } print_server("0\n"); indent--; print_server("};\n"); print_server("static RPC_DISPATCH_TABLE %s_v%d_%d_DispatchTable =\n", iface->name, MAJORVERSION(ver), MINORVERSION(ver)); print_server("{\n"); indent++; print_server("%u,\n", method_count); print_server("%s_table\n", iface->name); indent--; print_server("};\n"); fprintf(server, "\n"); } static void write_routinetable(type_t *iface) { const statement_t *stmt; print_server( "static const SERVER_ROUTINE %s_ServerRoutineTable[] =\n", iface->name ); print_server( "{\n" ); indent++; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { var_t *func = stmt->u.var; if (is_local( func->attrs )) continue; print_server( "(SERVER_ROUTINE)%s%s,\n", prefix_server, get_name(func)); } indent--; print_server( "};\n\n" ); } static void write_rundown_routines(void) { context_handle_t *ch; int count = list_count( &context_handle_list ); if (!count) return; print_server( "static const NDR_RUNDOWN RundownRoutines[] =\n" ); print_server( "{\n" ); indent++; LIST_FOR_EACH_ENTRY( ch, &context_handle_list, context_handle_t, entry ) { print_server( "%s_rundown", ch->name ); if (--count) fputc( ',', server ); fputc( '\n', server ); } indent--; print_server( "};\n\n" ); } static void write_serverinfo(type_t *iface) { print_server( "static const MIDL_SERVER_INFO %s_ServerInfo =\n", iface->name ); print_server( "{\n" ); indent++; print_server( "&%s_StubDesc,\n", iface->name ); print_server( "%s_ServerRoutineTable,\n", iface->name ); print_server( "__MIDL_ProcFormatString.Format,\n" ); print_server( "%s_FormatStringOffsetTable,\n", iface->name ); print_server( "0,\n" ); print_server( "0,\n" ); print_server( "0,\n" ); print_server( "0\n" ); indent--; print_server( "};\n\n" ); } static void write_stubdescdecl(type_t *iface) { print_server("static const MIDL_STUB_DESC %s_StubDesc;\n", iface->name); fprintf(server, "\n"); } static void write_stubdescriptor(type_t *iface, int expr_eval_routines) { print_server("static const MIDL_STUB_DESC %s_StubDesc =\n", iface->name); print_server("{\n"); indent++; print_server("(void *)& %s___RpcServerInterface,\n", iface->name); print_server("MIDL_user_allocate,\n"); print_server("MIDL_user_free,\n"); print_server("{\n"); indent++; print_server("0,\n"); indent--; print_server("},\n"); if (!list_empty( &context_handle_list )) print_server("RundownRoutines,\n"); else print_server("0,\n"); print_server("0,\n"); if (expr_eval_routines) print_server("ExprEvalRoutines,\n"); else print_server("0,\n"); print_server("0,\n"); print_server("__MIDL_TypeFormatString.Format,\n"); print_server("1, /* -error bounds_check flag */\n"); print_server("0x%x, /* Ndr library version */\n", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001); print_server("0,\n"); print_server("0x50100a4, /* MIDL Version 5.1.164 */\n"); print_server("0,\n"); print_server("%s,\n", list_empty(&user_type_list) ? "0" : "UserMarshalRoutines"); print_server("0, /* notify & notify_flag routine table */\n"); print_server("1, /* Flags */\n"); print_server("0, /* Reserved3 */\n"); print_server("0, /* Reserved4 */\n"); print_server("0 /* Reserved5 */\n"); indent--; print_server("};\n"); fprintf(server, "\n"); } static void write_serverinterfacedecl(type_t *iface) { unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION); UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); const str_list_t *endpoints = get_attrp(iface->attrs, ATTR_ENDPOINT); if (endpoints) write_endpoints( server, iface->name, endpoints ); print_server("static RPC_DISPATCH_TABLE %s_v%d_%d_DispatchTable;\n", iface->name, MAJORVERSION(ver), MINORVERSION(ver)); print_server( "static const MIDL_SERVER_INFO %s_ServerInfo;\n", iface->name ); fprintf(server, "\n"); print_server("static const RPC_SERVER_INTERFACE %s___RpcServerInterface =\n", iface->name ); print_server("{\n"); indent++; print_server("sizeof(RPC_SERVER_INTERFACE),\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", uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7], MAJORVERSION(ver), MINORVERSION(ver)); print_server("{{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}},\n"); /* FIXME */ print_server("&%s_v%d_%d_DispatchTable,\n", iface->name, MAJORVERSION(ver), MINORVERSION(ver)); if (endpoints) { print_server("%u,\n", list_count(endpoints)); print_server("(PRPC_PROTSEQ_ENDPOINT)%s__RpcProtseqEndpoint,\n", iface->name); } else { print_server("0,\n"); print_server("0,\n"); } print_server("0,\n"); print_server("&%s_ServerInfo,\n", iface->name); print_server("0,\n"); indent--; print_server("};\n"); if (old_names) print_server("RPC_IF_HANDLE %s_ServerIfHandle DECLSPEC_HIDDEN = (RPC_IF_HANDLE)& %s___RpcServerInterface;\n", iface->name, iface->name); else print_server("RPC_IF_HANDLE %s%s_v%d_%d_s_ifspec DECLSPEC_HIDDEN = (RPC_IF_HANDLE)& %s___RpcServerInterface;\n", prefix_server, iface->name, MAJORVERSION(ver), MINORVERSION(ver), iface->name); fprintf(server, "\n"); } static void init_server(void) { if (server) return; if (!(server = fopen(server_name, "w"))) error("Could not open %s for output\n", server_name); print_server("/*** Autogenerated by WIDL %s from %s - Do not edit ***/\n", PACKAGE_VERSION, input_name); print_server("#include \n"); fprintf(server, "\n"); print_server("#include \"%s\"\n", header_name); print_server("\n"); print_server( "#ifndef DECLSPEC_HIDDEN\n"); print_server( "#define DECLSPEC_HIDDEN\n"); print_server( "#endif\n"); print_server( "\n"); } static void write_server_stmts(const statement_list_t *stmts, int expr_eval_routines, unsigned int *proc_offset) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE) { type_t *iface = stmt->u.type; if (!need_stub(iface)) continue; fprintf(server, "/*****************************************************************************\n"); fprintf(server, " * %s interface\n", iface->name); fprintf(server, " */\n"); fprintf(server, "\n"); if (statements_has_func(type_iface_get_stmts(iface))) { write_serverinterfacedecl(iface); write_stubdescdecl(iface); write_function_stubs(iface, proc_offset); print_server("#if !defined(__RPC_WIN%u__)\n", pointer_size == 8 ? 64 : 32); print_server("#error Invalid build platform for this stub.\n"); print_server("#endif\n"); fprintf(server, "\n"); write_procformatstring_offsets( server, iface ); write_stubdescriptor(iface, expr_eval_routines); write_dispatchtable(iface); write_routinetable(iface); write_serverinfo(iface); } } } } static void write_server_routines(const statement_list_t *stmts) { unsigned int proc_offset = 0; int expr_eval_routines; if (need_inline_stubs_file( stmts )) { write_exceptions( server ); print_server("\n"); print_server("struct __server_frame\n"); print_server("{\n"); print_server(" __DECL_EXCEPTION_FRAME\n"); print_server(" MIDL_STUB_MESSAGE _StubMsg;\n"); print_server("};\n"); print_server("\n"); print_server("static int __server_filter( struct __server_frame *__frame )\n"); print_server( "{\n"); print_server( " return (__frame->code == STATUS_ACCESS_VIOLATION) ||\n"); print_server( " (__frame->code == STATUS_DATATYPE_MISALIGNMENT) ||\n"); print_server( " (__frame->code == RPC_X_BAD_STUB_DATA) ||\n"); print_server( " (__frame->code == RPC_S_INVALID_BOUND);\n"); print_server( "}\n"); print_server( "\n"); } write_formatstringsdecl(server, indent, stmts, need_stub); expr_eval_routines = write_expr_eval_routines(server, server_token); if (expr_eval_routines) write_expr_eval_routine_list(server, server_token); write_user_quad_list(server); write_rundown_routines(); write_server_stmts(stmts, expr_eval_routines, &proc_offset); write_procformatstring(server, stmts, need_stub); write_typeformatstring(server, stmts, need_stub); } void write_server(const statement_list_t *stmts) { if (!do_server) return; if (do_everything && !need_stub_files(stmts)) return; init_server(); if (!server) return; if (do_win32 && do_win64) { fprintf(server, "#ifndef _WIN64\n\n"); pointer_size = 4; write_server_routines( stmts ); fprintf(server, "\n#else /* _WIN64 */\n\n"); pointer_size = 8; write_server_routines( stmts ); fprintf(server, "\n#endif /* _WIN64 */\n"); } else if (do_win32) { pointer_size = 4; write_server_routines( stmts ); } else if (do_win64) { pointer_size = 8; write_server_routines( stmts ); } fclose(server); } ================================================ FILE: widl/typegen.c ================================================ /* * Format String Generator for IDL Compiler * * Copyright 2005-2006 Eric Kohl * Copyright 2005-2006 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" #include "typetree.h" #include "typegen.h" #include "expr.h" /* round size up to multiple of alignment */ #define ROUND_SIZE(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1)) /* value to add on to round size up to a multiple of alignment */ #define ROUNDING(size, alignment) (((alignment) - 1) - (((size) + ((alignment) - 1)) & ((alignment) - 1))) static const type_t *current_structure; static const var_t *current_func; static const type_t *current_iface; static struct list expr_eval_routines = LIST_INIT(expr_eval_routines); struct expr_eval_routine { struct list entry; const type_t *iface; const type_t *cont_type; char *name; unsigned int baseoff; const expr_t *expr; }; enum type_context { TYPE_CONTEXT_TOPLEVELPARAM, TYPE_CONTEXT_PARAM, TYPE_CONTEXT_CONTAINER, TYPE_CONTEXT_CONTAINER_NO_POINTERS, }; /* parameter flags in Oif mode */ static const unsigned short MustSize = 0x0001; static const unsigned short MustFree = 0x0002; static const unsigned short IsPipe = 0x0004; static const unsigned short IsIn = 0x0008; static const unsigned short IsOut = 0x0010; static const unsigned short IsReturn = 0x0020; static const unsigned short IsBasetype = 0x0040; static const unsigned short IsByValue = 0x0080; static const unsigned short IsSimpleRef = 0x0100; /* static const unsigned short IsDontCallFreeInst = 0x0200; */ /* static const unsigned short SaveForAsyncFinish = 0x0400; */ static unsigned int field_memsize(const type_t *type, unsigned int *offset); static unsigned int fields_memsize(const var_list_t *fields, unsigned int *align); static unsigned int write_array_tfs(FILE *file, const attr_list_t *attrs, type_t *type, const char *name, unsigned int *typestring_offset); static unsigned int write_struct_tfs(FILE *file, type_t *type, const char *name, unsigned int *tfsoff); static int write_embedded_types(FILE *file, const attr_list_t *attrs, type_t *type, const char *name, int write_ptr, unsigned int *tfsoff); static const var_t *find_array_or_string_in_struct(const type_t *type); static unsigned int write_string_tfs(FILE *file, const attr_list_t *attrs, type_t *type, enum type_context context, const char *name, unsigned int *typestring_offset); static unsigned int get_required_buffer_size_type( const type_t *type, const char *name, const attr_list_t *attrs, int toplevel_param, unsigned int *alignment ); static unsigned int get_function_buffer_size( const var_t *func, enum pass pass ); static const char *string_of_type(unsigned char type) { switch (type) { case FC_BYTE: return "FC_BYTE"; case FC_CHAR: return "FC_CHAR"; case FC_SMALL: return "FC_SMALL"; case FC_USMALL: return "FC_USMALL"; case FC_WCHAR: return "FC_WCHAR"; case FC_SHORT: return "FC_SHORT"; case FC_USHORT: return "FC_USHORT"; case FC_LONG: return "FC_LONG"; case FC_ULONG: return "FC_ULONG"; case FC_FLOAT: return "FC_FLOAT"; case FC_HYPER: return "FC_HYPER"; case FC_DOUBLE: return "FC_DOUBLE"; case FC_ENUM16: return "FC_ENUM16"; case FC_ENUM32: return "FC_ENUM32"; case FC_IGNORE: return "FC_IGNORE"; case FC_ERROR_STATUS_T: return "FC_ERROR_STATUS_T"; case FC_RP: return "FC_RP"; case FC_UP: return "FC_UP"; case FC_OP: return "FC_OP"; case FC_FP: return "FC_FP"; case FC_ENCAPSULATED_UNION: return "FC_ENCAPSULATED_UNION"; case FC_NON_ENCAPSULATED_UNION: return "FC_NON_ENCAPSULATED_UNION"; case FC_STRUCT: return "FC_STRUCT"; case FC_PSTRUCT: return "FC_PSTRUCT"; case FC_CSTRUCT: return "FC_CSTRUCT"; case FC_CPSTRUCT: return "FC_CPSTRUCT"; case FC_CVSTRUCT: return "FC_CVSTRUCT"; case FC_BOGUS_STRUCT: return "FC_BOGUS_STRUCT"; case FC_SMFARRAY: return "FC_SMFARRAY"; case FC_LGFARRAY: return "FC_LGFARRAY"; case FC_SMVARRAY: return "FC_SMVARRAY"; case FC_LGVARRAY: return "FC_LGVARRAY"; case FC_CARRAY: return "FC_CARRAY"; case FC_CVARRAY: return "FC_CVARRAY"; case FC_BOGUS_ARRAY: return "FC_BOGUS_ARRAY"; case FC_ALIGNM2: return "FC_ALIGNM2"; case FC_ALIGNM4: return "FC_ALIGNM4"; case FC_ALIGNM8: return "FC_ALIGNM8"; case FC_POINTER: return "FC_POINTER"; case FC_C_CSTRING: return "FC_C_CSTRING"; case FC_C_WSTRING: return "FC_C_WSTRING"; case FC_CSTRING: return "FC_CSTRING"; case FC_WSTRING: return "FC_WSTRING"; case FC_BYTE_COUNT_POINTER: return "FC_BYTE_COUNT_POINTER"; case FC_TRANSMIT_AS: return "FC_TRANSMIT_AS"; case FC_REPRESENT_AS: return "FC_REPRESENT_AS"; case FC_IP: return "FC_IP"; case FC_BIND_CONTEXT: return "FC_BIND_CONTEXT"; case FC_BIND_GENERIC: return "FC_BIND_GENERIC"; case FC_BIND_PRIMITIVE: return "FC_BIND_PRIMITIVE"; case FC_AUTO_HANDLE: return "FC_AUTO_HANDLE"; case FC_CALLBACK_HANDLE: return "FC_CALLBACK_HANDLE"; case FC_STRUCTPAD1: return "FC_STRUCTPAD1"; case FC_STRUCTPAD2: return "FC_STRUCTPAD2"; case FC_STRUCTPAD3: return "FC_STRUCTPAD3"; case FC_STRUCTPAD4: return "FC_STRUCTPAD4"; case FC_STRUCTPAD5: return "FC_STRUCTPAD5"; case FC_STRUCTPAD6: return "FC_STRUCTPAD6"; case FC_STRUCTPAD7: return "FC_STRUCTPAD7"; case FC_STRING_SIZED: return "FC_STRING_SIZED"; case FC_NO_REPEAT: return "FC_NO_REPEAT"; case FC_FIXED_REPEAT: return "FC_FIXED_REPEAT"; case FC_VARIABLE_REPEAT: return "FC_VARIABLE_REPEAT"; case FC_FIXED_OFFSET: return "FC_FIXED_OFFSET"; case FC_VARIABLE_OFFSET: return "FC_VARIABLE_OFFSET"; case FC_PP: return "FC_PP"; case FC_EMBEDDED_COMPLEX: return "FC_EMBEDDED_COMPLEX"; case FC_DEREFERENCE: return "FC_DEREFERENCE"; case FC_DIV_2: return "FC_DIV_2"; case FC_MULT_2: return "FC_MULT_2"; case FC_ADD_1: return "FC_ADD_1"; case FC_SUB_1: return "FC_SUB_1"; case FC_CALLBACK: return "FC_CALLBACK"; case FC_CONSTANT_IID: return "FC_CONSTANT_IID"; case FC_END: return "FC_END"; case FC_PAD: return "FC_PAD"; case FC_USER_MARSHAL: return "FC_USER_MARSHAL"; case FC_RANGE: return "FC_RANGE"; case FC_INT3264: return "FC_INT3264"; case FC_UINT3264: return "FC_UINT3264"; default: error("string_of_type: unknown type 0x%02x\n", type); return NULL; } } static void *get_aliaschain_attrp(const type_t *type, enum attr_type attr) { const type_t *t = type; for (;;) { if (is_attr(t->attrs, attr)) return get_attrp(t->attrs, attr); else if (type_is_alias(t)) t = type_alias_get_aliasee(t); else return NULL; } } unsigned char get_basic_fc(const type_t *type) { int sign = type_basic_get_sign(type); switch (type_basic_get_type(type)) { case TYPE_BASIC_INT8: return (sign <= 0 ? FC_SMALL : FC_USMALL); case TYPE_BASIC_INT16: return (sign <= 0 ? FC_SHORT : FC_USHORT); case TYPE_BASIC_INT32: return (sign <= 0 ? FC_LONG : FC_ULONG); case TYPE_BASIC_INT64: return FC_HYPER; case TYPE_BASIC_INT: return (sign <= 0 ? FC_LONG : FC_ULONG); case TYPE_BASIC_INT3264: return (sign <= 0 ? FC_INT3264 : FC_UINT3264); case TYPE_BASIC_BYTE: return FC_BYTE; case TYPE_BASIC_CHAR: return FC_CHAR; case TYPE_BASIC_WCHAR: return FC_WCHAR; case TYPE_BASIC_HYPER: return FC_HYPER; case TYPE_BASIC_FLOAT: return FC_FLOAT; case TYPE_BASIC_DOUBLE: return FC_DOUBLE; case TYPE_BASIC_ERROR_STATUS_T: return FC_ERROR_STATUS_T; case TYPE_BASIC_HANDLE: return FC_BIND_PRIMITIVE; } return 0; } static unsigned char get_basic_fc_signed(const type_t *type) { switch (type_basic_get_type(type)) { case TYPE_BASIC_INT8: return FC_SMALL; case TYPE_BASIC_INT16: return FC_SHORT; case TYPE_BASIC_INT32: return FC_LONG; case TYPE_BASIC_INT64: return FC_HYPER; case TYPE_BASIC_INT: return FC_LONG; case TYPE_BASIC_INT3264: return FC_INT3264; case TYPE_BASIC_BYTE: return FC_BYTE; case TYPE_BASIC_CHAR: return FC_CHAR; case TYPE_BASIC_WCHAR: return FC_WCHAR; case TYPE_BASIC_HYPER: return FC_HYPER; case TYPE_BASIC_FLOAT: return FC_FLOAT; case TYPE_BASIC_DOUBLE: return FC_DOUBLE; case TYPE_BASIC_ERROR_STATUS_T: return FC_ERROR_STATUS_T; case TYPE_BASIC_HANDLE: return FC_BIND_PRIMITIVE; } return 0; } static inline unsigned int clamp_align(unsigned int align) { unsigned int packing = (pointer_size == 4) ? win32_packing : win64_packing; if(align > packing) align = packing; return align; } unsigned char get_pointer_fc(const type_t *type, const attr_list_t *attrs, int toplevel_param) { const type_t *t; int pointer_type; assert(is_ptr(type) || is_array(type)); pointer_type = get_attrv(attrs, ATTR_POINTERTYPE); if (pointer_type) return pointer_type; for (t = type; type_is_alias(t); t = type_alias_get_aliasee(t)) { pointer_type = get_attrv(t->attrs, ATTR_POINTERTYPE); if (pointer_type) return pointer_type; } if (toplevel_param) return FC_RP; else if (is_ptr(type)) return type_pointer_get_default_fc(type); else return type_array_get_ptr_default_fc(type); } static unsigned char get_pointer_fc_context( const type_t *type, const attr_list_t *attrs, enum type_context context ) { int pointer_fc = get_pointer_fc(type, attrs, context == TYPE_CONTEXT_TOPLEVELPARAM); if (pointer_fc == FC_UP && is_attr( attrs, ATTR_OUT ) && context == TYPE_CONTEXT_PARAM && is_object( current_iface )) pointer_fc = FC_OP; return pointer_fc; } static unsigned char get_enum_fc(const type_t *type) { assert(type_get_type(type) == TYPE_ENUM); if (is_aliaschain_attr(type, ATTR_V1ENUM)) return FC_ENUM32; else return FC_ENUM16; } static type_t *get_user_type(const type_t *t, const char **pname) { for (;;) { type_t *ut = get_attrp(t->attrs, ATTR_WIREMARSHAL); if (ut) { if (pname) *pname = t->name; return ut; } if (type_is_alias(t)) t = type_alias_get_aliasee(t); else return NULL; } } static int is_user_type(const type_t *t) { return get_user_type(t, NULL) != NULL; } enum typegen_type typegen_detect_type(const type_t *type, const attr_list_t *attrs, unsigned int flags) { if (is_user_type(type)) return TGT_USER_TYPE; if (is_aliaschain_attr(type, ATTR_CONTEXTHANDLE)) return TGT_CTXT_HANDLE; if (!(flags & TDT_IGNORE_STRINGS) && is_string_type(attrs, type)) return TGT_STRING; switch (type_get_type(type)) { case TYPE_BASIC: if (!(flags & TDT_IGNORE_RANGES) && (is_attr(attrs, ATTR_RANGE) || is_aliaschain_attr(type, ATTR_RANGE))) return TGT_RANGE; return TGT_BASIC; case TYPE_ENUM: if (!(flags & TDT_IGNORE_RANGES) && (is_attr(attrs, ATTR_RANGE) || is_aliaschain_attr(type, ATTR_RANGE))) return TGT_RANGE; return TGT_ENUM; case TYPE_POINTER: if (type_get_type(type_pointer_get_ref(type)) == TYPE_INTERFACE || (type_get_type(type_pointer_get_ref(type)) == TYPE_VOID && is_attr(attrs, ATTR_IIDIS))) return TGT_IFACE_POINTER; else if (is_aliaschain_attr(type_pointer_get_ref(type), ATTR_CONTEXTHANDLE)) return TGT_CTXT_HANDLE_POINTER; else return TGT_POINTER; case TYPE_STRUCT: return TGT_STRUCT; case TYPE_ENCAPSULATED_UNION: case TYPE_UNION: return TGT_UNION; case TYPE_ARRAY: return TGT_ARRAY; case TYPE_FUNCTION: case TYPE_COCLASS: case TYPE_INTERFACE: case TYPE_MODULE: case TYPE_VOID: case TYPE_ALIAS: case TYPE_BITFIELD: break; } return TGT_INVALID; } static int cant_be_null(const var_t *v) { switch (typegen_detect_type(v->type, v->attrs, TDT_IGNORE_STRINGS)) { case TGT_ARRAY: if (!type_array_is_decl_as_ptr( v->type )) return 0; /* fall through */ case TGT_POINTER: return (get_pointer_fc(v->type, v->attrs, TRUE) == FC_RP); case TGT_CTXT_HANDLE_POINTER: return TRUE; default: return 0; } } static int get_padding(const var_list_t *fields) { unsigned short offset = 0; unsigned int salign = 1; const var_t *f; if (!fields) return 0; LIST_FOR_EACH_ENTRY(f, fields, const var_t, entry) { type_t *ft = f->type; unsigned int align = 0; unsigned int size = type_memsize_and_alignment(ft, &align); align = clamp_align(align); if (align > salign) salign = align; offset = ROUND_SIZE(offset, align); offset += size; } return ROUNDING(offset, salign); } static unsigned int get_stack_size( const var_t *var, int *by_value ) { unsigned int stack_size; int by_val; switch (typegen_detect_type( var->type, var->attrs, TDT_ALL_TYPES )) { case TGT_BASIC: case TGT_ENUM: case TGT_RANGE: case TGT_STRUCT: case TGT_UNION: case TGT_USER_TYPE: stack_size = type_memsize( var->type ); by_val = (pointer_size < 8 || stack_size <= pointer_size); /* FIXME: should be platform-specific */ break; default: by_val = 0; break; } if (!by_val) stack_size = pointer_size; if (by_value) *by_value = by_val; return ROUND_SIZE( stack_size, pointer_size ); } static unsigned char get_contexthandle_flags( const type_t *iface, const attr_list_t *attrs, const type_t *type ) { unsigned char flags = 0; if (is_attr(iface->attrs, ATTR_STRICTCONTEXTHANDLE)) flags |= NDR_STRICT_CONTEXT_HANDLE; if (is_ptr(type) && !is_attr( type->attrs, ATTR_CONTEXTHANDLE ) && !is_attr( attrs, ATTR_CONTEXTHANDLE )) flags |= 0x80; if (is_attr(attrs, ATTR_IN)) { flags |= 0x40; if (!is_attr(attrs, ATTR_OUT)) flags |= NDR_CONTEXT_HANDLE_CANNOT_BE_NULL; } if (is_attr(attrs, ATTR_OUT)) flags |= 0x20; return flags; } static unsigned int get_rpc_flags( const attr_list_t *attrs ) { unsigned int flags = 0; if (is_attr( attrs, ATTR_IDEMPOTENT )) flags |= 0x0001; if (is_attr( attrs, ATTR_BROADCAST )) flags |= 0x0002; if (is_attr( attrs, ATTR_MAYBE )) flags |= 0x0004; if (is_attr( attrs, ATTR_MESSAGE )) flags |= 0x0100; if (is_attr( attrs, ATTR_ASYNC )) flags |= 0x4000; return flags; } unsigned char get_struct_fc(const type_t *type) { int has_pointer = 0; int has_conformance = 0; int has_variance = 0; var_t *field; var_list_t *fields; fields = type_struct_get_fields(type); if (get_padding(fields)) return FC_BOGUS_STRUCT; if (fields) LIST_FOR_EACH_ENTRY( field, fields, var_t, entry ) { type_t *t = field->type; enum typegen_type typegen_type; typegen_type = typegen_detect_type(t, field->attrs, TDT_IGNORE_STRINGS); if (typegen_type == TGT_ARRAY && !type_array_is_decl_as_ptr(t)) { if (is_string_type(field->attrs, field->type)) { if (is_conformant_array(t)) has_conformance = 1; has_variance = 1; continue; } if (is_array(type_array_get_element(field->type))) return FC_BOGUS_STRUCT; if (type_array_has_conformance(field->type)) { has_conformance = 1; if (list_next(fields, &field->entry)) error_loc("field '%s' deriving from a conformant array must be the last field in the structure\n", field->name); } if (type_array_has_variance(t)) has_variance = 1; t = type_array_get_element(t); typegen_type = typegen_detect_type(t, field->attrs, TDT_IGNORE_STRINGS); } switch (typegen_type) { case TGT_USER_TYPE: case TGT_IFACE_POINTER: return FC_BOGUS_STRUCT; case TGT_BASIC: if (type_basic_get_type(t) == TYPE_BASIC_INT3264 && pointer_size != 4) return FC_BOGUS_STRUCT; break; case TGT_ENUM: if (get_enum_fc(t) == FC_ENUM16) return FC_BOGUS_STRUCT; break; case TGT_POINTER: case TGT_ARRAY: if (get_pointer_fc(t, field->attrs, FALSE) == FC_RP || pointer_size != 4) return FC_BOGUS_STRUCT; has_pointer = 1; break; case TGT_UNION: return FC_BOGUS_STRUCT; case TGT_STRUCT: { unsigned char fc = get_struct_fc(t); switch (fc) { case FC_STRUCT: break; case FC_CVSTRUCT: has_conformance = 1; has_variance = 1; has_pointer = 1; break; case FC_CPSTRUCT: has_conformance = 1; if (list_next( fields, &field->entry )) error_loc("field '%s' deriving from a conformant array must be the last field in the structure\n", field->name); has_pointer = 1; break; case FC_CSTRUCT: has_conformance = 1; if (list_next( fields, &field->entry )) error_loc("field '%s' deriving from a conformant array must be the last field in the structure\n", field->name); break; case FC_PSTRUCT: has_pointer = 1; break; default: error_loc("Unknown struct member %s with type (0x%02x)\n", field->name, fc); /* fallthru - treat it as complex */ /* as soon as we see one of these these members, it's bogus... */ case FC_BOGUS_STRUCT: return FC_BOGUS_STRUCT; } break; } case TGT_RANGE: return FC_BOGUS_STRUCT; case TGT_STRING: /* shouldn't get here because of TDT_IGNORE_STRINGS above. fall through */ case TGT_INVALID: case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: /* checking after parsing should mean that we don't get here. if we do, * it's a checker bug */ assert(0); } } if( has_variance ) { if ( has_conformance ) return FC_CVSTRUCT; else return FC_BOGUS_STRUCT; } if( has_conformance && has_pointer ) return FC_CPSTRUCT; if( has_conformance ) return FC_CSTRUCT; if( has_pointer ) return FC_PSTRUCT; return FC_STRUCT; } static unsigned char get_array_fc(const type_t *type) { unsigned char fc; const expr_t *size_is; const type_t *elem_type; elem_type = type_array_get_element(type); size_is = type_array_get_conformance(type); if (!size_is) { unsigned int size = type_memsize(elem_type); if (size * type_array_get_dim(type) > 0xffffuL) fc = FC_LGFARRAY; else fc = FC_SMFARRAY; } else fc = FC_CARRAY; if (type_array_has_variance(type)) { if (fc == FC_SMFARRAY) fc = FC_SMVARRAY; else if (fc == FC_LGFARRAY) fc = FC_LGVARRAY; else if (fc == FC_CARRAY) fc = FC_CVARRAY; } switch (typegen_detect_type(elem_type, NULL, TDT_IGNORE_STRINGS)) { case TGT_USER_TYPE: fc = FC_BOGUS_ARRAY; break; case TGT_BASIC: if (type_basic_get_type(elem_type) == TYPE_BASIC_INT3264 && pointer_size != 4) fc = FC_BOGUS_ARRAY; break; case TGT_STRUCT: switch (get_struct_fc(elem_type)) { case FC_BOGUS_STRUCT: fc = FC_BOGUS_ARRAY; break; } break; case TGT_ENUM: /* is 16-bit enum - if so, wire size differs from mem size and so * the array cannot be block copied, which means the array is complex */ if (get_enum_fc(elem_type) == FC_ENUM16) fc = FC_BOGUS_ARRAY; break; case TGT_UNION: case TGT_IFACE_POINTER: fc = FC_BOGUS_ARRAY; break; case TGT_POINTER: /* ref pointers cannot just be block copied. unique pointers to * interfaces need special treatment. either case means the array is * complex */ if (get_pointer_fc(elem_type, NULL, FALSE) == FC_RP || pointer_size != 4) fc = FC_BOGUS_ARRAY; break; case TGT_RANGE: fc = FC_BOGUS_ARRAY; break; case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: case TGT_STRING: case TGT_INVALID: case TGT_ARRAY: /* nothing to do for everything else */ break; } return fc; } static int is_non_complex_struct(const type_t *type) { return (type_get_type(type) == TYPE_STRUCT && get_struct_fc(type) != FC_BOGUS_STRUCT); } static int type_has_pointers(const type_t *type) { switch (typegen_detect_type(type, NULL, TDT_IGNORE_STRINGS)) { case TGT_USER_TYPE: return FALSE; case TGT_POINTER: return TRUE; case TGT_ARRAY: return type_array_is_decl_as_ptr(type) || type_has_pointers(type_array_get_element(type)); case TGT_STRUCT: { var_list_t *fields = type_struct_get_fields(type); const var_t *field; if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) { if (type_has_pointers(field->type)) return TRUE; } break; } case TGT_UNION: { var_list_t *fields; const var_t *field; fields = type_union_get_cases(type); if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) { if (field->type && type_has_pointers(field->type)) return TRUE; } break; } case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: case TGT_STRING: case TGT_IFACE_POINTER: case TGT_BASIC: case TGT_ENUM: case TGT_RANGE: case TGT_INVALID: break; } return FALSE; } static int type_has_full_pointer(const type_t *type, const attr_list_t *attrs, int toplevel_param) { switch (typegen_detect_type(type, NULL, TDT_IGNORE_STRINGS)) { case TGT_USER_TYPE: return FALSE; case TGT_POINTER: if (get_pointer_fc(type, attrs, toplevel_param) == FC_FP) return TRUE; else return FALSE; case TGT_ARRAY: if (get_pointer_fc(type, attrs, toplevel_param) == FC_FP) return TRUE; else return type_has_full_pointer(type_array_get_element(type), NULL, FALSE); case TGT_STRUCT: { var_list_t *fields = type_struct_get_fields(type); const var_t *field; if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) { if (type_has_full_pointer(field->type, field->attrs, FALSE)) return TRUE; } break; } case TGT_UNION: { var_list_t *fields; const var_t *field; fields = type_union_get_cases(type); if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) { if (field->type && type_has_full_pointer(field->type, field->attrs, FALSE)) return TRUE; } break; } case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: case TGT_STRING: case TGT_IFACE_POINTER: case TGT_BASIC: case TGT_ENUM: case TGT_RANGE: case TGT_INVALID: break; } return FALSE; } static unsigned short user_type_offset(const char *name) { user_type_t *ut; unsigned short off = 0; LIST_FOR_EACH_ENTRY(ut, &user_type_list, user_type_t, entry) { if (strcmp(name, ut->name) == 0) return off; ++off; } error("user_type_offset: couldn't find type (%s)\n", name); return 0; } static void update_tfsoff(type_t *type, unsigned int offset, FILE *file) { type->typestring_offset = offset; if (file) type->tfswrite = FALSE; } static void guard_rec(type_t *type) { /* types that contain references to themselves (like a linked list), need to be shielded from infinite recursion when writing embedded types */ if (type->typestring_offset) type->tfswrite = FALSE; else type->typestring_offset = 1; } static int is_embedded_complex(const type_t *type) { switch (typegen_detect_type(type, NULL, TDT_ALL_TYPES)) { case TGT_USER_TYPE: case TGT_STRUCT: case TGT_UNION: case TGT_ARRAY: case TGT_IFACE_POINTER: return TRUE; default: return FALSE; } } static const char *get_context_handle_type_name(const type_t *type) { const type_t *t; for (t = type; is_ptr(t) || type_is_alias(t); t = type_is_alias(t) ? type_alias_get_aliasee(t) : type_pointer_get_ref(t)) if (is_attr(t->attrs, ATTR_CONTEXTHANDLE)) return t->name; assert(0); return NULL; } #define WRITE_FCTYPE(file, fctype, typestring_offset) \ do { \ if (file) \ fprintf(file, "/* %2u */\n", typestring_offset); \ print_file((file), 2, "0x%02x,\t/* " #fctype " */\n", fctype); \ } \ while (0) static void print_file(FILE *file, int indent, const char *format, ...) __attribute__((format (printf, 3, 4))); static void print_file(FILE *file, int indent, const char *format, ...) { va_list va; va_start(va, format); print(file, indent, format, va); va_end(va); } void print(FILE *file, int indent, const char *format, va_list va) { if (file) { if (format[0] != '\n') while (0 < indent--) fprintf(file, " "); vfprintf(file, format, va); } } static void write_var_init(FILE *file, int indent, const type_t *t, const char *n, const char *local_var_prefix) { if (decl_indirect(t)) { print_file(file, indent, "MIDL_memset(&%s%s, 0, sizeof(%s%s));\n", local_var_prefix, n, local_var_prefix, n); print_file(file, indent, "%s_p_%s = &%s%s;\n", local_var_prefix, n, local_var_prefix, n); } else if (is_ptr(t) || is_array(t)) print_file(file, indent, "%s%s = 0;\n", local_var_prefix, n); } void write_parameters_init(FILE *file, int indent, const var_t *func, const char *local_var_prefix) { const var_t *var = type_function_get_retval(func->type); if (!is_void(var->type)) write_var_init(file, indent, var->type, var->name, local_var_prefix); if (!type_get_function_args(func->type)) return; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) write_var_init(file, indent, var->type, var->name, local_var_prefix); fprintf(file, "\n"); } static void write_formatdesc(FILE *f, int indent, const char *str) { print_file(f, indent, "typedef struct _MIDL_%s_FORMAT_STRING\n", str); print_file(f, indent, "{\n"); print_file(f, indent + 1, "short Pad;\n"); print_file(f, indent + 1, "unsigned char Format[%s_FORMAT_STRING_SIZE];\n", str); print_file(f, indent, "} MIDL_%s_FORMAT_STRING;\n", str); print_file(f, indent, "\n"); } void write_formatstringsdecl(FILE *f, int indent, const statement_list_t *stmts, type_pred_t pred) { clear_all_offsets(); print_file(f, indent, "#define TYPE_FORMAT_STRING_SIZE %d\n", get_size_typeformatstring(stmts, pred)); print_file(f, indent, "#define PROC_FORMAT_STRING_SIZE %d\n", get_size_procformatstring(stmts, pred)); fprintf(f, "\n"); write_formatdesc(f, indent, "TYPE"); write_formatdesc(f, indent, "PROC"); fprintf(f, "\n"); print_file(f, indent, "static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;\n"); print_file(f, indent, "static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;\n"); print_file(f, indent, "\n"); } int decl_indirect(const type_t *t) { if (is_user_type(t)) return TRUE; return (type_get_type(t) != TYPE_BASIC && type_get_type(t) != TYPE_ENUM && type_get_type(t) != TYPE_POINTER && type_get_type(t) != TYPE_ARRAY); } static unsigned char get_parameter_fc( const var_t *var, int is_return, unsigned short *flags, unsigned int *stack_size, unsigned int *typestring_offset ) { unsigned int alignment, server_size = 0, buffer_size = 0; unsigned char fc = 0; int is_byval; int is_in = is_attr(var->attrs, ATTR_IN); int is_out = is_attr(var->attrs, ATTR_OUT); if (is_return) is_out = TRUE; else if (!is_in && !is_out) is_in = TRUE; *flags = 0; *stack_size = get_stack_size( var, &is_byval ); *typestring_offset = var->typestring_offset; if (is_in) *flags |= IsIn; if (is_out) *flags |= IsOut; if (is_return) *flags |= IsReturn; if (!is_string_type( var->attrs, var->type )) buffer_size = get_required_buffer_size_type( var->type, NULL, var->attrs, TRUE, &alignment ); switch (typegen_detect_type( var->type, var->attrs, TDT_ALL_TYPES )) { case TGT_BASIC: *flags |= IsBasetype; fc = get_basic_fc_signed( var->type ); if (fc == FC_BIND_PRIMITIVE) { buffer_size = 4; /* actually 0 but avoids setting MustSize */ fc = FC_LONG; } break; case TGT_ENUM: *flags |= IsBasetype; fc = get_enum_fc( var->type ); break; case TGT_RANGE: *flags |= IsByValue; break; case TGT_STRUCT: case TGT_UNION: case TGT_USER_TYPE: *flags |= MustFree | (is_byval ? IsByValue : IsSimpleRef); break; case TGT_IFACE_POINTER: *flags |= MustFree; break; case TGT_ARRAY: *flags |= MustFree; if (type_array_is_decl_as_ptr(var->type) && var->type->details.array.ptr_tfsoff && get_pointer_fc( var->type, var->attrs, !is_return ) == FC_RP) { *typestring_offset = var->type->typestring_offset; *flags |= IsSimpleRef; } break; case TGT_STRING: *flags |= MustFree; if (is_declptr( var->type ) && get_pointer_fc( var->type, var->attrs, !is_return ) == FC_RP) { /* skip over pointer description straight to string description */ if (is_conformant_array( var->type )) *typestring_offset += 4; else *typestring_offset += 2; *flags |= IsSimpleRef; } break; case TGT_CTXT_HANDLE_POINTER: *flags |= IsSimpleRef; *typestring_offset += 4; /* fall through */ case TGT_CTXT_HANDLE: buffer_size = 20; break; case TGT_POINTER: if (get_pointer_fc( var->type, var->attrs, !is_return ) == FC_RP) { const type_t *ref = type_pointer_get_ref( var->type ); if (!is_string_type( var->attrs, ref )) buffer_size = get_required_buffer_size_type( ref, NULL, NULL, TRUE, &alignment ); switch (typegen_detect_type( ref, NULL, TDT_ALL_TYPES )) { case TGT_BASIC: *flags |= IsSimpleRef | IsBasetype; fc = get_basic_fc( ref ); if (!is_in && is_out) server_size = pointer_size; break; case TGT_ENUM: if ((fc = get_enum_fc( ref )) == FC_ENUM32) { *flags |= IsSimpleRef | IsBasetype; if (!is_in && is_out) server_size = pointer_size; } else { server_size = pointer_size; } break; case TGT_UNION: case TGT_USER_TYPE: case TGT_RANGE: *flags |= IsSimpleRef | MustFree; *typestring_offset = ref->typestring_offset; if (!is_in && is_out) server_size = type_memsize( ref ); break; case TGT_STRING: case TGT_POINTER: case TGT_ARRAY: case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: *flags |= MustFree; server_size = pointer_size; break; case TGT_IFACE_POINTER: *flags |= MustFree; if (is_in && is_out) server_size = pointer_size; break; case TGT_STRUCT: *flags |= IsSimpleRef | MustFree; *typestring_offset = ref->typestring_offset; switch (get_struct_fc(ref)) { case FC_STRUCT: case FC_PSTRUCT: case FC_BOGUS_STRUCT: if (!is_in && is_out) server_size = type_memsize( ref ); break; default: break; } break; case TGT_INVALID: assert(0); } } else /* not ref pointer */ { *flags |= MustFree; } break; case TGT_INVALID: assert(0); } if (!buffer_size) *flags |= MustSize; if (server_size) { server_size = (server_size + 7) / 8; if (server_size < 8) *flags |= server_size << 13; } return fc; } static unsigned char get_func_oi2_flags( const var_t *func ) { const var_t *var; var_list_t *args = type_get_function_args( func->type ); var_t *retval = type_function_get_retval( func->type ); unsigned char oi2_flags = 0x40; /* HasExtensions */ unsigned short flags; unsigned int stack_size, typestring_offset; if (args) LIST_FOR_EACH_ENTRY( var, args, const var_t, entry ) { get_parameter_fc( var, 0, &flags, &stack_size, &typestring_offset ); if (flags & MustSize) { if (flags & IsIn) oi2_flags |= 0x02; /* ClientMustSize */ if (flags & IsOut) oi2_flags |= 0x01; /* ServerMustSize */ } } if (!is_void( retval->type )) { oi2_flags |= 0x04; /* HasRet */ get_parameter_fc( retval, 1, &flags, &stack_size, &typestring_offset ); if (flags & MustSize) oi2_flags |= 0x01; /* ServerMustSize */ } return oi2_flags; } static unsigned int write_new_procformatstring_type(FILE *file, int indent, const var_t *var, int is_return, unsigned int *stack_offset) { char buffer[128]; unsigned int stack_size, typestring_offset; unsigned short flags; unsigned char fc = get_parameter_fc( var, is_return, &flags, &stack_size, &typestring_offset ); strcpy( buffer, "/* flags:" ); if (flags & MustSize) strcat( buffer, " must size," ); if (flags & MustFree) strcat( buffer, " must free," ); if (flags & IsPipe) strcat( buffer, " pipe," ); if (flags & IsIn) strcat( buffer, " in," ); if (flags & IsOut) strcat( buffer, " out," ); if (flags & IsReturn) strcat( buffer, " return," ); if (flags & IsBasetype) strcat( buffer, " base type," ); if (flags & IsByValue) strcat( buffer, " by value," ); if (flags & IsSimpleRef) strcat( buffer, " simple ref," ); if (flags >> 13) sprintf( buffer + strlen(buffer), " srv size=%u,", (flags >> 13) * 8 ); strcpy( buffer + strlen( buffer ) - 1, " */" ); print_file( file, indent, "NdrFcShort(0x%hx),\t%s\n", flags, buffer ); print_file( file, indent, "NdrFcShort(0x%x), /* stack offset = %u */\n", *stack_offset, *stack_offset ); if (flags & IsBasetype) { print_file( file, indent, "0x%02x, /* %s */\n", fc, string_of_type(fc) ); print_file( file, indent, "0x0,\n" ); } else print_file( file, indent, "NdrFcShort(0x%x), /* type offset = %u */\n", typestring_offset, typestring_offset ); *stack_offset += max( stack_size, pointer_size ); return 6; } static unsigned int write_old_procformatstring_type(FILE *file, int indent, const var_t *var, int is_return, int is_interpreted) { unsigned int size; int is_in = is_attr(var->attrs, ATTR_IN); int is_out = is_attr(var->attrs, ATTR_OUT); if (!is_in && !is_out) is_in = TRUE; if (type_get_type(var->type) == TYPE_BASIC || type_get_type(var->type) == TYPE_ENUM) { unsigned char fc; if (is_return) print_file(file, indent, "0x53, /* FC_RETURN_PARAM_BASETYPE */\n"); else print_file(file, indent, "0x4e, /* FC_IN_PARAM_BASETYPE */\n"); if (type_get_type(var->type) == TYPE_ENUM) { fc = get_enum_fc(var->type); } else { fc = get_basic_fc_signed(var->type); if (fc == FC_BIND_PRIMITIVE) fc = FC_IGNORE; } print_file(file, indent, "0x%02x, /* %s */\n", fc, string_of_type(fc)); size = 2; /* includes param type prefix */ } else { unsigned short offset = var->typestring_offset; if (!is_interpreted && is_array(var->type) && type_array_is_decl_as_ptr(var->type) && var->type->details.array.ptr_tfsoff) offset = var->type->typestring_offset; if (is_return) print_file(file, indent, "0x52, /* FC_RETURN_PARAM */\n"); else if (is_in && is_out) print_file(file, indent, "0x50, /* FC_IN_OUT_PARAM */\n"); else if (is_out) print_file(file, indent, "0x51, /* FC_OUT_PARAM */\n"); else print_file(file, indent, "0x4d, /* FC_IN_PARAM */\n"); size = get_stack_size( var, NULL ); print_file(file, indent, "0x%02x,\n", size / pointer_size ); print_file(file, indent, "NdrFcShort(0x%x), /* type offset = %u */\n", offset, offset); size = 4; /* includes param type prefix */ } return size; } int is_interpreted_func( const type_t *iface, const var_t *func ) { const char *str; const var_t *var; const var_list_t *args = type_get_function_args( func->type ); const type_t *ret_type = type_function_get_rettype( func->type ); if (type_get_type( ret_type ) == TYPE_BASIC) { switch (type_basic_get_type( ret_type )) { case TYPE_BASIC_INT64: case TYPE_BASIC_HYPER: /* return value must fit in a long_ptr */ if (pointer_size < 8) return 0; break; case TYPE_BASIC_FLOAT: case TYPE_BASIC_DOUBLE: /* floating point values can't be returned */ return 0; default: break; } } if (get_stub_mode() != MODE_Oif && args) { LIST_FOR_EACH_ENTRY( var, args, const var_t, entry ) switch (type_get_type( var->type )) { case TYPE_BASIC: switch (type_basic_get_type( var->type )) { /* floating point arguments are not supported in Oi mode */ case TYPE_BASIC_FLOAT: return 0; case TYPE_BASIC_DOUBLE: return 0; default: break; } break; /* unions passed by value are not supported in Oi mode */ case TYPE_UNION: return 0; case TYPE_ENCAPSULATED_UNION: return 0; default: break; } } if ((str = get_attrp( func->attrs, ATTR_OPTIMIZE ))) return !strcmp( str, "i" ); if ((str = get_attrp( iface->attrs, ATTR_OPTIMIZE ))) return !strcmp( str, "i" ); return (get_stub_mode() != MODE_Os); } static void write_proc_func_header( FILE *file, int indent, const type_t *iface, const var_t *func, unsigned int *offset, unsigned short num_proc ) { var_t *var; var_list_t *args = type_get_function_args( func->type ); unsigned char explicit_fc, implicit_fc; unsigned char handle_flags; const var_t *handle_var = get_func_handle_var( iface, func, &explicit_fc, &implicit_fc ); unsigned char oi_flags = Oi_HAS_RPCFLAGS | Oi_USE_NEW_INIT_ROUTINES; unsigned int rpc_flags = get_rpc_flags( func->attrs ); unsigned int nb_args = 0; unsigned int stack_size = 0; unsigned short param_num = 0; unsigned short handle_stack_offset = 0; unsigned short handle_param_num = 0; if (is_full_pointer_function( func )) oi_flags |= Oi_FULL_PTR_USED; if (is_object( iface )) { oi_flags |= Oi_OBJECT_PROC; if (get_stub_mode() == MODE_Oif) oi_flags |= Oi_OBJ_USE_V2_INTERPRETER; stack_size += pointer_size; } if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry ) { if (var == handle_var) { handle_stack_offset = stack_size; handle_param_num = param_num; } stack_size += get_stack_size( var, NULL ); param_num++; nb_args++; } if (!is_void( type_function_get_rettype( func->type ))) { stack_size += pointer_size; nb_args++; } print_file( file, 0, "/* %u (procedure %s::%s) */\n", *offset, iface->name, func->name ); print_file( file, indent, "0x%02x,\t/* %s */\n", implicit_fc, implicit_fc ? string_of_type(implicit_fc) : "explicit handle" ); print_file( file, indent, "0x%02x,\n", oi_flags ); print_file( file, indent, "NdrFcLong(0x%x),\n", rpc_flags ); print_file( file, indent, "NdrFcShort(0x%hx),\t/* method %hu */\n", num_proc, num_proc ); print_file( file, indent, "NdrFcShort(0x%x),\t/* stack size = %u */\n", stack_size, stack_size ); *offset += 10; if (!implicit_fc) { switch (explicit_fc) { case FC_BIND_PRIMITIVE: handle_flags = 0; print_file( file, indent, "0x%02x,\t/* %s */\n", explicit_fc, string_of_type(explicit_fc) ); print_file( file, indent, "0x%02x,\n", handle_flags ); print_file( file, indent, "NdrFcShort(0x%hx),\t/* stack offset = %hu */\n", handle_stack_offset, handle_stack_offset ); *offset += 4; break; case FC_BIND_GENERIC: handle_flags = type_memsize( handle_var->type ); print_file( file, indent, "0x%02x,\t/* %s */\n", explicit_fc, string_of_type(explicit_fc) ); print_file( file, indent, "0x%02x,\n", handle_flags ); print_file( file, indent, "NdrFcShort(0x%hx),\t/* stack offset = %hu */\n", handle_stack_offset, handle_stack_offset ); print_file( file, indent, "0x%02x,\n", get_generic_handle_offset( handle_var->type ) ); print_file( file, indent, "0x%x,\t/* FC_PAD */\n", FC_PAD); *offset += 6; break; case FC_BIND_CONTEXT: handle_flags = get_contexthandle_flags( iface, handle_var->attrs, handle_var->type ); print_file( file, indent, "0x%02x,\t/* %s */\n", explicit_fc, string_of_type(explicit_fc) ); print_file( file, indent, "0x%02x,\n", handle_flags ); print_file( file, indent, "NdrFcShort(0x%hx),\t/* stack offset = %hu */\n", handle_stack_offset, handle_stack_offset ); print_file( file, indent, "0x%02x,\n", get_context_handle_offset( handle_var->type ) ); print_file( file, indent, "0x%02x,\t/* param %hu */\n", handle_param_num, handle_param_num ); *offset += 6; break; } } if (get_stub_mode() == MODE_Oif) { unsigned char oi2_flags = get_func_oi2_flags( func ); unsigned char ext_flags = 0; unsigned int size; if (is_attr( func->attrs, ATTR_NOTIFY )) ext_flags |= 0x08; /* HasNotify */ if (is_attr( func->attrs, ATTR_NOTIFYFLAG )) ext_flags |= 0x10; /* HasNotify2 */ size = get_function_buffer_size( func, PASS_IN ); print_file( file, indent, "NdrFcShort(0x%x),\t/* client buffer = %u */\n", size, size ); size = get_function_buffer_size( func, PASS_OUT ); print_file( file, indent, "NdrFcShort(0x%x),\t/* server buffer = %u */\n", size, size ); print_file( file, indent, "0x%02x,\n", oi2_flags ); print_file( file, indent, "0x%02x,\t/* %u params */\n", nb_args, nb_args ); print_file( file, indent, "0x%02x,\n", pointer_size == 8 ? 10 : 8 ); print_file( file, indent, "0x%02x,\n", ext_flags ); print_file( file, indent, "NdrFcShort(0x0),\n" ); /* server corr hint */ print_file( file, indent, "NdrFcShort(0x0),\n" ); /* client corr hint */ print_file( file, indent, "NdrFcShort(0x0),\n" ); /* FIXME: notify index */ *offset += 14; if (pointer_size == 8) { unsigned short pos = 0, fpu_mask = 0; if (is_object( iface )) pos += 2; if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry ) { if (type_get_type( var->type ) == TYPE_BASIC) { switch (type_basic_get_type( var->type )) { case TYPE_BASIC_FLOAT: fpu_mask |= 1 << pos; break; case TYPE_BASIC_DOUBLE: fpu_mask |= 2 << pos; break; default: break; } } pos += 2; if (pos >= 16) break; } print_file( file, indent, "NdrFcShort(0x%x),\n", fpu_mask ); /* floating point mask */ *offset += 2; } } } static void write_procformatstring_func( FILE *file, int indent, const type_t *iface, const var_t *func, unsigned int *offset, unsigned short num_proc ) { unsigned int stack_offset = is_object( iface ) ? pointer_size : 0; int is_interpreted = is_interpreted_func( iface, func ); int is_new_style = is_interpreted && (get_stub_mode() == MODE_Oif); var_t *retval = type_function_get_retval( func->type ); if (is_interpreted) write_proc_func_header( file, indent, iface, func, offset, num_proc ); /* emit argument data */ if (type_get_function_args(func->type)) { const var_t *var; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) { print_file( file, 0, "/* %u (parameter %s) */\n", *offset, var->name ); if (is_new_style) *offset += write_new_procformatstring_type(file, indent, var, FALSE, &stack_offset); else *offset += write_old_procformatstring_type(file, indent, var, FALSE, is_interpreted); } } /* emit return value data */ if (is_void(retval->type)) { if (!is_new_style) { print_file(file, 0, "/* %u (void) */\n", *offset); print_file(file, indent, "0x5b,\t/* FC_END */\n"); print_file(file, indent, "0x5c,\t/* FC_PAD */\n"); *offset += 2; } } else { print_file( file, 0, "/* %u (return value) */\n", *offset ); if (is_new_style) *offset += write_new_procformatstring_type(file, indent, retval, TRUE, &stack_offset); else *offset += write_old_procformatstring_type(file, indent, retval, TRUE, is_interpreted); } } static void write_procformatstring_stmts(FILE *file, int indent, const statement_list_t *stmts, type_pred_t pred, unsigned int *offset) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE) { const statement_t *stmt_func; const type_t *iface = stmt->u.type; const type_t *parent = type_iface_get_inherit( iface ); int count = parent ? count_methods( parent ) : 0; if (!pred(iface)) continue; STATEMENTS_FOR_EACH_FUNC(stmt_func, type_iface_get_stmts(iface)) { var_t *func = stmt_func->u.var; if (is_local(func->attrs)) continue; write_procformatstring_func( file, indent, iface, func, offset, count++ ); } } } } void write_procformatstring(FILE *file, const statement_list_t *stmts, type_pred_t pred) { int indent = 0; unsigned int offset = 0; print_file(file, indent, "static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =\n"); print_file(file, indent, "{\n"); indent++; print_file(file, indent, "0,\n"); print_file(file, indent, "{\n"); indent++; write_procformatstring_stmts(file, indent, stmts, pred, &offset); print_file(file, indent, "0x0\n"); indent--; print_file(file, indent, "}\n"); indent--; print_file(file, indent, "};\n"); print_file(file, indent, "\n"); } void write_procformatstring_offsets( FILE *file, const type_t *iface ) { const statement_t *stmt; int indent = 0; print_file( file, indent, "static const unsigned short %s_FormatStringOffsetTable[] =\n", iface->name ); print_file( file, indent, "{\n" ); indent++; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { var_t *func = stmt->u.var; if (is_local( func->attrs )) continue; print_file( file, indent, "%u, /* %s */\n", func->procstring_offset, func->name ); } indent--; print_file( file, indent, "};\n\n" ); } static int write_base_type(FILE *file, const type_t *type, unsigned int *typestring_offset) { unsigned char fc; if (type_get_type(type) == TYPE_BASIC) fc = get_basic_fc_signed(type); else if (type_get_type(type) == TYPE_ENUM) fc = get_enum_fc(type); else return 0; print_file(file, 2, "0x%02x,\t/* %s */\n", fc, string_of_type(fc)); *typestring_offset += 1; return 1; } /* write conformance / variance descriptor */ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type, unsigned int baseoff, const type_t *type, const expr_t *expr) { unsigned char operator_type = 0; unsigned char conftype = FC_NORMAL_CONFORMANCE; const char *conftype_string = "field"; const expr_t *subexpr; const type_t *iface = NULL; const char *name; if (!expr) { print_file(file, 2, "NdrFcLong(0xffffffff),\t/* -1 */\n"); return 4; } if (expr->is_const) { if (expr->cval > UCHAR_MAX * (USHRT_MAX + 1) + USHRT_MAX) error("write_conf_or_var_desc: constant value %d is greater than " "the maximum constant size of %d\n", expr->cval, UCHAR_MAX * (USHRT_MAX + 1) + USHRT_MAX); print_file(file, 2, "0x%x, /* Corr desc: constant, val = %d */\n", FC_CONSTANT_CONFORMANCE, expr->cval); print_file(file, 2, "0x%x,\n", expr->cval >> 16); print_file(file, 2, "NdrFcShort(0x%hx),\n", (unsigned short)expr->cval); return 4; } if (!cont_type) /* top-level conformance */ { conftype = FC_TOP_LEVEL_CONFORMANCE; conftype_string = "parameter"; cont_type = current_func->type; name = current_func->name; iface = current_iface; } else { name = cont_type->name; if (is_ptr(type) || (is_array(type) && type_array_is_decl_as_ptr(type))) { conftype = FC_POINTER_CONFORMANCE; conftype_string = "field pointer"; } } subexpr = expr; switch (subexpr->type) { case EXPR_PPTR: subexpr = subexpr->ref; operator_type = FC_DEREFERENCE; break; case EXPR_DIV: if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 2)) { subexpr = subexpr->ref; operator_type = FC_DIV_2; } break; case EXPR_MUL: if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 2)) { subexpr = subexpr->ref; operator_type = FC_MULT_2; } break; case EXPR_SUB: if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 1)) { subexpr = subexpr->ref; operator_type = FC_SUB_1; } break; case EXPR_ADD: if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 1)) { subexpr = subexpr->ref; operator_type = FC_ADD_1; } break; default: break; } if (subexpr->type == EXPR_IDENTIFIER) { const type_t *correlation_variable = NULL; unsigned char param_type = 0; unsigned int offset = 0; const var_t *var; struct expr_loc expr_loc; if (type_get_type(cont_type) == TYPE_FUNCTION) { var_list_t *args = type_get_function_args( cont_type ); if (is_object( iface )) offset += pointer_size; if (args) LIST_FOR_EACH_ENTRY( var, args, const var_t, entry ) { if (var->name && !strcmp(var->name, subexpr->u.sval)) { expr_loc.v = var; correlation_variable = var->type; break; } offset += get_stack_size( var, NULL ); } } else { var_list_t *fields = type_struct_get_fields( cont_type ); if (fields) LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry ) { unsigned int size = field_memsize( var->type, &offset ); if (var->name && !strcmp(var->name, subexpr->u.sval)) { expr_loc.v = var; correlation_variable = var->type; break; } offset += size; } } if (!correlation_variable) error("write_conf_or_var_desc: couldn't find variable %s in %s\n", subexpr->u.sval, name); expr_loc.attr = NULL; correlation_variable = expr_resolve_type(&expr_loc, cont_type, expr); offset -= baseoff; if (type_get_type(correlation_variable) == TYPE_BASIC) { switch (get_basic_fc(correlation_variable)) { case FC_CHAR: case FC_SMALL: param_type = FC_SMALL; break; case FC_BYTE: case FC_USMALL: param_type = FC_USMALL; break; case FC_WCHAR: case FC_SHORT: param_type = FC_SHORT; break; case FC_USHORT: param_type = FC_USHORT; break; case FC_LONG: param_type = FC_LONG; break; case FC_ULONG: param_type = FC_ULONG; break; default: error("write_conf_or_var_desc: conformance variable type not supported 0x%x\n", get_basic_fc(correlation_variable)); } } else if (type_get_type(correlation_variable) == TYPE_ENUM) { if (get_enum_fc(correlation_variable) == FC_ENUM32) param_type = FC_LONG; else param_type = FC_SHORT; } else if (type_get_type(correlation_variable) == TYPE_POINTER) { if (pointer_size == 8) param_type = FC_HYPER; else param_type = FC_LONG; } else { error("write_conf_or_var_desc: non-arithmetic type used as correlation variable %s\n", subexpr->u.sval); return 0; } print_file(file, 2, "0x%x,\t/* Corr desc: %s %s, %s */\n", conftype | param_type, conftype_string, subexpr->u.sval, string_of_type(param_type)); print_file(file, 2, "0x%x,\t/* %s */\n", operator_type, operator_type ? string_of_type(operator_type) : "no operators"); print_file(file, 2, "NdrFcShort(0x%hx),\t/* offset = %d */\n", (unsigned short)offset, offset); } else if (!iface || is_interpreted_func( iface, current_func )) { unsigned int callback_offset = 0; struct expr_eval_routine *eval; int found = 0; LIST_FOR_EACH_ENTRY(eval, &expr_eval_routines, struct expr_eval_routine, entry) { if (eval->cont_type == cont_type || (type_get_type( eval->cont_type ) == type_get_type( cont_type ) && eval->iface == iface && eval->name && name && !strcmp(eval->name, name) && !compare_expr(eval->expr, expr))) { found = 1; break; } callback_offset++; } if (!found) { eval = xmalloc (sizeof(*eval)); eval->iface = iface; eval->cont_type = cont_type; eval->name = xstrdup( name ); eval->baseoff = baseoff; eval->expr = expr; list_add_tail (&expr_eval_routines, &eval->entry); } if (callback_offset > USHRT_MAX) error("Maximum number of callback routines reached\n"); print_file(file, 2, "0x%x,\t/* Corr desc: %s in %s */\n", conftype, conftype_string, name); print_file(file, 2, "0x%x,\t/* %s */\n", FC_CALLBACK, "FC_CALLBACK"); print_file(file, 2, "NdrFcShort(0x%hx),\t/* %u */\n", (unsigned short)callback_offset, callback_offset); } else /* output a dummy corr desc that isn't used */ { print_file(file, 2, "0x%x,\t/* Corr desc: unused for %s */\n", conftype, name); print_file(file, 2, "0x0,\n" ); print_file(file, 2, "NdrFcShort(0x0),\n" ); } return 4; } /* return size and start offset of a data field based on current offset */ static unsigned int field_memsize(const type_t *type, unsigned int *offset) { unsigned int align = 0; unsigned int size = type_memsize_and_alignment( type, &align ); *offset = ROUND_SIZE( *offset, align ); return size; } static unsigned int fields_memsize(const var_list_t *fields, unsigned int *align) { unsigned int size = 0; unsigned int max_align; const var_t *v; if (!fields) return 0; LIST_FOR_EACH_ENTRY( v, fields, const var_t, entry ) { unsigned int falign = 0; unsigned int fsize = type_memsize_and_alignment(v->type, &falign); if (*align < falign) *align = falign; falign = clamp_align(falign); size = ROUND_SIZE(size, falign); size += fsize; } max_align = clamp_align(*align); size = ROUND_SIZE(size, max_align); return size; } static unsigned int union_memsize(const var_list_t *fields, unsigned int *pmaxa) { unsigned int size, maxs = 0; unsigned int align = *pmaxa; const var_t *v; if (fields) LIST_FOR_EACH_ENTRY( v, fields, const var_t, entry ) { /* we could have an empty default field with NULL type */ if (v->type) { size = type_memsize_and_alignment(v->type, &align); if (maxs < size) maxs = size; if (*pmaxa < align) *pmaxa = align; } } return maxs; } unsigned int type_memsize_and_alignment(const type_t *t, unsigned int *align) { unsigned int size = 0; switch (type_get_type(t)) { case TYPE_BASIC: switch (get_basic_fc(t)) { case FC_BYTE: case FC_CHAR: case FC_USMALL: case FC_SMALL: size = 1; if (size > *align) *align = size; break; case FC_WCHAR: case FC_USHORT: case FC_SHORT: size = 2; if (size > *align) *align = size; break; case FC_ULONG: case FC_LONG: case FC_ERROR_STATUS_T: case FC_FLOAT: size = 4; if (size > *align) *align = size; break; case FC_HYPER: case FC_DOUBLE: size = 8; if (size > *align) *align = size; break; case FC_INT3264: case FC_UINT3264: case FC_BIND_PRIMITIVE: assert( pointer_size ); size = pointer_size; if (size > *align) *align = size; break; default: error("type_memsize: Unknown type 0x%x\n", get_basic_fc(t)); size = 0; } break; case TYPE_ENUM: switch (get_enum_fc(t)) { case FC_ENUM16: case FC_ENUM32: size = 4; if (size > *align) *align = size; break; default: error("type_memsize: Unknown enum type\n"); size = 0; } break; case TYPE_STRUCT: size = fields_memsize(type_struct_get_fields(t), align); break; case TYPE_ENCAPSULATED_UNION: size = fields_memsize(type_encapsulated_union_get_fields(t), align); break; case TYPE_UNION: size = union_memsize(type_union_get_cases(t), align); break; case TYPE_POINTER: case TYPE_INTERFACE: assert( pointer_size ); size = pointer_size; if (size > *align) *align = size; break; case TYPE_ARRAY: if (!type_array_is_decl_as_ptr(t)) { if (is_conformant_array(t)) { type_memsize_and_alignment(type_array_get_element(t), align); size = 0; } else size = type_array_get_dim(t) * type_memsize_and_alignment(type_array_get_element(t), align); } else /* declared as a pointer */ { assert( pointer_size ); size = pointer_size; if (size > *align) *align = size; } break; case TYPE_ALIAS: case TYPE_VOID: case TYPE_COCLASS: case TYPE_MODULE: case TYPE_FUNCTION: case TYPE_BITFIELD: /* these types should not be encountered here due to language * restrictions (interface, void, coclass, module), logical * restrictions (alias - due to type_get_type call above) or * checking restrictions (function, bitfield). */ assert(0); } return size; } unsigned int type_memsize(const type_t *t) { unsigned int align = 0; return type_memsize_and_alignment( t, &align ); } static unsigned int type_buffer_alignment(const type_t *t) { const var_list_t *fields; const var_t *var; unsigned int max = 0, align; switch (type_get_type(t)) { case TYPE_BASIC: switch (get_basic_fc(t)) { case FC_BYTE: case FC_CHAR: case FC_USMALL: case FC_SMALL: return 1; case FC_WCHAR: case FC_USHORT: case FC_SHORT: return 2; case FC_ULONG: case FC_LONG: case FC_ERROR_STATUS_T: case FC_FLOAT: case FC_INT3264: case FC_UINT3264: return 4; case FC_HYPER: case FC_DOUBLE: return 8; default: error("type_buffer_alignment: Unknown type 0x%x\n", get_basic_fc(t)); } break; case TYPE_ENUM: switch (get_enum_fc(t)) { case FC_ENUM16: return 2; case FC_ENUM32: return 4; default: error("type_buffer_alignment: Unknown enum type\n"); } break; case TYPE_STRUCT: if (!(fields = type_struct_get_fields(t))) break; LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry ) { if (!var->type) continue; align = type_buffer_alignment( var->type ); if (max < align) max = align; } break; case TYPE_ENCAPSULATED_UNION: if (!(fields = type_encapsulated_union_get_fields(t))) break; LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry ) { if (!var->type) continue; align = type_buffer_alignment( var->type ); if (max < align) max = align; } break; case TYPE_UNION: if (!(fields = type_union_get_cases(t))) break; LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry ) { if (!var->type) continue; align = type_buffer_alignment( var->type ); if (max < align) max = align; } break; case TYPE_ARRAY: if (!type_array_is_decl_as_ptr(t)) return type_buffer_alignment( type_array_get_element(t) ); /* else fall through */ case TYPE_POINTER: return 4; case TYPE_INTERFACE: case TYPE_ALIAS: case TYPE_VOID: case TYPE_COCLASS: case TYPE_MODULE: case TYPE_FUNCTION: case TYPE_BITFIELD: /* these types should not be encountered here due to language * restrictions (interface, void, coclass, module), logical * restrictions (alias - due to type_get_type call above) or * checking restrictions (function, bitfield). */ assert(0); } return max; } int is_full_pointer_function(const var_t *func) { const var_t *var; if (type_has_full_pointer(type_function_get_rettype(func->type), func->attrs, TRUE)) return TRUE; if (!type_get_function_args(func->type)) return FALSE; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) if (type_has_full_pointer( var->type, var->attrs, TRUE )) return TRUE; return FALSE; } void write_full_pointer_init(FILE *file, int indent, const var_t *func, int is_server) { print_file(file, indent, "__frame->_StubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,%s);\n", is_server ? "XLAT_SERVER" : "XLAT_CLIENT"); fprintf(file, "\n"); } void write_full_pointer_free(FILE *file, int indent, const var_t *func) { print_file(file, indent, "NdrFullPointerXlatFree(__frame->_StubMsg.FullPtrXlatTables);\n"); fprintf(file, "\n"); } static unsigned int write_nonsimple_pointer(FILE *file, const attr_list_t *attrs, const type_t *type, enum type_context context, unsigned int offset, unsigned int *typeformat_offset) { unsigned int start_offset = *typeformat_offset; short reloff = offset - (*typeformat_offset + 2); int in_attr, out_attr; int pointer_type; unsigned char flags = 0; pointer_type = get_pointer_fc_context(type, attrs, context); in_attr = is_attr(attrs, ATTR_IN); out_attr = is_attr(attrs, ATTR_OUT); if (!in_attr && !out_attr) in_attr = 1; if (out_attr && !in_attr && pointer_type == FC_RP) flags |= FC_ALLOCED_ON_STACK; if (is_ptr(type)) { type_t *ref = type_pointer_get_ref(type); if(is_declptr(ref) && !is_user_type(ref)) flags |= FC_POINTER_DEREF; } print_file(file, 2, "0x%x, 0x%x,\t\t/* %s", pointer_type, flags, string_of_type(pointer_type)); if (file) { if (flags & FC_ALLOCED_ON_STACK) fprintf(file, " [allocated_on_stack]"); if (flags & FC_POINTER_DEREF) fprintf(file, " [pointer_deref]"); fprintf(file, " */\n"); } print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%u) */\n", reloff, reloff, offset); *typeformat_offset += 4; return start_offset; } static unsigned int write_simple_pointer(FILE *file, const attr_list_t *attrs, const type_t *type, enum type_context context) { unsigned char fc; unsigned char pointer_fc; const type_t *ref; int in_attr = is_attr(attrs, ATTR_IN); int out_attr = is_attr(attrs, ATTR_OUT); unsigned char flags = FC_SIMPLE_POINTER; /* for historical reasons, write_simple_pointer also handled string types, * but no longer does. catch bad uses of the function with this check */ if (is_string_type(attrs, type)) error("write_simple_pointer: can't handle type %s which is a string type\n", type->name); pointer_fc = get_pointer_fc_context(type, attrs, context); ref = type_pointer_get_ref(type); if (type_get_type(ref) == TYPE_ENUM) fc = get_enum_fc(ref); else fc = get_basic_fc(ref); if (out_attr && !in_attr) flags |= FC_ALLOCED_ON_STACK; print_file(file, 2, "0x%02x, 0x%x,\t/* %s %s[simple_pointer] */\n", pointer_fc, flags, string_of_type(pointer_fc), flags & FC_ALLOCED_ON_STACK ? "[allocated_on_stack] " : ""); print_file(file, 2, "0x%02x,\t/* %s */\n", fc, string_of_type(fc)); print_file(file, 2, "0x5c,\t/* FC_PAD */\n"); return 4; } static void print_start_tfs_comment(FILE *file, type_t *t, unsigned int tfsoff) { print_file(file, 0, "/* %u (", tfsoff); write_type_decl(file, t, NULL); print_file(file, 0, ") */\n"); } static unsigned int write_pointer_tfs(FILE *file, const attr_list_t *attrs, type_t *type, unsigned int ref_offset, enum type_context context, unsigned int *typestring_offset) { unsigned int offset = *typestring_offset; type_t *ref = type_pointer_get_ref(type); print_start_tfs_comment(file, type, offset); update_tfsoff(type, offset, file); switch (typegen_detect_type(ref, attrs, TDT_ALL_TYPES)) { case TGT_BASIC: case TGT_ENUM: *typestring_offset += write_simple_pointer(file, attrs, type, context); break; default: if (ref_offset) write_nonsimple_pointer(file, attrs, type, context, ref_offset, typestring_offset); break; } return offset; } static int processed(const type_t *type) { return type->typestring_offset && !type->tfswrite; } static int user_type_has_variable_size(const type_t *t) { if (is_ptr(t)) return TRUE; else if (type_get_type(t) == TYPE_STRUCT) { switch (get_struct_fc(t)) { case FC_PSTRUCT: case FC_CSTRUCT: case FC_CPSTRUCT: case FC_CVSTRUCT: return TRUE; } } /* Note: Since this only applies to user types, we can't have a conformant array here, and strings should get filed under pointer in this case. */ return FALSE; } static unsigned int write_user_tfs(FILE *file, type_t *type, unsigned int *tfsoff) { unsigned int start, absoff, flags; const char *name = NULL; type_t *utype = get_user_type(type, &name); unsigned int usize = type_memsize(utype); unsigned int ualign = type_buffer_alignment(utype); unsigned int size = type_memsize(type); unsigned short funoff = user_type_offset(name); short reloff; if (processed(type)) return type->typestring_offset; guard_rec(type); if(user_type_has_variable_size(utype)) usize = 0; if (type_get_type(utype) == TYPE_BASIC || type_get_type(utype) == TYPE_ENUM) { unsigned char fc; if (type_get_type(utype) == TYPE_ENUM) fc = get_enum_fc(utype); else fc = get_basic_fc(utype); absoff = *tfsoff; print_start_tfs_comment(file, utype, absoff); print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc)); print_file(file, 2, "0x5c,\t/* FC_PAD */\n"); *tfsoff += 2; } else { if (!processed(utype)) write_embedded_types(file, NULL, utype, utype->name, TRUE, tfsoff); absoff = utype->typestring_offset; } if (type_get_type(utype) == TYPE_POINTER && get_pointer_fc(utype, NULL, FALSE) == FC_RP) flags = 0x40; else if (type_get_type(utype) == TYPE_POINTER && get_pointer_fc(utype, NULL, FALSE) == FC_UP) flags = 0x80; else flags = 0; start = *tfsoff; update_tfsoff(type, start, file); print_start_tfs_comment(file, type, start); print_file(file, 2, "0x%x,\t/* FC_USER_MARSHAL */\n", FC_USER_MARSHAL); print_file(file, 2, "0x%x,\t/* Alignment= %d, Flags= %02x */\n", flags | (ualign - 1), ualign - 1, flags); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Function offset= %hu */\n", funoff, funoff); print_file(file, 2, "NdrFcShort(0x%hx),\t/* %u */\n", (unsigned short)size, size); print_file(file, 2, "NdrFcShort(0x%hx),\t/* %u */\n", (unsigned short)usize, usize); *tfsoff += 8; reloff = absoff - *tfsoff; print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%u) */\n", reloff, reloff, absoff); *tfsoff += 2; return start; } static void write_member_type(FILE *file, const type_t *cont, int cont_is_complex, const attr_list_t *attrs, const type_t *type, unsigned int *corroff, unsigned int *tfsoff) { if (is_embedded_complex(type) && !is_conformant_array(type)) { unsigned int absoff; short reloff; if (type_get_type(type) == TYPE_UNION && is_attr(attrs, ATTR_SWITCHIS)) { absoff = *corroff; *corroff += 8; } else { absoff = type->typestring_offset; } reloff = absoff - (*tfsoff + 2); print_file(file, 2, "0x4c,\t/* FC_EMBEDDED_COMPLEX */\n"); /* padding is represented using FC_STRUCTPAD* types, so presumably * this is left over in the format for historical purposes in MIDL * or rpcrt4. */ print_file(file, 2, "0x0,\n"); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%u) */\n", reloff, reloff, absoff); *tfsoff += 4; } else if (is_ptr(type) || is_conformant_array(type)) { unsigned char fc = cont_is_complex ? FC_POINTER : FC_LONG; print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc)); *tfsoff += 1; } else if (!write_base_type(file, type, tfsoff)) error("Unsupported member type %d\n", type_get_type(type)); } static void write_array_element_type(FILE *file, const attr_list_t *attrs, const type_t *type, int cont_is_complex, unsigned int *tfsoff) { type_t *elem = type_array_get_element(type); if (!is_embedded_complex(elem) && is_ptr(elem)) { type_t *ref = type_pointer_get_ref(elem); if (processed(ref)) { write_nonsimple_pointer(file, NULL, elem, TYPE_CONTEXT_CONTAINER, ref->typestring_offset, tfsoff); return; } if (cont_is_complex && is_string_type(attrs, elem)) { write_string_tfs(file, NULL, elem, TYPE_CONTEXT_CONTAINER, NULL, tfsoff); return; } if (!is_string_type(NULL, elem) && (type_get_type(ref) == TYPE_BASIC || type_get_type(ref) == TYPE_ENUM)) { *tfsoff += write_simple_pointer(file, NULL, elem, TYPE_CONTEXT_CONTAINER); return; } } write_member_type(file, type, cont_is_complex, NULL, elem, NULL, tfsoff); } static void write_end(FILE *file, unsigned int *tfsoff) { if (*tfsoff % 2 == 0) { print_file(file, 2, "0x%x,\t/* FC_PAD */\n", FC_PAD); *tfsoff += 1; } print_file(file, 2, "0x%x,\t/* FC_END */\n", FC_END); *tfsoff += 1; } static void write_descriptors(FILE *file, type_t *type, unsigned int *tfsoff) { unsigned int offset = 0; var_list_t *fs = type_struct_get_fields(type); var_t *f; if (fs) LIST_FOR_EACH_ENTRY(f, fs, var_t, entry) { type_t *ft = f->type; unsigned int size = field_memsize( ft, &offset ); if (type_get_type(ft) == TYPE_UNION && is_attr(f->attrs, ATTR_SWITCHIS)) { short reloff; unsigned int absoff = ft->typestring_offset; if (is_attr(ft->attrs, ATTR_SWITCHTYPE)) absoff += 8; /* we already have a corr descr, skip it */ reloff = absoff - (*tfsoff + 6); print_file(file, 0, "/* %d */\n", *tfsoff); print_file(file, 2, "0x%x,\t/* FC_NON_ENCAPSULATED_UNION */\n", FC_NON_ENCAPSULATED_UNION); print_file(file, 2, "0x%x,\t/* FIXME: always FC_LONG */\n", FC_LONG); write_conf_or_var_desc(file, current_structure, offset, ft, get_attrp(f->attrs, ATTR_SWITCHIS)); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%u) */\n", (unsigned short)reloff, reloff, absoff); *tfsoff += 8; } offset += size; } } static int write_pointer_description_offsets( FILE *file, const attr_list_t *attrs, type_t *type, unsigned int *offset_in_memory, unsigned int *offset_in_buffer, unsigned int *typestring_offset) { int written = 0; if ((is_ptr(type) && type_get_type(type_pointer_get_ref(type)) != TYPE_INTERFACE) || (is_array(type) && type_array_is_decl_as_ptr(type))) { if (offset_in_memory && offset_in_buffer) { unsigned int memsize; /* pointer instance * * note that MSDN states that for pointer layouts in structures, * this is a negative offset from the end of the structure, but * this statement is incorrect. all offsets are positive */ print_file(file, 2, "NdrFcShort(0x%hx),\t/* Memory offset = %d */\n", (unsigned short)*offset_in_memory, *offset_in_memory); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Buffer offset = %d */\n", (unsigned short)*offset_in_buffer, *offset_in_buffer); memsize = type_memsize(type); *offset_in_memory += memsize; /* increment these separately as in the case of conformant (varying) * structures these start at different values */ *offset_in_buffer += memsize; } *typestring_offset += 4; if (is_ptr(type)) { type_t *ref = type_pointer_get_ref(type); if (is_string_type(attrs, type)) write_string_tfs(file, attrs, type, TYPE_CONTEXT_CONTAINER, NULL, typestring_offset); else if (processed(ref)) write_nonsimple_pointer(file, attrs, type, TYPE_CONTEXT_CONTAINER, ref->typestring_offset, typestring_offset); else if (type_get_type(ref) == TYPE_BASIC || type_get_type(ref) == TYPE_ENUM) *typestring_offset += write_simple_pointer(file, attrs, type, TYPE_CONTEXT_CONTAINER); else error("write_pointer_description_offsets: type format string unknown\n"); } else { unsigned int offset = type->typestring_offset; /* skip over the pointer that is written for strings, since a * pointer has to be written in-place here */ if (is_string_type(attrs, type)) offset += 4; write_nonsimple_pointer(file, attrs, type, TYPE_CONTEXT_CONTAINER, offset, typestring_offset); } return 1; } if (is_array(type)) { return write_pointer_description_offsets( file, attrs, type_array_get_element(type), offset_in_memory, offset_in_buffer, typestring_offset); } else if (is_non_complex_struct(type)) { /* otherwise search for interesting fields to parse */ const var_t *v; LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry ) { if (offset_in_memory && offset_in_buffer) { unsigned int padding; unsigned int align = 0; type_memsize_and_alignment(v->type, &align); padding = ROUNDING(*offset_in_memory, align); *offset_in_memory += padding; *offset_in_buffer += padding; } written += write_pointer_description_offsets( file, v->attrs, v->type, offset_in_memory, offset_in_buffer, typestring_offset); } } else { if (offset_in_memory && offset_in_buffer) { unsigned int memsize = type_memsize(type); *offset_in_memory += memsize; /* increment these separately as in the case of conformant (varying) * structures these start at different values */ *offset_in_buffer += memsize; } } return written; } static int write_no_repeat_pointer_descriptions( FILE *file, const attr_list_t *attrs, type_t *type, unsigned int *offset_in_memory, unsigned int *offset_in_buffer, unsigned int *typestring_offset) { int written = 0; if (is_ptr(type) || (is_conformant_array(type) && type_array_is_decl_as_ptr(type))) { print_file(file, 2, "0x%02x, /* FC_NO_REPEAT */\n", FC_NO_REPEAT); print_file(file, 2, "0x%02x, /* FC_PAD */\n", FC_PAD); *typestring_offset += 2; return write_pointer_description_offsets(file, attrs, type, offset_in_memory, offset_in_buffer, typestring_offset); } if (is_non_complex_struct(type)) { const var_t *v; LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry ) { if (offset_in_memory && offset_in_buffer) { unsigned int padding; unsigned int align = 0; type_memsize_and_alignment(v->type, &align); padding = ROUNDING(*offset_in_memory, align); *offset_in_memory += padding; *offset_in_buffer += padding; } written += write_no_repeat_pointer_descriptions( file, v->attrs, v->type, offset_in_memory, offset_in_buffer, typestring_offset); } } else { unsigned int memsize = type_memsize(type); *offset_in_memory += memsize; /* increment these separately as in the case of conformant (varying) * structures these start at different values */ *offset_in_buffer += memsize; } return written; } /* Note: if file is NULL return value is number of pointers to write, else * it is the number of type format characters written */ static int write_fixed_array_pointer_descriptions( FILE *file, const attr_list_t *attrs, type_t *type, unsigned int *offset_in_memory, unsigned int *offset_in_buffer, unsigned int *typestring_offset) { int pointer_count = 0; if (type_get_type(type) == TYPE_ARRAY && !type_array_has_conformance(type) && !type_array_has_variance(type)) { unsigned int temp = 0; /* unfortunately, this needs to be done in two passes to avoid * writing out redundant FC_FIXED_REPEAT descriptions */ pointer_count = write_pointer_description_offsets( NULL, attrs, type_array_get_element(type), NULL, NULL, &temp); if (pointer_count > 0) { unsigned int increment_size; unsigned int offset_of_array_pointer_mem = 0; unsigned int offset_of_array_pointer_buf = 0; increment_size = type_memsize(type_array_get_element(type)); print_file(file, 2, "0x%02x, /* FC_FIXED_REPEAT */\n", FC_FIXED_REPEAT); print_file(file, 2, "0x%02x, /* FC_PAD */\n", FC_PAD); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Iterations = %d */\n", (unsigned short)type_array_get_dim(type), type_array_get_dim(type)); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Increment = %d */\n", (unsigned short)increment_size, increment_size); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset to array = %d */\n", (unsigned short)*offset_in_memory, *offset_in_memory); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Number of pointers = %d */\n", (unsigned short)pointer_count, pointer_count); *typestring_offset += 10; pointer_count = write_pointer_description_offsets( file, attrs, type, &offset_of_array_pointer_mem, &offset_of_array_pointer_buf, typestring_offset); } } else if (type_get_type(type) == TYPE_STRUCT) { const var_t *v; LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry ) { if (offset_in_memory && offset_in_buffer) { unsigned int padding; unsigned int align = 0; type_memsize_and_alignment(v->type, &align); padding = ROUNDING(*offset_in_memory, align); *offset_in_memory += padding; *offset_in_buffer += padding; } pointer_count += write_fixed_array_pointer_descriptions( file, v->attrs, v->type, offset_in_memory, offset_in_buffer, typestring_offset); } } else { if (offset_in_memory && offset_in_buffer) { unsigned int memsize; memsize = type_memsize(type); *offset_in_memory += memsize; /* increment these separately as in the case of conformant (varying) * structures these start at different values */ *offset_in_buffer += memsize; } } return pointer_count; } /* Note: if file is NULL return value is number of pointers to write, else * it is the number of type format characters written */ static int write_conformant_array_pointer_descriptions( FILE *file, const attr_list_t *attrs, type_t *type, unsigned int offset_in_memory, unsigned int *typestring_offset) { int pointer_count = 0; if (is_conformant_array(type) && !type_array_has_variance(type)) { unsigned int temp = 0; /* unfortunately, this needs to be done in two passes to avoid * writing out redundant FC_VARIABLE_REPEAT descriptions */ pointer_count = write_pointer_description_offsets( NULL, attrs, type_array_get_element(type), NULL, NULL, &temp); if (pointer_count > 0) { unsigned int increment_size; unsigned int offset_of_array_pointer_mem = offset_in_memory; unsigned int offset_of_array_pointer_buf = offset_in_memory; increment_size = type_memsize(type_array_get_element(type)); if (increment_size > USHRT_MAX) error("array size of %u bytes is too large\n", increment_size); print_file(file, 2, "0x%02x, /* FC_VARIABLE_REPEAT */\n", FC_VARIABLE_REPEAT); print_file(file, 2, "0x%02x, /* FC_FIXED_OFFSET */\n", FC_FIXED_OFFSET); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Increment = %d */\n", (unsigned short)increment_size, increment_size); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset to array = %d */\n", (unsigned short)offset_in_memory, offset_in_memory); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Number of pointers = %d */\n", (unsigned short)pointer_count, pointer_count); *typestring_offset += 8; pointer_count = write_pointer_description_offsets( file, attrs, type_array_get_element(type), &offset_of_array_pointer_mem, &offset_of_array_pointer_buf, typestring_offset); } } return pointer_count; } /* Note: if file is NULL return value is number of pointers to write, else * it is the number of type format characters written */ static int write_varying_array_pointer_descriptions( FILE *file, const attr_list_t *attrs, type_t *type, unsigned int *offset_in_memory, unsigned int *offset_in_buffer, unsigned int *typestring_offset) { int pointer_count = 0; if (is_array(type) && type_array_has_variance(type)) { unsigned int temp = 0; /* unfortunately, this needs to be done in two passes to avoid * writing out redundant FC_VARIABLE_REPEAT descriptions */ pointer_count = write_pointer_description_offsets( NULL, attrs, type_array_get_element(type), NULL, NULL, &temp); if (pointer_count > 0) { unsigned int increment_size; increment_size = type_memsize(type_array_get_element(type)); if (increment_size > USHRT_MAX) error("array size of %u bytes is too large\n", increment_size); print_file(file, 2, "0x%02x, /* FC_VARIABLE_REPEAT */\n", FC_VARIABLE_REPEAT); print_file(file, 2, "0x%02x, /* FC_VARIABLE_OFFSET */\n", FC_VARIABLE_OFFSET); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Increment = %d */\n", (unsigned short)increment_size, increment_size); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset to array = %d */\n", (unsigned short)*offset_in_memory, *offset_in_memory); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Number of pointers = %d */\n", (unsigned short)pointer_count, pointer_count); *typestring_offset += 8; pointer_count = write_pointer_description_offsets( file, attrs, type_array_get_element(type), offset_in_memory, offset_in_buffer, typestring_offset); } } else if (type_get_type(type) == TYPE_STRUCT) { const var_t *v; LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry ) { if (offset_in_memory && offset_in_buffer) { unsigned int align = 0, padding; if (is_array(v->type) && type_array_has_variance(v->type)) { *offset_in_buffer = ROUND_SIZE(*offset_in_buffer, 4); /* skip over variance and offset in buffer */ *offset_in_buffer += 8; } type_memsize_and_alignment(v->type, &align); padding = ROUNDING(*offset_in_memory, align); *offset_in_memory += padding; *offset_in_buffer += padding; } pointer_count += write_varying_array_pointer_descriptions( file, v->attrs, v->type, offset_in_memory, offset_in_buffer, typestring_offset); } } else { if (offset_in_memory && offset_in_buffer) { unsigned int memsize = type_memsize(type); *offset_in_memory += memsize; /* increment these separately as in the case of conformant (varying) * structures these start at different values */ *offset_in_buffer += memsize; } } return pointer_count; } static void write_pointer_description(FILE *file, const attr_list_t *attrs, type_t *type, unsigned int *typestring_offset) { unsigned int offset_in_buffer; unsigned int offset_in_memory; /* pass 1: search for single instance of a pointer (i.e. don't descend * into arrays) */ if (!is_array(type)) { offset_in_memory = 0; offset_in_buffer = 0; write_no_repeat_pointer_descriptions( file, NULL, type, &offset_in_memory, &offset_in_buffer, typestring_offset); } /* pass 2: search for pointers in fixed arrays */ offset_in_memory = 0; offset_in_buffer = 0; write_fixed_array_pointer_descriptions( file, NULL, type, &offset_in_memory, &offset_in_buffer, typestring_offset); /* pass 3: search for pointers in conformant only arrays (but don't descend * into conformant varying or varying arrays) */ if (is_conformant_array(type) && (type_array_is_decl_as_ptr(type) || !current_structure)) write_conformant_array_pointer_descriptions( file, attrs, type, 0, typestring_offset); else if (type_get_type(type) == TYPE_STRUCT && get_struct_fc(type) == FC_CPSTRUCT) { type_t *carray = find_array_or_string_in_struct(type)->type; write_conformant_array_pointer_descriptions( file, NULL, carray, type_memsize(type), typestring_offset); } /* pass 4: search for pointers in varying arrays */ offset_in_memory = 0; offset_in_buffer = 0; write_varying_array_pointer_descriptions( file, NULL, type, &offset_in_memory, &offset_in_buffer, typestring_offset); } static unsigned int write_string_tfs(FILE *file, const attr_list_t *attrs, type_t *type, enum type_context context, const char *name, unsigned int *typestring_offset) { unsigned int start_offset; unsigned char rtype; type_t *elem_type; int is_processed = processed(type); start_offset = *typestring_offset; if (is_declptr(type)) { unsigned char flag = is_conformant_array(type) ? 0 : FC_SIMPLE_POINTER; int pointer_type = get_pointer_fc_context(type, attrs, context); if (!pointer_type) pointer_type = FC_RP; print_start_tfs_comment(file, type, *typestring_offset); print_file(file, 2,"0x%x, 0x%x,\t/* %s%s */\n", pointer_type, flag, string_of_type(pointer_type), flag ? " [simple_pointer]" : ""); *typestring_offset += 2; if (!flag) { print_file(file, 2, "NdrFcShort(0x2),\n"); *typestring_offset += 2; } is_processed = FALSE; } if (is_array(type)) elem_type = type_array_get_element(type); else elem_type = type_pointer_get_ref(type); if (type_get_type(elem_type) == TYPE_POINTER && is_array(type)) return write_array_tfs(file, attrs, type, name, typestring_offset); if (type_get_type(elem_type) != TYPE_BASIC) { error("write_string_tfs: Unimplemented for non-basic type %s\n", name); return start_offset; } rtype = get_basic_fc(elem_type); if ((rtype != FC_BYTE) && (rtype != FC_CHAR) && (rtype != FC_WCHAR)) { error("write_string_tfs: Unimplemented for type 0x%x of name: %s\n", rtype, name); return start_offset; } if (type_get_type(type) == TYPE_ARRAY && !type_array_has_conformance(type)) { unsigned int dim = type_array_get_dim(type); if (is_processed) return start_offset; /* FIXME: multi-dimensional array */ if (0xffffu < dim) error("array size for parameter %s exceeds %u bytes by %u bytes\n", name, 0xffffu, dim - 0xffffu); if (rtype == FC_WCHAR) WRITE_FCTYPE(file, FC_WSTRING, *typestring_offset); else WRITE_FCTYPE(file, FC_CSTRING, *typestring_offset); print_file(file, 2, "0x%x,\t/* FC_PAD */\n", FC_PAD); *typestring_offset += 2; print_file(file, 2, "NdrFcShort(0x%hx),\t/* %d */\n", (unsigned short)dim, dim); *typestring_offset += 2; update_tfsoff(type, start_offset, file); return start_offset; } else if (is_conformant_array(type)) { if (rtype == FC_WCHAR) WRITE_FCTYPE(file, FC_C_WSTRING, *typestring_offset); else WRITE_FCTYPE(file, FC_C_CSTRING, *typestring_offset); print_file(file, 2, "0x%x,\t/* FC_STRING_SIZED */\n", FC_STRING_SIZED); *typestring_offset += 2; *typestring_offset += write_conf_or_var_desc( file, current_structure, (!type_array_is_decl_as_ptr(type) && current_structure ? type_memsize(current_structure) : 0), type, type_array_get_conformance(type)); update_tfsoff(type, start_offset, file); return start_offset; } else { if (is_processed) return start_offset; if (rtype == FC_WCHAR) WRITE_FCTYPE(file, FC_C_WSTRING, *typestring_offset); else WRITE_FCTYPE(file, FC_C_CSTRING, *typestring_offset); print_file(file, 2, "0x%x,\t/* FC_PAD */\n", FC_PAD); *typestring_offset += 2; update_tfsoff(type, start_offset, file); return start_offset; } } static unsigned int write_array_tfs(FILE *file, const attr_list_t *attrs, type_t *type, const char *name, unsigned int *typestring_offset) { const expr_t *length_is = type_array_get_variance(type); const expr_t *size_is = type_array_get_conformance(type); unsigned int align; unsigned int size; unsigned int start_offset; unsigned char fc; int pointer_type = get_attrv(attrs, ATTR_POINTERTYPE); unsigned int baseoff = !type_array_is_decl_as_ptr(type) && current_structure ? type_memsize(current_structure) : 0; if (!pointer_type) pointer_type = FC_RP; if (!is_string_type(attrs, type_array_get_element(type))) write_embedded_types(file, attrs, type_array_get_element(type), name, FALSE, typestring_offset); size = type_memsize(is_conformant_array(type) ? type_array_get_element(type) : type); align = type_buffer_alignment(is_conformant_array(type) ? type_array_get_element(type) : type); fc = get_array_fc(type); start_offset = *typestring_offset; update_tfsoff(type, start_offset, file); print_start_tfs_comment(file, type, start_offset); print_file(file, 2, "0x%02x,\t/* %s */\n", fc, string_of_type(fc)); print_file(file, 2, "0x%x,\t/* %d */\n", align - 1, align - 1); *typestring_offset += 2; align = 0; if (fc != FC_BOGUS_ARRAY) { if (fc == FC_LGFARRAY || fc == FC_LGVARRAY) { print_file(file, 2, "NdrFcLong(0x%x),\t/* %u */\n", size, size); *typestring_offset += 4; } else { print_file(file, 2, "NdrFcShort(0x%hx),\t/* %u */\n", (unsigned short)size, size); *typestring_offset += 2; } if (is_conformant_array(type)) *typestring_offset += write_conf_or_var_desc(file, current_structure, baseoff, type, size_is); if (fc == FC_SMVARRAY || fc == FC_LGVARRAY) { unsigned int elsize = type_memsize(type_array_get_element(type)); unsigned int dim = type_array_get_dim(type); if (fc == FC_LGVARRAY) { print_file(file, 2, "NdrFcLong(0x%x),\t/* %u */\n", dim, dim); *typestring_offset += 4; } else { print_file(file, 2, "NdrFcShort(0x%hx),\t/* %u */\n", (unsigned short)dim, dim); *typestring_offset += 2; } print_file(file, 2, "NdrFcShort(0x%hx),\t/* %u */\n", (unsigned short)elsize, elsize); *typestring_offset += 2; } if (length_is) *typestring_offset += write_conf_or_var_desc(file, current_structure, baseoff, type, length_is); if (type_has_pointers(type_array_get_element(type)) && (type_array_is_decl_as_ptr(type) || !current_structure)) { print_file(file, 2, "0x%x,\t/* FC_PP */\n", FC_PP); print_file(file, 2, "0x%x,\t/* FC_PAD */\n", FC_PAD); *typestring_offset += 2; write_pointer_description(file, is_string_type(attrs, type) ? attrs : NULL, type, typestring_offset); print_file(file, 2, "0x%x,\t/* FC_END */\n", FC_END); *typestring_offset += 1; } write_array_element_type(file, is_string_type(attrs, type) ? attrs : NULL, type, FALSE, typestring_offset); write_end(file, typestring_offset); } else { unsigned int dim = size_is ? 0 : type_array_get_dim(type); print_file(file, 2, "NdrFcShort(0x%hx),\t/* %u */\n", (unsigned short)dim, dim); *typestring_offset += 2; *typestring_offset += write_conf_or_var_desc(file, current_structure, baseoff, type, size_is); *typestring_offset += write_conf_or_var_desc(file, current_structure, baseoff, type, length_is); write_array_element_type(file, is_string_type(attrs, type) ? attrs : NULL, type, TRUE, typestring_offset); write_end(file, typestring_offset); } return start_offset; } static const var_t *find_array_or_string_in_struct(const type_t *type) { const var_list_t *fields = type_struct_get_fields(type); const var_t *last_field; const type_t *ft; if (!fields || list_empty(fields)) return NULL; last_field = LIST_ENTRY( list_tail(fields), const var_t, entry ); ft = last_field->type; if (is_conformant_array(ft) && !type_array_is_decl_as_ptr(ft)) return last_field; if (type_get_type(ft) == TYPE_STRUCT) return find_array_or_string_in_struct(ft); else return NULL; } static void write_struct_members(FILE *file, const type_t *type, int is_complex, unsigned int *corroff, unsigned int *typestring_offset) { const var_t *field; unsigned short offset = 0; unsigned int salign = 1; int padding; var_list_t *fields = type_struct_get_fields(type); if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) { type_t *ft = field->type; unsigned int align = 0; unsigned int size = type_memsize_and_alignment(ft, &align); align = clamp_align(align); if (salign < align) salign = align; if (!is_conformant_array(ft) || type_array_is_decl_as_ptr(ft)) { if ((align - 1) & offset) { unsigned char fc = 0; switch (align) { case 2: fc = FC_ALIGNM2; break; case 4: fc = FC_ALIGNM4; break; case 8: fc = FC_ALIGNM8; break; default: error("write_struct_members: cannot align type %d\n", type_get_type(ft)); } print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc)); offset = ROUND_SIZE(offset, align); *typestring_offset += 1; } write_member_type(file, type, is_complex, field->attrs, field->type, corroff, typestring_offset); offset += size; } } padding = ROUNDING(offset, salign); if (padding) { print_file(file, 2, "0x%x,\t/* FC_STRUCTPAD%d */\n", FC_STRUCTPAD1 + padding - 1, padding); *typestring_offset += 1; } write_end(file, typestring_offset); } static unsigned int write_struct_tfs(FILE *file, type_t *type, const char *name, unsigned int *tfsoff) { const type_t *save_current_structure = current_structure; unsigned int total_size; const var_t *array; unsigned int start_offset; unsigned int align; unsigned int corroff; var_t *f; unsigned char fc = get_struct_fc(type); var_list_t *fields = type_struct_get_fields(type); if (processed(type)) return type->typestring_offset; guard_rec(type); current_structure = type; total_size = type_memsize(type); align = type_buffer_alignment(type); if (total_size > USHRT_MAX) error("structure size for %s exceeds %d bytes by %d bytes\n", name, USHRT_MAX, total_size - USHRT_MAX); if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry) write_embedded_types(file, f->attrs, f->type, f->name, FALSE, tfsoff); array = find_array_or_string_in_struct(type); if (array && !processed(array->type)) { if(is_string_type(array->attrs, array->type)) write_string_tfs(file, array->attrs, array->type, TYPE_CONTEXT_CONTAINER, array->name, tfsoff); else write_array_tfs(file, array->attrs, array->type, array->name, tfsoff); } corroff = *tfsoff; write_descriptors(file, type, tfsoff); start_offset = *tfsoff; update_tfsoff(type, start_offset, file); print_start_tfs_comment(file, type, start_offset); print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc)); print_file(file, 2, "0x%x,\t/* %d */\n", align - 1, align - 1); print_file(file, 2, "NdrFcShort(0x%hx),\t/* %d */\n", (unsigned short)total_size, total_size); *tfsoff += 4; if (array) { unsigned int absoff = array->type->typestring_offset; short reloff = absoff - *tfsoff; print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%u) */\n", reloff, reloff, absoff); *tfsoff += 2; } else if (fc == FC_BOGUS_STRUCT) { print_file(file, 2, "NdrFcShort(0x0),\n"); *tfsoff += 2; } if (fc == FC_BOGUS_STRUCT) { /* On the sizing pass, type->ptrdesc may be zero, but it's ok as nothing is written to file yet. On the actual writing pass, this will have been updated. */ unsigned int absoff = type->ptrdesc ? type->ptrdesc : *tfsoff; int reloff = absoff - *tfsoff; assert( reloff >= 0 ); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %d (%u) */\n", (unsigned short)reloff, reloff, absoff); *tfsoff += 2; } else if ((fc == FC_PSTRUCT) || (fc == FC_CPSTRUCT) || (fc == FC_CVSTRUCT && type_has_pointers(type))) { print_file(file, 2, "0x%x,\t/* FC_PP */\n", FC_PP); print_file(file, 2, "0x%x,\t/* FC_PAD */\n", FC_PAD); *tfsoff += 2; write_pointer_description(file, NULL, type, tfsoff); print_file(file, 2, "0x%x,\t/* FC_END */\n", FC_END); *tfsoff += 1; } write_struct_members(file, type, fc == FC_BOGUS_STRUCT, &corroff, tfsoff); if (fc == FC_BOGUS_STRUCT) { const var_t *f; type->ptrdesc = *tfsoff; if (fields) LIST_FOR_EACH_ENTRY(f, fields, const var_t, entry) { type_t *ft = f->type; switch (typegen_detect_type(ft, f->attrs, TDT_IGNORE_STRINGS)) { case TGT_POINTER: if (is_string_type(f->attrs, ft)) write_string_tfs(file, f->attrs, ft, TYPE_CONTEXT_CONTAINER, f->name, tfsoff); else write_pointer_tfs(file, f->attrs, ft, type_pointer_get_ref(ft)->typestring_offset, TYPE_CONTEXT_CONTAINER, tfsoff); break; case TGT_ARRAY: if (type_array_is_decl_as_ptr(ft)) { unsigned int offset; print_file(file, 0, "/* %d */\n", *tfsoff); offset = ft->typestring_offset; /* skip over the pointer that is written for strings, since a * pointer has to be written in-place here */ if (is_string_type(f->attrs, ft)) offset += 4; write_nonsimple_pointer(file, f->attrs, ft, TYPE_CONTEXT_CONTAINER, offset, tfsoff); } break; default: break; } } if (type->ptrdesc == *tfsoff) type->ptrdesc = 0; } current_structure = save_current_structure; return start_offset; } static void write_branch_type(FILE *file, const type_t *t, unsigned int *tfsoff) { if (t == NULL) { print_file(file, 2, "NdrFcShort(0x0),\t/* No type */\n"); } else { if (type_get_type(t) == TYPE_BASIC || type_get_type(t) == TYPE_ENUM) { unsigned char fc; if (type_get_type(t) == TYPE_BASIC) fc = get_basic_fc(t); else fc = get_enum_fc(t); print_file(file, 2, "NdrFcShort(0x80%02x),\t/* Simple arm type: %s */\n", fc, string_of_type(fc)); } else if (t->typestring_offset) { short reloff = t->typestring_offset - *tfsoff; print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %d (%d) */\n", reloff, reloff, t->typestring_offset); } else error("write_branch_type: type unimplemented %d\n", type_get_type(t)); } *tfsoff += 2; } static unsigned int write_union_tfs(FILE *file, const attr_list_t *attrs, type_t *type, unsigned int *tfsoff) { unsigned int start_offset; unsigned int size; var_list_t *fields; unsigned int nbranch = 0; type_t *deftype = NULL; short nodeftype = 0xffff; unsigned int dummy; var_t *f; if (processed(type) && (type_get_type(type) == TYPE_ENCAPSULATED_UNION || !is_attr(type->attrs, ATTR_SWITCHTYPE))) return type->typestring_offset; guard_rec(type); fields = type_union_get_cases(type); size = union_memsize(fields, &dummy); if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry) { expr_list_t *cases = get_attrp(f->attrs, ATTR_CASE); if (cases) nbranch += list_count(cases); if (f->type) write_embedded_types(file, f->attrs, f->type, f->name, TRUE, tfsoff); } start_offset = *tfsoff; update_tfsoff(type, start_offset, file); print_start_tfs_comment(file, type, start_offset); if (type_get_type(type) == TYPE_ENCAPSULATED_UNION) { const var_t *sv = type_union_get_switch_value(type); const type_t *st = sv->type; unsigned int align = 0; unsigned char fc; if (type_get_type(st) == TYPE_BASIC) { fc = get_basic_fc(st); switch (fc) { case FC_CHAR: case FC_SMALL: case FC_BYTE: case FC_USMALL: case FC_WCHAR: case FC_SHORT: case FC_USHORT: case FC_LONG: case FC_ULONG: break; default: fc = 0; error("union switch type must be an integer, char, or enum\n"); } } else if (type_get_type(st) == TYPE_ENUM) fc = get_enum_fc(st); else error("union switch type must be an integer, char, or enum\n"); type_memsize_and_alignment(st, &align); if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry) { if (f->type) type_memsize_and_alignment(f->type, &align); } print_file(file, 2, "0x%x,\t/* FC_ENCAPSULATED_UNION */\n", FC_ENCAPSULATED_UNION); print_file(file, 2, "0x%x,\t/* Switch type= %s */\n", (align << 4) | fc, string_of_type(fc)); *tfsoff += 2; } else if (is_attr(type->attrs, ATTR_SWITCHTYPE)) { const expr_t *switch_is = get_attrp(attrs, ATTR_SWITCHIS); const type_t *st = get_attrp(type->attrs, ATTR_SWITCHTYPE); unsigned char fc; if (type_get_type(st) == TYPE_BASIC) { fc = get_basic_fc(st); switch (fc) { case FC_CHAR: case FC_SMALL: case FC_USMALL: case FC_SHORT: case FC_USHORT: case FC_LONG: case FC_ULONG: case FC_ENUM16: case FC_ENUM32: break; default: fc = 0; error("union switch type must be an integer, char, or enum\n"); } } else if (type_get_type(st) == TYPE_ENUM) fc = get_enum_fc(st); else error("union switch type must be an integer, char, or enum\n"); print_file(file, 2, "0x%x,\t/* FC_NON_ENCAPSULATED_UNION */\n", FC_NON_ENCAPSULATED_UNION); print_file(file, 2, "0x%x,\t/* Switch type= %s */\n", fc, string_of_type(fc)); *tfsoff += 2; *tfsoff += write_conf_or_var_desc(file, current_structure, 0, st, switch_is ); print_file(file, 2, "NdrFcShort(0x2),\t/* Offset= 2 (%u) */\n", *tfsoff + 2); *tfsoff += 2; print_file(file, 0, "/* %u */\n", *tfsoff); } print_file(file, 2, "NdrFcShort(0x%hx),\t/* %d */\n", (unsigned short)size, size); print_file(file, 2, "NdrFcShort(0x%hx),\t/* %d */\n", (unsigned short)nbranch, nbranch); *tfsoff += 4; if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry) { type_t *ft = f->type; expr_list_t *cases = get_attrp(f->attrs, ATTR_CASE); int deflt = is_attr(f->attrs, ATTR_DEFAULT); expr_t *c; if (cases == NULL && !deflt) error("union field %s with neither case nor default attribute\n", f->name); if (cases) LIST_FOR_EACH_ENTRY(c, cases, expr_t, entry) { /* MIDL doesn't check for duplicate cases, even though that seems like a reasonable thing to do, it just dumps them to the TFS like we're going to do here. */ print_file(file, 2, "NdrFcLong(0x%x),\t/* %d */\n", c->cval, c->cval); *tfsoff += 4; write_branch_type(file, ft, tfsoff); } /* MIDL allows multiple default branches, even though that seems illogical, it just chooses the last one, which is what we will do. */ if (deflt) { deftype = ft; nodeftype = 0; } } if (deftype) { write_branch_type(file, deftype, tfsoff); } else { print_file(file, 2, "NdrFcShort(0x%hx),\n", nodeftype); *tfsoff += 2; } return start_offset; } static unsigned int write_ip_tfs(FILE *file, const attr_list_t *attrs, type_t *type, unsigned int *typeformat_offset) { unsigned int i; unsigned int start_offset = *typeformat_offset; expr_t *iid = get_attrp(attrs, ATTR_IIDIS); if (!iid && processed(type)) return type->typestring_offset; print_start_tfs_comment(file, type, start_offset); update_tfsoff(type, start_offset, file); if (iid) { print_file(file, 2, "0x2f, /* FC_IP */\n"); print_file(file, 2, "0x5c, /* FC_PAD */\n"); *typeformat_offset += write_conf_or_var_desc(file, current_structure, 0, type, iid) + 2; } else { const type_t *base = is_ptr(type) ? type_pointer_get_ref(type) : type; const UUID *uuid = get_attrp(base->attrs, ATTR_UUID); if (! uuid) error("%s: interface %s missing UUID\n", __FUNCTION__, base->name); print_file(file, 2, "0x2f,\t/* FC_IP */\n"); print_file(file, 2, "0x5a,\t/* FC_CONSTANT_IID */\n"); print_file(file, 2, "NdrFcLong(0x%08x),\n", uuid->Data1); print_file(file, 2, "NdrFcShort(0x%04x),\n", uuid->Data2); print_file(file, 2, "NdrFcShort(0x%04x),\n", uuid->Data3); for (i = 0; i < 8; ++i) print_file(file, 2, "0x%02x,\n", uuid->Data4[i]); if (file) fprintf(file, "\n"); *typeformat_offset += 18; } return start_offset; } static unsigned int write_contexthandle_tfs(FILE *file, const attr_list_t *attrs, type_t *type, int toplevel_param, unsigned int *typeformat_offset) { unsigned int start_offset = *typeformat_offset; unsigned char flags = get_contexthandle_flags( current_iface, attrs, type ); print_start_tfs_comment(file, type, start_offset); if (flags & 0x80) /* via ptr */ { int pointer_type = get_pointer_fc( type, attrs, toplevel_param ); if (!pointer_type) pointer_type = FC_RP; *typeformat_offset += 4; print_file(file, 2,"0x%x, 0x0,\t/* %s */\n", pointer_type, string_of_type(pointer_type) ); print_file(file, 2, "NdrFcShort(0x2),\t /* Offset= 2 (%u) */\n", *typeformat_offset); print_file(file, 0, "/* %2u */\n", *typeformat_offset); } print_file(file, 2, "0x%02x,\t/* FC_BIND_CONTEXT */\n", FC_BIND_CONTEXT); print_file(file, 2, "0x%x,\t/* Context flags: ", flags); /* return and can't be null values overlap */ if (((flags & 0x21) != 0x21) && (flags & NDR_CONTEXT_HANDLE_CANNOT_BE_NULL)) print_file(file, 0, "can't be null, "); if (flags & NDR_CONTEXT_HANDLE_SERIALIZE) print_file(file, 0, "serialize, "); if (flags & NDR_CONTEXT_HANDLE_NOSERIALIZE) print_file(file, 0, "no serialize, "); if (flags & NDR_STRICT_CONTEXT_HANDLE) print_file(file, 0, "strict, "); if ((flags & 0x21) == 0x20) print_file(file, 0, "out, "); if ((flags & 0x21) == 0x21) print_file(file, 0, "return, "); if (flags & 0x40) print_file(file, 0, "in, "); if (flags & 0x80) print_file(file, 0, "via ptr, "); print_file(file, 0, "*/\n"); print_file(file, 2, "0x%x,\t/* rundown routine */\n", get_context_handle_offset( type )); print_file(file, 2, "0, /* FIXME: param num */\n"); *typeformat_offset += 4; update_tfsoff( type, start_offset, file ); return start_offset; } static unsigned int write_range_tfs(FILE *file, const attr_list_t *attrs, type_t *type, expr_list_t *range_list, unsigned int *typeformat_offset) { unsigned char fc; unsigned int start_offset = *typeformat_offset; const expr_t *range_min = LIST_ENTRY(list_head(range_list), const expr_t, entry); const expr_t *range_max = LIST_ENTRY(list_next(range_list, list_head(range_list)), const expr_t, entry); if (type_get_type(type) == TYPE_BASIC) fc = get_basic_fc(type); else fc = get_enum_fc(type); /* fc must fit in lower 4-bits of 8-bit field below */ assert(fc <= 0xf); print_file(file, 0, "/* %u */\n", *typeformat_offset); print_file(file, 2, "0x%x,\t/* FC_RANGE */\n", FC_RANGE); print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc)); print_file(file, 2, "NdrFcLong(0x%x),\t/* %u */\n", range_min->cval, range_min->cval); print_file(file, 2, "NdrFcLong(0x%x),\t/* %u */\n", range_max->cval, range_max->cval); update_tfsoff( type, start_offset, file ); *typeformat_offset += 10; return start_offset; } static unsigned int write_type_tfs(FILE *file, int indent, const attr_list_t *attrs, type_t *type, const char *name, enum type_context context, unsigned int *typeformat_offset) { unsigned int offset; switch (typegen_detect_type(type, attrs, TDT_ALL_TYPES)) { case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: return write_contexthandle_tfs(file, attrs, type, context == TYPE_CONTEXT_TOPLEVELPARAM, typeformat_offset); case TGT_USER_TYPE: return write_user_tfs(file, type, typeformat_offset); case TGT_STRING: return write_string_tfs(file, attrs, type, context, name, typeformat_offset); case TGT_ARRAY: { unsigned int off; /* conformant and pointer arrays are handled specially */ if ((context != TYPE_CONTEXT_CONTAINER && context != TYPE_CONTEXT_CONTAINER_NO_POINTERS) || !is_conformant_array(type) || type_array_is_decl_as_ptr(type)) off = write_array_tfs(file, attrs, type, name, typeformat_offset); else off = 0; if (context != TYPE_CONTEXT_CONTAINER && context != TYPE_CONTEXT_CONTAINER_NO_POINTERS) { int ptr_type; ptr_type = get_pointer_fc(type, attrs, context == TYPE_CONTEXT_TOPLEVELPARAM); if (ptr_type != FC_RP || type_array_is_decl_as_ptr(type)) { unsigned int absoff = type->typestring_offset; short reloff = absoff - (*typeformat_offset + 2); off = *typeformat_offset; print_file(file, 0, "/* %d */\n", off); print_file(file, 2, "0x%x, 0x0,\t/* %s */\n", ptr_type, string_of_type(ptr_type)); print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%u) */\n", reloff, reloff, absoff); if (ptr_type != FC_RP) update_tfsoff( type, off, file ); *typeformat_offset += 4; } type->details.array.ptr_tfsoff = off; } return off; } case TGT_STRUCT: return write_struct_tfs(file, type, name, typeformat_offset); case TGT_UNION: return write_union_tfs(file, attrs, type, typeformat_offset); case TGT_ENUM: case TGT_BASIC: /* nothing to do */ return 0; case TGT_RANGE: { expr_list_t *range_list = get_attrp(attrs, ATTR_RANGE); if (!range_list) range_list = get_aliaschain_attrp(type, ATTR_RANGE); return write_range_tfs(file, attrs, type, range_list, typeformat_offset); } case TGT_IFACE_POINTER: return write_ip_tfs(file, attrs, type, typeformat_offset); case TGT_POINTER: { enum type_context ref_context; type_t *ref = type_pointer_get_ref(type); if (context == TYPE_CONTEXT_TOPLEVELPARAM) ref_context = TYPE_CONTEXT_PARAM; else if (context == TYPE_CONTEXT_CONTAINER_NO_POINTERS) ref_context = TYPE_CONTEXT_CONTAINER; else ref_context = context; if (is_string_type(attrs, ref)) { if (context != TYPE_CONTEXT_CONTAINER_NO_POINTERS) write_pointer_tfs(file, attrs, type, *typeformat_offset + 4, context, typeformat_offset); offset = write_type_tfs(file, indent, attrs, ref, name, ref_context, typeformat_offset); if (context == TYPE_CONTEXT_CONTAINER_NO_POINTERS) return 0; return offset; } offset = write_type_tfs( file, indent, attrs, type_pointer_get_ref(type), name, ref_context, typeformat_offset); if (context == TYPE_CONTEXT_CONTAINER_NO_POINTERS) return 0; return write_pointer_tfs(file, attrs, type, offset, context, typeformat_offset); } case TGT_INVALID: break; } error("invalid type %s for var %s\n", type->name, name); return 0; } static int write_embedded_types(FILE *file, const attr_list_t *attrs, type_t *type, const char *name, int write_ptr, unsigned int *tfsoff) { return write_type_tfs(file, 2, attrs, type, name, write_ptr ? TYPE_CONTEXT_CONTAINER : TYPE_CONTEXT_CONTAINER_NO_POINTERS, tfsoff); } static unsigned int process_tfs_stmts(FILE *file, const statement_list_t *stmts, type_pred_t pred, unsigned int *typeformat_offset) { var_t *var; const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { const type_t *iface; const statement_t *stmt_func; if (stmt->type != STMT_TYPE || type_get_type(stmt->u.type) != TYPE_INTERFACE) continue; iface = stmt->u.type; if (!pred(iface)) continue; current_iface = iface; STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(iface) ) { const var_t *func = stmt_func->u.var; current_func = func; if (is_local(func->attrs)) continue; var = type_function_get_retval(func->type); if (!is_void(var->type)) var->typestring_offset = write_type_tfs( file, 2, func->attrs, var->type, func->name, TYPE_CONTEXT_PARAM, typeformat_offset); if (type_get_function_args(func->type)) LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), var_t, entry ) var->typestring_offset = write_type_tfs( file, 2, var->attrs, var->type, var->name, TYPE_CONTEXT_TOPLEVELPARAM, typeformat_offset ); } } return *typeformat_offset + 1; } static unsigned int process_tfs(FILE *file, const statement_list_t *stmts, type_pred_t pred) { unsigned int typeformat_offset = 2; return process_tfs_stmts(file, stmts, pred, &typeformat_offset); } void write_typeformatstring(FILE *file, const statement_list_t *stmts, type_pred_t pred) { int indent = 0; print_file(file, indent, "static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =\n"); print_file(file, indent, "{\n"); indent++; print_file(file, indent, "0,\n"); print_file(file, indent, "{\n"); indent++; print_file(file, indent, "NdrFcShort(0x0),\n"); set_all_tfswrite(TRUE); process_tfs(file, stmts, pred); print_file(file, indent, "0x0\n"); indent--; print_file(file, indent, "}\n"); indent--; print_file(file, indent, "};\n"); print_file(file, indent, "\n"); } static unsigned int get_required_buffer_size_type( const type_t *type, const char *name, const attr_list_t *attrs, int toplevel_param, unsigned int *alignment) { *alignment = 0; switch (typegen_detect_type(type, NULL, TDT_IGNORE_RANGES)) { case TGT_USER_TYPE: { const char *uname = NULL; const type_t *utype = get_user_type(type, &uname); return get_required_buffer_size_type(utype, uname, NULL, FALSE, alignment); } case TGT_BASIC: switch (get_basic_fc(type)) { case FC_BYTE: case FC_CHAR: case FC_USMALL: case FC_SMALL: *alignment = 4; return 1; case FC_WCHAR: case FC_USHORT: case FC_SHORT: *alignment = 4; return 2; case FC_ULONG: case FC_LONG: case FC_FLOAT: case FC_ERROR_STATUS_T: *alignment = 4; return 4; case FC_HYPER: case FC_DOUBLE: *alignment = 8; return 8; case FC_INT3264: case FC_UINT3264: assert( pointer_size ); *alignment = pointer_size; return pointer_size; case FC_IGNORE: case FC_BIND_PRIMITIVE: return 0; default: error("get_required_buffer_size: unknown basic type 0x%02x\n", get_basic_fc(type)); return 0; } break; case TGT_ENUM: switch (get_enum_fc(type)) { case FC_ENUM32: *alignment = 4; return 4; case FC_ENUM16: *alignment = 4; return 2; } break; case TGT_STRUCT: if (get_struct_fc(type) == FC_STRUCT) { if (!type_struct_get_fields(type)) return 0; return fields_memsize(type_struct_get_fields(type), alignment); } break; case TGT_POINTER: { unsigned int size, align; const type_t *ref = type_pointer_get_ref(type); if (is_string_type( attrs, ref )) break; if (!(size = get_required_buffer_size_type( ref, name, NULL, FALSE, &align ))) break; if (get_pointer_fc(type, attrs, toplevel_param) != FC_RP) { size += 4 + align; align = 4; } *alignment = align; return size; } case TGT_ARRAY: if (get_pointer_fc(type, attrs, toplevel_param) == FC_RP) { switch (get_array_fc(type)) { case FC_SMFARRAY: case FC_LGFARRAY: return type_array_get_dim(type) * get_required_buffer_size_type(type_array_get_element(type), name, NULL, FALSE, alignment); } } break; default: break; } return 0; } static unsigned int get_required_buffer_size(const var_t *var, unsigned int *alignment, enum pass pass) { int in_attr = is_attr(var->attrs, ATTR_IN); int out_attr = is_attr(var->attrs, ATTR_OUT); if (!in_attr && !out_attr) in_attr = 1; *alignment = 0; if ((pass == PASS_IN && in_attr) || (pass == PASS_OUT && out_attr) || pass == PASS_RETURN) { if (is_ptrchain_attr(var, ATTR_CONTEXTHANDLE)) { *alignment = 4; return 20; } if (!is_string_type(var->attrs, var->type)) return get_required_buffer_size_type(var->type, var->name, var->attrs, TRUE, alignment); } return 0; } static unsigned int get_function_buffer_size( const var_t *func, enum pass pass ) { const var_t *var; unsigned int total_size = 0, alignment; if (type_get_function_args(func->type)) { LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) { total_size += get_required_buffer_size(var, &alignment, pass); total_size += alignment; } } if (pass == PASS_OUT && !is_void(type_function_get_rettype(func->type))) { var_t v = *func; v.type = type_function_get_rettype(func->type); total_size += get_required_buffer_size(&v, &alignment, PASS_RETURN); total_size += alignment; } return total_size; } static void print_phase_function(FILE *file, int indent, const char *type, const char *local_var_prefix, enum remoting_phase phase, const var_t *var, unsigned int type_offset) { const char *function; switch (phase) { case PHASE_BUFFERSIZE: function = "BufferSize"; break; case PHASE_MARSHAL: function = "Marshall"; break; case PHASE_UNMARSHAL: function = "Unmarshall"; break; case PHASE_FREE: function = "Free"; break; default: assert(0); return; } print_file(file, indent, "Ndr%s%s(\n", type, function); indent++; print_file(file, indent, "&__frame->_StubMsg,\n"); print_file(file, indent, "%s%s%s%s%s,\n", (phase == PHASE_UNMARSHAL) ? "(unsigned char **)" : "(unsigned char *)", (phase == PHASE_UNMARSHAL || decl_indirect(var->type)) ? "&" : "", local_var_prefix, (phase == PHASE_UNMARSHAL && decl_indirect(var->type)) ? "_p_" : "", var->name); print_file(file, indent, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]%s\n", type_offset, (phase == PHASE_UNMARSHAL) ? "," : ");"); if (phase == PHASE_UNMARSHAL) print_file(file, indent, "0);\n"); indent--; } void print_phase_basetype(FILE *file, int indent, const char *local_var_prefix, enum remoting_phase phase, enum pass pass, const var_t *var, const char *varname) { type_t *type = var->type; unsigned int alignment = 0; /* no work to do for other phases, buffer sizing is done elsewhere */ if (phase != PHASE_MARSHAL && phase != PHASE_UNMARSHAL) return; if (type_get_type(type) == TYPE_ENUM || (type_get_type(type) == TYPE_BASIC && type_basic_get_type(type) == TYPE_BASIC_INT3264 && pointer_size != 4)) { unsigned char fc; if (type_get_type(type) == TYPE_ENUM) fc = get_enum_fc(type); else fc = get_basic_fc(type); if (phase == PHASE_MARSHAL) print_file(file, indent, "NdrSimpleTypeMarshall(\n"); else print_file(file, indent, "NdrSimpleTypeUnmarshall(\n"); print_file(file, indent+1, "&__frame->_StubMsg,\n"); print_file(file, indent+1, "(unsigned char *)&%s%s,\n", local_var_prefix, var->name); print_file(file, indent+1, "0x%02x /* %s */);\n", fc, string_of_type(fc)); } else { const type_t *ref = is_ptr(type) ? type_pointer_get_ref(type) : type; switch (get_basic_fc(ref)) { case FC_BYTE: case FC_CHAR: case FC_SMALL: case FC_USMALL: alignment = 1; break; case FC_WCHAR: case FC_USHORT: case FC_SHORT: alignment = 2; break; case FC_ULONG: case FC_LONG: case FC_FLOAT: case FC_ERROR_STATUS_T: /* pointer_size must be 4 if we got here in these two cases */ case FC_INT3264: case FC_UINT3264: alignment = 4; break; case FC_HYPER: case FC_DOUBLE: alignment = 8; break; case FC_IGNORE: case FC_BIND_PRIMITIVE: /* no marshalling needed */ return; default: error("print_phase_basetype: Unsupported type: %s (0x%02x, ptr_level: 0)\n", var->name, get_basic_fc(ref)); } if (phase == PHASE_MARSHAL && alignment > 1) print_file(file, indent, "MIDL_memset(__frame->_StubMsg.Buffer, 0, (0x%x - (ULONG_PTR)__frame->_StubMsg.Buffer) & 0x%x);\n", alignment, alignment - 1); print_file(file, indent, "__frame->_StubMsg.Buffer = (unsigned char *)(((ULONG_PTR)__frame->_StubMsg.Buffer + %u) & ~0x%x);\n", alignment - 1, alignment - 1); if (phase == PHASE_MARSHAL) { print_file(file, indent, "*("); write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); if (is_ptr(type)) fprintf(file, " *)__frame->_StubMsg.Buffer = *"); else fprintf(file, " *)__frame->_StubMsg.Buffer = "); fprintf(file, "%s%s", local_var_prefix, varname); fprintf(file, ";\n"); } else if (phase == PHASE_UNMARSHAL) { print_file(file, indent, "if (__frame->_StubMsg.Buffer + sizeof("); write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); fprintf(file, ") > __frame->_StubMsg.BufferEnd)\n"); print_file(file, indent, "{\n"); print_file(file, indent + 1, "RpcRaiseException(RPC_X_BAD_STUB_DATA);\n"); print_file(file, indent, "}\n"); print_file(file, indent, "%s%s%s", (pass == PASS_IN || pass == PASS_RETURN) ? "" : "*", local_var_prefix, varname); if (pass == PASS_IN && is_ptr(type)) fprintf(file, " = ("); else fprintf(file, " = *("); write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); fprintf(file, " *)__frame->_StubMsg.Buffer;\n"); } print_file(file, indent, "__frame->_StubMsg.Buffer += sizeof("); write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); fprintf(file, ");\n"); } } /* returns whether the MaxCount, Offset or ActualCount members need to be * filled in for the specified phase */ static inline int is_conformance_needed_for_phase(enum remoting_phase phase) { return (phase != PHASE_UNMARSHAL); } expr_t *get_size_is_expr(const type_t *t, const char *name) { expr_t *x = NULL; for ( ; is_array(t); t = type_array_get_element(t)) if (type_array_has_conformance(t) && type_array_get_conformance(t)->type != EXPR_VOID) { if (!x) x = type_array_get_conformance(t); else error("%s: multidimensional conformant" " arrays not supported at the top level\n", name); } return x; } void write_parameter_conf_or_var_exprs(FILE *file, int indent, const char *local_var_prefix, enum remoting_phase phase, const var_t *var, int valid_variance) { const type_t *type = var->type; /* get fundamental type for the argument */ for (;;) { switch (typegen_detect_type(type, var->attrs, TDT_IGNORE_STRINGS|TDT_IGNORE_RANGES)) { case TGT_ARRAY: if (is_conformance_needed_for_phase(phase)) { if (type_array_has_conformance(type) && type_array_get_conformance(type)->type != EXPR_VOID) { print_file(file, indent, "__frame->_StubMsg.MaxCount = (ULONG_PTR)"); write_expr(file, type_array_get_conformance(type), 1, 1, NULL, NULL, local_var_prefix); fprintf(file, ";\n\n"); } if (type_array_has_variance(type)) { print_file(file, indent, "__frame->_StubMsg.Offset = 0;\n"); /* FIXME */ if (valid_variance) { print_file(file, indent, "__frame->_StubMsg.ActualCount = (ULONG_PTR)"); write_expr(file, type_array_get_variance(type), 1, 1, NULL, NULL, local_var_prefix); fprintf(file, ";\n\n"); } else print_file(file, indent, "__frame->_StubMsg.ActualCount = __frame->_StubMsg.MaxCount;\n\n"); } } break; case TGT_UNION: if (type_get_type(type) == TYPE_UNION && is_conformance_needed_for_phase(phase)) { print_file(file, indent, "__frame->_StubMsg.MaxCount = (ULONG_PTR)"); write_expr(file, get_attrp(var->attrs, ATTR_SWITCHIS), 1, 1, NULL, NULL, local_var_prefix); fprintf(file, ";\n\n"); } break; case TGT_IFACE_POINTER: { expr_t *iid; if (is_conformance_needed_for_phase(phase) && (iid = get_attrp( var->attrs, ATTR_IIDIS ))) { print_file( file, indent, "__frame->_StubMsg.MaxCount = (ULONG_PTR) " ); write_expr( file, iid, 1, 1, NULL, NULL, local_var_prefix ); fprintf( file, ";\n\n" ); } break; } case TGT_POINTER: type = type_pointer_get_ref(type); continue; case TGT_INVALID: case TGT_USER_TYPE: case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: case TGT_STRING: case TGT_BASIC: case TGT_ENUM: case TGT_STRUCT: case TGT_RANGE: break; } break; } } static void write_remoting_arg(FILE *file, int indent, const var_t *func, const char *local_var_prefix, enum pass pass, enum remoting_phase phase, const var_t *var) { int in_attr, out_attr, pointer_type; const char *type_str = NULL; const type_t *type = var->type; unsigned int alignment, start_offset = type->typestring_offset; if (is_ptr(type) || is_array(type)) pointer_type = get_pointer_fc(type, var->attrs, pass != PASS_RETURN); else pointer_type = 0; in_attr = is_attr(var->attrs, ATTR_IN); out_attr = is_attr(var->attrs, ATTR_OUT); if (!in_attr && !out_attr) in_attr = 1; if (phase != PHASE_FREE) switch (pass) { case PASS_IN: if (!in_attr) return; break; case PASS_OUT: if (!out_attr) return; break; case PASS_RETURN: break; } if (phase == PHASE_BUFFERSIZE && get_required_buffer_size( var, &alignment, pass )) return; write_parameter_conf_or_var_exprs(file, indent, local_var_prefix, phase, var, TRUE); switch (typegen_detect_type(type, var->attrs, TDT_ALL_TYPES)) { case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: if (phase == PHASE_MARSHAL) { if (pass == PASS_IN) { /* if the context_handle attribute appears in the chain of types * without pointers being followed, then the context handle must * be direct, otherwise it is a pointer */ const char *ch_ptr = is_aliaschain_attr(type, ATTR_CONTEXTHANDLE) ? "" : "*"; print_file(file, indent, "NdrClientContextMarshall(\n"); print_file(file, indent + 1, "&__frame->_StubMsg,\n"); print_file(file, indent + 1, "(NDR_CCONTEXT)%s%s%s,\n", ch_ptr, local_var_prefix, var->name); print_file(file, indent + 1, "%s);\n", in_attr && out_attr ? "1" : "0"); } else { print_file(file, indent, "NdrServerContextNewMarshall(\n"); print_file(file, indent + 1, "&__frame->_StubMsg,\n"); print_file(file, indent + 1, "(NDR_SCONTEXT)%s%s,\n", local_var_prefix, var->name); print_file(file, indent + 1, "(NDR_RUNDOWN)%s_rundown,\n", get_context_handle_type_name(var->type)); print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n", start_offset); } } else if (phase == PHASE_UNMARSHAL) { if (pass == PASS_OUT) { if (!in_attr) print_file(file, indent, "*%s%s = 0;\n", local_var_prefix, var->name); print_file(file, indent, "NdrClientContextUnmarshall(\n"); print_file(file, indent + 1, "&__frame->_StubMsg,\n"); print_file(file, indent + 1, "(NDR_CCONTEXT *)%s%s,\n", local_var_prefix, var->name); print_file(file, indent + 1, "__frame->_Handle);\n"); } else { print_file(file, indent, "%s%s = NdrServerContextNewUnmarshall(\n", local_var_prefix, var->name); print_file(file, indent + 1, "&__frame->_StubMsg,\n"); print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n", start_offset); } } break; case TGT_USER_TYPE: print_phase_function(file, indent, "UserMarshal", local_var_prefix, phase, var, start_offset); break; case TGT_STRING: if (phase == PHASE_FREE || pass == PASS_RETURN || pointer_type != FC_RP) { /* strings returned are assumed to be global and hence don't * need freeing */ if (is_declptr(type) && !(phase == PHASE_FREE && pass == PASS_RETURN)) print_phase_function(file, indent, "Pointer", local_var_prefix, phase, var, start_offset); else if (pointer_type == FC_RP && phase == PHASE_FREE && !in_attr && is_conformant_array(type)) { print_file(file, indent, "if (%s%s)\n", local_var_prefix, var->name); indent++; print_file(file, indent, "__frame->_StubMsg.pfnFree(%s%s);\n", local_var_prefix, var->name); } } else { unsigned int real_start_offset = start_offset; /* skip over pointer description straight to string description */ if (is_declptr(type)) { if (is_conformant_array(type)) real_start_offset += 4; else real_start_offset += 2; } if (is_array(type) && !is_conformant_array(type)) print_phase_function(file, indent, "NonConformantString", local_var_prefix, phase, var, real_start_offset); else print_phase_function(file, indent, "ConformantString", local_var_prefix, phase, var, real_start_offset); } break; case TGT_ARRAY: { unsigned char tc = get_array_fc(type); const char *array_type = NULL; /* We already have the size_is expression since it's at the top level, but do checks for multidimensional conformant arrays. When we handle them, we'll need to extend this function to return a list, and then we'll actually use the return value. */ get_size_is_expr(type, var->name); switch (tc) { case FC_SMFARRAY: case FC_LGFARRAY: array_type = "FixedArray"; break; case FC_SMVARRAY: case FC_LGVARRAY: array_type = "VaryingArray"; break; case FC_CARRAY: array_type = "ConformantArray"; break; case FC_CVARRAY: array_type = "ConformantVaryingArray"; break; case FC_BOGUS_ARRAY: array_type = "ComplexArray"; break; } if (pointer_type != FC_RP) array_type = "Pointer"; if (phase == PHASE_FREE && pointer_type == FC_RP) { /* these are all unmarshalled by allocating memory */ if (tc == FC_BOGUS_ARRAY || tc == FC_CVARRAY || ((tc == FC_SMVARRAY || tc == FC_LGVARRAY) && in_attr) || (tc == FC_CARRAY && !in_attr)) { if (type_array_is_decl_as_ptr(type) && type->details.array.ptr_tfsoff) { print_phase_function(file, indent, "Pointer", local_var_prefix, phase, var, type->details.array.ptr_tfsoff); break; } print_phase_function(file, indent, array_type, local_var_prefix, phase, var, start_offset); print_file(file, indent, "if (%s%s)\n", local_var_prefix, var->name); indent++; print_file(file, indent, "__frame->_StubMsg.pfnFree(%s%s);\n", local_var_prefix, var->name); break; } } print_phase_function(file, indent, array_type, local_var_prefix, phase, var, start_offset); break; } case TGT_BASIC: print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); break; case TGT_ENUM: print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); break; case TGT_RANGE: print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); /* Note: this goes beyond what MIDL does - it only supports arguments * with the [range] attribute in Oicf mode */ if (phase == PHASE_UNMARSHAL) { const expr_t *range_min; const expr_t *range_max; expr_list_t *range_list = get_attrp(var->attrs, ATTR_RANGE); if (!range_list) range_list = get_aliaschain_attrp(type, ATTR_RANGE); range_min = LIST_ENTRY(list_head(range_list), const expr_t, entry); range_max = LIST_ENTRY(list_next(range_list, list_head(range_list)), const expr_t, entry); print_file(file, indent, "if ((%s%s < (", local_var_prefix, var->name); write_type_decl(file, var->type, NULL); fprintf(file, ")0x%x) || (%s%s > (", range_min->cval, local_var_prefix, var->name); write_type_decl(file, var->type, NULL); fprintf(file, ")0x%x))\n", range_max->cval); print_file(file, indent, "{\n"); print_file(file, indent+1, "RpcRaiseException(RPC_S_INVALID_BOUND);\n"); print_file(file, indent, "}\n"); } break; case TGT_STRUCT: switch (get_struct_fc(type)) { case FC_STRUCT: if (phase == PHASE_MARSHAL || phase == PHASE_UNMARSHAL) print_phase_function(file, indent, "SimpleStruct", local_var_prefix, phase, var, start_offset); break; case FC_PSTRUCT: print_phase_function(file, indent, "SimpleStruct", local_var_prefix, phase, var, start_offset); break; case FC_CSTRUCT: case FC_CPSTRUCT: print_phase_function(file, indent, "ConformantStruct", local_var_prefix, phase, var, start_offset); break; case FC_CVSTRUCT: print_phase_function(file, indent, "ConformantVaryingStruct", local_var_prefix, phase, var, start_offset); break; case FC_BOGUS_STRUCT: print_phase_function(file, indent, "ComplexStruct", local_var_prefix, phase, var, start_offset); break; default: error("write_remoting_arguments: Unsupported type: %s (0x%02x)\n", var->name, get_struct_fc(type)); } break; case TGT_UNION: { const char *union_type = NULL; if (type_get_type(type) == TYPE_UNION) union_type = "NonEncapsulatedUnion"; else if (type_get_type(type) == TYPE_ENCAPSULATED_UNION) union_type = "EncapsulatedUnion"; print_phase_function(file, indent, union_type, local_var_prefix, phase, var, start_offset); break; } case TGT_POINTER: { const type_t *ref = type_pointer_get_ref(type); if (pointer_type == FC_RP) switch (typegen_detect_type(ref, NULL, TDT_ALL_TYPES)) { case TGT_BASIC: print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); break; case TGT_ENUM: /* base types have known sizes, so don't need a sizing pass * and don't have any memory to free and so don't need a * freeing pass */ if (phase == PHASE_MARSHAL || phase == PHASE_UNMARSHAL) print_phase_function(file, indent, "Pointer", local_var_prefix, phase, var, start_offset); break; case TGT_STRUCT: switch (get_struct_fc(ref)) { case FC_STRUCT: /* simple structs have known sizes, so don't need a sizing * pass and don't have any memory to free and so don't * need a freeing pass */ if (phase == PHASE_MARSHAL || phase == PHASE_UNMARSHAL) type_str = "SimpleStruct"; else if (phase == PHASE_FREE && pass == PASS_RETURN) { print_file(file, indent, "if (%s%s)\n", local_var_prefix, var->name); indent++; print_file(file, indent, "__frame->_StubMsg.pfnFree(%s%s);\n", local_var_prefix, var->name); indent--; } break; case FC_PSTRUCT: type_str = "SimpleStruct"; break; case FC_CSTRUCT: case FC_CPSTRUCT: type_str = "ConformantStruct"; break; case FC_CVSTRUCT: type_str = "ConformantVaryingStruct"; break; case FC_BOGUS_STRUCT: type_str = "ComplexStruct"; break; default: error("write_remoting_arguments: Unsupported type: %s (0x%02x)\n", var->name, get_struct_fc(ref)); } if (type_str) { if (phase == PHASE_FREE) type_str = "Pointer"; else start_offset = ref->typestring_offset; print_phase_function(file, indent, type_str, local_var_prefix, phase, var, start_offset); } break; case TGT_UNION: if (phase == PHASE_FREE) type_str = "Pointer"; else { if (type_get_type(ref) == TYPE_UNION) type_str = "NonEncapsulatedUnion"; else if (type_get_type(ref) == TYPE_ENCAPSULATED_UNION) type_str = "EncapsulatedUnion"; start_offset = ref->typestring_offset; } print_phase_function(file, indent, type_str, local_var_prefix, phase, var, start_offset); break; case TGT_USER_TYPE: if (phase != PHASE_FREE) { type_str = "UserMarshal"; start_offset = ref->typestring_offset; } else type_str = "Pointer"; print_phase_function(file, indent, type_str, local_var_prefix, phase, var, start_offset); break; case TGT_STRING: case TGT_POINTER: case TGT_ARRAY: case TGT_RANGE: case TGT_IFACE_POINTER: case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: print_phase_function(file, indent, "Pointer", local_var_prefix, phase, var, start_offset); break; case TGT_INVALID: assert(0); break; } else print_phase_function(file, indent, "Pointer", local_var_prefix, phase, var, start_offset); break; } case TGT_IFACE_POINTER: print_phase_function(file, indent, "InterfacePointer", local_var_prefix, phase, var, start_offset); break; case TGT_INVALID: assert(0); break; } fprintf(file, "\n"); } void write_remoting_arguments(FILE *file, int indent, const var_t *func, const char *local_var_prefix, enum pass pass, enum remoting_phase phase) { if (phase == PHASE_BUFFERSIZE && pass != PASS_RETURN) { unsigned int size = get_function_buffer_size( func, pass ); print_file(file, indent, "__frame->_StubMsg.BufferLength = %u;\n", size); } if (pass == PASS_RETURN) { write_remoting_arg( file, indent, func, local_var_prefix, pass, phase, type_function_get_retval(func->type) ); } else { const var_t *var; if (!type_get_function_args(func->type)) return; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) write_remoting_arg( file, indent, func, local_var_prefix, pass, phase, var ); } } unsigned int get_size_procformatstring_func(const type_t *iface, const var_t *func) { unsigned int offset = 0; write_procformatstring_func( NULL, 0, iface, func, &offset, 0 ); return offset; } unsigned int get_size_procformatstring(const statement_list_t *stmts, type_pred_t pred) { const statement_t *stmt; unsigned int size = 1; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { const type_t *iface; const statement_t *stmt_func; if (stmt->type != STMT_TYPE || type_get_type(stmt->u.type) != TYPE_INTERFACE) continue; iface = stmt->u.type; if (!pred(iface)) continue; STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(iface) ) { const var_t *func = stmt_func->u.var; if (!is_local(func->attrs)) size += get_size_procformatstring_func( iface, func ); } } return size; } unsigned int get_size_typeformatstring(const statement_list_t *stmts, type_pred_t pred) { set_all_tfswrite(FALSE); return process_tfs(NULL, stmts, pred); } void declare_stub_args( FILE *file, int indent, const var_t *func ) { int in_attr, out_attr; int i = 0; const var_t *var = type_function_get_retval(func->type); /* declare return value */ if (!is_void(var->type)) { print_file(file, indent, "%s", ""); write_type_decl(file, var->type, var->name); fprintf(file, ";\n"); } if (!type_get_function_args(func->type)) return; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) { in_attr = is_attr(var->attrs, ATTR_IN); out_attr = is_attr(var->attrs, ATTR_OUT); if (!out_attr && !in_attr) in_attr = 1; if (is_context_handle(var->type)) print_file(file, indent, "NDR_SCONTEXT %s;\n", var->name); else { if (!in_attr && !is_conformant_array(var->type)) { type_t *type_to_print; char name[16]; print_file(file, indent, "%s", ""); if (type_get_type(var->type) == TYPE_ARRAY && !type_array_is_decl_as_ptr(var->type)) type_to_print = var->type; else type_to_print = type_pointer_get_ref(var->type); sprintf(name, "_W%u", i++); write_type_decl(file, type_to_print, name); fprintf(file, ";\n"); } print_file(file, indent, "%s", ""); write_type_decl_left(file, var->type); fprintf(file, " "); if (type_get_type(var->type) == TYPE_ARRAY && !type_array_is_decl_as_ptr(var->type)) { fprintf(file, "(*%s)", var->name); } else fprintf(file, "%s", var->name); write_type_right(file, var->type, FALSE); fprintf(file, ";\n"); if (decl_indirect(var->type)) print_file(file, indent, "void *_p_%s;\n", var->name); } } } void assign_stub_out_args( FILE *file, int indent, const var_t *func, const char *local_var_prefix ) { int in_attr, out_attr; int i = 0, sep = 0; const var_t *var; type_t *ref; if (!type_get_function_args(func->type)) return; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) { in_attr = is_attr(var->attrs, ATTR_IN); out_attr = is_attr(var->attrs, ATTR_OUT); if (!out_attr && !in_attr) in_attr = 1; if (!in_attr) { print_file(file, indent, "%s%s", local_var_prefix, var->name); switch (typegen_detect_type(var->type, var->attrs, TDT_IGNORE_STRINGS)) { case TGT_CTXT_HANDLE_POINTER: fprintf(file, " = NdrContextHandleInitialize(\n"); print_file(file, indent + 1, "&__frame->_StubMsg,\n"); print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n", var->typestring_offset); break; case TGT_ARRAY: if (type_array_has_conformance(var->type)) { unsigned int size; type_t *type; fprintf(file, " = NdrAllocate(&__frame->_StubMsg, "); for (type = var->type; is_array(type) && type_array_has_conformance(type); type = type_array_get_element(type)) { write_expr(file, type_array_get_conformance(type), TRUE, TRUE, NULL, NULL, local_var_prefix); fprintf(file, " * "); } size = type_memsize(type); fprintf(file, "%u);\n", size); print_file(file, indent, "memset(%s%s, 0, ", local_var_prefix, var->name); for (type = var->type; is_array(type) && type_array_has_conformance(type); type = type_array_get_element(type)) { write_expr(file, type_array_get_conformance(type), TRUE, TRUE, NULL, NULL, local_var_prefix); fprintf(file, " * "); } size = type_memsize(type); fprintf(file, "%u);\n", size); } else fprintf(file, " = &%s_W%u;\n", local_var_prefix, i++); break; case TGT_POINTER: fprintf(file, " = &%s_W%u;\n", local_var_prefix, i); ref = type_pointer_get_ref(var->type); switch (typegen_detect_type(ref, var->attrs, TDT_IGNORE_STRINGS)) { case TGT_BASIC: case TGT_ENUM: case TGT_POINTER: case TGT_RANGE: case TGT_IFACE_POINTER: print_file(file, indent, "%s_W%u = 0;\n", local_var_prefix, i); break; case TGT_USER_TYPE: print_file(file, indent, "memset(&%s_W%u, 0, sizeof(%s_W%u));\n", local_var_prefix, i, local_var_prefix, i); break; case TGT_ARRAY: if (type_array_is_decl_as_ptr(ref)) { print_file(file, indent, "%s_W%u = 0;\n", local_var_prefix, i); break; } ref = type_array_get_element(ref); /* fall through */ case TGT_STRUCT: case TGT_UNION: if (type_has_pointers(ref)) print_file(file, indent, "memset(&%s_W%u, 0, sizeof(%s_W%u));\n", local_var_prefix, i, local_var_prefix, i); break; case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: case TGT_INVALID: case TGT_STRING: /* not initialised */ break; } i++; break; default: break; } sep = 1; } } if (sep) fprintf(file, "\n"); } void write_func_param_struct( FILE *file, const type_t *iface, const type_t *func, const char *var_decl, int add_retval ) { var_t *retval = type_function_get_retval( func ); const var_list_t *args = type_get_function_args( func ); const var_t *arg; int needs_packing; unsigned int align = 0; if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) if (!is_array( arg->type )) type_memsize_and_alignment( arg->type, &align ); needs_packing = (align > pointer_size); if (needs_packing) print_file( file, 0, "#include \n", pointer_size ); print_file(file, 1, "struct _PARAM_STRUCT\n" ); print_file(file, 1, "{\n" ); if (is_object( iface )) print_file(file, 2, "%s *This;\n", iface->name ); if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) { print_file(file, 2, "%s", ""); write_type_left( file, (type_t *)arg->type, NAME_DEFAULT, TRUE ); if (needs_space_after( arg->type )) fputc( ' ', file ); if (is_array( arg->type ) && !type_array_is_decl_as_ptr( arg->type )) fputc( '*', file ); /* FIXME: should check for large args being passed by pointer */ align = 0; if (is_array( arg->type ) || is_ptr( arg->type )) align = pointer_size; else type_memsize_and_alignment( arg->type, &align ); if (align >= pointer_size) fprintf( file, "%s;\n", arg->name ); else fprintf( file, "%s DECLSPEC_ALIGN(%u);\n", arg->name, pointer_size ); } if (add_retval && !is_void( retval->type )) { print_file(file, 2, "%s", ""); write_type_decl( file, retval->type, retval->name ); if (is_array( retval->type ) || is_ptr( retval->type ) || type_memsize( retval->type ) == pointer_size) fprintf( file, ";\n" ); else fprintf( file, " DECLSPEC_ALIGN(%u);\n", pointer_size ); } print_file(file, 1, "} %s;\n", var_decl ); if (needs_packing) print_file( file, 0, "#include \n" ); print_file( file, 0, "\n" ); } void write_pointer_checks( FILE *file, int indent, const var_t *func ) { const var_list_t *args = type_get_function_args( func->type ); const var_t *var; if (!args) return; LIST_FOR_EACH_ENTRY( var, args, const var_t, entry ) if (cant_be_null( var )) print_file( file, indent, "if (!%s) RpcRaiseException(RPC_X_NULL_REF_POINTER);\n", var->name ); } int write_expr_eval_routines(FILE *file, const char *iface) { static const char *var_name = "pS"; static const char *var_name_expr = "pS->"; int result = 0; struct expr_eval_routine *eval; unsigned short callback_offset = 0; LIST_FOR_EACH_ENTRY(eval, &expr_eval_routines, struct expr_eval_routine, entry) { const char *name = eval->name; result = 1; print_file(file, 0, "static void __RPC_USER %s_%sExprEval_%04u(PMIDL_STUB_MESSAGE pStubMsg)\n", eval->iface ? eval->iface->name : iface, name, callback_offset); print_file(file, 0, "{\n"); if (type_get_type( eval->cont_type ) == TYPE_FUNCTION) { write_func_param_struct( file, eval->iface, eval->cont_type, "*pS = (struct _PARAM_STRUCT *)pStubMsg->StackTop", FALSE ); } else { print_file(file, 1, "%s", ""); write_type_left(file, (type_t *)eval->cont_type, NAME_DEFAULT, TRUE); fprintf(file, " *%s = (", var_name); write_type_left(file, (type_t *)eval->cont_type, NAME_DEFAULT, TRUE); fprintf(file, " *)(pStubMsg->StackTop - %u);\n", eval->baseoff); } print_file(file, 1, "pStubMsg->Offset = 0;\n"); /* FIXME */ print_file(file, 1, "pStubMsg->MaxCount = (ULONG_PTR)"); write_expr(file, eval->expr, 1, 1, var_name_expr, eval->cont_type, ""); fprintf(file, ";\n"); print_file(file, 0, "}\n\n"); callback_offset++; } return result; } void write_expr_eval_routine_list(FILE *file, const char *iface) { struct expr_eval_routine *eval; struct expr_eval_routine *cursor; unsigned short callback_offset = 0; fprintf(file, "static const EXPR_EVAL ExprEvalRoutines[] =\n"); fprintf(file, "{\n"); LIST_FOR_EACH_ENTRY_SAFE(eval, cursor, &expr_eval_routines, struct expr_eval_routine, entry) { print_file(file, 1, "%s_%sExprEval_%04u,\n", eval->iface ? eval->iface->name : iface, eval->name, callback_offset); callback_offset++; list_remove(&eval->entry); free(eval->name); free(eval); } fprintf(file, "};\n\n"); } void write_user_quad_list(FILE *file) { user_type_t *ut; if (list_empty(&user_type_list)) return; fprintf(file, "static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[] =\n"); fprintf(file, "{\n"); LIST_FOR_EACH_ENTRY(ut, &user_type_list, user_type_t, entry) { const char *sep = &ut->entry == list_tail(&user_type_list) ? "" : ","; print_file(file, 1, "{\n"); print_file(file, 2, "(USER_MARSHAL_SIZING_ROUTINE)%s_UserSize,\n", ut->name); print_file(file, 2, "(USER_MARSHAL_MARSHALLING_ROUTINE)%s_UserMarshal,\n", ut->name); print_file(file, 2, "(USER_MARSHAL_UNMARSHALLING_ROUTINE)%s_UserUnmarshal,\n", ut->name); print_file(file, 2, "(USER_MARSHAL_FREEING_ROUTINE)%s_UserFree\n", ut->name); print_file(file, 1, "}%s\n", sep); } fprintf(file, "};\n\n"); } void write_endpoints( FILE *f, const char *prefix, const str_list_t *list ) { const struct str_list_entry_t *endpoint; const char *p; /* this should be an array of RPC_PROTSEQ_ENDPOINT but we want const strings */ print_file( f, 0, "static const unsigned char * const %s__RpcProtseqEndpoint[][2] =\n{\n", prefix ); LIST_FOR_EACH_ENTRY( endpoint, list, const struct str_list_entry_t, entry ) { print_file( f, 1, "{ (const unsigned char *)\"" ); for (p = endpoint->str; *p && *p != ':'; p++) { if (*p == '"' || *p == '\\') fputc( '\\', f ); fputc( *p, f ); } if (!*p) goto error; if (p[1] != '[') goto error; fprintf( f, "\", (const unsigned char *)\"" ); for (p += 2; *p && *p != ']'; p++) { if (*p == '"' || *p == '\\') fputc( '\\', f ); fputc( *p, f ); } if (*p != ']') goto error; fprintf( f, "\" },\n" ); } print_file( f, 0, "};\n\n" ); return; error: error("Invalid endpoint syntax '%s'\n", endpoint->str); } void write_client_call_routine( FILE *file, const type_t *iface, const var_t *func, const char *prefix, unsigned int proc_offset ) { type_t *rettype = type_function_get_rettype( func->type ); int has_ret = !is_void( rettype ); const var_list_t *args = type_get_function_args( func->type ); const var_t *arg; int len, needs_params = 0; /* we need a param structure if we have more than one arg */ if (pointer_size == 4 && args) needs_params = is_object( iface ) || list_count( args ) > 1; print_file( file, 0, "{\n"); if (needs_params) { if (has_ret) print_file( file, 1, "%s", "CLIENT_CALL_RETURN _RetVal;\n" ); write_func_param_struct( file, iface, func->type, "__params", FALSE ); if (is_object( iface )) print_file( file, 1, "__params.This = This;\n" ); if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) print_file( file, 1, "__params.%s = %s;\n", arg->name, arg->name ); } else if (has_ret) print_file( file, 1, "%s", "CLIENT_CALL_RETURN _RetVal;\n\n" ); len = fprintf( file, " %s%s( ", has_ret ? "_RetVal = " : "", get_stub_mode() == MODE_Oif ? "NdrClientCall2" : "NdrClientCall" ); fprintf( file, "&%s_StubDesc,", prefix ); fprintf( file, "\n%*s&__MIDL_ProcFormatString.Format[%u]", len, "", proc_offset ); if (needs_params) { fprintf( file, ",\n%*s&__params", len, "" ); } else if (pointer_size == 8) { if (is_object( iface )) fprintf( file, ",\n%*sThis", len, "" ); if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) fprintf( file, ",\n%*s%s", len, "", arg->name ); } else { if (is_object( iface )) fprintf( file, ",\n%*s&This", len, "" ); else if (args) { arg = LIST_ENTRY( list_head(args), const var_t, entry ); fprintf( file, ",\n%*s&%s", len, "", arg->name ); } } fprintf( file, " );\n" ); if (has_ret) { print_file( file, 1, "return (" ); write_type_decl_left(file, rettype); fprintf( file, ")%s;\n", pointer_size == 8 ? "_RetVal.Simple" : "*(LONG_PTR *)&_RetVal" ); } print_file( file, 0, "}\n\n"); } void write_exceptions( FILE *file ) { fprintf( file, "#ifndef USE_COMPILER_EXCEPTIONS\n"); fprintf( file, "\n"); fprintf( file, "#include \"wine/exception.h\"\n"); fprintf( file, "#undef RpcTryExcept\n"); fprintf( file, "#undef RpcExcept\n"); fprintf( file, "#undef RpcEndExcept\n"); fprintf( file, "#undef RpcTryFinally\n"); fprintf( file, "#undef RpcFinally\n"); fprintf( file, "#undef RpcEndFinally\n"); fprintf( file, "#undef RpcExceptionCode\n"); fprintf( file, "#undef RpcAbnormalTermination\n"); fprintf( file, "\n"); fprintf( file, "struct __exception_frame;\n"); fprintf( file, "typedef int (*__filter_func)(struct __exception_frame *);\n"); fprintf( file, "typedef void (*__finally_func)(struct __exception_frame *);\n"); fprintf( file, "\n"); fprintf( file, "#define __DECL_EXCEPTION_FRAME \\\n"); fprintf( file, " EXCEPTION_REGISTRATION_RECORD frame; \\\n"); fprintf( file, " __filter_func filter; \\\n"); fprintf( file, " __finally_func finally; \\\n"); fprintf( file, " sigjmp_buf jmp; \\\n"); fprintf( file, " DWORD code; \\\n"); fprintf( file, " unsigned char abnormal_termination; \\\n"); fprintf( file, " unsigned char filter_level; \\\n"); fprintf( file, " unsigned char finally_level;\n"); fprintf( file, "\n"); fprintf( file, "struct __exception_frame\n{\n"); fprintf( file, " __DECL_EXCEPTION_FRAME\n"); fprintf( file, "};\n"); fprintf( file, "\n"); fprintf( file, "static inline void __widl_unwind_target(void)\n" ); fprintf( file, "{\n"); fprintf( file, " struct __exception_frame *exc_frame = (struct __exception_frame *)__wine_get_frame();\n" ); fprintf( file, " if (exc_frame->finally_level > exc_frame->filter_level)\n" ); fprintf( file, " {\n"); fprintf( file, " exc_frame->abnormal_termination = 1;\n"); fprintf( file, " exc_frame->finally( exc_frame );\n"); fprintf( file, " __wine_pop_frame( &exc_frame->frame );\n"); fprintf( file, " }\n"); fprintf( file, " exc_frame->filter_level = 0;\n"); fprintf( file, " siglongjmp( exc_frame->jmp, 1 );\n"); fprintf( file, "}\n"); fprintf( file, "\n"); fprintf( file, "static DWORD __widl_exception_handler( EXCEPTION_RECORD *record,\n"); fprintf( file, " EXCEPTION_REGISTRATION_RECORD *frame,\n"); fprintf( file, " CONTEXT *context,\n"); fprintf( file, " EXCEPTION_REGISTRATION_RECORD **pdispatcher )\n"); fprintf( file, "{\n"); fprintf( file, " struct __exception_frame *exc_frame = (struct __exception_frame *)frame;\n"); fprintf( file, "\n"); fprintf( file, " if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL))\n"); fprintf( file, " {\n" ); fprintf( file, " if (exc_frame->finally_level && (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)))\n"); fprintf( file, " {\n" ); fprintf( file, " exc_frame->abnormal_termination = 1;\n"); fprintf( file, " exc_frame->finally( exc_frame );\n"); fprintf( file, " }\n" ); fprintf( file, " return ExceptionContinueSearch;\n"); fprintf( file, " }\n" ); fprintf( file, " exc_frame->code = record->ExceptionCode;\n"); fprintf( file, " if (exc_frame->filter_level && exc_frame->filter( exc_frame ) == EXCEPTION_EXECUTE_HANDLER)\n" ); fprintf( file, " __wine_rtl_unwind( frame, record, __widl_unwind_target );\n"); fprintf( file, " return ExceptionContinueSearch;\n"); fprintf( file, "}\n"); fprintf( file, "\n"); fprintf( file, "#define RpcTryExcept \\\n"); fprintf( file, " if (!sigsetjmp( __frame->jmp, 0 )) \\\n"); fprintf( file, " { \\\n"); fprintf( file, " if (!__frame->finally_level) \\\n" ); fprintf( file, " __wine_push_frame( &__frame->frame ); \\\n"); fprintf( file, " __frame->filter_level = __frame->finally_level + 1;\n" ); fprintf( file, "\n"); fprintf( file, "#define RpcExcept(expr) \\\n"); fprintf( file, " if (!__frame->finally_level) \\\n" ); fprintf( file, " __wine_pop_frame( &__frame->frame ); \\\n"); fprintf( file, " __frame->filter_level = 0; \\\n" ); fprintf( file, " } \\\n"); fprintf( file, " else \\\n"); fprintf( file, "\n"); fprintf( file, "#define RpcEndExcept\n"); fprintf( file, "\n"); fprintf( file, "#define RpcExceptionCode() (__frame->code)\n"); fprintf( file, "\n"); fprintf( file, "#define RpcTryFinally \\\n"); fprintf( file, " if (!__frame->filter_level) \\\n"); fprintf( file, " __wine_push_frame( &__frame->frame ); \\\n"); fprintf( file, " __frame->finally_level = __frame->filter_level + 1;\n"); fprintf( file, "\n"); fprintf( file, "#define RpcFinally \\\n"); fprintf( file, " if (!__frame->filter_level) \\\n"); fprintf( file, " __wine_pop_frame( &__frame->frame ); \\\n"); fprintf( file, " __frame->finally_level = 0;\n"); fprintf( file, "\n"); fprintf( file, "#define RpcEndFinally\n"); fprintf( file, "\n"); fprintf( file, "#define RpcAbnormalTermination() (__frame->abnormal_termination)\n"); fprintf( file, "\n"); fprintf( file, "#define RpcExceptionInit(filter_func,finally_func) \\\n"); fprintf( file, " do { \\\n"); fprintf( file, " __frame->frame.Handler = __widl_exception_handler; \\\n"); fprintf( file, " __frame->filter = (__filter_func)(filter_func); \\\n" ); fprintf( file, " __frame->finally = (__finally_func)(finally_func); \\\n"); fprintf( file, " __frame->abnormal_termination = 0; \\\n"); fprintf( file, " __frame->filter_level = 0; \\\n"); fprintf( file, " __frame->finally_level = 0; \\\n"); fprintf( file, " } while (0)\n"); fprintf( file, "\n"); fprintf( file, "#else /* USE_COMPILER_EXCEPTIONS */\n"); fprintf( file, "\n"); fprintf( file, "#define RpcExceptionInit(filter_func,finally_func) \\\n"); fprintf( file, " do { (void)(filter_func); } while(0)\n"); fprintf( file, "\n"); fprintf( file, "#define __DECL_EXCEPTION_FRAME \\\n"); fprintf( file, " DWORD code;\n"); fprintf( file, "\n"); fprintf( file, "#endif /* USE_COMPILER_EXCEPTIONS */\n"); } ================================================ FILE: widl/typegen.h ================================================ /* * Format String Generator for IDL Compiler * * Copyright 2005-2006 Eric Kohl * Copyright 2005 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include enum pass { PASS_IN, PASS_OUT, PASS_RETURN }; enum remoting_phase { PHASE_BUFFERSIZE, PHASE_MARSHAL, PHASE_UNMARSHAL, PHASE_FREE }; enum typegen_detect_flags { TDT_ALL_TYPES = 1 << 0, TDT_IGNORE_STRINGS = 1 << 1, TDT_IGNORE_RANGES = 1 << 2, }; enum typegen_type { TGT_INVALID, TGT_USER_TYPE, TGT_CTXT_HANDLE, TGT_CTXT_HANDLE_POINTER, TGT_STRING, TGT_POINTER, TGT_ARRAY, TGT_IFACE_POINTER, TGT_BASIC, TGT_ENUM, TGT_STRUCT, TGT_UNION, TGT_RANGE, }; typedef int (*type_pred_t)(const type_t *); void write_formatstringsdecl(FILE *f, int indent, const statement_list_t *stmts, type_pred_t pred); void write_procformatstring(FILE *file, const statement_list_t *stmts, type_pred_t pred); void write_typeformatstring(FILE *file, const statement_list_t *stmts, type_pred_t pred); void write_procformatstring_offsets( FILE *file, const type_t *iface ); void print_phase_basetype(FILE *file, int indent, const char *local_var_prefix, enum remoting_phase phase, enum pass pass, const var_t *var, const char *varname); void write_parameter_conf_or_var_exprs(FILE *file, int indent, const char *local_var_prefix, enum remoting_phase phase, const var_t *var, int valid_variance); void write_remoting_arguments(FILE *file, int indent, const var_t *func, const char *local_var_prefix, enum pass pass, enum remoting_phase phase); unsigned int get_size_procformatstring_func(const type_t *iface, const var_t *func); unsigned int get_size_procformatstring(const statement_list_t *stmts, type_pred_t pred); unsigned int get_size_typeformatstring(const statement_list_t *stmts, type_pred_t pred); void assign_stub_out_args( FILE *file, int indent, const var_t *func, const char *local_var_prefix ); void declare_stub_args( FILE *file, int indent, const var_t *func ); void write_func_param_struct( FILE *file, const type_t *iface, const type_t *func, const char *var_decl, int add_retval ); void write_pointer_checks( FILE *file, int indent, const var_t *func ); int write_expr_eval_routines(FILE *file, const char *iface); void write_expr_eval_routine_list(FILE *file, const char *iface); void write_user_quad_list(FILE *file); void write_endpoints( FILE *f, const char *prefix, const str_list_t *list ); void write_client_call_routine( FILE *file, const type_t *iface, const var_t *func, const char *prefix, unsigned int proc_offset ); void write_exceptions( FILE *file ); unsigned int type_memsize(const type_t *t); int decl_indirect(const type_t *t); int is_interpreted_func(const type_t *iface, const var_t *func); void write_parameters_init(FILE *file, int indent, const var_t *func, const char *local_var_prefix); void print(FILE *file, int indent, const char *format, va_list ap); expr_t *get_size_is_expr(const type_t *t, const char *name); int is_full_pointer_function(const var_t *func); void write_full_pointer_init(FILE *file, int indent, const var_t *func, int is_server); void write_full_pointer_free(FILE *file, int indent, const var_t *func); unsigned char get_basic_fc(const type_t *type); unsigned char get_pointer_fc(const type_t *type, const attr_list_t *attrs, int toplevel_param); unsigned char get_struct_fc(const type_t *type); enum typegen_type typegen_detect_type(const type_t *type, const attr_list_t *attrs, unsigned int flags); unsigned int type_memsize_and_alignment(const type_t *t, unsigned int *align); ================================================ FILE: widl/typelib.c ================================================ /* * IDL Compiler * * Copyright 2004 Ove Kaaven * Copyright 2006 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include "wine/wpp.h" #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "windef.h" #include "winbase.h" #include "widl.h" #include "utils.h" #include "parser.h" #include "header.h" #include "typelib.h" #include "widltypes.h" #include "typelib_struct.h" #include "typetree.h" static typelib_t *typelib; /* List of oleauto types that should be recognized by name. * (most of) these seem to be intrinsic types in mktyplib. * This table MUST be alphabetically sorted on the kw field. */ static const struct oatype { const char *kw; unsigned short vt; } oatypes[] = { {"BSTR", VT_BSTR}, {"CURRENCY", VT_CY}, {"DATE", VT_DATE}, {"DECIMAL", VT_DECIMAL}, {"HRESULT", VT_HRESULT}, {"LPSTR", VT_LPSTR}, {"LPWSTR", VT_LPWSTR}, {"SCODE", VT_ERROR}, {"VARIANT", VT_VARIANT}, {"VARIANT_BOOL", VT_BOOL} }; #define NTYPES (sizeof(oatypes)/sizeof(oatypes[0])) #define KWP(p) ((const struct oatype *)(p)) static int kw_cmp_func(const void *s1, const void *s2) { return strcmp(KWP(s1)->kw, KWP(s2)->kw); } static unsigned short builtin_vt(const type_t *t) { const char *kw = t->name; struct oatype key; const struct oatype *kwp; key.kw = kw; #ifdef KW_BSEARCH kwp = bsearch(&key, oatypes, NTYPES, sizeof(oatypes[0]), kw_cmp_func); #else { unsigned int i; for (kwp=NULL, i=0; i < NTYPES; i++) if (!kw_cmp_func(&key, &oatypes[i])) { kwp = &oatypes[i]; break; } } #endif if (kwp) { return kwp->vt; } if (is_string_type (t->attrs, t)) { const type_t *elem_type; if (is_array(t)) elem_type = type_array_get_element(t); else elem_type = type_pointer_get_ref(t); if (type_get_type(elem_type) == TYPE_BASIC) { switch (type_basic_get_type(elem_type)) { case TYPE_BASIC_CHAR: return VT_LPSTR; case TYPE_BASIC_WCHAR: return VT_LPWSTR; default: break; } } } return 0; } static int match(const char*n, const char*m) { if (!n) return 0; return !strcmp(n, m); } unsigned short get_type_vt(type_t *t) { unsigned short vt; chat("get_type_vt: %p type->name %s\n", t, t->name); if (t->name) { vt = builtin_vt(t); if (vt) return vt; } if (type_is_alias(t) && is_attr(t->attrs, ATTR_PUBLIC)) return VT_USERDEFINED; switch (type_get_type(t)) { case TYPE_BASIC: switch (type_basic_get_type(t)) { case TYPE_BASIC_BYTE: return VT_UI1; case TYPE_BASIC_CHAR: case TYPE_BASIC_INT8: if (type_basic_get_sign(t) > 0) return VT_UI1; else return VT_I1; case TYPE_BASIC_WCHAR: return VT_I2; /* mktyplib seems to parse wchar_t as short */ case TYPE_BASIC_INT16: if (type_basic_get_sign(t) > 0) return VT_UI2; else return VT_I2; case TYPE_BASIC_INT: if (type_basic_get_sign(t) > 0) return VT_UINT; else return VT_INT; case TYPE_BASIC_INT32: case TYPE_BASIC_ERROR_STATUS_T: if (type_basic_get_sign(t) > 0) return VT_UI4; else return VT_I4; case TYPE_BASIC_INT64: case TYPE_BASIC_HYPER: if (type_basic_get_sign(t) > 0) return VT_UI8; else return VT_I8; case TYPE_BASIC_INT3264: if (typelib_kind == SYS_WIN64) { if (type_basic_get_sign(t) > 0) return VT_UI8; else return VT_I8; } else { if (type_basic_get_sign(t) > 0) return VT_UI4; else return VT_I4; } case TYPE_BASIC_FLOAT: return VT_R4; case TYPE_BASIC_DOUBLE: return VT_R8; case TYPE_BASIC_HANDLE: error("handles can't be used in typelibs\n"); } break; case TYPE_POINTER: return VT_PTR; case TYPE_ARRAY: if (type_array_is_decl_as_ptr(t)) { if (match(type_array_get_element(t)->name, "SAFEARRAY")) return VT_SAFEARRAY; } else error("get_type_vt: array types not supported\n"); return VT_PTR; case TYPE_INTERFACE: if(match(t->name, "IUnknown")) return VT_UNKNOWN; if(match(t->name, "IDispatch")) return VT_DISPATCH; return VT_USERDEFINED; case TYPE_ENUM: case TYPE_STRUCT: case TYPE_COCLASS: case TYPE_MODULE: case TYPE_UNION: case TYPE_ENCAPSULATED_UNION: return VT_USERDEFINED; case TYPE_VOID: return VT_VOID; case TYPE_ALIAS: /* aliases should be filtered out by the type_get_type call above */ assert(0); break; case TYPE_FUNCTION: error("get_type_vt: functions not supported\n"); break; case TYPE_BITFIELD: error("get_type_vt: bitfields not supported\n"); break; } return 0; } void start_typelib(typelib_t *typelib_type) { if (!do_typelib) return; typelib = typelib_type; } void end_typelib(void) { if (!typelib) return; create_msft_typelib(typelib); } static void tlb_read(int fd, void *buf, int count) { if(read(fd, buf, count) < count) error("error while reading importlib.\n"); } static void tlb_lseek(int fd, off_t offset) { if(lseek(fd, offset, SEEK_SET) == -1) error("lseek failed\n"); } static void msft_read_guid(int fd, MSFT_SegDir *segdir, int offset, GUID *guid) { tlb_lseek(fd, segdir->pGuidTab.offset+offset); tlb_read(fd, guid, sizeof(GUID)); } static void read_msft_importlib(importlib_t *importlib, int fd) { MSFT_Header header; MSFT_SegDir segdir; int *typeinfo_offs; int i; importlib->allocated = 0; tlb_lseek(fd, 0); tlb_read(fd, &header, sizeof(header)); importlib->version = header.version; typeinfo_offs = xmalloc(header.nrtypeinfos*sizeof(INT)); tlb_read(fd, typeinfo_offs, header.nrtypeinfos*sizeof(INT)); tlb_read(fd, &segdir, sizeof(segdir)); msft_read_guid(fd, &segdir, header.posguid, &importlib->guid); importlib->ntypeinfos = header.nrtypeinfos; importlib->importinfos = xmalloc(importlib->ntypeinfos*sizeof(importinfo_t)); for(i=0; i < importlib->ntypeinfos; i++) { MSFT_TypeInfoBase base; MSFT_NameIntro nameintro; int len; tlb_lseek(fd, sizeof(MSFT_Header) + header.nrtypeinfos*sizeof(INT) + sizeof(MSFT_SegDir) + typeinfo_offs[i]); tlb_read(fd, &base, sizeof(base)); importlib->importinfos[i].importlib = importlib; importlib->importinfos[i].flags = (base.typekind&0xf)<<24; importlib->importinfos[i].offset = -1; importlib->importinfos[i].id = i; if(base.posguid != -1) { importlib->importinfos[i].flags |= MSFT_IMPINFO_OFFSET_IS_GUID; msft_read_guid(fd, &segdir, base.posguid, &importlib->importinfos[i].guid); } else memset( &importlib->importinfos[i].guid, 0, sizeof(importlib->importinfos[i].guid)); tlb_lseek(fd, segdir.pNametab.offset + base.NameOffset); tlb_read(fd, &nameintro, sizeof(nameintro)); len = nameintro.namelen & 0xff; importlib->importinfos[i].name = xmalloc(len+1); tlb_read(fd, importlib->importinfos[i].name, len); importlib->importinfos[i].name[len] = 0; } free(typeinfo_offs); } static int open_typelib(const char *name) { char *file_name; int fd; file_name = wpp_find_include(name, NULL); if(!file_name) return open(name, O_RDONLY | O_BINARY ); fd = open(file_name, O_RDONLY | O_BINARY ); free(file_name); return fd; } static void read_importlib(importlib_t *importlib) { int fd; INT magic; fd = open_typelib(importlib->name); /* widl extension: if importlib name has no .tlb extension, try using .tlb */ if(fd < 0) { const char *p = strrchr(importlib->name, '.'); size_t len = p ? p - importlib->name : strlen(importlib->name); if(strcmp(importlib->name + len, ".tlb")) { char *tlb_name = xmalloc(len + 5); memcpy(tlb_name, importlib->name, len); strcpy(tlb_name + len, ".tlb"); fd = open_typelib(tlb_name); free(tlb_name); } } if(fd < 0) error("Could not find importlib %s.\n", importlib->name); tlb_read(fd, &magic, sizeof(magic)); switch(magic) { case MSFT_MAGIC: read_msft_importlib(importlib, fd); break; default: error("Wrong or unsupported typelib magic %x\n", magic); }; close(fd); } void add_importlib(const char *name) { importlib_t *importlib; if(!typelib) return; LIST_FOR_EACH_ENTRY( importlib, &typelib->importlibs, importlib_t, entry ) if(!strcmp(name, importlib->name)) return; chat("add_importlib: %s\n", name); importlib = xmalloc(sizeof(*importlib)); memset( importlib, 0, sizeof(*importlib) ); importlib->name = xstrdup(name); read_importlib(importlib); list_add_head( &typelib->importlibs, &importlib->entry ); } ================================================ FILE: widl/typelib.h ================================================ /* * IDL Compiler * * Copyright 2004 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WIDL_TYPELIB_H #define __WIDL_TYPELIB_H extern void start_typelib(typelib_t *typelib_type); extern void end_typelib(void); extern void add_importlib(const char *name); /* Copied from wtypes.h. Not included directly because that would create a * circular dependency (after all, wtypes.h is generated by widl...) */ enum VARENUM { VT_EMPTY = 0, VT_NULL = 1, VT_I2 = 2, VT_I4 = 3, VT_R4 = 4, VT_R8 = 5, VT_CY = 6, VT_DATE = 7, VT_BSTR = 8, VT_DISPATCH = 9, VT_ERROR = 10, VT_BOOL = 11, VT_VARIANT = 12, VT_UNKNOWN = 13, VT_DECIMAL = 14, VT_I1 = 16, VT_UI1 = 17, VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_INT = 22, VT_UINT = 23, VT_VOID = 24, VT_HRESULT = 25, VT_PTR = 26, VT_SAFEARRAY = 27, VT_CARRAY = 28, VT_USERDEFINED = 29, VT_LPSTR = 30, VT_LPWSTR = 31, VT_RECORD = 36, VT_INT_PTR = 37, VT_UINT_PTR = 38, VT_FILETIME = 64, VT_BLOB = 65, VT_STREAM = 66, VT_STORAGE = 67, VT_STREAMED_OBJECT = 68, VT_STORED_OBJECT = 69, VT_BLOB_OBJECT = 70, VT_CF = 71, VT_CLSID = 72, VT_VERSIONED_STREAM = 73, VT_BSTR_BLOB = 0xfff, VT_VECTOR = 0x1000, VT_ARRAY = 0x2000, VT_BYREF = 0x4000, VT_RESERVED = 0x8000, VT_ILLEGAL = 0xffff, VT_ILLEGALMASKED = 0xfff, VT_TYPEMASK = 0xfff }; extern unsigned short get_type_vt(type_t *t); extern int create_msft_typelib(typelib_t *typelib); #endif ================================================ FILE: widl/typelib_struct.h ================================================ /* * typelib_struct.h internal wine data structures * used to decode typelib's * * Copyright 1999 Rein KLazes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WIDL_TYPELIB_STRUCT_H #define _WIDL_TYPELIB_STRUCT_H #define HELPDLLFLAG (0x0100) #define DO_NOT_SEEK (-1) #define MSFT_HREFTYPE_INTHISFILE(href) (!((href) & 3)) #define MSFT_HREFTYPE_INDEX(href) ((href) /sizeof(MSFT_TypeInfoBase)) /*-------------------------FILE STRUCTURES-----------------------------------*/ /* There are two known file formats, those created with ICreateTypeLib * have the signature "SLTG" as their first four bytes, while those created * with ICreateTypeLib2 have "MSFT". */ #define MSFT_MAGIC 0x5446534d /***************************************************** * MSFT typelibs * * These are TypeLibs created with ICreateTypeLib2 * */ /* * structure of the typelib type2 header * it is at the beginning of a type lib file * */ typedef struct tagMSFT_Header { /*0x00*/INT magic1; /* 0x5446534D "MSFT" */ INT magic2; /* 0x00010002 version nr? */ INT posguid; /* position of libid in guid table */ /* (should be, else -1) */ INT lcid; /* locale id */ /*0x10*/INT lcid2; INT varflags; /* (largely) unknown flags */ /* the lower nibble is syskind */ /* 0x40 always seems to be set */ /* 0x10 set with a helpfile defined */ /* 0x100 set with a helpstringdll defined - in this case the offset to the name in the stringtable appears right after this struct, before the typeinfo offsets */ INT version; /* set with SetVersion() */ INT flags; /* set with SetFlags() */ /*0x20*/INT nrtypeinfos; /* number of typeinfo's (till so far) */ INT helpstring; /* position of help string in stringtable */ INT helpstringcontext; INT helpcontext; /*0x30*/INT nametablecount; /* number of names in name table */ INT nametablechars; /* nr of characters in name table */ INT NameOffset; /* offset of name in name table */ INT helpfile; /* position of helpfile in stringtable */ /*0x40*/INT CustomDataOffset; /* if -1 no custom data, else it is offset */ /* in customer data/guid offset table */ INT res44; /* unknown always: 0x20 (guid hash size?) */ INT res48; /* unknown always: 0x80 (name hash size?) */ INT dispatchpos; /* HREFTYPE to IDispatch, or -1 if no IDispatch */ /*0x50*/INT nimpinfos; /* number of impinfos */ } MSFT_Header; /* segments in the type lib file have a structure like this: */ typedef struct tagMSFT_pSeg { INT offset; /* absolute offset in file */ INT length; /* length of segment */ INT res08; /* unknown always -1 */ INT res0c; /* unknown always 0x0f in the header */ /* 0x03 in the typeinfo_data */ } MSFT_pSeg; /* layout of the main segment directory */ typedef struct tagMSFT_SegDir { /*1*/MSFT_pSeg pTypeInfoTab; /* each typeinfo gets an entry of 0x64 bytes */ /* (25 ints) */ /*2*/MSFT_pSeg pImpInfo; /* table with info for imported types */ /*3*/MSFT_pSeg pImpFiles; /* import libraries */ /*4*/MSFT_pSeg pRefTab; /* References table */ /*5*/MSFT_pSeg pGuidHashTab; /* always exists, always same size (0x80) */ /* hash table with offsets to guid */ /*6*/MSFT_pSeg pGuidTab; /* all guids are stored here together with */ /* offset in some table???? */ /*7*/MSFT_pSeg pNameHashTab; /* always created, always same size (0x200) */ /* hash table with offsets to names */ /*8*/MSFT_pSeg pNametab; /* name tables */ /*9*/MSFT_pSeg pStringtab; /* string table */ /*A*/MSFT_pSeg pTypdescTab; /* table with type descriptors */ /*B*/MSFT_pSeg pArrayDescriptions; /*C*/MSFT_pSeg pCustData; /* data table, used for custom data and default */ /* parameter values */ /*D*/MSFT_pSeg pCDGuids; /* table with offsets for the guids and into */ /* the customer data table */ /*E*/MSFT_pSeg res0e; /* unknown */ /*F*/MSFT_pSeg res0f; /* unknown */ } MSFT_SegDir; /* base type info data */ typedef struct tagMSFT_TypeInfoBase { /*000*/ INT typekind; /* it is the TKIND_xxx */ /* some byte alignment stuff */ INT memoffset; /* points past the file, if no elements */ INT res2; /* zero if no element, N*0x40 */ INT res3; /* -1 if no element, (N-1)*0x38 */ /*010*/ INT res4; /* always? 3 */ INT res5; /* always? zero */ INT cElement; /* counts elements, HI=cVars, LO=cFuncs */ INT res7; /* always? zero */ /*020*/ INT res8; /* always? zero */ INT res9; /* always? zero */ INT resA; /* always? zero */ INT posguid; /* position in guid table */ /*030*/ INT flags; /* Typeflags */ INT NameOffset; /* offset in name table */ INT version; /* element version */ INT docstringoffs; /* offset of docstring in string tab */ /*040*/ INT helpstringcontext; /* */ INT helpcontext; /* */ INT oCustData; /* offset in customer data table */ #ifdef WORDS_BIGENDIAN INT16 cbSizeVft; /* virtual table size, including inherits */ INT16 cImplTypes; /* nr of implemented interfaces */ #else INT16 cImplTypes; /* nr of implemented interfaces */ INT16 cbSizeVft; /* virtual table size, including inherits */ #endif /*050*/ INT size; /* size in bytes, at least for structures */ /* FIXME: name of this field */ INT datatype1; /* position in type description table */ /* or in base interfaces */ /* if coclass: offset in reftable */ /* if interface: reference to inherited if */ INT datatype2; /* for interfaces: hiword is num of inherited funcs */ /* loword is num of inherited interfaces */ INT res18; /* always? 0 */ /*060*/ INT res19; /* always? -1 */ } MSFT_TypeInfoBase; /* layout of an entry with information on imported types */ typedef struct tagMSFT_ImpInfo { INT flags; /* bits 0 - 15: count */ /* bit 16: if set oGuid is an offset to Guid */ /* if clear oGuid is a typeinfo index in the specified typelib */ /* bits 24 - 31: TKIND of reference */ INT oImpFile; /* offset in the Import File table */ INT oGuid; /* offset in Guid table or typeinfo index (see bit 16 of flags) */ } MSFT_ImpInfo; #define MSFT_IMPINFO_OFFSET_IS_GUID 0x00010000 /* function description data */ typedef struct { /* INT recsize; record size including some extra stuff */ INT DataType; /* data type of the member, eg return of function */ INT Flags; /* something to do with attribute flags (LOWORD) */ #ifdef WORDS_BIGENDIAN INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */ INT16 VtableOffset; /* offset in vtable */ #else INT16 VtableOffset; /* offset in vtable */ INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */ #endif INT FKCCIC; /* bit string with the following */ /* meaning (bit 0 is the lsb): */ /* bits 0 - 2: FUNCKIND */ /* bits 3 - 6: INVOKEKIND */ /* bit 7: custom data present */ /* bits 8 - 11: CALLCONV */ /* bit 12: parameters have default values */ /* bit 13: oEntry is numeric */ /* bit 14: has retval param */ /* bits 16 - 31: index of next function with same id */ #ifdef WORDS_BIGENDIAN INT16 nroargs; /* nr of optional arguments */ INT16 nrargs; /* number of arguments (including optional ????) */ #else INT16 nrargs; /* number of arguments (including optional ????) */ INT16 nroargs; /* nr of optional arguments */ #endif /* optional attribute fields, the number of them is variable */ INT OptAttr[1]; /* 0* INT helpcontext; 1* INT oHelpString; 2* INT oEntry; // either offset in string table or numeric as it is (see bit 13 of FKCCIC) // 3* INT res9; // unknown (-1) // 4* INT resA; // unknown (-1) // 5* INT HelpStringContext; // these are controlled by a bit set in the FKCCIC field // 6* INT oCustData; // custom data for function // 7* INT oArgCustData[1]; // custom data per argument // */ } MSFT_FuncRecord; /* after this may follow an array with default value pointers if the * appropriate bit in the FKCCIC field has been set: * INT oDefaultValue[nrargs]; */ /* Parameter info one per argument*/ typedef struct { INT DataType; INT oName; INT Flags; } MSFT_ParameterInfo; /* Variable description data */ typedef struct { /* INT recsize; // record size including some extra stuff */ INT DataType; /* data type of the variable */ INT Flags; /* VarFlags (LOWORD) */ #ifdef WORDS_BIGENDIAN INT16 vardescsize; /* size of reconstituted VARDESC and related structs */ INT16 VarKind; /* VarKind */ #else INT16 VarKind; /* VarKind */ INT16 vardescsize; /* size of reconstituted VARDESC and related structs */ #endif INT OffsValue; /* value of the variable or the offset */ /* in the data structure */ /* optional attribute fields, the number of them is variable */ /* controlled by record length */ INT HelpContext; INT oHelpString; INT res9; /* unknown (-1) */ INT oCustData; /* custom data for variable */ INT HelpStringContext; } MSFT_VarRecord; /* Structure of the reference data */ typedef struct { INT reftype; /* either offset in type info table, then it's */ /* a multiple of 64 */ /* or offset in the external reference table */ /* with an offset of 1 */ INT flags; INT oCustData; /* custom data */ INT onext; /* next offset, -1 if last */ } MSFT_RefRecord; /* this is how a guid is stored */ typedef struct { GUID guid; INT hreftype; /* -2 for the typelib guid, typeinfo offset for typeinfo guid, low two bits are 01 if this is an imported typeinfo, low two bits are 10 if this is an imported typelib (used by imported typeinfos) */ INT next_hash; /* offset to next guid in the hash bucket */ } MSFT_GuidEntry; /* some data preceding entries in the name table */ typedef struct { INT hreftype; /* is -1 if name is for neither a typeinfo, a variable, or a function (that is, name is for a typelib or a function parameter). otherwise is the offset of the first typeinfo that this name refers to (either to the typeinfo itself or to a member of the typeinfo */ INT next_hash; /* offset to next name in the hash bucket */ INT namelen; /* only lower 8 bits are valid */ /* 0x1000 if name is only used once as a variable name */ /* 0x2000 if name is a variable in an enumeration */ /* 0x3800 if name is typeinfo name */ /* upper 16 bits are hash code */ } MSFT_NameIntro; /* the custom data table directory has entries like this */ typedef struct { INT GuidOffset; INT DataOffset; INT next; /* next offset in the table, -1 if it's the last */ } MSFT_CDGuid; /*********************************************************** * * SLTG typelibs. * * These are created with ICreateTypeLib * */ #include "pshpack1.h" typedef struct { /*00*/ DWORD SLTG_magic; /* 0x47544c53 == "SLTG" */ /*04*/ WORD nrOfFileBlks; /* no of SLTG_BlkEntry's + 1 */ /*06*/ WORD res06; /* ?? always 9 */ /*08*/ WORD res08; /* some kind of len/offset ?? */ /*0a*/ WORD first_blk; /* 1 based index into blk entries that corresponds to first block in file */ /*0c*/ DWORD res0c; /* always 0x000204ff */ /*10*/ DWORD res10; /* always 0x00000000 */ /*14*/ DWORD res14; /* always 0x000000c0 */ /*18*/ DWORD res18; /* always 0x46000000 */ /*1c*/ DWORD res1c; /* always 0x00000044 */ /*20*/ DWORD res20; /* always 0xffff0000 */ } SLTG_Header; /* This gets followed by a list of block entries */ typedef struct { /*00*/ DWORD len; /*04*/ WORD index_string; /* offs from start of SLTG_Magic to index string */ /*06*/ WORD next; } SLTG_BlkEntry; /* The order of the blocks in the file is given by starting at Block entry firt_blk and stepping through using the next pointer */ /* These then get followed by this magic */ typedef struct { /*00*/ BYTE res00; /* always 0x01 */ /*01*/ CHAR CompObj_magic[8]; /* always "CompObj" */ /*09*/ CHAR dir_magic[4]; /* always "dir" */ } SLTG_Magic; #define SLTG_COMPOBJ_MAGIC "CompObj" #define SLTG_DIR_MAGIC "dir" /* Next we have SLTG_Header.nrOfFileBlks - 2 of Index strings. These are presumably unique to within the file and look something like "AAAAAAAAAA" with the first character incremented from 'A' to ensure uniqueness. I guess successive chars increment when we need to wrap the first one. */ typedef struct { /*00*/ CHAR string[11]; } SLTG_Index; /* This is followed by SLTG_pad9 */ typedef struct { /*00*/ CHAR pad[9]; /* 9 '\0's */ } SLTG_Pad9; /* Now we have the noOfFileBlks - 1 worth of blocks. The length of each block is given by its entry in SLTG_BlkEntry. */ /* type SLTG_NAME in rather like a BSTR except that the length in bytes is given by the first WORD and the string contains 8bit chars */ typedef WORD SLTG_Name; /* The main library block looks like this. This one seems to come last */ typedef struct { /*00*/ WORD magic; /* 0x51cc */ /*02*/ WORD res02; /* 0x0003, 0x0004 */ /*04*/ WORD name; /* offset to name in name table */ /*06*/ SLTG_Name res06; /* maybe this is just WORD == 0xffff */ SLTG_Name helpstring; SLTG_Name helpfile; DWORD helpcontext; WORD syskind; /* == 1 for win32, 0 for win16 */ WORD lcid; /* == 0x409, 0x809 etc */ DWORD res12; /* == 0 */ WORD libflags; /* LIBFLAG_* */ WORD maj_vers; WORD min_vers; GUID uuid; } SLTG_LibBlk; #define SLTG_LIBBLK_MAGIC 0x51cc /* we then get 0x40 bytes worth of 0xffff or small numbers followed by nrOfFileBlks - 2 of these */ typedef struct { WORD small_no; SLTG_Name index_name; /* This refers to a name in the directory */ SLTG_Name other_name; /* Another one of these weird names */ WORD res1a; /* 0xffff */ WORD name_offs; /* offset to name in name table */ WORD more_bytes; /* if this is non-zero we get this many bytes before the next element, which seem to reference the docstring of the type ? */ WORD res20; /* 0xffff */ DWORD helpcontext; WORD res26; /* 0xffff */ GUID uuid; } SLTG_OtherTypeInfo; /* Next we get WORD 0x0003 followed by a DWORD which if we add to 0x216 gives the offset to the name table from the start of the LibBlk struct */ typedef struct { /*00*/ WORD magic; /* 0x0501 */ /*02*/ DWORD href_table; /* if not 0xffffffff, then byte offset from beginning of struct to href table */ /*06*/ DWORD res06; /* 0xffffffff */ /*0a*/ DWORD elem_table; /* offset to members */ /*0e*/ DWORD res0e; /* 0xffffffff */ /*12*/ WORD major_version; /* major version number */ /*14*/ WORD minor_version; /* minor version number */ /*16*/ DWORD res16; /* 0xfffe0000 */ /*1a*/ BYTE typeflags1;/* 0x02 | top 5 bits hold l5sbs of TYPEFLAGS */ /*1b*/ BYTE typeflags2;/* TYPEFLAGS >> 5 */ /*1c*/ BYTE typeflags3;/* 0x02*/ /*1d*/ BYTE typekind; /* 0x03 == TKIND_INTERFACE etc. */ /*1e*/ DWORD res1e; /* 0x00000000 or 0xffffffff */ } SLTG_TypeInfoHeader; #define SLTG_TIHEADER_MAGIC 0x0501 typedef struct { /*00*/ WORD cFuncs; /*02*/ WORD cVars; /*04*/ WORD cImplTypes; /*06*/ WORD res06; /*08*/ WORD res08; /*0a*/ WORD res0a; /*0c*/ WORD res0c; /*0e*/ WORD res0e; /*10*/ WORD res10; /*12*/ WORD res12; /*14*/ WORD tdescalias_vt; /* for TKIND_ALIAS */ /*16*/ WORD res16; /*18*/ WORD res18; /*1a*/ WORD res1a; /*1c*/ WORD res1c; /*1e*/ WORD res1e; /*20*/ WORD cbSizeInstance; /*22*/ WORD cbAlignment; /*24*/ WORD res24; /*26*/ WORD res26; /*28*/ WORD cbSizeVft; /*2a*/ WORD res2a; /*2c*/ WORD res2c; /*2e*/ WORD res2e; /*30*/ WORD res30; /*32*/ WORD res32; /*34*/ WORD res34; } SLTG_TypeInfoTail; typedef struct { /*00*/ WORD res00; /* 0x0001 sometimes 0x0003 ?? */ /*02*/ WORD res02; /* 0xffff */ /*04*/ BYTE res04; /* 0x01 */ /*05*/ DWORD cbExtra; /* No of bytes that follow */ } SLTG_MemberHeader; typedef struct { /*00*/ WORD magic; /* 0x120a */ /*02*/ WORD next; /* offset in bytes to next block from start of block group, 0xffff if last item */ /*04*/ WORD name; /* offset to name within name table */ /*06*/ WORD value; /* offset to value from start of block group */ /*08*/ WORD res08; /* 0x56 */ /*0a*/ DWORD memid; /* memid */ /*0e*/ WORD helpcontext;/* 0xfffe == no context, 0x0001 == stored in EnumInfo struct, else offset to value from start of block group */ /*10*/ WORD helpstring;/* offset from start of block group to string offset */ } SLTG_EnumItem; #define SLTG_ENUMITEM_MAGIC 0x120a typedef struct { /*00*/ WORD vt; /* vartype, 0xffff marks end. */ /*02*/ WORD res02; /* ?, 0xffff marks end */ } SLTG_AliasItem; #define SLTG_ALIASITEM_MAGIC 0x001d typedef struct { BYTE magic; /* 0x4c or 0x6c */ BYTE inv; /* high nibble is INVOKE_KIND, low nibble = 2 */ WORD next; /* byte offset from beginning of group to next fn */ WORD name; /* Offset within name table to name */ DWORD dispid; /* dispid */ WORD helpcontext; /* helpcontext (again 1 is special) */ WORD helpstring;/* helpstring offset to offset */ WORD arg_off; /* offset to args from start of block */ BYTE nacc; /* lowest 3bits are CALLCONV, rest are no of args */ BYTE retnextopt;/* if 0x80 bit set ret type follows else next WORD is offset to ret type. No of optional args is middle 6 bits */ WORD rettype; /* return type VT_?? or offset to ret type */ WORD vtblpos; /* position in vtbl? */ WORD funcflags; /* present if magic == 0x6c */ /* Param list starts, repeat next two as required */ #if 0 WORD name; /* offset to 2nd letter of name */ WORD+ type; /* VT_ of param */ #endif } SLTG_Function; #define SLTG_FUNCTION_MAGIC 0x4c #define SLTG_FUNCTION_WITH_FLAGS_MAGIC 0x6c typedef struct { /*00*/ BYTE magic; /* 0xdf */ /*01*/ BYTE res01; /* 0x00 */ /*02*/ DWORD res02; /* 0xffffffff */ /*06*/ DWORD res06; /* 0xffffffff */ /*0a*/ DWORD res0a; /* 0xffffffff */ /*0e*/ DWORD res0e; /* 0xffffffff */ /*12*/ DWORD res12; /* 0xffffffff */ /*16*/ DWORD res16; /* 0xffffffff */ /*1a*/ DWORD res1a; /* 0xffffffff */ /*1e*/ DWORD res1e; /* 0xffffffff */ /*22*/ DWORD res22; /* 0xffffffff */ /*26*/ DWORD res26; /* 0xffffffff */ /*2a*/ DWORD res2a; /* 0xffffffff */ /*2e*/ DWORD res2e; /* 0xffffffff */ /*32*/ DWORD res32; /* 0xffffffff */ /*36*/ DWORD res36; /* 0xffffffff */ /*3a*/ DWORD res3a; /* 0xffffffff */ /*3e*/ DWORD res3e; /* 0xffffffff */ /*42*/ WORD res42; /* 0xffff */ /*44*/ DWORD number; /* this is 8 times the number of refs */ /*48*/ /* Now we have number bytes (8 for each ref) of SLTG_UnknownRefInfo */ /*50*/ WORD res50; /* 0xffff */ /*52*/ BYTE res52; /* 0x01 */ /*53*/ DWORD res53; /* 0x00000000 */ /*57*/ SLTG_Name names[1]; /* Now we have number/8 SLTG_Names (first WORD is no of bytes in the ascii * string). Strings look like "*\Rxxxx*#n". If xxxx == ffff then the * ref refers to the nth type listed in this library (0 based). Else * the xxxx (which maybe fewer than 4 digits) is the offset into the name * table to a string "*\G{}#1.0#0#C:\WINNT\System32\stdole32.tlb#" * The guid is the typelib guid; the ref again refers to the nth type of * the imported typelib. */ /*xx*/ BYTE resxx; /* 0xdf */ } SLTG_RefInfo; #define SLTG_REF_MAGIC 0xdf typedef struct { WORD res00; /* 0x0001 */ BYTE res02; /* 0x02 */ BYTE res03; /* 0x40 if internal ref, 0x00 if external ? */ WORD res04; /* 0xffff */ WORD res06; /* 0x0000, 0x0013 or 0xffff ?? */ } SLTG_UnknownRefInfo; typedef struct { WORD res00; /* 0x004a */ WORD next; /* byte offs to next interface */ WORD res04; /* 0xffff */ BYTE impltypeflags; /* IMPLTYPEFLAG_* */ BYTE res07; /* 0x80 */ WORD res08; /* 0x0012, 0x0028 ?? */ WORD ref; /* number in ref table ? */ WORD res0c; /* 0x4000 */ WORD res0e; /* 0xfffe */ WORD res10; /* 0xffff */ WORD res12; /* 0x001d */ WORD pos_in_table; /* 0x0, 0x4, ? */ } SLTG_ImplInfo; #define SLTG_IMPL_MAGIC 0x004a typedef struct { BYTE magic; /* 0x0a */ BYTE typepos; WORD next; WORD name; WORD byte_offs; /* pos in struct */ WORD type; /* if typepos == 0x02 this is the type, else offset to type */ DWORD memid; WORD helpcontext; /* ?? */ WORD helpstring; /* ?? */ } SLTG_RecordItem; #define SLTG_RECORD_MAGIC 0x0a /* CARRAYs look like this WORD type == VT_CARRAY WORD offset from start of block to SAFEARRAY WORD typeofarray */ #include "poppack.h" /*---------------------------END--------------------------------------------*/ #endif ================================================ FILE: widl/typetree.c ================================================ /* * IDL Type Tree * * Copyright 2008 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include #include #include "widl.h" #include "utils.h" #include "parser.h" #include "typetree.h" #include "header.h" type_t *duptype(type_t *t, int dupname) { type_t *d = alloc_type(); *d = *t; if (dupname && t->name) d->name = xstrdup(t->name); return d; } type_t *make_type(enum type_type type) { type_t *t = alloc_type(); t->name = NULL; t->namespace = NULL; t->type_type = type; t->attrs = NULL; t->c_name = NULL; t->orig = NULL; memset(&t->details, 0, sizeof(t->details)); t->typestring_offset = 0; t->ptrdesc = 0; t->ignore = (parse_only != 0); t->defined = FALSE; t->written = FALSE; t->user_types_registered = FALSE; t->tfswrite = FALSE; t->checked = FALSE; t->is_alias = FALSE; t->typelib_idx = -1; init_loc_info(&t->loc_info); return t; } static const var_t *find_arg(const var_list_t *args, const char *name) { const var_t *arg; if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) { if (arg->name && !strcmp(name, arg->name)) return arg; } return NULL; } const char *type_get_name(const type_t *type, enum name_type name_type) { switch(name_type) { case NAME_DEFAULT: return type->name; case NAME_C: return type->c_name; } assert(0); return NULL; } static char *append_namespace(char *ptr, struct namespace *namespace, const char *separator) { if(is_global_namespace(namespace)) { if(!use_abi_namespace) return ptr; strcpy(ptr, "ABI"); strcat(ptr, separator); return ptr + strlen(ptr); } ptr = append_namespace(ptr, namespace->parent, separator); strcpy(ptr, namespace->name); strcat(ptr, separator); return ptr + strlen(ptr); } char *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix) { unsigned len = strlen(prefix) + strlen(suffix); unsigned sep_len = strlen(separator); struct namespace *iter; char *ret, *ptr; if(use_abi_namespace && !is_global_namespace(namespace)) len += 3 /* strlen("ABI") */ + sep_len; for(iter = namespace; !is_global_namespace(iter); iter = iter->parent) len += strlen(iter->name) + sep_len; ret = xmalloc(len+1); strcpy(ret, prefix); ptr = append_namespace(ret + strlen(ret), namespace, separator); strcpy(ptr, suffix); return ret; } type_t *type_new_function(var_list_t *args) { var_t *arg; type_t *t; unsigned int i = 0; if (args) { arg = LIST_ENTRY(list_head(args), var_t, entry); if (list_count(args) == 1 && !arg->name && arg->type && type_get_type(arg->type) == TYPE_VOID) { list_remove(&arg->entry); free(arg); free(args); args = NULL; } } if (args) LIST_FOR_EACH_ENTRY(arg, args, var_t, entry) { if (arg->type && type_get_type(arg->type) == TYPE_VOID) error_loc("argument '%s' has void type\n", arg->name); if (!arg->name) { if (i > 26 * 26) error_loc("too many unnamed arguments\n"); else { int unique; do { char name[3]; name[0] = i > 26 ? 'a' + i / 26 : 'a' + i; name[1] = i > 26 ? 'a' + i % 26 : 0; name[2] = 0; unique = !find_arg(args, name); if (unique) arg->name = xstrdup(name); i++; } while (!unique); } } } t = make_type(TYPE_FUNCTION); t->details.function = xmalloc(sizeof(*t->details.function)); t->details.function->args = args; t->details.function->idx = -1; return t; } type_t *type_new_pointer(unsigned char pointer_default, type_t *ref, attr_list_t *attrs) { type_t *t = make_type(TYPE_POINTER); t->details.pointer.def_fc = pointer_default; t->details.pointer.ref = ref; t->attrs = attrs; return t; } type_t *type_new_alias(type_t *t, const char *name) { type_t *a = duptype(t, 0); a->name = xstrdup(name); a->attrs = NULL; a->orig = t; a->is_alias = TRUE; /* for pointer types */ a->details = t->details; init_loc_info(&a->loc_info); return a; } type_t *type_new_module(char *name) { type_t *type = get_type(TYPE_MODULE, name, NULL, 0); if (type->type_type != TYPE_MODULE || type->defined) error_loc("%s: redefinition error; original definition was at %s:%d\n", type->name, type->loc_info.input_name, type->loc_info.line_number); type->name = name; return type; } type_t *type_new_coclass(char *name) { type_t *type = get_type(TYPE_COCLASS, name, NULL, 0); if (type->type_type != TYPE_COCLASS || type->defined) error_loc("%s: redefinition error; original definition was at %s:%d\n", type->name, type->loc_info.input_name, type->loc_info.line_number); type->name = name; return type; } type_t *type_new_array(const char *name, type_t *element, int declptr, unsigned int dim, expr_t *size_is, expr_t *length_is, unsigned char ptr_default_fc) { type_t *t = make_type(TYPE_ARRAY); if (name) t->name = xstrdup(name); t->details.array.declptr = declptr; t->details.array.length_is = length_is; if (size_is) t->details.array.size_is = size_is; else t->details.array.dim = dim; t->details.array.elem = element; t->details.array.ptr_def_fc = ptr_default_fc; return t; } type_t *type_new_basic(enum type_basic_type basic_type) { type_t *t = make_type(TYPE_BASIC); t->details.basic.type = basic_type; t->details.basic.sign = 0; return t; } type_t *type_new_int(enum type_basic_type basic_type, int sign) { static type_t *int_types[TYPE_BASIC_INT_MAX+1][3]; assert(basic_type <= TYPE_BASIC_INT_MAX); /* map sign { -1, 0, 1 } -> { 0, 1, 2 } */ if (!int_types[basic_type][sign + 1]) { int_types[basic_type][sign + 1] = type_new_basic(basic_type); int_types[basic_type][sign + 1]->details.basic.sign = sign; } return int_types[basic_type][sign + 1]; } type_t *type_new_void(void) { static type_t *void_type = NULL; if (!void_type) void_type = make_type(TYPE_VOID); return void_type; } type_t *type_new_enum(const char *name, struct namespace *namespace, int defined, var_list_t *enums) { type_t *tag_type = name ? find_type(name, namespace, tsENUM) : NULL; type_t *t = make_type(TYPE_ENUM); t->name = name; t->namespace = namespace; if (tag_type && tag_type->details.enumeration) t->details.enumeration = tag_type->details.enumeration; else if (defined) { t->details.enumeration = xmalloc(sizeof(*t->details.enumeration)); t->details.enumeration->enums = enums; t->defined = TRUE; } if (name) { if (defined) reg_type(t, name, namespace, tsENUM); else add_incomplete(t); } return t; } type_t *type_new_struct(char *name, struct namespace *namespace, int defined, var_list_t *fields) { type_t *tag_type = name ? find_type(name, namespace, tsSTRUCT) : NULL; type_t *t; /* avoid creating duplicate typelib type entries */ if (tag_type && do_typelib) return tag_type; t = make_type(TYPE_STRUCT); t->name = name; t->namespace = namespace; if (tag_type && tag_type->details.structure) t->details.structure = tag_type->details.structure; else if (defined) { t->details.structure = xmalloc(sizeof(*t->details.structure)); t->details.structure->fields = fields; t->defined = TRUE; } if (name) { if (defined) reg_type(t, name, namespace, tsSTRUCT); else add_incomplete(t); } return t; } type_t *type_new_nonencapsulated_union(const char *name, int defined, var_list_t *fields) { type_t *tag_type = name ? find_type(name, NULL, tsUNION) : NULL; type_t *t = make_type(TYPE_UNION); t->name = name; if (tag_type && tag_type->details.structure) t->details.structure = tag_type->details.structure; else if (defined) { t->details.structure = xmalloc(sizeof(*t->details.structure)); t->details.structure->fields = fields; t->defined = TRUE; } if (name) { if (defined) reg_type(t, name, NULL, tsUNION); else add_incomplete(t); } return t; } type_t *type_new_encapsulated_union(char *name, var_t *switch_field, var_t *union_field, var_list_t *cases) { type_t *t = get_type(TYPE_ENCAPSULATED_UNION, name, NULL, tsUNION); if (!union_field) union_field = make_var( xstrdup("tagged_union") ); union_field->type = type_new_nonencapsulated_union(NULL, TRUE, cases); t->details.structure = xmalloc(sizeof(*t->details.structure)); t->details.structure->fields = append_var( NULL, switch_field ); t->details.structure->fields = append_var( t->details.structure->fields, union_field ); t->defined = TRUE; return t; } static int is_valid_bitfield_type(const type_t *type) { switch (type_get_type(type)) { case TYPE_ENUM: return TRUE; case TYPE_BASIC: switch (type_basic_get_type(type)) { case TYPE_BASIC_INT8: case TYPE_BASIC_INT16: case TYPE_BASIC_INT32: case TYPE_BASIC_INT64: case TYPE_BASIC_INT: case TYPE_BASIC_INT3264: case TYPE_BASIC_CHAR: case TYPE_BASIC_HYPER: case TYPE_BASIC_BYTE: case TYPE_BASIC_WCHAR: case TYPE_BASIC_ERROR_STATUS_T: return TRUE; case TYPE_BASIC_FLOAT: case TYPE_BASIC_DOUBLE: case TYPE_BASIC_HANDLE: return FALSE; } return FALSE; default: return FALSE; } } type_t *type_new_bitfield(type_t *field, const expr_t *bits) { type_t *t; if (!is_valid_bitfield_type(field)) error_loc("bit-field has invalid type\n"); if (bits->cval < 0) error_loc("negative width for bit-field\n"); /* FIXME: validate bits->cval <= memsize(field) * 8 */ t = make_type(TYPE_BITFIELD); t->details.bitfield.field = field; t->details.bitfield.bits = bits; return t; } static int compute_method_indexes(type_t *iface) { int idx; statement_t *stmt; if (!iface->details.iface) return 0; if (type_iface_get_inherit(iface)) idx = compute_method_indexes(type_iface_get_inherit(iface)); else idx = 0; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { var_t *func = stmt->u.var; if (!is_callas(func->attrs)) func->type->details.function->idx = idx++; } return idx; } void type_interface_define(type_t *iface, type_t *inherit, statement_list_t *stmts) { iface->details.iface = xmalloc(sizeof(*iface->details.iface)); iface->details.iface->disp_props = NULL; iface->details.iface->disp_methods = NULL; iface->details.iface->stmts = stmts; iface->details.iface->inherit = inherit; iface->details.iface->disp_inherit = NULL; iface->defined = TRUE; compute_method_indexes(iface); } void type_dispinterface_define(type_t *iface, var_list_t *props, var_list_t *methods) { iface->details.iface = xmalloc(sizeof(*iface->details.iface)); iface->details.iface->disp_props = props; iface->details.iface->disp_methods = methods; iface->details.iface->stmts = NULL; iface->details.iface->inherit = find_type("IDispatch", NULL, 0); if (!iface->details.iface->inherit) error_loc("IDispatch is undefined\n"); iface->details.iface->disp_inherit = NULL; iface->defined = TRUE; compute_method_indexes(iface); } void type_dispinterface_define_from_iface(type_t *dispiface, type_t *iface) { dispiface->details.iface = xmalloc(sizeof(*dispiface->details.iface)); dispiface->details.iface->disp_props = NULL; dispiface->details.iface->disp_methods = NULL; dispiface->details.iface->stmts = NULL; dispiface->details.iface->inherit = find_type("IDispatch", NULL, 0); if (!dispiface->details.iface->inherit) error_loc("IDispatch is undefined\n"); dispiface->details.iface->disp_inherit = iface; dispiface->defined = TRUE; compute_method_indexes(dispiface); } void type_module_define(type_t *module, statement_list_t *stmts) { if (module->details.module) error_loc("multiple definition error\n"); module->details.module = xmalloc(sizeof(*module->details.module)); module->details.module->stmts = stmts; module->defined = TRUE; } type_t *type_coclass_define(type_t *coclass, ifref_list_t *ifaces) { coclass->details.coclass.ifaces = ifaces; coclass->defined = TRUE; return coclass; } int type_is_equal(const type_t *type1, const type_t *type2) { if (type_get_type_detect_alias(type1) != type_get_type_detect_alias(type2)) return FALSE; if (type1->name && type2->name) return !strcmp(type1->name, type2->name); else if ((!type1->name && type2->name) || (type1->name && !type2->name)) return FALSE; /* FIXME: do deep inspection of types to determine if they are equal */ return FALSE; } ================================================ FILE: widl/typetree.h ================================================ /* * IDL Type Tree * * Copyright 2008 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "widltypes.h" #include #ifndef WIDL_TYPE_TREE_H #define WIDL_TYPE_TREE_H enum name_type { NAME_DEFAULT, NAME_C }; type_t *type_new_function(var_list_t *args); type_t *type_new_pointer(unsigned char pointer_default, type_t *ref, attr_list_t *attrs); type_t *type_new_alias(type_t *t, const char *name); type_t *type_new_module(char *name); type_t *type_new_array(const char *name, type_t *element, int declptr, unsigned int dim, expr_t *size_is, expr_t *length_is, unsigned char ptr_default_fc); type_t *type_new_basic(enum type_basic_type basic_type); type_t *type_new_int(enum type_basic_type basic_type, int sign); type_t *type_new_void(void); type_t *type_new_coclass(char *name); type_t *type_new_enum(const char *name, struct namespace *namespace, int defined, var_list_t *enums); type_t *type_new_struct(char *name, struct namespace *namespace, int defined, var_list_t *fields); type_t *type_new_nonencapsulated_union(const char *name, int defined, var_list_t *fields); type_t *type_new_encapsulated_union(char *name, var_t *switch_field, var_t *union_field, var_list_t *cases); type_t *type_new_bitfield(type_t *field_type, const expr_t *bits); void type_interface_define(type_t *iface, type_t *inherit, statement_list_t *stmts); void type_dispinterface_define(type_t *iface, var_list_t *props, var_list_t *methods); void type_dispinterface_define_from_iface(type_t *dispiface, type_t *iface); void type_module_define(type_t *module, statement_list_t *stmts); type_t *type_coclass_define(type_t *coclass, ifref_list_t *ifaces); int type_is_equal(const type_t *type1, const type_t *type2); const char *type_get_name(const type_t *type, enum name_type name_type); /* FIXME: shouldn't need to export this */ type_t *duptype(type_t *t, int dupname); /* un-alias the type until finding the non-alias type */ static inline type_t *type_get_real_type(const type_t *type) { if (type->is_alias) return type_get_real_type(type->orig); else return (type_t *)type; } static inline enum type_type type_get_type(const type_t *type) { return type_get_type_detect_alias(type_get_real_type(type)); } static inline enum type_basic_type type_basic_get_type(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_BASIC); return type->details.basic.type; } static inline int type_basic_get_sign(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_BASIC); return type->details.basic.sign; } static inline var_list_t *type_struct_get_fields(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_STRUCT); return type->details.structure->fields; } static inline var_list_t *type_function_get_args(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_FUNCTION); return type->details.function->args; } static inline var_t *type_function_get_retval(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_FUNCTION); return type->details.function->retval; } static inline type_t *type_function_get_rettype(const type_t *type) { return type_function_get_retval(type)->type; } static inline var_list_t *type_enum_get_values(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ENUM); return type->details.enumeration->enums; } static inline var_t *type_union_get_switch_value(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ENCAPSULATED_UNION); return LIST_ENTRY(list_head(type->details.structure->fields), var_t, entry); } static inline var_list_t *type_encapsulated_union_get_fields(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ENCAPSULATED_UNION); return type->details.structure->fields; } static inline var_list_t *type_union_get_cases(const type_t *type) { enum type_type type_type; type = type_get_real_type(type); type_type = type_get_type(type); assert(type_type == TYPE_UNION || type_type == TYPE_ENCAPSULATED_UNION); if (type_type == TYPE_ENCAPSULATED_UNION) { const var_t *uv = LIST_ENTRY(list_tail(type->details.structure->fields), const var_t, entry); return uv->type->details.structure->fields; } else return type->details.structure->fields; } static inline statement_list_t *type_iface_get_stmts(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_INTERFACE); return type->details.iface->stmts; } static inline type_t *type_iface_get_inherit(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_INTERFACE); return type->details.iface->inherit; } static inline var_list_t *type_dispiface_get_props(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_INTERFACE); return type->details.iface->disp_props; } static inline var_list_t *type_dispiface_get_methods(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_INTERFACE); return type->details.iface->disp_methods; } static inline type_t *type_dispiface_get_inherit(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_INTERFACE); return type->details.iface->disp_inherit; } static inline int type_is_defined(const type_t *type) { return type->defined; } static inline int type_is_complete(const type_t *type) { switch (type_get_type_detect_alias(type)) { case TYPE_FUNCTION: return (type->details.function != NULL); case TYPE_INTERFACE: return (type->details.iface != NULL); case TYPE_ENUM: return (type->details.enumeration != NULL); case TYPE_UNION: case TYPE_ENCAPSULATED_UNION: case TYPE_STRUCT: return (type->details.structure != NULL); case TYPE_VOID: case TYPE_BASIC: case TYPE_ALIAS: case TYPE_MODULE: case TYPE_COCLASS: case TYPE_POINTER: case TYPE_ARRAY: case TYPE_BITFIELD: return TRUE; } return FALSE; } static inline int type_array_has_conformance(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ARRAY); return (type->details.array.size_is != NULL); } static inline int type_array_has_variance(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ARRAY); return (type->details.array.length_is != NULL); } static inline unsigned int type_array_get_dim(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ARRAY); return type->details.array.dim; } static inline expr_t *type_array_get_conformance(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ARRAY); return type->details.array.size_is; } static inline expr_t *type_array_get_variance(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ARRAY); return type->details.array.length_is; } static inline type_t *type_array_get_element(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ARRAY); return type->details.array.elem; } static inline int type_array_is_decl_as_ptr(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ARRAY); return type->details.array.declptr; } static inline unsigned char type_array_get_ptr_default_fc(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_ARRAY); return type->details.array.ptr_def_fc; } static inline int type_is_alias(const type_t *type) { return type->is_alias; } static inline type_t *type_alias_get_aliasee(const type_t *type) { assert(type_is_alias(type)); return type->orig; } static inline ifref_list_t *type_coclass_get_ifaces(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_COCLASS); return type->details.coclass.ifaces; } static inline type_t *type_pointer_get_ref(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_POINTER); return type->details.pointer.ref; } static inline unsigned char type_pointer_get_default_fc(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_POINTER); return type->details.pointer.def_fc; } static inline type_t *type_bitfield_get_field(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_BITFIELD); return type->details.bitfield.field; } static inline const expr_t *type_bitfield_get_bits(const type_t *type) { type = type_get_real_type(type); assert(type_get_type(type) == TYPE_BITFIELD); return type->details.bitfield.bits; } #endif /* WIDL_TYPE_TREE_H */ ================================================ FILE: widl/utils.c ================================================ /* * Utility routines * * Copyright 1998 Bertho A. Stultiens * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include "widl.h" #include "utils.h" #include "parser.h" #define CURRENT_LOCATION { input_name ? input_name : "stdin", line_number, parser_text } static const int want_near_indication = 0; static void make_print(char *str) { while(*str) { if(!isprint(*str)) *str = ' '; str++; } } static void generic_msg(const loc_info_t *loc_info, const char *s, const char *t, va_list ap) { fprintf(stderr, "%s:%d: %s: ", loc_info->input_name, loc_info->line_number, t); vfprintf(stderr, s, ap); if (want_near_indication) { char *cpy; if(loc_info->near_text) { cpy = xstrdup(loc_info->near_text); make_print(cpy); fprintf(stderr, " near '%s'", cpy); free(cpy); } } } void error_loc(const char *s, ...) { loc_info_t cur_loc = CURRENT_LOCATION; va_list ap; va_start(ap, s); generic_msg(&cur_loc, s, "error", ap); va_end(ap); exit(1); } /* yyerror: yacc assumes this is not newline terminated. */ void parser_error(const char *s) { error_loc("%s\n", s); } void error_loc_info(const loc_info_t *loc_info, const char *s, ...) { va_list ap; va_start(ap, s); generic_msg(loc_info, s, "error", ap); va_end(ap); exit(1); } int parser_warning(const char *s, ...) { loc_info_t cur_loc = CURRENT_LOCATION; va_list ap; va_start(ap, s); generic_msg(&cur_loc, s, "warning", ap); va_end(ap); return 0; } void error(const char *s, ...) { va_list ap; va_start(ap, s); fprintf(stderr, "error: "); vfprintf(stderr, s, ap); va_end(ap); exit(2); } void warning(const char *s, ...) { va_list ap; va_start(ap, s); fprintf(stderr, "warning: "); vfprintf(stderr, s, ap); va_end(ap); } void warning_loc_info(const loc_info_t *loc_info, const char *s, ...) { va_list ap; va_start(ap, s); generic_msg(loc_info, s, "warning", ap); va_end(ap); } void chat(const char *s, ...) { if(debuglevel & DEBUGLEVEL_CHAT) { va_list ap; va_start(ap, s); fprintf(stderr, "chat: "); vfprintf(stderr, s, ap); va_end(ap); } } char *dup_basename(const char *name, const char *ext) { int namelen; int extlen = strlen(ext); char *base; char *slash; if(!name) name = "widl.tab"; slash = strrchr(name, '/'); if (!slash) slash = strrchr(name, '\\'); if (slash) name = slash + 1; namelen = strlen(name); /* +6 for later extension (strlen("_r.rgs")) and +1 for '\0' */ base = xmalloc(namelen +6 +1); strcpy(base, name); if(!strcasecmp(name + namelen-extlen, ext)) { base[namelen - extlen] = '\0'; } return base; } size_t widl_getline(char **linep, size_t *lenp, FILE *fp) { char *line = *linep; size_t len = *lenp; size_t n = 0; if (!line) { len = 64; line = xmalloc(len); } while (fgets(&line[n], len - n, fp)) { n += strlen(&line[n]); if (line[n - 1] == '\n') break; else if (n == len - 1) { len *= 2; line = xrealloc(line, len); } } *linep = line; *lenp = len; return n; } void *xmalloc(size_t size) { void *res; assert(size > 0); res = malloc(size); if(res == NULL) { error("Virtual memory exhausted.\n"); } memset(res, 0x55, size); return res; } void *xrealloc(void *p, size_t size) { void *res; assert(size > 0); res = realloc(p, size); if(res == NULL) { error("Virtual memory exhausted.\n"); } return res; } char *xstrdup(const char *str) { char *s; assert(str != NULL); s = xmalloc(strlen(str)+1); return strcpy(s, str); } int strendswith(const char* str, const char* end) { int l = strlen(str); int m = strlen(end); return l >= m && strcmp(str + l - m, end) == 0; } /******************************************************************* * buffer management * * Function for writing to a memory buffer. */ int byte_swapped = 0; unsigned char *output_buffer; size_t output_buffer_pos; size_t output_buffer_size; static struct resource { unsigned char *data; size_t size; } resources[16]; static unsigned int nb_resources; static void check_output_buffer_space( size_t size ) { if (output_buffer_pos + size >= output_buffer_size) { output_buffer_size = max( output_buffer_size * 2, output_buffer_pos + size ); output_buffer = xrealloc( output_buffer, output_buffer_size ); } } void init_output_buffer(void) { output_buffer_size = 1024; output_buffer_pos = 0; output_buffer = xmalloc( output_buffer_size ); } void flush_output_buffer( const char *name ) { int fd = open( name, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666 ); if (fd == -1) error( "Error creating %s\n", name ); if (write( fd, output_buffer, output_buffer_pos ) != output_buffer_pos) error( "Error writing to %s\n", name ); close( fd ); free( output_buffer ); } static inline void put_resource_id( const char *str ) { if (str[0] != '#') { while (*str) { unsigned char ch = *str++; put_word( toupper(ch) ); } put_word( 0 ); } else { put_word( 0xffff ); put_word( atoi( str + 1 )); } } void add_output_to_resources( const char *type, const char *name ) { size_t data_size = output_buffer_pos; size_t header_size = 5 * sizeof(unsigned int) + 2 * sizeof(unsigned short); assert( nb_resources < sizeof(resources)/sizeof(resources[0]) ); if (type[0] != '#') header_size += (strlen( type ) + 1) * sizeof(unsigned short); else header_size += 2 * sizeof(unsigned short); if (name[0] != '#') header_size += (strlen( name ) + 1) * sizeof(unsigned short); else header_size += 2 * sizeof(unsigned short); header_size = (header_size + 3) & ~3; align_output( 4 ); check_output_buffer_space( header_size ); resources[nb_resources].size = header_size + output_buffer_pos; memmove( output_buffer + header_size, output_buffer, output_buffer_pos ); output_buffer_pos = 0; put_dword( data_size ); /* ResSize */ put_dword( header_size ); /* HeaderSize */ put_resource_id( type ); /* ResType */ put_resource_id( name ); /* ResName */ align_output( 4 ); put_dword( 0 ); /* DataVersion */ put_word( 0 ); /* Memory options */ put_word( 0 ); /* Language */ put_dword( 0 ); /* Version */ put_dword( 0 ); /* Characteristics */ resources[nb_resources++].data = output_buffer; init_output_buffer(); } void flush_output_resources( const char *name ) { int fd; unsigned int i; /* all output must have been saved with add_output_to_resources() first */ assert( !output_buffer_pos ); put_dword( 0 ); /* ResSize */ put_dword( 32 ); /* HeaderSize */ put_word( 0xffff ); /* ResType */ put_word( 0x0000 ); put_word( 0xffff ); /* ResName */ put_word( 0x0000 ); put_dword( 0 ); /* DataVersion */ put_word( 0 ); /* Memory options */ put_word( 0 ); /* Language */ put_dword( 0 ); /* Version */ put_dword( 0 ); /* Characteristics */ fd = open( name, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666 ); if (fd == -1) error( "Error creating %s\n", name ); if (write( fd, output_buffer, output_buffer_pos ) != output_buffer_pos) error( "Error writing to %s\n", name ); for (i = 0; i < nb_resources; i++) { if (write( fd, resources[i].data, resources[i].size ) != resources[i].size) error( "Error writing to %s\n", name ); free( resources[i].data ); } close( fd ); nb_resources = 0; free( output_buffer ); } void put_data( const void *data, size_t size ) { check_output_buffer_space( size ); memcpy( output_buffer + output_buffer_pos, data, size ); output_buffer_pos += size; } void put_byte( unsigned char val ) { check_output_buffer_space( 1 ); output_buffer[output_buffer_pos++] = val; } void put_word( unsigned short val ) { if (byte_swapped) val = (val << 8) | (val >> 8); put_data( &val, sizeof(val) ); } void put_dword( unsigned int val ) { if (byte_swapped) val = ((val << 24) | ((val << 8) & 0x00ff0000) | ((val >> 8) & 0x0000ff00) | (val >> 24)); put_data( &val, sizeof(val) ); } void put_qword( unsigned int val ) { if (byte_swapped) { put_dword( 0 ); put_dword( val ); } else { put_dword( val ); put_dword( 0 ); } } /* pointer-sized word */ void put_pword( unsigned int val ) { if (pointer_size == 8) put_qword( val ); else put_dword( val ); } void put_str( int indent, const char *format, ... ) { int n; va_list args; check_output_buffer_space( 4 * indent ); memset( output_buffer + output_buffer_pos, ' ', 4 * indent ); output_buffer_pos += 4 * indent; for (;;) { size_t size = output_buffer_size - output_buffer_pos; va_start( args, format ); n = vsnprintf( (char *)output_buffer + output_buffer_pos, size, format, args ); va_end( args ); if (n == -1) size *= 2; else if ((size_t)n >= size) size = n + 1; else { output_buffer_pos += n; return; } check_output_buffer_space( size ); } } void align_output( unsigned int align ) { size_t size = align - (output_buffer_pos % align); if (size == align) return; check_output_buffer_space( size ); memset( output_buffer + output_buffer_pos, 0, size ); output_buffer_pos += size; } ================================================ FILE: widl/utils.h ================================================ /* * Utility routines' prototypes etc. * * Copyright 1998 Bertho A. Stultiens (BS) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WIDL_UTILS_H #define __WIDL_UTILS_H #include "widltypes.h" #include /* size_t */ void *xmalloc(size_t); void *xrealloc(void *, size_t); char *xstrdup(const char *str); int strendswith(const char* str, const char* end); #ifndef __GNUC__ #define __attribute__(X) #endif void parser_error(const char *s) __attribute__((noreturn)); int parser_warning(const char *s, ...) __attribute__((format (printf, 1, 2))); void error_loc(const char *s, ...) __attribute__((format (printf, 1, 2))) __attribute__((noreturn)); void error(const char *s, ...) __attribute__((format (printf, 1, 2))) __attribute__((noreturn)); void error_loc_info(const loc_info_t *, const char *s, ...) __attribute__((format (printf, 2, 3))) __attribute__((noreturn)); void warning(const char *s, ...) __attribute__((format (printf, 1, 2))); void warning_loc_info(const loc_info_t *, const char *s, ...) __attribute__((format (printf, 2, 3))); void chat(const char *s, ...) __attribute__((format (printf, 1, 2))); char *dup_basename(const char *name, const char *ext); size_t widl_getline(char **linep, size_t *lenp, FILE *fp); UUID *parse_uuid(const char *u); int is_valid_uuid(const char *s); /* buffer management */ extern int byte_swapped; extern unsigned char *output_buffer; extern size_t output_buffer_pos; extern size_t output_buffer_size; extern void init_output_buffer(void); extern void flush_output_buffer( const char *name ); extern void add_output_to_resources( const char *type, const char *name ); extern void flush_output_resources( const char *name ); extern void put_data( const void *data, size_t size ); extern void put_byte( unsigned char val ); extern void put_word( unsigned short val ); extern void put_dword( unsigned int val ); extern void put_qword( unsigned int val ); extern void put_pword( unsigned int val ); extern void put_str( int indent, const char *format, ... ) __attribute__((format (printf, 2, 3))); extern void align_output( unsigned int align ); /* typelibs expect the minor version to be stored in the higher bits and * major to be stored in the lower bits */ #define MAKEVERSION(major, minor) ((((minor) & 0xffff) << 16) | ((major) & 0xffff)) #define MAJORVERSION(version) ((version) & 0xffff) #define MINORVERSION(version) (((version) >> 16) & 0xffff) #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif #endif ================================================ FILE: widl/widl.c ================================================ /* * IDL Compiler * * Copyright 2002 Ove Kaaven * based on WRC code by Bertho Stultiens * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #ifdef HAVE_GETOPT_H # include #else #include "getopt_msvc.h" #endif #include "widl.h" #include "utils.h" #include "parser.h" #include "wine/wpp.h" #include "header.h" #if defined(_MSC_VER) || defined(__MINGW32__) int mkstemps(char *template, int suffixlen) { errno_t result =_mktemp_s(template, strlen(template) + 1); if (result != 0) return 0; return open(template, O_RDWR | O_CREAT/* | O_TEMPORARY*/ | O_EXCL | O_BINARY); } #endif /* future options to reserve characters for: */ /* A = ACF input filename */ /* J = do not search standard include path */ /* w = select win16/win32 output (?) */ static const char usage[] = "Usage: widl [options...] infile.idl\n" " or: widl [options...] --dlldata-only name1 [name2...]\n" " -app_config Ignored, present for midl compatibility\n" " -b arch Set the target architecture\n" " -c Generate client stub\n" " -d n Set debug level to 'n'\n" " -D id[=val] Define preprocessor identifier id=val\n" " -E Preprocess only\n" " --help Display this help and exit\n" " -h Generate headers\n" " -H file Name of header file (default is infile.h)\n" " -I path Set include search dir to path (multiple -I allowed)\n" " --local-stubs=file Write empty stubs for call_as/local methods to file\n" " -m32, -m64 Set the kind of typelib to build (Win32 or Win64)\n" " -N Do not preprocess input\n" " --oldnames Use old naming conventions\n" " -o, --output=NAME Set the output file name\n" " -Otype Type of stubs to generate (-Os, -Oi, -Oif)\n" " -p Generate proxy\n" " --prefix-all=p Prefix names of client stubs / server functions with 'p'\n" " --prefix-client=p Prefix names of client stubs with 'p'\n" " --prefix-server=p Prefix names of server functions with 'p'\n" " -r Generate registration script\n" " --winrt Enable Windows Runtime mode\n" " --ns_prefix Prefix namespaces with ABI namespace\n" " -s Generate server stub\n" " -t Generate typelib\n" " -u Generate interface identifiers file\n" " -V Print version and exit\n" " -W Enable pedantic warnings\n" " --win32 Only generate 32-bit code\n" " --win64 Only generate 64-bit code\n" " --win32-align n Set win32 structure alignment to 'n'\n" " --win64-align n Set win64 structure alignment to 'n'\n" "Debug level 'n' is a bitmask with following meaning:\n" " * 0x01 Tell which resource is parsed (verbose mode)\n" " * 0x02 Dump internal structures\n" " * 0x04 Create a parser trace (yydebug=1)\n" " * 0x08 Preprocessor messages\n" " * 0x10 Preprocessor lex messages\n" " * 0x20 Preprocessor yacc trace\n" ; static const char version_string[] = "Wine IDL Compiler version " PACKAGE_VERSION "\n" "Copyright 2002 Ove Kaaven\n"; int debuglevel = DEBUGLEVEL_NONE; int parser_debug, yy_flex_debug; int pedantic = 0; int do_everything = 1; static int preprocess_only = 0; int do_relay16 = 0; int do_header = 0; int do_typelib = 0; int do_proxies = 0; int do_client = 0; int do_server = 0; int do_regscript = 0; int do_idfile = 0; int do_dlldata = 0; static int no_preprocess = 0; int old_names = 0; int do_win32 = 1; int do_win64 = 1; int win32_packing = 8; int win64_packing = 8; int winrt_mode = 0; int use_abi_namespace = 0; static enum stub_mode stub_mode = MODE_Os; char *input_name; char *input_idl_name; char *relay16_name; char *header_name; char *local_stubs_name; char *header_token; char *typelib_name; char *dlldata_name; char *proxy_name; char *proxy_token; char *client_name; char *client_token; char *server_name; char *server_token; char *regscript_name; char *regscript_token; static char *idfile_name; char *temp_name; const char *prefix_client = ""; const char *prefix_server = ""; int line_number = 1; static FILE *idfile; unsigned int pointer_size = 0; syskind_t typelib_kind = sizeof(void*) == 8 ? SYS_WIN64 : SYS_WIN32; time_t now; enum { OLDNAMES_OPTION = CHAR_MAX + 1, DLLDATA_OPTION, DLLDATA_ONLY_OPTION, LOCAL_STUBS_OPTION, PREFIX_ALL_OPTION, PREFIX_CLIENT_OPTION, PREFIX_SERVER_OPTION, PRINT_HELP, RT_NS_PREFIX, RT_OPTION, WIN32_OPTION, WIN64_OPTION, WIN32_ALIGN_OPTION, WIN64_ALIGN_OPTION, APP_CONFIG_OPTION }; static const char short_options[] = "b:cC:d:D:EhH:I:m:No:O:pP:rsS:tT:uU:VW"; static const struct option long_options[] = { { "dlldata", 1, NULL, DLLDATA_OPTION }, { "dlldata-only", 0, NULL, DLLDATA_ONLY_OPTION }, { "help", 0, NULL, PRINT_HELP }, { "local-stubs", 1, NULL, LOCAL_STUBS_OPTION }, { "ns_prefix", 0, NULL, RT_NS_PREFIX }, { "oldnames", 0, NULL, OLDNAMES_OPTION }, { "output", 0, NULL, 'o' }, { "prefix-all", 1, NULL, PREFIX_ALL_OPTION }, { "prefix-client", 1, NULL, PREFIX_CLIENT_OPTION }, { "prefix-server", 1, NULL, PREFIX_SERVER_OPTION }, { "winrt", 0, NULL, RT_OPTION }, { "win32", 0, NULL, WIN32_OPTION }, { "win64", 0, NULL, WIN64_OPTION }, { "win32-align", 1, NULL, WIN32_ALIGN_OPTION }, { "win64-align", 1, NULL, WIN64_ALIGN_OPTION }, { "app_config", 0, NULL, APP_CONFIG_OPTION }, { NULL, 0, NULL, 0 } }; static void rm_tempfile(void); enum stub_mode get_stub_mode(void) { /* old-style interpreted stubs are not supported on 64-bit */ if (stub_mode == MODE_Oi && pointer_size == 8) return MODE_Oif; return stub_mode; } static char *make_token(const char *name) { char *token; char *slash; int i; slash = strrchr(name, '/'); if(!slash) slash = strrchr(name, '\\'); if (slash) name = slash + 1; token = xstrdup(name); for (i=0; token[i]; i++) { if (!isalnum(token[i])) token[i] = '_'; else token[i] = tolower(token[i]); } return token; } /* duplicate a basename into a valid C token */ static char *dup_basename_token(const char *name, const char *ext) { char *p, *ret = dup_basename( name, ext ); /* map invalid characters to '_' */ for (p = ret; *p; p++) if (!isalnum(*p)) *p = '_'; return ret; } static void add_widl_version_define(void) { unsigned int version; const char *p = PACKAGE_VERSION; /* major */ version = atoi(p) * 0x10000; p = strchr(p, '.'); /* minor */ if (p) { version += atoi(p + 1) * 0x100; p = strchr(p + 1, '.'); } /* build */ if (p) version += atoi(p + 1); if (version != 0) { char version_str[11]; snprintf(version_str, sizeof(version_str), "0x%x", version); wpp_add_define("__WIDL__", version_str); } else wpp_add_define("__WIDL__", NULL); } /* set the target platform */ static void set_target( const char *target ) { static const struct { const char *name; syskind_t kind; } cpu_names[] = { { "i386", SYS_WIN32 }, { "i486", SYS_WIN32 }, { "i586", SYS_WIN32 }, { "i686", SYS_WIN32 }, { "i786", SYS_WIN32 }, { "amd64", SYS_WIN64 }, { "x86_64", SYS_WIN64 }, { "powerpc", SYS_WIN32 }, { "arm", SYS_WIN32 }, { "aarch64", SYS_WIN64 } }; unsigned int i; char *p, *spec = xstrdup( target ); /* target specification is in the form CPU-MANUFACTURER-OS or CPU-MANUFACTURER-KERNEL-OS */ if (!(p = strchr( spec, '-' ))) error( "Invalid target specification '%s'\n", target ); *p++ = 0; for (i = 0; i < sizeof(cpu_names)/sizeof(cpu_names[0]); i++) { if (!strcmp( cpu_names[i].name, spec )) { typelib_kind = cpu_names[i].kind; free( spec ); return; } } error( "Unrecognized CPU '%s'\n", spec ); } /* clean things up when aborting on a signal */ static void exit_on_signal( int sig ) { exit(1); /* this will call the atexit functions */ } static void set_everything(int x) { do_header = x; do_typelib = x; do_proxies = x; do_client = x; do_server = x; do_regscript = x; do_idfile = x; do_dlldata = x; } void start_cplusplus_guard(FILE *fp) { fprintf(fp, "#ifdef __cplusplus\n"); fprintf(fp, "extern \"C\" {\n"); fprintf(fp, "#endif\n\n"); } void end_cplusplus_guard(FILE *fp) { fprintf(fp, "#ifdef __cplusplus\n"); fprintf(fp, "}\n"); fprintf(fp, "#endif\n\n"); } typedef struct { char *filename; struct list link; } filename_node_t; static void add_filename_node(struct list *list, const char *name) { filename_node_t *node = xmalloc(sizeof *node); node->filename = dup_basename( name, ".idl" ); list_add_tail(list, &node->link); } static void free_filename_nodes(struct list *list) { filename_node_t *node, *next; LIST_FOR_EACH_ENTRY_SAFE(node, next, list, filename_node_t, link) { list_remove(&node->link); free(node->filename); free(node); } } static void write_dlldata_list(struct list *filenames, int define_proxy_delegation) { FILE *dlldata; filename_node_t *node; dlldata = fopen(dlldata_name, "w"); if (!dlldata) error("couldn't open %s: %s\n", dlldata_name, strerror(errno)); fprintf(dlldata, "/*** Autogenerated by WIDL %s ", PACKAGE_VERSION); fprintf(dlldata, "- Do not edit ***/\n\n"); if (define_proxy_delegation) fprintf(dlldata, "#define PROXY_DELEGATION\n"); fprintf(dlldata, "#include \n"); fprintf(dlldata, "#include \n\n"); start_cplusplus_guard(dlldata); LIST_FOR_EACH_ENTRY(node, filenames, filename_node_t, link) fprintf(dlldata, "EXTERN_PROXY_FILE(%s)\n", node->filename); fprintf(dlldata, "\nPROXYFILE_LIST_START\n"); fprintf(dlldata, "/* Start of list */\n"); LIST_FOR_EACH_ENTRY(node, filenames, filename_node_t, link) fprintf(dlldata, " REFERENCE_PROXY_FILE(%s),\n", node->filename); fprintf(dlldata, "/* End of list */\n"); fprintf(dlldata, "PROXYFILE_LIST_END\n\n"); fprintf(dlldata, "DLLDATA_ROUTINES(aProxyFileList, GET_DLL_CLSID)\n\n"); end_cplusplus_guard(dlldata); fclose(dlldata); } static char *eat_space(char *s) { while (isspace((unsigned char) *s)) ++s; return s; } void write_dlldata(const statement_list_t *stmts) { struct list filenames = LIST_INIT(filenames); int define_proxy_delegation = 0; filename_node_t *node; FILE *dlldata; if (!do_dlldata || !need_proxy_file(stmts)) return; define_proxy_delegation = need_proxy_delegation(stmts); dlldata = fopen(dlldata_name, "r"); if (dlldata) { static const char marker[] = "REFERENCE_PROXY_FILE"; static const char delegation_define[] = "#define PROXY_DELEGATION"; char *line = NULL; size_t len = 0; while (widl_getline(&line, &len, dlldata)) { char *start, *end; start = eat_space(line); if (strncmp(start, marker, sizeof marker - 1) == 0) { start = eat_space(start + sizeof marker - 1); if (*start != '(') continue; end = start = eat_space(start + 1); while (*end && *end != ')') ++end; if (*end != ')') continue; while (isspace((unsigned char) end[-1])) --end; *end = '\0'; if (start < end) add_filename_node(&filenames, start); }else if (!define_proxy_delegation && strncmp(start, delegation_define, sizeof(delegation_define)-1)) { define_proxy_delegation = 1; } } if (ferror(dlldata)) error("couldn't read from %s: %s\n", dlldata_name, strerror(errno)); free(line); fclose(dlldata); } LIST_FOR_EACH_ENTRY(node, &filenames, filename_node_t, link) if (strcmp(proxy_token, node->filename) == 0) { /* We're already in the list, no need to regenerate this file. */ free_filename_nodes(&filenames); return; } add_filename_node(&filenames, proxy_token); write_dlldata_list(&filenames, define_proxy_delegation); free_filename_nodes(&filenames); } static void write_id_guid(FILE *f, const char *type, const char *guid_prefix, const char *name, const UUID *uuid) { if (!uuid) return; fprintf(f, "MIDL_DEFINE_GUID(%s, %s_%s, 0x%08x, 0x%04x, 0x%04x, 0x%02x,0x%02x, 0x%02x," "0x%02x,0x%02x,0x%02x,0x%02x,0x%02x);\n", type, guid_prefix, name, uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7]); } static void write_id_data_stmts(const statement_list_t *stmts) { const statement_t *stmt; if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry ) { if (stmt->type == STMT_TYPE) { const type_t *type = stmt->u.type; if (type_get_type(type) == TYPE_INTERFACE) { const UUID *uuid; if (!is_object(type) && !is_attr(type->attrs, ATTR_DISPINTERFACE)) continue; uuid = get_attrp(type->attrs, ATTR_UUID); write_id_guid(idfile, "IID", is_attr(type->attrs, ATTR_DISPINTERFACE) ? "DIID" : "IID", type->name, uuid); } else if (type_get_type(type) == TYPE_COCLASS) { const UUID *uuid = get_attrp(type->attrs, ATTR_UUID); write_id_guid(idfile, "CLSID", "CLSID", type->name, uuid); } } else if (stmt->type == STMT_LIBRARY) { const UUID *uuid = get_attrp(stmt->u.lib->attrs, ATTR_UUID); write_id_guid(idfile, "IID", "LIBID", stmt->u.lib->name, uuid); write_id_data_stmts(stmt->u.lib->stmts); } } } void write_id_data(const statement_list_t *stmts) { if (!do_idfile) return; idfile = fopen(idfile_name, "w"); if (! idfile) { error("Could not open %s for output\n", idfile_name); return; } fprintf(idfile, "/*** Autogenerated by WIDL %s ", PACKAGE_VERSION); fprintf(idfile, "from %s - Do not edit ***/\n\n", input_idl_name); fprintf(idfile, "#include \n"); fprintf(idfile, "#include \n\n"); fprintf(idfile, "#ifdef _MIDL_USE_GUIDDEF_\n\n"); fprintf(idfile, "#ifndef INITGUID\n"); fprintf(idfile, "#define INITGUID\n"); fprintf(idfile, "#include \n"); fprintf(idfile, "#undef INITGUID\n"); fprintf(idfile, "#else\n"); fprintf(idfile, "#include \n"); fprintf(idfile, "#endif\n\n"); fprintf(idfile, "#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \\\n"); fprintf(idfile, " DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)\n\n"); fprintf(idfile, "#else\n\n"); fprintf(idfile, "#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \\\n"); fprintf(idfile, " const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}\n\n"); fprintf(idfile, "#endif\n\n"); start_cplusplus_guard(idfile); write_id_data_stmts(stmts); fprintf(idfile, "\n"); end_cplusplus_guard(idfile); fprintf(idfile, "#undef MIDL_DEFINE_GUID\n" ); fclose(idfile); } int main(int argc,char *argv[]) { int optc; int ret = 0; int opti = 0; char *output_name = NULL; signal( SIGTERM, exit_on_signal ); signal( SIGINT, exit_on_signal ); #ifdef SIGHUP signal( SIGHUP, exit_on_signal ); #endif now = time(NULL); while((optc = getopt_long_only(argc, argv, short_options, long_options, &opti)) != EOF) { switch(optc) { case DLLDATA_OPTION: dlldata_name = xstrdup(optarg); break; case DLLDATA_ONLY_OPTION: do_everything = 0; do_dlldata = 1; break; case LOCAL_STUBS_OPTION: do_everything = 0; local_stubs_name = xstrdup(optarg); break; case OLDNAMES_OPTION: old_names = 1; break; case PREFIX_ALL_OPTION: prefix_client = xstrdup(optarg); prefix_server = xstrdup(optarg); break; case PREFIX_CLIENT_OPTION: prefix_client = xstrdup(optarg); break; case PREFIX_SERVER_OPTION: prefix_server = xstrdup(optarg); break; case PRINT_HELP: fprintf(stderr, "%s", usage); return 0; case RT_OPTION: winrt_mode = 1; break; case RT_NS_PREFIX: use_abi_namespace = 1; break; case WIN32_OPTION: do_win32 = 1; do_win64 = 0; break; case WIN64_OPTION: do_win32 = 0; do_win64 = 1; break; case WIN32_ALIGN_OPTION: win32_packing = strtol(optarg, NULL, 0); if(win32_packing != 2 && win32_packing != 4 && win32_packing != 8) error("Packing must be one of 2, 4 or 8\n"); break; case WIN64_ALIGN_OPTION: win64_packing = strtol(optarg, NULL, 0); if(win64_packing != 2 && win64_packing != 4 && win64_packing != 8) error("Packing must be one of 2, 4 or 8\n"); break; case APP_CONFIG_OPTION: /* widl does not distinguish between app_mode and default mode, but we ignore this option for midl compatibility */ break; case 'b': set_target( optarg ); break; case 'c': do_everything = 0; do_client = 1; break; case 'C': client_name = xstrdup(optarg); break; case 'd': debuglevel = strtol(optarg, NULL, 0); break; case 'D': wpp_add_cmdline_define(optarg); break; case 'E': do_everything = 0; preprocess_only = 1; break; case 'h': do_everything = 0; do_header = 1; break; case 'H': header_name = xstrdup(optarg); break; case 'I': wpp_add_include_path(optarg); break; case 'm': if (!strcmp( optarg, "32" )) typelib_kind = SYS_WIN32; else if (!strcmp( optarg, "64" )) typelib_kind = SYS_WIN64; break; case 'N': no_preprocess = 1; break; case 'o': output_name = xstrdup(optarg); break; case 'O': if (!strcmp( optarg, "s" )) stub_mode = MODE_Os; else if (!strcmp( optarg, "i" )) stub_mode = MODE_Oi; else if (!strcmp( optarg, "ic" )) stub_mode = MODE_Oif; else if (!strcmp( optarg, "if" )) stub_mode = MODE_Oif; else if (!strcmp( optarg, "icf" )) stub_mode = MODE_Oif; else error( "Invalid argument '-O%s'\n", optarg ); break; case 'p': do_everything = 0; do_proxies = 1; break; case 'P': proxy_name = xstrdup(optarg); break; case 'r': do_everything = 0; do_regscript = 1; break; case 's': do_everything = 0; do_server = 1; break; case 'S': server_name = xstrdup(optarg); break; case 't': do_everything = 0; do_typelib = 1; break; case 'T': typelib_name = xstrdup(optarg); break; case 'u': do_everything = 0; do_idfile = 1; break; case 'U': idfile_name = xstrdup(optarg); break; case 'V': printf("%s", version_string); return 0; case 'W': pedantic = 1; break; default: fprintf(stderr, "%s", usage); return 1; } } #ifdef DEFAULT_INCLUDE_DIR wpp_add_include_path(DEFAULT_INCLUDE_DIR); #endif /* if nothing specified, try to guess output type from the output file name */ if (output_name && do_everything && !do_header && !do_typelib && !do_proxies && !do_client && !do_server && !do_regscript && !do_idfile && !do_dlldata) { do_everything = 0; if (strendswith(output_name, "_16.h")) do_relay16 = 1; else if (strendswith(output_name, "_16.c")) do_relay16 = 1; else if (strendswith( output_name, ".h" )) do_header = 1; else if (strendswith( output_name, ".tlb" )) do_typelib = 1; else if (strendswith( output_name, "_p.c" )) do_proxies = 1; else if (strendswith( output_name, "_c.c" )) do_client = 1; else if (strendswith( output_name, "_s.c" )) do_server = 1; else if (strendswith( output_name, "_i.c" )) do_idfile = 1; else if (strendswith( output_name, "_r.res" )) do_regscript = 1; else if (strendswith( output_name, "_t.res" )) do_typelib = 1; else if (strendswith( output_name, "dlldata.c" )) do_dlldata = 1; else do_everything = 1; } if(do_everything) { set_everything(TRUE); } if (!output_name) output_name = dup_basename(input_name, ".idl"); if (do_header + do_typelib + do_proxies + do_client + do_server + do_regscript + do_idfile + do_dlldata + do_relay16 == 1) { if (do_header) header_name = output_name; else if (do_typelib) typelib_name = output_name; else if (do_proxies) proxy_name = output_name; else if (do_client) client_name = output_name; else if (do_server) server_name = output_name; else if (do_regscript) regscript_name = output_name; else if (do_idfile) idfile_name = output_name; else if (do_dlldata) dlldata_name = output_name; else if (do_relay16) relay16_name = output_name; } if (!dlldata_name && do_dlldata) dlldata_name = xstrdup("dlldata.c"); if(optind < argc) { if (do_dlldata && !do_everything) { struct list filenames = LIST_INIT(filenames); for ( ; optind < argc; ++optind) add_filename_node(&filenames, argv[optind]); write_dlldata_list(&filenames, 0 /* FIXME */ ); free_filename_nodes(&filenames); return 0; } else if (optind != argc - 1) { fprintf(stderr, "%s", usage); return 1; } else input_idl_name = input_name = xstrdup(argv[optind]); } else { fprintf(stderr, "%s", usage); return 1; } if(debuglevel) { setbuf(stdout, NULL); setbuf(stderr, NULL); } parser_debug = debuglevel & DEBUGLEVEL_TRACE ? 1 : 0; yy_flex_debug = debuglevel & DEBUGLEVEL_TRACE ? 1 : 0; wpp_set_debug( (debuglevel & DEBUGLEVEL_PPLEX) != 0, (debuglevel & DEBUGLEVEL_PPTRACE) != 0, (debuglevel & DEBUGLEVEL_PPMSG) != 0 ); if (!header_name) { header_name = dup_basename(input_name, ".idl"); strcat(header_name, ".h"); } if (!typelib_name && do_typelib) { typelib_name = dup_basename(input_name, ".idl"); strcat(typelib_name, ".tlb"); } if (!proxy_name && do_proxies) { proxy_name = dup_basename(input_name, ".idl"); strcat(proxy_name, "_p.c"); } if (!client_name && do_client) { client_name = dup_basename(input_name, ".idl"); strcat(client_name, "_c.c"); } if (!server_name && do_server) { server_name = dup_basename(input_name, ".idl"); strcat(server_name, "_s.c"); } if (!regscript_name && do_regscript) { regscript_name = dup_basename(input_name, ".idl"); strcat(regscript_name, "_r.rgs"); } if (!idfile_name && do_idfile) { idfile_name = dup_basename(input_name, ".idl"); strcat(idfile_name, "_i.c"); } if (do_proxies) proxy_token = dup_basename_token(proxy_name,"_p.c"); if (do_client) client_token = dup_basename_token(client_name,"_c.c"); if (do_server) server_token = dup_basename_token(server_name,"_s.c"); if (do_regscript) regscript_token = dup_basename_token(regscript_name,"_r.rgs"); add_widl_version_define(); wpp_add_define("_WIN32", NULL); atexit(rm_tempfile); if (!no_preprocess) { chat("Starting preprocess\n"); if (!preprocess_only) { FILE *output; int fd; char *name = xmalloc( strlen(header_name) + 8 ); strcpy( name, header_name ); strcat( name, ".XXXXXX" ); if ((fd = mkstemps( name, 0 )) == -1) error("Could not generate a temp name from %s\n", name); temp_name = name; if (!(output = fdopen(fd, "wt"))) error("Could not open fd %s for writing\n", name); ret = wpp_parse( input_name, output ); fclose( output ); } else { ret = wpp_parse( input_name, stdout ); } if(ret) exit(1); if(preprocess_only) exit(0); if(!(parser_in = fopen(temp_name, "r"))) { fprintf(stderr, "Could not open %s for input\n", temp_name); return 1; } } else { if(!(parser_in = fopen(input_name, "r"))) { fprintf(stderr, "Could not open %s for input\n", input_name); return 1; } } header_token = make_token(header_name); init_types(); ret = parser_parse(); fclose(parser_in); if(ret) { exit(1); } /* Everything has been done successfully, don't delete any files. */ set_everything(FALSE); local_stubs_name = NULL; return 0; } static void rm_tempfile(void) { abort_import(); if(temp_name) unlink(temp_name); if (do_header) unlink(header_name); if (local_stubs_name) unlink(local_stubs_name); if (do_client) unlink(client_name); if (do_server) unlink(server_name); if (do_regscript) unlink(regscript_name); if (do_idfile) unlink(idfile_name); if (do_proxies) unlink(proxy_name); if (do_typelib) unlink(typelib_name); } ================================================ FILE: widl/widl.h ================================================ /* * IDL Compiler * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WIDL_WIDL_H #define __WIDL_WIDL_H #include "widltypes.h" #include extern int debuglevel; #define DEBUGLEVEL_NONE 0x0000 #define DEBUGLEVEL_CHAT 0x0001 #define DEBUGLEVEL_DUMP 0x0002 #define DEBUGLEVEL_TRACE 0x0004 #define DEBUGLEVEL_PPMSG 0x0008 #define DEBUGLEVEL_PPLEX 0x0010 #define DEBUGLEVEL_PPTRACE 0x0020 extern int pedantic; extern int do_everything; extern int do_header; extern int do_typelib; extern int do_proxies; extern int do_client; extern int do_server; extern int do_regscript; extern int do_idfile; extern int do_dlldata; extern int old_names; extern int do_win32; extern int do_win64; extern int do_relay16; extern int win32_packing; extern int win64_packing; extern int winrt_mode; extern int use_abi_namespace; extern char *input_name; extern char *input_idl_name; extern char *header_name; extern char *header_token; extern char *local_stubs_name; extern char *typelib_name; extern char *dlldata_name; extern char *proxy_name; extern char *proxy_token; extern char *client_name; extern char *client_token; extern char *server_name; extern char *server_token; extern char *regscript_name; extern char *regscript_token; extern char *relay16_name; extern const char *prefix_client; extern const char *prefix_server; extern unsigned int pointer_size; extern time_t now; extern int line_number; extern int char_number; enum stub_mode { MODE_Os, /* inline stubs */ MODE_Oi, /* old-style interpreted stubs */ MODE_Oif /* new-style fully interpreted stubs */ }; extern enum stub_mode get_stub_mode(void); extern void write_header(const statement_list_t *stmts); extern void write_id_data(const statement_list_t *stmts); extern void write_proxies(const statement_list_t *stmts); extern void write_client(const statement_list_t *stmts); extern void write_server(const statement_list_t *stmts); extern void write_regscript(const statement_list_t *stmts); extern void output_typelib_regscript( const typelib_t *typelib ); extern void write_local_stubs(const statement_list_t *stmts); extern void write_dlldata(const statement_list_t *stmts); extern void write_relay16(const statement_list_t *stmts); extern void start_cplusplus_guard(FILE *fp); extern void end_cplusplus_guard(FILE *fp); #endif ================================================ FILE: widl/widl.vcxproj ================================================  Debug Win32 Release Win32 {8A7A52D0-4772-475F-AB85-9C074CFEFDE8} Win32Proj widl 10.0.17134.0 widl Application true v141 MultiByte Application false v141 true MultiByte true false Level3 Disabled _X86_;WIN32;_DEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose ;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions) ../wine Console true $(OutDir)libwine.lib;$(OutDir)wpp.lib;%(AdditionalDependencies) Level3 MaxSpeed true true _X86_;WIN32;NDEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose ;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions) ../wine Console true true true $(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) Document "$(FlexPath)flex" "%(FileName)%(Extension)" "$(FlexPath)flex" "%(FileName)%(Extension)" lex.parser_.c lex.parser_.c ClCompile ClCompile Document "$(BisonPath)bison" -p parser_ -d "%(FileName)%(Extension)" parser.tab.c "$(BisonPath)bison" -p parser_ -d "%(FileName)%(Extension)" parser.tab.c ClCompile ClCompile ================================================ FILE: widl/widltypes.h ================================================ /* * IDL Compiler * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WIDL_WIDLTYPES_H #define __WIDL_WIDLTYPES_H #include #include #include "guiddef.h" #include "windows/ndrtypes.h" #include "wine/list.h" #ifndef UUID_DEFINED #define UUID_DEFINED typedef GUID UUID; #endif #define TRUE 1 #define FALSE 0 typedef struct _loc_info_t loc_info_t; typedef struct _attr_t attr_t; typedef struct _expr_t expr_t; typedef struct _type_t type_t; typedef struct _var_t var_t; typedef struct _declarator_t declarator_t; typedef struct _ifref_t ifref_t; typedef struct _typelib_entry_t typelib_entry_t; typedef struct _importlib_t importlib_t; typedef struct _importinfo_t importinfo_t; typedef struct _typelib_t typelib_t; typedef struct _user_type_t user_type_t; typedef struct _user_type_t context_handle_t; typedef struct _user_type_t generic_handle_t; typedef struct _type_list_t type_list_t; typedef struct _statement_t statement_t; typedef struct _warning_t warning_t; typedef struct list attr_list_t; typedef struct list str_list_t; typedef struct list expr_list_t; typedef struct list var_list_t; typedef struct list declarator_list_t; typedef struct list ifref_list_t; typedef struct list array_dims_t; typedef struct list user_type_list_t; typedef struct list context_handle_list_t; typedef struct list generic_handle_list_t; typedef struct list statement_list_t; typedef struct list warning_list_t; enum attr_type { ATTR_AGGREGATABLE, ATTR_ANNOTATION, ATTR_APPOBJECT, ATTR_ASYNC, ATTR_ASYNCUUID, ATTR_AUTO_HANDLE, ATTR_BINDABLE, ATTR_BROADCAST, ATTR_CALLAS, ATTR_CALLCONV, /* calling convention pseudo-attribute */ ATTR_CASE, ATTR_CODE, ATTR_COMMSTATUS, ATTR_CONST, /* const pseudo-attribute */ ATTR_CONTEXTHANDLE, ATTR_CONTROL, ATTR_DECODE, ATTR_DEFAULT, ATTR_DEFAULTBIND, ATTR_DEFAULTCOLLELEM, ATTR_DEFAULTVALUE, ATTR_DEFAULTVTABLE, ATTR_DISABLECONSISTENCYCHECK, ATTR_DISPINTERFACE, ATTR_DISPLAYBIND, ATTR_DLLNAME, ATTR_DUAL, ATTR_ENABLEALLOCATE, ATTR_ENCODE, ATTR_ENDPOINT, ATTR_ENTRY, ATTR_EXPLICIT_HANDLE, ATTR_FAULTSTATUS, ATTR_FORCEALLOCATE, ATTR_HANDLE, ATTR_HELPCONTEXT, ATTR_HELPFILE, ATTR_HELPSTRING, ATTR_HELPSTRINGCONTEXT, ATTR_HELPSTRINGDLL, ATTR_HIDDEN, ATTR_ID, ATTR_IDEMPOTENT, ATTR_IGNORE, ATTR_IIDIS, ATTR_IMMEDIATEBIND, ATTR_IMPLICIT_HANDLE, ATTR_IN, ATTR_INLINE, ATTR_INPUTSYNC, ATTR_LENGTHIS, ATTR_LIBLCID, ATTR_LICENSED, ATTR_LOCAL, ATTR_MAYBE, ATTR_MESSAGE, ATTR_NOCODE, ATTR_NONBROWSABLE, ATTR_NONCREATABLE, ATTR_NONEXTENSIBLE, ATTR_NOTIFY, ATTR_NOTIFYFLAG, ATTR_OBJECT, ATTR_ODL, ATTR_OLEAUTOMATION, ATTR_OPTIMIZE, ATTR_OPTIONAL, ATTR_OUT, ATTR_PARAMLCID, ATTR_PARTIALIGNORE, ATTR_POINTERDEFAULT, ATTR_POINTERTYPE, ATTR_PROGID, ATTR_PROPGET, ATTR_PROPPUT, ATTR_PROPPUTREF, ATTR_PROXY, ATTR_PUBLIC, ATTR_RANGE, ATTR_READONLY, ATTR_REPRESENTAS, ATTR_REQUESTEDIT, ATTR_RESTRICTED, ATTR_RETVAL, ATTR_SIZEIS, ATTR_SOURCE, ATTR_STRICTCONTEXTHANDLE, ATTR_STRING, ATTR_SWITCHIS, ATTR_SWITCHTYPE, ATTR_THREADING, ATTR_TRANSMITAS, ATTR_UIDEFAULT, ATTR_USERMARSHAL, ATTR_USESGETLASTERROR, ATTR_UUID, ATTR_V1ENUM, ATTR_VARARG, ATTR_VERSION, ATTR_VIPROGID, ATTR_WIREMARSHAL }; enum expr_type { EXPR_VOID, EXPR_NUM, EXPR_HEXNUM, EXPR_DOUBLE, EXPR_IDENTIFIER, EXPR_NEG, EXPR_NOT, EXPR_PPTR, EXPR_CAST, EXPR_SIZEOF, EXPR_SHL, EXPR_SHR, EXPR_MUL, EXPR_DIV, EXPR_ADD, EXPR_SUB, EXPR_AND, EXPR_OR, EXPR_COND, EXPR_TRUEFALSE, EXPR_ADDRESSOF, EXPR_MEMBER, EXPR_ARRAY, EXPR_MOD, EXPR_LOGOR, EXPR_LOGAND, EXPR_XOR, EXPR_EQUALITY, EXPR_INEQUALITY, EXPR_GTR, EXPR_LESS, EXPR_GTREQL, EXPR_LESSEQL, EXPR_LOGNOT, EXPR_POS, EXPR_STRLIT, EXPR_WSTRLIT, EXPR_CHARCONST, }; enum type_kind { TKIND_PRIMITIVE = -1, TKIND_ENUM, TKIND_RECORD, TKIND_MODULE, TKIND_INTERFACE, TKIND_DISPATCH, TKIND_COCLASS, TKIND_ALIAS, TKIND_UNION, TKIND_MAX }; enum storage_class { STG_NONE, STG_STATIC, STG_EXTERN, STG_REGISTER, }; enum statement_type { STMT_LIBRARY, STMT_DECLARATION, STMT_TYPE, STMT_TYPEREF, STMT_MODULE, STMT_TYPEDEF, STMT_IMPORT, STMT_IMPORTLIB, STMT_PRAGMA, STMT_CPPQUOTE }; enum threading_type { THREADING_APARTMENT = 1, THREADING_NEUTRAL, THREADING_SINGLE, THREADING_FREE, THREADING_BOTH }; enum type_basic_type { TYPE_BASIC_INT8 = 1, TYPE_BASIC_INT16, TYPE_BASIC_INT32, TYPE_BASIC_INT64, TYPE_BASIC_INT, TYPE_BASIC_INT3264, TYPE_BASIC_CHAR, TYPE_BASIC_HYPER, TYPE_BASIC_BYTE, TYPE_BASIC_WCHAR, TYPE_BASIC_FLOAT, TYPE_BASIC_DOUBLE, TYPE_BASIC_ERROR_STATUS_T, TYPE_BASIC_HANDLE, }; #define TYPE_BASIC_MAX TYPE_BASIC_HANDLE #define TYPE_BASIC_INT_MIN TYPE_BASIC_INT8 #define TYPE_BASIC_INT_MAX TYPE_BASIC_HYPER struct _loc_info_t { const char *input_name; int line_number; const char *near_text; }; struct str_list_entry_t { char *str; struct list entry; }; struct _attr_t { enum attr_type type; union { unsigned int ival; void *pval; } u; /* parser-internal */ struct list entry; }; struct _expr_t { enum expr_type type; const expr_t *ref; union { int lval; double dval; const char *sval; const expr_t *ext; type_t *tref; } u; const expr_t *ext2; int is_const; int cval; /* parser-internal */ struct list entry; }; struct struct_details { var_list_t *fields; }; struct enumeration_details { var_list_t *enums; }; struct func_details { var_list_t *args; struct _var_t *retval; int idx; }; struct iface_details { statement_list_t *stmts; var_list_t *disp_methods; var_list_t *disp_props; struct _type_t *inherit; struct _type_t *disp_inherit; }; struct module_details { statement_list_t *stmts; }; struct array_details { expr_t *size_is; expr_t *length_is; struct _type_t *elem; unsigned int dim; unsigned char ptr_def_fc; unsigned char declptr; /* if declared as a pointer */ unsigned short ptr_tfsoff; /* offset of pointer definition for declptr */ }; struct coclass_details { ifref_list_t *ifaces; }; struct basic_details { enum type_basic_type type; int sign; }; struct pointer_details { struct _type_t *ref; unsigned char def_fc; }; struct bitfield_details { struct _type_t *field; const expr_t *bits; }; #define HASHMAX 64 struct namespace { const char *name; struct namespace *parent; struct list entry; struct list children; struct rtype *type_hash[HASHMAX]; }; enum type_type { TYPE_VOID, TYPE_BASIC, /* ints, floats and handles */ TYPE_ENUM, TYPE_STRUCT, TYPE_ENCAPSULATED_UNION, TYPE_UNION, TYPE_ALIAS, TYPE_MODULE, TYPE_COCLASS, TYPE_FUNCTION, TYPE_INTERFACE, TYPE_POINTER, TYPE_ARRAY, TYPE_BITFIELD, }; struct _type_t { const char *name; struct namespace *namespace; enum type_type type_type; attr_list_t *attrs; union { struct struct_details *structure; struct enumeration_details *enumeration; struct func_details *function; struct iface_details *iface; struct module_details *module; struct array_details array; struct coclass_details coclass; struct basic_details basic; struct pointer_details pointer; struct bitfield_details bitfield; } details; const char *c_name; type_t *orig; /* dup'd types */ unsigned int typestring_offset; unsigned int ptrdesc; /* used for complex structs */ int typelib_idx; loc_info_t loc_info; unsigned int ignore : 1; unsigned int defined : 1; unsigned int written : 1; unsigned int user_types_registered : 1; unsigned int tfswrite : 1; /* if the type needs to be written to the TFS */ unsigned int checked : 1; unsigned int is_alias : 1; /* is the type an alias? */ }; struct _var_t { char *name; type_t *type; attr_list_t *attrs; expr_t *eval; enum storage_class stgclass; unsigned int procstring_offset; unsigned int typestring_offset; struct _loc_info_t loc_info; /* parser-internal */ struct list entry; }; struct _declarator_t { var_t *var; type_t *type; type_t *func_type; array_dims_t *array; expr_t *bits; /* parser-internal */ struct list entry; }; struct _ifref_t { type_t *iface; attr_list_t *attrs; /* parser-internal */ struct list entry; }; struct _typelib_entry_t { type_t *type; struct list entry; }; struct _importinfo_t { int offset; GUID guid; int flags; int id; char *name; importlib_t *importlib; }; struct _importlib_t { char *name; int version; GUID guid; importinfo_t *importinfos; int ntypeinfos; int allocated; struct list entry; }; struct _typelib_t { char *name; const attr_list_t *attrs; struct list importlibs; statement_list_t *stmts; }; struct _user_type_t { struct list entry; const char *name; }; struct _type_list_t { type_t *type; struct _type_list_t *next; }; struct _statement_t { struct list entry; enum statement_type type; union { ifref_t iface; type_t *type; const char *str; var_t *var; typelib_t *lib; type_list_t *type_list; } u; }; struct _warning_t { int num; struct list entry; }; typedef enum { SYS_WIN16, SYS_WIN32, SYS_MAC, SYS_WIN64 } syskind_t; extern syskind_t typelib_kind; extern user_type_list_t user_type_list; extern context_handle_list_t context_handle_list; extern generic_handle_list_t generic_handle_list; void check_for_additional_prototype_types(const var_list_t *list); void init_types(void); type_t *alloc_type(void); void set_all_tfswrite(int val); void clear_all_offsets(void); #define tsENUM 1 #define tsSTRUCT 2 #define tsUNION 3 var_t *find_const(const char *name, int f); type_t *find_type(const char *name, struct namespace *namespace, int t); type_t *make_type(enum type_type type); type_t *get_type(enum type_type type, char *name, struct namespace *namespace, int t); type_t *reg_type(type_t *type, const char *name, struct namespace *namespace, int t); void add_incomplete(type_t *t); var_t *make_var(char *name); var_list_t *append_var(var_list_t *list, var_t *var); void init_loc_info(loc_info_t *); char *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix); static inline var_list_t *type_get_function_args(const type_t *func_type) { return func_type->details.function->args; } static inline enum type_type type_get_type_detect_alias(const type_t *type) { if (type->is_alias) return TYPE_ALIAS; return type->type_type; } #define STATEMENTS_FOR_EACH_FUNC(stmt, stmts) \ if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, statement_t, entry ) \ if (stmt->type == STMT_DECLARATION && stmt->u.var->stgclass == STG_NONE && \ type_get_type_detect_alias(stmt->u.var->type) == TYPE_FUNCTION) static inline int statements_has_func(const statement_list_t *stmts) { const statement_t *stmt; int has_func = 0; STATEMENTS_FOR_EACH_FUNC(stmt, stmts) { has_func = 1; break; } return has_func; } static inline int is_global_namespace(const struct namespace *namespace) { return !namespace->name; } #endif ================================================ FILE: widl/write_msft.c ================================================ /* * Typelib v2 (MSFT) generation * * Copyright 2004 Alastair Bridgewater * 2004, 2005 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * -------------------------------------------------------------------------------------- * Known problems: * * Badly incomplete. * * Only works on little-endian systems. * */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #define NONAMELESSUNION #include "winerror.h" #include "windef.h" #include "winbase.h" #include "winnls.h" #include "widl.h" #include "typelib.h" #include "typelib_struct.h" #include "utils.h" #include "header.h" #include "hash.h" #include "typetree.h" #include "parser.h" #include "typegen.h" enum MSFT_segment_index { MSFT_SEG_TYPEINFO = 0, /* type information */ MSFT_SEG_IMPORTINFO, /* import information */ MSFT_SEG_IMPORTFILES, /* import filenames */ MSFT_SEG_REFERENCES, /* references (?) */ MSFT_SEG_GUIDHASH, /* hash table for guids? */ MSFT_SEG_GUID, /* guid storage */ MSFT_SEG_NAMEHASH, /* hash table for names */ MSFT_SEG_NAME, /* name storage */ MSFT_SEG_STRING, /* string storage */ MSFT_SEG_TYPEDESC, /* type descriptions */ MSFT_SEG_ARRAYDESC, /* array descriptions */ MSFT_SEG_CUSTDATA, /* custom data */ MSFT_SEG_CUSTDATAGUID, /* custom data guids */ MSFT_SEG_UNKNOWN, /* ??? */ MSFT_SEG_UNKNOWN2, /* ??? */ MSFT_SEG_MAX /* total number of segments */ }; typedef struct tagMSFT_ImpFile { int guid; LCID lcid; int version; char filename[0]; /* preceded by two bytes of encoded (length << 2) + flags in the low two bits. */ } MSFT_ImpFile; typedef struct _msft_typelib_t { typelib_t *typelib; MSFT_Header typelib_header; MSFT_pSeg typelib_segdir[MSFT_SEG_MAX]; unsigned char *typelib_segment_data[MSFT_SEG_MAX]; int typelib_segment_block_length[MSFT_SEG_MAX]; INT typelib_typeinfo_offsets[0x200]; /* Hope that's enough. */ INT *typelib_namehash_segment; INT *typelib_guidhash_segment; INT help_string_dll_offset; struct _msft_typeinfo_t *typeinfos; struct _msft_typeinfo_t *last_typeinfo; } msft_typelib_t; typedef struct _msft_typeinfo_t { msft_typelib_t *typelib; MSFT_TypeInfoBase *typeinfo; int typekind; unsigned int var_data_allocated; int *var_data; unsigned int func_data_allocated; int *func_data; int vars_allocated; int *var_indices; int *var_names; int *var_offsets; int funcs_allocated; int *func_indices; int *func_names; int *func_offsets; int datawidth; struct _msft_typeinfo_t *next_typeinfo; } msft_typeinfo_t; /*================== Internal functions ===================================*/ /**************************************************************************** * ctl2_init_header * * Initializes the type library header of a new typelib. */ static void ctl2_init_header( msft_typelib_t *typelib) /* [I] The typelib to initialize. */ { typelib->typelib_header.magic1 = 0x5446534d; typelib->typelib_header.magic2 = 0x00010002; typelib->typelib_header.posguid = -1; typelib->typelib_header.lcid = 0x0409; typelib->typelib_header.lcid2 = 0x0; typelib->typelib_header.varflags = 0x40; typelib->typelib_header.version = 0; typelib->typelib_header.flags = 0; typelib->typelib_header.nrtypeinfos = 0; typelib->typelib_header.helpstring = -1; typelib->typelib_header.helpstringcontext = 0; typelib->typelib_header.helpcontext = 0; typelib->typelib_header.nametablecount = 0; typelib->typelib_header.nametablechars = 0; typelib->typelib_header.NameOffset = -1; typelib->typelib_header.helpfile = -1; typelib->typelib_header.CustomDataOffset = -1; typelib->typelib_header.res44 = 0x20; typelib->typelib_header.res48 = 0x80; typelib->typelib_header.dispatchpos = -1; typelib->typelib_header.nimpinfos = 0; } /**************************************************************************** * ctl2_init_segdir * * Initializes the segment directory of a new typelib. */ static void ctl2_init_segdir( msft_typelib_t *typelib) /* [I] The typelib to initialize. */ { int i; MSFT_pSeg *segdir; segdir = &typelib->typelib_segdir[MSFT_SEG_TYPEINFO]; for (i = 0; i < MSFT_SEG_MAX; i++) { segdir[i].offset = -1; segdir[i].length = 0; segdir[i].res08 = -1; segdir[i].res0c = 0x0f; } } /**************************************************************************** * ctl2_hash_guid * * Generates a hash key from a GUID. * * RETURNS * * The hash key for the GUID. */ static int ctl2_hash_guid( REFGUID guid) /* [I] The guid to hash. */ { int hash; int i; hash = 0; for (i = 0; i < 8; i ++) { hash ^= ((const short *)guid)[i]; } return hash & 0x1f; } /**************************************************************************** * ctl2_find_guid * * Locates a guid in a type library. * * RETURNS * * The offset into the GUID segment of the guid, or -1 if not found. */ static int ctl2_find_guid( msft_typelib_t *typelib, /* [I] The typelib to operate against. */ int hash_key, /* [I] The hash key for the guid. */ REFGUID guid) /* [I] The guid to find. */ { int offset; MSFT_GuidEntry *guidentry; offset = typelib->typelib_guidhash_segment[hash_key]; while (offset != -1) { guidentry = (MSFT_GuidEntry *)&typelib->typelib_segment_data[MSFT_SEG_GUID][offset]; if (!memcmp(guidentry, guid, sizeof(GUID))) return offset; offset = guidentry->next_hash; } return offset; } /**************************************************************************** * ctl2_find_name * * Locates a name in a type library. * * RETURNS * * The offset into the NAME segment of the name, or -1 if not found. * * NOTES * * The name must be encoded as with ctl2_encode_name(). */ static int ctl2_find_name( msft_typelib_t *typelib, /* [I] The typelib to operate against. */ char *name) /* [I] The encoded name to find. */ { int offset; int *namestruct; offset = typelib->typelib_namehash_segment[name[2] & 0x7f]; while (offset != -1) { namestruct = (int *)&typelib->typelib_segment_data[MSFT_SEG_NAME][offset]; if (!((namestruct[2] ^ *((int *)name)) & 0xffff00ff)) { /* hash codes and lengths match, final test */ if (!strncasecmp(name+4, (void *)(namestruct+3), name[0])) break; } /* move to next item in hash bucket */ offset = namestruct[1]; } return offset; } /**************************************************************************** * ctl2_encode_name * * Encodes a name string to a form suitable for storing into a type library * or comparing to a name stored in a type library. * * RETURNS * * The length of the encoded name, including padding and length+hash fields. * * NOTES * * Will throw an exception if name or result are NULL. Is not multithread * safe in the slightest. */ static int ctl2_encode_name( msft_typelib_t *typelib, /* [I] The typelib to operate against (used for LCID only). */ const char *name, /* [I] The name string to encode. */ char **result) /* [O] A pointer to a pointer to receive the encoded name. */ { int length; static char converted_name[0x104]; int offset; int value; length = strlen(name); memcpy(converted_name + 4, name, length); converted_name[length + 4] = 0; value = lhash_val_of_name_sys(typelib->typelib_header.varflags & 0x0f, typelib->typelib_header.lcid, converted_name + 4); #ifdef WORDS_BIGENDIAN converted_name[3] = length & 0xff; converted_name[2] = 0x00; converted_name[1] = value; converted_name[0] = value >> 8; #else converted_name[0] = length & 0xff; converted_name[1] = 0x00; converted_name[2] = value; converted_name[3] = value >> 8; #endif for (offset = (4 - length) & 3; offset; offset--) converted_name[length + offset + 3] = 0x57; *result = converted_name; return (length + 7) & ~3; } /**************************************************************************** * ctl2_encode_string * * Encodes a string to a form suitable for storing into a type library or * comparing to a string stored in a type library. * * RETURNS * * The length of the encoded string, including padding and length fields. * * NOTES * * Will throw an exception if string or result are NULL. Is not multithread * safe in the slightest. */ static int ctl2_encode_string( const char *string, /* [I] The string to encode. */ char **result) /* [O] A pointer to a pointer to receive the encoded string. */ { int length; static char converted_string[0x104]; int offset; length = strlen(string); memcpy(converted_string + 2, string, length); #ifdef WORDS_BIGENDIAN converted_string[1] = length & 0xff; converted_string[0] = (length >> 8) & 0xff; #else converted_string[0] = length & 0xff; converted_string[1] = (length >> 8) & 0xff; #endif if(length < 3) { /* strings of this length are padded with up to 8 bytes incl the 2 byte length */ for(offset = 0; offset < 4; offset++) converted_string[length + offset + 2] = 0x57; length += 4; } for (offset = (4 - (length + 2)) & 3; offset; offset--) converted_string[length + offset + 1] = 0x57; *result = converted_string; return (length + 5) & ~3; } /**************************************************************************** * ctl2_alloc_segment * * Allocates memory from a segment in a type library. * * RETURNS * * Success: The offset within the segment of the new data area. * * BUGS * * Does not (yet) handle the case where the allocated segment memory needs to grow. */ static int ctl2_alloc_segment( msft_typelib_t *typelib, /* [I] The type library in which to allocate. */ enum MSFT_segment_index segment, /* [I] The segment in which to allocate. */ int size, /* [I] The amount to allocate. */ int block_size) /* [I] Initial allocation block size, or 0 for default. */ { int offset; if(!typelib->typelib_segment_data[segment]) { if (!block_size) block_size = 0x2000; typelib->typelib_segment_block_length[segment] = block_size; typelib->typelib_segment_data[segment] = xmalloc(block_size); if (!typelib->typelib_segment_data[segment]) return -1; memset(typelib->typelib_segment_data[segment], 0x57, block_size); } while ((typelib->typelib_segdir[segment].length + size) > typelib->typelib_segment_block_length[segment]) { unsigned char *block; block_size = typelib->typelib_segment_block_length[segment]; block = xrealloc(typelib->typelib_segment_data[segment], block_size << 1); if (segment == MSFT_SEG_TYPEINFO) { /* TypeInfos have a direct pointer to their memory space, so we have to fix them up. */ msft_typeinfo_t *typeinfo; for (typeinfo = typelib->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) { typeinfo->typeinfo = (void *)&block[((unsigned char *)typeinfo->typeinfo) - typelib->typelib_segment_data[segment]]; } } memset(block + block_size, 0x57, block_size); typelib->typelib_segment_block_length[segment] = block_size << 1; typelib->typelib_segment_data[segment] = block; } offset = typelib->typelib_segdir[segment].length; typelib->typelib_segdir[segment].length += size; return offset; } /**************************************************************************** * ctl2_alloc_typeinfo * * Allocates and initializes a typeinfo structure in a type library. * * RETURNS * * Success: The offset of the new typeinfo. * Failure: -1 (this is invariably an out of memory condition). */ static int ctl2_alloc_typeinfo( msft_typelib_t *typelib, /* [I] The type library to allocate in. */ int nameoffset) /* [I] The offset of the name for this typeinfo. */ { int offset; MSFT_TypeInfoBase *typeinfo; offset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEINFO, sizeof(MSFT_TypeInfoBase), 0); typelib->typelib_typeinfo_offsets[typelib->typelib_header.nrtypeinfos++] = offset; typeinfo = (void *)(typelib->typelib_segment_data[MSFT_SEG_TYPEINFO] + offset); typeinfo->typekind = (typelib->typelib_header.nrtypeinfos - 1) << 16; typeinfo->memoffset = -1; /* should be EOF if no elements */ typeinfo->res2 = 0; typeinfo->res3 = -1; typeinfo->res4 = 3; typeinfo->res5 = 0; typeinfo->cElement = 0; typeinfo->res7 = 0; typeinfo->res8 = 0; typeinfo->res9 = 0; typeinfo->resA = 0; typeinfo->posguid = -1; typeinfo->flags = 0; typeinfo->NameOffset = nameoffset; typeinfo->version = 0; typeinfo->docstringoffs = -1; typeinfo->helpstringcontext = 0; typeinfo->helpcontext = 0; typeinfo->oCustData = -1; typeinfo->cbSizeVft = 0; typeinfo->cImplTypes = 0; typeinfo->size = 0; typeinfo->datatype1 = -1; typeinfo->datatype2 = 0; typeinfo->res18 = 0; typeinfo->res19 = -1; return offset; } /**************************************************************************** * ctl2_alloc_guid * * Allocates and initializes a GUID structure in a type library. Also updates * the GUID hash table as needed. * * RETURNS * * Success: The offset of the new GUID. */ static int ctl2_alloc_guid( msft_typelib_t *typelib, /* [I] The type library to allocate in. */ MSFT_GuidEntry *guid) /* [I] The GUID to store. */ { int offset; MSFT_GuidEntry *guid_space; int hash_key; chat("adding uuid {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n", guid->guid.Data1, guid->guid.Data2, guid->guid.Data3, guid->guid.Data4[0], guid->guid.Data4[1], guid->guid.Data4[2], guid->guid.Data4[3], guid->guid.Data4[4], guid->guid.Data4[5], guid->guid.Data4[6], guid->guid.Data4[7]); hash_key = ctl2_hash_guid(&guid->guid); offset = ctl2_find_guid(typelib, hash_key, &guid->guid); if (offset != -1) { if (is_warning_enabled(2368)) warning("duplicate uuid {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n", guid->guid.Data1, guid->guid.Data2, guid->guid.Data3, guid->guid.Data4[0], guid->guid.Data4[1], guid->guid.Data4[2], guid->guid.Data4[3], guid->guid.Data4[4], guid->guid.Data4[5], guid->guid.Data4[6], guid->guid.Data4[7]); return -1; } offset = ctl2_alloc_segment(typelib, MSFT_SEG_GUID, sizeof(MSFT_GuidEntry), 0); guid_space = (void *)(typelib->typelib_segment_data[MSFT_SEG_GUID] + offset); *guid_space = *guid; guid_space->next_hash = typelib->typelib_guidhash_segment[hash_key]; typelib->typelib_guidhash_segment[hash_key] = offset; return offset; } /**************************************************************************** * ctl2_alloc_name * * Allocates and initializes a name within a type library. Also updates the * name hash table as needed. * * RETURNS * * Success: The offset within the segment of the new name. * Failure: -1 (this is invariably an out of memory condition). */ static int ctl2_alloc_name( msft_typelib_t *typelib, /* [I] The type library to allocate in. */ const char *name) /* [I] The name to store. */ { int length; int offset; MSFT_NameIntro *name_space; char *encoded_name; length = ctl2_encode_name(typelib, name, &encoded_name); offset = ctl2_find_name(typelib, encoded_name); if (offset != -1) return offset; offset = ctl2_alloc_segment(typelib, MSFT_SEG_NAME, length + 8, 0); name_space = (void *)(typelib->typelib_segment_data[MSFT_SEG_NAME] + offset); name_space->hreftype = -1; name_space->next_hash = -1; memcpy(&name_space->namelen, encoded_name, length); if (typelib->typelib_namehash_segment[encoded_name[2] & 0x7f] != -1) name_space->next_hash = typelib->typelib_namehash_segment[encoded_name[2] & 0x7f]; typelib->typelib_namehash_segment[encoded_name[2] & 0x7f] = offset; typelib->typelib_header.nametablecount += 1; typelib->typelib_header.nametablechars += *encoded_name; return offset; } /**************************************************************************** * ctl2_alloc_string * * Allocates and initializes a string in a type library. * * RETURNS * * Success: The offset within the segment of the new string. * Failure: -1 (this is invariably an out of memory condition). */ static int ctl2_alloc_string( msft_typelib_t *typelib, /* [I] The type library to allocate in. */ const char *string) /* [I] The string to store. */ { int length; int offset; unsigned char *string_space; char *encoded_string; length = ctl2_encode_string(string, &encoded_string); for (offset = 0; offset < typelib->typelib_segdir[MSFT_SEG_STRING].length; offset += (((typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 1] << 8) | typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 0]) + 5) & ~3) { if (!memcmp(encoded_string, typelib->typelib_segment_data[MSFT_SEG_STRING] + offset, length)) return offset; } offset = ctl2_alloc_segment(typelib, MSFT_SEG_STRING, length, 0); string_space = typelib->typelib_segment_data[MSFT_SEG_STRING] + offset; memcpy(string_space, encoded_string, length); return offset; } /**************************************************************************** * alloc_msft_importinfo * * Allocates and initializes an import information structure in a type library. * * RETURNS * * Success: The offset of the new importinfo. * Failure: -1 (this is invariably an out of memory condition). */ static int alloc_msft_importinfo( msft_typelib_t *typelib, /* [I] The type library to allocate in. */ MSFT_ImpInfo *impinfo) /* [I] The import information to store. */ { int offset; MSFT_ImpInfo *impinfo_space; for (offset = 0; offset < typelib->typelib_segdir[MSFT_SEG_IMPORTINFO].length; offset += sizeof(MSFT_ImpInfo)) { if (!memcmp(&(typelib->typelib_segment_data[MSFT_SEG_IMPORTINFO][offset]), impinfo, sizeof(MSFT_ImpInfo))) { return offset; } } impinfo->flags |= typelib->typelib_header.nimpinfos++; offset = ctl2_alloc_segment(typelib, MSFT_SEG_IMPORTINFO, sizeof(MSFT_ImpInfo), 0); impinfo_space = (void *)(typelib->typelib_segment_data[MSFT_SEG_IMPORTINFO] + offset); *impinfo_space = *impinfo; return offset; } /**************************************************************************** * alloc_importfile * * Allocates and initializes an import file definition in a type library. * * RETURNS * * Success: The offset of the new importinfo. * Failure: -1 (this is invariably an out of memory condition). */ static int alloc_importfile( msft_typelib_t *typelib, /* [I] The type library to allocate in. */ int guidoffset, /* [I] The offset to the GUID for the imported library. */ int major_version, /* [I] The major version number of the imported library. */ int minor_version, /* [I] The minor version number of the imported library. */ const char *filename) /* [I] The filename of the imported library. */ { int length; int offset; MSFT_ImpFile *importfile; char *encoded_string; length = ctl2_encode_string(filename, &encoded_string); encoded_string[0] <<= 2; encoded_string[0] |= 1; for (offset = 0; offset < typelib->typelib_segdir[MSFT_SEG_IMPORTFILES].length; offset += (((typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xd] << 8) | typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xc]) >> 2) + 0xc) { if (!memcmp(encoded_string, typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES] + offset + 0xc, length)) return offset; } offset = ctl2_alloc_segment(typelib, MSFT_SEG_IMPORTFILES, length + 0xc, 0); importfile = (MSFT_ImpFile *)&typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset]; importfile->guid = guidoffset; importfile->lcid = typelib->typelib_header.lcid2; importfile->version = major_version | (minor_version << 16); memcpy(&importfile->filename, encoded_string, length); return offset; } static void alloc_importinfo(msft_typelib_t *typelib, importinfo_t *importinfo) { importlib_t *importlib = importinfo->importlib; chat("alloc_importinfo: %s\n", importinfo->name); if(!importlib->allocated) { MSFT_GuidEntry guid; int guid_idx; chat("allocating importlib %s\n", importlib->name); importlib->allocated = -1; memcpy(&guid.guid, &importlib->guid, sizeof(GUID)); guid.hreftype = 2; guid_idx = ctl2_alloc_guid(typelib, &guid); alloc_importfile(typelib, guid_idx, importlib->version&0xffff, importlib->version>>16, importlib->name); } if(importinfo->offset == -1 || !(importinfo->flags & MSFT_IMPINFO_OFFSET_IS_GUID)) { MSFT_ImpInfo impinfo; impinfo.flags = importinfo->flags; impinfo.oImpFile = 0; if(importinfo->flags & MSFT_IMPINFO_OFFSET_IS_GUID) { MSFT_GuidEntry guid; guid.hreftype = 0; memcpy(&guid.guid, &importinfo->guid, sizeof(GUID)); impinfo.oGuid = ctl2_alloc_guid(typelib, &guid); importinfo->offset = alloc_msft_importinfo(typelib, &impinfo); typelib->typelib_segment_data[MSFT_SEG_GUID][impinfo.oGuid+sizeof(GUID)] = importinfo->offset+1; if(!strcmp(importinfo->name, "IDispatch")) typelib->typelib_header.dispatchpos = importinfo->offset+1; }else { impinfo.oGuid = importinfo->id; importinfo->offset = alloc_msft_importinfo(typelib, &impinfo); } } } static importinfo_t *find_importinfo(msft_typelib_t *typelib, const char *name) { importlib_t *importlib; int i; chat("search importlib %s\n", name); if(!name) return NULL; LIST_FOR_EACH_ENTRY( importlib, &typelib->typelib->importlibs, importlib_t, entry ) { for(i=0; i < importlib->ntypeinfos; i++) { if(!strcmp(name, importlib->importinfos[i].name)) { chat("Found %s in importlib.\n", name); return importlib->importinfos+i; } } } return NULL; } static void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure); static void add_interface_typeinfo(msft_typelib_t *typelib, type_t *interface); static void add_enum_typeinfo(msft_typelib_t *typelib, type_t *enumeration); static void add_union_typeinfo(msft_typelib_t *typelib, type_t *tunion); static void add_coclass_typeinfo(msft_typelib_t *typelib, type_t *cls); static void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinterface); /**************************************************************************** * encode_type * * Encodes a type, storing information in the TYPEDESC and ARRAYDESC * segments as needed. * * RETURNS * * Success: 0. * Failure: -1. */ static int encode_type( msft_typelib_t *typelib, /* [I] The type library in which to encode the TYPEDESC. */ int vt, /* [I] vt to encode */ type_t *type, /* [I] type */ int *encoded_type, /* [O] The encoded type description. */ int *decoded_size) /* [O] The total size of the unencoded TYPEDESCs, including nested descs. */ { int default_type; int scratch; int typeoffset; int *typedata; int target_type; int child_size = 0; chat("encode_type vt %d type %p\n", vt, type); default_type = 0x80000000 | (vt << 16) | vt; if (!decoded_size) decoded_size = &scratch; *decoded_size = 0; switch (vt) { case VT_I1: case VT_UI1: *encoded_type = default_type; break; case VT_INT: *encoded_type = 0x80000000 | (VT_I4 << 16) | VT_INT; break; case VT_UINT: *encoded_type = 0x80000000 | (VT_UI4 << 16) | VT_UINT; break; case VT_UI2: case VT_I2: case VT_BOOL: *encoded_type = default_type; break; case VT_I4: case VT_UI4: case VT_R4: case VT_ERROR: case VT_HRESULT: *encoded_type = default_type; break; case VT_R8: case VT_I8: case VT_UI8: *encoded_type = default_type; break; case VT_CY: case VT_DATE: *encoded_type = default_type; break; case VT_DECIMAL: *encoded_type = default_type; break; case VT_VOID: *encoded_type = 0x80000000 | (VT_EMPTY << 16) | vt; break; case VT_UNKNOWN: case VT_DISPATCH: case VT_BSTR: *encoded_type = default_type; break; case VT_VARIANT: *encoded_type = default_type; break; case VT_LPSTR: case VT_LPWSTR: *encoded_type = 0xfffe0000 | vt; break; case VT_PTR: { int next_vt; for(next_vt = 0; is_ptr(type); type = type_pointer_get_ref(type)) { next_vt = get_type_vt(type_pointer_get_ref(type)); if (next_vt != 0) break; } /* if no type found then it must be void */ if (next_vt == 0) next_vt = VT_VOID; encode_type(typelib, next_vt, type_pointer_get_ref(type), &target_type, &child_size); /* these types already have an implicit pointer, so we don't need to * add another */ if(next_vt == VT_DISPATCH || next_vt == VT_UNKNOWN) { chat("encode_type: skipping ptr\n"); *encoded_type = target_type; *decoded_size = child_size; break; } for (typeoffset = 0; typeoffset < typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; if (((typedata[0] & 0xffff) == VT_PTR) && (typedata[1] == target_type)) break; } if (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) { int mix_field; if (target_type & 0x80000000) { mix_field = ((target_type >> 16) & 0x3fff) | VT_BYREF; } else { typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type]; mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe; } typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0); typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; typedata[0] = (mix_field << 16) | VT_PTR; typedata[1] = target_type; } *encoded_type = typeoffset; *decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size; break; } case VT_SAFEARRAY: { type_t *element_type = type_alias_get_aliasee(type_array_get_element(type)); int next_vt = get_type_vt(element_type); encode_type(typelib, next_vt, type_alias_get_aliasee(type_array_get_element(type)), &target_type, &child_size); for (typeoffset = 0; typeoffset < typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; if (((typedata[0] & 0xffff) == VT_SAFEARRAY) && (typedata[1] == target_type)) break; } if (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) { int mix_field; if (target_type & 0x80000000) { mix_field = ((target_type >> 16) & VT_TYPEMASK) | VT_ARRAY; } else { typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type]; mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe; } typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0); typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; typedata[0] = (mix_field << 16) | VT_SAFEARRAY; typedata[1] = target_type; } *encoded_type = typeoffset; *decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size; break; } case VT_USERDEFINED: { importinfo_t *importinfo; int typeinfo_offset; if (type->typelib_idx > -1) { chat("encode_type: VT_USERDEFINED - found already defined type %s at %d\n", type->name, type->typelib_idx); typeinfo_offset = typelib->typelib_typeinfo_offsets[type->typelib_idx]; } else if ((importinfo = find_importinfo(typelib, type->name))) { chat("encode_type: VT_USERDEFINED - found imported type %s in %s\n", type->name, importinfo->importlib->name); alloc_importinfo(typelib, importinfo); typeinfo_offset = importinfo->offset | 0x1; } else { /* typedef'd types without public attribute aren't included in the typelib */ while (type_is_alias(type) && !is_attr(type->attrs, ATTR_PUBLIC)) type = type_alias_get_aliasee(type); chat("encode_type: VT_USERDEFINED - adding new type %s, real type %d\n", type->name, type_get_type(type)); switch (type_get_type(type)) { case TYPE_STRUCT: add_structure_typeinfo(typelib, type); break; case TYPE_INTERFACE: add_interface_typeinfo(typelib, type); break; case TYPE_ENUM: add_enum_typeinfo(typelib, type); break; case TYPE_UNION: add_union_typeinfo(typelib, type); break; case TYPE_COCLASS: add_coclass_typeinfo(typelib, type); break; default: error("encode_type: VT_USERDEFINED - unhandled type %d\n", type_get_type(type)); } typeinfo_offset = typelib->typelib_typeinfo_offsets[type->typelib_idx]; } for (typeoffset = 0; typeoffset < typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; if ((typedata[0] == ((0x7fff << 16) | VT_USERDEFINED)) && (typedata[1] == typeinfo_offset)) break; } if (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) { typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0); typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; typedata[0] = (0x7fff << 16) | VT_USERDEFINED; typedata[1] = typeinfo_offset; } *encoded_type = typeoffset; break; } default: error("encode_type: unrecognized type %d.\n", vt); *encoded_type = default_type; break; } return 0; } static void dump_type(type_t *t) { chat("dump_type: %p name %s type %d attrs %p\n", t, t->name, type_get_type(t), t->attrs); } static int encode_var( msft_typelib_t *typelib, /* [I] The type library in which to encode the TYPEDESC. */ type_t *type, /* [I] The type description to encode. */ var_t *var, /* [I] The var to encode. */ int *encoded_type, /* [O] The encoded type description. */ int *decoded_size) /* [O] The total size of the unencoded TYPEDESCs, including nested descs. */ { int typeoffset; int *typedata; int target_type; int child_size; int vt; int scratch; if (!decoded_size) decoded_size = &scratch; *decoded_size = 0; chat("encode_var: var %p type %p type->name %s\n", var, type, type->name ? type->name : "NULL"); if (is_array(type) && !type_array_is_decl_as_ptr(type)) { int num_dims, elements = 1, arrayoffset; type_t *atype; int *arraydata; num_dims = 0; for (atype = type; is_array(atype) && !type_array_is_decl_as_ptr(atype); atype = type_array_get_element(atype)) ++num_dims; chat("array with %d dimensions\n", num_dims); encode_var(typelib, atype, var, &target_type, NULL); arrayoffset = ctl2_alloc_segment(typelib, MSFT_SEG_ARRAYDESC, (2 + 2 * num_dims) * sizeof(int), 0); arraydata = (void *)&typelib->typelib_segment_data[MSFT_SEG_ARRAYDESC][arrayoffset]; arraydata[0] = target_type; arraydata[1] = num_dims; arraydata[1] |= ((num_dims * 2 * sizeof(int)) << 16); arraydata += 2; for (atype = type; is_array(atype) && !type_array_is_decl_as_ptr(atype); atype = type_array_get_element(atype)) { arraydata[0] = type_array_get_dim(atype); arraydata[1] = 0; arraydata += 2; elements *= type_array_get_dim(atype); } typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0); typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; typedata[0] = (0x7ffe << 16) | VT_CARRAY; typedata[1] = arrayoffset; *encoded_type = typeoffset; *decoded_size = 20 /*sizeof(ARRAYDESC)*/ + (num_dims - 1) * 8 /*sizeof(SAFEARRAYBOUND)*/; return 0; } vt = get_type_vt(type); if (vt == VT_PTR) { type_t *ref = is_ptr(type) ? type_pointer_get_ref(type) : type_array_get_element(type); int skip_ptr = encode_var(typelib, ref, var, &target_type, &child_size); if(skip_ptr == 2) { chat("encode_var: skipping ptr\n"); *encoded_type = target_type; *decoded_size = child_size; return 0; } for (typeoffset = 0; typeoffset < typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; if (((typedata[0] & 0xffff) == VT_PTR) && (typedata[1] == target_type)) break; } if (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) { int mix_field; if (target_type & 0x80000000) { mix_field = ((target_type >> 16) & 0x3fff) | VT_BYREF; } else if (is_array(ref)) { type_t *element_type = type_alias_get_aliasee(type_array_get_element(ref)); mix_field = get_type_vt(element_type) | VT_ARRAY | VT_BYREF; } else { typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type]; mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe; } typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0); typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; typedata[0] = (mix_field << 16) | VT_PTR; typedata[1] = target_type; } *encoded_type = typeoffset; *decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size; return 0; } dump_type(type); encode_type(typelib, vt, type, encoded_type, decoded_size); /* these types already have an implicit pointer, so we don't need to * add another */ if(vt == VT_DISPATCH || vt == VT_UNKNOWN) return 2; return 0; } static unsigned int get_ulong_val(unsigned int val, int vt) { switch(vt) { case VT_I2: case VT_BOOL: case VT_UI2: return val & 0xffff; case VT_I1: case VT_UI1: return val & 0xff; } return val; } static void write_int_value(msft_typelib_t *typelib, int *out, int vt, int value) { const unsigned int lv = get_ulong_val(value, vt); if ((lv & 0x3ffffff) == lv) { *out = 0x80000000; *out |= vt << 26; *out |= lv; } else { int offset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATA, 8, 0); *((unsigned short *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset]) = vt; memcpy(&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+2], &value, 4); *((unsigned short *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+6]) = 0x5757; *out = offset; } } static void write_string_value(msft_typelib_t *typelib, int *out, const char *value) { int len = strlen(value), seg_len = (len + 6 + 3) & ~0x3; int offset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATA, seg_len, 0); *((unsigned short *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset]) = VT_BSTR; memcpy(&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+2], &len, sizeof(len)); memcpy(&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+6], value, len); len += 6; while(len < seg_len) { *((char *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+len]) = 0x57; len++; } *out = offset; } static void write_default_value(msft_typelib_t *typelib, type_t *type, expr_t *expr, int *out) { int vt; if (expr->type == EXPR_STRLIT || expr->type == EXPR_WSTRLIT) { if (get_type_vt(type) != VT_BSTR) error("string default value applied to non-string type\n"); chat("default value '%s'\n", expr->u.sval); write_string_value(typelib, out, expr->u.sval); return; } if (type_get_type(type) == TYPE_ENUM) { vt = VT_I4; } else if (is_ptr(type)) { vt = get_type_vt(type_pointer_get_ref(type)); if (vt == VT_USERDEFINED) vt = VT_I4; if (expr->cval) warning("non-null pointer default value\n"); } else { vt = get_type_vt(type); switch(vt) { case VT_I2: case VT_I4: case VT_R4: case VT_BOOL: case VT_I1: case VT_UI1: case VT_UI2: case VT_UI4: case VT_INT: case VT_UINT: case VT_HRESULT: break; default: warning("can't write value of type %d yet\n", vt); return; } } write_int_value(typelib, out, vt, expr->cval); } static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid, int vt, const void *value, int *offset) { MSFT_GuidEntry guidentry; int guidoffset; int custoffset; int *custdata; int data_out; guidentry.guid = *guid; guidentry.hreftype = -1; guidentry.next_hash = -1; guidoffset = ctl2_alloc_guid(typelib, &guidentry); if(vt == VT_BSTR) write_string_value(typelib, &data_out, value); else write_int_value(typelib, &data_out, vt, *(int*)value); custoffset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATAGUID, 12, 0); custdata = (int *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATAGUID][custoffset]; custdata[0] = guidoffset; custdata[1] = data_out; custdata[2] = *offset; *offset = custoffset; return S_OK; } static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index) { int offset, name_offset; int *typedata, typedata_size; int i, id, next_idx; int decoded_size, extra_attr = 0; int num_params = 0, num_optional = 0, num_defaults = 0; var_t *arg; unsigned char *namedata; const attr_t *attr; unsigned int funcflags = 0, callconv = 4 /* CC_STDCALL */; unsigned int funckind, invokekind = 1 /* INVOKE_FUNC */; int help_context = 0, help_string_context = 0, help_string_offset = -1; int entry = -1, entry_is_ord = 0; int lcid_retval_count = 0; chat("add_func_desc(%p,%d)\n", typeinfo, index); id = ((0x6000 | (typeinfo->typeinfo->datatype2 & 0xffff)) << 16) | index; switch(typeinfo->typekind) { case TKIND_DISPATCH: funckind = 0x4; /* FUNC_DISPATCH */ break; case TKIND_MODULE: funckind = 0x3; /* FUNC_STATIC */ break; default: funckind = 0x1; /* FUNC_PUREVIRTUAL */ break; } if (is_local( func->attrs )) { chat("add_func_desc: skipping local function\n"); return S_FALSE; } if (type_get_function_args(func->type)) LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), var_t, entry ) { num_params++; if (arg->attrs) LIST_FOR_EACH_ENTRY( attr, arg->attrs, const attr_t, entry ) { if(attr->type == ATTR_DEFAULTVALUE) num_defaults++; else if(attr->type == ATTR_OPTIONAL) num_optional++; } } chat("add_func_desc: num of params %d\n", num_params); name_offset = ctl2_alloc_name(typeinfo->typelib, func->name); if (func->attrs) LIST_FOR_EACH_ENTRY( attr, func->attrs, const attr_t, entry ) { expr_t *expr = attr->u.pval; switch(attr->type) { case ATTR_BINDABLE: funcflags |= 0x4; /* FUNCFLAG_FBINDABLE */ break; case ATTR_DEFAULTBIND: funcflags |= 0x20; /* FUNCFLAG_FDEFAULTBIND */ break; case ATTR_DEFAULTCOLLELEM: funcflags |= 0x100; /* FUNCFLAG_FDEFAULTCOLLELEM */ break; case ATTR_DISPLAYBIND: funcflags |= 0x10; /* FUNCFLAG_FDISPLAYBIND */ break; case ATTR_ENTRY: extra_attr = max(extra_attr, 3); if (expr->type == EXPR_STRLIT || expr->type == EXPR_WSTRLIT) entry = ctl2_alloc_string(typeinfo->typelib, attr->u.pval); else { entry = expr->cval; entry_is_ord = 1; } break; case ATTR_HELPCONTEXT: extra_attr = max(extra_attr, 1); help_context = expr->u.lval; break; case ATTR_HELPSTRING: extra_attr = max(extra_attr, 2); help_string_offset = ctl2_alloc_string(typeinfo->typelib, attr->u.pval); break; case ATTR_HELPSTRINGCONTEXT: extra_attr = max(extra_attr, 6); help_string_context = expr->u.lval; break; case ATTR_HIDDEN: funcflags |= 0x40; /* FUNCFLAG_FHIDDEN */ break; case ATTR_ID: id = expr->cval; break; case ATTR_IMMEDIATEBIND: funcflags |= 0x1000; /* FUNCFLAG_FIMMEDIATEBIND */ break; case ATTR_NONBROWSABLE: funcflags |= 0x400; /* FUNCFLAG_FNONBROWSABLE */ break; case ATTR_OUT: break; case ATTR_PROPGET: invokekind = 0x2; /* INVOKE_PROPERTYGET */ break; case ATTR_PROPPUT: invokekind = 0x4; /* INVOKE_PROPERTYPUT */ break; case ATTR_PROPPUTREF: invokekind = 0x8; /* INVOKE_PROPERTYPUTREF */ break; /* FIXME: FUNCFLAG_FREPLACEABLE */ case ATTR_REQUESTEDIT: funcflags |= 0x8; /* FUNCFLAG_FREQUESTEDIT */ break; case ATTR_RESTRICTED: funcflags |= 0x1; /* FUNCFLAG_FRESTRICTED */ break; case ATTR_SOURCE: funcflags |= 0x2; /* FUNCFLAG_FSOURCE */ break; case ATTR_UIDEFAULT: funcflags |= 0x200; /* FUNCFLAG_FUIDEFAULT */ break; case ATTR_USESGETLASTERROR: funcflags |= 0x80; /* FUNCFLAG_FUSESGETLASTERROR */ break; case ATTR_VARARG: if (num_optional || num_defaults) warning("add_func_desc: ignoring vararg in function with optional or defaultvalue params\n"); else num_optional = -1; break; default: break; } } /* allocate type data space for us */ typedata_size = 0x18 + extra_attr * sizeof(int) + (num_params * (num_defaults ? 16 : 12)); if (!typeinfo->func_data) { typeinfo->func_data = xmalloc(0x100); typeinfo->func_data_allocated = 0x100; typeinfo->func_data[0] = 0; } if(typeinfo->func_data[0] + typedata_size + sizeof(int) > typeinfo->func_data_allocated) { typeinfo->func_data_allocated = max(typeinfo->func_data_allocated * 2, typeinfo->func_data[0] + typedata_size + sizeof(int)); typeinfo->func_data = xrealloc(typeinfo->func_data, typeinfo->func_data_allocated); } offset = typeinfo->func_data[0]; typeinfo->func_data[0] += typedata_size; typedata = typeinfo->func_data + (offset >> 2) + 1; /* find func with the same name - if it exists use its id */ for(i = 0; i < (typeinfo->typeinfo->cElement & 0xffff); i++) { if(name_offset == typeinfo->func_names[i]) { id = typeinfo->func_indices[i]; break; } } /* find the first func with the same id and link via the hiword of typedata[4] */ next_idx = index; for(i = 0; i < (typeinfo->typeinfo->cElement & 0xffff); i++) { if(id == typeinfo->func_indices[i]) { next_idx = typeinfo->func_data[(typeinfo->func_offsets[i] >> 2) + 1 + 4] >> 16; typeinfo->func_data[(typeinfo->func_offsets[i] >> 2) + 1 + 4] &= 0xffff; typeinfo->func_data[(typeinfo->func_offsets[i] >> 2) + 1 + 4] |= (index << 16); break; } } /* fill out the basic type information */ typedata[0] = typedata_size | (index << 16); encode_var(typeinfo->typelib, type_function_get_rettype(func->type), func, &typedata[1], &decoded_size); typedata[2] = funcflags; typedata[3] = ((52 /*sizeof(FUNCDESC)*/ + decoded_size) << 16) | typeinfo->typeinfo->cbSizeVft; typedata[4] = (next_idx << 16) | (callconv << 8) | (invokekind << 3) | funckind; if(num_defaults) typedata[4] |= 0x1000; if(entry_is_ord) typedata[4] |= 0x2000; typedata[5] = (num_optional << 16) | num_params; /* NOTE: High word of typedata[3] is total size of FUNCDESC + size of all ELEMDESCs for params + TYPEDESCs for pointer params and return types. */ /* That is, total memory allocation required to reconstitute the FUNCDESC in its entirety. */ typedata[3] += (16 /*sizeof(ELEMDESC)*/ * num_params) << 16; typedata[3] += (24 /*sizeof(PARAMDESCEX)*/ * num_defaults) << 16; switch(extra_attr) { case 6: typedata[11] = help_string_context; case 5: typedata[10] = -1; case 4: typedata[9] = -1; case 3: typedata[8] = entry; case 2: typedata[7] = help_string_offset; case 1: typedata[6] = help_context; case 0: break; default: warning("unknown number of optional attrs\n"); } if (type_get_function_args(func->type)) { i = 0; LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), var_t, entry ) { int paramflags = 0; int *paramdata = typedata + 6 + extra_attr + (num_defaults ? num_params : 0) + i * 3; int *defaultdata = num_defaults ? typedata + 6 + extra_attr + i : NULL; if(defaultdata) *defaultdata = -1; encode_var(typeinfo->typelib, arg->type, arg, paramdata, &decoded_size); if (arg->attrs) LIST_FOR_EACH_ENTRY( attr, arg->attrs, const attr_t, entry ) { switch(attr->type) { case ATTR_DEFAULTVALUE: { paramflags |= 0x30; /* PARAMFLAG_FHASDEFAULT | PARAMFLAG_FOPT */ write_default_value(typeinfo->typelib, arg->type, (expr_t *)attr->u.pval, defaultdata); break; } case ATTR_IN: paramflags |= 0x01; /* PARAMFLAG_FIN */ break; case ATTR_OPTIONAL: paramflags |= 0x10; /* PARAMFLAG_FOPT */ break; case ATTR_OUT: paramflags |= 0x02; /* PARAMFLAG_FOUT */ break; case ATTR_PARAMLCID: paramflags |= 0x04; /* PARAMFLAG_LCID */ lcid_retval_count++; break; case ATTR_RETVAL: paramflags |= 0x08; /* PARAMFLAG_FRETVAL */ lcid_retval_count++; break; default: chat("unhandled param attr %d\n", attr->type); break; } } paramdata[1] = -1; paramdata[2] = paramflags; typedata[3] += decoded_size << 16; i++; } } if(lcid_retval_count == 1) typedata[4] |= 0x4000; else if(lcid_retval_count == 2) typedata[4] |= 0x8000; if(typeinfo->funcs_allocated == 0) { typeinfo->funcs_allocated = 10; typeinfo->func_indices = xmalloc(typeinfo->funcs_allocated * sizeof(int)); typeinfo->func_names = xmalloc(typeinfo->funcs_allocated * sizeof(int)); typeinfo->func_offsets = xmalloc(typeinfo->funcs_allocated * sizeof(int)); } if(typeinfo->funcs_allocated == (typeinfo->typeinfo->cElement & 0xffff)) { typeinfo->funcs_allocated *= 2; typeinfo->func_indices = xrealloc(typeinfo->func_indices, typeinfo->funcs_allocated * sizeof(int)); typeinfo->func_names = xrealloc(typeinfo->func_names, typeinfo->funcs_allocated * sizeof(int)); typeinfo->func_offsets = xrealloc(typeinfo->func_offsets, typeinfo->funcs_allocated * sizeof(int)); } /* update the index data */ typeinfo->func_indices[typeinfo->typeinfo->cElement & 0xffff] = id; typeinfo->func_offsets[typeinfo->typeinfo->cElement & 0xffff] = offset; typeinfo->func_names[typeinfo->typeinfo->cElement & 0xffff] = name_offset; /* ??? */ if (!typeinfo->typeinfo->res2) typeinfo->typeinfo->res2 = 0x20; typeinfo->typeinfo->res2 <<= 1; /* ??? */ if (index < 2) typeinfo->typeinfo->res2 += num_params << 4; if (typeinfo->typeinfo->res3 == -1) typeinfo->typeinfo->res3 = 0; typeinfo->typeinfo->res3 += 0x38 + num_params * 0x10; if(num_defaults) typeinfo->typeinfo->res3 += num_params * 0x4; /* adjust size of VTBL */ if(funckind != 0x3 /* FUNC_STATIC */) typeinfo->typeinfo->cbSizeVft += pointer_size; /* Increment the number of function elements */ typeinfo->typeinfo->cElement += 1; namedata = typeinfo->typelib->typelib_segment_data[MSFT_SEG_NAME] + name_offset; if (*((INT *)namedata) == -1) { *((INT *)namedata) = typeinfo->typelib->typelib_typeinfo_offsets[typeinfo->typeinfo->typekind >> 16]; if(typeinfo->typekind == TKIND_MODULE) namedata[9] |= 0x10; } else namedata[9] &= ~0x10; if(typeinfo->typekind == TKIND_MODULE) namedata[9] |= 0x20; if (type_get_function_args(func->type)) { i = 0; LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), var_t, entry ) { /* don't give the last arg of a [propput*] func a name */ if(i != num_params - 1 || (invokekind != 0x4 /* INVOKE_PROPERTYPUT */ && invokekind != 0x8 /* INVOKE_PROPERTYPUTREF */)) { int *paramdata = typedata + 6 + extra_attr + (num_defaults ? num_params : 0) + i * 3; offset = ctl2_alloc_name(typeinfo->typelib, arg->name); paramdata[1] = offset; } i++; } } return S_OK; } static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var) { int offset, id; unsigned int typedata_size; INT *typedata; unsigned int var_datawidth, var_alignment = 0; int var_type_size, var_kind = 0 /* VAR_PERINSTANCE */; int alignment; int varflags = 0; const attr_t *attr; unsigned char *namedata; int var_num = (typeinfo->typeinfo->cElement >> 16) & 0xffff; chat("add_var_desc(%d, %s)\n", index, var->name); id = 0x40000000 + index; if (var->attrs) LIST_FOR_EACH_ENTRY( attr, var->attrs, const attr_t, entry ) { expr_t *expr = attr->u.pval; switch(attr->type) { case ATTR_BINDABLE: varflags |= 0x04; /* VARFLAG_FBINDABLE */ break; case ATTR_DEFAULTBIND: varflags |= 0x20; /* VARFLAG_FDEFAULTBIND */ break; case ATTR_DEFAULTCOLLELEM: varflags |= 0x100; /* VARFLAG_FDEFAULTCOLLELEM */ break; case ATTR_DISPLAYBIND: varflags |= 0x10; /* VARFLAG_FDISPLAYBIND */ break; case ATTR_HIDDEN: varflags |= 0x40; /* VARFLAG_FHIDDEN */ break; case ATTR_ID: id = expr->cval; break; case ATTR_IMMEDIATEBIND: varflags |= 0x1000; /* VARFLAG_FIMMEDIATEBIND */ break; case ATTR_NONBROWSABLE: varflags |= 0x400; /* VARFLAG_FNONBROWSABLE */ break; case ATTR_READONLY: varflags |= 0x01; /* VARFLAG_FREADONLY */ break; /* FIXME: VARFLAG_FREPLACEABLE */ case ATTR_REQUESTEDIT: varflags |= 0x08; /* VARFLAG_FREQUESTEDIT */ break; case ATTR_RESTRICTED: varflags |= 0x80; /* VARFLAG_FRESTRICTED */ break; case ATTR_SOURCE: varflags |= 0x02; /* VARFLAG_FSOURCE */ break; case ATTR_UIDEFAULT: varflags |= 0x0200; /* VARFLAG_FUIDEFAULT */ break; default: break; } } /* allocate type data space for us */ typedata_size = 0x14; if (!typeinfo->var_data) { typeinfo->var_data = xmalloc(0x100); typeinfo->var_data_allocated = 0x100; typeinfo->var_data[0] = 0; } if(typeinfo->var_data[0] + typedata_size + sizeof(int) > typeinfo->var_data_allocated) { typeinfo->var_data_allocated = max(typeinfo->var_data_allocated * 2, typeinfo->var_data[0] + typedata_size + sizeof(int)); typeinfo->var_data = xrealloc(typeinfo->var_data, typeinfo->var_data_allocated); } offset = typeinfo->var_data[0]; typeinfo->var_data[0] += typedata_size; typedata = typeinfo->var_data + (offset >> 2) + 1; /* fill out the basic type information */ typedata[0] = typedata_size | (index << 16); typedata[2] = varflags; typedata[3] = (36 /*sizeof(VARDESC)*/ << 16) | 0; if(typeinfo->vars_allocated == 0) { typeinfo->vars_allocated = 10; typeinfo->var_indices = xmalloc(typeinfo->vars_allocated * sizeof(int)); typeinfo->var_names = xmalloc(typeinfo->vars_allocated * sizeof(int)); typeinfo->var_offsets = xmalloc(typeinfo->vars_allocated * sizeof(int)); } if(typeinfo->vars_allocated == var_num) { typeinfo->vars_allocated *= 2; typeinfo->var_indices = xrealloc(typeinfo->var_indices, typeinfo->vars_allocated * sizeof(int)); typeinfo->var_names = xrealloc(typeinfo->var_names, typeinfo->vars_allocated * sizeof(int)); typeinfo->var_offsets = xrealloc(typeinfo->var_offsets, typeinfo->vars_allocated * sizeof(int)); } /* update the index data */ typeinfo->var_indices[var_num] = id; typeinfo->var_names[var_num] = -1; typeinfo->var_offsets[var_num] = offset; /* figure out type widths and whatnot */ var_datawidth = type_memsize_and_alignment(var->type, &var_alignment); encode_var(typeinfo->typelib, var->type, var, &typedata[1], &var_type_size); /* pad out starting position to data width */ typeinfo->datawidth += var_alignment - 1; typeinfo->datawidth &= ~(var_alignment - 1); switch(typeinfo->typekind) { case TKIND_ENUM: write_int_value(typeinfo->typelib, &typedata[4], VT_I4, var->eval->cval); var_kind = 2; /* VAR_CONST */ var_type_size += 16; /* sizeof(VARIANT) */ typeinfo->datawidth = var_datawidth; break; case TKIND_RECORD: typedata[4] = typeinfo->datawidth; typeinfo->datawidth += var_datawidth; break; case TKIND_UNION: typedata[4] = typeinfo->datawidth; typeinfo->datawidth = max(typeinfo->datawidth, var_datawidth); break; case TKIND_DISPATCH: var_kind = 3; /* VAR_DISPATCH */ typeinfo->datawidth = pointer_size; break; default: error("add_var_desc: unhandled type kind %d\n", typeinfo->typekind); break; } /* add type description size to total required allocation */ typedata[3] += var_type_size << 16 | var_kind; /* fix type alignment */ alignment = (typeinfo->typeinfo->typekind >> 11) & 0x1f; if (alignment < var_alignment) { alignment = var_alignment; typeinfo->typeinfo->typekind &= ~0xffc0; typeinfo->typeinfo->typekind |= alignment << 11 | alignment << 6; } /* ??? */ if (!typeinfo->typeinfo->res2) typeinfo->typeinfo->res2 = 0x1a; if ((index == 0) || (index == 1) || (index == 2) || (index == 4) || (index == 9)) { typeinfo->typeinfo->res2 <<= 1; } /* ??? */ if (typeinfo->typeinfo->res3 == -1) typeinfo->typeinfo->res3 = 0; typeinfo->typeinfo->res3 += 0x2c; /* increment the number of variable elements */ typeinfo->typeinfo->cElement += 0x10000; /* pad data width to alignment */ typeinfo->typeinfo->size = (typeinfo->datawidth + (alignment - 1)) & ~(alignment - 1); offset = ctl2_alloc_name(typeinfo->typelib, var->name); if (offset == -1) return E_OUTOFMEMORY; namedata = typeinfo->typelib->typelib_segment_data[MSFT_SEG_NAME] + offset; if (*((INT *)namedata) == -1) { *((INT *)namedata) = typeinfo->typelib->typelib_typeinfo_offsets[typeinfo->typeinfo->typekind >> 16]; if(typeinfo->typekind != TKIND_DISPATCH) namedata[9] |= 0x10; } else namedata[9] &= ~0x10; if (typeinfo->typekind == TKIND_ENUM) { namedata[9] |= 0x20; } typeinfo->var_names[var_num] = offset; return S_OK; } static HRESULT add_impl_type(msft_typeinfo_t *typeinfo, type_t *ref, importinfo_t *importinfo) { if(importinfo) { alloc_importinfo(typeinfo->typelib, importinfo); typeinfo->typeinfo->datatype1 = importinfo->offset+1; }else { if(ref->typelib_idx == -1) add_interface_typeinfo(typeinfo->typelib, ref); if(ref->typelib_idx == -1) error("add_impl_type: unable to add inherited interface\n"); typeinfo->typeinfo->datatype1 = typeinfo->typelib->typelib_typeinfo_offsets[ref->typelib_idx]; } typeinfo->typeinfo->cImplTypes++; return S_OK; } static msft_typeinfo_t *create_msft_typeinfo(msft_typelib_t *typelib, enum type_kind kind, const char *name, const attr_list_t *attrs) { const attr_t *attr; msft_typeinfo_t *msft_typeinfo; int nameoffset; int typeinfo_offset; MSFT_TypeInfoBase *typeinfo; MSFT_GuidEntry guidentry; chat("create_msft_typeinfo: name %s kind %d index %d\n", name, kind, typelib->typelib_header.nrtypeinfos); msft_typeinfo = xmalloc(sizeof(*msft_typeinfo)); memset( msft_typeinfo, 0, sizeof(*msft_typeinfo) ); msft_typeinfo->typelib = typelib; nameoffset = ctl2_alloc_name(typelib, name); typeinfo_offset = ctl2_alloc_typeinfo(typelib, nameoffset); typeinfo = (MSFT_TypeInfoBase *)&typelib->typelib_segment_data[MSFT_SEG_TYPEINFO][typeinfo_offset]; typelib->typelib_segment_data[MSFT_SEG_NAME][nameoffset + 9] = 0x38; *((int *)&typelib->typelib_segment_data[MSFT_SEG_NAME][nameoffset]) = typeinfo_offset; msft_typeinfo->typekind = kind; msft_typeinfo->typeinfo = typeinfo; typeinfo->typekind |= kind | 0x20; if(kind == TKIND_COCLASS) typeinfo->flags |= 0x2; /* TYPEFLAG_FCANCREATE */ if (attrs) LIST_FOR_EACH_ENTRY( attr, attrs, const attr_t, entry ) { switch(attr->type) { case ATTR_AGGREGATABLE: if (kind == TKIND_COCLASS) typeinfo->flags |= 0x400; /* TYPEFLAG_FAGGREGATABLE */ break; case ATTR_APPOBJECT: if (kind == TKIND_COCLASS) typeinfo->flags |= 0x1; /* TYPEFLAG_FAPPOBJECT */ break; case ATTR_CONTROL: if (kind == TKIND_COCLASS) typeinfo->flags |= 0x20; /* TYPEFLAG_FCONTROL */ break; case ATTR_DLLNAME: { int offset = ctl2_alloc_string(typelib, attr->u.pval); typeinfo->datatype1 = offset; break; } case ATTR_DUAL: /* FIXME: check interface is compatible */ typeinfo->typekind = (typeinfo->typekind & ~0xff) | 0x34; typeinfo->flags |= 0x140; /* TYPEFLAG_FDUAL | TYPEFLAG_FOLEAUTOMATION */ break; case ATTR_HELPCONTEXT: { expr_t *expr = (expr_t*)attr->u.pval; typeinfo->helpcontext = expr->cval; break; } case ATTR_HELPSTRING: { int offset = ctl2_alloc_string(typelib, attr->u.pval); if (offset == -1) break; typeinfo->docstringoffs = offset; break; } case ATTR_HELPSTRINGCONTEXT: { expr_t *expr = (expr_t*)attr->u.pval; typeinfo->helpstringcontext = expr->cval; break; } case ATTR_HIDDEN: typeinfo->flags |= 0x10; /* TYPEFLAG_FHIDDEN */ break; case ATTR_LICENSED: typeinfo->flags |= 0x04; /* TYPEFLAG_FLICENSED */ break; case ATTR_NONCREATABLE: typeinfo->flags &= ~0x2; /* TYPEFLAG_FCANCREATE */ break; case ATTR_NONEXTENSIBLE: typeinfo->flags |= 0x80; /* TYPEFLAG_FNONEXTENSIBLE */ break; case ATTR_OLEAUTOMATION: typeinfo->flags |= 0x100; /* TYPEFLAG_FOLEAUTOMATION */ break; /* FIXME: TYPEFLAG_FPREDCLID */ case ATTR_PROXY: typeinfo->flags |= 0x4000; /* TYPEFLAG_FPROXY */ break; /* FIXME: TYPEFLAG_FREPLACEABLE */ case ATTR_RESTRICTED: typeinfo->flags |= 0x200; /* TYPEFLAG_FRESTRICTED */ break; case ATTR_UUID: guidentry.guid = *(GUID*)attr->u.pval; guidentry.hreftype = typelib->typelib_typeinfo_offsets[typeinfo->typekind >> 16]; guidentry.next_hash = -1; typeinfo->posguid = ctl2_alloc_guid(typelib, &guidentry); #if 0 if (IsEqualIID(guid, &IID_IDispatch)) { typelib->typelib_header.dispatchpos = typelib->typelib_typeinfo_offsets[typeinfo->typekind >> 16]; } #endif break; case ATTR_VERSION: typeinfo->version = attr->u.ival; break; default: break; } } if (typelib->last_typeinfo) typelib->last_typeinfo->next_typeinfo = msft_typeinfo; typelib->last_typeinfo = msft_typeinfo; if (!typelib->typeinfos) typelib->typeinfos = msft_typeinfo; return msft_typeinfo; } static void add_dispatch(msft_typelib_t *typelib) { int guid_offset, impfile_offset, hash_key; MSFT_GuidEntry guidentry; MSFT_ImpInfo impinfo; GUID stdole = {0x00020430,0x0000,0x0000,{0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}}; GUID iid_idispatch = {0x00020400,0x0000,0x0000,{0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}}; if(typelib->typelib_header.dispatchpos != -1) return; guidentry.guid = stdole; guidentry.hreftype = 2; guidentry.next_hash = -1; hash_key = ctl2_hash_guid(&guidentry.guid); guid_offset = ctl2_find_guid(typelib, hash_key, &guidentry.guid); if (guid_offset == -1) guid_offset = ctl2_alloc_guid(typelib, &guidentry); impfile_offset = alloc_importfile(typelib, guid_offset, 2, 0, "stdole2.tlb"); guidentry.guid = iid_idispatch; guidentry.hreftype = 1; guidentry.next_hash = -1; impinfo.flags = TKIND_INTERFACE << 24 | MSFT_IMPINFO_OFFSET_IS_GUID; impinfo.oImpFile = impfile_offset; hash_key = ctl2_hash_guid(&guidentry.guid); guid_offset = ctl2_find_guid(typelib, hash_key, &guidentry.guid); if (guid_offset == -1) guid_offset = ctl2_alloc_guid(typelib, &guidentry); impinfo.oGuid = guid_offset; typelib->typelib_header.dispatchpos = alloc_msft_importinfo(typelib, &impinfo) | 0x01; } static void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinterface) { int num_parents = 0, num_funcs = 0; importinfo_t *importinfo = NULL; const statement_t *stmt_func; type_t *inherit, *ref; int idx = 0; var_t *func; var_t *var; msft_typeinfo_t *msft_typeinfo; if (-1 < dispinterface->typelib_idx) return; inherit = type_dispiface_get_inherit(dispinterface); if (inherit) { importinfo = find_importinfo(typelib, inherit->name); if (!importinfo && type_iface_get_inherit(inherit) && inherit->typelib_idx == -1) add_interface_typeinfo(typelib, inherit); } /* check typelib_idx again, it could have been added while resolving the parent interface */ if (-1 < dispinterface->typelib_idx) return; dispinterface->typelib_idx = typelib->typelib_header.nrtypeinfos; msft_typeinfo = create_msft_typeinfo(typelib, TKIND_DISPATCH, dispinterface->name, dispinterface->attrs); msft_typeinfo->typeinfo->size = pointer_size; msft_typeinfo->typeinfo->typekind |= pointer_size << 11 | pointer_size << 6; msft_typeinfo->typeinfo->flags |= 0x1000; /* TYPEFLAG_FDISPATCHABLE */ add_dispatch(typelib); if (inherit) { add_impl_type(msft_typeinfo, inherit, importinfo); msft_typeinfo->typeinfo->typekind |= 0x10; } /* count the number of inherited interfaces and non-local functions */ for (ref = inherit; ref; ref = type_iface_get_inherit(ref)) { num_parents++; STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(ref) ) { var_t *func = stmt_func->u.var; if (!is_local(func->attrs)) num_funcs++; } } msft_typeinfo->typeinfo->datatype2 = num_funcs << 16 | num_parents; msft_typeinfo->typeinfo->cbSizeVft = num_funcs * pointer_size; msft_typeinfo->typeinfo->cImplTypes = 1; /* IDispatch */ /* count the no of methods, as the variable indices come after the funcs */ if (dispinterface->details.iface->disp_methods) LIST_FOR_EACH_ENTRY( func, dispinterface->details.iface->disp_methods, var_t, entry ) idx++; if (type_dispiface_get_props(dispinterface)) LIST_FOR_EACH_ENTRY( var, type_dispiface_get_props(dispinterface), var_t, entry ) add_var_desc(msft_typeinfo, idx++, var); if (type_dispiface_get_methods(dispinterface)) { idx = 0; LIST_FOR_EACH_ENTRY( func, type_dispiface_get_methods(dispinterface), var_t, entry ) if(add_func_desc(msft_typeinfo, func, idx) == S_OK) idx++; } } static void add_interface_typeinfo(msft_typelib_t *typelib, type_t *interface) { int idx = 0; const statement_t *stmt_func; type_t *ref; msft_typeinfo_t *msft_typeinfo; importinfo_t *ref_importinfo = NULL; int num_parents = 0, num_funcs = 0; type_t *inherit; const type_t *derived; if (-1 < interface->typelib_idx) return; if (!interface->details.iface) { error( "interface %s is referenced but not defined\n", interface->name ); return; } if (is_attr(interface->attrs, ATTR_DISPINTERFACE)) { add_dispinterface_typeinfo(typelib, interface); return; } /* midl adds the parent interface first, unless the parent itself has no parent (i.e. it stops before IUnknown). */ inherit = type_iface_get_inherit(interface); if(inherit) { ref_importinfo = find_importinfo(typelib, inherit->name); if(!ref_importinfo && type_iface_get_inherit(inherit) && inherit->typelib_idx == -1) add_interface_typeinfo(typelib, inherit); } /* check typelib_idx again, it could have been added while resolving the parent interface */ if (-1 < interface->typelib_idx) return; interface->typelib_idx = typelib->typelib_header.nrtypeinfos; msft_typeinfo = create_msft_typeinfo(typelib, TKIND_INTERFACE, interface->name, interface->attrs); msft_typeinfo->typeinfo->size = pointer_size; msft_typeinfo->typeinfo->typekind |= 0x0200; msft_typeinfo->typeinfo->typekind |= pointer_size << 11; for (derived = inherit; derived; derived = type_iface_get_inherit(derived)) if (derived->name && !strcmp(derived->name, "IDispatch")) msft_typeinfo->typeinfo->flags |= 0x1000; /* TYPEFLAG_FDISPATCHABLE */ if(type_iface_get_inherit(interface)) add_impl_type(msft_typeinfo, type_iface_get_inherit(interface), ref_importinfo); /* count the number of inherited interfaces and non-local functions */ for(ref = inherit; ref; ref = type_iface_get_inherit(ref)) { num_parents++; STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(ref) ) { var_t *func = stmt_func->u.var; if (!is_local(func->attrs)) num_funcs++; } } msft_typeinfo->typeinfo->datatype2 = num_funcs << 16 | num_parents; msft_typeinfo->typeinfo->cbSizeVft = num_funcs * pointer_size; STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(interface) ) { var_t *func = stmt_func->u.var; if(add_func_desc(msft_typeinfo, func, idx) == S_OK) idx++; } } static void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure) { int idx = 0; var_t *cur; msft_typeinfo_t *msft_typeinfo; if (-1 < structure->typelib_idx) return; structure->typelib_idx = typelib->typelib_header.nrtypeinfos; msft_typeinfo = create_msft_typeinfo(typelib, TKIND_RECORD, structure->name, structure->attrs); msft_typeinfo->typeinfo->size = 0; if (type_struct_get_fields(structure)) LIST_FOR_EACH_ENTRY( cur, type_struct_get_fields(structure), var_t, entry ) add_var_desc(msft_typeinfo, idx++, cur); } static void add_enum_typeinfo(msft_typelib_t *typelib, type_t *enumeration) { int idx = 0; var_t *cur; msft_typeinfo_t *msft_typeinfo; if (-1 < enumeration->typelib_idx) return; enumeration->typelib_idx = typelib->typelib_header.nrtypeinfos; msft_typeinfo = create_msft_typeinfo(typelib, TKIND_ENUM, enumeration->name, enumeration->attrs); msft_typeinfo->typeinfo->size = 0; if (type_enum_get_values(enumeration)) LIST_FOR_EACH_ENTRY( cur, type_enum_get_values(enumeration), var_t, entry ) add_var_desc(msft_typeinfo, idx++, cur); } static void add_union_typeinfo(msft_typelib_t *typelib, type_t *tunion) { int idx = 0; var_t *cur; msft_typeinfo_t *msft_typeinfo; if (-1 < tunion->typelib_idx) return; tunion->typelib_idx = typelib->typelib_header.nrtypeinfos; msft_typeinfo = create_msft_typeinfo(typelib, TKIND_UNION, tunion->name, tunion->attrs); msft_typeinfo->typeinfo->size = 0; if (type_union_get_cases(tunion)) LIST_FOR_EACH_ENTRY(cur, type_union_get_cases(tunion), var_t, entry) add_var_desc(msft_typeinfo, idx++, cur); } static void add_typedef_typeinfo(msft_typelib_t *typelib, type_t *tdef) { msft_typeinfo_t *msft_typeinfo = NULL; int datatype1, datatype2, duplicate = 0; unsigned int size, alignment = 0; type_t *type; if (-1 < tdef->typelib_idx) return; type = type_alias_get_aliasee(tdef); if (!type->name || strcmp(tdef->name, type->name) != 0) { tdef->typelib_idx = typelib->typelib_header.nrtypeinfos; msft_typeinfo = create_msft_typeinfo(typelib, TKIND_ALIAS, tdef->name, tdef->attrs); } else duplicate = 1; encode_type(typelib, get_type_vt(type), type, &datatype1, &datatype2); size = type_memsize_and_alignment(type, &alignment); if (msft_typeinfo) { msft_typeinfo->typeinfo->datatype1 = datatype1; msft_typeinfo->typeinfo->size = size; msft_typeinfo->typeinfo->datatype2 = datatype2; msft_typeinfo->typeinfo->typekind |= (alignment << 11 | alignment << 6); } /* avoid adding duplicate type definitions */ if (duplicate) tdef->typelib_idx = type->typelib_idx; } static void add_coclass_typeinfo(msft_typelib_t *typelib, type_t *cls) { msft_typeinfo_t *msft_typeinfo; ifref_t *iref; int num_ifaces = 0, offset, i; MSFT_RefRecord *ref, *first = NULL, *first_source = NULL; int have_default = 0, have_default_source = 0; const attr_t *attr; ifref_list_t *ifaces; if (-1 < cls->typelib_idx) return; cls->typelib_idx = typelib->typelib_header.nrtypeinfos; msft_typeinfo = create_msft_typeinfo(typelib, TKIND_COCLASS, cls->name, cls->attrs); ifaces = type_coclass_get_ifaces(cls); if (ifaces) LIST_FOR_EACH_ENTRY( iref, ifaces, ifref_t, entry ) num_ifaces++; offset = msft_typeinfo->typeinfo->datatype1 = ctl2_alloc_segment(typelib, MSFT_SEG_REFERENCES, num_ifaces * sizeof(*ref), 0); i = 0; if (ifaces) LIST_FOR_EACH_ENTRY( iref, ifaces, ifref_t, entry ) { if(iref->iface->typelib_idx == -1) add_interface_typeinfo(typelib, iref->iface); ref = (MSFT_RefRecord*) (typelib->typelib_segment_data[MSFT_SEG_REFERENCES] + offset + i * sizeof(*ref)); ref->reftype = typelib->typelib_typeinfo_offsets[iref->iface->typelib_idx]; ref->flags = 0; ref->oCustData = -1; ref->onext = -1; if(i < num_ifaces - 1) ref->onext = offset + (i + 1) * sizeof(*ref); if (iref->attrs) LIST_FOR_EACH_ENTRY( attr, iref->attrs, const attr_t, entry ) { switch(attr->type) { case ATTR_DEFAULT: ref->flags |= 0x1; /* IMPLTYPEFLAG_FDEFAULT */ break; case ATTR_DEFAULTVTABLE: ref->flags |= 0x8; /* IMPLTYPEFLAG_FDEFAULTVTABLE */ break; case ATTR_RESTRICTED: ref->flags |= 0x4; /* IMPLTYPEFLAG_FRESTRICTED */ break; case ATTR_SOURCE: ref->flags |= 0x2; /* IMPLTYPEFLAG_FSOURCE */ break; default: warning("add_coclass_typeinfo: unhandled attr %d\n", attr->type); } } if(ref->flags & 0x1) { /* IMPLTYPEFLAG_FDEFAULT */ if(ref->flags & 0x2) /* IMPLTYPEFLAG_SOURCE */ have_default_source = 1; else have_default = 1; } /* If the interface is non-restricted and we haven't already had one then remember it so that we can use it as a default later */ if((ref->flags & 0x4) == 0) { /* IMPLTYPEFLAG_FRESTRICTED */ if(ref->flags & 0x2) { /* IMPLTYPEFLAG_FSOURCE */ if(!first_source) first_source = ref; } else if(!first) first = ref; } i++; } /* If we haven't had a default interface, then set the default flags on the first ones */ if(!have_default && first) first->flags |= 0x1; if(!have_default_source && first_source) first_source->flags |= 0x1; msft_typeinfo->typeinfo->cImplTypes = num_ifaces; msft_typeinfo->typeinfo->size = pointer_size; msft_typeinfo->typeinfo->typekind |= 0x2200; } static void add_module_typeinfo(msft_typelib_t *typelib, type_t *module) { int idx = 0; const statement_t *stmt; msft_typeinfo_t *msft_typeinfo; if (-1 < module->typelib_idx) return; module->typelib_idx = typelib->typelib_header.nrtypeinfos; msft_typeinfo = create_msft_typeinfo(typelib, TKIND_MODULE, module->name, module->attrs); msft_typeinfo->typeinfo->typekind |= 0x0a00; STATEMENTS_FOR_EACH_FUNC( stmt, module->details.module->stmts ) { var_t *func = stmt->u.var; if(add_func_desc(msft_typeinfo, func, idx) == S_OK) idx++; } msft_typeinfo->typeinfo->size = idx; } static void add_type_typeinfo(msft_typelib_t *typelib, type_t *type) { switch (type_get_type(type)) { case TYPE_INTERFACE: add_interface_typeinfo(typelib, type); break; case TYPE_STRUCT: add_structure_typeinfo(typelib, type); break; case TYPE_ENUM: add_enum_typeinfo(typelib, type); break; case TYPE_UNION: add_union_typeinfo(typelib, type); break; case TYPE_COCLASS: add_coclass_typeinfo(typelib, type); break; case TYPE_BASIC: case TYPE_POINTER: break; default: error("add_entry: unhandled type 0x%x for %s\n", type_get_type(type), type->name); break; } } static void add_entry(msft_typelib_t *typelib, const statement_t *stmt) { switch(stmt->type) { case STMT_LIBRARY: case STMT_IMPORT: case STMT_PRAGMA: case STMT_CPPQUOTE: case STMT_DECLARATION: /* not included in typelib */ break; case STMT_IMPORTLIB: /* not processed here */ break; case STMT_TYPEDEF: { const type_list_t *type_entry = stmt->u.type_list; for (; type_entry; type_entry = type_entry->next) { /* if the type is public then add the typedef, otherwise attempt * to add the aliased type */ if (is_attr(type_entry->type->attrs, ATTR_PUBLIC)) add_typedef_typeinfo(typelib, type_entry->type); else add_type_typeinfo(typelib, type_alias_get_aliasee(type_entry->type)); } break; } case STMT_MODULE: add_module_typeinfo(typelib, stmt->u.type); break; case STMT_TYPE: case STMT_TYPEREF: { type_t *type = stmt->u.type; add_type_typeinfo(typelib, type); break; } } } static void set_name(msft_typelib_t *typelib) { int offset; offset = ctl2_alloc_name(typelib, typelib->typelib->name); if (offset == -1) return; typelib->typelib_header.NameOffset = offset; return; } static void set_version(msft_typelib_t *typelib) { typelib->typelib_header.version = get_attrv( typelib->typelib->attrs, ATTR_VERSION ); } static void set_guid(msft_typelib_t *typelib) { MSFT_GuidEntry guidentry; int offset; void *ptr; GUID guid = {0,0,0,{0,0,0,0,0,0}}; guidentry.guid = guid; guidentry.hreftype = -2; guidentry.next_hash = -1; ptr = get_attrp( typelib->typelib->attrs, ATTR_UUID ); if (ptr) guidentry.guid = *(GUID *)ptr; offset = ctl2_alloc_guid(typelib, &guidentry); typelib->typelib_header.posguid = offset; return; } static void set_doc_string(msft_typelib_t *typelib) { char *str = get_attrp( typelib->typelib->attrs, ATTR_HELPSTRING ); if (str) { int offset = ctl2_alloc_string(typelib, str); if (offset != -1) typelib->typelib_header.helpstring = offset; } } static void set_help_file_name(msft_typelib_t *typelib) { char *str = get_attrp( typelib->typelib->attrs, ATTR_HELPFILE ); if (str) { int offset = ctl2_alloc_string(typelib, str); if (offset != -1) { typelib->typelib_header.helpfile = offset; typelib->typelib_header.varflags |= 0x10; } } } static void set_help_context(msft_typelib_t *typelib) { const expr_t *expr = get_attrp( typelib->typelib->attrs, ATTR_HELPCONTEXT ); if (expr) typelib->typelib_header.helpcontext = expr->cval; } static void set_help_string_dll(msft_typelib_t *typelib) { char *str = get_attrp( typelib->typelib->attrs, ATTR_HELPSTRINGDLL ); if (str) { int offset = ctl2_alloc_string(typelib, str); if (offset != -1) { typelib->help_string_dll_offset = offset; typelib->typelib_header.varflags |= 0x100; } } } static void set_help_string_context(msft_typelib_t *typelib) { const expr_t *expr = get_attrp( typelib->typelib->attrs, ATTR_HELPSTRINGCONTEXT ); if (expr) typelib->typelib_header.helpstringcontext = expr->cval; } static void set_lcid(msft_typelib_t *typelib) { const expr_t *lcid_expr = get_attrp( typelib->typelib->attrs, ATTR_LIBLCID ); if(lcid_expr) { typelib->typelib_header.lcid = lcid_expr->cval; typelib->typelib_header.lcid2 = lcid_expr->cval; } } static void set_lib_flags(msft_typelib_t *typelib) { const attr_t *attr; typelib->typelib_header.flags = 0; if (!typelib->typelib->attrs) return; LIST_FOR_EACH_ENTRY( attr, typelib->typelib->attrs, const attr_t, entry ) { switch(attr->type) { case ATTR_CONTROL: typelib->typelib_header.flags |= 0x02; /* LIBFLAG_FCONTROL */ break; case ATTR_HIDDEN: typelib->typelib_header.flags |= 0x04; /* LIBFLAG_FHIDDEN */ break; case ATTR_RESTRICTED: typelib->typelib_header.flags |= 0x01; /* LIBFLAG_FRESTRICTED */ break; default: break; } } return; } static void ctl2_write_segment(msft_typelib_t *typelib, int segment) { put_data(typelib->typelib_segment_data[segment], typelib->typelib_segdir[segment].length); } static void ctl2_finalize_typeinfos(msft_typelib_t *typelib, int filesize) { msft_typeinfo_t *typeinfo; for (typeinfo = typelib->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) { typeinfo->typeinfo->memoffset = filesize; if (typeinfo->func_data) filesize += typeinfo->func_data[0] + ((typeinfo->typeinfo->cElement & 0xffff) * 12); if (typeinfo->var_data) filesize += typeinfo->var_data[0] + (((typeinfo->typeinfo->cElement >> 16) & 0xffff) * 12); if (typeinfo->func_data || typeinfo->var_data) filesize += 4; } } static int ctl2_finalize_segment(msft_typelib_t *typelib, int filepos, int segment) { if (typelib->typelib_segdir[segment].length) { typelib->typelib_segdir[segment].offset = filepos; } else { typelib->typelib_segdir[segment].offset = -1; } return typelib->typelib_segdir[segment].length; } static void ctl2_write_typeinfos(msft_typelib_t *typelib) { msft_typeinfo_t *typeinfo; int typedata_size; for (typeinfo = typelib->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) { if (!typeinfo->func_data && !typeinfo->var_data) continue; typedata_size = 0; if (typeinfo->func_data) typedata_size = typeinfo->func_data[0]; if (typeinfo->var_data) typedata_size += typeinfo->var_data[0]; put_data(&typedata_size, sizeof(int)); if (typeinfo->func_data) put_data(typeinfo->func_data + 1, typeinfo->func_data[0]); if (typeinfo->var_data) put_data(typeinfo->var_data + 1, typeinfo->var_data[0]); if (typeinfo->func_indices) put_data(typeinfo->func_indices, (typeinfo->typeinfo->cElement & 0xffff) * 4); if (typeinfo->var_indices) put_data(typeinfo->var_indices, (typeinfo->typeinfo->cElement >> 16) * 4); if (typeinfo->func_names) put_data(typeinfo->func_names, (typeinfo->typeinfo->cElement & 0xffff) * 4); if (typeinfo->var_names) put_data(typeinfo->var_names, (typeinfo->typeinfo->cElement >> 16) * 4); if (typeinfo->func_offsets) put_data(typeinfo->func_offsets, (typeinfo->typeinfo->cElement & 0xffff) * 4); if (typeinfo->var_offsets) { int add = 0, i, offset; if(typeinfo->func_data) add = typeinfo->func_data[0]; for(i = 0; i < (typeinfo->typeinfo->cElement >> 16); i++) { offset = typeinfo->var_offsets[i]; offset += add; put_data(&offset, 4); } } } } static void save_all_changes(msft_typelib_t *typelib) { int filepos; chat("save_all_changes(%p)\n", typelib); filepos = sizeof(MSFT_Header) + sizeof(MSFT_SegDir); if(typelib->typelib_header.varflags & 0x100) filepos += 4; /* helpstringdll */ filepos += typelib->typelib_header.nrtypeinfos * 4; filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_TYPEINFO); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_GUIDHASH); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_GUID); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_REFERENCES); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_IMPORTINFO); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_IMPORTFILES); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_NAMEHASH); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_NAME); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_STRING); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_TYPEDESC); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_ARRAYDESC); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_CUSTDATA); filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_CUSTDATAGUID); ctl2_finalize_typeinfos(typelib, filepos); byte_swapped = 0; init_output_buffer(); put_data(&typelib->typelib_header, sizeof(typelib->typelib_header)); if(typelib->typelib_header.varflags & 0x100) put_data(&typelib->help_string_dll_offset, sizeof(typelib->help_string_dll_offset)); put_data(typelib->typelib_typeinfo_offsets, typelib->typelib_header.nrtypeinfos * 4); put_data(&typelib->typelib_segdir, sizeof(typelib->typelib_segdir)); ctl2_write_segment( typelib, MSFT_SEG_TYPEINFO ); ctl2_write_segment( typelib, MSFT_SEG_GUIDHASH ); ctl2_write_segment( typelib, MSFT_SEG_GUID ); ctl2_write_segment( typelib, MSFT_SEG_REFERENCES ); ctl2_write_segment( typelib, MSFT_SEG_IMPORTINFO ); ctl2_write_segment( typelib, MSFT_SEG_IMPORTFILES ); ctl2_write_segment( typelib, MSFT_SEG_NAMEHASH ); ctl2_write_segment( typelib, MSFT_SEG_NAME ); ctl2_write_segment( typelib, MSFT_SEG_STRING ); ctl2_write_segment( typelib, MSFT_SEG_TYPEDESC ); ctl2_write_segment( typelib, MSFT_SEG_ARRAYDESC ); ctl2_write_segment( typelib, MSFT_SEG_CUSTDATA ); ctl2_write_segment( typelib, MSFT_SEG_CUSTDATAGUID ); ctl2_write_typeinfos(typelib); if (strendswith( typelib_name, ".res" )) /* create a binary resource file */ { char typelib_id[13] = "#1"; expr_t *expr = get_attrp( typelib->typelib->attrs, ATTR_ID ); if (expr) sprintf( typelib_id, "#%d", expr->cval ); add_output_to_resources( "TYPELIB", typelib_id ); output_typelib_regscript( typelib->typelib ); flush_output_resources( typelib_name ); } else flush_output_buffer( typelib_name ); } int create_msft_typelib(typelib_t *typelib) { msft_typelib_t *msft; int failed = 0; const statement_t *stmt; time_t cur_time; char *time_override; unsigned int version = 7 << 24 | 555; /* 7.00.0555 */ GUID midl_time_guid = {0xde77ba63,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}}; GUID midl_version_guid = {0xde77ba64,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}}; GUID midl_info_guid = {0xde77ba65,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}}; char info_string[128]; pointer_size = (typelib_kind == SYS_WIN64) ? 8 : 4; msft = xmalloc(sizeof(*msft)); memset(msft, 0, sizeof(*msft)); msft->typelib = typelib; ctl2_init_header(msft); ctl2_init_segdir(msft); msft->typelib_header.varflags |= typelib_kind; /* * The following two calls return an offset or -1 if out of memory. We * specifically need an offset of 0, however, so... */ if (ctl2_alloc_segment(msft, MSFT_SEG_GUIDHASH, 0x80, 0x80)) { failed = 1; } if (ctl2_alloc_segment(msft, MSFT_SEG_NAMEHASH, 0x200, 0x200)) { failed = 1; } if(failed) { free(msft); return 0; } msft->typelib_guidhash_segment = (int *)msft->typelib_segment_data[MSFT_SEG_GUIDHASH]; msft->typelib_namehash_segment = (int *)msft->typelib_segment_data[MSFT_SEG_NAMEHASH]; memset(msft->typelib_guidhash_segment, 0xff, 0x80); memset(msft->typelib_namehash_segment, 0xff, 0x200); set_lib_flags(msft); set_lcid(msft); set_help_file_name(msft); set_doc_string(msft); set_guid(msft); set_version(msft); set_name(msft); set_help_context(msft); set_help_string_dll(msft); set_help_string_context(msft); /* midl adds two sets of custom data to the library: the current unix time and midl's version number */ time_override = getenv( "WIDL_TIME_OVERRIDE"); cur_time = time_override ? atol( time_override) : time(NULL); sprintf(info_string, "Created by WIDL version %s at %s\n", PACKAGE_VERSION, ctime(&cur_time)); set_custdata(msft, &midl_info_guid, VT_BSTR, info_string, &msft->typelib_header.CustomDataOffset); set_custdata(msft, &midl_time_guid, VT_UI4, &cur_time, &msft->typelib_header.CustomDataOffset); set_custdata(msft, &midl_version_guid, VT_UI4, &version, &msft->typelib_header.CustomDataOffset); if (typelib->stmts) LIST_FOR_EACH_ENTRY( stmt, typelib->stmts, const statement_t, entry ) add_entry(msft, stmt); save_all_changes(msft); free(msft); return 1; } ================================================ FILE: wifeman/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(wifeman SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/wifeman.def wifeman.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(wifeman.dll16 wifeman) target_link_libraries(wifeman libwine winecrt0 krnl386) set_target_properties(wifeman PROPERTIES SUFFIX ".dll16") ================================================ FILE: wifeman/Makefile.in ================================================ MODULE = wifeman.dll16 EXTRADLLFLAGS = -m16 ================================================ FILE: wifeman/wifeman.c ================================================ #include "wine/debug.h" #include "windef.h" #include "winbase.h" #include "wownt32.h" #include "wine/winuser16.h" WINE_DEFAULT_DEBUG_CHANNEL(wifeman); /* End-User-Defined and Private Use Area Characters(O) This API seems to work only in Japanese Windows. Japanese, Simplified Chinese, Korean, Traditional Chinese, (Unicode) */ WORD WINAPI MiscGetEUDCLeadByteRange16(WORD charaset /* 128: SHIFTJIS_CHARSET? */) { /* HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\NLS\CodePage\EUDCCodeRange */ if (charaset != SHIFTJIS_CHARSET) FIXME("MiscGetEUDCLeadByteRange(%d)\n", charaset); /* LOBYTE: begin HIBYTE: end */ return MAKEWORD(0xF0, 0xF9); } BOOL WINAPI MiscIsDBCSLeadByte16(CHAR c) { return IsDBCSLeadByte(c); } ================================================ FILE: wifeman/wifeman.def ================================================ ; File generated automatically from ..\wifeman\wifeman.dll16.spec; do not edit! LIBRARY wifeman.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: wifeman/wifeman.dll16.spec ================================================ 1 stub FDILOADFONTFILE 2 stub FDIUNLOADFONTFILE 3 stub FDIQUERYFACES 4 stub FDIOPENFONTCONTEXT 5 stub FDISETFONTCONTEXT 6 stub FDICLOSEFONTCONTEXT 7 stub FDIQUERYFACEATTR 8 stub FDIQUERYCHARATTR 9 stub FDICONTROL 10 stub FDICLAIMFONTFILE 11 stub FDICONVERTFONTFILE 14 stub MIMADDFONTDRIVER 15 stub MIMADDFONTPACK 16 stub MIMREMOVEFONTDRIVER 17 stub MIMREMOVEFONTPACK 18 stub MIMENUMFONTDRIVERS 19 stub MIMENUMFONTPACKS 20 stub MIMOPENFONTCONTEXT 21 stub MIMCLOSEFONTCONTEXT 22 stub MIMGETINFORMATIONS 23 pascal -ret16 MiscIsDBCSLeadByte(word) MiscIsDBCSLeadByte16 24 stub MISCSETERROINFO 25 stub MISCGETERROINFO 26 stub UBSTRLEN 27 stub UBSTRCPY 28 stub UBSTRNCPY 29 stub UBSTRCAT 30 stub UBSTRCMP 31 stub ASCIZTOUZ 32 stub UZTOASCIZ 33 stub MISCWARNINGMESSAGE 34 stub MISCWARNINGMESSAGEWITHARGUMENT 35 stub FCMCREATECACHEBUFFER 36 stub FCMDELETECACHEBUFFER 37 stub FCMREQUESTIMAGES 38 stub FCMRELEASEIMAGES 39 stub FCMREQUESTDEFAULTFB 40 stub FCMRELEASEDEFAULTFB 41 stub FCMCALCULATETEXTEXTENT 42 stub FCMCALCULATEOUTPUTPOSITIONS 43 stub FCMCLEANUP 44 stub FCMENUMFONTBUFFERS 45 stub MISCGETVERSION 46 stub MISCCONVERTFONTFAMILY 47 stub MISCCONVERTCHARSET 48 stub MISCIFIMETRICSTOLOGFONT 49 stub MISCIFIMETRICSTOTEXTMETRICS 50 stub MISCMAKETEXTXFORM 51 stub FCMCALCBYTEWIDTH 52 stub FCMFORCECACHEIN 53 stub FCMVALIDATEFC 54 stub FCMUNVALIDATEFC 55 stub FCMQUERYFACEATTR 56 stub FCMPROCESSDEVICECONTROL 57 stub MISCTRANCATESTRING 58 stub MISCADDHUGEPTR 59 stub MISCGETSEGMENTINCREMENT 60 stub MISCISWIFECONTROL 61 stub MISCISGAIJICONTROL 62 stub FCMGETEUDCLEADBYTERANGE 63 stub FCMGETEUDCFB 64 stub FCMGETCHARWIDTH 65 stub MISCSTRETCHMONOFONTIMAGE 66 pascal -ret16 MISCGETEUDCLEADBYTERANGE(word) MiscGetEUDCLeadByteRange16 67 stub MISCVALIDATEQUICKSEARCHTABLE 68 stub MISCUNVALIDATEQUICKSEARCHTABLE 69 stub MISCREGISTERNOTIFYFUNCTION 70 stub MISCUNREGISTERNOTIFYFUNCTION 71 stub FCMREQUESTDEFAULTFBEX 72 stub MISCREALIZEWIFEFONT 73 stub MISCDELETEWIFEFONT 74 stub MAPWIFEFONT 75 stub SETCLOSEOLDESTFCFUNC 76 stub CACHEDOPENFONTCONTEXT 77 stub FILLFONTINFO 78 stub FILLCONTEXTINFO 79 stub GETEUDCFD 80 stub GETDEFAULTFONTINFO 128 stub DIAGLOCALLOCKANYTHING 129 stub DIAGLOCALUNLOCKANYTHING 130 stub DIAGGETCONFIRMSTRING 131 stub DIAGSELFCHECK 132 stub DIAGSELFCHECKANDWARNING 150 stub DEBUGASSERTION 151 stub DELAYEDINIT 152 stub FirstInit ================================================ FILE: wifeman/wifeman.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj wifeman {B76406F9-E89B-4791-ACDE-CD23813F764B} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) true wifeman.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false wifeman.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; %(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" WIFEMAN > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" WIFEMAN > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: win87em/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp) add_library(win87em SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/win87em.def win87em.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(win87em.dll16 WIN87EM) target_link_libraries(win87em libwine winecrt0 krnl386) set_target_properties(win87em PROPERTIES SUFFIX ".dll16") ================================================ FILE: win87em/win87em.c ================================================ /* * Copyright 1993 Bob Amstadt * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "wine/windef16.h" #include "wine/winbase16.h" #include "wine/debug.h" #include "wownt32.h" #include "../krnl386/dosexe.h" /* #define __asm__(xxx) #define __asm__ #define __volatile__(xxx) */ WINE_DEFAULT_DEBUG_CHANNEL(int); //VM86.DLL typedef void(*fldcw_t)(WORD); typedef void(*fldsw_t)(WORD); typedef void(*wait_t)(); typedef void(*fninit_t)(); typedef void(*fstcw_t)(WORD*); typedef void(*fstsw_t)(WORD*); typedef void(*frndint_t)(); typedef void(*fclex_t)(); typedef void(*fsave_t)(char*); typedef void(*frstor_t)(const char*); typedef void(*fstenv32_t)(char*); typedef DWORD(*fistp_t)(WORD); void fldcw_stub(WORD a) { FIXME("stub\n"); } void wait_stub() { FIXME("stub\n"); } void fninit_stub() { FIXME("stub\n"); } void fstcw_stub(WORD* a) { FIXME("stub\n"); } void fstsw_stub(WORD* a) { FIXME("stub\n"); } void frndint_stub() { FIXME("stub\n"); } void fclex_stub() { FIXME("stub\n"); } void fsave_stub(char* a) { FIXME("stub\n"); } void fstenv32_stub(char* a) { FIXME("stub\n"); } void frstor_stub(const char* a) { FIXME("stub\n"); } DWORD fistp_stub(WORD round) { FIXME("stub\n"); return 0; } typedef struct { fldcw_t fldcw; wait_t wait; fninit_t fninit; fstcw_t fstcw; fstsw_t fstsw; frndint_t frndint; fclex_t fclex; fsave_t fsave; frstor_t frstor; fstenv32_t fstenv32; fistp_t fistp; } x87function; x87function x87; static INTPROC oldproc = 0; typedef void (*load_x87function_t)(x87function *func); static void WINAPI fpu_exception(CONTEXT *context); BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { if (fdwReason == DLL_PROCESS_DETACH) DOSVM_SetBuiltinVector(2, oldproc); if (fdwReason != DLL_PROCESS_ATTACH) return TRUE; char dllname[MAX_PATH]; load_x87function_t load_x87function; krnl386_get_config_string("otvdm", "vm", "vm86.dll", dllname, sizeof(dllname)); HMODULE vm = LoadLibraryA(dllname); load_x87function = (load_x87function_t)GetProcAddress(vm, "load_x87function"); if (load_x87function) load_x87function(&x87); if (!x87.fldcw) x87.fldcw = fldcw_stub; if (!x87.wait) x87.wait = wait_stub; if (!x87.fninit) x87.fninit = fninit_stub; if (!x87.fstcw) x87.fstcw = fstcw_stub; if (!x87.fstsw) x87.fstsw = fstsw_stub; if (!x87.frndint) x87.frndint = frndint_stub; if (!x87.fclex) x87.fclex = fclex_stub; if (!x87.fsave) x87.fsave = fsave_stub; if (!x87.frstor) x87.frstor = frstor_stub; if (!x87.fistp) x87.fistp = fistp_stub; if (!x87.fstenv32) x87.fstenv32 = fstenv32_stub; oldproc = DOSVM_SetBuiltinVector(2, fpu_exception); return TRUE; } #define USE_VM86_DLL 1 #include struct Win87EmInfoStruct { unsigned short Version; unsigned short SizeSaveArea; unsigned short WinDataSeg; unsigned short WinCodeSeg; unsigned short Have80x87; unsigned short Unused; }; #include /* Implementing this is easy cause Linux and *BSD* ALWAYS have a numerical * coprocessor. (either real or emulated on kernellevel) */ /* win87em.dll also sets interrupt vectors: 2 (NMI), 0x34 - 0x3f (emulator * calls of standard libraries, see Ralph Browns interrupt list), 0x75 * (int13 error reporting of coprocessor) */ /* have a look at /usr/src/linux/arch/i386/math-emu/ *.[ch] for more info * especially control_w.h and status_w.h */ /* FIXME: Still rather skeletal implementation only */ static WORD RefCount = 0; static WORD CtrlWord = 0; static WORD StatusWord_1 = 0x000b; static WORD StatusWord_2 = 0; static WORD StackTop = 175; static WORD StackBottom = 0; static WORD Inthandler02hVar = 1; // the fpe handler is documented as not needing to return // if a program longjmps out we don't want an extra stale context in the call stack // so clean everything up and use a trampoline for the return void WINAPI fpe_return(CONTEXT *context) { WORD *stkptr = (WORD *)MapSL(MAKESEGPTR(context->SegSs, LOWORD(context->Esp))); context->SegDs = stkptr[0]; context->Eax = stkptr[3]; context->Ebp = stkptr[4] - 1; context->Eip = stkptr[5]; context->SegCs = stkptr[6]; context->EFlags = stkptr[7]; context->Esp += 16; } static void WINAPI fpu_exception(CONTEXT *context) { UINT32 fpenv[7]; // check if program sets own nmi handler, maybe irq13 also //FARPROC16 handler2 = DOSVM_GetPMHandler16(2); // we need to use the 32bit fstenv because the pmode fpenv // doesn't contain the fp code or data segments in later intel cpus // so fstenv32 is the only way to get the exception opcode // and also makes it hard/impossible to fix errors with memory operands x87.fstenv32((char *)&fpenv); x87.fclex(); StatusWord_2 |= fpenv[1]; FARPROC16 handler3e = DOSVM_GetPMHandler16(0x3e); if (!handler3e) { x87.fldcw(fpenv[0]); return; } WORD opcode = fpenv[4] >> 16; WORD unmasked = ~fpenv[0] & fpenv[1] & 0x3f; int errcode = 0; // we don't attempt to fix errors that the real win87em would // currently, just check the error type for the first exception if (unmasked & 1) // EM_INVALID { errcode = 0x81; // FPE_INVALID if (fpenv[1] & 0x40) { ERR("Stack fault at %04x:%08x\n", context->SegCs, context->Eip); if (fpenv[1] & 0x200) errcode = 0x8a; // FPE_STACKOVERFLOW else errcode = 0x8b; // FPE_STACKUNDERFLOW } else if (opcode == 0x1fa) errcode = 0x88; // FPE_SQRTNEG } else if (unmasked & 2) // EM_DENORMAL errcode = 0x82; else if (unmasked & 4) // EM_ZERODIVIDE errcode = 0x83; else if (unmasked & 8) // EM_OVERFLOW errcode = 0x84; else if (unmasked & 0x10) // EM_UNDERFLOW errcode = 0x85; else if (unmasked & 0x20) // EM_INEXACT errcode = 0x86; // Watcom expects ds to be on the stack above the ret addr // VB3 expects bp to point to a previous bp which points to the fault context ax and bp context->Esp -= 20; DWORD new_sp = MAKESEGPTR(context->SegSs, LOWORD(context->Esp)); WORD *stack = (WORD *)MapSL(new_sp); static FARPROC16 trampoline16 = 0; if (!trampoline16) trampoline16 = GetProcAddress16(GetModuleHandle16("WIN87EM"), "fpe_return"); stack[9] = context->EFlags; stack[8] = context->SegCs; stack[7] = context->Eip; stack[6] = context->Ebp + 1; stack[5] = context->Eax; stack[4] = context->SegDs; stack[3] = OFFSETOF(new_sp) + 12 + 1; stack[2] = context->SegDs; stack[1] = SELECTOROF(trampoline16); stack[0] = OFFSETOF(trampoline16); context->EFlags |= 0x200; // orig win87em unconditionally sets IF context->SegCs = HIWORD(handler3e); context->Eip = LOWORD(handler3e); context->Eax = errcode; context->Ebp = OFFSETOF(new_sp) + 6; x87.fldcw(fpenv[0]); } static void WIN87_ClearStatus( CONTEXT *context ) { context->Eax &= ~0xffff; /* set AX to 0 */ #if USE_VM86_DLL x87.fclex(); #else/*USE_VM86_DLL*/ #ifdef __i386__ #ifndef _MSC_VER __asm__("fclex"); #else __asm { fclex } #endif #endif #endif/*USE_VM86_DLL*/ StatusWord_2 = 0; } static void WIN87_SetCtrlWord( CONTEXT *context ) { CtrlWord = LOWORD(context->Eax); #if USE_VM86_DLL x87.fldcw(CtrlWord); #else/*USE_VM86_DLL*/ #ifdef __i386__ #ifndef _MSC_VER __asm__("wait;fldcw %0" : : "m" (CtrlWord)); #else __asm { wait; fldcw CtrlWord } #endif #endif/*USE_VM86_DLL*/ #endif } static void WIN87_Init( CONTEXT *context ) { #if USE_VM86_DLL x87.fninit(); x87.fninit(); #else/*USE_VM86_DLL*/ #ifdef __i386__ #ifndef _MSC_VER __asm__("fninit"); __asm__("fninit"); #else __asm { fninit fninit } #endif #endif #endif/*USE_VM86_DLL*/ StackBottom = StackTop; context->Eax = (context->Eax & ~0xffff) | 0x1332; WIN87_SetCtrlWord(context); WIN87_ClearStatus(context); } /*********************************************************************** * _fpMath (WIN87EM.1) */ void WINAPI _fpMath( CONTEXT *context ) { TRACE("(cs:eip=%04x:%04x es=%04x bx=%04x ax=%04x dx=%04x)\n", context->SegCs, context->Eip, context->SegEs, context->Ebx, context->Eax, context->Edx ); switch(LOWORD(context->Ebx)) { case 0: /* install (increase instanceref) emulator, install NMI vector */ RefCount++; #if 0 InstallIntVecs02hAnd75h(); #endif WIN87_Init(context); context->Eax &= ~0xffff; /* set AX to 0 */ break; case 1: /* Init Emulator */ WIN87_Init(context); break; case 2: /* deinstall emulator (decrease instanceref), deinstall NMI vector * if zero. Every '0' call should have a matching '2' call. */ WIN87_Init(context); RefCount--; #if 0 if (!RefCount) RestoreInt02h(); #endif break; case 3: /* The fpe handler is stored in int 3eh but the handler returns * with a retf so it can't be called with an int instruction * the old handler is saved and restored by the program * the tdb contains a per-task int 3eh handler */ DOSVM_SetPMHandler16(0x3e, (FARPROC16)MAKESEGPTR(context->Edx, context->Eax)); break; case 4: /* OUT: newset control word in AX */ WIN87_SetCtrlWord(context); break; case 5: /* return internal control word in AX */ context->Eax = (context->Eax & ~0xffff) | CtrlWord; break; case 6: /* round top of stack to integer using method AX & 0x0C00 */ /* returns current controlword */ { WORD save,mask; /* I don't know much about asm() programming. This could be * wrong. */ #if USE_VM86_DLL x87.fstcw(&save); mask = (save & ~0xc00) | (context->Eax & 0xc00); x87.fldcw(mask); x87.frndint(); x87.fldcw(save); #else/*USE_VM86_DLL*/ #ifdef __i386__ #ifndef _MSC_VER __asm__ __volatile__("fstcw %0;wait" : "=m" (save) : : "memory"); __asm__ __volatile__("fstcw %0;wait" : "=m" (mask) : : "memory"); __asm__ __volatile__("orw $0xC00,%0" : "=m" (mask) : : "memory"); __asm__ __volatile__("fldcw %0;wait" : : "m" (mask)); __asm__ __volatile__("frndint"); #else __asm { fstcw save wait fstcw mask wait or mask, 0C00h fldcw mask wait frndint } #endif #endif #endif/*USE_VM86_DLL*/ } break; case 7: /* POP top of stack as integer into DX:AX */ /* IN: AX&0x0C00 rounding protocol */ /* OUT: DX:AX variable popped */ { DWORD dw=x87.fistp((context->Eax >> 10) & 3); /* I don't know much about asm() programming. This could be * wrong. */ /* FIXME: could someone who really understands asm() fix this please? --AJ */ /* __asm__("fistp %0;wait" : "=m" (dw) : : "memory"); */ TRACE("On top of stack was %d\n",dw); context->Eax = (context->Eax & ~0xffff) | LOWORD(dw); context->Edx = (context->Edx & ~0xffff) | HIWORD(dw); } break; case 8: /* restore internal status words from emulator status word */ context->Eax &= ~0xffff; /* set AX to 0 */ #if USE_VM86_DLL x87.fstsw(&StatusWord_1); #else/*USE_VM86_DLL*/ #ifdef __i386__ #ifndef _MSC_VER __asm__("fstsw %0;wait" : "=m" (StatusWord_1)); #else __asm { fstsw StatusWord_1 wait } #endif #endif #endif/*USE_VM86_DLL*/ context->Eax |= StatusWord_1 & 0x3f; context->Eax = (context->Eax | StatusWord_2) & ~0xe000; StatusWord_2 = LOWORD(context->Eax); break; case 9: /* clear fpu exceptions and some other things */ WIN87_ClearStatus(context); break; case 10: /* dunno. but looks like returning nr. of things on stack in AX */ { UINT32 fpustate[7]; WORD count = 0; x87.fstenv32(&fpustate); WORD tagword = fpustate[2]; for (int i = 0; i < 8; i++) count += (((tagword >> (i * 2)) & 3) != 3); context->Eax = (context->Eax & ~0xffff) | count; break; } case 11: /* just returns the installed flag in DX:AX */ context->Edx &= ~0xffff; /* set DX to 0 */ context->Eax = (context->Eax & ~0xffff) | 1; // fpu is always available break; case 12: /* save AX in some internal state var */ Inthandler02hVar = LOWORD(context->Eax); break; default: /* error. Say that loud and clear */ FIXME("unhandled switch %d\n",LOWORD(context->Ebx)); context->Eax |= 0xffff; context->Edx |= 0xffff; break; } } SEGPTR WINAPI K32WOWGlobalLock16(HGLOBAL16 handle); static HGLOBAL16 hGlobalD; static HGLOBAL16 hGlobalC; static WORD D; static WORD C; /*********************************************************************** * __WinEm87Info (WIN87EM.3) */ void WINAPI __WinEm87Info(struct Win87EmInfoStruct *pWIS, int cbWin87EmInfoStruct) { if (!hGlobalD) { hGlobalD = GlobalAlloc16(0, 65535); hGlobalC = GlobalAlloc16(0, 65535); D = K32WOWGlobalLock16(hGlobalD) >> 16; C = K32WOWGlobalLock16(hGlobalC) >> 16; } if (cbWin87EmInfoStruct != sizeof(*pWIS)) { ERR("(%p,%d) %d != sizeof(struct Win87EmInfoStruct)!\n", pWIS, cbWin87EmInfoStruct, cbWin87EmInfoStruct); } FIXME("(%p,%d), stub !\n",pWIS,cbWin87EmInfoStruct); //WOW32 pWIS->Version = 0x0600; pWIS->SizeSaveArea= 0x1D5; pWIS->Have80x87 = TRUE; pWIS->Unused = 0; //unknown pWIS->WinCodeSeg = C; pWIS->WinDataSeg = D; return 0; } /*********************************************************************** * __WinEm87Restore (WIN87EM.4) */ void WINAPI __WinEm87Restore(void *pWin87EmSaveArea, int cbWin87EmSaveArea) { FIXME("(%p,%d), stub !\n", pWin87EmSaveArea,cbWin87EmSaveArea); } /*********************************************************************** * __WinEm87Save (WIN87EM.5) */ void WINAPI __WinEm87Save(void *pWin87EmSaveArea, int cbWin87EmSaveArea) { FIXME("(%p,%d), stub !\n", pWin87EmSaveArea,cbWin87EmSaveArea); } ================================================ FILE: win87em/win87em.def ================================================ ; File generated automatically from win87em.dll16.spec; do not edit! LIBRARY win87em.dll16 EXPORTS _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE ================================================ FILE: win87em/win87em.dll16.spec ================================================ 1 pascal -register __fpMath() _fpMath #3 pascal -ret16 __WinEm87Info(ptr word) __WinEm87Info #4 pascal -ret16 __WinEm87Restore(ptr word) __WinEm87Restore #5 pascal -ret16 __WinEm87Save(ptr word) __WinEm87Save 3 pascal -ret16 __Win87EmInfo(ptr word) __WinEm87Info 4 pascal -ret16 __Win87EmRestore(ptr word) __WinEm87Restore 5 pascal -ret16 __Win87EmSave(ptr word) __WinEm87Save 100 pascal -register fpe_return() fpe_return ================================================ FILE: win87em/win87em.vcxproj ================================================  Debug Win32 Release Win32 Document "$(OutDir)convspec" "%(Filename).spec" WIN87EM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" "$(OutDir)convspec" "%(Filename).spec" WIN87EM > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj %(Filename).obj {08AEBC9F-464E-41DD-B4CB-F2921F69B591} Win32Proj win87em 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false .dll16 NotUsing Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;WIN87EM_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)krnl386.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib win87em.def Level3 NotUsing MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN87EM_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true win87em.def $(OutDir)krnl386.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib false ================================================ FILE: win87em/win87em.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: wine/CMakeLists.txt ================================================ file(GLOB SOURCE *.c) if (NOT(MSVC)) add_library(libwine SHARED ${SOURCE}) string(APPEND CMAKE_CXX_FLAGS " -export-all-symbols") else() add_library(libwine SHARED ${SOURCE} wine.def) endif() add_definitions(-D_X86_ -D__i386__ -D__WINESRC__) target_link_libraries(libwine shlwapi.lib) set_target_properties(libwine PROPERTIES PREFIX "") ================================================ FILE: wine/casemap.c ================================================ /* Unicode case mappings */ /* generated from http://www.unicode.org/Public/11.0.0/ucd/UnicodeData.txt */ /* DO NOT EDIT!! */ #include "wine/unicode.h" const WCHAR wine_casemap_lower[4259] = { /* index */ 0x01bf, 0x02bf, 0x03bf, 0x044f, 0x054f, 0x064f, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x06af, 0x0100, 0x0100, 0x077d, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0873, 0x0100, 0x0973, 0x0a72, 0x0100, 0x0b6f, 0x0100, 0x0100, 0x0bf3, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0cf3, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0de6, 0x0ec4, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0fa3, /* defaults */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0041 .. 0x00ff */ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0100 .. 0x01ff */ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0xff39, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0xff87, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x00d2, 0x0001, 0x0000, 0x0001, 0x0000, 0x00ce, 0x0001, 0x0000, 0x00cd, 0x00cd, 0x0001, 0x0000, 0x0000, 0x004f, 0x00ca, 0x00cb, 0x0001, 0x0000, 0x00cd, 0x00cf, 0x0000, 0x00d3, 0x00d1, 0x0001, 0x0000, 0x0000, 0x0000, 0x00d3, 0x00d5, 0x0000, 0x00d6, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x00da, 0x0001, 0x0000, 0x00da, 0x0000, 0x0000, 0x0001, 0x0000, 0x00da, 0x0001, 0x0000, 0x00d9, 0x00d9, 0x0001, 0x0000, 0x0001, 0x0000, 0x00db, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0002, 0x0001, 0x0000, 0x0001, 0x0000, 0xff9f, 0xffc8, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, /* 0x0200 .. 0x02ff */ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0xff7e, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2a2b, 0x0001, 0x0000, 0xff5d, 0x2a28, 0x0000, 0x0000, 0x0001, 0x0000, 0xff3d, 0x0045, 0x0047, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0370 .. 0x03ff */ 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0074, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0026, 0x0000, 0x0025, 0x0025, 0x0025, 0x0000, 0x0040, 0x0000, 0x003f, 0x003f, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffc4, 0x0000, 0x0000, 0x0001, 0x0000, 0xfff9, 0x0001, 0x0000, 0x0000, 0xff7e, 0xff7e, 0xff7e, /* 0x0400 .. 0x04ff */ 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x000f, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, /* 0x0500 .. 0x05ff */ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x10a0 .. 0x10ff */ 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x0000, 0x1c60, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1c60, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1332 .. 0x13ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1c0a .. 0x1cff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0x0000, 0x0000, 0xf440, 0xf440, 0xf440, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1e00 .. 0x1eff */ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe241, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, /* 0x1f01 .. 0x1fff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0x0000, 0xfff8, 0x0000, 0xfff8, 0x0000, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xffb6, 0xffb6, 0xfff7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffaa, 0xffaa, 0xffaa, 0xffaa, 0xfff7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xff9c, 0xff9c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xff90, 0xff90, 0xfff9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff80, 0xff80, 0xff82, 0xff82, 0xfff7, 0x0000, 0x0000, 0x0000, /* 0x2103 .. 0x21ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe2a3, 0x0000, 0x0000, 0x0000, 0xdf41, 0xdfba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x247c .. 0x24ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2c00 .. 0x2cff */ 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xd609, 0xf11a, 0xd619, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0xd5e4, 0xd603, 0xd5e1, 0xd5e2, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd5c1, 0xd5c1, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa60d .. 0xa6ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa722 .. 0xa7ff */ 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x75fc, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x5ad8, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x5abc, 0x5ab1, 0x5ab5, 0x5abf, 0x5abc, 0x0000, 0x5aee, 0x5ad6, 0x5aeb, 0x03a0, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xff21 .. 0xffff */ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; const WCHAR wine_casemap_upper[4828] = { /* index */ 0x019f, 0x029f, 0x039f, 0x045a, 0x0556, 0x0656, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x06dd, 0x0100, 0x0100, 0x07dd, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x08db, 0x0964, 0x0a63, 0x0b63, 0x0100, 0x0c57, 0x0100, 0x0100, 0x0cdc, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0dc6, 0x0ec6, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0f85, 0x1062, 0x0100, 0x0100, 0x0100, 0x111c, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x11dc, /* defaults */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0061 .. 0x00ff */ 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0079, /* 0x0100 .. 0x01ff */ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xff18, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xfed4, 0x00c3, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0061, 0x0000, 0x0000, 0x0000, 0xffff, 0x00a3, 0x0000, 0x0000, 0x0000, 0x0082, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0038, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xfffe, 0x0000, 0xffff, 0xfffe, 0x0000, 0xffff, 0xfffe, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xffb1, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0xfffe, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, /* 0x0200 .. 0x02ff */ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x2a3f, 0x2a3f, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x2a1f, 0x2a1c, 0x2a1e, 0xff2e, 0xff32, 0x0000, 0xff33, 0xff33, 0x0000, 0xff36, 0x0000, 0xff35, 0xa54f, 0x0000, 0x0000, 0x0000, 0xff33, 0xa54b, 0x0000, 0xff31, 0x0000, 0xa528, 0xa544, 0x0000, 0xff2f, 0xff2d, 0xa544, 0x29f7, 0xa541, 0x0000, 0x0000, 0xff2d, 0x0000, 0x29fd, 0xff2b, 0x0000, 0x0000, 0xff2a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x29e7, 0x0000, 0x0000, 0xff26, 0x0000, 0x0000, 0xff26, 0x0000, 0x0000, 0x0000, 0xa52a, 0xff26, 0xffbb, 0xff27, 0xff27, 0xffb9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa515, 0xa512, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0345 .. 0x03ff */ 0x0054, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0082, 0x0082, 0x0082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffda, 0xffdb, 0xffdb, 0xffdb, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe1, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffc0, 0xffc1, 0xffc1, 0x0000, 0xffc2, 0xffc7, 0x0000, 0x0000, 0x0000, 0xffd1, 0xffca, 0xfff8, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xffaa, 0xffb0, 0x0007, 0xff8c, 0x0000, 0xffa0, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0404 .. 0x04ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xfff1, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, /* 0x0500 .. 0x05ff */ 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1079 .. 0x10ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0000, 0x0000, 0x0bc0, 0x0bc0, 0x0bc0, /* 0x1300 .. 0x13ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, /* 0x1c02 .. 0x1cff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe792, 0xe793, 0xe79c, 0xe79e, 0xe79e, 0xe79d, 0xe7a4, 0xe7db, 0x89c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1d77 .. 0x1dff */ 0x0000, 0x0000, 0x8a04, 0x0000, 0x0000, 0x0000, 0x0ee6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1e01 .. 0x1eff */ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffc5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, /* 0x1f00 .. 0x1fff */ 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0008, 0x0000, 0x0008, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004a, 0x004a, 0x0056, 0x0056, 0x0056, 0x0056, 0x0064, 0x0064, 0x0080, 0x0080, 0x0070, 0x0070, 0x007e, 0x007e, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe3db, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x210c .. 0x21ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x247b .. 0x24ff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2c16 .. 0x2cff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xd5d5, 0xd5d8, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2d00 .. 0x2dff */ 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0x0000, 0xe3a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe3a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa641 .. 0xa6ff */ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa723 .. 0xa7ff */ 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xab46 .. 0xabff */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfc60, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xff40 .. 0xffff */ 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; ================================================ FILE: wine/config.c ================================================ /* * Configuration parameters shared between Wine server and clients * * Copyright 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_PWD_H #include #endif #include "wine/library.h" static const char server_config_dir[] = "/.wine"; /* config dir relative to $HOME */ static const char server_root_prefix[] = "/tmp/.wine"; /* prefix for server root dir */ static const char server_dir_prefix[] = "/server-"; /* prefix for server dir */ static char *bindir; static char *dlldir; static char *datadir; static char *config_dir; static char *server_dir; static char *build_dir; static char *user_name; static char *argv0_name; #ifdef __GNUC__ static void fatal_error( const char *err, ... ) __attribute__((noreturn,format(printf,1,2))); static void fatal_perror( const char *err, ... ) __attribute__((noreturn,format(printf,1,2))); #endif #if defined(__linux__) || defined(__FreeBSD_kernel__ ) #define EXE_LINK "/proc/self/exe" #elif defined (__FreeBSD__) || defined(__DragonFly__) #define EXE_LINK "/proc/curproc/file" #endif /* die on a fatal error */ static void fatal_error( const char *err, ... ) { va_list args; va_start( args, err ); fprintf( stderr, "wine: " ); vfprintf( stderr, err, args ); va_end( args ); exit(1); } /* die on a fatal error */ static void fatal_perror( const char *err, ... ) { va_list args; va_start( args, err ); fprintf( stderr, "wine: " ); vfprintf( stderr, err, args ); perror( " " ); va_end( args ); exit(1); } /* malloc wrapper */ static void *xmalloc( size_t size ) { void *res; if (!size) size = 1; if (!(res = malloc( size ))) fatal_error( "virtual memory exhausted\n"); return res; } /* strdup wrapper */ static char *xstrdup( const char *str ) { size_t len = strlen(str) + 1; char *res = xmalloc( len ); memcpy( res, str, len ); return res; } /* check if a string ends in a given substring */ static inline int strendswith( const char* str, const char* end ) { size_t len = strlen( str ); size_t tail = strlen( end ); return len >= tail && !strcmp( str + len - tail, end ); } /* remove all trailing slashes from a path name */ static inline void remove_trailing_slashes( char *path ) { int len = strlen( path ); while (len > 1 && path[len-1] == '/') path[--len] = 0; } #if 0 /* build a path from the specified dir and name */ static char *build_path( const char *dir, const char *name ) { size_t len = strlen(dir); char *ret = xmalloc( len + strlen(name) + 2 ); memcpy( ret, dir, len ); if (len && ret[len-1] != '/') ret[len++] = '/'; strcpy( ret + len, name ); return ret; } /* return the directory that contains the library at run-time */ static char *get_runtime_libdir(void) { #ifdef HAVE_DLADDR Dl_info info; char *libdir; if (dladdr( get_runtime_libdir, &info ) && info.dli_fname[0] == '/') { const char *p = strrchr( info.dli_fname, '/' ); unsigned int len = p - info.dli_fname; if (!len) len++; /* include initial slash */ libdir = xmalloc( len + 1 ); memcpy( libdir, info.dli_fname, len ); libdir[len] = 0; return libdir; } #endif /* HAVE_DLADDR */ return NULL; } /* return the directory that contains the main exe at run-time */ static char *get_runtime_exedir(void) { #ifdef EXE_LINK char *p, *bindir; int size; for (size = 256; ; size *= 2) { int ret; if (!(bindir = malloc( size ))) return NULL; if ((ret = readlink( EXE_LINK, bindir, size )) == -1) break; if (ret != size) { bindir[ret] = 0; if (!(p = strrchr( bindir, '/' ))) break; if (p == bindir) p++; *p = 0; return bindir; } free( bindir ); } free( bindir ); #endif return NULL; } /* return the base directory from argv0 */ static char *get_runtime_argvdir( const char *argv0 ) { char *p, *bindir, *cwd; int len, size; if (!(p = strrchr( argv0, '/' ))) return NULL; len = p - argv0; if (!len) len++; /* include leading slash */ if (argv0[0] == '/') /* absolute path */ { bindir = xmalloc( len + 1 ); memcpy( bindir, argv0, len ); bindir[len] = 0; } else { /* relative path, make it absolute */ for (size = 256 + len; ; size *= 2) { if (!(cwd = malloc( size ))) return NULL; if (getcwd( cwd, size - len )) { bindir = cwd; cwd += strlen(cwd); *cwd++ = '/'; memcpy( cwd, argv0, len ); cwd[len] = 0; break; } free( cwd ); if (errno != ERANGE) return NULL; } } return bindir; } #endif /* initialize the server directory value */ static void init_server_dir( dev_t dev, ino_t ino ) { char *p, *root; #ifdef __ANDROID__ /* there's no /tmp dir on Android */ root = build_path( config_dir, ".wineserver" ); #elif defined(HAVE_GETUID) root = xmalloc( sizeof(server_root_prefix) + 12 ); sprintf( root, "%s-%u", server_root_prefix, getuid() ); #else root = xstrdup( server_root_prefix ); #endif server_dir = xmalloc( strlen(root) + sizeof(server_dir_prefix) + 2*sizeof(dev) + 2*sizeof(ino) + 2 ); strcpy( server_dir, root ); strcat( server_dir, server_dir_prefix ); p = server_dir + strlen(server_dir); if (dev != (unsigned long)dev) p += sprintf( p, "%lx%08lx-", (unsigned long)((unsigned long long)dev >> 32), (unsigned long)dev ); else p += sprintf( p, "%lx-", (unsigned long)dev ); if (ino != (unsigned long)ino) sprintf( p, "%lx%08lx", (unsigned long)((unsigned long long)ino >> 32), (unsigned long)ino ); else sprintf( p, "%lx", (unsigned long)ino ); free( root ); } #if 0 /* retrieve the default dll dir */ const char *get_dlldir( const char **default_dlldir ) { *default_dlldir = DLLDIR; return dlldir; #endif /* initialize all the paths values */ static void init_paths(void) { struct stat st; const char *home = getenv( "HOME" ); const char *user = NULL; const char *prefix = getenv( "WINEPREFIX" ); #ifdef HAVE_GETPWUID char uid_str[32]; struct passwd *pwd = getpwuid( getuid() ); if (pwd) { user = pwd->pw_name; if (!home) home = pwd->pw_dir; } if (!user) { sprintf( uid_str, "%lu", (unsigned long)getuid() ); user = uid_str; } #else /* HAVE_GETPWUID */ if (!(user = getenv( "USER" ))) fatal_error( "cannot determine your user name, set the USER environment variable\n" ); #endif /* HAVE_GETPWUID */ user_name = xstrdup( user ); /* build config_dir */ if (prefix) { config_dir = xstrdup( prefix ); remove_trailing_slashes( config_dir ); if (config_dir[0] != '/') fatal_error( "invalid directory %s in WINEPREFIX: not an absolute path\n", prefix ); if (stat( config_dir, &st ) == -1) { if (errno == ENOENT) return; /* will be created later on */ fatal_perror( "cannot open %s as specified in WINEPREFIX", config_dir ); } } else { if (!home) fatal_error( "could not determine your home directory\n" ); if (home[0] != '/') fatal_error( "your home directory %s is not an absolute path\n", home ); config_dir = xmalloc( strlen(home) + sizeof(server_config_dir) ); strcpy( config_dir, home ); remove_trailing_slashes( config_dir ); strcat( config_dir, server_config_dir ); if (stat( config_dir, &st ) == -1) { if (errno == ENOENT) return; /* will be created later on */ fatal_perror( "cannot open %s", config_dir ); } } if (!S_ISDIR(st.st_mode)) fatal_error( "%s is not a directory\n", config_dir ); #ifdef HAVE_GETUID if (st.st_uid != getuid()) fatal_error( "%s is not owned by you\n", config_dir ); #endif init_server_dir( st.st_dev, st.st_ino ); } #if 0 /* check if bindir is valid by checking for wineserver */ static int is_valid_bindir( const char *bindir ) { struct stat st; char *path = build_path( bindir, "wineserver" ); int ret = (stat( path, &st ) != -1); free( path ); return ret; } /* check if dlldir is valid by checking for ntdll */ static int is_valid_dlldir( const char *dlldir ) { struct stat st; char *path = build_path( dlldir, "ntdll.dll.so" ); int ret = (stat( path, &st ) != -1); free( path ); return ret; } /* check if basedir is a valid build dir by checking for wineserver and ntdll */ /* helper for running_from_build_dir */ static inline int is_valid_build_dir( char *basedir, int baselen ) { struct stat st; strcpy( basedir + baselen, "/server/wineserver" ); if (stat( basedir, &st ) == -1) return 0; /* no wineserver found */ /* check for ntdll too to make sure */ strcpy( basedir + baselen, "/dlls/ntdll/ntdll.dll.so" ); if (stat( basedir, &st ) == -1) return 0; /* no ntdll found */ basedir[baselen] = 0; return 1; } /* check if we are running from the build directory */ static char *running_from_build_dir( const char *basedir ) { const char *p; char *path; /* remove last component from basedir */ p = basedir + strlen(basedir) - 1; while (p > basedir && *p == '/') p--; while (p > basedir && *p != '/') p--; if (p == basedir) return NULL; path = xmalloc( p - basedir + sizeof("/dlls/ntdll/ntdll.dll.so") ); memcpy( path, basedir, p - basedir ); if (!is_valid_build_dir( path, p - basedir )) { /* remove another component */ while (p > basedir && *p == '/') p--; while (p > basedir && *p != '/') p--; if (p == basedir || !is_valid_build_dir( path, p - basedir )) { free( path ); return NULL; } } return path; } /* try to set the specified directory as bindir, or set build_dir if it's inside the build directory */ static int set_bindir( char *dir ) { if (!dir) return 0; if (is_valid_bindir( dir )) { bindir = dir; dlldir = build_path( bindir, BIN_TO_DLLDIR ); } else { build_dir = running_from_build_dir( dir ); free( dir ); } return bindir || build_dir; } /* try to set the specified directory as dlldir, or set build_dir if it's inside the build directory */ static int set_dlldir( char *libdir ) { char *path; if (!libdir) return 0; path = build_path( libdir, LIB_TO_DLLDIR ); if (is_valid_dlldir( path )) { dlldir = path; bindir = build_path( libdir, LIB_TO_BINDIR ); } else { build_dir = running_from_build_dir( libdir ); free( path ); } free( libdir ); return dlldir || build_dir; } /* initialize the argv0 path */ void wine_init_argv0_path( const char *argv0 ) { const char *basename, *wineloader; if (!(basename = strrchr( argv0, '/' ))) basename = argv0; else basename++; if (set_bindir( get_runtime_exedir() )) goto done; if (set_dlldir( get_runtime_libdir() )) goto done; if (set_bindir( get_runtime_argvdir( argv0 ))) goto done; if ((wineloader = getenv( "WINELOADER" ))) set_bindir( get_runtime_argvdir( wineloader )); done: if (build_dir) { argv0_name = build_path( "loader/", basename ); } else { if (bindir) datadir = build_path( bindir, BIN_TO_DATADIR ); argv0_name = xstrdup( basename ); } } /* return the configuration directory ($WINEPREFIX or $HOME/.wine) */ const char *wine_get_config_dir(void) { if (!config_dir) init_paths(); return config_dir; } /* retrieve the wine data dir */ const char *wine_get_data_dir(void) { return datadir; } /* retrieve the wine build dir (if we are running from there) */ const char *wine_get_build_dir(void) { return build_dir; } #endif /* return the full name of the server directory (the one containing the socket) */ const char *wine_get_server_dir(void) { if (!server_dir) { if (!config_dir) init_paths(); else { struct stat st; if (stat( config_dir, &st ) == -1) { if (errno != ENOENT) fatal_error( "cannot stat %s\n", config_dir ); return NULL; /* will have to try again once config_dir has been created */ } init_server_dir( st.st_dev, st.st_ino ); } } return server_dir; } #if 0 /* return the current user name */ const char *wine_get_user_name(void) { if (!user_name) init_paths(); return user_name; } /* return the standard version string */ const char *wine_get_version(void) { return PACKAGE_VERSION; } /* return the build id string */ const char *wine_get_build_id(void) { extern const char wine_build[]; return wine_build; } /* exec a binary using the preloader if requested; helper for wine_exec_wine_binary */ static void preloader_exec( char **argv, int use_preloader ) { if (use_preloader) { static const char preloader[] = "wine-preloader"; static const char preloader64[] = "wine64-preloader"; char *p, *full_name; char **last_arg = argv, **new_argv; if (!(p = strrchr( argv[0], '/' ))) p = argv[0]; else p++; full_name = xmalloc( p - argv[0] + sizeof(preloader64) ); memcpy( full_name, argv[0], p - argv[0] ); if (strendswith( p, "64" )) memcpy( full_name + (p - argv[0]), preloader64, sizeof(preloader64) ); else memcpy( full_name + (p - argv[0]), preloader, sizeof(preloader) ); /* make a copy of argv */ while (*last_arg) last_arg++; new_argv = xmalloc( (last_arg - argv + 2) * sizeof(*argv) ); memcpy( new_argv + 1, argv, (last_arg - argv + 1) * sizeof(*argv) ); new_argv[0] = full_name; execv( full_name, new_argv ); free( new_argv ); free( full_name ); } execv( argv[0], argv ); } /* exec a wine internal binary (either the wine loader or the wine server) */ void wine_exec_wine_binary( const char *name, char **argv, const char *env_var ) { const char *path, *pos, *ptr; int use_preloader; if (!name) name = argv0_name; /* no name means default loader */ #ifdef linux use_preloader = !strendswith( name, "wineserver" ); #else use_preloader = 0; #endif if ((ptr = strrchr( name, '/' ))) { /* if we are in build dir and name contains a path, try that */ if (build_dir) { argv[0] = build_path( build_dir, name ); preloader_exec( argv, use_preloader ); free( argv[0] ); } name = ptr + 1; /* get rid of path */ } /* first, bin directory from the current libdir or argv0 */ if (bindir) { argv[0] = build_path( bindir, name ); preloader_exec( argv, use_preloader ); free( argv[0] ); } /* then specified environment variable */ if (env_var) { argv[0] = (char *)env_var; preloader_exec( argv, use_preloader ); } /* now search in the Unix path */ if ((path = getenv( "PATH" ))) { argv[0] = xmalloc( strlen(path) + strlen(name) + 2 ); pos = path; for (;;) { while (*pos == ':') pos++; if (!*pos) break; if (!(ptr = strchr( pos, ':' ))) ptr = pos + strlen(pos); memcpy( argv[0], pos, ptr - pos ); strcpy( argv[0] + (ptr - pos), "/" ); strcat( argv[0] + (ptr - pos), name ); preloader_exec( argv, use_preloader ); pos = ptr; } free( argv[0] ); } /* and finally try BINDIR */ argv[0] = build_path( BINDIR, name ); preloader_exec( argv, use_preloader ); free( argv[0] ); } #endif ================================================ FILE: wine/config.h ================================================ /* include/config.h. Generated from config.h.in by configure. */ /* include/config.h.in. Generated from configure.ac by autoheader. */ #ifndef __WINE_CONFIG_H #define __WINE_CONFIG_H #ifndef WINE_CROSSTEST /* Define to a function attribute for Microsoft hotpatch assembly prefix. */ #define DECLSPEC_HOTPATCH /* */ /* Define to the file extension for executables. */ #define EXEEXT ".exe" /* Define to 1 if you have the `acosh' function. */ /* #undef HAVE_ACOSH */ /* Define to 1 if you have the `acoshf' function. */ /* #undef HAVE_ACOSHF */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ALIAS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ALSA_ASOUNDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AL_AL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H */ /* Define to 1 if you have the header file. */ #define HAVE_ARPA_INET_H 1 /* Define to 1 if you have the header file. */ #define HAVE_ARPA_NAMESER_H 1 /* Define to 1 if you have the `asctime_r' function. */ #define HAVE_ASCTIME_R 1 /* Define to 1 if you have the `asinh' function. */ /* #undef HAVE_ASINH */ /* Define to 1 if you have the `asinhf' function. */ /* #undef HAVE_ASINHF */ /* Define to 1 if you have the header file. */ #define HAVE_ASM_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_ASM_USER_H */ /* Define to 1 if you have the `atanh' function. */ /* #undef HAVE_ATANH */ /* Define to 1 if you have the `atanhf' function. */ /* #undef HAVE_ATANHF */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */ /* Define to 1 if you have the `AUGraphAddNode' function. */ /* #undef HAVE_AUGRAPHADDNODE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CAPI20_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CARBON_CARBON_H */ /* Define to 1 if you have the `cbrt' function. */ #define HAVE_CBRT 1 /* Define to 1 if you have the `cbrtf' function. */ #define HAVE_CBRTF 1 /* Define to 1 if you have the `chsize' function. */ /* #undef HAVE_CHSIZE */ /* Define to 1 if you have the `clock_gettime' function. */ #define HAVE_CLOCK_GETTIME 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CL_CL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_COMMONCRYPTO_COMMONCRYPTOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_COREAUDIO_COREAUDIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CORESERVICES_CORESERVICES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CUPS_CUPS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CUPS_PPD_H */ /* Define to 1 if you have the header file. */ #define HAVE_CURSES_H 1 /* Define if you have the daylight variable */ #define HAVE_DAYLIGHT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DIRECT_H */ /* Define to 1 if you have the header file. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */ /* Define to 1 if you have the `dladdr' function. */ /* #undef HAVE_DLADDR */ /* Define to 1 if you have the header file. */ //#define HAVE_DLFCN_H 1 /* Define to 1 if you have the `dlopen' function. */ //#define HAVE_DLOPEN 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_EGL_EGL_H */ /* Define to 1 if you have the header file. */ //#define HAVE_ELF_H 1 /* Define to 1 if you have the `epoll_create' function. */ /* #undef HAVE_EPOLL_CREATE */ /* Define to 1 if you have the `erf' function. */ /* #undef HAVE_ERF */ /* Define to 1 if you have the `erfc' function. */ /* #undef HAVE_ERFC */ /* Define to 1 if you have the `erfcf' function. */ /* #undef HAVE_ERFCF */ /* Define to 1 if you have the `erff' function. */ /* #undef HAVE_ERFF */ /* Define to 1 if you have the `exp2' function. */ #define HAVE_EXP2 1 /* Define to 1 if you have the `exp2f' function. */ #define HAVE_EXP2F 1 /* Define to 1 if you have the `expm1' function. */ /* #undef HAVE_EXPM1 */ /* Define to 1 if you have the `expm1f' function. */ /* #undef HAVE_EXPM1F */ /* Define to 1 if you have the `fallocate' function. */ /* #undef HAVE_FALLOCATE */ /* Define to 1 if you have the `ffs' function. */ #define HAVE_FFS 1 /* Define to 1 if you have the `finitef' function. */ #define HAVE_FINITEF 1 /* Define to 1 if you have the header file. */ #define HAVE_FLOAT_H 1 /* Define to 1 if you have the `fnmatch' function. */ #define HAVE_FNMATCH 1 /* Define to 1 if you have the header file. */ #define HAVE_FNMATCH_H 1 /* Define to 1 if you have the header file. */ #define HAVE_FONTCONFIG_FONTCONFIG_H 1 /* Define to 1 if you have the `fork' function. */ #define HAVE_FORK 1 /* Define to 1 if you have the `fpclass' function. */ /* #undef HAVE_FPCLASS */ /* Define if FreeType 2 is installed */ /* #undef HAVE_FREETYPE */ /* Define to 1 if the system has the type `fsblkcnt_t'. */ #define HAVE_FSBLKCNT_T 1 /* Define to 1 if the system has the type `fsfilcnt_t'. */ #define HAVE_FSFILCNT_T 1 /* Define to 1 if you have the `fstatfs' function. */ #define HAVE_FSTATFS 1 /* Define to 1 if you have the `fstatvfs' function. */ #define HAVE_FSTATVFS 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_FT2BUILD_H */ /* Define to 1 if you have the `ftruncate' function. */ #define HAVE_FTRUNCATE 1 /* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */ /* #undef HAVE_FT_TRUETYPEENGINETYPE */ /* Define to 1 if you have the `futimens' function. */ #define HAVE_FUTIMENS 1 /* Define to 1 if you have the `futimes' function. */ #define HAVE_FUTIMES 1 /* Define to 1 if you have the `futimesat' function. */ #define HAVE_FUTIMESAT 1 /* Define to 1 if you have the `getaddrinfo' function. */ #define HAVE_GETADDRINFO 1 /* Define to 1 if you have the `getattrlist' function. */ /* #undef HAVE_GETATTRLIST */ /* Define to 1 if you have the `getauxval' function. */ /* #undef HAVE_GETAUXVAL */ /* Define to 1 if you have the `getifaddrs' function. */ /* #undef HAVE_GETIFADDRS */ /* Define to 1 if you have the `getnameinfo' function. */ #define HAVE_GETNAMEINFO 1 /* Define to 1 if you have the `getnetbyname' function. */ /* #undef HAVE_GETNETBYNAME */ /* Define to 1 if you have the header file. */ //#define HAVE_GETOPT_H 1 /* Define to 1 if you have the `getopt_long_only' function. */ #define HAVE_GETOPT_LONG_ONLY 1 /* Define to 1 if you have the `getprotobyname' function. */ #define HAVE_GETPROTOBYNAME 1 /* Define to 1 if you have the `getprotobynumber' function. */ #define HAVE_GETPROTOBYNUMBER 1 /* Define to 1 if you have the `getpwuid' function. */ //#define HAVE_GETPWUID 1 /* Define to 1 if you have the `getservbyport' function. */ #define HAVE_GETSERVBYPORT 1 /* Define to 1 if you have the header file. */ #define HAVE_GETTEXT_PO_H 1 /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Define to 1 if you have the `getuid' function. */ //#define HAVE_GETUID 1 /* Define to 1 if you have the `gnutls_cipher_init' function. */ /* #undef HAVE_GNUTLS_CIPHER_INIT */ /* Define if we have the libgphoto2 development environment */ /* #undef HAVE_GPHOTO2 */ /* Define if we have the libgphoto2_port development environment */ /* #undef HAVE_GPHOTO2_PORT */ /* Define to 1 if you have the header file. */ #define HAVE_GRP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_GSM_GSM_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_GSM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_EXT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_H */ /* Define to 1 if you have the header file. */ #define HAVE_IEEEFP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_IFADDRS_H 1 /* Define to 1 if you have the `if_nameindex' function. */ #define HAVE_IF_NAMEINDEX 1 /* Define to 1 if you have the `inet_addr' function. */ #define HAVE_INET_ADDR 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_INET_MIB2_H */ /* Define to 1 if you have the `inet_network' function. */ #define HAVE_INET_NETWORK 1 /* Define to 1 if you have the `inet_ntop' function. */ #define HAVE_INET_NTOP 1 /* Define to 1 if you have the `inet_pton' function. */ #define HAVE_INET_PTON 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `IOHIDManagerCreate' function. */ /* #undef HAVE_IOHIDMANAGERCREATE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IOKIT_HID_IOHIDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IOKIT_IOKITLIB_H */ /* Define to 1 if you have the header file. */ #define HAVE_IO_H 1 /* Define to 1 if you have the `isfinite' function. */ #define HAVE_ISFINITE 1 /* Define to 1 if you have the `isinf' function. */ #define HAVE_ISINF 1 /* Define to 1 if you have the `isnan' function. */ #define HAVE_ISNAN 1 /* Define to 1 if you have the `isnanf' function. */ #define HAVE_ISNANF 1 /* Define to 1 if you have the `j0' function. */ /* #undef HAVE_J0 */ /* Define to 1 if you have the `j1' function. */ /* #undef HAVE_J1 */ /* Define to 1 if you have the `jn' function. */ /* #undef HAVE_JN */ /* Define to 1 if you have the header file. */ #define HAVE_JPEGLIB_H 1 /* Define to 1 if you have the `kqueue' function. */ /* #undef HAVE_KQUEUE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_KRB5_KRB5_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_KSTAT_H */ /* Define to 1 if you have the header file. */ #define HAVE_LBER_H 1 /* Define if you have the LittleCMS development environment */ #define HAVE_LCMS2 1 /* Define to 1 if you have the header file. */ #define HAVE_LCMS2_H 1 /* Define if you have the OpenLDAP development environment */ #define HAVE_LDAP 1 /* Define to 1 if you have the `ldap_count_references' function. */ #define HAVE_LDAP_COUNT_REFERENCES 1 /* Define to 1 if you have the `ldap_first_reference' function. */ #define HAVE_LDAP_FIRST_REFERENCE 1 /* Define to 1 if you have the header file. */ #define HAVE_LDAP_H 1 /* Define to 1 if you have the `ldap_next_reference' function. */ #define HAVE_LDAP_NEXT_REFERENCE 1 /* Define to 1 if you have the `ldap_parse_reference' function. */ #define HAVE_LDAP_PARSE_REFERENCE 1 /* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */ #define HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL 1 /* Define to 1 if you have the `ldap_parse_sort_control' function. */ /* #undef HAVE_LDAP_PARSE_SORT_CONTROL */ /* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */ #define HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL 1 /* Define to 1 if you have the `ldap_parse_vlv_control' function. */ /* #undef HAVE_LDAP_PARSE_VLV_CONTROL */ /* Define to 1 if you have the `lgamma' function. */ /* #undef HAVE_LGAMMA */ /* Define to 1 if you have the `lgammaf' function. */ /* #undef HAVE_LGAMMAF */ /* Define to 1 if you have the `gettextpo' library (-lgettextpo). */ #define HAVE_LIBGETTEXTPO 1 /* Define to 1 if you have the `i386' library (-li386). */ /* #undef HAVE_LIBI386 */ /* Define to 1 if you have the `kstat' library (-lkstat). */ /* #undef HAVE_LIBKSTAT */ /* Define to 1 if you have the `ossaudio' library (-lossaudio). */ /* #undef HAVE_LIBOSSAUDIO */ /* Define to 1 if you have the `procstat' library (-lprocstat). */ /* #undef HAVE_LIBPROCSTAT */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBPROCSTAT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBPROC_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBUDEV_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBUNWIND_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBV4L1_H */ /* Define if you have the libxml2 library */ #define HAVE_LIBXML2 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_PARSER_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_SAX2_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_XMLSAVE_H 1 /* Define if you have the X Shape extension */ /* #undef HAVE_LIBXSHAPE */ /* Define to 1 if you have the header file. */ #define HAVE_LIBXSLT_PATTERN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXSLT_TRANSFORM_H 1 /* Define if you have the X Shm extension */ /* #undef HAVE_LIBXXSHM */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINK_H */ /* Define if defines the Linux 2.2 joystick API */ /* #undef HAVE_LINUX_22_JOYSTICK_API */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_CAPI_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_CDROM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_COMPILER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_FILTER_H */ /* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */ /* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_HDREG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_HIDRAW_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_INPUT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IOCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IPX_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IRDA_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_JOYSTICK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_MAJOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_PARAM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_RTNETLINK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_SERIAL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_TYPES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_UCDROM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_VIDEODEV2_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_VIDEODEV_H */ /* Define to 1 if you have the `llrint' function. */ #define HAVE_LLRINT 1 /* Define to 1 if you have the `llrintf' function. */ #define HAVE_LLRINTF 1 /* Define to 1 if you have the `llround' function. */ #define HAVE_LLROUND 1 /* Define to 1 if you have the `llroundf' function. */ #define HAVE_LLROUNDF 1 /* Define to 1 if you have the `log1p' function. */ /* #undef HAVE_LOG1P */ /* Define to 1 if you have the `log1pf' function. */ /* #undef HAVE_LOG1PF */ /* Define to 1 if you have the `log2' function. */ #define HAVE_LOG2 1 /* Define to 1 if you have the `log2f' function. */ #define HAVE_LOG2F 1 /* Define to 1 if the system has the type `long long'. */ #define HAVE_LONG_LONG 1 /* Define to 1 if you have the `lrint' function. */ #define HAVE_LRINT 1 /* Define to 1 if you have the `lrintf' function. */ #define HAVE_LRINTF 1 /* Define to 1 if you have the `lround' function. */ #define HAVE_LROUND 1 /* Define to 1 if you have the `lroundf' function. */ #define HAVE_LROUNDF 1 /* Define to 1 if you have the `lstat' function. */ #define HAVE_LSTAT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_LWP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_CPU_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_LIMITS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_SYSARCH_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_MACHINE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_MACH_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_DYLD_IMAGES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_LOADER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_NLIST_H */ /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_METAL_METAL_H */ /* Define to 1 if you have the `mmap' function. */ //#define HAVE_MMAP 1 /* Define to 1 if you have the header file. */ #define HAVE_MNTENT_H 1 /* Define to 1 if the system has the type `mode_t'. */ #define HAVE_MODE_T 1 /* Define to 1 if you have the `mousemask' function. */ #define HAVE_MOUSEMASK 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_MPG123_H */ /* Define to 1 if you have the header file. */ #define HAVE_NCURSES_H 1 /* Define to 1 if you have the `nearbyint' function. */ /* #undef HAVE_NEARBYINT */ /* Define to 1 if you have the `nearbyintf' function. */ /* #undef HAVE_NEARBYINTF */ /* Define to 1 if you have the header file. */ #define HAVE_NETDB_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_ICMP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IF_ETHER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IF_INARP_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IN_PCB_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_SYSTM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IP_ICMP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_FSM_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_TCP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_TIMER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_VAR_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_UDP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_UDP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETIPX_IPX_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_ARP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_DL_H */ /* Define to 1 if you have the header file. */ #define HAVE_NET_IF_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_TYPES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_ROUTE_H */ /* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */ #define HAVE_NS_MSG__MSG_PTR 1 /* Define to 1 if the system has the type `off_t'. */ #define HAVE_OFF_T 1 /* Define if mkdir takes only one argument */ /* #undef HAVE_ONE_ARG_MKDIR */ /* Define to 1 if OpenAL is available */ /* #undef HAVE_OPENAL */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENAL_AL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENCL_OPENCL_H */ /* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */ /* #undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PCAP_PCAP_H */ /* Define to 1 if you have the `pclose' function. */ #define HAVE_PCLOSE 1 /* Define to 1 if the system has the type `pid_t'. */ #define HAVE_PID_T 1 /* Define to 1 if you have the `pipe2' function. */ #define HAVE_PIPE2 1 /* Define to 1 if you have the header file. */ #define HAVE_PNG_H 1 /* Define to 1 if you have the `poll' function. */ #define HAVE_POLL 1 /* Define to 1 if you have the header file. */ #define HAVE_POLL_H 1 /* Define to 1 if you have the `popen' function. */ #define HAVE_POPEN 1 /* Define to 1 if you have the `port_create' function. */ /* #undef HAVE_PORT_CREATE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PORT_H */ /* Define to 1 if you have the `powl' function. */ /* #undef HAVE_POWL */ /* Define if we can use ppdev.h for parallel port access */ /* #undef HAVE_PPDEV */ /* Define to 1 if you have the `prctl' function. */ /* #undef HAVE_PRCTL */ /* Define to 1 if you have the `pread' function. */ #define HAVE_PREAD 1 /* Define to 1 if you have the header file. */ #define HAVE_PROCESS_H 1 /* Define to 1 if you have the `proc_pidinfo' function. */ /* #undef HAVE_PROC_PIDINFO */ /* Define to 1 if you have the `pthread_attr_get_np' function. */ /* #undef HAVE_PTHREAD_ATTR_GET_NP */ /* Define to 1 if you have the `pthread_getattr_np' function. */ #define HAVE_PTHREAD_GETATTR_NP 1 /* Define to 1 if you have the `pthread_getthreadid_np' function. */ /* #undef HAVE_PTHREAD_GETTHREADID_NP */ /* Define to 1 if you have the `pthread_get_stackaddr_np' function. */ /* #undef HAVE_PTHREAD_GET_STACKADDR_NP */ /* Define to 1 if you have the `pthread_get_stacksize_np' function. */ /* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */ /* Define to 1 if you have the header file. */ #define HAVE_PTHREAD_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_PTHREAD_NP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PULSE_PULSEAUDIO_H */ /* Define to 1 if you have the header file. */ //#define HAVE_PWD_H 1 /* Define to 1 if you have the `pwrite' function. */ #define HAVE_PWRITE 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_QUICKTIME_IMAGECOMPRESSION_H */ /* Define to 1 if you have the `readdir' function. */ #define HAVE_READDIR 1 /* Define to 1 if you have the `readlink' function. */ #define HAVE_READLINK 1 /* Define to 1 if you have the `remainder' function. */ /* #undef HAVE_REMAINDER */ /* Define to 1 if you have the `remainderf' function. */ /* #undef HAVE_REMAINDERF */ /* Define to 1 if the system has the type `request_sense'. */ /* #undef HAVE_REQUEST_SENSE */ /* Define if you have the resolver library and header */ #define HAVE_RESOLV 1 /* Define to 1 if you have the header file. */ #define HAVE_RESOLV_H 1 /* Define to 1 if you have the `rint' function. */ #define HAVE_RINT 1 /* Define to 1 if you have the `rintf' function. */ #define HAVE_RINTF 1 /* Define to 1 if you have the `round' function. */ #define HAVE_ROUND 1 /* Define to 1 if you have the `roundf' function. */ #define HAVE_ROUNDF 1 /* Define to 1 if you have the header file. */ #define HAVE_SCHED_H 1 /* Define to 1 if you have the `sched_setaffinity' function. */ /* #undef HAVE_SCHED_SETAFFINITY */ /* Define to 1 if you have the `sched_yield' function. */ #define HAVE_SCHED_YIELD 1 /* Define to 1 if `cmd' is a member of `scsireq_t'. */ /* #undef HAVE_SCSIREQ_T_CMD */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SCSI_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SCSI_IOCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SDL2_SDL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SECURITY_SECURITY_H */ /* Define to 1 if you have the `select' function. */ #define HAVE_SELECT 1 /* Define to 1 if you have the `sendmsg' function. */ #define HAVE_SENDMSG 1 /* Define to 1 if you have the `setproctitle' function. */ /* #undef HAVE_SETPROCTITLE */ /* Define to 1 if you have the `setprogname' function. */ /* #undef HAVE_SETPROGNAME */ /* Define to 1 if you have the `setrlimit' function. */ #define HAVE_SETRLIMIT 1 /* Define to 1 if you have the `settimeofday' function. */ #define HAVE_SETTIMEOFDAY 1 /* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */ /* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */ /* Define if sigaddset is supported */ #define HAVE_SIGADDSET 1 /* Define to 1 if you have the `sigaltstack' function. */ /* #undef HAVE_SIGALTSTACK */ /* Define to 1 if `si_fd' is a member of `siginfo_t'. */ /* #undef HAVE_SIGINFO_T_SI_FD */ /* Define to 1 if you have the `sigprocmask' function. */ #define HAVE_SIGPROCMASK 1 /* Define to 1 if the system has the type `sigset_t'. */ #define HAVE_SIGSET_T 1 /* Define to 1 if the system has the type `size_t'. */ #define HAVE_SIZE_T 1 /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 /* Define to 1 if you have the `socketpair' function. */ #define HAVE_SOCKETPAIR 1 /* Define to 1 if the system has the type `ssize_t'. */ #define HAVE_SSIZE_T 1 /* Define to 1 if you have the `SSLCopyPeerCertificates' function. */ /* #undef HAVE_SSLCOPYPEERCERTIFICATES */ /* Define to 1 if you have the `statfs' function. */ #define HAVE_STATFS 1 /* Define to 1 if you have the `statvfs' function. */ #define HAVE_STATVFS 1 /* Define to 1 if you have the header file. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #define HAVE_STRERROR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strncasecmp' function. */ /* #define HAVE_STRNCASECMP 1 */ /* Define to 1 if you have the `strnlen' function. */ /* #undef HAVE_STRNLEN */ /* Define to 1 if you have the header file. */ /* #undef HAVE_STROPTS_H */ /* Define to 1 if you have the `strtold' function. */ #define HAVE_STRTOLD 1 /* Define to 1 if you have the `strtoll' function. */ #define HAVE_STRTOLL 1 /* Define to 1 if you have the `strtoull' function. */ #define HAVE_STRTOULL 1 /* Define to 1 if `d_reclen' is a member of `struct dirent'. */ /* #undef HAVE_STRUCT_DIRENT_D_RECLEN */ /* Define to 1 if `direction' is a member of `struct ff_effect'. */ /* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */ /* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */ /* #undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST */ /* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */ /* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */ /* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */ #define HAVE_STRUCT_IFREQ_IFR_HWADDR 1 /* Define to 1 if `ips_total' is a member of `struct ipstat'. */ /* #undef HAVE_STRUCT_IPSTAT_IPS_TOTAL */ /* Define to 1 if `ips_total' is a member of `struct ip_stats'. */ /* #undef HAVE_STRUCT_IP_STATS_IPS_TOTAL */ /* Define to 1 if the system has the type `struct link_map'. */ /* #undef HAVE_STRUCT_LINK_MAP */ /* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */ /* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */ /* Define to 1 if `mt_blkno' is a member of `struct mtget'. */ #define HAVE_STRUCT_MTGET_MT_BLKNO 1 /* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */ /* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */ /* Define to 1 if `mt_gstat' is a member of `struct mtget'. */ #define HAVE_STRUCT_MTGET_MT_GSTAT 1 /* Define to 1 if `name' is a member of `struct option'. */ #define HAVE_STRUCT_OPTION_NAME 1 /* Define to 1 if the system has the type `struct r_debug'. */ /* #undef HAVE_STRUCT_R_DEBUG */ /* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */ #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1 /* Define to 1 if `sa_len' is a member of `struct sockaddr'. */ /* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */ /* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */ /* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */ /* Define to 1 if `f_bavail' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_BAVAIL 1 /* Define to 1 if `f_bfree' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_BFREE 1 /* Define to 1 if `f_favail' is a member of `struct statfs'. */ /* #undef HAVE_STRUCT_STATFS_F_FAVAIL */ /* Define to 1 if `f_ffree' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_FFREE 1 /* Define to 1 if `f_frsize' is a member of `struct statfs'. */ /* #undef HAVE_STRUCT_STATFS_F_FRSIZE */ /* Define to 1 if `f_namelen' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_NAMELEN 1 /* Define to 1 if `f_blocks' is a member of `struct statvfs'. */ #define HAVE_STRUCT_STATVFS_F_BLOCKS 1 /* Define to 1 if `st_atim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_ATIM 1 /* Define to 1 if `st_atimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC */ /* Define to 1 if `st_birthtim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BIRTHTIM 1 /* Define to 1 if `st_birthtime' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BIRTHTIME 1 /* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC */ /* Define to 1 if `st_blocks' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BLOCKS 1 /* Define to 1 if `st_ctim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_CTIM 1 /* Define to 1 if `st_ctimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_CTIMESPEC */ /* Define to 1 if `st_mtim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_MTIM 1 /* Define to 1 if `st_mtimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_MTIMESPEC */ /* Define to 1 if `__st_birthtim' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT___ST_BIRTHTIM */ /* Define to 1 if `__st_birthtime' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT___ST_BIRTHTIME */ /* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */ /* #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT */ /* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */ /* #undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT */ /* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */ /* #undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS */ /* Define to 1 if the system has the type `struct xinpgen'. */ /* #undef HAVE_STRUCT_XINPGEN */ /* Define to 1 if the system has the type `struct __res_state'. */ #define HAVE_STRUCT___RES_STATE 1 /* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */ /* #undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6 */ /* Define to 1 if you have the `symlink' function. */ #define HAVE_SYMLINK 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYSCALL_H */ /* Define to 1 if you have the `sysinfo' function. */ /* #undef HAVE_SYSINFO */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ASOUNDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ATTR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_AUXV_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_CDIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_ELF32_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EPOLL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EVENT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EXEC_ELF_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_FILIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_INOTIFY_H */ /* Define to 1 if you have the header file. */ //#define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_IPC_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LIMITS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LINK_H */ /* Define to 1 if you have the header file. */ //#define HAVE_SYS_MMAN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_MODEM_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_MOUNT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_MSG_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_MTIO_H 1 /* Define to 1 if you have the header file. */ //#define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_POLL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PRCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PROTOSW_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PTRACE_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_QUEUE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_RESOURCE_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SCSIIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SHM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SIGNAL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SOCKETVAR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SOCKIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATVFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_STRTIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSCALL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSINFO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_THR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TIHDR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TIMEOUT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMES_H 1 /* Define to 1 if you have the header file. */ //#define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_UCONTEXT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_UIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_USER_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_UTSNAME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_VFS_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_VM86_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_VNODE_H */ /* Define to 1 if you have the header file. */ /* #define HAVE_SYS_WAIT_H 1 */ /* Define to 1 if you have the `tcdrain' function. */ #define HAVE_TCDRAIN 1 /* Define to 1 if you have the header file. */ #define HAVE_TERMIOS_H 1 /* Define to 1 if you have the `thr_kill2' function. */ /* #undef HAVE_THR_KILL2 */ /* Define to 1 if you have the header file. */ #define HAVE_TIFFIO_H 1 /* Define to 1 if you have the `timegm' function. */ #define HAVE_TIMEGM 1 /* Define if you have the timezone variable */ #define HAVE_TIMEZONE 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the `truncf' function. */ #define HAVE_TRUNCF 1 /* Define to 1 if you have the `udev' library (-ludev). */ /* #undef HAVE_UDEV */ /* Define to 1 if you have the header file. */ //#define HAVE_UNISTD_H 1 /* Define to 1 if you have the `usleep' function. */ //#define HAVE_USLEEP 1 /* Define to 1 if you have the header file. */ //#define HAVE_UTIME_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_VALGRIND_MEMCHECK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_VALGRIND_VALGRIND_H */ /* Define to 1 if you have the `vsnprintf' function. */ #define HAVE_VSNPRINTF 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_SHAPE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XFIXES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINPUT2_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINPUT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XRANDR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XRENDER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XSHM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XCURSOR_XCURSOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XKBLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XUTIL_H */ /* Define to 1 if `xcookie' is a member of `XEvent'. */ /* #undef HAVE_XEVENT_XCOOKIE */ /* Define to 1 if `callback' is a member of `XICCallback'. */ /* #undef HAVE_XICCALLBACK_CALLBACK */ /* Define if you have the XKB extension */ /* #undef HAVE_XKB */ /* Define if libxml2 has the xmlDocProperties enum */ #define HAVE_XMLDOC_PROPERTIES 1 /* Define if libxml2 has the xmlFirstElementChild function */ #define HAVE_XMLFIRSTELEMENTCHILD 1 /* Define if libxml2 has the xmlNewDocPI function */ #define HAVE_XMLNEWDOCPI 1 /* Define if libxml2 has the xmlReadMemory function */ #define HAVE_XMLREADMEMORY 1 /* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */ #define HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS 1 /* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */ #define HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS 1 /* Define if Xrender has the XRenderCreateLinearGradient function */ /* #undef HAVE_XRENDERCREATELINEARGRADIENT */ /* Define if Xrender has the XRenderSetPictureTransform function */ /* #undef HAVE_XRENDERSETPICTURETRANSFORM */ /* Define if Xrandr has the XRRGetScreenResources function */ /* #undef HAVE_XRRGETSCREENRESOURCES */ /* Define to 1 if you have the `y0' function. */ /* #undef HAVE_Y0 */ /* Define to 1 if you have the `y1' function. */ /* #undef HAVE_Y1 */ /* Define to 1 if you have the `yn' function. */ /* #undef HAVE_YN */ /* Define to 1 if you have the `z' library (-lz). */ #define HAVE_ZLIB 1 /* Define to 1 if you have the header file. */ #define HAVE_ZLIB_H 1 /* Define to 1 if you have the `_finite' function. */ /* #undef HAVE__FINITE */ /* Define to 1 if you have the `_isnan' function. */ /* #undef HAVE__ISNAN */ /* Define to 1 if you have the `_pclose' function. */ /* #undef HAVE__PCLOSE */ /* Define to 1 if you have the `_popen' function. */ /* #undef HAVE__POPEN */ /* Define to 1 if you have the `_snprintf' function. */ /* #undef HAVE__SNPRINTF */ /* Define to 1 if you have the `_spawnvp' function. */ /* #undef HAVE__SPAWNVP */ /* Define to 1 if you have the `_strdup' function. */ /* #undef HAVE__STRDUP */ /* Define to 1 if you have the `_stricmp' function. */ /* #undef HAVE__STRICMP */ /* Define to 1 if you have the `_strnicmp' function. */ #define HAVE__STRNICMP 1 /* Define to 1 if you have the `_strtoi64' function. */ /* #undef HAVE__STRTOI64 */ /* Define to 1 if you have the `_strtoui64' function. */ /* #undef HAVE__STRTOUI64 */ /* Define to 1 if you have the `_vsnprintf' function. */ /* #undef HAVE__VSNPRINTF */ /* Define to 1 if you have the `__builtin_clz' built-in function. */ #define HAVE___BUILTIN_CLZ 1 /* Define to 1 if you have the `__builtin_popcount' built-in function. */ /* #undef HAVE___BUILTIN_POPCOUNT */ /* Define to 1 if you have the `__clear_cache' (potentially built-in) function. */ /* #undef HAVE___CLEAR_CACHE */ /* Define to 1 if you have the `__res_getservers' function. */ /* #undef HAVE___RES_GETSERVERS */ /* Define to 1 if you have the `__res_get_state' function. */ /* #undef HAVE___RES_GET_STATE */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ /* #undef MAJOR_IN_MKDEV */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ /* #undef MAJOR_IN_SYSMACROS */ /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "wine-devel@winehq.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "Wine" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "Wine 1.7.35" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "wine" /* Define to the home page for this package. */ #define PACKAGE_URL "http://www.winehq.org" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.7.35" /* Define to the soname of the libcapi20 library. */ /* #undef SONAME_LIBCAPI20 */ /* Define to the soname of the libcups library. */ /* #undef SONAME_LIBCUPS */ /* Define to the soname of the libcurses library. */ /* #undef SONAME_LIBCURSES */ /* Define to the soname of the libdbus-1 library. */ #define SONAME_LIBDBUS_1 " cygdbus-1-3.dll" /* Define to the soname of the libEGL library. */ /* #undef SONAME_LIBEGL */ /* Define to the soname of the libfontconfig library. */ #define SONAME_LIBFONTCONFIG " cygfontconfig-1.dll" /* Define to the soname of the libfreetype library. */ /* #undef SONAME_LIBFREETYPE */ /* Define to the soname of the libGL library. */ /* #undef SONAME_LIBGL */ /* Define to the soname of the libGLESv2 library. */ /* #undef SONAME_LIBGLESV2 */ /* Define to the soname of the libGLU library. */ /* #undef SONAME_LIBGLU */ /* Define to the soname of the libgnutls library. */ #define SONAME_LIBGNUTLS " cyggnutls-28.dll" /* Define to the soname of the libgsm library. */ #define SONAME_LIBGSM " cyggsm-1.dll" /* Define to the soname of the libgssapi_krb5 library. */ /* #undef SONAME_LIBGSSAPI_KRB5 */ /* Define to the soname of the libhal library. */ /* #undef SONAME_LIBHAL */ /* Define to the soname of the libjpeg library. */ #define SONAME_LIBJPEG " cygjpeg-8.dll" /* Define to the soname of the libkrb5 library. */ /* #undef SONAME_LIBKRB5 */ /* Define to the soname of the libMoltenVK library. */ /* #undef SONAME_LIBMOLTENVK */ /* Define to the soname of the libncurses library. */ #define SONAME_LIBNCURSES " cygncursesw-10.dll" /* Define to the soname of the libnetapi library. */ #define SONAME_LIBNETAPI "libnetapi.dll" /* Define to the soname of the libodbc library. */ #define SONAME_LIBODBC " cygiodbc-2.dll" /* Define to the soname of the libopenal library. */ /* #undef SONAME_LIBOPENAL */ /* Define to the soname of the libOSMesa library. */ /* #undef SONAME_LIBOSMESA */ /* Define to the soname of the libpng library. */ #define SONAME_LIBPNG " cygpng15-15.dll" /* Define to the soname of the libsane library. */ /* #undef SONAME_LIBSANE */ /* Define to the soname of the libSDL2 library. */ /* #undef SONAME_LIBSDL2 */ /* Define to the soname of the libtiff library. */ #define SONAME_LIBTIFF " cygtiff-5.dll" /* Define to the soname of the libv4l1 library. */ /* #undef SONAME_LIBV4L1 */ /* Define to the soname of the libvkd3d library. */ /* #undef SONAME_LIBVKD3D */ /* Define to the soname of the libvulkan library. */ /* #undef SONAME_LIBVULKAN */ /* Define to the soname of the libX11 library. */ /* #undef SONAME_LIBX11 */ /* Define to the soname of the libXcomposite library. */ /* #undef SONAME_LIBXCOMPOSITE */ /* Define to the soname of the libXcursor library. */ /* #undef SONAME_LIBXCURSOR */ /* Define to the soname of the libXext library. */ /* #undef SONAME_LIBXEXT */ /* Define to the soname of the libXfixes library. */ /* #undef SONAME_LIBXFIXES */ /* Define to the soname of the libXi library. */ /* #undef SONAME_LIBXI */ /* Define to the soname of the libXinerama library. */ /* #undef SONAME_LIBXINERAMA */ /* Define to the soname of the libXrandr library. */ /* #undef SONAME_LIBXRANDR */ /* Define to the soname of the libXrender library. */ /* #undef SONAME_LIBXRENDER */ /* Define to the soname of the libxslt library. */ #define SONAME_LIBXSLT " cygxslt-1.dll" /* Define to the soname of the libXxf86vm library. */ /* #undef SONAME_LIBXXF86VM */ /* Define to 1 if the `S_IS*' macros in do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if the X Window System is missing or not being used. */ #define X_DISPLAY_MISSING 1 /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ /* Define to a macro to output a .cfi assembly pseudo-op */ #define __ASM_CFI(str) str /* Define to a macro to define an assembly function */ #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"); /* Define to a macro to generate an assembly function directive */ #define __ASM_FUNC(name) ".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef" /* Define to a macro to generate an assembly function with C calling convention */ #define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code) #ifdef _MSC_VER #undef __ASM_GLOBAL_FUNC #define __ASM_GLOBAL_FUNC(name,code) #endif /* Define to a macro to generate an assembly name from a C symbol */ #define __ASM_NAME(name) name /* Define to a macro to generate an stdcall suffix */ #define __ASM_STDCALL(args) "" /* Define to a macro to generate an assembly function with stdcall calling convention */ #define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code) #undef __ASM_STDCALL_FUNC //#define __ASM_STDCALL_FUNC(name, args, code) void __stdcall name(){ERR("__ASM_STDCALL_FUNC(" #name ")\n");} #define __ASM_STDCALL_FUNC_ARG(name, ...) void __stdcall name(__VA_ARGS__){ERR("notimpl:__ASM_STDCALL_FUNC(" #name ")\n");} #define __ASM_STDCALL_FUNC_0(name) __ASM_STDCALL_FUNC_ARG(name) #define __ASM_STDCALL_FUNC_1(name) __ASM_STDCALL_FUNC_ARG(name, int a1) #define __ASM_STDCALL_FUNC_2(name) __ASM_STDCALL_FUNC_ARG(name, int a1) #define __ASM_STDCALL_FUNC_3(name) __ASM_STDCALL_FUNC_ARG(name, int a1) #define __ASM_STDCALL_FUNC_4(name) __ASM_STDCALL_FUNC_ARG(name, int a1) #define __ASM_STDCALL_FUNC_5(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2) #define __ASM_STDCALL_FUNC_6(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2) #define __ASM_STDCALL_FUNC_7(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2) #define __ASM_STDCALL_FUNC_8(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2) #define __ASM_STDCALL_FUNC_9(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2, int a3) #define __ASM_STDCALL_FUNC_JOIN(base, count) base ## count #define __ASM_STDCALL_FUNC(name, args, code) __ASM_STDCALL_FUNC_JOIN(__ASM_STDCALL_FUNC_, args) (name) /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif #endif /* WINE_CROSSTEST */ #endif /* __WINE_CONFIG_H */ ================================================ FILE: wine/debug.c ================================================ /* * Management of the debugging channels * * Copyright 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #ifdef HAVE_SYS_STAT_H # include #endif #include "wine/debug.h" #include "wine/library.h" #if defined(__MINGW32__) || defined(_MSC_VER) WINE_DECLARE_DEBUG_CHANNEL(pid); #endif static const char * const debug_classes[] = { "fixme", "err", "warn", "trace" }; #define MAX_DEBUG_OPTIONS 256 static unsigned char default_flags = (1 << __WINE_DBCL_ERR) | (1 << __WINE_DBCL_FIXME); static int nb_debug_options = -1; static struct __wine_debug_channel debug_options[MAX_DEBUG_OPTIONS]; static struct __wine_debug_functions funcs; static void debug_init(void); static int cmp_name( const void *p1, const void *p2 ) { const char *name = p1; const struct __wine_debug_channel *chan = p2; return strcmp( name, chan->name ); } /* get the flags to use for a given channel, possibly setting them too in case of lazy init */ unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel ) { if (nb_debug_options == -1) debug_init(); if (nb_debug_options) { struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options, sizeof(debug_options[0]), cmp_name ); if (opt) return opt->flags; } /* no option for this channel */ if (channel->flags & (1 << __WINE_DBCL_INIT)) channel->flags = default_flags; return default_flags; } /* set the flags to use for a given channel; return 0 if the channel is not available to set */ int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel, unsigned char set, unsigned char clear ) { if (nb_debug_options == -1) debug_init(); if (nb_debug_options) { struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options, sizeof(debug_options[0]), cmp_name ); if (opt) { opt->flags = (opt->flags & ~clear) | set; return 1; } } return 0; } /* add a new debug option at the end of the option list */ static void add_option( const char *name, unsigned char set, unsigned char clear ) { int min = 0, max = nb_debug_options - 1, pos, res; if (!name[0]) /* "all" option */ { default_flags = (default_flags & ~clear) | set; return; } if (strlen(name) >= sizeof(debug_options[0].name)) return; while (min <= max) { pos = (min + max) / 2; res = strcmp( name, debug_options[pos].name ); if (!res) { debug_options[pos].flags = (debug_options[pos].flags & ~clear) | set; return; } if (res < 0) max = pos - 1; else min = pos + 1; } if (nb_debug_options >= MAX_DEBUG_OPTIONS) return; pos = min; if (pos < nb_debug_options) memmove( &debug_options[pos + 1], &debug_options[pos], (nb_debug_options - pos) * sizeof(debug_options[0]) ); strcpy( debug_options[pos].name, name ); debug_options[pos].flags = (default_flags & ~clear) | set; nb_debug_options++; } /* parse a set of debugging option specifications and add them to the option list */ static void parse_options( const char *str ) { char *opt, *next, *options; unsigned int i; if (!(options = strdup(str))) return; for (opt = options; opt; opt = next) { const char *p; unsigned char set = 0, clear = 0; if ((next = strchr( opt, ',' ))) *next++ = 0; p = opt + strcspn( opt, "+-" ); if (!p[0]) p = opt; /* assume it's a debug channel name */ if (p > opt) { for (i = 0; i < sizeof(debug_classes)/sizeof(debug_classes[0]); i++) { int len = strlen(debug_classes[i]); if (len != (p - opt)) continue; if (!memcmp( opt, debug_classes[i], len )) /* found it */ { if (*p == '+') set |= 1 << i; else clear |= 1 << i; break; } } if (i == sizeof(debug_classes)/sizeof(debug_classes[0])) /* bad class name, skip it */ continue; } else { if (*p == '-') clear = ~0; else set = ~0; } if (*p == '+' || *p == '-') p++; if (!p[0]) continue; if (!strcmp( p, "all" )) default_flags = (default_flags & ~clear) | set; else add_option( p, set, clear ); } free( options ); } /* print the usage message */ static void debug_usage(void) { static const char usage[] = "Syntax of the WINEDEBUG variable:\n" " WINEDEBUG=[class]+xxx,[class]-yyy,...\n\n" "Example: WINEDEBUG=+all,warn-heap\n" " turns on all messages except warning heap messages\n" "Available message classes: err, warn, fixme, trace\n"; write( 2, usage, sizeof(usage) - 1 ); exit(1); } /* initialize all options at startup */ static void debug_init(void) { char *wine_debug; struct stat st1, st2; if (nb_debug_options != -1) return; /* already initialized */ nb_debug_options = 0; /* check for stderr pointing to /dev/null */ if (!fstat( 2, &st1 ) && S_ISCHR(st1.st_mode) && !stat( "/dev/null", &st2 ) && S_ISCHR(st2.st_mode) && st1.st_rdev == st2.st_rdev) { default_flags = 0; return; } if ((wine_debug = getenv("WINEDEBUG"))) { if (!strcmp( wine_debug, "help" )) debug_usage(); parse_options( wine_debug ); } } /* varargs wrapper for funcs.dbg_vprintf */ int wine_dbg_printf( const char *format, ... ) { int ret; va_list valist; va_start(valist, format); ret = funcs.dbg_vprintf( format, valist ); va_end(valist); return ret; } /* printf with temp buffer allocation */ const char *wine_dbg_sprintf( const char *format, ... ) { static const int max_size = 200; char *ret; int len; va_list valist; va_start(valist, format); ret = funcs.get_temp_buffer( max_size ); len = vsnprintf( ret, max_size, format, valist ); if (len == -1 || len >= max_size) ret[max_size-1] = 0; else funcs.release_temp_buffer( ret, len + 1 ); va_end(valist); return ret; } /* varargs wrapper for funcs.dbg_vlog */ int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *channel, const char *func, const char *format, ... ) { int ret; va_list valist; if (!(__wine_dbg_get_channel_flags( channel ) & (1 << cls))) return -1; va_start(valist, format); ret = funcs.dbg_vlog( cls, channel, func, format, valist ); va_end(valist); return ret; } #ifdef _MSC_VER __declspec(naked) int interlocked_xchg_add(int *dest, int incr) { __asm mov eax, 8[esp]; __asm mov edx, 4[esp]; __asm lock xadd[edx], eax; __asm ret; } #endif /* allocate some tmp string space */ /* FIXME: this is not 100% thread-safe */ static char *get_temp_buffer( size_t size ) { static char *list[32]; static int pos; char *ret; int idx; idx = interlocked_xchg_add( &pos, 1 ) % (sizeof(list)/sizeof(list[0])); if ((ret = realloc( list[idx], size ))) list[idx] = ret; return ret; } /* release unused part of the buffer */ static void release_temp_buffer( char *buffer, size_t size ) { /* don't bother doing anything */ } /* default implementation of wine_dbgstr_an */ static const char *default_dbgstr_an( const char *str, int n ) { static const char hex[16] = "0123456789abcdef"; char *dst, *res; size_t size; if (!((ULONG_PTR)str >> 16)) { if (!str) return "(null)"; res = funcs.get_temp_buffer( 6 ); sprintf( res, "#%04x", LOWORD(str) ); return res; } if (n == -1) n = strlen(str); if (n < 0) n = 0; size = 10 + min( 300, n * 4 ); dst = res = funcs.get_temp_buffer( size ); *dst++ = '"'; while (n-- > 0 && dst <= res + size - 9) { unsigned char c = *str++; switch (c) { case '\n': *dst++ = '\\'; *dst++ = 'n'; break; case '\r': *dst++ = '\\'; *dst++ = 'r'; break; case '\t': *dst++ = '\\'; *dst++ = 't'; break; case '"': *dst++ = '\\'; *dst++ = '"'; break; case '\\': *dst++ = '\\'; *dst++ = '\\'; break; default: *dst++ = c; break;//for multibyte char /* if (c >= ' ' && c <= 126) *dst++ = c; else { *dst++ = '\\'; *dst++ = 'x'; *dst++ = hex[(c >> 4) & 0x0f]; *dst++ = hex[c & 0x0f]; }*/ } } *dst++ = '"'; if (n > 0) { *dst++ = '.'; *dst++ = '.'; *dst++ = '.'; } *dst++ = 0; funcs.release_temp_buffer( res, dst - res ); return res; } /* default implementation of wine_dbgstr_wn */ static const char *default_dbgstr_wn( const WCHAR *str, int n ) { char *dst, *res; size_t size; if (!((ULONG_PTR)str >> 16)) { if (!str) return "(null)"; res = funcs.get_temp_buffer( 6 ); sprintf( res, "#%04x", LOWORD(str) ); return res; } if (n == -1) { const WCHAR *end = str; while (*end) end++; n = end - str; } if (n < 0) n = 0; size = 12 + min( 300, n * 5 ); dst = res = funcs.get_temp_buffer( size ); *dst++ = 'L'; *dst++ = '"'; while (n-- > 0 && dst <= res + size - 10) { WCHAR c = *str++; switch (c) { case '\n': *dst++ = '\\'; *dst++ = 'n'; break; case '\r': *dst++ = '\\'; *dst++ = 'r'; break; case '\t': *dst++ = '\\'; *dst++ = 't'; break; case '"': *dst++ = '\\'; *dst++ = '"'; break; case '\\': *dst++ = '\\'; *dst++ = '\\'; break; default: if (c >= ' ' && c <= 126) *dst++ = c; else { *dst++ = '\\'; sprintf(dst,"%04x",c); dst+=4; } } } *dst++ = '"'; if (n > 0) { *dst++ = '.'; *dst++ = '.'; *dst++ = '.'; } *dst++ = 0; funcs.release_temp_buffer( res, dst - res ); return res; } /* default implementation of wine_dbg_vprintf */ static int default_dbg_vprintf( const char *format, va_list args ) { return vfprintf( stderr, format, args ); } /* default implementation of wine_dbg_vlog */ static int default_dbg_vlog( enum __wine_debug_class cls, struct __wine_debug_channel *channel, const char *func, const char *format, va_list args ) { int ret = 0; #if defined(__MINGW32__) || defined(_MSC_VER) if (TRACE_ON(pid)) ret += wine_dbg_printf( "%04x:", GetCurrentProcessId() ); ret += wine_dbg_printf( "%04x:", GetCurrentThreadId() ); #endif if (cls < sizeof(debug_classes)/sizeof(debug_classes[0])) ret += wine_dbg_printf( "%s:%s:%s ", debug_classes[cls], channel->name, func ); if (format) ret += funcs.dbg_vprintf( format, args ); return ret; } /* wrappers to use the function pointers */ const char *wine_dbgstr_an( const char * s, int n ) { return funcs.dbgstr_an(s, n); } const char *wine_dbgstr_wn( const WCHAR *s, int n ) { return funcs.dbgstr_wn(s, n); } void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs, struct __wine_debug_functions *old_funcs, size_t size ) { if (old_funcs) memcpy( old_funcs, &funcs, min(sizeof(funcs),size) ); if (new_funcs) memcpy( &funcs, new_funcs, min(sizeof(funcs),size) ); } static struct __wine_debug_functions funcs = { get_temp_buffer, release_temp_buffer, default_dbgstr_an, default_dbgstr_wn, default_dbg_vprintf, default_dbg_vlog }; ================================================ FILE: wine/ldt.c ================================================ /* * LDT manipulation functions * * Copyright 1993 Robert J. Amstadt * Copyright 1995 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wine/library.h" #if defined(__i386__) && !defined(__MINGW32__) && !defined(_MSC_VER) #ifdef __linux__ #ifdef HAVE_SYS_SYSCALL_H # include #endif struct modify_ldt_s { unsigned int entry_number; unsigned long base_addr; unsigned int limit; unsigned int seg_32bit : 1; unsigned int contents : 2; unsigned int read_exec_only : 1; unsigned int limit_in_pages : 1; unsigned int seg_not_present : 1; unsigned int usable : 1; unsigned int garbage : 25; }; static inline void fill_modify_ldt_struct( struct modify_ldt_s *ptr, const LDT_ENTRY *entry ) { ptr->base_addr = (unsigned long)wine_ldt_get_base(entry); ptr->limit = entry->LimitLow | (entry->HighWord.Bits.LimitHi << 16); ptr->seg_32bit = entry->HighWord.Bits.Default_Big; ptr->contents = (entry->HighWord.Bits.Type >> 2) & 3; ptr->read_exec_only = !(entry->HighWord.Bits.Type & 2); ptr->limit_in_pages = entry->HighWord.Bits.Granularity; ptr->seg_not_present = !entry->HighWord.Bits.Pres; ptr->usable = entry->HighWord.Bits.Sys; ptr->garbage = 0; } static inline int modify_ldt( int func, struct modify_ldt_s *ptr, unsigned long count ) { return syscall( 123 /* SYS_modify_ldt */, func, ptr, count ); } static inline int set_thread_area( struct modify_ldt_s *ptr ) { return syscall( 243 /* SYS_set_thread_area */, ptr ); } #endif /* linux */ #if defined(__svr4__) || defined(_SCO_DS) #include #ifndef __sun__ #include #endif #endif #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__) #include #include #endif /* __NetBSD__ || __FreeBSD__ || __OpenBSD__ */ #ifdef __GNU__ #include #include #endif #ifdef __APPLE__ #include #endif /* local copy of the LDT */ #ifdef __APPLE__ struct __wine_ldt_copy wine_ldt_copy = { { 0, 0, 0 } }; #else struct __wine_ldt_copy wine_ldt_copy; #endif static const LDT_ENTRY null_entry; /* all-zeros, used to clear LDT entries */ #define LDT_FIRST_ENTRY 512 #define LDT_SIZE 8192 /* empty function for default locks */ static void nop(void) { } static void (*lock_ldt)(void) = nop; static void (*unlock_ldt)(void) = nop; static inline int is_gdt_sel( unsigned short sel ) { return !(sel & 4); } /*********************************************************************** * wine_ldt_init_locking * * Set the LDT locking/unlocking functions. */ void wine_ldt_init_locking( void (*lock_func)(void), void (*unlock_func)(void) ) { lock_ldt = lock_func; unlock_ldt = unlock_func; } /*********************************************************************** * wine_ldt_get_entry * * Retrieve an LDT entry. Return a null entry if selector is not allocated. */ void wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry ) { int index = sel >> 3; if (is_gdt_sel(sel)) { *entry = null_entry; return; } lock_ldt(); if (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED) { wine_ldt_set_base( entry, wine_ldt_copy.base[index] ); wine_ldt_set_limit( entry, wine_ldt_copy.limit[index] ); wine_ldt_set_flags( entry, wine_ldt_copy.flags[index] ); } else *entry = null_entry; unlock_ldt(); } /*********************************************************************** * internal_set_entry * * Set an LDT entry, without locking. For internal use only. */ static int internal_set_entry( unsigned short sel, const LDT_ENTRY *entry ) { int ret = 0, index = sel >> 3; if (index < LDT_FIRST_ENTRY) return 0; /* cannot modify reserved entries */ #ifdef linux { struct modify_ldt_s ldt_info; ldt_info.entry_number = index; fill_modify_ldt_struct( &ldt_info, entry ); if ((ret = modify_ldt(0x11, &ldt_info, sizeof(ldt_info))) < 0) perror( "modify_ldt" ); } #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__) { LDT_ENTRY entry_copy = *entry; /* The kernel will only let us set LDTs with user priority level */ if (entry_copy.HighWord.Bits.Pres && entry_copy.HighWord.Bits.Dpl != 3) entry_copy.HighWord.Bits.Dpl = 3; ret = i386_set_ldt(index, (union descriptor *)&entry_copy, 1); if (ret < 0) { perror("i386_set_ldt"); fprintf( stderr, "Did you reconfigure the kernel with \"options USER_LDT\"?\n" ); exit(1); } } #elif defined(__svr4__) || defined(_SCO_DS) { struct ssd ldt_mod; ldt_mod.sel = sel; ldt_mod.bo = (unsigned long)wine_ldt_get_base(entry); ldt_mod.ls = entry->LimitLow | (entry->HighWord.Bits.LimitHi << 16); ldt_mod.acc1 = entry->HighWord.Bytes.Flags1; ldt_mod.acc2 = entry->HighWord.Bytes.Flags2 >> 4; if ((ret = sysi86(SI86DSCR, &ldt_mod)) == -1) perror("sysi86"); } #elif defined(__APPLE__) if ((ret = i386_set_ldt(index, (union ldt_entry *)entry, 1)) < 0) perror("i386_set_ldt"); #elif defined(__GNU__) if ((ret = i386_set_ldt(mach_thread_self(), sel, (descriptor_list_t)entry, 1)) != KERN_SUCCESS) perror("i386_set_ldt"); #else fprintf( stderr, "No LDT support on this platform\n" ); exit(1); #endif if (ret >= 0) { wine_ldt_copy.base[index] = wine_ldt_get_base(entry); wine_ldt_copy.limit[index] = wine_ldt_get_limit(entry); wine_ldt_copy.flags[index] = (entry->HighWord.Bits.Type | (entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) | (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED)); } return ret; } /*********************************************************************** * wine_ldt_set_entry * * Set an LDT entry. */ int wine_ldt_set_entry( unsigned short sel, const LDT_ENTRY *entry ) { int ret; lock_ldt(); ret = internal_set_entry( sel, entry ); unlock_ldt(); return ret; } /*********************************************************************** * wine_ldt_is_system * * Check if the selector is a system selector (i.e. not managed by Wine). */ int wine_ldt_is_system( unsigned short sel ) { return is_gdt_sel(sel) || ((sel >> 3) < LDT_FIRST_ENTRY); } /*********************************************************************** * wine_ldt_get_ptr * * Convert a segment:offset pair to a linear pointer. * Note: we don't lock the LDT since this has to be fast. */ void *wine_ldt_get_ptr( unsigned short sel, unsigned long offset ) { int index; if (is_gdt_sel(sel)) /* GDT selector */ return (void *)offset; if ((index = (sel >> 3)) < LDT_FIRST_ENTRY) /* system selector */ return (void *)offset; if (!(wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_32BIT)) offset &= 0xffff; return (char *)wine_ldt_copy.base[index] + offset; } /*********************************************************************** * wine_ldt_alloc_entries * * Allocate a number of consecutive ldt entries, without setting the LDT contents. * Return a selector for the first entry. */ unsigned short wine_ldt_alloc_entries( int count ) { int i, index, size = 0; if (count <= 0) return 0; lock_ldt(); for (i = LDT_FIRST_ENTRY; i < LDT_SIZE; i++) { if (wine_ldt_copy.flags[i] & WINE_LDT_FLAGS_ALLOCATED) size = 0; else if (++size >= count) /* found a large enough block */ { index = i - size + 1; /* mark selectors as allocated */ for (i = 0; i < count; i++) wine_ldt_copy.flags[index + i] |= WINE_LDT_FLAGS_ALLOCATED; unlock_ldt(); return (index << 3) | 7; } } unlock_ldt(); return 0; } /*********************************************************************** * wine_ldt_realloc_entries * * Reallocate a number of consecutive ldt entries, without changing the LDT contents. * Return a selector for the first entry. */ unsigned short wine_ldt_realloc_entries( unsigned short sel, int oldcount, int newcount ) { int i; if (oldcount < newcount) /* we need to add selectors */ { int index = sel >> 3; lock_ldt(); /* check if the next selectors are free */ if (index + newcount > LDT_SIZE) i = oldcount; else for (i = oldcount; i < newcount; i++) if (wine_ldt_copy.flags[index+i] & WINE_LDT_FLAGS_ALLOCATED) break; if (i < newcount) /* they are not free */ { wine_ldt_free_entries( sel, oldcount ); sel = wine_ldt_alloc_entries( newcount ); } else /* mark the selectors as allocated */ { for (i = oldcount; i < newcount; i++) wine_ldt_copy.flags[index+i] |= WINE_LDT_FLAGS_ALLOCATED; } unlock_ldt(); } else if (oldcount > newcount) /* we need to remove selectors */ { wine_ldt_free_entries( sel + (newcount << 3), newcount - oldcount ); } return sel; } /*********************************************************************** * wine_ldt_free_entries * * Free a number of consecutive ldt entries and clear their contents. */ void wine_ldt_free_entries( unsigned short sel, int count ) { int index; lock_ldt(); for (index = sel >> 3; count > 0; count--, index++) { internal_set_entry( sel, &null_entry ); wine_ldt_copy.flags[index] = 0; } unlock_ldt(); } static int global_fs_sel = -1; /* global selector for %fs shared among all threads */ /*********************************************************************** * wine_ldt_alloc_fs * * Allocate an LDT entry for a %fs selector, reusing a global * GDT selector if possible. Return the selector value. */ unsigned short wine_ldt_alloc_fs(void) { if (global_fs_sel == -1) { #ifdef __linux__ struct modify_ldt_s ldt_info; int ret; /* the preloader may have allocated it already */ global_fs_sel = wine_get_fs(); if (global_fs_sel && is_gdt_sel(global_fs_sel)) return global_fs_sel; memset( &ldt_info, 0, sizeof(ldt_info) ); ldt_info.entry_number = -1; ldt_info.seg_32bit = 1; ldt_info.usable = 1; if ((ret = set_thread_area( &ldt_info ) < 0)) { global_fs_sel = 0; /* don't try it again */ if (errno != ENOSYS) perror( "set_thread_area" ); } else global_fs_sel = (ldt_info.entry_number << 3) | 3; #elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__) global_fs_sel = GSEL( GUFS_SEL, SEL_UPL ); #endif } if (global_fs_sel > 0) return global_fs_sel; return wine_ldt_alloc_entries( 1 ); } /*********************************************************************** * wine_ldt_init_fs * * Initialize the entry for the %fs selector of the current thread, and * set the thread %fs register. * * Note: this runs in the context of the new thread, so cannot acquire locks. */ void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry ) { if ((sel & ~3) == (global_fs_sel & ~3)) { #ifdef __linux__ struct modify_ldt_s ldt_info; int ret; ldt_info.entry_number = sel >> 3; fill_modify_ldt_struct( &ldt_info, entry ); if ((ret = set_thread_area( &ldt_info ) < 0)) perror( "set_thread_area" ); #elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__) i386_set_fsbase( wine_ldt_get_base( entry )); #endif } else /* LDT selector */ { internal_set_entry( sel, entry ); } wine_set_fs( sel ); } /*********************************************************************** * wine_ldt_free_fs * * Free a %fs selector returned by wine_ldt_alloc_fs. */ void wine_ldt_free_fs( unsigned short sel ) { if (is_gdt_sel(sel)) return; /* nothing to do */ if (!((wine_get_fs() ^ sel) & ~3)) { /* FIXME: if freeing current %fs we cannot acquire locks */ wine_set_fs( 0 ); internal_set_entry( sel, &null_entry ); wine_ldt_copy.flags[sel >> 3] = 0; } else wine_ldt_free_entries( sel, 1 ); } /*********************************************************************** * selector access functions */ __ASM_GLOBAL_FUNC( wine_get_cs, "movw %cs,%ax\n\tret" ) __ASM_GLOBAL_FUNC( wine_get_ds, "movw %ds,%ax\n\tret" ) __ASM_GLOBAL_FUNC( wine_get_es, "movw %es,%ax\n\tret" ) __ASM_GLOBAL_FUNC( wine_get_fs, "movw %fs,%ax\n\tret" ) __ASM_GLOBAL_FUNC( wine_get_gs, "movw %gs,%ax\n\tret" ) __ASM_GLOBAL_FUNC( wine_get_ss, "movw %ss,%ax\n\tret" ) __ASM_GLOBAL_FUNC( wine_set_fs, "movl 4(%esp),%eax\n\tmovw %ax,%fs\n\tret" ) __ASM_GLOBAL_FUNC( wine_set_gs, "movl 4(%esp),%eax\n\tmovw %ax,%gs\n\tret" ) #endif /* __i386__ */ ================================================ FILE: wine/ldt2.c ================================================ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wine/library.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ldt); static inline int is_gdt_sel(unsigned short sel) { return !(sel & 4); } static const LDT_ENTRY null_entry; /* all-zeros, used to clear LDT entries */ struct __wine_ldt_copy wine_ldt_copy; LDT_ENTRY wine_ldt[8192]; // windows allocates selectors from a linked list of avaliable so // if a sel is freed, the next alloced will be the last freed, simulate for one static WORD last_freed = 0; /* empty function for default locks */ static void nop(void) { } static void(*lock_ldt)(void) = nop; static void(*unlock_ldt)(void) = nop; #define LDT_FIRST_ENTRY 512 #define LDT_SIZE 8192 /*********************************************************************** * wine_ldt_get_ptr * * Convert a segment:offset pair to a linear pointer. * Note: we don't lock the LDT since this has to be fast. */ void *wine_ldt_get_ptr(unsigned short sel, unsigned long offset) { int index; if (is_gdt_sel(sel)) /* GDT selector */ return (void *)offset; if ((index = (sel >> 3)) < LDT_FIRST_ENTRY) /* system selector */ return (void *)offset; if (!(wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_32BIT)) offset &= 0xffff; return (char *)wine_ldt_copy.base[index] + offset; } static BOOL intel_vt_x_workaround = FALSE; static void (*intel_vt_x_workaround_update_entry)(int seg, const LDT_ENTRY *entry); void set_intel_vt_x_workaround(void(*func)(int seg, const LDT_ENTRY *entry)) { intel_vt_x_workaround = TRUE; intel_vt_x_workaround_update_entry = func; for (int index = LDT_FIRST_ENTRY; index < LDT_SIZE; index++) { if (intel_vt_x_workaround_update_entry) intel_vt_x_workaround_update_entry(index << 3, wine_ldt + index); } } /*********************************************************************** * wine_ldt_set_entry * * Set an LDT entry. */ int wine_ldt_set_entry(unsigned short sel, const LDT_ENTRY *entry) { int ret = 0, index = sel >> 3; ret = TRUE; if (ret >= 0) { wine_ldt[index] = *entry; if (intel_vt_x_workaround) { intel_vt_x_workaround_update_entry(sel, entry); } wine_ldt_copy.base[index] = wine_ldt_get_base(entry); wine_ldt_copy.limit[index] = wine_ldt_get_limit(entry); wine_ldt_copy.flags[index] = (entry->HighWord.Bits.Type | (entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) | (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED)); } TRACE("wine_ldt_set_entry(0x%04X, %p)\n", sel, entry); return 0; } /*********************************************************************** * wine_ldt_get_entry * * Retrieve an LDT entry. Return a null entry if selector is not allocated. */ void wine_ldt_get_entry(unsigned short sel, LDT_ENTRY *entry) { int index = sel >> 3; if (is_gdt_sel(sel)) { *entry = null_entry; return; } lock_ldt(); if (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED) { wine_ldt_set_base(entry, wine_ldt_copy.base[index]); wine_ldt_set_limit(entry, wine_ldt_copy.limit[index]); wine_ldt_set_flags(entry, wine_ldt_copy.flags[index]); } else *entry = null_entry; unlock_ldt(); TRACE("wine_ldt_get_entry(0x%04X, %p)\n", sel, entry); return; } /*********************************************************************** * wine_ldt_alloc_entries * * Allocate a number of consecutive ldt entries, without setting the LDT contents. * Return a selector for the first entry. */ unsigned short sel = 0x1000; unsigned short wine_ldt_alloc_entries(int count) { int i, index, size = 0; if (count <= 0) { TRACE("wine_ldt_alloc_entries(%d) = %d\n", count, 0); return 0; } lock_ldt(); if ((count == 1) && last_freed) { WORD e = last_freed >> 3; last_freed = 0; if (!(wine_ldt_copy.flags[e] & WINE_LDT_FLAGS_ALLOCATED)) { wine_ldt_copy.flags[e] |= WINE_LDT_FLAGS_ALLOCATED; unlock_ldt(); return (e << 3) | 7; } } for (i = LDT_FIRST_ENTRY; i < LDT_SIZE; i++) { if (wine_ldt_copy.flags[i] & WINE_LDT_FLAGS_ALLOCATED) size = 0; else if (++size >= count) /* found a large enough block */ { index = i - size + 1; /* mark selectors as allocated */ for (i = 0; i < count; i++) wine_ldt_copy.flags[index + i] |= WINE_LDT_FLAGS_ALLOCATED; unlock_ldt(); //DPRINTF("NOTIMPL:wine_ldt_alloc_entries(%d) = %d\n", count, (index << 3) | 7); return (index << 3) | 7; } } unlock_ldt(); TRACE("wine_ldt_alloc_entries(%d) = %d\n", count, 0); return 0; TRACE("wine_ldt_alloc_entries(%d) = %d\n", count, sel); count *= 0x10000; unsigned short e = sel; sel += (count + 16) / 16; return e; } /*********************************************************************** * wine_ldt_realloc_entries * * Reallocate a number of consecutive ldt entries, without changing the LDT contents. * Return a selector for the first entry. */ #include unsigned short wine_ldt_realloc_entries(unsigned short sel, int oldcount, int newcount) { int i; if (oldcount < newcount) /* we need to add selectors */ { int index = sel >> 3; lock_ldt(); /* check if the next selectors are free */ if (index + newcount > LDT_SIZE) i = oldcount; else for (i = oldcount; i < newcount; i++) if (wine_ldt_copy.flags[index + i] & WINE_LDT_FLAGS_ALLOCATED) break; if (i < newcount) /* they are not free */ { wine_ldt_free_entries(sel, oldcount); sel = wine_ldt_alloc_entries(newcount); } else /* mark the selectors as allocated */ { for (i = oldcount; i < newcount; i++) wine_ldt_copy.flags[index + i] |= WINE_LDT_FLAGS_ALLOCATED; } unlock_ldt(); } else if (oldcount > newcount) /* we need to remove selectors */ { wine_ldt_free_entries(sel + (newcount << 3), newcount - oldcount); } return sel; TRACE("wine_ldt_realloc_entries(0x%04X,%d,%d)\n", sel, oldcount, newcount); return 0; } /*********************************************************************** * internal_set_entry * * Set an LDT entry, without locking. For internal use only. */ static int internal_set_entry(unsigned short sel, const LDT_ENTRY *entry) { int ret = 0, index = sel >> 3; if (ret >= 0) { wine_ldt[index] = *entry; wine_ldt_copy.base[index] = wine_ldt_get_base(entry); wine_ldt_copy.limit[index] = wine_ldt_get_limit(entry); wine_ldt_copy.flags[index] = (entry->HighWord.Bits.Type | (entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) | (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED)); } return ret; } /*********************************************************************** * wine_ldt_free_entries * * Free a number of consecutive ldt entries and clear their contents. */ void wine_ldt_free_entries(unsigned short sel, int count) { int index; lock_ldt(); for (index = sel >> 3; count > 0; count--, index++) { internal_set_entry(sel, &null_entry); wine_ldt_copy.flags[index] = 0; } last_freed = sel; unlock_ldt(); TRACE("wine_ldt_free_entries(0x%04X,%d)\n", sel, count); } /*********************************************************************** * wine_ldt_is_system * * Check if the selector is a system selector (i.e. not managed by Wine). */ int wine_ldt_is_system(unsigned short sel) { return is_gdt_sel(sel) || ((sel >> 3) < LDT_FIRST_ENTRY); TRACE("wine_ldt_is_system(%04X)\n", sel); return 0; } #if USE_SREG_WORKAROUND /*********************************************************************** * selector access functions */ # if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) # define __DEFINE_GET_SEG(seg) \ unsigned short wine_get_##seg(void) \ { unsigned short res; __asm__ __volatile__("movw %%" #seg ",%w0" : "=r"(res)); return res; } # define __DEFINE_SET_SEG(seg) \ void wine_set_##seg(unsigned int val) \ { __asm__("movw %w0,%%" #seg : : "r" (val)); } # elif defined(_MSC_VER) /* This cache is a workaround for ARM64 mac. */ # define __DEFINE_GET_SEG(seg) \ unsigned short wine_get_##seg(void) \ {\ static int cache;\ static unsigned short res;\ if (!cache)\ {\ cache = 1;\ __asm { mov res, seg }\ }\ return res;\ } # define __DEFINE_SET_SEG(seg) \ void wine_set_##seg(unsigned int val) { __asm { mov seg, word ptr [val] } } # else /* __GNUC__ || _MSC_VER */ # endif /* __GNUC__ || _MSC_VER */ __DEFINE_GET_SEG(cs) __DEFINE_GET_SEG(ds) __DEFINE_GET_SEG(es) __DEFINE_GET_SEG(fs) __DEFINE_GET_SEG(gs) __DEFINE_GET_SEG(ss) __DEFINE_SET_SEG(fs) __DEFINE_SET_SEG(gs) #undef __DEFINE_GET_SEG #undef __DEFINE_SET_SEG #endif ================================================ FILE: wine/port.h ================================================ /* * Wine porting definitions * * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_PORT_H #define __WINE_WINE_PORT_H #ifndef __WINE_CONFIG_H # error You must include config.h to use this header #endif #ifdef __WINE_BASETSD_H # error You must include port.h before all other headers #endif #ifndef _GNU_SOURCE # define _GNU_SOURCE /* for pread/pwrite, isfinite */ #endif #include #include #include #include #ifdef HAVE_DIRECT_H # include #endif #ifdef HAVE_IO_H # include #endif #ifdef HAVE_PROCESS_H # include #endif #include #include #ifdef HAVE_UNISTD_H # include #endif /**************************************************************** * Type definitions */ #if !defined(_MSC_VER) && !defined(__int64) # if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64) # define __int64 long # else # define __int64 long long # endif #endif #ifndef HAVE_MODE_T typedef int mode_t; #endif #ifndef HAVE_OFF_T typedef long off_t; #endif #ifndef HAVE_PID_T typedef int pid_t; #endif #ifndef HAVE_SIZE_T typedef unsigned int size_t; #endif #ifndef HAVE_SSIZE_T typedef int ssize_t; #endif #ifndef HAVE_FSBLKCNT_T typedef unsigned long fsblkcnt_t; #endif #ifndef HAVE_FSFILCNT_T typedef unsigned long fsfilcnt_t; #endif #ifndef HAVE_STRUCT_STATVFS_F_BLOCKS struct statvfs { unsigned long f_bsize; unsigned long f_frsize; fsblkcnt_t f_blocks; fsblkcnt_t f_bfree; fsblkcnt_t f_bavail; fsfilcnt_t f_files; fsfilcnt_t f_ffree; fsfilcnt_t f_favail; unsigned long f_fsid; unsigned long f_flag; unsigned long f_namemax; }; #endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */ /**************************************************************** * Macro definitions */ #ifdef HAVE_DLFCN_H #include #else #define RTLD_LAZY 0x001 #define RTLD_NOW 0x002 #define RTLD_GLOBAL 0x100 #endif #ifdef HAVE_ONE_ARG_MKDIR #define mkdir(path,mode) mkdir(path) #endif #if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE) #define ftruncate chsize #endif #if !defined(HAVE_POPEN) && defined(HAVE__POPEN) #define popen _popen #endif #if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE) #define pclose _pclose #endif #if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP) #define strdup _strdup #endif #if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF) #define snprintf _snprintf #endif #if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF) #define vsnprintf _vsnprintf #endif #if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64) #define strtoll _strtoi64 #endif #if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64) #define strtoull _strtoui64 #endif #ifndef S_ISLNK # define S_ISLNK(mod) (0) #endif #ifndef S_ISSOCK # define S_ISSOCK(mod) (0) #endif #ifndef S_ISDIR # define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR) #endif #ifndef S_ISCHR # define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR) #endif #ifndef S_ISFIFO # define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO) #endif #ifndef S_ISREG # define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG) #endif /* So we open files in 64 bit access mode on Linux */ #ifndef O_LARGEFILE # define O_LARGEFILE 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK 0 #endif #ifndef O_BINARY # define O_BINARY 0 #endif /**************************************************************** * Constants */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #ifndef M_PI_2 #define M_PI_2 1.570796326794896619 #endif #ifndef INFINITY static inline float __port_infinity(void) { static const unsigned __inf_bytes = 0x7f800000; return *(const float *)&__inf_bytes; } #define INFINITY __port_infinity() #endif #ifndef NAN static inline float __port_nan(void) { static const unsigned __nan_bytes = 0x7fc00000; return *(const float *)&__nan_bytes; } #define NAN __port_nan() #endif /**************************************************************** * Function definitions (only when using libwine_port) */ #ifndef NO_LIBWINE_PORT #ifndef HAVE_FSTATVFS int fstatvfs( int fd, struct statvfs *buf ); #endif #ifndef HAVE_GETOPT_LONG_ONLY extern char *optarg; extern int optind; extern int opterr; extern int optopt; struct option; #ifndef HAVE_STRUCT_OPTION_NAME struct option { const char *name; int has_arg; int *flag; int val; }; #endif extern int getopt_long (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); extern int getopt_long_only (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); #endif /* HAVE_GETOPT_LONG_ONLY */ #ifndef HAVE_FFS int ffs( int x ); #endif #ifndef HAVE_ISFINITE int isfinite(double x); #endif #ifndef HAVE_ISINF int isinf(double x); #endif #ifndef HAVE_ISNAN int isnan(double x); #endif #ifndef HAVE_LLRINT __int64 llrint(double x); #endif #ifndef HAVE_LLRINTF __int64 llrintf(float x); #endif #ifndef HAVE_LRINT long lrint(double x); #endif #ifndef HAVE_LRINTF long lrintf(float x); #endif #ifndef HAVE_LSTAT int lstat(const char *file_name, struct stat *buf); #endif /* HAVE_LSTAT */ #ifndef HAVE_MEMMOVE void *memmove(void *dest, const void *src, size_t len); #endif /* !defined(HAVE_MEMMOVE) */ #ifndef HAVE_POLL struct pollfd { int fd; short events; short revents; }; #define POLLIN 0x01 #define POLLPRI 0x02 #define POLLOUT 0x04 #define POLLERR 0x08 #define POLLHUP 0x10 #define POLLNVAL 0x20 int poll( struct pollfd *fds, unsigned int count, int timeout ); #endif /* HAVE_POLL */ #ifndef HAVE_PREAD ssize_t pread( int fd, void *buf, size_t count, off_t offset ); #endif /* HAVE_PREAD */ #ifndef HAVE_PWRITE ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset ); #endif /* HAVE_PWRITE */ #ifndef HAVE_READLINK int readlink( const char *path, char *buf, size_t size ); #endif /* HAVE_READLINK */ #ifndef HAVE_RINT double rint(double x); #endif #ifndef HAVE_RINTF float rintf(float x); #endif #ifndef HAVE_STATVFS int statvfs( const char *path, struct statvfs *buf ); #endif #ifndef HAVE_STRNCASECMP # ifndef HAVE__STRNICMP int strncasecmp(const char *str1, const char *str2, size_t n); # else # define strncasecmp _strnicmp # endif #endif /* !defined(HAVE_STRNCASECMP) */ #ifndef HAVE_STRNLEN size_t strnlen( const char *str, size_t maxlen ); #endif /* !defined(HAVE_STRNLEN) */ #ifndef HAVE_STRERROR const char *strerror(int err); #endif /* !defined(HAVE_STRERROR) */ #ifndef HAVE_STRCASECMP # ifndef HAVE__STRICMP int strcasecmp(const char *str1, const char *str2); # else # define strcasecmp _stricmp # endif #endif /* !defined(HAVE_STRCASECMP) */ #ifndef HAVE_SYMLINK int symlink(const char *from, const char *to); #endif #ifndef HAVE_USLEEP int usleep (unsigned int useconds); #endif /* !defined(HAVE_USLEEP) */ #ifdef __i386__ static inline void *memcpy_unaligned( void *dst, const void *src, size_t size ) { return memcpy( dst, src, size ); } #else extern void *memcpy_unaligned( void *dst, const void *src, size_t size ); #endif /* __i386__ */ extern int mkstemps(char *template, int suffix_len); /* Process creation flags */ #ifndef _P_WAIT # define _P_WAIT 0 # define _P_NOWAIT 1 # define _P_OVERLAY 2 # define _P_NOWAITO 3 # define _P_DETACH 4 #endif #ifndef HAVE__SPAWNVP extern int _spawnvp(int mode, const char *cmdname, const char * const argv[]); #endif /* Interlocked functions */ #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) static inline int interlocked_cmpxchg( int *dest, int xchg, int compare ) { int ret; __asm__ __volatile__( "lock; cmpxchgl %2,(%1)" : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); return ret; } static inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ) { void *ret; #ifdef __x86_64__ __asm__ __volatile__( "lock; cmpxchgq %2,(%1)" : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); #else __asm__ __volatile__( "lock; cmpxchgl %2,(%1)" : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); #endif return ret; } static inline int interlocked_xchg( int *dest, int val ) { int ret; __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) : "r" (dest), "0" (val) : "memory" ); return ret; } static inline void *interlocked_xchg_ptr( void **dest, void *val ) { void *ret; #ifdef __x86_64__ __asm__ __volatile__( "lock; xchgq %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" ); #else __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) : "r" (dest), "0" (val) : "memory" ); #endif return ret; } static inline int interlocked_xchg_add( int *dest, int incr ) { int ret; __asm__ __volatile__( "lock; xaddl %0,(%1)" : "=r" (ret) : "r" (dest), "0" (incr) : "memory" ); return ret; } #ifdef __x86_64__ static inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare ) { unsigned char ret; __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2" : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret), "=a" (compare[0]), "=d" (compare[1]) : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]), "c" (xchg_high), "b" (xchg_low) ); return ret; } #endif #else /* __GNUC__ */ #ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 static inline int interlocked_cmpxchg( int *dest, int xchg, int compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } static inline int interlocked_xchg_add( int *dest, int incr ) { return __sync_fetch_and_add( dest, incr ); } static inline int interlocked_xchg( int *dest, int val ) { int ret; do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val )); return ret; } #else extern int interlocked_cmpxchg( int *dest, int xchg, int compare ); extern int interlocked_xchg_add( int *dest, int incr ); extern int interlocked_xchg( int *dest, int val ); #endif #if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) && __SIZEOF_POINTER__ == 4) \ || (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) && __SIZEOF_POINTER__ == 8) static inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } static inline void *interlocked_xchg_ptr( void **dest, void *val ) { void *ret; do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val )); return ret; } #else extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ); extern void *interlocked_xchg_ptr( void **dest, void *val ); #endif #if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64) extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare ); #endif #endif /* __GNUC__ */ #ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 static inline __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } #else extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ); #endif #else /* NO_LIBWINE_PORT */ #define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable #define ffs __WINE_NOT_PORTABLE(ffs) #define fstatvfs __WINE_NOT_PORTABLE(fstatvfs) #define getopt_long __WINE_NOT_PORTABLE(getopt_long) #define getopt_long_only __WINE_NOT_PORTABLE(getopt_long_only) #define interlocked_cmpxchg __WINE_NOT_PORTABLE(interlocked_cmpxchg) #define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr) #define interlocked_xchg __WINE_NOT_PORTABLE(interlocked_xchg) #define interlocked_xchg_ptr __WINE_NOT_PORTABLE(interlocked_xchg_ptr) #define interlocked_xchg_add __WINE_NOT_PORTABLE(interlocked_xchg_add) #define lstat __WINE_NOT_PORTABLE(lstat) #define memcpy_unaligned __WINE_NOT_PORTABLE(memcpy_unaligned) #undef memmove #define memmove __WINE_NOT_PORTABLE(memmove) #define pread __WINE_NOT_PORTABLE(pread) #define pwrite __WINE_NOT_PORTABLE(pwrite) #define spawnvp __WINE_NOT_PORTABLE(spawnvp) #define statvfs __WINE_NOT_PORTABLE(statvfs) #define strcasecmp __WINE_NOT_PORTABLE(strcasecmp) #define strerror __WINE_NOT_PORTABLE(strerror) #define strncasecmp __WINE_NOT_PORTABLE(strncasecmp) #define strnlen __WINE_NOT_PORTABLE(strnlen) #define usleep __WINE_NOT_PORTABLE(usleep) #endif /* NO_LIBWINE_PORT */ #endif /* !defined(__WINE_WINE_PORT_H) */ ================================================ FILE: wine/string.c ================================================ /* * Unicode string manipulation functions * * Copyright 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #define WINE_UNICODE_INLINE /* nothing */ #include "wine/unicode.h" int strcmpiW( const WCHAR *str1, const WCHAR *str2 ) { for (;;) { int ret = tolowerW(*str1) - tolowerW(*str2); if (ret || !*str1) return ret; str1++; str2++; } } int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n ) { int ret = 0; for ( ; n > 0; n--, str1++, str2++) if ((ret = tolowerW(*str1) - tolowerW(*str2)) || !*str1) break; return ret; } int memicmpW( const WCHAR *str1, const WCHAR *str2, int n ) { int ret = 0; for ( ; n > 0; n--, str1++, str2++) if ((ret = tolowerW(*str1) - tolowerW(*str2))) break; return ret; } WCHAR *strstrW( const WCHAR *str, const WCHAR *sub ) { while (*str) { const WCHAR *p1 = str, *p2 = sub; while (*p1 && *p2 && *p1 == *p2) { p1++; p2++; } if (!*p2) return (WCHAR *)str; str++; } return NULL; } /* strtolW and strtoulW implementation based on the GNU C library code */ /* Copyright (C) 1991,92,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. */ long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base ) { int negative; register unsigned long int cutoff; register unsigned int cutlim; register unsigned long int i; register const WCHAR *s; register WCHAR c; const WCHAR *save, *end; int overflow; if (base < 0 || base == 1 || base > 36) return 0; save = s = nptr; /* Skip white space. */ while (isspaceW (*s)) ++s; if (!*s) goto noconv; /* Check for a sign. */ negative = 0; if (*s == '-') { negative = 1; ++s; } else if (*s == '+') ++s; /* Recognize number prefix and if BASE is zero, figure it out ourselves. */ if (*s == '0') { if ((base == 0 || base == 16) && toupperW(s[1]) == 'X') { s += 2; base = 16; } else if (base == 0) base = 8; } else if (base == 0) base = 10; /* Save the pointer so we can check later if anything happened. */ save = s; end = NULL; cutoff = ULONG_MAX / (unsigned long int) base; cutlim = ULONG_MAX % (unsigned long int) base; overflow = 0; i = 0; c = *s; for (;c != '\0'; c = *++s) { if (s == end) break; if (c >= '0' && c <= '9') c -= '0'; else if (isalphaW (c)) c = toupperW (c) - 'A' + 10; else break; if ((int) c >= base) break; /* Check for overflow. */ if (i > cutoff || (i == cutoff && c > cutlim)) overflow = 1; else { i *= (unsigned long int) base; i += c; } } /* Check if anything actually happened. */ if (s == save) goto noconv; /* Store in ENDPTR the address of one character past the last character we converted. */ if (endptr != NULL) *endptr = (WCHAR *)s; /* Check for a value that is within the range of `unsigned LONG int', but outside the range of `LONG int'. */ if (overflow == 0 && i > (negative ? -((unsigned long int) (LONG_MIN + 1)) + 1 : (unsigned long int) LONG_MAX)) overflow = 1; if (overflow) { errno = ERANGE; return negative ? LONG_MIN : LONG_MAX; } /* Return the result of the appropriate sign. */ return negative ? -i : i; noconv: /* We must handle a special case here: the base is 0 or 16 and the first two characters are '0' and 'x', but the rest are not hexadecimal digits. This is no error case. We return 0 and ENDPTR points to the `x`. */ if (endptr != NULL) { if (save - nptr >= 2 && toupperW (save[-1]) == 'X' && save[-2] == '0') *endptr = (WCHAR *)&save[-1]; else /* There was no number to convert. */ *endptr = (WCHAR *)nptr; } return 0L; } unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base ) { int negative; register unsigned long int cutoff; register unsigned int cutlim; register unsigned long int i; register const WCHAR *s; register WCHAR c; const WCHAR *save, *end; int overflow; if (base < 0 || base == 1 || base > 36) return 0; save = s = nptr; /* Skip white space. */ while (isspaceW (*s)) ++s; if (!*s) goto noconv; /* Check for a sign. */ negative = 0; if (*s == '-') { negative = 1; ++s; } else if (*s == '+') ++s; /* Recognize number prefix and if BASE is zero, figure it out ourselves. */ if (*s == '0') { if ((base == 0 || base == 16) && toupperW(s[1]) == 'X') { s += 2; base = 16; } else if (base == 0) base = 8; } else if (base == 0) base = 10; /* Save the pointer so we can check later if anything happened. */ save = s; end = NULL; cutoff = ULONG_MAX / (unsigned long int) base; cutlim = ULONG_MAX % (unsigned long int) base; overflow = 0; i = 0; c = *s; for (;c != '\0'; c = *++s) { if (s == end) break; if (c >= '0' && c <= '9') c -= '0'; else if (isalphaW (c)) c = toupperW (c) - 'A' + 10; else break; if ((int) c >= base) break; /* Check for overflow. */ if (i > cutoff || (i == cutoff && c > cutlim)) overflow = 1; else { i *= (unsigned long int) base; i += c; } } /* Check if anything actually happened. */ if (s == save) goto noconv; /* Store in ENDPTR the address of one character past the last character we converted. */ if (endptr != NULL) *endptr = (WCHAR *)s; if (overflow) { errno = ERANGE; return ULONG_MAX; } /* Return the result of the appropriate sign. */ return negative ? -i : i; noconv: /* We must handle a special case here: the base is 0 or 16 and the first two characters are '0' and 'x', but the rest are not hexadecimal digits. This is no error case. We return 0 and ENDPTR points to the `x`. */ if (endptr != NULL) { if (save - nptr >= 2 && toupperW (save[-1]) == 'X' && save[-2] == '0') *endptr = (WCHAR *)&save[-1]; else /* There was no number to convert. */ *endptr = (WCHAR *)nptr; } return 0L; } /* format a WCHAR string according to a printf format; helper for vsnprintfW */ static size_t format_string( WCHAR *buffer, size_t len, const char *format, const WCHAR *str, int str_len ) { size_t count = 0; int i, left_align = 0, width = 0, max = 0; assert( *format == '%' ); format++; /* skip '%' */ while (*format == '0' || *format == '+' || *format == '-' || *format == ' ' || *format == '#') { if (*format == '-') left_align = 1; format++; } while (isdigit(*format)) width = width * 10 + *format++ - '0'; if (str_len == -1) str_len = strlenW( str ); if (*format == '.') { format++; while (isdigit(*format)) max = max * 10 + *format++ - '0'; if (max > str_len) max = str_len; } else max = str_len; if (*format == 'h' || *format == 'l') format++; assert( *format == 's' ); if (!left_align && width > max) { for (i = 0; i < width - max; i++) { if (count++ < len) *buffer++ = ' '; } } if (count < len) memcpy( buffer, str, min( max, len - count ) * sizeof(WCHAR) ); count += max; buffer += max; if (left_align && width > max) { for (i = 0; i < width - max; i++) { if (count++ < len) *buffer++ = ' '; } } return count; } int vsnprintfW(WCHAR *str, size_t len, const WCHAR *format, va_list valist) { unsigned int written = 0; const WCHAR *iter = format; char bufa[512], fmtbufa[64], *fmta; while (*iter) { while (*iter && *iter != '%') { if (written++ < len) *str++ = *iter; iter++; } if (*iter == '%') { if (iter[1] == '%') { if (written++ < len) *str++ = '%'; /* "%%"->'%' */ iter += 2; continue; } fmta = fmtbufa; *fmta++ = *iter++; while (*iter == '0' || *iter == '+' || *iter == '-' || *iter == ' ' || *iter == '*' || *iter == '#') { if (*iter == '*') { char *buffiter = bufa; int fieldlen = va_arg(valist, int); sprintf(buffiter, "%d", fieldlen); while (*buffiter) *fmta++ = *buffiter++; } else *fmta++ = *iter; iter++; } while (isdigit(*iter)) *fmta++ = *iter++; if (*iter == '.') { *fmta++ = *iter++; if (*iter == '*') { char *buffiter = bufa; int fieldlen = va_arg(valist, int); sprintf(buffiter, "%d", fieldlen); while (*buffiter) *fmta++ = *buffiter++; iter++; } else while (isdigit(*iter)) *fmta++ = *iter++; } if (*iter == 'h' || *iter == 'l') *fmta++ = *iter++; switch (*iter) { case 's': { static const WCHAR none[] = { '(','n','u','l','l',')',0 }; const WCHAR *wstr = va_arg(valist, const WCHAR *); size_t remaining = written < len ? len - written : 0; size_t count; *fmta++ = 's'; *fmta = 0; count = format_string( str, remaining, fmtbufa, wstr ? wstr : none, -1 ); str += min( count, remaining ); written += count; iter++; break; } case 'c': { WCHAR wstr; size_t remaining = written < len ? len - written : 0; size_t count; wstr = va_arg(valist, int); *fmta++ = 's'; *fmta = 0; count = format_string( str, remaining, fmtbufa, &wstr, 1 ); str += min( count, remaining ); written += count; iter++; break; } default: { /* For non wc types, use system sprintf and append to wide char output */ /* FIXME: for unrecognised types, should ignore % when printing */ char *bufaiter = bufa; if (*iter == 'p') sprintf(bufaiter, "%0*lX", 2 * (int)sizeof(void*), (unsigned long)va_arg(valist, void *)); else { *fmta++ = *iter; *fmta = '\0'; if (*iter == 'a' || *iter == 'A' || *iter == 'e' || *iter == 'E' || *iter == 'f' || *iter == 'F' || *iter == 'g' || *iter == 'G') sprintf(bufaiter, fmtbufa, va_arg(valist, double)); else { /* FIXME: On 32 bit systems this doesn't handle int 64's. */ sprintf(bufaiter, fmtbufa, va_arg(valist, void *)); } } while (*bufaiter) { if (written++ < len) *str++ = *bufaiter; bufaiter++; } iter++; break; } } } } if (len) { if (written >= len) str--; *str++ = 0; } /* FIXME: POSIX [v]snprintf() returns the equivalent of written, not -1, on short buffer. */ return written < len ? (int)written : -1; } int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist ) { return vsnprintfW( str, INT_MAX, format, valist ); } int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ...) { int retval; va_list valist; va_start(valist, format); retval = vsnprintfW(str, len, format, valist); va_end(valist); return retval; } int sprintfW( WCHAR *str, const WCHAR *format, ...) { int retval; va_list valist; va_start(valist, format); retval = vsnprintfW(str, INT_MAX, format, valist); va_end(valist); return retval; } ================================================ FILE: wine/wctype.c ================================================ /* Unicode ctype tables */ /* Automatically generated; DO NOT EDIT!! */ //#include "wine/unicode.h" const unsigned short wine_wctype_table[17152] = { /* offsets */ 0x0100, 0x0200, 0x0300, 0x0400, 0x0500, 0x0600, 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x0f00, 0x1000, 0x1100, 0x1200, 0x1300, 0x1400, 0x1500, 0x1200, 0x1600, 0x1700, 0x1800, 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x1d00, 0x1e00, 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, 0x2700, 0x2800, 0x2900, 0x2500, 0x2a00, 0x2b00, 0x2c00, 0x2d00, 0x2e00, 0x2f00, 0x3000, 0x3100, 0x3200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x3300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x3400, 0x1200, 0x1200, 0x1200, 0x1200, 0x3500, 0x1200, 0x3600, 0x3700, 0x3800, 0x3900, 0x3a00, 0x3b00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x3c00, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x1200, 0x3d00, 0x3e00, 0x3f00, 0x4000, 0x4100, 0x4200, /* values */ 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0x9268, 0x8228, 0x9228, 0xa228, 0x8228, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0x8220, 0x8220, 0x8220, 0x9220, 0xa248, 0xb210, 0xb210, 0x5210, 0x5210, 0x5210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x4210, 0x7210, 0x4210, 0x7210, 0x7210, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x7210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x1381, 0x1381, 0x1381, 0x1381, 0x1381, 0x1381, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x1382, 0x1382, 0x1382, 0x1382, 0x1382, 0x1382, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0xb210, 0xb210, 0xb210, 0xb210, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0x8228, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0x7248, 0xb210, 0x5210, 0x5210, 0x5210, 0x5210, 0xb210, 0xb210, 0xb210, 0xb210, 0x1310, 0xb210, 0xb210, 0xe230, 0xb210, 0xb210, 0x5210, 0x5210, 0x3214, 0x3214, 0xb210, 0x1312, 0xb210, 0xb210, 0xb210, 0x3214, 0x1310, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0xb210, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0xb210, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1302, 0x1300, 0x1301, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1301, 0x1303, 0x1302, 0x1301, 0x1303, 0x1302, 0x1301, 0x1303, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1303, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb300, 0xb300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb200, 0xb200, 0xb200, 0xb200, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0x1300, 0x1300, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb300, 0xb200, 0x1300, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1301, 0x1302, 0x1301, 0x1302, 0xb300, 0xb200, 0x1301, 0x1302, 0x0000, 0x0000, 0x1300, 0x1302, 0x1302, 0x1302, 0xb210, 0x1301, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0x1301, 0xb210, 0x1301, 0x1301, 0x1301, 0x0000, 0x1301, 0x0000, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0xb200, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x0000, 0x1300, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1210, 0xb210, 0x0000, 0x0000, 0xb200, 0xb200, 0x5200, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x2210, 0xd200, 0x2210, 0xd200, 0xd200, 0x2210, 0xd200, 0xd200, 0x2210, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0x2300, 0x2300, 0x2300, 0x2210, 0x2210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6220, 0x6220, 0x6220, 0x6220, 0x6220, 0x6220, 0xb200, 0xb200, 0xc200, 0x5210, 0x5210, 0xc200, 0x7210, 0xc210, 0xb200, 0xb200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xc210, 0xc220, 0x0000, 0xc210, 0xc210, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x5210, 0x6210, 0x6210, 0xc210, 0xc300, 0xc300, 0xd200, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc210, 0xc300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x6220, 0xb200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xc300, 0xc300, 0xd200, 0xd200, 0xb200, 0xd200, 0xd200, 0xd200, 0xd200, 0xc300, 0xc300, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0xc300, 0xc300, 0xc300, 0xc200, 0xc200, 0xc300, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0x0000, 0xc220, 0xc300, 0xd200, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xc300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x2300, 0x2300, 0xb200, 0xb210, 0xb210, 0xb210, 0x2300, 0x0000, 0x0000, 0xd200, 0x2200, 0x2200, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0xd200, 0xd200, 0xd200, 0xd200, 0x2300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x2300, 0xd200, 0xd200, 0xd200, 0x2300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x0000, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x2210, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x6220, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0xd200, 0x1300, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1210, 0x1210, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x1300, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x1200, 0x1200, 0x0000, 0x0000, 0x1200, 0x1200, 0xd200, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1300, 0x1300, 0x5200, 0x5200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x5200, 0x1300, 0x1210, 0xd200, 0x0000, 0x0000, 0xd200, 0xd200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x0000, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0xd200, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x1300, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0xd200, 0x1200, 0x0000, 0x1200, 0x1200, 0xd200, 0x0000, 0x0000, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1210, 0x5200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0x1200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x1300, 0x1200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x1200, 0x1200, 0x0000, 0x0000, 0x1200, 0x1200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1200, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200, 0x1200, 0x0000, 0x1200, 0x1200, 0x1200, 0xd200, 0x0000, 0x0000, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x5200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1300, 0xd200, 0x1200, 0x1200, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x1200, 0x1200, 0x1200, 0x0000, 0x1200, 0x1200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x0000, 0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0x1200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1300, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x1200, 0x1200, 0x1200, 0x0000, 0x1200, 0x1200, 0x1200, 0xd200, 0x1300, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0x0000, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x1200, 0x1200, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x5200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1210, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1210, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0xd200, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1200, 0x1200, 0x1200, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1200, 0x1210, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0xd200, 0x1200, 0xd200, 0xb210, 0xb210, 0xb210, 0xb210, 0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1210, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x1200, 0x1200, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1200, 0x1200, 0x1200, 0x1200, 0x1210, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x1300, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0x1300, 0x1200, 0x1200, 0x1200, 0x1300, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1300, 0x1200, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x1301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1301, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1210, 0x1300, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xa208, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb210, 0xb210, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0x1210, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1210, 0x1210, 0x1210, 0x1300, 0x1210, 0x1210, 0x1210, 0x5200, 0x1300, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xd200, 0xd200, 0xd200, 0xe220, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0x0000, 0x0000, 0x0000, 0xb210, 0xb210, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1200, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0x0000, 0x0000, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0x1200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0xd200, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1300, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1210, 0x1210, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x0000, 0x1301, 0x1301, 0x1301, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0x1210, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0x1300, 0x1300, 0x1200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x1301, 0x0000, 0x1301, 0x0000, 0x1301, 0x0000, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1303, 0xb200, 0x1302, 0xb200, 0xb200, 0xb200, 0x1302, 0x1302, 0x1302, 0x0000, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1303, 0xb200, 0xb200, 0xb200, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0xb200, 0xb200, 0xb200, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x0000, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1303, 0xb200, 0xb200, 0x0000, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xe220, 0xe220, 0xe220, 0x1220, 0x2220, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xa208, 0x8208, 0xf220, 0xf220, 0xf220, 0xf220, 0xf220, 0x7208, 0x5210, 0x5210, 0x5210, 0x5210, 0x5210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x7200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xa208, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0x0000, 0xf220, 0xf220, 0xf220, 0xf220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0x3200, 0x1302, 0x0000, 0x0000, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x4200, 0x4200, 0xb200, 0xb210, 0xb210, 0x1302, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x4200, 0x4200, 0xb200, 0xb210, 0xb210, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0x1301, 0xb200, 0xb200, 0xb200, 0xb200, 0x1301, 0xb200, 0xb200, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0xb200, 0x1301, 0xb200, 0xb200, 0xb200, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1301, 0xb200, 0x1301, 0xb200, 0x1301, 0xb200, 0x1301, 0x1301, 0x1301, 0x1301, 0x5200, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1302, 0xb200, 0xb200, 0x1302, 0x1302, 0x1301, 0x1301, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0xb200, 0xb200, 0xb200, 0xb200, 0x1302, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1301, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x4200, 0x5200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1301, 0x1302, 0x1301, 0x1302, 0xd200, 0xd200, 0xd200, 0x1301, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb210, 0xb210, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1302, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb300, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0xa248, 0xb210, 0xb210, 0xb210, 0xb200, 0x1300, 0x1300, 0x1300, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb200, 0xb200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb210, 0xb200, 0xb200, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0xd200, 0xb200, 0xb200, 0x1300, 0x1300, 0x1300, 0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0x0000, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb210, 0xb210, 0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xb210, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xb210, 0xb300, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1300, 0x1300, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb200, 0xb200, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1300, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0xb300, 0x1200, 0x1200, 0x1301, 0x1302, 0x1301, 0x1302, 0x1300, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0xd200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x5200, 0x5200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb210, 0xb210, 0xb210, 0xb210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1210, 0x1210, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210, 0x1210, 0x1300, 0x1210, 0x1300, 0x1300, 0xd200, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x0000, 0x1300, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x1210, 0x1210, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0x1200, 0x1300, 0x1200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1300, 0xd200, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1210, 0x1200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0xd200, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x4200, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x0000, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x0000, 0x2300, 0x0000, 0x2300, 0x2300, 0x0000, 0x2300, 0x2300, 0x0000, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xb210, 0xb210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc200, 0xb200, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x7210, 0xb210, 0x7210, 0x0000, 0xb210, 0x7210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x5210, 0xb210, 0xb210, 0x4200, 0x4210, 0xb200, 0xb200, 0xb200, 0x0000, 0xb210, 0x5200, 0x5210, 0xb210, 0x0000, 0x0000, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0x0000, 0xe260, 0x0000, 0xb210, 0xb210, 0x5210, 0x5200, 0x5210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x4200, 0x7210, 0x4210, 0x7210, 0x7210, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x7210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0x1381, 0x1381, 0x1381, 0x1381, 0x1381, 0x1381, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0xb210, 0xb210, 0xb210, 0xb200, 0xb210, 0xb200, 0x1382, 0x1382, 0x1382, 0x1382, 0x1382, 0x1382, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0xb210, 0xb200, 0xb210, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x5200, 0x5200, 0xb200, 0xb200, 0xb200, 0x5200, 0x5200, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb220, 0xb220, 0xb220, 0xb200, 0xb200, 0x0000, 0x0000 }; ================================================ FILE: wine/windows/Makefile.in ================================================ SOURCES = \ accctrl.h \ access.idl \ aclapi.h \ aclui.h \ activation.idl \ activaut.idl \ activdbg.idl \ activscp.idl \ adshlp.h \ advpub.h \ af_irda.h \ amaudio.h \ amstream.idl \ amvideo.idl \ appcompatapi.h \ appmgmt.h \ appmodel.h \ asptlb.idl \ asynot.idl \ asysta.idl \ atlbase.h \ atlcom.h \ atliface.idl \ atlwin.h \ audevcod.h \ audioclient.idl \ audiopolicy.idl \ audiosessiontypes.h \ austream.idl \ authz.h \ aviriff.h \ avrt.h \ axcore.idl \ axextend.idl \ basetsd.h \ basetyps.h \ bcrypt.h \ bdaiface.idl \ bdaiface_enums.h \ bdatypes.h \ binres.idl \ bits.idl \ bits1_5.idl \ bits2_0.idl \ bits2_5.idl \ bits3_0.idl \ bitsmsg.h \ bluetoothapis.h \ bthsdpdef.h \ cderr.h \ cfgmgr32.h \ cguid.h \ chprst.idl \ cierror.h \ clusapi.h \ cmdbas.idl \ cmdtxt.idl \ cmnquery.idl \ colinf.idl \ comcat.idl \ commctrl.h \ commctrl.rh \ commdlg.h \ commoncontrols.idl \ compobj.h \ comsvcs.idl \ control.idl \ cor.idl \ cordebug.idl \ corerror.h \ corhdr.h \ cpl.h \ crtrow.idl \ cryptdlg.h \ cryptuiapi.h \ ctfutb.idl \ ctxtcall.idl \ custcntl.h \ cvconst.h \ d2d1.idl \ d2d1_1.idl \ d2dbasetypes.h \ d2derr.h \ d3d.h \ d3d10.idl \ d3d10_1.idl \ d3d10_1shader.h \ d3d10effect.h \ d3d10misc.h \ d3d10sdklayers.idl \ d3d10shader.h \ d3d11.idl \ d3d11_1.idl \ d3d11_2.idl \ d3d11_3.idl \ d3d11_4.idl \ d3d11on12.idl \ d3d11sdklayers.idl \ d3d11shader.h \ d3d12.idl \ d3d8.h \ d3d8caps.h \ d3d8types.h \ d3d9.h \ d3d9caps.h \ d3d9types.h \ d3dcaps.h \ d3dcommon.idl \ d3dcompiler.h \ d3dhal.h \ d3drm.h \ d3drmdef.h \ d3drmobj.h \ d3drmwin.h \ d3dtypes.h \ d3dukmdt.h \ d3dvec.inl \ d3dx10.h \ d3dx10async.h \ d3dx10core.idl \ d3dx10math.h \ d3dx10tex.h \ d3dx11.h \ d3dx11async.h \ d3dx11core.idl \ d3dx11tex.h \ d3dx9.h \ d3dx9anim.h \ d3dx9core.h \ d3dx9effect.h \ d3dx9math.h \ d3dx9math.inl \ d3dx9mesh.h \ d3dx9shader.h \ d3dx9shape.h \ d3dx9tex.h \ d3dx9xof.h \ davclnt.h \ dbccmd.idl \ dbcses.idl \ dbdsad.idl \ dbghelp.h \ dbinit.idl \ dbprop.idl \ dbs.idl \ dbt.h \ dciddi.h \ dciman.h \ dcommon.idl \ dde.h \ dde.rh \ ddeml.h \ ddk/compstui.h \ ddk/csq.h \ ddk/d3dkmthk.h \ ddk/fltkernel.h \ ddk/hidclass.h \ ddk/hidpi.h \ ddk/hidport.h \ ddk/hidsdi.h \ ddk/hidtypes.h \ ddk/imm.h \ ddk/mountmgr.h \ ddk/ndis.h \ ddk/ntddcdvd.h \ ddk/ntddk.h \ ddk/ntddser.h \ ddk/ntddtape.h \ ddk/ntifs.h \ ddk/usb.h \ ddk/usb100.h \ ddk/usb200.h \ ddk/usbdlib.h \ ddk/usbioctl.h \ ddk/usbiodef.h \ ddk/wdm.h \ ddk/winddiui.h \ ddk/winsplp.h \ ddraw.h \ ddrawgdi.h \ ddrawi.h \ ddstream.idl \ delayloadhandler.h \ devenum.idl \ devguid.h \ devicetopology.idl \ devpkey.h \ devpropdef.h \ dhcpcsdk.h \ dhtmldid.h \ dhtmled.idl \ difxapi.h \ digitalv.h \ dimm.idl \ dinput.h \ dinputd.h \ dispdib.h \ dispex.idl \ dlgs.h \ dls1.h \ dls2.h \ dmdls.h \ dmerror.h \ dmksctrl.h \ dmo.h \ dmoreg.h \ dmort.h \ dmplugin.h \ dmusbuff.h \ dmusicc.h \ dmusicf.h \ dmusici.h \ dmusics.h \ docobj.idl \ docobjectservice.idl \ downloadmgr.idl \ dpaddr.h \ dplay.h \ dplay8.h \ dplobby.h \ dplobby8.h \ dpnathlp.h \ drmexternals.idl \ dsconf.h \ dsgetdc.h \ dshow.h \ dsound.h \ dsrole.h \ dvdmedia.h \ dvoice.h \ dwmapi.h \ dwrite.idl \ dwrite_1.idl \ dwrite_2.idl \ dwrite_3.idl \ dxdiag.h \ dxerr8.h \ dxerr9.h \ dxfile.h \ dxgi.idl \ dxgi1_2.idl \ dxgi1_3.idl \ dxgi1_4.idl \ dxgi1_5.idl \ dxgi1_6.idl \ dxgicommon.idl \ dxgiformat.idl \ dxgitype.idl \ dxva2api.idl \ dyngraph.idl \ endpointvolume.idl \ errorrep.h \ errors.h \ errrec.idl \ evcode.h \ evntprov.h \ evntrace.h \ evr.idl \ excpt.h \ exdisp.idl \ exdispid.h \ fci.h \ fdi.h \ fileapi.h \ fltdefs.h \ fontsub.h \ fusion.idl \ gameux.idl \ gdiplus.h \ gdipluscolor.h \ gdipluscolormatrix.h \ gdipluseffects.h \ gdiplusenums.h \ gdiplusflat.h \ gdiplusgpstubs.h \ gdiplusimaging.h \ gdiplusinit.h \ gdiplusmem.h \ gdiplusmetaheader.h \ gdipluspixelformats.h \ gdiplustypes.h \ guiddef.h \ hidusage.h \ highlevelmonitorconfigurationapi.h \ hlguids.h \ hlink.idl \ hstring.idl \ htiface.idl \ htiframe.idl \ htmlhelp.h \ http.h \ httprequest.idl \ httprequestid.h \ i_cryptasn1tls.h \ iads.idl \ icftypes.idl \ icm.h \ icmpapi.h \ idispids.h \ ieautomation.idl \ iextag.idl \ ifdef.h \ ifmib.h \ iimgctx.idl \ imagehlp.h \ ime.h \ imm.h \ imnact.idl \ imnxport.idl \ in6addr.h \ inaddr.h \ indexsrv.idl \ initguid.h \ inputscope.idl \ inseng.idl \ inspectable.idl \ interactioncontext.h \ intshcut.h \ ipexport.h \ iphlpapi.h \ ipifcons.h \ ipmib.h \ iprtrmib.h \ iptypes.h \ isguids.h \ knownfolders.h \ ks.h \ ksguid.h \ ksmedia.h \ ksuuids.h \ libloaderapi.h \ lm.h \ lmaccess.h \ lmapibuf.h \ lmat.h \ lmbrowsr.h \ lmcons.h \ lmerr.h \ lmjoin.h \ lmmsg.h \ lmserver.h \ lmshare.h \ lmstats.h \ lmuse.h \ lmuseflg.h \ lmwksta.h \ loadperf.h \ lowlevelmonitorconfigurationapi.h \ lzexpand.h \ mapi.h \ mapicode.h \ mapidefs.h \ mapiform.h \ mapiguid.h \ mapitags.h \ mapiutil.h \ mapival.h \ mapix.h \ mciavi.h \ mcx.h \ mediaerr.h \ mediaobj.idl \ metahost.idl \ mfapi.h \ mferror.h \ mfidl.idl \ mfobjects.idl \ mfreadwrite.idl \ mftransform.idl \ midles.h \ mimeinfo.idl \ mimeole.idl \ minmax.h \ mlang.idl \ mmc.idl \ mmddk.h \ mmdeviceapi.idl \ mmreg.h \ mmstream.idl \ mmsystem.h \ mprapi.h \ mprerror.h \ msacm.h \ msacmdlg.h \ msacmdrv.h \ msasn1.h \ mscat.h \ mscoree.idl \ msctf.idl \ msdadc.idl \ msdaguid.h \ msdasc.idl \ mshtmcid.h \ mshtmdid.h \ mshtmhst.idl \ mshtml.idl \ msi.h \ msidefs.h \ msident.idl \ msinkaut.idl \ msiquery.h \ msopc.idl \ mssip.h \ msstkppg.h \ mstask.idl \ mstcpip.h \ msvcrt/assert.h \ msvcrt/conio.h \ msvcrt/crtdbg.h \ msvcrt/crtdefs.h \ msvcrt/ctype.h \ msvcrt/direct.h \ msvcrt/dirent.h \ msvcrt/dos.h \ msvcrt/eh.h \ msvcrt/errno.h \ msvcrt/fcntl.h \ msvcrt/float.h \ msvcrt/fpieee.h \ msvcrt/io.h \ msvcrt/limits.h \ msvcrt/locale.h \ msvcrt/malloc.h \ msvcrt/math.h \ msvcrt/mbctype.h \ msvcrt/mbstring.h \ msvcrt/memory.h \ msvcrt/process.h \ msvcrt/search.h \ msvcrt/setjmp.h \ msvcrt/share.h \ msvcrt/signal.h \ msvcrt/stddef.h \ msvcrt/stdio.h \ msvcrt/stdlib.h \ msvcrt/string.h \ msvcrt/sys/locking.h \ msvcrt/sys/stat.h \ msvcrt/sys/timeb.h \ msvcrt/sys/types.h \ msvcrt/sys/unistd.h \ msvcrt/sys/utime.h \ msvcrt/time.h \ msvcrt/unistd.h \ msvcrt/wchar.h \ msvcrt/wctype.h \ mswsock.h \ msxml.idl \ msxml2.idl \ msxml2did.h \ msxml6.idl \ msxml6did.h \ msxmldid.h \ mtxdm.h \ multimon.h \ nb30.h \ ncrypt.h \ ndrtypes.h \ netcfgx.idl \ netcon.idl \ netfw.idl \ netioapi.h \ netlistmgr.idl \ nldef.h \ npapi.h \ nserror.h \ nspapi.h \ ntddcdrm.h \ ntddndis.h \ ntddscsi.h \ ntddstor.h \ ntdef.h \ ntdsapi.h \ ntlsa.h \ ntquery.h \ ntsecapi.h \ ntsecpkg.h \ ntstatus.h \ oaidl.idl \ objbase.h \ objectarray.idl \ objidl.idl \ objsafe.idl \ objsel.h \ ocidl.idl \ ocmm.idl \ odbcinst.h \ ole2.h \ ole2ver.h \ oleacc.idl \ oleauto.h \ olectl.h \ oledb.idl \ oledberr.h \ oledlg.h \ oleidl.idl \ opcbase.idl \ opcobjectmodel.idl \ opcparturi.idl \ opnrst.idl \ optary.idl \ patchapi.h \ pathcch.h \ pdh.h \ pdhmsg.h \ perflib.h \ perhist.idl \ physicalmonitorenumerationapi.h \ pktdef.h \ poppack.h \ powrprof.h \ prntvpt.h \ profinfo.h \ propidl.idl \ propkey.h \ propkeydef.h \ propsys.idl \ propvarutil.h \ prsht.h \ psapi.h \ pshpack1.h \ pshpack2.h \ pshpack4.h \ pshpack8.h \ pstore.idl \ qedit.idl \ ras.h \ rasdlg.h \ raserror.h \ reason.h \ regstr.h \ restartmanager.h \ richedit.h \ richole.idl \ rmxfguid.h \ rmxftmpl.x \ roapi.h \ roparameterizediid.idl \ row.idl \ rowchg.idl \ rowpos.idl \ rowpsc.idl \ rpc.h \ rpcasync.h \ rpcdce.h \ rpcdcep.h \ rpcndr.h \ rpcnterr.h \ rpcproxy.h \ rpcsal.h \ rstbas.idl \ rstinf.idl \ rstloc.idl \ rstnot.idl \ rtutils.h \ sal.h \ sapi.idl \ sapiddk.idl \ scarderr.h \ schannel.h \ schemadef.h \ schnlsp.h \ sddl.h \ secext.h \ security.h \ sensapi.h \ sensevts.idl \ servprov.idl \ sesprp.idl \ setupapi.h \ sfc.h \ shdeprecated.idl \ shdispid.h \ shellapi.h \ shellscalingapi.h \ shimgdata.idl \ shldisp.idl \ shlguid.h \ shlobj.h \ shlwapi.h \ shobjidl.idl \ shtypes.idl \ sipbase.h \ slerror.h \ slpublic.h \ snmp.h \ softpub.h \ sperror.h \ sql.h \ sqlext.h \ sqltypes.h \ sqlucode.h \ srcrst.idl \ srrestoreptapi.h \ sspi.h \ stdole2.idl \ stgprop.h \ sti.h \ storage.h \ strmif.idl \ strsafe.h \ structuredquerycondition.idl \ svrapi.h \ t2embapi.h \ tapi.h \ taskschd.idl \ tchar.h \ tcpestats.h \ tcpmib.h \ textserv.h \ textstor.idl \ tlhelp32.h \ tlogstg.idl \ tmschema.h \ tom.idl \ traffic.h \ transact.idl \ twain.h \ txcoord.idl \ txdtc.idl \ udpmib.h \ uianimation.idl \ uiautomation.h \ uiautomationclient.idl \ uiautomationcore.idl \ uiautomationcoreapi.h \ uiribbon.idl \ unknwn.idl \ urlhist.idl \ urlmon.idl \ userenv.h \ usp10.h \ uuids.h \ uxtheme.h \ vdmdbg.h \ ver.h \ verrsrc.h \ vfw.h \ vfwmsgs.h \ virtdisk.h \ vmr9.idl \ vmrender.idl \ vss.idl \ vsstyle.h \ vssym32.h \ vswriter.h \ wbemcli.idl \ wbemdisp.idl \ wbemprov.idl \ wct.h \ webservices.h \ werapi.h \ wfext.h \ wia.h \ wia_lh.idl \ wia_xp.idl \ wiadef.h \ wimgapi.h \ winbase.h \ wincodec.idl \ wincodecsdk.idl \ wincon.h \ wincred.h \ wincrypt.h \ windef.h \ windns.h \ windows.foundation.idl \ windows.h \ windowsx.h \ wine/debug.h \ wine/exception.h \ wine/fil_data.idl \ wine/itss.idl \ wine/library.h \ wine/svcctl.idl \ wine/unicode.h \ wine/winedxgi.idl \ winerror.h \ winevt.h \ wingdi.h \ winhttp.h \ wininet.h \ winineti.h \ winioctl.h \ winldap.h \ winnetwk.h \ winnls.h \ winnls32.h \ winnt.h \ winnt.rh \ winperf.h \ winreg.h \ winresrc.h \ winsafer.h \ winscard.h \ winsmcrd.h \ winsnmp.h \ winsock.h \ winsock2.h \ winspool.h \ winstring.h \ winsvc.h \ winsxs.idl \ wintab.h \ wintabx.h \ winternl.h \ wintrust.h \ winuser.h \ winuser.rh \ winver.h \ wlanapi.h \ wmcodecdsp.idl \ wmdrmsdk.idl \ wmistr.h \ wmium.h \ wmiutils.idl \ wmp.idl \ wmpids.h \ wmsbuffer.idl \ wmsdk.h \ wmsdkidl.idl \ wnaspi32.h \ wownt32.h \ wpcapi.idl \ ws2def.h \ ws2ipdef.h \ ws2spi.h \ ws2tcpip.h \ wsdapi.h \ wsdbase.idl \ wsddisco.idl \ wsdtypes.h \ wsdutil.h \ wsdxml.idl \ wsdxmldom.h \ wshisotp.h \ wsipx.h \ wsnwlink.h \ wtsapi32.h \ wtypes.idl \ wuapi.idl \ x3daudio.h \ xapo.idl \ xapofx.h \ xaudio2.idl \ xaudio2fx.idl \ xcmc.h \ xinput.h \ xmldom.h \ xmldom.idl \ xmldomdid.h \ xmldso.idl \ xmldsodid.h \ xmllite.idl \ zmouse.h ================================================ FILE: wine/windows/accctrl.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ACCCTRL_H #define __WINE_ACCCTRL_H #include #ifdef __cplusplus extern "C" { #endif typedef enum _SE_OBJECT_TYPE { SE_UNKNOWN_OBJECT_TYPE = 0, SE_FILE_OBJECT, SE_SERVICE, SE_PRINTER, SE_REGISTRY_KEY, SE_LMSHARE, SE_KERNEL_OBJECT, SE_WINDOW_OBJECT, SE_DS_OBJECT, SE_DS_OBJECT_ALL, SE_PROVIDER_DEFINED_OBJECT, SE_WMIGUID_OBJECT, SE_REGISTRY_WOW64_32KEY } SE_OBJECT_TYPE; typedef enum _TRUSTEE_TYPE { TRUSTEE_IS_UNKNOWN, TRUSTEE_IS_USER, TRUSTEE_IS_GROUP, TRUSTEE_IS_DOMAIN, TRUSTEE_IS_ALIAS, TRUSTEE_IS_WELL_KNOWN_GROUP, TRUSTEE_IS_DELETED, TRUSTEE_IS_INVALID, TRUSTEE_IS_COMPUTER } TRUSTEE_TYPE; typedef enum _TRUSTEE_FORM { TRUSTEE_IS_SID, TRUSTEE_IS_NAME, TRUSTEE_BAD_FORM, TRUSTEE_IS_OBJECTS_AND_SID, TRUSTEE_IS_OBJECTS_AND_NAME } TRUSTEE_FORM; typedef enum _MULTIPLE_TRUSTEE_OPERATION { NO_MULTIPLE_TRUSTEE, TRUSTEE_IS_IMPERSONATE, } MULTIPLE_TRUSTEE_OPERATION; typedef struct _OBJECTS_AND_SID { DWORD ObjectsPresent; GUID ObjectTypeGuid; GUID InheritedObjectTypeGuid; SID *pSid; } OBJECTS_AND_SID, *POBJECTS_AND_SID; typedef struct _OBJECTS_AND_NAME_A { DWORD ObjectsPresent; SE_OBJECT_TYPE ObjectType; LPSTR ObjectTypeName; LPSTR InheritedObjectTypeName; LPSTR ptstrName; } OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A; typedef struct _OBJECTS_AND_NAME_W { DWORD ObjectsPresent; SE_OBJECT_TYPE ObjectType; LPWSTR ObjectTypeName; LPWSTR InheritedObjectTypeName; LPWSTR ptstrName; } OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W; DECL_WINELIB_TYPE_AW(OBJECTS_AND_NAME_) DECL_WINELIB_TYPE_AW(POBJECTS_AND_NAME_) typedef struct _TRUSTEE_A { struct _TRUSTEE_A *pMultipleTrustee; MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; TRUSTEE_FORM TrusteeForm; TRUSTEE_TYPE TrusteeType; LPSTR ptstrName; } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA; typedef struct _TRUSTEE_W { struct _TRUSTEE_W *pMultipleTrustee; MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; TRUSTEE_FORM TrusteeForm; TRUSTEE_TYPE TrusteeType; LPWSTR ptstrName; } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW; DECL_WINELIB_TYPE_AW(TRUSTEE_) DECL_WINELIB_TYPE_AW(PTRUSTEE_) DECL_WINELIB_TYPE_AW(TRUSTEE) DECL_WINELIB_TYPE_AW(PTRUSTEE) typedef enum _ACCESS_MODE { NOT_USED_ACCESS = 0, GRANT_ACCESS, SET_ACCESS, DENY_ACCESS, REVOKE_ACCESS, SET_AUDIT_SUCCESS, SET_AUDIT_FAILURE } ACCESS_MODE; #define NO_INHERITANCE 0x0 #define SUB_OBJECTS_ONLY_INHERIT 0x1 #define SUB_CONTAINERS_ONLY_INHERIT 0x2 #define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3 #define INHERIT_NO_PROPAGATE 0x4 #define INHERIT_ONLY 0x8 #define INHERITED_ACCESS_ENTRY 0x10 #define INHERITED_PARENT 0x10000000 #define INHERITED_GRANDPARENT 0x20000000 typedef struct _EXPLICIT_ACCESS_A { DWORD grfAccessPermissions; ACCESS_MODE grfAccessMode; DWORD grfInheritance; TRUSTEE_A Trustee; } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; typedef struct _EXPLICIT_ACCESS_W { DWORD grfAccessPermissions; ACCESS_MODE grfAccessMode; DWORD grfInheritance; TRUSTEE_W Trustee; } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW; DECL_WINELIB_TYPE_AW(EXPLICIT_ACCESS_) DECL_WINELIB_TYPE_AW(PEXPLICIT_ACCESS_) DECL_WINELIB_TYPE_AW(EXPLICIT_ACCESS) DECL_WINELIB_TYPE_AW(PEXPLICIT_ACCESS) typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS; typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS; typedef struct _ACTRL_ACCESS_ENTRYA { TRUSTEE_A Trustee; ULONG fAccessFlags; ACCESS_RIGHTS Access; ACCESS_RIGHTS ProvSpecificAccess; INHERIT_FLAGS Inheritance; LPSTR lpInheritProperty; } ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA; typedef struct _ACTRL_ACCESS_ENTRYW { TRUSTEE_W Trustee; ULONG fAccessFlags; ACCESS_RIGHTS Access; ACCESS_RIGHTS ProvSpecificAccess; INHERIT_FLAGS Inheritance; LPWSTR lpInheritProperty; } ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW; DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_ENTRY) DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_ENTRY) typedef struct _ACTRL_ACCESS_ENTRY_LISTA { ULONG cEntries; ACTRL_ACCESS_ENTRYA *pAccessList; } ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA; typedef struct _ACTRL_ACCESS_ENTRY_LISTW { ULONG cEntries; ACTRL_ACCESS_ENTRYW *pAccessList; } ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW; DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_ENTRY_LIST) DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_ENTRY_LIST) typedef struct _ACTRL_PROPERTY_ENTRYA { LPSTR lpProperty; PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList; ULONG fListFlags; } ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA; typedef struct _ACTRL_PROPERTY_ENTRYW { LPWSTR lpProperty; PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList; ULONG fListFlags; } ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW; DECL_WINELIB_TYPE_AW(ACTRL_PROPERTY_ENTRY) DECL_WINELIB_TYPE_AW(PACTRL_PROPERTY_ENTRY) typedef struct _ACTRL_ALISTA { ULONG cEntries; PACTRL_PROPERTY_ENTRYA pPropertyAccessList; } ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA; typedef struct _ACTRL_ALISTW { ULONG cEntries; PACTRL_PROPERTY_ENTRYW pPropertyAccessList; } ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW; DECL_WINELIB_TYPE_AW(ACTRL_ACCESS) DECL_WINELIB_TYPE_AW(PACTRL_ACCESS) DECL_WINELIB_TYPE_AW(ACTRL_AUDIT) DECL_WINELIB_TYPE_AW(PACTRL_AUDIT) #define TRUSTEE_ACCESS_ALLOWED 0x00000001 #define TRUSTEE_ACCESS_READ 0x00000002 #define TRUSTEE_ACCESS_WRITE 0x00000004 #define TRUSTEE_ACCESS_EXPLICIT 0x00000001 #define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ|TRUSTEE_ACCESS_WRITE) #define TRUSTEE_ACCESS_ALL 0xFFFFFFFF typedef struct _TRUSTEE_ACCESSA { LPSTR lpProperty; ACCESS_RIGHTS Access; ULONG fAccessFlags; ULONG fReturnedAccess; } TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA; typedef struct _TRUSTEE_ACCESSW { LPWSTR lpProperty; ACCESS_RIGHTS Access; ULONG fAccessFlags; ULONG fReturnedAccess; } TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW; DECL_WINELIB_TYPE_AW(TRUSTEE_ACCESS) DECL_WINELIB_TYPE_AW(PTRUSTEE_ACCESS) #define ACTRL_RESERVED 0x00000000 #define ACTRL_PERM_1 0x00000001 #define ACTRL_PERM_2 0x00000002 #define ACTRL_PERM_3 0x00000004 #define ACTRL_PERM_4 0x00000008 #define ACTRL_PERM_5 0x00000010 #define ACTRL_PERM_6 0x00000020 #define ACTRL_PERM_7 0x00000040 #define ACTRL_PERM_8 0x00000080 #define ACTRL_PERM_9 0x00000100 #define ACTRL_PERM_10 0x00000200 #define ACTRL_PERM_11 0x00000400 #define ACTRL_PERM_12 0x00000800 #define ACTRL_PERM_13 0x00001000 #define ACTRL_PERM_14 0x00002000 #define ACTRL_PERM_15 0x00004000 #define ACTRL_PERM_16 0x00008000 #define ACTRL_PERM_17 0x00010000 #define ACTRL_PERM_18 0x00020000 #define ACTRL_PERM_19 0x00040000 #define ACTRL_PERM_20 0x00080000 #define ACTRL_ACCESS_ALLOWED 0x00000001 #define ACTRL_ACCESS_DENIED 0x00000002 #define ACTRL_AUDIT_SUCCESS 0x00000004 #define ACTRL_AUDIT_FAILURE 0x00000008 #define ACTRL_ACCESS_PROTECTED 0x00000001 #define ACTRL_SYSTEM_ACCESS 0x04000000 #define ACTRL_DELETE 0x08000000 #define ACTRL_READ_CONTROL 0x10000000 #define ACTRL_CHANGE_ACCESS 0x20000000 #define ACTRL_CHANGE_OWNER 0x40000000 #define ACTRL_SYNCHRONIZE 0x80000000 #define ACTRL_STD_RIGHTS_ALL 0xf8000000 #define ACTRL_STD_RIGHT_REQUIRED (ACTRL_STD_RIGHTS_ALL & ~ACTRL_SYNCHRONIZE) #define ACTRL_DS_OPEN ACTRL_RESERVED #define ACTRL_DS_CREATE_CHILD ACTRL_PERM_1 #define ACTRL_DS_DELETE_CHILD ACTRL_PERM_2 #define ACTRL_DS_LIST ACTRL_PERM_3 #define ACTRL_DS_SELF ACTRL_PERM_4 #define ACTRL_DS_READ_PROP ACTRL_PERM_5 #define ACTRL_DS_WRITE_PROP ACTRL_PERM_6 #define ACTRL_DS_DELETE_TREE ACTRL_PERM_7 #define ACTRL_DS_LIST_OBJECT ACTRL_PERM_8 #define ACTRL_DS_CONTROL_ACCESS ACTRL_PERM_9 #define ACTRL_FILE_READ ACTRL_PERM_1 #define ACTRL_FILE_WRITE ACTRL_PERM_2 #define ACTRL_FILE_APPEND ACTRL_PERM_3 #define ACTRL_FILE_READ_PROP ACTRL_PERM_4 #define ACTRL_FILE_WRITE_PROP ACTRL_PERM_5 #define ACTRL_FILE_EXECUTE ACTRL_PERM_6 #define ACTRL_FILE_READ_ATTRIB ACTRL_PERM_8 #define ACTRL_FILE_WRITE_ATTRIB ACTRL_PERM_9 #define ACTRL_FILE_CREATE_PIPE ACTRL_PERM_10 #define ACTRL_DIR_LIST ACTRL_PERM_1 #define ACTRL_DIR_CREATE_OBJECT ACTRL_PERM_2 #define ACTRL_DIR_CREATE_CHILD ACTRL_PERM_3 #define ACTRL_DIR_DELETE_CHILD ACTRL_PERM_7 #define ACTRL_DIR_TRAVERSE ACTRL_PERM_6 #define ACTRL_KERNEL_TERMINATE ACTRL_PERM_1 #define ACTRL_KERNEL_THREAD ACTRL_PERM_2 #define ACTRL_KERNEL_VM ACTRL_PERM_3 #define ACTRL_KERNEL_VM_READ ACTRL_PERM_4 #define ACTRL_KERNEL_VM_WRITE ACTRL_PERM_5 #define ACTRL_KERNEL_DUP_HANDLE ACTRL_PERM_6 #define ACTRL_KERNEL_PROCESS ACTRL_PERM_7 #define ACTRL_KERNEL_SET_INFO ACTRL_PERM_8 #define ACTRL_KERNEL_GET_INFO ACTRL_PERM_9 #define ACTRL_KERNEL_CONTROL ACTRL_PERM_10 #define ACTRL_KERNEL_ALERT ACTRL_PERM_11 #define ACTRL_KERNEL_GET_CONTEXT ACTRL_PERM_12 #define ACTRL_KERNEL_SET_CONTEXT ACTRL_PERM_13 #define ACTRL_KERNEL_TOKEN ACTRL_PERM_14 #define ACTRL_KERNEL_IMPERSONATE ACTRL_PERM_15 #define ACTRL_KERNEL_DIMPERSONATE ACTRL_PERM_16 #define ACTRL_PRINT_SADMIN ACTRL_PERM_1 #define ACTRL_PRINT_SLIST ACTRL_PERM_2 #define ACTRL_PRINT_PADMIN ACTRL_PERM_3 #define ACTRL_PRINT_PUSE ACTRL_PERM_4 #define ACTRL_PRINT_JADMIN ACTRL_PERM_5 #define ACTRL_SVC_GET_INFO ACTRL_PERM_1 #define ACTRL_SVC_SET_INFO ACTRL_PERM_2 #define ACTRL_SVC_STATUS ACTRL_PERM_3 #define ACTRL_SVC_LIST ACTRL_PERM_4 #define ACTRL_SVC_START ACTRL_PERM_5 #define ACTRL_SVC_STOP ACTRL_PERM_6 #define ACTRL_SVC_PAUSE ACTRL_PERM_7 #define ACTRL_SVC_INTERROGATE ACTRL_PERM_8 #define ACTRL_SVC_UCONTROL ACTRL_PERM_9 #define ACTRL_REG_QUERY ACTRL_PERM_1 #define ACTRL_REG_SET ACTRL_PERM_2 #define ACTRL_REG_CREATE_CHILD ACTRL_PERM_3 #define ACTRL_REG_LIST ACTRL_PERM_4 #define ACTRL_REG_NOTIFY ACTRL_PERM_5 #define ACTRL_REG_LINK ACTRL_PERM_6 #define ACTRL_WIN_CLIPBRD ACTRL_PERM_1 #define ACTRL_WIN_GLOBAL_ATOMS ACTRL_PERM_2 #define ACTRL_WIN_CREATE ACTRL_PERM_3 #define ACTRL_WIN_LIST_DESK ACTRL_PERM_4 #define ACTRL_WIN_LIST ACTRL_PERM_5 #define ACTRL_WIN_READ_ATTRIBS ACTRL_PERM_6 #define ACTRL_WIN_WRITE_ATTRIBS ACTRL_PERM_7 #define ACTRL_WIN_SCREEN ACTRL_PERM_8 #define ACTRL_WIN_EXIT ACTRL_PERM_9 #define ACTRL_ACCESS_NO_OPTIONS 0x00000000 #define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001 typedef struct _ACTRL_OVERLAPPED { union { PVOID Provider; ULONG Reserved1; } DUMMYUNIONNAME; ULONG Reserved2; HANDLE hEvent; } ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED; typedef struct _ACTRL_ACCESS_INFOA { ULONG fAccessPermission; LPSTR lpAccessPermissionName; } ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA; typedef struct _ACTRL_ACCESS_INFOW { ULONG fAccessPermission; LPWSTR lpAccessPermissionName; } ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW; DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_INFO) DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_INFO) typedef struct _ACTRL_CONTROL_INFOA { LPSTR lpControlId; LPSTR lpControlName; } ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA; typedef struct _ACTRL_CONTROL_INFOW { LPWSTR lpControlId; LPWSTR lpControlName; } ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW; DECL_WINELIB_TYPE_AW(ACTRL_CONTROL_INFO) DECL_WINELIB_TYPE_AW(PACTRL_CONTROL_INFO) typedef enum _PROGRESS_INVOKE_SETTING { ProgressInvokeNever = 1, ProgressInvokeEveryObject, ProgressInvokeOnError, ProgressCancelOperation, ProgressRetryOperation } PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING; typedef struct _INHERITED_FROMA { LONG GenerationGap; LPSTR AncestorName; } INHERITED_FROMA, *PINHERITED_FROMA; typedef struct _INHERITED_FROMW { LONG GenerationGap; LPWSTR AncestorName; } INHERITED_FROMW, *PINHERITED_FROMW; DECL_WINELIB_TYPE_AW(INHERITED_FROM) DECL_WINELIB_TYPE_AW(PINHERITED_FROM) #define AccFree LocalFree #ifdef __cplusplus } #endif #endif /* __WINE_ACCCTRL_H */ ================================================ FILE: wine/windows/access.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a8c-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IAccessor : IUnknown { typedef DWORD DBACCESSORFLAGS; typedef DWORD DBBINDSTATUS; [local] HRESULT AddRefAccessor([in] HACCESSOR hAccessor, [in, out, unique, annotation("__out_opt")] DBREFCOUNT *pcRefCount); [call_as(AddRefAccessor)] HRESULT RemoteAddRefAccessor([in] HACCESSOR hAccessor, [in, out, unique] DBREFCOUNT *pcRefCount, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT CreateAccessor([in] DBACCESSORFLAGS dwAccessorFlags, [in] DBCOUNTITEM cBindings, [in, size_is(cBindings), annotation("__in_ecount(cBindings)")] const DBBINDING rgBindings[], [in] DBLENGTH cbRowSize, [out, annotation("__out")] HACCESSOR *phAccessor, [out, size_is(cBindings), annotation("__out_ecount_opt(cBindings)")] DBBINDSTATUS rgStatus[]); [call_as(CreateAccessor)] HRESULT RemoteCreateAccessor([in] DBACCESSORFLAGS dwAccessorFlags, [in] DBCOUNTITEM cBindings, [in, unique, size_is((ULONG)cBindings)] DBBINDING *rgBindings, [in] DBLENGTH cbRowSize, [out] HACCESSOR *phAccessor, [in, out, unique, size_is((ULONG)cBindings)] DBBINDSTATUS *rgStatus, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetBindings([in] HACCESSOR hAccessor, [out, annotation("__out")] DBACCESSORFLAGS *pdwAccessorFlags, [in, out, annotation("__out_opt")] DBCOUNTITEM *pcBindings, [out, size_is(,*pcBindings), annotation("__deref_out_ecount_opt(*pcBindings)")] DBBINDING **prgBindings); [call_as(GetBindings)] HRESULT RemoteGetBindings([in] HACCESSOR hAccessor, [out] DBACCESSORFLAGS *pdwAccessorFlags, [in, out] DBCOUNTITEM *pcBindings, [out, size_is(,(ULONG)*pcBindings)] DBBINDING **prgBindings, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT ReleaseAccessor([in] HACCESSOR hAccessor, [in, out, unique, annotation("__out_opt")] DBREFCOUNT *pcRefCount); [call_as(ReleaseAccessor)] HRESULT RemoteReleaseAccessor([in] HACCESSOR hAccessor, [in, out, unique] DBREFCOUNT *pcRefCount, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/aclapi.h ================================================ /* * Copyright (C) 2004 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ACLAPI_H #define __WINE_ACLAPI_H #include #include #ifdef __cplusplus extern "C" { #endif typedef void (*FN_PROGRESS)(LPWSTR,DWORD,PPROG_INVOKE_SETTING,PVOID,BOOL); WINADVAPI DWORD WINAPI GetExplicitEntriesFromAclA( PACL, PULONG, PEXPLICIT_ACCESS_A* ); WINADVAPI DWORD WINAPI GetExplicitEntriesFromAclW( PACL, PULONG, PEXPLICIT_ACCESS_W* ); #define GetExplicitEntriesFromAcl WINELIB_NAME_AW(GetExplicitEntriesFromAcl) WINADVAPI DWORD WINAPI GetSecurityInfo( HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); WINADVAPI DWORD WINAPI GetSecurityInfoExA(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, LPCSTR, LPCSTR, PACTRL_ACCESSA*, PACTRL_AUDITA*, LPSTR*, LPSTR*); WINADVAPI DWORD WINAPI GetSecurityInfoExW(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, LPCWSTR, LPCWSTR, PACTRL_ACCESSW*, PACTRL_AUDITW*, LPWSTR*, LPWSTR*); #define GetSecurityInfoEx WINELIB_NAME_AW(GetSecurityInfoEx) WINADVAPI DWORD WINAPI GetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); WINADVAPI DWORD WINAPI GetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); #define GetNamedSecurityInfo WINELIB_NAME_AW(GetNamedSecurityInfo) WINADVAPI DWORD WINAPI SetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL); WINADVAPI DWORD WINAPI SetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL); #define SetNamedSecurityInfo WINELIB_NAME_AW(SetNamedSecurityInfo) WINADVAPI DWORD WINAPI SetEntriesInAclA( ULONG, PEXPLICIT_ACCESSA, PACL, PACL*); WINADVAPI DWORD WINAPI SetEntriesInAclW( ULONG, PEXPLICIT_ACCESSW, PACL, PACL*); #define SetEntriesInAcl WINELIB_NAME_AW(SetEntriesInAcl) WINADVAPI DWORD WINAPI SetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL); WINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormA( PTRUSTEEA ); WINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormW( PTRUSTEEW ); #define GetTrusteeForm WINELIB_NAME_AW(GetTrusteeForm) WINADVAPI LPSTR WINAPI GetTrusteeNameA( PTRUSTEEA ); WINADVAPI LPWSTR WINAPI GetTrusteeNameW( PTRUSTEEW ); #define GetTrusteeName WINELIB_NAME_AW(GetTrusteeName) WINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeA( PTRUSTEEA ); WINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeW( PTRUSTEEW ); #define GetTrusteeType WINELIB_NAME_AW(GetTrusteeType) WINADVAPI DWORD WINAPI BuildSecurityDescriptorA( PTRUSTEEA, PTRUSTEEA, ULONG, PEXPLICIT_ACCESS_A, ULONG, PEXPLICIT_ACCESS_A, PSECURITY_DESCRIPTOR, PULONG, PSECURITY_DESCRIPTOR* ); WINADVAPI DWORD WINAPI BuildSecurityDescriptorW( PTRUSTEEW, PTRUSTEEW, ULONG, PEXPLICIT_ACCESS_W, ULONG, PEXPLICIT_ACCESS_W, PSECURITY_DESCRIPTOR, PULONG, PSECURITY_DESCRIPTOR* ); #define BuildSecurityDescriptor WINELIB_NAME_AW(BuildSecurityDescriptor) WINADVAPI void WINAPI BuildTrusteeWithNameA( PTRUSTEEA, LPSTR ); WINADVAPI void WINAPI BuildTrusteeWithNameW( PTRUSTEEW, LPWSTR ); #define BuildTrusteeWithName WINELIB_NAME_AW(BuildTrusteeWithName) WINADVAPI void WINAPI BuildTrusteeWithObjectsAndNameA(PTRUSTEEA, POBJECTS_AND_NAME_A, SE_OBJECT_TYPE, LPSTR, LPSTR, LPSTR); WINADVAPI void WINAPI BuildTrusteeWithObjectsAndNameW(PTRUSTEEW, POBJECTS_AND_NAME_W, SE_OBJECT_TYPE, LPWSTR, LPWSTR, LPWSTR); #define BuildTrusteeWithObjectsAndName WINELIB_NAME_AW(BuildTrusteeWithObjectsAndName) WINADVAPI void WINAPI BuildTrusteeWithObjectsAndSidA(PTRUSTEEA, POBJECTS_AND_SID, GUID*, GUID*, PSID); WINADVAPI void WINAPI BuildTrusteeWithObjectsAndSidW(PTRUSTEEW, POBJECTS_AND_SID, GUID*, GUID*, PSID); #define BuildTrusteeWithObjectsAndSid WINELIB_NAME_AW(BuildTrusteeWithObjectsAndSid) WINADVAPI void WINAPI BuildExplicitAccessWithNameA(PEXPLICIT_ACCESSA, LPSTR, DWORD, ACCESS_MODE, DWORD); WINADVAPI void WINAPI BuildExplicitAccessWithNameW(PEXPLICIT_ACCESSW, LPWSTR, DWORD, ACCESS_MODE, DWORD); #define BuildExplicitAccessWithName WINELIB_NAME_AW(BuildExplicitAccessWithName) WINADVAPI void WINAPI BuildTrusteeWithSidA(PTRUSTEEA pTrustee, PSID pSid); WINADVAPI void WINAPI BuildTrusteeWithSidW(PTRUSTEEW pTrustee, PSID pSid); #define BuildTrusteeWithSid WINELIB_NAME_AW(BuildTrusteeWithSid) WINADVAPI DWORD WINAPI GetEffectiveRightsFromAclA(PACL,PTRUSTEE_A,PACCESS_MASK); WINADVAPI DWORD WINAPI GetEffectiveRightsFromAclW(PACL,PTRUSTEE_W,PACCESS_MASK); #define GetEffectiveRightsFromAcl WINELIB_NAME_AW(GetEffectiveRightsFromAcl) #ifdef __cplusplus } #endif #endif /* __WINE_ACLAPI_H */ ================================================ FILE: wine/windows/aclui.h ================================================ /* * Copyright (C) 2009 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ACLUI_H #define __WINE_ACLUI_H #include #include #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _SI_OBJECT_INFO { DWORD dwFlags; HINSTANCE hInstance; LPWSTR pszServerName; LPWSTR pszObjectName; LPWSTR pszPageTitle; GUID guidObjectType; } SI_OBJECT_INFO, *PSI_OBJECT_INFO; #define SI_EDIT_PERMS 0x00000000 #define SI_EDIT_OWNER 0x00000001 #define SI_EDIT_AUDITS 0x00000002 #define SI_CONTAINER 0x00000004 #define SI_READONLY 0x00000008 #define SI_ADVANCED 0x00000010 #define SI_RESET 0x00000020 #define SI_OWNER_READONLY 0x00000040 #define SI_EDIT_PROPERTIES 0x00000080 #define SI_OWNER_RECURSE 0x00000100 #define SI_NO_ACL_PROTECT 0x00000200 #define SI_NO_TREE_APPLY 0x00000400 #define SI_PAGE_TITLE 0x00000800 #define SI_SERVER_IS_DC 0x00001000 #define SI_RESET_DACL_TREE 0x00004000 #define SI_RESET_SACL_TREE 0x00008000 #define SI_OBJECT_GUID 0x00010000 #define SI_EDIT_EFFECTIVE 0x00020000 #define SI_RESET_DACL 0x00040000 #define SI_RESET_SACL 0x00080000 #define SI_RESET_OWNER 0x00100000 #define SI_NO_ADDITIONAL_PERMISSION 0x00200000 #define SI_VIEW_ONLY 0x00400000 #define SI_PERMS_ELEVATION_REQUIRED 0x01000000 #define SI_AUDITS_ELEVATION_REQUIRED 0x02000000 #define SI_OWNER_ELEVATION_REQUIRED 0x04000000 #define SI_MAY_WRITE 0x10000000 #define SI_EDIT_ALL (SI_EDIT_PERMS | SI_EDIT_OWNER | SI_EDIT_AUDITS) typedef struct _SI_ACCESS { const GUID *pguid; ACCESS_MASK mask; LPCWSTR pszName; DWORD dwFlags; } SI_ACCESS, *PSI_ACCESS; #define SI_ACCESS_SPECIFIC 0x00010000 #define SI_ACCESS_GENERAL 0x00020000 #define SI_ACCESS_CONTAINER 0x00040000 #define SI_ACCESS_PROPERTY 0x00080000 typedef struct _SI_INHERIT_TYPE { const GUID *pguid; ULONG dwFlags; LPCWSTR pszName; } SI_INHERIT_TYPE, *PSI_INHERIT_TYPE; typedef enum _SI_PAGE_TYPE { SI_PAGE_PERM, SI_PAGE_ADVPERM, SI_PAGE_AUDIT, SI_PAGE_OWNER, SI_PAGE_EFFECTIVE, SI_PAGE_TAKEOWNERSHIP } SI_PAGE_TYPE; #define PSPCB_SI_INITDIALOG (WM_USER + 1) #undef INTERFACE #define INTERFACE ISecurityInformation DECLARE_INTERFACE_IID_(ISecurityInformation, IUnknown, "965fc360-16ff-11d0-91cb-00aa00bbb723") { /* IUnknown methods */ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /* ISecurityInformation methods */ STDMETHOD(GetObjectInformation) (THIS_ PSI_OBJECT_INFO pObjectInfo ) PURE; STDMETHOD(GetSecurity) (THIS_ SECURITY_INFORMATION RequestedInformation, PSECURITY_DESCRIPTOR *ppSecurityDescriptor, BOOL fDefault ) PURE; STDMETHOD(SetSecurity) (THIS_ SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor ) PURE; STDMETHOD(GetAccessRights) (THIS_ const GUID* pguidObjectType, DWORD dwFlags, PSI_ACCESS *ppAccess, ULONG *pcAccesses, ULONG *piDefaultAccess ) PURE; STDMETHOD(MapGeneric) (THIS_ const GUID *pguidObjectType, UCHAR *pAceFlags, ACCESS_MASK *pMask) PURE; STDMETHOD(GetInheritTypes) (THIS_ PSI_INHERIT_TYPE *ppInheritTypes, ULONG *pcInheritTypes ) PURE; STDMETHOD(PropertySheetPageCallback)(THIS_ HWND hwnd, UINT uMsg, SI_PAGE_TYPE uPage ) PURE; }; #undef INTERFACE typedef ISecurityInformation *LPSECURITYINFO; #define INTERFACE ISecurityInformation2 DECLARE_INTERFACE_IID_(ISecurityInformation2, IUnknown, "c3ccfdb4-6f88-11d2-a3ce-00c04fb1782a") { /* IUnknown methods */ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /* ISecurityInformation2 methods */ STDMETHOD_(BOOL,IsDaclCanonical) (THIS_ PACL pDacl) PURE; STDMETHOD(LookupSids) (THIS_ ULONG cSids, PSID *rgpSids, LPDATAOBJECT *ppdo) PURE; }; #undef INTERFACE typedef ISecurityInformation2 *LPSECURITYINFO2; #define CFSTR_ACLUI_SID_INFO_LIST TEXT("CFSTR_ACLUI_SID_INFO_LIST") typedef struct _SID_INFO { PSID pSid; PWSTR pwzCommonName; PWSTR pwzClass; PWSTR pwzUPN; } SID_INFO, *PSID_INFO; typedef struct _SID_INFO_LIST { ULONG cItems; SID_INFO aSidInfo[ANYSIZE_ARRAY]; } SID_INFO_LIST, *PSID_INFO_LIST; #define INTERFACE IEffectivePermission DECLARE_INTERFACE_IID_(IEffectivePermission, IUnknown, "3853dc76-9f35-407c-88a1-d19344365fbc") { /* IUnknown methods */ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /* ISecurityInformation methods */ STDMETHOD(GetEffectivePermission) (THIS_ const GUID* pguidObjectType, PSID pUserSid, LPCWSTR pszServerName, PSECURITY_DESCRIPTOR pSD, POBJECT_TYPE_LIST *ppObjectTypeList, ULONG *pcObjectTypeListLength, PACCESS_MASK *ppGrantedAccessList, ULONG *pcGrantedAccessListLength) PURE; }; #undef INTERFACE typedef IEffectivePermission *LPEFFECTIVEPERMISSION; #define INTERFACE ISecurityObjectTypeInfo DECLARE_INTERFACE_IID_(ISecurityObjectTypeInfo, IUnknown, "fc3066eb-79ef-444b-9111-d18a75ebf2fa") { /* IUnknown methods */ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /* ISecurityInformation methods */ STDMETHOD(GetInheritSource)(THIS_ SECURITY_INFORMATION si, PACL pACL, #ifndef WINE_NO_UNICODE_MACROS PINHERITED_FROM *ppInheritArray #else PINHERITED_FROMW *ppInheritArray #endif ) PURE; }; #undef INTERFACE typedef ISecurityObjectTypeInfo *LPSecurityObjectTypeInfo; #define INTERFACE ISecurityInformation3 DECLARE_INTERFACE_IID_(ISecurityInformation3, IUnknown, "e2cdc9cc-31bd-4f8f-8c8b-b641af516a1a") { /* IUnknown methods */ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /* ISecurityInformation3 methods */ STDMETHOD(GetFullResourceName) (THIS_ LPWSTR *ppszResourceName) PURE; STDMETHOD(OpenElevatedEditor) (THIS_ HWND hWnd, SI_PAGE_TYPE uPage) PURE; }; #undef INTERFACE typedef ISecurityInformation3 *LPSECURITYINFO3; DEFINE_GUID(IID_ISecurityInformation, 0x965fc360, 0x16ff, 0x11d0, 0x91, 0xcb, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x23); DEFINE_GUID(IID_ISecurityInformation2, 0xc3ccfdb4, 0x6f88, 0x11d2, 0xa3, 0xce, 0x0, 0xc0, 0x4f, 0xb1, 0x78, 0x2a); DEFINE_GUID(IID_IEffectivePermission, 0x3853dc76, 0x9f35, 0x407c, 0x88, 0xa1, 0xd1, 0x93, 0x44, 0x36, 0x5f, 0xbc); DEFINE_GUID(IID_ISecurityObjectTypeInfo, 0xfc3066eb, 0x79ef, 0x444b, 0x91, 0x11, 0xd1, 0x8a, 0x75, 0xeb, 0xf2, 0xfa); DEFINE_GUID(IID_ISecurityInformation3, 0xe2cdc9cc, 0x31bd, 0x4f8f, 0x8c, 0x8b, 0xb6, 0x41, 0xaf, 0x51, 0x6a, 0x1a); HPROPSHEETPAGE WINAPI CreateSecurityPage(LPSECURITYINFO psi); BOOL WINAPI EditSecurity(HWND owner, LPSECURITYINFO psi); HRESULT WINAPI EditSecurityAdvanced(HWND owner, LPSECURITYINFO psi, SI_PAGE_TYPE uSIPage); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __WINE_ACLUI_H */ ================================================ FILE: wine/windows/activation.idl ================================================ /* * Copyright 2016 Michael Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "inspectable.idl"; #endif [ object, uuid(00000035-0000-0000-c000-000000000046), pointer_default(unique) ] interface IActivationFactory : IInspectable { HRESULT ActivateInstance([out] IInspectable **instance); } ================================================ FILE: wine/windows/activaut.idl ================================================ /* * Copyright 2008 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "ocidl.idl"; import "oleidl.idl"; import "oaidl.idl"; #endif cpp_quote("#ifndef _NO_AUTHOR_GUIDS") cpp_quote("DEFINE_GUID(CATID_ActiveScriptAuthor, 0xaee2a92,0xbcbb,0x11d0,0x8c,0x72,0x0,0xc0,0x4f,0xc2,0xb0,0x85);") cpp_quote("#endif") ================================================ FILE: wine/windows/activdbg.idl ================================================ /* * Copyright 2008 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "ocidl.idl"; import "activscp.idl"; /* import "dbgprop.idl"; */ interface IDebugDocumentContext; interface IRemoteDebugApplication; interface IEnumDebugCodeContexts; /* FIXME: */ interface IEnumDebugStackFrames; interface IDebugStackFrame; interface IApplicationDebugger; interface IEnumRemoteDebugApplicationThreads; interface IDebugApplicationNode; interface IEnumDebugExpressionContexts; interface IDebugApplicationThread; interface IDebugSyncOperation; interface IDebugAsyncOperation; interface IDebugStackFrameSniffer; interface IDebugThreadCall32; interface IActiveScriptErrorDebug; interface IProvideExpressionContexts; typedef enum tagBREAKPOINT_STATE { BREAKPOINT_DELETED, BREAKPOINT_DISABLED, BREAKPOINT_ENABLED } BREAKPOINT_STATE; typedef DWORD APPBREAKFLAGS; typedef enum tagBREAKREASON { BREAKREASON_STEP, BREAKREASON_BREAKPOINT, BREAKREASON_DEBUGGER_BLOCK, BREAKREASON_HOST_INITIATED, BREAKREASON_LANGUAGE_INITIATED, BREAKREASON_DEBUGGER_HALT, BREAKREASON_ERROR, BREAKREASON_JIT } BREAKREASON; typedef enum tagBREAKRESUME_ACTION { BREAKRESUMEACTION_ABORT, BREAKRESUMEACTION_CONTINUE, BREAKRESUMEACTION_STEP_INTO, BREAKRESUMEACTION_STEP_OVER, BREAKRESUMEACTION_STEP_OUT, BREAKRESUMEACTION_IGNORE } BREAKRESUMEACTION; typedef enum tagDOCUMENTNAMETYPE { DOCUMENTNAMETYPE_APPNODE, DOCUMENTNAMETYPE_TITLE, DOCUMENTNAMETYPE_FILE_TAIL, DOCUMENTNAMETYPE_URL } DOCUMENTNAMETYPE; typedef enum tagERRORRESUMEACTION { ERRORRESUMEACTION_ReexecuteErrorStatement, ERRORRESUMEACTION_AbortCallAndReturnErrorToCaller, ERRORRESUMEACTION_SkipErrorStatement, } ERRORRESUMEACTION; typedef WORD SOURCE_TEXT_ATTR; #ifdef INTEROPLIB enum enum_SOURCE_TEXT_ATTR { SOURCETEXT_ATTR_KEYWORD = 0x01, SOURCETEXT_ATTR_COMMENT = 0x02, SOURCETEXT_ATTR_NONSOURCE = 0x04, SOURCETEXT_ATTR_OPERATOR = 0x08, SOURCETEXT_ATTR_NUMBER = 0x10, SOURCETEXT_ATTR_STRING = 0x20, SOURCETEXT_ATTR_FUNCTION_START = 0x40 }; #endif const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_KEYWORD = 0x01; const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_COMMENT = 0x02; const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_NONSOURCE = 0x04; const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_OPERATOR = 0x08; const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_NUMBER = 0x10; const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_STRING = 0x20; const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_FUNCTION_START = 0x40; /************************************************************ * interface IActiveScriptDebug32 */ [ object, uuid(51973c10-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique) ] interface IActiveScriptDebug32 : IUnknown { HRESULT GetScriptTextAttributes( [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode, [in] ULONG uNumCodeChars, [in] LPCOLESTR pstrDelimiter, [in] DWORD dwFlags, [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr); HRESULT GetScriptletTextAttributes( [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode, [in] ULONG uNumCodeChars, [in] LPCOLESTR pstrDelimiter, [in] DWORD dwFlags, [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr); HRESULT EnumCodeContextsOfPosition( [in] DWORD dwSourceContext, [in] ULONG uCharacterOffset, [in] ULONG uNumChars, [out] IEnumDebugCodeContexts **ppescc); } [ object, uuid(bc437e23-f5b8-47f4-bb79-7d1ce5483b86), pointer_default(unique) ] interface IActiveScriptDebug64 : IUnknown { HRESULT GetScriptTextAttributes( [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode, [in] ULONG uNumCodeChars, [in] LPCOLESTR pstrDelimiter, [in] DWORD dwFlags, [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr); HRESULT GetScriptletTextAttributes( [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode, [in] ULONG uNumCodeChars, [in] LPCOLESTR pstrDelimiter, [in] DWORD dwFlags, [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr); HRESULT EnumCodeContextsOfPosition( [in] DWORDLONG dwSourceContext, [in] ULONG uCharacterOffset, [in] ULONG uNumChars, [out] IEnumDebugCodeContexts **ppescc); } /************************************************************ * interface IDebugDocumentInfo */ [ object, uuid(51973c1f-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique) ] interface IDebugDocumentInfo : IUnknown { HRESULT GetName( [in] DOCUMENTNAMETYPE dnt, [out] BSTR *pbstrName); HRESULT GetDocumentClassId( [out] CLSID *pclsidDocument); } /************************************************************ * interface IDebugDocument */ [ object, uuid(51973c21-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique) ] interface IDebugDocument : IDebugDocumentInfo { } /************************************************************ * interface IDebugCodeContext */ [ object, uuid(51973c13-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique) ] interface IDebugCodeContext : IUnknown { HRESULT GetDocumentContext( [out] IDebugDocumentContext **ppsc); HRESULT SetBreakPoint( [in] BREAKPOINT_STATE bps); } /************************************************************ * interface IEnumDebugCodeContexts */ [ object, uuid(51973c1d-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique) ] interface IEnumDebugCodeContexts : IUnknown { HRESULT Next( [in] ULONG celt, [out] IDebugCodeContext **pscc, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumDebugCodeContexts **ppescc); } /************************************************************ * interface IDebugDocumentContext */ [ object, uuid(51973c28-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique) ] interface IDebugDocumentContext : IUnknown { HRESULT GetDocument( [out] IDebugDocument **ppsd); HRESULT EnumCodeContexts( [out] IEnumDebugCodeContexts **ppescc); } /************************************************************ * interface IRemoteDebugApplicationThread */ [ object, uuid(51973c37-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique) ] interface IRemoteDebugApplicationThread : IUnknown { HRESULT GetSystemThreadId( [out] DWORD *dwThreadId); HRESULT GetApplication( [out] IRemoteDebugApplication **pprda); HRESULT EnumStackFrames( [out] IEnumDebugStackFrames **ppedsf); HRESULT GetDescription( [out] BSTR *pbstrDescription, [out] BSTR *pbstrState); HRESULT SetNextStatement( [in] IDebugStackFrame *pStackFrame, [in] IDebugCodeContext *pCodeContext); HRESULT GetState( [out] DWORD *pState); HRESULT Suspend( [out] DWORD *pdwCount); HRESULT Resume( [out] DWORD *pdwCount); HRESULT GetSuspendCount( [out] DWORD *pdwCount); } /************************************************************ * interface IRemoteDebugApplication */ [ object, uuid(51973c30-cb0c-11d0-b5c9-00a0244Aae7a), pointer_default(unique) ] interface IRemoteDebugApplication : IUnknown { HRESULT ResumeFromBreakPoint( [in] IRemoteDebugApplicationThread *prptFocus, [in] BREAKRESUMEACTION bra, [in] ERRORRESUMEACTION era); HRESULT CauseBreak(); HRESULT ConnectDebugger( [in] IApplicationDebugger *pad); HRESULT DisconnectDebugger(); HRESULT GetDebugger( [out] IApplicationDebugger **pad); HRESULT CreateInstanceAtApplication( [in] REFCLSID rclsid, [in] IUnknown *pUnkOuter, [in] DWORD dwClsContext, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObject); HRESULT QueryAlive(); HRESULT EnumThreads( [out] IEnumRemoteDebugApplicationThreads **pperdat); HRESULT GetName( [out] BSTR *pbstrName); HRESULT GetRootNode( [out] IDebugApplicationNode **ppdanRoot); HRESULT EnumGlobalExpressionContexts( [out] IEnumDebugExpressionContexts **ppedec); } /************************************************************ * interface IDebugApplication32 */ [ object, uuid(51973c32-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique), local ] interface IDebugApplication32 : IRemoteDebugApplication { HRESULT SetName( [in] LPCOLESTR pstrName); HRESULT StepOutComplete(); HRESULT DebugOutput( [in] LPCOLESTR pstr); HRESULT StartDebugSession(); HRESULT HandleBreakPoint( [in] BREAKREASON br, [out] BREAKRESUMEACTION *pbra); HRESULT Close(); HRESULT GetBreakFlags( [out] APPBREAKFLAGS *pabf, [out] IRemoteDebugApplicationThread **pprdatSteppingThread); cpp_quote("#undef GetCurrentThread") HRESULT GetCurrentThread( [out] IDebugApplicationThread **pat); HRESULT CreateAsyncDebugOperation( [in] IDebugSyncOperation *psdo, [out] IDebugAsyncOperation **ppado); HRESULT AddStackFrameSniffer( [in] IDebugStackFrameSniffer *pdsfs, [out] DWORD *pdwCookie); HRESULT RemoveStackFrameSniffer( [in] DWORD dwCookie); HRESULT QueryCurrentThreadIsDebuggerThread(); HRESULT SynchronousCallInDebuggerThread( [in] IDebugThreadCall32 *pptc, [in] DWORD dwParam1, [in] DWORD dwParam2, [in] DWORD dwParam3); HRESULT CreateApplicationNode( [out] IDebugApplicationNode **ppdanNew); HRESULT FireDebuggerEvent( [in] REFGUID riid, [in] IUnknown *punk); HRESULT HandleRuntimeError( [in] IActiveScriptErrorDebug *pErrorDebug, [in] IActiveScriptSite *pScriptSite, [out] BREAKRESUMEACTION *pbra, [out] ERRORRESUMEACTION *perra, [out] BOOL *pfCallOnScriptError); BOOL FCanJitDebug(); BOOL FIsAutoJitDebugEnabled(); HRESULT AddGlobalExpressionContextProvider( [in] IProvideExpressionContexts *pdsfs, [out] DWORD *pdwCookie); HRESULT RemoveGlobalExpressionContextProvider( [in] DWORD dwCookie); } /************************************************************ * interface IDebugApplication64 */ [ object, uuid(4dedc754-04c7-4f10-9e60-16a390fe6e62), pointer_default(unique), local ] interface IDebugApplication64 : IRemoteDebugApplication { HRESULT SetName( [in] LPCOLESTR pstrName); HRESULT StepOutComplete(); HRESULT DebugOutput( [in] LPCOLESTR pstr); HRESULT StartDebugSession(); HRESULT HandleBreakPoint( [in] BREAKREASON br, [out] BREAKRESUMEACTION *pbra); HRESULT Close(); HRESULT GetBreakFlags( [out] APPBREAKFLAGS *pabf, [out] IRemoteDebugApplicationThread **pprdatSteppingThread); HRESULT GetCurrentThread( [out] IDebugApplicationThread **pat); HRESULT CreateAsyncDebugOperation( [in] IDebugSyncOperation *psdo, [out] IDebugAsyncOperation **ppado); HRESULT AddStackFrameSniffer( [in] IDebugStackFrameSniffer *pdsfs, [out] DWORD *pdwCookie); HRESULT RemoveStackFrameSniffer( [in] DWORD dwCookie); HRESULT QueryCurrentThreadIsDebuggerThread(); HRESULT SynchronousCallInDebuggerThread( [in] IDebugThreadCall32 *pptc, [in] DWORDLONG dwParam1, [in] DWORDLONG dwParam2, [in] DWORDLONG dwParam3); HRESULT CreateApplicationNode( [out] IDebugApplicationNode **ppdanNew); HRESULT FireDebuggerEvent( [in] REFGUID riid, [in] IUnknown *punk); HRESULT HandleRuntimeError( [in] IActiveScriptErrorDebug *pErrorDebug, [in] IActiveScriptSite *pScriptSite, [out] BREAKRESUMEACTION *pbra, [out] ERRORRESUMEACTION *perra, [out] BOOL *pfCallOnScriptError); BOOL FCanJitDebug(); BOOL FIsAutoJitDebugEnabled(); HRESULT AddGlobalExpressionContextProvider( [in] IProvideExpressionContexts *pdsfs, [out] DWORDLONG *pdwCookie); HRESULT RemoveGlobalExpressionContextProvider( [in] DWORDLONG dwCookie); } /************************************************************ * interface IActiveScriptSiteDebug32 */ [ object, uuid(51973c11-cb0c-11d0-b5c9-00a0244a0e7a), pointer_default(unique), local ] interface IActiveScriptSiteDebug32 : IUnknown { HRESULT GetDocumentContextFromPosition( [in] DWORD dwSourceContext, [in] ULONG uCharacterOffset, [in] ULONG uNumChars, [out] IDebugDocumentContext **ppsc); HRESULT GetApplication( [out] IDebugApplication32 **ppda); HRESULT GetRootApplicationNode( [out] IDebugApplicationNode **ppdanRoot); HRESULT OnScriptErrorDebug( [in] IActiveScriptErrorDebug *pErrorDebug, [out] BOOL *pfEnterDebugger, [out] BOOL *pfCallOnScriptErrorWhenContinuing); } /************************************************************ * interface IActiveScriptSiteDebug64 */ [ object, uuid(d6b96b0a-7463-402c-92ac-89984226942f), pointer_default(unique), local ] interface IActiveScriptSiteDebug64 : IUnknown { HRESULT GetDocumentContextFromPosition( [in] DWORDLONG dwSourceContext, [in] ULONG uCharacterOffset, [in] ULONG uNumChars, [out] IDebugDocumentContext **ppsc); HRESULT GetApplication( [out] IDebugApplication64 **ppda); HRESULT GetRootApplicationNode( [out] IDebugApplicationNode **ppdanRoot); HRESULT OnScriptErrorDebug( [in] IActiveScriptErrorDebug *pErrorDebug, [out] BOOL *pfEnterDebugger, [out] BOOL *pfCallOnScriptErrorWhenContinuing); } cpp_quote("#ifndef DISABLE_ACTIVDBG_INTERFACE_WRAPPERS") cpp_quote("#ifdef _WIN64") cpp_quote("#define IActiveScriptDebug IActiveScriptDebug64") cpp_quote("#define IID_IActiveScriptDebug IID_IActiveScriptDebug64") cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug64") cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug64") cpp_quote("#define IDebugApplication IDebugApplication64") cpp_quote("#define IID_IDebugApplication IID_IDebugApplication64") cpp_quote("#else") cpp_quote("#define IActiveScriptDebug IActiveScriptDebug32") cpp_quote("#define IID_IActiveScriptDebug IID_IActiveScriptDebug32") cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug32") cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug32") cpp_quote("#define IDebugApplication IDebugApplication32") cpp_quote("#define IID_IDebugApplication IID_IDebugApplication32") cpp_quote("#endif") cpp_quote("#endif") ================================================ FILE: wine/windows/activscp.idl ================================================ /* * Copyright 2004 Kevin Koltzau * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "ocidl.idl"; import "oleidl.idl"; import "oaidl.idl"; #endif cpp_quote("#ifndef _NO_SCRIPT_GUIDS") cpp_quote("DEFINE_GUID(CATID_ActiveScript, 0xf0b7a1a1,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);") cpp_quote("DEFINE_GUID(CATID_ActiveScriptParse, 0xf0b7a1a2,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);") cpp_quote("DEFINE_GUID(CATID_ActiveScriptEncode, 0xf0b7a1a3,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);") cpp_quote("#endif") cpp_quote("#define SCRIPTPROP_NAME 0x00000000") cpp_quote("#define SCRIPTPROP_MAJORVERSION 0x00000001") cpp_quote("#define SCRIPTPROP_MINORVERSION 0x00000002") cpp_quote("#define SCRIPTPROP_BUILDNUMBER 0x00000003") cpp_quote("#define SCRIPTPROP_DELAYEDEVENTSINKING 0x00001000") cpp_quote("#define SCRIPTPROP_CATCHEXCEPTION 0x00001001") cpp_quote("#define SCRIPTPROP_CONVERSIONLCID 0x00001002") cpp_quote("#define SCRIPTPROP_HOSTSTACKREQUIRED 0x00001003") cpp_quote("#define SCRIPTPROP_DEBUGGER 0x00001100") cpp_quote("#define SCRIPTPROP_JITDEBUG 0x00001101") cpp_quote("#define SCRIPTPROP_INVOKEVERSIONING 0x00004000") cpp_quote("#define SCRIPTPROP_HACK_FIBERSUPPORT 0x70000000") cpp_quote("#define SCRIPTPROP_HACK_TRIDENTEVENTSINK 0x70000001") cpp_quote("#define SCRIPTPROP_ABBREVIATE_GLOBALNAME_RESOLUTION 0x70000002") typedef enum tagSCRIPTLANGUAGEVERSION { SCRIPTLANGUAGEVERSION_DEFAULT = 0, SCRIPTLANGUAGEVERSION_5_7 = 1, SCRIPTLANGUAGEVERSION_5_8 = 2, SCRIPTLANGUAGEVERSION_MAX = 255 } SCRIPTLANGUAGEVERSION; typedef enum tagSCRIPTSTATE { SCRIPTSTATE_UNINITIALIZED = 0, SCRIPTSTATE_STARTED = 1, SCRIPTSTATE_CONNECTED = 2, SCRIPTSTATE_DISCONNECTED = 3, SCRIPTSTATE_CLOSED = 4, SCRIPTSTATE_INITIALIZED = 5 } SCRIPTSTATE; typedef enum tagSCRIPTTHREADSTATE { SCRIPTTHREADSTATE_NOTINSCRIPT = 0, SCRIPTTHREADSTATE_RUNNING = 1 } SCRIPTTHREADSTATE; typedef enum tagSCRIPTUICITEM { SCRIPTUICITEM_INPUTBOX = 1, SCRIPTUICITEM_MSGBOX = 2 } SCRIPTUICITEM; typedef enum tagSCRIPTUICHANDLING { SCRIPTUICHANDLING_ALLOW = 0, SCRIPTUICHANDLING_NOUIERROR = 1, SCRIPTUICHANDLING_NOUIDEFAULT = 2 } SCRIPTUICHANDLING; typedef enum tagSCRIPTGCTYPE { SCRIPTGCTYPE_NORMAL = 0, SCRIPTGCTYPE_EXHAUSTIVE = 1 } SCRIPTGCTYPE; typedef DWORD SCRIPTTHREADID; cpp_quote("#define SCRIPTTHREADID_CURRENT ((SCRIPTTHREADID)-1)") cpp_quote("#define SCRIPTTHREADID_BASE ((SCRIPTTHREADID)-2)") cpp_quote("#define SCRIPTTHREADID_ALL ((SCRIPTTHREADID)-3)") cpp_quote("#define SCRIPTITEM_ISVISIBLE 0x00000002") cpp_quote("#define SCRIPTITEM_ISSOURCE 0x00000004") cpp_quote("#define SCRIPTITEM_GLOBALMEMBERS 0x00000008") cpp_quote("#define SCRIPTITEM_ISPERSISTENT 0x00000040") cpp_quote("#define SCRIPTITEM_CODEONLY 0x00000200") cpp_quote("#define SCRIPTITEM_NOCODE 0x00000400") cpp_quote("#define SCRIPTITEM_ALL_FLAGS (SCRIPTITEM_ISSOURCE | \\") cpp_quote(" SCRIPTITEM_ISVISIBLE | \\") cpp_quote(" SCRIPTITEM_ISPERSISTENT | \\") cpp_quote(" SCRIPTITEM_GLOBALMEMBERS | \\") cpp_quote(" SCRIPTITEM_NOCODE | \\") cpp_quote(" SCRIPTITEM_CODEONLY)") cpp_quote("#define SCRIPTTYPELIB_ISCONTROL 0x00000010") cpp_quote("#define SCRIPTTYPELIB_ISPERSISTENT 0x00000040") cpp_quote("#define SCRIPTTYPELIB_ALL_FLAGS (SCRIPTTEXT_ISCONTROL | SCRIPTTYPELIB_ISPERSISTENT)") cpp_quote("#define SCRIPTTEXT_DELAYEXECUTION 0x00000001") cpp_quote("#define SCRIPTTEXT_ISVISIBLE 0x00000002") cpp_quote("#define SCRIPTTEXT_ISEXPRESSION 0x00000020") cpp_quote("#define SCRIPTTEXT_ISPERSISTENT 0x00000040") cpp_quote("#define SCRIPTTEXT_HOSTMANAGESSOURCE 0x00000080") cpp_quote("#define SCRIPTTEXT_ALL_FLAGS (SCRIPTTEXT_DELAYEXECUTION | \\") cpp_quote(" SCRIPTTEXT_ISVISIBLE | \\") cpp_quote(" SCRIPTTEXT_ISEXPRESSION | \\") cpp_quote(" SCRIPTTEXT_ISPERSISTENT | \\") cpp_quote(" SCRIPTTEXT_HOSTMANAGESSOURCE)") cpp_quote("#define SCRIPTPROC_HOSTMANAGESSOURCE 0x00000080") cpp_quote("#define SCRIPTPROC_IMPLICIT_THIS 0x00000100") cpp_quote("#define SCRIPTPROC_IMPLICIT_PARENTS 0x00000200") cpp_quote("#define SCRIPTPROC_ALL_FLAGS (SCRIPTPROC_HOSTMANAGESSOURCE | \\") cpp_quote(" SCRIPTPROC_IMPLICIT_THIS | \\") cpp_quote(" SCRIPTPROC_IMPLICIT_PARENTS)") cpp_quote("#define SCRIPTINFO_IUNKNOWN 0x00000001") cpp_quote("#define SCRIPTINFO_ITYPEINFO 0x00000002") cpp_quote("#define SCRIPTINFO_ALL_FLAGS (SCRIPTINFO_IUNKNOWN | SCRIPTINFO_ITYPEINFO)") cpp_quote("#define SCRIPTINTERRUPT_DEBUG 0x00000001") cpp_quote("#define SCRIPTINTERRUPT_RAISEEXCEPTION 0x00000002") cpp_quote("#define SCRIPTINTERRUPT_ALL_FLAGS (SCRIPTINTERRUPT_DEBUG | SCRIPTINTERRUPT_RAISEEXCEPTION)") cpp_quote("#define SCRIPTSTAT_STATEMENT_COUNT 1") cpp_quote("#define SCRIPTSTAT_INSTRUCTION_COUNT 2") cpp_quote("#define SCRIPTSTAT_INTSTRUCTION_TIME 3") cpp_quote("#define SCRIPTSTAT_TOTAL_TIME 4") cpp_quote("#define SCRIPT_E_RECORDED 0x86664004") cpp_quote("#define SCRIPT_E_REPORTED 0x80020101") cpp_quote("#define SCRIPT_E_PROPAGATE 0x80020102") [ object, uuid(EAE1BA61-A4ED-11cf-8F20-00805F2CD064), pointer_default(unique) ] interface IActiveScriptError : IUnknown { HRESULT GetExceptionInfo( [out] EXCEPINFO *pexcepinfo ); HRESULT GetSourcePosition( [out] DWORD *pdwSourceContext, [out] ULONG *pulLineNumber, [out] LONG *plCharacterPosition ); HRESULT GetSourceLineText( [out] BSTR *pbstrSourceLine ); } [ object, uuid(DB01A1E3-A42B-11cf-8F20-00805F2CD064), pointer_default(unique) ] interface IActiveScriptSite : IUnknown { HRESULT GetLCID( [out] LCID *plcid); HRESULT GetItemInfo( [in] LPCOLESTR pstrName, [in] DWORD dwReturnMask, [out] IUnknown **ppiunkItem, [out] ITypeInfo **ppti ); HRESULT GetDocVersionString( [out] BSTR *pbstrVersion ); HRESULT OnScriptTerminate( [in] const VARIANT *pvarResult, [in] const EXCEPINFO *pexcepinfo ); HRESULT OnStateChange( [in] SCRIPTSTATE ssScriptState ); HRESULT OnScriptError( [in] IActiveScriptError *pscripterror ); HRESULT OnEnterScript(void); HRESULT OnLeaveScript(void); } cpp_quote("typedef IActiveScriptSite *PIActiveScriptSite;") [ object, uuid(D10F6761-83E9-11cf-8F20-00805F2CD064), pointer_default(unique) ] interface IActiveScriptSiteWindow : IUnknown { HRESULT GetWindow( [out] HWND *phwnd ); HRESULT EnableModeless( [in] BOOL fEnable ); } [ object, uuid(aedae97e-d7ee-4796-b960-7f092ae844ab), pointer_default(unique) ] interface IActiveScriptSiteUIControl : IUnknown { HRESULT GetUIBehavior( [in] SCRIPTUICITEM UicItem, [out] SCRIPTUICHANDLING *pUicHandling); } [ object, uuid(539698A0-CDCA-11CF-A5EB-00AA0047A063), pointer_default(unique) ] interface IActiveScriptSiteInterruptPoll : IUnknown { HRESULT QueryContinue(); } [ object, uuid(BB1A2AE1-A4F9-11cf-8F20-00805F2CD064), pointer_default(unique) ] interface IActiveScript : IUnknown { HRESULT SetScriptSite( [in] IActiveScriptSite *pass ); HRESULT GetScriptSite( [in] REFIID riid, [out, iid_is(riid)] void **ppvObject ); HRESULT SetScriptState( [in] SCRIPTSTATE ss ); HRESULT GetScriptState( [out] SCRIPTSTATE *pssState ); HRESULT Close(void); HRESULT AddNamedItem( [in] LPCOLESTR pstrName, [in] DWORD dwFlags ); HRESULT AddTypeLib( [in] REFGUID rguidTypeLib, [in] DWORD dwMajor, [in] DWORD dwMinor, [in] DWORD dwFlags ); HRESULT GetScriptDispatch( [in] LPCOLESTR pstrItemName, [out] IDispatch **ppdisp ); HRESULT GetCurrentScriptThreadID( [out] SCRIPTTHREADID *pstidThread ); HRESULT GetScriptThreadID( [in] DWORD dwWin32ThreadId, [out] SCRIPTTHREADID *pstidThread ); HRESULT GetScriptThreadState( [in] SCRIPTTHREADID stidThread, [out] SCRIPTTHREADSTATE *pstsState ); HRESULT InterruptScriptThread( [in] SCRIPTTHREADID stidThread, [in] const EXCEPINFO *pexcepinfo, [in] DWORD dwFlags ); HRESULT Clone( [out] IActiveScript **ppscript ); } cpp_quote("typedef IActiveScript *PIActiveScript;") [ object, uuid(BB1A2AE2-A4F9-11cf-8F20-00805F2CD064), pointer_default(unique) ] interface IActiveScriptParse32 : IUnknown { HRESULT InitNew(void); HRESULT AddScriptlet( [in] LPCOLESTR pstrDefaultName, [in] LPCOLESTR pstrCode, [in] LPCOLESTR pstrItemName, [in] LPCOLESTR pstrSubItemName, [in] LPCOLESTR pstrEventName, [in] LPCOLESTR pstrDelimiter, [in] DWORD dwSourceContextCookie, [in] ULONG ulStartingLineNumber, [in] DWORD dwFlags, [out] BSTR *pbstrName, [out] EXCEPINFO *pexcepinfo ); HRESULT ParseScriptText( [in] LPCOLESTR pstrCode, [in] LPCOLESTR pstrItemName, [in] IUnknown *punkContext, [in] LPCOLESTR pstrDelimiter, [in] DWORD dwSourceContextCookie, [in] ULONG ulStartingLineNumber, [in] DWORD dwFlags, [out] VARIANT *pvarResult, [out] EXCEPINFO *pexcepinfo ); } [ object, uuid(c7ef7658-e1ee-480e-97ea-d52cb4d76d17), pointer_default(unique) ] interface IActiveScriptParse64 : IUnknown { HRESULT InitNew(void); HRESULT AddScriptlet( [in] LPCOLESTR pstrDefaultName, [in] LPCOLESTR pstrCode, [in] LPCOLESTR pstrItemName, [in] LPCOLESTR pstrSubItemName, [in] LPCOLESTR pstrEventName, [in] LPCOLESTR pstrDelimiter, [in] DWORDLONG dwSourceContextCookie, [in] ULONG ulStartingLineNumber, [in] DWORD dwFlags, [out] BSTR *pbstrName, [out] EXCEPINFO *pexcepinfo ); HRESULT ParseScriptText( [in] LPCOLESTR pstrCode, [in] LPCOLESTR pstrItemName, [in] IUnknown *punkContext, [in] LPCOLESTR pstrDelimiter, [in] DWORDLONG dwSourceContextCookie, [in] ULONG ulStartingLineNumber, [in] DWORD dwFlags, [out] VARIANT *pvarResult, [out] EXCEPINFO *pexcepinfo ); } cpp_quote("#ifdef _WIN64") cpp_quote("#define IActiveScriptParse IActiveScriptParse64") cpp_quote("#define IID_IActiveScriptParse IID_IActiveScriptParse64") cpp_quote("#else") cpp_quote("#define IActiveScriptParse IActiveScriptParse32") cpp_quote("#define IID_IActiveScriptParse IID_IActiveScriptParse32") cpp_quote("#endif") cpp_quote("typedef IActiveScriptParse *PIActiveScriptParse;") [ object, uuid(1CFF0050-6FDD-11d0-9328-00A0C90DCAA9), pointer_default(unique) ] interface IActiveScriptParseProcedureOld32 : IUnknown { HRESULT ParseProcedureText( [in] LPCOLESTR pstrCode, [in] LPCOLESTR pstrFormalParams, [in] LPCOLESTR pstrItemName, [in] IUnknown *punkContext, [in] LPCOLESTR pstrDelimiter, [in] DWORD dwSourceContextCookie, [in] ULONG ulStartingLineNumber, [in] DWORD dwFlags, [out] IDispatch **ppdisp ); } [ object, uuid(21f57128-08c9-4638-ba12-22d15d88dc5c), pointer_default(unique) ] interface IActiveScriptParseProcedureOld64 : IUnknown { HRESULT ParseProcedureText( [in] LPCOLESTR pstrCode, [in] LPCOLESTR pstrFormalParams, [in] LPCOLESTR pstrItemName, [in] IUnknown *punkContext, [in] LPCOLESTR pstrDelimiter, [in] DWORDLONG dwSourceContextCookie, [in] ULONG ulStartingLineNumber, [in] DWORD dwFlags, [out] IDispatch **ppdisp ); } cpp_quote("#ifdef _WIN64") cpp_quote("#define IActiveScriptParseProcedureOld IActiveScriptParseProcedureOld64") cpp_quote("#define IID_IActiveScriptParseProcedureOld IID_IActiveScriptParseProcedureOld64") cpp_quote("#else") cpp_quote("#define IActiveScriptParseProcedureOld IActiveScriptParseProcedureOld32") cpp_quote("#define IID_IActiveScriptParseProcedureOld IID_IActiveScriptParseProcedureOld32") cpp_quote("#endif") [ object, uuid(AA5B6A80-B834-11d0-932F-00A0C90DCAA9), pointer_default(unique) ] interface IActiveScriptParseProcedure32 : IUnknown { HRESULT ParseProcedureText( [in] LPCOLESTR pstrCode, [in] LPCOLESTR pstrFormalParams, [in] LPCOLESTR pstrProcedureName, [in] LPCOLESTR pstrItemName, [in] IUnknown *punkContext, [in] LPCOLESTR pstrDelimiter, [in] DWORD dwSourceContextCookie, [in] ULONG ulStartingLineNumber, [in] DWORD dwFlags, [out] IDispatch **ppdisp ); } [ object, uuid(c64713b6-e029-4cc5-9200-438b72890b6a), pointer_default(unique) ] interface IActiveScriptParseProcedure64 : IUnknown { HRESULT ParseProcedureText( [in] LPCOLESTR pstrCode, [in] LPCOLESTR pstrFormalParams, [in] LPCOLESTR pstrProcedureName, [in] LPCOLESTR pstrItemName, [in] IUnknown *punkContext, [in] LPCOLESTR pstrDelimiter, [in] DWORDLONG dwSourceContextCookie, [in] ULONG ulStartingLineNumber, [in] DWORD dwFlags, [out] IDispatch **ppdisp ); } cpp_quote("#ifdef _WIN64") cpp_quote("#define IActiveScriptParseProcedure IActiveScriptParseProcedure64") cpp_quote("#define IID_IActiveScriptParseProcedure IID_IActiveScriptParseProcedure64") cpp_quote("#else") cpp_quote("#define IActiveScriptParseProcedure IActiveScriptParseProcedure32") cpp_quote("#define IID_IActiveScriptParseProcedure IID_IActiveScriptParseProcedure32") cpp_quote("#endif") [ object, uuid(71ee5b20-fb04-11d1-b3a8-00a0c911e8b2), pointer_default(unique) ] interface IActiveScriptParseProcedure2_32 : IActiveScriptParseProcedure32 { } [ object, uuid(fe7c4271-210c-448d-9f54-76dab7047b28), pointer_default(unique) ] interface IActiveScriptParseProcedure2_64 : IActiveScriptParseProcedure64 { } cpp_quote("#ifdef _WIN64") cpp_quote("#define IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_64") cpp_quote("#define IID_IActiveScriptParseProcedure2 IID_IActiveScriptParseProcedure2_64") cpp_quote("#else") cpp_quote("#define IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_32") cpp_quote("#define IID_IActiveScriptParseProcedure2 IID_IActiveScriptParseProcedure2_32") cpp_quote("#endif") [ object, uuid(63CDBCB0-C1B1-11d0-9336-00A0C90DCAA9), pointer_default(unique) ] interface IBindEventHandler : IUnknown { HRESULT BindHandler( [in] LPCOLESTR pstrEvent, [in] IDispatch *pdisp ); } [ object, uuid(B8DA6310-E19B-11d0-933C-00A0C90DCAA9), pointer_default(unique) ] interface IActiveScriptStats : IUnknown { HRESULT GetStat( [in] DWORD stid, [out] ULONG *pluHi, [out] ULONG *pluLo ); HRESULT GetStatEx( [in] REFGUID guid, [out] ULONG *pluHi, [out] ULONG *pluLo ); HRESULT ResetStats(void); } [ object, uuid(4954e0d0-fbc7-11d1-8410-006008c3fbfc), pointer_default(unique) ] interface IActiveScriptProperty : IUnknown { HRESULT GetProperty( [in] DWORD dwProperty, [in] VARIANT *pvarIndex, [out] VARIANT *pvarValue); HRESULT SetProperty( [in] DWORD dwProperty, [in] VARIANT *pvarIndex, [in] VARIANT *pvarValue); } [ object, uuid(6aa2c4a0-2b53-11d4-a2a0-00104bd35090), pointer_default(unique) ] interface IActiveScriptGarbageCollector : IUnknown { HRESULT CollectGarbage( [in] SCRIPTGCTYPE gctype); } ================================================ FILE: wine/windows/adshlp.h ================================================ /* * Copyright (C) 2005 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ADSHLP_H #define __WINE_ADSHLP_H #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI ADsBuildEnumerator(IADsContainer*,IEnumVARIANT**); HRESULT WINAPI ADsEnumerateNext(IEnumVARIANT*,ULONG,VARIANT*,ULONG*); HRESULT WINAPI ADsGetObject(LPCWSTR,REFIID,VOID**); HRESULT WINAPI ADsOpenObject(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,REFIID,VOID**); BOOL WINAPI FreeADsMem(LPVOID); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/advpub.h ================================================ /* * Copyright 2004 Huw D M Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ADVPUB_H #define __WINE_ADVPUB_H #include #include #ifdef __cplusplus extern "C" { #endif #ifndef S_ASYNCHRONOUS #define S_ASYNCHRONOUS _HRESULT_TYPEDEF_(0x401E8) #endif typedef struct _CabInfoA { LPSTR pszCab; LPSTR pszInf; LPSTR pszSection; CHAR szSrcPath[MAX_PATH]; DWORD dwFlags; } CABINFOA, *PCABINFOA; typedef struct _CabInfoW { LPWSTR pszCab; LPWSTR pszInf; LPWSTR pszSection; WCHAR szSrcPath[MAX_PATH]; DWORD dwFlags; } CABINFOW, *PCABINFOW; DECL_WINELIB_TYPE_AW(CABINFO) DECL_WINELIB_TYPE_AW(PCABINFO) typedef struct _PERUSERSECTIONA { CHAR szGUID[39 /*MAX_GUID_STRING_LEN*/ + 20]; CHAR szDispName[128]; CHAR szLocale[10]; CHAR szStub[MAX_PATH * 4]; CHAR szVersion[32]; CHAR szCompID[128]; DWORD dwIsInstalled; BOOL bRollback; } PERUSERSECTIONA, *PPERUSERSECTIONA; typedef struct _PERUSERSECTIONW { WCHAR szGUID[39 /*MAX_GUID_STRING_LEN*/ + 20]; WCHAR szDispName[128]; WCHAR szLocale[10]; WCHAR szStub[MAX_PATH * 4]; WCHAR szVersion[32]; WCHAR szCompID[128]; DWORD dwIsInstalled; BOOL bRollback; } PERUSERSECTIONW, *PPERUSERSECTIONW; DECL_WINELIB_TYPE_AW(PERUSERSECTION) DECL_WINELIB_TYPE_AW(PPERUSERSECTION) typedef struct _StrEntryA { LPSTR pszName; LPSTR pszValue; } STRENTRYA, *LPSTRENTRYA; typedef struct _StrEntryW { LPWSTR pszName; LPWSTR pszValue; } STRENTRYW, *LPSTRENTRYW; DECL_WINELIB_TYPE_AW(STRENTRY) DECL_WINELIB_TYPE_AW(LPSTRENTRY) typedef struct _StrTableA { DWORD cEntries; STRENTRYA* pse; } STRTABLEA, *LPSTRTABLEA; typedef const STRTABLEA CSTRTABLEA, *LPCSTRTABLEA; typedef struct _StrTableW { DWORD cEntries; STRENTRYW* pse; } STRTABLEW, *LPSTRTABLEW; typedef const STRTABLEW CSTRTABLEW, *LPCSTRTABLEW; DECL_WINELIB_TYPE_AW(STRTABLE) DECL_WINELIB_TYPE_AW(CSTRTABLE) DECL_WINELIB_TYPE_AW(LPSTRTABLE) DECL_WINELIB_TYPE_AW(LPCSTRTABLE) /* Flags for AddDelBackupEntry */ #define AADBE_ADD_ENTRY 0x01 #define AADBE_DEL_ENTRY 0x02 /* Flags for AdvInstallFile */ #define AIF_WARNIFSKIP 0x00000001 #define AIF_NOSKIP 0x00000002 #define AIF_NOVERSIONCHECK 0x00000004 #define AIF_FORCE_FILE_IN_USE 0x00000008 #define AIF_NOOVERWRITE 0x00000010 #define AIF_NO_VERSION_DIALOG 0x00000020 #define AIF_REPLACEONLY 0x00000400 #define AIF_NOLANGUAGECHECK 0x10000000 #define AIF_QUIET 0x20000000 /* Flags for RunSetupCommand */ #define RSC_FLAG_INF 0x00000001 #define RSC_FLAG_SKIPDISKSPACECHECK 0x00000002 #define RSC_FLAG_QUIET 0x00000004 #define RSC_FLAG_NGCONV 0x00000008 #define RSC_FLAG_UPDHLPDLLS 0x00000010 #define RSC_FLAG_DELAYREGISTEROCX 0x00000200 #define RSC_FLAG_SETUPAPI 0x00000400 /* Flags for LaunchINFSection */ #define LIS_QUIET 0x00000001 #define LIS_NOGRPCONV 0x00000002 /* Flags for DelNode */ #define ADN_DEL_IF_EMPTY 0x00000001 #define ADN_DONT_DEL_SUBDIRS 0x00000002 #define ADN_DONT_DEL_DIR 0x00000004 #define ADN_DEL_UNC_PATHS 0x00000008 /* Flags for RegRestoreAll, RegSaveRestore, RegSaveRestoreOnINF */ #define IE4_RESTORE 0x00000001 #define IE4_BACKNEW 0x00000002 #define IE4_NODELETENEW 0x00000004 #define IE4_NOMESSAGES 0x00000008 #define IE4_NOPROGRESS 0x00000010 #define IE4_NOENUMKEY 0x00000020 #define IE4_NO_CRC_MAPPING 0x00000040 #define IE4_REGSECTION 0x00000080 #define IE4_FRDOALL 0x00000100 #define IE4_UPDREFCNT 0x00000200 #define IE4_USEREFCNT 0x00000400 #define IE4_EXTRAINCREFCNT 0x00000800 /* Flags for file save and restore functions */ #define AFSR_RESTORE IE4_RESTORE #define AFSR_BACKNEW IE4_BACKNEW #define AFSR_NODELETENEW IE4_NODELETENEW #define AFSR_NOMESSAGES IE4_NOMESSAGES #define AFSR_NOPROGRESS IE4_NOPROGRESS #define AFSR_UPDREFCNT IE4_UPDREFCNT #define AFSR_USEREFCNT IE4_USEREFCNT #define AFSR_EXTRAINCREFCNT IE4_EXTRAINCREFCNT HRESULT WINAPI AddDelBackupEntryA(LPCSTR lpcszFileList, LPCSTR lpcszBackupDir, LPCSTR lpcszBaseName, DWORD dwFlags); HRESULT WINAPI AddDelBackupEntryW(LPCWSTR lpcszFileList, LPCWSTR lpcszBackupDir, LPCWSTR lpcszBaseName, DWORD dwFlags); #define AddDelBackupEntry WINELIB_NAME_AW(AddDelBackupEntry) HRESULT WINAPI AdvInstallFileA(HWND hwnd, LPCSTR lpszSourceDir, LPCSTR lpszSourceFile, LPCSTR lpszDestDir, LPCSTR lpszDestFile, DWORD dwFlags, DWORD dwReserved); HRESULT WINAPI AdvInstallFileW(HWND hwnd, LPCWSTR lpszSourceDir, LPCWSTR lpszSourceFile, LPCWSTR lpszDestDir, LPCWSTR lpszDestFile, DWORD dwFlags, DWORD dwReserved); #define AdvInstallFile WINELIB_NAME_AW(AdvInstallFile) HRESULT WINAPI CloseINFEngine(HINF hInf); HRESULT WINAPI DelNodeA(LPCSTR pszFileOrDirName, DWORD dwFlags); HRESULT WINAPI DelNodeW(LPCWSTR pszFileOrDirName, DWORD dwFlags); #define DelNode WINELIB_NAME_AW(DelNode) HRESULT WINAPI DelNodeRunDLL32A(HWND,HINSTANCE,LPSTR,INT); HRESULT WINAPI DelNodeRunDLL32W(HWND,HINSTANCE,LPWSTR,INT); #define DelNodeRunDLL32 WINELIB_NAME_AW(DelNodeRunDLL32) HRESULT WINAPI ExecuteCabA( HWND hwnd, CABINFOA* pCab, LPVOID pReserved ); HRESULT WINAPI ExecuteCabW( HWND hwnd, CABINFOW* pCab, LPVOID pReserved ); #define ExecuteCab WINELIB_NAME_AW(ExecuteCab) HRESULT WINAPI ExtractFilesA(LPCSTR,LPCSTR,DWORD,LPCSTR,LPVOID,DWORD); HRESULT WINAPI ExtractFilesW(LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPVOID,DWORD); #define ExtractFiles WINELIB_NAME_AW(ExtractFiles) HRESULT WINAPI FileSaveMarkNotExistA(LPSTR pszFileList, LPSTR pszDir, LPSTR pszBaseName); HRESULT WINAPI FileSaveMarkNotExistW(LPWSTR pszFileList, LPWSTR pszDir, LPWSTR pszBaseName); #define FileSaveMarkNotExist WINELIB_NAME_AW(FileSaveMarkNotExist) HRESULT WINAPI FileSaveRestoreA(HWND hDlg, LPSTR pszFileList, LPSTR pszDir, LPSTR pszBaseName, DWORD dwFlags); HRESULT WINAPI FileSaveRestoreW(HWND hDlg, LPWSTR pszFileList, LPWSTR pszDir, LPWSTR pszBaseName, DWORD dwFlags); #define FileSaveRestore WINELIB_NAME_AW(FileSaveRestore) HRESULT WINAPI FileSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF, LPCSTR pszSection, LPCSTR pszBackupDir, LPCSTR pszBaseBackupFile, DWORD dwFlags); HRESULT WINAPI FileSaveRestoreOnINFW(HWND hWnd, LPCWSTR pszTitle, LPCWSTR pszINF, LPCWSTR pszSection, LPCWSTR pszBackupDir, LPCWSTR pszBaseBackupFile, DWORD dwFlags); #define FileSaveRestoreOnINF WINELIB_NAME_AW(FileSaveRestoreOnINF) HRESULT WINAPI GetVersionFromFileA(LPCSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion); HRESULT WINAPI GetVersionFromFileW(LPCWSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion); #define GetVersionFromFile WINELIB_NAME_AW(GetVersionFromFile) HRESULT WINAPI GetVersionFromFileExA(LPCSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion); HRESULT WINAPI GetVersionFromFileExW(LPCWSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion); #define GetVersionFromFileEx WINELIB_NAME_AW(GetVersionFromFileEx) BOOL WINAPI IsNTAdmin(DWORD,LPDWORD); INT WINAPI LaunchINFSectionA(HWND,HINSTANCE,LPSTR,INT); INT WINAPI LaunchINFSectionW(HWND,HINSTANCE,LPWSTR,INT); #define LaunchINFSection WINELIB_NAME_AW(LaunchINFSection) HRESULT WINAPI LaunchINFSectionExA(HWND,HINSTANCE,LPSTR,INT); HRESULT WINAPI LaunchINFSectionExW(HWND,HINSTANCE,LPWSTR,INT); #define LaunchINFSectionEx WINELIB_NAME_AW(LaunchINFSectionEx) DWORD WINAPI NeedRebootInit(VOID); BOOL WINAPI NeedReboot(DWORD dwRebootCheck); HRESULT WINAPI OpenINFEngineA(LPCSTR pszInfFilename, LPCSTR pszInstallSection, DWORD dwFlags, HINF *phInf, PVOID pvReserved); HRESULT WINAPI OpenINFEngineW(LPCWSTR pszInfFilename, LPCWSTR pszInstallSection, DWORD dwFlags, HINF *phInf, PVOID pvReserved); #define OpenINFEngine WINELIB_NAME_AW(OpenINFEngine) HRESULT WINAPI RebootCheckOnInstallA(HWND hWnd, LPCSTR pszINF, LPCSTR pszSec, DWORD dwReserved); HRESULT WINAPI RebootCheckOnInstallW(HWND hWnd, LPCWSTR pszINF, LPCWSTR pszSec, DWORD dwReserved); #define RebootCheckOnInstall WINELIB_NAME_AW(RebootCheckOnInstall) HRESULT WINAPI RegInstallA(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable); HRESULT WINAPI RegInstallW(HMODULE hm, LPCWSTR pszSection, const STRTABLEW* pstTable); #define RegInstall WINELIB_NAME_AW(RegInstall) HRESULT WINAPI RegRestoreAllA(HWND hWnd, LPSTR pszTitleString, HKEY hkBackupKey); HRESULT WINAPI RegRestoreAllW(HWND hWnd, LPWSTR pszTitleString, HKEY hkBackupKey); #define RegRestoreAll WINELIB_NAME_AW(RegRestoreAll) HRESULT WINAPI RegSaveRestoreA(HWND hWnd, LPCSTR pszTitleString, HKEY hkBackupKey, LPCSTR pcszRootKey, LPCSTR pcszSubKey, LPCSTR pcszValueName, DWORD dwFlags); HRESULT WINAPI RegSaveRestoreW(HWND hWnd, LPCWSTR pszTitleString, HKEY hkBackupKey, LPCWSTR pcszRootKey, LPCWSTR pcszSubKey, LPCWSTR pcszValueName, DWORD dwFlags); #define RegSaveRestore WINELIB_NAME_AW(RegSaveRestore) HRESULT WINAPI RegSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF, LPCSTR pszSection, HKEY hHKLMBackKey, HKEY hHKCUBackKey, DWORD dwFlags); HRESULT WINAPI RegSaveRestoreOnINFW(HWND hWnd, LPCWSTR pszTitle, LPCWSTR pszINF, LPCWSTR pszSection, HKEY hHKLMBackKey, HKEY hHKCUBackKey, DWORD dwFlags); #define RegSaveRestoreOnINF WINELIB_NAME_AW(RegSaveRestoreOnINF) HRESULT WINAPI RunSetupCommandA(HWND hWnd, LPCSTR szCmdName, LPCSTR szInfSection, LPCSTR szDir, LPCSTR lpszTitle, HANDLE *phEXE, DWORD dwFlags, LPVOID pvReserved); HRESULT WINAPI RunSetupCommandW(HWND hWnd, LPCWSTR szCmdName, LPCWSTR szInfSection, LPCWSTR szDir, LPCWSTR lpszTitle, HANDLE *phEXE, DWORD dwFlags, LPVOID pvReserved); #define RunSetupCommand WINELIB_NAME_AW(RunSetupCommand) HRESULT WINAPI SetPerUserSecValuesA(PERUSERSECTIONA* pPerUser); HRESULT WINAPI SetPerUserSecValuesW(PERUSERSECTIONW* pPerUser); #define SetPerUserSecValues WINELIB_NAME_AW(SetPerUserSecValues) HRESULT WINAPI TranslateInfStringA(LPCSTR pszInfFilename, LPCSTR pszInstallSection, LPCSTR pszTranslateSection, LPCSTR pszTranslateKey, LPSTR pszBuffer, DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved); HRESULT WINAPI TranslateInfStringW(LPCWSTR pszInfFilename, LPCWSTR pszInstallSection, LPCWSTR pszTranslateSection, LPCWSTR pszTranslateKey, LPWSTR pszBuffer, DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved); #define TranslateInfString WINELIB_NAME_AW(TranslateInfString) HRESULT WINAPI TranslateInfStringExA(HINF hInf, LPCSTR pszInfFilename, LPCSTR pszTranslateSection, LPCSTR pszTranslateKey, LPSTR pszBuffer, DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved); HRESULT WINAPI TranslateInfStringExW(HINF hInf, LPCWSTR pszInfFilename, LPCWSTR pszTranslateSection, LPCWSTR pszTranslateKey, LPWSTR pszBuffer, DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved); #define TranslateInfStringEx WINELIB_NAME_AW(TranslateInfStringEx) HRESULT WINAPI UserInstStubWrapperA(HWND hWnd, HINSTANCE hInstance, LPSTR pszParms, INT nShow); HRESULT WINAPI UserInstStubWrapperW(HWND hWnd, HINSTANCE hInstance, LPWSTR pszParms, INT nShow); #define UserInstStubWrapper WINELIB_NAME_AW(UserInstStubWrapper) HRESULT WINAPI UserUnInstStubWrapperA(HWND hWnd, HINSTANCE hInstance, LPSTR pszParms, INT nShow); HRESULT WINAPI UserUnInstStubWrapperW(HWND hWnd, HINSTANCE hInstance, LPWSTR pszParms, INT nShow); #define UserUnInstStubWrapper WINELIB_NAME_AW(UserUnInstStubWrapper) #ifdef __cplusplus } #endif #endif /* __WINE_ADVPUB_H */ ================================================ FILE: wine/windows/af_irda.h ================================================ /* * Copyright 2009 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef AF_IRDA_H #define AF_IRDA_H typedef struct _IRDA_DEVICE_INFO { UCHAR irdaDeviceID[4]; char irdaDeviceName[22]; UCHAR irdaDeviceHints1; UCHAR irdaDeviceHints2; UCHAR irdaCharSet; } IRDA_DEVICE_INFO, *PIRDA_DEVICE_INFO; typedef struct _DEVICELIST { ULONG numDevice; IRDA_DEVICE_INFO Device[1]; } DEVICELIST, *PDEVICELIST; typedef struct _SOCKADDR_IRDA { USHORT irdaAddressFamily; UCHAR irdaDeviceID[4]; char irdaServiceName[25]; } SOCKADDR_IRDA, *PSOCKADDR_IRDA, *LPSOCKADDR_IRDA; #ifdef USE_WS_PREFIX /* Socket levels and options */ #define WS_SOL_IRLMP 0xff #define WS_IRLMP_ENUMDEVICES ((ULONG)0x10) #define WS_IRLMP_IAS_SET ((ULONG)0x11) #define WS_IRLMP_IAS_QUERY ((ULONG)0x12) #define WS_IRLMP_SEND_PDU_LEN ((ULONG)0x13) #define WS_IRLMP_EXCLUSIVE_MODE ((ULONG)0x14) #define WS_IRLMP_IRLPT_MODE ((ULONG)0x15) #define WS_IRLMP_9WIRE_MODE ((ULONG)0x16) #define WS_IRLMP_TINYTP_MODE ((ULONG)0x17) #define WS_IRLMP_PARAMETERS ((ULONG)0x18) #define WS_IRLMP_DISCOVER_MODE ((ULONG)0x19) #define WS_IRLMP_SHARP_MODE ((ULONG)0x20) #define WS_IAS_MAX_CLASSNAME 64 #define WS_IAS_MAX_ATTRIBNAME 256 #else /* Socket levels and options */ #define SOL_IRLMP 0xff #define IRLMP_ENUMDEVICES ((ULONG)0x10) #define IRLMP_IAS_SET ((ULONG)0x11) #define IRLMP_IAS_QUERY ((ULONG)0x12) #define IRLMP_SEND_PDU_LEN ((ULONG)0x13) #define IRLMP_EXCLUSIVE_MODE ((ULONG)0x14) #define IRLMP_IRLPT_MODE ((ULONG)0x15) #define IRLMP_9WIRE_MODE ((ULONG)0x16) #define IRLMP_TINYTP_MODE ((ULONG)0x17) #define IRLMP_PARAMETERS ((ULONG)0x18) #define IRLMP_DISCOVER_MODE ((ULONG)0x19) #define IRLMP_SHARP_MODE ((ULONG)0x20) #define IAS_MAX_CLASSNAME 64 #define IAS_MAX_ATTRIBNAME 256 #endif #define IAS_MAX_OCTET_STRING 1024 #define IAS_MAX_USER_STRING 256 #define LmCharSetASCII 0x00 #define LmCharSetISO_8859_1 0x01 #define LmCharSetISO_8859_2 0x02 #define LmCharSetISO_8859_3 0x03 #define LmCharSetISO_8859_4 0x04 #define LmCharSetISO_8859_5 0x05 #define LmCharSetISO_8859_6 0x06 #define LmCharSetISO_8859_7 0x07 #define LmCharSetISO_8859_8 0x08 #define LmCharSetISO_8859_9 0x09 #define LmCharSetUNICODE 0xff #endif /* AF_IRDA_H */ ================================================ FILE: wine/windows/amaudio.h ================================================ /* * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __AMAUDIO__ #define __AMAUDIO__ #include #include #undef INTERFACE #define INTERFACE IAMDirectSound DECLARE_INTERFACE_(IAMDirectSound,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAMDirectSound methods ***/ STDMETHOD(GetDirectSoundInterface)(THIS_ IDirectSound **ds) PURE; STDMETHOD(GetPrimaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE; STDMETHOD(GetSecondaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE; STDMETHOD(ReleaseDirectSoundInterface)(THIS_ IDirectSound *ds) PURE; STDMETHOD(ReleasePrimaryBufferInterface)(THIS_ IDirectSoundBuffer *buf) PURE; STDMETHOD(ReleaseSecondaryBufferInterface)(THIS_ IDirectSoundBuffer *buf) PURE; STDMETHOD(SetFocusWindow)(THIS_ HWND hwnd, BOOL bgaudible) PURE; STDMETHOD(GetFocusWindow)(THIS_ HWND *hwnd, BOOL *bgaudible) PURE; }; #undef INTERFACE #endif ================================================ FILE: wine/windows/amstream.idl ================================================ /* * Copyright 2004 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "mmstream.idl"; import "strmif.idl"; cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#if 0") interface IDirectDraw; interface IDirectDrawSurface; cpp_quote("#endif") interface IAMMultiMediaStream; interface IAMMediaStream; interface IMediaStreamFilter; interface IAMMediaTypeStream; interface IAMMediaTypeSample; enum { AMMSF_NOGRAPHTHREAD = 0x00000001 }; enum { AMMSF_ADDDEFAULTRENDERER = 0x00000001, AMMSF_CREATEPEER = 0x00000002, AMMSF_STOPIFNOSAMPLES = 0x00000004, AMMSF_NOSTALL = 0x00000008 }; enum { AMMSF_RENDERTYPEMASK = 0x00000003, AMMSF_RENDERTOEXISTING = 0x00000000, AMMSF_RENDERALLSTREAMS = 0x00000001, AMMSF_NORENDER = 0x00000002, AMMSF_NOCLOCK = 0x00000004, AMMSF_RUN = 0x00000008 }; typedef [v1_enum] enum { Disabled = 0, ReadData = 1, RenderData = 2 } OUTPUT_STATE; [ object, uuid(7DB01C96-C0C3-11d0-8FF1-00C04FD9189D), dual, helpstring("IDirectShowStream Interface"), pointer_default(unique) ] interface IDirectShowStream : IDispatch { [propget, id(1), helpstring("property FileName")] HRESULT FileName([out, retval] BSTR *pVal); [propput, id(1), helpstring("property FileName")] HRESULT FileName([in] BSTR newVal); [propget, id(2), helpstring("property Video")] HRESULT Video([out, retval] OUTPUT_STATE *pVal); [propput, id(2), helpstring("property Video")] HRESULT Video([in] OUTPUT_STATE newVal); [propget, id(3), helpstring("property Audio")] HRESULT Audio([out, retval] OUTPUT_STATE *pVal); [propput, id(3), helpstring("property Audio")] HRESULT Audio([in] OUTPUT_STATE newVal); } [ object, uuid(BEBE595C-9A6F-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IAMMultiMediaStream : IMultiMediaStream { HRESULT Initialize( [in] STREAM_TYPE StreamType, [in] DWORD dwFlags, [in] IGraphBuilder *pFilterGraph); HRESULT GetFilterGraph( [out] IGraphBuilder **ppGraphBuilder); HRESULT GetFilter( [out] IMediaStreamFilter **ppFilter); HRESULT AddMediaStream( [in] IUnknown *pStreamObject, [in] const MSPID *PurposeId, [in] DWORD dwFlags, [out] IMediaStream **ppNewStream); HRESULT OpenFile( [in] LPCWSTR pszFileName, [in] DWORD dwFlags); HRESULT OpenMoniker( [in] IBindCtx *pCtx, [in] IMoniker *pMoniker, [in] DWORD dwFlags); HRESULT Render( [in] DWORD dwFlags); } [ object, uuid(BEBE595D-9A6F-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IAMMediaStream : IMediaStream { HRESULT Initialize( [in] IUnknown *pSourceObject, [in] DWORD dwFlags, [in] REFMSPID PurposeId, [in] const STREAM_TYPE StreamType); HRESULT SetState( [in] FILTER_STATE State); HRESULT JoinAMMultiMediaStream( [in] IAMMultiMediaStream *pAMMultiMediaStream); HRESULT JoinFilter( [in] IMediaStreamFilter *pMediaStreamFilter); HRESULT JoinFilterGraph( [in] IFilterGraph *pFilterGraph); } [ object, local, uuid(BEBE595E-9A6F-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IMediaStreamFilter : IBaseFilter { HRESULT AddMediaStream( [in] IAMMediaStream *pAMMediaStream); HRESULT GetMediaStream( [in] REFMSPID idPurpose, [out] IMediaStream **ppMediaStream); HRESULT EnumMediaStreams( [in] long Index, [out] IMediaStream **ppMediaStream); HRESULT SupportSeeking( [in] BOOL bRenderer); HRESULT ReferenceTimeToStreamTime( [in] [out] REFERENCE_TIME *pTime); HRESULT GetCurrentStreamTime( [out] REFERENCE_TIME *pCurrentStreamTime); HRESULT WaitUntil( [in] REFERENCE_TIME WaitStreamTime); HRESULT Flush( [in] BOOL bCancelEOS); HRESULT EndOfStream(); } [ object, local, uuid(AB6B4AFC-F6E4-11d0-900D-00C04FD9189D), pointer_default(unique) ] interface IDirectDrawMediaSampleAllocator : IUnknown { HRESULT GetDirectDraw(IDirectDraw **ppDirectDraw); } [ object, local, uuid(AB6B4AFE-F6E4-11d0-900D-00C04FD9189D), pointer_default(unique) ] interface IDirectDrawMediaSample : IUnknown { HRESULT GetSurfaceAndReleaseLock( [out] IDirectDrawSurface **ppDirectDrawSurface, [out] RECT * pRect); HRESULT LockMediaSamplePointer(void); } [ object, local, uuid(AB6B4AFA-F6E4-11d0-900D-00C04FD9189D), pointer_default(unique) ] interface IAMMediaTypeStream : IMediaStream { HRESULT GetFormat( [out] AM_MEDIA_TYPE * pMediaType, [in] DWORD dwFlags); HRESULT SetFormat( [in] AM_MEDIA_TYPE * pMediaType, [in] DWORD dwFlags); HRESULT CreateSample( [in] long lSampleSize, [in] BYTE * pbBuffer, [in] DWORD dwFlags, [in] IUnknown *pUnkOuter, [out] IAMMediaTypeSample ** ppAMMediaTypeSample); HRESULT GetStreamAllocatorRequirements( [out] ALLOCATOR_PROPERTIES *pProps); HRESULT SetStreamAllocatorRequirements( [in] ALLOCATOR_PROPERTIES *pProps); } [ object, local, uuid(AB6B4AFB-F6E4-11d0-900D-00C04FD9189D), pointer_default(unique) ] interface IAMMediaTypeSample : IStreamSample { HRESULT SetPointer( [in] BYTE *pBuffer, [in] long lSize); HRESULT GetPointer( [out] BYTE ** ppBuffer); long GetSize(void); HRESULT GetTime( [out] REFERENCE_TIME * pTimeStart, [out] REFERENCE_TIME * pTimeEnd); HRESULT SetTime( [in] REFERENCE_TIME * pTimeStart, [in] REFERENCE_TIME * pTimeEnd); HRESULT IsSyncPoint(void); HRESULT SetSyncPoint( BOOL bIsSyncPoint); HRESULT IsPreroll(void); HRESULT SetPreroll( BOOL bIsPreroll); long GetActualDataLength(void); HRESULT SetActualDataLength(long Len); HRESULT GetMediaType( AM_MEDIA_TYPE **ppMediaType); HRESULT SetMediaType( AM_MEDIA_TYPE *pMediaType); HRESULT IsDiscontinuity(void); HRESULT SetDiscontinuity( BOOL bDiscontinuity); HRESULT GetMediaTime( [out] LONGLONG * pTimeStart, [out] LONGLONG * pTimeEnd); HRESULT SetMediaTime( [in] LONGLONG * pTimeStart, [in] LONGLONG * pTimeEnd); } [ uuid(49C47CE5-9BA4-11d0-8212-00C04FC32C45) ] coclass AMMultiMediaStream { [default] dispinterface IDirectShowStream; } cpp_quote("DEFINE_GUID(CLSID_AMDirectDrawStream, 0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);") cpp_quote("DEFINE_GUID(CLSID_AMAudioStream, 0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);") cpp_quote("DEFINE_GUID(CLSID_AMAudioData, 0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);") cpp_quote("DEFINE_GUID(CLSID_AMMediaTypeStream, 0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0x0d, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);") cpp_quote("DEFINE_GUID(CLSID_MediaStreamFilter, 0x49c47ce0, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);") ================================================ FILE: wine/windows/amvideo.idl ================================================ /* * Copyright (C) 2003 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; /* trick widl into thinking that it knows the DirectDraw types * as there is no IDL file for them (yet) */ cpp_quote("#if 0") interface IDirectDraw; typedef void DDSURFACEDESC,DDCAPS; typedef DWORD RGBQUAD; typedef LONGLONG REFERENCE_TIME; typedef struct { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER; cpp_quote("#endif") cpp_quote("#include ") cpp_quote("#define AMDDS_NONE 0x00") cpp_quote("#define AMDDS_DCIPS 0x01") cpp_quote("#define AMDDS_PS 0x02") cpp_quote("#define AMDDS_RGBOVR 0x04") cpp_quote("#define AMDDS_YUVOVR 0x08") cpp_quote("#define AMDDS_RGBOFF 0x10") cpp_quote("#define AMDDS_YUVOFF 0x20") cpp_quote("#define AMDDS_RGBFLP 0x40") cpp_quote("#define AMDDS_YUVFLP 0x80") cpp_quote("#define AMDDS_ALL 0xFF") cpp_quote("#define AMDDS_DEFAULT AMDDS_ALL") cpp_quote("#define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)") cpp_quote("#define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)") cpp_quote("#define AMDSS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)") [ object, /* uuid(36d39eb0-dd75-11ce-bf0e-00aa0055595a) conflicts with uuids.h */ pointer_default(unique), local ] interface IDirectDrawVideo : IUnknown { HRESULT GetSwitches([out] DWORD * pSwitches); HRESULT SetSwitches([in] DWORD Switches); HRESULT GetCaps([out] DDCAPS * pCaps); HRESULT GetEmulatedCaps([out] DDCAPS *pCaps); HRESULT GetSurfaceDesc([out] DDSURFACEDESC * pSurfaceDesc); HRESULT GetFourCCCodes([out] DWORD * pCount, [out] DWORD * pCodes); HRESULT SetDirectDraw([in] IDirectDraw *ddraw); HRESULT GetDirectDraw([out] IDirectDraw **ddraw); HRESULT GetSurfaceType([out] DWORD * pSurfaceType); HRESULT SetDefault(); HRESULT UseScanLine([in] long UseScanLine); HRESULT CanUseScanLine([out] long * UseScanLine); HRESULT UseOverlayStretch([in] long UseOverlayStretch); HRESULT CanUseOverlayStretch([out] long * UseOverlayStretch); HRESULT UseWhenFullScreen([in] long UseWhenFullScreen); HRESULT WillUseFullScreen([out] long * UseWhenFullScreen); } [ object, /* uuid(1bd0ecb0-f8e2-11ce-aac6-0020af0b99a3) conflicts with uuids.h */ pointer_default(unique), local ] interface IQualProp : IUnknown { [propget] HRESULT FramesDroppedInRenderer([out] int * pcFrames); [propget] HRESULT FramesDrawn([out] int * pcFramesDrawn); [propget] HRESULT AvgFrameRate([out] int * piAvgFrameRate); [propget] HRESULT Jitter([out] int * iJitter); [propget] HRESULT AvgSyncOffset([out] int * piAvg); [propget] HRESULT DevSyncOffset([out] int * piDev); } [ object, /* uuid(dd1d7110-7836-11cf-bf47-00aa0055595a) conflicts with uuids.h */ pointer_default(unique) ] interface IFullScreenVideo : IUnknown { HRESULT CountModes([out] long * pModes); HRESULT GetModeInfo([in] long Mode, [out] long * pWidth, [out] long * pHeight, [out] long * pDepth); HRESULT GetCurrentMode([out] long * pMode); HRESULT IsModeAvailable([in] long Mode); HRESULT IsModeEnabled([in] long Mode); HRESULT SetEnabled([in] long Mode, [in] long bEnabled); HRESULT GetClipFactor([out] long * pClipFactor); HRESULT SetClipFactor([in] long ClipFactor); HRESULT SetMessageDrain([in] HWND hwnd); HRESULT GetMessageDrain([out] HWND * hwnd); HRESULT SetMonitor([in] long Monitor); HRESULT GetMonitor([out] long * Monitor); HRESULT HideOnDeactivate([in] long Hide); HRESULT IsHideOnDeactivate(); HRESULT SetCaption([in] BSTR strCaption); HRESULT GetCaption([out] BSTR * pstrCaption); HRESULT SetDefault(); } [ object, /* uuid(53479470-f1dd-11cf-bc42-00aa00ac74f6) conflicts with uuids.h */ pointer_default(unique), local ] interface IFullScreenVideoEx : IFullScreenVideo { HRESULT SetAcceleratorTable([in] HWND hwnd, [in] HACCEL hAccel); HRESULT GetAcceleratorTable([out] HWND * phwnd, [out] HACCEL * phAccel); HRESULT KeepPixelAspectRatio([in] long KeepAspect); /* FIXME: not sure is this next method is an [out] */ HRESULT IsKeepPixelAspectRatio([out] long * pKeepAspect); } [ object, /* uuid(61ded640-e912-11ce-a099-00aa00479a58) conflicts with uuids.h */ pointer_default(unique), local ] interface IBaseVideoMixer : IUnknown { HRESULT SetLeadPin([in] int iPin); HRESULT GetLeadPin([out] int * piPin); HRESULT GetInputPinCount([out] int * piPinCount); HRESULT IsUsingClock([out] int * pbValue); HRESULT SetUsingClock([in] int bValue); HRESULT GetClockPeriod([out] int * pbValue); HRESULT SetClockPeriod([in] int bValue); } #define iPALETTE_COLORS 256 #define iMASK_COLORS 3 cpp_quote("#define iPALETTE_COLORS 256") cpp_quote("#define iEGA_COLORS 16") cpp_quote("#define iMASK_COLORS 3") cpp_quote("#define iTRUECOLOR 16") cpp_quote("#define iRED 0") cpp_quote("#define iGREEN 1") cpp_quote("#define iBLUE 2") cpp_quote("#define iPALETTE 8") cpp_quote("#define iMAXBITS 8") typedef struct tag_TRUECOLORINFO { DWORD dwBitMasks[iMASK_COLORS]; RGBQUAD bmiColors[iPALETTE_COLORS]; } TRUECOLORINFO; typedef struct tagVIDEOINFOHEADER { RECT rcSource; RECT rcTarget; DWORD dwBitRate; DWORD dwBitErrorRate; REFERENCE_TIME AvgTimePerFrame; BITMAPINFOHEADER bmiHeader; } VIDEOINFOHEADER; typedef struct tagVIDEOINFO { RECT rcSource; RECT rcTarget; DWORD dwBitRate; DWORD dwBitErrorRate; REFERENCE_TIME AvgTimePerFrame; BITMAPINFOHEADER bmiHeader; union { RGBQUAD bmiColors[iPALETTE_COLORS]; DWORD dwBitMasks[iMASK_COLORS]; TRUECOLORINFO TrueColorInfo; }; } VIDEOINFO; typedef struct tagMPEG1VIDEOINFO { VIDEOINFOHEADER hdr; DWORD dwStartTimeCode; DWORD cbSequenceHeader; BYTE bSequenceHeader[1]; } MPEG1VIDEOINFO; cpp_quote("#define MAX_SIZE_MPEG1_SEQUENCE_INFO 140") cpp_quote("#define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)") typedef struct tagAnalogVideoInfo { RECT rcSource; RECT rcTarget; DWORD dwActiveWidth; DWORD dwActiveHeight; REFERENCE_TIME AvgTimePerFrame; } ANALOGVIDEOINFO; typedef enum { AM_PROPERTY_FRAMESTEP_STEP = 0x01, AM_PROPERTY_FRAMESTEP_CANCEL = 0x02, AM_PROPERTY_FRAMESTEP_CANSTEP = 0x03, AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 0x04 } AM_PROPERTY_FRAMESTEP; typedef struct _AM_FRAMESTEP_STEP { DWORD dwFramesToStep; } AM_FRAMESTEP_STEP; ================================================ FILE: wine/windows/appcompatapi.h ================================================ /* * Copyright 2012 Detlef Riekenberg * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __APPCOMPAT_H #define __APPCOMPAT_H #ifdef __cplusplus extern "C" { #endif BOOL WINAPI ApphelpCheckShellObject(REFCLSID, BOOL, ULONGLONG *); #ifdef __cplusplus } #endif #endif /* __APPCOMPAT_H */ ================================================ FILE: wine/windows/appmgmt.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _APPMGMT_H #define _APPMGMT_H typedef struct _MANAGEDAPPLICATION { LPWSTR pszPackageName; LPWSTR pszPublisher; DWORD dwVersionHi; DWORD dwVersionLo; DWORD dwRevision; GUID GpoId; LPWSTR pszPolicyName; GUID ProductId; LANGID Language; LPWSTR pszOwner; LPWSTR pszCompany; LPWSTR pszComments; LPWSTR pszContact; LPWSTR pszSupportUrl; DWORD dwPathType; BOOL bInstalled; } MANAGEDAPPLICATION, *PMANAGEDAPPLICATION; #ifdef __cplusplus extern "C" { #endif DWORD WINAPI CommandLineFromMsiDescriptor(WCHAR*,WCHAR*,DWORD*); DWORD WINAPI GetManagedApplications(GUID*,DWORD,DWORD,LPDWORD,PMANAGEDAPPLICATION*); #ifdef __cplusplus } #endif #endif /* _APPMGMT_H */ ================================================ FILE: wine/windows/appmodel.h ================================================ /* * Copyright (C) 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _APPMODEL_H_ #define _APPMODEL_H_ #if defined(__cplusplus) extern "C" { #endif typedef enum AppPolicyProcessTerminationMethod { AppPolicyProcessTerminationMethod_ExitProcess = 0, AppPolicyProcessTerminationMethod_TerminateProcess = 1, } AppPolicyProcessTerminationMethod; typedef enum AppPolicyThreadInitializationType { AppPolicyThreadInitializationType_None = 0, AppPolicyThreadInitializationType_InitializeWinRT = 1, } AppPolicyThreadInitializationType; typedef enum AppPolicyShowDeveloperDiagnostic { AppPolicyShowDeveloperDiagnostic_None = 0, AppPolicyShowDeveloperDiagnostic_ShowUI = 1, } AppPolicyShowDeveloperDiagnostic; typedef enum AppPolicyWindowingModel { AppPolicyWindowingModel_None = 0, AppPolicyWindowingModel_Universal = 1, AppPolicyWindowingModel_ClassicDesktop = 2, AppPolicyWindowingModel_ClassicPhone = 3 } AppPolicyWindowingModel; LONG WINAPI AppPolicyGetProcessTerminationMethod(HANDLE token, AppPolicyProcessTerminationMethod *policy); LONG WINAPI AppPolicyGetShowDeveloperDiagnostic(HANDLE token, AppPolicyShowDeveloperDiagnostic *policy); LONG WINAPI AppPolicyGetThreadInitializationType(HANDLE token, AppPolicyThreadInitializationType *policy); LONG WINAPI AppPolicyGetWindowingModel(HANDLE processToken, AppPolicyWindowingModel *policy); #if defined(__cplusplus) } #endif #endif /* _APPMODEL_H_ */ ================================================ FILE: wine/windows/asptlb.idl ================================================ /* * Copyright (C) 2010 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "objidl.idl"; import "oaidl.idl"; [ object, dual, uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8) ] interface IRequestDictionary : IDispatch { [propget] HRESULT Item([in, optional] VARIANT Var, [retval, out] VARIANT *pVariantReturn); [restricted, propget] HRESULT _NewEnum([retval, out] IUnknown **ppEnumReturn); [propget] HRESULT Count([retval, out] int *count); [propget] HRESULT Key([in] VARIANT key, [retval, out] VARIANT *value); } [ object, dual, uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8) ] interface IResponse : IDispatch { [propget] HRESULT Buffer([retval, out] VARIANT_BOOL *is_buffering); [propput] HRESULT Buffer([in] VARIANT_BOOL is_buffering); [propget] HRESULT ContentType([retval, out] BSTR *content_type); [propput] HRESULT ContentType([in] BSTR content_type); [propget] HRESULT Expires([retval, out] VARIANT *minutes); [propput] HRESULT Expires([in] LONG minutes); [propget] HRESULT ExpiresAbsolute([retval, out] VARIANT *expires); [propput] HRESULT ExpiresAbsolute([in] DATE expires); [propget] HRESULT Cookies([retval, out] IRequestDictionary **cookies); [propget] HRESULT Status([retval, out] BSTR *status); [propput] HRESULT Status([in] BSTR status); [hidden] HRESULT Add([in] BSTR value, [in] BSTR name); HRESULT AddHeader([in] BSTR name, [in] BSTR value); HRESULT AppendToLog([in] BSTR log_entry); HRESULT BinaryWrite([in] VARIANT input); HRESULT Clear(); HRESULT End(); HRESULT Flush(); HRESULT Redirect(BSTR url); HRESULT Write([in] VARIANT text); [hidden] HRESULT WriteBlock([in] short block_number); HRESULT IsClientConnected([retval, out] VARIANT_BOOL *is_connected); [propget] HRESULT CharSet([retval, out] BSTR *charset); [propput] HRESULT CharSet([in] BSTR charset); HRESULT Pics([in] BSTR value); [propget] HRESULT CacheControl([retval, out] BSTR *cache_control); [propput] HRESULT CacheControl([in] BSTR cache_control); [propget] HRESULT CodePage([retval, out] LONG *codepage); [propput] HRESULT CodePage([in] LONG codepage); [propget] HRESULT LCID([retval, out] LONG *lcid); [propput] HRESULT LCID([in] LONG lcid); } ================================================ FILE: wine/windows/asynot.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a96-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IDBAsynchNotify : IUnknown { [local] HRESULT OnLowResource([in] DB_DWRESERVE dwReserved); [call_as(OnLowResource)] HRESULT RemoteOnLowResource([in] DB_DWRESERVE dwReserved); [local] HRESULT OnProgress([in] HCHAPTER hChapter, [in] DBASYNCHOP eOperation, [in] DBCOUNTITEM ulProgress, [in] DBCOUNTITEM ulProgressMax, [in] DBASYNCHPHASE eAsynchPhase, [in, annotation("__in_opt")] LPOLESTR pwszStatusText); [call_as(OnProgress)] HRESULT RemoteOnProgress([in] HCHAPTER hChapter, [in] DBASYNCHOP eOperation, [in] DBCOUNTITEM ulProgress, [in] DBCOUNTITEM ulProgressMax, [in] DBASYNCHPHASE eAsynchPhase, [in, unique, string] LPOLESTR pwszStatusText); [local] HRESULT OnStop([in] HCHAPTER hChapter, [in] DBASYNCHOP eOperation, [in] HRESULT hrStatus, [in, annotation("__in_opt")] LPOLESTR pwszStatusText); [call_as(OnStop)] HRESULT RemoteOnStop([in] HCHAPTER hChapter, [in] DBASYNCHOP eOperation, [in] HRESULT hrStatus, [in, unique, string] LPOLESTR pwszStatusText); } ================================================ FILE: wine/windows/asysta.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a95-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IDBAsynchStatus : IUnknown { [local] HRESULT Abort([in] HCHAPTER hChapter, [in] DBASYNCHOP eOperation); [call_as(Abort)] HRESULT RemoteAbort([in] HCHAPTER hChapter, [in] DBASYNCHOP eOperation, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetStatus([in] HCHAPTER hChapter, [in] DBASYNCHOP eOperation, [out, annotation("__out_opt")] DBCOUNTITEM *pulProgress, [out, annotation("__out_opt")] DBCOUNTITEM *pulProgressMax, [out, annotation("__out")] DBASYNCHPHASE *peAsynchPhase, [out, annotation("__deref_opt_inout_opt")] LPOLESTR *ppwszStatusText); [call_as(GetStatus)] HRESULT RemoteGetStatus([in] HCHAPTER hChapter, [in] DBASYNCHOP eOperation, [in, out, unique] DBCOUNTITEM *pulProgress, [in, out, unique] DBCOUNTITEM *pulProgressMax, [in, out, unique] DBASYNCHPHASE *peAsynchPhase, [in, out, unique] LPOLESTR *ppwszStatusText, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/atlbase.h ================================================ /* * Implementation of the Active Template Library (atl.dll) * * Copyright 2004 Aric Stewart for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ATLBASE_H__ #define __WINE_ATLBASE_H__ #include #include /* Wine extension: we (ab)use _ATL_VER to handle struct layout differences between ATL versions. */ #define _ATL_VER_30 0x0300 #define _ATL_VER_70 0x0700 #define _ATL_VER_80 0x0800 #define _ATL_VER_90 0x0900 #define _ATL_VER_100 0x0a00 #define _ATL_VER_110 0x0b00 #ifndef _ATL_VER #define _ATL_VER _ATL_VER_100 #endif typedef HRESULT (WINAPI _ATL_CREATORFUNC)(void* pv, REFIID riid, LPVOID* ppv); typedef HRESULT (WINAPI _ATL_CREATORARGFUNC)(void* pv, REFIID riid, LPVOID* ppv, DWORD dw); typedef HRESULT (WINAPI _ATL_MODULEFUNC)(DWORD dw); typedef LPCSTR (WINAPI _ATL_DESCRIPTIONFUNCA)(void); typedef LPCWSTR (WINAPI _ATL_DESCRIPTIONFUNCW)(void); typedef const struct _ATL_CATMAP_ENTRY* (_ATL_CATMAPFUNC)(void); typedef void (WINAPI _ATL_TERMFUNC)(DWORD dw); typedef CRITICAL_SECTION CComCriticalSection; typedef struct _ATL_OBJMAP_ENTRYA_V1_TAG { const CLSID* pclsid; HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister); _ATL_CREATORFUNC* pfnGetClassObject; _ATL_CREATORFUNC* pfnCreateInstance; IUnknown* pCF; DWORD dwRegister; _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription; }_ATL_OBJMAP_ENTRYA_V1; typedef struct _ATL_OBJMAP_ENTRYW_V1_TAG { const CLSID* pclsid; HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister); _ATL_CREATORFUNC* pfnGetClassObject; _ATL_CREATORFUNC* pfnCreateInstance; IUnknown* pCF; DWORD dwRegister; _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription; } _ATL_OBJMAP_ENTRYW_V1; typedef struct _ATL_OBJMAP_ENTRYA_TAG { const CLSID* pclsid; HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister); _ATL_CREATORFUNC* pfnGetClassObject; _ATL_CREATORFUNC* pfnCreateInstance; IUnknown* pCF; DWORD dwRegister; _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription; _ATL_CATMAPFUNC* pfnGetCategoryMap; void (WINAPI *pfnObjectMain)(BOOL bStarting); }_ATL_OBJMAP_ENTRYA; typedef struct _ATL_OBJMAP_ENTRYW_TAG { const CLSID* pclsid; HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister); _ATL_CREATORFUNC* pfnGetClassObject; _ATL_CREATORFUNC* pfnCreateInstance; IUnknown* pCF; DWORD dwRegister; _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription; _ATL_CATMAPFUNC* pfnGetCategoryMap; void (WINAPI *pfnObjectMain)(BOOL bStarting); } _ATL_OBJMAP_ENTRYW, _ATL_OBJMAP_ENTRY30, _ATL_OBJMAP_ENTRY; typedef struct _ATL_OBJMAP_CACHE { IUnknown *pCF; DWORD dwRegister; } _ATL_OBJMAP_CACHE; typedef struct _ATL_OBJMAP_ENTRY110 { const CLSID* pclsid; HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister); _ATL_CREATORFUNC* pfnGetClassObject; _ATL_CREATORFUNC* pfnCreateInstance; _ATL_OBJMAP_CACHE* pCache; _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription; _ATL_CATMAPFUNC* pfnGetCategoryMap; void (WINAPI *pfnObjectMain)(BOOL bStarting); } _ATL_OBJMAP_ENTRY110, _ATL_OBJMAP_ENTRY_EX; typedef struct _ATL_TERMFUNC_ELEM_TAG { _ATL_TERMFUNC* pFunc; DWORD_PTR dw; struct _ATL_TERMFUNC_ELEM_TAG* pNext; } _ATL_TERMFUNC_ELEM; typedef struct _AtlCreateWndData_TAG { void* m_pThis; DWORD m_dwThreadID; struct _AtlCreateWndData_TAG* m_pNext; } _AtlCreateWndData; typedef struct _ATL_MODULEA_TAG { UINT cbSize; HINSTANCE m_hInst; HINSTANCE m_hInstResource; HINSTANCE m_hInstTypeLib; _ATL_OBJMAP_ENTRYA* m_pObjMap; LONG m_nLockCnt; HANDLE m_hHeap; union { CRITICAL_SECTION m_csTypeInfoHolder; CRITICAL_SECTION m_csStaticDataInit; } u; CRITICAL_SECTION m_csWindowCreate; CRITICAL_SECTION m_csObjMap; DWORD dwAtlBuildVer; _AtlCreateWndData* m_pCreateWndList; BOOL m_bDestroyHeap; GUID* pguidVer; DWORD m_dwHeaps; HANDLE* m_phHeaps; int m_nHeap; _ATL_TERMFUNC_ELEM* m_pTermFuncs; } _ATL_MODULEA; typedef struct _ATL_MODULEW_TAG { UINT cbSize; HINSTANCE m_hInst; HINSTANCE m_hInstResource; HINSTANCE m_hInstTypeLib; _ATL_OBJMAP_ENTRYW* m_pObjMap; LONG m_nLockCnt; HANDLE m_hHeap; union { CRITICAL_SECTION m_csTypeInfoHolder; CRITICAL_SECTION m_csStaticDataInit; } u; CRITICAL_SECTION m_csWindowCreate; CRITICAL_SECTION m_csObjMap; DWORD dwAtlBuildVer; _AtlCreateWndData* m_pCreateWndList; BOOL m_bDestroyHeap; GUID* pguidVer; DWORD m_dwHeaps; HANDLE* m_phHeaps; int m_nHeap; _ATL_TERMFUNC_ELEM* m_pTermFuncs; } _ATL_MODULEW; typedef struct { void *m_aT; int m_nSize; int m_nAllocSize; } CSimpleArray; typedef struct _ATL_MODULE70 { UINT cbSize; LONG m_nLockCnt; _ATL_TERMFUNC_ELEM *m_pTermFuncs; CComCriticalSection m_csStaticDataInitAndTypeInfo; } _ATL_MODULE70; typedef struct _ATL_WIN_MODULE70 { UINT cbSize; CComCriticalSection m_csWindowCreate; _AtlCreateWndData *m_pCreateWndList; CSimpleArray /* */ m_rgWindowClassAtoms; } _ATL_WIN_MODULE70; #if _ATL_VER >= _ATL_VER_110 typedef struct _ATL_COM_MODULE70 { UINT cbSize; HINSTANCE m_hInstTypeLib; _ATL_OBJMAP_ENTRY_EX **m_ppAutoObjMapFirst; _ATL_OBJMAP_ENTRY_EX **m_ppAutoObjMapLast; CComCriticalSection m_csObjMap; } _ATL_COM_MODULE70, _ATL_COM_MODULE; #else typedef struct _ATL_COM_MODULE70 { UINT cbSize; HINSTANCE m_hInstTypeLib; _ATL_OBJMAP_ENTRY **m_ppAutoObjMapFirst; _ATL_OBJMAP_ENTRY **m_ppAutoObjMapLast; CComCriticalSection m_csObjMap; } _ATL_COM_MODULE70, _ATL_COM_MODULE; #endif #if _ATL_VER >= _ATL_VER_70 typedef _ATL_MODULE70 _ATL_MODULE; typedef _ATL_WIN_MODULE70 _ATL_WIN_MODULE; #else typedef _ATL_MODULEW _ATL_MODULE; typedef _ATL_MODULEW _ATL_WIN_MODULE; #endif typedef struct _ATL_INTMAP_ENTRY_TAG { const IID* piid; DWORD dw; _ATL_CREATORARGFUNC* pFunc; } _ATL_INTMAP_ENTRY; struct _ATL_REGMAP_ENTRY { LPCOLESTR szKey; LPCOLESTR szData; }; struct _ATL_CATMAP_ENTRY { int iType; const CATID *pcatid; }; #define _ATL_CATMAP_ENTRY_END 0 #define _ATL_CATMAP_ENTRY_IMPLEMENTED 1 #define _ATL_CATMAP_ENTRY_REQUIRED 2 HRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID * iid, LPDWORD dpw); HRESULT WINAPI AtlAxAttachControl(IUnknown*,HWND,IUnknown**); HRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**); HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*); HRESULT WINAPI AtlFreeMarshalStream(IStream *pStream); HRESULT WINAPI AtlInternalQueryInterface(void* pThis, const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, void** ppvObject); HRESULT WINAPI AtlMarshalPtrInProc(IUnknown *pUnk, const IID *iid, IStream **ppStream); void WINAPI AtlModuleAddCreateWndData(_ATL_MODULEW *pM, _AtlCreateWndData *pData, void* pvObject); HRESULT WINAPI AtlWinModuleInit(_ATL_WIN_MODULE*); void WINAPI AtlWinModuleAddCreateWndData(_ATL_WIN_MODULE*,_AtlCreateWndData*,void*); void* WINAPI AtlWinModuleExtractCreateWndData(_ATL_WIN_MODULE*); HRESULT WINAPI AtlModuleAddTermFunc(_ATL_MODULE *pM, _ATL_TERMFUNC *pFunc, DWORD_PTR dw); void WINAPI AtlCallTermFunc(_ATL_MODULE*); void* WINAPI AtlModuleExtractCreateWndData(_ATL_MODULEW *pM); HRESULT WINAPI AtlModuleInit(_ATL_MODULEW* pM, _ATL_OBJMAP_ENTRYW* p, HINSTANCE h); HRESULT WINAPI AtlModuleLoadTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex, BSTR *pbstrPath, ITypeLib **ppTypeLib); HRESULT WINAPI AtlModuleRegisterClassObjects(_ATL_MODULEW* pM, DWORD dwClsContext, DWORD dwFlags); HRESULT WINAPI AtlModuleRegisterServer(_ATL_MODULEW* pM, BOOL bRegTypeLib, const CLSID* pCLSID); HRESULT WINAPI AtlModuleRegisterTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex); HRESULT WINAPI AtlModuleUnregisterServer(_ATL_MODULEW* pM, const CLSID* pCLSID); HRESULT WINAPI AtlModuleUpdateRegistryFromResourceD(_ATL_MODULEW *pM, LPCOLESTR lpszRes, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries, IRegistrar *pReg ); HRESULT WINAPI AtlModuleUnregisterServerEx(_ATL_MODULEW* pM, BOOL bUnRegTypeLib, const CLSID* pCLSID); HRESULT WINAPI AtlModuleTerm(_ATL_MODULEW* pM); HRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID * iid, DWORD dw); HRESULT WINAPI AtlUnmarshalPtr(IStream *pStream, const IID *iid, IUnknown **ppUnk); HRESULT WINAPI AtlCreateRegistrar(IRegistrar**); HRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE,LPCOLESTR,BOOL,struct _ATL_REGMAP_ENTRY*,IRegistrar*); HRESULT WINAPI AtlLoadTypeLib(HINSTANCE,LPCOLESTR,BSTR*,ITypeLib**); HRESULT WINAPI AtlRegisterTypeLib(HINSTANCE,LPCOLESTR); HRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID,const struct _ATL_CATMAP_ENTRY*,BOOL); HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE*,REFCLSID,REFIID,void**); HRESULT WINAPI AtlComModuleRegisterClassObjects(_ATL_COM_MODULE*,DWORD,DWORD); HRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE*,BOOL,const CLSID*); BOOL WINAPI AtlWaitWithMessageLoop(HANDLE); HRESULT WINAPI AtlGetObjectSourceInterface(IUnknown*,GUID*,IID*,unsigned short*,unsigned short*); HRESULT WINAPI AtlSetPerUserRegistration(unsigned char /*bool*/); HRESULT WINAPI AtlGetPerUserRegistration(unsigned char /*bool*/ *); #endif /* __WINE_ATLBASE_H__ */ ================================================ FILE: wine/windows/atlcom.h ================================================ /* * Copyright 2014 Qian Hong for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ATLCOM_H__ #define __WINE_ATLCOM_H__ #ifndef __WINE_ATLBASE_H__ # error You must include atlbase.h to use this header #endif typedef struct ATL_PROPMAP_ENTRY { LPCOLESTR szDesc; #if _ATL_VER < _ATL_VER_100 DISPID dispid; const CLSID *pclsidPropPage; const IID *piidDispatch; #else const CLSID *pclsidPropPage; const IID *piidDispatch; void *rgclsidAllowed; DWORD cclsidAllowed; DISPID dispid; #endif DWORD dwOffsetData; DWORD dwSizeData; VARTYPE vt; } ATL_PROPMAP_ENTRY; HRESULT WINAPI AtlIPersistStreamInit_Load(IStream*, ATL_PROPMAP_ENTRY*, void*, IUnknown*); HRESULT WINAPI AtlIPersistStreamInit_Save(IStream*, BOOL, ATL_PROPMAP_ENTRY*, void*, IUnknown*); HRESULT WINAPI AtlIPersistPropertyBag_Load(IPropertyBag*, IErrorLog*, ATL_PROPMAP_ENTRY*, void*, IUnknown*); HRESULT WINAPI AtlIPersistPropertyBag_Save(IPropertyBag*, BOOL, BOOL, ATL_PROPMAP_ENTRY*, void*, IUnknown*); #endif /* __WINE_ATLCOM_H__ */ ================================================ FILE: wine/windows/atliface.idl ================================================ /* * Copyright 2005 Jacek Caban * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "ocidl.idl"; cpp_quote("#ifdef ATL_INITGUID") cpp_quote("#include ") cpp_quote("#endif") [ object, uuid(e21f8a85-b05d-4243-8183-c7cb405588f7), pointer_default(unique) ] interface IRegistrarBase : IUnknown { HRESULT AddReplacement( [in] LPCOLESTR Key, [in] LPCOLESTR item); HRESULT ClearReplacements(); } [ object, uuid(44EC053B-400F-11D0-9DCD-00A0C90391D3), pointer_default(unique) ] interface IRegistrar : IRegistrarBase { HRESULT ResourceRegisterSz( [in] LPCOLESTR resFileName, [in] LPCOLESTR szID, [in] LPCOLESTR szType); HRESULT ResourceUnregisterSz( [in] LPCOLESTR resFileName, [in] LPCOLESTR szID, [in] LPCOLESTR szType); HRESULT FileRegister( [in] LPCOLESTR fileName); HRESULT FileUnregister( [in] LPCOLESTR fileName); HRESULT StringRegister( [in] LPCOLESTR data); HRESULT StringUnregister( [in] LPCOLESTR data); HRESULT ResourceRegister( [in] LPCOLESTR resFileName, [in] UINT nID, [in] LPCOLESTR szType); HRESULT ResourceUnregister( [in] LPCOLESTR resFileName, [in] UINT nID, [in] LPCOLESTR szType); } [ object, uuid(425b5af0-65f1-11d1-9611-0000f81e0d0d) ] interface IDocHostUIHandlerDispatch : IDispatch { HRESULT ShowContextMenu([in] DWORD id, [in] LONG x, [in] LONG y, [in] IUnknown *unkreserved, [in] IDispatch *dispreserved, [out, retval] HRESULT *retval); HRESULT GetHostInfo([in, out] DWORD *flags, [in, out] DWORD *doubleclick); HRESULT ShowUI([in] DWORD id, [in] IUnknown *activeobject, [in] IUnknown *cmdtarget, [in] IUnknown *frame, [in] IUnknown *doc, [out, retval] HRESULT *retval); HRESULT HideUI(); HRESULT UpdateUI(); HRESULT EnableModeless([in] VARIANT_BOOL enable); HRESULT OnDocWindowActivate([in] VARIANT_BOOL activate); HRESULT OnFrameWindowActivate([in] VARIANT_BOOL activate); HRESULT ResizeBorder([in] LONG left, [in] LONG top, [in] LONG right, [in] LONG bottom, [in] IUnknown *window, [in] VARIANT_BOOL framewindow); HRESULT TranslateAccelerator([in] HWND hwnd, [in] UINT msg, [in] WPARAM wparam, [in] LPARAM lparam, [in] BSTR guid_cmd_group, [out, retval] HRESULT *retval); HRESULT GetOptionKeyPath([out] BSTR *key, [in] DWORD reserved); HRESULT GetDropTarget([in] IUnknown *droptarget, [out] IUnknown **ret_droptarget); HRESULT GetExternal([out] IDispatch **disp); HRESULT TranslateUrl([in] DWORD reserved, [in] BSTR url, [out] BSTR *translated_url); HRESULT FilterDataObject([in] IUnknown *dataobject, [out] IUnknown **dataobject_ret); } [ dual, object, oleautomation, uuid(b6ea2051-048a-11d1-82b9-00c04fb9942e) ] interface IAxWinAmbientDispatch : IDispatch { [propput] HRESULT AllowWindowlessActivation([in] VARIANT_BOOL allow); [propget] HRESULT AllowWindowlessActivation([out, retval] VARIANT_BOOL *allowed); [propput, id(-701)] HRESULT BackColor([in] OLE_COLOR color); [propget, id(-701)] HRESULT BackColor([out, retval] OLE_COLOR *color); [propput, id(-704)] HRESULT ForeColor([in] OLE_COLOR color); [propget, id(-704)] HRESULT ForeColor([out, retval] OLE_COLOR *color); [propput, id(-705)] HRESULT LocaleID([in] LCID lcid); [propget, id(-705)] HRESULT LocaleID([out, retval] LCID *lcid); [propput, id(-709)] HRESULT UserMode([in] VARIANT_BOOL mode); [propget, id(-709)] HRESULT UserMode([out, retval] VARIANT_BOOL *mode); [propput, id(-713)] HRESULT DisplayAsDefault([in] VARIANT_BOOL display); [propget, id(-713)] HRESULT DisplayAsDefault([out, retval] VARIANT_BOOL *display); [propput, id(-703)] HRESULT Font([in] IFontDisp *font); [propget, id(-703)] HRESULT Font([out, retval] IFontDisp **font); [propput, id(-706)] HRESULT MessageReflect([in] VARIANT_BOOL reflect); [propget, id(-706)] HRESULT MessageReflect([out, retval] VARIANT_BOOL *reflect); [propget, id(-711)] HRESULT ShowGrabHandles([out, retval] VARIANT_BOOL *show); [propget, id(-712)] HRESULT ShowHatching([out, retval] VARIANT_BOOL *show); [propput] HRESULT DocHostFlags([in] DWORD flags); [propget] HRESULT DocHostFlags([out, retval] DWORD *flags); [propput] HRESULT DocHostDoubleClickFlags([in] DWORD flags); [propget] HRESULT DocHostDoubleClickFlags([out, retval] DWORD *flags); [propput] HRESULT AllowContextMenu([in] VARIANT_BOOL allow); [propget] HRESULT AllowContextMenu([out, retval] VARIANT_BOOL *allow); [propput] HRESULT AllowShowUI([in] VARIANT_BOOL allow); [propget] HRESULT AllowShowUI([out, retval] VARIANT_BOOL *allow); [propput] HRESULT OptionKeyPath([in] BSTR path); [propget] HRESULT OptionKeyPath([out, retval] BSTR *path); } [ dual, object, oleautomation, uuid(b2d0778b-ac99-4c58-a5c8-e7724e5316b5) ] interface IAxWinAmbientDispatchEx : IAxWinAmbientDispatch { [id(100)] HRESULT SetAmbientDispatch([in] IDispatch *disp); } cpp_quote("DEFINE_GUID(CLSID_Registrar,0x44ec053a,0x400f,0x11d0,0x9d,0xcd,0x00,0xa0,0xc9,0x03,0x91,0xd3);") cpp_quote("HRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**);") cpp_quote("HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*);") cpp_quote("HRESULT WINAPI AtlAxCreateControlLic(LPCOLESTR,HWND,IStream*,IUnknown**,BSTR);") cpp_quote("HRESULT WINAPI AtlAxCreateControlLicEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*,BSTR);") cpp_quote("BOOL WINAPI AtlAxWinInit(void);") cpp_quote("HRESULT WINAPI AtlAxGetControl(HWND,IUnknown**);") cpp_quote("HRESULT WINAPI AtlAxGetHost(HWND,IUnknown**);") cpp_quote("HWND WINAPI AtlAxCreateDialogW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);") cpp_quote("HWND WINAPI AtlAxCreateDialogA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);") cpp_quote("#define AtlAxCreateDialog WINELIB_NAME_AW(AtlAxCreateDialog)") cpp_quote("INT_PTR WINAPI AtlAxDialogBoxW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);") cpp_quote("INT_PTR WINAPI AtlAxDialogBoxA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);") cpp_quote("#define AtlAxDialogBox WINELIB_NAME_AW(AtlAxDialogBox)") ================================================ FILE: wine/windows/atlwin.h ================================================ /* * Active Template Library Window Functions * * Copyright 2006 Robert Shearman for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ATLWIN_H__ #define __WINE_ATLWIN_H__ typedef struct _ATL_WNDCLASSINFOA_TAG { WNDCLASSEXA m_wc; LPCSTR m_lpszOrigName; WNDPROC pWndProc; LPCSTR m_lpszCursorID; BOOL m_bSystemCursor; ATOM m_atom; CHAR m_szAutoName[14]; } _ATL_WNDCLASSINFOA; typedef struct _ATL_WNDCLASSINFOW_TAG { WNDCLASSEXW m_wc; LPCWSTR m_lpszOrigName; WNDPROC pWndProc; LPCWSTR m_lpszCursorID; BOOL m_bSystemCursor; ATOM m_atom; WCHAR m_szAutoName[14]; } _ATL_WNDCLASSINFOW; ATOM WINAPI AtlModuleRegisterWndClassInfoA(_ATL_MODULEA *pm, _ATL_WNDCLASSINFOA *wci, WNDPROC *pProc); ATOM WINAPI AtlModuleRegisterWndClassInfoW(_ATL_MODULEW *pm, _ATL_WNDCLASSINFOW *wci, WNDPROC *pProc); HDC WINAPI AtlCreateTargetDC(HDC hdc, DVTARGETDEVICE *ptd); void WINAPI AtlHiMetricToPixel(const SIZEL *lpSizeInHiMetric, LPSIZEL lpSizeInPix); void WINAPI AtlPixelToHiMetric(const SIZEL *lpSizeInPix, LPSIZEL lpSizeInHiMetric); #endif /* __WINE_ATLWIN_H__ */ ================================================ FILE: wine/windows/audevcod.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __AUDEVCOD__ #define __AUDEVCOD__ typedef enum _tagSND_DEVICE_ERROR { SNDDEV_ERROR_Open=1, SNDDEV_ERROR_Close=2, SNDDEV_ERROR_GetCaps=3, SNDDEV_ERROR_PrepareHeader=4, SNDDEV_ERROR_UnprepareHeader=5, SNDDEV_ERROR_Reset=6, SNDDEV_ERROR_Restart=7, SNDDEV_ERROR_GetPosition=8, SNDDEV_ERROR_Write=9, SNDDEV_ERROR_Pause=10, SNDDEV_ERROR_Stop=11, SNDDEV_ERROR_Start=12, SNDDEV_ERROR_AddBuffer=13, SNDDEV_ERROR_Query=14 } SNDDEV_ERR; #define EC_SND_DEVICE_ERROR_BASE 0x0200 #define EC_SNDDEV_IN_ERROR (EC_SND_DEVICE_ERROR_BASE+0x00) #define EC_SNDDEV_OUT_ERROR (EC_SND_DEVICE_ERROR_BASE+0x01) #endif /* __AUDEVCOD__ */ ================================================ FILE: wine/windows/audioclient.idl ================================================ /* * Core Audio audioclient definitions * * Copyright 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ import "wtypes.idl"; import "unknwn.idl"; import "audiosessiontypes.h"; /* Forward declarations */ interface IAudioClient; interface IAudioRenderClient; interface IAudioCaptureClient; interface IAudioClock; interface IAudioClock2; interface IAudioClockAdjustment; interface ISimpleAudioVolume; interface IAudioStreamVolume; interface IChannelAudioVolume; cpp_quote("#if 0") typedef struct WAVEFORMATEX /*[hidden,restricted]*/ { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; cpp_quote("#else") cpp_quote("#include ") cpp_quote("#endif") cpp_quote("#if 0") typedef LONGLONG /*[hidden,restricted]*/ REFERENCE_TIME; cpp_quote("#else") cpp_quote("#define _IKsControl_") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#endif") enum _AUDCLNT_BUFFERFLAGS { AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY = 0x1, AUDCLNT_BUFFERFLAGS_SILENT = 0x2, AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR = 0x4 }; [ local, pointer_default(unique), uuid(1cb9ad4c-dbfa-4c32-b178-c2f568a703b2), object, ] interface IAudioClient : IUnknown { HRESULT Initialize( [in] AUDCLNT_SHAREMODE ShareMode, [in] DWORD StreamFlags, [in] REFERENCE_TIME hnsBufferDuration, [in] REFERENCE_TIME hnsPeriodicity, [in] const WAVEFORMATEX *pFormat, [in] LPCGUID AudioSessionGuid ); HRESULT GetBufferSize( [out] UINT32 *pNumBufferFrames ); HRESULT GetStreamLatency( [out] REFERENCE_TIME *phnsLatency ); HRESULT GetCurrentPadding( [out] UINT32 *pNumPaddingFrames ); HRESULT IsFormatSupported( [in] AUDCLNT_SHAREMODE ShareMode, [in] const WAVEFORMATEX *pFormat, [out,unique] WAVEFORMATEX **ppClosestMatch ); HRESULT GetMixFormat( [out] WAVEFORMATEX **ppDeviceFormat ); HRESULT GetDevicePeriod( [out] REFERENCE_TIME *phnsDefaultDevicePeriod, [out] REFERENCE_TIME *phnsMinimumDevicePeriod ); HRESULT Start(void); HRESULT Stop(void); HRESULT Reset(void); HRESULT SetEventHandle([in] HANDLE eventHandle); HRESULT GetService( [in] REFIID riid, [iid_is(riid),out] void **ppv ); } [ local, pointer_default(unique), uuid(f294acfc-3146-4483-a7bf-addca7c260e2), object, ] interface IAudioRenderClient : IUnknown { HRESULT GetBuffer( [in] UINT32 NumFramesRequested, [out] BYTE **ppData ); HRESULT ReleaseBuffer( [in] UINT32 NumFramesWritten, [in] DWORD dwFlags ); } [ local, pointer_default(unique), uuid(c8adbd64-e71e-48a0-a4de-185c395cd317), object, ] interface IAudioCaptureClient : IUnknown { HRESULT GetBuffer( [out] BYTE **ppData, [out] UINT32 *pNumFramesToRead, [out] DWORD *pdwFlags, [unique,out] UINT64 *pu64DevicePosition, [unique,out] UINT64 *pu64QPCPosition ); HRESULT ReleaseBuffer( [in] UINT32 NumFramesRead ); HRESULT GetNextPacketSize( [out] UINT32 *pNumFramesInNextPacket ); } cpp_quote("#define AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ 0x00000001") [ local, pointer_default(unique), uuid("cd63314f-3fba-4a1b-812c-ef96358728e7"), object, ] interface IAudioClock : IUnknown { HRESULT GetFrequency( [out] UINT64 *pu64Frequency ); HRESULT GetPosition( [out] UINT64 *pu64Position, [out,unique] UINT64 *pu64QPCPosition ); HRESULT GetCharacteristics( [out] DWORD *pdwCharacteristics ); } [ local, pointer_default(unique), uuid("6f49ff73-6727-49ac-a008-d98cf5e70048"), object, ] interface IAudioClock2 : IUnknown { HRESULT GetPosition( [out] UINT64 *DevicePosition, [out,unique] UINT64 *QPCPosition ); } [ local, pointer_default(unique), uuid("f6e4c0a0-46d9-4fb9-be21-57a3ef2b626c"), object, ] interface IAudioClockAdjustment : IUnknown { HRESULT SetSampleRate( [in] float flSampleRate ); } [ local, pointer_default(unique), uuid("87ce5498-68d6-44e5-9215-6da47ef883d8"), object, ] interface ISimpleAudioVolume : IUnknown { HRESULT SetMasterVolume( [in] float fLevel, [unique,in] LPCGUID EventContext ); HRESULT GetMasterVolume( [out] float *pfLevel ); HRESULT SetMute( [in] const BOOL bMute, [unique,in] LPCGUID EventContext ); HRESULT GetMute( [out] BOOL *pbMute ); } [ local, pointer_default(unique), uuid("93014887-242d-4068-8a15-cf5e93b90fe3"), object, ] interface IAudioStreamVolume : IUnknown { HRESULT GetChannelCount( [out] UINT32 *pdwCount ); HRESULT SetChannelVolume( [in] UINT32 dwIndex, [in] const float fLevel ); HRESULT GetChannelVolume( [in] UINT32 dwIndex, [out] float *pfLevel ); HRESULT SetAllVolumes( [in] UINT32 dwCount, [size_is(dwCount),in] const float *pfVolumes ); HRESULT GetAllVolumes( [in] UINT32 dwCount, [size_is(dwCount),out] float *pfVolumes ); } [ local, pointer_default(unique), uuid("1c158861-b533-4b30-b1cf-e853e51c59b8"), object, ] interface IChannelAudioVolume : IUnknown { HRESULT GetChannelCount( [out] UINT32 *pdwCount ); HRESULT SetChannelVolume( [in] UINT32 dwIndex, [in] const float fLevel, [unique,in] LPCGUID EventContext ); HRESULT GetChannelVolume( [in] UINT32 dwIndex, [out] float *pfLevel ); HRESULT SetAllVolumes( [in] UINT32 dwCount, [size_is(dwCount),in] const float *pfVolumes, [unique,in] LPCGUID EventContext ); HRESULT GetAllVolumes( [in] UINT32 dwCount, [size_is(dwCount),out] float *pfVolumes ); } cpp_quote("#define AUDCLNT_ERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_AUDCLNT, n)") cpp_quote("#define AUDCLNT_SUCCESS(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_AUDCLNT, n)") cpp_quote("#define AUDCLNT_E_NOT_INITIALIZED AUDCLNT_ERR(1)") cpp_quote("#define AUDCLNT_E_ALREADY_INITIALIZED AUDCLNT_ERR(2)") cpp_quote("#define AUDCLNT_E_WRONG_ENDPOINT_TYPE AUDCLNT_ERR(3)") cpp_quote("#define AUDCLNT_E_DEVICE_INVALIDATED AUDCLNT_ERR(4)") cpp_quote("#define AUDCLNT_E_NOT_STOPPED AUDCLNT_ERR(5)") cpp_quote("#define AUDCLNT_E_BUFFER_TOO_LARGE AUDCLNT_ERR(6)") cpp_quote("#define AUDCLNT_E_OUT_OF_ORDER AUDCLNT_ERR(7)") cpp_quote("#define AUDCLNT_E_UNSUPPORTED_FORMAT AUDCLNT_ERR(8)") cpp_quote("#define AUDCLNT_E_INVALID_SIZE AUDCLNT_ERR(9)") cpp_quote("#define AUDCLNT_E_DEVICE_IN_USE AUDCLNT_ERR(0x0a)") cpp_quote("#define AUDCLNT_E_BUFFER_OPERATION_PENDING AUDCLNT_ERR(0x0b)") cpp_quote("#define AUDCLNT_E_THREAD_NOT_REGISTERED AUDCLNT_ERR(0x0c)") /* Not defined? cpp_quote("#define AUDCLNT_E_UNKNOWN_XXX1 AUDCLNT_ERR(0x0d)") */ cpp_quote("#define AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED AUDCLNT_ERR(0x0e)") cpp_quote("#define AUDCLNT_E_ENDPOINT_CREATE_FAILED AUDCLNT_ERR(0x0f)") cpp_quote("#define AUDCLNT_E_SERVICE_NOT_RUNNING AUDCLNT_ERR(0x10)") cpp_quote("#define AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED AUDCLNT_ERR(0x11)") cpp_quote("#define AUDCLNT_E_EXCLUSIVE_MODE_ONLY AUDCLNT_ERR(0x12)") cpp_quote("#define AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL AUDCLNT_ERR(0x13)") cpp_quote("#define AUDCLNT_E_EVENTHANDLE_NOT_SET AUDCLNT_ERR(0x14)") cpp_quote("#define AUDCLNT_E_INCORRECT_BUFFER_SIZE AUDCLNT_ERR(0x15)") cpp_quote("#define AUDCLNT_E_BUFFER_SIZE_ERROR AUDCLNT_ERR(0x16)") cpp_quote("#define AUDCLNT_E_CPUUSAGE_EXCEEDED AUDCLNT_ERR(0x17)") cpp_quote("#define AUDCLNT_E_BUFFER_ERROR AUDCLNT_ERR(0x18)") cpp_quote("#define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x19)") /* Hex fail */ cpp_quote("#define AUDCLNT_E_INVALID_DEVICE_PERIOD AUDCLNT_ERR(0x20)") cpp_quote("#define AUDCLNT_E_INVALID_STREAM_FLAG AUDCLNT_ERR(0x021)") cpp_quote("#define AUDCLNT_E_ENDPOINT_OFFLOAD_NOT_CAPABLE AUDCLNT_ERR(0x022)") cpp_quote("#define AUDCLNT_E_OUT_OF_OFFLOAD_RESOURCES AUDCLNT_ERR(0x023)") cpp_quote("#define AUDCLNT_E_OFFLOAD_MODE_ONLY AUDCLNT_ERR(0x024)") cpp_quote("#define AUDCLNT_E_NONOFFLOAD_MODE_ONLY AUDCLNT_ERR(0x025)") cpp_quote("#define AUDCLNT_E_RESOURCES_INVALIDATED AUDCLNT_ERR(0x026)") cpp_quote("#define AUDCLNT_S_BUFFER_EMPTY AUDCLNT_SUCCESS(0x1)") cpp_quote("#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x2)") cpp_quote("#define AUDCLNT_S_POSITION_STALLED AUDCLNT_SUCCESS(0x3)") ================================================ FILE: wine/windows/audiopolicy.idl ================================================ /* * Core Audio audio policy definitions * * Copyright 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ import "oaidl.idl"; import "ocidl.idl"; import "propidl.idl"; import "audiosessiontypes.h"; import "audioclient.idl"; interface IAudioSessionEvents; interface IAudioSessionControl; interface IAudioSessionControl2; interface IAudioSessionManager; interface IAudioVolumeDuckNotification; interface IAudioSessionNotification; interface IAudioSessionEnumerator; interface IAudioSessionManager2; typedef enum AudioSessionDisconnectReason /*[local]*/ { DisconnectReasonDeviceRemoval = 0, DisconnectReasonServerShutdown, DisconnectReasonFormatChanged, DisconnectReasonSessionLogoff, DisconnectReasonSessionDisconnected, DisconnectReasonExclusiveModeOverride, } AudioSessionDisconnectReason; [ local, uuid(24918acc-64b3-37c1-8ca9-74a66e9957a8), pointer_default(unique), object ] interface IAudioSessionEvents : IUnknown { HRESULT OnDisplayNameChanged( [string,in] LPCWSTR NewDisplayName, [in] LPCGUID EventContext ); HRESULT OnIconPathChanged( [string,in] LPCWSTR NewIconPath, [in] LPCGUID EventContext ); HRESULT OnSimpleVolumeChanged( [in] float NewVolume, [in] BOOL NewMute, [in] LPCGUID EventContext ); HRESULT OnChannelVolumeChanged( [in] DWORD ChannelCount, [size_is(ChannelCount),in] float *NewChannelVolumeArray, [in] DWORD ChangedChannel, [in] LPCGUID EventContext ); HRESULT OnGroupingParamChanged( [in] LPCGUID NewGroupingParam, [in] LPCGUID EventContext ); HRESULT OnStateChanged( [in] AudioSessionState NewState ); HRESULT OnSessionDisconnected( [in] AudioSessionDisconnectReason DisconnectReason ); } [ local, uuid(f4b1a599-7266-4319-a8ca-e70acb11e8cd), pointer_default(unique), object ] interface IAudioSessionControl : IUnknown { HRESULT GetState( [out] AudioSessionState *pRetVal ); HRESULT GetDisplayName( [string,out] LPWSTR *pRetVal ); HRESULT SetDisplayName( [string,in] LPCWSTR DisplayName, [unique,in] LPCGUID EventContext ); HRESULT GetIconPath( [string,out] LPWSTR *pRetVal ); HRESULT SetIconPath( [string,in] LPCWSTR Value, [unique,in] LPCGUID EventContext ); HRESULT GetGroupingParam( [out] GUID *pRetVal ); HRESULT SetGroupingParam( [in] LPCGUID Override, [unique,in] LPCGUID EventContext ); HRESULT RegisterAudioSessionNotification( [in] IAudioSessionEvents *NewNotifications ); HRESULT UnregisterAudioSessionNotification( [in] IAudioSessionEvents *NewNotifications ); } [ local, uuid(bfb7ff88-7239-4fc9-8fa2-07c950be9c6d), pointer_default(unique), object ] interface IAudioSessionControl2 : IAudioSessionControl { HRESULT GetSessionIdentifier( [string,out] LPWSTR *pRetVal ); HRESULT GetSessionInstanceIdentifier( [string,out] LPWSTR *pRetVal ); HRESULT GetProcessId( [out] DWORD *pRetVal ); HRESULT IsSystemSoundsSession(void); HRESULT SetDuckingPreferences( [in] BOOL optOut ); } [ local, uuid(bfa971f1-4d5e-40bb-935e-967039bfbee4), pointer_default(unique), object ] interface IAudioSessionManager : IUnknown { HRESULT GetAudioSessionControl( [in] LPCGUID AudioSessionGuid, [in] DWORD StreamFlags, [out] IAudioSessionControl **SessionControl ); HRESULT GetSimpleAudioVolume( [in] LPCGUID AudioSessionGuid, [in] DWORD StreamFlags, [out] ISimpleAudioVolume **AudioVolume ); } [ local, uuid(c3b284d4-6d39-4359-b3cf-b56ddb3bb39c), pointer_default(unique), object ] interface IAudioVolumeDuckNotification : IUnknown { HRESULT OnVolumeDuckNotification( [in] LPCWSTR sessionID, [in] UINT32 countCommunicationSessions ); HRESULT OnVolumeUnduckNotification( [in] LPCWSTR sessionID ); } [ local, uuid(641dd20b-4d41-49cc-aba3-174b9477bb08), pointer_default(unique), object ] interface IAudioSessionNotification : IUnknown { HRESULT OnSessionCreated( [in] IAudioSessionControl *NewSession ); } [ local, uuid(e2f5bb11-0570-40ca-acdd-3aa01277dee8), pointer_default(unique), object ] interface IAudioSessionEnumerator : IUnknown { HRESULT GetCount( [out] INT *SessionCount ); HRESULT GetSession( [in] INT SessionCount, [out] IAudioSessionControl **Session ); } [ local, uuid(77aa99a0-1bd6-484f-8bc7-2c654c9a9b6f), pointer_default(unique), object ] interface IAudioSessionManager2 : IAudioSessionManager { HRESULT GetSessionEnumerator( [retval,out] IAudioSessionEnumerator **SessionEnum ); HRESULT RegisterSessionNotification( [in] IAudioSessionNotification *SessionNotification ); HRESULT UnregisterSessionNotification( [in] IAudioSessionNotification *SessionNotification ); HRESULT RegisterDuckNotification( [string,in] LPCWSTR sessionID, [in] IAudioVolumeDuckNotification *duckNotification ); HRESULT UnregisterDuckNotification( [in] IAudioVolumeDuckNotification *duckNotification ); } ================================================ FILE: wine/windows/audiosessiontypes.h ================================================ /* * Core Audio audio session types definitions * * Copyright 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef __AUDIOSESSIONTYPES__ #define __AUDIOSESSIONTYPES__ typedef enum _AUDCLNT_SHAREMODE { AUDCLNT_SHAREMODE_SHARED, AUDCLNT_SHAREMODE_EXCLUSIVE, } AUDCLNT_SHAREMODE; #define AUDCLNT_STREAMFLAGS_CROSSPROCESS 0x00010000 #define AUDCLNT_STREAMFLAGS_LOOPBACK 0x00020000 #define AUDCLNT_STREAMFLAGS_EVENTCALLBACK 0x00040000 #define AUDCLNT_STREAMFLAGS_NOPERSIST 0x00080000 #define AUDCLNT_STREAMFLAGS_RATEADJUST 0x00100000 #define AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED 0x10000000 #define AUDCLNT_SESSIONFLAGS_DISPLAY_HIDE 0x20000000 #define AUDCLNT_SESSIONFLAGS_DISPLAY_HIDEWHENEXPIRED 0x40000000 typedef enum _AudioSessionState { AudioSessionStateInactive = 0, AudioSessionStateActive, AudioSessionStateExpired, } AudioSessionState; typedef enum _AUDIO_STREAM_CATEGORY { AudioCategory_Other = 0, AudioCategory_ForegroundOnlyMedia, AudioCategory_BackgroundCapableMedia, AudioCategory_Communications, AudioCategory_Alerts, AudioCategory_SoundEffects, AudioCategory_GameEffects, AudioCategory_GameMedia } AUDIO_STREAM_CATEGORY; #endif ================================================ FILE: wine/windows/austream.idl ================================================ /* * Copyright 2004 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "mmstream.idl"; cpp_quote("#if 0") typedef struct tWAVEFORMATEX WAVEFORMATEX; cpp_quote ("#endif") interface IAudioMediaStream; interface IAudioStreamSample; interface IMemoryData; interface IAudioData; [ object, local, uuid(f7537560-a3be-11d0-8212-00c04fc32c45), pointer_default(unique) ] interface IAudioMediaStream : IMediaStream { HRESULT GetFormat( [out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent ); HRESULT SetFormat( [in] const WAVEFORMATEX *lpWaveFormat); HRESULT CreateSample( [in] IAudioData *pAudioData, [in] DWORD dwFlags, [out] IAudioStreamSample **ppSample ); } [ object, local, uuid(345fee00-aba5-11d0-8212-00c04fc32c45), pointer_default(unique) ] interface IAudioStreamSample : IStreamSample { HRESULT GetAudioData( [out] IAudioData **ppAudio ); } [ object, local, uuid(327fc560-af60-11d0-8212-00c04fc32c45), pointer_default(unique) ] interface IMemoryData : IUnknown { HRESULT SetBuffer( [in] DWORD cbSize, [in] BYTE *pbData, [in] DWORD dwFlags ); HRESULT GetInfo( [out] DWORD *pdwLength, [out] BYTE **ppbData, [out] DWORD *pcbActualData ); HRESULT SetActual( [in] DWORD cbDataValid ); } [ object, local, uuid(54c719c0-af60-11d0-8212-00c04fc32c45), pointer_default(unique) ] interface IAudioData : IMemoryData { HRESULT GetFormat( [out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent ); HRESULT SetFormat( [in] const WAVEFORMATEX *lpWaveFormat ); } ================================================ FILE: wine/windows/authz.h ================================================ /* * Copyright (C) 2016 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __AUTHZ_H__ #define __AUTHZ_H__ #ifdef __cplusplus extern "C" { #endif DECLARE_HANDLE(AUTHZ_ACCESS_CHECK_RESULTS_HANDLE); DECLARE_HANDLE(AUTHZ_CLIENT_CONTEXT_HANDLE); DECLARE_HANDLE(AUTHZ_RESOURCE_MANAGER_HANDLE); DECLARE_HANDLE(AUTHZ_AUDIT_EVENT_HANDLE); typedef AUTHZ_ACCESS_CHECK_RESULTS_HANDLE *PAUTHZ_ACCESS_CHECK_RESULTS_HANDLE; typedef AUTHZ_CLIENT_CONTEXT_HANDLE *PAUTHZ_CLIENT_CONTEXT_HANDLE; typedef BOOL (CALLBACK *PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS) ( AUTHZ_CLIENT_CONTEXT_HANDLE handle, void *args, PSID_AND_ATTRIBUTES *sid_attr_array, DWORD *sid_cnt, PSID_AND_ATTRIBUTES *restricted_sid_attr_array, DWORD *restricted_sid_cnt); typedef BOOL (CALLBACK *PFN_AUTHZ_DYNAMIC_ACCESS_CHECK) ( AUTHZ_CLIENT_CONTEXT_HANDLE handle, PACE_HEADER ace, void *args, BOOL *ace_applicable); typedef VOID (CALLBACK *PFN_AUTHZ_FREE_DYNAMIC_GROUPS) ( PSID_AND_ATTRIBUTES sid_attr_array); typedef struct _AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET { WCHAR *szObjectTypeName; DWORD dwOffset; } AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET, *PAUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET; typedef struct _AUTHZ_ACCESS_REQUEST { ACCESS_MASK DesiredAccess; PSID PrincipalSelfSid; POBJECT_TYPE_LIST ObjectTypeList; DWORD ObjectTypeListLength; void *OptionalArguments; } AUTHZ_ACCESS_REQUEST, *PAUTHZ_ACCESS_REQUEST; #define AUTHZ_GENERATE_SUCCESS_AUDIT 0x1 #define AUTHZ_GENERATE_FAILURE_AUDIT 0x2 typedef struct _AUTHZ_ACCESS_REPLY { DWORD ResultListLength; ACCESS_MASK *GrantedAccessMask; DWORD *SaclEvaluationResults; DWORD *Error; } AUTHZ_ACCESS_REPLY, *PAUTHZ_ACCESS_REPLY; typedef struct _AUTHZ_SOURCE_SCHEMA_REGISTRATION { DWORD dwFlags; WCHAR *szEventSourceName; WCHAR *szEventMessageFile; WCHAR *szEventSourceXmlSchemaFile; WCHAR *szEventAccessStringsFile; WCHAR *szExecutableImagePath; union { void *pReserved; GUID *pProviderGuid; } DUMMYUNIONNAME; DWORD dwObjectTypeNameCount; AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET ObjectTypeNames[ANYSIZE_ARRAY]; } AUTHZ_SOURCE_SCHEMA_REGISTRATION, *PAUTHZ_SOURCE_SCHEMA_REGISTRATION; BOOL WINAPI AuthzInitializeResourceManager(DWORD flags, PFN_AUTHZ_DYNAMIC_ACCESS_CHECK access_checker, PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS compute_dyn_groups, PFN_AUTHZ_FREE_DYNAMIC_GROUPS free_dyn_groups, const WCHAR *managername, AUTHZ_RESOURCE_MANAGER_HANDLE *handle ); BOOL WINAPI AuthzInstallSecurityEventSource(DWORD flags, AUTHZ_SOURCE_SCHEMA_REGISTRATION *registration); BOOL WINAPI AuthzAccessCheck(DWORD flags, AUTHZ_CLIENT_CONTEXT_HANDLE client_context, AUTHZ_ACCESS_REQUEST *request, AUTHZ_AUDIT_EVENT_HANDLE audit_event, PSECURITY_DESCRIPTOR security, PSECURITY_DESCRIPTOR *optional_security, DWORD optional_security_count, AUTHZ_ACCESS_REPLY *reply, AUTHZ_ACCESS_CHECK_RESULTS_HANDLE *access_check_result); BOOL WINAPI AuthzFreeContext(AUTHZ_CLIENT_CONTEXT_HANDLE client_context); BOOL WINAPI AuthzInitializeContextFromSid(DWORD flags, PSID sid, AUTHZ_RESOURCE_MANAGER_HANDLE resource_manager, LARGE_INTEGER *expire_time, LUID id, void *dynamic_group, AUTHZ_CLIENT_CONTEXT_HANDLE *client_context); BOOL WINAPI AuthzInitializeContextFromToken(DWORD flags, HANDLE token_handle, AUTHZ_RESOURCE_MANAGER_HANDLE resource_manager, LARGE_INTEGER *expire_time, LUID id, void *dynamic_group, AUTHZ_CLIENT_CONTEXT_HANDLE *client_context); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/aviriff.h ================================================ /* * Copyright (C) 2003 Robert Shearman * Copyright (C) 2008 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef AVIRIFF_H #define AVIRIFF_H /* All definitions here are packed structures of on-disk formats */ #include typedef struct _riffchunk { FOURCC fcc; DWORD cb; } RIFFCHUNK, * LPRIFFCHUNK; typedef struct _rifflist { FOURCC fcc; DWORD cb; FOURCC fccListType; } RIFFLIST, * LPRIFFLIST; #define FCC( ch0, ch1, ch2, ch3 ) \ ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \ ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) ) #define RIFFROUND(cb) ((cb) + ((cb)&1)) #define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk)+sizeof(RIFFCHUNK)+RIFFROUND(((LPRIFFCHUNK)pChunk)->cb)) /* flags for dwFlags member of AVIMAINHEADER */ #define AVIF_HASINDEX 0x00000010 #define AVIF_MUSTUSEINDEX 0x00000020 #define AVIF_ISINTERLEAVED 0x00000100 #define AVIF_TRUSTCKTYPE 0x00000800 #define AVIF_WASCAPTUREFILE 0x00010000 #define AVIF_COPYRIGHTED 0x00020000 #define ckidMAINAVIHEADER FCC('a','v','i','h') typedef struct _avimainheader { FOURCC fcc; DWORD cb; DWORD dwMicroSecPerFrame; DWORD dwMaxBytesPerSec; DWORD dwPaddingGranularity; DWORD dwFlags; DWORD dwTotalFrames; DWORD dwInitialFrames; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwReserved[4]; } AVIMAINHEADER; #define ckidODML FCC('o','d','m','l') #define ckidAVIEXTHEADER FCC('d','m','l','h') typedef struct _aviextheader { FOURCC fcc; DWORD cb; DWORD dwGrandFrames; DWORD dwFuture[61]; } AVIEXTHEADER; #define ckidSTREAMLIST FCC('s','t','r','l') /* flags for dwFlags member of AVISTREAMHEADER */ #define AVISF_DISABLED 0x00000001 #define AVISF_VIDEO_PALCHANGES 0x00010000 #ifndef ckidSTREAMHEADER #define ckidSTREAMHEADER FCC('s','t','r','h') #endif #ifndef streamtypeVIDEO #define streamtypeVIDEO FCC('v','i','d','s') #define streamtypeAUDIO FCC('a','u','d','s') #define streamtypeMIDI FCC('m','i','d','s') #define streamtypeTEXT FCC('t','x','t','s') #endif typedef struct _avistreamheader { FOURCC fcc; DWORD cb; FOURCC fccType; FOURCC fccHandler; DWORD dwFlags; WORD wPriority; WORD wLanguage; DWORD dwInitialFrames; DWORD dwScale; DWORD dwRate; DWORD dwStart; DWORD dwLength; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; struct { short int left; short int top; short int right; short int bottom; } rcFrame; } AVISTREAMHEADER; #ifndef ckidSTREAMFORMAT #define ckidSTREAMFORMAT FCC('s','t','r','f') #endif #define ckidAVIOLDINDEX FCC('i','d','x','1') /* flags for dwFlags member of _avioldindex_entry */ #define AVIIF_LIST 0x00000001 #define AVIIF_KEYFRAME 0x00000010 #define AVIIF_NO_TIME 0x00000100 #define AVIIF_COMPRESSOR 0x0FFF0000 typedef struct _avioldindex { FOURCC fcc; DWORD cb; struct _avioldindex_entry { DWORD dwChunkId; DWORD dwFlags; DWORD dwOffset; DWORD dwSize; } aIndex[ANYSIZE_ARRAY]; } AVIOLDINDEX; typedef union _timecode { struct { WORD wFrameRate; WORD wFrameFract; LONG cFrames; } DUMMYSTRUCTNAME; DWORDLONG qw; } TIMECODE; #define TIMECODE_RATE_30DROP 0 /* flags for dwSMPTEflags member of TIMECODEDATA */ #define TIMECODE_SMPTE_BINARY_GROUP 0x07 #define TIMECODE_SMPTE_COLOR_FRAME 0x08 typedef struct _timecodedata { TIMECODE time; DWORD dwSMPTEflags; DWORD dwUser; } TIMECODEDATA; #define AVI_INDEX_OF_INDEXES 0x00 #define AVI_INDEX_OF_CHUNKS 0x01 #define AVI_INDEX_OF_TIMED_CHUNKS 0x02 #define AVI_INDEX_OF_SUB_2FIELD 0x03 #define AVI_INDEX_IS_DATA 0x80 #define AVI_INDEX_SUB_DEFAULT 0x00 #define AVI_INDEX_SUB_2FIELD 0x01 typedef struct _avimetaindex { FOURCC fcc; UINT cb; WORD wLongsPerEntry; BYTE bIndexSubType; BYTE bIndexType; DWORD nEntriesInUse; DWORD dwChunkId; DWORD dwReserved[3]; DWORD adwIndex[ANYSIZE_ARRAY]; } AVIMETAINDEX; #define ckidAVISUPERINDEX FCC('i','n','d','x') typedef struct _avisuperindex { FOURCC fcc; UINT cb; WORD wLongsPerEntry; BYTE bIndexSubType; BYTE bIndexType; DWORD nEntriesInUse; DWORD dwChunkId; DWORD dwReserved[3]; struct _avisuperindex_entry { DWORDLONG qwOffset; DWORD dwSize; DWORD dwDuration; } aIndex[ANYSIZE_ARRAY]; } AVISUPERINDEX; #define AVISTDINDEX_DELTAFRAME (0x80000000) #define AVISTDINDEX_SIZEMASK (~0x80000000) typedef struct _avistdindex_entry { DWORD dwOffset; DWORD dwSize; } AVISTDINDEX_ENTRY; typedef struct _avistdindex { FOURCC fcc; UINT cb; WORD wLongsPerEntry; BYTE bIndexSubType; BYTE bIndexType; DWORD nEntriesInUse; DWORD dwChunkId; DWORDLONG qwBaseOffset; DWORD dwReserved_3; AVISTDINDEX_ENTRY aIndex[ANYSIZE_ARRAY]; } AVISTDINDEX; typedef struct _avitimedindex_entry { DWORD dwOffset; DWORD dwSize; DWORD dwDuration; } AVITIMEDINDEX_ENTRY; typedef struct _avitimedindex { FOURCC fcc; UINT cb; WORD wLongsPerEntry; BYTE bIndexSubType; BYTE bIndexType; DWORD nEntriesInUse; DWORD dwChunkId; DWORDLONG qwBaseOffset; DWORD dwReserved_3; AVITIMEDINDEX_ENTRY aIndex[ANYSIZE_ARRAY]; /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */ } AVITIMEDINDEX; typedef struct _avitimecodeindex { FOURCC fcc; UINT cb; WORD wLongsPerEntry; BYTE bIndexSubType; BYTE bIndexType; DWORD nEntriesInUse; DWORD dwChunkId; DWORD dwReserved[3]; TIMECODEDATA aIndex[ANYSIZE_ARRAY]; } AVITIMECODEINDEX; typedef struct _avitcdlindex_entryA { DWORD dwTick; TIMECODE time; DWORD dwSMPTEflags; DWORD dwUser; CHAR szReelId[12]; } AVITCDLINDEX_ENTRYA; typedef struct _avitcdlindex_entryW { DWORD dwTick; TIMECODE time; DWORD dwSMPTEflags; DWORD dwUser; WCHAR szReelId[12]; } AVITCDLINDEX_ENTRYW; typedef struct _avitcdlindexA { FOURCC fcc; UINT cb; WORD wLongsPerEntry; BYTE bIndexSubType; BYTE bIndexType; DWORD nEntriesInUse; DWORD dwChunkId; DWORD dwReserved[3]; AVITCDLINDEX_ENTRYA aIndex[ANYSIZE_ARRAY]; /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */ } AVITCDLINDEXA; typedef struct _avitcdlindexW { FOURCC fcc; UINT cb; WORD wLongsPerEntry; BYTE bIndexSubType; BYTE bIndexType; DWORD nEntriesInUse; DWORD dwChunkId; DWORD dwReserved[3]; AVITCDLINDEX_ENTRYW aIndex[ANYSIZE_ARRAY]; /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */ } AVITCDLINDEXW; #define AVITCDLINDEX_ENTRY WINELIB_NAME_AW(AVITCDLINDEX_ENTRY) #define AVITCDLINDEX WINELIB_NAME_AW(AVITCDLINDEX) typedef struct _avifieldindex_chunk { FOURCC fcc; DWORD cb; WORD wLongsPerEntry; BYTE bIndexSubType; BYTE bIndexType; DWORD nEntriesInUse; DWORD dwChunkId; DWORDLONG qwBaseOffset; DWORD dwReserved3; struct _avifieldindex_entry { DWORD dwOffset; DWORD dwSize; DWORD dwOffsetField2; } aIndex[ANYSIZE_ARRAY]; } AVIFIELDINDEX, * PAVIFIELDINDEX; #include #endif /* AVIRIFF_H */ ================================================ FILE: wine/windows/avrt.h ================================================ /* * avrt definitions * * Copyright 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef _AVRT_ #define _AVRT_ #ifdef __cplusplus extern "C" { #endif typedef enum _AVRT_PRIORITY { AVRT_PRIORITY_LOW = -1, AVRT_PRIORITY_NORMAL, AVRT_PRIORITY_HIGH, AVRT_PRIORITY_CRITICAL } AVRT_PRIORITY, *PAVRT_PRIORITY; /* Windows compiler is more lax */ #define THREAD_ORDER_GROUP_INFINITE_TIMEOUT ((void*)((LONG_PTR)-1)) HANDLE WINAPI AvSetMmThreadCharacteristicsA(LPCSTR TaskName, LPDWORD TaskIndex); HANDLE WINAPI AvSetMmThreadCharacteristicsW(LPCWSTR TaskName, LPDWORD TaskIndex); #define AvSetMmThreadCharacteristics WINELIB_NAME_AW(AvSetMmThreadCharacteristics) HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex); HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex); #define AvSetMmMaxThreadCharacteristics WINELIB_NAME_AW(AvSetMmMaxThreadCharacteristics) BOOL WINAPI AvRevertMmThreadCharacteristics(HANDLE AvrtHandle); BOOL WINAPI AvSetMmThreadPriority(HANDLE AvrtHandle, AVRT_PRIORITY Priority); BOOL WINAPI AvRtCreateThreadOrderingGroup( PHANDLE Context, PLARGE_INTEGER Period, GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout); BOOL WINAPI AvRtCreateThreadOrderingGroupExA( PHANDLE Context, PLARGE_INTEGER Period, GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout, LPCSTR TaskName); BOOL WINAPI AvRtCreateThreadOrderingGroupExW( PHANDLE Context, PLARGE_INTEGER Period, GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout, LPCSTR TaskName); #define AvRtCreateThreadOrderingGroupEx WINELIB_NAME_AW(AvRtCreateThreadOrderingGroupEx) BOOL WINAPI AvRtJoinThreadOrderingGroup(PHANDLE Context, GUID *ThreadOrderingGuid, BOOL Before); BOOL WINAPI AvRtWaitOnThreadOrderingGroup(HANDLE Context); BOOL WINAPI AvRtLeaveThreadOrderingGroup(HANDLE Context); BOOL WINAPI AvRtDeleteThreadOrderingGroup(HANDLE Context); BOOL WINAPI AvQuerySystemResponsiveness(HANDLE AvrtHandle, PULONG SystemResponsivenessValue); #ifdef __cplusplus } #endif #endif /*_AVRT_*/ ================================================ FILE: wine/windows/axcore.idl ================================================ /* * Copyright (C) 2002 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif #define CHARS_IN_GUID 39 cpp_quote("#define CHARS_IN_GUID 39") /* GetTimeFormat is defined in winnls.h as * either the W or A suffixed version */ cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetTimeFormat") cpp_quote("#endif") typedef struct _AMMediaType { GUID majortype; GUID subtype; BOOL bFixedSizeSamples; BOOL bTemporalCompression; ULONG lSampleSize; GUID formattype; IUnknown * pUnk; ULONG cbFormat; [size_is(cbFormat)] BYTE * pbFormat; } AM_MEDIA_TYPE; typedef enum _PinDirection { PINDIR_INPUT, PINDIR_OUTPUT } PIN_DIRECTION; #define MAX_PIN_NAME 128 #define MAX_FILTER_NAME 128 cpp_quote("#define MAX_PIN_NAME 128") cpp_quote("#define MAX_FILTER_NAME 128") cpp_quote("#ifndef REFERENCE_TIME_DEFINED") cpp_quote("#define REFERENCE_TIME_DEFINED") typedef LONGLONG REFERENCE_TIME; cpp_quote("#endif") cpp_quote("#ifndef REFTIME_DEFINED") cpp_quote("#define REFTIME_DEFINED") typedef DOUBLE REFTIME; cpp_quote("#endif") typedef DWORD_PTR HSEMAPHORE; typedef DWORD_PTR HEVENT; typedef struct _AllocatorProperties { long cBuffers; long cbBuffer; long cbAlign; long cbPrefix; } ALLOCATOR_PROPERTIES; interface IAMovieSetup; interface IEnumFilters; interface IEnumMediaTypes; interface IEnumPins; interface IBaseFilter; interface IFilterGraph; interface IMediaFilter; interface IMediaSample; interface IMemAllocator; interface IMemAllocatorCallbackTemp; interface IMemAllocatorNotifyCallbackTemp; interface IMemInputPin; interface IPin; interface IReferenceClock; [ object, uuid(56a86891-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IPin : IUnknown { typedef struct _PinInfo { IBaseFilter *pFilter; PIN_DIRECTION dir; WCHAR achName[MAX_PIN_NAME]; } PIN_INFO; HRESULT Connect( [in] IPin * pReceivePin, [in] const AM_MEDIA_TYPE * pmt); HRESULT ReceiveConnection( [in] IPin * pConnector, [in] const AM_MEDIA_TYPE *pmt); HRESULT Disconnect(void); HRESULT ConnectedTo( [out] IPin **pPin); HRESULT ConnectionMediaType( [out] AM_MEDIA_TYPE *pmt); HRESULT QueryPinInfo( [out] PIN_INFO * pInfo); HRESULT QueryDirection( [out] PIN_DIRECTION *pPinDir); HRESULT QueryId( [out] LPWSTR * Id); HRESULT QueryAccept( [in] const AM_MEDIA_TYPE *pmt); HRESULT EnumMediaTypes( [out] IEnumMediaTypes **ppEnum); HRESULT QueryInternalConnections( [out] IPin* *apPin, [in, out] ULONG *nPin); HRESULT EndOfStream(void); HRESULT BeginFlush(void); HRESULT EndFlush(void); HRESULT NewSegment( [in] REFERENCE_TIME tStart, [in] REFERENCE_TIME tStop, [in] double dRate); } typedef IPin *PPIN; [ object, uuid(56a86892-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IEnumPins : IUnknown { HRESULT Next( [in] ULONG cPins, [out, size_is(cPins)] IPin ** ppPins, [out] ULONG * pcFetched); HRESULT Skip( [in] ULONG cPins); HRESULT Reset(void); HRESULT Clone( [out] IEnumPins **ppEnum); } typedef IEnumPins *PENUMPINS; [ object, uuid(89c31040-846b-11ce-97d3-00aa0055595a), pointer_default(unique) ] interface IEnumMediaTypes : IUnknown { HRESULT Next( [in] ULONG cMediaTypes, [out, size_is(cMediaTypes)] AM_MEDIA_TYPE ** ppMediaTypes, [out] ULONG * pcFetched ); HRESULT Skip( [in] ULONG cMediaTypes); HRESULT Reset(void); HRESULT Clone( [out] IEnumMediaTypes **ppEnum ); } typedef IEnumMediaTypes *PENUMMEDIATYPES; [ object, uuid(56a8689f-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IFilterGraph : IUnknown { HRESULT AddFilter( [in] IBaseFilter * pFilter, [in, string] LPCWSTR pName); HRESULT RemoveFilter( [in] IBaseFilter * pFilter); HRESULT EnumFilters( [out] IEnumFilters **ppEnum); HRESULT FindFilterByName( [in, string] LPCWSTR pName, [out] IBaseFilter ** ppFilter); HRESULT ConnectDirect( [in] IPin * ppinOut, [in] IPin * ppinIn, [in, unique] const AM_MEDIA_TYPE* pmt); HRESULT Reconnect( [in] IPin * ppin); HRESULT Disconnect( [in] IPin * ppin); HRESULT SetDefaultSyncSource(void); } typedef IFilterGraph *PFILTERGRAPH; [ object, uuid(56a86893-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IEnumFilters : IUnknown { HRESULT Next( [in] ULONG cFilters, [out] IBaseFilter ** ppFilter, [out] ULONG * pcFetched); HRESULT Skip( [in] ULONG cFilters); HRESULT Reset(void); HRESULT Clone( [out] IEnumFilters **ppEnum); } typedef IEnumFilters *PENUMFILTERS; [ object, uuid(56a86899-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMediaFilter : IPersist { typedef enum _FilterState { State_Stopped, State_Paused, State_Running } FILTER_STATE; HRESULT Stop(void); HRESULT Pause(void); HRESULT Run(REFERENCE_TIME tStart); HRESULT GetState( [in] DWORD dwMilliSecsTimeout, [out] FILTER_STATE *State); HRESULT SetSyncSource( [in] IReferenceClock * pClock); HRESULT GetSyncSource( [out] IReferenceClock ** pClock); } typedef IMediaFilter *PMEDIAFILTER; [ object, uuid(56a86895-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IBaseFilter : IMediaFilter { typedef struct _FilterInfo { WCHAR achName[MAX_FILTER_NAME]; IFilterGraph * pGraph; } FILTER_INFO; HRESULT EnumPins( [out] IEnumPins ** ppEnum); HRESULT FindPin( [in, string] LPCWSTR Id, [out] IPin ** ppPin); HRESULT QueryFilterInfo( [out] FILTER_INFO * pInfo); HRESULT JoinFilterGraph( [in] IFilterGraph * pGraph, [in, string] LPCWSTR pName); HRESULT QueryVendorInfo( [out, string] LPWSTR* pVendorInfo); } typedef IBaseFilter *PFILTER; [ object, uuid(56a86897-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IReferenceClock : IUnknown { HRESULT GetTime( [out] REFERENCE_TIME *pTime); HRESULT AdviseTime( [in] REFERENCE_TIME baseTime, [in] REFERENCE_TIME streamTime, [in] HEVENT hEvent, [out] DWORD_PTR * pdwAdviseCookie); HRESULT AdvisePeriodic( [in] REFERENCE_TIME startTime, [in] REFERENCE_TIME periodTime, [in] HSEMAPHORE hSemaphore, [out] DWORD_PTR * pdwAdviseCookie); HRESULT Unadvise( [in] DWORD_PTR dwAdviseCookie); } typedef IReferenceClock *PREFERENCECLOCK; /* [ object, uuid(36b73885-c2c8-11cf-8b46-00805f6cef60), pointer_default(unique) ] interface IReferenceClock2 : IReferenceClock { } typedef IReferenceClock2 *PREFERENCECLOCK2; */ [ local, object, uuid(56a8689a-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMediaSample : IUnknown { HRESULT GetPointer([out] BYTE ** ppBuffer); long GetSize(void); HRESULT GetTime( [out] REFERENCE_TIME * pTimeStart, [out] REFERENCE_TIME * pTimeEnd); HRESULT SetTime( [in] REFERENCE_TIME * pTimeStart, [in] REFERENCE_TIME * pTimeEnd); HRESULT IsSyncPoint(void); HRESULT SetSyncPoint(BOOL bIsSyncPoint); HRESULT IsPreroll(void); HRESULT SetPreroll(BOOL bIsPreroll); LONG GetActualDataLength(void); HRESULT SetActualDataLength(LONG length); HRESULT GetMediaType(AM_MEDIA_TYPE **ppMediaType); HRESULT SetMediaType(AM_MEDIA_TYPE *pMediaType); HRESULT IsDiscontinuity(void); HRESULT SetDiscontinuity(BOOL bDiscontinuity); HRESULT GetMediaTime( [out] LONGLONG * pTimeStart, [out] LONGLONG * pTimeEnd); HRESULT SetMediaTime( [in] LONGLONG * pTimeStart, [in] LONGLONG * pTimeEnd); } typedef IMediaSample *PMEDIASAMPLE; enum tagAM_SAMPLE_PROPERTY_FLAGS { AM_SAMPLE_SPLICEPOINT = 0x01, AM_SAMPLE_PREROLL = 0x02, AM_SAMPLE_DATADISCONTINUITY = 0x04, AM_SAMPLE_TYPECHANGED = 0x08, AM_SAMPLE_TIMEVALID = 0x10, AM_SAMPLE_TIMEDISCONTINUITY = 0x40, AM_SAMPLE_FLUSH_ON_PAUSE = 0x80, AM_SAMPLE_STOPVALID = 0x100, AM_SAMPLE_ENDOFSTREAM = 0x200, AM_STREAM_MEDIA = 0, AM_STREAM_CONTROL = 1 }; typedef struct tagAM_SAMPLE2_PROPERTIES { DWORD cbData; DWORD dwTypeSpecificFlags; DWORD dwSampleFlags; LONG lActual; REFERENCE_TIME tStart; REFERENCE_TIME tStop; DWORD dwStreamId; AM_MEDIA_TYPE *pMediaType; BYTE *pbBuffer; LONG cbBuffer; } AM_SAMPLE2_PROPERTIES; [ local, object, uuid(36b73884-c2c8-11cf-8b46-00805f6cef60), pointer_default(unique) ] interface IMediaSample2 : IMediaSample { HRESULT GetProperties( [in] DWORD cbProperties, [out, size_is(cbProperties)] BYTE * pbProperties ); HRESULT SetProperties( [in] DWORD cbProperties, [in, size_is(cbProperties)] const BYTE * pbProperties ); } typedef IMediaSample2 *PMEDIASAMPLE2; #define AM_GBF_PREVFRAMESKIPPED 1 #define AM_GBF_NOTASYNCPOINT 2 cpp_quote("#define AM_GBF_PREVFRAMESKIPPED 1") cpp_quote("#define AM_GBF_NOTASYNCPOINT 2") cpp_quote("#define AM_GBF_NOWAIT 4") cpp_quote("#define AM_GBF_NODDSURFACELOCK 8") [ object, uuid(56a8689c-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMemAllocator : IUnknown { HRESULT SetProperties( [in] ALLOCATOR_PROPERTIES* pRequest, [out] ALLOCATOR_PROPERTIES* pActual); HRESULT GetProperties( [out] ALLOCATOR_PROPERTIES* pProps); HRESULT Commit(void); HRESULT Decommit(void); HRESULT GetBuffer( [out] IMediaSample **ppBuffer, [in] REFERENCE_TIME * pStartTime, [in] REFERENCE_TIME * pEndTime, [in] DWORD dwFlags); HRESULT ReleaseBuffer( [in] IMediaSample *pBuffer); } typedef IMemAllocator *PMEMALLOCATOR; [ object, uuid(379a0cf0-c1de-11d2-abf5-00a0c905f375), pointer_default(unique) ] interface IMemAllocatorCallbackTemp : IMemAllocator { HRESULT SetNotify( [in] IMemAllocatorNotifyCallbackTemp *pNotify); HRESULT GetFreeCount( [out] LONG *plBuffersFree); } [ object, uuid(92980b30-c1de-11d2-abf5-00a0c905f375), pointer_default(unique) ] interface IMemAllocatorNotifyCallbackTemp : IUnknown { HRESULT NotifyRelease(); } [ object, uuid(56a8689d-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMemInputPin : IUnknown { HRESULT GetAllocator( [out] IMemAllocator ** ppAllocator); HRESULT NotifyAllocator( [in] IMemAllocator * pAllocator, [in] BOOL bReadOnly); HRESULT GetAllocatorRequirements( [out] ALLOCATOR_PROPERTIES*pProps ); HRESULT Receive( [in] IMediaSample * pSample); HRESULT ReceiveMultiple( [in, size_is(nSamples)] IMediaSample **pSamples, [in] long nSamples, [out] long *nSamplesProcessed); HRESULT ReceiveCanBlock(); } typedef IMemInputPin *PMEMINPUTPIN; [ object, uuid(a3d8cec0-7e5a-11cf-bbc5-00805f6cef20), pointer_default(unique) ] interface IAMovieSetup : IUnknown { HRESULT Register( ); HRESULT Unregister( ); } typedef IAMovieSetup *PAMOVIESETUP; typedef enum AM_SEEKING_SeekingFlags { AM_SEEKING_NoPositioning = 0x00, AM_SEEKING_AbsolutePositioning = 0x01, AM_SEEKING_RelativePositioning = 0x02, AM_SEEKING_IncrementalPositioning = 0x03, AM_SEEKING_PositioningBitsMask = 0x03, AM_SEEKING_SeekToKeyFrame = 0x04, AM_SEEKING_ReturnTime = 0x08, AM_SEEKING_Segment = 0x10, AM_SEEKING_NoFlush = 0x20 } AM_SEEKING_SEEKING_FLAGS; typedef enum AM_SEEKING_SeekingCapabilities { AM_SEEKING_CanSeekAbsolute = 0x001, AM_SEEKING_CanSeekForwards = 0x002, AM_SEEKING_CanSeekBackwards = 0x004, AM_SEEKING_CanGetCurrentPos = 0x008, AM_SEEKING_CanGetStopPos = 0x010, AM_SEEKING_CanGetDuration = 0x020, AM_SEEKING_CanPlayBackwards = 0x040, AM_SEEKING_CanDoSegments = 0x080, AM_SEEKING_Source = 0x100 } AM_SEEKING_SEEKING_CAPABILITIES; [ object, uuid(36b73880-c2c8-11cf-8b46-00805f6cef60), pointer_default(unique) ] interface IMediaSeeking : IUnknown { HRESULT GetCapabilities( [out] DWORD * pCapabilities ); HRESULT CheckCapabilities( [in,out] DWORD * pCapabilities ); HRESULT IsFormatSupported([in] const GUID * pFormat); HRESULT QueryPreferredFormat([out] GUID * pFormat); HRESULT GetTimeFormat([out] GUID *pFormat); HRESULT IsUsingTimeFormat([in] const GUID * pFormat); HRESULT SetTimeFormat([in] const GUID * pFormat); HRESULT GetDuration([out] LONGLONG *pDuration); HRESULT GetStopPosition([out] LONGLONG *pStop); HRESULT GetCurrentPosition([out] LONGLONG *pCurrent); HRESULT ConvertTimeFormat([out] LONGLONG * pTarget, [in] const GUID * pTargetFormat, [in] LONGLONG Source, [in] const GUID * pSourceFormat ); HRESULT SetPositions( [in,out] LONGLONG * pCurrent, [in] DWORD dwCurrentFlags, [in,out] LONGLONG * pStop, [in] DWORD dwStopFlags); HRESULT GetPositions( [out] LONGLONG * pCurrent, [out] LONGLONG * pStop); HRESULT GetAvailable( [out] LONGLONG * pEarliest, [out] LONGLONG * pLatest); HRESULT SetRate([in] double dRate); HRESULT GetRate([out] double * pdRate); HRESULT GetPreroll([out] LONGLONG * pllPreroll); } typedef IMediaSeeking *PMEDIASEEKING; enum tagAM_MEDIAEVENT_FLAGS { AM_MEDIAEVENT_NONOTIFY = 0x01 }; enum _AMSTREAMSELECTINFOFLAGS { AMSTREAMSELECTINFO_ENABLED = 0x1, AMSTREAMSELECTINFO_EXCLUSIVE = 0x2 }; enum _AMSTREAMSELECTENABLEFLAGS { AMSTREAMSELECTENABLE_ENABLE = 0x1, AMSTREAMSELECTENABLE_ENABLEALL = 0x2 }; [ object, uuid(c1960960-17f5-11d1-abe1-00a0c905f375), pointer_default(unique) ] interface IAMStreamSelect : IUnknown { HRESULT Count( [out] DWORD *streams); HRESULT Info( [in] long index, [out] AM_MEDIA_TYPE **media_type, [out] DWORD *flags, [out] LCID *lcid, [out] DWORD *group, [out] WCHAR **name, [out] IUnknown **object, [out] IUnknown **unknown); HRESULT Enable( [in] long index, [in] DWORD flags); } typedef IAMStreamSelect *PAMSTREAMSELECT; ================================================ FILE: wine/windows/axextend.idl ================================================ /* * Copyright (C) 2002 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif interface IAMAnalogVideoDecoder; interface IAMAnalogVideoEncoder; interface IAMAudioInputMixer; interface IAMAudioRendererStats; interface IAMBufferNegotiation; interface IAMCameraControl; interface IAMCertifiedOutputProtection; interface IAMClockSlave; interface IAMCopyCaptureFileProgress; interface IAMCrossbar; interface IAMDevMemoryAllocator; interface IAMDevMemoryControl; interface IAMDroppedFrames; interface IAMExtDevice; interface IAMExtTransport; interface IAMGraphStreams; interface IAMLatency; interface IAMOpenProgress; interface IAMOverlayFX; interface IAMPhysicalPinInfo; interface IAMPushSource; interface IAMStreamConfig; interface IAMTimecodeDisplay; interface IAMTimecodeGenerator; interface IAMTimecodeReader; interface IAMTVTuner; interface IAMVfwCaptureDialogs; interface IAMVfwCompressDialogs; interface IAMVideoCompression; interface IAMVideoDecimationProperties; interface IAMVideoProcAmp; interface IAMGraphBuilderCallback; interface ICaptureGraphBuilder; interface ICaptureGraphBuilder2; interface IConfigAviMux; interface IConfigInterleaving; interface IDecimateVideoImage; interface IDrawVideoImage; interface IEnumRegFilters; interface IEnumStreamIdMap; interface IFileSourceFilter; interface IFileSinkFilter; interface IFileSinkFilter2; interface IFilterMapper; interface IFilterMapper2; interface IGraphBuilder; interface IKsPropertySet; interface IMediaEventSink; interface IMpeg2Demultiplexer; interface IMPEG2StreamIdMap; interface IOverlay; interface IOverlayNotify; interface IOverlayNotify2; interface IQualityControl; interface ISeekingPassThru; typedef struct { CLSID Clsid; LPWSTR Name; } REGFILTER; [ object, uuid(56a868a4-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IEnumRegFilters : IUnknown { HRESULT Next ( [in] ULONG cFilters, [out] REGFILTER ** apRegFilter, [out] ULONG * pcFetched ); HRESULT Skip( [in] ULONG cFilters ); HRESULT Reset(void); HRESULT Clone( [out] IEnumRegFilters **ppEnum ); } typedef IEnumRegFilters *PENUMREGFILTERS; [ object, uuid(56a868a3-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IFilterMapper : IUnknown { enum { MERIT_PREFERRED = 0x800000, MERIT_NORMAL = 0x600000, MERIT_UNLIKELY = 0x400000, MERIT_DO_NOT_USE = 0x200000, MERIT_SW_COMPRESSOR = 0x100000, MERIT_HW_COMPRESSOR = 0x100050 }; HRESULT RegisterFilter ( [in] CLSID clsid, [in] LPCWSTR Name, [in] DWORD dwMerit ); HRESULT RegisterFilterInstance ( [in] CLSID clsid, [in] LPCWSTR Name, [out] CLSID *MRId ); HRESULT RegisterPin ( [in] CLSID Filter, [in] LPCWSTR Name, [in] BOOL bRendered, [in] BOOL bOutput, [in] BOOL bZero, [in] BOOL bMany, [in] CLSID ConnectsToFilter, [in] LPCWSTR ConnectsToPin ); HRESULT RegisterPinType ( [in] CLSID clsFilter, [in] LPCWSTR strName, [in] CLSID clsMajorType, [in] CLSID clsSubType ); HRESULT UnregisterFilter ( [in] CLSID Filter ); HRESULT UnregisterFilterInstance ( [in] CLSID MRId ); HRESULT UnregisterPin ( [in] CLSID Filter, [in] LPCWSTR Name ); HRESULT EnumMatchingFilters ( [out] IEnumRegFilters **ppEnum, [in] DWORD dwMerit, [in] BOOL bInputNeeded, [in] CLSID clsInMaj, [in] CLSID clsInSub, [in] BOOL bRender, [in] BOOL bOutputNeeded, [in] CLSID clsOutMaj, [in] CLSID clsOutSub ); } typedef struct { const CLSID * clsMajorType; const CLSID * clsMinorType; } REGPINTYPES; typedef struct { LPWSTR strName; BOOL bRendered; BOOL bOutput; BOOL bZero; BOOL bMany; const CLSID * clsConnectsToFilter; const WCHAR * strConnectsToPin; UINT nMediaTypes; const REGPINTYPES * lpMediaType; } REGFILTERPINS; typedef struct { CLSID clsMedium; DWORD dw1; DWORD dw2; } REGPINMEDIUM; enum { REG_PINFLAG_B_ZERO = 0x1, REG_PINFLAG_B_RENDERER = 0x2, REG_PINFLAG_B_MANY = 0x4, REG_PINFLAG_B_OUTPUT = 0x8 }; typedef struct { DWORD dwFlags; UINT cInstances; UINT nMediaTypes; [size_is(nMediaTypes)] const REGPINTYPES * lpMediaType; UINT nMediums; [size_is(nMediums)] const REGPINMEDIUM *lpMedium; const CLSID *clsPinCategory; } REGFILTERPINS2; typedef struct { DWORD dwVersion; DWORD dwMerit; [switch_is(dwVersion)] [switch_type(DWORD)] union { [case(1)] struct { ULONG cPins; [size_is(cPins)] const REGFILTERPINS *rgPins; }; [case(2)] struct { ULONG cPins2; [size_is(cPins2)] const REGFILTERPINS2 *rgPins2; }; [default] ; }; } REGFILTER2; [ object, uuid(b79bb0b0-33c1-11d1-abe1-00a0c905f375), pointer_default(unique) ] interface IFilterMapper2 : IUnknown { HRESULT CreateCategory ( [in] REFCLSID clsidCategory, [in] DWORD dwCategoryMerit, [in] LPCWSTR Description ); HRESULT UnregisterFilter ( [in] const CLSID *pclsidCategory, [in] LPCOLESTR szInstance, [in] REFCLSID Filter ); HRESULT RegisterFilter ( [in] REFCLSID clsidFilter, [in] LPCWSTR Name, [in, out] IMoniker **ppMoniker, [in] const CLSID *pclsidCategory, [in] LPCOLESTR szInstance, [in] const REGFILTER2 *prf2 ); HRESULT EnumMatchingFilters ( [out] IEnumMoniker **ppEnum, [in] DWORD dwFlags, [in] BOOL bExactMatch, [in] DWORD dwMerit, [in] BOOL bInputNeeded, [in] DWORD cInputTypes, [size_is(cInputTypes*2)] const GUID *pInputTypes, [in] const REGPINMEDIUM *pMedIn, [in] const CLSID *pPinCategoryIn, [in] BOOL bRender, [in] BOOL bOutputNeeded, [in] DWORD cOutputTypes, [size_is(cOutputTypes*2)] const GUID *pOutputTypes, [in] const REGPINMEDIUM *pMedOut, [in] const CLSID *pPinCategoryOut ); } [ object, uuid(b79bb0b1-33c1-11d1-abe1-00a0c905f375), pointer_default(unique) ] interface IFilterMapper3 : IFilterMapper2 { HRESULT GetICreateDevEnum( [out] ICreateDevEnum **ppEnum ); } typedef enum tagQualityMessageType { Famine, Flood } QualityMessageType; typedef struct tagQuality { QualityMessageType Type; LONG Proportion; REFERENCE_TIME Late; REFERENCE_TIME TimeStamp; } Quality; typedef IQualityControl *PQUALITYCONTROL; [ object, uuid(56a868a5-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IQualityControl : IUnknown { HRESULT Notify ( [in] IBaseFilter * pSelf, [in] Quality q ); HRESULT SetSink ( [in] IQualityControl * piqc ); } enum { CK_NOCOLORKEY = 0x0, CK_INDEX = 0x1, CK_RGB = 0x2 }; typedef struct tagCOLORKEY { DWORD KeyType; DWORD PaletteIndex; COLORREF LowColorValue; COLORREF HighColorValue; } COLORKEY; enum { ADVISE_NONE = 0x0, ADVISE_CLIPPING = 0x1, ADVISE_PALETTE = 0x2, ADVISE_COLORKEY = 0x4, ADVISE_POSITION = 0x8, ADVISE_DISPLAY_CHANGE = 0x10 }; const DWORD ADVISE_ALL = ADVISE_CLIPPING | ADVISE_PALETTE | ADVISE_COLORKEY | ADVISE_POSITION; const DWORD ADVISE_ALL2 = ADVISE_ALL | ADVISE_DISPLAY_CHANGE; cpp_quote("#ifndef _WINGDI_") /* already defined in wingdi.h, but needed for WIDL */ typedef struct _RGNDATAHEADER { DWORD dwSize; DWORD iType; DWORD nCount; DWORD nRgnSize; RECT rcBound; } RGNDATAHEADER; typedef struct _RGNDATA { RGNDATAHEADER rdh; char Buffer[1]; } RGNDATA; cpp_quote("#endif /* _WINGDI_ */") [ object, local, uuid(56a868a0-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IOverlayNotify : IUnknown { HRESULT OnPaletteChange( [in] DWORD dwColors, [in] const PALETTEENTRY *pPalette); HRESULT OnClipChange( [in] const RECT *pSourceRect, [in] const RECT *pDestinationRect, [in] const RGNDATA *pRgnData); HRESULT OnColorKeyChange([in] const COLORKEY *pColorKey); HRESULT OnPositionChange([in] const RECT *pSourceRect, [in] const RECT *pDestinationRect); } typedef IOverlayNotify *POVERLAYNOTIFY; cpp_quote("#if 0") typedef HANDLE HMONITOR; cpp_quote("#endif /* 0 */") [ object, local, uuid(680EFA10-D535-11D1-87C8-00A0C9223196), pointer_default(unique) ] interface IOverlayNotify2 : IOverlayNotify { HRESULT OnDisplayChange( HMONITOR hMonitor); } typedef IOverlayNotify2 *POVERLAYNOTIFY2; [ object, local, uuid(56a868a1-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IOverlay : IUnknown { HRESULT GetPalette( [out] DWORD *pdwColors, [out] PALETTEENTRY **ppPalette); HRESULT SetPalette( [in] DWORD dwColors, [in] PALETTEENTRY *pPalette); HRESULT GetDefaultColorKey([out] COLORKEY *pColorKey); HRESULT GetColorKey([out] COLORKEY *pColorKey); HRESULT SetColorKey([in,out] COLORKEY *pColorKey); HRESULT GetWindowHandle([out] HWND *pHwnd); HRESULT GetClipList([out] RECT *pSourceRect, [out] RECT *pDestinationRect, [out] RGNDATA **ppRgnData); HRESULT GetVideoPosition([out] RECT *pSourceRect, [out] RECT *pDestinationRect); HRESULT Advise( [in] IOverlayNotify *pOverlayNotify, [in] DWORD dwInterests); HRESULT Unadvise(); } typedef IOverlay *POVERLAY; [ object, uuid(56a868a2-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMediaEventSink : IUnknown { HRESULT Notify( [in] LONG EventCode, [in] LONG_PTR EventParam1, [in] LONG_PTR EventParam2 ); } typedef IMediaEventSink *PMEDIAEVENTSINK; [ object, uuid(56a868a6-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IFileSourceFilter : IUnknown { HRESULT Load( [in] LPCOLESTR pszFileName, [in, unique] const AM_MEDIA_TYPE *pmt ); HRESULT GetCurFile( [out] LPOLESTR *ppszFileName, [out] AM_MEDIA_TYPE *pmt ); } typedef IFileSourceFilter *PFILTERFILESOURCE; [ object, uuid(a2104830-7c70-11cf-8bce-00aa00a3f1a6), pointer_default(unique) ] interface IFileSinkFilter : IUnknown { HRESULT SetFileName( [in] LPCOLESTR pszFileName, [in, unique] const AM_MEDIA_TYPE *pmt ); HRESULT GetCurFile( [out] LPOLESTR *ppszFileName, [out] AM_MEDIA_TYPE *pmt ); } typedef IFileSinkFilter *PFILTERFILESINK; [ object, uuid(00855B90-CE1B-11d0-BD4F-00A0C911CE86), pointer_default(unique) ] interface IFileSinkFilter2 : IFileSinkFilter { HRESULT SetMode( [in] DWORD dwFlags ); HRESULT GetMode( [out] DWORD *pdwFlags ); } typedef IFileSinkFilter2 *PFILESINKFILTER2; typedef enum { AM_FILE_OVERWRITE = 0x00000001, } AM_FILESINK_FLAGS; [ object, uuid(56a868a9-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IGraphBuilder : IFilterGraph { HRESULT Connect ( [in] IPin * ppinOut, [in] IPin * ppinIn ); HRESULT Render ( [in] IPin * ppinOut ); HRESULT RenderFile ( [in] LPCWSTR lpcwstrFile, [in, unique] LPCWSTR lpcwstrPlayList ); HRESULT AddSourceFilter ( [in] LPCWSTR lpcwstrFileName, [in, unique] LPCWSTR lpcwstrFilterName, [out] IBaseFilter* *ppFilter ); HRESULT SetLogFile ( [in] DWORD_PTR hFile ); HRESULT Abort(); HRESULT ShouldOperationContinue(); } [ object, uuid(bf87b6e0-8c27-11d0-b3f0-00aa003761c5), pointer_default(unique) ] interface ICaptureGraphBuilder : IUnknown { HRESULT SetFiltergraph( [in] IGraphBuilder *pfg); HRESULT GetFiltergraph( [out] IGraphBuilder **ppfg); HRESULT SetOutputFileName( [in] const GUID *pType, [in] LPCOLESTR lpstrFile, [out] IBaseFilter **ppf, [out] IFileSinkFilter **ppSink); [local] HRESULT FindInterface( [in, unique] const GUID *pCategory, [in] IBaseFilter *pf, [in] REFIID riid, [out] void **ppint); [call_as(FindInterface)] HRESULT RemoteFindInterface( [in, unique] const GUID *pCategory, [in] IBaseFilter *pf, [in] REFIID riid, [out] IUnknown **ppint); HRESULT RenderStream( [in] const GUID *pCategory, [in] IUnknown *pSource, [in] IBaseFilter *pfCompressor, [in] IBaseFilter *pfRenderer); HRESULT ControlStream( [in] const GUID *pCategory, [in] IBaseFilter *pFilter, [in] REFERENCE_TIME *pstart, [in] REFERENCE_TIME *pstop, [in] WORD wStartCookie, [in] WORD wStopCookie); HRESULT AllocCapFile( [in] LPCOLESTR lpstr, [in] DWORDLONG dwlSize); HRESULT CopyCaptureFile( [in] LPOLESTR lpwstrOld, [in] LPOLESTR lpwstrNew, [in] int fAllowEscAbort, [in] IAMCopyCaptureFileProgress *pCallback); } [ object, uuid(670d1d20-a068-11d0-b3f0-00aa003761c5), pointer_default(unique) ] interface IAMCopyCaptureFileProgress : IUnknown { HRESULT Progress( [in] int iProgress); } [ object, uuid(93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D), pointer_default(unique) ] interface ICaptureGraphBuilder2 : IUnknown { HRESULT SetFiltergraph( [in] IGraphBuilder *pfg); HRESULT GetFiltergraph( [out] IGraphBuilder **ppfg); HRESULT SetOutputFileName( [in] const GUID *pType, [in] LPCOLESTR lpstrFile, [out] IBaseFilter **ppf, [out] IFileSinkFilter **ppSink); [local] HRESULT FindInterface( [in] const GUID *pCategory, [in] const GUID *pType, [in] IBaseFilter *pf, [in] REFIID riid, [out] void **ppint); [call_as(FindInterface)] HRESULT RemoteFindInterface( [in] const GUID *pCategory, [in] const GUID *pType, [in] IBaseFilter *pf, [in] REFIID riid, [out] IUnknown **ppint); HRESULT RenderStream( [in] const GUID *pCategory, [in] const GUID *pType, [in] IUnknown *pSource, [in] IBaseFilter *pfCompressor, [in] IBaseFilter *pfRenderer); HRESULT ControlStream( [in] const GUID *pCategory, [in] const GUID *pType, [in] IBaseFilter *pFilter, [in] REFERENCE_TIME *pstart, [in] REFERENCE_TIME *pstop, [in] WORD wStartCookie, [in] WORD wStopCookie); HRESULT AllocCapFile( [in] LPCOLESTR lpstr, [in] DWORDLONG dwlSize); HRESULT CopyCaptureFile( [in] LPOLESTR lpwstrOld, [in] LPOLESTR lpwstrNew, [in] int fAllowEscAbort, [in] IAMCopyCaptureFileProgress *pCallback); HRESULT FindPin( [in] IUnknown *pSource, [in] PIN_DIRECTION pindir, [in] const GUID *pCategory, [in] const GUID *pType, [in] BOOL fUnconnected, [in] int num, [out] IPin **ppPin); } [ local, object, uuid(5acd6aa0-f482-11ce-8b67-00aa00a3f1a6), pointer_default(unique) ] interface IConfigAviMux : IUnknown { HRESULT SetMasterStream( [in] LONG iStream); HRESULT GetMasterStream( [out] LONG *pStream); HRESULT SetOutputCompatibilityIndex( [in] BOOL fOldIndex); HRESULT GetOutputCompatibilityIndex( [out] BOOL *pfOldIndex); } [ local, object, uuid(bee3d220-157b-11d0-bd23-00a0c911ce86), pointer_default(unique) ] interface IConfigInterleaving : IUnknown { typedef enum InterleavingMode { INTERLEAVE_NONE, INTERLEAVE_CAPTURE, INTERLEAVE_FULL, INTERLEAVE_NONE_BUFFERED } InterleavingMode; HRESULT put_Mode( [in] InterleavingMode mode); HRESULT get_Mode( [out] InterleavingMode *pMode); HRESULT put_Interleaving( [in] const REFERENCE_TIME *prtInterleave, [in] const REFERENCE_TIME *prtPreroll); HRESULT get_Interleaving( [out] REFERENCE_TIME *prtInterleave, [out] REFERENCE_TIME *prtPreroll); } [ local, object, uuid(9fd52741-176d-4b36-8f51-ca8f933223be), pointer_default(unique) ] interface IAMClockSlave : IUnknown { HRESULT SetErrorTolerance( [in] DWORD dwTolerance); HRESULT GetErrorTolerance( [out] DWORD *pdwTolerance); } typedef struct _AMCOPPSignature { BYTE Signature[256]; } AMCOPPSignature; typedef struct _AMCOPPCommand { GUID macKDI; GUID guidCommandID; DWORD dwSequence; DWORD bSizeData; BYTE CommandData[4056]; } AMCOPPCommand, *LPAMCOPPCommand; typedef struct _AMCOPPStatusInput { GUID rApp; GUID guidStatusRequestID; DWORD dwSequence; DWORD cbSizeData; BYTE StatusData[4056]; } AMCOPPStatusInput, *LPAMCOPPStatusInput; typedef struct _AMCOPPStatusOutput { GUID macKDI; DWORD cbSizeData; BYTE COPPStatus[4076]; } AMCOPPStatusOutput, *LPAMCOPPStatusOutput; [ local, object, uuid(6feded3e-0ff1-4901-a2f1-43f7012c8515), pointer_default(unique) ] interface IAMCertifiedOutputProtection : IUnknown { HRESULT KeyExchange ( [out] GUID* pRandom, [out] BYTE** VarLenCertGH, [out] DWORD* pdwLengthCertGH); HRESULT SessionSequenceStart( [in] AMCOPPSignature* pSig); HRESULT ProtectionCommand( [in] const AMCOPPCommand* cmd); HRESULT ProtectionStatus( [in] const AMCOPPStatusInput* pStatusInput, [out] AMCOPPStatusOutput* pStatusOutput); } enum _AM_RENSDEREXFLAGS { AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x01 }; [ object, uuid(36b73882-c2c8-11cf-8b46-00805f6cef60), pointer_default(unique) ] interface IFilterGraph2: IGraphBuilder { HRESULT AddSourceFilterForMoniker( [in] IMoniker *pMoniker, [in] IBindCtx *pCtx, [in, unique] LPCWSTR lpcwstrFilterName, [out] IBaseFilter **ppFilter ); HRESULT ReconnectEx ( [in] IPin * ppin, [in, unique] const AM_MEDIA_TYPE *pmt ); HRESULT RenderEx( [in] IPin *pPinOut, [in] DWORD dwFlags, [in, out] DWORD *pvContext ); } [ object, local, uuid(56a868bf-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IStreamBuilder : IUnknown { HRESULT Render ( [in] IPin * ppinOut, [in] IGraphBuilder * pGraph ); HRESULT Backout ( [in] IPin * ppinOut, [in] IGraphBuilder * pGraph ); } /***************************************************************************** * IAMStreamConfig interface */ [ object, uuid(c6e13340-30ac-11d0-a18c-00a0c9118956), pointer_default(unique) ] interface IAMStreamConfig : IUnknown { typedef struct _VIDEO_STREAM_CONFIG_CAPS { GUID guid; ULONG VideoStandard; SIZE InputSize; SIZE MinCroppingSize; SIZE MaxCroppingSize; int CropGranularityX; int CropGranularityY; int CropAlignX; int CropAlignY; SIZE MinOutputSize; SIZE MaxOutputSize; int OutputGranularityX; int OutputGranularityY; int StretchTapsX; int StretchTapsY; int ShrinkTapsX; int ShrinkTapsY; LONGLONG MinFrameInterval; LONGLONG MaxFrameInterval; LONG MinBitsPerSecond; LONG MaxBitsPerSecond; } VIDEO_STREAM_CONFIG_CAPS; typedef struct _AUDIO_STREAM_CONFIG_CAPS { GUID guid; ULONG MinimumChannels; ULONG MaximumChannels; ULONG ChannelsGranularity; ULONG MinimumBitsPerSample; ULONG MaximumBitsPerSample; ULONG BitsPerSampleGranularity; ULONG MinimumSampleFrequency; ULONG MaximumSampleFrequency; ULONG SampleFrequencyGranularity; } AUDIO_STREAM_CONFIG_CAPS; HRESULT SetFormat( [in] AM_MEDIA_TYPE *pmt); HRESULT GetFormat( [in] AM_MEDIA_TYPE **pmt); HRESULT GetNumberOfCapabilities( [out] int *piCount, [out] int *piSize); HRESULT GetStreamCaps( [in] int iIndex, [out] AM_MEDIA_TYPE **pmt, [out] BYTE *pSCC); } typedef enum tagVideoProcAmpProperty { VideoProcAmp_Brightness, VideoProcAmp_Contrast, VideoProcAmp_Hue, VideoProcAmp_Saturation, VideoProcAmp_Sharpness, VideoProcAmp_Gamma, VideoProcAmp_ColorEnable, VideoProcAmp_WhiteBalance, VideoProcAmp_BacklightCompensation, VideoProcAmp_Gain } VideoProcAmpProperty; typedef enum tagVideoProcAmpFlags { VideoProcAmp_Flags_Auto = 0x0001, VideoProcAmp_Flags_Manual = 0x0002, } VideoProcAmpFlags; /***************************************************************************** * IAMVideoProcAmp interface */ [ object, uuid(c6e13360-30ac-11d0-a18c-00a0c9118956), pointer_default(unique) ] interface IAMVideoProcAmp : IUnknown { HRESULT GetRange( [in] LONG Property, [out] LONG *pMin, [out] LONG *pMax, [out] LONG *pSteppingDelta, [out] LONG *pDefault, [out] LONG *pCapsFlags); HRESULT Set( [in] LONG Property, [in] LONG lValue, [in] LONG Flags); HRESULT Get( [in] LONG Property, [out] LONG *lValue, [out] LONG *Flags); } [ object, uuid(56a868aa-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IAsyncReader : IUnknown { HRESULT RequestAllocator( [in] IMemAllocator* pPreferred, [in] ALLOCATOR_PROPERTIES* pProps, [out] IMemAllocator ** ppActual); HRESULT Request( [in] IMediaSample* pSample, [in] DWORD_PTR dwUser); HRESULT WaitForNext( [in] DWORD dwTimeout, [out] IMediaSample** ppSample, [out] DWORD_PTR * pdwUser); HRESULT SyncReadAligned( [in] IMediaSample* pSample); HRESULT SyncRead( [in] LONGLONG llPosition, [in] LONG lLength, [out, size_is(lLength)] BYTE* pBuffer); HRESULT Length( [out] LONGLONG* pTotal, [out] LONGLONG* pAvailable); HRESULT BeginFlush(void); HRESULT EndFlush(void); } [ object, uuid(56a868ab-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IGraphVersion : IUnknown { HRESULT QueryVersion(LONG* pVersion); } [ object, uuid(56a868ad-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IResourceConsumer : IUnknown { HRESULT AcquireResource( [in] LONG idResource); HRESULT ReleaseResource( [in] LONG idResource); } [ object, uuid(56a868ac-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IResourceManager : IUnknown { HRESULT Register( [in] LPCWSTR pName, [in] LONG cResource, [out] LONG* plToken ); HRESULT RegisterGroup( [in] LPCWSTR pName, [in] LONG cResource, [in, size_is(cResource)] LONG* palTokens, [out] LONG* plToken ); HRESULT RequestResource( [in] LONG idResource, [in] IUnknown* pFocusObject, [in] IResourceConsumer* pConsumer ); HRESULT NotifyAcquire( [in] LONG idResource, [in] IResourceConsumer* pConsumer, [in] HRESULT hr); HRESULT NotifyRelease( [in] LONG idResource, [in] IResourceConsumer* pConsumer, [in] BOOL bStillWant); HRESULT CancelRequest( [in] LONG idResource, [in] IResourceConsumer* pConsumer); HRESULT SetFocus( [in] IUnknown* pFocusObject); HRESULT ReleaseFocus( [in] IUnknown* pFocusObject); } typedef enum AM_STREAM_INFO_FLAGS { AM_STREAM_INFO_START_DEFINED = 0x01, AM_STREAM_INFO_STOP_DEFINED = 0x02, AM_STREAM_INFO_DISCARDING = 0x04, AM_STREAM_INFO_STOP_SEND_EXTRA = 0x10 } AM_STREAM_INFO_FLAGS; typedef struct AM_STREAM_INFO { REFERENCE_TIME tStart; REFERENCE_TIME tStop; DWORD dwStartCookie; DWORD dwStopCookie; DWORD dwFlags; } AM_STREAM_INFO; [ local, object, uuid(36b73881-c2c8-11cf-8b46-00805f6cef60), pointer_default(unique) ] interface IAMStreamControl : IUnknown { HRESULT StartAt( [in] const REFERENCE_TIME *ptStart, [in] DWORD dwCookie); HRESULT StopAt( [in] const REFERENCE_TIME *ptStop, [in] BOOL bSendExtra, [in] DWORD dwCookie); HRESULT GetInfo( [out] AM_STREAM_INFO *pInfo); } cpp_quote("#ifndef _IKsPropertySet_") cpp_quote("#define _IKsPropertySet_") cpp_quote("#define KSPROPERTY_SUPPORT_GET 1") cpp_quote("#define KSPROPERTY_SUPPORT_SET 2") [ object, uuid(31efac30-515c-11d0-a9aa-00aa0061be93), pointer_default(unique), local ] interface IKsPropertySet : IUnknown { HRESULT Set( [in] REFGUID guidPropSet, [in] DWORD dwPropID, [in, size_is(cbInstanceData)] LPVOID pInstanceData, [in] DWORD cbInstanceData, [in, size_is(cbPropData)] LPVOID pPropData, [in] DWORD cbPropData ); HRESULT Get( [in] REFGUID guidPropSet, [in] DWORD dwPropID, [in, size_is(cbInstanceData)] LPVOID pInstanceData, [in] DWORD cbInstanceData, [out, size_is(cbPropData)] LPVOID pPropData, [in] DWORD cbPropData, [out] DWORD *pcbReturned ); HRESULT QuerySupported( [in] REFGUID guidPropSet, [in] DWORD dwPropID, [out] DWORD *pTypeSupport); } cpp_quote("#endif /* _IKsPropertySet_ */") [ local, object, uuid(6025a880-c0d5-11d0-bd4e-00a0c911ce86), pointer_default(unique) ] interface IMediaPropertyBag : IPropertyBag { typedef IMediaPropertyBag *LPMEDIAPROPERTYBAG; HRESULT EnumProperty( [in] ULONG iProperty, [in, out] VARIANT *pvarPropertyName, [in, out] VARIANT *pvarPropertyValue); } [ local, object, uuid(5738e040-b67f-11d0-bd4d-00a0c911ce86), pointer_default(unique) ] interface IPersistMediaPropertyBag : IPersist { HRESULT InitNew(void); HRESULT Load( [in] IMediaPropertyBag *pPropBag, [in] IErrorLog *pErrorLog); HRESULT Save( [in] IMediaPropertyBag *pPropBag, [in] BOOL fClearDirty, [in] BOOL fSaveAllProperties); typedef IPersistMediaPropertyBag *LPPERSISTMEDIAPROPERTYBAG; } [ object, uuid(36b73883-c2c8-11cf-8b46-00805f6cef60), pointer_default(unique) ] interface ISeekingPassThru : IUnknown { HRESULT Init( [in] BOOL bSupportRendering, [in] IPin *pPin); } enum _AM_FILTER_MISC_FLAGS { AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x1, AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x2 }; [ local, object, uuid(2dd74950-a890-11d1-abe8-00a0c905f375), pointer_default(unique) ] interface IAMFilterMiscFlags : IUnknown { ULONG GetMiscFlags(); } [ local, object, uuid(4995f511-9ddb-4f12-bd3b-f04611807b79), pointer_default(unique) ] interface IAMGraphBuilderCallback : IUnknown { HRESULT SelectedFilter( [in] IMoniker *pMon); HRESULT CreatedFilter( [in] IBaseFilter *pFil); } [ local, object, uuid(d8d715a0-6e5e-11d0-b3f0-00aa003761c5), pointer_default(unique) ] interface IAMVfwCaptureDialogs : IUnknown { HRESULT HasDialog( [in] int dialog); HRESULT ShowDialog( [in] int dialog, [in] HWND hwnd); HRESULT SendDriverMessage( [in] int dialog, [in] int msg, [in] long data1, [in] long data2); } ================================================ FILE: wine/windows/basetsd.h ================================================ /* * Compilers that uses ILP32, LP64 or P64 type models * for both Win32 and Win64 are supported by this file. * * Copyright (C) 1999 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_BASETSD_H #define __WINE_BASETSD_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /* * Win32 was easy to implement under Unix since most 32-bit Unices use the same * type model (ILP32) as Win32, where int, long and pointer are 32-bit. * * Win64, however, can cause some problems. Most 64-bit Unices use the LP64 type * model where int is 32-bit and long and pointer are 64-bit. Win64 on the other * hand uses the LLP64 type model where int and long are 32 bit and pointer is * 64-bit. */ #if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__)) && !defined(_WIN64) #define _WIN64 #endif /* Type model independent typedefs */ /* The __intXX types are native types defined by the MS C compiler. * Apps that make use of them before they get defined here, can * simply add to the command line: * -D__int8=char -D__int16=short -D__int32=int "-D__int64=long long" */ #if !defined(_MSC_VER) && !defined(__WIDL__) # ifndef __int8 # define __int8 char # endif # ifndef __int16 # define __int16 short # endif # ifndef __int32 # define __int32 int # endif # ifndef __int64 # if defined(_WIN64) && !defined(__MINGW64__) # define __int64 long # else # define __int64 long long # endif # endif #endif /* !defined(_MSC_VER) */ /* FIXME: DECLSPEC_ALIGN should be declared only in winnt.h, but we need it here too */ #ifndef DECLSPEC_ALIGN # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) # define DECLSPEC_ALIGN(x) __declspec(align(x)) # elif defined(__GNUC__) # define DECLSPEC_ALIGN(x) __attribute__((aligned(x))) # else # define DECLSPEC_ALIGN(x) # endif #endif typedef signed char INT8, *PINT8; typedef signed short INT16, *PINT16; typedef signed int INT32, *PINT32; typedef unsigned char UINT8, *PUINT8; typedef unsigned short UINT16, *PUINT16; typedef unsigned int UINT32, *PUINT32; typedef signed int LONG32, *PLONG32; typedef unsigned int ULONG32, *PULONG32; typedef unsigned int DWORD32, *PDWORD32; #ifdef _MSC_VER typedef signed __int64 INT64, *PINT64; typedef unsigned __int64 UINT64, *PUINT64; typedef signed __int64 LONG64, *PLONG64; typedef unsigned __int64 ULONG64, *PULONG64; typedef unsigned __int64 DWORD64, *PDWORD64; #else typedef signed __int64 DECLSPEC_ALIGN(8) INT64, *PINT64; typedef unsigned __int64 DECLSPEC_ALIGN(8) UINT64, *PUINT64; typedef signed __int64 DECLSPEC_ALIGN(8) LONG64, *PLONG64; typedef unsigned __int64 DECLSPEC_ALIGN(8) ULONG64, *PULONG64; typedef unsigned __int64 DECLSPEC_ALIGN(8) DWORD64, *PDWORD64; #endif /* Basic pointer-sized integer types */ #if defined(__midl) || defined(__WIDL__) typedef /* [public] */ signed __int3264 INT_PTR, *PINT_PTR; typedef /* [public] */ signed __int3264 LONG_PTR, *PLONG_PTR; typedef /* [public] */ unsigned __int3264 UINT_PTR, *PUINT_PTR; typedef /* [public] */ unsigned __int3264 ULONG_PTR, *PULONG_PTR; typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #elif defined(_WIN64) #define __int3264 __int64 typedef signed __int64 INT_PTR, *PINT_PTR; typedef signed __int64 LONG_PTR, *PLONG_PTR; typedef unsigned __int64 UINT_PTR, *PUINT_PTR; typedef unsigned __int64 ULONG_PTR, *PULONG_PTR; typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #else #define __int3264 __int32 typedef long INT_PTR, *PINT_PTR; typedef unsigned long UINT_PTR, *PUINT_PTR; typedef long LONG_PTR, *PLONG_PTR; typedef unsigned long ULONG_PTR, *PULONG_PTR; typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #endif /* Win32 or Win64 dependent typedef/defines. */ #ifdef _WIN64 #define MAXINT_PTR 0x7fffffffffffffff #define MININT_PTR 0x8000000000000000 #define MAXUINT_PTR 0xffffffffffffffff typedef __int64 SHANDLE_PTR; typedef unsigned __int64 HANDLE_PTR; typedef int HALF_PTR, *PHALF_PTR; typedef unsigned int UHALF_PTR, *PUHALF_PTR; #define MAXHALF_PTR 0x7fffffff #define MINHALF_PTR 0x80000000 #define MAXUHALF_PTR 0xffffffff #if !defined(__midl) && !defined(__WIDL__) static inline ULONG32 HandleToULong(const void *h) { return (ULONG32)(ULONG_PTR)h; } static inline LONG32 HandleToLong(const void *h) { return (LONG32)(LONG_PTR)h; } static inline void *ULongToHandle(ULONG32 ul) { return (void *)(ULONG_PTR)ul; } static inline void *LongToHandle(LONG32 l) { return (void *)(LONG_PTR)l; } static inline ULONG32 PtrToUlong(const void *p) { return (ULONG32)(ULONG_PTR)p; } static inline LONG32 PtrToLong(const void *p) { return (LONG32)(LONG_PTR)p; } static inline UINT32 PtrToUint(const void *p) { return (UINT32)(UINT_PTR)p; } static inline INT32 PtrToInt(const void *p) { return (INT32)(INT_PTR)p; } static inline UINT16 PtrToUshort(const void *p) { return (UINT16)(ULONG_PTR)p; } static inline INT16 PtrToShort(const void *p) { return (INT16)(LONG_PTR)p; } static inline void *IntToPtr(INT32 i) { return (void *)(INT_PTR)i; } static inline void *UIntToPtr(UINT32 ui) { return (void *)(UINT_PTR)ui; } static inline void *LongToPtr(LONG32 l) { return (void *)(LONG_PTR)l; } static inline void *ULongToPtr(ULONG32 ul) { return (void *)(ULONG_PTR)ul; } #endif /* !__midl && !__WIDL__ */ #else /* FIXME: defined(_WIN32) */ #define MAXINT_PTR 0x7fffffff #define MININT_PTR 0x80000000 #define MAXUINT_PTR 0xffffffff typedef long SHANDLE_PTR; typedef unsigned long HANDLE_PTR; typedef signed short HALF_PTR, *PHALF_PTR; typedef unsigned short UHALF_PTR, *PUHALF_PTR; #define MAXUHALF_PTR 0xffff #define MAXHALF_PTR 0x7fff #define MINHALF_PTR 0x8000 #define HandleToULong(h) ((ULONG)(ULONG_PTR)(h)) #define HandleToLong(h) ((LONG)(LONG_PTR)(h)) #define ULongToHandle(ul) ((HANDLE)(ULONG_PTR)(ul)) #define LongToHandle(l) ((HANDLE)(LONG_PTR)(l)) #define PtrToUlong(p) ((ULONG)(ULONG_PTR)(p)) #define PtrToLong(p) ((LONG)(LONG_PTR)(p)) #define PtrToUint(p) ((UINT)(UINT_PTR)(p)) #define PtrToInt(p) ((INT)(INT_PTR)(p)) #define PtrToUshort(p) ((USHORT)(ULONG_PTR)(p)) #define PtrToShort(p) ((SHORT)(LONG_PTR)(p)) #define IntToPtr(i) ((void *)(INT_PTR)((INT)i)) #define UIntToPtr(ui) ((void *)(UINT_PTR)((UINT)ui)) #define LongToPtr(l) ((void *)(LONG_PTR)((LONG)l)) #define ULongToPtr(ul) ((void *)(ULONG_PTR)((ULONG)ul)) #endif /* defined(_WIN64) || defined(_WIN32) */ #define HandleToUlong(h) HandleToULong(h) #define UlongToHandle(ul) ULongToHandle(ul) #define UintToPtr(ui) UIntToPtr(ui) #define UlongToPtr(ul) ULongToPtr(ul) typedef LONG_PTR SSIZE_T, *PSSIZE_T; typedef ULONG_PTR SIZE_T, *PSIZE_T; typedef ULONG_PTR KAFFINITY, *PKAFFINITY; /* Some Wine-specific definitions */ /* Architecture dependent settings. */ /* These are hardcoded to avoid dependencies on config.h in Winelib apps. */ #if defined(__i386__) # undef WORDS_BIGENDIAN # undef BITFIELDS_BIGENDIAN # define ALLOW_UNALIGNED_ACCESS #elif defined(__x86_64__) # undef WORDS_BIGENDIAN # undef BITFIELDS_BIGENDIAN # define ALLOW_UNALIGNED_ACCESS #elif defined(__powerpc__) # define WORDS_BIGENDIAN # define BITFIELDS_BIGENDIAN # undef ALLOW_UNALIGNED_ACCESS #elif defined(__ALPHA__) # undef WORDS_BIGENDIAN # undef BITFIELDS_BIGENDIAN # undef ALLOW_UNALIGNED_ACCESS #elif defined(__ARMEB__) # define WORDS_BIGENDIAN # define BITFIELDS_BIGENDIAN # undef ALLOW_UNALIGNED_ACCESS #elif defined(__ARMEL__) || defined(__arm__) # undef WORDS_BIGENDIAN # undef BITFIELDS_BIGENDIAN # undef ALLOW_UNALIGNED_ACCESS #elif defined(__AARCH64EB__) # define WORDS_BIGENDIAN # define BITFIELDS_BIGENDIAN # undef ALLOW_UNALIGNED_ACCESS #elif defined(__AARCH64EL__) || defined(__aarch64__) # undef WORDS_BIGENDIAN # undef BITFIELDS_BIGENDIAN # undef ALLOW_UNALIGNED_ACCESS #elif defined(__MIPSEB__) # define WORDS_BIGENDIAN # define BITFIELDS_BIGENDIAN # undef ALLOW_UNALIGNED_ACCESS #elif defined(__MIPSEL__) # undef WORDS_BIGENDIAN # undef BITFIELDS_BIGENDIAN # undef ALLOW_UNALIGNED_ACCESS #elif !defined(RC_INVOKED) && !defined(__WIDL__) && !defined(__midl) # error Unknown CPU architecture! #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* !defined(__WINE_BASETSD_H) */ ================================================ FILE: wine/windows/basetyps.h ================================================ /* * Copyright (C) 1998 Anders Norlander * Copyright (C) 2005 Steven Edwards * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _BASETYPS_H_ #define _BASETYPS_H_ #ifdef __cplusplus # define EXTERN_C extern "C" #else # define EXTERN_C extern #endif #define STDMETHODCALLTYPE __stdcall #define STDMETHODVCALLTYPE __cdecl #define STDAPICALLTYPE __stdcall #define STDAPIVCALLTYPE __cdecl #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE #define STDAPI_(t) EXTERN_C t STDAPICALLTYPE #define STDMETHODIMP HRESULT STDMETHODCALLTYPE #define STDMETHODIMP_(t) t STDMETHODCALLTYPE #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE #define STDAPIV_(t) EXTERN_C t STDAPIVCALLTYPE #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE #define STDMETHODIMPV_(t) t STDMETHODVCALLTYPE #if defined(__cplusplus) && !defined(CINTERFACE) # define interface struct # define STDMETHOD(m) virtual HRESULT STDMETHODCALLTYPE m # define STDMETHOD_(t,m) virtual t STDMETHODCALLTYPE m # define PURE =0 # define THIS_ # define THIS void # define DECLARE_INTERFACE(i) interface i # define DECLARE_INTERFACE_(i,b) interface i : public b #else # define STDMETHOD(m) HRESULT (STDMETHODCALLTYPE *m) # define STDMETHOD_(t,m) t (STDMETHODCALLTYPE *m) # define PURE # define THIS_ INTERFACE *, # define THIS INTERFACE * # ifdef CONST_VTABLE # define DECLARE_INTERFACE(i) \ typedef interface i { const struct i##Vtbl *lpVtbl; } i; \ typedef struct i##Vtbl i##Vtbl; \ struct i##Vtbl # else # define DECLARE_INTERFACE(i) \ typedef interface i { struct i##Vtbl *lpVtbl; } i; \ typedef struct i##Vtbl i##Vtbl; \ struct i##Vtbl # endif # define DECLARE_INTERFACE_(i,b) DECLARE_INTERFACE(i) #endif #include #ifndef _ERROR_STATUS_T_DEFINED typedef unsigned long error_status_t; #define _ERROR_STATUS_T_DEFINED #endif #ifndef _WCHAR_T_DEFINED typedef unsigned short wchar_t; #define _WCHAR_T_DEFINED #endif #endif /* _BASETYPS_H_ */ ================================================ FILE: wine/windows/bcrypt.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_BCRYPT_H #define __WINE_BCRYPT_H #ifndef WINAPI #define WINAPI __stdcall #endif #ifndef IN #define IN #endif #ifndef OUT #define OUT #endif #ifndef OPTIONAL #define OPTIONAL #endif #ifndef WINE_NTSTATUS_DECLARED #define WINE_NTSTATUS_DECLARED typedef LONG NTSTATUS; #endif #define BCRYPT_ALGORITHM_NAME (const WCHAR []){'A','l','g','o','r','i','t','h','m','N','a','m','e',0} #define BCRYPT_AUTH_TAG_LENGTH (const WCHAR []){'A','u','t','h','T','a','g','L','e','n','g','t','h',0} #define BCRYPT_BLOCK_LENGTH (const WCHAR []){'B','l','o','c','k','L','e','n','g','t','h',0} #define BCRYPT_BLOCK_SIZE_LIST (const WCHAR []){'B','l','o','c','k','S','i','z','e','L','i','s','t',0} #define BCRYPT_CHAINING_MODE (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e',0} #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} #define BCRYPT_HASH_BLOCK_LENGTH (const WCHAR []){'H','a','s','h','B','l','o','c','k','L','e','n','g','t','h',0} #define BCRYPT_HASH_LENGTH (const WCHAR []){'H','a','s','h','D','i','g','e','s','t','L','e','n','g','t','h',0} #define BCRYPT_HASH_OID_LIST (const WCHAR []){'H','a','s','h','O','I','D','L','i','s','t',0} #define BCRYPT_KEY_LENGTH (const WCHAR []){'K','e','y','L','e','n','g','t','h',0} #define BCRYPT_KEY_LENGTHS (const WCHAR []){'K','e','y','L','e','n','g','t','h','s',0} #define BCRYPT_KEY_OBJECT_LENGTH (const WCHAR []){'K','e','y','O','b','j','e','c','t','L','e','n','g','t','h',0} #define BCRYPT_KEY_STRENGTH (const WCHAR []){'K','e','y','S','t','r','e','n','g','t','h',0} #define BCRYPT_OBJECT_LENGTH (const WCHAR []){'O','b','j','e','c','t','L','e','n','g','t','h',0} #define BCRYPT_PADDING_SCHEMES (const WCHAR []){'P','a','d','d','i','n','g','S','c','h','e','m','e','s',0} #define BCRYPT_PROVIDER_HANDLE (const WCHAR []){'P','r','o','v','i','d','e','r','H','a','n','d','l','e',0} #define BCRYPT_SIGNATURE_LENGTH (const WCHAR []){'S','i','g','n','a','t','u','r','e','L','e','n','g','t','h',0} #define BCRYPT_OPAQUE_KEY_BLOB (const WCHAR []){'O','p','a','q','u','e','K','e','y','B','l','o','b',0} #define BCRYPT_KEY_DATA_BLOB (const WCHAR []){'K','e','y','D','a','t','a','B','l','o','b',0} #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} #define BCRYPT_ECCPUBLIC_BLOB (const WCHAR []){'E','C','C','P','U','B','L','I','C','B','L','O','B',0} #define BCRYPT_ECCPRIVATE_BLOB (const WCHAR []){'E','C','C','P','R','I','V','A','T','E','B','L','O','B',0} #define BCRYPT_RSAPUBLIC_BLOB (const WCHAR []){'R','S','A','P','U','B','L','I','C','B','L','O','B',0} #define BCRYPT_RSAPRIVATE_BLOB (const WCHAR []){'R','S','A','P','R','I','V','A','T','E','B','L','O','B',0} #define MS_PRIMITIVE_PROVIDER (const WCHAR [])\ {'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} #define MS_PLATFORM_CRYPTO_PROVIDER (const WCHAR [])\ {'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} #define BCRYPT_AES_ALGORITHM (const WCHAR []){'A','E','S',0} #define BCRYPT_MD2_ALGORITHM (const WCHAR []){'M','D','2',0} #define BCRYPT_MD4_ALGORITHM (const WCHAR []){'M','D','4',0} #define BCRYPT_MD5_ALGORITHM (const WCHAR []){'M','D','5',0} #define BCRYPT_RNG_ALGORITHM (const WCHAR []){'R','N','G',0} #define BCRYPT_RSA_ALGORITHM (const WCHAR []){'R','S','A',0} #define BCRYPT_SHA1_ALGORITHM (const WCHAR []){'S','H','A','1',0} #define BCRYPT_SHA256_ALGORITHM (const WCHAR []){'S','H','A','2','5','6',0} #define BCRYPT_SHA384_ALGORITHM (const WCHAR []){'S','H','A','3','8','4',0} #define BCRYPT_SHA512_ALGORITHM (const WCHAR []){'S','H','A','5','1','2',0} #define BCRYPT_ECDSA_P256_ALGORITHM (const WCHAR []){'E','C','D','S','A','_','P','2','5','6',0} #define BCRYPT_ECDSA_P384_ALGORITHM (const WCHAR []){'E','C','D','S','A','_','P','3','8','4',0} #define BCRYPT_ECDSA_P521_ALGORITHM (const WCHAR []){'E','C','D','S','A','_','P','5','2','1',0} #define BCRYPT_CHAIN_MODE_NA (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','N','/','A',0} #define BCRYPT_CHAIN_MODE_CBC (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','C','B','C',0} #define BCRYPT_CHAIN_MODE_ECB (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','E','C','B',0} #define BCRYPT_CHAIN_MODE_CFB (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','C','F','B',0} #define BCRYPT_CHAIN_MODE_CCM (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','C','C','M',0} #define BCRYPT_CHAIN_MODE_GCM (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','G','C','M',0} #define BCRYPT_ECDSA_PUBLIC_P256_MAGIC 0x31534345 #define BCRYPT_ECDSA_PRIVATE_P256_MAGIC 0x32534345 #define BCRYPT_ECDSA_PUBLIC_P384_MAGIC 0x33534345 #define BCRYPT_ECDSA_PRIVATE_P384_MAGIC 0x34534345 #define BCRYPT_ECDSA_PUBLIC_P521_MAGIC 0x35534345 #define BCRYPT_ECDSA_PRIVATE_P521_MAGIC 0x36534345 typedef struct _BCRYPT_ALGORITHM_IDENTIFIER { LPWSTR pszName; ULONG dwClass; ULONG dwFlags; } BCRYPT_ALGORITHM_IDENTIFIER; typedef struct __BCRYPT_KEY_LENGTHS_STRUCT { ULONG dwMinLength; ULONG dwMaxLength; ULONG dwIncrement; } BCRYPT_KEY_LENGTHS_STRUCT, BCRYPT_AUTH_TAG_LENGTHS_STRUCT; typedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO { ULONG cbSize; ULONG dwInfoVersion; UCHAR *pbNonce; ULONG cbNonce; UCHAR *pbAuthData; ULONG cbAuthData; UCHAR *pbTag; ULONG cbTag; UCHAR *pbMacContext; ULONG cbMacContext; ULONG cbAAD; ULONGLONG cbData; ULONG dwFlags; } BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO, *PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO; typedef struct _BCRYPT_ECCKEY_BLOB { ULONG dwMagic; ULONG cbKey; } BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB; #define BCRYPT_RSAPUBLIC_MAGIC 0x31415352 #define BCRYPT_RSAPRIVATE_MAGIC 0x32415352 #define BCRYPT_RSAFULLPRIVATE_MAGIC 0x33415352 typedef struct _BCRYPT_RSAKEY_BLOB { ULONG Magic; ULONG BitLength; ULONG cbPublicExp; ULONG cbModulus; ULONG cbPrime1; ULONG cbPrime2; } BCRYPT_RSAKEY_BLOB; typedef struct _BCRYPT_PKCS1_PADDING_INFO { LPCWSTR pszAlgId; } BCRYPT_PKCS1_PADDING_INFO; #define BCRYPT_PAD_NONE 0x00000001 #define BCRYPT_PAD_PKCS1 0x00000002 #define BCRYPT_PAD_OAEP 0x00000004 #define BCRYPT_PAD_PSS 0x00000008 #define BCRYPT_PAD_PKCS1_OPTIONAL_HASH_OID 0x00000010 #define BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO_VERSION 1 #define BCRYPT_AUTH_MODE_CHAIN_CALLS_FLAG 0x00000001 #define BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG 0x00000002 typedef struct _CRYPT_INTERFACE_REG { ULONG dwInterface; ULONG dwFlags; ULONG cFunctions; PWSTR *rgpszFunctions; } CRYPT_INTERFACE_REG, *PCRYPT_INTERFACE_REG; typedef struct _CRYPT_IMAGE_REG { PWSTR pszImage; ULONG cInterfaces; PCRYPT_INTERFACE_REG *rgpInterfaces; } CRYPT_IMAGE_REG, *PCRYPT_IMAGE_REG; typedef struct _CRYPT_PROVIDER_REG { ULONG cAliases; PWSTR *rgpszAliases; PCRYPT_IMAGE_REG pUM; PCRYPT_IMAGE_REG pKM; } CRYPT_PROVIDER_REG, *PCRYPT_PROVIDER_REG; typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER { ULONG dwMagic; ULONG dwVersion; ULONG cbKeyData; } BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER; #define BCRYPT_KEY_DATA_BLOB_MAGIC 0x4d42444b #define BCRYPT_KEY_DATA_BLOB_VERSION1 1 typedef PVOID BCRYPT_ALG_HANDLE; typedef PVOID BCRYPT_KEY_HANDLE; typedef PVOID BCRYPT_HANDLE; typedef PVOID BCRYPT_HASH_HANDLE; /* Flags for BCryptGenRandom */ #define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x00000001 #define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 /* Flags for BCryptOpenAlgorithmProvider */ #define BCRYPT_ALG_HANDLE_HMAC_FLAG 0x00000008 /* Flags for BCryptEncrypt/BCryptDecrypt */ #define BCRYPT_BLOCK_PADDING 0x00000001 NTSTATUS WINAPI BCryptCloseAlgorithmProvider(BCRYPT_ALG_HANDLE, ULONG); NTSTATUS WINAPI BCryptCreateHash(BCRYPT_ALG_HANDLE, BCRYPT_HASH_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); NTSTATUS WINAPI BCryptDecrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); NTSTATUS WINAPI BCryptDestroyHash(BCRYPT_HASH_HANDLE); NTSTATUS WINAPI BCryptDestroyKey(BCRYPT_KEY_HANDLE); NTSTATUS WINAPI BCryptEncrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); NTSTATUS WINAPI BCryptEnumAlgorithms(ULONG, ULONG *, BCRYPT_ALGORITHM_IDENTIFIER **, ULONG); NTSTATUS WINAPI BCryptFinishHash(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG); NTSTATUS WINAPI BCryptGenerateSymmetricKey(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); NTSTATUS WINAPI BCryptGenRandom(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, ULONG); NTSTATUS WINAPI BCryptGetFipsAlgorithmMode(BOOLEAN *); NTSTATUS WINAPI BCryptGetProperty(BCRYPT_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG *, ULONG); NTSTATUS WINAPI BCryptHash(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, PUCHAR, ULONG, PUCHAR, ULONG); NTSTATUS WINAPI BCryptHashData(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG); NTSTATUS WINAPI BCryptImportKeyPair(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE, LPCWSTR, BCRYPT_KEY_HANDLE *, UCHAR *, ULONG, ULONG); NTSTATUS WINAPI BCryptOpenAlgorithmProvider(BCRYPT_ALG_HANDLE *, LPCWSTR, LPCWSTR, ULONG); NTSTATUS WINAPI BCryptSetProperty(BCRYPT_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG); NTSTATUS WINAPI BCryptDuplicateHash(BCRYPT_HASH_HANDLE, BCRYPT_HASH_HANDLE *, UCHAR *, ULONG, ULONG); NTSTATUS WINAPI BCryptVerifySignature(BCRYPT_KEY_HANDLE, void *, UCHAR *, ULONG, UCHAR *, ULONG, ULONG); #endif /* __WINE_BCRYPT_H */ ================================================ FILE: wine/windows/bdaiface.idl ================================================ /* * Copyright 2013 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; import "strmif.idl"; import "bdatypes.h"; #endif #include "bdaiface_enums.h" [ object, uuid(fd501041-8ebe-11ce-8183-00aa00577da2), pointer_default(unique) ] interface IBDA_NetworkProvider : IUnknown { HRESULT PutSignalSource([in] ULONG ulSignalSource); HRESULT GetSignalSource([in, out] ULONG *pulSignalSource); HRESULT GetNetworkType([in, out] GUID *pguidNetworkType); HRESULT PutTuningSpace([in] REFGUID guidTuningSpace); HRESULT GetTuningSpace([in, out] GUID *pguidTuingSpace); HRESULT RegisterDeviceFilter([in] IUnknown *pUnkFilterControl, [in, out] ULONG *ppvRegisitrationContext); HRESULT UnRegisterDeviceFilter([in] ULONG pvRegistrationContext); } [ object, uuid(71985F43-1CA1-11d3-9CC8-00C04F7971E0), pointer_default(unique) ] interface IBDA_EthernetFilter : IUnknown { HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses); HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList []); HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses, [in, out, size_is(*pulcbAddresses)] BYTE pAddressList[]); HRESULT PutMulticastMode([in] ULONG ulModeMask); HRESULT GetMulticastMode([out] ULONG *pulModeMask); } [ object, uuid(71985F44-1CA1-11d3-9CC8-00C04F7971E0), pointer_default(unique) ] interface IBDA_IPV4Filter : IUnknown { HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses); HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList[]); HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses,[out, size_is(*pulcbAddresses)] BYTE pAddressList[]); HRESULT PutMulticastMode([in] ULONG ulModeMask); HRESULT GetMulticastMode([out] ULONG* pulModeMask); } [ object, uuid(E1785A74-2A23-4fb3-9245-A8F88017EF33), pointer_default(unique) ] interface IBDA_IPV6Filter : IUnknown { HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses); HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList[]); HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses,[out, size_is(*pulcbAddresses)] BYTE pAddressList[]); HRESULT PutMulticastMode([in] ULONG ulModeMask); HRESULT GetMulticastMode([out] ULONG* pulModeMask); } [ object, uuid(FD0A5AF3-B41D-11d2-9C95-00C04F7971E0), pointer_default(unique) ] interface IBDA_DeviceControl : IUnknown { HRESULT StartChanges(void); HRESULT CheckChanges(void); HRESULT CommitChanges(void); HRESULT GetChangeState([in, out] ULONG *pState); } [ object, uuid(0DED49D5-A8B7-4d5d-97A1-12B0C195874D), pointer_default(unique) ] interface IBDA_PinControl : IUnknown { HRESULT GetPinID([in, out] ULONG *pulPinID); HRESULT GetPinType([in, out] ULONG *pulPinType); HRESULT RegistrationContext([in, out] ULONG *pulRegistrationCtx); } [ object, uuid(D2F1644B-B409-11d2-BC69-00A0C9EE9E16), pointer_default(unique) ] interface IBDA_SignalProperties : IUnknown { HRESULT PutNetworkType([in] REFGUID guidNetworkType); HRESULT GetNetworkType([in, out] GUID *pguidNetworkType); HRESULT PutSignalSource([in] ULONG ulSignalSource); HRESULT GetSignalSource([in, out] ULONG *pulSignalSource); HRESULT PutTuningSpace([in] REFGUID guidTuningSpace); HRESULT GetTuningSpace([in, out] GUID *pguidTuingSpace); } [ object, uuid(1347D106-CF3A-428a-A5CB-AC0D9A2A4338), pointer_default(unique) ] interface IBDA_SignalStatistics : IUnknown { HRESULT put_SignalStrength ([in] LONG lDbStrength); HRESULT get_SignalStrength ([in, out] LONG *plDbStrength); HRESULT put_SignalQuality ([in] LONG lPercentQuality); HRESULT get_SignalQuality ([in, out] LONG *plPercentQuality); HRESULT put_SignalPresent ([in] BOOLEAN fPresent); HRESULT get_SignalPresent ([in, out] BOOLEAN *pfPresent); HRESULT put_SignalLocked ([in] BOOLEAN fLocked); HRESULT get_SignalLocked ([in, out] BOOLEAN *pfLocked); HRESULT put_SampleTime ([in] LONG lmsSampleTime); HRESULT get_SampleTime ([in, out] LONG *plmsSampleTime); } [ object, uuid(79B56888-7FEA-4690-B45D-38FD3C7849BE), pointer_default(unique) ] interface IBDA_Topology : IUnknown { HRESULT GetNodeTypes([in, out] ULONG *pulcNodeTypes, [in] ULONG ulcNodeTypesMax, [in, out, size_is (ulcNodeTypesMax)] ULONG rgulNodeTypes[]); HRESULT GetNodeDescriptors([in, out] ULONG *ulcNodeDescriptors, [in] ULONG ulcNodeDescriptorsMax, [in, out, size_is(ulcNodeDescriptorsMax)] BDANODE_DESCRIPTOR rgNodeDescriptors[]); HRESULT GetNodeInterfaces([in] ULONG ulNodeType, [in, out] ULONG *pulcInterfaces, [in] ULONG ulcInterfacesMax, [in, out, size_is (ulcInterfacesMax)] GUID rgguidInterfaces[]); HRESULT GetPinTypes([in, out] ULONG *pulcPinTypes, [in] ULONG ulcPinTypesMax, [in, out, size_is (ulcPinTypesMax)] ULONG rgulPinTypes[]); HRESULT GetTemplateConnections([in, out] ULONG *pulcConnections, [in] ULONG ulcConnectionsMax, [in, out, size_is (ulcConnectionsMax)] BDA_TEMPLATE_CONNECTION rgConnections[]); HRESULT CreatePin([in] ULONG ulPinType, [in, out] ULONG *pulPinId); HRESULT DeletePin([in] ULONG ulPinId); HRESULT SetMediaType([in] ULONG ulPinId, [in] AM_MEDIA_TYPE *pMediaType); HRESULT SetMedium([in] ULONG ulPinId, [in] REGPINMEDIUM *pMedium); HRESULT CreateTopology([in] ULONG ulInputPinId, [in] ULONG ulOutputPinId); HRESULT GetControlNode([in] ULONG ulInputPinId, [in] ULONG ulOutputPinId, [in] ULONG ulNodeType, [in, out] IUnknown **ppControlNode); } [ object, uuid(71985F46-1CA1-11d3-9CC8-00C04F7971E0), pointer_default(unique) ] interface IBDA_VoidTransform : IUnknown { HRESULT Start(void); HRESULT Stop(void); } [ object, uuid(DDF15B0D-BD25-11d2-9CA0-00C04F7971E0), pointer_default(unique) ] interface IBDA_NullTransform : IUnknown { HRESULT Start(void); HRESULT Stop(void); } [ object, uuid(71985F47-1CA1-11d3-9CC8-00C04F7971E0), pointer_default(unique) ] interface IBDA_FrequencyFilter : IUnknown { HRESULT put_Autotune([in] ULONG ulTransponder); HRESULT get_Autotune([in, out] ULONG *pulTransponder); HRESULT put_Frequency([in] ULONG ulFrequency); HRESULT get_Frequency([in, out] ULONG *pulFrequency); HRESULT put_Polarity([in] Polarisation Polarity); HRESULT get_Polarity([in, out] Polarisation *pPolarity); HRESULT put_Range([in] ULONG ulRange); HRESULT get_Range([in, out] ULONG *pulRange); HRESULT put_Bandwidth([in] ULONG ulBandwidth); HRESULT get_Bandwidth([in, out] ULONG *pulBandwidth); HRESULT put_FrequencyMultiplier([in] ULONG ulMultiplier); HRESULT get_FrequencyMultiplier([in, out] ULONG *pulMultiplier); } [ object, uuid(992CF102-49F9-4719-A664-C4F23E2408F4), pointer_default(unique) ] interface IBDA_LNBInfo : IUnknown { HRESULT put_LocalOscilatorFrequencyLowBand([in] ULONG ulLOFLow); HRESULT get_LocalOscilatorFrequencyLowBand([in, out] ULONG *pulLOFLow); HRESULT put_LocalOscilatorFrequencyHighBand([in] ULONG ulLOFHigh); HRESULT get_LocalOscilatorFrequencyHighBand([in, out] ULONG *pulLOFHigh); HRESULT put_HighLowSwitchFrequency([in] ULONG ulSwitchFrequency); HRESULT get_HighLowSwitchFrequency([in, out] ULONG *pulSwitchFrequency); } [ object, uuid(F84E2AB0-3C6B-45e3-A0FC-8669D4B81F11), pointer_default(unique) ] interface IBDA_DiseqCommand : IUnknown { HRESULT put_EnableDiseqCommands([in] BOOLEAN bEnable); HRESULT put_DiseqLNBSource([in] ULONG ulLNBSource); HRESULT put_DiseqUseToneBurst([in] BOOLEAN bUseToneBurst); HRESULT put_DiseqRepeats([in] ULONG ulRepeats); HRESULT put_DiseqSendCommand([in] ULONG ulRequestId, [in] ULONG ulcbCommandLen, [in, size_is(ulcbCommandLen)] BYTE *pbCommand); HRESULT get_DiseqResponse([in] ULONG ulRequestId, [in, out] ULONG *pulcbResponseLen, [in, out, size_is(*pulcbResponseLen)] BYTE pbResponse[]); } [ object, uuid(DDF15B12-BD25-11d2-9CA0-00C04F7971E0), pointer_default(unique) ] interface IBDA_AutoDemodulate : IUnknown { HRESULT put_AutoDemodulate(void); } [ object, uuid(34518D13-1182-48e6-B28F-B24987787326), pointer_default(unique) ] interface IBDA_AutoDemodulateEx : IBDA_AutoDemodulate { HRESULT get_SupportedDeviceNodeTypes([in] ULONG ulcDeviceNodeTypesMax, [out] ULONG *pulcDeviceNodeTypes, [in, out] GUID *pguidDeviceNodeTypes); HRESULT get_SupportedVideoFormats([out] ULONG *pulAMTunerModeType, [out] ULONG *pulAnalogVideoStandard); HRESULT get_AuxInputCount([in, out] ULONG *pulCompositeCount, [in, out] ULONG *pulSvideoCount); } [ object, uuid(EF30F379-985B-4d10-B640-A79D5E04E1E0), pointer_default(unique) ] interface IBDA_DigitalDemodulator : IUnknown { HRESULT put_ModulationType([in] ModulationType *pModulationType); HRESULT get_ModulationType([in, out] ModulationType *pModulationType); HRESULT put_InnerFECMethod([in] FECMethod *pFECMethod); HRESULT get_InnerFECMethod([in, out] FECMethod *pFECMethod); HRESULT put_InnerFECRate([in] BinaryConvolutionCodeRate *pFECRate); HRESULT get_InnerFECRate([in, out] BinaryConvolutionCodeRate *pFECRate); HRESULT put_OuterFECMethod([in] FECMethod *pFECMethod); HRESULT get_OuterFECMethod([in, out] FECMethod *pFECMethod); HRESULT put_OuterFECRate([in] BinaryConvolutionCodeRate *pFECRate); HRESULT get_OuterFECRate([in, out] BinaryConvolutionCodeRate *pFECRate); HRESULT put_SymbolRate([in] ULONG *pSymbolRate); HRESULT get_SymbolRate([in, out] ULONG *pSymbolRate); HRESULT put_SpectralInversion([in] SpectralInversion *pSpectralInversion); HRESULT get_SpectralInversion([in, out] SpectralInversion *pSpectralInversion); } [ object, uuid(525ED3EE-5CF3-4e1e-9A06-5368A84F9A6E), pointer_default(unique) ] interface IBDA_DigitalDemodulator2 : IBDA_DigitalDemodulator { HRESULT put_GuardInterval([in] GuardInterval *pGuardInterval); HRESULT get_GuardInterval([in, out] GuardInterval *pGuardInterval); HRESULT put_TransmissionMode([in] TransmissionMode *pTransmissionMode); HRESULT get_TransmissionMode([in, out] TransmissionMode *pTransmissionMode); HRESULT put_RollOff([in] RollOff *pRollOff); HRESULT get_RollOff([in, out] RollOff *pRollOff); HRESULT put_Pilot([in] Pilot *pPilot); HRESULT get_Pilot([in, out] Pilot *pPilot); } [ object, uuid(13F19604-7D32-4359-93A2-A05205D90AC9), pointer_default(unique) ] interface IBDA_DigitalDemodulator3 : IBDA_DigitalDemodulator2 { HRESULT put_SignalTimeouts([in] BDA_SIGNAL_TIMEOUTS *pSignalTimeouts); HRESULT get_SignalTimeouts([in, out] BDA_SIGNAL_TIMEOUTS *pSignalTimeouts); HRESULT put_PLPNumber([in] ULONG *pPLPNumber); HRESULT get_PLPNumber([in, out] ULONG *pPLPNumber); } [ object, uuid(4B2BD7EA-8347-467b-8DBF-62F784929CC3), helpstring("ICCSubStreamFiltering Interface"), pointer_default(unique) ] interface ICCSubStreamFiltering : IUnknown { [propget, helpstring("property SubstreamTypes")] HRESULT SubstreamTypes([out, retval] long *pTypes); [propput, helpstring("property SubstreamTypes")] HRESULT SubstreamTypes([in] long Types); } [ object, uuid(3F4DC8E2-4050-11d3-8F4B-00C04F7971E2), pointer_default(unique), helpstring("Not supported - Use IBDA_IPSinkInfo instead") ] interface IBDA_IPSinkControl : IUnknown { HRESULT GetMulticastList([in, out] unsigned long *pulcbSize, [in, out] BYTE **pbBuffer); HRESULT GetAdapterIPAddress ([in,out] unsigned long *pulcbSize, [in,out] BYTE **pbBuffer); } [ object, uuid(A750108F-492E-4d51-95F7-649B23FF7AD7), pointer_default(unique) ] interface IBDA_IPSinkInfo : IUnknown { HRESULT get_MulticastList([in, out] ULONG *pulcbAddresses, [out, size_is(*pulcbAddresses)] BYTE **ppbAddressList); HRESULT get_AdapterIPAddress([out] BSTR *pbstrBuffer); HRESULT get_AdapterDescription([out] BSTR *pbstrBuffer); } [ object, uuid (afb6c2a2-2c41-11d3-8a60-0000f81e0e4a), pointer_default(unique) ] interface IEnumPIDMap : IUnknown { HRESULT Next([in] ULONG cRequest, [in, out, size_is (cRequest)] PID_MAP *pPIDMap, [out] ULONG *pcReceived); HRESULT Skip([in] ULONG cRecords); HRESULT Reset(void); HRESULT Clone([out] IEnumPIDMap **ppIEnumPIDMap); } [ object, uuid (afb6c2a1-2c41-11d3-8a60-0000f81e0e4a), pointer_default(unique) ] interface IMPEG2PIDMap : IUnknown { HRESULT MapPID([in] ULONG culPID, [in] ULONG *pulPID, [in] MEDIA_SAMPLE_CONTENT MediaSampleContent); HRESULT UnmapPID([in] ULONG culPID, [in] ULONG *pulPID); HRESULT EnumPIDMap([out] IEnumPIDMap **pIEnumPIDMap); } [ object, uuid(06FB45C1-693C-4ea7-B79F-7A6A54D8DEF2), helpstring("IFrequencyMap Interface"), pointer_default(unique), hidden, restricted ] interface IFrequencyMap : IUnknown { HRESULT get_FrequencyMapping([out] ULONG *ulCount, [out, size_is(1, *ulCount)] ULONG **ppulList); HRESULT put_FrequencyMapping([in] ULONG ulCount, [in, size_is(ulCount)] ULONG pList[]); HRESULT get_CountryCode([out] ULONG *pulCountryCode); HRESULT put_CountryCode([in] ULONG ulCountryCode); HRESULT get_DefaultFrequencyMapping([in] ULONG ulCountryCode, [out] ULONG *pulCount, [out, size_is(1, *pulCount)] ULONG **ppulList); HRESULT get_CountryCodeList([out] ULONG* pulCount, [out, size_is(1, *pulCount)] ULONG **ppulList); } [ object, uuid(D806973D-3EBE-46de-8FBB-6358FE784208), helpstring("IBDA_EasMessage Interface"), pointer_default(unique), hidden, restricted ] interface IBDA_EasMessage : IUnknown { HRESULT get_EasMessage([in] ULONG ulEventID, [in, out] IUnknown **ppEASObject); } [ object, uuid(8E882535-5F86-47AB-86CF-C281A72A0549), helpstring("IBDA_TransportStreamInfo Interface"), pointer_default(unique), hidden, restricted ] interface IBDA_TransportStreamInfo : IUnknown { HRESULT get_PatTableTickCount([out] ULONG *pPatTickCount); } [ object, uuid(CD51F1E0-7BE9-4123-8482-A2A796C0A6B0), helpstring("IBDA_ConditionalAccess Interface"), pointer_default(unique) ] interface IBDA_ConditionalAccess : IUnknown { HRESULT get_SmartCardStatus([out] SmartCardStatusType *pCardStatus, [out] SmartCardAssociationType *pCardAssociation, [out] BSTR *pbstrCardError, [out] VARIANT_BOOL *pfOOBLocked); HRESULT get_SmartCardInfo([out] BSTR *pbstrCardName, [out] BSTR *pbstrCardManufacturer, [out] VARIANT_BOOL *pfDaylightSavings, [out] BYTE *pbyRatingRegion, [out] LONG *plTimeZoneOffsetMinutes, [out] BSTR *pbstrLanguage, [out] EALocationCodeType *pEALocationCode); HRESULT get_SmartCardApplications([in, out] ULONG *pulcApplications, [in] ULONG ulcApplicationsMax, [in, out, size_is(ulcApplicationsMax)] SmartCardApplication rgApplications[]); HRESULT get_Entitlement([in] USHORT usVirtualChannel, [out] EntitlementType *pEntitlement); HRESULT TuneByChannel([in] USHORT usVirtualChannel); HRESULT SetProgram([in] USHORT usProgramNumber); HRESULT AddProgram([in] USHORT usProgramNumber); HRESULT RemoveProgram([in] USHORT usProgramNumber); HRESULT GetModuleUI([in] BYTE byDialogNumber, [out] BSTR *pbstrURL); HRESULT InformUIClosed([in] BYTE byDialogNumber, [in] UICloseReasonType CloseReason); } [ object, uuid(20e80cb5-c543-4c1b-8eb3-49e719eee7d4), helpstring("IBDA_DiagnosticProperties Interface"), pointer_default(unique), ] interface IBDA_DiagnosticProperties : IPropertyBag { } [ object, uuid(F98D88B0-1992-4cd6-A6D9-B9AFAB99330D), helpstring("IBDA_DRM Interface"), pointer_default(unique), ] interface IBDA_DRM : IUnknown { HRESULT GetDRMPairingStatus([out] DWORD *pdwStatus, [out] HRESULT *phError); HRESULT PerformDRMPairing(BOOL fSync); } [ object, uuid(7F0B3150-7B81-4ad4-98E3-7E9097094301), helpstring("IBDA_NameValueService Interface"), pointer_default(unique) ] interface IBDA_NameValueService : IUnknown { HRESULT GetValueNameByIndex([in] ULONG ulIndex, [out] BSTR *pbstrName); HRESULT GetValue([in] BSTR bstrName, [in] BSTR bstrLanguage, [out] BSTR *pbstrValue); HRESULT SetValue([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage, [in] BSTR bstrName, [in] BSTR bstrValue, [in] ULONG ulReserved); } [ object, uuid(497C3418-23CB-44ba-BB62-769F506FCEA7), helpstring("IBDA_ConditionalAccessEx Interface"), pointer_default(unique) ] interface IBDA_ConditionalAccessEx : IUnknown { HRESULT CheckEntitlementToken([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage, [in] BDA_CONDITIONALACCESS_REQUESTTYPE RequestType, [in] ULONG ulcbEntitlementTokenLen, [in, size_is(ulcbEntitlementTokenLen)] BYTE *pbEntitlementToken, [out] ULONG *pulDescrambleStatus); HRESULT SetCaptureToken([in] ULONG ulcbCaptureTokenLen, [in, size_is(ulcbCaptureTokenLen)] BYTE *pbCaptureToken); HRESULT OpenBroadcastMmi([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage, [in] ULONG EventId); HRESULT CloseMmiDialog([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage, [in] ULONG ulDialogNumber, [in] BDA_CONDITIONALACCESS_MMICLOSEREASON ReasonCode, [out] ULONG *pulSessionResult); HRESULT CreateDialogRequestNumber([out] ULONG *pulDialogRequestNumber); } [ object, uuid(5E68C627-16C2-4e6c-B1E2-D00170CDAA0F), helpstring("IBDA_ISDBConditionalAccess Interface"), pointer_default(unique) ] interface IBDA_ISDBConditionalAccess : IUnknown { HRESULT SetIsdbCasRequest([in] ULONG ulRequestId, [in] ULONG ulcbRequestBufferLen, [in, size_is(ulcbRequestBufferLen)] BYTE *pbRequestBuffer); } [ object, uuid(207C413F-00DC-4c61-BAD6-6FEE1FF07064), helpstring("IBDA_EventingService Interface"), pointer_default(unique) ] interface IBDA_EventingService : IUnknown { HRESULT CompleteEvent([in] ULONG ulEventID, [in] ULONG ulEventResult); } [ object, uuid(7DEf4C09-6E66-4567-A819-F0E17F4A81AB), helpstring("IBDA_AUX Interface"), pointer_default(unique) ] interface IBDA_AUX : IUnknown { HRESULT QueryCapabilities([out] DWORD *pdwNumAuxInputsBSTR); HRESULT EnumCapability([in] DWORD dwIndex, [out] DWORD *dwInputID, [out] GUID *pConnectorType, [out] DWORD *ConnTypeNum, [out] DWORD *NumVideoStds, [out] ULONGLONG *AnalogStds); } [ object, uuid(3a8bad59-59fe-4559-a0ba-396cfaa98ae3), helpstring("IBDA_ Encoder Interface"), pointer_default(unique) ] interface IBDA_Encoder : IUnknown { HRESULT QueryCapabilities([out] DWORD *NumAudioFmts, [out] DWORD *NumVideoFmts); HRESULT EnumAudioCapability([in] DWORD FmtIndex, [out] DWORD *MethodID, [out] DWORD *AlgorithmType, [out] DWORD *SamplingRate, [out] DWORD *BitDepth, [out] DWORD *NumChannels); HRESULT EnumVideoCapability([in] DWORD FmtIndex, [out] DWORD *MethodID, [out] DWORD *AlgorithmType, [out] DWORD *VerticalSize, [out] DWORD *HorizontalSize, [out] DWORD *AspectRatio, [out] DWORD *FrameRateCode, [out] DWORD *ProgressiveSequence); HRESULT SetParameters([in] DWORD AudioBitrateMode, [in] DWORD AudioBitrate, [in] DWORD AudioMethodID, [in] DWORD AudioProgram, [in] DWORD VideoBitrateMode, [in] DWORD VideoBitrate, [in] DWORD VideoMethodID); HRESULT GetState([out] DWORD *AudioBitrateMax, [out] DWORD *AudioBitrateMin, [out] DWORD *AudioBitrateMode, [out] DWORD *AudioBitrateStepping, [out] DWORD *AudioBitrate, [out] DWORD *AudioMethodID, [out] DWORD *AvailableAudioPrograms, [out] DWORD *AudioProgram, [out] DWORD *VideoBitrateMax, [out] DWORD *VideoBitrateMin, [out] DWORD *VideoBitrateMode, [out] DWORD *VideoBitrate, [out] DWORD *VideoBitrateStepping, [out] DWORD *VideoMethodID, [out] DWORD *SignalSourceID, [out] ULONGLONG *SignalFormat, [out] BOOL *SignalLock, [out] LONG *SignalLevel, [out] DWORD *SignalToNoiseRatio); } [ object, uuid(138adc7e-58ae-437f-b0b4-c9fe19d5b4ac), helpstring("IBDA_ FDC Interface"), pointer_default(unique) ] interface IBDA_FDC : IUnknown { HRESULT GetStatus([out] DWORD *CurrentBitrate, [out] BOOL *CarrierLock, [out] DWORD *CurrentFrequency, [out] BOOL *CurrentSpectrumInversion, [out] BSTR *CurrentPIDList, [out] BSTR *CurrentTIDList, [out] BOOL *Overflow); HRESULT RequestTables([in] BSTR TableIDs); HRESULT AddPid([in] BSTR PidsToAdd, [out] DWORD *RemainingFilterEntries); HRESULT RemovePid([in] BSTR PidsToRemove); HRESULT AddTid([in] BSTR TidsToAdd, [out] BSTR *CurrentTidList); HRESULT RemoveTid([in] BSTR TidsToRemove); HRESULT GetTableSection([out] DWORD *Pid, [in] DWORD MaxBufferSize, [out] DWORD *ActualSize, [out] BYTE *SecBuffer); } [ object, uuid(C0AFCB73-23E7-4bc6-BAFA-FDC167B4719F), helpstring("IBDA_ GuideDataDeliveryService Interface"), pointer_default(unique) ] interface IBDA_GuideDataDeliveryService: IUnknown { HRESULT GetGuideDataType([out] GUID *pguidDataType); HRESULT GetGuideData([in, out] ULONG *pulcbBufferLen, [out] BYTE *pbBuffer, [out] ULONG *pulGuideDataPercentageProgress); HRESULT RequestGuideDataUpdate(void); HRESULT GetTuneXmlFromServiceIdx([in] ULONG64 ul64ServiceIdx, [out] BSTR *pbstrTuneXml); HRESULT GetServices([in, out] ULONG *pulcbBufferLen, [out] BYTE *pbBuffer); HRESULT GetServiceInfoFromTuneXml([in] BSTR bstrTuneXml, [out] BSTR *pbstrServiceDescription); } [ object, uuid(BFF6B5BB-B0AE-484c-9DCA-73528FB0B46E), helpstring("IBDA_DRMService Interface"), pointer_default(unique) ] interface IBDA_DRMService: IUnknown { HRESULT SetDRM([in] GUID *puuidNewDrm); HRESULT GetDRMStatus([out] BSTR *pbstrDrmUuidList, [out] GUID *DrmUuid); } [ object, uuid(4BE6FA3D-07CD-4139-8B80-8C18BA3AEC88), helpstring("IBDA_WMDRMSession Interface"), pointer_default(unique) ] interface IBDA_WMDRMSession: IUnknown { HRESULT GetStatus([out] ULONG *MaxCaptureToken, [out] ULONG *MaxStreamingPid, [out] ULONG *MaxLicense, [out] ULONG *MinSecurityLevel, [out] ULONG *RevInfoSequenceNumber, [out] ULONGLONG *RevInfoIssuedTime, [out] ULONG *RevInfoTTL, [out] ULONG *RevListVersion, [out] ULONG *ulState); HRESULT SetRevInfo([in] ULONG ulRevInfoLen, [in, size_is(ulRevInfoLen)] BYTE* pbRevInfo); HRESULT SetCrl([in] ULONG ulCrlLen, [in, size_is(ulCrlLen)] BYTE *pbCrlLen); HRESULT TransactMessage([in] ULONG ulcbRequest, [in, size_is(ulcbRequest)] BYTE *pbRequest, [in, out] ULONG *pulcbResponse, [in, out] BYTE *pbResponse); HRESULT GetLicense([in] GUID *uuidKey, [in, out] ULONG *pulPackageLen, [in, out] BYTE *pbPackage); HRESULT ReissueLicense([in] GUID *uuidKey); HRESULT RenewLicense([in] ULONG ulInXmrLicenseLen, [in, size_is(ulInXmrLicenseLen)] BYTE *pbInXmrLicense, [in] ULONG ulEntitlementTokenLen, [in, size_is(ulEntitlementTokenLen)] BYTE *pbEntitlementToken, [out] ULONG *pulDescrambleStatus, [in, out] ULONG *pulOutXmrLicenseLen, [in, out] BYTE *pbOutXmrLicense); HRESULT GetKeyInfo([in, out] ULONG *pulKeyInfoLen, [in, out] BYTE *pbKeyInfo); } [ object, uuid(86D979CF-A8A7-4f94-B5FB-14C0ACA68FE6), helpstring("IBDA_WMDRMTuner Interface"), pointer_default(unique) ] interface IBDA_WMDRMTuner: IUnknown { HRESULT PurchaseEntitlement([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage, [in] ULONG ulPurchaseTokenLen, [in, size_is(ulPurchaseTokenLen)] BYTE *pbPurchaseToken, [out] ULONG *pulDescrambleStatus, [in, out] ULONG *pulCaptureTokenLen, [in, out] BYTE *pbCaptureToken); HRESULT CancelCaptureToken([in] ULONG ulCaptureTokenLen, [in, size_is(ulCaptureTokenLen)] BYTE *pbCaptureToken); HRESULT SetPidProtection([in] ULONG ulPid, [in] GUID *uuidKey); HRESULT GetPidProtection([in] ULONG pulPid, [out] GUID *uuidKey); HRESULT SetSyncValue([in] ULONG ulSyncValue); HRESULT GetStartCodeProfile([in, out] ULONG *pulStartCodeProfileLen, [in, out] BYTE *pbStartCodeProfile); } [ object, uuid(1F9BC2A5-44A3-4c52-AAB1-0BBCE5A1381D), helpstring("IBDA_DRIDRMService Interface"), pointer_default(unique) ] interface IBDA_DRIDRMService: IUnknown { HRESULT SetDRM([in] BSTR bstrNewDrm); HRESULT GetDRMStatus([out] BSTR *pbstrDrmUuidList, [out] GUID *DrmUuid); HRESULT GetPairingStatus([in, out] BDA_DrmPairingError *penumPairingStatus); } [ object, uuid(05C690F8-56DB-4bb2-B053-79C12098BB26), helpstring("IBDA_DRIWMDRMSession Interface"), pointer_default(unique) ] interface IBDA_DRIWMDRMSession: IUnknown { HRESULT AcknowledgeLicense([in] HRESULT hrLicenseAck); HRESULT ProcessLicenseChallenge([in] DWORD dwcbLicenseMessage, [in, size_is(dwcbLicenseMessage)] BYTE *pbLicenseMessage, [in, out] DWORD *pdwcbLicenseResponse, [in, out, size_is(* pdwcbLicenseResponse)] BYTE **ppbLicenseResponse); HRESULT ProcessRegistrationChallenge([in] DWORD dwcbRegistrationMessage, [in, size_is(dwcbRegistrationMessage)] BYTE *pbRegistrationMessage, [in, out] DWORD *pdwcbRegistrationResponse, [in, out] BYTE **ppbRegistrationResponse); HRESULT SetRevInfo([in] DWORD dwRevInfoLen, [in, size_is(dwRevInfoLen)] BYTE *pbRevInfo, [in, out] DWORD *pdwResponse); HRESULT SetCrl([in] DWORD dwCrlLen, [in, size_is(dwCrlLen)] BYTE *pbCrlLen, [in, out] DWORD *pdwResponse); HRESULT GetHMSAssociationData(void); HRESULT GetLastCardeaError([in, out] DWORD *pdwError); } [ object, uuid(942AAFEC-4C05-4c74-B8EB-8706C2A4943F), helpstring("IBDA_MUX Interface"), pointer_default(unique) ] interface IBDA_MUX: IUnknown { HRESULT SetPidList([in] ULONG ulPidListCount, [in, size_is(ulPidListCount)] BDA_MUX_PIDLISTITEM *pbPidListBuffer); HRESULT GetPidList([in, out] ULONG *pulPidListCount, [in, out] BDA_MUX_PIDLISTITEM *pbPidListBuffer); } [ object, uuid(1DCFAFE9-B45E-41b3-BB2A-561EB129AE98), helpstring("IBDA_TransportStreamSelector Interface"), pointer_default(unique) ] interface IBDA_TransportStreamSelector : IUnknown { HRESULT SetTSID([in] USHORT usTSID); HRESULT GetTSInformation([in, out] ULONG *pulTSInformationBufferLen, [out, size_is(*pulTSInformationBufferLen)] BYTE *pbTSInformationBuffer); } [ object, uuid(53B14189-E478-4b7a-A1FF-506DB4B99DFE), helpstring("IBDA_UserActivityService Interface"), pointer_default(unique) ] interface IBDA_UserActivityService: IUnknown { HRESULT SetCurrentTunerUseReason([in] DWORD dwUseReason); HRESULT GetUserActivityInterval([out] DWORD *pdwActivityInterval); HRESULT UserActivityDetected(void); } ================================================ FILE: wine/windows/bdaiface_enums.h ================================================ /* * Copyright 2013 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef BDAIFACE_ENUMS_H #define BDAIFACE_ENUMS_H typedef enum EntitlementType { Entitled, NotEntitled, TechnicalFailure } EntitlementType; typedef enum BDA_DrmPairingError { BDA_DrmPairing_Succeeded, BDA_DrmPairing_HardwareFailure, BDA_DrmPairing_NeedRevocationData, BDA_DrmPairing_NeedIndiv, BDA_DrmPairing_Other, BDA_DrmPairing_DrmInitFailed, BDA_DrmPairing_DrmNotPaired, BDA_DrmPairing_DrmRePairSoon, BDA_DrmPairing_Aborted, BDA_DrmPairing_NeedSDKUpdate } BDA_DrmPairingError; typedef enum UICloseReasonType { NotReady, UserClosed, SystemClosed, DeviceClosed, ErrorClosed } UICloseReasonType; typedef enum LocationCodeSchemeType { SCTE_18 } LocationCodeSchemeType; typedef struct SmartCardApplication { ApplicationTypeType ApplicationType; USHORT ApplicationVersion; BSTR pbstrApplicationName; BSTR pbstrApplicationURL; } SmartCardApplication; typedef struct EALocationCodeType { LocationCodeSchemeType LocationCodeScheme; BYTE state_code; BYTE county_subdivision; WORD county_code; } EALocationCodeType; typedef enum SmartCardStatusType { CardInserted, CardRemoved, CardError, CardDataChanged, CardFirmwareUpgrade } SmartCardStatusType; typedef enum SmartCardAssociationType { NotAssociated, Associated, AssociationUnknown } SmartCardAssociationType; #endif /* BDAIFACE_ENUMS_H */ ================================================ FILE: wine/windows/bdatypes.h ================================================ /* * Copyright 2013 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _BDATYPES_ #define _BDATYPES_ typedef struct _BDANODE_DESCRIPTOR { ULONG ulBdaNodeType; GUID guidFunction; GUID guidName; } BDANODE_DESCRIPTOR, *PBDANODE_DESCRIPTOR; typedef struct _BDA_SIGNAL_TIMEOUTS { ULONG ulCarrierTimeoutMs; ULONG ulScanningTimeoutMs; ULONG ulTuningTimeoutMs; } BDA_SIGNAL_TIMEOUTS, *PBDA_SIGNAL_TIMEOUTS; typedef struct _BDA_TEMPLATE_CONNECTION { ULONG FromNodeType; ULONG FromNodePinType; ULONG ToNodeType; ULONG ToNodePinType; } BDA_TEMPLATE_CONNECTION, *PBDA_TEMPLATE_CONNECTION; typedef enum MEDIA_SAMPLE_CONTENT { MEDIA_TRANSPORT_PACKET, MEDIA_ELEMENTARY_STREAM, MEDIA_MPEG2_PSI, MEDIA_TRANSPORT_PAYLOAD } MEDIA_SAMPLE_CONTENT; typedef struct { ULONG ulPID; MEDIA_SAMPLE_CONTENT MediaSampleContent; } PID_MAP; typedef enum MUX_PID_TYPE { PID_OTHER = -1, PID_ELEMENTARY_STREAM, PID_MPEG2_SECTION_PSI_SI, } MUX_PID_TYPE; #include typedef struct _BDA_MUX_PIDLISTITEM { USHORT usPIDNumber; USHORT usProgramNumber; MUX_PID_TYPE ePIDType; } BDA_MUX_PIDLISTITEM, *PBDA_MUX_PIDLISTITEM; #include typedef enum BDA_CONDITIONALACCESS_REQUESTTYPE { CONDITIONALACCESS_ACCESS_UNSPECIFIED, CONDITIONALACCESS_ACCESS_NOT_POSSIBLE, CONDITIONALACCESS_ACCESS_POSSIBLE, CONDITIONALACCESS_ACCESS_POSSIBLE_NO_STREAMING_DISRUPTION } BDA_CONDITIONALACCESS_REQUESTTYPE; typedef enum BDA_CONDITIONALACCESS_MMICLOSEREASON { CONDITIONALACCESS_UNSPECIFIED, CONDITIONALACCESS_CLOSED_ITSELF, CONDITIONALACCESS_TUNER_REQUESTED_CLOSE, CONDITIONALACCESS_DIALOG_TIMEOUT, CONDITIONALACCESS_DIALOG_FOCUS_CHANGE, CONDITIONALACCESS_DIALOG_USER_DISMISSED, CONDITIONALACCESS_DIALOG_USER_NOT_AVAILABLE } BDA_CONDITIONALACCESS_MMICLOSEREASON; typedef enum BDA_CONDITIONALACCESS_SESSION_RESULT { CONDITIONALACCESS_SUCCESSFULL, CONDITIONALACCESS_ENDED_NOCHANGE, CONDITIONALACCESS_ABORTED } BDA_CONDITIONALACCESS_SESSION_RESULT; typedef enum BDA_DISCOVERY_STATE { BDA_DISCOVERY_UNSPECIFIED, BDA_DISCOVERY_REQUIRED, BDA_DISCOVERY_COMPLETE } BDA_DISCOVERY_STATE; typedef enum ApplicationTypeType { SCTE28_ConditionalAccess, SCTE28_POD_Host_Binding_Information, SCTE28_IPService, SCTE28_NetworkInterface_SCTE55_2, SCTE28_NetworkInterface_SCTE55_1, SCTE28_CopyProtection, SCTE28_Diagnostic, SCTE28_Undesignated, SCTE28_Reserved, } ApplicationTypeType; typedef enum GuardInterval { BDA_GUARD_NOT_SET = -1, BDA_GUARD_NOT_DEFINED, BDA_GUARD_1_32, BDA_GUARD_1_16, BDA_GUARD_1_8, BDA_GUARD_1_4, BDA_GUARD_1_128, BDA_GUARD_19_128, BDA_GUARD_19_256, BDA_GUARD_MAX, } GuardInterval; typedef enum TransmissionMode { BDA_XMIT_MODE_NOT_SET = -1, BDA_XMIT_MODE_NOT_DEFINED, BDA_XMIT_MODE_2K, BDA_XMIT_MODE_8K, BDA_XMIT_MODE_4K, BDA_XMIT_MODE_2K_INTERLEAVED, BDA_XMIT_MODE_4K_INTERLEAVED, BDA_XMIT_MODE_1K, BDA_XMIT_MODE_16K, BDA_XMIT_MODE_32K, BDA_XMIT_MODE_MAX, } TransmissionMode; typedef enum SpectralInversion { BDA_SPECTRAL_INVERSION_NOT_SET = -1, BDA_SPECTRAL_INVERSION_NOT_DEFINED, BDA_SPECTRAL_INVERSION_AUTOMATIC, BDA_SPECTRAL_INVERSION_NORMAL, BDA_SPECTRAL_INVERSION_INVERTED, BDA_SPECTRAL_INVERSION_MAX } SpectralInversion; typedef enum BinaryConvolutionCodeRate { BDA_BCC_RATE_NOT_SET = -1, BDA_BCC_RATE_NOT_DEFINED, BDA_BCC_RATE_1_2, BDA_BCC_RATE_2_3, BDA_BCC_RATE_3_4, BDA_BCC_RATE_3_5, BDA_BCC_RATE_4_5, BDA_BCC_RATE_5_6, BDA_BCC_RATE_5_11, BDA_BCC_RATE_7_8, BDA_BCC_RATE_1_4, BDA_BCC_RATE_1_3, BDA_BCC_RATE_2_5, BDA_BCC_RATE_6_7, BDA_BCC_RATE_8_9, BDA_BCC_RATE_9_10, BDA_BCC_RATE_MAX, } BinaryConvolutionCodeRate; typedef enum Polarisation { BDA_POLARISATION_NOT_SET = -1, BDA_POLARISATION_NOT_DEFINED, BDA_POLARISATION_LINEAR_H, BDA_POLARISATION_LINEAR_V, BDA_POLARISATION_CIRCULAR_L, BDA_POLARISATION_CIRCULAR_R, BDA_POLARISATION_MAX, } Polarisation; typedef enum FECMethod { BDA_FEC_METHOD_NOT_SET = -1, BDA_FEC_METHOD_NOT_DEFINED, BDA_FEC_VITERBI, BDA_FEC_RS_204_188, BDA_FEC_LDPC, BDA_FEC_BCH, BDA_FEC_RS_147_130, BDA_FEC_MAX, } FECMethod; typedef enum ModulationType { BDA_MOD_NOT_SET = -1, BDA_MOD_NOT_DEFINED, BDA_MOD_16QAM, BDA_MOD_32QAM, BDA_MOD_64QAM, BDA_MOD_80QAM, BDA_MOD_96QAM, BDA_MOD_112QAM, BDA_MOD_128QAM, BDA_MOD_160QAM, BDA_MOD_192QAM, BDA_MOD_224QAM, BDA_MOD_256QAM, BDA_MOD_320QAM, BDA_MOD_384QAM, BDA_MOD_448QAM, BDA_MOD_512QAM, BDA_MOD_640QAM, BDA_MOD_768QAM, BDA_MOD_896QAM, BDA_MOD_1024QAM, BDA_MOD_QPSK, BDA_MOD_BPSK, BDA_MOD_OQPSK, BDA_MOD_8VSB, BDA_MOD_16VSB, BDA_MOD_ANALOG_AMPLITUDE, BDA_MOD_ANALOG_FREQUENCY, BDA_MOD_8PSK, BDA_MOD_RF, BDA_MOD_16APSK, BDA_MOD_32APSK, BDA_MOD_NBC_QPSK, BDA_MOD_NBC_8PSK, BDA_MOD_DIRECTV, BDA_MOD_ISDB_T_TMCC, BDA_MOD_ISDB_S_TMCC, BDA_MOD_MAX, } ModulationType; typedef enum RollOff { BDA_ROLL_OFF_NOT_SET = -1, BDA_ROLL_OFF_NOT_DEFINED, BDA_ROLL_OFF_20, BDA_ROLL_OFF_25, BDA_ROLL_OFF_35, BDA_ROLL_OFF_MAX, } RollOff; typedef enum Pilot { BDA_PILOT_NOT_SET = -1, BDA_PILOT_NOT_DEFINED, BDA_PILOT_OFF, BDA_PILOT_ON, BDA_PILOT_MAX, } Pilot; #endif /* _BDATYPES_ */ ================================================ FILE: wine/windows/binres.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733ab1-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IBindResource : IUnknown { [local] HRESULT Bind([in] IUnknown *pUnkOuter, [in] LPCOLESTR pwszURL, [in] DBBINDURLFLAG dwBindURLFlags, [in] REFGUID rguid, [in] REFIID riid, [in] IAuthenticate *pAuthenticate, [in, out, unique] DBIMPLICITSESSION *pImplSession, [in, out, unique] DBBINDURLSTATUS *pdwBindStatus, [out, iid_is(riid)] IUnknown **ppUnk); [call_as(Bind)] HRESULT RemoteBind([in] IUnknown *pUnkOuter, [in] LPCOLESTR pwszURL, [in] DBBINDURLFLAG dwBindURLFlags, [in] REFGUID rguid, [in] REFIID riid, [in] IAuthenticate *pAuthenticate, [in] IUnknown *pSessionUnkOuter, [in, unique] IID *piid, [in, out, unique, iid_is(piid)] IUnknown **ppSession, [in, out, unique] DBBINDURLSTATUS *pdwBindStatus, [out, iid_is(riid)] IUnknown **ppUnk); } ================================================ FILE: wine/windows/bits.idl ================================================ /* * Background Intelligent Transfer Service (BITS) interface * * Copyright 2007 Google (Roy Shea) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; #endif cpp_quote("#include \"bitsmsg.h\"") cpp_quote("#define BG_SIZE_UNKNOWN (UINT64)(-1)") cpp_quote("#define BG_NOTIFY_JOB_TRANSFERRED 0x0001") cpp_quote("#define BG_NOTIFY_JOB_ERROR 0x0002") cpp_quote("#define BG_NOTIFY_DISABLE 0x0004") cpp_quote("#define BG_NOTIFY_JOB_MODIFICATION 0x0008") cpp_quote("#define BG_NOTIFY_FILE_TRANSFERRED 0x0010") cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef EnumJobs") cpp_quote("#undef GetJob") cpp_quote("#endif") #define BG_ENUM_SIZEIS(maxcount) maxcount #define BG_ENUM_LENGTHIS(maxcount,lengthptr) lengthptr ? *lengthptr : maxcount [ uuid(01b7bd23-fb88-4a77-8490-5891d3e4653a), odl ] interface IBackgroundCopyFile : IUnknown { typedef struct _BG_FILE_PROGRESS { UINT64 BytesTotal; UINT64 BytesTransferred; BOOL Completed; } BG_FILE_PROGRESS; HRESULT GetRemoteName( [out] LPWSTR *pVal ); HRESULT GetLocalName( [out] LPWSTR *pVal ); HRESULT GetProgress( [out] BG_FILE_PROGRESS *pVal ); } [ uuid(ca51e165-c365-424c-8d41-24aaa4ff3c40), odl ] interface IEnumBackgroundCopyFiles: IUnknown { HRESULT Next( [in] ULONG celt, [out,size_is(BG_ENUM_SIZEIS(celt)),length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyFile **rgelt, [in,out,unique] ULONG *pceltFetched ); HRESULT Skip( [in] ULONG celt ); HRESULT Reset(); HRESULT Clone( [out] IEnumBackgroundCopyFiles **ppenum ); HRESULT GetCount( [out] ULONG *puCount ); } [ uuid(19c613a0-fcb8-4f28-81ae-897c3d078f81), odl ] interface IBackgroundCopyError : IUnknown { typedef enum { BG_ERROR_CONTEXT_NONE = 0, BG_ERROR_CONTEXT_UNKNOWN = 1, BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER = 2, BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION =3, BG_ERROR_CONTEXT_LOCAL_FILE = 4, BG_ERROR_CONTEXT_REMOTE_FILE = 5, BG_ERROR_CONTEXT_GENERAL_TRANSPORT = 6, BG_ERROR_CONTEXT_REMOTE_APPLICATION =7, } BG_ERROR_CONTEXT; HRESULT GetError( [out,ref] BG_ERROR_CONTEXT *pContext, [out,ref] HRESULT *pCode ); HRESULT GetFile( [out] IBackgroundCopyFile **pVal ); HRESULT GetErrorDescription( [in] DWORD LanguageId, [out,ref] LPWSTR *pErrorDescription ); HRESULT GetErrorContextDescription( [in] DWORD LanguageId, [out,ref] LPWSTR *pContextDescription ); HRESULT GetProtocol( [out,ref] LPWSTR *pProtocol ); } [ uuid(37668d37-507e-4160-9316-26306d150b12), odl ] interface IBackgroundCopyJob : IUnknown { typedef struct _BG_FILE_INFO { LPWSTR RemoteName; LPWSTR LocalName; } BG_FILE_INFO; typedef struct _BG_JOB_PROGRESS { UINT64 BytesTotal; UINT64 BytesTransferred; ULONG FilesTotal; ULONG FilesTransferred; } BG_JOB_PROGRESS; typedef struct _BG_JOB_TIMES { FILETIME CreationTime; FILETIME ModificationTime; FILETIME TransferCompletionTime; } BG_JOB_TIMES; typedef enum { BG_JOB_PRIORITY_FOREGROUND = 0, BG_JOB_PRIORITY_HIGH = 1, BG_JOB_PRIORITY_NORMAL = 2, BG_JOB_PRIORITY_LOW = 3 } BG_JOB_PRIORITY; typedef enum { BG_JOB_STATE_QUEUED = 0, BG_JOB_STATE_CONNECTING = 1, BG_JOB_STATE_TRANSFERRING = 2, BG_JOB_STATE_SUSPENDED = 3, BG_JOB_STATE_ERROR = 4, BG_JOB_STATE_TRANSIENT_ERROR = 5, BG_JOB_STATE_TRANSFERRED = 6, BG_JOB_STATE_ACKNOWLEDGED = 7, BG_JOB_STATE_CANCELLED = 8 } BG_JOB_STATE; typedef enum { BG_JOB_TYPE_DOWNLOAD = 0, BG_JOB_TYPE_UPLOAD = 1, BG_JOB_TYPE_UPLOAD_REPLY = 2 } BG_JOB_TYPE; typedef enum { BG_JOB_PROXY_USAGE_PRECONFIG, BG_JOB_PROXY_USAGE_NO_PROXY, BG_JOB_PROXY_USAGE_OVERRIDE, BG_JOB_PROXY_USAGE_AUTODETECT } BG_JOB_PROXY_USAGE; HRESULT AddFileSet( [in] ULONG cFileCount, [in,size_is(cFileCount)] BG_FILE_INFO *pFileSet ); HRESULT AddFile( [in] LPCWSTR RemoteUrl, [in] LPCWSTR LocalName ); HRESULT EnumFiles( [out] IEnumBackgroundCopyFiles **pEnum ); HRESULT Suspend(); HRESULT Resume(); HRESULT Cancel(); HRESULT Complete(); HRESULT GetId( [out] GUID *pVal ); HRESULT GetType( [out] BG_JOB_TYPE *pVal ); HRESULT GetProgress( [out] BG_JOB_PROGRESS *pVal ); HRESULT GetTimes( [out] BG_JOB_TIMES *pVal ); HRESULT GetState( [out] BG_JOB_STATE *pVal ); HRESULT GetError( [out] IBackgroundCopyError **ppError ); HRESULT GetOwner( [out] LPWSTR *pVal ); HRESULT SetDisplayName( [in] LPCWSTR Val ); HRESULT GetDisplayName( [out] LPWSTR *pVal ); HRESULT SetDescription( [in] LPCWSTR Val ); HRESULT GetDescription( [out] LPWSTR *pVal ); HRESULT SetPriority( [in] BG_JOB_PRIORITY Val ); HRESULT GetPriority( [out] BG_JOB_PRIORITY *pVal ); HRESULT SetNotifyFlags( [in] ULONG Val ); HRESULT GetNotifyFlags( [out] ULONG *pVal ); HRESULT SetNotifyInterface( [in] IUnknown *Val ); HRESULT GetNotifyInterface( [out] IUnknown ** pVal ); HRESULT SetMinimumRetryDelay( [in] ULONG Seconds ); HRESULT GetMinimumRetryDelay( [out] ULONG *Seconds ); HRESULT SetNoProgressTimeout( [in] ULONG Seconds ); HRESULT GetNoProgressTimeout( [out] ULONG *Seconds ); HRESULT GetErrorCount( [out] ULONG *Errors ); HRESULT SetProxySettings( [in] BG_JOB_PROXY_USAGE ProxyUsage, [in,string,unique] const WCHAR *ProxyList, [in,string,unique] const WCHAR *ProxyBypassList ); HRESULT GetProxySettings( [out] BG_JOB_PROXY_USAGE *pProxyUsage, [out] LPWSTR *pProxyList, [out] LPWSTR *pProxyBypassList ); HRESULT TakeOwnership(); } [ uuid(1af4f612-3b71-466f-8f58-7b6f73ac57ad), odl ] interface IEnumBackgroundCopyJobs : IUnknown { HRESULT Next( [in] ULONG celt, [out,size_is(BG_ENUM_SIZEIS(celt)),length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyJob **rgelt, [in,out,unique] ULONG *pceltFetched ); HRESULT Skip( [in] ULONG celt ); HRESULT Reset(); HRESULT Clone( [out] IEnumBackgroundCopyJobs **ppenum ); HRESULT GetCount( [out] ULONG *puCount ); } [ uuid(97ea99c7-0186-4ad4-8df9-c5b4e0ed6b22), odl ] interface IBackgroundCopyCallback : IUnknown { HRESULT JobTransferred( [in] IBackgroundCopyJob *pJob ); HRESULT JobError( [in] IBackgroundCopyJob *pJob, [in] IBackgroundCopyError *pError ); HRESULT JobModification( [in] IBackgroundCopyJob *pJob, [in] DWORD dwReserved ); } [ uuid(5ce34c0d-0dc9-4c1f-897c-daa1b78cee7c), odl ] interface IBackgroundCopyManager : IUnknown { cpp_quote("#define BG_JOB_ENUM_ALL_USERS 0x0001") HRESULT CreateJob( [in] LPCWSTR DisplayName, [in] BG_JOB_TYPE Type, [out] GUID *pJobId, [out] IBackgroundCopyJob **ppJob ); HRESULT GetJob( [in] REFGUID jobID, [out] IBackgroundCopyJob **ppJob ); HRESULT EnumJobs( [in] DWORD dwFlags, [out] IEnumBackgroundCopyJobs **ppEnum ); HRESULT GetErrorDescription( [in] HRESULT hResult, [in] DWORD LanguageId, [out] LPWSTR *pErrorDescription); } [ uuid(1deeb74f-7915-4560-b558-918c83f176a6), version(1.0) ] library BackgroundCopyManager { [ uuid(4991d34b-80a1-4291-83b6-3328366b9097), ] coclass BackgroundCopyManager { [default] interface IBackgroundCopyManager; }; interface IBackgroundCopyCallback; } cpp_quote("#include \"bits1_5.h\"") ================================================ FILE: wine/windows/bits1_5.idl ================================================ /* * Background Intelligent Transfer Service (BITS) 1.5 interface * * Copyright 2008 Google (Dan Hipschman) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef DO_NO_IMPORTS import "bits.idl"; #endif [ uuid(54b50739-686f-45eb-9dff-d6a9a0faa9af), odl ] interface IBackgroundCopyJob2 : IBackgroundCopyJob { HRESULT SetNotifyCmdLine([unique] LPCWSTR prog, [unique] LPCWSTR params); HRESULT GetNotifyCmdLine([out] LPWSTR *prog, [out] LPWSTR *params); typedef struct _BG_JOB_REPLY_PROGRESS { UINT64 BytesTotal; UINT64 BytesTransferred; } BG_JOB_REPLY_PROGRESS; HRESULT GetReplyProgress([in, out] BG_JOB_REPLY_PROGRESS *progress); HRESULT GetReplyData([out, size_is( , (unsigned long) *pLength)] byte **pBuffer, [in, out, unique] UINT64 *pLength); HRESULT SetReplyFileName([unique] LPCWSTR filename); HRESULT GetReplyFileName([out] LPWSTR *pFilename); typedef enum { BG_AUTH_TARGET_SERVER = 1, BG_AUTH_TARGET_PROXY } BG_AUTH_TARGET; typedef enum { BG_AUTH_SCHEME_BASIC = 1, BG_AUTH_SCHEME_DIGEST, BG_AUTH_SCHEME_NTLM, BG_AUTH_SCHEME_NEGOTIATE, BG_AUTH_SCHEME_PASSPORT } BG_AUTH_SCHEME; typedef struct { LPWSTR UserName; LPWSTR Password; } BG_BASIC_CREDENTIALS; typedef BG_BASIC_CREDENTIALS *PBG_BASIC_CREDENTIALS; typedef [switch_type(BG_AUTH_SCHEME)] union { [case(BG_AUTH_SCHEME_BASIC, BG_AUTH_SCHEME_DIGEST, BG_AUTH_SCHEME_NTLM, BG_AUTH_SCHEME_NEGOTIATE, BG_AUTH_SCHEME_PASSPORT)] BG_BASIC_CREDENTIALS Basic; [default] ; } BG_AUTH_CREDENTIALS_UNION; typedef struct { BG_AUTH_TARGET Target; BG_AUTH_SCHEME Scheme; [switch_is(Scheme)] BG_AUTH_CREDENTIALS_UNION Credentials; } BG_AUTH_CREDENTIALS; typedef BG_AUTH_CREDENTIALS *PBG_AUTH_CREDENTIALS; HRESULT SetCredentials(BG_AUTH_CREDENTIALS *cred); HRESULT RemoveCredentials(BG_AUTH_TARGET target, BG_AUTH_SCHEME scheme); } cpp_quote("#include \"bits2_0.h\"") ================================================ FILE: wine/windows/bits2_0.idl ================================================ /* * Background Intelligent Transfer Service (BITS) 2.0 interface * * Copyright 2015 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef DO_NO_IMPORTS import "bits.idl"; import "bits1_5.idl"; #endif cpp_quote("#define BG_COPY_FILE_OWNER 1") cpp_quote("#define BG_COPY_FILE_GROUP 2") cpp_quote("#define BG_COPY_FILE_DACL 4") cpp_quote("#define BG_COPY_FILE_SACL 8") cpp_quote("#define BG_COPY_FILE_ALL 15") cpp_quote("#define BG_LENGTH_TO_EOF (UINT64)(-1)") cpp_quote("#ifndef _BG_FILE_RANGE_DEFINED") cpp_quote("#define _BG_FILE_RANGE_DEFINED") typedef struct _BG_FILE_RANGE { UINT64 InitialOffset; UINT64 Length; } BG_FILE_RANGE; cpp_quote("#endif") [ uuid(443c8934-90ff-48ed-bcde-26f5c7450042), odl ] interface IBackgroundCopyJob3 : IBackgroundCopyJob2 { HRESULT ReplaceRemotePrefix( [in] LPCWSTR OldPrefix, [in] LPCWSTR NewPrefix); HRESULT AddFileWithRanges( [in] LPCWSTR RemoteUrl, [in] LPCWSTR LocalName, [in] DWORD RangeCount, [in, size_is(RangeCount)] BG_FILE_RANGE Ranges[]); HRESULT SetFileACLFlags( [in] DWORD Flags); HRESULT GetFileACLFlags( [out, ref] DWORD *Flags); } [ uuid(83e81b93-0873-474d-8a8c-f2018b1a939c), odl ] interface IBackgroundCopyFile2 : IBackgroundCopyFile { HRESULT GetFileRanges( [in, out, unique] DWORD *RangeCount, [out, size_is(, *RangeCount)] BG_FILE_RANGE **Ranges); HRESULT SetRemoteName( LPCWSTR Val); } [ uuid(2289a9af-dc96-486e-b268-89c9e3397c3d), version(1.0) ] library BackgroundCopyManager2_0 { [ uuid(6d18ad12-bde3-4393-b311-099c346e6df9) ] coclass BackgroundCopyManager2_0 { [default] interface IBackgroundCopyManager; }; interface IBackgroundCopyCallback; interface IBackgroundCopyJob3; interface IBackgroundCopyFile2; } cpp_quote("#include \"bits2_5.h\"") ================================================ FILE: wine/windows/bits2_5.idl ================================================ /* * Background Intelligent Transfer Service (BITS) 2.5 interface * * Copyright 2015 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef DO_NO_IMPORTS import "bits.idl"; import "bits1_5.idl"; import "bits2_0.idl"; #endif [ uuid(f1bd1079-9f01-4bdc-8036-f09b70095066), odl ] interface IBackgroundCopyJobHttpOptions : IUnknown { typedef enum { BG_CERT_STORE_LOCATION_CURRENT_USER, BG_CERT_STORE_LOCATION_LOCAL_MACHINE, BG_CERT_STORE_LOCATION_CURRENT_SERVICE, BG_CERT_STORE_LOCATION_SERVICES, BG_CERT_STORE_LOCATION_USERS, BG_CERT_STORE_LOCATION_CURRENT_USER_GROUP_POLICY, BG_CERT_STORE_LOCATION_LOCAL_MACHINE_GROUP_POLICY, BG_CERT_STORE_LOCATION_LOCAL_MACHINE_ENTERPRISE } BG_CERT_STORE_LOCATION; HRESULT SetClientCertificateByID( [in] BG_CERT_STORE_LOCATION StoreLocation, [in] LPCWSTR StoreName, [in, size_is(20), ref] BYTE *pCertHashBlob ); HRESULT SetClientCertificateByName( [in] BG_CERT_STORE_LOCATION StoreLocation, [in] LPCWSTR StoreName, [in] LPCWSTR SubjectName ); HRESULT RemoveClientCertificate(); HRESULT GetClientCertificate( [out, ref] BG_CERT_STORE_LOCATION *pStoreLocation, [out, ref] LPWSTR *pStoreName, [out, size_is(, 20), ref] BYTE **ppCertHashBlob, [out, ref] LPWSTR *pSubjectName ); HRESULT SetCustomHeaders( [in, unique] LPCWSTR RequestHeaders ); HRESULT GetCustomHeaders( [out] LPWSTR *pRequestHeaders ); HRESULT SetSecurityFlags( [in] ULONG Flags ); HRESULT GetSecurityFlags( [out, ref] ULONG *pFlags ); } [ uuid(4974177c-3bb6-4c37-9ff0-6b7426f0aba9), version(1.0) ] library BackgroundCopyManager2_5 { [ uuid(03ca98d6-ff5d-49b8-abc6-03dd84127020) ] coclass BackgroundCopyManager2_5 { [default] interface IBackgroundCopyManager; }; interface IBackgroundCopyCallback; interface IBackgroundCopyJobHttpOptions; } cpp_quote("#include \"bits3_0.h\"") ================================================ FILE: wine/windows/bits3_0.idl ================================================ /* * Background Intelligent Transfer Service (BITS) 3.0 interface * * Copyright 2013 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef DO_NO_IMPORTS import "bits.idl"; import "bits2_0.idl"; #endif [ uuid(659cdeac-489e-11d9-a9cd-000d56965251), odl ] interface IBackgroundCopyCallback2 : IBackgroundCopyCallback { HRESULT FileTransferred([in] IBackgroundCopyJob *job, [in] IBackgroundCopyFile *file); } [ uuid(659cdeae-489e-11d9-a9cd-000d56965251), odl ] interface IBackgroundCopyJob4 : IBackgroundCopyJob3 { cpp_quote("#define BG_JOB_ENABLE_PEERCACHING_CLIENT 0x0001") cpp_quote("#define BG_JOB_ENABLE_PEERCACHING_SERVER 0x0002") cpp_quote("#define BG_JOB_DISABLE_BRANCH_CACHE 0x0004") HRESULT SetPeerCachingFlags(DWORD flags); HRESULT GetPeerCachingFlags([out, ref] DWORD *flags); HRESULT GetOwnerIntegrityLevel([out, ref] ULONG *level); HRESULT GetOwnerElevationState([out, ref] BOOL *elevated); HRESULT SetMaximumDownloadTime(ULONG timeout); HRESULT GetMaximumDownloadTime([out,ref] ULONG *timeout); } [ uuid(659cdea6-489e-11d9-a9cd-000d56965251), lcid(0x0000), version(1.0) ] library BackgroundCopyManager3_0 { [ uuid(659cdea7-489e-11d9-a9cd-000d56965251) ] coclass BackgroundCopyManager3_0 { [default] interface IBackgroundCopyManager; }; interface IBackgroundCopyJob4; } ================================================ FILE: wine/windows/bitsmsg.h ================================================ /* * Standard return values that may be generated by BITS * * Copyright 2007 Google (Roy Shea) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_BITMSG_H__ #define __WINE_BITMSG_H__ #define BG_S_PARTIAL_COMPLETE 0x00200017 #define BG_S_UNABLE_TO_DELETE_FILES 0x0020001A #define BG_S_OVERRIDDEN_BY_POLICY 0x00200055 #define BG_E_HTTP_ERROR_400 0x80190190 #define BG_E_HTTP_ERROR_401 0x80190191 #define BG_E_HTTP_ERROR_404 0x80190194 #define BG_E_HTTP_ERROR_407 0x80190197 #define BG_E_HTTP_ERROR_414 0x8019019E #define BG_E_HTTP_ERROR_501 0x801901F5 #define BG_E_HTTP_ERROR_503 0x801901F7 #define BG_E_HTTP_ERROR_504 0x801901F8 #define BG_E_HTTP_ERROR_505 0x801901F9 #define BG_E_NOT_FOUND 0x80200001 #define BG_E_INVALID_STATE 0x80200002 #define BG_E_EMPTY 0x80200003 #define BG_E_FILE_NOT_AVAILABLE 0x80200004 #define BG_E_PROTOCOL_NOT_AVAILABLE 0x80200005 #define BG_E_DESTINATION_LOCKED 0x8020000D #define BG_E_VOLUME_CHANGED 0x8020000E #define BG_E_ERROR_INFORMATION_UNAVAILABLE 0x8020000F #define BG_E_NETWORK_DISCONNECTED 0x80200010 #define BG_E_MISSING_FILE_SIZE 0x80200011 #define BG_E_INSUFFICIENT_HTTP_SUPPORT 0x80200012 #define BG_E_INSUFFICIENT_RANGE_SUPPORT 0x80200013 #define BG_E_REMOTE_NOT_SUPPORTED 0x80200014 #define BG_E_NEW_OWNER_DIFF_MAPPING 0x80200015 #define BG_E_NEW_OWNER_NO_FILE_ACCESS 0x80200016 #define BG_E_PROXY_LIST_TOO_LARGE 0x80200018 #define BG_E_PROXY_BYPASS_LIST_TOO_LARGE 0x80200019 #define BG_E_TOO_MANY_FILES 0x8020001C #define BG_E_LOCAL_FILE_CHANGED 0x8020001D #define BG_E_TOO_LARGE 0x80200020 #define BG_E_STRING_TOO_LONG 0x80200021 #define BG_E_CLIENT_SERVER_PROTOCOL_MISMATCH 0x80200022 #define BG_E_SERVER_EXECUTE_ENABLED 0x80200023 #define BG_E_USERNAME_TOO_LARGE 0x80200025 #define BG_E_PASSWORD_TOO_LARGE 0x80200026 #define BG_E_INVALID_AUTH_TARGET 0x80200027 #define BG_E_INVALID_AUTH_SCHEME 0x80200028 #define BG_E_INVALID_RANGE 0x8020002B #define BG_E_OVERLAPPING_RANGES 0x8020002C #define BG_E_BLOCKED_BY_POLICY 0x8020003E #define BG_E_INVALID_PROXY_INFO 0x8020003F #define BG_E_INVALID_CREDENTIALS 0x80200040 #define BG_E_RECORD_DELETED 0x80200042 #define BG_E_UPNP_ERROR 0x80200045 #define BG_E_PEERCACHING_DISABLED 0x80200047 #define BG_E_BUSYCACHERECORD 0x80200048 #define BG_E_TOO_MANY_JOBS_PER_USER 0x80200049 #define BG_E_TOO_MANY_JOBS_PER_MACHINE 0x80200050 #define BG_E_TOO_MANY_FILES_IN_JOB 0x80200051 #define BG_E_TOO_MANY_RANGES_IN_FILE 0x80200052 #define BG_E_VALIDATION_FAILED 0x80200053 #define BG_E_MAXDOWNLOAD_TIMEOUT 0x80200054 #endif /* #ifndef __WINE_BITMSG_H__ */ ================================================ FILE: wine/windows/bluetoothapis.h ================================================ /* * Copyright (C) 2016 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __BLUETOOTHAPIS_H #define __BLUETOOTHAPIS_H #ifdef __cplusplus extern "C" { #endif typedef ULONGLONG BTH_ADDR; typedef struct _BLUETOOTH_ADDRESS { union { BTH_ADDR ullLong; BYTE rgBytes[6]; } DUMMYUNIONNAME; } BLUETOOTH_ADDRESS_STRUCT; #define BLUETOOTH_ADDRESS BLUETOOTH_ADDRESS_STRUCT #define BLUETOOTH_NULL_ADDRESS ((ULONGLONG) 0x0) #define BLUETOOTH_MAX_NAME_SIZE (248) #define BLUETOOTH_MAX_PASSKEY_SIZE (16) #define BLUETOOTH_MAX_PASSKEY_BUFFER_SIZE (BLUETOOTH_MAX_PASSKEY_SIZE + 1) #define BLUETOOTH_SERVICE_DISABLE 0x00 #define BLUETOOTH_SERVICE_ENABLE 0x01 #define BLUETOOTH_SERVICE_MASK (BLUETOOTH_ENABLE_SERVICE | BLUETOOTH_DISABLE_SERVICE) typedef struct _BLUETOOTH_FIND_RADIO_PARAMS { DWORD dwSize; } BLUETOOTH_FIND_RADIO_PARAMS; typedef struct _BLUETOOTH_RADIO_INFO { DWORD dwSize; BLUETOOTH_ADDRESS address; WCHAR szName[BLUETOOTH_MAX_NAME_SIZE]; ULONG ulClassofDevice; USHORT lmpSubversion; USHORT manufacturer; } BLUETOOTH_RADIO_INFO, *PBLUETOOTH_RADIO_INFO; typedef struct _BLUETOOTH_DEVICE_INFO { DWORD dwSize; BLUETOOTH_ADDRESS Address; ULONG ulClassofDevice; BOOL fConnected; BOOL fRemembered; BOOL fAuthenticated; SYSTEMTIME stLastSeen; SYSTEMTIME stLastUsed; WCHAR szName[BLUETOOTH_MAX_NAME_SIZE]; } BLUETOOTH_DEVICE_INFO, BLUETOOTH_DEVICE_INFO_STRUCT, *PBLUETOOTH_DEVICE_INFO; typedef struct _BLUETOOTH_DEVICE_SEARCH_PARAMS { DWORD dwSize; BOOL fReturnAuthenticated; BOOL fReturnRemembered; BOOL fReturnUnknown; BOOL fReturnConnected; BOOL fIssueInquiry; UCHAR cTimeoutMultiplier; HANDLE hRadio; } BLUETOOTH_DEVICE_SEARCH_PARAMS; typedef HANDLE HBLUETOOTH_AUTHENTICATION_REGISTRATION; typedef HANDLE HBLUETOOTH_CONTAINER_ELEMENT; typedef HANDLE HBLUETOOTH_DEVICE_FIND; typedef HANDLE HBLUETOOTH_RADIO_FIND; typedef struct _BLUETOOTH_COD_PAIRS { ULONG ulCODMask; const WCHAR *pcszDescription; } BLUETOOTH_COD_PAIRS; typedef BOOL (WINAPI *PFN_DEVICE_CALLBACK)(void *pvParam, const BLUETOOTH_DEVICE_INFO *pDevice); typedef struct _BLUETOOTH_SELECT_DEVICE_PARAMS { DWORD dwSize; ULONG cNumOfClasses; BLUETOOTH_COD_PAIRS *prgClassOfDevices; WCHAR *pszInfo; HWND hwndParent; BOOL fForceAuthentication; BOOL fShowAuthenticated; BOOL fShowRemembered; BOOL fShowUnknown; BOOL fAddNewDeviceWizard; BOOL fSkipServicesPage; PFN_DEVICE_CALLBACK pfnDeviceCallback; void *pvParam; DWORD cNumDevices; PBLUETOOTH_DEVICE_INFO pDevices; } BLUETOOTH_SELECT_DEVICE_PARAMS; typedef BOOL (WINAPI *PFN_AUTHENTICATION_CALLBACK)(void *, PBLUETOOTH_DEVICE_INFO); typedef struct _SDP_ELEMENT_DATA { SDP_TYPE type; SDP_SPECIFICTYPE specificType; union { SDP_LARGE_INTEGER_16 int128; LONGLONG int64; LONG int32; SHORT int16; CHAR int8; SDP_ULARGE_INTEGER_16 uint128; ULONGLONG uint64; ULONG uint32; USHORT uint16; UCHAR uint8; UCHAR booleanVal; GUID uuid128; ULONG uuid32; USHORT uuid16; struct { BYTE *value; ULONG length; } string; struct { BYTE *value; ULONG length; } url; struct { BYTE *value; ULONG length; } sequence; struct { BYTE *value; ULONG length; } alternative; } data; } SDP_ELEMENT_DATA, *PSDP_ELEMENT_DATA; typedef struct _SDP_STRING_TYPE_DATA { USHORT encoding; USHORT mibeNum; USHORT attributeId; } SDP_STRING_TYPE_DATA, *PSDP_STRING_TYPE_DATA; typedef BOOL (CALLBACK *PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK)( ULONG uAttribId, BYTE *pValueStream, ULONG cbStreamSize, void *pvParam); DWORD WINAPI BluetoothAuthenticateDevice(HWND, HANDLE, BLUETOOTH_DEVICE_INFO *, WCHAR *, ULONG); DWORD WINAPI BluetoothAuthenticateMultipleDevices(HWND, HANDLE, DWORD, BLUETOOTH_DEVICE_INFO *); BOOL WINAPI BluetoothDisplayDeviceProperties(HWND, BLUETOOTH_DEVICE_INFO *); BOOL WINAPI BluetoothEnableDiscovery(HANDLE, BOOL); BOOL WINAPI BluetoothEnableIncomingConnections(HANDLE, BOOL); DWORD WINAPI BluetoothEnumerateInstalledServices(HANDLE, BLUETOOTH_DEVICE_INFO *, DWORD *, GUID *); BOOL WINAPI BluetoothFindDeviceClose(HBLUETOOTH_DEVICE_FIND); HBLUETOOTH_DEVICE_FIND WINAPI BluetoothFindFirstDevice(BLUETOOTH_DEVICE_SEARCH_PARAMS *, BLUETOOTH_DEVICE_INFO *); HBLUETOOTH_RADIO_FIND WINAPI BluetoothFindFirstRadio(BLUETOOTH_FIND_RADIO_PARAMS *, HANDLE *); BOOL WINAPI BluetoothFindNextDevice(HBLUETOOTH_DEVICE_FIND, BLUETOOTH_DEVICE_INFO *); BOOL WINAPI BluetoothFindNextRadio(HBLUETOOTH_RADIO_FIND, HANDLE *); BOOL WINAPI BluetoothFindRadioClose(HBLUETOOTH_RADIO_FIND); DWORD WINAPI BluetoothGetDeviceInfo(HANDLE, BLUETOOTH_DEVICE_INFO *); DWORD WINAPI BluetoothGetRadioInfo(HANDLE, PBLUETOOTH_RADIO_INFO); BOOL WINAPI BluetoothIsConnectable(HANDLE); BOOL WINAPI BluetoothIsDiscoverable(HANDLE); DWORD WINAPI BluetoothRegisterForAuthentication(BLUETOOTH_DEVICE_INFO *, HBLUETOOTH_AUTHENTICATION_REGISTRATION *, PFN_AUTHENTICATION_CALLBACK, void *); DWORD WINAPI BluetoothRemoveDevice(BLUETOOTH_ADDRESS *); #define BluetoothEnumAttributes BluetoothSdpEnumAttributes BOOL WINAPI BluetoothSdpEnumAttributes(BYTE *, ULONG, PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK, void *); DWORD WINAPI BluetoothSdpGetAttributeValue(BYTE *, ULONG, USHORT, PSDP_ELEMENT_DATA); DWORD WINAPI BluetoothSdpGetContainerElementData(BYTE *, ULONG, HBLUETOOTH_CONTAINER_ELEMENT *, PSDP_ELEMENT_DATA); DWORD WINAPI BluetoothSdpGetElementData(BYTE *, ULONG, PSDP_ELEMENT_DATA); DWORD WINAPI BluetoothSdpGetString(BYTE *, ULONG, PSDP_STRING_TYPE_DATA, USHORT, WCHAR *, ULONG *); BOOL WINAPI BluetoothSelectDevices(BLUETOOTH_SELECT_DEVICE_PARAMS *); BOOL WINAPI BluetoothSelectDevicesFree(BLUETOOTH_SELECT_DEVICE_PARAMS *); DWORD WINAPI BluetoothSendAuthenticationResponse(HANDLE, BLUETOOTH_DEVICE_INFO *, WCHAR *); DWORD WINAPI BluetoothSetServiceState(HANDLE, BLUETOOTH_DEVICE_INFO *, GUID *, DWORD); BOOL WINAPI BluetoothUnregisterAuthentication(HBLUETOOTH_AUTHENTICATION_REGISTRATION); DWORD WINAPI BluetoothUpdateDeviceRecord(BLUETOOTH_DEVICE_INFO *); #ifdef __cplusplus } #endif #endif /* __BLUETOOTHAPIS_H */ ================================================ FILE: wine/windows/bthsdpdef.h ================================================ /* * Copyright (C) 2016 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __BTHSDPDEF_H__ #define __BTHSDPDEF_H__ #ifdef __cplusplus extern "C" { #endif typedef struct SDP_LARGE_INTEGER_16 { ULONGLONG LowPart; LONGLONG HighPart; } SDP_LARGE_INTEGER_16, *PSDP_LARGE_INTEGER_16, *LPSDP_LARGE_INTEGER_16; typedef struct SDP_ULARGE_INTEGER_16 { ULONGLONG LowPart; ULONGLONG HighPart; } SDP_ULARGE_INTEGER_16, *PSDP_ULARGE_INTEGER_16, *LPSDP_ULARGE_INTEGER_16; typedef enum NodeContainerType { NodeContainerTypeSequence, NodeContainerTypeAlternative } NodeContainerType; typedef USHORT SDP_ERROR, *PSDP_ERROR; typedef enum SDP_TYPE { SDP_TYPE_NIL = 0x00, SDP_TYPE_UINT = 0x01, SDP_TYPE_INT = 0x02, SDP_TYPE_UUID = 0x03, SDP_TYPE_STRING = 0x04, SDP_TYPE_BOOLEAN = 0x05, SDP_TYPE_SEQUENCE = 0x06, SDP_TYPE_ALTERNATIVE = 0x07, SDP_TYPE_URL = 0x08, SDP_TYPE_CONTAINER = 0x20 } SDP_TYPE; typedef enum SDP_SPECIFICTYPE { SDP_ST_NONE = 0x0000, SDP_ST_UINT8 = 0x0010, SDP_ST_UINT16 = 0x0110, SDP_ST_UINT32 = 0x0210, SDP_ST_UINT64 = 0x0310, SDP_ST_UINT128 = 0x0410, SDP_ST_INT8 = 0x0020, SDP_ST_INT16 = 0x0120, SDP_ST_INT32 = 0x0220, SDP_ST_INT64 = 0x0320, SDP_ST_INT128 = 0x0420, SDP_ST_UUID16 = 0x0130, SDP_ST_UUID32 = 0x0220, SDP_ST_UUID128 = 0x0430 } SDP_SPECIFICTYPE; typedef struct _SdpAttributeRange { USHORT minAttribute; USHORT maxAttribute; } SdpAttributeRange; typedef union SdpQueryUuidUnion { GUID uuid128; ULONG uuid32; USHORT uuid16; } SdpQueryUuidUnion; typedef struct _SdpQueryUuid { SdpQueryUuidUnion u; USHORT uuidType; } SdpQueryUuid; #ifdef __cplusplus } #endif #endif /* __BTHSDPDEF_H__ */ ================================================ FILE: wine/windows/cderr.h ================================================ /* * Copyright (C) 1999 Bertho Stultiens * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_CDERR_H #define __WINE_CDERR_H /* General error codes */ #define CDERR_DIALOGFAILURE 0xFFFF #define CDERR_GENERALCODES 0x0000 #define CDERR_STRUCTSIZE 0x0001 #define CDERR_INITIALIZATION 0x0002 #define CDERR_NOTEMPLATE 0x0003 #define CDERR_NOHINSTANCE 0x0004 #define CDERR_LOADSTRFAILURE 0x0005 #define CDERR_FINDRESFAILURE 0x0006 #define CDERR_LOADRESFAILURE 0x0007 #define CDERR_LOCKRESFAILURE 0x0008 #define CDERR_MEMALLOCFAILURE 0x0009 #define CDERR_MEMLOCKFAILURE 0x000A #define CDERR_NOHOOK 0x000B #define CDERR_REGISTERMSGFAIL 0x000C /* Printer dialog error codes */ #define PDERR_PRINTERCODES 0x1000 #define PDERR_SETUPFAILURE 0x1001 #define PDERR_PARSEFAILURE 0x1002 #define PDERR_RETDEFFAILURE 0x1003 #define PDERR_LOADDRVFAILURE 0x1004 #define PDERR_GETDEVMODEFAIL 0x1005 #define PDERR_INITFAILURE 0x1006 #define PDERR_NODEVICES 0x1007 #define PDERR_NODEFAULTPRN 0x1008 #define PDERR_DNDMMISMATCH 0x1009 #define PDERR_CREATEICFAILURE 0x100A #define PDERR_PRINTERNOTFOUND 0x100B #define PDERR_DEFAULTDIFFERENT 0x100C /* Chose font error codes */ #define CFERR_CHOOSEFONTCODES 0x2000 #define CFERR_NOFONTS 0x2001 #define CFERR_MAXLESSTHANMIN 0x2002 /* File{Open,Save} error codes */ #define FNERR_FILENAMECODES 0x3000 #define FNERR_SUBCLASSFAILURE 0x3001 #define FNERR_INVALIDFILENAME 0x3002 #define FNERR_BUFFERTOOSMALL 0x3003 /* Find/Replace error codes */ #define FRERR_FINDREPLACECODES 0x4000 #define FRERR_BUFFERLENGTHZERO 0x4001 /* Choose color error codes */ #define CCERR_CHOOSECOLORCODES 0x5000 #endif ================================================ FILE: wine/windows/cfgmgr32.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _CFGMGR32_H_ #define _CFGMGR32_H_ /* FIXME: #include */ #ifndef GUID_DEFINED # include #endif #include /* cfgmgr32 doesn't use the normal convention, it adds an underscore before A/W */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_CFGMGR32_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_CFGMGR32_TYPE_AW(type) typedef WINELIB_NAME_AW(type##_) type; #endif #define CMAPI typedef DWORD CONFIGRET; #define CR_SUCCESS 0x00 #define CR_DEFAULT 0x01 #define CR_OUT_OF_MEMORY 0x02 #define CR_INVALID_POINTER 0x03 #define CR_INVALID_FLAG 0x04 #define CR_INVALID_DEVNODE 0x05 #define CR_INVALID_DEVINST CR_INVALID_DEVNODE #define CR_INVALID_RES_DES 0x06 #define CR_INVALID_LOG_CONF 0x07 #define CR_INVALID_ARBITRATOR 0x08 #define CR_INVALID_NODELIST 0x09 #define CR_DEVNODE_HAS_REQS 0x0a #define CR_DEVINST_HAS_REQS CR_DEVNODE_HAS_REQS #define CR_INVALID_RESOURCEID 0x0b #define CR_DLVXD_NOT_FOUND 0x0c #define CR_NO_SUCH_DEVNODE 0x0d #define CR_NO_SUCH_DEVINST CR_NO_SUCH_DEVNODE #define CR_NO_MORE_LOG_CONF 0x0e #define CR_NO_MORE_RES_DES 0x0f #define CR_ALREADY_SUCH_DEVNODE 0x10 #define CR_ALREADY_SUCH_DEVINST CR_ALREADY_SUCH_DEVNODE #define CR_INVALID_RANGE_LIST 0x11 #define CR_INVALID_RANGE 0x12 #define CR_FAILURE 0x13 #define CR_NO_SUCH_LOGICAL_DEV 0x14 #define CR_CREATE_BLOCKED 0x15 #define CR_NOT_SYSTEM_VM 0x16 #define CR_REMOVE_VETOED 0x17 #define CR_APM_VETOED 0x18 #define CR_INVALID_LOAD_TYPE 0x19 #define CR_BUFFER_SMALL 0x1a #define CR_NO_ARBITRATOR 0x1b #define CR_NO_REGISTRY_HANDLE 0x1c #define CR_REGISTRY_ERROR 0x1d #define CR_INVALID_DEVICE_ID 0x1e #define CR_INVALID_DATA 0x1f #define CR_INVALID_API 0x20 #define CR_DEVLOADER_NOT_READY 0x21 #define CR_NEED_RESTART 0x22 #define CR_NO_MORE_HW_PROFILES 0x23 #define CR_DEVICE_NOT_THERE 0x24 #define CR_NO_SUCH_VALUE 0x25 #define CR_WRONG_TYPE 0x26 #define CR_INVALID_PRIORITY 0x27 #define CR_NOT_DISABLEABLE 0x28 #define CR_FREE_RESOURCES 0x29 #define CR_QUERY_VETOED 0x2a #define CR_CANT_SHARE_IRQ 0x2b #define CR_NO_DEPENDENT 0x2c #define CR_SAME_RESOURCES 0x2d #define CR_NO_SUCH_REGISTRY_KEY 0x2e #define CR_INVALID_MACHINENAME 0x2f #define CR_REMOTE_COMM_FAILURE 0x30 #define CR_MACHINE_UNAVAILABLE 0x31 #define CR_NO_CM_SERVICES 0x32 #define CR_ACCESS_DENIED 0x33 #define CR_CALL_NOT_IMPLEMENTED 0x34 #define CR_INVALID_PROPERTY 0x35 #define CR_DEVICE_INTERFACE_ACTIVE 0x36 #define CR_NO_SUCH_DEVICE_INTERFACE 0x37 #define CR_INVALID_REFERENCE_STRING 0x38 #define CR_INVALID_CONFLICT_LIST 0x39 #define CR_INVALID_INDEX 0x3a #define CR_INVALID_STRUCTURE_SIZE 0x3b #define NUM_CR_RESULTS 0x3c #define MAX_DEVICE_ID_LEN 200 #define MAX_DEVNODE_ID_LEN MAX_DEVICE_ID_LEN #define MAX_CLASS_NAME_LEN 32 #define MAX_GUID_STRING_LEN 39 #define MAX_PROFILE_LEN 80 #define CM_DRP_DEVICEDESC 0x01 #define CM_DRP_HARDWAREID 0x02 #define CM_DRP_COMPATIBLEIDS 0x03 #define CM_DRP_UNUSED0 0x04 #define CM_DRP_SERVICE 0x05 #define CM_DRP_UNUSED1 0x06 #define CM_DRP_UNUSED2 0x07 #define CM_DRP_CLASS 0x08 #define CM_DRP_CLASSGUID 0x09 #define CM_DRP_DRIVER 0x0A #define CM_DRP_CONFIGFLAGS 0x0B #define CM_DRP_MFG 0x0C #define CM_DRP_FRIENDLYNAME 0x0D #define CM_DRP_LOCATION_INFORMATION 0x0E #define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0F #define CM_DRP_CAPABILITIES 0x10 #define CM_DRP_UI_NUMBER 0x11 #define CM_DRP_UPPERFILTERS 0x12 #define CM_DRP_LOWERFILTERS 0x13 #define CM_DRP_BUSTYPEGUID 0x14 #define CM_DRP_LEGACYBUSTYPE 0x15 #define CM_DRP_BUSNUMBER 0x16 #define CM_DRP_ENUMERATOR_NAME 0x17 #define CM_DRP_SECURITY 0x18 #define CM_DRP_SECURITY_SDS 0x19 #define CM_DRP_DEVTYPE 0x1A #define CM_DRP_EXCLUSIVE 0x1B #define CM_DRP_CHARACTERISTICS 0x1C #define CM_DRP_ADDRESS 0x1D #define CM_DRP_UI_NUMBER_DESC_FORMAT 0x1E #define CM_DRP_DEVICE_POWER_DATA 0x1F #define CM_DRP_REMOVAL_POLICY 0x20 #define CM_DRP_REMOVAL_POLICY_HW_DEFAULT 0x21 #define CM_DRP_REMOVAL_POLICY_OVERRIDE 0x22 #define CM_DRP_INSTALL_STATE 0x23 #define CM_DRP_LOCATION_PATHS 0x24 #define CM_DRP_BASE_CONTAINERID 0x25 #define CM_DRP_MIN 0x01 #define CM_DRP_MAX 0x25 #define CM_CRP_UPPERFILTERS CM_DRP_UPPERFILTERS #define CM_CRP_LOWERFILTERS CM_DRP_LOWERFILTERS #define CM_CRP_SECURITY CM_DRP_SECURITY #define CM_CRP_SECURITY_SDS CM_DRP_SECURITY_SDS #define CM_CRP_DEVTYPE CM_DRP_DEVTYPE #define CM_CRP_EXCLUSIVE CM_DRP_EXCLUSIVE #define CM_CRP_CHARACTERISTICS CM_DRP_CHARACTERISTICS #define CM_CRP_MIN CM_DRP_MIN #define CM_CRP_MAX CM_DRP_MAX #define RegDisposition_OpenAlways 0x00 #define RegDisposition_OpenExisting 0x01 #define CM_REGISTRY_HARDWARE 0x0000 #define CM_REGISTRY_SOFTWARE 0x0001 #define CM_REGISTRY_USER 0x0100 #define CM_REGISTRY_CONFIG 0x0200 typedef DWORD DEVINST, *PDEVINST; typedef DWORD DEVNODE, *PDEVNODE; typedef HANDLE HMACHINE, *PHMACHINE; typedef CHAR *DEVNODEID_A, *DEVINSTID_A; typedef WCHAR *DEVNODEID_W, *DEVINSTID_W; typedef ULONG REGDISPOSITION; DECL_WINELIB_CFGMGR32_TYPE_AW(DEVNODEID) DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID) #ifdef __cplusplus extern "C" { #endif CMAPI CONFIGRET WINAPI CM_Connect_MachineA(PCSTR,PHMACHINE); CMAPI CONFIGRET WINAPI CM_Connect_MachineW(PCWSTR,PHMACHINE); #define CM_Connect_Machine WINELIB_NAME_AW(CM_Connect_Machine) CMAPI CONFIGRET WINAPI CM_Create_DevNodeA(PDEVINST,DEVINSTID_A,DEVINST,ULONG); CMAPI CONFIGRET WINAPI CM_Create_DevNodeW(PDEVINST,DEVINSTID_W,DEVINST,ULONG); #define CM_Create_DevNode WINELIB_NAME_AW(CM_Create_DevNode) CMAPI CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE); CMAPI CONFIGRET WINAPI CM_Get_Child(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags); CMAPI CONFIGRET WINAPI CM_Get_Child_Ex(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine); CMAPI CONFIGRET WINAPI CM_Get_Device_IDA(DEVINST,PSTR,ULONG,ULONG); CMAPI CONFIGRET WINAPI CM_Get_Device_IDW(DEVINST,PWSTR,ULONG,ULONG); #define CM_Get_Device_ID WINELIB_NAME_AW(CM_Get_Device_ID) CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ExA(DEVINST,PSTR,ULONG,ULONG,HMACHINE); CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ExW(DEVINST,PWSTR,ULONG,ULONG,HMACHINE); #define CM_Get_Device_ID_Ex WINELIB_NAME_AW(CM_Get_Device_ID_Ex) CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ListA(PCSTR,PCHAR,ULONG,ULONG); CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ListW(PCWSTR,PWCHAR,ULONG,ULONG); #define CM_Get_Device_ID_List WINELIB_NAME_AW(CM_Get_Device_ID_List) CMAPI CONFIGRET WINAPI CM_Get_Device_ID_List_ExA(PCSTR,PCHAR,ULONG,ULONG,HMACHINE); CMAPI CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(PCWSTR,PWCHAR,ULONG,ULONG,HMACHINE); #define CM_Get_Device_ID_List_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Ex) CMAPI CONFIGRET WINAPI CM_Get_Device_ID_Size(PULONG,DEVINST,ULONG); CMAPI CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(PULONG,DEVINST,ULONG,HMACHINE); CMAPI CONFIGRET WINAPI CM_Get_Sibling_Ex(PDEVINST pdnDevInst, DEVINST DevInst, ULONG ulFlags, HMACHINE hMachine); CMAPI WORD WINAPI CM_Get_Version(void); CMAPI CONFIGRET WINAPI CM_Locate_DevNodeA(PDEVINST,DEVINSTID_A,ULONG); CMAPI CONFIGRET WINAPI CM_Locate_DevNodeW(PDEVINST,DEVINSTID_W,ULONG); #define CM_Locate_DevNode WINELIB_NAME_AW(CM_Locate_DevNode) CMAPI CONFIGRET WINAPI CM_Open_DevNode_Key(DEVINST dnDevInst, REGSAM access, ULONG ulHardwareProfile, REGDISPOSITION disposition, PHKEY phkDevice, ULONG ulFlags); #ifdef __cplusplus } #endif #undef DECL_WINELIB_CFGMGR32_TYPE_AW #endif /* _CFGMGR32_H_ */ ================================================ FILE: wine/windows/cguid.h ================================================ /* * Copyright (C) 2000 Peter Hunnisett * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __CGUID_H__ #define __CGUID_H__ #ifdef __cplusplus extern "C" { #endif extern const IID GUID_NULL; extern const IID IID_IRpcChannel; extern const IID IID_IRpcStub; extern const IID IID_IStubManager; extern const IID IID_IRpcProxy; extern const IID IID_IProxyManager; extern const IID IID_IPSFactory; extern const IID IID_IInternalMoniker; extern const IID IID_IDfReserved1; extern const IID IID_IDfReserved2; extern const IID IID_IDfReserved3; extern const CLSID CLSID_StdMarshal; extern const CLSID CLSID_AggStdMarshal; extern const CLSID CLSID_StdAsyncActManager; extern const IID IID_IStub; extern const IID IID_IProxy; extern const IID IID_IEnumGeneric; extern const IID IID_IEnumHolder; extern const IID IID_IEnumCallback; extern const IID IID_IOleManager; extern const IID IID_IOlePresObj; extern const IID IID_IDebug; extern const IID IID_IDebugStream; extern const CLSID CLSID_PSGenObject; extern const CLSID CLSID_PSClientSite; extern const CLSID CLSID_PSClassObject; extern const CLSID CLSID_PSInPlaceActive; extern const CLSID CLSID_PSInPlaceFrame; extern const CLSID CLSID_PSDragDrop; extern const CLSID CLSID_PSBindCtx; extern const CLSID CLSID_PSEnumerators; extern const CLSID CLSID_StaticMetafile; extern const CLSID CLSID_StaticDib; extern const CLSID CID_CDfsVolume; extern const CLSID CLSID_DCOMAccessControl; extern const CLSID CLSID_StdGlobalInterfaceTable; extern const CLSID CLSID_ComBinding; extern const CLSID CLSID_StdEvent; extern const CLSID CLSID_ManualResetEvent; extern const CLSID CLSID_SynchronizeContainer; extern const CLSID CLSID_CCDFormKrnl; extern const CLSID CLSID_CCDPropertyPage; extern const CLSID CLSID_CCDFormDialog; extern const CLSID CLSID_CCDCommandButton; extern const CLSID CLSID_CCDComboBox; extern const CLSID CLSID_CCDTextBox; extern const CLSID CLSID_CCDCheckBox; extern const CLSID CLSID_CCDLabel; extern const CLSID CLSID_CCDOptionButton; extern const CLSID CLSID_CCDListBox; extern const CLSID CLSID_CCDScrollBar; extern const CLSID CLSID_CCDGroupBox; extern const CLSID CLSID_CCDGeneralPropertyPage; extern const CLSID CLSID_CCDGenericPropertyPage; extern const CLSID CLSID_CCDFontPropertyPage; extern const CLSID CLSID_CCDColorPropertyPage; extern const CLSID CLSID_CCDLabelPropertyPage; extern const CLSID CLSID_CCDCheckBoxPropertyPage; extern const CLSID CLSID_CCDTextBoxPropertyPage; extern const CLSID CLSID_CCDOptionButtonPropertyPage; extern const CLSID CLSID_CCDListBoxPropertyPage; extern const CLSID CLSID_CCDCommandButtonPropertyPage; extern const CLSID CLSID_CCDComboBoxPropertyPage; extern const CLSID CLSID_CCDScrollBarPropertyPage; extern const CLSID CLSID_CCDGroupBoxPropertyPage; extern const CLSID CLSID_CCDXObjectPropertyPage; extern const CLSID CLSID_CStdPropertyFrame; extern const CLSID CLSID_CFormPropertyPage; extern const CLSID CLSID_CGridPropertyPage; extern const CLSID CLSID_CWSJArticlePage; extern const CLSID CLSID_CSystemPage; extern const CLSID CLSID_IdentityUnmarshal; extern const CLSID CLSID_InProcFreeMarshaler; extern const CLSID CLSID_Picture_Metafile; extern const CLSID CLSID_Picture_EnhMetafile; extern const CLSID CLSID_Picture_Dib; extern const CLSID CLSID_GlobalOptions; extern const GUID GUID_TRISTATE; #ifdef __cplusplus } #endif #endif /* __CGUID_H__ */ ================================================ FILE: wine/windows/chprst.idl ================================================ /* * Copyright (C) 2013 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a93-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IChapteredRowset : IUnknown { [local] HRESULT AddRefChapter([in] HCHAPTER chapter, [out] DBREFCOUNT *refcount); [call_as(AddRefChapter)] HRESULT RemoteAddRefChapter([in] HCHAPTER chapter, [out] DBREFCOUNT *refcount, [out] IErrorInfo **errorinfo); [local] HRESULT ReleaseChapter([in] HCHAPTER chapter, [out] DBREFCOUNT *refcount); [call_as(ReleaseChapter)] HRESULT RemoteReleaseChapter([in] HCHAPTER chapter, [out] DBREFCOUNT *refcount, [out] IErrorInfo **errorinfo); } ================================================ FILE: wine/windows/cierror.h ================================================ /* * Copyright 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_CIERROR_H__ #define __WINE_CIERROR_H__ #define CI_E_ALREADY_INITIALIZED 0x8004180a #define CI_E_NOT_INITIALIZED 0x8004180b #define CI_E_BUFFERTOOSMALL 0x8004180c #define CI_E_PROPERTY_NOT_CACHED 0x8004180d #define CI_E_INVALID_STATE 0x8004180f #define CI_E_FILTERING_DISABLED 0x80041810 #define CI_E_DISK_FULL 0x80041811 #define CI_E_SHUTDOWN 0x80041812 #define CI_E_WORKID_NOTVALID 0x80041813 #define CI_E_NOT_FOUND 0x80041815 #define CI_E_USE_DEFAULT_PID 0x80041816 #define CI_E_DUPLICATE_NOTIFICATION 0x80041817 #define CI_E_UPDATES_DISABLED 0x80041818 #define CI_E_INVALID_FLAGS_COMBINATION 0x80041819 #define CI_E_OUTOFSEQ_INCREMENT_DATA 0x8004181a #define CI_E_SHARING_VIOLATION 0x8004181b #define CI_E_LOGON_FAILURE 0x8004181c #define CI_E_NO_CATALOG 0x8004181d #define CI_E_STRANGE_PAGEORSECTOR_SIZE 0x8004181e #define CI_E_TIMEOUT 0x8004181f #define CI_E_NOT_RUNNING 0x80041820 #endif ================================================ FILE: wine/windows/clusapi.h ================================================ /* * Copyright 2006 James Hawkins * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_CLUSAPI_H #define __WINE_CLUSAPI_H #ifdef __cplusplus extern "C" { #endif typedef struct _HCLUSTER *HCLUSTER; typedef struct _HCLUSENUM *HCLUSENUM; typedef struct _CLUSTERVERSIONINFO { DWORD dwVersionInfoSize; WORD MajorVersion; WORD MinorVersion; WORD BuildNumber; WCHAR szVendorId[64]; WCHAR szCSDVersion[64]; DWORD dwClusterHighestVersion; DWORD dwClusterLowestVersion; DWORD dwFlags; DWORD dwReserved; } CLUSTERVERSIONINFO, *LPCLUSTERVERSIONINFO; BOOL WINAPI CloseCluster(HCLUSTER hCluster); DWORD WINAPI GetClusterInformation(HCLUSTER hCluster, LPWSTR lpszClusterName, LPDWORD lpcchClusterName, LPCLUSTERVERSIONINFO lpClusterInfo); DWORD WINAPI GetNodeClusterState(LPCWSTR lpszNodeName, LPDWORD pdwClusterState); HCLUSTER WINAPI OpenCluster(LPCWSTR lpszClusterName); HCLUSENUM WINAPI ClusterOpenEnum(HCLUSTER hCluster, DWORD dwType); DWORD WINAPI ClusterEnum(HCLUSENUM hEnum, DWORD dwIndex, LPDWORD lpdwType, LPWSTR lpszName, LPDWORD lpcchName); DWORD WINAPI ClusterCloseEnum(HCLUSENUM hEnum); #ifdef __cplusplus } #endif #endif /* __WINE_CLUSAPI_H */ ================================================ FILE: wine/windows/cmdbas.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a63-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ICommand : IUnknown { [local] HRESULT Cancel(); [call_as(Cancel)] HRESULT RemoteCancel([out] IErrorInfo **ppErrorInfoRem); [local] HRESULT Execute([in, annotation("__in_opt")] IUnknown *pUnkOuter, [in] REFIID riid, [in, out, annotation("__inout_opt")] DBPARAMS *pParams, [out, annotation("__out_opt")] DBROWCOUNT *pcRowsAffected, [out, iid_is(riid), annotation("__deref_opt_out")] IUnknown **ppRowset); [call_as(Execute)] HRESULT RemoteExecute([in] IUnknown *pUnkOuter, [in] REFIID riid, [in] HACCESSOR hAccessor, [in] DB_UPARAMS cParamSets, [in, unique] GUID *pGuid, [in] ULONG ulGuidOffset, [in, unique] RMTPACK *pInputParams, [in, out, unique] RMTPACK *pOutputParams, [in] DBCOUNTITEM cBindings, [in, unique, size_is((ULONG)cBindings)] DBBINDING *rgBindings, [in, out, unique, size_is((ULONG)cBindings)] DBSTATUS *rgStatus, [in, out, unique] DBROWCOUNT *pcRowsAffected, [in, out, unique, iid_is(riid)] IUnknown **ppRowset); [local] HRESULT GetDBSession([in] REFIID riid, [out, iid_is(riid), annotation("__deref_out_opt")] IUnknown **ppSession); [call_as(GetDBSession)] HRESULT RemoteGetDBSession([in] REFIID riid, [out, iid_is(riid)] IUnknown **ppSession, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/cmdtxt.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a27-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ICommandText : ICommand { [local] HRESULT GetCommandText([in, out /*, annotation("__inout_opt")*/] GUID *pguidDialect, [out /*, annotation("__deref_out")*/] LPOLESTR *ppwszCommand); [call_as(GetCommandText)] HRESULT RemoteGetCommandText([in, out, unique] GUID *pguidDialect, [out] LPOLESTR *ppwszCommand, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT SetCommandText([in] REFGUID rguidDialect, [in, unique /*, annotation("__in_z_opt")*/] LPCOLESTR pwszCommand); [call_as(SetCommandText)] HRESULT RemoteSetCommandText([in] REFGUID rguidDialect, [in, unique] LPCOLESTR pwszCommand, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/cmnquery.idl ================================================ /* * Copyright 2017 Zebediah Figura for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ object, uuid(1a3114b8-a62e-11d0-a6c5-00a0c906af45), local ] interface IPersistQuery : IPersist { HRESULT WriteString([in] LPCWSTR section, [in] LPCWSTR name, [in] LPCWSTR value); HRESULT ReadString([in] LPCWSTR section, [in] LPCWSTR name, [out, size_is(buflen)] LPWSTR buffer, [in] INT buflen); HRESULT WriteInt([in] LPCWSTR section, [in] LPCWSTR name, [in] INT value); HRESULT ReadInt([in] LPCWSTR section, [in] LPCWSTR name, [out] INT *value); HRESULT WriteStruct([in] LPCWSTR section, [in] LPCWSTR name, [in] LPVOID value, [in] DWORD size); HRESULT ReadStruct([in] LPCWSTR section, [in] LPCWSTR name, [out, size_is(buflen)] LPVOID buffer, [in] DWORD buflen); HRESULT Clear(); } cpp_quote("#define OQWF_OKCANCEL 0x00000001") cpp_quote("#define OQWF_DEFAULTFORM 0x00000002") cpp_quote("#define OQWF_SINGLESELECT 0x00000004") cpp_quote("#define OQWF_LOADQUERY 0x00000008") cpp_quote("#define OQWF_REMOVESCOPES 0x00000010") cpp_quote("#define OQWF_REMOVEFORMS 0x00000020") cpp_quote("#define OQWF_ISSUEONOPEN 0x00000040") cpp_quote("#define OQWF_SHOWOPTIONAL 0x00000080") cpp_quote("#define OQWF_SAVEQUERYONOK 0x00000200") cpp_quote("#define OQWF_HIDEMENUS 0x00000400") cpp_quote("#define OQWF_HIDESEARCHUI 0x00000800") cpp_quote("#define OQWF_PARAMISPROPERTYBAG 0x80000000") typedef struct { DWORD cbStruct; DWORD dwFlags; CLSID clsidHandler; LPVOID pHandlerParameters; CLSID clsidDefaultForm; IPersistQuery *pPersistQuery; union { void *pFormParameters; IPropertyBag *ppbFormParameters; }; } OPENQUERYWINDOW, *LPOPENQUERYWINDOW; [ object, uuid(ab50dec0-6f1d-11d0-a1c4-00aa00c16e65), local ] interface ICommonQuery : IUnknown { HRESULT OpenQueryWindow([in] HWND parent, [in] LPOPENQUERYWINDOW query_window, [out] IDataObject **data_object); } [ threading(apartment), uuid(83bc5ec0-6f2a-11d0-a1c4-00aa00c16e65) ] coclass CommonQuery { interface ICommonQuery; } ================================================ FILE: wine/windows/colinf.idl ================================================ /* * Copyright (C) 2016 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a11-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IColumnsInfo : IUnknown { [local] HRESULT GetColumnInfo( [in, out] DBORDINAL *columns, [out, size_is(,(ULONG)*columns)] DBCOLUMNINFO **colinfo, [out] OLECHAR **stringsbuffer); [call_as(GetColumnInfo)] HRESULT RemoteGetColumnInfo([in, out] DBORDINAL *columns, [out, size_is(,(ULONG)*columns)] DBCOLUMNINFO **colinfo, [out, size_is(,(ULONG)*columns)] DBBYTEOFFSET **name_offsets, [out, size_is(,(ULONG)*columns)] DBBYTEOFFSET **columnid_offsets, [in, out] DBLENGTH *string_len, [in, out, unique, size_is(,(ULONG)*string_len)] OLECHAR **stringsbuffer, [out] IErrorInfo **errorinfo); [local] HRESULT MapColumnIDs( [in] DBORDINAL column_ids, [in, size_is((ULONG)column_ids)] const DBID *dbids, [out, size_is((ULONG)column_ids)] DBORDINAL *columns); [call_as(MapColumnIDs)] HRESULT RemoteMapColumnIDs( [in] DBORDINAL column_ids, [in, size_is((ULONG)column_ids)] const DBID *dbids, [out, size_is((ULONG)column_ids)] DBORDINAL *columns, [out] IErrorInfo **errorinfo); } ================================================ FILE: wine/windows/comcat.idl ================================================ /* * Copyright 2002 John K. Hohm * Copyright 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; #endif /***************************************************************************** * Types */ typedef GUID CATID; typedef REFGUID REFCATID; cpp_quote("#define CATID_NULL GUID_NULL") cpp_quote("#define IsEqualCATID(rcatid1, rcatid2) IsEqualGUID(rcatid1, rcatid2)") /***************************************************************************** * Aliases for EnumGUID */ #define IEnumCATID IEnumGUID cpp_quote("#define IEnumCATID IEnumGUID") cpp_quote("#define IID_IEnumCATID IID_IEnumGUID") cpp_quote("#define LPENUMCATID LPENUMGUID") #define IEnumCLSID IEnumGUID cpp_quote("#define IEnumCLSID IEnumGUID") cpp_quote("#define IID_IEnumCLSID IID_IEnumGUID") cpp_quote("#define LPENUMCLSID LPENUMGUID") /***************************************************************************** * IEnumGUID */ [ object, uuid(0002e000-0000-0000-c000-000000000046), pointer_default(unique) ] interface IEnumGUID : IUnknown { typedef [unique] IEnumGUID *LPENUMGUID; HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] GUID *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumGUID **ppenum); } /***************************************************************************** * IEnumCATEGORYINFO */ [ object, uuid(0002e011-0000-0000-c000-000000000046), pointer_default(unique) ] interface IEnumCATEGORYINFO : IUnknown { typedef [unique] IEnumCATEGORYINFO *LPENUMCATEGORYINFO; typedef struct tagCATEGORYINFO { CATID catid; /* category identifier for component */ LCID lcid; /* locale identifier */ OLECHAR szDescription[128]; /* description of the category */ } CATEGORYINFO, *LPCATEGORYINFO; HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] CATEGORYINFO* rgelt, [out] ULONG* pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumCATEGORYINFO** ppenum); } /***************************************************************************** * ICatInformation */ [ object, uuid(0002e013-0000-0000-c000-000000000046), pointer_default(unique) ] interface ICatInformation : IUnknown { typedef [unique] ICatInformation* LPCATINFORMATION; HRESULT EnumCategories( [in] LCID lcid, [out] IEnumCATEGORYINFO** ppenumCategoryInfo); HRESULT GetCategoryDesc( [in] REFCATID rcatid, [in] LCID lcid, [out] LPWSTR* pszDesc); [local] HRESULT EnumClassesOfCategories( [in] ULONG cImplemented, [in,size_is(cImplemented)] CATID rgcatidImpl[], [in] ULONG cRequired, [in,size_is(cRequired)] CATID rgcatidReq[], [out] IEnumCLSID** ppenumClsid); [call_as(EnumClassesOfCategories)] HRESULT RemoteEnumClassesOfCategories( [in] ULONG cImplemented, [in,unique,size_is(cImplemented)] CATID rgcatidImpl[], [in] ULONG cRequired, [in,unique,size_is(cRequired)] CATID rgcatidReq[], [out] IEnumCLSID** ppenumClsid); [local] HRESULT IsClassOfCategories( [in] REFCLSID rclsid, [in] ULONG cImplemented, [in,size_is(cImplemented)] CATID rgcatidImpl[], [in] ULONG cRequired, [in,size_is(cRequired)] CATID rgcatidReq[]); [call_as(IsClassOfCategories)] HRESULT RemoteIsClassOfCategories( [in] REFCLSID rclsid, [in] ULONG cImplemented, [in,unique,size_is(cImplemented)] CATID rgcatidImpl[], [in] ULONG cRequired, [in,unique,size_is(cRequired)] CATID rgcatidReq[] ); HRESULT EnumImplCategoriesOfClass( [in] REFCLSID rclsid, [out] IEnumCATID** ppenumCatid); HRESULT EnumReqCategoriesOfClass( [in] REFCLSID rclsid, [out] IEnumCATID** ppenumCatid); } /***************************************************************************** * ICatRegister */ [ object, uuid(0002e012-0000-0000-c000-000000000046), pointer_default(unique) ] interface ICatRegister : IUnknown { typedef [unique] ICatRegister* LPCATREGISTER; HRESULT RegisterCategories( [in] ULONG cCategories, [in, size_is(cCategories)] CATEGORYINFO rgCategoryInfo[]); HRESULT UnRegisterCategories( [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[]); HRESULT RegisterClassImplCategories( [in] REFCLSID rclsid, [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[]); HRESULT UnRegisterClassImplCategories( [in] REFCLSID rclsid, [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[]); HRESULT RegisterClassReqCategories( [in] REFCLSID rclsid, [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[]); HRESULT UnRegisterClassReqCategories( [in] REFCLSID rclsid, [in] ULONG cCategories, [in, size_is(cCategories)] CATID rgcatid[]); } /***************************************************************************** * Category IDs */ cpp_quote("DEFINE_GUID( CATID_Insertable, 0x40fc6ed3, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);") cpp_quote("DEFINE_GUID( CATID_Control, 0x40fc6ed4, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);") cpp_quote("DEFINE_GUID( CATID_Programmable, 0x40fc6ed5, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);") cpp_quote("DEFINE_GUID( CATID_IsShortcut, 0x40fc6ed6, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);") cpp_quote("DEFINE_GUID( CATID_NeverShowExt, 0x40fc6ed7, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);") cpp_quote("DEFINE_GUID( CATID_DocObject, 0x40fc6ed8, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);") cpp_quote("DEFINE_GUID( CATID_Printable, 0x40fc6ed9, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);") cpp_quote("DEFINE_GUID( CATID_RequiresDataPathHost, 0x0de86a50, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_PersistsToMoniker, 0x0de86a51, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_PersistsToStorage, 0x0de86a52, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_PersistsToStreamInit, 0x0de86a53, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_PersistsToStream, 0x0de86a54, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_PersistsToMemory, 0x0de86a55, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_PersistsToFile, 0x0de86a56, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_PersistsToPropertyBag, 0x0de86a57, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_InternetAware, 0x0de86a58, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);") cpp_quote("DEFINE_GUID( CATID_DesignTimeUIActivatableControl, 0xf2bb56d1, 0xdb07, 0x11d1, 0xaa, 0x6b, 0x00, 0x60, 0x97, 0xdb, 0x95, 0x39);") /* The Component Category Manager */ cpp_quote("DEFINE_GUID(CLSID_StdComponentCategoriesMgr, 0x0002e005, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);") ================================================ FILE: wine/windows/commctrl.h ================================================ /* * Common controls definitions * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_COMMCTRL_H #define __WINE_COMMCTRL_H #include #include #ifdef __cplusplus extern "C" { #endif BOOL WINAPI ShowHideMenuCtl (HWND, UINT_PTR, LPINT); VOID WINAPI GetEffectiveClientRect (HWND, LPRECT, const INT*); VOID WINAPI InitCommonControls (VOID); typedef struct tagINITCOMMONCONTROLSEX { DWORD dwSize; DWORD dwICC; } INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX; BOOL WINAPI InitCommonControlsEx (const INITCOMMONCONTROLSEX*); LANGID WINAPI GetMUILanguage (VOID); VOID WINAPI InitMUILanguage (LANGID uiLang); enum _LI_METRIC { LIM_SMALL, LIM_LARGE }; HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE, const WCHAR *, int, int, HICON *); HRESULT WINAPI LoadIconMetric(HINSTANCE, const WCHAR *, int, HICON *); #define COMCTL32_VERSION 5 /* dll version */ #ifndef _WIN32_IE #define _WIN32_IE 0x0400 #endif #define ICC_LISTVIEW_CLASSES 0x00000001 /* listview, header */ #define ICC_TREEVIEW_CLASSES 0x00000002 /* treeview, tooltips */ #define ICC_BAR_CLASSES 0x00000004 /* toolbar, statusbar, trackbar, tooltips */ #define ICC_TAB_CLASSES 0x00000008 /* tab, tooltips */ #define ICC_UPDOWN_CLASS 0x00000010 /* updown */ #define ICC_PROGRESS_CLASS 0x00000020 /* progress */ #define ICC_HOTKEY_CLASS 0x00000040 /* hotkey */ #define ICC_ANIMATE_CLASS 0x00000080 /* animate */ #define ICC_WIN95_CLASSES 0x000000FF #define ICC_DATE_CLASSES 0x00000100 /* month picker, date picker, time picker, updown */ #define ICC_USEREX_CLASSES 0x00000200 /* comboex */ #define ICC_COOL_CLASSES 0x00000400 /* rebar (coolbar) */ #define ICC_INTERNET_CLASSES 0x00000800 /* IP address, ... */ #define ICC_PAGESCROLLER_CLASS 0x00001000 /* page scroller */ #define ICC_NATIVEFNTCTL_CLASS 0x00002000 /* native font control ???*/ #define ICC_STANDARD_CLASSES 0x00004000 #define ICC_LINK_CLASS 0x00008000 /* common control shared messages */ #define CCM_FIRST 0x2000 #define CCM_SETBKCOLOR (CCM_FIRST+0x1) /* lParam = bkColor */ #define CCM_SETCOLORSCHEME (CCM_FIRST+0x2) /* lParam = COLORSCHEME struct ptr */ #define CCM_GETCOLORSCHEME (CCM_FIRST+0x3) /* lParam = COLORSCHEME struct ptr */ #define CCM_GETDROPTARGET (CCM_FIRST+0x4) #define CCM_SETUNICODEFORMAT (CCM_FIRST+0x5) #define CCM_GETUNICODEFORMAT (CCM_FIRST+0x6) #define CCM_SETVERSION (CCM_FIRST+0x7) #define CCM_GETVERSION (CCM_FIRST+0x8) #define CCM_SETNOTIFYWINDOW (CCM_FIRST+0x9) /* wParam = hwndParent */ #define CCM_SETWINDOWTHEME (CCM_FIRST+0xb) #define CCM_DPISCALE (CCM_FIRST+0xc) /* common notification codes (WM_NOTIFY)*/ #define NM_FIRST (0U- 0U) #define NM_LAST (0U- 99U) #define NM_OUTOFMEMORY (NM_FIRST-1) #define NM_CLICK (NM_FIRST-2) #define NM_DBLCLK (NM_FIRST-3) #define NM_RETURN (NM_FIRST-4) #define NM_RCLICK (NM_FIRST-5) #define NM_RDBLCLK (NM_FIRST-6) #define NM_SETFOCUS (NM_FIRST-7) #define NM_KILLFOCUS (NM_FIRST-8) #define NM_CUSTOMDRAW (NM_FIRST-12) #define NM_HOVER (NM_FIRST-13) #define NM_NCHITTEST (NM_FIRST-14) #define NM_KEYDOWN (NM_FIRST-15) #define NM_RELEASEDCAPTURE (NM_FIRST-16) #define NM_SETCURSOR (NM_FIRST-17) #define NM_CHAR (NM_FIRST-18) #define NM_TOOLTIPSCREATED (NM_FIRST-19) #define NM_LDOWN (NM_FIRST-20) #define NM_RDOWN (NM_FIRST-21) #define NM_THEMECHANGED (NM_FIRST-22) #define NM_FONTCHANGED (NM_FIRST-23) #define NM_CUSTOMTEXT (NM_FIRST-24) #define NM_TVSTATEIMAGECHANGING (NM_FIRST-24) #define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) \ (fn)((hwnd), (int)(wParam), (NMHDR*)(lParam)) #define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) \ (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR*)(pnmhdr)) /* callback constants */ #define LPSTR_TEXTCALLBACKA ((LPSTR)-1) #define LPSTR_TEXTCALLBACKW ((LPWSTR)-1) #define LPSTR_TEXTCALLBACK WINELIB_NAME_AW(LPSTR_TEXTCALLBACK) #define I_IMAGECALLBACK (-1) #define I_IMAGENONE (-2) #define I_INDENTCALLBACK (-1) #define I_CHILDRENCALLBACK (-1) #define I_GROUPIDCALLBACK (-1) #define I_GROUPIDNONE (-2) #define I_COLUMNSCALLBACK ((UINT)-1) /* owner drawn types */ #define ODT_HEADER 100 #define ODT_TAB 101 #define ODT_LISTVIEW 102 /* common notification structures */ typedef struct tagNMTOOLTIPSCREATED { NMHDR hdr; HWND hwndToolTips; } NMTOOLTIPSCREATED, *LPNMTOOLTIPSCREATED; typedef struct tagNMMOUSE { NMHDR hdr; DWORD_PTR dwItemSpec; DWORD_PTR dwItemData; POINT pt; DWORD dwHitInfo; /* info where on item or control the mouse is */ } NMMOUSE, *LPNMMOUSE; typedef struct tagNMOBJECTNOTIFY { NMHDR hdr; int iItem; #ifdef __IID_DEFINED__ const IID *piid; #else const void *piid; #endif void *pObject; HRESULT hResult; DWORD dwFlags; } NMOBJECTNOTIFY, *LPNMOBJECTNOTIFY; typedef struct tagNMKEY { NMHDR hdr; UINT nVKey; UINT uFlags; } NMKEY, *LPNMKEY; typedef struct tagNMCHAR { NMHDR hdr; UINT ch; DWORD dwItemPrev; /* Item previously selected */ DWORD dwItemNext; /* Item to be selected */ } NMCHAR, *LPNMCHAR; #ifndef CCSIZEOF_STRUCT #define CCSIZEOF_STRUCT(name, member) \ (((INT)((LPBYTE)(&((name*)0)->member)-((LPBYTE)((name*)0))))+ \ sizeof(((name*)0)->member)) #endif #ifndef SNDMSG #ifdef __cplusplus #define SNDMSG ::SendMessage #else /* __cplusplus */ #define SNDMSG SendMessage #endif /* __cplusplus */ #endif /* SNDMSG */ #ifdef __cplusplus #define SNDMSGA ::SendMessageA #define SNDMSGW ::SendMessageW #else #define SNDMSGA SendMessageA #define SNDMSGW SendMessageW #endif /* Custom Draw messages */ #define CDRF_DODEFAULT 0x0 #define CDRF_NEWFONT 0x00000002 #define CDRF_SKIPDEFAULT 0x00000004 #define CDRF_NOTIFYPOSTPAINT 0x00000010 #define CDRF_NOTIFYITEMDRAW 0x00000020 #define CDRF_NOTIFYSUBITEMDRAW 0x00000020 #define CDRF_NOTIFYPOSTERASE 0x00000040 #define CDRF_NOTIFYITEMERASE 0x00000080 /* obsolete ??? */ /* drawstage flags */ #define CDDS_PREPAINT 1 #define CDDS_POSTPAINT 2 #define CDDS_PREERASE 3 #define CDDS_POSTERASE 4 #define CDDS_ITEM 0x00010000 #define CDDS_ITEMPREPAINT (CDDS_ITEM | CDDS_PREPAINT) #define CDDS_ITEMPOSTPAINT (CDDS_ITEM | CDDS_POSTPAINT) #define CDDS_ITEMPREERASE (CDDS_ITEM | CDDS_PREERASE) #define CDDS_ITEMPOSTERASE (CDDS_ITEM | CDDS_POSTERASE) #define CDDS_SUBITEM 0x00020000 /* itemState flags */ #define CDIS_SELECTED 0x0001 #define CDIS_GRAYED 0x0002 #define CDIS_DISABLED 0x0004 #define CDIS_CHECKED 0x0008 #define CDIS_FOCUS 0x0010 #define CDIS_DEFAULT 0x0020 #define CDIS_HOT 0x0040 #define CDIS_MARKED 0x0080 #define CDIS_INDETERMINATE 0x0100 #define CDIS_SHOWKEYBOARDCUES 0x0200 #define CDIS_NEARHOT 0x0400 #define CDIS_OTHERSIDEHOT 0x0800 #define CDIS_DROPHILITED 0x1000 typedef struct tagNMCUSTOMDRAWINFO { NMHDR hdr; DWORD dwDrawStage; HDC hdc; RECT rc; DWORD_PTR dwItemSpec; UINT uItemState; LPARAM lItemlParam; } NMCUSTOMDRAW, *LPNMCUSTOMDRAW; typedef struct tagNMTTCUSTOMDRAW { NMCUSTOMDRAW nmcd; UINT uDrawFlags; } NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW; /* StatusWindow */ #define STATUSCLASSNAMEA "msctls_statusbar32" #if defined(__GNUC__) # define STATUSCLASSNAMEW (const WCHAR []){ 'm','s','c','t','l','s','_', \ 's','t','a','t','u','s','b','a','r','3','2',0 } #elif defined(_MSC_VER) # define STATUSCLASSNAMEW L"msctls_statusbar32" #else static const WCHAR STATUSCLASSNAMEW[] = { 'm','s','c','t','l','s','_', 's','t','a','t','u','s','b','a','r','3','2',0 }; #endif #define STATUSCLASSNAME WINELIB_NAME_AW(STATUSCLASSNAME) #define SBT_NOBORDERS 0x0100 #define SBT_POPOUT 0x0200 #define SBT_RTLREADING 0x0400 /* not supported */ #define SBT_OWNERDRAW 0x1000 #define SB_SIMPLEID 0x00ff #define SB_SETTEXTA (WM_USER+1) #define SB_SETTEXTW (WM_USER+11) #define SB_SETTEXT WINELIB_NAME_AW(SB_SETTEXT) #define SB_GETTEXTA (WM_USER+2) #define SB_GETTEXTW (WM_USER+13) #define SB_GETTEXT WINELIB_NAME_AW(SB_GETTEXT) #define SB_GETTEXTLENGTHA (WM_USER+3) #define SB_GETTEXTLENGTHW (WM_USER+12) #define SB_GETTEXTLENGTH WINELIB_NAME_AW(SB_GETTEXTLENGTH) #define SB_SETPARTS (WM_USER+4) #define SB_SETBORDERS (WM_USER+5) #define SB_GETPARTS (WM_USER+6) #define SB_GETBORDERS (WM_USER+7) #define SB_SETMINHEIGHT (WM_USER+8) #define SB_SIMPLE (WM_USER+9) #define SB_GETRECT (WM_USER+10) #define SB_ISSIMPLE (WM_USER+14) #define SB_SETICON (WM_USER+15) #define SB_SETTIPTEXTA (WM_USER+16) #define SB_SETTIPTEXTW (WM_USER+17) #define SB_SETTIPTEXT WINELIB_NAME_AW(SB_SETTIPTEXT) #define SB_GETTIPTEXTA (WM_USER+18) #define SB_GETTIPTEXTW (WM_USER+19) #define SB_GETTIPTEXT WINELIB_NAME_AW(SB_GETTIPTEXT) #define SB_GETICON (WM_USER+20) #define SB_SETBKCOLOR CCM_SETBKCOLOR /* lParam = bkColor */ #define SB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define SB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define SBN_FIRST (0U-880U) #define SBN_LAST (0U-899U) #define SBN_SIMPLEMODECHANGE (SBN_FIRST-0) HWND WINAPI CreateStatusWindowA (LONG, LPCSTR, HWND, UINT); HWND WINAPI CreateStatusWindowW (LONG, LPCWSTR, HWND, UINT); #define CreateStatusWindow WINELIB_NAME_AW(CreateStatusWindow) VOID WINAPI DrawStatusTextA (HDC, LPCRECT, LPCSTR, UINT); VOID WINAPI DrawStatusTextW (HDC, LPCRECT, LPCWSTR, UINT); #define DrawStatusText WINELIB_NAME_AW(DrawStatusText) VOID WINAPI MenuHelp (UINT, WPARAM, LPARAM, HMENU, HINSTANCE, HWND, UINT*); typedef struct tagCOLORSCHEME { DWORD dwSize; COLORREF clrBtnHighlight; /* highlight color */ COLORREF clrBtnShadow; /* shadow color */ } COLORSCHEME, *LPCOLORSCHEME; /************************************************************************** * Drag List control */ typedef struct tagDRAGLISTINFO { UINT uNotification; HWND hWnd; POINT ptCursor; } DRAGLISTINFO, *LPDRAGLISTINFO; #define DL_BEGINDRAG (WM_USER+133) #define DL_DRAGGING (WM_USER+134) #define DL_DROPPED (WM_USER+135) #define DL_CANCELDRAG (WM_USER+136) #define DL_CURSORSET 0 #define DL_STOPCURSOR 1 #define DL_COPYCURSOR 2 #define DL_MOVECURSOR 3 #define DRAGLISTMSGSTRINGA "commctrl_DragListMsg" #if defined(__GNUC__) # define DRAGLISTMSGSTRINGW (const WCHAR []){ 'c','o','m','m','c','t','r','l', \ '_','D','r','a','g','L','i','s','t','M','s','g',0 } #elif defined(_MSC_VER) # define DRAGLISTMSGSTRINGW L"commctrl_DragListMsg" #else static const WCHAR DRAGLISTMSGSTRINGW[] = { 'c','o','m','m','c','t','r','l', '_','D','r','a','g','L','i','s','t','M','s','g',0 }; #endif #define DRAGLISTMSGSTRING WINELIB_NAME_AW(DRAGLISTMSGSTRING) BOOL WINAPI MakeDragList (HWND); VOID WINAPI DrawInsert (HWND, HWND, INT); INT WINAPI LBItemFromPt (HWND, POINT, BOOL); /* UpDown */ #define UPDOWN_CLASSA "msctls_updown32" #if defined(__GNUC__) # define UPDOWN_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \ 'u','p','d','o','w','n','3','2',0 } #elif defined(_MSC_VER) # define UPDOWN_CLASSW L"msctls_updown32" #else static const WCHAR UPDOWN_CLASSW[] = { 'm','s','c','t','l','s','_', 'u','p','d','o','w','n','3','2',0 }; #endif #define UPDOWN_CLASS WINELIB_NAME_AW(UPDOWN_CLASS) typedef struct _UDACCEL { UINT nSec; UINT nInc; } UDACCEL, *LPUDACCEL; #define UD_MAXVAL 0x7fff #define UD_MINVAL 0x8001 #define UDN_FIRST (0U-721) #define UDN_LAST (0U-740) #define UDN_DELTAPOS (UDN_FIRST-1) #define UDM_SETRANGE (WM_USER+101) #define UDM_GETRANGE (WM_USER+102) #define UDM_SETPOS (WM_USER+103) #define UDM_GETPOS (WM_USER+104) #define UDM_SETBUDDY (WM_USER+105) #define UDM_GETBUDDY (WM_USER+106) #define UDM_SETACCEL (WM_USER+107) #define UDM_GETACCEL (WM_USER+108) #define UDM_SETBASE (WM_USER+109) #define UDM_GETBASE (WM_USER+110) #define UDM_SETRANGE32 (WM_USER+111) #define UDM_GETRANGE32 (WM_USER+112) #define UDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define UDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define UDM_SETPOS32 (WM_USER+113) #define UDM_GETPOS32 (WM_USER+114) #define NMUPDOWN NM_UPDOWN #define LPNMUPDOWN LPNM_UPDOWN typedef struct tagNM_UPDOWN { NMHDR hdr; int iPos; int iDelta; } NM_UPDOWN, *LPNM_UPDOWN; HWND WINAPI CreateUpDownControl (DWORD, INT, INT, INT, INT, HWND, INT, HINSTANCE, HWND, INT, INT, INT); /* Progress Bar */ #define PROGRESS_CLASSA "msctls_progress32" #if defined(__GNUC__) # define PROGRESS_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \ 'p','r','o','g','r','e','s','s','3','2',0 } #elif defined(_MSC_VER) # define PROGRESS_CLASSW L"msctls_progress32" #else static const WCHAR PROGRESS_CLASSW[] = { 'm','s','c','t','l','s','_', 'p','r','o','g','r','e','s','s','3','2',0 }; #endif #define PROGRESS_CLASS WINELIB_NAME_AW(PROGRESS_CLASS) #define PBM_SETRANGE (WM_USER+1) #define PBM_SETPOS (WM_USER+2) #define PBM_DELTAPOS (WM_USER+3) #define PBM_SETSTEP (WM_USER+4) #define PBM_STEPIT (WM_USER+5) #define PBM_SETRANGE32 (WM_USER+6) #define PBM_GETRANGE (WM_USER+7) #define PBM_GETPOS (WM_USER+8) #define PBM_SETBARCOLOR (WM_USER+9) #define PBM_SETMARQUEE (WM_USER+10) #define PBM_GETSTEP (WM_USER+13) #define PBM_GETBKCOLOR (WM_USER+14) #define PBM_GETBARCOLOR (WM_USER+15) #define PBM_SETSTATE (WM_USER+16) #define PBM_GETSTATE (WM_USER+17) #define PBM_SETBKCOLOR CCM_SETBKCOLOR #define PBST_NORMAL 1 #define PBST_ERROR 2 #define PBST_PAUSED 3 typedef struct { INT iLow; INT iHigh; } PBRANGE, *PPBRANGE; /* ImageList */ struct _IMAGELIST; typedef struct _IMAGELIST *HIMAGELIST; #define CLR_NONE 0xFFFFFFFF #define CLR_DEFAULT 0xFF000000 #define CLR_HILIGHT CLR_DEFAULT #define ILC_MASK 0x00000001 #define ILC_COLOR 0x00000000 #define ILC_COLORDDB 0x000000fe #define ILC_COLOR4 0x00000004 #define ILC_COLOR8 0x00000008 #define ILC_COLOR16 0x00000010 #define ILC_COLOR24 0x00000018 #define ILC_COLOR32 0x00000020 #define ILC_PALETTE 0x00000800 /* no longer supported by M$ */ #define ILC_MIRROR 0x00002000 #define ILC_PERITEMMIRROR 0x00008000 #define ILC_ORIGINALSIZE 0x00010000 #define ILC_HIGHQUALITYSCALE 0x00020000 #define ILD_NORMAL 0x0000 #define ILD_TRANSPARENT 0x0001 #define ILD_BLEND25 0x0002 #define ILD_BLEND50 0x0004 #define ILD_MASK 0x0010 #define ILD_IMAGE 0x0020 #define ILD_ROP 0x0040 #define ILD_OVERLAYMASK 0x0F00 #define ILD_PRESERVEALPHA 0x1000 #define ILD_SCALE 0x2000 #define ILD_DPISCALE 0x4000 #define ILD_ASYNC 0x8000 #define ILD_SELECTED ILD_BLEND50 #define ILD_FOCUS ILD_BLEND25 #define ILD_BLEND ILD_BLEND50 #define INDEXTOOVERLAYMASK(i) ((i)<<8) #define INDEXTOSTATEIMAGEMASK(i) ((i)<<12) #define ILCF_MOVE (0x00000000) #define ILCF_SWAP (0x00000001) #define ILGT_NORMAL 0x0000 #define ILGT_ASYNC 0x0001 #define ILS_NORMAL 0x0000 #define ILS_GLOW 0x0001 #define ILS_SHADOW 0x0002 #define ILS_SATURATE 0x0004 #define ILS_ALPHA 0x0008 typedef struct _IMAGEINFO { HBITMAP hbmImage; HBITMAP hbmMask; INT Unused1; INT Unused2; RECT rcImage; } IMAGEINFO, *LPIMAGEINFO; typedef struct _IMAGELISTDRAWPARAMS { DWORD cbSize; HIMAGELIST himl; INT i; HDC hdcDst; INT x; INT y; INT cx; INT cy; INT xBitmap; /* x offset from the upperleft of bitmap */ INT yBitmap; /* y offset from the upperleft of bitmap */ COLORREF rgbBk; COLORREF rgbFg; UINT fStyle; DWORD dwRop; DWORD fState; DWORD Frame; COLORREF crEffect; } IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS; #define IMAGELISTDRAWPARAMS_V3_SIZE CCSIZEOF_STRUCT(IMAGELISTDRAWPARAMS, dwRop) HRESULT WINAPI HIMAGELIST_QueryInterface(HIMAGELIST,REFIID,void **); INT WINAPI ImageList_Add(HIMAGELIST,HBITMAP,HBITMAP); INT WINAPI ImageList_AddMasked(HIMAGELIST,HBITMAP,COLORREF); BOOL WINAPI ImageList_BeginDrag(HIMAGELIST,INT,INT,INT); BOOL WINAPI ImageList_Copy(HIMAGELIST,INT,HIMAGELIST,INT,UINT); HIMAGELIST WINAPI ImageList_Create(INT,INT,UINT,INT,INT); BOOL WINAPI ImageList_Destroy(HIMAGELIST); BOOL WINAPI ImageList_DragEnter(HWND,INT,INT); BOOL WINAPI ImageList_DragLeave(HWND); BOOL WINAPI ImageList_DragMove(INT,INT); BOOL WINAPI ImageList_DragShowNolock (BOOL); BOOL WINAPI ImageList_Draw(HIMAGELIST,INT,HDC,INT,INT,UINT); BOOL WINAPI ImageList_DrawEx(HIMAGELIST,INT,HDC,INT,INT,INT, INT,COLORREF,COLORREF,UINT); BOOL WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*); HIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST); VOID WINAPI ImageList_EndDrag(VOID); COLORREF WINAPI ImageList_GetBkColor(HIMAGELIST); HIMAGELIST WINAPI ImageList_GetDragImage(POINT*,POINT*); HICON WINAPI ImageList_GetIcon(HIMAGELIST,INT,UINT); BOOL WINAPI ImageList_GetIconSize(HIMAGELIST,INT*,INT*); INT WINAPI ImageList_GetImageCount(HIMAGELIST); BOOL WINAPI ImageList_GetImageInfo(HIMAGELIST,INT,IMAGEINFO*); BOOL WINAPI ImageList_GetImageRect(HIMAGELIST,INT,LPRECT); HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE,LPCSTR,INT,INT, COLORREF,UINT,UINT); HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE,LPCWSTR,INT,INT, COLORREF,UINT,UINT); #define ImageList_LoadImage WINELIB_NAME_AW(ImageList_LoadImage) HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST,INT,HIMAGELIST,INT,INT,INT); BOOL WINAPI ImageList_Remove(HIMAGELIST,INT); BOOL WINAPI ImageList_Replace(HIMAGELIST,INT,HBITMAP,HBITMAP); INT WINAPI ImageList_ReplaceIcon(HIMAGELIST,INT,HICON); COLORREF WINAPI ImageList_SetBkColor(HIMAGELIST,COLORREF); BOOL WINAPI ImageList_SetDragCursorImage(HIMAGELIST,INT,INT,INT); BOOL WINAPI ImageList_SetIconSize(HIMAGELIST,INT,INT); BOOL WINAPI ImageList_SetImageCount(HIMAGELIST,UINT); BOOL WINAPI ImageList_SetOverlayImage(HIMAGELIST,INT,INT); #ifdef __IStream_INTERFACE_DEFINED__ HIMAGELIST WINAPI ImageList_Read(LPSTREAM); BOOL WINAPI ImageList_Write(HIMAGELIST, LPSTREAM); #endif #define ImageList_AddIcon(himl,hicon) ImageList_ReplaceIcon(himl,-1,hicon) #define ImageList_ExtractIcon(hi,himl,i) ImageList_GetIcon(himl,i,0) #define ImageList_LoadBitmap(hi,lpbmp,cx,cGrow,crMask) \ ImageList_LoadImage(hi,lpbmp,cx,cGrow,crMask,IMAGE_BITMAP,0) #define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1) #ifndef WM_MOUSEHOVER #define WM_MOUSEHOVER 0x02A1 #define WM_MOUSELEAVE 0x02A3 #endif #ifndef TME_HOVER #define TME_HOVER 0x00000001 #define TME_LEAVE 0x00000002 #define TME_NONCLIENT 0x00000010 #define TME_QUERY 0x40000000 #define TME_CANCEL 0x80000000 #define HOVER_DEFAULT 0xFFFFFFFF typedef struct tagTRACKMOUSEEVENT { DWORD cbSize; DWORD dwFlags; HWND hwndTrack; DWORD dwHoverTime; } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT; #endif BOOL WINAPI _TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack); /* Flat Scrollbar control */ #define FLATSB_CLASSA "flatsb_class32" #if defined(__GNUC__) # define FLATSB_CLASSW (const WCHAR []){ 'f','l','a','t','s','b','_', \ 'c','l','a','s','s','3','2',0 } #elif defined(_MSC_VER) # define FLATSB_CLASSW L"flatsb_class32" #else static const WCHAR FLATSB_CLASSW[] = { 'f','l','a','t','s','b','_', 'c','l','a','s','s','3','2',0 }; #endif #define FLATSB_CLASS WINELIB_NAME_AW(FLATSB_CLASS) #define WSB_PROP_CYVSCROLL __MSABI_LONG(0x00000001) #define WSB_PROP_CXHSCROLL __MSABI_LONG(0x00000002) #define WSB_PROP_CYHSCROLL __MSABI_LONG(0x00000004) #define WSB_PROP_CXVSCROLL __MSABI_LONG(0x00000008) #define WSB_PROP_CXHTHUMB __MSABI_LONG(0x00000010) #define WSB_PROP_CYVTHUMB __MSABI_LONG(0x00000020) #define WSB_PROP_VBKGCOLOR __MSABI_LONG(0x00000040) #define WSB_PROP_HBKGCOLOR __MSABI_LONG(0x00000080) #define WSB_PROP_VSTYLE __MSABI_LONG(0x00000100) #define WSB_PROP_HSTYLE __MSABI_LONG(0x00000200) #define WSB_PROP_WINSTYLE __MSABI_LONG(0x00000400) #define WSB_PROP_PALETTE __MSABI_LONG(0x00000800) #define WSB_PROP_MASK __MSABI_LONG(0x00000FFF) #define FSB_REGULAR_MODE 0 #define FSB_ENCARTA_MODE 1 #define FSB_FLAT_MODE 2 BOOL WINAPI FlatSB_EnableScrollBar(HWND, INT, UINT); BOOL WINAPI FlatSB_ShowScrollBar(HWND, INT, BOOL); BOOL WINAPI FlatSB_GetScrollRange(HWND, INT, LPINT, LPINT); BOOL WINAPI FlatSB_GetScrollInfo(HWND, INT, LPSCROLLINFO); INT WINAPI FlatSB_GetScrollPos(HWND, INT); BOOL WINAPI FlatSB_GetScrollProp(HWND, INT, LPINT); INT WINAPI FlatSB_SetScrollPos(HWND, INT, INT, BOOL); INT WINAPI FlatSB_SetScrollInfo(HWND, INT, LPSCROLLINFO, BOOL); INT WINAPI FlatSB_SetScrollRange(HWND, INT, INT, INT, BOOL); BOOL WINAPI FlatSB_SetScrollProp(HWND, UINT, INT, BOOL); BOOL WINAPI InitializeFlatSB(HWND); HRESULT WINAPI UninitializeFlatSB(HWND); /* Subclassing stuff */ typedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND, UINT, WPARAM, LPARAM, UINT_PTR, DWORD_PTR); BOOL WINAPI SetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR); BOOL WINAPI GetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR*); BOOL WINAPI RemoveWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR); LRESULT WINAPI DefSubclassProc(HWND, UINT, WPARAM, LPARAM); int WINAPI DrawShadowText(HDC, LPCWSTR, UINT, RECT*, DWORD, COLORREF, COLORREF, int, int); /* Header control */ #define WC_HEADERA "SysHeader32" #if defined(__GNUC__) # define WC_HEADERW (const WCHAR []){ 'S','y','s','H','e','a','d','e','r','3','2',0 } #elif defined(_MSC_VER) # define WC_HEADERW L"SysHeader32" #else static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',0 }; #endif #define WC_HEADER WINELIB_NAME_AW(WC_HEADER) #define HDI_WIDTH 0x0001 #define HDI_HEIGHT HDI_WIDTH #define HDI_TEXT 0x0002 #define HDI_FORMAT 0x0004 #define HDI_LPARAM 0x0008 #define HDI_BITMAP 0x0010 #define HDI_IMAGE 0x0020 #define HDI_DI_SETITEM 0x0040 #define HDI_ORDER 0x0080 #define HDI_FILTER 0x0100 #define HDI_STATE 0x0200 #define HDIS_FOCUSED 0x00000001 #define HDF_LEFT 0x0000 #define HDF_RIGHT 0x0001 #define HDF_CENTER 0x0002 #define HDF_JUSTIFYMASK 0x0003 #define HDF_RTLREADING 0x0004 #define HDF_CHECKBOX 0x0040 #define HDF_CHECKED 0x0080 #define HDF_FIXEDWIDTH 0x0100 #define HDF_SORTDOWN 0x0200 #define HDF_SORTUP 0x0400 #define HDF_IMAGE 0x0800 #define HDF_BITMAP_ON_RIGHT 0x1000 #define HDF_BITMAP 0x2000 #define HDF_STRING 0x4000 #define HDF_OWNERDRAW 0x8000 #define HDF_SPLITBUTTON 0x1000000 #define HHT_NOWHERE 0x0001 #define HHT_ONHEADER 0x0002 #define HHT_ONDIVIDER 0x0004 #define HHT_ONDIVOPEN 0x0008 #define HHT_ONFILTER 0x0010 #define HHT_ONFILTERBUTTON 0x0020 #define HHT_ABOVE 0x0100 #define HHT_BELOW 0x0200 #define HHT_TORIGHT 0x0400 #define HHT_TOLEFT 0x0800 #define HHT_ONITEMSTATEICON 0x1000 #define HHT_ONDROPDOWN 0x2000 #define HHT_ONOVERFLOW 0x4000 #define HDM_FIRST 0x1200 #define HDM_GETITEMCOUNT (HDM_FIRST+0) #define HDM_INSERTITEMA (HDM_FIRST+1) #define HDM_INSERTITEMW (HDM_FIRST+10) #define HDM_INSERTITEM WINELIB_NAME_AW(HDM_INSERTITEM) #define HDM_DELETEITEM (HDM_FIRST+2) #define HDM_GETITEMA (HDM_FIRST+3) #define HDM_GETITEMW (HDM_FIRST+11) #define HDM_GETITEM WINELIB_NAME_AW(HDM_GETITEM) #define HDM_SETITEMA (HDM_FIRST+4) #define HDM_SETITEMW (HDM_FIRST+12) #define HDM_SETITEM WINELIB_NAME_AW(HDM_SETITEM) #define HDM_LAYOUT (HDM_FIRST+5) #define HDM_HITTEST (HDM_FIRST+6) #define HDM_GETITEMRECT (HDM_FIRST+7) #define HDM_SETIMAGELIST (HDM_FIRST+8) #define HDM_GETIMAGELIST (HDM_FIRST+9) #define HDM_ORDERTOINDEX (HDM_FIRST+15) #define HDM_CREATEDRAGIMAGE (HDM_FIRST+16) #define HDM_GETORDERARRAY (HDM_FIRST+17) #define HDM_SETORDERARRAY (HDM_FIRST+18) #define HDM_SETHOTDIVIDER (HDM_FIRST+19) #define HDM_SETBITMAPMARGIN (HDM_FIRST+20) #define HDM_GETBITMAPMARGIN (HDM_FIRST+21) #define HDM_SETFILTERCHANGETIMEOUT (HDM_FIRST+22) #define HDM_EDITFILTER (HDM_FIRST+23) #define HDM_CLEARFILTER (HDM_FIRST+24) #define HDM_GETITEMDROPDOWNRECT (HDM_FIRST+25) #define HDM_GETOVERFLOWRECT (HDM_FIRST+26) #define HDM_GETFOCUSEDITEM (HDM_FIRST+27) #define HDM_SETFOCUSEDITEM (HDM_FIRST+28) #define HDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define HDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define HDN_FIRST (0U-300U) #define HDN_LAST (0U-399U) #define HDN_ITEMCHANGINGA (HDN_FIRST-0) #define HDN_ITEMCHANGINGW (HDN_FIRST-20) #define HDN_ITEMCHANGING WINELIB_NAME_AW(HDN_ITEMCHANGING) #define HDN_ITEMCHANGEDA (HDN_FIRST-1) #define HDN_ITEMCHANGEDW (HDN_FIRST-21) #define HDN_ITEMCHANGED WINELIB_NAME_AW(HDN_ITEMCHANGED) #define HDN_ITEMCLICKA (HDN_FIRST-2) #define HDN_ITEMCLICKW (HDN_FIRST-22) #define HDN_ITEMCLICK WINELIB_NAME_AW(HDN_ITEMCLICK) #define HDN_ITEMDBLCLICKA (HDN_FIRST-3) #define HDN_ITEMDBLCLICKW (HDN_FIRST-23) #define HDN_ITEMDBLCLICK WINELIB_NAME_AW(HDN_ITEMDBLCLICK) #define HDN_DIVIDERDBLCLICKA (HDN_FIRST-5) #define HDN_DIVIDERDBLCLICKW (HDN_FIRST-25) #define HDN_DIVIDERDBLCLICK WINELIB_NAME_AW(HDN_DIVIDERDBLCLICK) #define HDN_BEGINTRACKA (HDN_FIRST-6) #define HDN_BEGINTRACKW (HDN_FIRST-26) #define HDN_BEGINTRACK WINELIB_NAME_AW(HDN_BEGINTRACK) #define HDN_ENDTRACKA (HDN_FIRST-7) #define HDN_ENDTRACKW (HDN_FIRST-27) #define HDN_ENDTRACK WINELIB_NAME_AW(HDN_ENDTRACK) #define HDN_TRACKA (HDN_FIRST-8) #define HDN_TRACKW (HDN_FIRST-28) #define HDN_TRACK WINELIB_NAME_AW(HDN_TRACK) #define HDN_GETDISPINFOA (HDN_FIRST-9) #define HDN_GETDISPINFOW (HDN_FIRST-29) #define HDN_GETDISPINFO WINELIB_NAME_AW(HDN_GETDISPINFO) #define HDN_BEGINDRAG (HDN_FIRST-10) #define HDN_ENDDRAG (HDN_FIRST-11) #define HDN_FILTERCHANGE (HDN_FIRST-12) #define HDN_FILTERBTNCLICK (HDN_FIRST-13) #define HDN_BEGINFILTEREDIT (HDN_FIRST-14) #define HDN_ENDFILTEREDIT (HDN_FIRST-15) #define HDN_ITEMSTATEICONCLICK (HDN_FIRST-16) #define HDN_ITEMKEYDOWN (HDN_FIRST-17) #define HDN_DROPDOWN (HDN_FIRST-18) #define HDN_OVERFLOWCLICK (HDN_FIRST-19) typedef struct _HD_LAYOUT { RECT *prc; WINDOWPOS *pwpos; } HDLAYOUT, *LPHDLAYOUT; #define HD_LAYOUT HDLAYOUT typedef struct _HD_ITEMA { UINT mask; INT cxy; LPSTR pszText; HBITMAP hbm; INT cchTextMax; INT fmt; LPARAM lParam; /* (_WIN32_IE >= 0x0300) */ INT iImage; INT iOrder; /* (_WIN32_IE >= 0x0500) */ UINT type; LPVOID pvFilter; /* (_WIN32_WINNT >= 0x0600) */ UINT state; } HDITEMA, *LPHDITEMA; typedef struct _HD_ITEMW { UINT mask; INT cxy; LPWSTR pszText; HBITMAP hbm; INT cchTextMax; INT fmt; LPARAM lParam; /* (_WIN32_IE >= 0x0300) */ INT iImage; INT iOrder; /* (_WIN32_IE >= 0x0500) */ UINT type; LPVOID pvFilter; /* (_WIN32_WINNT >= 0x0600) */ UINT state; } HDITEMW, *LPHDITEMW; #define HDITEM WINELIB_NAME_AW(HDITEM) #define LPHDITEM WINELIB_NAME_AW(LPHDITEM) #define HD_ITEM HDITEM #define HDITEM_V1_SIZEA CCSIZEOF_STRUCT(HDITEMA, lParam) #define HDITEM_V1_SIZEW CCSIZEOF_STRUCT(HDITEMW, lParam) #define HDITEM_V1_SIZE WINELIB_NAME_AW(HDITEM_V1_SIZE) #define HDFT_ISSTRING 0x0000 #define HDFT_ISNUMBER 0x0001 #define HDFT_HASNOVALUE 0x8000 typedef struct _HD_TEXTFILTERA { LPSTR pszText; INT cchTextMax; } HD_TEXTFILTERA, *LPHD_TEXTFILTERA; typedef struct _HD_TEXTFILTERW { LPWSTR pszText; INT cchTextMax; } HD_TEXTFILTERW, *LPHD_TEXTFILTERW; #define HD_TEXTFILTER WINELIB_NAME_AW(HD_TEXTFILTER) #define HDTEXTFILTER WINELIB_NAME_AW(HD_TEXTFILTER) #define LPHD_TEXTFILTER WINELIB_NAME_AW(LPHD_TEXTFILTER) #define LPHDTEXTFILTER WINELIB_NAME_AW(LPHD_TEXTFILTER) typedef struct _HD_HITTESTINFO { POINT pt; UINT flags; INT iItem; } HDHITTESTINFO, *LPHDHITTESTINFO; #define HD_HITTESTINFO HDHITTESTINFO typedef struct tagNMHEADERA { NMHDR hdr; INT iItem; INT iButton; HDITEMA *pitem; } NMHEADERA, *LPNMHEADERA; typedef struct tagNMHEADERW { NMHDR hdr; INT iItem; INT iButton; HDITEMW *pitem; } NMHEADERW, *LPNMHEADERW; #define NMHEADER WINELIB_NAME_AW(NMHEADER) #define LPNMHEADER WINELIB_NAME_AW(LPNMHEADER) #define HD_NOTIFY NMHEADER typedef struct tagNMHDDISPINFOA { NMHDR hdr; INT iItem; UINT mask; LPSTR pszText; INT cchTextMax; INT iImage; LPARAM lParam; } NMHDDISPINFOA, *LPNMHDDISPINFOA; typedef struct tagNMHDDISPINFOW { NMHDR hdr; INT iItem; UINT mask; LPWSTR pszText; INT cchTextMax; INT iImage; LPARAM lParam; } NMHDDISPINFOW, *LPNMHDDISPINFOW; #define NMHDDISPINFO WINELIB_NAME_AW(NMHDDISPINFO) #define LPNMHDDISPINFO WINELIB_NAME_AW(LPNMHDDISPINFO) typedef struct tagNMHDFILTERBTNCLICK { NMHDR hdr; INT iItem; RECT rc; } NMHDFILTERBTNCLICK, *LPNMHDFILTERBTNCLICK; #define Header_GetItemCount(hwndHD) \ (INT)SNDMSG((hwndHD), HDM_GETITEMCOUNT, 0, 0) #define Header_InsertItemA(hwndHD,i,phdi) \ (INT)SNDMSGA((hwndHD),HDM_INSERTITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi)) #define Header_InsertItemW(hwndHD,i,phdi) \ (INT)SNDMSGW((hwndHD),HDM_INSERTITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi)) #define Header_InsertItem WINELIB_NAME_AW(Header_InsertItem) #define Header_DeleteItem(hwndHD,i) \ (BOOL)SNDMSG((hwndHD), HDM_DELETEITEM, (WPARAM)(INT)(i), 0) #define Header_GetItemA(hwndHD,i,phdi) \ (BOOL)SNDMSGA((hwndHD),HDM_GETITEMA,(WPARAM)(INT)(i),(LPARAM)(HDITEMA*)(phdi)) #define Header_GetItemW(hwndHD,i,phdi) \ (BOOL)SNDMSGW((hwndHD),HDM_GETITEMW,(WPARAM)(INT)(i),(LPARAM)(HDITEMW*)(phdi)) #define Header_GetItem WINELIB_NAME_AW(Header_GetItem) #define Header_SetItemA(hwndHD,i,phdi) \ (BOOL)SNDMSGA((hwndHD),HDM_SETITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi)) #define Header_SetItemW(hwndHD,i,phdi) \ (BOOL)SNDMSGW((hwndHD),HDM_SETITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi)) #define Header_SetItem WINELIB_NAME_AW(Header_SetItem) #define Header_Layout(hwndHD,playout) \ (BOOL)SNDMSG((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout)) #define Header_GetItemRect(hwnd,iItem,lprc) \ (BOOL)SNDMSG((hwnd),HDM_GETITEMRECT,(WPARAM)iItem,(LPARAM)lprc) #define Header_SetImageList(hwnd,himl) \ (HIMAGELIST)SNDMSG((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl) #define Header_GetImageList(hwnd) \ (HIMAGELIST)SNDMSG((hwnd),HDM_GETIMAGELIST,0,0) #define Header_OrderToIndex(hwnd,i) \ (INT)SNDMSG((hwnd),HDM_ORDERTOINDEX,(WPARAM)i,0) #define Header_CreateDragImage(hwnd,i) \ (HIMAGELIST)SNDMSG((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM)i,0) #define Header_GetOrderArray(hwnd,iCount,lpi) \ (BOOL)SNDMSG((hwnd),HDM_GETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi) #define Header_SetOrderArray(hwnd,iCount,lpi) \ (BOOL)SNDMSG((hwnd),HDM_SETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi) #define Header_SetHotDivider(hwnd,fPos,dw) \ (INT)SNDMSG((hwnd),HDM_SETHOTDIVIDER,(WPARAM)fPos,(LPARAM)dw) #define Header_SetUnicodeFormat(hwnd,fUnicode) \ (BOOL)SNDMSG((hwnd),HDM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0) #define Header_GetUnicodeFormat(hwnd) \ (BOOL)SNDMSG((hwnd),HDM_GETUNICODEFORMAT,0,0) /* Win32 5.1 Button Theme */ #define WC_BUTTONA "Button" #if defined(__GNUC__) # define WC_BUTTONW (const WCHAR []){ 'B','u','t','t','o','n',0 } #elif defined(_MSC_VER) # define WC_BUTTONW L"Button" #else static const WCHAR WC_BUTTONW[] = { 'B','u','t','t','o','n',0 }; #endif #define WC_BUTTON WINELIB_NAME_AW(WC_BUTTON) #define BCN_FIRST (0U-1250U) #define BCN_LAST (0U-1350U) #define BCN_HOTITEMCHANGE (BCN_FIRST + 1) #define BCN_DROPDOWN (BCN_FIRST + 2) #define NM_GETCUSTOMSPLITRECT (BCN_FIRST + 3) #define BCM_FIRST 0x1600 #define BCM_GETIDEALSIZE (BCM_FIRST + 1) #define BCM_SETIMAGELIST (BCM_FIRST + 2) #define BCM_GETIMAGELIST (BCM_FIRST + 3) #define BCM_SETTEXTMARGIN (BCM_FIRST + 4) #define BCM_GETTEXTMARGIN (BCM_FIRST + 5) #define BCM_SETDROPDOWNSTATE (BCM_FIRST + 6) #define BCM_SETSPLITINFO (BCM_FIRST + 7) #define BCM_GETSPLITINFO (BCM_FIRST + 8) #define BCM_SETNOTE (BCM_FIRST + 9) #define BCM_GETNOTE (BCM_FIRST + 10) #define BCM_GETNOTELENGTH (BCM_FIRST + 11) #define BCM_SETSHIELD (BCM_FIRST + 12) #define BUTTON_IMAGELIST_ALIGN_LEFT 0 #define BUTTON_IMAGELIST_ALIGN_RIGHT 1 #define BUTTON_IMAGELIST_ALIGN_TOP 2 #define BUTTON_IMAGELIST_ALIGN_BOTTOM 3 #define BUTTON_IMAGELIST_ALIGN_CENTER 4 #define BCCL_NOGLYPH (HIMAGELIST)(-1) typedef struct { HIMAGELIST himl; RECT margin; UINT uAlign; } BUTTON_IMAGELIST, *PBUTTON_IMAGELIST; typedef struct tagBUTTON_SPLITINFO { UINT mask; HIMAGELIST himlGlyph; UINT uSplitStyle; SIZE size; } BUTTON_SPLITINFO, *PBUTTON_SPLITINFO; typedef struct tagNMBCDROPDOWN { NMHDR hdr; RECT rcButton; } NMBCDROPDOWN; typedef struct tagNMBCHOTITEM { NMHDR hdr; DWORD dwFlags; } NMBCHOTITEM, *LPNMBCHOTITEM; #define BST_HOT 0x0200 #define BST_DROPDOWNPUSHED 0x0400 /* Button control styles for _WIN32_WINNT >= 0x600 */ #define BS_SPLITBUTTON 0x0000000C #define BS_DEFSPLITBUTTON 0x0000000D #define BS_COMMANDLINK 0x0000000E #define BS_DEFCOMMANDLINK 0x0000000F /* Button macros */ #define Button_SetNote(button, note) \ (BOOL)SNDMSG(button, BCM_SETNOTE, 0, (LPARAM)(note)) #define Button_GetNote(button, buffer, size) \ (BOOL)SNDMSG(button, BCM_GETNOTE, (WPARAM)(size), (LPARAM)(buffer)) #define Button_GetNoteLength(button) \ (LRESULT)SNDMSG(button, BCM_GETNOTELENGTH, 0, 0) #define Button_GetImageList(button, image_list) \ (BOOL)SNDMSG(button, BCM_GETIMAGELIST, 0, (LPARAM)(image_list)) #define Button_SetImageList(button, image_list) \ (BOOL)SNDMSG(button, BCM_SETIMAGELIST, 0, (LPARAM)(image_list)) #define Button_GetTextMargin(button, margin) \ (BOOL)SNDMSG(button, BCM_GETTEXTMARGIN, 0, (LPARAM)(margin)) #define Button_SetTextMargin(button, margin) \ (BOOL)SNDMSG(button, BCM_SETTEXTMARGIN, 0, (LPARAM)(margin)) #define Button_GetIdealSize(button, size) \ (BOOL)SNDMSG(button, BCM_GETIDEALSIZE, 0, (LPARAM)(size)) /* Toolbar */ #define TOOLBARCLASSNAMEA "ToolbarWindow32" #if defined(__GNUC__) # define TOOLBARCLASSNAMEW (const WCHAR []){ 'T','o','o','l','b','a','r', \ 'W','i','n','d','o','w','3','2',0 } #elif defined(_MSC_VER) # define TOOLBARCLASSNAMEW L"ToolbarWindow32" #else static const WCHAR TOOLBARCLASSNAMEW[] = { 'T','o','o','l','b','a','r', 'W','i','n','d','o','w','3','2',0 }; #endif #define TOOLBARCLASSNAME WINELIB_NAME_AW(TOOLBARCLASSNAME) #define CMB_MASKED 0x02 #define TBSTATE_CHECKED 0x01 #define TBSTATE_PRESSED 0x02 #define TBSTATE_ENABLED 0x04 #define TBSTATE_HIDDEN 0x08 #define TBSTATE_INDETERMINATE 0x10 #define TBSTATE_WRAP 0x20 #define TBSTATE_ELLIPSES 0x40 #define TBSTATE_MARKED 0x80 /* as of _WIN32_IE >= 0x0500 the following symbols are obsolete, * "everyone" should use the BTNS_... stuff below */ #define TBSTYLE_BUTTON 0x00 #define TBSTYLE_SEP 0x01 #define TBSTYLE_CHECK 0x02 #define TBSTYLE_GROUP 0x04 #define TBSTYLE_CHECKGROUP (TBSTYLE_GROUP | TBSTYLE_CHECK) #define TBSTYLE_DROPDOWN 0x08 #define TBSTYLE_AUTOSIZE 0x10 #define TBSTYLE_NOPREFIX 0x20 #define BTNS_BUTTON TBSTYLE_BUTTON #define BTNS_SEP TBSTYLE_SEP #define BTNS_CHECK TBSTYLE_CHECK #define BTNS_GROUP TBSTYLE_GROUP #define BTNS_CHECKGROUP TBSTYLE_CHECKGROUP #define BTNS_DROPDOWN TBSTYLE_DROPDOWN #define BTNS_AUTOSIZE TBSTYLE_AUTOSIZE #define BTNS_NOPREFIX TBSTYLE_NOPREFIX #define BTNS_SHOWTEXT 0x40 /* ignored unless TBSTYLE_EX_MIXEDB set */ #define BTNS_WHOLEDROPDOWN 0x80 /* draw dropdown arrow, but without split arrow section */ #define TBSTYLE_TOOLTIPS 0x0100 #define TBSTYLE_WRAPABLE 0x0200 #define TBSTYLE_ALTDRAG 0x0400 #define TBSTYLE_FLAT 0x0800 #define TBSTYLE_LIST 0x1000 #define TBSTYLE_CUSTOMERASE 0x2000 #define TBSTYLE_REGISTERDROP 0x4000 #define TBSTYLE_TRANSPARENT 0x8000 #define TBSTYLE_EX_DRAWDDARROWS 0x00000001 #define TBSTYLE_EX_MULTICOLUMN 0x00000002 #define TBSTYLE_EX_VERTICAL 0x00000004 #define TBSTYLE_EX_MIXEDBUTTONS 0x00000008 #define TBSTYLE_EX_HIDECLIPPEDBUTTONS 0x00000010 /* don't show partially obscured buttons */ #define TBSTYLE_EX_DOUBLEBUFFER 0x00000080 /* Double Buffer the toolbar */ #define TBIF_IMAGE 0x00000001 #define TBIF_TEXT 0x00000002 #define TBIF_STATE 0x00000004 #define TBIF_STYLE 0x00000008 #define TBIF_LPARAM 0x00000010 #define TBIF_COMMAND 0x00000020 #define TBIF_SIZE 0x00000040 #define TBIF_BYINDEX 0x80000000 #define TBBF_LARGE 0x0001 #define TB_ENABLEBUTTON (WM_USER+1) #define TB_CHECKBUTTON (WM_USER+2) #define TB_PRESSBUTTON (WM_USER+3) #define TB_HIDEBUTTON (WM_USER+4) #define TB_INDETERMINATE (WM_USER+5) #define TB_MARKBUTTON (WM_USER+6) #define TB_ISBUTTONENABLED (WM_USER+9) #define TB_ISBUTTONCHECKED (WM_USER+10) #define TB_ISBUTTONPRESSED (WM_USER+11) #define TB_ISBUTTONHIDDEN (WM_USER+12) #define TB_ISBUTTONINDETERMINATE (WM_USER+13) #define TB_ISBUTTONHIGHLIGHTED (WM_USER+14) #define TB_SETSTATE (WM_USER+17) #define TB_GETSTATE (WM_USER+18) #define TB_ADDBITMAP (WM_USER+19) #define TB_ADDBUTTONSA (WM_USER+20) #define TB_ADDBUTTONSW (WM_USER+68) #define TB_ADDBUTTONS WINELIB_NAME_AW(TB_ADDBUTTONS) #define TB_HITTEST (WM_USER+69) #define TB_INSERTBUTTONA (WM_USER+21) #define TB_INSERTBUTTONW (WM_USER+67) #define TB_INSERTBUTTON WINELIB_NAME_AW(TB_INSERTBUTTON) #define TB_DELETEBUTTON (WM_USER+22) #define TB_GETBUTTON (WM_USER+23) #define TB_BUTTONCOUNT (WM_USER+24) #define TB_COMMANDTOINDEX (WM_USER+25) #define TB_SAVERESTOREA (WM_USER+26) #define TB_SAVERESTOREW (WM_USER+76) #define TB_SAVERESTORE WINELIB_NAME_AW(TB_SAVERESTORE) #define TB_CUSTOMIZE (WM_USER+27) #define TB_ADDSTRINGA (WM_USER+28) #define TB_ADDSTRINGW (WM_USER+77) #define TB_ADDSTRING WINELIB_NAME_AW(TB_ADDSTRING) #define TB_GETITEMRECT (WM_USER+29) #define TB_BUTTONSTRUCTSIZE (WM_USER+30) #define TB_SETBUTTONSIZE (WM_USER+31) #define TB_SETBITMAPSIZE (WM_USER+32) #define TB_AUTOSIZE (WM_USER+33) #define TB_GETTOOLTIPS (WM_USER+35) #define TB_SETTOOLTIPS (WM_USER+36) #define TB_SETPARENT (WM_USER+37) #define TB_SETROWS (WM_USER+39) #define TB_GETROWS (WM_USER+40) #define TB_GETBITMAPFLAGS (WM_USER+41) #define TB_SETCMDID (WM_USER+42) #define TB_CHANGEBITMAP (WM_USER+43) #define TB_GETBITMAP (WM_USER+44) #define TB_GETBUTTONTEXTA (WM_USER+45) #define TB_GETBUTTONTEXTW (WM_USER+75) #define TB_GETBUTTONTEXT WINELIB_NAME_AW(TB_GETBUTTONTEXT) #define TB_REPLACEBITMAP (WM_USER+46) #define TB_SETINDENT (WM_USER+47) #define TB_SETIMAGELIST (WM_USER+48) #define TB_GETIMAGELIST (WM_USER+49) #define TB_LOADIMAGES (WM_USER+50) #define TB_GETRECT (WM_USER+51) /* wParam is the Cmd instead of index */ #define TB_SETHOTIMAGELIST (WM_USER+52) #define TB_GETHOTIMAGELIST (WM_USER+53) #define TB_SETDISABLEDIMAGELIST (WM_USER+54) #define TB_GETDISABLEDIMAGELIST (WM_USER+55) #define TB_SETSTYLE (WM_USER+56) #define TB_GETSTYLE (WM_USER+57) #define TB_GETBUTTONSIZE (WM_USER+58) #define TB_SETBUTTONWIDTH (WM_USER+59) #define TB_SETMAXTEXTROWS (WM_USER+60) #define TB_GETTEXTROWS (WM_USER+61) #define TB_GETOBJECT (WM_USER+62) #define TB_GETBUTTONINFOW (WM_USER+63) #define TB_GETBUTTONINFOA (WM_USER+65) #define TB_GETBUTTONINFO WINELIB_NAME_AW(TB_GETBUTTONINFO) #define TB_SETBUTTONINFOW (WM_USER+64) #define TB_SETBUTTONINFOA (WM_USER+66) #define TB_SETBUTTONINFO WINELIB_NAME_AW(TB_SETBUTTONINFO) #define TB_SETDRAWTEXTFLAGS (WM_USER+70) #define TB_GETHOTITEM (WM_USER+71) #define TB_SETHOTITEM (WM_USER+72) #define TB_SETANCHORHIGHLIGHT (WM_USER+73) #define TB_GETANCHORHIGHLIGHT (WM_USER+74) #define TB_MAPACCELERATORA (WM_USER+78) #define TB_MAPACCELERATORW (WM_USER+90) #define TB_MAPACCELERATOR WINELIB_NAME_AW(TB_MAPACCELERATOR) #define TB_GETINSERTMARK (WM_USER+79) #define TB_SETINSERTMARK (WM_USER+80) #define TB_INSERTMARKHITTEST (WM_USER+81) #define TB_MOVEBUTTON (WM_USER+82) #define TB_GETMAXSIZE (WM_USER+83) #define TB_SETEXTENDEDSTYLE (WM_USER+84) #define TB_GETEXTENDEDSTYLE (WM_USER+85) #define TB_GETPADDING (WM_USER+86) #define TB_SETPADDING (WM_USER+87) #define TB_SETINSERTMARKCOLOR (WM_USER+88) #define TB_GETINSERTMARKCOLOR (WM_USER+89) #define TB_SETCOLORSCHEME CCM_SETCOLORSCHEME #define TB_GETCOLORSCHEME CCM_GETCOLORSCHEME #define TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define TB_GETSTRINGW (WM_USER+91) #define TB_GETSTRINGA (WM_USER+92) #define TB_GETSTRING WINELIB_NAME_AW(TB_GETSTRING) #define TB_SETBOUNDINGSIZE (WM_USER+93) #define TB_SETHOTITEM2 (WM_USER+94) #define TB_HASACCELERATOR (WM_USER+95) #define TB_SETLISTGAP (WM_USER+96) #define TB_GETIMAGELISTCOUNT (WM_USER+98) #define TB_GETIDEALSIZE (WM_USER+99) /* undocumented messages in Toolbar */ #ifdef __WINESRC__ #define TB_UNKWN464 (WM_USER+100) #endif #define TB_GETMETRICS (WM_USER+101) #define TB_SETMETRICS (WM_USER+102) #define TB_GETITEMDROPDOWNRECT (WM_USER+103) #define TB_SETPRESSEDIMAGELIST (WM_USER+104) #define TB_GETPRESSEDIMAGELIST (WM_USER+105) #define TB_SETWINDOWTHEME CCM_SETWINDOWTHEME #define TBN_FIRST (0U-700U) #define TBN_LAST (0U-720U) #define TBN_GETBUTTONINFOA (TBN_FIRST-0) #define TBN_GETBUTTONINFOW (TBN_FIRST-20) #define TBN_GETBUTTONINFO WINELIB_NAME_AW(TBN_GETBUTTONINFO) #define TBN_BEGINDRAG (TBN_FIRST-1) #define TBN_ENDDRAG (TBN_FIRST-2) #define TBN_BEGINADJUST (TBN_FIRST-3) #define TBN_ENDADJUST (TBN_FIRST-4) #define TBN_RESET (TBN_FIRST-5) #define TBN_QUERYINSERT (TBN_FIRST-6) #define TBN_QUERYDELETE (TBN_FIRST-7) #define TBN_TOOLBARCHANGE (TBN_FIRST-8) #define TBN_CUSTHELP (TBN_FIRST-9) #define TBN_DROPDOWN (TBN_FIRST-10) #define TBN_GETOBJECT (TBN_FIRST-12) #define TBN_HOTITEMCHANGE (TBN_FIRST-13) #define TBN_DRAGOUT (TBN_FIRST-14) #define TBN_DELETINGBUTTON (TBN_FIRST-15) #define TBN_GETDISPINFOA (TBN_FIRST-16) #define TBN_GETDISPINFOW (TBN_FIRST-17) #define TBN_GETDISPINFO WINELIB_NAME_AW(TBN_GETDISPINFO) #define TBN_GETINFOTIPA (TBN_FIRST-18) #define TBN_GETINFOTIPW (TBN_FIRST-19) #define TBN_GETINFOTIP WINELIB_NAME_AW(TBN_GETINFOTIP) #define TBN_RESTORE (TBN_FIRST-21) #define TBN_SAVE (TBN_FIRST-22) #define TBN_INITCUSTOMIZE (TBN_FIRST-23) #define TBN_WRAPHOTITEM (TBN_FIRST-24) #define TBN_DUPACCELERATOR (TBN_FIRST-25) #define TBN_WRAPACCELERATOR (TBN_FIRST-26) #define TBN_DRAGOVER (TBN_FIRST-27) #define TBN_MAPACCELERATOR (TBN_FIRST-28) #define TBNRF_HIDEHELP 0x00000001 /* Return values from TBN_DROPDOWN */ #define TBDDRET_DEFAULT 0 #define TBDDRET_NODEFAULT 1 #define TBDDRET_TREATPRESSED 2 typedef struct _NMTBCUSTOMDRAW { NMCUSTOMDRAW nmcd; HBRUSH hbrMonoDither; HBRUSH hbrLines; HPEN hpenLines; COLORREF clrText; COLORREF clrMark; COLORREF clrTextHighlight; COLORREF clrBtnFace; COLORREF clrBtnHighlight; COLORREF clrHighlightHotTrack; RECT rcText; int nStringBkMode; int nHLStringBkMode; int iListGap; } NMTBCUSTOMDRAW, *LPNMTBCUSTOMDRAW; /* return flags for Toolbar NM_CUSTOMDRAW notifications */ #define TBCDRF_NOEDGES 0x00010000 /* Don't draw button edges */ #define TBCDRF_HILITEHOTTRACK 0x00020000 /* Use color of the button bkgnd */ /* when hottracked */ #define TBCDRF_NOOFFSET 0x00040000 /* No offset button if pressed */ #define TBCDRF_NOMARK 0x00080000 /* Don't draw default highlight */ /* for TBSTATE_MARKED */ #define TBCDRF_NOETCHEDEFFECT 0x00100000 /* No etched effect for */ /* disabled items */ #define TBCDRF_BLENDICON 0x00200000 /* ILD_BLEND50 on the icon image */ #define TBCDRF_NOBACKGROUND 0x00400000 /* ILD_BLEND50 on the icon image */ #define TBCDRF_USECDCOLORS 0x00800000 /* This is just for old CreateToolbar. */ /* Don't use it in new programs. */ typedef struct _OLDTBBUTTON { INT iBitmap; INT idCommand; BYTE fsState; BYTE fsStyle; BYTE bReserved[2]; DWORD dwData; } OLDTBBUTTON, *POLDTBBUTTON, *LPOLDTBBUTTON; typedef const OLDTBBUTTON *LPCOLDTBBUTTON; typedef struct _TBBUTTON { INT iBitmap; INT idCommand; BYTE fsState; BYTE fsStyle; #ifdef _WIN64 BYTE bReserved[6]; #else BYTE bReserved[2]; #endif DWORD_PTR dwData; INT_PTR iString; } TBBUTTON, *PTBBUTTON, *LPTBBUTTON; typedef const TBBUTTON *LPCTBBUTTON; typedef struct _COLORMAP { COLORREF from; COLORREF to; } COLORMAP, *LPCOLORMAP; typedef struct tagTBADDBITMAP { HINSTANCE hInst; UINT_PTR nID; } TBADDBITMAP, *LPTBADDBITMAP; #define HINST_COMMCTRL ((HINSTANCE)-1) #define IDB_STD_SMALL_COLOR 0 #define IDB_STD_LARGE_COLOR 1 #define IDB_VIEW_SMALL_COLOR 4 #define IDB_VIEW_LARGE_COLOR 5 #define IDB_HIST_SMALL_COLOR 8 #define IDB_HIST_LARGE_COLOR 9 #define IDB_HIST_NORMAL 12 #define IDB_HIST_HOT 13 #define IDB_HIST_DISABLED 14 #define IDB_HIST_PRESSED 15 #define STD_CUT 0 #define STD_COPY 1 #define STD_PASTE 2 #define STD_UNDO 3 #define STD_REDOW 4 #define STD_DELETE 5 #define STD_FILENEW 6 #define STD_FILEOPEN 7 #define STD_FILESAVE 8 #define STD_PRINTPRE 9 #define STD_PROPERTIES 10 #define STD_HELP 11 #define STD_FIND 12 #define STD_REPLACE 13 #define STD_PRINT 14 #define VIEW_LARGEICONS 0 #define VIEW_SMALLICONS 1 #define VIEW_LIST 2 #define VIEW_DETAILS 3 #define VIEW_SORTNAME 4 #define VIEW_SORTSIZE 5 #define VIEW_SORTDATE 6 #define VIEW_SORTTYPE 7 #define VIEW_PARENTFOLDER 8 #define VIEW_NETCONNECT 9 #define VIEW_NETDISCONNECT 10 #define VIEW_NEWFOLDER 11 #define VIEW_VIEWMENU 12 #define HIST_BACK 0 #define HIST_FORWARD 1 #define HIST_FAVORITES 2 #define HIST_ADDTOFAVORITES 3 #define HIST_VIEWTREE 4 typedef struct tagTBSAVEPARAMSA { HKEY hkr; LPCSTR pszSubKey; LPCSTR pszValueName; } TBSAVEPARAMSA, *LPTBSAVEPARAMSA; typedef struct tagTBSAVEPARAMSW { HKEY hkr; LPCWSTR pszSubKey; LPCWSTR pszValueName; } TBSAVEPARAMSW, *LPTBSAVEPARAMSW; #define TBSAVEPARAMS WINELIB_NAME_AW(TBSAVEPARAMS) #define LPTBSAVEPARAMS WINELIB_NAME_AW(LPTBSAVEPARAMS) typedef struct { UINT cbSize; DWORD dwMask; INT idCommand; INT iImage; BYTE fsState; BYTE fsStyle; WORD cx; DWORD_PTR lParam; LPSTR pszText; INT cchText; } TBBUTTONINFOA, *LPTBBUTTONINFOA; typedef struct { UINT cbSize; DWORD dwMask; INT idCommand; INT iImage; BYTE fsState; BYTE fsStyle; WORD cx; DWORD_PTR lParam; LPWSTR pszText; INT cchText; } TBBUTTONINFOW, *LPTBBUTTONINFOW; #define TBBUTTONINFO WINELIB_NAME_AW(TBBUTTONINFO) #define LPTBBUTTONINFO WINELIB_NAME_AW(LPTBBUTTONINFO) typedef struct tagNMTBHOTITEM { NMHDR hdr; int idOld; int idNew; DWORD dwFlags; } NMTBHOTITEM, *LPNMTBHOTITEM; typedef struct tagNMTBGETINFOTIPA { NMHDR hdr; LPSTR pszText; INT cchTextMax; INT iItem; LPARAM lParam; } NMTBGETINFOTIPA, *LPNMTBGETINFOTIPA; typedef struct tagNMTBGETINFOTIPW { NMHDR hdr; LPWSTR pszText; INT cchTextMax; INT iItem; LPARAM lParam; } NMTBGETINFOTIPW, *LPNMTBGETINFOTIPW; #define NMTBGETINFOTIP WINELIB_NAME_AW(NMTBGETINFOTIP) #define LPNMTBGETINFOTIP WINELIB_NAME_AW(LPNMTBGETINFOTIP) typedef struct { NMHDR hdr; DWORD dwMask; int idCommand; DWORD_PTR lParam; int iImage; LPSTR pszText; int cchText; } NMTBDISPINFOA, *LPNMTBDISPINFOA; typedef struct { NMHDR hdr; DWORD dwMask; int idCommand; DWORD_PTR lParam; int iImage; LPWSTR pszText; int cchText; } NMTBDISPINFOW, *LPNMTBDISPINFOW; #define NMTBDISPINFO WINELIB_NAME_AW(NMTBDISPINFO) #define LPNMTBDISPINFO WINELIB_NAME_AW(LPNMTBDISPINFO) /* contents of dwMask in the NMTBDISPINFO structure */ #define TBNF_IMAGE 0x00000001 #define TBNF_TEXT 0x00000002 #define TBNF_DI_SETITEM 0x10000000 typedef struct tagNMTOOLBARA { NMHDR hdr; INT iItem; TBBUTTON tbButton; INT cchText; LPSTR pszText; RECT rcButton; /* Version 5.80 */ } NMTOOLBARA, *LPNMTOOLBARA, TBNOTIFYA, *LPTBNOTIFYA; typedef struct tagNMTOOLBARW { NMHDR hdr; INT iItem; TBBUTTON tbButton; INT cchText; LPWSTR pszText; RECT rcButton; /* Version 5.80 */ } NMTOOLBARW, *LPNMTOOLBARW, TBNOTIFYW, *LPTBNOTIFYW; #define NMTOOLBAR WINELIB_NAME_AW(NMTOOLBAR) #define LPNMTOOLBAR WINELIB_NAME_AW(LPNMTOOLBAR) #define TBNOTIFY WINELIB_NAME_AW(TBNOTIFY) #define LPTBNOTIFY WINELIB_NAME_AW(LPTBNOTIFY) typedef struct { HINSTANCE hInstOld; UINT_PTR nIDOld; HINSTANCE hInstNew; UINT_PTR nIDNew; INT nButtons; } TBREPLACEBITMAP, *LPTBREPLACEBITMAP; #define HICF_OTHER 0x00000000 #define HICF_MOUSE 0x00000001 /* Triggered by mouse */ #define HICF_ARROWKEYS 0x00000002 /* Triggered by arrow keys */ #define HICF_ACCELERATOR 0x00000004 /* Triggered by accelerator */ #define HICF_DUPACCEL 0x00000008 /* This accelerator is not unique */ #define HICF_ENTERING 0x00000010 /* idOld is invalid */ #define HICF_LEAVING 0x00000020 /* idNew is invalid */ #define HICF_RESELECT 0x00000040 /* hot item reselected */ #define HICF_LMOUSE 0x00000080 /* left mouse button selected */ #define HICF_TOGGLEDROPDOWN 0x00000100 /* Toggle button's dropdown state */ typedef struct { int iButton; DWORD dwFlags; } TBINSERTMARK, *LPTBINSERTMARK; #define TBIMHT_AFTER 0x00000001 /* TRUE = insert After iButton, otherwise before */ #define TBIMHT_BACKGROUND 0x00000002 /* TRUE if and only if missed buttons completely */ typedef struct tagNMTBSAVE { NMHDR hdr; DWORD* pData; DWORD* pCurrent; UINT cbData; int iItem; int cButtons; TBBUTTON tbButton; } NMTBSAVE, *LPNMTBSAVE; typedef struct tagNMTBRESTORE { NMHDR hdr; DWORD* pData; DWORD* pCurrent; UINT cbData; int iItem; int cButtons; int cbBytesPerRecord; TBBUTTON tbButton; } NMTBRESTORE, *LPNMTBRESTORE; #define TBMF_PAD 0x00000001 #define TBMF_BARPAD 0x00000002 #define TBMF_BUTTONSPACING 0x00000004 typedef struct { UINT cbSize; DWORD dwMask; INT cxPad; INT cyPad; INT cxBarPad; INT cyBarPad; INT cxButtonSpacing; INT cyButtonSpacing; } TBMETRICS, *LPTBMETRICS; /* these are undocumented and the names are guesses */ typedef struct { NMHDR hdr; HWND hwndDialog; } NMTBINITCUSTOMIZE; typedef struct { NMHDR hdr; INT idNew; INT iDirection; /* left is -1, right is 1 */ DWORD dwReason; /* HICF_* */ } NMTBWRAPHOTITEM; HWND WINAPI CreateToolbar(HWND, DWORD, UINT, INT, HINSTANCE, UINT, LPCTBBUTTON, INT); HWND WINAPI CreateToolbarEx(HWND, DWORD, UINT, INT, HINSTANCE, UINT_PTR, LPCTBBUTTON, INT, INT, INT, INT, INT, UINT); HBITMAP WINAPI CreateMappedBitmap (HINSTANCE, INT_PTR, UINT, LPCOLORMAP, INT); /* Tool tips */ #define TOOLTIPS_CLASSA "tooltips_class32" #if defined(__GNUC__) # define TOOLTIPS_CLASSW (const WCHAR []){ 't','o','o','l','t','i','p','s','_', \ 'c','l','a','s','s','3','2',0 } #elif defined(_MSC_VER) # define TOOLTIPS_CLASSW L"tooltips_class32" #else static const WCHAR TOOLTIPS_CLASSW[] = { 't','o','o','l','t','i','p','s','_', 'c','l','a','s','s','3','2',0 }; #endif #define TOOLTIPS_CLASS WINELIB_NAME_AW(TOOLTIPS_CLASS) #define INFOTIPSIZE 1024 #define TTF_IDISHWND 0x0001 #define TTF_CENTERTIP 0x0002 #define TTF_RTLREADING 0x0004 #define TTF_SUBCLASS 0x0010 #define TTF_TRACK 0x0020 #define TTF_ABSOLUTE 0x0080 #define TTF_TRANSPARENT 0x0100 #define TTF_DI_SETITEM 0x8000 /* valid only on the TTN_NEEDTEXT callback */ #define TTDT_AUTOMATIC 0 #define TTDT_RESHOW 1 #define TTDT_AUTOPOP 2 #define TTDT_INITIAL 3 #define TTI_NONE 0 #define TTI_INFO 1 #define TTI_WARNING 2 #define TTI_ERROR 3 #define TTI_INFO_LARGE 4 #define TTI_WARNING_LARGE 5 #define TTI_ERROR_LARGE 6 #define TTM_ACTIVATE (WM_USER+1) #define TTM_SETDELAYTIME (WM_USER+3) #define TTM_ADDTOOLA (WM_USER+4) #define TTM_ADDTOOLW (WM_USER+50) #define TTM_ADDTOOL WINELIB_NAME_AW(TTM_ADDTOOL) #define TTM_DELTOOLA (WM_USER+5) #define TTM_DELTOOLW (WM_USER+51) #define TTM_DELTOOL WINELIB_NAME_AW(TTM_DELTOOL) #define TTM_NEWTOOLRECTA (WM_USER+6) #define TTM_NEWTOOLRECTW (WM_USER+52) #define TTM_NEWTOOLRECT WINELIB_NAME_AW(TTM_NEWTOOLRECT) #define TTM_RELAYEVENT (WM_USER+7) #define TTM_GETTOOLINFOA (WM_USER+8) #define TTM_GETTOOLINFOW (WM_USER+53) #define TTM_GETTOOLINFO WINELIB_NAME_AW(TTM_GETTOOLINFO) #define TTM_SETTOOLINFOA (WM_USER+9) #define TTM_SETTOOLINFOW (WM_USER+54) #define TTM_SETTOOLINFO WINELIB_NAME_AW(TTM_SETTOOLINFO) #define TTM_HITTESTA (WM_USER+10) #define TTM_HITTESTW (WM_USER+55) #define TTM_HITTEST WINELIB_NAME_AW(TTM_HITTEST) #define TTM_GETTEXTA (WM_USER+11) #define TTM_GETTEXTW (WM_USER+56) #define TTM_GETTEXT WINELIB_NAME_AW(TTM_GETTEXT) #define TTM_UPDATETIPTEXTA (WM_USER+12) #define TTM_UPDATETIPTEXTW (WM_USER+57) #define TTM_UPDATETIPTEXT WINELIB_NAME_AW(TTM_UPDATETIPTEXT) #define TTM_GETTOOLCOUNT (WM_USER+13) #define TTM_ENUMTOOLSA (WM_USER+14) #define TTM_ENUMTOOLSW (WM_USER+58) #define TTM_ENUMTOOLS WINELIB_NAME_AW(TTM_ENUMTOOLS) #define TTM_GETCURRENTTOOLA (WM_USER+15) #define TTM_GETCURRENTTOOLW (WM_USER+59) #define TTM_GETCURRENTTOOL WINELIB_NAME_AW(TTM_GETCURRENTTOOL) #define TTM_WINDOWFROMPOINT (WM_USER+16) #define TTM_TRACKACTIVATE (WM_USER+17) #define TTM_TRACKPOSITION (WM_USER+18) #define TTM_SETTIPBKCOLOR (WM_USER+19) #define TTM_SETTIPTEXTCOLOR (WM_USER+20) #define TTM_GETDELAYTIME (WM_USER+21) #define TTM_GETTIPBKCOLOR (WM_USER+22) #define TTM_GETTIPTEXTCOLOR (WM_USER+23) #define TTM_SETMAXTIPWIDTH (WM_USER+24) #define TTM_GETMAXTIPWIDTH (WM_USER+25) #define TTM_SETMARGIN (WM_USER+26) #define TTM_GETMARGIN (WM_USER+27) #define TTM_POP (WM_USER+28) #define TTM_UPDATE (WM_USER+29) #define TTM_GETBUBBLESIZE (WM_USER+30) #define TTM_ADJUSTRECT (WM_USER+31) #define TTM_SETTITLEA (WM_USER+32) #define TTM_SETTITLEW (WM_USER+33) #define TTM_SETTITLE WINELIB_NAME_AW(TTM_SETTITLE) #define TTM_POPUP (WM_USER+34) #define TTM_GETTITLE (WM_USER+35) #define TTM_SETWINDOWTHEME CCM_SETWINDOWTHEME #define TTN_FIRST (0U-520U) #define TTN_LAST (0U-549U) #define TTN_GETDISPINFOA (TTN_FIRST-0) #define TTN_GETDISPINFOW (TTN_FIRST-10) #define TTN_GETDISPINFO WINELIB_NAME_AW(TTN_GETDISPINFO) #define TTN_SHOW (TTN_FIRST-1) #define TTN_POP (TTN_FIRST-2) #define TTN_LINKCLICK (TTN_FIRST-3) #define TTN_NEEDTEXT TTN_GETDISPINFO #define TTN_NEEDTEXTA TTN_GETDISPINFOA #define TTN_NEEDTEXTW TTN_GETDISPINFOW typedef struct tagTOOLINFOA { UINT cbSize; UINT uFlags; HWND hwnd; UINT_PTR uId; RECT rect; HINSTANCE hinst; LPSTR lpszText; LPARAM lParam; void *lpReserved; } TTTOOLINFOA, *LPTOOLINFOA, *PTOOLINFOA, *LPTTTOOLINFOA; typedef struct tagTOOLINFOW { UINT cbSize; UINT uFlags; HWND hwnd; UINT_PTR uId; RECT rect; HINSTANCE hinst; LPWSTR lpszText; LPARAM lParam; void *lpReserved; } TTTOOLINFOW, *LPTOOLINFOW, *PTOOLINFOW, *LPTTTOOLINFOW; #define TTTOOLINFO WINELIB_NAME_AW(TTTOOLINFO) #define TOOLINFO WINELIB_NAME_AW(TTTOOLINFO) #define PTOOLINFO WINELIB_NAME_AW(PTOOLINFO) #define LPTTTOOLINFO WINELIB_NAME_AW(LPTTTOOLINFO) #define LPTOOLINFO WINELIB_NAME_AW(LPTOOLINFO) #define TTTOOLINFOA_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText) #define TTTOOLINFOW_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText) #define TTTOOLINFO_V1_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(TTTOOLINFO), lpszText) #define TTTOOLINFOA_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lParam) #define TTTOOLINFOW_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lParam) #define TTTOOLINFOA_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpReserved) #define TTTOOLINFOW_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpReserved) typedef struct _TT_HITTESTINFOA { HWND hwnd; POINT pt; TTTOOLINFOA ti; } TTHITTESTINFOA, *LPTTHITTESTINFOA; #define LPHITTESTINFOA LPTTHITTESTINFOA typedef struct _TT_HITTESTINFOW { HWND hwnd; POINT pt; TTTOOLINFOW ti; } TTHITTESTINFOW, *LPTTHITTESTINFOW; #define LPHITTESTINFOW LPTTHITTESTINFOW #define TTHITTESTINFO WINELIB_NAME_AW(TTHITTESTINFO) #define LPTTHITTESTINFO WINELIB_NAME_AW(LPTTHITTESTINFO) #define LPHITTESTINFO WINELIB_NAME_AW(LPHITTESTINFO) typedef struct tagNMTTDISPINFOA { NMHDR hdr; LPSTR lpszText; CHAR szText[80]; HINSTANCE hinst; UINT uFlags; LPARAM lParam; } NMTTDISPINFOA, *LPNMTTDISPINFOA; typedef struct tagNMTTDISPINFOW { NMHDR hdr; LPWSTR lpszText; WCHAR szText[80]; HINSTANCE hinst; UINT uFlags; LPARAM lParam; } NMTTDISPINFOW, *LPNMTTDISPINFOW; #define NMTTDISPINFO WINELIB_NAME_AW(NMTTDISPINFO) #define LPNMTTDISPINFO WINELIB_NAME_AW(LPNMTTDISPINFO) #define NMTTDISPINFO_V1_SIZEA CCSIZEOF_STRUCT(NMTTDISPINFOA, uFlags) #define NMTTDISPINFO_V1_SIZEW CCSIZEOF_STRUCT(NMTTDISPINFOW, uFlags) #define NMTTDISPINFO_V1_SIZE WINELIB_NAME_AW(NMTTDISPINFO_V1_SIZE) typedef struct _TTGETTITLE { DWORD dwSize; UINT uTitleBitmap; UINT cch; WCHAR* pszTitle; } TTGETTITLE, *PTTGETTITLE; #define TOOLTIPTEXTW NMTTDISPINFOW #define TOOLTIPTEXTA NMTTDISPINFOA #define TOOLTIPTEXT NMTTDISPINFO #define LPTOOLTIPTEXTW LPNMTTDISPINFOW #define LPTOOLTIPTEXTA LPNMTTDISPINFOA #define LPTOOLTIPTEXT LPNMTTDISPINFO /* Rebar control */ #define REBARCLASSNAMEA "ReBarWindow32" #if defined(__GNUC__) # define REBARCLASSNAMEW (const WCHAR []){ 'R','e','B','a','r', \ 'W','i','n','d','o','w','3','2',0 } #elif defined(_MSC_VER) # define REBARCLASSNAMEW L"ReBarWindow32" #else static const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r', 'W','i','n','d','o','w','3','2',0 }; #endif #define REBARCLASSNAME WINELIB_NAME_AW(REBARCLASSNAME) #define RBIM_IMAGELIST 0x00000001 #define RBBIM_STYLE 0x00000001 #define RBBIM_COLORS 0x00000002 #define RBBIM_TEXT 0x00000004 #define RBBIM_IMAGE 0x00000008 #define RBBIM_CHILD 0x00000010 #define RBBIM_CHILDSIZE 0x00000020 #define RBBIM_SIZE 0x00000040 #define RBBIM_BACKGROUND 0x00000080 #define RBBIM_ID 0x00000100 #define RBBIM_IDEALSIZE 0x00000200 #define RBBIM_LPARAM 0x00000400 #define RBBIM_HEADERSIZE 0x00000800 #define RBBIM_CHEVRONLOCATION 0x00001000 #define RBBIM_CHEVRONSTATE 0x00002000 #define RBBS_BREAK 0x00000001 #define RBBS_FIXEDSIZE 0x00000002 #define RBBS_CHILDEDGE 0x00000004 #define RBBS_HIDDEN 0x00000008 #define RBBS_NOVERT 0x00000010 #define RBBS_FIXEDBMP 0x00000020 #define RBBS_VARIABLEHEIGHT 0x00000040 #define RBBS_GRIPPERALWAYS 0x00000080 #define RBBS_NOGRIPPER 0x00000100 #define RBBS_USECHEVRON 0x00000200 #define RBBS_HIDETITLE 0x00000400 #define RBBS_TOPALIGN 0x00000800 #define RBNM_ID 0x00000001 #define RBNM_STYLE 0x00000002 #define RBNM_LPARAM 0x00000004 #define RBHT_NOWHERE 0x0001 #define RBHT_CAPTION 0x0002 #define RBHT_CLIENT 0x0003 #define RBHT_GRABBER 0x0004 #define RBHT_CHEVRON 0x0008 #define RBHT_SPLITTER 0x0010 #define RB_INSERTBANDA (WM_USER+1) #define RB_INSERTBANDW (WM_USER+10) #define RB_INSERTBAND WINELIB_NAME_AW(RB_INSERTBAND) #define RB_DELETEBAND (WM_USER+2) #define RB_GETBARINFO (WM_USER+3) #define RB_SETBARINFO (WM_USER+4) #define RB_SETBANDINFOA (WM_USER+6) #define RB_SETBANDINFOW (WM_USER+11) #define RB_SETBANDINFO WINELIB_NAME_AW(RB_SETBANDINFO) #define RB_SETPARENT (WM_USER+7) #define RB_HITTEST (WM_USER+8) #define RB_GETRECT (WM_USER+9) #define RB_GETBANDCOUNT (WM_USER+12) #define RB_GETROWCOUNT (WM_USER+13) #define RB_GETROWHEIGHT (WM_USER+14) #define RB_IDTOINDEX (WM_USER+16) #define RB_GETTOOLTIPS (WM_USER+17) #define RB_SETTOOLTIPS (WM_USER+18) #define RB_SETBKCOLOR (WM_USER+19) #define RB_GETBKCOLOR (WM_USER+20) #define RB_SETTEXTCOLOR (WM_USER+21) #define RB_GETTEXTCOLOR (WM_USER+22) #define RB_SIZETORECT (WM_USER+23) #define RB_BEGINDRAG (WM_USER+24) #define RB_ENDDRAG (WM_USER+25) #define RB_DRAGMOVE (WM_USER+26) #define RB_GETBARHEIGHT (WM_USER+27) #define RB_GETBANDINFOW (WM_USER+28) #define RB_GETBANDINFOA (WM_USER+29) #define RB_GETBANDINFO WINELIB_NAME_AW(RB_GETBANDINFO) #define RB_MINIMIZEBAND (WM_USER+30) #define RB_MAXIMIZEBAND (WM_USER+31) #define RB_GETBANDBORDERS (WM_USER+34) #define RB_SHOWBAND (WM_USER+35) #define RB_SETPALETTE (WM_USER+37) #define RB_GETPALETTE (WM_USER+38) #define RB_MOVEBAND (WM_USER+39) #define RB_GETBANDMARGINS (WM_USER+40) #define RB_SETEXTENDEDSTYLE (WM_USER+41) #define RB_GETEXTENDEDSTYLE (WM_USER+42) #define RB_PUSHCHEVRON (WM_USER+43) #define RB_SETBANDWIDTH (WM_USER+44) #define RB_GETDROPTARGET CCM_GETDROPTARGET #define RB_SETCOLORSCHEME CCM_SETCOLORSCHEME #define RB_GETCOLORSCHEME CCM_GETCOLORSCHEME #define RB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define RB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define RB_SETWINDOWTHEME CCM_SETWINDOWTHEME #define RBN_FIRST (0U-831U) #define RBN_LAST (0U-859U) #define RBN_HEIGHTCHANGE (RBN_FIRST-0) #define RBN_GETOBJECT (RBN_FIRST-1) #define RBN_LAYOUTCHANGED (RBN_FIRST-2) #define RBN_AUTOSIZE (RBN_FIRST-3) #define RBN_BEGINDRAG (RBN_FIRST-4) #define RBN_ENDDRAG (RBN_FIRST-5) #define RBN_DELETINGBAND (RBN_FIRST-6) #define RBN_DELETEDBAND (RBN_FIRST-7) #define RBN_CHILDSIZE (RBN_FIRST-8) #define RBN_CHEVRONPUSHED (RBN_FIRST-10) #define RBN_SPLITTERDRAG (RBN_FIRST-11) #define RBN_MINMAX (RBN_FIRST-21) #define RBN_AUTOBREAK (RBN_FIRST-22) typedef struct tagREBARINFO { UINT cbSize; UINT fMask; HIMAGELIST himl; } REBARINFO, *LPREBARINFO; typedef struct tagREBARBANDINFOA { UINT cbSize; UINT fMask; UINT fStyle; COLORREF clrFore; COLORREF clrBack; LPSTR lpText; UINT cch; INT iImage; HWND hwndChild; UINT cxMinChild; UINT cyMinChild; UINT cx; HBITMAP hbmBack; UINT wID; UINT cyChild; UINT cyMaxChild; UINT cyIntegral; UINT cxIdeal; LPARAM lParam; UINT cxHeader; /* _WIN32_WINNT >= 0x0600 */ RECT rcChevronLocation; UINT uChevronState; } REBARBANDINFOA, *LPREBARBANDINFOA; typedef REBARBANDINFOA const *LPCREBARBANDINFOA; typedef struct tagREBARBANDINFOW { UINT cbSize; UINT fMask; UINT fStyle; COLORREF clrFore; COLORREF clrBack; LPWSTR lpText; UINT cch; INT iImage; HWND hwndChild; UINT cxMinChild; UINT cyMinChild; UINT cx; HBITMAP hbmBack; UINT wID; UINT cyChild; UINT cyMaxChild; UINT cyIntegral; UINT cxIdeal; LPARAM lParam; UINT cxHeader; /* _WIN32_WINNT >= 0x0600 */ RECT rcChevronLocation; UINT uChevronState; } REBARBANDINFOW, *LPREBARBANDINFOW; typedef REBARBANDINFOW const *LPCREBARBANDINFOW; #define REBARBANDINFO WINELIB_NAME_AW(REBARBANDINFO) #define LPREBARBANDINFO WINELIB_NAME_AW(LPREBARBANDINFO) #define LPCREBARBANDINFO WINELIB_NAME_AW(LPCREBARBANDINFO) #define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, wID) #define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID) #define REBARBANDINFO_V3_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), wID) #define REBARBANDINFOA_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, cxHeader) #define REBARBANDINFOW_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, cxHeader) #define REBARBANDINFO_V6_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), cxHeader) typedef struct tagNMREBARCHILDSIZE { NMHDR hdr; UINT uBand; UINT wID; RECT rcChild; RECT rcBand; } NMREBARCHILDSIZE, *LPNMREBARCHILDSIZE; typedef struct tagNMREBAR { NMHDR hdr; DWORD dwMask; UINT uBand; UINT fStyle; UINT wID; LPARAM lParam; } NMREBAR, *LPNMREBAR; typedef struct tagNMRBAUTOSIZE { NMHDR hdr; BOOL fChanged; RECT rcTarget; RECT rcActual; } NMRBAUTOSIZE, *LPNMRBAUTOSIZE; typedef struct tagNMREBARCHEVRON { NMHDR hdr; UINT uBand; UINT wID; LPARAM lParam; RECT rc; LPARAM lParamNM; } NMREBARCHEVRON, *LPNMREBARCHEVRON; typedef struct _RB_HITTESTINFO { POINT pt; UINT flags; INT iBand; } RBHITTESTINFO, *LPRBHITTESTINFO; #define RBAB_AUTOSIZE 0x0001 #define RBAB_ADDBAND 0x0002 typedef struct tagNMREBARAUTOBREAK { NMHDR hdr; UINT uBand; UINT wID; LPARAM lParam; UINT uMsg; UINT fStyleCurrent; BOOL fAutoBreak; } NMREBARAUTOBREAK, *LPNMREBARAUTOBREAK; /* Trackbar control */ #define TRACKBAR_CLASSA "msctls_trackbar32" #if defined(__GNUC__) # define TRACKBAR_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \ 't','r','a','c','k','b','a','r','3','2',0 } #elif defined(_MSC_VER) # define TRACKBAR_CLASSW L"msctls_trackbar32" #else static const WCHAR TRACKBAR_CLASSW[] = { 'm','s','c','t','l','s','_', 't','r','a','c','k','b','a','r','3','2',0 }; #endif #define TRACKBAR_CLASS WINELIB_NAME_AW(TRACKBAR_CLASS) #define TBTS_TOP 0 #define TBTS_LEFT 1 #define TBTS_BOTTOM 2 #define TBTS_RIGHT 3 #define TB_LINEUP 0 #define TB_LINEDOWN 1 #define TB_PAGEUP 2 #define TB_PAGEDOWN 3 #define TB_THUMBPOSITION 4 #define TB_THUMBTRACK 5 #define TB_TOP 6 #define TB_BOTTOM 7 #define TB_ENDTRACK 8 #define TBCD_TICS 0x0001 #define TBCD_THUMB 0x0002 #define TBCD_CHANNEL 0x0003 #define TBM_GETPOS (WM_USER) #define TBM_GETRANGEMIN (WM_USER+1) #define TBM_GETRANGEMAX (WM_USER+2) #define TBM_GETTIC (WM_USER+3) #define TBM_SETTIC (WM_USER+4) #define TBM_SETPOS (WM_USER+5) #define TBM_SETRANGE (WM_USER+6) #define TBM_SETRANGEMIN (WM_USER+7) #define TBM_SETRANGEMAX (WM_USER+8) #define TBM_CLEARTICS (WM_USER+9) #define TBM_SETSEL (WM_USER+10) #define TBM_SETSELSTART (WM_USER+11) #define TBM_SETSELEND (WM_USER+12) #define TBM_GETPTICS (WM_USER+14) #define TBM_GETTICPOS (WM_USER+15) #define TBM_GETNUMTICS (WM_USER+16) #define TBM_GETSELSTART (WM_USER+17) #define TBM_GETSELEND (WM_USER+18) #define TBM_CLEARSEL (WM_USER+19) #define TBM_SETTICFREQ (WM_USER+20) #define TBM_SETPAGESIZE (WM_USER+21) #define TBM_GETPAGESIZE (WM_USER+22) #define TBM_SETLINESIZE (WM_USER+23) #define TBM_GETLINESIZE (WM_USER+24) #define TBM_GETTHUMBRECT (WM_USER+25) #define TBM_GETCHANNELRECT (WM_USER+26) #define TBM_SETTHUMBLENGTH (WM_USER+27) #define TBM_GETTHUMBLENGTH (WM_USER+28) #define TBM_SETTOOLTIPS (WM_USER+29) #define TBM_GETTOOLTIPS (WM_USER+30) #define TBM_SETTIPSIDE (WM_USER+31) #define TBM_SETBUDDY (WM_USER+32) #define TBM_GETBUDDY (WM_USER+33) #define TBM_SETPOSNOTIFY (WM_USER+34) #define TBM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define TBM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define TRBN_FIRST (0u-1501u) #define TRBN_LAST (0u-1519u) #define TRBN_THUMBPOSCHANGING (TRBN_FIRST-1) /* Pager control */ #define WC_PAGESCROLLERA "SysPager" #if defined(__GNUC__) # define WC_PAGESCROLLERW (const WCHAR []){ 'S','y','s','P','a','g','e','r',0 } #elif defined(_MSC_VER) # define WC_PAGESCROLLERW L"SysPager" #else static const WCHAR WC_PAGESCROLLERW[] = { 'S','y','s','P','a','g','e','r',0 }; #endif #define WC_PAGESCROLLER WINELIB_NAME_AW(WC_PAGESCROLLER) #define PGF_INVISIBLE 0 #define PGF_NORMAL 1 #define PGF_GRAYED 2 #define PGF_DEPRESSED 4 #define PGF_HOT 8 #define PGB_TOPORLEFT 0 #define PGB_BOTTOMORRIGHT 1 /* only used with PGN_SCROLL */ #define PGF_SCROLLUP 1 #define PGF_SCROLLDOWN 2 #define PGF_SCROLLLEFT 4 #define PGF_SCROLLRIGHT 8 #define PGK_SHIFT 1 #define PGK_CONTROL 2 #define PGK_MENU 4 /* only used with PGN_CALCSIZE */ #define PGF_CALCWIDTH 1 #define PGF_CALCHEIGHT 2 #define PGM_FIRST 0x1400 #define PGM_SETCHILD (PGM_FIRST+1) #define PGM_RECALCSIZE (PGM_FIRST+2) #define PGM_FORWARDMOUSE (PGM_FIRST+3) #define PGM_SETBKCOLOR (PGM_FIRST+4) #define PGM_GETBKCOLOR (PGM_FIRST+5) #define PGM_SETBORDER (PGM_FIRST+6) #define PGM_GETBORDER (PGM_FIRST+7) #define PGM_SETPOS (PGM_FIRST+8) #define PGM_GETPOS (PGM_FIRST+9) #define PGM_SETBUTTONSIZE (PGM_FIRST+10) #define PGM_GETBUTTONSIZE (PGM_FIRST+11) #define PGM_GETBUTTONSTATE (PGM_FIRST+12) #define PGM_GETDROPTARGET CCM_GETDROPTARGET #define PGN_FIRST (0U-900U) #define PGN_LAST (0U-950U) #define PGN_SCROLL (PGN_FIRST-1) #define PGN_CALCSIZE (PGN_FIRST-2) #define PGN_HOTITEMCHANGE (PGN_FIRST-3) #include typedef struct { NMHDR hdr; WORD fwKeys; RECT rcParent; INT iDir; INT iXpos; INT iYpos; INT iScroll; } NMPGSCROLL, *LPNMPGSCROLL; #include typedef struct { NMHDR hdr; DWORD dwFlag; INT iWidth; INT iHeight; } NMPGCALCSIZE, *LPNMPGCALCSIZE; /* Treeview control */ #define WC_TREEVIEWA "SysTreeView32" #if defined(__GNUC__) # define WC_TREEVIEWW (const WCHAR []){ 'S','y','s', \ 'T','r','e','e','V','i','e','w','3','2',0 } #elif defined(_MSC_VER) # define WC_TREEVIEWW L"SysTreeView32" #else static const WCHAR WC_TREEVIEWW[] = { 'S','y','s', 'T','r','e','e','V','i','e','w','3','2',0 }; #endif #define WC_TREEVIEW WINELIB_NAME_AW(WC_TREEVIEW) #define TVSIL_NORMAL 0 #define TVSIL_STATE 2 #define TVSBF_XBORDER 1 #define TVSBF_YBORDER 2 #define TV_FIRST 0x1100 #define TVM_INSERTITEMA (TV_FIRST+0) #define TVM_INSERTITEMW (TV_FIRST+50) #define TVM_INSERTITEM WINELIB_NAME_AW(TVM_INSERTITEM) #define TVM_DELETEITEM (TV_FIRST+1) #define TVM_EXPAND (TV_FIRST+2) #define TVM_GETITEMRECT (TV_FIRST+4) #define TVM_GETCOUNT (TV_FIRST+5) #define TVM_GETINDENT (TV_FIRST+6) #define TVM_SETINDENT (TV_FIRST+7) #define TVM_GETIMAGELIST (TV_FIRST+8) #define TVM_SETIMAGELIST (TV_FIRST+9) #define TVM_GETNEXTITEM (TV_FIRST+10) #define TVM_SELECTITEM (TV_FIRST+11) #define TVM_GETITEMA (TV_FIRST+12) #define TVM_GETITEMW (TV_FIRST+62) #define TVM_GETITEM WINELIB_NAME_AW(TVM_GETITEM) #define TVM_SETITEMA (TV_FIRST+13) #define TVM_SETITEMW (TV_FIRST+63) #define TVM_SETITEM WINELIB_NAME_AW(TVM_SETITEM) #define TVM_EDITLABELA (TV_FIRST+14) #define TVM_EDITLABELW (TV_FIRST+65) #define TVM_EDITLABEL WINELIB_NAME_AW(TVM_EDITLABEL) #define TVM_GETEDITCONTROL (TV_FIRST+15) #define TVM_GETVISIBLECOUNT (TV_FIRST+16) #define TVM_HITTEST (TV_FIRST+17) #define TVM_CREATEDRAGIMAGE (TV_FIRST+18) #define TVM_SORTCHILDREN (TV_FIRST+19) #define TVM_ENSUREVISIBLE (TV_FIRST+20) #define TVM_SORTCHILDRENCB (TV_FIRST+21) #define TVM_ENDEDITLABELNOW (TV_FIRST+22) #define TVM_GETISEARCHSTRINGA (TV_FIRST+23) #define TVM_GETISEARCHSTRINGW (TV_FIRST+64) #define TVM_GETISEARCHSTRING WINELIB_NAME_AW(TVM_GETISEARCHSTRING) #define TVM_SETTOOLTIPS (TV_FIRST+24) #define TVM_GETTOOLTIPS (TV_FIRST+25) #define TVM_SETINSERTMARK (TV_FIRST+26) #define TVM_SETITEMHEIGHT (TV_FIRST+27) #define TVM_GETITEMHEIGHT (TV_FIRST+28) #define TVM_SETBKCOLOR (TV_FIRST+29) #define TVM_SETTEXTCOLOR (TV_FIRST+30) #define TVM_GETBKCOLOR (TV_FIRST+31) #define TVM_GETTEXTCOLOR (TV_FIRST+32) #define TVM_SETSCROLLTIME (TV_FIRST+33) #define TVM_GETSCROLLTIME (TV_FIRST+34) #define TVM_SETBORDER (TV_FIRST+35) #define TVM_UNKNOWN36 (TV_FIRST+36) #define TVM_SETINSERTMARKCOLOR (TV_FIRST+37) #define TVM_GETINSERTMARKCOLOR (TV_FIRST+38) #define TVM_GETITEMSTATE (TV_FIRST+39) #define TVM_SETLINECOLOR (TV_FIRST+40) #define TVM_GETLINECOLOR (TV_FIRST+41) #define TVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define TVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define TVM_MAPACCIDTOHTREEITEM (TV_FIRST + 42) #define TVM_MAPHTREEITEMTOACCID (TV_FIRST + 43) #define TVM_SETEXTENDEDSTYLE (TV_FIRST + 44) #define TVM_GETEXTENDEDSTYLE (TV_FIRST + 45) #define TVM_SETAUTOSCROLLINFO (TV_FIRST + 59) #define TVM_GETSELECTEDCOUNT (TV_FIRST + 70) #define TVM_SHOWINFOTIP (TV_FIRST + 71) #define TVM_GETITEMPARTRECT (TV_FIRST + 72) #define TVN_FIRST (0U-400U) #define TVN_LAST (0U-499U) #define TVN_SELCHANGINGA (TVN_FIRST-1) #define TVN_SELCHANGINGW (TVN_FIRST-50) #define TVN_SELCHANGING WINELIB_NAME_AW(TVN_SELCHANGING) #define TVN_SELCHANGEDA (TVN_FIRST-2) #define TVN_SELCHANGEDW (TVN_FIRST-51) #define TVN_SELCHANGED WINELIB_NAME_AW(TVN_SELCHANGED) #define TVN_GETDISPINFOA (TVN_FIRST-3) #define TVN_GETDISPINFOW (TVN_FIRST-52) #define TVN_GETDISPINFO WINELIB_NAME_AW(TVN_GETDISPINFO) #define TVN_SETDISPINFOA (TVN_FIRST-4) #define TVN_SETDISPINFOW (TVN_FIRST-53) #define TVN_SETDISPINFO WINELIB_NAME_AW(TVN_SETDISPINFO) #define TVN_ITEMEXPANDINGA (TVN_FIRST-5) #define TVN_ITEMEXPANDINGW (TVN_FIRST-54) #define TVN_ITEMEXPANDING WINELIB_NAME_AW(TVN_ITEMEXPANDING) #define TVN_ITEMEXPANDEDA (TVN_FIRST-6) #define TVN_ITEMEXPANDEDW (TVN_FIRST-55) #define TVN_ITEMEXPANDED WINELIB_NAME_AW(TVN_ITEMEXPANDED) #define TVN_BEGINDRAGA (TVN_FIRST-7) #define TVN_BEGINDRAGW (TVN_FIRST-56) #define TVN_BEGINDRAG WINELIB_NAME_AW(TVN_BEGINDRAG) #define TVN_BEGINRDRAGA (TVN_FIRST-8) #define TVN_BEGINRDRAGW (TVN_FIRST-57) #define TVN_BEGINRDRAG WINELIB_NAME_AW(TVN_BEGINRDRAG) #define TVN_DELETEITEMA (TVN_FIRST-9) #define TVN_DELETEITEMW (TVN_FIRST-58) #define TVN_DELETEITEM WINELIB_NAME_AW(TVN_DELETEITEM) #define TVN_BEGINLABELEDITA (TVN_FIRST-10) #define TVN_BEGINLABELEDITW (TVN_FIRST-59) #define TVN_BEGINLABELEDIT WINELIB_NAME_AW(TVN_BEGINLABELEDIT) #define TVN_ENDLABELEDITA (TVN_FIRST-11) #define TVN_ENDLABELEDITW (TVN_FIRST-60) #define TVN_ENDLABELEDIT WINELIB_NAME_AW(TVN_ENDLABELEDIT) #define TVN_KEYDOWN (TVN_FIRST-12) #define TVN_GETINFOTIPA (TVN_FIRST-13) #define TVN_GETINFOTIPW (TVN_FIRST-14) #define TVN_GETINFOTIP WINELIB_NAME_AW(TVN_GETINFOTIP) #define TVN_SINGLEEXPAND (TVN_FIRST-15) #define TVN_ITEMCHANGINGA (TVN_FIRST-16) #define TVN_ITEMCHANGINGW (TVN_FIRST-17) #define TVN_ITEMCHANGEDA (TVN_FIRST-18) #define TVN_ITEMCHANGEDW (TVN_FIRST-19) #define TVN_ASYNCDRAW (TVN_FIRST-20) #define TVIF_TEXT 0x0001 #define TVIF_IMAGE 0x0002 #define TVIF_PARAM 0x0004 #define TVIF_STATE 0x0008 #define TVIF_HANDLE 0x0010 #define TVIF_SELECTEDIMAGE 0x0020 #define TVIF_CHILDREN 0x0040 #define TVIF_INTEGRAL 0x0080 #define TVIF_STATEEX 0x0100 #define TVIF_EXPANDEDIMAGE 0x0200 #define TVIF_DI_SETITEM 0x1000 #define TVI_ROOT ((HTREEITEM)-65536) #define TVI_FIRST ((HTREEITEM)-65535) #define TVI_LAST ((HTREEITEM)-65534) #define TVI_SORT ((HTREEITEM)-65533) #define TVIS_FOCUSED 0x0001 #define TVIS_SELECTED 0x0002 #define TVIS_CUT 0x0004 #define TVIS_DROPHILITED 0x0008 #define TVIS_BOLD 0x0010 #define TVIS_EXPANDED 0x0020 #define TVIS_EXPANDEDONCE 0x0040 #define TVIS_EXPANDPARTIAL 0x0080 #define TVIS_OVERLAYMASK 0x0f00 #define TVIS_STATEIMAGEMASK 0xf000 #define TVIS_USERMASK 0xf000 #define TVIS_EX_FLAT 0x0001 #define TVIS_EX_DISABLED 0x0002 /* TVIS_EX_HWND is listed on MSDN but apparently not in any header. */ #define TVIS_EX_ALL 0x0002 #define TVHT_NOWHERE 0x0001 #define TVHT_ONITEMICON 0x0002 #define TVHT_ONITEMLABEL 0x0004 #define TVHT_ONITEMINDENT 0x0008 #define TVHT_ONITEMBUTTON 0x0010 #define TVHT_ONITEMRIGHT 0x0020 #define TVHT_ONITEMSTATEICON 0x0040 #define TVHT_ONITEM (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON) #define TVHT_ABOVE 0x0100 #define TVHT_BELOW 0x0200 #define TVHT_TORIGHT 0x0400 #define TVHT_TOLEFT 0x0800 #define TVS_SHAREDIMAGELISTS 0x0000 #define TVS_PRIVATEIMAGELISTS 0x0400 #define TVS_EX_NOSINGLECOLLAPSE 0x0001 #define TVS_EX_MULTISELECT 0x0002 #define TVS_EX_DOUBLEBUFFER 0x0004 #define TVS_EX_NOINDENTSTATE 0x0008 #define TVS_EX_RICHTOOLTIP 0x0010 #define TVS_EX_AUTOHSCROLL 0x0020 #define TVS_EX_FADEINOUTEXPANDOS 0x0040 #define TVS_EX_PARTIALCHECKBOXES 0x0080 #define TVS_EX_EXCLUSIONCHECKBOXES 0x0100 #define TVS_EX_DIMMEDCHECKBOXES 0x0200 #define TVS_EX_DRAWIMAGEASYNC 0x0400 #define TVE_COLLAPSE 0x0001 #define TVE_EXPAND 0x0002 #define TVE_TOGGLE 0x0003 #define TVE_EXPANDPARTIAL 0x4000 #define TVE_COLLAPSERESET 0x8000 #define TVGN_ROOT 0 #define TVGN_NEXT 1 #define TVGN_PREVIOUS 2 #define TVGN_PARENT 3 #define TVGN_CHILD 4 #define TVGN_FIRSTVISIBLE 5 #define TVGN_NEXTVISIBLE 6 #define TVGN_PREVIOUSVISIBLE 7 #define TVGN_DROPHILITE 8 #define TVGN_CARET 9 #define TVGN_LASTVISIBLE 10 #define TVGN_NEXTSELECTED 11 #define TVSI_NOSINGLEEXPAND 0x8000 #define TVC_UNKNOWN 0x00 #define TVC_BYMOUSE 0x01 #define TVC_BYKEYBOARD 0x02 typedef struct _TREEITEM *HTREEITEM; typedef struct { UINT mask; HTREEITEM hItem; UINT state; UINT stateMask; LPSTR pszText; INT cchTextMax; INT iImage; INT iSelectedImage; INT cChildren; LPARAM lParam; } TVITEMA, *LPTVITEMA; typedef struct { UINT mask; HTREEITEM hItem; UINT state; UINT stateMask; LPWSTR pszText; INT cchTextMax; INT iImage; INT iSelectedImage; INT cChildren; LPARAM lParam; } TVITEMW, *LPTVITEMW; #define TV_ITEMA TVITEMA #define TV_ITEMW TVITEMW #define LPTV_ITEMA LPTVITEMA #define LPTV_ITEMW LPTVITEMW #define TVITEM WINELIB_NAME_AW(TVITEM) #define LPTVITEM WINELIB_NAME_AW(LPTVITEM) #define TV_ITEM WINELIB_NAME_AW(TV_ITEM) #define LPTV_ITEM WINELIB_NAME_AW(LPTV_ITEM) typedef struct { UINT mask; HTREEITEM hItem; UINT state; UINT stateMask; LPSTR pszText; INT cchTextMax; INT iImage; INT iSelectedImage; INT cChildren; LPARAM lParam; INT iIntegral; UINT uStateEx; /* _WIN32_IE >= 0x600 */ HWND hwnd; /* _WIN32_IE >= 0x600 */ INT iExpandedImage; /* _WIN32_IE >= 0x600 */ INT iReserved; } TVITEMEXA, *LPTVITEMEXA; typedef struct { UINT mask; HTREEITEM hItem; UINT state; UINT stateMask; LPWSTR pszText; INT cchTextMax; INT iImage; INT iSelectedImage; INT cChildren; LPARAM lParam; INT iIntegral; UINT uStateEx; /* _WIN32_IE >= 0x600 */ HWND hwnd; /* _WIN32_IE >= 0x600 */ INT iExpandedImage; /* _WIN32_IE >= 0x600 */ INT iReserved; } TVITEMEXW, *LPTVITEMEXW; #define TVITEMEX WINELIB_NAME_AW(TVITEMEX) #define LPTVITEMEX WINELIB_NAME_AW(LPTVITEMEX) typedef struct tagTVINSERTSTRUCTA { HTREEITEM hParent; HTREEITEM hInsertAfter; union { TVITEMEXA itemex; TVITEMA item; } DUMMYUNIONNAME; } TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA; typedef struct tagTVINSERTSTRUCTW { HTREEITEM hParent; HTREEITEM hInsertAfter; union { TVITEMEXW itemex; TVITEMW item; } DUMMYUNIONNAME; } TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW; #define TVINSERTSTRUCT WINELIB_NAME_AW(TVINSERTSTRUCT) #define LPTVINSERTSTRUCT WINELIB_NAME_AW(LPTVINSERTSTRUCT) #define TVINSERTSTRUCT_V1_SIZEA CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item) #define TVINSERTSTRUCT_V1_SIZEW CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item) #define TVINSERTSTRUCT_V1_SIZE WINELIB_NAME_AW(TVINSERTSTRUCT_V1_SIZE) #define TV_INSERTSTRUCT TVINSERTSTRUCT #define TV_INSERTSTRUCTA TVINSERTSTRUCTA #define TV_INSERTSTRUCTW TVINSERTSTRUCTW #define LPTV_INSERTSTRUCT LPTVINSERTSTRUCT #define LPTV_INSERTSTRUCTA LPTVINSERTSTRUCTA #define LPTV_INSERTSTRUCTW LPTVINSERTSTRUCTW typedef struct tagNMTREEVIEWA { NMHDR hdr; UINT action; TVITEMA itemOld; TVITEMA itemNew; POINT ptDrag; } NMTREEVIEWA, *LPNMTREEVIEWA; typedef struct tagNMTREEVIEWW { NMHDR hdr; UINT action; TVITEMW itemOld; TVITEMW itemNew; POINT ptDrag; } NMTREEVIEWW, *LPNMTREEVIEWW; #define NMTREEVIEW WINELIB_NAME_AW(NMTREEVIEW) #define NM_TREEVIEW WINELIB_NAME_AW(NMTREEVIEW) #define NM_TREEVIEWA NMTREEVIEWA #define NM_TREEVIEWW NMTREEVIEWW #define LPNMTREEVIEW WINELIB_NAME_AW(LPNMTREEVIEW) #define LPNM_TREEVIEW LPNMTREEVIEW #define LPNM_TREEVIEWA LPNMTREEVIEWA #define LPNM_TREEVIEWW LPNMTREEVIEWW typedef struct tagTVDISPINFOA { NMHDR hdr; TVITEMA item; } NMTVDISPINFOA, *LPNMTVDISPINFOA; typedef struct tagTVDISPINFOW { NMHDR hdr; TVITEMW item; } NMTVDISPINFOW, *LPNMTVDISPINFOW; typedef struct tagTVDISPINFOEXA { NMHDR hdr; TVITEMEXA item; } NMTVDISPINFOEXA, *LPNMTVDISPINFOEXA; typedef struct tagTVDISPINFOEXW { NMHDR hdr; TVITEMEXW item; } NMTVDISPINFOEXW, *LPNMTVDISPINFOEXW; #define NMTVDISPINFO WINELIB_NAME_AW(NMTVDISPINFO) #define LPNMTVDISPINFO WINELIB_NAME_AW(LPNMTVDISPINFO) #define NMTVDISPINFOEX WINELIB_NAME_AW(NMTVDISPINFOEX) #define LPNMTVDISPINFOEX WINELIB_NAME_AW(LPNMTVDISPINFOEX) #define TV_DISPINFOA NMTVDISPINFOA #define TV_DISPINFOW NMTVDISPINFOW #define TV_DISPINFO NMTVDISPINFO typedef INT (CALLBACK *PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM); typedef struct tagTVSORTCB { HTREEITEM hParent; PFNTVCOMPARE lpfnCompare; LPARAM lParam; } TVSORTCB, *LPTVSORTCB; #define TV_SORTCB TVSORTCB #define LPTV_SORTCB LPTVSORTCB typedef struct tagTVHITTESTINFO { POINT pt; UINT flags; HTREEITEM hItem; } TVHITTESTINFO, *LPTVHITTESTINFO; #define TV_HITTESTINFO TVHITTESTINFO /* Custom Draw Treeview */ #define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW, clrTextBk) #define TVCDRF_NOIMAGES 0x00010000 typedef struct tagNMTVCUSTOMDRAW { NMCUSTOMDRAW nmcd; COLORREF clrText; COLORREF clrTextBk; INT iLevel; /* IE>0x0400 */ } NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW; /* Treeview tooltips */ typedef struct tagNMTVGETINFOTIPA { NMHDR hdr; LPSTR pszText; INT cchTextMax; HTREEITEM hItem; LPARAM lParam; } NMTVGETINFOTIPA, *LPNMTVGETINFOTIPA; typedef struct tagNMTVGETINFOTIPW { NMHDR hdr; LPWSTR pszText; INT cchTextMax; HTREEITEM hItem; LPARAM lParam; } NMTVGETINFOTIPW, *LPNMTVGETINFOTIPW; #define NMTVGETINFOTIP WINELIB_NAME_AW(NMTVGETINFOTIP) #define LPNMTVGETINFOTIP WINELIB_NAME_AW(LPNMTVGETINFOTIP) typedef enum _TVITEMPART { TVGIPR_BUTTON = 1 } TVITEMPART; typedef struct tagTVGETITEMPARTRECTINFO { HTREEITEM hti; RECT *prc; TVITEMPART partID; } TVGETITEMPARTRECTINFO; typedef struct tagTVITEMCHANGE { NMHDR hdr; UINT uChanged; HTREEITEM hItem; UINT uStateNew; UINT uStateOld; LPARAM lParam; } NMTVITEMCHANGE; typedef struct tagNMTVASYNCDRAW { NMHDR hdr; IMAGELISTDRAWPARAMS *pimldp; HRESULT hr; HTREEITEM hItem; LPARAM lParam; DWORD dwRetFlags; int iRetImageIndex; } NMTVASYNCDRAW; #include typedef struct tagTVKEYDOWN { NMHDR hdr; WORD wVKey; UINT flags; } NMTVKEYDOWN, *LPNMTVKEYDOWN; #include #define TV_KEYDOWN NMTVKEYDOWN #define TreeView_InsertItemA(hwnd, phdi) \ (HTREEITEM)SNDMSGA((hwnd), TVM_INSERTITEMA, 0, \ (LPARAM)(LPTVINSERTSTRUCTA)(phdi)) #define TreeView_InsertItemW(hwnd,phdi) \ (HTREEITEM)SNDMSGW((hwnd), TVM_INSERTITEMW, 0, \ (LPARAM)(LPTVINSERTSTRUCTW)(phdi)) #define TreeView_InsertItem WINELIB_NAME_AW(TreeView_InsertItem) #define TreeView_DeleteItem(hwnd, hItem) \ (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem)) #define TreeView_DeleteAllItems(hwnd) \ (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT) #define TreeView_Expand(hwnd, hitem, code) \ (BOOL)SNDMSG((hwnd), TVM_EXPAND, (WPARAM)code, \ (LPARAM)(HTREEITEM)(hitem)) #define TreeView_GetItemRect(hwnd, hitem, prc, code) \ (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSG((hwnd), \ TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc))) #define TreeView_GetCount(hwnd) \ (UINT)SNDMSG((hwnd), TVM_GETCOUNT, 0, 0) #define TreeView_GetIndent(hwnd) \ (UINT)SNDMSG((hwnd), TVM_GETINDENT, 0, 0) #define TreeView_SetIndent(hwnd, indent) \ (BOOL)SNDMSG((hwnd), TVM_SETINDENT, (WPARAM)indent, 0) #define TreeView_GetImageList(hwnd, iImage) \ (HIMAGELIST)SNDMSG((hwnd), TVM_GETIMAGELIST, iImage, 0) #define TreeView_SetImageList(hwnd, himl, iImage) \ (HIMAGELIST)SNDMSG((hwnd), TVM_SETIMAGELIST, iImage, \ (LPARAM)(HIMAGELIST)(himl)) #define TreeView_GetNextItem(hwnd, hitem, code) \ (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\ (LPARAM)(HTREEITEM) (hitem)) #define TreeView_GetChild(hwnd, hitem) \ TreeView_GetNextItem(hwnd, hitem , TVGN_CHILD) #define TreeView_GetNextSibling(hwnd, hitem) \ TreeView_GetNextItem(hwnd, hitem , TVGN_NEXT) #define TreeView_GetPrevSibling(hwnd, hitem) \ TreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUS) #define TreeView_GetParent(hwnd, hitem) \ TreeView_GetNextItem(hwnd, hitem , TVGN_PARENT) #define TreeView_GetFirstVisible(hwnd) \ TreeView_GetNextItem(hwnd, NULL, TVGN_FIRSTVISIBLE) #define TreeView_GetLastVisible(hwnd) \ TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE) #define TreeView_GetNextVisible(hwnd, hitem) \ TreeView_GetNextItem(hwnd, hitem , TVGN_NEXTVISIBLE) #define TreeView_GetPrevVisible(hwnd, hitem) \ TreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUSVISIBLE) #define TreeView_GetSelection(hwnd) \ TreeView_GetNextItem(hwnd, NULL, TVGN_CARET) #define TreeView_GetDropHilight(hwnd) \ TreeView_GetNextItem(hwnd, NULL, TVGN_DROPHILITE) #define TreeView_GetRoot(hwnd) \ TreeView_GetNextItem(hwnd, NULL, TVGN_ROOT) #define TreeView_GetLastVisible(hwnd) \ TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE) #define TreeView_GetNextSelected(hwnd) \ TreeView_GetNextItem(hwnd, NULL, TVGN_NEXTSELECTED) #define TreeView_Select(hwnd, hitem, code) \ (BOOL)SNDMSG((hwnd), TVM_SELECTITEM, (WPARAM)(code), \ (LPARAM)(HTREEITEM)(hitem)) #define TreeView_SelectItem(hwnd, hitem) \ TreeView_Select(hwnd, hitem, TVGN_CARET) #define TreeView_SelectDropTarget(hwnd, hitem) \ TreeView_Select(hwnd, hitem, TVGN_DROPHILITE) #define TreeView_SelectSetFirstVisible(hwnd, hitem) \ TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE) #define TreeView_GetItemA(hwnd, pitem) \ (BOOL)SNDMSGA((hwnd), TVM_GETITEMA, 0, (LPARAM) (TVITEMA *)(pitem)) #define TreeView_GetItemW(hwnd, pitem) \ (BOOL)SNDMSGW((hwnd), TVM_GETITEMW, 0, (LPARAM) (TVITEMW *)(pitem)) #define TreeView_GetItem WINELIB_NAME_AW(TreeView_GetItem) #define TreeView_SetItemA(hwnd, pitem) \ (BOOL)SNDMSGA((hwnd), TVM_SETITEMA, 0, (LPARAM)(const TVITEMA *)(pitem)) #define TreeView_SetItemW(hwnd, pitem) \ (BOOL)SNDMSGW((hwnd), TVM_SETITEMW, 0, (LPARAM)(const TVITEMW *)(pitem)) #define TreeView_SetItem WINELIB_NAME_AW(TreeView_SetItem) #define TreeView_EditLabel(hwnd, hitem) \ (HWND)SNDMSG((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem)) #define TreeView_GetEditControl(hwnd) \ (HWND)SNDMSG((hwnd), TVM_GETEDITCONTROL, 0, 0) #define TreeView_GetVisibleCount(hwnd) \ (UINT)SNDMSG((hwnd), TVM_GETVISIBLECOUNT, 0, 0) #define TreeView_HitTest(hwnd, lpht) \ (HTREEITEM)SNDMSG((hwnd), TVM_HITTEST, 0,\ (LPARAM)(LPTVHITTESTINFO)(lpht)) #define TreeView_CreateDragImage(hwnd, hitem) \ (HIMAGELIST)SNDMSG((hwnd), TVM_CREATEDRAGIMAGE, 0,\ (LPARAM)(HTREEITEM)(hitem)) #define TreeView_SortChildren(hwnd, hitem, recurse) \ (BOOL)SNDMSG((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse,\ (LPARAM)(HTREEITEM)(hitem)) #define TreeView_EnsureVisible(hwnd, hitem) \ (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT)(hitem)) #define TreeView_SortChildrenCB(hwnd, psort, recurse) \ (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \ (LPARAM)(LPTV_SORTCB)(psort)) #define TreeView_EndEditLabelNow(hwnd, fCancel) \ (BOOL)SNDMSG((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0) #define TreeView_GetISearchString(hwnd, lpsz) \ (BOOL)SNDMSG((hwnd), TVM_GETISEARCHSTRING, 0, \ (LPARAM)(LPTSTR)lpsz) #define TreeView_SetToolTips(hwnd, hwndTT) \ (HWND)SNDMSG((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0) #define TreeView_GetToolTips(hwnd) \ (HWND)SNDMSG((hwnd), TVM_GETTOOLTIPS, 0, 0) #define TreeView_SetItemHeight(hwnd, iHeight) \ (INT)SNDMSG((hwnd), TVM_SETITEMHEIGHT, (WPARAM)iHeight, 0) #define TreeView_GetItemHeight(hwnd) \ (INT)SNDMSG((hwnd), TVM_GETITEMHEIGHT, 0, 0) #define TreeView_SetBkColor(hwnd, clr) \ (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr) #define TreeView_SetTextColor(hwnd, clr) \ (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr) #define TreeView_GetBkColor(hwnd) \ (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0) #define TreeView_GetTextColor(hwnd) \ (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0) #define TreeView_SetScrollTime(hwnd, uTime) \ (UINT)SNDMSG((hwnd), TVM_SETSCROLLTIME, uTime, 0) #define TreeView_GetScrollTime(hwnd) \ (UINT)SNDMSG((hwnd), TVM_GETSCROLLTIME, 0, 0) #define TreeView_SetInsertMark(hwnd, hItem, fAfter) \ (BOOL)SNDMSG((hwnd), TVM_SETINSERTMARK, (WPARAM)(fAfter), \ (LPARAM) (hItem)) #define TreeView_SetInsertMarkColor(hwnd, clr) \ (COLORREF)SNDMSG((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr) #define TreeView_GetInsertMarkColor(hwnd) \ (COLORREF)SNDMSG((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0) #define TreeView_SetItemState(hwndTV, hti, data, _mask) \ { TVITEM _TVi; \ _TVi.mask = TVIF_STATE; \ _TVi.hItem = hti; \ _TVi.stateMask = _mask; \ _TVi.state = data; \ SNDMSG((hwndTV), TVM_SETITEM, 0, (LPARAM)&_TVi); \ } #define TreeView_GetItemState(hwndTV, hti, mask) \ (UINT)SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask)) #define TreeView_GetCheckState(hwndTV, hti) \ ((((UINT)(SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), \ TVIS_STATEIMAGEMASK))) >> 12) -1) #define TreeView_SetLineColor(hwnd, clr) \ (COLORREF)SNDMSG((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr)) #define TreeView_GetLineColor(hwnd) \ (COLORREF)SNDMSG((hwnd), TVM_GETLINECOLOR, 0, 0) #define TreeView_MapAccIDToHTREEITEM(hwnd, id) \ (HTREEITEM)SNDMSG((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0) #define TreeView_MapHTREEITEMToAccID(hwnd, htreeitem) \ (UINT)SNDMSG((hwnd), TVM_MAPHTREEITEMTOACCID, (WPARAM)htreeitem, 0) #define TreeView_SetUnicodeFormat(hwnd, fUnicode) \ (BOOL)SNDMSG((hwnd), TVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) #define TreeView_GetUnicodeFormat(hwnd) \ (BOOL)SNDMSG((hwnd), TVM_GETUNICODEFORMAT, 0, 0) /* Listview control */ #define WC_LISTVIEWA "SysListView32" #if defined(__GNUC__) # define WC_LISTVIEWW (const WCHAR []){ 'S','y','s', \ 'L','i','s','t','V','i','e','w','3','2',0 } #elif defined(_MSC_VER) # define WC_LISTVIEWW L"SysListView32" #else static const WCHAR WC_LISTVIEWW[] = { 'S','y','s', 'L','i','s','t','V','i','e','w','3','2',0 }; #endif #define WC_LISTVIEW WINELIB_NAME_AW(WC_LISTVIEW) #define LVSCW_AUTOSIZE -1 #define LVSCW_AUTOSIZE_USEHEADER -2 #define LVS_EX_GRIDLINES 0x0001 #define LVS_EX_SUBITEMIMAGES 0x0002 #define LVS_EX_CHECKBOXES 0x0004 #define LVS_EX_TRACKSELECT 0x0008 #define LVS_EX_HEADERDRAGDROP 0x0010 #define LVS_EX_FULLROWSELECT 0x0020 #define LVS_EX_ONECLICKACTIVATE 0x0040 #define LVS_EX_TWOCLICKACTIVATE 0x0080 #define LVS_EX_FLATSB 0x0100 #define LVS_EX_REGIONAL 0x0200 #define LVS_EX_INFOTIP 0x0400 #define LVS_EX_UNDERLINEHOT 0x0800 #define LVS_EX_UNDERLINECOLD 0x1000 #define LVS_EX_MULTIWORKAREAS 0x2000 #define LVS_EX_LABELTIP 0x4000 #define LVS_EX_BORDERSELECT 0x8000 #define LVS_EX_DOUBLEBUFFER 0x00010000 #define LVS_EX_HIDELABELS 0x00020000 #define LVS_EX_SINGLEROW 0x00040000 #define LVS_EX_SNAPTOGRID 0x00080000 #define LVS_EX_SIMPLESELECT 0x00100000 #define LVS_EX_JUSTIFYCOLUMNS 0x00200000 #define LVS_EX_TRANSPARENTBKGND 0x00400000 #define LVS_EX_TRANSPARENTSHADOWTEXT 0x00800000 #define LVS_EX_AUTOAUTOARRANGE 0x01000000 #define LVS_EX_HEADERINALLVIEWS 0x02000000 #define LVS_EX_AUTOCHECKSELECT 0x08000000 #define LVS_EX_AUTOSIZECOLUMNS 0x10000000 #define LVS_EX_COLUMNSNAPPOINTS 0x40000000 #define LVS_EX_COLUMNOVERFLOW 0x80000000 #define LVCF_FMT 0x0001 #define LVCF_WIDTH 0x0002 #define LVCF_TEXT 0x0004 #define LVCF_SUBITEM 0x0008 #define LVCF_IMAGE 0x0010 #define LVCF_ORDER 0x0020 #define LVCF_MINWIDTH 0x0040 #define LVCF_DEFAULTWIDTH 0x0080 #define LVCF_IDEALWIDTH 0x0100 #define LVCFMT_LEFT 0x0000 #define LVCFMT_RIGHT 0x0001 #define LVCFMT_CENTER 0x0002 #define LVCFMT_JUSTIFYMASK 0x0003 #define LVCFMT_FIXED_WIDTH 0x0100 #define LVCFMT_IMAGE 0x0800 #define LVCFMT_BITMAP_ON_RIGHT 0x1000 #define LVCFMT_COL_HAS_IMAGES 0x8000 #define LVCFMT_NO_DPI_SCALE 0x00040000 #define LVCFMT_FIXED_RATIO 0x00080000 #define LVCFMT_LINE_BREAK 0x00100000 #define LVCFMT_FILL 0x00200000 #define LVCFMT_WRAP 0x00400000 #define LVCFMT_NO_TITLE 0x00800000 #define LVCFMT_SPLIT_BUTTON 0x01000000 #define LVCFMT_TILE_PLACEMENTMASK (LVCFMT_LINE_BREAK | LVCFMT_FILL) #define LVSIL_NORMAL 0 #define LVSIL_SMALL 1 #define LVSIL_STATE 2 #define LVSIL_GROUPHEADER 3 /* following 2 flags only for LVS_OWNERDATA listviews */ /* and only in report or list mode */ #define LVSICF_NOINVALIDATEALL 0x0001 #define LVSICF_NOSCROLL 0x0002 #define LVFI_PARAM 0x0001 #define LVFI_STRING 0x0002 #define LVFI_SUBSTRING 0x0004 #define LVFI_PARTIAL 0x0008 #define LVFI_WRAP 0x0020 #define LVFI_NEARESTXY 0x0040 #define LVIF_TEXT 0x0001 #define LVIF_IMAGE 0x0002 #define LVIF_PARAM 0x0004 #define LVIF_STATE 0x0008 #define LVIF_INDENT 0x0010 #define LVIF_GROUPID 0x0100 #define LVIF_COLUMNS 0x0200 #define LVIF_NORECOMPUTE 0x0800 #define LVIF_DI_SETITEM 0x1000 #define LVIF_COLFMT 0x00010000 #define LVIR_BOUNDS 0x0000 #define LVIR_ICON 0x0001 #define LVIR_LABEL 0x0002 #define LVIR_SELECTBOUNDS 0x0003 #define LVIS_FOCUSED 0x0001 #define LVIS_SELECTED 0x0002 #define LVIS_CUT 0x0004 #define LVIS_DROPHILITED 0x0008 #define LVIS_ACTIVATING 0x0020 #define LVIS_OVERLAYMASK 0x0F00 #define LVIS_STATEIMAGEMASK 0xF000 #define LVNI_ALL 0x0000 #define LVNI_FOCUSED 0x0001 #define LVNI_SELECTED 0x0002 #define LVNI_CUT 0x0004 #define LVNI_DROPHILITED 0x0008 #define LVNI_ABOVE 0x0100 #define LVNI_BELOW 0x0200 #define LVNI_TOLEFT 0x0400 #define LVNI_TORIGHT 0x0800 #define LVHT_NOWHERE 0x0001 #define LVHT_ONITEMICON 0x0002 #define LVHT_ONITEMLABEL 0x0004 #define LVHT_ONITEMSTATEICON 0x0008 #define LVHT_ONITEM (LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON) #define LVHT_ABOVE 0x0008 #define LVHT_BELOW 0x0010 #define LVHT_TORIGHT 0x0020 #define LVHT_TOLEFT 0x0040 #define LV_VIEW_ICON 0x0000 #define LV_VIEW_DETAILS 0x0001 #define LV_VIEW_SMALLICON 0x0002 #define LV_VIEW_LIST 0x0003 #define LV_VIEW_TILE 0x0004 #define LV_VIEW_MAX 0x0004 #define LVGF_NONE 0x00000000 #define LVGF_HEADER 0x00000001 #define LVGF_FOOTER 0x00000002 #define LVGF_STATE 0x00000004 #define LVGF_ALIGN 0x00000008 #define LVGF_GROUPID 0x00000010 #define LVGF_SUBTITLE 0x00000100 #define LVGF_TASK 0x00000200 #define LVGF_DESCRIPTIONTOP 0x00000400 #define LVGF_DESCRIPTIONBOTTOM 0x00000800 #define LVGF_TITLEIMAGE 0x00001000 #define LVGF_EXTENDEDIMAGE 0x00002000 #define LVGF_ITEMS 0x00004000 #define LVGF_SUBSET 0x00008000 #define LVGF_SUBSETITEMS 0x00010000 #define LVGS_NORMAL 0x00000000 #define LVGS_COLLAPSED 0x00000001 #define LVGS_HIDDEN 0x00000002 #define LVGA_HEADER_LEFT 0x00000001 #define LVGA_HEADER_CENTER 0x00000002 #define LVGA_HEADER_RIGHT 0x00000004 #define LVGA_FOOTER_LEFT 0x00000008 #define LVGA_FOOTER_CENTER 0x00000010 #define LVGA_FOOTER_RIGHT 0x00000020 #define LVGMF_NONE 0x00000000 #define LVGMF_BORDERSIZE 0x00000001 #define LVGMF_BORDERCOLOR 0x00000002 #define LVGMF_TEXTCOLOR 0x00000004 #define LVTVIF_AUTOSIZE 0x00000000 #define LVTVIF_FIXEDWIDTH 0x00000001 #define LVTVIF_FIXEDHEIGHT 0x00000002 #define LVTVIF_FIXEDSIZE 0x00000003 #define LVTVIF_EXTENDED 0x00000004 #define LVTVIM_TILESIZE 0x00000001 #define LVTVIM_COLUMNS 0x00000002 #define LVTVIM_LABELMARGIN 0x00000004 #define LVIM_AFTER 0x00000001 #define LVM_FIRST 0x1000 #define LVM_GETBKCOLOR (LVM_FIRST+0) #define LVM_SETBKCOLOR (LVM_FIRST+1) #define LVM_GETIMAGELIST (LVM_FIRST+2) #define LVM_SETIMAGELIST (LVM_FIRST+3) #define LVM_GETITEMCOUNT (LVM_FIRST+4) #define LVM_GETITEMA (LVM_FIRST+5) #define LVM_GETITEMW (LVM_FIRST+75) #define LVM_GETITEM WINELIB_NAME_AW(LVM_GETITEM) #define LVM_SETITEMA (LVM_FIRST+6) #define LVM_SETITEMW (LVM_FIRST+76) #define LVM_SETITEM WINELIB_NAME_AW(LVM_SETITEM) #define LVM_INSERTITEMA (LVM_FIRST+7) #define LVM_INSERTITEMW (LVM_FIRST+77) #define LVM_INSERTITEM WINELIB_NAME_AW(LVM_INSERTITEM) #define LVM_DELETEITEM (LVM_FIRST+8) #define LVM_DELETEALLITEMS (LVM_FIRST+9) #define LVM_GETCALLBACKMASK (LVM_FIRST+10) #define LVM_SETCALLBACKMASK (LVM_FIRST+11) #define LVM_GETNEXTITEM (LVM_FIRST+12) #define LVM_FINDITEMA (LVM_FIRST+13) #define LVM_FINDITEMW (LVM_FIRST+83) #define LVM_FINDITEM WINELIB_NAME_AW(LVM_FINDITEM) #define LVM_GETITEMRECT (LVM_FIRST+14) #define LVM_SETITEMPOSITION (LVM_FIRST+15) #define LVM_GETITEMPOSITION (LVM_FIRST+16) #define LVM_GETSTRINGWIDTHA (LVM_FIRST+17) #define LVM_GETSTRINGWIDTHW (LVM_FIRST+87) #define LVM_GETSTRINGWIDTH WINELIB_NAME_AW(LVM_GETSTRINGWIDTH) #define LVM_HITTEST (LVM_FIRST+18) #define LVM_ENSUREVISIBLE (LVM_FIRST+19) #define LVM_SCROLL (LVM_FIRST+20) #define LVM_REDRAWITEMS (LVM_FIRST+21) #define LVM_ARRANGE (LVM_FIRST+22) #define LVM_EDITLABELA (LVM_FIRST+23) #define LVM_EDITLABELW (LVM_FIRST+118) #define LVM_EDITLABEL WINELIB_NAME_AW(LVM_EDITLABEL) #define LVM_GETEDITCONTROL (LVM_FIRST+24) #define LVM_GETCOLUMNA (LVM_FIRST+25) #define LVM_GETCOLUMNW (LVM_FIRST+95) #define LVM_GETCOLUMN WINELIB_NAME_AW(LVM_GETCOLUMN) #define LVM_SETCOLUMNA (LVM_FIRST+26) #define LVM_SETCOLUMNW (LVM_FIRST+96) #define LVM_SETCOLUMN WINELIB_NAME_AW(LVM_SETCOLUMN) #define LVM_INSERTCOLUMNA (LVM_FIRST+27) #define LVM_INSERTCOLUMNW (LVM_FIRST+97) #define LVM_INSERTCOLUMN WINELIB_NAME_AW(LVM_INSERTCOLUMN) #define LVM_DELETECOLUMN (LVM_FIRST+28) #define LVM_GETCOLUMNWIDTH (LVM_FIRST+29) #define LVM_SETCOLUMNWIDTH (LVM_FIRST+30) #define LVM_GETHEADER (LVM_FIRST+31) #define LVM_CREATEDRAGIMAGE (LVM_FIRST+33) #define LVM_GETVIEWRECT (LVM_FIRST+34) #define LVM_GETTEXTCOLOR (LVM_FIRST+35) #define LVM_SETTEXTCOLOR (LVM_FIRST+36) #define LVM_GETTEXTBKCOLOR (LVM_FIRST+37) #define LVM_SETTEXTBKCOLOR (LVM_FIRST+38) #define LVM_GETTOPINDEX (LVM_FIRST+39) #define LVM_GETCOUNTPERPAGE (LVM_FIRST+40) #define LVM_GETORIGIN (LVM_FIRST+41) #define LVM_UPDATE (LVM_FIRST+42) #define LVM_SETITEMSTATE (LVM_FIRST+43) #define LVM_GETITEMSTATE (LVM_FIRST+44) #define LVM_GETITEMTEXTA (LVM_FIRST+45) #define LVM_GETITEMTEXTW (LVM_FIRST+115) #define LVM_GETITEMTEXT WINELIB_NAME_AW(LVM_GETITEMTEXT) #define LVM_SETITEMTEXTA (LVM_FIRST+46) #define LVM_SETITEMTEXTW (LVM_FIRST+116) #define LVM_SETITEMTEXT WINELIB_NAME_AW(LVM_SETITEMTEXT) #define LVM_SETITEMCOUNT (LVM_FIRST+47) #define LVM_SORTITEMS (LVM_FIRST+48) #define LVM_SORTITEMSEX (LVM_FIRST+81) #define LVM_SETITEMPOSITION32 (LVM_FIRST+49) #define LVM_GETSELECTEDCOUNT (LVM_FIRST+50) #define LVM_GETITEMSPACING (LVM_FIRST+51) #define LVM_GETISEARCHSTRINGA (LVM_FIRST+52) #define LVM_GETISEARCHSTRINGW (LVM_FIRST+117) #define LVM_GETISEARCHSTRING WINELIB_NAME_AW(LVM_GETISEARCHSTRING) #define LVM_SETICONSPACING (LVM_FIRST+53) #define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54) #define LVM_GETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+55) #define LVM_GETSUBITEMRECT (LVM_FIRST+56) #define LVM_SUBITEMHITTEST (LVM_FIRST+57) #define LVM_SETCOLUMNORDERARRAY (LVM_FIRST+58) #define LVM_GETCOLUMNORDERARRAY (LVM_FIRST+59) #define LVM_SETHOTITEM (LVM_FIRST+60) #define LVM_GETHOTITEM (LVM_FIRST+61) #define LVM_SETHOTCURSOR (LVM_FIRST+62) #define LVM_GETHOTCURSOR (LVM_FIRST+63) #define LVM_APPROXIMATEVIEWRECT (LVM_FIRST+64) #define LVM_SETWORKAREAS (LVM_FIRST+65) #define LVM_GETSELECTIONMARK (LVM_FIRST+66) #define LVM_SETSELECTIONMARK (LVM_FIRST+67) #define LVM_SETBKIMAGEA (LVM_FIRST+68) #define LVM_SETBKIMAGEW (LVM_FIRST+138) #define LVM_SETBKIMAGE WINELIB_NAME_AW(LVM_SETBKIMAGE) #define LVM_GETBKIMAGEA (LVM_FIRST+69) #define LVM_GETBKIMAGEW (LVM_FIRST+139) #define LVM_GETBKIMAGE WINELIB_NAME_AW(LVM_GETBKIMAGE) #define LVM_GETWORKAREAS (LVM_FIRST+70) #define LVM_SETHOVERTIME (LVM_FIRST+71) #define LVM_GETHOVERTIME (LVM_FIRST+72) #define LVM_GETNUMBEROFWORKAREAS (LVM_FIRST+73) #define LVM_SETTOOLTIPS (LVM_FIRST+74) #define LVM_GETTOOLTIPS (LVM_FIRST+78) #define LVM_GETUNICODEFORMAT (CCM_GETUNICODEFORMAT) #define LVM_SETUNICODEFORMAT (CCM_SETUNICODEFORMAT) #define LVM_SETSELECTEDCOLUMN (LVM_FIRST + 140) #define LVM_SETTILEWIDTH (LVM_FIRST + 141) #define LVM_SETVIEW (LVM_FIRST + 142) #define LVM_GETVIEW (LVM_FIRST + 143) #define LVM_INSERTGROUP (LVM_FIRST + 145) #define LVM_SETGROUPINFO (LVM_FIRST + 147) #define LVM_GETGROUPINFO (LVM_FIRST + 149) #define LVM_REMOVEGROUP (LVM_FIRST + 150) #define LVM_MOVEGROUP (LVM_FIRST + 151) #define LVM_MOVEITEMTOGROUP (LVM_FIRST + 154) #define LVM_SETGROUPMETRICS (LVM_FIRST + 155) #define LVM_GETGROUPMETRICS (LVM_FIRST + 156) #define LVM_ENABLEGROUPVIEW (LVM_FIRST + 157) #define LVM_SORTGROUPS (LVM_FIRST + 158) #define LVM_INSERTGROUPSORTED (LVM_FIRST + 159) #define LVM_REMOVEALLGROUPS (LVM_FIRST + 160) #define LVM_HASGROUP (LVM_FIRST + 161) #define LVM_SETTILEVIEWINFO (LVM_FIRST + 162) #define LVM_GETTILEVIEWINFO (LVM_FIRST + 163) #define LVM_SETTILEINFO (LVM_FIRST + 164) #define LVM_GETTILEINFO (LVM_FIRST + 165) #define LVM_SETINSERTMARK (LVM_FIRST + 166) #define LVM_GETINSERTMARK (LVM_FIRST + 167) #define LVM_INSERTMARKHITTEST (LVM_FIRST + 168) #define LVM_GETINSERTMARKRECT (LVM_FIRST + 169) #define LVM_SETINSERTMARKCOLOR (LVM_FIRST + 170) #define LVM_GETINSERTMARKCOLOR (LVM_FIRST + 171) #define LVM_SETINFOTIP (LVM_FIRST + 173) #define LVM_GETSELECTEDCOLUMN (LVM_FIRST + 174) #define LVM_ISGROUPVIEWENABLED (LVM_FIRST + 175) #define LVM_GETOUTLINECOLOR (LVM_FIRST + 176) #define LVM_SETOUTLINECOLOR (LVM_FIRST + 177) #define LVM_CANCELEDITLABEL (LVM_FIRST + 179) #define LVM_MAPINDEXTOID (LVM_FIRST + 180) #define LVM_MAPIDTOINDEX (LVM_FIRST + 181) #define LVM_ISITEMVISIBLE (LVM_FIRST + 182) #define LVM_GETEMPTYTEXT (LVM_FIRST + 204) #define LVM_GETFOOTERRECT (LVM_FIRST + 205) #define LVM_GETFOOTERINFO (LVM_FIRST + 206) #define LVM_GETFOOTERITEMRECT (LVM_FIRST + 207) #define LVM_GETFOOTERITEM (LVM_FIRST + 208) #define LVM_GETITEMINDEXRECT (LVM_FIRST + 209) #define LVM_SETITEMINDEXSTATE (LVM_FIRST + 210) #define LVM_GETNEXTITEMINDEX (LVM_FIRST + 211) #define LVN_FIRST (0U-100U) #define LVN_LAST (0U-199U) #define LVN_ITEMCHANGING (LVN_FIRST-0) #define LVN_ITEMCHANGED (LVN_FIRST-1) #define LVN_INSERTITEM (LVN_FIRST-2) #define LVN_DELETEITEM (LVN_FIRST-3) #define LVN_DELETEALLITEMS (LVN_FIRST-4) #define LVN_BEGINLABELEDITA (LVN_FIRST-5) #define LVN_BEGINLABELEDITW (LVN_FIRST-75) #define LVN_BEGINLABELEDIT WINELIB_NAME_AW(LVN_BEGINLABELEDIT) #define LVN_ENDLABELEDITA (LVN_FIRST-6) #define LVN_ENDLABELEDITW (LVN_FIRST-76) #define LVN_ENDLABELEDIT WINELIB_NAME_AW(LVN_ENDLABELEDIT) #define LVN_COLUMNCLICK (LVN_FIRST-8) #define LVN_BEGINDRAG (LVN_FIRST-9) #define LVN_BEGINRDRAG (LVN_FIRST-11) #define LVN_ODCACHEHINT (LVN_FIRST-13) #define LVN_ITEMACTIVATE (LVN_FIRST-14) #define LVN_ODSTATECHANGED (LVN_FIRST-15) #define LVN_HOTTRACK (LVN_FIRST-21) #define LVN_ODFINDITEMA (LVN_FIRST-52) #define LVN_ODFINDITEMW (LVN_FIRST-79) #define LVN_ODFINDITEM WINELIB_NAME_AW(LVN_ODFINDITEM) #define LVN_GETDISPINFOA (LVN_FIRST-50) #define LVN_GETDISPINFOW (LVN_FIRST-77) #define LVN_GETDISPINFO WINELIB_NAME_AW(LVN_GETDISPINFO) #define LVN_SETDISPINFOA (LVN_FIRST-51) #define LVN_SETDISPINFOW (LVN_FIRST-78) #define LVN_SETDISPINFO WINELIB_NAME_AW(LVN_SETDISPINFO) #define LVN_KEYDOWN (LVN_FIRST-55) #define LVN_MARQUEEBEGIN (LVN_FIRST-56) #define LVN_GETINFOTIPA (LVN_FIRST-57) #define LVN_GETINFOTIPW (LVN_FIRST-58) #define LVN_GETINFOTIP WINELIB_NAME_AW(LVN_GETINFOTIP) #define LVN_INCREMENTALSEARCHA (LVN_FIRST-62) #define LVN_INCREMENTALSEARCHW (LVN_FIRST-63) #define LVN_COLUMNDROPDOWN (LVN_FIRST-64) #define LVN_COLUMNOVERFLOWCLICK (LVN_FIRST-66) #define LVN_INCREMENTALSEARCH WINELIB_NAME_AW(LVN_INCREMENTALSEARCH) #define LVN_BEGINSCROLL (LVN_FIRST-80) #define LVN_ENDSCROLL (LVN_FIRST-81) #define LVN_LINKCLICK (LVN_FIRST-84) #define LVN_ASYNCDRAWN (LVN_FIRST-86) #define LVN_GETEMPTYMARKUP (LVN_FIRST-87) /* LVN_INCREMENTALSEARCH return codes */ #define LVNSCH_DEFAULT -1 #define LVNSCH_ERROR -2 #define LVNSCH_IGNORE -3 #define LVA_DEFAULT 0x0000 #define LVA_ALIGNLEFT 0x0001 #define LVA_ALIGNTOP 0x0002 #define LVA_SNAPTOGRID 0x0005 typedef struct tagLVITEMA { UINT mask; INT iItem; INT iSubItem; UINT state; UINT stateMask; LPSTR pszText; INT cchTextMax; INT iImage; LPARAM lParam; /* (_WIN32_IE >= 0x0300) */ INT iIndent; /* (_WIN32_IE >= 0x0560) */ INT iGroupId; UINT cColumns; PUINT puColumns; /* (_WIN32_WINNT >= 0x0600) */ PINT piColFmt; INT iGroup; } LVITEMA, *LPLVITEMA; typedef struct tagLVITEMW { UINT mask; INT iItem; INT iSubItem; UINT state; UINT stateMask; LPWSTR pszText; INT cchTextMax; INT iImage; LPARAM lParam; /* (_WIN32_IE >= 0x0300) */ INT iIndent; /* (_WIN32_IE >= 0x0560) */ INT iGroupId; UINT cColumns; PUINT puColumns; /* (_WIN32_WINNT >= 0x0600) */ PINT piColFmt; INT iGroup; } LVITEMW, *LPLVITEMW; #define LVITEM WINELIB_NAME_AW(LVITEM) #define LPLVITEM WINELIB_NAME_AW(LPLVITEM) #define LVITEM_V1_SIZEA CCSIZEOF_STRUCT(LVITEMA, lParam) #define LVITEM_V1_SIZEW CCSIZEOF_STRUCT(LVITEMW, lParam) #define LVITEM_V1_SIZE WINELIB_NAME_AW(LVITEM_V1_SIZE) #define LVITEMA_V5_SIZE CCSIZEOF_STRUCT(LVITEMA, puColumns) #define LVITEMW_V5_SIZE CCSIZEOF_STRUCT(LVITEMW, puColumns) #define LVITEM_V5_SIZE WINELIB_NAME_AW(LVITEM_V5_SIZE) #define LV_ITEM LVITEM #define LV_ITEMA LVITEMA #define LV_ITEMW LVITEMW typedef struct LVSETINFOTIP { UINT cbSize; DWORD dwFlags; LPWSTR pszText; int iItem; int iSubItem; } LVSETINFOTIP, *PLVSETINFOTIP; /* ListView background image structs and constants For _WIN32_IE version 0x400 and later. */ typedef struct tagLVBKIMAGEA { ULONG ulFlags; HBITMAP hbm; LPSTR pszImage; UINT cchImageMax; int xOffsetPercent; int yOffsetPercent; } LVBKIMAGEA, *LPLVBKIMAGEA; typedef struct tagLVBKIMAGEW { ULONG ulFlags; HBITMAP hbm; LPWSTR pszImage; UINT cchImageMax; int xOffsetPercent; int yOffsetPercent; } LVBKIMAGEW, *LPLVBKIMAGEW; #define LVBKIMAGE WINELIB_NAME_AW(LVBKIMAGE) #define LPLVBKIMAGE WINELIB_NAME_AW(LPLVBKIMAGE) #define LVBKIF_SOURCE_NONE 0x00000000 #define LVBKIF_SOURCE_HBITMAP 0x00000001 #define LVBKIF_SOURCE_URL 0x00000002 #define LVBKIF_SOURCE_MASK 0x00000003 #define LVBKIF_STYLE_NORMAL 0x00000000 #define LVBKIF_STYLE_TILE 0x00000010 #define LVBKIF_STYLE_MASK 0x00000010 #define LVBKIF_FLAG_TILEOFFSET 0x00000100 #define LVBKIF_TYPE_WATERMARK 0x10000000 #define LVBKIF_FLAG_ALPHABLEND 0x20000000 #define ListView_SetBkImage(hwnd, plvbki) \ (BOOL)SNDMSG((hwnd), LVM_SETBKIMAGE, 0, (LPARAM)plvbki) #define ListView_GetBkImage(hwnd, plvbki) \ (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)plvbki) typedef struct tagLVCOLUMNA { UINT mask; INT fmt; INT cx; LPSTR pszText; INT cchTextMax; INT iSubItem; /* (_WIN32_IE >= 0x0300) */ INT iImage; INT iOrder; /* (_WIN32_WINNT >= 0x0600) */ INT cxMin; INT cxDefault; INT cxIdeal; } LVCOLUMNA, *LPLVCOLUMNA; typedef struct tagLVCOLUMNW { UINT mask; INT fmt; INT cx; LPWSTR pszText; INT cchTextMax; INT iSubItem; /* (_WIN32_IE >= 0x0300) */ INT iImage; INT iOrder; /* (_WIN32_WINNT >= 0x0600) */ INT cxMin; INT cxDefault; INT cxIdeal; } LVCOLUMNW, *LPLVCOLUMNW; #define LVCOLUMN WINELIB_NAME_AW(LVCOLUMN) #define LPLVCOLUMN WINELIB_NAME_AW(LPLVCOLUMN) #define LVCOLUMN_V1_SIZEA CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem) #define LVCOLUMN_V1_SIZEW CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem) #define LVCOLUMN_V1_SIZE WINELIB_NAME_AW(LVCOLUMN_V1_SIZE) #define LV_COLUMN LVCOLUMN typedef struct tagNMLISTVIEW { NMHDR hdr; INT iItem; INT iSubItem; UINT uNewState; UINT uOldState; UINT uChanged; POINT ptAction; LPARAM lParam; } NMLISTVIEW, *LPNMLISTVIEW; #define NM_LISTVIEW NMLISTVIEW #define LPNM_LISTVIEW LPNMLISTVIEW typedef struct tagNMITEMACTIVATE { NMHDR hdr; int iItem; int iSubItem; UINT uNewState; UINT uOldState; UINT uChanged; POINT ptAction; LPARAM lParam; UINT uKeyFlags; } NMITEMACTIVATE, *LPNMITEMACTIVATE; #define LVKF_ALT 0x0001 #define LVKF_CONTROL 0x0002 #define LVKF_SHIFT 0x0004 typedef struct tagLVDISPINFO { NMHDR hdr; LVITEMA item; } NMLVDISPINFOA, *LPNMLVDISPINFOA; typedef struct tagLVDISPINFOW { NMHDR hdr; LVITEMW item; } NMLVDISPINFOW, *LPNMLVDISPINFOW; #define NMLVDISPINFO WINELIB_NAME_AW(NMLVDISPINFO) #define LPNMLVDISPINFO WINELIB_NAME_AW(LPNMLVDISPINFO) #define LV_DISPINFO NMLVDISPINFO #define LV_DISPINFOA NMLVDISPINFOA #define LV_DISPINFOW NMLVDISPINFOW #include typedef struct tagLVKEYDOWN { NMHDR hdr; WORD wVKey; UINT flags; } NMLVKEYDOWN, *LPNMLVKEYDOWN; #include #define LV_KEYDOWN NMLVKEYDOWN typedef struct tagNMLVGETINFOTIPA { NMHDR hdr; DWORD dwFlags; LPSTR pszText; int cchTextMax; int iItem; int iSubItem; LPARAM lParam; } NMLVGETINFOTIPA, *LPNMLVGETINFOTIPA; typedef struct tagNMLVGETINFOTIPW { NMHDR hdr; DWORD dwFlags; LPWSTR pszText; int cchTextMax; int iItem; int iSubItem; LPARAM lParam; } NMLVGETINFOTIPW, *LPNMLVGETINFOTIPW; #define NMLVGETINFOTIP WINELIB_NAME_AW(NMLVGETINFOTIP) #define LPNMLVGETINFOTIP WINELIB_NAME_AW(LPNMLVGETINFOTIP) typedef struct tagLVHITTESTINFO { POINT pt; UINT flags; INT iItem; INT iSubItem; /* (_WIN32_WINNT >= 0x0600) */ INT iGroup; } LVHITTESTINFO, *LPLVHITTESTINFO; #define LV_HITTESTINFO LVHITTESTINFO #define _LV_HITTESTINFO tagLVHITTESTINFO #define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO,iItem) typedef struct tagLVFINDINFOA { UINT flags; LPCSTR psz; LPARAM lParam; POINT pt; UINT vkDirection; } LVFINDINFOA, *LPLVFINDINFOA; typedef struct tagLVFINDINFOW { UINT flags; LPCWSTR psz; LPARAM lParam; POINT pt; UINT vkDirection; } LVFINDINFOW, *LPLVFINDINFOW; #define LVFINDINFO WINELIB_NAME_AW(LVFINDINFO) #define LPLVFINDINFO WINELIB_NAME_AW(LPLVFINDINFO) #define LV_FINDINFO LVFINDINFO #define LV_FINDINFOA LVFINDINFOA #define LV_FINDINFOW LVFINDINFOW /* Groups relates structures */ typedef struct LVGROUP { UINT cbSize; UINT mask; LPWSTR pszHeader; INT cchHeader; LPWSTR pszFooter; INT cchFooter; INT iGroupId; UINT stateMask; UINT state; UINT uAlign; /* (_WIN32_WINNT >= 0x0600) */ LPWSTR pszSubtitle; UINT cchSubtitle; LPWSTR pszTask; UINT cchTask; LPWSTR pszDescriptionTop; UINT cchDescriptionTop; LPWSTR pszDescriptionBottom; UINT cchDescriptionBottom; INT iTitleImage; INT iExtendedImage; INT iFirstItem; UINT cItems; LPWSTR pszSubsetTitle; UINT cchSubsetTitle; } LVGROUP, *PLVGROUP; #define LVGROUP_V5_SIZE CCSIZEOF_STRUCT(LVGROUP, uAlign) typedef struct LVGROUPMETRICS { UINT cbSize; UINT mask; UINT Left; UINT Top; UINT Right; UINT Bottom; COLORREF crLeft; COLORREF crTop; COLORREF crRight; COLORREF crBottom; COLORREF crRightHeader; COLORREF crFooter; } LVGROUPMETRICS, *PLVGROUPMETRICS; typedef INT (*PFNLVGROUPCOMPARE)(INT, INT, VOID*); typedef struct LVINSERTGROUPSORTED { PFNLVGROUPCOMPARE pfnGroupCompare; LPVOID *pvData; LVGROUP lvGroup; } LVINSERTGROUPSORTED, *PLVINSERTGROUPSORTED; /* Tile related structures */ typedef struct LVTILEINFO { UINT cbSize; int iItem; UINT cColumns; PUINT puColumns; /* (_WIN32_WINNT >= 0x0600) */ int* piColFmt; } LVTILEINFO, *PLVTILEINFO; typedef struct LVTILEVIEWINFO { UINT cbSize; DWORD dwMask; DWORD dwFlags; SIZE sizeTile; int cLines; RECT rcLabelMargin; } LVTILEVIEWINFO, *PLVTILEVIEWINFO; typedef struct LVINSERTMARK { UINT cbSize; DWORD dwFlags; int iItem; DWORD dwReserved; } LVINSERTMARK, *PLVINSERTMARK; typedef struct tagTCHITTESTINFO { POINT pt; UINT flags; } TCHITTESTINFO, *LPTCHITTESTINFO; #define TC_HITTESTINFO TCHITTESTINFO typedef INT (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM); #define NMLVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMLCUSTOMDRW, clrTextBk) typedef struct tagNMLVCUSTOMDRAW { NMCUSTOMDRAW nmcd; COLORREF clrText; COLORREF clrTextBk; int iSubItem; /* (_WIN32_IE >= 0x0400) */ DWORD dwItemType; /* (_WIN32_IE >= 0x560) */ COLORREF clrFace; /* (_WIN32_IE >= 0x560) */ int iIconEffect; /* (_WIN32_IE >= 0x560) */ int iIconPhase; /* (_WIN32_IE >= 0x560) */ int iPartId; /* (_WIN32_IE >= 0x560) */ int iStateId; /* (_WIN32_IE >= 0x560) */ RECT rcText; /* (_WIN32_IE >= 0x560) */ UINT uAlign; /* (_WIN32_IE >= 0x560) */ } NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW; typedef struct tagNMLVCACHEHINT { NMHDR hdr; INT iFrom; INT iTo; } NMLVCACHEHINT, *LPNMLVCACHEHINT; #define LPNM_CACHEHINT LPNMLVCACHEHINT #define PNM_CACHEHINT LPNMLVCACHEHINT #define NM_CACHEHINT NMLVCACHEHINT typedef struct tagNMLVFINDITEMA { NMHDR hdr; int iStart; LVFINDINFOA lvfi; } NMLVFINDITEMA, *LPNMLVFINDITEMA; typedef struct tagNMLVFINDITEMW { NMHDR hdr; int iStart; LVFINDINFOW lvfi; } NMLVFINDITEMW, *LPNMLVFINDITEMW; #define NMLVFINDITEM WINELIB_NAME_AW(NMLVFINDITEM) #define LPNMLVFINDITEM WINELIB_NAME_AW(LPNMLVFINDITEM) #define NM_FINDITEM NMLVFINDITEM #define LPNM_FINDITEM LPNMLVFINDITEM #define PNM_FINDITEM LPNMLVFINDITEM typedef struct tagNMLVODSTATECHANGE { NMHDR hdr; int iFrom; int iTo; UINT uNewState; UINT uOldState; } NMLVODSTATECHANGE, *LPNMLVODSTATECHANGE; #define PNM_ODSTATECHANGE LPNMLVODSTATECHANGE #define LPNM_ODSTATECHANGE LPNMLVODSTATECHANGE #define NM_ODSTATECHANGE NMLVODSTATECHANGE typedef struct NMLVSCROLL { NMHDR hdr; int dx; int dy; } NMLVSCROLL, *LPNMLVSCROLL; #define ListView_SetItemCount(hwnd,count) \ (BOOL)SNDMSG((hwnd),LVM_SETITEMCOUNT,(WPARAM)(INT)(count),0) #define ListView_SetTextBkColor(hwnd,clrBk) \ (BOOL)SNDMSG((hwnd),LVM_SETTEXTBKCOLOR,0,(LPARAM)(COLORREF)(clrBk)) #define ListView_SetTextColor(hwnd,clrBk) \ (BOOL)SNDMSG((hwnd),LVM_SETTEXTCOLOR,0,(LPARAM)(COLORREF)(clrBk)) #define ListView_DeleteColumn(hwnd,col)\ (LRESULT)SNDMSG((hwnd),LVM_DELETECOLUMN,0,(LPARAM)(INT)(col)) #define ListView_GetColumnA(hwnd,x,col)\ (LRESULT)SNDMSGA((hwnd),LVM_GETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col)) #define ListView_GetColumnW(hwnd,x,col)\ (LRESULT)SNDMSGW((hwnd),LVM_GETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col)) #define ListView_GetColumn WINELIB_NAME_AW(ListView_GetColumn) #define ListView_SetColumnA(hwnd,x,col)\ (LRESULT)SNDMSGA((hwnd),LVM_SETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col)) #define ListView_SetColumnW(hwnd,x,col)\ (LRESULT)SNDMSGW((hwnd),LVM_SETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col)) #define ListView_SetColumn WINELIB_NAME_AW(ListView_SetColumn) #define ListView_GetColumnWidth(hwnd,x)\ (INT)SNDMSG((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(INT)(x), 0) #define ListView_SetColumnWidth(hwnd,x,width)\ (BOOL)SNDMSG((hwnd),LVM_SETCOLUMNWIDTH,(WPARAM)(INT)(x),(LPARAM)(MAKELPARAM(width,0))) #define ListView_GetNextItem(hwnd,nItem,flags) \ (INT)SNDMSG((hwnd),LVM_GETNEXTITEM,(WPARAM)(INT)(nItem),(LPARAM)(MAKELPARAM(flags,0))) #define ListView_FindItemA(hwnd,nItem,plvfi) \ (INT)SNDMSGA((hwnd),LVM_FINDITEMA,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOA*)(plvfi)) #define ListView_FindItemW(hwnd,nItem,plvfi) \ (INT)SNDMSGW((hwnd),LVM_FINDITEMW,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOW*)(plvfi)) #define ListView_FindItem WINELIB_NAME_AW(ListView_FindItem) #define ListView_Arrange(hwnd,code) \ (INT)SNDMSG((hwnd), LVM_ARRANGE, (WPARAM)(INT)(code), 0) #define ListView_GetItemPosition(hwnd,i,ppt) \ (INT)SNDMSG((hwnd),LVM_GETITEMPOSITION,(WPARAM)(INT)(i),(LPARAM)(LPPOINT)(ppt)) #define ListView_GetItemRect(hwnd,i,prc,code) \ (BOOL)SNDMSG((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \ ((prc) ? (((RECT*)(prc))->left = (code),(LPARAM)(RECT \ *)(prc)) : (LPARAM)(RECT*)NULL)) #define ListView_SetItemA(hwnd,pitem) \ (INT)SNDMSGA((hwnd),LVM_SETITEMA,0,(LPARAM)(const LVITEMA *)(pitem)) #define ListView_SetItemW(hwnd,pitem) \ (INT)SNDMSGW((hwnd),LVM_SETITEMW,0,(LPARAM)(const LVITEMW *)(pitem)) #define ListView_SetItem WINELIB_NAME_AW(ListView_SetItem) #define ListView_SetItemState(hwnd,i,data,dataMask) \ { LVITEM _LVi; _LVi.state = data; _LVi.stateMask = dataMask;\ SNDMSG(hwnd, LVM_SETITEMSTATE, (WPARAM)(UINT)i, (LPARAM) (LPLVITEM)&_LVi);} #define ListView_GetItemState(hwnd,i,mask) \ (UINT)SNDMSG((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask)) #define ListView_SetCheckState(hwndLV, i, bCheck) \ { LVITEM _LVi; _LVi.state = INDEXTOSTATEIMAGEMASK((bCheck)?2:1); _LVi.stateMask = LVIS_STATEIMAGEMASK; \ SNDMSG(hwndLV, LVM_SETITEMSTATE, (WPARAM)(UINT)(i), (LPARAM)(LPLVITEM)&_LVi);} #define ListView_GetCheckState(hwndLV, i) \ (((UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (i), LVIS_STATEIMAGEMASK) >> 12) - 1) #define ListView_GetCountPerPage(hwnd) \ (BOOL)SNDMSG((hwnd), LVM_GETCOUNTPERPAGE, 0, 0) #define ListView_GetImageList(hwnd,iImageList) \ (HIMAGELIST)SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)(INT)(iImageList), 0) #define ListView_GetStringWidthA(hwnd,pstr) \ (INT)SNDMSGA((hwnd),LVM_GETSTRINGWIDTHA,0,(LPARAM)(LPCSTR)(pstr)) #define ListView_GetStringWidthW(hwnd,pstr) \ (INT)SNDMSGW((hwnd),LVM_GETSTRINGWIDTHW,0,(LPARAM)(LPCWSTR)(pstr)) #define ListView_GetStringWidth WINELIB_NAME_AW(ListView_GetStringWidth) #define ListView_GetTopIndex(hwnd) \ (BOOL)SNDMSG((hwnd), LVM_GETTOPINDEX, 0, 0) #define ListView_Scroll(hwnd,dx,dy) \ (BOOL)SNDMSG((hwnd),LVM_SCROLL,(WPARAM)(INT)(dx),(LPARAM)(INT)(dy)) #define ListView_EnsureVisible(hwnd,i,fPartialOk) \ (BOOL)SNDMSG((hwnd),LVM_ENSUREVISIBLE,(WPARAM)(INT)i,(LPARAM)(BOOL)fPartialOk) #define ListView_SetBkColor(hwnd,clrBk) \ (BOOL)SNDMSG((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk)) #define ListView_SetImageList(hwnd,himl,iImageList) \ (HIMAGELIST)SNDMSG((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(HIMAGELIST)(himl)) #define ListView_GetItemCount(hwnd) \ (INT)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, 0) #define ListView_RedrawItems(hwnd,first,last) \ (BOOL)SNDMSG((hwnd),LVM_REDRAWITEMS,(WPARAM)(INT)(first),(LPARAM)(INT)(last)) #define ListView_GetEditControl(hwnd) \ (HWND)SNDMSG((hwnd), LVM_GETEDITCONTROL, 0, 0) #define ListView_GetTextColor(hwnd) \ (COLORREF)SNDMSG((hwnd), LVM_GETTEXTCOLOR, 0, 0) #define ListView_GetTextBkColor(hwnd) \ (COLORREF)SNDMSG((hwnd), LVM_GETTEXTBKCOLOR, 0, 0) #define ListView_GetBkColor(hwnd) \ (COLORREF)SNDMSG((hwnd), LVM_GETBKCOLOR, 0, 0) #define ListView_GetItemA(hwnd,pitem) \ (BOOL)SNDMSGA((hwnd),LVM_GETITEMA,0,(LPARAM)(LVITEMA *)(pitem)) #define ListView_GetItemW(hwnd,pitem) \ (BOOL)SNDMSGW((hwnd),LVM_GETITEMW,0,(LPARAM)(LVITEMW *)(pitem)) #define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem) #define ListView_GetOrigin(hwnd,ppt) \ (BOOL)SNDMSG((hwnd),LVM_GETORIGIN,0,(LPARAM)(POINT *)(ppt)) #define ListView_HitTest(hwnd,pinfo) \ (INT)SNDMSG((hwnd),LVM_HITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo)) #define ListView_InsertItemA(hwnd,pitem) \ (INT)SNDMSGA((hwnd),LVM_INSERTITEMA,0,(LPARAM)(const LVITEMA *)(pitem)) #define ListView_InsertItemW(hwnd,pitem) \ (INT)SNDMSGW((hwnd),LVM_INSERTITEMW,0,(LPARAM)(const LVITEMW *)(pitem)) #define ListView_InsertItem WINELIB_NAME_AW(ListView_InsertItem) #define ListView_DeleteAllItems(hwnd) \ (BOOL)SNDMSG((hwnd), LVM_DELETEALLITEMS, 0, 0) #define ListView_InsertColumnA(hwnd,iCol,pcol) \ (INT)SNDMSGA((hwnd),LVM_INSERTCOLUMNA,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNA *)(pcol)) #define ListView_InsertColumnW(hwnd,iCol,pcol) \ (INT)SNDMSGW((hwnd),LVM_INSERTCOLUMNW,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNW *)(pcol)) #define ListView_InsertColumn WINELIB_NAME_AW(ListView_InsertColumn) #define ListView_SortItems(hwndLV,_pfnCompare,_lPrm) \ (BOOL)SNDMSG((hwndLV),LVM_SORTITEMS,(WPARAM)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare) #define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \ (BOOL)SNDMSG((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare)) #define ListView_SetItemPosition(hwndLV, i, x, y) \ (BOOL)SNDMSG((hwndLV),LVM_SETITEMPOSITION,(WPARAM)(INT)(i),MAKELPARAM((x),(y))) #define ListView_GetSelectedCount(hwndLV) \ (UINT)SNDMSG((hwndLV), LVM_GETSELECTEDCOUNT, 0, 0) #define ListView_EditLabelA(hwndLV, i) \ (HWND)SNDMSG((hwndLV), LVM_EDITLABELA, (WPARAM)(int)(i), 0) #define ListView_EditLabelW(hwndLV, i) \ (HWND)SNDMSG((hwndLV), LVM_EDITLABELW, (WPARAM)(int)(i), 0) #define ListView_EditLabel WINELIB_NAME_AW(ListView_EditLabel) #define ListView_GetItemTextA(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \ { \ LVITEMA _LVi;\ _LVi.iSubItem = _iSubItem;\ _LVi.cchTextMax = _cchTextMax;\ _LVi.pszText = _pszText;\ SNDMSGA(hwndLV, LVM_GETITEMTEXTA, (WPARAM)(i), (LPARAM)&_LVi);\ } #define ListView_GetItemTextW(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \ { \ LVITEMW _LVi;\ _LVi.iSubItem = _iSubItem;\ _LVi.cchTextMax = _cchTextMax;\ _LVi.pszText = _pszText;\ SNDMSGW(hwndLV, LVM_GETITEMTEXTW, (WPARAM)(i), (LPARAM)&_LVi);\ } #define ListView_GetItemText WINELIB_NAME_AW(ListView_GetItemText) #define ListView_SetItemPosition32(hwnd,n,x1,y1) \ { POINT ptNewPos; ptNewPos.x = (x1); ptNewPos.y = (y1); SNDMSG((hwnd), LVM_SETITEMPOSITION32, (WPARAM)(int)(n), (LPARAM)&ptNewPos); } #define ListView_SetItemTextA(hwndLV, i, _iSubItem, _pszText) \ { LVITEMA _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\ SNDMSGA(hwndLV, LVM_SETITEMTEXTA, (WPARAM)i, (LPARAM) (LVITEMA*)&_LVi);} #define ListView_SetItemTextW(hwndLV, i, _iSubItem, _pszText) \ { LVITEMW _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\ SNDMSGW(hwndLV, LVM_SETITEMTEXTW, (WPARAM)i, (LPARAM) (LVITEMW*)& _LVi);} #define ListView_SetItemText WINELIB_NAME_AW(ListView_SetItemText) #define ListView_DeleteItem(hwndLV, i) \ (BOOL)SNDMSG(hwndLV, LVM_DELETEITEM, (WPARAM)(int)(i), 0) #define ListView_Update(hwndLV, i) \ (BOOL)SNDMSG((hwndLV), LVM_UPDATE, (WPARAM)(i), 0) #define ListView_GetColumnOrderArray(hwndLV, iCount, pi) \ (BOOL)SNDMSG((hwndLV), LVM_GETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi) #define ListView_GetExtendedListViewStyle(hwndLV) \ (DWORD)SNDMSG((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) #define ListView_GetHotCursor(hwndLV) \ (HCURSOR)SNDMSG((hwndLV), LVM_GETHOTCURSOR, 0, 0) #define ListView_GetHotItem(hwndLV) \ (int)SNDMSG((hwndLV), LVM_GETHOTITEM, 0, 0) #define ListView_GetItemSpacing(hwndLV, fSmall) \ (DWORD)SNDMSG((hwndLV), LVM_GETITEMSPACING, (WPARAM)fSmall, 0) #define ListView_GetSubItemRect(hwndLV, iItem, iSubItem, code, prc) \ (BOOL)SNDMSG((hwndLV), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \ ((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : 0)) #define ListView_GetToolTips(hwndLV) \ (HWND)SNDMSG((hwndLV), LVM_GETTOOLTIPS, 0, 0) #define ListView_SetColumnOrderArray(hwndLV, iCount, pi) \ (BOOL)SNDMSG((hwndLV), LVM_SETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi) #define ListView_SetExtendedListViewStyle(hwndLV, dw) \ (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dw) #define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw) \ (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, (WPARAM)dwMask, (LPARAM)dw) #define ListView_SetHotCursor(hwndLV, hcur) \ (HCURSOR)SNDMSG((hwndLV), LVM_SETHOTCURSOR, 0, (LPARAM)hcur) #define ListView_SetHotItem(hwndLV, i) \ (int)SNDMSG((hwndLV), LVM_SETHOTITEM, (WPARAM)i, 0) #define ListView_SetIconSpacing(hwndLV, cx, cy) \ (DWORD)SNDMSG((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy)) #define ListView_SetToolTips(hwndLV, hwndNewHwnd) \ (HWND)SNDMSG((hwndLV), LVM_SETTOOLTIPS, (WPARAM)hwndNewHwnd, 0) #define ListView_SubItemHitTest(hwndLV, plvhti) \ (int)SNDMSG((hwndLV), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti)) #define ListView_GetSelectionMark(hwndLV) \ (int)SNDMSG((hwndLV), LVM_GETSELECTIONMARK, 0, 0) #define ListView_SetSelectionMark(hwndLV, iItem) \ (int)SNDMSG((hwndLV), LVM_SETSELECTIONMARK, 0, (LPARAM)(iItem)) #define ListView_GetViewRect(hwndLV, prc) \ (BOOL)SNDMSG((hwndLV),LVM_GETVIEWRECT,0,(LPARAM)(LPRECT)(prc)) #define ListView_GetHeader(hwndLV) \ (HWND)SNDMSG((hwndLV), LVM_GETHEADER, 0, 0) #define ListView_SetSelectedColumn(hwnd, iCol) \ SNDMSG((hwnd), LVM_SETSELECTEDCOLUMN, (WPARAM)iCol, 0) #define ListView_SetTileWidth(hwnd, cpWidth) \ SNDMSG((hwnd), LVM_SETTILEWIDTH, (WPARAM)cpWidth, 0) #define ListView_SetView(hwnd, iView) \ (DWORD)SNDMSG((hwnd), LVM_SETVIEW, (WPARAM)(DWORD)iView, 0) #define ListView_GetView(hwnd) \ (DWORD)SNDMSG((hwnd), LVM_GETVIEW, 0, 0) #define ListView_InsertGroup(hwnd, index, pgrp) \ SNDMSG((hwnd), LVM_INSERTGROUP, (WPARAM)index, (LPARAM)pgrp) #define ListView_SetGroupHeaderImageList(hwnd, himl) \ SNDMSG((hwnd), LVM_SETIMAGELIST, (WPARAM)LVSIL_GROUPHEADER, (LPARAM)himl) #define ListView_GetGroupHeaderImageList(hwnd) \ SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)LVSIL_GROUPHEADER, 0) #define ListView_SetGroupInfo(hwnd, iGroupId, pgrp) \ SNDMSG((hwnd), LVM_SETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp) #define ListView_GetGroupInfo(hwnd, iGroupId, pgrp) \ SNDMSG((hwnd), LVM_GETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp) #define ListView_RemoveGroup(hwnd, iGroupId) \ SNDMSG((hwnd), LVM_REMOVEGROUP, (WPARAM)iGroupId, 0) #define ListView_MoveGroup(hwnd, iGroupId, toIndex) \ SNDMSG((hwnd), LVM_MOVEGROUP, (WPARAM)iGroupId, (LPARAM)toIndex) #define ListView_MoveItemToGroup(hwnd, idItemFrom, idGroupTo) \ SNDMSG((hwnd), LVM_MOVEITEMTOGROUP, (WPARAM)idItemFrom, (LPARAM)idGroupTo) #define ListView_SetGroupMetrics(hwnd, pGroupMetrics) \ SNDMSG((hwnd), LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics) #define ListView_GetGroupMetrics(hwnd, pGroupMetrics) \ SNDMSG((hwnd), LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics) #define ListView_EnableGroupView(hwnd, fEnable) \ SNDMSG((hwnd), LVM_ENABLEGROUPVIEW, (WPARAM)fEnable, 0) #define ListView_SortGroups(hwnd, _pfnGroupCompate, _plv) \ SNDMSG((hwnd), LVM_SORTGROUPS, (WPARAM)_pfnGroupCompate, (LPARAM)_plv) #define ListView_InsertGroupSorted(hwnd, structInsert) \ SNDMSG((hwnd), LVM_INSERTGROUPSORTED, (WPARAM)structInsert, 0) #define ListView_RemoveAllGroups(hwnd) \ SNDMSG((hwnd), LVM_REMOVEALLGROUPS, 0, 0) #define ListView_HasGroup(hwnd, dwGroupId) \ SNDMSG((hwnd), LVM_HASGROUP, dwGroupId, 0) #define ListView_SetTileViewInfo(hwnd, ptvi) \ SNDMSG((hwnd), LVM_SETTILEVIEWINFO, 0, (LPARAM)ptvi) #define ListView_GetTileViewInfo(hwnd, ptvi) \ SNDMSG((hwnd), LVM_GETTILEVIEWINFO, 0, (LPARAM)ptvi) #define ListView_SetTileInfo(hwnd, pti) \ SNDMSG((hwnd), LVM_SETTILEINFO, 0, (LPARAM)pti) #define ListView_GetTileInfo(hwnd, pti) \ SNDMSG((hwnd), LVM_GETTILEINFO, 0, (LPARAM)pti) #define ListView_SetInsertMark(hwnd, lvim) \ (BOOL)SNDMSG((hwnd), LVM_SETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim)) #define ListView_GetInsertMark(hwnd, lvim) \ (BOOL)SNDMSG((hwnd), LVM_GETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim)) #define ListView_InsertMarkHitTest(hwnd, point, lvim) \ (int)SNDMSG((hwnd), LVM_INSERTMARKHITTEST, (WPARAM)(LPPOINT)(point), (LPARAM)(LPLVINSERTMARK)(lvim)) #define ListView_GetInsertMarkRect(hwnd, rc) \ (int)SNDMSG((hwnd), LVM_GETINSERTMARKRECT, (WPARAM)0, (LPARAM)(LPRECT)(rc)) #define ListView_SetInsertMarkColor(hwnd, color) \ (COLORREF)SNDMSG((hwnd), LVM_SETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color)) #define ListView_GetInsertMarkColor(hwnd) \ (COLORREF)SNDMSG((hwnd), LVM_GETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)0) #define ListView_SetInfoTip(hwndLV, plvInfoTip)\ (BOOL)SNDMSG((hwndLV), LVM_SETINFOTIP, (WPARAM)0, (LPARAM)plvInfoTip) #define ListView_GetSelectedColumn(hwnd) \ (UINT)SNDMSG((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0) #define ListView_IsGroupViewEnabled(hwnd) \ (BOOL)SNDMSG((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0) #define ListView_GetOutlineColor(hwnd) \ (COLORREF)SNDMSG((hwnd), LVM_GETOUTLINECOLOR, 0, 0) #define ListView_SetOutlineColor(hwnd, color) \ (COLORREF)SNDMSG((hwnd), LVM_SETOUTLINECOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color)) #define ListView_CancelEditLabel(hwnd) \ (VOID)SNDMSG((hwnd), LVM_CANCELEDITLABEL, (WPARAM)0, (LPARAM)0) #define ListView_MapIndexToID(hwnd, index) \ (UINT)SNDMSG((hwnd), LVM_MAPINDEXTOID, (WPARAM)index, (LPARAM)0) #define ListView_MapIDToIndex(hwnd, id) \ (UINT)SNDMSG((hwnd), LVM_MAPIDTOINDEX, (WPARAM)id, (LPARAM)0) #define ListView_SetUnicodeFormat(hwnd, fUnicode) \ (BOOL)SNDMSG((hwnd), LVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) #define ListView_GetUnicodeFormat(hwnd) \ (BOOL)SNDMSG((hwnd), LVM_GETUNICODEFORMAT, 0, 0) /* Tab Control */ #define WC_TABCONTROLA "SysTabControl32" #if defined(__GNUC__) # define WC_TABCONTROLW (const WCHAR []){ 'S','y','s', \ 'T','a','b','C','o','n','t','r','o','l','3','2',0 } #elif defined(_MSC_VER) # define WC_TABCONTROLW L"SysTabControl32" #else static const WCHAR WC_TABCONTROLW[] = { 'S','y','s', 'T','a','b','C','o','n','t','r','o','l','3','2',0 }; #endif #define WC_TABCONTROL WINELIB_NAME_AW(WC_TABCONTROL) /* tab control styles */ #define TCS_EX_FLATSEPARATORS 0x00000001 /* to be used with */ #define TCS_EX_REGISTERDROP 0x00000002 /* TCM_SETEXTENDEDSTYLE */ #define TCM_FIRST 0x1300 #define TCM_GETIMAGELIST (TCM_FIRST + 2) #define TCM_SETIMAGELIST (TCM_FIRST + 3) #define TCM_GETITEMCOUNT (TCM_FIRST + 4) #define TCM_GETITEM WINELIB_NAME_AW(TCM_GETITEM) #define TCM_GETITEMA (TCM_FIRST + 5) #define TCM_GETITEMW (TCM_FIRST + 60) #define TCM_SETITEMA (TCM_FIRST + 6) #define TCM_SETITEMW (TCM_FIRST + 61) #define TCM_SETITEM WINELIB_NAME_AW(TCM_SETITEM) #define TCM_INSERTITEMA (TCM_FIRST + 7) #define TCM_INSERTITEMW (TCM_FIRST + 62) #define TCM_INSERTITEM WINELIB_NAME_AW(TCM_INSERTITEM) #define TCM_DELETEITEM (TCM_FIRST + 8) #define TCM_DELETEALLITEMS (TCM_FIRST + 9) #define TCM_GETITEMRECT (TCM_FIRST + 10) #define TCM_GETCURSEL (TCM_FIRST + 11) #define TCM_SETCURSEL (TCM_FIRST + 12) #define TCM_HITTEST (TCM_FIRST + 13) #define TCM_SETITEMEXTRA (TCM_FIRST + 14) #define TCM_ADJUSTRECT (TCM_FIRST + 40) #define TCM_SETITEMSIZE (TCM_FIRST + 41) #define TCM_REMOVEIMAGE (TCM_FIRST + 42) #define TCM_SETPADDING (TCM_FIRST + 43) #define TCM_GETROWCOUNT (TCM_FIRST + 44) #define TCM_GETTOOLTIPS (TCM_FIRST + 45) #define TCM_SETTOOLTIPS (TCM_FIRST + 46) #define TCM_GETCURFOCUS (TCM_FIRST + 47) #define TCM_SETCURFOCUS (TCM_FIRST + 48) #define TCM_SETMINTABWIDTH (TCM_FIRST + 49) #define TCM_DESELECTALL (TCM_FIRST + 50) #define TCM_HIGHLIGHTITEM (TCM_FIRST + 51) #define TCM_SETEXTENDEDSTYLE (TCM_FIRST + 52) #define TCM_GETEXTENDEDSTYLE (TCM_FIRST + 53) #define TCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define TCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define TCIF_TEXT 0x0001 #define TCIF_IMAGE 0x0002 #define TCIF_RTLREADING 0x0004 #define TCIF_PARAM 0x0008 #define TCIF_STATE 0x0010 #define TCIS_BUTTONPRESSED 0x0001 #define TCIS_HIGHLIGHTED 0x0002 /* TabCtrl Macros */ #define TabCtrl_GetImageList(hwnd) \ (HIMAGELIST)SNDMSG((hwnd), TCM_GETIMAGELIST, 0, 0) #define TabCtrl_SetImageList(hwnd, himl) \ (HIMAGELIST)SNDMSG((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl)) #define TabCtrl_GetItemCount(hwnd) \ (int)SNDMSG((hwnd), TCM_GETITEMCOUNT, 0, 0) #define TabCtrl_GetItemA(hwnd, iItem, pitem) \ (BOOL)SNDMSGA((hwnd), TCM_GETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem)) #define TabCtrl_GetItemW(hwnd, iItem, pitem) \ (BOOL)SNDMSGW((hwnd), TCM_GETITEMW, (WPARAM)(int)iItem, (LPARAM)(TCITEMW *)(pitem)) #define TabCtrl_GetItem WINELIB_NAME_AW(TabCtrl_GetItem) #define TabCtrl_SetItemA(hwnd, iItem, pitem) \ (BOOL)SNDMSGA((hwnd), TCM_SETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem)) #define TabCtrl_SetItemW(hwnd, iItem, pitem) \ (BOOL)SNDMSGW((hwnd), TCM_SETITEMW, (WPARAM)(int)iItem, (LPARAM)(TCITEMW *)(pitem)) #define TabCtrl_SetItem WINELIB_NAME_AW(TabCtrl_SetItem) #define TabCtrl_InsertItemA(hwnd, iItem, pitem) \ (int)SNDMSGA((hwnd), TCM_INSERTITEMA, (WPARAM)(int)iItem, (LPARAM)(const TCITEMA *)(pitem)) #define TabCtrl_InsertItemW(hwnd, iItem, pitem) \ (int)SNDMSGW((hwnd), TCM_INSERTITEMW, (WPARAM)(int)iItem, (LPARAM)(const TCITEMW *)(pitem)) #define TabCtrl_InsertItem WINELIB_NAME_AW(TabCtrl_InsertItem) #define TabCtrl_DeleteItem(hwnd, i) \ (BOOL)SNDMSG((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0) #define TabCtrl_DeleteAllItems(hwnd) \ (BOOL)SNDMSG((hwnd), TCM_DELETEALLITEMS, 0, 0) #define TabCtrl_GetItemRect(hwnd, i, prc) \ (BOOL)SNDMSG((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc)) #define TabCtrl_GetCurSel(hwnd) \ (int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0) #define TabCtrl_SetCurSel(hwnd, i) \ (int)SNDMSG((hwnd), TCM_SETCURSEL, (WPARAM)i, 0) #define TabCtrl_HitTest(hwndTC, pinfo) \ (int)SNDMSG((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo)) #define TabCtrl_SetItemExtra(hwndTC, cb) \ (BOOL)SNDMSG((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0) #define TabCtrl_AdjustRect(hwnd, bLarger, prc) \ (int)SNDMSG(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)bLarger, (LPARAM)(RECT *)prc) #define TabCtrl_SetItemSize(hwnd, x, y) \ (DWORD)SNDMSG((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y)) #define TabCtrl_RemoveImage(hwnd, i) \ (void)SNDMSG((hwnd), TCM_REMOVEIMAGE, i, 0) #define TabCtrl_SetPadding(hwnd, cx, cy) \ (void)SNDMSG((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy)) #define TabCtrl_GetRowCount(hwnd) \ (int)SNDMSG((hwnd), TCM_GETROWCOUNT, 0, 0) #define TabCtrl_GetToolTips(hwnd) \ (HWND)SNDMSG((hwnd), TCM_GETTOOLTIPS, 0, 0) #define TabCtrl_SetToolTips(hwnd, hwndTT) \ (void)SNDMSG((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0) #define TabCtrl_GetCurFocus(hwnd) \ (int)SNDMSG((hwnd), TCM_GETCURFOCUS, 0, 0) #define TabCtrl_SetCurFocus(hwnd, i) \ SNDMSG((hwnd),TCM_SETCURFOCUS, i, 0) #define TabCtrl_SetMinTabWidth(hwnd, x) \ (int)SNDMSG((hwnd), TCM_SETMINTABWIDTH, 0, x) #define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\ (void)SNDMSG((hwnd), TCM_DESELECTALL, fExcludeFocus, 0) #define TabCtrl_GetUnicodeFormat(hwnd) \ (BOOL)SNDMSG((hwnd), TCM_GETUNICODEFORMAT, 0, 0) #define TabCtrl_SetUnicodeFormat(hwnd, fUnicode) \ (BOOL)SNDMSG((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)fUnicode, 0) #define TabCtrl_GetExtendedStyle(hwnd) \ (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0) #define TabCtrl_SetExtendedStyle(hwnd, dwExStyle) \ (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle) #define TabCtrl_HighlightItem(hwnd, i, fHighlight) \ (BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)i, (LPARAM)MAKELONG(fHighlight, 0)) /* constants for TCHITTESTINFO */ #define TCHT_NOWHERE 0x01 #define TCHT_ONITEMICON 0x02 #define TCHT_ONITEMLABEL 0x04 #define TCHT_ONITEM (TCHT_ONITEMICON | TCHT_ONITEMLABEL) typedef struct tagTCITEMHEADERA { UINT mask; UINT lpReserved1; UINT lpReserved2; LPSTR pszText; int cchTextMax; int iImage; } TCITEMHEADERA, *LPTCITEMHEADERA; typedef struct tagTCITEMHEADERW { UINT mask; UINT lpReserved1; UINT lpReserved2; LPWSTR pszText; int cchTextMax; int iImage; } TCITEMHEADERW, *LPTCITEMHEADERW; #define TCITEMHEADER WINELIB_NAME_AW(TCITEMHEADER) #define LPTCITEMHEADER WINELIB_NAME_AW(LPTCITEMHEADER) #define TC_ITEMHEADER WINELIB_NAME_AW(TCITEMHEADER) #define LPTC_ITEMHEADER WINELIB_NAME_AW(LPTCITEMHEADER) typedef struct tagTCITEMA { UINT mask; UINT dwState; UINT dwStateMask; LPSTR pszText; INT cchTextMax; INT iImage; LPARAM lParam; } TCITEMA, *LPTCITEMA; typedef struct tagTCITEMW { UINT mask; DWORD dwState; DWORD dwStateMask; LPWSTR pszText; INT cchTextMax; INT iImage; LPARAM lParam; } TCITEMW, *LPTCITEMW; #define TCITEM WINELIB_NAME_AW(TCITEM) #define LPTCITEM WINELIB_NAME_AW(LPTCITEM) #define TC_ITEM WINELIB_NAME_AW(TCITEM) #define LPTC_ITEM WINELIB_NAME_AW(LPTCITEM) #define TCN_FIRST (0U-550U) #define TCN_LAST (0U-580U) #define TCN_KEYDOWN (TCN_FIRST - 0) #define TCN_SELCHANGE (TCN_FIRST - 1) #define TCN_SELCHANGING (TCN_FIRST - 2) #define TCN_GETOBJECT (TCN_FIRST - 3) #define TCN_FOCUSCHANGE (TCN_FIRST - 4) #include typedef struct tagTCKEYDOWN { NMHDR hdr; WORD wVKey; UINT flags; } NMTCKEYDOWN; #include #define TC_KEYDOWN NMTCKEYDOWN /* ComboBoxEx control */ #define WC_COMBOBOXEXA "ComboBoxEx32" #if defined(__GNUC__) # define WC_COMBOBOXEXW (const WCHAR []){ 'C','o','m','b','o', \ 'B','o','x','E','x','3','2',0 } #elif defined(_MSC_VER) # define WC_COMBOBOXEXW L"ComboBoxEx32" #else static const WCHAR WC_COMBOBOXEXW[] = { 'C','o','m','b','o', 'B','o','x','E','x','3','2',0 }; #endif #define WC_COMBOBOXEX WINELIB_NAME_AW(WC_COMBOBOXEX) #define CBEIF_TEXT 0x00000001 #define CBEIF_IMAGE 0x00000002 #define CBEIF_SELECTEDIMAGE 0x00000004 #define CBEIF_OVERLAY 0x00000008 #define CBEIF_INDENT 0x00000010 #define CBEIF_LPARAM 0x00000020 #define CBEIF_DI_SETITEM 0x10000000 #define CBEM_INSERTITEMA (WM_USER+1) #define CBEM_INSERTITEMW (WM_USER+11) #define CBEM_INSERTITEM WINELIB_NAME_AW(CBEM_INSERTITEM) #define CBEM_SETIMAGELIST (WM_USER+2) #define CBEM_GETIMAGELIST (WM_USER+3) #define CBEM_GETITEMA (WM_USER+4) #define CBEM_GETITEMW (WM_USER+13) #define CBEM_GETITEM WINELIB_NAME_AW(CBEM_GETITEM) #define CBEM_SETITEMA (WM_USER+5) #define CBEM_SETITEMW (WM_USER+12) #define CBEM_SETITEM WINELIB_NAME_AW(CBEM_SETITEM) #define CBEM_DELETEITEM CB_DELETESTRING #define CBEM_GETCOMBOCONTROL (WM_USER+6) #define CBEM_GETEDITCONTROL (WM_USER+7) #define CBEM_SETEXSTYLE (WM_USER+8) #define CBEM_GETEXSTYLE (WM_USER+9) #define CBEM_GETEXTENDEDSTYLE (WM_USER+9) #define CBEM_SETEXTENDEDSTYLE (WM_USER+14) #define CBEM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT #define CBEM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define CBEM_HASEDITCHANGED (WM_USER+10) #define CBEM_SETWINDOWTHEME CCM_SETWINDOWTHEME #define CBEIF_TEXT 0x00000001 #define CBEIF_IMAGE 0x00000002 #define CBEIF_SELECTEDIMAGE 0x00000004 #define CBEIF_OVERLAY 0x00000008 #define CBEIF_INDENT 0x00000010 #define CBEIF_LPARAM 0x00000020 #define CBEIF_DI_SETITEM 0x10000000 #define CBEN_FIRST (0U-800U) #define CBEN_LAST (0U-830U) #define CBEN_GETDISPINFOA (CBEN_FIRST - 0) #define CBEN_GETDISPINFOW (CBEN_FIRST - 7) #define CBEN_GETDISPINFO WINELIB_NAME_AW(CBEN_GETDISPINFO) #define CBEN_INSERTITEM (CBEN_FIRST - 1) #define CBEN_DELETEITEM (CBEN_FIRST - 2) #define CBEN_BEGINEDIT (CBEN_FIRST - 4) #define CBEN_ENDEDITA (CBEN_FIRST - 5) #define CBEN_ENDEDITW (CBEN_FIRST - 6) #define CBEN_ENDEDIT WINELIB_NAME_AW(CBEN_ENDEDIT) #define CBEN_DRAGBEGINA (CBEN_FIRST - 8) #define CBEN_DRAGBEGINW (CBEN_FIRST - 9) #define CBEN_DRAGBEGIN WINELIB_NAME_AW(CBEN_DRAGBEGIN) #define CBES_EX_NOEDITIMAGE 0x00000001 #define CBES_EX_NOEDITIMAGEINDENT 0x00000002 #define CBES_EX_PATHWORDBREAKPROC 0x00000004 #define CBES_EX_NOSIZELIMIT 0x00000008 #define CBES_EX_CASESENSITIVE 0x00000010 typedef struct tagCOMBOBOXEXITEMA { UINT mask; INT_PTR iItem; LPSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int iOverlay; int iIndent; LPARAM lParam; } COMBOBOXEXITEMA, *PCOMBOBOXEXITEMA; typedef COMBOBOXEXITEMA const *PCCOMBOEXITEMA; /* Yes, there's a BOX missing */ typedef struct tagCOMBOBOXEXITEMW { UINT mask; INT_PTR iItem; LPWSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int iOverlay; int iIndent; LPARAM lParam; } COMBOBOXEXITEMW, *PCOMBOBOXEXITEMW; typedef COMBOBOXEXITEMW const *PCCOMBOEXITEMW; /* Yes, there's a BOX missing */ #define COMBOBOXEXITEM WINELIB_NAME_AW(COMBOBOXEXITEM) #define PCOMBOBOXEXITEM WINELIB_NAME_AW(PCOMBOBOXEXITEM) #define PCCOMBOBOXEXITEM WINELIB_NAME_AW(PCCOMBOEXITEM) /* Yes, there's a BOX missing */ #define CBENF_KILLFOCUS 1 #define CBENF_RETURN 2 #define CBENF_ESCAPE 3 #define CBENF_DROPDOWN 4 #define CBEMAXSTRLEN 260 typedef struct tagNMCBEENDEDITW { NMHDR hdr; BOOL fChanged; int iNewSelection; WCHAR szText[CBEMAXSTRLEN]; int iWhy; } NMCBEENDEDITW, *LPNMCBEENDEDITW, *PNMCBEENDEDITW; typedef struct tagNMCBEENDEDITA { NMHDR hdr; BOOL fChanged; int iNewSelection; char szText[CBEMAXSTRLEN]; int iWhy; } NMCBEENDEDITA, *LPNMCBEENDEDITA, *PNMCBEENDEDITA; #define NMCBEENDEDIT WINELIB_NAME_AW(NMCBEENDEDIT) #define LPNMCBEENDEDIT WINELIB_NAME_AW(LPNMCBEENDEDIT) #define PNMCBEENDEDIT WINELIB_NAME_AW(PNMCBEENDEDIT) typedef struct { NMHDR hdr; COMBOBOXEXITEMA ceItem; } NMCOMBOBOXEXA, *PNMCOMBOBOXEXA; typedef struct { NMHDR hdr; COMBOBOXEXITEMW ceItem; } NMCOMBOBOXEXW, *PNMCOMBOBOXEXW; #define NMCOMBOBOXEX WINELIB_NAME_AW(NMCOMBOBOXEX) #define PNMCOMBOBOXEX WINELIB_NAME_AW(PNMCOMBOBOXEX) typedef struct { NMHDR hdr; int iItemid; char szText[CBEMAXSTRLEN]; } NMCBEDRAGBEGINA, *PNMCBEDRAGBEGINA, *LPNMCBEDRAGBEGINA; typedef struct { NMHDR hdr; int iItemid; WCHAR szText[CBEMAXSTRLEN]; } NMCBEDRAGBEGINW, *PNMCBEDRAGBEGINW, *LPNMCBEDRAGBEGINW; #define NMCBEDRAGBEGIN WINELIB_NAME_AW(NMCBEDRAGBEGIN) #define PNMCBEDRAGBEGIN WINELIB_NAME_AW(PNMCBEDRAGBEGIN) #define LPNMCBEDRAGBEGIN WINELIB_NAME_AW(LPNMCBEDRAGBEGIN) /* Hotkey control */ #define HOTKEY_CLASSA "msctls_hotkey32" #if defined(__GNUC__) # define HOTKEY_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \ 'h','o','t','k','e','y','3','2',0 } #elif defined(_MSC_VER) # define HOTKEY_CLASSW L"msctls_hotkey32" #else static const WCHAR HOTKEY_CLASSW[] = { 'm','s','c','t','l','s','_', 'h','o','t','k','e','y','3','2',0 }; #endif #define HOTKEY_CLASS WINELIB_NAME_AW(HOTKEY_CLASS) #define HOTKEYF_SHIFT 0x01 #define HOTKEYF_CONTROL 0x02 #define HOTKEYF_ALT 0x04 #define HOTKEYF_EXT 0x08 #define HKCOMB_NONE 0x0001 #define HKCOMB_S 0x0002 #define HKCOMB_C 0x0004 #define HKCOMB_A 0x0008 #define HKCOMB_SC 0x0010 #define HKCOMB_SA 0x0020 #define HKCOMB_CA 0x0040 #define HKCOMB_SCA 0x0080 #define HKM_SETHOTKEY (WM_USER+1) #define HKM_GETHOTKEY (WM_USER+2) #define HKM_SETRULES (WM_USER+3) /* animate control */ #define ANIMATE_CLASSA "SysAnimate32" #if defined(__GNUC__) # define ANIMATE_CLASSW (const WCHAR []){ 'S','y','s', \ 'A','n','i','m','a','t','e','3','2',0 } #elif defined(_MSC_VER) # define ANIMATE_CLASSW L"SysAnimate32" #else static const WCHAR ANIMATE_CLASSW[] = { 'S','y','s', 'A','n','i','m','a','t','e','3','2',0 }; #endif #define ANIMATE_CLASS WINELIB_NAME_AW(ANIMATE_CLASS) #define ACM_OPENA (WM_USER+100) #define ACM_OPENW (WM_USER+103) #define ACM_OPEN WINELIB_NAME_AW(ACM_OPEN) #define ACM_PLAY (WM_USER+101) #define ACM_STOP (WM_USER+102) #define ACN_START 1 #define ACN_STOP 2 #define Animate_CreateA(hwndP,id,dwStyle,hInstance) \ CreateWindowA(ANIMATE_CLASSA,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL) #define Animate_CreateW(hwndP,id,dwStyle,hInstance) \ CreateWindowW(ANIMATE_CLASSW,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL) #define Animate_Create WINELIB_NAME_AW(Animate_Create) #define Animate_OpenA(hwnd,szName) \ (BOOL)SNDMSGA(hwnd,ACM_OPENA,0,(LPARAM)(LPSTR)(szName)) #define Animate_OpenW(hwnd,szName) \ (BOOL)SNDMSGW(hwnd,ACM_OPENW,0,(LPARAM)(LPWSTR)(szName)) #define Animate_Open WINELIB_NAME_AW(Animate_Open) #define Animate_OpenExA(hwnd,hInst,szName) \ (BOOL)SNDMSGA(hwnd,ACM_OPENA,(WPARAM)hInst,(LPARAM)(LPSTR)(szName)) #define Animate_OpenExW(hwnd,hInst,szName) \ (BOOL)SNDMSGW(hwnd,ACM_OPENW,(WPARAM)hInst,(LPARAM)(LPWSTR)(szName)) #define Animate_OpenEx WINELIB_NAME_AW(Animate_OpenEx) #define Animate_Play(hwnd,from,to,rep) \ (BOOL)SNDMSG(hwnd,ACM_PLAY,(WPARAM)(UINT)(rep),(LPARAM)MAKELONG(from,to)) #define Animate_Stop(hwnd) \ (BOOL)SNDMSG(hwnd,ACM_STOP,0,0) #define Animate_Close(hwnd) \ (BOOL)SNDMSG(hwnd,ACM_OPENA,0,0) #define Animate_Seek(hwnd,frame) \ (BOOL)SNDMSG(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame)) /************************************************************************** * IP Address control */ #define WC_IPADDRESSA "SysIPAddress32" #if defined(__GNUC__) # define WC_IPADDRESSW (const WCHAR []){ 'S','y','s', \ 'I','P','A','d','d','r','e','s','s','3','2',0 } #elif defined(_MSC_VER) # define WC_IPADDRESSW L"SysIPAddress32" #else static const WCHAR WC_IPADDRESSW[] = { 'S','y','s', 'I','P','A','d','d','r','e','s','s','3','2',0 }; #endif #define WC_IPADDRESS WINELIB_NAME_AW(WC_IPADDRESS) #define IPM_CLEARADDRESS (WM_USER+100) #define IPM_SETADDRESS (WM_USER+101) #define IPM_GETADDRESS (WM_USER+102) #define IPM_SETRANGE (WM_USER+103) #define IPM_SETFOCUS (WM_USER+104) #define IPM_ISBLANK (WM_USER+105) #define IPN_FIRST (0U-860U) #define IPN_LAST (0U-879U) #define IPN_FIELDCHANGED (IPN_FIRST-0) typedef struct tagNMIPADDRESS { NMHDR hdr; INT iField; INT iValue; } NMIPADDRESS, *LPNMIPADDRESS; #define MAKEIPRANGE(low,high) \ ((LPARAM)(WORD)(((BYTE)(high)<<8)+(BYTE)(low))) #define MAKEIPADDRESS(b1,b2,b3,b4) \ ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4)))) #define FIRST_IPADDRESS(x) (((x)>>24)&0xff) #define SECOND_IPADDRESS(x) (((x)>>16)&0xff) #define THIRD_IPADDRESS(x) (((x)>>8)&0xff) #define FOURTH_IPADDRESS(x) ((x)&0xff) /************************************************************************** * Native Font control */ #define WC_NATIVEFONTCTLA "NativeFontCtl" #if defined(__GNUC__) # define WC_NATIVEFONTCTLW (const WCHAR []){ 'N','a','t','i','v','e', \ 'F','o','n','t','C','t','l',0 } #elif defined(_MSC_VER) # define WC_NATIVEFONTCTLW L"NativeFontCtl" #else static const WCHAR WC_NATIVEFONTCTLW[] = { 'N','a','t','i','v','e', 'F','o','n','t','C','t','l',0 }; #endif #define WC_NATIVEFONTCTL WINELIB_NAME_AW(WC_NATIVEFONTCTL) /************************************************************************** * Month calendar control * */ #define MONTHCAL_CLASSA "SysMonthCal32" #if defined(__GNUC__) # define MONTHCAL_CLASSW (const WCHAR []){ 'S','y','s', \ 'M','o','n','t','h','C','a','l','3','2',0 } #elif defined(_MSC_VER) # define MONTHCAL_CLASSW L"SysMonthCal32" #else static const WCHAR MONTHCAL_CLASSW[] = { 'S','y','s', 'M','o','n','t','h','C','a','l','3','2',0 }; #endif #define MONTHCAL_CLASS WINELIB_NAME_AW(MONTHCAL_CLASS) #define MCM_FIRST 0x1000 #define MCN_FIRST (0U-750U) #define MCN_LAST (0U-759U) #define MCM_GETCURSEL (MCM_FIRST + 1) #define MCM_SETCURSEL (MCM_FIRST + 2) #define MCM_GETMAXSELCOUNT (MCM_FIRST + 3) #define MCM_SETMAXSELCOUNT (MCM_FIRST + 4) #define MCM_GETSELRANGE (MCM_FIRST + 5) #define MCM_SETSELRANGE (MCM_FIRST + 6) #define MCM_GETMONTHRANGE (MCM_FIRST + 7) #define MCM_SETDAYSTATE (MCM_FIRST + 8) #define MCM_GETMINREQRECT (MCM_FIRST + 9) #define MCM_SETCOLOR (MCM_FIRST + 10) #define MCM_GETCOLOR (MCM_FIRST + 11) #define MCM_SETTODAY (MCM_FIRST + 12) #define MCM_GETTODAY (MCM_FIRST + 13) #define MCM_HITTEST (MCM_FIRST + 14) #define MCM_SETFIRSTDAYOFWEEK (MCM_FIRST + 15) #define MCM_GETFIRSTDAYOFWEEK (MCM_FIRST + 16) #define MCM_GETRANGE (MCM_FIRST + 17) #define MCM_SETRANGE (MCM_FIRST + 18) #define MCM_GETMONTHDELTA (MCM_FIRST + 19) #define MCM_SETMONTHDELTA (MCM_FIRST + 20) #define MCM_GETMAXTODAYWIDTH (MCM_FIRST + 21) #define MCM_GETCURRENTVIEW (MCM_FIRST + 22) #define MCM_GETCALENDARCOUNT (MCM_FIRST + 23) #define MCM_GETCALENDARGRIDINFO (MCM_FIRST + 24) #define MCM_GETCALID (MCM_FIRST + 27) #define MCM_SETCALID (MCM_FIRST + 28) #define MCM_SIZERECTTOMIN (MCM_FIRST + 29) #define MCM_SETCALENDARBORDER (MCM_FIRST + 30) #define MCM_GETCALENDARBORDER (MCM_FIRST + 31) #define MCM_SETCURRENTVIEW (MCM_FIRST + 32) #define MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define MCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT /* Notifications */ #define MCN_VIEWCHANGE MCN_FIRST #define MCN_SELCHANGE (MCN_FIRST + 1) #define MCN_GETDAYSTATE (MCN_FIRST + 3) #define MCN_SELECT (MCN_FIRST + 4) #define MCSC_BACKGROUND 0 #define MCSC_TEXT 1 #define MCSC_TITLEBK 2 #define MCSC_TITLETEXT 3 #define MCSC_MONTHBK 4 #define MCSC_TRAILINGTEXT 5 #define MCHT_TITLE 0x00010000 #define MCHT_CALENDAR 0x00020000 #define MCHT_TODAYLINK 0x00030000 #define MCHT_CALENDARCONTROL 0x00100000 #define MCHT_NEXT 0x01000000 #define MCHT_PREV 0x02000000 #define MCHT_NOWHERE 0x00000000 #define MCHT_TITLEBK (MCHT_TITLE) #define MCHT_TITLEMONTH (MCHT_TITLE | 0x0001) #define MCHT_TITLEYEAR (MCHT_TITLE | 0x0002) #define MCHT_TITLEBTNNEXT (MCHT_TITLE | MCHT_NEXT | 0x0003) #define MCHT_TITLEBTNPREV (MCHT_TITLE | MCHT_PREV | 0x0003) #define MCHT_CALENDARBK (MCHT_CALENDAR) #define MCHT_CALENDARDATE (MCHT_CALENDAR | 0x0001) #define MCHT_CALENDARDATENEXT (MCHT_CALENDARDATE | MCHT_NEXT) #define MCHT_CALENDARDATEPREV (MCHT_CALENDARDATE | MCHT_PREV) #define MCHT_CALENDARDAY (MCHT_CALENDAR | 0x0002) #define MCHT_CALENDARWEEKNUM (MCHT_CALENDAR | 0x0003) #define MCHT_CALENDARDATEMIN (MCHT_CALENDAR | 0x0004) #define MCHT_CALENDARDATEMAX (MCHT_CALENDAR | 0x0005) #define GMR_VISIBLE 0 #define GMR_DAYSTATE 1 /* Month calendar's structures */ typedef struct { UINT cbSize; POINT pt; UINT uHit; SYSTEMTIME st; /* Vista */ RECT rc; INT iOffset; INT iRow; INT iCol; } MCHITTESTINFO, *PMCHITTESTINFO; #define MCHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(MCHITTESTINFO, st) typedef struct tagNMSELCHANGE { NMHDR nmhdr; SYSTEMTIME stSelStart; SYSTEMTIME stSelEnd; } NMSELCHANGE, *LPNMSELCHANGE; typedef NMSELCHANGE NMSELECT, *LPNMSELECT; typedef DWORD MONTHDAYSTATE, *LPMONTHDAYSTATE; typedef struct tagNMDAYSTATE { NMHDR nmhdr; SYSTEMTIME stStart; int cDayState; LPMONTHDAYSTATE prgDayState; } NMDAYSTATE, *LPNMDAYSTATE; /* macros */ #define MonthCal_GetCurSel(hmc, pst) \ (BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst)) #define MonthCal_SetCurSel(hmc, pst) \ (BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst)) #define MonthCal_GetMaxSelCount(hmc) \ (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, 0) #define MonthCal_SetMaxSelCount(hmc, n) \ (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), 0) #define MonthCal_GetSelRange(hmc, rgst) \ SNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM) (rgst)) #define MonthCal_SetSelRange(hmc, rgst) \ SNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM) (rgst)) #define MonthCal_GetMonthRange(hmc, gmr, rgst) \ (DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst)) #define MonthCal_SetDayState(hmc, cbds, rgds) \ SNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds)) #define MonthCal_GetMinReqRect(hmc, prc) \ SNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc)) #define MonthCal_SetColor(hmc, iColor, clr)\ SNDMSG(hmc, MCM_SETCOLOR, iColor, clr) #define MonthCal_GetColor(hmc, iColor) \ SNDMSG(hmc, MCM_SETCOLOR, iColor, 0) #define MonthCal_GetToday(hmc, pst)\ (BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)pst) #define MonthCal_SetToday(hmc, pst)\ SNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)pst) #define MonthCal_HitTest(hmc, pinfo) \ SNDMSG(hmc, MCM_HITTEST, 0, (LPARAM)(PMCHITTESTINFO)pinfo) #define MonthCal_SetFirstDayOfWeek(hmc, iDay) \ SNDMSG(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay) #define MonthCal_GetFirstDayOfWeek(hmc) \ (DWORD)SNDMSG(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0) #define MonthCal_GetRange(hmc, rgst) \ (DWORD)SNDMSG(hmc, MCM_GETRANGE, 0, (LPARAM)(rgst)) #define MonthCal_SetRange(hmc, gd, rgst) \ (BOOL)SNDMSG(hmc, MCM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst)) #define MonthCal_GetMonthDelta(hmc) \ (int)SNDMSG(hmc, MCM_GETMONTHDELTA, 0, 0) #define MonthCal_SetMonthDelta(hmc, n) \ (int)SNDMSG(hmc, MCM_SETMONTHDELTA, n, 0) #define MonthCal_GetMaxTodayWidth(hmc) \ (DWORD)SNDMSG(hmc, MCM_GETMAXTODAYWIDTH, 0, 0) #define MonthCal_SetUnicodeFormat(hwnd, fUnicode) \ (BOOL)SNDMSG((hwnd), MCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) #define MonthCal_GetUnicodeFormat(hwnd) \ (BOOL)SNDMSG((hwnd), MCM_GETUNICODEFORMAT, 0, 0) /************************************************************************** * Date and time picker control */ #define DATETIMEPICK_CLASSA "SysDateTimePick32" #if defined(__GNUC__) # define DATETIMEPICK_CLASSW (const WCHAR []){ 'S','y','s', \ 'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 } #elif defined(_MSC_VER) # define DATETIMEPICK_CLASSW L"SysDateTimePick32" #else static const WCHAR DATETIMEPICK_CLASSW[] = { 'S','y','s', 'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 }; #endif #define DATETIMEPICK_CLASS WINELIB_NAME_AW(DATETIMEPICK_CLASS) #define DTM_FIRST 0x1000 #define DTN_FIRST (0U-760U) #define DTN_LAST (0U-799U) #define DTM_GETSYSTEMTIME (DTM_FIRST+1) #define DTM_SETSYSTEMTIME (DTM_FIRST+2) #define DTM_GETRANGE (DTM_FIRST+3) #define DTM_SETRANGE (DTM_FIRST+4) #define DTM_SETFORMATA (DTM_FIRST+5) #define DTM_SETFORMATW (DTM_FIRST + 50) #define DTM_SETFORMAT WINELIB_NAME_AW(DTM_SETFORMAT) #define DTM_SETMCCOLOR (DTM_FIRST+6) #define DTM_GETMCCOLOR (DTM_FIRST+7) #define DTM_GETMONTHCAL (DTM_FIRST+8) #define DTM_SETMCFONT (DTM_FIRST+9) #define DTM_GETMCFONT (DTM_FIRST+10) #define DTM_SETMCSTYLE (DTM_FIRST+11) #define DTM_GETMCSTYLE (DTM_FIRST+12) #define DTM_CLOSEMONTHCAL (DTM_FIRST+13) #define DTM_GETDATETIMEPICKERINFO (DTM_FIRST+14) #define DTM_GETIDEALSIZE (DTM_FIRST+15) /* Datetime Notifications */ #define DTN_DATETIMECHANGE (DTN_FIRST + 1) #define DTN_USERSTRINGA (DTN_FIRST + 2) #define DTN_WMKEYDOWNA (DTN_FIRST + 3) #define DTN_FORMATA (DTN_FIRST + 4) #define DTN_FORMATQUERYA (DTN_FIRST + 5) #define DTN_DROPDOWN (DTN_FIRST + 6) #define DTN_CLOSEUP (DTN_FIRST + 7) #define DTN_USERSTRINGW (DTN_FIRST + 15) #define DTN_WMKEYDOWNW (DTN_FIRST + 16) #define DTN_FORMATW (DTN_FIRST + 17) #define DTN_FORMATQUERYW (DTN_FIRST + 18) #define DTN_USERSTRING WINELIB_NAME_AW(DTN_USERSTRING) #define DTN_WMKEYDOWN WINELIB_NAME_AW(DTN_WMKEYDOWN) #define DTN_FORMAT WINELIB_NAME_AW(DTN_FORMAT) #define DTN_FORMATQUERY WINELIB_NAME_AW(DTN_FORMATQUERY) typedef struct tagNMDATETIMECHANGE { NMHDR nmhdr; DWORD dwFlags; SYSTEMTIME st; } NMDATETIMECHANGE, *LPNMDATETIMECHANGE; typedef struct tagNMDATETIMESTRINGA { NMHDR nmhdr; LPCSTR pszUserString; SYSTEMTIME st; DWORD dwFlags; } NMDATETIMESTRINGA, *LPNMDATETIMESTRINGA; typedef struct tagNMDATETIMESTRINGW { NMHDR nmhdr; LPCWSTR pszUserString; SYSTEMTIME st; DWORD dwFlags; } NMDATETIMESTRINGW, *LPNMDATETIMESTRINGW; DECL_WINELIB_TYPE_AW(NMDATETIMESTRING) DECL_WINELIB_TYPE_AW(LPNMDATETIMESTRING) typedef struct tagNMDATETIMEWMKEYDOWNA { NMHDR nmhdr; int nVirtKey; LPCSTR pszFormat; SYSTEMTIME st; } NMDATETIMEWMKEYDOWNA, *LPNMDATETIMEWMKEYDOWNA; typedef struct tagNMDATETIMEWMKEYDOWNW { NMHDR nmhdr; int nVirtKey; LPCWSTR pszFormat; SYSTEMTIME st; } NMDATETIMEWMKEYDOWNW, *LPNMDATETIMEWMKEYDOWNW; DECL_WINELIB_TYPE_AW(NMDATETIMEWMKEYDOWN) DECL_WINELIB_TYPE_AW(LPNMDATETIMEWMKEYDOWN) typedef struct tagNMDATETIMEFORMATA { NMHDR nmhdr; LPCSTR pszFormat; SYSTEMTIME st; LPCSTR pszDisplay; CHAR szDisplay[64]; } NMDATETIMEFORMATA, *LPNMDATETIMEFORMATA; typedef struct tagNMDATETIMEFORMATW { NMHDR nmhdr; LPCWSTR pszFormat; SYSTEMTIME st; LPCWSTR pszDisplay; WCHAR szDisplay[64]; } NMDATETIMEFORMATW, *LPNMDATETIMEFORMATW; DECL_WINELIB_TYPE_AW(NMDATETIMEFORMAT) DECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMAT) typedef struct tagNMDATETIMEFORMATQUERYA { NMHDR nmhdr; LPCSTR pszFormat; SIZE szMax; } NMDATETIMEFORMATQUERYA, *LPNMDATETIMEFORMATQUERYA; typedef struct tagNMDATETIMEFORMATQUERYW { NMHDR nmhdr; LPCWSTR pszFormat; SIZE szMax; } NMDATETIMEFORMATQUERYW, *LPNMDATETIMEFORMATQUERYW; DECL_WINELIB_TYPE_AW(NMDATETIMEFORMATQUERY) DECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMATQUERY) #define GDT_ERROR -1 #define GDT_VALID 0 #define GDT_NONE 1 #define GDTR_MIN 0x0001 #define GDTR_MAX 0x0002 #define DateTime_GetSystemtime(hdp, pst) \ (DWORD)SNDMSG (hdp, DTM_GETSYSTEMTIME , 0, (LPARAM)(pst)) #define DateTime_SetSystemtime(hdp, gd, pst) \ (BOOL)SNDMSG (hdp, DTM_SETSYSTEMTIME, (LPARAM)(gd), (LPARAM)(pst)) #define DateTime_GetRange(hdp, rgst) \ (DWORD)SNDMSG (hdp, DTM_GETRANGE, 0, (LPARAM)(rgst)) #define DateTime_SetRange(hdp, gd, rgst) \ (BOOL)SNDMSG (hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst)) #define DateTime_SetFormatA(hdp, sz) \ (BOOL)SNDMSGA (hdp, DTM_SETFORMATA, 0, (LPARAM)(sz)) #define DateTime_SetFormatW(hdp, sz) \ (BOOL)SNDMSGW (hdp, DTM_SETFORMATW, 0, (LPARAM)(sz)) #define DateTime_SetFormat WINELIB_NAME_AW(DateTime_SetFormat) #define DateTime_GetMonthCalColor(hdp, iColor) \ SNDMSG (hdp, DTM_GETMCCOLOR, iColor, 0) #define DateTime_SetMonthCalColor(hdp, iColor, clr) \ SNDMSG (hdp, DTM_SETMCCOLOR, iColor, clr) #define DateTime_GetMonthCal(hdp) \ (HWND) SNDMSG (hdp, DTM_GETMONTHCAL, 0, 0) #define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) \ SNDMSG (hdp, DTM_SETMCFONT, (WPARAM)hfont, (LPARAM)fRedraw) #define DateTime_GetMonthCalFont(hdp) \ SNDMSG (hdp, DTM_GETMCFONT, 0, 0) #define DateTime_GetIdealSize(hdp, sz) \ (BOOL) SNDMSG (hdp, DTM_GETIDEALSIZE, 0, (LPARAM)sz) #define DA_LAST (0x7fffffff) #define DPA_APPEND (0x7fffffff) #define DPA_ERR (-1) #define DSA_APPEND (0x7fffffff) #define DSA_ERR (-1) struct _DSA; typedef struct _DSA *HDSA; typedef INT (CALLBACK *PFNDSAENUMCALLBACK)(LPVOID, LPVOID); HDSA WINAPI DSA_Create(INT, INT); BOOL WINAPI DSA_Destroy(HDSA); void WINAPI DSA_DestroyCallback(HDSA, PFNDSAENUMCALLBACK, LPVOID); LPVOID WINAPI DSA_GetItemPtr(HDSA, INT); INT WINAPI DSA_InsertItem(HDSA, INT, LPVOID); #define DPAS_SORTED 0x0001 #define DPAS_INSERTBEFORE 0x0002 #define DPAS_INSERTAFTER 0x0004 struct _DPA; typedef struct _DPA *HDPA; #define DPA_GetPtrCount(hdpa) (*(INT*)(hdpa)) typedef INT (CALLBACK *PFNDPAENUMCALLBACK)(LPVOID, LPVOID); typedef INT (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM); typedef PVOID (CALLBACK *PFNDPAMERGE)(UINT,PVOID,PVOID,LPARAM); /* merge callback codes */ #define DPAMM_MERGE 1 #define DPAMM_DELETE 2 #define DPAMM_INSERT 3 /* merge options */ #define DPAM_SORTED 0x00000001 #define DPAM_NORMAL 0x00000002 #define DPAM_UNION 0x00000004 #define DPAM_INTERSECT 0x00000008 HDPA WINAPI DPA_Create(INT); BOOL WINAPI DPA_Destroy(HDPA); LPVOID WINAPI DPA_DeletePtr(HDPA, INT); BOOL WINAPI DPA_DeleteAllPtrs(HDPA); BOOL WINAPI DPA_SetPtr(HDPA, INT, LPVOID); LPVOID WINAPI DPA_GetPtr(HDPA, INT); INT WINAPI DPA_GetPtrIndex(HDPA, LPCVOID); ULONGLONG WINAPI DPA_GetSize(HDPA); BOOL WINAPI DPA_Grow(HDPA, INT); INT WINAPI DPA_InsertPtr(HDPA, INT, LPVOID); BOOL WINAPI DPA_Sort(HDPA, PFNDPACOMPARE, LPARAM); void WINAPI DPA_EnumCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID); void WINAPI DPA_DestroyCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID); INT WINAPI DPA_Search(HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT); BOOL WINAPI DPA_Merge(HDPA, HDPA, DWORD, PFNDPACOMPARE, PFNDPAMERGE, LPARAM); /* save/load from stream */ typedef struct _DPASTREAMINFO { INT iPos; /* item index */ LPVOID pvItem; } DPASTREAMINFO; struct IStream; typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, LPVOID); HRESULT WINAPI DPA_LoadStream(HDPA*, PFNDPASTREAM, struct IStream*, LPVOID); HRESULT WINAPI DPA_SaveStream(HDPA, PFNDPASTREAM, struct IStream*, LPVOID); BOOL WINAPI Str_SetPtrW (LPWSTR *, LPCWSTR); /************************************************************************** * SysLink control */ #if defined(__GNUC__) # define WC_LINK (const WCHAR []){ 'S','y','s','L','i','n','k',0 } #elif defined(_MSC_VER) # define WC_LINK L"SysLink" #else static const WCHAR WC_LINK[] = { 'S','y','s','L','i','n','k',0 }; #endif /* SysLink styles */ #define LWS_TRANSPARENT 0x0001 #define LWS_IGNORERETURN 0x0002 #define LWS_NOPREFIX 0x0004 #define LWS_USEVISUALSTYLE 0x0008 #define LWS_USECUSTOMTEXT 0x0010 #define LWS_RIGHT 0x0020 /* SysLink messages */ #define LM_HITTEST (WM_USER + 768) #define LM_GETIDEALHEIGHT (WM_USER + 769) #define LM_GETIDEALSIZE (LM_GETIDEALHEIGHT) #define LM_SETITEM (WM_USER + 770) #define LM_GETITEM (WM_USER + 771) /* SysLink links flags */ #define LIF_ITEMINDEX 1 #define LIF_STATE 2 #define LIF_ITEMID 4 #define LIF_URL 8 /* SysLink links states */ #define LIS_FOCUSED 0x0001 #define LIS_ENABLED 0x0002 #define LIS_VISITED 0x0004 #define LIS_HOTTRACK 0x0008 #define LIS_DEFAULTCOLORS 0x0010 /* SysLink misc. */ #define INVALID_LINK_INDEX (-1) #define MAX_LINKID_TEXT 48 #define L_MAX_URL_LENGTH 2084 /* SysLink structures */ typedef struct tagLITEM { UINT mask; int iLink; UINT state; UINT stateMask; WCHAR szID[MAX_LINKID_TEXT]; WCHAR szUrl[L_MAX_URL_LENGTH]; } LITEM, *PLITEM; typedef struct tagLHITTESTINFO { POINT pt; LITEM item; } LHITTESTINFO, *PLHITTESTINFO; typedef struct tagNMLINK { NMHDR hdr; LITEM item; } NMLINK, *PNMLINK; typedef struct tagNMLVLINK { NMHDR hdr; LITEM link; int iItem; int iSubItem; } NMLVLINK, *PNMLVLINK; /************************************************************************** * Static control */ #define WC_STATICA "Static" #if defined(__GNUC__) # define WC_STATICW (const WCHAR []){ 'S','t','a','t','i','c',0 } #elif defined(_MSC_VER) # define WC_STATICW L"Static" #else static const WCHAR WC_STATICW[] = { 'S','t','a','t','i','c',0 }; #endif #define WC_STATIC WINELIB_NAME_AW(WC_STATIC) /************************************************************************** * Combobox control */ #define WC_COMBOBOXA "ComboBox" #if defined(__GNUC__) # define WC_COMBOBOXW (const WCHAR []){ 'C','o','m','b','o','B','o','x',0 } #elif defined(_MSC_VER) # define WC_COMBOBOXW L"ComboBox" #else static const WCHAR WC_COMBOBOXW[] = { 'C','o','m','b','o','B','o','x',0 }; #endif #define WC_COMBOBOX WINELIB_NAME_AW(WC_COMBOBOX) #define CBM_FIRST 0x1700 #define CB_SETMINVISIBLE (CBM_FIRST + 1) #define CB_GETMINVISIBLE (CBM_FIRST + 2) #define CB_SETCUEBANNER (CBM_FIRST + 3) #define CB_GETCUEBANNER (CBM_FIRST + 4) #define ComboBox_GetMinVisible(hwnd) \ ((int)SendMessage((hwnd), CB_GETMINVISIBLE, 0, 0)) #define ComboBox_SetMinVisible(hwnd, count) \ ((BOOL)SendMessage((hwnd), CB_SETMINVISIBLE, (WPARAM)(count), 0)) /************************************************************************** * Edit control */ #define WC_EDITA "Edit" #if defined(__GNUC__) # define WC_EDITW (const WCHAR []){ 'E','d','i','t',0 } #elif defined(_MSC_VER) # define WC_EDITW L"Edit" #else static const WCHAR WC_EDITW[] = { 'E','d','i','t',0 }; #endif #define WC_EDIT WINELIB_NAME_AW(WC_EDIT) typedef struct _tagEDITBALLOONTIP { DWORD cbStruct; LPCWSTR pszTitle; LPCWSTR pszText; INT ttiIcon; } EDITBALLOONTIP, *PEDITBALLOONTIP; #define ECM_FIRST 0x1500 #define EM_SETCUEBANNER (ECM_FIRST + 1) #define EM_GETCUEBANNER (ECM_FIRST + 2) #define EM_SHOWBALLOONTIP (ECM_FIRST + 3) #define EM_HIDEBALLOONTIP (ECM_FIRST + 4) #define EM_SETHILITE (ECM_FIRST + 5) #define EM_GETHILITE (ECM_FIRST + 6) #define EM_NOSETFOCUS (ECM_FIRST + 7) #define EM_TAKEFOCUS (ECM_FIRST + 8) /************************************************************************** * Listbox control */ #define WC_LISTBOXA "ListBox" #if defined(__GNUC__) # define WC_LISTBOXW (const WCHAR []){ 'L','i','s','t','B','o','x',0 } #elif defined(_MSC_VER) # define WC_LISTBOXW L"ListBox" #else static const WCHAR WC_LISTBOXW[] = { 'L','i','s','t','B','o','x',0 }; #endif #define WC_LISTBOX WINELIB_NAME_AW(WC_LISTBOX) /************************************************************************** * Scrollbar control */ #define WC_SCROLLBARA "ScrollBar" #if defined(__GNUC__) # define WC_SCROLLBARW (const WCHAR []){ 'S','c','r','o','l','l','B','a','r',0 } #elif defined(_MSC_VER) # define WC_SCROLLBARW L"ScrollBar" #else static const WCHAR WC_SCROLLBARW[] = { 'S','c','r','o','l','l','B','a','r',0 }; #endif #define WC_SCROLLBAR WINELIB_NAME_AW(WC_SCROLLBAR) /************************************************************************** * Task dialog */ #ifndef NOTASKDIALOG #include enum _TASKDIALOG_FLAGS { TDF_ENABLE_HYPERLINKS = 0x0001, TDF_USE_HICON_MAIN = 0x0002, TDF_USE_HICON_FOOTER = 0x0004, TDF_ALLOW_DIALOG_CANCELLATION = 0x0008, TDF_USE_COMMAND_LINKS = 0x0010, TDF_USE_COMMAND_LINKS_NO_ICON = 0x0020, TDF_EXPAND_FOOTER_AREA = 0x0040, TDF_EXPANDED_BY_DEFAULT = 0x0080, TDF_VERIFICATION_FLAG_CHECKED = 0x0100, TDF_SHOW_PROGRESS_BAR = 0x0200, TDF_SHOW_MARQUEE_PROGRESS_BAR = 0x0400, TDF_CALLBACK_TIMER = 0x0800, TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000, TDF_RTL_LAYOUT = 0x2000, TDF_NO_DEFAULT_RADIO_BUTTON = 0x4000, TDF_CAN_BE_MINIMIZED = 0x8000, TDF_NO_SET_FOREGROUND = 0x10000, TDF_SIZE_TO_CONTENT = 0x01000000 }; typedef int TASKDIALOG_FLAGS; typedef enum _TASKDIALOG_MESSAGES { TDM_NAVIGATE_PAGE = WM_USER + 101, TDM_CLICK_BUTTON = WM_USER + 102, TDM_SET_MARQUEE_PROGRESS_BAR = WM_USER + 103, TDM_SET_PROGRESS_BAR_STATE = WM_USER + 104, TDM_SET_PROGRESS_BAR_RANGE = WM_USER + 105, TDM_SET_PROGRESS_BAR_POS = WM_USER + 106, TDM_SET_PROGRESS_BAR_MARQUEE = WM_USER + 107, TDM_SET_ELEMENT_TEXT = WM_USER + 108, TDM_CLICK_RADIO_BUTTON = WM_USER + 110, TDM_ENABLE_BUTTON = WM_USER + 111, TDM_ENABLE_RADIO_BUTTON = WM_USER + 112, TDM_CLICK_VERIFICATION = WM_USER + 113, TDM_UPDATE_ELEMENT_TEXT = WM_USER + 114, TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = WM_USER + 115, TDM_UPDATE_ICON = WM_USER + 116, } TASKDIALOG_MESSAGES; typedef enum _TASKDIALOG_NOTIFICATIONS { TDN_CREATED, TDN_NAVIGATED, TDN_BUTTON_CLICKED, TDN_HYPERLINK_CLICKED, TDN_TIMER, TDN_DESTROYED, TDN_RADIO_BUTTON_CLICKED, TDN_DIALOG_CONSTRUCTED, TDN_VERIFICATION_CLICKED, TDN_HELP, TDN_EXPANDO_BUTTON_CLICKED, } TASKDIALOG_NOTIFICATIONS; typedef enum _TASKDIALOG_ELEMENTS { TDE_CONTENT, TDE_EXPANDED_INFORMATION, TDE_FOOTER, TDE_MAIN_INSTRUCTION, } TASKDIALOG_ELEMENTS; typedef enum _TASKDIALOG_ICON_ELEMENTS { TDIE_ICON_MAIN, TDIE_ICON_FOOTER, } TASKDIALOG_ICON_ELEMENTS; #define TD_WARNING_ICON MAKEINTRESOURCEW(-1) #define TD_ERROR_ICON MAKEINTRESOURCEW(-2) #define TD_INFORMATION_ICON MAKEINTRESOURCEW(-3) #define TD_SHIELD_ICON MAKEINTRESOURCEW(-4) enum _TASKDIALOG_COMMON_BUTTON_FLAGS { TDCBF_OK_BUTTON = 0x0001, TDCBF_YES_BUTTON = 0x0002, TDCBF_NO_BUTTON = 0x0004, TDCBF_CANCEL_BUTTON = 0x0008, TDCBF_RETRY_BUTTON = 0x0010, TDCBF_CLOSE_BUTTON = 0x0020 }; typedef int TASKDIALOG_COMMON_BUTTON_FLAGS; typedef struct _TASKDIALOG_BUTTON { int nButtonID; PCWSTR pszButtonText; } TASKDIALOG_BUTTON; typedef HRESULT (CALLBACK *PFTASKDIALOGCALLBACK)(HWND, UINT, WPARAM, LPARAM, LONG_PTR); typedef struct _TASKDIALOGCONFIG { UINT cbSize; HWND hwndParent; HINSTANCE hInstance; TASKDIALOG_FLAGS dwFlags; TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons; PCWSTR pszWindowTitle; union { HICON hMainIcon; PCWSTR pszMainIcon; } DUMMYUNIONNAME; PCWSTR pszMainInstruction; PCWSTR pszContent; UINT cButtons; const TASKDIALOG_BUTTON *pButtons; int nDefaultButton; UINT cRadioButtons; const TASKDIALOG_BUTTON *pRadioButtons; int nDefaultRadioButton; PCWSTR pszVerificationText; PCWSTR pszExpandedInformation; PCWSTR pszExpandedControlText; PCWSTR pszCollapsedControlText; union { HICON hFooterIcon; PCWSTR pszFooterIcon; } DUMMYUNIONNAME2; PCWSTR pszFooter; PFTASKDIALOGCALLBACK pfCallback; LONG_PTR lpCallbackData; UINT cxWidth; } TASKDIALOGCONFIG; HRESULT WINAPI TaskDialog(HWND owner, HINSTANCE hinst, const WCHAR *title, const WCHAR *main_instruction, const WCHAR *content, TASKDIALOG_COMMON_BUTTON_FLAGS common_buttons, const WCHAR *icon, int *button); HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL *); #include #endif /* NOTASKDIALOG */ #ifdef __cplusplus } #endif #endif /* __WINE_COMMCTRL_H */ ================================================ FILE: wine/windows/commctrl.rh ================================================ /* * Copyright (C) 2008 Vijay Kiran Kamuju * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */ #ifndef __MSABI_LONG # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) # define __MSABI_LONG(x) x ## l # else # define __MSABI_LONG(x) x # endif #endif /* Header Control */ #define HDS_HORZ 0x0000 #define HDS_BUTTONS 0x0002 #define HDS_HOTTRACK 0x0004 #define HDS_HIDDEN 0x0008 #define HDS_DRAGDROP 0x0040 #define HDS_FULLDRAG 0x0080 #define HDS_FILTERBAR 0x0100 #define HDS_FLAT 0x0200 #define HDS_CHECKBOXES 0x0400 #define HDS_NOSIZING 0x0800 #define HDS_OVERFLOW 0x1000 /* Rebar Control */ #define RBS_TOOLTIPS 0x0100 #define RBS_VARHEIGHT 0x0200 #define RBS_BANDBORDERS 0x0400 #define RBS_FIXEDORDER 0x0800 #define RBS_REGISTERDROP 0x1000 #define RBS_AUTOSIZE 0x2000 #define RBS_VERTICALGRIPPER 0x4000 #define RBS_DBLCLKTOGGLE 0x8000 /* Tool tips */ #define TTS_ALWAYSTIP 0x01 #define TTS_NOPREFIX 0x02 #define TTS_NOANIMATE 0x10 #define TTS_NOFADE 0x20 #define TTS_BALLOON 0x40 #define TTS_CLOSE 0x80 #define TTS_USEVISUALSTYLE 0x100 /* Statusbar Control */ #define SBARS_SIZEGRIP 0x0100 #define SBARS_TOOLTIPS 0x0800 #define SBT_TOOLTIPS 0x0800 /* Toolbar Control */ #define TBS_AUTOTICKS 0x0001 #define TBS_VERT 0x0002 #define TBS_HORZ 0x0000 #define TBS_TOP 0x0004 #define TBS_BOTTOM 0x0000 #define TBS_LEFT 0x0004 #define TBS_RIGHT 0x0000 #define TBS_BOTH 0x0008 #define TBS_NOTICKS 0x0010 #define TBS_ENABLESELRANGE 0x0020 #define TBS_FIXEDLENGTH 0x0040 #define TBS_NOTHUMB 0x0080 #define TBS_TOOLTIPS 0x0100 #define TBS_REVERSED 0x0200 #define TBS_DOWNISLEFT 0x0400 #define TBS_NOTIFYBEFOREREMOVE 0x0800 #define TBS_TRANSPARENTBKGND 0x1000 /* UpDown Control */ #define UDS_WRAP 0x0001 #define UDS_SETBUDDYINT 0x0002 #define UDS_ALIGNRIGHT 0x0004 #define UDS_ALIGNLEFT 0x0008 #define UDS_AUTOBUDDY 0x0010 #define UDS_ARROWKEYS 0x0020 #define UDS_HORZ 0x0040 #define UDS_NOTHOUSANDS 0x0080 #define UDS_HOTTRACK 0x0100 /* Progressbar Control */ #define PBS_SMOOTH 0x01 #define PBS_VERTICAL 0x04 #define PBS_MARQUEE 0x08 #define PBS_SMOOTHREVERSE 0x10 /* Common Control Styles */ #define CCS_TOP __MSABI_LONG(0x00000001) #define CCS_NOMOVEY __MSABI_LONG(0x00000002) #define CCS_BOTTOM __MSABI_LONG(0x00000003) #define CCS_NORESIZE __MSABI_LONG(0x00000004) #define CCS_NOPARENTALIGN __MSABI_LONG(0x00000008) #define CCS_ADJUSTABLE __MSABI_LONG(0x00000020) #define CCS_NODIVIDER __MSABI_LONG(0x00000040) #define CCS_VERT __MSABI_LONG(0x00000080) #define CCS_LEFT (CCS_VERT | CCS_TOP) #define CCS_RIGHT (CCS_VERT | CCS_BOTTOM) #define CCS_NOMOVEX (CCS_VERT | CCS_NOMOVEY) /* Listview Control */ #define LVS_ICON 0x0000 #define LVS_REPORT 0x0001 #define LVS_SMALLICON 0x0002 #define LVS_LIST 0x0003 #define LVS_TYPEMASK 0x0003 #define LVS_SINGLESEL 0x0004 #define LVS_SHOWSELALWAYS 0x0008 #define LVS_SORTASCENDING 0x0010 #define LVS_SORTDESCENDING 0x0020 #define LVS_SHAREIMAGELISTS 0x0040 #define LVS_NOLABELWRAP 0x0080 #define LVS_AUTOARRANGE 0x0100 #define LVS_EDITLABELS 0x0200 #define LVS_OWNERDATA 0x1000 #define LVS_NOSCROLL 0x2000 #define LVS_TYPESTYLEMASK 0xfc00 #define LVS_ALIGNTOP 0x0000 #define LVS_ALIGNLEFT 0x0800 #define LVS_ALIGNMASK 0x0c00 #define LVS_OWNERDRAWFIXED 0x0400 #define LVS_NOCOLUMNHEADER 0x4000 #define LVS_NOSORTHEADER 0x8000 /* Treeview Control */ #define TVS_HASBUTTONS 0x0001 #define TVS_HASLINES 0x0002 #define TVS_LINESATROOT 0x0004 #define TVS_EDITLABELS 0x0008 #define TVS_DISABLEDRAGDROP 0x0010 #define TVS_SHOWSELALWAYS 0x0020 #define TVS_RTLREADING 0x0040 #define TVS_NOTOOLTIPS 0x0080 #define TVS_CHECKBOXES 0x0100 #define TVS_TRACKSELECT 0x0200 #define TVS_SINGLEEXPAND 0x0400 #define TVS_INFOTIP 0x0800 #define TVS_FULLROWSELECT 0x1000 #define TVS_NOSCROLL 0x2000 #define TVS_NONEVENHEIGHT 0x4000 #define TVS_NOHSCROLL 0x8000 /* Tab Control */ #define TCS_SCROLLOPPOSITE 0x0001 /* assumes multiline tab */ #define TCS_BOTTOM 0x0002 #define TCS_RIGHT 0x0002 #define TCS_MULTISELECT 0x0004 /* allow multi-select in button mode */ #define TCS_FLATBUTTONS 0x0008 #define TCS_FORCEICONLEFT 0x0010 #define TCS_FORCELABELLEFT 0x0020 #define TCS_HOTTRACK 0x0040 #define TCS_VERTICAL 0x0080 #define TCS_TABS 0x0000 #define TCS_BUTTONS 0x0100 #define TCS_SINGLELINE 0x0000 #define TCS_MULTILINE 0x0200 #define TCS_RIGHTJUSTIFY 0x0000 #define TCS_FIXEDWIDTH 0x0400 #define TCS_RAGGEDRIGHT 0x0800 #define TCS_FOCUSONBUTTONDOWN 0x1000 #define TCS_OWNERDRAWFIXED 0x2000 #define TCS_TOOLTIPS 0x4000 #define TCS_FOCUSNEVER 0x8000 /* Animate Control */ #define ACS_CENTER 0x0001 #define ACS_TRANSPARENT 0x0002 #define ACS_AUTOPLAY 0x0004 #define ACS_TIMER 0x0008 /* no threads, just timers */ /* Month Calendar Control */ #define MCS_DAYSTATE 0x0001 #define MCS_MULTISELECT 0x0002 #define MCS_WEEKNUMBERS 0x0004 #define MCS_NOTODAY 0x0010 #define MCS_NOTODAYCIRCLE 0x0008 #define MCS_NOTRAILINGDATES 0x0040 #define MCS_SHORTDAYSOFWEEK 0x0080 #define MCS_NOSELCHANGEONNAV 0x0100 /* Datetime Control */ #define DTS_SHORTDATEFORMAT 0x0000 #define DTS_UPDOWN 0x0001 #define DTS_SHOWNONE 0x0002 #define DTS_LONGDATEFORMAT 0x0004 #define DTS_TIMEFORMAT 0x0009 #define DTS_SHORTDATECENTURYFORMAT 0x000c #define DTS_APPCANPARSE 0x0010 #define DTS_RIGHTALIGN 0x0020 /* Pager Control */ #define PGS_VERT 0x00000000 #define PGS_HORZ 0x00000001 #define PGS_AUTOSCROLL 0x00000002 #define PGS_DRAGNDROP 0x00000004 /* Native Font Control */ #define NFS_EDIT 0x0001 #define NFS_STATIC 0x0002 #define NFS_LISTCOMBO 0x0004 #define NFS_BUTTON 0x0008 #define NFS_ALL 0x0010 #define NFS_USEFONTASSOC 0x0020 ================================================ FILE: wine/windows/commdlg.h ================================================ /* * COMMDLG - Common Wine Dialog ... :-) * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_COMMDLG_H #define __WINE_COMMDLG_H #ifdef __cplusplus extern "C" { #endif #include #ifndef _WIN64 #include #endif #ifndef SNDMSG #ifdef __cplusplus #define SNDMSG ::SendMessage #else /* __cplusplus */ #define SNDMSG SendMessage #endif /* __cplusplus */ #endif /* SNDMSG */ #define OFN_READONLY 0x00000001 #define OFN_OVERWRITEPROMPT 0x00000002 #define OFN_HIDEREADONLY 0x00000004 #define OFN_NOCHANGEDIR 0x00000008 #define OFN_SHOWHELP 0x00000010 #define OFN_ENABLEHOOK 0x00000020 #define OFN_ENABLETEMPLATE 0x00000040 #define OFN_ENABLETEMPLATEHANDLE 0x00000080 #define OFN_NOVALIDATE 0x00000100 #define OFN_ALLOWMULTISELECT 0x00000200 #define OFN_EXTENSIONDIFFERENT 0x00000400 #define OFN_PATHMUSTEXIST 0x00000800 #define OFN_FILEMUSTEXIST 0x00001000 #define OFN_CREATEPROMPT 0x00002000 #define OFN_SHAREAWARE 0x00004000 #define OFN_NOREADONLYRETURN 0x00008000 #define OFN_NOTESTFILECREATE 0x00010000 #define OFN_NONETWORKBUTTON 0x00020000 #define OFN_NOLONGNAMES 0x00040000 #define OFN_EXPLORER 0x00080000 #define OFN_NODEREFERENCELINKS 0x00100000 #define OFN_LONGNAMES 0x00200000 #define OFN_ENABLEINCLUDENOTIFY 0x00400000 #define OFN_ENABLESIZING 0x00800000 #define OFN_DONTADDTORECENT 0x02000000 #define OFN_FORCESHOWHIDDEN 0x10000000 #define OFN_EX_NOPLACESBAR 0x00000001 #define OFN_SHAREFALLTHROUGH 2 #define OFN_SHARENOWARN 1 #define OFN_SHAREWARN 0 #define SAVE_DIALOG 1 #define OPEN_DIALOG 2 typedef UINT_PTR (CALLBACK *LPOFNHOOKPROC)(HWND,UINT,WPARAM,LPARAM); typedef struct tagOFNA { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCSTR lpstrFilter; LPSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPSTR lpstrFile; DWORD nMaxFile; LPSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCSTR lpstrInitialDir; LPCSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; LPCSTR lpstrDefExt; LPARAM lCustData; LPOFNHOOKPROC lpfnHook; LPCSTR lpTemplateName; void *pvReserved; DWORD dwReserved; DWORD FlagsEx; } OPENFILENAMEA,*LPOPENFILENAMEA; typedef struct tagOFNW { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCWSTR lpstrFilter; LPWSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPWSTR lpstrFile; DWORD nMaxFile; LPWSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCWSTR lpstrInitialDir; LPCWSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; LPCWSTR lpstrDefExt; LPARAM lCustData; LPOFNHOOKPROC lpfnHook; LPCWSTR lpTemplateName; void *pvReserved; DWORD dwReserved; DWORD FlagsEx; } OPENFILENAMEW,*LPOPENFILENAMEW; DECL_WINELIB_TYPE_AW(OPENFILENAME) DECL_WINELIB_TYPE_AW(LPOPENFILENAME) #ifndef CDSIZEOF_STRUCT #define CDSIZEOF_STRUCT(type,field) ((INT_PTR)&(((type *)0)->field) + sizeof(((type*)0)->field)) #endif #define OPENFILENAME_SIZE_VERSION_400A CDSIZEOF_STRUCT(OPENFILENAMEA,lpTemplateName) #define OPENFILENAME_SIZE_VERSION_400W CDSIZEOF_STRUCT(OPENFILENAMEW,lpTemplateName) #define OPENFILENAME_SIZE_VERSION_400 WINELIB_NAME_AW(OPENFILENAME_SIZE_VERSION_400) typedef struct { NMHDR hdr; LPOPENFILENAMEA lpOFN; LPSTR pszFile; } OFNOTIFYA, *LPOFNOTIFYA; typedef struct { NMHDR hdr; LPOPENFILENAMEW lpOFN; LPWSTR pszFile; } OFNOTIFYW, *LPOFNOTIFYW; DECL_WINELIB_TYPE_AW(OFNOTIFY) DECL_WINELIB_TYPE_AW(LPOFNOTIFY) typedef struct _OFNOTIFYEXA { NMHDR hdr; LPOPENFILENAMEA lpOFN; LPVOID psf; LPVOID pidl; } OFNOTIFYEXA, *LPOFNOTIFYEXA; typedef struct _OFNOTIFYEXW { NMHDR hdr; LPOPENFILENAMEW lpOFN; LPVOID psf; LPVOID pidl; } OFNOTIFYEXW, *LPOFNOTIFYEXW; DECL_WINELIB_TYPE_AW(OFNOTIFYEX) DECL_WINELIB_TYPE_AW(LPOFNOTIFYEX) typedef UINT_PTR (CALLBACK *LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM); typedef struct { DWORD lStructSize; HWND hwndOwner; HWND hInstance; /* Should be an HINSTANCE but MS made a typo */ COLORREF rgbResult; COLORREF *lpCustColors; DWORD Flags; LPARAM lCustData; LPCCHOOKPROC lpfnHook; LPCSTR lpTemplateName; } CHOOSECOLORA; typedef CHOOSECOLORA *LPCHOOSECOLORA; typedef struct { DWORD lStructSize; HWND hwndOwner; HWND hInstance; /* Should be an HINSTANCE but MS made a typo */ COLORREF rgbResult; COLORREF *lpCustColors; DWORD Flags; LPARAM lCustData; LPCCHOOKPROC lpfnHook; LPCWSTR lpTemplateName; } CHOOSECOLORW; typedef CHOOSECOLORW *LPCHOOSECOLORW; DECL_WINELIB_TYPE_AW(CHOOSECOLOR) DECL_WINELIB_TYPE_AW(LPCHOOSECOLOR) #define CC_RGBINIT 0x00000001 #define CC_FULLOPEN 0x00000002 #define CC_PREVENTFULLOPEN 0x00000004 #define CC_SHOWHELP 0x00000008 #define CC_ENABLEHOOK 0x00000010 #define CC_ENABLETEMPLATE 0x00000020 #define CC_ENABLETEMPLATEHANDLE 0x00000040 #define CC_SOLIDCOLOR 0x00000080 #define CC_ANYCOLOR 0x00000100 typedef UINT_PTR (CALLBACK *LPFRHOOKPROC)(HWND,UINT,WPARAM,LPARAM); typedef struct { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; DWORD Flags; LPSTR lpstrFindWhat; LPSTR lpstrReplaceWith; WORD wFindWhatLen; WORD wReplaceWithLen; LPARAM lCustData; LPFRHOOKPROC lpfnHook; LPCSTR lpTemplateName; } FINDREPLACEA, *LPFINDREPLACEA; typedef struct { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; DWORD Flags; LPWSTR lpstrFindWhat; LPWSTR lpstrReplaceWith; WORD wFindWhatLen; WORD wReplaceWithLen; LPARAM lCustData; LPFRHOOKPROC lpfnHook; LPCWSTR lpTemplateName; } FINDREPLACEW, *LPFINDREPLACEW; DECL_WINELIB_TYPE_AW(FINDREPLACE) DECL_WINELIB_TYPE_AW(LPFINDREPLACE) #define FR_DOWN 0x00000001 #define FR_WHOLEWORD 0x00000002 #define FR_MATCHCASE 0x00000004 #define FR_FINDNEXT 0x00000008 #define FR_REPLACE 0x00000010 #define FR_REPLACEALL 0x00000020 #define FR_DIALOGTERM 0x00000040 #define FR_SHOWHELP 0x00000080 #define FR_ENABLEHOOK 0x00000100 #define FR_ENABLETEMPLATE 0x00000200 #define FR_NOUPDOWN 0x00000400 #define FR_NOMATCHCASE 0x00000800 #define FR_NOWHOLEWORD 0x00001000 #define FR_ENABLETEMPLATEHANDLE 0x00002000 #define FR_HIDEUPDOWN 0x00004000 #define FR_HIDEMATCHCASE 0x00008000 #define FR_HIDEWHOLEWORD 0x00010000 #define FR_MATCHDIAC 0x20000000 #define FR_MATCHKASHIDA 0x40000000 #define FR_MATCHALEFHAMZA 0x80000000 typedef UINT_PTR (CALLBACK *LPCFHOOKPROC)(HWND,UINT,WPARAM,LPARAM); typedef struct tagCHOOSEFONTA { UINT lStructSize; HWND hwndOwner; HDC hDC; LPLOGFONTA lpLogFont; INT iPointSize; DWORD Flags; COLORREF rgbColors; LPARAM lCustData; LPCFHOOKPROC lpfnHook; LPCSTR lpTemplateName; HINSTANCE hInstance; LPSTR lpszStyle; WORD nFontType; WORD ___MISSING_ALIGNMENT__; INT nSizeMin; INT nSizeMax; } CHOOSEFONTA, *LPCHOOSEFONTA; typedef struct tagCHOOSEFONTW { UINT lStructSize; HWND hwndOwner; HDC hDC; LPLOGFONTW lpLogFont; INT iPointSize; DWORD Flags; COLORREF rgbColors; LPARAM lCustData; LPCFHOOKPROC lpfnHook; LPCWSTR lpTemplateName; HINSTANCE hInstance; LPWSTR lpszStyle; WORD nFontType; WORD ___MISSING_ALIGNMENT__; INT nSizeMin; INT nSizeMax; } CHOOSEFONTW, *LPCHOOSEFONTW; DECL_WINELIB_TYPE_AW(CHOOSEFONT) DECL_WINELIB_TYPE_AW(LPCHOOSEFONT) #define CF_SCREENFONTS 0x00000001 #define CF_PRINTERFONTS 0x00000002 #define CF_BOTH (CF_SCREENFONTS | CF_PRINTERFONTS) #define CF_SHOWHELP __MSABI_LONG(0x00000004) #define CF_ENABLEHOOK __MSABI_LONG(0x00000008) #define CF_ENABLETEMPLATE __MSABI_LONG(0x00000010) #define CF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020) #define CF_INITTOLOGFONTSTRUCT __MSABI_LONG(0x00000040) #define CF_USESTYLE __MSABI_LONG(0x00000080) #define CF_EFFECTS __MSABI_LONG(0x00000100) #define CF_APPLY __MSABI_LONG(0x00000200) #define CF_ANSIONLY __MSABI_LONG(0x00000400) #define CF_SCRIPTSONLY CF_ANSIONLY #define CF_NOVECTORFONTS __MSABI_LONG(0x00000800) #define CF_NOOEMFONTS CF_NOVECTORFONTS #define CF_NOSIMULATIONS __MSABI_LONG(0x00001000) #define CF_LIMITSIZE __MSABI_LONG(0x00002000) #define CF_FIXEDPITCHONLY __MSABI_LONG(0x00004000) #define CF_WYSIWYG __MSABI_LONG(0x00008000) /* use with CF_SCREENFONTS & CF_PRINTERFONTS */ #define CF_FORCEFONTEXIST __MSABI_LONG(0x00010000) #define CF_SCALABLEONLY __MSABI_LONG(0x00020000) #define CF_TTONLY __MSABI_LONG(0x00040000) #define CF_NOFACESEL __MSABI_LONG(0x00080000) #define CF_NOSTYLESEL __MSABI_LONG(0x00100000) #define CF_NOSIZESEL __MSABI_LONG(0x00200000) #define CF_SELECTSCRIPT __MSABI_LONG(0x00400000) #define CF_NOSCRIPTSEL __MSABI_LONG(0x00800000) #define CF_NOVERTFONTS __MSABI_LONG(0x01000000) #define SIMULATED_FONTTYPE 0x8000 #define PRINTER_FONTTYPE 0x4000 #define SCREEN_FONTTYPE 0x2000 #define BOLD_FONTTYPE 0x0100 #define ITALIC_FONTTYPE 0x0200 #define REGULAR_FONTTYPE 0x0400 #define WM_CHOOSEFONT_GETLOGFONT (WM_USER + 1) #define WM_CHOOSEFONT_SETLOGFONT (WM_USER + 101) #define WM_CHOOSEFONT_SETFLAGS (WM_USER + 102) #define LBSELCHSTRINGA "commdlg_LBSelChangedNotify" #if defined(__GNUC__) # define LBSELCHSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \ 'L','B','S','e','l','C','h','a','n','g','e','d','N','o','t','i','f','y',0 } #elif defined(_MSC_VER) # define LBSELCHSTRINGW L"commdlg_LBSelChangedNotify" #else static const WCHAR LBSELCHSTRINGW[] = { 'c','o','m','m','d','l','g','_', 'L','B','S','e','l','C','h','a','n','g','e','d','N','o','t','i','f','y',0 }; #endif #define LBSELCHSTRING WINELIB_NAME_AW(LBSELCHSTRING) #define SHAREVISTRINGA "commdlg_ShareViolation" #if defined(__GNUC__) # define SHAREVISTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \ 'S','h','a','r','e','V','i','o','l','a','t','i','o','n',0 } #elif defined(_MSC_VER) # define SHAREVISTRINGW L"commdlg_ShareViolation" #else static const WCHAR SHAREVISTRINGW[] = { 'c','o','m','m','d','l','g','_', 'S','h','a','r','e','V','i','o','l','a','t','i','o','n',0 }; #endif #define SHAREVISTRING WINELIB_NAME_AW(SHAREVISTRING) #define FILEOKSTRINGA "commdlg_FileNameOK" #if defined(__GNUC__) # define FILEOKSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \ 'F','i','l','e','N','a','m','e','O','K',0 } #elif defined(_MSC_VER) # define FILEOKSTRINGW L"commdlg_FileNameOK" #else static const WCHAR FILEOKSTRINGW[] = { 'c','o','m','m','d','l','g','_', 'F','i','l','e','N','a','m','e','O','K',0 }; #endif #define FILEOKSTRING WINELIB_NAME_AW(FILEOKSTRING) #define COLOROKSTRINGA "commdlg_ColorOK" #if defined(__GNUC__) # define COLOROKSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \ 'C','o','l','o','r','O','K',0 } #elif defined(_MSC_VER) # define COLOROKSTRINGW L"commdlg_ColorOK" #else static const WCHAR COLOROKSTRINGW[] = { 'c','o','m','m','d','l','g','_', 'C','o','l','o','r','O','K',0 }; #endif #define COLOROKSTRING WINELIB_NAME_AW(COLOROKSTRING) #define SETRGBSTRINGA "commdlg_SetRGBColor" #if defined(__GNUC__) # define SETRGBSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \ 'S','e','t','R','G','B','C','o','l','o','r',0 } #elif defined(_MSC_VER) # define SETRGBSTRINGW L"commdlg_SetRGBColor" #else static const WCHAR SETRGBSTRINGW[] = { 'c','o','m','m','d','l','g','_', 'S','e','t','R','G','B','C','o','l','o','r',0 }; #endif #define SETRGBSTRING WINELIB_NAME_AW(SETRGBSTRING) #define FINDMSGSTRINGA "commdlg_FindReplace" #if defined(__GNUC__) # define FINDMSGSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \ 'F','i','n','d','R','e','p','l','a','c','e',0 } #elif defined(_MSC_VER) # define FINDMSGSTRINGW L"commdlg_FindReplace" #else static const WCHAR FINDMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_', 'F','i','n','d','R','e','p','l','a','c','e',0 }; #endif #define FINDMSGSTRING WINELIB_NAME_AW(FINDMSGSTRING) #define HELPMSGSTRINGA "commdlg_help" #if defined(__GNUC__) # define HELPMSGSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \ 'H','e','l','p',0 } #elif defined(_MSC_VER) # define HELPMSGSTRINGW L"commdlg_help" #else static const WCHAR HELPMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_', 'H','e','l','p',0 }; #endif #define HELPMSGSTRING WINELIB_NAME_AW(HELPMSGSTRING) #define CD_LBSELNOITEMS -1 #define CD_LBSELCHANGE 0 #define CD_LBSELSUB 1 #define CD_LBSELADD 2 #define CDN_FIRST (0U-601U) #define CDN_LAST (0U-699U) #define CDN_INITDONE (CDN_FIRST - 0x0000) #define CDN_SELCHANGE (CDN_FIRST - 0x0001) #define CDN_FOLDERCHANGE (CDN_FIRST - 0x0002) #define CDN_SHAREVIOLATION (CDN_FIRST - 0x0003) #define CDN_HELP (CDN_FIRST - 0x0004) #define CDN_FILEOK (CDN_FIRST - 0x0005) #define CDN_TYPECHANGE (CDN_FIRST - 0x0006) #define CDN_INCLUDEITEM (CDN_FIRST - 0x0007) #define CDM_FIRST (WM_USER + 100) #define CDM_LAST (WM_USER + 200) #define CDM_GETSPEC (CDM_FIRST + 0x0000) #define CDM_GETFILEPATH (CDM_FIRST + 0x0001) #define CDM_GETFOLDERPATH (CDM_FIRST + 0x0002) #define CDM_GETFOLDERIDLIST (CDM_FIRST + 0x0003) #define CDM_SETCONTROLTEXT (CDM_FIRST + 0x0004) #define CDM_HIDECONTROL (CDM_FIRST + 0x0005) #define CDM_SETDEFEXT (CDM_FIRST + 0x0006) /* Messages to query information from the open or save dialogs */ #define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz) #define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) #define CommDlg_OpenSave_GetSpec WINELIB_NAME_AW(CommDlg_OpenSave_GetSpec) #define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz) #define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) #define CommDlg_OpenSave_GetFilePath WINELIB_NAME_AW(CommDlg_OpenSave_GetFilePath) #define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz) #define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) #define CommDlg_OpenSave_GetFolderPath WINELIB_NAME_AW(CommDlg_OpenSave_GetFolderPath) #define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl) #define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) \ (void)SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text) #define CommDlg_OpenSave_HideControl(_hdlg, _id) \ (void)SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0) #define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) \ (void)SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext) #define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz) #define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) #define CommDlg_OpenSave_GetSpec WINELIB_NAME_AW(CommDlg_OpenSave_GetSpec) #define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz) #define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) #define CommDlg_OpenSave_GetFilePath WINELIB_NAME_AW(CommDlg_OpenSave_GetFilePath) #define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz) #define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) #define CommDlg_OpenSave_GetFolderPath WINELIB_NAME_AW(CommDlg_OpenSave_GetFolderPath) #define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) \ (int)SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl) #define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) \ (void)SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text) #define CommDlg_OpenSave_HideControl(_hdlg, _id) \ (void)SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0) #define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) \ (void)SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext) typedef UINT_PTR (CALLBACK *LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM); typedef UINT_PTR (CALLBACK *LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM); typedef struct tagPDA { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; HDC hDC; DWORD Flags; WORD nFromPage; WORD nToPage; WORD nMinPage; WORD nMaxPage; WORD nCopies; HINSTANCE hInstance; LPARAM lCustData; LPPRINTHOOKPROC lpfnPrintHook; LPSETUPHOOKPROC lpfnSetupHook; LPCSTR lpPrintTemplateName; LPCSTR lpSetupTemplateName; HGLOBAL hPrintTemplate; HGLOBAL hSetupTemplate; } PRINTDLGA, *LPPRINTDLGA; typedef struct tagPDW { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; HDC hDC; DWORD Flags; WORD nFromPage; WORD nToPage; WORD nMinPage; WORD nMaxPage; WORD nCopies; HINSTANCE hInstance; LPARAM lCustData; LPPRINTHOOKPROC lpfnPrintHook; LPSETUPHOOKPROC lpfnSetupHook; LPCWSTR lpPrintTemplateName; LPCWSTR lpSetupTemplateName; HGLOBAL hPrintTemplate; HGLOBAL hSetupTemplate; } PRINTDLGW, *LPPRINTDLGW; DECL_WINELIB_TYPE_AW(PRINTDLG) DECL_WINELIB_TYPE_AW(LPPRINTDLG) #define PD_ALLPAGES 0x00000000 #define PD_SELECTION 0x00000001 #define PD_PAGENUMS 0x00000002 #define PD_NOSELECTION 0x00000004 #define PD_NOPAGENUMS 0x00000008 #define PD_COLLATE 0x00000010 #define PD_PRINTTOFILE 0x00000020 #define PD_PRINTSETUP 0x00000040 #define PD_NOWARNING 0x00000080 #define PD_RETURNDC 0x00000100 #define PD_RETURNIC 0x00000200 #define PD_RETURNDEFAULT 0x00000400 #define PD_SHOWHELP 0x00000800 #define PD_ENABLEPRINTHOOK 0x00001000 #define PD_ENABLESETUPHOOK 0x00002000 #define PD_ENABLEPRINTTEMPLATE 0x00004000 #define PD_ENABLESETUPTEMPLATE 0x00008000 #define PD_ENABLEPRINTTEMPLATEHANDLE 0x00010000 #define PD_ENABLESETUPTEMPLATEHANDLE 0x00020000 #define PD_USEDEVMODECOPIES 0x00040000 #define PD_USEDEVMODECOPIESANDCOLLATE 0x00040000 #define PD_DISABLEPRINTTOFILE 0x00080000 #define PD_HIDEPRINTTOFILE 0x00100000 #define PD_NONETWORKBUTTON 0x00200000 #define PD_CURRENTPAGE 0x00400000 #define PD_NOCURRENTPAGE 0x00800000 #define PD_EXCLUSIONFLAGS 0x01000000 #define PD_USELARGETEMPLATE 0x10000000 #define PD_EXCL_COPIESANDCOLLATE (DM_COPIES | DM_COLLATE) #define START_PAGE_GENERAL 0xffffffff #define PD_RESULT_CANCEL 0 #define PD_RESULT_PRINT 1 #define PD_RESULT_APPLY 2 typedef struct { WORD wDriverOffset; WORD wDeviceOffset; WORD wOutputOffset; WORD wDefault; } DEVNAMES; typedef DEVNAMES * LPDEVNAMES; #define DN_DEFAULTPRN 0x0001 /* PageSetupDlg stuff ... */ #define WM_PSD_PAGESETUPDLG (WM_USER ) #define WM_PSD_FULLPAGERECT (WM_USER+1) #define WM_PSD_MINMARGINRECT (WM_USER+2) #define WM_PSD_MARGINRECT (WM_USER+3) #define WM_PSD_GREEKTEXTRECT (WM_USER+4) #define WM_PSD_ENVSTAMPRECT (WM_USER+5) #define WM_PSD_YAFULLPAGERECT (WM_USER+6) typedef UINT (CALLBACK *LPPAGEPAINTHOOK)( HWND, UINT, WPARAM, LPARAM ); typedef UINT (CALLBACK *LPPAGESETUPHOOK)( HWND, UINT, WPARAM, LPARAM ); typedef struct tagPSDA { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; DWORD Flags; POINT ptPaperSize; RECT rtMinMargin; RECT rtMargin; HINSTANCE hInstance; LPARAM lCustData; LPPAGESETUPHOOK lpfnPageSetupHook; LPPAGEPAINTHOOK lpfnPagePaintHook; LPCSTR lpPageSetupTemplateName; HGLOBAL hPageSetupTemplate; } PAGESETUPDLGA,*LPPAGESETUPDLGA; typedef struct tagPSDW { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; DWORD Flags; POINT ptPaperSize; RECT rtMinMargin; RECT rtMargin; HINSTANCE hInstance; LPARAM lCustData; LPPAGESETUPHOOK lpfnPageSetupHook; LPPAGEPAINTHOOK lpfnPagePaintHook; LPCWSTR lpPageSetupTemplateName; HGLOBAL hPageSetupTemplate; } PAGESETUPDLGW,*LPPAGESETUPDLGW; DECL_WINELIB_TYPE_AW(PAGESETUPDLG) DECL_WINELIB_TYPE_AW(LPPAGESETUPDLG) #define PSD_DEFAULTMINMARGINS 0x00000000 #define PSD_INWININIINTLMEASURE 0x00000000 #define PSD_MINMARGINS 0x00000001 #define PSD_MARGINS 0x00000002 #define PSD_INTHOUSANDTHSOFINCHES 0x00000004 #define PSD_INHUNDREDTHSOFMILLIMETERS 0x00000008 #define PSD_DISABLEMARGINS 0x00000010 #define PSD_DISABLEPRINTER 0x00000020 #define PSD_NOWARNING 0x00000080 #define PSD_DISABLEORIENTATION 0x00000100 #define PSD_RETURNDEFAULT 0x00000400 #define PSD_DISABLEPAPER 0x00000200 #define PSD_SHOWHELP 0x00000800 #define PSD_ENABLEPAGESETUPHOOK 0x00002000 #define PSD_ENABLEPAGESETUPTEMPLATE 0x00008000 #define PSD_ENABLEPAGESETUPTEMPLATEHANDLE 0x00020000 #define PSD_ENABLEPAGEPAINTHOOK 0x00040000 #define PSD_DISABLEPAGEPAINTING 0x00080000 #define PSD_NONETWORKBUTTON 0x00200000 typedef struct tagPRINTPAGERANGE { DWORD nFromPage; DWORD nToPage; } PRINTPAGERANGE, *LPPRINTPAGERANGE; typedef struct tagPDEXA { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; HDC hDC; DWORD Flags; DWORD Flags2; DWORD ExclusionFlags; DWORD nPageRanges; DWORD nMaxPageRanges; LPPRINTPAGERANGE lpPageRanges; DWORD nMinPage; DWORD nMaxPage; DWORD nCopies; HINSTANCE hInstance; LPCSTR lpPrintTemplateName; void* /*LPUNKNOWN*/ lpCallback; DWORD nPropertyPages; HPROPSHEETPAGE* lphPropertyPages; DWORD nStartPage; DWORD dwResultAction; } PRINTDLGEXA, *LPPRINTDLGEXA; typedef struct tagPDEXW { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; HDC hDC; DWORD Flags; DWORD Flags2; DWORD ExclusionFlags; DWORD nPageRanges; DWORD nMaxPageRanges; LPPRINTPAGERANGE lpPageRanges; DWORD nMinPage; DWORD nMaxPage; DWORD nCopies; HINSTANCE hInstance; LPCWSTR lpPrintTemplateName; void* /*LPUNKNOWN*/ lpCallback; DWORD nPropertyPages; HPROPSHEETPAGE* lphPropertyPages; DWORD nStartPage; DWORD dwResultAction; } PRINTDLGEXW, *LPPRINTDLGEXW; DECL_WINELIB_TYPE_AW(PRINTDLGEX) DECL_WINELIB_TYPE_AW(LPPRINTDLGEX) #ifdef STDMETHOD DEFINE_GUID(IID_IPrintDialogCallback, 0x5852a2c3,0x6530,0x11d1,0xb6,0xa3,0x00,0x00,0xf8,0x75,0x7b,0xf9); #define INTERFACE IPrintDialogCallback DECLARE_INTERFACE_(IPrintDialogCallback,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID,void **) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IPrintDialogCallback methods ***/ STDMETHOD(InitDone)(THIS) PURE; STDMETHOD(SelectionChange)(THIS) PURE; STDMETHOD(HandleMessage)(THIS_ HWND,UINT,WPARAM,LPARAM,LRESULT *) PURE; }; #undef INTERFACE DEFINE_GUID(IID_IPrintDialogServices, 0x509aaeda,0x5639,0x11d1,0xb6,0xa1,0x00,0x00,0xf8,0x75,0x7b,0xf9); #define INTERFACE IPrintDialogServices DECLARE_INTERFACE_(IPrintDialogServices,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID,void **) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IPrintDialogServices methods ***/ STDMETHOD(GetCurrentDevMode)(THIS_ LPDEVMODEW,UINT *) PURE; STDMETHOD(GetCurrentPrinterName)(THIS_ LPWSTR,UINT *) PURE; STDMETHOD(GetCurrentPortName)(THIS_ LPWSTR,UINT *) PURE; }; #undef INTERFACE #endif /* STDMETHOD */ BOOL WINAPI ChooseColorA(LPCHOOSECOLORA lpChCol); BOOL WINAPI ChooseColorW(LPCHOOSECOLORW lpChCol); #define ChooseColor WINELIB_NAME_AW(ChooseColor) DWORD WINAPI CommDlgExtendedError(void); HWND WINAPI FindTextA(LPFINDREPLACEA lpFind); HWND WINAPI FindTextW(LPFINDREPLACEW lpFind); #define FindText WINELIB_NAME_AW(FindText) short WINAPI GetFileTitleA(LPCSTR lpFile, LPSTR lpTitle, WORD cbBuf); short WINAPI GetFileTitleW(LPCWSTR lpFile, LPWSTR lpTitle, WORD cbBuf); #define GetFileTitle WINELIB_NAME_AW(GetFileTitle) BOOL WINAPI GetOpenFileNameA(LPOPENFILENAMEA ofn); BOOL WINAPI GetOpenFileNameW(LPOPENFILENAMEW ofn); #define GetOpenFileName WINELIB_NAME_AW(GetOpenFileName) BOOL WINAPI GetSaveFileNameA(LPOPENFILENAMEA ofn); BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn); #define GetSaveFileName WINELIB_NAME_AW(GetSaveFileName) BOOL WINAPI PageSetupDlgA( LPPAGESETUPDLGA ); BOOL WINAPI PageSetupDlgW( LPPAGESETUPDLGW ); #define PageSetupDlg WINELIB_NAME_AW(PageSetupDlg) BOOL WINAPI PrintDlgA( LPPRINTDLGA printdlg); BOOL WINAPI PrintDlgW( LPPRINTDLGW printdlg); #define PrintDlg WINELIB_NAME_AW(PrintDlg) HRESULT WINAPI PrintDlgExA(LPPRINTDLGEXA); HRESULT WINAPI PrintDlgExW(LPPRINTDLGEXW); #define PrintDlgEx WINELIB_NAME_AW(PrintDlgEx) HWND WINAPI ReplaceTextA( LPFINDREPLACEA lpFind); HWND WINAPI ReplaceTextW( LPFINDREPLACEW lpFind); #define ReplaceText WINELIB_NAME_AW(ReplaceText) BOOL WINAPI ChooseFontA(LPCHOOSEFONTA); BOOL WINAPI ChooseFontW(LPCHOOSEFONTW); #define ChooseFont WINELIB_NAME_AW(ChooseFont) void COMDLG32_SetCommDlgExtendedError(DWORD err); #ifndef _WIN64 #include #endif #ifdef __cplusplus } #endif #endif /* __WINE_COMMDLG_H */ ================================================ FILE: wine/windows/commoncontrols.idl ================================================ /* * Common controls v6 interface definitions * * Copyright 2009 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; /* Definitions required for widl, but already defined in commctrl.h for C */ cpp_quote("#if 0") typedef DWORD RGBQUAD; typedef IUnknown* HIMAGELIST; typedef struct { HBITMAP hbmImage; HBITMAP hbmMask; int Unused1; int Unused2; RECT rcImage; } IMAGEINFO; typedef IMAGEINFO* LPIMAGEINFO; typedef struct { DWORD cbSize; HIMAGELIST himl; int i; HDC hdcDst; int x; int y; int cx; int cy; int xBitmap; int yBitmap; COLORREF rgbBk; COLORREF rgbFg; UINT fStyle; DWORD dwRop; DWORD fState; DWORD Frame; COLORREF crEffect; } IMAGELISTDRAWPARAMS; typedef IMAGELISTDRAWPARAMS* LPIMAGELISTDRAWPARAMS; cpp_quote("#endif") cpp_quote("HRESULT WINAPI ImageList_CoCreateInstance(REFCLSID,const IUnknown *, REFIID,void **);") const UINT ILIF_ALPHA = 1; [ uuid(46eb5926-582e-4017-9fdf-e8998daa0950), local ] interface IImageList : IUnknown { HRESULT Add( [in] HBITMAP hbmImage, [in] HBITMAP hbmMask, [out] int* pi); HRESULT ReplaceIcon( [in] int i, [in] HICON hicon, [out] int* pi); HRESULT SetOverlayImage( [in] int iImage, [in] int iOverlay); HRESULT Replace( [in] int i, [in] HBITMAP hbmImage, [in] HBITMAP hbmMask); HRESULT AddMasked( [in] HBITMAP hbmImage, [in] COLORREF crMask, [out] int* pi); HRESULT Draw( [in] IMAGELISTDRAWPARAMS* pimldp); HRESULT Remove( [in] int i); HRESULT GetIcon( [in] int i, [in] UINT flags, [out] HICON* picon); HRESULT GetImageInfo( [in] int i, [out] IMAGEINFO* pImageInfo); HRESULT Copy( [in] int iDst, [in] IUnknown* punkSrc, [in] int iSrc, [in] UINT uFlags); HRESULT Merge( [in] int i1, [in] IUnknown* punk2, [in] int i2, [in] int dx, [in] int dy, [out] REFIID riid, [out] PVOID* ppv); HRESULT Clone( [in] REFIID riid, [out] PVOID* ppv); HRESULT GetImageRect( [in] int i, [out] RECT* prc); HRESULT GetIconSize( [out] int* cx, [out] int* cy); HRESULT SetIconSize( [in] int cx, [in] int cy); HRESULT GetImageCount( [out] int* pi); HRESULT SetImageCount( [in] UINT uNewCount); HRESULT SetBkColor( [in] COLORREF clrBk, [out] COLORREF* pclr); HRESULT GetBkColor( [out] COLORREF* pclr); HRESULT BeginDrag( [in] int iTrack, [in] int dxHotspot, [in] int dyHotspot); HRESULT EndDrag(); HRESULT DragEnter( [in] HWND hwndLock, [in] int x, [in] int y); HRESULT DragLeave( [in] HWND hwndLock); HRESULT DragMove( [in] int x, [in] int y); HRESULT SetDragCursorImage( [in] IUnknown* punk, [in] int iDrag, [in] int dxHotspot, [in] int dyHotspot); HRESULT DragShowNolock( [in] BOOL fShow); HRESULT GetDragImage( [out] POINT * ppt, [out] POINT * pptHotspot, [out] REFIID riid, [out] PVOID* ppv); HRESULT GetItemFlags( [in] int i, [out] DWORD *dwFlags); HRESULT GetOverlayImage( [in] int iOverlay, [out] int* piIndex); } [ uuid(192b9d83-50fc-457b-90a0-2b82a8b5dae1), local ] interface IImageList2 : IImageList { typedef struct tagIMAGELISTSTATS { DWORD cbSize; INT cAlloc; INT cUsed; INT cStandby; } IMAGELISTSTATS; HRESULT Resize(INT x_size, INT y_size); HRESULT GetOriginalSize([in] INT image, [in] DWORD flags, [out] INT *cx, [out] INT *cy); HRESULT SetOriginalSize([in] INT image, [in] INT cx, [in] INT cy); HRESULT SetCallback([in, unique] IUnknown *callback); HRESULT GetCallback([in] REFIID riid, [out, iid_is(riid)] void** ppv); HRESULT ForceImagePresent([in] INT image, DWORD flags); HRESULT DiscardImages([in] INT first_image, [in] INT last_image, [in] DWORD flags); HRESULT PreloadImages([in] IMAGELISTDRAWPARAMS *params); HRESULT GetStatistics([in, out] IMAGELISTSTATS *stats); HRESULT Initialize([in] INT cx, [in] INT cy, [in] UINT flags, [in] INT initial, [in] INT grow); HRESULT Replace2([in] INT i, [in] HBITMAP image, [in, unique] HBITMAP mask, [in, unique] IUnknown *unk, [in] DWORD flags); HRESULT ReplaceFromImageList([in] INT i, [in] IImageList *imagelist, [in] INT src, [in, unique] IUnknown *unk, [in] DWORD flags); } [ uuid(bcada15B-b428-420c-8d28-023590924c9f) ] library CommonControlObjects { [ uuid(7c476ba2-02b1-48f4-8048-b24619ddc058) ] coclass ImageList { interface IImageList; interface IImageList2; } } ================================================ FILE: wine/windows/compobj.h ================================================ /* * Copyright (C) 2000 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_COMPOBJ_H #define __WINE_COMPOBJ_H /* compobj.h is just a synonym for objbase.h */ #include #endif /* __WINE_COMPOBJ_H */ ================================================ FILE: wine/windows/comsvcs.idl ================================================ /* * Copyright (C) 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "objidl.idl"; import "oaidl.idl"; #ifndef __WIDL__ #define threading(model) #endif typedef DWORD_PTR INSTID; typedef DWORD_PTR RESID; typedef DWORD RESOURCERATING; typedef DWORD_PTR RESTYPID; typedef LPOLESTR SRESID; typedef long TIMEINSECS; typedef DWORD_PTR TRANSID; [ uuid(2a005c00-a5de-11cf-9e66-00aa00a3f464), version(1.0) ] library COMSVCSLib { [ object, hidden, local, uuid(bf6a1850-2b45-11cf-be10-00aa00a2fa25), pointer_default(unique) ] interface IHolder : IUnknown { HRESULT AllocResource([in] const RESTYPID typeid, [out] RESID *resid); HRESULT FreeResource([in] const RESID _resid); HRESULT TrackResource([in] const RESID resid); HRESULT TrackResourceS([in] const SRESID resid); HRESULT UntrackResource([in] const RESID resid, [in] const BOOL value); HRESULT UntrackResourceS([in] const SRESID resid, [in] const BOOL value); HRESULT Close(void); HRESULT RequestDestroyResource([in] const RESID resid); }; [ object, hidden, local, uuid(208b3651-2b48-11cf-be10-00aa00a2fa25), pointer_default(unique) ] interface IDispenserDriver : IUnknown { HRESULT CreateResource([in] const RESTYPID restypid, [out] RESID *resid, [out] TIMEINSECS *destroy); HRESULT RateResource([in] const RESTYPID restypid, [in] const RESID resid, [in] const BOOL requires, [out] RESOURCERATING *rating); HRESULT EnlistResource([in] const RESID resid, [in] const TRANSID transid); HRESULT ResetResource([in] const RESID resid); HRESULT DestroyResource([in] const RESID resid); HRESULT DestroyResourceS([in] const SRESID resid); }; [ object, hidden, local, uuid(5cb31e10-2b5f-11cf-be10-00aa00a2fa25), pointer_default(unique) ] interface IDispenserManager : IUnknown { HRESULT RegisterDispenser([in] IDispenserDriver *driver, [in] LPCOLESTR name, [out] IHolder **dispenser); HRESULT GetContext([out] INSTID *id, [out] TRANSID *transid); }; [ uuid(ecabb0c0-7f19-11d2-978e-0000f8757e2a), hidden, threading(both) ] coclass DispenserManager { [default] interface IDispenserManager; }; } ================================================ FILE: wine/windows/config.h ================================================ /* include/config.h. Generated from config.h.in by configure. */ /* include/config.h.in. Generated from configure.ac by autoheader. */ #ifndef __WINE_CONFIG_H #define __WINE_CONFIG_H #ifndef WINE_CROSSTEST /* Define to a function attribute for Microsoft hotpatch assembly prefix. */ #define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__)) /* Define to the file extension for executables. */ #define EXEEXT ".exe" /* Define to 1 if you have the `acosh' function. */ /* #undef HAVE_ACOSH */ /* Define to 1 if you have the `acoshf' function. */ /* #undef HAVE_ACOSHF */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ALIAS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ALSA_ASOUNDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AL_AL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H */ /* Define to 1 if you have the header file. */ #define HAVE_ARPA_INET_H 1 /* Define to 1 if you have the header file. */ #define HAVE_ARPA_NAMESER_H 1 /* Define to 1 if you have the `asctime_r' function. */ #define HAVE_ASCTIME_R 1 /* Define to 1 if you have the `asinh' function. */ /* #undef HAVE_ASINH */ /* Define to 1 if you have the `asinhf' function. */ /* #undef HAVE_ASINHF */ /* Define to 1 if you have the header file. */ #define HAVE_ASM_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_ASM_USER_H */ /* Define to 1 if you have the `atanh' function. */ /* #undef HAVE_ATANH */ /* Define to 1 if you have the `atanhf' function. */ /* #undef HAVE_ATANHF */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */ /* Define to 1 if you have the `AUGraphAddNode' function. */ /* #undef HAVE_AUGRAPHADDNODE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CAPI20_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CARBON_CARBON_H */ /* Define to 1 if you have the `cbrt' function. */ #define HAVE_CBRT 1 /* Define to 1 if you have the `cbrtf' function. */ #define HAVE_CBRTF 1 /* Define to 1 if you have the `chsize' function. */ /* #undef HAVE_CHSIZE */ /* Define to 1 if you have the `clock_gettime' function. */ #define HAVE_CLOCK_GETTIME 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CL_CL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_COMMONCRYPTO_COMMONCRYPTOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_COREAUDIO_COREAUDIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CORESERVICES_CORESERVICES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CUPS_CUPS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CUPS_PPD_H */ /* Define to 1 if you have the header file. */ #define HAVE_CURSES_H 1 /* Define if you have the daylight variable */ #define HAVE_DAYLIGHT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DIRECT_H */ /* Define to 1 if you have the header file. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */ /* Define to 1 if you have the `dladdr' function. */ /* #undef HAVE_DLADDR */ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `dlopen' function. */ #define HAVE_DLOPEN 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_EGL_EGL_H */ /* Define to 1 if you have the header file. */ #define HAVE_ELF_H 1 /* Define to 1 if you have the `epoll_create' function. */ /* #undef HAVE_EPOLL_CREATE */ /* Define to 1 if you have the `erf' function. */ /* #undef HAVE_ERF */ /* Define to 1 if you have the `erfc' function. */ /* #undef HAVE_ERFC */ /* Define to 1 if you have the `erfcf' function. */ /* #undef HAVE_ERFCF */ /* Define to 1 if you have the `erff' function. */ /* #undef HAVE_ERFF */ /* Define to 1 if you have the `exp2' function. */ #define HAVE_EXP2 1 /* Define to 1 if you have the `exp2f' function. */ #define HAVE_EXP2F 1 /* Define to 1 if you have the `expm1' function. */ /* #undef HAVE_EXPM1 */ /* Define to 1 if you have the `expm1f' function. */ /* #undef HAVE_EXPM1F */ /* Define to 1 if you have the `fallocate' function. */ /* #undef HAVE_FALLOCATE */ /* Define to 1 if you have the `ffs' function. */ #define HAVE_FFS 1 /* Define to 1 if you have the `finitef' function. */ #define HAVE_FINITEF 1 /* Define to 1 if you have the header file. */ #define HAVE_FLOAT_H 1 /* Define to 1 if you have the `fnmatch' function. */ #define HAVE_FNMATCH 1 /* Define to 1 if you have the header file. */ #define HAVE_FNMATCH_H 1 /* Define to 1 if you have the header file. */ #define HAVE_FONTCONFIG_FONTCONFIG_H 1 /* Define to 1 if you have the `fork' function. */ #define HAVE_FORK 1 /* Define to 1 if you have the `fpclass' function. */ /* #undef HAVE_FPCLASS */ /* Define if FreeType 2 is installed */ /* #undef HAVE_FREETYPE */ /* Define to 1 if the system has the type `fsblkcnt_t'. */ #define HAVE_FSBLKCNT_T 1 /* Define to 1 if the system has the type `fsfilcnt_t'. */ #define HAVE_FSFILCNT_T 1 /* Define to 1 if you have the `fstatfs' function. */ #define HAVE_FSTATFS 1 /* Define to 1 if you have the `fstatvfs' function. */ #define HAVE_FSTATVFS 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_FT2BUILD_H */ /* Define to 1 if you have the `ftruncate' function. */ #define HAVE_FTRUNCATE 1 /* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */ /* #undef HAVE_FT_TRUETYPEENGINETYPE */ /* Define to 1 if you have the `futimens' function. */ #define HAVE_FUTIMENS 1 /* Define to 1 if you have the `futimes' function. */ #define HAVE_FUTIMES 1 /* Define to 1 if you have the `futimesat' function. */ #define HAVE_FUTIMESAT 1 /* Define to 1 if you have the `getaddrinfo' function. */ #define HAVE_GETADDRINFO 1 /* Define to 1 if you have the `getattrlist' function. */ /* #undef HAVE_GETATTRLIST */ /* Define to 1 if you have the `getauxval' function. */ /* #undef HAVE_GETAUXVAL */ /* Define to 1 if you have the `getifaddrs' function. */ /* #undef HAVE_GETIFADDRS */ /* Define to 1 if you have the `getnameinfo' function. */ #define HAVE_GETNAMEINFO 1 /* Define to 1 if you have the `getnetbyname' function. */ /* #undef HAVE_GETNETBYNAME */ /* Define to 1 if you have the header file. */ #define HAVE_GETOPT_H 1 /* Define to 1 if you have the `getopt_long_only' function. */ #define HAVE_GETOPT_LONG_ONLY 1 /* Define to 1 if you have the `getprotobyname' function. */ #define HAVE_GETPROTOBYNAME 1 /* Define to 1 if you have the `getprotobynumber' function. */ #define HAVE_GETPROTOBYNUMBER 1 /* Define to 1 if you have the `getpwuid' function. */ #define HAVE_GETPWUID 1 /* Define to 1 if you have the `getservbyport' function. */ #define HAVE_GETSERVBYPORT 1 /* Define to 1 if you have the header file. */ #define HAVE_GETTEXT_PO_H 1 /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Define to 1 if you have the `getuid' function. */ #define HAVE_GETUID 1 /* Define to 1 if you have the `gnutls_cipher_init' function. */ /* #undef HAVE_GNUTLS_CIPHER_INIT */ /* Define if we have the libgphoto2 development environment */ /* #undef HAVE_GPHOTO2 */ /* Define if we have the libgphoto2_port development environment */ /* #undef HAVE_GPHOTO2_PORT */ /* Define to 1 if you have the header file. */ #define HAVE_GRP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_GSM_GSM_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_GSM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_EXT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_H */ /* Define to 1 if you have the header file. */ #define HAVE_IEEEFP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_IFADDRS_H 1 /* Define to 1 if you have the `if_nameindex' function. */ #define HAVE_IF_NAMEINDEX 1 /* Define to 1 if you have the `inet_addr' function. */ #define HAVE_INET_ADDR 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_INET_MIB2_H */ /* Define to 1 if you have the `inet_network' function. */ #define HAVE_INET_NETWORK 1 /* Define to 1 if you have the `inet_ntop' function. */ #define HAVE_INET_NTOP 1 /* Define to 1 if you have the `inet_pton' function. */ #define HAVE_INET_PTON 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `IOHIDManagerCreate' function. */ /* #undef HAVE_IOHIDMANAGERCREATE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IOKIT_HID_IOHIDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IOKIT_IOKITLIB_H */ /* Define to 1 if you have the header file. */ #define HAVE_IO_H 1 /* Define to 1 if you have the `isfinite' function. */ #define HAVE_ISFINITE 1 /* Define to 1 if you have the `isinf' function. */ #define HAVE_ISINF 1 /* Define to 1 if you have the `isnan' function. */ #define HAVE_ISNAN 1 /* Define to 1 if you have the `isnanf' function. */ #define HAVE_ISNANF 1 /* Define to 1 if you have the `j0' function. */ /* #undef HAVE_J0 */ /* Define to 1 if you have the `j1' function. */ /* #undef HAVE_J1 */ /* Define to 1 if you have the `jn' function. */ /* #undef HAVE_JN */ /* Define to 1 if you have the header file. */ #define HAVE_JPEGLIB_H 1 /* Define to 1 if you have the `kqueue' function. */ /* #undef HAVE_KQUEUE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_KRB5_KRB5_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_KSTAT_H */ /* Define to 1 if you have the header file. */ #define HAVE_LBER_H 1 /* Define if you have the LittleCMS development environment */ #define HAVE_LCMS2 1 /* Define to 1 if you have the header file. */ #define HAVE_LCMS2_H 1 /* Define if you have the OpenLDAP development environment */ #define HAVE_LDAP 1 /* Define to 1 if you have the `ldap_count_references' function. */ #define HAVE_LDAP_COUNT_REFERENCES 1 /* Define to 1 if you have the `ldap_first_reference' function. */ #define HAVE_LDAP_FIRST_REFERENCE 1 /* Define to 1 if you have the header file. */ #define HAVE_LDAP_H 1 /* Define to 1 if you have the `ldap_next_reference' function. */ #define HAVE_LDAP_NEXT_REFERENCE 1 /* Define to 1 if you have the `ldap_parse_reference' function. */ #define HAVE_LDAP_PARSE_REFERENCE 1 /* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */ #define HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL 1 /* Define to 1 if you have the `ldap_parse_sort_control' function. */ /* #undef HAVE_LDAP_PARSE_SORT_CONTROL */ /* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */ #define HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL 1 /* Define to 1 if you have the `ldap_parse_vlv_control' function. */ /* #undef HAVE_LDAP_PARSE_VLV_CONTROL */ /* Define to 1 if you have the `lgamma' function. */ /* #undef HAVE_LGAMMA */ /* Define to 1 if you have the `lgammaf' function. */ /* #undef HAVE_LGAMMAF */ /* Define to 1 if you have the `gettextpo' library (-lgettextpo). */ #define HAVE_LIBGETTEXTPO 1 /* Define to 1 if you have the `i386' library (-li386). */ /* #undef HAVE_LIBI386 */ /* Define to 1 if you have the `kstat' library (-lkstat). */ /* #undef HAVE_LIBKSTAT */ /* Define to 1 if you have the `ossaudio' library (-lossaudio). */ /* #undef HAVE_LIBOSSAUDIO */ /* Define to 1 if you have the `procstat' library (-lprocstat). */ /* #undef HAVE_LIBPROCSTAT */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBPROCSTAT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBPROC_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBUDEV_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBUNWIND_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBV4L1_H */ /* Define if you have the libxml2 library */ #define HAVE_LIBXML2 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_PARSER_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_SAX2_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_XMLSAVE_H 1 /* Define if you have the X Shape extension */ /* #undef HAVE_LIBXSHAPE */ /* Define to 1 if you have the header file. */ #define HAVE_LIBXSLT_PATTERN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXSLT_TRANSFORM_H 1 /* Define if you have the X Shm extension */ /* #undef HAVE_LIBXXSHM */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINK_H */ /* Define if defines the Linux 2.2 joystick API */ /* #undef HAVE_LINUX_22_JOYSTICK_API */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_CAPI_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_CDROM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_COMPILER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_FILTER_H */ /* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */ /* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_HDREG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_HIDRAW_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_INPUT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IOCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IPX_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IRDA_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_JOYSTICK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_MAJOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_PARAM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_RTNETLINK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_SERIAL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_TYPES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_UCDROM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_VIDEODEV2_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_VIDEODEV_H */ /* Define to 1 if you have the `llrint' function. */ #define HAVE_LLRINT 1 /* Define to 1 if you have the `llrintf' function. */ #define HAVE_LLRINTF 1 /* Define to 1 if you have the `llround' function. */ #define HAVE_LLROUND 1 /* Define to 1 if you have the `llroundf' function. */ #define HAVE_LLROUNDF 1 /* Define to 1 if you have the `log1p' function. */ /* #undef HAVE_LOG1P */ /* Define to 1 if you have the `log1pf' function. */ /* #undef HAVE_LOG1PF */ /* Define to 1 if you have the `log2' function. */ #define HAVE_LOG2 1 /* Define to 1 if you have the `log2f' function. */ #define HAVE_LOG2F 1 /* Define to 1 if the system has the type `long long'. */ #define HAVE_LONG_LONG 1 /* Define to 1 if you have the `lrint' function. */ #define HAVE_LRINT 1 /* Define to 1 if you have the `lrintf' function. */ #define HAVE_LRINTF 1 /* Define to 1 if you have the `lround' function. */ #define HAVE_LROUND 1 /* Define to 1 if you have the `lroundf' function. */ #define HAVE_LROUNDF 1 /* Define to 1 if you have the `lstat' function. */ #define HAVE_LSTAT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_LWP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_CPU_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_LIMITS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_SYSARCH_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_MACHINE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_MACH_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_DYLD_IMAGES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_LOADER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_NLIST_H */ /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_METAL_METAL_H */ /* Define to 1 if you have the `mmap' function. */ #define HAVE_MMAP 1 /* Define to 1 if you have the header file. */ #define HAVE_MNTENT_H 1 /* Define to 1 if the system has the type `mode_t'. */ #define HAVE_MODE_T 1 /* Define to 1 if you have the `mousemask' function. */ #define HAVE_MOUSEMASK 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_MPG123_H */ /* Define to 1 if you have the header file. */ #define HAVE_NCURSES_H 1 /* Define to 1 if you have the `nearbyint' function. */ /* #undef HAVE_NEARBYINT */ /* Define to 1 if you have the `nearbyintf' function. */ /* #undef HAVE_NEARBYINTF */ /* Define to 1 if you have the header file. */ #define HAVE_NETDB_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_ICMP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IF_ETHER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IF_INARP_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IN_PCB_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_SYSTM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IP_ICMP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_FSM_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_TCP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_TIMER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_VAR_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_UDP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_UDP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETIPX_IPX_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_ARP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_DL_H */ /* Define to 1 if you have the header file. */ #define HAVE_NET_IF_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_TYPES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_ROUTE_H */ /* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */ #define HAVE_NS_MSG__MSG_PTR 1 /* Define to 1 if the system has the type `off_t'. */ #define HAVE_OFF_T 1 /* Define if mkdir takes only one argument */ /* #undef HAVE_ONE_ARG_MKDIR */ /* Define to 1 if OpenAL is available */ /* #undef HAVE_OPENAL */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENAL_AL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENCL_OPENCL_H */ /* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */ /* #undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PCAP_PCAP_H */ /* Define to 1 if you have the `pclose' function. */ #define HAVE_PCLOSE 1 /* Define to 1 if the system has the type `pid_t'. */ #define HAVE_PID_T 1 /* Define to 1 if you have the `pipe2' function. */ #define HAVE_PIPE2 1 /* Define to 1 if you have the header file. */ #define HAVE_PNG_H 1 /* Define to 1 if you have the `poll' function. */ #define HAVE_POLL 1 /* Define to 1 if you have the header file. */ #define HAVE_POLL_H 1 /* Define to 1 if you have the `popen' function. */ #define HAVE_POPEN 1 /* Define to 1 if you have the `port_create' function. */ /* #undef HAVE_PORT_CREATE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PORT_H */ /* Define to 1 if you have the `powl' function. */ /* #undef HAVE_POWL */ /* Define if we can use ppdev.h for parallel port access */ /* #undef HAVE_PPDEV */ /* Define to 1 if you have the `prctl' function. */ /* #undef HAVE_PRCTL */ /* Define to 1 if you have the `pread' function. */ #define HAVE_PREAD 1 /* Define to 1 if you have the header file. */ #define HAVE_PROCESS_H 1 /* Define to 1 if you have the `proc_pidinfo' function. */ /* #undef HAVE_PROC_PIDINFO */ /* Define to 1 if you have the `pthread_attr_get_np' function. */ /* #undef HAVE_PTHREAD_ATTR_GET_NP */ /* Define to 1 if you have the `pthread_getattr_np' function. */ #define HAVE_PTHREAD_GETATTR_NP 1 /* Define to 1 if you have the `pthread_getthreadid_np' function. */ /* #undef HAVE_PTHREAD_GETTHREADID_NP */ /* Define to 1 if you have the `pthread_get_stackaddr_np' function. */ /* #undef HAVE_PTHREAD_GET_STACKADDR_NP */ /* Define to 1 if you have the `pthread_get_stacksize_np' function. */ /* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */ /* Define to 1 if you have the header file. */ #define HAVE_PTHREAD_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_PTHREAD_NP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PULSE_PULSEAUDIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_PWD_H 1 /* Define to 1 if you have the `pwrite' function. */ #define HAVE_PWRITE 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_QUICKTIME_IMAGECOMPRESSION_H */ /* Define to 1 if you have the `readdir' function. */ #define HAVE_READDIR 1 /* Define to 1 if you have the `readlink' function. */ #define HAVE_READLINK 1 /* Define to 1 if you have the `remainder' function. */ /* #undef HAVE_REMAINDER */ /* Define to 1 if you have the `remainderf' function. */ /* #undef HAVE_REMAINDERF */ /* Define to 1 if the system has the type `request_sense'. */ /* #undef HAVE_REQUEST_SENSE */ /* Define if you have the resolver library and header */ #define HAVE_RESOLV 1 /* Define to 1 if you have the header file. */ #define HAVE_RESOLV_H 1 /* Define to 1 if you have the `rint' function. */ #define HAVE_RINT 1 /* Define to 1 if you have the `rintf' function. */ #define HAVE_RINTF 1 /* Define to 1 if you have the `round' function. */ #define HAVE_ROUND 1 /* Define to 1 if you have the `roundf' function. */ #define HAVE_ROUNDF 1 /* Define to 1 if you have the header file. */ #define HAVE_SCHED_H 1 /* Define to 1 if you have the `sched_setaffinity' function. */ /* #undef HAVE_SCHED_SETAFFINITY */ /* Define to 1 if you have the `sched_yield' function. */ #define HAVE_SCHED_YIELD 1 /* Define to 1 if `cmd' is a member of `scsireq_t'. */ /* #undef HAVE_SCSIREQ_T_CMD */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SCSI_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SCSI_IOCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SDL2_SDL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SECURITY_SECURITY_H */ /* Define to 1 if you have the `select' function. */ #define HAVE_SELECT 1 /* Define to 1 if you have the `sendmsg' function. */ #define HAVE_SENDMSG 1 /* Define to 1 if you have the `setproctitle' function. */ /* #undef HAVE_SETPROCTITLE */ /* Define to 1 if you have the `setprogname' function. */ /* #undef HAVE_SETPROGNAME */ /* Define to 1 if you have the `setrlimit' function. */ #define HAVE_SETRLIMIT 1 /* Define to 1 if you have the `settimeofday' function. */ #define HAVE_SETTIMEOFDAY 1 /* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */ /* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */ /* Define if sigaddset is supported */ #define HAVE_SIGADDSET 1 /* Define to 1 if you have the `sigaltstack' function. */ /* #undef HAVE_SIGALTSTACK */ /* Define to 1 if `si_fd' is a member of `siginfo_t'. */ /* #undef HAVE_SIGINFO_T_SI_FD */ /* Define to 1 if you have the `sigprocmask' function. */ #define HAVE_SIGPROCMASK 1 /* Define to 1 if the system has the type `sigset_t'. */ #define HAVE_SIGSET_T 1 /* Define to 1 if the system has the type `size_t'. */ #define HAVE_SIZE_T 1 /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 /* Define to 1 if you have the `socketpair' function. */ #define HAVE_SOCKETPAIR 1 /* Define to 1 if the system has the type `ssize_t'. */ #define HAVE_SSIZE_T 1 /* Define to 1 if you have the `SSLCopyPeerCertificates' function. */ /* #undef HAVE_SSLCOPYPEERCERTIFICATES */ /* Define to 1 if you have the `statfs' function. */ #define HAVE_STATFS 1 /* Define to 1 if you have the `statvfs' function. */ #define HAVE_STATVFS 1 /* Define to 1 if you have the header file. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #define HAVE_STRERROR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strncasecmp' function. */ #define HAVE_STRNCASECMP 1 /* Define to 1 if you have the `strnlen' function. */ /* #undef HAVE_STRNLEN */ /* Define to 1 if you have the header file. */ /* #undef HAVE_STROPTS_H */ /* Define to 1 if you have the `strtold' function. */ #define HAVE_STRTOLD 1 /* Define to 1 if you have the `strtoll' function. */ #define HAVE_STRTOLL 1 /* Define to 1 if you have the `strtoull' function. */ #define HAVE_STRTOULL 1 /* Define to 1 if `d_reclen' is a member of `struct dirent'. */ /* #undef HAVE_STRUCT_DIRENT_D_RECLEN */ /* Define to 1 if `direction' is a member of `struct ff_effect'. */ /* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */ /* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */ /* #undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST */ /* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */ /* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */ /* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */ #define HAVE_STRUCT_IFREQ_IFR_HWADDR 1 /* Define to 1 if `ips_total' is a member of `struct ipstat'. */ /* #undef HAVE_STRUCT_IPSTAT_IPS_TOTAL */ /* Define to 1 if `ips_total' is a member of `struct ip_stats'. */ /* #undef HAVE_STRUCT_IP_STATS_IPS_TOTAL */ /* Define to 1 if the system has the type `struct link_map'. */ /* #undef HAVE_STRUCT_LINK_MAP */ /* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */ /* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */ /* Define to 1 if `mt_blkno' is a member of `struct mtget'. */ #define HAVE_STRUCT_MTGET_MT_BLKNO 1 /* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */ /* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */ /* Define to 1 if `mt_gstat' is a member of `struct mtget'. */ #define HAVE_STRUCT_MTGET_MT_GSTAT 1 /* Define to 1 if `name' is a member of `struct option'. */ #define HAVE_STRUCT_OPTION_NAME 1 /* Define to 1 if the system has the type `struct r_debug'. */ /* #undef HAVE_STRUCT_R_DEBUG */ /* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */ #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1 /* Define to 1 if `sa_len' is a member of `struct sockaddr'. */ /* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */ /* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */ /* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */ /* Define to 1 if `f_bavail' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_BAVAIL 1 /* Define to 1 if `f_bfree' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_BFREE 1 /* Define to 1 if `f_favail' is a member of `struct statfs'. */ /* #undef HAVE_STRUCT_STATFS_F_FAVAIL */ /* Define to 1 if `f_ffree' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_FFREE 1 /* Define to 1 if `f_frsize' is a member of `struct statfs'. */ /* #undef HAVE_STRUCT_STATFS_F_FRSIZE */ /* Define to 1 if `f_namelen' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_NAMELEN 1 /* Define to 1 if `f_blocks' is a member of `struct statvfs'. */ #define HAVE_STRUCT_STATVFS_F_BLOCKS 1 /* Define to 1 if `st_atim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_ATIM 1 /* Define to 1 if `st_atimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC */ /* Define to 1 if `st_birthtim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BIRTHTIM 1 /* Define to 1 if `st_birthtime' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BIRTHTIME 1 /* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC */ /* Define to 1 if `st_blocks' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BLOCKS 1 /* Define to 1 if `st_ctim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_CTIM 1 /* Define to 1 if `st_ctimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_CTIMESPEC */ /* Define to 1 if `st_mtim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_MTIM 1 /* Define to 1 if `st_mtimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_MTIMESPEC */ /* Define to 1 if `__st_birthtim' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT___ST_BIRTHTIM */ /* Define to 1 if `__st_birthtime' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT___ST_BIRTHTIME */ /* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */ /* #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT */ /* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */ /* #undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT */ /* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */ /* #undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS */ /* Define to 1 if the system has the type `struct xinpgen'. */ /* #undef HAVE_STRUCT_XINPGEN */ /* Define to 1 if the system has the type `struct __res_state'. */ #define HAVE_STRUCT___RES_STATE 1 /* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */ /* #undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6 */ /* Define to 1 if you have the `symlink' function. */ #define HAVE_SYMLINK 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYSCALL_H */ /* Define to 1 if you have the `sysinfo' function. */ /* #undef HAVE_SYSINFO */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ASOUNDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ATTR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_AUXV_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_CDIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_ELF32_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EPOLL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EVENT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EXEC_ELF_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_FILIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_INOTIFY_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_IPC_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LIMITS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LINK_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_MMAN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_MODEM_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_MOUNT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_MSG_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_MTIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_POLL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PRCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PROTOSW_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PTRACE_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_QUEUE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_RESOURCE_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SCSIIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SHM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SIGNAL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SOCKETVAR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SOCKIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATVFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_STRTIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSCALL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSINFO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_THR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TIHDR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TIMEOUT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_UCONTEXT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_UIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_USER_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_UTSNAME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_VFS_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_VM86_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_VNODE_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_WAIT_H 1 /* Define to 1 if you have the `tcdrain' function. */ #define HAVE_TCDRAIN 1 /* Define to 1 if you have the header file. */ #define HAVE_TERMIOS_H 1 /* Define to 1 if you have the `thr_kill2' function. */ /* #undef HAVE_THR_KILL2 */ /* Define to 1 if you have the header file. */ #define HAVE_TIFFIO_H 1 /* Define to 1 if you have the `timegm' function. */ #define HAVE_TIMEGM 1 /* Define if you have the timezone variable */ #define HAVE_TIMEZONE 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the `truncf' function. */ #define HAVE_TRUNCF 1 /* Define to 1 if you have the `udev' library (-ludev). */ /* #undef HAVE_UDEV */ /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the `usleep' function. */ #define HAVE_USLEEP 1 /* Define to 1 if you have the header file. */ #define HAVE_UTIME_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_VALGRIND_MEMCHECK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_VALGRIND_VALGRIND_H */ /* Define to 1 if you have the `vsnprintf' function. */ #define HAVE_VSNPRINTF 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_SHAPE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XFIXES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINPUT2_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINPUT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XRANDR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XRENDER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XSHM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XCURSOR_XCURSOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XKBLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XUTIL_H */ /* Define to 1 if `xcookie' is a member of `XEvent'. */ /* #undef HAVE_XEVENT_XCOOKIE */ /* Define to 1 if `callback' is a member of `XICCallback'. */ /* #undef HAVE_XICCALLBACK_CALLBACK */ /* Define if you have the XKB extension */ /* #undef HAVE_XKB */ /* Define if libxml2 has the xmlDocProperties enum */ #define HAVE_XMLDOC_PROPERTIES 1 /* Define if libxml2 has the xmlFirstElementChild function */ #define HAVE_XMLFIRSTELEMENTCHILD 1 /* Define if libxml2 has the xmlNewDocPI function */ #define HAVE_XMLNEWDOCPI 1 /* Define if libxml2 has the xmlReadMemory function */ #define HAVE_XMLREADMEMORY 1 /* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */ #define HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS 1 /* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */ #define HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS 1 /* Define if Xrender has the XRenderCreateLinearGradient function */ /* #undef HAVE_XRENDERCREATELINEARGRADIENT */ /* Define if Xrender has the XRenderSetPictureTransform function */ /* #undef HAVE_XRENDERSETPICTURETRANSFORM */ /* Define if Xrandr has the XRRGetScreenResources function */ /* #undef HAVE_XRRGETSCREENRESOURCES */ /* Define to 1 if you have the `y0' function. */ /* #undef HAVE_Y0 */ /* Define to 1 if you have the `y1' function. */ /* #undef HAVE_Y1 */ /* Define to 1 if you have the `yn' function. */ /* #undef HAVE_YN */ /* Define to 1 if you have the `z' library (-lz). */ #define HAVE_ZLIB 1 /* Define to 1 if you have the header file. */ #define HAVE_ZLIB_H 1 /* Define to 1 if you have the `_finite' function. */ /* #undef HAVE__FINITE */ /* Define to 1 if you have the `_isnan' function. */ /* #undef HAVE__ISNAN */ /* Define to 1 if you have the `_pclose' function. */ /* #undef HAVE__PCLOSE */ /* Define to 1 if you have the `_popen' function. */ /* #undef HAVE__POPEN */ /* Define to 1 if you have the `_snprintf' function. */ /* #undef HAVE__SNPRINTF */ /* Define to 1 if you have the `_spawnvp' function. */ /* #undef HAVE__SPAWNVP */ /* Define to 1 if you have the `_strdup' function. */ /* #undef HAVE__STRDUP */ /* Define to 1 if you have the `_stricmp' function. */ /* #undef HAVE__STRICMP */ /* Define to 1 if you have the `_strnicmp' function. */ /* #undef HAVE__STRNICMP */ /* Define to 1 if you have the `_strtoi64' function. */ /* #undef HAVE__STRTOI64 */ /* Define to 1 if you have the `_strtoui64' function. */ /* #undef HAVE__STRTOUI64 */ /* Define to 1 if you have the `_vsnprintf' function. */ /* #undef HAVE__VSNPRINTF */ /* Define to 1 if you have the `__builtin_clz' built-in function. */ #define HAVE___BUILTIN_CLZ 1 /* Define to 1 if you have the `__builtin_popcount' built-in function. */ /* #undef HAVE___BUILTIN_POPCOUNT */ /* Define to 1 if you have the `__clear_cache' (potentially built-in) function. */ /* #undef HAVE___CLEAR_CACHE */ /* Define to 1 if you have the `__res_getservers' function. */ /* #undef HAVE___RES_GETSERVERS */ /* Define to 1 if you have the `__res_get_state' function. */ /* #undef HAVE___RES_GET_STATE */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ /* #undef MAJOR_IN_MKDEV */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ /* #undef MAJOR_IN_SYSMACROS */ /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "wine-devel@winehq.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "Wine" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "Wine 1.7.35" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "wine" /* Define to the home page for this package. */ #define PACKAGE_URL "http://www.winehq.org" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.7.35" /* Define to the soname of the libcapi20 library. */ /* #undef SONAME_LIBCAPI20 */ /* Define to the soname of the libcups library. */ /* #undef SONAME_LIBCUPS */ /* Define to the soname of the libcurses library. */ /* #undef SONAME_LIBCURSES */ /* Define to the soname of the libdbus-1 library. */ #define SONAME_LIBDBUS_1 " cygdbus-1-3.dll" /* Define to the soname of the libEGL library. */ /* #undef SONAME_LIBEGL */ /* Define to the soname of the libfontconfig library. */ #define SONAME_LIBFONTCONFIG " cygfontconfig-1.dll" /* Define to the soname of the libfreetype library. */ /* #undef SONAME_LIBFREETYPE */ /* Define to the soname of the libGL library. */ /* #undef SONAME_LIBGL */ /* Define to the soname of the libGLESv2 library. */ /* #undef SONAME_LIBGLESV2 */ /* Define to the soname of the libGLU library. */ /* #undef SONAME_LIBGLU */ /* Define to the soname of the libgnutls library. */ #define SONAME_LIBGNUTLS " cyggnutls-28.dll" /* Define to the soname of the libgsm library. */ #define SONAME_LIBGSM " cyggsm-1.dll" /* Define to the soname of the libgssapi_krb5 library. */ /* #undef SONAME_LIBGSSAPI_KRB5 */ /* Define to the soname of the libhal library. */ /* #undef SONAME_LIBHAL */ /* Define to the soname of the libjpeg library. */ #define SONAME_LIBJPEG " cygjpeg-8.dll" /* Define to the soname of the libkrb5 library. */ /* #undef SONAME_LIBKRB5 */ /* Define to the soname of the libMoltenVK library. */ /* #undef SONAME_LIBMOLTENVK */ /* Define to the soname of the libncurses library. */ #define SONAME_LIBNCURSES " cygncursesw-10.dll" /* Define to the soname of the libnetapi library. */ #define SONAME_LIBNETAPI "libnetapi.dll" /* Define to the soname of the libodbc library. */ #define SONAME_LIBODBC " cygiodbc-2.dll" /* Define to the soname of the libopenal library. */ /* #undef SONAME_LIBOPENAL */ /* Define to the soname of the libOSMesa library. */ /* #undef SONAME_LIBOSMESA */ /* Define to the soname of the libpng library. */ #define SONAME_LIBPNG " cygpng15-15.dll" /* Define to the soname of the libsane library. */ /* #undef SONAME_LIBSANE */ /* Define to the soname of the libSDL2 library. */ /* #undef SONAME_LIBSDL2 */ /* Define to the soname of the libtiff library. */ #define SONAME_LIBTIFF " cygtiff-5.dll" /* Define to the soname of the libv4l1 library. */ /* #undef SONAME_LIBV4L1 */ /* Define to the soname of the libvkd3d library. */ /* #undef SONAME_LIBVKD3D */ /* Define to the soname of the libvulkan library. */ /* #undef SONAME_LIBVULKAN */ /* Define to the soname of the libX11 library. */ /* #undef SONAME_LIBX11 */ /* Define to the soname of the libXcomposite library. */ /* #undef SONAME_LIBXCOMPOSITE */ /* Define to the soname of the libXcursor library. */ /* #undef SONAME_LIBXCURSOR */ /* Define to the soname of the libXext library. */ /* #undef SONAME_LIBXEXT */ /* Define to the soname of the libXfixes library. */ /* #undef SONAME_LIBXFIXES */ /* Define to the soname of the libXi library. */ /* #undef SONAME_LIBXI */ /* Define to the soname of the libXinerama library. */ /* #undef SONAME_LIBXINERAMA */ /* Define to the soname of the libXrandr library. */ /* #undef SONAME_LIBXRANDR */ /* Define to the soname of the libXrender library. */ /* #undef SONAME_LIBXRENDER */ /* Define to the soname of the libxslt library. */ #define SONAME_LIBXSLT " cygxslt-1.dll" /* Define to the soname of the libXxf86vm library. */ /* #undef SONAME_LIBXXF86VM */ /* Define to 1 if the `S_IS*' macros in do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if the X Window System is missing or not being used. */ #define X_DISPLAY_MISSING 1 /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ /* Define to a macro to output a .cfi assembly pseudo-op */ #define __ASM_CFI(str) str /* Define to a macro to define an assembly function */ #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"); /* Define to a macro to generate an assembly function directive */ #define __ASM_FUNC(name) ".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef" /* Define to a macro to generate an assembly function with C calling convention */ #define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code) /* Define to a macro to generate an assembly name from a C symbol */ #define __ASM_NAME(name) name /* Define to a macro to generate an stdcall suffix */ #define __ASM_STDCALL(args) "" /* Define to a macro to generate an assembly function with stdcall calling convention */ #define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code) /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif #endif /* WINE_CROSSTEST */ #endif /* __WINE_CONFIG_H */ ================================================ FILE: wine/windows/config.h.in ================================================ /* include/config.h.in. Generated from configure.ac by autoheader. */ #ifndef __WINE_CONFIG_H #define __WINE_CONFIG_H #ifndef WINE_CROSSTEST /* Define to a function attribute for Microsoft hotpatch assembly prefix. */ #undef DECLSPEC_HOTPATCH /* Define to the file extension for executables. */ #undef EXEEXT /* Define to 1 if you have the `acosh' function. */ #undef HAVE_ACOSH /* Define to 1 if you have the `acoshf' function. */ #undef HAVE_ACOSHF /* Define to 1 if you have the header file. */ #undef HAVE_ALIAS_H /* Define to 1 if you have the header file. */ #undef HAVE_ALSA_ASOUNDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_AL_AL_H /* Define to 1 if you have the header file. */ #undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_NAMESER_H /* Define to 1 if you have the `asctime_r' function. */ #undef HAVE_ASCTIME_R /* Define to 1 if you have the `asinh' function. */ #undef HAVE_ASINH /* Define to 1 if you have the `asinhf' function. */ #undef HAVE_ASINHF /* Define to 1 if you have the header file. */ #undef HAVE_ASM_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_ASM_USER_H /* Define to 1 if you have the `atanh' function. */ #undef HAVE_ATANH /* Define to 1 if you have the `atanhf' function. */ #undef HAVE_ATANHF /* Define to 1 if you have the header file. */ #undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H /* Define to 1 if you have the header file. */ #undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H /* Define to 1 if you have the header file. */ #undef HAVE_AUDIOUNIT_AUDIOUNIT_H /* Define to 1 if you have the `AUGraphAddNode' function. */ #undef HAVE_AUGRAPHADDNODE /* Define to 1 if you have the header file. */ #undef HAVE_CAPI20_H /* Define to 1 if you have the header file. */ #undef HAVE_CARBON_CARBON_H /* Define to 1 if you have the `cbrt' function. */ #undef HAVE_CBRT /* Define to 1 if you have the `cbrtf' function. */ #undef HAVE_CBRTF /* Define to 1 if you have the `chsize' function. */ #undef HAVE_CHSIZE /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME /* Define to 1 if you have the header file. */ #undef HAVE_CL_CL_H /* Define to 1 if you have the header file. */ #undef HAVE_COMMONCRYPTO_COMMONCRYPTOR_H /* Define to 1 if you have the header file. */ #undef HAVE_COREAUDIO_COREAUDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_CORESERVICES_CORESERVICES_H /* Define to 1 if you have the header file. */ #undef HAVE_CUPS_CUPS_H /* Define to 1 if you have the header file. */ #undef HAVE_CUPS_PPD_H /* Define to 1 if you have the header file. */ #undef HAVE_CURSES_H /* Define if you have the daylight variable */ #undef HAVE_DAYLIGHT /* Define to 1 if you have the header file. */ #undef HAVE_DIRECT_H /* Define to 1 if you have the header file. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DISKARBITRATION_DISKARBITRATION_H /* Define to 1 if you have the `dladdr' function. */ #undef HAVE_DLADDR /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `dlopen' function. */ #undef HAVE_DLOPEN /* Define to 1 if you have the header file. */ #undef HAVE_EGL_EGL_H /* Define to 1 if you have the header file. */ #undef HAVE_ELF_H /* Define to 1 if you have the `epoll_create' function. */ #undef HAVE_EPOLL_CREATE /* Define to 1 if you have the `erf' function. */ #undef HAVE_ERF /* Define to 1 if you have the `erfc' function. */ #undef HAVE_ERFC /* Define to 1 if you have the `erfcf' function. */ #undef HAVE_ERFCF /* Define to 1 if you have the `erff' function. */ #undef HAVE_ERFF /* Define to 1 if you have the `exp2' function. */ #undef HAVE_EXP2 /* Define to 1 if you have the `exp2f' function. */ #undef HAVE_EXP2F /* Define to 1 if you have the `expm1' function. */ #undef HAVE_EXPM1 /* Define to 1 if you have the `expm1f' function. */ #undef HAVE_EXPM1F /* Define to 1 if you have the `fallocate' function. */ #undef HAVE_FALLOCATE /* Define to 1 if you have the `ffs' function. */ #undef HAVE_FFS /* Define to 1 if you have the `finitef' function. */ #undef HAVE_FINITEF /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the `fnmatch' function. */ #undef HAVE_FNMATCH /* Define to 1 if you have the header file. */ #undef HAVE_FNMATCH_H /* Define to 1 if you have the header file. */ #undef HAVE_FONTCONFIG_FONTCONFIG_H /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `fpclass' function. */ #undef HAVE_FPCLASS /* Define if FreeType 2 is installed */ #undef HAVE_FREETYPE /* Define to 1 if the system has the type `fsblkcnt_t'. */ #undef HAVE_FSBLKCNT_T /* Define to 1 if the system has the type `fsfilcnt_t'. */ #undef HAVE_FSFILCNT_T /* Define to 1 if you have the `fstatfs' function. */ #undef HAVE_FSTATFS /* Define to 1 if you have the `fstatvfs' function. */ #undef HAVE_FSTATVFS /* Define to 1 if you have the header file. */ #undef HAVE_FT2BUILD_H /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */ #undef HAVE_FT_TRUETYPEENGINETYPE /* Define to 1 if you have the `futimens' function. */ #undef HAVE_FUTIMENS /* Define to 1 if you have the `futimes' function. */ #undef HAVE_FUTIMES /* Define to 1 if you have the `futimesat' function. */ #undef HAVE_FUTIMESAT /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Define to 1 if you have the `getattrlist' function. */ #undef HAVE_GETATTRLIST /* Define to 1 if you have the `getauxval' function. */ #undef HAVE_GETAUXVAL /* Define to 1 if you have the `getifaddrs' function. */ #undef HAVE_GETIFADDRS /* Define to 1 if you have the `getnameinfo' function. */ #undef HAVE_GETNAMEINFO /* Define to 1 if you have the `getnetbyname' function. */ #undef HAVE_GETNETBYNAME /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long_only' function. */ #undef HAVE_GETOPT_LONG_ONLY /* Define to 1 if you have the `getprotobyname' function. */ #undef HAVE_GETPROTOBYNAME /* Define to 1 if you have the `getprotobynumber' function. */ #undef HAVE_GETPROTOBYNUMBER /* Define to 1 if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define to 1 if you have the `getservbyport' function. */ #undef HAVE_GETSERVBYPORT /* Define to 1 if you have the header file. */ #undef HAVE_GETTEXT_PO_H /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the `getuid' function. */ #undef HAVE_GETUID /* Define to 1 if you have the `gnutls_cipher_init' function. */ #undef HAVE_GNUTLS_CIPHER_INIT /* Define if we have the libgphoto2 development environment */ #undef HAVE_GPHOTO2 /* Define if we have the libgphoto2_port development environment */ #undef HAVE_GPHOTO2_PORT /* Define to 1 if you have the header file. */ #undef HAVE_GRP_H /* Define to 1 if you have the header file. */ #undef HAVE_GSM_GSM_H /* Define to 1 if you have the header file. */ #undef HAVE_GSM_H /* Define to 1 if you have the header file. */ #undef HAVE_GSSAPI_GSSAPI_EXT_H /* Define to 1 if you have the header file. */ #undef HAVE_GSSAPI_GSSAPI_H /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if you have the header file. */ #undef HAVE_IFADDRS_H /* Define to 1 if you have the `if_nameindex' function. */ #undef HAVE_IF_NAMEINDEX /* Define to 1 if you have the `inet_addr' function. */ #undef HAVE_INET_ADDR /* Define to 1 if you have the header file. */ #undef HAVE_INET_MIB2_H /* Define to 1 if you have the `inet_network' function. */ #undef HAVE_INET_NETWORK /* Define to 1 if you have the `inet_ntop' function. */ #undef HAVE_INET_NTOP /* Define to 1 if you have the `inet_pton' function. */ #undef HAVE_INET_PTON /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `IOHIDManagerCreate' function. */ #undef HAVE_IOHIDMANAGERCREATE /* Define to 1 if you have the header file. */ #undef HAVE_IOKIT_HID_IOHIDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_IOKIT_IOKITLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_IO_H /* Define to 1 if you have the `isfinite' function. */ #undef HAVE_ISFINITE /* Define to 1 if you have the `isinf' function. */ #undef HAVE_ISINF /* Define to 1 if you have the `isnan' function. */ #undef HAVE_ISNAN /* Define to 1 if you have the `isnanf' function. */ #undef HAVE_ISNANF /* Define to 1 if you have the `j0' function. */ #undef HAVE_J0 /* Define to 1 if you have the `j1' function. */ #undef HAVE_J1 /* Define to 1 if you have the `jn' function. */ #undef HAVE_JN /* Define to 1 if you have the header file. */ #undef HAVE_JPEGLIB_H /* Define to 1 if you have the `kqueue' function. */ #undef HAVE_KQUEUE /* Define to 1 if you have the header file. */ #undef HAVE_KRB5_KRB5_H /* Define to 1 if you have the header file. */ #undef HAVE_KSTAT_H /* Define to 1 if you have the header file. */ #undef HAVE_LBER_H /* Define if you have the LittleCMS development environment */ #undef HAVE_LCMS2 /* Define to 1 if you have the header file. */ #undef HAVE_LCMS2_H /* Define if you have the OpenLDAP development environment */ #undef HAVE_LDAP /* Define to 1 if you have the `ldap_count_references' function. */ #undef HAVE_LDAP_COUNT_REFERENCES /* Define to 1 if you have the `ldap_first_reference' function. */ #undef HAVE_LDAP_FIRST_REFERENCE /* Define to 1 if you have the header file. */ #undef HAVE_LDAP_H /* Define to 1 if you have the `ldap_next_reference' function. */ #undef HAVE_LDAP_NEXT_REFERENCE /* Define to 1 if you have the `ldap_parse_reference' function. */ #undef HAVE_LDAP_PARSE_REFERENCE /* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */ #undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL /* Define to 1 if you have the `ldap_parse_sort_control' function. */ #undef HAVE_LDAP_PARSE_SORT_CONTROL /* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */ #undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL /* Define to 1 if you have the `ldap_parse_vlv_control' function. */ #undef HAVE_LDAP_PARSE_VLV_CONTROL /* Define to 1 if you have the `lgamma' function. */ #undef HAVE_LGAMMA /* Define to 1 if you have the `lgammaf' function. */ #undef HAVE_LGAMMAF /* Define to 1 if you have the `gettextpo' library (-lgettextpo). */ #undef HAVE_LIBGETTEXTPO /* Define to 1 if you have the `i386' library (-li386). */ #undef HAVE_LIBI386 /* Define to 1 if you have the `kstat' library (-lkstat). */ #undef HAVE_LIBKSTAT /* Define to 1 if you have the `ossaudio' library (-lossaudio). */ #undef HAVE_LIBOSSAUDIO /* Define to 1 if you have the `procstat' library (-lprocstat). */ #undef HAVE_LIBPROCSTAT /* Define to 1 if you have the header file. */ #undef HAVE_LIBPROCSTAT_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBPROC_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBUDEV_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBUNWIND_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBV4L1_H /* Define if you have the libxml2 library */ #undef HAVE_LIBXML2 /* Define to 1 if you have the header file. */ #undef HAVE_LIBXML_PARSER_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBXML_SAX2_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBXML_XMLSAVE_H /* Define if you have the X Shape extension */ #undef HAVE_LIBXSHAPE /* Define to 1 if you have the header file. */ #undef HAVE_LIBXSLT_PATTERN_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBXSLT_TRANSFORM_H /* Define if you have the X Shm extension */ #undef HAVE_LIBXXSHM /* Define to 1 if you have the header file. */ #undef HAVE_LINK_H /* Define if defines the Linux 2.2 joystick API */ #undef HAVE_LINUX_22_JOYSTICK_API /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_CAPI_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_CDROM_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_COMPILER_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_FILTER_H /* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */ #undef HAVE_LINUX_GETHOSTBYNAME_R_6 /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_HDREG_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_HIDRAW_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_INPUT_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_IPX_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_IRDA_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_JOYSTICK_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_MAJOR_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_RTNETLINK_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_SERIAL_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_UCDROM_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_VIDEODEV2_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_VIDEODEV_H /* Define to 1 if you have the `llrint' function. */ #undef HAVE_LLRINT /* Define to 1 if you have the `llrintf' function. */ #undef HAVE_LLRINTF /* Define to 1 if you have the `llround' function. */ #undef HAVE_LLROUND /* Define to 1 if you have the `llroundf' function. */ #undef HAVE_LLROUNDF /* Define to 1 if you have the `log1p' function. */ #undef HAVE_LOG1P /* Define to 1 if you have the `log1pf' function. */ #undef HAVE_LOG1PF /* Define to 1 if you have the `log2' function. */ #undef HAVE_LOG2 /* Define to 1 if you have the `log2f' function. */ #undef HAVE_LOG2F /* Define to 1 if the system has the type `long long'. */ #undef HAVE_LONG_LONG /* Define to 1 if you have the `lrint' function. */ #undef HAVE_LRINT /* Define to 1 if you have the `lrintf' function. */ #undef HAVE_LRINTF /* Define to 1 if you have the `lround' function. */ #undef HAVE_LROUND /* Define to 1 if you have the `lroundf' function. */ #undef HAVE_LROUNDF /* Define to 1 if you have the `lstat' function. */ #undef HAVE_LSTAT /* Define to 1 if you have the header file. */ #undef HAVE_LWP_H /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_CPU_H /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_SYSARCH_H /* Define to 1 if you have the header file. */ #undef HAVE_MACH_MACHINE_H /* Define to 1 if you have the header file. */ #undef HAVE_MACH_MACH_H /* Define to 1 if you have the header file. */ #undef HAVE_MACH_O_DYLD_IMAGES_H /* Define to 1 if you have the header file. */ #undef HAVE_MACH_O_LOADER_H /* Define to 1 if you have the header file. */ #undef HAVE_MACH_O_NLIST_H /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_METAL_METAL_H /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP /* Define to 1 if you have the header file. */ #undef HAVE_MNTENT_H /* Define to 1 if the system has the type `mode_t'. */ #undef HAVE_MODE_T /* Define to 1 if you have the `mousemask' function. */ #undef HAVE_MOUSEMASK /* Define to 1 if you have the header file. */ #undef HAVE_MPG123_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_H /* Define to 1 if you have the `nearbyint' function. */ #undef HAVE_NEARBYINT /* Define to 1 if you have the `nearbyintf' function. */ #undef HAVE_NEARBYINTF /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_ICMP_VAR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IF_ETHER_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IF_INARP_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_PCB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_SYSTM_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IP_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IP_ICMP_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IP_VAR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_FSM_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_TIMER_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_VAR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_UDP_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_UDP_VAR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETIPX_IPX_H /* Define to 1 if you have the header file. */ #undef HAVE_NET_IF_ARP_H /* Define to 1 if you have the header file. */ #undef HAVE_NET_IF_DL_H /* Define to 1 if you have the header file. */ #undef HAVE_NET_IF_H /* Define to 1 if you have the header file. */ #undef HAVE_NET_IF_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_NET_ROUTE_H /* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */ #undef HAVE_NS_MSG__MSG_PTR /* Define to 1 if the system has the type `off_t'. */ #undef HAVE_OFF_T /* Define if mkdir takes only one argument */ #undef HAVE_ONE_ARG_MKDIR /* Define to 1 if OpenAL is available */ #undef HAVE_OPENAL /* Define to 1 if you have the header file. */ #undef HAVE_OPENAL_AL_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENCL_OPENCL_H /* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */ #undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES /* Define to 1 if you have the header file. */ #undef HAVE_PCAP_PCAP_H /* Define to 1 if you have the `pclose' function. */ #undef HAVE_PCLOSE /* Define to 1 if the system has the type `pid_t'. */ #undef HAVE_PID_T /* Define to 1 if you have the `pipe2' function. */ #undef HAVE_PIPE2 /* Define to 1 if you have the header file. */ #undef HAVE_PNG_H /* Define to 1 if you have the `poll' function. */ #undef HAVE_POLL /* Define to 1 if you have the header file. */ #undef HAVE_POLL_H /* Define to 1 if you have the `popen' function. */ #undef HAVE_POPEN /* Define to 1 if you have the `port_create' function. */ #undef HAVE_PORT_CREATE /* Define to 1 if you have the header file. */ #undef HAVE_PORT_H /* Define to 1 if you have the `powl' function. */ #undef HAVE_POWL /* Define if we can use ppdev.h for parallel port access */ #undef HAVE_PPDEV /* Define to 1 if you have the `prctl' function. */ #undef HAVE_PRCTL /* Define to 1 if you have the `pread' function. */ #undef HAVE_PREAD /* Define to 1 if you have the header file. */ #undef HAVE_PROCESS_H /* Define to 1 if you have the `proc_pidinfo' function. */ #undef HAVE_PROC_PIDINFO /* Define to 1 if you have the `pthread_attr_get_np' function. */ #undef HAVE_PTHREAD_ATTR_GET_NP /* Define to 1 if you have the `pthread_getattr_np' function. */ #undef HAVE_PTHREAD_GETATTR_NP /* Define to 1 if you have the `pthread_getthreadid_np' function. */ #undef HAVE_PTHREAD_GETTHREADID_NP /* Define to 1 if you have the `pthread_get_stackaddr_np' function. */ #undef HAVE_PTHREAD_GET_STACKADDR_NP /* Define to 1 if you have the `pthread_get_stacksize_np' function. */ #undef HAVE_PTHREAD_GET_STACKSIZE_NP /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_NP_H /* Define to 1 if you have the header file. */ #undef HAVE_PULSE_PULSEAUDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_PWD_H /* Define to 1 if you have the `pwrite' function. */ #undef HAVE_PWRITE /* Define to 1 if you have the header file. */ #undef HAVE_QUICKTIME_IMAGECOMPRESSION_H /* Define to 1 if you have the `readdir' function. */ #undef HAVE_READDIR /* Define to 1 if you have the `readlink' function. */ #undef HAVE_READLINK /* Define to 1 if you have the `remainder' function. */ #undef HAVE_REMAINDER /* Define to 1 if you have the `remainderf' function. */ #undef HAVE_REMAINDERF /* Define to 1 if the system has the type `request_sense'. */ #undef HAVE_REQUEST_SENSE /* Define if you have the resolver library and header */ #undef HAVE_RESOLV /* Define to 1 if you have the header file. */ #undef HAVE_RESOLV_H /* Define to 1 if you have the `rint' function. */ #undef HAVE_RINT /* Define to 1 if you have the `rintf' function. */ #undef HAVE_RINTF /* Define to 1 if you have the `round' function. */ #undef HAVE_ROUND /* Define to 1 if you have the `roundf' function. */ #undef HAVE_ROUNDF /* Define to 1 if you have the header file. */ #undef HAVE_SCHED_H /* Define to 1 if you have the `sched_setaffinity' function. */ #undef HAVE_SCHED_SETAFFINITY /* Define to 1 if you have the `sched_yield' function. */ #undef HAVE_SCHED_YIELD /* Define to 1 if `cmd' is a member of `scsireq_t'. */ #undef HAVE_SCSIREQ_T_CMD /* Define to 1 if you have the header file. */ #undef HAVE_SCSI_SCSI_H /* Define to 1 if you have the header file. */ #undef HAVE_SCSI_SCSI_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SCSI_SG_H /* Define to 1 if you have the header file. */ #undef HAVE_SDL2_SDL_H /* Define to 1 if you have the header file. */ #undef HAVE_SECURITY_SECURITY_H /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `sendmsg' function. */ #undef HAVE_SENDMSG /* Define to 1 if you have the `setproctitle' function. */ #undef HAVE_SETPROCTITLE /* Define to 1 if you have the `setprogname' function. */ #undef HAVE_SETPROGNAME /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT /* Define to 1 if you have the `settimeofday' function. */ #undef HAVE_SETTIMEOFDAY /* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */ #undef HAVE_SG_IO_HDR_T_INTERFACE_ID /* Define if sigaddset is supported */ #undef HAVE_SIGADDSET /* Define to 1 if you have the `sigaltstack' function. */ #undef HAVE_SIGALTSTACK /* Define to 1 if `si_fd' is a member of `siginfo_t'. */ #undef HAVE_SIGINFO_T_SI_FD /* Define to 1 if you have the `sigprocmask' function. */ #undef HAVE_SIGPROCMASK /* Define to 1 if the system has the type `sigset_t'. */ #undef HAVE_SIGSET_T /* Define to 1 if the system has the type `size_t'. */ #undef HAVE_SIZE_T /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the `socketpair' function. */ #undef HAVE_SOCKETPAIR /* Define to 1 if the system has the type `ssize_t'. */ #undef HAVE_SSIZE_T /* Define to 1 if you have the `SSLCopyPeerCertificates' function. */ #undef HAVE_SSLCOPYPEERCERTIFICATES /* Define to 1 if you have the `statfs' function. */ #undef HAVE_STATFS /* Define to 1 if you have the `statvfs' function. */ #undef HAVE_STATVFS /* Define to 1 if you have the header file. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strnlen' function. */ #undef HAVE_STRNLEN /* Define to 1 if you have the header file. */ #undef HAVE_STROPTS_H /* Define to 1 if you have the `strtold' function. */ #undef HAVE_STRTOLD /* Define to 1 if you have the `strtoll' function. */ #undef HAVE_STRTOLL /* Define to 1 if you have the `strtoull' function. */ #undef HAVE_STRTOULL /* Define to 1 if `d_reclen' is a member of `struct dirent'. */ #undef HAVE_STRUCT_DIRENT_D_RECLEN /* Define to 1 if `direction' is a member of `struct ff_effect'. */ #undef HAVE_STRUCT_FF_EFFECT_DIRECTION /* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */ #undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST /* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */ #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST /* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */ #undef HAVE_STRUCT_IFREQ_IFR_HWADDR /* Define to 1 if `ips_total' is a member of `struct ipstat'. */ #undef HAVE_STRUCT_IPSTAT_IPS_TOTAL /* Define to 1 if `ips_total' is a member of `struct ip_stats'. */ #undef HAVE_STRUCT_IP_STATS_IPS_TOTAL /* Define to 1 if the system has the type `struct link_map'. */ #undef HAVE_STRUCT_LINK_MAP /* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */ #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS /* Define to 1 if `mt_blkno' is a member of `struct mtget'. */ #undef HAVE_STRUCT_MTGET_MT_BLKNO /* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */ #undef HAVE_STRUCT_MTGET_MT_BLKSIZ /* Define to 1 if `mt_gstat' is a member of `struct mtget'. */ #undef HAVE_STRUCT_MTGET_MT_GSTAT /* Define to 1 if `name' is a member of `struct option'. */ #undef HAVE_STRUCT_OPTION_NAME /* Define to 1 if the system has the type `struct r_debug'. */ #undef HAVE_STRUCT_R_DEBUG /* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */ #undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID /* Define to 1 if `sa_len' is a member of `struct sockaddr'. */ #undef HAVE_STRUCT_SOCKADDR_SA_LEN /* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */ #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN /* Define to 1 if `f_bavail' is a member of `struct statfs'. */ #undef HAVE_STRUCT_STATFS_F_BAVAIL /* Define to 1 if `f_bfree' is a member of `struct statfs'. */ #undef HAVE_STRUCT_STATFS_F_BFREE /* Define to 1 if `f_favail' is a member of `struct statfs'. */ #undef HAVE_STRUCT_STATFS_F_FAVAIL /* Define to 1 if `f_ffree' is a member of `struct statfs'. */ #undef HAVE_STRUCT_STATFS_F_FFREE /* Define to 1 if `f_frsize' is a member of `struct statfs'. */ #undef HAVE_STRUCT_STATFS_F_FRSIZE /* Define to 1 if `f_namelen' is a member of `struct statfs'. */ #undef HAVE_STRUCT_STATFS_F_NAMELEN /* Define to 1 if `f_blocks' is a member of `struct statvfs'. */ #undef HAVE_STRUCT_STATVFS_F_BLOCKS /* Define to 1 if `st_atim' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM /* Define to 1 if `st_atimespec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMESPEC /* Define to 1 if `st_birthtim' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIM /* Define to 1 if `st_birthtime' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIME /* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC /* Define to 1 if `st_blocks' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BLOCKS /* Define to 1 if `st_ctim' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_CTIM /* Define to 1 if `st_ctimespec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_CTIMESPEC /* Define to 1 if `st_mtim' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_MTIM /* Define to 1 if `st_mtimespec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_MTIMESPEC /* Define to 1 if `__st_birthtim' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT___ST_BIRTHTIM /* Define to 1 if `__st_birthtime' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT___ST_BIRTHTIME /* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */ #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT /* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */ #undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT /* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */ #undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS /* Define to 1 if the system has the type `struct xinpgen'. */ #undef HAVE_STRUCT_XINPGEN /* Define to 1 if the system has the type `struct __res_state'. */ #undef HAVE_STRUCT___RES_STATE /* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */ #undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6 /* Define to 1 if you have the `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the header file. */ #undef HAVE_SYSCALL_H /* Define to 1 if you have the `sysinfo' function. */ #undef HAVE_SYSINFO /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ASOUNDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ATTR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_AUXV_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_CDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ELF32_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_EPOLL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_EVENT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_EXEC_ELF_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_INOTIFY_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IPC_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_LINK_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MODEM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MOUNT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MSG_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MTIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_POLL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PRCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PROTOSW_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PTRACE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_QUEUE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SCSIIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SHM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SIGNAL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKETVAR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STATFS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STATVFS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STRTIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSCALL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_THR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIHDR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIMEOUT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIMES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UCONTEXT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UN_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_USER_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UTSNAME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_VFS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_VM86_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_VNODE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the `tcdrain' function. */ #undef HAVE_TCDRAIN /* Define to 1 if you have the header file. */ #undef HAVE_TERMIOS_H /* Define to 1 if you have the `thr_kill2' function. */ #undef HAVE_THR_KILL2 /* Define to 1 if you have the header file. */ #undef HAVE_TIFFIO_H /* Define to 1 if you have the `timegm' function. */ #undef HAVE_TIMEGM /* Define if you have the timezone variable */ #undef HAVE_TIMEZONE /* Define to 1 if you have the `trunc' function. */ #undef HAVE_TRUNC /* Define to 1 if you have the `truncf' function. */ #undef HAVE_TRUNCF /* Define to 1 if you have the `udev' library (-ludev). */ #undef HAVE_UDEV /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `usleep' function. */ #undef HAVE_USLEEP /* Define to 1 if you have the header file. */ #undef HAVE_UTIME_H /* Define to 1 if you have the header file. */ #undef HAVE_VALGRIND_MEMCHECK_H /* Define to 1 if you have the header file. */ #undef HAVE_VALGRIND_VALGRIND_H /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_SHAPE_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XF86VMODE_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XFIXES_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XINERAMA_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XINPUT2_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XINPUT_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XRANDR_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XRENDER_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XSHM_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_XCURSOR_XCURSOR_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_XKBLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_XLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_XUTIL_H /* Define to 1 if `xcookie' is a member of `XEvent'. */ #undef HAVE_XEVENT_XCOOKIE /* Define to 1 if `callback' is a member of `XICCallback'. */ #undef HAVE_XICCALLBACK_CALLBACK /* Define if you have the XKB extension */ #undef HAVE_XKB /* Define if libxml2 has the xmlDocProperties enum */ #undef HAVE_XMLDOC_PROPERTIES /* Define if libxml2 has the xmlFirstElementChild function */ #undef HAVE_XMLFIRSTELEMENTCHILD /* Define if libxml2 has the xmlNewDocPI function */ #undef HAVE_XMLNEWDOCPI /* Define if libxml2 has the xmlReadMemory function */ #undef HAVE_XMLREADMEMORY /* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */ #undef HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS /* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */ #undef HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS /* Define if Xrender has the XRenderCreateLinearGradient function */ #undef HAVE_XRENDERCREATELINEARGRADIENT /* Define if Xrender has the XRenderSetPictureTransform function */ #undef HAVE_XRENDERSETPICTURETRANSFORM /* Define if Xrandr has the XRRGetScreenResources function */ #undef HAVE_XRRGETSCREENRESOURCES /* Define to 1 if you have the `y0' function. */ #undef HAVE_Y0 /* Define to 1 if you have the `y1' function. */ #undef HAVE_Y1 /* Define to 1 if you have the `yn' function. */ #undef HAVE_YN /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_ZLIB /* Define to 1 if you have the header file. */ #undef HAVE_ZLIB_H /* Define to 1 if you have the `_finite' function. */ #undef HAVE__FINITE /* Define to 1 if you have the `_isnan' function. */ #undef HAVE__ISNAN /* Define to 1 if you have the `_pclose' function. */ #undef HAVE__PCLOSE /* Define to 1 if you have the `_popen' function. */ #undef HAVE__POPEN /* Define to 1 if you have the `_snprintf' function. */ #undef HAVE__SNPRINTF /* Define to 1 if you have the `_spawnvp' function. */ #undef HAVE__SPAWNVP /* Define to 1 if you have the `_strdup' function. */ #undef HAVE__STRDUP /* Define to 1 if you have the `_stricmp' function. */ #undef HAVE__STRICMP /* Define to 1 if you have the `_strnicmp' function. */ #undef HAVE__STRNICMP /* Define to 1 if you have the `_strtoi64' function. */ #undef HAVE__STRTOI64 /* Define to 1 if you have the `_strtoui64' function. */ #undef HAVE__STRTOUI64 /* Define to 1 if you have the `_vsnprintf' function. */ #undef HAVE__VSNPRINTF /* Define to 1 if you have the `__builtin_clz' built-in function. */ #undef HAVE___BUILTIN_CLZ /* Define to 1 if you have the `__builtin_popcount' built-in function. */ #undef HAVE___BUILTIN_POPCOUNT /* Define to 1 if you have the `__clear_cache' (potentially built-in) function. */ #undef HAVE___CLEAR_CACHE /* Define to 1 if you have the `__res_getservers' function. */ #undef HAVE___RES_GETSERVERS /* Define to 1 if you have the `__res_get_state' function. */ #undef HAVE___RES_GET_STATE /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #undef MAJOR_IN_MKDEV /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #undef MAJOR_IN_SYSMACROS /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to the soname of the libcapi20 library. */ #undef SONAME_LIBCAPI20 /* Define to the soname of the libcups library. */ #undef SONAME_LIBCUPS /* Define to the soname of the libcurses library. */ #undef SONAME_LIBCURSES /* Define to the soname of the libdbus-1 library. */ #undef SONAME_LIBDBUS_1 /* Define to the soname of the libEGL library. */ #undef SONAME_LIBEGL /* Define to the soname of the libfontconfig library. */ #undef SONAME_LIBFONTCONFIG /* Define to the soname of the libfreetype library. */ #undef SONAME_LIBFREETYPE /* Define to the soname of the libGL library. */ #undef SONAME_LIBGL /* Define to the soname of the libGLESv2 library. */ #undef SONAME_LIBGLESV2 /* Define to the soname of the libGLU library. */ #undef SONAME_LIBGLU /* Define to the soname of the libgnutls library. */ #undef SONAME_LIBGNUTLS /* Define to the soname of the libgsm library. */ #undef SONAME_LIBGSM /* Define to the soname of the libgssapi_krb5 library. */ #undef SONAME_LIBGSSAPI_KRB5 /* Define to the soname of the libhal library. */ #undef SONAME_LIBHAL /* Define to the soname of the libjpeg library. */ #undef SONAME_LIBJPEG /* Define to the soname of the libkrb5 library. */ #undef SONAME_LIBKRB5 /* Define to the soname of the libMoltenVK library. */ #undef SONAME_LIBMOLTENVK /* Define to the soname of the libncurses library. */ #undef SONAME_LIBNCURSES /* Define to the soname of the libnetapi library. */ #undef SONAME_LIBNETAPI /* Define to the soname of the libodbc library. */ #undef SONAME_LIBODBC /* Define to the soname of the libopenal library. */ #undef SONAME_LIBOPENAL /* Define to the soname of the libOSMesa library. */ #undef SONAME_LIBOSMESA /* Define to the soname of the libpng library. */ #undef SONAME_LIBPNG /* Define to the soname of the libsane library. */ #undef SONAME_LIBSANE /* Define to the soname of the libSDL2 library. */ #undef SONAME_LIBSDL2 /* Define to the soname of the libtiff library. */ #undef SONAME_LIBTIFF /* Define to the soname of the libv4l1 library. */ #undef SONAME_LIBV4L1 /* Define to the soname of the libvkd3d library. */ #undef SONAME_LIBVKD3D /* Define to the soname of the libvulkan library. */ #undef SONAME_LIBVULKAN /* Define to the soname of the libX11 library. */ #undef SONAME_LIBX11 /* Define to the soname of the libXcomposite library. */ #undef SONAME_LIBXCOMPOSITE /* Define to the soname of the libXcursor library. */ #undef SONAME_LIBXCURSOR /* Define to the soname of the libXext library. */ #undef SONAME_LIBXEXT /* Define to the soname of the libXfixes library. */ #undef SONAME_LIBXFIXES /* Define to the soname of the libXi library. */ #undef SONAME_LIBXI /* Define to the soname of the libXinerama library. */ #undef SONAME_LIBXINERAMA /* Define to the soname of the libXrandr library. */ #undef SONAME_LIBXRANDR /* Define to the soname of the libXrender library. */ #undef SONAME_LIBXRENDER /* Define to the soname of the libxslt library. */ #undef SONAME_LIBXSLT /* Define to the soname of the libXxf86vm library. */ #undef SONAME_LIBXXF86VM /* Define to 1 if the `S_IS*' macros in do not work properly. */ #undef STAT_MACROS_BROKEN /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to a macro to output a .cfi assembly pseudo-op */ #undef __ASM_CFI /* Define to a macro to define an assembly function */ #undef __ASM_DEFINE_FUNC /* Define to a macro to generate an assembly function directive */ #undef __ASM_FUNC /* Define to a macro to generate an assembly function with C calling convention */ #undef __ASM_GLOBAL_FUNC /* Define to a macro to generate an assembly name from a C symbol */ #undef __ASM_NAME /* Define to a macro to generate an stdcall suffix */ #undef __ASM_STDCALL /* Define to a macro to generate an assembly function with stdcall calling convention */ #undef __ASM_STDCALL_FUNC /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif #endif /* WINE_CROSSTEST */ #endif /* __WINE_CONFIG_H */ ================================================ FILE: wine/windows/control.idl ================================================ /* * Copyright (C) 2002 Lionel Ulmer * Copyright (C) 2004 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; [ version(1.0), uuid(56a868b0-0ad4-11ce-b03a-0020af0ba770) ] library QuartzTypeLib { importlib("stdole2.tlb"); typedef LONG OAFilterState; typedef LONG_PTR OAHWND; typedef LONG_PTR OAEVENT; cpp_quote("#ifndef REFTIME_DEFINED") cpp_quote("#define REFTIME_DEFINED") typedef DOUBLE REFTIME; cpp_quote("#endif") /*************************************************************************** * IMediaControl interface */ [ object, uuid(56a868b1-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMediaControl : IDispatch { HRESULT Run(); HRESULT Pause(); HRESULT Stop(); HRESULT GetState( [in] LONG msTimeout, [out] OAFilterState *pfs ); HRESULT RenderFile( [in] BSTR strFilename ); HRESULT AddSourceFilter( [in] BSTR strFilename, [out] IDispatch **ppUnk ); [propget] HRESULT FilterCollection( [out] IDispatch **ppUnk ); [propget] HRESULT RegFilterCollection( [out] IDispatch **ppUnk ); HRESULT StopWhenReady(); } /*************************************************************************** * IBasicAudio interface */ [ object, uuid(56a868b3-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IBasicAudio : IDispatch { [propput] HRESULT Volume( [in] LONG lVolume ); [propget] HRESULT Volume( [out, retval] LONG *plVolume ); [propput] HRESULT Balance( [in] LONG lBalance ); [propget] HRESULT Balance( [out, retval] LONG *plBalance ); } /*************************************************************************** * IVideoWindow interface */ [ object, uuid(56a868b4-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IVideoWindow : IDispatch { [propput] HRESULT Caption( [in] BSTR strCaption ); [propget] HRESULT Caption( [out, retval] BSTR *strCaption ); [propput] HRESULT WindowStyle( [in] LONG WindowStyle ); [propget] HRESULT WindowStyle( [out, retval] LONG *WindowStyle ); [propput] HRESULT WindowStyleEx( [in] LONG WindowStyleEx ); [propget] HRESULT WindowStyleEx( [out, retval] LONG *WindowStyleEx ); [propput] HRESULT AutoShow( [in] LONG AutoShow ); [propget] HRESULT AutoShow( [out, retval] LONG *AutoShow ); [propput] HRESULT WindowState( [in] LONG WindowState ); [propget] HRESULT WindowState( [out, retval] LONG *WindowState ); [propput] HRESULT BackgroundPalette( [in] LONG BackgroundPalette ); [propget] HRESULT BackgroundPalette( [out, retval] LONG *pBackgroundPalette ); [propput] HRESULT Visible( [in] LONG Visible ); [propget] HRESULT Visible( [out, retval] LONG *pVisible ); [propput] HRESULT Left( [in] LONG Left ); [propget] HRESULT Left( [out, retval] LONG *pLeft ); [propput] HRESULT Width( [in] LONG Width ); [propget] HRESULT Width( [out, retval] LONG *pWidth ); [propput] HRESULT Top( [in] LONG Top ); [propget] HRESULT Top( [out, retval] LONG *pTop ); [propput] HRESULT Height( [in] LONG Height ); [propget] HRESULT Height( [out, retval] LONG *pHeight ); [propput] HRESULT Owner( [in] OAHWND Owner ); [propget] HRESULT Owner( [out, retval] OAHWND *Owner ); [propput] HRESULT MessageDrain( [in] OAHWND Drain ); [propget] HRESULT MessageDrain( [out, retval] OAHWND *Drain ); [propget] HRESULT BorderColor( [out, retval] LONG *Color ); [propput] HRESULT BorderColor( [in] LONG Color ); [propget] HRESULT FullScreenMode( [out, retval] LONG *FullScreenMode ); [propput] HRESULT FullScreenMode( [in] LONG FullScreenMode ); HRESULT SetWindowForeground( [in] LONG Focus ); HRESULT NotifyOwnerMessage( [in] OAHWND hwnd, [in] LONG uMsg, [in] LONG_PTR wParam, [in] LONG_PTR lParam ); HRESULT SetWindowPosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height ); HRESULT GetWindowPosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight ); HRESULT GetMinIdealImageSize( [out] LONG *pWidth, [out] LONG *pHeight ); HRESULT GetMaxIdealImageSize( [out] LONG *pWidth, [out] LONG *pHeight ); HRESULT GetRestorePosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight ); HRESULT HideCursor( [in] LONG HideCursor ); HRESULT IsCursorHidden( [out] LONG *CursorHidden ); } /*************************************************************************** * IBasicVideo interface */ [ object, uuid(56a868b5-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IBasicVideo : IDispatch { [propget] HRESULT AvgTimePerFrame( [out, retval] REFTIME *pAvgTimePerFrame ); [propget] HRESULT BitRate( [out, retval] LONG *pBitRate ); [propget] HRESULT BitErrorRate( [out, retval] LONG *pBitErrorRate ); [propget] HRESULT VideoWidth( [out, retval] LONG *pVideoWidth ); [propget] HRESULT VideoHeight( [out, retval] LONG *pVideoHeight ); [propput] HRESULT SourceLeft( [in] LONG SourceLeft ); [propget] HRESULT SourceLeft( [out, retval] LONG *pSourceLeft ); [propput] HRESULT SourceWidth( [in] LONG SourceWidth ); [propget] HRESULT SourceWidth( [out, retval] LONG *pSourceWidth ); [propput] HRESULT SourceTop( [in] LONG SourceTop ); [propget] HRESULT SourceTop( [out, retval] LONG *pSourceTop ); [propput] HRESULT SourceHeight( [in] LONG SourceHeight ); [propget] HRESULT SourceHeight( [out, retval] LONG *pSourceHeight ); [propput] HRESULT DestinationLeft( [in] LONG DestinationLeft ); [propget] HRESULT DestinationLeft( [out, retval] LONG *pDestinationLeft ); [propput] HRESULT DestinationWidth( [in] LONG DestinationWidth ); [propget] HRESULT DestinationWidth( [out, retval] LONG *pDestinationWidth ); [propput] HRESULT DestinationTop( [in] LONG DestinationTop ); [propget] HRESULT DestinationTop( [out, retval] LONG *pDestinationTop ); [propput] HRESULT DestinationHeight( [in] LONG DestinationHeight ); [propget] HRESULT DestinationHeight( [out, retval] LONG *pDestinationHeight ); HRESULT SetSourcePosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height ); HRESULT GetSourcePosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight ); HRESULT SetDefaultSourcePosition(); HRESULT SetDestinationPosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height ); HRESULT GetDestinationPosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight ); HRESULT SetDefaultDestinationPosition(); HRESULT GetVideoSize( [out] LONG *pWidth, [out] LONG *pHeight ); HRESULT GetVideoPaletteEntries( [in] LONG StartIndex, [in] LONG Entries, [out] LONG *pRetrieved, [out, size_is(Entries), length_is(*pRetrieved)] LONG *pPalette ); HRESULT GetCurrentImage( [in, out] LONG *pBufferSize, [out, size_is(*pBufferSize), length_is(*pBufferSize)] LONG *pDIBImage ); HRESULT IsUsingDefaultSource(); HRESULT IsUsingDefaultDestination(); } [ uuid(329bb360-f6ea-11d1-9038-00a0c9697298), helpstring("IBasicVideo2"), odl ] interface IBasicVideo2 : IBasicVideo { HRESULT GetPreferredAspectRatio([out] LONG *plAspectX, [out] LONG *plAspectY); } /*************************************************************************** * IMediaEvent interface */ [ object, uuid(56a868b6-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMediaEvent : IDispatch { HRESULT GetEventHandle( [out] OAEVENT *hEvent ); HRESULT GetEvent( [out] LONG *lEventCode, [out] LONG_PTR *lParam1, [out] LONG_PTR *lParam2, [in] LONG msTimeout ); HRESULT WaitForCompletion( [in] LONG msTimeout, [out] LONG *pEvCode ); HRESULT CancelDefaultHandling( [in] LONG lEvCode ); HRESULT RestoreDefaultHandling( [in] LONG lEvCode ); HRESULT FreeEventParams( [in] LONG lEvCode, [in] LONG_PTR lParam1, [in] LONG_PTR lParam2 ); } /*************************************************************************** * IMediaEventEx interface */ [ object, uuid(56a868c0-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMediaEventEx : IMediaEvent { HRESULT SetNotifyWindow( [in] OAHWND hwnd, [in] LONG lMsg, [in] LONG_PTR lInstanceData ); HRESULT SetNotifyFlags( [in] LONG lNoNotifyFlags ); HRESULT GetNotifyFlags( [out] LONG *lplNoNotifyFlags ); } /*************************************************************************** * IMediaPosition interface */ [ object, uuid(56a868b2-0ad4-11ce-b03a-0020af0ba770), pointer_default(unique) ] interface IMediaPosition : IDispatch { HRESULT get_Duration( [out] REFTIME *plength ); HRESULT put_CurrentPosition( [in] REFTIME llTime ); HRESULT get_CurrentPosition( [out] REFTIME *pllTime ); HRESULT get_StopTime( [out] REFTIME *pllTime ); HRESULT put_StopTime( [in] REFTIME llTime ); HRESULT get_PrerollTime( [out] REFTIME *pllTime ); HRESULT put_PrerollTime( [in] REFTIME llTime ); HRESULT put_Rate( [in] double dRate ); HRESULT get_Rate( [out] double *pdRate ); HRESULT CanSeekForward( [out] LONG *pCanSeekForward ); HRESULT CanSeekBackward( [out] LONG *pCanSeekBackward ); } } /* library QuartzTypeLib */ ================================================ FILE: wine/windows/cor.idl ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "propidl.idl"; cpp_quote("#include ") /* FIXME: #include "specstrings.h" */ cpp_quote("#include ") cpp_quote("#include ") cpp_quote("DEFINE_GUID(CLSID_CorMetaDataDispenser, 0xe5cb7a31,0x7512,0x11d2,0x89,0xce,0x00,0x80,0xc7,0x92,0xe5,0xd8);") cpp_quote("DEFINE_GUID(CLSID_CorMetaDataDispenserRuntime, 0x1ec2de53,0x75cc,0x11d2,0x97,0x75,0x00,0xa0,0xc9,0xb4,0xd5,0x0c);") [ object, local, uuid(809c652e-7396-11d2-9771-00a0c9b4d50c) ] interface IMetaDataDispenser : IUnknown { HRESULT DefineScope( [in] REFCLSID rclsid, [in] DWORD dwCreateFlags, [in] REFIID riid, [out] IUnknown **ppIUnk); HRESULT OpenScope( [in] LPCWSTR szScope, [in] DWORD dwOpenFlags, [in] REFIID riid, [out] IUnknown **ppIUnk); HRESULT OpenScopeOnMemory( [in] const void *pData, [in] ULONG cbData, [in] DWORD dwOpenFlags, [in] REFIID riid, [out] IUnknown **ppIUnk); } [ object, local, uuid(31bcfce2-dafb-11d2-9f81-00c04f79a0a3) ] interface IMetaDataDispenserEx : IMetaDataDispenser { HRESULT SetOption( [in] REFGUID optionid, [in] const VARIANT *value); HRESULT GetOption( [in] REFGUID optionid, [out] VARIANT *pvalue); HRESULT OpenScopeOnITypeInfo( [in] ITypeInfo *pITI, [in] DWORD dwOpenFlags, [in] REFIID riid, [out] IUnknown **ppIUnk); HRESULT GetCORSystemDirectory( [out, size_is(cchBuffer)] LPWSTR szBuffer, [in] DWORD cchBuffer, [out] DWORD *pchBuffer); HRESULT FindAssembly( [in] LPCWSTR szAppBase, [in] LPCWSTR szPrivateBin, [in] LPCWSTR szGlobalBin, [in] LPCWSTR szAssemblyName, [out, size_is(cchName)] LPWSTR szName, [in] ULONG cchName, [out] ULONG *pcName); HRESULT FindAssemblyModule( [in] LPCWSTR szAppBase, [in] LPCWSTR szPrivateBin, [in] LPCWSTR szGlobalBin, [in] LPCWSTR szAssemblyName, [in] LPCWSTR szModuleName, [out, size_is(cchName)] LPWSTR szName, [in] ULONG cchName, [out] ULONG *pcName); } cpp_quote("BOOL WINAPI _CorDllMain(HINSTANCE,DWORD,LPVOID);") cpp_quote("__int32 WINAPI _CorExeMain(void);") cpp_quote("__int32 WINAPI _CorExeMain2(PBYTE,DWORD,LPWSTR,LPWSTR,LPWSTR);") cpp_quote("VOID WINAPI _CorImageUnloading(PVOID);") cpp_quote("HRESULT WINAPI _CorValidateImage(PVOID*,LPCWSTR);") cpp_quote("HRESULT WINAPI CoInitializeCor(DWORD);") cpp_quote("void WINAPI CoUninitializeCor(void);") ================================================ FILE: wine/windows/cordebug.idl ================================================ /* * Copyright (C) 2011 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "objidl.idl"; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef CreateProcess") cpp_quote("#endif") interface ICorDebugAppDomain; interface ICorDebugAppDomainEnum; interface ICorDebugAssembly; interface ICorDebugAssemblyEnum; interface ICorDebugBreakpoint; interface ICorDebugBreakpointEnum; interface ICorDebugChain; interface ICorDebugChainEnum; interface ICorDebugClass; interface ICorDebugCode; interface ICorDebugContext; interface ICorDebugEditAndContinueSnapshot; interface ICorDebugEditAndContinueErrorInfo; interface ICorDebugEnum; interface ICorDebugErrorInfoEnum; interface ICorDebugEval; interface ICorDebugFrame; interface ICorDebugFrameEnum; interface ICorDebugFunction; interface ICorDebugFunctionBreakpoint; interface ICorDebugManagedCallback; interface ICorDebugManagedCallback2; interface ICorDebugMDA; interface ICorDebugModule; interface ICorDebugModuleBreakpoint; interface ICorDebugModuleEnum; interface ICorDebugObjectEnum; interface ICorDebugObjectValue; interface ICorDebugProcess; interface ICorDebugProcessEnum; interface ICorDebugRegisterSet; interface ICorDebugStepper; interface ICorDebugStepperEnum; interface ICorDebugThreadEnum; interface ICorDebugUnmanagedCallback; interface ICorDebugValue; interface ICorDebugValueBreakpoint; typedef [wire_marshal(unsigned long)] void *HPROCESS; typedef [wire_marshal(unsigned long)] void *HTHREAD; /* These are defined in corhrd.idl but used here. */ cpp_quote("#if 0") typedef UINT32 mdToken; typedef mdToken mdModule; typedef SIZE_T mdScope; typedef mdToken mdTypeDef; typedef mdToken mdSourceFile; typedef mdToken mdMemberRef; typedef mdToken mdMethodDef; typedef mdToken mdFieldDef; typedef mdToken mdSignature; typedef ULONG CorElementType; typedef SIZE_T PCCOR_SIGNATURE; typedef SIZE_T LPDEBUG_EVENT; typedef SIZE_T LPSTARTUPINFOW; typedef SIZE_T LPPROCESS_INFORMATION; cpp_quote("#endif") typedef ULONG64 CORDB_ADDRESS; typedef ULONG64 CORDB_REGISTER; typedef UINT64 TASKID; typedef DWORD CONNID; cpp_quote("#ifndef _COR_IL_MAP") cpp_quote("#define _COR_IL_MAP") typedef struct _COR_IL_MAP { ULONG32 oldOffset; ULONG32 newOffset; BOOL fAccurate; } COR_IL_MAP; cpp_quote("#endif /* _COR_IL_MAP */") cpp_quote("#ifndef _COR_DEBUG_IL_TO_NATIVE_MAP_") cpp_quote("#define _COR_DEBUG_IL_TO_NATIVE_MAP_") typedef enum CorDebugIlToNativeMappingTypes { NO_MAPPING = -1, PROLOG = -2, EPILOG = -3 } CorDebugIlToNativeMappingTypes; typedef struct COR_DEBUG_IL_TO_NATIVE_MAP { ULONG32 ilOffset; ULONG32 nativeStartOffset; ULONG32 nativeEndOffset; } COR_DEBUG_IL_TO_NATIVE_MAP; cpp_quote("#endif /* _COR_DEBUG_IL_TO_NATIVE_MAP_ */") typedef enum CorDebugThreadState { THREAD_RUN, THREAD_SUSPEND } CorDebugThreadState; typedef enum CorDebugCreateProcessFlags { DEBUG_NO_SPECIAL_OPTIONS = 0x0000 } CorDebugCreateProcessFlags; [ object, local, uuid(CC7BCAF7-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugValue : IUnknown { HRESULT GetType([out] CorElementType *pType); HRESULT GetSize([out] ULONG32 *pSize); HRESULT GetAddress([out] CORDB_ADDRESS *pAddress); HRESULT CreateBreakpoint([out] ICorDebugValueBreakpoint **ppBreakpoint); } [ object, local, uuid(938c6d66-7fb6-4f69-b389-425b8987329b), pointer_default(unique) ] interface ICorDebugThread : IUnknown { HRESULT GetProcess([out] ICorDebugProcess **ppProcess); HRESULT GetID([out] DWORD *pdwThreadId); HRESULT GetHandle([out] HTHREAD *phThreadHandle); HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain); HRESULT SetDebugState([in] CorDebugThreadState state); HRESULT GetDebugState([out] CorDebugThreadState *pState); typedef enum CorDebugUserState { USER_STOP_REQUESTED = 0x01, USER_SUSPEND_REQUESTED = 0x02, USER_BACKGROUND = 0x04, USER_UNSTARTED = 0x08, USER_STOPPED = 0x10, USER_WAIT_SLEEP_JOIN = 0x20, USER_SUSPENDED = 0x40, USER_UNSAFE_POINT = 0x80, } CorDebugUserState; HRESULT GetUserState([out] CorDebugUserState *pState); HRESULT GetCurrentException([out] ICorDebugValue **ppExceptionObject); HRESULT ClearCurrentException(); HRESULT CreateStepper([out] ICorDebugStepper **ppStepper); HRESULT EnumerateChains([out] ICorDebugChainEnum **ppChains); HRESULT GetActiveChain([out] ICorDebugChain **ppChain); HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame); HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters); HRESULT CreateEval([out] ICorDebugEval **ppEval); HRESULT GetObject([out] ICorDebugValue **ppObject); } [ object, local, uuid(3d6f5f62-7538-11d3-8d5b-00104b35e7ef), pointer_default(unique) ] interface ICorDebugController : IUnknown { HRESULT Stop([in] DWORD dwTimeoutIgnored); HRESULT Continue([in] BOOL fIsOutOfBand); HRESULT IsRunning([out] BOOL *pbRunning); HRESULT HasQueuedCallbacks([in] ICorDebugThread *pThread, [out] BOOL *pbQueued); HRESULT EnumerateThreads([out] ICorDebugThreadEnum **ppThreads); HRESULT SetAllThreadsDebugState([in] CorDebugThreadState state, [in] ICorDebugThread *pExceptThisThread); HRESULT Detach(); HRESULT Terminate([in] UINT exitCode); HRESULT CanCommitChanges([in] ULONG cSnapshots, [in] ICorDebugEditAndContinueSnapshot *pSnapshots[], [out] ICorDebugErrorInfoEnum **pError); HRESULT CommitChanges([in] ULONG cSnapshots, [in] ICorDebugEditAndContinueSnapshot *pSnapshots[], [out] ICorDebugErrorInfoEnum **pError); } [ object, local, uuid(3d6f5f64-7538-11d3-8d5b-00104b35e7ef), pointer_default(unique) ] interface ICorDebugProcess : ICorDebugController { HRESULT GetID([out] DWORD *pdwProcessId); HRESULT GetHandle([out] HPROCESS *phProcessHandle); HRESULT GetThread([in] DWORD dwThreadId, [out] ICorDebugThread **ppThread); HRESULT EnumerateObjects([out] ICorDebugObjectEnum **ppObjects); HRESULT IsTransitionStub([in] CORDB_ADDRESS address, [out] BOOL *pbTransitionStub); HRESULT IsOSSuspended([in] DWORD threadID, [out] BOOL *pbSuspended); HRESULT GetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize, [in, out] BYTE context[]); HRESULT SetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize, [in] BYTE context[]); HRESULT ReadMemory([in] CORDB_ADDRESS address, [in] DWORD size, [out] BYTE buffer[], [out] SIZE_T *read); HRESULT WriteMemory([in] CORDB_ADDRESS address, [in] DWORD size, [in] BYTE buffer[], [out] SIZE_T *written); HRESULT ClearCurrentException([in] DWORD threadID); HRESULT EnableLogMessages([in]BOOL fOnOff); HRESULT ModifyLogSwitch([in] WCHAR *pLogSwitchName, [in]LONG lLevel); HRESULT EnumerateAppDomains([out] ICorDebugAppDomainEnum **ppAppDomains); HRESULT GetObject([out] ICorDebugValue **ppObject); HRESULT ThreadForFiberCookie([in] DWORD fiberCookie, [out] ICorDebugThread **ppThread); HRESULT GetHelperThreadID([out] DWORD *pThreadID); } [ object, local, uuid(3d6f5f63-7538-11d3-8d5b-00104b35e7ef), pointer_default(unique) ] interface ICorDebugAppDomain : ICorDebugController { HRESULT GetProcess([out] ICorDebugProcess **ppProcess); HRESULT EnumerateAssemblies([out] ICorDebugAssemblyEnum **ppAssemblies); HRESULT GetModuleFromMetaDataInterface([in] IUnknown *pIMetaData, [out] ICorDebugModule **ppModule); HRESULT EnumerateBreakpoints([out] ICorDebugBreakpointEnum **ppBreakpoints); HRESULT EnumerateSteppers([out] ICorDebugStepperEnum **ppSteppers); HRESULT IsAttached([out] BOOL *pbAttached); HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]); HRESULT GetObject([out] ICorDebugValue **ppObject); HRESULT Attach(); HRESULT GetID([out] ULONG32 *pId); } [ object, local, uuid(3d6f5f60-7538-11d3-8d5b-00104b35e7ef), pointer_default(unique) ] interface ICorDebugManagedCallback : IUnknown { HRESULT Breakpoint([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugBreakpoint *pBreakpoint); typedef enum CorDebugStepReason { STEP_NORMAL, STEP_RETURN, STEP_CALL, STEP_EXCEPTION_FILTER, STEP_EXCEPTION_HANDLER, STEP_INTERCEPT, STEP_EXIT } CorDebugStepReason; HRESULT StepComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugStepper *pStepper, [in] CorDebugStepReason reason); HRESULT Break([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *thread); HRESULT Exception([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] BOOL unhandled); HRESULT EvalComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugEval *pEval); HRESULT EvalException([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugEval *pEval); HRESULT CreateProcess([in] ICorDebugProcess *pProcess); HRESULT ExitProcess([in] ICorDebugProcess *pProcess); HRESULT CreateThread([in] ICorDebugAppDomain *pAppDomain,[in] ICorDebugThread *thread); HRESULT ExitThread([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *thread); HRESULT LoadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule); HRESULT UnloadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule); HRESULT LoadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c); HRESULT UnloadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c); HRESULT DebuggerError([in] ICorDebugProcess *pProcess, [in] HRESULT errorHR, [in] DWORD errorCode); typedef enum LoggingLevelEnum { LTraceLevel0 = 0, LTraceLevel1, LTraceLevel2, LTraceLevel3, LTraceLevel4, LStatusLevel0 = 20, LStatusLevel1, LStatusLevel2, LStatusLevel3, LStatusLevel4, LWarningLevel = 40, LErrorLevel = 50, LPanicLevel = 100 } LoggingLevelEnum; typedef enum LogSwitchCallReason { SWITCH_CREATE, SWITCH_MODIFY, SWITCH_DELETE } LogSwitchCallReason; HRESULT LogMessage([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] LONG lLevel, [in] WCHAR *pLogSwitchName, [in] WCHAR *pMessage); HRESULT LogSwitch([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] LONG lLevel, [in] ULONG ulReason, [in] WCHAR *pLogSwitchName, [in] WCHAR *pParentName); HRESULT CreateAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain); HRESULT ExitAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain); HRESULT LoadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly); HRESULT UnloadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly); HRESULT ControlCTrap([in] ICorDebugProcess *pProcess); HRESULT NameChange([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread); HRESULT UpdateModuleSymbols([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule, [in] IStream *pSymbolStream); HRESULT EditAndContinueRemap([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pFunction, [in] BOOL fAccurate); HRESULT BreakpointSetError([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugBreakpoint *pBreakpoint, [in] DWORD dwError); } [ object, local, uuid(250E5EEA-DB5C-4C76-B6F3-8C46F12E3203), pointer_default(unique) ] interface ICorDebugManagedCallback2 : IUnknown { HRESULT FunctionRemapOpportunity([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pOldFunction, [in] ICorDebugFunction *pNewFunction, [in] ULONG32 oldILOffset); HRESULT CreateConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId, [in] WCHAR *pConnName); HRESULT ChangeConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId ); HRESULT DestroyConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId ); typedef enum CorDebugExceptionCallbackType { DEBUG_EXCEPTION_FIRST_CHANCE = 1, DEBUG_EXCEPTION_USER_FIRST_CHANCE = 2, DEBUG_EXCEPTION_CATCH_HANDLER_FOUND = 3, DEBUG_EXCEPTION_UNHANDLED = 4 } CorDebugExceptionCallbackType; typedef enum CorDebugExceptionFlags { DEBUG_EXCEPTION_CAN_BE_INTERCEPTED = 0x0001 } CorDebugExceptionFlags; HRESULT Exception( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugFrame *pFrame, [in] ULONG32 nOffset, [in] CorDebugExceptionCallbackType dwEventType, [in] DWORD dwFlags ); typedef enum CorDebugExceptionUnwindCallbackType { DEBUG_EXCEPTION_UNWIND_BEGIN = 1, DEBUG_EXCEPTION_INTERCEPTED = 2 } CorDebugExceptionUnwindCallbackType; HRESULT ExceptionUnwind( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] CorDebugExceptionUnwindCallbackType dwEventType, [in] DWORD dwFlags ); HRESULT FunctionRemapComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pFunction); HRESULT MDANotification([in] ICorDebugController * pController, [in] ICorDebugThread *pThread, [in] ICorDebugMDA * pMDA ); } [ object, local, uuid(3d6f5f61-7538-11d3-8d5b-00104b35e7ef), pointer_default(unique) ] interface ICorDebug : IUnknown { HRESULT Initialize(); HRESULT Terminate(); HRESULT SetManagedHandler([in] ICorDebugManagedCallback *pCallback); HRESULT SetUnmanagedHandler([in] ICorDebugUnmanagedCallback *pCallback); HRESULT CreateProcess([in] LPCWSTR lpApplicationName, [in] LPWSTR lpCommandLine, [in] LPSECURITY_ATTRIBUTES lpProcessAttributes, [in] LPSECURITY_ATTRIBUTES lpThreadAttributes, [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags, [in] PVOID lpEnvironment, [in] LPCWSTR lpCurrentDirectory, [in] LPSTARTUPINFOW lpStartupInfo, [in] LPPROCESS_INFORMATION lpProcessInformation, [in] CorDebugCreateProcessFlags debuggingFlags, [out] ICorDebugProcess **ppProcess); HRESULT DebugActiveProcess([in] DWORD id, [in] BOOL win32Attach, [out] ICorDebugProcess **ppProcess); HRESULT EnumerateProcesses([out] ICorDebugProcessEnum **ppProcess); HRESULT GetProcess([in] DWORD dwProcessId, [out] ICorDebugProcess **ppProcess); HRESULT CanLaunchOrAttach([in] DWORD dwProcessId, [in] BOOL win32DebuggingEnabled); } [ object, local, uuid(CC7BCAE8-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugBreakpoint : IUnknown { HRESULT Activate([in] BOOL bActive); HRESULT IsActive([out] BOOL *pbActive); } [ object, local, uuid(CC7BCAE9-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugFunctionBreakpoint : ICorDebugBreakpoint { HRESULT GetFunction([out] ICorDebugFunction **ppFunction); HRESULT GetOffset([out] ULONG32 *pnOffset); } [ object, local, uuid(CC7BCAEA-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugModuleBreakpoint : ICorDebugBreakpoint { HRESULT GetModule([out] ICorDebugModule **ppModule); } [ object, local, uuid(CC7BCAEB-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugValueBreakpoint : ICorDebugBreakpoint { HRESULT GetValue([out] ICorDebugValue **ppValue); } [ object, local, uuid(CC7BCAEC-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugStepper : IUnknown { HRESULT IsActive([out] BOOL *pbActive); HRESULT Deactivate(); typedef enum CorDebugIntercept { INTERCEPT_NONE = 0x0 , INTERCEPT_CLASS_INIT = 0x01, INTERCEPT_EXCEPTION_FILTER = 0x02, INTERCEPT_SECURITY = 0x04, INTERCEPT_CONTEXT_POLICY = 0x08, INTERCEPT_INTERCEPTION = 0x10, INTERCEPT_ALL = 0xffff } CorDebugIntercept; HRESULT SetInterceptMask([in] CorDebugIntercept mask); typedef enum CorDebugUnmappedStop { STOP_NONE = 0x0, STOP_PROLOG = 0x01, STOP_EPILOG = 0x02, STOP_NO_MAPPING_INFO = 0x04, STOP_OTHER_UNMAPPED = 0x08, STOP_UNMANAGED = 0x10, STOP_ALL = 0xffff, } CorDebugUnmappedStop; HRESULT SetUnmappedStopMask([in] CorDebugUnmappedStop mask); HRESULT Step([in] BOOL bStepIn); typedef struct COR_DEBUG_STEP_RANGE { ULONG32 startOffset, endOffset; } COR_DEBUG_STEP_RANGE; HRESULT StepRange([in] BOOL bStepIn, [in] COR_DEBUG_STEP_RANGE ranges[], [in] ULONG32 cRangeCount); HRESULT StepOut(); HRESULT SetRangeIL([in] BOOL bIL); } [ object, local, uuid(CC7BCB01-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugEnum : IUnknown { HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] ICorDebugEnum **ppEnum); HRESULT GetCount([out] ULONG *pcelt); } [ object, local, uuid(63ca1b24-4359-4883-bd57-13f815f58744), pointer_default(unique) ] interface ICorDebugAppDomainEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugAppDomain *values[], [out] ULONG *pceltFetched); } [ object, local, uuid(4a2a1ec9-85ec-4bfb-9f15-a89fdfe0fe83), pointer_default(unique) ] interface ICorDebugAssemblyEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugAssembly *values[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCB03-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugBreakpointEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugBreakpoint *breakpoints[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCB08-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugChainEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugChain *chains[], [out] ULONG *pceltFetched); } [ object, local, uuid(F0E18809-72B5-11d2-976F-00A0C9B4D50C), pointer_default(unique) ] interface ICorDebugErrorInfoEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugEditAndContinueErrorInfo *errors[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCB07-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugFrameEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugFrame *frames[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCB09-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugModuleEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugModule *modules[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCB02-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugObjectEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] CORDB_ADDRESS objects[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCB05-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugProcessEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugProcess *processes[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCB04-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugStepperEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugStepper *steppers[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCB06-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugThreadEnum : ICorDebugEnum { HRESULT Next([in] ULONG celt, [out] ICorDebugThread *threads[], [out] ULONG *pceltFetched); } [ object, local, uuid(CC7BCAEE-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugChain : IUnknown { HRESULT GetThread([out] ICorDebugThread **ppThread); HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd); HRESULT GetContext([out] ICorDebugContext **ppContext); HRESULT GetCaller([out] ICorDebugChain **ppChain); HRESULT GetCallee([out] ICorDebugChain **ppChain); HRESULT GetPrevious([out] ICorDebugChain **ppChain); HRESULT GetNext([out] ICorDebugChain **ppChain); HRESULT IsManaged([out] BOOL *pManaged); HRESULT EnumerateFrames([out] ICorDebugFrameEnum **ppFrames); HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame); HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters); typedef enum CorDebugChainReason { CHAIN_NONE = 0x000, CHAIN_CLASS_INIT = 0x001, CHAIN_EXCEPTION_FILTER = 0x002, CHAIN_SECURITY = 0x004, CHAIN_CONTEXT_POLICY = 0x008, CHAIN_INTERCEPTION = 0x010, CHAIN_PROCESS_START = 0x020, CHAIN_THREAD_START = 0x040, CHAIN_ENTER_MANAGED = 0x080, CHAIN_ENTER_UNMANAGED = 0x100, CHAIN_DEBUGGER_EVAL = 0x200, CHAIN_CONTEXT_SWITCH = 0x400, CHAIN_FUNC_EVAL = 0x800, } CorDebugChainReason; HRESULT GetReason([out] CorDebugChainReason *pReason); } [ object, local, uuid(CC7BCAEF-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugFrame : IUnknown { HRESULT GetChain([out] ICorDebugChain **ppChain); HRESULT GetCode([out] ICorDebugCode **ppCode); HRESULT GetFunction([out] ICorDebugFunction **ppFunction); HRESULT GetFunctionToken([out] mdMethodDef *pToken); HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd); HRESULT GetCaller([out] ICorDebugFrame **ppFrame); HRESULT GetCallee([out] ICorDebugFrame **ppFrame); HRESULT CreateStepper([out] ICorDebugStepper **ppStepper); } [ object, local, uuid(CC7BCB0B-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugRegisterSet : IUnknown { typedef enum CorDebugRegister { REGISTER_INSTRUCTION_POINTER = 0, REGISTER_STACK_POINTER, REGISTER_FRAME_POINTER, REGISTER_X86_EIP = 0, REGISTER_X86_ESP, REGISTER_X86_EBP, REGISTER_X86_EAX, REGISTER_X86_ECX, REGISTER_X86_EDX, REGISTER_X86_EBX, REGISTER_X86_ESI, REGISTER_X86_EDI, REGISTER_X86_FPSTACK_0, REGISTER_X86_FPSTACK_1, REGISTER_X86_FPSTACK_2, REGISTER_X86_FPSTACK_3, REGISTER_X86_FPSTACK_4, REGISTER_X86_FPSTACK_5, REGISTER_X86_FPSTACK_6, REGISTER_X86_FPSTACK_7, REGISTER_AMD64_RIP = 0, REGISTER_AMD64_RSP, REGISTER_AMD64_RBP, REGISTER_AMD64_RAX, REGISTER_AMD64_RCX, REGISTER_AMD64_RDX, REGISTER_AMD64_RBX, REGISTER_AMD64_RSI, REGISTER_AMD64_RDI, REGISTER_AMD64_R8, REGISTER_AMD64_R9, REGISTER_AMD64_R10, REGISTER_AMD64_R11, REGISTER_AMD64_R12, REGISTER_AMD64_R13, REGISTER_AMD64_R14, REGISTER_AMD64_R15, REGISTER_AMD64_XMM0, REGISTER_AMD64_XMM1, REGISTER_AMD64_XMM2, REGISTER_AMD64_XMM3, REGISTER_AMD64_XMM4, REGISTER_AMD64_XMM5, REGISTER_AMD64_XMM6, REGISTER_AMD64_XMM7, REGISTER_AMD64_XMM8, REGISTER_AMD64_XMM9, REGISTER_AMD64_XMM10, REGISTER_AMD64_XMM11, REGISTER_AMD64_XMM12, REGISTER_AMD64_XMM13, REGISTER_AMD64_XMM14, REGISTER_AMD64_XMM15, REGISTER_IA64_BSP = REGISTER_FRAME_POINTER, REGISTER_IA64_R0 = REGISTER_IA64_BSP + 1, REGISTER_IA64_F0 = REGISTER_IA64_R0 + 128, } CorDebugRegister; HRESULT GetRegistersAvailable([out] ULONG64 *pAvailable); HRESULT GetRegisters([in] ULONG64 mask, [in] ULONG32 regCount, [out] CORDB_REGISTER regBuffer[]); HRESULT SetRegisters([in] ULONG64 mask, [in] ULONG32 regCount, [in] CORDB_REGISTER regBuffer[]); HRESULT GetThreadContext([in] ULONG32 contextSize, [in, out] BYTE context[]); HRESULT SetThreadContext([in] ULONG32 contextSize, [in] BYTE context[]); } [ object, local, uuid(CC7BCAF6-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugEval : IUnknown { HRESULT CallFunction([in] ICorDebugFunction *pFunction, [in] ULONG32 nArgs, [in] ICorDebugValue *ppArgs[]); HRESULT NewObject([in] ICorDebugFunction *pConstructor, [in] ULONG32 nArgs, [in] ICorDebugValue *ppArgs[]); HRESULT NewObjectNoConstructor([in] ICorDebugClass *pClass); HRESULT NewString([in] LPCWSTR string); HRESULT NewArray([in] CorElementType elementType, [in] ICorDebugClass *pElementClass, [in] ULONG32 rank, [in] ULONG32 dims[], [in] ULONG32 lowBounds[]); HRESULT IsActive([out] BOOL *pbActive); HRESULT Abort(); HRESULT GetResult([out] ICorDebugValue **ppResult); HRESULT GetThread([out] ICorDebugThread **ppThread); HRESULT CreateValue([in] CorElementType elementType, [in] ICorDebugClass *pElementClass, [out] ICorDebugValue **ppValue); } [ object, local, uuid(6DC3FA01-D7CB-11d2-8A95-0080C792E5D8), pointer_default(unique) ] interface ICorDebugEditAndContinueSnapshot : IUnknown { HRESULT CopyMetaData([in] IStream *pIStream, [out] GUID *pMvid); HRESULT GetMvid([out] GUID *pMvid); HRESULT GetRoDataRVA([out] ULONG32 *pRoDataRVA); HRESULT GetRwDataRVA([out] ULONG32 *pRwDataRVA); HRESULT SetPEBytes([in] IStream *pIStream); HRESULT SetILMap([in] mdToken mdFunction, [in] ULONG cMapSize, [in] COR_IL_MAP map[]); HRESULT SetPESymbolBytes([in] IStream *pIStream); } [ object, local, uuid(dba2d8c1-e5c5-4069-8c13-10a7c6abf43d), pointer_default(unique) ] interface ICorDebugModule : IUnknown { HRESULT GetProcess([out] ICorDebugProcess **ppProcess); HRESULT GetBaseAddress([out] CORDB_ADDRESS *pAddress); HRESULT GetAssembly([out] ICorDebugAssembly **ppAssembly); HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]); HRESULT EnableJITDebugging([in] BOOL bTrackJITInfo, [in] BOOL bAllowJitOpts); HRESULT EnableClassLoadCallbacks([in] BOOL bClassLoadCallbacks); HRESULT GetFunctionFromToken([in] mdMethodDef methodDef, [out] ICorDebugFunction **ppFunction); HRESULT GetFunctionFromRVA([in] CORDB_ADDRESS rva, [out] ICorDebugFunction **ppFunction); HRESULT GetClassFromToken([in] mdTypeDef typeDef, [out] ICorDebugClass **ppClass); HRESULT CreateBreakpoint([out] ICorDebugModuleBreakpoint **ppBreakpoint); HRESULT GetEditAndContinueSnapshot([out] ICorDebugEditAndContinueSnapshot **ppEditAndContinueSnapshot); HRESULT GetMetaDataInterface([in] REFIID riid, [out] IUnknown **ppObj); HRESULT GetToken([out] mdModule *pToken); HRESULT IsDynamic([out] BOOL *pDynamic); HRESULT GetGlobalVariableValue([in] mdFieldDef fieldDef, [out] ICorDebugValue **ppValue); HRESULT GetSize([out] ULONG32 *pcBytes); HRESULT IsInMemory([out] BOOL *pInMemory); } [ object, local, uuid(CC7BCAF5-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugClass : IUnknown { HRESULT GetModule([out] ICorDebugModule **pModule); HRESULT GetToken([out] mdTypeDef *pTypeDef); HRESULT GetStaticFieldValue([in] mdFieldDef fieldDef, [in] ICorDebugFrame *pFrame, [out] ICorDebugValue **ppValue); } [ object, local, uuid(df59507c-d47a-459e-bce2-6427eac8fd06), pointer_default(unique) ] interface ICorDebugAssembly : IUnknown { HRESULT GetProcess([out] ICorDebugProcess **ppProcess); HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain); HRESULT EnumerateModules([out] ICorDebugModuleEnum **ppModules); HRESULT GetCodeBase([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]); HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]); } [ object, local, uuid(CC7BCAF3-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugFunction : IUnknown { HRESULT GetModule([out] ICorDebugModule **ppModule); HRESULT GetClass([out] ICorDebugClass **ppClass); HRESULT GetToken([out] mdMethodDef *pMethodDef); HRESULT GetILCode([out] ICorDebugCode **ppCode); HRESULT GetNativeCode([out] ICorDebugCode **ppCode); HRESULT CreateBreakpoint([out] ICorDebugFunctionBreakpoint **ppBreakpoint); HRESULT GetLocalVarSigToken([out] mdSignature *pmdSig); HRESULT GetCurrentVersionNumber([out] ULONG32 *pnCurrentVersion); } [ object, local, uuid(5263E909-8CB5-11d3-BD2F-0000F80849BD), pointer_default(unique) ] interface ICorDebugUnmanagedCallback : IUnknown { HRESULT DebugEvent([in] LPDEBUG_EVENT pDebugEvent, [in] BOOL fOutOfBand); } [ object, local, uuid(8D600D41-F4F6-4cb3-B7EC-7BD164944036), pointer_default(unique) ] interface ICorDebugEditAndContinueErrorInfo : IUnknown { HRESULT GetModule([out] ICorDebugModule **ppModule); HRESULT GetToken([out]mdToken *pToken); HRESULT GetErrorCode([out]HRESULT *pHr); HRESULT GetString([in] ULONG32 cchString, [out] ULONG32 *pcchString, [out] WCHAR szString[]); } [ object, local, uuid(18AD3D6E-B7D2-11d2-BD04-0000F80849BD), pointer_default(unique) ] interface ICorDebugObjectValue : ICorDebugValue { HRESULT GetClass([out] ICorDebugClass **ppClass); HRESULT GetFieldValue([in] ICorDebugClass *pClass, [in] mdFieldDef fieldDef, [out] ICorDebugValue **ppValue); HRESULT GetVirtualMethod([in] mdMemberRef memberRef, [out] ICorDebugFunction **ppFunction); HRESULT GetContext([out] ICorDebugContext **ppContext); HRESULT IsValueClass([out] BOOL *pbIsValueClass); HRESULT GetManagedCopy([out] IUnknown **ppObject); HRESULT SetFromManagedCopy([in] IUnknown *pObject); } [ object, local, uuid(CC7BCB00-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugContext : ICorDebugObjectValue { } [ object, local, uuid(CC7BCAF4-8A68-11d2-983C-0000F808342D), pointer_default(unique) ] interface ICorDebugCode : IUnknown { HRESULT IsIL([out] BOOL *pbIL); HRESULT GetFunction([out] ICorDebugFunction **ppFunction); HRESULT GetAddress([out] CORDB_ADDRESS *pStart); HRESULT GetSize([out] ULONG32 *pcBytes); HRESULT CreateBreakpoint([in] ULONG32 offset, [out] ICorDebugFunctionBreakpoint **ppBreakpoint); HRESULT GetCode([in] ULONG32 startOffset, [in] ULONG32 endOffset, [in] ULONG32 cBufferAlloc, [out] BYTE buffer[], [out] ULONG32 *pcBufferSize); HRESULT GetVersionNumber([out] ULONG32 *nVersion); HRESULT GetILToNativeMapping([in] ULONG32 cMap, [out] ULONG32 *pcMap, [out] COR_DEBUG_IL_TO_NATIVE_MAP map[]); HRESULT GetEnCRemapSequencePoints([in] ULONG32 cMap,[out] ULONG32 *pcMap, [out] ULONG32 offsets[]); } [ object, local, uuid(CC726F2F-1DB7-459b-B0EC-05F01D841B42), pointer_default(unique) ] interface ICorDebugMDA : IUnknown { HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]); HRESULT GetDescription([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]); HRESULT GetXML([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]); typedef enum CorDebugMDAFlags { MDA_FLAG_SLIP = 0x2 } CorDebugMDAFlags; HRESULT GetFlags([in] CorDebugMDAFlags * pFlags); HRESULT GetOSThreadId([out] DWORD * pOsTid); } ================================================ FILE: wine/windows/corerror.h ================================================ /* * Copyright 2008 James Hawkins * Copyright 2014 Kai Tietz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_CORERROR_H #define __WINE_CORERROR_H #include #ifndef FACILITY_URT #define FACILITY_URT 0x13 #endif #ifndef EMAKEHR #define SMAKEHR(val) MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_URT, val) #define EMAKEHR(val) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_URT, val) #endif #define COR_E_ARGUMENT E_INVALIDARG #define COR_E_INVALIDCAST E_NOINTERFACE #define COR_E_NULLREFERENCE E_POINTER #define COR_E_OUTOFMEMORY E_OUTOFMEMORY #define COR_E_UNAUTHORIZEDACCESS E_ACCESSDENIED #define COR_E_ARITHMETIC HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW) #define COR_E_STACKOVERFLOW HRESULT_FROM_WIN32(ERROR_STACK_OVERFLOW) #define COR_E_ENDOFSTREAM HRESULT_FROM_WIN32(ERROR_HANDLE_EOF) #define COR_E_FILENOTFOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) #define COR_E_BAD_PATHNAME HRESULT_FROM_WIN32(ERROR_BAD_PATHNAME) #define COR_E_DIRECTORYNOTFOUND HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) #define COR_E_PATHTOOLONG HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE) #define COR_E_AMBIGUOUSMATCH _HRESULT_TYPEDEF_(0x8000211D) #define COR_E_TARGETPARAMCOUNT _HRESULT_TYPEDEF_(0x8002000E) #define COR_E_DIVIDEBYZERO _HRESULT_TYPEDEF_(0x80020012) #define COR_E_BADIMAGEFORMAT _HRESULT_TYPEDEF_(0x8007000B) #define COR_E_ASSEMBLYEXPECTED EMAKEHR(0x1018) #define COR_E_TYPEUNLOADED EMAKEHR(0x1013) #define COR_E_APPDOMAINUNLOADED EMAKEHR(0x1014) #define COR_E_CANNOTUNLOADAPPDOMAIN EMAKEHR(0x1015) #define COR_E_FIXUPSINEXE EMAKEHR(0x1019) #define COR_E_NO_LOADLIBRARY_ALLOWED EMAKEHR(0x101a) #define COR_E_NEWER_RUNTIME EMAKEHR(0x101b) #define COR_E_CANNOT_SET_POLICY EMAKEHR(0x101c) #define COR_E_CANNOT_SPECIFY_EVIDENCE EMAKEHR(0x101d) #define COR_E_MULTIMODULEASSEMBLIESDIALLOWED EMAKEHR(0x101e) #define COR_E_MODULE_HASH_CHECK_FAILED EMAKEHR(0x1039) #define COR_E_ASSEMBLY_NOT_EXPECTED EMAKEHR(0x1057) #define COR_E_EXCEPTION EMAKEHR(0x1500) #define COR_E_SYSTEM EMAKEHR(0x1501) #define COR_E_ARGUMENTOUTOFRANGE EMAKEHR(0x1502) #define COR_E_ARRAYTYPEMISMATCH EMAKEHR(0x1503) #define COR_E_CONTEXTMARSHAL EMAKEHR(0x1504) #define COR_E_TIMEOUT EMAKEHR(0x1505) #define COR_E_EXECUTIONENGINE EMAKEHR(0x1506) #define COR_E_FIELDACCESS EMAKEHR(0x1507) #define COR_E_INDEXOUTOFRANGE EMAKEHR(0x1508) #define COR_E_INVALIDOPERATION EMAKEHR(0x1509) #define COR_E_SECURITY EMAKEHR(0x150A) #define COR_E_REMOTING EMAKEHR(0x150B) #define COR_E_SERIALIZATION EMAKEHR(0x150C) #define COR_E_VERIFICATION EMAKEHR(0x150D) #define COR_E_SERVER EMAKEHR(0x150E) #define COR_E_SERVICEDCOMPONENT EMAKEHR(0x150F) #define COR_E_METHODACCESS EMAKEHR(0x1510) #define COR_E_MISSINGFIELD EMAKEHR(0x1511) #define COR_E_MISSINGMEMBER EMAKEHR(0x1512) #define COR_E_MISSINGMETHOD EMAKEHR(0x1513) #define COR_E_MULTICASTNOTSUPPORTED EMAKEHR(0x1514) #define COR_E_NOTSUPPORTED EMAKEHR(0x1515) #define COR_E_OVERFLOW EMAKEHR(0x1516) #define COR_E_RANK EMAKEHR(0x1517) #define COR_E_SYNCHRONIZATIONLOCK EMAKEHR(0x1518) #define COR_E_THREADINTERRUPTED EMAKEHR(0x1519) #define COR_E_MEMBERACCESS EMAKEHR(0x151A) #define COR_E_THREADSTATE EMAKEHR(0x1520) #define COR_E_THREADSTOP EMAKEHR(0x1521) #define COR_E_TYPELOAD EMAKEHR(0x1522) #define COR_E_ENTRYPOINTNOTFOUND EMAKEHR(0x1523) #define COR_E_DLLNOTFOUND EMAKEHR(0x1524) #define COR_E_THREADSTART EMAKEHR(0x1525) #define COR_E_INVALIDCOMOBJECT EMAKEHR(0x1527) #define COR_E_NOTFINITENUMBER EMAKEHR(0x1528) #define COR_E_DUPLICATEWAITOBJECT EMAKEHR(0x1529) #define COR_E_SEMAPHOREFULL EMAKEHR(0x152B) #define COR_E_WAITHANDLECANNOTBEOPENED EMAKEHR(0x152C) #define COR_E_ABANDONEDMUTEX EMAKEHR(0x152D) #define COR_E_THREADABORTED EMAKEHR(0x1530) #define COR_E_INVALIDOLEVARIANTTYPE EMAKEHR(0x1531) #define COR_E_MISSINGMANIFESTRESOURCE EMAKEHR(0x1532) #define COR_E_SAFEARRAYTYPEMISMATCH EMAKEHR(0x1533) #define COR_E_TYPEINITIALIZATION EMAKEHR(0x1534) #define COR_E_MARSHALDIRECTIVE EMAKEHR(0x1535) #define COR_E_MISSINGSATELLITEASSEMBLY EMAKEHR(0x1536) #define COR_E_FORMAT EMAKEHR(0x1537) #define COR_E_SAFEARRAYRANKMISMATCH EMAKEHR(0x1538) #define COR_E_PLATFORMNOTSUPPORTED EMAKEHR(0x1539) #define COR_E_INVALIDPROGRAM EMAKEHR(0x153A) #define COR_E_OPERATIONCANCELED EMAKEHR(0x153B) #define COR_E_INSUFFICIENTMEMORY EMAKEHR(0x153D) #define COR_E_RUNTIMEWRAPPED EMAKEHR(0x153E) #define COR_E_DEVICESNOTSUPPORTED EMAKEHR(0x1540) #define COR_E_DATAMISALIGNED EMAKEHR(0x1541) #define COR_E_CODECONTRACTFAILED EMAKEHR(0x1542) #define COR_E_TYPEACCESS EMAKEHR(0x1543) #define COR_E_ACCESSING_CCW EMAKEHR(0x1544) #define COR_E_LOADING_REFERENCE_ASSEMBLY EMAKEHR(0x1058) #define COR_E_KEYNOTFOUND EMAKEHR(0x1577) #define COR_E_INSUFFICIENTEXECUTIONSTACK EMAKEHR(0x1578) #define COR_E_APPLICATION EMAKEHR(0x1600) #define COR_E_INVALIDFILTERCRITERIA EMAKEHR(0x1601) #define COR_E_REFLECTIONTYPELOAD EMAKEHR(0x1602) #define COR_E_TARGET EMAKEHR(0x1603) #define COR_E_TARGETINVOCATION EMAKEHR(0x1604) #define COR_E_CUSTOMATTRIBUTEFORMAT EMAKEHR(0x1605) #define COR_E_IO EMAKEHR(0x1620) #define COR_E_FILELOAD EMAKEHR(0x1621) #define COR_E_OBJECTDISPOSED EMAKEHR(0x1622) #define COR_E_FAILFAST EMAKEHR(0x1623) #define COR_E_HOSTPROTECTION EMAKEHR(0x1640) #define COR_E_ILLEGAL_REENTRANCY EMAKEHR(0x1641) #define COR_E_SqlException EMAKEHR(0x1904) #define COR_E_Data EMAKEHR(0x1920) #define COR_E_DataDeletedRowInaccessible EMAKEHR(0x1921) #define COR_E_DataDuplicateName EMAKEHR(0x1922) #define COR_E_DataInRowChangingEvent EMAKEHR(0x1923) #define COR_E_DataInvalidConstraint EMAKEHR(0x1924) #define COR_E_DataMissingPrimaryKey EMAKEHR(0x1925) #define COR_E_DataNoNullAllowed EMAKEHR(0x1926) #define COR_E_DataReadOnly EMAKEHR(0x1927) #define COR_E_DataRowNotInTable EMAKEHR(0x1928) #define COR_E_DataVersionNotFound EMAKEHR(0x1929) #define COR_E_DataConstraint EMAKEHR(0x192a) #define COR_E_StrongTyping EMAKEHR(0x192b) #define COR_E_SqlType EMAKEHR(0x1930) #define COR_E_SqlNullValue EMAKEHR(0x1931) #define COR_E_SqlTruncate EMAKEHR(0x1932) #define COR_E_AdapterMapping EMAKEHR(0x1933) #define COR_E_DataAdapter EMAKEHR(0x1934) #define COR_E_DBConcurrency EMAKEHR(0x1935) #define COR_E_OperationAborted EMAKEHR(0x1936) #define COR_E_InvalidUdt EMAKEHR(0x1937) #define COR_E_OdbcException EMAKEHR(0x1937) #define COR_E_OracleException EMAKEHR(0x1938) #define COR_E_Xml EMAKEHR(0x1940) #define COR_E_XmlSchema EMAKEHR(0x1941) #define COR_E_XmlXslt EMAKEHR(0x1942) #define COR_E_XmlXPath EMAKEHR(0x1943) #define COR_E_XmlQuery EMAKEHR(0x1944) #define FUSION_E_REF_DEF_MISMATCH EMAKEHR(0x1040) #define FUSION_E_INVALID_PRIVATE_ASM_LOCATION EMAKEHR(0x1041) #define FUSION_E_ASM_MODULE_MISSING EMAKEHR(0x1042) #define FUSION_E_UNEXPECTED_MODULE_FOUND EMAKEHR(0x1043) #define FUSION_E_PRIVATE_ASM_DISALLOWED EMAKEHR(0x1044) #define FUSION_E_SIGNATURE_CHECK_FAILED EMAKEHR(0x1045) #define FUSION_E_DATABASE_ERROR EMAKEHR(0x1046) #define FUSION_E_INVALID_NAME EMAKEHR(0x1047) #define FUSION_E_CODE_DOWNLOAD_DISABLED EMAKEHR(0x1048) #define FUSION_E_UNINSTALL_DISALLOWED EMAKEHR(0x1049) #define FUSION_E_HOST_GAC_ASM_MISMATCH EMAKEHR(0x1050) #define FUSION_E_LOADFROM_BLOCKED EMAKEHR(0x1051) #define FUSION_E_CACHEFILE_FAILED EMAKEHR(0x1052) #define FUSION_E_APP_DOMAIN_LOCKED EMAKEHR(0x1053) #define FUSION_E_CONFIGURATION_ERROR EMAKEHR(0x1054) #define FUSION_E_MANIFEST_PARSE_ERROR EMAKEHR(0x1055) #define FUSION_E_INVALID_ASSEMBLY_REFERENCE EMAKEHR(0x1056) #define CLDB_E_FILE_BADREAD EMAKEHR(0x1100) #define CLDB_E_FILE_BADWRITE EMAKEHR(0x1101) #define CLDB_E_FILE_READONLY EMAKEHR(0x1103) #define CLDB_E_NAME_ERROR EMAKEHR(0x1105) #define CLDB_E_TRUNCATION EMAKEHR(0x1106) #define CLDB_E_FILE_OLDVER EMAKEHR(0x1107) #define CLDB_E_RELOCATED EMAKEHR(0x1108) #define CLDB_E_SMDUPLICATE EMAKEHR(0x110a) #define CLDB_E_NO_DATA EMAKEHR(0x110b) #define CLDB_E_READONLY EMAKEHR(0x110c) #define CLDB_E_INCOMPATIBLE EMAKEHR(0x110d) #define CLDB_E_FILE_CORRUPT EMAKEHR(0x110e) #define CLDB_E_SCHEMA_VERNOTFOUND EMAKEHR(0x110f) #define CLDB_E_BADUPDATEMODE EMAKEHR(0x1110) #define CLDB_E_INDEX_NONULLKEYS EMAKEHR(0x1121) #define CLDB_E_INDEX_DUPLICATE EMAKEHR(0x1122) #define CLDB_E_INDEX_BADTYPE EMAKEHR(0x1123) #define CLDB_E_INDEX_NOTFOUND EMAKEHR(0x1124) #define CLDB_E_RECORD_NOTFOUND EMAKEHR(0x1130) #define CLDB_E_RECORD_OVERFLOW EMAKEHR(0x1131) #define CLDB_E_RECORD_DUPLICATE EMAKEHR(0x1132) #define CLDB_E_RECORD_PKREQUIRED EMAKEHR(0x1133) #define CLDB_E_RECORD_DELETED EMAKEHR(0x1134) #define CLDB_E_RECORD_OUTOFORDER EMAKEHR(0x1135) #define CLDB_E_COLUMN_OVERFLOW EMAKEHR(0x1140) #define CLDB_E_COLUMN_READONLY EMAKEHR(0x1141) #define CLDB_E_COLUMN_SPECIALCOL EMAKEHR(0x1142) #define CLDB_E_COLUMN_PKNONULLS EMAKEHR(0x1143) #define CLDB_E_TABLE_CANTDROP EMAKEHR(0x1150) #define CLDB_E_OBJECT_NOTFOUND EMAKEHR(0x1151) #define CLDB_E_OBJECT_COLNOTFOUND EMAKEHR(0x1152) #define CLDB_E_VECTOR_BADINDEX EMAKEHR(0x1153) #define CLDB_E_TOO_BIG EMAKEHR(0x1154) #define CLDB_E_INTERNALERROR EMAKEHR(0x1fff) #define CLDB_S_TRUNCATION SMAKEHR(0x1106) #define CLDB_S_NULL SMAKEHR(0x1109) #define CLDB_S_INDEX_TABLESCANREQUIRED SMAKEHR(0x1125) #define CLR_E_APP_CONFIG_NOT_ALLOWED_IN_APPX_PROCESS EMAKEHR(0x104a) #define CLR_E_SHIM_RUNTIME EMAKEHR(0x1700) #define CLR_E_SHIM_RUNTIMELOAD EMAKEHR(0x1700) #define CLR_E_SHIM_RUNTIMEEXPORT EMAKEHR(0x1701) #define CLR_E_SHIM_INSTALLROOT EMAKEHR(0x1702) #define CLR_E_SHIM_INSTALLCOMP EMAKEHR(0x1703) #define CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND EMAKEHR(0x1704) #define CLR_E_SHIM_SHUTDOWNINPROGRESS EMAKEHR(0x1705) #define CLR_E_BIND_ASSEMBLY_VERSION_TOO_LOW EMAKEHR(0x2000) #define CLR_E_BIND_ASSEMBLY_PUBLIC_KEY_MISMATCH EMAKEHR(0x2001) #define CLR_E_BIND_IMAGE_UNAVAILABLE EMAKEHR(0x2002) #define CLR_E_BIND_UNRECOGNIZED_IDENTITY_FORMAT EMAKEHR(0x2003) #define CLR_E_BIND_ASSEMBLY_NOT_FOUND EMAKEHR(0x2004) #define CLR_E_BIND_TYPE_NOT_FOUND EMAKEHR(0x2005) #define CLR_OPTSVC_E_CONTROLLER_INTERRUPT EMAKEHR(0x1e00) #define META_S_PARAM_MISMATCH SMAKEHR(0x1189) #define META_S_DUPLICATE SMAKEHR(0x1197) #define TLBX_E_INVALID_TYPEINFO EMAKEHR(0x1160) #define TLBX_E_INVALID_TYPEINFO_UNNAMED EMAKEHR(0x1161) #define TLBX_E_CTX_NESTED EMAKEHR(0x1162) #define TLBX_E_ERROR_MESSAGE EMAKEHR(0x1163) #define TLBX_E_CANT_SAVE EMAKEHR(0x1164) #define TLBX_E_CANTLOADLIBRARY EMAKEHR(0x1166) #define TLBX_E_BAD_VT_TYPE EMAKEHR(0x1167) #define TLBX_E_NO_MSCOREE_TLB EMAKEHR(0x1168) #define TLBX_E_BAD_MSCOREE_TLB EMAKEHR(0x1169) #define TLBX_E_TLB_EXCEPTION EMAKEHR(0x116a) #define TLBX_E_MULTIPLE_LCIDS EMAKEHR(0x116b) #define TLBX_E_AMBIGUOUS_RETURN EMAKEHR(0x116d) #define TLBX_E_DUPLICATE_TYPE_NAME EMAKEHR(0x116e) #define TLBX_E_ASANY EMAKEHR(0x1175) #define TLBX_E_INVALIDLCIDPARAM EMAKEHR(0x1176) #define TLBX_E_LCIDONDISPONLYITF EMAKEHR(0x1177) #define TLBX_E_NONPUBLIC_FIELD EMAKEHR(0x1178) #define TLBX_E_BAD_NAMES EMAKEHR(0x117b) #define TLBX_E_GENERICINST_SIGNATURE EMAKEHR(0x117d) #define TLBX_E_GENERICPAR_SIGNATURE EMAKEHR(0x117e) #define TLBX_E_NO_SAFEHANDLE_ARRAYS EMAKEHR(0x1186) #define TLBX_E_NO_CRITICALHANDLE_ARRAYS EMAKEHR(0x118c) #define TLBX_E_CANT_LOAD_MODULE EMAKEHR(0x11a0) #define TLBX_E_CANT_LOAD_CLASS EMAKEHR(0x11a1) #define TLBX_E_NULL_MODULE EMAKEHR(0x11a2) #define TLBX_E_NO_CLSID_KEY EMAKEHR(0x11a3) #define TLBX_E_CIRCULAR_EXPORT EMAKEHR(0x11a4) #define TLBX_E_CIRCULAR_IMPORT EMAKEHR(0x11a5) #define TLBX_E_BAD_NATIVETYPE EMAKEHR(0x11a6) #define TLBX_E_BAD_VTABLE EMAKEHR(0x11a7) #define TLBX_E_CRM_NON_STATIC EMAKEHR(0x11a8) #define TLBX_E_CRM_INVALID_SIG EMAKEHR(0x11a9) #define TLBX_E_CLASS_LOAD_EXCEPTION EMAKEHR(0x11aa) #define TLBX_E_UNKNOWN_SIGNATURE EMAKEHR(0x11ab) #define TLBX_E_REFERENCED_TYPELIB EMAKEHR(0x11ac) #define TLBX_E_INVALID_NAMESPACE EMAKEHR(0x11ad) #define TLBX_E_LAYOUT_ERROR EMAKEHR(0x11ae) #define TLBX_E_NOTIUNKNOWN EMAKEHR(0x11af) #define TLBX_E_NONVISIBLEVALUECLASS EMAKEHR(0x11b0) #define TLBX_E_LPTSTR_NOT_ALLOWED EMAKEHR(0x11b1) #define TLBX_E_AUTO_CS_NOT_ALLOWED EMAKEHR(0x11b2) #define TLBX_E_ENUM_VALUE_INVALID EMAKEHR(0x11b5) #define TLBX_E_DUPLICATE_IID EMAKEHR(0x11b6) #define TLBX_E_NO_NESTED_ARRAYS EMAKEHR(0x11b7) #define TLBX_E_PARAM_ERROR_NAMED EMAKEHR(0x11b8) #define TLBX_E_PARAM_ERROR_UNNAMED EMAKEHR(0x11b9) #define TLBX_E_AGNOST_SIGNATURE EMAKEHR(0x11ba) #define TLBX_E_CONVERT_FAIL EMAKEHR(0x11bb) #define TLBX_E_BAD_SIGNATURE EMAKEHR(0x11bd) #define TLBX_E_ARRAY_NEEDS_NT_FIXED EMAKEHR(0x11be) #define TLBX_E_CLASS_NEEDS_NT_INTF EMAKEHR(0x11bf) #define TLBX_E_TYPED_REF EMAKEHR(0x11da) #define TLBX_E_BITNESS_MISMATCH EMAKEHR(0x11e1) #define TLBX_E_EVENT_WITH_NEWENUM EMAKEHR(0x11e2) #define TLBX_E_PROPGET_WITHOUT_RETURN EMAKEHR(0x11e3) #define TLBX_E_CIRCULAR_EXPORT2 EMAKEHR(0x1b52) #define TLBX_I_TYPEINFO_IMPORTED SMAKEHR(0x116c) #define TLBX_I_PIA_REGISTERED_FOR_TLB SMAKEHR(0x116d) #define TLBX_I_AGNOSTIC_ASSEMBLY SMAKEHR(0x116e) #define TLBX_I_USEIUNKNOWN SMAKEHR(0x116f) #define TLBX_I_UNCONVERTABLE_ARGS SMAKEHR(0x1170) #define TLBX_I_UNCONVERTABLE_FIELD SMAKEHR(0x1171) #define TLBX_I_NONSEQUENTIALSTRUCT EMAKEHR(0x1172) #define TLBX_I_RESOLVEREFFAILED EMAKEHR(0x1174) #define TLBX_I_TYPE_EXPORTED SMAKEHR(0x1179) #define TLBX_I_DUPLICATE_DISPID SMAKEHR(0x117a) #define TLBX_I_REF_TYPE_AS_STRUCT SMAKEHR(0x117c) #define TLBX_I_GENERIC_TYPE SMAKEHR(0x117f) #define TLBX_I_GENERIC_BASE_TYPE SMAKEHR(0x11e0) #define TLBX_S_REFERENCED_TYPELIB SMAKEHR(0x11ac) #define TLBX_S_NOSTDINTERFACE SMAKEHR(0x11b3) #define TLBX_S_DUPLICATE_DISPID SMAKEHR(0x11b4) #define TLBX_W_LIBNOTREGISTERED EMAKEHR(0x1165) #define TLBX_W_WARNING_MESSAGE SMAKEHR(0x1173) #define TLBX_W_ASSEMBLY_HAS_EMBEDDED_TLB SMAKEHR(0x1174) #define TLBX_W_CROSS_COMPILE_NO_REFS SMAKEHR(0x1175) #define TLBX_W_PURE_CROSS_COMPILE SMAKEHR(0x1176) #define TLBX_W_NON_INTEGRAL_CA_TYPE SMAKEHR(0x1184) #define TLBX_W_IENUM_CA_ON_IUNK SMAKEHR(0x1185) #define TLBX_W_DUAL_NOT_DISPATCH EMAKEHR(0x11bc) #define TLBX_W_NO_PROPS_IN_EVENTS EMAKEHR(0x11d3) #define TLBX_W_ENUM_VALUE_TOOBIG SMAKEHR(0x11d5) #define TLBX_W_EXPORTING_AUTO_LAYOUT SMAKEHR(0x11d9) #define TLBX_W_DEFAULT_INTF_NOT_VISIBLE SMAKEHR(0x11db) #define TLBX_W_BAD_SAFEARRAYFIELD_NO_ELEMENTVT SMAKEHR(0x11de) #define TLBX_W_LAYOUTCLASS_AS_INTERFACE SMAKEHR(0x11df) #define VLDTR_E_RID_OUTOFRANGE EMAKEHR(0x1203) #define VLDTR_E_CDTKN_OUTOFRANGE EMAKEHR(0x1204) #define VLDTR_E_CDRID_OUTOFRANGE EMAKEHR(0x1205) #define VLDTR_E_STRING_INVALID EMAKEHR(0x1206) #define VLDTR_E_GUID_INVALID EMAKEHR(0x1207) #define VLDTR_E_BLOB_INVALID EMAKEHR(0x1208) #define VLDTR_E_MOD_MULTI EMAKEHR(0x1209) #define VLDTR_E_MOD_NULLMVID EMAKEHR(0x120a) #define VLDTR_E_TR_NAMENULL EMAKEHR(0x120b) #define VLDTR_E_TR_DUP EMAKEHR(0x120c) #define VLDTR_E_TD_NAMENULL EMAKEHR(0x120d) #define VLDTR_E_TD_DUPNAME EMAKEHR(0x120e) #define VLDTR_E_TD_DUPGUID EMAKEHR(0x120f) #define VLDTR_E_TD_NOTIFACEOBJEXTNULL EMAKEHR(0x1210) #define VLDTR_E_TD_OBJEXTENDSNONNULL EMAKEHR(0x1211) #define VLDTR_E_TD_EXTENDSSEALED EMAKEHR(0x1212) #define VLDTR_E_TD_DLTNORTSPCL EMAKEHR(0x1213) #define VLDTR_E_TD_RTSPCLNOTDLT EMAKEHR(0x1214) #define VLDTR_E_MI_DECLPRIV EMAKEHR(0x1215) #define VLDTR_E_AS_BADNAME EMAKEHR(0x1216) #define VLDTR_E_FILE_SYSNAME EMAKEHR(0x1217) #define VLDTR_E_MI_BODYSTATIC EMAKEHR(0x1218) #define VLDTR_E_TD_IFACENOTABS EMAKEHR(0x1219) #define VLDTR_E_TD_IFACEPARNOTNIL EMAKEHR(0x121a) #define VLDTR_E_TD_IFACEGUIDNULL EMAKEHR(0x121b) #define VLDTR_E_MI_DECLFINAL EMAKEHR(0x121c) #define VLDTR_E_TD_VTNOTSEAL EMAKEHR(0x121d) #define VLDTR_E_PD_BADFLAGS EMAKEHR(0x121e) #define VLDTR_E_IFACE_DUP EMAKEHR(0x121f) #define VLDTR_E_MR_NAMENULL EMAKEHR(0x1220) #define VLDTR_E_MR_VTBLNAME EMAKEHR(0x1221) #define VLDTR_E_MR_DELNAME EMAKEHR(0x1222) #define VLDTR_E_MR_PARNIL EMAKEHR(0x1223) #define VLDTR_E_MR_BADCALLINGCONV EMAKEHR(0x1224) #define VLDTR_E_MR_NOTVARARG EMAKEHR(0x1225) #define VLDTR_E_MR_NAMEDIFF EMAKEHR(0x1226) #define VLDTR_E_MR_SIGDIFF EMAKEHR(0x1227) #define VLDTR_E_MR_DUP EMAKEHR(0x1228) #define VLDTR_E_CL_TDAUTO EMAKEHR(0x1229) #define VLDTR_E_CL_BADPCKSZ EMAKEHR(0x122a) #define VLDTR_E_CL_DUP EMAKEHR(0x122b) #define VLDTR_E_FL_BADOFFSET EMAKEHR(0x122c) #define VLDTR_E_FL_TDNIL EMAKEHR(0x122d) #define VLDTR_E_FL_NOCL EMAKEHR(0x122e) #define VLDTR_E_FL_TDNOTEXPLCT EMAKEHR(0x122f) #define VLDTR_E_FL_FLDSTATIC EMAKEHR(0x1230) #define VLDTR_E_FL_DUP EMAKEHR(0x1231) #define VLDTR_E_MODREF_NAMENULL EMAKEHR(0x1232) #define VLDTR_E_MODREF_DUP EMAKEHR(0x1233) #define VLDTR_E_TR_BADSCOPE EMAKEHR(0x1234) #define VLDTR_E_TD_NESTEDNOENCL EMAKEHR(0x1235) #define VLDTR_E_TD_EXTTRRES EMAKEHR(0x1236) #define VLDTR_E_SIGNULL EMAKEHR(0x1237) #define VLDTR_E_SIGNODATA EMAKEHR(0x1238) #define VLDTR_E_MD_BADCALLINGCONV EMAKEHR(0x1239) #define VLDTR_E_MD_THISSTATIC EMAKEHR(0x123a) #define VLDTR_E_MD_NOTTHISNOTSTATIC EMAKEHR(0x123b) #define VLDTR_E_MD_NOARGCNT EMAKEHR(0x123c) #define VLDTR_E_SIG_MISSELTYPE EMAKEHR(0x123d) #define VLDTR_E_SIG_MISSTKN EMAKEHR(0x123e) #define VLDTR_E_SIG_TKNBAD EMAKEHR(0x123f) #define VLDTR_E_SIG_MISSFPTR EMAKEHR(0x1240) #define VLDTR_E_SIG_MISSFPTRARGCNT EMAKEHR(0x1241) #define VLDTR_E_SIG_MISSRANK EMAKEHR(0x1242) #define VLDTR_E_SIG_MISSNSIZE EMAKEHR(0x1243) #define VLDTR_E_SIG_MISSSIZE EMAKEHR(0x1244) #define VLDTR_E_SIG_MISSNLBND EMAKEHR(0x1245) #define VLDTR_E_SIG_MISSLBND EMAKEHR(0x1246) #define VLDTR_E_SIG_BADELTYPE EMAKEHR(0x1247) #define VLDTR_E_SIG_MISSVASIZE EMAKEHR(0x1248) #define VLDTR_E_FD_BADCALLINGCONV EMAKEHR(0x1249) #define VLDTR_E_MD_NAMENULL EMAKEHR(0x124a) #define VLDTR_E_MD_PARNIL EMAKEHR(0x124b) #define VLDTR_E_MD_DUP EMAKEHR(0x124c) #define VLDTR_E_FD_NAMENULL EMAKEHR(0x124d) #define VLDTR_E_FD_PARNIL EMAKEHR(0x124e) #define VLDTR_E_FD_DUP EMAKEHR(0x124f) #define VLDTR_E_AS_MULTI EMAKEHR(0x1250) #define VLDTR_E_AS_NAMENULL EMAKEHR(0x1251) #define VLDTR_E_SIG_TOKTYPEMISMATCH EMAKEHR(0x1252) #define VLDTR_E_CL_TDINTF EMAKEHR(0x1253) #define VLDTR_E_ASOS_OSPLTFRMIDINVAL EMAKEHR(0x1254) #define VLDTR_E_AR_NAMENULL EMAKEHR(0x1255) #define VLDTR_E_TD_ENCLNOTNESTED EMAKEHR(0x1256) #define VLDTR_E_AROS_OSPLTFRMIDINVAL EMAKEHR(0x1257) #define VLDTR_E_FILE_NAMENULL EMAKEHR(0x1258) #define VLDTR_E_CT_NAMENULL EMAKEHR(0x1259) #define VLDTR_E_TD_EXTENDSCHILD EMAKEHR(0x125a) #define VLDTR_E_MAR_NAMENULL EMAKEHR(0x125b) #define VLDTR_E_FILE_DUP EMAKEHR(0x125c) #define VLDTR_E_FILE_NAMEFULLQLFD EMAKEHR(0x125d) #define VLDTR_E_CT_DUP EMAKEHR(0x125e) #define VLDTR_E_MAR_DUP EMAKEHR(0x125f) #define VLDTR_E_MAR_NOTPUBPRIV EMAKEHR(0x1260) #define VLDTR_E_TD_ENUMNOVALUE EMAKEHR(0x1261) #define VLDTR_E_TD_ENUMVALSTATIC EMAKEHR(0x1262) #define VLDTR_E_TD_ENUMVALNOTSN EMAKEHR(0x1263) #define VLDTR_E_TD_ENUMFLDNOTST EMAKEHR(0x1264) #define VLDTR_E_TD_ENUMFLDNOTLIT EMAKEHR(0x1265) #define VLDTR_E_TD_ENUMNOLITFLDS EMAKEHR(0x1266) #define VLDTR_E_TD_ENUMFLDSIGMISMATCH EMAKEHR(0x1267) #define VLDTR_E_TD_ENUMVALNOT1ST EMAKEHR(0x1268) #define VLDTR_E_FD_NOTVALUERTSN EMAKEHR(0x1269) #define VLDTR_E_FD_VALUEPARNOTENUM EMAKEHR(0x126a) #define VLDTR_E_FD_INSTINIFACE EMAKEHR(0x126b) #define VLDTR_E_FD_NOTPUBINIFACE EMAKEHR(0x126c) #define VLDTR_E_FMD_GLOBALNOTPUBPRIVSC EMAKEHR(0x126d) #define VLDTR_E_FMD_GLOBALNOTSTATIC EMAKEHR(0x126e) #define VLDTR_E_FD_GLOBALNORVA EMAKEHR(0x126f) #define VLDTR_E_MD_CTORZERORVA EMAKEHR(0x1270) #define VLDTR_E_FD_MARKEDNOMARSHAL EMAKEHR(0x1271) #define VLDTR_E_FD_MARSHALNOTMARKED EMAKEHR(0x1272) #define VLDTR_E_FD_MARKEDNODEFLT EMAKEHR(0x1273) #define VLDTR_E_FD_DEFLTNOTMARKED EMAKEHR(0x1274) #define VLDTR_E_FMD_MARKEDNOSECUR EMAKEHR(0x1275) #define VLDTR_E_FMD_SECURNOTMARKED EMAKEHR(0x1276) #define VLDTR_E_FMD_PINVOKENOTSTATIC EMAKEHR(0x1277) #define VLDTR_E_FMD_MARKEDNOPINVOKE EMAKEHR(0x1278) #define VLDTR_E_FMD_PINVOKENOTMARKED EMAKEHR(0x1279) #define VLDTR_E_FMD_BADIMPLMAP EMAKEHR(0x127a) #define VLDTR_E_IMAP_BADMODREF EMAKEHR(0x127b) #define VLDTR_E_IMAP_BADMEMBER EMAKEHR(0x127c) #define VLDTR_E_IMAP_BADIMPORTNAME EMAKEHR(0x127d) #define VLDTR_E_IMAP_BADCALLCONV EMAKEHR(0x127e) #define VLDTR_E_FMD_BADACCESSFLAG EMAKEHR(0x127f) #define VLDTR_E_FD_INITONLYANDLITERAL EMAKEHR(0x1280) #define VLDTR_E_FD_LITERALNOTSTATIC EMAKEHR(0x1281) #define VLDTR_E_FMD_RTSNNOTSN EMAKEHR(0x1282) #define VLDTR_E_MD_ABSTPARNOTABST EMAKEHR(0x1283) #define VLDTR_E_MD_NOTSTATABSTININTF EMAKEHR(0x1284) #define VLDTR_E_MD_NOTPUBININTF EMAKEHR(0x1285) #define VLDTR_E_MD_CTORININTF EMAKEHR(0x1286) #define VLDTR_E_MD_GLOBALCTORCCTOR EMAKEHR(0x1287) #define VLDTR_E_MD_CTORSTATIC EMAKEHR(0x1288) #define VLDTR_E_MD_CTORNOTSNRTSN EMAKEHR(0x1289) #define VLDTR_E_MD_CTORVIRT EMAKEHR(0x128a) #define VLDTR_E_MD_CTORABST EMAKEHR(0x128b) #define VLDTR_E_MD_CCTORNOTSTATIC EMAKEHR(0x128c) #define VLDTR_E_MD_ZERORVA EMAKEHR(0x128d) #define VLDTR_E_MD_FINNOTVIRT EMAKEHR(0x128e) #define VLDTR_E_MD_STATANDFINORVIRT EMAKEHR(0x128f) #define VLDTR_E_MD_ABSTANDFINAL EMAKEHR(0x1290) #define VLDTR_E_MD_ABSTANDIMPL EMAKEHR(0x1291) #define VLDTR_E_MD_ABSTANDPINVOKE EMAKEHR(0x1292) #define VLDTR_E_MD_ABSTNOTVIRT EMAKEHR(0x1293) #define VLDTR_E_MD_NOTABSTNOTIMPL EMAKEHR(0x1294) #define VLDTR_E_MD_NOTABSTBADFLAGSRVA EMAKEHR(0x1295) #define VLDTR_E_MD_PRIVSCOPENORVA EMAKEHR(0x1296) #define VLDTR_E_MD_GLOBALABSTORVIRT EMAKEHR(0x1297) #define VLDTR_E_SIG_LONGFORM EMAKEHR(0x1298) #define VLDTR_E_MD_MULTIPLESEMANTICS EMAKEHR(0x1299) #define VLDTR_E_MD_INVALIDSEMANTICS EMAKEHR(0x129a) #define VLDTR_E_MD_SEMANTICSNOTEXIST EMAKEHR(0x129b) #define VLDTR_E_MI_DECLNOTVIRT EMAKEHR(0x129c) #define VLDTR_E_FMD_GLOBALITEM EMAKEHR(0x129d) #define VLDTR_E_MD_MULTSEMANTICFLAGS EMAKEHR(0x129e) #define VLDTR_E_MD_NOSEMANTICFLAGS EMAKEHR(0x129f) #define VLDTR_E_FD_FLDINIFACE EMAKEHR(0x12a0) #define VLDTR_E_AS_HASHALGID EMAKEHR(0x12a1) #define VLDTR_E_AS_PROCID EMAKEHR(0x12a2) #define VLDTR_E_AR_PROCID EMAKEHR(0x12a3) #define VLDTR_E_CN_PARENTRANGE EMAKEHR(0x12a4) #define VLDTR_E_AS_BADFLAGS EMAKEHR(0x12a5) #define VLDTR_E_TR_HASTYPEDEF EMAKEHR(0x12a6) #define VLDTR_E_IFACE_BADIMPL EMAKEHR(0x12a7) #define VLDTR_E_IFACE_BADIFACE EMAKEHR(0x12a8) #define VLDTR_E_TD_SECURNOTMARKED EMAKEHR(0x12a9) #define VLDTR_E_TD_MARKEDNOSECUR EMAKEHR(0x12aa) #define VLDTR_E_MD_CCTORHASARGS EMAKEHR(0x12ab) #define VLDTR_E_CT_BADIMPL EMAKEHR(0x12ac) #define VLDTR_E_MI_ALIENBODY EMAKEHR(0x12ad) #define VLDTR_E_MD_CCTORCALLCONV EMAKEHR(0x12ae) #define VLDTR_E_MI_BADCLASS EMAKEHR(0x12af) #define VLDTR_E_MI_CLASSISINTF EMAKEHR(0x12b0) #define VLDTR_E_MI_BADDECL EMAKEHR(0x12b1) #define VLDTR_E_MI_BADBODY EMAKEHR(0x12b2) #define VLDTR_E_MI_DUP EMAKEHR(0x12b3) #define VLDTR_E_FD_BADPARENT EMAKEHR(0x12b4) #define VLDTR_E_MD_PARAMOUTOFSEQ EMAKEHR(0x12b5) #define VLDTR_E_MD_PARASEQTOOBIG EMAKEHR(0x12b6) #define VLDTR_E_MD_PARMMARKEDNOMARSHAL EMAKEHR(0x12b7) #define VLDTR_E_MD_PARMMARSHALNOTMARKED EMAKEHR(0x12b8) #define VLDTR_E_MD_PARMMARKEDNODEFLT EMAKEHR(0x12ba) #define VLDTR_E_MD_PARMDEFLTNOTMARKED EMAKEHR(0x12bb) #define VLDTR_E_PR_BADSCOPE EMAKEHR(0x12bc) #define VLDTR_E_PR_NONAME EMAKEHR(0x12bd) #define VLDTR_E_PR_NOSIG EMAKEHR(0x12be) #define VLDTR_E_PR_DUP EMAKEHR(0x12bf) #define VLDTR_E_PR_BADCALLINGCONV EMAKEHR(0x12c0) #define VLDTR_E_PR_MARKEDNODEFLT EMAKEHR(0x12c1) #define VLDTR_E_PR_DEFLTNOTMARKED EMAKEHR(0x12c2) #define VLDTR_E_PR_BADSEMANTICS EMAKEHR(0x12c3) #define VLDTR_E_PR_BADMETHOD EMAKEHR(0x12c4) #define VLDTR_E_PR_ALIENMETHOD EMAKEHR(0x12c5) #define VLDTR_E_CN_BLOBNOTNULL EMAKEHR(0x12c6) #define VLDTR_E_CN_BLOBNULL EMAKEHR(0x12c7) #define VLDTR_E_EV_BADSCOPE EMAKEHR(0x12c8) #define VLDTR_E_EV_NONAME EMAKEHR(0x12ca) #define VLDTR_E_EV_DUP EMAKEHR(0x12cb) #define VLDTR_E_EV_BADEVTYPE EMAKEHR(0x12cc) #define VLDTR_E_EV_EVTYPENOTCLASS EMAKEHR(0x12cd) #define VLDTR_E_EV_BADSEMANTICS EMAKEHR(0x12ce) #define VLDTR_E_EV_BADMETHOD EMAKEHR(0x12cf) #define VLDTR_E_EV_ALIENMETHOD EMAKEHR(0x12d0) #define VLDTR_E_EV_NOADDON EMAKEHR(0x12d1) #define VLDTR_E_EV_NOREMOVEON EMAKEHR(0x12d2) #define VLDTR_E_CT_DUPTDNAME EMAKEHR(0x12d3) #define VLDTR_E_MAR_BADOFFSET EMAKEHR(0x12d4) #define VLDTR_E_DS_BADOWNER EMAKEHR(0x12d5) #define VLDTR_E_DS_BADFLAGS EMAKEHR(0x12d6) #define VLDTR_E_DS_NOBLOB EMAKEHR(0x12d7) #define VLDTR_E_MAR_BADIMPL EMAKEHR(0x12d8) #define VLDTR_E_MR_VARARGCALLINGCONV EMAKEHR(0x12da) #define VLDTR_E_MD_CTORNOTVOID EMAKEHR(0x12db) #define VLDTR_E_EV_FIRENOTVOID EMAKEHR(0x12dc) #define VLDTR_E_AS_BADLOCALE EMAKEHR(0x12dd) #define VLDTR_E_CN_PARENTTYPE EMAKEHR(0x12de) #define VLDTR_E_SIG_SENTINMETHODDEF EMAKEHR(0x12df) #define VLDTR_E_SIG_SENTMUSTVARARG EMAKEHR(0x12e0) #define VLDTR_E_SIG_MULTSENTINELS EMAKEHR(0x12e1) #define VLDTR_E_SIG_LASTSENTINEL EMAKEHR(0x12e2) #define VLDTR_E_SIG_MISSARG EMAKEHR(0x12e3) #define VLDTR_E_SIG_BYREFINFIELD EMAKEHR(0x12e4) #define VLDTR_E_MD_SYNCMETHODINVTYPE EMAKEHR(0x12e5) #define VLDTR_E_TD_NAMETOOLONG EMAKEHR(0x12e6) #define VLDTR_E_AS_PROCDUP EMAKEHR(0x12e7) #define VLDTR_E_ASOS_DUP EMAKEHR(0x12e8) #define VLDTR_E_MAR_BADFLAGS EMAKEHR(0x12e9) #define VLDTR_E_CT_NOTYPEDEFID EMAKEHR(0x12ea) #define VLDTR_E_FILE_BADFLAGS EMAKEHR(0x12eb) #define VLDTR_E_FILE_NULLHASH EMAKEHR(0x12ec) #define VLDTR_E_MOD_NONAME EMAKEHR(0x12ed) #define VLDTR_E_MOD_NAMEFULLQLFD EMAKEHR(0x12ee) #define VLDTR_E_TD_RTSPCLNOTSPCL EMAKEHR(0x12ef) #define VLDTR_E_TD_EXTENDSIFACE EMAKEHR(0x12f0) #define VLDTR_E_MD_CTORPINVOKE EMAKEHR(0x12f1) #define VLDTR_E_TD_SYSENUMNOTCLASS EMAKEHR(0x12f2) #define VLDTR_E_TD_SYSENUMNOTEXTVTYPE EMAKEHR(0x12f3) #define VLDTR_E_MI_SIGMISMATCH EMAKEHR(0x12f4) #define VLDTR_E_TD_ENUMHASMETHODS EMAKEHR(0x12f5) #define VLDTR_E_TD_ENUMIMPLIFACE EMAKEHR(0x12f6) #define VLDTR_E_TD_ENUMHASPROP EMAKEHR(0x12f7) #define VLDTR_E_TD_ENUMHASEVENT EMAKEHR(0x12f8) #define VLDTR_E_TD_BADMETHODLST EMAKEHR(0x12f9) #define VLDTR_E_TD_BADFIELDLST EMAKEHR(0x12fa) #define VLDTR_E_CN_BADTYPE EMAKEHR(0x12fb) #define VLDTR_E_TD_ENUMNOINSTFLD EMAKEHR(0x12fc) #define VLDTR_E_TD_ENUMMULINSTFLD EMAKEHR(0x12fd) #define VLDTR_E_INTERRUPTED EMAKEHR(0x12fe) #define VLDTR_E_NOTINIT EMAKEHR(0x12ff) #define VLDTR_E_IFACE_NOTIFACE EMAKEHR(0x1b00) #define VLDTR_E_FD_RVAHASNORVA EMAKEHR(0x1b01) #define VLDTR_E_FD_RVAHASZERORVA EMAKEHR(0x1b02) #define VLDTR_E_MD_RVAANDIMPLMAP EMAKEHR(0x1b03) #define VLDTR_E_TD_EXTRAFLAGS EMAKEHR(0x1b04) #define VLDTR_E_TD_EXTENDSITSELF EMAKEHR(0x1b05) #define VLDTR_E_TD_SYSVTNOTEXTOBJ EMAKEHR(0x1b06) #define VLDTR_E_TD_EXTTYPESPEC EMAKEHR(0x1b07) #define VLDTR_E_TD_VTNOSIZE EMAKEHR(0x1b09) #define VLDTR_E_TD_IFACESEALED EMAKEHR(0x1b0a) #define VLDTR_E_NC_BADNESTED EMAKEHR(0x1b0b) #define VLDTR_E_NC_BADENCLOSER EMAKEHR(0x1b0c) #define VLDTR_E_NC_DUP EMAKEHR(0x1b0d) #define VLDTR_E_NC_DUPENCLOSER EMAKEHR(0x1b0e) #define VLDTR_E_FRVA_ZERORVA EMAKEHR(0x1b0f) #define VLDTR_E_FRVA_BADFIELD EMAKEHR(0x1b10) #define VLDTR_E_FRVA_DUPRVA EMAKEHR(0x1b11) #define VLDTR_E_FRVA_DUPFIELD EMAKEHR(0x1b12) #define VLDTR_E_EP_BADTOKEN EMAKEHR(0x1b13) #define VLDTR_E_EP_INSTANCE EMAKEHR(0x1b14) #define VLDTR_E_TD_ENUMFLDBADTYPE EMAKEHR(0x1b15) #define VLDTR_E_MD_BADRVA EMAKEHR(0x1b16) #define VLDTR_E_FD_LITERALNODEFAULT EMAKEHR(0x1b17) #define VLDTR_E_IFACE_METHNOTIMPL EMAKEHR(0x1b18) #define VLDTR_E_CA_BADPARENT EMAKEHR(0x1b19) #define VLDTR_E_CA_BADTYPE EMAKEHR(0x1b1a) #define VLDTR_E_CA_NOTCTOR EMAKEHR(0x1b1b) #define VLDTR_E_CA_BADSIG EMAKEHR(0x1b1c) #define VLDTR_E_CA_NOSIG EMAKEHR(0x1b1d) #define VLDTR_E_CA_BADPROLOG EMAKEHR(0x1b1e) #define VLDTR_E_MD_BADLOCALSIGTOK EMAKEHR(0x1b1f) #define VLDTR_E_MD_BADHEADER EMAKEHR(0x1b20) #define VLDTR_E_EP_TOOMANYARGS EMAKEHR(0x1b21) #define VLDTR_E_EP_BADRET EMAKEHR(0x1b22) #define VLDTR_E_EP_BADARG EMAKEHR(0x1b23) #define VLDTR_E_SIG_BADVOID EMAKEHR(0x1b24) #define VLDTR_E_IFACE_METHMULTIMPL EMAKEHR(0x1b25) #define VLDTR_E_GP_NAMENULL EMAKEHR(0x1b26) #define VLDTR_E_GP_OWNERNIL EMAKEHR(0x1b27) #define VLDTR_E_GP_DUPNAME EMAKEHR(0x1b28) #define VLDTR_E_GP_DUPNUMBER EMAKEHR(0x1b29) #define VLDTR_E_GP_NONSEQ_BY_OWNER EMAKEHR(0x1b2a) #define VLDTR_E_GP_NONSEQ_BY_NUMBER EMAKEHR(0x1b2b) #define VLDTR_E_GP_UNEXPECTED_OWNER_FOR_VARIANT_VAR EMAKEHR(0x1b2c) #define VLDTR_E_GP_ILLEGAL_VARIANT_MVAR EMAKEHR(0x1b2d) #define VLDTR_E_GP_ILLEGAL_VARIANCE_FLAGS EMAKEHR(0x1b2e) #define VLDTR_E_GP_REFANDVALUETYPE EMAKEHR(0x1b2f) #define VLDTR_E_GPC_OWNERNIL EMAKEHR(0x1b30) #define VLDTR_E_GPC_DUP EMAKEHR(0x1b31) #define VLDTR_E_GPC_NONCONTIGUOUS EMAKEHR(0x1b32) #define VLDTR_E_MS_METHODNIL EMAKEHR(0x1b33) #define VLDTR_E_MS_DUP EMAKEHR(0x1b34) #define VLDTR_E_MS_BADCALLINGCONV EMAKEHR(0x1b35) #define VLDTR_E_MS_MISSARITY EMAKEHR(0x1b36) #define VLDTR_E_MS_MISSARG EMAKEHR(0x1b37) #define VLDTR_E_MS_ARITYMISMATCH EMAKEHR(0x1b38) #define VLDTR_E_MS_METHODNOTGENERIC EMAKEHR(0x1b39) #define VLDTR_E_SIG_MISSARITY EMAKEHR(0x1b3a) #define VLDTR_E_SIG_ARITYMISMATCH EMAKEHR(0x1b3b) #define VLDTR_E_MD_GENERIC_CCTOR EMAKEHR(0x1b3c) #define VLDTR_E_MD_GENERIC_CTOR EMAKEHR(0x1b3d) #define VLDTR_E_MD_GENERIC_IMPORT EMAKEHR(0x1b3e) #define VLDTR_E_MD_GENERIC_BADCALLCONV EMAKEHR(0x1b3f) #define VLDTR_E_EP_GENERIC_METHOD EMAKEHR(0x1b40) #define VLDTR_E_MD_MISSARITY EMAKEHR(0x1b41) #define VLDTR_E_MD_ARITYZERO EMAKEHR(0x1b42) #define VLDTR_E_SIG_ARITYZERO EMAKEHR(0x1b43) #define VLDTR_E_MS_ARITYZERO EMAKEHR(0x1b44) #define VLDTR_E_MD_GPMISMATCH EMAKEHR(0x1b45) #define VLDTR_E_EP_GENERIC_TYPE EMAKEHR(0x1b46) #define VLDTR_E_MI_DECLNOTGENERIC EMAKEHR(0x1b47) #define VLDTR_E_MI_IMPLNOTGENERIC EMAKEHR(0x1b48) #define VLDTR_E_MI_ARITYMISMATCH EMAKEHR(0x1b49) #define VLDTR_E_TD_EXTBADTYPESPEC EMAKEHR(0x1b4a) #define VLDTR_E_SIG_BYREFINST EMAKEHR(0x1b4b) #define VLDTR_E_MS_BYREFINST EMAKEHR(0x1b4c) #define VLDTR_E_TS_EMPTY EMAKEHR(0x1b4d) #define VLDTR_E_TS_HASSENTINALS EMAKEHR(0x1b4e) #define VLDTR_E_TD_GENERICHASEXPLAYOUT EMAKEHR(0x1b4f) #define VLDTR_E_SIG_BADTOKTYPE EMAKEHR(0x1b50) #define VLDTR_E_IFACE_METHNOTIMPLTHISMOD EMAKEHR(0x1b51) #define VLDTR_S_WRN SMAKEHR(0x1200) #define VLDTR_S_ERR SMAKEHR(0x1201) #define VLDTR_S_WRNERR SMAKEHR(0x1202) #define CORDBG_E_UNRECOVERABLE_ERROR EMAKEHR(0x1300) #define CORDBG_E_PROCESS_TERMINATED EMAKEHR(0x1301) #define CORDBG_E_PROCESS_NOT_SYNCHRONIZED EMAKEHR(0x1302) #define CORDBG_E_CLASS_NOT_LOADED EMAKEHR(0x1303) #define CORDBG_E_IL_VAR_NOT_AVAILABLE EMAKEHR(0x1304) #define CORDBG_E_BAD_REFERENCE_VALUE EMAKEHR(0x1305) #define CORDBG_E_FIELD_NOT_AVAILABLE EMAKEHR(0x1306) #define CORDBG_E_NON_NATIVE_FRAME EMAKEHR(0x1307) #define CORDBG_E_NONCONTINUABLE_EXCEPTION EMAKEHR(0x1308) #define CORDBG_E_CODE_NOT_AVAILABLE EMAKEHR(0x1309) #define CORDBG_E_FUNCTION_NOT_IL EMAKEHR(0x130a) #define CORDBG_E_CANT_SET_IP_INTO_FINALLY EMAKEHR(0x130e) #define CORDBG_E_CANT_SET_IP_OUT_OF_FINALLY EMAKEHR(0x130f) #define CORDBG_E_CANT_SET_IP_INTO_CATCH EMAKEHR(0x1310) #define CORDBG_E_SET_IP_NOT_ALLOWED_ON_NONLEAF_FRAME EMAKEHR(0x1311) #define CORDBG_E_SET_IP_IMPOSSIBLE EMAKEHR(0x1312) #define CORDBG_E_FUNC_EVAL_BAD_START_POINT EMAKEHR(0x1313) #define CORDBG_E_INVALID_OBJECT EMAKEHR(0x1314) #define CORDBG_E_FUNC_EVAL_NOT_COMPLETE EMAKEHR(0x1315) #define CORDBG_E_INPROC_NOT_IMPL EMAKEHR(0x1318) #define CORDBG_E_STATIC_VAR_NOT_AVAILABLE EMAKEHR(0x131a) #define CORDBG_E_OBJECT_IS_NOT_COPYABLE_VALUE_CLASS EMAKEHR(0x131b) #define CORDBG_E_CANT_SETIP_INTO_OR_OUT_OF_FILTER EMAKEHR(0x131c) #define CORDBG_E_CANT_CHANGE_JIT_SETTING_FOR_ZAP_MODULE EMAKEHR(0x131d) #define CORDBG_E_CANT_SET_IP_OUT_OF_FINALLY_ON_WIN64 EMAKEHR(0x131e) #define CORDBG_E_CANT_SET_IP_OUT_OF_CATCH_ON_WIN64 EMAKEHR(0x131f) #define CORDBG_E_REMOTE_CONNECTION_CONN_RESET EMAKEHR(0x1320) #define CORDBG_E_REMOTE_CONNECTION_KEEP_ALIVE EMAKEHR(0x1321) #define CORDBG_E_REMOTE_CONNECTION_FATAL_ERROR EMAKEHR(0x1322) #define CORDBG_E_CANT_SET_TO_JMC EMAKEHR(0x1323) #define CORDBG_E_NO_CONTEXT_FOR_INTERNAL_FRAME EMAKEHR(0x1325) #define CORDBG_E_NOT_CHILD_FRAME EMAKEHR(0x1326) #define CORDBG_E_NON_MATCHING_CONTEXT EMAKEHR(0x1327) #define CORDBG_E_PAST_END_OF_STACK EMAKEHR(0x1328) #define CORDBG_E_FUNC_EVAL_CANNOT_UPDATE_REGISTER_IN_NONLEAF_FRAME EMAKEHR(0x1329) #define CORDBG_E_BAD_THREAD_STATE EMAKEHR(0x132d) #define CORDBG_E_DEBUGGER_ALREADY_ATTACHED EMAKEHR(0x132e) #define CORDBG_E_SUPERFLOUS_CONTINUE EMAKEHR(0x132f) #define CORDBG_E_SET_VALUE_NOT_ALLOWED_ON_NONLEAF_FRAME EMAKEHR(0x1330) #define CORDBG_E_ENC_EH_MAX_NESTING_LEVEL_CANT_INCREASE EMAKEHR(0x1331) #define CORDBG_E_ENC_MODULE_NOT_ENC_ENABLED EMAKEHR(0x1332) #define CORDBG_E_SET_IP_NOT_ALLOWED_ON_EXCEPTION EMAKEHR(0x1333) #define CORDBG_E_VARIABLE_IS_ACTUALLY_LITERAL EMAKEHR(0x1334) #define CORDBG_E_PROCESS_DETACHED EMAKEHR(0x1335) #define CORDBG_E_ENC_METHOD_SIG_CHANGED EMAKEHR(0x1336) #define CORDBG_E_ENC_METHOD_NO_LOCAL_SIG EMAKEHR(0x1337) #define CORDBG_E_ENC_CANT_ADD_FIELD_TO_VALUE_OR_LAYOUT_CLASS EMAKEHR(0x1338) #define CORDBG_E_ENC_CANT_CHANGE_FIELD EMAKEHR(0x1339) #define CORDBG_E_ENC_CANT_ADD_NON_PRIVATE_MEMBER EMAKEHR(0x133a) #define CORDBG_E_FIELD_NOT_STATIC EMAKEHR(0x133b) #define CORDBG_E_FIELD_NOT_INSTANCE EMAKEHR(0x133c) #define CORDBG_E_ENC_ZAPPED_WITHOUT_ENC EMAKEHR(0x133d) #define CORDBG_E_ENC_BAD_METHOD_INFO EMAKEHR(0x133e) #define CORDBG_E_ENC_JIT_CANT_UPDATE EMAKEHR(0x133f) #define CORDBG_E_ENC_MISSING_CLASS EMAKEHR(0x1340) #define CORDBG_E_ENC_INTERNAL_ERROR EMAKEHR(0x1341) #define CORDBG_E_ENC_HANGING_FIELD EMAKEHR(0x1342) #define CORDBG_E_MODULE_NOT_LOADED EMAKEHR(0x1343) #define CORDBG_E_ENC_CANT_CHANGE_SUPERCLASS EMAKEHR(0x1344) #define CORDBG_E_UNABLE_TO_SET_BREAKPOINT EMAKEHR(0x1345) #define CORDBG_E_DEBUGGING_NOT_POSSIBLE EMAKEHR(0x1346) #define CORDBG_E_KERNEL_DEBUGGER_ENABLED EMAKEHR(0x1347) #define CORDBG_E_KERNEL_DEBUGGER_PRESENT EMAKEHR(0x1348) #define CORDBG_E_HELPER_THREAD_DEAD EMAKEHR(0x1349) #define CORDBG_E_INTERFACE_INHERITANCE_CANT_CHANGE EMAKEHR(0x134a) #define CORDBG_E_INCOMPATIBLE_PROTOCOL EMAKEHR(0x134b) #define CORDBG_E_TOO_MANY_PROCESSES EMAKEHR(0x134c) #define CORDBG_E_INTEROP_NOT_SUPPORTED EMAKEHR(0x134d) #define CORDBG_E_NO_REMAP_BREAKPIONT EMAKEHR(0x134e) #define CORDBG_E_OBJECT_NEUTERED EMAKEHR(0x134f) #define CORDBG_E_THREAD_NOT_SCHEDULED EMAKEHR(0x1c00) #define CORDBG_E_HANDLE_HAS_BEEN_DISPOSED EMAKEHR(0x1c01) #define CORDBG_E_NONINTERCEPTABLE_EXCEPTION EMAKEHR(0x1c02) #define CORDBG_E_CANT_UNWIND_ABOVE_CALLBACK EMAKEHR(0x1c03) #define CORDBG_E_INTERCEPT_FRAME_ALREADY_SET EMAKEHR(0x1c04) #define CORDBG_E_NO_NATIVE_PATCH_AT_ADDR EMAKEHR(0x1c05) #define CORDBG_E_MUST_BE_INTEROP_DEBUGGING EMAKEHR(0x1c06) #define CORDBG_E_NATIVE_PATCH_ALREADY_AT_ADDR EMAKEHR(0x1c07) #define CORDBG_E_TIMEOUT EMAKEHR(0x1c08) #define CORDBG_E_CANT_CALL_ON_THIS_THREAD EMAKEHR(0x1c09) #define CORDBG_E_ENC_INFOLESS_METHOD EMAKEHR(0x1c0a) #define CORDBG_E_ENC_NESTED_HANLDERS EMAKEHR(0x1c0b) #define CORDBG_E_ENC_IN_FUNCLET EMAKEHR(0x1c0c) #define CORDBG_E_ENC_LOCALLOC EMAKEHR(0x1c0d) #define CORDBG_E_ENC_EDIT_NOT_SUPPORTED EMAKEHR(0x1c0e) #define CORDBG_E_FEABORT_DELAYED_UNTIL_THREAD_RESUMED EMAKEHR(0x1c0f) #define CORDBG_E_NOTREADY EMAKEHR(0x1c10) #define CORDBG_E_CANNOT_RESOLVE_ASSEMBLY EMAKEHR(0x1c11) #define CORDBG_E_MUST_BE_IN_LOAD_MODULE EMAKEHR(0x1c12) #define CORDBG_E_CANNOT_BE_ON_ATTACH EMAKEHR(0x1c13) #define CORDBG_E_NGEN_NOT_SUPPORTED EMAKEHR(0x1c14) #define CORDBG_E_ILLEGAL_SHUTDOWN_ORDER EMAKEHR(0x1c15) #define CORDBG_E_CANNOT_DEBUG_FIBER_PROCESS EMAKEHR(0x1c16) #define CORDBG_E_MUST_BE_IN_CREATE_PROCESS EMAKEHR(0x1c17) #define CORDBG_E_DETACH_FAILED_OUTSTANDING_EVALS EMAKEHR(0x1c18) #define CORDBG_E_DETACH_FAILED_OUTSTANDING_STEPPERS EMAKEHR(0x1c19) #define CORDBG_E_CANT_INTEROP_STEP_OUT EMAKEHR(0x1c20) #define CORDBG_E_DETACH_FAILED_OUTSTANDING_BREAKPOINTS EMAKEHR(0x1c21) #define CORDBG_E_ILLEGAL_IN_STACK_OVERFLOW EMAKEHR(0x1c22) #define CORDBG_E_ILLEGAL_AT_GC_UNSAFE_POINT EMAKEHR(0x1c23) #define CORDBG_E_ILLEGAL_IN_PROLOG EMAKEHR(0x1c24) #define CORDBG_E_ILLEGAL_IN_NATIVE_CODE EMAKEHR(0x1c25) #define CORDBG_E_ILLEGAL_IN_OPTIMIZED_CODE EMAKEHR(0x1c26) #define CORDBG_E_MINIDUMP_UNSUPPORTED EMAKEHR(0x1c27) #define CORDBG_E_APPDOMAIN_MISMATCH EMAKEHR(0x1c28) #define CORDBG_E_CONTEXT_UNVAILABLE EMAKEHR(0x1c29) #define CORDBG_E_UNCOMPATIBLE_PLATFORMS EMAKEHR(0x1c30) #define CORDBG_E_DEBUGGING_DISABLED EMAKEHR(0x1c31) #define CORDBG_E_DETACH_FAILED_ON_ENC EMAKEHR(0x1c32) #define CORDBG_E_CURRENT_EXCEPTION_IS_OUTSIDE_CURRENT_EXECUTION_SCOPE EMAKEHR(0x1c33) #define CORDBG_E_HELPER_MAY_DEADLOCK EMAKEHR(0x1c34) #define CORDBG_E_MISSING_METADATA EMAKEHR(0x1c35) #define CORDBG_E_TARGET_INCONSISTENT EMAKEHR(0x1c36) #define CORDBG_E_DETACH_FAILED_OUTSTANDING_TARGET_RESOURCES EMAKEHR(0x1c37) #define CORDBG_E_TARGET_READONLY EMAKEHR(0x1c38) #define CORDBG_E_MISMATCHED_CORWKS_AND_DACWKS_DLLS EMAKEHR(0x1c39) #define CORDBG_E_MODULE_LOADED_FROM_DISK EMAKEHR(0x1c3a) #define CORDBG_E_SYMBOLS_NOT_AVAILABLE EMAKEHR(0x1c3b) #define CORDBG_E_DEBUG_COMPONENT_MISSING EMAKEHR(0x1c3c) #define CORDBG_E_REMOTE_MISMATCHED_CERTS EMAKEHR(0x1c3d) #define CORDBG_E_REMOTE_NETWORK_FAILURE EMAKEHR(0x1c3e) #define CORDBG_E_REMOTE_NO_LISTENER EMAKEHR(0x1c3f) #define CORDBG_E_REMOTE_UNKNOWN_TARGET EMAKEHR(0x1c40) #define CORDBG_E_REMOTE_INVALID_CONFIG EMAKEHR(0x1c41) #define CORDBG_E_REMOTE_MISMATCHED_PROTOCOLS EMAKEHR(0x1c42) #define CORDBG_E_LIBRARY_PROVIDER_ERROR EMAKEHR(0x1c43) #define CORDBG_E_NOT_CLR EMAKEHR(0x1c44) #define CORDBG_E_MISSING_DATA_TARGET_INTERFACE EMAKEHR(0x1c45) #define CORDBG_E_UNSUPPORTED_DEBUGGING_MODEL EMAKEHR(0x1c46) #define CORDBG_E_UNSUPPORTED_FORWARD_COMPAT EMAKEHR(0x1c47) #define CORDBG_E_UNSUPPORTED_VERSION_STRUCT EMAKEHR(0x1c48) #define CORDBG_E_READVIRTUAL_FAILURE EMAKEHR(0x1c49) #define CORDBG_E_VALUE_POINTS_TO_FUNCTION EMAKEHR(0x1c4a) #define CORDBG_E_CORRUPT_OBJECT EMAKEHR(0x1c4b) #define CORDBG_E_GC_STRUCTURES_INVALID EMAKEHR(0x1c4c) #define CORDBG_S_BAD_START_SEQUENCE_POINT SMAKEHR(0x130b) #define CORDBG_S_BAD_END_SEQUENCE_POINT SMAKEHR(0x130c) #define CORDBG_S_INSUFFICIENT_INFO_FOR_SET_IP SMAKEHR(0x130d) #define CORDBG_S_FUNC_EVAL_HAS_NO_RESULT SMAKEHR(0x1316) #define CORDBG_S_VALUE_POINTS_TO_VOID SMAKEHR(0x1317) #define CORDBG_S_FUNC_EVAL_ABORTED SMAKEHR(0x1319) #define CORDBG_S_AT_END_OF_STACK SMAKEHR(0x1324) #define CORDBG_S_NOT_ALL_BITS_SET SMAKEHR(0x1c13) #define CORPROF_E_FUNCTION_NOT_COMPILED EMAKEHR(0x1350) #define CORPROF_E_DATAINCOMPLETE EMAKEHR(0x1351) #define CORPROF_E_NOT_REJITABLE_METHODS EMAKEHR(0x1352) #define CORPROF_E_CANNOT_UPDATE_METHOD EMAKEHR(0x1353) #define CORPROF_E_FUNCTION_NOT_IL EMAKEHR(0x1354) #define CORPROF_E_NOT_MANAGED_THREAD EMAKEHR(0x1355) #define CORPROF_E_CALL_ONLY_FROM_INIT EMAKEHR(0x1356) #define CORPROF_E_INPROC_NOT_ENABLED EMAKEHR(0x1357) #define CORPROF_E_JITMAPS_NOT_ENABLED EMAKEHR(0x1358) #define CORPROF_E_INPROC_ALREADY_BEGUN EMAKEHR(0x1359) #define CORPROF_E_INPROC_NOT_AVAILABLE EMAKEHR(0x135a) #define CORPROF_E_NOT_YET_AVAILABLE EMAKEHR(0x135b) #define CORPROF_E_TYPE_IS_PARAMETERIZED EMAKEHR(0x135c) #define CORPROF_E_FUNCTION_IS_PARAMETERIZED EMAKEHR(0x135d) #define CORPROF_E_STACKSNAPSHOT_INVALID_TGT_THREAD EMAKEHR(0x135e) #define CORPROF_E_STACKSNAPSHOT_UNMANAGED_CTX EMAKEHR(0x135f) #define CORPROF_E_STACKSNAPSHOT_UNSAFE EMAKEHR(0x1360) #define CORPROF_E_STACKSNAPSHOT_ABORTED EMAKEHR(0x1361) #define CORPROF_E_LITERALS_HAVE_NO_ADDRESS EMAKEHR(0x1362) #define CORPROF_E_UNSUPPORTED_CALL_SEQUENCE EMAKEHR(0x1363) #define CORPROF_E_ASYNCHRONOUS_UNSAFE EMAKEHR(0x1364) #define CORPROF_E_CLASSID_IS_ARRAY EMAKEHR(0x1365) #define CORPROF_E_CLASSID_IS_COMPOSITE EMAKEHR(0x1366) #define CORPROF_E_PROFILER_DETACHING EMAKEHR(0x1367) #define CORPROF_E_PROFILER_NOT_ATTACHABLE EMAKEHR(0x1368) #define CORPROF_E_UNRECOGNIZED_PIPE_MSG_FORMAT EMAKEHR(0x1369) #define CORPROF_E_PROFILER_ALREADY_ACTIVE EMAKEHR(0x136a) #define CORPROF_E_PROFILEE_INCOMPATIBLE_WITH_TRIGGER EMAKEHR(0x136b) #define CORPROF_E_IPC_FAILED EMAKEHR(0x136c) #define CORPROF_E_PROFILEE_PROCESS_NOT_FOUND EMAKEHR(0x136d) #define CORPROF_E_CALLBACK3_REQUIRED EMAKEHR(0x136e) #define CORPROF_E_UNSUPPORTED_FOR_ATTACHING_PROFILER EMAKEHR(0x136f) #define CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT EMAKEHR(0x1370) #define CORPROF_E_RUNTIME_UNINITIALIZED EMAKEHR(0x1371) #define CORPROF_E_IMMUTABLE_FLAGS_SET EMAKEHR(0x1372) #define CORPROF_E_PROFILER_NOT_YET_INITIALIZED EMAKEHR(0x1373) #define CORPROF_E_INCONSISTENT_WITH_FLAGS EMAKEHR(0x1374) #define CORPROF_E_PROFILER_CANCEL_ACTIVATION EMAKEHR(0x1375) #define CORPROF_E_CONCURRENT_GC_NOT_PROFILABLE EMAKEHR(0x1376) #define CORPROF_E_INCONSISTENT_FLAGS_WITH_HOST_PROTECTION_SETTING EMAKEHR(0x1377) #define CORPROF_E_DEBUGGING_DISABLED EMAKEHR(0x1378) #define CORPROF_E_TIMEOUT_WAITING_FOR_CONCURRENT_GC EMAKEHR(0x1379) #define CORPROF_E_MODULE_IS_DYNAMIC EMAKEHR(0x137a) #define CORPROF_E_CALLBACK4_REQUIRED EMAKEHR(0x137b) #define CORPROF_E_REJIT_NOT_ENABLED EMAKEHR(0x137c) #define CORPROF_E_ACTIVE_REJIT_REQUEST_NOT_FOUND EMAKEHR(0x137d) #define CORPROF_E_FUNCTION_IS_COLLECTIBLE EMAKEHR(0x137e) #define CORPROF_E_REJIT_REQUIRES_DISABLE_NGEN EMAKEHR(0x137f) #define CORSEC_E_DECODE_SET EMAKEHR(0x1410) #define CORSEC_E_ENCODE_SET EMAKEHR(0x1411) #define CORSEC_E_UNSUPPORTED_FORMAT EMAKEHR(0x1412) #define CORSEC_E_CRYPTOAPI_CALL_FAILED EMAKEHR(0x1413) #define CORSEC_E_NO_SUITABLE_CSP EMAKEHR(0x1414) #define CORSEC_E_INVALID_ATTR EMAKEHR(0x1415) #define CORSEC_E_POLICY_EXCEPTION EMAKEHR(0x1416) #define CORSEC_E_MIN_GRANT_FAIL EMAKEHR(0x1417) #define CORSEC_E_NO_EXEC_PERM EMAKEHR(0x1418) #define CORSEC_E_XMLSYNTAX EMAKEHR(0x1419) #define CORSEC_E_INVALID_STRONGNAME EMAKEHR(0x141a) #define CORSEC_E_MISSING_STRONGNAME EMAKEHR(0x141b) #define CORSEC_E_CONTAINER_NOT_FOUND EMAKEHR(0x141c) #define CORSEC_E_INVALID_IMAGE_FORMAT EMAKEHR(0x141d) #define CORSEC_E_INVALID_PUBLICKEY EMAKEHR(0x141e) #define CORSEC_E_SIGNATURE_MISMATCH EMAKEHR(0x1420) #define CORSEC_E_INVALID_SIGNATUREKEY EMAKEHR(0x1422) #define CORSEC_E_INVALID_COUNTERSIGNATURE EMAKEHR(0x1423) #define CORSEC_E_CRYPTO EMAKEHR(0x1430) #define CORSEC_E_CRYPTO_UNEX_OPER EMAKEHR(0x1431) #define CORSECATTR_E_BAD_ATTRIBUTE EMAKEHR(0x143a) #define CORSECATTR_E_MISSING_CONSTRUCTOR EMAKEHR(0x143b) #define CORSECATTR_E_FAILED_TO_CREATE_PERM EMAKEHR(0x143c) #define CORSECATTR_E_BAD_ACTION_ASM EMAKEHR(0x143d) #define CORSECATTR_E_BAD_ACTION_OTHER EMAKEHR(0x143e) #define CORSECATTR_E_BAD_PARENT EMAKEHR(0x143f) #define CORSECATTR_E_TRUNCATED EMAKEHR(0x1440) #define CORSECATTR_E_BAD_VERSION EMAKEHR(0x1441) #define CORSECATTR_E_BAD_ACTION EMAKEHR(0x1442) #define CORSECATTR_E_NO_SELF_REF EMAKEHR(0x1443) #define CORSECATTR_E_BAD_NONCAS EMAKEHR(0x1444) #define CORSECATTR_E_ASSEMBLY_LOAD_FAILED EMAKEHR(0x1445) #define CORSECATTR_E_ASSEMBLY_LOAD_FAILED_EX EMAKEHR(0x1446) #define CORSECATTR_E_TYPE_LOAD_FAILED EMAKEHR(0x1447) #define CORSECATTR_E_TYPE_LOAD_FAILED_EX EMAKEHR(0x1448) #define CORSECATTR_E_ABSTRACT EMAKEHR(0x1449) #define CORSECATTR_E_UNSUPPORTED_TYPE EMAKEHR(0x144a) #define CORSECATTR_E_UNSUPPORTED_ENUM_TYPE EMAKEHR(0x144b) #define CORSECATTR_E_NO_FIELD EMAKEHR(0x144c) #define CORSECATTR_E_NO_PROPERTY EMAKEHR(0x144d) #define CORSECATTR_E_EXCEPTION EMAKEHR(0x144e) #define CORSECATTR_E_EXCEPTION_HR EMAKEHR(0x144f) #define CEE_E_ENTRYPOINT EMAKEHR(0x1000) #define CEE_E_CVTRES_NOT_FOUND EMAKEHR(0x1001) #define HOST_E_DEADLOCK EMAKEHR(0x1020) #define HOST_E_INTERRUPTED EMAKEHR(0x1021) #define HOST_E_INVALIDOPERATION EMAKEHR(0x1022) #define HOST_E_CLRNOTAVAILABLE EMAKEHR(0x1023) #define HOST_E_TIMEOUT EMAKEHR(0x1024) #define HOST_E_NOT_OWNER EMAKEHR(0x1025) #define HOST_E_ABANDONED EMAKEHR(0x1026) #define HOST_E_EXITPROCESS_THREADABORT EMAKEHR(0x1027) #define HOST_E_EXITPROCESS_ADUNLOAD EMAKEHR(0x1028) #define HOST_E_EXITPROCESS_TIMEOUT EMAKEHR(0x1029) #define HOST_E_EXITPROCESS_OUTOFMEMORY EMAKEHR(0x102a) #define HOST_E_EXITPROCESS_STACKOVERFLOW EMAKEHR(0x102b) #define ISS_E_ISOSTORE_START EMAKEHR(0x1450) #define ISS_E_ISOSTORE EMAKEHR(0x1450) #define ISS_E_OPEN_STORE_FILE EMAKEHR(0x1460) #define ISS_E_OPEN_FILE_MAPPING EMAKEHR(0x1461) #define ISS_E_MAP_VIEW_OF_FILE EMAKEHR(0x1462) #define ISS_E_GET_FILE_SIZE EMAKEHR(0x1463) #define ISS_E_CREATE_MUTEX EMAKEHR(0x1464) #define ISS_E_LOCK_FAILED EMAKEHR(0x1465) #define ISS_E_FILE_WRITE EMAKEHR(0x1466) #define ISS_E_SET_FILE_POINTER EMAKEHR(0x1467) #define ISS_E_CREATE_DIR EMAKEHR(0x1468) #define ISS_E_STORE_NOT_OPEN EMAKEHR(0x1469) #define ISS_E_CORRUPTED_STORE_FILE EMAKEHR(0x1480) #define ISS_E_STORE_VERSION EMAKEHR(0x1481) #define ISS_E_FILE_NOT_MAPPED EMAKEHR(0x1482) #define ISS_E_BLOCK_SIZE_TOO_SMALL EMAKEHR(0x1483) #define ISS_E_ALLOC_TOO_LARGE EMAKEHR(0x1484) #define ISS_E_USAGE_WILL_EXCEED_QUOTA EMAKEHR(0x1485) #define ISS_E_TABLE_ROW_NOT_FOUND EMAKEHR(0x1486) #define ISS_E_DEPRECATE EMAKEHR(0x14a0) #define ISS_E_CALLER EMAKEHR(0x14a1) #define ISS_E_PATH_LENGTH EMAKEHR(0x14a2) #define ISS_E_MACHINE EMAKEHR(0x14a3) #define ISS_E_MACHINE_DACL EMAKEHR(0x14a4) #define ISS_E_ISOSTORE_END EMAKEHR(0x14ff) #define META_E_DUPLICATE EMAKEHR(0x1180) #define META_E_GUID_REQUIRED EMAKEHR(0x1181) #define META_E_TYPEDEF_MISMATCH EMAKEHR(0x1182) #define META_E_MERGE_COLLISION EMAKEHR(0x1183) #define META_E_METHD_NOT_FOUND EMAKEHR(0x1187) #define META_E_FIELD_NOT_FOUND EMAKEHR(0x1188) #define META_E_PARAM_MISMATCH EMAKEHR(0x1189) #define META_E_BADMETADATA EMAKEHR(0x118a) #define META_E_INTFCEIMPL_NOT_FOUND EMAKEHR(0x118b) #define META_E_CLASS_LAYOUT_INCONSISTENT EMAKEHR(0x118d) #define META_E_FIELD_MARSHAL_NOT_FOUND EMAKEHR(0x118e) #define META_E_METHODSEM_NOT_FOUND EMAKEHR(0x118f) #define META_E_EVENT_NOT_FOUND EMAKEHR(0x1190) #define META_E_PROP_NOT_FOUND EMAKEHR(0x1191) #define META_E_BAD_SIGNATURE EMAKEHR(0x1192) #define META_E_BAD_INPUT_PARAMETER EMAKEHR(0x1193) #define META_E_METHDIMPL_INCONSISTENT EMAKEHR(0x1194) #define META_E_MD_INCONSISTENCY EMAKEHR(0x1195) #define META_E_CANNOTRESOLVETYPEREF EMAKEHR(0x1196) #define META_E_STRINGSPACE_FULL EMAKEHR(0x1198) #define META_E_UNEXPECTED_REMAP EMAKEHR(0x1199) #define META_E_HAS_UNMARKALL EMAKEHR(0x119a) #define META_E_MUST_CALL_UNMARKALL EMAKEHR(0x119b) #define META_E_GENERICPARAM_INCONSISTENT EMAKEHR(0x119c) #define META_E_EVENT_COUNTS EMAKEHR(0x119d) #define META_E_PROPERTY_COUNTS EMAKEHR(0x119e) #define META_E_TYPEDEF_MISSING EMAKEHR(0x119f) #define META_E_INVALID_TOKEN_TYPE EMAKEHR(0x115f) #define META_E_CA_INVALID_TARGET EMAKEHR(0x11c0) #define META_E_CA_INVALID_VALUE EMAKEHR(0x11c1) #define META_E_CA_INVALID_BLOB EMAKEHR(0x11c2) #define META_E_CA_REPEATED_ARG EMAKEHR(0x11c3) #define META_E_CA_UNKNOWN_ARGUMENT EMAKEHR(0x11c4) #define META_E_CA_VARIANT_NYI EMAKEHR(0x11c5) #define META_E_CA_ARRAY_NYI EMAKEHR(0x11c6) #define META_E_CA_UNEXPECTED_TYPE EMAKEHR(0x11c7) #define META_E_CA_INVALID_ARGTYPE EMAKEHR(0x11c8) #define META_E_CA_INVALID_ARG_FOR_TYPE EMAKEHR(0x11c9) #define META_E_CA_INVALID_UUID EMAKEHR(0x11ca) #define META_E_CA_INVALID_MARSHALAS_FIELDS EMAKEHR(0x11cb) #define META_E_CA_NT_FIELDONLY EMAKEHR(0x11cc) #define META_E_CA_NEGATIVE_PARAMINDEX EMAKEHR(0x11cd) #define META_E_CA_NEGATIVE_MULTIPLIER EMAKEHR(0x11ce) #define META_E_CA_NEGATIVE_CONSTSIZE EMAKEHR(0x11cf) #define META_E_CA_FIXEDSTR_SIZE_REQUIRED EMAKEHR(0x11d0) #define META_E_CA_CUSTMARSH_TYPE_REQUIRED EMAKEHR(0x11d1) #define META_E_CA_FILENAME_REQUIRED EMAKEHR(0x11d2) #define META_E_NOT_IN_ENC_MODE EMAKEHR(0x11d4) #define META_E_METHOD_COUNTS EMAKEHR(0x11d6) #define META_E_FIELD_COUNTS EMAKEHR(0x11d7) #define META_E_PARAM_COUNTS EMAKEHR(0x11d8) #define META_E_MISMATCHED_VISIBLITY EMAKEHR(0x11e4) #define META_E_CA_BAD_FRIENDS_ARGS EMAKEHR(0x11e5) #define META_E_CA_FRIENDS_SN_REQUIRED EMAKEHR(0x11e6) #define MSEE_E_LOADLIBFAILED EMAKEHR(0x1010) #define MSEE_E_GETPROCFAILED EMAKEHR(0x1011) #define MSEE_E_MULTCOPIESLOADED EMAKEHR(0x1012) #define MSEE_E_ASSEMBLYLOADINPROGRESS EMAKEHR(0x1016) #define MSEE_E_CANNOTCREATEAPPDOMAIN EMAKEHR(0x1017) #define NGEN_FAILED_GET_DEPENDENCIES EMAKEHR(0x1f00) #define NGEN_FAILED_NATIVE_IMAGE_DELETE EMAKEHR(0x1f01) #define NGEN_E_TOO_MANY_INTERFACES EMAKEHR(0x1f02) #define NGEN_E_OLDER_RUNTIME EMAKEHR(0x1f03) #define NGEN_E_WORKER_UNEXPECTED_EXIT EMAKEHR(0x1f04) #define NGEN_E_WORKER_UNEXPECTED_SYNC EMAKEHR(0x1f05) #define NGEN_E_SYS_ASM_NI_MISSING EMAKEHR(0x1f06) #define NGEN_E_EXE_MACHINE_TYPE_MISMATCH EMAKEHR(0x1f07) #define NGEN_E_ASSEMBLY_EXCLUSION_FILE_PARSE_ERROR EMAKEHR(0x1f08) #define NGEN_E_HARDBOUND_DEPENDENCY_MISSING EMAKEHR(0x1f09) #define NGEN_E_NOT_RUNNING_IN_EXPECTED_PACKAGE EMAKEHR(0x1f0a) #define PEFMT_E_NO_CONTENTS EMAKEHR(0x1d00) #define PEFMT_E_NO_NTHEADERS EMAKEHR(0x1d01) #define PEFMT_E_64BIT EMAKEHR(0x1d02) #define PEFMT_E_NO_CORHEADER EMAKEHR(0x1d03) #define PEFMT_E_NOT_ILONLY EMAKEHR(0x1d04) #define PEFMT_E_IMPORT_DLLS EMAKEHR(0x1d05) #define PEFMT_E_EXE_NOENTRYPOINT EMAKEHR(0x1d06) #define PEFMT_E_BASE_RELOCS EMAKEHR(0x1d07) #define PEFMT_E_ENTRYPOINT EMAKEHR(0x1d08) #define PEFMT_E_ZERO_SIZEOFCODE EMAKEHR(0x1d09) #define PEFMT_E_BAD_CORHEADER EMAKEHR(0x1d0a) #define PEFMT_E_32BIT EMAKEHR(0x1d0b) #define SECURITY_E_XML_TO_ASN_ENCODING EMAKEHR(0x1400) #define SECURITY_E_INCOMPATIBLE_SHARE EMAKEHR(0x1401) #define SECURITY_E_UNVERIFIABLE EMAKEHR(0x1402) #define SECURITY_E_INCOMPATIBLE_EVIDENCE EMAKEHR(0x1403) #define SN_E_PUBLICKEY_MISMATCH EMAKEHR(0x1421) #define SN_CRYPTOAPI_CALL_FAILED EMAKEHR(0x1413) #define SN_NO_SUITABLE_CSP EMAKEHR(0x1414) #define VER_E_HRESULT EMAKEHR(0x1801) #define VER_E_OFFSET EMAKEHR(0x1802) #define VER_E_OPCODE EMAKEHR(0x1803) #define VER_E_OPERAND EMAKEHR(0x1804) #define VER_E_TOKEN EMAKEHR(0x1805) #define VER_E_EXCEPT EMAKEHR(0x1806) #define VER_E_STACK_SLOT EMAKEHR(0x1807) #define VER_E_LOC EMAKEHR(0x1808) #define VER_E_ARG EMAKEHR(0x1809) #define VER_E_FOUND EMAKEHR(0x180a) #define VER_E_EXPECTED EMAKEHR(0x180b) #define VER_E_LOC_BYNAME EMAKEHR(0x180c) #define VER_E_UNKNOWN_OPCODE EMAKEHR(0x1810) #define VER_E_SIG_CALLCONV EMAKEHR(0x1811) #define VER_E_SIG_ELEMTYPE EMAKEHR(0x1812) #define VER_E_RET_SIG EMAKEHR(0x1814) #define VER_E_FIELD_SIG EMAKEHR(0x1815) #define VER_E_OPEN_DLGT_PROT_ACC EMAKEHR(0x1816) #define VER_E_INTERNAL EMAKEHR(0x1818) #define VER_E_STACK_TOO_LARGE EMAKEHR(0x1819) #define VER_E_ARRAY_NAME_LONG EMAKEHR(0x181a) #define VER_E_FALLTHRU EMAKEHR(0x1820) #define VER_E_TRY_GTEQ_END EMAKEHR(0x1821) #define VER_E_TRYEND_GT_CS EMAKEHR(0x1822) #define VER_E_HND_GTEQ_END EMAKEHR(0x1823) #define VER_E_HNDEND_GT_CS EMAKEHR(0x1824) #define VER_E_FLT_GTEQ_CS EMAKEHR(0x1825) #define VER_E_TRY_START EMAKEHR(0x1826) #define VER_E_HND_START EMAKEHR(0x1827) #define VER_E_FLT_START EMAKEHR(0x1828) #define VER_E_TRY_OVERLAP EMAKEHR(0x1829) #define VER_E_TRY_EQ_HND_FIL EMAKEHR(0x182a) #define VER_E_TRY_SHARE_FIN_FAL EMAKEHR(0x182b) #define VER_E_HND_OVERLAP EMAKEHR(0x182c) #define VER_E_HND_EQ EMAKEHR(0x182d) #define VER_E_FIL_OVERLAP EMAKEHR(0x182e) #define VER_E_FIL_EQ EMAKEHR(0x182f) #define VER_E_FIL_CONT_TRY EMAKEHR(0x1830) #define VER_E_FIL_CONT_HND EMAKEHR(0x1831) #define VER_E_FIL_CONT_FIL EMAKEHR(0x1832) #define VER_E_FIL_GTEQ_CS EMAKEHR(0x1833) #define VER_E_FIL_START EMAKEHR(0x1834) #define VER_E_FALLTHRU_EXCEP EMAKEHR(0x1835) #define VER_E_FALLTHRU_INTO_HND EMAKEHR(0x1836) #define VER_E_FALLTHRU_INTO_FIL EMAKEHR(0x1837) #define VER_E_LEAVE EMAKEHR(0x1838) #define VER_E_RETHROW EMAKEHR(0x1839) #define VER_E_ENDFINALLY EMAKEHR(0x183a) #define VER_E_ENDFILTER EMAKEHR(0x183b) #define VER_E_ENDFILTER_MISSING EMAKEHR(0x183c) #define VER_E_BR_INTO_TRY EMAKEHR(0x183d) #define VER_E_BR_INTO_HND EMAKEHR(0x183e) #define VER_E_BR_INTO_FIL EMAKEHR(0x183f) #define VER_E_BR_OUTOF_TRY EMAKEHR(0x1840) #define VER_E_BR_OUTOF_HND EMAKEHR(0x1841) #define VER_E_BR_OUTOF_FIL EMAKEHR(0x1842) #define VER_E_BR_OUTOF_FIN EMAKEHR(0x1843) #define VER_E_RET_FROM_TRY EMAKEHR(0x1844) #define VER_E_RET_FROM_HND EMAKEHR(0x1845) #define VER_E_RET_FROM_FIL EMAKEHR(0x1846) #define VER_E_BAD_JMP_TARGET EMAKEHR(0x1847) #define VER_E_PATH_LOC EMAKEHR(0x1848) #define VER_E_PATH_THIS EMAKEHR(0x1849) #define VER_E_PATH_STACK EMAKEHR(0x184a) #define VER_E_PATH_STACK_DEPTH EMAKEHR(0x184b) #define VER_E_THIS EMAKEHR(0x184c) #define VER_E_THIS_UNINIT_EXCEP EMAKEHR(0x184d) #define VER_E_THIS_UNINIT_STORE EMAKEHR(0x184e) #define VER_E_THIS_UNINIT_RET EMAKEHR(0x184f) #define VER_E_THIS_UNINIT_V_RET EMAKEHR(0x1850) #define VER_E_THIS_UNINIT_BR EMAKEHR(0x1851) #define VER_E_LDFTN_CTOR EMAKEHR(0x1852) #define VER_E_STACK_NOT_EQ EMAKEHR(0x1853) #define VER_E_STACK_UNEXPECTED EMAKEHR(0x1854) #define VER_E_STACK_EXCEPTION EMAKEHR(0x1855) #define VER_E_STACK_OVERFLOW EMAKEHR(0x1856) #define VER_E_STACK_UNDERFLOW EMAKEHR(0x1857) #define VER_E_STACK_EMPTY EMAKEHR(0x1858) #define VER_E_STACK_UNINIT EMAKEHR(0x1859) #define VER_E_STACK_I_I4_I8 EMAKEHR(0x185a) #define VER_E_STACK_R_R4_R8 EMAKEHR(0x185b) #define VER_E_STACK_NO_R_I8 EMAKEHR(0x185c) #define VER_E_STACK_NUMERIC EMAKEHR(0x185d) #define VER_E_STACK_OBJREF EMAKEHR(0x185e) #define VER_E_STACK_P_OBJREF EMAKEHR(0x185f) #define VER_E_STACK_BYREF EMAKEHR(0x1860) #define VER_E_STACK_METHOD EMAKEHR(0x1861) #define VER_E_STACK_ARRAY_SD EMAKEHR(0x1862) #define VER_E_STACK_VALCLASS EMAKEHR(0x1863) #define VER_E_STACK_P_VALCLASS EMAKEHR(0x1864) #define VER_E_STACK_NO_VALCLASS EMAKEHR(0x1865) #define VER_E_LOC_DEAD EMAKEHR(0x1866) #define VER_E_LOC_NUM EMAKEHR(0x1867) #define VER_E_ARG_NUM EMAKEHR(0x1868) #define VER_E_TOKEN_RESOLVE EMAKEHR(0x1869) #define VER_E_TOKEN_TYPE EMAKEHR(0x186a) #define VER_E_TOKEN_TYPE_MEMBER EMAKEHR(0x186b) #define VER_E_TOKEN_TYPE_FIELD EMAKEHR(0x186c) #define VER_E_TOKEN_TYPE_SIG EMAKEHR(0x186d) #define VER_E_UNVERIFIABLE EMAKEHR(0x186e) #define VER_E_LDSTR_OPERAND EMAKEHR(0x186f) #define VER_E_RET_PTR_TO_STACK EMAKEHR(0x1870) #define VER_E_RET_VOID EMAKEHR(0x1871) #define VER_E_RET_MISSING EMAKEHR(0x1872) #define VER_E_RET_EMPTY EMAKEHR(0x1873) #define VER_E_RET_UNINIT EMAKEHR(0x1874) #define VER_E_ARRAY_ACCESS EMAKEHR(0x1875) #define VER_E_ARRAY_V_STORE EMAKEHR(0x1876) #define VER_E_ARRAY_SD EMAKEHR(0x1877) #define VER_E_ARRAY_SD_PTR EMAKEHR(0x1878) #define VER_E_ARRAY_FIELD EMAKEHR(0x1879) #define VER_E_ARGLIST EMAKEHR(0x187a) #define VER_E_VALCLASS EMAKEHR(0x187b) #define VER_E_METHOD_ACCESS EMAKEHR(0x187c) #define VER_E_FIELD_ACCESS EMAKEHR(0x187d) #define VER_E_DEAD EMAKEHR(0x187e) #define VER_E_FIELD_STATIC EMAKEHR(0x187f) #define VER_E_FIELD_NO_STATIC EMAKEHR(0x1880) #define VER_E_ADDR EMAKEHR(0x1881) #define VER_E_ADDR_BYREF EMAKEHR(0x1882) #define VER_E_ADDR_LITERAL EMAKEHR(0x1883) #define VER_E_INITONLY EMAKEHR(0x1884) #define VER_E_THROW EMAKEHR(0x1885) #define VER_E_CALLVIRT_VALCLASS EMAKEHR(0x1886) #define VER_E_CALL_SIG EMAKEHR(0x1887) #define VER_E_CALL_STATIC EMAKEHR(0x1888) #define VER_E_CTOR EMAKEHR(0x1889) #define VER_E_CTOR_VIRT EMAKEHR(0x188a) #define VER_E_CTOR_OR_SUPER EMAKEHR(0x188b) #define VER_E_CTOR_MUL_INIT EMAKEHR(0x188c) #define VER_E_SIG EMAKEHR(0x188d) #define VER_E_SIG_ARRAY EMAKEHR(0x188e) #define VER_E_SIG_ARRAY_PTR EMAKEHR(0x188f) #define VER_E_SIG_ARRAY_BYREF EMAKEHR(0x1890) #define VER_E_SIG_ELEM_PTR EMAKEHR(0x1891) #define VER_E_SIG_VARARG EMAKEHR(0x1892) #define VER_E_SIG_VOID EMAKEHR(0x1893) #define VER_E_SIG_BYREF_BYREF EMAKEHR(0x1894) #define VER_E_CODE_SIZE_ZERO EMAKEHR(0x1896) #define VER_E_BAD_VARARG EMAKEHR(0x1897) #define VER_E_TAIL_CALL EMAKEHR(0x1898) #define VER_E_TAIL_BYREF EMAKEHR(0x1899) #define VER_E_TAIL_RET EMAKEHR(0x189a) #define VER_E_TAIL_RET_VOID EMAKEHR(0x189b) #define VER_E_TAIL_RET_TYPE EMAKEHR(0x189c) #define VER_E_TAIL_STACK_EMPTY EMAKEHR(0x189d) #define VER_E_METHOD_END EMAKEHR(0x189e) #define VER_E_BAD_BRANCH EMAKEHR(0x189f) #define VER_E_FIN_OVERLAP EMAKEHR(0x18a0) #define VER_E_LEXICAL_NESTING EMAKEHR(0x18a1) #define VER_E_VOLATILE EMAKEHR(0x18a2) #define VER_E_UNALIGNED EMAKEHR(0x18a3) #define VER_E_INNERMOST_FIRST EMAKEHR(0x18a4) #define VER_E_CALLI_VIRTUAL EMAKEHR(0x18a5) #define VER_E_CALL_ABSTRACT EMAKEHR(0x18a6) #define VER_E_STACK_UNEXP_ARRAY EMAKEHR(0x18a7) #define VER_E_NOT_IN_GC_HEAP EMAKEHR(0x18a8) #define VER_E_TRY_N_EMPTY_STACK EMAKEHR(0x18a9) #define VER_E_DLGT_CTOR EMAKEHR(0x18aa) #define VER_E_DLGT_BB EMAKEHR(0x18ab) #define VER_E_DLGT_PATTERN EMAKEHR(0x18ac) #define VER_E_DLGT_LDFTN EMAKEHR(0x18ad) #define VER_E_FTN_ABSTRACT EMAKEHR(0x18ae) #define VER_E_SIG_C_VC EMAKEHR(0x18af) #define VER_E_SIG_VC_C EMAKEHR(0x18b0) #define VER_E_BOX_PTR_TO_STACK EMAKEHR(0x18b1) #define VER_E_SIG_BYREF_TB_AH EMAKEHR(0x18b2) #define VER_E_SIG_ARRAY_TB_AH EMAKEHR(0x18b3) #define VER_E_ENDFILTER_STACK EMAKEHR(0x18b4) #define VER_E_DLGT_SIG_I EMAKEHR(0x18b5) #define VER_E_DLGT_SIG_O EMAKEHR(0x18b6) #define VER_E_RA_PTR_TO_STACK EMAKEHR(0x18b7) #define VER_E_CATCH_VALUE_TYPE EMAKEHR(0x18b8) #define VER_E_CATCH_BYREF EMAKEHR(0x18b9) #define VER_E_FIL_PRECEED_HND EMAKEHR(0x18ba) #define VER_E_LDVIRTFTN_STATIC EMAKEHR(0x18bb) #define VER_E_CALLVIRT_STATIC EMAKEHR(0x18bc) #define VER_E_INITLOCALS EMAKEHR(0x18bd) #define VER_E_BR_TO_EXCEPTION EMAKEHR(0x18be) #define VER_E_CALL_CTOR EMAKEHR(0x18bf) #define VER_E_VALCLASS_OBJREF_VAR EMAKEHR(0x18c0) #define VER_E_STACK_P_VALCLASS_OBJREF_VAR EMAKEHR(0x18c1) #define VER_E_SIG_VAR_PARAM EMAKEHR(0x18c2) #define VER_E_SIG_MVAR_PARAM EMAKEHR(0x18c3) #define VER_E_SIG_VAR_ARG EMAKEHR(0x18c4) #define VER_E_SIG_MVAR_ARG EMAKEHR(0x18c5) #define VER_E_SIG_GENERICINST EMAKEHR(0x18c6) #define VER_E_SIG_METHOD_INST EMAKEHR(0x18c7) #define VER_E_SIG_METHOD_PARENT_INST EMAKEHR(0x18c8) #define VER_E_SIG_FIELD_PARENT_INST EMAKEHR(0x18c9) #define VER_E_CALLCONV_NOT_GENERICINST EMAKEHR(0x18ca) #define VER_E_TOKEN_BAD_METHOD_SPEC EMAKEHR(0x18cb) #define VER_E_BAD_READONLY_PREFIX EMAKEHR(0x18cc) #define VER_E_BAD_CONSTRAINED_PREFIX EMAKEHR(0x18cd) #define VER_E_CIRCULAR_VAR_CONSTRAINTS EMAKEHR(0x18ce) #define VER_E_CIRCULAR_MVAR_CONSTRAINTS EMAKEHR(0x18cf) #define VER_E_UNSATISFIED_METHOD_INST EMAKEHR(0x18d0) #define VER_E_UNSATISFIED_METHOD_PARENT_INST EMAKEHR(0x18d1) #define VER_E_UNSATISFIED_FIELD_PARENT_INST EMAKEHR(0x18d2) #define VER_E_UNSATISFIED_BOX_OPERAND EMAKEHR(0x18d3) #define VER_E_CONSTRAINED_CALL_WITH_NON_BYREF_THIS EMAKEHR(0x18d4) #define VER_E_CONSTRAINED_OF_NON_VARIABLE_TYPE EMAKEHR(0x18d5) #define VER_E_READONLY_UNEXPECTED_CALLEE EMAKEHR(0x18d6) #define VER_E_READONLY_ILLEGAL_WRITE EMAKEHR(0x18d7) #define VER_E_READONLY_IN_MKREFANY EMAKEHR(0x18d8) #define VER_E_UNALIGNED_ALIGNMENT EMAKEHR(0x18d9) #define VER_E_TAILCALL_INSIDE_EH EMAKEHR(0x18da) #define VER_E_BACKWARD_BRANCH EMAKEHR(0x18db) #define VER_E_CALL_TO_VTYPE_BASE EMAKEHR(0x18dc) #define VER_E_NEWOBJ_OF_ABSTRACT_CLASS EMAKEHR(0x18dd) #define VER_E_UNMANAGED_POINTER EMAKEHR(0x18de) #define VER_E_LDFTN_NON_FINAL_VIRTUAL EMAKEHR(0x18df) #define VER_E_FIELD_OVERLAP EMAKEHR(0x18e0) #define VER_E_THIS_MISMATCH EMAKEHR(0x18e1) #define VER_E_STACK_I_I4 EMAKEHR(0x18e2) #define VER_E_BAD_PE EMAKEHR(0x18f0) #define VER_E_BAD_MD EMAKEHR(0x18f1) #define VER_E_BAD_APPDOMAIN EMAKEHR(0x18f2) #define VER_E_TYPELOAD EMAKEHR(0x18f3) #define VER_E_PE_LOAD EMAKEHR(0x18f4) #define VER_E_WRITE_RVA_STATIC EMAKEHR(0x18f5) #define VER_E_INITIALIZE_ARRAY_MISSING_TOKEN EMAKEHR(0x18f6) #endif /* __WINE_CORERROR_H */ ================================================ FILE: wine/windows/corhdr.h ================================================ /* * Copyright 2008 James Hawkins * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_CORHDR_H #define __WINE_CORHDR_H typedef enum CorTokenType { mdtModule = 0x00000000, mdtTypeRef = 0x01000000, mdtTypeDef = 0x02000000, mdtFieldDef = 0x04000000, mdtMethodDef = 0x06000000, mdtParamDef = 0x08000000, mdtInterfaceImpl = 0x09000000, mdtMemberRef = 0x0a000000, mdtCustomAttribute = 0x0c000000, mdtPermission = 0x0e000000, mdtSignature = 0x11000000, mdtEvent = 0x14000000, mdtProperty = 0x17000000, mdtModuleRef = 0x1a000000, mdtTypeSpec = 0x1b000000, mdtAssembly = 0x20000000, mdtAssemblyRef = 0x23000000, mdtFile = 0x26000000, mdtExportedType = 0x27000000, mdtManifestResource = 0x28000000, mdtGenericParam = 0x2a000000, mdtMethodSpec = 0x2b000000, mdtGenericParamConstraint = 0x2c000000, mdtString = 0x70000000, mdtName = 0x71000000, mdtBaseType = 0x72000000, } CorTokenType; typedef enum CorElementType { ELEMENT_TYPE_END = 0x00, ELEMENT_TYPE_VOID = 0x01, ELEMENT_TYPE_BOOLEAN = 0x02, ELEMENT_TYPE_CHAR = 0x03, ELEMENT_TYPE_I1 = 0x04, ELEMENT_TYPE_U1 = 0x05, ELEMENT_TYPE_I2 = 0x06, ELEMENT_TYPE_U2 = 0x07, ELEMENT_TYPE_I4 = 0x08, ELEMENT_TYPE_U4 = 0x09, ELEMENT_TYPE_I8 = 0x0a, ELEMENT_TYPE_U8 = 0x0b, ELEMENT_TYPE_R4 = 0x0c, ELEMENT_TYPE_R8 = 0x0d, ELEMENT_TYPE_STRING = 0x0e, ELEMENT_TYPE_PTR = 0x0f, ELEMENT_TYPE_BYREF = 0x10, ELEMENT_TYPE_VALUETYPE = 0x11, ELEMENT_TYPE_CLASS = 0x12, ELEMENT_TYPE_VAR = 0x13, ELEMENT_TYPE_ARRAY = 0x14, ELEMENT_TYPE_GENERICINST = 0x15, ELEMENT_TYPE_TYPEDBYREF = 0x16, ELEMENT_TYPE_I = 0x18, ELEMENT_TYPE_U = 0x19, ELEMENT_TYPE_FNPTR = 0x1b, ELEMENT_TYPE_OBJECT = 0x1c, ELEMENT_TYPE_SZARRAY = 0x1d, ELEMENT_TYPE_MVAR = 0x1e, ELEMENT_TYPE_CMOD_REQD = 0x1f, ELEMENT_TYPE_CMOD_OPT = 0x20, ELEMENT_TYPE_INTERNAL = 0x21, ELEMENT_TYPE_MAX = 0x22, ELEMENT_TYPE_MODIFIER = 0x40, ELEMENT_TYPE_SENTINEL = 0x01 | ELEMENT_TYPE_MODIFIER, ELEMENT_TYPE_PINNED = 0x05 | ELEMENT_TYPE_MODIFIER, ELEMENT_TYPE_R4_HFA = 0x06 | ELEMENT_TYPE_MODIFIER, ELEMENT_TYPE_R8_HFA = 0x07 | ELEMENT_TYPE_MODIFIER, } CorElementType; #define RidToToken(rid,tktype) ((rid) |= (tktype)) #define TokenFromRid(rid,tktype) ((rid) | (tktype)) #define RidFromToken(tk) ((RID)((tk) & 0x00ffffff)) #define TypeFromToken(tk) ((ULONG32)((tk) & 0xff000000)) #define IsNilToken(tk) ((RidFromToken(tk)) == 0) typedef LPVOID mdScope; typedef ULONG32 mdToken; typedef mdToken mdModule; typedef mdToken mdTypeRef; typedef mdToken mdTypeDef; typedef mdToken mdFieldDef; typedef mdToken mdMethodDef; typedef mdToken mdParamDef; typedef mdToken mdInterfaceImpl; typedef mdToken mdMemberRef; typedef mdToken mdCustomAttribute; typedef mdToken mdPermission; typedef mdToken mdSignature; typedef mdToken mdEvent; typedef mdToken mdProperty; typedef mdToken mdModuleRef; typedef mdToken mdAssembly; typedef mdToken mdAssemblyRef; typedef mdToken mdFile; typedef mdToken mdExportedType; typedef mdToken mdManifestResource; typedef mdToken mdTypeSpec; typedef mdToken mdGenericParam; typedef mdToken mdMethodSpec; typedef mdToken mdGenericParamConstraint; typedef mdToken mdString; typedef mdToken mdCPToken; #endif /* __WINE_CORHDR_H */ ================================================ FILE: wine/windows/cpl.h ================================================ /* * Control panel definitions * * Copyright (C) 2001 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _INC_CPL #define _INC_CPL #include #ifdef __cplusplus extern "C" { #endif #define WM_CPL_LAUNCH (WM_USER+1000) #define WM_CPL_LAUNCHED (WM_USER+1001) typedef LONG (APIENTRY *APPLET_PROC)(HWND hwndCpl, UINT msg, LPARAM lParam1, LPARAM lParam2); typedef struct tagCPLINFO { int idIcon; int idName; int idInfo; LONG_PTR lData; } CPLINFO, *LPCPLINFO; typedef struct tagNEWCPLINFOA { DWORD dwSize; DWORD dwFlags; DWORD dwHelpContext; LONG_PTR lData; HICON hIcon; CHAR szName[32]; CHAR szInfo[64]; CHAR szHelpFile[128]; } NEWCPLINFOA, *LPNEWCPLINFOA; typedef struct tagNEWCPLINFOW { DWORD dwSize; DWORD dwFlags; DWORD dwHelpContext; LONG_PTR lData; HICON hIcon; WCHAR szName[32]; WCHAR szInfo[64]; WCHAR szHelpFile[128]; } NEWCPLINFOW, *LPNEWCPLINFOW; DECL_WINELIB_TYPE_AW(NEWCPLINFO) DECL_WINELIB_TYPE_AW(LPNEWCPLINFO) #define CPL_DYNAMIC_RES 0 #define CPL_INIT 1 #define CPL_GETCOUNT 2 #define CPL_INQUIRE 3 #define CPL_SELECT 4 #define CPL_DBLCLK 5 #define CPL_STOP 6 #define CPL_EXIT 7 #define CPL_NEWINQUIRE 8 #define CPL_STARTWPARMSA 9 #define CPL_STARTWPARMSW 10 #define CPL_STARTWPARMS WINELIB_NAME_AW(CPL_STARTWPARMS) #define CPL_SETUP 200 #ifdef __cplusplus } #endif #include #endif /* _INC_CPL */ ================================================ FILE: wine/windows/crtrow.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733ab2-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ICreateRow : IUnknown { [local] HRESULT CreateRow([in, unique] IUnknown *pUnkOuter, [in] LPCOLESTR pwszURL, [in] DBBINDURLFLAG dwBindURLFlags, [in] REFGUID rguid, [in] REFIID riid, [in, unique] IAuthenticate *pAuthenticate, [in, out, unique] DBIMPLICITSESSION *pImplSession, [in, out, unique] DBBINDURLSTATUS *pdwBindStatus, [out, annotation("__deref_opt_out_opt")] LPOLESTR *ppwszNewURL, [out, iid_is(riid)] IUnknown **ppUnk); [call_as(CreateRow)] HRESULT RemoteCreateRow([in] IUnknown *pUnkOuter, [in] LPCOLESTR pwszURL, [in] DBBINDURLFLAG dwBindURLFlags, [in] REFGUID rguid, [in] REFIID riid, [in] IAuthenticate *pAuthenticate, [in] IUnknown *pSessionUnkOuter, [in, unique] IID *piid, [in, out, unique, iid_is(piid)] IUnknown **ppSession, [in, out, unique] DBBINDURLSTATUS *pdwBindStatus, [in, out, unique] LPOLESTR *ppwszNewURL, [out, iid_is(riid)] IUnknown **ppUnk); } ================================================ FILE: wine/windows/cryptdlg.h ================================================ /* * Copyright (C) 2008 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __CRYPTDLG_H__ #define __CRYPTDLG_H__ #include #ifdef __cplusplus extern "C" { #endif #define CRYPTDLG_FLAGS_MASK 0xff000000 #define CRYPTDLG_REVOCATION_DEFAULT 0x00000000 #define CRYPTDLG_REVOCATION_ONLINE 0x80000000 #define CRYPTDLG_REVOCATION_CACHE 0x40000000 #define CRYPTDLG_REVOCATION_NONE 0x20000000 #define CRYPTDLG_POLICY_MASK 0x0000ffff #define POLICY_IGNORE_NON_CRITICAL_BC 0x00000001 #define CRYPTDLG_ACTION_MASK 0xffff0000 #define ACTION_REVOCATION_DEFAULT_ONLINE 0x00010000 #define ACTION_REVOCATION_DEFAULT_CACHE 0x00020000 typedef BOOL (WINAPI *PFNCMFILTERPROC)(PCCERT_CONTEXT, DWORD, DWORD, DWORD); #define CERT_DISPWELL_SELECT 1 #define CERT_DISPWELL_TRUST_CA_CERT 2 #define CERT_DISPWELL_TRUST_LEAF_CERT 3 #define CERT_DISPWELL_TRUST_ADD_CA_CERT 4 #define CERT_DISPWELL_TRUST_ADD_LEAF_CERT 5 #define CERT_DISPWELL_DISTRUST_CA_CERT 6 #define CERT_DISPWELL_DISTRUST_LEAF_CERT 7 #define CERT_DISPWELL_DISTRUST_ADD_CA_CERT 8 #define CERT_DISPWELL_DISTRUST_ADD_LEAF_CERT 9 typedef UINT (WINAPI *PFNCMHOOKPROC)(HWND, UINT, WPARAM, LPARAM); #define CSS_SELECTCERT_MASK 0x00ffffff #define CSS_HIDE_PROPERTIES 0x00000001 #define CSS_ENABLEHOOK 0x00000002 #define CSS_ALLOWMULTISELECT 0x00000004 #define CSS_SHOW_HELP 0x00000010 #define CSS_ENABLETEMPLATE 0x00000020 #define CSS_ENABLETEMPLATEHANDLE 0x00000040 #define SELCERT_OK IDOK #define SELCERT_CANCEL IDCANCEL #define SELCERT_PROPERTIES 100 #define SELCERT_FINEPRINT 101 #define SELCERT_CERTLIST 102 #define SELCERT_HELP IDHELP #define SELCERT_ISSUED_TO 103 #define SELCERT_VALIDITY 104 #define SELCERT_ALGORITHM 105 #define SELCERT_SERIAL_NUM 106 #define SELCERT_THUMBPRINT 107 typedef struct tagCSSA { DWORD dwSize; HWND hwndParent; HINSTANCE hInstance; LPCSTR pTemplateName; DWORD dwFlags; LPCSTR szTitle; DWORD cCertStore; HCERTSTORE *arrayCertStore; LPCSTR szPurposeOid; DWORD cCertContext; PCCERT_CONTEXT *arrayCertContext; DWORD lCustData; PFNCMHOOKPROC pfnHook; PFNCMFILTERPROC pfnFilter; LPCSTR szHelpFileName; DWORD dwHelpId; HCRYPTPROV hprov; } CERT_SELECT_STRUCT_A, *PCERT_SELECT_STRUCT_A; typedef struct tagCSSW { DWORD dwSize; HWND hwndParent; HINSTANCE hInstance; LPCWSTR pTemplateName; DWORD dwFlags; LPCWSTR szTitle; DWORD cCertStore; HCERTSTORE *arrayCertStore; LPCSTR szPurposeOid; DWORD cCertContext; PCCERT_CONTEXT *arrayCertContext; DWORD lCustData; PFNCMHOOKPROC pfnHook; PFNCMFILTERPROC pfnFilter; LPCWSTR szHelpFileName; DWORD dwHelpId; HCRYPTPROV hprov; } CERT_SELECT_STRUCT_W, *PCERT_SELECT_STRUCT_W; #define CERT_SELECT_STRUCT WINELIB_NAME_AW(CERT_SELECT_STRUCT_) BOOL WINAPI CertSelectCertificateA(PCERT_SELECT_STRUCT_A pCertSelectInfo); BOOL WINAPI CertSelectCertificateW(PCERT_SELECT_STRUCT_W pCertSelectInfo); #define CertSelectCertificate WINELIB_NAME_AW(CertSelectCertificate) #define CM_VIEWFLAGS_MASK 0x00ffffff #define CM_ENABLEHOOK 0x00000001 #define CM_SHOW_HELP 0x00000002 #define CM_SHOW_HELPICON 0x00000004 #define CM_ENABLETEMPLATE 0x00000008 #define CM_HIDE_ADVANCEPAGE 0x00000010 #define CM_HIDE_TRUSTPAGE 0x00000020 #define CM_NO_NAMECHANGE 0x00000040 #define CM_NO_EDITTRUST 0x00000080 #define CM_HIDE_DETAILPAGE 0x00000100 #define CM_ADD_CERT_STORES 0x00000200 #define CERTVIEW_CRYPTUI_LPARAM 0x00800000 typedef struct tagCERT_VIEWPROPERTIES_STRUCT_A { DWORD dwSize; HWND hwndParent; HINSTANCE hInstance; DWORD dwFlags; LPCSTR szTitle; PCCERT_CONTEXT pCertContext; LPSTR *arrayPurposes; DWORD cArrayPurposes; DWORD cRootStores; HCERTSTORE *rghstoreRoots; DWORD cStores; HCERTSTORE *rghstoreCAs; DWORD cTrustStores; HCERTSTORE *rghstoreTrust; HCRYPTPROV hprov; DWORD lCustData; DWORD dwPad; LPCSTR szHelpFileName; DWORD dwHelpId; DWORD nStartPage; DWORD cArrayPropSheetPages; /* FIXME: PSDK declares arrayPropSheetPages as a PROPSHEETPAGE *, which we * don't allow in our own headers. It's probably wrong, but we're not * compatible. */ PROPSHEETPAGEA *arrayPropSheetPages; } CERT_VIEWPROPERTIES_STRUCT_A, *PCERT_VIEWPROPERTIES_STRUCT_A; typedef struct tagCERT_VIEWPROPERTIES_STRUCT_W { DWORD dwSize; HWND hwndParent; HINSTANCE hInstance; DWORD dwFlags; LPCWSTR szTitle; PCCERT_CONTEXT pCertContext; LPSTR *arrayPurposes; DWORD cArrayPurposes; DWORD cRootStores; HCERTSTORE *rghstoreRoots; DWORD cStores; HCERTSTORE *rghstoreCAs; DWORD cTrustStores; HCERTSTORE *rghstoreTrust; HCRYPTPROV hprov; DWORD lCustData; DWORD dwPad; LPCWSTR szHelpFileName; DWORD dwHelpId; DWORD nStartPage; DWORD cArrayPropSheetPages; /* FIXME: PSDK declares arrayPropSheetPages as a PROPSHEETPAGE *, which we * don't allow in our own headers. It's probably wrong, but we're not * compatible. */ PROPSHEETPAGEW *arrayPropSheetPages; } CERT_VIEWPROPERTIES_STRUCT_W, *PCERT_VIEWPROPERTIES_STRUCT_W; #define CERT_VIEWPROPERTIES_STRUCT WINELIB_NAME_AW(CERT_VIEWPROPERTIES_STRUCT_) #define PCERT_VIEWPROPERTIES_STRUCT \ WINELIB_NAME_AW(PCERT_VIEWPROPERTIES_STRUCT_) BOOL WINAPI CertViewPropertiesA(PCERT_VIEWPROPERTIES_STRUCT_A pCertViewInfo); BOOL WINAPI CertViewPropertiesW(PCERT_VIEWPROPERTIES_STRUCT_W pCertViewInfo); #define CertViewProperties WINELIB_NAME_AW(CertViewProperties) #define CERT_FILTER_OP_EXISTS 1 #define CERT_FILTER_OP_NOT_EXISTS 2 #define CERT_FILTER_OP_EQUALITY 3 typedef struct tagCMOID { LPCSTR szExtensionOID; DWORD dwTestOperation; LPBYTE pbTestData; DWORD cbTestData; } CERT_FILTER_EXTENSION_MATCH; #define CERT_FILTER_INCLUDE_V1_CERTS 0x0001 #define CERT_FILTER_VALID_TIME_RANGE 0x0002 #define CERT_FILTER_VALID_SIGNATURE 0x0004 #define CERT_FILTER_LEAF_CERTS_ONLY 0x0008 #define CERT_FILTER_ISSUER_CERTS_ONLY 0x0010 #define CERT_FILTER_KEY_EXISTS 0x0020 typedef struct tagCMFLTR { DWORD dwSize; DWORD cExtensionChecks; CERT_FILTER_EXTENSION_MATCH *arrayExtensionChecks; DWORD dwCheckingFlags; } CERT_FILTER_DATA; DWORD WINAPI GetFriendlyNameOfCertA(PCCERT_CONTEXT pccert, LPSTR pchBuffer, DWORD cchBuffer); DWORD WINAPI GetFriendlyNameOfCertW(PCCERT_CONTEXT pccert, LPWSTR pchBuffer, DWORD cchBuffer); #define GetFriendlyNameOfCert WINELIB_NAME_AW(GetFriendlyNameOfCert) #define CERT_CERTIFICATE_ACTION_VERIFY \ { 0x7801ebd0, 0xcf4b, 0x11d0, { 0x85,0x1f,0x00,0x60,0x97,0x93,0x87,0xea }} #define szCERT_CERTIFICATE_ACTION_VERIFY \ "{7801ebd0-cf4b-11d0-851f-0060979387ea}" typedef HRESULT (WINAPI *PFNTRUSTHELPER)(PCCERT_CONTEXT, DWORD, BOOL, LPBYTE); #define CERT_VALIDITY_MASK_VALIDITY 0x0000ffff #define CERT_VALIDITY_BEFORE_START 0x00000001 #define CERT_VALIDITY_AFTER_END 0x00000002 #define CERT_VALIDITY_SIGNATURE_FAILS 0x00000004 #define CERT_VALIDITY_CERTIFICATE_REVOKED 0x00000008 #define CERT_VALIDITY_KEY_USAGE_EXT_FAILURE 0x00000010 #define CERT_VALIDITY_EXTENDED_USAGE_FAILURE 0x00000020 #define CERT_VALIDITY_NAME_CONSTRAINTS_FAILURE 0x00000040 #define CERT_VALIDITY_UNKNOWN_CRITICAL_EXTENSION 0x00000080 #define CERT_VALIDITY_ISSUER_INVALID 0x00000100 #define CERT_VALIDITY_OTHER_EXTENSION_FAILURE 0x00000200 #define CERT_VALIDITY_PERIOD_NESTING_FAILURE 0x00000400 #define CERT_VALIDITY_OTHER_ERROR 0x00000800 #define CERT_VALIDITY_MASK_TRUST 0xffff0000 #define CERT_VALIDITY_EXPLICITLY_DISTRUSTED 0x01000000 #define CERT_VALIDITY_ISSUER_DISTRUST 0x02000000 #define CERT_VALIDITY_NO_ISSUER_CERT_FOUND 0x10000000 #define CERT_VALIDITY_NO_CRL_FOUND 0x20000000 #define CERT_VALIDITY_CRL_OUT_OF_DATE 0x40000000 #define CERT_VALIDITY_NO_TRUST_DATA 0x80000000 #define CERT_TRUST_MASK 0x00ffffff #define CERT_TRUST_DO_FULL_SEARCH 0x00000001 #define CERT_TRUST_PERMIT_MISSING_CRLS 0x00000002 #define CERT_TRUST_DO_FULL_TRUST 0x00000005 #define CERT_TRUST_ADD_CERT_STORES CM_ADD_CERT_STORES typedef struct _CERT_VERIFY_CERTIFICATE_TRUST { DWORD cbSize; PCCERT_CONTEXT pccert; DWORD dwFlags; DWORD dwIgnoreErr; DWORD *pdwErrors; LPSTR pszUsageOid; HCRYPTPROV hprov; DWORD cRootStores; HCERTSTORE *rghstoreRoots; DWORD cStores; HCERTSTORE *rghstoreCAs; DWORD cTrustStores; HCERTSTORE *rghstoreTrust; DWORD lCustData; PFNTRUSTHELPER pfnTrustHelper; DWORD *pcchain; PCCERT_CONTEXT **prgChain; DWORD **prgdwErrors; DATA_BLOB **prgpbTrustInfo; } CERT_VERIFY_CERTIFICATE_TRUST, *PCERT_VERIFY_CERTIFICATE_TRUST; #define CTL_MODIFY_REQUEST_ADD_NOT_TRUSTED 1 #define CTL_MODIFY_REQUEST_REMOVE 2 #define CTL_MODIFY_REQUEST_ADD_TRUSTED 3 typedef struct _CTL_MODIFY_REQUEST { PCCERT_CONTEXT pccert; DWORD dwOperation; DWORD dwError; } CTL_MODIFY_REQUEST, *PCTL_MODIFY_REQUEST; HRESULT WINAPI CertModifyCertificatesToTrust(int cCertStore, PCTL_MODIFY_REQUEST rgCerts, LPCSTR szPurpose, HWND hwnd, HCERTSTORE hcertstoreTrust); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/cryptuiapi.h ================================================ /* * Copyright (C) 2008 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __CRYPTUIAPI_H__ #define __CRYPTUIAPI_H__ #include #include #include #ifdef __cplusplus extern "C" { #endif #include BOOL WINAPI CryptUIDlgViewContext(DWORD dwContextType, LPVOID pvContext, HWND hwnd, LPCWSTR pwszTitle, DWORD dwFlags, LPVOID pvReserved); /* Values for dwDontUseColumn */ #define CRYPTUI_SELECT_ISSUEDTO_COLUMN 0x00000001 #define CRYPTUI_SELECT_ISSUEDBY_COLUMN 0x00000002 #define CRYPTUI_SELECT_INTENDEDUSE_COLUMN 0x00000004 #define CRYPTUI_SELECT_FRIENDLYNAME_COLUMN 0x00000008 #define CRYPTUI_SELECT_LOCATION_COLUMN 0x00000010 #define CRYPTUI_SELECT_EXPIRATION_COLUMN 0x00000020 PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore( HCERTSTORE hCertStore, HWND hwnd, LPCWSTR pwszTitle, LPCWSTR pwszDisplayString, DWORD dwDontUseColumn, DWORD dwFlags, LPVOID pvReserved); /* Values for CRYPTUI_CERT_MGR_STRUCT's dwFlags */ #define CRYPTUI_CERT_MGR_PUBLISHER_TAB 0x00000004 #define CRYPTUI_CERT_MGR_TAB_MASK 0x0000000f #define CRYPTUI_CERT_MGR_SINGLE_TAB_FLAG 0x00008000 typedef struct _CRYPTUI_CERT_MGR_STRUCT { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCWSTR pwszTitle; LPCSTR pszInitUsageOID; } CRYPTUI_CERT_MGR_STRUCT, *PCRYPTUI_CERT_MGR_STRUCT; typedef const struct _CRYPTUI_CERT_MGR_STRUCT *PCCRYPTUI_CERT_MGR_STRUCT; BOOL WINAPI CryptUIDlgCertMgr(PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr); typedef BOOL (WINAPI *PFNCFILTERPROC)(PCCERT_CONTEXT pCertContext, BOOL *pfInitialSelectedCert, void *pvCallbackData); typedef struct tagCRYPTUI_INITDIALOG_STRUCT { LPARAM lParam; PCCERT_CONTEXT pCertContext; } CRYPTUI_INITDIALOG_STRUCT, *PCRYPTUI_INITDIALOG_STRUCT; /* Values for CRYPTUI_VIEWCERTIFICATE_STRUCT's dwFlags */ #define CRYPTUI_HIDE_HIERARCHYPAGE 0x00000001 #define CRYPTUI_HIDE_DETAILPAGE 0x00000002 #define CRYPTUI_DISABLE_EDITPROPERTIES 0x00000004 #define CRYPTUI_ENABLE_EDITPROPERTIES 0x00000008 #define CRYPTUI_DISABLE_ADDTOSTORE 0x00000010 #define CRYPTUI_ENABLE_ADDTOSTORE 0x00000020 #define CRYPTUI_ACCEPT_DECLINE_STYLE 0x00000040 #define CRYPTUI_IGNORE_UNTRUSTED_ROOT 0x00000080 #define CRYPTUI_DONT_OPEN_STORES 0x00000100 #define CRYPTUI_ONLY_OPEN_ROOT_STORE 0x00000200 #define CRYPTUI_WARN_UNTRUSTED_ROOT 0x00000400 #define CRYPTUI_ENABLE_REVOCATION_CHECKING 0x00000800 #define CRYPTUI_WARN_REMOTE_TRUST 0x00001000 #define CRYPTUI_DISABLE_EXPORT 0x00002000 #define CRYPTUI_ENABLE_REVOCATION_CHECK_END_CERT 0x00004000 #define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN 0x00008000 #define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT CRYPTUI_ENABLE_REVOCATION_CHECKING #define CRYPTUI_DISABLE_HTMLLINK 0x00010000 #define CRYPTUI_DISABLE_ISSUERSTATEMENT 0x00020000 typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTA { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCSTR szTitle; PCCERT_CONTEXT pCertContext; LPCSTR *rgszPurposes; DWORD cPurposes; union { CRYPT_PROVIDER_DATA const *pCryptProviderData; HANDLE hWVTStateData; } DUMMYUNIONNAME; BOOL fpCryptProviderDataTrustedUsage; DWORD idxSigner; DWORD idxCert; BOOL fCounterSigner; DWORD idxCounterSigner; DWORD cStores; HCERTSTORE *rghStores; DWORD cPropSheetPages; LPCPROPSHEETPAGEA rgPropSheetPages; DWORD nStartPage; } CRYPTUI_VIEWCERTIFICATE_STRUCTA, *PCRYPTUI_VIEWCERTIFICATE_STRUCTA; typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTA *PCCRYPTUI_VIEWCERTIFICATE_STRUCTA; typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTW { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCWSTR szTitle; PCCERT_CONTEXT pCertContext; LPCSTR *rgszPurposes; DWORD cPurposes; union { CRYPT_PROVIDER_DATA const *pCryptProviderData; HANDLE hWVTStateData; } DUMMYUNIONNAME; BOOL fpCryptProviderDataTrustedUsage; DWORD idxSigner; DWORD idxCert; BOOL fCounterSigner; DWORD idxCounterSigner; DWORD cStores; HCERTSTORE *rghStores; DWORD cPropSheetPages; LPCPROPSHEETPAGEW rgPropSheetPages; DWORD nStartPage; } CRYPTUI_VIEWCERTIFICATE_STRUCTW, *PCRYPTUI_VIEWCERTIFICATE_STRUCTW; typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTW *PCCRYPTUI_VIEWCERTIFICATE_STRUCTW; #define CRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(CRYPTUI_VIEWCERTIFICATE_STRUCT) #define PCCRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(PCCRYPTUI_VIEWCERTIFICATE_STRUCT) BOOL WINAPI CryptUIDlgViewCertificateA( PCCRYPTUI_VIEWCERTIFICATE_STRUCTA pCertViewInfo, BOOL *pfPropertiesChanged); BOOL WINAPI CryptUIDlgViewCertificateW( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged); #define CryptUIDlgViewCertificate WINELIB_NAME_AW(CryptUIDlgViewCertificate) typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO { DWORD dwSize; GUID *pGuidSubject; DWORD cbBlob; BYTE *pbBlob; LPCWSTR pwszDisplayName; } CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO; typedef const CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO * PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO; typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO { DWORD dwSize; DWORD cCertStore; HCERTSTORE *rghCertStore; PFNCFILTERPROC pFilterCallback; void *pvCallbackData; } CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO; typedef const CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO * PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO; typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO { DWORD dwSize; LPWSTR pwszPvkFileName; LPWSTR pwszProvName; DWORD dwProvType; } CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO; typedef const CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO * PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO; typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO { DWORD dwSize; LPWSTR pwszSigningCertFileName; DWORD dwPvkChoice; union { PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO pPvkFileInfo; PCRYPT_KEY_PROV_INFO pPvkProvInfo; } DUMMYUNIONNAME; } CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO; typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO * PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO; typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO { DWORD dwSize; DWORD dwAttrFlags; LPCWSTR pwszDescription; LPCWSTR pwszMoreInfoLocation; LPCSTR pszHashAlg; LPCWSTR pwszSigningCertDisplayString; HCERTSTORE hAdditionalCertStore; PCRYPT_ATTRIBUTES psAuthenticated; PCRYPT_ATTRIBUTES psUnauthenticated; } CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO; typedef const CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO * PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO; typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_INFO { DWORD dwSize; DWORD dwSubjectChoice; union { LPCWSTR pwszFileName; PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO pSignBlobInfo; } DUMMYUNIONNAME1; DWORD dwSigningCertChoice; union { PCCERT_CONTEXT pSigningCertContext; PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO pSigningCertStore; PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO pSigningCertPvkInfo; } DUMMYUNIONNAME2; LPCWSTR pwszTimestampURL; DWORD dwAdditionalCertChoice; PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO pSignExtInfo; } CRYPTUI_WIZ_DIGITAL_SIGN_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_INFO; typedef const CRYPTUI_WIZ_DIGITAL_SIGN_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO; typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT { DWORD dwSize; DWORD cbBlob; BYTE *pbBlob; } CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT, *PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT; typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT; /* Values for CryptUIWizDigitalSign's dwFlags */ #define CRYPTUI_WIZ_NO_UI 0x00000001 #define CRYPTUI_WIZ_DIGITAL_SIGN_EXCLUDE_PAGE_HASHES 0x00000002 #define CRYPTUI_WIZ_DIGITAL_SIGN_INCLUDE_PAGE_HASHES 0x00000004 BOOL WINAPI CryptUIWizDigitalSign(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo, PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *ppSignContext); BOOL WINAPI CryptUIWizFreeDigitalSignContext( PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext); /* Values for CRYPTUI_WIZ_EXPORT_INFO's dwSubjectChoice */ #define CRYPTUI_WIZ_EXPORT_CERT_CONTEXT 1 #define CRYPTUI_WIZ_EXPORT_CTL_CONTEXT 2 #define CRYPTUI_WIZ_EXPORT_CRL_CONTEXT 3 #define CRYPTUI_WIZ_EXPORT_CERT_STORE 4 #define CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY 5 #define CRYPTUI_WIZ_EXPORT_FORMAT_CRL 6 #define CRYPTUI_WIZ_EXPORT_FORMAT_CTL 7 typedef struct _CRYPTUI_WIZ_EXPORT_INFO { DWORD dwSize; LPCWSTR pwszExportFileName; DWORD dwSubjectChoice; union { PCCERT_CONTEXT pCertContext; PCCTL_CONTEXT pCTLContext; PCCRL_CONTEXT pCRLContext; HCERTSTORE hCertStore; } DUMMYUNIONNAME; DWORD cStores; HCERTSTORE *rghStores; } CRYPTUI_WIZ_EXPORT_INFO, *PCRYPTUI_WIZ_EXPORT_INFO; typedef const CRYPTUI_WIZ_EXPORT_INFO *PCCRYPTUI_WIZ_EXPORT_INFO; /* Values for CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO's dwExportFormat */ #define CRYPTUI_WIZ_EXPORT_FORMAT_DER 1 #define CRYPTUI_WIZ_EXPORT_FORMAT_PFX 2 #define CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7 3 #define CRYPTUI_WIZ_EXPORT_FORMAT_BASE64 4 #define CRYPTUI_WIZ_EXPORT_FORMAT_SERIALIZED_CERT_STORE 5 typedef struct _CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO { DWORD dwSize; DWORD dwExportFormat; BOOL fExportChain; BOOL fExportPrivateKeys; LPCWSTR pwszPassword; BOOL fStrongEncryption; } CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO, *PCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO; typedef const CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO * PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO; BOOL WINAPI CryptUIWizExport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid); /* Values for CRYPTUI_WIZ_IMPORT_SRC_INFO's dwSubjectChoice */ #define CRYPTUI_WIZ_IMPORT_SUBJECT_FILE 1 #define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT 2 #define CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT 3 #define CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT 4 #define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE 5 typedef struct _CRYPTUI_WIZ_IMPORT_SUBJECT_INFO { DWORD dwSize; DWORD dwSubjectChoice; union { LPCWSTR pwszFileName; PCCERT_CONTEXT pCertContext; PCCTL_CONTEXT pCTLContext; PCCRL_CONTEXT pCRLContext; HCERTSTORE hCertStore; } DUMMYUNIONNAME; DWORD dwFlags; LPCWSTR pwszPassword; } CRYPTUI_WIZ_IMPORT_SRC_INFO, *PCRYPTUI_WIZ_IMPORT_SRC_INFO; typedef const CRYPTUI_WIZ_IMPORT_SRC_INFO *PCCRYPTUI_WIZ_IMPORT_SRC_INFO; /* Values for CryptUIWizImport's dwFlags */ #define CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE 0x00010000 #define CRYPTUI_WIZ_IMPORT_ALLOW_CERT 0x00020000 #define CRYPTUI_WIZ_IMPORT_ALLOW_CRL 0x00040000 #define CRYPTUI_WIZ_IMPORT_ALLOW_CTL 0x00080000 #define CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE 0x00100000 #define CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER 0x00200000 #define CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE 0x00400000 BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore); /* Definitions missing from PSDK's cryptuiapi.h, but documented on MSDN. */ typedef BOOL (WINAPI *PFNCCERTDISPLAYPROC)(PCCERT_CONTEXT pCertContext, HWND hWndSelCertDlg, void *pvCallbackData); /* Values for CRYPTUI_SELECTCERTIFICATE_STRUCT's dwFlags */ #define CRYPTUI_SELECTCERT_MULTISELECT 0x00000001 typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTA { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCSTR szTitle; DWORD dwDontUseColumn; LPCSTR szDisplayString; PFNCFILTERPROC pFilterCallback; PFNCCERTDISPLAYPROC pDisplayCallback; void *pvCallbackData; DWORD cDisplayStores; HCERTSTORE *rghDisplayStores; DWORD cStores; HCERTSTORE *rghStores; DWORD cPropSheetPages; LPCPROPSHEETPAGEA rgPropSheetPages; HCERTSTORE hSelectedCertStore; } CRYPTUI_SELECTCERTIFICATE_STRUCTA, *PCRYPTUI_SELECTCERTIFICATE_STRUCTA; typedef const CRYPTUI_SELECTCERTIFICATE_STRUCTA * PCCRYPTUI_SELECTCERTIFICATE_STRUCTA; typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTW { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCWSTR szTitle; DWORD dwDontUseColumn; LPCWSTR szDisplayString; PFNCFILTERPROC pFilterCallback; PFNCCERTDISPLAYPROC pDisplayCallback; void *pvCallbackData; DWORD cDisplayStores; HCERTSTORE *rghDisplayStores; DWORD cStores; HCERTSTORE *rghStores; DWORD cPropSheetPages; LPCPROPSHEETPAGEW rgPropSheetPages; HCERTSTORE hSelectedCertStore; } CRYPTUI_SELECTCERTIFICATE_STRUCTW, *PCRYPTUI_SELECTCERTIFICATE_STRUCTW; typedef const CRYPTUI_SELECTCERTIFICATE_STRUCTW * PCCRYPTUI_SELECTCERTIFICATE_STRUCTW; PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA( PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc); PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW( PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc); typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTA { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCSTR szTitle; CMSG_SIGNER_INFO *pSignerInfo; HCRYPTMSG hMsg; LPCSTR pszOID; DWORD_PTR dwReserved; DWORD cStores; HCERTSTORE *rghStores; DWORD cPropSheetPages; LPCPROPSHEETPAGEA rgPropSheetPages; } CRYPTUI_VIEWSIGNERINFO_STRUCTA, *PCRYPTUI_VIEWSIGNERINFO_STRUCTA; typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTW { DWORD dwSize; HWND hwndParent; DWORD dwFlags; LPCWSTR szTitle; CMSG_SIGNER_INFO *pSignerInfo; HCRYPTMSG hMsg; LPCSTR pszOID; DWORD_PTR dwReserved; DWORD cStores; HCERTSTORE *rghStores; DWORD cPropSheetPages; LPCPROPSHEETPAGEW rgPropSheetPages; } CRYPTUI_VIEWSIGNERINFO_STRUCTW, *PCRYPTUI_VIEWSIGNERINFO_STRUCTW; BOOL WINAPI CryptUIDlgViewSignerInfoA(CRYPTUI_VIEWSIGNERINFO_STRUCTA *pcvsi); BOOL WINAPI CryptUIDlgViewSignerInfoW(CRYPTUI_VIEWSIGNERINFO_STRUCTW *pcvsi); #include #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/ctfutb.idl ================================================ /* * Copyright 2010 Justin Chevrier * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "oaidl.idl"; #endif interface ITfLangBarEventSink; interface ITfLangBarItemMgr; interface ITfInputProcessorProfiles; const ULONG TF_LBI_DESC_MAXLEN = 32; typedef [uuid(12a1d29f-a065-440c-9746-eb2002c8bd19)] struct TF_LANGBARITEMINFO { CLSID clsidService; GUID guidItem; DWORD dwStyle; ULONG ulSort; WCHAR szDescription[TF_LBI_DESC_MAXLEN]; } TF_LANGBARITEMINFO; [ object, uuid(73540d69-edeb-4ee9-96c9-23aa30b25916), pointer_default(unique), ] interface ITfLangBarItem : IUnknown { HRESULT GetInfo( [out] TF_LANGBARITEMINFO *pInfo); HRESULT GetStatus( [out] DWORD *pdwStatus); HRESULT Show( [in] BOOL fShow); HRESULT GetTooltipString( [out] BSTR *pbstrToolTip); } [ object, uuid(583f34d0-de25-11d2-afdd-00105a2799b5), pointer_default(unique), ] interface IEnumTfLangBarItems : IUnknown { HRESULT Clone( [out] IEnumTfLangBarItems **ppEnum); HRESULT Next( [in] ULONG ulCount, [out, size_is(ulCount)] ITfLangBarItem **ppItem, [in, out, unique] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG ulCount); } [ object, uuid(57dbe1a0-de25-11d2-afdd-00105a2799b5), pointer_default(unique), ] interface ITfLangBarItemSink : IUnknown { HRESULT OnUpdate( [in] DWORD dwFlags); } [ object, uuid(ba468c55-9956-4fb1-a59d-52a7dd7cc6aa), pointer_default(unique), ] interface ITfLangBarItemMgr : IUnknown { HRESULT EnumItems( [out] IEnumTfLangBarItems **ppEnum); HRESULT GetItem( [in] REFGUID rguid, [out] ITfLangBarItem **ppItem); HRESULT AddItem( [in] ITfLangBarItem *punk); HRESULT RemoveItem( [in] ITfLangBarItem *punk); HRESULT AdviseItemSink( [in] ITfLangBarItemSink *punk, [out] DWORD *pdwCookie, [in] REFGUID rguidItem); HRESULT UnadviseItemSink( [in] DWORD dwCookie); HRESULT GetItemFloatingRect( [in] DWORD dwThreadId, [in] REFGUID rguid, [out] RECT *prc); HRESULT GetItemsStatus( [in] ULONG ulCount, [in, size_is(ulCount)] const GUID *prgguid, [out, size_is(ulCount)] DWORD *pdwStatus); HRESULT GetItemNum( [out] ULONG *pulCount); HRESULT GetItems( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] ITfLangBarItem **ppItem, [out, size_is(ulCount), length_is(*pcFetched)] TF_LANGBARITEMINFO *pInfo, [out, size_is(ulCount), length_is(*pcFetched)] DWORD *pdwStatus, [in, out, unique] ULONG *pcFetched); HRESULT AdviseItemsSink( [in] ULONG ulCount, [in, size_is(ulCount)] ITfLangBarItemSink **ppunk, [in, size_is(ulCount)] const GUID *pguidItem, [out, size_is(ulCount)] DWORD *pdwCookie); HRESULT UnadviseItemsSink( [in] ULONG ulCount, [in, size_is(ulCount)] DWORD *pdwCookie); } [ object, uuid(87955690-e627-11d2-8ddb-00105a2799b5), pointer_default(unique) ] interface ITfLangBarMgr: IUnknown { HRESULT AdviseEventSink( [in] ITfLangBarEventSink *pSink, [in] HWND hwnd, [in] DWORD dwflags, [in] DWORD *pdwCookie); HRESULT UnAdviseEventSink( [in] DWORD dwCookie); HRESULT GetThreadMarshalInterface( [in] DWORD dwThreadId, [in] DWORD dwType, [in] REFIID riid, [out] IUnknown **ppunk); HRESULT GetThreadLangBarItemMgr( [in] DWORD dwThreadId, [out] ITfLangBarItemMgr **pplbie, [out] DWORD *pdwThreadid); HRESULT GetInputProcessorProfiles( [in] DWORD dwThreadId, [out] ITfInputProcessorProfiles **ppaip, [out] DWORD *pdwThreadid); HRESULT RestoreLastFocus( [out] DWORD *dwThreadId, [in] BOOL fPrev); HRESULT SetModalInput( [in] ITfLangBarEventSink *pSink, [in] DWORD dwThreadId, [in] DWORD dwFlags); HRESULT ShowFloating( [in] DWORD dwFlags); HRESULT GetShowFloatingStatus( [out] DWORD *pdwFlags); } [ object, uuid(18a4e900-e0ae-11d2-afdd-00105a2799b5), pointer_default(unique) ] interface ITfLangBarEventSink: IUnknown { HRESULT OnSetFocus( [in] DWORD dwThreadId); HRESULT OnThreadTerminate( [in] DWORD dwThreadId); HRESULT OnThreadItemChange( [in] DWORD dwThreadId); HRESULT OnModalInput( [in] DWORD dwThreadId, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam); HRESULT ShowFloating( [in] DWORD dwFlags); HRESULT GetItemFloatingRect( [in] DWORD dwThreadId, [in] REFGUID rguid, [out] RECT *prc); } ================================================ FILE: wine/windows/ctxtcall.idl ================================================ /* * Copyright (C) 2008 Louis Lenders * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; import "objidl.idl"; import "unknwn.idl"; typedef struct tagComCallData { DWORD dwDispid; DWORD dwReserved; void *pUserDefined; } ComCallData; /*************************************************************************** * IContextCallback */ [ local, object, uuid(000001da-0000-0000-c000-000000000046), pointer_default(unique) ] interface IContextCallback : IUnknown { typedef HRESULT (__stdcall *PFNCONTEXTCALL)(ComCallData *pParam); HRESULT ContextCallback( [in] PFNCONTEXTCALL pCallback, [in] ComCallData *pParam, [in] REFIID riid, [in] int iMethod, [in] IUnknown *pUnk); } ================================================ FILE: wine/windows/custcntl.h ================================================ /* * Copyright (C) 2002 Gyorgy 'Nog' Jeney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _INC_CUSTCNTL #define _INC_CUSTCNTL #ifdef __cplusplus extern "C" { #endif /* Size defs */ #define CCHCCCLASS 32 #define CCHCCDESC 32 #define CCHCCTEXT 256 /* Custom Control Style Structure */ typedef struct tagCCSYLEA { DWORD flStyle; DWORD flExtStyle; char szText[CCHCCTEXT]; LANGID lgid; WORD wReserved1; } CCSTYLEA, *LPCCSTYLEA; typedef struct tagCCSYLEW { DWORD flStyle; DWORD flExtStyle; WCHAR szText[CCHCCTEXT]; LANGID lgid; WORD wReserved1; } CCSTYLEW, *LPCCSTYLEW; #define CCSTYLE WINELIB_NAME_AW(CCSTYLE) #define LPCCSTYLE WINELIB_NAME_AW(LPCCSTYLE) typedef BOOL (CALLBACK *LPFNCCSTYLEA)(HWND, LPCCSTYLEA); typedef BOOL (CALLBACK *LPFNCCSTYLEW)(HWND, LPCCSTYLEW); #define LPFNCCSTYLE WINELIB_NAME_AW(LPFNCCSTYLE) typedef int (CALLBACK *LPFNCCSIZETOTEXTA)(DWORD, DWORD, HFONT, LPSTR); typedef int (CALLBACK *LPFNCCSIZETOTEXTW)(DWORD, DWORD, HFONT, LPWSTR); #define LPFNCCSIZETOTEXT WINELIB_NAME_AW(LPFNCCSIZETOTEXT) /* Custom Control style flags structure */ typedef struct tagCCSTYLEFLAGA { DWORD flStyle; DWORD flStyleMask; LPSTR pszStyle; } CCSTYLEFLAGA, *LPCCSTYLEFLAGA; typedef struct tagCCSTYLEFLAGW { DWORD flStyle; DWORD flStyleMask; LPWSTR pszStyle; } CCSTYLEFLAGW, *LPCCSTYLEFLAGW; #define CCSTYLEFLAG WINELIB_NAME_AW(CCSTYLEFLAG) /* Custom Control Flags */ #define CCF_NOTEXT 0x00000001 /* CustomControl info structure */ typedef struct tagCCINFOA { char szClass[CCHCCCLASS]; DWORD flOptions; char szDesc[CCHCCDESC]; UINT cxDefault; UINT cyDefault; DWORD flStyleDefault; DWORD flExtStyleDefault; DWORD flCtrlTypeMask; char szTextDefault[CCHCCTEXT]; int cStyleFlags; LPCCSTYLEFLAGA aStyleFlags; LPFNCCSTYLEA lpfnStyle; LPFNCCSIZETOTEXTA lpfnSizeToText; DWORD dwReserved1; DWORD dwReserved2; } CCINFOA, *LPCCINFOA; typedef struct tagCCINFOW { WCHAR szClass[CCHCCCLASS]; DWORD flOptions; WCHAR szDesc[CCHCCDESC]; UINT cxDefault; UINT cyDefault; DWORD flStyleDefault; DWORD flExtStyleDefault; DWORD flCtrlTypeMask; int cStyleFlags; LPCCSTYLEFLAGW aStyleFlags; WCHAR szTextDefault[CCHCCTEXT]; LPFNCCSTYLEW lpfnStyle; LPFNCCSIZETOTEXTW lpfnSizeToText; DWORD dwReserved1; DWORD dwReserved2; } CCINFOW, *LPCCINFOW; DECL_WINELIB_TYPE_AW(CCINFO) DECL_WINELIB_TYPE_AW(LPCCINFO) typedef UINT (CALLBACK *LPFNCCINFOA)(LPCCINFOA); typedef UINT (CALLBACK *LPFNCCINFOW)(LPCCINFOW); DECL_WINELIB_TYPE_AW(LPFNCCINFO) #ifdef __cplusplus } #endif #endif /* _INC_CUSTCNTL */ ================================================ FILE: wine/windows/cvconst.h ================================================ /* * File cvconst.h - MS debug information * * Copyright (C) 2004, Eric Pouech * Copyright (C) 2012, André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* information in this file is highly derived from MSDN DIA information pages */ /* symbols & types enumeration */ enum SymTagEnum { SymTagNull, SymTagExe, SymTagCompiland, SymTagCompilandDetails, SymTagCompilandEnv, SymTagFunction, SymTagBlock, SymTagData, SymTagAnnotation, SymTagLabel, SymTagPublicSymbol, SymTagUDT, SymTagEnum, SymTagFunctionType, SymTagPointerType, SymTagArrayType, SymTagBaseType, SymTagTypedef, SymTagBaseClass, SymTagFriend, SymTagFunctionArgType, SymTagFuncDebugStart, SymTagFuncDebugEnd, SymTagUsingNamespace, SymTagVTableShape, SymTagVTable, SymTagCustom, SymTagThunk, SymTagCustomType, SymTagManagedType, SymTagDimension, SymTagMax }; enum BasicType { btNoType = 0, btVoid = 1, btChar = 2, btWChar = 3, btInt = 6, btUInt = 7, btFloat = 8, btBCD = 9, btBool = 10, btLong = 13, btULong = 14, btCurrency = 25, btDate = 26, btVariant = 27, btComplex = 28, btBit = 29, btBSTR = 30, btHresult = 31, btChar16 = 32, btChar32 = 33 }; /* kind of UDT */ enum UdtKind { UdtStruct, UdtClass, UdtUnion }; /* where a SymTagData is */ enum LocationType { LocIsNull, LocIsStatic, LocIsTLS, LocIsRegRel, LocIsThisRel, LocIsEnregistered, LocIsBitField, LocIsSlot, LocIsIlRel, LocInMetaData, LocIsConstant }; /* kind of SymTagData */ enum DataKind { DataIsUnknown, DataIsLocal, DataIsStaticLocal, DataIsParam, DataIsObjectPtr, DataIsFileStatic, DataIsGlobal, DataIsMember, DataIsStaticMember, DataIsConstant }; /* values for registers (on different CPUs) */ enum CV_HREG_e { /* those values are common to all supported CPUs (and CPU independent) */ CV_ALLREG_ERR = 30000, CV_ALLREG_TEB = 30001, CV_ALLREG_TIMER = 30002, CV_ALLREG_EFAD1 = 30003, CV_ALLREG_EFAD2 = 30004, CV_ALLREG_EFAD3 = 30005, CV_ALLREG_VFRAME = 30006, CV_ALLREG_HANDLE = 30007, CV_ALLREG_PARAMS = 30008, CV_ALLREG_LOCALS = 30009, CV_ALLREG_TID = 30010, CV_ALLREG_ENV = 30011, CV_ALLREG_CMDLN = 30012, /* Intel x86 CPU */ CV_REG_NONE = 0, CV_REG_AL = 1, CV_REG_CL = 2, CV_REG_DL = 3, CV_REG_BL = 4, CV_REG_AH = 5, CV_REG_CH = 6, CV_REG_DH = 7, CV_REG_BH = 8, CV_REG_AX = 9, CV_REG_CX = 10, CV_REG_DX = 11, CV_REG_BX = 12, CV_REG_SP = 13, CV_REG_BP = 14, CV_REG_SI = 15, CV_REG_DI = 16, CV_REG_EAX = 17, CV_REG_ECX = 18, CV_REG_EDX = 19, CV_REG_EBX = 20, CV_REG_ESP = 21, CV_REG_EBP = 22, CV_REG_ESI = 23, CV_REG_EDI = 24, CV_REG_ES = 25, CV_REG_CS = 26, CV_REG_SS = 27, CV_REG_DS = 28, CV_REG_FS = 29, CV_REG_GS = 30, CV_REG_IP = 31, CV_REG_FLAGS = 32, CV_REG_EIP = 33, CV_REG_EFLAGS = 34, /* */ CV_REG_TEMP = 40, CV_REG_TEMPH = 41, CV_REG_QUOTE = 42, CV_REG_PCDR3 = 43, /* this includes PCDR4 to PCDR7 */ CV_REG_CR0 = 80, /* this includes CR1 to CR4 */ CV_REG_DR0 = 90, /* this includes DR1 to DR7 */ /* */ CV_REG_GDTR = 110, CV_REG_GDTL = 111, CV_REG_IDTR = 112, CV_REG_IDTL = 113, CV_REG_LDTR = 114, CV_REG_TR = 115, CV_REG_PSEUDO1 = 116, /* this includes Pseudo02 to Pseudo09 */ CV_REG_ST0 = 128, /* this includes ST1 to ST7 */ CV_REG_CTRL = 136, CV_REG_STAT = 137, CV_REG_TAG = 138, CV_REG_FPIP = 139, CV_REG_FPCS = 140, CV_REG_FPDO = 141, CV_REG_FPDS = 142, CV_REG_ISEM = 143, CV_REG_FPEIP = 144, CV_REG_FPEDO = 145, CV_REG_MM0 = 146, /* this includes MM1 to MM7 */ CV_REG_XMM0 = 154, /* this includes XMM1 to XMM7 */ CV_REG_XMM00 = 162, CV_REG_XMM0L = 194, /* this includes XMM1L to XMM7L */ CV_REG_XMM0H = 202, /* this includes XMM1H to XMM7H */ CV_REG_MXCSR = 211, CV_REG_EDXEAX = 212, CV_REG_EMM0L = 220, CV_REG_EMM0H = 228, CV_REG_MM00 = 236, CV_REG_MM01 = 237, CV_REG_MM10 = 238, CV_REG_MM11 = 239, CV_REG_MM20 = 240, CV_REG_MM21 = 241, CV_REG_MM30 = 242, CV_REG_MM31 = 243, CV_REG_MM40 = 244, CV_REG_MM41 = 245, CV_REG_MM50 = 246, CV_REG_MM51 = 247, CV_REG_MM60 = 248, CV_REG_MM61 = 249, CV_REG_MM70 = 250, CV_REG_MM71 = 251, CV_REG_YMM0 = 252, /* this includes YMM1 to YMM7 */ CV_REG_YMM0H = 260, /* this includes YMM1H to YMM7H */ CV_REG_YMM0I0 = 268, /* this includes YMM0I1 to YMM0I3 */ CV_REG_YMM1I0 = 272, /* this includes YMM1I1 to YMM1I3 */ CV_REG_YMM2I0 = 276, /* this includes YMM2I1 to YMM2I3 */ CV_REG_YMM3I0 = 280, /* this includes YMM3I1 to YMM3I3 */ CV_REG_YMM4I0 = 284, /* this includes YMM4I1 to YMM4I3 */ CV_REG_YMM5I0 = 288, /* this includes YMM5I1 to YMM5I3 */ CV_REG_YMM6I0 = 292, /* this includes YMM6I1 to YMM6I3 */ CV_REG_YMM7I0 = 296, /* this includes YMM7I1 to YMM7I3 */ CV_REG_YMM0F0 = 300, /* this includes YMM0F1 to YMM0F7 */ CV_REG_YMM1F0 = 308, /* this includes YMM1F1 to YMM1F7 */ CV_REG_YMM2F0 = 316, /* this includes YMM2F1 to YMM2F7 */ CV_REG_YMM3F0 = 324, /* this includes YMM3F1 to YMM3F7 */ CV_REG_YMM4F0 = 332, /* this includes YMM4F1 to YMM4F7 */ CV_REG_YMM5F0 = 340, /* this includes YMM5F1 to YMM5F7 */ CV_REG_YMM6F0 = 348, /* this includes YMM6F1 to YMM6F7 */ CV_REG_YMM7F0 = 356, /* this includes YMM7F1 to YMM7F7 */ CV_REG_YMM0D0 = 364, /* this includes YMM0D1 to YMM0D3 */ CV_REG_YMM1D0 = 368, /* this includes YMM1D1 to YMM1D3 */ CV_REG_YMM2D0 = 372, /* this includes YMM2D1 to YMM2D3 */ CV_REG_YMM3D0 = 376, /* this includes YMM3D1 to YMM3D3 */ CV_REG_YMM4D0 = 380, /* this includes YMM4D1 to YMM4D3 */ CV_REG_YMM5D0 = 384, /* this includes YMM5D1 to YMM5D3 */ CV_REG_YMM6D0 = 388, /* this includes YMM6D1 to YMM6D3 */ CV_REG_YMM7D0 = 392, /* this includes YMM7D1 to YMM7D3 */ /* Motorola 68K CPU */ CV_R68_D0 = 0, /* this includes D1 to D7 too */ CV_R68_A0 = 8, /* this includes A1 to A7 too */ CV_R68_CCR = 16, CV_R68_SR = 17, CV_R68_USP = 18, CV_R68_MSP = 19, CV_R68_SFC = 20, CV_R68_DFC = 21, CV_R68_CACR = 22, CV_R68_VBR = 23, CV_R68_CAAR = 24, CV_R68_ISP = 25, CV_R68_PC = 26, CV_R68_FPCR = 28, CV_R68_FPSR = 29, CV_R68_FPIAR = 30, CV_R68_FP0 = 32, /* this includes FP1 to FP7 */ CV_R68_MMUSR030 = 41, CV_R68_MMUSR = 42, CV_R68_URP = 43, CV_R68_DTT0 = 44, CV_R68_DTT1 = 45, CV_R68_ITT0 = 46, CV_R68_ITT1 = 47, CV_R68_PSR = 51, CV_R68_PCSR = 52, CV_R68_VAL = 53, CV_R68_CRP = 54, CV_R68_SRP = 55, CV_R68_DRP = 56, CV_R68_TC = 57, CV_R68_AC = 58, CV_R68_SCC = 59, CV_R68_CAL = 60, CV_R68_TT0 = 61, CV_R68_TT1 = 62, CV_R68_BAD0 = 64, /* this includes BAD1 to BAD7 */ CV_R68_BAC0 = 72, /* this includes BAC1 to BAC7 */ /* MIPS 4000 CPU */ CV_M4_NOREG = CV_REG_NONE, CV_M4_IntZERO = 10, CV_M4_IntAT = 11, CV_M4_IntV0 = 12, CV_M4_IntV1 = 13, CV_M4_IntA0 = 14, /* this includes IntA1 to IntA3 */ CV_M4_IntT0 = 18, /* this includes IntT1 to IntT7 */ CV_M4_IntS0 = 26, /* this includes IntS1 to IntS7 */ CV_M4_IntT8 = 34, CV_M4_IntT9 = 35, CV_M4_IntKT0 = 36, CV_M4_IntKT1 = 37, CV_M4_IntGP = 38, CV_M4_IntSP = 39, CV_M4_IntS8 = 40, CV_M4_IntRA = 41, CV_M4_IntLO = 42, CV_M4_IntHI = 43, CV_M4_Fir = 50, CV_M4_Psr = 51, CV_M4_FltF0 = 60, /* this includes FltF1 to Flt31 */ CV_M4_FltFsr = 92, /* Alpha AXP CPU */ CV_ALPHA_NOREG = CV_REG_NONE, CV_ALPHA_FltF0 = 10, /* this includes FltF1 to FltF31 */ CV_ALPHA_IntV0 = 42, CV_ALPHA_IntT0 = 43, /* this includes T1 to T7 */ CV_ALPHA_IntS0 = 51, /* this includes S1 to S5 */ CV_ALPHA_IntFP = 57, CV_ALPHA_IntA0 = 58, /* this includes A1 to A5 */ CV_ALPHA_IntT8 = 64, CV_ALPHA_IntT9 = 65, CV_ALPHA_IntT10 = 66, CV_ALPHA_IntT11 = 67, CV_ALPHA_IntRA = 68, CV_ALPHA_IntT12 = 69, CV_ALPHA_IntAT = 70, CV_ALPHA_IntGP = 71, CV_ALPHA_IntSP = 72, CV_ALPHA_IntZERO = 73, CV_ALPHA_Fpcr = 74, CV_ALPHA_Fir = 75, CV_ALPHA_Psr = 76, CV_ALPHA_FltFsr = 77, CV_ALPHA_SoftFpcr = 78, /* Motorola & IBM PowerPC CPU */ CV_PPC_GPR0 = 1, /* this includes GPR1 to GPR31 */ CV_PPC_CR = 33, CV_PPC_CR0 = 34, /* this includes CR1 to CR7 */ CV_PPC_FPR0 = 42, /* this includes FPR1 to FPR31 */ CV_PPC_FPSCR = 74, CV_PPC_MSR = 75, CV_PPC_SR0 = 76, /* this includes SR1 to SR15 */ CV_PPC_PC = 99, CV_PPC_MQ = 100, CV_PPC_XER = 101, CV_PPC_RTCU = 104, CV_PPC_RTCL = 105, CV_PPC_LR = 108, CV_PPC_CTR = 109, CV_PPC_COMPARE = 110, CV_PPC_COUNT = 111, CV_PPC_DSISR = 118, CV_PPC_DAR = 119, CV_PPC_DEC = 122, CV_PPC_SDR1 = 125, CV_PPC_SRR0 = 126, CV_PPC_SRR1 = 127, CV_PPC_SPRG0 = 372, /* this includes SPRG1 to SPRG3 */ CV_PPC_ASR = 280, CV_PPC_EAR = 382, CV_PPC_PVR = 287, CV_PPC_BAT0U = 628, CV_PPC_BAT0L = 629, CV_PPC_BAT1U = 630, CV_PPC_BAT1L = 631, CV_PPC_BAT2U = 632, CV_PPC_BAT2L = 633, CV_PPC_BAT3U = 634, CV_PPC_BAT3L = 635, CV_PPC_DBAT0U = 636, CV_PPC_DBAT0L = 637, CV_PPC_DBAT1U = 638, CV_PPC_DBAT1L = 639, CV_PPC_DBAT2U = 640, CV_PPC_DBAT2L = 641, CV_PPC_DBAT3U = 642, CV_PPC_DBAT3L = 643, CV_PPC_PMR0 = 1044, /* this includes PMR1 to PMR15 */ CV_PPC_DMISS = 1076, CV_PPC_DCMP = 1077, CV_PPC_HASH1 = 1078, CV_PPC_HASH2 = 1079, CV_PPC_IMISS = 1080, CV_PPC_ICMP = 1081, CV_PPC_RPA = 1082, CV_PPC_HID0 = 1108, /* this includes HID1 to HID15 */ /* Java */ CV_JAVA_PC = 1, /* Hitachi SH3 CPU */ CV_SH3_NOREG = CV_REG_NONE, CV_SH3_IntR0 = 10, /* this include R1 to R13 */ CV_SH3_IntFp = 24, CV_SH3_IntSp = 25, CV_SH3_Gbr = 38, CV_SH3_Pr = 39, CV_SH3_Mach = 40, CV_SH3_Macl = 41, CV_SH3_Pc = 50, CV_SH3_Sr = 51, CV_SH3_BarA = 60, CV_SH3_BasrA = 61, CV_SH3_BamrA = 62, CV_SH3_BbrA = 63, CV_SH3_BarB = 64, CV_SH3_BasrB = 65, CV_SH3_BamrB = 66, CV_SH3_BbrB = 67, CV_SH3_BdrB = 68, CV_SH3_BdmrB = 69, CV_SH3_Brcr = 70, CV_SH_Fpscr = 75, CV_SH_Fpul = 76, CV_SH_FpR0 = 80, /* this includes FpR1 to FpR15 */ CV_SH_XFpR0 = 96, /* this includes XFpR1 to XXFpR15 */ /* ARM CPU */ CV_ARM_NOREG = CV_REG_NONE, CV_ARM_R0 = 10, /* this includes R1 to R12 */ CV_ARM_SP = 23, CV_ARM_LR = 24, CV_ARM_PC = 25, CV_ARM_CPSR = 26, CV_ARM_ACC0 = 27, CV_ARM_FPSCR = 40, CV_ARM_FPEXC = 41, CV_ARM_FS0 = 50, /* this includes FS1 to FS31 */ CV_ARM_FPEXTRA0 = 90, /* this includes FPEXTRA1 to FPEXTRA7 */ CV_ARM_WR0 = 128, /* this includes WR1 to WR15 */ CV_ARM_WCID = 144, CV_ARM_WCON = 145, CV_ARM_WCSSF = 146, CV_ARM_WCASF = 147, CV_ARM_WC4 = 148, CV_ARM_WC5 = 149, CV_ARM_WC6 = 150, CV_ARM_WC7 = 151, CV_ARM_WCGR0 = 152, /* this includes WCGR1 to WCGR3 */ CV_ARM_WC12 = 156, CV_ARM_WC13 = 157, CV_ARM_WC14 = 158, CV_ARM_WC15 = 159, CV_ARM_FS32 = 200, /* this includes FS33 to FS63 */ CV_ARM_ND0 = 300, /* this includes ND1 to ND31 */ CV_ARM_NQ0 = 400, /* this includes NQ1 to NQ15 */ /* ARM64 CPU */ CV_ARM64_NOREG = CV_REG_NONE, CV_ARM64_W0 = 10, /* this includes W0 to W30 */ CV_ARM64_WZR = 41, CV_ARM64_PC = 42, /* Wine extension */ CV_ARM64_PSTATE = 43, /* Wine extension */ CV_ARM64_X0 = 50, /* this includes X0 to X28 */ CV_ARM64_IP0 = 66, /* Same as X16 */ CV_ARM64_IP1 = 67, /* Same as X17 */ CV_ARM64_FP = 79, CV_ARM64_LR = 80, CV_ARM64_SP = 81, CV_ARM64_ZR = 82, CV_ARM64_NZCV = 90, CV_ARM64_S0 = 100, /* this includes S0 to S31 */ CV_ARM64_D0 = 140, /* this includes D0 to D31 */ CV_ARM64_Q0 = 180, /* this includes Q0 to Q31 */ CV_ARM64_FPSR = 220, /* Intel IA64 CPU */ CV_IA64_NOREG = CV_REG_NONE, CV_IA64_Br0 = 512, /* this includes Br1 to Br7 */ CV_IA64_P0 = 704, /* this includes P1 to P63 */ CV_IA64_Preds = 768, CV_IA64_IntH0 = 832, /* this includes H1 to H15 */ CV_IA64_Ip = 1016, CV_IA64_Umask = 1017, CV_IA64_Cfm = 1018, CV_IA64_Psr = 1019, CV_IA64_Nats = 1020, CV_IA64_Nats2 = 1021, CV_IA64_Nats3 = 1022, CV_IA64_IntR0 = 1024, /* this includes R1 to R127 */ CV_IA64_FltF0 = 2048, /* this includes FltF1 to FltF127 */ /* some IA64 registers missing */ /* TriCore CPU */ CV_TRI_NOREG = CV_REG_NONE, CV_TRI_D0 = 10, /* includes D1 to D15 */ CV_TRI_A0 = 26, /* includes A1 to A15 */ CV_TRI_E0 = 42, CV_TRI_E2 = 43, CV_TRI_E4 = 44, CV_TRI_E6 = 45, CV_TRI_E8 = 46, CV_TRI_E10 = 47, CV_TRI_E12 = 48, CV_TRI_E14 = 49, CV_TRI_EA0 = 50, CV_TRI_EA2 = 51, CV_TRI_EA4 = 52, CV_TRI_EA6 = 53, CV_TRI_EA8 = 54, CV_TRI_EA10 = 55, CV_TRI_EA12 = 56, CV_TRI_EA14 = 57, CV_TRI_PSW = 58, CV_TRI_PCXI = 59, CV_TRI_PC = 60, CV_TRI_FCX = 61, CV_TRI_LCX = 62, CV_TRI_ISP = 63, CV_TRI_ICR = 64, CV_TRI_BIV = 65, CV_TRI_BTV = 66, CV_TRI_SYSCON = 67, CV_TRI_DPRx_0 = 68, /* includes DPRx_1 to DPRx_3 */ CV_TRI_CPRx_0 = 68, /* includes CPRx_1 to CPRx_3 */ CV_TRI_DPMx_0 = 68, /* includes DPMx_1 to DPMx_3 */ CV_TRI_CPMx_0 = 68, /* includes CPMx_1 to CPMx_3 */ CV_TRI_DBGSSR = 72, CV_TRI_EXEVT = 73, CV_TRI_SWEVT = 74, CV_TRI_CREVT = 75, CV_TRI_TRnEVT = 76, CV_TRI_MMUCON = 77, CV_TRI_ASI = 78, CV_TRI_TVA = 79, CV_TRI_TPA = 80, CV_TRI_TPX = 81, CV_TRI_TFA = 82, /* AM33 (and the likes) CPU */ CV_AM33_NOREG = CV_REG_NONE, CV_AM33_E0 = 10, /* this includes E1 to E7 */ CV_AM33_A0 = 20, /* this includes A1 to A3 */ CV_AM33_D0 = 30, /* this includes D1 to D3 */ CV_AM33_FS0 = 40, /* this includes FS1 to FS31 */ CV_AM33_SP = 80, CV_AM33_PC = 81, CV_AM33_MDR = 82, CV_AM33_MDRQ = 83, CV_AM33_MCRH = 84, CV_AM33_MCRL = 85, CV_AM33_MCVF = 86, CV_AM33_EPSW = 87, CV_AM33_FPCR = 88, CV_AM33_LIR = 89, CV_AM33_LAR = 90, /* Mitsubishi M32R CPU */ CV_M32R_NOREG = CV_REG_NONE, CV_M32R_R0 = 10, /* this includes R1 to R11 */ CV_M32R_R12 = 22, CV_M32R_R13 = 23, CV_M32R_R14 = 24, CV_M32R_R15 = 25, CV_M32R_PSW = 26, CV_M32R_CBR = 27, CV_M32R_SPI = 28, CV_M32R_SPU = 29, CV_M32R_SPO = 30, CV_M32R_BPC = 31, CV_M32R_ACHI = 32, CV_M32R_ACLO = 33, CV_M32R_PC = 34, /* AMD/Intel x86_64 CPU */ CV_AMD64_NONE = CV_REG_NONE, CV_AMD64_AL = CV_REG_AL, CV_AMD64_CL = CV_REG_CL, CV_AMD64_DL = CV_REG_DL, CV_AMD64_BL = CV_REG_BL, CV_AMD64_AH = CV_REG_AH, CV_AMD64_CH = CV_REG_CH, CV_AMD64_DH = CV_REG_DH, CV_AMD64_BH = CV_REG_BH, CV_AMD64_AX = CV_REG_AX, CV_AMD64_CX = CV_REG_CX, CV_AMD64_DX = CV_REG_DX, CV_AMD64_BX = CV_REG_BX, CV_AMD64_SP = CV_REG_SP, CV_AMD64_BP = CV_REG_BP, CV_AMD64_SI = CV_REG_SI, CV_AMD64_DI = CV_REG_DI, CV_AMD64_EAX = CV_REG_EAX, CV_AMD64_ECX = CV_REG_ECX, CV_AMD64_EDX = CV_REG_EDX, CV_AMD64_EBX = CV_REG_EBX, CV_AMD64_ESP = CV_REG_ESP, CV_AMD64_EBP = CV_REG_EBP, CV_AMD64_ESI = CV_REG_ESI, CV_AMD64_EDI = CV_REG_EDI, CV_AMD64_ES = CV_REG_ES, CV_AMD64_CS = CV_REG_CS, CV_AMD64_SS = CV_REG_SS, CV_AMD64_DS = CV_REG_DS, CV_AMD64_FS = CV_REG_FS, CV_AMD64_GS = CV_REG_GS, CV_AMD64_FLAGS = CV_REG_FLAGS, CV_AMD64_RIP = CV_REG_EIP, CV_AMD64_EFLAGS = CV_REG_EFLAGS, /* */ CV_AMD64_TEMP = CV_REG_TEMP, CV_AMD64_TEMPH = CV_REG_TEMPH, CV_AMD64_QUOTE = CV_REG_QUOTE, CV_AMD64_PCDR3 = CV_REG_PCDR3, /* this includes PCDR4 to PCDR7 */ CV_AMD64_CR0 = CV_REG_CR0, /* this includes CR1 to CR4 */ CV_AMD64_DR0 = CV_REG_DR0, /* this includes DR1 to DR7 */ /* */ CV_AMD64_GDTR = CV_REG_GDTR, CV_AMD64_GDTL = CV_REG_GDTL, CV_AMD64_IDTR = CV_REG_IDTR, CV_AMD64_IDTL = CV_REG_IDTL, CV_AMD64_LDTR = CV_REG_LDTR, CV_AMD64_TR = CV_REG_TR, CV_AMD64_PSEUDO1 = CV_REG_PSEUDO1, /* this includes Pseudo02 to Pseudo09 */ CV_AMD64_ST0 = CV_REG_ST0, /* this includes ST1 to ST7 */ CV_AMD64_CTRL = CV_REG_CTRL, CV_AMD64_STAT = CV_REG_STAT, CV_AMD64_TAG = CV_REG_TAG, CV_AMD64_FPIP = CV_REG_FPIP, CV_AMD64_FPCS = CV_REG_FPCS, CV_AMD64_FPDO = CV_REG_FPDO, CV_AMD64_FPDS = CV_REG_FPDS, CV_AMD64_ISEM = CV_REG_ISEM, CV_AMD64_FPEIP = CV_REG_FPEIP, CV_AMD64_FPEDO = CV_REG_FPEDO, CV_AMD64_MM0 = CV_REG_MM0, /* this includes MM1 to MM7 */ CV_AMD64_XMM0 = CV_REG_XMM0, /* this includes XMM1 to XMM7 */ CV_AMD64_XMM00 = CV_REG_XMM00, CV_AMD64_XMM0L = CV_REG_XMM0L, /* this includes XMM1L to XMM7L */ CV_AMD64_XMM0H = CV_REG_XMM0H, /* this includes XMM1H to XMM7H */ CV_AMD64_MXCSR = CV_REG_MXCSR, CV_AMD64_EDXEAX = CV_REG_EDXEAX, CV_AMD64_EMM0L = CV_REG_EMM0L, CV_AMD64_EMM0H = CV_REG_EMM0H, CV_AMD64_MM00 = CV_REG_MM00, CV_AMD64_MM01 = CV_REG_MM01, CV_AMD64_MM10 = CV_REG_MM10, CV_AMD64_MM11 = CV_REG_MM11, CV_AMD64_MM20 = CV_REG_MM20, CV_AMD64_MM21 = CV_REG_MM21, CV_AMD64_MM30 = CV_REG_MM30, CV_AMD64_MM31 = CV_REG_MM31, CV_AMD64_MM40 = CV_REG_MM40, CV_AMD64_MM41 = CV_REG_MM41, CV_AMD64_MM50 = CV_REG_MM50, CV_AMD64_MM51 = CV_REG_MM51, CV_AMD64_MM60 = CV_REG_MM60, CV_AMD64_MM61 = CV_REG_MM61, CV_AMD64_MM70 = CV_REG_MM70, CV_AMD64_MM71 = CV_REG_MM71, CV_AMD64_XMM8 = 252, /* this includes XMM9 to XMM15 */ CV_AMD64_RAX = 328, CV_AMD64_RBX = 329, CV_AMD64_RCX = 330, CV_AMD64_RDX = 331, CV_AMD64_RSI = 332, CV_AMD64_RDI = 333, CV_AMD64_RBP = 334, CV_AMD64_RSP = 335, CV_AMD64_R8 = 336, CV_AMD64_R9 = 337, CV_AMD64_R10 = 338, CV_AMD64_R11 = 339, CV_AMD64_R12 = 340, CV_AMD64_R13 = 341, CV_AMD64_R14 = 342, CV_AMD64_R15 = 343, }; typedef enum { THUNK_ORDINAL_NOTYPE, THUNK_ORDINAL_ADJUSTOR, THUNK_ORDINAL_VCALL, THUNK_ORDINAL_PCODE, THUNK_ORDINAL_LOAD } THUNK_ORDINAL; typedef enum CV_call_e { CV_CALL_NEAR_C, CV_CALL_FAR_C, CV_CALL_NEAR_PASCAL, CV_CALL_FAR_PASCAL, CV_CALL_NEAR_FAST, CV_CALL_FAR_FAST, CV_CALL_SKIPPED, CV_CALL_NEAR_STD, CV_CALL_FAR_STD, CV_CALL_NEAR_SYS, CV_CALL_FAR_SYS, CV_CALL_THISCALL, CV_CALL_MIPSCALL, CV_CALL_GENERIC, CV_CALL_ALPHACALL, CV_CALL_PPCCALL, CV_CALL_SHCALL, CV_CALL_ARMCALL, CV_CALL_AM33CALL, CV_CALL_TRICALL, CV_CALL_SH5CALL, CV_CALL_M32RCALL, CV_CALL_RESERVED, } CV_call_e; ================================================ FILE: wine/windows/d2d1.idl ================================================ /* * Copyright 2013 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "dcommon.idl"; import "d2dbasetypes.h"; import "d3d10_1.idl"; import "d2derr.h"; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef DrawText") cpp_quote("#endif") interface ID2D1Factory; interface ID2D1RenderTarget; interface ID2D1BitmapRenderTarget; interface ID2D1Geometry; interface ID2D1Brush; interface IDWriteRenderingParams; interface IDWriteTextFormat; interface IDWriteTextLayout; interface IWICBitmapSource; interface IWICBitmap; cpp_quote("#ifndef __dwrite_h__") /* already defined in dwrite.h but needed for WIDL */ typedef struct DWRITE_GLYPH_RUN DWRITE_GLYPH_RUN; cpp_quote("#endif /* __dwrite_h__ */") typedef D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F; typedef D2D_RECT_F D2D1_RECT_F; typedef D2D_SIZE_F D2D1_SIZE_F; typedef UINT64 D2D1_TAG; typedef D2D_POINT_2U D2D1_POINT_2U; typedef D2D_RECT_U D2D1_RECT_U; typedef D2D_COLOR_F D2D1_COLOR_F; cpp_quote("#define D2D1_DEFAULT_FLATTENING_TOLERANCE (0.25f)") enum { D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR = 0, D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR = 1, D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC = 2, D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR = 3, D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC = 4, D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC = 5, D2D1_INTERPOLATION_MODE_DEFINITION_FANT = 6, D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR = 7, }; typedef enum D2D1_DEBUG_LEVEL { D2D1_DEBUG_LEVEL_NONE = 0, D2D1_DEBUG_LEVEL_ERROR = 1, D2D1_DEBUG_LEVEL_WARNING = 2, D2D1_DEBUG_LEVEL_INFORMATION = 3, D2D1_DEBUG_LEVEL_FORCE_DWORD = 0xffffffff, } D2D1_DEBUG_LEVEL; typedef enum D2D1_FACTORY_TYPE { D2D1_FACTORY_TYPE_SINGLE_THREADED = 0, D2D1_FACTORY_TYPE_MULTI_THREADED = 1, D2D1_FACTORY_TYPE_FORCE_DWORD = 0xfffffff, } D2D1_FACTORY_TYPE; typedef enum D2D1_FILL_MODE { D2D1_FILL_MODE_ALTERNATE = 0, D2D1_FILL_MODE_WINDING = 1, D2D1_FILL_MODE_FORCE_DWORD = 0xffffffff } D2D1_FILL_MODE; typedef enum D2D1_PATH_SEGMENT { D2D1_PATH_SEGMENT_NONE = 0, D2D1_PATH_SEGMENT_FORCE_UNSTROKED = 1, D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN = 2, D2D1_PATH_SEGMENT_FORCE_DWORD = 0xffffffff } D2D1_PATH_SEGMENT; typedef enum D2D1_FIGURE_BEGIN { D2D1_FIGURE_BEGIN_FILLED = 0, D2D1_FIGURE_BEGIN_HOLLOW = 1, D2D1_FIGURE_BEGIN_FORCE_DWORD = 0xffffffff } D2D1_FIGURE_BEGIN; typedef enum D2D1_FIGURE_END { D2D1_FIGURE_END_OPEN = 0, D2D1_FIGURE_END_CLOSED = 1, D2D1_FIGURE_END_FORCE_DWORD = 0xffffffff } D2D1_FIGURE_END; typedef enum D2D1_CAP_STYLE { D2D1_CAP_STYLE_FLAT = 0, D2D1_CAP_STYLE_SQUARE = 1, D2D1_CAP_STYLE_ROUND = 2, D2D1_CAP_STYLE_TRIANGLE = 3, D2D1_CAP_STYLE_FORCE_DWORD = 0xffffffff, } D2D1_CAP_STYLE; typedef enum D2D1_LINE_JOIN { D2D1_LINE_JOIN_MITER = 0, D2D1_LINE_JOIN_BEVEL = 1, D2D1_LINE_JOIN_ROUND = 2, D2D1_LINE_JOIN_MITER_OR_BEVEL = 3, D2D1_LINE_JOIN_FORCE_DWORD = 0xffffffff, } D2D1_LINE_JOIN; typedef enum D2D1_DASH_STYLE { D2D1_DASH_STYLE_SOLID = 0, D2D1_DASH_STYLE_DASH = 1, D2D1_DASH_STYLE_DOT = 2, D2D1_DASH_STYLE_DASH_DOT = 3, D2D1_DASH_STYLE_DASH_DOT_DOT = 4, D2D1_DASH_STYLE_CUSTOM = 5, D2D1_DASH_STYLE_FORCE_DWORD = 0xffffffff, } D2D1_DASH_STYLE; typedef enum D2D1_GEOMETRY_RELATION { D2D1_GEOMETRY_RELATION_UNKNOWN = 0, D2D1_GEOMETRY_RELATION_DISJOINT = 1, D2D1_GEOMETRY_RELATION_IS_CONTAINED = 2, D2D1_GEOMETRY_RELATION_CONTAINS = 3, D2D1_GEOMETRY_RELATION_OVERLAP = 4, D2D1_GEOMETRY_RELATION_FORCE_DWORD = 0xffffffff, } D2D1_GEOMETRY_RELATION; typedef enum D2D1_GEOMETRY_SIMPLIFICATION_OPTION { D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES = 0, D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES = 1, D2D1_GEOMETRY_SIMPLIFICATION_OPTION_FORCE_DWORD = 0xffffffff, } D2D1_GEOMETRY_SIMPLIFICATION_OPTION; typedef enum D2D1_COMBINE_MODE { D2D1_COMBINE_MODE_UNION = 0, D2D1_COMBINE_MODE_INTERSECT = 1, D2D1_COMBINE_MODE_XOR = 2, D2D1_COMBINE_MODE_EXCLUDE = 3, D2D1_COMBINE_MODE_FORCE_DWORD = 0xffffffff, } D2D1_COMBINE_MODE; typedef enum D2D1_SWEEP_DIRECTION { D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE = 0, D2D1_SWEEP_DIRECTION_CLOCKWISE = 1, D2D1_SWEEP_DIRECTION_FORCE_DWORD = 0xffffffff, } D2D1_SWEEP_DIRECTION; typedef enum D2D1_ARC_SIZE { D2D1_ARC_SIZE_SMALL = 0, D2D1_ARC_SIZE_LARGE = 1, D2D1_ARC_SIZE_FORCE_DWORD = 0xffffffff, } D2D1_ARC_SIZE; typedef enum D2D1_ANTIALIAS_MODE { D2D1_ANTIALIAS_MODE_PER_PRIMITIVE = 0, D2D1_ANTIALIAS_MODE_ALIASED = 1, D2D1_ANTIALIAS_MODE_FORCE_DWORD = 0xffffffff, } D2D1_ANTIALIAS_MODE; typedef enum D2D1_TEXT_ANTIALIAS_MODE { D2D1_TEXT_ANTIALIAS_MODE_DEFAULT = 0, D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE = 1, D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE = 2, D2D1_TEXT_ANTIALIAS_MODE_ALIASED = 3, D2D1_TEXT_ANTIALIAS_MODE_FORCE_DWORD = 0xffffffff, } D2D1_TEXT_ANTIALIAS_MODE; typedef enum D2D1_EXTEND_MODE { D2D1_EXTEND_MODE_CLAMP = 0, D2D1_EXTEND_MODE_WRAP = 1, D2D1_EXTEND_MODE_MIRROR = 2, D2D1_EXTEND_MODE_FORCE_DWORD = 0xffffffff, } D2D1_EXTEND_MODE; typedef enum D2D1_BITMAP_INTERPOLATION_MODE { D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR, D2D1_BITMAP_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR, D2D1_BITMAP_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff, } D2D1_BITMAP_INTERPOLATION_MODE; typedef enum D2D1_GAMMA { D2D1_GAMMA_2_2 = 0, D2D1_GAMMA_1_0 = 1, D2D1_GAMMA_FORCE_DWORD = 0xffffffff, } D2D1_GAMMA; typedef enum D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS { D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE = 0x00000000, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE = 0x00000001, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS; typedef enum D2D1_OPACITY_MASK_CONTENT { D2D1_OPACITY_MASK_CONTENT_GRAPHICS = 0, D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL = 1, D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE = 2, D2D1_OPACITY_MASK_CONTENT_FORCE_DWORD = 0xffffffff, } D2D1_OPACITY_MASK_CONTENT; typedef enum D2D1_DRAW_TEXT_OPTIONS { D2D1_DRAW_TEXT_OPTIONS_NO_SNAP = 0x00000001, D2D1_DRAW_TEXT_OPTIONS_CLIP = 0x00000002, D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT = 0x00000004, D2D1_DRAW_TEXT_OPTIONS_DISABLE_COLOR_BITMAP_SNAPPING = 0x00000008, D2D1_DRAW_TEXT_OPTIONS_NONE = 0x00000000, D2D1_DRAW_TEXT_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_DRAW_TEXT_OPTIONS; typedef enum D2D1_LAYER_OPTIONS { D2D1_LAYER_OPTIONS_NONE = 0x00000000, D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE = 0x00000001, D2D1_LAYER_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_LAYER_OPTIONS; typedef enum D2D1_RENDER_TARGET_TYPE { D2D1_RENDER_TARGET_TYPE_DEFAULT = 0, D2D1_RENDER_TARGET_TYPE_SOFTWARE = 1, D2D1_RENDER_TARGET_TYPE_HARDWARE = 2, D2D1_RENDER_TARGET_TYPE_FORCE_DWORD = 0xffffffff, } D2D1_RENDER_TARGET_TYPE; typedef enum D2D1_RENDER_TARGET_USAGE { D2D1_RENDER_TARGET_USAGE_NONE = 0x00000000, D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING = 0x00000001, D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE = 0x00000002, D2D1_RENDER_TARGET_USAGE_FORCE_DWORD = 0xffffffff, } D2D1_RENDER_TARGET_USAGE; typedef enum D2D1_FEATURE_LEVEL { D2D1_FEATURE_LEVEL_DEFAULT = 0, D2D1_FEATURE_LEVEL_9 = D3D_FEATURE_LEVEL_9_1, D2D1_FEATURE_LEVEL_10 = D3D_FEATURE_LEVEL_10_0, D2D1_FEATURE_LEVEL_FORCE_DWORD = 0xffffffff, } D2D1_FEATURE_LEVEL; typedef enum D2D1_WINDOW_STATE { D2D1_WINDOW_STATE_NONE = 0x0000000, D2D1_WINDOW_STATE_OCCLUDED = 0x0000001, D2D1_WINDOW_STATE_FORCE_DWORD = 0xffffffff, } D2D1_WINDOW_STATE; typedef enum D2D1_DC_INITIALIZE_MODE { D2D1_DC_INITIALIZE_MODE_COPY = 0, D2D1_DC_INITIALIZE_MODE_CLEAR = 1, D2D1_DC_INITIALIZE_MODE_FORCE_DWORD = 0xffffffff, } D2D1_DC_INITIALIZE_MODE; typedef enum D2D1_PRESENT_OPTIONS { D2D1_PRESENT_OPTIONS_NONE = 0x00000000, D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS = 0x00000001, D2D1_PRESENT_OPTIONS_IMMEDIATELY = 0x00000002, D2D1_PRESENT_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_PRESENT_OPTIONS; typedef struct D2D1_BEZIER_SEGMENT { D2D1_POINT_2F point1; D2D1_POINT_2F point2; D2D1_POINT_2F point3; } D2D1_BEZIER_SEGMENT; typedef struct D2D1_FACTORY_OPTIONS { D2D1_DEBUG_LEVEL debugLevel; } D2D1_FACTORY_OPTIONS; typedef struct D2D1_TRIANGLE { D2D1_POINT_2F point1; D2D1_POINT_2F point2; D2D1_POINT_2F point3; } D2D1_TRIANGLE; typedef struct D2D1_ROUNDED_RECT { D2D1_RECT_F rect; float radiusX; float radiusY; } D2D1_ROUNDED_RECT; typedef struct D2D1_ELLIPSE { D2D1_POINT_2F point; float radiusX; float radiusY; } D2D1_ELLIPSE; typedef struct D2D1_QUADRATIC_BEZIER_SEGMENT { D2D1_POINT_2F point1; D2D1_POINT_2F point2; } D2D1_QUADRATIC_BEZIER_SEGMENT; typedef struct D2D1_ARC_SEGMENT { D2D1_POINT_2F point; D2D1_SIZE_F size; float rotationAngle; D2D1_SWEEP_DIRECTION sweepDirection; D2D1_ARC_SIZE arcSize; } D2D1_ARC_SEGMENT; typedef struct D2D1_DRAWING_STATE_DESCRIPTION { D2D1_ANTIALIAS_MODE antialiasMode; D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode; D2D1_TAG tag1; D2D1_TAG tag2; D2D1_MATRIX_3X2_F transform; } D2D1_DRAWING_STATE_DESCRIPTION; typedef struct D2D1_GRADIENT_STOP { float position; D2D1_COLOR_F color; } D2D1_GRADIENT_STOP; typedef struct D2D1_BITMAP_PROPERTIES { D2D1_PIXEL_FORMAT pixelFormat; float dpiX; float dpiY; } D2D1_BITMAP_PROPERTIES; typedef struct D2D1_BITMAP_BRUSH_PROPERTIES { D2D1_EXTEND_MODE extendModeX; D2D1_EXTEND_MODE extendModeY; D2D1_BITMAP_INTERPOLATION_MODE interpolationMode; } D2D1_BITMAP_BRUSH_PROPERTIES; typedef struct D2D1_BRUSH_PROPERTIES { float opacity; D2D1_MATRIX_3X2_F transform; } D2D1_BRUSH_PROPERTIES; typedef struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES { D2D1_POINT_2F startPoint; D2D1_POINT_2F endPoint; } D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES; typedef struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES { D2D1_POINT_2F center; D2D1_POINT_2F gradientOriginOffset; float radiusX; float radiusY; } D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES; typedef struct D2D1_LAYER_PARAMETERS { D2D1_RECT_F contentBounds; ID2D1Geometry *geometricMask; D2D1_ANTIALIAS_MODE maskAntialiasMode; D2D1_MATRIX_3X2_F maskTransform; float opacity; ID2D1Brush *opacityBrush; D2D1_LAYER_OPTIONS layerOptions; } D2D1_LAYER_PARAMETERS; typedef struct D2D1_RENDER_TARGET_PROPERTIES { D2D1_RENDER_TARGET_TYPE type; D2D1_PIXEL_FORMAT pixelFormat; float dpiX; float dpiY; D2D1_RENDER_TARGET_USAGE usage; D2D1_FEATURE_LEVEL minLevel; } D2D1_RENDER_TARGET_PROPERTIES; typedef struct D2D1_STROKE_STYLE_PROPERTIES { D2D1_CAP_STYLE startCap; D2D1_CAP_STYLE endCap; D2D1_CAP_STYLE dashCap; D2D1_LINE_JOIN lineJoin; float miterLimit; D2D1_DASH_STYLE dashStyle; float dashOffset; } D2D1_STROKE_STYLE_PROPERTIES; typedef struct D2D1_HWND_RENDER_TARGET_PROPERTIES { HWND hwnd; D2D1_SIZE_U pixelSize; D2D1_PRESENT_OPTIONS presentOptions; } D2D1_HWND_RENDER_TARGET_PROPERTIES; [ local, object, uuid(2cd90691-12e2-11dc-9fed-001143a055f9) ] interface ID2D1Resource : IUnknown { void GetFactory( [out] ID2D1Factory **factory ); } [ local, object, uuid(2cd9069d-12e2-11dc-9fed-001143a055f9) ] interface ID2D1StrokeStyle : ID2D1Resource { D2D1_CAP_STYLE GetStartCap(); D2D1_CAP_STYLE GetEndCap(); D2D1_CAP_STYLE GetDashCap(); float GetMiterLimit(); D2D1_LINE_JOIN GetLineJoin(); float GetDashOffset(); D2D1_DASH_STYLE GetDashStyle(); UINT32 GetDashesCount(); void GetDashes( [out, size_is(count)] float *dashes, [in] UINT32 count ); } [ local, object, uuid(2cd9069e-12e2-11dc-9fed-001143a055f9) ] interface ID2D1SimplifiedGeometrySink : IUnknown { void SetFillMode(D2D1_FILL_MODE mode); void SetSegmentFlags(D2D1_PATH_SEGMENT vertexFlags); void BeginFigure(D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin); void AddLines(const D2D1_POINT_2F *points, UINT32 count); void AddBeziers(const D2D1_BEZIER_SEGMENT *beziers, UINT32 count); void EndFigure(D2D1_FIGURE_END figureEnd); HRESULT Close(); } [ local, object, uuid(2cd906c1-12e2-11dc-9fed-001143a055f9) ] interface ID2D1TessellationSink : IUnknown { void AddTriangles( [in, size_is(count)] const D2D1_TRIANGLE *triangles, [in] UINT32 count ); HRESULT Close(); } [ local, object, uuid(2cd906a1-12e2-11dc-9fed-001143a055f9) ] interface ID2D1Geometry : ID2D1Resource { HRESULT GetBounds( [in] const D2D1_MATRIX_3X2_F *transform, [out] D2D1_RECT_F *bounds ); HRESULT GetWidenedBounds( [in] float stroke_width, [in] ID2D1StrokeStyle *stroke_style, [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] D2D1_RECT_F *bounds ); HRESULT StrokeContainsPoint( [in] D2D1_POINT_2F point, [in] float stroke_width, [in] ID2D1StrokeStyle *stroke_style, [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] BOOL *contains ); HRESULT FillContainsPoint( [in] D2D1_POINT_2F point, [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] BOOL *contains ); HRESULT CompareWithGeometry( [in] ID2D1Geometry *geometry, [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] D2D1_GEOMETRY_RELATION *relation ); HRESULT Simplify( [in] D2D1_GEOMETRY_SIMPLIFICATION_OPTION option, [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1SimplifiedGeometrySink *sink ); HRESULT Tessellate( [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1TessellationSink *sink ); HRESULT CombineWithGeometry( [in] ID2D1Geometry *geometry, [in] D2D1_COMBINE_MODE combine_mode, [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1SimplifiedGeometrySink *sink ); HRESULT Outline( [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1SimplifiedGeometrySink *sink ); HRESULT ComputeArea( [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] float *area ); HRESULT ComputeLength( [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] float *length ); HRESULT ComputePointAtLength( [in] float length, [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [out] D2D1_POINT_2F *point, [out] D2D1_POINT_2F *tangent ); HRESULT Widen( [in] float stroke_width, [in] ID2D1StrokeStyle *stroke_style, [in] const D2D1_MATRIX_3X2_F *transform, [in] float tolerance, [in] ID2D1SimplifiedGeometrySink *sink ); } [ local, object, uuid(2cd906a2-12e2-11dc-9fed-001143a055f9) ] interface ID2D1RectangleGeometry : ID2D1Geometry { void GetRect( [out] D2D1_RECT_F *rect ); } [ local, object, uuid(2cd906a3-12e2-11dc-9fed-001143a055f9) ] interface ID2D1RoundedRectangleGeometry : ID2D1Geometry { void GetRoundedRect( [out] D2D1_ROUNDED_RECT *rect ); } [ local, object, uuid(2cd906a4-12e2-11dc-9fed-001143a055f9) ] interface ID2D1EllipseGeometry : ID2D1Geometry { void GetEllipse( [out] D2D1_ELLIPSE *ellipse ); } [ local, object, uuid(2cd906a6-12e2-11dc-9fed-001143a055f9) ] interface ID2D1GeometryGroup : ID2D1Geometry { D2D1_FILL_MODE GetFillMode(); UINT32 GetSourceGeometryCount(); void GetSourceGeometries( [out, size_is(geometry_count)] ID2D1Geometry **geometry, [in] UINT32 geometry_count ); } [ local, object, uuid(2cd906bb-12e2-11dc-9fed-001143a055f9) ] interface ID2D1TransformedGeometry : ID2D1Geometry { void GetSourceGeometry( [out] ID2D1Geometry **geometry ); void GetTransform( [out] D2D1_MATRIX_3X2_F *transform ); } [ local, object, uuid(2cd9069f-12e2-11dc-9fed-001143a055f9) ] interface ID2D1GeometrySink : ID2D1SimplifiedGeometrySink { void AddLine( [in] D2D1_POINT_2F point ); void AddBezier( [in] const D2D1_BEZIER_SEGMENT *bezier ); void AddQuadraticBezier( [in] const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier ); void AddQuadraticBeziers( [in, size_is(bezier_count)] const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers, [in] UINT32 bezier_count ); void AddArc( [in] const D2D1_ARC_SEGMENT *arc ); } [ local, object, uuid(2cd906a5-12e2-11dc-9fed-001143a055f9) ] interface ID2D1PathGeometry : ID2D1Geometry { HRESULT Open( [out] ID2D1GeometrySink **sink ); HRESULT Stream( [in] ID2D1GeometrySink *sink ); HRESULT GetSegmentCount( [out] UINT32 *count ); HRESULT GetFigureCount( [out] UINT32 *count ); } [ local, object, uuid(28506e39-ebf6-46a1-bb47-fd85565ab957) ] interface ID2D1DrawingStateBlock : ID2D1Resource { void GetDescription( [out] D2D1_DRAWING_STATE_DESCRIPTION *desc ); void SetDescription( [in] const D2D1_DRAWING_STATE_DESCRIPTION *desc ); void SetTextRenderingParams( [in] IDWriteRenderingParams *text_rendering_params ); void GetTextRenderingParams( [out] IDWriteRenderingParams **text_rendering_params ); } [ local, object, uuid(65019f75-8da2-497c-b32c-dfa34e48ede6) ] interface ID2D1Image : ID2D1Resource { } [ local, object, uuid(a2296057-ea42-4099-983b-539fb6505426) ] interface ID2D1Bitmap : ID2D1Image { D2D1_SIZE_F GetSize(); D2D1_SIZE_U GetPixelSize(); D2D1_PIXEL_FORMAT GetPixelFormat(); void GetDpi( [out] float *dpi_x, [out] float *dpi_y ); HRESULT CopyFromBitmap( [in] const D2D1_POINT_2U *dst_point, [in] ID2D1Bitmap *bitmap, [in] const D2D1_RECT_U *src_rect ); HRESULT CopyFromRenderTarget( [in] const D2D1_POINT_2U *dst_point, [in] ID2D1RenderTarget *render_target, [in] const D2D1_RECT_U *src_rect ); HRESULT CopyFromMemory( [in] const D2D1_RECT_U *dst_rect, [in] const void *src_data, [in] UINT32 pitch ); } [ local, object, uuid(2cd906a8-12e2-11dc-9fed-001143a055f9) ] interface ID2D1Brush : ID2D1Resource { void SetOpacity( [in] float opacity ); void SetTransform( [in] const D2D1_MATRIX_3X2_F *transform ); float GetOpacity(); void GetTransform( [out] D2D1_MATRIX_3X2_F *transform ); } [ local, object, uuid(2cd906aa-12e2-11dc-9fed-001143a055f9) ] interface ID2D1BitmapBrush : ID2D1Brush { void SetExtendModeX( [in] D2D1_EXTEND_MODE mode ); void SetExtendModeY( [in] D2D1_EXTEND_MODE mode ); void SetInterpolationMode( [in] D2D1_BITMAP_INTERPOLATION_MODE mode ); void SetBitmap( [in] ID2D1Bitmap *bitmap ); D2D1_EXTEND_MODE GetExtendModeX(); D2D1_EXTEND_MODE GetExtendModeY(); D2D1_BITMAP_INTERPOLATION_MODE GetInterpolationMode(); void GetBitmap( [out] ID2D1Bitmap **bitmap ); } [ local, object, uuid(2cd906a9-12e2-11dc-9fed-001143a055f9) ] interface ID2D1SolidColorBrush : ID2D1Brush { void SetColor( [in] const D2D1_COLOR_F *color ); D2D1_COLOR_F GetColor(); } [ local, object, uuid(2cd906a7-12e2-11dc-9fed-001143a055f9) ] interface ID2D1GradientStopCollection : ID2D1Resource { UINT32 GetGradientStopCount(); void GetGradientStops( [out] D2D1_GRADIENT_STOP *stops, [in] UINT32 stop_count ); D2D1_GAMMA GetColorInterpolationGamma(); D2D1_EXTEND_MODE GetExtendMode(); } [ local, object, uuid(2cd906ab-12e2-11dc-9fed-001143a055f9) ] interface ID2D1LinearGradientBrush : ID2D1Brush { void SetStartPoint( [in] D2D1_POINT_2F start_point ); void SetEndPoint( [in] D2D1_POINT_2F end_point ); D2D1_POINT_2F GetStartPoint(); D2D1_POINT_2F GetEndPoint(); void GetGradientStopCollection( [out] ID2D1GradientStopCollection **gradient ); } [ local, object, uuid(2cd906ac-12e2-11dc-9fed-001143a055f9) ] interface ID2D1RadialGradientBrush : ID2D1Brush { void SetCenter( [in] D2D1_POINT_2F center ); void SetGradientOriginOffset( [in] D2D1_POINT_2F offset ); void SetRadiusX( [in] float radius ); void SetRadiusY( [in] float radius ); D2D1_POINT_2F GetCenter(); D2D1_POINT_2F GetGradientOriginOffset(); float GetRadiusX(); float GetRadiusY(); void GetGradientStopCollection( [out] ID2D1GradientStopCollection **gradient ); } [ local, object, uuid(2cd9069b-12e2-11dc-9fed-001143a055f9) ] interface ID2D1Layer : ID2D1Resource { D2D1_SIZE_F GetSize(); } [ local, object, uuid(2cd906c2-12e2-11dc-9fed-001143a055f9) ] interface ID2D1Mesh : ID2D1Resource { HRESULT Open( [out] ID2D1TessellationSink **sink ); } [ local, object, uuid(2cd90694-12e2-11dc-9fed-001143a055f9) ] interface ID2D1RenderTarget : ID2D1Resource { HRESULT CreateBitmap( [in] D2D1_SIZE_U size, [in] const void *src_data, [in] UINT32 pitch, [in] const D2D1_BITMAP_PROPERTIES *desc, [out] ID2D1Bitmap **bitmap ); HRESULT CreateBitmapFromWicBitmap( [in] IWICBitmapSource *bitmap_source, [in] const D2D1_BITMAP_PROPERTIES *desc, [out] ID2D1Bitmap **bitmap ); HRESULT CreateSharedBitmap( [in] REFIID iid, [in, out] void *data, [in] const D2D1_BITMAP_PROPERTIES *desc, [out] ID2D1Bitmap **bitmap ); HRESULT CreateBitmapBrush( [in] ID2D1Bitmap *bitmap, [in] const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc, [in] const D2D1_BRUSH_PROPERTIES *brush_desc, [out] ID2D1BitmapBrush **brush ); HRESULT CreateSolidColorBrush( [in] const D2D1_COLOR_F *color, [in] const D2D1_BRUSH_PROPERTIES *desc, [out] ID2D1SolidColorBrush **brush ); HRESULT CreateGradientStopCollection( [in, size_is(stop_count)] const D2D1_GRADIENT_STOP *stops, [in] UINT32 stop_count, [in] D2D1_GAMMA gamma, [in] D2D1_EXTEND_MODE extend_mode, [out] ID2D1GradientStopCollection **gradient ); HRESULT CreateLinearGradientBrush( [in] const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc, [in] const D2D1_BRUSH_PROPERTIES *brush_desc, [in] ID2D1GradientStopCollection *gradient, [out] ID2D1LinearGradientBrush **brush ); HRESULT CreateRadialGradientBrush( [in] const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc, [in] const D2D1_BRUSH_PROPERTIES *brush_desc, [in] ID2D1GradientStopCollection *gradient, [out] ID2D1RadialGradientBrush **brush ); HRESULT CreateCompatibleRenderTarget( [in] const D2D1_SIZE_F *size, [in] const D2D1_SIZE_U *pixel_size, [in] const D2D1_PIXEL_FORMAT *format, [in] D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options, [out] ID2D1BitmapRenderTarget **render_target ); HRESULT CreateLayer( [in] const D2D1_SIZE_F *size, [out] ID2D1Layer **layer ); HRESULT CreateMesh( [out] ID2D1Mesh **mesh ); void DrawLine( [in] D2D1_POINT_2F p0, [in] D2D1_POINT_2F p1, [in] ID2D1Brush *brush, [in] float stroke_width, [in] ID2D1StrokeStyle *stroke_style ); void DrawRectangle( [in] const D2D1_RECT_F *rect, [in] ID2D1Brush *brush, [in] float stroke_width, [in] ID2D1StrokeStyle *stroke_style ); void FillRectangle( [in] const D2D1_RECT_F *rect, [in] ID2D1Brush *brush ); void DrawRoundedRectangle( [in] const D2D1_ROUNDED_RECT *rect, [in] ID2D1Brush *brush, [in] float stroke_width, [in] ID2D1StrokeStyle *stroke_style ); void FillRoundedRectangle( [in] const D2D1_ROUNDED_RECT *rect, [in] ID2D1Brush *brush ); void DrawEllipse( [in] const D2D1_ELLIPSE *ellipse, [in] ID2D1Brush *brush, [in] float stroke_width, [in] ID2D1StrokeStyle *stroke_style ); void FillEllipse( [in] const D2D1_ELLIPSE *ellipse, [in] ID2D1Brush *brush ); void DrawGeometry( [in] ID2D1Geometry *geometry, [in] ID2D1Brush *brush, [in] float stroke_width, [in] ID2D1StrokeStyle *stroke_style ); void FillGeometry( [in] ID2D1Geometry *geometry, [in] ID2D1Brush *brush, [in] ID2D1Brush *opacity_brush ); void FillMesh( [in] ID2D1Mesh *mesh, [in] ID2D1Brush *brush ); void FillOpacityMask( [in] ID2D1Bitmap *mask, [in] ID2D1Brush *brush, [in] D2D1_OPACITY_MASK_CONTENT content, [in] const D2D1_RECT_F *dst_rect, [in] const D2D1_RECT_F *src_rect ); void DrawBitmap( [in] ID2D1Bitmap *bitmap, [in] const D2D1_RECT_F *dst_rect, [in] float opacity, [in] D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode, [in] const D2D1_RECT_F *src_rect ); void DrawText( [in, size_is(string_len)] const WCHAR *string, [in] UINT32 string_len, [in] IDWriteTextFormat *text_format, [in] const D2D1_RECT_F *layout_rect, [in] ID2D1Brush *brush, [in] D2D1_DRAW_TEXT_OPTIONS options, [in] DWRITE_MEASURING_MODE measuring_mode ); void DrawTextLayout( [in] D2D1_POINT_2F origin, [in] IDWriteTextLayout *layout, [in] ID2D1Brush *brush, [in] D2D1_DRAW_TEXT_OPTIONS options ); void DrawGlyphRun( [in] D2D1_POINT_2F baseline_origin, [in] const DWRITE_GLYPH_RUN *glyph_run, [in] ID2D1Brush *brush, [in] DWRITE_MEASURING_MODE measuring_mode ); void SetTransform( [in] const D2D1_MATRIX_3X2_F *transform ); void GetTransform( [out] D2D1_MATRIX_3X2_F *transform ); void SetAntialiasMode( [in] D2D1_ANTIALIAS_MODE antialias_mode ); D2D1_ANTIALIAS_MODE GetAntialiasMode(); void SetTextAntialiasMode( [in] D2D1_TEXT_ANTIALIAS_MODE antialias_mode ); D2D1_TEXT_ANTIALIAS_MODE GetTextAntialiasMode(); void SetTextRenderingParams( [in] IDWriteRenderingParams *text_rendering_params ); void GetTextRenderingParams( [out] IDWriteRenderingParams **text_rendering_params ); void SetTags( [in] D2D1_TAG tag1, [in] D2D1_TAG tag2 ); void GetTags( [out] D2D1_TAG *tag1, [out] D2D1_TAG *tag2 ); void PushLayer( [in] const D2D1_LAYER_PARAMETERS *layer_parameters, [in] ID2D1Layer *layer ); void PopLayer(); HRESULT Flush( [out] D2D1_TAG *tag1, [out] D2D1_TAG *tag2 ); void SaveDrawingState( [in, out] ID2D1DrawingStateBlock *state_block ); void RestoreDrawingState( [in] ID2D1DrawingStateBlock *state_block ); void PushAxisAlignedClip( [in] const D2D1_RECT_F *clip_rect, [in] D2D1_ANTIALIAS_MODE antialias_mode ); void PopAxisAlignedClip(); void Clear( [in] const D2D1_COLOR_F *color ); void BeginDraw(); HRESULT EndDraw( [out] D2D1_TAG *tag1, [out] D2D1_TAG *tag2 ); D2D1_PIXEL_FORMAT GetPixelFormat(); void SetDpi( [in] float dpi_x, [in] float dpi_y ); void GetDpi( [out] float *dpi_x, [out] float *dpi_y ); D2D1_SIZE_F GetSize(); D2D1_SIZE_U GetPixelSize(); UINT32 GetMaximumBitmapSize(); BOOL IsSupported( [in] const D2D1_RENDER_TARGET_PROPERTIES *desc ); } [ local, object, uuid(2cd90695-12e2-11dc-9fed-001143a055f9) ] interface ID2D1BitmapRenderTarget : ID2D1RenderTarget { HRESULT GetBitmap( [out] ID2D1Bitmap **bitmap ); } [ local, object, uuid(2cd90698-12e2-11dc-9fed-001143a055f9) ] interface ID2D1HwndRenderTarget : ID2D1RenderTarget { D2D1_WINDOW_STATE CheckWindowState(); HRESULT Resize( [in] const D2D1_SIZE_U *size ); HWND GetHwnd(); } [ local, object, uuid(1c51bc64-de61-46fd-9899-63a5d8f03950) ] interface ID2D1DCRenderTarget : ID2D1RenderTarget { HRESULT BindDC( [in] const HDC dc, [in] const RECT *rect ); } [ local, object, uuid(e0db51c3-6f77-4bae-b3d5-e47509b35838) ] interface ID2D1GdiInteropRenderTarget : IUnknown { HRESULT GetDC( [in] D2D1_DC_INITIALIZE_MODE mode, [out] HDC *dc ); HRESULT ReleaseDC( [in] const RECT *update ); } [ local, object, uuid(06152247-6f50-465a-9245-118bfd3b6007) ] interface ID2D1Factory : IUnknown { HRESULT ReloadSystemMetrics(); void GetDesktopDpi( [out] float *dpi_x, [out] float *dpi_y ); HRESULT CreateRectangleGeometry( [in] const D2D1_RECT_F *rect, [out] ID2D1RectangleGeometry **geometry ); HRESULT CreateRoundedRectangleGeometry( [in] const D2D1_ROUNDED_RECT *rect, [out] ID2D1RoundedRectangleGeometry **geometry ); HRESULT CreateEllipseGeometry( [in] const D2D1_ELLIPSE *ellipse, [out] ID2D1EllipseGeometry **geometry ); HRESULT CreateGeometryGroup( [in] D2D1_FILL_MODE fill_mode, [in, size_is(geometry_count)] ID2D1Geometry **geometries, [in] UINT32 geometry_count, [out] ID2D1GeometryGroup **group ); HRESULT CreateTransformedGeometry( [in] ID2D1Geometry *src_geometry, [in] const D2D1_MATRIX_3X2_F *transform, [out] ID2D1TransformedGeometry **transformed_geometry ); HRESULT CreatePathGeometry( [out] ID2D1PathGeometry **geometry ); HRESULT CreateStrokeStyle( [in] const D2D1_STROKE_STYLE_PROPERTIES *desc, [in, size_is(dash_count)] const float *dashes, [in] UINT32 dash_count, [out] ID2D1StrokeStyle **stroke_style ); HRESULT CreateDrawingStateBlock( [in] const D2D1_DRAWING_STATE_DESCRIPTION *desc, [in] IDWriteRenderingParams *text_rendering_params, [out] ID2D1DrawingStateBlock **state_block ); HRESULT CreateWicBitmapRenderTarget( [in] IWICBitmap *target, [in] const D2D1_RENDER_TARGET_PROPERTIES *desc, [out] ID2D1RenderTarget **render_target ); HRESULT CreateHwndRenderTarget( [in] const D2D1_RENDER_TARGET_PROPERTIES *desc, [in] const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc, [out] ID2D1HwndRenderTarget **render_target ); HRESULT CreateDxgiSurfaceRenderTarget( [in] IDXGISurface *surface, [in] const D2D1_RENDER_TARGET_PROPERTIES *desc, [out] ID2D1RenderTarget **render_target ); HRESULT CreateDCRenderTarget( [in] const D2D1_RENDER_TARGET_PROPERTIES *desc, [out] ID2D1DCRenderTarget **render_target ); } [local] HRESULT __stdcall D2D1CreateFactory(D2D1_FACTORY_TYPE factory_type, REFIID iid, const D2D1_FACTORY_OPTIONS *factory_options, void **factory); [local] BOOL __stdcall D2D1InvertMatrix(D2D1_MATRIX_3X2_F *matrix); [local] BOOL __stdcall D2D1IsMatrixInvertible(const D2D1_MATRIX_3X2_F *matrix); [local] void __stdcall D2D1MakeRotateMatrix(float angle, D2D1_POINT_2F center, D2D1_MATRIX_3X2_F *matrix); ================================================ FILE: wine/windows/d2d1_1.idl ================================================ /* * Copyright 2017 Lucian Poston * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "d2d1.idl"; interface ID2D1DeviceContext; interface ID2D1StrokeStyle1; interface ID2D1PathGeometry1; interface ID2D1GdiMetafile; interface ID2D1Properties; interface IPrintDocumentPackageTarget; interface ID2D1PrintControl; interface IWICImagingFactory; interface IWICColorContext; interface ID2D1ColorContext; interface ID2D1Effect; interface ID2D1GradientStopCollection1; interface ID2D1ImageBrush; interface ID2D1BitmapBrush1; interface ID2D1CommandList; cpp_quote("#ifndef __dwrite_h__") /* already defined in dwrite.h but needed for WIDL */ typedef struct DWRITE_GLYPH_RUN_DESCRIPTION DWRITE_GLYPH_RUN_DESCRIPTION; cpp_quote("#endif /* __dwrite_h__ */") typedef enum D2D1_DEVICE_CONTEXT_OPTIONS { D2D1_DEVICE_CONTEXT_OPTIONS_NONE = 0x0, D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS = 0x1, D2D1_DEVICE_CONTEXT_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_DEVICE_CONTEXT_OPTIONS; typedef enum D2D1_STROKE_TRANSFORM_TYPE { D2D1_STROKE_TRANSFORM_TYPE_NORMAL = 0x0, D2D1_STROKE_TRANSFORM_TYPE_FIXED = 0x1, D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE = 0x2, D2D1_STROKE_TRANSFORM_TYPE_FORCE_DWORD = 0xffffffff, } D2D1_STROKE_TRANSFORM_TYPE; typedef enum D2D1_PRIMITIVE_BLEND { D2D1_PRIMITIVE_BLEND_SOURCE_OVER = 0x0, D2D1_PRIMITIVE_BLEND_COPY = 0x1, D2D1_PRIMITIVE_BLEND_MIN = 0x2, D2D1_PRIMITIVE_BLEND_ADD = 0x3, D2D1_PRIMITIVE_BLEND_MAX = 0x4, D2D1_PRIMITIVE_BLEND_FORCE_DWORD = 0xffffffff, } D2D1_PRIMITIVE_BLEND; typedef enum D2D1_UNIT_MODE { D2D1_UNIT_MODE_DIPS = 0x0, D2D1_UNIT_MODE_PIXELS = 0x1, D2D1_UNIT_MODE_FORCE_DWORD = 0xffffffff, } D2D1_UNIT_MODE; typedef enum D2D1_PRINT_FONT_SUBSET_MODE { D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT = 0x0, D2D1_PRINT_FONT_SUBSET_MODE_EACHPAGE = 0x1, D2D1_PRINT_FONT_SUBSET_MODE_NONE = 0x2, D2D1_PRINT_FONT_SUBSET_MODE_FORCE_DWORD = 0xffffffff, } D2D1_PRINT_FONT_SUBSET_MODE; typedef enum D2D1_COLOR_SPACE { D2D1_COLOR_SPACE_CUSTOM = 0x0, D2D1_COLOR_SPACE_SRGB = 0x1, D2D1_COLOR_SPACE_SCRGB = 0x2, D2D1_COLOR_SPACE_FORCE_DWORD = 0xffffffff, } D2D1_COLOR_SPACE; typedef enum D2D1_BITMAP_OPTIONS { D2D1_BITMAP_OPTIONS_NONE = 0x0, D2D1_BITMAP_OPTIONS_TARGET = 0x1, D2D1_BITMAP_OPTIONS_CANNOT_DRAW = 0x2, D2D1_BITMAP_OPTIONS_CPU_READ = 0x4, D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE = 0x8, D2D1_BITMAP_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_BITMAP_OPTIONS; typedef enum D2D1_MAP_OPTIONS { D2D1_MAP_OPTIONS_NONE = 0x0, D2D1_MAP_OPTIONS_READ = 0x1, D2D1_MAP_OPTIONS_WRITE = 0x2, D2D1_MAP_OPTIONS_DISCARD = 0x4, D2D1_MAP_OPTIONS_FORCE_DWORD = 0xffffffff, } D2D1_MAP_OPTIONS; typedef enum D2D1_BUFFER_PRECISION { D2D1_BUFFER_PRECISION_UNKNOWN = 0x0, D2D1_BUFFER_PRECISION_8BPC_UNORM = 0x1, D2D1_BUFFER_PRECISION_8BPC_UNORM_SRGB = 0x2, D2D1_BUFFER_PRECISION_16BPC_UNORM = 0x3, D2D1_BUFFER_PRECISION_16BPC_FLOAT = 0x4, D2D1_BUFFER_PRECISION_32BPC_FLOAT = 0x5, D2D1_BUFFER_PRECISION_FORCE_DWORD = 0xffffffff, } D2D1_BUFFER_PRECISION; typedef enum D2D1_COLOR_INTERPOLATION_MODE { D2D1_COLOR_INTERPOLATION_MODE_STRAIGHT = 0x0, D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED = 0x1, D2D1_COLOR_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff, } D2D1_COLOR_INTERPOLATION_MODE; typedef enum D2D1_INTERPOLATION_MODE { D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR, D2D1_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR, D2D1_INTERPOLATION_MODE_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC, D2D1_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR, D2D1_INTERPOLATION_MODE_ANISOTROPIC = D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC, D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC, D2D1_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff, } D2D1_INTERPOLATION_MODE; typedef enum D2D1_COMPOSITE_MODE { D2D1_COMPOSITE_MODE_SOURCE_OVER = 0x0, D2D1_COMPOSITE_MODE_DESTINATION_OVER = 0x1, D2D1_COMPOSITE_MODE_SOURCE_IN = 0x2, D2D1_COMPOSITE_MODE_DESTINATION_IN = 0x3, D2D1_COMPOSITE_MODE_SOURCE_OUT = 0x4, D2D1_COMPOSITE_MODE_DESTINATION_OUT = 0x5, D2D1_COMPOSITE_MODE_SOURCE_ATOP = 0x6, D2D1_COMPOSITE_MODE_DESTINATION_ATOP = 0x7, D2D1_COMPOSITE_MODE_XOR = 0x8, D2D1_COMPOSITE_MODE_PLUS = 0x9, D2D1_COMPOSITE_MODE_SOURCE_COPY = 0xa, D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY = 0xb, D2D1_COMPOSITE_MODE_MASK_INVERT = 0xc, D2D1_COMPOSITE_MODE_FORCE_DWORD = 0xffffffff, } D2D1_COMPOSITE_MODE; typedef enum D2D1_LAYER_OPTIONS1 { D2D1_LAYER_OPTIONS1_NONE = 0x0, D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND = 0x1, D2D1_LAYER_OPTIONS1_IGNORE_ALPHA = 0x2, D2D1_LAYER_OPTIONS1_FORCE_DWORD = 0xffffffff, } D2D1_LAYER_OPTIONS1; typedef struct D2D1_PROPERTY_BINDING D2D1_PROPERTY_BINDING; typedef D2D_MATRIX_4X4_F D2D1_MATRIX_4X4_F; typedef enum D2D1_PROPERTY_TYPE { D2D1_PROPERTY_TYPE_UNKNOWN = 0x0, D2D1_PROPERTY_TYPE_STRING = 0x1, D2D1_PROPERTY_TYPE_BOOL = 0x2, D2D1_PROPERTY_TYPE_UINT32 = 0x3, D2D1_PROPERTY_TYPE_INT32 = 0x4, D2D1_PROPERTY_TYPE_FLOAT = 0x5, D2D1_PROPERTY_TYPE_VECTOR2 = 0x6, D2D1_PROPERTY_TYPE_VECTOR3 = 0x7, D2D1_PROPERTY_TYPE_VECTOR4 = 0x8, D2D1_PROPERTY_TYPE_BLOB = 0x9, D2D1_PROPERTY_TYPE_IUNKNOWN = 0xa, D2D1_PROPERTY_TYPE_ENUM = 0xb, D2D1_PROPERTY_TYPE_ARRAY = 0xc, D2D1_PROPERTY_TYPE_CLSID = 0xd, D2D1_PROPERTY_TYPE_MATRIX_3X2 = 0xe, D2D1_PROPERTY_TYPE_MATRIX_4X3 = 0xf, D2D1_PROPERTY_TYPE_MATRIX_4X4 = 0x10, D2D1_PROPERTY_TYPE_MATRIX_5X4 = 0x11, D2D1_PROPERTY_TYPE_COLOR_CONTEXT = 0x12, D2D1_PROPERTY_TYPE_FORCE_DWORD = 0xffffffff, } D2D1_PROPERTY_TYPE; typedef struct D2D1_STROKE_STYLE_PROPERTIES1 { D2D1_CAP_STYLE startCap; D2D1_CAP_STYLE endCap; D2D1_CAP_STYLE dashCap; D2D1_LINE_JOIN lineJoin; float miterLimit; D2D1_DASH_STYLE dashStyle; float dashOffset; D2D1_STROKE_TRANSFORM_TYPE transformType; } D2D1_STROKE_STYLE_PROPERTIES1; typedef struct D2D1_DRAWING_STATE_DESCRIPTION1 { D2D1_ANTIALIAS_MODE antialiasMode; D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode; D2D1_TAG tag1; D2D1_TAG tag2; D2D1_MATRIX_3X2_F transform; D2D1_PRIMITIVE_BLEND primitiveBlend; D2D1_UNIT_MODE unitMode; } D2D1_DRAWING_STATE_DESCRIPTION1; typedef struct D2D1_PRINT_CONTROL_PROPERTIES { D2D1_PRINT_FONT_SUBSET_MODE fontSubset; float rasterDPI; D2D1_COLOR_SPACE colorSpace; } D2D1_PRINT_CONTROL_PROPERTIES; typedef struct D2D1_MAPPED_RECT { UINT32 pitch; BYTE *bits; } D2D1_MAPPED_RECT; typedef struct D2D1_BITMAP_PROPERTIES1 { D2D1_PIXEL_FORMAT pixelFormat; float dpiX; float dpiY; D2D1_BITMAP_OPTIONS bitmapOptions; ID2D1ColorContext *colorContext; } D2D1_BITMAP_PROPERTIES1; typedef struct D2D1_IMAGE_BRUSH_PROPERTIES { D2D1_RECT_F sourceRectangle; D2D1_EXTEND_MODE extendModeX; D2D1_EXTEND_MODE extendModeY; D2D1_INTERPOLATION_MODE interpolationMode; } D2D1_IMAGE_BRUSH_PROPERTIES; typedef struct D2D1_BITMAP_BRUSH_PROPERTIES1 { D2D1_EXTEND_MODE extendModeX; D2D1_EXTEND_MODE extendModeY; D2D1_INTERPOLATION_MODE interpolationMode; } D2D1_BITMAP_BRUSH_PROPERTIES1; typedef struct D2D1_RENDERING_CONTROLS { D2D1_BUFFER_PRECISION bufferPrecision; D2D1_SIZE_U tileSize; } D2D1_RENDERING_CONTROLS; typedef struct D2D1_LAYER_PARAMETERS1 { D2D1_RECT_F contentBounds; ID2D1Geometry *geometricMask; D2D1_ANTIALIAS_MODE maskAntialiasMode; D2D1_MATRIX_3X2_F maskTransform; float opacity; ID2D1Brush *opacityBrush; D2D1_LAYER_OPTIONS1 layerOptions; } D2D1_LAYER_PARAMETERS1; typedef struct D2D1_EFFECT_INPUT_DESCRIPTION { ID2D1Effect *effect; UINT32 inputIndex; D2D1_RECT_F inputRectangle; } D2D1_EFFECT_INPUT_DESCRIPTION; typedef HRESULT (__stdcall *PD2D1_EFFECT_FACTORY)(IUnknown **effect); [ object, uuid(483473d7-cd46-4f9d-9d3a-3112aa80159d), local, ] interface ID2D1Properties : IUnknown { UINT32 GetPropertyCount(); HRESULT GetPropertyName( [in] UINT32 index, [out] WCHAR *name, [in] UINT32 name_count ); UINT32 GetPropertyNameLength( [in] UINT32 index ); D2D1_PROPERTY_TYPE GetType( [in] UINT32 index ); UINT32 GetPropertyIndex( [in] const WCHAR *name ); HRESULT SetValueByName( [in] const WCHAR *name, [in] D2D1_PROPERTY_TYPE type, [in] const BYTE *value, [in] UINT32 value_size ); HRESULT SetValue( [in] UINT32 index, [in] D2D1_PROPERTY_TYPE type, [in] const BYTE *value, [in] UINT32 value_size ); HRESULT GetValueByName( [in] const WCHAR *name, [in] D2D1_PROPERTY_TYPE type, [out] BYTE *value, [in] UINT32 value_size ); HRESULT GetValue( [in] UINT32 index, [in] D2D1_PROPERTY_TYPE type, [out] BYTE *value, [in] UINT32 value_size ); UINT32 GetValueSize( [in] UINT32 index ); HRESULT GetSubProperties( [in] UINT32 index, [out] ID2D1Properties **props ); } [ object, uuid(28211a43-7d89-476f-8181-2d6159b220ad), local, ] interface ID2D1Effect : ID2D1Properties { void SetInput( [in] UINT32 index, [in] ID2D1Image *input, [in] BOOL invalidate ); HRESULT SetInputCount( [in] UINT32 count ); void GetInput( [in] UINT32 index, [out] ID2D1Image **input ); UINT32 GetInputCount(); void GetOutput( [out] ID2D1Image **output ); } [ object, uuid(689f1f85-c72e-4e33-8f19-85754efd5ace), local, ] interface ID2D1DrawingStateBlock1 : ID2D1DrawingStateBlock { void GetDescription( [out] D2D1_DRAWING_STATE_DESCRIPTION1 *desc ); void SetDescription( [in] const D2D1_DRAWING_STATE_DESCRIPTION1 *desc ); } [ object, uuid(a898a84c-3873-4588-b08b-ebbf978df041), local, ] interface ID2D1Bitmap1 : ID2D1Bitmap { void GetColorContext( [out] ID2D1ColorContext **context ); D2D1_BITMAP_OPTIONS GetOptions(); HRESULT GetSurface( [out] IDXGISurface **surface ); HRESULT Map( [in] D2D1_MAP_OPTIONS options, [out] D2D1_MAPPED_RECT *mapped_rect ); HRESULT Unmap(); } [ object, uuid(41343a53-e41a-49a2-91cd-21793bbb62e5), local, ] interface ID2D1BitmapBrush1 : ID2D1BitmapBrush { void SetInterpolationMode1( [in] D2D1_INTERPOLATION_MODE mode ); D2D1_INTERPOLATION_MODE GetInterpolationMode1(); } [ object, uuid(47dd575d-ac05-4cdd-8049-9b02cd16f44c), local, ] interface ID2D1Device : ID2D1Resource { HRESULT CreateDeviceContext( [in] D2D1_DEVICE_CONTEXT_OPTIONS options, [out] ID2D1DeviceContext **context ); HRESULT CreatePrintControl( [in] IWICImagingFactory *wic_factory, [in] IPrintDocumentPackageTarget *document_target, [in] const D2D1_PRINT_CONTROL_PROPERTIES *desc, [out] ID2D1PrintControl **print_control ); void SetMaximumTextureMemory( [in] UINT64 max_texture_memory ); UINT64 GetMaximumTextureMemory(); HRESULT ClearResources( [in, defaultvalue(0)] UINT msec_since_use ); } [ object, uuid(e8f7fe7a-191c-466d-ad95-975678bda998), local, ] interface ID2D1DeviceContext : ID2D1RenderTarget { HRESULT CreateBitmap( [in] D2D1_SIZE_U size, [in] const void *src_data, [in] UINT32 pitch, [in] const D2D1_BITMAP_PROPERTIES1 *desc, [out] ID2D1Bitmap1 **bitmap ); HRESULT CreateBitmapFromWicBitmap( [in] IWICBitmapSource *bitmap_source, [in] const D2D1_BITMAP_PROPERTIES1 *desc, [out] ID2D1Bitmap1 **bitmap ); HRESULT CreateColorContext( [in] D2D1_COLOR_SPACE space, [in] const BYTE *profile, [in] UINT32 profile_size, [out] ID2D1ColorContext **color_context ); HRESULT CreateColorContextFromFilename( [in] const WCHAR *filename, [out] ID2D1ColorContext **color_context ); HRESULT CreateColorContextFromWicColorContext( [in] IWICColorContext *wic_color_context, [out] ID2D1ColorContext **color_context ); HRESULT CreateBitmapFromDxgiSurface( [in] IDXGISurface *surface, [in] const D2D1_BITMAP_PROPERTIES1 *desc, [out] ID2D1Bitmap1 **bitmap ); HRESULT CreateEffect( [in] REFCLSID effect_id, [out] ID2D1Effect **effect ); HRESULT CreateGradientStopCollection( [in] const D2D1_GRADIENT_STOP *stops, [in] UINT32 stop_count, [in] D2D1_COLOR_SPACE preinterpolation_space, [in] D2D1_COLOR_SPACE postinterpolation_space, [in] D2D1_BUFFER_PRECISION buffer_precision, [in] D2D1_EXTEND_MODE extend_mode, [in] D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode, [out] ID2D1GradientStopCollection1 **gradient ); HRESULT CreateImageBrush( [in] ID2D1Image *image, [in] const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc, [in] const D2D1_BRUSH_PROPERTIES *brush_desc, [out] ID2D1ImageBrush **brush ); HRESULT CreateBitmapBrush( [in] ID2D1Bitmap *bitmap, [in] const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc, [in] const D2D1_BRUSH_PROPERTIES *brush_desc, [out] ID2D1BitmapBrush1 **bitmap_brush ); HRESULT CreateCommandList( [out] ID2D1CommandList **command_list ); BOOL IsDxgiFormatSupported( [in] DXGI_FORMAT format ); BOOL IsBufferPrecisionSupported( [in] D2D1_BUFFER_PRECISION buffer_precision ); void GetImageLocalBounds( [in] ID2D1Image *image, [out] D2D1_RECT_F *local_bounds ); HRESULT GetImageWorldBounds( [in] ID2D1Image *image, [out] D2D1_RECT_F *world_bounds ); HRESULT GetGlyphRunWorldBounds( [in] D2D1_POINT_2F baseline_origin, [in] const DWRITE_GLYPH_RUN *glyph_run, [in] DWRITE_MEASURING_MODE measuring_mode, [out] D2D1_RECT_F *bounds ); void GetDevice( [out] ID2D1Device **device ); void SetTarget( [in] ID2D1Image *target ); void GetTarget( [out] ID2D1Image **target ); void SetRenderingControls( [in] const D2D1_RENDERING_CONTROLS *rendering_controls ); void GetRenderingControls( [out] D2D1_RENDERING_CONTROLS *rendering_controls ); void SetPrimitiveBlend( [in] D2D1_PRIMITIVE_BLEND primitive_blend ); D2D1_PRIMITIVE_BLEND GetPrimitiveBlend(); void SetUnitMode( [in] D2D1_UNIT_MODE unit_mode ); D2D1_UNIT_MODE GetUnitMode(); void DrawGlyphRun( [in] D2D1_POINT_2F baseline_origin, [in] const DWRITE_GLYPH_RUN *glyph_run, [in] const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc, [in] ID2D1Brush *brush, [in] DWRITE_MEASURING_MODE measuring_mode ); void DrawImage( [in] ID2D1Image *image, [in] const D2D1_POINT_2F *target_offset, [in] const D2D1_RECT_F *image_rect, [in] D2D1_INTERPOLATION_MODE interpolation_mode, [in] D2D1_COMPOSITE_MODE composite_mode ); void DrawGdiMetafile( [in] ID2D1GdiMetafile *metafile, [in] const D2D1_POINT_2F *target_offset ); void DrawBitmap( [in] ID2D1Bitmap *bitmap, [in] const D2D1_RECT_F *dst_rect, [in] float opacity, [in] D2D1_INTERPOLATION_MODE interpolation_mode, [in] const D2D1_RECT_F *src_rect, [in] const D2D1_MATRIX_4X4_F *perspective_transform ); void PushLayer( [in] const D2D1_LAYER_PARAMETERS1 *layer_parameters, [in] ID2D1Layer *layer ); HRESULT InvalidateEffectInputRectangle( [in] ID2D1Effect *effect, [in] UINT32 input, [in] const D2D1_RECT_F *input_rect ); HRESULT GetEffectInvalidRectangleCount( [in] ID2D1Effect *effect, [out] UINT32 *rect_count ); HRESULT GetEffectInvalidRectangles( [in] ID2D1Effect *effect, [out] D2D1_RECT_F *rectangles, [in] UINT32 rect_count ); HRESULT GetEffectRequiredInputRectangles( [in] ID2D1Effect *effect, [in] const D2D1_RECT_F *image_rect, [in] const D2D1_EFFECT_INPUT_DESCRIPTION *desc, [out] D2D1_RECT_F *input_rect, [in] UINT32 input_count ); void FillOpacityMask( [in] ID2D1Bitmap *mask, [in] ID2D1Brush *brush, [in] const D2D1_RECT_F *dst_rect, [in] const D2D1_RECT_F *src_rect ); } [ object, uuid(bb12d362-daee-4b9a-aa1d-14ba401cfa1f), local, ] interface ID2D1Factory1 : ID2D1Factory { HRESULT CreateDevice( [in] IDXGIDevice *dxgi_device, [out] ID2D1Device **device ); HRESULT CreateStrokeStyle( [in] const D2D1_STROKE_STYLE_PROPERTIES1 *desc, [in, size_is(dash_count)] const float *dashes, [in] UINT32 dash_count, [out] ID2D1StrokeStyle1 **stroke_style ); HRESULT CreatePathGeometry( [out] ID2D1PathGeometry1 **geometry ); HRESULT CreateDrawingStateBlock( [in] const D2D1_DRAWING_STATE_DESCRIPTION1 *desc, [in] IDWriteRenderingParams *text_rendering_params, [out] ID2D1DrawingStateBlock1 **state_block ); HRESULT CreateGdiMetafile( [in] IStream *stream, [out] ID2D1GdiMetafile **metafile ); HRESULT RegisterEffectFromStream( [in] REFCLSID effect_id, [in] IStream *property_xml, [in, size_is(binding_count)] const D2D1_PROPERTY_BINDING *bindings, [in] UINT32 binding_count, [in] PD2D1_EFFECT_FACTORY effect_factory ); HRESULT RegisterEffectFromString( [in] REFCLSID effect_id, [in] const WCHAR *property_xml, [in, size_is(binding_count)] const D2D1_PROPERTY_BINDING *bindings, [in] UINT32 binding_count, [in] PD2D1_EFFECT_FACTORY effect_factory ); HRESULT UnregisterEffect( [in] REFCLSID effect_id ); HRESULT GetRegisteredEffects( [out, size_is(effect_count)] CLSID *effects, [in] UINT32 effect_count, [out] UINT32 *returned, [out] UINT32 *registered ); HRESULT GetEffectProperties( [in] REFCLSID effect_id, [out] ID2D1Properties **props ); } ================================================ FILE: wine/windows/d2dbasetypes.h ================================================ /* * Copyright 2013 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef D3DCOLORVALUE_DEFINED typedef struct D3DCOLORVALUE { float r; float g; float b; float a; } D3DCOLORVALUE; #define D3DCOLORVALUE_DEFINED #endif typedef D3DCOLORVALUE D2D_COLOR_F; typedef struct D2D_MATRIX_3X2_F { float _11; float _12; float _21; float _22; float _31; float _32; } D2D_MATRIX_3X2_F; typedef struct D2D_RECT_F { float left; float top; float right; float bottom; } D2D_RECT_F; typedef struct D2D_SIZE_F { float width; float height; } D2D_SIZE_F; typedef struct D2D_POINT_2U { UINT32 x; UINT32 y; } D2D_POINT_2U; typedef struct D2D_RECT_U { UINT32 left; UINT32 top; UINT32 right; UINT32 bottom; } D2D_RECT_U; ================================================ FILE: wine/windows/d2derr.h ================================================ /* * Copyright 2014 Henri Verbeet for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D2DERR_H #define __WINE_D2DERR_H #define D2DERR_FILE_NOT_FOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) #define D2DERR_INSUFFICIENT_BUFFER HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) #define D2DERR_UNSUPPORTED_PIXEL_FORMAT WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT #endif /* __WINE_D2DERR_H */ ================================================ FILE: wine/windows/d3d.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3D_H #define __WINE_D3D_H #include #define COM_NO_WINDOWS_H #include #include /* must precede d3dcaps.h */ #include /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(IID_IDirect3D, 0x3BBA0080,0x2421,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56); DEFINE_GUID(IID_IDirect3D2, 0x6aae1ec1,0x662a,0x11d0,0x88,0x9d,0x00,0xaa,0x00,0xbb,0xb7,0x6a); DEFINE_GUID(IID_IDirect3D3, 0xbb223240,0xe72b,0x11d0,0xa9,0xb4,0x00,0xaa,0x00,0xc0,0x99,0x3e); DEFINE_GUID(IID_IDirect3D7, 0xf5049e77,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8); DEFINE_GUID(IID_IDirect3DRampDevice, 0xF2086B20,0x259F,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56); DEFINE_GUID(IID_IDirect3DRGBDevice, 0xA4665C60,0x2673,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56); DEFINE_GUID(IID_IDirect3DHALDevice, 0x84E63dE0,0x46AA,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E); DEFINE_GUID(IID_IDirect3DMMXDevice, 0x881949a1,0xd6f3,0x11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29); DEFINE_GUID(IID_IDirect3DRefDevice, 0x50936643,0x13e9,0x11d1,0x89,0xaa,0x00,0xa0,0xc9,0x05,0x41,0x29); DEFINE_GUID(IID_IDirect3DTnLHalDevice, 0xf5049e78,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8); DEFINE_GUID(IID_IDirect3DNullDevice, 0x8767df22,0xbacc,0x11d1,0x89,0x69,0x00,0xa0,0xc9,0x06,0x29,0xa8); DEFINE_GUID(IID_IDirect3DDevice, 0x64108800,0x957d,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29); DEFINE_GUID(IID_IDirect3DDevice2, 0x93281501,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29); DEFINE_GUID(IID_IDirect3DDevice3, 0xb0ab3b60,0x33d7,0x11d1,0xa9,0x81,0x00,0xc0,0x4f,0xd7,0xb1,0x74); DEFINE_GUID(IID_IDirect3DDevice7, 0xf5049e79,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8); DEFINE_GUID(IID_IDirect3DTexture, 0x2CDCD9E0,0x25A0,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56); DEFINE_GUID(IID_IDirect3DTexture2, 0x93281502,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29); DEFINE_GUID(IID_IDirect3DLight, 0x4417C142,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E); DEFINE_GUID(IID_IDirect3DMaterial, 0x4417C144,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E); DEFINE_GUID(IID_IDirect3DMaterial2, 0x93281503,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29); DEFINE_GUID(IID_IDirect3DMaterial3, 0xca9c46f4,0xd3c5,0x11d1,0xb7,0x5a,0x00,0x60,0x08,0x52,0xb3,0x12); DEFINE_GUID(IID_IDirect3DExecuteBuffer, 0x4417C145,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E); DEFINE_GUID(IID_IDirect3DViewport, 0x4417C146,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E); DEFINE_GUID(IID_IDirect3DViewport2, 0x93281500,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29); DEFINE_GUID(IID_IDirect3DViewport3, 0xb0ab3b61,0x33d7,0x11d1,0xa9,0x81,0x00,0xc0,0x4f,0xd7,0xb1,0x74); DEFINE_GUID(IID_IDirect3DVertexBuffer, 0x7a503555,0x4a83,0x11d1,0xa5,0xdb,0x00,0xa0,0xc9,0x03,0x67,0xf8); DEFINE_GUID(IID_IDirect3DVertexBuffer7, 0xf5049e7d,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8); typedef struct IDirect3D *LPDIRECT3D; typedef struct IDirect3D2 *LPDIRECT3D2; typedef struct IDirect3D3 *LPDIRECT3D3; typedef struct IDirect3D7 *LPDIRECT3D7; typedef struct IDirect3DLight *LPDIRECT3DLIGHT; typedef struct IDirect3DDevice *LPDIRECT3DDEVICE; typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2; typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3; typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7; typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT; typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2; typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3; typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL; typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2; typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3; typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE; typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2; typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER; typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER; typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7; /* ******************************************************************** Error Codes ******************************************************************** */ #define D3D_OK DD_OK #define D3DERR_BADMAJORVERSION MAKE_DDHRESULT(700) #define D3DERR_BADMINORVERSION MAKE_DDHRESULT(701) #define D3DERR_INVALID_DEVICE MAKE_DDHRESULT(705) #define D3DERR_INITFAILED MAKE_DDHRESULT(706) #define D3DERR_DEVICEAGGREGATED MAKE_DDHRESULT(707) #define D3DERR_EXECUTE_CREATE_FAILED MAKE_DDHRESULT(710) #define D3DERR_EXECUTE_DESTROY_FAILED MAKE_DDHRESULT(711) #define D3DERR_EXECUTE_LOCK_FAILED MAKE_DDHRESULT(712) #define D3DERR_EXECUTE_UNLOCK_FAILED MAKE_DDHRESULT(713) #define D3DERR_EXECUTE_LOCKED MAKE_DDHRESULT(714) #define D3DERR_EXECUTE_NOT_LOCKED MAKE_DDHRESULT(715) #define D3DERR_EXECUTE_FAILED MAKE_DDHRESULT(716) #define D3DERR_EXECUTE_CLIPPED_FAILED MAKE_DDHRESULT(717) #define D3DERR_TEXTURE_NO_SUPPORT MAKE_DDHRESULT(720) #define D3DERR_TEXTURE_CREATE_FAILED MAKE_DDHRESULT(721) #define D3DERR_TEXTURE_DESTROY_FAILED MAKE_DDHRESULT(722) #define D3DERR_TEXTURE_LOCK_FAILED MAKE_DDHRESULT(723) #define D3DERR_TEXTURE_UNLOCK_FAILED MAKE_DDHRESULT(724) #define D3DERR_TEXTURE_LOAD_FAILED MAKE_DDHRESULT(725) #define D3DERR_TEXTURE_SWAP_FAILED MAKE_DDHRESULT(726) #define D3DERR_TEXTURE_LOCKED MAKE_DDHRESULT(727) #define D3DERR_TEXTURE_NOT_LOCKED MAKE_DDHRESULT(728) #define D3DERR_TEXTURE_GETSURF_FAILED MAKE_DDHRESULT(729) #define D3DERR_MATRIX_CREATE_FAILED MAKE_DDHRESULT(730) #define D3DERR_MATRIX_DESTROY_FAILED MAKE_DDHRESULT(731) #define D3DERR_MATRIX_SETDATA_FAILED MAKE_DDHRESULT(732) #define D3DERR_MATRIX_GETDATA_FAILED MAKE_DDHRESULT(733) #define D3DERR_SETVIEWPORTDATA_FAILED MAKE_DDHRESULT(734) #define D3DERR_INVALIDCURRENTVIEWPORT MAKE_DDHRESULT(735) #define D3DERR_INVALIDPRIMITIVETYPE MAKE_DDHRESULT(736) #define D3DERR_INVALIDVERTEXTYPE MAKE_DDHRESULT(737) #define D3DERR_TEXTURE_BADSIZE MAKE_DDHRESULT(738) #define D3DERR_INVALIDRAMPTEXTURE MAKE_DDHRESULT(739) #define D3DERR_MATERIAL_CREATE_FAILED MAKE_DDHRESULT(740) #define D3DERR_MATERIAL_DESTROY_FAILED MAKE_DDHRESULT(741) #define D3DERR_MATERIAL_SETDATA_FAILED MAKE_DDHRESULT(742) #define D3DERR_MATERIAL_GETDATA_FAILED MAKE_DDHRESULT(743) #define D3DERR_INVALIDPALETTE MAKE_DDHRESULT(744) #define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745) #define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY MAKE_DDHRESULT(746) #define D3DERR_SURFACENOTINVIDMEM MAKE_DDHRESULT(747) #define D3DERR_LIGHT_SET_FAILED MAKE_DDHRESULT(750) #define D3DERR_LIGHTHASVIEWPORT MAKE_DDHRESULT(751) #define D3DERR_LIGHTNOTINTHISVIEWPORT MAKE_DDHRESULT(752) #define D3DERR_SCENE_IN_SCENE MAKE_DDHRESULT(760) #define D3DERR_SCENE_NOT_IN_SCENE MAKE_DDHRESULT(761) #define D3DERR_SCENE_BEGIN_FAILED MAKE_DDHRESULT(762) #define D3DERR_SCENE_END_FAILED MAKE_DDHRESULT(763) #define D3DERR_INBEGIN MAKE_DDHRESULT(770) #define D3DERR_NOTINBEGIN MAKE_DDHRESULT(771) #define D3DERR_NOVIEWPORTS MAKE_DDHRESULT(772) #define D3DERR_VIEWPORTDATANOTSET MAKE_DDHRESULT(773) #define D3DERR_VIEWPORTHASNODEVICE MAKE_DDHRESULT(774) #define D3DERR_NOCURRENTVIEWPORT MAKE_DDHRESULT(775) #define D3DERR_INVALIDVERTEXFORMAT MAKE_DDHRESULT(2048) #define D3DERR_COLORKEYATTACHED MAKE_DDHRESULT(2050) #define D3DERR_VERTEXBUFFEROPTIMIZED MAKE_DDHRESULT(2060) #define D3DERR_VBUF_CREATE_FAILED MAKE_DDHRESULT(2061) #define D3DERR_VERTEXBUFFERLOCKED MAKE_DDHRESULT(2062) #define D3DERR_VERTEXBUFFERUNLOCKFAILED MAKE_DDHRESULT(2063) #define D3DERR_ZBUFFER_NOTPRESENT MAKE_DDHRESULT(2070) #define D3DERR_STENCILBUFFER_NOTPRESENT MAKE_DDHRESULT(2071) #define D3DERR_WRONGTEXTUREFORMAT MAKE_DDHRESULT(2072) #define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_DDHRESULT(2073) #define D3DERR_UNSUPPORTEDCOLORARG MAKE_DDHRESULT(2074) #define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_DDHRESULT(2075) #define D3DERR_UNSUPPORTEDALPHAARG MAKE_DDHRESULT(2076) #define D3DERR_TOOMANYOPERATIONS MAKE_DDHRESULT(2077) #define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_DDHRESULT(2078) #define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_DDHRESULT(2079) #define D3DERR_CONFLICTINGRENDERSTATE MAKE_DDHRESULT(2081) #define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_DDHRESULT(2082) #define D3DERR_TOOMANYPRIMITIVES MAKE_DDHRESULT(2083) #define D3DERR_INVALIDMATRIX MAKE_DDHRESULT(2084) #define D3DERR_TOOMANYVERTICES MAKE_DDHRESULT(2085) #define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_DDHRESULT(2086) #define D3DERR_INVALIDSTATEBLOCK MAKE_DDHRESULT(2100) #define D3DERR_INBEGINSTATEBLOCK MAKE_DDHRESULT(2101) #define D3DERR_NOTINBEGINSTATEBLOCK MAKE_DDHRESULT(2102) /* ******************************************************************** Enums ******************************************************************** */ #define D3DNEXT_NEXT __MSABI_LONG(0x01) #define D3DNEXT_HEAD __MSABI_LONG(0x02) #define D3DNEXT_TAIL __MSABI_LONG(0x04) #define D3DDP_WAIT __MSABI_LONG(0x00000001) #define D3DDP_OUTOFORDER __MSABI_LONG(0x00000002) #define D3DDP_DONOTCLIP __MSABI_LONG(0x00000004) #define D3DDP_DONOTUPDATEEXTENTS __MSABI_LONG(0x00000008) #define D3DDP_DONOTLIGHT __MSABI_LONG(0x00000010) /* ******************************************************************** Types and structures ******************************************************************** */ typedef DWORD D3DVIEWPORTHANDLE, *LPD3DVIEWPORTHANDLE; /***************************************************************************** * IDirect3D interface */ #undef INTERFACE #define INTERFACE IDirect3D DECLARE_INTERFACE_(IDirect3D,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D methods ***/ STDMETHOD(Initialize)(THIS_ REFIID riid) PURE; STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE; STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE; STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial **material, IUnknown *outer) PURE; STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport **viewport, IUnknown *outer) PURE; STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3D methods ***/ #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b) #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) #define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3D_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D_AddRef(p) (p)->AddRef() #define IDirect3D_Release(p) (p)->Release() /*** IDirect3D methods ***/ #define IDirect3D_Initialize(p,a) (p)->Initialize(a) #define IDirect3D_EnumDevices(p,a,b) (p)->EnumDevices(a,b) #define IDirect3D_CreateLight(p,a,b) (p)->CreateLight(a,b) #define IDirect3D_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3D_CreateViewport(p,a,b) (p)->CreateViewport(a,b) #define IDirect3D_FindDevice(p,a,b) (p)->FindDevice(a,b) #endif /***************************************************************************** * IDirect3D2 interface */ #define INTERFACE IDirect3D2 DECLARE_INTERFACE_(IDirect3D2,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D2 methods ***/ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE; STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE; STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial2 **material, IUnknown *outer) PURE; STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport2 **viewport, IUnknown *outer) PURE; STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE; STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface *surface, struct IDirect3DDevice2 **device) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3D2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3D2 methods ***/ #define IDirect3D2_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b) #define IDirect3D2_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) #define IDirect3D2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3D2_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) #define IDirect3D2_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) #define IDirect3D2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3D2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D2_AddRef(p) (p)->AddRef() #define IDirect3D2_Release(p) (p)->Release() /*** IDirect3D2 methods ***/ #define IDirect3D2_EnumDevices(p,a,b) (p)->EnumDevices(a,b) #define IDirect3D2_CreateLight(p,a,b) (p)->CreateLight(a,b) #define IDirect3D2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3D2_CreateViewport(p,a,b) (p)->CreateViewport(a,b) #define IDirect3D2_FindDevice(p,a,b) (p)->FindDevice(a,b) #define IDirect3D2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #endif /***************************************************************************** * IDirect3D3 interface */ #define INTERFACE IDirect3D3 DECLARE_INTERFACE_(IDirect3D3,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D3 methods ***/ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE; STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE; STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial3 **material, IUnknown *outer) PURE; STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport3 **viewport, IUnknown *outer) PURE; STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE; STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface4 *surface, struct IDirect3DDevice3 **device, IUnknown *outer) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ D3DVERTEXBUFFERDESC *desc, struct IDirect3DVertexBuffer **buffer, DWORD flags, IUnknown *outer) PURE; STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE; STDMETHOD(EvictManagedTextures)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3D3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3D3 methods ***/ #define IDirect3D3_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b) #define IDirect3D3_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) #define IDirect3D3_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3D3_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) #define IDirect3D3_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) #define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->lpVtbl->CreateDevice(p,a,b,c,d) #define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d) #define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c) #define IDirect3D3_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p) #else /*** IUnknown methods ***/ #define IDirect3D3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D3_AddRef(p) (p)->AddRef() #define IDirect3D3_Release(p) (p)->Release() /*** IDirect3D3 methods ***/ #define IDirect3D3_EnumDevices(p,a,b) (p)->EnumDevices(a,b) #define IDirect3D3_CreateLight(p,a,b) (p)->CreateLight(a,b) #define IDirect3D3_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3D3_CreateViewport(p,a,b) (p)->CreateViewport(a,b) #define IDirect3D3_FindDevice(p,a,b) (p)->FindDevice(a,b) #define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->CreateDevice(a,b,c,d) #define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->CreateVertexBuffer(a,b,c,d) #define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c) #define IDirect3D3_EvictManagedTextures(p) (p)->EvictManagedTextures() #endif /***************************************************************************** * IDirect3D7 interface */ #define INTERFACE IDirect3D7 DECLARE_INTERFACE_(IDirect3D7,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D7 methods ***/ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK7 cb, void *ctx) PURE; STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface7 *surface, struct IDirect3DDevice7 **device) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ D3DVERTEXBUFFERDESC *desc, struct IDirect3DVertexBuffer7 **buffer, DWORD flags) PURE; STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE; STDMETHOD(EvictManagedTextures)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3D7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D7_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3D3 methods ***/ #define IDirect3D7_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b) #define IDirect3D7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c) #define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c) #define IDirect3D7_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p) #else /*** IUnknown methods ***/ #define IDirect3D7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D7_AddRef(p) (p)->AddRef() #define IDirect3D7_Release(p) (p)->Release() /*** IDirect3D3 methods ***/ #define IDirect3D7_EnumDevices(p,a,b) (p)->EnumDevices(a,b) #define IDirect3D7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->CreateVertexBuffer(a,b,c) #define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c) #define IDirect3D7_EvictManagedTextures(p) (p)->EvictManagedTextures() #endif /***************************************************************************** * IDirect3DLight interface */ #define INTERFACE IDirect3DLight DECLARE_INTERFACE_(IDirect3DLight,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DLight methods ***/ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE; STDMETHOD(SetLight)(THIS_ D3DLIGHT *data) PURE; STDMETHOD(GetLight)(THIS_ D3DLIGHT *data) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DLight_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DLight_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DLight methods ***/ #define IDirect3DLight_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DLight_SetLight(p,a) (p)->lpVtbl->SetLight(p,a) #define IDirect3DLight_GetLight(p,a) (p)->lpVtbl->GetLight(p,a) #else /*** IUnknown methods ***/ #define IDirect3DLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DLight_AddRef(p) (p)->AddRef() #define IDirect3DLight_Release(p) (p)->Release() /*** IDirect3DLight methods ***/ #define IDirect3DLight_Initialize(p,a) (p)->Initialize(a) #define IDirect3DLight_SetLight(p,a) (p)->SetLight(a) #define IDirect3DLight_GetLight(p,a) (p)->GetLight(a) #endif /***************************************************************************** * IDirect3DMaterial interface */ #define INTERFACE IDirect3DMaterial DECLARE_INTERFACE_(IDirect3DMaterial,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DMaterial methods ***/ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE; STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE; STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice *device, D3DMATERIALHANDLE *handle) PURE; STDMETHOD(Reserve)(THIS) PURE; STDMETHOD(Unreserve)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DMaterial_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DMaterial_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DMaterial methods ***/ #define IDirect3DMaterial_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DMaterial_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DMaterial_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DMaterial_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #define IDirect3DMaterial_Reserve(p) (p)->lpVtbl->Reserve(p) #define IDirect3DMaterial_Unreserve(p) (p)->lpVtbl->Unreserve(p) #else /*** IUnknown methods ***/ #define IDirect3DMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DMaterial_AddRef(p) (p)->AddRef() #define IDirect3DMaterial_Release(p) (p)->Release() /*** IDirect3DMaterial methods ***/ #define IDirect3DMaterial_Initialize(p,a) (p)->Initialize(a) #define IDirect3DMaterial_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DMaterial_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DMaterial_GetHandle(p,a,b) (p)->GetHandle(a,b) #define IDirect3DMaterial_Reserve(p) (p)->Reserve() #define IDirect3DMaterial_Unreserve(p) (p)->Unreserve() #endif /***************************************************************************** * IDirect3DMaterial2 interface */ #define INTERFACE IDirect3DMaterial2 DECLARE_INTERFACE_(IDirect3DMaterial2,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DMaterial2 methods ***/ STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE; STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice2 *device, D3DMATERIALHANDLE *handle) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DMaterial2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DMaterial2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DMaterial2 methods ***/ #define IDirect3DMaterial2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DMaterial2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DMaterial2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DMaterial2_AddRef(p) (p)->AddRef() #define IDirect3DMaterial2_Release(p) (p)->Release() /*** IDirect3DMaterial2 methods ***/ #define IDirect3DMaterial2_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DMaterial2_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DMaterial2_GetHandle(p,a,b) (p)->GetHandle(a,b) #endif /***************************************************************************** * IDirect3DMaterial3 interface */ #define INTERFACE IDirect3DMaterial3 DECLARE_INTERFACE_(IDirect3DMaterial3,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DMaterial3 methods ***/ STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE; STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice3 *device, D3DMATERIALHANDLE *handle) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DMaterial3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DMaterial3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DMaterial3 methods ***/ #define IDirect3DMaterial3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DMaterial3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DMaterial3_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DMaterial3_AddRef(p) (p)->AddRef() #define IDirect3DMaterial3_Release(p) (p)->Release() /*** IDirect3DMaterial3 methods ***/ #define IDirect3DMaterial3_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DMaterial3_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DMaterial3_GetHandle(p,a,b) (p)->GetHandle(a,b) #endif /***************************************************************************** * IDirect3DTexture interface */ #define INTERFACE IDirect3DTexture DECLARE_INTERFACE_(IDirect3DTexture,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DTexture methods ***/ STDMETHOD(Initialize)(THIS_ struct IDirect3DDevice *device, IDirectDrawSurface *surface) PURE; STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice *device, D3DTEXTUREHANDLE *handle) PURE; STDMETHOD(PaletteChanged)(THIS_ DWORD dwStart, DWORD dwCount) PURE; STDMETHOD(Load)(THIS_ IDirect3DTexture *texture) PURE; STDMETHOD(Unload)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DTexture methods ***/ #define IDirect3DTexture_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirect3DTexture_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #define IDirect3DTexture_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b) #define IDirect3DTexture_Load(p,a) (p)->lpVtbl->Load(p,a) #define IDirect3DTexture_Unload(p) (p)->lpVtbl->Unload(p) #else /*** IUnknown methods ***/ #define IDirect3DTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture_AddRef(p) (p)->AddRef() #define IDirect3DTexture_Release(p) (p)->Release() /*** IDirect3DTexture methods ***/ #define IDirect3DTexture_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirect3DTexture_GetHandle(p,a,b) (p)->GetHandle(a,b) #define IDirect3DTexture_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b) #define IDirect3DTexture_Load(p,a) (p)->Load(a) #define IDirect3DTexture_Unload(p) (p)->Unload() #endif /***************************************************************************** * IDirect3DTexture2 interface */ #define INTERFACE IDirect3DTexture2 DECLARE_INTERFACE_(IDirect3DTexture2,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DTexture2 methods ***/ STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice2 *device, D3DTEXTUREHANDLE *handle) PURE; STDMETHOD(PaletteChanged)(THIS_ DWORD dwStart, DWORD dwCount) PURE; STDMETHOD(Load)(THIS_ IDirect3DTexture2 *texture) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DTexture2 methods ***/ #define IDirect3DTexture2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b) #define IDirect3DTexture2_Load(p,a) (p)->lpVtbl->Load(p,a) #else /*** IUnknown methods ***/ #define IDirect3DTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture2_AddRef(p) (p)->AddRef() #define IDirect3DTexture2_Release(p) (p)->Release() /*** IDirect3DTexture2 methods ***/ #define IDirect3DTexture2_GetHandle(p,a,b) (p)->GetHandle(a,b) #define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b) #define IDirect3DTexture2_Load(p,a) (p)->Load(a) #endif /***************************************************************************** * IDirect3DViewport interface */ #define INTERFACE IDirect3DViewport DECLARE_INTERFACE_(IDirect3DViewport,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DViewport methods ***/ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE; STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE; STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE; STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE; STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE; STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE; STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE; STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE; STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE; STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE; STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DViewport_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DViewport_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DViewport methods ***/ #define IDirect3DViewport_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DViewport_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DViewport_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d) #define IDirect3DViewport_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b) #define IDirect3DViewport_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a) #define IDirect3DViewport_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b) #define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a) #define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b) #define IDirect3DViewport_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c) #define IDirect3DViewport_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DViewport_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DViewport_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DViewport_AddRef(p) (p)->AddRef() #define IDirect3DViewport_Release(p) (p)->Release() /*** IDirect3DViewport methods ***/ #define IDirect3DViewport_Initialize(p,a) (p)->Initialize(a) #define IDirect3DViewport_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DViewport_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d) #define IDirect3DViewport_LightElements(p,a,b) (p)->LightElements(a,b) #define IDirect3DViewport_SetBackground(p,a) (p)->SetBackground(a) #define IDirect3DViewport_GetBackground(p,a,b) (p)->GetBackground(a,b) #define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a) #define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b) #define IDirect3DViewport_Clear(p,a,b,c) (p)->Clear(a,b,c) #define IDirect3DViewport_AddLight(p,a) (p)->AddLight(a) #define IDirect3DViewport_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DViewport_NextLight(p,a,b,c) (p)->NextLight(a,b,c) #endif /***************************************************************************** * IDirect3DViewport2 interface */ #define INTERFACE IDirect3DViewport2 DECLARE_INTERFACE_(IDirect3DViewport2,IDirect3DViewport) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DViewport methods ***/ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE; STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE; STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE; STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE; STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE; STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE; STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE; STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE; STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE; STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE; STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE; /*** IDirect3DViewport2 methods ***/ STDMETHOD(GetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE; STDMETHOD(SetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DViewport2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DViewport2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3Viewport methods ***/ #define IDirect3DViewport2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DViewport2_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DViewport2_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d) #define IDirect3DViewport2_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b) #define IDirect3DViewport2_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a) #define IDirect3DViewport2_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b) #define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a) #define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b) #define IDirect3DViewport2_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c) #define IDirect3DViewport2_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DViewport2_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DViewport2_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c) /*** IDirect3DViewport2 methods ***/ #define IDirect3DViewport2_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a) #define IDirect3DViewport2_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a) #else /*** IUnknown methods ***/ #define IDirect3DViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DViewport2_AddRef(p) (p)->AddRef() #define IDirect3DViewport2_Release(p) (p)->Release() /*** IDirect3Viewport methods ***/ #define IDirect3DViewport2_Initialize(p,a) (p)->Initialize(a) #define IDirect3DViewport2_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DViewport2_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d) #define IDirect3DViewport2_LightElements(p,a,b) (p)->LightElements(a,b) #define IDirect3DViewport2_SetBackground(p,a) (p)->SetBackground(a) #define IDirect3DViewport2_GetBackground(p,a,b) (p)->GetBackground(a,b) #define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a) #define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b) #define IDirect3DViewport2_Clear(p,a,b,c) (p)->Clear(a,b,c) #define IDirect3DViewport2_AddLight(p,a) (p)->AddLight(a) #define IDirect3DViewport2_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DViewport2_NextLight(p,a,b,c) (p)->NextLight(a,b,c) /*** IDirect3DViewport2 methods ***/ #define IDirect3DViewport2_GetViewport2(p,a) (p)->GetViewport2(a) #define IDirect3DViewport2_SetViewport2(p,a) (p)->SetViewport2(a) #endif /***************************************************************************** * IDirect3DViewport3 interface */ #define INTERFACE IDirect3DViewport3 DECLARE_INTERFACE_(IDirect3DViewport3,IDirect3DViewport2) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DViewport methods ***/ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE; STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE; STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE; STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE; STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE; STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE; STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE; STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE; STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE; STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE; STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE; /*** IDirect3DViewport2 methods ***/ STDMETHOD(GetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE; STDMETHOD(SetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE; /*** IDirect3DViewport3 methods ***/ STDMETHOD(SetBackgroundDepth2)(THIS_ IDirectDrawSurface4 *surface) PURE; STDMETHOD(GetBackgroundDepth2)(THIS_ IDirectDrawSurface4 **surface, BOOL *valid) PURE; STDMETHOD(Clear2)(THIS_ DWORD count, D3DRECT *rects, DWORD flags, DWORD color, D3DVALUE z, DWORD stencil) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DViewport3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DViewport3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DViewport3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3Viewport methods ***/ #define IDirect3DViewport3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DViewport3_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DViewport3_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d) #define IDirect3DViewport3_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b) #define IDirect3DViewport3_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a) #define IDirect3DViewport3_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b) #define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a) #define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b) #define IDirect3DViewport3_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c) #define IDirect3DViewport3_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DViewport3_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DViewport3_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c) /*** IDirect3DViewport2 methods ***/ #define IDirect3DViewport3_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a) #define IDirect3DViewport3_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a) /*** IDirect3DViewport3 methods ***/ #define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->lpVtbl->SetBackgroundDepth2(p,a) #define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->lpVtbl->GetBackgroundDepth2(p,a,b) #define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->lpVtbl->Clear2(p,a,b,c,d,e,f) #else /*** IUnknown methods ***/ #define IDirect3DViewport3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DViewport3_AddRef(p) (p)->AddRef() #define IDirect3DViewport3_Release(p) (p)->Release() /*** IDirect3Viewport methods ***/ #define IDirect3DViewport3_Initialize(p,a) (p)->Initialize(a) #define IDirect3DViewport3_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DViewport3_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d) #define IDirect3DViewport3_LightElements(p,a,b) (p)->LightElements(a,b) #define IDirect3DViewport3_SetBackground(p,a) (p)->SetBackground(a) #define IDirect3DViewport3_GetBackground(p,a,b) (p)->GetBackground(a,b) #define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a) #define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b) #define IDirect3DViewport3_Clear(p,a,b,c) (p)->Clear(a,b,c) #define IDirect3DViewport3_AddLight(p,a) (p)->AddLight(a) #define IDirect3DViewport3_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DViewport3_NextLight(p,a,b,c) (p)->NextLight(a,b,c) /*** IDirect3DViewport2 methods ***/ #define IDirect3DViewport3_GetViewport2(p,a) (p)->GetViewport2(a) #define IDirect3DViewport3_SetViewport2(p,a) (p)->SetViewport2(a) /*** IDirect3DViewport3 methods ***/ #define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->SetBackgroundDepth2(a) #define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->GetBackgroundDepth2(a,b) #define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->Clear2(a,b,c,d,e,f) #endif /***************************************************************************** * IDirect3DExecuteBuffer interface */ #define INTERFACE IDirect3DExecuteBuffer DECLARE_INTERFACE_(IDirect3DExecuteBuffer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DExecuteBuffer methods ***/ STDMETHOD(Initialize)(THIS_ struct IDirect3DDevice *device, D3DEXECUTEBUFFERDESC *desc) PURE; STDMETHOD(Lock)(THIS_ D3DEXECUTEBUFFERDESC *desc) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(SetExecuteData)(THIS_ D3DEXECUTEDATA *data) PURE; STDMETHOD(GetExecuteData)(THIS_ D3DEXECUTEDATA *data) PURE; STDMETHOD(Validate)(THIS_ DWORD *offset, LPD3DVALIDATECALLBACK cb, void *ctx, DWORD reserved) PURE; STDMETHOD(Optimize)(THIS_ DWORD dwDummy) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DExecuteBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DExecuteBuffer_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DExecuteBuffer methods ***/ #define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirect3DExecuteBuffer_Lock(p,a) (p)->lpVtbl->Lock(p,a) #define IDirect3DExecuteBuffer_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->lpVtbl->SetExecuteData(p,a) #define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->lpVtbl->GetExecuteData(p,a) #define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->lpVtbl->Validate(p,a,b,c,d) #define IDirect3DExecuteBuffer_Optimize(p,a) (p)->lpVtbl->Optimize(p,a) #else /*** IUnknown methods ***/ #define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DExecuteBuffer_AddRef(p) (p)->AddRef() #define IDirect3DExecuteBuffer_Release(p) (p)->Release() /*** IDirect3DExecuteBuffer methods ***/ #define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirect3DExecuteBuffer_Lock(p,a) (p)->Lock(a) #define IDirect3DExecuteBuffer_Unlock(p) (p)->Unlock() #define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->SetExecuteData(a) #define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->GetExecuteData(a) #define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->Validate(a,b,c,d) #define IDirect3DExecuteBuffer_Optimize(p,a) (p)->Optimize(a) #endif /***************************************************************************** * IDirect3DDevice interface */ #define INTERFACE IDirect3DDevice DECLARE_INTERFACE_(IDirect3DDevice,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice methods ***/ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d, GUID *guid, D3DDEVICEDESC *desc) PURE; STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE; STDMETHOD(SwapTextureHandles)(THIS_ IDirect3DTexture *tex1, IDirect3DTexture *tex2) PURE; STDMETHOD(CreateExecuteBuffer)(THIS_ D3DEXECUTEBUFFERDESC *desc, IDirect3DExecuteBuffer **buffer, IUnknown *outer) PURE; STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE; STDMETHOD(Execute)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport, DWORD flags) PURE; STDMETHOD(AddViewport)(THIS_ IDirect3DViewport *viewport) PURE; STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport *viewport) PURE; STDMETHOD(NextViewport)(THIS_ IDirect3DViewport *ref, IDirect3DViewport **viewport, DWORD flags) PURE; STDMETHOD(Pick)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport, DWORD flags, D3DRECT *rect) PURE; STDMETHOD(GetPickRecords)(THIS_ DWORD *count, D3DPICKRECORD *records) PURE; STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK cb, void *ctx) PURE; STDMETHOD(CreateMatrix)(THIS_ D3DMATRIXHANDLE *matrix) PURE; STDMETHOD(SetMatrix)(THIS_ D3DMATRIXHANDLE handle, D3DMATRIX *matrix) PURE; STDMETHOD(GetMatrix)(THIS_ D3DMATRIXHANDLE handle, D3DMATRIX *matrix) PURE; STDMETHOD(DeleteMatrix)(THIS_ D3DMATRIXHANDLE D3DMatHandle) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D **d3d) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DDevice methods ***/ #define IDirect3DDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirect3DDevice_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b) #define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->lpVtbl->CreateExecuteBuffer(p,a,b,c) #define IDirect3DDevice_GetStats(p,a) (p)->lpVtbl->GetStats(p,a) #define IDirect3DDevice_Execute(p,a,b,c) (p)->lpVtbl->Execute(p,a,b,c) #define IDirect3DDevice_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a) #define IDirect3DDevice_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a) #define IDirect3DDevice_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c) #define IDirect3DDevice_Pick(p,a,b,c,d) (p)->lpVtbl->Pick(p,a,b,c,d) #define IDirect3DDevice_GetPickRecords(p,a,b) (p)->lpVtbl->GetPickRecords(p,a,b) #define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b) #define IDirect3DDevice_CreateMatrix(p,a) (p)->lpVtbl->CreateMatrix(p,a) #define IDirect3DDevice_SetMatrix(p,a,b) (p)->lpVtbl->SetMatrix(p,a,b) #define IDirect3DDevice_GetMatrix(p,a,b) (p)->lpVtbl->GetMatrix(p,a,b) #define IDirect3DDevice_DeleteMatrix(p,a) (p)->lpVtbl->DeleteMatrix(p,a) #define IDirect3DDevice_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #else /*** IUnknown methods ***/ #define IDirect3DDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice_AddRef(p) (p)->AddRef() #define IDirect3DDevice_Release(p) (p)->Release() /*** IDirect3DDevice methods ***/ #define IDirect3DDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirect3DDevice_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b) #define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->CreateExecuteBuffer(a,b,c) #define IDirect3DDevice_GetStats(p,a) (p)->GetStats(a) #define IDirect3DDevice_Execute(p,a,b,c) (p)->Execute(a,b,c) #define IDirect3DDevice_AddViewport(p,a) (p)->AddViewport(a) #define IDirect3DDevice_DeleteViewport(p,a) (p)->DeleteViewport(a) #define IDirect3DDevice_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c) #define IDirect3DDevice_Pick(p,a,b,c,d) (p)->Pick(a,b,c,d) #define IDirect3DDevice_GetPickRecords(p,a,b) (p)->GetPickRecords(a,b) #define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b) #define IDirect3DDevice_CreateMatrix(p,a) (p)->CreateMatrix(a) #define IDirect3DDevice_SetMatrix(p,a,b) (p)->SetMatrix(a,b) #define IDirect3DDevice_GetMatrix(p,a,b) (p)->GetMatrix(a,b) #define IDirect3DDevice_DeleteMatrix(p,a) (p)->DeleteMatrix(a) #define IDirect3DDevice_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice_EndScene(p) (p)->EndScene() #define IDirect3DDevice_GetDirect3D(p,a) (p)->GetDirect3D(a) #endif /***************************************************************************** * IDirect3DDevice2 interface */ #define INTERFACE IDirect3DDevice2 DECLARE_INTERFACE_(IDirect3DDevice2,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice2 methods ***/ STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE; STDMETHOD(SwapTextureHandles)(THIS_ IDirect3DTexture2 *tex1, IDirect3DTexture2 *tex2) PURE; STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE; STDMETHOD(AddViewport)(THIS_ IDirect3DViewport2 *viewport) PURE; STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport2 *viewport) PURE; STDMETHOD(NextViewport)(THIS_ IDirect3DViewport2 *ref, IDirect3DViewport2 **viewport, DWORD flags) PURE; STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK cb, void *ctx) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D2 **d3d) PURE; /*** DrawPrimitive API ***/ STDMETHOD(SetCurrentViewport)(THIS_ IDirect3DViewport2 *viewport) PURE; STDMETHOD(GetCurrentViewport)(THIS_ IDirect3DViewport2 **viewport) PURE; STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface *surface, DWORD flags) PURE; STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface **surface) PURE; STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE d3dpt,D3DVERTEXTYPE dwVertexTypeDesc,DWORD dwFlags) PURE; STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type, void *vertices, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(Vertex)(THIS_ void *vertex) PURE; STDMETHOD(Index)(THIS_ WORD wVertexIndex) PURE; STDMETHOD(End)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE; STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, LPDWORD lpdwLightState) PURE; STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type, void *vertices, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type, void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE; STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DDevice2 methods ***/ #define IDirect3DDevice2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b) #define IDirect3DDevice2_GetStats(p,a) (p)->lpVtbl->GetStats(p,a) #define IDirect3DDevice2_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a) #define IDirect3DDevice2_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a) #define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c) #define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b) #define IDirect3DDevice2_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice2_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice2_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a) #define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a) #define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice2_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a) #define IDirect3DDevice2_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c) #define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e) #define IDirect3DDevice2_Vertex(p,a) (p)->lpVtbl->Vertex(p,a) #define IDirect3DDevice2_Index(p,a) (p)->lpVtbl->Index(p,a) #define IDirect3DDevice2_End(p,a) (p)->lpVtbl->End(p,a) #define IDirect3DDevice2_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice2_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice2_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b) #define IDirect3DDevice2_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b) #define IDirect3DDevice2_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice2_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e) #define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g) #define IDirect3DDevice2_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice2_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #else /*** IUnknown methods ***/ #define IDirect3DDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice2_AddRef(p) (p)->AddRef() #define IDirect3DDevice2_Release(p) (p)->Release() /*** IDirect3DDevice2 methods ***/ #define IDirect3DDevice2_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b) #define IDirect3DDevice2_GetStats(p,a) (p)->GetStats(a) #define IDirect3DDevice2_AddViewport(p,a) (p)->AddViewport(a) #define IDirect3DDevice2_DeleteViewport(p,a) (p)->DeleteViewport(a) #define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c) #define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b) #define IDirect3DDevice2_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice2_EndScene(p) (p)->EndScene() #define IDirect3DDevice2_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a) #define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a) #define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice2_GetRenderTarget(p,a) (p)->GetRenderTarget(a) #define IDirect3DDevice2_Begin(p,a,b,c) (p)->Begin(a,b,c) #define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e) #define IDirect3DDevice2_Vertex(p,a) (p)->Vertex(a) #define IDirect3DDevice2_Index(p,a) (p)->Index(a) #define IDirect3DDevice2_End(p,a) (p)->End(a) #define IDirect3DDevice2_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice2_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice2_GetLightState(p,a,b) (p)->GetLightState(a,b) #define IDirect3DDevice2_SetLightState(p,a,b) (p)->SetLightState(a,b) #define IDirect3DDevice2_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice2_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e) #define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g) #define IDirect3DDevice2_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice2_GetClipStatus(p,a) (p)->GetClipStatus(a) #endif /***************************************************************************** * IDirect3DDevice3 interface */ #define INTERFACE IDirect3DDevice3 DECLARE_INTERFACE_(IDirect3DDevice3,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice3 methods ***/ STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE; STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE; STDMETHOD(AddViewport)(THIS_ IDirect3DViewport3 *viewport) PURE; STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport3 *viewport) PURE; STDMETHOD(NextViewport)(THIS_ IDirect3DViewport3 *ref, IDirect3DViewport3 **viewport, DWORD flags) PURE; STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D3 **d3d) PURE; /*** DrawPrimitive API ***/ STDMETHOD(SetCurrentViewport)(THIS_ IDirect3DViewport3 *viewport) PURE; STDMETHOD(GetCurrentViewport)(THIS_ IDirect3DViewport3 **viewport) PURE; STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface4 *surface, DWORD flags) PURE; STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface4 **surface) PURE; STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE d3dptPrimitiveType,DWORD dwVertexTypeDesc, DWORD dwFlags) PURE; STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf, void *vertices, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(Vertex)(THIS_ void *vertex) PURE; STDMETHOD(Index)(THIS_ WORD wVertexIndex) PURE; STDMETHOD(End)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE; STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, LPDWORD lpdwLightState) PURE; STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD vertex_type, void *vertices, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf, void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE; STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE; STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf, D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf, D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE; STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer *vb, DWORD start_vertex, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer *vb, WORD *indices, DWORD index_count, DWORD flags) PURE; STDMETHOD(ComputeSphereVisibility)(THIS_ D3DVECTOR *centers, D3DVALUE *radii, DWORD sphere_count, DWORD flags, DWORD *ret) PURE; STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirect3DTexture2 **texture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirect3DTexture2 *texture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,LPDWORD lpdwState) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,DWORD dwState) PURE; STDMETHOD(ValidateDevice)(THIS_ LPDWORD lpdwPasses) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DDevice3 methods ***/ #define IDirect3DDevice3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirect3DDevice3_GetStats(p,a) (p)->lpVtbl->GetStats(p,a) #define IDirect3DDevice3_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a) #define IDirect3DDevice3_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a) #define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c) #define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b) #define IDirect3DDevice3_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice3_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice3_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a) #define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a) #define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice3_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a) #define IDirect3DDevice3_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c) #define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e) #define IDirect3DDevice3_Vertex(p,a) (p)->lpVtbl->Vertex(p,a) #define IDirect3DDevice3_Index(p,a) (p)->lpVtbl->Index(p,a) #define IDirect3DDevice3_End(p,a) (p)->lpVtbl->End(p,a) #define IDirect3DDevice3_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice3_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice3_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b) #define IDirect3DDevice3_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b) #define IDirect3DDevice3_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice3_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g) #define IDirect3DDevice3_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice3_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) #define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e) #define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e) #define IDirect3DDevice3_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice3_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice3_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #else /*** IUnknown methods ***/ #define IDirect3DDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice3_AddRef(p) (p)->AddRef() #define IDirect3DDevice3_Release(p) (p)->Release() /*** IDirect3DDevice3 methods ***/ #define IDirect3DDevice3_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirect3DDevice3_GetStats(p,a) (p)->GetStats(a) #define IDirect3DDevice3_AddViewport(p,a) (p)->AddViewport(a) #define IDirect3DDevice3_DeleteViewport(p,a) (p)->DeleteViewport(a) #define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c) #define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b) #define IDirect3DDevice3_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice3_EndScene(p) (p)->EndScene() #define IDirect3DDevice3_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a) #define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a) #define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice3_GetRenderTarget(p,a) (p)->GetRenderTarget(a) #define IDirect3DDevice3_Begin(p,a,b,c) (p)->Begin(a,b,c) #define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e) #define IDirect3DDevice3_Vertex(p,a) (p)->Vertex(a) #define IDirect3DDevice3_Index(p,a) (p)->Index(a) #define IDirect3DDevice3_End(p,a) (p)->End(a) #define IDirect3DDevice3_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice3_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice3_GetLightState(p,a,b) (p)->GetLightState(a,b) #define IDirect3DDevice3_SetLightState(p,a,b) (p)->SetLightState(a,b) #define IDirect3DDevice3_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice3_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g) #define IDirect3DDevice3_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice3_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g) #define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e) #define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e) #define IDirect3DDevice3_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice3_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice3_ValidateDevice(p,a) (p)->ValidateDevice(a) #endif /***************************************************************************** * IDirect3DDevice7 interface */ #define INTERFACE IDirect3DDevice7 DECLARE_INTERFACE_(IDirect3DDevice7,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice7 methods ***/ STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC7 *desc) PURE; STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D7 **d3d) PURE; STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface7 *surface, DWORD flags) PURE; STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface7 **surface) PURE; STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags, D3DCOLOR color, D3DVALUE z, DWORD stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT7 *data) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT7 *data) PURE; STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL7 *data) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL7 *data) PURE; STDMETHOD(SetLight)(THIS_ DWORD idx, D3DLIGHT7 *data) PURE; STDMETHOD(GetLight)(THIS_ DWORD idx, D3DLIGHT7 *data) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ LPDWORD lpdwBlockHandle) PURE; STDMETHOD(PreLoad)(THIS_ IDirectDrawSurface7 *surface) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf, void *vertices, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf, void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE; STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE; STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf, D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf, D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE; STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer7 *vb, DWORD start_vertex, DWORD vertex_count, DWORD flags) PURE; STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer7 *vb, DWORD start_vertex, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE; STDMETHOD(ComputeSphereVisibility)(THIS_ D3DVECTOR *centers, D3DVALUE *radii, DWORD sphere_count, DWORD flags, DWORD *ret) PURE; STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirectDrawSurface7 **surface) PURE; STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirectDrawSurface7 *surface) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,LPDWORD lpdwState) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,DWORD dwState) PURE; STDMETHOD(ValidateDevice)(THIS_ LPDWORD lpdwPasses) PURE; STDMETHOD(ApplyStateBlock)(THIS_ DWORD dwBlockHandle) PURE; STDMETHOD(CaptureStateBlock)(THIS_ DWORD dwBlockHandle) PURE; STDMETHOD(DeleteStateBlock)(THIS_ DWORD dwBlockHandle) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE d3dsbType,LPDWORD lpdwBlockHandle) PURE; STDMETHOD(Load)(THIS_ IDirectDrawSurface7 *dst_surface, POINT *dst_point, IDirectDrawSurface7 *src_surface, RECT *src_rect, DWORD flags) PURE; STDMETHOD(LightEnable)(THIS_ DWORD dwLightIndex,BOOL bEnable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD dwLightIndex,BOOL *pbEnable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD dwIndex,D3DVALUE *pPlaneEquation) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD dwIndex,D3DVALUE *pPlaneEquation) PURE; STDMETHOD(GetInfo)(THIS_ DWORD info_id, void *info, DWORD info_size) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice7_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DDevice7 methods ***/ #define IDirect3DDevice7_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b) #define IDirect3DDevice7_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice7_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice7_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice7_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a) #define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice7_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice7_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice7_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice7_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice7_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice7_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice7_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice7_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice7_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice7_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice7_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice7_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice7_PreLoad(p,a) (p)->lpVtbl->PreLoad(p,a) #define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g) #define IDirect3DDevice7_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice7_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) #define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) #define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e) #define IDirect3DDevice7_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice7_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice7_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a) #define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a) #define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a) #define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DDevice7_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice7_AddRef(p) (p)->AddRef() #define IDirect3DDevice7_Release(p) (p)->Release() /*** IDirect3DDevice7 methods ***/ #define IDirect3DDevice7_GetCaps(p,a) (p)->GetCaps(a) #define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b) #define IDirect3DDevice7_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice7_EndScene(p) (p)->EndScene() #define IDirect3DDevice7_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice7_GetRenderTarget(p,a) (p)->GetRenderTarget(a) #define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice7_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice7_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice7_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice7_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice7_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice7_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice7_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice7_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice7_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice7_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice7_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice7_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice7_PreLoad(p,a) (p)->PreLoad(a) #define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g) #define IDirect3DDevice7_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice7_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g) #define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e,f,g) #define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e) #define IDirect3DDevice7_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice7_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice7_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a) #define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a) #define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a) #define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DDevice7_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c) #endif /***************************************************************************** * IDirect3DVertexBuffer interface */ #define INTERFACE IDirect3DVertexBuffer DECLARE_INTERFACE_(IDirect3DVertexBuffer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexBuffer methods ***/ STDMETHOD(Lock)(THIS_ DWORD flags, void **data, DWORD *data_size) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(ProcessVertices)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count, IDirect3DVertexBuffer *src_buffer, DWORD src_idx, IDirect3DDevice3 *device, DWORD flags) PURE; STDMETHOD(GetVertexBufferDesc)(THIS_ D3DVERTEXBUFFERDESC *desc) PURE; STDMETHOD(Optimize)(THIS_ IDirect3DDevice3 *device, DWORD flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexBuffer methods ***/ #define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c) #define IDirect3DVertexBuffer_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g) #define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a) #define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer_Release(p) (p)->Release() /*** IDirect3DVertexBuffer methods ***/ #define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->Lock(a,b,c) #define IDirect3DVertexBuffer_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g) #define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a) #define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->Optimize(a,b) #endif /***************************************************************************** * IDirect3DVertexBuffer7 interface */ #define INTERFACE IDirect3DVertexBuffer7 DECLARE_INTERFACE_(IDirect3DVertexBuffer7,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexBuffer7 methods ***/ STDMETHOD(Lock)(THIS_ DWORD flags, void **data, DWORD *data_size) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(ProcessVertices)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count, IDirect3DVertexBuffer7 *src_buffer, DWORD src_idx, IDirect3DDevice7 *device, DWORD flags) PURE; STDMETHOD(GetVertexBufferDesc)(THIS_ D3DVERTEXBUFFERDESC *desc) PURE; STDMETHOD(Optimize)(THIS_ IDirect3DDevice7 *device, DWORD flags) PURE; STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count, D3DDRAWPRIMITIVESTRIDEDDATA *data, DWORD fvf, IDirect3DDevice7 *device, DWORD flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer7_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexBuffer7 methods ***/ #define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c) #define IDirect3DVertexBuffer7_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g) #define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a) #define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b) #define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVerticesStrided(p,a,b,c,d,e,f,g) #else /*** IUnknown methods ***/ #define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer7_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer7_Release(p) (p)->Release() /*** IDirect3DVertexBuffer7 methods ***/ #define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->Lock(a,b,c) #define IDirect3DVertexBuffer7_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g) #define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a) #define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->Optimize(a,b) #define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->ProcessVerticesStrided(a,b,c,d,e,f,g) #endif #endif /* __WINE_D3D_H */ ================================================ FILE: wine/windows/d3d10.idl ================================================ /* * Copyright 2007 Andras Kovacs * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi.idl"; import "d3dcommon.idl"; cpp_quote("#ifndef _D3D10_CONSTANTS") cpp_quote("#define _D3D10_CONSTANTS") const float D3D10_DEFAULT_BLEND_FACTOR_ALPHA = 1.0; const float D3D10_DEFAULT_BLEND_FACTOR_BLUE = 1.0; const float D3D10_DEFAULT_BLEND_FACTOR_GREEN = 1.0; const float D3D10_DEFAULT_BLEND_FACTOR_RED = 1.0; const float D3D10_DEFAULT_BORDER_COLOR_COMPONENT = 0.0; const float D3D10_DEFAULT_SLOPE_SCALED_DEPTH_BIAS = 0.0; const float D3D10_DEFAULT_DEPTH_BIAS_CLAMP = 0.0; const float D3D10_DEFAULT_MAX_ANISOTROPY = 16.0; const float D3D10_DEFAULT_MIP_LOD_BIAS = 0.0; const float D3D10_DEFAULT_VIEWPORT_MAX_DEPTH = 0.0; const float D3D10_DEFAULT_VIEWPORT_MIN_DEPTH = 0.0; const float D3D10_FLOAT16_FUSED_TOLERANCE_IN_ULP = 0.6; const float D3D10_FLOAT32_MAX = 3.402823466e+38; const float D3D10_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP = 0.6; const float D3D10_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR = 2.4; const float D3D10_FLOAT_TO_SRGB_EXPONENT_NUMERATOR = 1.0; const float D3D10_FLOAT_TO_SRGB_OFFSET = 0.055; const float D3D10_FLOAT_TO_SRGB_SCALE_1 = 12.92; const float D3D10_FLOAT_TO_SRGB_SCALE_2 = 1.055; const float D3D10_FLOAT_TO_SRGB_THRESHOLD = 0.0031308; const float D3D10_FTOI_INSTRUCTION_MAX_INPUT = 2147483647.999; const float D3D10_FTOI_INSTRUCTION_MIN_INPUT = -2147483648.999; const float D3D10_FTOU_INSTRUCTION_MAX_INPUT = 4294967295.999; const float D3D10_FTOU_INSTRUCTION_MIN_INPUT = 0.0; const float D3D10_LINEAR_GAMMA = 1.0; const float D3D10_MAX_BORDER_COLOR_COMPONENT = 1.0; const float D3D10_MAX_DEPTH = 1.0; const float D3D10_MAX_POSITION_VALUE = 3.402823466e+34; const float D3D10_MIN_BORDER_COLOR_COMPONENT = 0.0; const float D3D10_MIN_DEPTH = 0.0; const float D3D10_MIP_LOD_BIAS_MAX = 15.99; const float D3D10_MIP_LOD_BIAS_MIN = -16.0; const float D3D10_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0.5; const float D3D10_MULTISAMPLE_ANTIALIAS_LINE_WIDTH = 1.4; const float D3D10_SRGB_GAMMA = 2.2; const float D3D10_SRGB_TO_FLOAT_DENOMINATOR_1 = 12.92; const float D3D10_SRGB_TO_FLOAT_DENOMINATOR_2 = 1.055; const float D3D10_SRGB_TO_FLOAT_EXPONENT = 2.4; const float D3D10_SRGB_TO_FLOAT_OFFSET = 0.055; const float D3D10_SRGB_TO_FLOAT_THRESHOLD = 0.04045; const float D3D10_SRGB_TO_FLOAT_TOLERANCE_IN_ULP = 0.5; const float D3D10_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0.0; const float D3D_SPEC_VERSION = 1.050005; const unsigned int D3D10_16BIT_INDEX_STRIP_CUT_VALUE = 0xffff; const unsigned int D3D10_32BIT_INDEX_STRIP_CUT_VALUE = 0xffffffff; const unsigned int D3D10_8BIT_INDEX_STRIP_CUT_VALUE = 0xff; const unsigned int D3D10_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT = 9; const unsigned int D3D10_CLIP_OR_CULL_DISTANCE_COUNT = 8; const unsigned int D3D10_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT = 2; const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14; const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4; const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15; const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4; const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15; const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1; const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1; const unsigned int D3D10_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64; const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4; const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1; const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1; const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1; const unsigned int D3D10_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1; const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128; const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1; const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1; const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128; const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1; const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16; const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1; const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1; const unsigned int D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT = 16; const unsigned int D3D10_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32; const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4; const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COUNT = 4096; const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3; const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3; const unsigned int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10; const int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10; const int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8; const unsigned int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7; const unsigned int D3D10_DEFAULT_DEPTH_BIAS = 0; const unsigned int D3D10_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0; const unsigned int D3D10_DEFAULT_SAMPLE_MASK = 0xffffffff; const unsigned int D3D10_DEFAULT_SCISSOR_ENDX = 0; const unsigned int D3D10_DEFAULT_SCISSOR_ENDY = 0; const unsigned int D3D10_DEFAULT_SCISSOR_STARTX = 0; const unsigned int D3D10_DEFAULT_SCISSOR_STARTY = 0; const unsigned int D3D10_DEFAULT_STENCIL_READ_MASK = 0xff; const unsigned int D3D10_DEFAULT_STENCIL_REFERENCE = 0; const unsigned int D3D10_DEFAULT_STENCIL_WRITE_MASK = 0xff; const unsigned int D3D10_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0; const unsigned int D3D10_DEFAULT_VIEWPORT_HEIGHT = 0; const unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTX = 0; const unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTY = 0; const unsigned int D3D10_DEFAULT_VIEWPORT_WIDTH = 0; const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS = 1; const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COUNT = 1; const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST = 2; const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS = 1; const unsigned int D3D10_GS_INPUT_REGISTER_COMPONENTS = 4; const unsigned int D3D10_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT =32; const unsigned int D3D10_GS_INPUT_REGISTER_COUNT = 16; const unsigned int D3D10_GS_INPUT_REGISTER_READS_PER_INST = 2; const unsigned int D3D10_GS_INPUT_REGISTER_READ_PORTS = 1; const unsigned int D3D10_GS_INPUT_REGISTER_VERTICES = 6; const unsigned int D3D10_GS_OUTPUT_ELEMENTS = 32; const unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENTS = 4; const unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_GS_OUTPUT_REGISTER_COUNT = 32; const unsigned int D3D10_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES = 0; const unsigned int D3D10_IA_DEFAULT_PRIMITIVE_TOPOLOGY = 0; const unsigned int D3D10_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES = 0; const unsigned int D3D10_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT = 1; const unsigned int D3D10_IA_INSTANCE_ID_BIT_COUNT = 32; const unsigned int D3D10_IA_INTEGER_ARITHMETIC_BIT_COUNT = 32; const unsigned int D3D10_IA_PRIMITIVE_ID_BIT_COUNT = 32; const unsigned int D3D10_IA_VERTEX_ID_BIT_COUNT = 32; const unsigned int D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 16; const unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 64; const unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 16; const unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_QUOTIENT = 0xffffffff; const unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_REMAINDER = 0xffffffff; const unsigned int D3D10_MAX_MAXANISOTROPY = 16; const unsigned int D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT = 32; const unsigned int D3D10_MAX_TEXTURE_DIMENSION_2_TO_EXP = 17; const unsigned int D3D10_MIN_MAXANISOTROPY = 0; const unsigned int D3D10_MIP_LOD_FRACTIONAL_BIT_COUNT = 6; const unsigned int D3D10_MIP_LOD_RANGE_BIT_COUNT = 8; const unsigned int D3D10_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT = 0; const unsigned int D3D10_PIXEL_ADDRESS_RANGE_BIT_COUNT = 13; const unsigned int D3D10_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15; const unsigned int D3D10_PS_FRONTFACING_DEFAULT_VALUE = 0xffffffff; const unsigned int D3D10_PS_FRONTFACING_FALSE_VALUE = 0; const unsigned int D3D10_PS_FRONTFACING_TRUE_VALUE = 0xffffffff; const unsigned int D3D10_PS_INPUT_REGISTER_COMPONENTS = 4; const unsigned int D3D10_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_PS_INPUT_REGISTER_COUNT = 32; const unsigned int D3D10_PS_INPUT_REGISTER_READS_PER_INST = 2; const unsigned int D3D10_PS_INPUT_REGISTER_READ_PORTS = 1; const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1; const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1; const unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENTS = 4; const unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_PS_OUTPUT_REGISTER_COUNT = 8; const unsigned int D3D10_REQ_BLEND_OBJECT_COUNT_PER_CONTEXT = 4096; const unsigned int D3D10_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27; const unsigned int D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096; const unsigned int D3D10_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_CONTEXT = 4096; const unsigned int D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32; const unsigned int D3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32; const unsigned int D3D10_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 8192; const unsigned int D3D10_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024; const unsigned int D3D10_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096; const unsigned int D3D10_REQ_MAXANISOTROPY = 16; const unsigned int D3D10_REQ_MIP_LEVELS = 14; const unsigned int D3D10_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048; const unsigned int D3D10_REQ_RASTERIZER_OBJECT_COUNT_PER_CONTEXT = 4096; const unsigned int D3D10_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 8192; const unsigned int D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES = 128; const unsigned int D3D10_REQ_RESOURCE_VIEW_COUNT_PER_CONTEXT_2_TO_EXP = 20; const unsigned int D3D10_REQ_SAMPLER_OBJECT_COUNT_PER_CONTEXT = 4096; const unsigned int D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 512; const unsigned int D3D10_REQ_TEXTURE1D_U_DIMENSION = 8192; const unsigned int D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 512; const unsigned int D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION = 8192; const unsigned int D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048; const unsigned int D3D10_REQ_TEXTURECUBE_DIMENSION = 8192; const unsigned int D3D10_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0; const unsigned int D3D10_SHADER_MAJOR_VERSION = 4; const unsigned int D3D10_SHADER_MINOR_VERSION = 0; const unsigned int D3D10_SHIFT_INSTRUCTION_PAD_VALUE = 0; const unsigned int D3D10_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5; const unsigned int D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT = 8; const unsigned int D3D10_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048; const unsigned int D3D10_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 256; const unsigned int D3D10_SO_BUFFER_SLOT_COUNT = 4; const unsigned int D3D10_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff; const unsigned int D3D10_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER = 1; const unsigned int D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT = 64; const unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64; const unsigned int D3D10_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4; const unsigned int D3D10_STANDARD_PIXEL_COMPONENT_COUNT = 128; const unsigned int D3D10_STANDARD_PIXEL_ELEMENT_COUNT = 32; const unsigned int D3D10_STANDARD_VECTOR_SIZE = 4; const unsigned int D3D10_STANDARD_VERTEX_ELEMENT_COUNT = 16; const unsigned int D3D10_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64; const unsigned int D3D10_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8; const unsigned int D3D10_SUBTEXEL_FRACTIONAL_BIT_COUNT = 6; const unsigned int D3D10_TEXEL_ADDRESS_RANGE_BIT_COUNT = 18; const unsigned int D3D10_UNBOUND_MEMORY_ACCESS_RESULT = 0; const unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15; const unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16; const unsigned int D3D10_VIEWPORT_BOUNDS_MAX = 16383; const int D3D10_VIEWPORT_BOUNDS_MIN = -16384; const unsigned int D3D10_VS_INPUT_REGISTER_COMPONENTS = 4; const unsigned int D3D10_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_VS_INPUT_REGISTER_COUNT = 16; const unsigned int D3D10_VS_INPUT_REGISTER_READS_PER_INST = 2; const unsigned int D3D10_VS_INPUT_REGISTER_READ_PORTS = 1; const unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENTS = 4; const unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; const unsigned int D3D10_VS_OUTPUT_REGISTER_COUNT = 16; const unsigned int D3D10_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT = 10; const unsigned int D3D10_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 25; const unsigned int D3D10_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP = 25; const unsigned int D3D_MAJOR_VERSION = 10; const unsigned int D3D_MINOR_VERSION = 0; const unsigned int D3D_SPEC_DATE_DAY = 8; const unsigned int D3D_SPEC_DATE_MONTH = 8; const unsigned int D3D_SPEC_DATE_YEAR = 2006; cpp_quote("#endif") const unsigned int D3D10_APPEND_ALIGNED_ELEMENT = 0xffffffff; const unsigned int _FACD3D10 = 0x879; const unsigned int _FACD3D10DEBUG = _FACD3D10 + 1; const unsigned int D3D10_FILTER_TYPE_MASK = 0x3; const unsigned int D3D10_SDK_VERSION = 29; cpp_quote("#define MAKE_D3D10_HRESULT(code) MAKE_HRESULT( 1, _FACD3D10, code)") cpp_quote("#define MAKE_D3D10_STATUS(code) MAKE_HRESULT( 0, _FACD3D10, code)") cpp_quote("#define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS MAKE_D3D10_HRESULT(1)") cpp_quote("#define D3D10_ERROR_FILE_NOT_FOUND MAKE_D3D10_HRESULT(2)") typedef enum D3D10_BLEND { D3D10_BLEND_ZERO = 1, D3D10_BLEND_ONE = 2, D3D10_BLEND_SRC_COLOR = 3, D3D10_BLEND_INV_SRC_COLOR = 4, D3D10_BLEND_SRC_ALPHA = 5, D3D10_BLEND_INV_SRC_ALPHA = 6, D3D10_BLEND_DEST_ALPHA = 7, D3D10_BLEND_INV_DEST_ALPHA = 8, D3D10_BLEND_DEST_COLOR = 9, D3D10_BLEND_INV_DEST_COLOR = 10, D3D10_BLEND_SRC_ALPHA_SAT = 11, D3D10_BLEND_BLEND_FACTOR = 14, D3D10_BLEND_INV_BLEND_FACTOR = 15, D3D10_BLEND_SRC1_COLOR = 16, D3D10_BLEND_INV_SRC1_COLOR = 17, D3D10_BLEND_SRC1_ALPHA = 18, D3D10_BLEND_INV_SRC1_ALPHA = 19 } D3D10_BLEND; typedef enum D3D10_BLEND_OP { D3D10_BLEND_OP_ADD = 1, D3D10_BLEND_OP_SUBTRACT, D3D10_BLEND_OP_REV_SUBTRACT, D3D10_BLEND_OP_MIN, D3D10_BLEND_OP_MAX, } D3D10_BLEND_OP; typedef struct D3D10_BLEND_DESC { BOOL AlphaToCoverageEnable; BOOL BlendEnable[8]; D3D10_BLEND SrcBlend; D3D10_BLEND DestBlend; D3D10_BLEND_OP BlendOp; D3D10_BLEND SrcBlendAlpha; D3D10_BLEND DestBlendAlpha; D3D10_BLEND_OP BlendOpAlpha; UINT8 RenderTargetWriteMask[8]; } D3D10_BLEND_DESC; typedef enum D3D10_DEPTH_WRITE_MASK { D3D10_DEPTH_WRITE_MASK_ZERO, D3D10_DEPTH_WRITE_MASK_ALL, } D3D10_DEPTH_WRITE_MASK; typedef enum D3D10_COMPARISON_FUNC { D3D10_COMPARISON_NEVER = 1, D3D10_COMPARISON_LESS, D3D10_COMPARISON_EQUAL, D3D10_COMPARISON_LESS_EQUAL, D3D10_COMPARISON_GREATER, D3D10_COMPARISON_NOT_EQUAL, D3D10_COMPARISON_GREATER_EQUAL, D3D10_COMPARISON_ALWAYS, } D3D10_COMPARISON_FUNC; typedef enum D3D10_STENCIL_OP { D3D10_STENCIL_OP_KEEP = 1, D3D10_STENCIL_OP_ZERO, D3D10_STENCIL_OP_REPLACE, D3D10_STENCIL_OP_INCR_SAT, D3D10_STENCIL_OP_DECR_SAT, D3D10_STENCIL_OP_INVERT, D3D10_STENCIL_OP_INCR, D3D10_STENCIL_OP_DECR, } D3D10_STENCIL_OP; typedef struct D3D10_DEPTH_STENCILOP_DESC { D3D10_STENCIL_OP StencilFailOp; D3D10_STENCIL_OP StencilDepthFailOp; D3D10_STENCIL_OP StencilPassOp; D3D10_COMPARISON_FUNC StencilFunc; } D3D10_DEPTH_STENCILOP_DESC; typedef struct D3D10_DEPTH_STENCIL_DESC { BOOL DepthEnable; D3D10_DEPTH_WRITE_MASK DepthWriteMask; D3D10_COMPARISON_FUNC DepthFunc; BOOL StencilEnable; UINT8 StencilReadMask; UINT8 StencilWriteMask; D3D10_DEPTH_STENCILOP_DESC FrontFace; D3D10_DEPTH_STENCILOP_DESC BackFace; } D3D10_DEPTH_STENCIL_DESC; typedef enum D3D10_FILL_MODE { D3D10_FILL_WIREFRAME = 2, D3D10_FILL_SOLID, } D3D10_FILL_MODE; typedef enum D3D10_CULL_MODE { D3D10_CULL_NONE = 1, D3D10_CULL_FRONT, D3D10_CULL_BACK, } D3D10_CULL_MODE; typedef struct D3D10_RASTERIZER_DESC { D3D10_FILL_MODE FillMode; D3D10_CULL_MODE CullMode; BOOL FrontCounterClockwise; INT DepthBias; FLOAT DepthBiasClamp; FLOAT SlopeScaledDepthBias; BOOL DepthClipEnable; BOOL ScissorEnable; BOOL MultisampleEnable; BOOL AntialiasedLineEnable; } D3D10_RASTERIZER_DESC; typedef enum D3D10_FILTER { D3D10_FILTER_MIN_MAG_MIP_POINT = 0, D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1, D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4, D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5, D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10, D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11, D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14, D3D10_FILTER_MIN_MAG_MIP_LINEAR = 0x15, D3D10_FILTER_ANISOTROPIC = 0x55, D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80, D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81, D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84, D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85, D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90, D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91, D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94, D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95, D3D10_FILTER_COMPARISON_ANISOTROPIC = 0xd5, D3D10_FILTER_TEXT_1BIT = 0x80000000 } D3D10_FILTER; typedef enum D3D10_TEXTURE_ADDRESS_MODE { D3D10_TEXTURE_ADDRESS_WRAP = 1, D3D10_TEXTURE_ADDRESS_MIRROR, D3D10_TEXTURE_ADDRESS_CLAMP, D3D10_TEXTURE_ADDRESS_BORDER, D3D10_TEXTURE_ADDRESS_MIRROR_ONCE, } D3D10_TEXTURE_ADDRESS_MODE; typedef struct D3D10_SAMPLER_DESC { D3D10_FILTER Filter; D3D10_TEXTURE_ADDRESS_MODE AddressU; D3D10_TEXTURE_ADDRESS_MODE AddressV; D3D10_TEXTURE_ADDRESS_MODE AddressW; FLOAT MipLODBias; UINT MaxAnisotropy; D3D10_COMPARISON_FUNC ComparisonFunc; FLOAT BorderColor[4]; FLOAT MinLOD; FLOAT MaxLOD; } D3D10_SAMPLER_DESC; typedef enum D3D10_COUNTER { D3D10_COUNTER_GPU_IDLE, D3D10_COUNTER_VERTEX_PROCESSING, D3D10_COUNTER_GEOMETRY_PROCESSING, D3D10_COUNTER_PIXEL_PROCESSING, D3D10_COUNTER_OTHER_GPU_PROCESSING, D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION, D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION, D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION, D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION, D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION, D3D10_COUNTER_VS_MEMORY_LIMITED, D3D10_COUNTER_VS_COMPUTATION_LIMITED, D3D10_COUNTER_GS_MEMORY_LIMITED, D3D10_COUNTER_GS_COMPUTATION_LIMITED, D3D10_COUNTER_PS_MEMORY_LIMITED, D3D10_COUNTER_PS_COMPUTATION_LIMITED, D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE, D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE, D3D10_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000 } D3D10_COUNTER; typedef struct D3D10_COUNTER_DESC { D3D10_COUNTER Counter; UINT MiscFlags; } D3D10_COUNTER_DESC; typedef enum D3D10_COUNTER_TYPE { D3D10_COUNTER_TYPE_FLOAT32, D3D10_COUNTER_TYPE_UINT16, D3D10_COUNTER_TYPE_UINT32, D3D10_COUNTER_TYPE_UINT64, } D3D10_COUNTER_TYPE; typedef struct D3D10_COUNTER_INFO { D3D10_COUNTER LastDeviceDependentCounter; UINT NumSimultaneousCounters; UINT8 NumDetectableParallelUnits; } D3D10_COUNTER_INFO; typedef enum D3D10_RESOURCE_DIMENSION { D3D10_RESOURCE_DIMENSION_UNKNOWN, D3D10_RESOURCE_DIMENSION_BUFFER, D3D10_RESOURCE_DIMENSION_TEXTURE1D, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3D10_RESOURCE_DIMENSION_TEXTURE3D, } D3D10_RESOURCE_DIMENSION; typedef enum D3D10_USAGE { D3D10_USAGE_DEFAULT, D3D10_USAGE_IMMUTABLE, D3D10_USAGE_DYNAMIC, D3D10_USAGE_STAGING, } D3D10_USAGE; typedef enum D3D10_BIND_FLAG { D3D10_BIND_VERTEX_BUFFER = 0x1, D3D10_BIND_INDEX_BUFFER = 0x2, D3D10_BIND_CONSTANT_BUFFER = 0x4, D3D10_BIND_SHADER_RESOURCE = 0x8, D3D10_BIND_STREAM_OUTPUT = 0x10, D3D10_BIND_RENDER_TARGET = 0x20, D3D10_BIND_DEPTH_STENCIL = 0x40 } D3D10_BIND_FLAG; typedef struct D3D10_BUFFER_DESC { UINT ByteWidth; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D10_BUFFER_DESC; cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D10_BUFFER_DESC : public D3D10_BUFFER_DESC {") cpp_quote(" CD3D10_BUFFER_DESC() {}" ) cpp_quote(" explicit CD3D10_BUFFER_DESC(const D3D10_BUFFER_DESC &o) : D3D10_BUFFER_DESC(o) {}") cpp_quote(" explicit CD3D10_BUFFER_DESC(UINT byteWidth, UINT bindFlags, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT miscFlags = 0 ) {") cpp_quote(" ByteWidth = byteWidth;") cpp_quote(" Usage = usage;") cpp_quote(" BindFlags = bindFlags;") cpp_quote(" CPUAccessFlags = cpuaccessFlags;") cpp_quote(" MiscFlags = miscFlags;") cpp_quote(" }") cpp_quote(" ~CD3D10_BUFFER_DESC() {}") cpp_quote(" operator const D3D10_BUFFER_DESC&() const {") cpp_quote(" return *this;") cpp_quote(" }") cpp_quote("};") cpp_quote("#endif") typedef enum D3D10_MAP { D3D10_MAP_READ = 1, D3D10_MAP_WRITE, D3D10_MAP_READ_WRITE, D3D10_MAP_WRITE_DISCARD, D3D10_MAP_WRITE_NO_OVERWRITE, } D3D10_MAP; typedef struct D3D10_TEXTURE1D_DESC { UINT Width; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D10_TEXTURE1D_DESC; cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D10_TEXTURE1D_DESC : public D3D10_TEXTURE1D_DESC {") cpp_quote(" CD3D10_TEXTURE1D_DESC() {}") cpp_quote(" explicit CD3D10_TEXTURE1D_DESC(const D3D10_TEXTURE1D_DESC &o) : D3D10_TEXTURE1D_DESC(o) {}") cpp_quote(" explicit CD3D10_TEXTURE1D_DESC(DXGI_FORMAT format, UINT width, UINT arraySize = 1, UINT mipLevels = 0,") cpp_quote(" UINT bindFlags = D3D10_BIND_SHADER_RESOURCE, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0,") cpp_quote(" UINT miscFlags = 0) {") cpp_quote(" Width = width;") cpp_quote(" MipLevels = mipLevels;") cpp_quote(" ArraySize = arraySize;") cpp_quote(" Format = format;") cpp_quote(" Usage = usage;") cpp_quote(" BindFlags = bindFlags;") cpp_quote(" CPUAccessFlags = cpuaccessFlags;") cpp_quote(" MiscFlags = miscFlags;") cpp_quote(" }") cpp_quote(" ~CD3D10_TEXTURE1D_DESC() {}") cpp_quote(" operator const D3D10_TEXTURE1D_DESC&() const {") cpp_quote(" return *this;") cpp_quote(" }") cpp_quote("};") cpp_quote("#endif") typedef struct D3D10_TEXTURE2D_DESC { UINT Width; UINT Height; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D10_TEXTURE2D_DESC; cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D10_TEXTURE2D_DESC : public D3D10_TEXTURE2D_DESC {") cpp_quote(" CD3D10_TEXTURE2D_DESC() {}" ) cpp_quote(" explicit CD3D10_TEXTURE2D_DESC(const D3D10_TEXTURE2D_DESC &o) : D3D10_TEXTURE2D_DESC(o) {}") cpp_quote(" explicit CD3D10_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height,") cpp_quote(" UINT arraySize = 1,") cpp_quote(" UINT mipLevels = 0,") cpp_quote(" UINT bindFlags = D3D10_BIND_SHADER_RESOURCE,") cpp_quote(" D3D10_USAGE usage = D3D10_USAGE_DEFAULT,") cpp_quote(" UINT cpuaccessFlags = 0,") cpp_quote(" UINT sampleCount = 1,") cpp_quote(" UINT sampleQuality = 0,") cpp_quote(" UINT miscFlags = 0) {") cpp_quote(" Width = width;" ) cpp_quote(" Height = height;" ) cpp_quote(" MipLevels = mipLevels;" ) cpp_quote(" ArraySize = arraySize;" ) cpp_quote(" Format = format;" ) cpp_quote(" SampleDesc.Count = sampleCount;" ) cpp_quote(" SampleDesc.Quality = sampleQuality;" ) cpp_quote(" Usage = usage;" ) cpp_quote(" BindFlags = bindFlags;" ) cpp_quote(" CPUAccessFlags = cpuaccessFlags;" ) cpp_quote(" MiscFlags = miscFlags;" ) cpp_quote(" }") cpp_quote(" ~CD3D10_TEXTURE2D_DESC() {}") cpp_quote(" operator const D3D10_TEXTURE2D_DESC&() const {") cpp_quote(" return *this;") cpp_quote(" }") cpp_quote("};") cpp_quote("#endif") typedef struct D3D10_TEXTURE3D_DESC { UINT Width; UINT Height; UINT Depth; UINT MipLevels; DXGI_FORMAT Format; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D10_TEXTURE3D_DESC; typedef enum D3D10_DSV_DIMENSION { D3D10_DSV_DIMENSION_UNKNOWN, D3D10_DSV_DIMENSION_TEXTURE1D, D3D10_DSV_DIMENSION_TEXTURE1DARRAY, D3D10_DSV_DIMENSION_TEXTURE2D, D3D10_DSV_DIMENSION_TEXTURE2DARRAY, D3D10_DSV_DIMENSION_TEXTURE2DMS, D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY, } D3D10_DSV_DIMENSION; typedef struct D3D10_TEX1D_DSV { UINT MipSlice; } D3D10_TEX1D_DSV; typedef struct D3D10_TEX1D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX1D_ARRAY_DSV; typedef struct D3D10_TEX2D_DSV { UINT MipSlice; } D3D10_TEX2D_DSV; typedef struct D3D10_TEX2D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2D_ARRAY_DSV; typedef struct D3D10_TEX2DMS_DSV { UINT UnusedField_NothingToDefine; } D3D10_TEX2DMS_DSV; typedef struct D3D10_TEX2DMS_ARRAY_DSV { UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2DMS_ARRAY_DSV; typedef struct D3D10_DEPTH_STENCIL_VIEW_DESC { DXGI_FORMAT Format; D3D10_DSV_DIMENSION ViewDimension; union { D3D10_TEX1D_DSV Texture1D; D3D10_TEX1D_ARRAY_DSV Texture1DArray; D3D10_TEX2D_DSV Texture2D; D3D10_TEX2D_ARRAY_DSV Texture2DArray; D3D10_TEX2DMS_DSV Texture2DMS; D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray; }; } D3D10_DEPTH_STENCIL_VIEW_DESC; typedef enum D3D10_RTV_DIMENSION { D3D10_RTV_DIMENSION_UNKNOWN, D3D10_RTV_DIMENSION_BUFFER, D3D10_RTV_DIMENSION_TEXTURE1D, D3D10_RTV_DIMENSION_TEXTURE1DARRAY, D3D10_RTV_DIMENSION_TEXTURE2D, D3D10_RTV_DIMENSION_TEXTURE2DARRAY, D3D10_RTV_DIMENSION_TEXTURE2DMS, D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY, D3D10_RTV_DIMENSION_TEXTURE3D, } D3D10_RTV_DIMENSION; typedef struct D3D10_BUFFER_RTV { UINT ElementOffset; UINT ElementWidth; } D3D10_BUFFER_RTV; typedef struct D3D10_TEX1D_RTV { UINT MipSlice; } D3D10_TEX1D_RTV; typedef struct D3D10_TEX1D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX1D_ARRAY_RTV; typedef struct D3D10_TEX2D_RTV { UINT MipSlice; } D3D10_TEX2D_RTV; typedef struct D3D10_TEX2D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2D_ARRAY_RTV; typedef struct D3D10_TEX2DMS_RTV { UINT UnusedField_NothingToDefine; } D3D10_TEX2DMS_RTV; typedef struct D3D10_TEX2DMS_ARRAY_RTV { UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2DMS_ARRAY_RTV; typedef struct D3D10_TEX3D_RTV { UINT MipSlice; UINT FirstWSlice; UINT WSize; } D3D10_TEX3D_RTV; typedef struct D3D10_RENDER_TARGET_VIEW_DESC { DXGI_FORMAT Format; D3D10_RTV_DIMENSION ViewDimension; union { D3D10_BUFFER_RTV Buffer; D3D10_TEX1D_RTV Texture1D; D3D10_TEX1D_ARRAY_RTV Texture1DArray; D3D10_TEX2D_RTV Texture2D; D3D10_TEX2D_ARRAY_RTV Texture2DArray; D3D10_TEX2DMS_RTV Texture2DMS; D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray; D3D10_TEX3D_RTV Texture3D; }; } D3D10_RENDER_TARGET_VIEW_DESC; typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION; typedef struct D3D10_BUFFER_SRV { UINT ElementOffset; UINT ElementWidth; } D3D10_BUFFER_SRV; typedef struct D3D10_TEX1D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D10_TEX1D_SRV; typedef struct D3D10_TEX1D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX1D_ARRAY_SRV; typedef struct D3D10_TEX2D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D10_TEX2D_SRV; typedef struct D3D10_TEX2D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2D_ARRAY_SRV; typedef struct D3D10_TEX2DMS_SRV { UINT UnusedField_NothingToDefine; } D3D10_TEX2DMS_SRV; typedef struct D3D10_TEX2DMS_ARRAY_SRV { UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2DMS_ARRAY_SRV; typedef struct D3D10_TEX3D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D10_TEX3D_SRV; typedef struct D3D10_TEXCUBE_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D10_TEXCUBE_SRV; typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC { DXGI_FORMAT Format; D3D10_SRV_DIMENSION ViewDimension; union { D3D10_BUFFER_SRV Buffer; D3D10_TEX1D_SRV Texture1D; D3D10_TEX1D_ARRAY_SRV Texture1DArray; D3D10_TEX2D_SRV Texture2D; D3D10_TEX2D_ARRAY_SRV Texture2DArray; D3D10_TEX2DMS_SRV Texture2DMS; D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray; D3D10_TEX3D_SRV Texture3D; D3D10_TEXCUBE_SRV TextureCube; }; } D3D10_SHADER_RESOURCE_VIEW_DESC; typedef struct D3D10_BOX { UINT left; UINT top; UINT front; UINT right; UINT bottom; UINT back; } D3D10_BOX; typedef struct D3D10_SUBRESOURCE_DATA { const void *pSysMem; UINT SysMemPitch; UINT SysMemSlicePitch; } D3D10_SUBRESOURCE_DATA; typedef struct D3D10_SO_DECLARATION_ENTRY { const char *SemanticName; UINT SemanticIndex; BYTE StartComponent; BYTE ComponentCount; BYTE OutputSlot; } D3D10_SO_DECLARATION_ENTRY; typedef enum D3D10_INPUT_CLASSIFICATION { D3D10_INPUT_PER_VERTEX_DATA, D3D10_INPUT_PER_INSTANCE_DATA, } D3D10_INPUT_CLASSIFICATION; typedef struct D3D10_INPUT_ELEMENT_DESC { const char *SemanticName; UINT SemanticIndex; DXGI_FORMAT Format; UINT InputSlot; UINT AlignedByteOffset; D3D10_INPUT_CLASSIFICATION InputSlotClass; UINT InstanceDataStepRate; } D3D10_INPUT_ELEMENT_DESC; typedef enum D3D10_QUERY { D3D10_QUERY_EVENT, D3D10_QUERY_OCCLUSION, D3D10_QUERY_TIMESTAMP, D3D10_QUERY_TIMESTAMP_DISJOINT, D3D10_QUERY_PIPELINE_STATISTICS, D3D10_QUERY_OCCLUSION_PREDICATE, D3D10_QUERY_SO_STATISTICS, D3D10_QUERY_SO_OVERFLOW_PREDICATE, } D3D10_QUERY; typedef struct D3D10_QUERY_DESC { D3D10_QUERY Query; UINT MiscFlags; } D3D10_QUERY_DESC; typedef D3D_PRIMITIVE_TOPOLOGY D3D10_PRIMITIVE_TOPOLOGY; typedef D3D_PRIMITIVE D3D10_PRIMITIVE; typedef RECT D3D10_RECT; typedef struct D3D10_VIEWPORT { INT TopLeftX; INT TopLeftY; UINT Width; UINT Height; FLOAT MinDepth; FLOAT MaxDepth; } D3D10_VIEWPORT; typedef struct D3D10_MAPPED_TEXTURE2D { void *pData; UINT RowPitch; } D3D10_MAPPED_TEXTURE2D; typedef struct D3D10_MAPPED_TEXTURE3D { void *pData; UINT RowPitch; UINT DepthPitch; } D3D10_MAPPED_TEXTURE3D; typedef enum D3D10_CPU_ACCESS_FLAG { D3D10_CPU_ACCESS_WRITE = 0x10000, D3D10_CPU_ACCESS_READ = 0x20000 } D3D10_CPU_ACCESS_FLAG; typedef enum D3D10_RESOURCE_MISC_FLAG { D3D10_RESOURCE_MISC_GENERATE_MIPS = 0x0001, D3D10_RESOURCE_MISC_SHARED = 0x0002, D3D10_RESOURCE_MISC_TEXTURECUBE = 0x0004, D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x0010, D3D10_RESOURCE_MISC_GDI_COMPATIBLE = 0x0020 } D3D10_RESOURCE_MISC_FLAG; typedef enum D3D10_MAP_FLAG { D3D10_MAP_FLAG_DO_NOT_WAIT = 0x100000, } D3D10_MAP_FLAG; typedef enum D3D10_CLEAR_FLAG { D3D10_CLEAR_DEPTH = 0x1, D3D10_CLEAR_STENCIL = 0x2 } D3D10_CLEAR_FLAG; typedef enum D3D10_COLOR_WRITE_ENABLE { D3D10_COLOR_WRITE_ENABLE_RED = 0x1, D3D10_COLOR_WRITE_ENABLE_GREEN = 0x2, D3D10_COLOR_WRITE_ENABLE_BLUE = 0x4, D3D10_COLOR_WRITE_ENABLE_ALPHA = 0x8, D3D10_COLOR_WRITE_ENABLE_ALL = (D3D10_COLOR_WRITE_ENABLE_RED | D3D10_COLOR_WRITE_ENABLE_GREEN | D3D10_COLOR_WRITE_ENABLE_BLUE | D3D10_COLOR_WRITE_ENABLE_ALPHA) } D3D10_COLOR_WRITE_ENABLE; typedef enum D3D10_FORMAT_SUPPORT { D3D10_FORMAT_SUPPORT_BUFFER = 0x00000001, D3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER = 0x00000002, D3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER = 0x00000004, D3D10_FORMAT_SUPPORT_SO_BUFFER = 0x00000008, D3D10_FORMAT_SUPPORT_TEXTURE1D = 0x00000010, D3D10_FORMAT_SUPPORT_TEXTURE2D = 0x00000020, D3D10_FORMAT_SUPPORT_TEXTURE3D = 0x00000040, D3D10_FORMAT_SUPPORT_TEXTURECUBE = 0x00000080, D3D10_FORMAT_SUPPORT_SHADER_LOAD = 0x00000100, D3D10_FORMAT_SUPPORT_SHADER_SAMPLE = 0x00000200, D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x00000400, D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT = 0x00000800, D3D10_FORMAT_SUPPORT_MIP = 0x00001000, D3D10_FORMAT_SUPPORT_MIP_AUTOGEN = 0x00002000, D3D10_FORMAT_SUPPORT_RENDER_TARGET = 0x00004000, D3D10_FORMAT_SUPPORT_BLENDABLE = 0x00008000, D3D10_FORMAT_SUPPORT_DEPTH_STENCIL = 0x00010000, D3D10_FORMAT_SUPPORT_CPU_LOCKABLE = 0x00020000, D3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE = 0x00040000, D3D10_FORMAT_SUPPORT_DISPLAY = 0x00080000, D3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT = 0x00100000, D3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x00200000, D3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD = 0x00400000, D3D10_FORMAT_SUPPORT_SHADER_GATHER = 0x00800000, D3D10_FORMAT_SUPPORT_BACK_BUFFER_CAST = 0x01000000, } D3D10_FORMAT_SUPPORT; typedef enum D3D10_TEXTURECUBE_FACE { D3D10_TEXTURECUBE_FACE_POSITIVE_X, D3D10_TEXTURECUBE_FACE_NEGATIVE_X, D3D10_TEXTURECUBE_FACE_POSITIVE_Y, D3D10_TEXTURECUBE_FACE_NEGATIVE_Y, D3D10_TEXTURECUBE_FACE_POSITIVE_Z, D3D10_TEXTURECUBE_FACE_NEGATIVE_Z, } D3D10_TEXTURECUBE_FACE; typedef enum D3D10_ASYNC_GETDATA_FLAG { D3D10_ASYNC_GETDATA_DONOTFLUSH = 0x1, } D3D10_ASYNC_GETDATA_FLAG; typedef enum D3D10_FILTER_TYPE { D3D10_FILTER_TYPE_POINT, D3D10_FILTER_TYPE_LINEAR } D3D10_FILTER_TYPE; typedef enum D3D10_QUERY_MISC_FLAG { D3D10_QUERY_MISC_PREDICATEHINT = 0x1 } D3D10_QUERY_MISC_FLAG; typedef struct D3D10_QUERY_DATA_TIMESTAMP_DISJOINT { UINT64 Frequency; BOOL Disjoint; } D3D10_QUERY_DATA_TIMESTAMP_DISJOINT; typedef struct D3D10_QUERY_DATA_PIPELINE_STATISTICS { UINT64 IAVertices; UINT64 IAPrimitives; UINT64 VSInvocations; UINT64 GSInvocations; UINT64 GSPrimitives; UINT64 CInvocations; UINT64 CPrimitives; UINT64 PSInvocations; } D3D10_QUERY_DATA_PIPELINE_STATISTICS; typedef struct D3D10_QUERY_DATA_SO_STATISTICS { UINT64 NumPrimitivesWritten; UINT64 PrimitivesStorageNeeded; } D3D10_QUERY_DATA_SO_STATISTICS; typedef enum D3D10_CREATE_DEVICE_FLAG { D3D10_CREATE_DEVICE_SINGLETHREADED = 0x1, D3D10_CREATE_DEVICE_DEBUG = 0x2, D3D10_CREATE_DEVICE_SWITCH_TO_REF = 0x4, D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8, D3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP = 0x10, D3D10_CREATE_DEVICE_BGRA_SUPPORT = 0x20, D3D10_CREATE_DEVICE_STRICT_VALIDATION = 0x0200 } D3D10_CREATE_DEVICE_FLAG; /* Core */ interface ID3D10Device; [ object, local, uuid(9b7e4c00-342c-4106-a19f-4f2704f689f0) ] interface ID3D10DeviceChild : IUnknown { void GetDevice( [out] ID3D10Device **ppDevice); HRESULT GetPrivateData( [in] REFGUID guid, [in, out] UINT *pDataSize, [out] void *pData); HRESULT SetPrivateData( [in] REFGUID guid, [in] UINT DataSize, [in] const void *pData); HRESULT SetPrivateDataInterface( [in] REFGUID guid, [in] const IUnknown *pData); } /* Resource */ [ object, local, uuid(9b7e4c01-342c-4106-a19f-4f2704f689f0) ] interface ID3D10Resource : ID3D10DeviceChild { void GetType( [out] D3D10_RESOURCE_DIMENSION *rType); void SetEvictionPriority( [in] UINT EvictionPriority); UINT GetEvictionPriority(); } [ object, local, uuid(9b7e4c02-342c-4106-a19f-4f2704f689f0) ] interface ID3D10Buffer : ID3D10Resource { HRESULT Map( [in] D3D10_MAP MapType, [in] UINT MapFlags, [out] void **ppData); void Unmap(); void GetDesc( [out] D3D10_BUFFER_DESC *pDesc); } [ object, local, uuid(9b7e4c03-342c-4106-a19f-4f2704f689F0) ] interface ID3D10Texture1D : ID3D10Resource { HRESULT Map( [in] UINT Subresource, [in] D3D10_MAP MapType, [in] UINT MapFlags, [out] void **ppData); void Unmap( [in] UINT Subresource); void GetDesc( [out] D3D10_TEXTURE1D_DESC *pDesc); } [ object, local, uuid(9b7e4c04-342c-4106-a19f-4f2704f689F0) ] interface ID3D10Texture2D : ID3D10Resource { HRESULT Map( [in] UINT Subresource, [in] D3D10_MAP MapType, [in] UINT MapFlags, [out] D3D10_MAPPED_TEXTURE2D *pMappedTex2D); void Unmap( [in] UINT Subresource); void GetDesc( [out] D3D10_TEXTURE2D_DESC *pDesc); } [ object, local, uuid(9b7e4c05-342c-4106-a19f-4f2704f689F0) ] interface ID3D10Texture3D : ID3D10Resource { HRESULT Map( [in] UINT Subresource, [in] D3D10_MAP MapType, [in] UINT MapFlags, [out] D3D10_MAPPED_TEXTURE3D *pMappedTex3D); void Unmap( [in] UINT Subresource); void GetDesc( [out] D3D10_TEXTURE3D_DESC *pDesc); } [ object, local, uuid(c902b03f-60a7-49ba-9936-2a3ab37a7e33) ] interface ID3D10View : ID3D10DeviceChild { void GetResource( [out] ID3D10Resource **ppResource); } [ object, local, uuid(9b7e4c09-342c-4106-a19f-4f2704f689f0) ] interface ID3D10DepthStencilView : ID3D10View { void GetDesc( [out] D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc); } [ object, local, uuid(9b7e4c08-342c-4106-a19f-4f2704f689f0) ] interface ID3D10RenderTargetView : ID3D10View { void GetDesc( [out] D3D10_RENDER_TARGET_VIEW_DESC *pDesc); } [ object, local, uuid(9b7e4c07-342c-4106-a19f-4f2704f689f0) ] interface ID3D10ShaderResourceView : ID3D10View { void GetDesc( [out] D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc); } /* Resource End */ [ object, local, uuid(edad8d19-8a35-4d6d-8566-2ea276cde161) ] interface ID3D10BlendState : ID3D10DeviceChild { void GetDesc( [out] D3D10_BLEND_DESC *pDesc); } [ object, local, uuid(2b4b1cc8-a4ad-41f8-8322-ca86fc3ec675) ] interface ID3D10DepthStencilState : ID3D10DeviceChild { void GetDesc( [out] D3D10_DEPTH_STENCIL_DESC *pDesc); } [ object, local, uuid(6316be88-54cd-4040-ab44-20461bc81f68) ] interface ID3D10GeometryShader : ID3D10DeviceChild { } [ object, local, uuid(9b7e4c0b-342c-4106-a19f-4f2704f689f0) ] interface ID3D10InputLayout : ID3D10DeviceChild { } [ object, local, uuid(4968b601-9d00-4cde-8346-8e7f675819b6) ] interface ID3D10PixelShader : ID3D10DeviceChild { } [ object, local, uuid(a2a07292-89af-4345-be2e-c53d9fbb6e9f) ] interface ID3D10RasterizerState : ID3D10DeviceChild { void GetDesc( [out] D3D10_RASTERIZER_DESC *pDesc); } [ object, local, uuid(9b7e4c0c-342c-4106-a19f-4f2704f689f0) ] interface ID3D10SamplerState : ID3D10DeviceChild { void GetDesc( [out] D3D10_SAMPLER_DESC *pDesc); } [ object, local, uuid(9b7e4c0a-342c-4106-a19f-4f2704f689f0) ] interface ID3D10VertexShader : ID3D10DeviceChild { } [ object, local, uuid(9b7e4c0d-342c-4106-a19f-4f2704f689f0) ] interface ID3D10Asynchronous : ID3D10DeviceChild { void Begin(); void End(); HRESULT GetData( [out] void *pData, [in] UINT DataSize, [in] UINT GetDataFlags); UINT GetDataSize(); } [ object, local, uuid(9b7e4c11-342c-4106-a19f-4f2704f689f0) ] interface ID3D10Counter : ID3D10Asynchronous { void GetDesc( [out] D3D10_COUNTER_DESC *pDesc); } [ object, local, uuid(9b7e4C0e-342C-4106-a19f-4f2704f689f0) ] interface ID3D10Query : ID3D10Asynchronous { void GetDesc( [out] D3D10_QUERY_DESC *pDesc); } [ object, local, uuid(9b7e4c10-342c-4106-a19f-4f2704f689f0) ] interface ID3D10Predicate : ID3D10Query { } [ object, local, uuid(9b7e4c0f-342c-4106-a19f-4f2704f689f0) ] interface ID3D10Device : IUnknown { void VSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D10Buffer *const *ppConstantBuffers); void PSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D10ShaderResourceView *const *ppShaderResourceViews); void PSSetShader( [in] ID3D10PixelShader *pPixelShader); void PSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in]ID3D10SamplerState *const *ppSamplers); void VSSetShader( [in] ID3D10VertexShader *pVertexShader); void DrawIndexed( [in] UINT IndexCount, [in] UINT StartIndexLocation, [in] INT BaseVertexLocation); void Draw( [in] UINT VertexCount, [in] UINT StartVertexLocation); void PSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D10Buffer *const *ppConstantBuffers); void IASetInputLayout( [in] ID3D10InputLayout *pInputLayout); void IASetVertexBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D10Buffer *const *ppVertexBuffers, [in] const UINT *pStrides, [in] const UINT *pOffsets); void IASetIndexBuffer( [in] ID3D10Buffer *pIndexBuffer, [in] DXGI_FORMAT Format, [in] UINT Offset); void DrawIndexedInstanced( [in] UINT IndexCountPerInstance, [in] UINT InstanceCount, [in] UINT StartIndexLocation, [in] INT BaseVertexLocation, [in] UINT StartInstanceLocation); void DrawInstanced( [in] UINT VertexCountPerInstance, [in] UINT InstanceCount, [in] UINT StartVertexLocation, [in] UINT StartInstanceLocation); void GSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D10Buffer *const *ppConstantBuffers); void GSSetShader( [in] ID3D10GeometryShader *pShader); void IASetPrimitiveTopology( [in] D3D10_PRIMITIVE_TOPOLOGY Topology); void VSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D10ShaderResourceView *const *ppShaderResourceViews); void VSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in] ID3D10SamplerState *const *ppSamplers); void SetPredication( [in] ID3D10Predicate *pPredicate, [in] BOOL PredicateValue); void GSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D10ShaderResourceView * const *ppShaderResourceViews); void GSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in] ID3D10SamplerState *const *ppSamplers); void OMSetRenderTargets( [in] UINT NumViews, [in] ID3D10RenderTargetView *const *ppRenderTargetViews, [in] ID3D10DepthStencilView *pDepthStencilView); void OMSetBlendState( [in] ID3D10BlendState *pBlendState, [in] const FLOAT BlendFactor[4], [in] UINT SampleMask); void OMSetDepthStencilState( [in] ID3D10DepthStencilState *pDepthStencilState, [in] UINT StencilRef); void SOSetTargets( [in] UINT NumBuffers, [in] ID3D10Buffer *const *ppSOTargets, [in] const UINT *pOffsets); void DrawAuto(); void RSSetState( [in] ID3D10RasterizerState *pRasterizerState); void RSSetViewports( [in] UINT NumViewports, [in] const D3D10_VIEWPORT *pViewports); void RSSetScissorRects( [in] UINT NumRects, [in] const D3D10_RECT *pRects); void CopySubresourceRegion( [in] ID3D10Resource *pDstResource, [in] UINT DstSubresource, [in] UINT DstX, [in] UINT DstY, [in] UINT DstZ, [in] ID3D10Resource *pSrcResource, [in] UINT SrcSubresource, [in] const D3D10_BOX *pSrcBox); void CopyResource( [in] ID3D10Resource *pDstResource, [in] ID3D10Resource *pSrcResource); void UpdateSubresource( [in] ID3D10Resource *pDstResource, [in] UINT DstSubresource, [in] const D3D10_BOX *pDstBox, [in] const void *pSrcData, [in] UINT SrcRowPitch, [in] UINT SrcDepthPitch); void ClearRenderTargetView( [in] ID3D10RenderTargetView *pRenderTargetView, [in] const FLOAT ColorRGBA[4]); void ClearDepthStencilView( [in] ID3D10DepthStencilView *pDepthStencilView, [in] UINT ClearFlags, [in] FLOAT Depth, [in] UINT8 Stencil); void GenerateMips( [in] ID3D10ShaderResourceView *pShaderResourceView); void ResolveSubresource( [in] ID3D10Resource *pDstResource, [in] UINT DstSubresource, [in] ID3D10Resource *pSrcResource, [in] UINT SrcSubresource, [in] DXGI_FORMAT Format); void VSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D10Buffer **ppConstantBuffers); void PSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D10ShaderResourceView **ppShaderResourceViews); void PSGetShader( [out] ID3D10PixelShader **ppPixelShader); void PSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D10SamplerState **ppSamplers); void VSGetShader( [out] ID3D10VertexShader **ppVertexShader); void PSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D10Buffer **ppConstantBuffers); void IAGetInputLayout( [out] ID3D10InputLayout **ppInputLayout); void IAGetVertexBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D10Buffer **ppVertexBuffers, [out] UINT *pStrides, [out] UINT *pOffsets); void IAGetIndexBuffer( [out] ID3D10Buffer **pIndexBuffer, [out] DXGI_FORMAT *Format, [out] UINT *Offset); void GSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D10Buffer **ppConstantBuffers); void GSGetShader( [out] ID3D10GeometryShader **ppGeometryShader); void IAGetPrimitiveTopology( [out] D3D10_PRIMITIVE_TOPOLOGY *pTopology); void VSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D10ShaderResourceView **ppShaderResourceViews); void VSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D10SamplerState **ppSamplers); void GetPredication( [out] ID3D10Predicate **ppPredicate, [out] BOOL *pPredicateValue); void GSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D10ShaderResourceView **ppShaderResourceViews); void GSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D10SamplerState **ppSamplers); void OMGetRenderTargets( [in] UINT NumViews, [out] ID3D10RenderTargetView **ppRenderTargetViews, [out] ID3D10DepthStencilView **ppDepthStencilView); void OMGetBlendState( [out] ID3D10BlendState **ppBlendState, [out] FLOAT BlendFactor[4], [out] UINT *pSampleMask); void OMGetDepthStencilState( [out] ID3D10DepthStencilState **ppDepthStencilState, [out] UINT *pStencilRef); void SOGetTargets( [in] UINT NumBuffers, [out] ID3D10Buffer **ppSOTargets, [out] UINT *pOffsets); void RSGetState( [out] ID3D10RasterizerState **ppRasterizerState); void RSGetViewports( [in, out] UINT *NumViewports, [out] D3D10_VIEWPORT *pViewports); void RSGetScissorRects( [in, out] UINT *NumRects, [out] D3D10_RECT *pRects); HRESULT GetDeviceRemovedReason(); HRESULT SetExceptionMode( [in] UINT RaiseFlags); UINT GetExceptionMode(); HRESULT GetPrivateData( [in] REFGUID guid, [in, out] UINT *pDataSize, [out] void *pData); HRESULT SetPrivateData( [in] REFGUID guid, [in] UINT DataSize, [in] const void *pData); HRESULT SetPrivateDataInterface( [in] REFGUID guid, [in] const IUnknown *pData); void ClearState(); void Flush(); HRESULT CreateBuffer( [in] const D3D10_BUFFER_DESC *pDesc, [in] const D3D10_SUBRESOURCE_DATA *pInitialData, [out] ID3D10Buffer **ppBuffer); HRESULT CreateTexture1D( [in] const D3D10_TEXTURE1D_DESC *pDesc, [in] const D3D10_SUBRESOURCE_DATA *pInitialData, [out] ID3D10Texture1D **ppTexture1D); HRESULT CreateTexture2D( [in] const D3D10_TEXTURE2D_DESC *pDesc, [in] const D3D10_SUBRESOURCE_DATA *pInitialData, [out] ID3D10Texture2D **ppTexture2D); HRESULT CreateTexture3D( [in] const D3D10_TEXTURE3D_DESC *pDesc, [in] const D3D10_SUBRESOURCE_DATA *pInitialData, [out] ID3D10Texture3D **ppTexture3D); HRESULT CreateShaderResourceView( [in] ID3D10Resource *pResource, [in] const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc, [out] ID3D10ShaderResourceView **ppSRView); HRESULT CreateRenderTargetView( [in] ID3D10Resource *pResource, [in] const D3D10_RENDER_TARGET_VIEW_DESC *pDesc, [out] ID3D10RenderTargetView **ppRTView); HRESULT CreateDepthStencilView( [in] ID3D10Resource *pResource, [in] const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc, [out] ID3D10DepthStencilView **ppDepthStencilView); HRESULT CreateInputLayout( [in] const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs, [in] UINT NumElements, [in] const void *pShaderBytecodeWithInputSignature, [in] SIZE_T BytecodeLength, [out] ID3D10InputLayout **ppInputLayout); HRESULT CreateVertexShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [out] ID3D10VertexShader **ppVertexShader); HRESULT CreateGeometryShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [out] ID3D10GeometryShader **ppGeometryShader); HRESULT CreateGeometryShaderWithStreamOutput( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [in] const D3D10_SO_DECLARATION_ENTRY *pSODeclaration, [in] UINT NumEntries, [in] UINT OutputStreamStride, [out] ID3D10GeometryShader **ppGeometryShader); HRESULT CreatePixelShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [out] ID3D10PixelShader **ppPixelShader); HRESULT CreateBlendState( [in] const D3D10_BLEND_DESC *pBlendStateDesc, [out] ID3D10BlendState **ppBlendState); HRESULT CreateDepthStencilState( [in] const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc, [out] ID3D10DepthStencilState **ppDepthStencilState); HRESULT CreateRasterizerState( [in] const D3D10_RASTERIZER_DESC *pRasterizerDesc, [out] ID3D10RasterizerState **ppRasterizerState); HRESULT CreateSamplerState( [in] const D3D10_SAMPLER_DESC *pSamplerDesc, [out] ID3D10SamplerState **ppSamplerState); HRESULT CreateQuery( [in] const D3D10_QUERY_DESC *pQueryDesc, [out] ID3D10Query **ppQuery); HRESULT CreatePredicate( [in] const D3D10_QUERY_DESC *pPredicateDesc, [out] ID3D10Predicate **ppPredicate); HRESULT CreateCounter( [in] const D3D10_COUNTER_DESC *pCounterDesc, [out] ID3D10Counter **ppCounter); HRESULT CheckFormatSupport( [in] DXGI_FORMAT Format, [out] UINT *pFormatSupport); HRESULT CheckMultisampleQualityLevels( [in] DXGI_FORMAT Format, [in] UINT SampleCount, [out] UINT *pNumQualityLevels); void CheckCounterInfo( [out] D3D10_COUNTER_INFO *pCounterInfo); HRESULT CheckCounter( [in] const D3D10_COUNTER_DESC *pDesc, [out] D3D10_COUNTER_TYPE *pType, [out] UINT *pActiveCounters, [out] char *name, [in, out] UINT *pNameLength, [out] char *units, [in, out] UINT *pUnitsLength, [out] char *description, [in, out] UINT *pDescriptionLength); UINT GetCreationFlags(); HRESULT OpenSharedResource( [in] HANDLE hResource, [in] REFIID ReturnedInterface, [out] void **ppResource); void SetTextFilterSize( [in] UINT Width, [in] UINT Height); void GetTextFilterSize( [out] UINT *pWidth, [out] UINT *pHeight); } [ object, local, uuid(9b7e4e00-342c-4106-a19f-4f2704f689f0) ] interface ID3D10Multithread : IUnknown { void Enter(); void Leave(); BOOL SetMultithreadProtected( [in] BOOL bMTProtect); BOOL GetMultithreadProtected(); } cpp_quote("#ifndef D3D10_IGNORE_SDK_LAYERS") cpp_quote("#include \"d3d10sdklayers.h\"") cpp_quote("#endif") cpp_quote("#include \"d3d10misc.h\"") cpp_quote("#include \"d3d10shader.h\"") cpp_quote("#include \"d3d10effect.h\"") ================================================ FILE: wine/windows/d3d10_1.idl ================================================ /* * Copyright 2010 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; cpp_quote("#ifndef _D3D10_1_CONSTANTS") cpp_quote("#define _D3D10_1_CONSTANTS") const UINT D3D10_1_DEFAULT_SAMPLE_MASK = 0xffffffff; const UINT D3D10_1_GS_INPUT_REGISTER_COUNT = 32; const UINT D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32; const UINT D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 128; const UINT D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 32; const UINT D3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENTS = 1; const UINT D3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32; const UINT D3D10_1_PS_OUTPUT_MASK_REGISTER_COUNT = 1; const UINT D3D10_1_SHADER_MAJOR_VERSION = 4; const UINT D3D10_1_SHADER_MINOR_VERSION = 1; const UINT D3D10_1_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048; const UINT D3D10_1_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 256; const UINT D3D10_1_SO_BUFFER_SLOT_COUNT = 4; const UINT D3D10_1_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER = 1; const UINT D3D10_1_SO_SINGLE_BUFFER_COMPONENT_LIMIT = 64; const UINT D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT = 32; const UINT D3D10_1_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8; const UINT D3D10_1_VS_INPUT_REGISTER_COUNT = 32; const UINT D3D10_1_VS_OUTPUT_REGISTER_COUNT = 32; cpp_quote("#endif") cpp_quote("#define D3D10_1_FLOAT16_FUSED_TOLERANCE_IN_ULP (0.6)") cpp_quote("#define D3D10_1_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP (0.6f)") import "d3d10.idl"; cpp_quote("#include ") typedef enum D3D10_FEATURE_LEVEL1 { D3D10_FEATURE_LEVEL_10_0 = 0xa000, D3D10_FEATURE_LEVEL_10_1 = 0xa100, D3D10_FEATURE_LEVEL_9_1 = 0x9100, D3D10_FEATURE_LEVEL_9_2 = 0x9200, D3D10_FEATURE_LEVEL_9_3 = 0x9300 } D3D10_FEATURE_LEVEL1; typedef struct D3D10_RENDER_TARGET_BLEND_DESC1 { BOOL BlendEnable; D3D10_BLEND SrcBlend; D3D10_BLEND DestBlend; D3D10_BLEND_OP BlendOp; D3D10_BLEND SrcBlendAlpha; D3D10_BLEND DestBlendAlpha; D3D10_BLEND_OP BlendOpAlpha; UINT8 RenderTargetWriteMask; } D3D10_RENDER_TARGET_BLEND_DESC1; typedef struct D3D10_BLEND_DESC1 { BOOL AlphaToCoverageEnable; BOOL IndependentBlendEnable; D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT]; } D3D10_BLEND_DESC1; [ uuid(edad8d99-8a35-4d6d-8566-2ea276cde161), object, local, pointer_default(unique) ] interface ID3D10BlendState1 : ID3D10BlendState { void GetDesc1([out] D3D10_BLEND_DESC1 *pDesc); } typedef struct D3D10_TEXCUBE_ARRAY_SRV1 { UINT MostDetailedMip; UINT MipLevels; UINT First2DArrayFace; UINT NumCubes; } D3D10_TEXCUBE_ARRAY_SRV1; typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION1; typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC1 { DXGI_FORMAT Format; D3D10_SRV_DIMENSION1 ViewDimension; union { D3D10_BUFFER_SRV Buffer; D3D10_TEX1D_SRV Texture1D; D3D10_TEX1D_ARRAY_SRV Texture1DArray; D3D10_TEX2D_SRV Texture2D; D3D10_TEX2D_ARRAY_SRV Texture2DArray; D3D10_TEX2DMS_SRV Texture2DMS; D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray; D3D10_TEX3D_SRV Texture3D; D3D10_TEXCUBE_SRV TextureCube; D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray; }; } D3D10_SHADER_RESOURCE_VIEW_DESC1; [ uuid(9b7e4c87-342c-4106-a19f-4f2704f689f0), object, local, pointer_default(unique) ] interface ID3D10ShaderResourceView1 : ID3D10ShaderResourceView { void GetDesc1([out] D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc); } [ uuid(9b7e4c8f-342c-4106-a19f-4f2704f689f0), object, local, pointer_default(unique) ] interface ID3D10Device1 : ID3D10Device { HRESULT CreateShaderResourceView1( [in] ID3D10Resource *pResource, [in, out] const D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc, [out] ID3D10ShaderResourceView1 **ppSRView); HRESULT CreateBlendState1( [in] const D3D10_BLEND_DESC1 *pBlendStateDesc, [out] ID3D10BlendState1 **ppBlendState); D3D10_FEATURE_LEVEL1 GetFeatureLevel(); } const UINT D3D10_1_SDK_VERSION = 0x20; cpp_quote("HRESULT WINAPI D3D10CreateDevice1(IDXGIAdapter*,D3D10_DRIVER_TYPE,") cpp_quote(" HMODULE,UINT,D3D10_FEATURE_LEVEL1,UINT,ID3D10Device1**);") [local] HRESULT __stdcall D3D10CreateDeviceAndSwapChain1(IDXGIAdapter *adapter, enum D3D10_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags, D3D10_FEATURE_LEVEL1 feature_level, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, ID3D10Device1 **device); ================================================ FILE: wine/windows/d3d10_1shader.h ================================================ /* * Copyright 2010 Rico Schüller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3D10_1SHADER_H__ #define __D3D10_1SHADER_H__ #include "d3d10shader.h" DEFINE_GUID(IID_ID3D10ShaderReflection1, 0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47); #define INTERFACE ID3D10ShaderReflection1 DECLARE_INTERFACE_(ID3D10ShaderReflection1, IUnknown) { /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3D10ShaderReflection1 methods */ STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *desc) PURE; STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE; STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE; STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE; STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE; STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE; STDMETHOD(GetResourceBindingDescByName)(THIS_ const char *name, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE; STDMETHOD(GetMovInstructionCount)(THIS_ UINT *count) PURE; STDMETHOD(GetMovcInstructionCount)(THIS_ UINT *count) PURE; STDMETHOD(GetConversionInstructionCount)(THIS_ UINT *count) PURE; STDMETHOD(GetBitwiseInstructionCount)(THIS_ UINT *count) PURE; STDMETHOD(GetGSInputPrimitive)(THIS_ D3D10_PRIMITIVE *prim) PURE; STDMETHOD(IsLevel9Shader)(THIS_ BOOL *level9shader) PURE; STDMETHOD(IsSampleFrequencyShader)(THIS_ BOOL *samplefrequency) PURE; }; #undef INTERFACE #endif ================================================ FILE: wine/windows/d3d10effect.h ================================================ /* * Copyright 2009 Henri Verbeet for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef __WINE_D3D10EFFECT_H #define __WINE_D3D10EFFECT_H #include "d3d10.h" #define D3D10_EFFECT_VARIABLE_POOLED 0x1 #define D3D10_EFFECT_VARIABLE_ANNOTATION 0x2 #define D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT 0x4 #ifndef D3D10_BYTES_FROM_BITS #define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3) #endif typedef enum _D3D10_DEVICE_STATE_TYPES { D3D10_DST_SO_BUFFERS = 1, D3D10_DST_OM_RENDER_TARGETS, D3D10_DST_DEPTH_STENCIL_STATE, D3D10_DST_BLEND_STATE, D3D10_DST_VS, D3D10_DST_VS_SAMPLERS, D3D10_DST_VS_SHADER_RESOURCES, D3D10_DST_VS_CONSTANT_BUFFERS, D3D10_DST_GS, D3D10_DST_GS_SAMPLERS, D3D10_DST_GS_SHADER_RESOURCES, D3D10_DST_GS_CONSTANT_BUFFERS, D3D10_DST_PS, D3D10_DST_PS_SAMPLERS, D3D10_DST_PS_SHADER_RESOURCES, D3D10_DST_PS_CONSTANT_BUFFERS, D3D10_DST_IA_VERTEX_BUFFERS, D3D10_DST_IA_INDEX_BUFFER, D3D10_DST_IA_INPUT_LAYOUT, D3D10_DST_IA_PRIMITIVE_TOPOLOGY, D3D10_DST_RS_VIEWPORTS, D3D10_DST_RS_SCISSOR_RECTS, D3D10_DST_RS_RASTERIZER_STATE, D3D10_DST_PREDICATION, } D3D10_DEVICE_STATE_TYPES; typedef struct _D3D10_EFFECT_TYPE_DESC { const char *TypeName; D3D10_SHADER_VARIABLE_CLASS Class; D3D10_SHADER_VARIABLE_TYPE Type; UINT Elements; UINT Members; UINT Rows; UINT Columns; UINT PackedSize; UINT UnpackedSize; UINT Stride; } D3D10_EFFECT_TYPE_DESC; typedef struct _D3D10_EFFECT_VARIABLE_DESC { const char *Name; const char *Semantic; UINT Flags; UINT Annotations; UINT BufferOffset; UINT ExplicitBindPoint; } D3D10_EFFECT_VARIABLE_DESC; typedef struct _D3D10_TECHNIQUE_DESC { const char *Name; UINT Passes; UINT Annotations; } D3D10_TECHNIQUE_DESC; typedef struct _D3D10_STATE_BLOCK_MASK { BYTE VS; BYTE VSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)]; BYTE VSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; BYTE VSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; BYTE GS; BYTE GSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)]; BYTE GSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; BYTE GSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; BYTE PS; BYTE PSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)]; BYTE PSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; BYTE PSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; BYTE IAVertexBuffers[D3D10_BYTES_FROM_BITS(D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)]; BYTE IAIndexBuffer; BYTE IAInputLayout; BYTE IAPrimitiveTopology; BYTE OMRenderTargets; BYTE OMDepthStencilState; BYTE OMBlendState; BYTE RSViewports; BYTE RSScissorRects; BYTE RSRasterizerState; BYTE SOBuffers; BYTE Predication; } D3D10_STATE_BLOCK_MASK; typedef struct _D3D10_EFFECT_DESC { BOOL IsChildEffect; UINT ConstantBuffers; UINT SharedConstantBuffers; UINT GlobalVariables; UINT SharedGlobalVariables; UINT Techniques; } D3D10_EFFECT_DESC; typedef struct _D3D10_EFFECT_SHADER_DESC { const BYTE *pInputSignature; BOOL IsInline; const BYTE *pBytecode; UINT BytecodeLength; const char *SODecl; UINT NumInputSignatureEntries; UINT NumOutputSignatureEntries; } D3D10_EFFECT_SHADER_DESC; typedef struct _D3D10_PASS_DESC { const char *Name; UINT Annotations; BYTE *pIAInputSignature; SIZE_T IAInputSignatureSize; UINT StencilRef; UINT SampleMask; FLOAT BlendFactor[4]; } D3D10_PASS_DESC; typedef struct _D3D10_PASS_SHADER_DESC { struct ID3D10EffectShaderVariable *pShaderVariable; UINT ShaderIndex; } D3D10_PASS_SHADER_DESC; #define D3D10_EFFECT_COMPILE_CHILD_EFFECT 0x0001 #define D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS 0x0002 #define D3D10_EFFECT_SINGLE_THREADED 0x0008 DEFINE_GUID(IID_ID3D10EffectType, 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8, 0x37, 0x00, 0x18, 0x0b, 0x9b, 0x88, 0xfd); #define INTERFACE ID3D10EffectType DECLARE_INTERFACE(ID3D10EffectType) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_TYPE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(const char *, GetMemberName)(THIS_ UINT index) PURE; STDMETHOD_(const char *, GetMemberSemantic)(THIS_ UINT index) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectVariable, 0xae897105, 0x00e6, 0x45bf, 0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b); #define INTERFACE ID3D10EffectVariable DECLARE_INTERFACE(ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectConstantBuffer, 0x56648f4d, 0xcc8b, 0x4444, 0xa5, 0xad, 0xb5, 0xa3, 0xd7, 0x6e, 0x91, 0xb3); #define INTERFACE ID3D10EffectConstantBuffer DECLARE_INTERFACE_(ID3D10EffectConstantBuffer, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectConstantBuffer methods */ STDMETHOD(SetConstantBuffer)(THIS_ ID3D10Buffer *buffer) PURE; STDMETHOD(GetConstantBuffer)(THIS_ ID3D10Buffer **buffer) PURE; STDMETHOD(SetTextureBuffer)(THIS_ ID3D10ShaderResourceView *view) PURE; STDMETHOD(GetTextureBuffer)(THIS_ ID3D10ShaderResourceView **view) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectScalarVariable, 0x00e48f7b, 0xd2c8, 0x49e8, 0xa8, 0x6c, 0x02, 0x2d, 0xee, 0x53, 0x43, 0x1f); #define INTERFACE ID3D10EffectScalarVariable DECLARE_INTERFACE_(ID3D10EffectScalarVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectScalarVariable methods */ STDMETHOD(SetFloat)(THIS_ float value) PURE; STDMETHOD(GetFloat)(THIS_ float *value) PURE; STDMETHOD(SetFloatArray)(THIS_ float *values, UINT offset, UINT count) PURE; STDMETHOD(GetFloatArray)(THIS_ float *values, UINT offset, UINT count) PURE; STDMETHOD(SetInt)(THIS_ int value) PURE; STDMETHOD(GetInt)(THIS_ int *value) PURE; STDMETHOD(SetIntArray)(THIS_ int *values, UINT offset, UINT count) PURE; STDMETHOD(GetIntArray)(THIS_ int *values, UINT offset, UINT count) PURE; STDMETHOD(SetBool)(THIS_ BOOL value) PURE; STDMETHOD(GetBool)(THIS_ BOOL *value) PURE; STDMETHOD(SetBoolArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE; STDMETHOD(GetBoolArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectVectorVariable, 0x62b98c44, 0x1f82, 0x4c67, 0xbc, 0xd0, 0x72, 0xcf, 0x8f, 0x21, 0x7e, 0x81); #define INTERFACE ID3D10EffectVectorVariable DECLARE_INTERFACE_(ID3D10EffectVectorVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectVectorVariable methods */ STDMETHOD(SetBoolVector)(THIS_ BOOL *value) PURE; STDMETHOD(SetIntVector)(THIS_ int *value) PURE; STDMETHOD(SetFloatVector)(THIS_ float *value) PURE; STDMETHOD(GetBoolVector)(THIS_ BOOL *value) PURE; STDMETHOD(GetIntVector)(THIS_ int *value) PURE; STDMETHOD(GetFloatVector)(THIS_ float *value) PURE; STDMETHOD(SetBoolVectorArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE; STDMETHOD(SetIntVectorArray)(THIS_ int *values, UINT offset, UINT count) PURE; STDMETHOD(SetFloatVectorArray)(THIS_ float *values, UINT offset, UINT count) PURE; STDMETHOD(GetBoolVectorArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE; STDMETHOD(GetIntVectorArray)(THIS_ int *values, UINT offset, UINT count) PURE; STDMETHOD(GetFloatVectorArray)(THIS_ float *values, UINT offset, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectMatrixVariable, 0x50666c24, 0xb82f, 0x4eed, 0xa1, 0x72, 0x5b, 0x6e, 0x7e, 0x85, 0x22, 0xe0); #define INTERFACE ID3D10EffectMatrixVariable DECLARE_INTERFACE_(ID3D10EffectMatrixVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectMatrixVariable methods */ STDMETHOD(SetMatrix)(THIS_ float *data) PURE; STDMETHOD(GetMatrix)(THIS_ float *data) PURE; STDMETHOD(SetMatrixArray)(THIS_ float *data, UINT offset, UINT count) PURE; STDMETHOD(GetMatrixArray)(THIS_ float *data, UINT offset, UINT count) PURE; STDMETHOD(SetMatrixTranspose)(THIS_ float *data) PURE; STDMETHOD(GetMatrixTranspose)(THIS_ float *data) PURE; STDMETHOD(SetMatrixTransposeArray)(THIS_ float *data, UINT offset, UINT count) PURE; STDMETHOD(GetMatrixTransposeArray)(THIS_ float *data, UINT offset, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectStringVariable, 0x71417501, 0x8df9, 0x4e0a, 0xa7, 0x8a, 0x25, 0x5f, 0x97, 0x56, 0xba, 0xff); #define INTERFACE ID3D10EffectStringVariable DECLARE_INTERFACE_(ID3D10EffectStringVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectStringVariable methods */ STDMETHOD(GetString)(THIS_ const char **str) PURE; STDMETHOD(GetStringArray)(THIS_ const char **strs, UINT offset, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectShaderResourceVariable, 0xc0a7157b, 0xd872, 0x4b1d, 0x80, 0x73, 0xef, 0xc2, 0xac, 0xd4, 0xb1, 0xfc); #define INTERFACE ID3D10EffectShaderResourceVariable DECLARE_INTERFACE_(ID3D10EffectShaderResourceVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectShaderResourceVariable methods */ STDMETHOD(SetResource)(THIS_ ID3D10ShaderResourceView *resource) PURE; STDMETHOD(GetResource)(THIS_ ID3D10ShaderResourceView **resource) PURE; STDMETHOD(SetResourceArray)(THIS_ ID3D10ShaderResourceView **resources, UINT offset, UINT count) PURE; STDMETHOD(GetResourceArray)(THIS_ ID3D10ShaderResourceView **resources, UINT offset, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectRenderTargetViewVariable, 0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5, 0x7f, 0x67, 0xb7, 0x37, 0x12, 0x2b, 0x17); #define INTERFACE ID3D10EffectRenderTargetViewVariable DECLARE_INTERFACE_(ID3D10EffectRenderTargetViewVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectRenderTargetViewVariable methods */ STDMETHOD(SetRenderTarget)(THIS_ ID3D10RenderTargetView *view) PURE; STDMETHOD(GetRenderTarget)(THIS_ ID3D10RenderTargetView **view) PURE; STDMETHOD(SetRenderTargetArray)(THIS_ ID3D10RenderTargetView **views, UINT offset, UINT count) PURE; STDMETHOD(GetRenderTargetArray)(THIS_ ID3D10RenderTargetView **views, UINT offset, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectDepthStencilViewVariable, 0x3e02c918, 0xcc79, 0x4985, 0xb6, 0x22, 0x2d, 0x92, 0xad, 0x70, 0x16, 0x23); #define INTERFACE ID3D10EffectDepthStencilViewVariable DECLARE_INTERFACE_(ID3D10EffectDepthStencilViewVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectDepthStencilViewVariable methods */ STDMETHOD(SetDepthStencil)(THIS_ ID3D10DepthStencilView *view) PURE; STDMETHOD(GetDepthStencil)(THIS_ ID3D10DepthStencilView **view) PURE; STDMETHOD(SetDepthStencilArray)(THIS_ ID3D10DepthStencilView **views, UINT offset, UINT count) PURE; STDMETHOD(GetDepthStencilArray)(THIS_ ID3D10DepthStencilView **views, UINT offset, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectShaderVariable, 0x80849279, 0xc799, 0x4797, 0x8c, 0x33, 0x04, 0x07, 0xa0, 0x7d, 0x9e, 0x06); #define INTERFACE ID3D10EffectShaderVariable DECLARE_INTERFACE_(ID3D10EffectShaderVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectShaderVariable methods */ STDMETHOD(GetShaderDesc)(THIS_ UINT index, D3D10_EFFECT_SHADER_DESC *desc) PURE; STDMETHOD(GetVertexShader)(THIS_ UINT index, ID3D10VertexShader **shader) PURE; STDMETHOD(GetGeometryShader)(THIS_ UINT index, ID3D10GeometryShader **shader) PURE; STDMETHOD(GetPixelShader)(THIS_ UINT index, ID3D10PixelShader **shader) PURE; STDMETHOD(GetInputSignatureElementDesc)(THIS_ UINT shader_index, UINT element_index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE; STDMETHOD(GetOutputSignatureElementDesc)(THIS_ UINT shader_index, UINT element_index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectBlendVariable, 0x1fcd2294, 0xdf6d, 0x4eae, 0x86, 0xb3, 0x0e, 0x91, 0x60, 0xcf, 0xb0, 0x7b); #define INTERFACE ID3D10EffectBlendVariable DECLARE_INTERFACE_(ID3D10EffectBlendVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectBlendVariable methods */ STDMETHOD(GetBlendState)(THIS_ UINT index, ID3D10BlendState **blend_state) PURE; STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_BLEND_DESC *desc) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectDepthStencilVariable, 0xaf482368, 0x330a, 0x46a5, 0x9a, 0x5c, 0x01, 0xc7, 0x1a, 0xf2, 0x4c, 0x8d); #define INTERFACE ID3D10EffectDepthStencilVariable DECLARE_INTERFACE_(ID3D10EffectDepthStencilVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectDepthStencilVariable methods */ STDMETHOD(GetDepthStencilState)(THIS_ UINT index, ID3D10DepthStencilState **depth_stencil_state) PURE; STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_DEPTH_STENCIL_DESC *desc) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectRasterizerVariable, 0x21af9f0e, 0x4d94, 0x4ea9, 0x97, 0x85, 0x2c, 0xb7, 0x6b, 0x8c, 0x0b, 0x34); #define INTERFACE ID3D10EffectRasterizerVariable DECLARE_INTERFACE_(ID3D10EffectRasterizerVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectRasterizerVariable methods */ STDMETHOD(GetRasterizerState)(THIS_ UINT index, ID3D10RasterizerState **rasterizer_state) PURE; STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_RASTERIZER_DESC *desc) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectSamplerVariable, 0x6530d5c7, 0x07e9, 0x4271, 0xa4, 0x18, 0xe7, 0xce, 0x4b, 0xd1, 0xe4, 0x80); #define INTERFACE ID3D10EffectSamplerVariable DECLARE_INTERFACE_(ID3D10EffectSamplerVariable, ID3D10EffectVariable) { /* ID3D10EffectVariable methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE; STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE; STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE; STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE; STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE; STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE; STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE; STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE; /* ID3D10EffectSamplerVariable methods */ STDMETHOD(GetSampler)(THIS_ UINT index, ID3D10SamplerState **sampler) PURE; STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_SAMPLER_DESC *desc) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectTechnique, 0xdb122ce8, 0xd1c9, 0x4292, 0xb2, 0x37, 0x24, 0xed, 0x3d, 0xe8, 0xb1, 0x75); #define INTERFACE ID3D10EffectTechnique DECLARE_INTERFACE(ID3D10EffectTechnique) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_TECHNIQUE_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectPass *, GetPassByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectPass *, GetPassByName)(THIS_ const char *name) PURE; STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *mask) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10Effect, 0x51b0ca8b, 0xec0b, 0x4519, 0x87, 0x0d, 0x8e, 0xe1, 0xcb, 0x50, 0x17, 0xc7); #define INTERFACE ID3D10Effect DECLARE_INTERFACE_(ID3D10Effect, IUnknown) { /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3D10Effect methods */ STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(BOOL, IsPool)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ ID3D10Device **device) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetVariableByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetVariableByName)(THIS_ const char *name) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetVariableBySemantic)(THIS_ const char *semantic) PURE; STDMETHOD_(struct ID3D10EffectTechnique *, GetTechniqueByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectTechnique *, GetTechniqueByName)(THIS_ const char *name) PURE; STDMETHOD(Optimize)(THIS) PURE; STDMETHOD_(BOOL, IsOptimized)(THIS) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33); #define INTERFACE ID3D10EffectPool DECLARE_INTERFACE_(ID3D10EffectPool, IUnknown) { /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3D10EffectPool methods */ STDMETHOD_(struct ID3D10Effect *, AsEffect)(THIS) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10EffectPass, 0x5cfbeb89, 0x1a06, 0x46e0, 0xb2, 0x82, 0xe3, 0xf9, 0xbf, 0xa3, 0x6a, 0x54); #define INTERFACE ID3D10EffectPass DECLARE_INTERFACE(ID3D10EffectPass) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_PASS_DESC *desc) PURE; STDMETHOD(GetVertexShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE; STDMETHOD(GetGeometryShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE; STDMETHOD(GetPixelShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE; STDMETHOD(Apply)(THIS_ UINT flags) PURE; STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *mask) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10StateBlock, 0x0803425a, 0x57f5, 0x4dd6, 0x94, 0x65, 0xa8, 0x75, 0x70, 0x83, 0x4a, 0x08); #define INTERFACE ID3D10StateBlock DECLARE_INTERFACE_(ID3D10StateBlock, IUnknown) { /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **object) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3D10StateBlock methods */ STDMETHOD(Capture)(THIS) PURE; STDMETHOD(Apply)(THIS) PURE; STDMETHOD(ReleaseAllDeviceObjects)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ ID3D10Device **device) PURE; }; #undef INTERFACE #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3D10CompileEffectFromMemory(void *data, SIZE_T data_size, const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, UINT hlsl_flags, UINT fx_flags, ID3D10Blob **effect, ID3D10Blob **errors); HRESULT WINAPI D3D10CreateEffectFromMemory(void *data, SIZE_T data_size, UINT flags, ID3D10Device *device, ID3D10EffectPool *effect_pool, ID3D10Effect **effect); HRESULT WINAPI D3D10CreateEffectPoolFromMemory(void *data, SIZE_T data_size, UINT fx_flags, ID3D10Device *device, ID3D10EffectPool **effect_pool); HRESULT WINAPI D3D10CreateStateBlock(ID3D10Device *device, D3D10_STATE_BLOCK_MASK *mask, ID3D10StateBlock **stateblock); HRESULT WINAPI D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *mask_x, D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result); HRESULT WINAPI D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *mask); HRESULT WINAPI D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *mask, D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count); HRESULT WINAPI D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *mask); HRESULT WINAPI D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *mask, D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count); BOOL WINAPI D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *mask, D3D10_DEVICE_STATE_TYPES state_type, UINT idx); HRESULT WINAPI D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *mask_x, D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result); HRESULT WINAPI D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *mask_x, D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result); #ifdef __cplusplus } #endif #endif /* __WINE_D3D10EFFECT_H */ ================================================ FILE: wine/windows/d3d10misc.h ================================================ /* * Copyright 2008 Henri Verbeet for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3D10MISC_H__ #define __D3D10MISC_H__ #include "d3d10.h" #ifdef __cplusplus extern "C" { #endif typedef enum D3D10_DRIVER_TYPE { D3D10_DRIVER_TYPE_HARDWARE = 0, D3D10_DRIVER_TYPE_REFERENCE = 1, D3D10_DRIVER_TYPE_NULL = 2, D3D10_DRIVER_TYPE_SOFTWARE = 3, D3D10_DRIVER_TYPE_WARP = 5, } D3D10_DRIVER_TYPE; HRESULT WINAPI D3D10CreateDevice(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags, UINT sdk_version, ID3D10Device **device); HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, ID3D10Device **device); HRESULT WINAPI D3D10CreateBlob(SIZE_T data_size, ID3D10Blob **blob); #ifdef __cplusplus } #endif #endif /* __D3D10MISC_H__ */ ================================================ FILE: wine/windows/d3d10sdklayers.idl ================================================ /* * Copyright 2016 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi.idl"; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetMessage") cpp_quote("#endif") typedef enum D3D10_MESSAGE_CATEGORY { D3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED, D3D10_MESSAGE_CATEGORY_MISCELLANEOUS, D3D10_MESSAGE_CATEGORY_INITIALIZATION, D3D10_MESSAGE_CATEGORY_CLEANUP, D3D10_MESSAGE_CATEGORY_COMPILATION, D3D10_MESSAGE_CATEGORY_STATE_CREATION, D3D10_MESSAGE_CATEGORY_STATE_SETTING, D3D10_MESSAGE_CATEGORY_STATE_GETTING, D3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION, D3D10_MESSAGE_CATEGORY_EXECUTION, D3D10_MESSAGE_CATEGORY_SHADER, } D3D10_MESSAGE_CATEGORY; typedef enum D3D10_MESSAGE_SEVERITY { D3D10_MESSAGE_SEVERITY_CORRUPTION, D3D10_MESSAGE_SEVERITY_ERROR, D3D10_MESSAGE_SEVERITY_WARNING, D3D10_MESSAGE_SEVERITY_INFO, D3D10_MESSAGE_SEVERITY_MESSAGE, } D3D10_MESSAGE_SEVERITY; typedef enum D3D10_MESSAGE_ID { D3D10_MESSAGE_ID_UNKNOWN = 0, D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD, D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD, D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD, D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD, D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD, D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD, D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD, D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD, D3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD, D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD, D3D10_MESSAGE_ID_STRING_FROM_APPLICATION, D3D10_MESSAGE_ID_CORRUPTED_THIS, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER1, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER2, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER3, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER4, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER5, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER6, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER7, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER8, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER9, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER10, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER11, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER12, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER13, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER14, D3D10_MESSAGE_ID_CORRUPTED_PARAMETER15, D3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING, D3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY, D3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT, D3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA, D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA, D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN, D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS, D3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS, D3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY, D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES, D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE, D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS, D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS, D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN, D3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC, D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS, D3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION, D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT, D3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT, D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES, D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE, D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA, D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS, D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS, D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN, D3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC, D3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION, D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT, D3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT, D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES, D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE, D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA, D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS, D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS, D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN, D3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC, D3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION, D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT, D3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT, D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES, D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE, D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA, D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS, D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS, D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS, D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN, D3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC, D3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN, D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC, D3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY, D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE, D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE, D3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY, D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE, D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE, D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE, D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE, D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP, D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS, D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS, D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC, D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND, D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND, D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP, D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA, D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA, D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA, D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK, D3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS, D3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC, D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY, D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS, D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG, D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC, D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED, D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED, D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER, D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE, D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER, D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID, D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE, D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED, D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY, D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY, D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY, D3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER, D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED, D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY, D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT, D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR, D3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH, D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH, D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID, D3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY, D3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY, D3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY, D3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY, D3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY, D3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY, D3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID, D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE, D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE, D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX, D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE, D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE, D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE, D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE, D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE, D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE, D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE, D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX, D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE, D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID, D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID, D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID, D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID, D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID, D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE, D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS, D3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED, D3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN, D3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED, D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE, D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE, D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS, D3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED, D3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN, D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE, D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED, D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE, D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE, D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS, D3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED, D3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN, D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE, D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED, D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE, D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE, D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS, D3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED, D3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN, D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE, D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED, D3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED, D3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED, D3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS, D3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN, D3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN, D3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE, D3D10_MESSAGE_ID_REF_THREADING_MODE, D3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION, D3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION, D3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION, D3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE, D3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER, D3D10_MESSAGE_ID_REF_OUT_OF_MEMORY, D3D10_MESSAGE_ID_REF_INFO, D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW, D3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW, D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW, D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW, D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW, D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW, D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET, D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND, D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX, D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE, D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK, D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE, D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS, D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET, D3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET, D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET, D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL, D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET, D3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET, D3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH, D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL, D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL, D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET, D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID, D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL, D3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH, D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH, D3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT, D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET, D3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED, D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY, D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED, D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED, D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED, D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED, D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED, D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED, D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED, D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED, D3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE, D3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER, D3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING, D3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0, D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT, D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT, D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT, D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN, D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN, D3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC, D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC, D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH, D3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW, D3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS, D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH, D3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY, D3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY, D3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER, D3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED, D3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER, D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN, D3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN, D3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC, D3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER, D3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER, D3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE, D3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED, D3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION, D3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE, D3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS, D3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION, D3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS, D3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN, D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE, D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS, D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL, D3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH, D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED, D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN, D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE, D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT, D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH, D3D10_MESSAGE_ID_LIVE_OBJECT_SUMMARY, D3D10_MESSAGE_ID_LIVE_BUFFER, D3D10_MESSAGE_ID_LIVE_TEXTURE1D, D3D10_MESSAGE_ID_LIVE_TEXTURE2D, D3D10_MESSAGE_ID_LIVE_TEXTURE3D, D3D10_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW, D3D10_MESSAGE_ID_LIVE_RENDERTARGETVIEW, D3D10_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW, D3D10_MESSAGE_ID_LIVE_VERTEXSHADER, D3D10_MESSAGE_ID_LIVE_GEOMETRYSHADER, D3D10_MESSAGE_ID_LIVE_PIXELSHADER, D3D10_MESSAGE_ID_LIVE_INPUTLAYOUT, D3D10_MESSAGE_ID_LIVE_SAMPLER, D3D10_MESSAGE_ID_LIVE_BLENDSTATE, D3D10_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE, D3D10_MESSAGE_ID_LIVE_RASTERIZERSTATE, D3D10_MESSAGE_ID_LIVE_QUERY, D3D10_MESSAGE_ID_LIVE_PREDICATE, D3D10_MESSAGE_ID_LIVE_COUNTER, D3D10_MESSAGE_ID_LIVE_DEVICE, D3D10_MESSAGE_ID_LIVE_SWAPCHAIN, D3D10_MESSAGE_ID_D3D10_MESSAGES_END, D3D10_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x00100000, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED, D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE, D3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED, D3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS, D3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS, D3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS, D3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND, D3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D, D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE, D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE, D3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS, D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS, D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX, D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS, D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED, D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS, D3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY, D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK, D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK, D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT, D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE, D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE, D3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO, D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES, D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET, D3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER, D3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE, D3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE, D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE, D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS, D3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT, D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS, D3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES, D3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED, D3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED, D3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED, D3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED, D3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED, D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND, D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND, D3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE, D3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED, D3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3, D3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED, D3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO, D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION, D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED, D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR, D3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA, D3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP, D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED, D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT, D3D10_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES, D3D10_MESSAGE_ID_D3D10L9_MESSAGES_END, } D3D10_MESSAGE_ID; typedef struct D3D10_MESSAGE { D3D10_MESSAGE_CATEGORY Category; D3D10_MESSAGE_SEVERITY Severity; D3D10_MESSAGE_ID ID; const char *pDescription; SIZE_T DescriptionByteLength; } D3D10_MESSAGE; typedef struct D3D10_INFO_QUEUE_FILTER_DESC { UINT NumCategories; D3D10_MESSAGE_CATEGORY *pCategoryList; UINT NumSeverities; D3D10_MESSAGE_SEVERITY *pSeverityList; UINT NumIDs; D3D10_MESSAGE_ID *pIDList; } D3D10_INFO_QUEUE_FILTER_DESC; typedef struct D3D10_INFO_QUEUE_FILTER { D3D10_INFO_QUEUE_FILTER_DESC AllowList; D3D10_INFO_QUEUE_FILTER_DESC DenyList; } D3D10_INFO_QUEUE_FILTER; [ local, object, uuid(1b940b17-2642-4d1f-ab1f-b99bad0c395f), pointer_default(unique) ] interface ID3D10InfoQueue : IUnknown { HRESULT SetMessageCountLimit( [in] UINT64 limit ); void ClearStoredMessages(); HRESULT GetMessage( [in] UINT64 message_idx, [out] D3D10_MESSAGE *message, [in, out] SIZE_T *message_size ); UINT64 GetNumMessagesAllowedByStorageFilter(); UINT64 GetNumMessagesDeniedByStorageFilter(); UINT64 GetNumStoredMessages(); UINT64 GetNumStoredMessagesAllowedByRetrievalFilter(); UINT64 GetNumMessagesDiscardedByMessageCountLimit(); UINT64 GetMessageCountLimit(); HRESULT AddStorageFilterEntries( [in] D3D10_INFO_QUEUE_FILTER *filter ); HRESULT GetStorageFilter( [out] D3D10_INFO_QUEUE_FILTER *filter, [in, out] SIZE_T *filter_size ); void ClearStorageFilter(); HRESULT PushEmptyStorageFilter(); HRESULT PushCopyOfStorageFilter(); HRESULT PushStorageFilter( [in] D3D10_INFO_QUEUE_FILTER *filter ); void PopStorageFilter(); UINT GetStorageFilterStackSize(); HRESULT AddRetrievalFilterEntries( [in] D3D10_INFO_QUEUE_FILTER *filter ); HRESULT GetRetrievalFilter( [out] D3D10_INFO_QUEUE_FILTER *filter, [in, out] SIZE_T *filterbytelength ); void ClearRetrievalFilter(); HRESULT PushEmptyRetrievalFilter(); HRESULT PushCopyOfRetrievalFilter(); HRESULT PushRetrievalFilter( [in] D3D10_INFO_QUEUE_FILTER *filter ); void PopRetrievalFilter(); UINT GetRetrievalFilterStackSize(); HRESULT AddMessage( [in] D3D10_MESSAGE_CATEGORY category, [in] D3D10_MESSAGE_SEVERITY severity, [in] D3D10_MESSAGE_ID id, [in] const char *description ); HRESULT AddApplicationMessage( [in] D3D10_MESSAGE_SEVERITY severity, [in] const char *description ); HRESULT SetBreakOnCategory( [in] D3D10_MESSAGE_CATEGORY category, [in] BOOL enable ); HRESULT SetBreakOnSeverity( [in] D3D10_MESSAGE_SEVERITY severity, [in] BOOL enable ); HRESULT SetBreakOnID( [in] D3D10_MESSAGE_ID id, [in] BOOL enable ); BOOL GetBreakOnCategory( [in] D3D10_MESSAGE_CATEGORY category ); BOOL GetBreakOnSeverity( [in] D3D10_MESSAGE_SEVERITY severity ); BOOL GetBreakOnID( [in] D3D10_MESSAGE_ID id ); void SetMuteDebugOutput( [in] BOOL mute ); BOOL GetMuteDebugOutput(); } ================================================ FILE: wine/windows/d3d10shader.h ================================================ /* * Copyright 2009 Henri Verbeet for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef __WINE_D3D10SHADER_H #define __WINE_D3D10SHADER_H #include "d3d10.h" #define D3D10_SHADER_DEBUG 0x0001 #define D3D10_SHADER_SKIP_VALIDATION 0x0002 #define D3D10_SHADER_SKIP_OPTIMIZATION 0x0004 #define D3D10_SHADER_PACK_MATRIX_ROW_MAJOR 0x0008 #define D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR 0x0010 #define D3D10_SHADER_PARTIAL_PRECISION 0x0020 #define D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT 0x0040 #define D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT 0x0080 #define D3D10_SHADER_NO_PRESHADER 0x0100 #define D3D10_SHADER_AVOID_FLOW_CONTROL 0x0200 #define D3D10_SHADER_PREFER_FLOW_CONTROL 0x0400 #define D3D10_SHADER_ENABLE_STRICTNESS 0x0800 #define D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000 #define D3D10_SHADER_IEEE_STRICTNESS 0x2000 #define D3D10_SHADER_WARNINGS_ARE_ERRORS 0x40000 #define D3D10_SHADER_OPTIMIZATION_LEVEL0 0x4000 #define D3D10_SHADER_OPTIMIZATION_LEVEL1 0x0000 #define D3D10_SHADER_OPTIMIZATION_LEVEL2 0xC000 #define D3D10_SHADER_OPTIMIZATION_LEVEL3 0x8000 /* These are defined as version-neutral in d3dcommon.h */ typedef D3D_SHADER_MACRO D3D10_SHADER_MACRO; typedef D3D_SHADER_MACRO *LPD3D10_SHADER_MACRO; typedef D3D_SHADER_VARIABLE_CLASS D3D10_SHADER_VARIABLE_CLASS; typedef D3D_SHADER_VARIABLE_CLASS *LPD3D10_SHADER_VARIABLE_CLASS; typedef D3D_CBUFFER_TYPE D3D10_CBUFFER_TYPE; typedef D3D_CBUFFER_TYPE *LPD3D10_CBUFFER_TYPE; typedef D3D_REGISTER_COMPONENT_TYPE D3D10_REGISTER_COMPONENT_TYPE; typedef D3D_RESOURCE_RETURN_TYPE D3D10_RESOURCE_RETURN_TYPE; typedef D3D_NAME D3D10_NAME; typedef D3D_SHADER_INPUT_TYPE D3D10_SHADER_INPUT_TYPE; typedef D3D_SHADER_INPUT_TYPE *LPD3D10_SHADER_INPUT_TYPE; typedef D3D_SHADER_VARIABLE_TYPE D3D10_SHADER_VARIABLE_TYPE; typedef D3D_SHADER_VARIABLE_TYPE *LPD3D10_SHADER_VARIABLE_TYPE; typedef D3D_INCLUDE_TYPE D3D10_INCLUDE_TYPE; typedef ID3DInclude ID3D10Include; typedef ID3DInclude *LPD3D10INCLUDE; #define IID_ID3D10Include IID_ID3DInclude typedef struct _D3D10_SHADER_INPUT_BIND_DESC { const char *Name; D3D10_SHADER_INPUT_TYPE Type; UINT BindPoint; UINT BindCount; UINT uFlags; D3D10_RESOURCE_RETURN_TYPE ReturnType; D3D10_SRV_DIMENSION Dimension; UINT NumSamples; } D3D10_SHADER_INPUT_BIND_DESC; typedef struct _D3D10_SIGNATURE_PARAMETER_DESC { const char *SemanticName; UINT SemanticIndex; UINT Register; D3D10_NAME SystemValueType; D3D10_REGISTER_COMPONENT_TYPE ComponentType; BYTE Mask; BYTE ReadWriteMask; } D3D10_SIGNATURE_PARAMETER_DESC; typedef struct _D3D10_SHADER_DESC { UINT Version; const char *Creator; UINT Flags; UINT ConstantBuffers; UINT BoundResources; UINT InputParameters; UINT OutputParameters; UINT InstructionCount; UINT TempRegisterCount; UINT TempArrayCount; UINT DefCount; UINT DclCount; UINT TextureNormalInstructions; UINT TextureLoadInstructions; UINT TextureCompInstructions; UINT TextureBiasInstructions; UINT TextureGradientInstructions; UINT FloatInstructionCount; UINT IntInstructionCount; UINT UintInstructionCount; UINT StaticFlowControlCount; UINT DynamicFlowControlCount; UINT MacroInstructionCount; UINT ArrayInstructionCount; UINT CutInstructionCount; UINT EmitInstructionCount; D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology; UINT GSMaxOutputVertexCount; } D3D10_SHADER_DESC; typedef struct _D3D10_SHADER_BUFFER_DESC { const char *Name; D3D10_CBUFFER_TYPE Type; UINT Variables; UINT Size; UINT uFlags; } D3D10_SHADER_BUFFER_DESC; typedef struct _D3D10_SHADER_VARIABLE_DESC { const char *Name; UINT StartOffset; UINT Size; UINT uFlags; void *DefaultValue; } D3D10_SHADER_VARIABLE_DESC; typedef struct _D3D10_SHADER_TYPE_DESC { D3D10_SHADER_VARIABLE_CLASS Class; D3D10_SHADER_VARIABLE_TYPE Type; UINT Rows; UINT Columns; UINT Elements; UINT Members; UINT Offset; } D3D10_SHADER_TYPE_DESC; DEFINE_GUID(IID_ID3D10ShaderReflectionType, 0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd); #define INTERFACE ID3D10ShaderReflectionType DECLARE_INTERFACE(ID3D10ShaderReflectionType) { STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_TYPE_DESC *desc) PURE; STDMETHOD_(struct ID3D10ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10ShaderReflectionType *, GetMemberTypeByName)(THIS_ const char *name) PURE; STDMETHOD_(const char *, GetMemberTypeName)(THIS_ UINT index) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10ShaderReflectionVariable, 0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1); #define INTERFACE ID3D10ShaderReflectionVariable DECLARE_INTERFACE(ID3D10ShaderReflectionVariable) { STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D10ShaderReflectionType *, GetType)(THIS) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10ShaderReflectionConstantBuffer, 0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0); #define INTERFACE ID3D10ShaderReflectionConstantBuffer DECLARE_INTERFACE(ID3D10ShaderReflectionConstantBuffer) { STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_BUFFER_DESC *desc) PURE; STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D10ShaderReflection, 0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa); #define INTERFACE ID3D10ShaderReflection DECLARE_INTERFACE_(ID3D10ShaderReflection, IUnknown) { /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3D10ShaderReflection methods */ STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *desc) PURE; STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE; STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE; STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE; STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE; }; #undef INTERFACE #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3D10CompileShader(const char *data, SIZE_T data_size, const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entrypoint, const char *profile, UINT flags, ID3D10Blob **shader, ID3D10Blob **error_messages); HRESULT WINAPI D3D10DisassembleShader(const void *data, SIZE_T data_size, BOOL color_code, const char *comments, ID3D10Blob **disassembly); const char * WINAPI D3D10GetVertexShaderProfile(ID3D10Device *device); const char * WINAPI D3D10GetGeometryShaderProfile(ID3D10Device *device); const char * WINAPI D3D10GetPixelShaderProfile(ID3D10Device *device); HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector); HRESULT WINAPI D3D10GetInputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob); HRESULT WINAPI D3D10GetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob); HRESULT WINAPI D3D10GetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob); HRESULT WINAPI D3D10GetShaderDebugInfo(const void *data, SIZE_T data_size, ID3D10Blob **blob); #ifdef __cplusplus } #endif #endif /* __WINE_D3D10SHADER_H */ ================================================ FILE: wine/windows/d3d11.idl ================================================ /* * Copyright 2010 Rico Schüller * Copyright 2013 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi.idl"; import "d3dcommon.idl"; typedef D3D_PRIMITIVE D3D11_PRIMITIVE; typedef D3D_PRIMITIVE_TOPOLOGY D3D11_PRIMITIVE_TOPOLOGY; typedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION; typedef RECT D3D11_RECT; interface ID3D11Device; interface ID3D11ClassLinkage; interface ID3D11Resource; interface ID3D11VideoProcessorInputView; cpp_quote("#ifndef _D3D11_CONSTANTS") cpp_quote("#define _D3D11_CONSTANTS") const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14; const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4; const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32; const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15; const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT = 16; const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4; const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15; const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1; const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1; const UINT D3D11_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64; const UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4; const UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1; const UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1; const UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1; const UINT D3D11_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32; const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1; const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128; const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1; const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1; const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128; const UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1; const UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16; const UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1; const UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1; const UINT D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT = 16; const UINT D3D11_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32; const UINT D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4; const UINT D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32; const UINT D3D11_COMMONSHADER_TEMP_REGISTER_COUNT = 4096; const UINT D3D11_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3; const UINT D3D11_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3; const UINT D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10; const INT D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10; const INT D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8; const UINT D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7; const UINT D3D11_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 256; const UINT D3D11_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP = 64; const UINT D3D11_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 240; const UINT D3D11_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP = 68; const UINT D3D11_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 224; const UINT D3D11_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP = 72; const UINT D3D11_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 208; const UINT D3D11_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP = 76; const UINT D3D11_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 192; const UINT D3D11_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP = 84; const UINT D3D11_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 176; const UINT D3D11_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP = 92; const UINT D3D11_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 160; const UINT D3D11_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP = 100; const UINT D3D11_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 144; const UINT D3D11_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP = 112; const UINT D3D11_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 128; const UINT D3D11_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP = 128; const UINT D3D11_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 112; const UINT D3D11_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP = 144; const UINT D3D11_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 96; const UINT D3D11_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP = 168; const UINT D3D11_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 80; const UINT D3D11_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP = 204; const UINT D3D11_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 64; const UINT D3D11_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP = 256; const UINT D3D11_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 48; const UINT D3D11_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP = 340; const UINT D3D11_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 32; const UINT D3D11_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP = 512; const UINT D3D11_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 16; const UINT D3D11_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP = 768; const UINT D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION = 1; const UINT D3D11_CS_4_X_RAW_UAV_BYTE_ALIGNMENT = 256; const UINT D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP = 768; const UINT D3D11_CS_4_X_THREAD_GROUP_MAX_X = 768; const UINT D3D11_CS_4_X_THREAD_GROUP_MAX_Y = 768; const UINT D3D11_CS_4_X_UAV_REGISTER_COUNT = 1; const UINT D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION = 65535; const UINT D3D11_CS_TGSM_REGISTER_COUNT = 8192; const UINT D3D11_CS_TGSM_REGISTER_READS_PER_INST = 1; const UINT D3D11_CS_TGSM_RESOURCE_REGISTER_COMPONENTS = 1; const UINT D3D11_CS_TGSM_RESOURCE_REGISTER_READ_PORTS = 1; const UINT D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP = 1024; const UINT D3D11_CS_THREAD_GROUP_MAX_X = 1024; const UINT D3D11_CS_THREAD_GROUP_MAX_Y = 1024; const UINT D3D11_CS_THREAD_GROUP_MAX_Z = 64; const UINT D3D11_CS_THREAD_GROUP_MIN_X = 1; const UINT D3D11_CS_THREAD_GROUP_MIN_Y = 1; const UINT D3D11_CS_THREAD_GROUP_MIN_Z = 1; const UINT D3D11_CS_THREAD_LOCAL_TEMP_REGISTER_POOL = 16384; const UINT D3D11_DEFAULT_DEPTH_BIAS = 0; cpp_quote("#define D3D11_DEFAULT_DEPTH_BIAS_CLAMP 0.0f") const UINT D3D11_DEFAULT_MAX_ANISOTROPY = 16; cpp_quote("#define D3D11_DEFAULT_MIP_LOD_BIAS 0.0f") const UINT D3D11_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0; const UINT D3D11_DEFAULT_SAMPLE_MASK = 0xffffffff; const UINT D3D11_DEFAULT_SCISSOR_ENDX = 0; const UINT D3D11_DEFAULT_SCISSOR_ENDY = 0; const UINT D3D11_DEFAULT_SCISSOR_STARTX = 0; const UINT D3D11_DEFAULT_SCISSOR_STARTY = 0; cpp_quote("#define D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS 0.0f") const UINT D3D11_DEFAULT_STENCIL_READ_MASK = 0xff; const UINT D3D11_DEFAULT_STENCIL_REFERENCE = 0; const UINT D3D11_DEFAULT_STENCIL_WRITE_MASK = 0xff; const UINT D3D11_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0; const UINT D3D11_DEFAULT_VIEWPORT_HEIGHT = 0; cpp_quote("#define D3D11_DEFAULT_VIEWPORT_MAX_DEPTH 0.0f") cpp_quote("#define D3D11_DEFAULT_VIEWPORT_MIN_DEPTH 0.0f") const UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTX = 0; const UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTY = 0; const UINT D3D11_DEFAULT_VIEWPORT_WIDTH = 0; cpp_quote("#define D3D11_FLOAT32_MAX (3.402823466e+38f)") const UINT D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32; const unsigned int D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT = 8; const UINT D3D11_MAX_MAXANISOTROPY = 16; const UINT D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT = 32; const UINT D3D11_VIEWPORT_BOUNDS_MAX = 32767; const INT D3D11_VIEWPORT_BOUNDS_MIN = -32768; const UINT D3D11_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15; const UINT D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16; const UINT D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL = 0xffffffff; const UINT D3D11_KEEP_UNORDERED_ACCESS_VIEWS = 0xffffffff; const UINT D3D11_SHADER_MAJOR_VERSION = 5; const UINT D3D11_SHADER_MAX_INSTANCES = 65535; const UINT D3D11_SHADER_MAX_INTERFACES = 253; const UINT D3D11_SHADER_MAX_INTERFACE_CALL_SITES = 4096; const UINT D3D11_SHADER_MAX_TYPES = 65535; const UINT D3D11_SHADER_MINOR_VERSION = 0; const UINT D3D11_VS_OUTPUT_REGISTER_COUNT = 32; const UINT D3D11_OMAC_SIZE = 16; const UINT D3D11_PS_CS_UAV_REGISTER_COMPONENTS = 1; const UINT D3D11_PS_CS_UAV_REGISTER_COUNT = 8; const UINT D3D11_PS_CS_UAV_REGISTER_READS_PER_INST = 1; const UINT D3D11_PS_CS_UAV_REGISTER_READ_PORTS = 1; const UINT D3D11_PS_FRONTFACING_DEFAULT_VALUE = 0xffffffff; const UINT D3D11_PS_FRONTFACING_FALSE_VALUE = 0; const UINT D3D11_PS_FRONTFACING_TRUE_VALUE = 0xffffffff; const UINT D3D11_PS_INPUT_REGISTER_COMPONENTS = 4; const UINT D3D11_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; const UINT D3D11_PS_INPUT_REGISTER_COUNT = 32; const UINT D3D11_PS_INPUT_REGISTER_READS_PER_INST = 2; const UINT D3D11_PS_INPUT_REGISTER_READ_PORTS = 1; cpp_quote("#define D3D11_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT (0.0f)") const UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1; const UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32; const UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1; const UINT D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENTS = 1; const UINT D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32; const UINT D3D11_PS_OUTPUT_MASK_REGISTER_COUNT = 1; const UINT D3D11_PS_OUTPUT_REGISTER_COMPONENTS = 4; const UINT D3D11_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; const UINT D3D11_PS_OUTPUT_REGISTER_COUNT = 8; cpp_quote("#define D3D11_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT (0.5f)") const UINT D3D11_RAW_UAV_SRV_BYTE_ALIGNMENT = 16; const UINT D3D11_REQ_BLEND_OBJECT_COUNT_PER_DEVICE = 4096; const UINT D3D11_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27; const UINT D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096; const UINT D3D11_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE = 4096; const UINT D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32; const UINT D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32; const UINT D3D11_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 16384; const UINT D3D11_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024; const UINT D3D11_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096; const UINT D3D11_REQ_MAXANISOTROPY = 16; const UINT D3D11_REQ_MIP_LEVELS = 15; const UINT D3D11_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048; const UINT D3D11_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE = 4096; const UINT D3D11_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 16384; const UINT D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM = 128; cpp_quote("#define D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM (0.25f)") const UINT D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM = 2048; const UINT D3D11_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP = 20; const UINT D3D11_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE = 4096; const UINT D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048; const UINT D3D11_REQ_TEXTURE1D_U_DIMENSION = 16384; const UINT D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048; const UINT D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384; const UINT D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048; const UINT D3D11_REQ_TEXTURECUBE_DIMENSION = 16384; const UINT D3D11_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0; const UINT D3D11_SHIFT_INSTRUCTION_PAD_VALUE = 0; const UINT D3D11_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5; const UINT D3D11_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048; const UINT D3D11_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 512; const UINT D3D11_SO_BUFFER_SLOT_COUNT = 4; const UINT D3D11_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff; const UINT D3D11_SO_NO_RASTERIZED_STREAM = 0xffffffff; const UINT D3D11_SO_OUTPUT_COMPONENT_COUNT = 128; const UINT D3D11_SO_STREAM_COUNT = 4; const UINT D3D11_SPEC_DATE_DAY = 16; const UINT D3D11_SPEC_DATE_MONTH = 05; const UINT D3D11_SPEC_DATE_YEAR = 2011; cpp_quote("#define D3D11_SPEC_VERSION (1.07)") cpp_quote("#define D3D11_SRGB_GAMMA (2.2f)") cpp_quote("#define D3D11_SRGB_TO_FLOAT_DENOMINATOR_1 (12.92f)") cpp_quote("#define D3D11_SRGB_TO_FLOAT_DENOMINATOR_2 (1.055f)") cpp_quote("#define D3D11_SRGB_TO_FLOAT_EXPONENT (2.4f)") cpp_quote("#define D3D11_SRGB_TO_FLOAT_OFFSET (0.055f)") cpp_quote("#define D3D11_SRGB_TO_FLOAT_THRESHOLD (0.04045f)") cpp_quote("#define D3D11_SRGB_TO_FLOAT_TOLERANCE_IN_ULP (0.5f)") const UINT D3D11_STANDARD_COMPONENT_BIT_COUNT = 32; const UINT D3D11_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64; const UINT D3D11_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4; const UINT D3D11_STANDARD_PIXEL_COMPONENT_COUNT = 128; const UINT D3D11_STANDARD_PIXEL_ELEMENT_COUNT = 32; const UINT D3D11_STANDARD_VECTOR_SIZE = 4; const UINT D3D11_STANDARD_VERTEX_ELEMENT_COUNT = 32; const UINT D3D11_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64; cpp_quote("#endif") cpp_quote("#ifndef _D3D11_1_CONSTANTS") cpp_quote("#define _D3D11_1_CONSTANTS") const UINT D3D11_1_UAV_SLOT_COUNT = 64; cpp_quote("#endif") cpp_quote("#ifndef _D3D11_2_CONSTANTS") cpp_quote("#define _D3D11_2_CONSTANTS") const UINT D3D11_2_TILED_RESOURCE_TILE_SIZE_IN_BYTES = 0x10000; cpp_quote("#endif") cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D11_DEFAULT {};") cpp_quote("extern const DECLSPEC_SELECTANY CD3D11_DEFAULT D3D11_DEFAULT;") cpp_quote("#endif") typedef enum D3D11_BLEND { D3D11_BLEND_ZERO = 1, D3D11_BLEND_ONE = 2, D3D11_BLEND_SRC_COLOR = 3, D3D11_BLEND_INV_SRC_COLOR = 4, D3D11_BLEND_SRC_ALPHA = 5, D3D11_BLEND_INV_SRC_ALPHA = 6, D3D11_BLEND_DEST_ALPHA = 7, D3D11_BLEND_INV_DEST_ALPHA = 8, D3D11_BLEND_DEST_COLOR = 9, D3D11_BLEND_INV_DEST_COLOR = 10, D3D11_BLEND_SRC_ALPHA_SAT = 11, D3D11_BLEND_BLEND_FACTOR = 14, D3D11_BLEND_INV_BLEND_FACTOR = 15, D3D11_BLEND_SRC1_COLOR = 16, D3D11_BLEND_INV_SRC1_COLOR = 17, D3D11_BLEND_SRC1_ALPHA = 18, D3D11_BLEND_INV_SRC1_ALPHA = 19, } D3D11_BLEND; typedef enum D3D11_BLEND_OP { D3D11_BLEND_OP_ADD = 1, D3D11_BLEND_OP_SUBTRACT, D3D11_BLEND_OP_REV_SUBTRACT, D3D11_BLEND_OP_MIN, D3D11_BLEND_OP_MAX } D3D11_BLEND_OP; typedef enum D3D11_VIDEO_DECODER_BUFFER_TYPE { D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS = 0, D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL = 1, D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE = 2, D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL = 3, D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX = 4, D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL = 5, D3D11_VIDEO_DECODER_BUFFER_BITSTREAM = 6, D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR = 7, D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN = 8, } D3D11_VIDEO_DECODER_BUFFER_TYPE; typedef enum D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE { D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE = 0, D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_BACKGROUND = 1, D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_DESTINATION = 2, D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM = 3, } D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE; typedef enum D3D11_VIDEO_PROCESSOR_OUTPUT_RATE { D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL = 0, D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF = 1, D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM = 2, } D3D11_VIDEO_PROCESSOR_OUTPUT_RATE; typedef enum D3D11_VIDEO_PROCESSOR_STEREO_FORMAT { D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO = 0, D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL = 1, D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL = 2, D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE = 3, D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET = 4, D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED = 5, D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED = 6, D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD = 7, } D3D11_VIDEO_PROCESSOR_STEREO_FORMAT; typedef enum D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE { D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE = 0, D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME0 = 1, D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME1 = 2, } D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE; typedef enum D3D11_VIDEO_PROCESSOR_ROTATION { D3D11_VIDEO_PROCESSOR_ROTATION_IDENTITY = 0, D3D11_VIDEO_PROCESSOR_ROTATION_90 = 1, D3D11_VIDEO_PROCESSOR_ROTATION_180 = 2, D3D11_VIDEO_PROCESSOR_ROTATION_270 = 3, } D3D11_VIDEO_PROCESSOR_ROTATION; typedef enum D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS { D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BLEND = 0x01, D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BOB = 0x02, D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE = 0x04, D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION = 0x08, D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_INVERSE_TELECINE = 0x10, D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_FRAME_RATE_CONVERSION = 0x20, } D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS; typedef enum D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS { D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32 = 0x00000001, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_22 = 0x00000002, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2224 = 0x00000004, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2332 = 0x00000008, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32322 = 0x00000010, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_55 = 0x00000020, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_64 = 0x00000040, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_87 = 0x00000080, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_222222222223 = 0x00000100, D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_OTHER = 0x80000000, } D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS; typedef enum D3D11_CONTENT_PROTECTION_CAPS { D3D11_CONTENT_PROTECTION_CAPS_SOFTWARE = 0x00000001, D3D11_CONTENT_PROTECTION_CAPS_HARDWARE = 0x00000002, D3D11_CONTENT_PROTECTION_CAPS_PROTECTION_ALWAYS_ON = 0x00000004, D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION = 0x00000008, D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY = 0x00000010, D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY = 0x00000020, D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK = 0x00000040, D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY = 0x00000080, D3D11_CONTENT_PROTECTION_CAPS_SEQUENTIAL_CTR_IV = 0x00000100, D3D11_CONTENT_PROTECTION_CAPS_ENCRYPT_SLICEDATA_ONLY = 0x00000200, D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT = 0x00000400, D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECT_UNCOMPRESSED = 0x00000800, D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECTED_MEMORY_PAGEABLE = 0x00001000, D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN = 0x00002000, D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_DRM_COMMUNICATION = 0x00004000, } D3D11_CONTENT_PROTECTION_CAPS; typedef enum D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE { D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_UNDEFINED = 0x00000000, D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_16_235 = 0x00000001, D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_0_255 = 0x00000002, } D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE; typedef enum D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE { D3D11_PROCESSIDTYPE_UNKNOWN = 0x00000000, D3D11_PROCESSIDTYPE_DWM = 0x00000001, D3D11_PROCESSIDTYPE_HANDLE = 0x00000002, } D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE; typedef enum D3D11_BUS_TYPE { D3D11_BUS_TYPE_OTHER = 0x00000000, D3D11_BUS_TYPE_PCI = 0x00000001, D3D11_BUS_TYPE_PCIX = 0x00000002, D3D11_BUS_TYPE_PCIEXPRESS = 0x00000003, D3D11_BUS_TYPE_AGP = 0x00000004, D3D11_BUS_IMPL_MODIFIER_INSIDE_OF_CHIPSET = 0x00010000, D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP = 0x00020000, D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET = 0x00030000, D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR = 0x00040000, D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE = 0x00050000, D3D11_BUS_IMPL_MODIFIER_NON_STANDARD = 0x80000000, } D3D11_BUS_TYPE; typedef struct D3D11_BOX { UINT left; UINT top; UINT front; UINT right; UINT bottom; UINT back; } D3D11_BOX; typedef struct D3D11_BUFFER_RTV { union { UINT FirstElement; UINT ElementOffset; }; union { UINT NumElements; UINT ElementWidth; }; } D3D11_BUFFER_RTV; typedef struct D3D11_BUFFER_SRV { union { UINT FirstElement; UINT ElementOffset; }; union { UINT NumElements; UINT ElementWidth; }; } D3D11_BUFFER_SRV; typedef struct D3D11_BUFFER_UAV { UINT FirstElement; UINT NumElements; UINT Flags; } D3D11_BUFFER_UAV; typedef struct D3D11_BUFFEREX_SRV { UINT FirstElement; UINT NumElements; UINT Flags; } D3D11_BUFFEREX_SRV; typedef struct D3D11_CLASS_INSTANCE_DESC { UINT InstanceId; UINT InstanceIndex; UINT TypeId; UINT ConstantBuffer; UINT BaseConstantBufferOffset; UINT BaseTexture; UINT BaseSampler; BOOL Created; } D3D11_CLASS_INSTANCE_DESC; typedef enum D3D11_COMPARISON_FUNC { D3D11_COMPARISON_NEVER = 1, D3D11_COMPARISON_LESS, D3D11_COMPARISON_EQUAL, D3D11_COMPARISON_LESS_EQUAL, D3D11_COMPARISON_GREATER, D3D11_COMPARISON_NOT_EQUAL, D3D11_COMPARISON_GREATER_EQUAL, D3D11_COMPARISON_ALWAYS } D3D11_COMPARISON_FUNC; typedef enum D3D11_COUNTER { D3D11_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000, } D3D11_COUNTER; typedef struct D3D11_COUNTER_DESC { D3D11_COUNTER Counter; UINT MiscFlags; } D3D11_COUNTER_DESC; typedef struct D3D11_COUNTER_INFO { D3D11_COUNTER LastDeviceDependentCounter; UINT NumSimultaneousCounters; UINT8 NumDetectableParallelUnits; } D3D11_COUNTER_INFO; typedef enum D3D11_COUNTER_TYPE { D3D11_COUNTER_TYPE_FLOAT32, D3D11_COUNTER_TYPE_UINT16, D3D11_COUNTER_TYPE_UINT32, D3D11_COUNTER_TYPE_UINT64, } D3D11_COUNTER_TYPE; typedef enum D3D11_CULL_MODE { D3D11_CULL_NONE = 1, D3D11_CULL_FRONT, D3D11_CULL_BACK } D3D11_CULL_MODE; typedef enum D3D11_DEPTH_WRITE_MASK { D3D11_DEPTH_WRITE_MASK_ZERO, D3D11_DEPTH_WRITE_MASK_ALL, } D3D11_DEPTH_WRITE_MASK; typedef enum D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS { D3D11_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff, D3D11_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe, } D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS; typedef enum D3D11_DEVICE_CONTEXT_TYPE { D3D11_DEVICE_CONTEXT_IMMEDIATE, D3D11_DEVICE_CONTEXT_DEFERRED, } D3D11_DEVICE_CONTEXT_TYPE; typedef enum D3D11_DSV_DIMENSION { D3D11_DSV_DIMENSION_UNKNOWN, D3D11_DSV_DIMENSION_TEXTURE1D, D3D11_DSV_DIMENSION_TEXTURE1DARRAY, D3D11_DSV_DIMENSION_TEXTURE2D, D3D11_DSV_DIMENSION_TEXTURE2DARRAY, D3D11_DSV_DIMENSION_TEXTURE2DMS, D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY, } D3D11_DSV_DIMENSION; typedef enum D3D11_FEATURE { D3D11_FEATURE_THREADING, D3D11_FEATURE_DOUBLES, D3D11_FEATURE_FORMAT_SUPPORT, D3D11_FEATURE_FORMAT_SUPPORT2, D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, D3D11_FEATURE_D3D11_OPTIONS, D3D11_FEATURE_ARCHITECTURE_INFO, D3D11_FEATURE_D3D9_OPTIONS, D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT, D3D11_FEATURE_D3D9_SHADOW_SUPPORT, D3D11_FEATURE_D3D11_OPTIONS1, D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT, D3D11_FEATURE_MARKER_SUPPORT, D3D11_FEATURE_D3D9_OPTIONS1, D3D11_FEATURE_D3D11_OPTIONS2, D3D11_FEATURE_D3D11_OPTIONS3, D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT, D3D11_FEATURE_D3D11_OPTIONS4, D3D11_FEATURE_SHADER_CACHE, } D3D11_FEATURE; typedef struct D3D11_FEATURE_DATA_THREADING { BOOL DriverConcurrentCreates; BOOL DriverCommandLists; } D3D11_FEATURE_DATA_THREADING; typedef struct D3D11_FEATURE_DATA_DOUBLES { BOOL DoublePrecisionFloatShaderOps; } D3D11_FEATURE_DATA_DOUBLES; typedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT { DXGI_FORMAT InFormat; UINT OutFormatSupport; } D3D11_FEATURE_DATA_FORMAT_SUPPORT; typedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT2 { DXGI_FORMAT InFormat; UINT OutFormatSupport2; } D3D11_FEATURE_DATA_FORMAT_SUPPORT2; typedef struct D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS { BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x; } D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS; typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS { BOOL OutputMergerLogicOp; BOOL UAVOnlyRenderingForcedSampleCount; BOOL DiscardAPIsSeenByDriver; BOOL FlagsForUpdateAndCopySeenByDriver; BOOL ClearView; BOOL CopyWithOverlap; BOOL ConstantBufferPartialUpdate; BOOL ConstantBufferOffsetting; BOOL MapNoOverwriteOnDynamicConstantBuffer; BOOL MapNoOverwriteOnDynamicBufferSRV; BOOL MultisampleRTVWithForcedSampleCountOne; BOOL SAD4ShaderInstructions; BOOL ExtendedDoublesShaderInstructions; BOOL ExtendedResourceSharing; } D3D11_FEATURE_DATA_D3D11_OPTIONS; typedef struct D3D11_FEATURE_DATA_ARCHITECTURE_INFO { BOOL TileBasedDeferredRenderer; } D3D11_FEATURE_DATA_ARCHITECTURE_INFO; typedef struct D3D11_FEATURE_DATA_D3D9_OPTIONS { BOOL FullNonPow2TextureSupport; } D3D11_FEATURE_DATA_D3D9_OPTIONS; typedef struct D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT { BOOL SupportsDepthAsTextureWithLessEqualComparisonFilter; } D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT; typedef enum D3D11_SHADER_MIN_PRECISION_SUPPORT { D3D11_SHADER_MIN_PRECISION_10_BIT = 0x1, D3D11_SHADER_MIN_PRECISION_16_BIT = 0x2, } D3D11_SHADER_MIN_PRECISION_SUPPORT; typedef struct D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT { UINT PixelShaderMinPrecision; UINT AllOtherShaderStagesMinPrecision; } D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT; typedef enum D3D11_TILED_RESOURCES_TIER { D3D11_TILED_RESOURCES_NOT_SUPPORTED = 0x0, D3D11_TILED_RESOURCES_TIER_1 = 0x1, D3D11_TILED_RESOURCES_TIER_2 = 0x2, D3D11_TILED_RESOURCES_TIER_3 = 0x3, } D3D11_TILED_RESOURCES_TIER; typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS1 { D3D11_TILED_RESOURCES_TIER TiledResourcesTier; BOOL MinMaxFiltering; BOOL ClearViewAlsoSupportsDepthOnlyFormats; BOOL MapOnDefaultBuffers; } D3D11_FEATURE_DATA_D3D11_OPTIONS1; typedef struct D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT { BOOL SimpleInstancingSupported; } D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT; typedef struct D3D11_FEATURE_DATA_MARKER_SUPPORT { BOOL Profile; } D3D11_FEATURE_DATA_MARKER_SUPPORT; typedef struct D3D11_FEATURE_DATA_D3D9_OPTIONS1 { BOOL FullNonPow2TextureSupported; BOOL DepthAsTextureWithLessEqualComparisonFilterSupported; BOOL SimpleInstancingSupported; BOOL TextureCubeFaceRenderTargetWithNonCubeDepthStencilSupported; } D3D11_FEATURE_DATA_D3D9_OPTIONS1; typedef enum D3D11_CONSERVATIVE_RASTERIZATION_TIER { D3D11_CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED = 0x0, D3D11_CONSERVATIVE_RASTERIZATION_TIER_1 = 0x1, D3D11_CONSERVATIVE_RASTERIZATION_TIER_2 = 0x2, D3D11_CONSERVATIVE_RASTERIZATION_TIER_3 = 0x3, } D3D11_CONSERVATIVE_RASTERIZATION_TIER; typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS2 { BOOL PSSpecifiedStencilRefSupported; BOOL TypedUAVLoadAdditionalFormats; BOOL ROVsSupported; D3D11_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier; D3D11_TILED_RESOURCES_TIER TiledResourcesTier; BOOL MapOnDefaultTextures; BOOL StandardSwizzle; BOOL UnifiedMemoryArchitecture; } D3D11_FEATURE_DATA_D3D11_OPTIONS2; typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS3 { BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizer; } D3D11_FEATURE_DATA_D3D11_OPTIONS3; typedef struct D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT { UINT MaxGPUVirtualAddressBitsPerResource; UINT MaxGPUVirtualAddressBitsPerProcess; } D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT; typedef enum D3D11_SHADER_CACHE_SUPPORT_FLAGS { D3D11_SHADER_CACHE_SUPPORT_NONE = 0x0, D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE = 0x1, D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE = 0x2, } D3D11_SHADER_CACHE_SUPPORT_FLAGS; typedef struct D3D11_FEATURE_DATA_SHADER_CACHE { UINT SupportFlags; } D3D11_FEATURE_DATA_SHADER_CACHE; typedef enum D3D11_FILL_MODE { D3D11_FILL_WIREFRAME = 2, D3D11_FILL_SOLID } D3D11_FILL_MODE; typedef enum D3D11_FILTER_TYPE { D3D11_FILTER_TYPE_POINT = 0, D3D11_FILTER_TYPE_LINEAR = 1 } D3D11_FILTER_TYPE; const UINT D3D11_MIN_FILTER_SHIFT = 4; const UINT D3D11_MAG_FILTER_SHIFT = 2; const UINT D3D11_MIP_FILTER_SHIFT = 0; const UINT D3D11_FILTER_TYPE_MASK = 0x00000003; const UINT D3D11_COMPARISON_FILTERING_BIT = 0x00000080; const UINT D3D11_ANISOTROPIC_FILTERING_BIT = 0x00000040; cpp_quote("#define D3D11_ENCODE_BASIC_FILTER(min, mag, mip, bComparison) \\") cpp_quote(" ((D3D11_FILTER)(((bComparison) ? D3D11_COMPARISON_FILTERING_BIT : 0 ) | \\") cpp_quote(" (((min)&D3D11_FILTER_TYPE_MASK) << D3D11_MIN_FILTER_SHIFT) | \\") cpp_quote(" (((mag)&D3D11_FILTER_TYPE_MASK) << D3D11_MAG_FILTER_SHIFT) | \\") cpp_quote(" (((mip)&D3D11_FILTER_TYPE_MASK) << D3D11_MIP_FILTER_SHIFT)))") cpp_quote("#define D3D11_ENCODE_ANISOTROPIC_FILTER(bComparison) \\") cpp_quote(" ((D3D11_FILTER)(D3D11_ANISOTROPIC_FILTERING_BIT | \\" ) cpp_quote(" D3D11_ENCODE_BASIC_FILTER(D3D11_FILTER_TYPE_LINEAR,D3D11_FILTER_TYPE_LINEAR, \\" ) cpp_quote(" D3D11_FILTER_TYPE_LINEAR,bComparison)))" ) cpp_quote("#define D3D11_DECODE_MIN_FILTER(d3d11Filter) \\") cpp_quote(" ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIN_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))") cpp_quote("#define D3D11_DECODE_MAG_FILTER(d3d11Filter) \\") cpp_quote(" ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MAG_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))") cpp_quote("#define D3D11_DECODE_MIP_FILTER(d3d11Filter) \\") cpp_quote(" ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIP_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))") cpp_quote("#define D3D11_DECODE_IS_COMPARISON_FILTER(d3d11Filter) ((d3d11Filter) & D3D11_COMPARISON_FILTERING_BIT)") cpp_quote("#define D3D11_DECODE_IS_ANISOTROPIC_FILTER(d3d11Filter) \\") cpp_quote(" (((d3d11Filter) & D3D11_ANISOTROPIC_FILTERING_BIT ) \\" ) cpp_quote(" && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIN_FILTER(d3d11Filter)) \\" ) cpp_quote(" && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MAG_FILTER(d3d11Filter)) \\" ) cpp_quote(" && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIP_FILTER(d3d11Filter)))") typedef enum D3D11_FILTER { D3D11_FILTER_MIN_MAG_MIP_POINT = 0x00, D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01, D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04, D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05, D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10, D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11, D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14, D3D11_FILTER_MIN_MAG_MIP_LINEAR = 0x15, D3D11_FILTER_ANISOTROPIC = 0x55, D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80, D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81, D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84, D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85, D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90, D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91, D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94, D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95, D3D11_FILTER_COMPARISON_ANISOTROPIC = 0xd5 } D3D11_FILTER; typedef enum D3D11_DSV_FLAG { D3D11_DSV_READ_ONLY_DEPTH = 0x1, D3D11_DSV_READ_ONLY_STENCIL = 0x2, } D3D11_DSV_FLAG; typedef enum D3D11_BUFFEREX_SRV_FLAG { D3D11_BUFFEREX_SRV_FLAG_RAW = 0x1, } D3D11_BUFFEREX_SRV_FLAG; typedef enum D3D11_UAV_FLAG { D3D11_BUFFER_UAV_FLAG_RAW = 0x1, D3D11_BUFFER_UAV_FLAG_APPEND = 0x2, D3D11_BUFFER_UAV_FLAG_COUNTER = 0x4, } D3D11_UAV_FLAG; typedef enum D3D11_INPUT_CLASSIFICATION { D3D11_INPUT_PER_VERTEX_DATA, D3D11_INPUT_PER_INSTANCE_DATA, } D3D11_INPUT_CLASSIFICATION; const UINT D3D11_APPEND_ALIGNED_ELEMENT = 0xffffffff; typedef struct D3D11_INPUT_ELEMENT_DESC { LPCSTR SemanticName; UINT SemanticIndex; DXGI_FORMAT Format; UINT InputSlot; UINT AlignedByteOffset; D3D11_INPUT_CLASSIFICATION InputSlotClass; UINT InstanceDataStepRate; } D3D11_INPUT_ELEMENT_DESC; typedef enum D3D11_MAP { D3D11_MAP_READ = 1, D3D11_MAP_WRITE, D3D11_MAP_READ_WRITE, D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITE } D3D11_MAP; typedef enum D3D11_MAP_FLAG { D3D11_MAP_FLAG_DO_NOT_WAIT = 0x00100000 } D3D11_MAP_FLAG; typedef struct D3D11_QUERY_DATA_SO_STATISTICS { UINT64 NumPrimitivesWritten; UINT64 PrimitivesStorageNeeded; } D3D11_QUERY_DATA_SO_STATISTICS; typedef struct D3D11_MAPPED_SUBRESOURCE { void *pData; UINT RowPitch; UINT DepthPitch; } D3D11_MAPPED_SUBRESOURCE; typedef enum D3D11_QUERY { D3D11_QUERY_EVENT, D3D11_QUERY_OCCLUSION, D3D11_QUERY_TIMESTAMP, D3D11_QUERY_TIMESTAMP_DISJOINT, D3D11_QUERY_PIPELINE_STATISTICS, D3D11_QUERY_OCCLUSION_PREDICATE, D3D11_QUERY_SO_STATISTICS, D3D11_QUERY_SO_OVERFLOW_PREDICATE, D3D11_QUERY_SO_STATISTICS_STREAM0, D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0, D3D11_QUERY_SO_STATISTICS_STREAM1, D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1, D3D11_QUERY_SO_STATISTICS_STREAM2, D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2, D3D11_QUERY_SO_STATISTICS_STREAM3, D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3, } D3D11_QUERY; typedef enum D3D11_QUERY_MISC_FLAG { D3D11_QUERY_MISC_PREDICATEHINT = 0x1, } D3D11_QUERY_MISC_FLAG; typedef enum D3D11_ASYNC_GETDATA_FLAG { D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x0001, } D3D11_ASYNC_GETDATA_FLAG; typedef enum D3D11_RESOURCE_MISC_FLAG { D3D11_RESOURCE_MISC_GENERATE_MIPS = 0x00000001L, D3D11_RESOURCE_MISC_SHARED = 0x00000002L, D3D11_RESOURCE_MISC_TEXTURECUBE = 0x00000004L, D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS = 0x00000010L, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS = 0x00000020L, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED = 0x00000040L, D3D11_RESOURCE_MISC_RESOURCE_CLAMP = 0x00000080L, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x00000100L, D3D11_RESOURCE_MISC_GDI_COMPATIBLE = 0x00000200L, D3D11_RESOURCE_MISC_SHARED_NTHANDLE = 0x00000800L, D3D11_RESOURCE_MISC_RESTRICTED_CONTENT = 0x00001000L, D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE = 0x00002000L, D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER = 0x00004000L, D3D11_RESOURCE_MISC_GUARDED = 0x00008000L } D3D11_RESOURCE_MISC_FLAG; typedef struct D3D11_QUERY_DESC { D3D11_QUERY Query; UINT MiscFlags; } D3D11_QUERY_DESC; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D11_QUERY_DESC : public D3D11_QUERY_DESC {") cpp_quote(" CD3D11_QUERY_DESC() {}") cpp_quote(" ~CD3D11_QUERY_DESC() {}") cpp_quote(" explicit CD3D11_QUERY_DESC(const D3D11_QUERY_DESC &other) : D3D11_QUERY_DESC(other) {}") cpp_quote(" explicit CD3D11_QUERY_DESC(D3D11_QUERY query, UINT misc_flags = 0) {") cpp_quote(" Query = query;") cpp_quote(" MiscFlags = misc_flags;") cpp_quote(" }") cpp_quote(" operator const D3D11_QUERY_DESC&() const {") cpp_quote(" return *this;") cpp_quote(" }") cpp_quote("};") cpp_quote("#endif") typedef struct D3D11_RASTERIZER_DESC { D3D11_FILL_MODE FillMode; D3D11_CULL_MODE CullMode; BOOL FrontCounterClockwise; INT DepthBias; FLOAT DepthBiasClamp; FLOAT SlopeScaledDepthBias; BOOL DepthClipEnable; BOOL ScissorEnable; BOOL MultisampleEnable; BOOL AntialiasedLineEnable; } D3D11_RASTERIZER_DESC; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D11_RASTERIZER_DESC : public D3D11_RASTERIZER_DESC {") cpp_quote(" CD3D11_RASTERIZER_DESC() {}") cpp_quote(" explicit CD3D11_RASTERIZER_DESC(const D3D11_RASTERIZER_DESC &o) : D3D11_RASTERIZER_DESC(o) {}") cpp_quote(" explicit CD3D11_RASTERIZER_DESC(CD3D11_DEFAULT) {") cpp_quote(" FillMode = D3D11_FILL_SOLID;") cpp_quote(" CullMode = D3D11_CULL_BACK;") cpp_quote(" FrontCounterClockwise = FALSE;") cpp_quote(" DepthBias = D3D11_DEFAULT_DEPTH_BIAS;") cpp_quote(" DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP;") cpp_quote(" SlopeScaledDepthBias = D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;") cpp_quote(" DepthClipEnable = TRUE;") cpp_quote(" ScissorEnable = FALSE;") cpp_quote(" MultisampleEnable = FALSE;") cpp_quote(" AntialiasedLineEnable = FALSE;") cpp_quote(" }") cpp_quote(" explicit CD3D11_RASTERIZER_DESC(D3D11_FILL_MODE fillMode, D3D11_CULL_MODE cullMode," ) cpp_quote(" BOOL frontCounterClockwise, INT depthBias, FLOAT depthBiasClamp, FLOAT slopeScaledDepthBias,") cpp_quote(" BOOL depthClipEnable, BOOL scissorEnable, BOOL multisampleEnable, BOOL antialiasedLineEnable) {") cpp_quote(" FillMode = fillMode;") cpp_quote(" CullMode = cullMode;") cpp_quote(" FrontCounterClockwise = frontCounterClockwise;") cpp_quote(" DepthBias = depthBias;") cpp_quote(" DepthBiasClamp = depthBiasClamp;") cpp_quote(" SlopeScaledDepthBias = slopeScaledDepthBias;") cpp_quote(" DepthClipEnable = depthClipEnable;") cpp_quote(" ScissorEnable = scissorEnable;") cpp_quote(" MultisampleEnable = multisampleEnable;") cpp_quote(" AntialiasedLineEnable = antialiasedLineEnable;") cpp_quote(" }") cpp_quote(" ~CD3D11_RASTERIZER_DESC() {}") cpp_quote(" operator const D3D11_RASTERIZER_DESC&() const { return *this; }") cpp_quote("};") cpp_quote("#endif") typedef enum D3D11_RESOURCE_DIMENSION { D3D11_RESOURCE_DIMENSION_UNKNOWN, D3D11_RESOURCE_DIMENSION_BUFFER, D3D11_RESOURCE_DIMENSION_TEXTURE1D, D3D11_RESOURCE_DIMENSION_TEXTURE2D, D3D11_RESOURCE_DIMENSION_TEXTURE3D, } D3D11_RESOURCE_DIMENSION; typedef enum D3D11_RTV_DIMENSION { D3D11_RTV_DIMENSION_UNKNOWN, D3D11_RTV_DIMENSION_BUFFER, D3D11_RTV_DIMENSION_TEXTURE1D, D3D11_RTV_DIMENSION_TEXTURE1DARRAY, D3D11_RTV_DIMENSION_TEXTURE2D, D3D11_RTV_DIMENSION_TEXTURE2DARRAY, D3D11_RTV_DIMENSION_TEXTURE2DMS, D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY, D3D11_RTV_DIMENSION_TEXTURE3D, } D3D11_RTV_DIMENSION; typedef struct D3D11_SO_DECLARATION_ENTRY { UINT Stream; LPCSTR SemanticName; UINT SemanticIndex; BYTE StartComponent; BYTE ComponentCount; BYTE OutputSlot; } D3D11_SO_DECLARATION_ENTRY; typedef enum D3D11_STENCIL_OP { D3D11_STENCIL_OP_KEEP = 1, D3D11_STENCIL_OP_ZERO, D3D11_STENCIL_OP_REPLACE, D3D11_STENCIL_OP_INCR_SAT, D3D11_STENCIL_OP_DECR_SAT, D3D11_STENCIL_OP_INVERT, D3D11_STENCIL_OP_INCR, D3D11_STENCIL_OP_DECR } D3D11_STENCIL_OP; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("}") cpp_quote("inline UINT D3D11CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT MipLevels) {") cpp_quote(" return MipSlice + ArraySlice * MipLevels;") cpp_quote("}") cpp_quote("extern \"C\"{") cpp_quote("#endif") typedef struct D3D11_SUBRESOURCE_DATA { const void *pSysMem; UINT SysMemPitch; UINT SysMemSlicePitch; } D3D11_SUBRESOURCE_DATA; typedef struct D3D11_TEX1D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX1D_ARRAY_DSV; typedef struct D3D11_TEX1D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX1D_ARRAY_RTV; typedef struct D3D11_TEX1D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX1D_ARRAY_SRV; typedef struct D3D11_TEX1D_ARRAY_UAV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX1D_ARRAY_UAV; typedef struct D3D11_TEX1D_DSV { UINT MipSlice; } D3D11_TEX1D_DSV; typedef struct D3D11_TEX1D_RTV { UINT MipSlice; } D3D11_TEX1D_RTV; typedef struct D3D11_TEX1D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D11_TEX1D_SRV; typedef struct D3D11_TEX1D_UAV { UINT MipSlice; } D3D11_TEX1D_UAV; typedef struct D3D11_TEX2D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_DSV; typedef struct D3D11_TEX2D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_RTV; typedef struct D3D11_TEX2D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_SRV; typedef struct D3D11_TEX2D_ARRAY_UAV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_UAV; typedef struct D3D11_TEX2D_DSV { UINT MipSlice; } D3D11_TEX2D_DSV; typedef struct D3D11_TEX2D_RTV { UINT MipSlice; } D3D11_TEX2D_RTV; typedef struct D3D11_TEX2D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D11_TEX2D_SRV; typedef struct D3D11_TEX2D_UAV { UINT MipSlice; } D3D11_TEX2D_UAV; typedef struct D3D11_TEX2DMS_ARRAY_DSV { UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2DMS_ARRAY_DSV; typedef struct D3D11_TEX2DMS_ARRAY_RTV { UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2DMS_ARRAY_RTV; typedef struct D3D11_TEX2DMS_ARRAY_SRV { UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2DMS_ARRAY_SRV; typedef struct D3D11_TEX2DMS_DSV { UINT UnusedField_NothingToDefine; } D3D11_TEX2DMS_DSV; typedef struct D3D11_TEX2DMS_RTV { UINT UnusedField_NothingToDefine; } D3D11_TEX2DMS_RTV; typedef struct D3D11_TEX2DMS_SRV { UINT UnusedField_NothingToDefine; } D3D11_TEX2DMS_SRV; typedef struct D3D11_TEX3D_RTV { UINT MipSlice; UINT FirstWSlice; UINT WSize; } D3D11_TEX3D_RTV; typedef struct D3D11_TEX3D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D11_TEX3D_SRV; typedef struct D3D11_TEX3D_UAV { UINT MipSlice; UINT FirstWSlice; UINT WSize; } D3D11_TEX3D_UAV; typedef struct D3D11_TEXCUBE_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT First2DArrayFace; UINT NumCubes; } D3D11_TEXCUBE_ARRAY_SRV; typedef struct D3D11_TEXCUBE_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D11_TEXCUBE_SRV; typedef enum D3D11_TEXTURE_ADDRESS_MODE { D3D11_TEXTURE_ADDRESS_WRAP = 1, D3D11_TEXTURE_ADDRESS_MIRROR, D3D11_TEXTURE_ADDRESS_CLAMP, D3D11_TEXTURE_ADDRESS_BORDER, D3D11_TEXTURE_ADDRESS_MIRROR_ONCE } D3D11_TEXTURE_ADDRESS_MODE; typedef enum D3D11_UAV_DIMENSION { D3D11_UAV_DIMENSION_UNKNOWN, D3D11_UAV_DIMENSION_BUFFER, D3D11_UAV_DIMENSION_TEXTURE1D, D3D11_UAV_DIMENSION_TEXTURE1DARRAY, D3D11_UAV_DIMENSION_TEXTURE2D, D3D11_UAV_DIMENSION_TEXTURE2DARRAY, D3D11_UAV_DIMENSION_TEXTURE3D = 8, } D3D11_UAV_DIMENSION; typedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC { DXGI_FORMAT Format; D3D11_UAV_DIMENSION ViewDimension; union { D3D11_BUFFER_UAV Buffer; D3D11_TEX1D_UAV Texture1D; D3D11_TEX1D_ARRAY_UAV Texture1DArray; D3D11_TEX2D_UAV Texture2D; D3D11_TEX2D_ARRAY_UAV Texture2DArray; D3D11_TEX3D_UAV Texture3D; }; } D3D11_UNORDERED_ACCESS_VIEW_DESC; typedef enum D3D11_USAGE { D3D11_USAGE_DEFAULT, D3D11_USAGE_IMMUTABLE, D3D11_USAGE_DYNAMIC, D3D11_USAGE_STAGING, } D3D11_USAGE; typedef enum D3D11_BIND_FLAG { D3D11_BIND_VERTEX_BUFFER = 0x0001, D3D11_BIND_INDEX_BUFFER = 0x0002, D3D11_BIND_CONSTANT_BUFFER = 0x0004, D3D11_BIND_SHADER_RESOURCE = 0x0008, D3D11_BIND_STREAM_OUTPUT = 0x0010, D3D11_BIND_RENDER_TARGET = 0x0020, D3D11_BIND_DEPTH_STENCIL = 0x0040, D3D11_BIND_UNORDERED_ACCESS = 0x0080, D3D11_BIND_DECODER = 0x0200, D3D11_BIND_VIDEO_ENCODER = 0x0400 } D3D11_BIND_FLAG; typedef enum D3D11_CPU_ACCESS_FLAG { D3D11_CPU_ACCESS_WRITE = 0x00010000, D3D11_CPU_ACCESS_READ = 0x00020000 } D3D11_CPU_ACCESS_FLAG; typedef struct D3D11_VIEWPORT { FLOAT TopLeftX; FLOAT TopLeftY; FLOAT Width; FLOAT Height; FLOAT MinDepth; FLOAT MaxDepth; } D3D11_VIEWPORT; typedef enum D3D11_COLOR_WRITE_ENABLE { D3D11_COLOR_WRITE_ENABLE_RED = 1, D3D11_COLOR_WRITE_ENABLE_GREEN = 2, D3D11_COLOR_WRITE_ENABLE_BLUE = 4, D3D11_COLOR_WRITE_ENABLE_ALPHA = 8, D3D11_COLOR_WRITE_ENABLE_ALL = (D3D11_COLOR_WRITE_ENABLE_RED|D3D11_COLOR_WRITE_ENABLE_GREEN|D3D11_COLOR_WRITE_ENABLE_BLUE|D3D11_COLOR_WRITE_ENABLE_ALPHA) } D3D11_COLOR_WRITE_ENABLE; typedef enum D3D11_FORMAT_SUPPORT { D3D11_FORMAT_SUPPORT_BUFFER = 0x00000001, D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER = 0x00000002, D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER = 0x00000004, D3D11_FORMAT_SUPPORT_SO_BUFFER = 0x00000008, D3D11_FORMAT_SUPPORT_TEXTURE1D = 0x00000010, D3D11_FORMAT_SUPPORT_TEXTURE2D = 0x00000020, D3D11_FORMAT_SUPPORT_TEXTURE3D = 0x00000040, D3D11_FORMAT_SUPPORT_TEXTURECUBE = 0x00000080, D3D11_FORMAT_SUPPORT_SHADER_LOAD = 0x00000100, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE = 0x00000200, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x00000400, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT = 0x00000800, D3D11_FORMAT_SUPPORT_MIP = 0x00001000, D3D11_FORMAT_SUPPORT_MIP_AUTOGEN = 0x00002000, D3D11_FORMAT_SUPPORT_RENDER_TARGET = 0x00004000, D3D11_FORMAT_SUPPORT_BLENDABLE = 0x00008000, D3D11_FORMAT_SUPPORT_DEPTH_STENCIL = 0x00010000, D3D11_FORMAT_SUPPORT_CPU_LOCKABLE = 0x00020000, D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE = 0x00040000, D3D11_FORMAT_SUPPORT_DISPLAY = 0x00080000, D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT = 0x00100000, D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x00200000, D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD = 0x00400000, D3D11_FORMAT_SUPPORT_SHADER_GATHER = 0x00800000, D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST = 0x01000000, D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW = 0x02000000, D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON = 0x04000000, D3D11_FORMAT_SUPPORT_DECODER_OUTPUT = 0x08000000, D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT = 0x10000000, D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT = 0x20000000, D3D11_FORMAT_SUPPORT_VIDEO_ENCODER = 0x40000000, } D3D11_FORMAT_SUPPORT; typedef enum D3D11_CLEAR_FLAG { D3D11_CLEAR_DEPTH = 0x0001L, D3D11_CLEAR_STENCIL = 0x0002L } D3D11_CLEAR_FLAG; typedef struct D3D11_RENDER_TARGET_BLEND_DESC { BOOL BlendEnable; D3D11_BLEND SrcBlend; D3D11_BLEND DestBlend; D3D11_BLEND_OP BlendOp; D3D11_BLEND SrcBlendAlpha; D3D11_BLEND DestBlendAlpha; D3D11_BLEND_OP BlendOpAlpha; UINT8 RenderTargetWriteMask; } D3D11_RENDER_TARGET_BLEND_DESC; typedef struct D3D11_BLEND_DESC { BOOL AlphaToCoverageEnable; BOOL IndependentBlendEnable; D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT]; } D3D11_BLEND_DESC; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D11_BLEND_DESC : public D3D11_BLEND_DESC {") cpp_quote(" CD3D11_BLEND_DESC() {}") cpp_quote(" explicit CD3D11_BLEND_DESC(const D3D11_BLEND_DESC &o) : D3D11_BLEND_DESC(o) {}") cpp_quote(" explicit CD3D11_BLEND_DESC(CD3D11_DEFAULT) {") cpp_quote(" AlphaToCoverageEnable = FALSE;") cpp_quote(" IndependentBlendEnable = FALSE;") cpp_quote(" for(D3D11_RENDER_TARGET_BLEND_DESC *target = RenderTarget;") cpp_quote(" target < RenderTarget + D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT;") cpp_quote(" target++) {") cpp_quote(" target->BlendEnable = FALSE;") cpp_quote(" target->SrcBlend = target->SrcBlendAlpha = D3D11_BLEND_ONE;") cpp_quote(" target->DestBlend = target->DestBlendAlpha = D3D11_BLEND_ZERO;") cpp_quote(" target->BlendOp = target->BlendOpAlpha = D3D11_BLEND_OP_ADD;") cpp_quote(" target->RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;") cpp_quote(" }") cpp_quote(" }") cpp_quote(" ~CD3D11_BLEND_DESC() {}") cpp_quote(" operator const D3D11_BLEND_DESC&() const { return *this; }") cpp_quote("};" ) cpp_quote("#endif" ) typedef struct D3D11_BUFFER_DESC { UINT ByteWidth; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; UINT StructureByteStride; } D3D11_BUFFER_DESC; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D11_BUFFER_DESC : public D3D11_BUFFER_DESC {") cpp_quote(" CD3D11_BUFFER_DESC() {}" ) cpp_quote(" explicit CD3D11_BUFFER_DESC(const D3D11_BUFFER_DESC &o) : D3D11_BUFFER_DESC(o) {}") cpp_quote(" explicit CD3D11_BUFFER_DESC(UINT byteWidth,UINT bindFlags,") cpp_quote(" D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0,") cpp_quote(" UINT miscFlags = 0, UINT structureByteStride = 0 ) {") cpp_quote(" ByteWidth = byteWidth;") cpp_quote(" Usage = usage;") cpp_quote(" BindFlags = bindFlags;") cpp_quote(" CPUAccessFlags = cpuaccessFlags;") cpp_quote(" MiscFlags = miscFlags;" ) cpp_quote(" StructureByteStride = structureByteStride;") cpp_quote(" }") cpp_quote(" ~CD3D11_BUFFER_DESC() {}") cpp_quote(" operator const D3D11_BUFFER_DESC&() const { return *this; }") cpp_quote("};" ) cpp_quote("#endif" ) typedef struct D3D11_DEPTH_STENCIL_VIEW_DESC { DXGI_FORMAT Format; D3D11_DSV_DIMENSION ViewDimension; UINT Flags; union { D3D11_TEX1D_DSV Texture1D; D3D11_TEX1D_ARRAY_DSV Texture1DArray; D3D11_TEX2D_DSV Texture2D; D3D11_TEX2D_ARRAY_DSV Texture2DArray; D3D11_TEX2DMS_DSV Texture2DMS; D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray; }; } D3D11_DEPTH_STENCIL_VIEW_DESC; typedef struct D3D11_DEPTH_STENCILOP_DESC { D3D11_STENCIL_OP StencilFailOp; D3D11_STENCIL_OP StencilDepthFailOp; D3D11_STENCIL_OP StencilPassOp; D3D11_COMPARISON_FUNC StencilFunc; } D3D11_DEPTH_STENCILOP_DESC; typedef struct D3D11_DEPTH_STENCIL_DESC { BOOL DepthEnable; D3D11_DEPTH_WRITE_MASK DepthWriteMask; D3D11_COMPARISON_FUNC DepthFunc; BOOL StencilEnable; UINT8 StencilReadMask; UINT8 StencilWriteMask; D3D11_DEPTH_STENCILOP_DESC FrontFace; D3D11_DEPTH_STENCILOP_DESC BackFace; } D3D11_DEPTH_STENCIL_DESC; cpp_quote("#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )") cpp_quote("struct CD3D11_DEPTH_STENCIL_DESC : public D3D11_DEPTH_STENCIL_DESC {") cpp_quote(" CD3D11_DEPTH_STENCIL_DESC() {}") cpp_quote(" explicit CD3D11_DEPTH_STENCIL_DESC(const D3D11_DEPTH_STENCIL_DESC &other) : D3D11_DEPTH_STENCIL_DESC(other) {}") cpp_quote(" explicit CD3D11_DEPTH_STENCIL_DESC(CD3D11_DEFAULT) {") cpp_quote(" const D3D11_DEPTH_STENCILOP_DESC default_op =") cpp_quote(" {D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_COMPARISON_ALWAYS};") cpp_quote(" DepthEnable = TRUE;") cpp_quote(" DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;") cpp_quote(" DepthFunc = D3D11_COMPARISON_LESS;") cpp_quote(" StencilEnable = FALSE;") cpp_quote(" StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;") cpp_quote(" StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;") cpp_quote(" FrontFace = default_op;") cpp_quote(" BackFace = default_op;") cpp_quote(" }") cpp_quote(" explicit CD3D11_DEPTH_STENCIL_DESC(") cpp_quote(" BOOL depth_enable,") cpp_quote(" D3D11_DEPTH_WRITE_MASK depth_write_mask,") cpp_quote(" D3D11_COMPARISON_FUNC depth_func,") cpp_quote(" BOOL stencil_enable,") cpp_quote(" UINT8 stencil_read_mask,") cpp_quote(" UINT8 stencil_write_mask,") cpp_quote(" D3D11_STENCIL_OP front_stencil_fail_op,") cpp_quote(" D3D11_STENCIL_OP front_stencil_depth_fail_op,") cpp_quote(" D3D11_STENCIL_OP front_stencil_pass_op,") cpp_quote(" D3D11_COMPARISON_FUNC front_stencil_func,") cpp_quote(" D3D11_STENCIL_OP back_stencil_fail_op,") cpp_quote(" D3D11_STENCIL_OP back_stencil_depth_fail_op,") cpp_quote(" D3D11_STENCIL_OP back_stencil_pass_op,") cpp_quote(" D3D11_COMPARISON_FUNC back_stencil_func) {") cpp_quote(" DepthEnable = depth_enable;") cpp_quote(" DepthWriteMask = depth_write_mask;") cpp_quote(" DepthFunc = depth_func;") cpp_quote(" StencilEnable = stencil_enable;") cpp_quote(" StencilReadMask = stencil_read_mask;") cpp_quote(" StencilWriteMask = stencil_write_mask;") cpp_quote(" FrontFace.StencilFailOp = front_stencil_fail_op;") cpp_quote(" FrontFace.StencilDepthFailOp = front_stencil_depth_fail_op;") cpp_quote(" FrontFace.StencilPassOp = front_stencil_pass_op;") cpp_quote(" FrontFace.StencilFunc = front_stencil_func;") cpp_quote(" BackFace.StencilFailOp = back_stencil_fail_op;") cpp_quote(" BackFace.StencilDepthFailOp = back_stencil_depth_fail_op;") cpp_quote(" BackFace.StencilPassOp = back_stencil_pass_op;") cpp_quote(" BackFace.StencilFunc = back_stencil_func;") cpp_quote(" }") cpp_quote(" ~CD3D11_DEPTH_STENCIL_DESC() {}") cpp_quote(" operator const D3D11_DEPTH_STENCIL_DESC&() const { return *this; }") cpp_quote("};") cpp_quote("#endif") typedef struct D3D11_RENDER_TARGET_VIEW_DESC { DXGI_FORMAT Format; D3D11_RTV_DIMENSION ViewDimension; union { D3D11_BUFFER_RTV Buffer; D3D11_TEX1D_RTV Texture1D; D3D11_TEX1D_ARRAY_RTV Texture1DArray; D3D11_TEX2D_RTV Texture2D; D3D11_TEX2D_ARRAY_RTV Texture2DArray; D3D11_TEX2DMS_RTV Texture2DMS; D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray; D3D11_TEX3D_RTV Texture3D; }; } D3D11_RENDER_TARGET_VIEW_DESC; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D11_RENDER_TARGET_VIEW_DESC : public D3D11_RENDER_TARGET_VIEW_DESC {") cpp_quote(" CD3D11_RENDER_TARGET_VIEW_DESC() {}") cpp_quote(" explicit CD3D11_RENDER_TARGET_VIEW_DESC(D3D11_RTV_DIMENSION dim, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,") cpp_quote(" UINT mip_slice = 0, UINT first_slice = 0, UINT array_size = -1) {") cpp_quote(" Format = format;") cpp_quote(" ViewDimension = dim;") cpp_quote(" switch(dim) {") cpp_quote(" case D3D11_RTV_DIMENSION_BUFFER:") cpp_quote(" Buffer.FirstElement = mip_slice;") cpp_quote(" Buffer.NumElements = first_slice;") cpp_quote(" break;") cpp_quote(" case D3D11_RTV_DIMENSION_TEXTURE1D:") cpp_quote(" Texture1D.MipSlice = mip_slice;") cpp_quote(" break;") cpp_quote(" case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:") cpp_quote(" Texture1DArray.MipSlice = mip_slice;") cpp_quote(" Texture1DArray.FirstArraySlice = first_slice;") cpp_quote(" Texture1DArray.ArraySize = array_size;") cpp_quote(" break;") cpp_quote(" case D3D11_RTV_DIMENSION_TEXTURE2D:") cpp_quote(" Texture2D.MipSlice = mip_slice;") cpp_quote(" break;") cpp_quote(" case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:") cpp_quote(" Texture2DArray.MipSlice = mip_slice;") cpp_quote(" Texture2DArray.FirstArraySlice = first_slice;") cpp_quote(" Texture2DArray.ArraySize = array_size;") cpp_quote(" break;") cpp_quote(" case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:") cpp_quote(" Texture2DMSArray.FirstArraySlice = first_slice;") cpp_quote(" Texture2DMSArray.ArraySize = array_size;") cpp_quote(" break;") cpp_quote(" case D3D11_RTV_DIMENSION_TEXTURE3D:") cpp_quote(" Texture3D.MipSlice = mip_slice;") cpp_quote(" Texture3D.FirstWSlice = first_slice;") cpp_quote(" Texture3D.WSize = array_size;") cpp_quote(" break;") cpp_quote(" default:") cpp_quote(" break;") cpp_quote(" }") cpp_quote(" }") cpp_quote(" explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,") cpp_quote(" UINT elem_cnt) {") cpp_quote(" Format = format;") cpp_quote(" ViewDimension = D3D11_RTV_DIMENSION_BUFFER;") cpp_quote(" Buffer.FirstElement = first_elem;") cpp_quote(" Buffer.NumElements = elem_cnt;") cpp_quote(" }") cpp_quote(" explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture1D *texture, D3D11_RTV_DIMENSION dim,") cpp_quote(" DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,") cpp_quote(" UINT array_size = -1);") /* FIXME: implement */ cpp_quote(" explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture2D *texture, D3D11_RTV_DIMENSION dim,") cpp_quote(" DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,") cpp_quote(" UINT array_size = -1);") /* FIXME: implement */ cpp_quote(" explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,") cpp_quote(" UINT mip_slice = 0, UINT first_w_slice = 0, UINT w_slice = -1 );") /* FIXME: implement */ cpp_quote(" ~CD3D11_RENDER_TARGET_VIEW_DESC() {}") cpp_quote(" explicit CD3D11_RENDER_TARGET_VIEW_DESC(const D3D11_RENDER_TARGET_VIEW_DESC &other)") cpp_quote(" : D3D11_RENDER_TARGET_VIEW_DESC(other) {}") cpp_quote(" operator const D3D11_RENDER_TARGET_VIEW_DESC&() const {") cpp_quote(" return *this;") cpp_quote(" }") cpp_quote("};") cpp_quote("#endif") typedef struct D3D11_SAMPLER_DESC { D3D11_FILTER Filter; D3D11_TEXTURE_ADDRESS_MODE AddressU; D3D11_TEXTURE_ADDRESS_MODE AddressV; D3D11_TEXTURE_ADDRESS_MODE AddressW; FLOAT MipLODBias; UINT MaxAnisotropy; D3D11_COMPARISON_FUNC ComparisonFunc; FLOAT BorderColor[4]; FLOAT MinLOD; FLOAT MaxLOD; } D3D11_SAMPLER_DESC; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D11_SAMPLER_DESC : public D3D11_SAMPLER_DESC {") cpp_quote(" CD3D11_SAMPLER_DESC() {}") cpp_quote(" explicit CD3D11_SAMPLER_DESC(const D3D11_SAMPLER_DESC &o) : D3D11_SAMPLER_DESC(o) {}") cpp_quote(" explicit CD3D11_SAMPLER_DESC(CD3D11_DEFAULT) {" ) cpp_quote(" Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;") cpp_quote(" AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;") cpp_quote(" AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;") cpp_quote(" AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;") cpp_quote(" MipLODBias = 0;") cpp_quote(" MaxAnisotropy = 1;") cpp_quote(" ComparisonFunc = D3D11_COMPARISON_NEVER;") cpp_quote(" BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;") cpp_quote(" MinLOD = -3.402823466e+38f;") cpp_quote(" MaxLOD = 3.402823466e+38f;") cpp_quote(" }") cpp_quote(" explicit CD3D11_SAMPLER_DESC(D3D11_FILTER filter, D3D11_TEXTURE_ADDRESS_MODE addressU,") cpp_quote(" D3D11_TEXTURE_ADDRESS_MODE addressV, D3D11_TEXTURE_ADDRESS_MODE addressW,") cpp_quote(" FLOAT mipLODBias, UINT maxAnisotropy, D3D11_COMPARISON_FUNC comparisonFunc,") cpp_quote(" const FLOAT *borderColor, FLOAT minLOD, FLOAT maxLOD) {" ) cpp_quote(" Filter = filter;") cpp_quote(" AddressU = addressU;") cpp_quote(" AddressV = addressV;") cpp_quote(" AddressW = addressW;") cpp_quote(" MipLODBias = mipLODBias;") cpp_quote(" MaxAnisotropy = maxAnisotropy;") cpp_quote(" ComparisonFunc = comparisonFunc;") cpp_quote(" if(borderColor) {") cpp_quote(" BorderColor[0] = borderColor[0];") cpp_quote(" BorderColor[1] = borderColor[1];") cpp_quote(" BorderColor[2] = borderColor[2];") cpp_quote(" BorderColor[3] = borderColor[3];") cpp_quote(" }else {") cpp_quote(" BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;") cpp_quote(" }") cpp_quote(" MinLOD = minLOD;") cpp_quote(" MaxLOD = maxLOD;") cpp_quote(" }") cpp_quote(" ~CD3D11_SAMPLER_DESC() {}") cpp_quote(" operator const D3D11_SAMPLER_DESC&() const { return *this; }") cpp_quote("};") cpp_quote("#endif") typedef struct D3D11_SHADER_RESOURCE_VIEW_DESC { DXGI_FORMAT Format; D3D11_SRV_DIMENSION ViewDimension; union { D3D11_BUFFER_SRV Buffer; D3D11_TEX1D_SRV Texture1D; D3D11_TEX1D_ARRAY_SRV Texture1DArray; D3D11_TEX2D_SRV Texture2D; D3D11_TEX2D_ARRAY_SRV Texture2DArray; D3D11_TEX2DMS_SRV Texture2DMS; D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray; D3D11_TEX3D_SRV Texture3D; D3D11_TEXCUBE_SRV TextureCube; D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray; D3D11_BUFFEREX_SRV BufferEx; }; } D3D11_SHADER_RESOURCE_VIEW_DESC; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined( __cplusplus )") cpp_quote("struct CD3D11_SHADER_RESOURCE_VIEW_DESC : public D3D11_SHADER_RESOURCE_VIEW_DESC {") cpp_quote(" CD3D11_SHADER_RESOURCE_VIEW_DESC() {}") cpp_quote(" explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(D3D11_SRV_DIMENSION dim,") cpp_quote(" DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0,") cpp_quote(" UINT mip_levels = -1, UINT first_slice = 0, UINT array_size = -1, UINT flags = 0) {") cpp_quote(" Format = format;") cpp_quote(" ViewDimension = dim;") cpp_quote(" switch(ViewDimension) {") cpp_quote(" case D3D11_SRV_DIMENSION_BUFFER:") cpp_quote(" Buffer.FirstElement = most_detailed_mip;") cpp_quote(" Buffer.NumElements = mip_levels;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_TEXTURE1D:") cpp_quote(" Texture1D.MostDetailedMip = most_detailed_mip;") cpp_quote(" Texture1D.MipLevels = mip_levels;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_TEXTURE1DARRAY:") cpp_quote(" Texture1DArray.MostDetailedMip = most_detailed_mip;") cpp_quote(" Texture1DArray.MipLevels = mip_levels;") cpp_quote(" Texture1DArray.FirstArraySlice = first_slice;") cpp_quote(" Texture1DArray.ArraySize = array_size;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_TEXTURE2D:") cpp_quote(" Texture2D.MostDetailedMip = most_detailed_mip;") cpp_quote(" Texture2D.MipLevels = mip_levels;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:") cpp_quote(" Texture2DArray.MostDetailedMip = most_detailed_mip;") cpp_quote(" Texture2DArray.MipLevels = mip_levels;") cpp_quote(" Texture2DArray.FirstArraySlice = first_slice;") cpp_quote(" Texture2DArray.ArraySize = array_size;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:") cpp_quote(" Texture2DMSArray.FirstArraySlice = first_slice;") cpp_quote(" Texture2DMSArray.ArraySize = array_size;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_TEXTURE3D:") cpp_quote(" Texture3D.MostDetailedMip = most_detailed_mip;") cpp_quote(" Texture3D.MipLevels = mip_levels;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_TEXTURECUBE:") cpp_quote(" TextureCube.MostDetailedMip = most_detailed_mip;") cpp_quote(" TextureCube.MipLevels = mip_levels;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY:") cpp_quote(" TextureCubeArray.MostDetailedMip = most_detailed_mip;") cpp_quote(" TextureCubeArray.MipLevels = mip_levels;") cpp_quote(" TextureCubeArray.First2DArrayFace = first_slice;") cpp_quote(" TextureCubeArray.NumCubes = array_size;") cpp_quote(" break;") cpp_quote(" case D3D11_SRV_DIMENSION_BUFFEREX:") cpp_quote(" BufferEx.FirstElement = most_detailed_mip;") cpp_quote(" BufferEx.NumElements = mip_levels;") cpp_quote(" BufferEx.Flags = flags;") cpp_quote(" break;") cpp_quote(" default:") cpp_quote(" break;") cpp_quote(" }") cpp_quote(" }") cpp_quote(" explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,") cpp_quote(" UINT elem_cnt, UINT flags = 0);") /* FIXME: implement */ cpp_quote(" explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture1D *texture, D3D11_SRV_DIMENSION dim,") cpp_quote(" DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,") cpp_quote(" UINT first_slice = 0, UINT array_size = -1 );") /* FIXME: implement */ cpp_quote(" explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture2D *texture, D3D11_SRV_DIMENSION dim,") cpp_quote(" DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,") cpp_quote(" UINT first_slice = 0, UINT array_size = -1 );") /* FIXME: implement */ cpp_quote(" explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,") cpp_quote(" UINT most_detailed_mip = 0, UINT mip_levels = -1 );") cpp_quote(" ~CD3D11_SHADER_RESOURCE_VIEW_DESC() {}") cpp_quote(" explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(const D3D11_SHADER_RESOURCE_VIEW_DESC &other)") cpp_quote(" : D3D11_SHADER_RESOURCE_VIEW_DESC(other) {}") cpp_quote(" operator const D3D11_SHADER_RESOURCE_VIEW_DESC&() const {") cpp_quote(" return *this;") cpp_quote(" }") cpp_quote("};") cpp_quote("#endif") typedef struct D3D11_TEXTURE1D_DESC { UINT Width; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D11_TEXTURE1D_DESC; typedef struct D3D11_TEXTURE2D_DESC { UINT Width; UINT Height; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D11_TEXTURE2D_DESC; cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)") cpp_quote("struct CD3D11_TEXTURE2D_DESC : public D3D11_TEXTURE2D_DESC {") cpp_quote(" CD3D11_TEXTURE2D_DESC() {}") cpp_quote(" explicit CD3D11_TEXTURE2D_DESC(const D3D11_TEXTURE2D_DESC &o) : D3D11_TEXTURE2D_DESC(o) {}") cpp_quote(" explicit CD3D11_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height, UINT arraySize = 1,") cpp_quote(" UINT mipLevels = 0, UINT bindFlags = D3D11_BIND_SHADER_RESOURCE,") cpp_quote(" D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT sampleCount = 1," ) cpp_quote(" UINT sampleQuality = 0, UINT miscFlags = 0) {") cpp_quote(" Width = width;") cpp_quote(" Height = height;") cpp_quote(" MipLevels = mipLevels;") cpp_quote(" ArraySize = arraySize;") cpp_quote(" Format = format;") cpp_quote(" SampleDesc.Count = sampleCount;") cpp_quote(" SampleDesc.Quality = sampleQuality;") cpp_quote(" Usage = usage;") cpp_quote(" BindFlags = bindFlags;") cpp_quote(" CPUAccessFlags = cpuaccessFlags;") cpp_quote(" MiscFlags = miscFlags;") cpp_quote(" }" ) cpp_quote(" ~CD3D11_TEXTURE2D_DESC() {}") cpp_quote(" operator const D3D11_TEXTURE2D_DESC&() const { return *this; }") cpp_quote("};") cpp_quote("#endif") typedef struct D3D11_TEXTURE3D_DESC { UINT Width; UINT Height; UINT Depth; UINT MipLevels; DXGI_FORMAT Format; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D11_TEXTURE3D_DESC; typedef struct D3D11_VIDEO_DECODER_DESC { GUID Guid; UINT SampleWidth; UINT SampleHeight; DXGI_FORMAT OutputFormat; } D3D11_VIDEO_DECODER_DESC; typedef struct D3D11_VIDEO_DECODER_CONFIG { GUID guidConfigBitstreamEncryption; GUID guidConfigMBcontrolEncryption; GUID guidConfigResidDiffEncryption; UINT ConfigBitstreamRaw; UINT ConfigMBcontrolRasterOrder; UINT ConfigResidDiffHost; UINT ConfigSpatialResid8; UINT ConfigResid8Subtraction; UINT ConfigSpatialHost8or9Clipping; UINT ConfigSpatialResidInterleaved; UINT ConfigIntraResidUnsigned; UINT ConfigResidDiffAccelerator; UINT ConfigHostInverseScan; UINT ConfigSpecificIDCT; UINT Config4GroupedCoefs; USHORT ConfigMinRenderTargetBuffCount; USHORT ConfigDecoderSpecific; } D3D11_VIDEO_DECODER_CONFIG; typedef enum D3D11_VIDEO_FRAME_FORMAT { D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE = 0, D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST = 1, D3D11_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2 } D3D11_VIDEO_FRAME_FORMAT; typedef enum D3D11_VIDEO_USAGE { D3D11_VIDEO_USAGE_PLAYBACK_NORMAL = 0, D3D11_VIDEO_USAGE_OPTIMAL_SPEED = 1, D3D11_VIDEO_USAGE_OPTIMAL_QUALITY = 2 } D3D11_VIDEO_USAGE; typedef struct D3D11_VIDEO_PROCESSOR_CONTENT_DESC { D3D11_VIDEO_FRAME_FORMAT InputFrameFormat; DXGI_RATIONAL InputFrameRate; UINT InputWidth; UINT InputHeight; DXGI_RATIONAL OutputFrameRate; UINT OutputWidth; UINT OutputHeight; D3D11_VIDEO_USAGE Usage; } D3D11_VIDEO_PROCESSOR_CONTENT_DESC; typedef struct D3D11_VIDEO_PROCESSOR_CAPS { UINT DeviceCaps; UINT FeatureCaps; UINT FilterCaps; UINT InputFormatCaps; UINT AutoStreamCaps; UINT StereoCaps; UINT RateConversionCapsCount; UINT MaxInputStreams; UINT MaxStreamStates; } D3D11_VIDEO_PROCESSOR_CAPS; typedef struct D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS { UINT PastFrames; UINT FutureFrames; UINT ProcessorCaps; UINT ITelecineCaps; UINT CustomRateCount; } D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS; typedef struct D3D11_VIDEO_PROCESSOR_CUSTOM_RATE { DXGI_RATIONAL CustomRate; UINT OutputFrames; BOOL InputInterlaced; UINT InputFramesOrFields; } D3D11_VIDEO_PROCESSOR_CUSTOM_RATE; typedef enum D3D11_VIDEO_PROCESSOR_FILTER { D3D11_VIDEO_PROCESSOR_FILTER_BRIGHTNESS = 0, D3D11_VIDEO_PROCESSOR_FILTER_CONTRAST = 1, D3D11_VIDEO_PROCESSOR_FILTER_HUE = 2, D3D11_VIDEO_PROCESSOR_FILTER_SATURATION = 3, D3D11_VIDEO_PROCESSOR_FILTER_NOISE_REDUCTION = 4, D3D11_VIDEO_PROCESSOR_FILTER_EDGE_ENHANCEMENT = 5, D3D11_VIDEO_PROCESSOR_FILTER_ANAMORPHIC_SCALING = 6, D3D11_VIDEO_PROCESSOR_FILTER_STEREO_ADJUSTMENT = 7 } D3D11_VIDEO_PROCESSOR_FILTER; typedef struct D3D11_VIDEO_PROCESSOR_FILTER_RANGE { int Minimum; int Maximum; int Default; float Multiplier; } D3D11_VIDEO_PROCESSOR_FILTER_RANGE; typedef enum D3D11_AUTHENTICATED_CHANNEL_TYPE { D3D11_AUTHENTICATED_CHANNEL_D3D11 = 1, D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE = 2, D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE = 3 } D3D11_AUTHENTICATED_CHANNEL_TYPE; typedef enum D3D11_VDOV_DIMENSION { D3D11_VDOV_DIMENSION_UNKNOWN = 0, D3D11_VDOV_DIMENSION_TEXTURE2D = 1 } D3D11_VDOV_DIMENSION; typedef struct D3D11_TEX2D_VDOV { UINT ArraySlice; } D3D11_TEX2D_VDOV; typedef struct D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC { GUID DecodeProfile; D3D11_VDOV_DIMENSION ViewDimension; union { D3D11_TEX2D_VDOV Texture2D; }; } D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC; typedef enum D3D11_VPIV_DIMENSION { D3D11_VPIV_DIMENSION_UNKNOWN = 0, D3D11_VPIV_DIMENSION_TEXTURE2D = 1 } D3D11_VPIV_DIMENSION; typedef struct D3D11_TEX2D_VPIV { UINT MipSlice; UINT ArraySlice; } D3D11_TEX2D_VPIV; typedef struct D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC { UINT FourCC; D3D11_VPIV_DIMENSION ViewDimension; union { D3D11_TEX2D_VPIV Texture2D; }; } D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC; typedef enum D3D11_VPOV_DIMENSION { D3D11_VPOV_DIMENSION_UNKNOWN = 0, D3D11_VPOV_DIMENSION_TEXTURE2D = 1, D3D11_VPOV_DIMENSION_TEXTURE2DARRAY = 2 } D3D11_VPOV_DIMENSION; typedef struct D3D11_TEX2D_VPOV { UINT MipSlice; } D3D11_TEX2D_VPOV; typedef struct D3D11_TEX2D_ARRAY_VPOV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_VPOV; typedef struct D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC { D3D11_VPOV_DIMENSION ViewDimension; union { D3D11_TEX2D_VPOV Texture2D; D3D11_TEX2D_ARRAY_VPOV Texture2DArray; }; } D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC; typedef struct D3D11_VIDEO_CONTENT_PROTECTION_CAPS { UINT Caps; UINT KeyExchangeTypeCount; UINT BlockAlignmentSize; ULONGLONG ProtectedMemorySize; } D3D11_VIDEO_CONTENT_PROTECTION_CAPS; typedef struct D3D11_ENCRYPTED_BLOCK_INFO { UINT NumEncryptedBytesAtBeginning; UINT NumBytesInSkipPattern; UINT NumBytesInEncryptPattern; } D3D11_ENCRYPTED_BLOCK_INFO; typedef struct D3D11_VIDEO_DECODER_BUFFER_DESC { D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType; UINT BufferIndex; UINT DataOffset; UINT DataSize; UINT FirstMBaddress; UINT NumMBsInBuffer; UINT Width; UINT Height; UINT Stride; UINT ReservedBits; void *pIV; UINT IVSize; BOOL PartialEncryption; D3D11_ENCRYPTED_BLOCK_INFO EncryptedBlockInfo; } D3D11_VIDEO_DECODER_BUFFER_DESC; typedef struct D3D11_VIDEO_DECODER_EXTENSION { UINT Function; void *pPrivateInputData; UINT PrivateInputDataSize; void *pPrivateOutputData; UINT PrivateOutputDataSize; UINT ResourceCount; ID3D11Resource **ppResourceList; } D3D11_VIDEO_DECODER_EXTENSION; typedef struct D3D11_VIDEO_COLOR_YCbCrA { float Y; float Cb; float Cr; float A; } D3D11_VIDEO_COLOR_YCbCrA; typedef struct D3D11_VIDEO_COLOR_RGBA { float R; float G; float B; float A; } D3D11_VIDEO_COLOR_RGBA; typedef struct D3D11_VIDEO_COLOR { union { D3D11_VIDEO_COLOR_YCbCrA YCbCr; D3D11_VIDEO_COLOR_RGBA RGBA; }; } D3D11_VIDEO_COLOR; typedef struct D3D11_VIDEO_PROCESSOR_COLOR_SPACE { UINT Usage : 1; UINT RGB_Range : 1; UINT YCbCr_Matrix : 1; UINT YCbCr_xvYCC : 1; UINT Nominal_Range : 2; UINT Reserved : 26; } D3D11_VIDEO_PROCESSOR_COLOR_SPACE; typedef struct D3D11_VIDEO_PROCESSOR_STREAM { BOOL Enable; UINT OutputIndex; UINT InputFrameOrField; UINT PastFrames; UINT FutureFrames; ID3D11VideoProcessorInputView **ppPastSurfaces; ID3D11VideoProcessorInputView *pInputSurface; ID3D11VideoProcessorInputView **ppFutureSurfaces; ID3D11VideoProcessorInputView **ppPastSurfacesRight; ID3D11VideoProcessorInputView *pInputSurfaceRight; ID3D11VideoProcessorInputView **ppFutureSurfacesRight; } D3D11_VIDEO_PROCESSOR_STREAM; typedef struct D3D11_OMAC { BYTE Omac[D3D11_OMAC_SIZE]; } D3D11_OMAC; typedef struct D3D11_AUTHENTICATED_CONFIGURE_OUTPUT { D3D11_OMAC omac; GUID ConfigureType; HANDLE hChannel; UINT SequenceNumber; HRESULT ReturnCode; } D3D11_AUTHENTICATED_CONFIGURE_OUTPUT; typedef struct D3D11_QUERY_DATA_TIMESTAMP_DISJOINT { UINT64 Frequency; BOOL Disjoint; } D3D11_QUERY_DATA_TIMESTAMP_DISJOINT; typedef struct D3D11_QUERY_DATA_PIPELINE_STATISTICS { UINT64 IAVertices; UINT64 IAPrimitives; UINT64 VSInvocations; UINT64 GSInvocations; UINT64 GSPrimitives; UINT64 CInvocations; UINT64 CPrimitives; UINT64 PSInvocations; UINT64 HSInvocations; UINT64 DSInvocations; UINT64 CSInvocations; } D3D11_QUERY_DATA_PIPELINE_STATISTICS; typedef struct D3D11_DRAW_INSTANCED_INDIRECT_ARGS { UINT VertexCountPerInstance; UINT InstanceCount; UINT StartVertexLocation; UINT StartInstanceLocation; } D3D11_DRAW_INSTANCED_INDIRECT_ARGS; typedef struct D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS { UINT IndexCountPerInstance; UINT InstanceCount; UINT StartIndexLocation; INT BaseVertexLocation; UINT StartInstanceLocation; } D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS; typedef struct D3D11_AUTHENTICATED_CONFIGURE_INPUT { D3D11_OMAC omac; GUID ConfigureType; HANDLE hChannel; UINT SequenceNumber; } D3D11_AUTHENTICATED_CONFIGURE_INPUT; typedef struct D3D11_AUTHENTICATED_QUERY_INPUT { GUID QueryType; HANDLE hChannel; UINT SequenceNumber; } D3D11_AUTHENTICATED_QUERY_INPUT; typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT { D3D11_OMAC omac; GUID QueryType; HANDLE hChannel; UINT SequenceNumber; HRESULT ReturnCode; } D3D11_AUTHENTICATED_QUERY_OUTPUT; typedef union D3D11_AUTHENTICATED_PROTECTION_FLAGS { struct { UINT ProtectionEnabled : 1; UINT OverlayOrFullscreenRequired : 1; UINT Reserved : 30; } Flags; UINT Value; } D3D11_AUTHENTICATED_PROTECTION_FLAGS; typedef struct D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; D3D11_AUTHENTICATED_PROTECTION_FLAGS ProtectionFlags; } D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType; } D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; HANDLE DeviceHandle; } D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT { D3D11_AUTHENTICATED_QUERY_INPUT Input; HANDLE DecoderHandle; } D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT; typedef struct D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; HANDLE DecoderHandle; HANDLE CryptoSessionHandle; HANDLE DeviceHandle; } D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; UINT RestrictedSharedResourceProcessCount; } D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT { D3D11_AUTHENTICATED_QUERY_INPUT Input; UINT ProcessIndex; } D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT; typedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; UINT ProcessIndex; D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessIdentifier; HANDLE ProcessHandle; } D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; UINT UnrestrictedProtectedSharedResourceCount; } D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT { D3D11_AUTHENTICATED_QUERY_INPUT Input; HANDLE DeviceHandle; HANDLE CryptoSessionHandle; } D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT; typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; HANDLE DeviceHandle; HANDLE CryptoSessionHandle; UINT OutputIDCount; } D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT { D3D11_AUTHENTICATED_QUERY_INPUT Input; HANDLE DeviceHandle; HANDLE CryptoSessionHandle; UINT OutputIDIndex; } D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT; typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; HANDLE DeviceHandle; HANDLE CryptoSessionHandle; UINT OutputIDIndex; UINT64 OutputID; } D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_ACESSIBILITY_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; D3D11_BUS_TYPE BusType; BOOL AccessibleInContiguousBlocks; BOOL AccessibleInNonContiguousBlocks; } D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; UINT EncryptionGuidCount; } D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT { D3D11_AUTHENTICATED_QUERY_INPUT Input; UINT EncryptionGuidIndex; } D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT; typedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; UINT EncryptionGuidIndex; GUID EncryptionGuid; } D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT; typedef struct D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT { D3D11_AUTHENTICATED_QUERY_OUTPUT Output; GUID EncryptionGuid; } D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT; typedef struct D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT { D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters; UINT StartSequenceQuery; UINT StartSequenceConfigure; } D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT; typedef struct D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT { D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters; D3D11_AUTHENTICATED_PROTECTION_FLAGS Protections; } D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT; typedef struct D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT { D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters; HANDLE DecoderHandle; HANDLE CryptoSessionHandle; HANDLE DeviceHandle; } D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT; typedef struct D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT { D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters; D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessType; HANDLE ProcessHandle; BOOL AllowAccess; } D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT; typedef struct D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT { D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters; GUID EncryptionGuid; } D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT; [ object, local, uuid(1841e5c8-16b0-489b-bcc8-44cfb0d5deae) ] interface ID3D11DeviceChild : IUnknown { void GetDevice( [out] ID3D11Device **ppDevice); HRESULT GetPrivateData( [in] REFGUID guid, [in, out] UINT *pDataSize, [out] void *pData); HRESULT SetPrivateData( [in] REFGUID guid, [in] UINT DataSize, [in] const void *pData); HRESULT SetPrivateDataInterface( [in] REFGUID guid, [in] const IUnknown *pData); } [ object, local, uuid(4b35d0cd-1e15-4258-9c98-1b1333f6dd3b) ] interface ID3D11Asynchronous : ID3D11DeviceChild { UINT GetDataSize(); } [ object, local, uuid(d6c00747-87b7-425e-b84d-44d108560afd) ] interface ID3D11Query : ID3D11Asynchronous { void GetDesc( [out] D3D11_QUERY_DESC *pDesc); } [ object, local, uuid(dc8e63f3-d12b-4952-b47b-5e45026a862d) ] interface ID3D11Resource : ID3D11DeviceChild { void GetType( [out] D3D11_RESOURCE_DIMENSION *pResourceDimension); void SetEvictionPriority( [in] UINT EvictionPriority); UINT GetEvictionPriority(); } [ object, local, uuid(839d1216-bb2e-412b-b7f4-a9dbebe08ed1) ] interface ID3D11View : ID3D11DeviceChild { void GetResource( [out] ID3D11Resource **ppResource); } [ object, local, uuid(75b68faa-347d-4159-8f45-a0640f01cd9a) ] interface ID3D11BlendState : ID3D11DeviceChild { void GetDesc( [out] D3D11_BLEND_DESC *pDesc); } [ object, local, uuid(48570b85-d1ee-4fcd-a250-eb350722b037) ] interface ID3D11Buffer : ID3D11Resource { void GetDesc( [out] D3D11_BUFFER_DESC *pDesc); } [ object, local, uuid(a6cd7faa-b0b7-4a2f-9436-8662a65797cb) ] interface ID3D11ClassInstance : ID3D11DeviceChild { void GetClassLinkage( [out] ID3D11ClassLinkage **ppLinkage); void GetDesc( [out] D3D11_CLASS_INSTANCE_DESC *pDesc); void GetInstanceName( [out] LPSTR pInstanceName, [in, out] SIZE_T *pBufferLength); void GetTypeName( [out] LPSTR pTypeName, [in, out] SIZE_T *pBufferLength); } [ object, local, uuid(ddf57cba-9543-46e4-a12b-f207a0fe7fed) ] interface ID3D11ClassLinkage : ID3D11DeviceChild { HRESULT GetClassInstance( [in] LPCSTR pClassInstanceName, [in] UINT InstanceIndex, [out] ID3D11ClassInstance **ppInstance); HRESULT CreateClassInstance( [in] LPCSTR pClassTypeName, [in] UINT ConstantBufferOffset, [in] UINT ConstantVectorOffset, [in] UINT TextureOffset, [in] UINT SamplerOffset, [out] ID3D11ClassInstance **ppInstance); } [ object, local, uuid(a24bc4d1-769e-43f7-8013-98ff566c18e2) ] interface ID3D11CommandList : ID3D11DeviceChild { UINT GetContextFlags(); } [ object, local, uuid(4f5b196e-c2bd-495e-bd01-1fded38e4969) ] interface ID3D11ComputeShader : ID3D11DeviceChild { } [ object, local, uuid(6e8c49fb-a371-4770-b440-29086022b741) ] interface ID3D11Counter : ID3D11Asynchronous { void GetDesc( [out] D3D11_COUNTER_DESC *pDesc); } [ object, local, uuid(03823efb-8d8f-4e1c-9aa2-f64bb2cbfdf1) ] interface ID3D11DepthStencilState : ID3D11DeviceChild { void GetDesc( [out] D3D11_DEPTH_STENCIL_DESC *pDesc); } [ object, local, uuid(9fdac92a-1876-48c3-afad-25b94f84a9b6) ] interface ID3D11DepthStencilView : ID3D11View { void GetDesc( [out] D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc); } [ object, local, uuid(f582c508-0f36-490c-9977-31eece268cfa) ] interface ID3D11DomainShader : ID3D11DeviceChild { } [ object, local, uuid(38325b96-effb-4022-ba02-2e795b70275c) ] interface ID3D11GeometryShader : ID3D11DeviceChild { } [ object, local, uuid(8e5c6061-628a-4c8e-8264-bbe45cb3d5dd) ] interface ID3D11HullShader : ID3D11DeviceChild { } [ object, local, uuid(e4819ddc-4cf0-4025-bd26-5de82a3e07b7) ] interface ID3D11InputLayout : ID3D11DeviceChild { } [ object, local, uuid(ea82e40d-51dc-4f33-93d4-db7c9125ae8c) ] interface ID3D11PixelShader : ID3D11DeviceChild { } [ object, local, uuid(9eb576dd-9f77-4d86-81aa-8bab5fe490e2) ] interface ID3D11Predicate : ID3D11Query { } [ object, local, uuid(9bb4ab81-ab1a-4d8f-b506-fc04200b6ee7) ] interface ID3D11RasterizerState : ID3D11DeviceChild { void GetDesc( [out] D3D11_RASTERIZER_DESC *pDesc); } [ object, local, uuid(dfdba067-0b8d-4865-875b-d7b4516cc164) ] interface ID3D11RenderTargetView : ID3D11View { void GetDesc( [out] D3D11_RENDER_TARGET_VIEW_DESC *pDesc); } [ object, local, uuid(da6fea51-564c-4487-9810-f0d0f9b4e3a5) ] interface ID3D11SamplerState : ID3D11DeviceChild { void GetDesc( [out] D3D11_SAMPLER_DESC *pDesc); } [ object, local, uuid(b0e06fe0-8192-4e1a-b1ca-36d7414710b2) ] interface ID3D11ShaderResourceView : ID3D11View { void GetDesc( [out] D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc); } [ object, local, uuid(f8fb5c27-c6b3-4f75-a4c8-439af2ef564c), ] interface ID3D11Texture1D : ID3D11Resource { void GetDesc( [out] D3D11_TEXTURE1D_DESC *pDesc); } [ object, local, uuid(6f15aaf2-d208-4e89-9ab4-489535d34f9c) ] interface ID3D11Texture2D : ID3D11Resource { void GetDesc( [out] D3D11_TEXTURE2D_DESC *pDesc); } [ object, local, uuid(037e866e-f56d-4357-a8af-9dabbe6e250e) ] interface ID3D11Texture3D : ID3D11Resource { void GetDesc( [out] D3D11_TEXTURE3D_DESC *pDesc); } [ object, local, uuid(28acf509-7f5c-48f6-8611-f316010a6380) ] interface ID3D11UnorderedAccessView : ID3D11View { void GetDesc( [out] D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc); } [ object, local, uuid(3b301d64-d678-4289-8897-22f8928b72f3) ] interface ID3D11VertexShader : ID3D11DeviceChild { } [ object, local, uuid(c0bfa96c-e089-44fb-8eaf-26f8796190da) ] interface ID3D11DeviceContext : ID3D11DeviceChild { void VSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppConstantBuffers); void PSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D11ShaderResourceView *const *ppShaderResourceViews); void PSSetShader( [in] ID3D11PixelShader *pPixelShader, [in] ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void PSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in] ID3D11SamplerState *const *ppSamplers); void VSSetShader( [in] ID3D11VertexShader *pVertexShader, [in] ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void DrawIndexed( [in] UINT IndexCount, [in] UINT StartIndexLocation, [in] INT BaseVertexLocation); void Draw( [in] UINT VertexCount, [in] UINT StartVertexLocation); HRESULT Map( [in] ID3D11Resource *pResource, [in] UINT Subresource, [in] D3D11_MAP MapType, [in] UINT MapFlags, [out] D3D11_MAPPED_SUBRESOURCE *pMappedResource); void Unmap( [in] ID3D11Resource *pResource, [in] UINT Subresource); void PSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppConstantBuffers); void IASetInputLayout( [in] ID3D11InputLayout *pInputLayout); void IASetVertexBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppVertexBuffers, [in] const UINT *pStrides, [in] const UINT *pOffsets); void IASetIndexBuffer( [in] ID3D11Buffer *pIndexBuffer, [in] DXGI_FORMAT Format, [in] UINT Offset); void DrawIndexedInstanced( [in] UINT IndexCountPerInstance, [in] UINT InstanceCount, [in] UINT StartIndexLocation, [in] INT BaseVertexLocation, [in] UINT StartInstanceLocation); void DrawInstanced( [in] UINT VertexCountPerInstance, [in] UINT InstanceCount, [in] UINT StartVertexLocation, [in] UINT StartInstanceLocation); void GSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppConstantBuffers); void GSSetShader( [in] ID3D11GeometryShader *pShader, [in] ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void IASetPrimitiveTopology( [in] D3D11_PRIMITIVE_TOPOLOGY Topology); void VSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D11ShaderResourceView *const *ppShaderResourceViews); void VSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in] ID3D11SamplerState *const *ppSamplers); void Begin( [in] ID3D11Asynchronous *pAsync); void End( [in] ID3D11Asynchronous *pAsync); HRESULT GetData( [in] ID3D11Asynchronous *pAsync, [in] void *pData, [in] UINT DataSize, [in] UINT GetDataFlags); void SetPredication( [in] ID3D11Predicate *pPredicate, [in] BOOL PredicateValue); void GSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D11ShaderResourceView *const *ppShaderResourceViews); void GSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in] ID3D11SamplerState *const *ppSamplers); void OMSetRenderTargets( [in] UINT NumViews, [in] ID3D11RenderTargetView *const *ppRenderTargetViews, [in] ID3D11DepthStencilView *pDepthStencilView); void OMSetRenderTargetsAndUnorderedAccessViews( [in] UINT NumRTVs, [in] ID3D11RenderTargetView *const *ppRenderTargetViews, [in] ID3D11DepthStencilView *pDepthStencilView, [in] UINT UAVStartSlot, [in] UINT NumUAVs, [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews, [in] const UINT *pUAVInitialCounts); void OMSetBlendState( [in] ID3D11BlendState *pBlendState, [in] const FLOAT BlendFactor[4], [in] UINT SampleMask); void OMSetDepthStencilState( [in] ID3D11DepthStencilState *pDepthStencilState, [in] UINT StencilRef); void SOSetTargets( [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppSOTargets, [in] const UINT *pOffsets); void DrawAuto(); void DrawIndexedInstancedIndirect( [in] ID3D11Buffer *pBufferForArgs, [in] UINT AlignedByteOffsetForArgs); void DrawInstancedIndirect( [in] ID3D11Buffer *pBufferForArgs, [in] UINT AlignedByteOffsetForArgs); void Dispatch( [in] UINT ThreadGroupCountX, [in] UINT ThreadGroupCountY, [in] UINT ThreadGroupCountZ); void DispatchIndirect( [in] ID3D11Buffer *pBufferForArgs, [in] UINT AlignedByteOffsetForArgs); void RSSetState( [in] ID3D11RasterizerState *pRasterizerState); void RSSetViewports( [in] UINT NumViewports, [in] const D3D11_VIEWPORT *pViewports); void RSSetScissorRects( [in] UINT NumRects, [in] const D3D11_RECT *pRects); void CopySubresourceRegion( [in] ID3D11Resource *pDstResource, [in] UINT DstSubresource, [in] UINT DstX, [in] UINT DstY, [in] UINT DstZ, [in] ID3D11Resource *pSrcResource, [in] UINT SrcSubresource, [in] const D3D11_BOX *pSrcBox); void CopyResource( [in] ID3D11Resource *pDstResource, [in] ID3D11Resource *pSrcResource); void UpdateSubresource( [in] ID3D11Resource *pDstResource, [in] UINT DstSubresource, [in] const D3D11_BOX *pDstBox, [in] const void *pSrcData, [in] UINT SrcRowPitch, [in] UINT SrcDepthPitch); void CopyStructureCount( [in] ID3D11Buffer *pDstBuffer, [in] UINT DstAlignedByteOffset, [in] ID3D11UnorderedAccessView *pSrcView); void ClearRenderTargetView( [in] ID3D11RenderTargetView *pRenderTargetView, [in] const FLOAT ColorRGBA[4]); void ClearUnorderedAccessViewUint( [in] ID3D11UnorderedAccessView *pUnorderedAccessView, [in] const UINT Values[4]); void ClearUnorderedAccessViewFloat( [in] ID3D11UnorderedAccessView *pUnorderedAccessView, [in] const FLOAT Values[4]); void ClearDepthStencilView( [in] ID3D11DepthStencilView *pDepthStencilView, [in] UINT ClearFlags, [in] FLOAT Depth, [in] UINT8 Stencil); void GenerateMips( [in] ID3D11ShaderResourceView *pShaderResourceView); void SetResourceMinLOD( [in] ID3D11Resource *pResource, FLOAT MinLOD); FLOAT GetResourceMinLOD( [in] ID3D11Resource *pResource); void ResolveSubresource( [in] ID3D11Resource *pDstResource, [in] UINT DstSubresource, [in] ID3D11Resource *pSrcResource, [in] UINT SrcSubresource, [in] DXGI_FORMAT Format); void ExecuteCommandList( [in] ID3D11CommandList *pCommandList, BOOL RestoreContextState); void HSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D11ShaderResourceView *const *ppShaderResourceViews); void HSSetShader( [in] ID3D11HullShader *pHullShader, [in] ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void HSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in] ID3D11SamplerState *const *ppSamplers); void HSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppConstantBuffers); void DSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D11ShaderResourceView *const *ppShaderResourceViews); void DSSetShader( [in] ID3D11DomainShader *pDomainShader, [in] ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void DSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in] ID3D11SamplerState *const *ppSamplers); void DSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppConstantBuffers); void CSSetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [in] ID3D11ShaderResourceView *const *ppShaderResourceViews); void CSSetUnorderedAccessViews( [in] UINT StartSlot, [in] UINT NumUAVs, [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews, [in] const UINT *pUAVInitialCounts); void CSSetShader( [in] ID3D11ComputeShader *pComputeShader, [in] ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void CSSetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [in] ID3D11SamplerState *const *ppSamplers); void CSSetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [in] ID3D11Buffer *const *ppConstantBuffers); void VSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D11Buffer **ppConstantBuffers); void PSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D11ShaderResourceView **ppShaderResourceViews); void PSGetShader( [out] ID3D11PixelShader **ppPixelShader, [out] ID3D11ClassInstance **ppClassInstances, [in, out] UINT *pNumClassInstances); void PSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D11SamplerState **ppSamplers); void VSGetShader( [out] ID3D11VertexShader **ppVertexShader, [out] ID3D11ClassInstance **ppClassInstances, [in, out] UINT *pNumClassInstances); void PSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D11Buffer **ppConstantBuffers); void IAGetInputLayout( [out] ID3D11InputLayout **ppInputLayout); void IAGetVertexBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D11Buffer **ppVertexBuffers, [out] UINT *pStrides, [out] UINT *pOffsets); void IAGetIndexBuffer( [out] ID3D11Buffer **pIndexBuffer, [out] DXGI_FORMAT* Format, [out] UINT* Offset); void GSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D11Buffer **ppConstantBuffers); void GSGetShader( [out] ID3D11GeometryShader **ppGeometryShader, [out] ID3D11ClassInstance **ppClassInstances, [in, out] UINT *pNumClassInstances); void IAGetPrimitiveTopology( [out] D3D11_PRIMITIVE_TOPOLOGY *pTopology); void VSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D11ShaderResourceView **ppShaderResourceViews); void VSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D11SamplerState **ppSamplers); void GetPredication( [out] ID3D11Predicate **ppPredicate, [out] BOOL *pPredicateValue); void GSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D11ShaderResourceView **ppShaderResourceViews); void GSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D11SamplerState **ppSamplers); void OMGetRenderTargets( [in] UINT NumViews, [out] ID3D11RenderTargetView **ppRenderTargetViews, [out] ID3D11DepthStencilView **ppDepthStencilView); void OMGetRenderTargetsAndUnorderedAccessViews( [in] UINT NumRTVs, [out] ID3D11RenderTargetView **ppRenderTargetViews, [out] ID3D11DepthStencilView **ppDepthStencilView, [in] UINT UAVStartSlot, [in] UINT NumUAVs, [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews); void OMGetBlendState( [out] ID3D11BlendState **ppBlendState, [out] FLOAT BlendFactor[4], [out] UINT *pSampleMask); void OMGetDepthStencilState( [out] ID3D11DepthStencilState **ppDepthStencilState, [out] UINT *pStencilRef); void SOGetTargets( [in] UINT NumBuffers, [out] ID3D11Buffer **ppSOTargets); void RSGetState( [out] ID3D11RasterizerState **ppRasterizerState); void RSGetViewports( [in, out] UINT *pNumViewports, [out] D3D11_VIEWPORT *pViewports); void RSGetScissorRects( [in, out] UINT *pNumRects, [out] D3D11_RECT *pRects); void HSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D11ShaderResourceView **ppShaderResourceViews); void HSGetShader( [out] ID3D11HullShader **ppHullShader, [out] ID3D11ClassInstance **ppClassInstances, [in, out] UINT *pNumClassInstances); void HSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D11SamplerState **ppSamplers); void HSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D11Buffer **ppConstantBuffers); void DSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D11ShaderResourceView **ppShaderResourceViews); void DSGetShader( [out] ID3D11DomainShader **ppDomainShader, [out] ID3D11ClassInstance **ppClassInstances, [in, out] UINT *pNumClassInstances); void DSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D11SamplerState **ppSamplers); void DSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D11Buffer **ppConstantBuffers); void CSGetShaderResources( [in] UINT StartSlot, [in] UINT NumViews, [out] ID3D11ShaderResourceView **ppShaderResourceViews); void CSGetUnorderedAccessViews( [in] UINT StartSlot, [in] UINT NumUAVs, [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews); void CSGetShader( [out] ID3D11ComputeShader **ppComputeShader, [out] ID3D11ClassInstance **ppClassInstances, [in, out] UINT *pNumClassInstances); void CSGetSamplers( [in] UINT StartSlot, [in] UINT NumSamplers, [out] ID3D11SamplerState **ppSamplers); void CSGetConstantBuffers( [in] UINT StartSlot, [in] UINT NumBuffers, [out] ID3D11Buffer **ppConstantBuffers); void ClearState(); void Flush(); D3D11_DEVICE_CONTEXT_TYPE GetType(); UINT GetContextFlags(); HRESULT FinishCommandList( BOOL RestoreDeferredContextState, [out] ID3D11CommandList **ppCommandList); } [ object, uuid(3015a308-dcbd-47aa-a747-192486d14d4a), local, pointer_default(unique) ] interface ID3D11AuthenticatedChannel : ID3D11DeviceChild { HRESULT GetCertificateSize( UINT *pCertificateSize); HRESULT GetCertificate( UINT CertificateSize, BYTE *pCertificate); void GetChannelHandle( HANDLE *pChannelHandle); } [ object, uuid(9b32f9ad-bdcc-40a6-a39d-d5c865845720), local, pointer_default(unique) ] interface ID3D11CryptoSession : ID3D11DeviceChild { void GetCryptoType( GUID *pCryptoType); void GetDecoderProfile( GUID *pDecoderProfile); HRESULT GetCertificateSize( UINT *pCertificateSize); HRESULT GetCertificate( UINT CertificateSize, BYTE *pCertificate); void GetCryptoSessionHandle( HANDLE *pCryptoSessionHandle); } [ object, uuid(3c9c5b51-995d-48d1-9b8d-fa5caeded65c), local, pointer_default(unique) ] interface ID3D11VideoDecoder : ID3D11DeviceChild { HRESULT GetCreationParameters( D3D11_VIDEO_DECODER_DESC *pVideoDesc, D3D11_VIDEO_DECODER_CONFIG *pConfig); HRESULT GetDriverHandle( HANDLE *pDriverHandle); } [ object, uuid(31627037-53ab-4200-9061-05faa9ab45f9), local, pointer_default(unique) ] interface ID3D11VideoProcessorEnumerator : ID3D11DeviceChild { HRESULT GetVideoProcessorContentDesc( D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pContentDesc); HRESULT CheckVideoProcessorFormat( DXGI_FORMAT Format, UINT *pFlags); HRESULT GetVideoProcessorCaps( D3D11_VIDEO_PROCESSOR_CAPS *pCaps); HRESULT GetVideoProcessorRateConversionCaps( UINT TypeIndex, D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps); HRESULT GetVideoProcessorCustomRate( UINT TypeIndex, UINT CustomRateIndex, D3D11_VIDEO_PROCESSOR_CUSTOM_RATE *pRate); HRESULT GetVideoProcessorFilterRange( D3D11_VIDEO_PROCESSOR_FILTER Filter, D3D11_VIDEO_PROCESSOR_FILTER_RANGE *pRange); } [ object, uuid(1d7b0652-185f-41c6-85ce-0c5be3d4ae6c), local, pointer_default(unique) ] interface ID3D11VideoProcessor : ID3D11DeviceChild { void GetContentDesc( D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc); void GetRateConversionCaps( D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps); } [ object, uuid(c2931aea-2a85-4f20-860f-fba1fd256e18), local, pointer_default(unique) ] interface ID3D11VideoDecoderOutputView : ID3D11View { void GetDesc( D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc); } [ object, uuid(11ec5a5f-51dc-4945-ab34-6e8c21300ea5), local, pointer_default(unique) ] interface ID3D11VideoProcessorInputView : ID3D11View { void GetDesc( D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc); } [ object, uuid(a048285e-25a9-4527-bd93-d68b68c44254), local, pointer_default(unique) ] interface ID3D11VideoProcessorOutputView : ID3D11View { void GetDesc( D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc); } [ object, uuid(10ec4d5b-975a-4689-b9e4-d0aac30fe333), local, pointer_default(unique) ] interface ID3D11VideoDevice : IUnknown { HRESULT CreateVideoDecoder( const D3D11_VIDEO_DECODER_DESC *pVideoDesc, const D3D11_VIDEO_DECODER_CONFIG *pConfig, ID3D11VideoDecoder **ppDecoder); HRESULT CreateVideoProcessor( ID3D11VideoProcessorEnumerator *pEnum, UINT RateConversionIndex, ID3D11VideoProcessor **ppVideoProcessor); HRESULT CreateAuthenticatedChannel( D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType, ID3D11AuthenticatedChannel **ppAuthenticatedChannel); HRESULT CreateCryptoSession( const GUID *pCryptoType, const GUID *pDecoderProfile, const GUID *pKeyExchangeType, ID3D11CryptoSession **ppCryptoSession); HRESULT CreateVideoDecoderOutputView( ID3D11Resource *pResource, const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc, ID3D11VideoDecoderOutputView **ppVDOVView); HRESULT CreateVideoProcessorInputView( ID3D11Resource *pResource, ID3D11VideoProcessorEnumerator *pEnum, const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc, ID3D11VideoProcessorInputView **ppVPIView); HRESULT CreateVideoProcessorOutputView( ID3D11Resource *pResource, ID3D11VideoProcessorEnumerator *pEnum, const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc, ID3D11VideoProcessorOutputView **ppVPOView); HRESULT CreateVideoProcessorEnumerator( const D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc, ID3D11VideoProcessorEnumerator **ppEnum); UINT GetVideoDecoderProfileCount(); HRESULT GetVideoDecoderProfile( UINT Index, GUID *pDecoderProfile); HRESULT CheckVideoDecoderFormat( const GUID *pDecoderProfile, DXGI_FORMAT Format, BOOL *pSupported); HRESULT GetVideoDecoderConfigCount( const D3D11_VIDEO_DECODER_DESC *pDesc, UINT *pCount); HRESULT GetVideoDecoderConfig( const D3D11_VIDEO_DECODER_DESC *pDesc, UINT Index, D3D11_VIDEO_DECODER_CONFIG *pConfig); HRESULT GetContentProtectionCaps( const GUID *pCryptoType, const GUID *pDecoderProfile, D3D11_VIDEO_CONTENT_PROTECTION_CAPS *pCaps); HRESULT CheckCryptoKeyExchange( const GUID *pCryptoType, const GUID *pDecoderProfile, UINT Index, GUID *pKeyExchangeType); HRESULT SetPrivateData( REFGUID guid, UINT DataSize, const void *pData); HRESULT SetPrivateDataInterface( REFGUID guid, const IUnknown *pData); } [ object, uuid(61f21c45-3c0e-4a74-9cea-67100d9ad5e4), local, pointer_default(unique) ] interface ID3D11VideoContext : ID3D11DeviceChild { HRESULT GetDecoderBuffer( [in] ID3D11VideoDecoder *decoder, [in] D3D11_VIDEO_DECODER_BUFFER_TYPE type, [out] UINT *buffer_size, [out] void **buffer ); HRESULT ReleaseDecoderBuffer( [in] ID3D11VideoDecoder *decoder, [in] D3D11_VIDEO_DECODER_BUFFER_TYPE type ); HRESULT DecoderBeginFrame( [in] ID3D11VideoDecoder *decoder, [in] ID3D11VideoDecoderOutputView *view, [in] UINT key_size, [in] const void *key ); HRESULT DecoderEndFrame( [in] ID3D11VideoDecoder *decoder ); HRESULT SubmitDecoderBuffers( [in] ID3D11VideoDecoder *decoder, [in] UINT buffers_count, [in] const D3D11_VIDEO_DECODER_BUFFER_DESC *buffer_desc ); HRESULT DecoderExtension( [in] ID3D11VideoDecoder *decoder, [in] const D3D11_VIDEO_DECODER_EXTENSION *extension ); void VideoProcessorSetOutputTargetRect( [in] ID3D11VideoProcessor *processor, [in] BOOL enable, [in] const RECT *rect ); void VideoProcessorSetOutputBackgroundColor( [in] ID3D11VideoProcessor *processor, [in] BOOL y_cb_cr, [in] const D3D11_VIDEO_COLOR *color ); void VideoProcessorSetOutputColorSpace( [in] ID3D11VideoProcessor *processor, [in] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space ); void VideoProcessorSetOutputAlphaFillMode( [in] ID3D11VideoProcessor *processor, [in] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE alpha_fill_mode, [in] UINT stream_idx ); void VideoProcessorSetOutputConstriction( [in] ID3D11VideoProcessor *processor, [in] BOOL enable, [in] SIZE size ); void VideoProcessorSetOutputStereoMode( [in] ID3D11VideoProcessor *processor, [in] BOOL enable ); HRESULT VideoProcessorSetOutputExtension( [in] ID3D11VideoProcessor *processor, [in] const GUID *guid, [in] UINT data_size, [in] void *data ); void VideoProcessorGetOutputTargetRect( [in] ID3D11VideoProcessor *processor, [out] BOOL *enabled, [out] RECT *rect ); void VideoProcessorGetOutputBackgroundColor( [in] ID3D11VideoProcessor *processor, [out] BOOL *y_cb_cr, [out] D3D11_VIDEO_COLOR *color ); void VideoProcessorGetOutputColorSpace( [in] ID3D11VideoProcessor *processor, [out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space ); void VideoProcessorGetOutputAlphaFillMode( [in] ID3D11VideoProcessor *processor, [out] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *alpha_fill_mode, [out] UINT *stream_idx ); void VideoProcessorGetOutputConstriction( [in] ID3D11VideoProcessor *processor, [out] BOOL *enabled, [out] SIZE *size ); void VideoProcessorGetOutputStereoMode( [in] ID3D11VideoProcessor *processor, [out] BOOL *enabled ); HRESULT VideoProcessorGetOutputExtension( [in] ID3D11VideoProcessor *processor, [in] const GUID *guid, [in] UINT data_size, [out] void *data ); void VideoProcessorSetStreamFrameFormat( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] D3D11_VIDEO_FRAME_FORMAT format ); void VideoProcessorSetStreamColorSpace( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space ); void VideoProcessorSetStreamOutputRate( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE rate, [in] BOOL repeat, [in] const DXGI_RATIONAL *custom_rate ); void VideoProcessorSetStreamSourceRect( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] BOOL enable, [in] const RECT *rect ); void VideoProcessorSetStreamDestRect( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] BOOL enable, [in] const RECT *rect ); void VideoProcessorSetStreamAlpha( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] BOOL enable, [in] float alpha ); void VideoProcessorSetStreamPalette( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] UINT entry_count, [in] const UINT *entries ); void VideoProcessorSetStreamPixelAspectRatio( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] BOOL enable, [in] const DXGI_RATIONAL *src_aspect_ratio, [in] const DXGI_RATIONAL *dst_aspect_ratio ); void VideoProcessorSetStreamLumaKey( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] BOOL enable, [in] float lower, [in] float upper ); void VideoProcessorSetStreamStereoFormat( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] BOOL enable, [in] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT format, [in] BOOL left_view_frame0, [in] BOOL base_view_frame0, [in] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE flip_mode, [in] int mono_offset ); void VideoProcessorSetStreamAutoProcessingMode( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] BOOL enable ); void VideoProcessorSetStreamFilter( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] D3D11_VIDEO_PROCESSOR_FILTER filter, [in] BOOL enable, [in] int level ); HRESULT VideoProcessorSetStreamExtension( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] const GUID *guid, [in] UINT data_size, [in] void *data ); void VideoProcessorGetStreamFrameFormat( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] D3D11_VIDEO_FRAME_FORMAT *format ); void VideoProcessorGetStreamColorSpace( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space ); void VideoProcessorGetStreamOutputRate( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *rate, [out] BOOL *repeat, [out] DXGI_RATIONAL *custom_rate ); void VideoProcessorGetStreamSourceRect( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] BOOL *enabled, [out] RECT *rect ); void VideoProcessorGetStreamDestRect( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] BOOL *enabled, [out] RECT *rect ); void VideoProcessorGetStreamAlpha( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] BOOL *enabled, [out] float *alpha ); void VideoProcessorGetStreamPalette( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] UINT entry_count, [out] UINT *entries ); void VideoProcessorGetStreamPixelAspectRatio( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] BOOL *enabled, [out] DXGI_RATIONAL *src_aspect_ratio, [out] DXGI_RATIONAL *dst_aspect_ratio ); void VideoProcessorGetStreamLumaKey( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] BOOL *enabled, [out] float *lower, [out] float *upper ); void VideoProcessorGetStreamStereoFormat( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] BOOL *enabled, [out] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *format, [out] BOOL *left_view_frame0, [out] BOOL *base_view_frame0, [out] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE *flip_mode, [out] int *mono_offset ); void VideoProcessorGetStreamAutoProcessingMode( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] BOOL *enabled ); void VideoProcessorGetStreamFilter( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] D3D11_VIDEO_PROCESSOR_FILTER filter, [out] BOOL *enabled, [out] int *level ); HRESULT VideoProcessorGetStreamExtension( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] const GUID *guid, [in] UINT data_size, [out] void *data ); HRESULT VideoProcessorBlt( [in] ID3D11VideoProcessor *processor, [in] ID3D11VideoProcessorOutputView *view, [in] UINT frame_idx, [in] UINT stream_count, [in] const D3D11_VIDEO_PROCESSOR_STREAM *streams ); HRESULT NegotiateCryptoSessionKeyExchange( [in] ID3D11CryptoSession *session, [in] UINT data_size, [in, out] void *data ); void EncryptionBlt( [in] ID3D11CryptoSession *session, [in] ID3D11Texture2D *src_surface, [in] ID3D11Texture2D *dst_surface, [in] UINT iv_size, [in, out] void *iv ); void DecryptionBlt( [in] ID3D11CryptoSession *session, [in] ID3D11Texture2D *src_surface, [in] ID3D11Texture2D *dst_surface, [in] D3D11_ENCRYPTED_BLOCK_INFO *block_info, [in] UINT key_size, [in] const void *key, [in] UINT iv_size, [in, out] void *iv ); void StartSessionKeyRefresh( [in] ID3D11CryptoSession *session, [in] UINT random_number_size, [out] void *random_number ); void FinishSessionKeyRefresh( [in] ID3D11CryptoSession *session ); HRESULT GetEncryptionBltKey( [in] ID3D11CryptoSession *session, [in] UINT key_size, [out] void *key ); HRESULT NegotiateAuthenticatedChannelKeyExchange( [in] ID3D11AuthenticatedChannel *channel, [in] UINT data_size, [in, out] void *data ); HRESULT QueryAuthenticatedChannel( [in] ID3D11AuthenticatedChannel *channel, [in] UINT input_size, [in] const void *input, [in] UINT output_size, [out] void *output ); HRESULT ConfigureAuthenticatedChannel( [in] ID3D11AuthenticatedChannel *channel, [in] UINT input_size, [in] const void *input, [out] D3D11_AUTHENTICATED_CONFIGURE_OUTPUT *output ); void VideoProcessorSetStreamRotation( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [in] BOOL enable, [in] D3D11_VIDEO_PROCESSOR_ROTATION rotation ); void VideoProcessorGetStreamRotation( [in] ID3D11VideoProcessor *processor, [in] UINT stream_idx, [out] BOOL *enable, [out] D3D11_VIDEO_PROCESSOR_ROTATION *rotation ); } [ object, local, uuid(db6f6ddb-ac77-4e88-8253-819df9bbf140) ] interface ID3D11Device : IUnknown { HRESULT CreateBuffer( [in] const D3D11_BUFFER_DESC *pDesc, [in] const D3D11_SUBRESOURCE_DATA *pInitialData, [out] ID3D11Buffer **ppBuffer); HRESULT CreateTexture1D( [in] const D3D11_TEXTURE1D_DESC *pDesc, [in] const D3D11_SUBRESOURCE_DATA *pInitialData, [out] ID3D11Texture1D **ppTexture1D); HRESULT CreateTexture2D( [in] const D3D11_TEXTURE2D_DESC *pDesc, [in] const D3D11_SUBRESOURCE_DATA *pInitialData, [out] ID3D11Texture2D **ppTexture2D); HRESULT CreateTexture3D( [in] const D3D11_TEXTURE3D_DESC *pDesc, [in] const D3D11_SUBRESOURCE_DATA *pInitialData, [out] ID3D11Texture3D **ppTexture3D); HRESULT CreateShaderResourceView( [in] ID3D11Resource *pResource, [in] const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc, [out] ID3D11ShaderResourceView **ppSRView); HRESULT CreateUnorderedAccessView( [in] ID3D11Resource *pResource, [in] const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc, [out] ID3D11UnorderedAccessView **ppUAView); HRESULT CreateRenderTargetView( [in] ID3D11Resource *pResource, [in] const D3D11_RENDER_TARGET_VIEW_DESC *pDesc, [out] ID3D11RenderTargetView **ppRTView); HRESULT CreateDepthStencilView( [in] ID3D11Resource *pResource, [in] const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc, [out] ID3D11DepthStencilView **ppDepthStencilView); HRESULT CreateInputLayout( [in] const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs, [in] UINT NumElements, [in] const void *pShaderBytecodeWithInputSignature, [in] SIZE_T BytecodeLength, [out] ID3D11InputLayout **ppInputLayout); HRESULT CreateVertexShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [in] ID3D11ClassLinkage *pClassLinkage, [out] ID3D11VertexShader **ppVertexShader); HRESULT CreateGeometryShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [in] ID3D11ClassLinkage *pClassLinkage, [out] ID3D11GeometryShader **ppGeometryShader); HRESULT CreateGeometryShaderWithStreamOutput( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [in] const D3D11_SO_DECLARATION_ENTRY *pSODeclaration, [in] UINT NumEntries, [in] const UINT *pBufferStrides, [in] UINT NumStrides, [in] UINT RasterizedStream, [in] ID3D11ClassLinkage *pClassLinkage, [out] ID3D11GeometryShader **ppGeometryShader); HRESULT CreatePixelShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [in] ID3D11ClassLinkage *pClassLinkage, [out] ID3D11PixelShader **ppPixelShader); HRESULT CreateHullShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [in] ID3D11ClassLinkage *pClassLinkage, [out] ID3D11HullShader **ppHullShader); HRESULT CreateDomainShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [in] ID3D11ClassLinkage *pClassLinkage, [out] ID3D11DomainShader **ppDomainShader); HRESULT CreateComputeShader( [in] const void *pShaderBytecode, [in] SIZE_T BytecodeLength, [in] ID3D11ClassLinkage *pClassLinkage, [out] ID3D11ComputeShader **ppComputeShader); HRESULT CreateClassLinkage( [out] ID3D11ClassLinkage **ppLinkage); HRESULT CreateBlendState( [in] const D3D11_BLEND_DESC *pBlendStateDesc, [out] ID3D11BlendState **ppBlendState); HRESULT CreateDepthStencilState( [in] const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc, [out] ID3D11DepthStencilState **ppDepthStencilState); HRESULT CreateRasterizerState( [in] const D3D11_RASTERIZER_DESC *pRasterizerDesc, [out] ID3D11RasterizerState **ppRasterizerState); HRESULT CreateSamplerState( [in] const D3D11_SAMPLER_DESC *pSamplerDesc, [out] ID3D11SamplerState **ppSamplerState); HRESULT CreateQuery( [in] const D3D11_QUERY_DESC *pQueryDesc, [out] ID3D11Query **ppQuery); HRESULT CreatePredicate( [in] const D3D11_QUERY_DESC *pPredicateDesc, [out] ID3D11Predicate **ppPredicate); HRESULT CreateCounter( [in] const D3D11_COUNTER_DESC *pCounterDesc, [out] ID3D11Counter **ppCounter); HRESULT CreateDeferredContext( UINT ContextFlags, [out] ID3D11DeviceContext **ppDeferredContext); HRESULT OpenSharedResource( [in] HANDLE hResource, [in] REFIID ReturnedInterface, [out] void **ppResource); HRESULT CheckFormatSupport( [in] DXGI_FORMAT Format, [out] UINT *pFormatSupport); HRESULT CheckMultisampleQualityLevels( [in] DXGI_FORMAT Format, [in] UINT SampleCount, [out] UINT *pNumQualityLevels); void CheckCounterInfo( [out] D3D11_COUNTER_INFO *pCounterInfo); HRESULT CheckCounter( [in] const D3D11_COUNTER_DESC *pDesc, [out] D3D11_COUNTER_TYPE *pType, [out] UINT *pActiveCounters, [out] LPSTR szName, [in, out] UINT *pNameLength, [out] LPSTR szUnits, [in, out] UINT *pUnitsLength, [out] LPSTR szDescription, [in, out] UINT *pDescriptionLength); HRESULT CheckFeatureSupport( D3D11_FEATURE Feature, [out] void *pFeatureSupportData, UINT FeatureSupportDataSize); HRESULT GetPrivateData( [in] REFGUID guid, [in, out] UINT *pDataSize, [out] void *pData); HRESULT SetPrivateData( [in] REFGUID guid, [in] UINT DataSize, [in] const void *pData); HRESULT SetPrivateDataInterface( [in] REFGUID guid, [in] const IUnknown *pData); D3D_FEATURE_LEVEL GetFeatureLevel(); UINT GetCreationFlags(); HRESULT GetDeviceRemovedReason(); void GetImmediateContext( [out] ID3D11DeviceContext **ppImmediateContext); HRESULT SetExceptionMode(UINT RaiseFlags); UINT GetExceptionMode(); } typedef enum D3D11_CREATE_DEVICE_FLAG { D3D11_CREATE_DEVICE_SINGLETHREADED = 0x0001, D3D11_CREATE_DEVICE_DEBUG = 0x0002, D3D11_CREATE_DEVICE_SWITCH_TO_REF = 0x0004, D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x0008, D3D11_CREATE_DEVICE_BGRA_SUPPORT = 0x0020, D3D11_CREATE_DEVICE_DEBUGGABLE = 0x0040, D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY = 0x0080, D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT = 0x0100, D3D11_CREATE_DEVICE_VIDEO_SUPPORT = 0x0800 } D3D11_CREATE_DEVICE_FLAG; const UINT D3D11_SDK_VERSION = 7; cpp_quote("#include ") cpp_quote("#ifndef D3D11_IGNORE_SDK_LAYERS") cpp_quote("# include ") cpp_quote("#endif") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") const UINT _FACD3D11 = 0x87c; cpp_quote("#define MAKE_D3D11_HRESULT(code) MAKE_HRESULT(SEVERITY_ERROR, _FACD3D11, code)") cpp_quote("typedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,") cpp_quote(" const D3D_FEATURE_LEVEL*,UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);") cpp_quote("HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,const D3D_FEATURE_LEVEL*," ) cpp_quote(" UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);") cpp_quote("typedef HRESULT (WINAPI *PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,") cpp_quote(" const D3D_FEATURE_LEVEL*,UINT,UINT,const DXGI_SWAP_CHAIN_DESC*,IDXGISwapChain**,ID3D11Device**,") cpp_quote(" D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);") [local] HRESULT __stdcall D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT levels, UINT sdk_version, const DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, ID3D11Device **device, D3D_FEATURE_LEVEL *obtained_feature_level, ID3D11DeviceContext **immediate_context); ================================================ FILE: wine/windows/d3d11_1.idl ================================================ /* * Copyright 2014 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi1_2.idl"; import "d3dcommon.idl"; import "d3d11.idl"; typedef enum D3D11_LOGIC_OP { D3D11_LOGIC_OP_CLEAR = 0, D3D11_LOGIC_OP_SET, D3D11_LOGIC_OP_COPY, D3D11_LOGIC_OP_COPY_INVERTED, D3D11_LOGIC_OP_NOOP, D3D11_LOGIC_OP_INVERT, D3D11_LOGIC_OP_AND, D3D11_LOGIC_OP_NAND, D3D11_LOGIC_OP_OR, D3D11_LOGIC_OP_NOR, D3D11_LOGIC_OP_XOR, D3D11_LOGIC_OP_EQUIV, D3D11_LOGIC_OP_AND_REVERSE, D3D11_LOGIC_OP_AND_INVERTED, D3D11_LOGIC_OP_OR_REVERSE, D3D11_LOGIC_OP_OR_INVERTED } D3D11_LOGIC_OP; typedef enum D3D11_COPY_FLAGS { D3D11_COPY_NO_OVERWRITE = 0x00000001, D3D11_COPY_DISCARD = 0x00000002, } D3D11_COPY_FLAGS; typedef enum D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG { D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED = 0x1, } D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG; typedef enum D3D11_VIDEO_DECODER_CAPS { D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE = 0x01, D3D11_VIDEO_DECODER_CAPS_NON_REAL_TIME = 0x02, D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC = 0x04, D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_REQUIRED = 0x08, D3D11_VIDEO_DECODER_CAPS_UNSUPPORTED = 0x10, } D3D11_VIDEO_DECODER_CAPS; typedef enum D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS { D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_ROTATION = 0x01, D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_RESIZE = 0x02, D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_COLOR_SPACE_CONVERSION = 0x04, D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_TRIPLE_BUFFER_OUTPUT = 0x08, } D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS; typedef enum D3D11_CRYPTO_SESSION_STATUS { D3D11_CRYPTO_SESSION_STATUS_OK = 0x0, D3D11_CRYPTO_SESSION_STATUS_KEY_LOST = 0x1, D3D11_CRYPTO_SESSION_STATUS_KEY_AND_CONTENT_LOST = 0x2, } D3D11_CRYPTO_SESSION_STATUS; typedef struct D3D11_RENDER_TARGET_BLEND_DESC1 { BOOL BlendEnable; BOOL LogicOpEnable; D3D11_BLEND SrcBlend; D3D11_BLEND DestBlend; D3D11_BLEND_OP BlendOp; D3D11_BLEND SrcBlendAlpha; D3D11_BLEND DestBlendAlpha; D3D11_BLEND_OP BlendOpAlpha; D3D11_LOGIC_OP LogicOp; UINT8 RenderTargetWriteMask; } D3D11_RENDER_TARGET_BLEND_DESC1; typedef struct D3D11_BLEND_DESC1 { BOOL AlphaToCoverageEnable; BOOL IndependentBlendEnable; D3D11_RENDER_TARGET_BLEND_DESC1 RenderTarget[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT]; } D3D11_BLEND_DESC1; typedef struct D3D11_RASTERIZER_DESC1 { D3D11_FILL_MODE FillMode; D3D11_CULL_MODE CullMode; BOOL FrontCounterClockwise; INT DepthBias; FLOAT DepthBiasClamp; FLOAT SlopeScaledDepthBias; BOOL DepthClipEnable; BOOL ScissorEnable; BOOL MultisampleEnable; BOOL AntialiasedLineEnable; UINT ForcedSampleCount; } D3D11_RASTERIZER_DESC1; typedef struct D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK { UINT ClearSize; UINT EncryptedSize; } D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK; typedef struct D3D11_VIDEO_DECODER_BUFFER_DESC1 { D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType; UINT DataOffset; UINT DataSize; void *pIV; UINT IVSize; D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK *pSubSampleMappingBlock; UINT SubSampleMappingCount; } D3D11_VIDEO_DECODER_BUFFER_DESC1; typedef struct D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION { ID3D11CryptoSession *pCryptoSession; UINT BlobSize; void *pBlob; GUID *pKeyInfoId; UINT PrivateDataSize; void *pPrivateData; } D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION; typedef struct D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT { BOOL Enable; UINT Width; UINT Height; DXGI_FORMAT Format; } D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT; typedef struct D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA { UINT PrivateDataSize; UINT HWProtectionDataSize; BYTE pbInput[4]; } D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA; typedef struct D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA { UINT PrivateDataSize; UINT MaxHWProtectionDataSize; UINT HWProtectionDataSize; UINT64 TransportTime; UINT64 ExecutionTime; BYTE pbOutput[4]; } D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA; typedef struct D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA { UINT HWProtectionFunctionID; D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA *pInputData; D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA *pOutputData; HRESULT Status; } D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA; typedef struct D3D11_VIDEO_SAMPLE_DESC { UINT Width; UINT Height; DXGI_FORMAT Format; DXGI_COLOR_SPACE_TYPE ColorSpace; } D3D11_VIDEO_SAMPLE_DESC; [ uuid(cc86fabe-da55-401d-85e7-e3c9de2877e9), object, local, pointer_default(unique) ] interface ID3D11BlendState1 : ID3D11BlendState { void GetDesc1(D3D11_BLEND_DESC1 *pDesc); } [ uuid(5c1e0d8a-7c23-48f9-8c59-a92958ceff11), object, local, pointer_default(unique) ] interface ID3DDeviceContextState : ID3D11DeviceChild { } [ uuid(bb2c6faa-b5fb-4082-8e6b-388b8cfa90e1), object, local, pointer_default(unique) ] interface ID3D11DeviceContext1 : ID3D11DeviceContext { void CopySubresourceRegion1( ID3D11Resource *pDstResource, UINT DstSubresource, UINT DstX, UINT DstY, UINT DstZ, ID3D11Resource *pSrcResource, UINT SrcSubresource, const D3D11_BOX *pSrcBox, UINT CopyFlags); void UpdateSubresource1( ID3D11Resource *pDstResource, UINT DstSubresource, const D3D11_BOX *pDstBox, const void *pSrcData, UINT SrcRowPitch, UINT SrcDepthPitch, UINT CopyFlags); void DiscardResource(ID3D11Resource *pResource); void DiscardView(ID3D11View *pResourceView); void VSSetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer *const *ppConstantBuffers, const UINT *pFirstConstant, const UINT *pNumConstants); void HSSetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer *const *ppConstantBuffers, const UINT *pFirstConstant, const UINT *pNumConstants); void DSSetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer *const *ppConstantBuffers, const UINT *pFirstConstant, const UINT *pNumConstants); void GSSetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer *const *ppConstantBuffers, const UINT *pFirstConstant, const UINT *pNumConstants); void PSSetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer *const *ppConstantBuffers, const UINT *pFirstConstant, const UINT *pNumConstants); void CSSetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer *const *ppConstantBuffers, const UINT *pFirstConstant, const UINT *pNumConstants); void VSGetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer **ppConstantBuffers, UINT *pFirstConstant, UINT *pNumConstants); void HSGetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer **ppConstantBuffers, UINT *pFirstConstant, UINT *pNumConstants); void DSGetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer **ppConstantBuffers, UINT *pFirstConstant, UINT *pNumConstants); void GSGetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer **ppConstantBuffers, UINT *pFirstConstant, UINT *pNumConstants); void PSGetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer **ppConstantBuffers, UINT *pFirstConstant, UINT *pNumConstants); void CSGetConstantBuffers1( UINT StartSlot, UINT NumBuffers, ID3D11Buffer **ppConstantBuffers, UINT *pFirstConstant, UINT *pNumConstants); void SwapDeviceContextState( ID3DDeviceContextState *pState, ID3DDeviceContextState **ppPreviousState); void ClearView( ID3D11View *pView, const FLOAT Color[4], const D3D11_RECT *pRect, UINT NumRects); void DiscardView1( ID3D11View *pResourceView, const D3D11_RECT *pRects, UINT NumRects); } [ uuid(a7f026da-a5f8-4487-a564-15e34357651e), object, local, pointer_default(unique) ] interface ID3D11VideoContext1 : ID3D11VideoContext { HRESULT SubmitDecoderBuffers1( ID3D11VideoDecoder *decoder, UINT buffer_count, const D3D11_VIDEO_DECODER_BUFFER_DESC1 *buffer_desc ); HRESULT GetDataForNewHardwareKey( ID3D11CryptoSession *session, UINT input_size, const void *input_data, UINT64 *output_data ); HRESULT CheckCryptoSessionStatus( ID3D11CryptoSession *session, D3D11_CRYPTO_SESSION_STATUS *status ); HRESULT DecoderEnableDownsampling( ID3D11VideoDecoder *decoder, DXGI_COLOR_SPACE_TYPE colour_space, const D3D11_VIDEO_SAMPLE_DESC *output_desc, UINT reference_frame_count ); HRESULT DecoderUpdateDownsampling( ID3D11VideoDecoder *decoder, const D3D11_VIDEO_SAMPLE_DESC *output_desc ); void VideoProcessorSetOutputColorSpace1( ID3D11VideoProcessor *processor, DXGI_COLOR_SPACE_TYPE colour_space ); void VideoProcessorSetOutputShaderUsage( ID3D11VideoProcessor *processor, BOOL shader_usage ); void VideoProcessorGetOutputColorSpace1( ID3D11VideoProcessor *processor, DXGI_COLOR_SPACE_TYPE *colour_space ); void VideoProcessorGetOutputShaderUsage( ID3D11VideoProcessor *processor, BOOL *shader_usage ); void VideoProcessorSetStreamColorSpace1( ID3D11VideoProcessor *processor, UINT stream_index, DXGI_COLOR_SPACE_TYPE colour_space ); void VideoProcessorSetStreamMirror( ID3D11VideoProcessor *processor, UINT stream_index, BOOL enable, BOOL flip_horizontal, BOOL flip_vertical ); void VideoProcessorGetStreamColorSpace1( ID3D11VideoProcessor *processor, UINT stream_index, DXGI_COLOR_SPACE_TYPE *colour_space ); void VideoProcessorGetStreamMirror( ID3D11VideoProcessor *processor, UINT stream_index, BOOL *enable, BOOL *flip_horizontal, BOOL *flip_vertical ); HRESULT VideoProcessorGetBehaviorHints( ID3D11VideoProcessor *processor, UINT output_width, UINT output_height, DXGI_FORMAT output_format, UINT stream_count, const D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT *streams, UINT *behaviour_hints ); } [ uuid(29da1d51-1321-4454-804b-f5fc9f861f0f), object, local, pointer_default(unique) ] interface ID3D11VideoDevice1 : ID3D11VideoDevice { HRESULT GetCryptoSessionPrivateDataSize( const GUID *crypto_type, const GUID *decoder_profile, const GUID *key_exchange_type, UINT *input_size, UINT *output_size ); HRESULT GetVideoDecoderCaps( const GUID *decoder_profile, UINT sample_width, UINT sample_height, const DXGI_RATIONAL *framerate, UINT bitrate, const GUID *crypto_type, UINT *decoder_caps ); HRESULT CheckVideoDecoderDownsampling( const D3D11_VIDEO_DECODER_DESC *input_desc, DXGI_COLOR_SPACE_TYPE input_colour_space, const D3D11_VIDEO_DECODER_CONFIG *input_config, const DXGI_RATIONAL *framerate, const D3D11_VIDEO_SAMPLE_DESC *output_desc, BOOL *supported, BOOL *real_time_hint ); HRESULT RecommendVideoDecoderDownsampleParameters( const D3D11_VIDEO_DECODER_DESC *input_desc, DXGI_COLOR_SPACE_TYPE input_colour_space, const D3D11_VIDEO_DECODER_CONFIG *input_config, const DXGI_RATIONAL *framerate, D3D11_VIDEO_SAMPLE_DESC *recommended_output_desc ); } [ uuid(465217f2-5568-43cf-b5b9-f61d54531ca1), object, local, pointer_default(unique) ] interface ID3D11VideoProcessorEnumerator1 : ID3D11VideoProcessorEnumerator { HRESULT CheckVideoProcessorFormatConversion( DXGI_FORMAT input_format, DXGI_COLOR_SPACE_TYPE input_colour_space, DXGI_FORMAT output_format, DXGI_COLOR_SPACE_TYPE output_colour_space, BOOL *supported ); } [ uuid(b2daad8b-03d4-4dbf-95eb-32ab4b63d0ab), object, local, pointer_default(unique) ] interface ID3DUserDefinedAnnotation : IUnknown { INT BeginEvent(LPCWSTR Name); INT EndEvent(); void SetMarker(LPCWSTR Name); BOOL GetStatus(); } [ uuid(1217d7a6-5039-418c-b042-9cbe256afd6e), object, local, pointer_default(unique) ] interface ID3D11RasterizerState1 : ID3D11RasterizerState { void GetDesc1(D3D11_RASTERIZER_DESC1 *pDesc); } [ uuid(a04bfb29-08ef-43d6-a49c-a9bdbdcbe686), object, local, pointer_default(unique) ] interface ID3D11Device1 : ID3D11Device { void GetImmediateContext1( ID3D11DeviceContext1 **ppImmediateContext); HRESULT CreateDeferredContext1( UINT ContextFlags, ID3D11DeviceContext1 **ppDeferredContext); HRESULT CreateBlendState1( const D3D11_BLEND_DESC1 *pBlendStateDesc, ID3D11BlendState1 **ppBlendState); HRESULT CreateRasterizerState1( const D3D11_RASTERIZER_DESC1 *pRasterizerDesc, ID3D11RasterizerState1 **ppRasterizerState); HRESULT CreateDeviceContextState( UINT Flags, const D3D_FEATURE_LEVEL *pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, REFIID EmulatedInterface, D3D_FEATURE_LEVEL *pChosenFeatureLevel, ID3DDeviceContextState **ppContextState); HRESULT OpenSharedResource1( HANDLE hResource, REFIID returnedInterface, void **ppResource); HRESULT OpenSharedResourceByName( LPCWSTR lpName, DWORD dwDesiredAccess, REFIID returnedInterface, void **ppResource); } ================================================ FILE: wine/windows/d3d11_2.idl ================================================ /* * Copyright 2017 Ihsan Akmal * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi1_3.idl"; import "d3dcommon.idl"; import "d3d11_1.idl"; const UINT D3D11_PACKED_TILE = 0xffffffff; typedef enum D3D11_TILE_MAPPING_FLAG { D3D11_TILE_MAPPING_NO_OVERWRITE = 0x1, } D3D11_TILE_MAPPING_FLAG; typedef enum D3D11_TILE_RANGE_FLAG { D3D11_TILE_RANGE_NULL = 0x1, D3D11_TILE_RANGE_SKIP = 0x2, D3D11_TILE_RANGE_REUSE_SINGLE_TILE = 0x4, } D3D11_TILE_RANGE_FLAG; typedef enum D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG { D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE = 0x1, } D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG; typedef enum D3D11_TILE_COPY_FLAG { D3D11_TILE_COPY_NO_OVERWRITE = 0x1, D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2, D3D11_TILE_COPY_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4, } D3D11_TILE_COPY_FLAG; typedef struct D3D11_TILED_RESOURCE_COORDINATE { UINT X; UINT Y; UINT Z; UINT Subresource; } D3D11_TILED_RESOURCE_COORDINATE; typedef struct D3D11_TILE_REGION_SIZE { UINT NumTiles; BOOL bUseBox; UINT Width; UINT16 Height; UINT16 Depth; } D3D11_TILE_REGION_SIZE; typedef struct D3D11_SUBRESOURCE_TILING { UINT WidthInTiles; UINT16 HeightInTiles; UINT16 DepthInTiles; UINT StartTileIndexInOverallResource; } D3D11_SUBRESOURCE_TILING; typedef struct D3D11_TILE_SHAPE { UINT WidthInTexels; UINT HeightInTexels; UINT DepthInTexels; } D3D11_TILE_SHAPE; typedef struct D3D11_PACKED_MIP_DESC { UINT8 NumStandardMips; UINT8 NumPackedMips; UINT NumTilesForPackedMips; UINT StartTileIndexInOverallResource; } D3D11_PACKED_MIP_DESC; [ uuid(420d5b32-b90c-4da4-bef0-359f6a24a83a), object, local, pointer_default(unique) ] interface ID3D11DeviceContext2 : ID3D11DeviceContext1 { HRESULT UpdateTileMappings( ID3D11Resource *resource, UINT region_count, const D3D11_TILED_RESOURCE_COORDINATE *region_start_coordinates, const D3D11_TILE_REGION_SIZE *region_sizes, ID3D11Buffer *pool, UINT range_count, const UINT *range_flags, const UINT *pool_start_offsets, const UINT *range_tile_counts, UINT flags ); HRESULT CopyTileMappings( ID3D11Resource *dst_resource, const D3D11_TILED_RESOURCE_COORDINATE *dst_start_coordinate, ID3D11Resource *src_resource, const D3D11_TILED_RESOURCE_COORDINATE *src_start_coordinate, const D3D11_TILE_REGION_SIZE *region_size, UINT flags ); void CopyTiles( ID3D11Resource *resource, const D3D11_TILED_RESOURCE_COORDINATE *start_coordinate, const D3D11_TILE_REGION_SIZE *size, ID3D11Buffer *buffer, UINT64 start_offset, UINT flags ); void UpdateTiles( ID3D11Resource *dst_resource, const D3D11_TILED_RESOURCE_COORDINATE *dst_start_coordinate, const D3D11_TILE_REGION_SIZE *dst_region_size, const void *src_data, UINT flags ); HRESULT ResizeTilePool( ID3D11Buffer *pool, UINT64 size ); void TiledResourceBarrier( ID3D11DeviceChild *before_barrier, ID3D11DeviceChild *after_barrier ); BOOL IsAnnotationEnabled(); void SetMarkerInt(const WCHAR *label, int data); void BeginEventInt(const WCHAR *label, int data); void EndEvent(); } [ uuid(9d06dffa-d1e5-4d07-83a8-1bb123f2f841), object, local, pointer_default(unique) ] interface ID3D11Device2 : ID3D11Device1 { void GetImmediateContext2(ID3D11DeviceContext2 **context); HRESULT CreateDeferredContext2(UINT flags, ID3D11DeviceContext2 **context); void GetResourceTiling( ID3D11Resource *resource, UINT *tile_count, D3D11_PACKED_MIP_DESC *mip_desc, D3D11_TILE_SHAPE *tile_shape, UINT *subresource_tiling_count, UINT first_subresource_tiling, D3D11_SUBRESOURCE_TILING *subresource_tiling ); HRESULT CheckMultisampleQualityLevels1( DXGI_FORMAT format, UINT sample_count, UINT flags, UINT *quality_level_count ); } ================================================ FILE: wine/windows/d3d11_3.idl ================================================ /* * Copyright 2017 Ihsan Akmal * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi1_3.idl"; import "d3dcommon.idl"; import "d3d11_2.idl"; typedef enum D3D11_CONTEXT_TYPE { D3D11_CONTEXT_TYPE_ALL = 0x0, D3D11_CONTEXT_TYPE_3D = 0x1, D3D11_CONTEXT_TYPE_COMPUTE = 0x2, D3D11_CONTEXT_TYPE_COPY = 0x3, D3D11_CONTEXT_TYPE_VIDEO = 0x4, } D3D11_CONTEXT_TYPE; typedef enum D3D11_TEXTURE_LAYOUT { D3D11_TEXTURE_LAYOUT_UNDEFINED = 0x0, D3D11_TEXTURE_LAYOUT_ROW_MAJOR = 0x1, D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE = 0x2, } D3D11_TEXTURE_LAYOUT; typedef enum D3D11_CONSERVATIVE_RASTERIZATION_MODE { D3D11_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0x0, D3D11_CONSERVATIVE_RASTERIZATION_MODE_ON = 0x1, } D3D11_CONSERVATIVE_RASTERIZATION_MODE; typedef enum D3D11_FENCE_FLAG { D3D11_FENCE_FLAG_NONE = 0x1, D3D11_FENCE_FLAG_SHARED = 0x2, D3D11_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x4, } D3D11_FENCE_FLAG; typedef struct D3D11_TEXTURE2D_DESC1 { UINT Width; UINT Height; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; D3D11_TEXTURE_LAYOUT TextureLayout; } D3D11_TEXTURE2D_DESC1; typedef struct D3D11_TEXTURE3D_DESC1 { UINT Width; UINT Height; UINT Depth; UINT MipLevels; DXGI_FORMAT Format; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; D3D11_TEXTURE_LAYOUT TextureLayout; } D3D11_TEXTURE3D_DESC1; typedef struct D3D11_RASTERIZER_DESC2 { D3D11_FILL_MODE FillMode; D3D11_CULL_MODE CullMode; BOOL FrontCounterClockwise; int DepthBias; float DepthBiasClamp; float SlopeScaledDepthBias; BOOL DepthClipEnable; BOOL ScissorEnable; BOOL MultisampleEnable; BOOL AntialiasedLineEnable; UINT ForcedSampleCount; D3D11_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster; } D3D11_RASTERIZER_DESC2; typedef struct D3D11_TEX2D_SRV1 { UINT MostDetailedMip; UINT MipLevels; UINT PlaneSlice; } D3D11_TEX2D_SRV1; typedef struct D3D11_TEX2D_ARRAY_SRV1 { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; UINT PlaneSlice; } D3D11_TEX2D_ARRAY_SRV1; typedef struct D3D11_SHADER_RESOURCE_VIEW_DESC1 { DXGI_FORMAT Format; D3D11_SRV_DIMENSION ViewDimension; union { D3D11_BUFFER_SRV Buffer; D3D11_TEX1D_SRV Texture1D; D3D11_TEX1D_ARRAY_SRV Texture1DArray; D3D11_TEX2D_SRV1 Texture2D; D3D11_TEX2D_ARRAY_SRV1 Texture2DArray; D3D11_TEX2DMS_SRV Texture2DMS; D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray; D3D11_TEX3D_SRV Texture3D; D3D11_TEXCUBE_SRV TextureCube; D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray; D3D11_BUFFEREX_SRV BufferEx; }; } D3D11_SHADER_RESOURCE_VIEW_DESC1; typedef struct D3D11_TEX2D_RTV1 { UINT MipSlice; UINT PlaneSlice; } D3D11_TEX2D_RTV1; typedef struct D3D11_TEX2D_ARRAY_RTV1 { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; UINT PlaneSlice; } D3D11_TEX2D_ARRAY_RTV1; typedef struct D3D11_RENDER_TARGET_VIEW_DESC1 { DXGI_FORMAT Format; D3D11_RTV_DIMENSION ViewDimension; union { D3D11_BUFFER_RTV Buffer; D3D11_TEX1D_RTV Texture1D; D3D11_TEX1D_ARRAY_RTV Texture1DArray; D3D11_TEX2D_RTV1 Texture2D; D3D11_TEX2D_ARRAY_RTV1 Texture2DArray; D3D11_TEX2DMS_RTV Texture2DMS; D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray; D3D11_TEX3D_RTV Texture3D; }; } D3D11_RENDER_TARGET_VIEW_DESC1; typedef struct D3D11_TEX2D_UAV1 { UINT MipSlice; UINT PlaneSlice; } D3D11_TEX2D_UAV1; typedef struct D3D11_TEX2D_ARRAY_UAV1 { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; UINT PlaneSlice; } D3D11_TEX2D_ARRAY_UAV1; typedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC1 { DXGI_FORMAT Format; D3D11_UAV_DIMENSION ViewDimension; union { D3D11_BUFFER_UAV Buffer; D3D11_TEX1D_UAV Texture1D; D3D11_TEX1D_ARRAY_UAV Texture1DArray; D3D11_TEX2D_UAV1 Texture2D; D3D11_TEX2D_ARRAY_UAV1 Texture2DArray; D3D11_TEX3D_UAV Texture3D; }; } D3D11_UNORDERED_ACCESS_VIEW_DESC1; typedef struct D3D11_QUERY_DESC1 { D3D11_QUERY Query; UINT MiscFlags; D3D11_CONTEXT_TYPE ContextType; } D3D11_QUERY_DESC1; [ uuid(51218251-1e33-4617-9ccb-4d3a4367e7bb), object, local, pointer_default(unique) ] interface ID3D11Texture2D1 : ID3D11Texture2D { void GetDesc1(D3D11_TEXTURE2D_DESC1 *desc); } [ uuid(0c711683-2853-4846-9bb0-f3e60639e46a), object, local, pointer_default(unique) ] interface ID3D11Texture3D1 : ID3D11Texture3D { void GetDesc1(D3D11_TEXTURE3D_DESC1 *desc); } [ uuid(6fbd02fb-209f-46c4-b059-2ed15586a6ac), object, local, pointer_default(unique) ] interface ID3D11RasterizerState2 : ID3D11RasterizerState1 { void GetDesc2(D3D11_RASTERIZER_DESC2 *desc); } [ uuid(91308b87-9040-411d-8c67-c39253ce3802), object, local, pointer_default(unique) ] interface ID3D11ShaderResourceView1 : ID3D11ShaderResourceView { void GetDesc1(D3D11_SHADER_RESOURCE_VIEW_DESC1 *desc); } [ uuid(ffbe2e23-f011-418a-ac56-5ceed7c5b94b), object, local, pointer_default(unique) ] interface ID3D11RenderTargetView1 : ID3D11RenderTargetView { void GetDesc1(D3D11_RENDER_TARGET_VIEW_DESC1 *desc); } [ uuid(7b3b6153-a886-4544-ab37-6537c8500403), object, local, pointer_default(unique) ] interface ID3D11UnorderedAccessView1 : ID3D11UnorderedAccessView { void GetDesc1(D3D11_UNORDERED_ACCESS_VIEW_DESC1 *desc); } [ uuid(631b4766-36dc-461d-8db6-c47e13e60916), object, local, pointer_default(unique) ] interface ID3D11Query1 : ID3D11Query { void GetDesc1(D3D11_QUERY_DESC1 *desc); } [ uuid(b4e3c01d-e79e-4637-91b2-510e9f4c9b8f), object, local, pointer_default(unique) ] interface ID3D11DeviceContext3 : ID3D11DeviceContext2 { void Flush1(D3D11_CONTEXT_TYPE type, HANDLE event); void SetHardwareProtectionState(BOOL enable); void GetHardwareProtectionState(BOOL *enable); } [ uuid(affde9d1-1df7-4bb7-8a34-0f46251dab80), object, local, pointer_default(unique) ] interface ID3D11Fence : ID3D11DeviceChild { HRESULT CreateSharedHandle( const SECURITY_ATTRIBUTES *attributes, DWORD access, const WCHAR *name, HANDLE *handle ); UINT64 GetCompletedValue(); HRESULT SetEventOnCompletion( UINT64 value, HANDLE event ); } [ uuid(917600da-f58c-4c33-98d8-3e15b390fa24), object, local, pointer_default(unique) ] interface ID3D11DeviceContext4 : ID3D11DeviceContext3 { HRESULT Signal(ID3D11Fence *fence, UINT64 value); HRESULT Wait(ID3D11Fence *fence, UINT64 value); } [ uuid(a05c8c37-d2c6-4732-b3a0-9ce0b0dc9ae6), object, local, pointer_default(unique) ] interface ID3D11Device3 : ID3D11Device2 { HRESULT CreateTexture2D1( const D3D11_TEXTURE2D_DESC1 *desc, const D3D11_SUBRESOURCE_DATA *initial_data, ID3D11Texture2D1 **texture ); HRESULT CreateTexture3D1( const D3D11_TEXTURE3D_DESC1 *desc, const D3D11_SUBRESOURCE_DATA *initial_data, ID3D11Texture3D1 **texture ); HRESULT CreateRasterizerState2( const D3D11_RASTERIZER_DESC2 *desc, ID3D11RasterizerState2 **state ); HRESULT CreateShaderResourceView1( ID3D11Resource *resource, const D3D11_SHADER_RESOURCE_VIEW_DESC1 *desc, ID3D11ShaderResourceView1 **view ); HRESULT CreateUnorderedAccessView1( ID3D11Resource *resource, const D3D11_UNORDERED_ACCESS_VIEW_DESC1 *desc, ID3D11UnorderedAccessView1 **view ); HRESULT CreateRenderTargetView1( ID3D11Resource *resource, const D3D11_RENDER_TARGET_VIEW_DESC1 *desc, ID3D11RenderTargetView1 **view ); HRESULT CreateQuery1(const D3D11_QUERY_DESC1 *desc, ID3D11Query1 **query); void GetImmediateContext3(ID3D11DeviceContext3 **context); HRESULT CreateDeferredContext3(UINT flags, ID3D11DeviceContext3 **context); void WriteToSubresource( ID3D11Resource *dst_resource, UINT dst_subresource, const D3D11_BOX *dst_box, const void *src_data, UINT src_row_pitch, UINT src_depth_pitch ); void ReadFromSubresource( void *dst_data, UINT dst_row_pitch, UINT dst_depth_pitch, ID3D11Resource *src_resource, UINT src_subresource, const D3D11_BOX *src_box ); } ================================================ FILE: wine/windows/d3d11_4.idl ================================================ /* * Copyright 2017 Ihsan Akmal * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi1_5.idl"; import "d3dcommon.idl"; import "d3d11_3.idl"; typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS4 { BOOL ExtendedNV12SharedTextureSupported; } D3D11_FEATURE_DATA_D3D11_OPTIONS4; [ uuid(8992ab71-02e6-4b8d-ba48-b056dcda42c4), object, local, pointer_default(unique) ] interface ID3D11Device4 : ID3D11Device3 { HRESULT RegisterDeviceRemovedEvent( [in] HANDLE event, [out] DWORD *cookie ); void UnregisterDeviceRemoved( [in] DWORD cookie ); } [ uuid(8ffde202-a0e7-45df-9e01-e837801b5ea0), object, local, pointer_default(unique) ] interface ID3D11Device5 : ID3D11Device4 { HRESULT OpenSharedFence( [in] HANDLE handle, [in] REFIID iid, [out] void **fence ); HRESULT CreateFence( [in] UINT64 initial_value, [in] D3D11_FENCE_FLAG flags, [in] REFIID iid, [out] void **fence ); } [ uuid(9b7e4e00-342c-4106-a19f-4f2704f689f0), object, local, pointer_default(unique) ] interface ID3D11Multithread : IUnknown { void Enter(); void Leave(); BOOL SetMultithreadProtected( [in] BOOL enable ); BOOL GetMultithreadProtected(); } [ uuid(c4e7374c-6243-4d1b-ae87-52b4f740e261), object, local, pointer_default(unique) ] interface ID3D11VideoContext2 : ID3D11VideoContext1 { void VideoProcessorSetOutputHDRMetaData( [in] ID3D11VideoProcessor *processor, [in] DXGI_HDR_METADATA_TYPE type, [in] UINT size, [in] const void *meta_data ); void VideoProcessorGetOutputHDRMetaData( [in] ID3D11VideoProcessor *processor, [out] DXGI_HDR_METADATA_TYPE *type, [in] UINT size, [out] void *meta_data ); void VideoProcessorSetStreamHDRMetaData( [in] ID3D11VideoProcessor *processor, [in] UINT stream_index, [in] DXGI_HDR_METADATA_TYPE type, [in] UINT size, [in] const void *meta_data ); void VideoProcessorGetStreamHDRMetaData( [in] ID3D11VideoProcessor *processor, [in] UINT stream_index, [out] DXGI_HDR_METADATA_TYPE *type, [in] UINT size, [out] void *meta_data ); } ================================================ FILE: wine/windows/d3d11on12.idl ================================================ /* * Copyright 2018 Józef Kucia * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "d3d11.idl"; import "d3d12.idl"; typedef struct D3D11_RESOURCE_FLAGS { UINT BindFlags; UINT MiscFlags; UINT CPUAccessFlags; UINT StructureByteStride; } D3D11_RESOURCE_FLAGS; [ uuid(85611e73-70a9-490e-9614-a9e302777904), object, local, pointer_default(unique) ] interface ID3D11On12Device : IUnknown { HRESULT CreateWrappedResource(IUnknown *d3d12_resource, const D3D11_RESOURCE_FLAGS *flags, D3D12_RESOURCE_STATES input_state, D3D12_RESOURCE_STATES output_state, REFIID iid, void **d3d11_resource); void ReleaseWrappedResources(ID3D11Resource * const *resources, UINT count); void AcquireWrappedResources(ID3D11Resource * const *resources, UINT count); } [local] HRESULT __stdcall D3D11On12CreateDevice(IUnknown *device, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT feature_level_count, IUnknown * const *queues, UINT queue_count, UINT node_mask, ID3D11Device **d3d11_device, ID3D11DeviceContext **d3d11_immediate_context, D3D_FEATURE_LEVEL *obtained_feature_level); typedef HRESULT (__stdcall *PFN_D3D11ON12_CREATE_DEVICE)(IUnknown *device, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT feature_level_count, IUnknown * const *queues, UINT queue_count, UINT node_mask, ID3D11Device **d3d11_device, ID3D11DeviceContext **d3d11_immediate_context, D3D_FEATURE_LEVEL *obtained_feature_level); ================================================ FILE: wine/windows/d3d11sdklayers.idl ================================================ /* * Copyright 2013 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "d3d11.idl"; typedef enum D3D11_MESSAGE_CATEGORY { D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED, D3D11_MESSAGE_CATEGORY_MISCELLANEOUS, D3D11_MESSAGE_CATEGORY_INITIALIZATION, D3D11_MESSAGE_CATEGORY_CLEANUP, D3D11_MESSAGE_CATEGORY_COMPILATION, D3D11_MESSAGE_CATEGORY_STATE_CREATION, D3D11_MESSAGE_CATEGORY_STATE_SETTING, D3D11_MESSAGE_CATEGORY_STATE_GETTING, D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION, D3D11_MESSAGE_CATEGORY_EXECUTION, D3D11_MESSAGE_CATEGORY_SHADER } D3D11_MESSAGE_CATEGORY; typedef enum D3D11_MESSAGE_SEVERITY { D3D11_MESSAGE_SEVERITY_CORRUPTION, D3D11_MESSAGE_SEVERITY_ERROR, D3D11_MESSAGE_SEVERITY_WARNING, D3D11_MESSAGE_SEVERITY_INFO, D3D11_MESSAGE_SEVERITY_MESSAGE } D3D11_MESSAGE_SEVERITY; typedef enum D3D11_MESSAGE_ID { D3D11_MESSAGE_ID_UNKNOWN = 0, D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD, D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD, D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD, D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD, D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD, D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD, D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD, D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD, D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD, D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD, D3D11_MESSAGE_ID_STRING_FROM_APPLICATION, D3D11_MESSAGE_ID_CORRUPTED_THIS, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14, D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15, D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING, D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY, D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA, D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA, D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN, D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS, D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS, D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES, D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE, D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS, D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS, D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS, D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION, D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT, D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT, D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES, D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE, D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA, D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS, D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC, D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION, D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT, D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT, D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES, D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE, D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA, D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS, D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC, D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION, D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT, D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT, D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES, D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE, D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA, D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS, D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS, D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC, D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC, D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE, D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE, D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE, D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC, D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND, D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND, D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP, D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA, D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA, D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA, D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK, D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS, D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC, D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY, D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS, D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG, D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC, D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED, D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED, D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE, D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID, D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE, D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED, D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED, D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT, D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR, D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH, D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH, D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID, D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY, D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY, D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID, D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE, D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE, D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX, D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE, D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE, D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE, D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE, D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE, D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE, D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE, D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX, D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE, D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID, D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID, D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID, D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID, D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID, D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE, D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS, D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED, D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN, D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED, D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE, D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE, D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS, D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED, D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN, D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE, D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED, D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE, D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE, D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS, D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED, D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN, D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE, D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED, D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE, D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE, D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS, D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED, D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN, D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE, D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED, D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED, D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED, D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS, D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN, D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN, D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE, D3D11_MESSAGE_ID_REF_THREADING_MODE, D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION, D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION, D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION, D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE, D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER, D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY, D3D11_MESSAGE_ID_REF_INFO, D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW, D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW, D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW, D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW, D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW, D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW, D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET, D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND, D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX, D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE, D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK, D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE, D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS, D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL, D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH, D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL, D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL, D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID, D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL, D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT, D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED, D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY, D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED, D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED, D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED, D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED, D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE, D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER, D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING, D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0, D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT, D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT, D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT, D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN, D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN, D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC, D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH, D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW, D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH, D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY, D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY, D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER, D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED, D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER, D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN, D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC, D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER, D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER, D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE, D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED, D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION, D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE, D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS, D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION, D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS, D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN, D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE, D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS, D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL, D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN, D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE, D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT, D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH, D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY, D3D11_MESSAGE_ID_LIVE_BUFFER, D3D11_MESSAGE_ID_LIVE_TEXTURE1D, D3D11_MESSAGE_ID_LIVE_TEXTURE2D, D3D11_MESSAGE_ID_LIVE_TEXTURE3D, D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW, D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW, D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW, D3D11_MESSAGE_ID_LIVE_VERTEXSHADER, D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER, D3D11_MESSAGE_ID_LIVE_PIXELSHADER, D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT, D3D11_MESSAGE_ID_LIVE_SAMPLER, D3D11_MESSAGE_ID_LIVE_BLENDSTATE, D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE, D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE, D3D11_MESSAGE_ID_LIVE_QUERY, D3D11_MESSAGE_ID_LIVE_PREDICATE, D3D11_MESSAGE_ID_LIVE_COUNTER, D3D11_MESSAGE_ID_LIVE_DEVICE, D3D11_MESSAGE_ID_LIVE_SWAPCHAIN, D3D11_MESSAGE_ID_D3D10_MESSAGES_END, D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x00100000, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE, D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED, D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS, D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS, D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS, D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND, D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D, D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE, D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE, D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS, D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS, D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX, D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS, D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS, D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY, D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK, D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK, D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT, D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE, D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES, D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET, D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER, D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE, D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE, D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE, D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS, D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT, D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS, D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES, D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED, D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED, D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED, D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED, D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED, D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND, D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND, D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE, D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED, D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3, D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED, D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO, D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION, D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED, D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR, D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA, D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP, D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED, D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT, D3D11_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES, D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END, D3D11_MESSAGE_ID_D3D11_MESSAGES_START = 0x00200000, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS, D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE, D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE, D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS, D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED, D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN, D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT, D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES, D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES, D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD, D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD, D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL, D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE, D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE, D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE, D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD, D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD, D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL, D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE, D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE, D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE, D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH, D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT, D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER, D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED, D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW, D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE, D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE, D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS, D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED, D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN, D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD, D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE, D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED, D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS, D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH, D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH, D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH, D3D11_MESSAGE_ID_CREATE_CONTEXT, D3D11_MESSAGE_ID_LIVE_CONTEXT, D3D11_MESSAGE_ID_DESTROY_CONTEXT, D3D11_MESSAGE_ID_CREATE_BUFFER, D3D11_MESSAGE_ID_LIVE_BUFFER_WIN7, D3D11_MESSAGE_ID_DESTROY_BUFFER, D3D11_MESSAGE_ID_CREATE_TEXTURE1D, D3D11_MESSAGE_ID_LIVE_TEXTURE1D_WIN7, D3D11_MESSAGE_ID_DESTROY_TEXTURE1D, D3D11_MESSAGE_ID_CREATE_TEXTURE2D, D3D11_MESSAGE_ID_LIVE_TEXTURE2D_WIN7, D3D11_MESSAGE_ID_DESTROY_TEXTURE2D, D3D11_MESSAGE_ID_CREATE_TEXTURE3D, D3D11_MESSAGE_ID_LIVE_TEXTURE3D_WIN7, D3D11_MESSAGE_ID_DESTROY_TEXTURE3D, D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW, D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW_WIN7, D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW, D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW, D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW_WIN7, D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW, D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW, D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW_WIN7, D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW, D3D11_MESSAGE_ID_CREATE_VERTEXSHADER, D3D11_MESSAGE_ID_LIVE_VERTEXSHADER_WIN7, D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER, D3D11_MESSAGE_ID_CREATE_HULLSHADER, D3D11_MESSAGE_ID_LIVE_HULLSHADER, D3D11_MESSAGE_ID_DESTROY_HULLSHADER, D3D11_MESSAGE_ID_CREATE_DOMAINSHADER, D3D11_MESSAGE_ID_LIVE_DOMAINSHADER, D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER, D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER, D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER_WIN7, D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER, D3D11_MESSAGE_ID_CREATE_PIXELSHADER, D3D11_MESSAGE_ID_LIVE_PIXELSHADER_WIN7, D3D11_MESSAGE_ID_DESTROY_PIXELSHADER, D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT, D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT_WIN7, D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT, D3D11_MESSAGE_ID_CREATE_SAMPLER, D3D11_MESSAGE_ID_LIVE_SAMPLER_WIN7, D3D11_MESSAGE_ID_DESTROY_SAMPLER, D3D11_MESSAGE_ID_CREATE_BLENDSTATE, D3D11_MESSAGE_ID_LIVE_BLENDSTATE_WIN7, D3D11_MESSAGE_ID_DESTROY_BLENDSTATE, D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE, D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE_WIN7, D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE, D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE, D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE_WIN7, D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE, D3D11_MESSAGE_ID_CREATE_QUERY, D3D11_MESSAGE_ID_LIVE_QUERY_WIN7, D3D11_MESSAGE_ID_DESTROY_QUERY, D3D11_MESSAGE_ID_CREATE_PREDICATE, D3D11_MESSAGE_ID_LIVE_PREDICATE_WIN7, D3D11_MESSAGE_ID_DESTROY_PREDICATE, D3D11_MESSAGE_ID_CREATE_COUNTER, D3D11_MESSAGE_ID_DESTROY_COUNTER, D3D11_MESSAGE_ID_CREATE_COMMANDLIST, D3D11_MESSAGE_ID_LIVE_COMMANDLIST, D3D11_MESSAGE_ID_DESTROY_COMMANDLIST, D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE, D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE, D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE, D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE, D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE, D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE, D3D11_MESSAGE_ID_LIVE_DEVICE_WIN7, D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY_WIN7, D3D11_MESSAGE_ID_CREATE_COMPUTESHADER, D3D11_MESSAGE_ID_LIVE_COMPUTESHADER, D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER, D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW, D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW, D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW, D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL, D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH, D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE, D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX, D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE, D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA, D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA, D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS, D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL, D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE, D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE, D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN, D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD, D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD, D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL, D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY, D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE, D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE, D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE, D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER, D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY, D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY, D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED, D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT, D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD, D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS, D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP, D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS, D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD, D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH, D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY, D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS, D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS, D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER, D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED, D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW, D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT, D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE, D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD, D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT, D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE, D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY, D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY, D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED, D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW, D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO, D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH, D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED, D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET, D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET, D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE, D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE, D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED, D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW, D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET, D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS, D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED, D3D11_MESSAGE_ID_REF_WARNING, D3D11_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV, D3D11_MESSAGE_ID_SHADER_ABORT, D3D11_MESSAGE_ID_SHADER_MESSAGE, D3D11_MESSAGE_ID_SHADER_ERROR, D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE, D3D11_MESSAGE_ID_HSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_DSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_CSSETSAMPLERS_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_HSSETSHADER_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_DSSETSHADER_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_CSSETSHADER_UNBINDDELETINGOBJECT, D3D11_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN, D3D11_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN, D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NUMUAVS_INVALIDRANGE, D3D11_MESSAGE_ID_D3D11_MESSAGES_END, D3D11_MESSAGE_ID_D3D11_1_MESSAGES_START = 0x00300000, D3D11_MESSAGE_ID_CREATE_VIDEODECODER, D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSORENUM, D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSOR, D3D11_MESSAGE_ID_CREATE_DECODEROUTPUTVIEW, D3D11_MESSAGE_ID_CREATE_PROCESSORINPUTVIEW, D3D11_MESSAGE_ID_CREATE_PROCESSOROUTPUTVIEW, D3D11_MESSAGE_ID_CREATE_DEVICECONTEXTSTATE, D3D11_MESSAGE_ID_LIVE_VIDEODECODER, D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSORENUM, D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSOR, D3D11_MESSAGE_ID_LIVE_DECODEROUTPUTVIEW, D3D11_MESSAGE_ID_LIVE_PROCESSORINPUTVIEW, D3D11_MESSAGE_ID_LIVE_PROCESSOROUTPUTVIEW, D3D11_MESSAGE_ID_LIVE_DEVICECONTEXTSTATE, D3D11_MESSAGE_ID_DESTROY_VIDEODECODER, D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSORENUM, D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSOR, D3D11_MESSAGE_ID_DESTROY_DECODEROUTPUTVIEW, D3D11_MESSAGE_ID_DESTROY_PROCESSORINPUTVIEW, D3D11_MESSAGE_ID_DESTROY_PROCESSOROUTPUTVIEW, D3D11_MESSAGE_ID_DESTROY_DEVICECONTEXTSTATE, D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFLAGS, D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFEATURELEVEL, D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_FEATURELEVELS_NOT_SUPPORTED, D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDREFIID, D3D11_MESSAGE_ID_DEVICE_DISCARDVIEW_INVALIDVIEW, D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION1_INVALIDCOPYFLAGS, D3D11_MESSAGE_ID_UPDATESUBRESOURCE1_INVALIDCOPYFLAGS, D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT, D3D11_MESSAGE_ID_CREATEVIDEODECODER_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEVIDEODECODER_NULLPARAM, D3D11_MESSAGE_ID_CREATEVIDEODECODER_INVALIDFORMAT, D3D11_MESSAGE_ID_CREATEVIDEODECODER_ZEROWIDTHHEIGHT, D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERSIZE, D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERUSAGE, D3D11_MESSAGE_ID_GETVIDEODECODERPROFILECOUNT_OUTOFMEMORY, D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_NULLPARAM, D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_INVALIDINDEX, D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_NULLPARAM, D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_NULLPARAM, D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_NULLPARAM, D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_INVALIDINDEX, D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_GETDECODERCREATIONPARAMS_NULLPARAM, D3D11_MESSAGE_ID_GETDECODERDRIVERHANDLE_NULLPARAM, D3D11_MESSAGE_ID_GETDECODERBUFFER_NULLPARAM, D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDBUFFER, D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDTYPE, D3D11_MESSAGE_ID_GETDECODERBUFFER_LOCKED, D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NULLPARAM, D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_INVALIDTYPE, D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NOTLOCKED, D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM, D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD, D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM, D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_NULLPARAM, D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_INVALIDTYPE, D3D11_MESSAGE_ID_DECODEREXTENSION_NULLPARAM, D3D11_MESSAGE_ID_DECODEREXTENSION_INVALIDRESOURCE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_NULLPARAM, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDFRAMEFORMAT, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDUSAGE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDINPUTFRAMERATE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDOUTPUTFRAMERATE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDWIDTHHEIGHT, D3D11_MESSAGE_ID_GETVIDEOPROCESSORCONTENTDESC_NULLPARAM, D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMAT_NULLPARAM, D3D11_MESSAGE_ID_GETVIDEOPROCESSORCAPS_NULLPARAM, D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_NULLPARAM, D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_INVALIDINDEX, D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_NULLPARAM, D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_INVALIDINDEX, D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_NULLPARAM, D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_UNSUPPORTED, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTTARGETRECT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_INVALIDALPHA, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_UNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDFILLMODE, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_UNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTEXTENSION_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTTARGETRECT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTBACKGROUNDCOLOR_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTALPHAFILLMODE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCONSTRICTION_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_UNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_INVALIDSIZE, D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSTEREOMODE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTEXTENSION_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDFORMAT, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDRATE, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDFLAG, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDRECT, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDRECT, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDALPHA, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDCOUNT, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDALPHA, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDRATIO, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDRANGE, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_UNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_UNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FLIPUNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_MONOOFFSETUNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FORMATUNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDFORMAT, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDFILTER, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_UNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDLEVEL, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSTREAMCOUNT, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_TARGETRECT, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDOUTPUT, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDPASTFRAMES, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDFUTUREFRAMES, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSOURCERECT, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDDESTRECT, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDINPUTRESOURCE, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAYSIZE, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAY, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTEXPECTED, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTNOTEXPECTED, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_STEREONOTENABLED, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDRIGHTRESOURCE, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NOSTEREOSTREAMS, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INPUTHAZARD, D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_OUTPUTHAZARD, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_NULLPARAM, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDTYPE, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDBIND, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEDFORMAT, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDMIP, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEMIP, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAYSIZE, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAY, D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDDIMENSION, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_NULLPARAM, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDTYPE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDBIND, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMISC, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDUSAGE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFORMAT, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFOURCC, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMIP, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_UNSUPPORTEDMIP, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAYSIZE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAY, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDDIMENSION, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_NULLPARAM, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDTYPE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDBIND, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDFORMAT, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMIP, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDMIP, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDARRAY, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDARRAY, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDDIMENSION, D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT, D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS, D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER, D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER, D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER, D3D11_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE, D3D11_MESSAGE_ID_REF_WARNING_ATOMIC_INCONSISTENT, D3D11_MESSAGE_ID_REF_WARNING_READING_UNINITIALIZED_RESOURCE, D3D11_MESSAGE_ID_REF_WARNING_RAW_HAZARD, D3D11_MESSAGE_ID_REF_WARNING_WAR_HAZARD, D3D11_MESSAGE_ID_REF_WARNING_WAW_HAZARD, D3D11_MESSAGE_ID_CREATECRYPTOSESSION_NULLPARAM, D3D11_MESSAGE_ID_CREATECRYPTOSESSION_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_GETCRYPTOTYPE_NULLPARAM, D3D11_MESSAGE_ID_GETDECODERPROFILE_NULLPARAM, D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATESIZE_NULLPARAM, D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_NULLPARAM, D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_WRONGSIZE, D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_WRONGSIZE, D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_NULLPARAM, D3D11_MESSAGE_ID_ENCRYPTIONBLT_UNSUPPORTED, D3D11_MESSAGE_ID_ENCRYPTIONBLT_NULLPARAM, D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_WRONGDEVICE, D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_WRONGDEVICE, D3D11_MESSAGE_ID_ENCRYPTIONBLT_FORMAT_MISMATCH, D3D11_MESSAGE_ID_ENCRYPTIONBLT_SIZE_MISMATCH, D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MULTISAMPLED, D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_NOT_STAGING, D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MAPPED, D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_MAPPED, D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_OFFERED, D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_OFFERED, D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_CONTENT_UNDEFINED, D3D11_MESSAGE_ID_DECRYPTIONBLT_UNSUPPORTED, D3D11_MESSAGE_ID_DECRYPTIONBLT_NULLPARAM, D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_WRONGDEVICE, D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_WRONGDEVICE, D3D11_MESSAGE_ID_DECRYPTIONBLT_FORMAT_MISMATCH, D3D11_MESSAGE_ID_DECRYPTIONBLT_SIZE_MISMATCH, D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MULTISAMPLED, D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_NOT_STAGING, D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_NOT_RENDER_TARGET, D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_MAPPED, D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MAPPED, D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_OFFERED, D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_OFFERED, D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_CONTENT_UNDEFINED, D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_NULLPARAM, D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_INVALIDSIZE, D3D11_MESSAGE_ID_FINISHSESSIONKEYREFRESH_NULLPARAM, D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_NULLPARAM, D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_INVALIDSIZE, D3D11_MESSAGE_ID_GETCONTENTPROTECTIONCAPS_NULLPARAM, D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_NULLPARAM, D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_INVALIDINDEX, D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_NULLPARAM, D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_UNSUPPORTED, D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_INVALIDTYPE, D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_OUTOFMEMORY_RETURN, D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_INVALIDCHANNEL, D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_NULLPARAM, D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_INVALIDCHANNEL, D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_NULLPARAM, D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_WRONGSIZE, D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDCHANNEL, D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_NULLPARAM, D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_NULLPARAM, D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGCHANNEL, D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_UNSUPPORTEDQUERY, D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGSIZE, D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_INVALIDPROCESSINDEX, D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_NULLPARAM, D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGCHANNEL, D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_UNSUPPORTEDCONFIGURE, D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGSIZE, D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_INVALIDPROCESSIDTYPE, D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT, D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT, D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT, D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT, D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT, D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT, D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_INVALIDSIZE, D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDSIZE, D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY, D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_OUTOFMEMORY, D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_NULLPARAM, D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDTYPE, D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDBIND, D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDARRAY, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_NULLPARAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALIDSTREAM, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALID, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_UNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_NULLPARAM, D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW, D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_UNSUPPORTED, D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_UNSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED, D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET, D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS, D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED, D3D11_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED, D3D11_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1, D3D11_MESSAGE_ID_GETDC_INACCESSIBLE, D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT, D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9, D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED, D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED, D3D11_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED, D3D11_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED, D3D11_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA, D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA, D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT, D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT, D3D11_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX, D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX, D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS, D3D11_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET, D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT, D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT, D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END } D3D11_MESSAGE_ID; typedef enum D3D11_RLDO_FLAGS { D3D11_RLDO_SUMMARY = 1, D3D11_RLDO_DETAIL = 2 } D3D11_RLDO_FLAGS; typedef struct D3D11_MESSAGE { D3D11_MESSAGE_CATEGORY Category; D3D11_MESSAGE_SEVERITY Severity; D3D11_MESSAGE_ID ID; const char *pDescription; SIZE_T DescriptionByteLength; } D3D11_MESSAGE; typedef struct D3D11_INFO_QUEUE_FILTER_DESC { UINT NumCategories; D3D11_MESSAGE_CATEGORY *pCategoryList; UINT NumSeverities; D3D11_MESSAGE_SEVERITY *pSeverityList; UINT NumIDs; D3D11_MESSAGE_ID *pIDList; } D3D11_INFO_QUEUE_FILTER_DESC; typedef struct D3D11_INFO_QUEUE_FILTER { D3D11_INFO_QUEUE_FILTER_DESC AllowList; D3D11_INFO_QUEUE_FILTER_DESC DenyList; } D3D11_INFO_QUEUE_FILTER; cpp_quote("#define D3D11_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024") [ object, uuid(79cf2233-7536-4948-9d36-1e4692dc5760), local, pointer_default(unique) ] interface ID3D11Debug : IUnknown { HRESULT SetFeatureMask(UINT Mask); UINT GetFeatureMask(); HRESULT SetPresentPerRenderOpDelay(UINT Milliseconds); UINT GetPresentPerRenderOpDelay(); HRESULT SetSwapChain(IDXGISwapChain *pSwapChain); HRESULT GetSwapChain(IDXGISwapChain **ppSwapChain); HRESULT ValidateContext(ID3D11DeviceContext *pContext); HRESULT ReportLiveDeviceObjects(D3D11_RLDO_FLAGS Flags); HRESULT ValidateContextForDispatch(ID3D11DeviceContext *pContext); } [ object, uuid(6543dbb6-1b48-42f5-ab82-e97ec74326f6), local, pointer_default(unique) ] interface ID3D11InfoQueue : IUnknown { HRESULT SetMessageCountLimit(UINT64 MessageCountLimit); void ClearStoredMessages(); cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetMessage") cpp_quote("#endif") HRESULT GetMessage(UINT64 MessageIndex, D3D11_MESSAGE* pMessage, SIZE_T *pMessageByteLength); UINT64 GetNumMessagesAllowedByStorageFilter(); UINT64 GetNumMessagesDeniedByStorageFilter(); UINT64 GetNumStoredMessages(); UINT64 GetNumStoredMessagesAllowedByRetrievalFilter(); UINT64 GetNumMessagesDiscardedByMessageCountLimit(); UINT64 GetMessageCountLimit(); HRESULT AddStorageFilterEntries(D3D11_INFO_QUEUE_FILTER *pFilter); HRESULT GetStorageFilter(D3D11_INFO_QUEUE_FILTER *pFilter, SIZE_T *pFilterByteLength); void ClearStorageFilter(); HRESULT PushEmptyStorageFilter(); HRESULT PushCopyOfStorageFilter(); HRESULT PushStorageFilter(D3D11_INFO_QUEUE_FILTER *pFilter); void PopStorageFilter(); UINT GetStorageFilterStackSize(); HRESULT AddRetrievalFilterEntries(D3D11_INFO_QUEUE_FILTER *pFilter); HRESULT GetRetrievalFilter(D3D11_INFO_QUEUE_FILTER *pFilter, SIZE_T *pFilterByteLength); void ClearRetrievalFilter(); HRESULT PushEmptyRetrievalFilter(); HRESULT PushCopyOfRetrievalFilter(); HRESULT PushRetrievalFilter(D3D11_INFO_QUEUE_FILTER *pFilter); void PopRetrievalFilter(); UINT GetRetrievalFilterStackSize(); HRESULT AddMessage(D3D11_MESSAGE_CATEGORY Category, D3D11_MESSAGE_SEVERITY Severity, D3D11_MESSAGE_ID ID, LPCSTR pDescription); HRESULT AddApplicationMessage(D3D11_MESSAGE_SEVERITY Severity, LPCSTR pDescription); HRESULT SetBreakOnCategory(D3D11_MESSAGE_CATEGORY Category, BOOL bEnable); HRESULT SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY Severity, BOOL bEnable); HRESULT SetBreakOnID(D3D11_MESSAGE_ID ID, BOOL bEnable); BOOL GetBreakOnCategory(D3D11_MESSAGE_CATEGORY Category); BOOL GetBreakOnSeverity(D3D11_MESSAGE_SEVERITY Severity); BOOL GetBreakOnID(D3D11_MESSAGE_ID ID); void SetMuteDebugOutput(BOOL bMute); BOOL GetMuteDebugOutput(); } ================================================ FILE: wine/windows/d3d11shader.h ================================================ /* * Copyright 2010 Matteo Bruni for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3D11SHADER_H__ #define __D3D11SHADER_H__ #include "d3dcommon.h" /* These are defined as version-neutral in d3dcommon.h */ typedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE; typedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE; typedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN; typedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING; typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE; typedef struct _D3D11_SHADER_DESC { UINT Version; const char *Creator; UINT Flags; UINT ConstantBuffers; UINT BoundResources; UINT InputParameters; UINT OutputParameters; UINT InstructionCount; UINT TempRegisterCount; UINT TempArrayCount; UINT DefCount; UINT DclCount; UINT TextureNormalInstructions; UINT TextureLoadInstructions; UINT TextureCompInstructions; UINT TextureBiasInstructions; UINT TextureGradientInstructions; UINT FloatInstructionCount; UINT IntInstructionCount; UINT UintInstructionCount; UINT StaticFlowControlCount; UINT DynamicFlowControlCount; UINT MacroInstructionCount; UINT ArrayInstructionCount; UINT CutInstructionCount; UINT EmitInstructionCount; D3D_PRIMITIVE_TOPOLOGY GSOutputTopology; UINT GSMaxOutputVertexCount; D3D_PRIMITIVE InputPrimitive; UINT PatchConstantParameters; UINT cGSInstanceCount; UINT cControlPoints; D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive; D3D_TESSELLATOR_PARTITIONING HSPartitioning; D3D_TESSELLATOR_DOMAIN TessellatorDomain; UINT cBarrierInstructions; UINT cInterlockedInstructions; UINT cTextureStoreInstructions; } D3D11_SHADER_DESC; typedef struct _D3D11_SHADER_VARIABLE_DESC { const char *Name; UINT StartOffset; UINT Size; UINT uFlags; void *DefaultValue; UINT StartTexture; UINT TextureSize; UINT StartSampler; UINT SamplerSize; } D3D11_SHADER_VARIABLE_DESC; typedef struct _D3D11_SHADER_TYPE_DESC { D3D_SHADER_VARIABLE_CLASS Class; D3D_SHADER_VARIABLE_TYPE Type; UINT Rows; UINT Columns; UINT Elements; UINT Members; UINT Offset; const char *Name; } D3D11_SHADER_TYPE_DESC; typedef struct _D3D11_SHADER_BUFFER_DESC { const char *Name; D3D_CBUFFER_TYPE Type; UINT Variables; UINT Size; UINT uFlags; } D3D11_SHADER_BUFFER_DESC; typedef struct _D3D11_SHADER_INPUT_BIND_DESC { const char *Name; D3D_SHADER_INPUT_TYPE Type; UINT BindPoint; UINT BindCount; UINT uFlags; D3D_RESOURCE_RETURN_TYPE ReturnType; D3D_SRV_DIMENSION Dimension; UINT NumSamples; } D3D11_SHADER_INPUT_BIND_DESC; typedef struct _D3D11_SIGNATURE_PARAMETER_DESC { const char *SemanticName; UINT SemanticIndex; UINT Register; D3D_NAME SystemValueType; D3D_REGISTER_COMPONENT_TYPE ComponentType; BYTE Mask; BYTE ReadWriteMask; UINT Stream; } D3D11_SIGNATURE_PARAMETER_DESC; DEFINE_GUID(IID_ID3D11ShaderReflectionType, 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21); #define INTERFACE ID3D11ShaderReflectionType DECLARE_INTERFACE(ID3D11ShaderReflectionType) { STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_TYPE_DESC *desc) PURE; STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByName)(THIS_ const char *name) PURE; STDMETHOD_(const char *, GetMemberTypeName)(THIS_ UINT index) PURE; STDMETHOD(IsEqual)(THIS_ struct ID3D11ShaderReflectionType *type) PURE; STDMETHOD_(struct ID3D11ShaderReflectionType *, GetSubType)(THIS) PURE; STDMETHOD_(struct ID3D11ShaderReflectionType *, GetBaseClass)(THIS) PURE; STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE; STDMETHOD_(struct ID3D11ShaderReflectionType *, GetInterfaceByIndex)(THIS_ UINT index) PURE; STDMETHOD(IsOfType)(THIS_ struct ID3D11ShaderReflectionType *type) PURE; STDMETHOD(ImplementsInterface)(THIS_ ID3D11ShaderReflectionType *base) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D11ShaderReflectionVariable, 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c); #define INTERFACE ID3D11ShaderReflectionVariable DECLARE_INTERFACE(ID3D11ShaderReflectionVariable) { STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_VARIABLE_DESC *desc) PURE; STDMETHOD_(struct ID3D11ShaderReflectionType *, GetType)(THIS) PURE; STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetBuffer)(THIS) PURE; STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ UINT index) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer, 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8); #define INTERFACE ID3D11ShaderReflectionConstantBuffer DECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer) { STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_BUFFER_DESC *desc) PURE; STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D11ShaderReflection, 0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1); #define INTERFACE ID3D11ShaderReflection DECLARE_INTERFACE_(ID3D11ShaderReflection, IUnknown) { /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3D11ShaderReflection methods */ STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_DESC *desc) PURE; STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE; STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE; STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE; STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE; STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE; STDMETHOD(GetPatchConstantParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE; STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE; STDMETHOD(GetResourceBindingDescByName)(THIS_ const char *name, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE; STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE; STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE; STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE; STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE; STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE; STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE; STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE; STDMETHOD(GetMinFeatureLevel)(THIS_ enum D3D_FEATURE_LEVEL *level) PURE; STDMETHOD_(UINT, GetThreadGroupSize)(THIS_ UINT *sizex, UINT *sizey, UINT *sizez) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D11ModuleInstance, 0x469e07f7, 0x45a, 0x48d5, 0xaa, 0x12, 0x68, 0xa4, 0x78, 0xcd, 0xf7, 0x5d); #define INTERFACE ID3D11ModuleInstance DECLARE_INTERFACE_(ID3D11ModuleInstance, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3D11ModuleInstance methods */ STDMETHOD(BindConstantBuffer)(THIS_ UINT srcslot, UINT dstslot, UINT dstoffset) PURE; STDMETHOD(BindConstantBufferByName)(THIS_ const char *name, UINT dstslot, UINT dstoffset) PURE; STDMETHOD(BindResource)(THIS_ UINT srcslot, UINT dstslot, UINT count) PURE; STDMETHOD(BindResourceByName)(THIS_ const char *name, UINT dstslot, UINT count) PURE; STDMETHOD(BindSampler)(THIS_ UINT srcslot, UINT dstslot, UINT count) PURE; STDMETHOD(BindSamplerByName)(THIS_ const char *name, UINT dstslot, UINT count) PURE; STDMETHOD(BindUnorderedAccessView)(THIS_ UINT srcslot, UINT dstslot, UINT count) PURE; STDMETHOD(BindUnorderedAccessViewByName)(THIS_ const char *name, UINT dstslot, UINT count) PURE; STDMETHOD(BindResourceAsUnorderedAccessView)(THIS_ UINT srcslot, UINT dstslot, UINT count) PURE; STDMETHOD(BindResourceAsUnorderedAccessViewByName)(THIS_ const char *name, UINT dstslot, UINT count) PURE; }; #undef INTERFACE DEFINE_GUID(IID_ID3D11Module, 0xcac701ee, 0x80fc, 0x4122, 0x82, 0x42, 0x10, 0xb3, 0x9c, 0x8c, 0xec, 0x34); #define INTERFACE ID3D11Module DECLARE_INTERFACE_(ID3D11Module, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3D11Module methods */ STDMETHOD(CreateInstance)(THIS_ const char *instnamespace, ID3D11ModuleInstance **moduleinstance) PURE; }; #undef INTERFACE #endif ================================================ FILE: wine/windows/d3d12.idl ================================================ /* * Copyright 2016 Józef Kucia for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi.idl"; import "d3dcommon.idl"; cpp_quote("#ifndef _D3D12_CONSTANTS") cpp_quote("#define _D3D12_CONSTANTS") const UINT D3D12_CS_TGSM_REGISTER_COUNT = 8192; const UINT D3D12_MAX_ROOT_COST = 64; const UINT D3D12_VIEWPORT_BOUNDS_MAX = 32767; const UINT D3D12_VIEWPORT_BOUNDS_MIN = -32768; const UINT D3D12_APPEND_ALIGNED_ELEMENT = 0xffffffff; cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_ALPHA (1.0f)") cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_BLUE (1.0f)") cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_GREEN (1.0f)") cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_RED (1.0f)") const UINT D3D12_DEFAULT_DEPTH_BIAS = 0; cpp_quote("#define D3D12_DEFAULT_DEPTH_BIAS_CLAMP (0.0f)") cpp_quote("#define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS (0.0f)") const UINT D3D12_DEFAULT_STENCIL_READ_MASK = 0xff; const UINT D3D12_DEFAULT_STENCIL_WRITE_MASK = 0xff; const UINT D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND = 0xffffffff; cpp_quote("#define D3D12_FLOAT32_MAX (3.402823466e+38f)") const UINT D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32; const UINT D3D12_REQ_MIP_LEVELS = 15; const UINT D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048; const UINT D3D12_REQ_TEXTURE1D_U_DIMENSION = 16384; const UINT D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048; const UINT D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384; const UINT D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048; const UINT D3D12_REQ_TEXTURECUBE_DIMENSION = 16384; const UINT D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff; const UINT D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT = 8; const UINT D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT = 256; const UINT D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT = 65536; const UINT D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256; const UINT D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512; const UINT D3D12_VS_INPUT_REGISTER_COUNT = 32; const UINT D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16; cpp_quote("#endif") const UINT D3D12_SHADER_COMPONENT_MAPPING_MASK = 0x7; const UINT D3D12_SHADER_COMPONENT_MAPPING_SHIFT = 3; const UINT D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES = 1 << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 4); typedef enum D3D12_SHADER_MIN_PRECISION_SUPPORT { D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE = 0x0, D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1, D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2, } D3D12_SHADER_MIN_PRECISION_SUPPORT; typedef enum D3D12_TILED_RESOURCES_TIER { D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0, D3D12_TILED_RESOURCES_TIER_1 = 1, D3D12_TILED_RESOURCES_TIER_2 = 2, D3D12_TILED_RESOURCES_TIER_3 = 3, } D3D12_TILED_RESOURCES_TIER; typedef enum D3D12_RESOURCE_BINDING_TIER { D3D12_RESOURCE_BINDING_TIER_1 = 1, D3D12_RESOURCE_BINDING_TIER_2 = 2, D3D12_RESOURCE_BINDING_TIER_3 = 3, } D3D12_RESOURCE_BINDING_TIER; typedef enum D3D12_CONSERVATIVE_RASTERIZATION_TIER { D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0, D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1, D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2, D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3, } D3D12_CONSERVATIVE_RASTERIZATION_TIER; typedef enum D3D12_CROSS_NODE_SHARING_TIER { D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0, D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED = 1, D3D12_CROSS_NODE_SHARING_TIER_1 = 2, D3D12_CROSS_NODE_SHARING_TIER_2 = 3, } D3D12_CROSS_NODE_SHARING_TIER; typedef enum D3D12_RESOURCE_HEAP_TIER { D3D12_RESOURCE_HEAP_TIER_1 = 1, D3D12_RESOURCE_HEAP_TIER_2 = 2, } D3D12_RESOURCE_HEAP_TIER; typedef enum D3D12_FORMAT_SUPPORT1 { D3D12_FORMAT_SUPPORT1_NONE = 0x00000000, D3D12_FORMAT_SUPPORT1_BUFFER = 0x00000001, D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER = 0x00000002, D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER = 0x00000004, D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x00000008, D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x00000010, D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x00000020, D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x00000040, D3D12_FORMAT_SUPPORT1_TEXTURECUBE = 0x00000080, D3D12_FORMAT_SUPPORT1_SHADER_LOAD = 0x00000100, D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x00000200, D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON = 0x00000400, D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT = 0x00000800, D3D12_FORMAT_SUPPORT1_MIP = 0x00001000, D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x00004000, D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x00008000, D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x00010000, D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE = 0x00040000, D3D12_FORMAT_SUPPORT1_DISPLAY = 0x00080000, D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT = 0x00100000, D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET = 0x00200000, D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD = 0x00400000, D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x00800000, D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST = 0x01000000, D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x02000000, D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON = 0x04000000, D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT = 0x08000000, D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT = 0x10000000, D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000, D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000, } D3D12_FORMAT_SUPPORT1; typedef enum D3D12_FORMAT_SUPPORT2 { D3D12_FORMAT_SUPPORT2_NONE = 0x00000000, D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x00000001, D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x00000002, D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x00000004, D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x00000008, D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x00000010, D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x00000020, D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x00000040, D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x00000080, D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x00000100, D3D12_FORMAT_SUPPORT2_TILED = 0x00000200, D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x00004000, } D3D12_FORMAT_SUPPORT2; interface ID3D12Fence; interface ID3D12RootSignature; interface ID3D12Heap; interface ID3D12DescriptorHeap; interface ID3D12Resource; interface ID3D12CommandAllocator; interface ID3D12GraphicsCommandList; interface ID3D12CommandQueue; interface ID3D12PipelineState; interface ID3D12Device; typedef RECT D3D12_RECT; typedef struct D3D12_BOX { UINT left; UINT top; UINT front; UINT right; UINT bottom; UINT back; } D3D12_BOX; typedef struct D3D12_VIEWPORT { FLOAT TopLeftX; FLOAT TopLeftY; FLOAT Width; FLOAT Height; FLOAT MinDepth; FLOAT MaxDepth; } D3D12_VIEWPORT; typedef struct D3D12_RANGE { SIZE_T Begin; SIZE_T End; } D3D12_RANGE; typedef struct D3D12_RESOURCE_ALLOCATION_INFO { UINT64 SizeInBytes; UINT64 Alignment; } D3D12_RESOURCE_ALLOCATION_INFO; typedef struct D3D12_DRAW_ARGUMENTS { UINT VertexCountPerInstance; UINT InstanceCount; UINT StartVertexLocation; UINT StartInstanceLocation; } D3D12_DRAW_ARGUMENTS; typedef struct D3D12_DRAW_INDEXED_ARGUMENTS { UINT IndexCountPerInstance; UINT InstanceCount; UINT StartIndexLocation; INT BaseVertexLocation; UINT StartInstanceLocation; } D3D12_DRAW_INDEXED_ARGUMENTS; typedef struct D3D12_DISPATCH_ARGUMENTS { UINT ThreadGroupCountX; UINT ThreadGroupCountY; UINT ThreadGroupCountZ; } D3D12_DISPATCH_ARGUMENTS; typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS { BOOL DoublePrecisionFloatShaderOps; BOOL OutputMergerLogicOp; D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport; D3D12_TILED_RESOURCES_TIER TiledResourcesTier; D3D12_RESOURCE_BINDING_TIER ResourceBindingTier; BOOL PSSpecifiedStencilRefSupported; BOOL TypedUAVLoadAdditionalFormats; BOOL ROVsSupported; D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier; UINT MaxGPUVirtualAddressBitsPerResource; BOOL StandardSwizzle64KBSupported; D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier; BOOL CrossAdapterRowMajorTextureSupported; BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation; D3D12_RESOURCE_HEAP_TIER ResourceHeapTier; } D3D12_FEATURE_DATA_D3D12_OPTIONS; typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT { DXGI_FORMAT Format; D3D12_FORMAT_SUPPORT1 Support1; D3D12_FORMAT_SUPPORT2 Support2; } D3D12_FEATURE_DATA_FORMAT_SUPPORT; typedef enum D3D12_HEAP_TYPE { D3D12_HEAP_TYPE_DEFAULT = 1, D3D12_HEAP_TYPE_UPLOAD = 2, D3D12_HEAP_TYPE_READBACK = 3, D3D12_HEAP_TYPE_CUSTOM = 4, } D3D12_HEAP_TYPE; typedef enum D3D12_CPU_PAGE_PROPERTY { D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0, D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2, D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3, } D3D12_CPU_PAGE_PROPERTY; typedef enum D3D12_MEMORY_POOL { D3D12_MEMORY_POOL_UNKNOWN = 0, D3D12_MEMORY_POOL_L0 = 1, D3D12_MEMORY_POOL_L1 = 2, } D3D12_MEMORY_POOL; typedef struct D3D12_HEAP_PROPERTIES { D3D12_HEAP_TYPE Type; D3D12_CPU_PAGE_PROPERTY CPUPageProperty; D3D12_MEMORY_POOL MemoryPoolPreference; UINT CreationNodeMask; UINT VisibleNodeMask; } D3D12_HEAP_PROPERTIES; typedef enum D3D12_HEAP_FLAGS { D3D12_HEAP_FLAG_NONE = 0x00, D3D12_HEAP_FLAG_SHARED = 0x01, D3D12_HEAP_FLAG_DENY_BUFFERS = 0x04, D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x08, D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20, D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40, D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80, D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0x00, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0, D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44, D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84, } D3D12_HEAP_FLAGS; typedef struct D3D12_HEAP_DESC { UINT64 SizeInBytes; D3D12_HEAP_PROPERTIES Properties; UINT64 Alignment; D3D12_HEAP_FLAGS Flags; } D3D12_HEAP_DESC; typedef struct D3D12_TILED_RESOURCE_COORDINATE { UINT X; UINT Y; UINT Z; UINT Subresource; } D3D12_TILED_RESOURCE_COORDINATE; typedef struct D3D12_TILE_REGION_SIZE { UINT NumTiles; BOOL UseBox; UINT Width; UINT16 Height; UINT16 Depth; } D3D12_TILE_REGION_SIZE; typedef struct D3D12_SUBRESOURCE_TILING { UINT WidthInTiles; UINT16 HeightInTiles; UINT16 DepthInTiles; UINT StartTileIndexInOverallResource; } D3D12_SUBRESOURCE_TILING; typedef struct D3D12_TILE_SHAPE { UINT WidthInTexels; UINT HeightInTexels; UINT DepthInTexels; } D3D12_TILE_SHAPE; typedef struct D3D12_SHADER_BYTECODE { const void *pShaderBytecode; SIZE_T BytecodeLength; } D3D12_SHADER_BYTECODE; typedef struct D3D12_DEPTH_STENCIL_VALUE { FLOAT Depth; UINT8 Stencil; } D3D12_DEPTH_STENCIL_VALUE; typedef struct D3D12_CLEAR_VALUE { DXGI_FORMAT Format; union { FLOAT Color[4]; D3D12_DEPTH_STENCIL_VALUE DepthStencil; }; } D3D12_CLEAR_VALUE; typedef struct D3D12_PACKED_MIP_INFO { UINT8 NumStandardMips; UINT8 NumPackedMips; UINT NumTilesForPackedMips; UINT StartTileIndexInOverallResource; } D3D12_PACKED_MIP_INFO; typedef enum D3D12_RESOURCE_STATES { D3D12_RESOURCE_STATE_COMMON = 0, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1, D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x2, D3D12_RESOURCE_STATE_RENDER_TARGET = 0x4, D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x8, D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x10, D3D12_RESOURCE_STATE_DEPTH_READ = 0x20, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x40, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x80, D3D12_RESOURCE_STATE_STREAM_OUT = 0x100, D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x200, D3D12_RESOURCE_STATE_COPY_DEST = 0x400, D3D12_RESOURCE_STATE_COPY_SOURCE = 0x800, D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x1000, D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x2000, D3D12_RESOURCE_STATE_GENERIC_READ = 0x1 | 0x2 | 0x40 | 0x80 | 0x200 | 0x800, D3D12_RESOURCE_STATE_PRESENT = 0x0, D3D12_RESOURCE_STATE_PREDICATION = 0x200, } D3D12_RESOURCE_STATES; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_RESOURCE_STATES);") typedef enum D3D12_RESOURCE_BARRIER_TYPE { D3D12_RESOURCE_BARRIER_TYPE_TRANSITION = 0, D3D12_RESOURCE_BARRIER_TYPE_ALIASING = 1, D3D12_RESOURCE_BARRIER_TYPE_UAV = 2, } D3D12_RESOURCE_BARRIER_TYPE; typedef enum D3D12_RESOURCE_BARRIER_FLAGS { D3D12_RESOURCE_BARRIER_FLAG_NONE = 0x0, D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1, D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2, } D3D12_RESOURCE_BARRIER_FLAGS; typedef struct D3D12_RESOURCE_TRANSITION_BARRIER { ID3D12Resource *pResource; UINT Subresource; D3D12_RESOURCE_STATES StateBefore; D3D12_RESOURCE_STATES StateAfter; } D3D12_RESOURCE_TRANSITION_BARRIER; typedef struct D3D12_RESOURCE_ALIASING_BARRIER_ALIASING { ID3D12Resource *pResourceBefore; ID3D12Resource *pResourceAfter; } D3D12_RESOURCE_ALIASING_BARRIER; typedef struct D3D12_RESOURCE_UAV_BARRIER { ID3D12Resource *pResource; } D3D12_RESOURCE_UAV_BARRIER; typedef struct D3D12_RESOURCE_BARRIER { D3D12_RESOURCE_BARRIER_TYPE Type; D3D12_RESOURCE_BARRIER_FLAGS Flags; union { D3D12_RESOURCE_TRANSITION_BARRIER Transition; D3D12_RESOURCE_ALIASING_BARRIER Aliasing; D3D12_RESOURCE_UAV_BARRIER UAV; }; } D3D12_RESOURCE_BARRIER; typedef enum D3D12_RESOURCE_DIMENSION { D3D12_RESOURCE_DIMENSION_UNKNOWN = 0, D3D12_RESOURCE_DIMENSION_BUFFER = 1, D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2, D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3, D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4, } D3D12_RESOURCE_DIMENSION; typedef enum D3D12_TEXTURE_LAYOUT { D3D12_TEXTURE_LAYOUT_UNKNOWN = 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1, D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2, D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3, } D3D12_TEXTURE_LAYOUT; typedef enum D3D12_RESOURCE_FLAGS { D3D12_RESOURCE_FLAG_NONE = 0x0, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 0x1, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 0x2, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 0x4, D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 0x8, D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 0x10, D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20, } D3D12_RESOURCE_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_RESOURCE_FLAGS);") typedef struct D3D12_RESOURCE_DESC { D3D12_RESOURCE_DIMENSION Dimension; UINT64 Alignment; UINT64 Width; UINT Height; UINT16 DepthOrArraySize; UINT16 MipLevels; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; D3D12_TEXTURE_LAYOUT Layout; D3D12_RESOURCE_FLAGS Flags; } D3D12_RESOURCE_DESC; typedef enum D3D12_TEXTURE_COPY_TYPE { D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0, D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT = 1, } D3D12_TEXTURE_COPY_TYPE; typedef struct D3D12_SUBRESOURCE_FOOTPRINT { DXGI_FORMAT Format; UINT Width; UINT Height; UINT Depth; UINT RowPitch; } D3D12_SUBRESOURCE_FOOTPRINT; typedef struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT { UINT64 Offset; D3D12_SUBRESOURCE_FOOTPRINT Footprint; } D3D12_PLACED_SUBRESOURCE_FOOTPRINT; typedef struct D3D12_TEXTURE_COPY_LOCATION { ID3D12Resource *pResource; D3D12_TEXTURE_COPY_TYPE Type; union { D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; UINT SubresourceIndex; }; } D3D12_TEXTURE_COPY_LOCATION; typedef enum D3D12_DESCRIPTOR_RANGE_TYPE { D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0, D3D12_DESCRIPTOR_RANGE_TYPE_UAV = 1, D3D12_DESCRIPTOR_RANGE_TYPE_CBV = 2, D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = 3, } D3D12_DESCRIPTOR_RANGE_TYPE; typedef struct D3D12_DESCRIPTOR_RANGE { D3D12_DESCRIPTOR_RANGE_TYPE RangeType; UINT NumDescriptors; UINT BaseShaderRegister; UINT RegisterSpace; UINT OffsetInDescriptorsFromTableStart; } D3D12_DESCRIPTOR_RANGE; typedef enum D3D12_DESCRIPTOR_RANGE_FLAGS { D3D12_DESCRIPTOR_RANGE_FLAG_NONE = 0, } D3D12_DESCRIPTOR_RANGE_FLAGS; typedef struct D3D12_DESCRIPTOR_RANGE1 { D3D12_DESCRIPTOR_RANGE_TYPE RangeType; UINT NumDescriptors; UINT BaseShaderRegister; UINT RegisterSpace; D3D12_DESCRIPTOR_RANGE_FLAGS Flags; UINT OffsetInDescriptorsFromTableStart; } D3D12_DESCRIPTOR_RANGE1; typedef struct D3D12_ROOT_DESCRIPTOR_TABLE { UINT NumDescriptorRanges; const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges; } D3D12_ROOT_DESCRIPTOR_TABLE; typedef struct D3D12_ROOT_DESCRIPTOR_TABLE1 { UINT NumDescriptorRanges; const D3D12_DESCRIPTOR_RANGE1 *pDescriptorRanges; } D3D12_ROOT_DESCRIPTOR_TABLE1; typedef struct D3D12_ROOT_CONSTANTS { UINT ShaderRegister; UINT RegisterSpace; UINT Num32BitValues; } D3D12_ROOT_CONSTANTS; typedef struct D3D12_ROOT_DESCRIPTOR { UINT ShaderRegister; UINT RegisterSpace; } D3D12_ROOT_DESCRIPTOR; typedef enum D3D12_ROOT_DESCRIPTOR_FLAGS { D3D12_ROOT_DESCRIPTOR_FLAG_NONE = 0, } D3D12_ROOT_DESCRIPTOR_FLAGS; typedef struct D3D12_ROOT_DESCRIPTOR1 { UINT ShaderRegister; UINT RegisterSpace; D3D12_ROOT_DESCRIPTOR_FLAGS Flags; } D3D12_ROOT_DESCRIPTOR1; typedef enum D3D12_ROOT_PARAMETER_TYPE { D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0, D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = 1, D3D12_ROOT_PARAMETER_TYPE_CBV = 2, D3D12_ROOT_PARAMETER_TYPE_SRV = 3, D3D12_ROOT_PARAMETER_TYPE_UAV = 4, } D3D12_ROOT_PARAMETER_TYPE; typedef enum D3D12_SHADER_VISIBILITY { D3D12_SHADER_VISIBILITY_ALL = 0, D3D12_SHADER_VISIBILITY_VERTEX = 1, D3D12_SHADER_VISIBILITY_HULL = 2, D3D12_SHADER_VISIBILITY_DOMAIN = 3, D3D12_SHADER_VISIBILITY_GEOMETRY = 4, D3D12_SHADER_VISIBILITY_PIXEL = 5, } D3D12_SHADER_VISIBILITY; typedef struct D3D12_ROOT_PARAMETER { D3D12_ROOT_PARAMETER_TYPE ParameterType; union { D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable; D3D12_ROOT_CONSTANTS Constants; D3D12_ROOT_DESCRIPTOR Descriptor; }; D3D12_SHADER_VISIBILITY ShaderVisibility; } D3D12_ROOT_PARAMETER; typedef struct D3D12_ROOT_PARAMETER1 { D3D12_ROOT_PARAMETER_TYPE ParameterType; union { D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable; D3D12_ROOT_CONSTANTS Constants; D3D12_ROOT_DESCRIPTOR1 Descriptor; }; D3D12_SHADER_VISIBILITY ShaderVisibility; } D3D12_ROOT_PARAMETER1; typedef enum D3D12_STATIC_BORDER_COLOR { D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0, D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK = 1, D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE = 2, } D3D12_STATIC_BORDER_COLOR; typedef enum D3D12_FILTER { D3D12_FILTER_MIN_MAG_MIP_POINT = 0x00, D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01, D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04, D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05, D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10, D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11, D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14, D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x15, D3D12_FILTER_ANISOTROPIC = 0x55, D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80, D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81, D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84, D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85, D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90, D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91, D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94, D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95, D3D12_FILTER_COMPARISON_ANISOTROPIC = 0xd5, D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100, D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101, D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104, D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105, D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110, D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111, D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114, D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115, D3D12_FILTER_MINIMUM_ANISOTROPIC = 0x155, D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180, D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181, D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184, D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185, D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190, D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191, D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194, D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195, D3D12_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5, } D3D12_FILTER; typedef enum D3D12_FILTER_TYPE { D3D12_FILTER_TYPE_POINT = 0, D3D12_FILTER_TYPE_LINEAR = 1, } D3D12_FILTER_TYPE; const UINT D3D12_MIP_FILTER_SHIFT = 0; const UINT D3D12_MAG_FILTER_SHIFT = 2; const UINT D3D12_MIN_FILTER_SHIFT = 4; const UINT D3D12_FILTER_TYPE_MASK = 0x3; const UINT D3D12_ANISOTROPIC_FILTERING_BIT = 0x40; typedef enum D3D12_FILTER_REDUCTION_TYPE { D3D12_FILTER_REDUCTION_TYPE_STANDARD = 0, D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1, D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2, D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3, } D3D12_FILTER_REDUCTION_TYPE; const UINT D3D12_FILTER_REDUCTION_TYPE_MASK = 0x3; const UINT D3D12_FILTER_REDUCTION_TYPE_SHIFT = 7; cpp_quote("#define D3D12_DECODE_MAG_FILTER(filter) \\") cpp_quote(" ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MAG_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))") cpp_quote("#define D3D12_DECODE_MIN_FILTER(filter) \\") cpp_quote(" ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MIN_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))") cpp_quote("#define D3D12_DECODE_MIP_FILTER(filter) \\") cpp_quote(" ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MIP_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))") cpp_quote("#define D3D12_DECODE_IS_ANISOTROPIC_FILTER(filter) \\") cpp_quote(" (((filter) & D3D12_ANISOTROPIC_FILTERING_BIT) \\") cpp_quote(" && (D3D12_DECODE_MIN_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR) \\") cpp_quote(" && (D3D12_DECODE_MAG_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR) \\") cpp_quote(" && (D3D12_DECODE_MIP_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR))") cpp_quote("#define D3D12_DECODE_FILTER_REDUCTION(filter) \\") cpp_quote(" ((D3D12_FILTER_REDUCTION_TYPE)(((filter) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT) \\") cpp_quote(" & D3D12_FILTER_REDUCTION_TYPE_MASK))") cpp_quote("#define D3D12_DECODE_IS_COMPARISON_FILTER(filter) \\") cpp_quote(" (D3D12_DECODE_FILTER_REDUCTION(filter) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON)") typedef enum D3D12_TEXTURE_ADDRESS_MODE { D3D12_TEXTURE_ADDRESS_MODE_WRAP = 1, D3D12_TEXTURE_ADDRESS_MODE_MIRROR = 2, D3D12_TEXTURE_ADDRESS_MODE_CLAMP = 3, D3D12_TEXTURE_ADDRESS_MODE_BORDER = 4, D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 5, } D3D12_TEXTURE_ADDRESS_MODE; typedef enum D3D12_COMPARISON_FUNC { D3D12_COMPARISON_FUNC_NEVER = 1, D3D12_COMPARISON_FUNC_LESS = 2, D3D12_COMPARISON_FUNC_EQUAL = 3, D3D12_COMPARISON_FUNC_LESS_EQUAL = 4, D3D12_COMPARISON_FUNC_GREATER = 5, D3D12_COMPARISON_FUNC_NOT_EQUAL = 6, D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7, D3D12_COMPARISON_FUNC_ALWAYS = 8, } D3D12_COMPARISON_FUNC; typedef struct D3D12_STATIC_SAMPLER_DESC { D3D12_FILTER Filter; D3D12_TEXTURE_ADDRESS_MODE AddressU; D3D12_TEXTURE_ADDRESS_MODE AddressV; D3D12_TEXTURE_ADDRESS_MODE AddressW; FLOAT MipLODBias; UINT MaxAnisotropy; D3D12_COMPARISON_FUNC ComparisonFunc; D3D12_STATIC_BORDER_COLOR BorderColor; FLOAT MinLOD; FLOAT MaxLOD; UINT ShaderRegister; UINT RegisterSpace; D3D12_SHADER_VISIBILITY ShaderVisibility; } D3D12_STATIC_SAMPLER_DESC; typedef enum D3D12_ROOT_SIGNATURE_FLAGS { D3D12_ROOT_SIGNATURE_FLAG_NONE = 0x00, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x01, D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x02, D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x04, D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x08, D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10, D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40, } D3D12_ROOT_SIGNATURE_FLAGS; typedef struct D3D12_ROOT_SIGNATURE_DESC { UINT NumParameters; const D3D12_ROOT_PARAMETER *pParameters; UINT NumStaticSamplers; const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers; D3D12_ROOT_SIGNATURE_FLAGS Flags; } D3D12_ROOT_SIGNATURE_DESC; typedef struct D3D12_ROOT_SIGNATURE_DESC1 { UINT NumParameters; const D3D12_ROOT_PARAMETER1 *pParameters; UINT NumStaticSamplers; const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers; D3D12_ROOT_SIGNATURE_FLAGS Flags; } D3D12_ROOT_SIGNATURE_DESC1; typedef enum D3D_ROOT_SIGNATURE_VERSION { D3D_ROOT_SIGNATURE_VERSION_1 = 0x1, D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1, D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2, } D3D_ROOT_SIGNATURE_VERSION; typedef struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC { D3D_ROOT_SIGNATURE_VERSION Version; union { D3D12_ROOT_SIGNATURE_DESC Desc_1_0; D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1; }; } D3D12_VERSIONED_ROOT_SIGNATURE_DESC; typedef enum D3D12_DESCRIPTOR_HEAP_TYPE { D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, D3D12_DESCRIPTOR_HEAP_TYPE_RTV, D3D12_DESCRIPTOR_HEAP_TYPE_DSV, D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES, } D3D12_DESCRIPTOR_HEAP_TYPE; typedef enum D3D12_DESCRIPTOR_HEAP_FLAGS { D3D12_DESCRIPTOR_HEAP_FLAG_NONE = 0x0, D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1, } D3D12_DESCRIPTOR_HEAP_FLAGS; typedef struct D3D12_DESCRIPTOR_HEAP_DESC { D3D12_DESCRIPTOR_HEAP_TYPE Type; UINT NumDescriptors; D3D12_DESCRIPTOR_HEAP_FLAGS Flags; UINT NodeMask; } D3D12_DESCRIPTOR_HEAP_DESC; typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS; typedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC { D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; UINT SizeInBytes; } D3D12_CONSTANT_BUFFER_VIEW_DESC; typedef enum D3D12_SRV_DIMENSION { D3D12_SRV_DIMENSION_UNKNOWN = 0, D3D12_SRV_DIMENSION_BUFFER = 1, D3D12_SRV_DIMENSION_TEXTURE1D = 2, D3D12_SRV_DIMENSION_TEXTURE1DARRAY = 3, D3D12_SRV_DIMENSION_TEXTURE2D = 4, D3D12_SRV_DIMENSION_TEXTURE2DARRAY = 5, D3D12_SRV_DIMENSION_TEXTURE2DMS = 6, D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7, D3D12_SRV_DIMENSION_TEXTURE3D = 8, D3D12_SRV_DIMENSION_TEXTURECUBE = 9, D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10, } D3D12_SRV_DIMENSION; typedef enum D3D12_BUFFER_SRV_FLAGS { D3D12_BUFFER_SRV_FLAG_NONE = 0x0, D3D12_BUFFER_SRV_FLAG_RAW = 0x1, } D3D12_BUFFER_SRV_FLAGS; typedef enum D3D12_SHADER_COMPONENT_MAPPING { D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0, D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1, D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2, D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3, D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0 = 4, D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1 = 5, } D3D12_SHADER_COMPONENT_MAPPING; cpp_quote("#define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(x, y, z, w) \\") cpp_quote(" (((x) & D3D12_SHADER_COMPONENT_MAPPING_MASK) \\") cpp_quote(" | (((y) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << D3D12_SHADER_COMPONENT_MAPPING_SHIFT) \\") cpp_quote(" | (((z) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 2)) \\") cpp_quote(" | (((w) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 3)) \\") cpp_quote(" | D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES)") cpp_quote("#define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0, 1, 2, 3)") typedef struct D3D12_BUFFER_SRV { UINT64 FirstElement; UINT NumElements; UINT StructureByteStride; D3D12_BUFFER_SRV_FLAGS Flags; } D3D12_BUFFER_SRV; typedef struct D3D12_TEX1D_SRV { UINT MostDetailedMip; UINT MipLevels; FLOAT ResourceMinLODClamp; } D3D12_TEX1D_SRV; typedef struct D3D12_TEX1D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; FLOAT ResourceMinLODClamp; } D3D12_TEX1D_ARRAY_SRV; typedef struct D3D12_TEX2D_SRV { UINT MostDetailedMip; UINT MipLevels; UINT PlaneSlice; FLOAT ResourceMinLODClamp; } D3D12_TEX2D_SRV; typedef struct D3D12_TEX2D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; UINT PlaneSlice; FLOAT ResourceMinLODClamp; } D3D12_TEX2D_ARRAY_SRV; typedef struct D3D12_TEX2DMS_SRV { UINT UnusedField_NothingToDefine; } D3D12_TEX2DMS_SRV; typedef struct D3D12_TEX2DMS_ARRAY_SRV { UINT FirstArraySlice; UINT ArraySize; } D3D12_TEX2DMS_ARRAY_SRV; typedef struct D3D12_TEX3D_SRV { UINT MostDetailedMip; UINT MipLevels; FLOAT ResourceMinLODClamp; } D3D12_TEX3D_SRV; typedef struct D3D12_TEXCUBE_SRV { UINT MostDetailedMip; UINT MipLevels; FLOAT ResourceMinLODClamp; } D3D12_TEXCUBE_SRV; typedef struct D3D12_TEXCUBE_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT First2DArrayFace; UINT NumCubes; FLOAT ResourceMinLODClamp; } D3D12_TEXCUBE_ARRAY_SRV; typedef struct D3D12_SHADER_RESOURCE_VIEW_DESC { DXGI_FORMAT Format; D3D12_SRV_DIMENSION ViewDimension; UINT Shader4ComponentMapping; union { D3D12_BUFFER_SRV Buffer; D3D12_TEX1D_SRV Texture1D; D3D12_TEX1D_ARRAY_SRV Texture1DArray; D3D12_TEX2D_SRV Texture2D; D3D12_TEX2D_ARRAY_SRV Texture2DArray; D3D12_TEX2DMS_SRV Texture2DMS; D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray; D3D12_TEX3D_SRV Texture3D; D3D12_TEXCUBE_SRV TextureCube; D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray; }; } D3D12_SHADER_RESOURCE_VIEW_DESC; typedef enum D3D12_UAV_DIMENSION { D3D12_UAV_DIMENSION_UNKNOWN = 0, D3D12_UAV_DIMENSION_BUFFER = 1, D3D12_UAV_DIMENSION_TEXTURE1D = 2, D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3, D3D12_UAV_DIMENSION_TEXTURE2D = 4, D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5, D3D12_UAV_DIMENSION_TEXTURE3D = 8, } D3D12_UAV_DIMENSION; typedef enum D3D12_BUFFER_UAV_FLAGS { D3D12_BUFFER_UAV_FLAG_NONE = 0x0, D3D12_BUFFER_UAV_FLAG_RAW = 0x1, } D3D12_BUFFER_UAV_FLAGS; typedef struct D3D12_BUFFER_UAV { UINT64 FirstElement; UINT NumElements; UINT StructureByteStride; UINT64 CounterOffsetInBytes; D3D12_BUFFER_UAV_FLAGS Flags; } D3D12_BUFFER_UAV; typedef struct D3D12_TEX1D_UAV { UINT MipSlice; } D3D12_TEX1D_UAV; typedef struct D3D12_TEX1D_ARRAY_UAV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D12_TEX1D_ARRAY_UAV; typedef struct D3D12_TEX2D_UAV { UINT MipSlice; UINT PlaneSlice; } D3D12_TEX2D_UAV; typedef struct D3D12_TEX2D_ARRAY_UAV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; UINT PlaneSlice; } D3D12_TEX2D_ARRAY_UAV; typedef struct D3D12_TEX3D_UAV { UINT MipSlice; UINT FirstWSlice; UINT WSize; } D3D12_TEX3D_UAV; typedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC { DXGI_FORMAT Format; D3D12_UAV_DIMENSION ViewDimension; union { D3D12_BUFFER_UAV Buffer; D3D12_TEX1D_UAV Texture1D; D3D12_TEX1D_ARRAY_UAV Texture1DArray; D3D12_TEX2D_UAV Texture2D; D3D12_TEX2D_ARRAY_UAV Texture2DArray; D3D12_TEX3D_UAV Texture3D; }; } D3D12_UNORDERED_ACCESS_VIEW_DESC; typedef enum D3D12_RTV_DIMENSION { D3D12_RTV_DIMENSION_UNKNOWN = 0, D3D12_RTV_DIMENSION_BUFFER = 1, D3D12_RTV_DIMENSION_TEXTURE1D = 2, D3D12_RTV_DIMENSION_TEXTURE1DARRAY = 3, D3D12_RTV_DIMENSION_TEXTURE2D = 4, D3D12_RTV_DIMENSION_TEXTURE2DARRAY = 5, D3D12_RTV_DIMENSION_TEXTURE2DMS = 6, D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7, D3D12_RTV_DIMENSION_TEXTURE3D = 8, } D3D12_RTV_DIMENSION; typedef struct D3D12_BUFFER_RTV { UINT64 FirstElement; UINT NumElements; } D3D12_BUFFER_RTV; typedef struct D3D12_TEX1D_RTV { UINT MipSlice; } D3D12_TEX1D_RTV; typedef struct D3D12_TEX1D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D12_TEX1D_ARRAY_RTV; typedef struct D3D12_TEX2D_RTV { UINT MipSlice; UINT PlaneSlice; } D3D12_TEX2D_RTV; typedef struct D3D12_TEX2D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; UINT PlaneSlice; } D3D12_TEX2D_ARRAY_RTV; typedef struct D3D12_TEX2DMS_RTV { UINT UnusedField_NothingToDefine; } D3D12_TEX2DMS_RTV; typedef struct D3D12_TEX2DMS_ARRAY_RTV { UINT FirstArraySlice; UINT ArraySize; } D3D12_TEX2DMS_ARRAY_RTV; typedef struct D3D12_TEX3D_RTV { UINT MipSlice; UINT FirstWSlice; UINT WSize; } D3D12_TEX3D_RTV; typedef struct D3D12_RENDER_TARGET_VIEW_DESC { DXGI_FORMAT Format; D3D12_RTV_DIMENSION ViewDimension; union { D3D12_BUFFER_RTV Buffer; D3D12_TEX1D_RTV Texture1D; D3D12_TEX1D_ARRAY_RTV Texture1DArray; D3D12_TEX2D_RTV Texture2D; D3D12_TEX2D_ARRAY_RTV Texture2DArray; D3D12_TEX2DMS_RTV Texture2DMS; D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray; D3D12_TEX3D_RTV Texture3D; }; } D3D12_RENDER_TARGET_VIEW_DESC; typedef enum D3D12_DSV_DIMENSION { D3D12_DSV_DIMENSION_UNKNOWN = 0, D3D12_DSV_DIMENSION_TEXTURE1D = 1, D3D12_DSV_DIMENSION_TEXTURE1DARRAY = 2, D3D12_DSV_DIMENSION_TEXTURE2D = 3, D3D12_DSV_DIMENSION_TEXTURE2DARRAY = 4, D3D12_DSV_DIMENSION_TEXTURE2DMS = 5, D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6, } D3D12_DSV_DIMENSION; typedef enum D3D12_DSV_FLAGS { D3D12_DSV_FLAG_NONE = 0x0, D3D12_DSV_FLAG_READ_ONLY_DEPTH = 0x1, D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2, } D3D12_DSV_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_DSV_FLAGS);") typedef struct D3D12_TEX1D_DSV { UINT MipSlice; } D3D12_TEX1D_DSV; typedef struct D3D12_TEX1D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D12_TEX1D_ARRAY_DSV; typedef struct D3D12_TEX2D_DSV { UINT MipSlice; } D3D12_TEX2D_DSV; typedef struct D3D12_TEX2D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D12_TEX2D_ARRAY_DSV; typedef struct D3D12_TEX2DMS_DSV { UINT UnusedField_NothingToDefine; } D3D12_TEX2DMS_DSV; typedef struct D3D12_TEX2DMS_ARRAY_DSV { UINT FirstArraySlice; UINT ArraySize; } D3D12_TEX2DMS_ARRAY_DSV; typedef struct D3D12_DEPTH_STENCIL_VIEW_DESC { DXGI_FORMAT Format; D3D12_DSV_DIMENSION ViewDimension; D3D12_DSV_FLAGS Flags; union { D3D12_TEX1D_DSV Texture1D; D3D12_TEX1D_ARRAY_DSV Texture1DArray; D3D12_TEX2D_DSV Texture2D; D3D12_TEX2D_ARRAY_DSV Texture2DArray; D3D12_TEX2DMS_DSV Texture2DMS; D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray; }; } D3D12_DEPTH_STENCIL_VIEW_DESC; typedef struct D3D12_SAMPLER_DESC { D3D12_FILTER Filter; D3D12_TEXTURE_ADDRESS_MODE AddressU; D3D12_TEXTURE_ADDRESS_MODE AddressV; D3D12_TEXTURE_ADDRESS_MODE AddressW; FLOAT MipLODBias; UINT MaxAnisotropy; D3D12_COMPARISON_FUNC ComparisonFunc; FLOAT BorderColor[4]; FLOAT MinLOD; FLOAT MaxLOD; } D3D12_SAMPLER_DESC; typedef struct D3D12_CPU_DESCRIPTOR_HANDLE { SIZE_T ptr; } D3D12_CPU_DESCRIPTOR_HANDLE; typedef struct D3D12_GPU_DESCRIPTOR_HANDLE { UINT64 ptr; } D3D12_GPU_DESCRIPTOR_HANDLE; typedef enum D3D12_STENCIL_OP { D3D12_STENCIL_OP_KEEP = 1, D3D12_STENCIL_OP_ZERO = 2, D3D12_STENCIL_OP_REPLACE = 3, D3D12_STENCIL_OP_INCR_SAT = 4, D3D12_STENCIL_OP_DECR_SAT = 5, D3D12_STENCIL_OP_INVERT = 6, D3D12_STENCIL_OP_INCR = 7, D3D12_STENCIL_OP_DECR = 8, } D3D12_STENCIL_OP; typedef struct D3D12_DEPTH_STENCILOP_DESC { D3D12_STENCIL_OP StencilFailOp; D3D12_STENCIL_OP StencilDepthFailOp; D3D12_STENCIL_OP StencilPassOp; D3D12_COMPARISON_FUNC StencilFunc; } D3D12_DEPTH_STENCILOP_DESC; typedef enum D3D12_DEPTH_WRITE_MASK { D3D12_DEPTH_WRITE_MASK_ZERO = 0, D3D12_DEPTH_WRITE_MASK_ALL = 1, } D3D12_DEPTH_WRITE_MASK; typedef struct D3D12_DEPTH_STENCIL_DESC { BOOL DepthEnable; D3D12_DEPTH_WRITE_MASK DepthWriteMask; D3D12_COMPARISON_FUNC DepthFunc; BOOL StencilEnable; UINT8 StencilReadMask; UINT8 StencilWriteMask; D3D12_DEPTH_STENCILOP_DESC FrontFace; D3D12_DEPTH_STENCILOP_DESC BackFace; } D3D12_DEPTH_STENCIL_DESC; typedef enum D3D12_BLEND { D3D12_BLEND_ZERO = 1, D3D12_BLEND_ONE = 2, D3D12_BLEND_SRC_COLOR = 3, D3D12_BLEND_INV_SRC_COLOR = 4, D3D12_BLEND_SRC_ALPHA = 5, D3D12_BLEND_INV_SRC_ALPHA = 6, D3D12_BLEND_DEST_ALPHA = 7, D3D12_BLEND_INV_DEST_ALPHA = 8, D3D12_BLEND_DEST_COLOR = 9, D3D12_BLEND_INV_DEST_COLOR = 10, D3D12_BLEND_SRC_ALPHA_SAT = 11, D3D12_BLEND_BLEND_FACTOR = 14, D3D12_BLEND_INV_BLEND_FACTOR = 15, D3D12_BLEND_SRC1_COLOR = 16, D3D12_BLEND_INV_SRC1_COLOR = 17, D3D12_BLEND_SRC1_ALPHA = 18, D3D12_BLEND_INV_SRC1_ALPHA = 19, } D3D12_BLEND; typedef enum D3D12_BLEND_OP { D3D12_BLEND_OP_ADD = 1, D3D12_BLEND_OP_SUBTRACT = 2, D3D12_BLEND_OP_REV_SUBTRACT = 3, D3D12_BLEND_OP_MIN = 4, D3D12_BLEND_OP_MAX = 5, } D3D12_BLEND_OP; typedef enum D3D12_LOGIC_OP { D3D12_LOGIC_OP_CLEAR = 0, D3D12_LOGIC_OP_SET = 1, D3D12_LOGIC_OP_COPY = 2, D3D12_LOGIC_OP_COPY_INVERTED = 3, D3D12_LOGIC_OP_NOOP = 4, } D3D12_LOGIC_OP; typedef enum D3D12_COLOR_WRITE_ENABLE { D3D12_COLOR_WRITE_ENABLE_RED = 0x1, D3D12_COLOR_WRITE_ENABLE_GREEN = 0x2, D3D12_COLOR_WRITE_ENABLE_BLUE = 0x4, D3D12_COLOR_WRITE_ENABLE_ALPHA = 0x8, D3D12_COLOR_WRITE_ENABLE_ALL = (D3D12_COLOR_WRITE_ENABLE_RED\ | D3D12_COLOR_WRITE_ENABLE_GREEN | D3D12_COLOR_WRITE_ENABLE_BLUE\ | D3D12_COLOR_WRITE_ENABLE_ALPHA), } D3D12_COLOR_WRITE_ENABLE; typedef struct D3D12_RENDER_TARGET_BLEND_DESC { BOOL BlendEnable; BOOL LogicOpEnable; D3D12_BLEND SrcBlend; D3D12_BLEND DestBlend; D3D12_BLEND_OP BlendOp; D3D12_BLEND SrcBlendAlpha; D3D12_BLEND DestBlendAlpha; D3D12_BLEND_OP BlendOpAlpha; D3D12_LOGIC_OP LogicOp; UINT8 RenderTargetWriteMask; } D3D12_RENDER_TARGET_BLEND_DESC; typedef struct D3D12_BLEND_DESC { BOOL AlphaToCoverageEnable; BOOL IndependentBlendEnable; D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT]; } D3D12_BLEND_DESC; typedef enum D3D12_FILL_MODE { D3D12_FILL_MODE_WIREFRAME = 2, D3D12_FILL_MODE_SOLID = 3, } D3D12_FILL_MODE; typedef enum D3D12_CULL_MODE { D3D12_CULL_MODE_NONE = 1, D3D12_CULL_MODE_FRONT = 2, D3D12_CULL_MODE_BACK = 3, } D3D12_CULL_MODE; typedef enum D3D12_CONSERVATIVE_RASTERIZATION_MODE { D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0, D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON = 1, } D3D12_CONSERVATIVE_RASTERIZATION_MODE; typedef struct D3D12_RASTERIZER_DESC { D3D12_FILL_MODE FillMode; D3D12_CULL_MODE CullMode; BOOL FrontCounterClockwise; INT DepthBias; FLOAT DepthBiasClamp; FLOAT SlopeScaledDepthBias; BOOL DepthClipEnable; BOOL MultisampleEnable; BOOL AntialiasedLineEnable; UINT ForcedSampleCount; D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster; } D3D12_RASTERIZER_DESC; typedef struct D3D12_SO_DECLARATION_ENTRY { UINT Stream; const char *SemanticName; UINT SemanticIndex; BYTE StartComponent; BYTE ComponentCount; BYTE OutputSlot; } D3D12_SO_DECLARATION_ENTRY; typedef struct D3D12_STREAM_OUTPUT_DESC { const D3D12_SO_DECLARATION_ENTRY *pSODeclaration; UINT NumEntries; const UINT *pBufferStrides; UINT NumStrides; UINT RasterizedStream; } D3D12_STREAM_OUTPUT_DESC; typedef enum D3D12_INPUT_CLASSIFICATION { D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA = 0, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1, } D3D12_INPUT_CLASSIFICATION; typedef struct D3D12_INPUT_ELEMENT_DESC { const char *SemanticName; UINT SemanticIndex; DXGI_FORMAT Format; UINT InputSlot; UINT AlignedByteOffset; D3D12_INPUT_CLASSIFICATION InputSlotClass; UINT InstanceDataStepRate; } D3D12_INPUT_ELEMENT_DESC; typedef struct D3D12_INPUT_LAYOUT_DESC { const D3D12_INPUT_ELEMENT_DESC *pInputElementDescs; UINT NumElements; } D3D12_INPUT_LAYOUT_DESC; typedef enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE { D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0, D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF = 1, D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2, } D3D12_INDEX_BUFFER_STRIP_CUT_VALUE; typedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY; typedef enum D3D12_PRIMITIVE_TOPOLOGY_TYPE { D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0, D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1, D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE = 2, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE = 3, D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4, } D3D12_PRIMITIVE_TOPOLOGY_TYPE; typedef struct D3D12_CACHED_PIPELINE_STATE { const void *pCachedBlob; SIZE_T CachedBlobSizeInBytes; } D3D12_CACHED_PIPELINE_STATE; typedef enum D3D12_PIPELINE_STATE_FLAGS { D3D12_PIPELINE_STATE_FLAG_NONE = 0x0, D3D12_PIPELINE_STATE_FLAG_DEBUG = 0x1, } D3D12_PIPELINE_STATE_FLAGS; typedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC { ID3D12RootSignature *pRootSignature; D3D12_SHADER_BYTECODE VS; D3D12_SHADER_BYTECODE PS; D3D12_SHADER_BYTECODE DS; D3D12_SHADER_BYTECODE HS; D3D12_SHADER_BYTECODE GS; D3D12_STREAM_OUTPUT_DESC StreamOutput; D3D12_BLEND_DESC BlendState; UINT SampleMask; D3D12_RASTERIZER_DESC RasterizerState; D3D12_DEPTH_STENCIL_DESC DepthStencilState; D3D12_INPUT_LAYOUT_DESC InputLayout; D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue; D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType; UINT NumRenderTargets; DXGI_FORMAT RTVFormats[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT]; DXGI_FORMAT DSVFormat; DXGI_SAMPLE_DESC SampleDesc; UINT NodeMask; D3D12_CACHED_PIPELINE_STATE CachedPSO; D3D12_PIPELINE_STATE_FLAGS Flags; } D3D12_GRAPHICS_PIPELINE_STATE_DESC; typedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC { ID3D12RootSignature *pRootSignature; D3D12_SHADER_BYTECODE CS; UINT NodeMask; D3D12_CACHED_PIPELINE_STATE CachedPSO; D3D12_PIPELINE_STATE_FLAGS Flags; } D3D12_COMPUTE_PIPELINE_STATE_DESC; typedef enum D3D12_COMMAND_LIST_TYPE { D3D12_COMMAND_LIST_TYPE_DIRECT = 0, D3D12_COMMAND_LIST_TYPE_BUNDLE = 1, D3D12_COMMAND_LIST_TYPE_COMPUTE = 2, D3D12_COMMAND_LIST_TYPE_COPY = 3, } D3D12_COMMAND_LIST_TYPE; typedef enum D3D12_COMMAND_QUEUE_PRIORITY { D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0, D3D12_COMMAND_QUEUE_PRIORITY_HIGH = 100, } D3D12_COMMAND_QUEUE_PRIORITY; typedef enum D3D12_COMMAND_QUEUE_FLAGS { D3D12_COMMAND_QUEUE_FLAG_NONE = 0x0, D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1, } D3D12_COMMAND_QUEUE_FLAGS; typedef struct D3D12_COMMAND_QUEUE_DESC { D3D12_COMMAND_LIST_TYPE Type; INT Priority; D3D12_COMMAND_QUEUE_FLAGS Flags; UINT NodeMask; } D3D12_COMMAND_QUEUE_DESC; typedef struct D3D12_FEATURE_DATA_ARCHITECTURE { UINT NodeIndex; BOOL TileBasedRenderer; BOOL UMA; BOOL CacheCoherentUMA; } D3D12_FEATURE_DATA_ARCHITECTURE; typedef struct D3D12_FEATURE_DATA_FORMAT_INFO { DXGI_FORMAT Format; UINT8 PlaneCount; } D3D12_FEATURE_DATA_FORMAT_INFO; typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS { UINT NumFeatureLevels; const D3D_FEATURE_LEVEL *pFeatureLevelsRequested; D3D_FEATURE_LEVEL MaxSupportedFeatureLevel; } D3D12_FEATURE_DATA_FEATURE_LEVELS; typedef enum D3D12_FEATURE { D3D12_FEATURE_D3D12_OPTIONS = 0, D3D12_FEATURE_ARCHITECTURE = 1, D3D12_FEATURE_FEATURE_LEVELS = 2, D3D12_FEATURE_FORMAT_SUPPORT = 3, D3D12_FEATURE_FORMAT_INFO = 4, D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = 5, } D3D12_FEATURE; typedef struct D3D12_MEMCPY_DEST { void *pData; SIZE_T RowPitch; SIZE_T SlicePitch; } D3D12_MEMCPY_DEST; typedef struct D3D12_SUBRESOURCE_DATA { const void *pData; LONG_PTR RowPitch; LONG_PTR SlicePitch; } D3D12_SUBRESOURCE_DATA; [ uuid(c4fec28f-7966-4e95-9f94-f431cb56c3b8), object, local, pointer_default(unique) ] interface ID3D12Object : IUnknown { HRESULT GetPrivateData(REFGUID guid, UINT *data_size, void *data); HRESULT SetPrivateData(REFGUID guid, UINT data_size, const void *data); HRESULT SetPrivateDataInterface(REFGUID guid, const IUnknown *data); HRESULT SetName(const WCHAR *name); } [ uuid(905db94b-a00c-4140-9df5-2b64ca9ea357), object, local, pointer_default(unique) ] interface ID3D12DeviceChild : ID3D12Object { HRESULT GetDevice(REFIID riid, void **device); } [ uuid(63ee58fb-1268-4835-86da-f008ce62f0d6), object, local, pointer_default(unique) ] interface ID3D12Pageable : ID3D12DeviceChild { } [ uuid(696442be-a72e-4059-bc79-5b5c98040fad), object, local, pointer_default(unique) ] interface ID3D12Resource : ID3D12Pageable { HRESULT Map(UINT sub_resource, const D3D12_RANGE *read_range, void **data); void Unmap(UINT sub_resource, const D3D12_RANGE *written_range); D3D12_RESOURCE_DESC GetDesc(); D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress(); HRESULT WriteToSubresource(UINT dst_sub_resource, const D3D12_BOX *dst_box, const void *src_data, UINT src_row_pitch, UINT src_slice_pitch); HRESULT ReadFromSubresource(void *dst_data, UINT dst_row_pitch, UINT dst_slice_pitch, UINT src_sub_resource, const D3D12_BOX *src_box); HRESULT GetHeapProperties(D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS *flags); } [ uuid(7116d91c-e7e4-47ce-b8c6-ec8168f437e5), object, local, pointer_default(unique) ] interface ID3D12CommandList : ID3D12DeviceChild { D3D12_COMMAND_LIST_TYPE GetType(); } typedef enum D3D12_TILE_COPY_FLAGS { D3D12_TILE_COPY_FLAG_NONE = 0x0, D3D12_TILE_COPY_FLAG_NO_HAZARD = 0x1, D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2, D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4, } D3D12_TILE_COPY_FLAGS; typedef struct D3D12_INDEX_BUFFER_VIEW { D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; UINT SizeInBytes; DXGI_FORMAT Format; } D3D12_INDEX_BUFFER_VIEW; typedef struct D3D12_VERTEX_BUFFER_VIEW { D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; UINT SizeInBytes; UINT StrideInBytes; } D3D12_VERTEX_BUFFER_VIEW; typedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW { D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; UINT64 SizeInBytes; D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation; } D3D12_STREAM_OUTPUT_BUFFER_VIEW; typedef enum D3D12_CLEAR_FLAGS { D3D12_CLEAR_FLAG_DEPTH = 0x1, D3D12_CLEAR_FLAG_STENCIL = 0x2, } D3D12_CLEAR_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_CLEAR_FLAGS);") typedef struct D3D12_DISCARD_REGION { UINT NumRects; const D3D12_RECT *pRects; UINT FirstSubresource; UINT NumSubresources; } D3D12_DISCARD_REGION; typedef enum D3D12_QUERY_TYPE { D3D12_QUERY_TYPE_OCCLUSION = 0, D3D12_QUERY_TYPE_BINARY_OCCLUSION = 1, D3D12_QUERY_TYPE_TIMESTAMP = 2, D3D12_QUERY_TYPE_PIPELINE_STATISTICS = 3, D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4, D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5, D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6, D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7, } D3D12_QUERY_TYPE; typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS { UINT64 IAVertices; UINT64 IAPrimitives; UINT64 VSInvocations; UINT64 GSInvocations; UINT64 GSPrimitives; UINT64 CInvocations; UINT64 CPrimitives; UINT64 PSInvocations; UINT64 HSInvocations; UINT64 DSInvocations; UINT64 CSInvocations; } D3D12_QUERY_DATA_PIPELINE_STATISTICS; typedef enum D3D12_PREDICATION_OP { D3D12_PREDICATION_OP_EQUAL_ZERO = 0, D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1, } D3D12_PREDICATION_OP; [ uuid(8efb471d-616c-4f49-90f7-127bb763fa51), object, local, pointer_default(unique) ] interface ID3D12DescriptorHeap : ID3D12Pageable { D3D12_DESCRIPTOR_HEAP_DESC GetDesc(); D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart(); D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart(); } [ uuid(0d9658ae-ed45-469e-a61d-970ec583cab4), object, local, pointer_default(unique) ] interface ID3D12QueryHeap : ID3D12Pageable { } [ uuid(c36a797c-ec80-4f0a-8985-a7b2475082d1), object, local, pointer_default(unique) ] interface ID3D12CommandSignature : ID3D12Pageable { } [ uuid(5b160d0f-ac1b-4185-8ba8-b3ae42a5a455), object, local, pointer_default(unique) ] interface ID3D12GraphicsCommandList : ID3D12CommandList { HRESULT Close(); HRESULT Reset(ID3D12CommandAllocator *allocator, ID3D12PipelineState *initial_state); HRESULT ClearState(ID3D12PipelineState *pipeline_state); void DrawInstanced(UINT vertex_count_per_instance, UINT instance_count, UINT start_vertex_location, UINT start_instance_location); void DrawIndexedInstanced(UINT index_count_per_instance, UINT instance_count, UINT start_vertex_location, INT base_vertex_location, UINT start_instance_location); void Dispatch(UINT x, UINT u, UINT z); void CopyBufferRegion(ID3D12Resource *dst_buffer, UINT64 dst_offset, ID3D12Resource *src_buffer, UINT64 src_offset, UINT64 byte_count); void CopyTextureRegion(const D3D12_TEXTURE_COPY_LOCATION *dst, UINT dst_x, UINT dst_y, UINT dst_z, const D3D12_TEXTURE_COPY_LOCATION *src, const D3D12_BOX *src_box); void CopyResource(ID3D12Resource *dst_resource, ID3D12Resource *src_resource); void CopyTiles(ID3D12Resource *tiled_resource, const D3D12_TILED_RESOURCE_COORDINATE *tile_region_start_coordinate, const D3D12_TILE_REGION_SIZE *tile_region_size, ID3D12Resource *buffer, UINT64 buffer_offset, D3D12_TILE_COPY_FLAGS flags); void ResolveSubresource(ID3D12Resource *dst_resource, UINT dst_sub_resource, ID3D12Resource *src_resource, UINT src_sub_resource, DXGI_FORMAT format); void IASetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY primitive_topology); void RSSetViewports(UINT viewport_count, const D3D12_VIEWPORT *viewports); void RSSetScissorRects(UINT rect_count, const D3D12_RECT *rects); void OMSetBlendFactor(const FLOAT blend_factor[4]); void OMSetStencilRef(UINT stencil_ref); void SetPipelineState(ID3D12PipelineState *pipeline_state); void ResourceBarrier(UINT barrier_count, const D3D12_RESOURCE_BARRIER *barriers); void ExecuteBundle(ID3D12GraphicsCommandList *command_list); void SetDescriptorHeaps(UINT heap_count, ID3D12DescriptorHeap * const *heaps); void SetComputeRootSignature(ID3D12RootSignature *root_signature); void SetGraphicsRootSignature(ID3D12RootSignature *root_signature); void SetComputeRootDescriptorTable(UINT root_parameter_index, D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor); void SetGraphicsRootDescriptorTable(UINT root_parameter_index, D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor); void SetComputeRoot32BitConstant(UINT root_parameter_index, UINT data, UINT dst_offset); void SetGraphicsRoot32BitConstant(UINT root_parameter_index, UINT data, UINT dst_offset); void SetComputeRoot32BitConstants(UINT root_parameter_index, UINT constant_count, const void *data, UINT dst_offset); void SetGraphicsRoot32BitConstants(UINT root_parameter_index, UINT constant_count, const void *data, UINT dst_offset); void SetComputeRootConstantBufferView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address); void SetGraphicsRootConstantBufferView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address); void SetComputeRootShaderResourceView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address); void SetGraphicsRootShaderResourceView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address); void SetComputeRootUnorderedAccessView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address); void SetGraphicsRootUnorderedAccessView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address); void IASetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW *view); void IASetVertexBuffers(UINT start_slot, UINT view_count, const D3D12_VERTEX_BUFFER_VIEW *views); void SOSetTargets(UINT start_slot, UINT view_count, const D3D12_STREAM_OUTPUT_BUFFER_VIEW *views); void OMSetRenderTargets(UINT render_target_descriptor_count, const D3D12_CPU_DESCRIPTOR_HANDLE *render_target_descriptors, BOOL single_descriptor_handle, const D3D12_CPU_DESCRIPTOR_HANDLE *depth_stencil_descriptor); void ClearDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE dsv, D3D12_CLEAR_FLAGS flags, FLOAT depth, UINT8 stencil, UINT rect_count, const D3D12_RECT *rects); void ClearRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE rtv, const FLOAT color[4], UINT rect_count, const D3D12_RECT *rects); void ClearUnorderedAccessViewUint(D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle, D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle, ID3D12Resource *resource, const UINT values[4], UINT rect_count, const D3D12_RECT *rects); void ClearUnorderedAccessViewFloat(D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle, D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle, ID3D12Resource *resource, const float values[4], UINT rect_count, const D3D12_RECT *rects); void DiscardResource(ID3D12Resource *resource, const D3D12_DISCARD_REGION *region); void BeginQuery(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type, UINT index); void EndQuery(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type, UINT index); void ResolveQueryData(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type, UINT start_index, UINT query_count, ID3D12Resource *dst_buffer, UINT64 aligned_dst_buffer_offset); void SetPredication(ID3D12Resource *buffer, UINT64 aligned_buffer_offset, D3D12_PREDICATION_OP operation); void SetMarker(UINT metadata, const void *data, UINT size); void BeginEvent(UINT metadata, const void *data, UINT size); void EndEvent(); void ExecuteIndirect(ID3D12CommandSignature *command_signature, UINT max_command_count, ID3D12Resource *arg_buffer, UINT64 arg_buffer_offset, ID3D12Resource *count_buffer, UINT64 count_buffer_offset); } typedef enum D3D12_TILE_RANGE_FLAGS { D3D12_TILE_RANGE_FLAG_NONE = 0x0, D3D12_TILE_RANGE_FLAG_NULL = 0x1, D3D12_TILE_RANGE_FLAG_SKIP = 0x2, D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 0x4 } D3D12_TILE_RANGE_FLAGS; typedef enum D3D12_TILE_MAPPING_FLAGS { D3D12_TILE_MAPPING_FLAG_NONE = 0x0, D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1, } D3D12_TILE_MAPPING_FLAGS; [ uuid(0ec870a6-5d7e-4c22-8cfc-5baae07616ed), object, local, pointer_default(unique) ] interface ID3D12CommandQueue : ID3D12Pageable { void UpdateTileMappings(ID3D12Resource *resource, UINT region_count, const D3D12_TILED_RESOURCE_COORDINATE *region_start_coordinates, const D3D12_TILE_REGION_SIZE *region_sizes, UINT range_count, const D3D12_TILE_RANGE_FLAGS *range_flags, UINT *heap_range_offsets, UINT *range_tile_counts, D3D12_TILE_MAPPING_FLAGS flags); void CopyTileMappings(ID3D12Resource *dst_resource, const D3D12_TILED_RESOURCE_COORDINATE *dst_region_start_coordinate, ID3D12Resource *src_resource, const D3D12_TILED_RESOURCE_COORDINATE *src_region_start_coordinate, const D3D12_TILE_REGION_SIZE *region_size, D3D12_TILE_MAPPING_FLAGS flags); void ExecuteCommandLists(UINT command_list_count, ID3D12CommandList * const * command_lists); void SetMarker(UINT metadata, const void *data, UINT size); void BeginEvent(UINT metadata, const void *data, UINT size); void EndEvent(); HRESULT Signal(ID3D12Fence *fence, UINT64 value); HRESULT Wait(ID3D12Fence *fence, UINT64 value); HRESULT GetTimestampFrequency(UINT64 *frequency); HRESULT GetClockCalibration(UINT64 *gpu_timestamp, UINT64 *cpu_timestamp); D3D12_COMMAND_QUEUE_DESC GetDesc(); } typedef enum D3D12_FENCE_FLAGS { D3D12_FENCE_FLAG_NONE = 0x0, D3D12_FENCE_FLAG_SHARED = 0x1, D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2, } D3D12_FENCE_FLAGS; typedef enum D3D12_QUERY_HEAP_TYPE { D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0, D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1, D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2, D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3, } D3D12_QUERY_HEAP_TYPE; typedef struct D3D12_QUERY_HEAP_DESC { D3D12_QUERY_HEAP_TYPE Type; UINT Count; UINT NodeMask; } D3D12_QUERY_HEAP_DESC; typedef enum D3D12_INDIRECT_ARGUMENT_TYPE { D3D12_INDIRECT_ARGUMENT_TYPE_DRAW, D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED, D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH, D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW, D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW, D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT, D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW, D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW, D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW, } D3D12_INDIRECT_ARGUMENT_TYPE; typedef struct D3D12_INDIRECT_ARGUMENT_DESC { D3D12_INDIRECT_ARGUMENT_TYPE Type; union { struct { UINT Slot; } VertexBuffer; struct { UINT RootParameterIndex; UINT DestOffsetIn32BitValues; UINT Num32BitValuesToSet; } Constant; struct { UINT RootParameterIndex; } ConstantBufferView; struct { UINT RootParameterIndex; } ShaderResourceView; struct { UINT RootParameterIndex; } UnorderedAccessView; }; } D3D12_INDIRECT_ARGUMENT_DESC; typedef struct D3D12_COMMAND_SIGNATURE_DESC { UINT ByteStride; UINT NumArgumentDescs; const D3D12_INDIRECT_ARGUMENT_DESC *pArgumentDescs; UINT NodeMask; } D3D12_COMMAND_SIGNATURE_DESC; [ uuid(c54a6b66-72df-4ee8-8be5-a946a1429214), object, local, pointer_default(unique) ] interface ID3D12RootSignature : ID3D12DeviceChild { } [ uuid(765a30f3-f624-4c6f-a828-ace948622445), object, local, pointer_default(unique) ] interface ID3D12PipelineState : ID3D12Pageable { HRESULT GetCachedBlob(ID3DBlob **blob); } [ uuid(0a753dcf-c4d8-4b91-adf6-be5a60d95a76), object, local, pointer_default(unique) ] interface ID3D12Fence : ID3D12Pageable { UINT64 GetCompletedValue(); HRESULT SetEventOnCompletion(UINT64 value, HANDLE event); HRESULT Signal(UINT64 value); } [ uuid(6102dee4-af59-4b09-b999-b44d73f09b24), object, local, pointer_default(unique) ] interface ID3D12CommandAllocator : ID3D12Pageable { HRESULT Reset(); } [ uuid(189819f1-1db6-4b57-be54-1821339b85f7), object, local, pointer_default(unique) ] interface ID3D12Device : ID3D12Object { UINT GetNodeCount(); HRESULT CreateCommandQueue(const D3D12_COMMAND_QUEUE_DESC *desc, REFIID riid, void **command_queue); HRESULT CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE type, REFIID riid, void **command_allocator); HRESULT CreateGraphicsPipelineState(const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc, REFIID riid, void **pipeline_state); HRESULT CreateComputePipelineState(const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc, REFIID riid, void **pipeline_state); HRESULT CreateCommandList(UINT node_mask, D3D12_COMMAND_LIST_TYPE type, ID3D12CommandAllocator *command_allocator, ID3D12PipelineState *initial_pipeline_state, REFIID riid, void **command_list); HRESULT CheckFeatureSupport(D3D12_FEATURE feature, void *feature_data, UINT feature_data_size); HRESULT CreateDescriptorHeap(const D3D12_DESCRIPTOR_HEAP_DESC *desc, REFIID riid, void **descriptor_heap); UINT GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type); HRESULT CreateRootSignature(UINT node_mask, const void *bytecode, SIZE_T bytecode_length, REFIID riid, void **root_signature); void CreateConstantBufferView(const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc, D3D12_CPU_DESCRIPTOR_HANDLE descriptor); void CreateShaderResourceView(ID3D12Resource *resource, const D3D12_SHADER_RESOURCE_VIEW_DESC *desc, D3D12_CPU_DESCRIPTOR_HANDLE descriptor); void CreateUnorderedAccessView(ID3D12Resource *resource, ID3D12Resource *counter_resource, const D3D12_UNORDERED_ACCESS_VIEW_DESC *desc, D3D12_CPU_DESCRIPTOR_HANDLE descriptor); void CreateRenderTargetView(ID3D12Resource *resource, const D3D12_RENDER_TARGET_VIEW_DESC *desc, D3D12_CPU_DESCRIPTOR_HANDLE descriptor); void CreateDepthStencilView(ID3D12Resource *resource, const D3D12_DEPTH_STENCIL_VIEW_DESC *desc, D3D12_CPU_DESCRIPTOR_HANDLE descriptor); void CreateSampler(const D3D12_SAMPLER_DESC *desc, D3D12_CPU_DESCRIPTOR_HANDLE descriptor); void CopyDescriptors(UINT dst_descriptor_range_count, const D3D12_CPU_DESCRIPTOR_HANDLE *dst_descriptor_range_offsets, const UINT *dst_descriptor_range_sizes, UINT src_descriptor_range_count, const D3D12_CPU_DESCRIPTOR_HANDLE *src_descriptor_range_offsets, const UINT *src_descriptor_range_sizes, D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type); void CopyDescriptorsSimple(UINT descriptor_count, const D3D12_CPU_DESCRIPTOR_HANDLE dst_descriptor_range_offset, const D3D12_CPU_DESCRIPTOR_HANDLE src_descriptor_range_offset, D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type); D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(UINT visible_mask, UINT reource_desc_count, const D3D12_RESOURCE_DESC *resource_descs); D3D12_HEAP_PROPERTIES GetCustomHeapProperties(UINT node_mask, D3D12_HEAP_TYPE heap_type); HRESULT CreateCommittedResource(const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags, const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state, const D3D12_CLEAR_VALUE *optimized_clear_value, REFIID riid, void **resource); HRESULT CreateHeap(const D3D12_HEAP_DESC *desc, REFIID riid, void **heap); HRESULT CreatePlacedResource(ID3D12Heap *heap, UINT64 heap_offset, const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state, const D3D12_CLEAR_VALUE *optimized_clear_value, REFIID riid, void **resource); HRESULT CreateReservedResource(const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state, const D3D12_CLEAR_VALUE *optimized_clear_value, REFIID riid, void **resource); HRESULT CreateSharedHandle(ID3D12DeviceChild *object, const SECURITY_ATTRIBUTES *attributes, DWORD access, const WCHAR *name, HANDLE *handle); HRESULT OpenSharedHandle(HANDLE handle, REFIID riid, void **object); HRESULT OpenSharedHandleByName(const WCHAR *name, DWORD access, HANDLE *handle); HRESULT MakeResident(UINT object_count, ID3D12Pageable * const *objects); HRESULT Evict(UINT object_count, ID3D12Pageable * const *objects); HRESULT CreateFence(UINT64 initial_value, D3D12_FENCE_FLAGS flags, REFIID riid, void **fence); HRESULT GetDeviceRemovedReason(); void GetCopyableFootprints(const D3D12_RESOURCE_DESC *desc, UINT first_sub_resource, UINT sub_resource_count, UINT64 base_offset, D3D12_PLACED_SUBRESOURCE_FOOTPRINT *layouts, UINT *row_count, UINT64 *row_size, UINT64 *total_bytes); HRESULT CreateQueryHeap(const D3D12_QUERY_HEAP_DESC *desc, REFIID riid, void **heap); HRESULT SetStablePowerState(BOOL enable); HRESULT CreateCommandSignature(const D3D12_COMMAND_SIGNATURE_DESC *desc, ID3D12RootSignature *root_signature, REFIID riid, void **command_signature); void GetResourceTiling(ID3D12Resource *resource, UINT *total_tile_count, D3D12_PACKED_MIP_INFO *packed_mip_info, D3D12_TILE_SHAPE *standard_tile_shape, UINT *sub_resource_tiling_count, UINT first_sub_resource_tiling, D3D12_SUBRESOURCE_TILING *sub_resource_tilings); LUID GetAdapterLuid(); } [ uuid(344488b7-6846-474b-b989-f027448245e0), object, local, pointer_default(unique) ] interface ID3D12Debug : IUnknown { void EnableDebugLayer(); } [ uuid(34ab647b-3cc8-46ac-841b-c0965645c046), object, local, pointer_default(unique) ] interface ID3D12RootSignatureDeserializer : IUnknown { const D3D12_ROOT_SIGNATURE_DESC *GetRootSignatureDesc(); } [local] HRESULT __stdcall D3D12CreateRootSignatureDeserializer( const void *data, SIZE_T data_size, REFIID iid, void **deserializer); [local] HRESULT __stdcall D3D12SerializeRootSignature( const D3D12_ROOT_SIGNATURE_DESC *root_signature_desc, D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob); [local] HRESULT __stdcall D3D12SerializeVersionedRootSignature( const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *root_signature_desc, ID3DBlob **blob, ID3DBlob **error_blob); typedef HRESULT (__stdcall *PFN_D3D12_CREATE_DEVICE)(IUnknown *adapter, D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device); [local] HRESULT __stdcall D3D12CreateDevice(IUnknown *adapter, D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device); typedef HRESULT (__stdcall *PFN_D3D12_GET_DEBUG_INTERFACE)(REFIID iid, void **debug); [local] HRESULT __stdcall D3D12GetDebugInterface(REFIID iid, void **debug); ================================================ FILE: wine/windows/d3d8.h ================================================ /* * Copyright (C) 2002 Jason Edmeades * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3D8_H #define __WINE_D3D8_H #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0800 #endif #include #define COM_NO_WINDOWS_H #include #include #include #include /***************************************************************************** * Behavior Flags for IDirect3D8::CreateDevice */ #define D3DCREATE_FPU_PRESERVE __MSABI_LONG(0x00000002) #define D3DCREATE_MULTITHREADED __MSABI_LONG(0x00000004) #define D3DCREATE_PUREDEVICE __MSABI_LONG(0x00000010) #define D3DCREATE_SOFTWARE_VERTEXPROCESSING __MSABI_LONG(0x00000020) #define D3DCREATE_HARDWARE_VERTEXPROCESSING __MSABI_LONG(0x00000040) #define D3DCREATE_MIXED_VERTEXPROCESSING __MSABI_LONG(0x00000080) /***************************************************************************** * Flags for SetPrivateData */ #define D3DSPD_IUNKNOWN __MSABI_LONG(0x00000001) /***************************************************************************** * #defines and error codes */ #define D3D_SDK_VERSION 220 #define D3DADAPTER_DEFAULT 0 #define D3DENUM_NO_WHQL_LEVEL 2 #define _FACD3D 0x876 #define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code ) /* * Direct3D Errors */ #define D3D_OK S_OK #define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072) #define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073) #define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074) #define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075) #define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076) #define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077) #define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078) #define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079) #define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081) #define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082) #define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086) #define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087) #define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150) #define D3DERR_MOREDATA MAKE_D3DHRESULT(2151) #define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152) #define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153) #define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154) #define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380) #define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155) #define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156) #define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157) /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(IID_IDirect3D8, 0x1DD9E8DA,0x1C77,0x4D40,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x12); typedef struct IDirect3D8 *LPDIRECT3D8; DEFINE_GUID(IID_IDirect3DDevice8, 0x7385E5DF,0x8FE8,0x41D5,0x86,0xB6,0xD7,0xB4,0x85,0x47,0xB6,0xCF); typedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8; DEFINE_GUID(IID_IDirect3DResource8, 0x1B36BB7B,0x09B7,0x410A,0xB4,0x45,0x7D,0x14,0x30,0xD7,0xB3,0x3F); typedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8; DEFINE_GUID(IID_IDirect3DVertexBuffer8, 0x8AEEEAC7,0x05F9,0x44D4,0xB5,0x91,0x00,0x0B,0x0D,0xF1,0xCB,0x95); typedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8; DEFINE_GUID(IID_IDirect3DVolume8, 0xBD7349F5,0x14F1,0x42E4,0x9C,0x79,0x97,0x23,0x80,0xDB,0x40,0xC0); typedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8; DEFINE_GUID(IID_IDirect3DSwapChain8, 0x928C088B,0x76B9,0x4C6B,0xA5,0x36,0xA5,0x90,0x85,0x38,0x76,0xCD); typedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8; DEFINE_GUID(IID_IDirect3DSurface8, 0xB96EEBCA,0xB326,0x4EA5,0x88,0x2F,0x2F,0xF5,0xBA,0xE0,0x21,0xDD); typedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8; DEFINE_GUID(IID_IDirect3DIndexBuffer8, 0x0E689C9A,0x053D,0x44A0,0x9D,0x92,0xDB,0x0E,0x3D,0x75,0x0F,0x86); typedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8; DEFINE_GUID(IID_IDirect3DBaseTexture8, 0xB4211CFA,0x51B9,0x4A9F,0xAB,0x78,0xDB,0x99,0xB2,0xBB,0x67,0x8E); typedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8; DEFINE_GUID(IID_IDirect3DTexture8, 0xE4CDD575,0x2866,0x4F01,0xB1,0x2E,0x7E,0xEC,0xE1,0xEC,0x93,0x58); typedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8; DEFINE_GUID(IID_IDirect3DCubeTexture8, 0x3EE5B968,0x2ACA,0x4C34,0x8B,0xB5,0x7E,0x0C,0x3D,0x19,0xB7,0x50); typedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8; DEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4B8AAAFA,0x140F,0x42BA,0x91,0x31,0x59,0x7E,0xAF,0xAA,0x2E,0xAD); typedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8; /***************************************************************************** * IDirect3D8 interface */ #undef INTERFACE #define INTERFACE IDirect3D8 DECLARE_INTERFACE_(IDirect3D8,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D8 methods ***/ STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE; STDMETHOD_(UINT,GetAdapterCount )(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER8 * pIdentifier) PURE; STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT Adapter) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, UINT Mode, D3DDISPLAYMODE * pMode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE * pMode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter, D3DDEVTYPE CheckType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL Windowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8 * pCaps) PURE; STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType,HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, struct IDirect3DDevice8 ** ppReturnedDeviceInterface) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3D8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3D8 methods ***/ #define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a) #define IDirect3D8_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) #define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) #define IDirect3D8_GetAdapterModeCount(p,a) (p)->lpVtbl->GetAdapterModeCount(p,a) #define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->lpVtbl->EnumAdapterModes(p,a,b,c) #define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) #define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) #define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) #define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e) #define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) #define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) #define IDirect3D8_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) #define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) #else /*** IUnknown methods ***/ #define IDirect3D8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D8_AddRef(p) (p)->AddRef() #define IDirect3D8_Release(p) (p)->Release() /*** IDirect3D8 methods ***/ #define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a) #define IDirect3D8_GetAdapterCount(p) (p)->GetAdapterCount() #define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) #define IDirect3D8_GetAdapterModeCount(p,a) (p)->GetAdapterModeCount(a) #define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->EnumAdapterModes(a,b,c) #define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) #define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) #define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) #define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->CheckDeviceMultiSampleType(a,b,c,d,e) #define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) #define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) #define IDirect3D8_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) #define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) #endif /***************************************************************************** * IDirect3DVolume8 interface */ #define INTERFACE IDirect3DVolume8 DECLARE_INTERFACE_(IDirect3DVolume8,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVolume8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void * pData, DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD(GetContainer)(THIS_ REFIID riid, void ** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC * pDesc) PURE; STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE; STDMETHOD(UnlockBox)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVolume8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolume8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolume8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVolume8 methods ***/ #define IDirect3DVolume8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolume8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolume8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DVolume8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DVolume8_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c) #define IDirect3DVolume8_UnlockBox(p) (p)->lpVtbl->UnlockBox(p) #else /*** IUnknown methods ***/ #define IDirect3DVolume8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolume8_AddRef(p) (p)->AddRef() #define IDirect3DVolume8_Release(p) (p)->Release() /*** IDirect3DVolume8 methods ***/ #define IDirect3DVolume8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolume8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolume8_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DVolume8_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DVolume8_LockBox(p,a,b,c) (p)->LockBox(a,b,c) #define IDirect3DVolume8_UnlockBox(p) (p)->UnlockBox() #endif /***************************************************************************** * IDirect3DSwapChain8 interface */ #define INTERFACE IDirect3DSwapChain8 DECLARE_INTERFACE_(IDirect3DSwapChain8,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DSwapChain8 methods ***/ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface8 ** ppBackBuffer) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSwapChain8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSwapChain8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DSwapChain8 methods ***/ #define IDirect3DSwapChain8_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSwapChain8_AddRef(p) (p)->AddRef() #define IDirect3DSwapChain8_Release(p) (p)->Release() /*** IDirect3DSwapChain8 methods ***/ #define IDirect3DSwapChain8_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #endif /***************************************************************************** * IDirect3DSurface8 interface */ #define INTERFACE IDirect3DSurface8 DECLARE_INTERFACE_(IDirect3DSurface8,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DSurface8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void * pData,DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD(GetContainer)(THIS_ REFIID riid, void ** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC * pDesc) PURE; STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE; STDMETHOD(UnlockRect)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DSurface8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSurface8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSurface8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DSurface8 methods ***/ #define IDirect3DSurface8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DSurface8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DSurface8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DSurface8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DSurface8_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c) #define IDirect3DSurface8_UnlockRect(p) (p)->lpVtbl->UnlockRect(p) #else /*** IUnknown methods ***/ #define IDirect3DSurface8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSurface8_AddRef(p) (p)->AddRef() #define IDirect3DSurface8_Release(p) (p)->Release() /*** IDirect3DSurface8 methods ***/ #define IDirect3DSurface8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DSurface8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DSurface8_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DSurface8_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DSurface8_LockRect(p,a,b,c) (p)->LockRect(a,b,c) #define IDirect3DSurface8_UnlockRect(p) (p)->UnlockRect() #endif /***************************************************************************** * IDirect3DResource8 interface */ #define INTERFACE IDirect3DResource8 DECLARE_INTERFACE_(IDirect3DResource8,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD,GetPriority)(THIS) PURE; STDMETHOD_(void,PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DResource8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DResource8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DResource8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DResource8 methods ***/ #define IDirect3DResource8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DResource8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DResource8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DResource8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DResource8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DResource8_GetType(p) (p)->lpVtbl->GetType(p) #else /*** IUnknown methods ***/ #define IDirect3DResource8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DResource8_AddRef(p) (p)->AddRef() #define IDirect3DResource8_Release(p) (p)->Release() /*** IDirect3DResource8 methods ***/ #define IDirect3DResource8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DResource8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DResource8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DResource8_GetPriority(p) (p)->GetPriority() #define IDirect3DResource8_PreLoad(p) (p)->PreLoad() #define IDirect3DResource8_GetType(p) (p)->GetType() #endif /***************************************************************************** * IDirect3DVertexBuffer8 interface */ #define INTERFACE IDirect3DVertexBuffer8 DECLARE_INTERFACE_(IDirect3DVertexBuffer8,IDirect3DResource8) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD,GetPriority)(THIS) PURE; STDMETHOD_(void,PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE; /*** IDirect3DVertexBuffer8 methods ***/ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, BYTE ** ppbData, DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC * pDesc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/ #define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVertexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVertexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVertexBuffer8_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DVertexBuffer8 methods ***/ #define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DVertexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else /*** IUnknown methods ***/ #define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer8_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer8_Release(p) (p)->Release() /*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/ #define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVertexBuffer8_GetPriority(p) (p)->GetPriority() #define IDirect3DVertexBuffer8_PreLoad(p) (p)->PreLoad() #define IDirect3DVertexBuffer8_GetType(p) (p)->GetType() /*** IDirect3DVertexBuffer8 methods ***/ #define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DVertexBuffer8_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->GetDesc(a) #endif /***************************************************************************** * IDirect3DIndexBuffer8 interface */ #define INTERFACE IDirect3DIndexBuffer8 DECLARE_INTERFACE_(IDirect3DIndexBuffer8,IDirect3DResource8) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD,GetPriority)(THIS) PURE; STDMETHOD_(void,PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE; /*** IDirect3DIndexBuffer8 methods ***/ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, BYTE ** ppbData, DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DIndexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DIndexBuffer8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/ #define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DIndexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DIndexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DIndexBuffer8_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DIndexBuffer8 methods ***/ #define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DIndexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else /*** IUnknown methods ***/ #define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DIndexBuffer8_AddRef(p) (p)->AddRef() #define IDirect3DIndexBuffer8_Release(p) (p)->Release() /*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/ #define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DIndexBuffer8_GetPriority(p) (p)->GetPriority() #define IDirect3DIndexBuffer8_PreLoad(p) (p)->PreLoad() #define IDirect3DIndexBuffer8_GetType(p) (p)->GetType() /*** IDirect3DIndexBuffer8 methods ***/ #define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DIndexBuffer8_Unlock(p) (p)->Unlock() #define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->GetDesc(a) #endif /***************************************************************************** * IDirect3DBaseTexture8 interface */ #define INTERFACE IDirect3DBaseTexture8 DECLARE_INTERFACE_(IDirect3DBaseTexture8,IDirect3DResource8) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD,GetPriority)(THIS) PURE; STDMETHOD_(void,PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE; /*** IDirect3DBaseTexture8 methods ***/ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD,GetLOD)(THIS) PURE; STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DBaseTexture8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DBaseTexture8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/ #define IDirect3DBaseTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DBaseTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DBaseTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DBaseTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DBaseTexture8_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DBaseTexture8 methods ***/ #define IDirect3DBaseTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DBaseTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DBaseTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #else /*** IUnknown methods ***/ #define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DBaseTexture8_AddRef(p) (p)->AddRef() #define IDirect3DBaseTexture8_Release(p) (p)->Release() /*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/ #define IDirect3DBaseTexture8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DBaseTexture8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DBaseTexture8_GetPriority(p) (p)->GetPriority() #define IDirect3DBaseTexture8_PreLoad(p) (p)->PreLoad() #define IDirect3DBaseTexture8_GetType(p) (p)->GetType() /*** IDirect3DBaseTexture8 methods ***/ #define IDirect3DBaseTexture8_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DBaseTexture8_GetLOD(p) (p)->GetLOD() #define IDirect3DBaseTexture8_GetLevelCount(p) (p)->GetLevelCount() #endif /***************************************************************************** * IDirect3DCubeTexture8 interface */ #define INTERFACE IDirect3DCubeTexture8 DECLARE_INTERFACE_(IDirect3DCubeTexture8,IDirect3DBaseTexture8) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD,GetPriority)(THIS) PURE; STDMETHOD_(void,PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE; /*** IDirect3DBaseTexture8 methods ***/ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD,GetLOD)(THIS) PURE; STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE; /*** IDirect3DCubeTexture8 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC * pDesc) PURE; STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface8 ** ppCubeMapSurface) PURE; STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE; STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES face, const RECT *dirty_rect) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DCubeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DCubeTexture8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/ #define IDirect3DCubeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DCubeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DCubeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DCubeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DCubeTexture8_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/ #define IDirect3DCubeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DCubeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DCubeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) /*** IDirect3DCubeTexture8 methods ***/ #define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c) #define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e) #define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b) #define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DCubeTexture8_AddRef(p) (p)->AddRef() #define IDirect3DCubeTexture8_Release(p) (p)->Release() /*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/ #define IDirect3DCubeTexture8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DCubeTexture8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DCubeTexture8_GetPriority(p) (p)->GetPriority() #define IDirect3DCubeTexture8_PreLoad(p) (p)->PreLoad() #define IDirect3DCubeTexture8_GetType(p) (p)->GetType() /*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/ #define IDirect3DCubeTexture8_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DCubeTexture8_GetLOD(p) (p)->GetLOD() #define IDirect3DCubeTexture8_GetLevelCount(p) (p)->GetLevelCount() /*** IDirect3DCubeTexture8 methods ***/ #define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c) #define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e) #define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->UnlockRect(a,b) #define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b) #endif /***************************************************************************** * IDirect3DTexture8 interface */ #define INTERFACE IDirect3DTexture8 DECLARE_INTERFACE_(IDirect3DTexture8,IDirect3DBaseTexture8) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD,GetPriority)(THIS) PURE; STDMETHOD_(void,PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE; /*** IDirect3DBaseTexture8 methods ***/ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD,GetLOD)(THIS) PURE; STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE; /*** IDirect3DTexture8 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC * pDesc) PURE; STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,IDirect3DSurface8 ** ppSurfaceLevel) PURE; STDMETHOD(LockRect)(THIS_ UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE; STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ const RECT *dirty_rect) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DTexture8 methods: IDirect3DResource8 ***/ #define IDirect3DTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DTexture8_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/ #define IDirect3DTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) /*** IDirect3DTexture8 methods ***/ #define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b) #define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d) #define IDirect3DTexture8_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a) #define IDirect3DTexture8_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a) #else /*** IUnknown methods ***/ #define IDirect3DTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture8_AddRef(p) (p)->AddRef() #define IDirect3DTexture8_Release(p) (p)->Release() /*** IDirect3DTexture8 methods: IDirect3DResource8 ***/ #define IDirect3DTexture8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DTexture8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DTexture8_GetPriority(p) (p)->GetPriority() #define IDirect3DTexture8_PreLoad(p) (p)->PreLoad() #define IDirect3DTexture8_GetType(p) (p)->GetType() /*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/ #define IDirect3DTexture8_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DTexture8_GetLOD(p) (p)->GetLOD() #define IDirect3DTexture8_GetLevelCount(p) (p)->GetLevelCount() /*** IDirect3DTexture8 methods ***/ #define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b) #define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d) #define IDirect3DTexture8_UnlockRect(p,a) (p)->UnlockRect(a) #define IDirect3DTexture8_AddDirtyRect(p,a) (p)->AddDirtyRect(a) #endif /***************************************************************************** * IDirect3DVolumeTexture8 interface */ #define INTERFACE IDirect3DVolumeTexture8 DECLARE_INTERFACE_(IDirect3DVolumeTexture8,IDirect3DBaseTexture8) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD,GetPriority)(THIS) PURE; STDMETHOD_(void,PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE; /*** IDirect3DBaseTexture8 methods ***/ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD,GetLOD)(THIS) PURE; STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE; /*** IDirect3DVolumeTexture8 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DVOLUME_DESC * pDesc) PURE; STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,IDirect3DVolume8 ** ppVolumeLevel) PURE; STDMETHOD(LockBox)(THIS_ UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE; STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyBox)(THIS_ const D3DBOX *dirty_box) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolumeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolumeTexture8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/ #define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVolumeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVolumeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVolumeTexture8_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/ #define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DVolumeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) /*** IDirect3DVolumeTexture8 methods ***/ #define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b) #define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d) #define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a) #define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a) #else /*** IUnknown methods ***/ #define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolumeTexture8_AddRef(p) (p)->AddRef() #define IDirect3DVolumeTexture8_Release(p) (p)->Release() /*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/ #define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVolumeTexture8_GetPriority(p) (p)->GetPriority() #define IDirect3DVolumeTexture8_PreLoad(p) (p)->PreLoad() #define IDirect3DVolumeTexture8_GetType(p) (p)->GetType() /*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/ #define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DVolumeTexture8_GetLOD(p) (p)->GetLOD() #define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->GetLevelCount() /*** IDirect3DVolumeTexture8 methods ***/ #define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b) #define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d) #define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->UnlockBox(a) #define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->AddDirtyBox(a) #endif /***************************************************************************** * IDirect3DDevice8 interface */ #define INTERFACE IDirect3DDevice8 DECLARE_INTERFACE_(IDirect3DDevice8,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice8 methods ***/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE; STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD Bytes) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D8 ** ppD3D8) PURE; STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8 * pCaps) PURE; STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE * pMode) PURE; STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS * pParameters) PURE; STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface8 * pCursorBitmap) PURE; STDMETHOD_(void,SetCursorPosition)(THIS_ UINT XScreenSpace, UINT YScreenSpace,DWORD Flags) PURE; STDMETHOD_(BOOL,ShowCursor)(THIS_ BOOL bShow) PURE; STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DSwapChain8 ** pSwapChain) PURE; STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters) PURE; STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8 ** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS * pRasterStatus) PURE; STDMETHOD_(void, SetGammaRamp)(THIS_ DWORD flags, const D3DGAMMARAMP *ramp) PURE; STDMETHOD_(void,GetGammaRamp)(THIS_ D3DGAMMARAMP * pRamp) PURE; STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture8 ** ppTexture) PURE; STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture8 ** ppVolumeTexture) PURE; STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture8 ** ppCubeTexture) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer8 ** ppVertexBuffer) PURE; STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer8 ** ppIndexBuffer) PURE; STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,BOOL Lockable,IDirect3DSurface8 ** ppSurface) PURE; STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,IDirect3DSurface8 ** ppSurface) PURE; STDMETHOD(CreateImageSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,IDirect3DSurface8 ** ppSurface) PURE; STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8 *src_surface, const RECT *src_rects, UINT rect_count, IDirect3DSurface8 *dst_surface, const POINT *dst_points) PURE; STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8 * pSourceTexture,IDirect3DBaseTexture8 * pDestinationTexture) PURE; STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8 * pDestSurface) PURE; STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8 * pRenderTarget,IDirect3DSurface8 * pNewZStencil) PURE; STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8 ** ppRenderTarget) PURE; STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8 ** ppZStencilSurface) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags, D3DCOLOR color, float z, DWORD stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX * pMatrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE; STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT8 *viewport) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8 * pViewport) PURE; STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL8 *material) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8 *pMaterial) PURE; STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT8 *light) PURE; STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT8 * pLight) PURE; STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL * pEnable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float * pPlane) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD * pValue) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ DWORD * pToken) PURE; STDMETHOD(ApplyStateBlock)(THIS_ DWORD Token) PURE; STDMETHOD(CaptureStateBlock)(THIS_ DWORD Token) PURE; STDMETHOD(DeleteStateBlock)(THIS_ DWORD Token) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,DWORD * pToken) PURE; STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS8 *clip_status) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8 * pClipStatus) PURE; STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8 ** ppTexture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8 * pTexture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD * pValue) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE; STDMETHOD(ValidateDevice)(THIS_ DWORD * pNumPasses) PURE; STDMETHOD(GetInfo)(THIS_ DWORD DevInfoID,void * pDevInfoStruct,DWORD DevInfoStructSize) PURE; STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE; STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY * pEntries) PURE; STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT * PaletteNumber) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE; STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT primitive_count, const void *data, UINT stride) PURE; STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count, UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE; STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8 * pDestBuffer,DWORD Flags) PURE; STDMETHOD(CreateVertexShader)(THIS_ const DWORD *declaration, const DWORD *byte_code, DWORD *shader, DWORD usage) PURE; STDMETHOD(SetVertexShader)(THIS_ DWORD Handle) PURE; STDMETHOD(GetVertexShader)(THIS_ DWORD * pHandle) PURE; STDMETHOD(DeleteVertexShader)(THIS_ DWORD Handle) PURE; STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD reg_idx, const void *data, DWORD count) PURE; STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD Register,void * pConstantData,DWORD ConstantCount) PURE; STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE; STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE; STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8 * pStreamData,UINT Stride) PURE; STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8 ** ppStreamData,UINT * pStride) PURE; STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8 * pIndexData,UINT BaseVertexIndex) PURE; STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8 ** ppIndexData,UINT * pBaseVertexIndex) PURE; STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, DWORD *shader) PURE; STDMETHOD(SetPixelShader)(THIS_ DWORD Handle) PURE; STDMETHOD(GetPixelShader)(THIS_ DWORD * pHandle) PURE; STDMETHOD(DeletePixelShader)(THIS_ DWORD Handle) PURE; STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD reg_idx, const void *data, DWORD count) PURE; STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD Register,void * pConstantData,DWORD ConstantCount) PURE; STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE; STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE; STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE; STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice8_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DDevice8 methods ***/ #define IDirect3DDevice8_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) #define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->lpVtbl->ResourceManagerDiscardBytes(p,a) #define IDirect3DDevice8_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) #define IDirect3DDevice8_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirect3DDevice8_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) #define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) #define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) #define IDirect3DDevice8_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) #define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) #define IDirect3DDevice8_Reset(p,a) (p)->lpVtbl->Reset(p,a) #define IDirect3DDevice8_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #define IDirect3DDevice8_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) #define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b) #define IDirect3DDevice8_GetGammaRamp(p,a) (p)->lpVtbl->GetGammaRamp(p,a) #define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g) #define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f) #define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e) #define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e) #define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f) #define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e) #define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->lpVtbl->CreateImageSurface(p,a,b,c,d) #define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->lpVtbl->CopyRects(p,a,b,c,d,e) #define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) #define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->lpVtbl->GetFrontBuffer(p,a) #define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice8_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a) #define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) #define IDirect3DDevice8_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice8_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice8_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice8_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice8_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice8_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice8_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice8_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice8_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice8_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice8_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice8_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice8_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice8_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice8_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a) #define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a) #define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a) #define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice8_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice8_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice8_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice8_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice8_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c) #define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) #define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) #define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) #define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) #define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) #define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e) #define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) #define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->lpVtbl->processVertices(p,a,b,c,d,e) #define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->lpVtbl->CreateVertexShader(p,a,b,c,d) #define IDirect3DDevice8_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) #define IDirect3DDevice8_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) #define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->lpVtbl->DeleteVertexShader(p,a) #define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c) #define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c) #define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c) #define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c) #define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->lpVtbl->SetStreamSource(p,a,b,c) #define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->lpVtbl->GetStreamSource(p,a,b,c) #define IDirect3DDevice8_SetIndices(p,a,b) (p)->lpVtbl->SetIndices(p,a,b) #define IDirect3DDevice8_GetIndices(p,a,b) (p)->lpVtbl->GetIndices(p,a,b) #define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) #define IDirect3DDevice8_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) #define IDirect3DDevice8_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) #define IDirect3DDevice8_DeletePixelShader(p,a) (p)->lpVtbl->DeletePixelShader(p,a) #define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c) #define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c) #define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c) #define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) #define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) #define IDirect3DDevice8_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) #else /*** IUnknown methods ***/ #define IDirect3DDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice8_AddRef(p) (p)->AddRef() #define IDirect3DDevice8_Release(p) (p)->Release() /*** IDirect3DDevice8 methods ***/ #define IDirect3DDevice8_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() #define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->ResourceManagerDiscardBytes(a) #define IDirect3DDevice8_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) #define IDirect3DDevice8_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirect3DDevice8_GetCreationParameters(p,a) (p)->GetCreationParameters(a) #define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) #define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) #define IDirect3DDevice8_ShowCursor(p,a) (p)->ShowCursor(a) #define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) #define IDirect3DDevice8_Reset(p,a) (p)->Reset(a) #define IDirect3DDevice8_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #define IDirect3DDevice8_GetRasterStatus(p,a) (p)->GetRasterStatus(a) #define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->SetGammaRamp(a,b) #define IDirect3DDevice8_GetGammaRamp(p,a) (p)->GetGammaRamp(a) #define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->CreateTexture(a,b,c,d,e,f,g) #define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h) #define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->CreateCubeTexture(a,b,c,d,e,f) #define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->CreateVertexBuffer(a,b,c,d,e) #define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->CreateIndexBuffer(a,b,c,d,e) #define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->CreateRenderTarget(a,b,c,d,e,f) #define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->CreateDepthStencilSurface(a,b,c,d,e) #define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->CreateImageSurface(a,b,c,d) #define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->CopyRects(a,b,c,d,e) #define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) #define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->GetFrontBuffer(a) #define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice8_GetRenderTarget(p,a) (p)->GetRenderTarget(a) #define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) #define IDirect3DDevice8_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice8_EndScene(p) (p)->EndScene() #define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice8_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice8_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice8_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice8_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice8_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice8_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice8_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice8_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice8_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice8_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice8_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice8_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice8_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a) #define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a) #define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a) #define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice8_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice8_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice8_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice8_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice8_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c) #define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) #define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) #define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) #define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) #define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) #define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->DrawIndexedPrimitive(a,b,c,d,e) #define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) #define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) #define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->processVertices(a,b,c,d,e) #define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->CreateVertexShader(a,b,c,d) #define IDirect3DDevice8_SetVertexShader(p,a) (p)->SetVertexShader(a) #define IDirect3DDevice8_GetVertexShader(p,a) (p)->GetVertexShader(a) #define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->DeleteVertexShader(a) #define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->SetVertexShaderConstant(a,b,c) #define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->GetVertexShaderConstant(a,b,c) #define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->GetVertexShaderDeclaration(a,b,c) #define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->GetVertexShaderFunction(a,b,c) #define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->SetStreamSource(a,b,c) #define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->GetStreamSource(a,b,c) #define IDirect3DDevice8_SetIndices(p,a,b) (p)->SetIndices(a,b) #define IDirect3DDevice8_GetIndices(p,a,b) (p)->GetIndices(a,b) #define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) #define IDirect3DDevice8_SetPixelShader(p,a) (p)->SetPixelShader(a) #define IDirect3DDevice8_GetPixelShader(p,a) (p)->GetPixelShader(a) #define IDirect3DDevice8_DeletePixelShader(p,a) (p)->DeletePixelShader(a) #define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->SetPixelShaderConstant(a,b,c) #define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->GetPixelShaderConstant(a,b,c) #define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->GetPixelShaderFunction(a,b,c) #define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) #define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) #define IDirect3DDevice8_DeletePatch(p,a) (p)->DeletePatch(a) #endif #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /* Define the main entrypoint as well */ IDirect3D8* WINAPI Direct3DCreate8(UINT SDKVersion); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_D3D8_H */ ================================================ FILE: wine/windows/d3d8caps.h ================================================ /* * Copyright (C) 2002 Jason Edmeades * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3D8CAPS_H #define __WINE_D3D8CAPS_H #ifdef __i386__ #include #endif /* * Definitions */ #define D3DCAPS_READ_SCANLINE 0x20000 #define D3DCURSORCAPS_COLOR 1 #define D3DCURSORCAPS_LOWRES 2 #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x0000010 #define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x0000020 #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x0000040 #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x0000080 #define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x0000100 #define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x0000200 #define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x0000400 #define D3DDEVCAPS_CANRENDERAFTERFLIP 0x0000800 #define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x0001000 #define D3DDEVCAPS_DRAWPRIMITIVES2 0x0002000 #define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x0004000 #define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x0008000 #define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x0010000 #define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x0020000 #define D3DDEVCAPS_HWRASTERIZATION 0x0080000 #define D3DDEVCAPS_PUREDEVICE 0x0100000 #define D3DDEVCAPS_QUINTICRTPATCHES 0x0200000 #define D3DDEVCAPS_RTPATCHES 0x0400000 #define D3DDEVCAPS_RTPATCHHANDLEZERO 0x0800000 #define D3DDEVCAPS_NPATCHES 0x1000000 #define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x00FFFF #define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x080000 #define D3DFVFCAPS_PSIZE 0x100000 #define D3DLINECAPS_TEXTURE 0x01 #define D3DLINECAPS_ZTEST 0x02 #define D3DLINECAPS_BLEND 0x04 #define D3DLINECAPS_ALPHACMP 0x08 #define D3DLINECAPS_FOG 0x10 #define D3DPBLENDCAPS_ZERO 0x0001 #define D3DPBLENDCAPS_ONE 0x0002 #define D3DPBLENDCAPS_SRCCOLOR 0x0004 #define D3DPBLENDCAPS_INVSRCCOLOR 0x0008 #define D3DPBLENDCAPS_SRCALPHA 0x0010 #define D3DPBLENDCAPS_INVSRCALPHA 0x0020 #define D3DPBLENDCAPS_DESTALPHA 0x0040 #define D3DPBLENDCAPS_INVDESTALPHA 0x0080 #define D3DPBLENDCAPS_DESTCOLOR 0x0100 #define D3DPBLENDCAPS_INVDESTCOLOR 0x0200 #define D3DPBLENDCAPS_SRCALPHASAT 0x0400 #define D3DPBLENDCAPS_BOTHSRCALPHA 0x0800 #define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x1000 #define D3DPCMPCAPS_NEVER 0x01 #define D3DPCMPCAPS_LESS 0x02 #define D3DPCMPCAPS_EQUAL 0x04 #define D3DPCMPCAPS_LESSEQUAL 0x08 #define D3DPCMPCAPS_GREATER 0x10 #define D3DPCMPCAPS_NOTEQUAL 0x20 #define D3DPCMPCAPS_GREATEREQUAL 0x40 #define D3DPCMPCAPS_ALWAYS 0x80 #define D3DPMISCCAPS_MASKZ __MSABI_LONG(0x00000002) #define D3DPMISCCAPS_LINEPATTERNREP __MSABI_LONG(0x00000004) #define D3DPMISCCAPS_CULLNONE __MSABI_LONG(0x00000010) #define D3DPMISCCAPS_CULLCW __MSABI_LONG(0x00000020) #define D3DPMISCCAPS_CULLCCW __MSABI_LONG(0x00000040) #define D3DPMISCCAPS_COLORWRITEENABLE __MSABI_LONG(0x00000080) #define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS __MSABI_LONG(0x00000100) #define D3DPMISCCAPS_CLIPTLVERTS __MSABI_LONG(0x00000200) #define D3DPMISCCAPS_TSSARGTEMP __MSABI_LONG(0x00000400) #define D3DPMISCCAPS_BLENDOP __MSABI_LONG(0x00000800) #define D3DPMISCCAPS_NULLREFERENCE __MSABI_LONG(0x00001000) #define D3DPRASTERCAPS_DITHER 0x00000001 #define D3DPRASTERCAPS_PAT 0x00000008 #define D3DPRASTERCAPS_ZTEST 0x00000010 #define D3DPRASTERCAPS_FOGVERTEX 0x00000080 #define D3DPRASTERCAPS_FOGTABLE 0x00000100 #define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000 #define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000 #define D3DPRASTERCAPS_ZBIAS 0x00004000 #define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000 #define D3DPRASTERCAPS_FOGRANGE 0x00010000 #define D3DPRASTERCAPS_ANISOTROPY 0x00020000 #define D3DPRASTERCAPS_WBUFFER 0x00040000 #define D3DPRASTERCAPS_WFOG 0x00100000 #define D3DPRASTERCAPS_ZFOG 0x00200000 #define D3DPRASTERCAPS_COLORPERSPECTIVE 0x00400000 #define D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE 0x00800000 #define D3DPRESENT_INTERVAL_DEFAULT 0x00000000 #define D3DPRESENT_INTERVAL_ONE 0x00000001 #define D3DPRESENT_INTERVAL_TWO 0x00000002 #define D3DPRESENT_INTERVAL_THREE 0x00000004 #define D3DPRESENT_INTERVAL_FOUR 0x00000008 #define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000 #define D3DPSHADECAPS_COLORGOURAUDRGB 0x00008 #define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00200 #define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x04000 #define D3DPSHADECAPS_FOGGOURAUD 0x80000 #define D3DPTADDRESSCAPS_WRAP 0x01 #define D3DPTADDRESSCAPS_MIRROR 0x02 #define D3DPTADDRESSCAPS_CLAMP 0x04 #define D3DPTADDRESSCAPS_BORDER 0x08 #define D3DPTADDRESSCAPS_INDEPENDENTUV 0x10 #define D3DPTADDRESSCAPS_MIRRORONCE 0x20 #define D3DPTEXTURECAPS_PERSPECTIVE 0x00001 #define D3DPTEXTURECAPS_POW2 0x00002 #define D3DPTEXTURECAPS_ALPHA 0x00004 #define D3DPTEXTURECAPS_SQUAREONLY 0x00020 #define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00040 #define D3DPTEXTURECAPS_ALPHAPALETTE 0x00080 #define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00100 #define D3DPTEXTURECAPS_PROJECTED 0x00400 #define D3DPTEXTURECAPS_CUBEMAP 0x00800 #define D3DPTEXTURECAPS_VOLUMEMAP 0x02000 #define D3DPTEXTURECAPS_MIPMAP 0x04000 #define D3DPTEXTURECAPS_MIPVOLUMEMAP 0x08000 #define D3DPTEXTURECAPS_MIPCUBEMAP 0x10000 #define D3DPTEXTURECAPS_CUBEMAP_POW2 0x20000 #define D3DPTEXTURECAPS_VOLUMEMAP_POW2 0x40000 #define D3DPTFILTERCAPS_MINFPOINT 0x00000100 #define D3DPTFILTERCAPS_MINFLINEAR 0x00000200 #define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400 #define D3DPTFILTERCAPS_MIPFPOINT 0x00010000 #define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000 #define D3DPTFILTERCAPS_MAGFPOINT 0x01000000 #define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000 #define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000 #define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000 #define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000 #define D3DSTENCILCAPS_KEEP 0x01 #define D3DSTENCILCAPS_ZERO 0x02 #define D3DSTENCILCAPS_REPLACE 0x04 #define D3DSTENCILCAPS_INCRSAT 0x08 #define D3DSTENCILCAPS_DECRSAT 0x10 #define D3DSTENCILCAPS_INVERT 0x20 #define D3DSTENCILCAPS_INCR 0x40 #define D3DSTENCILCAPS_DECR 0x80 #define D3DTEXOPCAPS_DISABLE 0x0000001 #define D3DTEXOPCAPS_SELECTARG1 0x0000002 #define D3DTEXOPCAPS_SELECTARG2 0x0000004 #define D3DTEXOPCAPS_MODULATE 0x0000008 #define D3DTEXOPCAPS_MODULATE2X 0x0000010 #define D3DTEXOPCAPS_MODULATE4X 0x0000020 #define D3DTEXOPCAPS_ADD 0x0000040 #define D3DTEXOPCAPS_ADDSIGNED 0x0000080 #define D3DTEXOPCAPS_ADDSIGNED2X 0x0000100 #define D3DTEXOPCAPS_SUBTRACT 0x0000200 #define D3DTEXOPCAPS_ADDSMOOTH 0x0000400 #define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x0000800 #define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x0001000 #define D3DTEXOPCAPS_BLENDFACTORALPHA 0x0002000 #define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x0004000 #define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x0008000 #define D3DTEXOPCAPS_PREMODULATE 0x0010000 #define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x0020000 #define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x0040000 #define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x0080000 #define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x0100000 #define D3DTEXOPCAPS_BUMPENVMAP 0x0200000 #define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x0400000 #define D3DTEXOPCAPS_DOTPRODUCT3 0x0800000 #define D3DTEXOPCAPS_MULTIPLYADD 0x1000000 #define D3DTEXOPCAPS_LERP 0x2000000 #define D3DVTXPCAPS_TEXGEN __MSABI_LONG(0x00000001) #define D3DVTXPCAPS_MATERIALSOURCE7 __MSABI_LONG(0x00000002) #define D3DVTXPCAPS_DIRECTIONALLIGHTS __MSABI_LONG(0x00000008) #define D3DVTXPCAPS_POSITIONALLIGHTS __MSABI_LONG(0x00000010) #define D3DVTXPCAPS_LOCALVIEWER __MSABI_LONG(0x00000020) #define D3DVTXPCAPS_TWEENING __MSABI_LONG(0x00000040) #define D3DVTXPCAPS_NO_VSDT_UBYTE4 __MSABI_LONG(0x00000080) #define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x00000020 #define D3DCAPS3_RESERVED 0x8000001f #define D3DCAPS2_CANCALIBRATEGAMMA 0x0100000 #define D3DCAPS2_CANRENDERWINDOWED 0x0080000 #define D3DCAPS2_CANMANAGERESOURCE 0x10000000 #define D3DCAPS2_DYNAMICTEXTURES 0x20000000 #define D3DCAPS2_FULLSCREENGAMMA 0x0020000 #define D3DCAPS2_NO2DDURING3DSCENE 0x0000002 #define D3DCAPS2_RESERVED 0x2000000 /* * The d3dcaps8 structure */ typedef struct _D3DCAPS8 { D3DDEVTYPE DeviceType; UINT AdapterOrdinal; DWORD Caps; DWORD Caps2; DWORD Caps3; DWORD PresentationIntervals; DWORD CursorCaps; DWORD DevCaps; DWORD PrimitiveMiscCaps; DWORD RasterCaps; DWORD ZCmpCaps; DWORD SrcBlendCaps; DWORD DestBlendCaps; DWORD AlphaCmpCaps; DWORD ShadeCaps; DWORD TextureCaps; DWORD TextureFilterCaps; DWORD CubeTextureFilterCaps; DWORD VolumeTextureFilterCaps; DWORD TextureAddressCaps; DWORD VolumeTextureAddressCaps; DWORD LineCaps; DWORD MaxTextureWidth, MaxTextureHeight; DWORD MaxVolumeExtent; DWORD MaxTextureRepeat; DWORD MaxTextureAspectRatio; DWORD MaxAnisotropy; float MaxVertexW; float GuardBandLeft; float GuardBandTop; float GuardBandRight; float GuardBandBottom; float ExtentsAdjust; DWORD StencilCaps; DWORD FVFCaps; DWORD TextureOpCaps; DWORD MaxTextureBlendStages; DWORD MaxSimultaneousTextures; DWORD VertexProcessingCaps; DWORD MaxActiveLights; DWORD MaxUserClipPlanes; DWORD MaxVertexBlendMatrices; DWORD MaxVertexBlendMatrixIndex; float MaxPointSize; DWORD MaxPrimitiveCount; DWORD MaxVertexIndex; DWORD MaxStreams; DWORD MaxStreamStride; DWORD VertexShaderVersion; DWORD MaxVertexShaderConst; DWORD PixelShaderVersion; float MaxPixelShaderValue; } D3DCAPS8; #ifdef __i386__ #include #endif #endif /* __WINE_D3D8CAPS_H */ ================================================ FILE: wine/windows/d3d8types.h ================================================ /* * Copyright (C) 2002 Jason Edmeades * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3D8TYPES_H #define __WINE_D3D8TYPES_H #ifdef __i386__ #include #endif /***************************************************************************** * Direct 3D v8 #defines */ #define D3DCLEAR_TARGET 1 #define D3DCLEAR_ZBUFFER 2 #define D3DCLEAR_STENCIL 4 #define D3DCLIPPLANE0 (1 << 0) #define D3DCLIPPLANE1 (1 << 1) #define D3DCLIPPLANE2 (1 << 2) #define D3DCLIPPLANE3 (1 << 3) #define D3DCLIPPLANE4 (1 << 4) #define D3DCLIPPLANE5 (1 << 5) #define D3DCOLOR_ARGB(a,r,g,b) ((D3DCOLOR)((((a)&0xffu)<<24)|(((r)&0xffu)<<16)|(((g)&0xffu)<<8)|((b)&0xffu))) #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)) #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b) #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) #define D3DCS_LEFT 0x001 #define D3DCS_RIGHT 0x002 #define D3DCS_TOP 0x004 #define D3DCS_BOTTOM 0x008 #define D3DCS_FRONT 0x010 #define D3DCS_BACK 0x020 #define D3DCS_PLANE0 0x040 #define D3DCS_PLANE1 0x080 #define D3DCS_PLANE2 0x100 #define D3DCS_PLANE3 0x200 #define D3DCS_PLANE4 0x400 #define D3DCS_PLANE5 0x800 #define D3DCS_ALL 0xFFF #define D3DFVF_TEXTUREFORMAT1 3 #define D3DFVF_TEXTUREFORMAT2 0 #define D3DFVF_TEXTUREFORMAT3 1 #define D3DFVF_TEXTUREFORMAT4 2 #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16)) #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2) #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16)) #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16)) #define D3DLOCK_READONLY 0x0010 #define D3DLOCK_NOSYSLOCK 0x0800 #define D3DLOCK_NOOVERWRITE 0x1000 #define D3DLOCK_DISCARD 0x2000 #define D3DLOCK_NO_DIRTY_UPDATE 0x8000 #define D3DMAXUSERCLIPPLANES 32 #define D3DRENDERSTATE_WRAPBIAS 0x80 #define D3DTSS_TCI_PASSTHRU 0x00000 #define D3DTSS_TCI_CAMERASPACENORMAL 0x10000 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x20000 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x30000 #define D3DTS_WORLD D3DTS_WORLDMATRIX(0) #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1) #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2) #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3) #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256) #define D3DUSAGE_RENDERTARGET 0x01 #define D3DUSAGE_DEPTHSTENCIL 0x02 #define D3DUSAGE_WRITEONLY 0x08 #define D3DUSAGE_SOFTWAREPROCESSING 0x10 #define D3DUSAGE_DONOTCLIP 0x20 #define D3DUSAGE_POINTS 0x40 #define D3DUSAGE_RTPATCHES 0x80 #define D3DUSAGE_NPATCHES 0x100 #define D3DUSAGE_DYNAMIC 0x200 #define D3DWRAP_U 1 #define D3DWRAP_V 2 #define D3DWRAP_W 4 #define D3DWRAPCOORD_0 1 #define D3DWRAPCOORD_1 2 #define D3DWRAPCOORD_2 4 #define D3DWRAPCOORD_3 8 #define MAX_DEVICE_IDENTIFIER_STRING 512 #define D3DFVF_RESERVED0 0x0001 #define D3DFVF_POSITION_MASK 0x000E #define D3DFVF_XYZ 0x0002 #define D3DFVF_XYZRHW 0x0004 #define D3DFVF_XYZB1 0x0006 #define D3DFVF_XYZB2 0x0008 #define D3DFVF_XYZB3 0x000a #define D3DFVF_XYZB4 0x000c #define D3DFVF_XYZB5 0x000e #define D3DFVF_NORMAL 0x0010 #define D3DFVF_PSIZE 0x0020 #define D3DFVF_DIFFUSE 0x0040 #define D3DFVF_SPECULAR 0x0080 #define D3DFVF_TEXCOUNT_MASK 0x0f00 #define D3DFVF_TEXCOUNT_SHIFT 8 #define D3DFVF_TEX0 0x0000 #define D3DFVF_TEX1 0x0100 #define D3DFVF_TEX2 0x0200 #define D3DFVF_TEX3 0x0300 #define D3DFVF_TEX4 0x0400 #define D3DFVF_TEX5 0x0500 #define D3DFVF_TEX6 0x0600 #define D3DFVF_TEX7 0x0700 #define D3DFVF_TEX8 0x0800 #define D3DFVF_LASTBETA_UBYTE4 0x1000 #define D3DFVF_RESERVED2 0xE000 #define D3DTA_SELECTMASK 0x0000000f #define D3DTA_DIFFUSE 0x00000000 #define D3DTA_CURRENT 0x00000001 #define D3DTA_TEXTURE 0x00000002 #define D3DTA_TFACTOR 0x00000003 #define D3DTA_SPECULAR 0x00000004 #define D3DTA_COMPLEMENT 0x00000010 #define D3DTA_ALPHAREPLICATE 0x00000020 #define D3DTA_TEMP 0x00000005 #define D3DCOLORWRITEENABLE_RED (__MSABI_LONG(1)<<0) #define D3DCOLORWRITEENABLE_GREEN (__MSABI_LONG(1)<<1) #define D3DCOLORWRITEENABLE_BLUE (__MSABI_LONG(1)<<2) #define D3DCOLORWRITEENABLE_ALPHA (__MSABI_LONG(1)<<3) #ifndef MAKEFOURCC #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) #endif /**************************** * Vertex Shaders Declaration */ typedef enum _D3DVSD_TOKENTYPE { D3DVSD_TOKEN_NOP = 0, D3DVSD_TOKEN_STREAM = 1, D3DVSD_TOKEN_STREAMDATA = 2, D3DVSD_TOKEN_TESSELLATOR = 3, D3DVSD_TOKEN_CONSTMEM = 4, D3DVSD_TOKEN_EXT = 5, /* RESERVED = 6 */ D3DVSD_TOKEN_END = 7, D3DVSD_FORCE_DWORD = 0x7FFFFFFF } D3DVSD_TOKENTYPE; /** input registers for vertex shaders functions */ /* #define D3DVSDE_POSITION 0 #define D3DVSDE_BLENDWEIGHT 1 #define D3DVSDE_BLENDINDICES 2 #define D3DVSDE_NORMAL 3 #define D3DVSDE_PSIZE 4 #define D3DVSDE_DIFFUSE 5 #define D3DVSDE_SPECULAR 6 #define D3DVSDE_TEXCOORD0 7 #define D3DVSDE_TEXCOORD1 8 #define D3DVSDE_TEXCOORD2 9 #define D3DVSDE_TEXCOORD3 10 #define D3DVSDE_TEXCOORD4 11 #define D3DVSDE_TEXCOORD5 12 #define D3DVSDE_TEXCOORD6 13 #define D3DVSDE_TEXCOORD7 14 #define D3DVSDE_POSITION2 15 #define D3DVSDE_NORMAL2 16 */ /** Address of the vertex register. 0 - 16 */ typedef enum _D3DVSDE_REGISTER { D3DVSDE_POSITION = 0, D3DVSDE_BLENDWEIGHT = 1, D3DVSDE_BLENDINDICES = 2, D3DVSDE_NORMAL = 3, D3DVSDE_PSIZE = 4, D3DVSDE_DIFFUSE = 5, D3DVSDE_SPECULAR = 6, D3DVSDE_TEXCOORD0 = 7, D3DVSDE_TEXCOORD1 = 8, D3DVSDE_TEXCOORD2 = 9, D3DVSDE_TEXCOORD3 = 10, D3DVSDE_TEXCOORD4 = 11, D3DVSDE_TEXCOORD5 = 12, D3DVSDE_TEXCOORD6 = 13, D3DVSDE_TEXCOORD7 = 14, D3DVSDE_POSITION2 = 15, D3DVSDE_NORMAL2 = 16 } D3DVSDE_REGISTER; /** bit-field declaration for VertexRegister Type */ /* #define D3DVSDT_FLOAT1 0x00 #define D3DVSDT_FLOAT2 0x01 #define D3DVSDT_FLOAT3 0x02 #define D3DVSDT_FLOAT4 0x03 #define D3DVSDT_D3DCOLOR 0x04 #define D3DVSDT_UBYTE4 0x05 #define D3DVSDT_SHORT2 0x06 #define D3DVSDT_SHORT4 0x07 */ typedef enum _D3DVSDT_TYPE { D3DVSDT_FLOAT1 = 0x00, D3DVSDT_FLOAT2 = 0x01, D3DVSDT_FLOAT3 = 0x02, D3DVSDT_FLOAT4 = 0x03, D3DVSDT_D3DCOLOR = 0x04, D3DVSDT_UBYTE4 = 0x05, D3DVSDT_SHORT2 = 0x06, D3DVSDT_SHORT4 = 0x07 } D3DVSDT_TYPE; #define D3DVSD_CONSTADDRESSSHIFT 0 #define D3DVSD_EXTINFOSHIFT 0 #define D3DVSD_STREAMNUMBERSHIFT 0 #define D3DVSD_VERTEXREGSHIFT 0 #define D3DVSD_CONSTRSSHIFT 16 #define D3DVSD_DATATYPESHIFT 16 #define D3DVSD_SKIPCOUNTSHIFT 16 #define D3DVSD_VERTEXREGINSHIFT 20 #define D3DVSD_EXTCOUNTSHIFT 24 #define D3DVSD_CONSTCOUNTSHIFT 25 #define D3DVSD_DATALOADTYPESHIFT 28 #define D3DVSD_STREAMTESSSHIFT 28 #define D3DVSD_TOKENTYPESHIFT 29 #define D3DVSD_CONSTADDRESSMASK (0x7F << D3DVSD_CONSTADDRESSSHIFT) #define D3DVSD_EXTINFOMASK (0xFFFFFF << D3DVSD_EXTINFOSHIFT) #define D3DVSD_STREAMNUMBERMASK (0xF << D3DVSD_STREAMNUMBERSHIFT) #define D3DVSD_VERTEXREGMASK (0x1F << D3DVSD_VERTEXREGSHIFT) #define D3DVSD_CONSTRSMASK (0x1FFF << D3DVSD_CONSTRSSHIFT) #define D3DVSD_DATATYPEMASK (0xF << D3DVSD_DATATYPESHIFT) #define D3DVSD_SKIPCOUNTMASK (0xF << D3DVSD_SKIPCOUNTSHIFT) #define D3DVSD_EXTCOUNTMASK (0x1F << D3DVSD_EXTCOUNTSHIFT) #define D3DVSD_VERTEXREGINMASK (0xF << D3DVSD_VERTEXREGINSHIFT) #define D3DVSD_CONSTCOUNTMASK (0xF << D3DVSD_CONSTCOUNTSHIFT) #define D3DVSD_DATALOADTYPEMASK (0x1 << D3DVSD_DATALOADTYPESHIFT) #define D3DVSD_STREAMTESSMASK (0x1 << D3DVSD_STREAMTESSSHIFT) #define D3DVSD_TOKENTYPEMASK (0x7u << D3DVSD_TOKENTYPESHIFT) #define D3DVSD_MAKETOKENTYPE(TokenType) \ (((unsigned)TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK) #define D3DVSD_CONST(ConstantAddress, Count) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress)) #define D3DVSD_END() 0xFFFFFFFF #define D3DVSD_NOP() 0x00000000 #define D3DVSD_REG(VertexRegister, Type) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister)) #define D3DVSD_SKIP(Count) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT)) #define D3DVSD_STREAM(StreamNumber) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber)) #define D3DVSD_STREAM_TESS() \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK)) #define D3DVSD_TESSNORMAL(RegisterIn, RegisterOut) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((RegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (RegisterOut)) #define D3DVSD_TESSUV(Register) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (Register)) /******************************** * Pixel/Vertex Shaders Functions */ /** Maximum number of supported texture coordinates sets operation */ #define D3DDP_MAXTEXCOORD 8 /** opcode token mask */ #define D3DSI_OPCODE_MASK 0x0000FFFF /** opcodes types for PS and VS */ typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE { D3DSIO_NOP = 0, D3DSIO_MOV = 1, D3DSIO_ADD = 2, D3DSIO_SUB = 3, D3DSIO_MAD = 4, D3DSIO_MUL = 5, D3DSIO_RCP = 6, D3DSIO_RSQ = 7, D3DSIO_DP3 = 8, D3DSIO_DP4 = 9, D3DSIO_MIN = 10, D3DSIO_MAX = 11, D3DSIO_SLT = 12, D3DSIO_SGE = 13, D3DSIO_EXP = 14, D3DSIO_LOG = 15, D3DSIO_LIT = 16, D3DSIO_DST = 17, D3DSIO_LRP = 18, D3DSIO_FRC = 19, D3DSIO_M4x4 = 20, D3DSIO_M4x3 = 21, D3DSIO_M3x4 = 22, D3DSIO_M3x3 = 23, D3DSIO_M3x2 = 24, D3DSIO_TEXCOORD = 64, D3DSIO_TEXKILL = 65, D3DSIO_TEX = 66, D3DSIO_TEXBEM = 67, D3DSIO_TEXBEML = 68, D3DSIO_TEXREG2AR = 69, D3DSIO_TEXREG2GB = 70, D3DSIO_TEXM3x2PAD = 71, D3DSIO_TEXM3x2TEX = 72, D3DSIO_TEXM3x3PAD = 73, D3DSIO_TEXM3x3TEX = 74, D3DSIO_TEXM3x3DIFF = 75, D3DSIO_TEXM3x3SPEC = 76, D3DSIO_TEXM3x3VSPEC = 77, D3DSIO_EXPP = 78, D3DSIO_LOGP = 79, D3DSIO_CND = 80, D3DSIO_DEF = 81, D3DSIO_TEXREG2RGB = 82, D3DSIO_TEXDP3TEX = 83, D3DSIO_TEXM3x2DEPTH = 84, D3DSIO_TEXDP3 = 85, D3DSIO_TEXM3x3 = 86, D3DSIO_TEXDEPTH = 87, D3DSIO_CMP = 88, D3DSIO_BEM = 89, D3DSIO_PHASE = 0xFFFD, D3DSIO_COMMENT = 0xFFFE, D3DSIO_END = 0XFFFF, D3DSIO_FORCE_DWORD = 0X7FFFFFFF /** for 32-bit alignment */ } D3DSHADER_INSTRUCTION_OPCODE_TYPE; /** for parallelism */ #define D3DSI_COISSUE 0x40000000 /** destination parameter modifiers (.xyzw) */ #define D3DSP_WRITEMASK_0 0x00010000 /* .x r */ #define D3DSP_WRITEMASK_1 0x00020000 /* .y g */ #define D3DSP_WRITEMASK_2 0x00040000 /* .z b */ #define D3DSP_WRITEMASK_3 0x00080000 /* .w a */ #define D3DSP_WRITEMASK_ALL 0x000F0000 /* all */ #define D3DSP_DSTMOD_SHIFT 20 #define D3DSP_DSTMOD_MASK (0xF << D3DSP_DSTMOD_SHIFT) typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE { D3DSPDM_NONE = 0 << D3DSP_DSTMOD_SHIFT, D3DSPDM_SATURATE = 1 << D3DSP_DSTMOD_SHIFT, D3DSPDM_FORCE_DWORD = 0X7FFFFFFF } D3DSHADER_PARAM_DSTMOD_TYPE; /** destination param */ #define D3DSP_DSTSHIFT_SHIFT 24 #define D3DSP_DSTSHIFT_MASK (0xF << D3DSP_DSTSHIFT_SHIFT) /** destination/source reg type */ #define D3DSP_REGTYPE_SHIFT 28 #define D3DSP_REGTYPE_MASK (0x7 << D3DSP_REGTYPE_SHIFT) typedef enum _D3DSHADER_PARAM_REGISTER_TYPE { D3DSPR_TEMP = 0 << D3DSP_REGTYPE_SHIFT, D3DSPR_INPUT = 1 << D3DSP_REGTYPE_SHIFT, D3DSPR_CONST = 2 << D3DSP_REGTYPE_SHIFT, D3DSPR_ADDR = 3 << D3DSP_REGTYPE_SHIFT, D3DSPR_TEXTURE = 3 << D3DSP_REGTYPE_SHIFT, D3DSPR_RASTOUT = 4 << D3DSP_REGTYPE_SHIFT, D3DSPR_ATTROUT = 5 << D3DSP_REGTYPE_SHIFT, D3DSPR_TEXCRDOUT = 6 << D3DSP_REGTYPE_SHIFT, D3DSPR_FORCE_DWORD = 0x7FFFFFFF } D3DSHADER_PARAM_REGISTER_TYPE; typedef enum _D3DVS_RASTOUT_OFFSETS { D3DSRO_POSITION = 0, D3DSRO_FOG = 1, D3DSRO_POINT_SIZE = 2, D3DSRO_FORCE_DWORD = 0x7FFFFFFF } D3DVS_RASTOUT_OFFSETS; #define D3DVS_ADDRESSMODE_SHIFT 13 #define D3DVS_ADDRESSMODE_MASK (0x1 << D3DVS_ADDRESSMODE_SHIFT) typedef enum _D3DVS_ADDRESSMODE_TYPE { D3DVS_ADDRMODE_ABSOLUTE = 0 << D3DVS_ADDRESSMODE_SHIFT, D3DVS_ADDRMODE_RELATIVE = 1 << D3DVS_ADDRESSMODE_SHIFT, D3DVS_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF } D3DVS_ADDRESSMODE_TYPE; #define D3DVS_SWIZZLE_SHIFT 16 #define D3DVS_SWIZZLE_MASK (0xFF << D3DVS_SWIZZLE_SHIFT) #define D3DSP_SWIZZLE_SHIFT 16 #define D3DSP_SWIZZLE_MASK (0xFF << D3DSP_SWIZZLE_SHIFT) #define D3DVS_X_X (0 << D3DVS_SWIZZLE_SHIFT) #define D3DVS_X_Y (1 << D3DVS_SWIZZLE_SHIFT) #define D3DVS_X_Z (2 << D3DVS_SWIZZLE_SHIFT) #define D3DVS_X_W (3 << D3DVS_SWIZZLE_SHIFT) #define D3DVS_Y_X (0 << (D3DVS_SWIZZLE_SHIFT + 2)) #define D3DVS_Y_Y (1 << (D3DVS_SWIZZLE_SHIFT + 2)) #define D3DVS_Y_Z (2 << (D3DVS_SWIZZLE_SHIFT + 2)) #define D3DVS_Y_W (3 << (D3DVS_SWIZZLE_SHIFT + 2)) #define D3DVS_Z_X (0 << (D3DVS_SWIZZLE_SHIFT + 4)) #define D3DVS_Z_Y (1 << (D3DVS_SWIZZLE_SHIFT + 4)) #define D3DVS_Z_Z (2 << (D3DVS_SWIZZLE_SHIFT + 4)) #define D3DVS_Z_W (3 << (D3DVS_SWIZZLE_SHIFT + 4)) #define D3DVS_W_X (0 << (D3DVS_SWIZZLE_SHIFT + 6)) #define D3DVS_W_Y (1 << (D3DVS_SWIZZLE_SHIFT + 6)) #define D3DVS_W_Z (2 << (D3DVS_SWIZZLE_SHIFT + 6)) #define D3DVS_W_W (3 << (D3DVS_SWIZZLE_SHIFT + 6)) #define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W) #define D3DSP_NOSWIZZLE \ ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6))) #define D3DSP_SRCMOD_SHIFT 24 #define D3DSP_SRCMOD_MASK (0xF << D3DSP_SRCMOD_SHIFT) typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE { D3DSPSM_NONE = 0 << D3DSP_SRCMOD_SHIFT, D3DSPSM_NEG = 1 << D3DSP_SRCMOD_SHIFT, D3DSPSM_BIAS = 2 << D3DSP_SRCMOD_SHIFT, D3DSPSM_BIASNEG = 3 << D3DSP_SRCMOD_SHIFT, D3DSPSM_SIGN = 4 << D3DSP_SRCMOD_SHIFT, D3DSPSM_SIGNNEG = 5 << D3DSP_SRCMOD_SHIFT, D3DSPSM_COMP = 6 << D3DSP_SRCMOD_SHIFT, D3DSPSM_X2 = 7 << D3DSP_SRCMOD_SHIFT, D3DSPSM_X2NEG = 8 << D3DSP_SRCMOD_SHIFT, D3DSPSM_DZ = 9 << D3DSP_SRCMOD_SHIFT, D3DSPSM_DW = 10 << D3DSP_SRCMOD_SHIFT, D3DSPSM_FORCE_DWORD = 0x7FFFFFFF } D3DSHADER_PARAM_SRCMOD_TYPE; #define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor)) #define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor)) #define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF) #define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF) #define D3DSI_COMMENTSIZE_SHIFT 16 #define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT) #define D3DSHADER_COMMENT(commentSize) \ ((((commentSize) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT) #define D3DPS_END() 0x0000FFFF #define D3DVS_END() 0x0000FFFF /***************************************************************************** * Direct 3D v8 enumerated types */ typedef enum _D3DBACKBUFFER_TYPE { D3DBACKBUFFER_TYPE_MONO = 0, D3DBACKBUFFER_TYPE_LEFT = 1, D3DBACKBUFFER_TYPE_RIGHT = 2, D3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff } D3DBACKBUFFER_TYPE; typedef enum _D3DBASISTYPE{ D3DBASIS_BEZIER = 0, D3DBASIS_BSPLINE = 1, D3DBASIS_INTERPOLATE = 2, D3DBASIS_FORCE_DWORD = 0x7fffffff } D3DBASISTYPE; typedef enum _D3DBLEND { D3DBLEND_ZERO = 1, D3DBLEND_ONE = 2, D3DBLEND_SRCCOLOR = 3, D3DBLEND_INVSRCCOLOR = 4, D3DBLEND_SRCALPHA = 5, D3DBLEND_INVSRCALPHA = 6, D3DBLEND_DESTALPHA = 7, D3DBLEND_INVDESTALPHA = 8, D3DBLEND_DESTCOLOR = 9, D3DBLEND_INVDESTCOLOR = 10, D3DBLEND_SRCALPHASAT = 11, D3DBLEND_BOTHSRCALPHA = 12, D3DBLEND_BOTHINVSRCALPHA = 13, D3DBLEND_FORCE_DWORD = 0x7fffffff } D3DBLEND; typedef enum _D3DBLENDOP { D3DBLENDOP_ADD = 1, D3DBLENDOP_SUBTRACT = 2, D3DBLENDOP_REVSUBTRACT = 3, D3DBLENDOP_MIN = 4, D3DBLENDOP_MAX = 5, D3DBLENDOP_FORCE_DWORD = 0x7fffffff } D3DBLENDOP; typedef enum _D3DCMPFUNC { D3DCMP_NEVER = 1, D3DCMP_LESS = 2, D3DCMP_EQUAL = 3, D3DCMP_LESSEQUAL = 4, D3DCMP_GREATER = 5, D3DCMP_NOTEQUAL = 6, D3DCMP_GREATEREQUAL = 7, D3DCMP_ALWAYS = 8, D3DCMP_FORCE_DWORD = 0x7fffffff } D3DCMPFUNC; typedef enum _D3DCUBEMAP_FACES { D3DCUBEMAP_FACE_POSITIVE_X = 0, D3DCUBEMAP_FACE_NEGATIVE_X = 1, D3DCUBEMAP_FACE_POSITIVE_Y = 2, D3DCUBEMAP_FACE_NEGATIVE_Y = 3, D3DCUBEMAP_FACE_POSITIVE_Z = 4, D3DCUBEMAP_FACE_NEGATIVE_Z = 5, D3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff } D3DCUBEMAP_FACES; typedef enum _D3DCULL { D3DCULL_NONE = 1, D3DCULL_CW = 2, D3DCULL_CCW = 3, D3DCULL_FORCE_DWORD = 0x7fffffff } D3DCULL; typedef enum _D3DDEBUGMONITORTOKENS { D3DDMT_ENABLE = 0, D3DDMT_DISABLE = 1, D3DDMT_FORCE_DWORD = 0x7fffffff } D3DDEBUGMONITORTOKENS; typedef enum _D3DDEVTYPE { D3DDEVTYPE_HAL = 1, D3DDEVTYPE_REF = 2, D3DDEVTYPE_SW = 3, D3DDEVTYPE_FORCE_DWORD = 0xffffffff } D3DDEVTYPE; typedef enum _D3DFILLMODE { D3DFILL_POINT = 1, D3DFILL_WIREFRAME = 2, D3DFILL_SOLID = 3, D3DFILL_FORCE_DWORD = 0x7fffffff } D3DFILLMODE; typedef enum _D3DFOGMODE { D3DFOG_NONE = 0, D3DFOG_EXP = 1, D3DFOG_EXP2 = 2, D3DFOG_LINEAR = 3, D3DFOG_FORCE_DWORD = 0x7fffffff } D3DFOGMODE; typedef enum _D3DFORMAT { D3DFMT_UNKNOWN = 0, D3DFMT_R8G8B8 = 20, D3DFMT_A8R8G8B8 = 21, D3DFMT_X8R8G8B8 = 22, D3DFMT_R5G6B5 = 23, D3DFMT_X1R5G5B5 = 24, D3DFMT_A1R5G5B5 = 25, D3DFMT_A4R4G4B4 = 26, D3DFMT_R3G3B2 = 27, D3DFMT_A8 = 28, D3DFMT_A8R3G3B2 = 29, D3DFMT_X4R4G4B4 = 30, D3DFMT_A2B10G10R10 = 31, D3DFMT_G16R16 = 34, D3DFMT_A8P8 = 40, D3DFMT_P8 = 41, D3DFMT_L8 = 50, D3DFMT_A8L8 = 51, D3DFMT_A4L4 = 52, D3DFMT_V8U8 = 60, D3DFMT_L6V5U5 = 61, D3DFMT_X8L8V8U8 = 62, D3DFMT_Q8W8V8U8 = 63, D3DFMT_V16U16 = 64, D3DFMT_W11V11U10 = 65, D3DFMT_A2W10V10U10 = 67, D3DFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'), D3DFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'), D3DFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'), D3DFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'), D3DFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'), D3DFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'), D3DFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'), D3DFMT_D16_LOCKABLE = 70, D3DFMT_D32 = 71, D3DFMT_D15S1 = 73, D3DFMT_D24S8 = 75, D3DFMT_D16 = 80, D3DFMT_D24X8 = 77, D3DFMT_D24X4S4 = 79, D3DFMT_VERTEXDATA = 100, D3DFMT_INDEX16 = 101, D3DFMT_INDEX32 = 102, D3DFMT_FORCE_DWORD = 0xFFFFFFFF } D3DFORMAT; typedef enum _D3DLIGHTTYPE { D3DLIGHT_POINT = 1, D3DLIGHT_SPOT = 2, D3DLIGHT_DIRECTIONAL = 3, D3DLIGHT_FORCE_DWORD = 0x7fffffff } D3DLIGHTTYPE; typedef enum _D3DMATERIALCOLORSOURCE { D3DMCS_MATERIAL = 0, D3DMCS_COLOR1 = 1, D3DMCS_COLOR2 = 2, D3DMCS_FORCE_DWORD = 0x7fffffff } D3DMATERIALCOLORSOURCE; typedef enum _D3DMULTISAMPLE_TYPE { D3DMULTISAMPLE_NONE = 0, D3DMULTISAMPLE_2_SAMPLES = 2, D3DMULTISAMPLE_3_SAMPLES = 3, D3DMULTISAMPLE_4_SAMPLES = 4, D3DMULTISAMPLE_5_SAMPLES = 5, D3DMULTISAMPLE_6_SAMPLES = 6, D3DMULTISAMPLE_7_SAMPLES = 7, D3DMULTISAMPLE_8_SAMPLES = 8, D3DMULTISAMPLE_9_SAMPLES = 9, D3DMULTISAMPLE_10_SAMPLES = 10, D3DMULTISAMPLE_11_SAMPLES = 11, D3DMULTISAMPLE_12_SAMPLES = 12, D3DMULTISAMPLE_13_SAMPLES = 13, D3DMULTISAMPLE_14_SAMPLES = 14, D3DMULTISAMPLE_15_SAMPLES = 15, D3DMULTISAMPLE_16_SAMPLES = 16, D3DMULTISAMPLE_FORCE_DWORD = 0x7fffffff } D3DMULTISAMPLE_TYPE; typedef enum _D3DORDERTYPE { D3DORDER_LINEAR = 1, D3DORDER_QUADRATIC = 2, D3DORDER_CUBIC = 3, D3DORDER_QUINTIC = 5, D3DORDER_FORCE_DWORD = 0x7fffffff } D3DORDERTYPE; typedef enum _D3DPATCHEDGESTYLE { D3DPATCHEDGE_DISCRETE = 0, D3DPATCHEDGE_CONTINUOUS = 1, D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff, } D3DPATCHEDGESTYLE; typedef enum _D3DPOOL { D3DPOOL_DEFAULT = 0, D3DPOOL_MANAGED = 1, D3DPOOL_SYSTEMMEM = 2, D3DPOOL_SCRATCH = 3, D3DPOOL_FORCE_DWORD = 0x7fffffff } D3DPOOL; typedef enum _D3DPRIMITIVETYPE { D3DPT_POINTLIST = 1, D3DPT_LINELIST = 2, D3DPT_LINESTRIP = 3, D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff } D3DPRIMITIVETYPE; typedef enum _D3DRENDERSTATETYPE { D3DRS_ZENABLE = 7, D3DRS_FILLMODE = 8, D3DRS_SHADEMODE = 9, D3DRS_LINEPATTERN = 10, D3DRS_ZWRITEENABLE = 14, D3DRS_ALPHATESTENABLE = 15, D3DRS_LASTPIXEL = 16, D3DRS_SRCBLEND = 19, D3DRS_DESTBLEND = 20, D3DRS_CULLMODE = 22, D3DRS_ZFUNC = 23, D3DRS_ALPHAREF = 24, D3DRS_ALPHAFUNC = 25, D3DRS_DITHERENABLE = 26, D3DRS_ALPHABLENDENABLE = 27, D3DRS_FOGENABLE = 28, D3DRS_SPECULARENABLE = 29, D3DRS_ZVISIBLE = 30, D3DRS_FOGCOLOR = 34, D3DRS_FOGTABLEMODE = 35, D3DRS_FOGSTART = 36, D3DRS_FOGEND = 37, D3DRS_FOGDENSITY = 38, D3DRS_EDGEANTIALIAS = 40, D3DRS_ZBIAS = 47, D3DRS_RANGEFOGENABLE = 48, D3DRS_STENCILENABLE = 52, D3DRS_STENCILFAIL = 53, D3DRS_STENCILZFAIL = 54, D3DRS_STENCILPASS = 55, D3DRS_STENCILFUNC = 56, D3DRS_STENCILREF = 57, D3DRS_STENCILMASK = 58, D3DRS_STENCILWRITEMASK = 59, D3DRS_TEXTUREFACTOR = 60, D3DRS_WRAP0 = 128, D3DRS_WRAP1 = 129, D3DRS_WRAP2 = 130, D3DRS_WRAP3 = 131, D3DRS_WRAP4 = 132, D3DRS_WRAP5 = 133, D3DRS_WRAP6 = 134, D3DRS_WRAP7 = 135, D3DRS_CLIPPING = 136, D3DRS_LIGHTING = 137, D3DRS_AMBIENT = 139, D3DRS_FOGVERTEXMODE = 140, D3DRS_COLORVERTEX = 141, D3DRS_LOCALVIEWER = 142, D3DRS_NORMALIZENORMALS = 143, D3DRS_DIFFUSEMATERIALSOURCE = 145, D3DRS_SPECULARMATERIALSOURCE = 146, D3DRS_AMBIENTMATERIALSOURCE = 147, D3DRS_EMISSIVEMATERIALSOURCE = 148, D3DRS_VERTEXBLEND = 151, D3DRS_CLIPPLANEENABLE = 152, D3DRS_SOFTWAREVERTEXPROCESSING = 153, D3DRS_POINTSIZE = 154, D3DRS_POINTSIZE_MIN = 155, D3DRS_POINTSPRITEENABLE = 156, D3DRS_POINTSCALEENABLE = 157, D3DRS_POINTSCALE_A = 158, D3DRS_POINTSCALE_B = 159, D3DRS_POINTSCALE_C = 160, D3DRS_MULTISAMPLEANTIALIAS = 161, D3DRS_MULTISAMPLEMASK = 162, D3DRS_PATCHEDGESTYLE = 163, D3DRS_PATCHSEGMENTS = 164, D3DRS_DEBUGMONITORTOKEN = 165, D3DRS_POINTSIZE_MAX = 166, D3DRS_INDEXEDVERTEXBLENDENABLE = 167, D3DRS_COLORWRITEENABLE = 168, D3DRS_TWEENFACTOR = 170, D3DRS_BLENDOP = 171, D3DRS_POSITIONORDER = 172, D3DRS_NORMALORDER = 173, D3DRS_FORCE_DWORD = 0x7fffffff } D3DRENDERSTATETYPE; typedef enum _D3DRESOURCETYPE { D3DRTYPE_SURFACE = 1, D3DRTYPE_VOLUME = 2, D3DRTYPE_TEXTURE = 3, D3DRTYPE_VOLUMETEXTURE = 4, D3DRTYPE_CUBETEXTURE = 5, D3DRTYPE_VERTEXBUFFER = 6, D3DRTYPE_INDEXBUFFER = 7, D3DRTYPE_FORCE_DWORD = 0x7fffffff } D3DRESOURCETYPE; typedef enum _D3DSHADEMODE { D3DSHADE_FLAT = 1, D3DSHADE_GOURAUD = 2, D3DSHADE_PHONG = 3, D3DSHADE_FORCE_DWORD = 0x7fffffff } D3DSHADEMODE; typedef enum _D3DSTATEBLOCKTYPE { D3DSBT_ALL = 1, D3DSBT_PIXELSTATE = 2, D3DSBT_VERTEXSTATE = 3, D3DSBT_FORCE_DWORD = 0xffffffff } D3DSTATEBLOCKTYPE; typedef enum _D3DSTENCILOP { D3DSTENCILOP_KEEP = 1, D3DSTENCILOP_ZERO = 2, D3DSTENCILOP_REPLACE = 3, D3DSTENCILOP_INCRSAT = 4, D3DSTENCILOP_DECRSAT = 5, D3DSTENCILOP_INVERT = 6, D3DSTENCILOP_INCR = 7, D3DSTENCILOP_DECR = 8, D3DSTENCILOP_FORCE_DWORD = 0x7fffffff } D3DSTENCILOP; typedef enum _D3DSWAPEFFECT { D3DSWAPEFFECT_DISCARD = 1, D3DSWAPEFFECT_FLIP = 2, D3DSWAPEFFECT_COPY = 3, D3DSWAPEFFECT_COPY_VSYNC = 4, D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF } D3DSWAPEFFECT; typedef enum _D3DTEXTUREADDRESS { D3DTADDRESS_WRAP = 1, D3DTADDRESS_MIRROR = 2, D3DTADDRESS_CLAMP = 3, D3DTADDRESS_BORDER = 4, D3DTADDRESS_MIRRORONCE = 5, D3DTADDRESS_FORCE_DWORD = 0x7fffffff } D3DTEXTUREADDRESS; typedef enum _D3DTEXTUREFILTERTYPE { D3DTEXF_NONE = 0, D3DTEXF_POINT = 1, D3DTEXF_LINEAR = 2, D3DTEXF_ANISOTROPIC = 3, D3DTEXF_FLATCUBIC = 4, D3DTEXF_GAUSSIANCUBIC = 5, D3DTEXF_FORCE_DWORD = 0x7fffffff } D3DTEXTUREFILTERTYPE; typedef enum _D3DTEXTUREOP { D3DTOP_DISABLE = 1, D3DTOP_SELECTARG1 = 2, D3DTOP_SELECTARG2 = 3, D3DTOP_MODULATE = 4, D3DTOP_MODULATE2X = 5, D3DTOP_MODULATE4X = 6, D3DTOP_ADD = 7, D3DTOP_ADDSIGNED = 8, D3DTOP_ADDSIGNED2X = 9, D3DTOP_SUBTRACT = 10, D3DTOP_ADDSMOOTH = 11, D3DTOP_BLENDDIFFUSEALPHA = 12, D3DTOP_BLENDTEXTUREALPHA = 13, D3DTOP_BLENDFACTORALPHA = 14, D3DTOP_BLENDTEXTUREALPHAPM = 15, D3DTOP_BLENDCURRENTALPHA = 16, D3DTOP_PREMODULATE = 17, D3DTOP_MODULATEALPHA_ADDCOLOR = 18, D3DTOP_MODULATECOLOR_ADDALPHA = 19, D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, D3DTOP_BUMPENVMAP = 22, D3DTOP_BUMPENVMAPLUMINANCE = 23, D3DTOP_DOTPRODUCT3 = 24, D3DTOP_MULTIPLYADD = 25, D3DTOP_LERP = 26, D3DTOP_FORCE_DWORD = 0x7fffffff, } D3DTEXTUREOP; typedef enum _D3DTEXTURESTAGESTATETYPE { D3DTSS_COLOROP = 1, D3DTSS_COLORARG1 = 2, D3DTSS_COLORARG2 = 3, D3DTSS_ALPHAOP = 4, D3DTSS_ALPHAARG1 = 5, D3DTSS_ALPHAARG2 = 6, D3DTSS_BUMPENVMAT00 = 7, D3DTSS_BUMPENVMAT01 = 8, D3DTSS_BUMPENVMAT10 = 9, D3DTSS_BUMPENVMAT11 = 10, D3DTSS_TEXCOORDINDEX = 11, D3DTSS_ADDRESSU = 13, D3DTSS_ADDRESSV = 14, D3DTSS_BORDERCOLOR = 15, D3DTSS_MAGFILTER = 16, D3DTSS_MINFILTER = 17, D3DTSS_MIPFILTER = 18, D3DTSS_MIPMAPLODBIAS = 19, D3DTSS_MAXMIPLEVEL = 20, D3DTSS_MAXANISOTROPY = 21, D3DTSS_BUMPENVLSCALE = 22, D3DTSS_BUMPENVLOFFSET = 23, D3DTSS_TEXTURETRANSFORMFLAGS = 24, D3DTSS_ADDRESSW = 25, D3DTSS_COLORARG0 = 26, D3DTSS_ALPHAARG0 = 27, D3DTSS_RESULTARG = 28, D3DTSS_FORCE_DWORD = 0x7fffffff } D3DTEXTURESTAGESTATETYPE; typedef enum _D3DTEXTURETRANSFORMFLAGS { D3DTTFF_DISABLE = 0, D3DTTFF_COUNT1 = 1, D3DTTFF_COUNT2 = 2, D3DTTFF_COUNT3 = 3, D3DTTFF_COUNT4 = 4, D3DTTFF_PROJECTED = 256, D3DTTFF_FORCE_DWORD = 0x7fffffff } D3DTEXTURETRANSFORMFLAGS; typedef enum _D3DTRANSFORMSTATETYPE { D3DTS_VIEW = 2, D3DTS_PROJECTION = 3, D3DTS_TEXTURE0 = 16, D3DTS_TEXTURE1 = 17, D3DTS_TEXTURE2 = 18, D3DTS_TEXTURE3 = 19, D3DTS_TEXTURE4 = 20, D3DTS_TEXTURE5 = 21, D3DTS_TEXTURE6 = 22, D3DTS_TEXTURE7 = 23, D3DTS_FORCE_DWORD = 0x7fffffff } D3DTRANSFORMSTATETYPE; typedef enum _D3DVERTEXBLENDFLAGS { D3DVBF_DISABLE = 0, D3DVBF_1WEIGHTS = 1, D3DVBF_2WEIGHTS = 2, D3DVBF_3WEIGHTS = 3, D3DVBF_TWEENING = 255, D3DVBF_0WEIGHTS = 256 } D3DVERTEXBLENDFLAGS; typedef enum _D3DZBUFFERTYPE { D3DZB_FALSE = 0, D3DZB_TRUE = 1, D3DZB_USEW = 2, D3DZB_FORCE_DWORD = 0x7fffffff } D3DZBUFFERTYPE; /***************************************************************************** * Direct 3D v8 typedefs */ typedef DWORD D3DCOLOR; /***************************************************************************** * Direct 3D v8 structures */ typedef struct _D3DADAPTER_IDENTIFIER8 { char Driver[MAX_DEVICE_IDENTIFIER_STRING]; char Description[MAX_DEVICE_IDENTIFIER_STRING]; LARGE_INTEGER DriverVersion; DWORD VendorId; DWORD DeviceId; DWORD SubSysId; DWORD Revision; GUID DeviceIdentifier; DWORD WHQLLevel; } D3DADAPTER_IDENTIFIER8; typedef struct _D3DBOX { UINT Left; UINT Top; UINT Right; UINT Bottom; UINT Front; UINT Back; } D3DBOX; typedef struct _D3DCLIPSTATUS8 { DWORD ClipUnion; DWORD ClipIntersection; } D3DCLIPSTATUS8; typedef struct _D3DCOLORVALUE { float r; float g; float b; float a; } D3DCOLORVALUE; typedef struct _D3DDEVICE_CREATION_PARAMETERS { UINT AdapterOrdinal; D3DDEVTYPE DeviceType; HWND hFocusWindow; DWORD BehaviorFlags; } D3DDEVICE_CREATION_PARAMETERS; typedef struct _D3DDISPLAYMODE { UINT Width; UINT Height; UINT RefreshRate; D3DFORMAT Format; } D3DDISPLAYMODE; typedef struct _D3DGAMMARAMP { WORD red [256]; WORD green[256]; WORD blue [256]; } D3DGAMMARAMP; typedef struct _D3DINDEXBUFFER_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; UINT Size; } D3DINDEXBUFFER_DESC; #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; #define D3DVECTOR_DEFINED #endif typedef struct _D3DLIGHT8 { D3DLIGHTTYPE Type; D3DCOLORVALUE Diffuse; D3DCOLORVALUE Specular; D3DCOLORVALUE Ambient; D3DVECTOR Position; D3DVECTOR Direction; float Range; float Falloff; float Attenuation0; float Attenuation1; float Attenuation2; float Theta; float Phi; } D3DLIGHT8; typedef struct _D3DLINEPATTERN { WORD wRepeatFactor; WORD wLinePattern; } D3DLINEPATTERN; typedef struct _D3DLOCKED_BOX { INT RowPitch; INT SlicePitch; void* pBits; } D3DLOCKED_BOX; typedef struct _D3DLOCKED_RECT { INT Pitch; void* pBits; } D3DLOCKED_RECT; typedef struct _D3DMATERIAL8 { D3DCOLORVALUE Diffuse; D3DCOLORVALUE Ambient; D3DCOLORVALUE Specular; D3DCOLORVALUE Emissive; float Power; } D3DMATERIAL8; typedef struct _D3DMATRIX { union { struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; } DUMMYSTRUCTNAME; float m[4][4]; } DUMMYUNIONNAME; } D3DMATRIX; typedef struct _D3DPRESENT_PARAMETERS_ { UINT BackBufferWidth; UINT BackBufferHeight; D3DFORMAT BackBufferFormat; UINT BackBufferCount; D3DMULTISAMPLE_TYPE MultiSampleType; D3DSWAPEFFECT SwapEffect; HWND hDeviceWindow; BOOL Windowed; BOOL EnableAutoDepthStencil; D3DFORMAT AutoDepthStencilFormat; DWORD Flags; UINT FullScreen_RefreshRateInHz; UINT FullScreen_PresentationInterval; } D3DPRESENT_PARAMETERS; #define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x00000001 typedef struct _D3DRANGE { UINT Offset; UINT Size; } D3DRANGE; typedef struct _D3DRASTER_STATUS { BOOL InVBlank; UINT ScanLine; } D3DRASTER_STATUS; typedef struct _D3DRECT { LONG x1; LONG y1; LONG x2; LONG y2; } D3DRECT; typedef struct _D3DRECTPATCH_INFO { UINT StartVertexOffsetWidth; UINT StartVertexOffsetHeight; UINT Width; UINT Height; UINT Stride; D3DBASISTYPE Basis; D3DORDERTYPE Order; } D3DRECTPATCH_INFO; typedef struct _D3DSURFACE_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; UINT Size; D3DMULTISAMPLE_TYPE MultiSampleType; UINT Width; UINT Height; } D3DSURFACE_DESC; typedef struct _D3DTRIPATCH_INFO { UINT StartVertexOffset; UINT NumVertices; D3DBASISTYPE Basis; D3DORDERTYPE Order; } D3DTRIPATCH_INFO; typedef struct _D3DVERTEXBUFFER_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; UINT Size; DWORD FVF; } D3DVERTEXBUFFER_DESC; typedef struct _D3DVIEWPORT8 { DWORD X; DWORD Y; DWORD Width; DWORD Height; float MinZ; float MaxZ; } D3DVIEWPORT8; typedef struct _D3DVOLUME_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; UINT Size; UINT Width; UINT Height; UINT Depth; } D3DVOLUME_DESC; #ifdef __i386__ #include #endif #endif /* __WINE_D3D8TYPES_H */ ================================================ FILE: wine/windows/d3d9.h ================================================ /* * Copyright (C) 2002-2003 Jason Edmeades * Raphael Junqueira * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _D3D9_H_ #define _D3D9_H_ #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0900 #endif #include #define COM_NO_WINDOWS_H #include #include #include #include /***************************************************************************** * Behavior Flags for IDirect3D8::CreateDevice */ #define D3DCREATE_FPU_PRESERVE __MSABI_LONG(0x00000002) #define D3DCREATE_MULTITHREADED __MSABI_LONG(0x00000004) #define D3DCREATE_PUREDEVICE __MSABI_LONG(0x00000010) #define D3DCREATE_SOFTWARE_VERTEXPROCESSING __MSABI_LONG(0x00000020) #define D3DCREATE_HARDWARE_VERTEXPROCESSING __MSABI_LONG(0x00000040) #define D3DCREATE_MIXED_VERTEXPROCESSING __MSABI_LONG(0x00000080) #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT __MSABI_LONG(0x00000100) #define D3DCREATE_ADAPTERGROUP_DEVICE __MSABI_LONG(0x00000200) #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX __MSABI_LONG(0x00000400) #define D3DCREATE_NOWINDOWCHANGES __MSABI_LONG(0x00000800) #define D3DCREATE_DISABLE_PSGP_THREADING __MSABI_LONG(0x00002000) #define D3DCREATE_ENABLE_PRESENTSTATS __MSABI_LONG(0x00004000) #define D3DCREATE_DISABLE_PRINTSCREEN __MSABI_LONG(0x00008000) #define D3DCREATE_SCREENSAVER __MSABI_LONG(0x10000000) /***************************************************************************** * Flags for SetPrivateData */ #define D3DSPD_IUNKNOWN __MSABI_LONG(0x00000001) /***************************************************************************** * #defines and error codes */ #define D3D_SDK_VERSION 32 #define D3DADAPTER_DEFAULT 0 #define D3DENUM_NO_WHQL_LEVEL __MSABI_LONG(0x00000002) #define D3DPRESENT_DONOTWAIT __MSABI_LONG(1) #define D3DPRESENT_LINEAR_CONTENT __MSABI_LONG(2) #define D3DPRESENT_BACK_BUFFERS_MAX __MSABI_LONG(3) #define D3DSGR_NO_CALIBRATION __MSABI_LONG(0x00000000) #define D3DSGR_CALIBRATE __MSABI_LONG(0x00000001) #define _FACD3D 0x876 #define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code ) #define MAKE_D3DSTATUS( code ) MAKE_HRESULT( 0, _FACD3D, code ) /***************************************************************************** * Direct3D Errors */ #define D3D_OK S_OK #define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072) #define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073) #define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074) #define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075) #define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076) #define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077) #define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078) #define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079) #define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081) #define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082) #define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086) #define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087) #define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150) #define D3DERR_MOREDATA MAKE_D3DHRESULT(2151) #define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152) #define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153) #define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154) #define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380) #define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155) #define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156) #define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157) #define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540) #define D3DOK_NOAUTOGEN MAKE_D3DSTATUS(2159) #define D3DERR_DEVICEREMOVED MAKE_D3DHRESULT(2160) #define D3DERR_DEVICEHUNG MAKE_D3DHRESULT(2164) #define S_NOT_RESIDENT MAKE_D3DSTATUS(2165) #define S_RESIDENT_IN_SHARED_MEMORY MAKE_D3DSTATUS(2166) #define S_PRESENT_MODE_CHANGED MAKE_D3DSTATUS(2167) #define S_PRESENT_OCCLUDED MAKE_D3DSTATUS(2168) #define D3DERR_UNSUPPORTEDOVERLAY MAKE_D3DHRESULT(2171) #define D3DERR_UNSUPPORTEDOVERLAYFORMAT MAKE_D3DHRESULT(2172) #define D3DERR_CANNOTPROTECTCONTENT MAKE_D3DHRESULT(2173) #define D3DERR_UNSUPPORTEDCRYPTO MAKE_D3DHRESULT(2174) #define D3DERR_PRESENT_STATISTICS_DISJOINT MAKE_D3DHRESULT(2180) /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(IID_IDirect3D9, 0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C); typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9; DEFINE_GUID(IID_IDirect3DDevice9, 0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb); typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9; DEFINE_GUID(IID_IDirect3DResource9, 0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4); typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9; DEFINE_GUID(IID_IDirect3DVertexBuffer9, 0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3); typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9; DEFINE_GUID(IID_IDirect3DVolume9, 0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1); typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9; DEFINE_GUID(IID_IDirect3DSwapChain9, 0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b); typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9; DEFINE_GUID(IID_IDirect3DSurface9, 0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b); typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9; DEFINE_GUID(IID_IDirect3DIndexBuffer9, 0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35); typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9; DEFINE_GUID(IID_IDirect3DBaseTexture9, 0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce); typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9; DEFINE_GUID(IID_IDirect3DTexture9, 0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5); typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9; DEFINE_GUID(IID_IDirect3DCubeTexture9, 0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f); typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9; DEFINE_GUID(IID_IDirect3DVolumeTexture9, 0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6); typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9; DEFINE_GUID(IID_IDirect3DVertexDeclaration9, 0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46); typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9; DEFINE_GUID(IID_IDirect3DVertexShader9, 0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36); typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9; DEFINE_GUID(IID_IDirect3DPixelShader9, 0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89); typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9; DEFINE_GUID(IID_IDirect3DStateBlock9, 0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b); typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9; DEFINE_GUID(IID_IDirect3DQuery9, 0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc); typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9; /***************************************************************************** * IDirect3D9 interface */ #undef INTERFACE #define INTERFACE IDirect3D9 DECLARE_INTERFACE_(IDirect3D9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D9 methods ***/ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE; STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE; STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE; STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE; STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3D9, 0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3D9 methods ***/ #define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a) #define IDirect3D9_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) #define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) #define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b) #define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d) #define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) #define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) #define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) #define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f) #define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) #define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d) #define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) #define IDirect3D9_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) #define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) #else /*** IUnknown methods ***/ #define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D9_AddRef(p) (p)->AddRef() #define IDirect3D9_Release(p) (p)->Release() /*** IDirect3D9 methods ***/ #define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a) #define IDirect3D9_GetAdapterCount(p) (p)->GetAdapterCount() #define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) #define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b) #define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d) #define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) #define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) #define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) #define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f) #define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) #define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d) #define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) #define IDirect3D9_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) #define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) #endif /***************************************************************************** * IDirect3DVolume9 interface */ #define INTERFACE IDirect3DVolume9 DECLARE_INTERFACE_(IDirect3DVolume9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVolume9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE; STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE; STDMETHOD(UnlockBox)(THIS) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DVolume9, 0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVolume9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolume9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolume9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVolume9 methods ***/ #define IDirect3DVolume9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolume9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolume9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DVolume9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DVolume9_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c) #define IDirect3DVolume9_UnlockBox(p) (p)->lpVtbl->UnlockBox(p) #else /*** IUnknown methods ***/ #define IDirect3DVolume9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolume9_AddRef(p) (p)->AddRef() #define IDirect3DVolume9_Release(p) (p)->Release() /*** IDirect3DVolume9 methods ***/ #define IDirect3DVolume9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolume9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolume9_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DVolume9_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DVolume9_LockBox(p,a,b,c) (p)->LockBox(a,b,c) #define IDirect3DVolume9_UnlockBox(p) (p)->UnlockBox() #endif /***************************************************************************** * IDirect3DSwapChain9 interface */ #define INTERFACE IDirect3DSwapChain9 DECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DSwapChain9 methods ***/ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region, DWORD flags) PURE; STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9 *pDestSurface) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9 **ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS *pRasterStatus) PURE; STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE *pMode) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **ppDevice) PURE; STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DSwapChain9, 0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSwapChain9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSwapChain9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DSwapChain9 methods ***/ #define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e) #define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a) #define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) #define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirect3DSwapChain9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a) #else /*** IUnknown methods ***/ #define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSwapChain9_AddRef(p) (p)->AddRef() #define IDirect3DSwapChain9_Release(p) (p)->Release() /*** IDirect3DSwapChain9 methods ***/ #define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e) #define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a) #define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->GetRasterStatus(a) #define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirect3DSwapChain9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->GetPresentParameters(a) #endif /***************************************************************************** * IDirect3DResource9 interface */ #define INTERFACE IDirect3DResource9 DECLARE_INTERFACE_(IDirect3DResource9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DResource9, 0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DResource9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DResource9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DResource9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DResource9 methods ***/ #define IDirect3DResource9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DResource9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DResource9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DResource9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DResource9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DResource9_GetType(p) (p)->lpVtbl->GetType(p) #else /*** IUnknown methods ***/ #define IDirect3DResource9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DResource9_AddRef(p) (p)->AddRef() #define IDirect3DResource9_Release(p) (p)->Release() /*** IDirect3DResource9 methods ***/ #define IDirect3DResource9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DResource9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DResource9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DResource9_GetPriority(p) (p)->GetPriority() #define IDirect3DResource9_PreLoad(p) (p)->PreLoad() #define IDirect3DResource9_GetType(p) (p)->GetType() #endif /***************************************************************************** * IDirect3DSurface9 interface */ #define INTERFACE IDirect3DSurface9 DECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DSurface9 methods ***/ STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE; STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE; STDMETHOD(UnlockRect)(THIS) PURE; STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DSurface9, 0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DSurface9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSurface9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSurface9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DSurface9 methods: IDirect3DResource9 ***/ #define IDirect3DSurface9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DSurface9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DSurface9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DSurface9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DSurface9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DSurface9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DSurface9 methods ***/ #define IDirect3DSurface9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DSurface9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DSurface9_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c) #define IDirect3DSurface9_UnlockRect(p) (p)->lpVtbl->UnlockRect(p) #define IDirect3DSurface9_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirect3DSurface9_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #else /*** IUnknown methods ***/ #define IDirect3DSurface9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSurface9_AddRef(p) (p)->AddRef() #define IDirect3DSurface9_Release(p) (p)->Release() /*** IDirect3DSurface9 methods: IDirect3DResource9 ***/ #define IDirect3DSurface9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DSurface9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DSurface9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DSurface9_GetPriority(p) (p)->GetPriority() #define IDirect3DSurface9_PreLoad(p) (p)->PreLoad() #define IDirect3DSurface9_GetType(p) (p)->GetType() /*** IDirect3DSurface9 methods ***/ #define IDirect3DSurface9_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DSurface9_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DSurface9_LockRect(p,a,b,c) (p)->LockRect(a,b,c) #define IDirect3DSurface9_UnlockRect(p) (p)->UnlockRect() #define IDirect3DSurface9_GetDC(p,a) (p)->GetDC(a) #define IDirect3DSurface9_ReleaseDC(p,a) (p)->ReleaseDC(a) #endif /***************************************************************************** * IDirect3DVertexBuffer9 interface */ #define INTERFACE IDirect3DVertexBuffer9 DECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DVertexBuffer9 methods ***/ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DVertexBuffer9, 0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/ #define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVertexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVertexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVertexBuffer9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DVertexBuffer9 methods ***/ #define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DVertexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else /*** IUnknown methods ***/ #define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer9_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer9_Release(p) (p)->Release() /*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/ #define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVertexBuffer9_GetPriority(p) (p)->GetPriority() #define IDirect3DVertexBuffer9_PreLoad(p) (p)->PreLoad() #define IDirect3DVertexBuffer9_GetType(p) (p)->GetType() /*** IDirect3DVertexBuffer9 methods ***/ #define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DVertexBuffer9_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->GetDesc(a) #endif /***************************************************************************** * IDirect3DIndexBuffer9 interface */ #define INTERFACE IDirect3DIndexBuffer9 DECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DIndexBuffer9 methods ***/ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DIndexBuffer9, 0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DIndexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DIndexBuffer9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/ #define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DIndexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DIndexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DIndexBuffer9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DIndexBuffer9 methods ***/ #define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DIndexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else /*** IUnknown methods ***/ #define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DIndexBuffer9_AddRef(p) (p)->AddRef() #define IDirect3DIndexBuffer9_Release(p) (p)->Release() /*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/ #define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DIndexBuffer9_GetPriority(p) (p)->GetPriority() #define IDirect3DIndexBuffer9_PreLoad(p) (p)->PreLoad() #define IDirect3DIndexBuffer9_GetType(p) (p)->GetType() /*** IDirect3DIndexBuffer9 methods ***/ #define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DIndexBuffer9_Unlock(p) (p)->Unlock() #define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->GetDesc(a) #endif /***************************************************************************** * IDirect3DBaseTexture9 interface */ #define INTERFACE IDirect3DBaseTexture9 DECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DBaseTexture9, 0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DBaseTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DBaseTexture9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DBaseTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DBaseTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DBaseTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DBaseTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DBaseTexture9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DBaseTexture9 methods ***/ #define IDirect3DBaseTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DBaseTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DBaseTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) #else /*** IUnknown methods ***/ #define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DBaseTexture9_AddRef(p) (p)->AddRef() #define IDirect3DBaseTexture9_Release(p) (p)->Release() /*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DBaseTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DBaseTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DBaseTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DBaseTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DBaseTexture9_GetType(p) (p)->GetType() /*** IDirect3DBaseTexture9 methods ***/ #define IDirect3DBaseTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DBaseTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DBaseTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() #endif /***************************************************************************** * IDirect3DCubeTexture9 interface */ #define INTERFACE IDirect3DCubeTexture9 DECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; /*** IDirect3DCubeTexture9 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE; STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE; STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE; STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES face, const RECT *dirty_rect) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DCubeTexture9, 0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DCubeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DCubeTexture9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DCubeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DCubeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DCubeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DCubeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DCubeTexture9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DCubeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DCubeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DCubeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) /*** IDirect3DCubeTexture9 methods ***/ #define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c) #define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e) #define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b) #define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DCubeTexture9_AddRef(p) (p)->AddRef() #define IDirect3DCubeTexture9_Release(p) (p)->Release() /*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DCubeTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DCubeTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DCubeTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DCubeTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DCubeTexture9_GetType(p) (p)->GetType() /*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DCubeTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DCubeTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DCubeTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() /*** IDirect3DCubeTexture9 methods ***/ #define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c) #define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e) #define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->UnlockRect(a,b) #define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b) #endif /***************************************************************************** * IDirect3DTexture9 interface */ #define INTERFACE IDirect3DTexture9 DECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; /*** IDirect3DTexture9 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE; STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE; STDMETHOD(LockRect)(THIS_ UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE; STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ const RECT *dirty_rect) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DTexture9, 0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DTexture9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) /*** IDirect3DTexture9 methods ***/ #define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b) #define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d) #define IDirect3DTexture9_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a) #define IDirect3DTexture9_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a) #else /*** IUnknown methods ***/ #define IDirect3DTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture9_AddRef(p) (p)->AddRef() #define IDirect3DTexture9_Release(p) (p)->Release() /*** IDirect3DTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DTexture9_GetType(p) (p)->GetType() /*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() /*** IDirect3DTexture9 methods ***/ #define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b) #define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d) #define IDirect3DTexture9_UnlockRect(p,a) (p)->UnlockRect(a) #define IDirect3DTexture9_AddDirtyRect(p,a) (p)->AddDirtyRect(a) #endif /***************************************************************************** * IDirect3DVolumeTexture9 interface */ #define INTERFACE IDirect3DVolumeTexture9 DECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; /*** IDirect3DVolumeTexture9 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE; STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE; STDMETHOD(LockBox)(THIS_ UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE; STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyBox)(THIS_ const D3DBOX *dirty_box) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DVolumeTexture9, 0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) /*** IDirect3DVolumeTexture9 methods ***/ #define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b) #define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d) #define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a) #define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a) #else /*** IUnknown methods ***/ #define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef() #define IDirect3DVolumeTexture9_Release(p) (p)->Release() /*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DVolumeTexture9_GetType(p) (p)->GetType() /*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() /*** IDirect3DVolumeTexture9 methods ***/ #define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b) #define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d) #define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a) #define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a) #endif /***************************************************************************** * IDirect3DVertexDeclaration9 interface */ #define INTERFACE IDirect3DVertexDeclaration9 DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexDeclaration9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DVertexDeclaration9, 0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexDeclaration9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexDeclaration9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexShader9 methods ***/ #define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->lpVtbl->GetDeclaration(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexDeclaration9_AddRef(p) (p)->AddRef() #define IDirect3DVertexDeclaration9_Release(p) (p)->Release() /*** IDirect3DVertexShader9 methods ***/ #define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->GetDeclaration(a,b) #endif /***************************************************************************** * IDirect3DVertexShader9 interface */ #define INTERFACE IDirect3DVertexShader9 DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexShader9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DVertexShader9, 0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexShader9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexShader9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexShader9 methods ***/ #define IDirect3DVertexShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexShader9_AddRef(p) (p)->AddRef() #define IDirect3DVertexShader9_Release(p) (p)->Release() /*** IDirect3DVertexShader9 methods ***/ #define IDirect3DVertexShader9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->GetFunction(a,b) #endif /***************************************************************************** * IDirect3DPixelShader9 interface */ #define INTERFACE IDirect3DPixelShader9 DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DPixelShader9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DPixelShader9, 0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DPixelShader9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DPixelShader9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DPixelShader9 methods ***/ #define IDirect3DPixelShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DPixelShader9_AddRef(p) (p)->AddRef() #define IDirect3DPixelShader9_Release(p) (p)->Release() /*** IDirect3DPixelShader9 methods ***/ #define IDirect3DPixelShader9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->GetFunction(a,b) #endif /***************************************************************************** * IDirect3DStateBlock9 interface */ #define INTERFACE IDirect3DStateBlock9 DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DStateBlock9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(Capture)(THIS) PURE; STDMETHOD(Apply)(THIS) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DStateBlock9, 0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DStateBlock9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DStateBlock9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DStateBlock9 methods ***/ #define IDirect3DStateBlock9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DStateBlock9_Capture(p) (p)->lpVtbl->Capture(p) #define IDirect3DStateBlock9_Apply(p) (p)->lpVtbl->Apply(p) #else /*** IUnknown methods ***/ #define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DStateBlock9_AddRef(p) (p)->AddRef() #define IDirect3DStateBlock9_Release(p) (p)->Release() /*** IDirect3DStateBlock9 methods ***/ #define IDirect3DStateBlock9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DStateBlock9_Capture(p) (p)->Capture() #define IDirect3DStateBlock9_Apply(p) (p)->Apply() #endif /***************************************************************************** * IDirect3DQuery9 interface */ #define INTERFACE IDirect3DQuery9 DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DQuery9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, GetDataSize)(THIS) PURE; STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE; STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DQuery9, 0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DQuery9 ***/ #define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p) #define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a) #define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DQuery9_AddRef(p) (p)->AddRef() #define IDirect3DQuery9_Release(p) (p)->Release() /*** IDirect3DQuery9 ***/ #define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DQuery9_GetType(p) (p)->GetType() #define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize() #define IDirect3DQuery9_Issue(p,a) (p)->Issue(a) #define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c) #endif /***************************************************************************** * IDirect3DDevice9 interface */ #define INTERFACE IDirect3DDevice9 DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice9 methods ***/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; STDMETHOD(EvictManagedResources)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE; STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE; STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE; STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE; STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE; STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE; STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE; STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE; STDMETHOD_(void, SetGammaRamp)(THIS_ UINT swapchain_idx, DWORD flags, const D3DGAMMARAMP *ramp) PURE; STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE; STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect, IDirect3DSurface9 *dst_surface, const POINT *dst_point) PURE; STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE; STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect, IDirect3DSurface9 *dst_surface, const RECT *dst_rect, D3DTEXTUREFILTERTYPE filter) PURE; STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9 *surface, const RECT *rect, D3DCOLOR color) PURE; STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE; STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE; STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE; STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags, D3DCOLOR color, float z, DWORD stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE; STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT9 *viewport) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE; STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE; STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE; STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE; STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS9 *clip_status) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE; STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE; STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE; STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE; STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE; STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE; STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE; STDMETHOD(SetScissorRect)(THIS_ const RECT *rect) PURE; STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE; STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE; STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE; STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE; STDMETHOD_(float, GetNPatchMode)(THIS) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE; STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT primitive_count, const void *data, UINT stride) PURE; STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count, UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE; STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE; STDMETHOD(CreateVertexDeclaration)(THIS_ const D3DVERTEXELEMENT9 *elements, IDirect3DVertexDeclaration9 **declaration) PURE; STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE; STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE; STDMETHOD(CreateVertexShader)(THIS_ const DWORD *byte_code, IDirect3DVertexShader9 **shader) PURE; STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE; STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE; STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE; STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE; STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE; STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE; STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE; STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE; STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE; STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE; STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, IDirect3DPixelShader9 **shader) PURE; STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE; STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE; STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE; STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE; STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE; STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE; STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE; }; #undef INTERFACE #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DDevice9, 0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb); #endif #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DDevice9 methods ***/ #define IDirect3DDevice9_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) #define IDirect3DDevice9_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) #define IDirect3DDevice9_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) #define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b) #define IDirect3DDevice9_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) #define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) #define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) #define IDirect3DDevice9_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) #define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) #define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b) #define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p) #define IDirect3DDevice9_Reset(p,a) (p)->lpVtbl->Reset(p,a) #define IDirect3DDevice9_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d) #define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b) #define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a) #define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c) #define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) #define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h) #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) #define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g) #define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d) #define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) #define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b) #define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b) #define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e) #define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c) #define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f) #define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b) #define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a) #define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) #define IDirect3DDevice9_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice9_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice9_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice9_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice9_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice9_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice9_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice9_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice9_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice9_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice9_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice9_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice9_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice9_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice9_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice9_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice9_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice9_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice9_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c) #define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c) #define IDirect3DDevice9_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) #define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) #define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) #define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) #define IDirect3DDevice9_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a) #define IDirect3DDevice9_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a) #define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a) #define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p) #define IDirect3DDevice9_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a) #define IDirect3DDevice9_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p) #define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) #define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f) #define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) #define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b) #define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) #define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) #define IDirect3DDevice9_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) #define IDirect3DDevice9_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) #define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b) #define IDirect3DDevice9_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) #define IDirect3DDevice9_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) #define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d) #define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d) #define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b) #define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b) #define IDirect3DDevice9_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a) #define IDirect3DDevice9_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a) #define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) #define IDirect3DDevice9_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) #define IDirect3DDevice9_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) #define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) #define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) #define IDirect3DDevice9_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) #define IDirect3DDevice9_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice9_AddRef(p) (p)->AddRef() #define IDirect3DDevice9_Release(p) (p)->Release() /*** IDirect3DDevice9 methods ***/ #define IDirect3DDevice9_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() #define IDirect3DDevice9_EvictManagedResources(p) (p)->EvictManagedResources() #define IDirect3DDevice9_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) #define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b) #define IDirect3DDevice9_GetCreationParameters(p,a) (p)->GetCreationParameters(a) #define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) #define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) #define IDirect3DDevice9_ShowCursor(p,a) (p)->ShowCursor(a) #define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) #define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b) #define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains() #define IDirect3DDevice9_Reset(p,a) (p)->Reset(a) #define IDirect3DDevice9_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d) #define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b) #define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a) #define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c) #define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) #define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g) #define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d) #define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) #define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b) #define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b) #define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e) #define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c) #define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f) #define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b) #define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a) #define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) #define IDirect3DDevice9_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice9_EndScene(p) (p)->EndScene() #define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice9_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice9_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice9_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice9_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice9_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice9_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice9_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice9_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice9_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice9_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice9_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice9_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice9_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice9_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice9_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice9_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice9_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c) #define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c) #define IDirect3DDevice9_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) #define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) #define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) #define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) #define IDirect3DDevice9_SetScissorRect(p,a) (p)->SetScissorRect(a) #define IDirect3DDevice9_GetScissorRect(p,a) (p)->GetScissorRect(a) #define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a) #define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing() #define IDirect3DDevice9_SetNPatchMode(p,a) (p)->SetNPatchMode(a) #define IDirect3DDevice9_GetNPatchMode(p) (p)->GetNPatchMode() #define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) #define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f) #define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) #define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f) #define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b) #define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a) #define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a) #define IDirect3DDevice9_SetFVF(p,a) (p)->SetFVF(a) #define IDirect3DDevice9_GetFVF(p,a) (p)->GetFVF(a) #define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b) #define IDirect3DDevice9_SetVertexShader(p,a) (p)->SetVertexShader(a) #define IDirect3DDevice9_GetVertexShader(p,a) (p)->GetVertexShader(a) #define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d) #define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d) #define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b) #define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b) #define IDirect3DDevice9_SetIndices(p,a) (p)->SetIndices(a) #define IDirect3DDevice9_GetIndices(p,a) (p)->GetIndices(a) #define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) #define IDirect3DDevice9_SetPixelShader(p,a) (p)->SetPixelShader(a) #define IDirect3DDevice9_GetPixelShader(p,a) (p)->GetPixelShader(a) #define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) #define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) #define IDirect3DDevice9_DeletePatch(p,a) (p)->DeletePatch(a) #define IDirect3DDevice9_CreateQuery(p,a,b) (p)->CreateQuery(a,b) #endif #if !defined(D3D_DISABLE_9EX) typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX; typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX; typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3D9Ex, 0x02177241, 0x69fc, 0x400c, 0x8f, 0xf1, 0x93, 0xa4, 0x4d, 0xf6, 0x86, 0x1d); #endif DEFINE_GUID(IID_IDirect3D9Ex, 0x02177241, 0x69fc, 0x400c, 0x8f, 0xf1, 0x93, 0xa4, 0x4d, 0xf6, 0x86, 0x1d); #define INTERFACE IDirect3D9Ex DECLARE_INTERFACE_(IDirect3D9Ex, IDirect3D9) { /* IUnknown */ STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* IDirect3D9 */ STDMETHOD(RegisterSoftwareDevice)(THIS_ void *init) PURE; STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT adapter_idx, DWORD flags, D3DADAPTER_IDENTIFIER9 *identifier) PURE; STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT adapter_idx, D3DFORMAT format) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT adapter_idx, D3DFORMAT format, UINT mode_idx, D3DDISPLAYMODE *mode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT adapter_idx, D3DDISPLAYMODE *mode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DFORMAT display_format, D3DFORMAT backbuffer_format, BOOL windowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DFORMAT adapter_format, DWORD usage, D3DRESOURCETYPE resource_type, D3DFORMAT format) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DFORMAT surface_format, BOOL windowed, D3DMULTISAMPLE_TYPE multisample_type, DWORD *quality_levels) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DFORMAT adapter_format, D3DFORMAT rt_format, D3DFORMAT ds_format) PURE; STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DFORMAT src_format, D3DFORMAT dst_format) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DCAPS9 *caps) PURE; STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT adapter_idx) PURE; STDMETHOD(CreateDevice)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters, struct IDirect3DDevice9 **device) PURE; /* IDirect3D9Ex */ STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT adapter_idx, const D3DDISPLAYMODEFILTER *filter) PURE; STDMETHOD(EnumAdapterModesEx)(THIS_ UINT adapter_idx, const D3DDISPLAYMODEFILTER *filter, UINT mode_idx, D3DDISPLAYMODEEX *mode) PURE; STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT adapter_idx, D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation); STDMETHOD(CreateDeviceEx)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode, struct IDirect3DDevice9Ex **device) PURE; STDMETHOD(GetAdapterLUID)(THIS_ UINT adapter_idx, LUID *luid) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /* IUnknown */ #define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D9Ex_Release(p) (p)->lpVtbl->Release(p) /* IDirect3D9 */ #define IDirect3D9Ex_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a) #define IDirect3D9Ex_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) #define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) #define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b) #define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) #define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) #define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f) #define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d) #define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) #define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) #define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) /* IDirect3D9Ex */ #define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->lpVtbl->GetAdapterModeCountEx(p,a,b) #define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c) #define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g) #define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->lpVtbl->GetAdapterLUID(p,a,b) #else /* IUnknown */ #define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D9Ex_AddRef(p) (p)->AddRef() #define IDirect3D9Ex_Release(p) (p)->Release() /* IDirect3D9 */ #define IDirect3D9Ex_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a) #define IDirect3D9Ex_GetAdapterCount(p) (p)->GetAdapterCount() #define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) #define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b) #define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) #define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) #define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f) #define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d) #define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) #define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) #define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) /* IDirect3D9Ex */ #define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->GetAdapterModeCountEx(a,b) #define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->EnumAdapterModesEx(a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->GetAdapterDisplayModeEx(a,b,c) #define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->CreateDeviceEx(a,b,c,d,e,f,g) #define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->GetAdapterLUID(a,b) #endif #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3); #endif DEFINE_GUID(IID_IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3); #define INTERFACE IDirect3DSwapChain9Ex DECLARE_INTERFACE_(IDirect3DSwapChain9Ex, IDirect3DSwapChain9) { /* IUnknown */ STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* IDirect3DSwapChain9 */ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region, DWORD flags) PURE; STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9 *dst_surface) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT backbuffer_idx, D3DBACKBUFFER_TYPE backbuffer_type, struct IDirect3DSurface9 **backbuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS *raster_status) PURE; STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE *mode) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS *parameters) PURE; /* IDirect3DSwapChain9Ex */ STDMETHOD(GetLastPresentCount)(THIS_ UINT *last_present_count) PURE; STDMETHOD(GetPresentStats)(THIS_ D3DPRESENTSTATS *stats) PURE; STDMETHOD(GetDisplayModeEx)(THIS_ D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /* IUnknown */ #define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSwapChain9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSwapChain9Ex_Release(p) (p)->lpVtbl->Release(p) /* IDirect3DSwapChain9 */ #define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e) #define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a) #define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) #define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a) /* IDirect3DSwapChain9Ex */ #define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->lpVtbl->GetLastPresentCount(p,a) #define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->lpVtbl->GetPresentStats(p,a) #define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->lpVtbl->GetDisplayModeEx(p,a,b) #else /* IUnknown */ #define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSwapChain9Ex_AddRef(p) (p)->AddRef() #define IDirect3DSwapChain9Ex_Release(p) (p)->Release() /* IDirect3DSwapChain9 */ #define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e) #define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a) #define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->GetRasterStatus(a) #define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->GetPresentParameters(a) /* IDirect3DSwapChain9Ex */ #define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->GetLastPresentCount(a) #define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->GetPresentStats(a) #define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->GetDisplayModeEx(a,b) #endif #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a); #endif DEFINE_GUID(IID_IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a); #define INTERFACE IDirect3DDevice9Ex DECLARE_INTERFACE_(IDirect3DDevice9Ex, IDirect3DDevice9) { /* IUnknown */ STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* IDirect3DDevice9 */ STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; STDMETHOD(EvictManagedResources)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D9 **d3d9) PURE; STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9 *caps) PURE; STDMETHOD(GetDisplayMode)(THIS_ UINT swapchain_idx, D3DDISPLAYMODE *mode) PURE; STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *parameters) PURE; STDMETHOD(SetCursorProperties)(THIS_ UINT hotspot_x, UINT hotspot_y, IDirect3DSurface9 *bitmap) PURE; STDMETHOD_(void, SetCursorPosition)(THIS_ int x, int y, DWORD flags) PURE; STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL show) PURE; STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS *parameters, IDirect3DSwapChain9 **swapchain) PURE; STDMETHOD(GetSwapChain)(THIS_ UINT swapchain_idx, IDirect3DSwapChain9 **swapchain) PURE; STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE; STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS *parameters) PURE; STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT swapchain_idx, UINT backbuffer_idx, D3DBACKBUFFER_TYPE backbuffer_type, IDirect3DSurface9 **backbuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ UINT swapchain_idx, D3DRASTER_STATUS *raster_status) PURE; STDMETHOD(SetDialogBoxMode)(THIS_ BOOL enable) PURE; STDMETHOD_(void, SetGammaRamp)(THIS_ UINT swapchain_idx, DWORD flags, const D3DGAMMARAMP *ramp) PURE; STDMETHOD_(void, GetGammaRamp)(THIS_ UINT swapchain_idx, D3DGAMMARAMP *ramp) PURE; STDMETHOD(CreateTexture)(THIS_ UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, IDirect3DTexture9 **texture, HANDLE *shared_handle) PURE; STDMETHOD(CreateVolumeTexture)(THIS_ UINT width, UINT height, UINT depth, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, IDirect3DVolumeTexture9 **texture, HANDLE *shared_handle) PURE; STDMETHOD(CreateCubeTexture)(THIS_ UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, IDirect3DCubeTexture9 **texture, HANDLE *shared_handle) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ UINT size, DWORD usage, DWORD fvf, D3DPOOL pool, IDirect3DVertexBuffer9 **buffer, HANDLE *shared_handle) PURE; STDMETHOD(CreateIndexBuffer)(THIS_ UINT size, DWORD usage, D3DFORMAT format, D3DPOOL pool, IDirect3DIndexBuffer9 **buffer, HANDLE *shared_handle) PURE; STDMETHOD(CreateRenderTarget)(THIS_ UINT width, UINT height, D3DFORMAT format, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL lockable, IDirect3DSurface9 **surface, HANDLE *shared_handle) PURE; STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT width, UINT height, D3DFORMAT format, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard, IDirect3DSurface9 **surface, HANDLE *shared_handle) PURE; STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect, IDirect3DSurface9 *dst_surface, const POINT *dst_point) PURE; STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9 *src_texture, IDirect3DBaseTexture9 *dst_texture) PURE; STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9 *render_target, IDirect3DSurface9 *dst_surface) PURE; STDMETHOD(GetFrontBufferData)(THIS_ UINT swapchain_idx, IDirect3DSurface9 *dst_surface) PURE; STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect, IDirect3DSurface9 *dst_surface, const RECT *dst_rect, D3DTEXTUREFILTERTYPE filter) PURE; STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9 *surface, const RECT *rect, D3DCOLOR colour) PURE; STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT width, UINT height, D3DFORMAT format, D3DPOOL pool, IDirect3DSurface9 **surface, HANDLE *shared_handle) PURE; STDMETHOD(SetRenderTarget)(THIS_ DWORD idx, IDirect3DSurface9 *surface) PURE; STDMETHOD(GetRenderTarget)(THIS_ DWORD idx, IDirect3DSurface9 **surface) PURE; STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9 *depth_stencil) PURE; STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9 **depth_stencil) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags, D3DCOLOR colour, float z, DWORD stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX *matrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE; STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT9 *viewport) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9 *viewport) PURE; STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9 *material) PURE; STDMETHOD(SetLight)(THIS_ DWORD idx, const D3DLIGHT9 *light) PURE; STDMETHOD(GetLight)(THIS_ DWORD idx, D3DLIGHT9 *light) PURE; STDMETHOD(LightEnable)(THIS_ DWORD idx, BOOL enable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD idx, BOOL *enable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD idx, const float *plane) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD idx, float *plane) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE state, DWORD value) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE state, DWORD *value) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE type, IDirect3DStateBlock9 **stateblock) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9 **stateblock) PURE; STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS9 *clip_status) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9 *clip_status) PURE; STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirect3DBaseTexture9 **texture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirect3DBaseTexture9 *texture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD *value) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value) PURE; STDMETHOD(GetSamplerState)(THIS_ DWORD sampler_idx, D3DSAMPLERSTATETYPE state, DWORD *value) PURE; STDMETHOD(SetSamplerState)(THIS_ DWORD sampler_idx, D3DSAMPLERSTATETYPE state, DWORD value) PURE; STDMETHOD(ValidateDevice)(THIS_ DWORD *pass_count) PURE; STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE; STDMETHOD(GetPaletteEntries)(THIS_ UINT palette_idx, PALETTEENTRY *entries) PURE; STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT palette_idx) PURE; STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *palette_idx) PURE; STDMETHOD(SetScissorRect)(THIS_ const RECT *rect) PURE; STDMETHOD(GetScissorRect)(THIS_ RECT *rect) PURE; STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL software) PURE; STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE; STDMETHOD(SetNPatchMode)(THIS_ float segment_count) PURE; STDMETHOD_(float, GetNPatchMode)(THIS) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT start_vertex, UINT primitive_count) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, INT base_vertex_idx, UINT min_vertex_idx, UINT vertex_count, UINT start_idx, UINT primitive_count) PURE; STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT primitive_count, const void *data, UINT stride) PURE; STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count, UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE; STDMETHOD(ProcessVertices)(THIS_ UINT src_start_idx, UINT dst_idx, UINT vertex_count, IDirect3DVertexBuffer9 *dst_buffer, IDirect3DVertexDeclaration9 *declaration, DWORD flags) PURE; STDMETHOD(CreateVertexDeclaration)(THIS_ const D3DVERTEXELEMENT9 *elements, IDirect3DVertexDeclaration9 **declaration) PURE; STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9 *declaration) PURE; STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9 **declaration) PURE; STDMETHOD(SetFVF)(THIS_ DWORD fvf) PURE; STDMETHOD(GetFVF)(THIS_ DWORD *fvf) PURE; STDMETHOD(CreateVertexShader)(THIS_ const DWORD *byte_code, IDirect3DVertexShader9 **shader) PURE; STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9 *shader) PURE; STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9 **shader) PURE; STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE; STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT reg_idx, float *data, UINT count) PURE; STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE; STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT reg_idx, int *data, UINT count) PURE; STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE; STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT reg_idx, BOOL *data, UINT count) PURE; STDMETHOD(SetStreamSource)(THIS_ UINT stream_idx, IDirect3DVertexBuffer9 *buffer, UINT offset, UINT stride) PURE; STDMETHOD(GetStreamSource)(THIS_ UINT stream_idx, IDirect3DVertexBuffer9 **buffer, UINT *offset, UINT *stride) PURE; STDMETHOD(SetStreamSourceFreq)(THIS_ UINT stream_idx, UINT frequency) PURE; STDMETHOD(GetStreamSourceFreq)(THIS_ UINT stream_idx, UINT *frequency) PURE; STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9 *buffer) PURE; STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9 **buffer) PURE; STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, IDirect3DPixelShader9 **shader) PURE; STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9 *shader) PURE; STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9 **shader) PURE; STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE; STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT reg_idx, float *data, UINT count) PURE; STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE; STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT reg_idx, int *data, UINT count) PURE; STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE; STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT reg_idx, BOOL *data, UINT count) PURE; STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE; STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE; STDMETHOD(DeletePatch)(THIS_ UINT handle) PURE; STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE type, IDirect3DQuery9 **query) PURE; /* IDirect3DDevice9Ex */ STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE; STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface, IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs, D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE; STDMETHOD(PresentEx)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region, DWORD flags) PURE; STDMETHOD(GetGPUThreadPriority)(THIS_ INT *priority) PURE; STDMETHOD(SetGPUThreadPriority)(THIS_ INT priority) PURE; STDMETHOD(WaitForVBlank)(THIS_ UINT swapchain_idx) PURE; STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE; STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT max_latency) PURE; STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *max_latency) PURE; STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE; STDMETHOD(CreateRenderTargetEx)(THIS_ UINT width, UINT height, D3DFORMAT format, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL lockable, IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE; STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT width, UINT Height, D3DFORMAT format, D3DPOOL pool, IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE; STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard, IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE; STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode) PURE; STDMETHOD(GetDisplayModeEx)(THIS_ UINT swapchain_idx, D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /* IUnknown */ #define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice9Ex_Release(p) (p)->lpVtbl->Release(p) /* IDirect3DDevice9 */ #define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) #define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) #define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) #define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b) #define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) #define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) #define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) #define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) #define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) #define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b) #define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p) #define IDirect3DDevice9Ex_Reset(p,a) (p)->lpVtbl->Reset(p,a) #define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d) #define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b) #define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a) #define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c) #define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) #define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h) #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) #define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d) #define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) #define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b) #define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b) #define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e) #define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b) #define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a) #define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) #define IDirect3DDevice9Ex_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice9Ex_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice9Ex_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice9Ex_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c) #define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c) #define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) #define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) #define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) #define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) #define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a) #define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a) #define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a) #define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p) #define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a) #define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p) #define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) #define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) #define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b) #define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) #define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) #define IDirect3DDevice9Ex_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) #define IDirect3DDevice9Ex_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) #define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b) #define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) #define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) #define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d) #define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d) #define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b) #define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b) #define IDirect3DDevice9Ex_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a) #define IDirect3DDevice9Ex_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a) #define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) #define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) #define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) #define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) #define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) #define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) #define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b) /* IDirect3DDevice9Ex */ #define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d) #define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->lpVtbl->PresentEx(p,a,b,c,d,e) #define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->lpVtbl->GetGPUThreadPriority(p,a) #define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->lpVtbl->SetGPUThreadPriority(p,a) #define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->lpVtbl->WaitForVBlank(p,a) #define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->lpVtbl->CheckResourceResidency(p,a,b) #define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->lpVtbl->SetMaximumFrameLatency(p,a) #define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->lpVtbl->GetMaximumFrameLatency(p,a) #define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->lpVtbl->CheckDeviceState(p,a) #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) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) #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) #define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->lpVtbl->ResetEx(p,a,b) #define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetDisplayModeEx(p,a,b,c) #else /* IUnknown */ #define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice9Ex_AddRef(p) (p)->AddRef() #define IDirect3DDevice9Ex_Release(p) (p)->Release() /* IDirect3DDevice9 */ #define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() #define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->EvictManagedResources() #define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) #define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b) #define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->GetCreationParameters(a) #define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) #define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) #define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->ShowCursor(a) #define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) #define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b) #define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains() #define IDirect3DDevice9Ex_Reset(p,a) (p)->Reset(a) #define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d) #define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b) #define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a) #define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c) #define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) #define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d) #define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) #define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b) #define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b) #define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e) #define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b) #define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a) #define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) #define IDirect3DDevice9Ex_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice9Ex_EndScene(p) (p)->EndScene() #define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice9Ex_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice9Ex_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c) #define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c) #define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) #define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) #define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) #define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) #define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->SetScissorRect(a) #define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->GetScissorRect(a) #define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a) #define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing() #define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->SetNPatchMode(a) #define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->GetNPatchMode() #define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) #define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f) #define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) #define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b) #define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a) #define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a) #define IDirect3DDevice9Ex_SetFVF(p,a) (p)->SetFVF(a) #define IDirect3DDevice9Ex_GetFVF(p,a) (p)->GetFVF(a) #define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b) #define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->SetVertexShader(a) #define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->GetVertexShader(a) #define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d) #define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d) #define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b) #define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b) #define IDirect3DDevice9Ex_SetIndices(p,a) (p)->SetIndices(a) #define IDirect3DDevice9Ex_GetIndices(p,a) (p)->GetIndices(a) #define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) #define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->SetPixelShader(a) #define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->GetPixelShader(a) #define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) #define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) #define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->DeletePatch(a) #define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->CreateQuery(a,b) /* IDirect3DDevice9Ex */ #define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->SetConvolutionMonoKernel(a,b,c,d) #define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->ComposeRects(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->PresentEx(a,b,c,d,e) #define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->GetGPUThreadPriority(a) #define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->SetGPUThreadPriority(a) #define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->WaitForVBlank(a) #define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->CheckResourceResidency(a,b) #define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->SetMaximumFrameLatency(a) #define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->GetMaximumFrameLatency(a) #define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->CheckDeviceState(a) #define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) (p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->ResetEx(a,b) #define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->GetDisplayModeEx(a,b,c) #endif #endif /* !defined(D3D_DISABLE_9EX) */ #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ int WINAPI D3DPERF_BeginEvent(D3DCOLOR color, const WCHAR *name); int WINAPI D3DPERF_EndEvent(void); DWORD WINAPI D3DPERF_GetStatus(void); BOOL WINAPI D3DPERF_QueryRepeatFrame(void); void WINAPI D3DPERF_SetMarker(D3DCOLOR color, const WCHAR *name); void WINAPI D3DPERF_SetOptions(DWORD options); void WINAPI D3DPERF_SetRegion(D3DCOLOR color, const WCHAR *name); IDirect3D9 * WINAPI Direct3DCreate9(UINT sdk_version); #ifndef D3D_DISABLE_9EX HRESULT WINAPI Direct3DCreate9Ex(UINT sdk_version, IDirect3D9Ex **d3d9ex); #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* _D3D9_H_ */ ================================================ FILE: wine/windows/d3d9caps.h ================================================ /* * Copyright (C) 2002-2003 Jason Edmeades * Raphael Junqueira * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3D9CAPS_H #define __WINE_D3D9CAPS_H #ifdef __i386__ #include #endif /* * Definitions */ #define D3DCAPS_OVERLAY __MSABI_LONG(0x00000800) #define D3DCAPS_READ_SCANLINE __MSABI_LONG(0x00020000) #define D3DCURSORCAPS_COLOR 1 #define D3DCURSORCAPS_LOWRES 2 #define D3DDEVCAPS2_STREAMOFFSET __MSABI_LONG(0x00000001) #define D3DDEVCAPS2_DMAPNPATCH __MSABI_LONG(0x00000002) #define D3DDEVCAPS2_ADAPTIVETESSRTPATCH __MSABI_LONG(0x00000004) #define D3DDEVCAPS2_ADAPTIVETESSNPATCH __MSABI_LONG(0x00000008) #define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES __MSABI_LONG(0x00000010) #define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH __MSABI_LONG(0x00000020) #define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET __MSABI_LONG(0x00000040) #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x0000010 #define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x0000020 #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x0000040 #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x0000080 #define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x0000100 #define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x0000200 #define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x0000400 #define D3DDEVCAPS_CANRENDERAFTERFLIP 0x0000800 #define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x0001000 #define D3DDEVCAPS_DRAWPRIMITIVES2 0x0002000 #define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x0004000 #define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x0008000 #define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x0010000 #define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x0020000 #define D3DDEVCAPS_HWRASTERIZATION 0x0080000 #define D3DDEVCAPS_PUREDEVICE 0x0100000 #define D3DDEVCAPS_QUINTICRTPATCHES 0x0200000 #define D3DDEVCAPS_RTPATCHES 0x0400000 #define D3DDEVCAPS_RTPATCHHANDLEZERO 0x0800000 #define D3DDEVCAPS_NPATCHES 0x1000000 #define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x00FFFF #define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x080000 #define D3DFVFCAPS_PSIZE 0x100000 #define D3DLINECAPS_TEXTURE 0x01 #define D3DLINECAPS_ZTEST 0x02 #define D3DLINECAPS_BLEND 0x04 #define D3DLINECAPS_ALPHACMP 0x08 #define D3DLINECAPS_FOG 0x10 #define D3DLINECAPS_ANTIALIAS 0x20 #define D3DPBLENDCAPS_ZERO __MSABI_LONG(0x00000001) #define D3DPBLENDCAPS_ONE __MSABI_LONG(0x00000002) #define D3DPBLENDCAPS_SRCCOLOR __MSABI_LONG(0x00000004) #define D3DPBLENDCAPS_INVSRCCOLOR __MSABI_LONG(0x00000008) #define D3DPBLENDCAPS_SRCALPHA __MSABI_LONG(0x00000010) #define D3DPBLENDCAPS_INVSRCALPHA __MSABI_LONG(0x00000020) #define D3DPBLENDCAPS_DESTALPHA __MSABI_LONG(0x00000040) #define D3DPBLENDCAPS_INVDESTALPHA __MSABI_LONG(0x00000080) #define D3DPBLENDCAPS_DESTCOLOR __MSABI_LONG(0x00000100) #define D3DPBLENDCAPS_INVDESTCOLOR __MSABI_LONG(0x00000200) #define D3DPBLENDCAPS_SRCALPHASAT __MSABI_LONG(0x00000400) #define D3DPBLENDCAPS_BOTHSRCALPHA __MSABI_LONG(0x00000800) #define D3DPBLENDCAPS_BOTHINVSRCALPHA __MSABI_LONG(0x00001000) #define D3DPBLENDCAPS_BLENDFACTOR __MSABI_LONG(0x00002000) #ifndef D3D_DISABLE_9EX #define D3DPBLENDCAPS_SRCCOLOR2 __MSABI_LONG(0x00004000) #define D3DPBLENDCAPS_INVSRCCOLOR2 __MSABI_LONG(0x00008000) #endif #define D3DPCMPCAPS_NEVER 0x01 #define D3DPCMPCAPS_LESS 0x02 #define D3DPCMPCAPS_EQUAL 0x04 #define D3DPCMPCAPS_LESSEQUAL 0x08 #define D3DPCMPCAPS_GREATER 0x10 #define D3DPCMPCAPS_NOTEQUAL 0x20 #define D3DPCMPCAPS_GREATEREQUAL 0x40 #define D3DPCMPCAPS_ALWAYS 0x80 #define D3DPMISCCAPS_MASKZ __MSABI_LONG(0x00000002) #define D3DPMISCCAPS_LINEPATTERNREP __MSABI_LONG(0x00000004) #define D3DPMISCCAPS_CULLNONE __MSABI_LONG(0x00000010) #define D3DPMISCCAPS_CULLCW __MSABI_LONG(0x00000020) #define D3DPMISCCAPS_CULLCCW __MSABI_LONG(0x00000040) #define D3DPMISCCAPS_COLORWRITEENABLE __MSABI_LONG(0x00000080) #define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS __MSABI_LONG(0x00000100) #define D3DPMISCCAPS_CLIPTLVERTS __MSABI_LONG(0x00000200) #define D3DPMISCCAPS_TSSARGTEMP __MSABI_LONG(0x00000400) #define D3DPMISCCAPS_BLENDOP __MSABI_LONG(0x00000800) #define D3DPMISCCAPS_NULLREFERENCE __MSABI_LONG(0x00001000) #define D3DPMISCCAPS_INDEPENDENTWRITEMASKS __MSABI_LONG(0x00004000) #define D3DPMISCCAPS_PERSTAGECONSTANT __MSABI_LONG(0x00008000) #define D3DPMISCCAPS_FOGANDSPECULARALPHA __MSABI_LONG(0x00010000) #define D3DPMISCCAPS_SEPARATEALPHABLEND __MSABI_LONG(0x00020000) #define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS __MSABI_LONG(0x00040000) #define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING __MSABI_LONG(0x00080000) #define D3DPMISCCAPS_FOGVERTEXCLAMPED __MSABI_LONG(0x00100000) #ifndef D3D_DISABLE_9EX #define D3DPMISCCAPS_POSTBLENDSRGBCONVERT __MSABI_LONG(0x00200000) #endif #define D3DPRASTERCAPS_DITHER __MSABI_LONG(0x00000001) #define D3DPRASTERCAPS_PAT __MSABI_LONG(0x00000008) #define D3DPRASTERCAPS_ZTEST __MSABI_LONG(0x00000010) #define D3DPRASTERCAPS_FOGVERTEX __MSABI_LONG(0x00000080) #define D3DPRASTERCAPS_FOGTABLE __MSABI_LONG(0x00000100) #define D3DPRASTERCAPS_ANTIALIASEDGES __MSABI_LONG(0x00001000) #define D3DPRASTERCAPS_MIPMAPLODBIAS __MSABI_LONG(0x00002000) #define D3DPRASTERCAPS_ZBIAS __MSABI_LONG(0x00004000) #define D3DPRASTERCAPS_ZBUFFERLESSHSR __MSABI_LONG(0x00008000) #define D3DPRASTERCAPS_FOGRANGE __MSABI_LONG(0x00010000) #define D3DPRASTERCAPS_ANISOTROPY __MSABI_LONG(0x00020000) #define D3DPRASTERCAPS_WBUFFER __MSABI_LONG(0x00040000) #define D3DPRASTERCAPS_WFOG __MSABI_LONG(0x00100000) #define D3DPRASTERCAPS_ZFOG __MSABI_LONG(0x00200000) #define D3DPRASTERCAPS_COLORPERSPECTIVE __MSABI_LONG(0x00400000) #define D3DPRASTERCAPS_SCISSORTEST __MSABI_LONG(0x01000000) #define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS __MSABI_LONG(0x02000000) #define D3DPRASTERCAPS_DEPTHBIAS __MSABI_LONG(0x04000000) #define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE __MSABI_LONG(0x08000000) #define D3DPRESENT_INTERVAL_DEFAULT 0x00000000 #define D3DPRESENT_INTERVAL_ONE 0x00000001 #define D3DPRESENT_INTERVAL_TWO 0x00000002 #define D3DPRESENT_INTERVAL_THREE 0x00000004 #define D3DPRESENT_INTERVAL_FOUR 0x00000008 #define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000 #define D3DPSHADECAPS_COLORGOURAUDRGB 0x00008 #define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00200 #define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x04000 #define D3DPSHADECAPS_FOGGOURAUD 0x80000 #define D3DPTADDRESSCAPS_WRAP 0x01 #define D3DPTADDRESSCAPS_MIRROR 0x02 #define D3DPTADDRESSCAPS_CLAMP 0x04 #define D3DPTADDRESSCAPS_BORDER 0x08 #define D3DPTADDRESSCAPS_INDEPENDENTUV 0x10 #define D3DPTADDRESSCAPS_MIRRORONCE 0x20 #define D3DPTEXTURECAPS_PERSPECTIVE __MSABI_LONG(0x00000001) #define D3DPTEXTURECAPS_POW2 __MSABI_LONG(0x00000002) #define D3DPTEXTURECAPS_ALPHA __MSABI_LONG(0x00000004) #define D3DPTEXTURECAPS_SQUAREONLY __MSABI_LONG(0x00000020) #define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE __MSABI_LONG(0x00000040) #define D3DPTEXTURECAPS_ALPHAPALETTE __MSABI_LONG(0x00000080) #define D3DPTEXTURECAPS_NONPOW2CONDITIONAL __MSABI_LONG(0x00000100) #define D3DPTEXTURECAPS_PROJECTED __MSABI_LONG(0x00000400) #define D3DPTEXTURECAPS_CUBEMAP __MSABI_LONG(0x00000800) #define D3DPTEXTURECAPS_VOLUMEMAP __MSABI_LONG(0x00002000) #define D3DPTEXTURECAPS_MIPMAP __MSABI_LONG(0x00004000) #define D3DPTEXTURECAPS_MIPVOLUMEMAP __MSABI_LONG(0x00008000) #define D3DPTEXTURECAPS_MIPCUBEMAP __MSABI_LONG(0x00010000) #define D3DPTEXTURECAPS_CUBEMAP_POW2 __MSABI_LONG(0x00020000) #define D3DPTEXTURECAPS_VOLUMEMAP_POW2 __MSABI_LONG(0x00040000) #define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV __MSABI_LONG(0x00200000) #define D3DPTFILTERCAPS_MINFPOINT __MSABI_LONG(0x00000100) #define D3DPTFILTERCAPS_MINFLINEAR __MSABI_LONG(0x00000200) #define D3DPTFILTERCAPS_MINFANISOTROPIC __MSABI_LONG(0x00000400) #define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD __MSABI_LONG(0x00000800) #define D3DPTFILTERCAPS_MINFGAUSSIANQUAD __MSABI_LONG(0x00001000) #define D3DPTFILTERCAPS_MIPFPOINT __MSABI_LONG(0x00010000) #define D3DPTFILTERCAPS_MIPFLINEAR __MSABI_LONG(0x00020000) #ifndef D3D_DISABLE_9EX #define D3DPTFILTERCAPS_CONVOLUTIONMONO __MSABI_LONG(0x00040000) #endif #define D3DPTFILTERCAPS_MAGFPOINT __MSABI_LONG(0x01000000) #define D3DPTFILTERCAPS_MAGFLINEAR __MSABI_LONG(0x02000000) #define D3DPTFILTERCAPS_MAGFANISOTROPIC __MSABI_LONG(0x04000000) #define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD __MSABI_LONG(0x08000000) #define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD __MSABI_LONG(0x10000000) #define D3DSTENCILCAPS_KEEP 0x01 #define D3DSTENCILCAPS_ZERO 0x02 #define D3DSTENCILCAPS_REPLACE 0x04 #define D3DSTENCILCAPS_INCRSAT 0x08 #define D3DSTENCILCAPS_DECRSAT 0x10 #define D3DSTENCILCAPS_INVERT 0x20 #define D3DSTENCILCAPS_INCR 0x40 #define D3DSTENCILCAPS_DECR 0x80 #define D3DSTENCILCAPS_TWOSIDED 0x100 #define D3DTEXOPCAPS_DISABLE 0x0000001 #define D3DTEXOPCAPS_SELECTARG1 0x0000002 #define D3DTEXOPCAPS_SELECTARG2 0x0000004 #define D3DTEXOPCAPS_MODULATE 0x0000008 #define D3DTEXOPCAPS_MODULATE2X 0x0000010 #define D3DTEXOPCAPS_MODULATE4X 0x0000020 #define D3DTEXOPCAPS_ADD 0x0000040 #define D3DTEXOPCAPS_ADDSIGNED 0x0000080 #define D3DTEXOPCAPS_ADDSIGNED2X 0x0000100 #define D3DTEXOPCAPS_SUBTRACT 0x0000200 #define D3DTEXOPCAPS_ADDSMOOTH 0x0000400 #define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x0000800 #define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x0001000 #define D3DTEXOPCAPS_BLENDFACTORALPHA 0x0002000 #define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x0004000 #define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x0008000 #define D3DTEXOPCAPS_PREMODULATE 0x0010000 #define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x0020000 #define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x0040000 #define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x0080000 #define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x0100000 #define D3DTEXOPCAPS_BUMPENVMAP 0x0200000 #define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x0400000 #define D3DTEXOPCAPS_DOTPRODUCT3 0x0800000 #define D3DTEXOPCAPS_MULTIPLYADD 0x1000000 #define D3DTEXOPCAPS_LERP 0x2000000 #define D3DVTXPCAPS_TEXGEN __MSABI_LONG(0x00000001) #define D3DVTXPCAPS_MATERIALSOURCE7 __MSABI_LONG(0x00000002) #define D3DVTXPCAPS_DIRECTIONALLIGHTS __MSABI_LONG(0x00000008) #define D3DVTXPCAPS_POSITIONALLIGHTS __MSABI_LONG(0x00000010) #define D3DVTXPCAPS_LOCALVIEWER __MSABI_LONG(0x00000020) #define D3DVTXPCAPS_TWEENING __MSABI_LONG(0x00000040) #define D3DVTXPCAPS_TEXGEN_SPHEREMAP __MSABI_LONG(0x00000100) #define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER __MSABI_LONG(0x00000200) #define D3DDTCAPS_UBYTE4 __MSABI_LONG(0x00000001) #define D3DDTCAPS_UBYTE4N __MSABI_LONG(0x00000002) #define D3DDTCAPS_SHORT2N __MSABI_LONG(0x00000004) #define D3DDTCAPS_SHORT4N __MSABI_LONG(0x00000008) #define D3DDTCAPS_USHORT2N __MSABI_LONG(0x00000010) #define D3DDTCAPS_USHORT4N __MSABI_LONG(0x00000020) #define D3DDTCAPS_UDEC3 __MSABI_LONG(0x00000040) #define D3DDTCAPS_DEC3N __MSABI_LONG(0x00000080) #define D3DDTCAPS_FLOAT16_2 __MSABI_LONG(0x00000100) #define D3DDTCAPS_FLOAT16_4 __MSABI_LONG(0x00000200) #define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD __MSABI_LONG(0x00000020) #define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION __MSABI_LONG(0x00000080) #define D3DCAPS3_COPY_TO_VIDMEM __MSABI_LONG(0x00000100) #define D3DCAPS3_COPY_TO_SYSTEMMEM __MSABI_LONG(0x00000200) #define D3DCAPS3_DXVAHD __MSABI_LONG(0x00000400) #define D3DCAPS3_DXVAHD_LIMITED __MSABI_LONG(0x00000800) #define D3DCAPS3_RESERVED __MSABI_LONG(0x8000001F) #define D3DCAPS2_NO2DDURING3DSCENE __MSABI_LONG(0x00000002) #define D3DCAPS2_FULLSCREENGAMMA __MSABI_LONG(0x00020000) #define D3DCAPS2_CANRENDERWINDOWED __MSABI_LONG(0x00080000) #define D3DCAPS2_CANCALIBRATEGAMMA __MSABI_LONG(0x00100000) #define D3DCAPS2_RESERVED __MSABI_LONG(0x02000000) #define D3DCAPS2_CANMANAGERESOURCE __MSABI_LONG(0x10000000) #define D3DCAPS2_DYNAMICTEXTURES __MSABI_LONG(0x20000000) #define D3DCAPS2_CANAUTOGENMIPMAP __MSABI_LONG(0x40000000) #ifndef D3D_DISABLE_9EX #define D3DCAPS2_CANSHARERESOURCE __MSABI_LONG(0x80000000) #endif #define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH 24 #define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH 0 #define D3DVS20_MAX_NUMTEMPS 32 #define D3DVS20_MIN_NUMTEMPS 12 #define D3DVS20_MAX_STATICFLOWCONTROLDEPTH 4 #define D3DVS20_MIN_STATICFLOWCONTROLDEPTH 1 #define D3DVS20CAPS_PREDICATION (1 << 0) #define D3DPS20CAPS_ARBITRARYSWIZZLE (1 << 0) #define D3DPS20CAPS_GRADIENTINSTRUCTIONS (1 << 1) #define D3DPS20CAPS_PREDICATION (1 << 2) #define D3DPS20CAPS_NODEPENDENTREADLIMIT (1 << 3) #define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (1 << 4) #define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH 24 #define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH 0 #define D3DPS20_MAX_NUMTEMPS 32 #define D3DPS20_MIN_NUMTEMPS 12 #define D3DPS20_MAX_STATICFLOWCONTROLDEPTH 4 #define D3DPS20_MIN_STATICFLOWCONTROLDEPTH 0 #define D3DPS20_MAX_NUMINSTRUCTIONSLOTS 512 #define D3DPS20_MIN_NUMINSTRUCTIONSLOTS 96 #define D3DMIN30SHADERINSTRUCTIONS 512 #define D3DMAX30SHADERINSTRUCTIONS 32768 typedef struct _D3DVSHADERCAPS2_0 { DWORD Caps; INT DynamicFlowControlDepth; INT NumTemps; INT StaticFlowControlDepth; } D3DVSHADERCAPS2_0; typedef struct _D3DPSHADERCAPS2_0 { DWORD Caps; INT DynamicFlowControlDepth; INT NumTemps; INT StaticFlowControlDepth; INT NumInstructionSlots; } D3DPSHADERCAPS2_0; /* * The d3dcaps9 structure */ typedef struct _D3DCAPS9 { D3DDEVTYPE DeviceType; UINT AdapterOrdinal; DWORD Caps; DWORD Caps2; DWORD Caps3; DWORD PresentationIntervals; DWORD CursorCaps; DWORD DevCaps; DWORD PrimitiveMiscCaps; DWORD RasterCaps; DWORD ZCmpCaps; DWORD SrcBlendCaps; DWORD DestBlendCaps; DWORD AlphaCmpCaps; DWORD ShadeCaps; DWORD TextureCaps; DWORD TextureFilterCaps; DWORD CubeTextureFilterCaps; DWORD VolumeTextureFilterCaps; DWORD TextureAddressCaps; DWORD VolumeTextureAddressCaps; DWORD LineCaps; DWORD MaxTextureWidth, MaxTextureHeight; DWORD MaxVolumeExtent; DWORD MaxTextureRepeat; DWORD MaxTextureAspectRatio; DWORD MaxAnisotropy; float MaxVertexW; float GuardBandLeft; float GuardBandTop; float GuardBandRight; float GuardBandBottom; float ExtentsAdjust; DWORD StencilCaps; DWORD FVFCaps; DWORD TextureOpCaps; DWORD MaxTextureBlendStages; DWORD MaxSimultaneousTextures; DWORD VertexProcessingCaps; DWORD MaxActiveLights; DWORD MaxUserClipPlanes; DWORD MaxVertexBlendMatrices; DWORD MaxVertexBlendMatrixIndex; float MaxPointSize; DWORD MaxPrimitiveCount; DWORD MaxVertexIndex; DWORD MaxStreams; DWORD MaxStreamStride; DWORD VertexShaderVersion; DWORD MaxVertexShaderConst; DWORD PixelShaderVersion; float PixelShader1xMaxValue; /* DX 9 */ DWORD DevCaps2; float MaxNpatchTessellationLevel; DWORD Reserved5; UINT MasterAdapterOrdinal; UINT AdapterOrdinalInGroup; UINT NumberOfAdaptersInGroup; DWORD DeclTypes; DWORD NumSimultaneousRTs; DWORD StretchRectFilterCaps; D3DVSHADERCAPS2_0 VS20Caps; D3DPSHADERCAPS2_0 PS20Caps; DWORD VertexTextureFilterCaps; DWORD MaxVShaderInstructionsExecuted; DWORD MaxPShaderInstructionsExecuted; DWORD MaxVertexShader30InstructionSlots; DWORD MaxPixelShader30InstructionSlots; } D3DCAPS9; #ifdef __i386__ #include #endif #endif ================================================ FILE: wine/windows/d3d9types.h ================================================ /* * Copyright (C) 2002-2003 Jason Edmeades * Copyright (C) 2002-2003 Raphael Junqueira * Copyright (C) 2005 Oliver Stieber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3D9TYPES_H #define __WINE_D3D9TYPES_H #ifdef __i386__ #include #endif /***************************************************************************** * Direct 3D v9 #defines */ #define D3DCLEAR_TARGET __MSABI_LONG(0x00000001) #define D3DCLEAR_ZBUFFER __MSABI_LONG(0x00000002) #define D3DCLEAR_STENCIL __MSABI_LONG(0x00000004) #define D3DCLIPPLANE0 (1 << 0) #define D3DCLIPPLANE1 (1 << 1) #define D3DCLIPPLANE2 (1 << 2) #define D3DCLIPPLANE3 (1 << 3) #define D3DCLIPPLANE4 (1 << 4) #define D3DCLIPPLANE5 (1 << 5) #define D3DCOLOR_ARGB(a,r,g,b) ((D3DCOLOR)((((a)&0xffu)<<24)|(((r)&0xffu)<<16)|(((g)&0xffu)<<8)|((b)&0xffu))) #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)) #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b) #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) #define D3DCOLOR_XYUV(y,u,v) D3DCOLOR_ARGB(0xFF,y,u,v) #define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v) #define D3DCS_LEFT __MSABI_LONG(0x001) #define D3DCS_RIGHT __MSABI_LONG(0x002) #define D3DCS_TOP __MSABI_LONG(0x004) #define D3DCS_BOTTOM __MSABI_LONG(0x008) #define D3DCS_FRONT __MSABI_LONG(0x010) #define D3DCS_BACK __MSABI_LONG(0x020) #define D3DCS_PLANE0 __MSABI_LONG(0x040) #define D3DCS_PLANE1 __MSABI_LONG(0x080) #define D3DCS_PLANE2 __MSABI_LONG(0x100) #define D3DCS_PLANE3 __MSABI_LONG(0x200) #define D3DCS_PLANE4 __MSABI_LONG(0x400) #define D3DCS_PLANE5 __MSABI_LONG(0x800) #define D3DCS_ALL __MSABI_LONG(0xFFF) #define D3DFVF_TEXTUREFORMAT1 3u #define D3DFVF_TEXTUREFORMAT2 0u #define D3DFVF_TEXTUREFORMAT3 1u #define D3DFVF_TEXTUREFORMAT4 2u #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16)) #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2) #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16)) #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16)) #define D3DLOCK_READONLY 0x0010 #define D3DLOCK_NOSYSLOCK 0x0800 #define D3DLOCK_NOOVERWRITE 0x1000 #define D3DLOCK_DISCARD 0x2000 #define D3DLOCK_DONOTWAIT 0x4000 #define D3DLOCK_NO_DIRTY_UPDATE 0x8000 #define D3DMAXUSERCLIPPLANES 32 #define D3DCLIPPLANE0 (1 << 0) #define D3DCLIPPLANE1 (1 << 1) #define D3DCLIPPLANE2 (1 << 2) #define D3DCLIPPLANE3 (1 << 3) #define D3DCLIPPLANE4 (1 << 4) #define D3DCLIPPLANE5 (1 << 5) #define D3DRENDERSTATE_WRAPBIAS __MSABI_LONG(128U) /* MSDN has this in d3d9caps.h, but it should be here */ #define D3DTSS_TCI_PASSTHRU 0x00000 #define D3DTSS_TCI_CAMERASPACENORMAL 0x10000 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x20000 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x30000 #define D3DTSS_TCI_SPHEREMAP 0x40000 #define D3DTS_WORLD D3DTS_WORLDMATRIX(0) #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1) #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2) #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3) #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256) #define D3DUSAGE_RENDERTARGET __MSABI_LONG(0x00000001) #define D3DUSAGE_DEPTHSTENCIL __MSABI_LONG(0x00000002) #define D3DUSAGE_WRITEONLY __MSABI_LONG(0x00000008) #define D3DUSAGE_SOFTWAREPROCESSING __MSABI_LONG(0x00000010) #define D3DUSAGE_DONOTCLIP __MSABI_LONG(0x00000020) #define D3DUSAGE_POINTS __MSABI_LONG(0x00000040) #define D3DUSAGE_RTPATCHES __MSABI_LONG(0x00000080) #define D3DUSAGE_NPATCHES __MSABI_LONG(0x00000100) #define D3DUSAGE_DYNAMIC __MSABI_LONG(0x00000200) #define D3DUSAGE_AUTOGENMIPMAP __MSABI_LONG(0x00000400) #define D3DUSAGE_DMAP __MSABI_LONG(0x00004000) /* Parts added with d3d9ex */ #if !defined(D3D_DISABLE_9EX) #define D3DUSAGE_RESTRICTED_CONTENT __MSABI_LONG(0x00000800) #define D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER __MSABI_LONG(0x00001000) #define D3DUSAGE_RESTRICT_SHARED_RESOURCE __MSABI_LONG(0x00002000) #define D3DUSAGE_NONSECURE __MSABI_LONG(0x00800000) #define D3DUSAGE_TEXTAPI __MSABI_LONG(0x10000000) #endif /* D3D_DISABLE_9EX */ #define D3DUSAGE_QUERY_LEGACYBUMPMAP __MSABI_LONG(0x00008000) #define D3DUSAGE_QUERY_SRGBREAD __MSABI_LONG(0x00010000) #define D3DUSAGE_QUERY_FILTER __MSABI_LONG(0x00020000) #define D3DUSAGE_QUERY_SRGBWRITE __MSABI_LONG(0x00040000) #define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING __MSABI_LONG(0x00080000) #define D3DUSAGE_QUERY_VERTEXTEXTURE __MSABI_LONG(0x00100000) #define D3DUSAGE_QUERY_WRAPANDMIP __MSABI_LONG(0x00200000) #define D3DWRAP_U 1 #define D3DWRAP_V 2 #define D3DWRAP_W 4 #define D3DWRAPCOORD_0 1 #define D3DWRAPCOORD_1 2 #define D3DWRAPCOORD_2 4 #define D3DWRAPCOORD_3 8 #define MAX_DEVICE_IDENTIFIER_STRING 512 #define D3DFVF_RESERVED0 0x0001 #define D3DFVF_POSITION_MASK 0x400E #define D3DFVF_XYZ 0x0002 #define D3DFVF_XYZRHW 0x0004 #define D3DFVF_XYZB1 0x0006 #define D3DFVF_XYZB2 0x0008 #define D3DFVF_XYZB3 0x000a #define D3DFVF_XYZB4 0x000c #define D3DFVF_XYZB5 0x000e #define D3DFVF_XYZW 0x4002 #define D3DFVF_NORMAL 0x0010 #define D3DFVF_PSIZE 0x0020 #define D3DFVF_DIFFUSE 0x0040 #define D3DFVF_SPECULAR 0x0080 #define D3DFVF_TEXCOUNT_MASK 0x0f00 #define D3DFVF_TEXCOUNT_SHIFT 8 #define D3DFVF_TEX0 0x0000 #define D3DFVF_TEX1 0x0100 #define D3DFVF_TEX2 0x0200 #define D3DFVF_TEX3 0x0300 #define D3DFVF_TEX4 0x0400 #define D3DFVF_TEX5 0x0500 #define D3DFVF_TEX6 0x0600 #define D3DFVF_TEX7 0x0700 #define D3DFVF_TEX8 0x0800 #define D3DFVF_LASTBETA_UBYTE4 0x1000 #define D3DFVF_LASTBETA_D3DCOLOR 0x8000 #define D3DFVF_RESERVED2 0x6000 #define D3DTA_SELECTMASK 0x0000000f #define D3DTA_DIFFUSE 0x00000000 #define D3DTA_CURRENT 0x00000001 #define D3DTA_TEXTURE 0x00000002 #define D3DTA_TFACTOR 0x00000003 #define D3DTA_SPECULAR 0x00000004 #define D3DTA_TEMP 0x00000005 #define D3DTA_CONSTANT 0x00000006 #define D3DTA_COMPLEMENT 0x00000010 #define D3DTA_ALPHAREPLICATE 0x00000020 #define D3DCOLORWRITEENABLE_RED (__MSABI_LONG(1)<<0) #define D3DCOLORWRITEENABLE_GREEN (__MSABI_LONG(1)<<1) #define D3DCOLORWRITEENABLE_BLUE (__MSABI_LONG(1)<<2) #define D3DCOLORWRITEENABLE_ALPHA (__MSABI_LONG(1)<<3) #define D3DPV_DONOTCOPYDATA (1 << 0) #define D3DSTREAMSOURCE_INDEXEDDATA (1u << 30) #define D3DSTREAMSOURCE_INSTANCEDATA (2u << 30) #define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4 #define MAXD3DDECLLENGTH 64 /* +end marker */ #define MAXD3DDECLMETHOD D3DDECLMETHOD_LOOKUPPRESAMPLED #define MAXD3DDECLTYPE D3DDECLTYPE_UNUSED #define MAXD3DDECLUSAGE D3DDECLUSAGE_SAMPLE #define MAXD3DDECLUSAGEINDEX 15 #define D3DDMAPSAMPLER 256 #define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1) #define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2) #define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3) #define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4) #ifndef MAKEFOURCC #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) #endif /* Constants used by D3DPRESENT_PARAMETERS. when creating a device or swapchain */ #define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x00000001 /* Create a lockable backbuffer */ #define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL 0x00000002 /* Discard Z buffer */ #define D3DPRESENTFLAG_DEVICECLIP 0x00000004 /* Clip the window blited into the client area 2k + xp only */ #define D3DPRESENTFLAG_VIDEO 0x00000010 /* backbuffer 'may' contain video data */ #ifndef D3D_DISABLE_9EX #define D3DPRESENTFLAG_NOAUTOROTATE 0x00000020 /* d3d9ex, ignore display rotation */ #define D3DPRESENTFLAG_UNPRUNEDMODE 0x00000040 /* d3d9ex, specify invalid display modes */ #define D3DPRESENTFLAG_OVERLAY_LIMITEDRGB 0x00000080 #define D3DPRESENTFLAG_OVERLAY_YCbCr_BT709 0x00000100 #define D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC 0x00000200 #define D3DPRESENTFLAG_RESTRICTED_CONTENT 0x00000400 #define D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER 0x00000800 #endif #define D3DPRESENT_RATE_DEFAULT 0x00000000 /**************************** * Vertex Shaders Declaration */ typedef enum _D3DDECLUSAGE { D3DDECLUSAGE_POSITION = 0, D3DDECLUSAGE_BLENDWEIGHT = 1, D3DDECLUSAGE_BLENDINDICES = 2, D3DDECLUSAGE_NORMAL = 3, D3DDECLUSAGE_PSIZE = 4, D3DDECLUSAGE_TEXCOORD = 5, D3DDECLUSAGE_TANGENT = 6, D3DDECLUSAGE_BINORMAL = 7, D3DDECLUSAGE_TESSFACTOR = 8, D3DDECLUSAGE_POSITIONT = 9, D3DDECLUSAGE_COLOR = 10, D3DDECLUSAGE_FOG = 11, D3DDECLUSAGE_DEPTH = 12, D3DDECLUSAGE_SAMPLE = 13 } D3DDECLUSAGE; #define D3DMAXDECLUSAGE D3DDECLUSAGE_SAMPLE #define D3DMAXDECLUSAGEINDEX 15 #define D3DMAXDECLLENGTH 18 #define D3DMAXDECLUSAGE_DX8 D3DDECLUSAGE_TEXCOORD typedef enum _D3DDECLMETHOD { D3DDECLMETHOD_DEFAULT = 0, D3DDECLMETHOD_PARTIALU = 1, D3DDECLMETHOD_PARTIALV = 2, D3DDECLMETHOD_CROSSUV = 3, D3DDECLMETHOD_UV = 4, D3DDECLMETHOD_LOOKUP = 5, D3DDECLMETHOD_LOOKUPPRESAMPLED = 6 } D3DDECLMETHOD; #define D3DMAXDECLMETHOD D3DDECLMETHOD_LOOKUPPRESAMPLED typedef enum _D3DDECLTYPE { D3DDECLTYPE_FLOAT1 = 0, D3DDECLTYPE_FLOAT2 = 1, D3DDECLTYPE_FLOAT3 = 2, D3DDECLTYPE_FLOAT4 = 3, D3DDECLTYPE_D3DCOLOR = 4, D3DDECLTYPE_UBYTE4 = 5, D3DDECLTYPE_SHORT2 = 6, D3DDECLTYPE_SHORT4 = 7, /* VS 2.0 */ D3DDECLTYPE_UBYTE4N = 8, D3DDECLTYPE_SHORT2N = 9, D3DDECLTYPE_SHORT4N = 10, D3DDECLTYPE_USHORT2N = 11, D3DDECLTYPE_USHORT4N = 12, D3DDECLTYPE_UDEC3 = 13, D3DDECLTYPE_DEC3N = 14, D3DDECLTYPE_FLOAT16_2 = 15, D3DDECLTYPE_FLOAT16_4 = 16, D3DDECLTYPE_UNUSED = 17, } D3DDECLTYPE; #define D3DMAXDECLTYPE D3DDECLTYPE_UNUSED typedef struct _D3DVERTEXELEMENT9 { WORD Stream; WORD Offset; BYTE Type; BYTE Method; BYTE Usage; BYTE UsageIndex; } D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9; typedef enum _D3DQUERYTYPE { D3DQUERYTYPE_VCACHE = 4, D3DQUERYTYPE_RESOURCEMANAGER = 5, D3DQUERYTYPE_VERTEXSTATS = 6, D3DQUERYTYPE_EVENT = 8, D3DQUERYTYPE_OCCLUSION = 9, D3DQUERYTYPE_TIMESTAMP = 10, D3DQUERYTYPE_TIMESTAMPDISJOINT = 11, D3DQUERYTYPE_TIMESTAMPFREQ = 12, D3DQUERYTYPE_PIPELINETIMINGS = 13, D3DQUERYTYPE_INTERFACETIMINGS = 14, D3DQUERYTYPE_VERTEXTIMINGS = 15, D3DQUERYTYPE_PIXELTIMINGS = 16, D3DQUERYTYPE_BANDWIDTHTIMINGS = 17, D3DQUERYTYPE_CACHEUTILIZATION = 18, #ifndef D3D_DISABLE_9EX D3DQUERYTYPE_MEMORYPRESSURE = 19, #endif } D3DQUERYTYPE; #define D3DISSUE_BEGIN (1 << 1) #define D3DISSUE_END (1 << 0) #define D3DGETDATA_FLUSH (1 << 0) #define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0} #define D3DDP_MAXTEXCOORD 8 #define D3DVSD_MAKETOKENTYPE(TokenType) \ ((TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK) #define D3DVSD_CONST(ConstantAddress, Count) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress)) #define D3DVSD_END() 0xFFFFFFFF #define D3DVSD_NOP() 0x00000000 #define D3DVSD_REG(VertexRegister, Type) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister)) #define D3DVSD_SKIP(Count) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT)) #define D3DVSD_STREAM(StreamNumber) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber)) #define D3DVSD_STREAM_TESS() \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK)) #define D3DVSD_TESSNORMAL(RegisterIn, RegisterOut) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((RegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (RegisterOut)) #define D3DVSD_TESSUV(Register) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (Register)) /******************************** * Pixel/Vertex Shaders Functions */ /** Maximum number of supported texture coordinates sets operation */ #define D3DDP_MAXTEXCOORD 8 /** opcode token mask */ #define D3DSI_OPCODE_MASK 0x0000FFFF #define D3DSI_INSTLENGTH_MASK 0x0F000000 #define D3DSI_INSTLENGTH_SHIFT 24 /** opcodes types for PS and VS */ typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE { D3DSIO_NOP = 0, D3DSIO_MOV = 1, D3DSIO_ADD = 2, D3DSIO_SUB = 3, D3DSIO_MAD = 4, D3DSIO_MUL = 5, D3DSIO_RCP = 6, D3DSIO_RSQ = 7, D3DSIO_DP3 = 8, D3DSIO_DP4 = 9, D3DSIO_MIN = 10, D3DSIO_MAX = 11, D3DSIO_SLT = 12, D3DSIO_SGE = 13, D3DSIO_EXP = 14, D3DSIO_LOG = 15, D3DSIO_LIT = 16, D3DSIO_DST = 17, D3DSIO_LRP = 18, D3DSIO_FRC = 19, D3DSIO_M4x4 = 20, D3DSIO_M4x3 = 21, D3DSIO_M3x4 = 22, D3DSIO_M3x3 = 23, D3DSIO_M3x2 = 24, D3DSIO_CALL = 25, D3DSIO_CALLNZ = 26, D3DSIO_LOOP = 27, D3DSIO_RET = 28, D3DSIO_ENDLOOP = 29, D3DSIO_LABEL = 30, D3DSIO_DCL = 31, D3DSIO_POW = 32, D3DSIO_CRS = 33, D3DSIO_SGN = 34, D3DSIO_ABS = 35, D3DSIO_NRM = 36, D3DSIO_SINCOS = 37, D3DSIO_REP = 38, D3DSIO_ENDREP = 39, D3DSIO_IF = 40, D3DSIO_IFC = 41, D3DSIO_ELSE = 42, D3DSIO_ENDIF = 43, D3DSIO_BREAK = 44, D3DSIO_BREAKC = 45, D3DSIO_MOVA = 46, D3DSIO_DEFB = 47, D3DSIO_DEFI = 48, D3DSIO_TEXCOORD = 64, D3DSIO_TEXKILL = 65, D3DSIO_TEX = 66, D3DSIO_TEXBEM = 67, D3DSIO_TEXBEML = 68, D3DSIO_TEXREG2AR = 69, D3DSIO_TEXREG2GB = 70, D3DSIO_TEXM3x2PAD = 71, D3DSIO_TEXM3x2TEX = 72, D3DSIO_TEXM3x3PAD = 73, D3DSIO_TEXM3x3TEX = 74, D3DSIO_TEXM3x3DIFF = 75, D3DSIO_TEXM3x3SPEC = 76, D3DSIO_TEXM3x3VSPEC = 77, D3DSIO_EXPP = 78, D3DSIO_LOGP = 79, D3DSIO_CND = 80, D3DSIO_DEF = 81, D3DSIO_TEXREG2RGB = 82, D3DSIO_TEXDP3TEX = 83, D3DSIO_TEXM3x2DEPTH = 84, D3DSIO_TEXDP3 = 85, D3DSIO_TEXM3x3 = 86, D3DSIO_TEXDEPTH = 87, D3DSIO_CMP = 88, D3DSIO_BEM = 89, D3DSIO_DP2ADD = 90, D3DSIO_DSX = 91, D3DSIO_DSY = 92, D3DSIO_TEXLDD = 93, D3DSIO_SETP = 94, D3DSIO_TEXLDL = 95, D3DSIO_BREAKP = 96, D3DSIO_PHASE = 0xFFFD, D3DSIO_COMMENT = 0xFFFE, D3DSIO_END = 0XFFFF, D3DSIO_FORCE_DWORD = 0X7FFFFFFF /** for 32-bit alignment */ } D3DSHADER_INSTRUCTION_OPCODE_TYPE; #define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f, 0.0026041667f, 0.00026041668f #define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f #define D3DSHADER_INSTRUCTION_PREDICATED (1 << 28) #define D3DSI_TEXLD_PROJECT 0x00010000 #define D3DSI_TEXLD_BIAS 0x00020000 /** for parallelism */ #define D3DSI_COISSUE 0x40000000 #define D3DSP_DCL_USAGE_SHIFT 0 #define D3DSP_DCL_USAGE_MASK 0x0000000f #define D3DSP_DCL_USAGEINDEX_SHIFT 16 #define D3DSP_DCL_USAGEINDEX_MASK 0x000f0000 #define D3DSP_TEXTURETYPE_SHIFT 27 #define D3DSP_TEXTURETYPE_MASK 0x78000000 typedef enum _D3DSAMPLER_TEXTURE_TYPE { D3DSTT_UNKNOWN = 0 << D3DSP_TEXTURETYPE_SHIFT, D3DSTT_1D = 1 << D3DSP_TEXTURETYPE_SHIFT, D3DSTT_2D = 2 << D3DSP_TEXTURETYPE_SHIFT, D3DSTT_CUBE = 3 << D3DSP_TEXTURETYPE_SHIFT, D3DSTT_VOLUME = 4 << D3DSP_TEXTURETYPE_SHIFT, D3DSTT_FORCE_DWORD = 0x7FFFFFFF } D3DSAMPLER_TEXTURE_TYPE; #define D3DSP_REGNUM_MASK 0x000007FF /** destination parameter modifiers (.xyzw) */ #define D3DSP_WRITEMASK_0 0x00010000 /* .x r */ #define D3DSP_WRITEMASK_1 0x00020000 /* .y g */ #define D3DSP_WRITEMASK_2 0x00040000 /* .z b */ #define D3DSP_WRITEMASK_3 0x00080000 /* .w a */ #define D3DSP_WRITEMASK_ALL 0x000F0000 /* all */ #define D3DSP_DSTMOD_SHIFT 20 #define D3DSP_DSTMOD_MASK (0xF << D3DSP_DSTMOD_SHIFT) typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE { D3DSPDM_NONE = 0 << D3DSP_DSTMOD_SHIFT, D3DSPDM_SATURATE = 1 << D3DSP_DSTMOD_SHIFT, D3DSPDM_PARTIALPRECISION = 2 << D3DSP_DSTMOD_SHIFT, D3DSPDM_MSAMPCENTROID = 4 << D3DSP_DSTMOD_SHIFT, D3DSPDM_FORCE_DWORD = 0x7FFFFFFF } D3DSHADER_PARAM_DSTMOD_TYPE; /** destination param */ #define D3DSP_DSTSHIFT_SHIFT 24 #define D3DSP_DSTSHIFT_MASK (0xF << D3DSP_DSTSHIFT_SHIFT) /** destination/source reg type */ #define D3DSP_REGTYPE_SHIFT 28 #define D3DSP_REGTYPE_SHIFT2 8 #define D3DSP_REGTYPE_MASK (0x7 << D3DSP_REGTYPE_SHIFT) #define D3DSP_REGTYPE_MASK2 0x00001800 typedef enum _D3DSHADER_PARAM_REGISTER_TYPE { D3DSPR_TEMP = 0, D3DSPR_INPUT = 1, D3DSPR_CONST = 2, D3DSPR_ADDR = 3, D3DSPR_TEXTURE = 3, D3DSPR_RASTOUT = 4, D3DSPR_ATTROUT = 5, D3DSPR_TEXCRDOUT = 6, D3DSPR_OUTPUT = 6, D3DSPR_CONSTINT = 7, D3DSPR_COLOROUT = 8, D3DSPR_DEPTHOUT = 9, D3DSPR_SAMPLER = 10, D3DSPR_CONST2 = 11, D3DSPR_CONST3 = 12, D3DSPR_CONST4 = 13, D3DSPR_CONSTBOOL = 14, D3DSPR_LOOP = 15, D3DSPR_TEMPFLOAT16 = 16, D3DSPR_MISCTYPE = 17, D3DSPR_LABEL = 18, D3DSPR_PREDICATE = 19, D3DSPR_FORCE_DWORD = 0x7fffffff } D3DSHADER_PARAM_REGISTER_TYPE; typedef enum _D3DSHADER_MISCTYPE_OFFSETS { D3DSMO_POSITION = 0, D3DSMO_FACE = 1 } D3DSHADER_MISCTYPE_OFFSETS; typedef enum _D3DVS_RASTOUT_OFFSETS { D3DSRO_POSITION = 0, D3DSRO_FOG = 1, D3DSRO_POINT_SIZE = 2, D3DSRO_FORCE_DWORD = 0x7FFFFFFF } D3DVS_RASTOUT_OFFSETS; #define D3DVS_ADDRESSMODE_SHIFT 13 #define D3DVS_ADDRESSMODE_MASK (0x1 << D3DVS_ADDRESSMODE_SHIFT) typedef enum _D3DVS_ADDRESSMODE_TYPE { D3DVS_ADDRMODE_ABSOLUTE = 0 << D3DVS_ADDRESSMODE_SHIFT, D3DVS_ADDRMODE_RELATIVE = 1 << D3DVS_ADDRESSMODE_SHIFT, D3DVS_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF } D3DVS_ADDRESSMODE_TYPE; #define D3DSHADER_ADDRESSMODE_SHIFT 13 #define D3DSHADER_ADDRESSMODE_MASK (1 << D3DSHADER_ADDRESSMODE_SHIFT) typedef enum _D3DSHADER_ADDRESSMODE_TYPE { D3DSHADER_ADDRMODE_ABSOLUTE = 0 << D3DSHADER_ADDRESSMODE_SHIFT, D3DSHADER_ADDRMODE_RELATIVE = 1 << D3DSHADER_ADDRESSMODE_SHIFT, D3DSHADER_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF } D3DSHADER_ADDRESSMODE_TYPE; #define D3DVS_SWIZZLE_SHIFT 16 #define D3DVS_SWIZZLE_MASK (0xFF << D3DVS_SWIZZLE_SHIFT) #define D3DSP_SWIZZLE_SHIFT 16 #define D3DSP_SWIZZLE_MASK (0xFF << D3DSP_SWIZZLE_SHIFT) #define D3DVS_X_X (0 << D3DVS_SWIZZLE_SHIFT) #define D3DVS_X_Y (1 << D3DVS_SWIZZLE_SHIFT) #define D3DVS_X_Z (2 << D3DVS_SWIZZLE_SHIFT) #define D3DVS_X_W (3 << D3DVS_SWIZZLE_SHIFT) #define D3DVS_Y_X (0 << (D3DVS_SWIZZLE_SHIFT + 2)) #define D3DVS_Y_Y (1 << (D3DVS_SWIZZLE_SHIFT + 2)) #define D3DVS_Y_Z (2 << (D3DVS_SWIZZLE_SHIFT + 2)) #define D3DVS_Y_W (3 << (D3DVS_SWIZZLE_SHIFT + 2)) #define D3DVS_Z_X (0 << (D3DVS_SWIZZLE_SHIFT + 4)) #define D3DVS_Z_Y (1 << (D3DVS_SWIZZLE_SHIFT + 4)) #define D3DVS_Z_Z (2 << (D3DVS_SWIZZLE_SHIFT + 4)) #define D3DVS_Z_W (3 << (D3DVS_SWIZZLE_SHIFT + 4)) #define D3DVS_W_X (0 << (D3DVS_SWIZZLE_SHIFT + 6)) #define D3DVS_W_Y (1 << (D3DVS_SWIZZLE_SHIFT + 6)) #define D3DVS_W_Z (2 << (D3DVS_SWIZZLE_SHIFT + 6)) #define D3DVS_W_W (3 << (D3DVS_SWIZZLE_SHIFT + 6)) #define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W) #define D3DSP_NOSWIZZLE \ ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6))) #define D3DSP_SRCMOD_SHIFT 24 #define D3DSP_SRCMOD_MASK (0xF << D3DSP_SRCMOD_SHIFT) typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE { D3DSPSM_NONE = 0 << D3DSP_SRCMOD_SHIFT, D3DSPSM_NEG = 1 << D3DSP_SRCMOD_SHIFT, D3DSPSM_BIAS = 2 << D3DSP_SRCMOD_SHIFT, D3DSPSM_BIASNEG = 3 << D3DSP_SRCMOD_SHIFT, D3DSPSM_SIGN = 4 << D3DSP_SRCMOD_SHIFT, D3DSPSM_SIGNNEG = 5 << D3DSP_SRCMOD_SHIFT, D3DSPSM_COMP = 6 << D3DSP_SRCMOD_SHIFT, D3DSPSM_X2 = 7 << D3DSP_SRCMOD_SHIFT, D3DSPSM_X2NEG = 8 << D3DSP_SRCMOD_SHIFT, D3DSPSM_DZ = 9 << D3DSP_SRCMOD_SHIFT, D3DSPSM_DW = 10 << D3DSP_SRCMOD_SHIFT, D3DSPSM_ABS = 11 << D3DSP_SRCMOD_SHIFT, D3DSPSM_ABSNEG = 12 << D3DSP_SRCMOD_SHIFT, D3DSPSM_NOT = 13 << D3DSP_SRCMOD_SHIFT, D3DSPSM_FORCE_DWORD = 0x7FFFFFFF } D3DSHADER_PARAM_SRCMOD_TYPE; #define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor)) #define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor)) #define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF) #define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF) #define D3DSI_COMMENTSIZE_SHIFT 16 #define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT) #define D3DSHADER_COMMENT(commentSize) \ ((((commentSize) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT) #define D3DPS_END() 0x0000FFFF #define D3DVS_END() 0x0000FFFF /***************************************************************************** * Direct 3D v8 enumerated types */ typedef enum _D3DBACKBUFFER_TYPE { D3DBACKBUFFER_TYPE_MONO = 0, D3DBACKBUFFER_TYPE_LEFT = 1, D3DBACKBUFFER_TYPE_RIGHT = 2, D3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff } D3DBACKBUFFER_TYPE; typedef enum _D3DBASISTYPE { D3DBASIS_BEZIER = 0, D3DBASIS_BSPLINE = 1, D3DBASIS_INTERPOLATE = 2, D3DBASIS_FORCE_DWORD = 0x7fffffff } D3DBASISTYPE; typedef enum _D3DBLEND { D3DBLEND_ZERO = 1, D3DBLEND_ONE = 2, D3DBLEND_SRCCOLOR = 3, D3DBLEND_INVSRCCOLOR = 4, D3DBLEND_SRCALPHA = 5, D3DBLEND_INVSRCALPHA = 6, D3DBLEND_DESTALPHA = 7, D3DBLEND_INVDESTALPHA = 8, D3DBLEND_DESTCOLOR = 9, D3DBLEND_INVDESTCOLOR = 10, D3DBLEND_SRCALPHASAT = 11, D3DBLEND_BOTHSRCALPHA = 12, D3DBLEND_BOTHINVSRCALPHA = 13, D3DBLEND_BLENDFACTOR = 14, D3DBLEND_INVBLENDFACTOR = 15, #ifndef D3D_DISABLE_9EX D3DBLEND_SRCCOLOR2 = 16, D3DBLEND_INVSRCCOLOR2 = 17, #endif D3DBLEND_FORCE_DWORD = 0x7fffffff } D3DBLEND; typedef enum _D3DBLENDOP { D3DBLENDOP_ADD = 1, D3DBLENDOP_SUBTRACT = 2, D3DBLENDOP_REVSUBTRACT = 3, D3DBLENDOP_MIN = 4, D3DBLENDOP_MAX = 5, D3DBLENDOP_FORCE_DWORD = 0x7fffffff } D3DBLENDOP; typedef enum _D3DCMPFUNC { D3DCMP_NEVER = 1, D3DCMP_LESS = 2, D3DCMP_EQUAL = 3, D3DCMP_LESSEQUAL = 4, D3DCMP_GREATER = 5, D3DCMP_NOTEQUAL = 6, D3DCMP_GREATEREQUAL = 7, D3DCMP_ALWAYS = 8, D3DCMP_FORCE_DWORD = 0x7fffffff } D3DCMPFUNC; typedef enum _D3DCUBEMAP_FACES { D3DCUBEMAP_FACE_POSITIVE_X = 0, D3DCUBEMAP_FACE_NEGATIVE_X = 1, D3DCUBEMAP_FACE_POSITIVE_Y = 2, D3DCUBEMAP_FACE_NEGATIVE_Y = 3, D3DCUBEMAP_FACE_POSITIVE_Z = 4, D3DCUBEMAP_FACE_NEGATIVE_Z = 5, D3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff } D3DCUBEMAP_FACES; typedef enum _D3DCULL { D3DCULL_NONE = 1, D3DCULL_CW = 2, D3DCULL_CCW = 3, D3DCULL_FORCE_DWORD = 0x7fffffff } D3DCULL; typedef enum _D3DDEBUGMONITORTOKENS { D3DDMT_ENABLE = 0, D3DDMT_DISABLE = 1, D3DDMT_FORCE_DWORD = 0x7fffffff } D3DDEBUGMONITORTOKENS; typedef enum _D3DDEGREETYPE { D3DDEGREE_LINEAR = 1, D3DDEGREE_QUADRATIC = 2, D3DDEGREE_CUBIC = 3, D3DDEGREE_QUINTIC = 5, D3DDEGREE_FORCE_DWORD = 0x7fffffff } D3DDEGREETYPE; typedef enum _D3DDEVTYPE { D3DDEVTYPE_HAL = 1, D3DDEVTYPE_REF = 2, D3DDEVTYPE_SW = 3, D3DDEVTYPE_NULLREF = 4, D3DDEVTYPE_FORCE_DWORD = 0xffffffff } D3DDEVTYPE; typedef enum _D3DFILLMODE { D3DFILL_POINT = 1, D3DFILL_WIREFRAME = 2, D3DFILL_SOLID = 3, D3DFILL_FORCE_DWORD = 0x7fffffff } D3DFILLMODE; typedef enum _D3DFOGMODE { D3DFOG_NONE = 0, D3DFOG_EXP = 1, D3DFOG_EXP2 = 2, D3DFOG_LINEAR = 3, D3DFOG_FORCE_DWORD = 0x7fffffff } D3DFOGMODE; typedef enum _D3DFORMAT { D3DFMT_UNKNOWN = 0, D3DFMT_R8G8B8 = 20, D3DFMT_A8R8G8B8 = 21, D3DFMT_X8R8G8B8 = 22, D3DFMT_R5G6B5 = 23, D3DFMT_X1R5G5B5 = 24, D3DFMT_A1R5G5B5 = 25, D3DFMT_A4R4G4B4 = 26, D3DFMT_R3G3B2 = 27, D3DFMT_A8 = 28, D3DFMT_A8R3G3B2 = 29, D3DFMT_X4R4G4B4 = 30, D3DFMT_A2B10G10R10 = 31, D3DFMT_A8B8G8R8 = 32, D3DFMT_X8B8G8R8 = 33, D3DFMT_G16R16 = 34, D3DFMT_A2R10G10B10 = 35, D3DFMT_A16B16G16R16 = 36, D3DFMT_A8P8 = 40, D3DFMT_P8 = 41, D3DFMT_L8 = 50, D3DFMT_A8L8 = 51, D3DFMT_A4L4 = 52, D3DFMT_V8U8 = 60, D3DFMT_L6V5U5 = 61, D3DFMT_X8L8V8U8 = 62, D3DFMT_Q8W8V8U8 = 63, D3DFMT_V16U16 = 64, D3DFMT_A2W10V10U10 = 67, D3DFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'), D3DFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'), D3DFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'), D3DFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'), D3DFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'), D3DFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'), D3DFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'), D3DFMT_MULTI2_ARGB8 = MAKEFOURCC('M', 'E', 'T', '1'), D3DFMT_G8R8_G8B8 = MAKEFOURCC('G', 'R', 'G', 'B'), D3DFMT_R8G8_B8G8 = MAKEFOURCC('R', 'G', 'B', 'G'), D3DFMT_D16_LOCKABLE = 70, D3DFMT_D32 = 71, D3DFMT_D15S1 = 73, D3DFMT_D24S8 = 75, D3DFMT_D24X8 = 77, D3DFMT_D24X4S4 = 79, D3DFMT_D16 = 80, D3DFMT_L16 = 81, D3DFMT_D32F_LOCKABLE = 82, D3DFMT_D24FS8 = 83, #ifndef D3D_DISABLE_9EX D3DFMT_D32_LOCKABLE = 84, D3DFMT_S8_LOCKABLE = 85, #endif D3DFMT_VERTEXDATA = 100, D3DFMT_INDEX16 = 101, D3DFMT_INDEX32 = 102, D3DFMT_Q16W16V16U16 = 110, /* Floating point formats */ D3DFMT_R16F = 111, D3DFMT_G16R16F = 112, D3DFMT_A16B16G16R16F = 113, /* IEEE formats */ D3DFMT_R32F = 114, D3DFMT_G32R32F = 115, D3DFMT_A32B32G32R32F = 116, D3DFMT_CxV8U8 = 117, #ifndef D3D_DISABLE_9EX D3DFMT_A1 = 118, D3DFMT_A2B10G10R10_XR_BIAS = 119, D3DFMT_BINARYBUFFER = 199, #endif D3DFMT_FORCE_DWORD = 0xFFFFFFFF } D3DFORMAT; typedef enum _D3DLIGHTTYPE { D3DLIGHT_POINT = 1, D3DLIGHT_SPOT = 2, D3DLIGHT_DIRECTIONAL = 3, D3DLIGHT_FORCE_DWORD = 0x7fffffff } D3DLIGHTTYPE; typedef enum _D3DMATERIALCOLORSOURCE { D3DMCS_MATERIAL = 0, D3DMCS_COLOR1 = 1, D3DMCS_COLOR2 = 2, D3DMCS_FORCE_DWORD = 0x7fffffff } D3DMATERIALCOLORSOURCE; typedef enum _D3DMULTISAMPLE_TYPE { D3DMULTISAMPLE_NONE = 0, D3DMULTISAMPLE_NONMASKABLE = 1, D3DMULTISAMPLE_2_SAMPLES = 2, D3DMULTISAMPLE_3_SAMPLES = 3, D3DMULTISAMPLE_4_SAMPLES = 4, D3DMULTISAMPLE_5_SAMPLES = 5, D3DMULTISAMPLE_6_SAMPLES = 6, D3DMULTISAMPLE_7_SAMPLES = 7, D3DMULTISAMPLE_8_SAMPLES = 8, D3DMULTISAMPLE_9_SAMPLES = 9, D3DMULTISAMPLE_10_SAMPLES = 10, D3DMULTISAMPLE_11_SAMPLES = 11, D3DMULTISAMPLE_12_SAMPLES = 12, D3DMULTISAMPLE_13_SAMPLES = 13, D3DMULTISAMPLE_14_SAMPLES = 14, D3DMULTISAMPLE_15_SAMPLES = 15, D3DMULTISAMPLE_16_SAMPLES = 16, D3DMULTISAMPLE_FORCE_DWORD = 0x7fffffff } D3DMULTISAMPLE_TYPE; #if 0 typedef enum _D3DORDERTYPE { D3DORDER_LINEAR = 1, D3DORDER_QUADRATIC = 2, D3DORDER_CUBIC = 3, D3DORDER_QUINTIC = 5, D3DORDER_FORCE_DWORD = 0x7fffffff } D3DORDERTYPE; #endif typedef enum _D3DPATCHEDGESTYLE { D3DPATCHEDGE_DISCRETE = 0, D3DPATCHEDGE_CONTINUOUS = 1, D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff, } D3DPATCHEDGESTYLE; typedef enum _D3DPOOL { D3DPOOL_DEFAULT = 0, D3DPOOL_MANAGED = 1, D3DPOOL_SYSTEMMEM = 2, D3DPOOL_SCRATCH = 3, D3DPOOL_FORCE_DWORD = 0x7fffffff } D3DPOOL; typedef enum _D3DPRIMITIVETYPE { D3DPT_POINTLIST = 1, D3DPT_LINELIST = 2, D3DPT_LINESTRIP = 3, D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff } D3DPRIMITIVETYPE; typedef enum _D3DRENDERSTATETYPE { D3DRS_ZENABLE = 7, D3DRS_FILLMODE = 8, D3DRS_SHADEMODE = 9, D3DRS_ZWRITEENABLE = 14, D3DRS_ALPHATESTENABLE = 15, D3DRS_LASTPIXEL = 16, D3DRS_SRCBLEND = 19, D3DRS_DESTBLEND = 20, D3DRS_CULLMODE = 22, D3DRS_ZFUNC = 23, D3DRS_ALPHAREF = 24, D3DRS_ALPHAFUNC = 25, D3DRS_DITHERENABLE = 26, D3DRS_ALPHABLENDENABLE = 27, D3DRS_FOGENABLE = 28, D3DRS_SPECULARENABLE = 29, D3DRS_FOGCOLOR = 34, D3DRS_FOGTABLEMODE = 35, D3DRS_FOGSTART = 36, D3DRS_FOGEND = 37, D3DRS_FOGDENSITY = 38, D3DRS_RANGEFOGENABLE = 48, D3DRS_STENCILENABLE = 52, D3DRS_STENCILFAIL = 53, D3DRS_STENCILZFAIL = 54, D3DRS_STENCILPASS = 55, D3DRS_STENCILFUNC = 56, D3DRS_STENCILREF = 57, D3DRS_STENCILMASK = 58, D3DRS_STENCILWRITEMASK = 59, D3DRS_TEXTUREFACTOR = 60, D3DRS_WRAP0 = 128, D3DRS_WRAP1 = 129, D3DRS_WRAP2 = 130, D3DRS_WRAP3 = 131, D3DRS_WRAP4 = 132, D3DRS_WRAP5 = 133, D3DRS_WRAP6 = 134, D3DRS_WRAP7 = 135, D3DRS_CLIPPING = 136, D3DRS_LIGHTING = 137, D3DRS_AMBIENT = 139, D3DRS_FOGVERTEXMODE = 140, D3DRS_COLORVERTEX = 141, D3DRS_LOCALVIEWER = 142, D3DRS_NORMALIZENORMALS = 143, D3DRS_DIFFUSEMATERIALSOURCE = 145, D3DRS_SPECULARMATERIALSOURCE = 146, D3DRS_AMBIENTMATERIALSOURCE = 147, D3DRS_EMISSIVEMATERIALSOURCE = 148, D3DRS_VERTEXBLEND = 151, D3DRS_CLIPPLANEENABLE = 152, D3DRS_POINTSIZE = 154, D3DRS_POINTSIZE_MIN = 155, D3DRS_POINTSPRITEENABLE = 156, D3DRS_POINTSCALEENABLE = 157, D3DRS_POINTSCALE_A = 158, D3DRS_POINTSCALE_B = 159, D3DRS_POINTSCALE_C = 160, D3DRS_MULTISAMPLEANTIALIAS = 161, D3DRS_MULTISAMPLEMASK = 162, D3DRS_PATCHEDGESTYLE = 163, D3DRS_DEBUGMONITORTOKEN = 165, D3DRS_POINTSIZE_MAX = 166, D3DRS_INDEXEDVERTEXBLENDENABLE = 167, D3DRS_COLORWRITEENABLE = 168, D3DRS_TWEENFACTOR = 170, D3DRS_BLENDOP = 171, D3DRS_POSITIONDEGREE = 172, D3DRS_NORMALDEGREE = 173, D3DRS_SCISSORTESTENABLE = 174, D3DRS_SLOPESCALEDEPTHBIAS = 175, D3DRS_ANTIALIASEDLINEENABLE = 176, D3DRS_MINTESSELLATIONLEVEL = 178, D3DRS_MAXTESSELLATIONLEVEL = 179, D3DRS_ADAPTIVETESS_X = 180, D3DRS_ADAPTIVETESS_Y = 181, D3DRS_ADAPTIVETESS_Z = 182, D3DRS_ADAPTIVETESS_W = 183, D3DRS_ENABLEADAPTIVETESSELLATION= 184, D3DRS_TWOSIDEDSTENCILMODE = 185, D3DRS_CCW_STENCILFAIL = 186, D3DRS_CCW_STENCILZFAIL = 187, D3DRS_CCW_STENCILPASS = 188, D3DRS_CCW_STENCILFUNC = 189, D3DRS_COLORWRITEENABLE1 = 190, D3DRS_COLORWRITEENABLE2 = 191, D3DRS_COLORWRITEENABLE3 = 192, D3DRS_BLENDFACTOR = 193, D3DRS_SRGBWRITEENABLE = 194, D3DRS_DEPTHBIAS = 195, D3DRS_WRAP8 = 198, D3DRS_WRAP9 = 199, D3DRS_WRAP10 = 200, D3DRS_WRAP11 = 201, D3DRS_WRAP12 = 202, D3DRS_WRAP13 = 203, D3DRS_WRAP14 = 204, D3DRS_WRAP15 = 205, D3DRS_SEPARATEALPHABLENDENABLE = 206, D3DRS_SRCBLENDALPHA = 207, D3DRS_DESTBLENDALPHA = 208, D3DRS_BLENDOPALPHA = 209, D3DRS_FORCE_DWORD = 0x7fffffff } D3DRENDERSTATETYPE; typedef enum _D3DRESOURCETYPE { D3DRTYPE_SURFACE = 1, D3DRTYPE_VOLUME = 2, D3DRTYPE_TEXTURE = 3, D3DRTYPE_VOLUMETEXTURE = 4, D3DRTYPE_CUBETEXTURE = 5, D3DRTYPE_VERTEXBUFFER = 6, D3DRTYPE_INDEXBUFFER = 7, D3DRTYPE_FORCE_DWORD = 0x7fffffff } D3DRESOURCETYPE; #define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1) typedef enum _D3DSHADEMODE { D3DSHADE_FLAT = 1, D3DSHADE_GOURAUD = 2, D3DSHADE_PHONG = 3, D3DSHADE_FORCE_DWORD = 0x7fffffff } D3DSHADEMODE; typedef enum _D3DSTATEBLOCKTYPE { D3DSBT_ALL = 1, D3DSBT_PIXELSTATE = 2, D3DSBT_VERTEXSTATE = 3, D3DSBT_FORCE_DWORD = 0xffffffff } D3DSTATEBLOCKTYPE; typedef enum _D3DSTENCILOP { D3DSTENCILOP_KEEP = 1, D3DSTENCILOP_ZERO = 2, D3DSTENCILOP_REPLACE = 3, D3DSTENCILOP_INCRSAT = 4, D3DSTENCILOP_DECRSAT = 5, D3DSTENCILOP_INVERT = 6, D3DSTENCILOP_INCR = 7, D3DSTENCILOP_DECR = 8, D3DSTENCILOP_FORCE_DWORD = 0x7fffffff } D3DSTENCILOP; typedef enum _D3DSWAPEFFECT { D3DSWAPEFFECT_DISCARD = 1, D3DSWAPEFFECT_FLIP = 2, D3DSWAPEFFECT_COPY = 3, #ifndef D3D_DISABLE_9EX D3DSWAPEFFECT_OVERLAY = 4, D3DSWAPEFFECT_FLIPEX = 5, #endif D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF } D3DSWAPEFFECT; typedef enum _D3DTEXTUREADDRESS { D3DTADDRESS_WRAP = 1, D3DTADDRESS_MIRROR = 2, D3DTADDRESS_CLAMP = 3, D3DTADDRESS_BORDER = 4, D3DTADDRESS_MIRRORONCE = 5, D3DTADDRESS_FORCE_DWORD = 0x7fffffff } D3DTEXTUREADDRESS; typedef enum _D3DTEXTUREFILTERTYPE { D3DTEXF_NONE = 0, D3DTEXF_POINT = 1, D3DTEXF_LINEAR = 2, D3DTEXF_ANISOTROPIC = 3, D3DTEXF_FLATCUBIC = 4, D3DTEXF_GAUSSIANCUBIC = 5, D3DTEXF_PYRAMIDALQUAD = 6, D3DTEXF_GAUSSIANQUAD = 7, #ifndef D3D_DISABLE_9EX D3DTEXF_CONVOLUTIONMONO = 8, #endif D3DTEXF_FORCE_DWORD = 0x7fffffff } D3DTEXTUREFILTERTYPE; typedef enum _D3DTEXTUREOP { D3DTOP_DISABLE = 1, D3DTOP_SELECTARG1 = 2, D3DTOP_SELECTARG2 = 3, D3DTOP_MODULATE = 4, D3DTOP_MODULATE2X = 5, D3DTOP_MODULATE4X = 6, D3DTOP_ADD = 7, D3DTOP_ADDSIGNED = 8, D3DTOP_ADDSIGNED2X = 9, D3DTOP_SUBTRACT = 10, D3DTOP_ADDSMOOTH = 11, D3DTOP_BLENDDIFFUSEALPHA = 12, D3DTOP_BLENDTEXTUREALPHA = 13, D3DTOP_BLENDFACTORALPHA = 14, D3DTOP_BLENDTEXTUREALPHAPM = 15, D3DTOP_BLENDCURRENTALPHA = 16, D3DTOP_PREMODULATE = 17, D3DTOP_MODULATEALPHA_ADDCOLOR = 18, D3DTOP_MODULATECOLOR_ADDALPHA = 19, D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, D3DTOP_BUMPENVMAP = 22, D3DTOP_BUMPENVMAPLUMINANCE = 23, D3DTOP_DOTPRODUCT3 = 24, D3DTOP_MULTIPLYADD = 25, D3DTOP_LERP = 26, D3DTOP_FORCE_DWORD = 0x7fffffff, } D3DTEXTUREOP; typedef enum _D3DTEXTURESTAGESTATETYPE { D3DTSS_COLOROP = 1, D3DTSS_COLORARG1 = 2, D3DTSS_COLORARG2 = 3, D3DTSS_ALPHAOP = 4, D3DTSS_ALPHAARG1 = 5, D3DTSS_ALPHAARG2 = 6, D3DTSS_BUMPENVMAT00 = 7, D3DTSS_BUMPENVMAT01 = 8, D3DTSS_BUMPENVMAT10 = 9, D3DTSS_BUMPENVMAT11 = 10, D3DTSS_TEXCOORDINDEX = 11, D3DTSS_BUMPENVLSCALE = 22, D3DTSS_BUMPENVLOFFSET = 23, D3DTSS_TEXTURETRANSFORMFLAGS = 24, D3DTSS_COLORARG0 = 26, D3DTSS_ALPHAARG0 = 27, D3DTSS_RESULTARG = 28, D3DTSS_CONSTANT = 32, D3DTSS_FORCE_DWORD = 0x7fffffff } D3DTEXTURESTAGESTATETYPE; typedef enum _D3DTEXTURETRANSFORMFLAGS { D3DTTFF_DISABLE = 0, D3DTTFF_COUNT1 = 1, D3DTTFF_COUNT2 = 2, D3DTTFF_COUNT3 = 3, D3DTTFF_COUNT4 = 4, D3DTTFF_PROJECTED = 256, D3DTTFF_FORCE_DWORD = 0x7fffffff } D3DTEXTURETRANSFORMFLAGS; typedef enum _D3DTRANSFORMSTATETYPE { D3DTS_VIEW = 2, D3DTS_PROJECTION = 3, D3DTS_TEXTURE0 = 16, D3DTS_TEXTURE1 = 17, D3DTS_TEXTURE2 = 18, D3DTS_TEXTURE3 = 19, D3DTS_TEXTURE4 = 20, D3DTS_TEXTURE5 = 21, D3DTS_TEXTURE6 = 22, D3DTS_TEXTURE7 = 23, D3DTS_FORCE_DWORD = 0x7fffffff } D3DTRANSFORMSTATETYPE; typedef enum _D3DVERTEXBLENDFLAGS { D3DVBF_DISABLE = 0, D3DVBF_1WEIGHTS = 1, D3DVBF_2WEIGHTS = 2, D3DVBF_3WEIGHTS = 3, D3DVBF_TWEENING = 255, D3DVBF_0WEIGHTS = 256 } D3DVERTEXBLENDFLAGS; typedef enum _D3DZBUFFERTYPE { D3DZB_FALSE = 0, D3DZB_TRUE = 1, D3DZB_USEW = 2, D3DZB_FORCE_DWORD = 0x7fffffff } D3DZBUFFERTYPE; typedef enum _D3DSAMPLERSTATETYPE { D3DSAMP_ADDRESSU = 1, D3DSAMP_ADDRESSV = 2, D3DSAMP_ADDRESSW = 3, D3DSAMP_BORDERCOLOR = 4, D3DSAMP_MAGFILTER = 5, D3DSAMP_MINFILTER = 6, D3DSAMP_MIPFILTER = 7, D3DSAMP_MIPMAPLODBIAS = 8, D3DSAMP_MAXMIPLEVEL = 9, D3DSAMP_MAXANISOTROPY = 10, D3DSAMP_SRGBTEXTURE = 11, D3DSAMP_ELEMENTINDEX = 12, D3DSAMP_DMAPOFFSET = 13, D3DSAMP_FORCE_DWORD = 0x7fffffff, } D3DSAMPLERSTATETYPE; /***************************************************************************** * Direct 3D v9 typedefs */ #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR; #define D3DCOLOR_DEFINED #endif /***************************************************************************** * Direct 3D v9 structures */ typedef struct _D3DADAPTER_IDENTIFIER9 { char Driver[MAX_DEVICE_IDENTIFIER_STRING]; char Description[MAX_DEVICE_IDENTIFIER_STRING]; char DeviceName[32]; LARGE_INTEGER DriverVersion; DWORD VendorId; DWORD DeviceId; DWORD SubSysId; DWORD Revision; GUID DeviceIdentifier; DWORD WHQLLevel; } D3DADAPTER_IDENTIFIER9; typedef struct _D3DBOX { UINT Left; UINT Top; UINT Right; UINT Bottom; UINT Front; UINT Back; } D3DBOX; typedef struct _D3DCLIPSTATUS9 { DWORD ClipUnion; DWORD ClipIntersection; } D3DCLIPSTATUS9; #ifndef D3DCOLORVALUE_DEFINED typedef struct _D3DCOLORVALUE { float r; float g; float b; float a; } D3DCOLORVALUE; #define D3DCOLORVALUE_DEFINED #endif typedef struct _D3DDEVICE_CREATION_PARAMETERS { UINT AdapterOrdinal; D3DDEVTYPE DeviceType; HWND hFocusWindow; DWORD BehaviorFlags; } D3DDEVICE_CREATION_PARAMETERS; typedef struct _D3DDEVINFO_D3D9BANDWIDTHTIMINGS { float MaxBandwidthUtilized; float FrontEndUploadMemoryUtilizedPercent; float VertexRateUtilizedPercent; float TriangleSetupRateUtilizedPercent; float FillRateUtilizedPercent; } D3DDEVINFO_D3D9BANDWIDTHTIMINGS; typedef struct _D3DDEVINFO_D3D9CACHEUTILIZATION { float TextureCacheHitRate; float PostTransformVertexCacheHitRate; } D3DDEVINFO_D3D9CACHEUTILIZATION; typedef struct _D3DDEVINFO_D3D9INTERFACETIMINGS { float WaitingForGPUToUseApplicationResourceTimePercent; float WaitingForGPUToAcceptMoreCommandsTimePercent; float WaitingForGPUToStayWithinLatencyTimePercent; float WaitingForGPUExclusiveResourceTimePercent; float WaitingForGPUOtherTimePercent; } D3DDEVINFO_D3D9INTERFACETIMINGS; typedef struct _D3DDEVINFO_D3D9PIPELINETIMINGS { float VertexProcessingTimePercent; float PixelProcessingTimePercent; float OtherGPUProcessingTimePercent; float GPUIdleTimePercent; } D3DDEVINFO_D3D9PIPELINETIMINGS; typedef struct _D3DDEVINFO_D3D9STAGETIMINGS { float MemoryProcessingPercent; float ComputationProcessingPercent; } D3DDEVINFO_D3D9STAGETIMINGS; /* Vertex cache optimization hints. */ typedef struct D3DDEVINFO_VCACHE { /* Must be a 4 char code FOURCC (e.g. CACH) */ DWORD Pattern; /* 0 to get the longest strips, 1 vertex cache */ DWORD OptMethod; /* Cache size to use (only valid if OptMethod==1) */ DWORD CacheSize; /* internal for deciding when to restart strips, non user modifiable (only valid if OptMethod==1) */ DWORD MagicNumber; } D3DDEVINFO_VCACHE; typedef struct D3DRESOURCESTATS { BOOL bThrashing; DWORD ApproxBytesDownloaded; DWORD NumEvicts; DWORD NumVidCreates; DWORD LastPri; DWORD NumUsed; DWORD NumUsedInVidMem; DWORD WorkingSet; DWORD WorkingSetBytes; DWORD TotalManaged; DWORD TotalBytes; } D3DRESOURCESTATS; typedef struct _D3DDEVINFO_D3DRESOURCEMANAGER { D3DRESOURCESTATS stats[D3DRTYPECOUNT]; } D3DDEVINFO_D3DRESOURCEMANAGER; typedef struct _D3DDEVINFO_D3DVERTEXSTATS { DWORD NumRenderedTriangles; DWORD NumExtraClippingTriangles; } D3DDEVINFO_D3DVERTEXSTATS; typedef struct _D3DDISPLAYMODE { UINT Width; UINT Height; UINT RefreshRate; D3DFORMAT Format; } D3DDISPLAYMODE; typedef struct _D3DGAMMARAMP { WORD red [256]; WORD green[256]; WORD blue [256]; } D3DGAMMARAMP; typedef struct _D3DINDEXBUFFER_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; UINT Size; } D3DINDEXBUFFER_DESC; #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; #define D3DVECTOR_DEFINED #endif typedef struct _D3DLIGHT9 { D3DLIGHTTYPE Type; D3DCOLORVALUE Diffuse; D3DCOLORVALUE Specular; D3DCOLORVALUE Ambient; D3DVECTOR Position; D3DVECTOR Direction; float Range; float Falloff; float Attenuation0; float Attenuation1; float Attenuation2; float Theta; float Phi; } D3DLIGHT9; typedef struct _D3DLINEPATTERN { WORD wRepeatFactor; WORD wLinePattern; } D3DLINEPATTERN; typedef struct _D3DLOCKED_BOX { INT RowPitch; INT SlicePitch; void* pBits; } D3DLOCKED_BOX; typedef struct _D3DLOCKED_RECT { INT Pitch; void* pBits; } D3DLOCKED_RECT; typedef struct _D3DMATERIAL9 { D3DCOLORVALUE Diffuse; D3DCOLORVALUE Ambient; D3DCOLORVALUE Specular; D3DCOLORVALUE Emissive; float Power; } D3DMATERIAL9; #ifndef D3DMATRIX_DEFINED typedef struct _D3DMATRIX { union { struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; } DUMMYSTRUCTNAME; float m[4][4]; } DUMMYUNIONNAME; } D3DMATRIX; #define D3DMATRIX_DEFINED #endif typedef struct _D3DPRESENT_PARAMETERS_ { UINT BackBufferWidth; UINT BackBufferHeight; D3DFORMAT BackBufferFormat; UINT BackBufferCount; D3DMULTISAMPLE_TYPE MultiSampleType; DWORD MultiSampleQuality; D3DSWAPEFFECT SwapEffect; HWND hDeviceWindow; BOOL Windowed; BOOL EnableAutoDepthStencil; D3DFORMAT AutoDepthStencilFormat; DWORD Flags; UINT FullScreen_RefreshRateInHz; UINT PresentationInterval; } D3DPRESENT_PARAMETERS; typedef struct _D3DRANGE { UINT Offset; UINT Size; } D3DRANGE; typedef struct _D3DRASTER_STATUS { BOOL InVBlank; UINT ScanLine; } D3DRASTER_STATUS; #ifndef D3DRECT_DEFINED typedef struct _D3DRECT { LONG x1; LONG y1; LONG x2; LONG y2; } D3DRECT; #define D3DRECT_DEFINED #endif typedef struct _D3DRECTPATCH_INFO { UINT StartVertexOffsetWidth; UINT StartVertexOffsetHeight; UINT Width; UINT Height; UINT Stride; D3DBASISTYPE Basis; D3DDEGREETYPE Degree; } D3DRECTPATCH_INFO; typedef struct _D3DSURFACE_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; D3DMULTISAMPLE_TYPE MultiSampleType; DWORD MultiSampleQuality; UINT Width; UINT Height; } D3DSURFACE_DESC; typedef struct _D3DTRIPATCH_INFO { UINT StartVertexOffset; UINT NumVertices; D3DBASISTYPE Basis; D3DDEGREETYPE Degree; } D3DTRIPATCH_INFO; typedef struct _D3DVERTEXBUFFER_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; UINT Size; DWORD FVF; } D3DVERTEXBUFFER_DESC; typedef struct _D3DVIEWPORT9 { DWORD X; DWORD Y; DWORD Width; DWORD Height; float MinZ; float MaxZ; } D3DVIEWPORT9; typedef struct _D3DVOLUME_DESC { D3DFORMAT Format; D3DRESOURCETYPE Type; DWORD Usage; D3DPOOL Pool; UINT Width; UINT Height; UINT Depth; } D3DVOLUME_DESC; /* Parts added with d3d9ex */ #if !defined(D3D_DISABLE_9EX) typedef enum D3DSCANLINEORDERING { D3DSCANLINEORDERING_UNKNOWN, D3DSCANLINEORDERING_PROGRESSIVE, D3DSCANLINEORDERING_INTERLACED, } D3DSCANLINEORDERING; typedef struct D3DDISPLAYMODEFILTER { UINT Size; D3DFORMAT Format; D3DSCANLINEORDERING ScanLineOrdering; } D3DDISPLAYMODEFILTER; typedef struct D3DDISPLAYMODEEX { UINT Size; UINT Width; UINT Height; UINT RefreshRate; D3DFORMAT Format; D3DSCANLINEORDERING ScanLineOrdering; } D3DDISPLAYMODEEX; typedef enum D3DDISPLAYROTATION { D3DDISPLAYROTATION_IDENTITY = 1, D3DDISPLAYROTATION_90, D3DDISPLAYROTATION_180, D3DDISPLAYROTATION_270 } D3DDISPLAYROTATION; typedef struct _D3DMEMORYPRESSURE { UINT64 BytesEvictedFromProcess; UINT64 SizeOfInefficientAllocation; DWORD LevelOfEfficiency; } D3DMEMORYPRESSURE; typedef enum _D3DCOMPOSERECTSOP{ D3DCOMPOSERECTS_COPY = 1, D3DCOMPOSERECTS_OR, D3DCOMPOSERECTS_AND, D3DCOMPOSERECTS_NEG, D3DCOMPOSERECTS_FORCE_DWORD = 0x7fffffff } D3DCOMPOSERECTSOP; typedef struct _D3DPRESENTSTATS { UINT PresentCount; UINT PresentRefreshCount; UINT SyncRefreshCount; LARGE_INTEGER SyncQPCTime; LARGE_INTEGER SyncGPUTime; } D3DPRESENTSTATS; #endif /* D3D_DISABLE_9EX */ typedef enum _D3DSHADER_COMPARISON { D3DSPC_RESERVED0 = 0, D3DSPC_GT, D3DSPC_EQ, D3DSPC_GE, D3DSPC_LT, D3DSPC_NE, D3DSPC_LE, D3DSPC_RESERVED1, } D3DSHADER_COMPARISON; #ifdef __i386__ #include #endif #endif /* __WINE_D3D9TYPES_H */ ================================================ FILE: wine/windows/d3dcaps.h ================================================ /* * Copyright (C) 2000 Peter Hunnisett * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3DCAPS_H #define __WINE_D3DCAPS_H #include #ifdef __i386__ #include #endif typedef struct _D3DTRANSFORMCAPS { DWORD dwSize; DWORD dwCaps; } D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS; #define D3DTRANSFORMCAPS_CLIP __MSABI_LONG(0x00000001) typedef struct _D3DLIGHTINGCAPS { DWORD dwSize; DWORD dwCaps; DWORD dwLightingModel; DWORD dwNumLights; } D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS; #define D3DLIGHTINGMODEL_RGB 0x00000001 #define D3DLIGHTINGMODEL_MONO 0x00000002 #define D3DLIGHTCAPS_POINT 0x00000001 #define D3DLIGHTCAPS_SPOT 0x00000002 #define D3DLIGHTCAPS_DIRECTIONAL 0x00000004 #define D3DLIGHTCAPS_PARALLELPOINT 0x00000008 #define D3DLIGHTCAPS_GLSPOT 0x00000010 typedef struct _D3dPrimCaps { DWORD dwSize; DWORD dwMiscCaps; DWORD dwRasterCaps; DWORD dwZCmpCaps; DWORD dwSrcBlendCaps; DWORD dwDestBlendCaps; DWORD dwAlphaCmpCaps; DWORD dwShadeCaps; DWORD dwTextureCaps; DWORD dwTextureFilterCaps; DWORD dwTextureBlendCaps; DWORD dwTextureAddressCaps; DWORD dwStippleWidth; DWORD dwStippleHeight; } D3DPRIMCAPS, *LPD3DPRIMCAPS; #define D3DPMISCCAPS_MASKPLANES 0x00000001 #define D3DPMISCCAPS_MASKZ 0x00000002 #define D3DPMISCCAPS_LINEPATTERNREP 0x00000004 #define D3DPMISCCAPS_CONFORMANT 0x00000008 #define D3DPMISCCAPS_CULLNONE 0x00000010 #define D3DPMISCCAPS_CULLCW 0x00000020 #define D3DPMISCCAPS_CULLCCW 0x00000040 #define D3DPRASTERCAPS_DITHER 0x00000001 #define D3DPRASTERCAPS_ROP2 0x00000002 #define D3DPRASTERCAPS_XOR 0x00000004 #define D3DPRASTERCAPS_PAT 0x00000008 #define D3DPRASTERCAPS_ZTEST 0x00000010 #define D3DPRASTERCAPS_SUBPIXEL 0x00000020 #define D3DPRASTERCAPS_SUBPIXELX 0x00000040 #define D3DPRASTERCAPS_FOGVERTEX 0x00000080 #define D3DPRASTERCAPS_FOGTABLE 0x00000100 #define D3DPRASTERCAPS_STIPPLE 0x00000200 #define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT 0x00000400 #define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT 0x00000800 #define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000 #define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000 #define D3DPRASTERCAPS_ZBIAS 0x00004000 #define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000 #define D3DPRASTERCAPS_FOGRANGE 0x00010000 #define D3DPRASTERCAPS_ANISOTROPY 0x00020000 #define D3DPRASTERCAPS_WBUFFER 0x00040000 #define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT 0x00080000 #define D3DPRASTERCAPS_WFOG 0x00100000 #define D3DPRASTERCAPS_ZFOG 0x00200000 #define D3DPCMPCAPS_NEVER 0x00000001 #define D3DPCMPCAPS_LESS 0x00000002 #define D3DPCMPCAPS_EQUAL 0x00000004 #define D3DPCMPCAPS_LESSEQUAL 0x00000008 #define D3DPCMPCAPS_GREATER 0x00000010 #define D3DPCMPCAPS_NOTEQUAL 0x00000020 #define D3DPCMPCAPS_GREATEREQUAL 0x00000040 #define D3DPCMPCAPS_ALWAYS 0x00000080 #define D3DPBLENDCAPS_ZERO 0x00000001 #define D3DPBLENDCAPS_ONE 0x00000002 #define D3DPBLENDCAPS_SRCCOLOR 0x00000004 #define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008 #define D3DPBLENDCAPS_SRCALPHA 0x00000010 #define D3DPBLENDCAPS_INVSRCALPHA 0x00000020 #define D3DPBLENDCAPS_DESTALPHA 0x00000040 #define D3DPBLENDCAPS_INVDESTALPHA 0x00000080 #define D3DPBLENDCAPS_DESTCOLOR 0x00000100 #define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200 #define D3DPBLENDCAPS_SRCALPHASAT 0x00000400 #define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800 #define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000 #define D3DPSHADECAPS_COLORFLATMONO 0x00000001 #define D3DPSHADECAPS_COLORFLATRGB 0x00000002 #define D3DPSHADECAPS_COLORGOURAUDMONO 0x00000004 #define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008 #define D3DPSHADECAPS_COLORPHONGMONO 0x00000010 #define D3DPSHADECAPS_COLORPHONGRGB 0x00000020 #define D3DPSHADECAPS_SPECULARFLATMONO 0x00000040 #define D3DPSHADECAPS_SPECULARFLATRGB 0x00000080 #define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100 #define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200 #define D3DPSHADECAPS_SPECULARPHONGMONO 0x00000400 #define D3DPSHADECAPS_SPECULARPHONGRGB 0x00000800 #define D3DPSHADECAPS_ALPHAFLATBLEND 0x00001000 #define D3DPSHADECAPS_ALPHAFLATSTIPPLED 0x00002000 #define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000 #define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000 #define D3DPSHADECAPS_ALPHAPHONGBLEND 0x00010000 #define D3DPSHADECAPS_ALPHAPHONGSTIPPLED 0x00020000 #define D3DPSHADECAPS_FOGFLAT 0x00040000 #define D3DPSHADECAPS_FOGGOURAUD 0x00080000 #define D3DPSHADECAPS_FOGPHONG 0x00100000 #define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001 #define D3DPTEXTURECAPS_POW2 0x00000002 #define D3DPTEXTURECAPS_ALPHA 0x00000004 #define D3DPTEXTURECAPS_TRANSPARENCY 0x00000008 #define D3DPTEXTURECAPS_BORDER 0x00000010 #define D3DPTEXTURECAPS_SQUAREONLY 0x00000020 #define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040 #define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080 #define D3DPTEXTURECAPS_NONPOW2CONDITIONAL __MSABI_LONG(0x00000100) /* yes actually 0x00000200 is unused - or at least unreleased */ #define D3DPTEXTURECAPS_PROJECTED 0x00000400 #define D3DPTEXTURECAPS_CUBEMAP 0x00000800 #define D3DPTEXTURECAPS_COLORKEYBLEND 0x00001000 #define D3DPTFILTERCAPS_NEAREST 0x00000001 #define D3DPTFILTERCAPS_LINEAR 0x00000002 #define D3DPTFILTERCAPS_MIPNEAREST 0x00000004 #define D3DPTFILTERCAPS_MIPLINEAR 0x00000008 #define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010 #define D3DPTFILTERCAPS_LINEARMIPLINEAR 0x00000020 /* yes - missing numbers */ #define D3DPTFILTERCAPS_MINFPOINT 0x00000100 #define D3DPTFILTERCAPS_MINFLINEAR 0x00000200 #define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400 /* yes - missing numbers */ #define D3DPTFILTERCAPS_MIPFPOINT 0x00010000 #define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000 /* yes - missing numbers */ #define D3DPTFILTERCAPS_MAGFPOINT 0x01000000 #define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000 #define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000 #define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000 #define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000 #define D3DPTBLENDCAPS_DECAL 0x00000001 #define D3DPTBLENDCAPS_MODULATE 0x00000002 #define D3DPTBLENDCAPS_DECALALPHA 0x00000004 #define D3DPTBLENDCAPS_MODULATEALPHA 0x00000008 #define D3DPTBLENDCAPS_DECALMASK 0x00000010 #define D3DPTBLENDCAPS_MODULATEMASK 0x00000020 #define D3DPTBLENDCAPS_COPY 0x00000040 #define D3DPTBLENDCAPS_ADD 0x00000080 #define D3DPTADDRESSCAPS_WRAP 0x00000001 #define D3DPTADDRESSCAPS_MIRROR 0x00000002 #define D3DPTADDRESSCAPS_CLAMP 0x00000004 #define D3DPTADDRESSCAPS_BORDER 0x00000008 #define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010 typedef struct _D3DDeviceDesc { DWORD dwSize; DWORD dwFlags; D3DCOLORMODEL dcmColorModel; DWORD dwDevCaps; D3DTRANSFORMCAPS dtcTransformCaps; BOOL bClipping; D3DLIGHTINGCAPS dlcLightingCaps; D3DPRIMCAPS dpcLineCaps; D3DPRIMCAPS dpcTriCaps; DWORD dwDeviceRenderBitDepth; DWORD dwDeviceZBufferBitDepth; DWORD dwMaxBufferSize; DWORD dwMaxVertexCount; DWORD dwMinTextureWidth,dwMinTextureHeight; DWORD dwMaxTextureWidth,dwMaxTextureHeight; DWORD dwMinStippleWidth,dwMaxStippleWidth; DWORD dwMinStippleHeight,dwMaxStippleHeight; DWORD dwMaxTextureRepeat; DWORD dwMaxTextureAspectRatio; DWORD dwMaxAnisotropy; D3DVALUE dvGuardBandLeft; D3DVALUE dvGuardBandTop; D3DVALUE dvGuardBandRight; D3DVALUE dvGuardBandBottom; D3DVALUE dvExtentsAdjust; DWORD dwStencilCaps; DWORD dwFVFCaps; DWORD dwTextureOpCaps; WORD wMaxTextureBlendStages; WORD wMaxSimultaneousTextures; } D3DDEVICEDESC,*LPD3DDEVICEDESC; #define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC)) typedef struct _D3DDeviceDesc7 { DWORD dwDevCaps; D3DPRIMCAPS dpcLineCaps; D3DPRIMCAPS dpcTriCaps; DWORD dwDeviceRenderBitDepth; DWORD dwDeviceZBufferBitDepth; DWORD dwMinTextureWidth, dwMinTextureHeight; DWORD dwMaxTextureWidth, dwMaxTextureHeight; DWORD dwMaxTextureRepeat; DWORD dwMaxTextureAspectRatio; DWORD dwMaxAnisotropy; D3DVALUE dvGuardBandLeft; D3DVALUE dvGuardBandTop; D3DVALUE dvGuardBandRight; D3DVALUE dvGuardBandBottom; D3DVALUE dvExtentsAdjust; DWORD dwStencilCaps; DWORD dwFVFCaps; DWORD dwTextureOpCaps; WORD wMaxTextureBlendStages; WORD wMaxSimultaneousTextures; DWORD dwMaxActiveLights; D3DVALUE dvMaxVertexW; GUID deviceGUID; WORD wMaxUserClipPlanes; WORD wMaxVertexBlendMatrices; DWORD dwVertexProcessingCaps; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwReserved4; } D3DDEVICEDESC7, *LPD3DDEVICEDESC7; #define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7)) #define D3DDD_COLORMODEL 0x00000001 #define D3DDD_DEVCAPS 0x00000002 #define D3DDD_TRANSFORMCAPS 0x00000004 #define D3DDD_LIGHTINGCAPS 0x00000008 #define D3DDD_BCLIPPING 0x00000010 #define D3DDD_LINECAPS 0x00000020 #define D3DDD_TRICAPS 0x00000040 #define D3DDD_DEVICERENDERBITDEPTH 0x00000080 #define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100 #define D3DDD_MAXBUFFERSIZE 0x00000200 #define D3DDD_MAXVERTEXCOUNT 0x00000400 #define D3DDEVCAPS_FLOATTLVERTEX 0x00000001 #define D3DDEVCAPS_SORTINCREASINGZ 0x00000002 #define D3DDEVCAPS_SORTDECREASINGZ 0X00000004 #define D3DDEVCAPS_SORTEXACT 0x00000008 #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010 #define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020 #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040 #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080 #define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100 #define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200 #define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400 #define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800 #define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000 #define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000 #define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000 #define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000 #define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000 #define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000 #define D3DDEVCAPS_HWRASTERIZATION 0x00080000 #define D3DSTENCILCAPS_KEEP 0x00000001 #define D3DSTENCILCAPS_ZERO 0x00000002 #define D3DSTENCILCAPS_REPLACE 0x00000004 #define D3DSTENCILCAPS_INCRSAT 0x00000008 #define D3DSTENCILCAPS_DECRSAT 0x00000010 #define D3DSTENCILCAPS_INVERT 0x00000020 #define D3DSTENCILCAPS_INCR 0x00000040 #define D3DSTENCILCAPS_DECR 0x00000080 #define D3DTEXOPCAPS_DISABLE 0x00000001 #define D3DTEXOPCAPS_SELECTARG1 0x00000002 #define D3DTEXOPCAPS_SELECTARG2 0x00000004 #define D3DTEXOPCAPS_MODULATE 0x00000008 #define D3DTEXOPCAPS_MODULATE2X 0x00000010 #define D3DTEXOPCAPS_MODULATE4X 0x00000020 #define D3DTEXOPCAPS_ADD 0x00000040 #define D3DTEXOPCAPS_ADDSIGNED 0x00000080 #define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100 #define D3DTEXOPCAPS_SUBTRACT 0x00000200 #define D3DTEXOPCAPS_ADDSMOOTH 0x00000400 #define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800 #define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000 #define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000 #define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000 #define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000 #define D3DTEXOPCAPS_PREMODULATE 0x00010000 #define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000 #define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000 #define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000 #define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000 #define D3DTEXOPCAPS_BUMPENVMAP 0x00200000 #define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000 #define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000 #define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000FFFF #define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000 #define D3DVTXPCAPS_TEXGEN 0x00000001 #define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002 #define D3DVTXPCAPS_VERTEXFOG 0x00000004 #define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008 #define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010 #define D3DVTXPCAPS_LOCALVIEWER 0x00000020 typedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK)(GUID *guid, char *description, char *name, D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc, void *ctx); typedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK7)(char *description, char *name, D3DDEVICEDESC7 *desc, void *ctx); #define D3DFDS_COLORMODEL 0x00000001 #define D3DFDS_GUID 0x00000002 #define D3DFDS_HARDWARE 0x00000004 #define D3DFDS_TRIANGLES 0x00000008 #define D3DFDS_LINES 0x00000010 #define D3DFDS_MISCCAPS 0x00000020 #define D3DFDS_RASTERCAPS 0x00000040 #define D3DFDS_ZCMPCAPS 0x00000080 #define D3DFDS_ALPHACMPCAPS 0x00000100 #define D3DFDS_SRCBLENDCAPS 0x00000200 #define D3DFDS_DSTBLENDCAPS 0x00000400 #define D3DFDS_SHADECAPS 0x00000800 #define D3DFDS_TEXTURECAPS 0x00001000 #define D3DFDS_TEXTUREFILTERCAPS 0x00002000 #define D3DFDS_TEXTUREBLENDCAPS 0x00004000 #define D3DFDS_TEXTUREADDRESSCAPS 0x00008000 typedef struct _D3DFINDDEVICESEARCH { DWORD dwSize; DWORD dwFlags; BOOL bHardware; D3DCOLORMODEL dcmColorModel; GUID guid; DWORD dwCaps; D3DPRIMCAPS dpcPrimCaps; } D3DFINDDEVICESEARCH,*LPD3DFINDDEVICESEARCH; typedef struct _D3DFINDDEVICERESULT { DWORD dwSize; GUID guid; D3DDEVICEDESC ddHwDesc; D3DDEVICEDESC ddSwDesc; } D3DFINDDEVICERESULT,*LPD3DFINDDEVICERESULT; typedef struct _D3DExecuteBufferDesc { DWORD dwSize; DWORD dwFlags; DWORD dwCaps; DWORD dwBufferSize; void *lpData; } D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC; #define D3DDEB_BUFSIZE 0x00000001 #define D3DDEB_CAPS 0x00000002 #define D3DDEB_LPDATA 0x00000004 #define D3DDEBCAPS_SYSTEMMEMORY 0x00000001 #define D3DDEBCAPS_VIDEOMEMORY 0x00000002 #define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY) /* = 0x3 */ typedef struct _D3DDEVINFO_TEXTUREMANAGER { BOOL bThrashing; DWORD dwApproxBytesDownloaded; DWORD dwNumEvicts; DWORD dwNumVidCreates; DWORD dwNumTexturesUsed; DWORD dwNumUsedTexInVid; DWORD dwWorkingSet; DWORD dwWorkingSetBytes; DWORD dwTotalManaged; DWORD dwTotalBytes; DWORD dwLastPri; } D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER; typedef struct _D3DDEVINFO_TEXTURING { DWORD dwNumLoads; DWORD dwApproxBytesLoaded; DWORD dwNumPreLoads; DWORD dwNumSet; DWORD dwNumCreates; DWORD dwNumDestroys; DWORD dwNumSetPriorities; DWORD dwNumSetLODs; DWORD dwNumLocks; DWORD dwNumGetDCs; } D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING; #ifdef __i386__ #include #endif #endif ================================================ FILE: wine/windows/d3dcommon.idl ================================================ /* * Copyright 2010 Matteo Bruni for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; typedef struct _D3D_SHADER_MACRO { const char *Name; const char *Definition; } D3D_SHADER_MACRO; typedef struct _D3D_SHADER_MACRO* LPD3D_SHADER_MACRO; [ object, local, uuid(8ba5fb08-5195-40e2-ac58-0d989c3a0102) ] interface ID3D10Blob : IUnknown { void *GetBufferPointer(); SIZE_T GetBufferSize(); } typedef ID3D10Blob* LPD3D10BLOB; typedef ID3D10Blob ID3DBlob; typedef ID3DBlob* LPD3DBLOB; cpp_quote("#define IID_ID3DBlob IID_ID3D10Blob") typedef enum _D3D_INCLUDE_TYPE { D3D_INCLUDE_LOCAL = 0, D3D_INCLUDE_SYSTEM, D3D10_INCLUDE_LOCAL = D3D_INCLUDE_LOCAL, D3D10_INCLUDE_SYSTEM = D3D_INCLUDE_SYSTEM, D3D_INCLUDE_FORCE_DWORD = 0x7fffffff } D3D_INCLUDE_TYPE; [ object, local, ] interface ID3DInclude { HRESULT Open(D3D_INCLUDE_TYPE include_type, const char *filename, const void *parent_data, const void **data, UINT *bytes); HRESULT Close(const void *data); } typedef ID3DInclude* LPD3DINCLUDE; typedef enum D3D_DRIVER_TYPE { D3D_DRIVER_TYPE_UNKNOWN, D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_REFERENCE, D3D_DRIVER_TYPE_NULL, D3D_DRIVER_TYPE_SOFTWARE, D3D_DRIVER_TYPE_WARP, } D3D_DRIVER_TYPE; typedef enum D3D_FEATURE_LEVEL { D3D_FEATURE_LEVEL_9_1 = 0x9100, D3D_FEATURE_LEVEL_9_2 = 0x9200, D3D_FEATURE_LEVEL_9_3 = 0x9300, D3D_FEATURE_LEVEL_10_0 = 0xa000, D3D_FEATURE_LEVEL_10_1 = 0xa100, D3D_FEATURE_LEVEL_11_0 = 0xb000, D3D_FEATURE_LEVEL_11_1 = 0xb100, D3D_FEATURE_LEVEL_12_0 = 0xc000, D3D_FEATURE_LEVEL_12_1 = 0xc100, } D3D_FEATURE_LEVEL; cpp_quote("#define D3D_FL9_1_REQ_TEXTURE1D_U_DIMENSION 2048") cpp_quote("#define D3D_FL9_3_REQ_TEXTURE1D_U_DIMENSION 4096") cpp_quote("#define D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION 2048") cpp_quote("#define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION 4096") cpp_quote("#define D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION 512") cpp_quote("#define D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION 4096") cpp_quote("#define D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION 256") cpp_quote("#define D3D_FL9_1_DEFAULT_MAX_ANISOTROPY 2") cpp_quote("#define D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT 65535") cpp_quote("#define D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT 1048575") cpp_quote("#define D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT 1") cpp_quote("#define D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT 4") cpp_quote("#define D3D_FL9_1_MAX_TEXTURE_REPEAT 128") cpp_quote("#define D3D_FL9_2_MAX_TEXTURE_REPEAT 2048") cpp_quote("#define D3D_FL9_3_MAX_TEXTURE_REPEAT 8192") typedef enum _D3D_SHADER_VARIABLE_CLASS { D3D_SVC_SCALAR, D3D_SVC_VECTOR, D3D_SVC_MATRIX_ROWS, D3D_SVC_MATRIX_COLUMNS, D3D_SVC_OBJECT, D3D_SVC_STRUCT, D3D_SVC_INTERFACE_CLASS, D3D_SVC_INTERFACE_POINTER, D3D10_SVC_SCALAR = 0, D3D10_SVC_VECTOR, D3D10_SVC_MATRIX_ROWS, D3D10_SVC_MATRIX_COLUMNS, D3D10_SVC_OBJECT, D3D10_SVC_STRUCT, D3D11_SVC_INTERFACE_CLASS, D3D11_SVC_INTERFACE_POINTER, D3D_SVC_FORCE_DWORD = 0x7fffffff, } D3D_SHADER_VARIABLE_CLASS; typedef enum _D3D_SHADER_VARIABLE_FLAGS { D3D_SVF_USERPACKED = 0x01, D3D_SVF_USED = 0x02, D3D_SVF_INTERFACE_POINTER = 0x04, D3D_SVF_INTERFACE_PARAMETER = 0x08, D3D10_SVF_USERPACKED = D3D_SVF_USERPACKED, D3D10_SVF_USED = D3D_SVF_USED, D3D11_SVF_INTERFACE_POINTER = D3D_SVF_INTERFACE_POINTER, D3D11_SVF_INTERFACE_PARAMETER = D3D_SVF_INTERFACE_PARAMETER, D3D_SVF_FORCE_DWORD = 0x7fffffff } D3D_SHADER_VARIABLE_FLAGS; typedef enum _D3D_SHADER_VARIABLE_TYPE { D3D_SVT_VOID, D3D_SVT_BOOL, D3D_SVT_INT, D3D_SVT_FLOAT, D3D_SVT_STRING, D3D_SVT_TEXTURE, D3D_SVT_TEXTURE1D, D3D_SVT_TEXTURE2D, D3D_SVT_TEXTURE3D, D3D_SVT_TEXTURECUBE, D3D_SVT_SAMPLER, D3D_SVT_SAMPLER1D, D3D_SVT_SAMPLER2D, D3D_SVT_SAMPLER3D, D3D_SVT_SAMPLERCUBE, D3D_SVT_PIXELSHADER, D3D_SVT_VERTEXSHADER, D3D_SVT_PIXELFRAGMENT, D3D_SVT_VERTEXFRAGMENT, D3D_SVT_UINT, D3D_SVT_UINT8, D3D_SVT_GEOMETRYSHADER, D3D_SVT_RASTERIZER, D3D_SVT_DEPTHSTENCIL, D3D_SVT_BLEND, D3D_SVT_BUFFER, D3D_SVT_CBUFFER, D3D_SVT_TBUFFER, D3D_SVT_TEXTURE1DARRAY, D3D_SVT_TEXTURE2DARRAY, D3D_SVT_RENDERTARGETVIEW, D3D_SVT_DEPTHSTENCILVIEW, D3D_SVT_TEXTURE2DMS, D3D_SVT_TEXTURE2DMSARRAY, D3D_SVT_TEXTURECUBEARRAY, D3D_SVT_HULLSHADER, D3D_SVT_DOMAINSHADER, D3D_SVT_INTERFACE_POINTER, D3D_SVT_COMPUTESHADER, D3D_SVT_DOUBLE, D3D_SVT_RWTEXTURE1D, D3D_SVT_RWTEXTURE1DARRAY, D3D_SVT_RWTEXTURE2D, D3D_SVT_RWTEXTURE2DARRAY, D3D_SVT_RWTEXTURE3D, D3D_SVT_RWBUFFER, D3D_SVT_BYTEADDRESS_BUFFER, D3D_SVT_RWBYTEADDRESS_BUFFER, D3D_SVT_STRUCTURED_BUFFER, D3D_SVT_RWSTRUCTURED_BUFFER, D3D_SVT_APPEND_STRUCTURED_BUFFER, D3D_SVT_CONSUME_STRUCTURED_BUFFER, D3D10_SVT_VOID = 0, D3D10_SVT_BOOL, D3D10_SVT_INT, D3D10_SVT_FLOAT, D3D10_SVT_STRING, D3D10_SVT_TEXTURE, D3D10_SVT_TEXTURE1D, D3D10_SVT_TEXTURE2D, D3D10_SVT_TEXTURE3D, D3D10_SVT_TEXTURECUBE, D3D10_SVT_SAMPLER, D3D10_SVT_SAMPLER1D, D3D10_SVT_SAMPLER2D, D3D10_SVT_SAMPLER3D, D3D10_SVT_SAMPLERCUBE, D3D10_SVT_PIXELSHADER, D3D10_SVT_VERTEXSHADER, D3D10_SVT_PIXELFRAGMENT, D3D10_SVT_VERTEXFRAGMENT, D3D10_SVT_UINT, D3D10_SVT_UINT8, D3D10_SVT_GEOMETRYSHADER, D3D10_SVT_RASTERIZER, D3D10_SVT_DEPTHSTENCIL, D3D10_SVT_BLEND, D3D10_SVT_BUFFER, D3D10_SVT_CBUFFER, D3D10_SVT_TBUFFER, D3D10_SVT_TEXTURE1DARRAY, D3D10_SVT_TEXTURE2DARRAY, D3D10_SVT_RENDERTARGETVIEW, D3D10_SVT_DEPTHSTENCILVIEW, D3D10_SVT_TEXTURE2DMS, D3D10_SVT_TEXTURE2DMSARRAY, D3D10_SVT_TEXTURECUBEARRAY, D3D11_SVT_HULLSHADER, D3D11_SVT_DOMAINSHADER, D3D11_SVT_INTERFACE_POINTER, D3D11_SVT_COMPUTESHADER, D3D11_SVT_DOUBLE, D3D11_SVT_RWTEXTURE1D, D3D11_SVT_RWTEXTURE1DARRAY, D3D11_SVT_RWTEXTURE2D, D3D11_SVT_RWTEXTURE2DARRAY, D3D11_SVT_RWTEXTURE3D, D3D11_SVT_RWBUFFER, D3D11_SVT_BYTEADDRESS_BUFFER, D3D11_SVT_RWBYTEADDRESS_BUFFER, D3D11_SVT_STRUCTURED_BUFFER, D3D11_SVT_RWSTRUCTURED_BUFFER, D3D11_SVT_APPEND_STRUCTURED_BUFFER, D3D11_SVT_CONSUME_STRUCTURED_BUFFER, D3D_SVT_FORCE_DWORD = 0x7fffffff, } D3D_SHADER_VARIABLE_TYPE; typedef enum _D3D_SHADER_INPUT_FLAGS { D3D_SIF_USERPACKED = 0x01, D3D_SIF_COMPARISON_SAMPLER = 0x02, D3D_SIF_TEXTURE_COMPONENT_0 = 0x04, D3D_SIF_TEXTURE_COMPONENT_1 = 0x08, D3D_SIF_TEXTURE_COMPONENTS = 0x0C, D3D_SIF_UNUSED = 0x10, D3D10_SIF_USERPACKED = D3D_SIF_USERPACKED, D3D10_SIF_COMPARISON_SAMPLER = D3D_SIF_COMPARISON_SAMPLER, D3D10_SIF_TEXTURE_COMPONENT_0 = D3D_SIF_TEXTURE_COMPONENT_0, D3D10_SIF_TEXTURE_COMPONENT_1 = D3D_SIF_TEXTURE_COMPONENT_1, D3D10_SIF_TEXTURE_COMPONENTS = D3D_SIF_TEXTURE_COMPONENTS, D3D_SIF_FORCE_DWORD = 0x7fffffff } D3D_SHADER_INPUT_FLAGS; typedef enum D3D_PRIMITIVE { D3D_PRIMITIVE_UNDEFINED, D3D_PRIMITIVE_POINT, D3D_PRIMITIVE_LINE, D3D_PRIMITIVE_TRIANGLE, D3D_PRIMITIVE_LINE_ADJ = 6, D3D_PRIMITIVE_TRIANGLE_ADJ, D3D_PRIMITIVE_1_CONTROL_POINT_PATCH, D3D_PRIMITIVE_2_CONTROL_POINT_PATCH, D3D_PRIMITIVE_3_CONTROL_POINT_PATCH, D3D_PRIMITIVE_4_CONTROL_POINT_PATCH, D3D_PRIMITIVE_5_CONTROL_POINT_PATCH, D3D_PRIMITIVE_6_CONTROL_POINT_PATCH, D3D_PRIMITIVE_7_CONTROL_POINT_PATCH, D3D_PRIMITIVE_8_CONTROL_POINT_PATCH, D3D_PRIMITIVE_9_CONTROL_POINT_PATCH, D3D_PRIMITIVE_10_CONTROL_POINT_PATCH, D3D_PRIMITIVE_11_CONTROL_POINT_PATCH, D3D_PRIMITIVE_12_CONTROL_POINT_PATCH, D3D_PRIMITIVE_13_CONTROL_POINT_PATCH, D3D_PRIMITIVE_14_CONTROL_POINT_PATCH, D3D_PRIMITIVE_15_CONTROL_POINT_PATCH, D3D_PRIMITIVE_16_CONTROL_POINT_PATCH, D3D_PRIMITIVE_17_CONTROL_POINT_PATCH, D3D_PRIMITIVE_18_CONTROL_POINT_PATCH, D3D_PRIMITIVE_19_CONTROL_POINT_PATCH, D3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 28, D3D_PRIMITIVE_21_CONTROL_POINT_PATCH, D3D_PRIMITIVE_22_CONTROL_POINT_PATCH, D3D_PRIMITIVE_23_CONTROL_POINT_PATCH, D3D_PRIMITIVE_24_CONTROL_POINT_PATCH, D3D_PRIMITIVE_25_CONTROL_POINT_PATCH, D3D_PRIMITIVE_26_CONTROL_POINT_PATCH, D3D_PRIMITIVE_27_CONTROL_POINT_PATCH, D3D_PRIMITIVE_28_CONTROL_POINT_PATCH, D3D_PRIMITIVE_29_CONTROL_POINT_PATCH, D3D_PRIMITIVE_30_CONTROL_POINT_PATCH, D3D_PRIMITIVE_31_CONTROL_POINT_PATCH, D3D_PRIMITIVE_32_CONTROL_POINT_PATCH, D3D10_PRIMITIVE_UNDEFINED = 0, D3D10_PRIMITIVE_POINT, D3D10_PRIMITIVE_LINE, D3D10_PRIMITIVE_TRIANGLE, D3D10_PRIMITIVE_LINE_ADJ = 6, D3D10_PRIMITIVE_TRIANGLE_ADJ, D3D11_PRIMITIVE_UNDEFINED = 0, D3D11_PRIMITIVE_POINT, D3D11_PRIMITIVE_LINE, D3D11_PRIMITIVE_TRIANGLE, D3D11_PRIMITIVE_LINE_ADJ = 6, D3D11_PRIMITIVE_TRIANGLE_ADJ, D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH = 28, D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH, } D3D_PRIMITIVE; typedef enum D3D_PRIMITIVE_TOPOLOGY { D3D_PRIMITIVE_TOPOLOGY_UNDEFINED, D3D_PRIMITIVE_TOPOLOGY_POINTLIST, D3D_PRIMITIVE_TOPOLOGY_LINELIST, D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10, D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33, D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST, D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST, D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED = 0, D3D10_PRIMITIVE_TOPOLOGY_POINTLIST, D3D10_PRIMITIVE_TOPOLOGY_LINELIST, D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10, D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED = 0, D3D11_PRIMITIVE_TOPOLOGY_POINTLIST, D3D11_PRIMITIVE_TOPOLOGY_LINELIST, D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10, D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33, D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST, } D3D_PRIMITIVE_TOPOLOGY; typedef enum D3D_TESSELLATOR_DOMAIN { D3D_TESSELLATOR_DOMAIN_UNDEFINED, D3D_TESSELLATOR_DOMAIN_ISOLINE, D3D_TESSELLATOR_DOMAIN_TRI, D3D_TESSELLATOR_DOMAIN_QUAD, D3D11_TESSELLATOR_DOMAIN_UNDEFINED = 0, D3D11_TESSELLATOR_DOMAIN_ISOLINE, D3D11_TESSELLATOR_DOMAIN_TRI, D3D11_TESSELLATOR_DOMAIN_QUAD, } D3D_TESSELLATOR_DOMAIN; typedef enum D3D_TESSELLATOR_PARTITIONING { D3D_TESSELLATOR_PARTITIONING_UNDEFINED, D3D_TESSELLATOR_PARTITIONING_INTEGER, D3D_TESSELLATOR_PARTITIONING_POW2, D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD, D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN, D3D11_TESSELLATOR_PARTITIONING_UNDEFINED = 0, D3D11_TESSELLATOR_PARTITIONING_INTEGER, D3D11_TESSELLATOR_PARTITIONING_POW2, D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD, D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN, } D3D_TESSELLATOR_PARTITIONING; typedef enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE { D3D_TESSELLATOR_OUTPUT_UNDEFINED, D3D_TESSELLATOR_OUTPUT_POINT, D3D_TESSELLATOR_OUTPUT_LINE, D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW, D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW, D3D11_TESSELLATOR_OUTPUT_UNDEFINED = 0, D3D11_TESSELLATOR_OUTPUT_POINT, D3D11_TESSELLATOR_OUTPUT_LINE, D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW, D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW, } D3D_TESSELLATOR_OUTPUT_PRIMITIVE; typedef enum D3D_CBUFFER_TYPE { D3D_CT_CBUFFER, D3D_CT_TBUFFER, D3D_CT_INTERFACE_POINTERS, D3D_CT_RESOURCE_BIND_INFO, D3D10_CT_CBUFFER = 0, D3D10_CT_TBUFFER, D3D11_CT_CBUFFER = 0, D3D11_CT_TBUFFER, D3D11_CT_INTERFACE_POINTERS, D3D11_CT_RESOURCE_BIND_INFO, } D3D_CBUFFER_TYPE; typedef enum D3D_SRV_DIMENSION { D3D_SRV_DIMENSION_UNKNOWN, D3D_SRV_DIMENSION_BUFFER, D3D_SRV_DIMENSION_TEXTURE1D, D3D_SRV_DIMENSION_TEXTURE1DARRAY, D3D_SRV_DIMENSION_TEXTURE2D, D3D_SRV_DIMENSION_TEXTURE2DARRAY, D3D_SRV_DIMENSION_TEXTURE2DMS, D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, D3D_SRV_DIMENSION_TEXTURE3D, D3D_SRV_DIMENSION_TEXTURECUBE, D3D_SRV_DIMENSION_TEXTURECUBEARRAY, D3D_SRV_DIMENSION_BUFFEREX, D3D10_SRV_DIMENSION_UNKNOWN = 0, D3D10_SRV_DIMENSION_BUFFER, D3D10_SRV_DIMENSION_TEXTURE1D, D3D10_SRV_DIMENSION_TEXTURE1DARRAY, D3D10_SRV_DIMENSION_TEXTURE2D, D3D10_SRV_DIMENSION_TEXTURE2DARRAY, D3D10_SRV_DIMENSION_TEXTURE2DMS, D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY, D3D10_SRV_DIMENSION_TEXTURE3D, D3D10_SRV_DIMENSION_TEXTURECUBE, D3D10_1_SRV_DIMENSION_UNKNOWN = 0, D3D10_1_SRV_DIMENSION_BUFFER, D3D10_1_SRV_DIMENSION_TEXTURE1D, D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY, D3D10_1_SRV_DIMENSION_TEXTURE2D, D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY, D3D10_1_SRV_DIMENSION_TEXTURE2DMS, D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY, D3D10_1_SRV_DIMENSION_TEXTURE3D, D3D10_1_SRV_DIMENSION_TEXTURECUBE, D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY, D3D11_SRV_DIMENSION_UNKNOWN = 0, D3D11_SRV_DIMENSION_BUFFER, D3D11_SRV_DIMENSION_TEXTURE1D, D3D11_SRV_DIMENSION_TEXTURE1DARRAY, D3D11_SRV_DIMENSION_TEXTURE2D, D3D11_SRV_DIMENSION_TEXTURE2DARRAY, D3D11_SRV_DIMENSION_TEXTURE2DMS, D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY, D3D11_SRV_DIMENSION_TEXTURE3D, D3D11_SRV_DIMENSION_TEXTURECUBE, D3D11_SRV_DIMENSION_TEXTURECUBEARRAY, D3D11_SRV_DIMENSION_BUFFEREX, } D3D_SRV_DIMENSION; typedef enum D3D_REGISTER_COMPONENT_TYPE { D3D_REGISTER_COMPONENT_UNKNOWN, D3D_REGISTER_COMPONENT_UINT32, D3D_REGISTER_COMPONENT_SINT32, D3D_REGISTER_COMPONENT_FLOAT32, D3D10_REGISTER_COMPONENT_UNKNOWN = 0, D3D10_REGISTER_COMPONENT_UINT32, D3D10_REGISTER_COMPONENT_SINT32, D3D10_REGISTER_COMPONENT_FLOAT32, } D3D_REGISTER_COMPONENT_TYPE; typedef enum D3D_RESOURCE_RETURN_TYPE { D3D_RETURN_TYPE_UNORM = 1, D3D_RETURN_TYPE_SNORM, D3D_RETURN_TYPE_SINT, D3D_RETURN_TYPE_UINT, D3D_RETURN_TYPE_FLOAT, D3D_RETURN_TYPE_MIXED, D3D_RETURN_TYPE_DOUBLE, D3D_RETURN_TYPE_CONTINUED, D3D10_RETURN_TYPE_UNORM = 1, D3D10_RETURN_TYPE_SNORM, D3D10_RETURN_TYPE_SINT, D3D10_RETURN_TYPE_UINT, D3D10_RETURN_TYPE_FLOAT, D3D10_RETURN_TYPE_MIXED, D3D11_RETURN_TYPE_UNORM = 1, D3D11_RETURN_TYPE_SNORM, D3D11_RETURN_TYPE_SINT, D3D11_RETURN_TYPE_UINT, D3D11_RETURN_TYPE_FLOAT, D3D11_RETURN_TYPE_MIXED, D3D11_RETURN_TYPE_DOUBLE, D3D11_RETURN_TYPE_CONTINUED, } D3D_RESOURCE_RETURN_TYPE; typedef enum D3D_NAME { D3D_NAME_UNDEFINED, D3D_NAME_POSITION, D3D_NAME_CLIP_DISTANCE, D3D_NAME_CULL_DISTANCE, D3D_NAME_RENDER_TARGET_ARRAY_INDEX, D3D_NAME_VIEWPORT_ARRAY_INDEX, D3D_NAME_VERTEX_ID, D3D_NAME_PRIMITIVE_ID, D3D_NAME_INSTANCE_ID, D3D_NAME_IS_FRONT_FACE, D3D_NAME_SAMPLE_INDEX, D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR, D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR, D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR, D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR, D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR, D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR, D3D_NAME_TARGET = 64, D3D_NAME_DEPTH, D3D_NAME_COVERAGE, D3D_NAME_DEPTH_GREATER_EQUAL, D3D_NAME_DEPTH_LESS_EQUAL, D3D10_NAME_UNDEFINED = 0, D3D10_NAME_POSITION, D3D10_NAME_CLIP_DISTANCE, D3D10_NAME_CULL_DISTANCE, D3D10_NAME_RENDER_TARGET_ARRAY_INDEX, D3D10_NAME_VIEWPORT_ARRAY_INDEX, D3D10_NAME_VERTEX_ID, D3D10_NAME_PRIMITIVE_ID, D3D10_NAME_INSTANCE_ID, D3D10_NAME_IS_FRONT_FACE, D3D10_NAME_SAMPLE_INDEX, D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR, D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR, D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR, D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR, D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR, D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR, D3D10_NAME_TARGET = 64, D3D10_NAME_DEPTH, D3D10_NAME_COVERAGE, D3D11_NAME_DEPTH_GREATER_EQUAL, D3D11_NAME_DEPTH_LESS_EQUAL, } D3D_NAME; typedef enum _D3D_SHADER_INPUT_TYPE { D3D_SIT_CBUFFER, D3D_SIT_TBUFFER, D3D_SIT_TEXTURE, D3D_SIT_SAMPLER, D3D_SIT_UAV_RWTYPED, D3D_SIT_STRUCTURED, D3D_SIT_UAV_RWSTRUCTURED, D3D_SIT_BYTEADDRESS, D3D_SIT_UAV_RWBYTEADDRESS, D3D_SIT_UAV_APPEND_STRUCTURED, D3D_SIT_UAV_CONSUME_STRUCTURED, D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER, D3D10_SIT_CBUFFER = 0, D3D10_SIT_TBUFFER, D3D10_SIT_TEXTURE, D3D10_SIT_SAMPLER, D3D11_SIT_UAV_RWTYPED, D3D11_SIT_STRUCTURED, D3D11_SIT_UAV_RWSTRUCTURED, D3D11_SIT_BYTEADDRESS, D3D11_SIT_UAV_RWBYTEADDRESS, D3D11_SIT_UAV_APPEND_STRUCTURED, D3D11_SIT_UAV_CONSUME_STRUCTURED, D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER, } D3D_SHADER_INPUT_TYPE; typedef enum _D3D_SHADER_CBUFFER_FLAGS { D3D_CBF_USERPACKED = 0x01, D3D10_CBF_USERPACKED = D3D_CBF_USERPACKED, D3D_CBF_FORCE_DWORD = 0x7fffffff } D3D_SHADER_CBUFFER_FLAGS; cpp_quote("DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00);") ================================================ FILE: wine/windows/d3dcompiler.h ================================================ /* * Copyright 2010 Matteo Bruni for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DCOMPILER_H__ #define __D3DCOMPILER_H__ #include "d3d11shader.h" #ifdef __cplusplus extern "C" { #endif #if defined(__GNUC__) #define D3DCOMPILER_DLL_W (const WCHAR[]){'d','3','d','c','o','m','p','i','l','e','r','_','4','3','.','d','l','l',0} #elif defined(_MSC_VER) #define D3DCOMPILER_DLL_W L"d3dcompiler_43.dll" #else static const WCHAR D3DCOMPILER_DLL_W[] = {'d','3','d','c','o','m','p','i','l','e','r','_','4','3','.','d','l','l',0}; #endif #define D3DCOMPILER_DLL_A "d3dcompiler_43.dll" #define D3DCOMPILER_DLL WINELIB_NAME_AW(D3DCOMPILER_DLL_) #define D3DCOMPILE_DEBUG 0x00000001 #define D3DCOMPILE_SKIP_VALIDATION 0x00000002 #define D3DCOMPILE_SKIP_OPTIMIZATION 0x00000004 #define D3DCOMPILE_PACK_MATRIX_ROW_MAJOR 0x00000008 #define D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR 0x00000010 #define D3DCOMPILE_PARTIAL_PRECISION 0x00000020 #define D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT 0x00000040 #define D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT 0x00000080 #define D3DCOMPILE_NO_PRESHADER 0x00000100 #define D3DCOMPILE_AVOID_FLOW_CONTROL 0x00000200 #define D3DCOMPILE_PREFER_FLOW_CONTROL 0x00000400 #define D3DCOMPILE_ENABLE_STRICTNESS 0x00000800 #define D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY 0x00001000 #define D3DCOMPILE_IEEE_STRICTNESS 0x00002000 #define D3DCOMPILE_OPTIMIZATION_LEVEL0 0x00004000 #define D3DCOMPILE_OPTIMIZATION_LEVEL1 0x00000000 #define D3DCOMPILE_OPTIMIZATION_LEVEL2 0x0000c000 #define D3DCOMPILE_OPTIMIZATION_LEVEL3 0x00008000 #define D3DCOMPILE_RESERVED16 0x00010000 #define D3DCOMPILE_RESERVED17 0x00020000 #define D3DCOMPILE_WARNINGS_ARE_ERRORS 0x00040000 #define D3DCOMPILE_RESOURCES_MAY_ALIAS 0x00080000 #define D3D_DISASM_ENABLE_COLOR_CODE 0x00000001 #define D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS 0x00000002 #define D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING 0x00000004 #define D3D_DISASM_ENABLE_INSTRUCTION_CYCLE 0x00000008 #define D3D_DISASM_DISABLE_DEBUG_INFO 0x00000010 HRESULT WINAPI D3DCompile(const void *data, SIZE_T data_size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint, const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages); typedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint, const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages); typedef enum D3DCOMPILER_STRIP_FLAGS { D3DCOMPILER_STRIP_REFLECTION_DATA = 1, D3DCOMPILER_STRIP_DEBUG_INFO = 2, D3DCOMPILER_STRIP_TEST_BLOBS = 4, D3DCOMPILER_STRIP_FORCE_DWORD = 0x7fffffff } D3DCOMPILER_STRIP_FLAGS; HRESULT WINAPI D3DStripShader(const void *data, SIZE_T data_size, UINT flags, ID3DBlob **blob); typedef enum D3D_BLOB_PART { D3D_BLOB_INPUT_SIGNATURE_BLOB, D3D_BLOB_OUTPUT_SIGNATURE_BLOB, D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB, D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB, D3D_BLOB_ALL_SIGNATURE_BLOB, D3D_BLOB_DEBUG_INFO, D3D_BLOB_LEGACY_SHADER, D3D_BLOB_XNA_PREPASS_SHADER, D3D_BLOB_XNA_SHADER, D3D_BLOB_TEST_ALTERNATE_SHADER = 0x8000, D3D_BLOB_TEST_COMPILE_DETAILS, D3D_BLOB_TEST_COMPILE_PERF } D3D_BLOB_PART; HRESULT WINAPI D3DDisassemble(const void *data, SIZE_T data_size, UINT flags, const char *comments, ID3DBlob **disassembly); typedef HRESULT (WINAPI *pD3DDisassemble)(const void *data, SIZE_T data_size, UINT flags, const char *comments, ID3DBlob **disassembly); HRESULT WINAPI D3DGetBlobPart(const void *data, SIZE_T data_size, D3D_BLOB_PART part, UINT flags, ID3DBlob **blob); HRESULT WINAPI D3DGetInputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob); HRESULT WINAPI D3DGetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob); HRESULT WINAPI D3DGetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob); HRESULT WINAPI D3DGetDebugInfo(const void *data, SIZE_T data_size, ID3DBlob **blob); HRESULT WINAPI D3DReadFileToBlob(const WCHAR *filename, ID3DBlob **contents); HRESULT WINAPI D3DWriteBlobToFile(ID3DBlob *blob, const WCHAR *filename, BOOL overwrite); HRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void **reflector); HRESULT WINAPI D3DCreateBlob(SIZE_T data_size, ID3DBlob **blob); HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, ID3DBlob **shader, ID3DBlob **error_messages); typedef HRESULT (WINAPI *pD3DPreprocess)(const void *data, SIZE_T size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, ID3DBlob **shader, ID3DBlob **error_messages); HRESULT WINAPI D3DLoadModule(const void *data, SIZE_T size, ID3D11Module **module); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/d3dhal.h ================================================ /* * Direct3D driver interface * (DirectX 7 version) * * Copyright (C) 2001 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3DHAL_H #define __WINE_D3DHAL_H #ifdef __cplusplus extern "C" { #endif #include /***************************************************************************** * device info structures */ typedef struct _D3DDeviceDesc_V1 { DWORD dwSize; DWORD dwFlags; D3DCOLORMODEL dcmColorModel; DWORD dwDevCaps; D3DTRANSFORMCAPS dtcTransformCaps; BOOL bClipping; D3DLIGHTINGCAPS dlcLightingCaps; D3DPRIMCAPS dpcLineCaps; D3DPRIMCAPS dpcTriCaps; DWORD dwDeviceRenderBitDepth; DWORD dwDeviceZBufferBitDepth; DWORD dwMaxBufferSize; DWORD dwMaxVertexCount; } D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1; typedef struct _D3DDeviceDesc_V2 { DWORD dwSize; DWORD dwFlags; D3DCOLORMODEL dcmColorModel; DWORD dwDevCaps; D3DTRANSFORMCAPS dtcTransformCaps; BOOL bClipping; D3DLIGHTINGCAPS dlcLightingCaps; D3DPRIMCAPS dpcLineCaps; D3DPRIMCAPS dpcTriCaps; DWORD dwDeviceRenderBitDepth; DWORD dwDeviceZBufferBitDepth; DWORD dwMaxBufferSize; DWORD dwMaxVertexCount; /* DirectX 5 */ DWORD dwMinTextureWidth; DWORD dwMinTextureHeight; DWORD dwMaxTextureWidth; DWORD dwMaxTextureHeight; DWORD dwMinStippleWidth; DWORD dwMaxStippleWidth; DWORD dwMinStippleHeight; DWORD dwMaxStippleHeight; } D3DDEVICEDESC_V2, *LPD3DDEVICEDESC_V2; typedef struct _D3DDeviceDesc_V3 { DWORD dwSize; DWORD dwFlags; D3DCOLORMODEL dcmColorModel; DWORD dwDevCaps; D3DTRANSFORMCAPS dtcTransformCaps; BOOL bClipping; D3DLIGHTINGCAPS dlcLightingCaps; D3DPRIMCAPS dpcLineCaps; D3DPRIMCAPS dpcTriCaps; DWORD dwDeviceRenderBitDepth; DWORD dwDeviceZBufferBitDepth; DWORD dwMaxBufferSize; DWORD dwMaxVertexCount; /* DirectX 5 */ DWORD dwMinTextureWidth; DWORD dwMinTextureHeight; DWORD dwMaxTextureWidth; DWORD dwMaxTextureHeight; DWORD dwMinStippleWidth; DWORD dwMaxStippleWidth; DWORD dwMinStippleHeight; DWORD dwMaxStippleHeight; /* DirectX 6 */ DWORD dwMaxTextureRepeat; DWORD dwMaxTextureAspectRatio; DWORD dwMaxAnisotropy; D3DVALUE dvGuardBandLeft; D3DVALUE dvGuardBandTop; D3DVALUE dvGuardBandRight; D3DVALUE dvGuardBandBottom; D3DVALUE dvExtentsAdjust; DWORD dwStencilCaps; DWORD dwFVFCaps; DWORD dwTextureOpCaps; WORD wMaxTextureBlendStages; WORD wMaxSimultaneousTextures; } D3DDEVICEDESC_V3, *LPD3DDEVICEDESC_V3; typedef struct _D3DHAL_GLOBALDRIVERDATA { DWORD dwSize; D3DDEVICEDESC_V1 hwCaps; DWORD dwNumVertices; DWORD dwNumClipVertices; DWORD dwNumTextureFormats; LPDDSURFACEDESC lpTextureFormats; } D3DHAL_GLOBALDRIVERDATA,*LPD3DHAL_GLOBALDRIVERDATA; typedef struct _D3DHAL_D3DEXTENDEDCAPS { DWORD dwSize; /* DirectX 5 */ DWORD dwMinTextureWidth, dwMaxTextureWidth; DWORD dwMinTextureHeight, dwMaxTextureHeight; DWORD dwMinStippleWidth, dwMaxStippleWidth; DWORD dwMinStippleHeight, dwMaxStippleHeight; /* DirectX 6 */ DWORD dwMaxTextureRepeat; DWORD dwMaxTextureAspectRatio; DWORD dwMaxAnisotropy; D3DVALUE dvGuardBandLeft; D3DVALUE dvGuardBandTop; D3DVALUE dvGuardBandRight; D3DVALUE dvGuardBandBottom; D3DVALUE dvExtentsAdjust; DWORD dwStencilCaps; DWORD dwFVFCaps; DWORD dwTextureOpCaps; WORD wMaxTextureBlendStages; WORD wMaxSimultaneousTextures; /* DirectX 7 */ DWORD dwMaxActiveLights; D3DVALUE dvMaxVertexW; WORD wMaxUserClipPlanes; WORD wMaxVertexBlendMatrices; DWORD dwVertexProcessingCaps; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwReserved4; } D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS; /***************************************************************************** * d3d->driver callbacks */ typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA; typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA; typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA; typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA; typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA; typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA; typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA; typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA; typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA; typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA; typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA; typedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB) (LPD3DHAL_CONTEXTCREATEDATA); typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB) (LPD3DHAL_CONTEXTDESTROYDATA); typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA); typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA); typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA); typedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB) (LPD3DHAL_RENDERPRIMITIVEDATA); typedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB) (LPD3DHAL_TEXTURECREATEDATA); typedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB) (LPD3DHAL_TEXTUREDESTROYDATA); typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA); typedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB) (LPD3DHAL_TEXTUREGETSURFDATA); typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA); typedef struct _D3DHAL_CALLBACKS { DWORD dwSize; LPD3DHAL_CONTEXTCREATECB ContextCreate; LPD3DHAL_CONTEXTDESTROYCB ContextDestroy; LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll; LPD3DHAL_SCENECAPTURECB SceneCapture; LPVOID lpReserved10; LPVOID lpReserved11; LPD3DHAL_RENDERSTATECB RenderState; LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive; DWORD dwReserved; LPD3DHAL_TEXTURECREATECB TextureCreate; LPD3DHAL_TEXTUREDESTROYCB TextureDestroy; LPD3DHAL_TEXTURESWAPCB TextureSwap; LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf; /* now why did MS create CALLBACKS2 and CALLBACKS3 structures if * all these reserved fields were available? we may never know */ LPVOID lpReserved12; LPVOID lpReserved13; LPVOID lpReserved14; LPVOID lpReserved15; LPVOID lpReserved16; LPVOID lpReserved17; LPVOID lpReserved18; LPVOID lpReserved19; LPVOID lpReserved20; LPVOID lpReserved21; LPD3DHAL_GETSTATECB GetState; DWORD dwReserved0; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwReserved4; DWORD dwReserved5; DWORD dwReserved6; DWORD dwReserved7; DWORD dwReserved8; DWORD dwReserved9; } D3DHAL_CALLBACKS,*LPD3DHAL_CALLBACKS; typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA; typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA; typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA; typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA; typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA; typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA); typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA); typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA); typedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA); typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA); typedef struct _D3DHAL_CALLBACKS2 { DWORD dwSize; DWORD dwFlags; LPD3DHAL_SETRENDERTARGETCB SetRenderTarget; LPD3DHAL_CLEARCB Clear; LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive; LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive; LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives; } D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2; typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA; typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA; typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA; typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA); typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA); typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA); typedef struct _D3DHAL_CALLBACKS3 { DWORD dwSize; DWORD dwFlags; LPD3DHAL_CLEAR2CB Clear2; LPVOID lpvReserved; LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState; LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2; } D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3; /***************************************************************************** * parameter structures */ typedef struct _D3DHAL_CONTEXTCREATEDATA { union { LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */ LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */ } DUMMYUNIONNAME1; union { LPDIRECTDRAWSURFACE lpDDS; LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */ } DUMMYUNIONNAME2; union { LPDIRECTDRAWSURFACE lpDDSZ; LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */ } DUMMYUNIONNAME3; union { DWORD dwPID; ULONG_PTR dwrstates; } DUMMYUNIONNAME4; ULONG_PTR dwhContext; HRESULT ddrval; } D3DHAL_CONTEXTCREATEDATA; typedef struct _D3DHAL_CONTEXTDESTROYDATA { ULONG_PTR dwhContext; HRESULT ddrval; } D3DHAL_CONTEXTDESTROYDATA; typedef struct _D3DHAL_CONTEXTDESTROYALLDATA { DWORD dwPID; HRESULT ddrval; } D3DHAL_CONTEXTDESTROYALLDATA; typedef struct _D3DHAL_SCENECAPTUREDATA { ULONG_PTR dwhContext; DWORD dwFlag; HRESULT ddrval; } D3DHAL_SCENECAPTUREDATA; #define D3DHAL_SCENE_CAPTURE_START 0x00000000 #define D3DHAL_SCENE_CAPTURE_END 0x00000001 typedef struct _D3DHAL_SETRENDERTARGETDATA { ULONG_PTR dwhContext; union { LPDIRECTDRAWSURFACE lpDDS; LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; } DUMMYUNIONNAME1; union { LPDIRECTDRAWSURFACE lpDDSZ; LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; } DUMMYUNIONNAME2; HRESULT ddrval; } D3DHAL_SETRENDERTARGETDATA; typedef struct _D3DHAL_DRAWPRIMITIVES2DATA { ULONG_PTR dwhContext; DWORD dwFlags; DWORD dwVertexType; LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands; DWORD dwCommandOffset; DWORD dwCommandLength; union { LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex; LPVOID lpVertices; } DUMMYUNIONNAME1; DWORD dwVertexOffset; DWORD dwVertexLength; DWORD dwReqVertexBufSize; DWORD dwReqCommandBufSize; LPDWORD lpdwRStates; union { DWORD dwVertexSize; HRESULT ddrval; } DUMMYUNIONNAME2; DWORD dwErrorOffset; } D3DHAL_DRAWPRIMITIVES2DATA; #define D3DHALDP2_USERMEMVERTICES 0x00000001 #define D3DHALDP2_EXECUTEBUFFER 0x00000002 #define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004 #define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008 #define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010 #define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020 #define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040 #define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080 /***************************************************************************** * DrawPrimitives2 command structures */ typedef struct _D3DHAL_DP2COMMAND { BYTE bCommand; BYTE bReserved; union { WORD wPrimitiveCount; WORD wStateCount; } DUMMYUNIONNAME; } D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND; typedef enum _D3DHAL_DP2OPERATION { D3DDP2OP_POINTS = 1, D3DDP2OP_INDEXEDLINELIST = 2, D3DDP2OP_INDEXEDTRIANGLELIST = 3, D3DDP2OP_RENDERSTATE = 8, D3DDP2OP_LINELIST = 15, D3DDP2OP_LINESTRIP = 16, D3DDP2OP_INDEXEDLINESTRIP = 17, D3DDP2OP_TRIANGLELIST = 18, D3DDP2OP_TRIANGLESTRIP = 19, D3DDP2OP_INDEXEDTRIANGLESTRIP = 20, D3DDP2OP_TRIANGLEFAN = 21, D3DDP2OP_INDEXEDTRIANGLEFAN = 22, D3DDP2OP_TRIANGLEFAN_IMM = 23, D3DDP2OP_LINELIST_IMM = 24, D3DDP2OP_TEXTURESTAGESTATE = 25, D3DDP2OP_INDEXEDTRIANGLELIST2 = 26, D3DDP2OP_INDEXEDLINELIST2 = 27, D3DDP2OP_VIEWPORTINFO = 28, D3DDP2OP_WINFO = 29, /* pre-DirectX 7 interfaces */ D3DDP2OP_SETPALETTE = 30, D3DDP2OP_UPDATEPALETTE = 31, /* DirectX 7 interfaces */ D3DDP2OP_ZRANGE = 32, D3DDP2OP_SETMATERIAL = 33, D3DDP2OP_SETLIGHT = 34, D3DDP2OP_CREATELIGHT = 35, D3DDP2OP_SETTRANSFORM = 36, D3DDP2OP_TEXBLT = 38, D3DDP2OP_STATESET = 39, D3DDP2OP_SETPRIORITY = 40, /* all interfaces */ D3DDP2OP_SETRENDERTARGET = 41, D3DDP2OP_CLEAR = 42, /* DirectX 7 interfaces */ D3DDP2OP_SETTEXLOD = 43, D3DPP2OP_SETCLIPPLANE = 44 } D3DHAL_DP2OPERATION; /* point primitives */ typedef struct _D3DHAL_POINTS { WORD wCount; WORD wVStart; } D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS; /* line primitives */ typedef struct _D3DHAL_DP2STARTVERTEX { WORD wVStart; } D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX; typedef struct _D3DHAL_DP2LINELIST { WORD wVStart; } D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST; typedef struct _D3DHAL_DP2INDEXEDLINELIST { WORD wV1; WORD wV2; } D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST; typedef struct _D3DHAL_DP2LINESTRIP { WORD wVStart; } D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP; typedef struct _D3DHAL_DP2INDEXEDLINESTRIP { WORD wV[2]; } D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP; /* triangle primitives */ typedef struct _D3DHAL_DP2TRIANGLELIST { WORD wVStart; } D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST; typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST { WORD wV1; WORD wV2; WORD wV3; WORD wFlags; } D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST; typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 { WORD wV1; WORD wV2; WORD wV3; } D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2; typedef struct _D3DHAL_DP2TRIANGLESTRIP { WORD wVStart; } D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP; typedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP { WORD wV[3]; } D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP; typedef struct _D3DHAL_DP2TRIANGLEFAN { WORD wVStart; } D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN; typedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN { WORD wV[3]; } D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN; typedef struct _D3DHAL_DP2TRIANGLEFAN_IMM { DWORD dwEdgeFlags; } D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM; /* render states */ typedef struct _D3DHAL_DP2RENDERSTATE { D3DRENDERSTATETYPE RenderState; union { D3DVALUE dvState; DWORD dwState; } DUMMYUNIONNAME; } D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE; typedef struct _D3DHAL_DP2TEXTURESTAGESTATE { WORD wStage; WORD TSState; DWORD dwValue; } D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE; #define D3DTSS_TEXTUREMAP 0 typedef struct _D3DHAL_DP2VIEWPORTINFO { DWORD dwX; DWORD dwY; DWORD dwWidth; DWORD dwHeight; } D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO; typedef struct _D3DHAL_DP2WINFO { D3DVALUE dwWNear; D3DVALUE dwWFar; } D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO; typedef struct _D3DHAL_DP2SETPALETTE { DWORD dwPaletteHandle; DWORD dwPaletteFlags; DWORD dwSurfaceHandle; } D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE; typedef struct _D3DHAL_DP2UPDATEPALETTE { DWORD dwPaletteHandle; WORD wStartIndex; WORD wNumEntries; } D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE; typedef struct _D3DHAL_DP2ZRANGE { D3DVALUE dvMinZ; D3DVALUE dvMaxZ; } D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE; typedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL; typedef struct _D3DHAL_DP2SETLIGHT { DWORD dwIndex; DWORD dwDataType; } D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT; #define D3DHAL_SETLIGHT_ENABLE 0 #define D3DHAL_SETLIGHT_DISABLE 1 #define D3DHAL_SETLIGHT_DATA 2 typedef struct _D3DHAL_DP2CREATELIGHT { DWORD dwIndex; } D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT; typedef struct _D3DHAL_DP2SETTRANSFORM { D3DTRANSFORMSTATETYPE xfrmType; D3DMATRIX matrix; } D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM; typedef struct _D3DHAL_DP2TEXBLT { DWORD dwDDDestSurface; DWORD dwDDSrcSurface; POINT pDest; RECTL rSrc; DWORD dwFlags; } D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT; typedef struct _D3DHAL_DP2STATESET { DWORD dwOperation; DWORD dwParam; D3DSTATEBLOCKTYPE sbType; } D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET; #define D3DHAL_STATESETBEGIN 0 #define D3DHAL_STATESETEND 1 #define D3DHAL_STATESETDELETE 2 #define D3DHAL_STATESETEXECUTE 3 #define D3DHAL_STATESETCAPTURE 4 typedef struct _D3DHAL_DP2SETPRIORITY { DWORD dwDDSurface; DWORD dwPriority; } D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY; typedef struct _D3DHAL_DP2SETRENDERTARGET { DWORD hRenderTarget; DWORD hZBuffer; } D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET; typedef struct _D3DHAL_DP2CLEAR { DWORD dwFlags; DWORD dwFillColor; D3DVALUE dvFillDepth; DWORD dwFillStencil; RECT Rects[1]; } D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR; typedef struct _D3DHAL_DP2SETTEXLOD { DWORD dwDDSurface; DWORD dwLOD; } D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __WINE_D3DHAL_H */ ================================================ FILE: wine/windows/d3drm.h ================================================ /* * Copyright (C) 2005 Peter Berg Larsen * Copyright (C) 2010 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DRM_H__ #define __D3DRM_H__ #include typedef struct IDirect3DRM *LPDIRECT3DRM, **LPLPDIRECT3DRM; #include #ifdef __cplusplus extern "C" { #endif /* Direct3DRM Object CLSID */ DEFINE_GUID(CLSID_CDirect3DRM, 0x4516ec41, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); /* Direct3DRM Interface GUIDs */ DEFINE_GUID(IID_IDirect3DRM, 0x2bc49361, 0x8327, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRM2, 0x4516ecc8, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRM3, 0x4516ec83, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); typedef struct IDirect3DRM2 *LPDIRECT3DRM2, **LPLPDIRECT3DRM2; typedef struct IDirect3DRM3 *LPDIRECT3DRM3, **LPLPDIRECT3DRM3; HRESULT WINAPI Direct3DRMCreate(struct IDirect3DRM **d3drm); /***************************************************************************** * IDirect3DRMObject interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetClassName #endif #define INTERFACE IDirect3DRM DECLARE_INTERFACE_(IDirect3DRM,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRM methods ***/ STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame *parent, IDirect3DRMFrame **frame) PURE; STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE; STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder **mesh_builder) PURE; STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE; STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation **animation) PURE; STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet **set) PURE; STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture **texture) PURE; STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE; STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b, IDirect3DRMLight **light) PURE; STDMETHOD(CreateMaterial)(THIS_ D3DVALUE power, IDirect3DRMMaterial **material) PURE; STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice **device) PURE; STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface, IDirect3DRMDevice **device) PURE; STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device, IDirect3DRMDevice **device) PURE; STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice **device) PURE; STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface, IDirect3DRMTexture **texture) PURE; STDMETHOD(CreateShadow)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMVisual **shadow) PURE; STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice *device, IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) PURE; STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE; STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE; STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture **texture) PURE; STDMETHOD(LoadTextureFromResource)(THIS_ HRSRC resource, IDirect3DRMTexture **texture) PURE; STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE; STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE; STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE; STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE; STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE; STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE; STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE; STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame) PURE; STDMETHOD(Tick)(THIS_ D3DVALUE) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRM_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRM_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRM_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRM methods ***/ #define IDirect3DRM_CreateObject(p,a,b,c,d) (p)->lpVtbl->CreateObject(p,a,b,c,d) #define IDirect3DRM_CreateFrame(p,a,b) (p)->lpVtbl->CreateFrame(p,a,b) #define IDirect3DRM_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a) #define IDirect3DRM_CreateMeshBuilder(p,a) (p)->lpVtbl->CreateMeshBuilder(p,a) #define IDirect3DRM_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a) #define IDirect3DRM_CreateAnimation(p,a) (p)->lpVtbl->CreateAnimation(p,a) #define IDirect3DRM_CreateAnimationSet(p,a) (p)->lpVtbl->CreateAnimationSet(p,a) #define IDirect3DRM_CreateTexture(p,a,b) (p)->lpVtbl->CreateTexture(p,a,b) #define IDirect3DRM_CreateLight(p,a,b,c) (p)->lpVtbl->CreateLight(p,a,b,c) #define IDirect3DRM_CreateLightRGB(p,a,b,c,d,e) (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e) #define IDirect3DRM_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3DRM_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirect3DRM_CreateDeviceFromSurface(p,a,b,c,d) (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d) #define IDirect3DRM_CreateDeviceFromD3D(p,a,b,c) (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c) #define IDirect3DRM_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e) #define IDirect3DRM_CreateTextureFromSurface(p,a,b) (p)->lpVtbl->CreateTextureFromSurface(p,a,b) #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) #define IDirect3DRM_CreateViewport(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g) #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) #define IDirect3DRM_CreateUserVisual(p,a,b,c) (p)->lpVtbl->CreateUserVisual(p,a,b,c) #define IDirect3DRM_LoadTexture(p,a,b) (p)->lpVtbl->LoadTexture(p,a,b) #define IDirect3DRM_LoadTextureFromResource(p,a,b) (p)->lpVtbl->LoadTextureFromResource(p,a,b) #define IDirect3DRM_SetSearchPath(p,a) (p)->lpVtbl->SetSearchPath(p,a) #define IDirect3DRM_AddSearchPath(p,a) (p)->lpVtbl->AddSearchPath(p,a) #define IDirect3DRM_GetSearchPath(p,a,b) (p)->lpVtbl->GetSearchPath(p,a,b) #define IDirect3DRM_SetDefaultTextureColors(p,a) (p)->lpVtbl->SetDefaultTextureColors(p,a) #define IDirect3DRM_SetDefaultTextureShades(p,a) (p)->lpVtbl->SetDefaultTextureShades(p,a) #define IDirect3DRM_GetDevices(p,a) (p)->lpVtbl->GetDevices(p,a) #define IDirect3DRM_GetNamedObject(p,a,b) (p)->lpVtbl->GetNamedObject(p,a,b) #define IDirect3DRM_EnumerateObjects(p,a,b) (p)->lpVtbl->EnumerateObjects(p,a,b) #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) #define IDirect3DRM_Tick(p,a) (p)->lpVtbl->Tick(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRM_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRM_AddRef(p) (p)->AddRef() #define IDirect3DRM_Release(p) (p)->Release() /*** IDirect3DRM methods ***/ #define IDirect3DRM_CreateObject(p,a,b,c,d) (p)->CreateObject(a,b,c,d) #define IDirect3DRM_CreateFrame(p,a,b) (p)->CreateFrame(a,b) #define IDirect3DRM_CreateMesh(p,a) (p)->CreateMesh(a) #define IDirect3DRM_CreateMeshBuilder(p,a) (p)->CreateMeshBuilder(a) #define IDirect3DRM_CreateFace(p,a) (p)->CreateFace(a) #define IDirect3DRM_CreateAnimation(p,a) (p)->CreateAnimation(a) #define IDirect3DRM_CreateAnimationSet(p,a) (p)->CreateAnimationSet(a) #define IDirect3DRM_CreateTexture(p,a,b) (p)->CreateTexture(a,b) #define IDirect3DRM_CreateLight(p,a,b,c) (p)->CreateLight(a,b,c) #define IDirect3DRM_CreateLightRGB(p,a,b,c,d,e) (p)->CreateLightRGB(a,b,c,d,e) #define IDirect3DRM_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3DRM_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirect3DRM_CreateDeviceFromSurface(p,a,b,c,d) (p)->CreateDeviceFromSurface(a,b,c,d) #define IDirect3DRM_CreateDeviceFromD3D(p,a,b,c) (p)->CreateDeviceFromD3D(a,b,c) #define IDirect3DRM_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->CreateDeviceFromClipper(a,b,c,d,e) #define IDirect3DRM_CreateTextureFromSurface(p,a,b) (p)->CreateTextureFromSurface(a,b) #define IDirect3DRM_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->CreateShadow(a,b,c,d,e,f,g,h,i) #define IDirect3DRM_CreateViewport(p,a,b,c,d,e,f,g) (p)->CreateViewport(a,b,c,d,e,f,g) #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) #define IDirect3DRM_CreateUserVisual(p,a,b,c) (p)->CreateUserVisual(a,b,c) #define IDirect3DRM_LoadTexture(p,a,b) (p)->LoadTexture(a,b) #define IDirect3DRM_LoadTextureFromResource(p,a,b) (p)->LoadTextureFromResource(a,b) #define IDirect3DRM_SetSearchPath(p,a) (p)->SetSearchPath(a) #define IDirect3DRM_AddSearchPath(p,a) (p)->AddSearchPath(a) #define IDirect3DRM_GetSearchPath(p,a,b) (p)->GetSearchPath(a,b) #define IDirect3DRM_SetDefaultTextureColors(p,a) (p)->SetDefaultTextureColors(a) #define IDirect3DRM_SetDefaultTextureShades(p,a) (p)->SetDefaultTextureShades(a) #define IDirect3DRM_GetDevices(p,a) (p)->GetDevices(a) #define IDirect3DRM_GetNamedObject(p,a,b) (p)->GetNamedObject(a,b) #define IDirect3DRM_EnumerateObjects(p,a,b) (p)->EnumerateObjects(a,b) #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) #define IDirect3DRM_Tick(p,a) (p)->Tick(a) #endif /***************************************************************************** * IDirect3DRM2 interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetClassName #endif #define INTERFACE IDirect3DRM2 DECLARE_INTERFACE_(IDirect3DRM2,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRM2 methods ***/ STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame *parent, IDirect3DRMFrame2 **frame) PURE; STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE; STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder2 **mesh_builder) PURE; STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE; STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation **animation) PURE; STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet **set) PURE; STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture2 **texture) PURE; STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE; STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b, IDirect3DRMLight **light) PURE; STDMETHOD(CreateMaterial)(THIS_ D3DVALUE power, IDirect3DRMMaterial **material) PURE; STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice2 **device) PURE; STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface, IDirect3DRMDevice2 **device) PURE; STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice2 **device) PURE; STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice2 **device) PURE; STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface, IDirect3DRMTexture2 **texture) PURE; STDMETHOD(CreateShadow)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMVisual **shadow) PURE; STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice *device, IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) PURE; STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE; STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE; STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture2 **texture) PURE; STDMETHOD(LoadTextureFromResource)(THIS_ HMODULE module, const char *resource_name, const char *resource_type, IDirect3DRMTexture2 **texture) PURE; STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE; STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE; STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE; STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE; STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE; STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE; STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE; STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame) PURE; STDMETHOD(Tick)(THIS_ D3DVALUE) PURE; STDMETHOD(CreateProgressiveMesh)(THIS_ IDirect3DRMProgressiveMesh **mesh) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRM2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRM2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRM2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRM2 methods ***/ #define IDirect3DRM2_CreateObject(p,a,b,c,d) (p)->lpVtbl->CreateObject(p,a,b,c,d) #define IDirect3DRM2_CreateFrame(p,a,b) (p)->lpVtbl->CreateFrame(p,a,b) #define IDirect3DRM2_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a) #define IDirect3DRM2_CreateMeshBuilder(p,a) (p)->lpVtbl->CreateMeshBuilder(p,a) #define IDirect3DRM2_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a) #define IDirect3DRM2_CreateAnimation(p,a) (p)->lpVtbl->CreateAnimation(p,a) #define IDirect3DRM2_CreateAnimationSet(p,a) (p)->lpVtbl->CreateAnimationSet(p,a) #define IDirect3DRM2_CreateTexture(p,a,b) (p)->lpVtbl->CreateTexture(p,a,b) #define IDirect3DRM2_CreateLight(p,a,b,c) (p)->lpVtbl->CreateLight(p,a,b,c) #define IDirect3DRM2_CreateLightRGB(p,a,b,c,d,e) (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e) #define IDirect3DRM2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3DRM2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirect3DRM2_CreateDeviceFromSurface(p,a,b,c,d) (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d) #define IDirect3DRM2_CreateDeviceFromD3D(p,a,b,c) (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c) #define IDirect3DRM2_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e) #define IDirect3DRM2_CreateTextureFromSurface(p,a,b) (p)->lpVtbl->CreateTextureFromSurface(p,a,b) #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) #define IDirect3DRM2_CreateViewport(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g) #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) #define IDirect3DRM2_CreateUserVisual(p,a,b,c) (p)->lpVtbl->CreateUserVisual(p,a,b,c) #define IDirect3DRM2_LoadTexture(p,a,b) (p)->lpVtbl->LoadTexture(p,a,b) #define IDirect3DRM2_LoadTextureFromResource(p,a,b,c,d) (p)->lpVtbl->LoadTextureFromResource(p,a,b,c,d) #define IDirect3DRM2_SetSearchPath(p,a) (p)->lpVtbl->SetSearchPath(p,a) #define IDirect3DRM2_AddSearchPath(p,a) (p)->lpVtbl->AddSearchPath(p,a) #define IDirect3DRM2_GetSearchPath(p,a,b) (p)->lpVtbl->GetSearchPath(p,a,b) #define IDirect3DRM2_SetDefaultTextureColors(p,a) (p)->lpVtbl->SetDefaultTextureColors(p,a) #define IDirect3DRM2_SetDefaultTextureShades(p,a) (p)->lpVtbl->SetDefaultTextureShades(p,a) #define IDirect3DRM2_GetDevices(p,a) (p)->lpVtbl->GetDevices(p,a) #define IDirect3DRM2_GetNamedObject(p,a,b) (p)->lpVtbl->GetNamedObject(p,a,b) #define IDirect3DRM2_EnumerateObjects(p,a,b) (p)->lpVtbl->EnumerateObjects(p,a,b) #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) #define IDirect3DRM2_Tick(p,a) (p)->lpVtbl->Tick(p,a) #define IDirect3DRM2_CreateProgressiveMesh(p,a) (p)->lpVtbl->CreateProgressiveMesh(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRM2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRM2_AddRef(p) (p)->AddRef() #define IDirect3DRM2_Release(p) (p)->Release() /*** IDirect3DRM2 methods ***/ #define IDirect3DRM2_CreateObject(p,a,b,c,d) (p)->CreateObject(a,b,c,d) #define IDirect3DRM2_CreateFrame(p,a,b) (p)->CreateFrame(a,b) #define IDirect3DRM2_CreateMesh(p,a) (p)->CreateMesh(a) #define IDirect3DRM2_CreateMeshBuilder(p,a) (p)->CreateMeshBuilder(a) #define IDirect3DRM2_CreateFace(p,a) (p)->CreateFace(a) #define IDirect3DRM2_CreateAnimation(p,a) (p)->CreateAnimation(a) #define IDirect3DRM2_CreateAnimationSet(p,a) (p)->CreateAnimationSet(a) #define IDirect3DRM2_CreateTexture(p,a,b) (p)->CreateTexture(a,b) #define IDirect3DRM2_CreateLight(p,a,b,c) (p)->CreateLight(a,b,c) #define IDirect3DRM2_CreateLightRGB(p,a,b,c,d,e) (p)->CreateLightRGB(a,b,c,d,e) #define IDirect3DRM2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3DRM2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirect3DRM2_CreateDeviceFromSurface(p,a,b,c,d) (p)->CreateDeviceFromSurface(a,b,c,d) #define IDirect3DRM2_CreateDeviceFromD3D(p,a,b,c) (p)->CreateDeviceFromD3D(a,b,c) #define IDirect3DRM2_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->CreateDeviceFromClipper(a,b,c,d,e) #define IDirect3DRM2_CreateTextureFromSurface(p,a,b) (p)->CreateTextureFromSurface(a,b) #define IDirect3DRM2_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->CreateShadow(a,b,c,d,e,f,g,h,i) #define IDirect3DRM2_CreateViewport(p,a,b,c,d,e,f,g) (p)->CreateViewport(a,b,c,d,e,f,g) #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) #define IDirect3DRM2_CreateUserVisual(p,a,b,c) (p)->CreateUserVisual(a,b,c) #define IDirect3DRM2_LoadTexture(p,a,b) (p)->LoadTexture(a,b) #define IDirect3DRM2_LoadTextureFromResource(p,a,b,c,d) (p)->LoadTextureFromResource(a,b,c,d) #define IDirect3DRM2_SetSearchPath(p,a) (p)->SetSearchPath(a) #define IDirect3DRM2_AddSearchPath(p,a) (p)->AddSearchPath(a) #define IDirect3DRM2_GetSearchPath(p,a,b) (p)->GetSearchPath(a,b) #define IDirect3DRM2_SetDefaultTextureColors(p,a) (p)->SetDefaultTextureColors(a) #define IDirect3DRM2_SetDefaultTextureShades(p,a) (p)->SetDefaultTextureShades(a) #define IDirect3DRM2_GetDevices(p,a) (p)->GetDevices(a) #define IDirect3DRM2_GetNamedObject(p,a,b) (p)->GetNamedObject(a,b) #define IDirect3DRM2_EnumerateObjects(p,a,b) (p)->EnumerateObjects(a,b) #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) #define IDirect3DRM2_Tick(p,a) (p)->Tick(a) #define IDirect3DRM2_CreateProgressiveMesh(p,a) (p)->CreateProgressiveMesh(p,a) #endif /***************************************************************************** * IDirect3DRM3 interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetClassName #endif #define INTERFACE IDirect3DRM3 DECLARE_INTERFACE_(IDirect3DRM3,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRM2 methods ***/ STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame) PURE; STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE; STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder3 **mesh_builder) PURE; STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace2 **face) PURE; STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation2 **animation) PURE; STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet2 **set) PURE; STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture3 **texture) PURE; STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE; STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b, IDirect3DRMLight **light) PURE; STDMETHOD(CreateMaterial)(THIS_ D3DVALUE, IDirect3DRMMaterial2 **material) PURE; STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice3 **device) PURE; STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface, DWORD flags, IDirect3DRMDevice3 **device) PURE; STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice3 **device) PURE; STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice3 **device) PURE; STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface, IDirect3DRMTexture3 **texture) PURE; STDMETHOD(CreateShadow)(THIS_ IUnknown *object, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMShadow2 **shadow) PURE; STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice3 *device, IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport) PURE; STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame3 *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE; STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE; STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture3 **texture) PURE; STDMETHOD(LoadTextureFromResource)(THIS_ HMODULE module, const char *resource_name, const char *resource_type, IDirect3DRMTexture3 **texture) PURE; STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE; STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE; STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE; STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE; STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE; STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE; STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE; STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame3 *parent_frame) PURE; STDMETHOD(Tick)(THIS_ D3DVALUE) PURE; STDMETHOD(CreateProgressiveMesh)(THIS_ IDirect3DRMProgressiveMesh **mesh) PURE; STDMETHOD(RegisterClient)(THIS_ REFGUID guid, DWORD *id) PURE; STDMETHOD(UnregisterClient)(THIS_ REFGUID rguid) PURE; STDMETHOD(CreateClippedVisual)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual) PURE; STDMETHOD(SetOptions)(THIS_ DWORD) PURE; STDMETHOD(GetOptions)(THIS_ DWORD *flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRM3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRM3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRM3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRM3 methods ***/ #define IDirect3DRM3_CreateObject(p,a,b,c,d) (p)->lpVtbl->CreateObject(p,a,b,c,d) #define IDirect3DRM3_CreateFrame(p,a,b) (p)->lpVtbl->CreateFrame(p,a,b) #define IDirect3DRM3_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a) #define IDirect3DRM3_CreateMeshBuilder(p,a) (p)->lpVtbl->CreateMeshBuilder(p,a) #define IDirect3DRM3_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a) #define IDirect3DRM3_CreateAnimation(p,a) (p)->lpVtbl->CreateAnimation(p,a) #define IDirect3DRM3_CreateAnimationSet(p,a) (p)->lpVtbl->CreateAnimationSet(p,a) #define IDirect3DRM3_CreateTexture(p,a,b) (p)->lpVtbl->CreateTexture(p,a,b) #define IDirect3DRM3_CreateLight(p,a,b,c) (p)->lpVtbl->CreateLight(p,a,b,c) #define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e) (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e) #define IDirect3DRM3_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3DRM3_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d,e) #define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c) (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c) #define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e) #define IDirect3DRM3_CreateTextureFromSurface(p,a,b) (p)->lpVtbl->CreateTextureFromSurface(p,a,b) #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) #define IDirect3DRM3_CreateViewport(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g) #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) #define IDirect3DRM3_CreateUserVisual(p,a,b,c) (p)->lpVtbl->CreateUserVisual(p,a,b,c) #define IDirect3DRM3_LoadTexture(p,a,b) (p)->lpVtbl->LoadTexture(p,a,b) #define IDirect3DRM3_LoadTextureFromResource(p,a,b,c,d) (p)->lpVtbl->LoadTextureFromResource(p,a,b,c,d) #define IDirect3DRM3_SetSearchPath(p,a) (p)->lpVtbl->SetSearchPath(p,a) #define IDirect3DRM3_AddSearchPath(p,a) (p)->lpVtbl->AddSearchPath(p,a) #define IDirect3DRM3_GetSearchPath(p,a,b) (p)->lpVtbl->GetSearchPath(p,a,b) #define IDirect3DRM3_SetDefaultTextureColors(p,a) (p)->lpVtbl->SetDefaultTextureColors(p,a) #define IDirect3DRM3_SetDefaultTextureShades(p,a) (p)->lpVtbl->SetDefaultTextureShades(p,a) #define IDirect3DRM3_GetDevices(p,a) (p)->lpVtbl->GetDevices(p,a) #define IDirect3DRM3_GetNamedObject(p,a,b) (p)->lpVtbl->GetNamedObject(p,a,b) #define IDirect3DRM3_EnumerateObjects(p,a,b) (p)->lpVtbl->EnumerateObjects(p,a,b) #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) #define IDirect3DRM3_Tick(p,a) (p)->lpVtbl->Tick(p,a) #define IDirect3DRM3_CreateProgressiveMesh(p,a) (p)->lpVtbl->CreateProgressiveMesh(p,a) #define IDirect3DRM3_RegisterClient(p,a,b) (p)->lpVtbl->RegisterClient(p,a,b) #define IDirect3DRM3_UnregisterClient(p,a) (p)->lpVtbl->UnregisterClient(p,a) #define IDirect3DRM3_CreateClippedVisual(p,ab) (p)->lpVtbl->CreateClippedVisual(p,a,b) #define IDirect3DRM3_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a) #define IDirect3DRM3_GetOptions(p,a) (p)->lpVtbl->GetOptions(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRM3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRM3_AddRef(p) (p)->AddRef() #define IDirect3DRM3_Release(p) (p)->Release() /*** IDirect3DRM3 methods ***/ #define IDirect3DRM3_CreateObject(p,a,b,c,d) (p)->CreateObject(a,b,c,d) #define IDirect3DRM3_CreateFrame(p,a,b) (p)->CreateFrame(a,b) #define IDirect3DRM3_CreateMesh(p,a) (p)->CreateMesh(a) #define IDirect3DRM3_CreateMeshBuilder(p,a) (p)->CreateMeshBuilder(a) #define IDirect3DRM3_CreateFace(p,a) (p)->CreateFace(a) #define IDirect3DRM3_CreateAnimation(p,a) (p)->CreateAnimation(a) #define IDirect3DRM3_CreateAnimationSet(p,a) (p)->CreateAnimationSet(a) #define IDirect3DRM3_CreateTexture(p,a,b) (p)->CreateTexture(a,b) #define IDirect3DRM3_CreateLight(p,a,b,c) (p)->CreateLight(a,b,c) #define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e) (p)->CreateLightRGB(a,b,c,d,e) #define IDirect3DRM3_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3DRM3_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d,e) (p)->CreateDeviceFromSurface(a,b,c,d,e) #define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c) (p)->CreateDeviceFromD3D(a,b,c) #define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->CreateDeviceFromClipper(a,b,c,d,e) #define IDirect3DRM3_CreateTextureFromSurface(p,a,b) (p)->CreateTextureFromSurface(a,b) #define IDirect3DRM3_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->CreateShadow(a,b,c,d,e,f,g,h,i) #define IDirect3DRM3_CreateViewport(p,a,b,c,d,e,f,g) (p)->CreateViewport(a,b,c,d,e,f,g) #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) #define IDirect3DRM3_CreateUserVisual(p,a,b,c) (p)->CreateUserVisual(a,b,c) #define IDirect3DRM3_LoadTexture(p,a,b) (p)->LoadTexture(a,b) #define IDirect3DRM3_LoadTextureFromResource(p,a,b,c,d) (p)->LoadTextureFromResource(a,b,c,d) #define IDirect3DRM3_SetSearchPath(p,a) (p)->SetSearchPath(a) #define IDirect3DRM3_AddSearchPath(p,a) (p)->AddSearchPath(a) #define IDirect3DRM3_GetSearchPath(p,a,b) (p)->GetSearchPath(a,b) #define IDirect3DRM3_SetDefaultTextureColors(p,a) (p)->SetDefaultTextureColors(a) #define IDirect3DRM3_SetDefaultTextureShades(p,a) (p)->SetDefaultTextureShades(a) #define IDirect3DRM3_GetDevices(p,a) (p)->GetDevices(a) #define IDirect3DRM3_GetNamedObject(p,a,b) (p)->GetNamedObject(a,b) #define IDirect3DRM3_EnumerateObjects(p,a,b) (p)->EnumerateObjects(a,b) #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) #define IDirect3DRM3_Tick(p,a) (p)->Tick(a) #define IDirect3DRM3_CreateProgressiveMesh(p,a) (p)->CreateProgressiveMesh(p,a) #define IDirect3DRM3_RegisterClient(p,a,b) (p)->RegisterClient(p,a,b) #define IDirect3DRM3_UnregisterClient(p,a) (p)->UnregisterClient(p,a) #define IDirect3DRM3_CreateClippedVisual(p,ab) (p)->CreateClippedVisual(p,a,b) #define IDirect3DRM3_SetOptions(p,a) (p)->SetOptions(p,a) #define IDirect3DRM3_GetOptions(p,a) (p)->GetOptions(p,a) #endif #define D3DRM_OK DD_OK #define D3DRMERR_BADOBJECT MAKE_DDHRESULT(781) #define D3DRMERR_BADTYPE MAKE_DDHRESULT(782) #define D3DRMERR_BADALLOC MAKE_DDHRESULT(783) #define D3DRMERR_FACEUSED MAKE_DDHRESULT(784) #define D3DRMERR_NOTFOUND MAKE_DDHRESULT(785) #define D3DRMERR_NOTDONEYET MAKE_DDHRESULT(786) #define D3DRMERR_FILENOTFOUND MAKE_DDHRESULT(787) #define D3DRMERR_BADFILE MAKE_DDHRESULT(788) #define D3DRMERR_BADDEVICE MAKE_DDHRESULT(789) #define D3DRMERR_BADVALUE MAKE_DDHRESULT(790) #define D3DRMERR_BADMAJORVERSION MAKE_DDHRESULT(791) #define D3DRMERR_BADMINORVERSION MAKE_DDHRESULT(792) #define D3DRMERR_UNABLETOEXECUTE MAKE_DDHRESULT(793) #define D3DRMERR_LIBRARYNOTFOUND MAKE_DDHRESULT(794) #define D3DRMERR_INVALIDLIBRARY MAKE_DDHRESULT(795) #define D3DRMERR_PENDING MAKE_DDHRESULT(796) #define D3DRMERR_NOTENOUGHDATA MAKE_DDHRESULT(797) #define D3DRMERR_REQUESTTOOLARGE MAKE_DDHRESULT(798) #define D3DRMERR_REQUESTTOOSMALL MAKE_DDHRESULT(799) #define D3DRMERR_CONNECTIONLOST MAKE_DDHRESULT(800) #define D3DRMERR_LOADABORTED MAKE_DDHRESULT(801) #define D3DRMERR_NOINTERNET MAKE_DDHRESULT(802) #define D3DRMERR_BADCACHEFILE MAKE_DDHRESULT(803) #define D3DRMERR_BOXNOTSET MAKE_DDHRESULT(804) #define D3DRMERR_BADPMDATA MAKE_DDHRESULT(805) #define D3DRMERR_CLIENTNOTREGISTERED MAKE_DDHRESULT(806) #define D3DRMERR_NOTCREATEDFROMDDS MAKE_DDHRESULT(807) #define D3DRMERR_NOSUCHKEY MAKE_DDHRESULT(808) #define D3DRMERR_INCOMPATABLEKEY MAKE_DDHRESULT(809) #define D3DRMERR_ELEMENTINUSE MAKE_DDHRESULT(810) #define D3DRMERR_TEXTUREFORMATNOTFOUND MAKE_DDHRESULT(811) #define D3DRMERR_NOTAGGREGATED MAKE_DDHRESULT(812) #ifdef __cplusplus } #endif #endif /* __D3DRM_H__ */ ================================================ FILE: wine/windows/d3drmdef.h ================================================ /* * Copyright 2007,2010 Vijay Kiran Kamuju * Copyright 2007 David ADAM * Copyright 2010 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DRMDEFS_H__ #define __D3DRMDEFS_H__ #include #include #if defined(__cplusplus) extern "C" { #endif typedef struct _D3DRMVECTOR4D { D3DVALUE x; D3DVALUE y; D3DVALUE z; D3DVALUE w; } D3DRMVECTOR4D, *LPD3DRMVECTOR4D; typedef D3DVALUE D3DRMMATRIX4D[4][4]; typedef struct _D3DRMQUATERNION { D3DVALUE s; D3DVECTOR v; } D3DRMQUATERNION, *LPD3DRMQUATERNION; typedef struct _D3DRMRAY { D3DVECTOR dvDir; D3DVECTOR dvPos; } D3DRMRAY, *LPD3DRMRAY; typedef struct _D3DRMBOX { D3DVECTOR min; D3DVECTOR max; } D3DRMBOX, *LPD3DRMBOX; typedef void (*D3DRMWRAPCALLBACK)(D3DVECTOR *vec, int *u, int *v, D3DVECTOR *a, D3DVECTOR *b, void *ctx); typedef enum _D3DRMLIGHTTYPE { D3DRMLIGHT_AMBIENT, D3DRMLIGHT_POINT, D3DRMLIGHT_SPOT, D3DRMLIGHT_DIRECTIONAL, D3DRMLIGHT_PARALLELPOINT } D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE; typedef enum _D3DRMSHADEMODE { D3DRMSHADE_FLAT = 0, D3DRMSHADE_GOURAUD = 1, D3DRMSHADE_PHONG = 2, D3DRMSHADE_MASK = 7, D3DRMSHADE_MAX = 8 } D3DRMSHADEMODE, *LPD3DRMSHADEMODE; typedef enum _D3DRMLIGHTMODE { D3DRMLIGHT_OFF = 0 * D3DRMSHADE_MAX, D3DRMLIGHT_ON = 1 * D3DRMSHADE_MAX, D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX, D3DRMLIGHT_MAX = 8 * D3DRMSHADE_MAX } D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE; typedef enum _D3DRMFILLMODE { D3DRMFILL_POINTS = 0 * D3DRMLIGHT_MAX, D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX, D3DRMFILL_SOLID = 2 * D3DRMLIGHT_MAX, D3DRMFILL_MASK = 7 * D3DRMLIGHT_MAX, D3DRMFILL_MAX = 8 * D3DRMLIGHT_MAX } D3DRMFILLMODE, *LPD3DRMFILLMODE; typedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY; #define D3DRMRENDER_WIREFRAME (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME) #define D3DRMRENDER_UNLITFLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID) #define D3DRMRENDER_FLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID) #define D3DRMRENDER_GOURAUD (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID) #define D3DRMRENDER_PHONG (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID) #define D3DRMRENDERMODE_BLENDEDTRANSPARENCY 1 #define D3DRMRENDERMODE_SORTEDTRANSPARENCY 2 #define D3DRMRENDERMODE_LIGHTINMODELSPACE 8 #define D3DRMRENDERMODE_VIEWDEPENDENTSPECULAR 16 #define D3DRMRENDERMODE_DISABLESORTEDALPHAZWRITE 32 typedef enum _D3DRMTEXTUREQUALITY { D3DRMTEXTURE_NEAREST, D3DRMTEXTURE_LINEAR, D3DRMTEXTURE_MIPNEAREST, D3DRMTEXTURE_MIPLINEAR, D3DRMTEXTURE_LINEARMIPNEAREST, D3DRMTEXTURE_LINEARMIPLINEAR } D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY; #define D3DRMTEXTURE_FORCERESIDENT 0x00000001 #define D3DRMTEXTURE_STATIC 0x00000002 #define D3DRMTEXTURE_DOWNSAMPLEPOINT 0x00000004 #define D3DRMTEXTURE_DOWNSAMPLEBILINEAR 0x00000008 #define D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH 0x00000010 #define D3DRMTEXTURE_DOWNSAMPLENONE 0x00000020 #define D3DRMTEXTURE_CHANGEDPIXELS 0x00000040 #define D3DRMTEXTURE_CHANGEDPALETTE 0x00000080 #define D3DRMTEXTURE_INVALIDATEONLY 0x00000100 #define D3DRMSHADOW_TRUEALPHA 0x00000001 typedef enum _D3DRMCOMBINETYPE { D3DRMCOMBINE_REPLACE, D3DRMCOMBINE_BEFORE, D3DRMCOMBINE_AFTER } D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE; typedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL; typedef enum _D3DRMPALETTEFLAGS { D3DRMPALETTE_FREE, D3DRMPALETTE_READONLY, D3DRMPALETTE_RESERVED } D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS; typedef struct _D3DRMPALETTEENTRY { unsigned char red; unsigned char green; unsigned char blue; unsigned char flags; } D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY; typedef struct _D3DRMIMAGE { int width; int height; int aspectx; int aspecty; int depth; int rgb; int bytes_per_line; void* buffer1; void* buffer2; ULONG red_mask; ULONG green_mask; ULONG blue_mask; ULONG alpha_mask; int palette_size; D3DRMPALETTEENTRY* palette; } D3DRMIMAGE, *LPD3DRMIMAGE; typedef enum _D3DRMWRAPTYPE { D3DRMWRAP_FLAT, D3DRMWRAP_CYLINDER, D3DRMWRAP_SPHERE, D3DRMWRAP_CHROME, D3DRMWRAP_SHEET, D3DRMWRAP_BOX } D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE; #define D3DRMWIREFRAME_CULL 1 #define D3DRMWIREFRAME_HIDDENLINE 2 typedef enum _D3DRMPROJECTIONTYPE { D3DRMPROJECT_PERSPECTIVE, D3DRMPROJECT_ORTHOGRAPHIC, D3DRMPROJECT_RIGHTHANDPERSPECTIVE, D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC } D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE; #define D3DRMOPTIONS_LEFTHANDED 0x00000001 #define D3DRMOPTIONS_RIGHTHANDED 0x00000002 typedef enum _D3DRMXOFFORMAT { D3DRMXOF_BINARY, D3DRMXOF_COMPRESSED, D3DRMXOF_TEXT } D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT; typedef DWORD D3DRMSAVEOPTIONS; #define D3DRMXOFSAVE_NORMALS 1 #define D3DRMXOFSAVE_TEXTURECOORDINATES 2 #define D3DRMXOFSAVE_MATERIALS 4 #define D3DRMXOFSAVE_TEXTURENAMES 8 #define D3DRMXOFSAVE_ALL 15 #define D3DRMXOFSAVE_TEMPLATES 16 #define D3DRMXOFSAVE_TEXTURETOPOLOGY 32 typedef enum _D3DRMCOLORSOURCE { D3DRMCOLOR_FROMFACE, D3DRMCOLOR_FROMVERTEX } D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE; typedef enum _D3DRMFRAMECONSTRAINT { D3DRMCONSTRAIN_Z, D3DRMCONSTRAIN_Y, D3DRMCONSTRAIN_X } D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT; typedef enum _D3DRMMATERIALMODE { D3DRMMATERIAL_FROMMESH, D3DRMMATERIAL_FROMPARENT, D3DRMMATERIAL_FROMFRAME } D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE; typedef enum _D3DRMFOGMODE { D3DRMFOG_LINEAR, D3DRMFOG_EXPONENTIAL, D3DRMFOG_EXPONENTIALSQUARED } D3DRMFOGMODE, *LPD3DRMFOGMODE; typedef enum _D3DRMZBUFFERMODE { D3DRMZBUFFER_FROMPARENT, D3DRMZBUFFER_ENABLE, D3DRMZBUFFER_DISABLE } D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE; typedef enum _D3DRMSORTMODE { D3DRMSORT_FROMPARENT, D3DRMSORT_NONE, D3DRMSORT_FRONTTOBACK, D3DRMSORT_BACKTOFRONT } D3DRMSORTMODE, *LPD3DRMSORTMODE; typedef struct _D3DRMMATERIALOVERRIDE { DWORD dwSize; DWORD dwFlags; D3DCOLORVALUE dcDiffuse; D3DCOLORVALUE dcAmbient; D3DCOLORVALUE dcEmissive; D3DCOLORVALUE dcSpecular; D3DVALUE dvPower; IUnknown *lpD3DRMTex; } D3DRMMATERIALOVERRIDE, *LPD3DRMMATERIALOVERRIDE; #define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAONLY 0x00000001 #define D3DRMMATERIALOVERRIDE_DIFFUSE_RGBONLY 0x00000002 #define D3DRMMATERIALOVERRIDE_DIFFUSE 0x00000003 #define D3DRMMATERIALOVERRIDE_AMBIENT 0x00000004 #define D3DRMMATERIALOVERRIDE_EMISSIVE 0x00000008 #define D3DRMMATERIALOVERRIDE_SPECULAR 0x00000010 #define D3DRMMATERIALOVERRIDE_POWER 0x00000020 #define D3DRMMATERIALOVERRIDE_TEXTURE 0x00000040 #define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAMULTIPLY 0x00000080 #define D3DRMMATERIALOVERRIDE_ALL 0x000000FF #define D3DRMFPTF_ALPHA 0x00000001 #define D3DRMFPTF_NOALPHA 0x00000002 #define D3DRMFPTF_PALETTIZED 0x00000004 #define D3DRMFPTF_NOTPALETTIZED 0x00000008 #define D3DRMSTATECHANGE_UPDATEONLY 0x000000001 #define D3DRMSTATECHANGE_VOLATILE 0x000000002 #define D3DRMSTATECHANGE_NONVOLATILE 0x000000004 #define D3DRMSTATECHANGE_RENDER 0x000000020 #define D3DRMSTATECHANGE_LIGHT 0x000000040 #define D3DRMDEVICE_NOZBUFFER 0x00000001 #define D3DRMCALLBACK_PREORDER 0 #define D3DRMCALLBACK_POSTORDER 1 #define D3DRMRAYPICK_ONLYBOUNDINGBOXES 0x01 #define D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES 0x02 #define D3DRMRAYPICK_INTERPOLATEUV 0x04 #define D3DRMRAYPICK_INTERPOLATECOLOR 0x08 #define D3DRMRAYPICK_INTERPOLATENORMAL 0x10 #define D3DRMADDFACES_VERTICESONLY 1 #define D3DRMGENERATENORMALS_PRECOMPACT 1 #define D3DRMGENERATENORMALS_USECREASEANGLE 2 #define D3DRMMESHBUILDER_DIRECTPARENT 1 #define D3DRMMESHBUILDER_ROOTMESH 2 #define D3DRMMESHBUILDER_RENDERENABLE 0x00000001 #define D3DRMMESHBUILDER_PICKENABLE 0x00000002 #define D3DRMADDMESHBUILDER_DONTCOPYAPPDATA 1 #define D3DRMADDMESHBUILDER_FLATTENSUBMESHES 2 #define D3DRMADDMESHBUILDER_NOSUBMESHES 4 #define D3DRMMESHBUILDERAGE_GEOMETRY 0x00000001 #define D3DRMMESHBUILDERAGE_MATERIALS 0x00000002 #define D3DRMMESHBUILDERAGE_TEXTURES 0x00000004 #define D3DRMFVF_TYPE 0x00000001 #define D3DRMFVF_NORMAL 0x00000002 #define D3DRMFVF_COLOR 0x00000004 #define D3DRMFVF_TEXTURECOORDS 0x00000008 #define D3DRMVERTEX_STRIP 0x00000001 #define D3DRMVERTEX_FAN 0x00000002 #define D3DRMVERTEX_LIST 0x00000004 #define D3DRMCLEAR_TARGET 0x00000001 #define D3DRMCLEAR_ZBUFFER 0x00000002 #define D3DRMCLEAR_DIRTYRECTS 0x00000004 #define D3DRMCLEAR_ALL (D3DRMCLEAR_TARGET | D3DRMCLEAR_ZBUFFER | D3DRMCLEAR_DIRTYRECTS) #define D3DRMFOGMETHOD_VERTEX 0x00000001 #define D3DRMFOGMETHOD_TABLE 0x00000002 #define D3DRMFOGMETHOD_ANY 0x00000004 #define D3DRMFRAME_RENDERENABLE 0x00000001 #define D3DRMFRAME_PICKENABLE 0x00000002 typedef DWORD D3DRMANIMATIONOPTIONS; #define D3DRMANIMATION_OPEN 0x00000001 #define D3DRMANIMATION_CLOSED 0x00000002 #define D3DRMANIMATION_LINEARPOSITION 0x00000004 #define D3DRMANIMATION_SPLINEPOSITION 0x00000008 #define D3DRMANIMATION_SCALEANDROTATION 0x00000010 #define D3DRMANIMATION_POSITION 0x00000020 typedef DWORD D3DRMINTERPOLATIONOPTIONS; #define D3DRMINTERPOLATION_OPEN 0x0001 #define D3DRMINTERPOLATION_CLOSED 0x0002 #define D3DRMINTERPOLATION_NEAREST 0x0100 #define D3DRMINTERPOLATION_LINEAR 0x0004 #define D3DRMINTERPOLATION_SPLINE 0x0008 #define D3DRMINTERPOLATION_VERTEXCOLOR 0x0040 #define D3DRMINTERPOLATION_SLERPNORMALS 0x0080 typedef DWORD D3DRMLOADOPTIONS; #define D3DRMLOAD_FROMFILE __MSABI_LONG(0x000) #define D3DRMLOAD_FROMRESOURCE __MSABI_LONG(0x001) #define D3DRMLOAD_FROMMEMORY __MSABI_LONG(0x002) #define D3DRMLOAD_FROMSTREAM __MSABI_LONG(0x004) #define D3DRMLOAD_FROMURL __MSABI_LONG(0x008) #define D3DRMLOAD_BYNAME __MSABI_LONG(0x010) #define D3DRMLOAD_BYPOSITION __MSABI_LONG(0x020) #define D3DRMLOAD_BYGUID __MSABI_LONG(0x040) #define D3DRMLOAD_FIRST __MSABI_LONG(0x080) #define D3DRMLOAD_INSTANCEBYREFERENCE __MSABI_LONG(0x100) #define D3DRMLOAD_INSTANCEBYCOPYING __MSABI_LONG(0x200) #define D3DRMLOAD_ASYNCHRONOUS __MSABI_LONG(0x400) typedef struct _D3DRMLOADRESOURCE { HMODULE hModule; const char *lpName; const char *lpType; } D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE; typedef struct _D3DRMLOADMEMORY { void *lpMemory; DWORD dSize; } D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY; #define D3DRMPMESHSTATUS_VALID 0x01 #define D3DRMPMESHSTATUS_INTERRUPTED 0x02 #define D3DRMPMESHSTATUS_BASEMESHCOMPLETE 0x04 #define D3DRMPMESHSTATUS_COMPLETE 0x08 #define D3DRMPMESHSTATUS_RENDERABLE 0x10 #define D3DRMPMESHEVENT_BASEMESH 0x01 #define D3DRMPMESHEVENT_COMPLETE 0x02 typedef struct _D3DRMPMESHLOADSTATUS { DWORD dwSize; DWORD dwPMeshSize; DWORD dwBaseMeshSize; DWORD dwBytesLoaded; DWORD dwVerticesLoaded; DWORD dwFacesLoaded; HRESULT dwLoadResult; DWORD dwFlags; } D3DRMPMESHLOADSTATUS, *LPD3DRMPMESHLOADSTATUS; typedef enum _D3DRMUSERVISUALREASON { D3DRMUSERVISUAL_CANSEE, D3DRMUSERVISUAL_RENDER } D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON; typedef struct _D3DRMANIMATIONKEY { DWORD dwSize; DWORD dwKeyType; D3DVALUE dvTime; DWORD dwID; #if !defined(__cplusplus) || !defined(D3D_OVERLOADS) union { D3DRMQUATERNION dqRotateKey; D3DVECTOR dvScaleKey; D3DVECTOR dvPositionKey; } DUMMYUNIONNAME; #else D3DVALUE dvK[4]; #endif } D3DRMANIMATIONKEY; typedef D3DRMANIMATIONKEY *LPD3DRMANIMATIONKEY; #define D3DRMANIMATION_ROTATEKEY 0x01 #define D3DRMANIMATION_SCALEKEY 0x02 #define D3DRMANIMATION_POSITIONKEY 0x03 typedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING; static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU = 1; static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV = 2; static const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4; typedef struct _D3DRMVERTEX { D3DVECTOR position; D3DVECTOR normal; D3DVALUE tu; D3DVALUE tv; D3DCOLOR color; } D3DRMVERTEX, *LPD3DRMVERTEX; typedef LONG D3DRMGROUPINDEX; static const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1; void WINAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D m, D3DRMQUATERNION *q); D3DRMQUATERNION * WINAPI D3DRMQuaternionFromRotation(D3DRMQUATERNION *x, D3DVECTOR *axis, D3DVALUE theta); D3DRMQUATERNION * WINAPI D3DRMQuaternionMultiply(D3DRMQUATERNION *ret, D3DRMQUATERNION *x, D3DRMQUATERNION *y); D3DRMQUATERNION * WINAPI D3DRMQuaternionSlerp(D3DRMQUATERNION *ret, D3DRMQUATERNION *x, D3DRMQUATERNION *y, D3DVALUE alpha); D3DVECTOR * WINAPI D3DRMVectorAdd(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y); D3DVECTOR * WINAPI D3DRMVectorCrossProduct(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y); D3DVALUE WINAPI D3DRMVectorDotProduct(D3DVECTOR *x, D3DVECTOR *y); D3DVECTOR * WINAPI D3DRMVectorNormalize(D3DVECTOR *x); #define D3DRMVectorNormalise D3DRMVectorNormalize D3DVALUE WINAPI D3DRMVectorModulus(D3DVECTOR *x); D3DVECTOR * WINAPI D3DRMVectorRandom(D3DVECTOR *ret); D3DVECTOR * WINAPI D3DRMVectorRotate(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *axis, D3DVALUE theta); D3DVECTOR * WINAPI D3DRMVectorReflect(D3DVECTOR *ret, D3DVECTOR *ray, D3DVECTOR *normal); D3DVECTOR * WINAPI D3DRMVectorScale(D3DVECTOR *ret, D3DVECTOR *x, D3DVALUE scale); D3DVECTOR * WINAPI D3DRMVectorSubtract(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y); D3DCOLOR WINAPI D3DRMCreateColorRGB(D3DVALUE, D3DVALUE, D3DVALUE); D3DCOLOR WINAPI D3DRMCreateColorRGBA(D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE); D3DVALUE WINAPI D3DRMColorGetAlpha(D3DCOLOR); D3DVALUE WINAPI D3DRMColorGetBlue(D3DCOLOR); D3DVALUE WINAPI D3DRMColorGetGreen(D3DCOLOR); D3DVALUE WINAPI D3DRMColorGetRed(D3DCOLOR); #if defined(__cplusplus) } #endif #endif ================================================ FILE: wine/windows/d3drmobj.h ================================================ /* * Copyright (C) 2008 Vijay Kiran Kamuju * Copyright (C) 2010 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DRMOBJ_H__ #define __D3DRMOBJ_H__ #include #define VIRTUAL #include #include #ifdef __cplusplus extern "C" { #endif /* Direct3DRM object CLSIDs */ DEFINE_GUID(CLSID_CDirect3DRMDevice, 0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMViewport, 0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMFrame, 0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMMesh, 0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder, 0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMFace, 0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMLight, 0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMTexture, 0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMWrap, 0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMMaterial, 0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMAnimation, 0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMAnimationSet, 0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMUserVisual, 0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMShadow, 0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(CLSID_CDirect3DRMViewportInterpolator, 0xde9eaa1, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(CLSID_CDirect3DRMFrameInterpolator, 0xde9eaa2, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(CLSID_CDirect3DRMMeshInterpolator, 0xde9eaa3, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(CLSID_CDirect3DRMLightInterpolator, 0xde9eaa6, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(CLSID_CDirect3DRMMaterialInterpolator, 0xde9eaa7, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(CLSID_CDirect3DRMTextureInterpolator, 0xde9eaa8, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(CLSID_CDirect3DRMProgressiveMesh, 0x4516ec40, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(CLSID_CDirect3DRMClippedVisual, 0x5434e72d, 0x6d66, 0x11d1, 0xbb, 0xb, 0x0, 0x0, 0xf8, 0x75, 0x86, 0x5a); /* Direct3DRM object interface GUIDs */ DEFINE_GUID(IID_IDirect3DRMObject, 0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMObject2, 0x4516ec7c, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMDevice, 0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMDevice2, 0x4516ec78, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMDevice3, 0x549f498b, 0xbfeb, 0x11d1, 0x8e, 0xd8, 0x00, 0xa0, 0xc9, 0x67, 0xa4, 0x82); DEFINE_GUID(IID_IDirect3DRMViewport, 0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMViewport2, 0x4a1b1be6, 0xbfed, 0x11d1, 0x8e, 0xd8, 0x00, 0xa0, 0xc9, 0x67, 0xa4, 0x82); DEFINE_GUID(IID_IDirect3DRMFrame, 0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMFrame2, 0xc3dfbd60, 0x3988, 0x11d0, 0x9e, 0xc2, 0x00, 0x00, 0xc0, 0x29, 0x1a, 0xc3); DEFINE_GUID(IID_IDirect3DRMFrame3, 0xff6b7f70, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66); DEFINE_GUID(IID_IDirect3DRMVisual, 0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMMesh, 0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMMeshBuilder, 0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMMeshBuilder2, 0x4516ec77, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMMeshBuilder3, 0x4516ec82, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMFace, 0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMFace2, 0x4516ec81, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMLight, 0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMTexture, 0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMTexture2, 0x120f30c0, 0x1629, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b); DEFINE_GUID(IID_IDirect3DRMTexture3, 0xff6b7f73, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66); DEFINE_GUID(IID_IDirect3DRMWrap, 0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMMaterial, 0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMMaterial2, 0xff6b7f75, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66); DEFINE_GUID(IID_IDirect3DRMAnimation, 0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMAnimation2, 0xff6b7f77, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66); DEFINE_GUID(IID_IDirect3DRMAnimationSet, 0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMAnimationSet2, 0xff6b7f79, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66); DEFINE_GUID(IID_IDirect3DRMObjectArray, 0x242f6bc2, 0x3849, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMDeviceArray, 0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMViewportArray, 0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMFrameArray, 0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMVisualArray, 0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMLightArray, 0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMPickedArray, 0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMFaceArray, 0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMAnimationArray, 0xd5f1cae0, 0x4bd7, 0x11d1, 0xb9, 0x74, 0x00, 0x60, 0x08, 0x3e, 0x45, 0xf3); DEFINE_GUID(IID_IDirect3DRMUserVisual, 0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMShadow, 0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); DEFINE_GUID(IID_IDirect3DRMShadow2, 0x86b44e25, 0x9c82, 0x11d1, 0xbb, 0x0b, 0x00, 0xa0, 0xc9, 0x81, 0xa0, 0xa6); DEFINE_GUID(IID_IDirect3DRMInterpolator, 0x242f6bc1, 0x3849, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMProgressiveMesh, 0x4516ec79, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMPicked2Array, 0x4516ec7b, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMClippedVisual, 0x5434e733, 0x6d66, 0x11d1, 0xbb, 0x0b, 0x00, 0x00, 0xf8, 0x75, 0x86, 0x5a); /***************************************************************************** * Predeclare the interfaces */ typedef struct IDirect3DRMObject *LPDIRECT3DRMOBJECT, **LPLPDIRECT3DRMOBJECT; typedef struct IDirect3DRMObject2 *LPDIRECT3DRMOBJECT2, **LPLPDIRECT3DRMOBJECT2; typedef struct IDirect3DRMDevice *LPDIRECT3DRMDEVICE, **LPLPDIRECT3DRMDEVICE; typedef struct IDirect3DRMDevice2 *LPDIRECT3DRMDEVICE2, **LPLPDIRECT3DRMDEVICE2; typedef struct IDirect3DRMDevice3 *LPDIRECT3DRMDEVICE3, **LPLPDIRECT3DRMDEVICE3; typedef struct IDirect3DRMViewport *LPDIRECT3DRMVIEWPORT, **LPLPDIRECT3DRMVIEWPORT; typedef struct IDirect3DRMViewport2 *LPDIRECT3DRMVIEWPORT2, **LPLPDIRECT3DRMVIEWPORT2; typedef struct IDirect3DRMFrame *LPDIRECT3DRMFRAME, **LPLPDIRECT3DRMFRAME; typedef struct IDirect3DRMFrame2 *LPDIRECT3DRMFRAME2, **LPLPDIRECT3DRMFRAME2; typedef struct IDirect3DRMFrame3 *LPDIRECT3DRMFRAME3, **LPLPDIRECT3DRMFRAME3; typedef struct IDirect3DRMVisual *LPDIRECT3DRMVISUAL, **LPLPDIRECT3DRMVISUAL; typedef struct IDirect3DRMMesh *LPDIRECT3DRMMESH, **LPLPDIRECT3DRMMESH; typedef struct IDirect3DRMMeshBuilder *LPDIRECT3DRMMESHBUILDER, **LPLPDIRECT3DRMMESHBUILDER; typedef struct IDirect3DRMMeshBuilder2 *LPDIRECT3DRMMESHBUILDER2, **LPLPDIRECT3DRMMESHBUILDER2; typedef struct IDirect3DRMMeshBuilder3 *LPDIRECT3DRMMESHBUILDER3, **LPLPDIRECT3DRMMESHBUILDER3; typedef struct IDirect3DRMFace *LPDIRECT3DRMFACE, **LPLPDIRECT3DRMFACE; typedef struct IDirect3DRMFace2 *LPDIRECT3DRMFACE2, **LPLPDIRECT3DRMFACE2; typedef struct IDirect3DRMLight *LPDIRECT3DRMLIGHT, **LPLPDIRECT3DRMLIGHT; typedef struct IDirect3DRMTexture *LPDIRECT3DRMTEXTURE, **LPLPDIRECT3DRMTEXTURE; typedef struct IDirect3DRMTexture2 *LPDIRECT3DRMTEXTURE2, **LPLPDIRECT3DRMTEXTURE2; typedef struct IDirect3DRMTexture3 *LPDIRECT3DRMTEXTURE3, **LPLPDIRECT3DRMTEXTURE3; typedef struct IDirect3DRMWrap *LPDIRECT3DRMWRAP, **LPLPDIRECT3DRMWRAP; typedef struct IDirect3DRMMaterial *LPDIRECT3DRMMATERIAL, **LPLPDIRECT3DRMMATERIAL; typedef struct IDirect3DRMMaterial2 *LPDIRECT3DRMMATERIAL2, **LPLPDIRECT3DRMMATERIAL2; typedef struct IDirect3DRMAnimation *LPDIRECT3DRMANIMATION, **LPLPDIRECT3DRMANIMATION; typedef struct IDirect3DRMAnimation2 *LPDIRECT3DRMANIMATION2, **LPLPDIRECT3DRMANIMATION2; typedef struct IDirect3DRMAnimationSet *LPDIRECT3DRMANIMATIONSET, **LPLPDIRECT3DRMANIMATIONSET; typedef struct IDirect3DRMAnimationSet2 *LPDIRECT3DRMANIMATIONSET2, **LPLPDIRECT3DRMANIMATIONSET2; typedef struct IDirect3DRMUserVisual *LPDIRECT3DRMUSERVISUAL, **LPLPDIRECT3DRMUSERVISUAL; typedef struct IDirect3DRMShadow *LPDIRECT3DRMSHADOW, **LPLPDIRECT3DRMSHADOW; typedef struct IDirect3DRMShadow2 *LPDIRECT3DRMSHADOW2, **LPLPDIRECT3DRMSHADOW2; typedef struct IDirect3DRMArray *LPDIRECT3DRMARRAY, **LPLPDIRECT3DRMARRAY; typedef struct IDirect3DRMObjectArray *LPDIRECT3DRMOBJECTARRAY, **LPLPDIRECT3DRMOBJECTARRAY; typedef struct IDirect3DRMDeviceArray *LPDIRECT3DRMDEVICEARRAY, **LPLPDIRECT3DRMDEVICEARRAY; typedef struct IDirect3DRMFaceArray *LPDIRECT3DRMFACEARRAY, **LPLPDIRECT3DRMFACEARRAY; typedef struct IDirect3DRMViewportArray *LPDIRECT3DRMVIEWPORTARRAY, **LPLPDIRECT3DRMVIEWPORTARRAY; typedef struct IDirect3DRMFrameArray *LPDIRECT3DRMFRAMEARRAY, **LPLPDIRECT3DRMFRAMEARRAY; typedef struct IDirect3DRMAnimationArray *LPDIRECT3DRMANIMATIONARRAY, **LPLPDIRECT3DRMANIMATIONARRAY; typedef struct IDirect3DRMVisualArray *LPDIRECT3DRMVISUALARRAY, **LPLPDIRECT3DRMVISUALARRAY; typedef struct IDirect3DRMPickedArray *LPDIRECT3DRMPICKEDARRAY, **LPLPDIRECT3DRMPICKEDARRAY; typedef struct IDirect3DRMPicked2Array *LPDIRECT3DRMPICKED2ARRAY, **LPLPDIRECT3DRMPICKED2ARRAY; typedef struct IDirect3DRMLightArray *LPDIRECT3DRMLIGHTARRAY, **LPLPDIRECT3DRMLIGHTARRAY; typedef struct IDirect3DRMProgressiveMesh *LPDIRECT3DRMPROGRESSIVEMESH, **LPLPDIRECT3DRMPROGRESSIVEMESH; typedef struct IDirect3DRMClippedVisual *LPDIRECT3DRMCLIPPEDVISUAL, **LPLPDIRECT3DRMCLIPPEDVISUAL; /* ******************************************************************** Types and structures ******************************************************************** */ typedef void (__cdecl *D3DRMOBJECTCALLBACK)(struct IDirect3DRMObject *obj, void *arg); typedef void (__cdecl *D3DRMFRAMEMOVECALLBACK)(struct IDirect3DRMFrame *frame, void *ctx, D3DVALUE delta); typedef void (__cdecl *D3DRMFRAME3MOVECALLBACK)(struct IDirect3DRMFrame3 *frame, void *ctx, D3DVALUE delta); typedef void (__cdecl *D3DRMUPDATECALLBACK)(struct IDirect3DRMDevice *device, void *ctx, int count, D3DRECT *rects); typedef void (__cdecl *D3DRMDEVICE3UPDATECALLBACK)(struct IDirect3DRMDevice3 *device, void *ctx, int count, D3DRECT *rects); typedef int (__cdecl *D3DRMUSERVISUALCALLBACK)(struct IDirect3DRMUserVisual *visual, void *ctx, D3DRMUSERVISUALREASON reason, struct IDirect3DRMDevice *device, struct IDirect3DRMViewport *viewport); typedef HRESULT (__cdecl *D3DRMLOADTEXTURECALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture **texture); typedef HRESULT (__cdecl *D3DRMLOADTEXTURE3CALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture3 **texture); typedef void (__cdecl *D3DRMLOADCALLBACK)(struct IDirect3DRMObject *object, REFIID objectguid, void *arg); typedef HRESULT (__cdecl *D3DRMDOWNSAMPLECALLBACK)(struct IDirect3DRMTexture3 *texture, void *ctx, IDirectDrawSurface *src_surface, IDirectDrawSurface *dst_surface); typedef HRESULT (__cdecl *D3DRMVALIDATIONCALLBACK)(struct IDirect3DRMTexture3 *texture, void *ctx, DWORD flags, DWORD rect_count, RECT *rects); typedef struct _D3DRMPICKDESC { ULONG ulFaceIdx; LONG lGroupIdx; D3DVECTOR vPosition; } D3DRMPICKDESC, *LPD3DRMPICKDESC; typedef struct _D3DRMPICKDESC2 { ULONG ulFaceIdx; LONG lGroupIdx; D3DVECTOR vPosition; D3DVALUE tu; D3DVALUE tv; D3DVECTOR dvNormal; D3DCOLOR dcColor; } D3DRMPICKDESC2, *LPD3DRMPICKDESC2; /***************************************************************************** * IDirect3DRMObject interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetClassName #endif #define INTERFACE IDirect3DRMObject DECLARE_INTERFACE_(IDirect3DRMObject,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMObject_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMObject_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMObject_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMObject_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMObject_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMObject_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMObject_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMObject_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMObject_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMObject_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMObject_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMObject_AddRef(p) (p)->AddRef() #define IDirect3DRMObject_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMObject_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMObject_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMObject_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMObject_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMObject_GetAppData(p) (p)->GetAppData() #define IDirect3DRMObject_SetName(p,a) (p)->SetName(a) #define IDirect3DRMObject_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMObject_GetClassName(p,a,b) (p)->GetClassName(a,b) #endif /***************************************************************************** * IDirect3DRMObject2 interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetClassName #endif #define INTERFACE IDirect3DRMObject2 DECLARE_INTERFACE_(IDirect3DRMObject2,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject2 methods ***/ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(GetClientData)(THIS_ DWORD id, void **data) PURE; STDMETHOD(GetDirect3DRM)(THIS_ struct IDirect3DRM **d3drm) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(SetClientData)(THIS_ DWORD id, void *data, DWORD flags) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetAge)(THIS_ DWORD flags, DWORD *age) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMObject2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMObject2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMObject2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject2 methods ***/ #define IDirect3DRMObject2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMObject2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMObject2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMObject2_GetClientData(p,a,b) (p)->lpVtbl->SetClientData(p,a,b) #define IDirect3DRMObject2_GetDirect3DRM(p,a) (p)->lpVtbl->GetDirect3DRM(p,a) #define IDirect3DRMObject2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMObject2_SetClientData(p,a,b,c) (p)->lpVtbl->SetClientData(p,a,b,c) #define IDirect3DRMObject2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMObject2_GetAge(p,a,b) (p)->lpVtbl->GetAge(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMObject2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMObject2_AddRef(p) (p)->AddRef() #define IDirect3DRMObject2_Release(p) (p)->Release() /*** IDirect3DRMObject2 methods ***/ #define IDirect3DRMObject2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMObject2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMObject2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMObject2_GetClientData(p,a,b) (p)->SetClientData(a,b) #define IDirect3DRMObject2_GetDirect3DRM(p,a) (p)->GetDirect3DRM(a) #define IDirect3DRMObject2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMObject2_SetClientData(p,a,b,c) (p)->SetClientData(a,b,c) #define IDirect3DRMObject2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMObject2_GetAge(p,a,b) (p)->GetAge(a,b) #endif /***************************************************************************** * IDirect3DRMVisual interface */ #define INTERFACE IDirect3DRMVisual DECLARE_INTERFACE_(IDirect3DRMVisual,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMVisual_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMVisual_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMVisual_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMVisual_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMVisual_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMVisual_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMVisual_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMVisual_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMVisual_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMVisual_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMVisual_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMVisual_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMVisual_AddRef(p) (p)->AddRef() #define IDirect3DRMVisual_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMVisual_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMVisual_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMVisual_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMVisual_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMVisual_GetAppData(p) (p)->GetAppData() #define IDirect3DRMVisual_SetName(p,a) (p)->SetName(a) #define IDirect3DRMVisual_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMVisual_GetClassName(p,a,b) (p)->GetClassName(a,b) #endif /***************************************************************************** * IDirect3DRMDevice interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetClassName #endif #define INTERFACE IDirect3DRMDevice DECLARE_INTERFACE_(IDirect3DRMDevice,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMDevice methods ***/ STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE; STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE; STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE; STDMETHOD(Update)(THIS) PURE; STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE; STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE; STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE; STDMETHOD(SetDither)(THIS_ BOOL) PURE; STDMETHOD(SetShades)(THIS_ DWORD) PURE; STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE; STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE; STDMETHOD_(BOOL, GetDither)(THIS) PURE; STDMETHOD_(DWORD, GetShades)(THIS) PURE; STDMETHOD_(DWORD, GetHeight)(THIS) PURE; STDMETHOD_(DWORD, GetWidth)(THIS) PURE; STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE; STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE; STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE; STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE; STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMDevice_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMDevice_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMDevice_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMDevice_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMDevice_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMDevice_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMDevice_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMDevice_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMDevice_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMDevice_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMDevice methods ***/ #define IDirect3DRMDevice_Init(p,a,b) (p)->lpVtbl->Init(p,a,b) #define IDirect3DRMDevice_InitFromD3D(p,a,b) (p)->lpVtbl->InitFromD3D(p,a,b) #define IDirect3DRMDevice_InitFromClipper(p,a,b,c,d) (p)->lpVtbl->InitFromClipper(p,a,b,c,d) #define IDirect3DRMDevice_Update(p) (p)->lpVtbl->Update(p) #define IDirect3DRMDevice_AddUpdateCallback(p,a,b) (p)->lpVtbl->AddUpdateCallback(p,a,b) #define IDirect3DRMDevice_DeleteUpdateCallback(p,a,b) (p)->lpVtbl->DeleteUpdateCallback(p,a,b) #define IDirect3DRMDevice_SetBufferCount(p,a) (p)->lpVtbl->SetBufferCount(p,a) #define IDirect3DRMDevice_GetBufferCount(p) (p)->lpVtbl->GetBufferCount(p) #define IDirect3DRMDevice_SetDither(p,a) (p)->lpVtbl->SetDither(p,a) #define IDirect3DRMDevice_SetShades(p,a) (p)->lpVtbl->SetShades(p,a) #define IDirect3DRMDevice_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a) #define IDirect3DRMDevice_SetTextureQuality(p,a) (p)->lpVtbl->SetTextureQuality(p,a) #define IDirect3DRMDevice_GetViewports(p,a) (p)->lpVtbl->GetViewports(p,a) #define IDirect3DRMDevice_GetDither(p) (p)->lpVtbl->GetDither(p) #define IDirect3DRMDevice_GetShades(p) (p)->lpVtbl->GetShades(p) #define IDirect3DRMDevice_GetHeight(p) (p)->lpVtbl->GetHeight(p) #define IDirect3DRMDevice_GetWidth(p) (p)->lpVtbl->GetWidth(p) #define IDirect3DRMDevice_GetTrianglesDrawn(p) (p)->lpVtbl->GetTrianglesDrawn(p) #define IDirect3DRMDevice_GetWireframeOptions(p) (p)->lpVtbl->GetWireframeOptions(p) #define IDirect3DRMDevice_GetQuality(p) (p)->lpVtbl->GetQuality(p) #define IDirect3DRMDevice_GetColorModel(p) (p)->lpVtbl->GetColorModel(p) #define IDirect3DRMDevice_GetTextureQuality(p) (p)->lpVtbl->GetTextureQuality(p) #define IDirect3DRMDevice_GetDirect3DDevice(p,a) (p)->lpVtbl->GetDirect3DDevice(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMDevice_AddRef(p) (p)->AddRef() #define IDirect3DRMDevice_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMDevice_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMDevice_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMDevice_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMDevice_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMDevice_GetAppData(p) (p)->GetAppData() #define IDirect3DRMDevice_SetName(p,a) (p)->SetName(a) #define IDirect3DRMDevice_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMDevice_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMDevice methods ***/ #define IDirect3DRMDevice_Init(p,a,b) (p)->Init(a,b) #define IDirect3DRMDevice_InitFromD3D(p,a,b) (p)->InitFromD3D(a,b) #define IDirect3DRMDevice_InitFromClipper(p,a,b,c,d) (p)->InitFromClipper(a,b,c,d) #define IDirect3DRMDevice_Update(p) (p)->Update() #define IDirect3DRMDevice_AddUpdateCallback(p,a,b) (p)->AddUpdateCallback(a,b) #define IDirect3DRMDevice_DeleteUpdateCallback(p,a,b) (p)->DeleteUpdateCallback(a,b) #define IDirect3DRMDevice_SetBufferCount(p,a) (p)->SetBufferCount(a) #define IDirect3DRMDevice_GetBufferCount(p) (p)->GetBufferCount() #define IDirect3DRMDevice_SetDither(p,a) (p)->SetDither(a) #define IDirect3DRMDevice_SetShades(p,a) (p)->SetShades(a) #define IDirect3DRMDevice_SetQuality(p,a) (p)->SetQuality(a) #define IDirect3DRMDevice_SetTextureQuality(p,a) (p)->SetTextureQuality(a) #define IDirect3DRMDevice_GetViewports(p,a) (p)->GetViewports(a) #define IDirect3DRMDevice_GetDither(p) (p)->GetDither() #define IDirect3DRMDevice_GetShades(p) (p)->GetShades() #define IDirect3DRMDevice_GetHeight(p) (p)->GetHeight() #define IDirect3DRMDevice_GetWidth(p) (p)->GetWidth() #define IDirect3DRMDevice_GetTrianglesDrawn(p) (p)->GetTrianglesDrawn() #define IDirect3DRMDevice_GetWireframeOptions(p) (p)->GetWireframeOptions() #define IDirect3DRMDevice_GetQuality(p) (p)->GetQuality() #define IDirect3DRMDevice_GetColorModel(p) (p)->GetColorModel() #define IDirect3DRMDevice_GetTextureQuality(p) (p)->GetTextureQuality() #define IDirect3DRMDevice_GetDirect3DDevice(p,a) (p)->GetDirect3DDevice(a) #endif /***************************************************************************** * IDirect3DRMDevice2 interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetClassName #endif #define INTERFACE IDirect3DRMDevice2 DECLARE_INTERFACE_(IDirect3DRMDevice2,IDirect3DRMDevice) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMDevice methods ***/ STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE; STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE; STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE; STDMETHOD(Update)(THIS) PURE; STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE; STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE; STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE; STDMETHOD(SetDither)(THIS_ BOOL) PURE; STDMETHOD(SetShades)(THIS_ DWORD) PURE; STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE; STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE; STDMETHOD_(BOOL, GetDither)(THIS) PURE; STDMETHOD_(DWORD, GetShades)(THIS) PURE; STDMETHOD_(DWORD, GetHeight)(THIS) PURE; STDMETHOD_(DWORD, GetWidth)(THIS) PURE; STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE; STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE; STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE; STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE; STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE; /*** IDirect3DRMDevice2 methods ***/ STDMETHOD(InitFromD3D2)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *device) PURE; STDMETHOD(InitFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface) PURE; STDMETHOD(SetRenderMode)(THIS_ DWORD flags) PURE; STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE; STDMETHOD(GetDirect3DDevice2)(THIS_ IDirect3DDevice2 **device) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMDevice2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMDevice2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMDevice2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMDevice2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMDevice2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMDevice2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMDevice2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMDevice2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMDevice2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMDevice2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMDevice methods ***/ #define IDirect3DRMDevice2_Init(p,a,b) (p)->lpVtbl->Init(p,a,b) #define IDirect3DRMDevice2_InitFromD3D(p,a,b) (p)->lpVtbl->InitFromD3D(p,a,b) #define IDirect3DRMDevice2_InitFromClipper(p,a,b,c,d) (p)->lpVtbl->InitFromClipper(p,a,b,c,d) #define IDirect3DRMDevice2_Update(p) (p)->lpVtbl->Update(p) #define IDirect3DRMDevice2_AddUpdateCallback(p,a,b) (p)->lpVtbl->AddUpdateCallback(p,a,b) #define IDirect3DRMDevice2_DeleteUpdateCallback(p,a,b) (p)->lpVtbl->DeleteUpdateCallback(p,a,b) #define IDirect3DRMDevice2_SetBufferCount(p,a) (p)->lpVtbl->SetBufferCount(p,a) #define IDirect3DRMDevice2_GetBufferCount(p) (p)->lpVtbl->GetBufferCount(p) #define IDirect3DRMDevice2_SetDither(p,a) (p)->lpVtbl->SetDither(p,a) #define IDirect3DRMDevice2_SetShades(p,a) (p)->lpVtbl->SetShades(p,a) #define IDirect3DRMDevice2_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a) #define IDirect3DRMDevice2_SetTextureQuality(p,a) (p)->lpVtbl->SetTextureQuality(p,a) #define IDirect3DRMDevice2_GetViewports(p,a) (p)->lpVtbl->GetViewports(p,a) #define IDirect3DRMDevice2_GetDither(p) (p)->lpVtbl->GetDither(p) #define IDirect3DRMDevice2_GetShades(p) (p)->lpVtbl->GetShades(p) #define IDirect3DRMDevice2_GetHeight(p) (p)->lpVtbl->GetHeight(p) #define IDirect3DRMDevice2_GetWidth(p) (p)->lpVtbl->GetWidth(p) #define IDirect3DRMDevice2_GetTrianglesDrawn(p) (p)->lpVtbl->GetTrianglesDrawn(p) #define IDirect3DRMDevice2_GetWireframeOptions(p) (p)->lpVtbl->GetWireframeOptions(p) #define IDirect3DRMDevice2_GetQuality(p) (p)->lpVtbl->GetQuality(p) #define IDirect3DRMDevice2_GetColorModel(p) (p)->lpVtbl->GetColorModel(p) #define IDirect3DRMDevice2_GetTextureQuality(p) (p)->lpVtbl->GetTextureQuality(p) #define IDirect3DRMDevice2_GetDirect3DDevice(p,a) (p)->lpVtbl->GetDirect3DDevice(p,a) /*** IDirect3DRMDevice2 methods ***/ #define IDirect3DRMDevice2_InitFromD3D2(p,a,b) (p)->lpVtbl->InitFromD3D2(p,a,b) #define IDirect3DRMDevice2_InitFromSurface(p,a,b,c) (p)->lpVtbl->InitFromSurface(p,a,b,c) #define IDirect3DRMDevice2_SetRenderMode(p,a) (p)->lpVtbl->SetRenderMode(p,a) #define IDirect3DRMDevice2_GetRenderMode(p) (p)->lpVtbl->GetRenderMode(p) #define IDirect3DRMDevice2_GetDirect3DDevice2(p,a) (p)->lpVtbl->GetDirect3DDevice2(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMDevice2_AddRef(p) (p)->AddRef() #define IDirect3DRMDevice2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMDevice2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMDevice2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMDevice2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMDevice2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMDevice2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMDevice2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMDevice2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMDevice2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMDevice methods ***/ #define IDirect3DRMDevice2_Init(p,a,b) (p)->Init(a,b) #define IDirect3DRMDevice2_InitFromD3D(p,a,b) (p)->InitFromD3D(a,b) #define IDirect3DRMDevice2_InitFromClipper(p,a,b,c,d) (p)->InitFromClipper(a,b,c,d) #define IDirect3DRMDevice2_Update(p) (p)->Update() #define IDirect3DRMDevice2_AddUpdateCallback(p,a,b) (p)->AddUpdateCallback(a,b) #define IDirect3DRMDevice2_DeleteUpdateCallback(p,a,b) (p)->DeleteUpdateCallback(a,b) #define IDirect3DRMDevice2_SetBufferCount(p,a) (p)->SetBufferCount(a) #define IDirect3DRMDevice2_GetBufferCount(p) (p)->GetBufferCount() #define IDirect3DRMDevice2_SetDither(p,a) (p)->SetDither(a) #define IDirect3DRMDevice2_SetShades(p,a) (p)->SetShades(a) #define IDirect3DRMDevice2_SetQuality(p,a) (p)->SetQuality(a) #define IDirect3DRMDevice2_SetTextureQuality(p,a) (p)->SetTextureQuality(a) #define IDirect3DRMDevice2_GetViewports(p,a) (p)->GetViewports(a) #define IDirect3DRMDevice2_GetDither(p) (p)->GetDither() #define IDirect3DRMDevice2_GetShades(p) (p)->GetShades() #define IDirect3DRMDevice2_GetHeight(p) (p)->GetHeight() #define IDirect3DRMDevice2_GetWidth(p) (p)->GetWidth() #define IDirect3DRMDevice2_GetTrianglesDrawn(p) (p)->GetTrianglesDrawn() #define IDirect3DRMDevice2_GetWireframeOptions(p) (p)->GetWireframeOptions() #define IDirect3DRMDevice2_GetQuality(p) (p)->GetQuality() #define IDirect3DRMDevice2_GetColorModel(p) (p)->GetColorModel() #define IDirect3DRMDevice2_GetTextureQuality(p) (p)->GetTextureQuality() #define IDirect3DRMDevice2_GetDirect3DDevice(p,a) (p)->GetDirect3DDevice(a) /*** IDirect3DRMDevice2 methods ***/ #define IDirect3DRMDevice2_InitFromD3D2(p,a,b) (p)->InitFromD3D2(a,b) #define IDirect3DRMDevice2_InitFromSurface(p,a,b,c) (p)->InitFromSurface(a,b,c) #define IDirect3DRMDevice2_SetRenderMode(p,a) (p)->SetRenderMode(a) #define IDirect3DRMDevice2_GetRenderMode(p) (p)->GetRenderMode() #define IDirect3DRMDevice2_GetDirect3DDevice2(p,a) (p)->GetDirect3DDevice2(a) #endif /***************************************************************************** * IDirect3DRMDevice3 interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetClassName #endif #define INTERFACE IDirect3DRMDevice3 DECLARE_INTERFACE_(IDirect3DRMDevice3,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMDevice methods ***/ STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE; STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE; STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE; STDMETHOD(Update)(THIS) PURE; STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE; STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE; STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE; STDMETHOD(SetDither)(THIS_ BOOL) PURE; STDMETHOD(SetShades)(THIS_ DWORD) PURE; STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE; STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE; STDMETHOD_(BOOL, GetDither)(THIS) PURE; STDMETHOD_(DWORD, GetShades)(THIS) PURE; STDMETHOD_(DWORD, GetHeight)(THIS) PURE; STDMETHOD_(DWORD, GetWidth)(THIS) PURE; STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE; STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE; STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE; STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE; STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE; /*** IDirect3DRMDevice2 methods ***/ STDMETHOD(InitFromD3D2)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *device) PURE; STDMETHOD(InitFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface) PURE; STDMETHOD(SetRenderMode)(THIS_ DWORD flags) PURE; STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE; STDMETHOD(GetDirect3DDevice2)(THIS_ IDirect3DDevice2 **device) PURE; /*** IDirect3DRMDevice3 methods ***/ STDMETHOD(FindPreferredTextureFormat)(THIS_ DWORD BitDepths, DWORD flags, DDPIXELFORMAT *format) PURE; STDMETHOD(RenderStateChange)(THIS_ D3DRENDERSTATETYPE drsType, DWORD val, DWORD flags) PURE; STDMETHOD(LightStateChange)(THIS_ D3DLIGHTSTATETYPE drsType, DWORD val, DWORD flags) PURE; STDMETHOD(GetStateChangeOptions)(THIS_ DWORD state_class, DWORD state_idx, DWORD *flags) PURE; STDMETHOD(SetStateChangeOptions)(THIS_ DWORD StateClass, DWORD StateNum, DWORD flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMDevice3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMDevice3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMDevice3_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMDevice3_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMDevice3_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMDevice3_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMDevice3_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMDevice3_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMDevice3_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMDevice3_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMDevice methods ***/ #define IDirect3DRMDevice3_Init(p,a,b) (p)->lpVtbl->Init(p,a,b) #define IDirect3DRMDevice3_InitFromD3D(p,a,b) (p)->lpVtbl->InitFromD3D(p,a,b) #define IDirect3DRMDevice3_InitFromClipper(p,a,b,c,d) (p)->lpVtbl->InitFromClipper(p,a,b,c,d) #define IDirect3DRMDevice3_Update(p) (p)->lpVtbl->Update(p) #define IDirect3DRMDevice3_AddUpdateCallback(p,a,b) (p)->lpVtbl->AddUpdateCallback(p,a,b) #define IDirect3DRMDevice3_DeleteUpdateCallback(p,a,b) (p)->lpVtbl->DeleteUpdateCallback(p,a,b) #define IDirect3DRMDevice3_SetBufferCount(p,a) (p)->lpVtbl->SetBufferCount(p,a) #define IDirect3DRMDevice3_GetBufferCount(p) (p)->lpVtbl->GetBufferCount(p) #define IDirect3DRMDevice3_SetDither(p,a) (p)->lpVtbl->SetDither(p,a) #define IDirect3DRMDevice3_SetShades(p,a) (p)->lpVtbl->SetShades(p,a) #define IDirect3DRMDevice3_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a) #define IDirect3DRMDevice3_SetTextureQuality(p,a) (p)->lpVtbl->SetTextureQuality(p,a) #define IDirect3DRMDevice3_GetViewports(p,a) (p)->lpVtbl->GetViewports(p,a) #define IDirect3DRMDevice3_GetDither(p) (p)->lpVtbl->GetDither(p) #define IDirect3DRMDevice3_GetShades(p) (p)->lpVtbl->GetShades(p) #define IDirect3DRMDevice3_GetHeight(p) (p)->lpVtbl->GetHeight(p) #define IDirect3DRMDevice3_GetWidth(p) (p)->lpVtbl->GetWidth(p) #define IDirect3DRMDevice3_GetTrianglesDrawn(p) (p)->lpVtbl->GetTrianglesDrawn(p) #define IDirect3DRMDevice3_GetWireframeOptions(p) (p)->lpVtbl->GetWireframeOptions(p) #define IDirect3DRMDevice3_GetQuality(p) (p)->lpVtbl->GetQuality(p) #define IDirect3DRMDevice3_GetColorModel(p) (p)->lpVtbl->GetColorModel(p) #define IDirect3DRMDevice3_GetTextureQuality(p) (p)->lpVtbl->GetTextureQuality(p) #define IDirect3DRMDevice3_GetDirect3DDevice(p,a) (p)->lpVtbl->GetDirect3DDevice(p,a) /*** IDirect3DRMDevice2 methods ***/ #define IDirect3DRMDevice3_InitFromD3D2(p,a,b) (p)->lpVtbl->InitFromD3D2(p,a,b) #define IDirect3DRMDevice3_InitFromSurface(p,a,b,c) (p)->lpVtbl->InitFromSurface(p,a,b,c) #define IDirect3DRMDevice3_SetRenderMode(p,a) (p)->lpVtbl->SetRenderMode(p,a) #define IDirect3DRMDevice3_GetRenderMode(p) (p)->lpVtbl->GetRenderMode(p) #define IDirect3DRMDevice3_GetDirect3DDevice2(p,a) (p)->lpVtbl->GetDirect3DDevice2(p,a) /*** IDirect3DRMDevice3 methods ***/ #define IDirect3DRMDevice3_FindPreferredTextureFormat(p,a,b,c) (p)->lpVtbl->FindPreferredTextureFormat(p,a,b,c) #define IDirect3DRMDevice3_RenderStateChange(p,a,b,c) (p)->lpVtbl->RenderStateChange(p,a,b,c) #define IDirect3DRMDevice3_LightStateChange(p,a,b,c) (p)->lpVtbl->LightStateChange(p,a,b,c) #define IDirect3DRMDevice3_GetStateChangeOptions(p,a,b,c) (p)->lpVtbl->GetStateChangeOptions(p,a,b,c) #define IDirect3DRMDevice3_SetStateChangeOptions(p,a,b,c) (p)->lpVtbl->SetStateChangeOptions(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DRMDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMDevice3_AddRef(p) (p)->AddRef() #define IDirect3DRMDevice3_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMDevice3_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMDevice3_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMDevice3_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMDevice3_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMDevice3_GetAppData(p) (p)->GetAppData() #define IDirect3DRMDevice3_SetName(p,a) (p)->SetName(a) #define IDirect3DRMDevice3_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMDevice3_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMDevice methods ***/ #define IDirect3DRMDevice3_Init(p,a,b) (p)->Init(a,b) #define IDirect3DRMDevice3_InitFromD3D(p,a,b) (p)->InitFromD3D(a,b) #define IDirect3DRMDevice3_InitFromClipper(p,a,b,c,d) (p)->InitFromClipper(a,b,c,d) #define IDirect3DRMDevice3_Update(p) (p)->Update() #define IDirect3DRMDevice3_AddUpdateCallback(p,a,b) (p)->AddUpdateCallback(a,b) #define IDirect3DRMDevice3_DeleteUpdateCallback(p,a,b) (p)->DeleteUpdateCallback(a,b) #define IDirect3DRMDevice3_SetBufferCount(p,a) (p)->SetBufferCount(a) #define IDirect3DRMDevice3_GetBufferCount(p) (p)->GetBufferCount() #define IDirect3DRMDevice3_SetDither(p,a) (p)->SetDither(a) #define IDirect3DRMDevice3_SetShades(p,a) (p)->SetShades(a) #define IDirect3DRMDevice3_SetQuality(p,a) (p)->SetQuality(a) #define IDirect3DRMDevice3_SetTextureQuality(p,a) (p)->SetTextureQuality(a) #define IDirect3DRMDevice3_GetViewports(p,a) (p)->GetViewports(a) #define IDirect3DRMDevice3_GetDither(p) (p)->GetDither() #define IDirect3DRMDevice3_GetShades(p) (p)->GetShades() #define IDirect3DRMDevice3_GetHeight(p) (p)->GetHeight() #define IDirect3DRMDevice3_GetWidth(p) (p)->GetWidth() #define IDirect3DRMDevice3_GetTrianglesDrawn(p) (p)->GetTrianglesDrawn() #define IDirect3DRMDevice3_GetWireframeOptions(p) (p)->GetWireframeOptions() #define IDirect3DRMDevice3_GetQuality(p) (p)->GetQuality() #define IDirect3DRMDevice3_GetColorModel(p) (p)->GetColorModel() #define IDirect3DRMDevice3_GetTextureQuality(p) (p)->GetTextureQuality() #define IDirect3DRMDevice3_GetDirect3DDevice(p,a) (p)->GetDirect3DDevice(a) /*** IDirect3DRMDevice2 methods ***/ #define IDirect3DRMDevice3_InitFromD3D2(p,a,b) (p)->InitFromD3D2(a,b) #define IDirect3DRMDevice3_InitFromSurface(p,a,b,c) (p)->InitFromSurface(a,b,c) #define IDirect3DRMDevice3_SetRenderMode(p,a) (p)->SetRenderMode(a) #define IDirect3DRMDevice3_GetRenderMode(p) (p)->GetRenderMode() #define IDirect3DRMDevice3_GetDirect3DDevice2(p,a) (p)->GetDirect3DDevice2(a) /*** IDirect3DRMDevice3 methods ***/ #define IDirect3DRMDevice3_FindPreferredTextureFormat(p,a,b,c) (p)->FindPreferredTextureFormat(a,b,c) #define IDirect3DRMDevice3_RenderStateChange(p,a,b,c) (p)->RenderStateChange(a,b,c) #define IDirect3DRMDevice3_LightStateChange(p,a,b,c) (p)->LightStateChange(a,b,c) #define IDirect3DRMDevice3_GetStateChangeOptions(p,a,b,c) (p)->GetStateChangeOptions(a,b,c) #define IDirect3DRMDevice3_SetStateChangeOptions(p,a,b,c) (p)->SetStateChangeOptions(a,b,c) #endif /***************************************************************************** * IDirect3DRMViewport interface */ #define INTERFACE IDirect3DRMViewport DECLARE_INTERFACE_(IDirect3DRMViewport,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMViewport methods ***/ STDMETHOD(Init) (THIS_ IDirect3DRMDevice *device, struct IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height) PURE; STDMETHOD(Clear)(THIS) PURE; STDMETHOD(Render)(THIS_ struct IDirect3DRMFrame *frame) PURE; STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE; STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE; STDMETHOD(SetField)(THIS_ D3DVALUE) PURE; STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE; STDMETHOD(SetCamera)(THIS_ struct IDirect3DRMFrame *camera) PURE; STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE; STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE; STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE; STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE; STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE; STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE; STDMETHOD(GetCamera)(THIS_ struct IDirect3DRMFrame **camera) PURE; STDMETHOD(GetDevice)(THIS_ IDirect3DRMDevice **device) PURE; STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE; STDMETHOD(Pick)(THIS_ LONG x, LONG y, struct IDirect3DRMPickedArray **visuals) PURE; STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE; STDMETHOD_(LONG, GetX)(THIS) PURE; STDMETHOD_(LONG, GetY)(THIS) PURE; STDMETHOD_(DWORD, GetWidth)(THIS) PURE; STDMETHOD_(DWORD, GetHeight)(THIS) PURE; STDMETHOD_(D3DVALUE, GetField)(THIS) PURE; STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE; STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE; STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE; STDMETHOD(GetDirect3DViewport)(THIS_ IDirect3DViewport **viewport) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMViewport_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMViewport_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMViewport_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMViewport_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMViewport_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMViewport_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMViewport_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMViewport_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMViewport_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMViewport_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMViewport methods ***/ #define IDirect3DRMViewport_Init(p,a,b,c,d,e,f) (p)->lpVtbl->Init(p,a,b,c,d,e,f) #define IDirect3DRMViewport_Clear(p) (p)->lpVtbl->Clear(p) #define IDirect3DRMViewport_Render(p,a) (p)->lpVtbl->Render(p,a) #define IDirect3DRMViewport_SetFront(p,a) (p)->lpVtbl->SetFront(p,a) #define IDirect3DRMViewport_SetBack(p,a) (p)->lpVtbl->SetBack(p,a) #define IDirect3DRMViewport_SetField(p,a) (p)->lpVtbl->SetField(p,a) #define IDirect3DRMViewport_SetUniformScaling(p,a) (p)->lpVtbl->SetUniformScaling(p,a) #define IDirect3DRMViewport_SetCamera(p,a) (p)->lpVtbl->SetCamera(p,a) #define IDirect3DRMViewport_SetProjection(p,a) (p)->lpVtbl->SetProjection(p,a) #define IDirect3DRMViewport_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b) #define IDirect3DRMViewport_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b) #define IDirect3DRMViewport_Configure(p,a,b,c,d) (p)->lpVtbl->Configure(p,a,b,c,d) #define IDirect3DRMViewport_ForceUpdate(p,a,b,c,d) (p)->lpVtbl->ForceUpdate(p,a,b,c,d) #define IDirect3DRMViewport_SetPlane(p,a,b,c,d) (p)->lpVtbl->SetPlane(p,a,b,c,d) #define IDirect3DRMViewport_GetCamera(p,a) (p)->lpVtbl->GetCamera(p,a) #define IDirect3DRMViewport_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DRMViewport_GetPlane(p,a,b,c,d) (p)->lpVtbl->GetPlane(p,a,b,c,d) #define IDirect3DRMViewport_Pick(p,a,b,c) (p)->lpVtbl->Pick(p,a,b,c) #define IDirect3DRMViewport_GetUniformScaling(p) (p)->lpVtbl->GetUniformScaling(p) #define IDirect3DRMViewport_GetX(p) (p)->lpVtbl->GetX(p) #define IDirect3DRMViewport_GetY(p) (p)->lpVtbl->GetY(p) #define IDirect3DRMViewport_GetWidth(p) (p)->lpVtbl->GetWidth(p) #define IDirect3DRMViewport_GetHeight(p) (p)->lpVtbl->GetHeight(p) #define IDirect3DRMViewport_GetField(p) (p)->lpVtbl->GetField(p) #define IDirect3DRMViewport_GetBack(p) (p)->lpVtbl->GetBack(p) #define IDirect3DRMViewport_GetFront(p) (p)->lpVtbl->GetFront(p) #define IDirect3DRMViewport_GetProjection(p) (p)->lpVtbl->GetProjection(p) #define IDirect3DRMViewport_GetDirect3DViewport(p,a) (p)->lpVtbl->GetDirect3DViewport(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMViewport_AddRef(p) (p)->AddRef() #define IDirect3DRMViewport_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMViewport_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMViewport_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMViewport_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMViewport_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMViewport_GetAppData(p) (p)->GetAppData() #define IDirect3DRMViewport_SetName(p,a) (p)->SetName(a) #define IDirect3DRMViewport_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMViewport_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMViewport methods ***/ #define IDirect3DRMViewport_Init(p,a,b,c,d,e,f) (p)->Init(a,b,c,d,e,f) #define IDirect3DRMViewport_Clear(p) (p)->Clear() #define IDirect3DRMViewport_Render(p,a) (p)->Render(a) #define IDirect3DRMViewport_SetFront(p,a) (p)->SetFront(a) #define IDirect3DRMViewport_SetBack(p,a) (p)->SetBack(a) #define IDirect3DRMViewport_SetField(p,a) (p)->SetField(a) #define IDirect3DRMViewport_SetUniformScaling(p,a) (p)->SetUniformScaling(a) #define IDirect3DRMViewport_SetCamera(p,a) (p)->SetCamera(a) #define IDirect3DRMViewport_SetProjection(p,a) (p)->SetProjection(a) #define IDirect3DRMViewport_Transform(p,a,b) (p)->Transform(a,b) #define IDirect3DRMViewport_InverseTransform(p,a,b) (p)->InverseTransform(a,b) #define IDirect3DRMViewport_Configure(p,a,b,c,d) (p)->Configure(a,b,c,d) #define IDirect3DRMViewport_ForceUpdate(p,a,b,c,d) (p)->ForceUpdate(a,b,c,d) #define IDirect3DRMViewport_SetPlane(p,a,b,c,d) (p)->SetPlane(a,b,c,d) #define IDirect3DRMViewport_GetCamera(p,a) (p)->GetCamera(a) #define IDirect3DRMViewport_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DRMViewport_GetPlane(p,a,b,c,d) (p)->GetPlane(a,b,c,d) #define IDirect3DRMViewport_Pick(p,a,b,c) (p)->Pick(a,b,c) #define IDirect3DRMViewport_GetUniformScaling(p) (p)->GetUniformScaling() #define IDirect3DRMViewport_GetX(p) (p)->GetX() #define IDirect3DRMViewport_GetY(p) (p)->GetY() #define IDirect3DRMViewport_GetWidth(p) (p)->GetWidth() #define IDirect3DRMViewport_GetHeight(p) (p)->GetHeight() #define IDirect3DRMViewport_GetField(p) (p)->GetField() #define IDirect3DRMViewport_GetBack(p) (p)->GetBack() #define IDirect3DRMViewport_GetFront(p) (p)->GetFront() #define IDirect3DRMViewport_GetProjection(p) (p)->GetProjection() #define IDirect3DRMViewport_GetDirect3DViewport(p,a) (p)->GetDirect3DViewport(a) #endif /***************************************************************************** * IDirect3DRMViewport2 interface */ #define INTERFACE IDirect3DRMViewport2 DECLARE_INTERFACE_(IDirect3DRMViewport2,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMViewport2 methods ***/ STDMETHOD(Init) (THIS_ IDirect3DRMDevice3 *device, struct IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height) PURE; STDMETHOD(Clear)(THIS_ DWORD flags) PURE; STDMETHOD(Render)(THIS_ struct IDirect3DRMFrame3 *frame) PURE; STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE; STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE; STDMETHOD(SetField)(THIS_ D3DVALUE) PURE; STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE; STDMETHOD(SetCamera)(THIS_ struct IDirect3DRMFrame3 *camera) PURE; STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE; STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE; STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE; STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE; STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE; STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE; STDMETHOD(GetCamera)(THIS_ struct IDirect3DRMFrame3 **camera) PURE; STDMETHOD(GetDevice)(THIS_ IDirect3DRMDevice3 **device) PURE; STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE; STDMETHOD(Pick)(THIS_ LONG x, LONG y, struct IDirect3DRMPickedArray **visuals) PURE; STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE; STDMETHOD_(LONG, GetX)(THIS) PURE; STDMETHOD_(LONG, GetY)(THIS) PURE; STDMETHOD_(DWORD, GetWidth)(THIS) PURE; STDMETHOD_(DWORD, GetHeight)(THIS) PURE; STDMETHOD_(D3DVALUE, GetField)(THIS) PURE; STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE; STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE; STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE; STDMETHOD(GetDirect3DViewport)(THIS_ IDirect3DViewport **viewport) PURE; STDMETHOD(TransformVectors)(THIS_ DWORD vector_count, D3DRMVECTOR4D *dst_vectors, D3DVECTOR *src_vectors) PURE; STDMETHOD(InverseTransformVectors)(THIS_ DWORD vector_count, D3DVECTOR *dst_vectors, D3DRMVECTOR4D *src_vectors) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMViewport2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMViewport2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMViewport_2Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMViewport2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMViewport2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMViewport2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMViewport2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMViewport2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMViewport2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMViewport2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMViewport2 methods ***/ #define IDirect3DRMViewport2_Init(p,a,b,c,d,e,f) (p)->lpVtbl->Init(p,a,b,c,d,e,f) #define IDirect3DRMViewport2_Clear(p,a) (p)->lpVtbl->Clear(p,a) #define IDirect3DRMViewport2_Render(p,a) (p)->lpVtbl->Render(p,a) #define IDirect3DRMViewport2_SetFront(p,a) (p)->lpVtbl->SetFront(p,a) #define IDirect3DRMViewport2_SetBack(p,a) (p)->lpVtbl->SetBack(p,a) #define IDirect3DRMViewport2_SetField(p,a) (p)->lpVtbl->SetField(p,a) #define IDirect3DRMViewport2_SetUniformScaling(p,a) (p)->lpVtbl->SetUniformScaling(p,a) #define IDirect3DRMViewport2_SetCamera(p,a) (p)->lpVtbl->SetCamera(p,a) #define IDirect3DRMViewport2_SetProjection(p,a) (p)->lpVtbl->SetProjection(p,a) #define IDirect3DRMViewport2_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b) #define IDirect3DRMViewport2_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b) #define IDirect3DRMViewport2_Configure(p,a,b,c,d) (p)->lpVtbl->Configure(p,a,b,c,d) #define IDirect3DRMViewport2_ForceUpdate(p,a,b,c,d) (p)->lpVtbl->ForceUpdate(p,a,b,c,d) #define IDirect3DRMViewport2_SetPlane(p,a,b,c,d) (p)->lpVtbl->SetPlane(p,a,b,c,d) #define IDirect3DRMViewport2_GetCamera(p,a) (p)->lpVtbl->GetCamera(p,a) #define IDirect3DRMViewport2_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DRMViewport2_GetPlane(p,a,b,c,d) (p)->lpVtbl->GetPlane(p,a,b,c,d) #define IDirect3DRMViewport2_Pick(p,a,b,c) (p)->lpVtbl->Pick(p,a,b,c) #define IDirect3DRMViewport2_GetUniformScaling(p) (p)->lpVtbl->GetUniformScaling(p) #define IDirect3DRMViewport2_GetX(p) (p)->lpVtbl->GetX(p) #define IDirect3DRMViewport2_GetY(p) (p)->lpVtbl->GetY(p) #define IDirect3DRMViewport2_GetWidth(p) (p)->lpVtbl->GetWidth(p) #define IDirect3DRMViewport2_GetHeight(p) (p)->lpVtbl->GetHeight(p) #define IDirect3DRMViewport2_GetField(p) (p)->lpVtbl->GetField(p) #define IDirect3DRMViewport2_GetBack(p) (p)->lpVtbl->GetBack(p) #define IDirect3DRMViewport2_GetFront(p) (p)->lpVtbl->GetFront(p) #define IDirect3DRMViewport2_GetProjection(p) (p)->lpVtbl->GetProjection(p) #define IDirect3DRMViewport2_GetDirect3DViewport(p,a) (p)->lpVtbl->GetDirect3DViewport(p,a) #define IDirect3DRMViewport2_TransformVectors(p,a,b,c) (p)->lpVtbl->TransformVectors(p,a,b,c) #define IDirect3DRMViewport2_InverseTransformVectors(p,a,b,c) (p)->lpVtbl->InverseTransformVectors(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DRMViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMViewport2_AddRef(p) (p)->AddRef() #define IDirect3DRMViewport2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMViewport2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMViewport2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMViewport2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMViewport2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMViewport2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMViewport2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMViewport2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMViewport2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMViewport2 methods ***/ #define IDirect3DRMViewport2_Init(p,a,b,c,d,e,f) (p)->Init(a,b,c,d,e,f) #define IDirect3DRMViewport2_Clear(p) (p)->Clear() #define IDirect3DRMViewport2_Render(p,a) (p)->Render(a) #define IDirect3DRMViewport2_SetFront(p,a) (p)->SetFront(a) #define IDirect3DRMViewport2_SetBack(p,a) (p)->SetBack(a) #define IDirect3DRMViewport2_SetField(p,a) (p)->SetField(a) #define IDirect3DRMViewport2_SetUniformScaling(p,a) (p)->SetUniformScaling(a) #define IDirect3DRMViewport2_SetCamera(p,a) (p)->SetCamera(a) #define IDirect3DRMViewport2_SetProjection(p,a) (p)->SetProjection(a) #define IDirect3DRMViewport2_Transform(p,a,b) (p)->Transform(a,b) #define IDirect3DRMViewport2_InverseTransform(p,a,b) (p)->InverseTransform(a,b) #define IDirect3DRMViewport2_Configure(p,a,b,c,d) (p)->Configure(a,b,c,d) #define IDirect3DRMViewport2_ForceUpdate(p,a,b,c,d) (p)->ForceUpdate(a,b,c,d) #define IDirect3DRMViewport2_SetPlane(p,a,b,c,d) (p)->SetPlane(a,b,c,d) #define IDirect3DRMViewport2_GetCamera(p,a) (p)->GetCamera(a) #define IDirect3DRMViewport2_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DRMViewport2_GetPlane(p,a,b,c,d) (p)->GetPlane(a,b,c,d) #define IDirect3DRMViewport2_Pick(p,a,b,c) (p)->Pick(a,b,c) #define IDirect3DRMViewport2_GetUniformScaling(p) (p)->GetUniformScaling() #define IDirect3DRMViewport2_GetX(p) (p)->GetX() #define IDirect3DRMViewport2_GetY(p) (p)->GetY() #define IDirect3DRMViewport2_GetWidth(p) (p)->GetWidth() #define IDirect3DRMViewport2_GetHeight(p) (p)->GetHeight() #define IDirect3DRMViewport2_GetField(p) (p)->GetField() #define IDirect3DRMViewport2_GetBack(p) (p)->GetBack() #define IDirect3DRMViewport2_GetFront(p) (p)->GetFront() #define IDirect3DRMViewport2_GetProjection(p) (p)->GetProjection() #define IDirect3DRMViewport2_GetDirect3DViewport(p,a) (p)->GetDirect3DViewport(a) #define IDirect3DRMViewport2_TransformVectors(p,a,b,c) (p)->TransformVectors(a,b,c) #define IDirect3DRMViewport2_InverseTransformVectors(p,a,b,c) (p)->InverseTransformVectors(a,b,c) #endif /***************************************************************************** * IDirect3DRMFrame interface */ #define INTERFACE IDirect3DRMFrame DECLARE_INTERFACE_(IDirect3DRMFrame,IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMFrame methods ***/ STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame *child) PURE; STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE; STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE; STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE; STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; STDMETHOD(AddVisual)(THIS_ IDirect3DRMVisual *visual) PURE; STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE; STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE; STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE; STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame **parent) PURE; STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_position) PURE; STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE; STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame **scene) PURE; STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE; STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE; STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE; STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE; STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE; STDMETHOD(GetVisuals)(THIS_ struct IDirect3DRMVisualArray **visuals) PURE; STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE; STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx)PURE; STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame *target, IDirect3DRMFrame *reference, D3DRMFRAMECONSTRAINT constraint) PURE; STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE; STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame *child) PURE; STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE; STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteVisual)(THIS_ IDirect3DRMVisual *visual) PURE; STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE; STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE; STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE; STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE; STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE; STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE; STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture *texture) PURE; STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE; STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE; STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE; STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE; STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE; STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE; STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE; STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE; STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE; STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMFrame_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMFrame_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFrame_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMFrame_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMFrame_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMFrame_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMFrame_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMFrame_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMFrame_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMFrame_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMFrame methods ***/ #define IDirect3DRMFrame_AddChild(p,a) (p)->lpVtbl->AddChild(p,a) #define IDirect3DRMFrame_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DRMFrame_AddMoveCallback(p,a,b) (p)->lpVtbl->AddMoveCallback(p,a,b) #define IDirect3DRMFrame_AddTransform(p,a,b) (p)->lpVtbl->AddTransform(p,a,b) #define IDirect3DRMFrame_AddTranslation(p,a,b,c,d) (p)->lpVtbl->AddTranslation(p,a,b,c,d) #define IDirect3DRMFrame_AddScale(p,a,b,c,d) (p)->lpVtbl->AddScale(p,a,b,c,d) #define IDirect3DRMFrame_AddRotation(p,a,b,c,d,e) (p)->lpVtbl->AddRotation(p,a,b,c,d,e) #define IDirect3DRMFrame_AddVisual(p,a) (p)->lpVtbl->AddVisual(p,a) #define IDirect3DRMFrame_GetChildren(p,a) (p)->lpVtbl->GetChildren(p,a) #define IDirect3DRMFrame_GetColor(p) (p)->lpVtbl->GetColor(p) #define IDirect3DRMFrame_GetLights(p,a) (p)->lpVtbl->GetLights(p,a) #define IDirect3DRMFrame_GetMaterialMode(p) (p)->lpVtbl->GetMaterialMode(p) #define IDirect3DRMFrame_GetParent(p,a) (p)->lpVtbl->GetParent(p,a) #define IDirect3DRMFrame_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b) #define IDirect3DRMFrame_GetRotation(p,a,b,c) (p)->lpVtbl->GetRotation(p,a,b,c) #define IDirect3DRMFrame_GetScene(p,a) (p)->lpVtbl->GetScene(p,a) #define IDirect3DRMFrame_GetSortMode(p) (p)->lpVtbl->GetSortMode(p) #define IDirect3DRMFrame_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a) #define IDirect3DRMFrame_GetTransform(p,a) (p)->lpVtbl->GetTransform(p,a) #define IDirect3DRMFrame_GetVelocity(p,a,b,c) (p)->lpVtbl->GetVelocity(p,a,b,c) #define IDirect3DRMFrame_GetOrientation(p,a,b,c) (p)->lpVtbl->GetOrientation(p,a,b,c) #define IDirect3DRMFrame_GetVisuals(p,a) (p)->lpVtbl->GetVisuals(p,a) #define IDirect3DRMFrame_GetTextureTopology(p,a,b) (p)->lpVtbl->GetTextureTopology(p,a,b) #define IDirect3DRMFrame_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b) #define IDirect3DRMFrame_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DRMFrame_LookAt(p,a,b,c) (p)->lpVtbl->LookAt(p,a,b,c) #define IDirect3DRMFrame_Move(p,a) (p)->lpVtbl->Move(p,a) #define IDirect3DRMFrame_DeleteChild(p,a) (p)->lpVtbl->DeleteChild(p,a) #define IDirect3DRMFrame_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DRMFrame_DeleteMoveCallback(p,a,b) (p)->lpVtbl->DeleteMoveCallback(p,a,b) #define IDirect3DRMFrame_DeleteVisual(p,a) (p)->lpVtbl->DeleteVisual(p,a) #define IDirect3DRMFrame_GetSceneBackground(p) (p)->lpVtbl->GetSceneBackground(p) #define IDirect3DRMFrame_GetSceneBackgroundDepth(p,a) (p)->lpVtbl->GetSceneBackgroundDepth(p,a) #define IDirect3DRMFrame_GetSceneFogColor(p) (p)->lpVtbl->GetSceneFogColor(p) #define IDirect3DRMFrame_GetSceneFogEnable(p) (p)->lpVtbl->GetSceneFogEnable(p) #define IDirect3DRMFrame_GetSceneFogMode(p) (p)->lpVtbl->GetSceneFogMode(p) #define IDirect3DRMFrame_GetSceneFogParams(p,a,b,c) (p)->lpVtbl->GetSceneFogParams(p,a,b,c) #define IDirect3DRMFrame_SetSceneBackground(p,a) (p)->lpVtbl->SetSceneBackground(p,a) #define IDirect3DRMFrame_SetSceneBackgroundRGB(p,a,b,c) (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c) #define IDirect3DRMFrame_SetSceneBackgroundDepth(p,a) (p)->lpVtbl->SetSceneBackgroundDepth(p,a) #define IDirect3DRMFrame_SetSceneBackgroundImage(p,a) (p)->lpVtbl->SetSceneBackgroundImage(p,a) #define IDirect3DRMFrame_SetSceneFogEnable(p,a) (p)->lpVtbl->SetSceneFogEnable(p,a) #define IDirect3DRMFrame_SetSceneFogColor(p,a) (p)->lpVtbl->SetSceneFogColor(p,a) #define IDirect3DRMFrame_SetSceneFogMode(p,a) (p)->lpVtbl->SetSceneFogMode(p,a) #define IDirect3DRMFrame_SetSceneFogParams(p,a,b,c) (p)->lpVtbl->SetSceneFogParams(p,a,b,c) #define IDirect3DRMFrame_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMFrame_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMFrame_GetZbufferMode(p) (p)->lpVtbl->GetZbufferMode(p) #define IDirect3DRMFrame_SetMaterialMode(p,a) (p)->lpVtbl->SetMaterialMode(p,a) #define IDirect3DRMFrame_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) #define IDirect3DRMFrame_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirect3DRMFrame_SetRotation(p,a,b,c,d,e) (p)->lpVtbl->SetRotation(p,a,b,c,d,e) #define IDirect3DRMFrame_SetSortMode(p,a) (p)->lpVtbl->SetSortMode(p,a) #define IDirect3DRMFrame_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a) #define IDirect3DRMFrame_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b) #define IDirect3DRMFrame_SetVelocity(p,a,b,c,d,e) (p)->lpVtbl->SetVelocity(p,a,b,c,d,e) #define IDirect3DRMFrame_SetZbufferMode(p,a) (p)->lpVtbl->SetZbufferMode(p,a) #define IDirect3DRMFrame_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMFrame_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMFrame_AddRef(p) (p)->AddRef() #define IDirect3DRMFrame_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFrame_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMFrame_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMFrame_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMFrame_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMFrame_GetAppData(p) (p)->GetAppData() #define IDirect3DRMFrame_SetName(p,a) (p)->SetName(a) #define IDirect3DRMFrame_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMFrame_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMFrame methods ***/ #define IDirect3DRMFrame_AddChild(p,a) (p)->AddChild(a) #define IDirect3DRMFrame_AddLight(p,a) (p)->AddLight(a) #define IDirect3DRMFrame_AddMoveCallback(p,a,b) (p)->AddMoveCallback(a,b) #define IDirect3DRMFrame_AddTransform(p,a,b) (p)->AddTransform(a,b) #define IDirect3DRMFrame_AddTranslation(p,a,b,c,d) (p)->AddTranslation(a,b,c,d) #define IDirect3DRMFrame_AddScale(p,a,b,c,d) (p)->AddScale(a,b,c,d) #define IDirect3DRMFrame_AddRotation(p,a,b,c,d,e) (p)->AddRotation(a,b,c,d,e) #define IDirect3DRMFrame_AddVisual(p,a) (p)->AddVisual(a) #define IDirect3DRMFrame_GetChildren(p,a) (p)->GetChildren(a) #define IDirect3DRMFrame_GetColor(p) (p)->GetColor() #define IDirect3DRMFrame_GetLights(p,a) (p)->GetLights(a) #define IDirect3DRMFrame_GetMaterialMode(p) (p)->GetMaterialMode() #define IDirect3DRMFrame_GetParent(p,a) (p)->GetParent(a) #define IDirect3DRMFrame_GetPosition(p,a,b) (p)->GetPosition(a,b) #define IDirect3DRMFrame_GetRotation(p,a,b,c) (p)->GetRotation(a,b,c) #define IDirect3DRMFrame_GetScene(p,a) (p)->GetScene(a) #define IDirect3DRMFrame_GetSortMode(p) (p)->GetSortMode() #define IDirect3DRMFrame_GetTexture(p,a) (p)->GetTexture(a) #define IDirect3DRMFrame_GetTransform(p,a) (p)->GetTransform(a) #define IDirect3DRMFrame_GetVelocity(p,a,b,c) (p)->GetVelocity(a,b,c) #define IDirect3DRMFrame_GetOrientation(p,a,b,c) (p)->GetOrientation(a,b,c) #define IDirect3DRMFrame_GetVisuals(p,a) (p)->GetVisuals(a) #define IDirect3DRMFrame_GetTextureTopology(p,a,b) (p)->GetTextureTopology(a,b) #define IDirect3DRMFrame_InverseTransform(p,a,b) (p)->InverseTransform(a,b) #define IDirect3DRMFrame_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DRMFrame_LookAt(p,a,b,c) (p)->LookAt(a,b,c) #define IDirect3DRMFrame_Move(p,a) (p)->Move(a) #define IDirect3DRMFrame_DeleteChild(p,a) (p)->DeleteChild(a) #define IDirect3DRMFrame_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DRMFrame_DeleteMoveCallback(p,a,b) (p)->DeleteMoveCallback(a,b) #define IDirect3DRMFrame_DeleteVisual(p,a) (p)->DeleteVisual(a) #define IDirect3DRMFrame_GetSceneBackground(p) (p)->GetSceneBackground() #define IDirect3DRMFrame_GetSceneBackgroundDepth(p,a) (p)->GetSceneBackgroundDepth(a) #define IDirect3DRMFrame_GetSceneFogColor(p) (p)->GetSceneFogColor() #define IDirect3DRMFrame_GetSceneFogEnable(p) (p)->GetSceneFogEnable() #define IDirect3DRMFrame_GetSceneFogMode(p) (p)->GetSceneFogMode() #define IDirect3DRMFrame_GetSceneFogParams(p,a,b,c) (p)->GetSceneFogParams(a,b,c) #define IDirect3DRMFrame_SetSceneBackground(p,a) (p)->SetSceneBackground(a) #define IDirect3DRMFrame_SetSceneBackgroundRGB(p,a,b,c) (p)->SetSceneBackgroundRGB(a,b,c) #define IDirect3DRMFrame_SetSceneBackgroundDepth(p,a) (p)->SetSceneBackgroundDepth(a) #define IDirect3DRMFrame_SetSceneBackgroundImage(p,a) (p)->SetSceneBackgroundImage(a) #define IDirect3DRMFrame_SetSceneFogEnable(p,a) (p)->SetSceneFogEnable(a) #define IDirect3DRMFrame_SetSceneFogColor(p,a) (p)->SetSceneFogColor(a) #define IDirect3DRMFrame_SetSceneFogMode(p,a) (p)->SetSceneFogMode(a) #define IDirect3DRMFrame_SetSceneFogParams(p,a,b,c) (p)->SetSceneFogParams(a,b,c) #define IDirect3DRMFrame_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMFrame_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMFrame_GetZbufferMode(p) (p)->GetZbufferMode() #define IDirect3DRMFrame_SetMaterialMode(p,a) (p)->SetMaterialMode(a) #define IDirect3DRMFrame_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) #define IDirect3DRMFrame_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirect3DRMFrame_SetRotation(p,a,b,c,d,e) (p)->SetRotation(a,b,c,d,e) #define IDirect3DRMFrame_SetSortMode(p,a) (p)->SetSortMode(a) #define IDirect3DRMFrame_SetTexture(p,a) (p)->SetTexture(a) #define IDirect3DRMFrame_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b) #define IDirect3DRMFrame_SetVelocity(p,a,b,c,d,e) (p)->SetVelocity(a,b,c,d,e) #define IDirect3DRMFrame_SetZbufferMode(p,a) (p)->SetZbufferMode(a) #define IDirect3DRMFrame_Transform(p,a,b) (p)->Transform(a,b) #endif /***************************************************************************** * IDirect3DRMFrame2 interface */ #define INTERFACE IDirect3DRMFrame2 DECLARE_INTERFACE_(IDirect3DRMFrame2,IDirect3DRMFrame) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMFrame methods ***/ STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame *child) PURE; STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE; STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE; STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE; STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; STDMETHOD(AddVisual)(THIS_ IDirect3DRMVisual *visual) PURE; STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE; STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE; STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE; STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame **parent) PURE; STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_position) PURE; STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE; STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame **scene) PURE; STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE; STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE; STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE; STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE; STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE; STDMETHOD(GetVisuals)(THIS_ struct IDirect3DRMVisualArray **visuals) PURE; STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE; STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx)PURE; STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame *target, IDirect3DRMFrame *reference, D3DRMFRAMECONSTRAINT constraint) PURE; STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE; STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame *child) PURE; STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE; STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteVisual)(THIS_ IDirect3DRMVisual *visual) PURE; STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE; STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE; STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE; STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE; STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE; STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE; STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture *texture) PURE; STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE; STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE; STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE; STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE; STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE; STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE; STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE; STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE; STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE; STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; /*** IDirect3DRMFrame2 methods ***/ STDMETHOD(AddMoveCallback2)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx, DWORD flags) PURE; STDMETHOD(GetBox)(THIS_ D3DRMBOX *box) PURE; STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE; STDMETHOD(GetAxes)(THIS_ D3DVECTOR *dir, D3DVECTOR *up); STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial **material) PURE; STDMETHOD_(BOOL, GetInheritAxes)(THIS); STDMETHOD(GetHierarchyBox)(THIS_ D3DRMBOX *box) PURE; STDMETHOD(SetBox)(THIS_ D3DRMBOX *box) PURE; STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE; STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz); STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent); STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE; STDMETHOD(SetQuaternion)(THIS_ IDirect3DRMFrame *reference, D3DRMQUATERNION *q) PURE; STDMETHOD(RayPick)(THIS_ IDirect3DRMFrame *reference, D3DRMRAY *ray, DWORD flags, struct IDirect3DRMPicked2Array **return_visuals) PURE; STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS flags); }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMFrame2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMFrame2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMFrame2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFrame2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMFrame2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMFrame2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMFrame2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMFrame2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMFrame2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMFrame2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMFrame2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMFrame methods ***/ #define IDirect3DRMFrame2_AddChild(p,a) (p)->lpVtbl->AddChild(p,a) #define IDirect3DRMFrame2_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DRMFrame2_AddMoveCallback(p,a,b) (p)->lpVtbl->AddMoveCallback(p,a,b) #define IDirect3DRMFrame2_AddTransform(p,a,b) (p)->lpVtbl->AddTransform(p,a,b) #define IDirect3DRMFrame2_AddTranslation(p,a,b,c,d) (p)->lpVtbl->AddTranslation(p,a,b,c,d) #define IDirect3DRMFrame2_AddScale(p,a,b,c,d) (p)->lpVtbl->AddScale(p,a,b,c,d) #define IDirect3DRMFrame2_AddRotation(p,a,b,c,d,e) (p)->lpVtbl->AddRotation(p,a,b,c,d,e) #define IDirect3DRMFrame2_AddVisual(p,a) (p)->lpVtbl->AddVisual(p,a) #define IDirect3DRMFrame2_GetChildren(p,a) (p)->lpVtbl->GetChildren(p,a) #define IDirect3DRMFrame2_GetColor(p) (p)->lpVtbl->GetColor(p) #define IDirect3DRMFrame2_GetLights(p,a) (p)->lpVtbl->GetLights(p,a) #define IDirect3DRMFrame2_GetMaterialMode(p) (p)->lpVtbl->GetMaterialMode(p) #define IDirect3DRMFrame2_GetParent(p,a) (p)->lpVtbl->GetParent(p,a) #define IDirect3DRMFrame2_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b) #define IDirect3DRMFrame2_GetRotation(p,a,b,c) (p)->lpVtbl->GetRotation(p,a,b,c) #define IDirect3DRMFrame2_GetScene(p,a) (p)->lpVtbl->GetScene(p,a) #define IDirect3DRMFrame2_GetSortMode(p) (p)->lpVtbl->GetSortMode(p) #define IDirect3DRMFrame2_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a) #define IDirect3DRMFrame2_GetTransform(p,a) (p)->lpVtbl->GetTransform(p,a) #define IDirect3DRMFrame2_GetVelocity(p,a,b,c) (p)->lpVtbl->GetVelocity(p,a,b,c) #define IDirect3DRMFrame2_GetOrientation(p,a,b,c) (p)->lpVtbl->GetOrientation(p,a,b,c) #define IDirect3DRMFrame2_GetVisuals(p,a) (p)->lpVtbl->GetVisuals(p,a) #define IDirect3DRMFrame2_GetTextureTopology(p,a,b) (p)->lpVtbl->GetTextureTopology(p,a,b) #define IDirect3DRMFrame2_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b) #define IDirect3DRMFrame2_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DRMFrame2_LookAt(p,a,b,c) (p)->lpVtbl->LookAt(p,a,b,c) #define IDirect3DRMFrame2_Move(p,a) (p)->lpVtbl->Move(p,a) #define IDirect3DRMFrame2_DeleteChild(p,a) (p)->lpVtbl->DeleteChild(p,a) #define IDirect3DRMFrame2_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DRMFrame2_DeleteMoveCallback(p,a,b) (p)->lpVtbl->DeleteMoveCallback(p,a,b) #define IDirect3DRMFrame2_DeleteVisual(p,a) (p)->lpVtbl->DeleteVisual(p,a) #define IDirect3DRMFrame2_GetSceneBackground(p) (p)->lpVtbl->GetSceneBackground(p) #define IDirect3DRMFrame2_GetSceneBackgroundDepth(p,a) (p)->lpVtbl->GetSceneBackgroundDepth(p,a) #define IDirect3DRMFrame2_GetSceneFogColor(p) (p)->lpVtbl->GetSceneFogColor(p) #define IDirect3DRMFrame2_GetSceneFogEnable(p) (p)->lpVtbl->GetSceneFogEnable(p) #define IDirect3DRMFrame2_GetSceneFogMode(p) (p)->lpVtbl->GetSceneFogMode(p) #define IDirect3DRMFrame2_GetSceneFogParams(p,a,b,c) (p)->lpVtbl->GetSceneFogParams(p,a,b,c) #define IDirect3DRMFrame2_SetSceneBackground(p,a) (p)->lpVtbl->SetSceneBackground(p,a) #define IDirect3DRMFrame2_SetSceneBackgroundRGB(p,a,b,c) (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c) #define IDirect3DRMFrame2_SetSceneBackgroundDepth(p,a) (p)->lpVtbl->SetSceneBackgroundDepth(p,a) #define IDirect3DRMFrame2_SetSceneBackgroundImage(p,a) (p)->lpVtbl->SetSceneBackgroundImage(p,a) #define IDirect3DRMFrame2_SetSceneFogEnable(p,a) (p)->lpVtbl->SetSceneFogEnable(p,a) #define IDirect3DRMFrame2_SetSceneFogColor(p,a) (p)->lpVtbl->SetSceneFogColor(p,a) #define IDirect3DRMFrame2_SetSceneFogMode(p,a) (p)->lpVtbl->SetSceneFogMode(p,a) #define IDirect3DRMFrame2_SetSceneFogParams(p,a,b,c) (p)->lpVtbl->SetSceneFogParams(p,a,b,c) #define IDirect3DRMFrame2_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMFrame2_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMFrame2_GetZbufferMode(p) (p)->lpVtbl->GetZbufferMode(p) #define IDirect3DRMFrame2_SetMaterialMode(p,a) (p)->lpVtbl->SetMaterialMode(p,a) #define IDirect3DRMFrame2_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) #define IDirect3DRMFrame2_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirect3DRMFrame2_SetRotation(p,a,b,c,d,e) (p)->lpVtbl->SetRotation(p,a,b,c,d,e) #define IDirect3DRMFrame2_SetSortMode(p,a) (p)->lpVtbl->SetSortMode(p,a) #define IDirect3DRMFrame2_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a) #define IDirect3DRMFrame2_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b) #define IDirect3DRMFrame2_SetVelocity(p,a,b,c,d,e) (p)->lpVtbl->SetVelocity(p,a,b,c,d,e) #define IDirect3DRMFrame2_SetZbufferMode(p,a) (p)->lpVtbl->SetZbufferMode(p,a) #define IDirect3DRMFrame2_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b) /*** IDirect3DRMFrame2 methods ***/ #define IDirect3DRMFrame2_AddMoveCallback2(p,a,b,c) (p)->lpVtbl->AddMoveCallback2(p,a,b,c) #define IDirect3DRMFrame2_GetBox(p,a) (p)->lpVtbl->GetBox(p,a) #define IDirect3DRMFrame2_GetBoxEnable(p) (p)->lpVtbl->GetBoxEnable(p) #define IDirect3DRMFrame2_GetAxes(p,a,b) (p)->lpVtbl->GetAxes(p,a,b) #define IDirect3DRMFrame2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DRMFrame2_GetInheritAxes(p,a,b) (p)->lpVtbl->GetInheritAxes(p,a,b) #define IDirect3DRMFrame2_GetHierarchyBox(p,a) (p)->lpVtbl->GetHierarchyBox(p,a) #define IDirect3DRMFrame2_SetBox(p,a) (p)->lpVtbl->SetBox(p,a) #define IDirect3DRMFrame2_SetBoxEnable(p,a) (p)->lpVtbl->SetBoxEnable(p,a) #define IDirect3DRMFrame2_SetAxes(p,a,b,c,d,e,f) (p)->lpVtbl->SetAxes(p,a,b,c,d,e,f) #define IDirect3DRMFrame2_SetInheritAxes(p,a) (p)->lpVtbl->SetInheritAxes(p,a) #define IDirect3DRMFrame2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DRMFrame2_SetQuaternion(p,a,b) (p)->lpVtbl->SetQuaternion(p,a,b) #define IDirect3DRMFrame2_RayPick(p,a,b,c,d) (p)->lpVtbl->RayPick(p,a,b,c,d) #define IDirect3DRMFrame2_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DRMFrame2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMFrame2_AddRef(p) (p)->AddRef() #define IDirect3DRMFrame2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFrame2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMFrame2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMFrame2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMFrame2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMFrame2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMFrame2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMFrame2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMFrame2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMFrame methods ***/ #define IDirect3DRMFrame2_AddChild(p,a) (p)->AddChild(a) #define IDirect3DRMFrame2_AddLight(p,a) (p)->AddLight(a) #define IDirect3DRMFrame2_AddMoveCallback(p,a,b) (p)->AddMoveCallback(a,b) #define IDirect3DRMFrame2_AddTransform(p,a,b) (p)->AddTransform(a,b) #define IDirect3DRMFrame2_AddTranslation(p,a,b,c,d) (p)->AddTranslation(a,b,c,d) #define IDirect3DRMFrame2_AddScale(p,a,b,c,d) (p)->AddScale(a,b,c,d) #define IDirect3DRMFrame2_AddRotation(p,a,b,c,d,e) (p)->AddRotation(a,b,c,d,e) #define IDirect3DRMFrame2_AddVisual(p,a) (p)->AddVisual(a) #define IDirect3DRMFrame2_GetChildren(p,a) (p)->GetChildren(a) #define IDirect3DRMFrame2_GetColor(p) (p)->GetColor() #define IDirect3DRMFrame2_GetLights(p,a) (p)->GetLights(a) #define IDirect3DRMFrame2_GetMaterialMode(p) (p)->GetMaterialMode() #define IDirect3DRMFrame2_GetParent(p,a) (p)->GetParent(a) #define IDirect3DRMFrame2_GetPosition(p,a,b) (p)->GetPosition(a,b) #define IDirect3DRMFrame2_GetRotation(p,a,b,c) (p)->GetRotation(a,b,c) #define IDirect3DRMFrame2_GetScene(p,a) (p)->GetScene(a) #define IDirect3DRMFrame2_GetSortMode(p) (p)->GetSortMode() #define IDirect3DRMFrame2_GetTexture(p,a) (p)->GetTexture(a) #define IDirect3DRMFrame2_GetTransform(p,a) (p)->GetTransform(a) #define IDirect3DRMFrame2_GetVelocity(p,a,b,c) (p)->GetVelocity(a,b,c) #define IDirect3DRMFrame2_GetOrientation(p,a,b,c) (p)->GetOrientation(a,b,c) #define IDirect3DRMFrame2_GetVisuals(p,a) (p)->GetVisuals(a) #define IDirect3DRMFrame2_GetTextureTopology(p,a,b) (p)->GetTextureTopology(a,b) #define IDirect3DRMFrame2_InverseTransform(p,a,b) (p)->InverseTransform(a,b) #define IDirect3DRMFrame2_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DRMFrame2_LookAt(p,a,b,c) (p)->LookAt(a,b,c) #define IDirect3DRMFrame2_Move(p,a) (p)->Move(a) #define IDirect3DRMFrame2_DeleteChild(p,a) (p)->DeleteChild(a) #define IDirect3DRMFrame2_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DRMFrame2_DeleteMoveCallback(p,a,b) (p)->DeleteMoveCallback(a,b) #define IDirect3DRMFrame2_DeleteVisual(p,a) (p)->DeleteVisual(a) #define IDirect3DRMFrame2_GetSceneBackground(p) (p)->GetSceneBackground() #define IDirect3DRMFrame2_GetSceneBackgroundDepth(p,a) (p)->GetSceneBackgroundDepth(a) #define IDirect3DRMFrame2_GetSceneFogColor(p) (p)->GetSceneFogColor() #define IDirect3DRMFrame2_GetSceneFogEnable(p) (p)->GetSceneFogEnable() #define IDirect3DRMFrame2_GetSceneFogMode(p) (p)->GetSceneFogMode() #define IDirect3DRMFrame2_GetSceneFogParams(p,a,b,c) (p)->GetSceneFogParams(a,b,c) #define IDirect3DRMFrame2_SetSceneBackground(p,a) (p)->SetSceneBackground(a) #define IDirect3DRMFrame2_SetSceneBackgroundRGB(p,a,b,c) (p)->SetSceneBackgroundRGB(a,b,c) #define IDirect3DRMFrame2_SetSceneBackgroundDepth(p,a) (p)->SetSceneBackgroundDepth(a) #define IDirect3DRMFrame2_SetSceneBackgroundImage(p,a) (p)->SetSceneBackgroundImage(a) #define IDirect3DRMFrame2_SetSceneFogEnable(p,a) (p)->SetSceneFogEnable(a) #define IDirect3DRMFrame2_SetSceneFogColor(p,a) (p)->SetSceneFogColor(a) #define IDirect3DRMFrame2_SetSceneFogMode(p,a) (p)->SetSceneFogMode(a) #define IDirect3DRMFrame2_SetSceneFogParams(p,a,b,c) (p)->SetSceneFogParams(a,b,c) #define IDirect3DRMFrame2_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMFrame2_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMFrame2_GetZbufferMode(p) (p)->GetZbufferMode() #define IDirect3DRMFrame2_SetMaterialMode(p,a) (p)->SetMaterialMode(a) #define IDirect3DRMFrame2_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) #define IDirect3DRMFrame2_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirect3DRMFrame2_SetRotation(p,a,b,c,d,e) (p)->SetRotation(a,b,c,d,e) #define IDirect3DRMFrame2_SetSortMode(p,a) (p)->SetSortMode(a) #define IDirect3DRMFrame2_SetTexture(p,a) (p)->SetTexture(a) #define IDirect3DRMFrame2_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b) #define IDirect3DRMFrame2_SetVelocity(p,a,b,c,d,e) (p)->SetVelocity(a,b,c,d,e) #define IDirect3DRMFrame2_SetZbufferMode(p,a) (p)->SetZbufferMode(a) #define IDirect3DRMFrame2_Transform(p,a,b) (p)->Transform(a,b) /*** IDirect3DRMFrame2 methods ***/ #define IDirect3DRMFrame2_AddMoveCallback2(p,a,b,c) (p)->AddMoveCallback2(a,b,c) #define IDirect3DRMFrame2_GetBox(p,a) (p)->GetBox(a) #define IDirect3DRMFrame2_GetBoxEnable(p) (p)->GetBoxEnable() #define IDirect3DRMFrame2_GetAxes(p,a,b) (p)->GetAxes(a,b) #define IDirect3DRMFrame2_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DRMFrame2_GetInheritAxes(p,a,b) (p)->GetInheritAxes(a,b) #define IDirect3DRMFrame2_GetHierarchyBox(p,a) (p)->GetHierarchyBox(a) #define IDirect3DRMFrame2_SetBox(p,a) (p)->SetBox(a) #define IDirect3DRMFrame2_SetBoxEnable(p,a) (p)->SetBoxEnable(a) #define IDirect3DRMFrame2_SetAxes(p,a,b,c,d,e,f) (p)->SetAxes(a,b,c,d,e,f) #define IDirect3DRMFrame2_SetInheritAxes(p,a) (p)->SetInheritAxes(a) #define IDirect3DRMFrame2_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DRMFrame2_SetQuaternion(p,a,b) (p)->SetQuaternion(a,b) #define IDirect3DRMFrame2_RayPick(p,a,b,c,d) (p)->RayPick(a,b,c,d) #define IDirect3DRMFrame2_Save(p,a,b,c) (p)->Save(a,b,c) #endif /***************************************************************************** * IDirect3DRMFrame3 interface */ #define INTERFACE IDirect3DRMFrame3 DECLARE_INTERFACE_(IDirect3DRMFrame3,IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMFrame3 methods ***/ STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame3 *child) PURE; STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE; STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK cb, void *ctx, DWORD flags) PURE; STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE; STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; STDMETHOD(AddVisual)(THIS_ IUnknown *visual) PURE; STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE; STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE; STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE; STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame3 **parent) PURE; STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *return_position) PURE; STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE; STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame3 **scene) PURE; STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE; STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture3 **texture) PURE; STDMETHOD(GetTransform)(THIS_ IDirect3DRMFrame3 *reference, D3DRMMATRIX4D matrix) PURE; STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE; STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE; STDMETHOD(GetVisuals)(THIS_ DWORD *count, IUnknown **visuals) PURE; STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) PURE; STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame3 *target, IDirect3DRMFrame3 *reference, D3DRMFRAMECONSTRAINT constraint) PURE; STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE; STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame3 *child) PURE; STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE; STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteVisual)(THIS_ IUnknown *visual) PURE; STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE; STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE; STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE; STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE; STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE; STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE; STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture3 *texture) PURE; STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE; STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE; STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE; STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE; STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE; STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE; STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE; STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE; STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE; STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE; STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE; STDMETHOD(GetBox)(THIS_ D3DRMBOX *box) PURE; STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE; STDMETHOD(GetAxes)(THIS_ D3DVECTOR *dir, D3DVECTOR *up); STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial2 **material) PURE; STDMETHOD_(BOOL, GetInheritAxes)(THIS); STDMETHOD(GetHierarchyBox)(THIS_ D3DRMBOX *box) PURE; STDMETHOD(SetBox)(THIS_ D3DRMBOX *box) PURE; STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE; STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz); STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent); STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE; STDMETHOD(SetQuaternion)(THIS_ IDirect3DRMFrame3 *reference, D3DRMQUATERNION *q) PURE; STDMETHOD(RayPick)(THIS_ IDirect3DRMFrame3 *reference, D3DRMRAY *ray, DWORD flags, struct IDirect3DRMPicked2Array **return_visuals) PURE; STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS flags); STDMETHOD(TransformVectors)(THIS_ IDirect3DRMFrame3 *reference, DWORD vector_count, D3DVECTOR *dst_vectors, D3DVECTOR *src_vectors) PURE; STDMETHOD(InverseTransformVectors)(THIS_ IDirect3DRMFrame3 *reference, DWORD vector_count, D3DVECTOR *dst_vectors, D3DVECTOR *src_vectors) PURE; STDMETHOD(SetTraversalOptions)(THIS_ DWORD flags) PURE; STDMETHOD(GetTraversalOptions)(THIS_ DWORD *flags) PURE; STDMETHOD(SetSceneFogMethod)(THIS_ DWORD flags) PURE; STDMETHOD(GetSceneFogMethod)(THIS_ DWORD *fog_mode) PURE; STDMETHOD(SetMaterialOverride)(THIS_ D3DRMMATERIALOVERRIDE *override) PURE; STDMETHOD(GetMaterialOverride)(THIS_ D3DRMMATERIALOVERRIDE *override) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMFrame3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMFrame3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMFrame3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFrame3_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMFrame3_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMFrame3_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMFrame3_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMFrame3_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMFrame3_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMFrame3_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMFrame3_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMFrame3 methods ***/ #define IDirect3DRMFrame3_AddChild(p,a) (p)->lpVtbl->AddChild(p,a) #define IDirect3DRMFrame3_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DRMFrame3_AddMoveCallback(p,a,b,c) (p)->lpVtbl->AddMoveCallback(p,a,b,c) #define IDirect3DRMFrame3_AddTransform(p,a,b) (p)->lpVtbl->AddTransform(p,a,b) #define IDirect3DRMFrame3_AddTranslation(p,a,b,c,d) (p)->lpVtbl->AddTranslation(p,a,b,c,d) #define IDirect3DRMFrame3_AddScale(p,a,b,c,d) (p)->lpVtbl->AddScale(p,a,b,c,d) #define IDirect3DRMFrame3_AddRotation(p,a,b,c,d,e) (p)->lpVtbl->AddRotation(p,a,b,c,d,e) #define IDirect3DRMFrame3_AddVisual(p,a) (p)->lpVtbl->AddVisual(p,a) #define IDirect3DRMFrame3_GetChildren(p,a) (p)->lpVtbl->GetChildren(p,a) #define IDirect3DRMFrame3_GetColor(p) (p)->lpVtbl->GetColor(p) #define IDirect3DRMFrame3_GetLights(p,a) (p)->lpVtbl->GetLights(p,a) #define IDirect3DRMFrame3_GetMaterialMode(p) (p)->lpVtbl->GetMaterialMode(p) #define IDirect3DRMFrame3_GetParent(p,a) (p)->lpVtbl->GetParent(p,a) #define IDirect3DRMFrame3_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b) #define IDirect3DRMFrame3_GetRotation(p,a,b,c) (p)->lpVtbl->GetRotation(p,a,b,c) #define IDirect3DRMFrame3_GetScene(p,a) (p)->lpVtbl->GetScene(p,a) #define IDirect3DRMFrame3_GetSortMode(p) (p)->lpVtbl->GetSortMode(p) #define IDirect3DRMFrame3_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a) #define IDirect3DRMFrame3_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DRMFrame3_GetVelocity(p,a,b,c) (p)->lpVtbl->GetVelocity(p,a,b,c) #define IDirect3DRMFrame3_GetOrientation(p,a,b,c) (p)->lpVtbl->GetOrientation(p,a,b,c) #define IDirect3DRMFrame3_GetVisuals(p,a,b) (p)->lpVtbl->GetVisuals(p,a,b) #define IDirect3DRMFrame3_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b) #define IDirect3DRMFrame3_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DRMFrame3_LookAt(p,a,b,c) (p)->lpVtbl->LookAt(p,a,b,c) #define IDirect3DRMFrame3_Move(p,a) (p)->lpVtbl->Move(p,a) #define IDirect3DRMFrame3_DeleteChild(p,a) (p)->lpVtbl->DeleteChild(p,a) #define IDirect3DRMFrame3_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DRMFrame3_DeleteMoveCallback(p,a,b) (p)->lpVtbl->DeleteMoveCallback(p,a,b) #define IDirect3DRMFrame3_DeleteVisual(p,a) (p)->lpVtbl->DeleteVisual(p,a) #define IDirect3DRMFrame3_GetSceneBackground(p) (p)->lpVtbl->GetSceneBackground(p) #define IDirect3DRMFrame3_GetSceneBackgroundDepth(p,a) (p)->lpVtbl->GetSceneBackgroundDepth(p,a) #define IDirect3DRMFrame3_GetSceneFogColor(p) (p)->lpVtbl->GetSceneFogColor(p) #define IDirect3DRMFrame3_GetSceneFogEnable(p) (p)->lpVtbl->GetSceneFogEnable(p) #define IDirect3DRMFrame3_GetSceneFogMode(p) (p)->lpVtbl->GetSceneFogMode(p) #define IDirect3DRMFrame3_GetSceneFogParams(p,a,b,c) (p)->lpVtbl->GetSceneFogParams(p,a,b,c) #define IDirect3DRMFrame3_SetSceneBackground(p,a) (p)->lpVtbl->SetSceneBackground(p,a) #define IDirect3DRMFrame3_SetSceneBackgroundRGB(p,a,b,c) (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c) #define IDirect3DRMFrame3_SetSceneBackgroundDepth(p,a) (p)->lpVtbl->SetSceneBackgroundDepth(p,a) #define IDirect3DRMFrame3_SetSceneBackgroundImage(p,a) (p)->lpVtbl->SetSceneBackgroundImage(p,a) #define IDirect3DRMFrame3_SetSceneFogEnable(p,a) (p)->lpVtbl->SetSceneFogEnable(p,a) #define IDirect3DRMFrame3_SetSceneFogColor(p,a) (p)->lpVtbl->SetSceneFogColor(p,a) #define IDirect3DRMFrame3_SetSceneFogMode(p,a) (p)->lpVtbl->SetSceneFogMode(p,a) #define IDirect3DRMFrame3_SetSceneFogParams(p,a,b,c) (p)->lpVtbl->SetSceneFogParams(p,a,b,c) #define IDirect3DRMFrame3_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMFrame3_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMFrame3_GetZbufferMode(p) (p)->lpVtbl->GetZbufferMode(p) #define IDirect3DRMFrame3_SetMaterialMode(p,a) (p)->lpVtbl->SetMaterialMode(p,a) #define IDirect3DRMFrame3_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) #define IDirect3DRMFrame3_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirect3DRMFrame3_SetRotation(p,a,b,c,d,e) (p)->lpVtbl->SetRotation(p,a,b,c,d,e) #define IDirect3DRMFrame3_SetSortMode(p,a) (p)->lpVtbl->SetSortMode(p,a) #define IDirect3DRMFrame3_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a) #define IDirect3DRMFrame3_SetVelocity(p,a,b,c,d,e) (p)->lpVtbl->SetVelocity(p,a,b,c,d,e) #define IDirect3DRMFrame3_SetZbufferMode(p,a) (p)->lpVtbl->SetZbufferMode(p,a) #define IDirect3DRMFrame3_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b) #define IDirect3DRMFrame3_GetBox(p,a) (p)->lpVtbl->GetBox(p,a) #define IDirect3DRMFrame3_GetBoxEnable(p) (p)->lpVtbl->GetBoxEnable(p) #define IDirect3DRMFrame3_GetAxes(p,a,b) (p)->lpVtbl->GetAxes(p,a,b) #define IDirect3DRMFrame3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DRMFrame3_GetInheritAxes(p) (p)->lpVtbl->GetInheritAxes(p) #define IDirect3DRMFrame3_GetHierarchyBox(p,a) (p)->lpVtbl->GetHierarchyBox(p,a) #define IDirect3DRMFrame3_SetBox(p,a) (p)->lpVtbl->SetBox(p,a) #define IDirect3DRMFrame3_SetBoxEnable(p,a) (p)->lpVtbl->SetBoxEnable(p,a) #define IDirect3DRMFrame3_SetAxes(p,a,b,c,d,e,f) (p)->lpVtbl->SetAxes(p,a,b,c,d,e,f) #define IDirect3DRMFrame3_SetInheritAxes(p,a) (p)->lpVtbl->SetInheritAxes(p,a) #define IDirect3DRMFrame3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DRMFrame3_SetQuaternion(p,a,b) (p)->lpVtbl->SetQuaternion(p,a,b) #define IDirect3DRMFrame3_RayPick(p,a,b,c,d) (p)->lpVtbl->RayPick(p,a,b,c,d) #define IDirect3DRMFrame3_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c) #define IDirect3DRMFrame3_TransformVectors(p,a,b,c,d) (p)->lpVtbl->TransformVectors(p,a,b,c,d) #define IDirect3DRMFrame3_InverseTransformVectors(p,a,b,c,d) (p)->lpVtbl->InverseTransformVectors(p,a,b,c,d) #define IDirect3DRMFrame3_SetTraversalOptions(p,a) (p)->lpVtbl->SetTraversalOptions(p,a) #define IDirect3DRMFrame3_GetTraversalOptions(p,a) (p)->lpVtbl->GetTraversalOptions(p,a) #define IDirect3DRMFrame3_SetSceneFogMethod(p,a) (p)->lpVtbl->SetSceneFogMethod(p,a) #define IDirect3DRMFrame3_GetSceneFogMethod(p,a) (p)->lpVtbl->GetSceneFogMethod(p,a) #define IDirect3DRMFrame3_SetMaterialOverride(p,a) (p)->lpVtbl->SetMaterialOverride(p,a) #define IDirect3DRMFrame3_GetMaterialOverride(p,a) (p)->lpVtbl->GetMaterialOverride(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMFrame3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMFrame3_AddRef(p) (p)->AddRef() #define IDirect3DRMFrame3_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFrame3_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMFrame3_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMFrame3_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMFrame3_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMFrame3_GetAppData(p) (p)->GetAppData() #define IDirect3DRMFrame3_SetName(p,a) (p)->SetName(a) #define IDirect3DRMFrame3_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMFrame3_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMFrame3 methods ***/ #define IDirect3DRMFrame3_AddChild(p,a) (p)->AddChild(a) #define IDirect3DRMFrame3_AddLight(p,a) (p)->AddLight(a) #define IDirect3DRMFrame3_AddMoveCallback(p,a,b,c) (p)->AddMoveCallback(a,b,c) #define IDirect3DRMFrame3_AddTransform(p,a,b) (p)->AddTransform(a,b) #define IDirect3DRMFrame3_AddTranslation(p,a,b,c,d) (p)->AddTranslation(a,b,c,d) #define IDirect3DRMFrame3_AddScale(p,a,b,c,d) (p)->AddScale(a,b,c,d) #define IDirect3DRMFrame3_AddRotation(p,a,b,c,d,e) (p)->AddRotation(a,b,c,d,e) #define IDirect3DRMFrame3_AddVisual(p,a) (p)->AddVisual(a) #define IDirect3DRMFrame3_GetChildren(p,a) (p)->GetChildren(a) #define IDirect3DRMFrame3_GetColor(p) (p)->GetColor() #define IDirect3DRMFrame3_GetLights(p,a) (p)->GetLights(a) #define IDirect3DRMFrame3_GetMaterialMode(p) (p)->GetMaterialMode() #define IDirect3DRMFrame3_GetParent(p,a) (p)->GetParent(a) #define IDirect3DRMFrame3_GetPosition(p,a,b) (p)->GetPosition(a,b) #define IDirect3DRMFrame3_GetRotation(p,a,b,c) (p)->GetRotation(a,b,c) #define IDirect3DRMFrame3_GetScene(p,a) (p)->GetScene(a) #define IDirect3DRMFrame3_GetSortMode(p) (p)->GetSortMode() #define IDirect3DRMFrame3_GetTexture(p,a) (p)->GetTexture(a) #define IDirect3DRMFrame3_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DRMFrame3_GetVelocity(p,a,b,c) (p)->GetVelocity(a,b,c) #define IDirect3DRMFrame3_GetOrientation(p,a,b,c) (p)->GetOrientation(a,b,c) #define IDirect3DRMFrame3_GetVisuals(p,a,b) (p)->GetVisuals(a,b) #define IDirect3DRMFrame3_InverseTransform(p,a,b) (p)->InverseTransform(a,b) #define IDirect3DRMFrame3_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DRMFrame3_LookAt(p,a,b,c) (p)->LookAt(a,b,c) #define IDirect3DRMFrame3_Move(p,a) (p)->Move(a) #define IDirect3DRMFrame3_DeleteChild(p,a) (p)->DeleteChild(a) #define IDirect3DRMFrame3_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DRMFrame3_DeleteMoveCallback(p,a,b) (p)->DeleteMoveCallback(a,b) #define IDirect3DRMFrame3_DeleteVisual(p,a) (p)->DeleteVisual(a) #define IDirect3DRMFrame3_GetSceneBackground(p) (p)->GetSceneBackground() #define IDirect3DRMFrame3_GetSceneBackgroundDepth(p,a) (p)->GetSceneBackgroundDepth(a) #define IDirect3DRMFrame3_GetSceneFogColor(p) (p)->GetSceneFogColor() #define IDirect3DRMFrame3_GetSceneFogEnable(p) (p)->GetSceneFogEnable() #define IDirect3DRMFrame3_GetSceneFogMode(p) (p)->GetSceneFogMode() #define IDirect3DRMFrame3_GetSceneFogParams(p,a,b,c) (p)->GetSceneFogParams(a,b,c) #define IDirect3DRMFrame3_SetSceneBackground(p,a) (p)->SetSceneBackground(a) #define IDirect3DRMFrame3_SetSceneBackgroundRGB(p,a,b,c) (p)->SetSceneBackgroundRGB(a,b,c) #define IDirect3DRMFrame3_SetSceneBackgroundDepth(p,a) (p)->SetSceneBackgroundDepth(a) #define IDirect3DRMFrame3_SetSceneBackgroundImage(p,a) (p)->SetSceneBackgroundImage(a) #define IDirect3DRMFrame3_SetSceneFogEnable(p,a) (p)->SetSceneFogEnable(a) #define IDirect3DRMFrame3_SetSceneFogColor(p,a) (p)->SetSceneFogColor(a) #define IDirect3DRMFrame3_SetSceneFogMode(p,a) (p)->SetSceneFogMode(a) #define IDirect3DRMFrame3_SetSceneFogParams(p,a,b,c) (p)->SetSceneFogParams(a,b,c) #define IDirect3DRMFrame3_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMFrame3_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMFrame3_GetZbufferMode(p) (p)->GetZbufferMode() #define IDirect3DRMFrame3_SetMaterialMode(p,a) (p)->SetMaterialMode(a) #define IDirect3DRMFrame3_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) #define IDirect3DRMFrame3_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirect3DRMFrame3_SetRotation(p,a,b,c,d,e) (p)->SetRotation(a,b,c,d,e) #define IDirect3DRMFrame3_SetSortMode(p,a) (p)->SetSortMode(a) #define IDirect3DRMFrame3_SetTexture(p,a) (p)->SetTexture(a) #define IDirect3DRMFrame3_SetVelocity(p,a,b,c,d,e) (p)->SetVelocity(a,b,c,d,e) #define IDirect3DRMFrame3_SetZbufferMode(p,a) (p)->SetZbufferMode(a) #define IDirect3DRMFrame3_Transform(p,a,b) (p)->Transform(a,b) #define IDirect3DRMFrame3_GetBox(p,a) (p)->GetBox(a) #define IDirect3DRMFrame3_GetBoxEnable(p) (p)->GetBoxEnable() #define IDirect3DRMFrame3_GetAxes(p,a,b) (p)->GetAxes(a,b) #define IDirect3DRMFrame3_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DRMFrame3_GetInheritAxes(p) (p)->GetInheritAxes() #define IDirect3DRMFrame3_GetHierarchyBox(p,a) (p)->GetHierarchyBox(a) #define IDirect3DRMFrame3_SetBox(p,a) (p)->SetBox(a) #define IDirect3DRMFrame3_SetBoxEnable(p,a) (p)->SetBoxEnable(a) #define IDirect3DRMFrame3_SetAxes(p,a,b,c,d,e,f) (p)->SetAxes(a,b,c,d,e,f) #define IDirect3DRMFrame3_SetInheritAxes(p,a) (p)->SetInheritAxes(a) #define IDirect3DRMFrame3_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DRMFrame3_SetQuaternion(p,a,b) (p)->SetQuaternion(a,b) #define IDirect3DRMFrame3_RayPick(p,a,b,c,d) (p)->RayPick(a,b,c,d) #define IDirect3DRMFrame3_Save(p,a,b,c) (p)->Save(a,b,c) #define IDirect3DRMFrame3_TransformVectors(p,a,b,c,d) (p)->TransformVectors(a,b,c,d) #define IDirect3DRMFrame3_InverseTransformVectors(p,a,b,c,d) (p)->InverseTransformVectors(a,b,c,d) #define IDirect3DRMFrame3_SetTraversalOptions(p,a) (p)->SetTraversalOptions(a) #define IDirect3DRMFrame3_GetTraversalOptions(p,a) (p)->GetTraversalOptions(a) #define IDirect3DRMFrame3_SetSceneFogMethod(p,a) (p)->SetSceneFogMethod(a) #define IDirect3DRMFrame3_GetSceneFogMethod(p,a) (p)->GetSceneFogMethod(a) #define IDirect3DRMFrame3_SetMaterialOverride(p,a) (p)->SetMaterialOverride(a) #define IDirect3DRMFrame3_GetMaterialOverride(p,a) (p)->GetMaterialOverride(a) #endif /***************************************************************************** * IDirect3DRMMesh interface */ #define INTERFACE IDirect3DRMMesh DECLARE_INTERFACE_(IDirect3DRMMesh,IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMMesh methods ***/ STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE; STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE; STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData, D3DRMGROUPINDEX *returnId) PURE; STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count, D3DRMVERTEX *values) PURE; STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE; STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE; STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE; STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMMaterial *material) PURE; STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMTexture *texture) PURE; STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE; STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace, DWORD *fDataSize, unsigned *fData) PURE; STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE; STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE; STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE; STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE; STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMMaterial **material) PURE; STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMTexture **texture) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMMesh_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMMesh_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMMesh_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMesh_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMMesh_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMMesh_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMMesh_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMMesh_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMMesh_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMMesh_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMMesh_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMMesh methods ***/ #define IDirect3DRMMesh_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c) #define IDirect3DRMMesh_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a,b,c) #define IDirect3DRMMesh_GetBox(p,a) (p)->lpVtbl->GetBox(p,a) #define IDirect3DRMMesh_AddGroup(p,a,b,c,d,e) (p)->lpVtbl->AddGroup(p,a,b,c,d,e) #define IDirect3DRMMesh_SetVertices(p,a,b,c,d) (p)->lpVtbl->SetVertices(p,a,b,c,d) #define IDirect3DRMMesh_SetGroupColor(p,a,b) (p)->lpVtbl->SetGroupColor(p,a,b) #define IDirect3DRMMesh_SetGroupColorRGB(p,a,b,c,d) (p)->lpVtbl->SetGroupColorRGB(p,a,b,c,d) #define IDirect3DRMMesh_SetGroupMapping(p,a,b) (p)->lpVtbl->SetGroupMapping(p,a,b) #define IDirect3DRMMesh_SetGroupQuality(p,a,b) (p)->lpVtbl->SetGroupQuality(p,a,b) #define IDirect3DRMMesh_SetGroupMaterial(p,a,b) (p)->lpVtbl->SetGroupMaterial(p,a,b) #define IDirect3DRMMesh_SetGroupTexture(p,a,b) (p)->lpVtbl->SetGroupTexture(p,a,b) #define IDirect3DRMMesh_GetGroupCount(p) (p)->lpVtbl->GetGroupCount(p) #define IDirect3DRMMesh_GetGroup(p,a,b,c,d,e,f) (p)->lpVtbl->GetGroup(p,a,b,c,d,e,f) #define IDirect3DRMMesh_GetVertices(p,a,b,c,d) (p)->lpVtbl->GetVertices(p,a,b,c,d) #define IDirect3DRMMesh_GetGroupColor(p,a) (p)->lpVtbl->GetGroupColor(p,a) #define IDirect3DRMMesh_GetGroupMapping(p,a) (p)->lpVtbl->GetGroupMapping(p,a) #define IDirect3DRMMesh_GetGroupQuality(p,a) (p)->lpVtbl->GetGroupQuality(p,a) #define IDirect3DRMMesh_GetGroupMaterial(p,a,b) (p)->lpVtbl->GetGroupMaterial(p,a,b) #define IDirect3DRMMesh_GetGroupTexture(p,a,b) (p)->lpVtbl->GetGroupTexture(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMMesh_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMMesh_AddRef(p) (p)->AddRef() #define IDirect3DRMMesh_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMesh_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMMesh_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMMesh_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMMesh_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMMesh_GetAppData(p) (p)->GetAppData() #define IDirect3DRMMesh_SetName(p,a) (p)->SetName(a) #define IDirect3DRMMesh_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMMesh_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMMesh methods ***/ #define IDirect3DRMMesh_Scale(p,a,b,c) (p)->Scale(a,b,c) #define IDirect3DRMMesh_Translate(p,a,b,c) (p)->Translate(a,b,c) #define IDirect3DRMMesh_GetBox(p,a) (p)->GetBox(a) #define IDirect3DRMMesh_AddGroup(p,a,b,c,d,e) (p)->AddGroup(a,b,c,d,e) #define IDirect3DRMMesh_SetVertices(p,a,b,c,d) (p)->SetVertices(a,b,c,d) #define IDirect3DRMMesh_SetGroupColor(p,a,b) (p)->SetGroupColor(a,b) #define IDirect3DRMMesh_SetGroupColorRGB(p,a,b,c,d) (p)->SetGroupColorRGB(a,b,c,d) #define IDirect3DRMMesh_SetGroupMapping(p,a,b) (p)->SetGroupMapping(a,b) #define IDirect3DRMMesh_SetGroupQuality(p,a,b) (p)->SetGroupQuality(a,b) #define IDirect3DRMMesh_SetGroupMaterial(p,a,b) (p)->SetGroupMaterial(a,b) #define IDirect3DRMMesh_SetGroupTexture(p,a,b) (p)->SetGroupTexture(a,b) #define IDirect3DRMMesh_GetGroupCount(p) (p)->GetGroupCount() #define IDirect3DRMMesh_GetGroup(p,a,b,c,d,e,f) (p)->GetGroup(a,b,c,d,e,f) #define IDirect3DRMMesh_GetVertices(p,a,b,c,d) (p)->GetVertices(a,b,c,d) #define IDirect3DRMMesh_GetGroupColor(p,a) (p)->GetGroupColor(a) #define IDirect3DRMMesh_GetGroupMapping(p,a) (p)->GetGroupMapping(a) #define IDirect3DRMMesh_GetGroupQuality(p,a) (p)->GetGroupQuality(a) #define IDirect3DRMMesh_GetGroupMaterial(p,a,b) (p)->GetGroupMaterial(a,b) #define IDirect3DRMMesh_GetGroupTexture(p,a,b) (p)->GetGroupTexture(a,b) #endif /***************************************************************************** * IDirect3DRMProgressiveMesh interface */ #define INTERFACE IDirect3DRMProgressiveMesh DECLARE_INTERFACE_(IDirect3DRMProgressiveMesh,IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMProgressiveMesh methods ***/ STDMETHOD(Load) (THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE; STDMETHOD(GetLoadStatus) (THIS_ D3DRMPMESHLOADSTATUS *status) PURE; STDMETHOD(SetMinRenderDetail) (THIS_ D3DVALUE d3dVal) PURE; STDMETHOD(Abort) (THIS_ DWORD flags) PURE; STDMETHOD(GetFaceDetail) (THIS_ DWORD *count) PURE; STDMETHOD(GetVertexDetail) (THIS_ DWORD *count) PURE; STDMETHOD(SetFaceDetail) (THIS_ DWORD count) PURE; STDMETHOD(SetVertexDetail) (THIS_ DWORD count) PURE; STDMETHOD(GetFaceDetailRange) (THIS_ DWORD *min_detail, DWORD *max_detail) PURE; STDMETHOD(GetVertexDetailRange) (THIS_ DWORD *min_detail, DWORD *max_detail) PURE; STDMETHOD(GetDetail) (THIS_ D3DVALUE *pdvVal) PURE; STDMETHOD(SetDetail) (THIS_ D3DVALUE d3dVal) PURE; STDMETHOD(RegisterEvents) (THIS_ HANDLE event, DWORD flags, DWORD reserved) PURE; STDMETHOD(CreateMesh) (THIS_ IDirect3DRMMesh **mesh) PURE; STDMETHOD(Duplicate) (THIS_ IDirect3DRMProgressiveMesh **mesh) PURE; STDMETHOD(GetBox) (THIS_ D3DRMBOX *box) PURE; STDMETHOD(SetQuality) (THIS_ D3DRMRENDERQUALITY quality) PURE; STDMETHOD(GetQuality) (THIS_ D3DRMRENDERQUALITY *quality) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMProgressiveMesh_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMProgressiveMesh_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMProgressiveMesh_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMProgressiveMesh_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMProgressiveMesh_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMProgressiveMesh_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMProgressiveMesh_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMProgressiveMesh_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMProgressiveMesh_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMProgressiveMesh_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMProgressiveMesh_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMProgressiveMesh methods ***/ #define IDirect3DRMProgressiveMesh_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DRMProgressiveMesh_GetLoadStatus(p,a) (p)->lpVtbl->GetLoadStatus(p,a) #define IDirect3DRMProgressiveMesh_SetMinRenderDetail(p,a) (p)->lpVtbl->SetMinRenderDetail(p,a) #define IDirect3DRMProgressiveMesh_Abort(p,a) (p)->lpVtbl->Abort(p,a) #define IDirect3DRMProgressiveMesh_GetFaceDetail(p,a) (p)->lpVtbl->GetFaceDetail(p,a) #define IDirect3DRMProgressiveMesh_GetVertexDetail(p,a) (p)->lpVtbl->GetVertexDetail(p,a) #define IDirect3DRMProgressiveMesh_SetFaceDetail(p,a) (p)->lpVtbl->SetFaceDetail(p,a) #define IDirect3DRMProgressiveMesh_SetVertexDetail(p,a) (p)->lpVtbl->SetVertexDetail(p,a) #define IDirect3DRMProgressiveMesh_GetFaceDetailRange(p,a,b) (p)->lpVtbl->GetFaceDetailRange(p,a,b) #define IDirect3DRMProgressiveMesh_GetVertexDetailRange(p,a,b) (p)->lpVtbl->GetVertexDetailRange(p,a,b) #define IDirect3DRMProgressiveMesh_GetDetail(p,a) (p)->lpVtbl->GetDetail(p,a) #define IDirect3DRMProgressiveMesh_SetDetail(p,a) (p)->lpVtbl->SetDetail(p,a) #define IDirect3DRMProgressiveMesh_RegisterEvents(p,a,b,c) (p)->lpVtbl->RegisterEvents(p,a,b,c) #define IDirect3DRMProgressiveMesh_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a) #define IDirect3DRMProgressiveMesh_Duplicate(p,a) (p)->lpVtbl->Duplicate(p,a) #define IDirect3DRMProgressiveMesh_GetBox(p,a) (p)->lpVtbl->GetBox(p,a) #define IDirect3DRMProgressiveMesh_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a) #define IDirect3DRMProgressiveMesh_GetQuality(p,a) (p)->lpVtbl->GetQuality(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMProgressiveMesh_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMProgressiveMesh_AddRef(p) (p)->AddRef() #define IDirect3DRMProgressiveMesh_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMProgressiveMesh_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMProgressiveMesh_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMProgressiveMesh_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMProgressiveMesh_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMProgressiveMesh_GetAppData(p) (p)->GetAppData() #define IDirect3DRMProgressiveMesh_SetName(p,a) (p)->SetName(a) #define IDirect3DRMProgressiveMesh_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMProgressiveMesh_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMProgressiveMesh methods ***/ #define IDirect3DRMProgressiveMesh_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DRMProgressiveMesh_GetLoadStatus(p,a) (p)->GetLoadStatus(a) #define IDirect3DRMProgressiveMesh_SetMinRenderDetail(p,a) (p)->SetMinRenderDetail(a) #define IDirect3DRMProgressiveMesh_Abort(p,a) (p)->Abort(a) #define IDirect3DRMProgressiveMesh_GetFaceDetail(p,a) (p)->GetFaceDetail(a) #define IDirect3DRMProgressiveMesh_GetVertexDetail(p,a) (p)->GetVertexDetail(a) #define IDirect3DRMProgressiveMesh_SetFaceDetail(p,a) (p)->SetFaceDetail(a) #define IDirect3DRMProgressiveMesh_SetVertexDetail(p,a) (p)->SetVertexDetail(a) #define IDirect3DRMProgressiveMesh_GetFaceDetailRange(p,a,b) (p)->GetFaceDetailRange(a,b) #define IDirect3DRMProgressiveMesh_GetVertexDetailRange(p,a,b) (p)->GetVertexDetailRange(a,b) #define IDirect3DRMProgressiveMesh_GetDetail(p,a) (p)->GetDetail(a) #define IDirect3DRMProgressiveMesh_SetDetail(p,a) (p)->SetDetail(a) #define IDirect3DRMProgressiveMesh_RegisterEvents(p,a,b,c) (p)->RegisterEvents(a,b,c) #define IDirect3DRMProgressiveMesh_CreateMesh(p,a) (p)->CreateMesh(a) #define IDirect3DRMProgressiveMesh_Duplicate(p,a) (p)->Duplicate(a) #define IDirect3DRMProgressiveMesh_GetBox(p,a) (p)->GetBox(a) #define IDirect3DRMProgressiveMesh_SetQuality(p,a) (p)->SetQuality(a) #define IDirect3DRMProgressiveMesh_GetQuality(p,a) (p)->GetQuality(a) #endif /***************************************************************************** * IDirect3DRMShadow interface */ #define INTERFACE IDirect3DRMShadow DECLARE_INTERFACE_(IDirect3DRMShadow,IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMShadow methods ***/ STDMETHOD(Init)(THIS_ IDirect3DRMVisual *visual, struct IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMShadow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMShadow_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMShadow_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMShadow_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMShadow_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMShadow_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMShadow_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMShadow_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMShadow_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMShadow_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMShadow_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMShadow methods ***/ #define IDirect3DRMShadow_Init(p,a,b,c,d,e,f,g) (p)->lpVtbl->Load(p,a,b,c,d,e,f,g) #else /*** IUnknown methods ***/ #define IDirect3DRMShadow_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMShadow_AddRef(p) (p)->AddRef() #define IDirect3DRMShadow_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMShadow_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMShadow_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMShadow_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMShadow_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMShadow_GetAppData(p) (p)->GetAppData() #define IDirect3DRMShadow_SetName(p,a) (p)->SetName(a) #define IDirect3DRMShadow_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMShadow_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMShadow methods ***/ #define IDirect3DRMShadow_Init(p,a,b,c,d,e,f,g) (p)->Load(a,b,c,d,e,f,g) #endif /***************************************************************************** * IDirect3DRMShadow2 interface */ #define INTERFACE IDirect3DRMShadow2 DECLARE_INTERFACE_(IDirect3DRMShadow2,IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMShadow methods ***/ STDMETHOD(Init)(THIS_ IUnknown *object, struct IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz) PURE; /*** IDirect3DRMShadow2 methods ***/ STDMETHOD(GetVisual)(THIS_ IDirect3DRMVisual **visual) PURE; STDMETHOD(SetVisual)(THIS_ IUnknown *visual, DWORD flags) PURE; STDMETHOD(GetLight)(THIS_ struct IDirect3DRMLight **light) PURE; STDMETHOD(SetLight)(THIS_ struct IDirect3DRMLight *light, DWORD flags) PURE; STDMETHOD(GetPlane)(THIS_ D3DVALUE *px, D3DVALUE *py, D3DVALUE *pz, D3DVALUE *nx, D3DVALUE *ny, D3DVALUE *nz) PURE; STDMETHOD(SetPlane)(THIS_ D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, DWORD) PURE; STDMETHOD(GetOptions)(THIS_ DWORD *flags) PURE; STDMETHOD(SetOptions)(THIS_ DWORD) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMShadow2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMShadow2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMShadow2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMShadow2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMShadow2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMShadow2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMShadow2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMShadow2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMShadow2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMShadow2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMShadow2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMShadow methods ***/ #define IDirect3DRMShadow2_Init(p,a,b,c,d,e,f,g) (p)->lpVtbl->Init(p,a,b,c,d,e,f,g) /*** IDirect3DRMShadow2 methods ***/ #define IDirect3DRMShadow2_GetVisual(p,a) (p)->lpVtbl->GetVisual(p,a) #define IDirect3DRMShadow2_SetVisual(p,a,b) (p)->lpVtbl->SetVisual(p,a,b) #define IDirect3DRMShadow2_GetLight(p,a) (p)->lpVtbl->GetLight(p,a) #define IDirect3DRMShadow2_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DRMShadow2_GetPlane(p,a,b,c,d,e,f) (p)->lpVtbl->GetPlane(p,a,b,c,d,e,f) #define IDirect3DRMShadow2_SetPlane(p,a,b,c,d,e,f) (p)->lpVtbl->SetPlane(p,a,b,c,d,e,f) #define IDirect3DRMShadow2_GetOptions(p,a) (p)->lpVtbl->GetOptions(p,a) #define IDirect3DRMShadow2_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMShadow2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMShadow2_AddRef(p) (p)->AddRef() #define IDirect3DRMShadow2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMShadow2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMShadow2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMShadow2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMShadow2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMShadow2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMShadow2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMShadow2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMShadow2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMShadow methods ***/ #define IDirect3DRMShadow2_Init(p,a,b,c,d,e,f,g) (p)->Init(a,b,c,d,e,f,g) /*** IDirect3DRMShadow2 methods ***/ #define IDirect3DRMShadow2_GetVisual(p,a) (p)->GetVisual(a) #define IDirect3DRMShadow2_SetVisual(p,a,b) (p)->SetVisual(a,b) #define IDirect3DRMShadow2_GetLight(p,a) (p)->GetLight(a) #define IDirect3DRMShadow2_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DRMShadow2_GetPlane(p,a,b,c,d,e,f) (p)->GetPlane(a,b,c,d,e,f) #define IDirect3DRMShadow2_SetPlane(p,a,b,c,d,e,f) (p)->SetPlane(a,b,c,d,e,f) #define IDirect3DRMShadow2_GetOptions(p,a) (p)->GetOptions(a) #define IDirect3DRMShadow2_SetOptions(p,a) (p)->SetOptions(a) #endif /***************************************************************************** * IDirect3DRMFace interface */ #define INTERFACE IDirect3DRMFace DECLARE_INTERFACE_(IDirect3DRMFace,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMFace methods ***/ STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE; STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE; STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE; STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE; STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals); STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE; STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE; STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE; STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE; STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial **material) PURE; STDMETHOD_(int, GetVertexCount)(THIS) PURE; STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE; STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE; STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMFace_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMFace_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMFace_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFace_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMFace_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMFace_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMFace_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMFace_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMFace_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMFace_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMFace_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMFace methods ***/ #define IDirect3DRMFace_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c) #define IDirect3DRMFace_AddVertexAndNormalIndexed(p,a,b) (p)->lpVtbl->AddVertexAndNormalIndexed(p,a,b) #define IDirect3DRMFace_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMFace_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMFace_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a) #define IDirect3DRMFace_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c) #define IDirect3DRMFace_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DRMFace_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b) #define IDirect3DRMFace_GetVertex(p,a,b,c) (p)->lpVtbl->GetVertex(p,a,b,c) #define IDirect3DRMFace_GetVertices(p,a,b,c) (p)->lpVtbl->GetVertices(p,a,b,c) #define IDirect3DRMFace_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c) #define IDirect3DRMFace_GetTextureTopology(p,a,b) (p)->lpVtbl->GetTextureTopology(p,a,b) #define IDirect3DRMFace_GetNormal(p,a) (p)->lpVtbl->GetNormal(p,a) #define IDirect3DRMFace_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a) #define IDirect3DRMFace_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p) #define IDirect3DRMFace_GetVertexIndex(p,a) (p)->lpVtbl->GetVertexIndex(p,a) #define IDirect3DRMFace_GetTextureCoordinateIndex(p,a) (p)->lpVtbl->GetTextureCoordinateIndex(p,a) #define IDirect3DRMFace_GetColor(p) (p)->lpVtbl->GetColor(p) #else /*** IUnknown methods ***/ #define IDirect3DRMFace_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMFace_AddRef(p) (p)->AddRef() #define IDirect3DRMFace_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFace_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMFace_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMFace_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMFace_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMFace_GetAppData(p) (p)->GetAppData() #define IDirect3DRMFace_SetName(p,a) (p)->SetName(a) #define IDirect3DRMFace_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMFace_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMFace methods ***/ #define IDirect3DRMFace_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c) #define IDirect3DRMFace_AddVertexAndNormalIndexed(p,a,b) (p)->AddVertexAndNormalIndexed(a,b) #define IDirect3DRMFace_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMFace_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMFace_SetTexture(p,a) (p)->SetTexture(a) #define IDirect3DRMFace_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c) #define IDirect3DRMFace_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DRMFace_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b) #define IDirect3DRMFace_GetVertex(p,a,b,c) (p)->GetVertex(a,b,c) #define IDirect3DRMFace_GetVertices(p,a,b,c) (p)->GetVertices(a,b,c) #define IDirect3DRMFace_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c) #define IDirect3DRMFace_GetTextureTopology(p,a,b) (p)->GetTextureTopology(a,b) #define IDirect3DRMFace_GetNormal(p,a) (p)->GetNormal(a) #define IDirect3DRMFace_GetTexture(p,a) (p)->GetTexture(a) #define IDirect3DRMFace_GetVertexCount(p) (p)->GetVertexCount() #define IDirect3DRMFace_GetVertexIndex(p,a) (p)->GetVertexIndex(a) #define IDirect3DRMFace_GetTextureCoordinateIndex(p,a) (p)->GetTextureCoordinateIndex(a) #define IDirect3DRMFace_GetColor(p) (p)->GetColor() #endif /***************************************************************************** * IDirect3DRMFace2 interface */ #define INTERFACE IDirect3DRMFace2 DECLARE_INTERFACE_(IDirect3DRMFace2,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMFace methods ***/ STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE; STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE; STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE; STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE; STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals); STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE; STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE; STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE; STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture3 **texture) PURE; STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial2 **material) PURE; STDMETHOD_(int, GetVertexCount)(THIS) PURE; STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE; STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE; STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMFace2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMFace2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMFace2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFace2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMFace2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMFace2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMFace2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMFace2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMFace2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMFace2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMFace2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMFace methods ***/ #define IDirect3DRMFace2_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c) #define IDirect3DRMFace2_AddVertexAndNormalIndexed(p,a,b) (p)->lpVtbl->AddVertexAndNormalIndexed(p,a,b) #define IDirect3DRMFace2_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMFace2_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMFace2_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a) #define IDirect3DRMFace2_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c) #define IDirect3DRMFace2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DRMFace2_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b) #define IDirect3DRMFace2_GetVertex(p,a,b,c) (p)->lpVtbl->GetVertex(p,a,b,c) #define IDirect3DRMFace2_GetVertices(p,a,b,c) (p)->lpVtbl->GetVertices(p,a,b,c) #define IDirect3DRMFace2_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c) #define IDirect3DRMFace2_GetTextureTopology(p,a,b) (p)->lpVtbl->GetTextureTopology(p,a,b) #define IDirect3DRMFace2_GetNormal(p,a) (p)->lpVtbl->GetNormal(p,a) #define IDirect3DRMFace2_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a) #define IDirect3DRMFace2_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p) #define IDirect3DRMFace2_GetVertexIndex(p,a) (p)->lpVtbl->GetVertexIndex(p,a) #define IDirect3DRMFace2_GetTextureCoordinateIndex(p,a) (p)->lpVtbl->GetTextureCoordinateIndex(p,a) #define IDirect3DRMFace2_GetColor(p) (p)->lpVtbl->GetColor(p) #else /*** IUnknown methods ***/ #define IDirect3DRMFace2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMFace2_AddRef(p) (p)->AddRef() #define IDirect3DRMFace2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMFace2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMFace2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMFace2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMFace2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMFace2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMFace2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMFace2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMFace2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMFace methods ***/ #define IDirect3DRMFace2_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c) #define IDirect3DRMFace2_AddVertexAndNormalIndexed(p,a,b) (p)->AddVertexAndNormalIndexed(a,b) #define IDirect3DRMFace2_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMFace2_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMFace2_SetTexture(p,a) (p)->SetTexture(a) #define IDirect3DRMFace2_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c) #define IDirect3DRMFace2_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DRMFace2_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b) #define IDirect3DRMFace2_GetVertex(p,a,b,c) (p)->GetVertex(a,b,c) #define IDirect3DRMFace2_GetVertices(p,a,b,c) (p)->GetVertices(a,b,c) #define IDirect3DRMFace2_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c) #define IDirect3DRMFace2_GetTextureTopology(p,a,b) (p)->GetTextureTopology(a,b) #define IDirect3DRMFace2_GetNormal(p,a) (p)->GetNormal(a) #define IDirect3DRMFace2_GetTexture(p,a) (p)->GetTexture(a) #define IDirect3DRMFace2_GetVertexCount(p) (p)->GetVertexCount() #define IDirect3DRMFace2_GetVertexIndex(p,a) (p)->GetVertexIndex(a) #define IDirect3DRMFace2_GetTextureCoordinateIndex(p,a) (p)->GetTextureCoordinateIndex(a) #define IDirect3DRMFace2_GetColor(p) (p)->GetColor() #endif /***************************************************************************** * IDirect3DRMMeshBuilder interface */ #define INTERFACE IDirect3DRMMeshBuilder DECLARE_INTERFACE_(IDirect3DRMMeshBuilder,IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMMeshBuilder methods ***/ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE; STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE; STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE; STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE; STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE; STDMETHOD(GenerateNormals)(THIS) PURE; STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE; STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE; STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder *mesh_builder) PURE; STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame *frame) PURE; STDMETHOD(AddFace)(THIS_ IDirect3DRMFace *face) PURE; STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count, D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE; STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE; STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE; STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; STDMETHOD(SetPerspective)(THIS_ BOOL) PURE; STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE; STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE; STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE; STDMETHOD(GetVertices)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data) PURE; STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE; STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE; STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; STDMETHOD_(BOOL, GetPerspective)(THIS) PURE; STDMETHOD_(int, GetFaceCount)(THIS) PURE; STDMETHOD_(int, GetVertexCount)(THIS) PURE; STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE; STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMMeshBuilder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMMeshBuilder_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMMeshBuilder_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMeshBuilder_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMMeshBuilder_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMMeshBuilder_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMMeshBuilder_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMMeshBuilder_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMMeshBuilder_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMMeshBuilder_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMMeshBuilder_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMMeshBuilder methods ***/ #define IDirect3DRMMeshBuilder_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DRMMeshBuilder_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c) #define IDirect3DRMMeshBuilder_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c) #define IDirect3DRMMeshBuilder_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a) #define IDirect3DRMMeshBuilder_SetColorSource(p,a) (p)->lpVtbl->SetColorSource(p,a,b,c) #define IDirect3DRMMeshBuilder_GetBox(p,a) (p)->lpVtbl->GetBox(p,a) #define IDirect3DRMMeshBuilder_GenerateNormals(p) (p)->lpVtbl->GenerateNormals(p) #define IDirect3DRMMeshBuilder_GetColorSource(p) (p)->lpVtbl->GetColorSource(p) #define IDirect3DRMMeshBuilder_AddMesh(p,a) (p)->lpVtbl->AddMesh(p,a) #define IDirect3DRMMeshBuilder_AddMeshBuilder(p,a) (p)->lpVtbl->AddMeshBuilder(p,a) #define IDirect3DRMMeshBuilder_AddFrame(p,a) (p)->lpVtbl->AddFrame(p,a) #define IDirect3DRMMeshBuilder_AddFace(p,a) (p)->lpVtbl->AddFace(p,a) #define IDirect3DRMMeshBuilder_AddFaces(p,a,b,c,d,e,f) (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f) #define IDirect3DRMMeshBuilder_ReserveSpace(p,a,b,c) (p)->lpVtbl->ReserveSpace(p,a,b,c) #define IDirect3DRMMeshBuilder_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMMeshBuilder_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMMeshBuilder_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a) #define IDirect3DRMMeshBuilder_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DRMMeshBuilder_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b) #define IDirect3DRMMeshBuilder_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a) #define IDirect3DRMMeshBuilder_SetPerspective(p,a) (p)->lpVtbl->SetPerspective(p,a) #define IDirect3DRMMeshBuilder_SetVertex(p,a,b,c,d) (p)->lpVtbl->SetVertex(p,a,b,c,d) #define IDirect3DRMMeshBuilder_SetNormal(p,a,b,c,d) (p)->lpVtbl->SetNormal(p,a,b,c,d) #define IDirect3DRMMeshBuilder_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c) #define IDirect3DRMMeshBuilder_SetVertexColor(p,a,b) (p)->lpVtbl->SetVertexColor(p,a,b) #define IDirect3DRMMeshBuilder_SetVertexColorRGB(p,a,b,c,d) (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d) #define IDirect3DRMMeshBuilder_GetFaces(p,a) (p)->lpVtbl->GetFaces(p,a) #define IDirect3DRMMeshBuilder_GetVertices(p,a,b,c,d,e,f) (p)->lpVtbl->GetVertices(p,a,b,c,d,e,f) #define IDirect3DRMMeshBuilder_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c) #define IDirect3DRMMeshBuilder_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c) #define IDirect3DRMMeshBuilder_AddNormal(p,a,b,c) (p)->lpVtbl->AddNormal(p,a,b,c) #define IDirect3DRMMeshBuilder_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a) #define IDirect3DRMMeshBuilder_GetQuality(p) (p)->lpVtbl->GetQuality(p) #define IDirect3DRMMeshBuilder_GetPerspective(p) (p)->lpVtbl->GetPerspective(p) #define IDirect3DRMMeshBuilder_GetFaceCount(p) (p)->lpVtbl->GetFaceCount(p) #define IDirect3DRMMeshBuilder_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p) #define IDirect3DRMMeshBuilder_GetVertexColor(p,a) (p)->lpVtbl->GetVertexColor(p,a) #define IDirect3DRMMeshBuilder_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMMeshBuilder_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMMeshBuilder_AddRef(p) (p)->AddRef() #define IDirect3DRMMeshBuilder_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMeshBuilder_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMMeshBuilder_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMMeshBuilder_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMMeshBuilder_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMMeshBuilder_GetAppData(p) (p)->GetAppData() #define IDirect3DRMMeshBuilder_SetName(p,a) (p)->SetName(a) #define IDirect3DRMMeshBuilder_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMMeshBuilder_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMMeshBuilder methods ***/ #define IDirect3DRMMeshBuilder_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DRMMeshBuilder_Save(p,a,b,c) (p)->Save(a,b,c) #define IDirect3DRMMeshBuilder_Scale(p,a,b,c) (p)->Scale(a,b,c) #define IDirect3DRMMeshBuilder_Translate(p,a,b,c) (p)->Translate(a) #define IDirect3DRMMeshBuilder_SetColorSource(p,a) (p)->SetColorSource(a,b,c) #define IDirect3DRMMeshBuilder_GetBox(p,a) (p)->GetBox(a) #define IDirect3DRMMeshBuilder_GenerateNormals(p) (p)->GenerateNormals() #define IDirect3DRMMeshBuilder_GetColorSource(p) (p)->GetColorSource() #define IDirect3DRMMeshBuilder_AddMesh(p,a) (p)-->AddMesh(a) #define IDirect3DRMMeshBuilder_AddMeshBuilder(p,a) (p)->AddMeshBuilder(a) #define IDirect3DRMMeshBuilder_AddFrame(p,a) (p)->AddFrame(a) #define IDirect3DRMMeshBuilder_AddFace(p,a) (p)->AddFace(a) #define IDirect3DRMMeshBuilder_AddFaces(p,a,b,c,d,e,f) (p)->AddFaces(a,b,c,d,e,f) #define IDirect3DRMMeshBuilder_ReserveSpace(p,a,b,c) (p)->ReserveSpace(a,b,c) #define IDirect3DRMMeshBuilder_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMMeshBuilder_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMMeshBuilder_SetTexture(p,a) (p)->SetTexture(a) #define IDirect3DRMMeshBuilder_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DRMMeshBuilder_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b) #define IDirect3DRMMeshBuilder_SetQuality(p,a) (p)->SetQuality(a) #define IDirect3DRMMeshBuilder_SetPerspective(p,a) (p)->SetPerspective(a) #define IDirect3DRMMeshBuilder_SetVertex(p,a,b,c,d) (p)->SetVertex(a,b,c,d) #define IDirect3DRMMeshBuilder_SetNormal(p,a,b,c,d) (p)->SetNormal(a,b,c,d) #define IDirect3DRMMeshBuilder_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c) #define IDirect3DRMMeshBuilder_SetVertexColor(p,a,b) (p)->SetVertexColor(a,b) #define IDirect3DRMMeshBuilder_SetVertexColorRGB(p,a,b,c,d) (p)->SetVertexColorRGB(a,b,c,d) #define IDirect3DRMMeshBuilder_GetFaces(p,a) (p)->GetFaces(a) #define IDirect3DRMMeshBuilder_GetVertices(p,a,b,c,d,e,f) (p)->GetVertices(a,b,c,d,e,f) #define IDirect3DRMMeshBuilder_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c) #define IDirect3DRMMeshBuilder_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c) #define IDirect3DRMMeshBuilder_AddNormal(p,a,b,c) (p)->AddNormal(a,b,c) #define IDirect3DRMMeshBuilder_CreateFace(p,a) (p)->CreateFace(a) #define IDirect3DRMMeshBuilder_GetQuality(p) (p)->GetQuality() #define IDirect3DRMMeshBuilder_GetPerspective(p) (p)->GetPerspective() #define IDirect3DRMMeshBuilder_GetFaceCount(p) (p)->GetFaceCount() #define IDirect3DRMMeshBuilder_GetVertexCount(p) (p)->GetVertexCount() #define IDirect3DRMMeshBuilder_GetVertexColor(p,a) (p)->GetVertexColor(a) #define IDirect3DRMMeshBuilder_CreateMesh(p,a) (p)->CreateMesh(a) #endif /***************************************************************************** * IDirect3DRMMeshBuilder2 interface */ #define INTERFACE IDirect3DRMMeshBuilder2 DECLARE_INTERFACE_(IDirect3DRMMeshBuilder2,IDirect3DRMMeshBuilder) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMMeshBuilder methods ***/ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE; STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE; STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE; STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE; STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE; STDMETHOD(GenerateNormals)(THIS) PURE; STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE; STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE; STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder *mesh_builder) PURE; STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame *frame) PURE; STDMETHOD(AddFace)(THIS_ IDirect3DRMFace *face) PURE; STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count, D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE; STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE; STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE; STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; STDMETHOD(SetPerspective)(THIS_ BOOL) PURE; STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE; STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE; STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE; STDMETHOD(GetVertices)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data) PURE; STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE; STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE; STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; STDMETHOD_(BOOL, GetPerspective)(THIS) PURE; STDMETHOD_(int, GetFaceCount)(THIS) PURE; STDMETHOD_(int, GetVertexCount)(THIS) PURE; STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE; STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE; /*** IDirect3DRMMeshBuilder2 methods ***/ STDMETHOD(GenerateNormals2)(THIS_ D3DVALUE crease, DWORD flags) PURE; STDMETHOD(GetFace)(THIS_ DWORD index, IDirect3DRMFace **face) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMMeshBuilder2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMMeshBuilder2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMMeshBuilder2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMeshBuilder2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMMeshBuilder2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMMeshBuilder2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMMeshBuilder2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMMeshBuilder2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMMeshBuilder2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMMeshBuilder2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMMeshBuilder2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMMeshBuilder methods ***/ #define IDirect3DRMMeshBuilder2_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DRMMeshBuilder2_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c) #define IDirect3DRMMeshBuilder2_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c) #define IDirect3DRMMeshBuilder2_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a) #define IDirect3DRMMeshBuilder2_SetColorSource(p,a) (p)->lpVtbl->SetColorSource(p,a,b,c) #define IDirect3DRMMeshBuilder2_GetBox(p,a) (p)->lpVtbl->GetBox(p,a) #define IDirect3DRMMeshBuilder2_GenerateNormals(p) (p)->lpVtbl->GenerateNormals(p) #define IDirect3DRMMeshBuilder2_GetColorSource(p) (p)->lpVtbl->GetColorSource(p) #define IDirect3DRMMeshBuilder2_AddMesh(p,a) (p)->lpVtbl->AddMesh(p,a) #define IDirect3DRMMeshBuilder2_AddMeshBuilder(p,a) (p)->lpVtbl->AddMeshBuilder(p,a) #define IDirect3DRMMeshBuilder2_AddFrame(p,a) (p)->lpVtbl->AddFrame(p,a) #define IDirect3DRMMeshBuilder2_AddFace(p,a) (p)->lpVtbl->AddFace(p,a) #define IDirect3DRMMeshBuilder2_AddFaces(p,a,b,c,d,e,f) (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f) #define IDirect3DRMMeshBuilder2_ReserveSpace(p,a,b,c) (p)->lpVtbl->ReserveSpace(p,a,b,c) #define IDirect3DRMMeshBuilder2_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMMeshBuilder2_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMMeshBuilder2_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a) #define IDirect3DRMMeshBuilder2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DRMMeshBuilder2_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b) #define IDirect3DRMMeshBuilder2_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a) #define IDirect3DRMMeshBuilder2_SetPerspective(p,a) (p)->lpVtbl->SetPerspective(p,a) #define IDirect3DRMMeshBuilder2_SetVertex(p,a,b,c,d) (p)->lpVtbl->SetVertex(p,a,b,c,d) #define IDirect3DRMMeshBuilder2_SetNormal(p,a,b,c,d) (p)->lpVtbl->SetNormal(p,a,b,c,d) #define IDirect3DRMMeshBuilder2_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c) #define IDirect3DRMMeshBuilder2_SetVertexColor(p,a,b) (p)->lpVtbl->SetVertexColor(p,a,b) #define IDirect3DRMMeshBuilder2_SetVertexColorRGB(p,a,b,c,d) (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d) #define IDirect3DRMMeshBuilder2_GetFaces(p,a) (p)->lpVtbl->GetFaces(p,a) #define IDirect3DRMMeshBuilder2_GetVertices(p,a,b,c,d,e,f) (p)->lpVtbl->GetVertices(p,a,b,c,d,e,f) #define IDirect3DRMMeshBuilder2_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c) #define IDirect3DRMMeshBuilder2_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c) #define IDirect3DRMMeshBuilder2_AddNormal(p,a,b,c) (p)->lpVtbl->AddNormal(p,a,b,c) #define IDirect3DRMMeshBuilder2_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a) #define IDirect3DRMMeshBuilder2_GetQuality(p) (p)->lpVtbl->GetQuality(p) #define IDirect3DRMMeshBuilder2_GetPerspective(p) (p)->lpVtbl->GetPerspective(p) #define IDirect3DRMMeshBuilder2_GetFaceCount(p) (p)->lpVtbl->GetFaceCount(p) #define IDirect3DRMMeshBuilder2_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p) #define IDirect3DRMMeshBuilder2_GetVertexColor(p,a) (p)->lpVtbl->GetVertexColor(p,a) #define IDirect3DRMMeshBuilder2_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a) /*** IDirect3DRMMeshBuilder2 methods ***/ #define IDirect3DRMMeshBuilder2_GenerateNormals2(p,a,b) (p)->lpVtbl->GenerateNormals2(p,a,b) #define IDirect3DRMMeshBuilder2_GetFace(p,a,b) (p)->lpVtbl->GetFace(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMMeshBuilder2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMMeshBuilder2_AddRef(p) (p)->AddRef() #define IDirect3DRMMeshBuilder2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMeshBuilder2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMMeshBuilder2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMMeshBuilder2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMMeshBuilder2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMMeshBuilder2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMMeshBuilder2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMMeshBuilder2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMMeshBuilder2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMMeshBuilder methods ***/ #define IDirect3DRMMeshBuilder2_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DRMMeshBuilder2_Save(p,a,b,c) (p)->Save(a,b,c) #define IDirect3DRMMeshBuilder2_Scale(p,a,b,c) (p)->Scale(a,b,c) #define IDirect3DRMMeshBuilder2_Translate(p,a,b,c) (p)->Translate(a) #define IDirect3DRMMeshBuilder2_SetColorSource(p,a) (p)->SetColorSource(a,b,c) #define IDirect3DRMMeshBuilder2_GetBox(p,a) (p)->GetBox(a) #define IDirect3DRMMeshBuilder2_GenerateNormals(p) (p)->GenerateNormals() #define IDirect3DRMMeshBuilder2_GetColorSource(p) (p)->GetColorSource() #define IDirect3DRMMeshBuilder2_AddMesh(p,a) (p)-->AddMesh(a) #define IDirect3DRMMeshBuilder2_AddMeshBuilder(p,a) (p)->AddMeshBuilder(a) #define IDirect3DRMMeshBuilder2_AddFrame(p,a) (p)->AddFrame(a) #define IDirect3DRMMeshBuilder2_AddFace(p,a) (p)->AddFace(a) #define IDirect3DRMMeshBuilder2_AddFaces(p,a,b,c,d,e,f) (p)->AddFaces(a,b,c,d,e,f) #define IDirect3DRMMeshBuilder2_ReserveSpace(p,a,b,c) (p)->ReserveSpace(a,b,c) #define IDirect3DRMMeshBuilder2_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMMeshBuilder2_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMMeshBuilder2_SetTexture(p,a) (p)->SetTexture(a) #define IDirect3DRMMeshBuilder2_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DRMMeshBuilder2_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b) #define IDirect3DRMMeshBuilder2_SetQuality(p,a) (p)->SetQuality(a) #define IDirect3DRMMeshBuilder2_SetPerspective(p,a) (p)->SetPerspective(a) #define IDirect3DRMMeshBuilder2_SetVertex(p,a,b,c,d) (p)->SetVertex(a,b,c,d) #define IDirect3DRMMeshBuilder2_SetNormal(p,a,b,c,d) (p)->SetNormal(a,b,c,d) #define IDirect3DRMMeshBuilder2_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c) #define IDirect3DRMMeshBuilder2_SetVertexColor(p,a,b) (p)->SetVertexColor(a,b) #define IDirect3DRMMeshBuilder2_SetVertexColorRGB(p,a,b,c,d) (p)->SetVertexColorRGB(a,b,c,d) #define IDirect3DRMMeshBuilder2_GetFaces(p,a) (p)->GetFaces(a) #define IDirect3DRMMeshBuilder2_GetVertices(p,a,b,c,d,e,f) (p)->GetVertices(a,b,c,d,e,f) #define IDirect3DRMMeshBuilder2_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c) #define IDirect3DRMMeshBuilder2_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c) #define IDirect3DRMMeshBuilder2_AddNormal(p,a,b,c) (p)->AddNormal(a,b,c) #define IDirect3DRMMeshBuilder2_CreateFace(p,a) (p)->CreateFace(a) #define IDirect3DRMMeshBuilder2_GetQuality(p) (p)->GetQuality() #define IDirect3DRMMeshBuilder2_GetPerspective(p) (p)->GetPerspective() #define IDirect3DRMMeshBuilder2_GetFaceCount(p) (p)->GetFaceCount() #define IDirect3DRMMeshBuilder2_GetVertexCount(p) (p)->GetVertexCount() #define IDirect3DRMMeshBuilder2_GetVertexColor(p,a) (p)->GetVertexColor(a) #define IDirect3DRMMeshBuilder2_CreateMesh(p,a) (p)->CreateMesh(a) /*** IDirect3DRMMeshBuilder2 methods ***/ #define IDirect3DRMMeshBuilder2_GenerateNormals2(p,a,b) (p)->GenerateNormals2(a,b) #define IDirect3DRMMeshBuilder2_GetFace(p,a,b) (p)->GetFace(a,b) #endif /***************************************************************************** * IDirect3DRMMeshBuilder3 interface */ #define INTERFACE IDirect3DRMMeshBuilder3 DECLARE_INTERFACE_(IDirect3DRMMeshBuilder3,IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMMeshBuilder3 methods ***/ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) PURE; STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE; STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE; STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE; STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE; STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE; STDMETHOD(GenerateNormals)(THIS_ D3DVALUE crease, DWORD flags) PURE; STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE; STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE; STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder3 *mesh_builder, DWORD flags) PURE; STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame3 *frame) PURE; STDMETHOD(AddFace)(THIS_ IDirect3DRMFace2 *face) PURE; STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count, D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE; STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE; STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE; STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE; STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE; STDMETHOD(SetPerspective)(THIS_ BOOL) PURE; STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE; STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE; STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE; STDMETHOD(GetGeometry)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data) PURE; STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE; STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace2 **face) PURE; STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE; STDMETHOD_(BOOL, GetPerspective)(THIS) PURE; STDMETHOD_(int, GetFaceCount)(THIS) PURE; STDMETHOD_(int, GetVertexCount)(THIS) PURE; STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE; STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE; STDMETHOD(GetFace)(THIS_ DWORD index, IDirect3DRMFace2 **face) PURE; STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vector) PURE; STDMETHOD(GetNormal)(THIS_ DWORD index, D3DVECTOR *vector) PURE; STDMETHOD(DeleteVertices)(THIS_ DWORD IndexFirst, DWORD count) PURE; STDMETHOD(DeleteNormals)(THIS_ DWORD IndexFirst, DWORD count) PURE; STDMETHOD(DeleteFace)(THIS_ IDirect3DRMFace2 *face) PURE; STDMETHOD(Empty)(THIS_ DWORD flags) PURE; STDMETHOD(Optimize)(THIS_ DWORD flags) PURE; STDMETHOD(AddFacesIndexed)(THIS_ DWORD flags, DWORD *pvIndices, DWORD *pIndexFirst, DWORD *pCount) PURE; STDMETHOD(CreateSubMesh)(THIS_ IUnknown **mesh) PURE; STDMETHOD(GetParentMesh)(THIS_ DWORD flags, IUnknown **parent) PURE; STDMETHOD(GetSubMeshes)(THIS_ DWORD *count, IUnknown **meshes) PURE; STDMETHOD(DeleteSubMesh)(THIS_ IUnknown *mesh) PURE; STDMETHOD(Enable)(THIS_ DWORD) PURE; STDMETHOD(GetEnable)(THIS_ DWORD *) PURE; STDMETHOD(AddTriangles)(THIS_ DWORD flags, DWORD format, DWORD vertex_count, void *data) PURE; STDMETHOD(SetVertices)(THIS_ DWORD start_idx, DWORD count, D3DVECTOR *v) PURE; STDMETHOD(GetVertices)(THIS_ DWORD start_idx, DWORD *count, D3DVECTOR *v) PURE; STDMETHOD(SetNormals)(THIS_ DWORD start_idx, DWORD count, D3DVECTOR *v) PURE; STDMETHOD(GetNormals)(THIS_ DWORD start_idx, DWORD *count, D3DVECTOR *v) PURE; STDMETHOD_(int, GetNormalCount)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMMeshBuilder3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMMeshBuilder3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMMeshBuilder3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMeshBuilder3_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMMeshBuilder3_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMMeshBuilder3_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMMeshBuilder3_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMMeshBuilder3_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMMeshBuilder3_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMMeshBuilder3_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMMeshBuilder3_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMMeshBuilder3 methods ***/ #define IDirect3DRMMeshBuilder3_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DRMMeshBuilder3_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c) #define IDirect3DRMMeshBuilder3_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c) #define IDirect3DRMMeshBuilder3_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a) #define IDirect3DRMMeshBuilder3_SetColorSource(p,a) (p)->lpVtbl->SetColorSource(p,a,b,c) #define IDirect3DRMMeshBuilder3_GetBox(p,a) (p)->lpVtbl->GetBox(p,a) #define IDirect3DRMMeshBuilder3_GenerateNormals(p,a,b) (p)->lpVtbl->GenerateNormals(p,a,b) #define IDirect3DRMMeshBuilder3_GetColorSource(p) (p)->lpVtbl->GetColorSource(p) #define IDirect3DRMMeshBuilder3_AddMesh(p,a) (p)->lpVtbl->AddMesh(p,a) #define IDirect3DRMMeshBuilder3_AddMeshBuilder(p,a) (p)->lpVtbl->AddMeshBuilder(p,a) #define IDirect3DRMMeshBuilder3_AddFrame(p,a) (p)->lpVtbl->AddFrame(p,a) #define IDirect3DRMMeshBuilder3_AddFace(p,a) (p)->lpVtbl->AddFace(p,a) #define IDirect3DRMMeshBuilder3_AddFaces(p,a,b,c,d,e,f) (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f) #define IDirect3DRMMeshBuilder3_ReserveSpace(p,a,b,c) (p)->lpVtbl->ReserveSpace(p,a,b,c) #define IDirect3DRMMeshBuilder3_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMMeshBuilder3_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMMeshBuilder3_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a) #define IDirect3DRMMeshBuilder3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DRMMeshBuilder3_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b) #define IDirect3DRMMeshBuilder3_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a) #define IDirect3DRMMeshBuilder3_SetPerspective(p,a) (p)->lpVtbl->SetPerspective(p,a) #define IDirect3DRMMeshBuilder3_SetVertex(p,a,b,c,d) (p)->lpVtbl->SetVertex(p,a,b,c,d) #define IDirect3DRMMeshBuilder3_SetNormal(p,a,b,c,d) (p)->lpVtbl->SetNormal(p,a,b,c,d) #define IDirect3DRMMeshBuilder3_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c) #define IDirect3DRMMeshBuilder3_SetVertexColor(p,a,b) (p)->lpVtbl->SetVertexColor(p,a,b) #define IDirect3DRMMeshBuilder3_SetVertexColorRGB(p,a,b,c,d) (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d) #define IDirect3DRMMeshBuilder3_GetFaces(p,a) (p)->lpVtbl->GetFaces(p,a) #define IDirect3DRMMeshBuilder3_GetGeometry(p,a,b,c,d,e,f) (p)->lpVtbl->GetGeometry(p,a,b,c,d,e,f) #define IDirect3DRMMeshBuilder3_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c) #define IDirect3DRMMeshBuilder3_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c) #define IDirect3DRMMeshBuilder3_AddNormal(p,a,b,c) (p)->lpVtbl->AddNormal(p,a,b,c) #define IDirect3DRMMeshBuilder3_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a) #define IDirect3DRMMeshBuilder3_GetQuality(p) (p)->lpVtbl->GetQuality(p) #define IDirect3DRMMeshBuilder3_GetPerspective(p) (p)->lpVtbl->GetPerspective(p) #define IDirect3DRMMeshBuilder3_GetFaceCount(p) (p)->lpVtbl->GetFaceCount(p) #define IDirect3DRMMeshBuilder3_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p) #define IDirect3DRMMeshBuilder3_GetVertexColor(p,a) (p)->lpVtbl->GetVertexColor(p,a) #define IDirect3DRMMeshBuilder3_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a) #define IDirect3DRMMeshBuilder3_GetFace(p,a,b) (p)->lpVtbl->GetFace(p,a,b) #define IDirect3DRMMeshBuilder3_GetVertex(p,a,b) (p)->lpVtbl->GetVertex(p,a,b) #define IDirect3DRMMeshBuilder3_GetNormal(p,a,b) (p)->lpVtbl->GetNormal(p,a,b) #define IDirect3DRMMeshBuilder3_DeleteVertices(p,a,b) (p)->lpVtbl->DeleteVertices(p,a,b) #define IDirect3DRMMeshBuilder3_DeleteNormals(p,a,b) (p)->lpVtbl->DeleteNormals(p,a,b) #define IDirect3DRMMeshBuilder3_DeleteFace(p,a) (p)->lpVtbl->DeleteFace(p,a) #define IDirect3DRMMeshBuilder3_Empty(p,a) (p)->lpVtbl->Empty(p,a) #define IDirect3DRMMeshBuilder3_Optimize(p,a) (p)->lpVtbl->Optimize(p,a) #define IDirect3DRMMeshBuilder3_AddFacesIndexed(p,a,b,c,d) (p)->lpVtbl->AddFacesIndexed(p,a,b,c,d) #define IDirect3DRMMeshBuilder3_CreateSubMesh(p,a) (p)->lpVtbl->CreateSubMesh(p,a) #define IDirect3DRMMeshBuilder3_GetParentMesh(p,a,b) (p)->lpVtbl->GetParentMesh(p,a,b) #define IDirect3DRMMeshBuilder3_GetSubMeshes(p,a,b) (p)->lpVtbl->GetSubMeshes(p,a,b) #define IDirect3DRMMeshBuilder3_DeleteSubMesh(p,a) (p)->lpVtbl->DeleteSubMesh(p,a) #define IDirect3DRMMeshBuilder3_Enable(p,a) (p)->lpVtbl->Enable(p,a) #define IDirect3DRMMeshBuilder3_AddTriangles(p,a,b,c,d) (p)->lpVtbl->AddTriangles(p,a,b,c,d) #define IDirect3DRMMeshBuilder3_SetVertices(p,a,b,c) (p)->lpVtbl->SetVertices(p,a,b,c) #define IDirect3DRMMeshBuilder3_GetVertices(p,a,b,c) (p)->lpVtbl->GetVertices(p,a,b,c) #define IDirect3DRMMeshBuilder3_SetNormals(p,a,b,c) (p)->lpVtbl->SetNormals(p,a,b,c) #define IDirect3DRMMeshBuilder3_GetNormals(p,a,b,c) (p)->lpVtbl->GetNormals(p,a,b,c) #define IDirect3DRMMeshBuilder3_GetNormalCount(p) (p)->lpVtbl->GetNormalCount(p) #else /*** IUnknown methods ***/ #define IDirect3DRMMeshBuilder3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMMeshBuilder3_AddRef(p) (p)->AddRef() #define IDirect3DRMMeshBuilder3_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMeshBuilder3_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMMeshBuilder3_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMMeshBuilder3_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMMeshBuilder3_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMMeshBuilder3_GetAppData(p) (p)->GetAppData() #define IDirect3DRMMeshBuilder3_SetName(p,a) (p)->SetName(a) #define IDirect3DRMMeshBuilder3_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMMeshBuilder3_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMMeshBuilder3 methods ***/ #define IDirect3DRMMeshBuilder3_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DRMMeshBuilder3_Save(p,a,b,c) (p)->Save(a,b,c) #define IDirect3DRMMeshBuilder3_Scale(p,a,b,c) (p)->Scale(a,b,c) #define IDirect3DRMMeshBuilder3_Translate(p,a,b,c) (p)->Translate(a) #define IDirect3DRMMeshBuilder3_SetColorSource(p,a) (p)->SetColorSource(a,b,c) #define IDirect3DRMMeshBuilder3_GetBox(p,a) (p)->GetBox(a) #define IDirect3DRMMeshBuilder3_GenerateNormals(p,a,b) (p)->GenerateNormals(a,b) #define IDirect3DRMMeshBuilder3_GetColorSource(p) (p)->GetColorSource() #define IDirect3DRMMeshBuilder3_AddMesh(p,a) (p)-->AddMesh(a) #define IDirect3DRMMeshBuilder3_AddMeshBuilder(p,a) (p)->AddMeshBuilder(a) #define IDirect3DRMMeshBuilder3_AddFrame(p,a) (p)->AddFrame(a) #define IDirect3DRMMeshBuilder3_AddFace(p,a) (p)->AddFace(a) #define IDirect3DRMMeshBuilder3_AddFaces(p,a,b,c,d,e,f) (p)->AddFaces(a,b,c,d,e,f) #define IDirect3DRMMeshBuilder3_ReserveSpace(p,a,b,c) (p)->ReserveSpace(a,b,c) #define IDirect3DRMMeshBuilder3_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMMeshBuilder3_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMMeshBuilder3_SetTexture(p,a) (p)->SetTexture(a) #define IDirect3DRMMeshBuilder3_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DRMMeshBuilder3_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b) #define IDirect3DRMMeshBuilder3_SetQuality(p,a) (p)->SetQuality(a) #define IDirect3DRMMeshBuilder3_SetPerspective(p,a) (p)->SetPerspective(a) #define IDirect3DRMMeshBuilder3_SetVertex(p,a,b,c,d) (p)->SetVertex(a,b,c,d) #define IDirect3DRMMeshBuilder3_SetNormal(p,a,b,c,d) (p)->SetNormal(a,b,c,d) #define IDirect3DRMMeshBuilder3_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c) #define IDirect3DRMMeshBuilder3_SetVertexColor(p,a,b) (p)->SetVertexColor(a,b) #define IDirect3DRMMeshBuilder3_SetVertexColorRGB(p,a,b,c,d) (p)->SetVertexColorRGB(a,b,c,d) #define IDirect3DRMMeshBuilder3_GetFaces(p,a) (p)->GetFaces(a) #define IDirect3DRMMeshBuilder3_GetGeometry(p,a,b,c,d,e,f) (p)->GetGeometry(a,b,c,d,e,f) #define IDirect3DRMMeshBuilder3_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c) #define IDirect3DRMMeshBuilder3_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c) #define IDirect3DRMMeshBuilder3_AddNormal(p,a,b,c) (p)->AddNormal(a,b,c) #define IDirect3DRMMeshBuilder3_CreateFace(p,a) (p)->CreateFace(a) #define IDirect3DRMMeshBuilder3_GetQuality(p) (p)->GetQuality() #define IDirect3DRMMeshBuilder3_GetPerspective(p) (p)->GetPerspective() #define IDirect3DRMMeshBuilder3_GetFaceCount(p) (p)->GetFaceCount() #define IDirect3DRMMeshBuilder3_GetVertexCount(p) (p)->GetVertexCount() #define IDirect3DRMMeshBuilder3_GetVertexColor(p,a) (p)->GetVertexColor(a) #define IDirect3DRMMeshBuilder3_CreateMesh(p,a) (p)->CreateMesh(a) #define IDirect3DRMMeshBuilder3_GetFace(p,a,b) (p)->GetFace(a,b) #define IDirect3DRMMeshBuilder3_GetVertex(p,a,b) (p)->GetVertex(a,b) #define IDirect3DRMMeshBuilder3_GetNormal(p,a,b) (p)->GetNormal(a,b) #define IDirect3DRMMeshBuilder3_DeleteVertices(p,a,b) (p)->DeleteVertices(a,b) #define IDirect3DRMMeshBuilder3_DeleteNormals(p,a,b) (p)->DeleteNormals(a,b) #define IDirect3DRMMeshBuilder3_DeleteFace(p,a) (p)->DeleteFace(a) #define IDirect3DRMMeshBuilder3_Empty(p,a) (p)->Empty(a) #define IDirect3DRMMeshBuilder3_Optimize(p,a) (p)->Optimize(a) #define IDirect3DRMMeshBuilder3_AddFacesIndexed(p,a,b,c,d) (p)->AddFacesIndexed(a,b,c,d) #define IDirect3DRMMeshBuilder3_CreateSubMesh(p,a) (p)->CreateSubMesh(a) #define IDirect3DRMMeshBuilder3_GetParentMesh(p,a,b) (p)->GetParentMesh(a,b) #define IDirect3DRMMeshBuilder3_GetSubMeshes(p,a,b) (p)->GetSubMeshes(a,b) #define IDirect3DRMMeshBuilder3_DeleteSubMesh(p,a) (p)->DeleteSubMesh(a) #define IDirect3DRMMeshBuilder3_Enable(p,a) (p)->Enable(a) #define IDirect3DRMMeshBuilder3_AddTriangles(p,a,b,c,d) (p)->AddTriangles(a,b,c,d) #define IDirect3DRMMeshBuilder3_SetVertices(p,a,b,c) (p)->SetVertices(a,b,c) #define IDirect3DRMMeshBuilder3_GetVertices(p,a,b,c) (p)->GetVertices(a,b,c) #define IDirect3DRMMeshBuilder3_SetNormals(p,a,b,c) (p)->SetNormals(a,b,c) #define IDirect3DRMMeshBuilder3_GetNormals(p,a,b,c) (p)->GetNormals(a,b,c) #define IDirect3DRMMeshBuilder3_GetNormalCount(p) (p)->GetNormalCount() #endif /***************************************************************************** * IDirect3DRMLight interface */ #define INTERFACE IDirect3DRMLight DECLARE_INTERFACE_(IDirect3DRMLight,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMLight methods ***/ STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE; STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE; STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE; STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE; STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE; STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE; STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE; STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE; STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE; STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE; STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE; STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE; STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE; STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE; STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE; STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE; STDMETHOD(SetEnableFrame)(THIS_ IDirect3DRMFrame *frame) PURE; STDMETHOD(GetEnableFrame)(THIS_ IDirect3DRMFrame **frame) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMLight_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMLight_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMLight_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMLight_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMLight_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMLight_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMLight_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMLight_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMLight_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMLight_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMLight methods ***/ #define IDirect3DRMLight_SetType(p,a) (p)->lpVtbl->SetType(p,a) #define IDirect3DRMLight_SetColor(p,a) (p)->lpVtbl->SetColor(p,a) #define IDirect3DRMLight_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c) #define IDirect3DRMLight_SetRange(p,a) (p)->lpVtbl->SetRange(p,a) #define IDirect3DRMLight_SetUmbra(p,a) (p)->lpVtbl->SetUmbra(p,a) #define IDirect3DRMLight_SetPenumbra(p,a) (p)->lpVtbl->SetPenumbra(p,a) #define IDirect3DRMLight_SetConstantAttenuation(p,a) (p)->lpVtbl->SetConstantAttenuation(p,a) #define IDirect3DRMLight_SetLinearAttenuation(p,a) (p)->lpVtbl->SetLinearAttenuation(p,a) #define IDirect3DRMLight_SetQuadraticAttenuation(p,a) (p)->lpVtbl->SetQuadraticAttenuation(p,a) #define IDirect3DRMLight_GetRange(p) (p)->lpVtbl->GetRange(p) #define IDirect3DRMLight_GetUmbra(p) (p)->lpVtbl->GetUmbra(p) #define IDirect3DRMLight_GetPenumbra(p) (p)->lpVtbl->GetPenumbra(p) #define IDirect3DRMLight_GetConstantAttenuation(p) (p)->lpVtbl->GetConstantAttenuation(p) #define IDirect3DRMLight_GetLinearAttenuation(p) (p)->lpVtbl->GetLinearAttenuation(p) #define IDirect3DRMLight_GetQuadraticAttenuation(p) (p)->lpVtbl->GetQuadraticAttenuation(p) #define IDirect3DRMLight_GetColor(p) (p)->lpVtbl->GetColor(p) #define IDirect3DRMLight_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DRMLight_SetEnableFrame(p,a) (p)->lpVtbl->SetEnableFrame(p,a) #define IDirect3DRMLight_GetEnableFrame(p,a) (p)->lpVtbl->GetEnableFrame(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMLight_AddRef(p) (p)->AddRef() #define IDirect3DRMLight_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMLight_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMLight_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMLight_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMLight_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMLight_GetAppData(p) (p)->GetAppData() #define IDirect3DRMLight_SetName(p,a) (p)->SetName(a) #define IDirect3DRMLight_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMLight_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMLight methods ***/ #define IDirect3DRMLight_SetType(p,a) (p)->SetType(a) #define IDirect3DRMLight_SetColor(p,a) (p)->SetColor(a) #define IDirect3DRMLight_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c) #define IDirect3DRMLight_SetRange(p,a) (p)->SetRange(a) #define IDirect3DRMLight_SetUmbra(p,a) (p)->SetUmbra(a) #define IDirect3DRMLight_SetPenumbra(p,a) (p)->SetPenumbra(a) #define IDirect3DRMLight_SetConstantAttenuation(p,a) (p)->SetConstantAttenuation(a) #define IDirect3DRMLight_SetLinearAttenuation(p,a) (p)->SetLinearAttenuation(a) #define IDirect3DRMLight_SetQuadraticAttenuation(p,a) (p)->SetQuadraticAttenuation(a) #define IDirect3DRMLight_GetRange(p) (p)->GetRange() #define IDirect3DRMLight_GetUmbra(p) (p)->GetUmbra() #define IDirect3DRMLight_GetPenumbra(p) (p)->GetPenumbra() #define IDirect3DRMLight_GetConstantAttenuation(p) (p)->GetConstantAttenuation() #define IDirect3DRMLight_GetLinearAttenuation(p) (p)->GetLinearAttenuation() #define IDirect3DRMLight_GetQuadraticAttenuation(p) (p)->GetQuadraticAttenuation() #define IDirect3DRMLight_GetColor(p) (p)->GetColor() #define IDirect3DRMLight_GetType(p) (p)->GetType() #define IDirect3DRMLight_SetEnableFrame(p,a) (p)->SetEnableFrame(a) #define IDirect3DRMLight_GetEnableFrame(p,a) (p)->GetEnableFrame(a) #endif /***************************************************************************** * IDirect3DRMTexture interface */ #define INTERFACE IDirect3DRMTexture DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMTexture methods ***/ STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE; STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE; STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE; STDMETHOD(SetColors)(THIS_ DWORD) PURE; STDMETHOD(SetShades)(THIS_ DWORD) PURE; STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE; STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE; STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE; STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE; STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE; STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE; STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE; STDMETHOD_(DWORD, GetShades)(THIS) PURE; STDMETHOD_(DWORD, GetColors)(THIS) PURE; STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE; STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE; STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMTexture_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMTexture_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMTexture_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMTexture_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMTexture_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMTexture_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMTexture_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMTexture_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMTexture_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMTexture_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMTexture methods ***/ #define IDirect3DRMTexture_InitFromFile(p,a) (p)->lpVtbl->InitFromFile(p,a) #define IDirect3DRMTexture_InitFromSurface(p,a) (p)->lpVtbl->InitFromSurface(p,a) #define IDirect3DRMTexture_InitFromResource(p,a) (p)->lpVtbl->InitFromResource(p,a) #define IDirect3DRMTexture_Changed(p,a,b) (p)->lpVtbl->Changed(p,a,b) #define IDirect3DRMTexture_SetColors(p,a) (p)->lpVtbl->SetColors(p,a) #define IDirect3DRMTexture_SetShades(p,a) (p)->lpVtbl->SetShades(p,a) #define IDirect3DRMTexture_SetDecalSize(p,a,b) (p)->lpVtbl->SetDecalSize(p,a,b) #define IDirect3DRMTexture_SetDecalOrigin(p,a,b) (p)->lpVtbl->SetDecalOrigin(p,a,b) #define IDirect3DRMTexture_SetDecalScale(p,a) (p)->lpVtbl->SetDecalScale(p,a) #define IDirect3DRMTexture_SetDecalTransparency(p,a) (p)->lpVtbl->SetDecalTransparency(p,a) #define IDirect3DRMTexture_SetDecalTransparencyColor(p,a) (p)->lpVtbl->SetDecalTransparentColor(p,a) #define IDirect3DRMTexture_GetDecalSize(p,a,b) (p)->lpVtbl->GetDecalSize(p,a,b) #define IDirect3DRMTexture_GetDecalOrigin(p,a,b) (p)->lpVtbl->GetDecalOrigin(p,a,b) #define IDirect3DRMTexture_GetImage(p) (p)->lpVtbl->GetImage(p) #define IDirect3DRMTexture_GetShades(p) (p)->lpVtbl->GetShades(p) #define IDirect3DRMTexture_GetColors(p) (p)->lpVtbl->GetColors(p) #define IDirect3DRMTexture_GetDecalScale(p) (p)->lpVtbl->GetDecalScale(p) #define IDirect3DRMTexture_GetDecalTransparency(p) (p)->lpVtbl->GetDecalTransparency(p) #define IDirect3DRMTexture_GetDecalTransparencyColor(p) (p)->lpVtbl->GetDecalTransparencyColor(p) #else /*** IUnknown methods ***/ #define IDirect3DRMTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMTexture_AddRef(p) (p)->AddRef() #define IDirect3DRMTexture_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMTexture_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMTexture_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMTexture_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMTexture_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMTexture_GetAppData(p) (p)->GetAppData() #define IDirect3DRMTexture_SetName(p,a) (p)->SetName(a) #define IDirect3DRMTexture_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMTexture_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMTexture methods ***/ #define IDirect3DRMTexture_InitFromFile(p,a) (p)->InitFromFile(a) #define IDirect3DRMTexture_InitFromSurface(p,a) (p)->InitFromSurface(a) #define IDirect3DRMTexture_InitFromResource(p,a) (p)->InitFromResource(a) #define IDirect3DRMTexture_Changed(p,a,b) (p)->Changed(a,b) #define IDirect3DRMTexture_SetColors(p,a) (p)->SetColors(a) #define IDirect3DRMTexture_SetShades(p,a) (p)->SetShades(a) #define IDirect3DRMTexture_SetDecalSize(p,a,b) (p)->SetDecalSize(a,b) #define IDirect3DRMTexture_SetDecalOrigin(p,a,b) (p)->SetDecalOrigin(a,b) #define IDirect3DRMTexture_SetDecalScale(p,a) (p)->SetDecalScale(a) #define IDirect3DRMTexture_SetDecalTransparency(p,a) (p)->SetDecalTransparency(a) #define IDirect3DRMTexture_SetDecalTransparentColor(p,a) (p)->SetDecalTransparentColor(a) #define IDirect3DRMTexture_GetDecalSize(p,a,b) (p)->GetDecalSize(a,b) #define IDirect3DRMTexture_GetDecalOrigin(p,a,b) (p)->GetDecalOrigin(a,b) #define IDirect3DRMTexture_GetImage(p) (p)->GetImage() #define IDirect3DRMTexture_GetShades(p) (p)->GetShades() #define IDirect3DRMTexture_GetColors(p) (p)->GetColors() #define IDirect3DRMTexture_GetDecalScale(p) (p)->GetDecalScale() #define IDirect3DRMTexture_GetDecalTransparency(p) (p)->GetDecalTransparency() #define IDirect3DRMTexture_GetDecalTransparentColor(p) (p)->GetDecalTransparentColor() #endif /***************************************************************************** * IDirect3DRMTexture2 interface */ #define INTERFACE IDirect3DRMTexture2 DECLARE_INTERFACE_(IDirect3DRMTexture2, IDirect3DRMTexture) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMTexture methods ***/ STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE; STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE; STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE; STDMETHOD(SetColors)(THIS_ DWORD) PURE; STDMETHOD(SetShades)(THIS_ DWORD) PURE; STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE; STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE; STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE; STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE; STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE; STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE; STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE; STDMETHOD_(DWORD, GetShades)(THIS) PURE; STDMETHOD_(DWORD, GetColors)(THIS) PURE; STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE; STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE; STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE; /*** IDirect3DRMTexture2 methods ***/ STDMETHOD(InitFromImage)(THIS_ D3DRMIMAGE *image) PURE; STDMETHOD(InitFromResource2)(THIS_ HMODULE module, const char *name, const char *type) PURE; STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMTexture2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMTexture2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMTexture2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMTexture2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMTexture2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMTexture2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMTexture2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMTexture2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMTexture2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMTexture2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMTexture methods ***/ #define IDirect3DRMTexture2_InitFromFile(p,a) (p)->lpVtbl->InitFromFile(p,a) #define IDirect3DRMTexture2_InitFromSurface(p,a) (p)->lpVtbl->InitFromSurface(p,a) #define IDirect3DRMTexture2_InitFromResource(p,a) (p)->lpVtbl->InitFromResource(p,a) #define IDirect3DRMTexture2_Changed(p,a,b) (p)->lpVtbl->Changed(p,a,b) #define IDirect3DRMTexture2_SetColors(p,a) (p)->lpVtbl->SetColors(p,a) #define IDirect3DRMTexture2_SetShades(p,a) (p)->lpVtbl->SetShades(p,a) #define IDirect3DRMTexture2_SetDecalSize(p,a,b) (p)->lpVtbl->SetDecalSize(p,a,b) #define IDirect3DRMTexture2_SetDecalOrigin(p,a,b) (p)->lpVtbl->SetDecalOrigin(p,a,b) #define IDirect3DRMTexture2_SetDecalScale(p,a) (p)->lpVtbl->SetDecalScale(p,a) #define IDirect3DRMTexture2_SetDecalTransparency(p,a) (p)->lpVtbl->SetDecalTransparency(p,a) #define IDirect3DRMTexture2_SetDecalTransparencyColor(p,a) (p)->lpVtbl->SetDecalTransparentColor(p,a) #define IDirect3DRMTexture2_GetDecalSize(p,a,b) (p)->lpVtbl->GetDecalSize(p,a,b) #define IDirect3DRMTexture2_GetDecalOrigin(p,a,b) (p)->lpVtbl->GetDecalOrigin(p,a,b) #define IDirect3DRMTexture2_GetImage(p) (p)->lpVtbl->GetImage(p) #define IDirect3DRMTexture2_GetShades(p) (p)->lpVtbl->GetShades(p) #define IDirect3DRMTexture2_GetColors(p) (p)->lpVtbl->GetColors(p) #define IDirect3DRMTexture2_GetDecalScale(p) (p)->lpVtbl->GetDecalScale(p) #define IDirect3DRMTexture2_GetDecalTransparency(p) (p)->lpVtbl->GetDecalTransparency(p) #define IDirect3DRMTexture2_GetDecalTransparencyColor(p) (p)->lpVtbl->GetDecalTransparencyColor(p) /*** IDirect3DRMTexture2 methods ***/ #define IDirect3DRMTexture2_InitFromImage(p,a) (p)->lpVtbl->InitFromImage(p,a) #define IDirect3DRMTexture2_InitFromResource2(p,a,b,c) (p)->lpVtbl->InitFromResource2(p,a,b,c) #define IDirect3DRMTexture2_GenerateMIPMap(p,a) (p)->lpVtbl->GenerateMIPMap(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMTexture2_AddRef(p) (p)->AddRef() #define IDirect3DRMTexture2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMTexture2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMTexture2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMTexture2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMTexture2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMTexture2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMTexture2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMTexture2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMTexture2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMTexture methods ***/ #define IDirect3DRMTexture2_InitFromFile(p,a) (p)->InitFromFile(a) #define IDirect3DRMTexture2_InitFromSurface(p,a) (p)->InitFromSurface(a) #define IDirect3DRMTexture2_InitFromResource(p,a) (p)->InitFromResource(a) #define IDirect3DRMTexture2_Changed(p,a,b) (p)->Changed(a,b) #define IDirect3DRMTexture2_SetColors(p,a) (p)->SetColors(a) #define IDirect3DRMTexture2_SetShades(p,a) (p)->SetShades(a) #define IDirect3DRMTexture2_SetDecalSize(p,a,b) (p)->SetDecalSize(a,b) #define IDirect3DRMTexture2_SetDecalOrigin(p,a,b) (p)->SetDecalOrigin(a,b) #define IDirect3DRMTexture2_SetDecalScale(p,a) (p)->SetDecalScale(a) #define IDirect3DRMTexture2_SetDecalTransparency(p,a) (p)->SetDecalTransparency(a) #define IDirect3DRMTexture2_SetDecalTransparentColor(p,a) (p)->SetDecalTransparentColor(a) #define IDirect3DRMTexture2_GetDecalSize(p,a,b) (p)->GetDecalSize(a,b) #define IDirect3DRMTexture2_GetDecalOrigin(p,a,b) (p)->GetDecalOrigin(a,b) #define IDirect3DRMTexture2_GetImage(p) (p)->GetImage() #define IDirect3DRMTexture2_GetShades(p) (p)->GetShades() #define IDirect3DRMTexture2_GetColors(p) (p)->GetColors() #define IDirect3DRMTexture2_GetDecalScale(p) (p)->GetDecalScale() #define IDirect3DRMTexture2_GetDecalTransparency(p) (p)->GetDecalTransparency() #define IDirect3DRMTexture2_GetDecalTransparentColor(p) (p)->GetDecalTransparentColor() /*** IDirect3DRMTexture2 methods ***/ #define IDirect3DRMTexture2_InitFromImage(p,a) (p)->InitFromImage(a) #define IDirect3DRMTexture2_InitFromResource2(p,a,b,c) (p)->InitFromResource2(a,b,c) #define IDirect3DRMTexture2_GenerateMIPMap(p,a) (p)->GenerateMIPMap(a) #endif /***************************************************************************** * IDirect3DRMTexture3 interface */ #define INTERFACE IDirect3DRMTexture3 DECLARE_INTERFACE_(IDirect3DRMTexture3, IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMTexture3 methods ***/ STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE; STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE; STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE; STDMETHOD(Changed)(THIS_ DWORD flags, DWORD rect_count, RECT *rects) PURE; STDMETHOD(SetColors)(THIS_ DWORD) PURE; STDMETHOD(SetShades)(THIS_ DWORD) PURE; STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE; STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE; STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE; STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE; STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE; STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE; STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE; STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE; STDMETHOD_(DWORD, GetShades)(THIS) PURE; STDMETHOD_(DWORD, GetColors)(THIS) PURE; STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE; STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE; STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE; STDMETHOD(InitFromImage)(THIS_ D3DRMIMAGE *image) PURE; STDMETHOD(InitFromResource2)(THIS_ HMODULE module, const char *name, const char *type) PURE; STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE; STDMETHOD(GetSurface)(THIS_ DWORD flags, IDirectDrawSurface **surface) PURE; STDMETHOD(SetCacheOptions)(THIS_ LONG lImportance, DWORD dwFlags) PURE; STDMETHOD(GetCacheOptions)(THIS_ LONG *importance, DWORD *flags) PURE; STDMETHOD(SetDownsampleCallback)(THIS_ D3DRMDOWNSAMPLECALLBACK cb, void *ctx) PURE; STDMETHOD(SetValidationCallback)(THIS_ D3DRMVALIDATIONCALLBACK cb, void *ctx) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMTexture3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMTexture3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMTexture3_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMTexture3_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMTexture3_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMTexture3_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMTexture3_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMTexture3_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMTexture3_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMTexture3_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMTexture3_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMTexture3 methods ***/ #define IDirect3DRMTexture3_InitFromFile(p,a) (p)->lpVtbl->InitFromFile(p,a) #define IDirect3DRMTexture3_InitFromSurface(p,a) (p)->lpVtbl->InitFromSurface(p,a) #define IDirect3DRMTexture3_InitFromResource(p,a) (p)->lpVtbl->InitFromResource(p,a) #define IDirect3DRMTexture3_Changed(p,a,b,c) (p)->lpVtbl->Changed(p,a,b,c) #define IDirect3DRMTexture3_SetColors(p,a) (p)->lpVtbl->SetColors(p,a) #define IDirect3DRMTexture3_SetShades(p,a) (p)->lpVtbl->SetShades(p,a) #define IDirect3DRMTexture3_SetDecalSize(p,a,b) (p)->lpVtbl->SetDecalSize(p,a,b) #define IDirect3DRMTexture3_SetDecalOrigin(p,a,b) (p)->lpVtbl->SetDecalOrigin(p,a,b) #define IDirect3DRMTexture3_SetDecalScale(p,a) (p)->lpVtbl->SetDecalScale(p,a) #define IDirect3DRMTexture3_SetDecalTransparency(p,a) (p)->lpVtbl->SetDecalTransparency(p,a) #define IDirect3DRMTexture3_SetDecalTransparentColor(p,a) (p)->lpVtbl->SetDecalTransparentColor(p,a) #define IDirect3DRMTexture3_GetDecalSize(p,a,b) (p)->lpVtbl->GetDecalSize(p,a,b) #define IDirect3DRMTexture3_GetDecalOrigin(p,a,b) (p)->lpVtbl->GetDecalOrigin(p,a,b) #define IDirect3DRMTexture3_GetImage(p) (p)->lpVtbl->GetImage(p) #define IDirect3DRMTexture3_GetShades(p) (p)->lpVtbl->GetShades(p) #define IDirect3DRMTexture3_GetColors(p) (p)->lpVtbl->GetColors(p) #define IDirect3DRMTexture3_GetDecalScale(p) (p)->lpVtbl->GetDecalScale(p) #define IDirect3DRMTexture3_GetDecalTransparency(p) (p)->lpVtbl->GetDecalTransparency(p) #define IDirect3DRMTexture3_GetDecalTransparentColor(p) (p)->lpVtbl->GetDecalTransparentColor(p) #define IDirect3DRMTexture3_InitFromImage(p,a) (p)->lpVtbl->InitFromImage(p,a) #define IDirect3DRMTexture3_InitFromResource2(p,a,b,c) (p)->lpVtbl->InitFromResource2(p,a,b,c) #define IDirect3DRMTexture3_GenerateMIPMap(p,a) (p)->lpVtbl->GenerateMIPMap(p,a) #define IDirect3DRMTexture3_GetSurface(p,a,b) (p)->lpVtbl->GetSurface(p,a,b) #define IDirect3DRMTexture3_SetCacheOptions(p,a,b) (p)->lpVtbl->SetCacheOptions(p,a,b) #define IDirect3DRMTexture3_GetCacheOptions(p,a,b) (p)->lpVtbl->GetCacheOptions(p,a,b) #define IDirect3DRMTexture3_SetDownsampleCallback(p,a,b) (p)->lpVtbl->SetDownsampleCallback(p,a,b) #define IDirect3DRMTexture3_SetValidationCallback(p,a,b) (p)->lpVtbl->SetValidationCallback(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMTexture3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMTexture3_AddRef(p) (p)->AddRef() #define IDirect3DRMTexture3_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMTexture3_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMTexture3_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMTexture3_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMTexture3_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMTexture3_GetAppData(p) (p)->GetAppData() #define IDirect3DRMTexture3_SetName(p,a) (p)->SetName(a) #define IDirect3DRMTexture3_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMTexture3_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMTexture3 methods ***/ #define IDirect3DRMTexture3_InitFromFile(p,a) (p)->InitFromFile(a) #define IDirect3DRMTexture3_InitFromSurface(p,a) (p)->InitFromSurface(a) #define IDirect3DRMTexture3_InitFromResource(p,a) (p)->InitFromResource(a) #define IDirect3DRMTexture3_Changed(p,a,b,c) (p)->Changed(a,b,c) #define IDirect3DRMTexture3_SetColors(p,a) (p)->SetColors(a) #define IDirect3DRMTexture3_SetShades(p,a) (p)->SetShades(a) #define IDirect3DRMTexture3_SetDecalSize(p,a,b) (p)->SetDecalSize(a,b) #define IDirect3DRMTexture3_SetDecalOrigin(p,a,b) (p)->SetDecalOrigin(a,b) #define IDirect3DRMTexture3_SetDecalScale(p,a) (p)->SetDecalScale(a) #define IDirect3DRMTexture3_SetDecalTransparency(p,a) (p)->SetDecalTransparency(a) #define IDirect3DRMTexture3_SetDecalTransparencyColor(p,a) (p)->SetDecalTransparentColor(a) #define IDirect3DRMTexture3_GetDecalSize(p,a,b) (p)->GetDecalSize(a,b) #define IDirect3DRMTexture3_GetDecalOrigin(p,a,b) (p)->GetDecalOrigin(a,b) #define IDirect3DRMTexture3_GetImage(p) (p)->GetImage() #define IDirect3DRMTexture3_GetShades(p) (p)->GetShades() #define IDirect3DRMTexture3_GetColors(p) (p)->GetColors() #define IDirect3DRMTexture3_GetDecalScale(p) (p)->GetDecalScale() #define IDirect3DRMTexture3_GetDecalTransparency(p) (p)->GetDecalTransparency() #define IDirect3DRMTexture3_GetDecalTransparencyColor(p) (p)->GetDecalTransparencyColor() #define IDirect3DRMTexture3_InitFromImage(p,a) (p)->InitFromImage(a) #define IDirect3DRMTexture3_InitFromResource2(p,a,b,c) (p)->InitFromResource2(a,b,c) #define IDirect3DRMTexture3_GenerateMIPMap(p,a) (p)->GenerateMIPMap(a) #define IDirect3DRMTexture3_GetSurface(p,a,b) (p)->GetSurface(a,b) #define IDirect3DRMTexture3_SetCacheOptions(p,a,b) (p)->SetCacheOptions(a,b) #define IDirect3DRMTexture3_GetCacheOptions(p,a,b) (p)->GetCacheOptions(a,b) #define IDirect3DRMTexture3_SetDownsampleCallback(p,a,b) (p)->SetDownsampleCallback(a,b) #define IDirect3DRMTexture3_SetValidationCallback(p,a,b) (p)->SetValidationCallback(a,b) #endif /***************************************************************************** * IDirect3DRMWrap interface */ #define INTERFACE IDirect3DRMWrap DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMWrap methods ***/ STDMETHOD(Init)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv) PURE; STDMETHOD(Apply)(THIS_ IDirect3DRMObject *object) PURE; STDMETHOD(ApplyRelative)(THIS_ IDirect3DRMFrame *frame, IDirect3DRMObject *object) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMWrap_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMWrap_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMWrap_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMWrap_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMWrap_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMWrap_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMWrap_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMWrap_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMWrap_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMWrap_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMWrap_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMWrap methods ***/ #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) #define IDirect3DRMWrap_Apply(p,a) (p)->lpVtbl->Apply(p,a) #define IDirect3DRMWrap_ApplyRelative(p,a,b) (p)->lpVtbl->ApplyRelative(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMWrap_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMWrap_AddRef(p) (p)->AddRef() #define IDirect3DRMWrap_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMWrap_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMWrap_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMWrap_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMWrap_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMWrap_GetAppData(p) (p)->GetAppData() #define IDirect3DRMWrap_SetName(p,a) (p)->SetName(a) #define IDirect3DRMWrap_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMWrap_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMWrap methods ***/ #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) #define IDirect3DRMWrap_Apply(p,a) (p)->Apply(p,a) #define IDirect3DRMWrap_ApplyRelative(p,a,b) (p)->ApplyRelative(p,a,b) #endif /***************************************************************************** * IDirect3DRMMaterial interface */ #define INTERFACE IDirect3DRMMaterial DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMMaterial methods ***/ STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE; STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE; STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMMaterial_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMMaterial_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMaterial_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMMaterial_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMMaterial_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMMaterial_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMMaterial_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMMaterial_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMMaterial_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMMaterial_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMMaterial methods ***/ #define IDirect3DRMMaterial_SetPower(p,a) (p)->lpVtbl->SetPower(p,a) #define IDirect3DRMMaterial_SetSpecular(p,a,b,c) (p)->lpVtbl->SetSpecular(p,a,b,c) #define IDirect3DRMMaterial_SetEmissive(p,a,b,c) (p)->lpVtbl->SetEmissive(p,a,b,c) #define IDirect3DRMMaterial_GetPower(p) (p)->lpVtbl->GetPower(p) #define IDirect3DRMMaterial_GetSpecular(p,a,b,c) (p)->lpVtbl->GetSpecular(p,a,b,c) #define IDirect3DRMMaterial_GetEmissive(p,a,b,c) (p)->lpVtbl->GetEmissive(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DRMMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMMaterial_AddRef(p) (p)->AddRef() #define IDirect3DRMMaterial_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMaterial_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMMaterial_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMMaterial_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMMaterial_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMMaterial_GetAppData(p) (p)->GetAppData() #define IDirect3DRMMaterial_SetName(p,a) (p)->SetName(a) #define IDirect3DRMMaterial_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMMaterial_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMMaterial methods ***/ #define IDirect3DRMMaterial_SetPower(p,a) (p)->SetPower(a) #define IDirect3DRMMaterial_SetSpecular(p,a,b,c) (p)->SetSpecular(a,b,c) #define IDirect3DRMMaterial_SetEmissive(p,a,b,c) (p)->SetEmissive(a,b,c) #define IDirect3DRMMaterial_GetPower(p) (p)->GetPower() #define IDirect3DRMMaterial_GetSpecular(p,a,b,c) (p)->GetSpecular(a,b,c) #define IDirect3DRMMaterial_GetEmissive(p,a,b,c) (p)->GetEmissive(a,b,c) #endif /***************************************************************************** * IDirect3DRMMaterial2 interface */ #define INTERFACE IDirect3DRMMaterial2 DECLARE_INTERFACE_(IDirect3DRMMaterial2, IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMMaterial2 methods ***/ STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE; STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE; STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; STDMETHOD(GetAmbient)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE; STDMETHOD(SetAmbient)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMMaterial2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMMaterial2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMaterial2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMMaterial2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMMaterial2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMMaterial2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMMaterial2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMMaterial2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMMaterial2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMMaterial2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMMaterial2 methods ***/ #define IDirect3DRMMaterial2_SetPower(p,a) (p)->lpVtbl->SetPower(p,a) #define IDirect3DRMMaterial2_SetSpecular(p,a,b,c) (p)->lpVtbl->SetSpecular(p,a,b,c) #define IDirect3DRMMaterial2_SetEmissive(p,a,b,c) (p)->lpVtbl->SetEmissive(p,a,b,c) #define IDirect3DRMMaterial2_GetPower(p) (p)->lpVtbl->GetPower(p) #define IDirect3DRMMaterial2_GetSpecular(p,a,b,c) (p)->lpVtbl->GetSpecular(p,a,b,c) #define IDirect3DRMMaterial2_GetEmissive(p,a,b,c) (p)->lpVtbl->GetEmissive(p,a,b,c) #define IDirect3DRMMaterial2_SetAmbient(p,a,b,c) (p)->lpVtbl->SetAmbient(p,a,b,c) #define IDirect3DRMMaterial2_GetAmbient(p,a,b,c) (p)->lpVtbl->GetAmbient(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DRMMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMMaterial2_AddRef(p) (p)->AddRef() #define IDirect3DRMMaterial2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMMaterial2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMMaterial2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMMaterial2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMMaterial2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMMaterial2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMMaterial2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMMaterial2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMMaterial2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMMaterial2 methods ***/ #define IDirect3DRMMaterial2_SetPower(p,a) (p)->SetPower(a) #define IDirect3DRMMaterial2_SetSpecular(p,a,b,c) (p)->SetSpecular(a,b,c) #define IDirect3DRMMaterial2_SetEmissive(p,a,b,c) (p)->SetEmissive(a,b,c) #define IDirect3DRMMaterial2_GetPower(p) (p)->GetPower() #define IDirect3DRMMaterial2_GetSpecular(p,a,b,c) (p)->GetSpecular(a,b,c) #define IDirect3DRMMaterial2_GetEmissive(p,a,b,c) (p)->GetEmissive(a,b,c) #define IDirect3DRMMaterial2_SetAmbient(p,a,b,c) (p)->SetAmbient(a,b,c) #define IDirect3DRMMaterial2_GetAmbient(p,a,b,c) (p)->GetAmbient(a,b,c) #endif /***************************************************************************** * IDirect3DRMAnimation interface */ #define INTERFACE IDirect3DRMAnimation DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMAnimation methods ***/ STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE; STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE; STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE; STDMETHOD(SetFrame)(THIS_ IDirect3DRMFrame *frame) PURE; STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE; STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMAnimation_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMAnimation_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMAnimation_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMAnimation_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMAnimation_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMAnimation_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMAnimation_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMAnimation_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMAnimation_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMAnimation_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMAnimation_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMAnimation methods ***/ #define IDirect3DRMAnimation_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a) #define IDirect3DRMAnimation_AddRotateKey(p,a,b) (p)->lpVtbl->AddRotateKey(p,a,b) #define IDirect3DRMAnimation_AddPositionKey(p,a,b,c,d) (p)->lpVtbl->AddPositionKey(p,a,b,c,d) #define IDirect3DRMAnimation_AddScaleKey(p,a,b,c,d) (p)->lpVtbl->AddScaleKey(p,a,b,c,d) #define IDirect3DRMAnimation_DeleteKey(p,a) (p)->lpVtbl->DeleteKey(p,a) #define IDirect3DRMAnimation_SetFrame(p,a) (p)->lpVtbl->SetFrame(p,a) #define IDirect3DRMAnimation_SetTime(p,a) (p)->lpVtbl->SetTime(p,a) #define IDirect3DRMAnimation_GetOptions(p) (p)->lpVtbl->GetOptions(p) #else /*** IUnknown methods ***/ #define IDirect3DRMAnimation_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMAnimation_AddRef(p) (p)->AddRef() #define IDirect3DRMAnimation_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMAnimation_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMAnimation_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMAnimation_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMAnimation_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMAnimation_GetAppData(p) (p)->GetAppData() #define IDirect3DRMAnimation_SetName(p,a) (p)->SetName(a) #define IDirect3DRMAnimation_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMAnimation_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMAnimation methods ***/ #define IDirect3DRMAnimation_SetOptions(p,a) (p)->SetOptions(a) #define IDirect3DRMAnimation_AddRotateKey(p,a,b) (p)->AddRotateKey(a,b) #define IDirect3DRMAnimation_AddPositionKey(p,a,b,c,d) (p)->AddPositionKey(a,b,c,d) #define IDirect3DRMAnimation_AddScaleKey(p,a,b,c,d) (p)->AddScaleKey(a,b,c,d) #define IDirect3DRMAnimation_DeleteKey(p,a) (p)->DeleteKey(a) #define IDirect3DRMAnimation_SetFrame(p,a) (p)->SetFrame(a) #define IDirect3DRMAnimation_SetTime(p,a) (p)->SetTime(a) #define IDirect3DRMAnimation_GetOptions(p) (p)->GetOptions() #endif /***************************************************************************** * IDirect3DRMAnimation2 interface */ #define INTERFACE IDirect3DRMAnimation2 DECLARE_INTERFACE_(IDirect3DRMAnimation2, IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMAnimation2 methods ***/ STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE; STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE; STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE; STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE; STDMETHOD(SetFrame)(THIS_ IDirect3DRMFrame3 *frame) PURE; STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE; STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE; STDMETHOD(GetFrame)(THIS_ IDirect3DRMFrame3 **frame) PURE; STDMETHOD(DeleteKeyByID)(THIS_ DWORD dwID) PURE; STDMETHOD(AddKey)(THIS_ D3DRMANIMATIONKEY *key) PURE; STDMETHOD(ModifyKey)(THIS_ D3DRMANIMATIONKEY *key) PURE; STDMETHOD(GetKeys)(THIS_ D3DVALUE time_min, D3DVALUE time_max, DWORD *key_count, D3DRMANIMATIONKEY *keys); }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMAnimation2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMAnimation2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMAnimation2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMAnimation2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMAnimation2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMAnimation2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMAnimation2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMAnimation2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMAnimation2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMAnimation2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMAnimation2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMAnimation2 methods ***/ #define IDirect3DRMAnimation2_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a) #define IDirect3DRMAnimation2_AddRotateKey(p,a,b) (p)->lpVtbl->AddRotateKey(p,a,b) #define IDirect3DRMAnimation2_AddPositionKey(p,a,b,c,d) (p)->lpVtbl->AddPositionKey(p,a,b,c,d) #define IDirect3DRMAnimation2_AddScaleKey(p,a,b,c,d) (p)->lpVtbl->AddScaleKey(p,a,b,c,d) #define IDirect3DRMAnimation2_DeleteKey(p,a) (p)->lpVtbl->DeleteKey(p,a) #define IDirect3DRMAnimation2_SetFrame(p,a) (p)->lpVtbl->SetFrame(p,a) #define IDirect3DRMAnimation2_SetTime(p,a) (p)->lpVtbl->SetTime(p,a) #define IDirect3DRMAnimation2_GetOptions(p) (p)->lpVtbl->GetOptions(p) #define IDirect3DRMAnimation2_GetFrame(p,a) (p)->lpVtbl->GetFrame(p,a) #define IDirect3DRMAnimation2_DeleteKeyByID(p,a) (p)->lpVtbl->DeleteKeyByID(p,a) #define IDirect3DRMAnimation2_AddKey(p,a) (p)->lpVtbl->AddKey(p,a) #define IDirect3DRMAnimation2_ModifyKey(p,a) (p)->lpVtbl->ModifyKey(p,a) #define IDirect3DRMAnimation2_GetKeys(p,a,b,c,d) (p)->lpVtbl->GetKeys(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirect3DRMAnimation2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMAnimation2_AddRef(p) (p)->AddRef() #define IDirect3DRMAnimation2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMAnimation2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMAnimation2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMAnimation2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMAnimation2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMAnimation2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMAnimation2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMAnimation2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMAnimation2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMAnimation2 methods ***/ #define IDirect3DRMAnimation2_SetOptions(p,a) (p)->SetOptions(a) #define IDirect3DRMAnimation2_AddRotateKey(p,a,b) (p)->AddRotateKey(a,b) #define IDirect3DRMAnimation2_AddPositionKey(p,a,b,c,d) (p)->AddPositionKey(a,b,c,d) #define IDirect3DRMAnimation2_AddScaleKey(p,a,b,c,d) (p)->AddScaleKey(a,b,c,d) #define IDirect3DRMAnimation2_DeleteKey(p,a) (p)->DeleteKey(a) #define IDirect3DRMAnimation2_SetFrame(p,a) (p)->SetFrame(a) #define IDirect3DRMAnimation2_SetTime(p,a) (p)->SetTime(a) #define IDirect3DRMAnimation2_GetOptions(p) (p)->GetOptions() #define IDirect3DRMAnimation2_GetFrame(p,a) (p)->GetFrame(a) #define IDirect3DRMAnimation2_DeleteKeyByID(p,a) (p)->DeleteKeyByID(a) #define IDirect3DRMAnimation2_AddKey(p,a) (p)->AddKey(a) #define IDirect3DRMAnimation2_ModifyKey(p,a) (p)->ModifyKey(a) #define IDirect3DRMAnimation2_GetKeys(p,a,b,c,d) (p)->GetKeys(a,b,c,d) #endif /***************************************************************************** * IDirect3DRMAnimationSet interface */ #define INTERFACE IDirect3DRMAnimationSet DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMAnimationSet methods ***/ STDMETHOD(AddAnimation)(THIS_ IDirect3DRMAnimation *animation) PURE; STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx, IDirect3DRMFrame *parent)PURE; STDMETHOD(DeleteAnimation)(THIS_ IDirect3DRMAnimation *animation) PURE; STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMAnimationSet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMAnimationSet_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMAnimationSet_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMAnimationSet_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMAnimationSet_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMAnimationSet_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMAnimationSet_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMAnimationSet_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMAnimationSet_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMAnimationSet_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMAnimationSet_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMAnimationSet methods ***/ #define IDirect3DRMAnimationSet_AddAnimation(p,a) (p)->lpVtbl->AddAnimation(p,a) #define IDirect3DRMAnimationSet_Load(p,a,b,c,d,e,f) (p)->lpVtbl->Load(p,a,b,c,d,e,f) #define IDirect3DRMAnimationSet_DeleteAnimation(p,a) (p)->lpVtbl->DeleteAnimation(p,a) #define IDirect3DRMAnimationSet_SetTime(p,a) (p)->lpVtbl->SetTime(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMAnimationSet_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMAnimationSet_AddRef(p) (p)->AddRef() #define IDirect3DRMAnimationSet_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMAnimationSet_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMAnimationSet_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMAnimationSet_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMAnimationSet_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMAnimationSet_GetAppData(p) (p)->GetAppData() #define IDirect3DRMAnimationSet_SetName(p,a) (p)->SetName(a) #define IDirect3DRMAnimationSet_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMAnimationSet_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMAnimationSet methods ***/ #define IDirect3DRMAnimationSet_AddAnimation(p,a) (p)->AddAnimation(a) #define IDirect3DRMAnimationSet_Load(p,a,b,c,d,e,f) (p)->Load(a,b,c,d,e,f) #define IDirect3DRMAnimationSet_DeleteAnimation(p,a) (p)->DeleteAnimation(a) #define IDirect3DRMAnimationSet_SetTime(p,a) (p)->SetTime(a) #endif /***************************************************************************** * IDirect3DRMAnimationSet2 interface */ #define INTERFACE IDirect3DRMAnimationSet2 DECLARE_INTERFACE_(IDirect3DRMAnimationSet2, IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMAnimationSet2 methods ***/ STDMETHOD(AddAnimation)(THIS_ IDirect3DRMAnimation2 *animation) PURE; STDMETHOD(Load)(THIS_ void *source, void *object_id, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURE3CALLBACK cb, void *ctx, IDirect3DRMFrame3 *parent_frame)PURE; STDMETHOD(DeleteAnimation)(THIS_ IDirect3DRMAnimation2 *animation) PURE; STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE; STDMETHOD(GetAnimations)(THIS_ struct IDirect3DRMAnimationArray **array) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMAnimationSet2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMAnimationSet2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMAnimationSet2_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMAnimationSet2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMAnimationSet2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMAnimationSet2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMAnimationSet2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMAnimationSet2_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMAnimationSet2_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMAnimationSet2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMAnimationSet2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMAnimationSet2 methods ***/ #define IDirect3DRMAnimationSet2_AddAnimation(p,a) (p)->lpVtbl->AddAnimation(p,a) #define IDirect3DRMAnimationSet2_Load(p,a,b,c,d,e,f) (p)->lpVtbl->Load(p,a,b,c,d,e,f) #define IDirect3DRMAnimationSet2_DeleteAnimation(p,a) (p)->lpVtbl->DeleteAnimation(p,a) #define IDirect3DRMAnimationSet2_SetTime(p,a) (p)->lpVtbl->SetTime(p,a) #define IDirect3DRMAnimationSet2_GetAnimations(p,a) (p)->lpVtbl->GetAnimations(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMAnimationSet2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMAnimationSet2_AddRef(p) (p)->AddRef() #define IDirect3DRMAnimationSet2_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMAnimationSet2_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMAnimationSet2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMAnimationSet2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMAnimationSet2_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMAnimationSet2_GetAppData(p) (p)->GetAppData() #define IDirect3DRMAnimationSet2_SetName(p,a) (p)->SetName(a) #define IDirect3DRMAnimationSet2_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMAnimationSet2_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMAnimationSet2 methods ***/ #define IDirect3DRMAnimationSet2_AddAnimation(p,a) (p)->AddAnimation(a) #define IDirect3DRMAnimationSet2_Load(p,a,b,c,d,e,f) (p)->Load(a,b,c,d,e,f) #define IDirect3DRMAnimationSet2_DeleteAnimation(p,a) (p)->DeleteAnimation(a) #define IDirect3DRMAnimationSet2_SetTime(p,a) (p)->SetTime(a) #define IDirect3DRMAnimationSet2_GetAnimations(p,a) (p)->GetAnimations(a) #endif /***************************************************************************** * IDirect3DRMUserVisual interface */ #define INTERFACE IDirect3DRMUserVisual DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMUserVisual methods ***/ STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMUserVisual_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMUserVisual_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMUserVisual_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMUserVisual_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMUserVisual_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMUserVisual_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMUserVisual_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMUserVisual_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMUserVisual_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMUserVisual_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMUserVisual_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMUserVisual methods ***/ #define IDirect3DRMUserVisual_Init(p,a,b) (p)->lpVtbl->Init(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMUserVisual_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMUserVisual_AddRef(p) (p)->AddRef() #define IDirect3DRMUserVisual_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMUserVisual_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMUserVisual_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMUserVisual_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMUserVisual_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMUserVisual_GetAppData(p) (p)->GetAppData() #define IDirect3DRMUserVisual_SetName(p,a) (p)->SetName(a) #define IDirect3DRMUserVisual_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMUserVisual_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMUserVisual methods ***/ #define IDirect3DRMUserVisual_Init(p,a,b) (p)->Init(a,b) #endif /***************************************************************************** * IDirect3DRMArray interface */ #define INTERFACE IDirect3DRMArray DECLARE_INTERFACE_(IDirect3DRMArray, IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMArray_GetSize(p) (p)->lpVtbl->GetSize(p) #else /*** IUnknown methods ***/ #define IDirect3DRMArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMArray_AddRef(p) (p)->AddRef() #define IDirect3DRMArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMArray_GetSize(p) (p)->GetSize() #endif /***************************************************************************** * IDirect3DRMObjectArray interface */ #define INTERFACE IDirect3DRMObjectArray DECLARE_INTERFACE_(IDirect3DRMObjectArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMObjectArray methods ***/ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMObject **element) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMObjectArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMObjectArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMObjectArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMObjectArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMObjectArray methods ***/ #define IDirect3DRMObjectArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMObjectArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMObjectArray_AddRef(p) (p)->AddRef() #define IDirect3DRMObjectArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMObjectArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMObjectArray methods ***/ #define IDirect3DRMObjectArray_GetElement(p,a,b) (p)->GetElement(a,b) #endif /***************************************************************************** * IDirect3DRMDeviceArray interface */ #define INTERFACE IDirect3DRMDeviceArray DECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMDeviceArray methods ***/ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMDevice **element) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMDeviceArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMDeviceArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMDeviceArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMDeviceArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMDeviceArray methods ***/ #define IDirect3DRMDeviceArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMDeviceArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMDeviceArray_AddRef(p) (p)->AddRef() #define IDirect3DRMDeviceArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMDeviceArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMDeviceArray methods ***/ #define IDirect3DRMDeviceArray_GetElement(p,a,b) (p)->GetElement(a,b) #endif /***************************************************************************** * IDirect3DRMFrameArray interface */ #define INTERFACE IDirect3DRMFrameArray DECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMFrameArray methods ***/ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMFrame **element) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMFrameArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMFrameArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMFrameArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMFrameArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMFrameArray methods ***/ #define IDirect3DRMFrameArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMFrameArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMFrameArray_AddRef(p) (p)->AddRef() #define IDirect3DRMFrameArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMFrameArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMFrameArray methods ***/ #define IDirect3DRMFrameArray_GetElement(p,a,b) (p)->GetElement(a,b) #endif /***************************************************************************** * IDirect3DRMViewportArray interface */ #define INTERFACE IDirect3DRMViewportArray DECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMViewportArray methods ***/ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMViewport **element) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMViewportArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMViewportArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMViewportArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMViewportArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMViewportArray methods ***/ #define IDirect3DRMViewportArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMViewportArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMViewportArray_AddRef(p) (p)->AddRef() #define IDirect3DRMViewportArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMViewportArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMViewportArray methods ***/ #define IDirect3DRMviewportArray_GetElement(p,a,b) (p)->GetElement(a,b) #endif /***************************************************************************** * IDirect3DRMVisualArray interface */ #define INTERFACE IDirect3DRMVisualArray DECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMVisualArray methods ***/ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMVisual **element) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMVisualArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMVisualArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMVisualArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMVisualArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMVisualArray methods ***/ #define IDirect3DRMVisualArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMVisualArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMVisualArray_AddRef(p) (p)->AddRef() #define IDirect3DRMVisualArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMVisualArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMVisualArray methods ***/ #define IDirect3DRMVisualArray_GetElement(p,a,b) (p)->GetElement(a,b) #endif /***************************************************************************** * IDirect3DRMAnimationArray interface */ #define INTERFACE IDirect3DRMAnimationArray DECLARE_INTERFACE_(IDirect3DRMAnimationArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMAnimationArray methods ***/ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMAnimation2 **element) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMAnimationArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMAnimationArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMAnimationArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMAnimationArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMAnimationArray methods ***/ #define IDirect3DRMAnimationArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMAnimationArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMAnimationArray_AddRef(p) (p)->AddRef() #define IDirect3DRMAnimationArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMAnimationArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMAnimationArray methods ***/ #define IDirect3DRMAnimationArray_GetElement(p,a,b) (p)->GetElement(a,b) #endif /***************************************************************************** * IDirect3DRMPickedArray interface */ #define INTERFACE IDirect3DRMPickedArray DECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMPickedArray methods ***/ STDMETHOD(GetPick)(THIS_ DWORD index, IDirect3DRMVisual **visual, IDirect3DRMFrameArray **frame_array, D3DRMPICKDESC *pick_desc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMPickedArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMPickedArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMPickedArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMPickedArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMPickedArray methods ***/ #define IDirect3DRMPickedArray_GetPick(p,a,b,c,d) (p)->lpVtbl->GetPick(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirect3DRMPickedArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMPickedArray_AddRef(p) (p)->AddRef() #define IDirect3DRMPickedArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMPickedArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMPickedArray methods ***/ #define IDirect3DRMPickedArray_GetPick(p,a,b,c,d) (p)->GetPick(a,b,c,d) #endif /***************************************************************************** * IDirect3DRMLightArray interface */ #define INTERFACE IDirect3DRMLightArray DECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMLightArray methods ***/ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMLight **element) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMLightArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMLightArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMLightArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMLightArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMLightArray methods ***/ #define IDirect3DRMLightArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMLightArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMLightArray_AddRef(p) (p)->AddRef() #define IDirect3DRMLightArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMLightArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMLightArray methods ***/ #define IDirect3DRMLightArray_GetElement(p,a,b) (p)->GetElement(a,b) #endif /***************************************************************************** * IDirect3DRMFaceArray interface */ #define INTERFACE IDirect3DRMFaceArray DECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMFaceArray methods ***/ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMFace **element) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMFaceArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMFaceArray_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMFaceArray_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMFaceArray_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMFaceArray methods ***/ #define IDirect3DRMFaceArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DRMFaceArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMFaceArray_AddRef(p) (p)->AddRef() #define IDirect3DRMFaceArray_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMFaceArray_GetSize(p) (p)->GetSize() /*** IDirect3DRMFaceArray methods ***/ #define IDirect3DRMFaceArray_GetElement(p,a,b) (p)->GetElement(a,b) #endif /***************************************************************************** * IDirect3DRMPicked2Array interface */ #define INTERFACE IDirect3DRMPicked2Array DECLARE_INTERFACE_(IDirect3DRMPicked2Array, IDirect3DRMArray) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMArray methods ***/ STDMETHOD_(DWORD, GetSize)(THIS) PURE; /*** IDirect3DRMPicked2Array methods ***/ STDMETHOD(GetPick)(THIS_ DWORD index, IDirect3DRMVisual **visual, IDirect3DRMFrameArray **frame_array, D3DRMPICKDESC2 *pick_desc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMPicked2Array_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMPicked2Array_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMPicked2Array_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMArray methods ***/ #define IDirect3DRMPicked2Array_GetSize(p) (p)->lpVtbl->GetSize(p) /*** IDirect3DRMPicked2Array methods ***/ #define IDirect3DRMPicked2Array_GetPick(p,a,b,c,d) (p)->lpVtbl->GetPick(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirect3DRMPicked2Array_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMPicked2Array_AddRef(p) (p)->AddRef() #define IDirect3DRMPicked2Array_Release(p) (p)->Release() /*** IDirect3DRMArray methods ***/ #define IDirect3DRMPicked2Array_GetSize(p) (p)->GetSize() /*** IDirect3DRMPicked2Array methods ***/ #define IDirect3DRMPicked2Array_GetPick(p,a,b,c,d) (p)->GetPick(a,b,c,d) #endif /***************************************************************************** * IDirect3DRMInterpolator interface */ #define INTERFACE IDirect3DRMInterpolator DECLARE_INTERFACE_(IDirect3DRMInterpolator, IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMInterpolator methods ***/ STDMETHOD(AttachObject)(THIS_ IDirect3DRMObject *object) PURE; STDMETHOD(GetAttachedObjects)(THIS_ IDirect3DRMObjectArray **array) PURE; STDMETHOD(DetachObject)(THIS_ IDirect3DRMObject *object) PURE; STDMETHOD(SetIndex)(THIS_ D3DVALUE) PURE; STDMETHOD_(D3DVALUE, GetIndex)(THIS) PURE; STDMETHOD(Interpolate)(THIS_ D3DVALUE index, IDirect3DRMObject *object, D3DRMINTERPOLATIONOPTIONS flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMInterpolator_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMInterpolator_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMInterpolator_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMInterpolator_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMInterpolator_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMInterpolator_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMInterpolator_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMInterpolator_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMInterpolator_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMInterpolator_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMInterpolator_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMInterpolator methods ***/ #define IDirect3DRMInterpolator_AttachObject(p,a) (p)->lpVtbl->AttachObject(p,a) #define IDirect3DRMInterpolator_GetAttachedObjects(p,a) (p)->lpVtbl->GetAttachedObjects(p,a) #define IDirect3DRMInterpolator_DetachObject(p,a) (p)->lpVtbl->DetachObject(p,a) #define IDirect3DRMInterpolator_SetIndex(p,a) (p)->lpVtbl->SetIndex(p,a) #define IDirect3DRMInterpolator_GetIndex(p) (p)->lpVtbl->GetIndex(p) #define IDirect3DRMInterpolator_Interpolate(p,a,b,c) (p)->lpVtbl->Interpolate(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DRMInterpolator_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMInterpolator_AddRef(p) (p)->AddRef() #define IDirect3DRMInterpolator_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMInterpolator_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMInterpolator_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMInterpolator_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMInterpolator_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMInterpolator_GetAppData(p) (p)->GetAppData() #define IDirect3DRMInterpolator_SetName(p,a) (p)->SetName(a) #define IDirect3DRMInterpolator_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMInterpolator_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMInterpolator methods ***/ #define IDirect3DRMInterpolator_AttachObject(p,a) (p)->AttachObject(a) #define IDirect3DRMInterpolator_GetAttachedObjects(p,a) (p)->GetAttachedObjects(a) #define IDirect3DRMInterpolator_DetachObject(p,a) (p)->DetachObject(a) #define IDirect3DRMInterpolator_SetIndex(p,a) (p)->SetIndex(a) #define IDirect3DRMInterpolator_GetIndex(p) (p)->GetIndex() #define IDirect3DRMInterpolator_Interpolate(p,a,b,c) (p)->Interpolate(a,b,c) #endif /***************************************************************************** * IDirect3DRMClippedVisual interface */ #define INTERFACE IDirect3DRMClippedVisual DECLARE_INTERFACE_(IDirect3DRMClippedVisual, IDirect3DRMVisual) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMClippedVisual methods ***/ STDMETHOD(Init) (THIS_ IDirect3DRMVisual *visual) PURE; STDMETHOD(AddPlane) (THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *point, D3DVECTOR *normal, DWORD flags, DWORD *id) PURE; STDMETHOD(DeletePlane)(THIS_ DWORD, DWORD) PURE; STDMETHOD(GetPlaneIDs)(THIS_ DWORD *count, DWORD *id, DWORD flags) PURE; STDMETHOD(GetPlane) (THIS_ DWORD id, IDirect3DRMFrame3 *reference, D3DVECTOR *point, D3DVECTOR *normal, DWORD flags) PURE; STDMETHOD(SetPlane) (THIS_ DWORD id, IDirect3DRMFrame3 *reference, D3DVECTOR *point, D3DVECTOR *normal, DWORD flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMClippedVisual_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMClippedVisual_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMClippedVisual_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMClippedVisual_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMClippedVisual_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMClippedVisual_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMClippedVisual_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMClippedVisual_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMClippedVisual_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMClippedVisual_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMClippedVisual_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMClippedVisual methods ***/ #define IDirect3DRMClippedVisual_Init(p,a) (p)->lpVtbl->Init(p,a) #define IDirect3DRMClippedVisual_AddPlane(p,a,b,c,d,e) (p)->lpVtbl->AddPlane(p,a,b,c,d,e) #define IDirect3DRMClippedVisual_DeletePlane(p,a,b) (p)->lpVtbl->DeletePlane(p,a,b) #define IDirect3DRMClippedVisual_GetPlaneIDs(p,a,b,c) (p)->lpVtbl->GetPlaneIDs(p,a,b,c) #define IDirect3DRMClippedVisual_GetPlane(p,a,b,c,d,e) (p)->lpVtbl->GetPlane(p,a,b,c,d,e) #define IDirect3DRMClippedVisual_SetPlane(p,a,b,c,d,e) (p)->lpVtbl->SetPlane(p,a,b,c,d,e) #else /*** IUnknown methods ***/ #define IDirect3DRMClippedVisual_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMClippedVisual_AddRef(p) (p)->AddRef() #define IDirect3DRMClippedVisual_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMClippedVisual_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMClippedVisual_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMClippedVisual_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMClippedVisual_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMClippedVisual_GetAppData(p) (p)->GetAppData() #define IDirect3DRMClippedVisual_SetName(p,a) (p)->SetName(a) #define IDirect3DRMClippedVisual_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMClippedVisual_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMClippedVisual methods ***/ #define IDirect3DRMClippedVisual_Init(p,a) (p)->Init(a) #define IDirect3DRMClippedVisual_AddPlane(p,a,b,c,d,e) (p)->AddPlane(a,b,c,d,e) #define IDirect3DRMClippedVisual_DeletePlane(p,a,b) (p)->DeletePlane(a,b) #define IDirect3DRMClippedVisual_GetPlaneIDs(p,a,b,c) (p)->GetPlaneIDs(a,b,c) #define IDirect3DRMClippedVisual_GetPlane(p,a,b,c,d,e) (p)->GetPlane(a,b,c,d,e) #define IDirect3DRMClippedVisual_SetPlane(p,a,b,c,d,e) (p)->SetPlane(a,b,c,d,e) #endif #ifdef __cplusplus }; #endif #endif /* __D3DRMOBJ_H__ */ ================================================ FILE: wine/windows/d3drmwin.h ================================================ /* * Copyright (C) 2010 Vijay Kiran Kamuju * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DRMWIN_H__ #define __D3DRMWIN_H__ #include #include #include #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * Direct3DRMWinDevice interface GUID */ DEFINE_GUID(IID_IDirect3DRMWinDevice, 0xc5016cc0, 0xd273, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1); typedef struct IDirect3DRMWinDevice *LPDIRECT3DRMWINDEVICE, **LPLPDIRECT3DRMWINDEVICE; /***************************************************************************** * IDirect3DRMWinDevice interface */ #define INTERFACE IDirect3DRMWinDevice DECLARE_INTERFACE_(IDirect3DRMWinDevice,IDirect3DRMObject) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DRMObject methods ***/ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; STDMETHOD_(DWORD, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; /*** IDirect3DRMWinDevice methods ***/ STDMETHOD(HandlePaint)(THIS_ HDC) PURE; STDMETHOD(HandleActivate)(THIS_ WORD) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DRMWinDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DRMWinDevice_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DRMWinDevice_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DRMObject methods ***/ #define IDirect3DRMWinDevice_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirect3DRMWinDevice_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b) #define IDirect3DRMWinDevice_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b) #define IDirect3DRMWinDevice_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a) #define IDirect3DRMWinDevice_GetAppData(p) (p)->lpVtbl->GetAppData(p) #define IDirect3DRMWinDevice_SetName(p,a) (p)->lpVtbl->SetName(p,a) #define IDirect3DRMWinDevice_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirect3DRMWinDevice_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b) /*** IDirect3DRMWinDevice methods ***/ #define IDirect3DRMWinDevice_HandlePaint(p,a) (p)->lpVtbl->HandlePaint(p,a) #define IDirect3DRMWinDevice_HandleActivate(p,a) (p)->lpVtbl->HandleActivate(p,a) #else /*** IUnknown methods ***/ #define IDirect3DRMWinDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DRMWinDevice_AddRef(p) (p)->AddRef() #define IDirect3DRMwinDevice_Release(p) (p)->Release() /*** IDirect3DRMObject methods ***/ #define IDirect3DRMWinDevice_Clone(p,a,b,c) (p)->Clone(a,b,c) #define IDirect3DRMWinDevice_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b) #define IDirect3DRMWinDevice_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b) #define IDirect3DRMWinDevice_SetAppData(p,a) (p)->SetAppData(a) #define IDirect3DRMWinDevice_GetAppData(p) (p)->GetAppData() #define IDirect3DRMWinDevice_SetName(p,a) (p)->SetName(a) #define IDirect3DRMWinDevice_GetName(p,a,b) (p)->GetName(a,b) #define IDirect3DRMWinDevice_GetClassName(p,a,b) (p)->GetClassName(a,b) /*** IDirect3DRMWinDevice methods ***/ #define IDirect3DRMWinDevice_HandlePaint(p,a) (p)->HandlePaint(a) #define IDirect3DRMWinDevice_HandleActivate(p,a) (p)->HandleActivate(a) #endif #ifdef __cplusplus } #endif #endif /* __D3DRMWIN_H__ */ ================================================ FILE: wine/windows/d3dtypes.h ================================================ /* * Copyright (C) 2000 Peter Hunnisett * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* FIXME: Need to add C++ code for certain structs for headers - this is going to be a problem if WINE continues to only use C code - I suppose that we could always inline in the header file to get around that little problem... */ /* FIXME: We need to implement versioning on everything directx 5 and up if these headers are going to be generically useful for directx stuff */ #ifndef __WINE_D3DTYPES_H #define __WINE_D3DTYPES_H #include #include #include #ifdef __i386__ #include #endif #define D3DVALP(val, prec) ((float)(val)) #define D3DVAL(val) ((float)(val)) #define D3DDivide(a, b) (float)((double) (a) / (double) (b)) #define D3DMultiply(a, b) ((a) * (b)) typedef LONG D3DFIXED; #ifndef RGB_MAKE #define CI_GETALPHA(ci) ((ci) >> 24) #define CI_GETINDEX(ci) (((ci) >> 8) & 0xffff) #define CI_GETFRACTION(ci) ((ci) & 0xff) #define CI_ROUNDINDEX(ci) CI_GETINDEX((ci) + 0x80) #define CI_MASKALPHA(ci) ((ci) & 0xffffff) #define CI_MAKE(a, i, f) (((a) << 24) | ((i) << 8) | (f)) #define RGBA_GETALPHA(rgb) ((rgb) >> 24) #define RGBA_GETRED(rgb) (((rgb) >> 16) & 0xff) #define RGBA_GETGREEN(rgb) (((rgb) >> 8) & 0xff) #define RGBA_GETBLUE(rgb) ((rgb) & 0xff) #define RGBA_MAKE(r, g, b, a) ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))) #define D3DRGB(r, g, b) \ (0xff000000 | ( ((LONG)((r) * 255)) << 16) | (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255)) #define D3DRGBA(r, g, b, a) \ ( (((LONG)((a) * 255)) << 24) | (((LONG)((r) * 255)) << 16) \ | (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255) \ ) #define RGB_GETRED(rgb) (((rgb) >> 16) & 0xff) #define RGB_GETGREEN(rgb) (((rgb) >> 8) & 0xff) #define RGB_GETBLUE(rgb) ((rgb) & 0xff) #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff)) #define RGB_MAKE(r, g, b) ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b))) #define RGBA_TORGB(rgba) ((D3DCOLOR) ((rgba) & 0xffffff)) #define RGB_TORGBA(rgb) ((D3DCOLOR) ((rgb) | 0xff000000)) #endif #define D3DENUMRET_CANCEL DDENUMRET_CANCEL #define D3DENUMRET_OK DDENUMRET_OK typedef HRESULT (CALLBACK *LPD3DVALIDATECALLBACK)(void *ctx, DWORD offset); typedef HRESULT (CALLBACK *LPD3DENUMTEXTUREFORMATSCALLBACK)(DDSURFACEDESC *surface_desc, void *ctx); typedef HRESULT (CALLBACK *LPD3DENUMPIXELFORMATSCALLBACK)(DDPIXELFORMAT *format, void *ctx); #ifndef DX_SHARED_DEFINES typedef float D3DVALUE,*LPD3DVALUE; #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR, *LPD3DCOLOR; #define D3DCOLOR_DEFINED #endif #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { union { D3DVALUE x; D3DVALUE dvX; } DUMMYUNIONNAME1; union { D3DVALUE y; D3DVALUE dvY; } DUMMYUNIONNAME2; union { D3DVALUE z; D3DVALUE dvZ; } DUMMYUNIONNAME3; #if defined(__cplusplus) && defined(D3D_OVERLOADS) /* the definitions for these methods are in d3dvec.inl */ public: /*** constructors ***/ _D3DVECTOR() {} _D3DVECTOR(D3DVALUE f); _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z); _D3DVECTOR(const D3DVALUE f[3]); /*** assignment operators ***/ _D3DVECTOR& operator += (const _D3DVECTOR& v); _D3DVECTOR& operator -= (const _D3DVECTOR& v); _D3DVECTOR& operator *= (const _D3DVECTOR& v); _D3DVECTOR& operator /= (const _D3DVECTOR& v); _D3DVECTOR& operator *= (D3DVALUE s); _D3DVECTOR& operator /= (D3DVALUE s); /*** unary operators ***/ friend _D3DVECTOR operator + (const _D3DVECTOR& v); friend _D3DVECTOR operator - (const _D3DVECTOR& v); /*** binary operators ***/ friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2); friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2); friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s); friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v); friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s); friend D3DVALUE SquareMagnitude(const _D3DVECTOR& v); friend D3DVALUE Magnitude(const _D3DVECTOR& v); friend _D3DVECTOR Normalize(const _D3DVECTOR& v); friend D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2); friend _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2); #endif } D3DVECTOR,*LPD3DVECTOR; #define D3DVECTOR_DEFINED #endif #define DX_SHARED_DEFINES #endif /* DX_SHARED_DEFINES */ typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE; typedef DWORD D3DTEXTUREHANDLE, *LPD3DTEXTUREHANDLE; typedef DWORD D3DMATRIXHANDLE, *LPD3DMATRIXHANDLE; typedef struct _D3DCOLORVALUE { union { D3DVALUE r; D3DVALUE dvR; } DUMMYUNIONNAME1; union { D3DVALUE g; D3DVALUE dvG; } DUMMYUNIONNAME2; union { D3DVALUE b; D3DVALUE dvB; } DUMMYUNIONNAME3; union { D3DVALUE a; D3DVALUE dvA; } DUMMYUNIONNAME4; } D3DCOLORVALUE,*LPD3DCOLORVALUE; typedef struct _D3DRECT { union { LONG x1; LONG lX1; } DUMMYUNIONNAME1; union { LONG y1; LONG lY1; } DUMMYUNIONNAME2; union { LONG x2; LONG lX2; } DUMMYUNIONNAME3; union { LONG y2; LONG lY2; } DUMMYUNIONNAME4; } D3DRECT, *LPD3DRECT; typedef struct _D3DHVERTEX { DWORD dwFlags; union { D3DVALUE hx; D3DVALUE dvHX; } DUMMYUNIONNAME1; union { D3DVALUE hy; D3DVALUE dvHY; } DUMMYUNIONNAME2; union { D3DVALUE hz; D3DVALUE dvHZ; } DUMMYUNIONNAME3; } D3DHVERTEX, *LPD3DHVERTEX; /* * Transformed/lit vertices */ typedef struct _D3DTLVERTEX { union { D3DVALUE sx; D3DVALUE dvSX; } DUMMYUNIONNAME1; union { D3DVALUE sy; D3DVALUE dvSY; } DUMMYUNIONNAME2; union { D3DVALUE sz; D3DVALUE dvSZ; } DUMMYUNIONNAME3; union { D3DVALUE rhw; D3DVALUE dvRHW; } DUMMYUNIONNAME4; union { D3DCOLOR color; D3DCOLOR dcColor; } DUMMYUNIONNAME5; union { D3DCOLOR specular; D3DCOLOR dcSpecular; } DUMMYUNIONNAME6; union { D3DVALUE tu; D3DVALUE dvTU; } DUMMYUNIONNAME7; union { D3DVALUE tv; D3DVALUE dvTV; } DUMMYUNIONNAME8; #if defined(__cplusplus) && defined(D3D_OVERLOADS) public: _D3DTLVERTEX() {} _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) { sx = v.x; sy = v.y; sz = v.z; rhw = _rhw; color = _color; specular = _specular; tu = _tu; tv = _tv; } #endif } D3DTLVERTEX, *LPD3DTLVERTEX; typedef struct _D3DLVERTEX { union { D3DVALUE x; D3DVALUE dvX; } DUMMYUNIONNAME1; union { D3DVALUE y; D3DVALUE dvY; } DUMMYUNIONNAME2; union { D3DVALUE z; D3DVALUE dvZ; } DUMMYUNIONNAME3; DWORD dwReserved; union { D3DCOLOR color; D3DCOLOR dcColor; } DUMMYUNIONNAME4; union { D3DCOLOR specular; D3DCOLOR dcSpecular; } DUMMYUNIONNAME5; union { D3DVALUE tu; D3DVALUE dvTU; } DUMMYUNIONNAME6; union { D3DVALUE tv; D3DVALUE dvTV; } DUMMYUNIONNAME7; } D3DLVERTEX, *LPD3DLVERTEX; typedef struct _D3DVERTEX { union { D3DVALUE x; D3DVALUE dvX; } DUMMYUNIONNAME1; union { D3DVALUE y; D3DVALUE dvY; } DUMMYUNIONNAME2; union { D3DVALUE z; D3DVALUE dvZ; } DUMMYUNIONNAME3; union { D3DVALUE nx; D3DVALUE dvNX; } DUMMYUNIONNAME4; union { D3DVALUE ny; D3DVALUE dvNY; } DUMMYUNIONNAME5; union { D3DVALUE nz; D3DVALUE dvNZ; } DUMMYUNIONNAME6; union { D3DVALUE tu; D3DVALUE dvTU; } DUMMYUNIONNAME7; union { D3DVALUE tv; D3DVALUE dvTV; } DUMMYUNIONNAME8; #if defined(__cplusplus) && defined(D3D_OVERLOADS) public: _D3DVERTEX() {} _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) { x = v.x; y = v.y; z = v.z; nx = n.x; ny = n.y; nz = n.z; tu = _tu; tv = _tv; } #endif } D3DVERTEX, *LPD3DVERTEX; typedef struct _D3DMATRIX { D3DVALUE _11, _12, _13, _14; D3DVALUE _21, _22, _23, _24; D3DVALUE _31, _32, _33, _34; D3DVALUE _41, _42, _43, _44; #if defined(__cplusplus) && defined(D3D_OVERLOADS) _D3DMATRIX() { } /* This is different from MS, but avoids anonymous structs. */ D3DVALUE &operator () (int r, int c) { return (&_11)[r*4 + c]; } const D3DVALUE &operator() (int r, int c) const { return (&_11)[r*4 + c]; } #endif } D3DMATRIX, *LPD3DMATRIX; #if defined(__cplusplus) && defined(D3D_OVERLOADS) #include #endif typedef struct _D3DVIEWPORT { DWORD dwSize; DWORD dwX; DWORD dwY; DWORD dwWidth; DWORD dwHeight; D3DVALUE dvScaleX; D3DVALUE dvScaleY; D3DVALUE dvMaxX; D3DVALUE dvMaxY; D3DVALUE dvMinZ; D3DVALUE dvMaxZ; } D3DVIEWPORT, *LPD3DVIEWPORT; typedef struct _D3DVIEWPORT2 { DWORD dwSize; DWORD dwX; DWORD dwY; DWORD dwWidth; DWORD dwHeight; D3DVALUE dvClipX; D3DVALUE dvClipY; D3DVALUE dvClipWidth; D3DVALUE dvClipHeight; D3DVALUE dvMinZ; D3DVALUE dvMaxZ; } D3DVIEWPORT2, *LPD3DVIEWPORT2; typedef struct _D3DVIEWPORT7 { DWORD dwX; DWORD dwY; DWORD dwWidth; DWORD dwHeight; D3DVALUE dvMinZ; D3DVALUE dvMaxZ; } D3DVIEWPORT7, *LPD3DVIEWPORT7; #define D3DMAXUSERCLIPPLANES 32 #define D3DCLIPPLANE0 (1 << 0) #define D3DCLIPPLANE1 (1 << 1) #define D3DCLIPPLANE2 (1 << 2) #define D3DCLIPPLANE3 (1 << 3) #define D3DCLIPPLANE4 (1 << 4) #define D3DCLIPPLANE5 (1 << 5) #define D3DCLIP_LEFT 0x00000001 #define D3DCLIP_RIGHT 0x00000002 #define D3DCLIP_TOP 0x00000004 #define D3DCLIP_BOTTOM 0x00000008 #define D3DCLIP_FRONT 0x00000010 #define D3DCLIP_BACK 0x00000020 #define D3DCLIP_GEN0 0x00000040 #define D3DCLIP_GEN1 0x00000080 #define D3DCLIP_GEN2 0x00000100 #define D3DCLIP_GEN3 0x00000200 #define D3DCLIP_GEN4 0x00000400 #define D3DCLIP_GEN5 0x00000800 #define D3DSTATUS_CLIPUNIONLEFT D3DCLIP_LEFT #define D3DSTATUS_CLIPUNIONRIGHT D3DCLIP_RIGHT #define D3DSTATUS_CLIPUNIONTOP D3DCLIP_TOP #define D3DSTATUS_CLIPUNIONBOTTOM D3DCLIP_BOTTOM #define D3DSTATUS_CLIPUNIONFRONT D3DCLIP_FRONT #define D3DSTATUS_CLIPUNIONBACK D3DCLIP_BACK #define D3DSTATUS_CLIPUNIONGEN0 D3DCLIP_GEN0 #define D3DSTATUS_CLIPUNIONGEN1 D3DCLIP_GEN1 #define D3DSTATUS_CLIPUNIONGEN2 D3DCLIP_GEN2 #define D3DSTATUS_CLIPUNIONGEN3 D3DCLIP_GEN3 #define D3DSTATUS_CLIPUNIONGEN4 D3DCLIP_GEN4 #define D3DSTATUS_CLIPUNIONGEN5 D3DCLIP_GEN5 #define D3DSTATUS_CLIPINTERSECTIONLEFT 0x00001000 #define D3DSTATUS_CLIPINTERSECTIONRIGHT 0x00002000 #define D3DSTATUS_CLIPINTERSECTIONTOP 0x00004000 #define D3DSTATUS_CLIPINTERSECTIONBOTTOM 0x00008000 #define D3DSTATUS_CLIPINTERSECTIONFRONT 0x00010000 #define D3DSTATUS_CLIPINTERSECTIONBACK 0x00020000 #define D3DSTATUS_CLIPINTERSECTIONGEN0 0x00040000 #define D3DSTATUS_CLIPINTERSECTIONGEN1 0x00080000 #define D3DSTATUS_CLIPINTERSECTIONGEN2 0x00100000 #define D3DSTATUS_CLIPINTERSECTIONGEN3 0x00200000 #define D3DSTATUS_CLIPINTERSECTIONGEN4 0x00400000 #define D3DSTATUS_CLIPINTERSECTIONGEN5 0x00800000 #define D3DSTATUS_ZNOTVISIBLE 0x01000000 #define D3DSTATUS_CLIPUNIONALL ( \ D3DSTATUS_CLIPUNIONLEFT | \ D3DSTATUS_CLIPUNIONRIGHT | \ D3DSTATUS_CLIPUNIONTOP | \ D3DSTATUS_CLIPUNIONBOTTOM | \ D3DSTATUS_CLIPUNIONFRONT | \ D3DSTATUS_CLIPUNIONBACK | \ D3DSTATUS_CLIPUNIONGEN0 | \ D3DSTATUS_CLIPUNIONGEN1 | \ D3DSTATUS_CLIPUNIONGEN2 | \ D3DSTATUS_CLIPUNIONGEN3 | \ D3DSTATUS_CLIPUNIONGEN4 | \ D3DSTATUS_CLIPUNIONGEN5 \ ) #define D3DSTATUS_CLIPINTERSECTIONALL ( \ D3DSTATUS_CLIPINTERSECTIONLEFT | \ D3DSTATUS_CLIPINTERSECTIONRIGHT | \ D3DSTATUS_CLIPINTERSECTIONTOP | \ D3DSTATUS_CLIPINTERSECTIONBOTTOM | \ D3DSTATUS_CLIPINTERSECTIONFRONT | \ D3DSTATUS_CLIPINTERSECTIONBACK | \ D3DSTATUS_CLIPINTERSECTIONGEN0 | \ D3DSTATUS_CLIPINTERSECTIONGEN1 | \ D3DSTATUS_CLIPINTERSECTIONGEN2 | \ D3DSTATUS_CLIPINTERSECTIONGEN3 | \ D3DSTATUS_CLIPINTERSECTIONGEN4 | \ D3DSTATUS_CLIPINTERSECTIONGEN5 \ ) #define D3DSTATUS_DEFAULT ( \ D3DSTATUS_CLIPINTERSECTIONALL | \ D3DSTATUS_ZNOTVISIBLE) #define D3DTRANSFORM_CLIPPED 0x00000001 #define D3DTRANSFORM_UNCLIPPED 0x00000002 typedef struct _D3DTRANSFORMDATA { DWORD dwSize; void *lpIn; DWORD dwInSize; void *lpOut; DWORD dwOutSize; D3DHVERTEX *lpHOut; DWORD dwClip; DWORD dwClipIntersection; DWORD dwClipUnion; D3DRECT drExtent; } D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA; typedef struct _D3DLIGHTINGELEMENT { D3DVECTOR dvPosition; D3DVECTOR dvNormal; } D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT; typedef struct _D3DMATERIAL { DWORD dwSize; union { D3DCOLORVALUE diffuse; D3DCOLORVALUE dcvDiffuse; } DUMMYUNIONNAME; union { D3DCOLORVALUE ambient; D3DCOLORVALUE dcvAmbient; } DUMMYUNIONNAME1; union { D3DCOLORVALUE specular; D3DCOLORVALUE dcvSpecular; } DUMMYUNIONNAME2; union { D3DCOLORVALUE emissive; D3DCOLORVALUE dcvEmissive; } DUMMYUNIONNAME3; union { D3DVALUE power; D3DVALUE dvPower; } DUMMYUNIONNAME4; D3DTEXTUREHANDLE hTexture; DWORD dwRampSize; } D3DMATERIAL, *LPD3DMATERIAL; typedef struct _D3DMATERIAL7 { union { D3DCOLORVALUE diffuse; D3DCOLORVALUE dcvDiffuse; } DUMMYUNIONNAME; union { D3DCOLORVALUE ambient; D3DCOLORVALUE dcvAmbient; } DUMMYUNIONNAME1; union { D3DCOLORVALUE specular; D3DCOLORVALUE dcvSpecular; } DUMMYUNIONNAME2; union { D3DCOLORVALUE emissive; D3DCOLORVALUE dcvEmissive; } DUMMYUNIONNAME3; union { D3DVALUE power; D3DVALUE dvPower; } DUMMYUNIONNAME4; } D3DMATERIAL7, *LPD3DMATERIAL7; typedef enum { D3DLIGHT_POINT = 1, D3DLIGHT_SPOT = 2, D3DLIGHT_DIRECTIONAL = 3, D3DLIGHT_PARALLELPOINT = 4, D3DLIGHT_GLSPOT = 5, D3DLIGHT_FORCE_DWORD = 0x7fffffff } D3DLIGHTTYPE; typedef struct _D3DLIGHT { DWORD dwSize; D3DLIGHTTYPE dltType; D3DCOLORVALUE dcvColor; D3DVECTOR dvPosition; D3DVECTOR dvDirection; D3DVALUE dvRange; D3DVALUE dvFalloff; D3DVALUE dvAttenuation0; D3DVALUE dvAttenuation1; D3DVALUE dvAttenuation2; D3DVALUE dvTheta; D3DVALUE dvPhi; } D3DLIGHT,*LPD3DLIGHT; typedef struct _D3DLIGHT7 { D3DLIGHTTYPE dltType; D3DCOLORVALUE dcvDiffuse; D3DCOLORVALUE dcvSpecular; D3DCOLORVALUE dcvAmbient; D3DVECTOR dvPosition; D3DVECTOR dvDirection; D3DVALUE dvRange; D3DVALUE dvFalloff; D3DVALUE dvAttenuation0; D3DVALUE dvAttenuation1; D3DVALUE dvAttenuation2; D3DVALUE dvTheta; D3DVALUE dvPhi; } D3DLIGHT7, *LPD3DLIGHT7; #define D3DLIGHT_ACTIVE 0x00000001 #define D3DLIGHT_NO_SPECULAR 0x00000002 #define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR) /* 0x3 */ #define D3DLIGHT_RANGE_MAX ((float)sqrt(FLT_MAX)) typedef struct _D3DLIGHT2 { DWORD dwSize; D3DLIGHTTYPE dltType; D3DCOLORVALUE dcvColor; D3DVECTOR dvPosition; D3DVECTOR dvDirection; D3DVALUE dvRange; D3DVALUE dvFalloff; D3DVALUE dvAttenuation0; D3DVALUE dvAttenuation1; D3DVALUE dvAttenuation2; D3DVALUE dvTheta; D3DVALUE dvPhi; DWORD dwFlags; } D3DLIGHT2, *LPD3DLIGHT2; typedef struct _D3DLIGHTDATA { DWORD dwSize; D3DLIGHTINGELEMENT *lpIn; DWORD dwInSize; D3DTLVERTEX *lpOut; DWORD dwOutSize; } D3DLIGHTDATA, *LPD3DLIGHTDATA; #define D3DCOLOR_MONO 1 #define D3DCOLOR_RGB 2 typedef DWORD D3DCOLORMODEL; #define D3DCLEAR_TARGET 0x00000001 #define D3DCLEAR_ZBUFFER 0x00000002 #define D3DCLEAR_STENCIL 0x00000004 typedef enum _D3DOPCODE { D3DOP_POINT = 1, D3DOP_LINE = 2, D3DOP_TRIANGLE = 3, D3DOP_MATRIXLOAD = 4, D3DOP_MATRIXMULTIPLY = 5, D3DOP_STATETRANSFORM = 6, D3DOP_STATELIGHT = 7, D3DOP_STATERENDER = 8, D3DOP_PROCESSVERTICES = 9, D3DOP_TEXTURELOAD = 10, D3DOP_EXIT = 11, D3DOP_BRANCHFORWARD = 12, D3DOP_SPAN = 13, D3DOP_SETSTATUS = 14, D3DOP_FORCE_DWORD = 0x7fffffff } D3DOPCODE; typedef struct _D3DINSTRUCTION { BYTE bOpcode; BYTE bSize; WORD wCount; } D3DINSTRUCTION, *LPD3DINSTRUCTION; typedef struct _D3DTEXTURELOAD { D3DTEXTUREHANDLE hDestTexture; D3DTEXTUREHANDLE hSrcTexture; } D3DTEXTURELOAD, *LPD3DTEXTURELOAD; typedef struct _D3DPICKRECORD { BYTE bOpcode; BYTE bPad; DWORD dwOffset; D3DVALUE dvZ; } D3DPICKRECORD, *LPD3DPICKRECORD; typedef enum { D3DSHADE_FLAT = 1, D3DSHADE_GOURAUD = 2, D3DSHADE_PHONG = 3, D3DSHADE_FORCE_DWORD = 0x7fffffff } D3DSHADEMODE; typedef enum { D3DFILL_POINT = 1, D3DFILL_WIREFRAME = 2, D3DFILL_SOLID = 3, D3DFILL_FORCE_DWORD = 0x7fffffff } D3DFILLMODE; typedef struct _D3DLINEPATTERN { WORD wRepeatFactor; WORD wLinePattern; } D3DLINEPATTERN; typedef enum { D3DFILTER_NEAREST = 1, D3DFILTER_LINEAR = 2, D3DFILTER_MIPNEAREST = 3, D3DFILTER_MIPLINEAR = 4, D3DFILTER_LINEARMIPNEAREST = 5, D3DFILTER_LINEARMIPLINEAR = 6, D3DFILTER_FORCE_DWORD = 0x7fffffff } D3DTEXTUREFILTER; typedef enum { D3DBLEND_ZERO = 1, D3DBLEND_ONE = 2, D3DBLEND_SRCCOLOR = 3, D3DBLEND_INVSRCCOLOR = 4, D3DBLEND_SRCALPHA = 5, D3DBLEND_INVSRCALPHA = 6, D3DBLEND_DESTALPHA = 7, D3DBLEND_INVDESTALPHA = 8, D3DBLEND_DESTCOLOR = 9, D3DBLEND_INVDESTCOLOR = 10, D3DBLEND_SRCALPHASAT = 11, D3DBLEND_BOTHSRCALPHA = 12, D3DBLEND_BOTHINVSRCALPHA = 13, D3DBLEND_FORCE_DWORD = 0x7fffffff } D3DBLEND; typedef enum { D3DTBLEND_DECAL = 1, D3DTBLEND_MODULATE = 2, D3DTBLEND_DECALALPHA = 3, D3DTBLEND_MODULATEALPHA = 4, D3DTBLEND_DECALMASK = 5, D3DTBLEND_MODULATEMASK = 6, D3DTBLEND_COPY = 7, D3DTBLEND_ADD = 8, D3DTBLEND_FORCE_DWORD = 0x7fffffff } D3DTEXTUREBLEND; typedef enum _D3DTEXTUREADDRESS { D3DTADDRESS_WRAP = 1, D3DTADDRESS_MIRROR = 2, D3DTADDRESS_CLAMP = 3, D3DTADDRESS_BORDER = 4, D3DTADDRESS_FORCE_DWORD = 0x7fffffff } D3DTEXTUREADDRESS; typedef enum { D3DCULL_NONE = 1, D3DCULL_CW = 2, D3DCULL_CCW = 3, D3DCULL_FORCE_DWORD = 0x7fffffff } D3DCULL; typedef enum { D3DCMP_NEVER = 1, D3DCMP_LESS = 2, D3DCMP_EQUAL = 3, D3DCMP_LESSEQUAL = 4, D3DCMP_GREATER = 5, D3DCMP_NOTEQUAL = 6, D3DCMP_GREATEREQUAL = 7, D3DCMP_ALWAYS = 8, D3DCMP_FORCE_DWORD = 0x7fffffff } D3DCMPFUNC; typedef enum _D3DSTENCILOP { D3DSTENCILOP_KEEP = 1, D3DSTENCILOP_ZERO = 2, D3DSTENCILOP_REPLACE = 3, D3DSTENCILOP_INCRSAT = 4, D3DSTENCILOP_DECRSAT = 5, D3DSTENCILOP_INVERT = 6, D3DSTENCILOP_INCR = 7, D3DSTENCILOP_DECR = 8, D3DSTENCILOP_FORCE_DWORD = 0x7fffffff } D3DSTENCILOP; typedef enum _D3DFOGMODE { D3DFOG_NONE = 0, D3DFOG_EXP = 1, D3DFOG_EXP2 = 2, D3DFOG_LINEAR = 3, D3DFOG_FORCE_DWORD = 0x7fffffff } D3DFOGMODE; typedef enum _D3DZBUFFERTYPE { D3DZB_FALSE = 0, D3DZB_TRUE = 1, D3DZB_USEW = 2, D3DZB_FORCE_DWORD = 0x7fffffff } D3DZBUFFERTYPE; typedef enum _D3DANTIALIASMODE { D3DANTIALIAS_NONE = 0, D3DANTIALIAS_SORTDEPENDENT = 1, D3DANTIALIAS_SORTINDEPENDENT = 2, D3DANTIALIAS_FORCE_DWORD = 0x7fffffff } D3DANTIALIASMODE; typedef enum { D3DVT_VERTEX = 1, D3DVT_LVERTEX = 2, D3DVT_TLVERTEX = 3, D3DVT_FORCE_DWORD = 0x7fffffff } D3DVERTEXTYPE; typedef enum { D3DPT_POINTLIST = 1, D3DPT_LINELIST = 2, D3DPT_LINESTRIP = 3, D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff } D3DPRIMITIVETYPE; #define D3DSTATE_OVERRIDE_BIAS 256 #define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS)) typedef enum _D3DTRANSFORMSTATETYPE { D3DTRANSFORMSTATE_WORLD = 1, D3DTRANSFORMSTATE_VIEW = 2, D3DTRANSFORMSTATE_PROJECTION = 3, D3DTRANSFORMSTATE_WORLD1 = 4, D3DTRANSFORMSTATE_WORLD2 = 5, D3DTRANSFORMSTATE_WORLD3 = 6, D3DTRANSFORMSTATE_TEXTURE0 = 16, D3DTRANSFORMSTATE_TEXTURE1 = 17, D3DTRANSFORMSTATE_TEXTURE2 = 18, D3DTRANSFORMSTATE_TEXTURE3 = 19, D3DTRANSFORMSTATE_TEXTURE4 = 20, D3DTRANSFORMSTATE_TEXTURE5 = 21, D3DTRANSFORMSTATE_TEXTURE6 = 22, D3DTRANSFORMSTATE_TEXTURE7 = 23, D3DTRANSFORMSTATE_FORCE_DWORD = 0x7fffffff } D3DTRANSFORMSTATETYPE; typedef enum { D3DLIGHTSTATE_MATERIAL = 1, D3DLIGHTSTATE_AMBIENT = 2, D3DLIGHTSTATE_COLORMODEL = 3, D3DLIGHTSTATE_FOGMODE = 4, D3DLIGHTSTATE_FOGSTART = 5, D3DLIGHTSTATE_FOGEND = 6, D3DLIGHTSTATE_FOGDENSITY = 7, D3DLIGHTSTATE_COLORVERTEX = 8, D3DLIGHTSTATE_FORCE_DWORD = 0x7fffffff } D3DLIGHTSTATETYPE; typedef enum { D3DRENDERSTATE_TEXTUREHANDLE = 1, D3DRENDERSTATE_ANTIALIAS = 2, D3DRENDERSTATE_TEXTUREADDRESS = 3, D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4, D3DRENDERSTATE_WRAPU = 5, /* <= d3d6 */ D3DRENDERSTATE_WRAPV = 6, /* <= d3d6 */ D3DRENDERSTATE_ZENABLE = 7, D3DRENDERSTATE_FILLMODE = 8, D3DRENDERSTATE_SHADEMODE = 9, D3DRENDERSTATE_LINEPATTERN = 10, D3DRENDERSTATE_MONOENABLE = 11, /* <= d3d6 */ D3DRENDERSTATE_ROP2 = 12, /* <= d3d6 */ D3DRENDERSTATE_PLANEMASK = 13, /* <= d3d6 */ D3DRENDERSTATE_ZWRITEENABLE = 14, D3DRENDERSTATE_ALPHATESTENABLE = 15, D3DRENDERSTATE_LASTPIXEL = 16, D3DRENDERSTATE_TEXTUREMAG = 17, D3DRENDERSTATE_TEXTUREMIN = 18, D3DRENDERSTATE_SRCBLEND = 19, D3DRENDERSTATE_DESTBLEND = 20, D3DRENDERSTATE_TEXTUREMAPBLEND = 21, D3DRENDERSTATE_CULLMODE = 22, D3DRENDERSTATE_ZFUNC = 23, D3DRENDERSTATE_ALPHAREF = 24, D3DRENDERSTATE_ALPHAFUNC = 25, D3DRENDERSTATE_DITHERENABLE = 26, D3DRENDERSTATE_ALPHABLENDENABLE = 27, D3DRENDERSTATE_FOGENABLE = 28, D3DRENDERSTATE_SPECULARENABLE = 29, D3DRENDERSTATE_ZVISIBLE = 30, D3DRENDERSTATE_SUBPIXEL = 31, /* <= d3d6 */ D3DRENDERSTATE_SUBPIXELX = 32, /* <= d3d6 */ D3DRENDERSTATE_STIPPLEDALPHA = 33, D3DRENDERSTATE_FOGCOLOR = 34, D3DRENDERSTATE_FOGTABLEMODE = 35, D3DRENDERSTATE_FOGTABLESTART = 36, D3DRENDERSTATE_FOGTABLEEND = 37, D3DRENDERSTATE_FOGTABLEDENSITY = 38, D3DRENDERSTATE_FOGSTART = 36, D3DRENDERSTATE_FOGEND = 37, D3DRENDERSTATE_FOGDENSITY = 38, D3DRENDERSTATE_STIPPLEENABLE = 39, /* <= d3d6 */ /* d3d5 */ D3DRENDERSTATE_EDGEANTIALIAS = 40, D3DRENDERSTATE_COLORKEYENABLE = 41, D3DRENDERSTATE_BORDERCOLOR = 43, D3DRENDERSTATE_TEXTUREADDRESSU = 44, D3DRENDERSTATE_TEXTUREADDRESSV = 45, D3DRENDERSTATE_MIPMAPLODBIAS = 46, /* <= d3d6 */ D3DRENDERSTATE_ZBIAS = 47, D3DRENDERSTATE_RANGEFOGENABLE = 48, D3DRENDERSTATE_ANISOTROPY = 49, /* <= d3d6 */ D3DRENDERSTATE_FLUSHBATCH = 50, /* <= d3d6 */ /* d3d6 */ D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT = 51, /* <= d3d6 */ D3DRENDERSTATE_STENCILENABLE = 52, D3DRENDERSTATE_STENCILFAIL = 53, D3DRENDERSTATE_STENCILZFAIL = 54, D3DRENDERSTATE_STENCILPASS = 55, D3DRENDERSTATE_STENCILFUNC = 56, D3DRENDERSTATE_STENCILREF = 57, D3DRENDERSTATE_STENCILMASK = 58, D3DRENDERSTATE_STENCILWRITEMASK = 59, D3DRENDERSTATE_TEXTUREFACTOR = 60, D3DRENDERSTATE_STIPPLEPATTERN00 = 64, D3DRENDERSTATE_STIPPLEPATTERN01 = 65, D3DRENDERSTATE_STIPPLEPATTERN02 = 66, D3DRENDERSTATE_STIPPLEPATTERN03 = 67, D3DRENDERSTATE_STIPPLEPATTERN04 = 68, D3DRENDERSTATE_STIPPLEPATTERN05 = 69, D3DRENDERSTATE_STIPPLEPATTERN06 = 70, D3DRENDERSTATE_STIPPLEPATTERN07 = 71, D3DRENDERSTATE_STIPPLEPATTERN08 = 72, D3DRENDERSTATE_STIPPLEPATTERN09 = 73, D3DRENDERSTATE_STIPPLEPATTERN10 = 74, D3DRENDERSTATE_STIPPLEPATTERN11 = 75, D3DRENDERSTATE_STIPPLEPATTERN12 = 76, D3DRENDERSTATE_STIPPLEPATTERN13 = 77, D3DRENDERSTATE_STIPPLEPATTERN14 = 78, D3DRENDERSTATE_STIPPLEPATTERN15 = 79, D3DRENDERSTATE_STIPPLEPATTERN16 = 80, D3DRENDERSTATE_STIPPLEPATTERN17 = 81, D3DRENDERSTATE_STIPPLEPATTERN18 = 82, D3DRENDERSTATE_STIPPLEPATTERN19 = 83, D3DRENDERSTATE_STIPPLEPATTERN20 = 84, D3DRENDERSTATE_STIPPLEPATTERN21 = 85, D3DRENDERSTATE_STIPPLEPATTERN22 = 86, D3DRENDERSTATE_STIPPLEPATTERN23 = 87, D3DRENDERSTATE_STIPPLEPATTERN24 = 88, D3DRENDERSTATE_STIPPLEPATTERN25 = 89, D3DRENDERSTATE_STIPPLEPATTERN26 = 90, D3DRENDERSTATE_STIPPLEPATTERN27 = 91, D3DRENDERSTATE_STIPPLEPATTERN28 = 92, D3DRENDERSTATE_STIPPLEPATTERN29 = 93, D3DRENDERSTATE_STIPPLEPATTERN30 = 94, D3DRENDERSTATE_STIPPLEPATTERN31 = 95, D3DRENDERSTATE_WRAP0 = 128, D3DRENDERSTATE_WRAP1 = 129, D3DRENDERSTATE_WRAP2 = 130, D3DRENDERSTATE_WRAP3 = 131, D3DRENDERSTATE_WRAP4 = 132, D3DRENDERSTATE_WRAP5 = 133, D3DRENDERSTATE_WRAP6 = 134, D3DRENDERSTATE_WRAP7 = 135, /* d3d7 */ D3DRENDERSTATE_CLIPPING = 136, D3DRENDERSTATE_LIGHTING = 137, D3DRENDERSTATE_EXTENTS = 138, D3DRENDERSTATE_AMBIENT = 139, D3DRENDERSTATE_FOGVERTEXMODE = 140, D3DRENDERSTATE_COLORVERTEX = 141, D3DRENDERSTATE_LOCALVIEWER = 142, D3DRENDERSTATE_NORMALIZENORMALS = 143, D3DRENDERSTATE_COLORKEYBLENDENABLE = 144, D3DRENDERSTATE_DIFFUSEMATERIALSOURCE = 145, D3DRENDERSTATE_SPECULARMATERIALSOURCE = 146, D3DRENDERSTATE_AMBIENTMATERIALSOURCE = 147, D3DRENDERSTATE_EMISSIVEMATERIALSOURCE = 148, D3DRENDERSTATE_VERTEXBLEND = 151, D3DRENDERSTATE_CLIPPLANEENABLE = 152, D3DRENDERSTATE_FORCE_DWORD = 0x7fffffff /* FIXME: We have some retired values that are being reused for DirectX 7 */ } D3DRENDERSTATETYPE; typedef enum _D3DMATERIALCOLORSOURCE { D3DMCS_MATERIAL = 0, D3DMCS_COLOR1 = 1, D3DMCS_COLOR2 = 2, D3DMCS_FORCE_DWORD = 0x7fffffff } D3DMATERIALCOLORSOURCE; #define D3DRENDERSTATE_BLENDENABLE D3DRENDERSTATE_ALPHABLENDENABLE #define D3DRENDERSTATE_WRAPBIAS __MSABI_LONG(128U) #define D3DWRAP_U __MSABI_LONG(0x00000001) #define D3DWRAP_V __MSABI_LONG(0x00000002) #define D3DWRAPCOORD_0 __MSABI_LONG(0x00000001) #define D3DWRAPCOORD_1 __MSABI_LONG(0x00000002) #define D3DWRAPCOORD_2 __MSABI_LONG(0x00000004) #define D3DWRAPCOORD_3 __MSABI_LONG(0x00000008) #define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y)) typedef struct _D3DSTATE { union { D3DTRANSFORMSTATETYPE dtstTransformStateType; D3DLIGHTSTATETYPE dlstLightStateType; D3DRENDERSTATETYPE drstRenderStateType; } DUMMYUNIONNAME1; union { DWORD dwArg[1]; D3DVALUE dvArg[1]; } DUMMYUNIONNAME2; } D3DSTATE, *LPD3DSTATE; typedef struct _D3DMATRIXLOAD { D3DMATRIXHANDLE hDestMatrix; D3DMATRIXHANDLE hSrcMatrix; } D3DMATRIXLOAD, *LPD3DMATRIXLOAD; typedef struct _D3DMATRIXMULTIPLY { D3DMATRIXHANDLE hDestMatrix; D3DMATRIXHANDLE hSrcMatrix1; D3DMATRIXHANDLE hSrcMatrix2; } D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY; typedef struct _D3DPROCESSVERTICES { DWORD dwFlags; WORD wStart; WORD wDest; DWORD dwCount; DWORD dwReserved; } D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES; #define D3DPROCESSVERTICES_TRANSFORMLIGHT __MSABI_LONG(0x00000000) #define D3DPROCESSVERTICES_TRANSFORM __MSABI_LONG(0x00000001) #define D3DPROCESSVERTICES_COPY __MSABI_LONG(0x00000002) #define D3DPROCESSVERTICES_OPMASK __MSABI_LONG(0x00000007) #define D3DPROCESSVERTICES_UPDATEEXTENTS __MSABI_LONG(0x00000008) #define D3DPROCESSVERTICES_NOCOLOR __MSABI_LONG(0x00000010) typedef enum _D3DTEXTURESTAGESTATETYPE { D3DTSS_COLOROP = 1, D3DTSS_COLORARG1 = 2, D3DTSS_COLORARG2 = 3, D3DTSS_ALPHAOP = 4, D3DTSS_ALPHAARG1 = 5, D3DTSS_ALPHAARG2 = 6, D3DTSS_BUMPENVMAT00 = 7, D3DTSS_BUMPENVMAT01 = 8, D3DTSS_BUMPENVMAT10 = 9, D3DTSS_BUMPENVMAT11 = 10, D3DTSS_TEXCOORDINDEX = 11, D3DTSS_ADDRESS = 12, D3DTSS_ADDRESSU = 13, D3DTSS_ADDRESSV = 14, D3DTSS_BORDERCOLOR = 15, D3DTSS_MAGFILTER = 16, D3DTSS_MINFILTER = 17, D3DTSS_MIPFILTER = 18, D3DTSS_MIPMAPLODBIAS = 19, D3DTSS_MAXMIPLEVEL = 20, D3DTSS_MAXANISOTROPY = 21, D3DTSS_BUMPENVLSCALE = 22, D3DTSS_BUMPENVLOFFSET = 23, D3DTSS_TEXTURETRANSFORMFLAGS = 24, D3DTSS_FORCE_DWORD = 0x7fffffff } D3DTEXTURESTAGESTATETYPE; #define D3DTSS_TCI_PASSTHRU 0x00000000 #define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 typedef enum _D3DTEXTUREOP { D3DTOP_DISABLE = 1, D3DTOP_SELECTARG1 = 2, D3DTOP_SELECTARG2 = 3, D3DTOP_MODULATE = 4, D3DTOP_MODULATE2X = 5, D3DTOP_MODULATE4X = 6, D3DTOP_ADD = 7, D3DTOP_ADDSIGNED = 8, D3DTOP_ADDSIGNED2X = 9, D3DTOP_SUBTRACT = 10, D3DTOP_ADDSMOOTH = 11, D3DTOP_BLENDDIFFUSEALPHA = 12, D3DTOP_BLENDTEXTUREALPHA = 13, D3DTOP_BLENDFACTORALPHA = 14, D3DTOP_BLENDTEXTUREALPHAPM = 15, D3DTOP_BLENDCURRENTALPHA = 16, D3DTOP_PREMODULATE = 17, D3DTOP_MODULATEALPHA_ADDCOLOR = 18, D3DTOP_MODULATECOLOR_ADDALPHA = 19, D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, D3DTOP_BUMPENVMAP = 22, D3DTOP_BUMPENVMAPLUMINANCE = 23, D3DTOP_DOTPRODUCT3 = 24, D3DTOP_FORCE_DWORD = 0x7fffffff } D3DTEXTUREOP; #define D3DTA_SELECTMASK 0x0000000f #define D3DTA_DIFFUSE 0x00000000 #define D3DTA_CURRENT 0x00000001 #define D3DTA_TEXTURE 0x00000002 #define D3DTA_TFACTOR 0x00000003 #define D3DTA_SPECULAR 0x00000004 #define D3DTA_COMPLEMENT 0x00000010 #define D3DTA_ALPHAREPLICATE 0x00000020 typedef enum _D3DTEXTUREMAGFILTER { D3DTFG_POINT = 1, D3DTFG_LINEAR = 2, D3DTFG_FLATCUBIC = 3, D3DTFG_GAUSSIANCUBIC = 4, D3DTFG_ANISOTROPIC = 5, D3DTFG_FORCE_DWORD = 0x7fffffff } D3DTEXTUREMAGFILTER; typedef enum _D3DTEXTUREMINFILTER { D3DTFN_POINT = 1, D3DTFN_LINEAR = 2, D3DTFN_ANISOTROPIC = 3, D3DTFN_FORCE_DWORD = 0x7fffffff } D3DTEXTUREMINFILTER; typedef enum _D3DTEXTUREMIPFILTER { D3DTFP_NONE = 1, D3DTFP_POINT = 2, D3DTFP_LINEAR = 3, D3DTFP_FORCE_DWORD = 0x7fffffff } D3DTEXTUREMIPFILTER; #define D3DTRIFLAG_START __MSABI_LONG(0x00000000) #define D3DTRIFLAG_STARTFLAT(len) (len) #define D3DTRIFLAG_ODD __MSABI_LONG(0x0000001e) #define D3DTRIFLAG_EVEN __MSABI_LONG(0x0000001f) #define D3DTRIFLAG_EDGEENABLE1 __MSABI_LONG(0x00000100) #define D3DTRIFLAG_EDGEENABLE2 __MSABI_LONG(0x00000200) #define D3DTRIFLAG_EDGEENABLE3 __MSABI_LONG(0x00000400) #define D3DTRIFLAG_EDGEENABLETRIANGLE \ (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3) typedef struct _D3DTRIANGLE { union { WORD v1; WORD wV1; } DUMMYUNIONNAME1; union { WORD v2; WORD wV2; } DUMMYUNIONNAME2; union { WORD v3; WORD wV3; } DUMMYUNIONNAME3; WORD wFlags; } D3DTRIANGLE, *LPD3DTRIANGLE; typedef struct _D3DLINE { union { WORD v1; WORD wV1; } DUMMYUNIONNAME1; union { WORD v2; WORD wV2; } DUMMYUNIONNAME2; } D3DLINE, *LPD3DLINE; typedef struct _D3DSPAN { WORD wCount; WORD wFirst; } D3DSPAN, *LPD3DSPAN; typedef struct _D3DPOINT { WORD wCount; WORD wFirst; } D3DPOINT, *LPD3DPOINT; typedef struct _D3DBRANCH { DWORD dwMask; DWORD dwValue; BOOL bNegate; DWORD dwOffset; } D3DBRANCH, *LPD3DBRANCH; typedef struct _D3DSTATUS { DWORD dwFlags; DWORD dwStatus; D3DRECT drExtent; } D3DSTATUS, *LPD3DSTATUS; #define D3DSETSTATUS_STATUS __MSABI_LONG(0x00000001) #define D3DSETSTATUS_EXTENTS __MSABI_LONG(0x00000002) #define D3DSETSTATUS_ALL (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS) typedef struct _D3DCLIPSTATUS { DWORD dwFlags; DWORD dwStatus; float minx, maxx; float miny, maxy; float minz, maxz; } D3DCLIPSTATUS, *LPD3DCLIPSTATUS; #define D3DCLIPSTATUS_STATUS __MSABI_LONG(0x00000001) #define D3DCLIPSTATUS_EXTENTS2 __MSABI_LONG(0x00000002) #define D3DCLIPSTATUS_EXTENTS3 __MSABI_LONG(0x00000004) typedef struct { DWORD dwSize; DWORD dwTrianglesDrawn; DWORD dwLinesDrawn; DWORD dwPointsDrawn; DWORD dwSpansDrawn; DWORD dwVerticesProcessed; } D3DSTATS, *LPD3DSTATS; #define D3DEXECUTE_CLIPPED __MSABI_LONG(0x00000001) #define D3DEXECUTE_UNCLIPPED __MSABI_LONG(0x00000002) typedef struct _D3DEXECUTEDATA { DWORD dwSize; DWORD dwVertexOffset; DWORD dwVertexCount; DWORD dwInstructionOffset; DWORD dwInstructionLength; DWORD dwHVertexOffset; D3DSTATUS dsStatus; } D3DEXECUTEDATA, *LPD3DEXECUTEDATA; #define D3DPAL_FREE 0x00 #define D3DPAL_READONLY 0x40 #define D3DPAL_RESERVED 0x80 typedef struct _D3DVERTEXBUFFERDESC { DWORD dwSize; DWORD dwCaps; DWORD dwFVF; DWORD dwNumVertices; } D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC; #define D3DVBCAPS_SYSTEMMEMORY __MSABI_LONG(0x00000800) #define D3DVBCAPS_WRITEONLY __MSABI_LONG(0x00010000) #define D3DVBCAPS_OPTIMIZED __MSABI_LONG(0x80000000) #define D3DVBCAPS_DONOTCLIP __MSABI_LONG(0x00000001) #define D3DVOP_LIGHT (1 << 10) #define D3DVOP_TRANSFORM (1 << 0) #define D3DVOP_CLIP (1 << 2) #define D3DVOP_EXTENTS (1 << 3) #define D3DMAXNUMVERTICES ((1<<16) - 1) #define D3DMAXNUMPRIMITIVES ((1<<16) - 1) #define D3DPV_DONOTCOPYDATA (1 << 0) #define D3DFVF_RESERVED0 0x001 #define D3DFVF_POSITION_MASK 0x00E #define D3DFVF_XYZ 0x002 #define D3DFVF_XYZRHW 0x004 #define D3DFVF_XYZB1 0x006 #define D3DFVF_XYZB2 0x008 #define D3DFVF_XYZB3 0x00a #define D3DFVF_XYZB4 0x00c #define D3DFVF_XYZB5 0x00e #define D3DFVF_NORMAL 0x010 #define D3DFVF_RESERVED1 0x020 #define D3DFVF_DIFFUSE 0x040 #define D3DFVF_SPECULAR 0x080 #define D3DFVF_TEXCOUNT_MASK 0xf00 #define D3DFVF_TEXCOUNT_SHIFT 8 #define D3DFVF_TEX0 0x000 #define D3DFVF_TEX1 0x100 #define D3DFVF_TEX2 0x200 #define D3DFVF_TEX3 0x300 #define D3DFVF_TEX4 0x400 #define D3DFVF_TEX5 0x500 #define D3DFVF_TEX6 0x600 #define D3DFVF_TEX7 0x700 #define D3DFVF_TEX8 0x800 #define D3DFVF_RESERVED2 0xf000 #define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 ) #define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \ D3DFVF_SPECULAR | D3DFVF_TEX1 ) #define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \ D3DFVF_TEX1 ) typedef struct _D3DDP_PTRSTRIDE { void *lpvData; DWORD dwStride; } D3DDP_PTRSTRIDE; #define D3DDP_MAXTEXCOORD 8 typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA { D3DDP_PTRSTRIDE position; D3DDP_PTRSTRIDE normal; D3DDP_PTRSTRIDE diffuse; D3DDP_PTRSTRIDE specular; D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD]; } D3DDRAWPRIMITIVESTRIDEDDATA ,*LPD3DDRAWPRIMITIVESTRIDEDDATA; #define D3DVIS_INSIDE_FRUSTUM 0 #define D3DVIS_INTERSECT_FRUSTUM 1 #define D3DVIS_OUTSIDE_FRUSTUM 2 #define D3DVIS_INSIDE_LEFT 0 #define D3DVIS_INTERSECT_LEFT (1 << 2) #define D3DVIS_OUTSIDE_LEFT (2 << 2) #define D3DVIS_INSIDE_RIGHT 0 #define D3DVIS_INTERSECT_RIGHT (1 << 4) #define D3DVIS_OUTSIDE_RIGHT (2 << 4) #define D3DVIS_INSIDE_TOP 0 #define D3DVIS_INTERSECT_TOP (1 << 6) #define D3DVIS_OUTSIDE_TOP (2 << 6) #define D3DVIS_INSIDE_BOTTOM 0 #define D3DVIS_INTERSECT_BOTTOM (1 << 8) #define D3DVIS_OUTSIDE_BOTTOM (2 << 8) #define D3DVIS_INSIDE_NEAR 0 #define D3DVIS_INTERSECT_NEAR (1 << 10) #define D3DVIS_OUTSIDE_NEAR (2 << 10) #define D3DVIS_INSIDE_FAR 0 #define D3DVIS_INTERSECT_FAR (1 << 12) #define D3DVIS_OUTSIDE_FAR (2 << 12) #define D3DVIS_MASK_FRUSTUM (3 << 0) #define D3DVIS_MASK_LEFT (3 << 2) #define D3DVIS_MASK_RIGHT (3 << 4) #define D3DVIS_MASK_TOP (3 << 6) #define D3DVIS_MASK_BOTTOM (3 << 8) #define D3DVIS_MASK_NEAR (3 << 10) #define D3DVIS_MASK_FAR (3 << 12) #define D3DDEVINFOID_TEXTUREMANAGER 1 #define D3DDEVINFOID_D3DTEXTUREMANAGER 2 #define D3DDEVINFOID_TEXTURING 3 typedef enum _D3DSTATEBLOCKTYPE { D3DSBT_ALL = 1, D3DSBT_PIXELSTATE = 2, D3DSBT_VERTEXSTATE = 3, D3DSBT_FORCE_DWORD = 0xffffffff } D3DSTATEBLOCKTYPE; typedef enum _D3DVERTEXBLENDFLAGS { D3DVBLEND_DISABLE = 0, D3DVBLEND_1WEIGHT = 1, D3DVBLEND_2WEIGHTS = 2, D3DVBLEND_3WEIGHTS = 3, } D3DVERTEXBLENDFLAGS; typedef enum _D3DTEXTURETRANSFORMFLAGS { D3DTTFF_DISABLE = 0, D3DTTFF_COUNT1 = 1, D3DTTFF_COUNT2 = 2, D3DTTFF_COUNT3 = 3, D3DTTFF_COUNT4 = 4, D3DTTFF_PROJECTED = 256, D3DTTFF_FORCE_DWORD = 0x7fffffff } D3DTEXTURETRANSFORMFLAGS; #define D3DFVF_TEXTUREFORMAT2 0 #define D3DFVF_TEXTUREFORMAT1 3 #define D3DFVF_TEXTUREFORMAT3 1 #define D3DFVF_TEXTUREFORMAT4 2 #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16)) #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2) #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16)) #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16)) #ifdef __i386__ #include #endif #endif ================================================ FILE: wine/windows/d3dukmdt.h ================================================ /* * Copyright 2016 Henri Verbeet for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3DUKMDT_H #define __WINE_D3DUKMDT_H #ifndef MAKEFOURCC #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24)) #endif /* MAKEFOURCC */ typedef enum _D3DDDIFORMAT { D3DDDIFMT_UNKNOWN = 0, D3DDDIFMT_R8G8B8 = 0x14, D3DDDIFMT_A8R8G8B8 = 0x15, D3DDDIFMT_X8R8G8B8 = 0x16, D3DDDIFMT_R5G6B5 = 0x17, D3DDDIFMT_X1R5G5B5 = 0x18, D3DDDIFMT_A1R5G5B5 = 0x19, D3DDDIFMT_A4R4G4B4 = 0x1a, D3DDDIFMT_R3G3B2 = 0x1b, D3DDDIFMT_A8 = 0x1c, D3DDDIFMT_A8R3G3B2 = 0x1d, D3DDDIFMT_X4R4G4B4 = 0x1e, D3DDDIFMT_A2B10G10R10 = 0x1f, D3DDDIFMT_A8B8G8R8 = 0x20, D3DDDIFMT_X8B8G8R8 = 0x21, D3DDDIFMT_G16R16 = 0x22, D3DDDIFMT_A2R10G10B10 = 0x23, D3DDDIFMT_A16B16G16R16 = 0x24, D3DDDIFMT_A8P8 = 0x28, D3DDDIFMT_P8 = 0x29, D3DDDIFMT_L8 = 0x32, D3DDDIFMT_A8L8 = 0x33, D3DDDIFMT_A4L4 = 0x34, D3DDDIFMT_V8U8 = 0x3c, D3DDDIFMT_L6V5U5 = 0x3d, D3DDDIFMT_X8L8V8U8 = 0x3e, D3DDDIFMT_Q8W8V8U8 = 0x3f, D3DDDIFMT_V16U16 = 0x40, D3DDDIFMT_W11V11U10 = 0x41, D3DDDIFMT_A2W10V10U10 = 0x43, D3DDDIFMT_D16_LOCKABLE = 0x46, D3DDDIFMT_D32 = 0x47, D3DDDIFMT_S1D15 = 0x48, D3DDDIFMT_D15S1 = 0x49, D3DDDIFMT_S8D24 = 0x4a, D3DDDIFMT_D24S8 = 0x4b, D3DDDIFMT_X8D24 = 0x4c, D3DDDIFMT_D24X8 = 0x4d, D3DDDIFMT_X4S4D24 = 0x4e, D3DDDIFMT_D24X4S4 = 0x4f, D3DDDIFMT_D16 = 0x50, D3DDDIFMT_L16 = 0x51, D3DDDIFMT_D32F_LOCKABLE = 0x52, D3DDDIFMT_D24FS8 = 0x53, D3DDDIFMT_D32_LOCKABLE = 0x54, D3DDDIFMT_S8_LOCKABLE = 0x55, D3DDDIFMT_G8R8 = 0x5b, D3DDDIFMT_R8 = 0x5c, D3DDDIFMT_VERTEXDATA = 0x64, D3DDDIFMT_INDEX16 = 0x65, D3DDDIFMT_INDEX32 = 0x66, D3DDDIFMT_Q16W16V16U16 = 0x6e, D3DDDIFMT_R16F = 0x6f, D3DDDIFMT_G16R16F = 0x70, D3DDDIFMT_A16B16G16R16F = 0x71, D3DDDIFMT_R32F = 0x72, D3DDDIFMT_G32R32F = 0x73, D3DDDIFMT_A32B32G32R32F = 0x74, D3DDDIFMT_CxV8U8 = 0x75, D3DDDIFMT_A1 = 0x76, D3DDDIFMT_A2B10G10R10_XR_BIAS = 0x77, D3DDDIFMT_DXVACOMPBUFFER_BASE = 0x96, D3DDDIFMT_PICTUREPARAMSDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0, D3DDDIFMT_MACROBLOCKDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x01, D3DDDIFMT_RESIDUALDIFFERENCEDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x02, D3DDDIFMT_DEBLOCKINGDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x03, D3DDDIFMT_INVERSEQUANTIZATIONDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x04, D3DDDIFMT_SLICECONTROLDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x05, D3DDDIFMT_BITSTREAMDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x06, D3DDDIFMT_MOTIONVECTORBUFFER = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x07, D3DDDIFMT_FILMGRAINBUFFER = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x08, D3DDDIFMT_DXVA_RESERVED9 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x09, D3DDDIFMT_DXVA_RESERVED10 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0a, D3DDDIFMT_DXVA_RESERVED11 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0b, D3DDDIFMT_DXVA_RESERVED12 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0c, D3DDDIFMT_DXVA_RESERVED13 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0d, D3DDDIFMT_DXVA_RESERVED14 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0e, D3DDDIFMT_DXVA_RESERVED15 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0f, D3DDDIFMT_DXVA_RESERVED16 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x10, D3DDDIFMT_DXVA_RESERVED17 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x11, D3DDDIFMT_DXVA_RESERVED18 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x12, D3DDDIFMT_DXVA_RESERVED19 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x13, D3DDDIFMT_DXVA_RESERVED20 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x14, D3DDDIFMT_DXVA_RESERVED21 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x15, D3DDDIFMT_DXVA_RESERVED22 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x16, D3DDDIFMT_DXVA_RESERVED23 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x17, D3DDDIFMT_DXVA_RESERVED24 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x18, D3DDDIFMT_DXVA_RESERVED25 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x19, D3DDDIFMT_DXVA_RESERVED26 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1a, D3DDDIFMT_DXVA_RESERVED27 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1b, D3DDDIFMT_DXVA_RESERVED28 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1c, D3DDDIFMT_DXVA_RESERVED29 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1d, D3DDDIFMT_DXVA_RESERVED30 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1e, D3DDDIFMT_DXVA_RESERVED31 = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1f, D3DDDIFMT_DXVACOMPBUFFER_MAX = D3DDDIFMT_DXVA_RESERVED31, D3DDDIFMT_BINARYBUFFER = 0xc7, D3DDDIFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'), D3DDDIFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'), D3DDDIFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'), D3DDDIFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'), D3DDDIFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'), D3DDDIFMT_G8R8_G8B8 = MAKEFOURCC('G', 'R', 'G', 'B'), D3DDDIFMT_MULTI2_ARGB8 = MAKEFOURCC('M', 'E', 'T', '1'), D3DDDIFMT_R8G8_B8G8 = MAKEFOURCC('R', 'G', 'B', 'G'), D3DDDIFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'), D3DDDIFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'), D3DDDIFMT_FORCE_UINT = 0x7fffffff, } D3DDDIFORMAT; #endif /* __WINE_D3DUKMDT_H */ ================================================ FILE: wine/windows/d3dvec.inl ================================================ /* * Copyright (C) 2000 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3DVEC_INL #define __WINE_D3DVEC_INL #include /*** constructors ***/ inline _D3DVECTOR::_D3DVECTOR(D3DVALUE f) { x = y = z = f; } inline _D3DVECTOR::_D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z) { x = _x; y = _y; z = _z; } /*** assignment operators ***/ inline _D3DVECTOR& _D3DVECTOR::operator += (const _D3DVECTOR& v) { x += v.x; y += v.y; z += v.z; return *this; } inline _D3DVECTOR& _D3DVECTOR::operator -= (const _D3DVECTOR& v) { x -= v.x; y -= v.y; z -= v.z; return *this; } inline _D3DVECTOR& _D3DVECTOR::operator *= (const _D3DVECTOR& v) { x *= v.x; y *= v.y; z *= v.z; return *this; } inline _D3DVECTOR& _D3DVECTOR::operator /= (const _D3DVECTOR& v) { x /= v.x; y /= v.y; z /= v.z; return *this; } inline _D3DVECTOR& _D3DVECTOR::operator *= (D3DVALUE s) { x *= s; y *= s; z *= s; return *this; } inline _D3DVECTOR& _D3DVECTOR::operator /= (D3DVALUE s) { x /= s; y /= s; z /= s; return *this; } /*** unary operators ***/ inline _D3DVECTOR operator + (const _D3DVECTOR& v) { return v; } inline _D3DVECTOR operator - (const _D3DVECTOR& v) { return _D3DVECTOR(-v.x, -v.y, -v.z); } /*** binary operators ***/ inline _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2) { return _D3DVECTOR(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z); } inline _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2) { return _D3DVECTOR(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z); } inline _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s) { return _D3DVECTOR(v.x*s, v.y*s, v.z*s); } inline _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v) { return _D3DVECTOR(v.x*s, v.y*s, v.z*s); } inline _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s) { return _D3DVECTOR(v.x/s, v.y/s, v.z/s); } inline D3DVALUE SquareMagnitude(const _D3DVECTOR& v) { return v.x*v.x + v.y*v.y + v.z*v.z; /* DotProduct(v, v) */ } inline D3DVALUE Magnitude(const _D3DVECTOR& v) { return sqrt(SquareMagnitude(v)); } inline _D3DVECTOR Normalize(const _D3DVECTOR& v) { return v / Magnitude(v); } inline D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2) { return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z; } inline _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2) { _D3DVECTOR res; /* this is a left-handed cross product, right? */ res.x = v1.y * v2.z - v1.z * v2.y; res.y = v1.z * v2.x - v1.x * v2.z; res.z = v1.x * v2.y - v1.y * v2.x; return res; } #endif ================================================ FILE: wine/windows/d3dx10.h ================================================ /* * Copyright 2015 Andrey Gusev * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DX10_H__ #define __D3DX10_H__ #include #include #define D3DX10_DEFAULT (0xffffffffu) #define D3DX10_FROM_FILE (0xfffffffdu) #define DXGI_FORMAT_FROM_FILE ((DXGI_FORMAT)0xfffffffdu) #include "d3d10.h" #include "d3dx10math.h" #include "d3dx10core.h" #include "d3dx10async.h" #include "d3dx10tex.h" #define _FACDD 0x876 #define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code) enum _D3DX10_ERR { D3DX10_ERR_CANNOT_MODIFY_INDEX_BUFFER = MAKE_DDHRESULT(2900), D3DX10_ERR_INVALID_MESH = MAKE_DDHRESULT(2901), D3DX10_ERR_CANNOT_ATTR_SORT = MAKE_DDHRESULT(2902), D3DX10_ERR_SKINNING_NOT_SUPPORTED = MAKE_DDHRESULT(2903), D3DX10_ERR_TOO_MANY_INFLUENCES = MAKE_DDHRESULT(2904), D3DX10_ERR_INVALID_DATA = MAKE_DDHRESULT(2905), D3DX10_ERR_LOADED_MESH_HAS_NO_DATA = MAKE_DDHRESULT(2906), D3DX10_ERR_DUPLICATE_NAMED_FRAGMENT = MAKE_DDHRESULT(2907), D3DX10_ERR_CANNOT_REMOVE_LAST_ITEM = MAKE_DDHRESULT(2908) }; #endif ================================================ FILE: wine/windows/d3dx10async.h ================================================ /* * Copyright 2015 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DX10ASYNC_H__ #define __D3DX10ASYNC_H__ #include "d3dx10.h" HRESULT WINAPI D3DX10CompileFromMemory(const char *data, SIZE_T data_size, const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entry_point, const char *target, UINT sflags, UINT eflags, ID3DX10ThreadPump *pump, ID3D10Blob **shader, ID3D10Blob **error_messages, HRESULT *hresult); HRESULT WINAPI D3DX10CreateEffectFromFileA(const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device, ID3D10EffectPool *effectpool, ID3DX10ThreadPump *pump, ID3D10Effect **effect, ID3D10Blob **errors, HRESULT *hresult); HRESULT WINAPI D3DX10CreateEffectFromFileW(const WCHAR *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device, ID3D10EffectPool *effectpool, ID3DX10ThreadPump *pump, ID3D10Effect **effect, ID3D10Blob **errors, HRESULT *hresult); HRESULT WINAPI D3DX10CreateEffectFromMemory(const void *data, SIZE_T datasize, const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device, ID3D10EffectPool *effectpool, ID3DX10ThreadPump *pump, ID3D10Effect **effect, ID3D10Blob **errors, HRESULT *hresult); HRESULT WINAPI D3DX10CreateEffectPoolFromFileA(const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device, ID3DX10ThreadPump *pump, ID3D10EffectPool **effectpool, ID3D10Blob **errors, HRESULT *hresult); HRESULT WINAPI D3DX10CreateEffectPoolFromFileW(const WCHAR *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device, ID3DX10ThreadPump *pump, ID3D10EffectPool **effectpool, ID3D10Blob **errors, HRESULT *hresult); HRESULT WINAPI D3DX10CreateEffectPoolFromMemory(const void *data, SIZE_T datasize, const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device, ID3DX10ThreadPump *pump, ID3D10EffectPool **effectpool, ID3D10Blob **errors, HRESULT *hresult); HRESULT WINAPI D3DX10PreprocessShaderFromMemory(const char *data, SIZE_T data_size, const char *filename, const D3D10_SHADER_MACRO *defines, ID3DInclude *include, ID3DX10ThreadPump *pump, ID3D10Blob **shader_text, ID3D10Blob **errors, HRESULT *hresult); HRESULT WINAPI D3DX10CreateAsyncFileLoaderW(const WCHAR *filename, ID3DX10DataLoader **loader); HRESULT WINAPI D3DX10CreateAsyncFileLoaderA(const char *filename, ID3DX10DataLoader **loader); HRESULT WINAPI D3DX10CreateAsyncMemoryLoader(const void *data, SIZE_T datasize, ID3DX10DataLoader **loader); HRESULT WINAPI D3DX10CreateAsyncResourceLoaderA(HMODULE module, const char *resource, ID3DX10DataLoader **loader); HRESULT WINAPI D3DX10CreateAsyncResourceLoaderW(HMODULE module, const WCHAR *resource, ID3DX10DataLoader **loader); #endif ================================================ FILE: wine/windows/d3dx10core.idl ================================================ /* * Copyright 2015 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi.idl"; import "d3dcommon.idl"; [ object, local, pointer_default(unique) ] interface ID3DX10DataLoader { HRESULT Load(); HRESULT Decompress([out] void **data, [in] SIZE_T *bytes); HRESULT Destroy(); } [ object, local, pointer_default(unique) ] interface ID3DX10DataProcessor { HRESULT Process([in] void *data, [in] SIZE_T bytes); HRESULT CreateDeviceObject([out] void **dataobject); HRESULT Destroy(); } [ object, local, pointer_default(unique), uuid(c93fecfa-6967-478a-abbc-402d90621fcb) ] interface ID3DX10ThreadPump : IUnknown { HRESULT AddWorkItem([in] ID3DX10DataLoader *loader, [in] ID3DX10DataProcessor *processor, [in] HRESULT *result, [out] void **object); UINT GetWorkItemCount(); HRESULT WaitForAllItems(); HRESULT ProcessDeviceWorkItems([in] UINT count); HRESULT PurgeAllItems(); HRESULT GetQueueStatus([in] UINT *queue, [in] UINT *processqueue, [in] UINT *devicequeue); } cpp_quote("HRESULT WINAPI D3DX10UnsetAllDeviceObjects(ID3D10Device *device);") cpp_quote("HRESULT WINAPI D3DX10CreateDevice(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,") cpp_quote(" HMODULE swrast, unsigned int flags, ID3D10Device **device);") cpp_quote("HRESULT WINAPI D3DX10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,") cpp_quote(" HMODULE swrast, unsigned int flags, DXGI_SWAP_CHAIN_DESC *desc, IDXGISwapChain **swapchain,") cpp_quote(" ID3D10Device **device);") cpp_quote("HRESULT WINAPI D3DX10GetFeatureLevel1(ID3D10Device *device, ID3D10Device1 **device1);") ================================================ FILE: wine/windows/d3dx10math.h ================================================ /* * Copyright (C) 2016 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx10.h" /* This guard is the same as D3DX9 to prevent double-inclusion */ #ifndef __D3DX9MATH_H__ #define __D3DX9MATH_H__ #include typedef enum _D3DX_CPU_OPTIMIZATION { D3DX_NOT_OPTIMIZED, D3DX_3DNOW_OPTIMIZED, D3DX_SSE2_OPTIMIZED, D3DX_SSE_OPTIMIZED } D3DX_CPU_OPTIMIZATION; #ifdef __cplusplus extern "C" { #endif D3DX_CPU_OPTIMIZATION WINAPI D3DXCpuOptimizations(BOOL enable); #ifdef __cplusplus } #endif #endif /* __D3DX9MATH_H__ */ ================================================ FILE: wine/windows/d3dx10tex.h ================================================ /* * Copyright 2016 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx10.h" #ifndef __D3DX10TEX_H__ #define __D3DX10TEX_H__ typedef enum D3DX10_FILTER_FLAG { D3DX10_FILTER_NONE = 0x00000001, D3DX10_FILTER_POINT = 0x00000002, D3DX10_FILTER_LINEAR = 0x00000003, D3DX10_FILTER_TRIANGLE = 0x00000004, D3DX10_FILTER_BOX = 0x00000005, D3DX10_FILTER_MIRROR_U = 0x00010000, D3DX10_FILTER_MIRROR_V = 0x00020000, D3DX10_FILTER_MIRROR_W = 0x00040000, D3DX10_FILTER_MIRROR = 0x00070000, D3DX10_FILTER_DITHER = 0x00080000, D3DX10_FILTER_DITHER_DIFFUSION = 0x00100000, D3DX10_FILTER_SRGB_IN = 0x00200000, D3DX10_FILTER_SRGB_OUT = 0x00400000, D3DX10_FILTER_SRGB = 0x00600000, } D3DX10_FILTER_FLAG; typedef enum D3DX10_IMAGE_FILE_FORMAT { D3DX10_IFF_BMP = 0, D3DX10_IFF_JPG = 1, D3DX10_IFF_PNG = 3, D3DX10_IFF_DDS = 4, D3DX10_IFF_TIFF = 10, D3DX10_IFF_GIF = 11, D3DX10_IFF_WMP = 12, D3DX10_IFF_FORCE_DWORD = 0x7fffffff } D3DX10_IMAGE_FILE_FORMAT; typedef struct D3DX10_IMAGE_INFO { UINT Width; UINT Height; UINT Depth; UINT ArraySize; UINT MipLevels; UINT MiscFlags; DXGI_FORMAT Format; D3D10_RESOURCE_DIMENSION ResourceDimension; D3DX10_IMAGE_FILE_FORMAT ImageFileFormat; } D3DX10_IMAGE_INFO; typedef struct D3DX10_IMAGE_LOAD_INFO { UINT Width; UINT Height; UINT Depth; UINT FirstMipLevel; UINT MipLevels; D3D10_USAGE Usage; UINT BindFlags; UINT CpuAccessFlags; UINT MiscFlags; DXGI_FORMAT Format; UINT Filter; UINT MipFilter; D3DX10_IMAGE_INFO *pSrcInfo; #ifdef __cplusplus D3DX10_IMAGE_LOAD_INFO() { Width = D3DX10_DEFAULT; Height = D3DX10_DEFAULT; Depth = D3DX10_DEFAULT; FirstMipLevel = D3DX10_DEFAULT; MipLevels = D3DX10_DEFAULT; Usage = (D3D10_USAGE)D3DX10_DEFAULT; BindFlags = D3DX10_DEFAULT; CpuAccessFlags = D3DX10_DEFAULT; MiscFlags = D3DX10_DEFAULT; Format = DXGI_FORMAT_FROM_FILE; Filter = D3DX10_DEFAULT; MipFilter = D3DX10_DEFAULT; pSrcInfo = NULL; } #endif } D3DX10_IMAGE_LOAD_INFO; #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3DX10CreateTextureFromMemory(ID3D10Device *device, const void *src_data, SIZE_T src_data_size, D3DX10_IMAGE_LOAD_INFO *loadinfo, ID3DX10ThreadPump *pump, ID3D10Resource **texture, HRESULT *hresult); HRESULT WINAPI D3DX10FilterTexture(ID3D10Resource *texture, UINT src_level, UINT filter); HRESULT WINAPI D3DX10GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX10ThreadPump *pump, D3DX10_IMAGE_INFO *img_info, HRESULT *hresult); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/d3dx11.h ================================================ /* * Copyright 2016 Andrey Gusev * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DX11_H__ #define __D3DX11_H__ #include #include #define D3DX11_DEFAULT (0xffffffffu) #define D3DX11_FROM_FILE (0xfffffffdu) #define DXGI_FORMAT_FROM_FILE ((DXGI_FORMAT)0xfffffffdu) #include "d3d11.h" #include "d3dx11core.h" #include "d3dx11async.h" #include "d3dx11tex.h" #define _FACDD 0x876 #define MAKE_DDHRESULT(code) MAKE_HRESULT(SEVERITY_ERROR, _FACDD, code) enum _D3DX11_ERR { D3DX11_ERR_CANNOT_MODIFY_INDEX_BUFFER = MAKE_DDHRESULT(2900), D3DX11_ERR_INVALID_MESH = MAKE_DDHRESULT(2901), D3DX11_ERR_CANNOT_ATTR_SORT = MAKE_DDHRESULT(2902), D3DX11_ERR_SKINNING_NOT_SUPPORTED = MAKE_DDHRESULT(2903), D3DX11_ERR_TOO_MANY_INFLUENCES = MAKE_DDHRESULT(2904), D3DX11_ERR_INVALID_DATA = MAKE_DDHRESULT(2905), D3DX11_ERR_LOADED_MESH_HAS_NO_DATA = MAKE_DDHRESULT(2906), D3DX11_ERR_DUPLICATE_NAMED_FRAGMENT = MAKE_DDHRESULT(2907), D3DX11_ERR_CANNOT_REMOVE_LAST_ITEM = MAKE_DDHRESULT(2908) }; #endif ================================================ FILE: wine/windows/d3dx11async.h ================================================ /* * Copyright 2016 Matteo Bruni for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DX11ASYNC_H__ #define __D3DX11ASYNC_H__ #include "d3dx11.h" #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3DX11CreateAsyncFileLoaderA(const char *file_name, ID3DX11DataLoader **loader); HRESULT WINAPI D3DX11CreateAsyncFileLoaderW(const WCHAR *file_name, ID3DX11DataLoader **loader); HRESULT WINAPI D3DX11CreateAsyncResourceLoaderA(HMODULE module, const char *resource, ID3DX11DataLoader **loader); HRESULT WINAPI D3DX11CreateAsyncResourceLoaderW(HMODULE module, const WCHAR *resource, ID3DX11DataLoader **loader); HRESULT WINAPI D3DX11CreateAsyncMemoryLoader(const void *data, SIZE_T data_size, ID3DX11DataLoader **loader); HRESULT WINAPI D3DX11CompileFromMemory(const char *data, SIZE_T data_size, const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entry_point, const char *target, UINT sflags, UINT eflags, ID3DX11ThreadPump *pump, ID3D10Blob **shader, ID3D10Blob **error_messages, HRESULT *hresult); HRESULT WINAPI D3DX11CompileFromFileA(const char *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entry_point, const char *target, UINT sflags, UINT eflags, ID3DX11ThreadPump *pump, ID3D10Blob **shader, ID3D10Blob **error_messages, HRESULT *hresult); HRESULT WINAPI D3DX11CompileFromFileW(const WCHAR *filename, const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entry_point, const char *target, UINT sflags, UINT eflags, ID3DX11ThreadPump *pump, ID3D10Blob **shader, ID3D10Blob **error_messages, HRESULT *hresult); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/d3dx11core.idl ================================================ /* * Copyright 2016 Andrey Gusev * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgi.idl"; import "d3dcommon.idl"; [ object, local, pointer_default(unique) ] interface ID3DX11DataLoader { HRESULT Load(); HRESULT Decompress([out] void **data, [in] SIZE_T *bytes); HRESULT Destroy(); } [ object, local, pointer_default(unique) ] interface ID3DX11DataProcessor { HRESULT Process([in] void *data, [in] SIZE_T bytes); HRESULT CreateDeviceObject([out] void **data_object); HRESULT Destroy(); } [ object, local, pointer_default(unique), uuid(c93fecfa-6967-478a-abbc-402d90621fcb) ] interface ID3DX11ThreadPump : IUnknown { HRESULT AddWorkItem([in] ID3DX11DataLoader *loader, [in] ID3DX11DataProcessor *processor, [in] HRESULT *hresult, [out] void **device_object); UINT GetWorkItemCount(); HRESULT WaitForAllItems(); HRESULT ProcessDeviceWorkItems([in] UINT count); HRESULT PurgeAllItems(); HRESULT GetQueueStatus([in] UINT *io_queue, [in] UINT *process_queue, [in] UINT *device_queue); } ================================================ FILE: wine/windows/d3dx11tex.h ================================================ /* * Copyright 2016 Andrey Gusev * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx11.h" #ifndef __D3DX11TEX_H__ #define __D3DX11TEX_H__ typedef enum D3DX11_FILTER_FLAG { D3DX11_FILTER_NONE = 0x00000001, D3DX11_FILTER_POINT = 0x00000002, D3DX11_FILTER_LINEAR = 0x00000003, D3DX11_FILTER_TRIANGLE = 0x00000004, D3DX11_FILTER_BOX = 0x00000005, D3DX11_FILTER_MIRROR_U = 0x00010000, D3DX11_FILTER_MIRROR_V = 0x00020000, D3DX11_FILTER_MIRROR_W = 0x00040000, D3DX11_FILTER_MIRROR = 0x00070000, D3DX11_FILTER_DITHER = 0x00080000, D3DX11_FILTER_DITHER_DIFFUSION = 0x00100000, D3DX11_FILTER_SRGB_IN = 0x00200000, D3DX11_FILTER_SRGB_OUT = 0x00400000, D3DX11_FILTER_SRGB = 0x00600000, } D3DX11_FILTER_FLAG; typedef enum D3DX11_IMAGE_FILE_FORMAT { D3DX11_IFF_BMP = 0, D3DX11_IFF_JPG = 1, D3DX11_IFF_PNG = 3, D3DX11_IFF_DDS = 4, D3DX11_IFF_TIFF = 10, D3DX11_IFF_GIF = 11, D3DX11_IFF_WMP = 12, D3DX11_IFF_FORCE_DWORD = 0x7fffffff } D3DX11_IMAGE_FILE_FORMAT; typedef struct D3DX11_IMAGE_INFO { UINT Width; UINT Height; UINT Depth; UINT ArraySize; UINT MipLevels; UINT MiscFlags; DXGI_FORMAT Format; D3D11_RESOURCE_DIMENSION ResourceDimension; D3DX11_IMAGE_FILE_FORMAT ImageFileFormat; } D3DX11_IMAGE_INFO; typedef struct D3DX11_IMAGE_LOAD_INFO { UINT Width; UINT Height; UINT Depth; UINT FirstMipLevel; UINT MipLevels; D3D11_USAGE Usage; UINT BindFlags; UINT CpuAccessFlags; UINT MiscFlags; DXGI_FORMAT Format; UINT Filter; UINT MipFilter; D3DX11_IMAGE_INFO *pSrcInfo; #ifdef __cplusplus D3DX11_IMAGE_LOAD_INFO() { Width = D3DX11_DEFAULT; Height = D3DX11_DEFAULT; Depth = D3DX11_DEFAULT; FirstMipLevel = D3DX11_DEFAULT; MipLevels = D3DX11_DEFAULT; Usage = (D3D11_USAGE)D3DX11_DEFAULT; BindFlags = D3DX11_DEFAULT; CpuAccessFlags = D3DX11_DEFAULT; MiscFlags = D3DX11_DEFAULT; Format = DXGI_FORMAT_FROM_FILE; Filter = D3DX11_DEFAULT; MipFilter = D3DX11_DEFAULT; pSrcInfo = NULL; } #endif } D3DX11_IMAGE_LOAD_INFO; #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3DX11CreateShaderResourceViewFromMemory(ID3D11Device *device, const void *data, SIZE_T data_size, D3DX11_IMAGE_LOAD_INFO *load_info, ID3DX11ThreadPump *pump, ID3D11ShaderResourceView **view, HRESULT *hresult); HRESULT WINAPI D3DX11CreateTextureFromFileA(ID3D11Device *device, const char *filename, D3DX11_IMAGE_LOAD_INFO *load_info, ID3DX11ThreadPump *pump, ID3D11Resource **texture, HRESULT *hresult); HRESULT WINAPI D3DX11CreateTextureFromFileW(ID3D11Device *device, const WCHAR *filename, D3DX11_IMAGE_LOAD_INFO *load_info, ID3DX11ThreadPump *pump, ID3D11Resource **texture, HRESULT *hresult); HRESULT WINAPI D3DX11CreateTextureFromMemory(ID3D11Device *device, const void *src_data, SIZE_T src_data_size, D3DX11_IMAGE_LOAD_INFO *loadinfo, ID3DX11ThreadPump *pump, ID3D11Resource **texture, HRESULT *hresult); HRESULT WINAPI D3DX11FilterTexture(ID3D11DeviceContext *context, ID3D11Resource *texture, UINT src_level, UINT filter); HRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX11ThreadPump *pump, D3DX11_IMAGE_INFO *img_info, HRESULT *hresult); HRESULT WINAPI D3DX11SaveTextureToMemory(ID3D11DeviceContext *context, ID3D11Resource *texture, D3DX11_IMAGE_FILE_FORMAT format, ID3D10Blob **buffer, UINT flags); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/d3dx9.h ================================================ /* * Copyright (C) 2007 David Adam * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DX9_H__ #define __D3DX9_H__ #include #define D3DX_DEFAULT ((UINT)-1) #define D3DX_DEFAULT_NONPOW2 ((UINT)-2) #define D3DX_DEFAULT_FLOAT FLT_MAX #define D3DX_FROM_FILE ((UINT)-3) #define D3DFMT_FROM_FILE ((D3DFORMAT)-3) #include "d3d9.h" #include "d3dx9math.h" #include "d3dx9core.h" #include "d3dx9xof.h" #include "d3dx9mesh.h" #include "d3dx9shader.h" #include "d3dx9effect.h" #include "d3dx9shape.h" #include "d3dx9anim.h" #include "d3dx9tex.h" #define _FACDD 0x876 #define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code) enum _D3DXERR { D3DXERR_CANNOTMODIFYINDEXBUFFER = MAKE_DDHRESULT(2900), D3DXERR_INVALIDMESH = MAKE_DDHRESULT(2901), D3DXERR_CANNOTATTRSORT = MAKE_DDHRESULT(2902), D3DXERR_SKINNINGNOTSUPPORTED = MAKE_DDHRESULT(2903), D3DXERR_TOOMANYINFLUENCES = MAKE_DDHRESULT(2904), D3DXERR_INVALIDDATA = MAKE_DDHRESULT(2905), D3DXERR_LOADEDMESHASNODATA = MAKE_DDHRESULT(2906), D3DXERR_DUPLICATENAMEDFRAGMENT = MAKE_DDHRESULT(2907), D3DXERR_CANNOTREMOVELASTITEM = MAKE_DDHRESULT(2908), }; #endif ================================================ FILE: wine/windows/d3dx9anim.h ================================================ /* * Copyright 2011 Dylan Smith * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3DX9ANIM_H #define __WINE_D3DX9ANIM_H DEFINE_GUID(IID_ID3DXAnimationSet, 0x698cfb3f, 0x9289, 0x4d95, 0x9a, 0x57, 0x33, 0xa9, 0x4b, 0x5a, 0x65, 0xf9); DEFINE_GUID(IID_ID3DXKeyframedAnimationSet, 0xfa4e8e3a, 0x9786, 0x407d, 0x8b, 0x4c, 0x59, 0x95, 0x89, 0x37, 0x64, 0xaf); DEFINE_GUID(IID_ID3DXCompressedAnimationSet, 0x6cc2480d, 0x3808, 0x4739, 0x9f, 0x88, 0xde, 0x49, 0xfa, 0xcd, 0x8d, 0x4c); DEFINE_GUID(IID_ID3DXAnimationController, 0xac8948ec, 0xf86d, 0x43e2, 0x96, 0xde, 0x31, 0xfc, 0x35, 0xf9, 0x6d, 0x9e); typedef enum _D3DXMESHDATATYPE { D3DXMESHTYPE_MESH = 1, D3DXMESHTYPE_PMESH = 2, D3DXMESHTYPE_PATCHMESH = 3, D3DXMESHTYPE_FORCE_DWORD = 0x7fffffff, } D3DXMESHDATATYPE; typedef enum _D3DXCALLBACK_SEARCH_FLAGS { D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION = 0x00000001, D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION = 0x00000002, D3DXCALLBACK_SEARCH_FORCE_DWORD = 0x7fffffff, } D3DXCALLBACK_SEARCH_FLAGS; typedef enum _D3DXPLAYBACK_TYPE { D3DXPLAY_LOOP = 0, D3DXPLAY_ONCE = 1, D3DXPLAY_PINGPONG = 2, D3DXPLAY_FORCE_DWORD = 0x7fffffff, } D3DXPLAYBACK_TYPE; typedef enum _D3DXCOMPRESSION_FLAGS { D3DXCOMPRESSION_DEFAULT = 0x00000000, D3DXCOMPRESSION_FORCE_DWORD = 0x7fffffff, } D3DXCOMPRESSION_FLAGS; typedef enum _D3DXPRIORITY_TYPE { D3DXPRIORITY_LOW = 0, D3DXPRIORITY_HIGH = 1, D3DXPRIORITY_FORCE_DWORD = 0x7fffffff, } D3DXPRIORITY_TYPE; typedef enum _D3DXEVENT_TYPE { D3DXEVENT_TRACKSPEED = 0, D3DXEVENT_TRACKWEIGHT = 1, D3DXEVENT_TRACKPOSITION = 2, D3DXEVENT_TRACKENABLE = 3, D3DXEVENT_PRIORITYBLEND = 4, D3DXEVENT_FORCE_DWORD = 0x7fffffff, } D3DXEVENT_TYPE; typedef enum _D3DXTRANSITION_TYPE { D3DXTRANSITION_LINEAR = 0, D3DXTRANSITION_EASEINEASEOUT = 1, D3DXTRANSITION_FORCE_DWORD = 0x7fffffff, } D3DXTRANSITION_TYPE; typedef struct _D3DXMESHDATA { D3DXMESHDATATYPE Type; union { ID3DXMesh *pMesh; ID3DXPMesh *pPMesh; ID3DXPatchMesh *pPatchMesh; } DUMMYUNIONNAME; } D3DXMESHDATA, *LPD3DXMESHDATA; typedef struct _D3DXMESHCONTAINER { char *Name; D3DXMESHDATA MeshData; LPD3DXMATERIAL pMaterials; LPD3DXEFFECTINSTANCE pEffects; DWORD NumMaterials; DWORD *pAdjacency; ID3DXSkinInfo *pSkinInfo; struct _D3DXMESHCONTAINER *pNextMeshContainer; } D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER; typedef struct _D3DXFRAME { char *Name; D3DXMATRIX TransformationMatrix; LPD3DXMESHCONTAINER pMeshContainer; struct _D3DXFRAME *pFrameSibling; struct _D3DXFRAME *pFrameFirstChild; } D3DXFRAME, *LPD3DXFRAME; typedef struct _D3DXKEY_VECTOR3 { FLOAT Time; D3DXVECTOR3 Value; } D3DXKEY_VECTOR3, *LPD3DXKEY_VECTOR3; typedef struct _D3DXKEY_QUATERNION { FLOAT Time; D3DXQUATERNION Value; } D3DXKEY_QUATERNION, *LPD3DXKEY_QUATERNION; typedef struct _D3DXKEY_CALLBACK { float Time; void *pCallbackData; } D3DXKEY_CALLBACK, *LPD3DXKEY_CALLBACK; typedef struct _D3DXTRACK_DESC { D3DXPRIORITY_TYPE Priority; FLOAT Weight; FLOAT Speed; DOUBLE Position; BOOL Enable; } D3DXTRACK_DESC, *LPD3DXTRACK_DESC; typedef struct _D3DXEVENT_DESC { D3DXEVENT_TYPE Type; UINT Track; DOUBLE StartTime; DOUBLE Duration; D3DXTRANSITION_TYPE Transition; union { FLOAT Weight; FLOAT Speed; DOUBLE Position; BOOL Enable; } DUMMYUNIONNAME; } D3DXEVENT_DESC, *LPD3DXEVENT_DESC; typedef DWORD D3DXEVENTHANDLE, *LPD3DXEVENTHANDLE; typedef interface ID3DXAllocateHierarchy *LPD3DXALLOCATEHIERARCHY; typedef interface ID3DXLoadUserData *LPD3DXLOADUSERDATA; typedef interface ID3DXSaveUserData *LPD3DXSAVEUSERDATA; typedef interface ID3DXAnimationSet *LPD3DXANIMATIONSET; typedef interface ID3DXKeyframedAnimationSet *LPD3DXKEYFRAMEDANIMATIONSET; typedef interface ID3DXCompressedAnimationSet *LPD3DXCOMPRESSEDANIMATIONSET; typedef interface ID3DXAnimationCallbackHandler *LPD3DXANIMATIONCALLBACKHANDLER; typedef interface ID3DXAnimationController *LPD3DXANIMATIONCONTROLLER; #undef INTERFACE #define INTERFACE ID3DXAllocateHierarchy DECLARE_INTERFACE(ID3DXAllocateHierarchy) { STDMETHOD(CreateFrame)(THIS_ const char *name, D3DXFRAME **new_frame) PURE; STDMETHOD(CreateMeshContainer)(THIS_ const char *name, const D3DXMESHDATA *mesh_data, const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD num_materials, const DWORD *adjacency, ID3DXSkinInfo *skin_info, D3DXMESHCONTAINER **new_mesh_container) PURE; STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME frame) PURE; STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER mesh_container) PURE; }; #undef INTERFACE #define INTERFACE ID3DXLoadUserData DECLARE_INTERFACE(ID3DXLoadUserData) { STDMETHOD(LoadTopLevelData)(ID3DXFileData *child_data) PURE; STDMETHOD(LoadFrameChildData)(D3DXFRAME *frame, ID3DXFileData *child_data) PURE; STDMETHOD(LoadMeshChildData)(D3DXMESHCONTAINER *mesh_container, ID3DXFileData *child_data) PURE; }; #undef INTERFACE #define INTERFACE ID3DXSaveUserData DECLARE_INTERFACE(ID3DXSaveUserData) { STDMETHOD(AddFrameChildData)(const D3DXFRAME *frame, ID3DXFileSaveObject *save_obj, ID3DXFileSaveData *frame_data) PURE; STDMETHOD(AddMeshChildData)(const D3DXMESHCONTAINER *mesh_container, ID3DXFileSaveObject *save_obj, ID3DXFileSaveData *mesh_data) PURE; STDMETHOD(AddTopLevelDataObjectsPre)(ID3DXFileSaveObject *save_obj) PURE; STDMETHOD(AddTopLevelDataObjectsPost)(ID3DXFileSaveObject *save_obj) PURE; STDMETHOD(RegisterTemplates)(ID3DXFile *file) PURE; STDMETHOD(SaveTemplates)(ID3DXFileSaveObject *save_obj) PURE; }; #undef INTERFACE #define INTERFACE ID3DXAnimationSet DECLARE_INTERFACE_(ID3DXAnimationSet, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXAnimationSet methods ***/ STDMETHOD_(const char *, GetName)(THIS) PURE; STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE; STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE; STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE; STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale, D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE; STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position, void **callback_data) PURE; }; #undef INTERFACE #define INTERFACE ID3DXKeyframedAnimationSet DECLARE_INTERFACE_(ID3DXKeyframedAnimationSet, ID3DXAnimationSet) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXAnimationSet methods ***/ STDMETHOD_(const char *, GetName)(THIS) PURE; STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE; STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE; STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE; STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale, D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE; STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position, void **callback_data) PURE; /*** ID3DXKeyframedAnimationSet methods ***/ STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE; STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE; STDMETHOD_(UINT, GetNumScaleKeys)(THIS_ UINT animation) PURE; STDMETHOD(GetScaleKeys)(THIS_ UINT animation, LPD3DXKEY_VECTOR3 scale_keys) PURE; STDMETHOD(GetScaleKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key) PURE; STDMETHOD(SetScaleKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key) PURE; STDMETHOD_(UINT, GetNumRotationKeys)(THIS_ UINT animation) PURE; STDMETHOD(GetRotationKeys)(THIS_ UINT animation, LPD3DXKEY_QUATERNION rotation_keys) PURE; STDMETHOD(GetRotationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key) PURE; STDMETHOD(SetRotationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key) PURE; STDMETHOD_(UINT, GetNumTranslationKeys)(THIS_ UINT animation) PURE; STDMETHOD(GetTranslationKeys)(THIS_ UINT animation, LPD3DXKEY_VECTOR3 translation_keys) PURE; STDMETHOD(GetTranslationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key) PURE; STDMETHOD(SetTranslationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key) PURE; STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE; STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK callback_keys) PURE; STDMETHOD(GetCallbackKey)(THIS_ UINT key, LPD3DXKEY_CALLBACK callback_key) PURE; STDMETHOD(SetCallbackKey)(THIS_ UINT key, LPD3DXKEY_CALLBACK callback_key) PURE; STDMETHOD(UnregisterScaleKey)(THIS_ UINT animation, UINT key) PURE; STDMETHOD(UnregisterRotationKey)(THIS_ UINT animation, UINT key) PURE; STDMETHOD(UnregisterTranslationKey)(THIS_ UINT animation, UINT key) PURE; STDMETHOD(RegisterAnimationSRTKeys)(THIS_ const char *name, UINT num_scale_keys, UINT num_rotation_keys, UINT num_translation_keys, const D3DXKEY_VECTOR3 *scale_keys, const D3DXKEY_QUATERNION *rotation_keys, const D3DXKEY_VECTOR3 *translation_keys, DWORD *animation_index) PURE; STDMETHOD(Compress)(THIS_ DWORD flags, float lossiness, D3DXFRAME *hierarchy, ID3DXBuffer **compressed_data) PURE; STDMETHOD(UnregisterAnimation)(THIS_ UINT index) PURE; }; #undef INTERFACE #define INTERFACE ID3DXCompressedAnimationSet DECLARE_INTERFACE_(ID3DXCompressedAnimationSet, ID3DXAnimationSet) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXAnimationSet methods ***/ STDMETHOD_(const char *, GetName)(THIS) PURE; STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE; STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE; STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE; STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale, D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE; STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position, void **callback_data) PURE; /*** ID3DXCompressedAnimationSet methods ***/ STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE; STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE; STDMETHOD(GetCompressedData)(THIS_ ID3DXBuffer **compressed_data) PURE; STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE; STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK callback_keys) PURE; }; #undef INTERFACE #define INTERFACE ID3DXAnimationCallbackHandler DECLARE_INTERFACE(ID3DXAnimationCallbackHandler) { STDMETHOD(HandleCallback)(THIS_ UINT track, void *callback_data) PURE; }; #undef INTERFACE #define INTERFACE ID3DXAnimationController DECLARE_INTERFACE_(ID3DXAnimationController, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXAnimationController methods ***/ STDMETHOD_(UINT, GetMaxNumAnimationOutputs)(THIS) PURE; STDMETHOD_(UINT, GetMaxNumAnimationSets)(THIS) PURE; STDMETHOD_(UINT, GetMaxNumTracks)(THIS) PURE; STDMETHOD_(UINT, GetMaxNumEvents)(THIS) PURE; STDMETHOD(RegisterAnimationOutput)(THIS_ const char *name, D3DXMATRIX *matrix, D3DXVECTOR3 *scale, D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE; STDMETHOD(RegisterAnimationSet)(THIS_ ID3DXAnimationSet *anim_set) PURE; STDMETHOD(UnregisterAnimationSet)(THIS_ ID3DXAnimationSet *anim_set) PURE; STDMETHOD_(UINT, GetNumAnimationSets)(THIS) PURE; STDMETHOD(GetAnimationSet)(THIS_ UINT index, ID3DXAnimationSet **anim_set) PURE; STDMETHOD(GetAnimationSetByName)(THIS_ const char *name, ID3DXAnimationSet **anim_set) PURE; STDMETHOD(AdvanceTime)(THIS_ double time_delta, ID3DXAnimationCallbackHandler *callback_handler) PURE; STDMETHOD(ResetTime)(THIS) PURE; STDMETHOD_(double, GetTime)(THIS) PURE; STDMETHOD(SetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet *anim_set) PURE; STDMETHOD(GetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet **anim_set) PURE; STDMETHOD(SetTrackPriority)(THIS_ UINT track, D3DXPRIORITY_TYPE priority) PURE; STDMETHOD(SetTrackSpeed)(THIS_ UINT track, float speed) PURE; STDMETHOD(SetTrackWeight)(THIS_ UINT track, float weight) PURE; STDMETHOD(SetTrackPosition)(THIS_ UINT track, double position) PURE; STDMETHOD(SetTrackEnable)(THIS_ UINT track, BOOL enable) PURE; STDMETHOD(SetTrackDesc)(THIS_ UINT track, D3DXTRACK_DESC *desc) PURE; STDMETHOD(GetTrackDesc)(THIS_ UINT track, D3DXTRACK_DESC *desc) PURE; STDMETHOD(SetPriorityBlend)(THIS_ float blend_weight) PURE; STDMETHOD_(float, GetPriorityBlend)(THIS) PURE; STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT track, float new_speed, double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE; STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT track, float new_weight, double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE; STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT track, double new_position, double start_time) PURE; STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT track, BOOL new_enable, double start_time) PURE; STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ float new_blend_weight, double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE; STDMETHOD(UnkeyEvent)(THIS_ D3DXEVENTHANDLE event) PURE; STDMETHOD(UnkeyAllTrackEvents)(THIS_ UINT track) PURE; STDMETHOD(UnkeyAllPriorityBlends)(THIS) PURE; STDMETHOD_(D3DXEVENTHANDLE, GetCurrentTrackEvent)(THIS_ UINT track, D3DXEVENT_TYPE event_type) PURE; STDMETHOD_(D3DXEVENTHANDLE, GetCurrentPriorityBlend)(THIS) PURE; STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingTrackEvent)(THIS_ UINT track, D3DXEVENTHANDLE event) PURE; STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE event) PURE; STDMETHOD(ValidateEvent)(THIS_ D3DXEVENTHANDLE event) PURE; STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE event, D3DXEVENT_DESC *desc) PURE; STDMETHOD(CloneAnimationController)(THIS_ UINT max_num_anim_outputs, UINT max_num_anim_sets, UINT max_num_tracks, UINT max_num_events, ID3DXAnimationController **anim_controller) PURE; }; #undef INTERFACE #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3DXLoadMeshHierarchyFromXA(const char *filename, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader, D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller); HRESULT WINAPI D3DXLoadMeshHierarchyFromXW(const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader, D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller); #define D3DXLoadMeshHierarchyFromX WINELIB_NAME_AW(D3DXLoadMeshHierarchyFromX) HRESULT WINAPI D3DXLoadMeshHierarchyFromXInMemory(const void *data, DWORD data_size, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader, D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller); HRESULT WINAPI D3DXSaveMeshHierarchyToFileA(const char *filename, DWORD format, const D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller, ID3DXSaveUserData *user_data_saver); HRESULT WINAPI D3DXSaveMeshHierarchyToFileW(const WCHAR *filename, DWORD format, const D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller, ID3DXSaveUserData *user_data_saver); #define D3DXSaveMeshHierarchyToFile WINELIB_NAME_AW(D3DXSaveMeshHierarchyToFile) HRESULT WINAPI D3DXFrameDestroy(D3DXFRAME *frame_root, ID3DXAllocateHierarchy *alloc); HRESULT WINAPI D3DXFrameAppendChild(D3DXFRAME *parent, const D3DXFRAME *child); D3DXFRAME * WINAPI D3DXFrameFind(const D3DXFRAME *root, const char *name); HRESULT WINAPI D3DXFrameRegisterNamedMatrices(D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller); UINT WINAPI D3DXFrameNumNamedMatrices(const D3DXFRAME *frame_root); HRESULT WINAPI D3DXFrameCalculateBoundingSphere(const D3DXFRAME *frame_root, D3DXVECTOR3 *center, FLOAT *radius); HRESULT WINAPI D3DXCreateKeyframedAnimationSet(const char *name, double ticks_per_second, D3DXPLAYBACK_TYPE playback_type, UINT animation_count, UINT callback_key_count, const D3DXKEY_CALLBACK *callback_keys, ID3DXKeyframedAnimationSet **animation_set); HRESULT WINAPI D3DXCreateCompressedAnimationSet(const char *name, double ticks_per_second, D3DXPLAYBACK_TYPE playback_type, ID3DXBuffer *compressed_data, UINT callback_key_count, const D3DXKEY_CALLBACK *callback_keys, ID3DXCompressedAnimationSet **animation_set); HRESULT WINAPI D3DXCreateAnimationController(UINT max_animation_output_count, UINT max_animation_set_count, UINT max_track_count, UINT max_event_count, ID3DXAnimationController **animation_controller); #ifdef __cplusplus } #endif #endif /* __WINE_D3DX9ANIM_H */ ================================================ FILE: wine/windows/d3dx9core.h ================================================ /* * Copyright (C) 2007, 2008 Tony Wasserka * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx9.h" #ifndef __WINE_D3DX9CORE_H #define __WINE_D3DX9CORE_H /********************************************** ***************** Definitions **************** **********************************************/ #define D3DX_VERSION 0x0902 #ifndef D3DX_SDK_VERSION #define D3DX_SDK_VERSION 43 #endif #define D3DXSPRITE_DONOTSAVESTATE 0x00000001 #define D3DXSPRITE_DONOTMODIFY_RENDERSTATE 0x00000002 #define D3DXSPRITE_OBJECTSPACE 0x00000004 #define D3DXSPRITE_BILLBOARD 0x00000008 #define D3DXSPRITE_ALPHABLEND 0x00000010 #define D3DXSPRITE_SORT_TEXTURE 0x00000020 #define D3DXSPRITE_SORT_DEPTH_FRONTTOBACK 0x00000040 #define D3DXSPRITE_SORT_DEPTH_BACKTOFRONT 0x00000080 #define D3DXSPRITE_DO_NOT_ADDREF_TEXTURE 0x00000100 /********************************************** ******************** GUIDs ******************* **********************************************/ DEFINE_GUID(IID_ID3DXBuffer, 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2); DEFINE_GUID(IID_ID3DXFont, 0xd79dbb70, 0x5f21, 0x4d36, 0xbb, 0xc2, 0xff, 0x52, 0x5c, 0x21, 0x3c, 0xdc); DEFINE_GUID(IID_ID3DXLine, 0xd379ba7f, 0x9042, 0x4ac4, 0x9f, 0x5e, 0x58, 0x19, 0x2a, 0x4c, 0x6b, 0xd8); DEFINE_GUID(IID_ID3DXRenderToEnvMap, 0x313f1b4b, 0xc7b0, 0x4fa2, 0x9d, 0x9d, 0x8d, 0x38, 0xb, 0x64, 0x38, 0x5e); DEFINE_GUID(IID_ID3DXRenderToSurface, 0x6985f346, 0x2c3d, 0x43b3, 0xbe, 0x8b, 0xda, 0xae, 0x8a, 0x3, 0xd8, 0x94); DEFINE_GUID(IID_ID3DXSprite, 0xba0b762d, 0x7d28, 0x43ec, 0xb9, 0xdc, 0x2f, 0x84, 0x44, 0x3b, 0x6, 0x14); /********************************************** ****************** typedefs ****************** **********************************************/ typedef struct ID3DXBuffer *LPD3DXBUFFER; typedef struct ID3DXFont *LPD3DXFONT; typedef struct ID3DXLine *LPD3DXLINE; typedef struct ID3DXRenderToEnvMap *LPD3DXRenderToEnvMap; typedef struct ID3DXRenderToSurface *LPD3DXRENDERTOSURFACE; typedef struct ID3DXSprite *LPD3DXSPRITE; /********************************************** *********** interface declarations *********** **********************************************/ #define INTERFACE ID3DXBuffer DECLARE_INTERFACE_(ID3DXBuffer, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXBuffer methods ***/ STDMETHOD_(void *, GetBufferPointer)(THIS) PURE; STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define ID3DXBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ID3DXBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define ID3DXBuffer_Release(p) (p)->lpVtbl->Release(p) /*** ID3DXBuffer methods ***/ #define ID3DXBuffer_GetBufferPointer(p) (p)->lpVtbl->GetBufferPointer(p) #define ID3DXBuffer_GetBufferSize(p) (p)->lpVtbl->GetBufferSize(p) #else /*** IUnknown methods ***/ #define ID3DXBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define ID3DXBuffer_AddRef(p) (p)->AddRef() #define ID3DXBuffer_Release(p) (p)->Release() /*** ID3DXBuffer methods ***/ #define ID3DXBuffer_GetBufferPointer(p) (p)->GetBufferPointer() #define ID3DXBuffer_GetBufferSize(p) (p)->GetBufferSize() #endif typedef struct _D3DXFONT_DESCA { INT Height; UINT Width; UINT Weight; UINT MipLevels; BOOL Italic; BYTE CharSet; BYTE OutputPrecision; BYTE Quality; BYTE PitchAndFamily; CHAR FaceName[LF_FACESIZE]; } D3DXFONT_DESCA, *LPD3DXFONT_DESCA; typedef struct _D3DXFONT_DESCW { INT Height; UINT Width; UINT Weight; UINT MipLevels; BOOL Italic; BYTE CharSet; BYTE OutputPrecision; BYTE Quality; BYTE PitchAndFamily; WCHAR FaceName[LF_FACESIZE]; } D3DXFONT_DESCW, *LPD3DXFONT_DESCW; DECL_WINELIB_TYPE_AW(D3DXFONT_DESC) DECL_WINELIB_TYPE_AW(LPD3DXFONT_DESC) #define INTERFACE ID3DXFont DECLARE_INTERFACE_(ID3DXFont, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXFont methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(GetDescA)(THIS_ D3DXFONT_DESCA *desc) PURE; STDMETHOD(GetDescW)(THIS_ D3DXFONT_DESCW *desc) PURE; STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *metrics) PURE; STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *metrics) PURE; STDMETHOD_(HDC, GetDC)(THIS) PURE; STDMETHOD(GetGlyphData)(THIS_ UINT glyph, struct IDirect3DTexture9 **texture, RECT *blackbox, POINT *cellinc) PURE; STDMETHOD(PreloadCharacters)(THIS_ UINT first, UINT last) PURE; STDMETHOD(PreloadGlyphs)(THIS_ UINT first, UINT last) PURE; STDMETHOD(PreloadTextA)(THIS_ const char *string, INT count) PURE; STDMETHOD(PreloadTextW)(THIS_ const WCHAR *string, INT count) PURE; STDMETHOD_(INT, DrawTextA)(THIS_ struct ID3DXSprite *sprite, const char *string, INT count, RECT *rect, DWORD format, D3DCOLOR color) PURE; STDMETHOD_(INT, DrawTextW)(THIS_ struct ID3DXSprite *sprite, const WCHAR *string, INT count, RECT *rect, DWORD format, D3DCOLOR color) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define ID3DXFont_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ID3DXFont_AddRef(p) (p)->lpVtbl->AddRef(p) #define ID3DXFont_Release(p) (p)->lpVtbl->Release(p) /*** ID3DXFont methods ***/ #define ID3DXFont_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define ID3DXFont_GetDescA(p,a) (p)->lpVtbl->GetDescA(p,a) #define ID3DXFont_GetDescW(p,a) (p)->lpVtbl->GetDescW(p,a) #define ID3DXFont_GetTextMetricsA(p,a) (p)->lpVtbl->GetTextMetricsA(p,a) #define ID3DXFont_GetTextMetricsW(p,a) (p)->lpVtbl->GetTextMetricsW(p,a) #define ID3DXFont_GetDC(p) (p)->lpVtbl->GetDC(p) #define ID3DXFont_GetGlyphData(p,a,b,c,d) (p)->lpVtbl->GetGlyphData(p,a,b,c,d) #define ID3DXFont_PreloadCharacters(p,a,b) (p)->lpVtbl->PreloadCharacters(p,a,b) #define ID3DXFont_PreloadGlyphs(p,a,b) (p)->lpVtbl->PreloadGlyphs(p,a,b) #define ID3DXFont_PreloadTextA(p,a,b) (p)->lpVtbl->PreloadTextA(p,a,b) #define ID3DXFont_PreloadTextW(p,a,b) (p)->lpVtbl->PreloadTextW(p,a,b) #define ID3DXFont_DrawTextA(p,a,b,c,d,e,f) (p)->lpVtbl->DrawTextA(p,a,b,c,d,e,f) #define ID3DXFont_DrawTextW(p,a,b,c,d,e,f) (p)->lpVtbl->DrawTextW(p,a,b,c,d,e,f) #define ID3DXFont_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p) #define ID3DXFont_OnResetDevice(p) (p)->lpVtbl->OnResetDevice(p) #else /*** IUnknown methods ***/ #define ID3DXFont_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define ID3DXFont_AddRef(p) (p)->AddRef() #define ID3DXFont_Release(p) (p)->Release() /*** ID3DXFont methods ***/ #define ID3DXFont_GetDevice(p,a) (p)->GetDevice(a) #define ID3DXFont_GetDescA(p,a) (p)->GetDescA(a) #define ID3DXFont_GetDescW(p,a) (p)->GetDescW(a) #define ID3DXFont_GetTextMetricsA(p,a) (p)->GetTextMetricsA(a) #define ID3DXFont_GetTextMetricsW(p,a) (p)->GetTextMetricsW(a) #define ID3DXFont_GetDC(p) (p)->GetDC() #define ID3DXFont_GetGlyphData(p,a,b,c,d) (p)->GetGlyphData(a,b,c,d) #define ID3DXFont_PreloadCharacters(p,a,b) (p)->PreloadCharacters(a,b) #define ID3DXFont_PreloadGlyphs(p,a,b) (p)->PreloadGlyphs(a,b) #define ID3DXFont_PreloadTextA(p,a,b) (p)->PreloadTextA(a,b) #define ID3DXFont_PreloadTextW(p,a,b) (p)->PreloadTextW(a,b) #define ID3DXFont_DrawTextA(p,a,b,c,d,e,f) (p)->DrawTextA(a,b,c,d,e,f) #define ID3DXFont_DrawTextW(p,a,b,c,d,e,f) (p)->DrawTextW(a,b,c,d,e,f) #define ID3DXFont_OnLostDevice(p) (p)->OnLostDevice() #define ID3DXFont_OnResetDevice(p) (p)->OnResetDevice() #endif #define ID3DXFont_DrawText WINELIB_NAME_AW(ID3DXFont_DrawText) #define ID3DXFont_GetDesc WINELIB_NAME_AW(ID3DXFont_GetDesc) #define ID3DXFont_GetTextMetrics WINELIB_NAME_AW(ID3DXFont_GetTextMetrics) #define ID3DXFont_PreloadText WINELIB_NAME_AW(ID3DXFont_PreloadText) #define INTERFACE ID3DXLine DECLARE_INTERFACE_(ID3DXLine, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXLine methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(Begin)(THIS) PURE; STDMETHOD(Draw)(THIS_ const D3DXVECTOR2 *vertexlist, DWORD vertexlistcount, D3DCOLOR color) PURE; STDMETHOD(DrawTransform)(THIS_ const D3DXVECTOR3 *vertexlist, DWORD vertexlistcount, const D3DXMATRIX *transform, D3DCOLOR color) PURE; STDMETHOD(SetPattern)(THIS_ DWORD pattern) PURE; STDMETHOD_(DWORD, GetPattern)(THIS) PURE; STDMETHOD(SetPatternScale)(THIS_ FLOAT scale) PURE; STDMETHOD_(FLOAT, GetPatternScale)(THIS) PURE; STDMETHOD(SetWidth)(THIS_ FLOAT width) PURE; STDMETHOD_(FLOAT, GetWidth)(THIS) PURE; STDMETHOD(SetAntialias)(THIS_ BOOL antialias) PURE; STDMETHOD_(BOOL, GetAntialias)(THIS) PURE; STDMETHOD(SetGLLines)(THIS_ BOOL gl_lines) PURE; STDMETHOD_(BOOL, GetGLLines)(THIS) PURE; STDMETHOD(End)(THIS) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define ID3DXLine_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ID3DXLine_AddRef(p) (p)->lpVtbl->AddRef(p) #define ID3DXLine_Release(p) (p)->lpVtbl->Release(p) /*** ID3DXLine methods ***/ #define ID3DXLine_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define ID3DXLine_Begin(p) (p)->lpVtbl->Begin(p) #define ID3DXLine_Draw(p,a,b,c) (p)->lpVtbl->Draw(p,a,b,c) #define ID3DXLine_DrawTransform(p,a,b,c,d) (p)->lpVtbl->DrawTransform(p,a,b,c,d) #define ID3DXLine_SetPattern(p,a) (p)->lpVtbl->SetPattern(p,a) #define ID3DXLine_GetPattern(p) (p)->lpVtbl->GetPattern(p) #define ID3DXLine_SetPatternScale(p,a) (p)->lpVtbl->SetPatternScale(p,a) #define ID3DXLine_GetPatternScale(p) (p)->lpVtbl->GetPatternScale(p) #define ID3DXLine_SetWidth(p,a) (p)->lpVtbl->SetWidth(p,a) #define ID3DXLine_GetWidth(p) (p)->lpVtbl->GetWidth(p) #define ID3DXLine_SetAntialias(p,a) (p)->lpVtbl->SetAntialias(p,a) #define ID3DXLine_GetAntialias(p) (p)->lpVtbl->GetAntialias(p) #define ID3DXLine_SetGLLines(p,a) (p)->lpVtbl->SetGLLines(p,a) #define ID3DXLine_GetGLLines(p) (p)->lpVtbl->GetGLLines(p) #define ID3DXLine_End(p) (p)->lpVtbl->End(p) #define ID3DXLine_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p) #define ID3DXLine_OnResetDevice(p) (p)->lpVtbl->OnResetDevice(p) #else /*** IUnknown methods ***/ #define ID3DXLine_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define ID3DXLine_AddRef(p) (p)->AddRef() #define ID3DXLine_Release(p) (p)->Release() /*** ID3DXLine methods ***/ #define ID3DXLine_GetDevice(p,a) (p)->GetDevice(a) #define ID3DXLine_Begin(p) (p)->Begin() #define ID3DXLine_Draw(p,a,b,c) (p)->Draw(a,b,c) #define ID3DXLine_DrawTransform(p,a,b,c,d) (p)->DrawTransform(a,b,c,d) #define ID3DXLine_SetPattern(p,a) (p)->SetPattern(a) #define ID3DXLine_GetPattern(p) (p)->GetPattern() #define ID3DXLine_SetPatternScale(p,a) (p)->SetPatternScale(a) #define ID3DXLine_GetPatternScale(p) (p)->GetPatternScale() #define ID3DXLine_SetWidth(p,a) (p)->SetWidth(a) #define ID3DXLine_GetWidth(p) (p)->GetWidth() #define ID3DXLine_SetAntialias(p,a) (p)->SetAntialias(a) #define ID3DXLine_GetAntialias(p) (p)->GetAntialias() #define ID3DXLine_SetGLLines(p,a) (p)->SetGLLines(a) #define ID3DXLine_GetGLLines(p) (p)->GetGLLines() #define ID3DXLine_End(p) (p)->End() #define ID3DXLine_OnLostDevice(p) (p)->OnLostDevice() #define ID3DXLine_OnResetDevice(p) (p)->OnResetDevice() #endif typedef struct _D3DXRTE_DESC { UINT Size; UINT MipLevels; D3DFORMAT Format; BOOL DepthStencil; D3DFORMAT DepthStencilFormat; } D3DXRTE_DESC; #define INTERFACE ID3DXRenderToEnvMap DECLARE_INTERFACE_(ID3DXRenderToEnvMap, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXRenderToEnvMap methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(GetDesc)(THIS_ D3DXRTE_DESC *desc) PURE; STDMETHOD(BeginCube)(THIS_ struct IDirect3DCubeTexture9 *cubetex) PURE; STDMETHOD(BeginSphere)(THIS_ struct IDirect3DTexture9 *tex) PURE; STDMETHOD(BeginHemisphere)(THIS_ struct IDirect3DTexture9 *texzpos, struct IDirect3DTexture9 *texzneg) PURE; STDMETHOD(BeginParabolic)(THIS_ struct IDirect3DTexture9 *texzpos, struct IDirect3DTexture9 *texzneg) PURE; STDMETHOD(Face)(THIS_ D3DCUBEMAP_FACES face, DWORD mipfilter) PURE; STDMETHOD(End)(THIS_ DWORD mipfilter) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define ID3DXRenderToEnvMap_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ID3DXRenderToEnvMap_AddRef(p) (p)->lpVtbl->AddRef(p) #define ID3DXRenderToEnvMap_Release(p) (p)->lpVtbl->Release(p) /*** ID3DXRenderToEnvMap methods ***/ #define ID3DXRenderToEnvMap_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define ID3DXRenderToEnvMap_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define ID3DXRenderToEnvMap_BeginCube(p,a) (p)->lpVtbl->BeginCube(p,a) #define ID3DXRenderToEnvMap_BeginSphere(p,a) (p)->lpVtbl->BeginSphere(p,a) #define ID3DXRenderToEnvMap_BeginHemisphere(p,a,b) (p)->lpVtbl->BeginHemisphere(p,a,b) #define ID3DXRenderToEnvMap_BeginParabolic(p,a,b) (p)->lpVtbl->BeginParabolic(p,a,b) #define ID3DXRenderToEnvMap_Face(p,a,b) (p)->lpVtbl->Face(p,a,b) #define ID3DXRenderToEnvMap_End(p,a) (p)->lpVtbl->End(p,a) #define ID3DXRenderToEnvMap_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p) #define ID3DXRenderToEnvMap_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p) #else /*** IUnknown methods ***/ #define ID3DXRenderToEnvMap_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define ID3DXRenderToEnvMap_AddRef(p) (p)->AddRef() #define ID3DXRenderToEnvMap_Release(p) (p)->Release() /*** ID3DXRenderToEnvMap methods ***/ #define ID3DXRenderToEnvMap_GetDevice(p,a) (p)->GetDevice(a) #define ID3DXRenderToEnvMap_GetDesc(p,a) (p)->GetDesc(a) #define ID3DXRenderToEnvMap_BeginCube(p,a) (p)->BeginCube(a) #define ID3DXRenderToEnvMap_BeginSphere(p,a) (p)->BeginSphere(a) #define ID3DXRenderToEnvMap_BeginHemisphere(p,a,b) (p)->BeginHemisphere(a,b) #define ID3DXRenderToEnvMap_BeginParabolic(p,a,b) (p)->BeginParabolic(a,b) #define ID3DXRenderToEnvMap_Face(p,a,b) (p)->Face(a,b) #define ID3DXRenderToEnvMap_End(p,a) (p)->End(a) #define ID3DXRenderToEnvMap_OnLostDevice(p) (p)->OnLostDevice() #define ID3DXRenderToEnvMap_OnLostDevice(p) (p)->OnLostDevice() #endif typedef struct _D3DXRTS_DESC { UINT Width; UINT Height; D3DFORMAT Format; BOOL DepthStencil; D3DFORMAT DepthStencilFormat; } D3DXRTS_DESC; #define INTERFACE ID3DXRenderToSurface DECLARE_INTERFACE_(ID3DXRenderToSurface, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXRenderToSurface methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(GetDesc)(THIS_ D3DXRTS_DESC *desc) PURE; STDMETHOD(BeginScene)(THIS_ struct IDirect3DSurface9 *surface, const D3DVIEWPORT9 *viewport) PURE; STDMETHOD(EndScene)(THIS_ DWORD mipfilter) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define ID3DXRenderToSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ID3DXRenderToSurface_AddRef(p) (p)->lpVtbl->AddRef(p) #define ID3DXRenderToSurface_Release(p) (p)->lpVtbl->Release(p) /*** ID3DXRenderToSurface methods ***/ #define ID3DXRenderToSurface_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define ID3DXRenderToSurface_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define ID3DXRenderToSurface_BeginScene(p,a,b) (p)->lpVtbl->BeginScene(p,a,b) #define ID3DXRenderToSurface_EndScene(p,a) (p)->lpVtbl->EndScene(p,a) #define ID3DXRenderToSurface_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p) #define ID3DXRenderToSurface_OnResetDevice(p) (p)->lpVtbl->OnResetDevice(p) #else /*** IUnknown methods ***/ #define ID3DXRenderToSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define ID3DXRenderToSurface_AddRef(p) (p)->AddRef() #define ID3DXRenderToSurface_Release(p) (p)->Release() /*** ID3DXRenderToSurface methods ***/ #define ID3DXRenderToSurface_GetDevice(p,a) (p)->GetDevice(a) #define ID3DXRenderToSurface_GetDesc(p,a) (p)->GetDesc(a) #define ID3DXRenderToSurface_BeginScene(p,a,b) (p)->BeginScene(a,b) #define ID3DXRenderToSurface_EndScene(p,a) (p)->EndScene(a) #define ID3DXRenderToSurface_OnLostDevice(p) (p)->OnLostDevice() #define ID3DXRenderToSurface_OnResetDevice(p) (p)->OnResetDevice() #endif #define INTERFACE ID3DXSprite DECLARE_INTERFACE_(ID3DXSprite, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **object) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXSprite methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(GetTransform)(THIS_ D3DXMATRIX *transform) PURE; STDMETHOD(SetTransform)(THIS_ const D3DXMATRIX *transform) PURE; STDMETHOD(SetWorldViewRH)(THIS_ const D3DXMATRIX *world, const D3DXMATRIX *view) PURE; STDMETHOD(SetWorldViewLH)(THIS_ const D3DXMATRIX *world, const D3DXMATRIX *view) PURE; STDMETHOD(Begin)(THIS_ DWORD flags) PURE; STDMETHOD(Draw)(THIS_ struct IDirect3DTexture9 *texture, const RECT *rect, const D3DXVECTOR3 *center, const D3DXVECTOR3 *position, D3DCOLOR color) PURE; STDMETHOD(Flush)(THIS) PURE; STDMETHOD(End)(THIS) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define ID3DXSprite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ID3DXSprite_AddRef(p) (p)->lpVtbl->AddRef(p) #define ID3DXSprite_Release(p) (p)->lpVtbl->Release(p) /*** ID3DXSprite methods ***/ #define ID3DXSprite_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define ID3DXSprite_GetTransform(p,a) (p)->lpVtbl->GetTransform(p,a) #define ID3DXSprite_SetTransform(p,a) (p)->lpVtbl->SetTransform(p,a) #define ID3DXSprite_SetWorldViewRH(p,a,b) (p)->lpVtbl->SetWorldViewRH(p,a,b) #define ID3DXSprite_SetWorldViewLH(p,a,b) (p)->lpVtbl->SetWorldViewLH(p,a,b) #define ID3DXSprite_Begin(p,a) (p)->lpVtbl->Begin(p,a) #define ID3DXSprite_Draw(p,a,b,c,d,e) (p)->lpVtbl->Draw(p,a,b,c,d,e) #define ID3DXSprite_Flush(p) (p)->lpVtbl->Flush(p) #define ID3DXSprite_End(p) (p)->lpVtbl->End(p) #define ID3DXSprite_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p) #define ID3DXSprite_OnResetDevice(p) (p)->lpVtbl->OnResetDevice(p) #else /*** IUnknown methods ***/ #define ID3DXSprite_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define ID3DXSprite_AddRef(p) (p)->AddRef() #define ID3DXSprite_Release(p) (p)->Release() /*** ID3DXSprite methods ***/ #define ID3DXSprite_GetDevice(p,a) (p)->GetDevice(a) #define ID3DXSprite_GetTransform(p,a) (p)->GetTransform(a) #define ID3DXSprite_SetTransform(p,a) (p)->SetTransform(a) #define ID3DXSprite_SetWorldViewRH(p,a,b) (p)->SetWorldViewRH(a,b) #define ID3DXSprite_SetWorldViewLH(p,a,b) (p)->SetWorldViewLH(a,b) #define ID3DXSprite_Begin(p,a) (p)->Begin(a) #define ID3DXSprite_Draw(p,a,b,c,d,e) (p)->Draw(a,b,c,d,e) #define ID3DXSprite_Flush(p) (p)->Flush() #define ID3DXSprite_End(p) (p)->End() #define ID3DXSprite_OnLostDevice(p) (p)->OnLostDevice() #define ID3DXSprite_OnResetDevice(p) (p)->OnResetDevice() #endif /********************************************** ****************** functions ***************** **********************************************/ #ifdef __cplusplus extern "C" { #endif BOOL WINAPI D3DXCheckVersion(UINT d3dsdkvers, UINT d3dxsdkvers); HRESULT WINAPI D3DXCreateFontA(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight, UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily, const char *facename, struct ID3DXFont **font); HRESULT WINAPI D3DXCreateFontW(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight, UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily, const WCHAR *facename, struct ID3DXFont **font); #define D3DXCreateFont WINELIB_NAME_AW(D3DXCreateFont) HRESULT WINAPI D3DXCreateFontIndirectA(struct IDirect3DDevice9 *device, const D3DXFONT_DESCA *desc, struct ID3DXFont **font); HRESULT WINAPI D3DXCreateFontIndirectW(struct IDirect3DDevice9 *device, const D3DXFONT_DESCW *desc, struct ID3DXFont **font); #define D3DXCreateFontIndirect WINELIB_NAME_AW(D3DXCreateFontIndirect) HRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine **line); HRESULT WINAPI D3DXCreateRenderToEnvMap(struct IDirect3DDevice9 *device, UINT size, UINT miplevels, D3DFORMAT format, BOOL stencil, D3DFORMAT stencil_format, struct ID3DXRenderToEnvMap **rtem); HRESULT WINAPI D3DXCreateRenderToSurface(struct IDirect3DDevice9 *device, UINT width, UINT height, D3DFORMAT format, BOOL stencil, D3DFORMAT stencil_format, struct ID3DXRenderToSurface **rts); HRESULT WINAPI D3DXCreateSprite(struct IDirect3DDevice9 *device, struct ID3DXSprite **sprite); BOOL WINAPI D3DXDebugMute(BOOL mute); UINT WINAPI D3DXGetDriverLevel(struct IDirect3DDevice9 *device); #ifdef __cplusplus } #endif #endif /* __WINE_D3DX9CORE_H */ ================================================ FILE: wine/windows/d3dx9effect.h ================================================ /* * Copyright 2010 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx9.h" #ifndef __D3DX9EFFECT_H__ #define __D3DX9EFFECT_H__ #define D3DXFX_DONOTSAVESTATE (1 << 0) #define D3DXFX_DONOTSAVESHADERSTATE (1 << 1) #define D3DXFX_DONOTSAVESAMPLERSTATE (1 << 2) #define D3DXFX_NOT_CLONEABLE (1 << 11) #define D3DXFX_LARGEADDRESSAWARE (1 << 17) #define D3DX_PARAMETER_SHARED 1 #define D3DX_PARAMETER_LITERAL 2 #define D3DX_PARAMETER_ANNOTATION 4 typedef struct _D3DXEFFECT_DESC { const char *Creator; UINT Parameters; UINT Techniques; UINT Functions; } D3DXEFFECT_DESC; typedef struct _D3DXPARAMETER_DESC { const char *Name; const char *Semantic; D3DXPARAMETER_CLASS Class; D3DXPARAMETER_TYPE Type; UINT Rows; UINT Columns; UINT Elements; UINT Annotations; UINT StructMembers; DWORD Flags; UINT Bytes; } D3DXPARAMETER_DESC; typedef struct _D3DXTECHNIQUE_DESC { const char *Name; UINT Passes; UINT Annotations; } D3DXTECHNIQUE_DESC; typedef struct _D3DXPASS_DESC { const char *Name; UINT Annotations; const DWORD *pVertexShaderFunction; const DWORD *pPixelShaderFunction; } D3DXPASS_DESC; typedef struct _D3DXFUNCTION_DESC { const char *Name; UINT Annotations; } D3DXFUNCTION_DESC; typedef struct ID3DXEffectPool *LPD3DXEFFECTPOOL; DEFINE_GUID(IID_ID3DXEffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33); #undef INTERFACE #define INTERFACE ID3DXEffectPool DECLARE_INTERFACE_(ID3DXEffectPool, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; }; #undef INTERFACE typedef struct ID3DXBaseEffect *LPD3DXBASEEFFECT; DEFINE_GUID(IID_ID3DXBaseEffect, 0x17c18ac, 0x103f, 0x4417, 0x8c, 0x51, 0x6b, 0xf6, 0xef, 0x1e, 0x56, 0xbe); #define INTERFACE ID3DXBaseEffect DECLARE_INTERFACE_(ID3DXBaseEffect, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXBaseEffect methods ***/ STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE; STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE; STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE; STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE; STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE; STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE; STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index); STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name); STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE; STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE; STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE; STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE; STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE; STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE; STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE; STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE; STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE; STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE; STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE; STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE; STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE; STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE; STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE; STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE; STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE; STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE; STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE; STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE; STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE; STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE; STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE; STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE; STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE; STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE; STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE; STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE; STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE; STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE; STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE; STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE; STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE; STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE; STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE; STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE; STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE; STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE; }; #undef INTERFACE typedef struct ID3DXEffectStateManager *LPD3DXEFFECTSTATEMANAGER; DEFINE_GUID(IID_ID3DXEffectStateManager, 0x79aab587, 0x6dbc, 0x4fa7, 0x82, 0xde, 0x37, 0xfa, 0x17, 0x81, 0xc5, 0xce); #define INTERFACE ID3DXEffectStateManager DECLARE_INTERFACE_(ID3DXEffectStateManager, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXEffectStateManager methods ***/ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE; STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE; STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE; STDMETHOD(LightEnable)(THIS_ DWORD index, BOOL enable) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE state, DWORD value) PURE; STDMETHOD(SetTexture)(THIS_ DWORD stage, struct IDirect3DBaseTexture9 *texture) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD stage, D3DTEXTURESTAGESTATETYPE type, DWORD value) PURE; STDMETHOD(SetSamplerState)(THIS_ DWORD sampler, D3DSAMPLERSTATETYPE type, DWORD value) PURE; STDMETHOD(SetNPatchMode)(THIS_ FLOAT num_segments) PURE; STDMETHOD(SetFVF)(THIS_ DWORD format) PURE; STDMETHOD(SetVertexShader)(THIS_ struct IDirect3DVertexShader9 *shader) PURE; STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT register_index, const FLOAT *constant_data, UINT register_count) PURE; STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT register_index, const INT *constant_data, UINT register_count) PURE; STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT register_index, const BOOL *constant_data, UINT register_count) PURE; STDMETHOD(SetPixelShader)(THIS_ struct IDirect3DPixelShader9 *shader) PURE; STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT register_index, const FLOAT *constant_data, UINT register_count) PURE; STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT register_index, const INT *constant_data, UINT register_count) PURE; STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT register_index, const BOOL *constant_data, UINT register_count) PURE; }; #undef INTERFACE typedef struct ID3DXEffect *LPD3DXEFFECT; #if D3DX_SDK_VERSION <= 25 DEFINE_GUID(IID_ID3DXEffect, 0xd165ccb1, 0x62b0, 0x4a33, 0xb3, 0xfa, 0xa9, 0x23, 0x00, 0x30, 0x5a, 0x11); #elif D3DX_SDK_VERSION == 26 DEFINE_GUID(IID_ID3DXEffect, 0xc7b17651, 0x5420, 0x490e, 0x8a, 0x7f, 0x92, 0x36, 0x75, 0xa2, 0xd6, 0x87); #else DEFINE_GUID(IID_ID3DXEffect, 0xf6ceb4b3, 0x4e4c, 0x40dd, 0xb8, 0x83, 0x8d, 0x8d, 0xe5, 0xea, 0x0c, 0xd5); #endif #define INTERFACE ID3DXEffect DECLARE_INTERFACE_(ID3DXEffect, ID3DXBaseEffect) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXBaseEffect methods ***/ STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE; STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE; STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE; STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE; STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE; STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE; STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index); STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name); STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE; STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE; STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE; STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE; STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE; STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE; STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE; STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE; STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE; STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE; STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE; STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE; STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE; STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE; STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE; STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE; STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE; STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE; STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE; STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE; STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE; STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE; STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE; STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE; STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE; STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE; STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE; STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE; STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE; STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE; STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE; STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE; STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE; STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE; STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE; STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE; STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE; STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE; /*** ID3DXEffect methods ***/ STDMETHOD(GetPool)(THIS_ ID3DXEffectPool **pool) PURE; STDMETHOD(SetTechnique)(THIS_ D3DXHANDLE technique) PURE; STDMETHOD_(D3DXHANDLE, GetCurrentTechnique)(THIS) PURE; STDMETHOD(ValidateTechnique)(THIS_ D3DXHANDLE technique) PURE; STDMETHOD(FindNextValidTechnique)(THIS_ D3DXHANDLE technique, D3DXHANDLE* next_technique) PURE; STDMETHOD_(BOOL, IsParameterUsed)(THIS_ D3DXHANDLE parameter, D3DXHANDLE technique) PURE; STDMETHOD(Begin)(THIS_ UINT *passes, DWORD flags) PURE; STDMETHOD(BeginPass)(THIS_ UINT pass) PURE; STDMETHOD(CommitChanges)(THIS) PURE; STDMETHOD(EndPass)(THIS) PURE; STDMETHOD(End)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; STDMETHOD(SetStateManager)(THIS_ ID3DXEffectStateManager *manager) PURE; STDMETHOD(GetStateManager)(THIS_ ID3DXEffectStateManager **manager) PURE; STDMETHOD(BeginParameterBlock)(THIS) PURE; STDMETHOD_(D3DXHANDLE, EndParameterBlock)(THIS) PURE; STDMETHOD(ApplyParameterBlock)(THIS_ D3DXHANDLE parameter_block) PURE; #if D3DX_SDK_VERSION >= 26 STDMETHOD(DeleteParameterBlock)(THIS_ D3DXHANDLE parameter_block) PURE; #endif STDMETHOD(CloneEffect)(THIS_ struct IDirect3DDevice9 *device, struct ID3DXEffect **effect) PURE; #if D3DX_SDK_VERSION >= 27 STDMETHOD(SetRawValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT byte_offset, UINT bytes) PURE; #endif }; #undef INTERFACE typedef struct ID3DXEffectCompiler *LPD3DXEFFECTCOMPILER; DEFINE_GUID(IID_ID3DXEffectCompiler, 0x51b8a949, 0x1a31, 0x47e6, 0xbe, 0xa0, 0x4b, 0x30, 0xdb, 0x53, 0xf1, 0xe0); #define INTERFACE ID3DXEffectCompiler DECLARE_INTERFACE_(ID3DXEffectCompiler, ID3DXBaseEffect) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXBaseEffect methods ***/ STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE; STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE; STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE; STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE; STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE; STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE; STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index); STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name); STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE; STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE; STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE; STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE; STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE; STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE; STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE; STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE; STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE; STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE; STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE; STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE; STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE; STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE; STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE; STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE; STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE; STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE; STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE; STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE; STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE; STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE; STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE; STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE; STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE; STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE; STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE; STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE; STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE; STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE; STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE; STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE; STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE; STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE; STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE; STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE; STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE; STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE; /*** ID3DXEffectCompiler methods ***/ STDMETHOD(SetLiteral)(THIS_ D3DXHANDLE parameter, BOOL literal) PURE; STDMETHOD(GetLiteral)(THIS_ D3DXHANDLE parameter, BOOL* literal) PURE; STDMETHOD(CompileEffect)(THIS_ DWORD flags, ID3DXBuffer **effect, ID3DXBuffer **error_msgs) PURE; STDMETHOD(CompileShader)(THIS_ D3DXHANDLE function, const char *target, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_msgs, ID3DXConstantTable **constant_table) PURE; }; #undef INTERFACE #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3DXCreateEffectPool(ID3DXEffectPool **pool); HRESULT WINAPI D3DXCreateEffect(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); HRESULT WINAPI D3DXCreateEffectEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen, const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); HRESULT WINAPI D3DXCreateEffectCompiler(const char *srcdata, UINT srcdatalen, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **compiler, ID3DXBuffer **parse_errors); HRESULT WINAPI D3DXCreateEffectFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile, const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); HRESULT WINAPI D3DXCreateEffectFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); #define D3DXCreateEffectFromFileEx WINELIB_NAME_AW(D3DXCreateEffectFromFileEx) HRESULT WINAPI D3DXCreateEffectFromFileA(struct IDirect3DDevice9 *device, const char *srcfile, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); HRESULT WINAPI D3DXCreateEffectFromFileW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); #define D3DXCreateEffectFromFile WINELIB_NAME_AW(D3DXCreateEffectFromFile) HRESULT WINAPI D3DXCreateEffectFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); HRESULT WINAPI D3DXCreateEffectFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); #define D3DXCreateEffectFromResourceEx WINELIB_NAME_AW(D3DXCreateEffectFromResourceEx) HRESULT WINAPI D3DXCreateEffectFromResourceA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); HRESULT WINAPI D3DXCreateEffectFromResourceW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags, struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors); #define D3DXCreateEffectFromResource WINELIB_NAME_AW(D3DXCreateEffectFromResource) HRESULT WINAPI D3DXCreateEffectCompilerFromFileA(const char *srcfile, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors); HRESULT WINAPI D3DXCreateEffectCompilerFromFileW(const WCHAR *srcfile, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors); #define D3DXCreateEffectCompilerFromFile WINELIB_NAME_AW(D3DXCreateEffectCompilerFromFile) HRESULT WINAPI D3DXCreateEffectCompilerFromResourceA(HMODULE srcmodule, const char *srcresource, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors); HRESULT WINAPI D3DXCreateEffectCompilerFromResourceW(HMODULE srcmodule, const WCHAR *srcresource, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors); #define D3DXCreateEffectCompilerFromResource WINELIB_NAME_AW(D3DXCreateEffectCompilerFromResource) HRESULT WINAPI D3DXDisassembleEffect(ID3DXEffect *effect, BOOL enable_color_code, ID3DXBuffer **disassembly); #ifdef __cplusplus } #endif #endif /* __D3DX9EFFECT_H__ */ ================================================ FILE: wine/windows/d3dx9math.h ================================================ /* * Copyright (C) 2007 David Adam * Copyright (C) 2007 Tony Wasserka * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx9.h" #ifndef __D3DX9MATH_H__ #define __D3DX9MATH_H__ #include #define D3DX_PI ((FLOAT)3.141592654) #define D3DX_1BYPI ((FLOAT)0.318309886) #define D3DXSH_MINORDER 2 #define D3DXSH_MAXORDER 6 #define D3DXToRadian(degree) ((degree) * (D3DX_PI / 180.0f)) #define D3DXToDegree(radian) ((radian) * (180.0f / D3DX_PI)) typedef struct D3DXVECTOR2 { #ifdef __cplusplus D3DXVECTOR2(); D3DXVECTOR2(const FLOAT *pf); D3DXVECTOR2(FLOAT fx, FLOAT fy); operator FLOAT* (); operator const FLOAT* () const; D3DXVECTOR2& operator += (const D3DXVECTOR2&); D3DXVECTOR2& operator -= (const D3DXVECTOR2&); D3DXVECTOR2& operator *= (FLOAT); D3DXVECTOR2& operator /= (FLOAT); D3DXVECTOR2 operator + () const; D3DXVECTOR2 operator - () const; D3DXVECTOR2 operator + (const D3DXVECTOR2&) const; D3DXVECTOR2 operator - (const D3DXVECTOR2&) const; D3DXVECTOR2 operator * (FLOAT) const; D3DXVECTOR2 operator / (FLOAT) const; friend D3DXVECTOR2 operator * (FLOAT, const D3DXVECTOR2&); BOOL operator == (const D3DXVECTOR2&) const; BOOL operator != (const D3DXVECTOR2&) const; #endif /* __cplusplus */ FLOAT x, y; } D3DXVECTOR2, *LPD3DXVECTOR2; #ifdef __cplusplus typedef struct D3DXVECTOR3 : public D3DVECTOR { D3DXVECTOR3(); D3DXVECTOR3(const FLOAT *pf); D3DXVECTOR3(const D3DVECTOR& v); D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz); operator FLOAT* (); operator const FLOAT* () const; D3DXVECTOR3& operator += (const D3DXVECTOR3&); D3DXVECTOR3& operator -= (const D3DXVECTOR3&); D3DXVECTOR3& operator *= (FLOAT); D3DXVECTOR3& operator /= (FLOAT); D3DXVECTOR3 operator + () const; D3DXVECTOR3 operator - () const; D3DXVECTOR3 operator + (const D3DXVECTOR3&) const; D3DXVECTOR3 operator - (const D3DXVECTOR3&) const; D3DXVECTOR3 operator * (FLOAT) const; D3DXVECTOR3 operator / (FLOAT) const; friend D3DXVECTOR3 operator * (FLOAT, const struct D3DXVECTOR3&); BOOL operator == (const D3DXVECTOR3&) const; BOOL operator != (const D3DXVECTOR3&) const; } D3DXVECTOR3, *LPD3DXVECTOR3; #else /* !__cplusplus */ typedef struct _D3DVECTOR D3DXVECTOR3, *LPD3DXVECTOR3; #endif /* !__cplusplus */ typedef struct D3DXVECTOR4 { #ifdef __cplusplus D3DXVECTOR4(); D3DXVECTOR4(const FLOAT *pf); D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw); operator FLOAT* (); operator const FLOAT* () const; D3DXVECTOR4& operator += (const D3DXVECTOR4&); D3DXVECTOR4& operator -= (const D3DXVECTOR4&); D3DXVECTOR4& operator *= (FLOAT); D3DXVECTOR4& operator /= (FLOAT); D3DXVECTOR4 operator + () const; D3DXVECTOR4 operator - () const; D3DXVECTOR4 operator + (const D3DXVECTOR4&) const; D3DXVECTOR4 operator - (const D3DXVECTOR4&) const; D3DXVECTOR4 operator * (FLOAT) const; D3DXVECTOR4 operator / (FLOAT) const; friend D3DXVECTOR4 operator * (FLOAT, const D3DXVECTOR4&); BOOL operator == (const D3DXVECTOR4&) const; BOOL operator != (const D3DXVECTOR4&) const; #endif /* __cplusplus */ FLOAT x, y, z, w; } D3DXVECTOR4, *LPD3DXVECTOR4; #ifdef __cplusplus typedef struct D3DXMATRIX : public D3DMATRIX { D3DXMATRIX(); D3DXMATRIX(const FLOAT *pf); D3DXMATRIX(const D3DMATRIX& mat); D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14, FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24, FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34, FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44); FLOAT& operator () (UINT row, UINT col); FLOAT operator () (UINT row, UINT col) const; operator FLOAT* (); operator const FLOAT* () const; D3DXMATRIX& operator *= (const D3DXMATRIX&); D3DXMATRIX& operator += (const D3DXMATRIX&); D3DXMATRIX& operator -= (const D3DXMATRIX&); D3DXMATRIX& operator *= (FLOAT); D3DXMATRIX& operator /= (FLOAT); D3DXMATRIX operator + () const; D3DXMATRIX operator - () const; D3DXMATRIX operator * (const D3DXMATRIX&) const; D3DXMATRIX operator + (const D3DXMATRIX&) const; D3DXMATRIX operator - (const D3DXMATRIX&) const; D3DXMATRIX operator * (FLOAT) const; D3DXMATRIX operator / (FLOAT) const; friend D3DXMATRIX operator * (FLOAT, const D3DXMATRIX&); BOOL operator == (const D3DXMATRIX&) const; BOOL operator != (const D3DXMATRIX&) const; } D3DXMATRIX, *LPD3DXMATRIX; #else /* !__cplusplus */ typedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX; #endif /* !__cplusplus */ typedef struct D3DXQUATERNION { #ifdef __cplusplus D3DXQUATERNION(); D3DXQUATERNION(const FLOAT *pf); D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw); operator FLOAT* (); operator const FLOAT* () const; D3DXQUATERNION& operator += (const D3DXQUATERNION&); D3DXQUATERNION& operator -= (const D3DXQUATERNION&); D3DXQUATERNION& operator *= (const D3DXQUATERNION&); D3DXQUATERNION& operator *= (FLOAT); D3DXQUATERNION& operator /= (FLOAT); D3DXQUATERNION operator + () const; D3DXQUATERNION operator - () const; D3DXQUATERNION operator + (const D3DXQUATERNION&) const; D3DXQUATERNION operator - (const D3DXQUATERNION&) const; D3DXQUATERNION operator * (const D3DXQUATERNION&) const; D3DXQUATERNION operator * (FLOAT) const; D3DXQUATERNION operator / (FLOAT) const; friend D3DXQUATERNION operator * (FLOAT, const D3DXQUATERNION&); BOOL operator == (const D3DXQUATERNION&) const; BOOL operator != (const D3DXQUATERNION&) const; #endif /* __cplusplus */ FLOAT x, y, z, w; } D3DXQUATERNION, *LPD3DXQUATERNION; typedef struct D3DXPLANE { #ifdef __cplusplus D3DXPLANE(); D3DXPLANE(const FLOAT *pf); D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd); operator FLOAT* (); operator const FLOAT* () const; D3DXPLANE operator + () const; D3DXPLANE operator - () const; BOOL operator == (const D3DXPLANE&) const; BOOL operator != (const D3DXPLANE&) const; #endif /* __cplusplus */ FLOAT a, b, c, d; } D3DXPLANE, *LPD3DXPLANE; typedef struct D3DXCOLOR { #ifdef __cplusplus D3DXCOLOR(); D3DXCOLOR(DWORD col); D3DXCOLOR(const FLOAT *pf); D3DXCOLOR(const D3DCOLORVALUE& col); D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa); operator DWORD () const; operator FLOAT* (); operator const FLOAT* () const; operator D3DCOLORVALUE* (); operator const D3DCOLORVALUE* () const; operator D3DCOLORVALUE& (); operator const D3DCOLORVALUE& () const; D3DXCOLOR& operator += (const D3DXCOLOR&); D3DXCOLOR& operator -= (const D3DXCOLOR&); D3DXCOLOR& operator *= (FLOAT); D3DXCOLOR& operator /= (FLOAT); D3DXCOLOR operator + () const; D3DXCOLOR operator - () const; D3DXCOLOR operator + (const D3DXCOLOR&) const; D3DXCOLOR operator - (const D3DXCOLOR&) const; D3DXCOLOR operator * (FLOAT) const; D3DXCOLOR operator / (FLOAT) const; friend D3DXCOLOR operator * (FLOAT, const D3DXCOLOR&); BOOL operator == (const D3DXCOLOR&) const; BOOL operator != (const D3DXCOLOR&) const; #endif /* __cplusplus */ FLOAT r, g, b, a; } D3DXCOLOR, *LPD3DXCOLOR; typedef struct D3DXFLOAT16 { #ifdef __cplusplus D3DXFLOAT16(); D3DXFLOAT16(FLOAT f); D3DXFLOAT16(const D3DXFLOAT16 &f); operator FLOAT (); BOOL operator == (const D3DXFLOAT16 &) const; BOOL operator != (const D3DXFLOAT16 &) const; #endif /* __cplusplus */ WORD value; } D3DXFLOAT16, *LPD3DXFLOAT16; #ifdef __cplusplus extern "C" { #endif D3DXCOLOR* WINAPI D3DXColorAdjustContrast(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s); D3DXCOLOR* WINAPI D3DXColorAdjustSaturation(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s); FLOAT WINAPI D3DXFresnelTerm(FLOAT costheta, FLOAT refractionindex); D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation(D3DXMATRIX *pout, FLOAT scaling, const D3DXVECTOR3 *rotationcenter, const D3DXQUATERNION *rotation, const D3DXVECTOR3 *translation); D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *pout, FLOAT scaling, const D3DXVECTOR2 *protationcenter, FLOAT rotation, const D3DXVECTOR2 *ptranslation); HRESULT WINAPI D3DXMatrixDecompose(D3DXVECTOR3 *poutscale, D3DXQUATERNION *poutrotation, D3DXVECTOR3 *pouttranslation, const D3DXMATRIX *pm); FLOAT WINAPI D3DXMatrixDeterminant(const D3DXMATRIX *pm); D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, const D3DXMATRIX *pm); D3DXMATRIX* WINAPI D3DXMatrixLookAtLH(D3DXMATRIX *pout, const D3DXVECTOR3 *peye, const D3DXVECTOR3 *pat, const D3DXVECTOR3 *pup); D3DXMATRIX* WINAPI D3DXMatrixLookAtRH(D3DXMATRIX *pout, const D3DXVECTOR3 *peye, const D3DXVECTOR3 *pat, const D3DXVECTOR3 *pup); D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, const D3DXMATRIX *pm1, const D3DXMATRIX *pm2); D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm1, const D3DXMATRIX *pm2); D3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixOrthoRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf); D3DXMATRIX* WINAPI D3DXMatrixReflect(D3DXMATRIX *pout, const D3DXPLANE *pplane); D3DXMATRIX* WINAPI D3DXMatrixRotationAxis(D3DXMATRIX *pout, const D3DXVECTOR3 *pv, FLOAT angle); D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, const D3DXQUATERNION *pq); D3DXMATRIX* WINAPI D3DXMatrixRotationX(D3DXMATRIX *pout, FLOAT angle); D3DXMATRIX* WINAPI D3DXMatrixRotationY(D3DXMATRIX *pout, FLOAT angle); D3DXMATRIX* WINAPI D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *pout, FLOAT yaw, FLOAT pitch, FLOAT roll); D3DXMATRIX* WINAPI D3DXMatrixRotationZ(D3DXMATRIX *pout, FLOAT angle); D3DXMATRIX* WINAPI D3DXMatrixScaling(D3DXMATRIX *pout, FLOAT sx, FLOAT sy, FLOAT sz); D3DXMATRIX* WINAPI D3DXMatrixShadow(D3DXMATRIX *pout, const D3DXVECTOR4 *plight, const D3DXPLANE *pPlane); D3DXMATRIX* WINAPI D3DXMatrixTransformation(D3DXMATRIX *pout, const D3DXVECTOR3 *pscalingcenter, const D3DXQUATERNION *pscalingrotation, const D3DXVECTOR3 *pscaling, const D3DXVECTOR3 *protationcenter, const D3DXQUATERNION *protation, const D3DXVECTOR3 *ptranslation); D3DXMATRIX* WINAPI D3DXMatrixTransformation2D(D3DXMATRIX *pout, const D3DXVECTOR2 *pscalingcenter, FLOAT scalingrotation, const D3DXVECTOR2 *pscaling, const D3DXVECTOR2 *protationcenter, FLOAT rotation, const D3DXVECTOR2 *ptranslation); D3DXMATRIX* WINAPI D3DXMatrixTranslation(D3DXMATRIX *pout, FLOAT x, FLOAT y, FLOAT z); D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm); D3DXPLANE* WINAPI D3DXPlaneFromPointNormal(D3DXPLANE *pout, const D3DXVECTOR3 *pvpoint, const D3DXVECTOR3 *pvnormal); D3DXPLANE* WINAPI D3DXPlaneFromPoints(D3DXPLANE *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3); D3DXVECTOR3* WINAPI D3DXPlaneIntersectLine(D3DXVECTOR3 *pout, const D3DXPLANE *pp, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2); D3DXPLANE* WINAPI D3DXPlaneNormalize(D3DXPLANE *pout, const D3DXPLANE *pp); D3DXPLANE* WINAPI D3DXPlaneTransform(D3DXPLANE *pout, const D3DXPLANE *pplane, const D3DXMATRIX *pm); D3DXPLANE* WINAPI D3DXPlaneTransformArray(D3DXPLANE *pout, UINT outstride, const D3DXPLANE *pplane, UINT pstride, const D3DXMATRIX *pm, UINT n); D3DXQUATERNION* WINAPI D3DXQuaternionBaryCentric(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3, FLOAT f, FLOAT g); D3DXQUATERNION* WINAPI D3DXQuaternionExp(D3DXQUATERNION *pout, const D3DXQUATERNION *pq); D3DXQUATERNION* WINAPI D3DXQuaternionInverse(D3DXQUATERNION *pout, const D3DXQUATERNION *pq); D3DXQUATERNION* WINAPI D3DXQuaternionLn(D3DXQUATERNION *pout, const D3DXQUATERNION *pq); D3DXQUATERNION* WINAPI D3DXQuaternionMultiply(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2); D3DXQUATERNION* WINAPI D3DXQuaternionNormalize(D3DXQUATERNION *pout, const D3DXQUATERNION *pq); D3DXQUATERNION* WINAPI D3DXQuaternionRotationAxis(D3DXQUATERNION *pout, const D3DXVECTOR3 *pv, FLOAT angle); D3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *pout, const D3DXMATRIX *pm); D3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pout, FLOAT yaw, FLOAT pitch, FLOAT roll); D3DXQUATERNION* WINAPI D3DXQuaternionSlerp(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, FLOAT t); D3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3, const D3DXQUATERNION *pq4, FLOAT t); void WINAPI D3DXQuaternionSquadSetup(D3DXQUATERNION *paout, D3DXQUATERNION *pbout, D3DXQUATERNION *pcout, const D3DXQUATERNION *pq0, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3); void WINAPI D3DXQuaternionToAxisAngle(const D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle); D3DXVECTOR2* WINAPI D3DXVec2BaryCentric(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pv3, FLOAT f, FLOAT g); D3DXVECTOR2* WINAPI D3DXVec2CatmullRom(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv0, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pv3, FLOAT s); D3DXVECTOR2* WINAPI D3DXVec2Hermite(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pt1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pt2, FLOAT s); D3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv); D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm); D3DXVECTOR4* WINAPI D3DXVec2TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n); D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm); D3DXVECTOR2* WINAPI D3DXVec2TransformCoordArray(D3DXVECTOR2 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n); D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm); D3DXVECTOR2* WINAPI D3DXVec2TransformNormalArray(D3DXVECTOR2 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n); D3DXVECTOR3* WINAPI D3DXVec3BaryCentric(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3, FLOAT f, FLOAT g); D3DXVECTOR3* WINAPI D3DXVec3CatmullRom( D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv0, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3, FLOAT s); D3DXVECTOR3* WINAPI D3DXVec3Hermite(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pt1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pt2, FLOAT s); D3DXVECTOR3* WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv); D3DXVECTOR3* WINAPI D3DXVec3Project(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld); D3DXVECTOR3* WINAPI D3DXVec3ProjectArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld, UINT n); D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm); D3DXVECTOR4* WINAPI D3DXVec3TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n); D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm); D3DXVECTOR3* WINAPI D3DXVec3TransformCoordArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n); D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm); D3DXVECTOR3* WINAPI D3DXVec3TransformNormalArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n); D3DXVECTOR3* WINAPI D3DXVec3Unproject(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld); D3DXVECTOR3* WINAPI D3DXVec3UnprojectArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld, UINT n); D3DXVECTOR4* WINAPI D3DXVec4BaryCentric(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3, FLOAT f, FLOAT g); D3DXVECTOR4* WINAPI D3DXVec4CatmullRom(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv0, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3, FLOAT s); D3DXVECTOR4* WINAPI D3DXVec4Cross(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3); D3DXVECTOR4* WINAPI D3DXVec4Hermite(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pt1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pt2, FLOAT s); D3DXVECTOR4* WINAPI D3DXVec4Normalize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv); D3DXVECTOR4* WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, const D3DXMATRIX *pm); D3DXVECTOR4* WINAPI D3DXVec4TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR4 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n); D3DXFLOAT16 *WINAPI D3DXFloat32To16Array(D3DXFLOAT16 *pout, const FLOAT *pin, UINT n); FLOAT *WINAPI D3DXFloat16To32Array(FLOAT *pout, const D3DXFLOAT16 *pin, UINT n); FLOAT* WINAPI D3DXSHAdd(FLOAT *out, UINT order, const FLOAT *a, const FLOAT *b); FLOAT WINAPI D3DXSHDot(UINT order, const FLOAT *a, const FLOAT *b); HRESULT WINAPI D3DXSHEvalConeLight(UINT order, const D3DXVECTOR3 *dir, FLOAT radius, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout); FLOAT* WINAPI D3DXSHEvalDirection(FLOAT *out, UINT order, const D3DXVECTOR3 *dir); HRESULT WINAPI D3DXSHEvalDirectionalLight(UINT order, const D3DXVECTOR3 *dir, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout); HRESULT WINAPI D3DXSHEvalHemisphereLight(UINT order, const D3DXVECTOR3 *dir, D3DXCOLOR top, D3DXCOLOR bottom, FLOAT *rout, FLOAT *gout, FLOAT *bout); HRESULT WINAPI D3DXSHEvalSphericalLight(UINT order, const D3DXVECTOR3 *dir, FLOAT radius, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout); FLOAT* WINAPI D3DXSHMultiply2(FLOAT *out, const FLOAT *a, const FLOAT *b); FLOAT* WINAPI D3DXSHMultiply3(FLOAT *out, const FLOAT *a, const FLOAT *b); FLOAT* WINAPI D3DXSHMultiply4(FLOAT *out, const FLOAT *a, const FLOAT *b); FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, const FLOAT *in); FLOAT* WINAPI D3DXSHRotateZ(FLOAT *out, UINT order, FLOAT angle, const FLOAT *in); FLOAT* WINAPI D3DXSHScale(FLOAT *out, UINT order, const FLOAT *a, const FLOAT scale); #ifdef __cplusplus } #endif typedef interface ID3DXMatrixStack *LPD3DXMATRIXSTACK; DEFINE_GUID(IID_ID3DXMatrixStack, 0xc7885ba7, 0xf990, 0x4fe7, 0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85); #undef INTERFACE #define INTERFACE ID3DXMatrixStack DECLARE_INTERFACE_(ID3DXMatrixStack, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; STDMETHOD(Pop)(THIS) PURE; STDMETHOD(Push)(THIS) PURE; STDMETHOD(LoadIdentity)(THIS) PURE; STDMETHOD(LoadMatrix)(THIS_ const D3DXMATRIX* pM ) PURE; STDMETHOD(MultMatrix)(THIS_ const D3DXMATRIX* pM ) PURE; STDMETHOD(MultMatrixLocal)(THIS_ const D3DXMATRIX* pM ) PURE; STDMETHOD(RotateAxis)(THIS_ const D3DXVECTOR3* pV, FLOAT Angle) PURE; STDMETHOD(RotateAxisLocal)(THIS_ const D3DXVECTOR3* pV, FLOAT Angle) PURE; STDMETHOD(RotateYawPitchRoll)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE; STDMETHOD(RotateYawPitchRollLocal)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE; STDMETHOD(Scale)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE; STDMETHOD(ScaleLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE; STDMETHOD(Translate)(THIS_ FLOAT x, FLOAT y, FLOAT z ) PURE; STDMETHOD(TranslateLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE; STDMETHOD_(D3DXMATRIX*, GetTop)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) #define ID3DXMatrixStack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ID3DXMatrixStack_AddRef(p) (p)->lpVtbl->AddRef(p) #define ID3DXMatrixStack_Release(p) (p)->lpVtbl->Release(p) #define ID3DXMatrixStack_Pop(p) (p)->lpVtbl->Pop(p) #define ID3DXMatrixStack_Push(p) (p)->lpVtbl->Push(p) #define ID3DXMatrixStack_LoadIdentity(p) (p)->lpVtbl->LoadIdentity(p) #define ID3DXMatrixStack_LoadMatrix(p,a) (p)->lpVtbl->LoadMatrix(p,a) #define ID3DXMatrixStack_MultMatrix(p,a) (p)->lpVtbl->MultMatrix(p,a) #define ID3DXMatrixStack_MultMatrixLocal(p,a) (p)->lpVtbl->MultMatrixLocal(p,a) #define ID3DXMatrixStack_RotateAxis(p,a,b) (p)->lpVtbl->RotateAxis(p,a,b) #define ID3DXMatrixStack_RotateAxisLocal(p,a,b) (p)->lpVtbl->RotateAxisLocal(p,a,b) #define ID3DXMatrixStack_RotateYawPitchRoll(p,a,b,c) (p)->lpVtbl->RotateYawPitchRoll(p,a,b,c) #define ID3DXMatrixStack_RotateYawPitchRollLocal(p,a,b,c) (p)->lpVtbl->RotateYawPitchRollLocal(p,a,b,c) #define ID3DXMatrixStack_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c) #define ID3DXMatrixStack_ScaleLocal(p,a,b,c) (p)->lpVtbl->ScaleLocal(p,a,b,c) #define ID3DXMatrixStack_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a,b,c) #define ID3DXMatrixStack_TranslateLocal(p,a,b,c) (p)->lpVtbl->TranslateLocal(p,a,b,c) #define ID3DXMatrixStack_GetTop(p) (p)->lpVtbl->GetTop(p) #endif #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3DXCreateMatrixStack(DWORD flags, ID3DXMatrixStack **stack); #ifdef __cplusplus } #endif #include "d3dx9math.inl" #endif /* __D3DX9MATH_H__ */ ================================================ FILE: wine/windows/d3dx9math.inl ================================================ /* * Copyright (C) 2007 David Adam * Copyright (C) 2007 Tony Wasserka * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __D3DX9MATH_INL__ #define __D3DX9MATH_INL__ /* constructors & operators */ #ifdef __cplusplus inline D3DXVECTOR2::D3DXVECTOR2() { } inline D3DXVECTOR2::D3DXVECTOR2(const FLOAT *pf) { if(!pf) return; x = pf[0]; y = pf[1]; } inline D3DXVECTOR2::D3DXVECTOR2(FLOAT fx, FLOAT fy) { x = fx; y = fy; } inline D3DXVECTOR2::operator FLOAT* () { return (FLOAT*)&x; } inline D3DXVECTOR2::operator const FLOAT* () const { return (const FLOAT*)&x; } inline D3DXVECTOR2& D3DXVECTOR2::operator += (const D3DXVECTOR2& v) { x += v.x; y += v.y; return *this; } inline D3DXVECTOR2& D3DXVECTOR2::operator -= (const D3DXVECTOR2& v) { x -= v.x; y -= v.y; return *this; } inline D3DXVECTOR2& D3DXVECTOR2::operator *= (FLOAT f) { x *= f; y *= f; return *this; } inline D3DXVECTOR2& D3DXVECTOR2::operator /= (FLOAT f) { x /= f; y /= f; return *this; } inline D3DXVECTOR2 D3DXVECTOR2::operator + () const { return *this; } inline D3DXVECTOR2 D3DXVECTOR2::operator - () const { return D3DXVECTOR2(-x, -y); } inline D3DXVECTOR2 D3DXVECTOR2::operator + (const D3DXVECTOR2& v) const { return D3DXVECTOR2(x + v.x, y + v.y); } inline D3DXVECTOR2 D3DXVECTOR2::operator - (const D3DXVECTOR2& v) const { return D3DXVECTOR2(x - v.x, y - v.y); } inline D3DXVECTOR2 D3DXVECTOR2::operator * (FLOAT f) const { return D3DXVECTOR2(x * f, y * f); } inline D3DXVECTOR2 D3DXVECTOR2::operator / (FLOAT f) const { return D3DXVECTOR2(x / f, y / f); } inline D3DXVECTOR2 operator * (FLOAT f, const D3DXVECTOR2& v) { return D3DXVECTOR2(f * v.x, f * v.y); } inline BOOL D3DXVECTOR2::operator == (const D3DXVECTOR2& v) const { return x == v.x && y == v.y; } inline BOOL D3DXVECTOR2::operator != (const D3DXVECTOR2& v) const { return x != v.x || y != v.y; } inline D3DXVECTOR3::D3DXVECTOR3() { } inline D3DXVECTOR3::D3DXVECTOR3(const FLOAT *pf) { if(!pf) return; x = pf[0]; y = pf[1]; z = pf[2]; } inline D3DXVECTOR3::D3DXVECTOR3(const D3DVECTOR& v) { x = v.x; y = v.y; z = v.z; } inline D3DXVECTOR3::D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz) { x = fx; y = fy; z = fz; } inline D3DXVECTOR3::operator FLOAT* () { return (FLOAT*)&x; } inline D3DXVECTOR3::operator const FLOAT* () const { return (const FLOAT*)&x; } inline D3DXVECTOR3& D3DXVECTOR3::operator += (const D3DXVECTOR3& v) { x += v.x; y += v.y; z += v.z; return *this; } inline D3DXVECTOR3& D3DXVECTOR3::operator -= (const D3DXVECTOR3& v) { x -= v.x; y -= v.y; z -= v.z; return *this; } inline D3DXVECTOR3& D3DXVECTOR3::operator *= (FLOAT f) { x *= f; y *= f; z *= f; return *this; } inline D3DXVECTOR3& D3DXVECTOR3::operator /= (FLOAT f) { x /= f; y /= f; z /= f; return *this; } inline D3DXVECTOR3 D3DXVECTOR3::operator + () const { return *this; } inline D3DXVECTOR3 D3DXVECTOR3::operator - () const { return D3DXVECTOR3(-x, -y, -z); } inline D3DXVECTOR3 D3DXVECTOR3::operator + (const D3DXVECTOR3& v) const { return D3DXVECTOR3(x + v.x, y + v.y, z + v.z); } inline D3DXVECTOR3 D3DXVECTOR3::operator - (const D3DXVECTOR3& v) const { return D3DXVECTOR3(x - v.x, y - v.y, z - v.z); } inline D3DXVECTOR3 D3DXVECTOR3::operator * (FLOAT f) const { return D3DXVECTOR3(x * f, y * f, z * f); } inline D3DXVECTOR3 D3DXVECTOR3::operator / (FLOAT f) const { return D3DXVECTOR3(x / f, y / f, z / f); } inline D3DXVECTOR3 operator * (FLOAT f, const D3DXVECTOR3& v) { return D3DXVECTOR3(f * v.x, f * v.y, f * v.z); } inline BOOL D3DXVECTOR3::operator == (const D3DXVECTOR3& v) const { return x == v.x && y == v.y && z == v.z; } inline BOOL D3DXVECTOR3::operator != (const D3DXVECTOR3& v) const { return x != v.x || y != v.y || z != v.z; } inline D3DXVECTOR4::D3DXVECTOR4() { } inline D3DXVECTOR4::D3DXVECTOR4(const FLOAT *pf) { if(!pf) return; x = pf[0]; y = pf[1]; z = pf[2]; w = pf[3]; } inline D3DXVECTOR4::D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw) { x = fx; y = fy; z = fz; w = fw; } inline D3DXVECTOR4::operator FLOAT* () { return (FLOAT*)&x; } inline D3DXVECTOR4::operator const FLOAT* () const { return (const FLOAT*)&x; } inline D3DXVECTOR4& D3DXVECTOR4::operator += (const D3DXVECTOR4& v) { x += v.x; y += v.y; z += v.z; w += v.w; return *this; } inline D3DXVECTOR4& D3DXVECTOR4::operator -= (const D3DXVECTOR4& v) { x -= v.x; y -= v.y; z -= v.z; w -= v.w; return *this; } inline D3DXVECTOR4& D3DXVECTOR4::operator *= (FLOAT f) { x *= f; y *= f; z *= f; w *= f; return *this; } inline D3DXVECTOR4& D3DXVECTOR4::operator /= (FLOAT f) { x /= f; y /= f; z /= f; w /= f; return *this; } inline D3DXVECTOR4 D3DXVECTOR4::operator + () const { return *this; } inline D3DXVECTOR4 D3DXVECTOR4::operator - () const { return D3DXVECTOR4(-x, -y, -z, -w); } inline D3DXVECTOR4 D3DXVECTOR4::operator + (const D3DXVECTOR4& v) const { return D3DXVECTOR4(x + v.x, y + v.y, z + v.z, w + v.w); } inline D3DXVECTOR4 D3DXVECTOR4::operator - (const D3DXVECTOR4& v) const { return D3DXVECTOR4(x - v.x, y - v.y, z - v.z, w - v.w); } inline D3DXVECTOR4 D3DXVECTOR4::operator * (FLOAT f) const { return D3DXVECTOR4(x * f, y * f, z * f, w * f); } inline D3DXVECTOR4 D3DXVECTOR4::operator / (FLOAT f) const { return D3DXVECTOR4(x / f, y / f, z / f, w / f); } inline D3DXVECTOR4 operator * (FLOAT f, const D3DXVECTOR4& v) { return D3DXVECTOR4(f * v.x, f * v.y, f * v.z, f * v.w); } inline BOOL D3DXVECTOR4::operator == (const D3DXVECTOR4& v) const { return x == v.x && y == v.y && z == v.z && w == v.w; } inline BOOL D3DXVECTOR4::operator != (const D3DXVECTOR4& v) const { return x != v.x || y != v.y || z != v.z || w != v.w; } inline D3DXMATRIX::D3DXMATRIX() { } inline D3DXMATRIX::D3DXMATRIX(const FLOAT *pf) { if(!pf) return; memcpy(&_11, pf, sizeof(D3DXMATRIX)); } inline D3DXMATRIX::D3DXMATRIX(const D3DMATRIX& mat) { memcpy(&_11, &mat, sizeof(D3DXMATRIX)); } inline D3DXMATRIX::D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14, FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24, FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34, FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44) { _11 = f11; _12 = f12; _13 = f13; _14 = f14; _21 = f21; _22 = f22; _23 = f23; _24 = f24; _31 = f31; _32 = f32; _33 = f33; _34 = f34; _41 = f41; _42 = f42; _43 = f43; _44 = f44; } inline FLOAT& D3DXMATRIX::operator () (UINT row, UINT col) { return m[row][col]; } inline FLOAT D3DXMATRIX::operator () (UINT row, UINT col) const { return m[row][col]; } inline D3DXMATRIX::operator FLOAT* () { return (FLOAT*)&_11; } inline D3DXMATRIX::operator const FLOAT* () const { return (const FLOAT*)&_11; } inline D3DXMATRIX& D3DXMATRIX::operator *= (const D3DXMATRIX& mat) { D3DXMatrixMultiply(this, this, &mat); return *this; } inline D3DXMATRIX& D3DXMATRIX::operator += (const D3DXMATRIX& mat) { _11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14; _21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24; _31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34; _41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44; return *this; } inline D3DXMATRIX& D3DXMATRIX::operator -= (const D3DXMATRIX& mat) { _11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14; _21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24; _31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34; _41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44; return *this; } inline D3DXMATRIX& D3DXMATRIX::operator *= (FLOAT f) { _11 *= f; _12 *= f; _13 *= f; _14 *= f; _21 *= f; _22 *= f; _23 *= f; _24 *= f; _31 *= f; _32 *= f; _33 *= f; _34 *= f; _41 *= f; _42 *= f; _43 *= f; _44 *= f; return *this; } inline D3DXMATRIX& D3DXMATRIX::operator /= (FLOAT f) { FLOAT inv = 1.0f / f; _11 *= inv; _12 *= inv; _13 *= inv; _14 *= inv; _21 *= inv; _22 *= inv; _23 *= inv; _24 *= inv; _31 *= inv; _32 *= inv; _33 *= inv; _34 *= inv; _41 *= inv; _42 *= inv; _43 *= inv; _44 *= inv; return *this; } inline D3DXMATRIX D3DXMATRIX::operator + () const { return *this; } inline D3DXMATRIX D3DXMATRIX::operator - () const { return D3DXMATRIX(-_11, -_12, -_13, -_14, -_21, -_22, -_23, -_24, -_31, -_32, -_33, -_34, -_41, -_42, -_43, -_44); } inline D3DXMATRIX D3DXMATRIX::operator * (const D3DXMATRIX& mat) const { D3DXMATRIX buf; D3DXMatrixMultiply(&buf, this, &mat); return buf; } inline D3DXMATRIX D3DXMATRIX::operator + (const D3DXMATRIX& mat) const { return D3DXMATRIX(_11 + mat._11, _12 + mat._12, _13 + mat._13, _14 + mat._14, _21 + mat._21, _22 + mat._22, _23 + mat._23, _24 + mat._24, _31 + mat._31, _32 + mat._32, _33 + mat._33, _34 + mat._34, _41 + mat._41, _42 + mat._42, _43 + mat._43, _44 + mat._44); } inline D3DXMATRIX D3DXMATRIX::operator - (const D3DXMATRIX& mat) const { return D3DXMATRIX(_11 - mat._11, _12 - mat._12, _13 - mat._13, _14 - mat._14, _21 - mat._21, _22 - mat._22, _23 - mat._23, _24 - mat._24, _31 - mat._31, _32 - mat._32, _33 - mat._33, _34 - mat._34, _41 - mat._41, _42 - mat._42, _43 - mat._43, _44 - mat._44); } inline D3DXMATRIX D3DXMATRIX::operator * (FLOAT f) const { return D3DXMATRIX(_11 * f, _12 * f, _13 * f, _14 * f, _21 * f, _22 * f, _23 * f, _24 * f, _31 * f, _32 * f, _33 * f, _34 * f, _41 * f, _42 * f, _43 * f, _44 * f); } inline D3DXMATRIX D3DXMATRIX::operator / (FLOAT f) const { FLOAT inv = 1.0f / f; return D3DXMATRIX(_11 * inv, _12 * inv, _13 * inv, _14 * inv, _21 * inv, _22 * inv, _23 * inv, _24 * inv, _31 * inv, _32 * inv, _33 * inv, _34 * inv, _41 * inv, _42 * inv, _43 * inv, _44 * inv); } inline D3DXMATRIX operator * (FLOAT f, const D3DXMATRIX& mat) { return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14, f * mat._21, f * mat._22, f * mat._23, f * mat._24, f * mat._31, f * mat._32, f * mat._33, f * mat._34, f * mat._41, f * mat._42, f * mat._43, f * mat._44); } inline BOOL D3DXMATRIX::operator == (const D3DXMATRIX& mat) const { return (memcmp(this, &mat, sizeof(D3DXMATRIX)) == 0); } inline BOOL D3DXMATRIX::operator != (const D3DXMATRIX& mat) const { return (memcmp(this, &mat, sizeof(D3DXMATRIX)) != 0); } inline D3DXQUATERNION::D3DXQUATERNION() { } inline D3DXQUATERNION::D3DXQUATERNION(const FLOAT *pf) { if(!pf) return; x = pf[0]; y = pf[1]; z = pf[2]; w = pf[3]; } inline D3DXQUATERNION::D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw) { x = fx; y = fy; z = fz; w = fw; } inline D3DXQUATERNION::operator FLOAT* () { return (FLOAT*)&x; } inline D3DXQUATERNION::operator const FLOAT* () const { return (const FLOAT*)&x; } inline D3DXQUATERNION& D3DXQUATERNION::operator += (const D3DXQUATERNION& quat) { x += quat.x; y += quat.y; z += quat.z; w += quat.w; return *this; } inline D3DXQUATERNION& D3DXQUATERNION::operator -= (const D3DXQUATERNION& quat) { x -= quat.x; y -= quat.y; z -= quat.z; w -= quat.w; return *this; } inline D3DXQUATERNION& D3DXQUATERNION::operator *= (const D3DXQUATERNION& quat) { D3DXQuaternionMultiply(this, this, &quat); return *this; } inline D3DXQUATERNION& D3DXQUATERNION::operator *= (FLOAT f) { x *= f; y *= f; z *= f; w *= f; return *this; } inline D3DXQUATERNION& D3DXQUATERNION::operator /= (FLOAT f) { FLOAT inv = 1.0f / f; x *= inv; y *= inv; z *= inv; w *= inv; return *this; } inline D3DXQUATERNION D3DXQUATERNION::operator + () const { return *this; } inline D3DXQUATERNION D3DXQUATERNION::operator - () const { return D3DXQUATERNION(-x, -y, -z, -w); } inline D3DXQUATERNION D3DXQUATERNION::operator + (const D3DXQUATERNION& quat) const { return D3DXQUATERNION(x + quat.x, y + quat.y, z + quat.z, w + quat.w); } inline D3DXQUATERNION D3DXQUATERNION::operator - (const D3DXQUATERNION& quat) const { return D3DXQUATERNION(x - quat.x, y - quat.y, z - quat.z, w - quat.w); } inline D3DXQUATERNION D3DXQUATERNION::operator * (const D3DXQUATERNION& quat) const { D3DXQUATERNION buf; D3DXQuaternionMultiply(&buf, this, &quat); return buf; } inline D3DXQUATERNION D3DXQUATERNION::operator * (FLOAT f) const { return D3DXQUATERNION(x * f, y * f, z * f, w * f); } inline D3DXQUATERNION D3DXQUATERNION::operator / (FLOAT f) const { FLOAT inv = 1.0f / f; return D3DXQUATERNION(x * inv, y * inv, z * inv, w * inv); } inline D3DXQUATERNION operator * (FLOAT f, const D3DXQUATERNION& quat) { return D3DXQUATERNION(f * quat.x, f * quat.y, f * quat.z, f * quat.w); } inline BOOL D3DXQUATERNION::operator == (const D3DXQUATERNION& quat) const { return x == quat.x && y == quat.y && z == quat.z && w == quat.w; } inline BOOL D3DXQUATERNION::operator != (const D3DXQUATERNION& quat) const { return x != quat.x || y != quat.y || z != quat.z || w != quat.w; } inline D3DXPLANE::D3DXPLANE() { } inline D3DXPLANE::D3DXPLANE(const FLOAT *pf) { if(!pf) return; a = pf[0]; b = pf[1]; c = pf[2]; d = pf[3]; } inline D3DXPLANE::D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd) { a = fa; b = fb; c = fc; d = fd; } inline D3DXPLANE::operator FLOAT* () { return (FLOAT*)&a; } inline D3DXPLANE::operator const FLOAT* () const { return (const FLOAT*)&a; } inline D3DXPLANE D3DXPLANE::operator + () const { return *this; } inline D3DXPLANE D3DXPLANE::operator - () const { return D3DXPLANE(-a, -b, -c, -d); } inline BOOL D3DXPLANE::operator == (const D3DXPLANE& pl) const { return a == pl.a && b == pl.b && c == pl.c && d == pl.d; } inline BOOL D3DXPLANE::operator != (const D3DXPLANE& pl) const { return a != pl.a || b != pl.b || c != pl.c || d != pl.d; } inline D3DXCOLOR::D3DXCOLOR() { } inline D3DXCOLOR::D3DXCOLOR(DWORD col) { const FLOAT f = 1.0f / 255.0f; r = f * (FLOAT)(unsigned char)(col >> 16); g = f * (FLOAT)(unsigned char)(col >> 8); b = f * (FLOAT)(unsigned char)col; a = f * (FLOAT)(unsigned char)(col >> 24); } inline D3DXCOLOR::D3DXCOLOR(const FLOAT *pf) { if(!pf) return; r = pf[0]; g = pf[1]; b = pf[2]; a = pf[3]; } inline D3DXCOLOR::D3DXCOLOR(const D3DCOLORVALUE& col) { r = col.r; g = col.g; b = col.b; a = col.a; } inline D3DXCOLOR::D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa) { r = fr; g = fg; b = fb; a = fa; } inline D3DXCOLOR::operator DWORD () const { DWORD _r = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD)(r * 255.0f + 0.5f); DWORD _g = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD)(g * 255.0f + 0.5f); DWORD _b = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD)(b * 255.0f + 0.5f); DWORD _a = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD)(a * 255.0f + 0.5f); return (_a << 24) | (_r << 16) | (_g << 8) | _b; } inline D3DXCOLOR::operator FLOAT * () { return (FLOAT*)&r; } inline D3DXCOLOR::operator const FLOAT * () const { return (const FLOAT*)&r; } inline D3DXCOLOR::operator D3DCOLORVALUE * () { return (D3DCOLORVALUE*)&r; } inline D3DXCOLOR::operator const D3DCOLORVALUE * () const { return (const D3DCOLORVALUE*)&r; } inline D3DXCOLOR::operator D3DCOLORVALUE& () { return *((D3DCOLORVALUE*)&r); } inline D3DXCOLOR::operator const D3DCOLORVALUE& () const { return *((const D3DCOLORVALUE*)&r); } inline D3DXCOLOR& D3DXCOLOR::operator += (const D3DXCOLOR& col) { r += col.r; g += col.g; b += col.b; a += col.a; return *this; } inline D3DXCOLOR& D3DXCOLOR::operator -= (const D3DXCOLOR& col) { r -= col.r; g -= col.g; b -= col.b; a -= col.a; return *this; } inline D3DXCOLOR& D3DXCOLOR::operator *= (FLOAT f) { r *= f; g *= f; b *= f; a *= f; return *this; } inline D3DXCOLOR& D3DXCOLOR::operator /= (FLOAT f) { FLOAT inv = 1.0f / f; r *= inv; g *= inv; b *= inv; a *= inv; return *this; } inline D3DXCOLOR D3DXCOLOR::operator + () const { return *this; } inline D3DXCOLOR D3DXCOLOR::operator - () const { return D3DXCOLOR(-r, -g, -b, -a); } inline D3DXCOLOR D3DXCOLOR::operator + (const D3DXCOLOR& col) const { return D3DXCOLOR(r + col.r, g + col.g, b + col.b, a + col.a); } inline D3DXCOLOR D3DXCOLOR::operator - (const D3DXCOLOR& col) const { return D3DXCOLOR(r - col.r, g - col.g, b - col.b, a - col.a); } inline D3DXCOLOR D3DXCOLOR::operator * (FLOAT f) const { return D3DXCOLOR(r * f, g * f, b * f, a * f); } inline D3DXCOLOR D3DXCOLOR::operator / (FLOAT f) const { FLOAT inv = 1.0f / f; return D3DXCOLOR(r * inv, g * inv, b * inv, a * inv); } inline D3DXCOLOR operator * (FLOAT f, const D3DXCOLOR& col) { return D3DXCOLOR(f * col.r, f * col.g, f * col.b, f * col.a); } inline BOOL D3DXCOLOR::operator == (const D3DXCOLOR& col) const { return r == col.r && g == col.g && b == col.b && a == col.a; } inline BOOL D3DXCOLOR::operator != (const D3DXCOLOR& col) const { return r != col.r || g != col.g || b != col.b || a != col.a; } inline D3DXFLOAT16::D3DXFLOAT16() { } inline D3DXFLOAT16::D3DXFLOAT16(FLOAT f) { D3DXFloat32To16Array(this, &f, 1); } inline D3DXFLOAT16::D3DXFLOAT16(const D3DXFLOAT16 &f) { value = f.value; } inline D3DXFLOAT16::operator FLOAT () { FLOAT f; D3DXFloat16To32Array(&f, this, 1); return f; } inline BOOL D3DXFLOAT16::operator == (const D3DXFLOAT16 &f) const { return value == f.value; } inline BOOL D3DXFLOAT16::operator != (const D3DXFLOAT16 &f) const { return value != f.value; } #endif /* __cplusplus */ /*_______________D3DXCOLOR_____________________*/ static inline D3DXCOLOR* D3DXColorAdd(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2) { if ( !pout || !pc1 || !pc2 ) return NULL; pout->r = (pc1->r) + (pc2->r); pout->g = (pc1->g) + (pc2->g); pout->b = (pc1->b) + (pc2->b); pout->a = (pc1->a) + (pc2->a); return pout; } static inline D3DXCOLOR* D3DXColorLerp(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2, FLOAT s) { if ( !pout || !pc1 || !pc2 ) return NULL; pout->r = (1-s) * (pc1->r) + s *(pc2->r); pout->g = (1-s) * (pc1->g) + s *(pc2->g); pout->b = (1-s) * (pc1->b) + s *(pc2->b); pout->a = (1-s) * (pc1->a) + s *(pc2->a); return pout; } static inline D3DXCOLOR* D3DXColorModulate(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2) { if ( !pout || !pc1 || !pc2 ) return NULL; pout->r = (pc1->r) * (pc2->r); pout->g = (pc1->g) * (pc2->g); pout->b = (pc1->b) * (pc2->b); pout->a = (pc1->a) * (pc2->a); return pout; } static inline D3DXCOLOR* D3DXColorNegative(D3DXCOLOR *pout, const D3DXCOLOR *pc) { if ( !pout || !pc ) return NULL; pout->r = 1.0f - pc->r; pout->g = 1.0f - pc->g; pout->b = 1.0f - pc->b; pout->a = pc->a; return pout; } static inline D3DXCOLOR* D3DXColorScale(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s) { if ( !pout || !pc ) return NULL; pout->r = s* (pc->r); pout->g = s* (pc->g); pout->b = s* (pc->b); pout->a = s* (pc->a); return pout; } static inline D3DXCOLOR* D3DXColorSubtract(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2) { if ( !pout || !pc1 || !pc2 ) return NULL; pout->r = (pc1->r) - (pc2->r); pout->g = (pc1->g) - (pc2->g); pout->b = (pc1->b) - (pc2->b); pout->a = (pc1->a) - (pc2->a); return pout; } /*_______________D3DXVECTOR2________________________*/ static inline D3DXVECTOR2* D3DXVec2Add(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x + pv2->x; pout->y = pv1->y + pv2->y; return pout; } static inline FLOAT D3DXVec2CCW(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2) { if ( !pv1 || !pv2) return 0.0f; return ( (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x) ); } static inline FLOAT D3DXVec2Dot(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2) { if ( !pv1 || !pv2) return 0.0f; return ( (pv1->x * pv2->x + pv1->y * pv2->y) ); } static inline FLOAT D3DXVec2Length(const D3DXVECTOR2 *pv) { if (!pv) return 0.0f; return sqrtf( pv->x * pv->x + pv->y * pv->y ); } static inline FLOAT D3DXVec2LengthSq(const D3DXVECTOR2 *pv) { if (!pv) return 0.0f; return( (pv->x) * (pv->x) + (pv->y) * (pv->y) ); } static inline D3DXVECTOR2* D3DXVec2Lerp(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, FLOAT s) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = (1-s) * (pv1->x) + s * (pv2->x); pout->y = (1-s) * (pv1->y) + s * (pv2->y); return pout; } static inline D3DXVECTOR2* D3DXVec2Maximize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x > pv2->x ? pv1->x : pv2->x; pout->y = pv1->y > pv2->y ? pv1->y : pv2->y; return pout; } static inline D3DXVECTOR2* D3DXVec2Minimize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x < pv2->x ? pv1->x : pv2->x; pout->y = pv1->y < pv2->y ? pv1->y : pv2->y; return pout; } static inline D3DXVECTOR2* D3DXVec2Scale(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, FLOAT s) { if ( !pout || !pv) return NULL; pout->x = s * (pv->x); pout->y = s * (pv->y); return pout; } static inline D3DXVECTOR2* D3DXVec2Subtract(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x - pv2->x; pout->y = pv1->y - pv2->y; return pout; } /*__________________D3DXVECTOR3_______________________*/ static inline D3DXVECTOR3* D3DXVec3Add(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x + pv2->x; pout->y = pv1->y + pv2->y; pout->z = pv1->z + pv2->z; return pout; } static inline D3DXVECTOR3* D3DXVec3Cross(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2) { D3DXVECTOR3 temp; if ( !pout || !pv1 || !pv2) return NULL; temp.x = (pv1->y) * (pv2->z) - (pv1->z) * (pv2->y); temp.y = (pv1->z) * (pv2->x) - (pv1->x) * (pv2->z); temp.z = (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x); *pout = temp; return pout; } static inline FLOAT D3DXVec3Dot(const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2) { if ( !pv1 || !pv2 ) return 0.0f; return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z); } static inline FLOAT D3DXVec3Length(const D3DXVECTOR3 *pv) { if (!pv) return 0.0f; return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z ); } static inline FLOAT D3DXVec3LengthSq(const D3DXVECTOR3 *pv) { if (!pv) return 0.0f; return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z); } static inline D3DXVECTOR3* D3DXVec3Lerp(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, FLOAT s) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = (1-s) * (pv1->x) + s * (pv2->x); pout->y = (1-s) * (pv1->y) + s * (pv2->y); pout->z = (1-s) * (pv1->z) + s * (pv2->z); return pout; } static inline D3DXVECTOR3* D3DXVec3Maximize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x > pv2->x ? pv1->x : pv2->x; pout->y = pv1->y > pv2->y ? pv1->y : pv2->y; pout->z = pv1->z > pv2->z ? pv1->z : pv2->z; return pout; } static inline D3DXVECTOR3* D3DXVec3Minimize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x < pv2->x ? pv1->x : pv2->x; pout->y = pv1->y < pv2->y ? pv1->y : pv2->y; pout->z = pv1->z < pv2->z ? pv1->z : pv2->z; return pout; } static inline D3DXVECTOR3* D3DXVec3Scale(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, FLOAT s) { if ( !pout || !pv) return NULL; pout->x = s * (pv->x); pout->y = s * (pv->y); pout->z = s * (pv->z); return pout; } static inline D3DXVECTOR3* D3DXVec3Subtract(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x - pv2->x; pout->y = pv1->y - pv2->y; pout->z = pv1->z - pv2->z; return pout; } /*__________________D3DXVECTOR4_______________________*/ static inline D3DXVECTOR4* D3DXVec4Add(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x + pv2->x; pout->y = pv1->y + pv2->y; pout->z = pv1->z + pv2->z; pout->w = pv1->w + pv2->w; return pout; } static inline FLOAT D3DXVec4Dot(const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2) { if (!pv1 || !pv2 ) return 0.0f; return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z) + (pv1->w) * (pv2->w); } static inline FLOAT D3DXVec4Length(const D3DXVECTOR4 *pv) { if (!pv) return 0.0f; return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z + pv->w * pv->w ); } static inline FLOAT D3DXVec4LengthSq(const D3DXVECTOR4 *pv) { if (!pv) return 0.0f; return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z) + (pv->w) * (pv->w); } static inline D3DXVECTOR4* D3DXVec4Lerp(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, FLOAT s) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = (1-s) * (pv1->x) + s * (pv2->x); pout->y = (1-s) * (pv1->y) + s * (pv2->y); pout->z = (1-s) * (pv1->z) + s * (pv2->z); pout->w = (1-s) * (pv1->w) + s * (pv2->w); return pout; } static inline D3DXVECTOR4* D3DXVec4Maximize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x > pv2->x ? pv1->x : pv2->x; pout->y = pv1->y > pv2->y ? pv1->y : pv2->y; pout->z = pv1->z > pv2->z ? pv1->z : pv2->z; pout->w = pv1->w > pv2->w ? pv1->w : pv2->w; return pout; } static inline D3DXVECTOR4* D3DXVec4Minimize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x < pv2->x ? pv1->x : pv2->x; pout->y = pv1->y < pv2->y ? pv1->y : pv2->y; pout->z = pv1->z < pv2->z ? pv1->z : pv2->z; pout->w = pv1->w < pv2->w ? pv1->w : pv2->w; return pout; } static inline D3DXVECTOR4* D3DXVec4Scale(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, FLOAT s) { if ( !pout || !pv) return NULL; pout->x = s * (pv->x); pout->y = s * (pv->y); pout->z = s * (pv->z); pout->w = s * (pv->w); return pout; } static inline D3DXVECTOR4* D3DXVec4Subtract(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2) { if ( !pout || !pv1 || !pv2) return NULL; pout->x = pv1->x - pv2->x; pout->y = pv1->y - pv2->y; pout->z = pv1->z - pv2->z; pout->w = pv1->w - pv2->w; return pout; } /*__________________D3DXMatrix____________________*/ #ifdef NONAMELESSUNION # define D3DX_U(x) (x).u #else # define D3DX_U(x) (x) #endif static inline D3DXMATRIX* D3DXMatrixIdentity(D3DXMATRIX *pout) { if ( !pout ) return NULL; D3DX_U(*pout).m[0][1] = 0.0f; D3DX_U(*pout).m[0][2] = 0.0f; D3DX_U(*pout).m[0][3] = 0.0f; D3DX_U(*pout).m[1][0] = 0.0f; D3DX_U(*pout).m[1][2] = 0.0f; D3DX_U(*pout).m[1][3] = 0.0f; D3DX_U(*pout).m[2][0] = 0.0f; D3DX_U(*pout).m[2][1] = 0.0f; D3DX_U(*pout).m[2][3] = 0.0f; D3DX_U(*pout).m[3][0] = 0.0f; D3DX_U(*pout).m[3][1] = 0.0f; D3DX_U(*pout).m[3][2] = 0.0f; D3DX_U(*pout).m[0][0] = 1.0f; D3DX_U(*pout).m[1][1] = 1.0f; D3DX_U(*pout).m[2][2] = 1.0f; D3DX_U(*pout).m[3][3] = 1.0f; return pout; } static inline BOOL D3DXMatrixIsIdentity(D3DXMATRIX *pm) { int i,j; D3DXMATRIX testmatrix; if ( !pm ) return FALSE; D3DXMatrixIdentity(&testmatrix); for (i=0; i<4; i++) { for (j=0; j<4; j++) { if ( D3DX_U(*pm).m[i][j] != D3DX_U(testmatrix).m[i][j] ) return FALSE; } } return TRUE; } #undef D3DX_U /*__________________D3DXPLANE____________________*/ static inline FLOAT D3DXPlaneDot(const D3DXPLANE *pp, const D3DXVECTOR4 *pv) { if ( !pp || !pv ) return 0.0f; return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) * (pv->w) ); } static inline FLOAT D3DXPlaneDotCoord(const D3DXPLANE *pp, const D3DXVECTOR4 *pv) { if ( !pp || !pv ) return 0.0f; return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) ); } static inline FLOAT D3DXPlaneDotNormal(const D3DXPLANE *pp, const D3DXVECTOR4 *pv) { if ( !pp || !pv ) return 0.0f; return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) ); } /*__________________D3DXQUATERNION____________________*/ static inline D3DXQUATERNION* D3DXQuaternionConjugate(D3DXQUATERNION *pout, const D3DXQUATERNION *pq) { if ( !pout || !pq) return NULL; pout->x = -pq->x; pout->y = -pq->y; pout->z = -pq->z; pout->w = pq->w; return pout; } static inline FLOAT D3DXQuaternionDot(const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2) { if ( !pq1 || !pq2 ) return 0.0f; return (pq1->x) * (pq2->x) + (pq1->y) * (pq2->y) + (pq1->z) * (pq2->z) + (pq1->w) * (pq2->w); } static inline D3DXQUATERNION* D3DXQuaternionIdentity(D3DXQUATERNION *pout) { if ( !pout) return NULL; pout->x = 0.0f; pout->y = 0.0f; pout->z = 0.0f; pout->w = 1.0f; return pout; } static inline BOOL D3DXQuaternionIsIdentity(D3DXQUATERNION *pq) { if ( !pq) return FALSE; return ( (pq->x == 0.0f) && (pq->y == 0.0f) && (pq->z == 0.0f) && (pq->w == 1.0f) ); } static inline FLOAT D3DXQuaternionLength(const D3DXQUATERNION *pq) { if (!pq) return 0.0f; return sqrtf( pq->x * pq->x + pq->y * pq->y + pq->z * pq->z + pq->w * pq->w ); } static inline FLOAT D3DXQuaternionLengthSq(const D3DXQUATERNION *pq) { if (!pq) return 0.0f; return (pq->x) * (pq->x) + (pq->y) * (pq->y) + (pq->z) * (pq->z) + (pq->w) * (pq->w); } #endif ================================================ FILE: wine/windows/d3dx9mesh.h ================================================ /* * Copyright (C) 2009 David Adam * Copyright (C) 2010 Tony Wasserka * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx9.h" #ifndef __WINE_D3DX9MESH_H #define __WINE_D3DX9MESH_H DEFINE_GUID(IID_ID3DXBaseMesh, 0x7ed943dd, 0x52e8, 0x40b5, 0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30); DEFINE_GUID(IID_ID3DXMesh, 0x4020e5c2, 0x1403, 0x4929, 0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95); DEFINE_GUID(IID_ID3DXPMesh, 0x8875769a, 0xd579, 0x4088, 0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96); DEFINE_GUID(IID_ID3DXSPMesh, 0x667ea4c7, 0xf1cd, 0x4386, 0xb5, 0x23, 0x7c, 0x02, 0x90, 0xb8, 0x3c, 0xc5); DEFINE_GUID(IID_ID3DXSkinInfo, 0x11eaa540, 0xf9a6, 0x4d49, 0xae, 0x6a, 0xe1, 0x92, 0x21, 0xf7, 0x0c, 0xc4); DEFINE_GUID(IID_ID3DXPatchMesh,0x3ce6cc22, 0xdbf2, 0x44f4, 0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39); DEFINE_GUID(IID_ID3DXPRTBuffer, 0xf1827e47, 0x00a8, 0x49cd, 0x90, 0x8c, 0x9d, 0x11, 0x95, 0x5f, 0x87, 0x28); DEFINE_GUID(IID_ID3DXPRTCompBuffer, 0xa758d465, 0xfe8d, 0x45ad, 0x9c, 0xf0, 0xd0, 0x1e, 0x56, 0x26, 0x6a, 0x07); DEFINE_GUID(IID_ID3DXTextureGutterHelper, 0x838f01ec, 0x9729, 0x4527, 0xaa, 0xdb, 0xdf, 0x70, 0xad, 0xe7, 0xfe, 0xa9); DEFINE_GUID(IID_ID3DXPRTEngine, 0x683a4278, 0xcd5f, 0x4d24, 0x90, 0xad, 0xc4, 0xe1, 0xb6, 0x85, 0x5d, 0x53); #define UNUSED16 (0xffff) #define UNUSED32 (0xffffffff) enum _MAX_FVF_DECL_SIZE { MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1 }; enum _D3DXMESH { D3DXMESH_32BIT = 0x001, D3DXMESH_DONOTCLIP = 0x002, D3DXMESH_POINTS = 0x004, D3DXMESH_RTPATCHES = 0x008, D3DXMESH_NPATCHES = 0x4000, D3DXMESH_VB_SYSTEMMEM = 0x010, D3DXMESH_VB_MANAGED = 0x020, D3DXMESH_VB_WRITEONLY = 0x040, D3DXMESH_VB_DYNAMIC = 0x080, D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000, D3DXMESH_IB_SYSTEMMEM = 0x100, D3DXMESH_IB_MANAGED = 0x200, D3DXMESH_IB_WRITEONLY = 0x400, D3DXMESH_IB_DYNAMIC = 0x800, D3DXMESH_IB_SOFTWAREPROCESSING = 0x10000, D3DXMESH_VB_SHARE = 0x1000, D3DXMESH_USEHWONLY = 0x2000, D3DXMESH_SYSTEMMEM = 0x110, D3DXMESH_MANAGED = 0x220, D3DXMESH_WRITEONLY = 0x440, D3DXMESH_DYNAMIC = 0x880, D3DXMESH_SOFTWAREPROCESSING = 0x18000 }; enum _D3DXMESHOPT { D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000, D3DXMESHOPT_COMPACT = 0x01000000, D3DXMESHOPT_ATTRSORT = 0x02000000, D3DXMESHOPT_VERTEXCACHE = 0x04000000, D3DXMESHOPT_STRIPREORDER = 0x08000000, D3DXMESHOPT_IGNOREVERTS = 0x10000000, D3DXMESHOPT_DONOTSPLIT = 0x20000000, }; typedef enum _D3DXPATCHMESHTYPE { D3DXPATCHMESH_RECT = 1, D3DXPATCHMESH_TRI = 2, D3DXPATCHMESH_NPATCH = 3, D3DXPATCHMESH_FORCE_DWORD = 0x7fffffff, } D3DXPATCHMESHTYPE; enum _D3DXPATCHMESH { D3DXPATCHMESH_DEFAULT = 0, }; enum _D3DXMESHSIMP { D3DXMESHSIMP_VERTEX = 0x1, D3DXMESHSIMP_FACE = 0x2, }; typedef enum D3DXCLEANTYPE { D3DXCLEAN_BACKFACING = 0x00000001, D3DXCLEAN_BOWTIES = 0x00000002, D3DXCLEAN_SKINNING = D3DXCLEAN_BACKFACING, D3DXCLEAN_OPTIMIZATION = D3DXCLEAN_BACKFACING, D3DXCLEAN_SIMPLIFICATION = D3DXCLEAN_BACKFACING | D3DXCLEAN_BOWTIES, } D3DXCLEANTYPE; typedef enum _D3DXTANGENT { D3DXTANGENT_WRAP_U = 0x0001, D3DXTANGENT_WRAP_V = 0x0002, D3DXTANGENT_WRAP_UV = 0x0003, D3DXTANGENT_DONT_NORMALIZE_PARTIALS = 0x0004, D3DXTANGENT_DONT_ORTHOGONALIZE = 0x0008, D3DXTANGENT_ORTHOGONALIZE_FROM_V = 0x0010, D3DXTANGENT_ORTHOGONALIZE_FROM_U = 0x0020, D3DXTANGENT_WEIGHT_BY_AREA = 0x0040, D3DXTANGENT_WEIGHT_EQUAL = 0x0080, D3DXTANGENT_WIND_CW = 0x0100, D3DXTANGENT_CALCULATE_NORMALS = 0x0200, D3DXTANGENT_GENERATE_IN_PLACE = 0x0400, } D3DXTANGENT; typedef enum _D3DXIMT { D3DXIMT_WRAP_U = 0x01, D3DXIMT_WRAP_V = 0x02, D3DXIMT_WRAP_UV = 0x03, } D3DXIMT; typedef enum _D3DXUVATLAS { D3DXUVATLAS_DEFAULT = 0x00, D3DXUVATLAS_GEODESIC_FAST = 0x01, D3DXUVATLAS_GEODESIC_QUALITY = 0x02, } D3DXUVATLAS; typedef enum _D3DXEFFECTDEFAULTTYPE { D3DXEDT_STRING = 1, D3DXEDT_FLOATS = 2, D3DXEDT_DWORD = 3, D3DXEDT_FORCEDWORD = 0x7fffffff, } D3DXEFFECTDEFAULTTYPE; enum _D3DXWELDEPSILONSFLAGS { D3DXWELDEPSILONS_WELDALL = 0x1, D3DXWELDEPSILONS_WELDPARTIALMATCHES = 0x2, D3DXWELDEPSILONS_DONOTREMOVEVERTICES = 0x4, D3DXWELDEPSILONS_DONOTSPLIT = 0x8, }; typedef enum _D3DXSHCOMPRESSQUALITYTYPE { D3DXSHCQUAL_FASTLOWQUALITY = 1, D3DXSHCQUAL_SLOWHIGHQUALITY = 2, D3DXSHCQUAL_FORCE_DWORD = 0x7fffffff, } D3DXSHCOMPRESSQUALITYTYPE; typedef enum _D3DXSHGPUSIMOPT { D3DXSHGPUSIMOPT_SHADOWRES256 = 1, D3DXSHGPUSIMOPT_SHADOWRES512 = 0, D3DXSHGPUSIMOPT_SHADOWRES1024 = 2, D3DXSHGPUSIMOPT_SHADOWRES2048 = 3, D3DXSHGPUSIMOPT_HIGHQUALITY = 4, D3DXSHGPUSIMOPT_FORCE_DWORD = 0x7fffffff, } D3DXSHGPUSIMOPT; typedef struct ID3DXBaseMesh* LPD3DXBASEMESH; typedef struct ID3DXMesh* LPD3DXMESH; typedef struct ID3DXPMesh *LPD3DXPMESH; typedef struct ID3DXSPMesh *LPD3DXSPMESH; typedef struct ID3DXSkinInfo *LPD3DXSKININFO; typedef struct ID3DXPatchMesh *LPD3DXPATCHMESH; typedef struct ID3DXPRTBuffer *LPD3DXPRTBUFFER; typedef struct ID3DXPRTCompBuffer *LPD3DXPRTCOMPBUFFER; typedef struct ID3DXPRTEngine *LPD3DXPRTENGINE; typedef struct ID3DXTextureGutterHelper *LPD3DXTEXTUREGUTTERHELPER; typedef struct _D3DXATTRIBUTERANGE { DWORD AttribId; DWORD FaceStart; DWORD FaceCount; DWORD VertexStart; DWORD VertexCount; } D3DXATTRIBUTERANGE; typedef D3DXATTRIBUTERANGE* LPD3DXATTRIBUTERANGE; typedef struct _D3DXMATERIAL { D3DMATERIAL9 MatD3D; char *pTextureFilename; } D3DXMATERIAL, *LPD3DXMATERIAL; typedef struct _D3DXEFFECTDEFAULT { char *pParamName; D3DXEFFECTDEFAULTTYPE Type; DWORD NumBytes; void *pValue; } D3DXEFFECTDEFAULT, *LPD3DXEFFECTDEFAULT; typedef struct _D3DXEFFECTINSTANCE { char *pEffectFilename; DWORD NumDefaults; LPD3DXEFFECTDEFAULT pDefaults; } D3DXEFFECTINSTANCE, *LPD3DXEFFECTINSTANCE; typedef struct _D3DXATTRIBUTEWEIGHTS { FLOAT Position; FLOAT Boundary; FLOAT Normal; FLOAT Diffuse; FLOAT Specular; FLOAT Texcoords[8]; FLOAT Tangent; FLOAT Binormal; } D3DXATTRIBUTEWEIGHTS, *LPD3DXATTRIBUTEWEIGHTS; typedef struct _D3DXWELDEPSILONS { FLOAT Position; FLOAT BlendWeights; FLOAT Normals; FLOAT PSize; FLOAT Specular; FLOAT Diffuse; FLOAT Texcoords[8]; FLOAT Tangent; FLOAT Binormal; FLOAT TessFactor; } D3DXWELDEPSILONS, *LPD3DXWELDEPSILONS; typedef struct _D3DXBONECOMBINATION { DWORD AttribId; DWORD FaceStart; DWORD FaceCount; DWORD VertexStart; DWORD VertexCout; DWORD *BoneId; } D3DXBONECOMBINATION, *LPD3DXBONECOMBINATION; typedef struct _D3DXPATCHINFO { D3DXPATCHMESHTYPE PatchType; D3DDEGREETYPE Degree; D3DBASISTYPE Basis; } D3DXPATCHINFO, *LPD3DXPATCHINFO; typedef struct _D3DXINTERSECTINFO { DWORD FaceIndex; FLOAT U; FLOAT V; FLOAT Dist; } D3DXINTERSECTINFO, *LPD3DXINTERSECTINFO; typedef struct _D3DXSHMATERIAL { D3DCOLORVALUE Diffuse; BOOL bMirror; BOOL bSubSurf; FLOAT RelativeIndexOfRefraction; D3DCOLORVALUE Absorption; D3DCOLORVALUE ReducedScattering; } D3DXSHMATERIAL; typedef struct _D3DXSHPRTSPLITMESHVERTDATA { UINT uVertRemap; UINT uSubCluster; UCHAR ucVertStatus; } D3DXSHPRTSPLITMESHVERTDATA; typedef struct _D3DXSHPRTSPLITMESHCLUSTERDATA { UINT uVertStart; UINT uVertLength; UINT uFaceStart; UINT uFaceLength; UINT uClusterStart; UINT uClusterLength; } D3DXSHPRTSPLITMESHCLUSTERDATA; typedef struct _XFILECOMPRESSEDANIMATIONSET { DWORD CompressedBlockSize; FLOAT TicksPerSec; DWORD PlaybackType; DWORD BufferLength; } XFILECOMPRESSEDANIMATIONSET; typedef HRESULT (WINAPI *LPD3DXUVATLASCB)(float complete, void *ctx); typedef HRESULT (WINAPI *LPD3DXIMTSIGNALCALLBACK)(const D3DXVECTOR2 *, UINT, UINT, void *, FLOAT *); typedef HRESULT (WINAPI *LPD3DXSHPRTSIMCB)(float complete, void *ctx); #undef INTERFACE #define INTERFACE ID3DXBaseMesh DECLARE_INTERFACE_(ID3DXBaseMesh, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXBaseMesh ***/ STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE; STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE; STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; STDMETHOD_(DWORD, GetFVF)(THIS) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE; STDMETHOD_(DWORD, GetOptions)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE; STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE; STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE; STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE; STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE; STDMETHOD(UnlockVertexBuffer)(THIS) PURE; STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE; STDMETHOD(UnlockIndexBuffer)(THIS) PURE; STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE; STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE; STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE; STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE; STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; }; #undef INTERFACE #define INTERFACE ID3DXMesh DECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXBaseMesh ***/ STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE; STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE; STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; STDMETHOD_(DWORD, GetFVF)(THIS) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE; STDMETHOD_(DWORD, GetOptions)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE; STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE; STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE; STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE; STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE; STDMETHOD(UnlockVertexBuffer)(THIS) PURE; STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE; STDMETHOD(UnlockIndexBuffer)(THIS) PURE; STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE; STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE; STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE; STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE; STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; /*** ID3DXMesh ***/ STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE; STDMETHOD(UnlockAttributeBuffer)(THIS) PURE; STDMETHOD(Optimize)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE; STDMETHOD(OptimizeInplace)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap) PURE; STDMETHOD(SetAttributeTable)(THIS_ const D3DXATTRIBUTERANGE *attrib_table, DWORD attrib_table_size) PURE; }; #undef INTERFACE #define INTERFACE ID3DXPMesh DECLARE_INTERFACE_(ID3DXPMesh, ID3DXBaseMesh) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXBaseMesh ***/ STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE; STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE; STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; STDMETHOD_(DWORD, GetFVF)(THIS) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE; STDMETHOD_(DWORD, GetOptions)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE; STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE; STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE; STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE; STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE; STDMETHOD(UnlockVertexBuffer)(THIS) PURE; STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE; STDMETHOD(UnlockIndexBuffer)(THIS) PURE; STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE; STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE; STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE; STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE; STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; /*** ID3DXPMesh ***/ STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE; STDMETHOD(ClonePMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE; STDMETHOD(SetNumFaces)(THIS_ DWORD faces) PURE; STDMETHOD(SetNumVertices)(THIS_ DWORD vertices) PURE; STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE; STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE; STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE; STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE; STDMETHOD(Save)(THIS_ IStream *stream, const D3DXMATERIAL *material, const D3DXEFFECTINSTANCE *effect_instance, DWORD num_materials) PURE; STDMETHOD(Optimize)(THIS_ DWORD flags, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE; STDMETHOD(OptimizeBaseLOD)(THIS_ DWORD flags, DWORD* face_remap) PURE; STDMETHOD(TrimByFaces)(THIS_ DWORD new_faces_min, DWORD new_faces_max, DWORD* face_remap, DWORD* vertex_remap) PURE; STDMETHOD(TrimByVertices)(THIS_ DWORD new_vertices_min, DWORD new_vertices_max, DWORD* face_remap, DWORD* vertex_remap) PURE; STDMETHOD(GetAdjacency)(THIS_ DWORD* adjacency) PURE; STDMETHOD(GenerateVertexHistory)(THIS_ DWORD* vertex_history) PURE; }; #undef INTERFACE #define INTERFACE ID3DXSPMesh DECLARE_INTERFACE_(ID3DXSPMesh, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXSPMesh ***/ STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE; STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; STDMETHOD_(DWORD, GetNumFVF)(THIS) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; STDMETHOD_(DWORD, GetOptions)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf, struct IDirect3DDevice9 *device, DWORD *adjacency_out, DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE; STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, DWORD *adjacency_out, DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE; STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf, struct IDirect3DDevice9 *device, DWORD *vertex_remap_out, float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE; STDMETHOD(ClonePMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, DWORD *vertex_remap_out, float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE; STDMETHOD(ReduceFaces)(THIS_ DWORD faces) PURE; STDMETHOD(ReduceVertices)(THIS_ DWORD vertices) PURE; STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE; STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE; STDMETHOD(GetVertexAttributeWeights)(THIS_ LPD3DXATTRIBUTEWEIGHTS vertex_attribute_weights) PURE; STDMETHOD(GetVertexWeights)(THIS_ FLOAT* vertex_weights) PURE; }; #undef INTERFACE #define INTERFACE ID3DXPatchMesh DECLARE_INTERFACE_(ID3DXPatchMesh, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXPatchMesh ***/ STDMETHOD_(DWORD, GetNumPatches)(THIS) PURE; STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; STDMETHOD_(DWORD, GetControlVerticesPerPatch)(THIS) PURE; STDMETHOD_(DWORD, GetOptions)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD(GetPatchInfo)(THIS_ LPD3DXPATCHINFO patch_info) PURE; STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE; STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE; STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE; STDMETHOD(UnlockVertexBuffer)(THIS) PURE; STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE; STDMETHOD(UnlockIndexBuffer)(THIS) PURE; STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE; STDMETHOD(UnlockAttributeBuffer)(THIS) PURE; STDMETHOD(GetTessSize)(THIS_ FLOAT tess_level, DWORD adaptive, DWORD* num_triangles, DWORD* num_vertices) PURE; STDMETHOD(GenerateAdjacency)(THIS_ FLOAT tolerance) PURE; STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, ID3DXPatchMesh **clone_mesh) PURE; STDMETHOD(Optimize)(THIS_ DWORD flags) PURE; STDMETHOD(SetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 *texture, D3DTEXTUREFILTERTYPE min_filter, D3DTEXTUREFILTERTYPE mag_filter, D3DTEXTUREFILTERTYPE mip_filter, D3DTEXTUREADDRESS wrap, DWORD lod_bias) PURE; STDMETHOD(GetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 **texture, D3DTEXTUREFILTERTYPE *min_filter, D3DTEXTUREFILTERTYPE *mag_filter, D3DTEXTUREFILTERTYPE *mip_filter, D3DTEXTUREADDRESS *wrap, DWORD *lod_bias) PURE; STDMETHOD(Tessellate)(THIS_ float tess_level, ID3DXMesh *mesh) PURE; STDMETHOD(TessellateAdaptive)(THIS_ const D3DXVECTOR4 *trans, DWORD max_tess_level, DWORD min_tess_level, ID3DXMesh *mesh) PURE; }; #undef INTERFACE #define INTERFACE ID3DXSkinInfo DECLARE_INTERFACE_(ID3DXSkinInfo, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXSkinInfo ***/ STDMETHOD(SetBoneInfluence)(THIS_ DWORD bone, DWORD num_influences, const DWORD *vertices, const FLOAT *weights) PURE; STDMETHOD(SetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float weight) PURE; STDMETHOD_(DWORD, GetNumBoneInfluences)(THIS_ DWORD bone) PURE; STDMETHOD(GetBoneInfluence)(THIS_ DWORD bone, DWORD* vertices, FLOAT* weights) PURE; STDMETHOD(GetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float *weight, DWORD* vertex_num) PURE; STDMETHOD(GetMaxVertexInfluences)(THIS_ DWORD* max_vertex_influences) PURE; STDMETHOD_(DWORD, GetNumBones)(THIS) PURE; STDMETHOD(FindBoneVertexInfluenceIndex)(THIS_ DWORD bone_num, DWORD vertex_num, DWORD* influence_index) PURE; STDMETHOD(GetMaxFaceInfluences)(THIS_ struct IDirect3DIndexBuffer9 *index_buffer, DWORD num_faces, DWORD *max_face_influences) PURE; STDMETHOD(SetMinBoneInfluence)(THIS_ FLOAT min_influence) PURE; STDMETHOD_(FLOAT, GetMinBoneInfluence)(THIS) PURE; STDMETHOD(SetBoneName)(THIS_ DWORD bone_idx, const char *name) PURE; STDMETHOD_(const char *, GetBoneName)(THIS_ DWORD bone_idx) PURE; STDMETHOD(SetBoneOffsetMatrix)(THIS_ DWORD bone, const D3DXMATRIX *bone_transform) PURE; STDMETHOD_(D3DXMATRIX *, GetBoneOffsetMatrix)(THIS_ DWORD bone) PURE; STDMETHOD(Clone)(THIS_ ID3DXSkinInfo **skin_info) PURE; STDMETHOD(Remap)(THIS_ DWORD num_vertices, DWORD* vertex_remap) PURE; STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; STDMETHOD(SetDeclaration)(THIS_ const D3DVERTEXELEMENT9 *declaration) PURE; STDMETHOD_(DWORD, GetFVF)(THIS) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE; STDMETHOD(UpdateSkinnedMesh)(THIS_ const D3DXMATRIX *bone_transforms, const D3DXMATRIX *bone_inv_transpose_transforms, const void *src_vertices, void *dst_vertices) PURE; STDMETHOD(ConvertToBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_infl, DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out) PURE; STDMETHOD(ConvertToIndexedBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, DWORD palette_size, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_infl, DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out) PURE; }; #undef INTERFACE #define INTERFACE ID3DXPRTBuffer DECLARE_INTERFACE_(ID3DXPRTBuffer, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXPRTBuffer methods ***/ STDMETHOD_(UINT, GetNumSamples)(THIS) PURE; STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE; STDMETHOD_(UINT, GetNumChannels)(THIS) PURE; STDMETHOD_(BOOL, IsTexture)(THIS) PURE; STDMETHOD_(BOOL, GetWidth)(THIS) PURE; STDMETHOD_(BOOL, GetHeight)(THIS) PURE; STDMETHOD(Resize)(THIS_ UINT new_size) PURE; STDMETHOD(LockBuffer)(THIS_ UINT start, UINT num_samples, FLOAT **data) PURE; STDMETHOD(UnlockBuffer)(THIS) PURE; STDMETHOD(ScaleBuffer)(THIS_ FLOAT scale) PURE; STDMETHOD(AddBuffer)(THIS_ ID3DXPRTBuffer *buffer) PURE; STDMETHOD(AttachGH)(THIS_ struct ID3DXTextureGutterHelper *gh) PURE; STDMETHOD(ReleaseGH)(THIS) PURE; STDMETHOD(EvalGH)(THIS) PURE; STDMETHOD(ExtractTexture)(THIS_ UINT channel, UINT start_coefficient, UINT num_coefficients, struct IDirect3DTexture9 *texture) PURE; STDMETHOD(ExtractToMesh)(THIS_ UINT num_coefficients, D3DDECLUSAGE usage, UINT usage_index_start, ID3DXMesh *scene) PURE; }; #undef INTERFACE #define INTERFACE ID3DXPRTCompBuffer DECLARE_INTERFACE_(ID3DXPRTCompBuffer, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXPRTCompBuffer methods ***/ STDMETHOD_(UINT, GetNumSamples)(THIS) PURE; STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE; STDMETHOD_(UINT, GetNumChannels)(THIS) PURE; STDMETHOD_(BOOL, IsTexture)(THIS) PURE; STDMETHOD_(UINT, GetWidth)(THIS) PURE; STDMETHOD_(UINT, GetHeight)(THIS) PURE; STDMETHOD_(UINT, GetNumClusters)(THIS) PURE; STDMETHOD_(UINT, GetNumPCA)(THIS) PURE; STDMETHOD(NormalizeData)(THIS) PURE; STDMETHOD(ExtractBasis)(THIS_ UINT cluster, FLOAT *cluster_basis) PURE; STDMETHOD(ExtractClusterIDs)(THIS_ UINT *cluster_ids) PURE; STDMETHOD(ExtractPCA)(THIS_ UINT start_pca, UINT num_extract, FLOAT *pca_coefficients) PURE; STDMETHOD(ExtractTexture)(THIS_ UINT start_pca, UINT num_pca, struct IDirect3DTexture9 *texture) PURE; STDMETHOD(ExtractToMesh)(THIS_ UINT num_pca, D3DDECLUSAGE usage, UINT usage_index_start, ID3DXMesh *scene) PURE; }; #undef INTERFACE #define INTERFACE ID3DXTextureGutterHelper DECLARE_INTERFACE_(ID3DXTextureGutterHelper, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXTextureGutterHelper methods ***/ STDMETHOD_(UINT, GetWidth)(THIS) PURE; STDMETHOD_(UINT, GetHeight)(THIS) PURE; STDMETHOD(ApplyGuttersFloat)(THIS_ FLOAT *data_in, UINT num_coeffs, UINT width, UINT height) PURE; STDMETHOD(ApplyGuttersTex)(THIS_ struct IDirect3DTexture9 *texture) PURE; STDMETHOD(ApplyGuttersPRT)(THIS_ ID3DXPRTBuffer *buffer) PURE; STDMETHOD(ResampleTex)(THIS_ struct IDirect3DTexture9 *texture_in, struct ID3DXMesh *mesh_in, D3DDECLUSAGE usage, UINT usage_index, struct IDirect3DTexture9 *texture_out) PURE; STDMETHOD(GetFaceMap)(THIS_ UINT *face_data) PURE; STDMETHOD(GetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE; STDMETHOD(GetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE; STDMETHOD(GetGutterMap)(THIS_ BYTE *gutter_data) PURE; STDMETHOD(SetFaceMap)(THIS_ UINT *face_data) PURE; STDMETHOD(SetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE; STDMETHOD(SetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE; STDMETHOD(SetGutterMap)(THIS_ BYTE *gutter_data) PURE; }; #undef INTERFACE #define INTERFACE ID3DXPRTEngine DECLARE_INTERFACE_(ID3DXPRTEngine, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXPRTEngine methods ***/ STDMETHOD(SetMeshMaterials)(THIS_ const D3DXSHMATERIAL **materials, UINT num_meshes, UINT num_channels, BOOL set_albedo, FLOAT length_scale) PURE; STDMETHOD(SetPerVertexAlbedo)(THIS_ const void *data_in, UINT num_channels, UINT stride) PURE; STDMETHOD(SetPerTexelAlbedo)(THIS_ struct IDirect3DTexture9 *albedo_texture, UINT num_channels, struct ID3DXTextureGutterHelper *gh) PURE; STDMETHOD(GetVertexAlbedo)(THIS_ D3DXCOLOR *vert_colors, UINT num_verts) PURE; STDMETHOD(SetPerTexelNormals)(THIS_ struct IDirect3DTexture9 *normal_texture) PURE; STDMETHOD(ExtractPerVertexAlbedo)(THIS_ ID3DXMesh *mesh, D3DDECLUSAGE usage, UINT num_channels) PURE; STDMETHOD(ResampleBuffer)(THIS_ ID3DXPRTBuffer *buffer_in, ID3DXPRTBuffer *buffer_out) PURE; STDMETHOD(GetAdaptedMesh)(THIS_ struct IDirect3DDevice9 *device, UINT *face_remap, UINT *vert_remap, float *vert_weights, struct ID3DXMesh **mesh) PURE; STDMETHOD_(UINT, GetNumVerts)(THIS) PURE; STDMETHOD_(UINT, GetNumFaces)(THIS) PURE; STDMETHOD(SetMinMaxIntersection)(THIS_ FLOAT min, FLOAT max) PURE; STDMETHOD(RobustMeshRefine)(THIS_ FLOAT min_edge_length, UINT max_subdiv) PURE; STDMETHOD(SetSamplingInfo)(THIS_ UINT num_rays, BOOL use_sphere, BOOL use_cosine, BOOL adaptive, FLOAT adpative_thresh) PURE; STDMETHOD(ComputeDirectLightingSH)(THIS_ UINT sh_order, ID3DXPRTBuffer *data_out) PURE; STDMETHOD(ComputeDirectLightingSHAdaptive)(THIS_ UINT sh_order, float adaptive_thresh, float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out) PURE; STDMETHOD(ComputeDirectLightingSHGPU)(THIS_ struct IDirect3DDevice9 *device, UINT flags, UINT sh_order, float zbias, float zangle_bias, struct ID3DXPRTBuffer *data_out) PURE; STDMETHOD(ComputeSS)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE; STDMETHOD(ComputeSSAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres, float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE; STDMETHOD(ComputeBounce)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE; STDMETHOD(ComputeBounceAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres, float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE; STDMETHOD(ComputeVolumeSamplesDirectSH)(THIS_ UINT sh_order_in, UINT sh_order_out, UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE; STDMETHOD(ComputeVolumeSamples)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT sh_order, UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE; STDMETHOD(ComputeSurfSamplesDirectSH)(THIS_ UINT sh_order, UINT num_samples, const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out) PURE; STDMETHOD(ComputeSurfSamplesBounce)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT num_samples, const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE; STDMETHOD(FreeSSData)(THIS) PURE; STDMETHOD(FreeBounceData)(THIS) PURE; STDMETHOD(ComputeLDPRTCoeffs)(THIS_ ID3DXPRTBuffer *data_in, UINT sh_order, D3DXVECTOR3 *norm_out, ID3DXPRTBuffer *data_out) PURE; STDMETHOD(ScaleMeshChunk)(THIS_ UINT mesh_chunk, float scale, ID3DXPRTBuffer *data_out) PURE; STDMETHOD(MultiplyAlbedo)(THIS_ ID3DXPRTBuffer *data_out) PURE; STDMETHOD(SetCallback)(THIS_ LPD3DXSHPRTSIMCB cb, float frequency, void *user_context) PURE; STDMETHOD_(BOOL, ShadowRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir) PURE; STDMETHOD_(BOOL, ClosestRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir, DWORD *face_index, FLOAT *u, FLOAT *v, FLOAT *dist) PURE; }; #undef INTERFACE #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3DXCreateMesh(DWORD face_count, DWORD vertex_count, DWORD flags, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh); HRESULT WINAPI D3DXCreateMeshFVF(DWORD face_count, DWORD vertex_count, DWORD flags, DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh); HRESULT WINAPI D3DXCreateBuffer(DWORD size, ID3DXBuffer **buffer); HRESULT WINAPI D3DXCreateSPMesh(ID3DXMesh *mesh, const DWORD *adjacency, const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, ID3DXSPMesh **spmesh); HRESULT WINAPI D3DXCreatePMeshFromStream(struct IStream *stream, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXPMesh **mesh); HRESULT WINAPI D3DXCreateSkinInfo(DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration, DWORD bone_count, ID3DXSkinInfo **skin_info); HRESULT WINAPI D3DXCreateSkinInfoFVF(DWORD vertex_count, DWORD fvf, DWORD bone_count, ID3DXSkinInfo **skin_info); HRESULT WINAPI D3DXCreateSkinInfoFromBlendedMesh(ID3DXBaseMesh *mesh, DWORD bone_count, const D3DXBONECOMBINATION *bone_combination_table, ID3DXSkinInfo **skin_info); HRESULT WINAPI D3DXCreatePatchMesh(const D3DXPATCHINFO *patch_info, DWORD patch_count, DWORD vertex_count, DWORD flags, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXPatchMesh **mesh); HRESULT WINAPI D3DXCreatePRTBuffer(UINT sample_count, UINT coeff_count, UINT channel_count, ID3DXPRTBuffer **buffer); HRESULT WINAPI D3DXCreatePRTBufferTex(UINT width, UINT height, UINT coeff_count, UINT channel_count, ID3DXPRTBuffer **buffer); HRESULT WINAPI D3DXCreatePRTCompBuffer(D3DXSHCOMPRESSQUALITYTYPE quality, UINT cluster_count, UINT pca_count, LPD3DXSHPRTSIMCB cb, void *ctx, ID3DXPRTBuffer *input, ID3DXPRTCompBuffer **buffer); HRESULT WINAPI D3DXCreateTextureGutterHelper(UINT width, UINT height, ID3DXMesh *mesh, float gutter_size, ID3DXTextureGutterHelper **gh); HRESULT WINAPI D3DXCreatePRTEngine(ID3DXMesh *mesh, DWORD *adjacency, BOOL extract_uv, ID3DXMesh *blocker_mesh, ID3DXPRTEngine **engine); HRESULT WINAPI D3DXLoadMeshFromXA(const char *filename, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh); HRESULT WINAPI D3DXLoadMeshFromXW(const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh); #define D3DXLoadMeshFromX WINELIB_NAME_AW(D3DXLoadMeshFromX) HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *data, DWORD data_size, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh); HRESULT WINAPI D3DXLoadMeshFromXResource(HMODULE module, const char *resource, const char *resource_type, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh); HRESULT WINAPI D3DXLoadMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh); HRESULT WINAPI D3DXLoadPatchMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXPatchMesh **mesh); HRESULT WINAPI D3DXLoadSkinMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXSkinInfo **skin_info, struct ID3DXMesh **mesh); HRESULT WINAPI D3DXLoadPRTBufferFromFileA(const char *filename, ID3DXPRTBuffer **buffer); HRESULT WINAPI D3DXLoadPRTBufferFromFileW(const WCHAR *filename, ID3DXPRTBuffer **buffer); #define D3DXLoadPRTBufferFromFile WINELIB_NAME_AW(D3DXLoadPRTBufferFromFile) HRESULT WINAPI D3DXLoadPRTCompBufferFromFileA(const char *filename, ID3DXPRTCompBuffer **buffer); HRESULT WINAPI D3DXLoadPRTCompBufferFromFileW(const WCHAR *filename, ID3DXPRTCompBuffer **buffer); #define D3DXLoadPRTCompBufferFromFile WINELIB_NAME_AW(D3DXLoadPRTCompBufferFromFile) HRESULT WINAPI D3DXSaveMeshToXA(const char *filename, ID3DXMesh *mesh, const DWORD *adjacency, const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format); HRESULT WINAPI D3DXSaveMeshToXW(const WCHAR *filename, ID3DXMesh *mesh, const DWORD *adjacency, const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format); #define D3DXSaveMeshToX WINELIB_NAME_AW(D3DXSaveMeshToX) HRESULT WINAPI D3DXSavePRTBufferToFileA(const char *filename, ID3DXPRTBuffer *buffer); HRESULT WINAPI D3DXSavePRTBufferToFileW(const WCHAR *filename, ID3DXPRTBuffer *buffer); #define D3DXSavePRTBufferToFile WINELIB_NAME_AW(D3DXSavePRTBufferToFile) HRESULT WINAPI D3DXSavePRTCompBufferToFileA(const char *filename, ID3DXPRTCompBuffer *buffer); HRESULT WINAPI D3DXSavePRTCompBufferToFileW(const WCHAR *filename, ID3DXPRTCompBuffer *buffer); #define D3DXSavePRTCompBufferToFile WINELIB_NAME_AW(D3DXSavePRTCompBufferToFile) UINT WINAPI D3DXGetDeclLength(const D3DVERTEXELEMENT9 *decl); UINT WINAPI D3DXGetDeclVertexSize(const D3DVERTEXELEMENT9 *decl, DWORD stream_idx); UINT WINAPI D3DXGetFVFVertexSize(DWORD); BOOL WINAPI D3DXBoxBoundProbe(const D3DXVECTOR3 *vmin, const D3DXVECTOR3 *vmax, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir); BOOL WINAPI D3DXSphereBoundProbe(const D3DXVECTOR3 *center, FLOAT radius, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir); HRESULT WINAPI D3DXCleanMesh(D3DXCLEANTYPE clean_type, ID3DXMesh *mesh_in, const DWORD *adjacency_in, ID3DXMesh **mesh_out, DWORD *adjacency_out, ID3DXBuffer **errors); HRESULT WINAPI D3DXConcatenateMeshes(struct ID3DXMesh **meshes, UINT mesh_count, DWORD flags, const D3DXMATRIX *geometry_matrices, const D3DXMATRIX *texture_matrices, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh); HRESULT WINAPI D3DXComputeBoundingBox(const D3DXVECTOR3 *first_pos, DWORD num_vertices, DWORD stride, D3DXVECTOR3 *vmin, D3DXVECTOR3 *vmax); HRESULT WINAPI D3DXComputeBoundingSphere(const D3DXVECTOR3 *first_pos, DWORD num_vertices, DWORD stride, D3DXVECTOR3 *center, FLOAT *radius); HRESULT WINAPI D3DXComputeIMTFromPerTexelSignal(ID3DXMesh *mesh, DWORD texture_idx, float *texel_signal, UINT width, UINT height, UINT signal_dimension, UINT component_count, DWORD flags, LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer); HRESULT WINAPI D3DXComputeIMTFromPerVertexSignal(ID3DXMesh *mesh, const float *vertex_signal, UINT signal_dimension, UINT signal_stride, DWORD flags, LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer); HRESULT WINAPI D3DXComputeIMTFromSignal(ID3DXMesh *mesh, DWORD texture_idx, UINT signal_dimension, float max_uv_distance, DWORD flags, LPD3DXIMTSIGNALCALLBACK signal_cb, void *signal_ctx, LPD3DXUVATLASCB status_cb, void *status_ctx, ID3DXBuffer **buffer); HRESULT WINAPI D3DXComputeIMTFromTexture(struct ID3DXMesh *mesh, struct IDirect3DTexture9 *texture, DWORD texture_idx, DWORD options, LPD3DXUVATLASCB cb, void *ctx, struct ID3DXBuffer **out); HRESULT WINAPI D3DXComputeNormals(ID3DXBaseMesh *mesh, const DWORD *adjacency); HRESULT WINAPI D3DXComputeTangentFrameEx(ID3DXMesh *mesh_in, DWORD texture_in_semantic, DWORD texture_in_idx, DWORD u_partial_out_semantic, DWORD u_partial_out_idx, DWORD v_partial_out_semantic, DWORD v_partial_out_idx, DWORD normal_out_semantic, DWORD normal_out_idx, DWORD flags, const DWORD *adjacency, float partial_edge_threshold, float singular_point_threshold, float normal_edge_threshold, ID3DXMesh **mesh_out, ID3DXBuffer **buffer); HRESULT WINAPI D3DXComputeTangent(ID3DXMesh *mesh, DWORD stage, DWORD tangent_idx, DWORD binorm_idx, DWORD wrap, const DWORD *adjacency); HRESULT WINAPI D3DXConvertMeshSubsetToSingleStrip(struct ID3DXBaseMesh *mesh_in, DWORD attribute_id, DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count); HRESULT WINAPI D3DXConvertMeshSubsetToStrips(struct ID3DXBaseMesh *mesh_in, DWORD attribute_id, DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count, struct ID3DXBuffer **strip_lengths, DWORD *strip_count); HRESULT WINAPI D3DXDeclaratorFromFVF(DWORD, D3DVERTEXELEMENT9[MAX_FVF_DECL_SIZE]); HRESULT WINAPI D3DXFVFFromDeclarator(const D3DVERTEXELEMENT9 *decl, DWORD *fvf); HRESULT WINAPI D3DXGenerateOutputDecl(D3DVERTEXELEMENT9 *decl_out, const D3DVERTEXELEMENT9 *decl_in); HRESULT WINAPI D3DXGeneratePMesh(ID3DXMesh *mesh, const DWORD *adjacency, const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, DWORD min_value, DWORD flags, ID3DXPMesh **pmesh); HRESULT WINAPI D3DXIntersect(ID3DXBaseMesh *mesh, const D3DXVECTOR3 *ray_position, const D3DXVECTOR3 *ray_direction, BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance, ID3DXBuffer **hits, DWORD *hit_count); HRESULT WINAPI D3DXIntersectSubset(ID3DXBaseMesh *mesh, DWORD attribute_id, const D3DXVECTOR3 *ray_position, const D3DXVECTOR3 *ray_direction, BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance, ID3DXBuffer **hits, DWORD *hit_count); BOOL WINAPI D3DXIntersectTri(const D3DXVECTOR3 *vtx0, const D3DXVECTOR3 *vtx1, const D3DXVECTOR3 *vtx2, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir, FLOAT *u, FLOAT *v, FLOAT *dist); HRESULT WINAPI D3DXOptimizeFaces(const void *indices, UINT face_count, UINT vertex_count, BOOL idx_32bit, DWORD *face_remap); HRESULT WINAPI D3DXOptimizeVertices(const void *indices, UINT face_count, UINT vertex_count, BOOL idx_32bit, DWORD *vertex_remap); HRESULT WINAPI D3DXRectPatchSize(const FLOAT *segment_count, DWORD *num_triangles, DWORD *num_vertices); HRESULT WINAPI D3DXSHPRTCompSuperCluster(UINT *cluster_ids, ID3DXMesh *scene, UINT max_cluster_count, UINT cluster_count, UINT *scluster_ids, UINT *scluster_count); HRESULT WINAPI D3DXSHPRTCompSplitMeshSC(UINT *cluster_idx, UINT vertex_count, UINT cluster_count, UINT *scluster_ids, UINT scluster_count, void *index_buffer_in, BOOL ib_in_32bit, UINT face_count, ID3DXBuffer **index_buffer_out, UINT *index_buffer_size, BOOL ib_out_32bit, ID3DXBuffer **face_remap, ID3DXBuffer **vertex_data, UINT *vertex_data_length, UINT *sc_cluster_list, D3DXSHPRTSPLITMESHCLUSTERDATA *sc_data); HRESULT WINAPI D3DXSimplifyMesh(ID3DXMesh *mesh_in, const DWORD *adjacency, const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, DWORD min_value, DWORD flags, ID3DXMesh **mesh_out); HRESULT WINAPI D3DXSplitMesh(ID3DXMesh *mesh_in, const DWORD *adjacency_in, const DWORD max_size, const DWORD flags, DWORD *mesh_out_count, ID3DXBuffer **mesh_out, ID3DXBuffer **adjacency_out, ID3DXBuffer **face_remap_out, ID3DXBuffer **vertex_remap_out); HRESULT WINAPI D3DXTessellateNPatches(ID3DXMesh *mesh_in, const DWORD *adjacency_in, float segment_count, BOOL quad_interp, ID3DXMesh **mesh_out, ID3DXBuffer **adjacency_out); HRESULT WINAPI D3DXTessellateRectPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count, const D3DVERTEXELEMENT9 *declaration, const D3DRECTPATCH_INFO *patch_info, struct ID3DXMesh *mesh); HRESULT WINAPI D3DXTessellateTriPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count, const D3DVERTEXELEMENT9 *declaration, const D3DTRIPATCH_INFO *patch_info, struct ID3DXMesh *mesh); HRESULT WINAPI D3DXTriPatchSize(const FLOAT *segment_count, DWORD *num_triangles, DWORD *num_vertices); HRESULT WINAPI D3DXUVAtlasCreate(ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in, UINT width, UINT height, float gutter, DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges, const float *imt_array, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out, ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, float *max_stretch_out, UINT *chart_count); HRESULT WINAPI D3DXUVAtlasPack(ID3DXMesh *mesh, UINT width, UINT height, float gutter, DWORD texture_idx, const DWORD *partition_result_adjacency, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXBuffer *face_partitioning); HRESULT WINAPI D3DXUVAtlasPartition(ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in, DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges, const float *imt_array, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out, ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, ID3DXBuffer **adjacency_out, float *max_stretch_out, UINT *chart_count); HRESULT WINAPI D3DXValidMesh(ID3DXMesh *mesh, const DWORD *adjacency, ID3DXBuffer **errors); HRESULT WINAPI D3DXValidPatchMesh(ID3DXPatchMesh *mesh, DWORD *degenerate_vertex_count, DWORD *degenerate_patch_count, ID3DXBuffer **errors); HRESULT WINAPI D3DXWeldVertices(ID3DXMesh *mesh, DWORD flags, const D3DXWELDEPSILONS *epsilons, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap_out, ID3DXBuffer **vertex_remap_out); #ifdef __cplusplus } #endif DEFINE_GUID(DXFILEOBJ_XSkinMeshHeader, 0x3cf169ce, 0xff7c, 0x44ab, 0x93, 0xc0, 0xf7, 0x8f, 0x62, 0xd1, 0x72, 0xe2); DEFINE_GUID(DXFILEOBJ_VertexDuplicationIndices, 0xb8d65549, 0xd7c9, 0x4995, 0x89, 0xcf, 0x53, 0xa9, 0xa8, 0xb0, 0x31, 0xe3); DEFINE_GUID(DXFILEOBJ_FaceAdjacency, 0xa64c844a, 0xe282, 0x4756, 0x8b, 0x80, 0x25, 0x0c, 0xde, 0x04, 0x39, 0x8c); DEFINE_GUID(DXFILEOBJ_SkinWeights, 0x6f0d123b, 0xbad2, 0x4167, 0xa0, 0xd0, 0x80, 0x22, 0x4f, 0x25, 0xfa, 0xbb); DEFINE_GUID(DXFILEOBJ_Patch, 0xa3eb5d44, 0xfc22, 0x429d, 0x9a, 0xfb, 0x32, 0x21, 0xcb, 0x97, 0x19, 0xa6); DEFINE_GUID(DXFILEOBJ_PatchMesh, 0xd02c95cc, 0xedba, 0x4305, 0x9b, 0x5d, 0x18, 0x20, 0xd7, 0x70, 0x4d, 0xbf); DEFINE_GUID(DXFILEOBJ_PatchMesh9, 0xb9ec94e1, 0xb9a6, 0x4251, 0xba, 0x18, 0x94, 0x89, 0x3f, 0x02, 0xc0, 0xea); DEFINE_GUID(DXFILEOBJ_PMInfo, 0xb6c3e656, 0xec8b, 0x4b92, 0x9b, 0x62, 0x68, 0x16, 0x59, 0x52, 0x29, 0x47); DEFINE_GUID(DXFILEOBJ_PMAttributeRange, 0x917e0427, 0xc61e, 0x4a14, 0x9c, 0x64, 0xaf, 0xe6, 0x5f, 0x9e, 0x98, 0x44); DEFINE_GUID(DXFILEOBJ_PMVSplitRecord, 0x574ccc14, 0xf0b3, 0x4333, 0x82, 0x2d, 0x93, 0xe8, 0xa8, 0xa0, 0x8e, 0x4c); DEFINE_GUID(DXFILEOBJ_FVFData, 0xb6e70a0e, 0x8ef9, 0x4e83, 0x94, 0xad, 0xec, 0xc8, 0xb0, 0xc0, 0x48, 0x97); DEFINE_GUID(DXFILEOBJ_VertexElement, 0xf752461c, 0x1e23, 0x48f6, 0xb9, 0xf8, 0x83, 0x50, 0x85, 0x0f, 0x33, 0x6f); DEFINE_GUID(DXFILEOBJ_DeclData, 0xbf22e553, 0x292c, 0x4781, 0x9f, 0xea, 0x62, 0xbd, 0x55, 0x4b, 0xdd, 0x93); DEFINE_GUID(DXFILEOBJ_EffectFloats, 0xf1cfe2b3, 0x0de3, 0x4e28, 0xaf, 0xa1, 0x15, 0x5a, 0x75, 0x0a, 0x28, 0x2d); DEFINE_GUID(DXFILEOBJ_EffectString, 0xd55b097e, 0xbdb6, 0x4c52, 0xb0, 0x3d, 0x60, 0x51, 0xc8, 0x9d, 0x0e, 0x42); DEFINE_GUID(DXFILEOBJ_EffectDWord, 0x622c0ed0, 0x956e, 0x4da9, 0x90, 0x8a, 0x2a, 0xf9, 0x4f, 0x3c, 0xe7, 0x16); DEFINE_GUID(DXFILEOBJ_EffectParamFloats, 0x3014b9a0, 0x62f5, 0x478c, 0x9b, 0x86, 0xe4, 0xac, 0x9f, 0x4e, 0x41, 0x8b); DEFINE_GUID(DXFILEOBJ_EffectParamString, 0x1dbc4c88, 0x94c1, 0x46ee, 0x90, 0x76, 0x2c, 0x28, 0x81, 0x8c, 0x94, 0x81); DEFINE_GUID(DXFILEOBJ_EffectParamDWord, 0xe13963bc, 0xae51, 0x4c5d, 0xb0, 0x0f, 0xcf, 0xa3, 0xa9, 0xd9, 0x7c, 0xe5); DEFINE_GUID(DXFILEOBJ_EffectInstance, 0xe331f7e4, 0x0559, 0x4cc2, 0x8e, 0x99, 0x1c, 0xec, 0x16, 0x57, 0x92, 0x8f); DEFINE_GUID(DXFILEOBJ_AnimTicksPerSecond, 0x9e415a43, 0x7ba6, 0x4a73, 0x87, 0x43, 0xb7, 0x3d, 0x47, 0xe8, 0x84, 0x76); DEFINE_GUID(DXFILEOBJ_CompressedAnimationSet, 0x7f9b00b3, 0xf125, 0x4890, 0x87, 0x6e, 0x1c, 0x42, 0xbf, 0x69, 0x7c, 0x4d); #define XSKINEXP_TEMPLATES \ "xof 0303txt 0032\ template XSkinMeshHeader \ { \ <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> \ WORD nMaxSkinWeightsPerVertex; \ WORD nMaxSkinWeightsPerFace; \ WORD nBones; \ } \ template VertexDuplicationIndices \ { \ \ DWORD nIndices; \ DWORD nOriginalVertices; \ array DWORD indices[nIndices]; \ } \ template FaceAdjacency \ { \ \ DWORD nIndices; \ array DWORD indices[nIndices]; \ } \ template SkinWeights \ { \ <6F0D123B-BAD2-4167-A0D0-80224F25FABB> \ STRING transformNodeName; \ DWORD nWeights; \ array DWORD vertexIndices[nWeights]; \ array float weights[nWeights]; \ Matrix4x4 matrixOffset; \ } \ template Patch \ { \ \ DWORD nControlIndices; \ array DWORD controlIndices[nControlIndices]; \ } \ template PatchMesh \ { \ \ DWORD nVertices; \ array Vector vertices[nVertices]; \ DWORD nPatches; \ array Patch patches[nPatches]; \ [ ... ] \ } \ template PatchMesh9 \ { \ \ DWORD Type; \ DWORD Degree; \ DWORD Basis; \ DWORD nVertices; \ array Vector vertices[nVertices]; \ DWORD nPatches; \ array Patch patches[nPatches]; \ [ ... ] \ } template EffectFloats \ { \ \ DWORD nFloats; \ array float Floats[nFloats]; \ } \ template EffectString \ { \ \ STRING Value; \ } \ template EffectDWord \ { \ <622C0ED0-956E-4da9-908A-2AF94F3CE716> \ DWORD Value; \ } template EffectParamFloats \ { \ <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> \ STRING ParamName; \ DWORD nFloats; \ array float Floats[nFloats]; \ } template EffectParamString \ { \ <1DBC4C88-94C1-46ee-9076-2C28818C9481> \ STRING ParamName; \ STRING Value; \ } \ template EffectParamDWord \ { \ \ STRING ParamName; \ DWORD Value; \ } \ template EffectInstance \ { \ \ STRING EffectFilename; \ [ ... ] \ } template AnimTicksPerSecond \ { \ <9E415A43-7BA6-4a73-8743-B73D47E88476> \ DWORD AnimTicksPerSecond; \ } \ template CompressedAnimationSet \ { \ <7F9B00B3-F125-4890-876E-1C42BF697C4D> \ DWORD CompressedBlockSize; \ FLOAT TicksPerSec; \ DWORD PlaybackType; \ DWORD BufferLength; \ array DWORD CompressedData[BufferLength]; \ } " #define XEXTENSIONS_TEMPLATES \ "xof 0303txt 0032\ template FVFData \ { \ \ DWORD dwFVF; \ DWORD nDWords; \ array DWORD data[nDWords]; \ } \ template VertexElement \ { \ \ DWORD Type; \ DWORD Method; \ DWORD Usage; \ DWORD UsageIndex; \ } \ template DeclData \ { \ \ DWORD nElements; \ array VertexElement Elements[nElements]; \ DWORD nDWords; \ array DWORD data[nDWords]; \ } \ template PMAttributeRange \ { \ <917E0427-C61E-4a14-9C64-AFE65F9E9844> \ DWORD iFaceOffset; \ DWORD nFacesMin; \ DWORD nFacesMax; \ DWORD iVertexOffset; \ DWORD nVerticesMin; \ DWORD nVerticesMax; \ } \ template PMVSplitRecord \ { \ <574CCC14-F0B3-4333-822D-93E8A8A08E4C> \ DWORD iFaceCLW; \ DWORD iVlrOffset; \ DWORD iCode; \ } \ template PMInfo \ { \ \ DWORD nAttributes; \ array PMAttributeRange attributeRanges[nAttributes]; \ DWORD nMaxValence; \ DWORD nMinLogicalVertices; \ DWORD nMaxLogicalVertices; \ DWORD nVSplits; \ array PMVSplitRecord splitRecords[nVSplits]; \ DWORD nAttributeMispredicts; \ array DWORD attributeMispredicts[nAttributeMispredicts]; \ } " #endif /* __WINE_D3DX9MESH_H */ ================================================ FILE: wine/windows/d3dx9shader.h ================================================ /* * Copyright 2008 Luis Busquets * Copyright 2014 Kai Tietz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx9.h" #ifndef __D3DX9SHADER_H__ #define __D3DX9SHADER_H__ #define D3DXSHADER_DEBUG 0x1 #define D3DXSHADER_SKIPVALIDATION 0x2 #define D3DXSHADER_SKIPOPTIMIZATION 0x4 #define D3DXSHADER_PACKMATRIX_ROWMAJOR 0x8 #define D3DXSHADER_PACKMATRIX_COLUMNMAJOR 0x10 #define D3DXSHADER_PARTIALPRECISION 0x20 #define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT 0x40 #define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT 0x80 #define D3DXSHADER_NO_PRESHADER 0x100 #define D3DXSHADER_AVOID_FLOW_CONTROL 0x200 #define D3DXSHADER_PREFER_FLOW_CONTROL 0x400 #define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000 #define D3DXSHADER_IEEE_STRICTNESS 0x2000 #define D3DXSHADER_OPTIMIZATION_LEVEL0 0x4000 #define D3DXSHADER_OPTIMIZATION_LEVEL1 0x0 #define D3DXSHADER_OPTIMIZATION_LEVEL2 0xC000 #define D3DXSHADER_OPTIMIZATION_LEVEL3 0x8000 #define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL 0x10000 #define D3DXCONSTTABLE_LARGEADDRESSAWARE 0x20000 typedef const char *D3DXHANDLE; typedef D3DXHANDLE *LPD3DXHANDLE; typedef enum _D3DXREGISTER_SET { D3DXRS_BOOL, D3DXRS_INT4, D3DXRS_FLOAT4, D3DXRS_SAMPLER, D3DXRS_FORCE_DWORD = 0x7fffffff } D3DXREGISTER_SET, *LPD3DXREGISTER_SET; typedef enum D3DXPARAMETER_CLASS { D3DXPC_SCALAR, D3DXPC_VECTOR, D3DXPC_MATRIX_ROWS, D3DXPC_MATRIX_COLUMNS, D3DXPC_OBJECT, D3DXPC_STRUCT, D3DXPC_FORCE_DWORD = 0x7fffffff, } D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS; typedef enum D3DXPARAMETER_TYPE { D3DXPT_VOID, D3DXPT_BOOL, D3DXPT_INT, D3DXPT_FLOAT, D3DXPT_STRING, D3DXPT_TEXTURE, D3DXPT_TEXTURE1D, D3DXPT_TEXTURE2D, D3DXPT_TEXTURE3D, D3DXPT_TEXTURECUBE, D3DXPT_SAMPLER, D3DXPT_SAMPLER1D, D3DXPT_SAMPLER2D, D3DXPT_SAMPLER3D, D3DXPT_SAMPLERCUBE, D3DXPT_PIXELSHADER, D3DXPT_VERTEXSHADER, D3DXPT_PIXELFRAGMENT, D3DXPT_VERTEXFRAGMENT, D3DXPT_UNSUPPORTED, D3DXPT_FORCE_DWORD = 0x7fffffff, } D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE; typedef struct _D3DXCONSTANTTABLE_DESC { const char *Creator; DWORD Version; UINT Constants; } D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC; typedef struct _D3DXCONSTANT_DESC { const char *Name; D3DXREGISTER_SET RegisterSet; UINT RegisterIndex; UINT RegisterCount; D3DXPARAMETER_CLASS Class; D3DXPARAMETER_TYPE Type; UINT Rows; UINT Columns; UINT Elements; UINT StructMembers; UINT Bytes; const void *DefaultValue; } D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC; #if D3DX_SDK_VERSION < 43 DEFINE_GUID(IID_ID3DXConstantTable, 0x9dca3190, 0x38b9, 0x4fc3, 0x92, 0xe3, 0x39, 0xc6, 0xdd, 0xfb, 0x35, 0x8b); #else DEFINE_GUID(IID_ID3DXConstantTable, 0xab3c758f, 0x093e, 0x4356, 0xb7, 0x62, 0x4d, 0xb1, 0x8f, 0x1b, 0x3a, 0x01); #endif #undef INTERFACE #define INTERFACE ID3DXConstantTable DECLARE_INTERFACE_(ID3DXConstantTable, ID3DXBuffer) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /*** ID3DXBuffer methods ***/ STDMETHOD_(void *, GetBufferPointer)(THIS) PURE; STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE; /*** ID3DXConstantTable methods ***/ STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE; STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE; STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE; STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE constant, const char *name) PURE; STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; STDMETHOD(SetDefaults)(THIS_ struct IDirect3DDevice9 *device) PURE; STDMETHOD(SetValue)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const void *data, UINT data_size) PURE; STDMETHOD(SetBool)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, BOOL value) PURE; STDMETHOD(SetBoolArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const BOOL *values, UINT value_count) PURE; STDMETHOD(SetInt)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, INT value) PURE; STDMETHOD(SetIntArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const INT *values, UINT value_count) PURE; STDMETHOD(SetFloat)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, float value) PURE; STDMETHOD(SetFloatArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const float *values, UINT value_count) PURE; STDMETHOD(SetVector)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *value) PURE; STDMETHOD(SetVectorArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *values, UINT value_count) PURE; STDMETHOD(SetMatrix)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *value) PURE; STDMETHOD(SetMatrixArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *values, UINT value_count) PURE; STDMETHOD(SetMatrixPointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX **values, UINT value_count) PURE; STDMETHOD(SetMatrixTranspose)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *value) PURE; STDMETHOD(SetMatrixTransposeArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *values, UINT value_count) PURE; STDMETHOD(SetMatrixTransposePointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX **values, UINT value_count) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define ID3DXConstantTable_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ID3DXConstantTable_AddRef(p) (p)->lpVtbl->AddRef(p) #define ID3DXConstantTable_Release(p) (p)->lpVtbl->Release(p) /*** ID3DXBuffer methods ***/ #define ID3DXConstantTable_GetBufferPointer(p) (p)->lpVtbl->GetBufferPointer(p) #define ID3DXConstantTable_GetBufferSize(p) (p)->lpVtbl->GetBufferSize(p) /*** ID3DXConstantTable methods ***/ #define ID3DXConstantTable_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define ID3DXConstantTable_GetConstantDesc(p,a,b,c) (p)->lpVtbl->GetConstantDesc(p,a,b,c) #define ID3DXConstantTable_GetSamplerIndex(p,a) (p)->lpVtbl->GetSamplerIndex(p,a) #define ID3DXConstantTable_GetConstant(p,a,b) (p)->lpVtbl->GetConstant(p,a,b) #define ID3DXConstantTable_GetConstantByName(p,a,b) (p)->lpVtbl->GetConstantByName(p,a,b) #define ID3DXConstantTable_GetConstantElement(p,a,b) (p)->lpVtbl->GetConstantElement(p,a,b) #define ID3DXConstantTable_SetDefaults(p,a) (p)->lpVtbl->SetDefaults(p,a) #define ID3DXConstantTable_SetValue(p,a,b,c,d) (p)->lpVtbl->SetValue(p,a,b,c,d) #define ID3DXConstantTable_SetBool(p,a,b,c) (p)->lpVtbl->SetBool(p,a,b,c) #define ID3DXConstantTable_SetBoolArray(p,a,b,c,d) (p)->lpVtbl->SetBoolArray(p,a,b,c,d) #define ID3DXConstantTable_SetInt(p,a,b,c) (p)->lpVtbl->SetInt(p,a,b,c) #define ID3DXConstantTable_SetIntArray(p,a,b,c,d) (p)->lpVtbl->SetIntArray(p,a,b,c,d) #define ID3DXConstantTable_SetFloat(p,a,b,c) (p)->lpVtbl->SetFloat(p,a,b,c) #define ID3DXConstantTable_SetFloatArray(p,a,b,c,d) (p)->lpVtbl->SetFloatArray(p,a,b,c,d) #define ID3DXConstantTable_SetVector(p,a,b,c) (p)->lpVtbl->SetVector(p,a,b,c) #define ID3DXConstantTable_SetVectorArray(p,a,b,c,d) (p)->lpVtbl->SetVectorArray(p,a,b,c,d) #define ID3DXConstantTable_SetMatrix(p,a,b,c) (p)->lpVtbl->SetMatrix(p,a,b,c) #define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixArray(p,a,b,c,d) #define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixPointerArray(p,a,b,c,d) #define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c) (p)->lpVtbl->SetMatrixTranspose(p,a,b,c) #define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixTransposeArray(p,a,b,c,d) #define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixTransposePointerArray(p,a,b,c,d) #else /*** IUnknown methods ***/ #define ID3DXConstantTable_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define ID3DXConstantTable_AddRef(p) (p)->AddRef() #define ID3DXConstantTable_Release(p) (p)->Release() /*** ID3DXBuffer methods ***/ #define ID3DXConstantTable_GetBufferPointer(p) (p)->GetBufferPointer() #define ID3DXConstantTable_GetBufferSize(p) (p)->GetBufferSize() /*** ID3DXConstantTable methods ***/ #define ID3DXConstantTable_GetDesc(p,a) (p)->GetDesc(a) #define ID3DXConstantTable_GetConstantDesc(p,a,b,c) (p)->GetConstantDesc(a,b,c) #define ID3DXConstantTable_GetSamplerIndex(p,a) (p)->GetConstantDesc(a) #define ID3DXConstantTable_GetConstant(p,a,b) (p)->GetConstant(a,b) #define ID3DXConstantTable_GetConstantByName(p,a,b) (p)->GetConstantByName(a,b) #define ID3DXConstantTable_GetConstantElement(p,a,b) (p)->GetConstantElement(a,b) #define ID3DXConstantTable_SetDefaults(p,a) (p)->SetDefaults(a) #define ID3DXConstantTable_SetValue(p,a,b,c,d) (p)->SetValue(a,b,c,d) #define ID3DXConstantTable_SetBool(p,a,b,c) (p)->SetBool(a,b,c) #define ID3DXConstantTable_SetBoolArray(p,a,b,c,d) (p)->SetBoolArray(a,b,c,d) #define ID3DXConstantTable_SetInt(p,a,b,c) (p)->SetInt(a,b,c) #define ID3DXConstantTable_SetIntArray(p,a,b,c,d) (p)->SetIntArray(a,b,c,d) #define ID3DXConstantTable_SetFloat(p,a,b,c) (p)->SetFloat(a,b,c) #define ID3DXConstantTable_SetFloatArray(p,a,b,c,d) (p)->SetFloatArray(a,b,c,d) #define ID3DXConstantTable_SetVector(p,a,b,c) (p)->SetVector(a,b,c) #define ID3DXConstantTable_SetVectorArray(p,a,b,c,d) (p)->SetVectorArray(a,b,c,d) #define ID3DXConstantTable_SetMatrix(p,a,b,c) (p)->SetMatrix(a,b,c) #define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d) (p)->SetMatrixArray(a,b,c,d) #define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d) (p)->SetMatrixPointerArray(a,b,c,d) #define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c) (p)->SetMatrixTranspose(a,b,c) #define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d) (p)->SetMatrixTransposeArray(a,b,c,d) #define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d) (p)->SetMatrixTransposePointerArray(a,b,c,d) #endif typedef struct ID3DXConstantTable *LPD3DXCONSTANTTABLE; typedef interface ID3DXTextureShader *LPD3DXTEXTURESHADER; DEFINE_GUID(IID_ID3DXTextureShader, 0x3e3d67f8, 0xaa7a, 0x405d, 0xa8, 0x57, 0xba, 0x1, 0xd4, 0x75, 0x84, 0x26); #define INTERFACE ID3DXTextureShader DECLARE_INTERFACE_(ID3DXTextureShader, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD(GetFunction)(THIS_ struct ID3DXBuffer **ppFunction) PURE; STDMETHOD(GetConstantBuffer)(THIS_ struct ID3DXBuffer **ppConstantBuffer) PURE; STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE; STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE; STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, const char *pName) PURE; STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; STDMETHOD(SetDefaults)(THIS) PURE; STDMETHOD(SetValue)(THIS_ D3DXHANDLE hConstant, const void *pData, UINT Bytes) PURE; STDMETHOD(SetBool)(THIS_ D3DXHANDLE hConstant, BOOL b) PURE; STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hConstant, const BOOL *pb, UINT Count) PURE; STDMETHOD(SetInt)(THIS_ D3DXHANDLE hConstant, INT n) PURE; STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hConstant, const INT *pn, UINT Count) PURE; STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hConstant, FLOAT f) PURE; STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hConstant, const FLOAT *pf, UINT Count) PURE; STDMETHOD(SetVector)(THIS_ D3DXHANDLE hConstant, const D3DXVECTOR4 *pVector) PURE; STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hConstant, const D3DXVECTOR4 *pVector, UINT Count) PURE; STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix) PURE; STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix, UINT Count) PURE; STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX **ppMatrix, UINT Count) PURE; STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix) PURE; STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix, UINT Count) PURE; STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX **ppMatrix, UINT Count) PURE; }; #undef INTERFACE typedef struct _D3DXMACRO { const char *Name; const char *Definition; } D3DXMACRO, *LPD3DXMACRO; typedef struct _D3DXSEMANTIC { UINT Usage; UINT UsageIndex; } D3DXSEMANTIC, *LPD3DXSEMANTIC; typedef enum _D3DXINCLUDE_TYPE { D3DXINC_LOCAL, D3DXINC_SYSTEM, D3DXINC_FORCE_DWORD = 0x7fffffff, } D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE; #define INTERFACE ID3DXInclude DECLARE_INTERFACE(ID3DXInclude) { STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE include_type, const char *filename, const void *parent_data, const void **data, UINT *bytes) PURE; STDMETHOD(Close)(THIS_ const void *data) PURE; }; #undef INTERFACE #define ID3DXInclude_Open(p,a,b,c,d,e) (p)->lpVtbl->Open(p,a,b,c,d,e) #define ID3DXInclude_Close(p,a) (p)->lpVtbl->Close(p,a) typedef struct ID3DXInclude *LPD3DXINCLUDE; typedef struct _D3DXFRAGMENT_DESC { const char *Name; DWORD Target; } D3DXFRAGMENT_DESC, *LPD3DXFRAGMENT_DESC; DEFINE_GUID(IID_ID3DXFragmentLinker, 0x1a2c0cc2, 0xe5b6, 0x4ebc, 0x9e, 0x8d, 0x39, 0xe, 0x5, 0x78, 0x11, 0xb6); #define INTERFACE ID3DXFragmentLinker DECLARE_INTERFACE_(ID3DXFragmentLinker, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE; STDMETHOD_(UINT, GetNumberOfFragments)(THIS) PURE; STDMETHOD_(D3DXHANDLE, GetFragmentHandleByIndex)(THIS_ UINT index) PURE; STDMETHOD_(D3DXHANDLE, GetFragmentHandleByName)(THIS_ const char *name) PURE; STDMETHOD(GetFragmentDesc)(THIS_ D3DXHANDLE name, D3DXFRAGMENT_DESC *frag_desc) PURE; STDMETHOD(AddFragments)(THIS_ const DWORD *fragments) PURE; STDMETHOD(GetAllFragments)(THIS_ ID3DXBuffer **buffer) PURE; STDMETHOD(GetFragment)(THIS_ D3DXHANDLE name, ID3DXBuffer **buffer) PURE; STDMETHOD(LinkShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragmenthandles, UINT fragments, ID3DXBuffer **buffer, ID3DXBuffer **errors) PURE; STDMETHOD(LinkVertexShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragment_handles, UINT fragments, IDirect3DVertexShader9 **shader, ID3DXBuffer **errors) PURE; STDMETHOD(LinkPixelShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragment_handles, UINT fragments, IDirect3DPixelShader9 **shader, ID3DXBuffer **errors) PURE; STDMETHOD(ClearCache)(THIS) PURE; }; #undef INTERFACE #ifdef __cplusplus extern "C" { #endif const char * WINAPI D3DXGetPixelShaderProfile(struct IDirect3DDevice9 *device); UINT WINAPI D3DXGetShaderSize(const DWORD *byte_code); DWORD WINAPI D3DXGetShaderVersion(const DWORD *byte_code); const char * WINAPI D3DXGetVertexShaderProfile(struct IDirect3DDevice9 *device); HRESULT WINAPI D3DXFindShaderComment(const DWORD *byte_code, DWORD fourcc, const void **data, UINT *size); HRESULT WINAPI D3DXGetShaderSamplers(const DWORD *byte_code, const char **samplers, UINT *count); HRESULT WINAPI D3DXAssembleShaderFromFileA(const char *filename, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages); HRESULT WINAPI D3DXAssembleShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages); #define D3DXAssembleShaderFromFile WINELIB_NAME_AW(D3DXAssembleShaderFromFile) HRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages); HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages); #define D3DXAssembleShaderFromResource WINELIB_NAME_AW(D3DXAssembleShaderFromResource) HRESULT WINAPI D3DXAssembleShader(const char *data, UINT data_len, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages); HRESULT WINAPI D3DXCompileShader(const char *src_data, UINT data_len, const D3DXMACRO *defines, ID3DXInclude *include, const char *function_name, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table); HRESULT WINAPI D3DXDisassembleShader(const DWORD *pShader, BOOL EnableColorCode, const char *pComments, struct ID3DXBuffer **ppDisassembly); HRESULT WINAPI D3DXCompileShaderFromFileA(const char *filename, const D3DXMACRO *defines, ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table); HRESULT WINAPI D3DXCompileShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines, ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table); #define D3DXCompileShaderFromFile WINELIB_NAME_AW(D3DXCompileShaderFromFile) HRESULT WINAPI D3DXCompileShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines, ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table); HRESULT WINAPI D3DXCompileShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines, ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table); #define D3DXCompileShaderFromResource WINELIB_NAME_AW(D3DXCompileShaderFromResource) HRESULT WINAPI D3DXPreprocessShader(const char *data, UINT data_len, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages); HRESULT WINAPI D3DXPreprocessShaderFromFileA(const char *filename, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages); HRESULT WINAPI D3DXPreprocessShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages); #define D3DXPreprocessShaderFromFile WINELIB_NAME_AW(D3DXPreprocessShaderFromFile) HRESULT WINAPI D3DXPreprocessShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages); HRESULT WINAPI D3DXPreprocessShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages); #define D3DXPreprocessShaderFromResource WINELIB_NAME_AW(D3DXPreprocessShaderFromResource) HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, ID3DXConstantTable **constant_table); HRESULT WINAPI D3DXGetShaderConstantTable(const DWORD *byte_code, ID3DXConstantTable **constant_table); HRESULT WINAPI D3DXGetShaderInputSemantics(const DWORD *pFunction, D3DXSEMANTIC *pSemantics, UINT *pCount); HRESULT WINAPI D3DXGetShaderOutputSemantics(const DWORD *pFunction, D3DXSEMANTIC *pSemantics, UINT *pCount); HRESULT WINAPI D3DXCreateTextureShader(const DWORD *pFunction, ID3DXTextureShader **ppTextureShader); HRESULT WINAPI D3DXCreateFragmentLinker(IDirect3DDevice9 *device, UINT size, ID3DXFragmentLinker **linker); HRESULT WINAPI D3DXCreateFragmentLinkerEx(IDirect3DDevice9 *device, UINT size, DWORD flags, ID3DXFragmentLinker **linker); #ifdef __cplusplus } #endif typedef struct _D3DXSHADER_CONSTANTTABLE { DWORD Size; DWORD Creator; DWORD Version; DWORD Constants; DWORD ConstantInfo; DWORD Flags; DWORD Target; } D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE; typedef struct _D3DXSHADER_CONSTANTINFO { DWORD Name; WORD RegisterSet; WORD RegisterIndex; WORD RegisterCount; WORD Reserved; DWORD TypeInfo; DWORD DefaultValue; } D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO; typedef struct _D3DXSHADER_TYPEINFO { WORD Class; WORD Type; WORD Rows; WORD Columns; WORD Elements; WORD StructMembers; DWORD StructMemberInfo; } D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO; typedef struct _D3DXSHADER_STRUCTMEMBERINFO { DWORD Name; DWORD TypeInfo; } D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO; #endif /* __D3DX9SHADER_H__ */ ================================================ FILE: wine/windows/d3dx9shape.h ================================================ /* * Copyright 2010 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx9.h" #ifndef __D3DX9SHAPE_H__ #define __D3DX9SHAPE_H__ #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI D3DXCreateBox(struct IDirect3DDevice9 *device, float width, float height, float depth, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency); HRESULT WINAPI D3DXCreateCylinder(struct IDirect3DDevice9 *device, float radius1, float radius2, float length, UINT slices, UINT stacks, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency); HRESULT WINAPI D3DXCreatePolygon(struct IDirect3DDevice9 *device, float length, UINT sides, struct ID3DXMesh **mesh, ID3DXBuffer **adjacency); HRESULT WINAPI D3DXCreateSphere(struct IDirect3DDevice9 *device, float radius, UINT slices, UINT stacks, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency); HRESULT WINAPI D3DXCreateTeapot(struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency); HRESULT WINAPI D3DXCreateTextA(struct IDirect3DDevice9 *device, HDC hdc, const char *text, float deviation, float extrusion, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency, GLYPHMETRICSFLOAT *glyphmetrics); HRESULT WINAPI D3DXCreateTextW(struct IDirect3DDevice9 *device, HDC hdc, const WCHAR *text, float deviation, FLOAT extrusion, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency, GLYPHMETRICSFLOAT *glyphmetrics); HRESULT WINAPI D3DXCreateTorus(struct IDirect3DDevice9 *device, float innerradius, float outerradius, UINT sides, UINT rings, struct ID3DXMesh **mesh, ID3DXBuffer **adjacency); #define D3DXCreateText WINELIB_NAME_AW(D3DXCreateText) #ifdef __cplusplus } #endif #endif /* __D3DX9SHAPE_H__ */ ================================================ FILE: wine/windows/d3dx9tex.h ================================================ /* * Copyright (C) 2008 Tony Wasserka * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "d3dx9.h" #ifndef __WINE_D3DX9TEX_H #define __WINE_D3DX9TEX_H /********************************************** ***************** Definitions **************** **********************************************/ #define D3DX_FILTER_NONE 0x00000001 #define D3DX_FILTER_POINT 0x00000002 #define D3DX_FILTER_LINEAR 0x00000003 #define D3DX_FILTER_TRIANGLE 0x00000004 #define D3DX_FILTER_BOX 0x00000005 #define D3DX_FILTER_MIRROR_U 0x00010000 #define D3DX_FILTER_MIRROR_V 0x00020000 #define D3DX_FILTER_MIRROR_W 0x00040000 #define D3DX_FILTER_MIRROR 0x00070000 #define D3DX_FILTER_DITHER 0x00080000 #define D3DX_FILTER_DITHER_DIFFUSION 0x00100000 #define D3DX_FILTER_SRGB_IN 0x00200000 #define D3DX_FILTER_SRGB_OUT 0x00400000 #define D3DX_FILTER_SRGB 0x00600000 #define D3DX_SKIP_DDS_MIP_LEVELS_MASK 0x1f #define D3DX_SKIP_DDS_MIP_LEVELS_SHIFT 26 #define D3DX_SKIP_DDS_MIP_LEVELS(l, f) ((((l) & D3DX_SKIP_DDS_MIP_LEVELS_MASK) \ << D3DX_SKIP_DDS_MIP_LEVELS_SHIFT) | ((f) == D3DX_DEFAULT ? D3DX_FILTER_BOX : (f))) #define D3DX_NORMALMAP_MIRROR_U 0x00010000 #define D3DX_NORMALMAP_MIRROR_V 0x00020000 #define D3DX_NORMALMAP_MIRROR 0x00030000 #define D3DX_NORMALMAP_INVERTSIGN 0x00080000 #define D3DX_NORMALMAP_COMPUTE_OCCLUSION 0x00100000 #define D3DX_CHANNEL_RED 0x00000001 #define D3DX_CHANNEL_BLUE 0x00000002 #define D3DX_CHANNEL_GREEN 0x00000004 #define D3DX_CHANNEL_ALPHA 0x00000008 #define D3DX_CHANNEL_LUMINANCE 0x00000010 /********************************************** ****************** Typedefs ****************** **********************************************/ typedef enum _D3DXIMAGE_FILEFORMAT { D3DXIFF_BMP, D3DXIFF_JPG, D3DXIFF_TGA, D3DXIFF_PNG, D3DXIFF_DDS, D3DXIFF_PPM, D3DXIFF_DIB, D3DXIFF_HDR, D3DXIFF_PFM, D3DXIFF_FORCE_DWORD = 0x7fffffff } D3DXIMAGE_FILEFORMAT; typedef struct _D3DXIMAGE_INFO { UINT Width; UINT Height; UINT Depth; UINT MipLevels; D3DFORMAT Format; D3DRESOURCETYPE ResourceType; D3DXIMAGE_FILEFORMAT ImageFileFormat; } D3DXIMAGE_INFO; /********************************************** ****************** Functions ***************** **********************************************/ /* Typedefs for callback functions */ typedef void (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *out, const D3DXVECTOR2 *texcoord, const D3DXVECTOR2 *texelsize, void *data); typedef void (WINAPI *LPD3DXFILL3D)(D3DXVECTOR4 *out, const D3DXVECTOR3 *texcoord, const D3DXVECTOR3 *texelsize, void *data); #ifdef __cplusplus extern "C" { #endif /* Image Information */ HRESULT WINAPI D3DXGetImageInfoFromFileA(const char *file, D3DXIMAGE_INFO *info); HRESULT WINAPI D3DXGetImageInfoFromFileW(const WCHAR *file, D3DXIMAGE_INFO *info); #define D3DXGetImageInfoFromFile WINELIB_NAME_AW(D3DXGetImageInfoFromFile) HRESULT WINAPI D3DXGetImageInfoFromResourceA(HMODULE module, const char *resource, D3DXIMAGE_INFO *info); HRESULT WINAPI D3DXGetImageInfoFromResourceW(HMODULE module, const WCHAR *resource, D3DXIMAGE_INFO *info); #define D3DXGetImageInfoFromResource WINELIB_NAME_AW(D3DXGetImageInfoFromResource) HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT data_size, D3DXIMAGE_INFO *info); /* Surface Loading/Saving */ HRESULT WINAPI D3DXLoadSurfaceFromFileA(struct IDirect3DSurface9 *destsurface, const PALETTEENTRY *destpalette, const RECT *destrect, const char *srcfile, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); HRESULT WINAPI D3DXLoadSurfaceFromFileW(struct IDirect3DSurface9 *destsurface, const PALETTEENTRY *destpalette, const RECT *destrect, const WCHAR *srcfile, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); #define D3DXLoadSurfaceFromFile WINELIB_NAME_AW(D3DXLoadSurfaceFromFile) HRESULT WINAPI D3DXLoadSurfaceFromResourceA(struct IDirect3DSurface9 *destsurface, const PALETTEENTRY *destpalette, const RECT *destrect, HMODULE srcmodule, const char *resource, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); HRESULT WINAPI D3DXLoadSurfaceFromResourceW(struct IDirect3DSurface9 *destsurface, const PALETTEENTRY *destpalette, const RECT *destrect, HMODULE srcmodule, const WCHAR *resource, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); #define D3DXLoadSurfaceFromResource WINELIB_NAME_AW(D3DXLoadSurfaceFromResource) HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(struct IDirect3DSurface9 *destsurface, const PALETTEENTRY *destpalette, const RECT *destrect, const void *srcdata, UINT srcdatasize, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); HRESULT WINAPI D3DXLoadSurfaceFromSurface(struct IDirect3DSurface9 *destsurface, const PALETTEENTRY *destpalette, const RECT *destrect, struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey); HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface, const PALETTEENTRY *dst_palette, const RECT *dst_rect, const void *src_memory, D3DFORMAT src_format, UINT src_pitch, const PALETTEENTRY *src_palette, const RECT *src_rect, DWORD filter, D3DCOLOR color_key); HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(struct ID3DXBuffer **destbuffer, D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect); HRESULT WINAPI D3DXSaveSurfaceToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect); HRESULT WINAPI D3DXSaveSurfaceToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect); #define D3DXSaveSurfaceToFile WINELIB_NAME_AW(D3DXSaveSurfaceToFile) /* Volume Loading/Saving */ HRESULT WINAPI D3DXLoadVolumeFromFileA(struct IDirect3DVolume9 *destvolume, const PALETTEENTRY *destpalette, const D3DBOX *destbox, const char *srcfile, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); HRESULT WINAPI D3DXLoadVolumeFromFileW( struct IDirect3DVolume9 *destvolume, const PALETTEENTRY *destpalette, const D3DBOX *destbox, const WCHAR *srcfile, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); #define D3DXLoadVolumeFromFile WINELIB_NAME_AW(D3DXLoadVolumeFromFile) HRESULT WINAPI D3DXLoadVolumeFromResourceA(struct IDirect3DVolume9 *destvolume, const PALETTEENTRY *destpalette, const D3DBOX *destbox, HMODULE srcmodule, const char *resource, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); HRESULT WINAPI D3DXLoadVolumeFromResourceW(struct IDirect3DVolume9 *destvolume, const PALETTEENTRY *destpalette, const D3DBOX *destbox, HMODULE srcmodule, const WCHAR *resource, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); #define D3DXLoadVolumeFromResource WINELIB_NAME_AW(D3DXLoadVolumeFromResource) HRESULT WINAPI D3DXLoadVolumeFromFileInMemory(struct IDirect3DVolume9 *destvolume, const PALETTEENTRY *destpalette, const D3DBOX *destbox, const void *srcdata, UINT srcdatasize, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo); HRESULT WINAPI D3DXLoadVolumeFromVolume(struct IDirect3DVolume9 *destvolume, const PALETTEENTRY *destpalette, const D3DBOX *destbox, struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey); HRESULT WINAPI D3DXLoadVolumeFromMemory(struct IDirect3DVolume9 *destvolume, const PALETTEENTRY *destpalette, const D3DBOX *destbox, const void *srcmemory, D3DFORMAT srcformat, UINT srcrowpitch, UINT srcslicepitch, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey); HRESULT WINAPI D3DXSaveVolumeToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox); HRESULT WINAPI D3DXSaveVolumeToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox); #define D3DXSaveVolumeToFile WINELIB_NAME_AW(D3DXSaveVolumeToFile) /* Texture, cube texture and volume texture creation */ HRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool); HRESULT WINAPI D3DXCheckCubeTextureRequirements(struct IDirect3DDevice9 *device, UINT *size, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool); HRESULT WINAPI D3DXCheckVolumeTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *depth, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool); HRESULT WINAPI D3DXCreateTexture(struct IDirect3DDevice9 *device, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DTexture9 **texture); HRESULT WINAPI D3DXCreateCubeTexture(struct IDirect3DDevice9 *device, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DCubeTexture9 **cube); HRESULT WINAPI D3DXCreateVolumeTexture(struct IDirect3DDevice9 *device, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DVolumeTexture9 **volume); HRESULT WINAPI D3DXCreateTextureFromFileA(struct IDirect3DDevice9 *device, const char *srcfile, struct IDirect3DTexture9 **texture); HRESULT WINAPI D3DXCreateTextureFromFileW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, struct IDirect3DTexture9 **texture); #define D3DXCreateTextureFromFile WINELIB_NAME_AW(D3DXCreateTextureFromFile) HRESULT WINAPI D3DXCreateCubeTextureFromFileA(struct IDirect3DDevice9 *device, const char *srcfile, struct IDirect3DCubeTexture9 **cube); HRESULT WINAPI D3DXCreateCubeTextureFromFileW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, struct IDirect3DCubeTexture9 **cube); #define D3DXCreateCubeTextureFromFile WINELIB_NAME_AW(D3DXCreateCubeTextureFromFile) HRESULT WINAPI D3DXCreateVolumeTextureFromFileA(struct IDirect3DDevice9 *device, const char *srcfile, struct IDirect3DVolumeTexture9 **volume); HRESULT WINAPI D3DXCreateVolumeTextureFromFileW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, struct IDirect3DVolumeTexture9 **volume); #define D3DXCreateVolumeTextureFromFile WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFile) HRESULT WINAPI D3DXCreateTextureFromResourceA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, struct IDirect3DTexture9 **texture); HRESULT WINAPI D3DXCreateTextureFromResourceW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, struct IDirect3DTexture9 **texture); #define D3DXCreateTextureFromResource WINELIB_NAME_AW(D3DXCreateTextureFromResource) HRESULT WINAPI D3DXCreateCubeTextureFromResourceA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, struct IDirect3DCubeTexture9 **cube); HRESULT WINAPI D3DXCreateCubeTextureFromResourceW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, struct IDirect3DCubeTexture9 **cube); #define D3DXCreateCubeTextureFromResource WINELIB_NAME_AW(D3DXCreateCubeTextureFromResource) HRESULT WINAPI D3DXCreateVolumeTextureFromResourceA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, struct IDirect3DVolumeTexture9 **volume); HRESULT WINAPI D3DXCreateVolumeTextureFromResourceW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, struct IDirect3DVolumeTexture9 **volume); #define D3DXCreateVolumeTextureFromResource WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResource) HRESULT WINAPI D3DXCreateTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture); HRESULT WINAPI D3DXCreateTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture); #define D3DXCreateTextureFromFileEx WINELIB_NAME_AW(D3DXCreateTextureFromFileEx) HRESULT WINAPI D3DXCreateCubeTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube); HRESULT WINAPI D3DXCreateCubeTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube); #define D3DXCreateCubeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromFileEx) HRESULT WINAPI D3DXCreateVolumeTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume); HRESULT WINAPI D3DXCreateVolumeTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume); #define D3DXCreateVolumeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFileEx) HRESULT WINAPI D3DXCreateTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture); HRESULT WINAPI D3DXCreateTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture); #define D3DXCreateTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateTextureFromResourceEx) HRESULT WINAPI D3DXCreateCubeTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube); HRESULT WINAPI D3DXCreateCubeTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube); #define D3DXCreateCubeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromResourceEx) HRESULT WINAPI D3DXCreateVolumeTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume); HRESULT WINAPI D3DXCreateVolumeTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume); #define D3DXCreateVolumeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResourceEx) HRESULT WINAPI D3DXCreateTextureFromFileInMemory(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, struct IDirect3DTexture9 **texture); HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemory(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, struct IDirect3DCubeTexture9 **cube); HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemory(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, struct IDirect3DVolumeTexture9 **volume); HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture); HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube); HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume); HRESULT WINAPI D3DXSaveTextureToFileInMemory(struct ID3DXBuffer **destbuffer, D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette); HRESULT WINAPI D3DXSaveTextureToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette); HRESULT WINAPI D3DXSaveTextureToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette); #define D3DXSaveTextureToFile WINELIB_NAME_AW(D3DXSaveTextureToFile) /* Other functions */ HRESULT WINAPI D3DXFilterTexture(struct IDirect3DBaseTexture9 *texture, const PALETTEENTRY *palette, UINT srclevel, DWORD filter); #define D3DXFilterCubeTexture D3DXFilterTexture #define D3DXFilterVolumeTexture D3DXFilterTexture HRESULT WINAPI D3DXFillTexture(struct IDirect3DTexture9 *texture, LPD3DXFILL2D function, void *data); HRESULT WINAPI D3DXFillCubeTexture(struct IDirect3DCubeTexture9 *cube, LPD3DXFILL3D function, void *data); HRESULT WINAPI D3DXFillVolumeTexture(struct IDirect3DVolumeTexture9 *volume, LPD3DXFILL3D function, void *data); HRESULT WINAPI D3DXFillTextureTX(struct IDirect3DTexture9 *texture, ID3DXTextureShader *texture_shader); HRESULT WINAPI D3DXFillCubeTextureTX(struct IDirect3DCubeTexture9 *cube, ID3DXTextureShader *texture_shader); HRESULT WINAPI D3DXFillVolumeTextureTX(struct IDirect3DVolumeTexture9 *volume, ID3DXTextureShader *texture_shader); HRESULT WINAPI D3DXComputeNormalMap(IDirect3DTexture9 *texture, IDirect3DTexture9 *srctexture, const PALETTEENTRY *srcpalette, DWORD flags, DWORD channel, float amplitude); #ifdef __cplusplus } #endif #endif /* __WINE_D3DX9TEX_H */ ================================================ FILE: wine/windows/d3dx9xof.h ================================================ /* * Copyright 2011 Dylan Smith * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3DX9XOF_H #define __WINE_D3DX9XOF_H #include "d3dx9.h" #ifdef __cplusplus extern "C" { #endif typedef DWORD D3DXF_FILEFORMAT; #define D3DXF_FILEFORMAT_BINARY 0 #define D3DXF_FILEFORMAT_TEXT 1 #define D3DXF_FILEFORMAT_COMPRESSED 2 typedef DWORD D3DXF_FILESAVEOPTIONS; #define D3DXF_FILESAVE_TOFILE 0x00 #define D3DXF_FILESAVE_TOWFILE 0x01 typedef DWORD D3DXF_FILELOADOPTIONS; #define D3DXF_FILELOAD_FROMFILE 0x00 #define D3DXF_FILELOAD_FROMWFILE 0x01 #define D3DXF_FILELOAD_FROMRESOURCE 0x02 #define D3DXF_FILELOAD_FROMMEMORY 0x03 typedef struct _D3DXF_FILELOADRESOURCE { HMODULE hModule; const char *lpName; const char *lpType; } D3DXF_FILELOADRESOURCE; typedef struct _D3DXF_FILELOADMEMORY { void *lpMemory; SIZE_T dSize; } D3DXF_FILELOADMEMORY; #ifndef _NO_COM DEFINE_GUID(IID_ID3DXFile, 0xcef08cf9, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01); DEFINE_GUID(IID_ID3DXFileSaveObject, 0xcef08cfa, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01); DEFINE_GUID(IID_ID3DXFileSaveData, 0xcef08cfb, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01); DEFINE_GUID(IID_ID3DXFileEnumObject, 0xcef08cfc, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01); DEFINE_GUID(IID_ID3DXFileData, 0xcef08cfd, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01); #endif /* _NO_COM */ typedef interface ID3DXFile *LPD3DXFILE, **LPLPD3DXFILE; typedef interface ID3DXFileSaveObject *LPD3DXFILESAVEOBJECT, **LPLPD3DXFILESAVEOBJECT; typedef interface ID3DXFileSaveData *LPD3DXFILESAVEDATA, **LPLPD3DXFILESAVEDATA; typedef interface ID3DXFileEnumObject *LPD3DXFILEENUMOBJECT, **LPLPD3DXFILEENUMOBJECT; typedef interface ID3DXFileData *LPD3DXFILEDATA, **LPLPD3DXFILEDATA; STDAPI D3DXFileCreate(struct ID3DXFile **file); #define INTERFACE ID3DXFile DECLARE_INTERFACE_IID_(ID3DXFile,IUnknown,"cef08cf9-7b4f-4429-9624-2a690a933201") { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** ID3DXFile methods ***/ STDMETHOD(CreateEnumObject)(THIS_ const void *src, D3DXF_FILELOADOPTIONS type, struct ID3DXFileEnumObject **enum_obj) PURE; STDMETHOD(CreateSaveObject)(THIS_ const void *data, D3DXF_FILESAVEOPTIONS flags, D3DXF_FILEFORMAT format, struct ID3DXFileSaveObject **save_obj) PURE; STDMETHOD(RegisterTemplates)(THIS_ const void *data, SIZE_T data_size) PURE; STDMETHOD(RegisterEnumTemplates)(THIS_ struct ID3DXFileEnumObject *enum_obj) PURE; }; #undef INTERFACE #define INTERFACE ID3DXFileSaveObject DECLARE_INTERFACE_IID_(ID3DXFileSaveObject,IUnknown,"cef08cfa-7b4f-4429-9624-2a690a933201") { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** ID3DXFileSaveObject methods ***/ STDMETHOD(GetFile)(THIS_ ID3DXFile **file) PURE; STDMETHOD(AddDataObject)(THIS_ REFGUID template_guid, const char *name, const GUID *guid, SIZE_T data_size, const void *data, struct ID3DXFileSaveData **obj) PURE; STDMETHOD(Save)(THIS) PURE; }; #undef INTERFACE #define INTERFACE ID3DXFileSaveData DECLARE_INTERFACE_IID_(ID3DXFileSaveData,IUnknown,"cef08cfb-7b4f-4429-9624-2a690a933201") { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** ID3DXFileSaveObject methods ***/ STDMETHOD(GetSave)(THIS_ ID3DXFileSaveObject **save_obj) PURE; STDMETHOD(GetName)(THIS_ char *name, SIZE_T *size) PURE; STDMETHOD(GetId)(THIS_ LPGUID) PURE; STDMETHOD(GetType)(THIS_ GUID*) PURE; STDMETHOD(AddDataObject)(THIS_ REFGUID template_guid, const char *name, const GUID *guid, SIZE_T data_size, const void *data, ID3DXFileSaveData **obj) PURE; STDMETHOD(AddDataReference)(THIS_ const char *name, const GUID *id) PURE; }; #undef INTERFACE #define INTERFACE ID3DXFileEnumObject DECLARE_INTERFACE_IID_(ID3DXFileEnumObject,IUnknown,"cef08cfc-7b4f-4429-9624-2a690a933201") { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** ID3DXFileEnumObject methods ***/ STDMETHOD(GetFile)(THIS_ ID3DXFile **file) PURE; STDMETHOD(GetChildren)(THIS_ SIZE_T*) PURE; STDMETHOD(GetChild)(THIS_ SIZE_T id, struct ID3DXFileData **child) PURE; STDMETHOD(GetDataObjectById)(THIS_ REFGUID guid, struct ID3DXFileData **obj) PURE; STDMETHOD(GetDataObjectByName)(THIS_ const char *name, struct ID3DXFileData **obj) PURE; }; #undef INTERFACE #define INTERFACE ID3DXFileData DECLARE_INTERFACE_IID_(ID3DXFileData,IUnknown,"cef08cfd-7b4f-4429-9624-2a690a933201") { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** ID3DXFileData methods ***/ STDMETHOD(GetEnum)(THIS_ ID3DXFileEnumObject **enum_obj) PURE; STDMETHOD(GetName)(THIS_ char *name, SIZE_T *size) PURE; STDMETHOD(GetId)(THIS_ LPGUID) PURE; STDMETHOD(Lock)(THIS_ SIZE_T *data_size, const void **data) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetType)(THIS_ GUID*) PURE; STDMETHOD_(BOOL,IsReference)(THIS) PURE; STDMETHOD(GetChildren)(THIS_ SIZE_T*) PURE; STDMETHOD(GetChild)(THIS_ SIZE_T id, ID3DXFileData **child) PURE; }; #undef INTERFACE /* D3DX File errors */ #define _FACD3DXF 0x876 #define D3DXFERR_BADOBJECT MAKE_HRESULT(1,_FACD3DXF,900) #define D3DXFERR_BADVALUE MAKE_HRESULT(1,_FACD3DXF,901) #define D3DXFERR_BADTYPE MAKE_HRESULT(1,_FACD3DXF,902) #define D3DXFERR_NOTFOUND MAKE_HRESULT(1,_FACD3DXF,903) #define D3DXFERR_NOTDONEYET MAKE_HRESULT(1,_FACD3DXF,904) #define D3DXFERR_FILENOTFOUND MAKE_HRESULT(1,_FACD3DXF,905) #define D3DXFERR_RESOURCENOTFOUND MAKE_HRESULT(1,_FACD3DXF,906) #define D3DXFERR_BADRESOURCE MAKE_HRESULT(1,_FACD3DXF,907) #define D3DXFERR_BADFILETYPE MAKE_HRESULT(1,_FACD3DXF,908) #define D3DXFERR_BADFILEVERSION MAKE_HRESULT(1,_FACD3DXF,909) #define D3DXFERR_BADFILEFLOATSIZE MAKE_HRESULT(1,_FACD3DXF,910) #define D3DXFERR_BADFILE MAKE_HRESULT(1,_FACD3DXF,911) #define D3DXFERR_PARSEERROR MAKE_HRESULT(1,_FACD3DXF,912) #define D3DXFERR_BADARRAYSIZE MAKE_HRESULT(1,_FACD3DXF,913) #define D3DXFERR_BADDATAREFERENCE MAKE_HRESULT(1,_FACD3DXF,914) #define D3DXFERR_NOMOREOBJECTS MAKE_HRESULT(1,_FACD3DXF,915) #define D3DXFERR_NOMOREDATA MAKE_HRESULT(1,_FACD3DXF,916) #define D3DXFERR_BADCACHEFILE MAKE_HRESULT(1,_FACD3DXF,917) #ifdef __cplusplus } #endif #endif /* __WINE_D3DX9XOF_H */ ================================================ FILE: wine/windows/davclnt.h ================================================ /* * Copyright 2015 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DAVCLNT_H #define __WINE_DAVCLNT_H #define OPAQUE_HANDLE DWORD #define DAV_AUTHN_SCHEME_BASIC 0x00000001 #define DAV_AUTHN_SCHEME_NTLM 0x00000002 #define DAV_AUTHN_SCHEME_PASSPORT 0x00000004 #define DAV_AUTHN_SCHEME_DIGEST 0x00000008 #define DAV_AUTHN_SCHEME_NEGOTIATE 0x00000010 #define DAV_AUTHN_SCHEME_CERT 0x00010000 #define DAV_AUTHN_SCHEME_FBA 0x00100000 typedef enum { DefaultBehavior, RetryRequest, CancelRequest } AUTHNEXTSTEP; typedef struct _DAV_CALLBACK_AUTH_BLOB { PVOID pBuffer; ULONG ulSize; ULONG ulType; } DAV_CALLBACK_AUTH_BLOB, *PDAV_CALLBACK_AUTH_BLOB; typedef struct _DAV_CALLBACK_AUTH_UNP { LPWSTR pszUserName; ULONG ulUserNameLength; LPWSTR pszPassword; ULONG ulPasswordLength; } DAV_CALLBACK_AUTH_UNP, *PDAV_CALLBACK_AUTH_UNP; typedef struct _DAV_CALLBACK_CRED { DAV_CALLBACK_AUTH_BLOB AuthBlob; DAV_CALLBACK_AUTH_UNP UNPBlob; BOOL bAuthBlobValid; BOOL bSave; } DAV_CALLBACK_CRED, *PDAV_CALLBACK_CRED; typedef DWORD (*PFNDAVAUTHCALLBACK_FREECRED) (PVOID); typedef DWORD (*PFNDAVAUTHCALLBACK) (LPWSTR,LPWSTR,DWORD,DWORD,PDAV_CALLBACK_CRED,AUTHNEXTSTEP*,PFNDAVAUTHCALLBACK_FREECRED*); DWORD WINAPI DavGetHTTPFromUNCPath(LPCWSTR,LPWSTR,LPDWORD); DWORD WINAPI DavGetUNCFromHTTPPath(LPCWSTR,LPWSTR,LPDWORD); OPAQUE_HANDLE WINAPI DavRegisterAuthCallback(PFNDAVAUTHCALLBACK,ULONG); VOID WINAPI DavUnregisterAuthCallback(OPAQUE_HANDLE); #endif /* __WINE_DAVCLNT_H */ ================================================ FILE: wine/windows/dbccmd.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a1d-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IDBCreateCommand : IUnknown { [local] HRESULT CreateCommand([in] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppCommand); [call_as(CreateCommand)] HRESULT RemoteCreateCommand([in] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppCommand, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/dbcses.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a5d-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IDBCreateSession : IUnknown { [local] HRESULT CreateSession([in] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppDBSession); [call_as(CreateSession)] HRESULT RemoteCreateSession([in] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppDBSession, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/dbdsad.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a7a-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IDBDataSourceAdmin : IUnknown { [local] HRESULT CreateDataSource([in] ULONG cPropertySets, [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[], [in] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppDBSession); [call_as(CreateDataSource)] HRESULT RemoteCreateDataSource([in] ULONG cPropertySets, [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets, [in] IUnknown *pUnkOuter, [in] REFIID riid, [in, out, unique, iid_is(riid)] IUnknown **ppDBSession, [in] ULONG cTotalProps, [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT DestroyDataSource(); [call_as(DestroyDataSource)] HRESULT RemoteDestroyDataSource([out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetCreationProperties([in] ULONG cPropertyIDSets, [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[], [in, out] ULONG *pcPropertyInfoSets, [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets, [out, annotation("__deref_out_z_opt")] OLECHAR **ppDescBuffer); [call_as(GetCreationProperties)] HRESULT RemoteGetCreationProperties([in] ULONG cPropertyIDSets, [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, [in, out] ULONG *pcPropertyInfoSets, [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets, [in, out] DBCOUNTITEM *pcOffsets, [out, size_is(,(ULONG)*pcOffsets)] DBBYTEOFFSET **prgDescOffsets, [in, out] ULONG *pcbDescBuffer, [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT ModifyDataSource([in] ULONG cPropertySets, [in, size_is(cPropertySets)] DBPROPSET rgPropertySets[]); [call_as(ModifyDataSource)] HRESULT RemoteModifyDataSource([in] ULONG cPropertySets, [in, size_is(cPropertySets)] DBPROPSET *rgPropertySets, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/dbghelp.h ================================================ /* * Declarations for DBGHELP * * Copyright (C) 2003 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DBGHELP_H #define __WINE_DBGHELP_H /* A set of documentation macros (see also imagehlp.h) */ #ifndef __deref_out # define __deref_out #endif #ifndef __deref_out_opt # define __deref_out_opt #endif #ifndef __deref_opt_out # define __deref_opt_out #endif #ifndef __in # define __in #endif #ifndef __in_opt # define __in_opt #endif #ifndef __in_bcount # define __in_bcount(x) #endif #ifndef __in_bcount_opt # define __in_bcount_opt(x) #endif #ifndef __in_ecount # define __in_ecount(x) #endif #ifndef __inout # define __inout #endif #ifndef __inout_opt # define __inout_opt #endif #ifndef __inout_bcount # define __inout_bcount(x) #endif #ifndef __inout_ecount # define __inout_ecount(x) #endif #ifndef __out # define __out #endif #ifndef __out_opt # define __out_opt #endif #ifndef __out_bcount # define __out_bcount(x) #endif #ifndef __out_bcount_opt # define __out_bcount_opt(x) #endif #ifndef __out_ecount # define __out_ecount(x) #endif #ifndef __out_ecount_opt # define __out_ecount_opt(x) #endif #ifndef __out_xcount # define __out_xcount(x) #endif #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifdef _WIN64 #ifndef _IMAGEHLP64 #define _IMAGEHLP64 #endif #endif #define IMAGEAPI WINAPI #define DBHLPAPI IMAGEAPI typedef struct _LOADED_IMAGE { PSTR ModuleName; HANDLE hFile; PUCHAR MappedAddress; PIMAGE_NT_HEADERS FileHeader; PIMAGE_SECTION_HEADER LastRvaSection; ULONG NumberOfSections; PIMAGE_SECTION_HEADER Sections; ULONG Characteristics; BOOLEAN fSystemImage; BOOLEAN fDOSImage; BOOLEAN fReadOnly; UCHAR Version; LIST_ENTRY Links; ULONG SizeOfImage; } LOADED_IMAGE, *PLOADED_IMAGE; /************************* * IMAGEHLP equiv * *************************/ typedef enum { AddrMode1616, AddrMode1632, AddrModeReal, AddrModeFlat } ADDRESS_MODE; #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define ADDRESS ADDRESS64 #define LPADDRESS LPADDRESS64 #else typedef struct _tagADDRESS { DWORD Offset; WORD Segment; ADDRESS_MODE Mode; } ADDRESS, *LPADDRESS; #endif typedef struct _tagADDRESS64 { DWORD64 Offset; WORD Segment; ADDRESS_MODE Mode; } ADDRESS64, *LPADDRESS64; #define SYMF_OMAP_GENERATED 0x00000001 #define SYMF_OMAP_MODIFIED 0x00000002 #define SYMF_USER_GENERATED 0x00000004 #define SYMF_REGISTER 0x00000008 #define SYMF_REGREL 0x00000010 #define SYMF_FRAMEREL 0x00000020 #define SYMF_PARAMETER 0x00000040 #define SYMF_LOCAL 0x00000080 #define SYMF_CONSTANT 0x00000100 #define SYMF_EXPORT 0x00000200 #define SYMF_FORWARDER 0x00000400 #define SYMF_FUNCTION 0x00000800 #define SYMF_VIRTUAL 0x00001000 #define SYMF_THUNK 0x00002000 #define SYMF_TLSREL 0x00004000 typedef enum { SymNone = 0, SymCoff, SymCv, SymPdb, SymExport, SymDeferred, SymSym, SymDia, SymVirtual, NumSymTypes } SYM_TYPE; #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64 #define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64 #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64 #define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64 #else typedef struct _IMAGEHLP_SYMBOL { DWORD SizeOfStruct; DWORD Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; CHAR Name[1]; } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL; typedef struct _IMAGEHLP_SYMBOLW { DWORD SizeOfStruct; DWORD Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; WCHAR Name[1]; } IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW; #endif typedef struct _IMAGEHLP_SYMBOL64 { DWORD SizeOfStruct; DWORD64 Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; CHAR Name[1]; } IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; typedef struct _IMAGEHLP_SYMBOLW64 { DWORD SizeOfStruct; DWORD64 Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; WCHAR Name[1]; } IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64; #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define IMAGEHLP_MODULE IMAGEHLP_MODULE64 #define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64 #define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64 #define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64 #else typedef struct _IMAGEHLP_MODULE { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; CHAR ModuleName[32]; CHAR ImageName[256]; CHAR LoadedImageName[256]; } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE; typedef struct _IMAGEHLP_MODULEW { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; WCHAR ModuleName[32]; WCHAR ImageName[256]; WCHAR LoadedImageName[256]; } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW; #endif typedef struct _IMAGEHLP_MODULE64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; CHAR ModuleName[32]; CHAR ImageName[256]; CHAR LoadedImageName[256]; CHAR LoadedPdbName[256]; DWORD CVSig; CHAR CVData[MAX_PATH*3]; DWORD PdbSig; GUID PdbSig70; DWORD PdbAge; BOOL PdbUnmatched; BOOL DbgUnmatched; BOOL LineNumbers; BOOL GlobalSymbols; BOOL TypeInfo; BOOL SourceIndexed; BOOL Publics; } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; typedef struct _IMAGEHLP_MODULEW64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; WCHAR ModuleName[32]; WCHAR ImageName[256]; WCHAR LoadedImageName[256]; WCHAR LoadedPdbName[256]; DWORD CVSig; WCHAR CVData[MAX_PATH*3]; DWORD PdbSig; GUID PdbSig70; DWORD PdbAge; BOOL PdbUnmatched; BOOL DbgUnmatched; BOOL LineNumbers; BOOL GlobalSymbols; BOOL TypeInfo; BOOL SourceIndexed; BOOL Publics; } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64; #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define IMAGEHLP_LINE IMAGEHLP_LINE64 #define PIMAGEHLP_LINE PIMAGEHLP_LINE64 #define IMAGEHLP_LINEW IMAGEHLP_LINEW64 #define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64 #else typedef struct _IMAGEHLP_LINE { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PCHAR FileName; DWORD Address; } IMAGEHLP_LINE, *PIMAGEHLP_LINE; typedef struct _IMAGEHLP_LINEW { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PWSTR FileName; DWORD Address; } IMAGEHLP_LINEW, *PIMAGEHLP_LINEW; #endif typedef struct _IMAGEHLP_LINE64 { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PCHAR FileName; DWORD64 Address; } IMAGEHLP_LINE64, *PIMAGEHLP_LINE64; typedef struct _IMAGEHLP_LINEW64 { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PWSTR FileName; DWORD64 Address; } IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64; typedef struct _SOURCEFILE { DWORD64 ModBase; PCHAR FileName; } SOURCEFILE, *PSOURCEFILE; typedef struct _SOURCEFILEW { DWORD64 ModBase; PWSTR FileName; } SOURCEFILEW, *PSOURCEFILEW; #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003 #define CBA_SYMBOLS_UNLOADED 0x00000004 #define CBA_DUPLICATE_SYMBOL 0x00000005 #define CBA_READ_MEMORY 0x00000006 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007 #define CBA_SET_OPTIONS 0x00000008 #define CBA_EVENT 0x00000010 #define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020 #define CBA_DEBUG_INFO 0x10000000 typedef struct _IMAGEHLP_CBA_READ_MEMORY { DWORD64 addr; PVOID buf; DWORD bytes; DWORD *bytesread; } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY; enum { sevInfo = 0, sevProblem, sevAttn, sevFatal, sevMax }; #define EVENT_SRCSPEW_START 100 #define EVENT_SRCSPEW 100 #define EVENT_SRCSPEW_END 199 typedef struct _IMAGEHLP_CBA_EVENT { DWORD severity; DWORD code; PCHAR desc; PVOID object; } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT; typedef struct _IMAGEHLP_CBA_EVENTW { DWORD severity; DWORD code; PCWSTR desc; PVOID object; } IMAGEHLP_CBA_EVENTW, *PIMAGEHLP_CBA_EVENTW; #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64 #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 #else typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD CheckSum; DWORD TimeDateStamp; CHAR FileName[MAX_PATH]; BOOLEAN Reparse; HANDLE hFile; } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD; #endif typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD CheckSum; DWORD TimeDateStamp; CHAR FileName[MAX_PATH]; BOOLEAN Reparse; HANDLE hFile; DWORD Flags; } IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD CheckSum; DWORD TimeDateStamp; WCHAR FileName[MAX_PATH + 1]; BOOLEAN Reparse; HANDLE hFile; DWORD Flags; } IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64; #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64 #define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64 #else typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { DWORD SizeOfStruct; DWORD NumberOfDups; PIMAGEHLP_SYMBOL Symbol; DWORD SelectedSymbol; } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL; #endif typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 { DWORD SizeOfStruct; DWORD NumberOfDups; PIMAGEHLP_SYMBOL64 Symbol; DWORD SelectedSymbol; } IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64; #define SYMOPT_CASE_INSENSITIVE 0x00000001 #define SYMOPT_UNDNAME 0x00000002 #define SYMOPT_DEFERRED_LOADS 0x00000004 #define SYMOPT_NO_CPP 0x00000008 #define SYMOPT_LOAD_LINES 0x00000010 #define SYMOPT_OMAP_FIND_NEAREST 0x00000020 #define SYMOPT_LOAD_ANYTHING 0x00000040 #define SYMOPT_IGNORE_CVREC 0x00000080 #define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100 #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200 #define SYMOPT_EXACT_SYMBOLS 0x00000400 #define SYMOPT_WILD_UNDERSCORE 0x00000800 #define SYMOPT_USE_DEFAULTS 0x00001000 /* latest SDK defines: #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 #define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 */ #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 #define SYMOPT_PUBLICS_ONLY 0x00004000 #define SYMOPT_NO_PUBLICS 0x00008000 #define SYMOPT_AUTO_PUBLICS 0x00010000 #define SYMOPT_NO_IMAGE_SEARCH 0x00020000 #define SYMOPT_SECURE 0x00040000 #define SYMOPT_NO_PROMPTS 0x00080000 #define SYMOPT_OVERWRITE 0x00100000 #define SYMOPT_IGNORE_IMAGEDIR 0x00200000 #define SYMOPT_DEBUG 0x80000000 typedef struct _IMAGEHLP_STACK_FRAME { ULONG64 InstructionOffset; ULONG64 ReturnOffset; ULONG64 FrameOffset; ULONG64 StackOffset; ULONG64 BackingStoreOffset; ULONG64 FuncTableEntry; ULONG64 Params[4]; ULONG64 Reserved[5]; BOOL Virtual; ULONG Reserved2; } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; #define DBHHEADER_DEBUGDIRS 0x1 typedef struct _DBGHELP_MODLOAD_DATA { DWORD ssize; DWORD ssig; PVOID data; DWORD size; DWORD flags; } MODLOAD_DATA, *PMODLOAD_DATA; /************************* * MiniDUMP * *************************/ #include /* DebugHelp */ #define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */ #define MINIDUMP_VERSION (42899) typedef DWORD RVA; typedef ULONG64 RVA64; typedef enum _MINIDUMP_TYPE { MiniDumpNormal = 0x0000, MiniDumpWithDataSegs = 0x0001, MiniDumpWithFullMemory = 0x0002, MiniDumpWithHandleData = 0x0004, MiniDumpFilterMemory = 0x0008, MiniDumpScanMemory = 0x0010, MiniDumpWithUnloadedModules = 0x0020, MiniDumpWithIndirectlyReferencedMemory = 0x0040, MiniDumpFilterModulePaths = 0x0080, MiniDumpWithProcessThreadData = 0x0100, MiniDumpWithPrivateReadWriteMemory = 0x0200, MiniDumpWithoutOptionalData = 0x0400, MiniDumpWithFullMemoryInfo = 0x0800, MiniDumpWithThreadInfo = 0x1000, MiniDumpWithCodeSegs = 0x2000 } MINIDUMP_TYPE; typedef enum _MINIDUMP_CALLBACK_TYPE { ModuleCallback, ThreadCallback, ThreadExCallback, IncludeThreadCallback, IncludeModuleCallback, MemoryCallback, } MINIDUMP_CALLBACK_TYPE; typedef struct _MINIDUMP_THREAD_CALLBACK { ULONG ThreadId; HANDLE ThreadHandle; CONTEXT Context; ULONG SizeOfContext; ULONG64 StackBase; ULONG64 StackEnd; } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; typedef struct _MINIDUMP_THREAD_EX_CALLBACK { ULONG ThreadId; HANDLE ThreadHandle; CONTEXT Context; ULONG SizeOfContext; ULONG64 StackBase; ULONG64 StackEnd; ULONG64 BackingStoreBase; ULONG64 BackingStoreEnd; } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK; typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK { ULONG ThreadId; } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK; typedef enum _THREAD_WRITE_FLAGS { ThreadWriteThread = 0x0001, ThreadWriteStack = 0x0002, ThreadWriteContext = 0x0004, ThreadWriteBackingStore = 0x0008, ThreadWriteInstructionWindow = 0x0010, ThreadWriteThreadData = 0x0020, ThreadWriteThreadInfo = 0x0040 } THREAD_WRITE_FLAGS; typedef struct _MINIDUMP_MODULE_CALLBACK { PWCHAR FullPath; ULONG64 BaseOfImage; ULONG SizeOfImage; ULONG CheckSum; ULONG TimeDateStamp; VS_FIXEDFILEINFO VersionInfo; PVOID CvRecord; ULONG SizeOfCvRecord; PVOID MiscRecord; ULONG SizeOfMiscRecord; } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK; typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { ULONG64 BaseOfImage; } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK; typedef enum _MODULE_WRITE_FLAGS { ModuleWriteModule = 0x0001, ModuleWriteDataSeg = 0x0002, ModuleWriteMiscRecord = 0x0004, ModuleWriteCvRecord = 0x0008, ModuleReferencedByMemory = 0x0010, ModuleWriteTlsData = 0x0020, ModuleWriteCodeSegs = 0x0040, } MODULE_WRITE_FLAGS; typedef struct _MINIDUMP_CALLBACK_INPUT { ULONG ProcessId; HANDLE ProcessHandle; ULONG CallbackType; union { MINIDUMP_THREAD_CALLBACK Thread; MINIDUMP_THREAD_EX_CALLBACK ThreadEx; MINIDUMP_MODULE_CALLBACK Module; MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread; MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule; } DUMMYUNIONNAME; } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT; typedef struct _MINIDUMP_CALLBACK_OUTPUT { union { ULONG ModuleWriteFlags; ULONG ThreadWriteFlags; struct { ULONG64 MemoryBase; ULONG MemorySize; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT; typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT); typedef struct _MINIDUMP_CALLBACK_INFORMATION { MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; void* CallbackParam; } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION; typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { ULONG DataSize; RVA Rva; } MINIDUMP_LOCATION_DESCRIPTOR; typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 { ULONG64 DataSize; RVA64 Rva; } MINIDUMP_LOCATION_DESCRIPTOR64; typedef struct _MINIDUMP_DIRECTORY { ULONG StreamType; MINIDUMP_LOCATION_DESCRIPTOR Location; } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY; typedef struct _MINIDUMP_EXCEPTION { ULONG ExceptionCode; ULONG ExceptionFlags; ULONG64 ExceptionRecord; ULONG64 ExceptionAddress; ULONG NumberParameters; ULONG __unusedAlignment; ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION; typedef struct _MINIDUMP_EXCEPTION_INFORMATION { DWORD ThreadId; PEXCEPTION_POINTERS ExceptionPointers; BOOL ClientPointers; } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION; typedef struct MINIDUMP_EXCEPTION_STREAM { ULONG ThreadId; ULONG __alignment; MINIDUMP_EXCEPTION ExceptionRecord; MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM; typedef struct _MINIDUMP_HEADER { DWORD Signature; DWORD Version; DWORD NumberOfStreams; RVA StreamDirectoryRva; DWORD CheckSum; union { DWORD Reserved; DWORD TimeDateStamp; } DUMMYUNIONNAME; ULONG64 Flags; } MINIDUMP_HEADER, *PMINIDUMP_HEADER; typedef struct _MINIDUMP_MEMORY_DESCRIPTOR { ULONG64 StartOfMemoryRange; MINIDUMP_LOCATION_DESCRIPTOR Memory; } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR; typedef struct _MINIDUMP_MEMORY_LIST { ULONG NumberOfMemoryRanges; MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[1]; /* FIXME: 0-sized array not supported */ } MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST; #define MINIDUMP_MISC1_PROCESS_ID 0x00000001 #define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002 typedef struct _MINIDUMP_MISC_INFO { ULONG SizeOfInfo; ULONG Flags1; ULONG ProcessId; ULONG ProcessCreateTime; ULONG ProcessUserTime; ULONG ProcessKernelTime; } MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO; typedef struct _MINIDUMP_MODULE { ULONG64 BaseOfImage; ULONG SizeOfImage; ULONG CheckSum; ULONG TimeDateStamp; RVA ModuleNameRva; VS_FIXEDFILEINFO VersionInfo; MINIDUMP_LOCATION_DESCRIPTOR CvRecord; MINIDUMP_LOCATION_DESCRIPTOR MiscRecord; ULONG64 Reserved0; ULONG64 Reserved1; } MINIDUMP_MODULE, *PMINIDUMP_MODULE; typedef struct _MINIDUMP_MODULE_LIST { ULONG NumberOfModules; MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */ } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST; typedef struct _MINIDUMP_STRING { ULONG Length; WCHAR Buffer[1]; /* FIXME: O-sized array not supported */ } MINIDUMP_STRING, *PMINIDUMP_STRING; typedef struct _MINIDUMP_SYSTEM_INFO { USHORT ProcessorArchitecture; USHORT ProcessorLevel; USHORT ProcessorRevision; union { USHORT Reserved0; struct { UCHAR NumberOfProcessors; UCHAR ProductType; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; ULONG MajorVersion; ULONG MinorVersion; ULONG BuildNumber; ULONG PlatformId; RVA CSDVersionRva; union { ULONG Reserved1; struct { USHORT SuiteMask; USHORT Reserved2; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME1; union _CPU_INFORMATION { struct { ULONG VendorId[3]; ULONG VersionInformation; ULONG FeatureInformation; ULONG AMDExtendedCpuFeatures; } X86CpuInfo; struct { ULONG64 ProcessorFeatures[2]; } OtherCpuInfo; } Cpu; } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO; typedef struct _MINIDUMP_THREAD { ULONG ThreadId; ULONG SuspendCount; ULONG PriorityClass; ULONG Priority; ULONG64 Teb; MINIDUMP_MEMORY_DESCRIPTOR Stack; MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; } MINIDUMP_THREAD, *PMINIDUMP_THREAD; typedef struct _MINIDUMP_THREAD_LIST { ULONG NumberOfThreads; MINIDUMP_THREAD Threads[1]; /* FIXME: no support of 0 sized array */ } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST; typedef struct _MINIDUMP_USER_STREAM { ULONG Type; ULONG BufferSize; void* Buffer; } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM; typedef struct _MINIDUMP_USER_STREAM_INFORMATION { ULONG UserStreamCount; PMINIDUMP_USER_STREAM UserStreamArray; } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION; typedef enum _MINIDUMP_STREAM_TYPE { UnusedStream = 0, ReservedStream0 = 1, ReservedStream1 = 2, ThreadListStream = 3, ModuleListStream = 4, MemoryListStream = 5, ExceptionStream = 6, SystemInfoStream = 7, ThreadExListStream = 8, Memory64ListStream = 9, CommentStreamA = 10, CommentStreamW = 11, HandleDataStream = 12, FunctionTableStream = 13, UnloadedModuleListStream = 14, MiscInfoStream = 15, MemoryInfoListStream = 16, ThreadInfoListStream = 17, LastReservedStream = 0xffff } MINIDUMP_STREAM_TYPE; BOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, const PMINIDUMP_EXCEPTION_INFORMATION, const PMINIDUMP_USER_STREAM_INFORMATION, const PMINIDUMP_CALLBACK_INFORMATION); BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*, ULONG*); #include /************************* * MODULE handling * *************************/ /* flags for SymLoadModuleEx */ #define SLMFLAG_VIRTUAL 0x1 #define SLMFLAG_NO_SYMBOLS 0x4 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID); BOOL WINAPI EnumerateLoadedModules64(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID); typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID); BOOL WINAPI EnumerateLoadedModulesW64(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID); BOOL WINAPI EnumerateLoadedModulesEx(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID); BOOL WINAPI EnumerateLoadedModulesExW(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID); typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID); BOOL WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID); typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID); BOOL WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID); BOOL WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64); BOOL WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64); DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64); DWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD); DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD); DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD); BOOL WINAPI SymUnloadModule64(HANDLE, DWORD64); /************************* * Symbol Handling * *************************/ #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1 #define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER /* 0x08 */ #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL /* 0x10 */ #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL /* 0x20 */ #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER /* 0x40 */ #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL /* 0x80 */ #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT /* 0x100 */ #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION /* 0x800 */ #define SYMFLAG_VALUEPRESENT 0x00000001 #define SYMFLAG_REGISTER 0x00000008 #define SYMFLAG_REGREL 0x00000010 #define SYMFLAG_FRAMEREL 0x00000020 #define SYMFLAG_PARAMETER 0x00000040 #define SYMFLAG_LOCAL 0x00000080 #define SYMFLAG_CONSTANT 0x00000100 #define SYMFLAG_EXPORT 0x00000200 #define SYMFLAG_FORWARDER 0x00000400 #define SYMFLAG_FUNCTION 0x00000800 #define SYMFLAG_VIRTUAL 0x00001000 #define SYMFLAG_THUNK 0x00002000 #define SYMFLAG_TLSREL 0x00004000 #define SYMFLAG_SLOT 0x00008000 #define MAX_SYM_NAME 2000 typedef struct _SYMBOL_INFO { ULONG SizeOfStruct; ULONG TypeIndex; ULONG64 Reserved[2]; ULONG Index; ULONG Size; ULONG64 ModBase; ULONG Flags; ULONG64 Value; ULONG64 Address; ULONG Register; ULONG Scope; ULONG Tag; ULONG NameLen; ULONG MaxNameLen; CHAR Name[1]; } SYMBOL_INFO, *PSYMBOL_INFO; typedef struct _SYMBOL_INFOW { ULONG SizeOfStruct; ULONG TypeIndex; ULONG64 Reserved[2]; ULONG Index; ULONG Size; ULONG64 ModBase; ULONG Flags; ULONG64 Value; ULONG64 Address; ULONG Register; ULONG Scope; ULONG Tag; ULONG NameLen; ULONG MaxNameLen; WCHAR Name[1]; } SYMBOL_INFOW, *PSYMBOL_INFOW; typedef struct _SYMBOL_INFO_PACKAGE { SYMBOL_INFO si; CHAR name[MAX_SYM_NAME+1]; } SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE; typedef struct _SYMBOL_INFO_PACKAGEW { SYMBOL_INFOW si; WCHAR name[MAX_SYM_NAME+1]; } SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW; typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { TI_GET_SYMTAG, TI_GET_SYMNAME, TI_GET_LENGTH, TI_GET_TYPE, TI_GET_TYPEID, TI_GET_BASETYPE, TI_GET_ARRAYINDEXTYPEID, TI_FINDCHILDREN, TI_GET_DATAKIND, TI_GET_ADDRESSOFFSET, TI_GET_OFFSET, TI_GET_VALUE, TI_GET_COUNT, TI_GET_CHILDRENCOUNT, TI_GET_BITPOSITION, TI_GET_VIRTUALBASECLASS, TI_GET_VIRTUALTABLESHAPEID, TI_GET_VIRTUALBASEPOINTEROFFSET, TI_GET_CLASSPARENTID, TI_GET_NESTED, TI_GET_SYMINDEX, TI_GET_LEXICALPARENT, TI_GET_ADDRESS, TI_GET_THISADJUST, TI_GET_UDTKIND, TI_IS_EQUIV_TO, TI_GET_CALLING_CONVENTION, } IMAGEHLP_SYMBOL_TYPE_INFO; #define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001 #define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002 typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS { ULONG SizeOfStruct; ULONG Flags; ULONG NumIds; PULONG TypeIds; ULONG64 TagFilter; ULONG NumReqs; IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds; PULONG_PTR ReqOffsets; PULONG ReqSizes; ULONG_PTR ReqStride; ULONG_PTR BufferSize; PVOID Buffer; ULONG EntriesMatched; ULONG EntriesFilled; ULONG64 TagsFound; ULONG64 AllReqsValid; ULONG NumReqsValid; PULONG64 ReqsValid; } IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS; typedef struct _TI_FINDCHILDREN_PARAMS { ULONG Count; ULONG Start; ULONG ChildId[1]; } TI_FINDCHILDREN_PARAMS; #define UNDNAME_COMPLETE (0x0000) #define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) #define UNDNAME_NO_MS_KEYWORDS (0x0002) #define UNDNAME_NO_FUNCTION_RETURNS (0x0004) #define UNDNAME_NO_ALLOCATION_MODEL (0x0008) #define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010) #define UNDNAME_NO_MS_THISTYPE (0x0020) #define UNDNAME_NO_CV_THISTYPE (0x0040) #define UNDNAME_NO_THISTYPE (0x0060) #define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080) #define UNDNAME_NO_THROW_SIGNATURES (0x0100) #define UNDNAME_NO_MEMBER_TYPE (0x0200) #define UNDNAME_NO_RETURN_UDT_MODEL (0x0400) #define UNDNAME_32_BIT_DECODE (0x0800) #define UNDNAME_NAME_ONLY (0x1000) #define UNDNAME_NO_ARGUMENTS (0x2000) #define UNDNAME_NO_SPECIAL_SYMS (0x4000) #define SYMSEARCH_MASKOBJS 0x01 #define SYMSEARCH_RECURSE 0x02 #define SYMSEARCH_GLOBALSONLY 0x04 BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID); BOOL WINAPI SymGetTypeInfoEx(HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS); typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID); typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID); BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID); BOOL WINAPI SymEnumTypesW(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID); BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*); BOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*); BOOL WINAPI SymFromToken(HANDLE, DWORD64, DWORD, PSYMBOL_INFO); BOOL WINAPI SymFromTokenW(HANDLE, DWORD64, DWORD, PSYMBOL_INFOW); BOOL WINAPI SymFromName(HANDLE, PCSTR, PSYMBOL_INFO); BOOL WINAPI SymFromNameW(HANDLE, PCWSTR, PSYMBOL_INFOW); BOOL WINAPI SymGetSymFromAddr64(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64); BOOL WINAPI SymGetSymFromName64(HANDLE, PCSTR, PIMAGEHLP_SYMBOL64); BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, PCSTR, PSYMBOL_INFO); BOOL WINAPI SymGetTypeFromNameW(HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW); BOOL WINAPI SymGetSymNext64(HANDLE, PIMAGEHLP_SYMBOL64); BOOL WINAPI SymGetSymNextW64(HANDLE, PIMAGEHLP_SYMBOLW64); BOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64); BOOL WINAPI SymGetSymPrevW64(HANDLE, PIMAGEHLP_SYMBOLW64); BOOL WINAPI SymEnumSym(HANDLE,ULONG64,PSYM_ENUMERATESYMBOLS_CALLBACK,PVOID); BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID); BOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID); BOOL WINAPI SymEnumerateSymbols64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID); BOOL WINAPI SymEnumerateSymbolsW64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID); BOOL WINAPI SymEnumSymbolsForAddr(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID); BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID); typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64); BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64); BOOL WINAPI SymRegisterCallbackW64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64); BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64, PSTR, DWORD); BOOL WINAPI SymMatchString(PCSTR, PCSTR, BOOL); BOOL WINAPI SymMatchStringA(PCSTR, PCSTR, BOOL); BOOL WINAPI SymMatchStringW(PCWSTR, PCWSTR, BOOL); BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD); BOOL WINAPI SymSearchW(HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD); DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD); DWORD WINAPI UnDecorateSymbolNameW(PCWSTR, PWSTR, DWORD, DWORD); BOOL WINAPI SymGetScope(HANDLE, ULONG64, DWORD, PSYMBOL_INFO); BOOL WINAPI SymGetScopeW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW); BOOL WINAPI SymFromIndex(HANDLE, ULONG64, DWORD, PSYMBOL_INFO); BOOL WINAPI SymFromIndexW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW); BOOL WINAPI SymAddSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD); BOOL WINAPI SymAddSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD); BOOL WINAPI SymDeleteSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD); BOOL WINAPI SymDeleteSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD); /************************* * Source Files * *************************/ typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID); typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID); BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, PCSTR, PSYM_ENUMSOURCEFILES_CALLBACK, PVOID); BOOL WINAPI SymEnumSourceFilesW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID); BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64); BOOL WINAPI SymGetLineFromAddrW64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64); BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64); BOOL WINAPI SymGetLinePrevW64(HANDLE, PIMAGEHLP_LINEW64); BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64); BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64); BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64); BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64); ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG); BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD); BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD); BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*); BOOL WINAPI SymGetSourceFileTokenW(HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*); BOOL WINAPI SymGetSourceFileFromToken(HANDLE, PVOID, PCSTR, PSTR, DWORD); BOOL WINAPI SymGetSourceFileFromTokenW(HANDLE, PVOID, PCWSTR, PWSTR, DWORD); BOOL WINAPI SymGetSourceVarFromToken(HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD); BOOL WINAPI SymGetSourceVarFromTokenW(HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD); typedef struct _SRCCODEINFO { DWORD SizeOfStruct; PVOID Key; DWORD64 ModBase; CHAR Obj[MAX_PATH+1]; CHAR FileName[MAX_PATH+1]; DWORD LineNumber; DWORD64 Address; } SRCCODEINFO, *PSRCCODEINFO; typedef struct _SRCCODEINFOW { DWORD SizeOfStruct; PVOID Key; DWORD64 ModBase; WCHAR Obj[MAX_PATH+1]; WCHAR FileName[MAX_PATH+1]; DWORD LineNumber; DWORD64 Address; } SRCCODEINFOW, *PSRCCODEINFOW; typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID); typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID); BOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID); BOOL WINAPI SymEnumLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID); BOOL WINAPI SymEnumSourceLines(HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID); BOOL WINAPI SymEnumSourceLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID); /************************* * File & image handling * *************************/ BOOL WINAPI SymInitialize(HANDLE, PCSTR, BOOL); BOOL WINAPI SymInitializeW(HANDLE, PCWSTR, BOOL); BOOL WINAPI SymCleanup(HANDLE); HANDLE WINAPI FindDebugInfoFile(PCSTR, PCSTR, PSTR); typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PCSTR, PVOID); typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID); HANDLE WINAPI FindDebugInfoFileEx(PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID); HANDLE WINAPI FindDebugInfoFileExW(PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID); HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID); HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID); BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, PSTR, PFINDFILEINPATHCALLBACK, PVOID); BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, PSTR, PFINDFILEINPATHCALLBACK, PVOID); BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD, PWSTR, PFINDFILEINPATHCALLBACKW, PVOID); HANDLE WINAPI FindExecutableImage(PCSTR, PCSTR, PSTR); typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PCSTR, PVOID); typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID); HANDLE WINAPI FindExecutableImageEx(PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID); HANDLE WINAPI FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID); HANDLE WINAPI SymFindExecutableImage(HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID); HANDLE WINAPI SymFindExecutableImageW(HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID); PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID); PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG, PIMAGE_SECTION_HEADER *); PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG); PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG); PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*); BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD); BOOL WINAPI SymGetSearchPathW(HANDLE, PWSTR, DWORD); BOOL WINAPI SymSetSearchPath(HANDLE, PCSTR); BOOL WINAPI SymSetSearchPathW(HANDLE, PCWSTR); DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE); BOOL WINAPI MakeSureDirectoryPathExists(PCSTR); BOOL WINAPI SearchTreeForFile(PCSTR, PCSTR, PSTR); BOOL WINAPI SearchTreeForFileW(PCWSTR, PCWSTR, PWSTR); typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(PCSTR, PVOID); typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID); BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID); BOOL WINAPI EnumDirTreeW(HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID); BOOL WINAPI SymMatchFileName(PCSTR, PCSTR, PSTR*, PSTR*); BOOL WINAPI SymMatchFileNameW(PCWSTR, PCWSTR, PWSTR*, PWSTR*); PCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR); PWSTR WINAPI SymSetHomeDirectoryW(HANDLE, PCWSTR); PCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t); PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t); #define hdBase 0 #define hdSym 1 #define hdSrc 2 #define hdMax 3 /************************* * Context management * *************************/ BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT); /************************* * Stack management * *************************/ #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define KDHELP KDHELP64 #define PKDHELP PKDHELP64 #else typedef struct _KDHELP { DWORD Thread; DWORD ThCallbackStack; DWORD NextCallback; DWORD FramePointer; DWORD KiCallUserMode; DWORD KeUserCallbackDispatcher; DWORD SystemRangeStart; } KDHELP, *PKDHELP; #endif typedef struct _KDHELP64 { DWORD64 Thread; DWORD ThCallbackStack; DWORD ThCallbackBStore; DWORD NextCallback; DWORD FramePointer; DWORD64 KiCallUserMode; DWORD64 KeUserCallbackDispatcher; DWORD64 SystemRangeStart; DWORD64 Reserved[8]; } KDHELP64, *PKDHELP64; #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define STACKFRAME STACKFRAME64 #define LPSTACKFRAME LPSTACKFRAME64 #else typedef struct _STACKFRAME { ADDRESS AddrPC; ADDRESS AddrReturn; ADDRESS AddrFrame; ADDRESS AddrStack; PVOID FuncTableEntry; DWORD Params[4]; BOOL Far; BOOL Virtual; DWORD Reserved[3]; KDHELP KdHelp; ADDRESS AddrBStore; } STACKFRAME, *LPSTACKFRAME; #endif typedef struct _STACKFRAME64 { ADDRESS64 AddrPC; ADDRESS64 AddrReturn; ADDRESS64 AddrFrame; ADDRESS64 AddrStack; ADDRESS64 AddrBStore; PVOID FuncTableEntry; DWORD64 Params[4]; BOOL Far; BOOL Virtual; DWORD64 Reserved[3]; KDHELP64 KdHelp; } STACKFRAME64, *LPSTACKFRAME64; typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64) (HANDLE, DWORD64, PVOID, DWORD, PDWORD); typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64); typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64); typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64); BOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID, PREAD_PROCESS_MEMORY_ROUTINE64, PFUNCTION_TABLE_ACCESS_ROUTINE64, PGET_MODULE_BASE_ROUTINE64, PTRANSLATE_ADDRESS_ROUTINE64); PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64); typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64); BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64); /************************* * Version, global stuff * *************************/ #define API_VERSION_NUMBER 9 typedef struct API_VERSION { USHORT MajorVersion; USHORT MinorVersion; USHORT Revision; USHORT Reserved; } API_VERSION, *LPAPI_VERSION; LPAPI_VERSION WINAPI ImagehlpApiVersion(void); LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION); typedef struct _IMAGE_DEBUG_INFORMATION { LIST_ENTRY List; DWORD ReservedSize; PVOID ReservedMappedBase; USHORT ReservedMachine; USHORT ReservedCharacteristics; DWORD ReservedCheckSum; DWORD ImageBase; DWORD SizeOfImage; DWORD ReservedNumberOfSections; PIMAGE_SECTION_HEADER ReservedSections; DWORD ReservedExportedNamesSize; PSTR ReservedExportedNames; DWORD ReservedNumberOfFunctionTableEntries; PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries; DWORD ReservedLowestFunctionStartingAddress; DWORD ReservedHighestFunctionEndingAddress; DWORD ReservedNumberOfFpoTableEntries; PFPO_DATA ReservedFpoTableEntries; DWORD SizeOfCoffSymbols; PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; DWORD ReservedSizeOfCodeViewSymbols; PVOID ReservedCodeViewSymbols; PSTR ImageFilePath; PSTR ImageFileName; PSTR ReservedDebugFilePath; DWORD ReservedTimeDateStamp; BOOL ReservedRomImage; PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory; DWORD ReservedNumberOfDebugDirectories; DWORD ReservedOriginalFunctionTableBaseAddress; DWORD Reserved[ 2 ]; } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION; PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG); BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION); DWORD WINAPI SymGetOptions(void); DWORD WINAPI SymSetOptions(DWORD); BOOL WINAPI SymSetParentWindow(HWND); /************************* * Version, global stuff * *************************/ typedef BOOL (WINAPI* PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR); typedef BOOL (WINAPI* PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR); typedef BOOL (WINAPI* PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR); typedef BOOL (WINAPI* PSYMBOLSERVEROPENPROC)(void); typedef BOOL (WINAPI* PSYMBOLSERVERCLOSEPROC)(void); typedef BOOL (WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64); typedef BOOL (CALLBACK* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR, ULONG64, ULONG64); typedef UINT_PTR (WINAPI* PSYMBOLSERVERGETOPTIONSPROC)(void); typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROC)(PCSTR); typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROCA)(PCSTR); typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROCW)(PCWSTR); #define SSRVOPT_CALLBACK 0x0001 #define SSRVOPT_DWORD 0x0002 #define SSRVOPT_DWORDPTR 0x0004 #define SSRVOPT_GUIDPTR 0x0008 #define SSRVOPT_OLDGUIDPTR 0x0010 #define SSRVOPT_UNATTENDED 0x0020 #define SSRVOPT_NOCOPY 0x0040 #define SSRVOPT_PARENTWIN 0x0080 #define SSRVOPT_PARAMTYPE 0x0100 #define SSRVOPT_SECURE 0x0200 #define SSRVOPT_TRACE 0x0400 #define SSRVOPT_SETCONTEXT 0x0800 #define SSRVOPT_PROXY 0x1000 #define SSRVOPT_DOWNSTREAM_STORE 0x2000 #define SSRVOPT_RESET ((ULONG_PTR)-1) #define SSRVACTION_TRACE 1 #define SSRVACTION_QUERYCANCEL 2 #define SSRVACTION_EVENT 3 /* 32-bit functions */ #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) #define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64 #define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64 #define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64 #define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64 #define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64 #define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64 #define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64 #define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64 #define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACKW64 #define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64 #define EnumerateLoadedModules EnumerateLoadedModules64 #define StackWalk StackWalk64 #define SymEnumerateModules SymEnumerateModules64 #define SymEnumerateSymbols SymEnumerateSymbols64 #define SymEnumerateSymbolsW SymEnumerateSymbolsW64 #define SymFunctionTableAccess SymFunctionTableAccess64 #define SymGetLineFromAddr SymGetLineFromAddr64 #define SymGetLineFromAddrW SymGetLineFromAddrW64 #define SymGetLineFromName SymGetLineFromName64 #define SymGetLineNext SymGetLineNext64 #define SymGetLineNextW SymGetLineNextW64 #define SymGetLinePrev SymGetLinePrev64 #define SymGetLinePrevW SymGetLinePrevW64 #define SymGetModuleBase SymGetModuleBase64 #define SymGetModuleInfo SymGetModuleInfo64 #define SymGetModuleInfoW SymGetModuleInfoW64 #define SymGetSymFromAddr SymGetSymFromAddr64 #define SymGetSymFromName SymGetSymFromName64 #define SymGetSymNext SymGetSymNext64 #define SymGetSymNextW SymGetSymNextW64 #define SymGetSymPrev SymGetSymPrev64 #define SymGetSymPrevW SymGetSymPrevW64 #define SymLoadModule SymLoadModule64 #define SymRegisterCallback SymRegisterCallback64 #define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64 #define SymUnDName SymUnDName64 #define SymUnloadModule SymUnloadModule64 #else typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID); typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD); typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD); typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE, DWORD, PVOID, DWORD, PDWORD); typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID); typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID); typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE, DWORD, PVOID); typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS); BOOL WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID); BOOL WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); BOOL WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID); BOOL WINAPI SymEnumerateSymbols(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID); BOOL WINAPI SymEnumerateSymbolsW(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID); PVOID WINAPI SymFunctionTableAccess(HANDLE, DWORD); BOOL WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE); BOOL WINAPI SymGetLineFromAddrW(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW); BOOL WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE); BOOL WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE); BOOL WINAPI SymGetLineNextW(HANDLE, PIMAGEHLP_LINEW); BOOL WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE); BOOL WINAPI SymGetLinePrevW(HANDLE, PIMAGEHLP_LINEW); DWORD WINAPI SymGetModuleBase(HANDLE, DWORD); BOOL WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE); BOOL WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW); BOOL WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL); BOOL WINAPI SymGetSymFromName(HANDLE, PCSTR, PIMAGEHLP_SYMBOL); BOOL WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL); BOOL WINAPI SymGetSymNextW(HANDLE, PIMAGEHLP_SYMBOLW); BOOL WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL); BOOL WINAPI SymGetSymPrevW(HANDLE, PIMAGEHLP_SYMBOLW); DWORD WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD); BOOL WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID); BOOL WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID); BOOL WINAPI SymRefreshModuleList(HANDLE); BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD); BOOL WINAPI SymUnloadModule(HANDLE, DWORD); #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_DBGHELP_H */ ================================================ FILE: wine/windows/dbinit.idl ================================================ /* * Copyright (C) 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a8b-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IDBInitialize : IUnknown { [local] HRESULT Initialize(); [call_as(Initialize)] HRESULT RemoteInitialize( [out] IErrorInfo **ppErrorInfoRem ); [local] HRESULT Uninitialize(); [call_as(Uninitialize)] HRESULT RemoteUninitialize( [out] IErrorInfo **ppErrorInfoRem ); } ================================================ FILE: wine/windows/dbprop.idl ================================================ /* * Copyright (C) 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a8a-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IDBProperties : IUnknown { [local] HRESULT GetProperties( [in] ULONG cPropertyIDSets, [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[], [in, out] ULONG *pcPropertySets, [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets); [call_as(GetProperties)] HRESULT RemoteGetProperties( [in] ULONG cPropertyIDSets, [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, [in, out] ULONG *pcPropertySets, [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetPropertyInfo( [in] ULONG cPropertyIDSets, [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[], [in, out] ULONG *pcPropertyInfoSets, [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets, [out, annotation("__deref_out_z_opt")] OLECHAR **ppDescBuffer); [call_as(GetPropertyInfo)] HRESULT RemoteGetPropertyInfo( [in] ULONG cPropertyIDSets, [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, [in, out] ULONG *pcPropertyInfoSets, [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets, [in, out] ULONG *pcOffsets, [out, size_is(,*pcOffsets)] DBBYTEOFFSET **prgDescOffsets, [in, out] ULONG *pcbDescBuffer, [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT SetProperties( [in] ULONG cPropertySets, [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[]); [call_as(SetProperties)] HRESULT RemoteSetProperties( [in] ULONG cPropertySets, [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets, [in] ULONG cTotalProps, [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/dbs.idl ================================================ /* * Copyright (C) 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif typedef DWORD DBKIND; enum DBKINDENUM { DBKIND_GUID_NAME, DBKIND_GUID_PROPID, DBKIND_NAME, DBKIND_PGUID_NAME, DBKIND_PGUID_PROPID, DBKIND_PROPID, DBKIND_GUID, }; typedef struct tagDBID { [switch_type(DBKIND), switch_is(eKind)] union { [case(DBKIND_GUID_NAME, DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_NAME, DBKIND_PROPID)] GUID guid; [case(DBKIND_PGUID_NAME, DBKIND_PGUID_PROPID)] GUID *pguid; [default] ; } uGuid; DBKIND eKind; [switch_type(DBKIND), switch_is(eKind)] union { [case(DBKIND_GUID_NAME, DBKIND_NAME, DBKIND_PGUID_NAME)] LPOLESTR pwszName; [case(DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_PGUID_PROPID, DBKIND_PROPID)] ULONG ulPropid; [default] ; } uName; } DBID; typedef struct tagDB_NUMERIC { BYTE precision; BYTE scale; BYTE sign; BYTE val[16]; } DB_NUMERIC; typedef DWORD DBPROPID; typedef struct tagDBPROPIDSET { [size_is(cPropertyIDs)] DBPROPID *rgPropertyIDs; ULONG cPropertyIDs; GUID guidPropertySet; } DBPROPIDSET; typedef DWORD DBPROPOPTIONS; enum DBPROPOPTIONENUM { DBPROPOPTIONS_REQUIRED = 0, DBPROPOPTIONS_SETIFCHEAP = 1, DBPROPOPTIONS_OPTIONAL = 1, }; typedef DWORD DBPROPSTATUS; typedef struct tagDBPROP { DBPROPID dwPropertyID; DBPROPOPTIONS dwOptions; DBPROPSTATUS dwStatus; DBID colid; VARIANT vValue; } DBPROP; typedef struct tagDBPROPSET { [size_is(cProperties)] DBPROP *rgProperties; ULONG cProperties; GUID guidPropertySet; } DBPROPSET; typedef DWORD DBPROPFLAGS; typedef struct tagDBPROPINFO { LPOLESTR pwszDescription; DBPROPID dwPropertyID; DBPROPFLAGS dwFlags; VARTYPE vtType; VARIANT vValues; } DBPROPINFO; typedef DBPROPINFO *PDBPROPINFO; typedef struct tagDBPROPINFOSET { [size_is(cPropertyInfos)] PDBPROPINFO rgPropertyInfos; ULONG cPropertyInfos; GUID guidPropertySet; } DBPROPINFOSET; typedef DWORD DBBINDURLFLAG; typedef DWORD DBBINDURLSTATUS; typedef struct tagDBIMPLICITSESSION { IUnknown *pUnkOuter; IID *piid; IUnknown *pSession; } DBIMPLICITSESSION; typedef WORD DBTYPE; enum DBTYPEENUM { DBTYPE_EMPTY = 0, DBTYPE_NULL = 1, DBTYPE_I2 = 2, DBTYPE_I4 = 3, DBTYPE_R4 = 4, DBTYPE_R8 = 5, DBTYPE_CY = 6, DBTYPE_DATE = 7, DBTYPE_BSTR = 8, DBTYPE_IDISPATCH = 9, DBTYPE_ERROR = 10, DBTYPE_BOOL = 11, DBTYPE_VARIANT = 12, DBTYPE_IUNKNOWN = 13, DBTYPE_DECIMAL = 14, DBTYPE_I1 = 16, DBTYPE_UI1 = 17, DBTYPE_UI2 = 18, DBTYPE_UI4 = 19, DBTYPE_I8 = 20, DBTYPE_UI8 = 21, DBTYPE_GUID = 72, DBTYPE_BYTES = 128, DBTYPE_STR = 129, DBTYPE_WSTR = 130, DBTYPE_NUMERIC = 131, DBTYPE_UDT = 132, DBTYPE_DBDATE = 133, DBTYPE_DBTIME = 134, DBTYPE_DBTIMESTAMP = 135, DBTYPE_VECTOR = 0x1000, DBTYPE_ARRAY = 0x2000, DBTYPE_BYREF = 0x4000, DBTYPE_RESERVED = 0x8000 }; enum DBTYPEENUM15 { DBTYPE_HCHAPTER = 136 }; enum DBTYPEENUM20 { DBTYPE_FILETIME = 64, DBTYPE_PROPVARIANT = 138, DBTYPE_VARNUMERIC = 139 }; typedef DWORD DBSTATUS; enum DBSTATUSENUM { DBSTATUS_S_OK = 0, DBSTATUS_E_BADACCESSOR = 1, DBSTATUS_E_CANTCONVERTVALUE = 2, DBSTATUS_S_ISNULL = 3, DBSTATUS_S_TRUNCATED = 4, DBSTATUS_E_SIGNMISMATCH = 5, DBSTATUS_E_DATAOVERFLOW = 6, DBSTATUS_E_CANTCREATE = 7, DBSTATUS_E_UNAVAILABLE = 8, DBSTATUS_E_PERMISSIONDENIED = 9, DBSTATUS_E_INTEGRITYVIOLATION = 10, DBSTATUS_E_SCHEMAVIOLATION = 11, DBSTATUS_E_BADSTATUS = 12, DBSTATUS_S_DEFAULT = 13 }; enum DBPROPENUM { DBPROP_ABORTPRESERVE = 0x00000002, DBPROP_ACTIVESESSIONS = 0x00000003, DBPROP_ASYNCTXNCOMMIT = 0x00000004, DBPROP_AUTH_CACHE_AUTHINFO = 0x00000005, DBPROP_AUTH_ENCRYPT_PASSWORD = 0x00000006, DBPROP_AUTH_INTEGRATED = 0x00000007, DBPROP_AUTH_MASK_PASSWORD = 0x00000008, DBPROP_AUTH_PASSWORD = 0x00000009, DBPROP_AUTH_PERSIST_ENCRYPTED = 0x0000000a, DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO = 0x0000000b, DBPROP_AUTH_USERID = 0x0000000c, DBPROP_BLOCKINGSTORAGEOBJECTS = 0x0000000d, DBPROP_BOOKMARKS = 0x0000000e, DBPROP_BOOKMARKSKIPPED = 0x0000000f, DBPROP_BOOKMARKTYPE = 0x00000010, DBPROP_CACHEDEFERRED = 0x00000011, DBPROP_CANFETCHBACKWARDS = 0x00000012, DBPROP_CANHOLDROWS = 0x00000013, DBPROP_CANSCROLLBACKWARDS = 0x00000015, DBPROP_CATALOGLOCATION = 0x00000016, DBPROP_CATALOGTERM = 0x00000017, DBPROP_CATALOGUSAGE = 0x00000018, DBPROP_COL_AUTOINCREMENT = 0x0000001a, DBPROP_COL_DEFAULT = 0x0000001b, DBPROP_COL_DESCRIPTION = 0x0000001c, DBPROP_COL_NULLABLE = 0x0000001d, DBPROP_COL_PRIMARYKEY = 0x0000001e, DBPROP_COL_UNIQUE = 0x0000001f, DBPROP_COLUMNDEFINITION = 0x00000020, DBPROP_COLUMNRESTRICT = 0x00000021, DBPROP_COMMANDTIMEOUT = 0x00000022, DBPROP_COMMITPRESERVE = 0x00000023, DBPROP_CONCATNULLBEHAVIOR = 0x00000024, DBPROP_CURRENTCATALOG = 0x00000025, DBPROP_DATASOURCENAME = 0x00000026, DBPROP_DATASOURCEREADONLY = 0x00000027, DBPROP_DBMSNAME = 0x00000028, DBPROP_DBMSVER = 0x00000029, DBPROP_DEFERRED = 0x0000002a, DBPROP_DELAYSTORAGEOBJECTS = 0x0000002b, DBPROP_GROUPBY = 0x0000002c, DBPROP_HETEROGENEOUSTABLES = 0x0000002d, DBPROP_IDENTIFIERCASE = 0x0000002e, DBPROP_IMMOBILEROWS = 0x0000002f, DBPROP_INDEX_AUTOUPDATE = 0x00000030, DBPROP_INDEX_CLUSTERED = 0x00000031, DBPROP_INDEX_FILLFACTOR = 0x00000032, DBPROP_INDEX_INITIALSIZE = 0x00000033, DBPROP_INDEX_NULLCOLLATION = 0x00000034, DBPROP_INDEX_NULLS = 0x00000035, DBPROP_INDEX_PRIMARYKEY = 0x00000036, DBPROP_INDEX_SORTBOOKMARKS = 0x00000037, DBPROP_INDEX_TYPE = 0x00000038, DBPROP_INDEX_UNIQUE = 0x00000039, DBPROP_INIT_DATASOURCE = 0x0000003b, DBPROP_INIT_HWND = 0x0000003c, DBPROP_INIT_IMPERSONATION_LEVEL = 0x0000003d, DBPROP_INIT_LOCATION = 0x0000003e, DBPROP_INIT_MODE = 0x0000003f, DBPROP_INIT_PROMPT = 0x00000040, DBPROP_INIT_PROTECTION_LEVEL = 0x00000041, DBPROP_INIT_TIMEOUT = 0x00000042, DBPROP_LITERALBOOKMARKS = 0x00000043, DBPROP_LITERALIDENTITY = 0x00000044, DBPROP_MAXINDEXSIZE = 0x00000046, DBPROP_MAXOPENROWS = 0x00000047, DBPROP_MAXPENDINGROWS = 0x00000048, DBPROP_MAXROWS = 0x00000049, DBPROP_MAXROWSIZE = 0x0000004a, DBPROP_MAXROWSIZEINCLUDESBLOB = 0x0000004b, DBPROP_MAXTABLESINSELECT = 0x0000004c, DBPROP_MAYWRITECOLUMN = 0x0000004d, DBPROP_MEMORYUSAGE = 0x0000004e, DBPROP_MULTIPLESTORAGEOBJECTS = 0x00000050, DBPROP_MULTITABLEUPDATE = 0x00000051, DBPROP_NOTIFICATIONPHASES = 0x00000052, DBPROP_NULLCOLLATION = 0x00000053, DBPROP_OLEOBJECTS = 0x00000054, DBPROP_ORDERBYCOLUMNSINSELECT = 0x00000055, DBPROP_ORDEREDBOOKMARKS = 0x00000056, DBPROP_OTHERINSERT = 0x00000057, DBPROP_OTHERUPDATEDELETE = 0x00000058, DBPROP_OWNINSERT = 0x00000059, DBPROP_OWNUPDATEDELETE = 0x0000005a, DBPROP_PREPAREABORTBEHAVIOR = 0x0000005b, DBPROP_PREPARECOMMITBEHAVIOR = 0x0000005c, DBPROP_PROCEDURETERM = 0x0000005d, DBPROP_PROVIDERNAME = 0x00000060, DBPROP_PROVIDEROLEDBVER = 0x00000061, DBPROP_PROVIDERVER = 0x00000062, DBPROP_QUICKRESTART = 0x00000063, DBPROP_QUOTEDIDENTIFIERCASE = 0x00000064, DBPROP_REENTRANTEVENTS = 0x00000065, DBPROP_REMOVEDELETED = 0x00000066, DBPROP_REPORTMULTIPLECHANGES = 0x00000067, DBPROP_ROWRESTRICT = 0x00000068, DBPROP_ROWTHREADMODEL = 0x00000069, DBPROP_SCHEMATERM = 0x0000006a, DBPROP_SCHEMAUSAGE = 0x0000006b, DBPROP_SERVERCURSOR = 0x0000006c, DBPROP_SQLSUPPORT = 0x0000006d, DBPROP_STRUCTUREDSTORAGE = 0x0000006f, DBPROP_SUBQUERIES = 0x00000070, DBPROP_SUPPORTEDTXNISOLEVELS = 0x00000071, DBPROP_SUPPORTEDTXNISORETAIN = 0x00000072, DBPROP_TABLETERM = 0x00000073, DBPROP_TRANSACTEDOBJECT = 0x00000074, DBPROP_UPDATABILITY = 0x00000075, DBPROP_USERNAME = 0x00000076, DBPROP_STRONGIDENTITY = 0x00000077, DBPROP_BYREFACCESSORS = 0x00000078, DBPROP_IAccessor = 0x00000079, DBPROP_IColumnsInfo = 0x0000007a, DBPROP_IColumnsRowset = 0x0000007b, DBPROP_IConnectionPointContainer = 0x0000007c, DBPROP_IRowset = 0x0000007e, DBPROP_IRowsetChange = 0x0000007f, DBPROP_IRowsetIdentity = 0x00000080, DBPROP_IRowsetInfo = 0x00000081, DBPROP_IRowsetLocate = 0x00000082, DBPROP_IRowsetResynch = 0x00000084, DBPROP_IRowsetScroll = 0x00000085, DBPROP_IRowsetUpdate = 0x00000086, DBPROP_ISupportErrorInfo = 0x00000087, DBPROP_ILockBytes = 0x00000088, DBPROP_ISequentialStream = 0x00000089, DBPROP_IStorage = 0x0000008a, DBPROP_IStream = 0x0000008b, DBPROP_TBL_TEMPTABLE = 0x0000008c, DBPROP_IRowsetIndex = 0x0000009f, DBPROP_INIT_PROVIDERSTRING = 0x000000a0, DBPROP_SUPPORTEDTXNDDL = 0x000000a1, DBPROP_INDEX_TEMPINDEX = 0x000000a3, DBPROP_COL_FIXEDLENGTH = 0x000000a7, DBPROP_ASYNCTXNABORT = 0x000000a8, DBPROP_DSOTHREADMODEL = 0x000000a9, DBPROP_NOTIFYCOLUMNSET = 0x000000ab, DBPROP_NOTIFYROWDELETE = 0x000000ad, DBPROP_NOTIFYROWFIRSTCHANGE = 0x000000ae, DBPROP_NOTIFYROWINSERT = 0x000000af, DBPROP_NOTIFYROWRESYNCH = 0x000000b1, DBPROP_NOTIFYROWSETRELEASE = 0x000000b2, DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE = 0x000000b3, DBPROP_NOTIFYROWUNDOCHANGE = 0x000000b4, DBPROP_NOTIFYROWUNDODELETE = 0x000000b5, DBPROP_NOTIFYROWUNDOINSERT = 0x000000b6, DBPROP_NOTIFYROWUPDATE = 0x000000b7, DBPROP_OUTPUTPARAMETERAVAILABILITY = 0x000000b8, DBPROP_PERSISTENTIDTYPE = 0x000000b9, DBPROP_INIT_LCID = 0x000000ba, DBPROP_APPENDONLY = 0x000000bb, DBPROP_CHANGEINSERTEDROWS = 0x000000bc, DBPROP_RETURNPENDINGINSERTS = 0x000000bd, DBPROP_SESS_AUTOCOMMITISOLEVELS = 0x000000be, DBPROP_MULTIPLEPARAMSETS = 0x000000bf, DBPROP_ROWSETCONVERSIONSONCOMMAND = 0x000000c0, DBPROP_IConvertType = 0x000000c2, DBPROP_MULTIPLERESULTS = 0x000000c4, DBPROP_NOTIFICATIONGRANULARITY = 0x000000c6, DBPROP_NOTIFYROWSETCHANGED = 0x000000d3, }; enum DBPROPENUM15 { DBPROP_FILTERCOMPAREOPS = 0x000000d1, DBPROP_FINDCOMPAREOPS = 0x000000d2, DBPROP_IChapteredRowset = 0x000000ca, DBPROP_IDBAsynchStatus = 0x000000cb, DBPROP_IRowsetFind = 0x000000cc, DBPROP_IRowsetView = 0x000000d4, DBPROP_IViewChapter = 0x000000d5, DBPROP_IViewFilter = 0x000000d6, DBPROP_IViewRowset = 0x000000d7, DBPROP_IViewSort = 0x000000d8, DBPROP_INIT_ASYNCH = 0x000000c8, DBPROP_MAXOPENCHAPTERS = 0x000000c7, DBPROP_MAXORSINFILTER = 0x000000cd, DBPROP_MAXSORTCOLUMNS = 0x000000ce, DBPROP_ROWSET_ASYNCH = 0x000000c9, DBPROP_SORTONINDEX = 0x000000cf }; enum DBPROPENUM20 { DBPROP_IMultipleResults = 0x000000d9, DBPROP_DATASOURCE_TYPE = 0x000000fb, MDPROP_AXES = 0x000000fc, MDPROP_FLATTENING_SUPPORT = 0x000000fd, MDPROP_MDX_JOINCUBES = 0x000000fe, MDPROP_NAMED_LEVELS = 0x000000ff, MDPROP_RANGEROWSET = 0x00000100, MDPROP_MDX_SLICER = 0x000000da, MDPROP_MDX_CUBEQUALIFICATION = 0x000000db, MDPROP_MDX_OUTERREFERENCE = 0x000000dc, MDPROP_MDX_QUERYBYPROPERTY = 0x000000dd, MDPROP_MDX_CASESUPPORT = 0x000000de, MDPROP_MDX_STRING_COMPOP = 0x000000e0, MDPROP_MDX_DESCFLAGS = 0x000000e1, MDPROP_MDX_SET_FUNCTIONS = 0x000000e2, MDPROP_MDX_MEMBER_FUNCTIONS = 0x000000e3, MDPROP_MDX_NUMERIC_FUNCTIONS = 0x000000e4, MDPROP_MDX_FORMULAS = 0x000000e5, MDPROP_AGGREGATECELL_UPDATE = 0x000000e6, MDPROP_MDX_AGGREGATECELL_UPDATE = MDPROP_AGGREGATECELL_UPDATE, MDPROP_MDX_OBJQUALIFICATION = 0x00000105, MDPROP_MDX_NONMEASURE_EXPRESSIONS = 0x00000106, DBPROP_ACCESSORDER = 0x000000e7, DBPROP_BOOKMARKINFO = 0x000000e8, DBPROP_INIT_CATALOG = 0x000000e9, DBPROP_ROW_BULKOPS = 0x000000ea, DBPROP_PROVIDERFRIENDLYNAME = 0x000000eb, DBPROP_LOCKMODE = 0x000000ec, DBPROP_MULTIPLECONNECTIONS = 0x000000ed, DBPROP_UNIQUEROWS = 0x000000ee, DBPROP_SERVERDATAONINSERT = 0x000000ef, DBPROP_STORAGEFLAGS = 0x000000f0, DBPROP_CONNECTIONSTATUS = 0x000000f4, DBPROP_ALTERCOLUMN = 0x000000f5, DBPROP_COLUMNLCID = 0x000000f6, DBPROP_RESETDATASOURCE = 0x000000f7, DBPROP_INIT_OLEDBSERVICES = 0x000000f8, DBPROP_IRowsetRefresh = 0x000000f9, DBPROP_SERVERNAME = 0x000000fa, DBPROP_IParentRowset = 0x00000101, DBPROP_HIDDENCOLUMNS = 0x00000102, DBPROP_PROVIDERMEMORY = 0x00000103, DBPROP_CLIENTCURSOR = 0x00000104 }; enum DBPROPENUM21 { DBPROP_TRUSTEE_USERNAME = 0x000000f1, DBPROP_TRUSTEE_AUTHENTICATION = 0x000000f2, DBPROP_TRUSTEE_NEWAUTHENTICATION = 0x000000f3, DBPROP_IRow = 0x00000107, DBPROP_IRowChange = 0x00000108, DBPROP_IRowSchemaChange = 0x00000109, DBPROP_IGetRow = 0x0000010a, DBPROP_IScopedOperations = 0x0000010b, DBPROP_IBindResource = 0x0000010c, DBPROP_ICreateRow = 0x0000010d, DBPROP_INIT_BINDFLAGS = 0x0000010e, DBPROP_INIT_LOCKOWNER = 0x0000010f, DBPROP_GENERATEURL = 0x00000111, DBPROP_IDBBinderProperties = 0x00000112, DBPROP_IColumnsInfo2 = 0x00000113, DBPROP_IRegisterProvider = 0x00000114, DBPROP_IGetSession = 0x00000115, DBPROP_IGetSourceRow = 0x00000116, DBPROP_IRowsetCurrentIndex = 0x00000117, DBPROP_OPENROWSETSUPPORT = 0x00000118, DBPROP_COL_ISLONG = 0x00000119 }; enum DBPROPENUM25 { DBPROP_COL_SEED = 0x0000011a, DBPROP_COL_INCREMENT = 0x0000011b, DBPROP_INIT_GENERALTIMEOUT = 0x0000011c, DBPROP_COMSERVICES = 0x0000011d }; enum DBPROPENUM26 { DBPROP_OUTPUTSTREAM = 0x0000011e, DBPROP_OUTPUTENCODING = 0x0000011f, DBPROP_TABLESTATISTICS = 0x00000120, DBPROP_SKIPROWCOUNTRESULTS = 0x00000123, DBPROP_IRowsetBookmark = 0x00000124, MDPROP_VISUALMODE = 0x00000125, }; cpp_quote("#ifdef DBINITCONSTANTS") cpp_quote("#ifdef __cplusplus") cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\") cpp_quote(" EXTERN_C const GUID name DECLSPEC_HIDDEN; \\") cpp_quote(" EXTERN_C const GUID name = \\") cpp_quote(" { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }") cpp_quote("#else") cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\") cpp_quote(" const GUID name DECLSPEC_HIDDEN; \\") cpp_quote(" const GUID name = \\") cpp_quote(" { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }") cpp_quote("#endif") cpp_quote("#else") cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\") cpp_quote(" EXTERN_C const GUID name DECLSPEC_HIDDEN") cpp_quote("#endif") cpp_quote("DEFINE_DBGUID(DB_NULLGUID, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);") cpp_quote("DEFINE_DBGUID(DBPROPSET_DBINIT, 0xc8b522bc, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") cpp_quote("DEFINE_DBGUID(DBGUID_SESSION, 0xc8b522f5, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") cpp_quote("DEFINE_DBGUID(DBGUID_ROWSET, 0xc8b522f6, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") cpp_quote("DEFINE_DBGUID(DBGUID_ROW, 0xc8b522f7, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") cpp_quote("DEFINE_DBGUID(DBGUID_STREAM, 0xc8b522f9, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") cpp_quote("#define DBPROMPT_PROMPT 0x01") cpp_quote("#define DBPROMPT_COMPLETE 0x02") cpp_quote("#define DBPROMPT_COMPLETEREQUIRED 0x03") cpp_quote("#define DBPROMPT_NOPROMPT 0x04") cpp_quote("#define DBPROPVAL_STGM_READ OF_READ") cpp_quote("#define DBPROPVAL_STGM_WRITE OF_WRITE") cpp_quote("#define DBPROPVAL_STGM_READWRITE OF_READWRITE") cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_NONE OF_SHARE_DENY_NONE") cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_READ OF_SHARE_DENY_READ") cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_WRITE OF_SHARE_DENY_WRITE)") cpp_quote("#define DBPROPVAL_STGM_SHARE_EXCLUSIVE OF_SHARE_EXCLUSIVE") cpp_quote("#define DBPROPVAL_STGM_DIRECT 0x00010000") cpp_quote("#define DBPROPVAL_STGM_TRANSACTED 0x00020000") cpp_quote("#define DBPROPVAL_STGM_CREATE OF_CREATE") cpp_quote("#define DBPROPVAL_STGM_CONVERT 0x00040000") cpp_quote("#define DBPROPVAL_STGM_FAILIFTHERE 0x00080000") cpp_quote("#define DBPROPVAL_STGM_PRIORITY 0x00100000") cpp_quote("#define DBPROPVAL_STGM_DELETEONRELEASE 0x00200000") cpp_quote("#define DBPROPVAL_GB_COLLATE __MSABI_LONG(0x00000010)") cpp_quote("#define DBPROPVAL_CS_UNINITIALIZED __MSABI_LONG(0x00000000)") cpp_quote("#define DBPROPVAL_CS_INITIALIZED __MSABI_LONG(0x00000001)") cpp_quote("#define DBPROPVAL_CS_COMMUNICATIONFAILURE __MSABI_LONG(0x00000002)") cpp_quote("#define DBPROPVAL_RD_RESETALL __MSABI_LONG(0xffffffff)") cpp_quote("#define DBPROPVAL_OS_RESOURCEPOOLING __MSABI_LONG(0x00000001)") cpp_quote("#define DBPROPVAL_OS_TXNENLISTMENT __MSABI_LONG(0x00000002)") cpp_quote("#define DBPROPVAL_OS_CLIENTCURSOR __MSABI_LONG(0x00000004)") cpp_quote("#define DBPROPVAL_OS_ENABLEALL __MSABI_LONG(0xffffffff)") cpp_quote("#define DBPROPVAL_BI_CROSSROWSET __MSABI_LONG(0x00000001)") cpp_quote("#define DB_MODE_READ 0x01") cpp_quote("#define DB_MODE_WRITE 0x02") cpp_quote("#define DB_MODE_READWRITE 0x03") cpp_quote("#define DB_MODE_SHARE_DENY_READ 0x04") cpp_quote("#define DB_MODE_SHARE_DENY_WRITE 0x08") cpp_quote("#define DB_MODE_SHARE_EXCLUSIVE 0x0c") cpp_quote("#define DB_MODE_SHARE_DENY_NONE 0x10") typedef struct tagDBCOLUMNACCESS { void *pData; DBID columnid; DBLENGTH cbDataLen; DBSTATUS dwStatus; DBLENGTH cbMaxLen; DB_DWRESERVE dwReserved; DBTYPE wType; BYTE bPrecision; BYTE bScale; } DBCOLUMNACCESS; typedef DWORD DBROWSTATUS; enum DBROWSTATUSENUM { DBROWSTATUS_S_OK, DBROWSTATUS_S_LOCKUPGRADED, DBROWSTATUS_S_MULTIPLECHANGES, DBROWSTATUS_S_PENDINGCHANGES, DBROWSTATUS_E_CANCELED, DBROWSTATUS_E_CANTLOCKROW, DBROWSTATUS_E_CANTRELEASE, DBROWSTATUS_E_CONCURRENCYVIOLATION, DBROWSTATUS_E_DELETED, DBROWSTATUS_E_PENDINGINSERT, DBROWSTATUS_E_NEWLYINSERTED, DBROWSTATUS_E_INTEGRITYVIOLATION, DBROWSTATUS_E_INVALID, DBROWSTATUS_E_MAXPENDCHANGESEXCEEDED, DBROWSTATUS_E_OBJECTOPEN, DBROWSTATUS_E_OUTOFMEMORY, DBROWSTATUS_E_PERMISSIONDENIED, DBROWSTATUS_E_LIMITREACHED, DBROWSTATUS_E_SCHEMAVIOLATION, DBROWSTATUS_E_FAIL, }; typedef DWORD DBPART; enum DBPARTENUM { DBPART_INVALID = 0, DBPART_VALUE = 1, DBPART_LENGTH = 2, DBPART_STATUS = 4, }; typedef DWORD DBPARAMIO; enum DBPARAMIOENUM { DBPARAMIO_NOTPARAM = 0, DBPARAMIO_INPUT = 1, DBPARAMIO_OUTPUT = 2, }; typedef DWORD DBMEMOWNER; enum DBMEMOWNERENUM { DBMEMOWNER_CLIENTOWNED = 0, DBMEMOWNER_PROVIDEROWNED = 1, }; typedef struct tagDBOBJECT { DWORD dwFlags; IID iid; } DBOBJECT; typedef struct tagDBBINDEXT { [size_is((ULONG)ulExtension)] BYTE *pExtension; DBCOUNTITEM ulExtension; } DBBINDEXT; typedef struct tagDBBINDING { DBORDINAL iOrdinal; DBBYTEOFFSET obValue; DBBYTEOFFSET obLength; DBBYTEOFFSET obStatus; ITypeInfo *pTypeInfo; DBOBJECT *pObject; DBBINDEXT *pBindExt; DBPART dwPart; DBMEMOWNER dwMemOwner; DBPARAMIO eParamIO; DBLENGTH cbMaxLen; DWORD dwFlags; DBTYPE wType; BYTE bPrecision; BYTE bScale; } DBBINDING; typedef ULONG_PTR HACCESSOR; cpp_quote("#define DB_INVALID_HACCESSOR 0x00") typedef ULONG_PTR HROW; cpp_quote("#define DB_NULL_HROW 0x00") typedef ULONG_PTR HWATCHREGION; cpp_quote("#define DBWATCHREGION_NULL NULL") typedef ULONG_PTR HCHAPTER; cpp_quote("#define DB_NULL_HCHAPTER 0x00") typedef struct tagDBPARAMS { void *pData; DB_UPARAMS cParamSets; HACCESSOR hAccessor; } DBPARAMS; typedef DWORD DBASYNCHOP; enum DBASYNCHOPENUM { DBSYNCHOP_OPEN, }; typedef DWORD DBASYNCHPHASE; enum DBASYNCHPHASEENUM { DBASYNCHPHASE_INITIALIZATION, DBASYNCHPHASE_POPULATION, DBASYNCHPHASE_COMPLETE, DBASYNCHPHASE_CANCELED, }; typedef struct tagRMTPACK { ISequentialStream *pISeqStream; ULONG cbData; ULONG cBSTR; [size_is(cBSTR)] BSTR *rgBSTR; ULONG cVARIANT; [size_is(cVARIANT)] VARIANT *rgVARIANT; ULONG cIDISPATCH; [size_is(cIDISPATCH)] IDispatch **rgIDISPATCH; ULONG cIUNKNOWN; [size_is(cIUNKNOWN)] IUnknown **rgIUNKNOWN; ULONG cPROPVARIANT; [size_is(cPROPVARIANT)] PROPVARIANT *rgPROPVARIANT; ULONG cArray; [size_is(cArray)] VARIANT *rgArray; } RMTPACK; typedef struct tagDBDATE { SHORT year; USHORT month; USHORT day; } DBDATE; typedef struct tagDBTIME { USHORT hour; USHORT minute; USHORT second; } DBTIME; typedef struct tagDBTIMESTAMP { SHORT year; USHORT month; USHORT day; USHORT hour; USHORT minute; USHORT second; ULONG fraction; } DBTIMESTAMP; typedef DWORD DBREASON; typedef DWORD DBEVENTPHASE; enum DBEVENTPHASEENUM { DBEVENTPHASE_OKTODO, DBEVENTPHASE_ABOUTTODO, DBEVENTPHASE_SYNCHAFTER, DBEVENTPHASE_FAILEDTODO, DBEVENTPHASE_DIDEVENT }; enum DBREASONENUM { DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBREASON_ROWSET_RELEASE, DBREASON_COLUMN_SET, DBREASON_COLUMN_RECALCULATED, DBREASON_ROW_ACTIVATE, DBREASON_ROW_RELEASE, DBREASON_ROW_DELETE, DBREASON_ROW_FIRSTCHANCE, DBREASON_ROW_INSERT, DBREASON_ROW_RESYNCH, DBREASON_ROW_UNDOCHANGE, DBREASON_ROW_UNDOINSERT, DBREASON_ROW_UNDODELETE, DBREASON_ROW_UPDATE, DBREASON_ROWSET_CHANGED }; enum DBREASONENUM15 { DBREASON_ROWPOSITION_CHANGED = DBREASON_ROWSET_CHANGED + 1, DBREASON_ROWPOSITION_CHAPTERCHANGED, DBREASON_ROWPOSITION_CLEARED, DBREASON_ROW_ASYNCHINSERT }; typedef DWORD DBCOLUMNFLAGS; enum DBCOLUMNFLAGSENUM { DBCOLUMNFLAGS_ISBOOKMARK = 0x0001, DBCOLUMNFLAGS_MAYDEFER = 0x0002, DBCOLUMNFLAGS_WRITE = 0x0004, DBCOLUMNFLAGS_WRITEUNKNOWN = 0x0008, DBCOLUMNFLAGS_ISFIXEDLENGTH = 0x0010, DBCOLUMNFLAGS_ISNULLABLE = 0x0020, DBCOLUMNFLAGS_MAYBENULL = 0x0040, DBCOLUMNFLAGS_ISLONG = 0x0080, DBCOLUMNFLAGS_ISROWID = 0x0100, DBCOLUMNFLAGS_ISROWVER = 0x0200, DBCOLUMNFLAGS_CACHEDEFERRED = 0x1000 }; typedef struct tagDBCOLUMNINFO { LPOLESTR pwszName; ITypeInfo *pTypeInfo; DBORDINAL iOrdinal; DBCOLUMNFLAGS dwFlags; DBLENGTH ulColumnSize; DBTYPE wType; BYTE bPrecision; BYTE bScale; DBID columnid; } DBCOLUMNINFO; ================================================ FILE: wine/windows/dbt.h ================================================ /* * Copyright (C) 2004 Ulrich Czekalla * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DBT_H #define __WINE_DBT_H #ifndef GUID_DEFINED # include #endif /* dbt.h doesn't use the normal convention, it adds an underscore before A/W */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_DBT_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_DBT_TYPE_AW(type) typedef WINELIB_NAME_AW(type##_) type; #endif #define DBT_DEVNODES_CHANGED 0x0007 #define DBT_QUERYCHANGECONFIG 0x0017 #define DBT_CONFIGCHANGED 0x0018 #define DBT_CONFIGCHANGECANCELED 0x0019 #define DBT_NO_DISK_SPACE 0x0047 #define DBT_LOW_DISK_SPACE 0x0048 #define DBT_CONFIGMGPRIVATE 0x7FFF #define DBT_DEVICEARRIVAL 0x8000 #define DBT_DEVICEQUERYREMOVE 0x8001 #define DBT_DEVICEQUERYREMOVEFAILED 0x8002 #define DBT_DEVICEREMOVEPENDING 0x8003 #define DBT_DEVICEREMOVECOMPLETE 0x8004 #define DBT_DEVICETYPESPECIFIC 0x8005 #define DBT_CUSTOMEVENT 0x8006 typedef struct _DEV_BROADCAST_HDR { DWORD dbch_size; DWORD dbch_devicetype; DWORD dbch_reserved; } DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR; #define DBT_DEVTYP_OEM 0x00000000 #define DBT_DEVTYP_DEVNODE 0x00000001 #define DBT_DEVTYP_VOLUME 0x00000002 #define DBT_DEVTYP_PORT 0x00000003 #define DBT_DEVTYP_NET 0x00000004 #define DBT_DEVTYP_DEVICEINTERFACE 0x00000005 #define DBT_DEVTYP_HANDLE 0x00000006 typedef struct _DEV_BROADCAST_OEM { DWORD dbco_size; DWORD dbco_devicetype; DWORD dbco_reserved; DWORD dbco_identifier; DWORD dbco_suppfunc; } DEV_BROADCAST_OEM, *PDEV_BROADCAST_OEM; typedef struct _DEV_BROADCAST_DEVNODE { DWORD dbcd_size; DWORD dbcd_devicetype; DWORD dbcd_reserved; DWORD dbcd_devnode; } DEV_BROADCAST_DEVNODE, *PDEV_BROADCAST_DEVNODE; typedef struct _DEV_BROADCAST_VOLUME { DWORD dbcv_size; DWORD dbcv_devicetype; DWORD dbcv_reserved; DWORD dbcv_unitmask; WORD dbcv_flags; } DEV_BROADCAST_VOLUME, *PDEV_BROADCAST_VOLUME; #define DBTF_MEDIA 0x0001 #define DBTF_NET 0x0002 typedef struct _DEV_BROADCAST_PORT_A { DWORD dbcp_size; DWORD dbcp_devicetype; DWORD dbcp_reserved; char dbcp_name[1]; } DEV_BROADCAST_PORT_A, *PDEV_BROADCAST_PORT_A; typedef struct _DEV_BROADCAST_PORT_W { DWORD dbcp_size; DWORD dbcp_devicetype; DWORD dbcp_reserved; WCHAR dbcp_name[1]; } DEV_BROADCAST_PORT_W, *PDEV_BROADCAST_PORT_W; DECL_WINELIB_DBT_TYPE_AW(DEV_BROADCAST_PORT) DECL_WINELIB_DBT_TYPE_AW(PDEV_BROADCAST_PORT) typedef struct _DEV_BROADCAST_NET { DWORD dbcn_size; DWORD dbcn_devicetype; DWORD dbcn_reserved; DWORD dbcn_resource; DWORD dbcn_flags; } DEV_BROADCAST_NET, *PDEV_BROADCAST_NET; typedef struct _DEV_BROADCAST_DEVICEINTERFACE_A { DWORD dbcc_size; DWORD dbcc_devicetype; DWORD dbcc_reserved; GUID dbcc_classguid; CHAR dbcc_name[1]; } DEV_BROADCAST_DEVICEINTERFACE_A, *PDEV_BROADCAST_DEVICEINTERFACE_A; typedef struct _DEV_BROADCAST_DEVICEINTERFACE_W { DWORD dbcc_size; DWORD dbcc_devicetype; DWORD dbcc_reserved; GUID dbcc_classguid; WCHAR dbcc_name[1]; } DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W; DECL_WINELIB_DBT_TYPE_AW(DEV_BROADCAST_DEVICEINTERFACE) DECL_WINELIB_DBT_TYPE_AW(PDEV_BROADCAST_DEVICEINTERFACE) typedef struct _DEV_BROADCAST_HANDLE { DWORD dbch_size; DWORD dbch_devicetype; DWORD dbch_reserved; HANDLE dbch_handle; HDEVNOTIFY dbch_hdevnotify; GUID dbch_eventguid; LONG dbch_nameoffset; BYTE dbch_data[1]; } DEV_BROADCAST_HANDLE, *PDEV_BROADCAST_HANDLE; #undef DECL_WINELIB_DBT_TYPE_AW #endif /* __WINE_DBT_H */ ================================================ FILE: wine/windows/dciddi.h ================================================ /* * DCI driver interface * * Copyright (C) 2001 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DCIDDI_H #define __WINE_DCIDDI_H #ifdef __cplusplus extern "C" { #endif /* DCI Command Escape */ #define DCICOMMAND 3075 #define DCI_VERSION 0x0100 #define DCICREATEPRIMARYSURFACE 1 #define DCICREATEOFFSCREENSURFACE 2 #define DCICREATEOVERLAYSURFACE 3 #define DCIENUMSURFACE 4 #define DCIESCAPE 5 /* DCI Errors */ #define DCI_OK 0 #define DCI_FAIL_GENERIC -1 #define DCI_FAIL_UNSUPPORTEDVERSION -2 #define DCI_FAIL_INVALIDSURFACE -3 #define DCI_FAIL_UNSUPPORTED -4 typedef int DCIRVAL; /* DCI callback return type */ /***************************************************************************** * Escape command structures */ typedef struct _DCICMD { DWORD dwCommand; DWORD dwParam1; DWORD dwParam2; DWORD dwVersion; DWORD dwReserved; } DCICMD,*LPDCICMD; typedef struct _DCISURFACEINFO { DWORD dwSize; DWORD dwDCICaps; DWORD dwCompression; DWORD dwMask[3]; DWORD dwWidth; DWORD dwHeight; LONG lStride; DWORD dwBitCount; ULONG_PTR dwOffSurface; WORD wSelSurface; WORD wReserved; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DCIRVAL (CALLBACK *BeginAccess)(LPVOID, LPRECT); void (CALLBACK *EndAccess)(LPVOID); void (CALLBACK *DestroySurface)(LPVOID); } DCISURFACEINFO, *LPDCISURFACEINFO; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __WINE_DCIDDI_H */ ================================================ FILE: wine/windows/dciman.h ================================================ /* * DCI driver interface * * Copyright (C) 2005 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _INC_DCIMAN #define _INC_DCIMAN #include #ifdef __cplusplus extern "C" { #endif HDC WINAPI DCIOpenProvider(void); void WINAPI DCICloseProvider(HDC); int WINAPI DCICreatePrimary(HDC,LPDCISURFACEINFO*); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _INC_DCIMAN */ ================================================ FILE: wine/windows/dcommon.idl ================================================ /* * Copyright 2012 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dxgiformat.idl"; cpp_quote("#if 0") typedef struct { long x, y; } POINT; typedef unsigned int UINT32; cpp_quote("#endif") typedef enum DWRITE_MEASURING_MODE { DWRITE_MEASURING_MODE_NATURAL, DWRITE_MEASURING_MODE_GDI_CLASSIC, DWRITE_MEASURING_MODE_GDI_NATURAL } DWRITE_MEASURING_MODE; typedef enum D2D1_ALPHA_MODE { D2D1_ALPHA_MODE_UNKNOWN = 0, D2D1_ALPHA_MODE_PREMULTIPLIED = 1, D2D1_ALPHA_MODE_STRAIGHT = 2, D2D1_ALPHA_MODE_IGNORE = 3, D2D1_ALPHA_MODE_FORCE_DWORD = 0xffffffff, } D2D1_ALPHA_MODE; typedef struct D2D1_PIXEL_FORMAT { DXGI_FORMAT format; D2D1_ALPHA_MODE alphaMode; } D2D1_PIXEL_FORMAT; typedef struct D2D_POINT_2F { float x; float y; } D2D_POINT_2F, D2D1_POINT_2F; typedef POINT D2D_POINT_2L, D2D1_POINT_2L; typedef struct D2D_SIZE_U { UINT32 width; UINT32 height; } D2D_SIZE_U, D2D1_SIZE_U; typedef struct D2D_MATRIX_4X4_F { union { struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; }; float m[4][4]; }; } D2D_MATRIX_4X4_F; ================================================ FILE: wine/windows/dde.h ================================================ /* * Copyright 1995, Technion, Israel Institute of Technology * Electrical Eng, Software Lab. * Author: Michael Veksler. * Purpose: dde declarations * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DDE_H #define __WINE_DDE_H #include #ifdef __cplusplus extern "C" { #endif #ifdef _USER32_ #define WINUSERAPI #else #define WINUSERAPI DECLSPEC_IMPORT #endif #include /* DDEACK: wStatus in WM_DDE_ACK message */ typedef struct { unsigned short bAppReturnCode:8, reserved:6, fBusy:1, fAck:1; } DDEACK; /* DDEDATA: hData in WM_DDE_DATA message */ typedef struct { unsigned short unused:12, fResponse:1, fRelease:1, reserved:1, fAckReq:1; short cfFormat; BYTE Value[1]; /* undetermined array */ } DDEDATA; /* DDEADVISE: hOptions in WM_DDE_ADVISE message */ typedef struct { unsigned short reserved:14, fDeferUpd:1, fAckReq:1; short cfFormat; } DDEADVISE; /* DDEPOKE: hData in WM_DDE_POKE message. */ typedef struct { unsigned short unused:13, fRelease:1, fReserved:2; short cfFormat; BYTE Value[1]; /* undetermined array */ } DDEPOKE; WINUSERAPI BOOL WINAPI DdeSetQualityOfService(HWND,const SECURITY_QUALITY_OF_SERVICE *,PSECURITY_QUALITY_OF_SERVICE); WINUSERAPI BOOL WINAPI FreeDDElParam(UINT,LPARAM); WINUSERAPI BOOL WINAPI ImpersonateDdeClientWindow(HWND,HWND); WINUSERAPI LPARAM WINAPI PackDDElParam(UINT,UINT_PTR,UINT_PTR); WINUSERAPI LPARAM WINAPI ReuseDDElParam(LPARAM,UINT,UINT,UINT_PTR,UINT_PTR); WINUSERAPI BOOL WINAPI UnpackDDElParam(UINT,LPARAM,PUINT_PTR,PUINT_PTR); #ifdef __cplusplus } #endif #endif /* __WINE_DDE_H */ ================================================ FILE: wine/windows/dde.rh ================================================ /* * Copyright 1995, Technion, Israel Institute of Technology * Electrical Eng, Software Lab. * Author: Michael Veksler. * Purpose: dde declarations * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define WM_DDE_INITIATE 0x3E0 #define WM_DDE_TERMINATE 0x3E1 #define WM_DDE_ADVISE 0x3E2 #define WM_DDE_UNADVISE 0x3E3 #define WM_DDE_ACK 0x3E4 #define WM_DDE_DATA 0x3E5 #define WM_DDE_REQUEST 0x3E6 #define WM_DDE_POKE 0x3E7 #define WM_DDE_EXECUTE 0x3E8 #define WM_DDE_LAST WM_DDE_EXECUTE #define WM_DDE_FIRST WM_DDE_INITIATE ================================================ FILE: wine/windows/ddeml.h ================================================ /* * DDEML library definitions * * Copyright 1997 Alexandre Julliard * Copyright 1997 Len White * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DDEML_H #define __WINE_DDEML_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifdef _USER32_ #define WINUSERAPI #else #define WINUSERAPI DECLSPEC_IMPORT #endif /* Codepage Constants */ #define CP_WINANSI 1004 #define CP_WINUNICODE 1200 /* DDE synchronisation constants */ #define MSGF_DDEMGR 0x8001 #define QID_SYNC 0xFFFFFFFF /* Type variation for MS deliberate departures from ANSI standards */ #define EXPENTRY CALLBACK #ifdef UNICODE #if defined(_MSC_VER) #define SZDDESYS_TOPIC L"System" #define SZDDESYS_ITEM_TOPICS L"Topics" #define SZDDESYS_ITEM_SYSITEMS L"SysItems" #define SZDDESYS_ITEM_RTNMSG L"ReturnMessage" #define SZDDESYS_ITEM_STATUS L"Status" #define SZDDESYS_ITEM_FORMATS L"Formats" #define SZDDESYS_ITEM_HELP L"Help" #define SZDDE_ITEM_ITEMLIST L"TopicItemList" #elif defined(__GNUC__) #define SZDDESYS_TOPIC (const WCHAR []){'S','y','s','t','e','m',0} #define SZDDESYS_ITEM_TOPICS (const WCHAR []){'T','o','p','i','c','s',0} #define SZDDESYS_ITEM_SYSITEMS (const WCHAR []){'S','y','s','I','t','e','m','s',0} #define SZDDESYS_ITEM_RTNMSG (const WCHAR []){'R','e','t','u','r','n','M','e','s','s','a','g','e',0} #define SZDDESYS_ITEM_STATUS (const WCHAR []){'S','t','a','t','u','s',0} #define SZDDESYS_ITEM_FORMATS (const WCHAR []){'F','o','r','m','a','t','s',0} #define SZDDESYS_ITEM_HELP (const WCHAR []){'H','e','l','p',0} #define SZDDE_ITEM_ITEMLIST (const WCHAR []){'T','o','p','i','c','I','t','e','m','L','i','s','t',0} #else /* _MSC_VER/__GNUC__ */ static const WCHAR SZDDESYS_TOPIC[] = {'S','y','s','t','e','m',0}; static const WCHAR SZDDESYS_ITEM_TOPICS[] = {'T','o','p','i','c','s',0}; static const WCHAR SZDDESYS_ITEM_SYSITEMS[] = {'S','y','s','I','t','e','m','s',0}; static const WCHAR SZDDESYS_ITEM_RTNMSG[] = {'R','e','t','u','r','n','M','e','s','s','a','g','e',0}; static const WCHAR SZDDESYS_ITEM_STATUS[] = {'S','t','a','t','u','s',0}; static const WCHAR SZDDESYS_ITEM_FORMATS[] = {'F','o','r','m','a','t','s',0}; static const WCHAR SZDDESYS_ITEM_HELP[] = {'H','e','l','p',0}; static const WCHAR SZDDE_ITEM_ITEMLIST[] = {'T','o','p','i','c','I','t','e','m','L','i','s','t',0}; #endif #else /* UNICODE */ #define SZDDESYS_TOPIC "System" #define SZDDESYS_ITEM_TOPICS "Topics" #define SZDDESYS_ITEM_SYSITEMS "SysItems" #define SZDDESYS_ITEM_RTNMSG "ReturnMessage" #define SZDDESYS_ITEM_STATUS "Status" #define SZDDESYS_ITEM_FORMATS "Formats" #define SZDDESYS_ITEM_HELP "Help" #define SZDDE_ITEM_ITEMLIST "TopicItemList" #endif /*************************************************** FLAGS Section - copied from Microsoft SDK as must be standard, probably Copyright Microsoft Corporation ***************************************************/ #define XST_NULL 0 #define XST_INCOMPLETE 1 #define XST_CONNECTED 2 #define XST_INIT1 3 #define XST_INIT2 4 #define XST_REQSENT 5 #define XST_DATARCVD 6 #define XST_POKESENT 7 #define XST_POKEACKRCVD 8 #define XST_EXECSENT 9 #define XST_EXECACKRCVD 10 #define XST_ADVSENT 11 #define XST_UNADVSENT 12 #define XST_ADVACKRCVD 13 #define XST_UNADVACKRCVD 14 #define XST_ADVDATASENT 15 #define XST_ADVDATAACKRCVD 16 #define ST_CONNECTED 0x0001 #define ST_ADVISE 0x0002 #define ST_ISLOCAL 0x0004 #define ST_BLOCKED 0x0008 #define ST_CLIENT 0x0010 #define ST_TERMINATED 0x0020 #define ST_INLIST 0x0040 #define ST_BLOCKNEXT 0x0080 #define ST_ISSELF 0x0100 /* * DdeEnableCallback function codes */ #define EC_ENABLEALL 0 #define EC_ENABLEONE ST_BLOCKNEXT #define EC_DISABLE ST_BLOCKED #define EC_QUERYWAITING 2 /* * Callback filter flags for use with standard apps. */ #define CBF_FAIL_SELFCONNECTIONS 0x00001000 #define CBF_FAIL_CONNECTIONS 0x00002000 #define CBF_FAIL_ADVISES 0x00004000 #define CBF_FAIL_EXECUTES 0x00008000 #define CBF_FAIL_POKES 0x00010000 #define CBF_FAIL_REQUESTS 0x00020000 #define CBF_FAIL_ALLSVRXACTIONS 0x0003f000 #define CBF_SKIP_CONNECT_CONFIRMS 0x00040000 #define CBF_SKIP_REGISTRATIONS 0x00080000 #define CBF_SKIP_UNREGISTRATIONS 0x00100000 #define CBF_SKIP_DISCONNECTS 0x00200000 #define CBF_SKIP_ALLNOTIFICATIONS 0x003c0000 #define CBR_BLOCK ((HDDEDATA)-1) /* * Application command flags */ #define APPCMD_CLIENTONLY __MSABI_LONG(0x00000010) #define APPCMD_FILTERINITS __MSABI_LONG(0x00000020) #define APPCMD_MASK __MSABI_LONG(0x00000FF0) /* * Application classification flags */ #define APPCLASS_STANDARD __MSABI_LONG(0x00000000) #define APPCLASS_MONITOR __MSABI_LONG(0x00000001) #define APPCLASS_MASK __MSABI_LONG(0x0000000F) /* * Callback filter flags for use with MONITOR apps - 0 implies no monitor * callbacks. */ #define MF_HSZ_INFO 0x01000000 #define MF_SENDMSGS 0x02000000 #define MF_POSTMSGS 0x04000000 #define MF_CALLBACKS 0x08000000 #define MF_ERRORS 0x10000000 #define MF_LINKS 0x20000000 #define MF_CONV 0x40000000 #define MF_MASK 0xFF000000 /* * DdeNameService service name flags */ #define DNS_REGISTER 0x0001 #define DNS_UNREGISTER 0x0002 #define DNS_FILTERON 0x0004 #define DNS_FILTEROFF 0x0008 /**************************************************** End of Flags section ****************************************************/ /**************************************************** Message Types Section ****************************************************/ #define XTYPF_NOBLOCK 0x0002 /* CBR_NOBLOCK will not work */ #define XTYPF_NODATA 0x0004 /* DDE_FDEFERUPD */ #define XTYPF_ACKREQ 0x0008 /* DDE_FACKREQ */ #define XCLASS_MASK 0xFC00 #define XCLASS_BOOL 0x1000 #define XCLASS_DATA 0x2000 #define XCLASS_FLAGS 0x4000 #define XCLASS_NOTIFICATION 0x8000 #define XTYP_ERROR (0x0000 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK) #define XTYP_ADVDATA (0x0010 | XCLASS_FLAGS) #define XTYP_ADVREQ (0x0020 | XCLASS_DATA | XTYPF_NOBLOCK) #define XTYP_ADVSTART (0x0030 | XCLASS_BOOL) #define XTYP_ADVSTOP (0x0040 | XCLASS_NOTIFICATION) #define XTYP_EXECUTE (0x0050 | XCLASS_FLAGS) #define XTYP_CONNECT (0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK) #define XTYP_CONNECT_CONFIRM (0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK) #define XTYP_XACT_COMPLETE (0x0080 | XCLASS_NOTIFICATION ) #define XTYP_POKE (0x0090 | XCLASS_FLAGS) #define XTYP_REGISTER (0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK ) #define XTYP_REQUEST (0x00B0 | XCLASS_DATA ) #define XTYP_DISCONNECT (0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK ) #define XTYP_UNREGISTER (0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK ) #define XTYP_WILDCONNECT (0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK) #define XTYP_MONITOR (0x00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK) #define XTYP_MASK 0x00F0 #define XTYP_SHIFT 4 #define TIMEOUT_ASYNC 0xFFFFFFFF #define CADV_LATEACK 0xFFFF /************************************************** End of Message Types Section ****************************************************/ /***************************************************** DDE Codes for wStatus field *****************************************************/ #define DDE_FACK 0x8000 #define DDE_FBUSY 0x4000 #define DDE_FDEFERUPD 0x4000 #define DDE_FACKREQ 0x8000 #define DDE_FRELEASE 0x2000 #define DDE_FREQUESTED 0x1000 #define DDE_FAPPSTATUS 0x00FF #define DDE_FNOTPROCESSED 0x0000 #define DDE_FACKRESERVED (~(DDE_FACK | DDE_FBUSY | DDE_FAPPSTATUS)) #define DDE_FADVRESERVED (~(DDE_FACKREQ | DDE_FDEFERUPD)) #define DDE_FDATRESERVED (~(DDE_FACKREQ | DDE_FRELEASE | DDE_FREQUESTED)) #define DDE_FPOKRESERVED (~(DDE_FRELEASE)) /***************************************************** End of wStatus codes *****************************************************/ /**************************************************** Return Codes section again copied from SDK as must be same *****************************************************/ #define DMLERR_NO_ERROR 0 /* must be 0 */ #define DMLERR_FIRST 0x4000 #define DMLERR_ADVACKTIMEOUT 0x4000 #define DMLERR_BUSY 0x4001 #define DMLERR_DATAACKTIMEOUT 0x4002 #define DMLERR_DLL_NOT_INITIALIZED 0x4003 #define DMLERR_DLL_USAGE 0x4004 #define DMLERR_EXECACKTIMEOUT 0x4005 #define DMLERR_INVALIDPARAMETER 0x4006 #define DMLERR_LOW_MEMORY 0x4007 #define DMLERR_MEMORY_ERROR 0x4008 #define DMLERR_NOTPROCESSED 0x4009 #define DMLERR_NO_CONV_ESTABLISHED 0x400a #define DMLERR_POKEACKTIMEOUT 0x400b #define DMLERR_POSTMSG_FAILED 0x400c #define DMLERR_REENTRANCY 0x400d #define DMLERR_SERVER_DIED 0x400e #define DMLERR_SYS_ERROR 0x400f #define DMLERR_UNADVACKTIMEOUT 0x4010 #define DMLERR_UNFOUND_QUEUE_ID 0x4011 #define DMLERR_LAST 0x4011 #define HDATA_APPOWNED 0x0001 /***************************************************** End of Return Codes and Microsoft section ******************************************************/ DECLARE_HANDLE(HCONVLIST); DECLARE_HANDLE(HCONV); DECLARE_HANDLE(HSZ); DECLARE_HANDLE(HDDEDATA); /******************************************************* API Entry Points *******************************************************/ typedef HDDEDATA (CALLBACK *PFNCALLBACK)(UINT, UINT, HCONV, HSZ, HSZ, HDDEDATA, ULONG_PTR, ULONG_PTR); /*************************************************** Externally visible data structures ***************************************************/ typedef struct tagHSZPAIR { HSZ hszSvc; HSZ hszTopic; } HSZPAIR, *PHSZPAIR; typedef struct tagCONVCONTEXT { UINT cb; UINT wFlags; UINT wCountryID; INT iCodePage; DWORD dwLangID; DWORD dwSecurity; SECURITY_QUALITY_OF_SERVICE qos; } CONVCONTEXT, *PCONVCONTEXT; typedef struct tagCONVINFO { DWORD cb; DWORD_PTR hUser; HCONV hConvPartner; HSZ hszSvcPartner; HSZ hszServiceReq; HSZ hszTopic; HSZ hszItem; UINT wFmt; UINT wType; UINT wStatus; UINT wConvst; UINT wLastError; HCONVLIST hConvList; CONVCONTEXT ConvCtxt; HWND hwnd; HWND hwndPartner; } CONVINFO, *PCONVINFO; /* Interface Definitions */ WINUSERAPI BOOL WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction); WINUSERAPI LPBYTE WINAPI DdeAccessData(HDDEDATA,LPDWORD); WINUSERAPI HDDEDATA WINAPI DdeAddData(HDDEDATA,LPBYTE,DWORD,DWORD); WINUSERAPI HDDEDATA WINAPI DdeClientTransaction(LPBYTE,DWORD,HCONV,HSZ,UINT,UINT,DWORD,LPDWORD); WINUSERAPI INT WINAPI DdeCmpStringHandles(HSZ,HSZ); WINUSERAPI HCONV WINAPI DdeConnect(DWORD,HSZ,HSZ,PCONVCONTEXT); WINUSERAPI HCONVLIST WINAPI DdeConnectList(DWORD,HSZ,HSZ,HCONVLIST,PCONVCONTEXT); WINUSERAPI HDDEDATA WINAPI DdeCreateDataHandle(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT,UINT); WINUSERAPI HSZ WINAPI DdeCreateStringHandleA(DWORD,LPCSTR,INT); WINUSERAPI HSZ WINAPI DdeCreateStringHandleW(DWORD,LPCWSTR,INT); #define DdeCreateStringHandle WINELIB_NAME_AW(DdeCreateStringHandle) WINUSERAPI BOOL WINAPI DdeDisconnect(HCONV); WINUSERAPI BOOL WINAPI DdeDisconnectList(HCONVLIST); WINUSERAPI BOOL WINAPI DdeEnableCallback(DWORD,HCONV,UINT); WINUSERAPI BOOL WINAPI DdeFreeDataHandle(HDDEDATA); WINUSERAPI BOOL WINAPI DdeFreeStringHandle(DWORD,HSZ); WINUSERAPI DWORD WINAPI DdeGetData(HDDEDATA,LPBYTE,DWORD,DWORD); WINUSERAPI UINT WINAPI DdeGetLastError(DWORD); WINUSERAPI BOOL WINAPI DdeImpersonateClient(HCONV); WINUSERAPI UINT WINAPI DdeInitializeA(LPDWORD,PFNCALLBACK,DWORD,DWORD); WINUSERAPI UINT WINAPI DdeInitializeW(LPDWORD,PFNCALLBACK,DWORD,DWORD); #define DdeInitialize WINELIB_NAME_AW(DdeInitialize) WINUSERAPI BOOL WINAPI DdeKeepStringHandle(DWORD,HSZ); WINUSERAPI HDDEDATA WINAPI DdeNameService(DWORD,HSZ,HSZ,UINT); WINUSERAPI BOOL WINAPI DdePostAdvise(DWORD,HSZ,HSZ); WINUSERAPI UINT WINAPI DdeQueryConvInfo(HCONV,DWORD,PCONVINFO); WINUSERAPI HCONV WINAPI DdeQueryNextServer(HCONVLIST, HCONV); WINUSERAPI DWORD WINAPI DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, INT); WINUSERAPI DWORD WINAPI DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, INT); #define DdeQueryString WINELIB_NAME_AW(DdeQueryString) WINUSERAPI HCONV WINAPI DdeReconnect(HCONV); WINUSERAPI BOOL WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD); WINUSERAPI BOOL WINAPI DdeUnaccessData(HDDEDATA); WINUSERAPI BOOL WINAPI DdeUninitialize(DWORD); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_DDEML_H */ ================================================ FILE: wine/windows/ddraw.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DDRAW_INCLUDED__ #define __DDRAW_INCLUDED__ #define COM_NO_WINDOWS_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifndef DIRECTDRAW_VERSION #define DIRECTDRAW_VERSION 0x0700 #endif /* DIRECTDRAW_VERSION */ /***************************************************************************** * Predeclare the interfaces */ #ifndef __DDRAW_GUID_DEFINED__ DEFINE_GUID( CLSID_DirectDraw, 0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 ); DEFINE_GUID( CLSID_DirectDraw7, 0x3C305196,0x50DB,0x11D3,0x9C,0xFE,0x00,0xC0,0x4F,0xD9,0x30,0xC5 ); DEFINE_GUID( CLSID_DirectDrawClipper, 0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 ); DEFINE_GUID( IID_IDirectDraw, 0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); DEFINE_GUID( IID_IDirectDraw2, 0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 ); DEFINE_GUID( IID_IDirectDraw3, 0x618f8ad4,0x8b7a,0x11d0,0x8f,0xcc,0x0,0xc0,0x4f,0xd9,0x18,0x9d ); DEFINE_GUID( IID_IDirectDraw4, 0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 ); DEFINE_GUID( IID_IDirectDraw7, 0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); DEFINE_GUID( IID_IDirectDrawSurface, 0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); DEFINE_GUID( IID_IDirectDrawSurface2, 0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 ); DEFINE_GUID( IID_IDirectDrawSurface3, 0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB ); DEFINE_GUID( IID_IDirectDrawSurface4, 0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B ); DEFINE_GUID( IID_IDirectDrawSurface7, 0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); DEFINE_GUID( IID_IDirectDrawPalette, 0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); DEFINE_GUID( IID_IDirectDrawClipper, 0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); DEFINE_GUID( IID_IDirectDrawColorControl,0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 ); DEFINE_GUID( IID_IDirectDrawGammaControl,0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E ); #endif typedef struct IDirectDraw *LPDIRECTDRAW; typedef struct IDirectDraw2 *LPDIRECTDRAW2; typedef struct IDirectDraw3 *LPDIRECTDRAW3; typedef struct IDirectDraw4 *LPDIRECTDRAW4; typedef struct IDirectDraw7 *LPDIRECTDRAW7; typedef struct IDirectDrawClipper *LPDIRECTDRAWCLIPPER; typedef struct IDirectDrawPalette *LPDIRECTDRAWPALETTE; typedef struct IDirectDrawSurface *LPDIRECTDRAWSURFACE; typedef struct IDirectDrawSurface2 *LPDIRECTDRAWSURFACE2; typedef struct IDirectDrawSurface3 *LPDIRECTDRAWSURFACE3; typedef struct IDirectDrawSurface4 *LPDIRECTDRAWSURFACE4; typedef struct IDirectDrawSurface7 *LPDIRECTDRAWSURFACE7; typedef struct IDirectDrawColorControl *LPDIRECTDRAWCOLORCONTROL; typedef struct IDirectDrawGammaControl *LPDIRECTDRAWGAMMACONTROL; #define DDENUMRET_CANCEL 0 #define DDENUMRET_OK 1 #define DD_OK S_OK #define DD_FALSE S_FALSE #define _FACDD 0x876 #define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) #define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT( 5 ) #define DDERR_CANNOTATTACHSURFACE MAKE_DDHRESULT( 10 ) #define DDERR_CANNOTDETACHSURFACE MAKE_DDHRESULT( 20 ) #define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT( 40 ) #define DDERR_EXCEPTION MAKE_DDHRESULT( 55 ) #define DDERR_GENERIC E_FAIL #define DDERR_HEIGHTALIGN MAKE_DDHRESULT( 90 ) #define DDERR_INCOMPATIBLEPRIMARY MAKE_DDHRESULT( 95 ) #define DDERR_INVALIDCAPS MAKE_DDHRESULT( 100 ) #define DDERR_INVALIDCLIPLIST MAKE_DDHRESULT( 110 ) #define DDERR_INVALIDMODE MAKE_DDHRESULT( 120 ) #define DDERR_INVALIDOBJECT MAKE_DDHRESULT( 130 ) #define DDERR_INVALIDPARAMS E_INVALIDARG #define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT( 145 ) #define DDERR_INVALIDRECT MAKE_DDHRESULT( 150 ) #define DDERR_LOCKEDSURFACES MAKE_DDHRESULT( 160 ) #define DDERR_NO3D MAKE_DDHRESULT( 170 ) #define DDERR_NOALPHAHW MAKE_DDHRESULT( 180 ) #define DDERR_NOSTEREOHARDWARE MAKE_DDHRESULT( 181 ) #define DDERR_NOSURFACELEFT MAKE_DDHRESULT( 182 ) #define DDERR_NOCLIPLIST MAKE_DDHRESULT( 205 ) #define DDERR_NOCOLORCONVHW MAKE_DDHRESULT( 210 ) #define DDERR_NOCOOPERATIVELEVELSET MAKE_DDHRESULT( 212 ) #define DDERR_NOCOLORKEY MAKE_DDHRESULT( 215 ) #define DDERR_NOCOLORKEYHW MAKE_DDHRESULT( 220 ) #define DDERR_NODIRECTDRAWSUPPORT MAKE_DDHRESULT( 222 ) #define DDERR_NOEXCLUSIVEMODE MAKE_DDHRESULT( 225 ) #define DDERR_NOFLIPHW MAKE_DDHRESULT( 230 ) #define DDERR_NOGDI MAKE_DDHRESULT( 240 ) #define DDERR_NOMIRRORHW MAKE_DDHRESULT( 250 ) #define DDERR_NOTFOUND MAKE_DDHRESULT( 255 ) #define DDERR_NOOVERLAYHW MAKE_DDHRESULT( 260 ) #define DDERR_OVERLAPPINGRECTS MAKE_DDHRESULT( 270 ) #define DDERR_NORASTEROPHW MAKE_DDHRESULT( 280 ) #define DDERR_NOROTATIONHW MAKE_DDHRESULT( 290 ) #define DDERR_NOSTRETCHHW MAKE_DDHRESULT( 310 ) #define DDERR_NOT4BITCOLOR MAKE_DDHRESULT( 316 ) #define DDERR_NOT4BITCOLORINDEX MAKE_DDHRESULT( 317 ) #define DDERR_NOT8BITCOLOR MAKE_DDHRESULT( 320 ) #define DDERR_NOTEXTUREHW MAKE_DDHRESULT( 330 ) #define DDERR_NOVSYNCHW MAKE_DDHRESULT( 335 ) #define DDERR_NOZBUFFERHW MAKE_DDHRESULT( 340 ) #define DDERR_NOZOVERLAYHW MAKE_DDHRESULT( 350 ) #define DDERR_OUTOFCAPS MAKE_DDHRESULT( 360 ) #define DDERR_OUTOFMEMORY E_OUTOFMEMORY #define DDERR_OUTOFVIDEOMEMORY MAKE_DDHRESULT( 380 ) #define DDERR_OVERLAYCANTCLIP MAKE_DDHRESULT( 382 ) #define DDERR_OVERLAYCOLORKEYONLYONEACTIVE MAKE_DDHRESULT( 384 ) #define DDERR_PALETTEBUSY MAKE_DDHRESULT( 387 ) #define DDERR_COLORKEYNOTSET MAKE_DDHRESULT( 400 ) #define DDERR_SURFACEALREADYATTACHED MAKE_DDHRESULT( 410 ) #define DDERR_SURFACEALREADYDEPENDENT MAKE_DDHRESULT( 420 ) #define DDERR_SURFACEBUSY MAKE_DDHRESULT( 430 ) #define DDERR_CANTLOCKSURFACE MAKE_DDHRESULT( 435 ) #define DDERR_SURFACEISOBSCURED MAKE_DDHRESULT( 440 ) #define DDERR_SURFACELOST MAKE_DDHRESULT( 450 ) #define DDERR_SURFACENOTATTACHED MAKE_DDHRESULT( 460 ) #define DDERR_TOOBIGHEIGHT MAKE_DDHRESULT( 470 ) #define DDERR_TOOBIGSIZE MAKE_DDHRESULT( 480 ) #define DDERR_TOOBIGWIDTH MAKE_DDHRESULT( 490 ) #define DDERR_UNSUPPORTED E_NOTIMPL #define DDERR_UNSUPPORTEDFORMAT MAKE_DDHRESULT( 510 ) #define DDERR_UNSUPPORTEDMASK MAKE_DDHRESULT( 520 ) #define DDERR_INVALIDSTREAM MAKE_DDHRESULT( 521 ) #define DDERR_VERTICALBLANKINPROGRESS MAKE_DDHRESULT( 537 ) #define DDERR_WASSTILLDRAWING MAKE_DDHRESULT( 540 ) #define DDERR_DDSCAPSCOMPLEXREQUIRED MAKE_DDHRESULT( 542 ) #define DDERR_XALIGN MAKE_DDHRESULT( 560 ) #define DDERR_INVALIDDIRECTDRAWGUID MAKE_DDHRESULT( 561 ) #define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT( 562 ) #define DDERR_NODIRECTDRAWHW MAKE_DDHRESULT( 563 ) #define DDERR_PRIMARYSURFACEALREADYEXISTS MAKE_DDHRESULT( 564 ) #define DDERR_NOEMULATION MAKE_DDHRESULT( 565 ) #define DDERR_REGIONTOOSMALL MAKE_DDHRESULT( 566 ) #define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT( 567 ) #define DDERR_NOCLIPPERATTACHED MAKE_DDHRESULT( 568 ) #define DDERR_NOHWND MAKE_DDHRESULT( 569 ) #define DDERR_HWNDSUBCLASSED MAKE_DDHRESULT( 570 ) #define DDERR_HWNDALREADYSET MAKE_DDHRESULT( 571 ) #define DDERR_NOPALETTEATTACHED MAKE_DDHRESULT( 572 ) #define DDERR_NOPALETTEHW MAKE_DDHRESULT( 573 ) #define DDERR_BLTFASTCANTCLIP MAKE_DDHRESULT( 574 ) #define DDERR_NOBLTHW MAKE_DDHRESULT( 575 ) #define DDERR_NODDROPSHW MAKE_DDHRESULT( 576 ) #define DDERR_OVERLAYNOTVISIBLE MAKE_DDHRESULT( 577 ) #define DDERR_NOOVERLAYDEST MAKE_DDHRESULT( 578 ) #define DDERR_INVALIDPOSITION MAKE_DDHRESULT( 579 ) #define DDERR_NOTAOVERLAYSURFACE MAKE_DDHRESULT( 580 ) #define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT( 581 ) #define DDERR_NOTFLIPPABLE MAKE_DDHRESULT( 582 ) #define DDERR_CANTDUPLICATE MAKE_DDHRESULT( 583 ) #define DDERR_NOTLOCKED MAKE_DDHRESULT( 584 ) #define DDERR_CANTCREATEDC MAKE_DDHRESULT( 585 ) #define DDERR_NODC MAKE_DDHRESULT( 586 ) #define DDERR_WRONGMODE MAKE_DDHRESULT( 587 ) #define DDERR_IMPLICITLYCREATED MAKE_DDHRESULT( 588 ) #define DDERR_NOTPALETTIZED MAKE_DDHRESULT( 589 ) #define DDERR_UNSUPPORTEDMODE MAKE_DDHRESULT( 590 ) #define DDERR_NOMIPMAPHW MAKE_DDHRESULT( 591 ) #define DDERR_INVALIDSURFACETYPE MAKE_DDHRESULT( 592 ) #define DDERR_NOOPTIMIZEHW MAKE_DDHRESULT( 600 ) #define DDERR_NOTLOADED MAKE_DDHRESULT( 601 ) #define DDERR_NOFOCUSWINDOW MAKE_DDHRESULT( 602 ) #define DDERR_NOTONMIPMAPSUBLEVEL MAKE_DDHRESULT( 603 ) #define DDERR_DCALREADYCREATED MAKE_DDHRESULT( 620 ) #define DDERR_NONONLOCALVIDMEM MAKE_DDHRESULT( 630 ) #define DDERR_CANTPAGELOCK MAKE_DDHRESULT( 640 ) #define DDERR_CANTPAGEUNLOCK MAKE_DDHRESULT( 660 ) #define DDERR_NOTPAGELOCKED MAKE_DDHRESULT( 680 ) #define DDERR_MOREDATA MAKE_DDHRESULT( 690 ) #define DDERR_EXPIRED MAKE_DDHRESULT( 691 ) #define DDERR_TESTFINISHED MAKE_DDHRESULT( 692 ) #define DDERR_NEWMODE MAKE_DDHRESULT( 693 ) #define DDERR_D3DNOTINITIALIZED MAKE_DDHRESULT( 694 ) #define DDERR_VIDEONOTACTIVE MAKE_DDHRESULT( 695 ) #define DDERR_NOMONITORINFORMATION MAKE_DDHRESULT( 696 ) #define DDERR_NODRIVERSUPPORT MAKE_DDHRESULT( 697 ) #define DDERR_DEVICEDOESNTOWNSURFACE MAKE_DDHRESULT( 699 ) #define DDERR_NOTINITIALIZED CO_E_NOTINITIALIZED /* dwFlags for Blt* */ #define DDBLT_ALPHADEST 0x00000001 #define DDBLT_ALPHADESTCONSTOVERRIDE 0x00000002 #define DDBLT_ALPHADESTNEG 0x00000004 #define DDBLT_ALPHADESTSURFACEOVERRIDE 0x00000008 #define DDBLT_ALPHAEDGEBLEND 0x00000010 #define DDBLT_ALPHASRC 0x00000020 #define DDBLT_ALPHASRCCONSTOVERRIDE 0x00000040 #define DDBLT_ALPHASRCNEG 0x00000080 #define DDBLT_ALPHASRCSURFACEOVERRIDE 0x00000100 #define DDBLT_ASYNC 0x00000200 #define DDBLT_COLORFILL 0x00000400 #define DDBLT_DDFX 0x00000800 #define DDBLT_DDROPS 0x00001000 #define DDBLT_KEYDEST 0x00002000 #define DDBLT_KEYDESTOVERRIDE 0x00004000 #define DDBLT_KEYSRC 0x00008000 #define DDBLT_KEYSRCOVERRIDE 0x00010000 #define DDBLT_ROP 0x00020000 #define DDBLT_ROTATIONANGLE 0x00040000 #define DDBLT_ZBUFFER 0x00080000 #define DDBLT_ZBUFFERDESTCONSTOVERRIDE 0x00100000 #define DDBLT_ZBUFFERDESTOVERRIDE 0x00200000 #define DDBLT_ZBUFFERSRCCONSTOVERRIDE 0x00400000 #define DDBLT_ZBUFFERSRCOVERRIDE 0x00800000 #define DDBLT_WAIT 0x01000000 #define DDBLT_DEPTHFILL 0x02000000 #define DDBLT_DONOTWAIT 0x08000000 /* dwTrans for BltFast */ #define DDBLTFAST_NOCOLORKEY 0x00000000 #define DDBLTFAST_SRCCOLORKEY 0x00000001 #define DDBLTFAST_DESTCOLORKEY 0x00000002 #define DDBLTFAST_WAIT 0x00000010 #define DDBLTFAST_DONOTWAIT 0x00000020 /* dwFlags for Flip */ #define DDFLIP_WAIT 0x00000001 #define DDFLIP_EVEN 0x00000002 /* only valid for overlay */ #define DDFLIP_ODD 0x00000004 /* only valid for overlay */ #define DDFLIP_NOVSYNC 0x00000008 #define DDFLIP_STEREO 0x00000010 #define DDFLIP_DONOTWAIT 0x00000020 #define DDFLIP_INTERVAL2 0x02000000 #define DDFLIP_INTERVAL3 0x03000000 #define DDFLIP_INTERVAL4 0x04000000 /* dwFlags for GetBltStatus */ #define DDGBS_CANBLT 0x00000001 #define DDGBS_ISBLTDONE 0x00000002 /* dwFlags for IDirectDrawSurface7::GetFlipStatus */ #define DDGFS_CANFLIP __MSABI_LONG(1) #define DDGFS_ISFLIPDONE __MSABI_LONG(2) /* dwFlags for IDirectDrawSurface7::SetPrivateData */ #define DDSPD_IUNKNOWNPOINTER __MSABI_LONG(1) #define DDSPD_VOLATILE __MSABI_LONG(2) /* DDSCAPS.dwCaps */ /* reserved1, was 3d capable */ #define DDSCAPS_RESERVED1 0x00000001 /* surface contains alpha information */ #define DDSCAPS_ALPHA 0x00000002 /* this surface is a backbuffer */ #define DDSCAPS_BACKBUFFER 0x00000004 /* complex surface structure */ #define DDSCAPS_COMPLEX 0x00000008 /* part of surface flipping structure */ #define DDSCAPS_FLIP 0x00000010 /* this surface is the frontbuffer surface */ #define DDSCAPS_FRONTBUFFER 0x00000020 /* this is a plain offscreen surface */ #define DDSCAPS_OFFSCREENPLAIN 0x00000040 /* overlay */ #define DDSCAPS_OVERLAY 0x00000080 /* palette objects can be created and attached to us */ #define DDSCAPS_PALETTE 0x00000100 /* primary surface (the one the user looks at currently)(right eye)*/ #define DDSCAPS_PRIMARYSURFACE 0x00000200 /* primary surface for left eye */ #define DDSCAPS_PRIMARYSURFACELEFT 0x00000400 /* surface exists in systemmemory */ #define DDSCAPS_SYSTEMMEMORY 0x00000800 /* surface can be used as a texture */ #define DDSCAPS_TEXTURE 0x00001000 /* surface may be destination for 3d rendering */ #define DDSCAPS_3DDEVICE 0x00002000 /* surface exists in videomemory */ #define DDSCAPS_VIDEOMEMORY 0x00004000 /* surface changes immediately visible */ #define DDSCAPS_VISIBLE 0x00008000 /* write only surface */ #define DDSCAPS_WRITEONLY 0x00010000 /* zbuffer surface */ #define DDSCAPS_ZBUFFER 0x00020000 /* has its own DC */ #define DDSCAPS_OWNDC 0x00040000 /* surface should be able to receive live video */ #define DDSCAPS_LIVEVIDEO 0x00080000 /* should be able to have a hw codec decompress stuff into it */ #define DDSCAPS_HWCODEC 0x00100000 /* mode X (320x200 or 320x240) surface */ #define DDSCAPS_MODEX 0x00200000 /* one mipmap surface (1 level) */ #define DDSCAPS_MIPMAP 0x00400000 #define DDSCAPS_RESERVED2 0x00800000 /* memory allocation delayed until Load() */ #define DDSCAPS_ALLOCONLOAD 0x04000000 /* Indicates that the surface will receive data from a video port */ #define DDSCAPS_VIDEOPORT 0x08000000 /* surface is in local videomemory */ #define DDSCAPS_LOCALVIDMEM 0x10000000 /* surface is in nonlocal videomemory */ #define DDSCAPS_NONLOCALVIDMEM 0x20000000 /* surface is a standard VGA mode surface (NOT ModeX) */ #define DDSCAPS_STANDARDVGAMODE 0x40000000 /* optimized? surface */ #define DDSCAPS_OPTIMIZED 0x80000000 typedef struct _DDSCAPS { DWORD dwCaps; /* capabilities of surface wanted */ } DDSCAPS,*LPDDSCAPS; /* DDSCAPS2.dwCaps2 */ /* indicates the surface will receive data from a video port using deinterlacing hardware. */ #define DDSCAPS2_HARDWAREDEINTERLACE 0x00000002 /* indicates the surface will be locked very frequently. */ #define DDSCAPS2_HINTDYNAMIC 0x00000004 /* indicates surface can be re-ordered or retiled on load() */ #define DDSCAPS2_HINTSTATIC 0x00000008 /* indicates surface to be managed by directdraw/direct3D */ #define DDSCAPS2_TEXTUREMANAGE 0x00000010 /* reserved bits */ #define DDSCAPS2_RESERVED1 0x00000020 #define DDSCAPS2_RESERVED2 0x00000040 /* indicates surface will never be locked again */ #define DDSCAPS2_OPAQUE 0x00000080 /* set at CreateSurface() time to indicate antialiasing will be used */ #define DDSCAPS2_HINTANTIALIASING 0x00000100 /* set at CreateSurface() time to indicate cubic environment map */ #define DDSCAPS2_CUBEMAP 0x00000200 /* face flags for cube maps */ #define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 #define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 #define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 #define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 #define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 #define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 /* specifies all faces of a cube for CreateSurface() */ #define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\ DDSCAPS2_CUBEMAP_NEGATIVEX |\ DDSCAPS2_CUBEMAP_POSITIVEY |\ DDSCAPS2_CUBEMAP_NEGATIVEY |\ DDSCAPS2_CUBEMAP_POSITIVEZ |\ DDSCAPS2_CUBEMAP_NEGATIVEZ ) /* set for mipmap sublevels on DirectX7 and later. ignored by CreateSurface() */ #define DDSCAPS2_MIPMAPSUBLEVEL 0x00010000 /* indicates texture surface to be managed by Direct3D *only* */ #define DDSCAPS2_D3DTEXTUREMANAGE 0x00020000 /* indicates managed surface that can safely be lost */ #define DDSCAPS2_DONOTPERSIST 0x00040000 /* indicates surface is part of a stereo flipping chain */ #define DDSCAPS2_STEREOSURFACELEFT 0x00080000 #define DDSCAPS2_VOLUME 0x00200000 typedef struct _DDSCAPS2 { DWORD dwCaps; /* capabilities of surface wanted */ DWORD dwCaps2; /* additional capabilities */ DWORD dwCaps3; /* reserved capabilities */ union { DWORD dwCaps4; /* more reserved capabilities */ DWORD dwVolumeDepth; } DUMMYUNIONNAME1; } DDSCAPS2,*LPDDSCAPS2; #define DD_ROP_SPACE (256/32) /* space required to store ROP array */ typedef struct _DDCAPS_DX7 /* DirectX 7 version of caps struct */ { DWORD dwSize; /* size of the DDDRIVERCAPS structure */ DWORD dwCaps; /* driver specific capabilities */ DWORD dwCaps2; /* more driver specific capabilities */ DWORD dwCKeyCaps; /* color key capabilities of the surface */ DWORD dwFXCaps; /* driver specific stretching and effects capabilities */ DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ DWORD dwPalCaps; /* palette capabilities */ DWORD dwSVCaps; /* stereo vision capabilities */ DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ DWORD dwVidMemTotal; /* total amount of video memory */ DWORD dwVidMemFree; /* amount of free video memory */ DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ DWORD dwNumFourCCCodes; /* number of four cc codes */ DWORD dwAlignBoundarySrc; /* source rectangle alignment */ DWORD dwAlignSizeSrc; /* source rectangle byte size */ DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ DWORD dwAlignSizeDest; /* dest rectangle byte size */ DWORD dwAlignStrideAlign; /* stride alignment */ DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */ DDSCAPS ddsOldCaps; /* old DDSCAPS - superseded for DirectX6+ */ DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */ DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */ DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */ DWORD dwMaxVideoPorts; /* maximum number of usable video ports */ DWORD dwCurrVideoPorts; /* current number of video ports used */ DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */ DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */ DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */ DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */ DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */ DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */ DDSCAPS2 ddsCaps; /* surface capabilities */ } DDCAPS_DX7,*LPDDCAPS_DX7; typedef struct _DDCAPS_DX6 /* DirectX 6 version of caps struct */ { DWORD dwSize; /* size of the DDDRIVERCAPS structure */ DWORD dwCaps; /* driver specific capabilities */ DWORD dwCaps2; /* more driver specific capabilities */ DWORD dwCKeyCaps; /* color key capabilities of the surface */ DWORD dwFXCaps; /* driver specific stretching and effects capabilities */ DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ DWORD dwPalCaps; /* palette capabilities */ DWORD dwSVCaps; /* stereo vision capabilities */ DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ DWORD dwVidMemTotal; /* total amount of video memory */ DWORD dwVidMemFree; /* amount of free video memory */ DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ DWORD dwNumFourCCCodes; /* number of four cc codes */ DWORD dwAlignBoundarySrc; /* source rectangle alignment */ DWORD dwAlignSizeSrc; /* source rectangle byte size */ DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ DWORD dwAlignSizeDest; /* dest rectangle byte size */ DWORD dwAlignStrideAlign; /* stride alignment */ DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */ DDSCAPS ddsOldCaps; /* old DDSCAPS - superseded for DirectX6+ */ DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */ DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */ DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */ DWORD dwMaxVideoPorts; /* maximum number of usable video ports */ DWORD dwCurrVideoPorts; /* current number of video ports used */ DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */ DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */ DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */ DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */ DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */ DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */ /* and one new member for DirectX 6 */ DDSCAPS2 ddsCaps; /* surface capabilities */ } DDCAPS_DX6,*LPDDCAPS_DX6; typedef struct _DDCAPS_DX5 /* DirectX5 version of caps struct */ { DWORD dwSize; /* size of the DDDRIVERCAPS structure */ DWORD dwCaps; /* driver specific capabilities */ DWORD dwCaps2; /* more driver specific capabilities */ DWORD dwCKeyCaps; /* color key capabilities of the surface */ DWORD dwFXCaps; /* driver specific stretching and effects capabilities */ DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ DWORD dwPalCaps; /* palette capabilities */ DWORD dwSVCaps; /* stereo vision capabilities */ DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ DWORD dwVidMemTotal; /* total amount of video memory */ DWORD dwVidMemFree; /* amount of free video memory */ DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ DWORD dwNumFourCCCodes; /* number of four cc codes */ DWORD dwAlignBoundarySrc; /* source rectangle alignment */ DWORD dwAlignSizeSrc; /* source rectangle byte size */ DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ DWORD dwAlignSizeDest; /* dest rectangle byte size */ DWORD dwAlignStrideAlign; /* stride alignment */ DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */ DDSCAPS ddsCaps; /* DDSCAPS structure has all the general capabilities */ DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */ DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */ DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */ /* the following are the new DirectX 5 members */ DWORD dwMaxVideoPorts; /* maximum number of usable video ports */ DWORD dwCurrVideoPorts; /* current number of video ports used */ DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */ DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */ DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */ DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */ DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */ DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */ } DDCAPS_DX5,*LPDDCAPS_DX5; typedef struct _DDCAPS_DX3 /* DirectX3 version of caps struct */ { DWORD dwSize; /* size of the DDDRIVERCAPS structure */ DWORD dwCaps; /* driver specific capabilities */ DWORD dwCaps2; /* more driver specific capabilities */ DWORD dwCKeyCaps; /* color key capabilities of the surface */ DWORD dwFXCaps; /* driver specific stretching and effects capabilities */ DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ DWORD dwPalCaps; /* palette capabilities */ DWORD dwSVCaps; /* stereo vision capabilities */ DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ DWORD dwVidMemTotal; /* total amount of video memory */ DWORD dwVidMemFree; /* amount of free video memory */ DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ DWORD dwNumFourCCCodes; /* number of four cc codes */ DWORD dwAlignBoundarySrc; /* source rectangle alignment */ DWORD dwAlignSizeSrc; /* source rectangle byte size */ DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ DWORD dwAlignSizeDest; /* dest rectangle byte size */ DWORD dwAlignStrideAlign; /* stride alignment */ DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */ DDSCAPS ddsCaps; /* DDSCAPS structure has all the general capabilities */ DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */ DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */ DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */ DWORD dwReserved4; DWORD dwReserved5; DWORD dwReserved6; } DDCAPS_DX3,*LPDDCAPS_DX3; /* set caps struct according to DIRECTDRAW_VERSION */ #if DIRECTDRAW_VERSION <= 0x300 typedef DDCAPS_DX3 DDCAPS; #elif DIRECTDRAW_VERSION <= 0x500 typedef DDCAPS_DX5 DDCAPS; #elif DIRECTDRAW_VERSION <= 0x600 typedef DDCAPS_DX6 DDCAPS; #else typedef DDCAPS_DX7 DDCAPS; #endif typedef DDCAPS *LPDDCAPS; /* DDCAPS.dwCaps */ #define DDCAPS_3D 0x00000001 #define DDCAPS_ALIGNBOUNDARYDEST 0x00000002 #define DDCAPS_ALIGNSIZEDEST 0x00000004 #define DDCAPS_ALIGNBOUNDARYSRC 0x00000008 #define DDCAPS_ALIGNSIZESRC 0x00000010 #define DDCAPS_ALIGNSTRIDE 0x00000020 #define DDCAPS_BLT 0x00000040 #define DDCAPS_BLTQUEUE 0x00000080 #define DDCAPS_BLTFOURCC 0x00000100 #define DDCAPS_BLTSTRETCH 0x00000200 #define DDCAPS_GDI 0x00000400 #define DDCAPS_OVERLAY 0x00000800 #define DDCAPS_OVERLAYCANTCLIP 0x00001000 #define DDCAPS_OVERLAYFOURCC 0x00002000 #define DDCAPS_OVERLAYSTRETCH 0x00004000 #define DDCAPS_PALETTE 0x00008000 #define DDCAPS_PALETTEVSYNC 0x00010000 #define DDCAPS_READSCANLINE 0x00020000 #define DDCAPS_STEREOVIEW 0x00040000 #define DDCAPS_VBI 0x00080000 #define DDCAPS_ZBLTS 0x00100000 #define DDCAPS_ZOVERLAYS 0x00200000 #define DDCAPS_COLORKEY 0x00400000 #define DDCAPS_ALPHA 0x00800000 #define DDCAPS_COLORKEYHWASSIST 0x01000000 #define DDCAPS_NOHARDWARE 0x02000000 #define DDCAPS_BLTCOLORFILL 0x04000000 #define DDCAPS_BANKSWITCHED 0x08000000 #define DDCAPS_BLTDEPTHFILL 0x10000000 #define DDCAPS_CANCLIP 0x20000000 #define DDCAPS_CANCLIPSTRETCHED 0x40000000 #define DDCAPS_CANBLTSYSMEM 0x80000000 /* DDCAPS.dwCaps2 */ #define DDCAPS2_CERTIFIED 0x00000001 #define DDCAPS2_NO2DDURING3DSCENE 0x00000002 #define DDCAPS2_VIDEOPORT 0x00000004 #define DDCAPS2_AUTOFLIPOVERLAY 0x00000008 #define DDCAPS2_CANBOBINTERLEAVED 0x00000010 #define DDCAPS2_CANBOBNONINTERLEAVED 0x00000020 #define DDCAPS2_COLORCONTROLOVERLAY 0x00000040 #define DDCAPS2_COLORCONTROLPRIMARY 0x00000080 #define DDCAPS2_CANDROPZ16BIT 0x00000100 #define DDCAPS2_NONLOCALVIDMEM 0x00000200 #define DDCAPS2_NONLOCALVIDMEMCAPS 0x00000400 #define DDCAPS2_NOPAGELOCKREQUIRED 0x00000800 #define DDCAPS2_WIDESURFACES 0x00001000 #define DDCAPS2_CANFLIPODDEVEN 0x00002000 #define DDCAPS2_CANBOBHARDWARE 0x00004000 #define DDCAPS2_COPYFOURCC 0x00008000 #define DDCAPS2_PRIMARYGAMMA 0x00020000 #define DDCAPS2_CANRENDERWINDOWED 0x00080000 #define DDCAPS2_CANCALIBRATEGAMMA 0x00100000 #define DDCAPS2_FLIPINTERVAL 0x00200000 #define DDCAPS2_FLIPNOVSYNC 0x00400000 #define DDCAPS2_CANMANAGETEXTURE 0x00800000 #define DDCAPS2_TEXMANINNONLOCALVIDMEM 0x01000000 #define DDCAPS2_STEREO 0x02000000 #define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL 0x04000000 /* Set/Get Colour Key Flags */ #define DDCKEY_COLORSPACE 0x00000001 /* Struct is single colour space */ #define DDCKEY_DESTBLT 0x00000002 /* To be used as dest for blt */ #define DDCKEY_DESTOVERLAY 0x00000004 /* To be used as dest for CK overlays */ #define DDCKEY_SRCBLT 0x00000008 /* To be used as src for blt */ #define DDCKEY_SRCOVERLAY 0x00000010 /* To be used as src for CK overlays */ typedef struct _DDCOLORKEY { DWORD dwColorSpaceLowValue;/* low boundary of color space that is to * be treated as Color Key, inclusive */ DWORD dwColorSpaceHighValue;/* high boundary of color space that is * to be treated as Color Key, inclusive */ } DDCOLORKEY,*LPDDCOLORKEY; /* ddCKEYCAPS bits */ #define DDCKEYCAPS_DESTBLT 0x00000001 #define DDCKEYCAPS_DESTBLTCLRSPACE 0x00000002 #define DDCKEYCAPS_DESTBLTCLRSPACEYUV 0x00000004 #define DDCKEYCAPS_DESTBLTYUV 0x00000008 #define DDCKEYCAPS_DESTOVERLAY 0x00000010 #define DDCKEYCAPS_DESTOVERLAYCLRSPACE 0x00000020 #define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV 0x00000040 #define DDCKEYCAPS_DESTOVERLAYONEACTIVE 0x00000080 #define DDCKEYCAPS_DESTOVERLAYYUV 0x00000100 #define DDCKEYCAPS_SRCBLT 0x00000200 #define DDCKEYCAPS_SRCBLTCLRSPACE 0x00000400 #define DDCKEYCAPS_SRCBLTCLRSPACEYUV 0x00000800 #define DDCKEYCAPS_SRCBLTYUV 0x00001000 #define DDCKEYCAPS_SRCOVERLAY 0x00002000 #define DDCKEYCAPS_SRCOVERLAYCLRSPACE 0x00004000 #define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV 0x00008000 #define DDCKEYCAPS_SRCOVERLAYONEACTIVE 0x00010000 #define DDCKEYCAPS_SRCOVERLAYYUV 0x00020000 #define DDCKEYCAPS_NOCOSTOVERLAY 0x00040000 typedef struct _DDPIXELFORMAT { DWORD dwSize; /* 0: size of structure */ DWORD dwFlags; /* 4: pixel format flags */ DWORD dwFourCC; /* 8: (FOURCC code) */ union { DWORD dwRGBBitCount; /* C: how many bits per pixel */ DWORD dwYUVBitCount; /* C: how many bits per pixel */ DWORD dwZBufferBitDepth; /* C: how many bits for z buffers */ DWORD dwAlphaBitDepth; /* C: how many bits for alpha channels*/ DWORD dwLuminanceBitCount; DWORD dwBumpBitCount; } DUMMYUNIONNAME1; union { DWORD dwRBitMask; /* 10: mask for red bit*/ DWORD dwYBitMask; /* 10: mask for Y bits*/ DWORD dwStencilBitDepth; DWORD dwLuminanceBitMask; DWORD dwBumpDuBitMask; } DUMMYUNIONNAME2; union { DWORD dwGBitMask; /* 14: mask for green bits*/ DWORD dwUBitMask; /* 14: mask for U bits*/ DWORD dwZBitMask; DWORD dwBumpDvBitMask; } DUMMYUNIONNAME3; union { DWORD dwBBitMask; /* 18: mask for blue bits*/ DWORD dwVBitMask; /* 18: mask for V bits*/ DWORD dwStencilBitMask; DWORD dwBumpLuminanceBitMask; } DUMMYUNIONNAME4; union { DWORD dwRGBAlphaBitMask; /* 1C: mask for alpha channel */ DWORD dwYUVAlphaBitMask; /* 1C: mask for alpha channel */ DWORD dwLuminanceAlphaBitMask; DWORD dwRGBZBitMask; /* 1C: mask for Z channel */ DWORD dwYUVZBitMask; /* 1C: mask for Z channel */ } DUMMYUNIONNAME5; /* 20: next structure */ } DDPIXELFORMAT,*LPDDPIXELFORMAT; #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) /* DDCAPS.dwFXCaps */ #define DDFXCAPS_BLTALPHA 0x00000001 #define DDFXCAPS_OVERLAYALPHA 0x00000004 #define DDFXCAPS_BLTARITHSTRETCHYN 0x00000010 #define DDFXCAPS_BLTARITHSTRETCHY 0x00000020 #define DDFXCAPS_BLTMIRRORLEFTRIGHT 0x00000040 #define DDFXCAPS_BLTMIRRORUPDOWN 0x00000080 #define DDFXCAPS_BLTROTATION 0x00000100 #define DDFXCAPS_BLTROTATION90 0x00000200 #define DDFXCAPS_BLTSHRINKX 0x00000400 #define DDFXCAPS_BLTSHRINKXN 0x00000800 #define DDFXCAPS_BLTSHRINKY 0x00001000 #define DDFXCAPS_BLTSHRINKYN 0x00002000 #define DDFXCAPS_BLTSTRETCHX 0x00004000 #define DDFXCAPS_BLTSTRETCHXN 0x00008000 #define DDFXCAPS_BLTSTRETCHY 0x00010000 #define DDFXCAPS_BLTSTRETCHYN 0x00020000 #define DDFXCAPS_OVERLAYARITHSTRETCHY 0x00040000 #define DDFXCAPS_OVERLAYARITHSTRETCHYN 0x00000008 #define DDFXCAPS_OVERLAYSHRINKX 0x00080000 #define DDFXCAPS_OVERLAYSHRINKXN 0x00100000 #define DDFXCAPS_OVERLAYSHRINKY 0x00200000 #define DDFXCAPS_OVERLAYSHRINKYN 0x00400000 #define DDFXCAPS_OVERLAYSTRETCHX 0x00800000 #define DDFXCAPS_OVERLAYSTRETCHXN 0x01000000 #define DDFXCAPS_OVERLAYSTRETCHY 0x02000000 #define DDFXCAPS_OVERLAYSTRETCHYN 0x04000000 #define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000 #define DDFXCAPS_OVERLAYMIRRORUPDOWN 0x10000000 #define DDFXCAPS_OVERLAYFILTER DDFXCAPS_OVERLAYARITHSTRETCHY /* DDCAPS.dwFXAlphaCaps */ #define DDFXALPHACAPS_BLTALPHAEDGEBLEND 0x00000001 #define DDFXALPHACAPS_BLTALPHAPIXELS 0x00000002 #define DDFXALPHACAPS_BLTALPHAPIXELSNEG 0x00000004 #define DDFXALPHACAPS_BLTALPHASURFACES 0x00000008 #define DDFXALPHACAPS_BLTALPHASURFACESNEG 0x00000010 #define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND 0x00000020 #define DDFXALPHACAPS_OVERLAYALPHAPIXELS 0x00000040 #define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG 0x00000080 #define DDFXALPHACAPS_OVERLAYALPHASURFACES 0x00000100 #define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG 0x00000200 /* DDCAPS.dwPalCaps */ #define DDPCAPS_4BIT 0x00000001 #define DDPCAPS_8BITENTRIES 0x00000002 #define DDPCAPS_8BIT 0x00000004 #define DDPCAPS_INITIALIZE 0x00000008 #define DDPCAPS_PRIMARYSURFACE 0x00000010 #define DDPCAPS_PRIMARYSURFACELEFT 0x00000020 #define DDPCAPS_ALLOW256 0x00000040 #define DDPCAPS_VSYNC 0x00000080 #define DDPCAPS_1BIT 0x00000100 #define DDPCAPS_2BIT 0x00000200 #define DDPCAPS_ALPHA 0x00000400 /* DDCAPS.dwSVCaps */ /* the first 4 of these are now obsolete */ #if DIRECTDRAW_VERSION >= 0x700 /* FIXME: I'm not sure when this switch occurred */ #define DDSVCAPS_RESERVED1 0x00000001 #define DDSVCAPS_RESERVED2 0x00000002 #define DDSVCAPS_RESERVED3 0x00000004 #define DDSVCAPS_RESERVED4 0x00000008 #else #define DDSVCAPS_ENIGMA 0x00000001 #define DDSVCAPS_FLICKER 0x00000002 #define DDSVCAPS_REDBLUE 0x00000004 #define DDSVCAPS_SPLIT 0x00000008 #endif #define DDSVCAPS_STEREOSEQUENTIAL 0x00000010 /* BitDepths */ #define DDBD_1 0x00004000 #define DDBD_2 0x00002000 #define DDBD_4 0x00001000 #define DDBD_8 0x00000800 #define DDBD_16 0x00000400 #define DDBD_24 0x00000200 #define DDBD_32 0x00000100 /* DDOVERLAYFX.dwDDFX */ #define DDOVERFX_ARITHSTRETCHY 0x00000001 #define DDOVERFX_MIRRORLEFTRIGHT 0x00000002 #define DDOVERFX_MIRRORUPDOWN 0x00000004 /* UpdateOverlay flags */ #define DDOVER_ALPHADEST 0x00000001 #define DDOVER_ALPHADESTCONSTOVERRIDE 0x00000002 #define DDOVER_ALPHADESTNEG 0x00000004 #define DDOVER_ALPHADESTSURFACEOVERRIDE 0x00000008 #define DDOVER_ALPHAEDGEBLEND 0x00000010 #define DDOVER_ALPHASRC 0x00000020 #define DDOVER_ALPHASRCCONSTOVERRIDE 0x00000040 #define DDOVER_ALPHASRCNEG 0x00000080 #define DDOVER_ALPHASRCSURFACEOVERRIDE 0x00000100 #define DDOVER_HIDE 0x00000200 #define DDOVER_KEYDEST 0x00000400 #define DDOVER_KEYDESTOVERRIDE 0x00000800 #define DDOVER_KEYSRC 0x00001000 #define DDOVER_KEYSRCOVERRIDE 0x00002000 #define DDOVER_SHOW 0x00004000 #define DDOVER_ADDDIRTYRECT 0x00008000 #define DDOVER_REFRESHDIRTYRECTS 0x00010000 #define DDOVER_REFRESHALL 0x00020000 #define DDOVER_DDFX 0x00080000 #define DDOVER_AUTOFLIP 0x00100000 #define DDOVER_BOB 0x00200000 #define DDOVER_OVERRIDEBOBWEAVE 0x00400000 #define DDOVER_INTERLEAVED 0x00800000 /* DDPIXELFORMAT.dwFlags */ #define DDPF_ALPHAPIXELS 0x00000001 #define DDPF_ALPHA 0x00000002 #define DDPF_FOURCC 0x00000004 #define DDPF_PALETTEINDEXED4 0x00000008 #define DDPF_PALETTEINDEXEDTO8 0x00000010 #define DDPF_PALETTEINDEXED8 0x00000020 #define DDPF_RGB 0x00000040 #define DDPF_COMPRESSED 0x00000080 #define DDPF_RGBTOYUV 0x00000100 #define DDPF_YUV 0x00000200 #define DDPF_ZBUFFER 0x00000400 #define DDPF_PALETTEINDEXED1 0x00000800 #define DDPF_PALETTEINDEXED2 0x00001000 #define DDPF_ZPIXELS 0x00002000 #define DDPF_STENCILBUFFER 0x00004000 #define DDPF_ALPHAPREMULT 0x00008000 #define DDPF_LUMINANCE 0x00020000 #define DDPF_BUMPLUMINANCE 0x00040000 #define DDPF_BUMPDUDV 0x00080000 /* SetCooperativeLevel dwFlags */ #define DDSCL_FULLSCREEN 0x00000001 #define DDSCL_ALLOWREBOOT 0x00000002 #define DDSCL_NOWINDOWCHANGES 0x00000004 #define DDSCL_NORMAL 0x00000008 #define DDSCL_EXCLUSIVE 0x00000010 #define DDSCL_ALLOWMODEX 0x00000040 #define DDSCL_SETFOCUSWINDOW 0x00000080 #define DDSCL_SETDEVICEWINDOW 0x00000100 #define DDSCL_CREATEDEVICEWINDOW 0x00000200 #define DDSCL_MULTITHREADED 0x00000400 #define DDSCL_FPUSETUP 0x00000800 #define DDSCL_FPUPRESERVE 0x00001000 /* DDSURFACEDESC.dwFlags */ #define DDSD_CAPS 0x00000001 #define DDSD_HEIGHT 0x00000002 #define DDSD_WIDTH 0x00000004 #define DDSD_PITCH 0x00000008 #define DDSD_BACKBUFFERCOUNT 0x00000020 #define DDSD_ZBUFFERBITDEPTH 0x00000040 #define DDSD_ALPHABITDEPTH 0x00000080 #define DDSD_LPSURFACE 0x00000800 #define DDSD_PIXELFORMAT 0x00001000 #define DDSD_CKDESTOVERLAY 0x00002000 #define DDSD_CKDESTBLT 0x00004000 #define DDSD_CKSRCOVERLAY 0x00008000 #define DDSD_CKSRCBLT 0x00010000 #define DDSD_MIPMAPCOUNT 0x00020000 #define DDSD_REFRESHRATE 0x00040000 #define DDSD_LINEARSIZE 0x00080000 #define DDSD_TEXTURESTAGE 0x00100000 #define DDSD_FVF 0x00200000 #define DDSD_SRCVBHANDLE 0x00400000 #define DDSD_DEPTH 0x00800000 #define DDSD_ALL 0x00fff9ee /* EnumSurfaces flags */ #define DDENUMSURFACES_ALL 0x00000001 #define DDENUMSURFACES_MATCH 0x00000002 #define DDENUMSURFACES_NOMATCH 0x00000004 #define DDENUMSURFACES_CANBECREATED 0x00000008 #define DDENUMSURFACES_DOESEXIST 0x00000010 /* SetDisplayMode flags */ #define DDSDM_STANDARDVGAMODE 0x00000001 /* EnumDisplayModes flags */ #define DDEDM_REFRESHRATES 0x00000001 #define DDEDM_STANDARDVGAMODES 0x00000002 /* WaitForVerticalDisplay flags */ #define DDWAITVB_BLOCKBEGIN 0x00000001 #define DDWAITVB_BLOCKBEGINEVENT 0x00000002 #define DDWAITVB_BLOCKEND 0x00000004 typedef struct _DDSURFACEDESC { DWORD dwSize; /* 0: size of the DDSURFACEDESC structure*/ DWORD dwFlags; /* 4: determines what fields are valid*/ DWORD dwHeight; /* 8: height of surface to be created*/ DWORD dwWidth; /* C: width of input surface*/ union { LONG lPitch; /* 10: distance to start of next line (return value only)*/ DWORD dwLinearSize; } DUMMYUNIONNAME1; DWORD dwBackBufferCount;/* 14: number of back buffers requested*/ union { DWORD dwMipMapCount;/* 18:number of mip-map levels requested*/ DWORD dwZBufferBitDepth;/*18: depth of Z buffer requested*/ DWORD dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/ } DUMMYUNIONNAME2; DWORD dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/ DWORD dwReserved; /* 20:reserved*/ void *lpSurface; /* 24:pointer to the associated surface memory*/ DDCOLORKEY ddckCKDestOverlay;/* 28: CK for dest overlay use*/ DDCOLORKEY ddckCKDestBlt; /* 30: CK for destination blt use*/ DDCOLORKEY ddckCKSrcOverlay;/* 38: CK for source overlay use*/ DDCOLORKEY ddckCKSrcBlt; /* 40: CK for source blt use*/ DDPIXELFORMAT ddpfPixelFormat;/* 48: pixel format description of the surface*/ DDSCAPS ddsCaps; /* 68: direct draw surface caps */ } DDSURFACEDESC,*LPDDSURFACEDESC; typedef struct _DDSURFACEDESC2 { DWORD dwSize; /* 0: size of the DDSURFACEDESC2 structure*/ DWORD dwFlags; /* 4: determines what fields are valid*/ DWORD dwHeight; /* 8: height of surface to be created*/ DWORD dwWidth; /* C: width of input surface*/ union { LONG lPitch; /*10: distance to start of next line (return value only)*/ DWORD dwLinearSize; /*10: formless late-allocated optimized surface size */ } DUMMYUNIONNAME1; union { DWORD dwBackBufferCount;/* 14: number of back buffers requested*/ DWORD dwDepth; } DUMMYUNIONNAME5; union { DWORD dwMipMapCount;/* 18:number of mip-map levels requested*/ DWORD dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/ DWORD dwSrcVBHandle;/* 18:source used in VB::Optimize */ } DUMMYUNIONNAME2; DWORD dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/ DWORD dwReserved; /* 20:reserved*/ void *lpSurface; /* 24:pointer to the associated surface memory*/ union { DDCOLORKEY ddckCKDestOverlay; /* 28: CK for dest overlay use*/ DWORD dwEmptyFaceColor; /* 28: color for empty cubemap faces */ } DUMMYUNIONNAME3; DDCOLORKEY ddckCKDestBlt; /* 30: CK for destination blt use*/ DDCOLORKEY ddckCKSrcOverlay;/* 38: CK for source overlay use*/ DDCOLORKEY ddckCKSrcBlt; /* 40: CK for source blt use*/ union { DDPIXELFORMAT ddpfPixelFormat;/* 48: pixel format description of the surface*/ DWORD dwFVF; /* 48: vertex format description of vertex buffers */ } DUMMYUNIONNAME4; DDSCAPS2 ddsCaps; /* 68: DDraw surface caps */ DWORD dwTextureStage; /* 78: stage in multitexture cascade */ } DDSURFACEDESC2,*LPDDSURFACEDESC2; /* DDCOLORCONTROL.dwFlags */ #define DDCOLOR_BRIGHTNESS 0x00000001 #define DDCOLOR_CONTRAST 0x00000002 #define DDCOLOR_HUE 0x00000004 #define DDCOLOR_SATURATION 0x00000008 #define DDCOLOR_SHARPNESS 0x00000010 #define DDCOLOR_GAMMA 0x00000020 #define DDCOLOR_COLORENABLE 0x00000040 typedef struct { DWORD dwSize; DWORD dwFlags; LONG lBrightness; LONG lContrast; LONG lHue; LONG lSaturation; LONG lSharpness; LONG lGamma; LONG lColorEnable; DWORD dwReserved1; } DDCOLORCONTROL,*LPDDCOLORCONTROL; typedef struct { WORD red[256]; WORD green[256]; WORD blue[256]; } DDGAMMARAMP,*LPDDGAMMARAMP; typedef BOOL (CALLBACK *LPDDENUMCALLBACKA)(GUID *guid, char *driver_description, char *driver_name, void *ctx); typedef BOOL (CALLBACK *LPDDENUMCALLBACKW)(GUID *guid, WCHAR *driver_description, WCHAR *driver_name, void *ctx); DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACK) typedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK)(DDSURFACEDESC *desc, void *ctx); typedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK2)(DDSURFACEDESC2 *desc, void *ctx); typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK)(struct IDirectDrawSurface *surface, DDSURFACEDESC *surface_desc, void *ctx); typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK2)(struct IDirectDrawSurface4 *surface, DDSURFACEDESC2 *surface_desc, void *ctx); typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK7)(struct IDirectDrawSurface7 *surface, DDSURFACEDESC2 *surface_desc, void *ctx); typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXA)(GUID *guid, char *driver_description, char *driver_name, void *ctx, HMONITOR monitor); typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXW)(GUID *guid, WCHAR *driver_description, WCHAR *driver_name, void *ctx, HMONITOR monitor); DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACKEX) HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA cb, void *ctx); HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW cb, void *ctx); #define DirectDrawEnumerate WINELIB_NAME_AW(DirectDrawEnumerate) HRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA cb, void *ctx, DWORD flags); HRESULT WINAPI DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW cb, void *ctx, DWORD flags); #define DirectDrawEnumerateEx WINELIB_NAME_AW(DirectDrawEnumerateEx) typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)(LPDDENUMCALLBACKEXA cb, void *ctx, DWORD flags); typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)(LPDDENUMCALLBACKEXW cb, void *ctx, DWORD flags); DECL_WINELIB_TYPE_AW(LPDIRECTDRAWENUMERATEEX) /* flags for DirectDrawEnumerateEx */ #define DDENUM_ATTACHEDSECONDARYDEVICES 0x00000001 #define DDENUM_DETACHEDSECONDARYDEVICES 0x00000002 #define DDENUM_NONDISPLAYDEVICES 0x00000004 /* flags for DirectDrawCreate or IDirectDraw::Initialize */ #define DDCREATE_HARDWAREONLY __MSABI_LONG(1) #define DDCREATE_EMULATIONONLY __MSABI_LONG(2) typedef struct _DDBLTFX { DWORD dwSize; /* size of structure */ DWORD dwDDFX; /* FX operations */ DWORD dwROP; /* Win32 raster operations */ DWORD dwDDROP; /* Raster operations new for DirectDraw */ DWORD dwRotationAngle; /* Rotation angle for blt */ DWORD dwZBufferOpCode; /* ZBuffer compares */ DWORD dwZBufferLow; /* Low limit of Z buffer */ DWORD dwZBufferHigh; /* High limit of Z buffer */ DWORD dwZBufferBaseDest; /* Destination base value */ DWORD dwZDestConstBitDepth; /* Bit depth used to specify Z constant for destination */ union { DWORD dwZDestConst; /* Constant to use as Z buffer for dest */ struct IDirectDrawSurface *lpDDSZBufferDest; /* Surface to use as Z buffer for dest */ } DUMMYUNIONNAME1; DWORD dwZSrcConstBitDepth; /* Bit depth used to specify Z constant for source */ union { DWORD dwZSrcConst; /* Constant to use as Z buffer for src */ struct IDirectDrawSurface *lpDDSZBufferSrc; /* Surface to use as Z buffer for src */ } DUMMYUNIONNAME2; DWORD dwAlphaEdgeBlendBitDepth; /* Bit depth used to specify constant for alpha edge blend */ DWORD dwAlphaEdgeBlend; /* Alpha for edge blending */ DWORD dwReserved; DWORD dwAlphaDestConstBitDepth; /* Bit depth used to specify alpha constant for destination */ union { DWORD dwAlphaDestConst; /* Constant to use as Alpha Channel */ struct IDirectDrawSurface *lpDDSAlphaDest; /* Surface to use as Alpha Channel */ } DUMMYUNIONNAME3; DWORD dwAlphaSrcConstBitDepth; /* Bit depth used to specify alpha constant for source */ union { DWORD dwAlphaSrcConst; /* Constant to use as Alpha Channel */ struct IDirectDrawSurface *lpDDSAlphaSrc; /* Surface to use as Alpha Channel */ } DUMMYUNIONNAME4; union { DWORD dwFillColor; /* color in RGB or Palettized */ DWORD dwFillDepth; /* depth value for z-buffer */ DWORD dwFillPixel; /* pixel val for RGBA or RGBZ */ struct IDirectDrawSurface *lpDDSPattern; /* Surface to use as pattern */ } DUMMYUNIONNAME5; DDCOLORKEY ddckDestColorkey; /* DestColorkey override */ DDCOLORKEY ddckSrcColorkey; /* SrcColorkey override */ } DDBLTFX,*LPDDBLTFX; /* dwDDFX */ /* arithmetic stretching along y axis */ #define DDBLTFX_ARITHSTRETCHY 0x00000001 /* mirror on y axis */ #define DDBLTFX_MIRRORLEFTRIGHT 0x00000002 /* mirror on x axis */ #define DDBLTFX_MIRRORUPDOWN 0x00000004 /* do not tear */ #define DDBLTFX_NOTEARING 0x00000008 /* 180 degrees clockwise rotation */ #define DDBLTFX_ROTATE180 0x00000010 /* 270 degrees clockwise rotation */ #define DDBLTFX_ROTATE270 0x00000020 /* 90 degrees clockwise rotation */ #define DDBLTFX_ROTATE90 0x00000040 /* dwZBufferLow and dwZBufferHigh specify limits to the copied Z values */ #define DDBLTFX_ZBUFFERRANGE 0x00000080 /* add dwZBufferBaseDest to every source z value before compare */ #define DDBLTFX_ZBUFFERBASEDEST 0x00000100 typedef struct _DDOVERLAYFX { DWORD dwSize; /* size of structure */ DWORD dwAlphaEdgeBlendBitDepth; /* Bit depth used to specify constant for alpha edge blend */ DWORD dwAlphaEdgeBlend; /* Constant to use as alpha for edge blend */ DWORD dwReserved; DWORD dwAlphaDestConstBitDepth; /* Bit depth used to specify alpha constant for destination */ union { DWORD dwAlphaDestConst; /* Constant to use as alpha channel for dest */ struct IDirectDrawSurface *lpDDSAlphaDest; /* Surface to use as alpha channel for dest */ } DUMMYUNIONNAME1; DWORD dwAlphaSrcConstBitDepth; /* Bit depth used to specify alpha constant for source */ union { DWORD dwAlphaSrcConst; /* Constant to use as alpha channel for src */ struct IDirectDrawSurface *lpDDSAlphaSrc; /* Surface to use as alpha channel for src */ } DUMMYUNIONNAME2; DDCOLORKEY dckDestColorkey; /* DestColorkey override */ DDCOLORKEY dckSrcColorkey; /* DestColorkey override */ DWORD dwDDFX; /* Overlay FX */ DWORD dwFlags; /* flags */ } DDOVERLAYFX,*LPDDOVERLAYFX; typedef struct _DDBLTBATCH { RECT *lprDest; struct IDirectDrawSurface *lpDDSSrc; RECT *lprSrc; DWORD dwFlags; DDBLTFX *lpDDBltFx; } DDBLTBATCH,*LPDDBLTBATCH; #define MAX_DDDEVICEID_STRING 512 #define DDGDI_GETHOSTIDENTIFIER 1 typedef struct tagDDDEVICEIDENTIFIER { char szDriver[MAX_DDDEVICEID_STRING]; char szDescription[MAX_DDDEVICEID_STRING]; LARGE_INTEGER liDriverVersion; DWORD dwVendorId; DWORD dwDeviceId; DWORD dwSubSysId; DWORD dwRevision; GUID guidDeviceIdentifier; } DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER; typedef struct tagDDDEVICEIDENTIFIER2 { char szDriver[MAX_DDDEVICEID_STRING]; /* user readable driver name */ char szDescription[MAX_DDDEVICEID_STRING]; /* user readable description */ LARGE_INTEGER liDriverVersion; /* driver version */ DWORD dwVendorId; /* vendor ID, zero if unknown */ DWORD dwDeviceId; /* chipset ID, zero if unknown */ DWORD dwSubSysId; /* board ID, zero if unknown */ DWORD dwRevision; /* chipset version, zero if unknown */ GUID guidDeviceIdentifier; /* unique ID for this driver/chipset combination */ DWORD dwWHQLLevel; /* Windows Hardware Quality Lab certification level */ } DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2; /***************************************************************************** * IDirectDrawPalette interface */ #undef INTERFACE #define INTERFACE IDirectDrawPalette DECLARE_INTERFACE_(IDirectDrawPalette,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawPalette methods ***/ STDMETHOD(GetCaps)(THIS_ LPDWORD lpdwCaps) PURE; STDMETHOD(GetEntries)(THIS_ DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) PURE; STDMETHOD(Initialize)(THIS_ struct IDirectDraw *ddraw, DWORD flags, PALETTEENTRY *color_table) PURE; STDMETHOD(SetEntries)(THIS_ DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawPalette_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawPalette_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawPalette_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawPalette methods ***/ #define IDirectDrawPalette_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->lpVtbl->GetEntries(p,a,b,c,d) #define IDirectDrawPalette_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->lpVtbl->SetEntries(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirectDrawPalette_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawPalette_AddRef(p) (p)->AddRef() #define IDirectDrawPalette_Release(p) (p)->Release() /*** IDirectDrawPalette methods ***/ #define IDirectDrawPalette_GetCaps(p,a) (p)->GetCaps(a) #define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->GetEntries(a,b,c,d) #define IDirectDrawPalette_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->SetEntries(a,b,c,d) #endif /***************************************************************************** * IDirectDrawClipper interface */ #define INTERFACE IDirectDrawClipper DECLARE_INTERFACE_(IDirectDrawClipper,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawClipper methods ***/ STDMETHOD(GetClipList)(THIS_ LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSize) PURE; STDMETHOD(GetHWnd)(THIS_ HWND *lphWnd) PURE; STDMETHOD(Initialize)(THIS_ struct IDirectDraw *ddraw, DWORD flags) PURE; STDMETHOD(IsClipListChanged)(THIS_ BOOL *lpbChanged) PURE; STDMETHOD(SetClipList)(THIS_ LPRGNDATA lpClipList, DWORD dwFlags) PURE; STDMETHOD(SetHWnd)(THIS_ DWORD dwFlags, HWND hWnd) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawClipper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawClipper_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawClipper_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawClipper methods ***/ #define IDirectDrawClipper_GetClipList(p,a,b,c) (p)->lpVtbl->GetClipList(p,a,b,c) #define IDirectDrawClipper_GetHWnd(p,a) (p)->lpVtbl->GetHWnd(p,a) #define IDirectDrawClipper_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawClipper_IsClipListChanged(p,a) (p)->lpVtbl->IsClipListChanged(p,a) #define IDirectDrawClipper_SetClipList(p,a,b) (p)->lpVtbl->SetClipList(p,a,b) #define IDirectDrawClipper_SetHWnd(p,a,b) (p)->lpVtbl->SetHWnd(p,a,b) #else /*** IUnknown methods ***/ #define IDirectDrawClipper_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawClipper_AddRef(p) (p)->AddRef() #define IDirectDrawClipper_Release(p) (p)->Release() /*** IDirectDrawClipper methods ***/ #define IDirectDrawClipper_GetClipList(p,a,b,c) (p)->GetClipList(a,b,c) #define IDirectDrawClipper_GetHWnd(p,a) (p)->GetHWnd(a) #define IDirectDrawClipper_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawClipper_IsClipListChanged(p,a) (p)->IsClipListChanged(a) #define IDirectDrawClipper_SetClipList(p,a,b) (p)->SetClipList(a,b) #define IDirectDrawClipper_SetHWnd(p,a,b) (p)->SetHWnd(a,b) #endif /***************************************************************************** * IDirectDraw interface */ #define INTERFACE IDirectDraw DECLARE_INTERFACE_(IDirectDraw,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDraw methods ***/ STDMETHOD(Compact)(THIS) PURE; STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE; STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table, IDirectDrawPalette **palette, IUnknown *outer) PURE; STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc, struct IDirectDrawSurface **surface, IUnknown *outer) PURE; STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface, struct IDirectDrawSurface **dst_surface) PURE; STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc, void *ctx, LPDDENUMMODESCALLBACK cb) PURE; STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; STDMETHOD(FlipToGDISurface)(THIS) PURE; STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE; STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE; STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE; STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; STDMETHOD(RestoreDisplayMode)(THIS) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) PURE; STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDraw_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDraw_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDraw methods ***/ #define IDirectDraw_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) #define IDirectDraw_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) #define IDirectDraw_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) #define IDirectDraw_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) #define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) #define IDirectDraw_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) #define IDirectDraw_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectDraw_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirectDraw_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) #define IDirectDraw_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) #define IDirectDraw_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) #define IDirectDraw_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) #define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) #define IDirectDraw_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectDraw_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectDraw_SetDisplayMode(p,a,b,c) (p)->lpVtbl->SetDisplayMode(p,a,b,c) #define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) #else /*** IUnknown methods ***/ #define IDirectDraw_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDraw_AddRef(p) (p)->AddRef() #define IDirectDraw_Release(p) (p)->Release() /*** IDirectDraw methods ***/ #define IDirectDraw_Compact(p) (p)->Compact() #define IDirectDraw_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) #define IDirectDraw_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) #define IDirectDraw_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) #define IDirectDraw_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) #define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) #define IDirectDraw_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) #define IDirectDraw_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectDraw_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirectDraw_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) #define IDirectDraw_GetGDISurface(p,a) (p)->GetGDISurface(a) #define IDirectDraw_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) #define IDirectDraw_GetScanLine(p,a) (p)->GetScanLine(a) #define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw_Initialize(p,a) (p)->Initialize(a) #define IDirectDraw_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectDraw_SetDisplayMode(p,a,b,c) (p)->SetDisplayMode(a,b,c) #define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) #endif /* flags for Lock() */ #define DDLOCK_SURFACEMEMORYPTR __MSABI_LONG(0x00000000) #define DDLOCK_WAIT __MSABI_LONG(0x00000001) #define DDLOCK_EVENT __MSABI_LONG(0x00000002) #define DDLOCK_READONLY __MSABI_LONG(0x00000010) #define DDLOCK_WRITEONLY __MSABI_LONG(0x00000020) #define DDLOCK_NOSYSLOCK __MSABI_LONG(0x00000800) #define DDLOCK_NOOVERWRITE __MSABI_LONG(0x00001000) #define DDLOCK_DISCARDCONTENTS __MSABI_LONG(0x00002000) #define DDLOCK_OKTOSWAP __MSABI_LONG(0x00002000) #define DDLOCK_DONOTWAIT __MSABI_LONG(0x00004000) #define DDLOCK_HASVOLUMETEXTUREBOXRECT __MSABI_LONG(0x00008000) #define DDLOCK_NODIRTYUPDATE __MSABI_LONG(0x00010000) /***************************************************************************** * IDirectDraw2 interface */ /* Note: IDirectDraw2 cannot derive from IDirectDraw because the number of * arguments of SetDisplayMode has changed ! */ #define INTERFACE IDirectDraw2 DECLARE_INTERFACE_(IDirectDraw2,IUnknown) { /*** IUnknown methods ***/ /*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; /*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; /*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDraw2 methods ***/ /*0c*/ STDMETHOD(Compact)(THIS) PURE; /*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE; /*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table, IDirectDrawPalette **palette, IUnknown *outer) PURE; /*18*/ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc, struct IDirectDrawSurface **surface, IUnknown *outer) PURE; /*1c*/ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface, struct IDirectDrawSurface **dst_surface) PURE; /*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc, void *ctx, LPDDENUMMODESCALLBACK cb) PURE; /*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; /*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; /*2c*/ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE; /*30*/ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE; /*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; /*38*/ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE; /*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; /*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; /*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; /*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; /*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; /*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; /*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE; /*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; /* added in v2 */ /*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS *caps, DWORD *total, DWORD *free) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDraw2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDraw2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw2_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDraw methods ***/ #define IDirectDraw2_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw2_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) #define IDirectDraw2_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) #define IDirectDraw2_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) #define IDirectDraw2_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) #define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) #define IDirectDraw2_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) #define IDirectDraw2_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectDraw2_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirectDraw2_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) #define IDirectDraw2_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) #define IDirectDraw2_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) #define IDirectDraw2_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) #define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) #define IDirectDraw2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectDraw2_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) #define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) /*** IDirectDraw2 methods ***/ #define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectDraw2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDraw2_AddRef(p) (p)->AddRef() #define IDirectDraw2_Release(p) (p)->Release() /*** IDirectDraw methods ***/ #define IDirectDraw2_Compact(p) (p)->Compact() #define IDirectDraw2_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) #define IDirectDraw2_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) #define IDirectDraw2_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) #define IDirectDraw2_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) #define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) #define IDirectDraw2_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) #define IDirectDraw2_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw2_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectDraw2_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirectDraw2_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) #define IDirectDraw2_GetGDISurface(p,a) (p)->GetGDISurface(a) #define IDirectDraw2_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) #define IDirectDraw2_GetScanLine(p,a) (p)->GetScanLine(a) #define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw2_Initialize(p,a) (p)->Initialize(a) #define IDirectDraw2_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) #define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) /*** IDirectDraw2 methods ***/ #define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) #endif /***************************************************************************** * IDirectDraw3 interface */ #define INTERFACE IDirectDraw3 DECLARE_INTERFACE_(IDirectDraw3,IUnknown) { /*** IUnknown methods ***/ /*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; /*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; /*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDraw2 methods ***/ /*0c*/ STDMETHOD(Compact)(THIS) PURE; /*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE; /*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table, IDirectDrawPalette **lplpDDPalette, IUnknown *outer) PURE; /*18*/ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc, struct IDirectDrawSurface **surface, IUnknown *outer) PURE; /*1c*/ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface, struct IDirectDrawSurface **dst_surface) PURE; /*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc, void *ctx, LPDDENUMMODESCALLBACK cb) PURE; /*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; /*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; /*2c*/ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE; /*30*/ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE; /*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; /*38*/ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE; /*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; /*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; /*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; /*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; /*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; /*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; /*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE; /*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; /* added in v2 */ /*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS *caps, DWORD *total, DWORD *free) PURE; /* added in v3 */ /*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface **surface) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDraw3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDraw3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw3_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDraw methods ***/ #define IDirectDraw3_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw3_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) #define IDirectDraw3_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) #define IDirectDraw3_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) #define IDirectDraw3_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) #define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) #define IDirectDraw3_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) #define IDirectDraw3_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectDraw3_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirectDraw3_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) #define IDirectDraw3_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) #define IDirectDraw3_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) #define IDirectDraw3_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) #define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) #define IDirectDraw3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectDraw3_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw3_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) #define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) /*** IDirectDraw2 methods ***/ #define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) /*** IDirectDraw3 methods ***/ #define IDirectDraw3_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b) #else /*** IUnknown methods ***/ #define IDirectDraw3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDraw3_AddRef(p) (p)->AddRef() #define IDirectDraw3_Release(p) (p)->Release() /*** IDirectDraw methods ***/ #define IDirectDraw3_Compact(p) (p)->Compact() #define IDirectDraw3_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) #define IDirectDraw3_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) #define IDirectDraw3_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) #define IDirectDraw3_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) #define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) #define IDirectDraw3_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) #define IDirectDraw3_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw3_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectDraw3_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirectDraw3_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) #define IDirectDraw3_GetGDISurface(p,a) (p)->GetGDISurface(a) #define IDirectDraw3_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) #define IDirectDraw3_GetScanLine(p,a) (p)->GetScanLine(a) #define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw3_Initialize(p,a) (p)->Initialize(a) #define IDirectDraw3_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw3_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) #define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) /*** IDirectDraw2 methods ***/ #define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) /*** IDirectDraw3 methods ***/ #define IDirectDraw3_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b) #endif /***************************************************************************** * IDirectDraw4 interface */ #define INTERFACE IDirectDraw4 DECLARE_INTERFACE_(IDirectDraw4,IUnknown) { /*** IUnknown methods ***/ /*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; /*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; /*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDraw4 methods ***/ /*0c*/ STDMETHOD(Compact)(THIS) PURE; /*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE; /*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table, IDirectDrawPalette **palette, IUnknown *outer) PURE; /*18*/ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC2 *surface_desc, struct IDirectDrawSurface4 **surface, IUnknown *outer) PURE; /*1c*/ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface4 *src_surface, struct IDirectDrawSurface4 **dst_surface) PURE; /*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc, void *ctx, LPDDENUMMODESCALLBACK2 cb) PURE; /*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc, void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE; /*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; /*2c*/ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE; /*30*/ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC2 *surface_desc) PURE; /*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; /*38*/ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface4 **surface) PURE; /*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; /*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; /*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; /*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; /*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; /*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; /*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE; /*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; /* added in v2 */ /*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS2 *caps, DWORD *total, DWORD *free) PURE; /* added in v4 */ /*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface4 **surface) PURE; /*64*/ STDMETHOD(RestoreAllSurfaces)(THIS) PURE; /*68*/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; /*6c*/ STDMETHOD(GetDeviceIdentifier)(THIS_ DDDEVICEIDENTIFIER *identifier, DWORD flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDraw4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDraw4_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw4_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDraw methods ***/ #define IDirectDraw4_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw4_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) #define IDirectDraw4_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) #define IDirectDraw4_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) #define IDirectDraw4_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) #define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) #define IDirectDraw4_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) #define IDirectDraw4_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw4_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectDraw4_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirectDraw4_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) #define IDirectDraw4_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) #define IDirectDraw4_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) #define IDirectDraw4_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) #define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) #define IDirectDraw4_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectDraw4_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw4_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) #define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) /*** IDirectDraw2 methods ***/ #define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) /*** IDirectDraw4 methods ***/ #define IDirectDraw4_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b) #define IDirectDraw4_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) #define IDirectDraw4_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) #else /*** IUnknown methods ***/ #define IDirectDraw4_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDraw4_AddRef(p) (p)->AddRef() #define IDirectDraw4_Release(p) (p)->Release() /*** IDirectDraw methods ***/ #define IDirectDraw4_Compact(p) (p)->Compact() #define IDirectDraw4_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) #define IDirectDraw4_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) #define IDirectDraw4_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) #define IDirectDraw4_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) #define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) #define IDirectDraw4_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) #define IDirectDraw4_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw4_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectDraw4_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirectDraw4_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) #define IDirectDraw4_GetGDISurface(p,a) (p)->GetGDISurface(a) #define IDirectDraw4_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) #define IDirectDraw4_GetScanLine(p,a) (p)->GetScanLine(a) #define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw4_Initialize(p,a) (p)->Initialize(a) #define IDirectDraw4_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw4_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) #define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) /*** IDirectDraw2 methods ***/ #define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) /*** IDirectDraw4 methods ***/ #define IDirectDraw4_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b) #define IDirectDraw4_RestoreAllSurfaces(pc) (p)->RestoreAllSurfaces() #define IDirectDraw4_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) #endif /***************************************************************************** * IDirectDraw7 interface */ /* Note: IDirectDraw7 cannot derive from IDirectDraw4; it is even documented * as not interchangeable with earlier DirectDraw interfaces. */ #define INTERFACE IDirectDraw7 DECLARE_INTERFACE_(IDirectDraw7,IUnknown) { /*** IUnknown methods ***/ /*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; /*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; /*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDraw7 methods ***/ /*0c*/ STDMETHOD(Compact)(THIS) PURE; /*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE; /*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table, IDirectDrawPalette **palette, IUnknown *outer) PURE; /*18*/ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC2 *surface_desc, struct IDirectDrawSurface7 **surface, IUnknown *outer) PURE; /*1c*/ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface7 *src_surface, struct IDirectDrawSurface7 **dst_surface) PURE; /*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc, void *ctx, LPDDENUMMODESCALLBACK2 cb) PURE; /*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc, void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE; /*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; /*2c*/ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE; /*30*/ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC2 *surface_desc) PURE; /*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; /*38*/ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface7 **surface) PURE; /*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; /*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; /*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; /*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; /*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; /*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; /*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE; /*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; /* added in v2 */ /*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS2 *caps, DWORD *total, DWORD *free) PURE; /* added in v4 */ /*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface7 **surface) PURE; /*64*/ STDMETHOD(RestoreAllSurfaces)(THIS) PURE; /*68*/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; /*6c*/ STDMETHOD(GetDeviceIdentifier)(THIS_ DDDEVICEIDENTIFIER2 *identifier, DWORD flags) PURE; /* added in v7 */ /*70*/ STDMETHOD(StartModeTest)(THIS_ LPSIZE pModes, DWORD dwNumModes, DWORD dwFlags) PURE; /*74*/ STDMETHOD(EvaluateMode)(THIS_ DWORD dwFlags, DWORD *pTimeout) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDraw7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDraw7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw7_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDraw methods ***/ #define IDirectDraw7_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw7_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) #define IDirectDraw7_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) #define IDirectDraw7_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) #define IDirectDraw7_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) #define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) #define IDirectDraw7_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) #define IDirectDraw7_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw7_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectDraw7_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirectDraw7_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) #define IDirectDraw7_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) #define IDirectDraw7_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) #define IDirectDraw7_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) #define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) #define IDirectDraw7_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectDraw7_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) #define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) /*** added in IDirectDraw2 ***/ #define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) /*** added in IDirectDraw4 ***/ #define IDirectDraw7_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b) #define IDirectDraw7_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) #define IDirectDraw7_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) /*** added in IDirectDraw 7 ***/ #define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(p,a,b,c) #define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(p,a,b) #else /*** IUnknown methods ***/ #define IDirectDraw7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDraw7_AddRef(p) (p)->AddRef() #define IDirectDraw7_Release(p) (p)->Release() /*** IDirectDraw methods ***/ #define IDirectDraw7_Compact(p) (p)->Compact() #define IDirectDraw7_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) #define IDirectDraw7_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) #define IDirectDraw7_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) #define IDirectDraw7_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) #define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) #define IDirectDraw7_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) #define IDirectDraw7_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw7_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectDraw7_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirectDraw7_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) #define IDirectDraw7_GetGDISurface(p,a) (p)->GetGDISurface(a) #define IDirectDraw7_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) #define IDirectDraw7_GetScanLine(p,a) (p)->GetScanLine(a) #define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw7_Initialize(p,a) (p)->Initialize(a) #define IDirectDraw7_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) #define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) /*** added in IDirectDraw2 ***/ #define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) /*** added in IDirectDraw4 ***/ #define IDirectDraw7_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b) #define IDirectDraw7_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces() #define IDirectDraw7_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) /*** added in IDirectDraw 7 ***/ #define IDirectDraw7_StartModeTest(p,a,b,c) (p)->StartModeTest(a,b,c) #define IDirectDraw7_EvaluateMode(p,a,b) (p)->EvaluateMode(a,b) #endif /***************************************************************************** * IDirectDrawSurface interface */ #define INTERFACE IDirectDrawSurface DECLARE_INTERFACE_(IDirectDrawSurface,IUnknown) { /*** IUnknown methods ***/ /*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; /*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; /*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawSurface methods ***/ /*0c*/ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface *attachment) PURE; /*10*/ STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; /*14*/ STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx) PURE; /*18*/ STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE; /*1c*/ STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface *src_surface, RECT *src_rect, DWORD flags) PURE; /*20*/ STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface *attachment) PURE; /*24*/ STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; /*28*/ STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; /*2c*/ STDMETHOD(Flip)(THIS_ IDirectDrawSurface *dst_surface, DWORD flags) PURE; /*30*/ STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface **attachment) PURE; /*34*/ STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; /*38*/ STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE; /*3c*/ STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE; /*40*/ STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; /*44*/ STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; /*48*/ STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; /*4c*/ STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; /*50*/ STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE; /*54*/ STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE; /*58*/ STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE; /*5c*/ STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE; /*60*/ STDMETHOD(IsLost)(THIS) PURE; /*64*/ STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE; /*68*/ STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; /*6c*/ STDMETHOD(Restore)(THIS) PURE; /*70*/ STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE; /*74*/ STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; /*78*/ STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; /*7c*/ STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE; /*80*/ STDMETHOD(Unlock)(THIS_ void *data) PURE; /*84*/ STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx) PURE; /*88*/ STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; /*8c*/ STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface *reference_surface) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawSurface methods ***/ #define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectDrawSurface_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) #else /*** IUnknown methods ***/ #define IDirectDrawSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface_AddRef(p) (p)->AddRef() #define IDirectDrawSurface_Release(p) (p)->Release() /*** IDirectDrawSurface methods ***/ #define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface_GetCaps(p,a) (p)->GetCaps(a) #define IDirectDrawSurface_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface_IsLost(p) (p)->IsLost() #define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface_Restore(p) (p)->Restore() #define IDirectDrawSurface_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface_Unlock(p,a) (p)->Unlock(a) #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) #endif /***************************************************************************** * IDirectDrawSurface2 interface */ /* Cannot inherit from IDirectDrawSurface because the LPDIRECTDRAWSURFACE parameters * have been converted to LPDIRECTDRAWSURFACE2. */ #define INTERFACE IDirectDrawSurface2 DECLARE_INTERFACE_(IDirectDrawSurface2,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawSurface2 methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface2 *attachment) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface2 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx) PURE; STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE; STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface2 *src_surface, RECT *src_rect, DWORD flags) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface2 *attachment) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; STDMETHOD(Flip)(THIS_ IDirectDrawSurface2 *dst_surface, DWORD flags) PURE; STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface2 **attachment) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE; STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE; STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE; STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE; STDMETHOD(Unlock)(THIS_ void *data) PURE; STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface2 *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface2 *reference_surface) PURE; /* added in v2 */ STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE; STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface2_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawSurface methods (almost) ***/ #define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface2_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface2_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface2_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectDrawSurface2_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface2_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface2_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface2_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface2_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface2_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface2_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface2_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface2_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) /*** IDirectDrawSurface2 methods ***/ #define IDirectDrawSurface2_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) #define IDirectDrawSurface2_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) #define IDirectDrawSurface2_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) #else /*** IUnknown methods ***/ #define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface2_AddRef(p) (p)->AddRef() #define IDirectDrawSurface2_Release(p) (p)->Release() /*** IDirectDrawSurface methods (almost) ***/ #define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface2_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface2_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface2_GetCaps(p,a) (p)->GetCaps(a) #define IDirectDrawSurface2_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface2_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface2_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface2_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface2_IsLost(p) (p)->IsLost() #define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface2_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface2_Restore(p) (p)->Restore() #define IDirectDrawSurface2_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface2_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface2_Unlock(p,a) (p)->Unlock(a) #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) /*** IDirectDrawSurface2 methods ***/ #define IDirectDrawSurface2_GetDDInterface(p,a) (p)->GetDDInterface(a) #define IDirectDrawSurface2_PageLock(p,a) (p)->PageLock(a) #define IDirectDrawSurface2_PageUnlock(p,a) (p)->PageUnlock(a) #endif /***************************************************************************** * IDirectDrawSurface3 interface */ /* Cannot inherit from IDirectDrawSurface2 because the LPDIRECTDRAWSURFACE2 parameters * have been converted to LPDIRECTDRAWSURFACE3. */ #define INTERFACE IDirectDrawSurface3 DECLARE_INTERFACE_(IDirectDrawSurface3,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawSurface3 methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface3 *attachment) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; STDMETHOD(Blt)(THIS_ RECT *dst_rest, IDirectDrawSurface3 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx) PURE; STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE; STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface3 *src_surface, RECT *src_rect, DWORD flags) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface3 *attachment) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE; STDMETHOD(Flip)(THIS_ IDirectDrawSurface3 *dst_surface, DWORD flags) PURE; STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface3 **attachment) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE; STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE; STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE; STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE; STDMETHOD(Unlock)(THIS_ void *data) PURE; STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface3 *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface3 *reference_surface) PURE; /* added in v2 */ STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE; STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE; /* added in v3 */ STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc, DWORD flags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface3_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawSurface methods (almost) ***/ #define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface3_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface3_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface3_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectDrawSurface3_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface3_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface3_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface3_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface3_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface3_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface3_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface3_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface3_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface3_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) #define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) /*** IDirectDrawSurface2 methods ***/ #define IDirectDrawSurface3_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) #define IDirectDrawSurface3_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) #define IDirectDrawSurface3_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) /*** IDirectDrawSurface3 methods ***/ #define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) #else /*** IUnknown methods ***/ #define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface3_AddRef(p) (p)->AddRef() #define IDirectDrawSurface3_Release(p) (p)->Release() /*** IDirectDrawSurface methods (almost) ***/ #define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface3_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface3_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface3_GetCaps(p,a) (p)->GetCaps(a) #define IDirectDrawSurface3_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface3_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface3_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface3_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface3_IsLost(p) (p)->IsLost() #define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface3_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface3_Restore(p) (p)->Restore() #define IDirectDrawSurface3_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface3_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface3_Unlock(p,a) (p)->Unlock(a) #define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) /*** IDirectDrawSurface2 methods ***/ #define IDirectDrawSurface3_GetDDInterface(p,a) (p)->GetDDInterface(a) #define IDirectDrawSurface3_PageLock(p,a) (p)->PageLock(a) #define IDirectDrawSurface3_PageUnlock(p,a) (p)->PageUnlock(a) /*** IDirectDrawSurface3 methods ***/ #define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) #endif /***************************************************************************** * IDirectDrawSurface4 interface */ /* Cannot inherit from IDirectDrawSurface2 because DDSCAPS changed to DDSCAPS2. */ #define INTERFACE IDirectDrawSurface4 DECLARE_INTERFACE_(IDirectDrawSurface4,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawSurface4 methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface4 *attachment) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface4 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx) PURE; STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE; STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface4 *src_surface, RECT *src_rect, DWORD flags) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface4 *attachment) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE; STDMETHOD(Flip)(THIS_ IDirectDrawSurface4 *dst_surface, DWORD flags) PURE; STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS2 *caps, IDirectDrawSurface4 **attachment) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ DDSCAPS2 *caps) PURE; STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE; STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc) PURE; STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC2 *surface_desc) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE event) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE; STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE; STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface4 *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface4 *reference_surface) PURE; /* added in v2 */ STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE; STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE; /* added in v3 */ STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc, DWORD flags) PURE; /* added in v4 */ STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, void *data, DWORD size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, void *data, DWORD *size) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE; STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE; STDMETHOD(ChangeUniquenessValue)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface4_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface4_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawSurface (almost) methods ***/ #define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface4_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface4_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface4_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectDrawSurface4_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface4_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface4_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface4_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface4_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface4_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface4_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface4_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface4_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface4_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) #define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) /*** IDirectDrawSurface2 methods ***/ #define IDirectDrawSurface4_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) #define IDirectDrawSurface4_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) #define IDirectDrawSurface4_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) /*** IDirectDrawSurface3 methods ***/ #define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) /*** IDirectDrawSurface4 methods ***/ #define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirectDrawSurface4_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirectDrawSurface4_GetUniquenessValue(p,a) (p)->lpVtbl->GetUniquenessValue(p,a) #define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) #else /*** IUnknown methods ***/ #define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface4_AddRef(p) (p)->AddRef() #define IDirectDrawSurface4_Release(p) (p)->Release() /*** IDirectDrawSurface (almost) methods ***/ #define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface4_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface4_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface4_GetCaps(p,a) (p)->GetCaps(a) #define IDirectDrawSurface4_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface4_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface4_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface4_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface4_IsLost(p) (p)->IsLost() #define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface4_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface4_Restore(p) (p)->Restore() #define IDirectDrawSurface4_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface4_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface4_Unlock(p,a) (p)->Unlock(a) #define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) /*** IDirectDrawSurface2 methods ***/ #define IDirectDrawSurface4_GetDDInterface(p,a) (p)->GetDDInterface(a) #define IDirectDrawSurface4_PageLock(p,a) (p)->PageLock(a) #define IDirectDrawSurface4_PageUnlock(p,a) (p)->PageUnlock(a) /*** IDirectDrawSurface3 methods ***/ #define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) /*** IDirectDrawSurface4 methods ***/ #define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirectDrawSurface4_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirectDrawSurface4_GetUniquenessValue(p,a) (p)->GetUniquenessValue(a) #define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() #endif /***************************************************************************** * IDirectDrawSurface7 interface */ #define INTERFACE IDirectDrawSurface7 DECLARE_INTERFACE_(IDirectDrawSurface7,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawSurface7 methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface7 *attachment) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface7 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx) PURE; STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE; STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface7 *src_surface, RECT *src_rect, DWORD flags) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface7 *attachment) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE; STDMETHOD(Flip)(THIS_ IDirectDrawSurface7 *dst_surface, DWORD flags) PURE; STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS2 *caps, IDirectDrawSurface7 **attachment) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ DDSCAPS2 *caps) PURE; STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE; STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc) PURE; STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC2 *surface_desc) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE event) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE; STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE; STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface7 *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface7 *reference_surface) PURE; /* added in v2 */ STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE; STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE; /* added in v3 */ STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc, DWORD flags) PURE; /* added in v4 */ STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, void *data, DWORD size, DWORD flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, void *data, DWORD *size) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE; STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE; STDMETHOD(ChangeUniquenessValue)(THIS) PURE; /* added in v7 */ STDMETHOD(SetPriority)(THIS_ DWORD prio) PURE; STDMETHOD(GetPriority)(THIS_ LPDWORD prio) PURE; STDMETHOD(SetLOD)(THIS_ DWORD lod) PURE; STDMETHOD(GetLOD)(THIS_ LPDWORD lod) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface7_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawSurface (almost) methods ***/ #define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface7_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface7_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface7_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectDrawSurface7_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface7_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface7_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface7_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface7_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface7_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface7_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface7_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface7_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) #define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) /*** IDirectDrawSurface2 methods ***/ #define IDirectDrawSurface7_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) #define IDirectDrawSurface7_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) #define IDirectDrawSurface7_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) /*** IDirectDrawSurface3 methods ***/ #define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) /*** IDirectDrawSurface4 methods ***/ #define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirectDrawSurface7_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirectDrawSurface7_GetUniquenessValue(p,a) (p)->lpVtbl->GetUniquenessValue(p,a) #define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) /*** IDirectDrawSurface7 methods ***/ #define IDirectDrawSurface7_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirectDrawSurface7_GetPriority(p,a) (p)->lpVtbl->GetPriority(p,a) #define IDirectDrawSurface7_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirectDrawSurface7_GetLOD(p,a) (p)->lpVtbl->GetLOD(p,a) #else /*** IUnknown methods ***/ #define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface7_AddRef(p) (p)->AddRef() #define IDirectDrawSurface7_Release(p) (p)->Release() /*** IDirectDrawSurface (almost) methods ***/ #define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface7_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface7_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface7_GetCaps(p,a) (p)->GetCaps(a) #define IDirectDrawSurface7_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface7_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface7_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface7_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface7_IsLost(p) (p)->IsLost() #define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface7_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface7_Restore(p) (p)->Restore() #define IDirectDrawSurface7_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface7_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface7_Unlock(p,a) (p)->Unlock(a) #define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) /*** IDirectDrawSurface2 methods ***/ #define IDirectDrawSurface7_GetDDInterface(p,a) (p)->GetDDInterface(a) #define IDirectDrawSurface7_PageLock(p,a) (p)->PageLock(a) #define IDirectDrawSurface7_PageUnlock(p,a) (p)->PageUnlock(a) /*** IDirectDrawSurface3 methods ***/ #define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) /*** IDirectDrawSurface4 methods ***/ #define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirectDrawSurface7_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirectDrawSurface7_GetUniquenessValue(p,a) (p)->GetUniquenessValue(a) #define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() /*** IDirectDrawSurface7 methods ***/ #define IDirectDrawSurface7_SetPriority(p,a) (p)->SetPriority(a) #define IDirectDrawSurface7_GetPriority(p,a) (p)->GetPriority(a) #define IDirectDrawSurface7_SetLOD(p,a) (p)->SetLOD(a) #define IDirectDrawSurface7_GetLOD(p,a) (p)->GetLOD(a) #endif /***************************************************************************** * IDirectDrawColorControl interface */ #define INTERFACE IDirectDrawColorControl DECLARE_INTERFACE_(IDirectDrawColorControl,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawColorControl methods ***/ STDMETHOD(GetColorControls)(THIS_ DDCOLORCONTROL *color_control) PURE; STDMETHOD(SetColorControls)(THIS_ DDCOLORCONTROL *color_control) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawColorControl_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawColorControl_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawColorControl methods ***/ #define IDirectDrawColorControl_GetColorControls(p,a) (p)->lpVtbl->GetColorControls(p,a) #define IDirectDrawColorControl_SetColorControls(p,a) (p)->lpVtbl->SetColorControls(p,a) #else /*** IUnknown methods ***/ #define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawColorControl_AddRef(p) (p)->AddRef() #define IDirectDrawColorControl_Release(p) (p)->Release() /*** IDirectDrawColorControl methods ***/ #define IDirectDrawColorControl_GetColorControls(p,a) (p)->GetColorControls(a) #define IDirectDrawColorControl_SetColorControls(p,a) (p)->SetColorControls(a) #endif /***************************************************************************** * IDirectDrawGammaControl interface */ #define INTERFACE IDirectDrawGammaControl DECLARE_INTERFACE_(IDirectDrawGammaControl,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectDrawGammaControl methods ***/ STDMETHOD(GetGammaRamp)(THIS_ DWORD flags, DDGAMMARAMP *gamma_ramp) PURE; STDMETHOD(SetGammaRamp)(THIS_ DWORD flags, DDGAMMARAMP *gamma_ramp) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawGammaControl_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawGammaControl_Release(p) (p)->lpVtbl->Release(p) /*** IDirectDrawGammaControl methods ***/ #define IDirectDrawGammaControl_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) #define IDirectDrawGammaControl_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b) #else /*** IUnknown methods ***/ #define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawGammaControl_AddRef(p) (p)->AddRef() #define IDirectDrawGammaControl_Release(p) (p)->Release() /*** IDirectDrawGammaControl methods ***/ #define IDirectDrawGammaControl_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) #define IDirectDrawGammaControl_SetGammaRamp(p,a,b) (p)->SetGammaRamp(a,b) #endif HRESULT WINAPI DirectDrawCreate(GUID *driver_guid, IDirectDraw **ddraw, IUnknown *outer); HRESULT WINAPI DirectDrawCreateEx(GUID *driver_guid, void **ddraw, REFIID interface_iid, IUnknown *outer); HRESULT WINAPI DirectDrawCreateClipper(DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __DDRAW_INCLUDED__ */ ================================================ FILE: wine/windows/ddrawgdi.h ================================================ /* * Ddrawgdi definitions * * Copyright (C) 2009 Louis Lenders * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DDRAWGDI_H #define __WINE_DDRAWGDI_H #ifdef __cplusplus extern "C" { #endif #define DdQueryDisplaySettingsUniqueness GdiEntry13 ULONG APIENTRY DdQueryDisplaySettingsUniqueness(void); #ifdef __cplusplus } #endif #endif /* __WINE_DDRAWGDI_H */ ================================================ FILE: wine/windows/ddrawi.h ================================================ /* * DirectDraw driver interface * (DirectX 7 version) * * Copyright (C) 2001 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DDRAWI_INCLUDED__ #define __DDRAWI_INCLUDED__ #include #include /* the DD HAL is layered onto DCI escapes */ #ifdef __cplusplus extern "C" { #endif typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */ typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */ typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */ #define DDAPI WINAPI /* the DirectDraw versions */ #define DD_VERSION 0x0200 /* compatibility version */ #define DD_RUNTIME_VERSION 0x0700 /* actual version */ /* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */ #define DD_HAL_VERSION 0x0100 /* more DCICOMMAND escapes */ #define DDCREATEDRIVEROBJECT 10 #define DDGET32BITDRIVERNAME 11 #define DDNEWCALLBACKFNS 12 #define DDVERSIONINFO 13 #define MAX_DRIVER_NAME CCHDEVICENAME /***************************************************************************** * Initialization stuff */ typedef struct { char szName[260]; char szEntryPoint[64]; DWORD dwContext; } DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA; typedef struct { DWORD dwHALVersion; ULONG_PTR dwReserved1; ULONG_PTR dwReserved2; } DDVERSIONDATA,*LPDDVERSIONDATA; typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext); /* pointer to video memory */ typedef ULONG_PTR FLATPTR; /* predeclare some structures */ typedef struct _DDHALINFO *LPDDHALINFO; typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT; typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL; typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL; typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT; typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL; typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL; typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE; typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE; typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT; typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL; typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL; typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT; typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL; typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL; typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT; typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL; typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT; typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL; /* structure GUIDs for GetDriverInfo */ DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A ); /* ...videport stuff here... */ DEFINE_GUID( GUID_D3DCallbacks2, 0x0BA584E1,0x70B6,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A ); DEFINE_GUID( GUID_D3DCallbacks3, 0xDDF41230,0xEC0A,0x11D0,0xA9,0xB6,0x00,0xAA,0x00,0xC0,0x99,0x3E ); DEFINE_GUID( GUID_NonLocalVidMemCaps, 0x86C4FA80,0x8D84,0x11D0,0x94,0xE8,0x00,0xC0,0x4F,0xC3,0x41,0x37 ); /* ...kernel stuff here... */ DEFINE_GUID( GUID_D3DExtendedCaps, 0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 ); DEFINE_GUID( GUID_ZPixelFormats, 0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE ); DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 ); DEFINE_GUID( GUID_DDStereoMode, 0xF828169C,0xA8E8,0x11D2,0xA1,0xF2,0x00,0xA0,0xC9,0x83,0xEA,0xF6 ); /* ...more stuff here... */ DEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 ); /* ...motioncomp stuff here... */ DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A ); /***************************************************************************** * driver->ddraw callbacks */ typedef BOOL (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset); typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight); typedef void (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem); typedef struct { DWORD dwSize; LPDDHAL_SETINFO lpSetInfo; LPDDHAL_VIDMEMALLOC lpVidMemAlloc; LPDDHAL_VIDMEMFREE lpVidMemFree; } DDHALDDRAWFNS,*LPDDHALDDRAWFNS; /***************************************************************************** * mode info structure */ typedef struct _DDHALMODEINFO { DWORD dwWidth; DWORD dwHeight; LONG lPitch; DWORD dwBPP; WORD wFlags; WORD wRefreshRate; DWORD dwRBitMask; DWORD dwGBitMask; DWORD dwBBitMask; DWORD dwAlphaBitMask; } DDHALMODEINFO,*LPDDHALMODEINFO; #define DDMODEINFO_PALETTIZED 0x0001 #define DDMODEINFO_MODEX 0x0002 #define DDMODEINFO_UNSUPPORTED 0x0004 #define DDMODEINFO_STANDARDVGA 0x0008 #define DDMODEINFO_MAXREFRESH 0x0010 #define DDMODEINFO_STEREO 0x0020 /***************************************************************************** * video memory info structure */ typedef struct _VIDMEM { DWORD dwFlags; FLATPTR fpStart; union { FLATPTR fpEnd; DWORD dwWidth; } DUMMYUNIONNAME1; DDSCAPS ddsCaps; DDSCAPS ddsCapsAlt; union { LPVMEMHEAP lpHeap; DWORD dwHeight; } DUMMYUNIONNAME2; } VIDMEM,*LPVIDMEM; #define VIDMEM_ISLINEAR 0x00000001 #define VIDMEM_ISRECTANGULAR 0x00000002 #define VIDMEM_ISHEAP 0x00000004 #define VIDMEM_ISNONLOCAL 0x00000008 #define VIDMEM_ISWC 0x00000010 #define VIDMEM_ISDISABLED 0x00000020 typedef struct _VIDMEMINFO { FLATPTR fpPrimary; DWORD dwFlags; DWORD dwDisplayWidth; DWORD dwDisplayHeight; LONG lDisplayPitch; DDPIXELFORMAT ddpfDisplay; DWORD dwOffscreenAlign; DWORD dwOverlayAlign; DWORD dwTextureAlign; DWORD dwZBufferAlign; DWORD dwAlphaAlign; DWORD dwNumHeaps; LPVIDMEM pvmList; } VIDMEMINFO,*LPVIDMEMINFO; typedef struct _HEAPALIAS { FLATPTR fpVidMem; LPVOID lpAlias; DWORD dwAliasSize; } HEAPALIAS,*LPHEAPALIAS; typedef struct _HEAPALIASINFO { DWORD dwRefCnt; DWORD dwFlags; DWORD dwNumHeaps; LPHEAPALIAS lpAliases; } HEAPALIASINFO,*LPHEAPALIASINFO; #define HEAPALIASINFO_MAPPEDREAL 0x00000001 #define HEAPALIASINFO_MAPPEDDUMMY 0x00000002 /***************************************************************************** * capabilities structures */ typedef struct _DDCORECAPS { DWORD dwSize; DWORD dwCaps; DWORD dwCaps2; DWORD dwCKeyCaps; DWORD dwFXCaps; DWORD dwFXAlphaCaps; DWORD dwPalCaps; DWORD dwSVCaps; DWORD dwAlphaBltConstBitDepths; DWORD dwAlphaBltPixelBitDepths; DWORD dwAlphaBltSurfaceBitDepths; DWORD dwAlphaOverlayConstBitDepths; DWORD dwAlphaOverlayPixelBitDepths; DWORD dwAlphaOverlaySurfaceBitDepths; DWORD dwZBufferBitDepths; DWORD dwVidMemTotal; DWORD dwVidMemFree; DWORD dwMaxVisibleOverlays; DWORD dwCurrVisibleOverlays; DWORD dwNumFourCCCodes; DWORD dwAlignBoundarySrc; DWORD dwAlignSizeSrc; DWORD dwAlignBoundaryDest; DWORD dwAlignSizeDest; DWORD dwAlignStrideAlign; DWORD dwRops[DD_ROP_SPACE]; DDSCAPS ddsCaps; DWORD dwMinOverlayStretch; DWORD dwMaxOverlayStretch; DWORD dwMinLiveVideoStretch; DWORD dwMaxLiveVideoStretch; DWORD dwMinHwCodecStretch; DWORD dwMaxHwCodecStretch; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwSVBCaps; DWORD dwSVBCKeyCaps; DWORD dwSVBFXCaps; DWORD dwSVBRops[DD_ROP_SPACE]; DWORD dwVSBCaps; DWORD dwVSBCKeyCaps; DWORD dwVSBFXCaps; DWORD dwVSBRops[DD_ROP_SPACE]; DWORD dwSSBCaps; DWORD dwSSBCKeyCaps; DWORD dwSSBFXCaps; DWORD dwSSBRops[DD_ROP_SPACE]; DWORD dwMaxVideoPorts; DWORD dwCurrVideoPorts; DWORD dwSVBCaps2; } DDCORECAPS,*LPDDCORECAPS; typedef struct _DDNONLOCALVIDMEMCAPS { DWORD dwSize; DWORD dwNLVBCaps; DWORD dwNLVBCaps2; DWORD dwNLVBCKeyCaps; DWORD dwNLVBFXCaps; DWORD dwNLVBRops[DD_ROP_SPACE]; } DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS; typedef struct _DDSCAPSEX { DWORD dwCaps2; DWORD dwCaps3; DWORD dwCaps4; } DDSCAPSEX,*LPDDSCAPSEX; #define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2 #define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1 #define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2 /***************************************************************************** * ddraw->driver callbacks */ #define DDHAL_DRIVER_NOTHANDLED 0 #define DDHAL_DRIVER_HANDLED 1 #define DDHAL_DRIVER_NOCKEYHW 2 typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA; typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA; typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA; typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA; typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA; typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA; typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA; typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA; typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA; typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA; typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA); typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA); typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA); typedef DWORD (PASCAL *LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA); typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA); typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA ); typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA); typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA); typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA); typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA); typedef struct _DDHAL_DDCALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHAL_DESTROYDRIVER DestroyDriver; LPDDHAL_CREATESURFACE CreateSurface; LPDDHAL_SETCOLORKEY SetColorKey; LPDDHAL_SETMODE SetMode; LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; LPDDHAL_CANCREATESURFACE CanCreateSurface; LPDDHAL_CREATEPALETTE CreatePalette; LPDDHAL_GETSCANLINE GetScanLine; /* DirectX 2 */ LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; } DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS; typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA; typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA; typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA; typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA; typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA; typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA; typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA; typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA; typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA; typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA; typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA; typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA; typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA; typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA); typedef struct _DDHAL_DDSURFACECALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHALSURFCB_DESTROYSURFACE DestroySurface; LPDDHALSURFCB_FLIP Flip; LPDDHALSURFCB_SETCLIPLIST SetClipList; LPDDHALSURFCB_LOCK Lock; LPDDHALSURFCB_UNLOCK Unlock; LPDDHALSURFCB_BLT Blt; LPDDHALSURFCB_SETCOLORKEY SetColorKey; LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; LPVOID reserved4; LPDDHALSURFCB_SETPALETTE SetPalette; } DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS; typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA; typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA; typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA); typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA); typedef struct _DDHAL_DDPALETTECALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHALPALCB_DESTROYPALETTE DestroyPalette; LPDDHALPALCB_SETENTRIES SetEntries; } DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS; typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA); typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA); typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA); typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA); typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA); typedef struct _DDHAL_DDEXEBUFCALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer; LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer; LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer; LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer; LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer; } DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS; typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA; typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA; typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA; typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA); typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP) (LPDDHAL_UPDATENONLOCALHEAPDATA); typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT) (LPDDHAL_GETHEAPALIGNMENTDATA); typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus; } DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS; typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA; typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA; typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA; typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA); typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA); typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA); typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS { DWORD dwSize; DWORD dwFlags; LPVOID Reserved; LPDDHAL_CREATESURFACEEX CreateSurfaceEx; LPDDHAL_GETDRIVERSTATE GetDriverState; LPDDHAL_DESTROYDDLOCAL DestroyDDLocal; } DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS; typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(DDGAMMARAMP *, BYTE *); /***************************************************************************** * driver info structure * * The HAL is queried for additional callbacks via the GetDriverInfo callback. */ typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA; typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA); typedef struct _DDHALINFO { DWORD dwSize; LPDDHAL_DDCALLBACKS lpDDCallbacks; LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks; LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks; VIDMEMINFO vmiData; DDCORECAPS ddCaps; DWORD dwMonitorFrequency; LPDDHAL_GETDRIVERINFO GetDriverInfo; DWORD dwModeIndex; LPDWORD lpdwFourCC; DWORD dwNumModes; LPDDHALMODEINFO lpModeInfo; DWORD dwFlags; LPVOID lpPDevice; DWORD hInstance; /* DirectX 2 */ ULONG_PTR lpD3DGlobalDriverData; ULONG_PTR lpD3DHALCallbacks; LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks; } DDHALINFO; #define DDHALINFO_ISPRIMARYDISPLAY 0x00000001 #define DDHALINFO_MODEXILLEGAL 0x00000002 #define DDHALINFO_GETDRIVERINFOSET 0x00000004 /* where the high-level ddraw implementation stores the callbacks */ typedef struct _DDHAL_CALLBACKS { DDHAL_DDCALLBACKS cbDDCallbacks; DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks; DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks; DDHAL_DDCALLBACKS HALDD; DDHAL_DDSURFACECALLBACKS HALDDSurface; DDHAL_DDPALETTECALLBACKS HALDDPalette; DDHAL_DDCALLBACKS HELDD; DDHAL_DDSURFACECALLBACKS HELDDSurface; DDHAL_DDPALETTECALLBACKS HELDDPalette; DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks; DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf; DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf; /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */ } DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS; /***************************************************************************** * parameter structures */ typedef struct _DDHAL_DESTROYDRIVERDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; HRESULT ddRVal; LPDDHAL_DESTROYDRIVER DestroyDriver; } DDHAL_DESTROYDRIVERDATA; typedef struct _DDHAL_SETMODEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; DWORD dwModeIndex; HRESULT ddRVal; LPDDHAL_SETMODE SetMode; BOOL inexcl; BOOL useRefreshRate; } DDHAL_SETMODEDATA; typedef struct _DDHAL_CREATESURFACEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; DDSURFACEDESC *lpDDSurfaceDesc; LPDDRAWI_DDRAWSURFACE_LCL * lplpSList; DWORD dwSCnt; HRESULT ddRVal; LPDDHAL_CREATESURFACE CreateSurface; } DDHAL_CREATESURFACEDATA; typedef struct _DDHAL_CANCREATESURFACEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; DDSURFACEDESC *lpDDSurfaceDesc; DWORD bIsDifferentPixelFormat; HRESULT ddRVal; LPDDHAL_CANCREATESURFACE CanCreateSurface; } DDHAL_CANCREATESURFACEDATA; typedef struct _DDHAL_CREATEPALETTEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; LPPALETTEENTRY lpColorTable; HRESULT ddRVal; LPDDHAL_CREATEPALETTE CreatePalette; BOOL is_excl; } DDHAL_CREATEPALETTEDATA; typedef struct _DDHAL_SETEXCLUSIVEMODEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; DWORD dwEnterExcl; DWORD dwReserved; HRESULT ddRVal; LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; } DDHAL_SETEXCLUSIVEMODEDATA; /* surfaces */ typedef struct _DDHAL_DESTROYSURFACEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; HRESULT ddRVal; LPDDHALSURFCB_DESTROYSURFACE DestroySurface; } DDHAL_DESTROYSURFACEDATA; typedef struct _DDHAL_FLIPDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; DWORD dwFlags; HRESULT ddRVal; LPDDHALSURFCB_FLIP Flip; LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft; LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft; } DDHAL_FLIPDATA; typedef struct _DDHAL_LOCKDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; DWORD bHasRect; RECTL rArea; LPVOID lpSurfData; HRESULT ddRVal; LPDDHALSURFCB_LOCK Lock; DWORD dwFlags; } DDHAL_LOCKDATA; typedef struct _DDHAL_UNLOCKDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; HRESULT ddRVal; LPDDHALSURFCB_UNLOCK Unlock; } DDHAL_UNLOCKDATA; typedef struct _DDHAL_BLTDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; RECTL rDest; LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; RECTL rSrc; DWORD dwFlags; DWORD dwROPFlags; DDBLTFX bltFX; HRESULT ddRVal; LPDDHALSURFCB_BLT Blt; BOOL IsClipped; RECTL rOrigDest; RECTL rOrigSrc; DWORD dwRectCnt; LPRECT prDestRects; } DDHAL_BLTDATA; typedef struct _DDHAL_UPDATEOVERLAYDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; RECTL rDest; LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; RECTL rSrc; DWORD dwFlags; DDOVERLAYFX overlayFX; HRESULT ddRVal; LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; } DDHAL_UPDATEOVERLAYDATA; typedef struct _DDHAL_SETPALETTEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; HRESULT ddRVal; LPDDHALSURFCB_SETPALETTE SetPalette; BOOL Attach; } DDHAL_SETPALETTEDATA; /* palettes */ typedef struct _DDHAL_DESTROYPALETTEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; HRESULT ddRVal; LPDDHALPALCB_DESTROYPALETTE DestroyPalette; } DDHAL_DESTROYPALETTEDATA; typedef struct _DDHAL_SETENTRIESDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; DWORD dwBase; DWORD dwNumEntries; LPPALETTEENTRY lpEntries; HRESULT ddRVal; LPDDHALPALCB_SETENTRIES SetEntries; } DDHAL_SETENTRIESDATA; typedef struct _DDHAL_GETDRIVERINFODATA { DWORD dwSize; DWORD dwFlags; GUID guidInfo; DWORD dwExpectedSize; LPVOID lpvData; DWORD dwActualSize; HRESULT ddRVal; ULONG_PTR dwContext; } DDHAL_GETDRIVERINFODATA; /***************************************************************************** * high-level ddraw implementation structures */ typedef struct _IUNKNOWN_LIST { struct _IUNKNOWN_LIST * lpLink; LPGUID lpGuid; IUnknown * lpIUnknown; } IUNKNOWN_LIST,*LPIUNKNOWN_LIST; typedef struct _PROCESS_LIST { struct _PROCESS_LIST * lpLink; DWORD dwProcessId; DWORD dwRefCnt; DWORD dwAlphaDepth; DWORD dwZDepth; } PROCESS_LIST,*LPPROCESS_LIST; typedef struct _ATTACHLIST { DWORD dwFlags; struct _ATTACHLIST * lpLink; LPDDRAWI_DDRAWSURFACE_LCL lpAttached; LPDDRAWI_DDRAWSURFACE_INT lpIAttached; } ATTACHLIST,*LPATTACHLIST; #define DDAL_IMPLICIT 0x00000001 typedef struct _ACCESSRECTLIST { struct _ACCESSRECTLIST * lpLink; RECT rDest; LPDDRAWI_DIRECTDRAW_LCL lpOwner; LPVOID lpSurfaceData; DWORD dwFlags; LPHEAPALIASINFO lpHeapAliasInfo; } ACCESSRECTLIST,*LPACCESSRECTLIST; #define ACCESSRECT_VRAMSTYLE 0x00000001 #define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002 #define ACCESSRECT_BROKEN 0x00000004 typedef struct _DBLNODE { struct _DBLNODE * next; struct _DBLNODE * prev; LPDDRAWI_DDRAWSURFACE_LCL object; LPDDRAWI_DDRAWSURFACE_INT object_int; } DBLNODE,*LPDBLNODE; typedef struct _DDRAWI_DIRECTDRAW_INT { LPVOID lpVtbl; LPDDRAWI_DIRECTDRAW_LCL lpLcl; LPDDRAWI_DIRECTDRAW_INT lpLink; DWORD dwIntRefCnt; } DDRAWI_DIRECTDRAW_INT; typedef struct _DDRAWI_DIRECTDRAW_LCL { DWORD lpDDMore; LPDDRAWI_DIRECTDRAW_GBL lpGbl; DWORD dwUnused0; DWORD dwLocalFlags; DWORD dwLocalRefCnt; DWORD dwProcessId; IUnknown * pUnkOuter; DWORD dwObsolete1; ULONG_PTR hWnd; ULONG_PTR hDC; DWORD dwErrorMode; LPDDRAWI_DDRAWSURFACE_INT lpPrimary; LPDDRAWI_DDRAWSURFACE_INT lpCB; DWORD dwPreferredMode; /* DirectX 2 */ HINSTANCE hD3DInstance; IUnknown * pD3DIUnknown; LPDDHAL_CALLBACKS lpDDCB; ULONG_PTR hDDVxd; /* DirectX 5.0 */ DWORD dwAppHackFlags; /* DirectX 5.0A */ ULONG_PTR hFocusWnd; DWORD dwHotTracking; DWORD dwIMEState; /* DirectX 6.0 */ ULONG_PTR hWndPopup; ULONG_PTR hDD; ULONG_PTR hGammaCalibrator; LPDDGAMMACALIBRATORPROC lpGammaCalibrator; } DDRAWI_DIRECTDRAW_LCL; #define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001 #define DDRAWILCL_ISFULLSCREEN 0x00000002 #define DDRAWILCL_SETCOOPCALLED 0x00000004 #define DDRAWILCL_ACTIVEYES 0x00000008 #define DDRAWILCL_ACTIVENO 0x00000010 #define DDRAWILCL_HOOKEDHWND 0x00000020 #define DDRAWILCL_ALLOWMODEX 0x00000040 #define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080 #define DDRAWILCL_MODEHASBEENCHANGED 0x00000100 #define DDRAWILCL_CREATEDWINDOW 0x00000200 #define DDRAWILCL_DIRTYDC 0x00000400 #define DDRAWILCL_DISABLEINACTIVATE 0x00000800 #define DDRAWILCL_CURSORCLIPPED 0x00001000 #define DDRAWILCL_EXPLICITMONITOR 0x00002000 #define DDRAWILCL_MULTITHREADED 0x00004000 #define DDRAWILCL_FPUSETUP 0x00008000 #define DDRAWILCL_POWEREDDOWN 0x00010000 #define DDRAWILCL_DIRECTDRAW7 0x00020000 #define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000 #define DDRAWILCL_FPUPRESERVE 0x00080000 typedef struct _DDRAWI_DIRECTDRAW_GBL { DWORD dwRefCnt; DWORD dwFlags; FLATPTR fpPrimaryOrig; DDCORECAPS ddCaps; DWORD dwInternal1; DWORD dwUnused1[9]; LPDDHAL_CALLBACKS lpDDCBtmp; LPDDRAWI_DDRAWSURFACE_INT dsList; LPDDRAWI_DDRAWPALETTE_INT palList; LPDDRAWI_DDRAWCLIPPER_INT clipperList; LPDDRAWI_DIRECTDRAW_GBL lp16DD; DWORD dwMaxOverlays; DWORD dwCurrOverlays; DWORD dwMonitorFrequency; DDCORECAPS ddHELCaps; DWORD dwUnused2[50]; DDCOLORKEY ddckCKDestOverlay; DDCOLORKEY ddckCKSrcOverlay; VIDMEMINFO vmiData; LPVOID lpDriverHandle; LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner; DWORD dwModeIndex; DWORD dwModeIndexOrig; DWORD dwNumFourCC; LPDWORD lpdwFourCC; DWORD dwNumModes; LPDDHALMODEINFO lpModeInfo; PROCESS_LIST plProcessList; DWORD dwSurfaceLockCount; DWORD dwAliasedLockCnt; ULONG_PTR dwReserved3; ULONG_PTR hDD; char cObsolete[12]; DWORD dwReserved1; DWORD dwReserved2; DBLNODE dbnOverlayRoot; volatile LPWORD lpwPDeviceFlags; DWORD dwPDevice; DWORD dwWin16LockCnt; DWORD dwUnused3; DWORD hInstance; DWORD dwEvent16; DWORD dwSaveNumModes; /* DirectX 2 */ ULONG_PTR lpD3DGlobalDriverData; ULONG_PTR lpD3DHALCallbacks; DDCORECAPS ddBothCaps; /* DirectX 5.0 */ LPDDVIDEOPORTCAPS lpDDVideoPortCaps; LPDDRAWI_DDVIDEOPORT_INT dvpList; ULONG_PTR lpD3DHALCallbacks2; RECT rectDevice; DWORD cMonitors; LPVOID gpbmiSrc; LPVOID gpbmiDest; LPHEAPALIASINFO phaiHeapAliases; ULONG_PTR hKernelHandle; ULONG_PTR pfnNotifyProc; LPDDKERNELCAPS lpDDKernelCaps; LPDDNONLOCALVIDMEMCAPS lpddNLVCaps; LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps; LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps; ULONG_PTR lpD3DExtendedCaps; /* DirectX 5.0A */ DWORD dwDOSBoxEvent; RECT rectDesktop; char cDriverName[MAX_DRIVER_NAME]; /* DirectX 6.0 */ ULONG_PTR lpD3DHALCallbacks3; DWORD dwNumZPixelFormats; DDPIXELFORMAT *lpZPixelFormats; LPDDRAWI_DDMOTIONCOMP_INT mcList; DWORD hDDVxd; DDSCAPSEX ddsCapsMore; } DDRAWI_DIRECTDRAW_GBL; #define DDRAWI_VIRTUALDESKTOP 0x00000008 #define DDRAWI_MODEX 0x00000010 #define DDRAWI_DISPLAYDRV 0x00000020 #define DDRAWI_FULLSCREEN 0x00000040 #define DDRAWI_MODECHANGED 0x00000080 #define DDRAWI_NOHARDWARE 0x00000100 #define DDRAWI_PALETTEINIT 0x00000200 #define DDRAWI_NOEMULATION 0x00000400 /* more... */ /* surfaces */ typedef struct _DDRAWI_DDRAWSURFACE_INT { LPVOID lpVtbl; LPDDRAWI_DDRAWSURFACE_LCL lpLcl; LPDDRAWI_DDRAWSURFACE_INT lpLink; DWORD dwIntRefCnt; } DDRAWI_DDRAWSURFACE_INT; typedef struct _DDRAWI_DDRAWSURFACE_GBL { DWORD dwRefCnt; DWORD dwGlobalFlags; union { LPACCESSRECTLIST lpRectList; DWORD dwBlockSizeY; } DUMMYUNIONNAME1; union { LPVMEMHEAP lpVidMemHeap; DWORD dwBlockSizeX; } DUMMYUNIONNAME2; union { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPVOID lpDDHandle; } DUMMYUNIONNAME3; FLATPTR fpVidMem; union { LONG lPitch; DWORD dwLinearSize; } DUMMYUNIONNAME4; WORD wHeight; WORD wWidth; DWORD dwUsageCount; ULONG_PTR dwReserved1; /* for display driver use */ /* optional (defaults to primary surface pixelformat) */ DDPIXELFORMAT ddpfSurface; } DDRAWI_DDRAWSURFACE_GBL; #define DDRAWISURFGBL_MEMFREE 0x00000001 #define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002 #define DDRAWISURFGBL_ISGDISURFACE 0x00000004 #define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008 #define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010 #define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020 #define DDRAWISURFGBL_LOCKBROKEN 0x00000040 #define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080 #define DDRAWISURFGBL_ISCLIENTMEM 0x00000100 #define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200 #define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400 #define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600 #define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800 #define DDRAWISURFGBL_VPORTDATA 0x00001000 #define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000 #define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000 #define DDRAWISURFGBL_FASTLOCKHELD 0x00008000 #define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000 typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE { DWORD dwSize; union { DWORD dwPhysicalPageTable; FLATPTR fpPhysicalVidMem; } DUMMYUNIONNAME1; LPDWORD pPageTable; DWORD cPages; ULONG_PTR dwSavedDCContext; FLATPTR fpAliasedVidMem; ULONG_PTR dwDriverReserved; ULONG_PTR dwHELReserved; DWORD cPageUnlocks; ULONG_PTR hKernelSurface; DWORD dwKernelRefCnt; DDCOLORCONTROL *lpColorInfo; FLATPTR fpNTAlias; DWORD dwContentsStamp; LPVOID lpvUnswappedDriverReserved; LPVOID lpDDRAWReserved2; DWORD dwDDRAWReserved1; DWORD dwDDRAWReserved2; FLATPTR fpAliasOfVidMem; } DDRAWI_DDRAWSURFACE_GBL_MORE; /* the MS version of this macro was somewhat obfuscated and unreadable * (possibly because of mediocre MS coders)... so I simplified it... * (and so I commit no copyright violations either, hah) */ #define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \ (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1)) typedef struct _DDRAWI_DDRAWSURFACE_MORE { DWORD dwSize; IUNKNOWN_LIST * lpIUnknowns; LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; DWORD dwPageLockCount; DWORD dwBytesAllocated; LPDDRAWI_DIRECTDRAW_INT lpDD_int; DWORD dwMipMapCount; LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper; /* DirectX 5.0 */ LPHEAPALIASINFO lpHeapAliasInfo; DWORD dwOverlayFlags; VOID *rgjunc; LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; DDOVERLAYFX *lpddOverlayFX; DDSCAPSEX ddsCapsEx; DWORD dwTextureStage; LPVOID lpDDRAWReserved; LPVOID lpDDRAWReserved2; LPVOID lpDDrawReserved3; DWORD dwDDrawReserved4; LPVOID lpDDrawReserved5; LPDWORD lpGammaRamp; LPDWORD lpOriginalGammaRamp; LPVOID lpDDrawReserved6; DWORD dwSurfaceHandle; DWORD qwDDrawReserved8[2]; LPVOID lpDDrawReserved9; DWORD cSurfaces; DDSURFACEDESC2 *pCreatedDDSurfaceDesc2; LPDDRAWI_DDRAWSURFACE_LCL *slist; DWORD dwFVF; LPVOID lpVB; } DDRAWI_DDRAWSURFACE_MORE; typedef struct _DDRAWI_DDRAWSURFACE_LCL { LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore; LPDDRAWI_DDRAWSURFACE_GBL lpGbl; ULONG_PTR hDDSurface; LPATTACHLIST lpAttachList; LPATTACHLIST lpAttachListFrom; DWORD dwLocalRefCnt; DWORD dwProcessId; DWORD dwFlags; DDSCAPS ddsCaps; LPDDRAWI_DDRAWPALETTE_INT lpDDPalette; LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper; DWORD dwModeCreatedIn; DWORD dwBackBufferCount; DDCOLORKEY ddckCKDestBlt; DDCOLORKEY ddckCKSrcBlt; ULONG_PTR hDC; ULONG_PTR dwReserved1; /* for display driver use */ /* overlays only */ DDCOLORKEY ddckCKSrcOverlay; DDCOLORKEY ddckCKDestOverlay; LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying; DBLNODE dbnOverlayNode; RECT rcOverlaySrc; RECT rcOverlayDest; DWORD dwClrXparent; DWORD dwAlpha; LONG lOverlayX; LONG lOverlayY; } DDRAWI_DDRAWSURFACE_LCL; #define DDRAWISURF_ATTACHED 0x00000001 #define DDRAWISURF_IMPLICITCREATE 0x00000002 #define DDRAWISURF_ISFREE 0x00000004 #define DDRAWISURF_ATTACHED_FROM 0x00000008 #define DDRAWISURF_IMPLICITROOT 0x00000010 #define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020 #define DDRAWISURF_DATAISALIASED 0x00000040 #define DDRAWISURF_HASDC 0x00000080 #define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100 #define DDRAWISURF_HASCKEYDESTBLT 0x00000200 #define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400 #define DDRAWISURF_HASCKEYSRCBLT 0x00000800 #define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000 #define DDRAWISURF_HASPIXELFORMAT 0x00002000 #define DDRAWISURF_HASOVERLAYDATA 0x00004000 #define DDRAWISURF_SETGAMMA 0x00008000 /* more... */ #define DDRAWISURF_INVALID 0x10000000 /* palettes */ typedef struct _DDRAWI_DDRAWPALETTE_INT { LPVOID lpVtbl; LPDDRAWI_DDRAWPALETTE_LCL lpLcl; LPDDRAWI_DDRAWPALETTE_INT lpLink; DWORD dwIntRefCnt; } DDRAWI_DDRAWPALETTE_INT; typedef struct _DDRAWI_DDRAWPALETTE_GBL { DWORD dwRefCnt; DWORD dwFlags; LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; DWORD dwProcessId; LPPALETTEENTRY lpColorTable; union { ULONG_PTR dwReserved1; /* for display driver use */ HPALETTE hHELGDIPalette; } DUMMYUNIONNAME1; /* DirectX 5.0 */ DWORD dwDriverReserved; DWORD dwContentsStamp; /* DirectX 6.0 */ DWORD dwSaveStamp; /* DirectX 7.0 */ DWORD dwHandle; } DDRAWI_DDRAWPALETTE_GBL; #define DDRAWIPAL_256 0x00000001 #define DDRAWIPAL_16 0x00000002 #define DDRAWIPAL_GDI 0x00000004 #define DDRAWIPAL_STORED_8 0x00000008 #define DDRAWIPAL_STORED_16 0x00000010 #define DDRAWIPAL_STORED_24 0x00000020 #define DDRAWIPAL_EXCLUSIVE 0x00000040 #define DDRAWIPAL_INHEL 0x00000080 #define DDRAWIPAL_DIRTY 0x00000100 #define DDRAWIPAL_ALLOW256 0x00000200 #define DDRAWIPAL_4 0x00000400 #define DDRAWIPAL_2 0x00000800 #define DDRAWIPAL_STORED_8INDEX 0x00001000 #define DDRAWIPAL_ALPHA 0x00002000 typedef struct _DDRAWI_DDRAWPALETTE_LCL { DWORD lpPalMore; LPDDRAWI_DDRAWPALETTE_GBL lpGbl; ULONG_PTR dwUnused0; DWORD dwLocalRefCnt; IUnknown * pUnkOuter; LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; ULONG_PTR dwReserved1; /* DirectX 6.0 */ ULONG_PTR dwDDRAWReserved1; ULONG_PTR dwDDRAWReserved2; ULONG_PTR dwDDRAWReserved3; } DDRAWI_DDRAWPALETTE_LCL; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __DDRAWI_INCLUDED__ */ ================================================ FILE: wine/windows/ddstream.idl ================================================ /* * Copyright 2004 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "mmstream.idl"; cpp_quote("#ifndef __DDRAW_INCLUDED__") typedef void * LPDDSURFACEDESC; typedef struct tDDSURFACEDESC DDSURFACEDESC; interface IDirectDraw; interface IDirectDrawSurface; interface IDirectDrawPalette; cpp_quote("#endif") cpp_quote("#include ") enum { DDSFF_PROGRESSIVERENDER = 0x00000001 }; interface IDirectDrawMediaStream; interface IDirectDrawStreamSample; [ object, local, uuid(F4104FCE-9A70-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IDirectDrawMediaStream : IMediaStream { HRESULT GetFormat( [out] DDSURFACEDESC *pDDSDCurrent, [out] IDirectDrawPalette **ppDirectDrawPalette, [out] DDSURFACEDESC *pDDSDDesired, [out] DWORD *pdwFlags); HRESULT SetFormat( [in] const DDSURFACEDESC *pDDSurfaceDesc, [in] IDirectDrawPalette *pDirectDrawPalette); HRESULT GetDirectDraw( [out] IDirectDraw **ppDirectDraw); HRESULT SetDirectDraw( [in] IDirectDraw *pDirectDraw); HRESULT CreateSample( [in] IDirectDrawSurface *pSurface, [in] const RECT *pRect, [in] DWORD dwFlags, [out] IDirectDrawStreamSample **ppSample); HRESULT GetTimePerFrame( [out] STREAM_TIME *pFrameTime); } [ object, local, uuid(F4104FCF-9A70-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IDirectDrawStreamSample : IStreamSample { HRESULT GetSurface( [out] IDirectDrawSurface ** ppDirectDrawSurface, [out] RECT * pRect); HRESULT SetRect( [in] const RECT * pRect); } ================================================ FILE: wine/windows/delayloadhandler.h ================================================ /* * Copyright 2013 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DELAYLOADHANDLER_H #define __WINE_DELAYLOADHANDLER_H #ifdef __cplusplus extern "C" { #endif #define DELAYLOAD_GPA_FAILURE 4 typedef struct _DELAYLOAD_PROC_DESCRIPTOR { ULONG ImportDescribedByName; union { LPCSTR Name; ULONG Ordinal; } Description; } DELAYLOAD_PROC_DESCRIPTOR, *PDELAYLOAD_PROC_DESCRIPTOR; typedef struct _DELAYLOAD_INFO { ULONG Size; PCIMAGE_DELAYLOAD_DESCRIPTOR DelayloadDescriptor; PIMAGE_THUNK_DATA ThunkAddress; LPCSTR TargetDllName; DELAYLOAD_PROC_DESCRIPTOR TargetApiDescriptor; PVOID TargetModuleBase; PVOID Unused; ULONG LastError; } DELAYLOAD_INFO, *PDELAYLOAD_INFO; typedef PVOID (WINAPI *PDELAYLOAD_FAILURE_DLL_CALLBACK)(ULONG, PDELAYLOAD_INFO); #ifdef __cplusplus } #endif #endif /* __WINE_DELAYLOADHANDLER_H */ ================================================ FILE: wine/windows/devenum.idl ================================================ /* * Copyright (C) 2002 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif import "oaidl.idl"; cpp_quote("#define CDEF_CLASS_DEFAULT 0x0001") cpp_quote("#define CDEF_BYPASS_CLASS_MANAGER 0x0002") cpp_quote("#define CDEF_CLASS_LEGACY 0x0004") cpp_quote("#define CDEF_MERIT_ABOVE_DO_NOT_USE 0x0008") [ object, uuid(29840822-5B84-11D0-BD3B-00A0C911CE86), pointer_default(unique) ] interface ICreateDevEnum : IUnknown { HRESULT CreateClassEnumerator( [in] REFCLSID clsidDeviceClass, [out] IEnumMoniker ** ppEnumMoniker, [in] DWORD dwFlags); } ================================================ FILE: wine/windows/devguid.h ================================================ /* * Defines GUIDs for device classes * * Copyright (C) 2004 CodeWeavers (Aric Stewart) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ DEFINE_GUID( GUID_DEVCLASS_1394, 0x6BDD1FC1, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F ); DEFINE_GUID( GUID_DEVCLASS_ADAPTER, 0x4D36E964, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_APMSUPPORT, 0xD45B1C18, 0xC8FA, 0x11D1, 0x9F, 0x77, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 ); DEFINE_GUID( GUID_DEVCLASS_BATTERY, 0x72631E54, 0x78A4, 0x11D0, 0xBC, 0xF7, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A ); DEFINE_GUID( GUID_DEVCLASS_CDROM, 0x4D36E965, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_COMPUTER, 0x4D36E966, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_DECODER, 0x6BDD1FC2, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F ); DEFINE_GUID( GUID_DEVCLASS_DISKDRIVE, 0x4D36E967, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_DISPLAY, 0x4D36E968, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_FDC, 0x4D36E969, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_FLOPPYDISK, 0x4D36E980, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_GPS, 0x6BDD1FC3, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F ); DEFINE_GUID( GUID_DEVCLASS_HDC, 0x4D36E96A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_HIDCLASS, 0x745A17A0, 0x74D3, 0x11D0, 0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA ); DEFINE_GUID( GUID_DEVCLASS_IMAGE, 0x6BDD1FC6, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F ); DEFINE_GUID( GUID_DEVCLASS_INFRARED, 0x6BDD1FC5, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F ); DEFINE_GUID( GUID_DEVCLASS_KEYBOARD, 0x4D36E96B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_LEGACYDRIVER, 0x8ECC055D, 0x047F, 0x11D1, 0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1 ); DEFINE_GUID( GUID_DEVCLASS_MEDIA, 0x4D36E96C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_MEDIUM_CHANGER, 0xCE5939AE, 0xEBDE, 0x11D0, 0xB1, 0x81, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xC4 ); DEFINE_GUID( GUID_DEVCLASS_MODEM, 0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_MONITOR, 0x4D36E96E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_MOUSE, 0x4D36E96F, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_MTD, 0x4D36E970, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_MULTIFUNCTION, 0x4D36E971, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_MULTIPORTSERIAL, 0x50906CB8, 0xBA12, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 ); DEFINE_GUID( GUID_DEVCLASS_NET, 0x4D36E972, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_NETCLIENT, 0x4D36E973, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_NETSERVICE, 0x4D36E974, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_NETTRANS, 0x4D36E975, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_NODRIVER, 0x4D36E976, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_PCMCIA, 0x4D36E977, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_PORTS, 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_PRINTER, 0x4D36E979, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_PRINTERUPGRADE, 0x4D36E97A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_SCSIADAPTER, 0x4D36E97B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_SMARTCARDREADER, 0x50DD5230, 0xBA8A, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 ); DEFINE_GUID( GUID_DEVCLASS_SOUND, 0x4D36E97C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_SYSTEM, 0x4D36E97D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_TAPEDRIVE, 0x6D807884, 0x7D21, 0x11CF, 0x80, 0x1C, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_UNKNOWN, 0x4D36E97E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); DEFINE_GUID( GUID_DEVCLASS_USB, 0x36FC9E60, 0xC465, 0x11CF, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 ); DEFINE_GUID( GUID_DEVCLASS_VOLUME, 0x71A27CDD, 0x812A, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F ); ================================================ FILE: wine/windows/devicetopology.idl ================================================ /* * Core Audio device topology definitions * * Copyright 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ interface IPart; interface IControlInterface; interface IDeviceTopology; interface IControlChangeNotify; import "oaidl.idl"; import "ocidl.idl"; import "propidl.idl"; cpp_quote("#ifndef E_NOTFOUND") cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)") cpp_quote("#endif") cpp_quote("#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 0x64726148 /* 'draH' */") cpp_quote("DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xe2c2e9de, 0x09b1, 0x4b04,0x84,0xe5, 0x07, 0x93, 0x12, 0x25, 0xee, 0x04);") cpp_quote("#define _IKsControl_") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#ifndef _KS_") typedef struct { ULONG FormatSize; ULONG Flags; ULONG SampleSize; ULONG Reserved; GUID MajorFormat; GUID SubFormat; GUID Specifier; } KSDATAFORMAT; typedef KSDATAFORMAT *PKSDATAFORMAT; typedef struct { union { struct { GUID Set; ULONG Id; ULONG Flags; }; LONGLONG Alignment; }; } KSIDENTIFIER; typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY; typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD; typedef KSIDENTIFIER KSEVENT, *PKSEVENT; typedef enum { eConnTypeUnknown = 0, eConnType3Point5mm, eConnTypeQuarter, eConnTypeAtapiInternal, eConnTypeRCA, eConnTypeOptical, eConnTypeOtherDigital, eConnTypeOtherAnalog, eConnTypeMultichannelAnalogDIN, eConnTypeXlrProfessional, eConnTypeRJ11Modem, eConnTypeCombination } EPcxConnectionType; typedef enum { eGeoLocRear = 1, eGeoLocFront, eGeoLocLeft, eGeoLocRight, eGeoLocTop, eGeoLocBottom, eGeoLocRearPanel, eGeoLocRiser, eGeoLocInsideMobileLid, eGeoLocDrivebay, eGeoLocHDMI, eGeoLocOutsideMobileLid, eGeoLocATAPI, eGeoLocReserved5, eGeoLocReserved6 } EPcxGeoLocation; typedef enum { eGenLocPrimaryBox = 0, eGenLocInternal, eGenLocSeparate, eGenLocOther } EPcxGenLocation; typedef enum { ePortConnJack = 0, ePortConnIntegratedDevice, ePortConnBothIntegratedAndJack, ePortConnUnknown } EPxcPortConnection; typedef struct { DWORD ChannelMapping; COLORREF Color; EPcxConnectionType ConnectionType; EPcxGeoLocation GeoLocation; EPcxGenLocation GenLocation; EPxcPortConnection PortConnection; BOOL IsConnected; } KSJACK_DESCRIPTION; typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION; typedef struct _LUID { DWORD LowPart; LONG HighPart; } LUID; typedef struct _LUID *PLUID; typedef enum { KSJACK_SINK_CONNECTIONTYPE_HDMI = 0, KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT } KSJACK_SINK_CONNECTIONTYPE; typedef struct _tagKSJACK_SINK_INFORMATION { KSJACK_SINK_CONNECTIONTYPE ConnType; WORD ManufacturerId; WORD ProductId; WORD AudioLatency; BOOL HDCPCapable; BOOL AICapable; UCHAR SinkDescriptionLength; WCHAR SinkDescription[32]; LUID PortId; } KSJACK_SINK_INFORMATION; typedef struct _tagKSJACK_DESCRIPTION2 { DWORD DeviceStateInfo; DWORD JackCapabilities; } KSJACK_DESCRIPTION2; typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2; cpp_quote("#endif") typedef enum { In = 0, Out } DataFlow; typedef enum { Connector = 0, Subunit } PartType; typedef enum { Unknown_Connector = 0, Physical_Internal, Physical_External, Software_IO, Software_Fixed, Network } ConnectorType; [ pointer_default(unique), nonextensible, uuid(28f54685-06fd-11d2-b27a-00a0c9223196), local, object ] interface IKsControl : IUnknown { HRESULT KsProperty( [in] PKSPROPERTY Property, [in] ULONG PropertyLength, [in,out] void *PropertyData, [in] ULONG DataLength, [out] ULONG *BytesReturned ); HRESULT KsMethod( [in] PKSMETHOD Method, [in] ULONG MethodLength, [in,out] void *MethodData, [in] ULONG DataLength, [out] ULONG *BytesReturned ); HRESULT KsEvent( [in] PKSEVENT Event, [in] ULONG EventLength, [in,out] void *EventData, [in] ULONG DataLength, [out] ULONG *BytesReturned ); } [ pointer_default(unique), nonextensible, uuid(c2f8e001-f205-4bc9-99bc-c13b1e048ccb), local, object ] interface IPerChannelDbLevel : IUnknown { HRESULT GetChannelCount( [out] UINT *pcChannels ); HRESULT GetLevelRange( [in] UINT nChannel, [out] float *pfMinLevelDB, [out] float *pfMaxLevelDB, [out] float *pfStepping ); HRESULT GetLevel( [in] UINT nChannel, [out] float *pfLevelDB ); HRESULT SetLevel( [in] UINT nChannel, [in] float fLevelDB, [in,unique] LPCGUID pguidEventContext ); HRESULT SetLevelUniform( [in] float fLevelDB, [in,unique] LPCGUID pguidEventContext ); HRESULT SetLevelAllChannels( [size_is(cChannels),in] float *aLevelsDB, [in] ULONG cChannels, [in] LPCGUID pguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc), local, object ] interface IAudioVolumeLevel : IPerChannelDbLevel { /* Empty */ } [ pointer_default(unique), nonextensible, uuid(bb11c46f-ec28-493c-b88a-5db88062ce98), local, object ] interface IAudioChannelConfig : IUnknown { HRESULT SetChannelConfig( [in] DWORD dwConfig, [in] LPCGUID pguidEventContext ); HRESULT GetChannelConfig( [in] DWORD dwConfig, [retval,out] DWORD *pdwConfig ); } [ pointer_default(unique), nonextensible, uuid(7d8b1437-dd53-4350-9c1b-1ee2890bf938), local, object ] interface IAudioLoudness : IUnknown { HRESULT GetEnabled( [out] BOOL *pbEnabled ); HRESULT SetEnabled( [in] BOOL bEnabled, [in] LPCGUID pguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(4f03dc02-5e6e-4653-8f72-a030c123d598), local, object ] interface IAudioInputSelector : IUnknown { HRESULT GetSelection( [out] UINT *pnIdSelected ); HRESULT SetSelection( [in] UINT nIdSelect, [unique,in] LPCGUID pguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab), local, object ] interface IAudioOutputSelector : IUnknown { HRESULT GetSelection( [out] UINT *pnIdSelected ); HRESULT SetSelection( [in] UINT nIdSelect, [unique,in] LPCGUID pguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(df45aeea-b74a-4b6b-afad-2366b6aa012e), local, object ] interface IAudioMute : IUnknown { HRESULT SetMute( [in] BOOL bMute, [unique,in] LPCGUID pguidEventContext ); HRESULT GetMute( [out] BOOL *pbMute ); } [ pointer_default(unique), nonextensible, uuid(a2b1a1d9-4db3-425d-a2b2-bd335cb3e2e5), local, object ] interface IAudioBass : IPerChannelDbLevel { /* Empty */ } [ pointer_default(unique), nonextensible, uuid(5e54b6d7-b44b-40d9-9a9e-e691d9ce6edf), local, object ] interface IAudioMidRange : IPerChannelDbLevel { /* Empty */ } [ pointer_default(unique), nonextensible, uuid(0a717812-694e-4907-b74b-bafa5cfdca7b), local, object ] interface IAudioTreble : IPerChannelDbLevel { /* Empty */ } [ pointer_default(unique), nonextensible, uuid(85401fd4-6de4-4b9d-9869-2d6753a82f3c), local, object ] interface IAudioAutoGainControl : IUnknown { HRESULT GetEnabled( [in] BOOL bEnabled, [unique,in] LPCGUID pguidEventContext ); HRESULT GetMute( [out] BOOL *pbEnabled ); } [ pointer_default(unique), nonextensible, uuid(dd79923c-0599-45e0-b8b6-c8df7db6e796), local, object ] interface IAudioPeakMeter : IUnknown { HRESULT GetChannelCount( [out] UINT *pcChannels ); HRESULT GetLevel( [in] UINT nChannel, [out] float *pfLevel ); } [ pointer_default(unique), nonextensible, uuid(3b22bcbf-2586-4af0-8583-205d391b807c), local, object ] interface IDeviceSpecificProperty : IUnknown { HRESULT GetType( [out] VARTYPE *pVType ); HRESULT GetValue( [out] VARTYPE *pvType, [out,in] DWORD *pcbValue ); HRESULT SetValue( [in] void *pvValue, [in] DWORD cbValue, [in] LPCGUID pguidEventContext ); HRESULT Get4BRange( [out] LONG *plMin, [out] LONG *plMax, [out] LONG *plStepping ); } [ pointer_default(unique), nonextensible, uuid(3cb4a69d-bb6f-4d2b-95b7-452d2c155db5), local, object ] interface IKsFormatSupport : IUnknown { HRESULT IsFormatSupported( [size_is(cbFormat),in] PKSDATAFORMAT pKsFormat, [in] DWORD cbFormat, [out] BOOL *pbSupported ); HRESULT GetDevicePreferredFormat( [out] PKSDATAFORMAT *ppKsFormat ); } [ pointer_default(unique), nonextensible, uuid(4509f757-2d46-4637-8e62-ce7db944f57b), local, object ] interface IKsJackDescription : IUnknown { HRESULT GetJackCount( [out] UINT *pcJacks ); HRESULT GetJackDescription( [in] UINT nJack, [out] KSJACK_DESCRIPTION *pDescription ); } [ pointer_default(unique), nonextensible, uuid(478f3a9b-e0c9-4827-9228-6f5505ffe76a), local, object ] interface IKsJackDescription2 : IUnknown { HRESULT GetJackCount( [out] UINT *pcJacks ); HRESULT GetJackDescription2( [in] UINT nJack, [out] KSJACK_DESCRIPTION2 *pDescription2 ); } [ pointer_default(unique), nonextensible, uuid(d9bd72ed-290f-4581-9ff3-61027a8fe532), local, object ] interface IKsJackSinkInformation : IUnknown { HRESULT GetJackSinkInformation( [out] KSJACK_SINK_INFORMATION *pJackSinkInformation ); } [ pointer_default(unique), nonextensible, uuid(6daa848c-5eb0-45cc-aea5-998a2cda1ffb), local, object ] interface IPartsList : IUnknown { HRESULT GetCount( [out] UINT *pCount ); HRESULT GetPart( [in] UINT nIndex, [out] IPart **ppPart ); } [ pointer_default(unique), nonextensible, uuid(ae2de0e4-5bca-4f2d-aa46-5d13f8fdb3a9), local, object ] interface IPart : IUnknown { HRESULT GetName( [out] LPWSTR *ppwstrName ); HRESULT GetLocalId( [out] UINT *pnId ); HRESULT GetGlobalId( [out] LPWSTR *ppwstrGlobalId ); HRESULT GetPartType( [out] PartType *pPartType ); HRESULT GetSubType( [out] GUID *pSubType ); HRESULT GetControlInterfaceCount( [out] UINT *pCount ); HRESULT GetControlInterface( [in] UINT nIndex, [out] IControlInterface **ppInterfaceDesc ); HRESULT EnumPartsIncoming( [out] IPartsList **ppParts ); HRESULT EnumPartsOutgoing( [out] IPartsList **ppParts ); HRESULT GetTopologyObjects( [out] IDeviceTopology **ppTopology ); HRESULT Activate( [in] DWORD dwClsContext, [in] REFIID refiid, [iid_is(refiid),out] void **ppvObject ); HRESULT RegisterControlChangeCallback( [in] REFGUID riid, [in] IControlChangeNotify *pNotify ); HRESULT UnregisterControlChangeCallback( [in] IControlChangeNotify *pNotify ); } [ pointer_default(unique), nonextensible, uuid(9c2c4058-23f5-41de-877a-df3af236a09e), local, object ] interface IConnector : IUnknown { HRESULT GetType( [out] ConnectorType *pType ); HRESULT GetDataFlow( [out] DataFlow *pFlow ); HRESULT ConnectTo( [in] IConnector *pConnectTo ); HRESULT Disconnect(void); HRESULT IsConnected( [out] BOOL *pbConnected ); HRESULT GetConnectedTo( [out] IConnector **ppConTo ); HRESULT GetConnectorIdConnectedTo( [out] LPWSTR *ppwstrConnectorId ); HRESULT GetDeviceIdConnectedTo( [out] LPWSTR *ppwstrDeviceId ); } [ pointer_default(unique), nonextensible, uuid(82149a85-dba6-4487-86bb-ea8f7fefcc71), local, object ] interface ISubUnit: IUnknown { /* Empty IUnknown interface.. */ } [ pointer_default(unique), nonextensible, uuid(45d37c3f-5140-444a-ae24-400789f3cbf3), local, object ] interface IControlInterface : IUnknown { HRESULT GetName( [out] LPWSTR *ppwstrName ); HRESULT GetIID( [out] GUID *pIID ); } [ pointer_default(unique), nonextensible, uuid(a09513ed-c709-4d21-bd7b-5f34c47f3947), local, object ] interface IControlChangeNotify : IUnknown { HRESULT OnNotify( [in] DWORD dwSenderProcessId, [in] LPCGUID ppguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(2a07407e-6497-4a18-9787-32f79bd0d98f), local, object ] interface IDeviceTopology : IUnknown { HRESULT GetConnectorCount( [out] UINT *pCount ); HRESULT GetConnector( [in] UINT nIndex, [out] IConnector **ppConnector ); HRESULT GetSubunitCount( [out] UINT *pCount ); HRESULT GetSubunit( [in] UINT nIndex, [out] ISubUnit **ppConnector ); HRESULT GetPartById( [in] UINT nId, [out] IPart **ppPart ); HRESULT GetDeviceId( [out] LPWSTR *ppwstrDeviceId ); HRESULT GetSignalPath( [in] IPart *pIPartFrom, [in] IPart *pIPartTo, [in] BOOL bRejectMixedPaths, [out] IPartsList **ppParts ); } [ uuid(51b9a01d-8181-4363-b59c-e678f476dd0e), version(1.0) ] library DevTopologyLib { [ uuid(1df639d0-5ec1-47aa-9379-828dc1aa8c59), ] coclass DeviceTopology { interface IDeviceTopology; } } ================================================ FILE: wine/windows/devpkey.h ================================================ /* * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include /* TODO: Not all DEVPROPKEYS have been defined here */ DEFINE_DEVPROPKEY(DEVPKEY_NAME, 0xb725f130,0x47ef,0x101a,0xa5,0xf1,0x02,0x60,0x8c,0x9e,0xeb,0xac, 10); DEFINE_DEVPROPKEY(DEVPKEY_Device_DeviceDesc, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 2); DEFINE_DEVPROPKEY(DEVPKEY_Device_HardwareIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 3); DEFINE_DEVPROPKEY(DEVPKEY_Device_CompatibleIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 4); DEFINE_DEVPROPKEY(DEVPKEY_Device_Service, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 6); DEFINE_DEVPROPKEY(DEVPKEY_Device_Class, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 9); DEFINE_DEVPROPKEY(DEVPKEY_Device_ClassGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 10); DEFINE_DEVPROPKEY(DEVPKEY_Device_Driver, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 11); DEFINE_DEVPROPKEY(DEVPKEY_Device_ConfigFlags, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 12); DEFINE_DEVPROPKEY(DEVPKEY_Device_Manufacturer, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 13); DEFINE_DEVPROPKEY(DEVPKEY_Device_FriendlyName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 14); DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationInfo, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 15); DEFINE_DEVPROPKEY(DEVPKEY_Device_PDOName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 16); DEFINE_DEVPROPKEY(DEVPKEY_Device_Capabilities, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 17); DEFINE_DEVPROPKEY(DEVPKEY_Device_UINumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 18); DEFINE_DEVPROPKEY(DEVPKEY_Device_UpperFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 19); DEFINE_DEVPROPKEY(DEVPKEY_Device_LowerFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 20); DEFINE_DEVPROPKEY(DEVPKEY_Device_BusTypeGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 21); DEFINE_DEVPROPKEY(DEVPKEY_Device_LegacyBusType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 22); DEFINE_DEVPROPKEY(DEVPKEY_Device_BusNumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 23); DEFINE_DEVPROPKEY(DEVPKEY_Device_EnumeratorName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 24); DEFINE_DEVPROPKEY(DEVPKEY_Device_Security, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 25); DEFINE_DEVPROPKEY(DEVPKEY_Device_SecuritySDS, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 26); DEFINE_DEVPROPKEY(DEVPKEY_Device_DevType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 27); DEFINE_DEVPROPKEY(DEVPKEY_Device_Exclusive, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 28); DEFINE_DEVPROPKEY(DEVPKEY_Device_Characteristics, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 29); DEFINE_DEVPROPKEY(DEVPKEY_Device_Address, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 30); DEFINE_DEVPROPKEY(DEVPKEY_Device_UINumberDescFormat, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 31); DEFINE_DEVPROPKEY(DEVPKEY_Device_PowerData, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 32); DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicy, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 33); DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyDefault, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 34); DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyOverride, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 35); DEFINE_DEVPROPKEY(DEVPKEY_Device_InstallState, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 36); DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationPaths, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 37); DEFINE_DEVPROPKEY(DEVPKEY_Device_BaseContainerId, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 38); DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_FriendlyName, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 2); DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Enabled, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 3); DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_ClassGuid, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 4); ================================================ FILE: wine/windows/devpropdef.h ================================================ /* * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _DEVPROPDEF_H_ #define _DEVPROPDEF_H_ typedef ULONG DEVPROPTYPE, *PDEVPROPTYPE; #define DEVPROP_TYPEMOD_ARRAY 0x1000 #define DEVPROP_TYPEMOD_LIST 0x2000 #define MAX_DEVPROP_TYPEMOD DEVPROP_TYPEMOD_LIST #define DEVPROP_TYPE_EMPTY 0x00 #define DEVPROP_TYPE_NULL 0x01 #define DEVPROP_TYPE_SBYTE 0x02 #define DEVPROP_TYPE_BYTE 0x03 #define DEVPROP_TYPE_INT16 0x04 #define DEVPROP_TYPE_UINT16 0x05 #define DEVPROP_TYPE_INT32 0x06 #define DEVPROP_TYPE_UINT32 0x07 #define DEVPROP_TYPE_INT64 0x08 #define DEVPROP_TYPE_UINT64 0x09 #define DEVPROP_TYPE_FLOAT 0x0a #define DEVPROP_TYPE_DOUBLE 0x0b #define DEVPROP_TYPE_DECIMAL 0x0c #define DEVPROP_TYPE_GUID 0x0d #define DEVPROP_TYPE_CURRENCY 0x0e #define DEVPROP_TYPE_DATE 0x0f #define DEVPROP_TYPE_FILETIME 0x10 #define DEVPROP_TYPE_BOOLEAN 0x11 #define DEVPROP_TYPE_STRING 0x12 #define DEVPROP_TYPE_STRING_LIST (DEVPROP_TYPE_STRING|DEVPROP_TYPEMOD_LIST) #define DEVPROP_TYPE_SECURITY_DESCRIPTOR 0x13 #define DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING 0x14 #define DEVPROP_TYPE_DEVPROPKEY 0x15 #define DEVPROP_TYPE_DEVPROPTYPE 0x16 #define DEVPROP_TYPE_BINARY (DEVPROP_TYPE_BYTE|DEVPROP_TYPEMOD_ARRAY) #define DEVPROP_TYPE_ERROR 0x17 #define DEVPROP_TYPE_NTSTATUS 0x18 #define DEVPROP_TYPE_STRING_INDIRECT 0x19 #define MAX_DEVPROP_TYPE DEVPROP_TYPE_STRING_INDIRECT #define DEVPROP_MASK_TYPE 0x0fff #define DEVPROP_MASK_TYPEMOD 0xf000 typedef CHAR DEVPROP_BOOLEAN, *PDEVPROP_BOOLEAN; #define DEVPROP_TRUE ((DEVPROP_BOOLEAN)-1) #define DEVPROP_FALSE ((DEVPROP_BOOLEAN)0) #ifndef DEVPROPKEY_DEFINED #define DEVPROPKEY_DEFINED typedef GUID DEVPROPGUID, *PDEVPROPGUID; typedef ULONG DEVPROPID, *PDEVPROPID; typedef struct _DEVPROPKEY { DEVPROPGUID fmtid; DEVPROPID pid; } DEVPROPKEY, *PDEVPROPKEY; #define DEVPROPID_FIRST_USABLE 2 #endif /*DEVPROPKEY_DEFINED*/ #endif /*_DEVPROPDEF_H_*/ #undef DEFINE_DEVPROPKEY #ifdef INITGUID #ifdef __cplusplus #define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \ EXTERN_C const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY; \ EXTERN_C const DEVPROPKEY name = \ { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } #else #define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \ const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY; \ const DEVPROPKEY name = \ { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } #endif #else #define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \ EXTERN_C const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY #endif #ifndef IsEqualDevPropKey #ifdef __cplusplus #define IsEqualDevPropKey(a,b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid,(b).fmtid)) #else #define IsEqualDevPropKey(a,b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid,&(b).fmtid)) #endif #endif ================================================ FILE: wine/windows/dhcpcsdk.h ================================================ /* * Copyright (C) 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _DHCPCSDK_ #define _DHCPCSDK_ typedef struct _DHCPAPI_PARAMS { ULONG Flags; ULONG OptionId; BOOL IsVendor; BYTE *Data; DWORD nBytesData; } DHCPAPI_PARAMS, *PDHCPAPI_PARAMS, *LPDHCPAPI_PARAMS; typedef struct _DHCPAPI_PARAMS DHCPCAPI_PARAMS, *PDHCPCAPI_PARAMS, *LPDHCPCAPI_PARAMS; typedef struct _DHCPCAPI_PARAMS_ARARAY { ULONG nParams; LPDHCPCAPI_PARAMS Params; } DHCPCAPI_PARAMS_ARRAY, *PDHCPCAPI_PARAMS_ARRAY, *LPDHCPCAPI_PARAMS_ARRAY; typedef struct _DHCPCAPI_CLASSID { ULONG Flags; BYTE *Data; ULONG nBytesData; } DHCPCAPI_CLASSID, *PDHCPCAPI_CLASSID, *LPDHCPCAPI_CLASSID; DWORD WINAPI DhcpRequestParams( DWORD flags, void *reserved, WCHAR *adaptername, DHCPCAPI_CLASSID *classid, DHCPCAPI_PARAMS_ARRAY sendparams, DHCPCAPI_PARAMS_ARRAY recdparams, BYTE *buffer, DWORD *size, WCHAR *requestidstr ); #endif ================================================ FILE: wine/windows/dhtmldid.h ================================================ /* * Copyright 2017 Alex Henrie * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define DISPID_LOADDOCUMENT 1 #define DISPID_EXECCOMMAND 2 #define DISPID_QUERYSTATUS 3 #define DISPID_SAVEDOCUMENT 4 #define DISPID_SETCONTEXTMENU 5 #define DISPID_DOCUMENT 6 #define DISPID_ACTIVATEAPPLETS 7 #define DISPID_ACTIVATEACTIVEXCONTROLS 8 #define DISPID_ACTIVATEDTCS 9 #define DISPID_SHOWDETAILS 11 #define DISPID_SHOWBORDERS 12 #define DISPID_DHTMLEDITAPPEARANCE 13 #define DISPID_DHTMLEDITSCROLLBARS 14 #define DISPID_SCROLLBARAPPEARANCE 15 #define DISPID_SOURCECODEPRESERVATION 16 #define DISPID_DOCUMENTHTML 17 #define DISPID_ABSOLUTEDROPMODE 18 #define DISPID_SNAPTOGRIDX 19 #define DISPID_SNAPTOGRIDY 20 #define DISPID_SNAPTOGRID 21 #define DISPID_ISDIRTY 22 #define DISPID_CURRENTDOCUMENTPATH 23 #define DISPID_BASEURL 24 #define DISPID_DOCUMENTTITLE 25 #define DISPID_BROWSEMODE 26 #define DISPID_NEWDOCUMENT 27 #define DISPID_PRINT 28 #define DISPID_LOADURL 29 #define DISPID_USEDIVONCR 30 #define DISPID_FILTERSRCCODE 31 #define DISPID_REFRESHDOC 32 #define DISPID_BUSY 33 #define DISPID_DOCUMENTCOMPLETE 1 #define DISPID_DISPLAYCHANGED 2 #define DISPID_SHOWCONTEXTMENU 3 #define DISPID_CONTEXTMENUACTION 4 #define DISPID_ONMOUSEDOWN 5 #define DISPID_ONMOUSEMOVE 6 #define DISPID_ONMOUSEUP 7 #define DISPID_ONMOUSEOUT 8 #define DISPID_ONMOUSEOVER 9 #define DISPID_ONCLICK 10 #define DISPID_ONDBLCLICK 11 #define DISPID_ONKEYDOWN 12 #define DISPID_ONKEYPRESS 13 #define DISPID_ONKEYUP 14 #define DISPID_ONBLUR 15 #define DISPID_ONREADYSTATECHANGE 16 ================================================ FILE: wine/windows/dhtmled.idl ================================================ /* * Copyright 2017 Alex Henrie * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "docobj.idl"; import "mshtml.idl"; #include "dhtmldid.h" #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ uuid(683364a1-b37d-11d1-adc5-006008a5848c), version(1.0) ] library DHTMLEDLib { importlib("stdole2.tlb"); typedef [ uuid(7179FC44-B2E4-11d1-ADC5-006008A5848C) ] enum DHTMLEDITAPPEARANCE { DEAPPEARANCE_FLAT, DEAPPEARANCE_3D } DHTMLEDITAPPEARANCE; typedef [ uuid(bf82426a-b961-11d1-adc5-006008a5848c) ] enum DHTMLEDITCMDF { DECMDF_NOTSUPPORTED = 0, DECMDF_DISABLED = 1, DECMDF_ENABLED = 3, DECMDF_LATCHED = 7, DECMDF_NINCHED = 11 } DHTMLEDITCMDF; typedef enum DHTMLEDITCMDID { DECMD_BOLD = 5000, DECMD_COPY = 5002, DECMD_CUT, DECMD_DELETE, DECMD_DELETECELLS, DECMD_DELETECOLS, DECMD_DELETEROWS, DECMD_FINDTEXT, DECMD_FONT, DECMD_GETBACKCOLOR, DECMD_GETBLOCKFMT, DECMD_GETBLOCKFMTNAMES, DECMD_GETFONTNAME, DECMD_GETFONTSIZE, DECMD_GETFORECOLOR, DECMD_HYPERLINK, DECMD_IMAGE, DECMD_INDENT, DECMD_INSERTCELL, DECMD_INSERTCOL, DECMD_INSERTROW, DECMD_INSERTTABLE, DECMD_ITALIC, DECMD_JUSTIFYCENTER, DECMD_JUSTIFYLEFT, DECMD_JUSTIFYRIGHT, DECMD_LOCK_ELEMENT, DECMD_MAKE_ABSOLUTE, DECMD_MERGECELLS, DECMD_ORDERLIST, DECMD_OUTDENT, DECMD_PASTE, DECMD_REDO, DECMD_REMOVEFORMAT, DECMD_SELECTALL, DECMD_SEND_BACKWARD, DECMD_BRING_FORWARD, DECMD_SEND_BELOW_TEXT, DECMD_BRING_ABOVE_TEXT, DECMD_SEND_TO_BACK, DECMD_BRING_TO_FRONT, DECMD_SETBACKCOLOR, DECMD_SETBLOCKFMT, DECMD_SETFONTNAME, DECMD_SETFONTSIZE, DECMD_SETFORECOLOR, DECMD_SPLITCELL, DECMD_UNDERLINE, DECMD_UNDO, DECMD_UNLINK, DECMD_UNORDERLIST, DECMD_PROPERTIES } DHTMLEDITCMDID; [ object, uuid(ce04b590-2b1f-11d2-8d1e-00a0c959bc0a), dual, pointer_default(unique) ] interface IDHTMLSafe : IDispatch { [ id(DISPID_EXECCOMMAND) ] HRESULT ExecCommand( [in] DHTMLEDITCMDID cmd_id, [in, defaultvalue(OLECMDEXECOPT_DODEFAULT)] OLECMDEXECOPT options, [in, optional] VARIANT *code_in, [out, retval] VARIANT *code_out ); [ id(DISPID_QUERYSTATUS) ] HRESULT QueryStatus( [in] DHTMLEDITCMDID cmd_id, [out, retval] DHTMLEDITCMDF *status ); [ id(DISPID_SETCONTEXTMENU) ] HRESULT SetContextMenu( [in] VARIANT *strings, [in] VARIANT *states ); [ id(DISPID_NEWDOCUMENT) ] HRESULT NewDocument(); [ id(DISPID_LOADURL) ] HRESULT LoadURL( [in] BSTR url ); [ id(DISPID_FILTERSRCCODE) ] HRESULT FilterSourceCode( [in] BSTR in, [out, retval] BSTR *out ); [ id(DISPID_REFRESHDOC) ] HRESULT Refresh(); [ propget, id(DISPID_DOCUMENT) ] HRESULT DOM( [out, retval] IHTMLDocument2 **value ); [ propget, id(DISPID_DOCUMENTHTML) ] HRESULT DocumentHTML( [out, retval] BSTR *value ); [ propput, id(DISPID_DOCUMENTHTML) ] HRESULT DocumentHTML( [in] BSTR html ); [ propget, id(DISPID_ACTIVATEAPPLETS) ] HRESULT ActivateApplets( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_ACTIVATEAPPLETS) ] HRESULT ActivateApplets( [in] VARIANT_BOOL value ); [ propget, id(DISPID_ACTIVATEACTIVEXCONTROLS) ] HRESULT ActivateActiveXControls( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_ACTIVATEACTIVEXCONTROLS) ] HRESULT ActivateActiveXControls( [in] VARIANT_BOOL value ); [ propget, id(DISPID_ACTIVATEDTCS) ] HRESULT ActivateDTCs( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_ACTIVATEDTCS) ] HRESULT ActivateDTCs( [in] VARIANT_BOOL value ); [ propget, id(DISPID_SHOWDETAILS) ] HRESULT ShowDetails( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_SHOWDETAILS) ] HRESULT ShowDetails( [in] VARIANT_BOOL value ); [ propget, id(DISPID_SHOWBORDERS) ] HRESULT ShowBorders( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_SHOWBORDERS) ] HRESULT ShowBorders( [in] VARIANT_BOOL value ); [ propget, id(DISPID_DHTMLEDITAPPEARANCE) ] HRESULT Appearance( [out, retval] DHTMLEDITAPPEARANCE *value ); [ propput, id(DISPID_DHTMLEDITAPPEARANCE) ] HRESULT Appearance( [in] DHTMLEDITAPPEARANCE value ); [ propget, id(DISPID_DHTMLEDITSCROLLBARS) ] HRESULT Scrollbars( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_DHTMLEDITSCROLLBARS) ] HRESULT Scrollbars( [in] VARIANT_BOOL value ); [ propget, id(DISPID_SCROLLBARAPPEARANCE) ] HRESULT ScrollbarAppearance( [out, retval] DHTMLEDITAPPEARANCE *value ); [ propput, id(DISPID_SCROLLBARAPPEARANCE) ] HRESULT ScrollbarAppearance( [in] DHTMLEDITAPPEARANCE value ); [ propget, id(DISPID_SOURCECODEPRESERVATION) ] HRESULT SourceCodePreservation( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_SOURCECODEPRESERVATION) ] HRESULT SourceCodePreservation( [in] VARIANT_BOOL value ); [ propget, id(DISPID_ABSOLUTEDROPMODE) ] HRESULT AbsoluteDropMode( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_ABSOLUTEDROPMODE) ] HRESULT AbsoluteDropMode( [in] VARIANT_BOOL value ); [ propget, id(DISPID_SNAPTOGRIDX) ] HRESULT SnapToGridX( [out, retval] long *value ); [ propput, id(DISPID_SNAPTOGRIDX) ] HRESULT SnapToGridX( [in] long value ); [ propget, id(DISPID_SNAPTOGRIDY) ] HRESULT SnapToGridY( [out, retval] long *value ); [ propput, id(DISPID_SNAPTOGRIDY) ] HRESULT SnapToGridY( [in] long value ); [ propget, id(DISPID_SNAPTOGRID) ] HRESULT SnapToGrid( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_SNAPTOGRID) ] HRESULT SnapToGrid( [in] VARIANT_BOOL value ); [ propget, id(DISPID_ISDIRTY) ] HRESULT IsDirty( [out, retval] VARIANT_BOOL *value ); [ propget, id(DISPID_CURRENTDOCUMENTPATH) ] HRESULT CurrentDocumentPath( [out, retval] BSTR *value ); [ propget, id(DISPID_BASEURL) ] HRESULT BaseURL( [out, retval] BSTR *value ); [ propput, id(DISPID_BASEURL) ] HRESULT BaseURL( [in] BSTR value ); [ propget, id(DISPID_DOCUMENTTITLE) ] HRESULT DocumentTitle( [out, retval] BSTR *value ); [ propget, id(DISPID_USEDIVONCR) ] HRESULT UseDivOnCarriageReturn( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_USEDIVONCR) ] HRESULT UseDivOnCarriageReturn( [in] VARIANT_BOOL value ); [ propget, id(DISPID_BUSY) ] HRESULT Busy( [out, retval] VARIANT_BOOL *value ); }; [ uuid(d1fc78e8-b380-11d1-adc5-006008a5848c) ] dispinterface _DHTMLSafeEvents { properties: methods: [ id(DISPID_DOCUMENTCOMPLETE) ] void DocumentComplete(); [ id(DISPID_DISPLAYCHANGED) ] void DisplayChanged(); [ id(DISPID_SHOWCONTEXTMENU) ] void ShowContextMenu( [in] long x, [in] long y ); [ id(DISPID_CONTEXTMENUACTION) ] void ContextMenuAction( [in] long index ); [ id(DISPID_ONMOUSEDOWN) ] void onmousedown(); [ id(DISPID_ONMOUSEMOVE) ] void onmousemove(); [ id(DISPID_ONMOUSEUP) ] void onmouseup(); [ id(DISPID_ONMOUSEOUT) ] void onmouseout(); [ id(DISPID_ONMOUSEOVER) ] void onmouseover(); [ id(DISPID_ONCLICK) ] void onclick(); [ id(DISPID_ONDBLCLICK) ] void ondblclick(); [ id(DISPID_ONKEYDOWN) ] void onkeydown(); [ id(DISPID_ONKEYPRESS) ] void onkeypress(); [ id(DISPID_ONKEYUP) ] void onkeyup(); [ id(DISPID_ONBLUR) ] void onblur(); [ id(DISPID_ONREADYSTATECHANGE) ] void onreadystatechange(); }; [ uuid(2d360201-fff5-11d1-8d03-00a0c959bc0a), threading(apartment), progid("DHTMLSafe.DHTMLSafe.1"), vi_progid("DHTMLSafe.DHTMLSafe") ] coclass DHTMLSafe { [default] interface IDHTMLSafe; [default, source] interface _DHTMLSafeEvents; }; [ uuid(ce04b591-2b1f-11d2-8d1e-00a0c959bc0a), dual, pointer_default(unique) ] interface IDHTMLEdit : IDHTMLSafe { [ id(DISPID_LOADDOCUMENT) ] HRESULT LoadDocument( [in] VARIANT *path, [in, optional] VARIANT *prompt ); [ id(DISPID_SAVEDOCUMENT) ] HRESULT SaveDocument( [in] VARIANT *path, [in, optional] VARIANT *prompt ); [ id(DISPID_PRINT) ] HRESULT PrintDocument( [in, optional] VARIANT *prompt ); [ propget, id(DISPID_BROWSEMODE) ] HRESULT BrowseMode( [out, retval] VARIANT_BOOL *value ); [ propput, id(DISPID_BROWSEMODE) ] HRESULT BrowseMode( [in] VARIANT_BOOL value ); }; [ uuid(588d5040-cf28-11d1-8cd3-00a0c959bc0a) ] dispinterface _DHTMLEditEvents { properties: methods: [ id(DISPID_DOCUMENTCOMPLETE) ] void DocumentComplete(); [ id(DISPID_DISPLAYCHANGED) ] void DisplayChanged(); [ id(DISPID_SHOWCONTEXTMENU) ] void ShowContextMenu( [in] long x, [in] long y ); [ id(DISPID_CONTEXTMENUACTION) ] void ContextMenuAction( [in] long index ); [ id(DISPID_ONMOUSEDOWN) ] void onmousedown(); [ id(DISPID_ONMOUSEMOVE) ] void onmousemove(); [ id(DISPID_ONMOUSEUP) ] void onmouseup(); [ id(DISPID_ONMOUSEOUT) ] void onmouseout(); [ id(DISPID_ONMOUSEOVER) ] void onmouseover(); [ id(DISPID_ONCLICK) ] void onclick(); [ id(DISPID_ONDBLCLICK) ] void ondblclick(); [ id(DISPID_ONKEYDOWN) ] void onkeydown(); [ id(DISPID_ONKEYPRESS) ] void onkeypress(); [ id(DISPID_ONKEYUP) ] void onkeyup(); [ id(DISPID_ONBLUR) ] void onblur(); [ id(DISPID_ONREADYSTATECHANGE) ] void onreadystatechange(); }; [ uuid(2d360200-fff5-11d1-8d03-00a0c959bc0a), threading(apartment), progid("DHTMLEdit.DHTMLEdit.1"), vi_progid("DHTMLEdit.DHTMLEdit") ] coclass DHTMLEdit { [default] interface IDHTMLEdit; [default, source] interface _DHTMLEditEvents; }; } ================================================ FILE: wine/windows/difxapi.h ================================================ /* * Copyright (c) 2013 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DIFXAPI_H #define __WINE_DIFXAPI_H #ifdef __cplusplus extern "C" { #endif typedef struct _INSTALLERINFO_A { PSTR pApplicationId; PSTR pDisplayName; PSTR pProductName; PSTR pMfgName; } INSTALLERINFO_A, *PINSTALLERINFO_A; typedef const PINSTALLERINFO_A PCINSTALLERINFO_A; typedef struct _INSTALLERINFO_W { PWSTR pApplicationId; PWSTR pDisplayName; PWSTR pProductName; PWSTR pMfgName; } INSTALLERINFO_W, *PINSTALLERINFO_W; typedef const PINSTALLERINFO_W PCINSTALLERINFO_W; typedef enum _DIFXAPI_LOG { DIFXAPI_SUCCESS, DIFXAPI_INFO, DIFXAPI_WARNING, DIFXAPI_ERROR, } DIFXAPI_LOG; typedef VOID (CALLBACK *DIFXAPILOGCALLBACK_A)(DIFXAPI_LOG,DWORD,PCSTR,PVOID); typedef VOID (CALLBACK *DIFXAPILOGCALLBACK_W)(DIFXAPI_LOG,DWORD,PCWSTR,PVOID); typedef VOID (CALLBACK *DIFXLOGCALLBACK_A)(DIFXAPI_LOG,DWORD,PCSTR,PVOID); typedef VOID (CALLBACK *DIFXLOGCALLBACK_W)(DIFXAPI_LOG,DWORD,PCWSTR,PVOID); VOID WINAPI DIFXAPISetLogCallbackA(DIFXAPILOGCALLBACK_A,VOID*); VOID WINAPI DIFXAPISetLogCallbackW(DIFXAPILOGCALLBACK_W,VOID*); DWORD WINAPI DriverPackageGetPathA(PCSTR,PSTR,DWORD*); DWORD WINAPI DriverPackageGetPathW(PCWSTR,PWSTR,DWORD*); DWORD WINAPI DriverPackageInstallA(PCSTR,DWORD,PCINSTALLERINFO_A,BOOL*); DWORD WINAPI DriverPackageInstallW(PCWSTR,DWORD,PCINSTALLERINFO_W,BOOL*); DWORD WINAPI DriverPackagePreinstallA(PCSTR,DWORD); DWORD WINAPI DriverPackagePreinstallW(PCWSTR,DWORD); DWORD WINAPI DriverPackageUninstallA(PCSTR,DWORD,PCINSTALLERINFO_A,BOOL*); DWORD WINAPI DriverPackageUninstallW(PCWSTR,DWORD,PCINSTALLERINFO_W,BOOL*); VOID WINAPI SetDifxLogCallbackA(DIFXLOGCALLBACK_A,VOID*); VOID WINAPI SetDifxLogCallbackW(DIFXLOGCALLBACK_W,VOID*); #ifdef __cplusplus } #endif #endif /* __WINE_DIFXAPI_H */ ================================================ FILE: wine/windows/digitalv.h ================================================ /* * Copyright (C) 1999 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DIGITALV_H #define __WINE_DIGITALV_H /* * Wine Digital Video extensions */ #include #ifdef __cplusplus extern "C" { #endif #define MCI_TEST __MSABI_LONG(0x00000020) /* Message values */ #define MCI_CAPTURE 0x0870 #define MCI_MONITOR 0x0871 #define MCI_RESERVE 0x0872 #define MCI_SETAUDIO 0x0873 #define MCI_SIGNAL 0x0875 #define MCI_SETVIDEO 0x0876 #define MCI_QUALITY 0x0877 #define MCI_LIST 0x0878 #define MCI_UNDO 0x0879 #define MCI_CONFIGURE 0x087A #define MCI_RESTORE 0x087B /* Return and string constant values */ #define MCI_ON 1 #define MCI_OFF 0 #define MCI_DGV_FILE_MODE_SAVING 0x0001 #define MCI_DGV_FILE_MODE_LOADING 0x0002 #define MCI_DGV_FILE_MODE_EDITING 0x0003 #define MCI_DGV_FILE_MODE_IDLE 0x0004 /* These identifiers are used only by device drivers */ #define MCI_ON_S __MSABI_LONG(0x00008000) #define MCI_OFF_S __MSABI_LONG(0x00008001) #define MCI_DGV_FILE_S __MSABI_LONG(0x00008002) #define MCI_DGV_INPUT_S __MSABI_LONG(0x00008003) #define MCI_DGV_FILE_MODE_SAVING_S __MSABI_LONG(0x00008004) #define MCI_DGV_FILE_MODE_LOADING_S __MSABI_LONG(0x00008005) #define MCI_DGV_FILE_MODE_EDITING_S __MSABI_LONG(0x00008006) #define MCI_DGV_FILE_MODE_IDLE_S __MSABI_LONG(0x00008007) #define MCI_DGV_SETVIDEO_SRC_NTSC_S __MSABI_LONG(0x00008010) #define MCI_DGV_SETVIDEO_SRC_RGB_S __MSABI_LONG(0x00008011) #define MCI_DGV_SETVIDEO_SRC_SVIDEO_S __MSABI_LONG(0x00008012) #define MCI_DGV_SETVIDEO_SRC_PAL_S __MSABI_LONG(0x00008013) #define MCI_DGV_SETVIDEO_SRC_SECAM_S __MSABI_LONG(0x00008014) #define MCI_DGV_SETVIDEO_SRC_GENERIC_S __MSABI_LONG(0x00008015) #define MCI_DGV_SETAUDIO_SRC_LEFT_S __MSABI_LONG(0x00008020) #define MCI_DGV_SETAUDIO_SRC_RIGHT_S __MSABI_LONG(0x00008021) #define MCI_DGV_SETAUDIO_SRC_AVERAGE_S __MSABI_LONG(0x00008022) #define MCI_DGV_SETAUDIO_SRC_STEREO_S __MSABI_LONG(0x00008023) /* Window message for signal notification */ #ifndef MM_MCISIGNAL #define MM_MCISIGNAL 0x3CB #endif /* error values */ #define MCIERR_DGV_DEVICE_LIMIT (MCIERR_CUSTOM_DRIVER_BASE+0) #define MCIERR_DGV_IOERR (MCIERR_CUSTOM_DRIVER_BASE+1) #define MCIERR_DGV_WORKSPACE_EMPTY (MCIERR_CUSTOM_DRIVER_BASE+2) #define MCIERR_DGV_DISK_FULL (MCIERR_CUSTOM_DRIVER_BASE+3) #define MCIERR_DGV_DEVICE_MEMORY_FULL (MCIERR_CUSTOM_DRIVER_BASE+4) #define MCIERR_DGV_BAD_CLIPBOARD_RANGE (MCIERR_CUSTOM_DRIVER_BASE+5) /* defines for monitor methods */ #define MCI_DGV_METHOD_PRE __MSABI_LONG(0x0000a000) #define MCI_DGV_METHOD_POST __MSABI_LONG(0x0000a001) #define MCI_DGV_METHOD_DIRECT __MSABI_LONG(0x0000a002) /* defines for known file formats */ #define MCI_DGV_FF_AVSS __MSABI_LONG(0x00004000) #define MCI_DGV_FF_AVI __MSABI_LONG(0x00004001) #define MCI_DGV_FF_DIB __MSABI_LONG(0x00004002) #define MCI_DGV_FF_RDIB __MSABI_LONG(0x00004003) #define MCI_DGV_FF_JPEG __MSABI_LONG(0x00004004) #define MCI_DGV_FF_RJPEG __MSABI_LONG(0x00004005) #define MCI_DGV_FF_JFIF __MSABI_LONG(0x00004006) #define MCI_DGV_FF_MPEG __MSABI_LONG(0x00004007) /* values for dwItem field of MCI_CAPABILITY_PARMS structure */ #define MCI_DGV_GETDEVCAPS_CAN_LOCK __MSABI_LONG(0x00004000) #define MCI_DGV_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004001) #define MCI_DGV_GETDEVCAPS_CAN_FREEZE __MSABI_LONG(0x00004002) #define MCI_DGV_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004003) #define MCI_DGV_GETDEVCAPS_CAN_REVERSE __MSABI_LONG(0x00004004) #define MCI_DGV_GETDEVCAPS_HAS_STILL __MSABI_LONG(0x00004005) #define MCI_DGV_GETDEVCAPS_PALETTES __MSABI_LONG(0x00004006) #define MCI_DGV_GETDEVCAPS_CAN_STR_IN __MSABI_LONG(0x00004008) #define MCI_DGV_GETDEVCAPS_CAN_TEST __MSABI_LONG(0x00004009) #define MCI_DGV_GETDEVCAPS_MAXIMUM_RATE __MSABI_LONG(0x0000400a) #define MCI_DGV_GETDEVCAPS_MINIMUM_RATE __MSABI_LONG(0x0000400b) /* flags for dwFlags parameter of MCI_CAPTURE command message */ #define MCI_DGV_CAPTURE_AS __MSABI_LONG(0x00010000) #define MCI_DGV_CAPTURE_AT __MSABI_LONG(0x00020000) /* flags for dwFlags parameter of MCI_COPY command message */ #define MCI_DGV_COPY_AT __MSABI_LONG(0x00010000) #define MCI_DGV_COPY_AUDIO_STREAM __MSABI_LONG(0x00020000) #define MCI_DGV_COPY_VIDEO_STREAM __MSABI_LONG(0x00040000) /* flags for dwFlags parameter of MCI_CUE command message */ #define MCI_DGV_CUE_INPUT __MSABI_LONG(0x00010000) #define MCI_DGV_CUE_OUTPUT __MSABI_LONG(0x00020000) #define MCI_DGV_CUE_NOSHOW __MSABI_LONG(0x00040000) /* flags for dwFlags parameter of MCI_CUT command message */ #define MCI_DGV_CUT_AT __MSABI_LONG(0x00010000) #define MCI_DGV_CUT_AUDIO_STREAM __MSABI_LONG(0x00020000) #define MCI_DGV_CUT_VIDEO_STREAM __MSABI_LONG(0x00040000) /* flags for dwFlags parameter of MCI_DELETE command message */ #define MCI_DGV_DELETE_AT __MSABI_LONG(0x00010000) #define MCI_DGV_DELETE_AUDIO_STREAM __MSABI_LONG(0x00020000) #define MCI_DGV_DELETE_VIDEO_STREAM __MSABI_LONG(0x00040000) /* flags for dwFlags parameter of MCI_FREEZE command message */ #define MCI_DGV_FREEZE_AT __MSABI_LONG(0x00010000) #define MCI_DGV_FREEZE_OUTSIDE __MSABI_LONG(0x00020000) /* flags for dwFlags parameter of MCI_INFO command message */ #define MCI_DGV_INFO_TEXT __MSABI_LONG(0x00010000) #define MCI_DGV_INFO_ITEM __MSABI_LONG(0x00020000) /* values for dwItem field of MCI_DGV_INFO_PARMS structure */ #define MCI_INFO_VERSION __MSABI_LONG(0x00000400) #define MCI_DGV_INFO_USAGE __MSABI_LONG(0x00004000) #define MCI_DGV_INFO_AUDIO_QUALITY __MSABI_LONG(0x00004001) #define MCI_DGV_INFO_STILL_QUALITY __MSABI_LONG(0x00004002) #define MCI_DGV_INFO_VIDEO_QUALITY __MSABI_LONG(0x00004003) #define MCI_DGV_INFO_AUDIO_ALG __MSABI_LONG(0x00004004) #define MCI_DGV_INFO_STILL_ALG __MSABI_LONG(0x00004005) #define MCI_DGV_INFO_VIDEO_ALG __MSABI_LONG(0x00004006) /* flags for dwFlags parameter of MCI_LIST command message */ #define MCI_DGV_LIST_ITEM __MSABI_LONG(0x00010000) #define MCI_DGV_LIST_COUNT __MSABI_LONG(0x00020000) #define MCI_DGV_LIST_NUMBER __MSABI_LONG(0x00040000) #define MCI_DGV_LIST_ALG __MSABI_LONG(0x00080000) /* values for dwItem field of MCI_DGV_LIST_PARMS structure */ #define MCI_DGV_LIST_AUDIO_ALG __MSABI_LONG(0x00004000) #define MCI_DGV_LIST_AUDIO_QUALITY __MSABI_LONG(0x00004001) #define MCI_DGV_LIST_AUDIO_STREAM __MSABI_LONG(0x00004002) #define MCI_DGV_LIST_STILL_ALG __MSABI_LONG(0x00004003) #define MCI_DGV_LIST_STILL_QUALITY __MSABI_LONG(0x00004004) #define MCI_DGV_LIST_VIDEO_ALG __MSABI_LONG(0x00004005) #define MCI_DGV_LIST_VIDEO_QUALITY __MSABI_LONG(0x00004006) #define MCI_DGV_LIST_VIDEO_STREAM __MSABI_LONG(0x00004007) #define MCI_DGV_LIST_VIDEO_SOURCE __MSABI_LONG(0x00004008) /* flags for dwFlags parameter of MCI_MONITOR command message */ #define MCI_DGV_MONITOR_METHOD __MSABI_LONG(0x00010000) #define MCI_DGV_MONITOR_SOURCE __MSABI_LONG(0x00020000) /* values for dwSource parameter of the MCI_DGV_MONITOR_PARMS structure */ #define MCI_DGV_MONITOR_INPUT __MSABI_LONG(0x00004000) #define MCI_DGV_MONITOR_FILE __MSABI_LONG(0x00004001) /* flags for dwFlags parameter of MCI_OPEN command message */ #define MCI_DGV_OPEN_WS __MSABI_LONG(0x00010000) #define MCI_DGV_OPEN_PARENT __MSABI_LONG(0x00020000) #define MCI_DGV_OPEN_NOSTATIC __MSABI_LONG(0x00040000) #define MCI_DGV_OPEN_16BIT __MSABI_LONG(0x00080000) #define MCI_DGV_OPEN_32BIT __MSABI_LONG(0x00100000) /* flags for dwFlags parameter of MCI_PASTE command message */ #define MCI_DGV_PASTE_AT __MSABI_LONG(0x00010000) #define MCI_DGV_PASTE_AUDIO_STREAM __MSABI_LONG(0x00020000) #define MCI_DGV_PASTE_VIDEO_STREAM __MSABI_LONG(0x00040000) #define MCI_DGV_PASTE_INSERT __MSABI_LONG(0x00080000) #define MCI_DGV_PASTE_OVERWRITE __MSABI_LONG(0x00100000) /* flags for dwFlags parameter of MCI_PLAY command message */ #define MCI_DGV_PLAY_REPEAT __MSABI_LONG(0x00010000) #define MCI_DGV_PLAY_REVERSE __MSABI_LONG(0x00020000) /* flags for dwFlags parameter of MCI_PUT command message */ #define MCI_DGV_RECT __MSABI_LONG(0x00010000) #define MCI_DGV_PUT_SOURCE __MSABI_LONG(0x00020000) #define MCI_DGV_PUT_DESTINATION __MSABI_LONG(0x00040000) #define MCI_DGV_PUT_FRAME __MSABI_LONG(0x00080000) #define MCI_DGV_PUT_VIDEO __MSABI_LONG(0x00100000) #define MCI_DGV_PUT_WINDOW __MSABI_LONG(0x00200000) #define MCI_DGV_PUT_CLIENT __MSABI_LONG(0x00400000) /* flags for dwFlags parameter of MCI_QUALITY command message */ #define MCI_QUALITY_ITEM __MSABI_LONG(0x00010000) #define MCI_QUALITY_NAME __MSABI_LONG(0x00020000) #define MCI_QUALITY_ALG __MSABI_LONG(0x00040000) #define MCI_QUALITY_DIALOG __MSABI_LONG(0x00080000) #define MCI_QUALITY_HANDLE __MSABI_LONG(0x00100000) /* values for dwItem field of MCI_QUALITY_PARMS structure */ #define MCI_QUALITY_ITEM_AUDIO __MSABI_LONG(0x00004000) #define MCI_QUALITY_ITEM_STILL __MSABI_LONG(0x00004001) #define MCI_QUALITY_ITEM_VIDEO __MSABI_LONG(0x00004002) /* flags for dwFlags parameter of MCI_REALIZE command message */ #define MCI_DGV_REALIZE_NORM __MSABI_LONG(0x00010000) #define MCI_DGV_REALIZE_BKGD __MSABI_LONG(0x00020000) /* flags for dwFlags parameter of MCI_RECORD command message */ #define MCI_DGV_RECORD_HOLD __MSABI_LONG(0x00020000) #define MCI_DGV_RECORD_AUDIO_STREAM __MSABI_LONG(0x00040000) #define MCI_DGV_RECORD_VIDEO_STREAM __MSABI_LONG(0x00080000) /* flags for dwFlags parameters of MCI_RESERVE command message */ #define MCI_DGV_RESERVE_IN __MSABI_LONG(0x00010000) #define MCI_DGV_RESERVE_SIZE __MSABI_LONG(0x00020000) /* flags for dwFlags parameter of MCI_RESTORE command message */ #define MCI_DGV_RESTORE_FROM __MSABI_LONG(0x00010000) #define MCI_DGV_RESTORE_AT __MSABI_LONG(0x00020000) /* flags for dwFlags parameters of MCI_SAVE command message */ #define MCI_DGV_SAVE_ABORT __MSABI_LONG(0x00020000) #define MCI_DGV_SAVE_KEEPRESERVE __MSABI_LONG(0x00040000) /* flags for dwFlags parameters of MCI_SET command message */ #define MCI_DGV_SET_SEEK_EXACTLY __MSABI_LONG(0x00010000) #define MCI_DGV_SET_SPEED __MSABI_LONG(0x00020000) #define MCI_DGV_SET_STILL __MSABI_LONG(0x00040000) #define MCI_DGV_SET_FILEFORMAT __MSABI_LONG(0x00080000) /* flags for the dwFlags parameter of MCI_SETAUDIO command message */ #define MCI_DGV_SETAUDIO_OVER __MSABI_LONG(0x00010000) #define MCI_DGV_SETAUDIO_CLOCKTIME __MSABI_LONG(0x00020000) #define MCI_DGV_SETAUDIO_ALG __MSABI_LONG(0x00040000) #define MCI_DGV_SETAUDIO_QUALITY __MSABI_LONG(0x00080000) #define MCI_DGV_SETAUDIO_RECORD __MSABI_LONG(0x00100000) #define MCI_DGV_SETAUDIO_LEFT __MSABI_LONG(0x00200000) #define MCI_DGV_SETAUDIO_RIGHT __MSABI_LONG(0x00400000) #define MCI_DGV_SETAUDIO_ITEM __MSABI_LONG(0x00800000) #define MCI_DGV_SETAUDIO_VALUE __MSABI_LONG(0x01000000) #define MCI_DGV_SETAUDIO_INPUT __MSABI_LONG(0x02000000) #define MCI_DGV_SETAUDIO_OUTPUT __MSABI_LONG(0x04000000) /* values for the dwItem parameter of MCI_DGV_SETAUDIO_PARMS */ #define MCI_DGV_SETAUDIO_TREBLE __MSABI_LONG(0x00004000) #define MCI_DGV_SETAUDIO_BASS __MSABI_LONG(0x00004001) #define MCI_DGV_SETAUDIO_VOLUME __MSABI_LONG(0x00004002) #define MCI_DGV_SETAUDIO_STREAM __MSABI_LONG(0x00004003) #define MCI_DGV_SETAUDIO_SOURCE __MSABI_LONG(0x00004004) #define MCI_DGV_SETAUDIO_SAMPLESPERSEC __MSABI_LONG(0x00004005) #define MCI_DGV_SETAUDIO_AVGBYTESPERSEC __MSABI_LONG(0x00004006) #define MCI_DGV_SETAUDIO_BLOCKALIGN __MSABI_LONG(0x00004007) #define MCI_DGV_SETAUDIO_BITSPERSAMPLE __MSABI_LONG(0x00004008) /* values for the dwValue parameter of MCI_DGV_SETAUDIO_PARMS used with MCI_DGV_SETAUDIO_SOURCE */ #define MCI_DGV_SETAUDIO_SOURCE_STEREO __MSABI_LONG(0x00000000) #define MCI_DGV_SETAUDIO_SOURCE_LEFT __MSABI_LONG(0x00000001) #define MCI_DGV_SETAUDIO_SOURCE_RIGHT __MSABI_LONG(0x00000002) #define MCI_DGV_SETAUDIO_SOURCE_AVERAGE __MSABI_LONG(0x00004000) /* flags for the dwFlags parameter of MCI_SETVIDEO command */ #define MCI_DGV_SETVIDEO_QUALITY __MSABI_LONG(0x00010000) #define MCI_DGV_SETVIDEO_ALG __MSABI_LONG(0x00020000) #define MCI_DGV_SETVIDEO_CLOCKTIME __MSABI_LONG(0x00040000) #define MCI_DGV_SETVIDEO_SRC_NUMBER __MSABI_LONG(0x00080000) #define MCI_DGV_SETVIDEO_ITEM __MSABI_LONG(0x00100000) #define MCI_DGV_SETVIDEO_OVER __MSABI_LONG(0x00200000) #define MCI_DGV_SETVIDEO_RECORD __MSABI_LONG(0x00400000) #define MCI_DGV_SETVIDEO_STILL __MSABI_LONG(0x00800000) #define MCI_DGV_SETVIDEO_VALUE __MSABI_LONG(0x01000000) #define MCI_DGV_SETVIDEO_INPUT __MSABI_LONG(0x02000000) #define MCI_DGV_SETVIDEO_OUTPUT __MSABI_LONG(0x04000000) /* values for the dwTo field of MCI_SETVIDEO_PARMS used with MCI_DGV_SETVIDEO_SOURCE */ #define MCI_DGV_SETVIDEO_SRC_NTSC __MSABI_LONG(0x00004000) #define MCI_DGV_SETVIDEO_SRC_RGB __MSABI_LONG(0x00004001) #define MCI_DGV_SETVIDEO_SRC_SVIDEO __MSABI_LONG(0x00004002) #define MCI_DGV_SETVIDEO_SRC_PAL __MSABI_LONG(0x00004003) #define MCI_DGV_SETVIDEO_SRC_SECAM __MSABI_LONG(0x00004004) #define MCI_DGV_SETVIDEO_SRC_GENERIC __MSABI_LONG(0x00004005) /* values for the dwItem field of MCI_SETVIDEO_PARMS */ #define MCI_DGV_SETVIDEO_BRIGHTNESS __MSABI_LONG(0x00004000) #define MCI_DGV_SETVIDEO_COLOR __MSABI_LONG(0x00004001) #define MCI_DGV_SETVIDEO_CONTRAST __MSABI_LONG(0x00004002) #define MCI_DGV_SETVIDEO_TINT __MSABI_LONG(0x00004003) #define MCI_DGV_SETVIDEO_SHARPNESS __MSABI_LONG(0x00004004) #define MCI_DGV_SETVIDEO_GAMMA __MSABI_LONG(0x00004005) #define MCI_DGV_SETVIDEO_STREAM __MSABI_LONG(0x00004006) #define MCI_DGV_SETVIDEO_PALHANDLE __MSABI_LONG(0x00004007) #define MCI_DGV_SETVIDEO_FRAME_RATE __MSABI_LONG(0x00004008) #define MCI_DGV_SETVIDEO_SOURCE __MSABI_LONG(0x00004009) #define MCI_DGV_SETVIDEO_KEY_INDEX __MSABI_LONG(0x0000400a) #define MCI_DGV_SETVIDEO_KEY_COLOR __MSABI_LONG(0x0000400b) #define MCI_DGV_SETVIDEO_BITSPERPEL __MSABI_LONG(0x0000400c) /* flags for the dwFlags parameter of MCI_SIGNAL */ #define MCI_DGV_SIGNAL_AT __MSABI_LONG(0x00010000) #define MCI_DGV_SIGNAL_EVERY __MSABI_LONG(0x00020000) #define MCI_DGV_SIGNAL_USERVAL __MSABI_LONG(0x00040000) #define MCI_DGV_SIGNAL_CANCEL __MSABI_LONG(0x00080000) #define MCI_DGV_SIGNAL_POSITION __MSABI_LONG(0x00100000) /* flags for the dwFlags parameter of MCI_STATUS command */ #define MCI_DGV_STATUS_NOMINAL __MSABI_LONG(0x00020000) #define MCI_DGV_STATUS_REFERENCE __MSABI_LONG(0x00040000) #define MCI_DGV_STATUS_LEFT __MSABI_LONG(0x00080000) #define MCI_DGV_STATUS_RIGHT __MSABI_LONG(0x00100000) #define MCI_DGV_STATUS_DISKSPACE __MSABI_LONG(0x00200000) #define MCI_DGV_STATUS_INPUT __MSABI_LONG(0x00400000) #define MCI_DGV_STATUS_OUTPUT __MSABI_LONG(0x00800000) #define MCI_DGV_STATUS_RECORD __MSABI_LONG(0x01000000) /* values for dwItem field of MCI_STATUS_PARMS structure */ #define MCI_DGV_STATUS_AUDIO_INPUT __MSABI_LONG(0x00004000) #define MCI_DGV_STATUS_HWND __MSABI_LONG(0x00004001) #define MCI_DGV_STATUS_SPEED __MSABI_LONG(0x00004003) #define MCI_DGV_STATUS_HPAL __MSABI_LONG(0x00004004) #define MCI_DGV_STATUS_BRIGHTNESS __MSABI_LONG(0x00004005) #define MCI_DGV_STATUS_COLOR __MSABI_LONG(0x00004006) #define MCI_DGV_STATUS_CONTRAST __MSABI_LONG(0x00004007) #define MCI_DGV_STATUS_FILEFORMAT __MSABI_LONG(0x00004008) #define MCI_DGV_STATUS_AUDIO_SOURCE __MSABI_LONG(0x00004009) #define MCI_DGV_STATUS_GAMMA __MSABI_LONG(0x0000400a) #define MCI_DGV_STATUS_MONITOR __MSABI_LONG(0x0000400b) #define MCI_DGV_STATUS_MONITOR_METHOD __MSABI_LONG(0x0000400c) #define MCI_DGV_STATUS_FRAME_RATE __MSABI_LONG(0x0000400e) #define MCI_DGV_STATUS_BASS __MSABI_LONG(0x0000400f) #define MCI_DGV_STATUS_SIZE __MSABI_LONG(0x00004010) #define MCI_DGV_STATUS_SEEK_EXACTLY __MSABI_LONG(0x00004011) #define MCI_DGV_STATUS_SHARPNESS __MSABI_LONG(0x00004012) #define MCI_DGV_STATUS_SMPTE __MSABI_LONG(0x00004013) #define MCI_DGV_STATUS_AUDIO __MSABI_LONG(0x00004014) #define MCI_DGV_STATUS_TINT __MSABI_LONG(0x00004015) #define MCI_DGV_STATUS_TREBLE __MSABI_LONG(0x00004016) #define MCI_DGV_STATUS_UNSAVED __MSABI_LONG(0x00004017) #define MCI_DGV_STATUS_VIDEO __MSABI_LONG(0x00004018) #define MCI_DGV_STATUS_VOLUME __MSABI_LONG(0x00004019) #define MCI_DGV_STATUS_AUDIO_RECORD __MSABI_LONG(0x0000401a) #define MCI_DGV_STATUS_VIDEO_SOURCE __MSABI_LONG(0x0000401b) #define MCI_DGV_STATUS_VIDEO_RECORD __MSABI_LONG(0x0000401c) #define MCI_DGV_STATUS_STILL_FILEFORMAT __MSABI_LONG(0x0000401d) #define MCI_DGV_STATUS_VIDEO_SRC_NUM __MSABI_LONG(0x0000401e) #define MCI_DGV_STATUS_FILE_MODE __MSABI_LONG(0x0000401f) #define MCI_DGV_STATUS_FILE_COMPLETION __MSABI_LONG(0x00004020) #define MCI_DGV_STATUS_WINDOW_VISIBLE __MSABI_LONG(0x00004021) #define MCI_DGV_STATUS_WINDOW_MINIMIZED __MSABI_LONG(0x00004022) #define MCI_DGV_STATUS_WINDOW_MAXIMIZED __MSABI_LONG(0x00004023) #define MCI_DGV_STATUS_KEY_INDEX __MSABI_LONG(0x00004024) #define MCI_DGV_STATUS_KEY_COLOR __MSABI_LONG(0x00004025) #define MCI_DGV_STATUS_PAUSE_MODE __MSABI_LONG(0x00004026) #define MCI_DGV_STATUS_SAMPLESPERSEC __MSABI_LONG(0x00004027) #define MCI_DGV_STATUS_AVGBYTESPERSEC __MSABI_LONG(0x00004028) #define MCI_DGV_STATUS_BLOCKALIGN __MSABI_LONG(0x00004029) #define MCI_DGV_STATUS_BITSPERSAMPLE __MSABI_LONG(0x0000402a) #define MCI_DGV_STATUS_BITSPERPEL __MSABI_LONG(0x0000402b) #define MCI_DGV_STATUS_FORWARD __MSABI_LONG(0x0000402c) #define MCI_DGV_STATUS_AUDIO_STREAM __MSABI_LONG(0x0000402d) #define MCI_DGV_STATUS_VIDEO_STREAM __MSABI_LONG(0x0000402e) /* flags for dwFlags parameter of MCI_STEP command message */ #define MCI_DGV_STEP_REVERSE __MSABI_LONG(0x00010000) #define MCI_DGV_STEP_FRAMES __MSABI_LONG(0x00020000) /* flags for dwFlags parameter of MCI_STOP command message */ #define MCI_DGV_STOP_HOLD __MSABI_LONG(0x00010000) /* flags for dwFlags parameter of MCI_UPDATE command message */ #define MCI_DGV_UPDATE_HDC __MSABI_LONG(0x00020000) #define MCI_DGV_UPDATE_PAINT __MSABI_LONG(0x00040000) /* flags for dwFlags parameter of MCI_WHERE command message */ #define MCI_DGV_WHERE_SOURCE __MSABI_LONG(0x00020000) #define MCI_DGV_WHERE_DESTINATION __MSABI_LONG(0x00040000) #define MCI_DGV_WHERE_FRAME __MSABI_LONG(0x00080000) #define MCI_DGV_WHERE_VIDEO __MSABI_LONG(0x00100000) #define MCI_DGV_WHERE_WINDOW __MSABI_LONG(0x00200000) #define MCI_DGV_WHERE_MAX __MSABI_LONG(0x00400000) /* flags for dwFlags parameter of MCI_WINDOW command message */ #define MCI_DGV_WINDOW_HWND __MSABI_LONG(0x00010000) #define MCI_DGV_WINDOW_STATE __MSABI_LONG(0x00040000) #define MCI_DGV_WINDOW_TEXT __MSABI_LONG(0x00080000) /* flags for hWnd parameter of MCI_DGV_WINDOW_PARMS parameter block */ #define MCI_DGV_WINDOW_DEFAULT __MSABI_LONG(0x00000000) /* parameter block for MCI_WHERE, MCI_PUT, MCI_FREEZE, MCI_UNFREEZE cmds */ typedef struct { DWORD_PTR dwCallback; RECT rc; } MCI_DGV_RECT_PARMS, *LPMCI_DGV_RECT_PARMS; /* parameter block for MCI_CAPTURE command message */ typedef struct { DWORD_PTR dwCallback; LPSTR lpstrFileName; RECT rc; } MCI_DGV_CAPTURE_PARMSA, *LPMCI_DGV_CAPTURE_PARMSA; typedef struct { DWORD_PTR dwCallback; LPWSTR lpstrFileName; RECT rc; } MCI_DGV_CAPTURE_PARMSW, *LPMCI_DGV_CAPTURE_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_CAPTURE_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_CAPTURE_PARMS) /* parameter block for MCI_CLOSE command message */ typedef MCI_GENERIC_PARMS MCI_CLOSE_PARMS, *LPMCI_CLOSE_PARMS; /* parameter block for MCI_COPY command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; RECT rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_COPY_PARMS, *LPMCI_DGV_COPY_PARMS; /* parameter block for MCI_CUE command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwTo; } MCI_DGV_CUE_PARMS, *LPMCI_DGV_CUE_PARMS; /* parameter block for MCI_CUT command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; RECT rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_CUT_PARMS, * LPMCI_DGV_CUT_PARMS; /* parameter block for MCI_DELETE command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; RECT rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_DELETE_PARMS, * LPMCI_DGV_DELETE_PARMS; /* parameter block for MCI_FREEZE command message */ typedef MCI_DGV_RECT_PARMS MCI_DGV_FREEZE_PARMS, * LPMCI_DGV_FREEZE_PARMS; /* parameter block for MCI_INFO command message */ typedef struct { DWORD_PTR dwCallback; LPSTR lpstrReturn; DWORD dwRetSize; DWORD dwItem; } MCI_DGV_INFO_PARMSA, * LPMCI_DGV_INFO_PARMSA; typedef struct { DWORD_PTR dwCallback; LPWSTR lpstrReturn; DWORD dwRetSize; DWORD dwItem; } MCI_DGV_INFO_PARMSW, *LPMCI_DGV_INFO_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_INFO_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_INFO_PARMS) /* parameter block for MCI_LIST command message */ typedef struct { DWORD_PTR dwCallback; LPSTR lpstrReturn; DWORD dwLength; DWORD dwNumber; DWORD dwItem; LPSTR lpstrAlgorithm; } MCI_DGV_LIST_PARMSA, *LPMCI_DGV_LIST_PARMSA; typedef struct { DWORD_PTR dwCallback; LPWSTR lpstrReturn; DWORD dwLength; DWORD dwNumber; DWORD dwItem; LPWSTR lpstrAlgorithm; } MCI_DGV_LIST_PARMSW, *LPMCI_DGV_LIST_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_LIST_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_LIST_PARMS) /* parameter block for MCI_LOAD command message */ typedef MCI_LOAD_PARMSA MCI_DGV_LOAD_PARMSA, * LPMCI_DGV_LOAD_PARMSA; typedef MCI_LOAD_PARMSW MCI_DGV_LOAD_PARMSW, * LPMCI_DGV_LOAD_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_LOAD_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_LOAD_PARMS) /* parameter block for MCI_MONITOR command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwSource; DWORD dwMethod; } MCI_DGV_MONITOR_PARMS, * LPMCI_DGV_MONITOR_PARMS; /* parameter block for MCI_OPEN command message */ typedef struct { DWORD_PTR dwCallback; UINT wDeviceID; LPSTR lpstrDeviceType; LPSTR lpstrElementName; LPSTR lpstrAlias; DWORD dwStyle; HWND hWndParent; } MCI_DGV_OPEN_PARMSA, *LPMCI_DGV_OPEN_PARMSA; typedef struct { DWORD_PTR dwCallback; UINT wDeviceID; LPWSTR lpstrDeviceType; LPWSTR lpstrElementName; LPWSTR lpstrAlias; DWORD dwStyle; HWND hWndParent; } MCI_DGV_OPEN_PARMSW, *LPMCI_DGV_OPEN_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_OPEN_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_OPEN_PARMS) /* parameter block for MCI_PAUSE command message */ typedef MCI_GENERIC_PARMS MCI_DGV_PAUSE_PARMS, * LPMCI_DGV_PAUSE_PARMS; /* parameter block for MCI_PASTE command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwTo; RECT rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_PASTE_PARMS, * LPMCI_DGV_PASTE_PARMS; /* parameter block for MCI_PLAY command message */ typedef MCI_PLAY_PARMS MCI_DGV_PLAY_PARMS, * LPMCI_DGV_PLAY_PARMS; /* parameter block for MCI_PUT command message */ typedef MCI_DGV_RECT_PARMS MCI_DGV_PUT_PARMS, * LPMCI_DGV_PUT_PARMS; /* parameter block for MCI_QUALITY command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwItem; LPSTR lpstrName; DWORD lpstrAlgorithm; DWORD dwHandle; } MCI_DGV_QUALITY_PARMSA, *LPMCI_DGV_QUALITY_PARMSA; typedef struct { DWORD_PTR dwCallback; DWORD dwItem; LPWSTR lpstrName; DWORD lpstrAlgorithm; DWORD dwHandle; } MCI_DGV_QUALITY_PARMSW, *LPMCI_DGV_QUALITY_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_QUALITY_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_QUALITY_PARMS) /* parameter block for MCI_REALIZE command message */ typedef MCI_GENERIC_PARMS MCI_REALIZE_PARMS, * LPMCI_REALIZE_PARMS; /* parameter block for MCI_RECORD command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; RECT rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_RECORD_PARMS, * LPMCI_DGV_RECORD_PARMS; /* parameter block for MCI_RESERVE command message */ typedef struct { DWORD_PTR dwCallback; LPSTR lpstrPath; DWORD dwSize; } MCI_DGV_RESERVE_PARMSA, *LPMCI_DGV_RESERVE_PARMSA; typedef struct { DWORD_PTR dwCallback; LPWSTR lpstrPath; DWORD dwSize; } MCI_DGV_RESERVE_PARMSW, *LPMCI_DGV_RESERVE_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_RESERVE_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_RESERVE_PARMS) /* parameter block for MCI_RESTORE command message */ typedef struct { DWORD_PTR dwCallback; LPSTR lpstrFileName; RECT rc; } MCI_DGV_RESTORE_PARMSA, *LPMCI_DGV_RESTORE_PARMSA; typedef struct { DWORD_PTR dwCallback; LPWSTR lpstrFileName; RECT rc; } MCI_DGV_RESTORE_PARMSW, *LPMCI_DGV_RESTORE_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_RESTORE_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_RESTORE_PARMS) /* parameter block for MCI_RESUME command message */ typedef MCI_GENERIC_PARMS MCI_DGV_RESUME_PARMS, * LPMCI_DGV_RESUME_PARMS; /* parameter block for MCI_SAVE command message */ typedef struct { DWORD_PTR dwCallback; LPSTR lpstrFileName; RECT rc; } MCI_DGV_SAVE_PARMSA, *LPMCI_DGV_SAVE_PARMSA; typedef struct { DWORD_PTR dwCallback; LPWSTR lpstrFileName; RECT rc; } MCI_DGV_SAVE_PARMSW, *LPMCI_DGV_SAVE_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_SAVE_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_SAVE_PARMS) /* parameter block for MCI_SET command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwTimeFormat; DWORD dwAudio; DWORD dwFileFormat; DWORD dwSpeed; } MCI_DGV_SET_PARMS, *LPMCI_DGV_SET_PARMS; /* parameter block for MCI_SETAUDIO command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwItem; DWORD dwValue; DWORD dwOver; LPSTR lpstrAlgorithm; LPSTR lpstrQuality; } MCI_DGV_SETAUDIO_PARMSA, *LPMCI_DGV_SETAUDIO_PARMSA; typedef struct { DWORD_PTR dwCallback; DWORD dwItem; DWORD dwValue; DWORD dwOver; LPWSTR lpstrAlgorithm; LPWSTR lpstrQuality; } MCI_DGV_SETAUDIO_PARMSW, *LPMCI_DGV_SETAUDIO_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_SETAUDIO_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_SETAUDIO_PARMS) /* parameter block for MCI_SIGNAL command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwPosition; DWORD dwPeriod; DWORD dwUserParm; } MCI_DGV_SIGNAL_PARMS, * LPMCI_DGV_SIGNAL_PARMS; /* parameter block for MCI_SETVIDEO command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwItem; DWORD dwValue; DWORD dwOver; LPSTR lpstrAlgorithm; LPSTR lpstrQuality; DWORD dwSourceNumber; } MCI_DGV_SETVIDEO_PARMSA, *LPMCI_DGV_SETVIDEO_PARMSA; typedef struct { DWORD_PTR dwCallback; DWORD dwItem; DWORD dwValue; DWORD dwOver; LPWSTR lpstrAlgorithm; LPWSTR lpstrQuality; DWORD dwSourceNumber; } MCI_DGV_SETVIDEO_PARMSW, *LPMCI_DGV_SETVIDEO_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_SETVIDEO_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_SETVIDEO_PARMS) /* parameter block for MCI_STATUS command message */ typedef struct { DWORD_PTR dwCallback; DWORD_PTR dwReturn; DWORD dwItem; DWORD dwTrack; LPSTR lpstrDrive; DWORD dwReference; } MCI_DGV_STATUS_PARMSA, *LPMCI_DGV_STATUS_PARMSA; typedef struct { DWORD_PTR dwCallback; DWORD_PTR dwReturn; DWORD dwItem; DWORD dwTrack; LPWSTR lpstrDrive; DWORD dwReference; } MCI_DGV_STATUS_PARMSW, *LPMCI_DGV_STATUS_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_STATUS_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_DGV_STATUS_PARMS) /* parameter block for MCI_STEP command message */ typedef struct { DWORD_PTR dwCallback; DWORD dwFrames; } MCI_DGV_STEP_PARMS, *LPMCI_DGV_STEP_PARMS; /* parameter block for MCI_STOP command message */ typedef MCI_GENERIC_PARMS MCI_DGV_STOP_PARMS, * LPMCI_DGV_STOP_PARMS; /* parameter block for MCI_UNFREEZE command message */ typedef MCI_DGV_RECT_PARMS MCI_DGV_UNFREEZE_PARMS, * LPMCI_DGV_UNFREEZE_PARMS; /* parameter block for MCI_UPDATE command message */ typedef struct { DWORD_PTR dwCallback; RECT rc; HDC hDC; } MCI_DGV_UPDATE_PARMS, * LPMCI_DGV_UPDATE_PARMS; /* parameter block for MCI_WHERE command message */ typedef MCI_DGV_RECT_PARMS MCI_DGV_WHERE_PARMS, * LPMCI_DGV_WHERE_PARMS; /* parameter block for MCI_WINDOW command message */ typedef struct { DWORD_PTR dwCallback; HWND hWnd; UINT nCmdShow; LPSTR lpstrText; } MCI_DGV_WINDOW_PARMSA, *LPMCI_DGV_WINDOW_PARMSA; typedef struct { DWORD_PTR dwCallback; HWND hWnd; UINT nCmdShow; LPWSTR lpstrText; } MCI_DGV_WINDOW_PARMSW, *LPMCI_DGV_WINDOW_PARMSW; DECL_WINELIB_TYPE_AW(MCI_DGV_WINDOW_PARMS) #ifdef __cplusplus } #endif #include #endif /* __WINE_DIGITALV_H */ ================================================ FILE: wine/windows/dimm.idl ================================================ /* * Copyright 2007 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; #endif cpp_quote("#include ") cpp_quote("#if 0") typedef struct { LPSTR lpReading; LPSTR lpWord; } REGISTERWORDA; typedef struct { LPWSTR lpReading; LPWSTR lpWord; } REGISTERWORDW; #define LF_FACESIZE 32 typedef struct { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; CHAR lfFaceName[LF_FACESIZE]; } LOGFONTA; typedef struct { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; WCHAR lfFaceName[LF_FACESIZE]; } LOGFONTW; typedef DWORD HIMC; typedef DWORD HIMCC; typedef struct { DWORD dwIndex; DWORD dwStyle; POINT ptCurrentPos; RECT rcArea; } CANDIDATEFORM; typedef struct { DWORD dwStyle; POINT ptCurrentPos; RECT rcArea; } COMPOSITIONFORM; typedef struct { DWORD dwSize; DWORD dwStyle; DWORD dwCount; DWORD dwSelection; DWORD dwPageStart; DWORD dwPageSize; DWORD dwOffset[1]; } CANDIDATELIST; #define STYLE_DESCRIPTION_SIZE 32 typedef struct { DWORD dwStyle; CHAR szDescription[STYLE_DESCRIPTION_SIZE]; } STYLEBUFA; typedef struct { DWORD dwStyle; WCHAR szDescription[STYLE_DESCRIPTION_SIZE]; } STYLEBUFW; typedef WORD ATOM; #define IMEMENUITEM_STRING_SIZE 80 typedef struct { UINT cbSize; UINT fType; UINT fState; UINT wID; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; DWORD dwItemData; CHAR szString[IMEMENUITEM_STRING_SIZE]; HBITMAP hbmpItem; } IMEMENUITEMINFOA; typedef struct { UINT cbSize; UINT fType; UINT fState; UINT wID; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; DWORD dwItemData; WCHAR szString[IMEMENUITEM_STRING_SIZE]; HBITMAP hbmpItem; } IMEMENUITEMINFOW; cpp_quote("#endif") [ object, uuid(08c03412-f96b-11d0-a475-00aa006bcc59), pointer_default(unique) ] interface IEnumRegisterWordA : IUnknown { HRESULT Clone( [out] IEnumRegisterWordA **ppEnum); HRESULT Next( [in] ULONG ulCount, [out] REGISTERWORDA *rgRegisterword, [out] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG ulCount); } [ object, uuid(4955dd31-b159-11d0-8fcf-00aa006bcc59), pointer_default(unique) ] interface IEnumRegisterWordW : IUnknown { HRESULT Clone( [out] IEnumRegisterWordW **ppEnum); HRESULT Next( [in] ULONG ulCount, [out] REGISTERWORDW *rgRegisterword, [out] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG ulCount); } [ object, uuid(09b5eab0-f997-11d1-93d4-0060b067b86e), pointer_default(unique), local ] interface IEnumInputContext : IUnknown { HRESULT Clone( [out] IEnumInputContext **ppEnum); HRESULT Next( [in] ULONG ulCount, [out] HIMC *rgInputContext, [out] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG ulCount); } [ object, uuid(08c0e040-62d1-11d1-9326-0060b067b86e), pointer_default(unique), local ] interface IActiveIMMApp : IUnknown { HRESULT AssociateContext( [in] HWND hWnd, [in] HIMC hIME, [out] HIMC *phPrev); HRESULT ConfigureIMEA( [in] HKL hKL, [in] HWND hwnd, [in] DWORD dwMode, [in] REGISTERWORDA *pData); HRESULT ConfigureIMEW( [in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDW *pData); HRESULT CreateContext( [out] HIMC *phIMC); HRESULT DestroyContext( [in] HIMC hIME); HRESULT EnumRegisterWordA( [in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordA **pEnum); HRESULT EnumRegisterWordW( [in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordW **pEnum); HRESULT EscapeA( [in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult); HRESULT EscapeW( [in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult); HRESULT GetCandidateListA( [in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied); HRESULT GetCandidateListW( [in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied); HRESULT GetCandidateListCountA( [in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen); HRESULT GetCandidateListCountW( [in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen); HRESULT GetCandidateWindow( [in] HIMC hIMC, [in] DWORD dwIndex, [out] CANDIDATEFORM *pCandidate); HRESULT GetCompositionFontA( [in] HIMC hIMC, [out] LOGFONTA *plf); HRESULT GetCompositionFontW( [in] HIMC hIMC, [out] LOGFONTW *plf); HRESULT GetCompositionStringA( [in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf); HRESULT GetCompositionStringW( [in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf); HRESULT GetCompositionWindow( [in] HIMC hIMC, [out] COMPOSITIONFORM *pCompForm); HRESULT GetContext( [in] HWND hwnd, [out] HIMC *phIMC); HRESULT GetConversionListA( [in] HKL hKL, [in] HIMC hIMC, [in] LPSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied); HRESULT GetConversionListW( [in] HKL hKL, [in] HIMC hIMC, [in] LPWSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied); HRESULT GetConversionStatus( [in] HIMC hIMC, [out] DWORD *pfdwConversion, [out] DWORD *pfdwSentence); HRESULT GetDefaultIMEWnd( [in] HWND hWnd, [out] HWND *phDefWnd); HRESULT GetDescriptionA( [in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szDescription, [out] UINT *puCopied); HRESULT GetDescriptionW( [in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szDescription, [out] UINT *puCopied); HRESULT GetGuideLineA( [in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPSTR pBuf, [out] DWORD *pdwResult); HRESULT GetGuideLineW( [in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPWSTR pBuf, [out] DWORD *pdwResult); HRESULT GetIMEFileNameA( [in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szFileName, [out] UINT *puCopied); HRESULT GetIMEFileNameW( [in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szFileName, [out] UINT *puCopied); HRESULT GetOpenStatus( [in] HIMC hIMC); HRESULT GetProperty( [in] HKL hKL, [in] DWORD fdwIndex, [out] DWORD *pdwProperty); HRESULT GetRegisterWordStyleA( [in] HKL hKL, [in] UINT nItem, [out] STYLEBUFA *pStyleBuf, [out] UINT *puCopied); HRESULT GetRegisterWordStyleW( [in] HKL hKL, [in] UINT nItem, [out] STYLEBUFW *pStyleBuf, [out] UINT *puCopied); HRESULT GetStatusWindowPos( [in] HIMC hIMC, [out] POINT *pptPos); HRESULT GetVirtualKey( [in] HWND hWnd, [out] UINT *puVirtualKey); HRESULT InstallIMEA( [in] LPSTR szIMEFileName, [in] LPSTR szLayoutText, [out] HKL *phKL); HRESULT InstallIMEW( [in] LPWSTR szIMEFileName, [in] LPWSTR szLayoutText, [out] HKL *phKL); HRESULT IsIME( [in] HKL hKL); HRESULT IsUIMessageA( [in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam); HRESULT IsUIMessageW( [in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam); HRESULT NotifyIME( [in] HIMC hIMC, [in] DWORD dwAction, [in] DWORD dwIndex, [in] DWORD dwValue); HRESULT RegisterWordA( [in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister); HRESULT RegisterWordW( [in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister); HRESULT ReleaseContext( [in] HWND hWnd, [in] HIMC hIMC); HRESULT SetCandidateWindow( [in] HIMC hIMC, [in] CANDIDATEFORM *pCandidate); HRESULT SetCompositionFontA( [in] HIMC hIMC, [in] LOGFONTA *plf); HRESULT SetCompositionFontW( [in] HIMC hIMC, [in] LOGFONTW *plf); HRESULT SetCompositionStringA( [in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen); HRESULT SetCompositionStringW( [in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen); HRESULT SetCompositionWindow( [in] HIMC hIMC, [in] COMPOSITIONFORM *pCompForm); HRESULT SetConversionStatus( [in] HIMC hIMC, [in] DWORD fdwConversion, [in] DWORD fdwSentence); HRESULT SetOpenStatus( [in] HIMC hIMC, [in] BOOL fOpen); HRESULT SetStatusWindowPos( [in] HIMC hIMC, [in] POINT *pptPos); HRESULT SimulateHotKey( [in] HWND hwnd, [in] DWORD dwHotKeyID); HRESULT UnregisterWordA( [in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szUnregister); HRESULT UnregisterWordW( [in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szUnregister); HRESULT Activate( [in] BOOL fRestoreLayout); HRESULT Deactivate(); HRESULT OnDefWindowProc( [in] HWND hWnd, [in] UINT Msg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult); HRESULT FilterClientWindows( [in] ATOM *aaClassList, [in] UINT uSize); HRESULT GetCodePageA( [in] HKL hKL, [out] UINT *uCodePage); HRESULT GetLangId( [in] HKL hKL, [out] LANGID *plid); HRESULT AssociateContextEx( [in] HWND hWnd, [in] HIMC hIMC, [in] DWORD dwFlags); HRESULT DisableIME( [in] DWORD idThread); HRESULT GetImeMenuItemsA( [in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOA *pImeParentMenu, [out] IMEMENUITEMINFOA *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult); HRESULT GetImeMenuItemsW( [in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOW *pImeParentMenu, [out] IMEMENUITEMINFOW *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult); HRESULT EnumInputContext( [in] DWORD idThread, [out] IEnumInputContext **ppEnum); } [ object, uuid(b5cf2cfa-8aeb-11d1-9364-0060b067b86e), pointer_default(unique) ] interface IActiveIMMMessagePumpOwner : IUnknown { HRESULT Start(); HRESULT End(); HRESULT OnTranslateMessage([in] const MSG *msg); HRESULT Pause([out] DWORD *cookie); HRESULT Resume([in] DWORD cookie); } [ uuid(4955dd33-b159-11d0-8fcf-00aa006bcc59) ] coclass CActiveIMM { [default] interface IActiveIMMApp; /* interface IActiveIMMIME; */ /* interface IActiveIMMRegistrar; */ interface IActiveIMMMessagePumpOwner; } ================================================ FILE: wine/windows/dinput.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DINPUT_INCLUDED__ #define __DINPUT_INCLUDED__ #define COM_NO_WINDOWS_H #include #ifndef DIRECTINPUT_VERSION #define DIRECTINPUT_VERSION 0x0800 #endif /* Classes */ DEFINE_GUID(CLSID_DirectInput, 0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInputDevice, 0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInput8, 0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInputDevice8, 0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); /* Interfaces */ DEFINE_GUID(IID_IDirectInputA, 0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputW, 0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput2A, 0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput2W, 0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput7A, 0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInput7W, 0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInput8A, 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); DEFINE_GUID(IID_IDirectInput8W, 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice2A, 0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice2W, 0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice7A, 0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInputDevice7W, 0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInputDevice8A, 0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); DEFINE_GUID(IID_IDirectInputDevice8W, 0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); DEFINE_GUID(IID_IDirectInputEffect, 0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); /* Predefined object types */ DEFINE_GUID(GUID_XAxis, 0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_YAxis, 0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_ZAxis, 0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RxAxis,0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RyAxis,0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RzAxis,0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Slider,0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Button,0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Key, 0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_POV, 0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Unknown,0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); /* Predefined product GUIDs */ DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysKeyboard, 0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Joystick, 0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysMouseEm2, 0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); /* predefined forcefeedback effects */ DEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_RampForce, 0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Square, 0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Sine, 0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Triangle, 0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_SawtoothUp, 0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_SawtoothDown, 0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Spring, 0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Damper, 0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Inertia, 0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Friction, 0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_CustomForce, 0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); typedef struct IDirectInputA *LPDIRECTINPUTA; typedef struct IDirectInputW *LPDIRECTINPUTW; typedef struct IDirectInput2A *LPDIRECTINPUT2A; typedef struct IDirectInput2W *LPDIRECTINPUT2W; typedef struct IDirectInput7A *LPDIRECTINPUT7A; typedef struct IDirectInput7W *LPDIRECTINPUT7W; typedef struct IDirectInput8A *LPDIRECTINPUT8A; typedef struct IDirectInput8W *LPDIRECTINPUT8W; typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA; typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW; typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A; typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W; typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A; typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W; typedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A; typedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W; typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT; typedef struct SysKeyboardA *LPSYSKEYBOARDA; typedef struct SysMouseA *LPSYSMOUSEA; #define IID_IDirectInput WINELIB_NAME_AW(IID_IDirectInput) DECL_WINELIB_TYPE_AW(LPDIRECTINPUT) #define IID_IDirectInput2 WINELIB_NAME_AW(IID_IDirectInput2) DECL_WINELIB_TYPE_AW(LPDIRECTINPUT2) #define IID_IDirectInput7 WINELIB_NAME_AW(IID_IDirectInput7) DECL_WINELIB_TYPE_AW(LPDIRECTINPUT7) #define IID_IDirectInput8 WINELIB_NAME_AW(IID_IDirectInput8) DECL_WINELIB_TYPE_AW(LPDIRECTINPUT8) #define IID_IDirectInputDevice WINELIB_NAME_AW(IID_IDirectInputDevice) DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE) #define IID_IDirectInputDevice2 WINELIB_NAME_AW(IID_IDirectInputDevice2) DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE2) #define IID_IDirectInputDevice7 WINELIB_NAME_AW(IID_IDirectInputDevice7) DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE7) #define IID_IDirectInputDevice8 WINELIB_NAME_AW(IID_IDirectInputDevice8) DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE8) #define DI_OK S_OK #define DI_NOTATTACHED S_FALSE #define DI_BUFFEROVERFLOW S_FALSE #define DI_PROPNOEFFECT S_FALSE #define DI_NOEFFECT S_FALSE #define DI_POLLEDDEVICE ((HRESULT)0x00000002) #define DI_DOWNLOADSKIPPED ((HRESULT)0x00000003) #define DI_EFFECTRESTARTED ((HRESULT)0x00000004) #define DI_TRUNCATED ((HRESULT)0x00000008) #define DI_SETTINGSNOTSAVED ((HRESULT)0x0000000B) #define DI_TRUNCATEDANDRESTARTED ((HRESULT)0x0000000C) #define DI_WRITEPROTECT ((HRESULT)0x00000013) #define DIERR_OLDDIRECTINPUTVERSION \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION) #define DIERR_BETADIRECTINPUTVERSION \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP) #define DIERR_BADDRIVERVER \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL) #define DIERR_DEVICENOTREG REGDB_E_CLASSNOTREG #define DIERR_NOTFOUND \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) #define DIERR_OBJECTNOTFOUND \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) #define DIERR_INVALIDPARAM E_INVALIDARG #define DIERR_NOINTERFACE E_NOINTERFACE #define DIERR_GENERIC E_FAIL #define DIERR_OUTOFMEMORY E_OUTOFMEMORY #define DIERR_UNSUPPORTED E_NOTIMPL #define DIERR_NOTINITIALIZED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY) #define DIERR_ALREADYINITIALIZED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED) #define DIERR_NOAGGREGATION CLASS_E_NOAGGREGATION #define DIERR_OTHERAPPHASPRIO E_ACCESSDENIED #define DIERR_INPUTLOST \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT) #define DIERR_ACQUIRED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY) #define DIERR_NOTACQUIRED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS) #define DIERR_READONLY E_ACCESSDENIED #define DIERR_HANDLEEXISTS E_ACCESSDENIED #ifndef E_PENDING #define E_PENDING __MSABI_LONG(0x8000000A) #endif #define DIERR_INSUFFICIENTPRIVS __MSABI_LONG(0x80040200) #define DIERR_DEVICEFULL __MSABI_LONG(0x80040201) #define DIERR_MOREDATA __MSABI_LONG(0x80040202) #define DIERR_NOTDOWNLOADED __MSABI_LONG(0x80040203) #define DIERR_HASEFFECTS __MSABI_LONG(0x80040204) #define DIERR_NOTEXCLUSIVEACQUIRED __MSABI_LONG(0x80040205) #define DIERR_INCOMPLETEEFFECT __MSABI_LONG(0x80040206) #define DIERR_NOTBUFFERED __MSABI_LONG(0x80040207) #define DIERR_EFFECTPLAYING __MSABI_LONG(0x80040208) #define DIERR_UNPLUGGED __MSABI_LONG(0x80040209) #define DIERR_REPORTFULL __MSABI_LONG(0x8004020A) #define DIERR_MAPFILEFAIL __MSABI_LONG(0x8004020B) #define DIENUM_STOP 0 #define DIENUM_CONTINUE 1 #define DIEDFL_ALLDEVICES 0x00000000 #define DIEDFL_ATTACHEDONLY 0x00000001 #define DIEDFL_FORCEFEEDBACK 0x00000100 #define DIEDFL_INCLUDEALIASES 0x00010000 #define DIEDFL_INCLUDEPHANTOMS 0x00020000 #define DIEDFL_INCLUDEHIDDEN 0x00040000 #define DIDEVTYPE_DEVICE 1 #define DIDEVTYPE_MOUSE 2 #define DIDEVTYPE_KEYBOARD 3 #define DIDEVTYPE_JOYSTICK 4 #define DIDEVTYPE_HID 0x00010000 #define DI8DEVCLASS_ALL 0 #define DI8DEVCLASS_DEVICE 1 #define DI8DEVCLASS_POINTER 2 #define DI8DEVCLASS_KEYBOARD 3 #define DI8DEVCLASS_GAMECTRL 4 #define DI8DEVTYPE_DEVICE 0x11 #define DI8DEVTYPE_MOUSE 0x12 #define DI8DEVTYPE_KEYBOARD 0x13 #define DI8DEVTYPE_JOYSTICK 0x14 #define DI8DEVTYPE_GAMEPAD 0x15 #define DI8DEVTYPE_DRIVING 0x16 #define DI8DEVTYPE_FLIGHT 0x17 #define DI8DEVTYPE_1STPERSON 0x18 #define DI8DEVTYPE_DEVICECTRL 0x19 #define DI8DEVTYPE_SCREENPOINTER 0x1A #define DI8DEVTYPE_REMOTE 0x1B #define DI8DEVTYPE_SUPPLEMENTAL 0x1C #define DIDEVTYPEMOUSE_UNKNOWN 1 #define DIDEVTYPEMOUSE_TRADITIONAL 2 #define DIDEVTYPEMOUSE_FINGERSTICK 3 #define DIDEVTYPEMOUSE_TOUCHPAD 4 #define DIDEVTYPEMOUSE_TRACKBALL 5 #define DIDEVTYPEKEYBOARD_UNKNOWN 0 #define DIDEVTYPEKEYBOARD_PCXT 1 #define DIDEVTYPEKEYBOARD_OLIVETTI 2 #define DIDEVTYPEKEYBOARD_PCAT 3 #define DIDEVTYPEKEYBOARD_PCENH 4 #define DIDEVTYPEKEYBOARD_NOKIA1050 5 #define DIDEVTYPEKEYBOARD_NOKIA9140 6 #define DIDEVTYPEKEYBOARD_NEC98 7 #define DIDEVTYPEKEYBOARD_NEC98LAPTOP 8 #define DIDEVTYPEKEYBOARD_NEC98106 9 #define DIDEVTYPEKEYBOARD_JAPAN106 10 #define DIDEVTYPEKEYBOARD_JAPANAX 11 #define DIDEVTYPEKEYBOARD_J3100 12 #define DIDEVTYPEJOYSTICK_UNKNOWN 1 #define DIDEVTYPEJOYSTICK_TRADITIONAL 2 #define DIDEVTYPEJOYSTICK_FLIGHTSTICK 3 #define DIDEVTYPEJOYSTICK_GAMEPAD 4 #define DIDEVTYPEJOYSTICK_RUDDER 5 #define DIDEVTYPEJOYSTICK_WHEEL 6 #define DIDEVTYPEJOYSTICK_HEADTRACKER 7 #define DI8DEVTYPEMOUSE_UNKNOWN 1 #define DI8DEVTYPEMOUSE_TRADITIONAL 2 #define DI8DEVTYPEMOUSE_FINGERSTICK 3 #define DI8DEVTYPEMOUSE_TOUCHPAD 4 #define DI8DEVTYPEMOUSE_TRACKBALL 5 #define DI8DEVTYPEMOUSE_ABSOLUTE 6 #define DI8DEVTYPEKEYBOARD_UNKNOWN 0 #define DI8DEVTYPEKEYBOARD_PCXT 1 #define DI8DEVTYPEKEYBOARD_OLIVETTI 2 #define DI8DEVTYPEKEYBOARD_PCAT 3 #define DI8DEVTYPEKEYBOARD_PCENH 4 #define DI8DEVTYPEKEYBOARD_NOKIA1050 5 #define DI8DEVTYPEKEYBOARD_NOKIA9140 6 #define DI8DEVTYPEKEYBOARD_NEC98 7 #define DI8DEVTYPEKEYBOARD_NEC98LAPTOP 8 #define DI8DEVTYPEKEYBOARD_NEC98106 9 #define DI8DEVTYPEKEYBOARD_JAPAN106 10 #define DI8DEVTYPEKEYBOARD_JAPANAX 11 #define DI8DEVTYPEKEYBOARD_J3100 12 #define DI8DEVTYPE_LIMITEDGAMESUBTYPE 1 #define DI8DEVTYPEJOYSTICK_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEJOYSTICK_STANDARD 2 #define DI8DEVTYPEGAMEPAD_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEGAMEPAD_STANDARD 2 #define DI8DEVTYPEGAMEPAD_TILT 3 #define DI8DEVTYPEDRIVING_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEDRIVING_COMBINEDPEDALS 2 #define DI8DEVTYPEDRIVING_DUALPEDALS 3 #define DI8DEVTYPEDRIVING_THREEPEDALS 4 #define DI8DEVTYPEDRIVING_HANDHELD 5 #define DI8DEVTYPEFLIGHT_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEFLIGHT_STICK 2 #define DI8DEVTYPEFLIGHT_YOKE 3 #define DI8DEVTYPEFLIGHT_RC 4 #define DI8DEVTYPE1STPERSON_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPE1STPERSON_UNKNOWN 2 #define DI8DEVTYPE1STPERSON_SIXDOF 3 #define DI8DEVTYPE1STPERSON_SHOOTER 4 #define DI8DEVTYPESCREENPTR_UNKNOWN 2 #define DI8DEVTYPESCREENPTR_LIGHTGUN 3 #define DI8DEVTYPESCREENPTR_LIGHTPEN 4 #define DI8DEVTYPESCREENPTR_TOUCH 5 #define DI8DEVTYPEREMOTE_UNKNOWN 2 #define DI8DEVTYPEDEVICECTRL_UNKNOWN 2 #define DI8DEVTYPEDEVICECTRL_COMMSSELECTION 3 #define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4 #define DI8DEVTYPESUPPLEMENTAL_UNKNOWN 2 #define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER 3 #define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER 4 #define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER 5 #define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE 6 #define DI8DEVTYPESUPPLEMENTAL_SHIFTER 7 #define DI8DEVTYPESUPPLEMENTAL_THROTTLE 8 #define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE 9 #define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS 10 #define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS 11 #define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS 12 #define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS 13 #define GET_DIDEVICE_TYPE(dwDevType) LOBYTE(dwDevType) #define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType) typedef struct DIDEVICEOBJECTINSTANCE_DX3A { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; CHAR tszName[MAX_PATH]; } DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A; typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A; typedef struct DIDEVICEOBJECTINSTANCE_DX3W { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; WCHAR tszName[MAX_PATH]; } DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W; typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W; DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE_DX3) DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE_DX3) DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE_DX3) typedef struct DIDEVICEOBJECTINSTANCEA { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; CHAR tszName[MAX_PATH]; DWORD dwFFMaxForce; DWORD dwFFForceResolution; WORD wCollectionNumber; WORD wDesignatorIndex; WORD wUsagePage; WORD wUsage; DWORD dwDimension; WORD wExponent; WORD wReserved; } DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA; typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA; typedef struct DIDEVICEOBJECTINSTANCEW { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; WCHAR tszName[MAX_PATH]; DWORD dwFFMaxForce; DWORD dwFFForceResolution; WORD wCollectionNumber; WORD wDesignatorIndex; WORD wUsagePage; WORD wUsage; DWORD dwDimension; WORD wExponent; WORD wReserved; } DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW; typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW; DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE) DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE) DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE) typedef struct DIDEVICEINSTANCE_DX3A { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; CHAR tszInstanceName[MAX_PATH]; CHAR tszProductName[MAX_PATH]; } DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A; typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A; typedef struct DIDEVICEINSTANCE_DX3W { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; WCHAR tszInstanceName[MAX_PATH]; WCHAR tszProductName[MAX_PATH]; } DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W; typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W; DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE_DX3) DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE_DX3) DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE_DX3) typedef struct DIDEVICEINSTANCEA { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; CHAR tszInstanceName[MAX_PATH]; CHAR tszProductName[MAX_PATH]; GUID guidFFDriver; WORD wUsagePage; WORD wUsage; } DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA; typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA; typedef struct DIDEVICEINSTANCEW { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; WCHAR tszInstanceName[MAX_PATH]; WCHAR tszProductName[MAX_PATH]; GUID guidFFDriver; WORD wUsagePage; WORD wUsage; } DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW; typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW; DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE) DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE) DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE) typedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA,LPVOID); typedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW,LPVOID); DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESCALLBACK) #define DIEDBS_MAPPEDPRI1 0x00000001 #define DIEDBS_MAPPEDPRI2 0x00000002 #define DIEDBS_RECENTDEVICE 0x00000010 #define DIEDBS_NEWDEVICE 0x00000020 #define DIEDBSFL_ATTACHEDONLY 0x00000000 #define DIEDBSFL_THISUSER 0x00000010 #define DIEDBSFL_FORCEFEEDBACK DIEDFL_FORCEFEEDBACK #define DIEDBSFL_AVAILABLEDEVICES 0x00001000 #define DIEDBSFL_MULTIMICEKEYBOARDS 0x00002000 #define DIEDBSFL_NONGAMINGDEVICES 0x00004000 #define DIEDBSFL_VALID 0x00007110 typedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA,LPDIRECTINPUTDEVICE8A,DWORD,DWORD,LPVOID); typedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW,LPDIRECTINPUTDEVICE8W,DWORD,DWORD,LPVOID); DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESBYSEMANTICSCB) typedef BOOL (CALLBACK *LPDICONFIGUREDEVICESCALLBACK)(LPUNKNOWN,LPVOID); typedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA,LPVOID); typedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW,LPVOID); DECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK) typedef BOOL (CALLBACK *LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID); #define DIK_ESCAPE 0x01 #define DIK_1 0x02 #define DIK_2 0x03 #define DIK_3 0x04 #define DIK_4 0x05 #define DIK_5 0x06 #define DIK_6 0x07 #define DIK_7 0x08 #define DIK_8 0x09 #define DIK_9 0x0A #define DIK_0 0x0B #define DIK_MINUS 0x0C /* - on main keyboard */ #define DIK_EQUALS 0x0D #define DIK_BACK 0x0E /* backspace */ #define DIK_TAB 0x0F #define DIK_Q 0x10 #define DIK_W 0x11 #define DIK_E 0x12 #define DIK_R 0x13 #define DIK_T 0x14 #define DIK_Y 0x15 #define DIK_U 0x16 #define DIK_I 0x17 #define DIK_O 0x18 #define DIK_P 0x19 #define DIK_LBRACKET 0x1A #define DIK_RBRACKET 0x1B #define DIK_RETURN 0x1C /* Enter on main keyboard */ #define DIK_LCONTROL 0x1D #define DIK_A 0x1E #define DIK_S 0x1F #define DIK_D 0x20 #define DIK_F 0x21 #define DIK_G 0x22 #define DIK_H 0x23 #define DIK_J 0x24 #define DIK_K 0x25 #define DIK_L 0x26 #define DIK_SEMICOLON 0x27 #define DIK_APOSTROPHE 0x28 #define DIK_GRAVE 0x29 /* accent grave */ #define DIK_LSHIFT 0x2A #define DIK_BACKSLASH 0x2B #define DIK_Z 0x2C #define DIK_X 0x2D #define DIK_C 0x2E #define DIK_V 0x2F #define DIK_B 0x30 #define DIK_N 0x31 #define DIK_M 0x32 #define DIK_COMMA 0x33 #define DIK_PERIOD 0x34 /* . on main keyboard */ #define DIK_SLASH 0x35 /* / on main keyboard */ #define DIK_RSHIFT 0x36 #define DIK_MULTIPLY 0x37 /* * on numeric keypad */ #define DIK_LMENU 0x38 /* left Alt */ #define DIK_SPACE 0x39 #define DIK_CAPITAL 0x3A #define DIK_F1 0x3B #define DIK_F2 0x3C #define DIK_F3 0x3D #define DIK_F4 0x3E #define DIK_F5 0x3F #define DIK_F6 0x40 #define DIK_F7 0x41 #define DIK_F8 0x42 #define DIK_F9 0x43 #define DIK_F10 0x44 #define DIK_NUMLOCK 0x45 #define DIK_SCROLL 0x46 /* Scroll Lock */ #define DIK_NUMPAD7 0x47 #define DIK_NUMPAD8 0x48 #define DIK_NUMPAD9 0x49 #define DIK_SUBTRACT 0x4A /* - on numeric keypad */ #define DIK_NUMPAD4 0x4B #define DIK_NUMPAD5 0x4C #define DIK_NUMPAD6 0x4D #define DIK_ADD 0x4E /* + on numeric keypad */ #define DIK_NUMPAD1 0x4F #define DIK_NUMPAD2 0x50 #define DIK_NUMPAD3 0x51 #define DIK_NUMPAD0 0x52 #define DIK_DECIMAL 0x53 /* . on numeric keypad */ #define DIK_F11 0x57 #define DIK_F12 0x58 #define DIK_F13 0x64 /* (NEC PC98) */ #define DIK_F14 0x65 /* (NEC PC98) */ #define DIK_F15 0x66 /* (NEC PC98) */ #define DIK_KANA 0x70 /* (Japanese keyboard) */ #define DIK_CONVERT 0x79 /* (Japanese keyboard) */ #define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ #define DIK_YEN 0x7D /* (Japanese keyboard) */ #define DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ #define DIK_CIRCUMFLEX 0x90 /* (Japanese keyboard) */ #define DIK_AT 0x91 /* (NEC PC98) */ #define DIK_COLON 0x92 /* (NEC PC98) */ #define DIK_UNDERLINE 0x93 /* (NEC PC98) */ #define DIK_KANJI 0x94 /* (Japanese keyboard) */ #define DIK_STOP 0x95 /* (NEC PC98) */ #define DIK_AX 0x96 /* (Japan AX) */ #define DIK_UNLABELED 0x97 /* (J3100) */ #define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ #define DIK_RCONTROL 0x9D #define DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ #define DIK_DIVIDE 0xB5 /* / on numeric keypad */ #define DIK_SYSRQ 0xB7 #define DIK_RMENU 0xB8 /* right Alt */ #define DIK_PAUSE 0xC5 /* Pause */ #define DIK_HOME 0xC7 /* Home on arrow keypad */ #define DIK_UP 0xC8 /* UpArrow on arrow keypad */ #define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ #define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ #define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ #define DIK_END 0xCF /* End on arrow keypad */ #define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ #define DIK_NEXT 0xD1 /* PgDn on arrow keypad */ #define DIK_INSERT 0xD2 /* Insert on arrow keypad */ #define DIK_DELETE 0xD3 /* Delete on arrow keypad */ #define DIK_LWIN 0xDB /* Left Windows key */ #define DIK_RWIN 0xDC /* Right Windows key */ #define DIK_APPS 0xDD /* AppMenu key */ #define DIK_POWER 0xDE #define DIK_SLEEP 0xDF #define DIK_BACKSPACE DIK_BACK /* backspace */ #define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */ #define DIK_LALT DIK_LMENU /* left Alt */ #define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */ #define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */ #define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */ #define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */ #define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */ #define DIK_RALT DIK_RMENU /* right Alt */ #define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */ #define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */ #define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */ #define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */ #define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */ #define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */ /* New DirectInput8 style keyboard constants */ #define DIKEYBOARD_ESCAPE (DIK_ESCAPE | 0x81000400) #define DIKEYBOARD_1 (DIK_1 | 0x81000400) #define DIKEYBOARD_2 (DIK_2 | 0x81000400) #define DIKEYBOARD_3 (DIK_3 | 0x81000400) #define DIKEYBOARD_4 (DIK_4 | 0x81000400) #define DIKEYBOARD_5 (DIK_5 | 0x81000400) #define DIKEYBOARD_6 (DIK_6 | 0x81000400) #define DIKEYBOARD_7 (DIK_7 | 0x81000400) #define DIKEYBOARD_8 (DIK_8 | 0x81000400) #define DIKEYBOARD_9 (DIK_9 | 0x81000400) #define DIKEYBOARD_0 (DIK_0 | 0x81000400) #define DIKEYBOARD_MINUS (DIK_MINUS | 0x81000400) #define DIKEYBOARD_EQUALS (DIK_EQUALS | 0x81000400) #define DIKEYBOARD_BACK (DIK_BACK | 0x81000400) #define DIKEYBOARD_TAB (DIK_TAB | 0x81000400) #define DIKEYBOARD_Q (DIK_Q | 0x81000400) #define DIKEYBOARD_W (DIK_W | 0x81000400) #define DIKEYBOARD_E (DIK_E | 0x81000400) #define DIKEYBOARD_R (DIK_R | 0x81000400) #define DIKEYBOARD_T (DIK_T | 0x81000400) #define DIKEYBOARD_Y (DIK_Y | 0x81000400) #define DIKEYBOARD_U (DIK_U | 0x81000400) #define DIKEYBOARD_I (DIK_I | 0x81000400) #define DIKEYBOARD_O (DIK_O | 0x81000400) #define DIKEYBOARD_P (DIK_P | 0x81000400) #define DIKEYBOARD_LBRACKET (DIK_LBRACKET | 0x81000400) #define DIKEYBOARD_RBRACKET (DIK_RBRACKET | 0x81000400) #define DIKEYBOARD_RETURN (DIK_RETURN | 0x81000400) #define DIKEYBOARD_LCONTROL (DIK_LCONTROL | 0x81000400) #define DIKEYBOARD_A (DIK_A | 0x81000400) #define DIKEYBOARD_S (DIK_S | 0x81000400) #define DIKEYBOARD_D (DIK_D | 0x81000400) #define DIKEYBOARD_F (DIK_F | 0x81000400) #define DIKEYBOARD_G (DIK_G | 0x81000400) #define DIKEYBOARD_H (DIK_H | 0x81000400) #define DIKEYBOARD_J (DIK_J | 0x81000400) #define DIKEYBOARD_K (DIK_K | 0x81000400) #define DIKEYBOARD_L (DIK_L | 0x81000400) #define DIKEYBOARD_SEMICOLON (DIK_SEMICOLON | 0x81000400) #define DIKEYBOARD_APOSTROPHE (DIK_APOSTROPHE | 0x81000400) #define DIKEYBOARD_GRAVE (DIK_GRAVE | 0x81000400) #define DIKEYBOARD_LSHIFT (DIK_LSHIFT | 0x81000400) #define DIKEYBOARD_BACKSLASH (DIK_BACKSLASH | 0x81000400) #define DIKEYBOARD_Z (DIK_Z | 0x81000400) #define DIKEYBOARD_X (DIK_X | 0x81000400) #define DIKEYBOARD_C (DIK_C | 0x81000400) #define DIKEYBOARD_V (DIK_V | 0x81000400) #define DIKEYBOARD_B (DIK_B | 0x81000400) #define DIKEYBOARD_N (DIK_N | 0x81000400) #define DIKEYBOARD_M (DIK_M | 0x81000400) #define DIKEYBOARD_COMMA (DIK_COMMA | 0x81000400) #define DIKEYBOARD_PERIOD (DIK_PERIOD | 0x81000400) #define DIKEYBOARD_SLASH (DIK_SLASH | 0x81000400) #define DIKEYBOARD_RSHIFT (DIK_RSHIFT | 0x81000400) #define DIKEYBOARD_MULTIPLY (DIK_MULTIPLY | 0x81000400) #define DIKEYBOARD_LMENU (DIK_LMENU | 0x81000400) #define DIKEYBOARD_SPACE (DIK_SPACE | 0x81000400) #define DIKEYBOARD_CAPITAL (DIK_CAPITAL | 0x81000400) #define DIKEYBOARD_F1 (DIK_F1 | 0x81000400) #define DIKEYBOARD_F2 (DIK_F2 | 0x81000400) #define DIKEYBOARD_F3 (DIK_F3 | 0x81000400) #define DIKEYBOARD_F4 (DIK_F4 | 0x81000400) #define DIKEYBOARD_F5 (DIK_F5 | 0x81000400) #define DIKEYBOARD_F6 (DIK_F6 | 0x81000400) #define DIKEYBOARD_F7 (DIK_F7 | 0x81000400) #define DIKEYBOARD_F8 (DIK_F8 | 0x81000400) #define DIKEYBOARD_F9 (DIK_F9 | 0x81000400) #define DIKEYBOARD_F10 (DIK_F10 | 0x81000400) #define DIKEYBOARD_NUMLOCK (DIK_NUMLOCK | 0x81000400) #define DIKEYBOARD_SCROLL (DIK_SCROLL | 0x81000400) #define DIKEYBOARD_NUMPAD7 (DIK_NUMPAD7 | 0x81000400) #define DIKEYBOARD_NUMPAD8 (DIK_NUMPAD8 | 0x81000400) #define DIKEYBOARD_NUMPAD9 (DIK_NUMPAD9 | 0x81000400) #define DIKEYBOARD_SUBTRACT (DIK_SUBTRACT | 0x81000400) #define DIKEYBOARD_NUMPAD4 (DIK_NUMPAD4 | 0x81000400) #define DIKEYBOARD_NUMPAD5 (DIK_NUMPAD5 | 0x81000400) #define DIKEYBOARD_NUMPAD6 (DIK_NUMPAD6 | 0x81000400) #define DIKEYBOARD_ADD (DIK_ADD | 0x81000400) #define DIKEYBOARD_NUMPAD1 (DIK_NUMPAD1 | 0x81000400) #define DIKEYBOARD_NUMPAD2 (DIK_NUMPAD2 | 0x81000400) #define DIKEYBOARD_NUMPAD3 (DIK_NUMPAD3 | 0x81000400) #define DIKEYBOARD_NUMPAD0 (DIK_NUMPAD0 | 0x81000400) #define DIKEYBOARD_DECIMAL (DIK_DECIMAL | 0x81000400) #define DIKEYBOARD_F11 (DIK_F11 | 0x81000400) #define DIKEYBOARD_F12 (DIK_F12 | 0x81000400) #define DIKEYBOARD_F13 (DIK_F13 | 0x81000400) #define DIKEYBOARD_F14 (DIK_F14 | 0x81000400) #define DIKEYBOARD_F15 (DIK_F15 | 0x81000400) #define DIKEYBOARD_KANA (DIK_KANA | 0x81000400) #define DIKEYBOARD_CONVERT (DIK_CONVERT | 0x81000400) #define DIKEYBOARD_NOCONVERT (DIK_NOCONVERT | 0x81000400) #define DIKEYBOARD_YEN (DIK_YEN | 0x81000400) #define DIKEYBOARD_NUMPADEQUALS (DIK_NUMPADEQUALS | 0x81000400) #define DIKEYBOARD_CIRCUMFLEX (DIK_CIRCUMFLEX | 0x81000400) #define DIKEYBOARD_AT (DIK_AT | 0x81000400) #define DIKEYBOARD_COLON (DIK_COLON | 0x81000400) #define DIKEYBOARD_UNDERLINE (DIK_UNDERLINE | 0x81000400) #define DIKEYBOARD_KANJI (DIK_KANJI | 0x81000400) #define DIKEYBOARD_STOP (DIK_STOP | 0x81000400) #define DIKEYBOARD_AX (DIK_AX | 0x81000400) #define DIKEYBOARD_UNLABELED (DIK_UNLABELED | 0x81000400) #define DIKEYBOARD_NUMPADENTER (DIK_NUMPADENTER | 0x81000400) #define DIKEYBOARD_RCONTROL (DIK_RCONTROL | 0x81000400) #define DIKEYBOARD_NUMPADCOMMA (DIK_NUMPADCOMMA | 0x81000400) #define DIKEYBOARD_DIVIDE (DIK_DIVIDE | 0x81000400) #define DIKEYBOARD_SYSRQ (DIK_SYSRQ | 0x81000400) #define DIKEYBOARD_RMENU (DIK_RMENU | 0x81000400) #define DIKEYBOARD_PAUSE (DIK_PAUSE | 0x81000400) #define DIKEYBOARD_HOME (DIK_HOME | 0x81000400) #define DIKEYBOARD_UP (DIK_UP | 0x81000400) #define DIKEYBOARD_PRIOR (DIK_PRIOR | 0x81000400) #define DIKEYBOARD_LEFT (DIK_LEFT | 0x81000400) #define DIKEYBOARD_RIGHT (DIK_RIGHT | 0x81000400) #define DIKEYBOARD_END (DIK_END | 0x81000400) #define DIKEYBOARD_DOWN (DIK_DOWN | 0x81000400) #define DIKEYBOARD_NEXT (DIK_NEXT | 0x81000400) #define DIKEYBOARD_INSERT (DIK_INSERT | 0x81000400) #define DIKEYBOARD_DELETE (DIK_DELETE | 0x81000400) #define DIKEYBOARD_LWIN (DIK_LWIN | 0x81000400) #define DIKEYBOARD_RWIN (DIK_RWIN | 0x81000400) #define DIKEYBOARD_APPS (DIK_APPS | 0x81000400) #define DIKEYBOARD_POWER (DIK_POWER | 0x81000400) #define DIKEYBOARD_SLEEP (DIK_SLEEP | 0x81000400) #define DIKEYBOARD_BACKSPACE (DIK_BACKSPACE | 0x81000400) #define DIKEYBOARD_NUMPADSTAR (DIK_NUMPADSTAR | 0x81000400) #define DIKEYBOARD_LALT (DIK_LALT | 0x81000400) #define DIKEYBOARD_CAPSLOCK (DIK_CAPSLOCK | 0x81000400) #define DIKEYBOARD_NUMPADMINUS (DIK_NUMPADMINUS | 0x81000400) #define DIKEYBOARD_NUMPADPLUS (DIK_NUMPADPLUS | 0x81000400) #define DIKEYBOARD_NUMPADPERIOD (DIK_NUMPADPERIOD | 0x81000400) #define DIKEYBOARD_NUMPADSLASH (DIK_NUMPADSLASH | 0x81000400) #define DIKEYBOARD_RALT (DIK_RALT | 0x81000400) #define DIKEYBOARD_UPARROW (DIK_UPARROW | 0x81000400) #define DIKEYBOARD_PGUP (DIK_PGUP | 0x81000400) #define DIKEYBOARD_LEFTARROW (DIK_LEFTARROW | 0x81000400) #define DIKEYBOARD_RIGHTARROW (DIK_RIGHTARROW | 0x81000400) #define DIKEYBOARD_DOWNARROW (DIK_DOWNARROW | 0x81000400) #define DIKEYBOARD_PGDN (DIK_PGDN | 0x81000400) #define DIDFT_ALL 0x00000000 #define DIDFT_RELAXIS 0x00000001 #define DIDFT_ABSAXIS 0x00000002 #define DIDFT_AXIS 0x00000003 #define DIDFT_PSHBUTTON 0x00000004 #define DIDFT_TGLBUTTON 0x00000008 #define DIDFT_BUTTON 0x0000000C #define DIDFT_POV 0x00000010 #define DIDFT_COLLECTION 0x00000040 #define DIDFT_NODATA 0x00000080 #define DIDFT_ANYINSTANCE 0x00FFFF00 #define DIDFT_INSTANCEMASK DIDFT_ANYINSTANCE #define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8) #define DIDFT_GETTYPE(n) LOBYTE(n) #define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8) #define DIDFT_FFACTUATOR 0x01000000 #define DIDFT_FFEFFECTTRIGGER 0x02000000 #define DIDFT_OUTPUT 0x10000000 #define DIDFT_VENDORDEFINED 0x04000000 #define DIDFT_ALIAS 0x08000000 #ifndef DIDFT_OPTIONAL #define DIDFT_OPTIONAL 0x80000000 #endif #define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8) #define DIDFT_NOCOLLECTION 0x00FFFF00 #define DIDF_ABSAXIS 0x00000001 #define DIDF_RELAXIS 0x00000002 #define DIGDD_PEEK 0x00000001 #define DISEQUENCE_COMPARE(dwSq1,cmp,dwSq2) ((int)((dwSq1) - (dwSq2)) cmp 0) typedef struct DIDEVICEOBJECTDATA_DX3 { DWORD dwOfs; DWORD dwData; DWORD dwTimeStamp; DWORD dwSequence; } DIDEVICEOBJECTDATA_DX3,*LPDIDEVICEOBJECTDATA_DX3; typedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX3; typedef struct DIDEVICEOBJECTDATA { DWORD dwOfs; DWORD dwData; DWORD dwTimeStamp; DWORD dwSequence; UINT_PTR uAppData; } DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA; typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA; typedef struct _DIOBJECTDATAFORMAT { const GUID *pguid; DWORD dwOfs; DWORD dwType; DWORD dwFlags; } DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT; typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT; typedef struct _DIDATAFORMAT { DWORD dwSize; DWORD dwObjSize; DWORD dwFlags; DWORD dwDataSize; DWORD dwNumObjs; LPDIOBJECTDATAFORMAT rgodf; } DIDATAFORMAT, *LPDIDATAFORMAT; typedef const DIDATAFORMAT *LPCDIDATAFORMAT; #define DIDOI_FFACTUATOR 0x00000001 #define DIDOI_FFEFFECTTRIGGER 0x00000002 #define DIDOI_POLLED 0x00008000 #define DIDOI_ASPECTPOSITION 0x00000100 #define DIDOI_ASPECTVELOCITY 0x00000200 #define DIDOI_ASPECTACCEL 0x00000300 #define DIDOI_ASPECTFORCE 0x00000400 #define DIDOI_ASPECTMASK 0x00000F00 #define DIDOI_GUIDISUSAGE 0x00010000 typedef struct DIPROPHEADER { DWORD dwSize; DWORD dwHeaderSize; DWORD dwObj; DWORD dwHow; } DIPROPHEADER,*LPDIPROPHEADER; typedef const DIPROPHEADER *LPCDIPROPHEADER; #define DIPH_DEVICE 0 #define DIPH_BYOFFSET 1 #define DIPH_BYID 2 #define DIPH_BYUSAGE 3 #define DIMAKEUSAGEDWORD(UsagePage, Usage) (DWORD)MAKELONG(Usage, UsagePage) typedef struct DIPROPDWORD { DIPROPHEADER diph; DWORD dwData; } DIPROPDWORD, *LPDIPROPDWORD; typedef const DIPROPDWORD *LPCDIPROPDWORD; typedef struct DIPROPRANGE { DIPROPHEADER diph; LONG lMin; LONG lMax; } DIPROPRANGE, *LPDIPROPRANGE; typedef const DIPROPRANGE *LPCDIPROPRANGE; #define DIPROPRANGE_NOMIN ((LONG)0x80000000) #define DIPROPRANGE_NOMAX ((LONG)0x7FFFFFFF) typedef struct DIPROPCAL { DIPROPHEADER diph; LONG lMin; LONG lCenter; LONG lMax; } DIPROPCAL, *LPDIPROPCAL; typedef const DIPROPCAL *LPCDIPROPCAL; typedef struct DIPROPGUIDANDPATH { DIPROPHEADER diph; GUID guidClass; WCHAR wszPath[MAX_PATH]; } DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH; typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH; typedef struct DIPROPSTRING { DIPROPHEADER diph; WCHAR wsz[MAX_PATH]; } DIPROPSTRING, *LPDIPROPSTRING; typedef const DIPROPSTRING *LPCDIPROPSTRING; /* special property GUIDs */ #ifdef __cplusplus #define MAKEDIPROP(prop) (*(const GUID *)(prop)) #else #define MAKEDIPROP(prop) ((REFGUID)(prop)) #endif #define DIPROP_BUFFERSIZE MAKEDIPROP(1) #define DIPROP_AXISMODE MAKEDIPROP(2) #define DIPROPAXISMODE_ABS 0 #define DIPROPAXISMODE_REL 1 #define DIPROP_GRANULARITY MAKEDIPROP(3) #define DIPROP_RANGE MAKEDIPROP(4) #define DIPROP_DEADZONE MAKEDIPROP(5) #define DIPROP_SATURATION MAKEDIPROP(6) #define DIPROP_FFGAIN MAKEDIPROP(7) #define DIPROP_FFLOAD MAKEDIPROP(8) #define DIPROP_AUTOCENTER MAKEDIPROP(9) #define DIPROPAUTOCENTER_OFF 0 #define DIPROPAUTOCENTER_ON 1 #define DIPROP_CALIBRATIONMODE MAKEDIPROP(10) #define DIPROPCALIBRATIONMODE_COOKED 0 #define DIPROPCALIBRATIONMODE_RAW 1 #define DIPROP_CALIBRATION MAKEDIPROP(11) #define DIPROP_GUIDANDPATH MAKEDIPROP(12) #define DIPROP_INSTANCENAME MAKEDIPROP(13) #define DIPROP_PRODUCTNAME MAKEDIPROP(14) #define DIPROP_JOYSTICKID MAKEDIPROP(15) #define DIPROP_KEYNAME MAKEDIPROP(20) #define DIPROP_CPOINTS MAKEDIPROP(21) #define DIPROP_APPDATA MAKEDIPROP(22) #define DIPROP_SCANCODE MAKEDIPROP(23) #define DIPROP_VIDPID MAKEDIPROP(24) #define DIPROP_USERNAME MAKEDIPROP(25) #define DIPROP_TYPENAME MAKEDIPROP(26) typedef struct DIDEVCAPS_DX3 { DWORD dwSize; DWORD dwFlags; DWORD dwDevType; DWORD dwAxes; DWORD dwButtons; DWORD dwPOVs; } DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3; typedef struct DIDEVCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwDevType; DWORD dwAxes; DWORD dwButtons; DWORD dwPOVs; DWORD dwFFSamplePeriod; DWORD dwFFMinTimeResolution; DWORD dwFirmwareRevision; DWORD dwHardwareRevision; DWORD dwFFDriverVersion; } DIDEVCAPS,*LPDIDEVCAPS; #define DIDC_ATTACHED 0x00000001 #define DIDC_POLLEDDEVICE 0x00000002 #define DIDC_EMULATED 0x00000004 #define DIDC_POLLEDDATAFORMAT 0x00000008 #define DIDC_FORCEFEEDBACK 0x00000100 #define DIDC_FFATTACK 0x00000200 #define DIDC_FFFADE 0x00000400 #define DIDC_SATURATION 0x00000800 #define DIDC_POSNEGCOEFFICIENTS 0x00001000 #define DIDC_POSNEGSATURATION 0x00002000 #define DIDC_DEADBAND 0x00004000 #define DIDC_STARTDELAY 0x00008000 #define DIDC_ALIAS 0x00010000 #define DIDC_PHANTOM 0x00020000 #define DIDC_HIDDEN 0x00040000 /* SetCooperativeLevel dwFlags */ #define DISCL_EXCLUSIVE 0x00000001 #define DISCL_NONEXCLUSIVE 0x00000002 #define DISCL_FOREGROUND 0x00000004 #define DISCL_BACKGROUND 0x00000008 #define DISCL_NOWINKEY 0x00000010 /* Device FF flags */ #define DISFFC_RESET 0x00000001 #define DISFFC_STOPALL 0x00000002 #define DISFFC_PAUSE 0x00000004 #define DISFFC_CONTINUE 0x00000008 #define DISFFC_SETACTUATORSON 0x00000010 #define DISFFC_SETACTUATORSOFF 0x00000020 #define DIGFFS_EMPTY 0x00000001 #define DIGFFS_STOPPED 0x00000002 #define DIGFFS_PAUSED 0x00000004 #define DIGFFS_ACTUATORSON 0x00000010 #define DIGFFS_ACTUATORSOFF 0x00000020 #define DIGFFS_POWERON 0x00000040 #define DIGFFS_POWEROFF 0x00000080 #define DIGFFS_SAFETYSWITCHON 0x00000100 #define DIGFFS_SAFETYSWITCHOFF 0x00000200 #define DIGFFS_USERFFSWITCHON 0x00000400 #define DIGFFS_USERFFSWITCHOFF 0x00000800 #define DIGFFS_DEVICELOST 0x80000000 /* Effect flags */ #define DIEFT_ALL 0x00000000 #define DIEFT_CONSTANTFORCE 0x00000001 #define DIEFT_RAMPFORCE 0x00000002 #define DIEFT_PERIODIC 0x00000003 #define DIEFT_CONDITION 0x00000004 #define DIEFT_CUSTOMFORCE 0x00000005 #define DIEFT_HARDWARE 0x000000FF #define DIEFT_FFATTACK 0x00000200 #define DIEFT_FFFADE 0x00000400 #define DIEFT_SATURATION 0x00000800 #define DIEFT_POSNEGCOEFFICIENTS 0x00001000 #define DIEFT_POSNEGSATURATION 0x00002000 #define DIEFT_DEADBAND 0x00004000 #define DIEFT_STARTDELAY 0x00008000 #define DIEFT_GETTYPE(n) LOBYTE(n) #define DIEFF_OBJECTIDS 0x00000001 #define DIEFF_OBJECTOFFSETS 0x00000002 #define DIEFF_CARTESIAN 0x00000010 #define DIEFF_POLAR 0x00000020 #define DIEFF_SPHERICAL 0x00000040 #define DIEP_DURATION 0x00000001 #define DIEP_SAMPLEPERIOD 0x00000002 #define DIEP_GAIN 0x00000004 #define DIEP_TRIGGERBUTTON 0x00000008 #define DIEP_TRIGGERREPEATINTERVAL 0x00000010 #define DIEP_AXES 0x00000020 #define DIEP_DIRECTION 0x00000040 #define DIEP_ENVELOPE 0x00000080 #define DIEP_TYPESPECIFICPARAMS 0x00000100 #define DIEP_STARTDELAY 0x00000200 #define DIEP_ALLPARAMS_DX5 0x000001FF #define DIEP_ALLPARAMS 0x000003FF #define DIEP_START 0x20000000 #define DIEP_NORESTART 0x40000000 #define DIEP_NODOWNLOAD 0x80000000 #define DIEB_NOTRIGGER 0xFFFFFFFF #define DIES_SOLO 0x00000001 #define DIES_NODOWNLOAD 0x80000000 #define DIEGES_PLAYING 0x00000001 #define DIEGES_EMULATED 0x00000002 #define DI_DEGREES 100 #define DI_FFNOMINALMAX 10000 #define DI_SECONDS 1000000 typedef struct DICONSTANTFORCE { LONG lMagnitude; } DICONSTANTFORCE, *LPDICONSTANTFORCE; typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE; typedef struct DIRAMPFORCE { LONG lStart; LONG lEnd; } DIRAMPFORCE, *LPDIRAMPFORCE; typedef const DIRAMPFORCE *LPCDIRAMPFORCE; typedef struct DIPERIODIC { DWORD dwMagnitude; LONG lOffset; DWORD dwPhase; DWORD dwPeriod; } DIPERIODIC, *LPDIPERIODIC; typedef const DIPERIODIC *LPCDIPERIODIC; typedef struct DICONDITION { LONG lOffset; LONG lPositiveCoefficient; LONG lNegativeCoefficient; DWORD dwPositiveSaturation; DWORD dwNegativeSaturation; LONG lDeadBand; } DICONDITION, *LPDICONDITION; typedef const DICONDITION *LPCDICONDITION; typedef struct DICUSTOMFORCE { DWORD cChannels; DWORD dwSamplePeriod; DWORD cSamples; LPLONG rglForceData; } DICUSTOMFORCE, *LPDICUSTOMFORCE; typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE; typedef struct DIENVELOPE { DWORD dwSize; DWORD dwAttackLevel; DWORD dwAttackTime; DWORD dwFadeLevel; DWORD dwFadeTime; } DIENVELOPE, *LPDIENVELOPE; typedef const DIENVELOPE *LPCDIENVELOPE; typedef struct DIEFFECT_DX5 { DWORD dwSize; DWORD dwFlags; DWORD dwDuration; DWORD dwSamplePeriod; DWORD dwGain; DWORD dwTriggerButton; DWORD dwTriggerRepeatInterval; DWORD cAxes; LPDWORD rgdwAxes; LPLONG rglDirection; LPDIENVELOPE lpEnvelope; DWORD cbTypeSpecificParams; LPVOID lpvTypeSpecificParams; } DIEFFECT_DX5, *LPDIEFFECT_DX5; typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5; typedef struct DIEFFECT { DWORD dwSize; DWORD dwFlags; DWORD dwDuration; DWORD dwSamplePeriod; DWORD dwGain; DWORD dwTriggerButton; DWORD dwTriggerRepeatInterval; DWORD cAxes; LPDWORD rgdwAxes; LPLONG rglDirection; LPDIENVELOPE lpEnvelope; DWORD cbTypeSpecificParams; LPVOID lpvTypeSpecificParams; DWORD dwStartDelay; } DIEFFECT, *LPDIEFFECT; typedef const DIEFFECT *LPCDIEFFECT; typedef DIEFFECT DIEFFECT_DX6; typedef LPDIEFFECT LPDIEFFECT_DX6; typedef struct DIEFFECTINFOA { DWORD dwSize; GUID guid; DWORD dwEffType; DWORD dwStaticParams; DWORD dwDynamicParams; CHAR tszName[MAX_PATH]; } DIEFFECTINFOA, *LPDIEFFECTINFOA; typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA; typedef struct DIEFFECTINFOW { DWORD dwSize; GUID guid; DWORD dwEffType; DWORD dwStaticParams; DWORD dwDynamicParams; WCHAR tszName[MAX_PATH]; } DIEFFECTINFOW, *LPDIEFFECTINFOW; typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW; DECL_WINELIB_TYPE_AW(DIEFFECTINFO) DECL_WINELIB_TYPE_AW(LPDIEFFECTINFO) DECL_WINELIB_TYPE_AW(LPCDIEFFECTINFO) typedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID); typedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID); typedef struct DIEFFESCAPE { DWORD dwSize; DWORD dwCommand; LPVOID lpvInBuffer; DWORD cbInBuffer; LPVOID lpvOutBuffer; DWORD cbOutBuffer; } DIEFFESCAPE, *LPDIEFFESCAPE; typedef struct DIJOYSTATE { LONG lX; LONG lY; LONG lZ; LONG lRx; LONG lRy; LONG lRz; LONG rglSlider[2]; DWORD rgdwPOV[4]; BYTE rgbButtons[32]; } DIJOYSTATE, *LPDIJOYSTATE; typedef struct DIJOYSTATE2 { LONG lX; LONG lY; LONG lZ; LONG lRx; LONG lRy; LONG lRz; LONG rglSlider[2]; DWORD rgdwPOV[4]; BYTE rgbButtons[128]; LONG lVX; /* 'v' as in velocity */ LONG lVY; LONG lVZ; LONG lVRx; LONG lVRy; LONG lVRz; LONG rglVSlider[2]; LONG lAX; /* 'a' as in acceleration */ LONG lAY; LONG lAZ; LONG lARx; LONG lARy; LONG lARz; LONG rglASlider[2]; LONG lFX; /* 'f' as in force */ LONG lFY; LONG lFZ; LONG lFRx; /* 'fr' as in rotational force aka torque */ LONG lFRy; LONG lFRz; LONG rglFSlider[2]; } DIJOYSTATE2, *LPDIJOYSTATE2; #define DIJOFS_X FIELD_OFFSET(DIJOYSTATE, lX) #define DIJOFS_Y FIELD_OFFSET(DIJOYSTATE, lY) #define DIJOFS_Z FIELD_OFFSET(DIJOYSTATE, lZ) #define DIJOFS_RX FIELD_OFFSET(DIJOYSTATE, lRx) #define DIJOFS_RY FIELD_OFFSET(DIJOYSTATE, lRy) #define DIJOFS_RZ FIELD_OFFSET(DIJOYSTATE, lRz) #define DIJOFS_SLIDER(n) (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \ (n) * sizeof(LONG)) #define DIJOFS_POV(n) (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \ (n) * sizeof(DWORD)) #define DIJOFS_BUTTON(n) (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n)) #define DIJOFS_BUTTON0 DIJOFS_BUTTON(0) #define DIJOFS_BUTTON1 DIJOFS_BUTTON(1) #define DIJOFS_BUTTON2 DIJOFS_BUTTON(2) #define DIJOFS_BUTTON3 DIJOFS_BUTTON(3) #define DIJOFS_BUTTON4 DIJOFS_BUTTON(4) #define DIJOFS_BUTTON5 DIJOFS_BUTTON(5) #define DIJOFS_BUTTON6 DIJOFS_BUTTON(6) #define DIJOFS_BUTTON7 DIJOFS_BUTTON(7) #define DIJOFS_BUTTON8 DIJOFS_BUTTON(8) #define DIJOFS_BUTTON9 DIJOFS_BUTTON(9) #define DIJOFS_BUTTON10 DIJOFS_BUTTON(10) #define DIJOFS_BUTTON11 DIJOFS_BUTTON(11) #define DIJOFS_BUTTON12 DIJOFS_BUTTON(12) #define DIJOFS_BUTTON13 DIJOFS_BUTTON(13) #define DIJOFS_BUTTON14 DIJOFS_BUTTON(14) #define DIJOFS_BUTTON15 DIJOFS_BUTTON(15) #define DIJOFS_BUTTON16 DIJOFS_BUTTON(16) #define DIJOFS_BUTTON17 DIJOFS_BUTTON(17) #define DIJOFS_BUTTON18 DIJOFS_BUTTON(18) #define DIJOFS_BUTTON19 DIJOFS_BUTTON(19) #define DIJOFS_BUTTON20 DIJOFS_BUTTON(20) #define DIJOFS_BUTTON21 DIJOFS_BUTTON(21) #define DIJOFS_BUTTON22 DIJOFS_BUTTON(22) #define DIJOFS_BUTTON23 DIJOFS_BUTTON(23) #define DIJOFS_BUTTON24 DIJOFS_BUTTON(24) #define DIJOFS_BUTTON25 DIJOFS_BUTTON(25) #define DIJOFS_BUTTON26 DIJOFS_BUTTON(26) #define DIJOFS_BUTTON27 DIJOFS_BUTTON(27) #define DIJOFS_BUTTON28 DIJOFS_BUTTON(28) #define DIJOFS_BUTTON29 DIJOFS_BUTTON(29) #define DIJOFS_BUTTON30 DIJOFS_BUTTON(30) #define DIJOFS_BUTTON31 DIJOFS_BUTTON(31) /* DInput 7 structures, types */ typedef struct DIFILEEFFECT { DWORD dwSize; GUID GuidEffect; LPCDIEFFECT lpDiEffect; CHAR szFriendlyName[MAX_PATH]; } DIFILEEFFECT, *LPDIFILEEFFECT; typedef const DIFILEEFFECT *LPCDIFILEEFFECT; typedef BOOL (CALLBACK *LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID); /* DInput 8 structures and types */ typedef struct _DIACTIONA { UINT_PTR uAppData; DWORD dwSemantic; DWORD dwFlags; union { LPCSTR lptszActionName; UINT uResIdString; } DUMMYUNIONNAME; GUID guidInstance; DWORD dwObjID; DWORD dwHow; } DIACTIONA, *LPDIACTIONA; typedef const DIACTIONA *LPCDIACTIONA; typedef struct _DIACTIONW { UINT_PTR uAppData; DWORD dwSemantic; DWORD dwFlags; union { LPCWSTR lptszActionName; UINT uResIdString; } DUMMYUNIONNAME; GUID guidInstance; DWORD dwObjID; DWORD dwHow; } DIACTIONW, *LPDIACTIONW; typedef const DIACTIONW *LPCDIACTIONW; DECL_WINELIB_TYPE_AW(DIACTION) DECL_WINELIB_TYPE_AW(LPDIACTION) DECL_WINELIB_TYPE_AW(LPCDIACTION) #define DIA_FORCEFEEDBACK 0x00000001 #define DIA_APPMAPPED 0x00000002 #define DIA_APPNOMAP 0x00000004 #define DIA_NORANGE 0x00000008 #define DIA_APPFIXED 0x00000010 #define DIAH_UNMAPPED 0x00000000 #define DIAH_USERCONFIG 0x00000001 #define DIAH_APPREQUESTED 0x00000002 #define DIAH_HWAPP 0x00000004 #define DIAH_HWDEFAULT 0x00000008 #define DIAH_DEFAULT 0x00000020 #define DIAH_ERROR 0x80000000 typedef struct _DIACTIONFORMATA { DWORD dwSize; DWORD dwActionSize; DWORD dwDataSize; DWORD dwNumActions; LPDIACTIONA rgoAction; GUID guidActionMap; DWORD dwGenre; DWORD dwBufferSize; LONG lAxisMin; LONG lAxisMax; HINSTANCE hInstString; FILETIME ftTimeStamp; DWORD dwCRC; CHAR tszActionMap[MAX_PATH]; } DIACTIONFORMATA, *LPDIACTIONFORMATA; typedef const DIACTIONFORMATA *LPCDIACTIONFORMATA; typedef struct _DIACTIONFORMATW { DWORD dwSize; DWORD dwActionSize; DWORD dwDataSize; DWORD dwNumActions; LPDIACTIONW rgoAction; GUID guidActionMap; DWORD dwGenre; DWORD dwBufferSize; LONG lAxisMin; LONG lAxisMax; HINSTANCE hInstString; FILETIME ftTimeStamp; DWORD dwCRC; WCHAR tszActionMap[MAX_PATH]; } DIACTIONFORMATW, *LPDIACTIONFORMATW; typedef const DIACTIONFORMATW *LPCDIACTIONFORMATW; DECL_WINELIB_TYPE_AW(DIACTIONFORMAT) DECL_WINELIB_TYPE_AW(LPDIACTIONFORMAT) DECL_WINELIB_TYPE_AW(LPCDIACTIONFORMAT) #define DIAFTS_NEWDEVICELOW 0xFFFFFFFF #define DIAFTS_NEWDEVICEHIGH 0xFFFFFFFF #define DIAFTS_UNUSEDDEVICELOW 0x00000000 #define DIAFTS_UNUSEDDEVICEHIGH 0x00000000 #define DIDBAM_DEFAULT 0x00000000 #define DIDBAM_PRESERVE 0x00000001 #define DIDBAM_INITIALIZE 0x00000002 #define DIDBAM_HWDEFAULTS 0x00000004 #define DIDSAM_DEFAULT 0x00000000 #define DIDSAM_NOUSER 0x00000001 #define DIDSAM_FORCESAVE 0x00000002 #define DICD_DEFAULT 0x00000000 #define DICD_EDIT 0x00000001 #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR; #define D3DCOLOR_DEFINED #endif typedef struct _DICOLORSET { DWORD dwSize; D3DCOLOR cTextFore; D3DCOLOR cTextHighlight; D3DCOLOR cCalloutLine; D3DCOLOR cCalloutHighlight; D3DCOLOR cBorder; D3DCOLOR cControlFill; D3DCOLOR cHighlightFill; D3DCOLOR cAreaFill; } DICOLORSET, *LPDICOLORSET; typedef const DICOLORSET *LPCDICOLORSET; typedef struct _DICONFIGUREDEVICESPARAMSA { DWORD dwSize; DWORD dwcUsers; LPSTR lptszUserNames; DWORD dwcFormats; LPDIACTIONFORMATA lprgFormats; HWND hwnd; DICOLORSET dics; LPUNKNOWN lpUnkDDSTarget; } DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA; typedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA; typedef struct _DICONFIGUREDEVICESPARAMSW { DWORD dwSize; DWORD dwcUsers; LPWSTR lptszUserNames; DWORD dwcFormats; LPDIACTIONFORMATW lprgFormats; HWND hwnd; DICOLORSET dics; LPUNKNOWN lpUnkDDSTarget; } DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW; typedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW; DECL_WINELIB_TYPE_AW(DICONFIGUREDEVICESPARAMS) DECL_WINELIB_TYPE_AW(LPDICONFIGUREDEVICESPARAMS) DECL_WINELIB_TYPE_AW(LPCDICONFIGUREDEVICESPARAMS) #define DIDIFT_CONFIGURATION 0x00000001 #define DIDIFT_OVERLAY 0x00000002 #define DIDAL_CENTERED 0x00000000 #define DIDAL_LEFTALIGNED 0x00000001 #define DIDAL_RIGHTALIGNED 0x00000002 #define DIDAL_MIDDLE 0x00000000 #define DIDAL_TOPALIGNED 0x00000004 #define DIDAL_BOTTOMALIGNED 0x00000008 typedef struct _DIDEVICEIMAGEINFOA { CHAR tszImagePath[MAX_PATH]; DWORD dwFlags; DWORD dwViewID; RECT rcOverlay; DWORD dwObjID; DWORD dwcValidPts; POINT rgptCalloutLine[5]; RECT rcCalloutRect; DWORD dwTextAlign; } DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA; typedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA; typedef struct _DIDEVICEIMAGEINFOW { WCHAR tszImagePath[MAX_PATH]; DWORD dwFlags; DWORD dwViewID; RECT rcOverlay; DWORD dwObjID; DWORD dwcValidPts; POINT rgptCalloutLine[5]; RECT rcCalloutRect; DWORD dwTextAlign; } DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW; typedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW; DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFO) DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFO) DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFO) typedef struct _DIDEVICEIMAGEINFOHEADERA { DWORD dwSize; DWORD dwSizeImageInfo; DWORD dwcViews; DWORD dwcButtons; DWORD dwcAxes; DWORD dwcPOVs; DWORD dwBufferSize; DWORD dwBufferUsed; LPDIDEVICEIMAGEINFOA lprgImageInfoArray; } DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA; typedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA; typedef struct _DIDEVICEIMAGEINFOHEADERW { DWORD dwSize; DWORD dwSizeImageInfo; DWORD dwcViews; DWORD dwcButtons; DWORD dwcAxes; DWORD dwcPOVs; DWORD dwBufferSize; DWORD dwBufferUsed; LPDIDEVICEIMAGEINFOW lprgImageInfoArray; } DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW; typedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW; DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFOHEADER) DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFOHEADER) DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFOHEADER) /***************************************************************************** * IDirectInputEffect interface */ #define INTERFACE IDirectInputEffect DECLARE_INTERFACE_(IDirectInputEffect,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputEffect methods ***/ STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD, REFGUID) PURE; STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE; STDMETHOD(GetParameters)(THIS_ LPDIEFFECT, DWORD) PURE; STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT, DWORD) PURE; STDMETHOD(Start)(THIS_ DWORD, DWORD) PURE; STDMETHOD(Stop)(THIS) PURE; STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE; STDMETHOD(Download)(THIS) PURE; STDMETHOD(Unload)(THIS) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputEffect_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputEffect_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInputEffect methods ***/ #define IDirectInputEffect_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectInputEffect_GetEffectGuid(p,a) (p)->lpVtbl->GetEffectGuid(p,a) #define IDirectInputEffect_GetParameters(p,a,b) (p)->lpVtbl->GetParameters(p,a,b) #define IDirectInputEffect_SetParameters(p,a,b) (p)->lpVtbl->SetParameters(p,a,b) #define IDirectInputEffect_Start(p,a,b) (p)->lpVtbl->Start(p,a,b) #define IDirectInputEffect_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectInputEffect_GetEffectStatus(p,a) (p)->lpVtbl->GetEffectStatus(p,a) #define IDirectInputEffect_Download(p) (p)->lpVtbl->Download(p) #define IDirectInputEffect_Unload(p) (p)->lpVtbl->Unload(p) #define IDirectInputEffect_Escape(p,a) (p)->lpVtbl->Escape(p,a) #else /*** IUnknown methods ***/ #define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputEffect_AddRef(p) (p)->AddRef() #define IDirectInputEffect_Release(p) (p)->Release() /*** IDirectInputEffect methods ***/ #define IDirectInputEffect_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectInputEffect_GetEffectGuid(p,a) (p)->GetEffectGuid(a) #define IDirectInputEffect_GetParameters(p,a,b) (p)->GetParameters(a,b) #define IDirectInputEffect_SetParameters(p,a,b) (p)->SetParameters(a,b) #define IDirectInputEffect_Start(p,a,b) (p)->Start(a,b) #define IDirectInputEffect_Stop(p) (p)->Stop() #define IDirectInputEffect_GetEffectStatus(p,a) (p)->GetEffectStatus(a) #define IDirectInputEffect_Download(p) (p)->Download() #define IDirectInputEffect_Unload(p) (p)->Unload() #define IDirectInputEffect_Escape(p,a) (p)->Escape(a) #endif /***************************************************************************** * IDirectInputDeviceA interface */ #define INTERFACE IDirectInputDeviceA DECLARE_INTERFACE_(IDirectInputDeviceA,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceA methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectInputDeviceW interface */ #define INTERFACE IDirectInputDeviceW DECLARE_INTERFACE_(IDirectInputDeviceW,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceW methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputDevice_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputDevice_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInputDevice methods ***/ #define IDirectInputDevice_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) #define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) #define IDirectInputDevice_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) #define IDirectInputDevice_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) #define IDirectInputDevice_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputDevice_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputDevice_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) #define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) #define IDirectInputDevice_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) #define IDirectInputDevice_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) #define IDirectInputDevice_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) #define IDirectInputDevice_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInputDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputDevice_AddRef(p) (p)->AddRef() #define IDirectInputDevice_Release(p) (p)->Release() /*** IDirectInputDevice methods ***/ #define IDirectInputDevice_GetCapabilities(p,a) (p)->GetCapabilities(a) #define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) #define IDirectInputDevice_GetProperty(p,a,b) (p)->GetProperty(a,b) #define IDirectInputDevice_SetProperty(p,a,b) (p)->SetProperty(a,b) #define IDirectInputDevice_Acquire(p) (p)->Acquire() #define IDirectInputDevice_Unacquire(p) (p)->Unacquire() #define IDirectInputDevice_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) #define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) #define IDirectInputDevice_SetDataFormat(p,a) (p)->SetDataFormat(a) #define IDirectInputDevice_SetEventNotification(p,a) (p)->SetEventNotification(a) #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) #define IDirectInputDevice_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) #define IDirectInputDevice_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInputDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #endif /***************************************************************************** * IDirectInputDevice2A interface */ #define INTERFACE IDirectInputDevice2A DECLARE_INTERFACE_(IDirectInputDevice2A,IDirectInputDeviceA) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceA methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE; /*** IDirectInputDevice2A methods ***/ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectInputDevice2W interface */ #define INTERFACE IDirectInputDevice2W DECLARE_INTERFACE_(IDirectInputDevice2W,IDirectInputDeviceW) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceW methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE; /*** IDirectInputDevice2W methods ***/ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputDevice2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputDevice2_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInputDevice methods ***/ #define IDirectInputDevice2_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) #define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) #define IDirectInputDevice2_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) #define IDirectInputDevice2_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) #define IDirectInputDevice2_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputDevice2_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) #define IDirectInputDevice2_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) #define IDirectInputDevice2_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) #define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) #define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInputDevice2_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) /*** IDirectInputDevice2 methods ***/ #define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) #define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) #define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) #define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) #define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) #define IDirectInputDevice2_Escape(p,a) (p)->lpVtbl->Escape(p,a) #define IDirectInputDevice2_Poll(p) (p)->lpVtbl->Poll(p) #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputDevice2_AddRef(p) (p)->AddRef() #define IDirectInputDevice2_Release(p) (p)->Release() /*** IDirectInputDevice methods ***/ #define IDirectInputDevice2_GetCapabilities(p,a) (p)->GetCapabilities(a) #define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) #define IDirectInputDevice2_GetProperty(p,a,b) (p)->GetProperty(a,b) #define IDirectInputDevice2_SetProperty(p,a,b) (p)->SetProperty(a,b) #define IDirectInputDevice2_Acquire(p) (p)->Acquire() #define IDirectInputDevice2_Unacquire(p) (p)->Unacquire() #define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) #define IDirectInputDevice2_SetDataFormat(p,a) (p)->SetDataFormat(a) #define IDirectInputDevice2_SetEventNotification(p,a) (p)->SetEventNotification(a) #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) #define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) #define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInputDevice2_Initialize(p,a,b,c) (p)->Initialize(a,b,c) /*** IDirectInputDevice2 methods ***/ #define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) #define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) #define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) #define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) #define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) #define IDirectInputDevice2_Escape(p,a) (p)->Escape(a) #define IDirectInputDevice2_Poll(p) (p)->Poll() #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) #endif /***************************************************************************** * IDirectInputDevice7A interface */ #define INTERFACE IDirectInputDevice7A DECLARE_INTERFACE_(IDirectInputDevice7A,IDirectInputDevice2A) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceA methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE; /*** IDirectInputDevice2A methods ***/ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE; /*** IDirectInputDevice7A methods ***/ STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE; STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectInputDevice7W interface */ #define INTERFACE IDirectInputDevice7W DECLARE_INTERFACE_(IDirectInputDevice7W,IDirectInputDevice2W) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceW methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE; /*** IDirectInputDevice2W methods ***/ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE; /*** IDirectInputDevice7W methods ***/ STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE; STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputDevice7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputDevice7_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInputDevice methods ***/ #define IDirectInputDevice7_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) #define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) #define IDirectInputDevice7_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) #define IDirectInputDevice7_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) #define IDirectInputDevice7_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputDevice7_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) #define IDirectInputDevice7_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) #define IDirectInputDevice7_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) #define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) #define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInputDevice7_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) /*** IDirectInputDevice2 methods ***/ #define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) #define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) #define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) #define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) #define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) #define IDirectInputDevice7_Escape(p,a) (p)->lpVtbl->Escape(p,a) #define IDirectInputDevice7_Poll(p) (p)->lpVtbl->Poll(p) #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) /*** IDirectInputDevice7 methods ***/ #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d) #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputDevice7_AddRef(p) (p)->AddRef() #define IDirectInputDevice7_Release(p) (p)->Release() /*** IDirectInputDevice methods ***/ #define IDirectInputDevice7_GetCapabilities(p,a) (p)->GetCapabilities(a) #define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) #define IDirectInputDevice7_GetProperty(p,a,b) (p)->GetProperty(a,b) #define IDirectInputDevice7_SetProperty(p,a,b) (p)->SetProperty(a,b) #define IDirectInputDevice7_Acquire(p) (p)->Acquire() #define IDirectInputDevice7_Unacquire(p) (p)->Unacquire() #define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) #define IDirectInputDevice7_SetDataFormat(p,a) (p)->SetDataFormat(a) #define IDirectInputDevice7_SetEventNotification(p,a) (p)->SetEventNotification(a) #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) #define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) #define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInputDevice7_Initialize(p,a,b,c) (p)->Initialize(a,b,c) /*** IDirectInputDevice2 methods ***/ #define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) #define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) #define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) #define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) #define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) #define IDirectInputDevice7_Escape(p,a) (p)->Escape(a) #define IDirectInputDevice7_Poll(p) (p)->Poll() #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) /*** IDirectInputDevice7 methods ***/ #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d) #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d) #endif /***************************************************************************** * IDirectInputDevice8A interface */ #define INTERFACE IDirectInputDevice8A DECLARE_INTERFACE_(IDirectInputDevice8A,IDirectInputDevice7A) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceA methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE; /*** IDirectInputDevice2A methods ***/ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE; /*** IDirectInputDevice7A methods ***/ STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE; STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE; /*** IDirectInputDevice8A methods ***/ STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE; STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE; STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectInputDevice8W interface */ #define INTERFACE IDirectInputDevice8W DECLARE_INTERFACE_(IDirectInputDevice8W,IDirectInputDevice7W) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceW methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE; /*** IDirectInputDevice2W methods ***/ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE; /*** IDirectInputDevice7W methods ***/ STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE; STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE; /*** IDirectInputDevice8W methods ***/ STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE; STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE; STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputDevice8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputDevice8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInputDevice methods ***/ #define IDirectInputDevice8_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) #define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) #define IDirectInputDevice8_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) #define IDirectInputDevice8_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) #define IDirectInputDevice8_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputDevice8_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) #define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) #define IDirectInputDevice8_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) #define IDirectInputDevice8_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) #define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) #define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) #define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInputDevice8_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) /*** IDirectInputDevice2 methods ***/ #define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) #define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) #define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) #define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) #define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) #define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) #define IDirectInputDevice8_Escape(p,a) (p)->lpVtbl->Escape(p,a) #define IDirectInputDevice8_Poll(p) (p)->lpVtbl->Poll(p) #define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) /*** IDirectInputDevice7 methods ***/ #define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d) #define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d) /*** IDirectInputDevice8 methods ***/ #define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c) #define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->lpVtbl->SetActionMap(p,a,b,c) #define IDirectInputDevice8_GetImageInfo(p,a) (p)->lpVtbl->GetImageInfo(p,a) #else /*** IUnknown methods ***/ #define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputDevice8_AddRef(p) (p)->AddRef() #define IDirectInputDevice8_Release(p) (p)->Release() /*** IDirectInputDevice methods ***/ #define IDirectInputDevice8_GetCapabilities(p,a) (p)->GetCapabilities(a) #define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) #define IDirectInputDevice8_GetProperty(p,a,b) (p)->GetProperty(a,b) #define IDirectInputDevice8_SetProperty(p,a,b) (p)->SetProperty(a,b) #define IDirectInputDevice8_Acquire(p) (p)->Acquire() #define IDirectInputDevice8_Unacquire(p) (p)->Unacquire() #define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) #define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) #define IDirectInputDevice8_SetDataFormat(p,a) (p)->SetDataFormat(a) #define IDirectInputDevice8_SetEventNotification(p,a) (p)->SetEventNotification(a) #define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) #define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) #define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInputDevice8_Initialize(p,a,b,c) (p)->Initialize(a,b,c) /*** IDirectInputDevice2 methods ***/ #define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) #define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) #define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) #define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) #define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) #define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) #define IDirectInputDevice8_Escape(p,a) (p)->Escape(a) #define IDirectInputDevice8_Poll(p) (p)->Poll() #define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) /*** IDirectInputDevice7 methods ***/ #define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d) #define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d) /*** IDirectInputDevice8 methods ***/ #define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c) #define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->SetActionMap(a,b,c) #define IDirectInputDevice8_GetImageInfo(p,a) (p)->GetImageInfo(a) #endif /* "Standard" Mouse report... */ typedef struct DIMOUSESTATE { LONG lX; LONG lY; LONG lZ; BYTE rgbButtons[4]; } DIMOUSESTATE; /* "Standard" Mouse report for DInput 7... */ typedef struct DIMOUSESTATE2 { LONG lX; LONG lY; LONG lZ; BYTE rgbButtons[8]; } DIMOUSESTATE2; #define DIMOFS_X FIELD_OFFSET(DIMOUSESTATE, lX) #define DIMOFS_Y FIELD_OFFSET(DIMOUSESTATE, lY) #define DIMOFS_Z FIELD_OFFSET(DIMOUSESTATE, lZ) #define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0) #define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1) #define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2) #define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3) #define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4) #define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5) #define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6) #define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7) /* New DirectInput8 mouse definitions */ #define DIMOUSE_XAXISAB (0x82000200 | DIMOFS_X) #define DIMOUSE_YAXISAB (0x82000200 | DIMOFS_Y) #define DIMOUSE_XAXIS (0x82000300 | DIMOFS_X) #define DIMOUSE_YAXIS (0x82000300 | DIMOFS_Y) #define DIMOUSE_WHEEL (0x82000300 | DIMOFS_Z) #define DIMOUSE_BUTTON0 (0x82000400 | DIMOFS_BUTTON0) #define DIMOUSE_BUTTON1 (0x82000400 | DIMOFS_BUTTON1) #define DIMOUSE_BUTTON2 (0x82000400 | DIMOFS_BUTTON2) #define DIMOUSE_BUTTON3 (0x82000400 | DIMOFS_BUTTON3) #define DIMOUSE_BUTTON4 (0x82000400 | DIMOFS_BUTTON4) #define DIMOUSE_BUTTON5 (0x82000400 | DIMOFS_BUTTON5) #define DIMOUSE_BUTTON6 (0x82000400 | DIMOFS_BUTTON6) #define DIMOUSE_BUTTON7 (0x82000400 | DIMOFS_BUTTON7) #ifdef __cplusplus extern "C" { #endif extern const DIDATAFORMAT c_dfDIMouse; extern const DIDATAFORMAT c_dfDIMouse2; /* DX 7 */ extern const DIDATAFORMAT c_dfDIKeyboard; extern const DIDATAFORMAT c_dfDIJoystick; extern const DIDATAFORMAT c_dfDIJoystick2; #ifdef __cplusplus }; #endif #define DIAXIS_ANY_X_1 0xFF00C201 #define DIAXIS_ANY_X_2 0xFF00C202 #define DIAXIS_ANY_Y_1 0xFF014201 #define DIAXIS_ANY_Y_2 0xFF014202 #define DIAXIS_ANY_Z_1 0xFF01C201 #define DIAXIS_ANY_Z_2 0xFF01C202 #define DIAXIS_ANY_R_1 0xFF024201 #define DIAXIS_ANY_R_2 0xFF024202 #define DIAXIS_ANY_U_1 0xFF02C201 #define DIAXIS_ANY_U_2 0xFF02C202 #define DIAXIS_ANY_V_1 0xFF034201 #define DIAXIS_ANY_V_2 0xFF034202 #define DIAXIS_ANY_A_1 0xFF03C201 #define DIAXIS_ANY_A_2 0xFF03C202 #define DIAXIS_ANY_B_1 0xFF044201 #define DIAXIS_ANY_B_2 0xFF044202 #define DIAXIS_ANY_C_1 0xFF04C201 #define DIAXIS_ANY_C_2 0xFF04C202 #define DIAXIS_ANY_S_1 0xFF054201 #define DIAXIS_ANY_S_2 0xFF054202 #define DIAXIS_ANY_1 0xFF004201 #define DIAXIS_ANY_2 0xFF004202 #define DIAXIS_ANY_3 0xFF004203 #define DIAXIS_ANY_4 0xFF004204 #define DIPOV_ANY_1 0xFF004601 #define DIPOV_ANY_2 0xFF004602 #define DIPOV_ANY_3 0xFF004603 #define DIPOV_ANY_4 0xFF004604 #define DIBUTTON_ANY(instance) (0xFF004400 | (instance)) /***************************************************************************** * IDirectInputA interface */ #define INTERFACE IDirectInputA DECLARE_INTERFACE_(IDirectInputA,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputA methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectInputW interface */ #define INTERFACE IDirectInputW DECLARE_INTERFACE_(IDirectInputW,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputW methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInput_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInput_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInput methods ***/ #define IDirectInput_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectInput_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) #define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInput_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #else /*** IUnknown methods ***/ #define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInput_AddRef(p) (p)->AddRef() #define IDirectInput_Release(p) (p)->Release() /*** IDirectInput methods ***/ #define IDirectInput_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectInput_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) #define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInput_Initialize(p,a,b) (p)->Initialize(a,b) #endif /***************************************************************************** * IDirectInput2A interface */ #define INTERFACE IDirectInput2A DECLARE_INTERFACE_(IDirectInput2A,IDirectInputA) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputA methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; /*** IDirectInput2A methods ***/ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectInput2W interface */ #define INTERFACE IDirectInput2W DECLARE_INTERFACE_(IDirectInput2W,IDirectInputW) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputW methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; /*** IDirectInput2W methods ***/ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInput2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInput2_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInput methods ***/ #define IDirectInput2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectInput2_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) #define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInput2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) /*** IDirectInput2 methods ***/ #define IDirectInput2_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInput2_AddRef(p) (p)->AddRef() #define IDirectInput2_Release(p) (p)->Release() /*** IDirectInput methods ***/ #define IDirectInput2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectInput2_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) #define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInput2_Initialize(p,a,b) (p)->Initialize(a,b) /*** IDirectInput2 methods ***/ #define IDirectInput2_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) #endif /***************************************************************************** * IDirectInput7A interface */ #define INTERFACE IDirectInput7A DECLARE_INTERFACE_(IDirectInput7A,IDirectInput2A) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputA methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; /*** IDirectInput2A methods ***/ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE; /*** IDirectInput7A methods ***/ STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectInput7W interface */ #define INTERFACE IDirectInput7W DECLARE_INTERFACE_(IDirectInput7W,IDirectInput2W) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputW methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; /*** IDirectInput2W methods ***/ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE; /*** IDirectInput7W methods ***/ STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInput7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInput7_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInput methods ***/ #define IDirectInput7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectInput7_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) #define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInput7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) /*** IDirectInput2 methods ***/ #define IDirectInput7_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) /*** IDirectInput7 methods ***/ #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInput7_AddRef(p) (p)->AddRef() #define IDirectInput7_Release(p) (p)->Release() /*** IDirectInput methods ***/ #define IDirectInput7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectInput7_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) #define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInput7_Initialize(p,a,b) (p)->Initialize(a,b) /*** IDirectInput2 methods ***/ #define IDirectInput7_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) /*** IDirectInput7 methods ***/ #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d) #endif /***************************************************************************** * IDirectInput8A interface */ #define INTERFACE IDirectInput8A DECLARE_INTERFACE_(IDirectInput8A,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInput8A methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8A *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE; STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR ptszUserName, LPDIACTIONFORMATA lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectInput8W interface */ #define INTERFACE IDirectInput8W DECLARE_INTERFACE_(IDirectInput8W,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInput8W methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8W *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE; STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR ptszUserName, LPDIACTIONFORMATW lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE; STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInput8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInput8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInput8 methods ***/ #define IDirectInput8_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectInput8_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) #define IDirectInput8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInput8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectInput8_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) #define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e) #define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInput8_AddRef(p) (p)->AddRef() #define IDirectInput8_Release(p) (p)->Release() /*** IDirectInput8 methods ***/ #define IDirectInput8_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectInput8_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) #define IDirectInput8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInput8_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectInput8_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) #define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e) #define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d) #endif /* Export functions */ #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI DirectInput8Create(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN); HRESULT WINAPI DirectInputCreateA(HINSTANCE,DWORD,LPDIRECTINPUTA *,LPUNKNOWN); HRESULT WINAPI DirectInputCreateW(HINSTANCE,DWORD,LPDIRECTINPUTW *,LPUNKNOWN); #define DirectInputCreate WINELIB_NAME_AW(DirectInputCreate) HRESULT WINAPI DirectInputCreateEx(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN); #ifdef __cplusplus }; #endif #endif /* __DINPUT_INCLUDED__ */ ================================================ FILE: wine/windows/dinputd.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DINPUTD_INCLUDED__ #define __DINPUTD_INCLUDED__ #define COM_NO_WINDOWS_H #include #ifndef DIRECTINPUT_VERSION #define DIRECTINPUT_VERSION 0x0800 #endif DEFINE_GUID(IID_IDirectInputJoyConfig8, 0xEB0D7DFA,0x1990,0x4F27,0xB4,0xD6,0xED,0xF2,0xEE,0xC4,0xA4,0x4C); typedef struct IDirectInputJoyConfig8 *LPDIRECTINPUTJOYCONFIG8; typedef BOOL (CALLBACK *LPDIJOYTYPECALLBACK)(LPCWSTR, LPVOID); #define MAX_JOYSTRING 256 #ifndef MAX_JOYSTICKOEMVXDNAME #define MAX_JOYSTICKOEMVXDNAME 260 #endif #define JOY_POV_NUMDIRS 4 #define JOY_POVVAL_FORWARD 0 #define JOY_POVVAL_BACKWARD 1 #define JOY_POVVAL_LEFT 2 #define JOY_POVVAL_RIGHT 3 #define DIERR_NOMOREITEMS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NO_MORE_ITEMS) typedef struct joypos_tag { DWORD dwX; DWORD dwY; DWORD dwZ; DWORD dwR; DWORD dwU; DWORD dwV; } JOYPOS, *LPJOYPOS; typedef struct joyrange_tag { JOYPOS jpMin; JOYPOS jpMax; JOYPOS jpCenter; } JOYRANGE, *LPJOYRANGE; typedef struct joyreguservalues_tag { DWORD dwTimeOut; JOYRANGE jrvRanges; JOYPOS jpDeadZone; } JOYREGUSERVALUES, *LPJOYREGUSERVALUES; typedef struct joyreghwsettings_tag { DWORD dwFlags; DWORD dwNumButtons; } JOYREGHWSETTINGS, *LPJOYHWSETTINGS; typedef struct joyreghwvalues_tag { JOYRANGE jrvHardware; DWORD dwPOVValues[JOY_POV_NUMDIRS]; DWORD dwCalFlags; } JOYREGHWVALUES, *LPJOYREGHWVALUES; typedef struct joyreghwconfig_tag { JOYREGHWSETTINGS hws; DWORD dwUsageSettings; JOYREGHWVALUES hwv; DWORD dwType; DWORD dwReserved; } JOYREGHWCONFIG, *LPJOYREGHWCONFIG; typedef struct DIJOYTYPEINFO_DX5 { DWORD dwSize; JOYREGHWSETTINGS hws; CLSID clsidConfig; WCHAR wszDisplayName[MAX_JOYSTRING]; WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME]; } DIJOYTYPEINFO_DX5, *LPDIJOYTYPEINFO_DX5; typedef const DIJOYTYPEINFO_DX5 *LPCDIJOYTYPEINFO_DX5; typedef struct DIJOYTYPEINFO_DX6 { DWORD dwSize; JOYREGHWSETTINGS hws; CLSID clsidConfig; WCHAR wszDisplayName[MAX_JOYSTRING]; WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME]; WCHAR wszHardwareId[MAX_JOYSTRING]; DWORD dwFlags1; } DIJOYTYPEINFO_DX6, *LPDIJOYTYPEINFO_DX6; typedef const DIJOYTYPEINFO_DX6 *LPCDIJOYTYPEINFO_DX6; typedef struct DIJOYTYPEINFO { DWORD dwSize; JOYREGHWSETTINGS hws; CLSID clsidConfig; WCHAR wszDisplayName[MAX_JOYSTRING]; WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME]; WCHAR wszHardwareId[MAX_JOYSTRING]; DWORD dwFlags1; DWORD dwFlags2; WCHAR wszMapFile[MAX_JOYSTRING]; } DIJOYTYPEINFO, *LPDIJOYTYPEINFO; typedef const DIJOYTYPEINFO *LPCDIJOYTYPEINFO; #define DIJC_GUIDINSTANCE 0x00000001 #define DIJC_REGHWCONFIGTYPE 0x00000002 #define DIJC_GAIN 0x00000004 #define DIJC_CALLOUT 0x00000008 #define DIJC_WDMGAMEPORT 0x00000010 typedef struct DIJOYCONFIG_DX5 { DWORD dwSize; GUID guidInstance; JOYREGHWCONFIG hwc; DWORD dwGain; WCHAR wszType[MAX_JOYSTRING]; WCHAR wszCallout[MAX_JOYSTRING]; } DIJOYCONFIG_DX5, *LPDIJOYCONFIG_DX5; typedef const DIJOYCONFIG_DX5 *LPCDIJOYCONFIG_DX5; typedef struct DIJOYCONFIG { DWORD dwSize; GUID guidInstance; JOYREGHWCONFIG hwc; DWORD dwGain; WCHAR wszType[MAX_JOYSTRING]; WCHAR wszCallout[MAX_JOYSTRING]; GUID guidGameport; } DIJOYCONFIG, *LPDIJOYCONFIG; typedef const DIJOYCONFIG *LPCDIJOYCONFIG; typedef struct DIJOYUSERVALUES { DWORD dwSize; JOYREGUSERVALUES ruv; WCHAR wszGlobalDriver[MAX_JOYSTRING]; WCHAR wszGameportEmulator[MAX_JOYSTRING]; } DIJOYUSERVALUES, *LPDIJOYUSERVALUES; typedef const DIJOYUSERVALUES *LPCDIJOYUSERVALUES; /***************************************************************************** * IDirectInputJoyConfig8 interface */ #define INTERFACE IDirectInputJoyConfig8 DECLARE_INTERFACE_(IDirectInputJoyConfig8, IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputJoyConfig8 methods ***/ STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; STDMETHOD(SendNotify)(THIS) PURE; STDMETHOD(EnumTypes)(THIS_ LPDIJOYTYPECALLBACK, LPVOID) PURE; STDMETHOD(GetTypeInfo)(THIS_ LPCWSTR, LPDIJOYTYPEINFO, DWORD) PURE; STDMETHOD(SetTypeInfo)(THIS_ LPCWSTR, LPCDIJOYTYPEINFO, DWORD, LPWSTR) PURE; STDMETHOD(DeleteType)(THIS_ LPCWSTR) PURE; STDMETHOD(GetConfig)(THIS_ UINT, LPDIJOYCONFIG, DWORD) PURE; STDMETHOD(SetConfig)(THIS_ UINT, LPCDIJOYCONFIG, DWORD) PURE; STDMETHOD(DeleteConfig)(THIS_ UINT) PURE; STDMETHOD(GetUserValues)(THIS_ LPDIJOYUSERVALUES, DWORD) PURE; STDMETHOD(SetUserValues)(THIS_ LPCDIJOYUSERVALUES, DWORD) PURE; STDMETHOD(AddNewHardware)(THIS_ HWND, REFGUID) PURE; STDMETHOD(OpenTypeKey)(THIS_ LPCWSTR, DWORD, PHKEY) PURE; STDMETHOD(OpenAppStatusKey)(THIS_ PHKEY) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectInputJoyConfig8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputJoyConfig8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputJoyConfig8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectInputJoyConfig8 methods ***/ #define IDirectInputJoyConfig8_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputJoyConfig8_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputJoyConfig8_SendNotify(p) (p)->lpVtbl->SendNotify(p) #define IDirectInputJoyConfig8_EnumTypes(p,a,b) (p)->lpVtbl->EnumTypes(p,a,b) #define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c) (p)->lpVtbl->GetTypeInfo(p,a,b,c) #define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d) (p)->lpVtbl->SetTypeInfo(p,a,b,c,d) #define IDirectInputJoyConfig8_DeleteType(p,a) (p)->lpVtbl->DeleteType(p,a) #define IDirectInputJoyConfig8_GetConfig(p,a,b,c) (p)->lpVtbl->GetConfig(p,a,b,c) #define IDirectInputJoyConfig8_SetConfig(p,a,b,c) (p)->lpVtbl->SetConfig(p,a,b,c) #define IDirectInputJoyConfig8_DeleteConfig(p,a) (p)->lpVtbl->DeleteConfig(p,a) #define IDirectInputJoyConfig8_GetUserValues(p,a,b) (p)->lpVtbl->GetUserValues(p,a,b) #define IDirectInputJoyConfig8_SetUserValues(p,a,b) (p)->lpVtbl->SetUserValues(p,a,b) #define IDirectInputJoyConfig8_AddNewHardware(p,a,b) (p)->lpVtbl->AddNewHardware(p,a,b) #define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c) (p)->lpVtbl->OpenTypeKey(p,a,b,c) #define IDirectInputJoyConfig8_OpenAppStatusKey(p,a) (p)->lpVtbl->OpenAppStatusKey(p,a) #else /*** IUnknown methods ***/ #define IDirectInputJoyConfig8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputJoyConfig8_AddRef(p) (p)->AddRef() #define IDirectInputJoyConfig8_Release(p) (p)->Release() /*** IDirectInputJoyConfig8 methods ***/ #define IDirectInputJoyConfig8_Acquire(p) (p)->Acquire() #define IDirectInputJoyConfig8_Unacquire(p) (p)->Unacquire() #define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputJoyConfig8_SendNotify(p) (p)->SendNotify() #define IDirectInputJoyConfig8_EnumTypes(p,a,b) (p)->EnumTypes(a,b) #define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c) (p)->GetTypeInfo(a,b,c) #define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d) (p)->SetTypeInfo(a,b,c,d) #define IDirectInputJoyConfig8_DeleteType(p,a) (p)->DeleteType(a) #define IDirectInputJoyConfig8_GetConfig(p,a,b,c) (p)->GetConfig(a,b,c) #define IDirectInputJoyConfig8_SetConfig(p,a,b,c) (p)->SetConfig(a,b,c) #define IDirectInputJoyConfig8_DeleteConfig(p,a) (p)->DeleteConfig(a) #define IDirectInputJoyConfig8_GetUserValues(p,a,b) (p)->GetUserValues(a,b) #define IDirectInputJoyConfig8_SetUserValues(p,a,b) (p)->SetUserValues(a,b) #define IDirectInputJoyConfig8_AddNewHardware(p,a,b) (p)->AddNewHardware(a,b) #define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c) (p)->OpenTypeKey(a,b,c) #define IDirectInputJoyConfig8_OpenAppStatusKey(p,a) (p)->OpenAppStatusKey(a) #endif #endif /* __DINPUTD_INCLUDED__ */ ================================================ FILE: wine/windows/dispdib.h ================================================ /* * DISPDIB.dll * * Copyright 1998 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DISPDIB_H #define __WINE_DISPDIB_H /* error codes */ #define DISPLAYDIB_NOERROR 0x0000 #define DISPLAYDIB_NOTSUPPORTED 0x0001 #define DISPLAYDIB_INVALIDDIB 0x0002 #define DISPLAYDIB_INVALIDFORMAT 0x0003 #define DISPLAYDIB_INVALIDTASK 0x0004 /* flags */ #define DISPLAYDIB_NOPALETTE 0x0010 #define DISPLAYDIB_NOCENTER 0x0020 #define DISPLAYDIB_NOWAIT 0x0040 #define DISPLAYDIB_BEGIN 0x8000 #define DISPLAYDIB_END 0x4000 #define DISPLAYDIB_MODE 0x000F /* mask */ #define DISPLAYDIB_MODE_DEFAULT 0x0000 #define DISPLAYDIB_MODE_320x200x8 0x0001 #define DISPLAYDIB_MODE_320x240x8 0x0005 WORD WINAPI DisplayDib( LPBITMAPINFO lpbi, LPSTR lpBits, WORD wFlags ); #endif /* __WINE_DISPDIB_H */ ================================================ FILE: wine/windows/dispex.idl ================================================ /* * Copyright 2004 Kevin Koltzau * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "ocidl.idl"; import "oleidl.idl"; import "oaidl.idl"; import "servprov.idl"; #endif cpp_quote("DEFINE_GUID(SID_VariantConversion, 0x1f101481,0xbccd,0x11d0,0x93,0x36,0x00,0xa0,0xc9,0xd,0xca,0xa9);") cpp_quote("DEFINE_GUID(SID_GetCaller, 0x4717cc40,0xbcb9,0x11d0,0x93,0x36,0x00,0xa0,0xc9,0xd,0xca,0xa9);") cpp_quote("#define fdexNameCaseSensitive 0x00000001L") cpp_quote("#define fdexNameEnsure 0x00000002L") cpp_quote("#define fdexNameImplicit 0x00000004L") cpp_quote("#define fdexNameCaseInsensitive 0x00000008L") cpp_quote("#define fdexNameInternal 0x00000010L") cpp_quote("#define fdexNameNoDynamicProperties 0x00000020L") cpp_quote("#define fdexPropCanGet 0x00000001L") cpp_quote("#define fdexPropCannotGet 0x00000002L") cpp_quote("#define fdexPropCanPut 0x00000004L") cpp_quote("#define fdexPropCannotPut 0x00000008L") cpp_quote("#define fdexPropCanPutRef 0x00000010L") cpp_quote("#define fdexPropCannotPutRef 0x00000020L") cpp_quote("#define fdexPropNoSideEffects 0x00000040L") cpp_quote("#define fdexPropDynamicType 0x00000080L") cpp_quote("#define fdexPropCanCall 0x00000100L") cpp_quote("#define fdexPropCannotCall 0x00000200L") cpp_quote("#define fdexPropCanConstruct 0x00000400L") cpp_quote("#define fdexPropCannotConstruct 0x00000800L") cpp_quote("#define fdexPropCanSourceEvents 0x00001000L") cpp_quote("#define fdexPropCannotSourceEvents 0x00002000L") cpp_quote("#define fdexEnumDefault 0x00000001L") cpp_quote("#define fdexEnumAll 0x00000002L") cpp_quote("#define grfdexPropCanAll \\") cpp_quote(" (fdexPropCanGet | fdexPropCanPut | fdexPropCanPutRef | \\") cpp_quote(" fdexPropCanCall | fdexPropCanConstruct | fdexPropCanSourceEvents)") cpp_quote("#define grfdexPropCannotAll \\") cpp_quote(" (fdexPropCannotGet | fdexPropCannotPut | fdexPropCannotPutRef | \\") cpp_quote(" fdexPropCannotCall | fdexPropCannotConstruct | fdexPropCannotSourceEvents)") cpp_quote("#define grfdexPropExtraAll \\") cpp_quote(" (fdexPropNoSideEffects | fdexPropDynamicType)") cpp_quote("#define grfdexPropAll \\") cpp_quote(" (grfdexPropCanAll | grfdexPropCannotAll | grfdexPropExtraAll)") cpp_quote("#define DISPATCH_CONSTRUCT 0x4000") cpp_quote("#define DISPID_THIS (-613)") cpp_quote("#define DISPID_STARTENUM DISPID_UNKNOWN") [ object, uuid(A6EF9860-C720-11d0-9337-00A0C90DCAA9), pointer_default(unique) ] interface IDispatchEx : IDispatch { HRESULT GetDispID( [in] BSTR bstrName, [in] DWORD grfdex, [out] DISPID *pid); [local] HRESULT InvokeEx( [in, annotation("__in")] DISPID id, [in, annotation("__in")] LCID lcid, [in, annotation("__in")] WORD wFlags, [in, annotation("__in")] DISPPARAMS *pdp, [out, annotation("__out_opt")] VARIANT *pvarRes, [out, annotation("__out_opt")] EXCEPINFO *pei, [in, unique, annotation("__in_opt")] IServiceProvider *pspCaller); [call_as(InvokeEx)] HRESULT RemoteInvokeEx( [in] DISPID id, [in] LCID lcid, [in] DWORD dwFlags, [in] DISPPARAMS *pdp, [out] VARIANT *pvarRes, [out] EXCEPINFO *pei, [in, unique] IServiceProvider *pspCaller, [in] UINT cvarRefArg, [in, size_is(cvarRefArg)] UINT *rgiRefArg, [in, out, size_is(cvarRefArg)] VARIANT *rgvarRefArg); HRESULT DeleteMemberByName( [in] BSTR bstrName, [in] DWORD grfdex); HRESULT DeleteMemberByDispID( [in] DISPID id); HRESULT GetMemberProperties( [in] DISPID id, [in] DWORD grfdexFetch, [out] DWORD *pgrfdex); HRESULT GetMemberName( [in] DISPID id, [out] BSTR *pbstrName); HRESULT GetNextDispID( [in] DWORD grfdex, [in] DISPID id, [out] DISPID *pid); HRESULT GetNameSpaceParent([out] IUnknown **ppunk); } [ object, uuid(A6EF9861-C720-11d0-9337-00A0C90DCAA9), pointer_default(unique) ] interface IDispError : IUnknown { HRESULT QueryErrorInfo( [in] GUID guidErrorType, [out] IDispError **ppde); HRESULT GetNext( [out] IDispError **ppde); HRESULT GetHresult( [out] HRESULT *phr); HRESULT GetSource( [out] BSTR *pbstrSource); HRESULT GetHelpInfo( [out] BSTR *pbstrFileName, [out] DWORD *pdwContext); HRESULT GetDescription( [out] BSTR *pbstrDescription); } [ object, uuid(A6EF9862-C720-11d0-9337-00A0C90DCAA9), pointer_default(unique) ] interface IVariantChangeType : IUnknown { HRESULT ChangeType( [in, out, unique] VARIANT *pvarDst, [in, unique] VARIANT *pvarSrc, [in] LCID lcid, [in] VARTYPE vtNew); } [ object, uuid(CA04B7E6-0D21-11d1-8CC5-00C04FC2B085), pointer_default(unique) ] interface IObjectIdentity : IUnknown { HRESULT IsEqualObject( [in] IUnknown *punk); } [ object, uuid(c5598e60-b307-11d1-b27d-006008c3fbfb), pointer_default(unique) ] interface ICanHandleException : IUnknown { HRESULT CanHandleException( [in] EXCEPINFO *pExcepInfo, [in] VARIANT *pvar); } [ object, uuid(10e2414a-ec59-49d2-bc51-5add2c36febc), pointer_default(unique) ] interface IProvideRuntimeContext : IUnknown { HRESULT GetCurrentSourceContext( [out] DWORD_PTR *pdwContext, [out] VARIANT_BOOL *pfExecutingGlobalCode); } ================================================ FILE: wine/windows/dlgs.h ================================================ /* * Common dialog's dialog control ID numbers * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DLGS_H #define __WINE_DLGS_H #define ctlFirst 0x0400 #define ctlLast 0x04ff /* Push buttons */ #define psh1 0x0400 #define psh2 0x0401 #define psh3 0x0402 #define psh4 0x0403 #define psh5 0x0404 #define psh6 0x0405 #define psh7 0x0406 #define psh8 0x0407 #define psh9 0x0408 #define psh10 0x0409 #define psh11 0x040a #define psh12 0x040b #define psh13 0x040c #define psh14 0x040d #define psh15 0x040e #define pshHelp psh15 #define psh16 0x040f /* Checkboxes */ #define chx1 0x0410 #define chx2 0x0411 #define chx3 0x0412 #define chx4 0x0413 #define chx5 0x0414 #define chx6 0x0415 #define chx7 0x0416 #define chx8 0x0417 #define chx9 0x0418 #define chx10 0x0419 #define chx11 0x041a #define chx12 0x041b #define chx13 0x041c #define chx14 0x041d #define chx15 0x041e #define chx16 0x041f /* Radio buttons */ #define rad1 0x0420 #define rad2 0x0421 #define rad3 0x0422 #define rad4 0x0423 #define rad5 0x0424 #define rad6 0x0425 #define rad7 0x0426 #define rad8 0x0427 #define rad9 0x0428 #define rad10 0x0429 #define rad11 0x042a #define rad12 0x042b #define rad13 0x042c #define rad14 0x042d #define rad15 0x042e #define rad16 0x042f /* Groups, frames, rectangles, and icons */ #define grp1 0x0430 #define grp2 0x0431 #define grp3 0x0432 #define grp4 0x0433 #define frm1 0x0434 #define frm2 0x0435 #define frm3 0x0436 #define frm4 0x0437 #define rct1 0x0438 #define rct2 0x0439 #define rct3 0x043a #define rct4 0x043b #define ico1 0x043c #define ico2 0x043d #define ico3 0x043e #define ico4 0x043f /* Static text */ #define stc1 0x0440 #define stc2 0x0441 #define stc3 0x0442 #define stc4 0x0443 #define stc5 0x0444 #define stc6 0x0445 #define stc7 0x0446 #define stc8 0x0447 #define stc9 0x0448 #define stc10 0x0449 #define stc11 0x044a #define stc12 0x044b #define stc13 0x044c #define stc14 0x044d #define stc15 0x044e #define stc16 0x044f #define stc17 0x0450 #define stc18 0x0451 #define stc19 0x0452 #define stc20 0x0453 #define stc21 0x0454 #define stc22 0x0455 #define stc23 0x0456 #define stc24 0x0457 #define stc25 0x0458 #define stc26 0x0459 #define stc27 0x045a #define stc28 0x045b #define stc29 0x045c #define stc30 0x045d #define stc31 0x045e #define stc32 0x045f /* Listboxes */ #define lst1 0x0460 #define lst2 0x0461 #define lst3 0x0462 #define lst4 0x0463 #define lst5 0x0464 #define lst6 0x0465 #define lst7 0x0466 #define lst8 0x0467 #define lst9 0x0468 #define lst10 0x0469 #define lst11 0x046a #define lst12 0x046b #define lst13 0x046c #define lst14 0x046d #define lst15 0x046e #define lst16 0x046f /* Combo boxes */ #define cmb1 0x0470 #define cmb2 0x0471 #define cmb3 0x0472 #define cmb4 0x0473 #define cmb5 0x0474 #define cmb6 0x0475 #define cmb7 0x0476 #define cmb8 0x0477 #define cmb9 0x0478 #define cmb10 0x0479 #define cmb11 0x047a #define cmb12 0x047b #define cmb13 0x047c #define cmb14 0x047d #define cmb15 0x047e #define cmb16 0x047f /* Edit controls */ #define edt1 0x0480 #define edt2 0x0481 #define edt3 0x0482 #define edt4 0x0483 #define edt5 0x0484 #define edt6 0x0485 #define edt7 0x0486 #define edt8 0x0487 #define edt9 0x0488 #define edt10 0x0489 #define edt11 0x048a #define edt12 0x048b #define edt13 0x048c #define edt14 0x048d #define edt15 0x048e #define edt16 0x048f /* Scroll bars */ #define scr1 0x0490 #define scr2 0x0491 #define scr3 0x0492 #define scr4 0x0493 #define scr5 0x0494 #define scr6 0x0495 #define scr7 0x0496 #define scr8 0x0497 /* * Controls */ #define ctl1 0x04A0 /* These dialog resource ordinals really start at 0x0600, but the * RC Compiler can't handle hex for resource IDs, hence the decimal. */ #define FILEOPENORD 1536 #define MULTIFILEOPENORD 1537 #define PRINTDLGORD 1538 #define PRNSETUPDLGORD 1539 #define FINDDLGORD 1540 #define REPLACEDLGORD 1541 #define FONTDLGORD 1542 #define FORMATDLGORD31 1543 #define FORMATDLGORD30 1544 #define PAGESETUPDLGORD 1546 #define NEWFILEOPENORD 1547 #define PRINTDLGEXORD 1549 #define PAGESETUPDLGORDMOTIF 1550 #define COLORMGMTDLGORD 1551 #define NEWFILEOPENV2ORD 1552 #define NEWFILEOPENV3ORD 1553 #define NEWFORMATDLGWITHLINK 1591 #define IDC_MANAGE_LINK 1592 typedef struct tagCRGB { BYTE bRed; BYTE bGreen; BYTE bBlue; BYTE bExtra; } CRGB; #endif /* #ifdef __WINE_DLGS_H */ ================================================ FILE: wine/windows/dls1.h ================================================ /* Defines and Structures for Instrument Collection Form RIFF DLS1 * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_INCLUDE_DLS1_H #define __WINE_INCLUDE_DLS1_H /***************************************************************************** * FOURCCs */ #define FOURCC_DLS mmioFOURCC('D','L','S',' ') #define FOURCC_DLID mmioFOURCC('d','l','i','d') #define FOURCC_COLH mmioFOURCC('c','o','l','h') #define FOURCC_WVPL mmioFOURCC('w','v','p','l') #define FOURCC_PTBL mmioFOURCC('p','t','b','l') #define FOURCC_PATH mmioFOURCC('p','a','t','h') #define FOURCC_wave mmioFOURCC('w','a','v','e') #define FOURCC_LINS mmioFOURCC('l','i','n','s') #define FOURCC_INS mmioFOURCC('i','n','s',' ') #define FOURCC_INSH mmioFOURCC('i','n','s','h') #define FOURCC_LRGN mmioFOURCC('l','r','g','n') #define FOURCC_RGN mmioFOURCC('r','g','n',' ') #define FOURCC_RGNH mmioFOURCC('r','g','n','h') #define FOURCC_LART mmioFOURCC('l','a','r','t') #define FOURCC_ART1 mmioFOURCC('a','r','t','1') #define FOURCC_WLNK mmioFOURCC('w','l','n','k') #define FOURCC_WSMP mmioFOURCC('w','s','m','p') #define FOURCC_VERS mmioFOURCC('v','e','r','s') /***************************************************************************** * Flags */ #define CONN_DST_NONE 0x000 #define CONN_DST_ATTENUATION 0x001 #define CONN_DST_PITCH 0x003 #define CONN_DST_PAN 0x004 #define CONN_DST_LFO_FREQUENCY 0x104 #define CONN_DST_LFO_STARTDELAY 0x105 #define CONN_DST_EG1_ATTACKTIME 0x206 #define CONN_DST_EG1_DECAYTIME 0x207 #define CONN_DST_EG1_RELEASETIME 0x209 #define CONN_DST_EG1_SUSTAINLEVEL 0x20A #define CONN_DST_EG2_ATTACKTIME 0x30A #define CONN_DST_EG2_DECAYTIME 0x30B #define CONN_DST_EG2_RELEASETIME 0x30D #define CONN_DST_EG2_SUSTAINLEVEL 0x30E #define CONN_SRC_NONE 0x000 #define CONN_SRC_LFO 0x001 #define CONN_SRC_KEYONVELOCITY 0x002 #define CONN_SRC_KEYNUMBER 0x003 #define CONN_SRC_EG1 0x004 #define CONN_SRC_EG2 0x005 #define CONN_SRC_PITCHWHEEL 0x006 #define CONN_SRC_CC1 0x081 #define CONN_SRC_CC7 0x087 #define CONN_SRC_CC10 0x08A #define CONN_SRC_CC11 0x08B #define CONN_TRN_NONE 0x000 #define CONN_TRN_CONCAVE 0x001 #define F_INSTRUMENT_DRUMS 0x80000000 #define F_RGN_OPTION_SELFNONEXCLUSIVE 0x1 #define F_WAVELINK_PHASE_MASTER 0x1 #define F_WSMP_NO_TRUNCATION 0x1 #define F_WSMP_NO_COMPRESSION 0x2 #define POOL_CUE_NULL 0xFFFFFFFF #define WAVELINK_CHANNEL_LEFT 0x1 #define WAVELINK_CHANNEL_RIGHT 0x2 #define WLOOP_TYPE_FORWARD 0x0 /***************************************************************************** * Structures */ /* typedef definitions */ typedef struct _DLSID DLSID, *LPDLSID; typedef struct _DLSVERSION DLSVERSION, *LPDLSVERSION; typedef struct _CONNECTION CONNECTION, *LPCONNECTION; typedef struct _CONNECTIONLIST CONNECTIONLIST, *LPCONNECTIONLIST; typedef struct _RGNRANGE RGNRANGE, *LPRGNRANGE; typedef struct _MIDILOCALE MIDILOCALE, *LPMIDILOCALE; typedef struct _RGNHEADER RGNHEADER, *LPRGNHEADER; typedef struct _INSTHEADER INSTHEADER, *LPINSTHEADER; typedef struct _DLSHEADER DLSHEADER, *LPDLSHEADER; typedef struct _WAVELINK WAVELINK, *LPWAVELINK; typedef struct _POOLCUE POOLCUE, *LPPOOLCUE; typedef struct _POOLTABLE POOLTABLE, *LPPOOLTABLE; typedef struct _rwsmp WSMPL, *LPWSMPL; typedef struct _rloop WLOOP, *LPWLOOP; /* actual structures */ struct _DLSID { ULONG ulData1; USHORT usData2; USHORT usData3; BYTE abData4[8]; }; struct _DLSVERSION { DWORD dwVersionMS; DWORD dwVersionLS; }; struct _CONNECTION { USHORT usSource; USHORT usControl; USHORT usDestination; USHORT usTransform; LONG lScale; }; struct _CONNECTIONLIST { ULONG cbSize; ULONG cConnections; }; struct _RGNRANGE { USHORT usLow; USHORT usHigh; }; struct _MIDILOCALE { ULONG ulBank; ULONG ulInstrument; }; struct _RGNHEADER { RGNRANGE RangeKey; RGNRANGE RangeVelocity; USHORT fusOptions; USHORT usKeyGroup; }; struct _INSTHEADER { ULONG cRegions; MIDILOCALE Locale; }; struct _DLSHEADER { ULONG cInstruments; }; struct _WAVELINK { USHORT fusOptions; USHORT usPhaseGroup; ULONG ulChannel; ULONG ulTableIndex; }; struct _POOLCUE { ULONG ulOffset; }; struct _POOLTABLE { ULONG cbSize; ULONG cCues; }; struct _rwsmp { ULONG cbSize; USHORT usUnityNote; SHORT sFineTune; LONG lAttenuation; ULONG fulOptions; ULONG cSampleLoops; }; struct _rloop { ULONG cbSize; ULONG ulType; ULONG ulStart; ULONG ulLength; }; #endif /* __WINE_INCLUDE_DLS1_H */ ================================================ FILE: wine/windows/dls2.h ================================================ /* Defines and Structures for Instrument Collection Form RIFF DLS2 * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_INCLUDE_DLS2_H #define __WINE_INCLUDE_DLS2_H /***************************************************************************** * DLSIDs - property set */ DEFINE_GUID(DLSID_GMInHardware, 0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(DLSID_GSInHardware, 0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(DLSID_ManufacturersID, 0xb03e1181,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8); DEFINE_GUID(DLSID_ProductID, 0xb03e1182,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8); DEFINE_GUID(DLSID_SampleMemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(DLSID_SupportsDLS1, 0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(DLSID_SupportsDLS2, 0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(DLSID_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8); DEFINE_GUID(DLSID_XGInHardware, 0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); /***************************************************************************** * FOURCCs */ #define FOURCC_RGN2 mmioFOURCC('r','g','n','2') #define FOURCC_LAR2 mmioFOURCC('l','a','r','2') #define FOURCC_ART2 mmioFOURCC('a','r','t','2') #define FOURCC_CDL mmioFOURCC('c','d','l',' ') #define FOURCC_DLID mmioFOURCC('d','l','i','d') /***************************************************************************** * Flags */ #define CONN_DST_GAIN 0x001 #define CONN_DST_KEYNUMBER 0x005 #define CONN_DST_LEFT 0x010 #define CONN_DST_RIGHT 0x011 #define CONN_DST_CENTER 0x012 #define CONN_DST_LEFTREAR 0x013 #define CONN_DST_RIGHTREAR 0x014 #define CONN_DST_LFE_CHANNEL 0x015 #define CONN_DST_CHORUS 0x080 #define CONN_DST_REVERB 0x081 #define CONN_DST_VIB_FREQUENCY 0x114 #define CONN_DST_VIB_STARTDELAY 0x115 #define CONN_DST_EG1_DELAYTIME 0x20B #define CONN_DST_EG1_HOLDTIME 0x20C #define CONN_DST_EG1_SHUTDOWNTIME 0x20D #define CONN_DST_EG2_DELAYTIME 0x30F #define CONN_DST_EG2_HOLDTIME 0x310 #define CONN_DST_FILTER_CUTOFF 0x500 #define CONN_DST_FILTER_Q 0x501 #define CONN_SRC_POLYPRESSURE 0x007 #define CONN_SRC_CHANNELPRESSURE 0x008 #define CONN_SRC_VIBRATO 0x009 #define CONN_SRC_MONOPRESSURE 0x00A #define CONN_SRC_CC91 0x0DB #define CONN_SRC_CC93 0x0DD #define CONN_TRN_CONVEX 0x002 #define CONN_TRN_SWITCH 0x003 #define DLS_CDL_AND 0x01 #define DLS_CDL_OR 0x02 #define DLS_CDL_XOR 0x03 #define DLS_CDL_ADD 0x04 #define DLS_CDL_SUBTRACT 0x05 #define DLS_CDL_MULTIPLY 0x06 #define DLS_CDL_DIVIDE 0x07 #define DLS_CDL_LOGICAL_AND 0x08 #define DLS_CDL_LOGICAL_OR 0x09 #define DLS_CDL_LT 0x0A #define DLS_CDL_LE 0x0B #define DLS_CDL_GT 0x0C #define DLS_CDL_GE 0x0D #define DLS_CDL_EQ 0x0E #define DLS_CDL_NOT 0x0F #define DLS_CDL_CONST 0x10 #define DLS_CDL_QUERY 0x11 #define DLS_CDL_QUERYSUPPORTED 0x12 #define F_WAVELINK_MULTICHANNEL 0x2 #define WLOOP_TYPE_RELEASE 0x1 #endif /* __WINE_INCLUDE_DLS2_H */ ================================================ FILE: wine/windows/dmdls.h ================================================ /* DirectMusic DLS Download Definitions * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DMUSIC_DLS_H #define __WINE_DMUSIC_DLS_H #include /***************************************************************************** * Typedef definitions */ typedef LONG GCENT; typedef LONG PCENT; typedef LONG PERCENT; typedef LONG TCENT; #ifndef REFERENCE_TIME_DEFINED #define REFERENCE_TIME_DEFINED typedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME; #endif /***************************************************************************** * FOURCC definition */ #ifndef mmioFOURCC typedef DWORD FOURCC; #define mmioFOURCC(ch0,ch1,ch2,ch3) \ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) #endif /***************************************************************************** * Flags */ #define DMUS_DEFAULT_SIZE_OFFSETTABLE 0x1 #define DMUS_DOWNLOADINFO_INSTRUMENT 0x1 #define DMUS_DOWNLOADINFO_WAVE 0x2 #define DMUS_DOWNLOADINFO_INSTRUMENT2 0x3 #define DMUS_DOWNLOADINFO_WAVEARTICULATION 0x4 #define DMUS_DOWNLOADINFO_STREAMINGWAVE 0x5 #define DMUS_DOWNLOADINFO_ONESHOTWAVE 0x6 #define DMUS_INSTRUMENT_GM_INSTRUMENT 0x1 #define DMUS_MIN_DATA_SIZE 0x4 /***************************************************************************** * Structures */ /* typedef definitions */ typedef struct _DMUS_DOWNLOADINFO DMUS_DOWNLOADINFO, *LPDMUS_DOWNLOADINFO; typedef struct _DMUS_OFFSETTABLE DMUS_OFFSETTABLE, *LPDMUS_OFFSETTABLE; typedef struct _DMUS_INSTRUMENT DMUS_INSTRUMENT, *LPDMUS_INSTRUMENT; typedef struct _DMUS_REGION DMUS_REGION, *LPDMUS_REGION; typedef struct _DMUS_LFOPARAMS DMUS_LFOPARAMS, *LPDMUS_LFOPARAMS; typedef struct _DMUS_VEGPARAMS DMUS_VEGPARAMS, *LPDMUS_VEGPARAMS; typedef struct _DMUS_PEGPARAMS DMUS_PEGPARAMS, *LPDMUS_PEGPARAMS; typedef struct _DMUS_MSCPARAMS DMUS_MSCPARAMS, *LPDMUS_MSCPARAMS; typedef struct _DMUS_ARTICPARAMS DMUS_ARTICPARAMS, *LPDMUS_ARTICPARAMS; typedef struct _DMUS_ARTICULATION DMUS_ARTICULATION, *LPDMUS_ARTICULATION; typedef struct _DMUS_ARTICULATION2 DMUS_ARTICULATION2, *LPDMUS_ARTICULATION2; typedef struct _DMUS_EXTENSIONCHUNK DMUS_EXTENSIONCHUNK, *LPDMUS_EXTENSIONCHUNK; typedef struct _DMUS_COPYRIGHT DMUS_COPYRIGHT, *LPDMUS_COPYRIGHT; typedef struct _DMUS_WAVEDATA DMUS_WAVEDATA, *LPDMUS_WAVEDATA; typedef struct _DMUS_WAVE DMUS_WAVE, *LPDMUS_WAVE; typedef struct _DMUS_NOTERANGE DMUS_NOTERANGE, *LPDMUS_NOTERANGE; typedef struct _DMUS_WAVEARTDL DMUS_WAVEARTDL, *LPDMUS_WAVEARTDL; typedef struct _DMUS_WAVEDL DMUS_WAVEDL, *LPDMUS_WAVEDL; /* actual structures */ struct _DMUS_DOWNLOADINFO { DWORD dwDLType; DWORD dwDLId; DWORD dwNumOffsetTableEntries; DWORD cbSize; }; struct _DMUS_OFFSETTABLE { ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE]; }; struct _DMUS_INSTRUMENT { ULONG ulPatch; ULONG ulFirstRegionIdx; ULONG ulGlobalArtIdx; ULONG ulFirstExtCkIdx; ULONG ulCopyrightIdx; ULONG ulFlags; }; struct _DMUS_REGION { RGNRANGE RangeKey; RGNRANGE RangeVelocity; USHORT fusOptions; USHORT usKeyGroup; ULONG ulRegionArtIdx; ULONG ulNextRegionIdx; ULONG ulFirstExtCkIdx; WAVELINK WaveLink; WSMPL WSMP; WLOOP WLOOP[1]; }; struct _DMUS_LFOPARAMS { PCENT pcFrequency; TCENT tcDelay; GCENT gcVolumeScale; PCENT pcPitchScale; GCENT gcMWToVolume; PCENT pcMWToPitch; }; struct _DMUS_VEGPARAMS { TCENT tcAttack; TCENT tcDecay; PERCENT ptSustain; TCENT tcRelease; TCENT tcVel2Attack; TCENT tcKey2Decay; }; struct _DMUS_PEGPARAMS { TCENT tcAttack; TCENT tcDecay; PERCENT ptSustain; TCENT tcRelease; TCENT tcVel2Attack; TCENT tcKey2Decay; PCENT pcRange; }; struct _DMUS_MSCPARAMS { PERCENT ptDefaultPan; }; struct _DMUS_ARTICPARAMS { DMUS_LFOPARAMS LFO; DMUS_VEGPARAMS VolEG; DMUS_PEGPARAMS PitchEG; DMUS_MSCPARAMS Misc; }; struct _DMUS_ARTICULATION { ULONG ulArt1Idx; ULONG ulFirstExtCkIdx; }; struct _DMUS_ARTICULATION2 { ULONG ulArtIdx; ULONG ulFirstExtCkIdx; ULONG ulNextArtIdx; }; struct _DMUS_EXTENSIONCHUNK { ULONG cbSize; ULONG ulNextExtCkIdx; FOURCC ExtCkID; BYTE byExtCk[DMUS_MIN_DATA_SIZE]; }; struct _DMUS_COPYRIGHT { ULONG cbSize; BYTE byCopyright[DMUS_MIN_DATA_SIZE]; }; struct _DMUS_WAVEDATA { ULONG cbSize; BYTE byData[DMUS_MIN_DATA_SIZE]; }; struct _DMUS_WAVE { ULONG ulFirstExtCkIdx; ULONG ulCopyrightIdx; ULONG ulWaveDataIdx; WAVEFORMATEX WaveformatEx; }; struct _DMUS_NOTERANGE { DWORD dwLowNote; DWORD dwHighNote; }; struct _DMUS_WAVEARTDL { ULONG ulDownloadIdIdx; ULONG ulBus; ULONG ulBuffers; ULONG ulMasterDLId; USHORT usOptions; }; struct _DMUS_WAVEDL { ULONG cbWaveData; }; #endif /* __WINE_DMUSIC_DLS_H */ ================================================ FILE: wine/windows/dmerror.h ================================================ /* DirectMusic Error Codes * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DMUSIC_ERROR_H #define __WINE_DMUSIC_ERROR_H /***************************************************************************** * Error code handling */ #define FACILITY_DIRECTMUSIC 0x878 #define DMUS_ERRBASE 0x1000 #ifndef MAKE_HRESULT #define MAKE_HRESULT(sev,fac,code) \ ((HRESULT) (((ULONG)(sev)<<31) | ((ULONG)(fac)<<16) | ((ULONG)(code))) ) #endif #define MAKE_DMHRESULTSUCCESS(code) MAKE_HRESULT(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code))) #define MAKE_DMHRESULTERROR(code) MAKE_HRESULT(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code))) /***************************************************************************** * Error codes */ #define DMUS_S_PARTIALLOAD MAKE_DMHRESULTSUCCESS(0x091) #define DMUS_S_PARTIALDOWNLOAD MAKE_DMHRESULTSUCCESS(0x092) #define DMUS_S_REQUEUE MAKE_DMHRESULTSUCCESS(0x200) #define DMUS_S_FREE MAKE_DMHRESULTSUCCESS(0x201) #define DMUS_S_END MAKE_DMHRESULTSUCCESS(0x202) #define DMUS_S_STRING_TRUNCATED MAKE_DMHRESULTSUCCESS(0x210) #define DMUS_S_LAST_TOOL MAKE_DMHRESULTSUCCESS(0x211) #define DMUS_S_OVER_CHORD MAKE_DMHRESULTSUCCESS(0x212) #define DMUS_S_UP_OCTAVE MAKE_DMHRESULTSUCCESS(0x213) #define DMUS_S_DOWN_OCTAVE MAKE_DMHRESULTSUCCESS(0x214) #define DMUS_S_NOBUFFERCONTROL MAKE_DMHRESULTSUCCESS(0x215) #define DMUS_S_GARBAGE_COLLECTED MAKE_DMHRESULTSUCCESS(0x216) #define DMUS_E_DRIVER_FAILED MAKE_DMHRESULTERROR(0x0101) #define DMUS_E_PORTS_OPEN MAKE_DMHRESULTERROR(0x0102) #define DMUS_E_DEVICE_IN_USE MAKE_DMHRESULTERROR(0x0103) #define DMUS_E_INSUFFICIENTBUFFER MAKE_DMHRESULTERROR(0x0104) #define DMUS_E_BUFFERNOTSET MAKE_DMHRESULTERROR(0x0105) #define DMUS_E_BUFFERNOTAVAILABLE MAKE_DMHRESULTERROR(0x0106) #define DMUS_E_NOTADLSCOL MAKE_DMHRESULTERROR(0x0108) #define DMUS_E_INVALIDOFFSET MAKE_DMHRESULTERROR(0x0109) #define DMUS_E_ALREADY_LOADED MAKE_DMHRESULTERROR(0x0111) #define DMUS_E_INVALIDPOS MAKE_DMHRESULTERROR(0x0113) #define DMUS_E_INVALIDPATCH MAKE_DMHRESULTERROR(0x0114) #define DMUS_E_CANNOTSEEK MAKE_DMHRESULTERROR(0x0115) #define DMUS_E_CANNOTWRITE MAKE_DMHRESULTERROR(0x0116) #define DMUS_E_CHUNKNOTFOUND MAKE_DMHRESULTERROR(0x0117) #define DMUS_E_INVALID_DOWNLOADID MAKE_DMHRESULTERROR(0x0119) #define DMUS_E_NOT_DOWNLOADED_TO_PORT MAKE_DMHRESULTERROR(0x0120) #define DMUS_E_ALREADY_DOWNLOADED MAKE_DMHRESULTERROR(0x0121) #define DMUS_E_UNKNOWN_PROPERTY MAKE_DMHRESULTERROR(0x0122) #define DMUS_E_SET_UNSUPPORTED MAKE_DMHRESULTERROR(0x0123) #define DMUS_E_GET_UNSUPPORTED MAKE_DMHRESULTERROR(0x0124) #define DMUS_E_NOTMONO MAKE_DMHRESULTERROR(0x0125) #define DMUS_E_BADARTICULATION MAKE_DMHRESULTERROR(0x0126) #define DMUS_E_BADINSTRUMENT MAKE_DMHRESULTERROR(0x0127) #define DMUS_E_BADWAVELINK MAKE_DMHRESULTERROR(0x0128) #define DMUS_E_NOARTICULATION MAKE_DMHRESULTERROR(0x0129) #define DMUS_E_NOTPCM MAKE_DMHRESULTERROR(0x012A) #define DMUS_E_BADWAVE MAKE_DMHRESULTERROR(0x012B) #define DMUS_E_BADOFFSETTABLE MAKE_DMHRESULTERROR(0x012C) #define DMUS_E_UNKNOWNDOWNLOAD MAKE_DMHRESULTERROR(0x012D) #define DMUS_E_NOSYNTHSINK MAKE_DMHRESULTERROR(0x012E) #define DMUS_E_ALREADYOPEN MAKE_DMHRESULTERROR(0x012F) #define DMUS_E_ALREADYCLOSED MAKE_DMHRESULTERROR(0x0130) #define DMUS_E_SYNTHNOTCONFIGURED MAKE_DMHRESULTERROR(0x0131) #define DMUS_E_SYNTHACTIVE MAKE_DMHRESULTERROR(0x0132) #define DMUS_E_CANNOTREAD MAKE_DMHRESULTERROR(0x0133) #define DMUS_E_DMUSIC_RELEASED MAKE_DMHRESULTERROR(0x0134) #define DMUS_E_BUFFER_EMPTY MAKE_DMHRESULTERROR(0x0135) #define DMUS_E_BUFFER_FULL MAKE_DMHRESULTERROR(0x0136) #define DMUS_E_PORT_NOT_CAPTURE MAKE_DMHRESULTERROR(0x0137) #define DMUS_E_PORT_NOT_RENDER MAKE_DMHRESULTERROR(0x0138) #define DMUS_E_DSOUND_NOT_SET MAKE_DMHRESULTERROR(0x0139) #define DMUS_E_ALREADY_ACTIVATED MAKE_DMHRESULTERROR(0x013A) #define DMUS_E_INVALIDBUFFER MAKE_DMHRESULTERROR(0x013B) #define DMUS_E_WAVEFORMATNOTSUPPORTED MAKE_DMHRESULTERROR(0x013C) #define DMUS_E_SYNTHINACTIVE MAKE_DMHRESULTERROR(0x013D) #define DMUS_E_DSOUND_ALREADY_SET MAKE_DMHRESULTERROR(0x013E) #define DMUS_E_INVALID_EVENT MAKE_DMHRESULTERROR(0x013F) #define DMUS_E_UNSUPPORTED_STREAM MAKE_DMHRESULTERROR(0x0150) #define DMUS_E_ALREADY_INITED MAKE_DMHRESULTERROR(0x0151) #define DMUS_E_INVALID_BAND MAKE_DMHRESULTERROR(0x0152) #define DMUS_E_TRACK_HDR_NOT_FIRST_CK MAKE_DMHRESULTERROR(0x0155) #define DMUS_E_TOOL_HDR_NOT_FIRST_CK MAKE_DMHRESULTERROR(0x0156) #define DMUS_E_INVALID_TRACK_HDR MAKE_DMHRESULTERROR(0x0157) #define DMUS_E_INVALID_TOOL_HDR MAKE_DMHRESULTERROR(0x0158) #define DMUS_E_ALL_TOOLS_FAILED MAKE_DMHRESULTERROR(0x0159) #define DMUS_E_ALL_TRACKS_FAILED MAKE_DMHRESULTERROR(0x0160) #define DMUS_E_NOT_FOUND MAKE_DMHRESULTERROR(0x0161) #define DMUS_E_NOT_INIT MAKE_DMHRESULTERROR(0x0162) #define DMUS_E_TYPE_DISABLED MAKE_DMHRESULTERROR(0x0163) #define DMUS_E_TYPE_UNSUPPORTED MAKE_DMHRESULTERROR(0x0164) #define DMUS_E_TIME_PAST MAKE_DMHRESULTERROR(0x0165) #define DMUS_E_TRACK_NOT_FOUND MAKE_DMHRESULTERROR(0x0166) #define DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT MAKE_DMHRESULTERROR(0x0167) #define DMUS_E_NO_MASTER_CLOCK MAKE_DMHRESULTERROR(0x0170) #define DMUS_E_LOADER_NOCLASSID MAKE_DMHRESULTERROR(0x0180) #define DMUS_E_LOADER_BADPATH MAKE_DMHRESULTERROR(0x0181) #define DMUS_E_LOADER_FAILEDOPEN MAKE_DMHRESULTERROR(0x0182) #define DMUS_E_LOADER_FORMATNOTSUPPORTED MAKE_DMHRESULTERROR(0x0183) #define DMUS_E_LOADER_FAILEDCREATE MAKE_DMHRESULTERROR(0x0184) #define DMUS_E_LOADER_OBJECTNOTFOUND MAKE_DMHRESULTERROR(0x0185) #define DMUS_E_LOADER_NOFILENAME MAKE_DMHRESULTERROR(0x0186) #define DMUS_E_INVALIDFILE MAKE_DMHRESULTERROR(0x0200) #define DMUS_E_ALREADY_EXISTS MAKE_DMHRESULTERROR(0x0201) #define DMUS_E_OUT_OF_RANGE MAKE_DMHRESULTERROR(0x0202) #define DMUS_E_SEGMENT_INIT_FAILED MAKE_DMHRESULTERROR(0x0203) #define DMUS_E_ALREADY_SENT MAKE_DMHRESULTERROR(0x0204) #define DMUS_E_CANNOT_FREE MAKE_DMHRESULTERROR(0x0205) #define DMUS_E_CANNOT_OPEN_PORT MAKE_DMHRESULTERROR(0x0206) #define DMUS_E_CANNOT_CONVERT MAKE_DMHRESULTERROR(0x0207) #define DMUS_E_DESCEND_CHUNK_FAIL MAKE_DMHRESULTERROR(0x0210) #define DMUS_E_NOT_LOADED MAKE_DMHRESULTERROR(0x0211) #define DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE MAKE_DMHRESULTERROR(0x0213) #define DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE MAKE_DMHRESULTERROR(0x0214) #define DMUS_E_SCRIPT_ERROR_IN_SCRIPT MAKE_DMHRESULTERROR(0x0215) #define DMUS_E_SCRIPT_CANTLOAD_OLEAUT32 MAKE_DMHRESULTERROR(0x0216) #define DMUS_E_SCRIPT_LOADSCRIPT_ERROR MAKE_DMHRESULTERROR(0x0217) #define DMUS_E_SCRIPT_INVALID_FILE MAKE_DMHRESULTERROR(0x0218) #define DMUS_E_INVALID_SCRIPTTRACK MAKE_DMHRESULTERROR(0x0219) #define DMUS_E_SCRIPT_VARIABLE_NOT_FOUND MAKE_DMHRESULTERROR(0x021A) #define DMUS_E_SCRIPT_ROUTINE_NOT_FOUND MAKE_DMHRESULTERROR(0x021B) #define DMUS_E_SCRIPT_CONTENT_READONLY MAKE_DMHRESULTERROR(0x021C) #define DMUS_E_SCRIPT_NOT_A_REFERENCE MAKE_DMHRESULTERROR(0x021D) #define DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED MAKE_DMHRESULTERROR(0x021E) #define DMUS_E_INVALID_SEGMENTTRIGGERTRACK MAKE_DMHRESULTERROR(0x0220) #define DMUS_E_INVALID_LYRICSTRACK MAKE_DMHRESULTERROR(0x0221) #define DMUS_E_INVALID_PARAMCONTROLTRACK MAKE_DMHRESULTERROR(0x0222) #define DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR MAKE_DMHRESULTERROR(0x0223) #define DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR MAKE_DMHRESULTERROR(0x0224) #define DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE MAKE_DMHRESULTERROR(0x0225) #define DMUS_E_AUDIOPATHS_NOT_VALID MAKE_DMHRESULTERROR(0x0226) #define DMUS_E_AUDIOPATHS_IN_USE MAKE_DMHRESULTERROR(0x0227) #define DMUS_E_NO_AUDIOPATH_CONFIG MAKE_DMHRESULTERROR(0x0228) #define DMUS_E_AUDIOPATH_INACTIVE MAKE_DMHRESULTERROR(0x0229) #define DMUS_E_AUDIOPATH_NOBUFFER MAKE_DMHRESULTERROR(0x022A) #define DMUS_E_AUDIOPATH_NOPORT MAKE_DMHRESULTERROR(0x022B) #define DMUS_E_NO_AUDIOPATH MAKE_DMHRESULTERROR(0x022C) #define DMUS_E_INVALIDCHUNK MAKE_DMHRESULTERROR(0x022D) #define DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER MAKE_DMHRESULTERROR(0x022E) #define DMUS_E_INVALID_CONTAINER_OBJECT MAKE_DMHRESULTERROR(0x022F) #endif /* __WINE_DMUSIC_ERROR_H */ ================================================ FILE: wine/windows/dmksctrl.h ================================================ /* * Definition of IKsControl * * Copyright (C) 2012 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _DMKSCTRL_ #define _DMKSCTRL_ #include #include #ifndef _KS_ #define _KS_ typedef struct { union { struct { GUID Set; ULONG Id; ULONG Flags; } DUMMYSTRUCTNAME; LONGLONG Alignment; } DUMMYUNIONNAME; } KSIDENTIFIER, *PKSIDENTIFIER; typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY, KSMETHOD, *PKSMETHOD, KSEVENT, *PKSEVENT; #define KSMETHOD_TYPE_NONE 0x00000000 #define KSMETHOD_TYPE_READ 0x00000001 #define KSMETHOD_TYPE_WRITE 0x00000002 #define KSMETHOD_TYPE_MODIFY 0x00000003 #define KSMETHOD_TYPE_SOURCE 0x00000004 #define KSMETHOD_TYPE_SEND 0x00000001 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200 #define KSPROPERTY_TYPE_GET 0x00000001 #define KSPROPERTY_TYPE_SET 0x00000002 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200 #define KSPROPERTY_TYPE_RELATIONS 0x00000400 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000 #define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000 #define INTERFACE IKsControl DECLARE_INTERFACE_(IKsControl,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IKsControl methods ***/ STDMETHOD(KsProperty)(THIS_ PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData, ULONG DataLength, ULONG* BytesReturned) PURE; STDMETHOD(KsMethod)(THIS_ PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData, ULONG DataLength, ULONG* BytesReturned) PURE; STDMETHOD(KsEvent)(THIS_ PKSEVENT Event, ULONG EventLength, LPVOID EventData, ULONG DataLength, ULONG* BytesReturned) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IKsControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IKsControl_AddRef(p) (p)->lpVtbl->AddRef(p) #define IKsControl_Release(p) (p)->lpVtbl->Release(p) /*** IKsControl methods ***/ #define IKsControl_KsProperty(p,a,b,c,d,e) (p)->lpVtbl->KsProperty(p,a,b,c,d,e) #define IKsControl_KsMethod(p,a,b,c,d,e) (p)->lpVtbl->KsMethod(p,a,b,c,d,e) #define IKsControl_KsEvent(p,a,b,c,d,e) (p)->lpVtbl->KsEvent(p,a,b,c,d,e) #endif #endif /* _KS_ */ #include DEFINE_GUID(IID_IKsControl, 0x28f54685, 0x06fd, 0x11d2, 0xb2, 0x7a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96); #ifndef _KSMEDIA_ DEFINE_GUID(KSDATAFORMAT_SUBTYPE_MIDI, 0x1d262760, 0xe957, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00); DEFINE_GUID(KSDATAFORMAT_SUBTYPE_DIRECTMUSIC, 0x1a82f8bc, 0x3f8b, 0x11d2, 0xb7, 0x74, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1); #endif #endif /* _DMKSCTRL_ */ ================================================ FILE: wine/windows/dmo.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DMO_H__ #define __DMO_H__ #include #ifdef FIX_LOCK_NAME #define Lock DMOLock #endif #include #ifdef FIX_LOCK_NAME #undef Lock #endif #include #include #endif /* __DMO_H__ */ ================================================ FILE: wine/windows/dmoreg.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DMOREG_H__ #define __DMOREG_H__ #include "mediaobj.h" #ifdef __cplusplus extern "C" { #endif typedef struct _DMO_PARTIAL_MEDIATYPE { GUID type; GUID subtype; } DMO_PARTIAL_MEDIATYPE, *PDMO_PARTIAL_MEDIATYPE; enum DMO_REGISTER_FLAGS { DMO_REGISTERF_IS_KEYED = 1 }; enum DMO_ENUM_FLAGS { DMO_ENUMF_INCLUDE_KEYED = 1 }; HRESULT WINAPI DMORegister(LPCWSTR,REFCLSID,REFGUID,DWORD,DWORD,const DMO_PARTIAL_MEDIATYPE*, DWORD,const DMO_PARTIAL_MEDIATYPE*); HRESULT WINAPI DMOUnregister(REFCLSID,REFGUID); HRESULT WINAPI DMOEnum(REFGUID,DWORD,DWORD,const DMO_PARTIAL_MEDIATYPE*,DWORD, const DMO_PARTIAL_MEDIATYPE*,IEnumDMO**); HRESULT WINAPI DMOGetTypes(REFCLSID,ULONG,ULONG*,DMO_PARTIAL_MEDIATYPE*, ULONG,ULONG*,DMO_PARTIAL_MEDIATYPE*); HRESULT WINAPI DMOGetName(REFCLSID,WCHAR[80]); DEFINE_GUID(DMOCATEGORY_AUDIO_DECODER, 0x57f2db8b,0xe6bb,0x4513,0x9d,0x43,0xdc,0xd2,0xa6,0x59,0x31,0x25); DEFINE_GUID(DMOCATEGORY_AUDIO_ENCODER, 0x33d9a761,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86); DEFINE_GUID(DMOCATEGORY_VIDEO_DECODER, 0x4a69b442,0x28be,0x4991,0x96,0x9c,0xb5,0x00,0xad,0xf5,0xd8,0xa8); DEFINE_GUID(DMOCATEGORY_VIDEO_ENCODER, 0x33d9a760,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86); DEFINE_GUID(DMOCATEGORY_AUDIO_EFFECT, 0xf3602b3f,0x0592,0x48df,0xa4,0xcd,0x67,0x47,0x21,0xe7,0xeb,0xeb); DEFINE_GUID(DMOCATEGORY_VIDEO_EFFECT, 0xd990ee14,0x776c,0x4723,0xbe,0x46,0x3d,0xa2,0xf5,0x6f,0x10,0xb9); DEFINE_GUID(DMOCATEGORY_AUDIO_CAPTURE_EFFECT, 0xf665aaba,0x3e09,0x4920,0xaa,0x5f,0x21,0x98,0x11,0x14,0x8f,0x09); DEFINE_GUID(DMOCATEGORY_ACOUSTIC_ECHO_CANCEL, 0xbf963d80,0xc559,0x11d0,0x8a,0x2b,0x00,0xa0,0xc9,0x25,0x5a,0xc1); DEFINE_GUID(DMOCATEGORY_AUDIO_NOISE_SUPPRESS, 0xe07f903f,0x62fd,0x4e60,0x8c,0xdd,0xde,0xa7,0x23,0x66,0x65,0xb5); DEFINE_GUID(DMOCATEGORY_AGC, 0xe88c9ba0,0xc557,0x11d0,0x8a,0x2b,0x00,0xa0,0xc9,0x25,0x5a,0xc1); #ifdef __cplusplus } #endif #endif /* __DMOREG_H__ */ ================================================ FILE: wine/windows/dmort.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DMORT_H__ #define __DMORT_H__ HRESULT WINAPI MoCopyMediaType(DMO_MEDIA_TYPE*,const DMO_MEDIA_TYPE*); HRESULT WINAPI MoCreateMediaType(DMO_MEDIA_TYPE**,DWORD); HRESULT WINAPI MoDeleteMediaType(DMO_MEDIA_TYPE*); HRESULT WINAPI MoDuplicateMediaType(DMO_MEDIA_TYPE**,const DMO_MEDIA_TYPE*); HRESULT WINAPI MoFreeMediaType(DMO_MEDIA_TYPE*); HRESULT WINAPI MoInitMediaType(DMO_MEDIA_TYPE*,DWORD); #endif /* __DMORT_H__ */ ================================================ FILE: wine/windows/dmplugin.h ================================================ /* * DirectMusic Performance Layer Plugins API * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DMUSIC_PLUGIN_H #define __WINE_DMUSIC_PLUGIN_H #include #define COM_NO_WINDOWS_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * Registry path */ #define DMUS_REGSTR_PATH_TOOLS "Software\\Microsoft\\DirectMusic\\Tools" /***************************************************************************** * Predeclare the interfaces */ /* CLSIDs */ DEFINE_GUID(CLSID_DirectMusicBandTrack, 0xd2ac2894,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicChordTrack, 0xd2ac288b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicChordMapTrack, 0xd2ac2896,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicCommandTrack, 0xd2ac288c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicLyricsTrack, 0x995c1cf5,0x54ff,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_DirectMusicMarkerTrack, 0x55a8fd00,0x4288,0x11d3,0x9b,0xd1,0x8a,0x0d,0x61,0xc8,0x88,0x35); DEFINE_GUID(CLSID_DirectMusicMotifTrack, 0xd2ac288e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicMuteTrack, 0xd2ac2898,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicParamControlTrack, 0x4be0537b,0x5c19,0x11d3,0x8b,0xdc,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_DirectMusicScriptTrack, 0x4108fa85,0x3586,0x11d3,0x8b,0xd7,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_DirectMusicSegmentTriggerTrack, 0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_DirectMusicSeqTrack, 0xd2ac2886,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicSignPostTrack, 0xf17e8672,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicStyleTrack, 0xd2ac288d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicSysExTrack, 0xd2ac2887,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicTempoTrack, 0xd2ac2885,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicTimeSigTrack, 0xd2ac2888,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicWaveTrack, 0xeed36461,0x9ea5,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74); /* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */ DEFINE_GUID(CLSID_DirectMusicMelodyFormulationTrack, 0xb0684266,0xb57f,0x11d2,0x97,0xf9,0x00,0xc0,0x4f,0xa3,0x6e,0x58); /* IIDs */ DEFINE_GUID(IID_IDirectMusicTool, 0xd2ac28ba,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicTool8, 0x0e674303,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36); DEFINE_GUID(IID_IDirectMusicTrack, 0xf96029a1,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicTrack8, 0x0e674304,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36); /* typedef definitions */ typedef struct IDirectMusicTrack *LPDIRECTMUSICTRACK; typedef struct IDirectMusicTrack8 *LPDIRECTMUSICTRACK8; typedef struct IDirectMusicTool *LPDIRECTMUSICTOOL; typedef struct IDirectMusicTool8 *LPDIRECTMUSICTOOL8; /* these are from dmusici.h and are needed here */ typedef struct IDirectMusicPerformance *LPDIRECTMUSICPERFORMANCE; typedef struct IDirectMusicPerformance8 *LPDIRECTMUSICPERFORMANCE8; typedef struct IDirectMusicSegment *LPDIRECTMUSICSEGMENT; typedef struct IDirectMusicSegment8 *LPDIRECTMUSICSEGMENT8; typedef struct IDirectMusicSegmentState *LPDIRECTMUSICSEGMENTSTATE; typedef struct IDirectMusicSegmentState8 *LPDIRECTMUSICSEGMENTSTATE8; typedef struct IDirectMusicGraph *LPDIRECTMUSICGRAPH; typedef struct IDirectMusicGraph IDirectMusicGraph8, *LPDIRECTMUSICGRAPH8; /***************************************************************************** * Typedef definitions */ typedef struct _DMUS_PMSG DMUS_PMSG; typedef LONG MUSIC_TIME; /***************************************************************************** * Flags */ #define DMUS_TRACK_PARAMF_CLOCK 0x1 /***************************************************************************** * Enumerations */ /* typedef definitions */ typedef enum enumDMUS_TRACKF_FLAGS DMUS_TRACKF_FLAGS; /* actual enumerations */ enum enumDMUS_TRACKF_FLAGS { DMUS_TRACKF_SEEK = 0x001, DMUS_TRACKF_LOOP = 0x002, DMUS_TRACKF_START = 0x004, DMUS_TRACKF_FLUSH = 0x008, DMUS_TRACKF_DIRTY = 0x010, DMUS_TRACKF_NOTIFY_OFF = 0x020, DMUS_TRACKF_PLAY_OFF = 0x040, DMUS_TRACKF_LOOPEND = 0x080, DMUS_TRACKF_STOP = 0x100, DMUS_TRACKF_RECOMPOSE = 0x200, DMUS_TRACKF_CLOCK = 0x400, }; /***************************************************************************** * IDirectMusicTool interface */ #define INTERFACE IDirectMusicTool DECLARE_INTERFACE_(IDirectMusicTool,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicTool methods ***/ STDMETHOD(Init)(THIS_ struct IDirectMusicGraph *pGraph) PURE; STDMETHOD(GetMsgDeliveryType)(THIS_ DWORD *pdwDeliveryType) PURE; STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD *pdwNumElements) PURE; STDMETHOD(GetMediaTypes)(THIS_ DWORD **padwMediaTypes, DWORD dwNumElements) PURE; STDMETHOD(ProcessPMsg)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG) PURE; STDMETHOD(Flush)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG, REFERENCE_TIME rtTime) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicTool_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicTool_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicTool_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicTool methods ***/ #define IDirectMusicTool_Init(p,a) (p)->lpVtbl->Init(p,a) #define IDirectMusicTool_GetMsgDeliveryType(p,a) (p)->lpVtbl->GetMsgDeliveryType(p,a) #define IDirectMusicTool_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a) #define IDirectMusicTool_GetMediaTypes(p,a,b) (p)->lpVtbl->GetMediaTypes(p,a,b) #define IDirectMusicTool_ProcessPMsg(p,a,b) (p)->lpVtbl->ProcessPMsg(p,a,b) #define IDirectMusicTool_Flush(p,a,b,c) (p)->lpVtbl->Flush(p,a,b,c) #endif /***************************************************************************** * IDirectMusicTool8 interface */ #define INTERFACE IDirectMusicTool8 DECLARE_INTERFACE_(IDirectMusicTool8,IDirectMusicTool) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicTool methods ***/ STDMETHOD(Init)(THIS_ struct IDirectMusicGraph *pGraph) PURE; STDMETHOD(GetMsgDeliveryType)(THIS_ DWORD *pdwDeliveryType) PURE; STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD *pdwNumElements) PURE; STDMETHOD(GetMediaTypes)(THIS_ DWORD **padwMediaTypes, DWORD dwNumElements) PURE; STDMETHOD(ProcessPMsg)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG) PURE; STDMETHOD(Flush)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG, REFERENCE_TIME rtTime) PURE; /*** IDirectMusicTool8 methods ***/ STDMETHOD(Clone)(THIS_ IDirectMusicTool **ppTool) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicTool8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicTool8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicTool8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicTool methods ***/ #define IDirectMusicTool8_Init(p,a) (p)->lpVtbl->Init(p,a) #define IDirectMusicTool8_GetMsgDeliveryType(p,a) (p)->lpVtbl->GetMsgDeliveryType(p,a) #define IDirectMusicTool8_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a) #define IDirectMusicTool8_GetMediaTypes(p,a,b) (p)->lpVtbl->GetMediaTypes(p,a,b) #define IDirectMusicTool8_ProcessPMsg(p,a,b) (p)->lpVtbl->ProcessPMsg(p,a,b) #define IDirectMusicTool8_Flush(p,a,b) (p)->lpVtbl->Flush(p,a,b) /*** IDirectMusicTool8 methods ***/ #define IDirectMusicTool8_Clone(p,a) (p)->lpVtbl->Clone(p,a) #endif /***************************************************************************** * IDirectMusicTrack interface */ #define INTERFACE IDirectMusicTrack DECLARE_INTERFACE_(IDirectMusicTrack,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicTrack methods ***/ STDMETHOD(Init)(THIS_ struct IDirectMusicSegment *pSegment) PURE; STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState *pSegmentState, struct IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags) PURE; STDMETHOD(EndPlay)(THIS_ void *pStateData) PURE; 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; STDMETHOD(GetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; STDMETHOD(SetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void *pParam) PURE; STDMETHOD(IsParamSupported)(THIS_ REFGUID rguidType) PURE; STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicTrack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicTrack_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicTrack_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicTrack methods ***/ #define IDirectMusicTrack_Init(p,a) (p)->lpVtbl->Init(p,a) #define IDirectMusicTrack_InitPlay(p,a,b,c,d,e) (p)->lpVtbl->InitPlay(p,a,b,c,d,e) #define IDirectMusicTrack_EndPlay(p,a) (p)->lpVtbl->EndPlay(p,a) #define IDirectMusicTrack_Play(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h) #define IDirectMusicTrack_GetParam(p,a,b,c,d) (p)->lpVtbl->GetParam(p,a,b,c,d) #define IDirectMusicTrack_SetParam(p,a,b,c) (p)->lpVtbl->SetParam(p,a,b,c) #define IDirectMusicTrack_IsParamSupported(p,a) (p)->lpVtbl->IsParamSupported(p,a) #define IDirectMusicTrack_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a) #define IDirectMusicTrack_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a) #define IDirectMusicTrack_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #endif /***************************************************************************** * IDirectMusicTrack8 interface */ #define INTERFACE IDirectMusicTrack8 DECLARE_INTERFACE_(IDirectMusicTrack8,IDirectMusicTrack) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicTrack methods ***/ STDMETHOD(Init)(THIS_ struct IDirectMusicSegment *pSegment) PURE; STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState *pSegmentState, struct IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags) PURE; STDMETHOD(EndPlay)(THIS_ void *pStateData) PURE; 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; STDMETHOD(GetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; STDMETHOD(SetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void *pParam) PURE; STDMETHOD(IsParamSupported)(THIS_ REFGUID rguidType) PURE; STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) PURE; /*** IDirectMusicTrack8 methods ***/ 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; STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags) PURE; STDMETHOD(SetParamEx)(THIS_ REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) PURE; STDMETHOD(Compose)(THIS_ IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) PURE; STDMETHOD(Join)(THIS_ IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicTrack8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicTrack8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicTrack8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicTrack methods ***/ #define IDirectMusicTrack8_Init(p,a) (p)->lpVtbl->Init(p,a) #define IDirectMusicTrack8_InitPlay(p,a,b,c,d,e) (p)->lpVtbl->InitPlay(p,a,b,c,d,e) #define IDirectMusicTrack8_EndPlay(p,a) (p)->lpVtbl->EndPlay(p,a) #define IDirectMusicTrack8_Play(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h) #define IDirectMusicTrack8_GetParam(p,a,b,c,d) (p)->lpVtbl->GetParam(p,a,b,c,d) #define IDirectMusicTrack8_SetParam(p,a,b,c) (p)->lpVtbl->SetParam(p,a,b,c) #define IDirectMusicTrack8_IsParamSupported(p,a) (p)->lpVtbl->IsParamSupported(p,a) #define IDirectMusicTrack8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a) #define IDirectMusicTrack8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a) #define IDirectMusicTrack8_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) /*** IDirectMusicTrack8 methods ***/ #define IDirectMusicTrack8_PlayEx(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->PlayEx(p,a,b,c,d,e,f,g,h) #define IDirectMusicTrack8_GetParamEx(p,a,b,c,d,e,f) (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f) #define IDirectMusicTrack8_SetParamEx(p,a,b,c,d,e) (p)->lpVtbl->SetParamEx(p,a,b,c,d,e) #define IDirectMusicTrack8_Compose(p,a,b,c) (p)->lpVtbl->Compose(p,a,b,c) #define IDirectMusicTrack8_Join(p,a,b,c,d,e) (p)->lpVtbl->Join(p,a,b,c,d,e) #endif #ifdef __cplusplus } #endif #include #endif /* __WINE_DMUSIC_PLUGIN_H */ ================================================ FILE: wine/windows/dmusbuff.h ================================================ /* DirectMusic Buffer Format * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DMUSIC_BUFFER_H #define __WINE_DMUSIC_BUFFER_H #include /***************************************************************************** * Misc. definitions */ #define QWORD_ALIGN(x) (((x) + 7) & ~7) #define DMUS_EVENT_SIZE(cb) QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb) /***************************************************************************** * Flags */ #define DMUS_EVENT_STRUCTURED 0x1 /***************************************************************************** * Structures */ /* typedef definitions */ typedef struct _DMUS_EVENTHEADER DMUS_EVENTHEADER, *LPDMUS_EVENTHEADER; /* actual structure*/ #include struct _DMUS_EVENTHEADER { DWORD cbEvent; DWORD dwChannelGroup; REFERENCE_TIME rtDelta; DWORD dwFlags; }; #include #endif /* __WINE_DMUSIC_BUFFER_H */ ================================================ FILE: wine/windows/dmusicc.h ================================================ /* DirectMusic Core API Stuff * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DMUSIC_CORE_H #define __WINE_DMUSIC_CORE_H #include #define COM_NO_WINDOWS_H #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * Predeclare the interfaces */ /* CLSIDs */ DEFINE_GUID(CLSID_DirectMusic, 0x636b9f10,0x0c7d,0x11d1,0x95,0xb2,0x00,0x20,0xaf,0xdc,0x74,0x21); DEFINE_GUID(CLSID_DirectMusicCollection, 0x480ff4b0,0x28b2,0x11d1,0xbe,0xf7,0x00,0xc0,0x4f,0xbf,0x8f,0xef); DEFINE_GUID(CLSID_DirectMusicSynth, 0x58c2b4d0,0x46e7,0x11d1,0x89,0xac,0x00,0xa0,0xc9,0x05,0x41,0x29); /* IIDs */ DEFINE_GUID(IID_IDirectMusic, 0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(IID_IDirectMusic2, 0x6fc2cae1,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(IID_IDirectMusic8, 0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97); DEFINE_GUID(IID_IDirectMusicBuffer, 0xd2ac2878,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicCollection, 0xd2ac287c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicDownload, 0xd2ac287b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicDownloadedInstrument, 0xd2ac287e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicInstrument, 0xd2ac287d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicPort, 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(IID_IDirectMusicPortDownload, 0xd2ac287a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicThru, 0xced153e7,0x3606,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12); #define IID_IDirectMusicCollection8 IID_IDirectMusicCollection #define IID_IDirectMusicDownload8 IID_IDirectMusicDownload #define IID_IDirectMusicDownloadedInstrument8 IID_IDirectMusicDownloadedInstrument #define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument #define IID_IDirectMusicPort8 IID_IDirectMusicPort #define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload #define IID_IDirectMusicThru8 IID_IDirectMusicThru /* GUIDs - property set */ DEFINE_GUID(GUID_DMUS_PROP_GM_Hardware, 0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(GUID_DMUS_PROP_GS_Capable, 0x6496aba2,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(GUID_DMUS_PROP_GS_Hardware, 0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(GUID_DMUS_PROP_DLS1, 0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(GUID_DMUS_PROP_DLS2, 0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(GUID_DMUS_PROP_Effects, 0xcda8d611,0x684a,0x11d2,0x87,0x1e,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2, 0x865fd372,0x9f67,0x11d2,0x87,0x2a,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_DMUS_PROP_LegacyCaps, 0xcfa7cdc2,0x00a1,0x11d2,0xaa,0xd5,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(GUID_DMUS_PROP_MemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8); DEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND, 0x0aa97844,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE, 0x0aa97845,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_DMUS_PROP_Volume, 0xfedfae25,0xe46e,0x11d1,0xaa,0xce,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(GUID_DMUS_PROP_WavesReverb, 0x04cb5622,0x32e5,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(GUID_DMUS_PROP_WriteLatency, 0x268a0fa0,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(GUID_DMUS_PROP_WritePeriod, 0x268a0fa1,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(GUID_DMUS_PROP_XG_Capable, 0x6496aba1,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(GUID_DMUS_PROP_XG_Hardware, 0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); /* typedef definitions */ typedef struct IDirectMusic *LPDIRECTMUSIC; typedef struct IDirectMusic8 *LPDIRECTMUSIC8; typedef struct IDirectMusicBuffer *LPDIRECTMUSICBUFFER; typedef struct IDirectMusicBuffer IDirectMusicBuffer8, *LPDIRECTMUSICBUFFER8; typedef struct IDirectMusicInstrument *LPDIRECTMUSICINSTRUMENT; typedef struct IDirectMusicInstrument IDirectMusicInstrument8, *LPDIRECTMUSICINSTRUMENT8; typedef struct IDirectMusicDownloadedInstrument *LPDIRECTMUSICDOWNLOADEDINSTRUMENT; typedef struct IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument8, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8; typedef struct IDirectMusicCollection *LPDIRECTMUSICCOLLECTION; typedef struct IDirectMusicCollection IDirectMusicCollection8, *LPDIRECTMUSICCOLLECTION8; typedef struct IDirectMusicDownload *LPDIRECTMUSICDOWNLOAD; typedef struct IDirectMusicDownload IDirectMusicDownload8, *LPDIRECTMUSICDOWNLOAD8; typedef struct IDirectMusicPortDownload *LPDIRECTMUSICPORTDOWNLOAD; typedef struct IDirectMusicPortDownload IDirectMusicPortDownload8, *LPDIRECTMUSICPORTDOWNLOAD8; typedef struct IDirectMusicPort *LPDIRECTMUSICPORT; typedef struct IDirectMusicPort IDirectMusicPort8, *LPDIRECTMUSICPORT8; typedef struct IDirectMusicThru *LPDIRECTMUSICTHRU; typedef struct IDirectMusicThru IDirectMusicThru8, *LPDIRECTMUSICTHRU8; typedef struct IReferenceClock *LPREFERENCECLOCK; /***************************************************************************** * Typedef definitions */ typedef ULONGLONG SAMPLE_TIME, *LPSAMPLE_TIME; typedef ULONGLONG SAMPLE_POSITION, *LPSAMPLE_POSITION; /***************************************************************************** * Flags */ #ifndef _DIRECTAUDIO_PRIORITIES_DEFINED_ #define _DIRECTAUDIO_PRIORITIES_DEFINED_ #define DAUD_CRITICAL_VOICE_PRIORITY 0xF0000000 #define DAUD_HIGH_VOICE_PRIORITY 0xC0000000 #define DAUD_STANDARD_VOICE_PRIORITY 0x80000000 #define DAUD_LOW_VOICE_PRIORITY 0x40000000 #define DAUD_PERSIST_VOICE_PRIORITY 0x10000000 #define DAUD_CHAN1_VOICE_PRIORITY_OFFSET 0x0000000E #define DAUD_CHAN2_VOICE_PRIORITY_OFFSET 0x0000000D #define DAUD_CHAN3_VOICE_PRIORITY_OFFSET 0x0000000C #define DAUD_CHAN4_VOICE_PRIORITY_OFFSET 0x0000000B #define DAUD_CHAN5_VOICE_PRIORITY_OFFSET 0x0000000A #define DAUD_CHAN6_VOICE_PRIORITY_OFFSET 0x00000009 #define DAUD_CHAN7_VOICE_PRIORITY_OFFSET 0x00000008 #define DAUD_CHAN8_VOICE_PRIORITY_OFFSET 0x00000007 #define DAUD_CHAN9_VOICE_PRIORITY_OFFSET 0x00000006 #define DAUD_CHAN10_VOICE_PRIORITY_OFFSET 0x0000000F #define DAUD_CHAN11_VOICE_PRIORITY_OFFSET 0x00000005 #define DAUD_CHAN12_VOICE_PRIORITY_OFFSET 0x00000004 #define DAUD_CHAN13_VOICE_PRIORITY_OFFSET 0x00000003 #define DAUD_CHAN14_VOICE_PRIORITY_OFFSET 0x00000002 #define DAUD_CHAN15_VOICE_PRIORITY_OFFSET 0x00000001 #define DAUD_CHAN16_VOICE_PRIORITY_OFFSET 0x00000000 #define DAUD_CHAN1_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN2_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN3_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN4_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN5_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN6_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN7_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN8_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN9_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET) #define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET) #endif /* _DIRECTAUDIO_PRIORITIES_DEFINED_ */ #define DMUS_CLOCKF_GLOBAL 0x1 #define DMUS_EFFECT_NONE 0x0 #define DMUS_EFFECT_REVERB 0x1 #define DMUS_EFFECT_CHORUS 0x2 #define DMUS_EFFECT_DELAY 0x4 #define DMUS_MAX_DESCRIPTION 0x80 #define DMUS_MAX_DRIVER 0x80 #define DMUS_PC_INPUTCLASS 0x0 #define DMUS_PC_OUTPUTCLASS 0x1 #define DMUS_PC_DLS 0x00000001 #define DMUS_PC_EXTERNAL 0x00000002 #define DMUS_PC_SOFTWARESYNTH 0x00000004 #define DMUS_PC_MEMORYSIZEFIXED 0x00000008 #define DMUS_PC_GMINHARDWARE 0x00000010 #define DMUS_PC_GSINHARDWARE 0x00000020 #define DMUS_PC_XGINHARDWARE 0x00000040 #define DMUS_PC_DIRECTSOUND 0x00000080 #define DMUS_PC_SHAREABLE 0x00000100 #define DMUS_PC_DLS2 0x00000200 #define DMUS_PC_AUDIOPATH 0x00000400 #define DMUS_PC_WAVE 0x00000800 #define DMUS_PC_SYSTEMMEMORY 0x7FFFFFFF #define DMUS_PORT_WINMM_DRIVER 0x0 #define DMUS_PORT_USER_MODE_SYNTH 0x1 #define DMUS_PORT_KERNEL_MODE 0x2 #define DMUS_PORT_FEATURE_AUDIOPATH 0x1 #define DMUS_PORT_FEATURE_STREAMING 0x2 #define DMUS_PORTPARAMS_VOICES 0x01 #define DMUS_PORTPARAMS_CHANNELGROUPS 0x02 #define DMUS_PORTPARAMS_AUDIOCHANNELS 0x04 #define DMUS_PORTPARAMS_SAMPLERATE 0x08 #define DMUS_PORTPARAMS_EFFECTS 0x20 #define DMUS_PORTPARAMS_SHARE 0x40 #define DMUS_PORTPARAMS_FEATURES 0x80 #define DMUS_VOLUME_MAX 2000 #define DMUS_VOLUME_MIN -20000 #define DMUS_SYNTHSTATS_VOICES 0x01 #define DMUS_SYNTHSTATS_TOTAL_CPU 0x02 #define DMUS_SYNTHSTATS_CPU_PER_VOICE 0x04 #define DMUS_SYNTHSTATS_LOST_NOTES 0x08 #define DMUS_SYNTHSTATS_PEAK_VOLUME 0x10 #define DMUS_SYNTHSTATS_FREE_MEMORY 0x20 #define DMUS_SYNTHSTATS_SYSTEMMEMORY DMUS_PC_SYSTEMMEMORY #define DSBUSID_FIRST_SPKR_LOC 0x00000000 #define DSBUSID_FRONT_LEFT 0x00000000 #define DSBUSID_LEFT 0x00000000 #define DSBUSID_FRONT_RIGHT 0x00000001 #define DSBUSID_RIGHT 0x00000001 #define DSBUSID_FRONT_CENTER 0x00000002 #define DSBUSID_LOW_FREQUENCY 0x00000003 #define DSBUSID_BACK_LEFT 0x00000004 #define DSBUSID_BACK_RIGHT 0x00000005 #define DSBUSID_FRONT_LEFT_OF_CENTER 0x00000006 #define DSBUSID_FRONT_RIGHT_OF_CENTER 0x00000007 #define DSBUSID_BACK_CENTER 0x00000008 #define DSBUSID_SIDE_LEFT 0x00000009 #define DSBUSID_SIDE_RIGHT 0x0000000A #define DSBUSID_TOP_CENTER 0x0000000B #define DSBUSID_TOP_FRONT_LEFT 0x0000000C #define DSBUSID_TOP_FRONT_CENTER 0x0000000D #define DSBUSID_TOP_FRONT_RIGHT 0x0000000E #define DSBUSID_TOP_BACK_LEFT 0x0000000F #define DSBUSID_TOP_BACK_CENTER 0x00000010 #define DSBUSID_TOP_BACK_RIGHT 0x011 #define DSBUSID_LAST_SPKR_LOC 0x00000011 #define DSBUSID_IS_SPKR_LOC(id) (((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC)) #define DSBUSID_REVERB_SEND 0x00000040 #define DSBUSID_CHORUS_SEND 0x00000041 #define DSBUSID_DYNAMIC_0 0x00000200 #define DSBUSID_NULL 0xFFFFFFFF /***************************************************************************** * Enumerations */ typedef enum { DMUS_CLOCK_SYSTEM = 0x0, DMUS_CLOCK_WAVE = 0x1 } DMUS_CLOCKTYPE; /***************************************************************************** * Structures */ /* typedef definitions */ typedef struct _DMUS_BUFFERDESC DMUS_BUFFERDESC, *LPDMUS_BUFFERDESC; typedef struct _DMUS_PORTCAPS DMUS_PORTCAPS, *LPDMUS_PORTCAPS; typedef struct _DMUS_PORTPARAMS DMUS_PORTPARAMS7, *LPDMUS_PORTPARAMS7; typedef struct _DMUS_PORTPARAMS8 DMUS_PORTPARAMS8, *LPDMUS_PORTPARAMS8; typedef DMUS_PORTPARAMS8 DMUS_PORTPARAMS, *LPDMUS_PORTPARAMS; typedef struct _DMUS_SYNTHSTATS DMUS_SYNTHSTATS, *LPDMUS_SYNTHSTATS; typedef struct _DMUS_SYNTHSTATS8 DMUS_SYNTHSTATS8, *LPDMUS_SYNTHSTATS8; typedef struct _DMUS_WAVES_REVERB_PARAMS DMUS_WAVES_REVERB_PARAMS, *LPDMUS_WAVES_REVERB_PARAMS; typedef struct _DMUS_CLOCKINFO7 DMUS_CLOCKINFO7, *LPDMUS_CLOCKINFO7; typedef struct _DMUS_CLOCKINFO8 DMUS_CLOCKINFO8, *LPDMUS_CLOCKINFO8; typedef DMUS_CLOCKINFO8 DMUS_CLOCKINFO, *LPDMUS_CLOCKINFO; /* actual structures */ struct _DMUS_BUFFERDESC { DWORD dwSize; DWORD dwFlags; GUID guidBufferFormat; DWORD cbBuffer; } ; struct _DMUS_PORTCAPS { DWORD dwSize; DWORD dwFlags; GUID guidPort; DWORD dwClass; DWORD dwType; DWORD dwMemorySize; DWORD dwMaxChannelGroups; DWORD dwMaxVoices; DWORD dwMaxAudioChannels; DWORD dwEffectFlags; WCHAR wszDescription[DMUS_MAX_DESCRIPTION]; }; struct _DMUS_PORTPARAMS { DWORD dwSize; DWORD dwValidParams; DWORD dwVoices; DWORD dwChannelGroups; DWORD dwAudioChannels; DWORD dwSampleRate; DWORD dwEffectFlags; BOOL fShare; }; struct _DMUS_PORTPARAMS8 { DWORD dwSize; DWORD dwValidParams; DWORD dwVoices; DWORD dwChannelGroups; DWORD dwAudioChannels; DWORD dwSampleRate; DWORD dwEffectFlags; BOOL fShare; DWORD dwFeatures; }; struct _DMUS_SYNTHSTATS { DWORD dwSize; DWORD dwValidStats; DWORD dwVoices; DWORD dwTotalCPU; DWORD dwCPUPerVoice; DWORD dwLostNotes; DWORD dwFreeMemory; LONG lPeakVolume; }; struct _DMUS_SYNTHSTATS8 { DWORD dwSize; DWORD dwValidStats; DWORD dwVoices; DWORD dwTotalCPU; DWORD dwCPUPerVoice; DWORD dwLostNotes; DWORD dwFreeMemory; LONG lPeakVolume; DWORD dwSynthMemUse; }; struct _DMUS_WAVES_REVERB_PARAMS { float fInGain; float fReverbMix; float fReverbTime; float fHighFreqRTRatio; }; struct _DMUS_CLOCKINFO7 { DWORD dwSize; DMUS_CLOCKTYPE ctType; GUID guidClock; WCHAR wszDescription[DMUS_MAX_DESCRIPTION]; }; struct _DMUS_CLOCKINFO8 { DWORD dwSize; DMUS_CLOCKTYPE ctType; GUID guidClock; WCHAR wszDescription[DMUS_MAX_DESCRIPTION]; DWORD dwFlags; }; /***************************************************************************** * IDirectMusic interface */ #define INTERFACE IDirectMusic DECLARE_INTERFACE_(IDirectMusic,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusic methods ***/ STDMETHOD(EnumPort)(THIS_ DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) PURE; STDMETHOD(CreateMusicBuffer)(THIS_ LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER *ppBuffer, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(CreatePort)(THIS_ REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT *ppPort, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumMasterClock)(THIS_ DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) PURE; STDMETHOD(GetMasterClock)(THIS_ LPGUID pguidClock, struct IReferenceClock **ppReferenceClock) PURE; STDMETHOD(SetMasterClock)(THIS_ REFGUID rguidClock) PURE; STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE; STDMETHOD(GetDefaultPort)(THIS_ LPGUID pguidPort) PURE; STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, HWND hWnd) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusic_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusic_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusic_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusic methods ***/ #define IDirectMusic_EnumPort(p,a,b) (p)->lpVtbl->EnumPort(p,a,b) #define IDirectMusic_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c) #define IDirectMusic_CreatePort(p,a,b,c,d) (p)->lpVtbl->CreatePort(p,a,b,c,d) #define IDirectMusic_EnumMasterClock(p,a,b) (p)->lpVtbl->EnumMasterClock(p,a,b) #define IDirectMusic_GetMasterClock(p,a,b) (p)->lpVtbl->GetMasterClock(p,a,b) #define IDirectMusic_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a) #define IDirectMusic_Activate(p,a) (p)->lpVtbl->Activate(p,a) #define IDirectMusic_GetDefaultPort(p,a) (p)->lpVtbl->GetDefaultPort(p,a) #define IDirectMusic_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b) #endif /***************************************************************************** * IDirectMusic8 interface */ #define INTERFACE IDirectMusic8 DECLARE_INTERFACE_(IDirectMusic8,IDirectMusic) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusic methods ***/ STDMETHOD(EnumPort)(THIS_ DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) PURE; STDMETHOD(CreateMusicBuffer)(THIS_ LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER *ppBuffer, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(CreatePort)(THIS_ REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT *ppPort, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(EnumMasterClock)(THIS_ DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) PURE; STDMETHOD(GetMasterClock)(THIS_ LPGUID pguidClock, struct IReferenceClock **ppReferenceClock) PURE; STDMETHOD(SetMasterClock)(THIS_ REFGUID rguidClock) PURE; STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE; STDMETHOD(GetDefaultPort)(THIS_ LPGUID pguidPort) PURE; STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, HWND hWnd) PURE; /*** IDirectMusic8 methods ***/ STDMETHOD(SetExternalMasterClock)(THIS_ struct IReferenceClock *pClock) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusic8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusic8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusic8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusic methods ***/ #define IDirectMusic8_EnumPort(p,a,b) (p)->lpVtbl->EnumPort(p,a,b) #define IDirectMusic8_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c) #define IDirectMusic8_CreatePort(p,a,b,c,d) (p)->lpVtbl->CreatePort(p,a,b,c,d) #define IDirectMusic8_EnumMasterClock(p,a,b) (p)->lpVtbl->EnumMasterClock(p,a,b) #define IDirectMusic8_GetMasterClock(p,a,b) (p)->lpVtbl->GetMasterClock(p,a,b) #define IDirectMusic8_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a) #define IDirectMusic8_Activate(p,a) (p)->lpVtbl->Activate(p,a) #define IDirectMusic8_GetDefaultPort(p,a) (p)->lpVtbl->GetDefaultPort(p,a) #define IDirectMusic8_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b) /*** IDirectMusic8 methods ***/ #define IDirectMusic8_SetExternalMasterClock(p,a) (p)->lpVtbl->SetExternalMasterClock(p,a) #endif /***************************************************************************** * IDirectMusicBuffer interface */ #define INTERFACE IDirectMusicBuffer DECLARE_INTERFACE_(IDirectMusicBuffer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicBuffer methods ***/ STDMETHOD(Flush)(THIS) PURE; STDMETHOD(TotalTime)(THIS_ LPREFERENCE_TIME prtTime) PURE; STDMETHOD(PackStructured)(THIS_ REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage) PURE; STDMETHOD(PackUnstructured)(THIS_ REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb) PURE; STDMETHOD(ResetReadPtr)(THIS) PURE; STDMETHOD(GetNextEvent)(THIS_ LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE *ppData) PURE; STDMETHOD(GetRawBufferPtr)(THIS_ LPBYTE *ppData) PURE; STDMETHOD(GetStartTime)(THIS_ LPREFERENCE_TIME prt) PURE; STDMETHOD(GetUsedBytes)(THIS_ LPDWORD pcb) PURE; STDMETHOD(GetMaxBytes)(THIS_ LPDWORD pcb) PURE; STDMETHOD(GetBufferFormat)(THIS_ LPGUID pGuidFormat) PURE; STDMETHOD(SetStartTime)(THIS_ REFERENCE_TIME rt) PURE; STDMETHOD(SetUsedBytes)(THIS_ DWORD cb) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicBuffer_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicBuffer methods ***/ #define IDirectMusicBuffer_Flush(p) (p)->lpVtbl->Flush(p) #define IDirectMusicBuffer_TotalTime(p,a) (p)->lpVtbl->TotalTime(p,a) #define IDirectMusicBuffer_PackStructured(p,a,b,c) (p)->lpVtbl->PackStructured(p,a,b,c) #define IDirectMusicBuffer_PackUnstructured(p,a,b,c,d) (p)->lpVtbl->PackUnstructured(p,a,b,c,d) #define IDirectMusicBuffer_ResetReadPtr(p) (p)->lpVtbl->ResetReadPtr(p) #define IDirectMusicBuffer_GetNextEvent(p,a,b,c,d) (p)->lpVtbl->GetNextEvent(p,a,b,c,d) #define IDirectMusicBuffer_GetRawBufferPtr(p,a) (p)->lpVtbl->GetRawBufferPtr(p,a) #define IDirectMusicBuffer_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a) #define IDirectMusicBuffer_GetUsedBytes(p,a) (p)->lpVtbl->GetUsedBytes(p,a) #define IDirectMusicBuffer_GetMaxBytes(p,a) (p)->lpVtbl->GetMaxBytes(p,a) #define IDirectMusicBuffer_GetBufferFormat(p,a) (p)->lpVtbl->GetBufferFormat(p,a) #define IDirectMusicBuffer_SetStartTime(p,a) (p)->lpVtbl->SetStartTime(p,a) #define IDirectMusicBuffer_SetUsedBytes(p,a) (p)->lpVtbl->SetUsedBytes(p,a) #endif /***************************************************************************** * IDirectMusicInstrument interface */ #define INTERFACE IDirectMusicInstrument DECLARE_INTERFACE_(IDirectMusicInstrument,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicInstrument methods ***/ STDMETHOD(GetPatch)(THIS_ DWORD *pdwPatch) PURE; STDMETHOD(SetPatch)(THIS_ DWORD dwPatch) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicInstrument_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicInstrument_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicInstrument methods ***/ #define IDirectMusicInstrument_GetPatch(p,a) (p)->lpVtbl->GetPatch(p,a) #define IDirectMusicInstrument_SetPatch(p,a) (p)->lpVtbl->SetPatch(p,a) #endif /***************************************************************************** * IDirectMusicDownloadedInstrument interface */ #define INTERFACE IDirectMusicDownloadedInstrument DECLARE_INTERFACE_(IDirectMusicDownloadedInstrument,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /* no IDirectMusicDownloadedInstrument methods at this time */ }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicDownloadedInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicDownloadedInstrument_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicDownloadedInstrument_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicDownloadedInstrument methods ***/ /* none at this time */ #endif /***************************************************************************** * IDirectMusicCollection interface */ #define INTERFACE IDirectMusicCollection DECLARE_INTERFACE_(IDirectMusicCollection,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicCollection methods ***/ STDMETHOD(GetInstrument)(THIS_ DWORD dwPatch, IDirectMusicInstrument **ppInstrument) PURE; STDMETHOD(EnumInstrument)(THIS_ DWORD dwIndex, DWORD *pdwPatch, LPWSTR pwszName, DWORD dwNameLen) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicCollection_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicCollection_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicCollection_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicCollection methods ***/ #define IDirectMusicCollection_GetInstrument(p,a,b) (p)->lpVtbl->GetInstrument(p,a,b) #define IDirectMusicCollection_EnumInstrument(p,a,b,c,d) (p)->lpVtbl->EnumInstrument(p,a,b,c,d) #endif /***************************************************************************** * IDirectMusicDownload interface */ #define INTERFACE IDirectMusicDownload DECLARE_INTERFACE_(IDirectMusicDownload,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicDownload methods ***/ STDMETHOD(GetBuffer)(THIS_ void **ppvBuffer, DWORD *pdwSize) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicDownload_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicDownload_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicDownload_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicDownload methods ***/ #define IDirectMusicDownload_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b) #endif /***************************************************************************** * IDirectMusicPortDownload interface */ #define INTERFACE IDirectMusicPortDownload DECLARE_INTERFACE_(IDirectMusicPortDownload,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicPortDownload methods ***/ STDMETHOD(GetBuffer)(THIS_ DWORD dwDLId, IDirectMusicDownload **ppIDMDownload) PURE; STDMETHOD(AllocateBuffer)(THIS_ DWORD dwSize, IDirectMusicDownload **ppIDMDownload) PURE; STDMETHOD(GetDLId)(THIS_ DWORD *pdwStartDLId, DWORD dwCount) PURE; STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE; STDMETHOD(Download)(THIS_ IDirectMusicDownload *pIDMDownload) PURE; STDMETHOD(Unload)(THIS_ IDirectMusicDownload *pIDMDownload) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicPortDownload_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicPortDownload_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicPortDownload_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicPortDownload methods ***/ #define IDirectMusicPortDownload_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b) #define IDirectMusicPortDownload_AllocateBuffer(p,a,b) (p)->lpVtbl->AllocateBuffer(p,a,b) #define IDirectMusicPortDownload_GetDLId(p,a,b) (p)->lpVtbl->GetDLId(p,a,b) #define IDirectMusicPortDownload_GetAppend(p,a) (p)->lpVtbl->GetAppend(p,a) #define IDirectMusicPortDownload_Download(p,a) (p)->lpVtbl->Download(p,a) #define IDirectMusicPortDownload_Unload(p,a) (p)->lpVtbl->GetBuffer(p,a) #endif /***************************************************************************** * IDirectMusicPort interface */ #define INTERFACE IDirectMusicPort DECLARE_INTERFACE_(IDirectMusicPort,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicPort methods ***/ STDMETHOD(PlayBuffer)(THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE; STDMETHOD(SetReadNotificationHandle)(THIS_ HANDLE hEvent) PURE; STDMETHOD(Read)(THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE; STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInstrument, IDirectMusicDownloadedInstrument **ppDownloadedInstrument, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges) PURE; STDMETHOD(UnloadInstrument)(THIS_ IDirectMusicDownloadedInstrument *pDownloadedInstrument) PURE; STDMETHOD(GetLatencyClock)(THIS_ struct IReferenceClock **ppClock) PURE; STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE; STDMETHOD(Compact)(THIS) PURE; STDMETHOD(GetCaps)(THIS_ LPDMUS_PORTCAPS pPortCaps) PURE; STDMETHOD(DeviceIoControl)(THIS_ DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) PURE; STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwChannelGroups) PURE; STDMETHOD(GetNumChannelGroups)(THIS_ LPDWORD pdwChannelGroups) PURE; STDMETHOD(Activate)(THIS_ BOOL fActive) PURE; STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE; STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE; STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE; STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicPort_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicPort_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicPort_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicPort methods ***/ #define IDirectMusicPort_PlayBuffer(p,a) (p)->lpVtbl->PlayBuffer(p,a) #define IDirectMusicPort_SetReadNotificationHandle(p,a) (p)->lpVtbl->SetReadNotificationHandle(p,a) #define IDirectMusicPort_Read(p,a) (p)->lpVtbl->Read(p,a) #define IDirectMusicPort_DownloadInstrument(p,a,b,c,d) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d) #define IDirectMusicPort_UnloadInstrument(p,a) (p)->lpVtbl->UnloadInstrument(p,a) #define IDirectMusicPort_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a) #define IDirectMusicPort_GetRunningStats(p,a) (p)->lpVtbl->GetRunningStats(p,a) #define IDirectMusicPort_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectMusicPort_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectMusicPort_DeviceIoControl(p,a,b,c,d,e,f,g) (p)->lpVtbl->DeviceIoControl(p,a,b,c,d,e,f,g) #define IDirectMusicPort_SetNumChannelGroups(p,a) (p)->lpVtbl->SetNumChannelGroups(p,a) #define IDirectMusicPort_GetNumChannelGroups(p,a) (p)->lpVtbl->GetNumChannelGroups(p,a) #define IDirectMusicPort_Activate(p,a) (p)->lpVtbl->Activate(p,a) #define IDirectMusicPort_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c) #define IDirectMusicPort_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c) #define IDirectMusicPort_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b) #define IDirectMusicPort_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #endif /***************************************************************************** * IDirectMusicThru interface */ #define INTERFACE IDirectMusicThru DECLARE_INTERFACE_(IDirectMusicThru,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicThru methods ***/ STDMETHOD(ThruChannel)(THIS_ DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicThru_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicThru_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicThru_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicThru methods ***/ #define IDirectMusicThru_ThruChannel(p,a,b,c,d,e) (p)->lpVtbl->ThruChannel(p,a,b,c,d,e) #endif #ifndef __IReferenceClock_INTERFACE_DEFINED__ #define __IReferenceClock_INTERFACE_DEFINED__ DEFINE_GUID(IID_IReferenceClock,0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); /***************************************************************************** * IReferenceClock interface */ #define INTERFACE IReferenceClock DECLARE_INTERFACE_(IReferenceClock,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IReferenceClock methods ***/ STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *pTime) PURE; STDMETHOD(AdviseTime)(THIS_ REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD *pdwAdviseCookie) PURE; STDMETHOD(AdvisePeriodic)(THIS_ REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD *pdwAdviseCookie) PURE; STDMETHOD(Unadvise)(THIS_ DWORD dwAdviseCookie) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IReferenceClock_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IReferenceClock_AddRef(p) (p)->lpVtbl->AddRef(p) #define IReferenceClock_Release(p) (p)->lpVtbl->Release(p) /*** IReferenceClock methods ***/ #define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a) #define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d) #define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d) #define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a) #endif #endif /* __IReferenceClock_INTERFACE_DEFINED__ */ #ifdef __cplusplus } #endif #include #endif /* __WINE_DMUSIC_CORE_H */ ================================================ FILE: wine/windows/dmusicf.h ================================================ /* * DirectMusic File Formats * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DMUSIC_FILEFORMATS_H #define __WINE_DMUSIC_FILEFORMATS_H #include #define COM_NO_WINDOWS_H #include #include #include #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * FOURCC Definitions */ /* Common chunks */ #define DMUS_FOURCC_GUID_CHUNK mmioFOURCC('g','u','i','d') #define DMUS_FOURCC_INFO_LIST mmioFOURCC('I','N','F','O') #define DMUS_FOURCC_UNFO_LIST mmioFOURCC('U','N','F','O') #define DMUS_FOURCC_UNAM_CHUNK mmioFOURCC('U','N','A','M') #define DMUS_FOURCC_UART_CHUNK mmioFOURCC('U','A','R','T') #define DMUS_FOURCC_UCOP_CHUNK mmioFOURCC('U','C','O','P') #define DMUS_FOURCC_USBJ_CHUNK mmioFOURCC('U','S','B','J') #define DMUS_FOURCC_UCMT_CHUNK mmioFOURCC('U','C','M','T') #define DMUS_FOURCC_CATEGORY_CHUNK mmioFOURCC('c','a','t','g') #define DMUS_FOURCC_VERSION_CHUNK mmioFOURCC('v','e','r','s') /* AudioPath */ #define DMUS_FOURCC_AUDIOPATH_FORM mmioFOURCC('D','M','A','P') #define DMUS_FOURCC_PORTCONFIGS_LIST mmioFOURCC('p','c','s','l') #define DMUS_FOURCC_PORTCONFIG_LIST mmioFOURCC('p','c','f','l') #define DMUS_FOURCC_PORTCONFIG_ITEM mmioFOURCC('p','c','f','h') #define DMUS_FOURCC_PORTPARAMS_ITEM mmioFOURCC('p','p','r','h') #define DMUS_FOURCC_DSBUFFER_LIST mmioFOURCC('d','b','f','l') #define DMUS_FOURCC_DSBUFFATTR_ITEM mmioFOURCC('d','d','a','h') #define DMUS_FOURCC_PCHANNELS_LIST mmioFOURCC('p','c','h','l') #define DMUS_FOURCC_PCHANNELS_ITEM mmioFOURCC('p','c','h','h') /* Band */ #define DMUS_FOURCC_BAND_FORM mmioFOURCC('D','M','B','D') #define DMUS_FOURCC_INSTRUMENTS_LIST mmioFOURCC('l','b','i','l') #define DMUS_FOURCC_INSTRUMENT_LIST mmioFOURCC('l','b','i','n') #define DMUS_FOURCC_INSTRUMENT_CHUNK mmioFOURCC('b','i','n','s') /* Chordmap */ #define DMUS_FOURCC_CHORDMAP_FORM mmioFOURCC('D','M','P','R') #define DMUS_FOURCC_IOCHORDMAP_CHUNK mmioFOURCC('p','e','r','h') #define DMUS_FOURCC_SUBCHORD_CHUNK mmioFOURCC('c','h','d','t') #define DMUS_FOURCC_CHORDENTRY_CHUNK mmioFOURCC('c','h','e','h') #define DMUS_FOURCC_SUBCHORDID_CHUNK mmioFOURCC('s','b','c','n') #define DMUS_FOURCC_IONEXTCHORD_CHUNK mmioFOURCC('n','c','r','d') #define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK mmioFOURCC('n','c','s','q') #define DMUS_FOURCC_IOSIGNPOST_CHUNK mmioFOURCC('s','p','s','h') #define DMUS_FOURCC_CHORDNAME_CHUNK mmioFOURCC('I','N','A','M') #define DMUS_FOURCC_CHORDENTRY_LIST mmioFOURCC('c','h','o','e') #define DMUS_FOURCC_CHORDMAP_LIST mmioFOURCC('c','m','a','p') #define DMUS_FOURCC_CHORD_LIST mmioFOURCC('c','h','r','d') #define DMUS_FOURCC_CHORDPALETTE_LIST mmioFOURCC('c','h','p','l') #define DMUS_FOURCC_CADENCE_LIST mmioFOURCC('c','a','d','e') #define DMUS_FOURCC_SIGNPOSTITEM_LIST mmioFOURCC('s','p','s','t') #define DMUS_FOURCC_SIGNPOST_LIST mmioFOURCC('s','p','s','q') /* Container */ #define DMUS_FOURCC_CONTAINER_FORM mmioFOURCC('D','M','C','N') #define DMUS_FOURCC_CONTAINER_CHUNK mmioFOURCC('c','o','n','h') #define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK mmioFOURCC('c','o','b','a') #define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK mmioFOURCC('c','o','b','h') #define DMUS_FOURCC_CONTAINED_OBJECTS_LIST mmioFOURCC('c','o','s','l') #define DMUS_FOURCC_CONTAINED_OBJECT_LIST mmioFOURCC('c','o','b','l') /* DirectSound Buffer Configuration */ #define DMUS_FOURCC_DSBC_FORM mmioFOURCC('D','S','B','C') #define DMUS_FOURCC_DSBD_CHUNK mmioFOURCC('d','s','b','d') #define DMUS_FOURCC_BSID_CHUNK mmioFOURCC('b','s','i','d') #define DMUS_FOURCC_DS3D_CHUNK mmioFOURCC('d','s','3','d') #define DMUS_FOURCC_DSBC_LIST mmioFOURCC('f','x','l','s') /* Effects */ #define DMUS_FOURCC_DSFX_FORM mmioFOURCC('D','S','F','X') #define DMUS_FOURCC_DSFX_CHUNK mmioFOURCC('f','x','h','r') #define DMUS_FOURCC_DSFX_DATA mmioFOURCC('d','a','t','a') /* Reference */ #define DMUS_FOURCC_REF_LIST mmioFOURCC('D','M','R','F') #define DMUS_FOURCC_REF_CHUNK mmioFOURCC('r','e','f','h') #define DMUS_FOURCC_DATE_CHUNK mmioFOURCC('d','a','t','e') #define DMUS_FOURCC_NAME_CHUNK mmioFOURCC('n','a','m','e') #define DMUS_FOURCC_FILE_CHUNK mmioFOURCC('f','i','l','e') /* Script */ #define DMUS_FOURCC_SCRIPT_FORM mmioFOURCC('D','M','S','C') #define DMUS_FOURCC_SCRIPT_CHUNK mmioFOURCC('s','c','h','d') #define DMUS_FOURCC_SCRIPTVERSION_CHUNK mmioFOURCC('s','c','v','e') #define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK mmioFOURCC('s','c','l','a') #define DMUS_FOURCC_SCRIPTSOURCE_CHUNK mmioFOURCC('s','c','s','r') /* Segment */ #define DMUS_FOURCC_SEGMENT_FORM mmioFOURCC('D','M','S','G') #define DMUS_FOURCC_SEGMENT_CHUNK mmioFOURCC('s','e','g','h') #define DMUS_FOURCC_TRACK_LIST mmioFOURCC('t','r','k','l') /* Style chunks */ #define DMUS_FOURCC_STYLE_FORM mmioFOURCC('D','M','S','T') #define DMUS_FOURCC_STYLE_CHUNK mmioFOURCC('s','t','y','h') #define DMUS_FOURCC_PART_LIST mmioFOURCC('p','a','r','t') #define DMUS_FOURCC_PART_CHUNK mmioFOURCC('p','r','t','h') #define DMUS_FOURCC_NOTE_CHUNK mmioFOURCC('n','o','t','e') #define DMUS_FOURCC_CURVE_CHUNK mmioFOURCC('c','r','v','e') #define DMUS_FOURCC_MARKER_CHUNK mmioFOURCC('m','r','k','r') #define DMUS_FOURCC_RESOLUTION_CHUNK mmioFOURCC('r','s','l','n') #define DMUS_FOURCC_ANTICIPATION_CHUNK mmioFOURCC('a','n','p','n') #define DMUS_FOURCC_PATTERN_LIST mmioFOURCC('p','t','t','n') #define DMUS_FOURCC_PATTERN_CHUNK mmioFOURCC('p','t','n','h') #define DMUS_FOURCC_RHYTHM_CHUNK mmioFOURCC('r','h','t','m') #define DMUS_FOURCC_PARTREF_LIST mmioFOURCC('p','r','e','f') #define DMUS_FOURCC_PARTREF_CHUNK mmioFOURCC('p','r','f','c') #define DMUS_FOURCC_STYLE_PERS_REF_LIST mmioFOURCC('p','r','r','f') #define DMUS_FOURCC_MOTIFSETTINGS_CHUNK mmioFOURCC('m','t','f','s') /* Tool */ #define DMUS_FOURCC_TOOL_FORM mmioFOURCC('D','M','T','L') #define DMUS_FOURCC_TOOL_CHUNK mmioFOURCC('t','o','l','h') /* ToolGraph */ #define DMUS_FOURCC_TOOLGRAPH_FORM mmioFOURCC('D','M','T','G') #define DMUS_FOURCC_TOOL_LIST mmioFOURCC('t','o','l','l') /* Track */ #define DMUS_FOURCC_TRACK_FORM mmioFOURCC('D','M','T','K') #define DMUS_FOURCC_TRACK_CHUNK mmioFOURCC('t','r','k','h') #define DMUS_FOURCC_TRACK_EXTRAS_CHUNK mmioFOURCC('t','r','k','x') /* Band Track */ #define DMUS_FOURCC_BANDTRACK_FORM mmioFOURCC('D','M','B','T') #define DMUS_FOURCC_BANDTRACK_CHUNK mmioFOURCC('b','d','t','h') #define DMUS_FOURCC_BANDS_LIST mmioFOURCC('l','b','d','l') #define DMUS_FOURCC_BAND_LIST mmioFOURCC('l','b','n','d') #define DMUS_FOURCC_BANDITEM_CHUNK mmioFOURCC('b','d','i','h') #define DMUS_FOURCC_BANDITEM_CHUNK2 mmioFOURCC('b','d','2','h') /* Chord Track */ #define DMUS_FOURCC_CHORDTRACK_LIST mmioFOURCC('c','o','r','d') #define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK mmioFOURCC('c','r','d','h') #define DMUS_FOURCC_CHORDTRACKBODY_CHUNK mmioFOURCC('c','r','d','b') /* Chordmap Track */ #define DMUS_FOURCC_PERS_TRACK_LIST mmioFOURCC('p','f','t','r') #define DMUS_FOURCC_PERS_REF_LIST mmioFOURCC('p','f','r','f') #define DMUS_FOURCC_TIME_STAMP_CHUNK mmioFOURCC('s','t','m','p') /* Command Track */ #define DMUS_FOURCC_COMMANDTRACK_CHUNK mmioFOURCC('c','m','n','d') /* Lyrics Track */ #define DMUS_FOURCC_LYRICSTRACK_LIST mmioFOURCC('l','y','r','t') #define DMUS_FOURCC_LYRICSTRACKEVENTS_LIST mmioFOURCC('l','y','r','l') #define DMUS_FOURCC_LYRICSTRACKEVENT_LIST mmioFOURCC('l','y','r','e') #define DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK mmioFOURCC('l','y','r','h') #define DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK mmioFOURCC('l','y','r','n') /* Marker Track */ #define DMUS_FOURCC_MARKERTRACK_LIST mmioFOURCC('M','A','R','K') #define DMUS_FOURCC_VALIDSTART_CHUNK mmioFOURCC('v','a','l','s') #define DMUS_FOURCC_PLAYMARKER_CHUNK mmioFOURCC('p','l','a','y') /* Mute Track */ #define DMUS_FOURCC_MUTE_CHUNK mmioFOURCC('m','u','t','e') /* Parameter Control Track */ #define DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST mmioFOURCC('p','r','m','t') #define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST mmioFOURCC('p','r','o','l') #define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK mmioFOURCC('p','r','o','h') #define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST mmioFOURCC('p','r','p','l') #define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK mmioFOURCC('p','r','p','h') #define DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK mmioFOURCC('p','r','c','c') /* Pattern Track */ #define DMUS_FOURCC_PATTERN_FORM mmioFOURCC('D','M','P','T') /* Script Track */ #define DMUS_FOURCC_SCRIPTTRACK_LIST mmioFOURCC('s','c','r','t') #define DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST mmioFOURCC('s','c','r','l') #define DMUS_FOURCC_SCRIPTTRACKEVENT_LIST mmioFOURCC('s','c','r','e') #define DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK mmioFOURCC('s','c','r','h') #define DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK mmioFOURCC('s','c','r','n') /* Segment Trgigger Track */ #define DMUS_FOURCC_SEGTRACK_LIST mmioFOURCC('s','e','g','t') #define DMUS_FOURCC_SEGTRACK_CHUNK mmioFOURCC('s','g','t','h') #define DMUS_FOURCC_SEGMENTS_LIST mmioFOURCC('l','s','g','l') #define DMUS_FOURCC_SEGMENT_LIST mmioFOURCC('l','s','e','g') #define DMUS_FOURCC_SEGMENTITEM_CHUNK mmioFOURCC('s','g','i','h') #define DMUS_FOURCC_SEGMENTITEMNAME_CHUNK mmioFOURCC('s','n','a','m') /* Sequence Track */ #define DMUS_FOURCC_SEQ_TRACK mmioFOURCC('s','e','q','t') #define DMUS_FOURCC_SEQ_LIST mmioFOURCC('e','v','t','l') #define DMUS_FOURCC_CURVE_LIST mmioFOURCC('c','u','r','l') /* Signpost Track */ #define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK mmioFOURCC('s','g','n','p') /* Style Track */ #define DMUS_FOURCC_STYLE_TRACK_LIST mmioFOURCC('s','t','t','r') #define DMUS_FOURCC_STYLE_REF_LIST mmioFOURCC('s','t','r','f') /* SysEx Track */ #define DMUS_FOURCC_SYSEX_TRACK mmioFOURCC('s','y','e','x') /* Tempo Track */ #define DMUS_FOURCC_TEMPO_TRACK mmioFOURCC('t','e','t','r') /* Time Signature Track */ #define DMUS_FOURCC_TIMESIGNATURE_TRACK mmioFOURCC('t','i','m','s') #define DMUS_FOURCC_TIMESIGTRACK_LIST mmioFOURCC('T','I','M','S') #define DMUS_FOURCC_TIMESIG_CHUNK DMUS_FOURCC_TIMESIGNATURE_TRACK /* Wave Track */ #define DMUS_FOURCC_WAVETRACK_LIST mmioFOURCC('w','a','v','t') #define DMUS_FOURCC_WAVETRACK_CHUNK mmioFOURCC('w','a','t','h') #define DMUS_FOURCC_WAVEPART_LIST mmioFOURCC('w','a','v','p') #define DMUS_FOURCC_WAVEPART_CHUNK mmioFOURCC('w','a','p','h') #define DMUS_FOURCC_WAVEITEM_LIST mmioFOURCC('w','a','v','i') #define DMUS_FOURCC_WAVE_LIST mmioFOURCC('w','a','v','e') #define DMUS_FOURCC_WAVEITEM_CHUNK mmioFOURCC('w','a','i','h') /* Wave Header */ #define DMUS_FOURCC_WAVEHEADER_CHUNK mmioFOURCC('w','a','v','h') /***************************************************************************** * Flags */ #define DMUS_BUFFERF_SHARED 0x1 #define DMUS_BUFFERF_DEFINED 0x2 #define DMUS_BUFFERF_MIXIN 0x8 #define DMUS_CHORDMAPF_VERSION8 0x1 #define DMUS_CONTAINED_OBJF_KEEP 0x1 #define DMUS_CONTAINER_NOLOADS 0x2 #define DMUS_IO_INST_PATCH 0x0001 #define DMUS_IO_INST_BANKSELECT 0x0002 #define DMUS_IO_INST_ASSIGN_PATCH 0x0008 #define DMUS_IO_INST_NOTERANGES 0x0010 #define DMUS_IO_INST_PAN 0x0020 #define DMUS_IO_INST_VOLUME 0x0040 #define DMUS_IO_INST_TRANSPOSE 0x0080 #define DMUS_IO_INST_GM 0x0100 #define DMUS_IO_INST_GS 0x0200 #define DMUS_IO_INST_XG 0x0400 #define DMUS_IO_INST_CHANNEL_PRIORITY 0x0800 #define DMUS_IO_INST_USE_DEFAULT_GM_SET 0x1000 #define DMUS_IO_INST_PITCHBENDRANGE 0x2000 #define DMUS_IO_SCRIPTTRACKF_PREPARE 0x1 #define DMUS_IO_SCRIPTTRACKF_QUEUE 0x2 #define DMUS_IO_SCRIPTTRACKF_ATTIME 0x4 #define DMUS_MARKERF_START 0x1 #define DMUS_MARKERF_STOP 0x2 #define DMUS_MARKERF_CHORD_ALIGN 0x4 #define DMUS_PATTERNF_PERSIST_CONTROL 0x1 #define DMUS_PARTF_USE_MARKERS 0x1 #define DMUS_PARTF_ALIGN_CHORDS 0x2 #define DMUS_PORTCONFIGF_DRUMSON10 0x1 #define DMUS_PORTCONFIGF_USEDEFAULT 0x2 #define DMUS_SCRIPTIOF_LOAD_ALL_CONTENT 0x1 #define DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS 0x2 #define DMUS_SEGIOF_REFLENGTH 0x1 #define DMUS_SEGIOF_CLOCKTIME 0x2 #define DMUS_SEGMENTTRACKF_MOTIF 0x1 /* Song flags; MS doesn't support this in DX 9.0 anymore */ #define DMUS_SONG_MAXSEGID 0x7FFFFFFF #define DMUS_SONG_ANYSEG 0x80000000 #define DMUS_SONG_NOSEG 0xFFFFFFFF #define DMUS_SONG_NOFROMSEG 0x80000001 #define DMUS_SIGNPOSTF_A 0x0001 #define DMUS_SIGNPOSTF_B 0x0002 #define DMUS_SIGNPOSTF_C 0x0004 #define DMUS_SIGNPOSTF_D 0x0008 #define DMUS_SIGNPOSTF_E 0x0010 #define DMUS_SIGNPOSTF_F 0x0020 #define DMUS_SIGNPOSTF_1 0x0100 #define DMUS_SIGNPOSTF_2 0x0200 #define DMUS_SIGNPOSTF_3 0x0400 #define DMUS_SIGNPOSTF_4 0x0800 #define DMUS_SIGNPOSTF_5 0x1000 #define DMUS_SIGNPOSTF_6 0x2000 #define DMUS_SIGNPOSTF_7 0x4000 #define DMUS_SIGNPOSTF_CADENCE 0x8000 #define DMUS_SIGNPOSTF_LETTER (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F) #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) #define DMUS_SPOSTCADENCEF_1 0x2 #define DMUS_SPOSTCADENCEF_2 0x4 #define DMUS_VARIATIONF_MAJOR 0x0000007F #define DMUS_VARIATIONF_MINOR 0x00003F80 #define DMUS_VARIATIONF_OTHER 0x001FC000 #define DMUS_VARIATIONF_ROOT_SCALE 0x00200000 #define DMUS_VARIATIONF_ROOT_FLAT 0x00400000 #define DMUS_VARIATIONF_ROOT_SHARP 0x00800000 #define DMUS_VARIATIONF_TYPE_TRIAD 0x01000000 #define DMUS_VARIATIONF_TYPE_6AND7 0x02000000 #define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000 #define DMUS_VARIATIONF_DEST_TO1 0x08000000 #define DMUS_VARIATIONF_DEST_TO5 0x10000000 #define DMUS_VARIATIONF_DEST_OTHER 0x40000000 #define DMUS_VARIATIONF_MODES 0xE0000000 #define DMUS_VARIATIONF_MODES_EX (0x20000000 | 0x80000000) #define DMUS_VARIATIONF_IMA25_MODE 0x00000000 #define DMUS_VARIATIONF_DMUS_MODE 0x20000000 #define DMUS_WAVETRACKF_SYNC_VAR 0x1 #define DMUS_WAVETRACKF_PERSIST_CONTROL 0x2 /***************************************************************************** * Enumerations */ /* typedef definitions */ typedef enum enumDMUS_VARIATIONT_TYPES DMUS_VARIATIONT_TYPES; typedef enum enumDMUS_EMBELLISHT_TYPES DMUS_EMBELLISHT_TYPES; typedef enum enumDMUS_PATTERNT_TYPES DMUS_PATTERNT_TYPES; /* actual enumerations */ enum enumDMUS_VARIATIONT_TYPES { DMUS_VARIATIONT_SEQUENTIAL = 0x0, DMUS_VARIATIONT_RANDOM = 0x1, DMUS_VARIATIONT_RANDOM_START = 0x2, DMUS_VARIATIONT_NO_REPEAT = 0x3, DMUS_VARIATIONT_RANDOM_ROW = 0x4 }; enum enumDMUS_EMBELLISHT_TYPES { DMUS_EMBELLISHT_NORMAL = 0x0000, DMUS_EMBELLISHT_FILL = 0x0001, DMUS_EMBELLISHT_BREAK = 0x0002, DMUS_EMBELLISHT_INTRO = 0x0004, DMUS_EMBELLISHT_END = 0x0008, DMUS_EMBELLISHT_MOTIF = 0x0010, DMUS_EMBELLISHT_ALL = 0xFFFF }; enum enumDMUS_PATTERNT_TYPES { DMUS_PATTERNT_RANDOM = 0x0, DMUS_PATTERNT_REPEAT = 0x1, DMUS_PATTERNT_SEQUENTIAL = 0x2, DMUS_PATTERNT_RANDOM_START = 0x3, DMUS_PATTERNT_NO_REPEAT = 0x4, DMUS_PATTERNT_RANDOM_ROW = 0x5 }; /***************************************************************************** * Structures */ /* typedef definitions */ typedef struct _DMUS_IO_SEQ_ITEM DMUS_IO_SEQ_ITEM, *LPDMUS_IO_SEQ_ITEM; typedef struct _DMUS_IO_CURVE_ITEM DMUS_IO_CURVE_ITEM, *LPDMUS_IO_CURVE_ITEM; typedef struct _DMUS_IO_TEMPO_ITEM DMUS_IO_TEMPO_ITEM, *LPDMUS_IO_TEMPO_ITEM; typedef struct _DMUS_IO_SYSEX_ITEM DMUS_IO_SYSEX_ITEM, *LPDMUS_IO_SYSEX_ITEM; typedef struct DMUS_CHORD_KEY DMUS_CHORD_PARAM, *LPDMUS_CHORD_PARAM; /* in dmusici.h */ typedef struct _DMUS_RHYTHM_PARAM DMUS_RHYTHM_PARAM, *LPDMUS_RHYTHM_PARAM; typedef struct _DMUS_TEMPO_PARAM DMUS_TEMPO_PARAM, *LPDMUS_TEMPO_PARAM; typedef struct _DMUS_MUTE_PARAM DMUS_MUTE_PARAM, *LPDMUS_MUTE_PARAM; typedef struct _DMUS_IO_TIMESIG DMUS_IO_TIMESIG, *LPDMUS_IO_TIMESIG; typedef struct _DMUS_IO_STYLE DMUS_IO_STYLE, *LPDMUS_IO_STYLE; typedef struct _DMUS_IO_VERSION DMUS_IO_VERSION, *LPDMUS_IO_VERSION; typedef struct _DMUS_IO_PATTERN DMUS_IO_PATTERN, *LPDMUS_IO_PATTERN; typedef struct _DMUS_IO_STYLEPART DMUS_IO_STYLEPART, *LPDMUS_IO_STYLEPART; typedef struct _DMUS_IO_PARTREF DMUS_IO_PARTREF, *LPDMUS_IO_PARTREF; typedef struct _DMUS_IO_STYLENOTE DMUS_IO_STYLENOTE, *LPDMUS_IO_STYLENOTE; typedef struct _DMUS_IO_STYLECURVE DMUS_IO_STYLECURVE, *LPDMUS_IO_STYLECURVE; typedef struct _DMUS_IO_STYLEMARKER DMUS_IO_STYLEMARKER, *LPDMUS_IO_STYLEMARKER; typedef struct _DMUS_IO_STYLERESOLUTION DMUS_IO_STYLERESOLUTION, *LPDMUS_IO_STYLERESOLUTION; typedef struct _DMUS_IO_STYLE_ANTICIPATION DMUS_IO_STYLE_ANTICIPATION, *LPDMUS_IO_STYLE_ANTICIPATION; typedef struct _DMUS_IO_MOTIFSETTINGS DMUS_IO_MOTIFSETTINGS, *LPDMUS_IO_MOTIFSETTINGS; typedef struct _DMUS_IO_CHORD DMUS_IO_CHORD, *LPDMUS_IO_CHORD; typedef struct _DMUS_IO_SUBCHORD DMUS_IO_SUBCHORD, *LPDMUS_IO_SUBCHORD; typedef struct _DMUS_IO_COMMAND DMUS_IO_COMMAND, *LPDMUS_IO_COMMAND; typedef struct _DMUS_IO_TOOL_HEADER DMUS_IO_TOOL_HEADER, *LPDMUS_IO_TOOL_HEADER; typedef struct _DMUS_IO_PORTCONFIG_HEADER DMUS_IO_PORTCONFIG_HEADER, *LPDMUS_IO_PORTCONFIG_HEADER; typedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER DMUS_IO_PCHANNELTOBUFFER_HEADER, *LPDMUS_IO_PCHANNELTOBUFFER_HEADER; typedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER DMUS_IO_BUFFER_ATTRIBUTES_HEADER, *LPDMUS_IO_BUFFER_ATTRIBUTES_HEADER; typedef struct _DMUS_IO_BAND_TRACK_HEADER DMUS_IO_BAND_TRACK_HEADER, *LPDMUS_IO_BAND_TRACK_HEADER; typedef struct _DMUS_IO_BAND_ITEM_HEADER DMUS_IO_BAND_ITEM_HEADER, *LPDMUS_IO_BAND_ITEM_HEADER; typedef struct _DMUS_IO_BAND_ITEM_HEADER2 DMUS_IO_BAND_ITEM_HEADER2, *LPDMUS_IO_BAND_ITEM_HEADER2; typedef struct _DMUS_IO_INSTRUMENT DMUS_IO_INSTRUMENT, *LPDMUS_IO_INSTRUMENT; typedef struct _DMUS_IO_WAVE_HEADER DMUS_IO_WAVE_HEADER, *LPDMUS_IO_WAVE_HEADER; typedef struct _DMUS_IO_WAVE_TRACK_HEADER DMUS_IO_WAVE_TRACK_HEADER, *LPDMUS_IO_WAVE_TRACK_HEADER; typedef struct _DMUS_IO_WAVE_PART_HEADER DMUS_IO_WAVE_PART_HEADER, *LPDMUS_IO_WAVE_PART_HEADER; typedef struct _DMUS_IO_WAVE_ITEM_HEADER DMUS_IO_WAVE_ITEM_HEADER, *LPDMUS_IO_WAVE_ITEM_HEADER; typedef struct _DMUS_IO_CONTAINER_HEADER DMUS_IO_CONTAINER_HEADER, *LPDMUS_IO_CONTAINER_HEADER; typedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER DMUS_IO_CONTAINED_OBJECT_HEADER, *LPDMUS_IO_CONTAINED_OBJECT_HEADER; typedef struct _DMUS_IO_SEGMENT_HEADER DMUS_IO_SEGMENT_HEADER, *LPDMUS_IO_SEGMENT_HEADER; typedef struct _DMUS_IO_TRACK_HEADER DMUS_IO_TRACK_HEADER, *LPDMUS_IO_TRACK_HEADER; typedef struct _DMUS_IO_TRACK_EXTRAS_HEADER DMUS_IO_TRACK_EXTRAS_HEADER, *LPDMUS_IO_TRACK_EXTRAS_HEADER; typedef struct _DMUS_IO_REFERENCE DMUS_IO_REFERENCE, *LPDMUS_IO_REFERENCE; typedef struct _DMUS_IO_CHORDMAP DMUS_IO_CHORDMAP, *LPDMUS_IO_CHORDMAP; typedef struct _DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_CHORDMAP_SUBCHORD, *LPDMUS_IO_CHORDMAP_SUBCHORD; typedef struct _DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_PERS_SUBCHORD, *LPDMUS_IO_PERS_SUBCHORD; typedef struct _DMUS_IO_CHORDENTRY DMUS_IO_CHORDENTRY, *LPDMUS_IO_CHORDENTRY; typedef struct _DMUS_IO_NEXTCHORD DMUS_IO_NEXTCHORD, *LPDMUS_IO_NEXTCHORD; typedef struct _DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_CHORDMAP_SIGNPOST, *LPDMUS_IO_CHORDMAP_SIGNPOST; typedef struct _DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_PERS_SIGNPOST, *LPDMUS_IO_PERS_SIGNPOST; typedef struct _DMUS_IO_SCRIPT_HEADER DMUS_IO_SCRIPT_HEADER, *LPDMUS_IO_SCRIPT_HEADER; typedef struct _DMUS_IO_SIGNPOST DMUS_IO_SIGNPOST, *LPDMUS_IO_SIGNPOST; typedef struct _DMUS_IO_MUTE DMUS_IO_MUTE, *LPDMUS_IO_MUTE; typedef struct _DMUS_IO_TIMESIGNATURE_ITEM DMUS_IO_TIMESIGNATURE_ITEM, *LPDMUS_IO_TIMESIGNATURE_ITEM; typedef struct _DMUS_IO_VALID_START DMUS_IO_VALID_START, *LPDMUS_IO_VALID_START; typedef struct _DMUS_IO_PLAY_MARKER DMUS_IO_PLAY_MARKER, *LPDMUS_IO_PLAY_MARKER; typedef struct _DMUS_IO_SEGMENT_TRACK_HEADER DMUS_IO_SEGMENT_TRACK_HEADER, *LPDMUS_IO_SEGMENT_TRACK_HEADER; typedef struct _DMUS_IO_SEGMENT_ITEM_HEADER DMUS_IO_SEGMENT_ITEM_HEADER, *LPDMUS_IO_SEGMENT_ITEM_HEADER; typedef struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER DMUS_IO_SCRIPTTRACK_EVENTHEADER, *LPDMUS_IO_SCRIPTTRACK_EVENTHEADER; typedef struct _DMUS_IO_LYRICSTRACK_EVENTHEADER DMUS_IO_LYRICSTRACK_EVENTHEADER, *LPDMUS_IO_LYRICSTRACK_EVENTHEADER; typedef struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER, *LPDMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER; typedef struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER, *LPDMUS_IO_PARAMCONTROLTRACK_PARAMHEADER; typedef struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO DMUS_IO_PARAMCONTROLTRACK_CURVEINFO, *LPDMUS_IO_PARAMCONTROLTRACK_CURVEINFO; typedef struct _DSOUND_IO_DSBUFFERDESC DSOUND_IO_DSBUFFERDESC, *LPDSOUND_IO_DSBUFFERDESC; typedef struct _DSOUND_IO_DSBUSID DSOUND_IO_DSBUSID, *LPDSOUND_IO_DSBUSID; typedef struct _DSOUND_IO_3D DSOUND_IO_3D, *LPDSOUND_IO_3D; typedef struct _DSOUND_IO_DXDMO_HEADER DSOUND_IO_DXDMO_HEADER, *LPDSOUND_IO_DXDMO_HEADER; typedef struct _DSOUND_IO_DXDMO_DATA DSOUND_IO_DXDMO_DATA, *LPDSOUND_IO_DXDMO_DATA; /* actual structures */ struct _DMUS_IO_SEQ_ITEM { MUSIC_TIME mtTime; MUSIC_TIME mtDuration; DWORD dwPChannel; short nOffset; BYTE bStatus; BYTE bByte1; BYTE bByte2; }; struct _DMUS_IO_CURVE_ITEM { MUSIC_TIME mtStart; MUSIC_TIME mtDuration; MUSIC_TIME mtResetDuration; DWORD dwPChannel; short nOffset; short nStartValue; short nEndValue; short nResetValue; BYTE bType; BYTE bCurveShape; BYTE bCCData; BYTE bFlags; /* DX8 */ WORD wParamType; WORD wMergeIndex; }; struct _DMUS_IO_TEMPO_ITEM { MUSIC_TIME lTime; double dblTempo; }; struct _DMUS_IO_SYSEX_ITEM { MUSIC_TIME mtTime; DWORD dwPChannel; DWORD dwSysExLength; }; struct _DMUS_RHYTHM_PARAM { DMUS_TIMESIGNATURE TimeSig; DWORD dwRhythmPattern; }; struct _DMUS_TEMPO_PARAM { MUSIC_TIME mtTime; double dblTempo; }; struct _DMUS_MUTE_PARAM { DWORD dwPChannel; DWORD dwPChannelMap; BOOL fMute; }; #pragma pack(2) struct _DMUS_IO_TIMESIG { BYTE bBeatsPerMeasure; BYTE bBeat; WORD wGridsPerBeat; }; struct _DMUS_IO_STYLE { DMUS_IO_TIMESIG timeSig; double dblTempo; }; struct _DMUS_IO_VERSION { DWORD dwVersionMS; DWORD dwVersionLS; }; struct _DMUS_IO_PATTERN { DMUS_IO_TIMESIG timeSig; BYTE bGrooveBottom; BYTE bGrooveTop; WORD wEmbellishment; WORD wNbrMeasures; BYTE bDestGrooveBottom; BYTE bDestGrooveTop; DWORD dwFlags; }; struct _DMUS_IO_STYLEPART { DMUS_IO_TIMESIG timeSig; DWORD dwVariationChoices[32]; GUID guidPartID; WORD wNbrMeasures; BYTE bPlayModeFlags; BYTE bInvertUpper; BYTE bInvertLower; BYTE bPad[3]; DWORD dwFlags; }; struct _DMUS_IO_PARTREF { GUID guidPartID; WORD wLogicalPartID; BYTE bVariationLockID; BYTE bSubChordLevel; BYTE bPriority; BYTE bRandomVariation; WORD wPad; DWORD dwPChannel; }; struct _DMUS_IO_STYLENOTE { MUSIC_TIME mtGridStart; DWORD dwVariation; MUSIC_TIME mtDuration; short nTimeOffset; WORD wMusicValue; BYTE bVelocity; BYTE bTimeRange; BYTE bDurRange; BYTE bVelRange; BYTE bInversionID; BYTE bPlayModeFlags; /* DX8 */ BYTE bNoteFlags; }; struct _DMUS_IO_STYLECURVE { MUSIC_TIME mtGridStart; DWORD dwVariation; MUSIC_TIME mtDuration; MUSIC_TIME mtResetDuration; short nTimeOffset; short nStartValue; short nEndValue; short nResetValue; BYTE bEventType; BYTE bCurveShape; BYTE bCCData; BYTE bFlags; /* DX8 */ WORD wParamType; WORD wMergeIndex; }; struct _DMUS_IO_STYLEMARKER { MUSIC_TIME mtGridStart; DWORD dwVariation; WORD wMarkerFlags; }; struct _DMUS_IO_STYLERESOLUTION { DWORD dwVariation; WORD wMusicValue; BYTE bInversionID; BYTE bPlayModeFlags; }; struct _DMUS_IO_STYLE_ANTICIPATION { MUSIC_TIME mtGridStart; DWORD dwVariation; short nTimeOffset; BYTE bTimeRange; }; struct _DMUS_IO_MOTIFSETTINGS { DWORD dwRepeats; MUSIC_TIME mtPlayStart; MUSIC_TIME mtLoopStart; MUSIC_TIME mtLoopEnd; DWORD dwResolution; }; #pragma pack() struct _DMUS_IO_CHORD { WCHAR wszName[16]; MUSIC_TIME mtTime; WORD wMeasure; BYTE bBeat; BYTE bFlags; }; struct _DMUS_IO_SUBCHORD { DWORD dwChordPattern; DWORD dwScalePattern; DWORD dwInversionPoints; DWORD dwLevels; BYTE bChordRoot; BYTE bScaleRoot; }; struct _DMUS_IO_COMMAND { MUSIC_TIME mtTime; WORD wMeasure; BYTE bBeat; BYTE bCommand; BYTE bGrooveLevel; BYTE bGrooveRange; BYTE bRepeatMode; }; struct _DMUS_IO_TOOL_HEADER { GUID guidClassID; LONG lIndex; DWORD cPChannels; FOURCC ckid; FOURCC fccType; DWORD dwPChannels[1]; }; struct _DMUS_IO_PORTCONFIG_HEADER { GUID guidPort; DWORD dwPChannelBase; DWORD dwPChannelCount; DWORD dwFlags; }; struct _DMUS_IO_PCHANNELTOBUFFER_HEADER { DWORD dwPChannelBase; DWORD dwPChannelCount; DWORD dwBufferCount; DWORD dwFlags; }; struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER { GUID guidBufferID; DWORD dwFlags; }; struct _DMUS_IO_BAND_TRACK_HEADER { BOOL bAutoDownload; }; struct _DMUS_IO_BAND_ITEM_HEADER { MUSIC_TIME lBandTime; }; struct _DMUS_IO_BAND_ITEM_HEADER2 { MUSIC_TIME lBandTimeLogical; MUSIC_TIME lBandTimePhysical; }; struct _DMUS_IO_INSTRUMENT { DWORD dwPatch; DWORD dwAssignPatch; DWORD dwNoteRanges[4]; DWORD dwPChannel; DWORD dwFlags; BYTE bPan; BYTE bVolume; short nTranspose; DWORD dwChannelPriority; short nPitchBendRange; }; struct _DMUS_IO_WAVE_HEADER { REFERENCE_TIME rtReadAhead; DWORD dwFlags; }; struct _DMUS_IO_WAVE_TRACK_HEADER { LONG lVolume; DWORD dwFlags; }; struct _DMUS_IO_WAVE_PART_HEADER { LONG lVolume; DWORD dwVariations; DWORD dwPChannel; DWORD dwLockToPart; DWORD dwFlags; DWORD dwIndex; }; struct _DMUS_IO_WAVE_ITEM_HEADER { LONG lVolume; LONG lPitch; DWORD dwVariations; REFERENCE_TIME rtTime; REFERENCE_TIME rtStartOffset; REFERENCE_TIME rtReserved; REFERENCE_TIME rtDuration; MUSIC_TIME mtLogicalTime; DWORD dwLoopStart; DWORD dwLoopEnd; DWORD dwFlags; WORD wVolumeRange; WORD wPitchRange; }; struct _DMUS_IO_CONTAINER_HEADER { DWORD dwFlags; }; struct _DMUS_IO_CONTAINED_OBJECT_HEADER { GUID guidClassID; DWORD dwFlags; FOURCC ckid; FOURCC fccType; }; struct _DMUS_IO_SEGMENT_HEADER { DWORD dwRepeats; MUSIC_TIME mtLength; MUSIC_TIME mtPlayStart; MUSIC_TIME mtLoopStart; MUSIC_TIME mtLoopEnd; DWORD dwResolution; /* DX8 */ REFERENCE_TIME rtLength; DWORD dwFlags; DWORD dwReserved; /* DX9 */ REFERENCE_TIME rtLoopStart; REFERENCE_TIME rtLoopEnd; REFERENCE_TIME rtPlayStart; }; struct _DMUS_IO_TRACK_HEADER { GUID guidClassID; DWORD dwPosition; DWORD dwGroup; FOURCC ckid; FOURCC fccType; }; struct _DMUS_IO_TRACK_EXTRAS_HEADER { DWORD dwFlags; DWORD dwPriority; }; struct _DMUS_IO_REFERENCE { GUID guidClassID; DWORD dwValidData; }; struct _DMUS_IO_CHORDMAP { WCHAR wszLoadName[20]; DWORD dwScalePattern; DWORD dwFlags; }; struct _DMUS_IO_CHORDMAP_SUBCHORD { DWORD dwChordPattern; DWORD dwScalePattern; DWORD dwInvertPattern; BYTE bChordRoot; BYTE bScaleRoot; WORD wCFlags; DWORD dwLevels; }; struct _DMUS_IO_CHORDENTRY { DWORD dwFlags; WORD wConnectionID; }; struct _DMUS_IO_NEXTCHORD { DWORD dwFlags; WORD nWeight; WORD wMinBeats; WORD wMaxBeats; WORD wConnectionID; }; struct _DMUS_IO_CHORDMAP_SIGNPOST { DWORD dwChords; DWORD dwFlags; }; struct _DMUS_IO_SCRIPT_HEADER { DWORD dwFlags; }; struct _DMUS_IO_SIGNPOST { MUSIC_TIME mtTime; DWORD dwChords; WORD wMeasure; }; struct _DMUS_IO_MUTE { MUSIC_TIME mtTime; DWORD dwPChannel; DWORD dwPChannelMap; }; struct _DMUS_IO_TIMESIGNATURE_ITEM { MUSIC_TIME lTime; BYTE bBeatsPerMeasure; BYTE bBeat; WORD wGridsPerBeat; }; struct _DMUS_IO_VALID_START { MUSIC_TIME mtTime; }; struct _DMUS_IO_PLAY_MARKER { MUSIC_TIME mtTime; }; struct _DMUS_IO_SEGMENT_TRACK_HEADER { DWORD dwFlags; }; struct _DMUS_IO_SEGMENT_ITEM_HEADER { MUSIC_TIME lTimeLogical; MUSIC_TIME lTimePhysical; DWORD dwPlayFlags; DWORD dwFlags; }; struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER { DWORD dwFlags; MUSIC_TIME lTimeLogical; MUSIC_TIME lTimePhysical; }; struct _DMUS_IO_LYRICSTRACK_EVENTHEADER { DWORD dwFlags; DWORD dwTimingFlags; MUSIC_TIME lTimeLogical; MUSIC_TIME lTimePhysical; }; struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER { DWORD dwFlags; GUID guidTimeFormat; DWORD dwPChannel; DWORD dwStage; DWORD dwBuffer; GUID guidObject; DWORD dwIndex; }; struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER { DWORD dwFlags; DWORD dwIndex; }; struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO { MUSIC_TIME mtStartTime; MUSIC_TIME mtEndTime; float fltStartValue; float fltEndValue; DWORD dwCurveType; DWORD dwFlags; }; struct _DSOUND_IO_DSBUFFERDESC { DWORD dwFlags; WORD nChannels; LONG lVolume; LONG lPan; DWORD dwReserved; }; struct _DSOUND_IO_DSBUSID { DWORD busid[1]; }; struct _DSOUND_IO_3D { GUID guid3DAlgorithm; DS3DBUFFER ds3d; }; struct _DSOUND_IO_DXDMO_HEADER { DWORD dwEffectFlags; GUID guidDSFXClass; GUID guidReserved; GUID guidSendBuffer; DWORD dwReserved; }; struct _DSOUND_IO_DXDMO_DATA { DWORD data[1]; }; #ifdef __cplusplus } #endif #include #endif /* __WINE_DMUSIC_FILEFORMATS_H */ ================================================ FILE: wine/windows/dmusici.h ================================================ /* * DirectMusic Performance API * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DMUSIC_PERFORMANCE_H #define __WINE_DMUSIC_PERFORMANCE_H #include #define COM_NO_WINDOWS_H #include #include #include #include #include #ifdef WINE_NO_UNICODE_MACROS #undef AddPort #endif #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * Predeclare the interfaces */ /* CLSIDs */ DEFINE_GUID(CLSID_DirectMusicAudioPathConfig, 0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74); DEFINE_GUID(CLSID_DirectMusicBand, 0x79ba9e00,0xb6ee,0x11d1,0x86,0xbe,0x00,0xc0,0x4f,0xbf,0x8f,0xef); DEFINE_GUID(CLSID_DirectMusicChordMap, 0xd2ac288f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicComposer, 0xd2ac2890,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicContainer, 0x9301e380,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47); DEFINE_GUID(CLSID_DirectMusicGraph, 0xd2ac2884,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicLoader, 0xd2ac2892,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicPatternTrack, 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicPerformance, 0xd2ac2881,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicScript, 0x810b5013,0xe88d,0x11d2,0x8b,0xc1,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_DirectMusicSegment, 0xd2ac2882,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicSegmentState, 0xd2ac2883,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicStyle, 0xd2ac288a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectSoundWave, 0x8a667154,0xf9cb,0x11d2,0xad,0x8a,0x00,0x60,0xb0,0x57,0x5a,0xbc); /* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */ DEFINE_GUID(CLSID_DirectMusicSong, 0xaed5f0a5,0xd972,0x483d,0xa3,0x84,0x64,0x9d,0xfe,0xb9,0xc1,0x81); /* these CLSIDs aren't officially declared in any dmusic header, but are used by wine's regsvr implementations*/ DEFINE_GUID(CLSID_DirectMusicSynthSink, 0xaec17ce3,0xa514,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(CLSID_DirectMusicSection, 0x3f037241,0x414e,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c); DEFINE_GUID(CLSID_DirectMusicAuditionTrack, 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(CLSID_DirectMusicSegTriggerTrack, 0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_DirectMusicTemplate, 0xd30bcc65,0x60e8,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c); DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegment, 0x4062c116,0x0270,0x11d3,0x8b,0xcb,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_AudioVBScript, 0x4ee17959,0x931e,0x49e4,0xa2,0xc6,0x97,0x7e,0xcf,0x36,0x28,0xf3); DEFINE_GUID(CLSID_DirectMusicScriptAutoImpPerformance, 0xa861c6e2,0xfcfc,0x11d2,0x8b,0xc9,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_DirectMusicScriptSourceCodeLoader, 0xc70eb77f,0xefd4,0x4678,0xa2,0x7b,0xbf,0x16,0x48,0xf3,0x0d,0x04); DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegmentState, 0xebf2320a,0x2502,0x11d3,0x8b,0xd1,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPathConfig, 0x1cebde3e,0x6b91,0x484a,0xaf,0x48,0x5e,0x4f,0x4e,0xd6,0xb1,0xe1); DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPath, 0x2c5f9b72,0x7148,0x4d97,0xbf,0xc9,0x68,0xa0,0xe0,0x76,0xbe,0xbd); DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSong, 0xa16f1761,0xb6d8,0x42eb,0x8d,0x57,0x4a,0x44,0xfe,0xdd,0x3b,0xd2); /* IIDs */ DEFINE_GUID(IID_IDirectMusicAudioPath, 0xc87631f5,0x23be,0x4986,0x88,0x36,0x05,0x83,0x2f,0xcc,0x48,0xf9); DEFINE_GUID(IID_IDirectMusicBand, 0xd2ac28c0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicChordMap, 0xd2ac28be,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicComposer, 0xd2ac28bf,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicContainer, 0x9301e386,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47); DEFINE_GUID(IID_IDirectMusicGetLoader, 0x68a04844,0xd13d,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(IID_IDirectMusicGraph, 0x2befc277,0x5497,0x11d2,0xbc,0xcb,0x00,0xa0,0xc9,0x22,0xe6,0xeb); DEFINE_GUID(IID_IDirectMusicLoader, 0x2ffaaca2,0x5dca,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(IID_IDirectMusicLoader8, 0x19e7c08c,0x0a44,0x4e6a,0xa1,0x16,0x59,0x5a,0x7c,0xd5,0xde,0x8c); DEFINE_GUID(IID_IDirectMusicObject, 0xd2ac28b5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicPatternTrack, 0x51c22e10,0xb49f,0x46fc,0xbe,0xc2,0xe6,0x28,0x8f,0xb9,0xed,0xe6); DEFINE_GUID(IID_IDirectMusicPerformance, 0x07d43d03,0x6523,0x11d2,0x87,0x1d,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicPerformance2, 0x6fc2cae0,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(IID_IDirectMusicPerformance8, 0x679c4137,0xc62e,0x4147,0xb2,0xb4,0x9d,0x56,0x9a,0xcb,0x25,0x4c); DEFINE_GUID(IID_IDirectMusicScript, 0x2252373a,0x5814,0x489b,0x82,0x09,0x31,0xfe,0xde,0xba,0xf1,0x37); DEFINE_GUID(IID_IDirectMusicSegment, 0xf96029a2,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicSegment2, 0xd38894d1,0xc052,0x11d2,0x87,0x2f,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicSegment8, 0xc6784488,0x41a3,0x418f,0xaa,0x15,0xb3,0x50,0x93,0xba,0x42,0xd4); DEFINE_GUID(IID_IDirectMusicSegmentState, 0xa3afdcc7,0xd3ee,0x11d1,0xbc,0x8d,0x00,0xa0,0xc9,0x22,0xe6,0xeb); DEFINE_GUID(IID_IDirectMusicSegmentState8, 0xa50e4730,0x0ae4,0x48a7,0x98,0x39,0xbc,0x04,0xbf,0xe0,0x77,0x72); DEFINE_GUID(IID_IDirectMusicStyle, 0xd2ac28bd,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(IID_IDirectMusicStyle8, 0xfd24ad8a,0xa260,0x453d,0xbf,0x50,0x6f,0x93,0x84,0xf7,0x09,0x85); /* IIDs of unchanged interfaces */ #define IID_IDirectMusicAudioPath8 IID_IDirectMusicAudioPath #define IID_IDirectMusicBand8 IID_IDirectMusicBand #define IID_IDirectMusicChordMap8 IID_IDirectMusicChordMap #define IID_IDirectMusicComposer8 IID_IDirectMusicComposer #define IID_IDirectMusicContainer8 IID_IDirectMusicContainer #define IID_IDirectMusicGetLoader8 IID_IDirectMusicGetLoader #define IID_IDirectMusicGraph8 IID_IDirectMusicGraph #define IID_IDirectMusicObject8 IID_IDirectMusicObject #define IID_IDirectMusicPatternTrack8 IID_IDirectMusicPatternTrack #define IID_IDirectMusicScript8 IID_IDirectMusicScript /* typedef definitions */ typedef struct IDirectMusicBand *LPDIRECTMUSICBAND; typedef struct IDirectMusicBand IDirectMusicBand8, *LPDIRECTMUSICBAND8; typedef struct IDirectMusicObject *LPDIRECTMUSICOBJECT; typedef struct IDirectMusicObject IDirectMusicObject8, *LPDIRECTMUSICOBJECT8; typedef struct IDirectMusicLoader *LPDIRECTMUSICLOADER; typedef struct IDirectMusicLoader8 *LPDIRECTMUSICLOADER8; typedef struct IDirectMusicGetLoader *LPDIRECTMUSICGETLOADER; typedef struct IDirectMusicGetLoader IDirectMusicGetLoader8, *LPDIRECTMUSICGETLOADER8; typedef struct IDirectMusicAudioPath *LPDIRECTMUSICAUDIOPATH; typedef struct IDirectMusicAudioPath IDirectMusicAudioPath8, *LPDIRECTMUSICAUDIOPATH8; typedef struct IDirectMusicStyle *LPDIRECTMUSICSTYLE; typedef struct IDirectMusicStyle8 *LPDIRECTMUSICSTYLE8; typedef struct IDirectMusicChordMap *LPDIRECTMUSICCHORDMAP; typedef struct IDirectMusicChordMap IDirectMusicChordMap8, *LPDIRECTMUSICCHORDMAP8; typedef struct IDirectMusicComposer *LPDIRECTMUSICCOMPOSER; typedef struct IDirectMusicComposer IDirectMusicComposer8, *LPDIRECTMUSICCOMPOSER8; typedef struct IDirectMusicPatternTrack *LPDIRECTMUSICPATTERNTRACK; typedef struct IDirectMusicPatternTrack IDirectMusicPatternTrack8, *LPDIRECTMUSICPATTERNTRACK8; typedef struct IDirectMusicScript *LPDIRECTMUSICSCRIPT; typedef struct IDirectMusicScript IDirectMusicScript8, *LPDIRECTMUSICSCRIPT8; typedef struct IDirectMusicContainer *LPDIRECTMUSICCONTAINER; typedef struct IDirectMusicContainer IDirectMusicContainer8, *LPDIRECTMUSICCONTAINER8; /* RPC declarations */ typedef struct IDirectMusicBand *LPDMUS_BAND; typedef struct IDirectMusicLoader *LPDMUS_LOADER; typedef struct IDirectMusicObject *LPDMUS_OBJECT; /* GUIDs - all types loader */ DEFINE_GUID(GUID_DirectMusicAllTypes, 0xd2ac2893,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); /* GUIDs - notification */ DEFINE_GUID(GUID_NOTIFICATION_CHORD, 0xd2ac289b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_NOTIFICATION_COMMAND, 0xd2ac289c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_NOTIFICATION_MEASUREANDBEAT, 0xd2ac289a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_NOTIFICATION_PERFORMANCE, 0x81f75bc5,0x4e5d,0x11d2,0xbc,0xc7,0x00,0xa0,0xc9,0x22,0xe6,0xeb); DEFINE_GUID(GUID_NOTIFICATION_RECOMPOSE, 0xd348372b,0x945b,0x45ae,0xa5,0x22,0x45,0x0f,0x12,0x5b,0x84,0xa5); DEFINE_GUID(GUID_NOTIFICATION_SEGMENT, 0xd2ac2899,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); /* GUIDs - param types */ DEFINE_GUID(GUID_BandParam, 0x02bb1938,0xcb8b,0x11d2,0x8b,0xb9,0x00,0x60,0x08,0x93,0xb1,0xb6); DEFINE_GUID(GUID_ChordParam, 0xd2ac289e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_CommandParam, 0xd2ac289d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_CommandParam2, 0x28f97ef7,0x9538,0x11d2,0x97,0xa9,0x00,0xc0,0x4f,0xa3,0x6e,0x58); DEFINE_GUID(GUID_CommandParamNext, 0x472afe7a,0x281b,0x11d3,0x81,0x7d,0x00,0xc0,0x4f,0xa3,0x6e,0x58); DEFINE_GUID(GUID_IDirectMusicBand, 0xd2ac28ac,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_IDirectMusicChordMap, 0xd2ac28ad,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_IDirectMusicStyle, 0xd2ac28a1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_MuteParam, 0xd2ac28af,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_Play_Marker, 0xd8761a41,0x801a,0x11d3,0x9b,0xd1,0xda,0xf7,0xe1,0xc3,0xd8,0x34); DEFINE_GUID(GUID_RhythmParam, 0xd2ac289f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_TempoParam, 0xd2ac28a5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_TimeSignature, 0xd2ac28a4,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_Valid_Start_Time, 0x7f6b1760,0x1fdb,0x11d3,0x82,0x26,0x44,0x45,0x53,0x54,0x00,0x00); /* GUIDs - param setting */ DEFINE_GUID(GUID_Clear_All_Bands, 0xd2ac28ab,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_ConnectToDLSCollection, 0x1db1ae6b,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e); DEFINE_GUID(GUID_Disable_Auto_Download, 0xd2ac28aa,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_DisableTempo, 0x45fc707d,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb); DEFINE_GUID(GUID_DisableTimeSig, 0x45fc707b,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb); DEFINE_GUID(GUID_Download, 0xd2ac28a7,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_DownloadToAudioPath, 0x9f2c0341,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Enable_Auto_Download, 0xd2ac28a9,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_EnableTempo, 0x45fc707e,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb); DEFINE_GUID(GUID_EnableTimeSig, 0x45fc707c,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb); #define GUID_IgnoreBankSelectForGM GUID_StandardMIDIFile DEFINE_GUID(GUID_SeedVariations, 0x65b76fa5,0xff37,0x11d2,0x81,0x4e,0x00,0xc0,0x4f,0xa3,0x6e,0x58); DEFINE_GUID(GUID_StandardMIDIFile, 0x06621075,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e); DEFINE_GUID(GUID_Unload, 0xd2ac28a8,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_UnloadFromAudioPath, 0x9f2c0342,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Variations, 0x11f72cce,0x26e6,0x4ecd,0xaf,0x2e,0xd6,0x68,0xe6,0x67,0x07,0xd8); /* GUIDs - global data */ DEFINE_GUID(GUID_PerfMasterTempo, 0xd2ac28b0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_PerfMasterVolume, 0xd2ac28b1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_PerfMasterGrooveLevel, 0xd2ac28b2,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd); DEFINE_GUID(GUID_PerfAutoDownload, 0xfb09565b,0x3631,0x11d2,0xbc,0xb8,0x00,0xa0,0xc9,0x22,0xe6,0xeb); /* GUID - default DLS collection */ DEFINE_GUID(GUID_DefaultGMCollection, 0xf17e8673,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd); /* GUID - default synthesizer */ DEFINE_GUID(GUID_Synth_Default, 0x26bb9432,0x45fe,0x48d3,0xa3,0x75,0x24,0x72,0xc5,0xe3,0xe7,0x86); /* GUIDs - define default buffer configuration */ DEFINE_GUID(GUID_Buffer_Reverb, 0x186cc541,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74); DEFINE_GUID(GUID_Buffer_EnvReverb, 0x186cc542,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74); DEFINE_GUID(GUID_Buffer_Stereo, 0x186cc545,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74); DEFINE_GUID(GUID_Buffer_3D_Dry, 0x186cc546,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74); DEFINE_GUID(GUID_Buffer_Mono, 0x186cc547,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74); /***************************************************************************** * Typedef definitions */ typedef WORD TRANSITION_TYPE, *LPTRANSITION_TYPE; /* * typedef __int64 REFERENCE_TIME, *LPREFERENCE_TIME; * typedef LONG MUSIC_TIME, *LPMUSIC_TIME; */ /***************************************************************************** * Flags */ #define DMUS_APATH_SHARED_STEREOPLUSREVERB 0x1 #define DMUS_APATH_DYNAMIC_3D 0x6 #define DMUS_APATH_DYNAMIC_MONO 0x7 #define DMUS_APATH_DYNAMIC_STEREO 0x8 #define DMUS_AUDIOF_3D 0x01 #define DMUS_AUDIOF_ENVIRON 0x02 #define DMUS_AUDIOF_EAX 0x04 #define DMUS_AUDIOF_DMOS 0x08 #define DMUS_AUDIOF_STREAMING 0x10 #define DMUS_AUDIOF_BUFFERS 0x20 #define DMUS_AUDIOF_ALL 0x3F #define DMUS_AUDIOPARAMS_FEATURES 0x1 #define DMUS_AUDIOPARAMS_VOICES 0x2 #define DMUS_AUDIOPARAMS_SAMPLERATE 0x4 #define DMUS_AUDIOPARAMS_DEFAULTSYNTH 0x8 #define DMUS_CURVET_PBCURVE 0x03 #define DMUS_CURVET_CCCURVE 0x04 #define DMUS_CURVET_MATCURVE 0x05 #define DMUS_CURVET_PATCURVE 0x06 #define DMUS_CURVET_RPNCURVE 0x07 #define DMUS_CURVET_NRPNCURVE 0x08 #define DMUS_MASTERTEMPO_MAX 100.0f #define DMUS_MASTERTEMPO_MIN 0.01f #define DMUS_MAX_NAME 0x40 #define DMUS_MAX_CATEGORY 0x40 #define DMUS_MAX_FILENAME MAX_PATH #define DMUS_MAXSUBCHORD 0x8 #define DMUS_NOTIFICATION_SEGSTART 0x0 #define DMUS_NOTIFICATION_SEGEND 0x1 #define DMUS_NOTIFICATION_SEGALMOSTEND 0x2 #define DMUS_NOTIFICATION_SEGLOOP 0x3 #define DMUS_NOTIFICATION_SEGABORT 0x4 #define DMUS_NOTIFICATION_MUSICSTARTED 0x0 #define DMUS_NOTIFICATION_MUSICSTOPPED 0x1 #define DMUS_NOTIFICATION_MUSICALMOSTEND 0x2 #define DMUS_NOTIFICATION_MEASUREBEAT 0x0 #define DMUS_NOTIFICATION_CHORD 0x0 #define DMUS_NOTIFICATION_GROOVE 0x0 #define DMUS_NOTIFICATION_EMBELLISHMENT 0x1 #define DMUS_NOTIFICATION_RECOMPOSE 0x0 #define DMUS_OBJ_OBJECT 0x001 #define DMUS_OBJ_CLASS 0x002 #define DMUS_OBJ_NAME 0x004 #define DMUS_OBJ_CATEGORY 0x008 #define DMUS_OBJ_FILENAME 0x010 #define DMUS_OBJ_FULLPATH 0x020 #define DMUS_OBJ_URL 0x040 #define DMUS_OBJ_VERSION 0x080 #define DMUS_OBJ_DATE 0x100 #define DMUS_OBJ_LOADED 0x200 #define DMUS_OBJ_MEMORY 0x400 #define DMUS_OBJ_STREAM 0x800 #define DMUS_PATH_SEGMENT 0x1000 #define DMUS_PATH_SEGMENT_TRACK 0x1100 #define DMUS_PATH_SEGMENT_GRAPH 0x1200 #define DMUS_PATH_SEGMENT_TOOL 0x1300 #define DMUS_PATH_AUDIOPATH 0x2000 #define DMUS_PATH_AUDIOPATH_GRAPH 0x2200 #define DMUS_PATH_AUDIOPATH_TOOL 0x2300 #define DMUS_PATH_PERFORMANCE 0x3000 #define DMUS_PATH_PERFORMANCE_GRAPH 0x3200 #define DMUS_PATH_PERFORMANCE_TOOL 0x3300 #define DMUS_PATH_PORT 0x4000 #define DMUS_PATH_BUFFER 0x6000 #define DMUS_PATH_BUFFER_DMO 0x6100 #define DMUS_PATH_MIXIN_BUFFER 0x7000 #define DMUS_PATH_MIXIN_BUFFER_DMO 0x7100 #define DMUS_PATH_PRIMARY_BUFFER 0x8000 #define DMUS_PCHANNEL_BROADCAST_PERFORMANCE 0xFFFFFFFF #define DMUS_PCHANNEL_BROADCAST_AUDIOPATH 0xFFFFFFFE #define DMUS_PCHANNEL_BROADCAST_SEGMENT 0xFFFFFFFD #define DMUS_PCHANNEL_BROADCAST_GROUPS 0xFFFFFFFC #define DMUS_PCHANNEL_ALL 0xFFFFFFFB #define DMUS_PLAYMODE_FIXED 0x0 #define DMUS_PLAYMODE_FIXEDTOKEY DMUS_PLAYMODE_KEY_ROOT #define DMUS_PLAYMODE_FIXEDTOCHORD DMUS_PLAYMODE_CHORD_ROOT #define DMUS_PLAYMODE_PEDALPOINT (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS) #define DMUS_PLAYMODE_MELODIC (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS) #define DMUS_PLAYMODE_NORMALCHORD (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS) #define DMUS_PLAYMODE_ALWAYSPLAY (DMUS_PLAYMODE_MELODIC | DMUS_PLAYMODE_NORMALCHORD) #define DMUS_PLAYMODE_PEDALPOINTCHORD (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS) #define DMUS_PLAYMODE_PEDALPOINTALWAYS (DMUS_PLAYMODE_PEDALPOINT | DMUS_PLAYMODE_PEDALPOINTCHORD) #define DMUS_PLAYMODE_PURPLEIZED DMUS_PLAYMODE_ALWAYSPLAY #define DMUS_PLAYMODE_SCALE_ROOT DMUS_PLAYMODE_KEY_ROOT #define DMUS_PLAYMODE_FIXEDTOSCALE DMUS_PLAYMODE_FIXEDTOKEY #define DMUS_PPQ 768 #define DMUS_SEG_REPEAT_INFINITE 0xFFFFFFFF #define DMUS_SEG_ALLTRACKS 0x80000000 #define DMUS_SEG_ANYTRACK 0x80000000 #define DMUS_TEMPO_MAX 1000 #define DMUS_TEMPO_MIN 1 #define DMUS_TRACKCONFIG_OVERRIDE_ALL 0x00001 #define DMUS_TRACKCONFIG_OVERRIDE_PRIMARY 0x00002 #define DMUS_TRACKCONFIG_FALLBACK 0x00004 #define DMUS_TRACKCONFIG_CONTROL_ENABLED 0x00008 #define DMUS_TRACKCONFIG_PLAY_ENABLED 0x00010 #define DMUS_TRACKCONFIG_NOTIFICATION_ENABLED 0x00020 #define DMUS_TRACKCONFIG_PLAY_CLOCKTIME 0x00040 #define DMUS_TRACKCONFIG_PLAY_COMPOSE 0x00080 #define DMUS_TRACKCONFIG_LOOP_COMPOSE 0x00100 #define DMUS_TRACKCONFIG_COMPOSING 0x00200 #define DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART 0x00400 #define DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT 0x00800 #define DMUS_TRACKCONFIG_TRANS1_TOSEGSTART 0x01000 #define DMUS_TRACKCONFIG_CONTROL_PLAY 0x10000 #define DMUS_TRACKCONFIG_CONTROL_NOTIFICATION 0x20000 #define DMUS_TRACKCONFIG_DEFAULT (DMUS_TRACKCONFIG_CONTROL_ENABLED | DMUS_TRACKCONFIG_PLAY_ENABLED | DMUS_TRACKCONFIG_NOTIFICATION_ENABLED) #define DMUS_WAVEF_OFF 0x01 #define DMUS_WAVEF_STREAMING 0x02 #define DMUS_WAVEF_NOINVALIDATE 0x04 #define DMUS_WAVEF_NOPREROLL 0x08 #define DMUS_WAVEF_IGNORELOOPS 0x20 #define DMUSB_LOADED 0x1 #define DMUSB_DEFAULT 0x2 #define MT_MIN 0x80000000 #define MT_MAX 0x7FFFFFFF /***************************************************************************** * Definitions */ #define DMUS_PMSG_PART \ DWORD dwSize; \ REFERENCE_TIME rtTime; \ MUSIC_TIME mtTime; \ DWORD dwFlags; \ DWORD dwPChannel; \ DWORD dwVirtualTrackID; \ IDirectMusicTool* pTool; \ struct IDirectMusicGraph* pGraph; \ DWORD dwType; \ DWORD dwVoiceID; \ DWORD dwGroupID; \ IUnknown* punkUser; /***************************************************************************** * Enumerations */ /* typedef definitions */ typedef enum enumDMUS_STYLET_TYPES DMUS_STYLET_TYPES; typedef enum enumDMUS_COMMANDT_TYPES DMUS_COMMANDT_TYPES; typedef enum enumDMUS_SHAPET_TYPES DMUS_SHAPET_TYPES; typedef enum enumDMUS_COMPOSEF_FLAGS DMUS_COMPOSEF_FLAGS; typedef enum enumDMUS_PMSGF_FLAGS DMUS_PMSGF_FLAGS; typedef enum enumDMUS_PMSGT_TYPES DMUS_PMSGT_TYPES; typedef enum enumDMUS_SEGF_FLAGS DMUS_SEGF_FLAGS; typedef enum enumDMUS_TIME_RESOLVE_FLAGS DMUS_TIME_RESOLVE_FLAGS; typedef enum enumDMUS_CHORDKEYF_FLAGS DMUS_CHORDKEYF_FLAGS; typedef enum enumDMUS_NOTEF_FLAGS DMUS_NOTEF_FLAGS; typedef enum enumDMUS_PLAYMODE_FLAGS DMUS_PLAYMODE_FLAGS; typedef enum enumDMUS_CURVE_FLAGS DMUS_CURVE_FLAGS; /* actual enumerations */ enum enumDMUS_STYLET_TYPES { DMUS_STYLET_PATTERN = 0x0, DMUS_STYLET_MOTIF = 0x1, }; enum enumDMUS_COMMANDT_TYPES { DMUS_COMMANDT_GROOVE = 0x0, DMUS_COMMANDT_FILL = 0x1, DMUS_COMMANDT_INTRO = 0x2, DMUS_COMMANDT_BREAK = 0x3, DMUS_COMMANDT_END = 0x4, DMUS_COMMANDT_ENDANDINTRO = 0x5 }; enum enumDMUS_SHAPET_TYPES { DMUS_SHAPET_FALLING = 0x0, DMUS_SHAPET_LEVEL = 0x1, DMUS_SHAPET_LOOPABLE = 0x2, DMUS_SHAPET_LOUD = 0x3, DMUS_SHAPET_QUIET = 0x4, DMUS_SHAPET_PEAKING = 0x5, DMUS_SHAPET_RANDOM = 0x6, DMUS_SHAPET_RISING = 0x7, DMUS_SHAPET_SONG = 0x8 }; enum enumDMUS_COMPOSEF_FLAGS { DMUS_COMPOSEF_NONE = 0x000000, DMUS_COMPOSEF_ALIGN = 0x000001, DMUS_COMPOSEF_OVERLAP = 0x000002, DMUS_COMPOSEF_IMMEDIATE = 0x000004, DMUS_COMPOSEF_GRID = 0x000008, DMUS_COMPOSEF_BEAT = 0x000010, DMUS_COMPOSEF_MEASURE = 0x000020, DMUS_COMPOSEF_AFTERPREPARETIME = 0x000040, DMUS_COMPOSEF_VALID_START_BEAT = 0x000080, DMUS_COMPOSEF_VALID_START_GRID = 0x000100, DMUS_COMPOSEF_VALID_START_TICK = 0x000200, DMUS_COMPOSEF_SEGMENTEND = 0x000400, DMUS_COMPOSEF_MARKER = 0x000800, DMUS_COMPOSEF_MODULATE = 0x001000, DMUS_COMPOSEF_LONG = 0x002000, DMUS_COMPOSEF_ENTIRE_TRANSITION = 0x004000, DMUS_COMPOSEF_1BAR_TRANSITION = 0x008000, DMUS_COMPOSEF_ENTIRE_ADDITION = 0x010000, DMUS_COMPOSEF_1BAR_ADDITION = 0x020000, DMUS_COMPOSEF_VALID_START_MEASURE = 0x040000, DMUS_COMPOSEF_DEFAULT = 0x080000, DMUS_COMPOSEF_NOINVALIDATE = 0x100000, DMUS_COMPOSEF_USE_AUDIOPATH = 0x200000, DMUS_COMPOSEF_INVALIDATE_PRI = 0x400000 }; enum enumDMUS_PMSGF_FLAGS { DMUS_PMSGF_REFTIME = 1, DMUS_PMSGF_MUSICTIME = 2, DMUS_PMSGF_TOOL_IMMEDIATE = 4, DMUS_PMSGF_TOOL_QUEUE = 8, DMUS_PMSGF_TOOL_ATTIME = 0x10, DMUS_PMSGF_TOOL_FLUSH = 0x20, DMUS_PMSGF_LOCKTOREFTIME = 0x40, DMUS_PMSGF_DX8 = 0x80 }; enum enumDMUS_PMSGT_TYPES { DMUS_PMSGT_MIDI = 0x00, DMUS_PMSGT_NOTE = 0x01, DMUS_PMSGT_SYSEX = 0x02, DMUS_PMSGT_NOTIFICATION = 0x03, DMUS_PMSGT_TEMPO = 0x04, DMUS_PMSGT_CURVE = 0x05, DMUS_PMSGT_TIMESIG = 0x06, DMUS_PMSGT_PATCH = 0x07, DMUS_PMSGT_TRANSPOSE = 0x08, DMUS_PMSGT_CHANNEL_PRIORITY = 0x09, DMUS_PMSGT_STOP = 0x0A, DMUS_PMSGT_DIRTY = 0x0B, DMUS_PMSGT_WAVE = 0x0C, DMUS_PMSGT_LYRIC = 0x0D, DMUS_PMSGT_SCRIPTLYRIC = 0x0E, DMUS_PMSGT_USER = 0xFF }; enum enumDMUS_SEGF_FLAGS { DMUS_SEGF_REFTIME = 0x000040, DMUS_SEGF_SECONDARY = 0x000080, DMUS_SEGF_QUEUE = 0x000100, DMUS_SEGF_CONTROL = 0x000200, DMUS_SEGF_AFTERPREPARETIME = 0x000400, DMUS_SEGF_GRID = 0x000800, DMUS_SEGF_BEAT = 0x001000, DMUS_SEGF_MEASURE = 0x002000, DMUS_SEGF_DEFAULT = 0x004000, DMUS_SEGF_NOINVALIDATE = 0x008000, DMUS_SEGF_ALIGN = 0x0010000, DMUS_SEGF_VALID_START_BEAT = 0x0020000, DMUS_SEGF_VALID_START_GRID = 0x0040000, DMUS_SEGF_VALID_START_TICK = 0x0080000, DMUS_SEGF_AUTOTRANSITION = 0x0100000, DMUS_SEGF_AFTERQUEUETIME = 0x0200000, DMUS_SEGF_AFTERLATENCYTIME = 0x0400000, DMUS_SEGF_SEGMENTEND = 0x0800000, DMUS_SEGF_MARKER = 0x01000000, DMUS_SEGF_TIMESIG_ALWAYS = 0x02000000, DMUS_SEGF_USE_AUDIOPATH = 0x04000000, DMUS_SEGF_VALID_START_MEASURE = 0x08000000, DMUS_SEGF_INVALIDATE_PRI = 0x10000000 }; enum enumDMUS_TIME_RESOLVE_FLAGS { DMUS_TIME_RESOLVE_AFTERPREPARETIME = DMUS_SEGF_AFTERPREPARETIME, DMUS_TIME_RESOLVE_AFTERQUEUETIME = DMUS_SEGF_AFTERQUEUETIME, DMUS_TIME_RESOLVE_AFTERLATENCYTIME = DMUS_SEGF_AFTERLATENCYTIME, DMUS_TIME_RESOLVE_GRID = DMUS_SEGF_GRID, DMUS_TIME_RESOLVE_BEAT = DMUS_SEGF_BEAT, DMUS_TIME_RESOLVE_MEASURE = DMUS_SEGF_MEASURE, DMUS_TIME_RESOLVE_MARKER = DMUS_SEGF_MARKER, DMUS_TIME_RESOLVE_SEGMENTEND = DMUS_SEGF_SEGMENTEND, }; enum enumDMUS_CHORDKEYF_FLAGS { DMUS_CHORDKEYF_SILENT = 0x1, }; enum enumDMUS_NOTEF_FLAGS { DMUS_NOTEF_NOTEON = 0x01, /* DX8 */ DMUS_NOTEF_NOINVALIDATE = 0x02, DMUS_NOTEF_NOINVALIDATE_INSCALE = 0x04, DMUS_NOTEF_NOINVALIDATE_INCHORD = 0x08, DMUS_NOTEF_REGENERATE = 0x10, }; enum enumDMUS_PLAYMODE_FLAGS { DMUS_PLAYMODE_KEY_ROOT = 0x01, DMUS_PLAYMODE_CHORD_ROOT = 0x02, DMUS_PLAYMODE_SCALE_INTERVALS = 0x04, DMUS_PLAYMODE_CHORD_INTERVALS = 0x08, DMUS_PLAYMODE_NONE = 0x10, }; enum enumDMUS_CURVE_FLAGS { DMUS_CURVE_RESET = 0x1, DMUS_CURVE_START_FROM_CURRENT = 0x2 }; enum { DMUS_CURVES_LINEAR = 0x0, DMUS_CURVES_INSTANT = 0x1, DMUS_CURVES_EXP = 0x2, DMUS_CURVES_LOG = 0x3, DMUS_CURVES_SINE = 0x4 }; /***************************************************************************** * Structures */ /* typedef definitions */ /*typedef struct _DMUS_PMSG DMUS_PMSG, *LPDMUS_PMSG; */ typedef struct _DMUS_AUDIOPARAMS DMUS_AUDIOPARAMS, *LPDMUS_AUDIOPARAMS; typedef struct _DMUS_SUBCHORD DMUS_SUBCHORD, *LPDMUS_SUBCHORD; typedef struct _DMUS_CHORD_KEY DMUS_CHORD_KEY, *LPDMUS_CHORD_KEY; typedef struct _DMUS_NOTE_PMSG DMUS_NOTE_PMSG, *LPDMUS_NOTE_PMSG; typedef struct _DMUS_MIDI_PMSG DMUS_MIDI_PMSG, *LPDMUS_MIDI_PMSG; typedef struct _DMUS_PATCH_PMSG DMUS_PATCH_PMSG, *LPDMUS_PATCH_PMSG; typedef struct _DMUS_TRANSPOSE_PMSG DMUS_TRANSPOSE_PMSG, *LPDMUS_TRANSPOSE_PMSG; typedef struct _DMUS_CHANNEL_PRIORITY_PMSG DMUS_CHANNEL_PRIORITY_PMSG, *LPDMUS_CHANNEL_PRIORITY_PMSG; typedef struct _DMUS_TEMPO_PMSG DMUS_TEMPO_PMSG, *LPDMUS_TEMPO_PMSG; typedef struct _DMUS_SYSEX_PMSG DMUS_SYSEX_PMSG, *LPDMUS_SYSEX_PMSG; typedef struct _DMUS_CURVE_PMSG DMUS_CURVE_PMSG, *LPDMUS_CURVE_PMSG; typedef struct _DMUS_TIMESIG_PMSG DMUS_TIMESIG_PMSG, *LPDMUS_TIMESIG_PMSG; typedef struct _DMUS_NOTIFICATION_PMSG DMUS_NOTIFICATION_PMSG, *LPDMUS_NOTIFICATION_PMSG; typedef struct _DMUS_WAVE_PMSG DMUS_WAVE_PMSG, *LPDMUS_WAVE_PMSG; typedef struct _DMUS_LYRIC_PMSG DMUS_LYRIC_PMSG, *LPDMUS_LYRIC_PMSG; typedef struct _DMUS_VERSION DMUS_VERSION, *LPDMUS_VERSION; typedef struct _DMUS_TIMESIGNATURE DMUS_TIMESIGNATURE, *LPDMUS_TIMESIGNATURE; typedef struct _DMUS_VALID_START_PARAM DMUS_VALID_START_PARAM, *LPDMUS_VALID_START_PARAM; typedef struct _DMUS_PLAY_MARKER_PARAM DMUS_PLAY_MARKER_PARAM, *LPDMUS_PLAY_MARKER_PARAM; typedef struct _DMUS_OBJECTDESC DMUS_OBJECTDESC, *LPDMUS_OBJECTDESC; typedef struct _DMUS_SCRIPT_ERRORINFO DMUS_SCRIPT_ERRORINFO, *LPDMUS_SCRIPT_ERRORINFO; typedef struct _DMUS_COMMAND_PARAM DMUS_COMMAND_PARAM, *LPDMUS_COMMAND_PARAM; typedef struct _DMUS_COMMAND_PARAM_2 DMUS_COMMAND_PARAM_2, *LPDMUS_COMMAND_PARAM_2; typedef struct _DMUS_BAND_PARAM DMUS_BAND_PARAM, *LPDMUS_BAND_PARAM; typedef struct _DMUS_VARIATIONS_PARAM DMUS_VARIATIONS_PARAM, *LPDMUS_VARIATIONS_PARAM; /* actual structures */ struct _DMUS_PMSG { DMUS_PMSG_PART }; struct _DMUS_AUDIOPARAMS { DWORD dwSize; BOOL fInitNow; DWORD dwValidData; DWORD dwFeatures; DWORD dwVoices; DWORD dwSampleRate; CLSID clsidDefaultSynth; }; struct _DMUS_SUBCHORD { DWORD dwChordPattern; DWORD dwScalePattern; DWORD dwInversionPoints; DWORD dwLevels; BYTE bChordRoot; BYTE bScaleRoot; }; struct _DMUS_CHORD_KEY { WCHAR wszName[16]; WORD wMeasure; BYTE bBeat; BYTE bSubChordCount; DMUS_SUBCHORD SubChordList[DMUS_MAXSUBCHORD]; DWORD dwScale; BYTE bKey; BYTE bFlags; }; struct _DMUS_NOTE_PMSG { DMUS_PMSG_PART MUSIC_TIME mtDuration; WORD wMusicValue; WORD wMeasure; short nOffset; BYTE bBeat; BYTE bGrid; BYTE bVelocity; BYTE bFlags; BYTE bTimeRange; BYTE bDurRange; BYTE bVelRange; BYTE bPlayModeFlags; BYTE bSubChordLevel; BYTE bMidiValue; char cTranspose; }; struct _DMUS_MIDI_PMSG { DMUS_PMSG_PART BYTE bStatus; BYTE bByte1; BYTE bByte2; BYTE bPad[1]; }; struct _DMUS_PATCH_PMSG { DMUS_PMSG_PART BYTE byInstrument; BYTE byMSB; BYTE byLSB; BYTE byPad[1]; }; struct _DMUS_TRANSPOSE_PMSG { DMUS_PMSG_PART short nTranspose; /* DX8 */ WORD wMergeIndex; }; struct _DMUS_CHANNEL_PRIORITY_PMSG { DMUS_PMSG_PART DWORD dwChannelPriority; }; struct _DMUS_TEMPO_PMSG { DMUS_PMSG_PART double dblTempo; }; struct _DMUS_SYSEX_PMSG { DMUS_PMSG_PART DWORD dwLen; BYTE abData[1]; }; struct _DMUS_CURVE_PMSG { DMUS_PMSG_PART MUSIC_TIME mtDuration; MUSIC_TIME mtOriginalStart; MUSIC_TIME mtResetDuration; short nStartValue; short nEndValue; short nResetValue; WORD wMeasure; short nOffset; BYTE bBeat; BYTE bGrid; BYTE bType; BYTE bCurveShape; BYTE bCCData; BYTE bFlags; /* DX8 */ WORD wParamType; WORD wMergeIndex; }; struct _DMUS_TIMESIG_PMSG { DMUS_PMSG_PART BYTE bBeatsPerMeasure; BYTE bBeat; WORD wGridsPerBeat; }; struct _DMUS_NOTIFICATION_PMSG { DMUS_PMSG_PART GUID guidNotificationType; DWORD dwNotificationOption; DWORD dwField1; DWORD dwField2; }; struct _DMUS_WAVE_PMSG { DMUS_PMSG_PART REFERENCE_TIME rtStartOffset; REFERENCE_TIME rtDuration; LONG lOffset; LONG lVolume; LONG lPitch; BYTE bFlags; }; struct _DMUS_LYRIC_PMSG { DMUS_PMSG_PART WCHAR wszString[1]; }; struct _DMUS_VERSION { DWORD dwVersionMS; DWORD dwVersionLS; }; struct _DMUS_TIMESIGNATURE { MUSIC_TIME mtTime; BYTE bBeatsPerMeasure; BYTE bBeat; WORD wGridsPerBeat; }; struct _DMUS_VALID_START_PARAM { MUSIC_TIME mtTime; }; struct _DMUS_PLAY_MARKER_PARAM { MUSIC_TIME mtTime; }; struct _DMUS_OBJECTDESC { DWORD dwSize; DWORD dwValidData; GUID guidObject; GUID guidClass; FILETIME ftDate; DMUS_VERSION vVersion; WCHAR wszName[DMUS_MAX_NAME]; WCHAR wszCategory[DMUS_MAX_CATEGORY]; WCHAR wszFileName[DMUS_MAX_FILENAME]; LONGLONG llMemLength; LPBYTE pbMemData; IStream* pStream; }; struct _DMUS_SCRIPT_ERRORINFO { DWORD dwSize; HRESULT hr; ULONG ulLineNumber; LONG ichCharPosition; WCHAR wszSourceFile[DMUS_MAX_FILENAME]; WCHAR wszSourceComponent[DMUS_MAX_FILENAME]; WCHAR wszDescription[DMUS_MAX_FILENAME]; WCHAR wszSourceLineText[DMUS_MAX_FILENAME]; }; struct _DMUS_COMMAND_PARAM { BYTE bCommand; BYTE bGrooveLevel; BYTE bGrooveRange; BYTE bRepeatMode; }; struct _DMUS_COMMAND_PARAM_2 { MUSIC_TIME mtTime; BYTE bCommand; BYTE bGrooveLevel; BYTE bGrooveRange; BYTE bRepeatMode; }; struct _DMUS_BAND_PARAM { MUSIC_TIME mtTimePhysical; struct IDirectMusicBand *pBand; }; struct _DMUS_VARIATIONS_PARAM { DWORD dwPChannelsUsed; DWORD* padwPChannels; DWORD* padwVariations; }; /***************************************************************************** * IDirectMusicBand interface */ #define INTERFACE IDirectMusicBand DECLARE_INTERFACE_(IDirectMusicBand,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicBand methods ***/ STDMETHOD(CreateSegment)(THIS_ struct IDirectMusicSegment **ppSegment) PURE; STDMETHOD(Download)(THIS_ struct IDirectMusicPerformance *pPerformance) PURE; STDMETHOD(Unload)(THIS_ struct IDirectMusicPerformance *pPerformance) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicBand_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicBand_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicBand methods ***/ #define IDirectMusicBand_CreateSegment(p,a) (p)->lpVtbl->CreateSegment(p,a) #define IDirectMusicBand_Download(p,a) (p)->lpVtbl->Download(p,a) #define IDirectMusicBand_Unload(p,a) (p)->lpVtbl->Unload(p,a) #endif /***************************************************************************** * IDirectMusicObject interface */ #define INTERFACE IDirectMusicObject DECLARE_INTERFACE_(IDirectMusicObject,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicObject methods ***/ STDMETHOD(GetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE; STDMETHOD(SetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE; STDMETHOD(ParseDescriptor)(THIS_ LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicObject_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicObject_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicObject methods ***/ #define IDirectMusicObject_GetDescriptor(p,a) (p)->lpVtbl->GetDescriptor(p,a) #define IDirectMusicObject_SetDescriptor(p,a) (p)->lpVtbl->SetDescriptor(p,a) #define IDirectMusicObject_ParseDescriptor(p,a,b) (p)->lpVtbl->ParseDescriptor(p,a,b) #endif /***************************************************************************** * IDirectMusicLoader interface */ #define INTERFACE IDirectMusicLoader DECLARE_INTERFACE_(IDirectMusicLoader,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicLoader methods ***/ STDMETHOD(GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE; STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE; STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE; STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE; STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE; STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE; STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE; STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE; STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicLoader_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicLoader_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicLoader_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicLoader methods ***/ #define IDirectMusicLoader_GetObject(p,a,b,c) (p)->lpVtbl->GetObject(p,a,b,c) #define IDirectMusicLoader_SetObject(p,a) (p)->lpVtbl->SetObject(p,a) #define IDirectMusicLoader_SetSearchDirectory(p,a,b,c) (p)->lpVtbl->SetSearchDirectory(p,a,b,c) #define IDirectMusicLoader_ScanDirectory(p,a,b,c) (p)->lpVtbl->ScanDirectory(p,a,b,c) #define IDirectMusicLoader_CacheObject(p,a) (p)->lpVtbl->CacheObject(p,a) #define IDirectMusicLoader_ReleaseObject(p,a) (p)->lpVtbl->ReleaseObject(p,a) #define IDirectMusicLoader_ClearCache(p,a) (p)->lpVtbl->ClearCache(p,a) #define IDirectMusicLoader_EnableCache(p,a,b) (p)->lpVtbl->EnableCache(p,a,b) #define IDirectMusicLoader_EnumObject(p,a,b,c) (p)->lpVtbl->EnumObject(p,a,b,c) #endif /***************************************************************************** * IDirectMusicLoader8 interface */ #define INTERFACE IDirectMusicLoader8 DECLARE_INTERFACE_(IDirectMusicLoader8,IDirectMusicLoader) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicLoader methods ***/ STDMETHOD(GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE; STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE; STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE; STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE; STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE; STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE; STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE; STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE; STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE; /*** IDirectMusicLoader8 methods ***/ STDMETHOD_(void,CollectGarbage)(THIS) PURE; STDMETHOD(ReleaseObjectByUnknown)(THIS_ IUnknown *pObject) PURE; STDMETHOD(LoadObjectFromFile)(THIS_ REFGUID rguidClassID, REFIID iidInterfaceID, WCHAR *pwzFilePath, void **ppObject) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicLoader8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicLoader8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicLoader8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicLoader methods ***/ #define IDirectMusicLoader8_GetObject(p,a,b,c) (p)->lpVtbl->GetObject(p,a,b,c) #define IDirectMusicLoader8_SetObject(p,a) (p)->lpVtbl->SetObject(p,a) #define IDirectMusicLoader8_SetSearchDirectory(p,a,b,c) (p)->lpVtbl->SetSearchDirectory(p,a,b,c) #define IDirectMusicLoader8_ScanDirectory(p,a,b,c) (p)->lpVtbl->ScanDirectory(p,a,b,c) #define IDirectMusicLoader8_CacheObject(p,a) (p)->lpVtbl->CacheObject(p,a) #define IDirectMusicLoader8_ReleaseObject(p,a) (p)->lpVtbl->ReleaseObject(p,a) #define IDirectMusicLoader8_ClearCache(p,a) (p)->lpVtbl->ClearCache(p,a) #define IDirectMusicLoader8_EnableCache(p,a,b) (p)->lpVtbl->EnableCache(p,a,b) #define IDirectMusicLoader8_EnumObject(p,a,b,c) (p)->lpVtbl->EnumObject(p,a,b,c) /*** IDirectMusicLoader8 methods ***/ #define IDirectMusicLoader8_CollectGarbage(p) (p)->lpVtbl->CollectGarbage(p) #define IDirectMusicLoader8_ReleaseObjectByUnknown(p,a) (p)->lpVtbl->ReleaseObjectByUnknown(p,a) #define IDirectMusicLoader8_LoadObjectFromFile(p,a,b,c,d) (p)->lpVtbl->LoadObjectFromFile(p,a,b,c,d) #endif /***************************************************************************** * IDirectMusicGetLoader interface */ #define INTERFACE IDirectMusicGetLoader DECLARE_INTERFACE_(IDirectMusicGetLoader,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicGetLoader methods ***/ STDMETHOD(GetLoader)(THIS_ IDirectMusicLoader **ppLoader) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicGetLoader_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicGetLoader_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicGetLoader_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicGetLoader methods ***/ #define IDirectMusicGetLoader_GetLoader(p,a) (p)->lpVtbl->GetLoader(p,a) #endif /***************************************************************************** * IDirectMusicSegment interface */ #define INTERFACE IDirectMusicSegment DECLARE_INTERFACE_(IDirectMusicSegment,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicSegment methods ***/ STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE; STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE; STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE; STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE; STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE; STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE; STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE; STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE; STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE; STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE; STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState **ppSegState, struct IDirectMusicPerformance *pPerformance, DWORD dwFlags) PURE; STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE; STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE; STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE; STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE; STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE; STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE; STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE; STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE; STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicSegment_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicSegment_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicSegment_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicSegment methods ***/ #define IDirectMusicSegment_GetLength(p,a) (p)->lpVtbl->GetLength(p,a) #define IDirectMusicSegment_SetLength(p,a) (p)->lpVtbl->SetLength(p,a) #define IDirectMusicSegment_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a) #define IDirectMusicSegment_SetRepeats(p,a) (p)->lpVtbl->SetRepeats(p,a) #define IDirectMusicSegment_GetDefaultResolution(p,a) (p)->lpVtbl->GetDefaultResolution(p,a) #define IDirectMusicSegment_SetDefaultResolution(p,a) (p)->lpVtbl->SetDefaultResolution(p,a) #define IDirectMusicSegment_GetTrack(p,a,b,c,d) (p)->lpVtbl->GetTrack(p,a,b,c,d) #define IDirectMusicSegment_GetTrackGroup(p,a,b) (p)->lpVtbl->GetTrackGroup(p,a,b) #define IDirectMusicSegment_InsertTrack(p,a,b) (p)->lpVtbl->InsertTrack(p,a,b) #define IDirectMusicSegment_RemoveTrack(p,a) (p)->lpVtbl->RemoveTrack(p,a) #define IDirectMusicSegment_InitPlay(p,a,b,c) (p)->lpVtbl->InitPlay(p,a,b,c) #define IDirectMusicSegment_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a) #define IDirectMusicSegment_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a) #define IDirectMusicSegment_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a) #define IDirectMusicSegment_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a) #define IDirectMusicSegment_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f) #define IDirectMusicSegment_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e) #define IDirectMusicSegment_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirectMusicSegment_SetStartPoint(p,a) (p)->lpVtbl->SetStartPoint(p,a) #define IDirectMusicSegment_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a) #define IDirectMusicSegment_SetLoopPoints(p,a,b) (p)->lpVtbl->SetLoopPoints(p,a,b) #define IDirectMusicSegment_GetLoopPoints(p,a,b) (p)->lpVtbl->GetLoopPoints(p,a,b) #define IDirectMusicSegment_SetPChannelsUsed(p,a,b) (p)->lpVtbl->SetPChannelsUsed(p,a,b) #endif /***************************************************************************** * IDirectMusicSegment8 interface */ #define INTERFACE IDirectMusicSegment8 DECLARE_INTERFACE_(IDirectMusicSegment8,IDirectMusicSegment) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicSegment methods ***/ STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE; STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE; STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE; STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE; STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE; STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE; STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE; STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE; STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE; STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE; STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState **ppSegState, struct IDirectMusicPerformance *pPerformance, DWORD dwFlags) PURE; STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE; STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE; STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE; STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE; STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE; STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE; STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE; STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE; STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE; /*** IDirectMusicSegment8 methods ***/ STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE; STDMETHOD(GetAudioPathConfig)(THIS_ IUnknown **ppAudioPathConfig) PURE; STDMETHOD(Compose)(THIS_ MUSIC_TIME mtTime, IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, IDirectMusicSegment **ppComposedSegment) PURE; STDMETHOD(Download)(THIS_ IUnknown *pAudioPath) PURE; STDMETHOD(Unload)(THIS_ IUnknown *pAudioPath) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicSegment8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicSegment8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicSegment8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicSegment methods ***/ #define IDirectMusicSegment8_GetLength(p,a) (p)->lpVtbl->GetLength(p,a) #define IDirectMusicSegment8_SetLength(p,a) (p)->lpVtbl->SetLength(p,a) #define IDirectMusicSegment8_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a) #define IDirectMusicSegment8_SetRepeats(p,a) (p)->lpVtbl->SetRepeats(p,a) #define IDirectMusicSegment8_GetDefaultResolution(p,a) (p)->lpVtbl->GetDefaultResolution(p,a) #define IDirectMusicSegment8_SetDefaultResolution(p,a) (p)->lpVtbl->SetDefaultResolution(p,a) #define IDirectMusicSegment8_GetTrack(p,a,b,c,d) (p)->lpVtbl->GetTrack(p,a,b,c,d) #define IDirectMusicSegment8_GetTrackGroup(p,a,b) (p)->lpVtbl->GetTrackGroup(p,a,b) #define IDirectMusicSegment8_InsertTrack(p,a,b) (p)->lpVtbl->InsertTrack(p,a,b) #define IDirectMusicSegment8_RemoveTrack(p,a) (p)->lpVtbl->RemoveTrack(p,a) #define IDirectMusicSegment8_InitPlay(p,a,b,c) (p)->lpVtbl->InitPlay(p,a,b,c) #define IDirectMusicSegment8_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a) #define IDirectMusicSegment8_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a) #define IDirectMusicSegment8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a) #define IDirectMusicSegment8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a) #define IDirectMusicSegment8_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f) #define IDirectMusicSegment8_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e) #define IDirectMusicSegment8_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c) #define IDirectMusicSegment8_SetStartPoint(p,a) (p)->lpVtbl->SetStartPoint(p,a) #define IDirectMusicSegment8_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a) #define IDirectMusicSegment8_SetLoopPoints(p,a,b) (p)->lpVtbl->SetLoopPoints(p,a,b) #define IDirectMusicSegment8_GetLoopPoints(p,a,b) (p)->lpVtbl->GetLoopPoints(p,a,b) #define IDirectMusicSegment8_SetPChannelsUsed(p,a,b) (p)->lpVtbl->SetPChannelsUsed(p,a,b) /*** IDirectMusicSegment8 methods ***/ #define IDirectMusicSegment8_SetTrackConfig(p,a,b,c,d,e) (p)->lpVtbl->SetTrackConfig(p,a,b,c,d,e) #define IDirectMusicSegment8_GetAudioPathConfig(p,a) (p)->lpVtbl->GetAudioPathConfig(p,a) #define IDirectMusicSegment8_Compose(p,a,b,c,d) (p)->lpVtbl->Compose(p,a,b,c,d) #define IDirectMusicSegment8_Download(p,a) (p)->lpVtbl->Download(p,a) #define IDirectMusicSegment8_Unload(p,a) (p)->lpVtbl->Unload(p,a) #endif /***************************************************************************** * IDirectMusicSegmentState interface */ #define INTERFACE IDirectMusicSegmentState DECLARE_INTERFACE_(IDirectMusicSegmentState,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicSegmentState methods ***/ STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE; STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE; STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE; STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE; STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicSegmentState_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicSegmentState_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicSegmentState_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicSegmentState methods ***/ #define IDirectMusicSegmentState_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a) #define IDirectMusicSegmentState_GetSegment(p,a) (p)->lpVtbl->GetSegment(p,a) #define IDirectMusicSegmentState_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a) #define IDirectMusicSegmentState_GetSeek(p,a) (p)->lpVtbl->GetSeek(p,a) #define IDirectMusicSegmentState_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a) #endif /***************************************************************************** * IDirectMusicSegmentState8 interface */ #define INTERFACE IDirectMusicSegmentState8 DECLARE_INTERFACE_(IDirectMusicSegmentState8,IDirectMusicSegmentState) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicSegmentState methods ***/ STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE; STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE; STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE; STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE; STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE; /*** IDirectMusicSegmentState8 methods ***/ STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE; STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void **ppObject) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicSegmentState8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicSegmentState8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicSegmentState8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicSegmentState methods ***/ #define IDirectMusicSegmentState8_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a) #define IDirectMusicSegmentState8_GetSegment(p,a) (p)->lpVtbl->GetSegment(p,a) #define IDirectMusicSegmentState8_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a) #define IDirectMusicSegmentState8_GetSeek(p,a) (p)->lpVtbl->GetSeek(p,a) #define IDirectMusicSegmentState8_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a) /*** IDirectMusicSegmentState8 methods ***/ #define IDirectMusicSegmentState8_SetTrackConfig(p,a,b,c,d,e) (p)->lpVtbl->SetTrackConfig(p,a,b,c,d,e) #define IDirectMusicSegmentState8_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g) #endif /***************************************************************************** * IDirectMusicAudioPath interface */ #define INTERFACE IDirectMusicAudioPath DECLARE_INTERFACE_(IDirectMusicAudioPath,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicAudioPath methods ***/ STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void **ppObject) PURE; STDMETHOD(Activate)(THIS_ BOOL fActivate) PURE; STDMETHOD(SetVolume)(THIS_ LONG lVolume, DWORD dwDuration) PURE; STDMETHOD(ConvertPChannel)(THIS_ DWORD dwPChannelIn, DWORD *pdwPChannelOut) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicAudioPath_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicAudioPath_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicAudioPath_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicAudioPath methods ***/ #define IDirectMusicAudioPath_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g) #define IDirectMusicAudioPath_Activate(p,a) (p)->lpVtbl->Activate(p,a) #define IDirectMusicAudioPath_SetVolume(p,a,b) (p)->lpVtbl->SetVolume(p,a,b) #define IDirectMusicAudioPath_ConvertPChannel(p,a,b) (p)->lpVtbl->ConvertPChannel(p,a,b) #endif /***************************************************************************** * IDirectMusicPerformance interface */ #define INTERFACE IDirectMusicPerformance DECLARE_INTERFACE_(IDirectMusicPerformance,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicPerformance methods ***/ STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE; STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE; STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE; STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE; STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE; STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE; STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE; STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE; STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE; STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE; STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE; STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE; STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE; STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE; STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE; STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE; STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE; STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE; STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE; STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE; STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE; STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE; STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE; STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE; STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE; STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE; STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE; STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE; STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE; STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE; STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE; STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE; STDMETHOD(CloseDown)(THIS) PURE; STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE; STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE; STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE; STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE; STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicPerformance_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicPerformance_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicPerformance_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicPerformance methods ***/ #define IDirectMusicPerformance_Init(p,a,b,c) (p)->lpVtbl->Init(p,a,b,c) #define IDirectMusicPerformance_PlaySegment(p,a,b,c,d) (p)->lpVtbl->PlaySegment(p,a,b,c,d) #define IDirectMusicPerformance_Stop(p,a,b,c,d) (p)->lpVtbl->Stop(p,a,b,c,d) #define IDirectMusicPerformance_GetSegmentState(p,a,b) (p)->lpVtbl->GetSegmentState(p,a,b) #define IDirectMusicPerformance_SetPrepareTime(p,a) (p)->lpVtbl->SetPrepareTime(p,a) #define IDirectMusicPerformance_GetPrepareTime(p,a) (p)->lpVtbl->GetPrepareTime(p,a) #define IDirectMusicPerformance_SetBumperLength(p,a) (p)->lpVtbl->SetBumperLength(p,a) #define IDirectMusicPerformance_GetBumperLength(p,a) (p)->lpVtbl->GetBumperLength(p,a) #define IDirectMusicPerformance_SendPMsg(p,a) (p)->lpVtbl->SendPMsg(p,a) #define IDirectMusicPerformance_MusicToReferenceTime(p,a,b) (p)->lpVtbl->MusicToReferenceTime(p,a,b) #define IDirectMusicPerformance_ReferenceToMusicTime(p,a,b) (p)->lpVtbl->ReferenceToMusicTime(p,a,b) #define IDirectMusicPerformance_IsPlaying(p,a,b) (p)->lpVtbl->IsPlaying(p,a,b) #define IDirectMusicPerformance_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b) #define IDirectMusicPerformance_AllocPMsg(p,a,b) (p)->lpVtbl->AllocPMsg(p,a,b) #define IDirectMusicPerformance_FreePMsg(p,a) (p)->lpVtbl->FreePMsg(p,a) #define IDirectMusicPerformance_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a) #define IDirectMusicPerformance_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a) #define IDirectMusicPerformance_SetNotificationHandle(p,a,b) (p)->lpVtbl->SetNotificationHandle(p,a,b) #define IDirectMusicPerformance_GetNotificationPMsg(p,a) (p)->lpVtbl->GetNotificationPMsg(p,a) #define IDirectMusicPerformance_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a) #define IDirectMusicPerformance_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a) #define IDirectMusicPerformance_AddPort(p,a) (p)->lpVtbl->AddPort(p,a) #define IDirectMusicPerformance_RemovePort(p,a) (p)->lpVtbl->RemovePort(p,a) #define IDirectMusicPerformance_AssignPChannelBlock(p,a,b,c) (p)->lpVtbl->AssignPChannelBlock(p,a,b,c) #define IDirectMusicPerformance_AssignPChannel(p,a,b,c,d) (p)->lpVtbl->AssignPChannel(p,a,b,c,d) #define IDirectMusicPerformance_PChannelInfo(p,a,b,c,d) (p)->lpVtbl->PChannelInfo(p,a,b,c,d) #define IDirectMusicPerformance_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h) #define IDirectMusicPerformance_Invalidate(p,a,b) (p)->lpVtbl->Invalidate(p,a,b) #define IDirectMusicPerformance_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f) #define IDirectMusicPerformance_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e) #define IDirectMusicPerformance_GetGlobalParam(p,a,b,c) (p)->lpVtbl->GetGlobalParam(p,a,b,c) #define IDirectMusicPerformance_SetGlobalParam(p,a,b,c) (p)->lpVtbl->SetGlobalParam(p,a,b,c) #define IDirectMusicPerformance_GetLatencyTime(p,a) (p)->lpVtbl->GetLatencyTime(p,a) #define IDirectMusicPerformance_GetQueueTime(p,a) (p)->lpVtbl->GetQueueTime(p,a) #define IDirectMusicPerformance_AdjustTime(p,a) (p)->lpVtbl->AdjustTime(p,a) #define IDirectMusicPerformance_CloseDown(p) (p)->lpVtbl->CloseDown(p) #define IDirectMusicPerformance_GetResolvedTime(p,a,b,c) (p)->lpVtbl->GetResolvedTime(p,a,b,c) #define IDirectMusicPerformance_MIDIToMusic(p,a,b,c,d,e) (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e) #define IDirectMusicPerformance_MusicToMIDI(p,a,b,c,d,e) (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e) #define IDirectMusicPerformance_TimeToRhythm(p,a,b,c,d,e,f) (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f) #define IDirectMusicPerformance_RhythmToTime(p,a,b,c,d,e,f) (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f) #endif /***************************************************************************** * IDirectMusicPerformance8 interface */ #define INTERFACE IDirectMusicPerformance8 DECLARE_INTERFACE_(IDirectMusicPerformance8,IDirectMusicPerformance) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicPerformance methods ***/ STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE; STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE; STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE; STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE; STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE; STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE; STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE; STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE; STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE; STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE; STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE; STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE; STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE; STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE; STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE; STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE; STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE; STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE; STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE; STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE; STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE; STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE; STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE; STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE; STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE; STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE; STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE; STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE; STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE; STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE; STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE; STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE; STDMETHOD(CloseDown)(THIS) PURE; STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE; STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE; STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE; STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE; STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE; /*** IDirectMusicPerformance8 methods ***/ STDMETHOD(InitAudio)(THIS_ IDirectMusic **ppDirectMusic, IDirectSound **ppDirectSound, HWND hWnd, DWORD dwDefaultPathType, DWORD dwPChannelCount, DWORD dwFlags, DMUS_AUDIOPARAMS *pParams) PURE; STDMETHOD(PlaySegmentEx)(THIS_ IUnknown *pSource, WCHAR *pwzSegmentName, IUnknown *pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState, IUnknown *pFrom, IUnknown *pAudioPath) PURE; STDMETHOD(StopEx)(THIS_ IUnknown *pObjectToStop, __int64 i64StopTime, DWORD dwFlags) PURE; STDMETHOD(ClonePMsg)(THIS_ DMUS_PMSG *pSourcePMSG, DMUS_PMSG **ppCopyPMSG) PURE; STDMETHOD(CreateAudioPath)(THIS_ IUnknown *pSourceConfig, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE; STDMETHOD(CreateStandardAudioPath)(THIS_ DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE; STDMETHOD(SetDefaultAudioPath)(THIS_ IDirectMusicAudioPath *pAudioPath) PURE; STDMETHOD(GetDefaultAudioPath)(THIS_ IDirectMusicAudioPath **ppAudioPath) PURE; STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicPerformance8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicPerformance8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicPerformance8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicPerformance methods ***/ #define IDirectMusicPerformance8_Init(p,a,b,c) (p)->lpVtbl->Init(p,a,b,c) #define IDirectMusicPerformance8_PlaySegment(p,a,b,c,d) (p)->lpVtbl->PlaySegment(p,a,b,c,d) #define IDirectMusicPerformance8_Stop(p,a,b,c,d) (p)->lpVtbl->Stop(p,a,b,c,d) #define IDirectMusicPerformance8_GetSegmentState(p,a,b) (p)->lpVtbl->GetSegmentState(p,a,b) #define IDirectMusicPerformance8_SetPrepareTime(p,a) (p)->lpVtbl->SetPrepareTime(p,a) #define IDirectMusicPerformance8_GetPrepareTime(p,a) (p)->lpVtbl->GetPrepareTime(p,a) #define IDirectMusicPerformance8_SetBumperLength(p,a) (p)->lpVtbl->SetBumperLength(p,a) #define IDirectMusicPerformance8_GetBumperLength(p,a) (p)->lpVtbl->GetBumperLength(p,a) #define IDirectMusicPerformance8_SendPMsg(p,a) (p)->lpVtbl->SendPMsg(p,a) #define IDirectMusicPerformance8_MusicToReferenceTime(p,a,b) (p)->lpVtbl->MusicToReferenceTime(p,a,b) #define IDirectMusicPerformance8_ReferenceToMusicTime(p,a,b) (p)->lpVtbl->ReferenceToMusicTime(p,a,b) #define IDirectMusicPerformance8_IsPlaying(p,a,b) (p)->lpVtbl->IsPlaying(p,a,b) #define IDirectMusicPerformance8_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b) #define IDirectMusicPerformance8_AllocPMsg(p,a,b) (p)->lpVtbl->AllocPMsg(p,a,b) #define IDirectMusicPerformance8_FreePMsg(p,a) (p)->lpVtbl->FreePMsg(p,a) #define IDirectMusicPerformance8_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a) #define IDirectMusicPerformance8_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a) #define IDirectMusicPerformance8_SetNotificationHandle(p,a,b) (p)->lpVtbl->SetNotificationHandle(p,a,b) #define IDirectMusicPerformance8_GetNotificationPMsg(p,a) (p)->lpVtbl->GetNotificationPMsg(p,a) #define IDirectMusicPerformance8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a) #define IDirectMusicPerformance8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a) #define IDirectMusicPerformance8_AddPort(p,a) (p)->lpVtbl->AddPort(p,a) #define IDirectMusicPerformance8_RemovePort(p,a) (p)->lpVtbl->RemovePort(p,a) #define IDirectMusicPerformance8_AssignPChannelBlock(p,a,b,c) (p)->lpVtbl->AssignPChannelBlock(p,a,b,c) #define IDirectMusicPerformance8_AssignPChannel(p,a,b,c,d) (p)->lpVtbl->AssignPChannel(p,a,b,c,d) #define IDirectMusicPerformance8_PChannelInfo(p,a,b,c,d) (p)->lpVtbl->PChannelInfo(p,a,b,c,d) #define IDirectMusicPerformance8_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h) #define IDirectMusicPerformance8_Invalidate(p,a,b) (p)->lpVtbl->Invalidate(p,a,b) #define IDirectMusicPerformance8_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f) #define IDirectMusicPerformance8_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e) #define IDirectMusicPerformance8_GetGlobalParam(p,a,b,c) (p)->lpVtbl->GetGlobalParam(p,a,b,c) #define IDirectMusicPerformance8_SetGlobalParam(p,a,b,c) (p)->lpVtbl->SetGlobalParam(p,a,b,c) #define IDirectMusicPerformance8_GetLatencyTime(p,a) (p)->lpVtbl->GetLatencyTime(p,a) #define IDirectMusicPerformance8_GetQueueTime(p,a) (p)->lpVtbl->GetQueueTime(p,a) #define IDirectMusicPerformance8_AdjustTime(p,a) (p)->lpVtbl->AdjustTime(p,a) #define IDirectMusicPerformance8_CloseDown(p) (p)->lpVtbl->CloseDown(p) #define IDirectMusicPerformance8_GetResolvedTime(p,a,b,c) (p)->lpVtbl->GetResolvedTime(p,a,b,c) #define IDirectMusicPerformance8_MIDIToMusic(p,a,b,c,d,e) (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e) #define IDirectMusicPerformance8_MusicToMIDI(p,a,b,c,d,e) (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e) #define IDirectMusicPerformance8_TimeToRhythm(p,a,b,c,d,e,f) (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f) #define IDirectMusicPerformance8_RhythmToTime(p,a,b,c,d,e,f) (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f) /* IDirectMusicPerformance8 methods*/ #define IDirectMusicPerformance8_InitAudio(p,a,b,c,d,e,f,g) (p)->lpVtbl->InitAudio(p,a,b,c,d,e,f,g) #define IDirectMusicPerformance8_PlaySegmentEx(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->PlaySegmentEx(p,a,b,c,d,e,f,g,h) #define IDirectMusicPerformance8_StopEx(p,a,b,c) (p)->lpVtbl->StopEx(p,a,b,c) #define IDirectMusicPerformance8_ClonePMsg(p,a,b) (p)->lpVtbl->ClonePMsg(p,a,b) #define IDirectMusicPerformance8_CreateAudioPath(p,a,b,c) (p)->lpVtbl->CreateAudioPath(p,a,b,c) #define IDirectMusicPerformance8_CreateStandardAudioPath(p,a,b,c,d) (p)->lpVtbl->CreateStandardAudioPath(p,a,b,c,d) #define IDirectMusicPerformance8_SetDefaultAudioPath(p,a) (p)->lpVtbl->SetDefaultAudioPath(p,a) #define IDirectMusicPerformance8_GetDefaultAudioPath(p,a) (p)->lpVtbl->GetDefaultAudioPath(p,a) #define IDirectMusicPerformance8_GetParamEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f,g) #endif /***************************************************************************** * IDirectMusicGraph interface */ #define INTERFACE IDirectMusicGraph DECLARE_INTERFACE_(IDirectMusicGraph,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicGraph methods ***/ STDMETHOD(StampPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE; STDMETHOD(InsertTool)(THIS_ IDirectMusicTool *pTool, DWORD *pdwPChannels, DWORD cPChannels, LONG lIndex) PURE; STDMETHOD(GetTool)(THIS_ DWORD dwIndex, IDirectMusicTool **ppTool) PURE; STDMETHOD(RemoveTool)(THIS_ IDirectMusicTool *pTool) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicGraph_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicGraph_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicGraph_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicGraph methods ***/ #define IDirectMusicGraph_StampPMsg(p,a) (p)->lpVtbl->StampPMsg(p,a) #define IDirectMusicGraph_InsertTool(p,a,b,c,d) (p)->lpVtbl->InsertTool(p,a,b,c,d) #define IDirectMusicGraph_GetTool(p,a,b) (p)->lpVtbl->GetTool(p,a,b) #define IDirectMusicGraph_RemoveTool(p,a) (p)->lpVtbl->RemoveTool(p,a) #endif /***************************************************************************** * IDirectMusicStyle interface */ #define INTERFACE IDirectMusicStyle DECLARE_INTERFACE_(IDirectMusicStyle,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicStyle methods ***/ STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE; STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE; STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE; STDMETHOD(GetDefaultChordMap)(THIS_ struct IDirectMusicChordMap **ppChordMap) PURE; STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, struct IDirectMusicChordMap **ppChordMap) PURE; STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE; STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE; STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicStyle_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicStyle_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicStyle_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicStyle methods ***/ #define IDirectMusicStyle_GetBand(p,a,b) (p)->lpVtbl->GetBand(p,a,b) #define IDirectMusicStyle_EnumBand(p,a,b) (p)->lpVtbl->EnumBand(p,a,b) #define IDirectMusicStyle_GetDefaultBand(p,a) (p)->lpVtbl->GetDefaultBand(p,a) #define IDirectMusicStyle_EnumMotif(p,a,b) (p)->lpVtbl->EnumMotif(p,a,b) #define IDirectMusicStyle_GetMotif(p,a,b) (p)->lpVtbl->GetMotif(p,a,b) #define IDirectMusicStyle_GetDefaultChordMap(p,a) (p)->lpVtbl->GetDefaultChordMap(p,a) #define IDirectMusicStyle_EnumChordMap(p,a,b) (p)->lpVtbl->EnumChordMap(p,a,b) #define IDirectMusicStyle_GetChordMap(p,a,b) (p)->lpVtbl->GetChordMap(p,a,b) #define IDirectMusicStyle_GetTimeSignature(p,a) (p)->lpVtbl->GetTimeSignature(p,a) #define IDirectMusicStyle_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d) #define IDirectMusicStyle_GetTempo(p,a) (p)->lpVtbl->GetTempo(p,a) #endif /***************************************************************************** * IDirectMusicStyle8 interface */ #define INTERFACE IDirectMusicStyle8 DECLARE_INTERFACE_(IDirectMusicStyle8,IDirectMusicStyle) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicStyle methods ***/ STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE; STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE; STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE; STDMETHOD(GetDefaultChordMap)(THIS_ struct IDirectMusicChordMap **ppChordMap) PURE; STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, struct IDirectMusicChordMap **ppChordMap) PURE; STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE; STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE; STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE; /*** IDirectMusicStyle8 methods ***/ STDMETHOD(EnumPattern)(THIS_ DWORD dwIndex, DWORD dwPatternType, WCHAR *pwszName) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicStyle8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicStyle8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicStyle8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicStyle methods ***/ #define IDirectMusicStyle8_GetBand(p,a,b) (p)->lpVtbl->GetBand(p,a,b) #define IDirectMusicStyle8_EnumBand(p,a,b) (p)->lpVtbl->EnumBand(p,a,b) #define IDirectMusicStyle8_GetDefaultBand(p,a) (p)->lpVtbl->GetDefaultBand(p,a) #define IDirectMusicStyle8_EnumMotif(p,a,b) (p)->lpVtbl->EnumMotif(p,a,b) #define IDirectMusicStyle8_GetMotif(p,a,b) (p)->lpVtbl->GetMotif(p,a,b) #define IDirectMusicStyle8_GetDefaultChordMap(p,a) (p)->lpVtbl->GetDefaultChordMap(p,a) #define IDirectMusicStyle8_EnumChordMap(p,a,b) (p)->lpVtbl->EnumChordMap(p,a,b) #define IDirectMusicStyle8_GetChordMap(p,a,b) (p)->lpVtbl->GetChordMap(p,a,b) #define IDirectMusicStyle8_GetTimeSignature(p,a) (p)->lpVtbl->GetTimeSignature(p,a) #define IDirectMusicStyle8_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d) #define IDirectMusicStyle8_GetTempo(p,a) (p)->lpVtbl->GetTempo(p,a) /*** IDirectMusicStyle8 methods ***/ #define IDirectMusicStyle8_EnumPattern(p,a,b,c) (p)->lpVtbl->EnumPattern(p,a,b,c) #endif /***************************************************************************** * IDirectMusicChordMap interface */ #define INTERFACE IDirectMusicChordMap DECLARE_INTERFACE_(IDirectMusicChordMap,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicChordMap methods ***/ STDMETHOD(GetScale)(THIS_ DWORD *pdwScale) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicChordMap_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicChordMap_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicChordMap_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicChordMap methods ***/ #define IDirectMusicChordMap_GetScale(p,a) (p)->lpVtbl->GetScale(p,a) #endif /***************************************************************************** * IDirectMusicComposer interface */ #define INTERFACE IDirectMusicComposer DECLARE_INTERFACE_(IDirectMusicComposer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicComposer methods ***/ STDMETHOD(ComposeSegmentFromTemplate)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment *pTemplate, WORD wActivity, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE; STDMETHOD(ComposeSegmentFromShape)(THIS_ IDirectMusicStyle *pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE; STDMETHOD(ComposeTransition)(THIS_ IDirectMusicSegment *pFromSeg, IDirectMusicSegment *pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg) PURE; STDMETHOD(AutoTransition)(THIS_ IDirectMusicPerformance *pPerformance, IDirectMusicSegment *pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg, IDirectMusicSegmentState **ppToSegState, IDirectMusicSegmentState **ppTransSegState) PURE; STDMETHOD(ComposeTemplateFromShape)(THIS_ WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment **ppTemplate) PURE; STDMETHOD(ChangeChordMap)(THIS_ IDirectMusicSegment *pSegment, BOOL fTrackScale, IDirectMusicChordMap *pChordMap) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicComposer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicComposer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicComposer_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicComposer methods ***/ #define IDirectMusicComposer_ComposeSegmentFromTemplate(p,a,b,c,d,e) (p)->lpVtbl->ComposeSegmentFromTemplate(p,a,b,c,d,e) #define IDirectMusicComposer_ComposeSegmentFromShape(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeSegmentFromShape(p,a,b,c,d,e,f,g,h) #define IDirectMusicComposer_ComposeTransition(p,a,b,c,d,e,f,g) (p)->lpVtbl->ComposeTransition(p,a,b,c,d,e,f,g) #define IDirectMusicComposer_AutoTransition(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->AutoTransition(p,a,b,c,d,e,f,g,h) #define IDirectMusicComposer_ComposeTemplateFromShape(p,a,b,c,d,e,f) (p)->lpVtbl->ComposeTemplateFromShape(p,a,b,c,d,e,f) #define IDirectMusicComposer_ChangeChordMap(p,a,b,c) (p)->lpVtbl->ChangeChordMap(p,a,b,c) #endif /***************************************************************************** * IDirectMusicPatternTrack interface */ #define INTERFACE IDirectMusicPatternTrack DECLARE_INTERFACE_(IDirectMusicPatternTrack,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicPatternTrack methods ***/ STDMETHOD(CreateSegment)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment **ppSegment) PURE; STDMETHOD(SetVariation)(THIS_ IDirectMusicSegmentState *pSegState, DWORD dwVariationFlags, DWORD dwPart) PURE; STDMETHOD(SetPatternByName)(THIS_ IDirectMusicSegmentState *pSegState, WCHAR *wszName, IDirectMusicStyle *pStyle, DWORD dwPatternType, DWORD *pdwLength) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicPatternTrack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicPatternTrack_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicPatternTrack_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicPatternTrack methods ***/ #define IDirectMusicPatternTrack_CreateSegment(p,a,b) (p)->lpVtbl->CreateSegment(p,a,b) #define IDirectMusicPatternTrack_SetVariation(p,a,b,c) (p)->lpVtbl->SetVariation(p,a,b,c) #define IDirectMusicPatternTrack_SetPatternByName(p,a,b,c,d,e) (p)->lpVtbl->SetPatternByName(p,a,b,c,d,e) #endif /***************************************************************************** * IDirectMusicScript interface */ #define INTERFACE IDirectMusicScript DECLARE_INTERFACE_(IDirectMusicScript,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicScript methods ***/ STDMETHOD(Init)(THIS_ IDirectMusicPerformance *pPerformance, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; STDMETHOD(CallRoutine)(THIS_ WCHAR *pwszRoutineName, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; STDMETHOD(SetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; STDMETHOD(GetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT *pvarValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; STDMETHOD(SetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; STDMETHOD(GetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG *plValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; STDMETHOD(SetVariableObject)(THIS_ WCHAR *pwszVariableName, IUnknown *punkValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; STDMETHOD(GetVariableObject)(THIS_ WCHAR *pwszVariableName, REFIID riid, LPVOID *ppv, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; STDMETHOD(EnumRoutine)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; STDMETHOD(EnumVariable)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicScript_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicScript_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicScript_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicScript methods ***/ #define IDirectMusicPatternTrack_Init(p,a,b) (p)->lpVtbl->Init(p,a,b) #define IDirectMusicPatternTrack_CallRoutine(p,a,b) (p)->lpVtbl->CallRoutine(p,a,b) #define IDirectMusicPatternTrack_SetVariableVariant(p,a,b,c,d) (p)->lpVtbl->SetVariableVariant(p,a,b,c,d) #define IDirectMusicPatternTrack_GetVariableVariant(p,a,b,c) (p)->lpVtbl->GetVariableVariant(p,a,b,c) #define IDirectMusicPatternTrack_SetVariableNumber(p,a,b,c) (p)->lpVtbl->SetVariableNumber(p,a,b,c) #define IDirectMusicPatternTrack_GetVariableNumber(p,a,b,c) (p)->lpVtbl->GetVariableNumber(p,a,b,c) #define IDirectMusicPatternTrack_SetVariableObject(p,a,b,c) (p)->lpVtbl->SetVariableObject(p,a,b,c) #define IDirectMusicPatternTrack_GetVariableObject(p,a,b,c,d) (p)->lpVtbl->GetVariableObject(p,a,b,c,d) #define IDirectMusicPatternTrack_EnumRoutine(p,a,b) (p)->lpVtbl->EnumRoutine(p,a,b) #define IDirectMusicPatternTrack_EnumVariable(p,a,b) (p)->lpVtbl->EnumVariable(p,a,b) #endif /***************************************************************************** * IDirectMusicContainer interface */ #define INTERFACE IDirectMusicContainer DECLARE_INTERFACE_(IDirectMusicContainer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicContainer methods ***/ STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR *pwszAlias) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicContainer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicContainer_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicContainer methods ***/ #define IDirectMusicContainer_EnumObject(p,a,b,c,d) (p)->lpVtbl->EnumObject(p,a,b,c,d) #endif #ifdef __cplusplus } #endif #include #endif /* __WINE_DMUSIC_PERFORMANCE_H */ ================================================ FILE: wine/windows/dmusics.h ================================================ /* * DirectMusic Software Synth Definitions * * Copyright (C) 2003-2004 Rok Mandeljc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DMUSIC_SOFTWARESYNTH_H #define __WINE_DMUSIC_SOFTWARESYNTH_H #include /***************************************************************************** * Registry path */ #define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths" /***************************************************************************** * Predeclare the interfaces */ /* IIDs */ DEFINE_GUID(IID_IDirectMusicSynth, 0x09823661,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); DEFINE_GUID(IID_IDirectMusicSynth8, 0x53cab625,0x2711,0x4c9f,0x9d,0xe7,0x1b,0x7f,0x92,0x5f,0x6f,0xc8); DEFINE_GUID(IID_IDirectMusicSynthSink, 0x09823663,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6); /* typedef definitions */ typedef struct IDirectMusicSynth *LPDIRECTMUSICSYNTH; typedef struct IDirectMusicSynth8 *LPDIRECTMUSICSYNTH8; typedef struct IDirectMusicSynthSink *LPDIRECTMUSICSYNTHSINK; /* GUIDs - property set */ DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink, 0x0a3a5ba5,0x37b6,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12); DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857,0x8952,0x11d2,0xba,0x1c,0x00,0x00,0xf8,0x75,0xac,0x12); /***************************************************************************** * Flags */ #define REFRESH_F_LASTBUFFER 0x1 /***************************************************************************** * Structures */ #ifndef _DMUS_VOICE_STATE_DEFINED #define _DMUS_VOICE_STATE_DEFINED /* typedef definition */ typedef struct _DMUS_VOICE_STATE DMUS_VOICE_STATE, *LPDMUS_VOICE_STATE; /* actual structure */ struct _DMUS_VOICE_STATE { BOOL bExists; SAMPLE_POSITION spPosition; }; #endif /* _DMUS_VOICE_STATE_DEFINED */ /***************************************************************************** * IDirectMusicSynth interface */ #define INTERFACE IDirectMusicSynth DECLARE_INTERFACE_(IDirectMusicSynth,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicSynth methods ***/ STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE; STDMETHOD(Close)(THIS) PURE; STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE; STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE; STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE; STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE; STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE; STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE; STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE; STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE; STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE; STDMETHOD(SetSynthSink)(THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE; STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE; STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE; STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE; STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE; STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicSynth_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicSynth_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicSynth_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicSynth methods ***/ #define IDirectMusicSynth_Open(p,a) (p)->lpVtbl->Open(p,a) #define IDirectMusicSynth_Close(p) (p)->lpVtbl->Close(p) #define IDirectMusicSynth_SetNumChannelGroups(p,a) (p)->lpVtbl->SetNumChannelGroups(p,a) #define IDirectMusicSynth_Download(p,a,b,c) (p)->lpVtbl->Download(p,a,b,c) #define IDirectMusicSynth_Unload(p,a,b,c) (p)->lpVtbl->Unload(p,a,b,c) #define IDirectMusicSynth_PlayBuffer(p,a,b,c) (p)->lpVtbl->PlayBuffer(p,a,b,c) #define IDirectMusicSynth_GetRunningStats(p,a) (p)->lpVtbl->GetRunningStats(p,a) #define IDirectMusicSynth_GetPortCaps(p,a) (p)->lpVtbl->GetPortCaps(p,a) #define IDirectMusicSynth_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a) #define IDirectMusicSynth_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a) #define IDirectMusicSynth_Activate(p,a) (p)->lpVtbl->Activate(p,a) #define IDirectMusicSynth_SetSynthSink(p,a) (p)->lpVtbl->SetSynthSink(p,a) #define IDirectMusicSynth_Render(p,a,b,c) (p)->lpVtbl->Render(p,a,b,c) #define IDirectMusicSynth_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c) #define IDirectMusicSynth_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c) #define IDirectMusicSynth_GetFormat(p,a,b) (p)->lpVtbl->GetFormat(p,a,b) #define IDirectMusicSynth_GetAppend(p,a) (p)->lpVtbl->GetAppend(p,a) #endif /***************************************************************************** * IDirectMusicSynth8 interface */ #define INTERFACE IDirectMusicSynth8 DECLARE_INTERFACE_(IDirectMusicSynth8,IDirectMusicSynth) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicSynth methods ***/ STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE; STDMETHOD(Close)(THIS) PURE; STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE; STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE; STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE; STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE; STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE; STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE; STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE; STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE; STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE; STDMETHOD(SetSynthSink)(THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE; STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE; STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE; STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE; STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE; STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE; /*** IDirectMusicSynth8 methods ***/ 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; STDMETHOD(StopVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId) PURE; STDMETHOD(GetVoiceState)(THIS_ DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[]) PURE; STDMETHOD(Refresh)(THIS_ DWORD dwDownloadID, DWORD dwFlags) PURE; STDMETHOD(AssignChannelToBuses)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicSynth8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicSynth8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicSynth8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicSynth methods ***/ #define IDirectMusicSynth8_Open(p,a) (p)->lpVtbl->Open(p,a) #define IDirectMusicSynth8_Close(p) (p)->lpVtbl->Close(p) #define IDirectMusicSynth8_SetNumChannelGroups(p,a) (p)->lpVtbl->SetNumChannelGroups(p,a) #define IDirectMusicSynth8_Download(p,a,b,c) (p)->lpVtbl->Download(p,a,b,c) #define IDirectMusicSynth8_Unload(p,a,b,c) (p)->lpVtbl->Unload(p,a,b,c) #define IDirectMusicSynth8_PlayBuffer(p,a,b,c) (p)->lpVtbl->PlayBuffer(p,a,b,c) #define IDirectMusicSynth8_GetRunningStats(p,a) (p)->lpVtbl->GetRunningStats(p,a) #define IDirectMusicSynth8_GetPortCaps(p,a) (p)->lpVtbl->GetPortCaps(p,a) #define IDirectMusicSynth8_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a) #define IDirectMusicSynth8_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a) #define IDirectMusicSynth8_Activate(p,a) (p)->lpVtbl->Activate(p,a) #define IDirectMusicSynth8_SetSynthSink(p,a) (p)->lpVtbl->SetSynthSink(p,a) #define IDirectMusicSynth8_Render(p,a,b,c) (p)->lpVtbl->Render(p,a,b,c) #define IDirectMusicSynth8_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c) #define IDirectMusicSynth8_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c) #define IDirectMusicSynth8_GetFormat(p,a,b) (p)->lpVtbl->GetFormat(p,a,b) #define IDirectMusicSynth8_GetAppend(p,a) (p)->lpVtbl->GetAppend(p,a) /*** IDirectMusicSynth8 methods ***/ #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) #define IDirectMusicSynth8_StopVoice(p,a,b) (p)->lpVtbl->StopVoice(p,a,b) #define IDirectMusicSynth8_GetVoiceState(p,a,b,c) (p)->lpVtbl->GetVoiceState(p,a,b,c) #define IDirectMusicSynth8_Refresh(p,a,b) (p)->lpVtbl->Refresh(p,a,b) #define IDirectMusicSynth8_AssignChannelToBuses(p,a,b,c,d) (p)->lpVtbl->AssignChannelToBuses(p,a,b,c,d) #endif /***************************************************************************** * IDirectMusicSynthSink interface */ #define INTERFACE IDirectMusicSynthSink DECLARE_INTERFACE_(IDirectMusicSynthSink,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectMusicSynthSink methods ***/ STDMETHOD(Init)(THIS_ IDirectMusicSynth *pSynth) PURE; STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE; STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE; STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE; STDMETHOD(SampleToRefTime)(THIS_ LONGLONG llSampleTime, REFERENCE_TIME *prfTime) PURE; STDMETHOD(RefTimeToSample)(THIS_ REFERENCE_TIME rfTime, LONGLONG *pllSampleTime) PURE; STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE; STDMETHOD(GetDesiredBufferSize)(THIS_ LPDWORD pdwBufferSizeInSamples) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectMusicSynthSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectMusicSynthSink_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectMusicSynthSink_Release(p) (p)->lpVtbl->Release(p) /*** IDirectMusicSynth methods ***/ #define IDirectMusicSynthSink_Init(p,a) (p)->lpVtbl->Init(p,a) #define IDirectMusicSynthSink_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a) #define IDirectMusicSynthSink_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a) #define IDirectMusicSynthSink_Activate(p,a) (p)->lpVtbl->Activate(p,a) #define IDirectMusicSynthSink_SampleToRefTime(p,a,b) (p)->lpVtbl->SampleToRefTime(p,a,b) #define IDirectMusicSynthSink_RefTimeToSample(p,a,b) (p)->lpVtbl->RefTimeToSample(p,a,b) #define IDirectMusicSynthSink_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b) #define IDirectMusicSynthSink_GetDesiredBufferSize(p,a) (p)->lpVtbl->GetDesiredBufferSize(p,a) #endif #endif /* __WINE_DMUSIC_SOFTWARESYNTH_H */ ================================================ FILE: wine/windows/docobj.idl ================================================ /* * Copyright (C) 1999 Paul Quinn * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "ocidl.idl"; import "objidl.idl"; import "oleidl.idl"; import "oaidl.idl"; import "servprov.idl"; interface IOleDocumentView; interface IEnumOleDocumentViews; /***************************************************************************** * IOleDocument interface */ [ object, uuid(b722bcc5-4e68-101b-a2bc-00aa00404770), pointer_default(unique) ] interface IOleDocument : IUnknown { typedef [unique] IOleDocument *LPOLEDOCUMENT; typedef enum { DOCMISC_CANCREATEMULTIPLEVIEWS = 1, DOCMISC_SUPPORTCOMPLEXRECTANGLES = 2, DOCMISC_CANTOPENEDIT = 4, DOCMISC_NOFILESUPPORT = 8 } DOCMISC; HRESULT CreateView( [in, unique] IOleInPlaceSite *pIPSite, [in, unique] IStream *pstm, [in] DWORD dwReserved, [out] IOleDocumentView **ppView); HRESULT GetDocMiscStatus( [out] DWORD *pdwStatus); HRESULT EnumViews( [out] IEnumOleDocumentViews **ppEnum, [out] IOleDocumentView **ppView); } /***************************************************************************** * IOleDocumentSite interface */ [ object, uuid(b722bcc7-4e68-101b-a2bc-00aa00404770), pointer_default(unique) ] interface IOleDocumentSite : IUnknown { typedef [unique] IOleDocumentSite *LPOLEDOCUMENTSITE; HRESULT ActivateMe( [in] IOleDocumentView *pViewToActivate ); } /***************************************************************************** * IOleDocumentView interface */ [ object, uuid(b722bcc6-4e68-101b-a2bc-00aa00404770), pointer_default(unique) ] interface IOleDocumentView : IUnknown { typedef [unique] IOleDocumentView *LPOLEDOCUMENTVIEW; HRESULT SetInPlaceSite( [in, unique] IOleInPlaceSite *pIPSite ); HRESULT GetInPlaceSite( [out] IOleInPlaceSite **ppIPSite ); HRESULT GetDocument( [out] IUnknown **ppunk ); HRESULT SetRect( [in] LPRECT prcView ); HRESULT GetRect( [out] LPRECT prcView ); HRESULT SetRectComplex( [in, unique] LPRECT prcView, [in, unique] LPRECT prcHScroll, [in, unique] LPRECT prcVScroll, [in, unique] LPRECT prcSizeBox); HRESULT Show( [in] BOOL fShow ); HRESULT UIActivate( [in] BOOL fUIActivate ); HRESULT Open(); HRESULT CloseView( [in] DWORD dwReserved ); HRESULT SaveViewState( [in] LPSTREAM pstm ); HRESULT ApplyViewState( [in] LPSTREAM pstm ); HRESULT Clone( [in] IOleInPlaceSite *pIPSiteNew, [out] IOleDocumentView **ppViewNew); } /***************************************************************************** * IEnumOleDocumentViews interface */ [ object, uuid(b722bcc8-4e68-101b-a2bc-00aa00404770), pointer_default(unique) ] interface IEnumOleDocumentViews : IUnknown { typedef [unique] IEnumOleDocumentViews *LPENUMOLEDOCUMENTVIEWS; [local] HRESULT Next( [in] ULONG cViews, [out] IOleDocumentView **rgpView, [out] ULONG *pcFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG cViews, [out, size_is(cViews), length_is(*pcFetched)] IOleDocumentView **rgpView, [out] ULONG *pcFetched); HRESULT Skip( [in] ULONG cViews ); HRESULT Reset(); HRESULT Clone( [out] IEnumOleDocumentViews **ppEnum ); } /***************************************************************************** * IOleCommandTarget interface */ [ object, uuid(b722bccb-4e68-101b-a2bc-00aa00404770), pointer_default(unique) ] interface IOleCommandTarget : IUnknown { typedef [unique] IOleCommandTarget *LPOLECOMMANDTARGET; typedef enum OLECMDF { OLECMDF_SUPPORTED = 0x1, OLECMDF_ENABLED = 0x2, OLECMDF_LATCHED = 0x4, OLECMDF_NINCHED = 0x8, OLECMDF_INVISIBLE = 0x10, OLECMDF_DEFHIDEONCTXTMENU = 0x20 } OLECMDF; typedef struct _tagOLECMD { ULONG cmdID; DWORD cmdf; } OLECMD; typedef struct _tagOLECMDTEXT { DWORD cmdtextf; ULONG cwActual; ULONG cwBuf; [size_is(cwBuf)] WCHAR rgwz[]; } OLECMDTEXT; typedef enum OLECMDTEXTF { OLECMDTEXTF_NONE = 0, OLECMDTEXTF_NAME = 1, OLECMDTEXTF_STATUS = 2 } OLECMDTEXTF; typedef enum OLECMDEXECOPT { OLECMDEXECOPT_DODEFAULT = 0, OLECMDEXECOPT_PROMPTUSER = 1, OLECMDEXECOPT_DONTPROMPTUSER = 2, OLECMDEXECOPT_SHOWHELP = 3 } OLECMDEXECOPT; typedef enum OLECMDID { OLECMDID_OPEN = 1, OLECMDID_NEW = 2, OLECMDID_SAVE = 3, OLECMDID_SAVEAS = 4, OLECMDID_SAVECOPYAS = 5, OLECMDID_PRINT = 6, OLECMDID_PRINTPREVIEW = 7, OLECMDID_PAGESETUP = 8, OLECMDID_SPELL = 9, OLECMDID_PROPERTIES = 10, OLECMDID_CUT = 11, OLECMDID_COPY = 12, OLECMDID_PASTE = 13, OLECMDID_PASTESPECIAL = 14, OLECMDID_UNDO = 15, OLECMDID_REDO = 16, OLECMDID_SELECTALL = 17, OLECMDID_CLEARSELECTION = 18, OLECMDID_ZOOM = 19, OLECMDID_GETZOOMRANGE = 20, OLECMDID_UPDATECOMMANDS = 21, OLECMDID_REFRESH = 22, OLECMDID_STOP = 23, OLECMDID_HIDETOOLBARS = 24, OLECMDID_SETPROGRESSMAX = 25, OLECMDID_SETPROGRESSPOS = 26, OLECMDID_SETPROGRESSTEXT = 27, OLECMDID_SETTITLE = 28, OLECMDID_SETDOWNLOADSTATE = 29, OLECMDID_STOPDOWNLOAD = 30, OLECMDID_ONTOOLBARACTIVATED = 31, OLECMDID_FIND = 32, OLECMDID_DELETE = 33, OLECMDID_HTTPEQUIV = 34, OLECMDID_HTTPEQUIV_DONE = 35, OLECMDID_ENABLE_INTERACTION = 36, OLECMDID_ONUNLOAD = 37, OLECMDID_PROPERTYBAG2 = 38, OLECMDID_PREREFRESH = 39, /* iexplorer uses ... 44 */ OLECMDID_SHOWSCRIPTERROR = 40, OLECMDID_SHOWMESSAGE = 41, OLECMDID_SHOWFIND = 42, OLECMDID_SHOWPAGESETUP = 43, OLECMDID_SHOWPRINT = 44, OLECMDID_CLOSE = 45, OLECMDID_ALLOWUILESSSAVEAS = 46, OLECMDID_DONTDOWNLOADCSS = 47, OLECMDID_UPDATEPAGESTATUS = 48, OLECMDID_PRINT2 = 49, OLECMDID_PRINTPREVIEW2 = 50, OLECMDID_SETPRINTTEMPLATE = 51, OLECMDID_GETPRINTTEMPLATE = 52, OLECMDID_PAGEACTIONBLOCKED = 55, OLECMDID_PAGEACTIONUIQUERY = 56, OLECMDID_FOCUSVIEWCONTROLS = 57, OLECMDID_FOCUSVIEWCONTROLSQUERY = 58, OLECMDID_SHOWPAGEACTIONMENU = 59, OLECMDID_ADDTRAVELENTRY = 60, OLECMDID_UPDATETRAVELENTRY = 61, OLECMDID_UPDATEBACKFORWARDSTATE = 62, OLECMDID_OPTICAL_ZOOM = 63, OLECMDID_OPTICAL_GETZOOMRANGE = 64, OLECMDID_WINDOWSTATECHANGED = 65, OLECMDID_ACTIVEXINSTALLSCOPE = 66, OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67, OLECMDID_SHOWTASKDLG = 68, OLECMDID_POPSTATEEVENT = 69, OLECMDID_VIEWPORT_MODE = 70, OLECMDID_LAYOUT_VIEWPORT_WIDTH = 71, OLECMDID_VISUAL_VIEWPORT_EXCLUDE_BOTTOM = 72, OLECMDID_USER_OPTICAL_ZOOM = 73, OLECMDID_PAGEAVAILABLE = 74, OLECMDID_GETUSERSCALABLE = 75, OLECMDID_UPDATE_CARET = 76, OLECMDID_ENABLE_VISIBILITY = 77, OLECMDID_MEDIA_PLAYBACK = 78 } OLECMDID; HRESULT QueryStatus( [in, unique] const GUID *pguidCmdGroup, [in] ULONG cCmds, [in, out, size_is(cCmds)] OLECMD prgCmds[], [in, out, unique] OLECMDTEXT *pCmdText); HRESULT Exec( [in, unique] const GUID *pguidCmdGroup, [in] DWORD nCmdID, [in] DWORD nCmdexecopt, [in, unique] VARIANT *pvaIn, [in, out, unique] VARIANT *pvaOut); } /***************************************************************************** * IContinueCallback interface */ [ object, uuid(b722bcca-4e68-101b-a2bc-00aa00404770), pointer_default(unique) ] interface IContinueCallback : IUnknown { typedef [unique] IContinueCallback *LPCONTINUECALLBACK; HRESULT FContinue(); HRESULT FContinuePrinting( [in] LONG nCntPrinted, [in] LONG nCurPage, [in, unique] WCHAR *pwszPrintStatus); } /***************************************************************************** * IPrint interface */ [ object, uuid(b722bcc9-4e68-101b-a2bc-00aa00404770), pointer_default(unique) ] interface IPrint : IUnknown { typedef [unique] IPrint *LPPRINT; typedef enum { PRINTFLAG_MAYBOTHERUSER = 1, PRINTFLAG_PROMPTUSER = 2, PRINTFLAG_USERMAYCHANGEPRINTER = 4, PRINTFLAG_RECOMPOSETODEVICE = 8, PRINTFLAG_DONTACTUALLYPRINT = 16, PRINTFLAG_FORCEPROPERTIES = 32, PRINTFLAG_PRINTTOFILE = 64 } PRINTFLAG; typedef struct tagPAGERANGE { LONG nFromPage; LONG nToPage; } PAGERANGE; typedef struct tagPAGESET { ULONG cbStruct; BOOL fOddPages; BOOL fEvenPages; ULONG cPageRange; [size_is(cPageRange)] PAGERANGE rgPages[]; } PAGESET; HRESULT SetInitialPageNum( [in] LONG nFirstPage); HRESULT GetPageInfo( [out] LONG *pnFirstPage, [out] LONG *pcPages); [local] HRESULT Print( [in] DWORD grfFlags, [in, out] DVTARGETDEVICE **pptd, [in, out] PAGESET **ppPageSet, [in, out, unique] STGMEDIUM *pstgmOptions, [in] IContinueCallback *pcallback, [in] LONG nFirstPage, [out] LONG *pcPagesPrinted, [out] LONG *pnLastPage); [call_as(Print)] HRESULT RemotePrint( [in] DWORD grfFlags, [in, out] DVTARGETDEVICE **pptd, [in, out] PAGESET **pppageset, [in, out, unique] RemSTGMEDIUM *pstgmOptions, [in] IContinueCallback *pcallback, [in] LONG nFirstPage, [out] LONG *pcPagesPrinted, [out] LONG *pnLastPage); } cpp_quote("#define OLECMDERR_E_FIRST (OLE_E_LAST+1)") cpp_quote("#define OLECMDERR_E_NOTSUPPORTED (OLECMDERR_E_FIRST)") cpp_quote("#define OLECMDERR_E_DISABLED (OLECMDERR_E_FIRST+1)") cpp_quote("#define OLECMDERR_E_NOHELP (OLECMDERR_E_FIRST+2)") cpp_quote("#define OLECMDERR_E_CANCELED (OLECMDERR_E_FIRST+3)") cpp_quote("#define OLECMDERR_E_UNKNOWNGROUP (OLECMDERR_E_FIRST+4)") cpp_quote("#define MSOCMDERR_E_FIRST OLECMDERR_E_FIRST") cpp_quote("#define MSOCMDERR_E_NOTSUPPORTED OLECMDERR_E_NOTSUPPORTED") cpp_quote("#define MSOCMDERR_E_DISABLED OLECMDERR_E_DISABLED") cpp_quote("#define MSOCMDERR_E_NOHELP OLECMDERR_E_NOHELP") cpp_quote("#define MSOCMDERR_E_CANCELED OLECMDERR_E_CANCELED") cpp_quote("#define MSOCMDERR_E_UNKNOWNGROUP OLECMDERR_E_UNKNOWNGROUP") cpp_quote("#define LPMSODOCUMENT LPOLEDOCUMENT") cpp_quote("#define LPMSODOCUMENTSITE LPOLEDOCUMENTSITE") cpp_quote("#define LPMSOVIEW LPOLEDOCUMENTVIEW") cpp_quote("#define LPENUMMSOVIEW LPENUMOLEDOCUMENTVIEWS") cpp_quote("#define LPMSOCOMMANDTARGET LPOLECOMMANDTARGET") cpp_quote("#define IID_IMsoDocument IID_IOleDocument") cpp_quote("#define IID_IMsoDocumentSite IID_IOleDocumentSite") cpp_quote("#define IID_IMsoView IID_IOleDocumentView") cpp_quote("#define IID_IEnumMsoView IID_IEnumOleDocumentViews") cpp_quote("#define IID_IMsoCommandTarget IID_IOleCommandTarget") cpp_quote("EXTERN_C const GUID SID_SContainerDispatch;") ================================================ FILE: wine/windows/docobjectservice.idl ================================================ /* * Copyright 2011 Piotr Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "mshtml.idl"; [ local, object, uuid(3050f801-98b5-11cf-bb82-00aa00bdce0b) ] interface IDocObjectService : IUnknown { HRESULT FireBeforeNavigate2( [in] IDispatch *pDispatch, [in] LPCWSTR lpszUrl, [in] DWORD dwFlags, [in] LPCWSTR lpszFrameName, [in] BYTE *pPostData, [in] DWORD cbPostData, [in] LPCWSTR lpszHeaders, [in] BOOL fPlayNavSound, [out] BOOL *pfCancel); HRESULT FireNavigateComplete2( [in] IHTMLWindow2 *pHTMLWindow2, [in] DWORD dwFlags); HRESULT FireDownloadBegin(void); HRESULT FireDownloadComplete(void); HRESULT FireDocumentComplete( [in] IHTMLWindow2 *pHTMLWindow, [in] DWORD dwFlags); HRESULT UpdateDesktopComponent( [in] IHTMLWindow2 *pHTMLWindow); HRESULT GetPendingUrl( [out] BSTR *pbstrPendingUrl); HRESULT ActiveElementChanged( [in] IHTMLElement *pHTMLElement); HRESULT GetUrlSearchComponent( [out] BSTR *pbstrSearch); HRESULT IsErrorUrl( [in] LPCWSTR lpszUrl, [out] BOOL *pfIsError); } ================================================ FILE: wine/windows/downloadmgr.idl ================================================ /* * Copyright 2005 Jacek Caban * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; import "ocidl.idl"; import "oleidl.idl"; import "oaidl.idl"; #endif [ object, uuid(988934A4-064B-11D3-BB80-00104B35E7F9), pointer_default(unique), local ] interface IDownloadManager : IUnknown { HRESULT Download( [in] IMoniker *pmk, [in] IBindCtx *pbc, [in] DWORD dwBindVerb, [in] LONG grfBINDF, [in] BINDINFO *pBindInfo, [in] LPCOLESTR pszHeaders, [in] LPCOLESTR pszRedir, [in] UINT uiCP); } ================================================ FILE: wine/windows/dpaddr.h ================================================ /* * Copyright (C) 2003-2005 Raphael Junqueira * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DPLAY8_DPADDR_H #define __WINE_DPLAY8_DPADDR_H #include #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef REFIID DPNAREFIID; #ifndef _WINSOCK2API_ typedef struct sockaddr SOCKADDR; #endif /***************************************************************************** * DirectPlay8Addr defines */ #define DPNA_DATATYPE_STRING 0x00000001 #define DPNA_DATATYPE_DWORD 0x00000002 #define DPNA_DATATYPE_GUID 0x00000003 #define DPNA_DATATYPE_BINARY 0x00000004 #define DPNA_DATATYPE_STRING_ANSI 0x00000005 #define DPNA_DPNSVR_PORT 6073 #define DPNA_INDEX_INVALID 0xFFFFFFFF #define DPNA_SEPARATOR_KEYVALUE L'=' #define DPNA_SEPARATOR_KEYVALUE_A '=' #define DPNA_SEPARATOR_USERDATA L'#' #define DPNA_SEPARATOR_USERDATA_A '#' #define DPNA_SEPARATOR_COMPONENT L';' #define DPNA_SEPARATOR_COMPONENT_A ';' #define DPNA_ESCAPECHAR L'%' #define DPNA_ESCAPECHAR_A '%' #define DPNA_HEADER_A "x-directplay:/" #define DPNA_KEY_APPLICATION_INSTANCE_A "applicationinstance" #define DPNA_KEY_BAUD_A "baud" #define DPNA_KEY_DEVICE_A "device" #define DPNA_KEY_FLOWCONTROL_A "flowcontrol" #define DPNA_KEY_HOSTNAME_A "hostname" #define DPNA_KEY_NAMEINFO_A "nameinfo" #define DPNA_KEY_PARITY_A "parity" #define DPNA_KEY_PHONENUMBER_A "phonenumber" #define DPNA_KEY_PORT_A "port" #define DPNA_KEY_PROCESSOR_A "processor" #define DPNA_KEY_PROGRAM_A "program" #define DPNA_KEY_PROVIDER_A "provider" #define DPNA_KEY_SCOPE_A "scope" #define DPNA_KEY_STOPBITS_A "stopbits" #define DPNA_KEY_TRAVERSALMODE_A "traversalmode" #define DPNA_STOP_BITS_ONE_A "1" #define DPNA_STOP_BITS_ONE_FIVE_A "1.5" #define DPNA_STOP_BITS_TWO_A "2" #define DPNA_PARITY_NONE_A "NONE" #define DPNA_PARITY_EVEN_A "EVEN" #define DPNA_PARITY_ODD_A "ODD" #define DPNA_PARITY_MARK_A "MARK" #define DPNA_PARITY_SPACE_A "SPACE" #define DPNA_FLOW_CONTROL_NONE_A "NONE" #define DPNA_FLOW_CONTROL_XONXOFF_A "XONXOFF" #define DPNA_FLOW_CONTROL_RTS_A "RTS" #define DPNA_FLOW_CONTROL_DTR_A "DTR" #define DPNA_FLOW_CONTROL_RTSDTR_A "RTSDTR" #define DPNA_VALUE_TCPIPPROVIDER_A "IP" #define DPNA_VALUE_IPXPROVIDER_A "IPX" #define DPNA_VALUE_MODEMPROVIDER_A "MODEM" #define DPNA_VALUE_SERIALPROVIDER_A "SERIAL" /* And now the same thing but as Unicode strings */ #if defined(__GNUC__) # define DPNA_HEADER (const WCHAR []){ 'x','-','d','i','r','e','c','t','p','l','a','y',':','/',0 } # 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 } # define DPNA_KEY_BAUD (const WCHAR []){ 'b','a','u','d',0 } # define DPNA_KEY_DEVICE (const WCHAR []){ 'd','e','v','i','c','e',0 } # define DPNA_KEY_FLOWCONTROL (const WCHAR []){ 'f','l','o','w','c','o','n','t','r','o','l',0 } # define DPNA_KEY_HOSTNAME (const WCHAR []){ 'h','o','s','t','n','a','m','e',0 } # define DPNA_KEY_NAMEINFO (const WCHAR []){ 'n','a','m','e','i','n','f','o',0 } # define DPNA_KEY_PARITY (const WCHAR []){ 'p','a','r','i','t','y',0 } # define DPNA_KEY_PHONENUMBER (const WCHAR []){ 'p','h','o','n','e','n','u','m','b','e','r',0 } # define DPNA_KEY_PORT (const WCHAR []){ 'p','o','r','t',0 } # define DPNA_KEY_PROCESSOR (const WCHAR []){ 'p','r','o','c','e','s','s','o','r',0 } # define DPNA_KEY_PROGRAM (const WCHAR []){ 'p','r','o','g','r','a','m',0 } # define DPNA_KEY_PROVIDER (const WCHAR []){ 'p','r','o','v','i','d','e','r',0 } # define DPNA_KEY_SCOPE (const WCHAR []){ 's','c','o','p','e',0 } # define DPNA_KEY_STOPBITS (const WCHAR []){ 's','t','o','p','b','i','t','s',0 } # define DPNA_KEY_TRAVERSALMODE (const WCHAR []){ 't','r','a','v','e','r','s','a','l','m','o','d','e',0 } # define DPNA_STOP_BITS_ONE (const WCHAR []){ '1',0 } # define DPNA_STOP_BITS_ONE_FIVE (const WCHAR []){ '1','.','5',0 } # define DPNA_STOP_BITS_TWO (const WCHAR []){ '2',0 } # define DPNA_PARITY_NONE (const WCHAR []){ 'N','O','N','E',0 } # define DPNA_PARITY_EVEN (const WCHAR []){ 'E','V','E','N',0 } # define DPNA_PARITY_ODD (const WCHAR []){ 'O','D','D',0 } # define DPNA_PARITY_MARK (const WCHAR []){ 'M','A','R','K',0 } # define DPNA_PARITY_SPACE (const WCHAR []){ 'S','P','A','C','E',0 } # define DPNA_FLOW_CONTROL_NONE (const WCHAR []){ 'N','O','N','E',0 } # define DPNA_FLOW_CONTROL_XONXOFF (const WCHAR []){ 'X','O','N','X','O','F','F',0 } # define DPNA_FLOW_CONTROL_RTS (const WCHAR []){ 'R','T','S',0 } # define DPNA_FLOW_CONTROL_DTR (const WCHAR []){ 'D','T','R',0 } # define DPNA_FLOW_CONTROL_RTSDTR (const WCHAR []){ 'R','T','S','D','T','R',0 } # define DPNA_VALUE_TCPIPPROVIDER (const WCHAR []){ 'I','P',0 } # define DPNA_VALUE_IPXPROVIDER (const WCHAR []){ 'I','P','X',0 } # define DPNA_VALUE_MODEMPROVIDER (const WCHAR []){ 'M','O','D','E','M',0 } # define DPNA_VALUE_SERIALPROVIDER (const WCHAR []){ 'S','E','R','I','A','L',0 } #elif defined(_MSC_VER) # define DPNA_HEADER L"x-directplay:/" # define DPNA_KEY_APPLICATION_INSTANCE L"applicationinstance" # define DPNA_KEY_BAUD L"baud" # define DPNA_KEY_DEVICE L"device" # define DPNA_KEY_FLOWCONTROL L"flowcontrol" # define DPNA_KEY_HOSTNAME L"hostname" # define DPNA_KEY_NAMEINFO L"nameinfo" # define DPNA_KEY_PARITY L"parity" # define DPNA_KEY_PHONENUMBER L"phonenumber" # define DPNA_KEY_PORT L"port" # define DPNA_KEY_PROCESSOR L"processor" # define DPNA_KEY_PROGRAM L"program" # define DPNA_KEY_PROVIDER L"provider" # define DPNA_KEY_SCOPE L"scope" # define DPNA_KEY_STOPBITS L"stopbits" # define DPNA_KEY_TRAVERSALMODE L"traversalmode" # define DPNA_STOP_BITS_ONE L"1" # define DPNA_STOP_BITS_ONE_FIVE L"1.5" # define DPNA_STOP_BITS_TWO L"2" # define DPNA_PARITY_NONE L"NONE" # define DPNA_PARITY_EVEN L"EVEN" # define DPNA_PARITY_ODD L"ODD" # define DPNA_PARITY_MARK L"MARK" # define DPNA_PARITY_SPACE L"SPACE" # define DPNA_FLOW_CONTROL_NONE L"NONE" # define DPNA_FLOW_CONTROL_XONXOFF L"XONXOFF" # define DPNA_FLOW_CONTROL_RTS L"RTS" # define DPNA_FLOW_CONTROL_DTR L"DTR" # define DPNA_FLOW_CONTROL_RTSDTR L"RTSDTR" # define DPNA_VALUE_TCPIPPROVIDER L"IP" # define DPNA_VALUE_IPXPROVIDER L"IPX" # define DPNA_VALUE_MODEMPROVIDER L"MODEM" # define DPNA_VALUE_SERIALPROVIDER L"SERIAL" #else static const WCHAR DPNA_HEADER[] = { 'x','-','d','i','r','e','c','t','p','l','a','y',':','/',0 }; static 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 }; static const WCHAR DPNA_KEY_BAUD[] = { 'b','a','u','d',0 }; static const WCHAR DPNA_KEY_DEVICE[] = { 'd','e','v','i','c','e',0 }; static const WCHAR DPNA_KEY_FLOWCONTROL[] = { 'f','l','o','w','c','o','n','t','r','o','l',0 }; static const WCHAR DPNA_KEY_HOSTNAME[] = { 'h','o','s','t','n','a','m','e',0 }; static const WCHAR DPNA_KEY_NAMEINFO[] = { 'n','a','m','e','i','n','f','o',0 }; static const WCHAR DPNA_KEY_PARITY[] = { 'p','a','r','i','t','y',0 }; static const WCHAR DPNA_KEY_PHONENUMBER[] = { 'p','h','o','n','e','n','u','m','b','e','r',0 }; static const WCHAR DPNA_KEY_PORT[] = { 'p','o','r','t',0 }; static const WCHAR DPNA_KEY_PROCESSOR[] = { 'p','r','o','c','e','s','s','o','r',0 }; static const WCHAR DPNA_KEY_PROGRAM[] = { 'p','r','o','g','r','a','m',0 }; static const WCHAR DPNA_KEY_PROVIDER[] = { 'p','r','o','v','i','d','e','r',0 }; static const WCHAR DPNA_KEY_SCOPE[] = { 's','c','o','p','e',0 }; static const WCHAR DPNA_KEY_STOPBITS[] = { 's','t','o','p','b','i','t','s',0 }; static const WCHAR DPNA_KEY_TRAVERSALMODE[] = { 't','r','a','v','e','r','s','a','l','m','o','d','e',0 }; static const WCHAR DPNA_STOP_BITS_ONE[] = { '1',0 }; static const WCHAR DPNA_STOP_BITS_ONE_FIVE[] = { '1','.','5',0 }; static const WCHAR DPNA_STOP_BITS_TWO[] = { '2',0 }; static const WCHAR DPNA_PARITY_NONE[] = { 'N','O','N','E',0 }; static const WCHAR DPNA_PARITY_EVEN[] = { 'E','V','E','N',0 }; static const WCHAR DPNA_PARITY_ODD[] = { 'O','D','D',0 }; static const WCHAR DPNA_PARITY_MARK[] = { 'M','A','R','K',0 }; static const WCHAR DPNA_PARITY_SPACE[] = { 'S','P','A','C','E',0 }; static const WCHAR DPNA_FLOW_CONTROL_NONE[] = { 'N','O','N','E',0 }; static const WCHAR DPNA_FLOW_CONTROL_XONXOFF[] = { 'X','O','N','X','O','F','F',0 }; static const WCHAR DPNA_FLOW_CONTROL_RTS[] = { 'R','T','S',0 }; static const WCHAR DPNA_FLOW_CONTROL_DTR[] = { 'D','T','R',0 }; static const WCHAR DPNA_FLOW_CONTROL_RTSDTR[] = { 'R','T','S','D','T','R',0 }; static const WCHAR DPNA_VALUE_TCPIPPROVIDER[] = { 'I','P',0 }; static const WCHAR DPNA_VALUE_IPXPROVIDER[] = { 'I','P','X',0 }; static const WCHAR DPNA_VALUE_MODEMPROVIDER[] = { 'M','O','D','E','M',0 }; static const WCHAR DPNA_VALUE_SERIALPROVIDER[] = { 'S','E','R','I','A','L',0 }; #endif #define DPNA_BAUD_RATE_9600 9600 #define DPNA_BAUD_RATE_14400 14400 #define DPNA_BAUD_RATE_19200 19200 #define DPNA_BAUD_RATE_38400 38400 #define DPNA_BAUD_RATE_56000 56000 #define DPNA_BAUD_RATE_57600 57600 #define DPNA_BAUD_RATE_115200 115200 /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(CLSID_DirectPlay8Address, 0x934a9523, 0xa3ca, 0x4bc5, 0xad, 0xa0, 0xd6, 0xd9, 0x5d, 0x97, 0x94, 0x21); DEFINE_GUID(IID_IDirectPlay8Address, 0x83783300, 0x4063, 0x4c8a, 0x9d, 0xb3, 0x82, 0x83, 0xa, 0x7f, 0xeb, 0x31); typedef struct IDirectPlay8Address *PDIRECTPLAY8ADDRESS, *LPDIRECTPLAY8ADDRESS; DEFINE_GUID(IID_IDirectPlay8AddressIP, 0xe5a0e990, 0x2bad, 0x430b, 0x87, 0xda, 0xa1, 0x42, 0xcf, 0x75, 0xde, 0x58); typedef struct IDirectPlay8AddressIP *PDIRECTPLAY8ADDRESSIP, *LPDIRECTPLAY8ADDRESSIP; /***************************************************************************** * IDirectPlay8Address interface */ #define INTERFACE IDirectPlay8Address DECLARE_INTERFACE_(IDirectPlay8Address,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8Address methods ***/ STDMETHOD(BuildFromURLW)(THIS_ WCHAR* pwszSourceURL) PURE; STDMETHOD(BuildFromURLA)(THIS_ CHAR* pszSourceURL) PURE; STDMETHOD(Duplicate)(THIS_ PDIRECTPLAY8ADDRESS* ppdpaNewAddress) PURE; STDMETHOD(SetEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress) PURE; STDMETHOD(IsEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress) PURE; STDMETHOD(Clear)(THIS) PURE; STDMETHOD(GetURLW)(THIS_ WCHAR* pwszURL, PDWORD pdwNumChars) PURE; STDMETHOD(GetURLA)(THIS_ CHAR* pszURL, PDWORD pdwNumChars) PURE; STDMETHOD(GetSP)(THIS_ GUID* pguidSP) PURE; STDMETHOD(GetUserData)(THIS_ LPVOID pvUserData, PDWORD pdwBufferSize) PURE; STDMETHOD(SetSP)(THIS_ const GUID* pguidSP) PURE; STDMETHOD(SetUserData)(THIS_ const void* pvUserData, DWORD dwDataSize) PURE; STDMETHOD(GetNumComponents)(THIS_ PDWORD pdwNumComponents) PURE; STDMETHOD(GetComponentByName)(THIS_ const WCHAR* pwszName, LPVOID pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType) PURE; STDMETHOD(GetComponentByIndex)(THIS_ DWORD dwComponentID, WCHAR* pwszName, PDWORD pdwNameLen, void* pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType) PURE; STDMETHOD(AddComponent)(THIS_ const WCHAR* pwszName, const void* lpvData, DWORD dwDataSize, DWORD dwDataType) PURE; STDMETHOD(GetDevice)(THIS_ GUID* pDevGuid) PURE; STDMETHOD(SetDevice)(THIS_ const GUID* devGuid) PURE; STDMETHOD(BuildFromDirectPlay4Address)(THIS_ LPVOID pvAddress, DWORD dwDataSize) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8Address_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay8Address_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay8Address_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay8Address methods ***/ #define IDirectPlay8Address_BuildFromURLW(p,a) (p)->lpVtbl->BuildFromURLW(p,a) #define IDirectPlay8Address_BuildFromURLA(p,a) (p)->lpVtbl->BuildFromURLA(p,a) #define IDirectPlay8Address_Duplicate(p,a) (p)->lpVtbl->Duplicate(p,a) #define IDirectPlay8Address_SetEqual(p,a) (p)->lpVtbl->SetEqual(p,a) #define IDirectPlay8Address_IsEqual(p,a) (p)->lpVtbl->IsEqual(p,a) #define IDirectPlay8Address_Clear(p) (p)->lpVtbl->Clear(p) #define IDirectPlay8Address_GetURLW(p,a,b) (p)->lpVtbl->GetURLW(p,a,b) #define IDirectPlay8Address_GetURLA(p,a,b) (p)->lpVtbl->GetURLA(p,a,b) #define IDirectPlay8Address_GetSP(p,a) (p)->lpVtbl->GetSP(p,a) #define IDirectPlay8Address_GetUserData(p,a,b) (p)->lpVtbl->GetUserData(p,a,b) #define IDirectPlay8Address_SetSP(p,a) (p)->lpVtbl->SetSP(p,a) #define IDirectPlay8Address_SetUserData(p,a,b) (p)->lpVtbl->SetUserData(p,a,b) #define IDirectPlay8Address_GetNumComponents(p,a) (p)->lpVtbl->GetNumComponents(p,a) #define IDirectPlay8Address_GetComponentByName(p,a,b,c,d) (p)->lpVtbl->GetComponentByName(p,a,b,c,d) #define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f) (p)->lpVtbl->GetComponentByIndex(p,a,b,c,d,e,f) #define IDirectPlay8Address_AddComponent(p,a,b,c,d) (p)->lpVtbl->AddComponent(p,a,b,c,d) #define IDirectPlay8Address_SetDevice(p,a) (p)->lpVtbl->SetDevice(p,a) #define IDirectPlay8Address_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b) (p)->lpVtbl->BuildFromDirectPlay4Address(p,a,b) #else /*** IUnknown methods ***/ #define IDirectPlay8Address_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8Address_AddRef(p) (p)->AddRef() #define IDirectPlay8Address_Release(p) (p)->Release() /*** IDirectPlay8Address methods ***/ #define IDirectPlay8Address_BuildFromURLW(p,a) (p)->BuildFromURLW(a) #define IDirectPlay8Address_BuildFromURLA(p,a) (p)->BuildFromURLA(a) #define IDirectPlay8Address_Duplicate(p,a) (p)->Duplicate(a) #define IDirectPlay8Address_SetEqual(p,a) (p)->SetEqual(a) #define IDirectPlay8Address_IsEqual(p,a) (p)->IsEqual(a) #define IDirectPlay8Address_Clear(p) (p)->Clear() #define IDirectPlay8Address_GetURLW(p,a,b) (p)->GetURLW(a,b) #define IDirectPlay8Address_GetURLA(p,a,b) (p)->GetURLA(a,b) #define IDirectPlay8Address_GetSP(p,a) (p)->GetSP(a) #define IDirectPlay8Address_GetUserData(p,a,b) (p)->GetUserData(a,b) #define IDirectPlay8Address_SetSP(p,a) (p)->SetSP(a) #define IDirectPlay8Address_SetUserData(p,a,b) (p)->SetUserData(a,b) #define IDirectPlay8Address_GetNumComponents(p,a) (p)->GetNumComponents(a) #define IDirectPlay8Address_GetComponentByName(p,a,b,c,d) (p)->GetComponentByName(a,b,c,d) #define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f) (p)->GetComponentByIndex(a,b,c,d,e,f) #define IDirectPlay8Address_AddComponent(p,a,b,c,d) (p)->AddComponent(a,b,c,d) #define IDirectPlay8Address_SetDevice(p,a) (p)->SetDevice(a) #define IDirectPlay8Address_GetDevice(p,a) (p)->GetDevice(a) #define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b) (p)->BuildFromDirectPlay4Address(a,b) #endif /***************************************************************************** * IDirectPlay8AddressIP interface */ #define INTERFACE IDirectPlay8AddressIP DECLARE_INTERFACE_(IDirectPlay8AddressIP,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8AddressIP methods ***/ STDMETHOD(BuildFromSockAddr)(THIS_ const SOCKADDR* pSockAddr) PURE; STDMETHOD(BuildAddress)(THIS_ const WCHAR* wszAddress, USHORT usPort) PURE; STDMETHOD(BuildLocalAddress)(THIS_ const GUID* pguidAdapter, USHORT usPort) PURE; STDMETHOD(GetSockAddress)(THIS_ SOCKADDR* pSockAddr, PDWORD) PURE; STDMETHOD(GetLocalAddress)(THIS_ GUID* pguidAdapter, USHORT* pusPort) PURE; STDMETHOD(GetAddress)(THIS_ WCHAR* wszAddress, PDWORD pdwAddressLength, USHORT* psPort) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8AddressIP_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(a,b) #define IDirectPlay8AddressIP_AddRef(p) (p)->lpVtbl->AddRef() #define IDirectPlay8AddressIP_Release(p) (p)->lpVtbl->Release() /*** IDirectPlay8AddressIP methods ***/ #define IDirectPlay8AddressIP_BuildFromSockAddr(p,a) (p)->lpVtbl->BuildFromSockAddr(a) #define IDirectPlay8AddressIP_BuildAddress(p,a,b) (p)->lpVtbl->BuildAddress(a,b) #define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b) (p)->lpVtbl->BuildLocalAddress(a,b) #define IDirectPlay8AddressIP_GetSockAddress(p,a,b) (p)->lpVtbl->GetSockAddress(a,b) #define IDirectPlay8AddressIP_GetLocalAddress(p,a,b) (p)->lpVtbl->GetLocalAddress(a,b) #define IDirectPlay8AddressIP_GetAddress(p,a,b,c) (p)->lpVtbl->GetAddress(a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlay8AddressIP_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8AddressIP_AddRef(p) (p)->AddRef() #define IDirectPlay8AddressIP_Release(p) (p)->Release() /*** IDirectPlay8AddressIP methods ***/ #define IDirectPlay8AddressIP_BuildFromSockAddr(p,a) (p)->BuildFromSockAddr(a) #define IDirectPlay8AddressIP_BuildAddress(p,a,b) (p)->BuildAddress(a,b) #define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b) (p)->BuildLocalAddress(a,b) #define IDirectPlay8AddressIP_GetSockAddress(p,a,b) (p)->GetSockAddress(a,b) #define IDirectPlay8AddressIP_GetLocalAddress(p,a,b) (p)->GetLocalAddress(a,b) #define IDirectPlay8AddressIP_GetAddress(p,a,b,c) (p)->GetAddress(a,b,c) #endif /* Export functions */ HRESULT WINAPI DirectPlay8AddressCreate(const GUID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/dplay.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DPLAY_H #define __WINE_DPLAY_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef LPVOID (*LPRGLPVOID)[]; typedef LPRGLPVOID PRGPVOID, LPRGPVOID, PRGLPVOID, PAPVOID, LPAPVOID, PALPVOID, LPALPVOID; #define VOL volatile typedef VOID * volatile LPVOIDV; /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(CLSID_DirectPlay,0xd1eb6d20, 0x8923, 0x11d0, 0x9d, 0x97, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb); DEFINE_GUID(IID_IDirectPlay, 0x5454e9a0, 0xdb65, 0x11ce, 0x92, 0x1c, 0x00, 0xaa, 0x00, 0x6c, 0x49, 0x72); typedef struct IDirectPlay *LPDIRECTPLAY; DEFINE_GUID(IID_IDirectPlay2, 0x2b74f7c0, 0x9154, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3); typedef struct IDirectPlay2 *LPDIRECTPLAY2; DEFINE_GUID(IID_IDirectPlay2A,0x9d460580, 0xa822, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82); typedef struct IDirectPlay2 IDirectPlay2A,*LPDIRECTPLAY2A; DEFINE_GUID(IID_IDirectPlay3, 0x133efe40, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb); typedef struct IDirectPlay3 *LPDIRECTPLAY3; DEFINE_GUID(IID_IDirectPlay3A,0x133efe41, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb); typedef struct IDirectPlay3 IDirectPlay3A,*LPDIRECTPLAY3A; DEFINE_GUID(IID_IDirectPlay4, 0xab1c530, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc); typedef struct IDirectPlay4 *LPDIRECTPLAY4; DEFINE_GUID(IID_IDirectPlay4A,0xab1c531, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc); typedef struct IDirectPlay4 IDirectPlay4A,*LPDIRECTPLAY4A; /* * GUIDS used by Service Providers shipped with DirectPlay * Use these to identify Service Provider returned by EnumConnections */ /* GUID for IPX service provider {685BC400-9D2C-11cf-A9CD-00AA006886E3} */ DEFINE_GUID(DPSPGUID_IPX, 0x685bc400, 0x9d2c, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3); /* GUID for TCP/IP service provider {36E95EE0-8577-11cf-960C-0080C7534E82} */ DEFINE_GUID(DPSPGUID_TCPIP, 0x36E95EE0, 0x8577, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82); /* GUID for Serial service provider {0F1D6860-88D9-11cf-9C4E-00A0C905425E} */ DEFINE_GUID(DPSPGUID_SERIAL, 0xf1d6860, 0x88d9, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); /* GUID for Modem service provider {44EAA760-CB68-11cf-9C4E-00A0C905425E} */ DEFINE_GUID(DPSPGUID_MODEM, 0x44eaa760, 0xcb68, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); /***************************************************************************** * Miscellaneous */ /* Return Values for Direct Play */ #define _FACDP 0x877 #define MAKE_DPHRESULT( code ) MAKE_HRESULT( 1, _FACDP, code ) #define DP_OK S_OK #define DPERR_ALREADYINITIALIZED MAKE_DPHRESULT( 5 ) #define DPERR_ACCESSDENIED MAKE_DPHRESULT( 10 ) #define DPERR_ACTIVEPLAYERS MAKE_DPHRESULT( 20 ) #define DPERR_BUFFERTOOSMALL MAKE_DPHRESULT( 30 ) #define DPERR_CANTADDPLAYER MAKE_DPHRESULT( 40 ) #define DPERR_CANTCREATEGROUP MAKE_DPHRESULT( 50 ) #define DPERR_CANTCREATEPLAYER MAKE_DPHRESULT( 60 ) #define DPERR_CANTCREATESESSION MAKE_DPHRESULT( 70 ) #define DPERR_CAPSNOTAVAILABLEYET MAKE_DPHRESULT( 80 ) #define DPERR_EXCEPTION MAKE_DPHRESULT( 90 ) #define DPERR_GENERIC E_FAIL #define DPERR_INVALIDFLAGS MAKE_DPHRESULT( 120 ) #define DPERR_INVALIDOBJECT MAKE_DPHRESULT( 130 ) #define DPERR_INVALIDPARAM E_INVALIDARG #define DPERR_INVALIDPARAMS DPERR_INVALIDPARAM #define DPERR_INVALIDPLAYER MAKE_DPHRESULT( 150 ) #define DPERR_INVALIDGROUP MAKE_DPHRESULT( 155 ) #define DPERR_NOCAPS MAKE_DPHRESULT( 160 ) #define DPERR_NOCONNECTION MAKE_DPHRESULT( 170 ) #define DPERR_NOMEMORY E_OUTOFMEMORY #define DPERR_OUTOFMEMORY DPERR_NOMEMORY #define DPERR_NOMESSAGES MAKE_DPHRESULT( 190 ) #define DPERR_NONAMESERVERFOUND MAKE_DPHRESULT( 200 ) #define DPERR_NOPLAYERS MAKE_DPHRESULT( 210 ) #define DPERR_NOSESSIONS MAKE_DPHRESULT( 220 ) #define DPERR_PENDING E_PENDING #define DPERR_SENDTOOBIG MAKE_DPHRESULT( 230 ) #define DPERR_TIMEOUT MAKE_DPHRESULT( 240 ) #define DPERR_UNAVAILABLE MAKE_DPHRESULT( 250 ) #define DPERR_UNSUPPORTED E_NOTIMPL #define DPERR_BUSY MAKE_DPHRESULT( 270 ) #define DPERR_USERCANCEL MAKE_DPHRESULT( 280 ) #define DPERR_NOINTERFACE E_NOINTERFACE #define DPERR_CANNOTCREATESERVER MAKE_DPHRESULT( 290 ) #define DPERR_PLAYERLOST MAKE_DPHRESULT( 300 ) #define DPERR_SESSIONLOST MAKE_DPHRESULT( 310 ) #define DPERR_UNINITIALIZED MAKE_DPHRESULT( 320 ) #define DPERR_NONEWPLAYERS MAKE_DPHRESULT( 330 ) #define DPERR_INVALIDPASSWORD MAKE_DPHRESULT( 340 ) #define DPERR_CONNECTING MAKE_DPHRESULT( 350 ) #define DPERR_CONNECTIONLOST MAKE_DPHRESULT( 360 ) #define DPERR_UNKNOWNMESSAGE MAKE_DPHRESULT( 370 ) #define DPERR_CANCELFAILED MAKE_DPHRESULT( 380 ) #define DPERR_INVALIDPRIORITY MAKE_DPHRESULT( 390 ) #define DPERR_NOTHANDLED MAKE_DPHRESULT( 400 ) #define DPERR_CANCELLED MAKE_DPHRESULT( 410 ) #define DPERR_ABORTED MAKE_DPHRESULT( 420 ) #define DPERR_BUFFERTOOLARGE MAKE_DPHRESULT( 1000 ) #define DPERR_CANTCREATEPROCESS MAKE_DPHRESULT( 1010 ) #define DPERR_APPNOTSTARTED MAKE_DPHRESULT( 1020 ) #define DPERR_INVALIDINTERFACE MAKE_DPHRESULT( 1030 ) #define DPERR_NOSERVICEPROVIDER MAKE_DPHRESULT( 1040 ) #define DPERR_UNKNOWNAPPLICATION MAKE_DPHRESULT( 1050 ) #define DPERR_NOTLOBBIED MAKE_DPHRESULT( 1070 ) #define DPERR_SERVICEPROVIDERLOADED MAKE_DPHRESULT( 1080 ) #define DPERR_ALREADYREGISTERED MAKE_DPHRESULT( 1090 ) #define DPERR_NOTREGISTERED MAKE_DPHRESULT( 1100 ) #define DPERR_AUTHENTICATIONFAILED MAKE_DPHRESULT( 2000 ) #define DPERR_CANTLOADSSPI MAKE_DPHRESULT( 2010 ) #define DPERR_ENCRYPTIONFAILED MAKE_DPHRESULT( 2020 ) #define DPERR_SIGNFAILED MAKE_DPHRESULT( 2030 ) #define DPERR_CANTLOADSECURITYPACKAGE MAKE_DPHRESULT( 2040 ) #define DPERR_ENCRYPTIONNOTSUPPORTED MAKE_DPHRESULT( 2050 ) #define DPERR_CANTLOADCAPI MAKE_DPHRESULT( 2060 ) #define DPERR_NOTLOGGEDIN MAKE_DPHRESULT( 2070 ) #define DPERR_LOGONDENIED MAKE_DPHRESULT( 2080 ) /* DPID - DirectPlay player and group ID */ typedef DWORD DPID, *LPDPID; /* DPID from whence originate messages - just an ID */ #define DPID_SYSMSG 0 /* DPID of system */ #define DPID_ALLPLAYERS 0 /* DPID of all players */ #define DPID_SERVERPLAYER 1 /* DPID of the server player */ #define DPID_UNKNOWN 0xFFFFFFFF /* Player ID is unknown */ /* DPCAPS - Used to obtain the capabilities of a DirectPlay object */ typedef struct tagDPCAPS { DWORD dwSize; /* Size of structure in bytes */ DWORD dwFlags; DWORD dwMaxBufferSize; DWORD dwMaxQueueSize; /* Obsolete. */ DWORD dwMaxPlayers; /* Maximum players/groups (local + remote) */ DWORD dwHundredBaud; /* Bandwidth in 100 bits per second units; * i.e. 24 is 2400, 96 is 9600, etc. */ DWORD dwLatency; /* Estimated latency; 0 = unknown */ DWORD dwMaxLocalPlayers; /* Maximum # of locally created players */ DWORD dwHeaderLength; /* Maximum header length in bytes */ DWORD dwTimeout; /* Service provider's suggested timeout value * This is how long DirectPlay will wait for * responses to system messages */ } DPCAPS, *LPDPCAPS; typedef struct tagDPNAME { DWORD dwSize; DWORD dwFlags; /* Not used must be 0 */ union /*playerShortName */ /* Player's Handle? */ { LPWSTR lpszShortName; LPSTR lpszShortNameA; } DUMMYUNIONNAME1; union /*playerLongName */ /* Player's formal/real name */ { LPWSTR lpszLongName; LPSTR lpszLongNameA; } DUMMYUNIONNAME2; } DPNAME, *LPDPNAME; #define DPLONGNAMELEN 52 #define DPSHORTNAMELEN 20 #define DPSESSIONNAMELEN 32 #define DPPASSWORDLEN 16 #define DPUSERRESERVED 16 typedef struct tagDPSESSIONDESC { DWORD dwSize; GUID guidSession; DWORD dwSession; DWORD dwMaxPlayers; DWORD dwCurrentPlayers; DWORD dwFlags; char szSessionName[ DPSESSIONNAMELEN ]; char szUserField[ DPUSERRESERVED ]; DWORD dwReserved1; char szPassword[ DPPASSWORDLEN ]; DWORD dwReserved2; DWORD dwUser1; DWORD dwUser2; DWORD dwUser3; DWORD dwUser4; } DPSESSIONDESC, *LPDPSESSIONDESC; typedef struct tagDPSESSIONDESC2 { DWORD dwSize; DWORD dwFlags; GUID guidInstance; GUID guidApplication; /* GUID of the DP application, GUID_NULL if * all applications! */ DWORD dwMaxPlayers; DWORD dwCurrentPlayers; /* (read only value) */ union /* Session name */ { LPWSTR lpszSessionName; LPSTR lpszSessionNameA; } DUMMYUNIONNAME1; union /* Optional password */ { LPWSTR lpszPassword; LPSTR lpszPasswordA; } DUMMYUNIONNAME2; DWORD dwReserved1; DWORD dwReserved2; DWORD dwUser1; /* For use by the application */ DWORD dwUser2; DWORD dwUser3; DWORD dwUser4; } DPSESSIONDESC2, *LPDPSESSIONDESC2; typedef const DPSESSIONDESC2* LPCDPSESSIONDESC2; #define DPOPEN_JOIN 0x00000001 #define DPOPEN_CREATE 0x00000002 #define DPOPEN_RETURNSTATUS DPENUMSESSIONS_RETURNSTATUS #define DPSESSION_NEWPLAYERSDISABLED 0x00000001 #define DPSESSION_MIGRATEHOST 0x00000004 #define DPSESSION_NOMESSAGEID 0x00000008 #define DPSESSION_JOINDISABLED 0x00000020 #define DPSESSION_KEEPALIVE 0x00000040 #define DPSESSION_NODATAMESSAGES 0x00000080 #define DPSESSION_SECURESERVER 0x00000100 #define DPSESSION_PRIVATE 0x00000200 #define DPSESSION_PASSWORDREQUIRED 0x00000400 #define DPSESSION_MULTICASTSERVER 0x00000800 #define DPSESSION_CLIENTSERVER 0x00001000 #define DPSESSION_DIRECTPLAYPROTOCOL 0x00002000 #define DPSESSION_NOPRESERVEORDER 0x00004000 #define DPSESSION_OPTIMIZELATENCY 0x00008000 typedef struct tagDPLCONNECTION { DWORD dwSize; DWORD dwFlags; LPDPSESSIONDESC2 lpSessionDesc; /* Ptr to session desc to use for connect */ LPDPNAME lpPlayerName; /* Ptr to player name structure */ GUID guidSP; /* GUID of Service Provider to use */ LPVOID lpAddress; /* Ptr to Address of Service Provider to use */ DWORD dwAddressSize; /* Size of address data */ } DPLCONNECTION, *LPDPLCONNECTION; /* DPLCONNECTION flags (for dwFlags) */ #define DPLCONNECTION_CREATESESSION DPOPEN_CREATE #define DPLCONNECTION_JOINSESSION DPOPEN_JOIN typedef struct tagDPCHAT { DWORD dwSize; DWORD dwFlags; union { /* Message string */ LPWSTR lpszMessage; /* Unicode */ LPSTR lpszMessageA; /* ANSI */ } DUMMYUNIONNAME; } DPCHAT, *LPDPCHAT; typedef struct { UINT len; PUCHAR pData; } SGBUFFER, *PSGBUFFER, *LPSGBUFFER; typedef struct tagDPSECURITYDESC { DWORD dwSize; /* Size of structure */ DWORD dwFlags; /* Not used. Must be zero. */ union { /* SSPI provider name */ LPWSTR lpszSSPIProvider; /* Unicode */ LPSTR lpszSSPIProviderA; /* ANSI */ } DUMMYUNIONNAME1; union { /* CAPI provider name */ LPWSTR lpszCAPIProvider; /* Unicode */ LPSTR lpszCAPIProviderA; /* ANSI */ } DUMMYUNIONNAME2; DWORD dwCAPIProviderType; /* Crypto Service Provider type */ DWORD dwEncryptionAlgorithm; /* Encryption Algorithm type */ } DPSECURITYDESC, *LPDPSECURITYDESC; typedef const DPSECURITYDESC *LPCDPSECURITYDESC; typedef struct tagDPCREDENTIALS { DWORD dwSize; /* Size of structure */ DWORD dwFlags; /* Not used. Must be zero. */ union { /* User name of the account */ LPWSTR lpszUsername; /* Unicode */ LPSTR lpszUsernameA; /* ANSI */ } DUMMYUNIONNAME1; union { /* Password of the account */ LPWSTR lpszPassword; /* Unicode */ LPSTR lpszPasswordA; /* ANSI */ } DUMMYUNIONNAME2; union { /* Domain name of the account */ LPWSTR lpszDomain; /* Unicode */ LPSTR lpszDomainA; /* ANSI */ } DUMMYUNIONNAME3; } DPCREDENTIALS, *LPDPCREDENTIALS; typedef const DPCREDENTIALS *LPCDPCREDENTIALS; typedef BOOL (CALLBACK *LPDPENUMDPCALLBACKW)( LPGUID lpguidSP, LPWSTR lpSPName, DWORD dwMajorVersion, DWORD dwMinorVersion, LPVOID lpContext); typedef BOOL (CALLBACK *LPDPENUMDPCALLBACKA)( LPGUID lpguidSP, LPSTR lpSPName, /* ptr to str w/ driver description */ DWORD dwMajorVersion, /* Major # of driver spec in lpguidSP */ DWORD dwMinorVersion, /* Minor # of driver spec in lpguidSP */ LPVOID lpContext); /* User given */ #ifndef __LPCGUID_DEFINED__ #define __LPCGUID_DEFINED__ typedef const GUID *LPCGUID; #endif typedef const DPNAME *LPCDPNAME; typedef BOOL (CALLBACK *LPDPENUMCONNECTIONSCALLBACK)( LPCGUID lpguidSP, LPVOID lpConnection, DWORD dwConnectionSize, LPCDPNAME lpName, DWORD dwFlags, LPVOID lpContext); typedef BOOL (CALLBACK *LPDPENUMSESSIONSCALLBACK)( LPDPSESSIONDESC lpDPSessionDesc, LPVOID lpContext, LPDWORD lpdwTimeOut, DWORD dwFlags); extern HRESULT WINAPI DirectPlayEnumerateA( LPDPENUMDPCALLBACKA, LPVOID ); extern HRESULT WINAPI DirectPlayEnumerateW( LPDPENUMDPCALLBACKW, LPVOID ); extern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY *lplpDP, IUnknown *pUnk ); typedef BOOL (CALLBACK *LPDPENUMPLAYERSCALLBACK)( DPID dpId, LPSTR lpFriendlyName, LPSTR lpFormalName, DWORD dwFlags, LPVOID lpContext ); typedef BOOL (CALLBACK *LPDPENUMPLAYERSCALLBACK2)( DPID dpId, DWORD dwPlayerType, LPCDPNAME lpName, DWORD dwFlags, LPVOID lpContext ); typedef BOOL (CALLBACK *LPDPENUMSESSIONSCALLBACK2)( LPCDPSESSIONDESC2 lpThisSD, LPDWORD lpdwTimeOut, DWORD dwFlags, LPVOID lpContext ); #define DPESC_TIMEDOUT 0x00000001 /***************************************************************************** * IDirectPlay interface */ #define INTERFACE IDirectPlay DECLARE_INTERFACE_(IDirectPlay,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay methods ***/ STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE; STDMETHOD(Close)(THIS) PURE; STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPSTR lpPlayerName, LPSTR, LPHANDLE) PURE; STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPSTR lpGroupName, LPSTR) PURE; STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE; STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE; STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE; STDMETHOD(EnableNewPlayers)(THIS_ BOOL) PURE; STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumGroups)(THIS_ DWORD, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumPlayers)(THIS_ DWORD, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK lpEnumSessionsCallback, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps) PURE; STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE; STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps) PURE; STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPSTR, LPDWORD, LPSTR, LPDWORD) PURE; STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE; STDMETHOD(Open)(THIS_ LPDPSESSIONDESC lpsd) PURE; STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(SaveSession)(THIS_ LPSTR) PURE; STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE; STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPSTR lpPlayerName, LPSTR) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay methods ***/ #define IDirectPlay_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b) #define IDirectPlay_Close(p) (p)->lpVtbl->Close(p) #define IDirectPlay_CreatePlayer(p,a,b,c,d) (p)->lpVtbl->CreatePlayer(p,a,b,c,d) #define IDirectPlay_CreateGroup(p,a,b,c) (p)->lpVtbl->CreateGroup(p,a,b,c) #define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b) #define IDirectPlay_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a) #define IDirectPlay_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a) #define IDirectPlay_EnableNewPlayers(p,a) (p)->lpVtbl->EnableNewPlayers(p,a) #define IDirectPlay_EnumGroupPlayers(p,a,b,c,d) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d) #define IDirectPlay_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d) #define IDirectPlay_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d) #define IDirectPlay_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e) #define IDirectPlay_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectPlay_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b) #define IDirectPlay_GetPlayerCaps(p,a,b) (p)->lpVtbl->GetPlayerCaps(p,a,b) #define IDirectPlay_GetPlayerName(p,a,b,c,d,e) (p)->lpVtbl->GetPlayerName(p,a,b,c,d,e) #define IDirectPlay_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectPlay_Open(p,a) (p)->lpVtbl->Open(p,a) #define IDirectPlay_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e) #define IDirectPlay_SaveSession(p,a) (p)->lpVtbl->SaveSession(p,a) #define IDirectPlay_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e) #define IDirectPlay_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlay_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay_AddRef(p) (p)->AddRef() #define IDirectPlay_Release(p) (p)->Release() /*** IDirectPlay methods ***/ #define IDirectPlay_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b) #define IDirectPlay_Close(p) (p)->Close() #define IDirectPlay_CreatePlayer(p,a,b,c,d) (p)->CreatePlayer(a,b,c,d) #define IDirectPlay_CreateGroup(p,a,b,c) (p)->CreateGroup(a,b,c) #define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b) #define IDirectPlay_DestroyPlayer(p,a) (p)->DestroyPlayer(a) #define IDirectPlay_DestroyGroup(p,a) (p)->DestroyGroup(a) #define IDirectPlay_EnableNewPlayers(p,a) (p)->EnableNewPlayers(a) #define IDirectPlay_EnumGroupPlayers(p,a,b,c,d) (p)->EnumGroupPlayers(a,b,c,d) #define IDirectPlay_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d) #define IDirectPlay_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d) #define IDirectPlay_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e) #define IDirectPlay_GetCaps(p,a) (p)->GetCaps(a) #define IDirectPlay_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b) #define IDirectPlay_GetPlayerCaps(p,a,b) (p)->GetPlayerCaps(a,b) #define IDirectPlay_GetPlayerName(p,a,b,c,d,e) (p)->GetPlayerName(a,b,c,d,e) #define IDirectPlay_Initialize(p,a) (p)->Initialize(a) #define IDirectPlay_Open(p,a) (p)->Open(a) #define IDirectPlay_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e) #define IDirectPlay_SaveSession(p,a) (p)->SaveSession(a) #define IDirectPlay_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e) #define IDirectPlay_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c) #endif /***************************************************************************** * IDirectPlay2 and IDirectPlay2A interface */ #define INTERFACE IDirectPlay2 DECLARE_INTERFACE_(IDirectPlay2,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay2 methods ***/ STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE; STDMETHOD(Close)(THIS) PURE; STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE; STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE; STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE; STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE; STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE; STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE; STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE; STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE; STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE; STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE; STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE; STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE; STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE; STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay2_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay2 methods ***/ #define IDirectPlay2_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b) #define IDirectPlay2_Close(p) (p)->lpVtbl->Close(p) #define IDirectPlay2_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) #define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f) #define IDirectPlay2_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b) #define IDirectPlay2_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a) #define IDirectPlay2_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a) #define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e) #define IDirectPlay2_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d) #define IDirectPlay2_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d) #define IDirectPlay2_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e) #define IDirectPlay2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectPlay2_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d) #define IDirectPlay2_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c) #define IDirectPlay2_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b) #define IDirectPlay2_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c) #define IDirectPlay2_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c) #define IDirectPlay2_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d) #define IDirectPlay2_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c) #define IDirectPlay2_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b) #define IDirectPlay2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectPlay2_Open(p,a,b) (p)->lpVtbl->Open(p,a,b) #define IDirectPlay2_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e) #define IDirectPlay2_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e) #define IDirectPlay2_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d) #define IDirectPlay2_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c) #define IDirectPlay2_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d) #define IDirectPlay2_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c) #define IDirectPlay2_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b) #else /*** IUnknown methods ***/ #define IDirectPlay2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay2_AddRef(p) (p)->AddRef() #define IDirectPlay2_Release(p) (p)->Release() /*** IDirectPlay2 methods ***/ #define IDirectPlay2_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b) #define IDirectPlay2_Close(p) (p)->Close() #define IDirectPlay2_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) #define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f) #define IDirectPlay2_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b) #define IDirectPlay2_DestroyGroup(p,a) (p)->DestroyGroup(a) #define IDirectPlay2_DestroyPlayer(p,a) (p)->DestroyPlayer(a) #define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e) #define IDirectPlay2_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d) #define IDirectPlay2_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d) #define IDirectPlay2_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e) #define IDirectPlay2_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectPlay2_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d) #define IDirectPlay2_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c) #define IDirectPlay2_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b) #define IDirectPlay2_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c) #define IDirectPlay2_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c) #define IDirectPlay2_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d) #define IDirectPlay2_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c) #define IDirectPlay2_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b) #define IDirectPlay2_Initialize(p,a) (p)->Initialize(a) #define IDirectPlay2_Open(p,a,b) (p)->Open(a,b) #define IDirectPlay2_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e) #define IDirectPlay2_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e) #define IDirectPlay2_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d) #define IDirectPlay2_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c) #define IDirectPlay2_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d) #define IDirectPlay2_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c) #define IDirectPlay2_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b) #endif /***************************************************************************** * IDirectPlay3 and IDirectPlay3A interface */ #define INTERFACE IDirectPlay3 DECLARE_INTERFACE_(IDirectPlay3,IDirectPlay2) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay2 methods ***/ STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE; STDMETHOD(Close)(THIS) PURE; STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE; STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE; STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE; STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE; STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE; STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE; STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE; STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE; STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE; STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE; STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE; STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE; STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE; STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE; /*** IDirectPlay3 methods ***/ STDMETHOD(AddGroupToGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE; STDMETHOD(CreateGroupInGroup)(THIS_ DPID idParentGroup, LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(DeleteGroupFromGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE; STDMETHOD(EnumConnections)(THIS_ LPCGUID lpguidApplication, LPDPENUMCONNECTIONSCALLBACK lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumGroupsInGroup)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(InitializeConnection)(THIS_ LPVOID lpConnection, DWORD dwFlags) PURE; STDMETHOD(SecureOpen)(THIS_ LPCDPSESSIONDESC2 lpsd, DWORD dwFlags, LPCDPSECURITYDESC lpSecurity, LPCDPCREDENTIALS lpCredentials) PURE; STDMETHOD(SendChatMessage)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPDPCHAT lpChatMessage) PURE; STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPDPLCONNECTION lpConnection) PURE; STDMETHOD(StartSession)(THIS_ DWORD dwFlags, DPID idGroup) PURE; STDMETHOD(GetGroupFlags)(THIS_ DPID idGroup, LPDWORD lpdwFlags) PURE; STDMETHOD(GetGroupParent)(THIS_ DPID idGroup, LPDPID lpidParent) PURE; STDMETHOD(GetPlayerAccount)(THIS_ DPID idPlayer, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay3_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay2 methods ***/ #define IDirectPlay3_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b) #define IDirectPlay3_Close(p) (p)->lpVtbl->Close(p) #define IDirectPlay3_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) #define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f) #define IDirectPlay3_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b) #define IDirectPlay3_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a) #define IDirectPlay3_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a) #define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e) #define IDirectPlay3_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d) #define IDirectPlay3_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d) #define IDirectPlay3_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e) #define IDirectPlay3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectPlay3_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d) #define IDirectPlay3_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c) #define IDirectPlay3_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b) #define IDirectPlay3_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c) #define IDirectPlay3_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c) #define IDirectPlay3_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d) #define IDirectPlay3_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c) #define IDirectPlay3_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b) #define IDirectPlay3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectPlay3_Open(p,a,b) (p)->lpVtbl->Open(p,a,b) #define IDirectPlay3_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e) #define IDirectPlay3_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e) #define IDirectPlay3_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d) #define IDirectPlay3_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c) #define IDirectPlay3_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d) #define IDirectPlay3_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c) #define IDirectPlay3_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b) /*** IDirectPlay3 methods ***/ #define IDirectPlay3_AddGroupToGroup(p,a,b) (p)->lpVtbl->AddGroupToGroup(p,a,b) #define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f) #define IDirectPlay3_DeleteGroupFromGroup(p,a,b) (p)->lpVtbl->DeleteGroupFromGroup(p,a,b) #define IDirectPlay3_EnumConnections(p,a,b,c,d) (p)->lpVtbl->EnumConnections(p,a,b,c,d) #define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e) #define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d) #define IDirectPlay3_InitializeConnection(p,a,b) (p)->lpVtbl->InitializeConnection(p,a,b) #define IDirectPlay3_SecureOpen(p,a,b,c,d) (p)->lpVtbl->SecureOpen(p,a,b,c,d) #define IDirectPlay3_SendChatMessage(p,a,b,c,d) (p)->lpVtbl->SendChatMessage(p,a,b,c,d) #define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c) #define IDirectPlay3_StartSession(p,a,b) (p)->lpVtbl->StartSession(p,a,b) #define IDirectPlay3_GetGroupFlags(p,a,b) (p)->lpVtbl->GetGroupFlags(p,a,b) #define IDirectPlay3_GetGroupParent(p,a,b) (p)->lpVtbl->GetGroupParent(p,a,b) #define IDirectPlay3_GetPlayerAccount(p,a,b,c,d) (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d) #define IDirectPlay3_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b) #else /*** IUnknown methods ***/ #define IDirectPlay3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay3_AddRef(p) (p)->AddRef() #define IDirectPlay3_Release(p) (p)->Release() /*** IDirectPlay2 methods ***/ #define IDirectPlay3_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b) #define IDirectPlay3_Close(p) (p)->Close() #define IDirectPlay3_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) #define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f) #define IDirectPlay3_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b) #define IDirectPlay3_DestroyGroup(p,a) (p)->DestroyGroup(a) #define IDirectPlay3_DestroyPlayer(p,a) (p)->DestroyPlayer(a) #define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e) #define IDirectPlay3_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d) #define IDirectPlay3_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d) #define IDirectPlay3_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e) #define IDirectPlay3_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectPlay3_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d) #define IDirectPlay3_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c) #define IDirectPlay3_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b) #define IDirectPlay3_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c) #define IDirectPlay3_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c) #define IDirectPlay3_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d) #define IDirectPlay3_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c) #define IDirectPlay3_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b) #define IDirectPlay3_Initialize(p,a) (p)->Initialize(a) #define IDirectPlay3_Open(p,a,b) (p)->Open(a,b) #define IDirectPlay3_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e) #define IDirectPlay3_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e) #define IDirectPlay3_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d) #define IDirectPlay3_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c) #define IDirectPlay3_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d) #define IDirectPlay3_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c) #define IDirectPlay3_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b) /*** IDirectPlay3 methods ***/ #define IDirectPlay3_AddGroupToGroup(p,a,b) (p)->AddGroupToGroup(a,b) #define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->CreateGroupInGroup(a,b,c,d,e,f) #define IDirectPlay3_DeleteGroupFromGroup(p,a,b) (p)->DeleteGroupFromGroup(a,b) #define IDirectPlay3_EnumConnections(p,a,b,c,d) (p)->EnumConnections(a,b,c,d) #define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->EnumGroupsInGroup(a,b,c,d,e) #define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d) #define IDirectPlay3_InitializeConnection(p,a,b) (p)->InitializeConnection(a,b) #define IDirectPlay3_SecureOpen(p,a,b,c,d) (p)->SecureOpen(a,b,c,d) #define IDirectPlay3_SendChatMessage(p,a,b,c,d) (p)->SendChatMessage(a,b,c,d) #define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->SetGroupConnectionSettings(a,b,c) #define IDirectPlay3_StartSession(p,a,b) (p)->StartSession(a,b) #define IDirectPlay3_GetGroupFlags(p,a,b) (p)->GetGroupFlags(a,b) #define IDirectPlay3_GetGroupParent(p,a,b) (p)->GetGroupParent(a,b) #define IDirectPlay3_GetPlayerAccount(p,a,b,c,d) (p)->GetPlayerAccount(a,b,c,d) #define IDirectPlay3_GetPlayerFlags(p,a,b) (p)->GetPlayerFlags(a,b) #endif /***************************************************************************** * IDirectPlay4 and IDirectPlay4A interface */ #define INTERFACE IDirectPlay4 DECLARE_INTERFACE_(IDirectPlay4,IDirectPlay3) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay2 methods ***/ STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE; STDMETHOD(Close)(THIS) PURE; STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE; STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE; STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE; STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE; STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE; STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE; STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE; STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE; STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE; STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE; STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE; STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE; STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE; STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE; /*** IDirectPlay3 methods ***/ STDMETHOD(AddGroupToGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE; STDMETHOD(CreateGroupInGroup)(THIS_ DPID idParentGroup, LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE; STDMETHOD(DeleteGroupFromGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE; STDMETHOD(EnumConnections)(THIS_ LPCGUID lpguidApplication, LPDPENUMCONNECTIONSCALLBACK lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(EnumGroupsInGroup)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE; STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(InitializeConnection)(THIS_ LPVOID lpConnection, DWORD dwFlags) PURE; STDMETHOD(SecureOpen)(THIS_ LPCDPSESSIONDESC2 lpsd, DWORD dwFlags, LPCDPSECURITYDESC lpSecurity, LPCDPCREDENTIALS lpCredentials) PURE; STDMETHOD(SendChatMessage)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPDPCHAT lpChatMessage) PURE; STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPDPLCONNECTION lpConnection) PURE; STDMETHOD(StartSession)(THIS_ DWORD dwFlags, DPID idGroup) PURE; STDMETHOD(GetGroupFlags)(THIS_ DPID idGroup, LPDWORD lpdwFlags) PURE; STDMETHOD(GetGroupParent)(THIS_ DPID idGroup, LPDPID lpidParent) PURE; STDMETHOD(GetPlayerAccount)(THIS_ DPID idPlayer, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE; STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwFlags) PURE; /*** IDirectPlay4 methods ***/ STDMETHOD(GetGroupOwner)(THIS_ DPID , LPDPID ) PURE; STDMETHOD(SetGroupOwner)(THIS_ DPID , DPID ) PURE; STDMETHOD(SendEx)(THIS_ DPID , DPID , DWORD , LPVOID , DWORD , DWORD , DWORD , LPVOID , LPDWORD ) PURE; STDMETHOD(GetMessageQueue)(THIS_ DPID , DPID , DWORD , LPDWORD , LPDWORD ) PURE; STDMETHOD(CancelMessage)(THIS_ DWORD , DWORD ) PURE; STDMETHOD(CancelPriority)(THIS_ DWORD , DWORD , DWORD ) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlayX_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlayX_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlayX_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay2 methods ***/ #define IDirectPlayX_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b) #define IDirectPlayX_Close(p) (p)->lpVtbl->Close(p) #define IDirectPlayX_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) #define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f) #define IDirectPlayX_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b) #define IDirectPlayX_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a) #define IDirectPlayX_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a) #define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e) #define IDirectPlayX_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d) #define IDirectPlayX_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d) #define IDirectPlayX_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e) #define IDirectPlayX_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectPlayX_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d) #define IDirectPlayX_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c) #define IDirectPlayX_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b) #define IDirectPlayX_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c) #define IDirectPlayX_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c) #define IDirectPlayX_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d) #define IDirectPlayX_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c) #define IDirectPlayX_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b) #define IDirectPlayX_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectPlayX_Open(p,a,b) (p)->lpVtbl->Open(p,a,b) #define IDirectPlayX_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e) #define IDirectPlayX_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e) #define IDirectPlayX_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d) #define IDirectPlayX_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c) #define IDirectPlayX_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d) #define IDirectPlayX_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c) #define IDirectPlayX_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b) /*** IDirectPlay3 methods ***/ #define IDirectPlayX_AddGroupToGroup(p,a,b) (p)->lpVtbl->AddGroupToGroup(p,a,b) #define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f) #define IDirectPlayX_DeleteGroupFromGroup(p,a,b) (p)->lpVtbl->DeleteGroupFromGroup(p,a,b) #define IDirectPlayX_EnumConnections(p,a,b,c,d) (p)->lpVtbl->EnumConnections(p,a,b,c,d) #define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e) #define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d) #define IDirectPlayX_InitializeConnection(p,a,b) (p)->lpVtbl->InitializeConnection(p,a,b) #define IDirectPlayX_SecureOpen(p,a,b,c,d) (p)->lpVtbl->SecureOpen(p,a,b,c,d) #define IDirectPlayX_SendChatMessage(p,a,b,c,d) (p)->lpVtbl->SendChatMessage(p,a,b,c,d) #define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c) #define IDirectPlayX_StartSession(p,a,b) (p)->lpVtbl->StartSession(p,a,b) #define IDirectPlayX_GetGroupFlags(p,a,b) (p)->lpVtbl->GetGroupFlags(p,a,b) #define IDirectPlayX_GetGroupParent(p,a,b) (p)->lpVtbl->GetGroupParent(p,a,b) #define IDirectPlayX_GetPlayerAccount(p,a,b,c,d) (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d) #define IDirectPlayX_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b) /*** IDirectPlay4 methods ***/ #define IDirectPlayX_GetGroupOwner(p,a,b) (p)->lpVtbl->GetGroupOwner(p,a,b) #define IDirectPlayX_SetGroupOwner(p,a,b) (p)->lpVtbl->SetGroupOwner(p,a,b) #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) #define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e) (p)->lpVtbl->GetMessageQueue(p,a,b,c,d,e) #define IDirectPlayX_CancelMessage(p,a,b) (p)->lpVtbl->CancelMessage(p,a,b) #define IDirectPlayX_CancelPriority(p,a,b,c) (p)->lpVtbl->CancelPriority(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlayX_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlayX_AddRef(p) (p)->AddRef() #define IDirectPlayX_Release(p) (p)->Release() /*** IDirectPlay2 methods ***/ #define IDirectPlayX_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b) #define IDirectPlayX_Close(p) (p)->Close() #define IDirectPlayX_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) #define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f) #define IDirectPlayX_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b) #define IDirectPlayX_DestroyGroup(p,a) (p)->DestroyGroup(a) #define IDirectPlayX_DestroyPlayer(p,a) (p)->DestroyPlayer(a) #define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e) #define IDirectPlayX_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d) #define IDirectPlayX_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d) #define IDirectPlayX_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e) #define IDirectPlayX_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectPlayX_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d) #define IDirectPlayX_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c) #define IDirectPlayX_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b) #define IDirectPlayX_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c) #define IDirectPlayX_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c) #define IDirectPlayX_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d) #define IDirectPlayX_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c) #define IDirectPlayX_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b) #define IDirectPlayX_Initialize(p,a) (p)->Initialize(a) #define IDirectPlayX_Open(p,a,b) (p)->Open(a,b) #define IDirectPlayX_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e) #define IDirectPlayX_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e) #define IDirectPlayX_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d) #define IDirectPlayX_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c) #define IDirectPlayX_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d) #define IDirectPlayX_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c) #define IDirectPlayX_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b) /*** IDirectPlay3 methods ***/ #define IDirectPlayX_AddGroupToGroup(p,a,b) (p)->AddGroupToGroup(a,b) #define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->CreateGroupInGroup(a,b,c,d,e,f) #define IDirectPlayX_DeleteGroupFromGroup(p,a,b) (p)->DeleteGroupFromGroup(a,b) #define IDirectPlayX_EnumConnections(p,a,b,c,d) (p)->EnumConnections(a,b,c,d) #define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e) (p)->EnumGroupsInGroup(a,b,c,d,e) #define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d) #define IDirectPlayX_InitializeConnection(p,a,b) (p)->InitializeConnection(a,b) #define IDirectPlayX_SecureOpen(p,a,b,c,d) (p)->SecureOpen(a,b,c,d) #define IDirectPlayX_SendChatMessage(p,a,b,c,d) (p)->SendChatMessage(a,b,c,d) #define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c) (p)->SetGroupConnectionSettings(a,b,c) #define IDirectPlayX_StartSession(p,a,b) (p)->StartSession(a,b) #define IDirectPlayX_GetGroupFlags(p,a,b) (p)->GetGroupFlags(a,b) #define IDirectPlayX_GetGroupParent(p,a,b) (p)->GetGroupParent(a,b) #define IDirectPlayX_GetPlayerAccount(p,a,b,c,d) (p)->GetPlayerAccount(a,b,c,d) #define IDirectPlayX_GetPlayerFlags(p,a,b) (p)->GetPlayerFlags(a,b) /*** IDirectPlay4 methods ***/ #define IDirectPlayX_GetGroupOwner(p,a,b) (p)->GetGroupOwner(a,b) #define IDirectPlayX_SetGroupOwner(p,a,b) (p)->SetGroupOwner(a,b) #define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i) (p)->SendEx(a,b,c,d,e,f,g,h,i) #define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e) (p)->GetMessageQueue(a,b,c,d,e) #define IDirectPlayX_CancelMessage(p,a,b) (p)->CancelMessage(a,b) #define IDirectPlayX_CancelPriority(p,a,b,c) (p)->CancelPriority(a,b,c) #endif /* For DirectPlay::EnumConnections */ #define DPCONNECTION_DIRECTPLAY 0x00000001 #define DPCONNECTION_DIRECTPLAYLOBBY 0x00000002 /* For DirectPlay::EnumPlayers and DirectPlay::EnumGroups */ #define DPENUMPLAYERS_ALL 0x00000000 #define DPENUMPLAYERS_LOCAL 0x00000008 #define DPENUMPLAYERS_REMOTE 0x00000010 #define DPENUMPLAYERS_GROUP 0x00000020 #define DPENUMPLAYERS_SESSION 0x00000080 #define DPENUMPLAYERS_SERVERPLAYER 0x00000100 #define DPENUMPLAYERS_SPECTATOR 0x00000200 #define DPENUMPLAYERS_OWNER 0x00002000 #define DPENUMGROUPS_ALL DPENUMPLAYERS_ALL #define DPENUMGROUPS_LOCAL DPENUMPLAYERS_LOCAL #define DPENUMGROUPS_REMOTE DPENUMPLAYERS_REMOTE #define DPENUMGROUPS_SESSION DPENUMPLAYERS_SESSION #define DPENUMGROUPS_SHORTCUT 0x00000400 #define DPENUMGROUPS_STAGINGAREA 0x00000800 #define DPENUMGROUPS_HIDDEN 0x00001000 /* For DirectPlay::CreatePlayer */ #define DPPLAYER_SERVERPLAYER DPENUMPLAYERS_SERVERPLAYER #define DPPLAYER_SPECTATOR DPENUMPLAYERS_SPECTATOR #define DPPLAYER_LOCAL DPENUMPLAYERS_LOCAL #define DPPLAYER_OWNER DPENUMPLAYERS_OWNER /* For DirectPlay::CreateGroup */ #define DPGROUP_STAGINGAREA DPENUMGROUPS_STAGINGAREA #define DPGROUP_LOCAL DPENUMGROUPS_LOCAL #define DPGROUP_HIDDEN DPENUMGROUPS_HIDDEN /* For DirectPlay::EnumSessions */ #define DPENUMSESSIONS_AVAILABLE 0x00000001 #define DPENUMSESSIONS_ALL 0x00000002 #define DPENUMSESSIONS_ASYNC 0x00000010 #define DPENUMSESSIONS_STOPASYNC 0x00000020 #define DPENUMSESSIONS_PASSWORDREQUIRED 0x00000040 #define DPENUMSESSIONS_RETURNSTATUS 0x00000080 /* For DirectPlay::GetCaps and DirectPlay::GetPlayerCaps */ #define DPGETCAPS_GUARANTEED 0x00000001 /* For DirectPlay::GetGroupData and DirectPlay::GetPlayerData */ #define DPGET_REMOTE 0x00000000 #define DPGET_LOCAL 0x00000001 /* For DirectPlay::Receive */ #define DPRECEIVE_ALL 0x00000001 #define DPRECEIVE_TOPLAYER 0x00000002 #define DPRECEIVE_FROMPLAYER 0x00000004 #define DPRECEIVE_PEEK 0x00000008 /* For DirectPlay::Send */ #define DPSEND_NONGUARANTEED 0x00000000 #define DPSEND_GUARANTEED 0x00000001 #define DPSEND_HIGHPRIORITY 0x00000002 #define DPSEND_OPENSTREAM 0x00000008 #define DPSEND_CLOSESTREAM 0x00000010 #define DPSEND_SIGNED 0x00000020 #define DPSEND_ENCRYPTED 0x00000040 #define DPSEND_LOBBYSYSTEMMESSAGE 0x00000080 #define DPSEND_ASYNC 0x00000200 #define DPSEND_NOSENDCOMPLETEMSG 0x00000400 #define DPSEND_MAX_PRI 0x0000FFFF #define DPSEND_MAX_PRIORITY DPSEND_MAX_PRI /* For DirectPlay::SetGroupData, DirectPlay::SetGroupName, * DirectPlay::SetPlayerData, DirectPlay::SetPlayerName and * DirectPlay::SetSessionDesc. */ #define DPSET_REMOTE 0x00000000 #define DPSET_LOCAL 0x00000001 #define DPSET_GUARANTEED 0x00000002 /* For DirectPlay::GetMessageQueue */ #define DPMESSAGEQUEUE_SEND 0x00000001 #define DPMESSAGEQUEUE_RECEIVE 0x00000002 /* DirectPlay::Connect */ #define DPCONNECT_RETURNSTATUS (DPENUMSESSIONS_RETURNSTATUS) /* DirectPlay::GetCaps and DirectPlay::GetPlayerCaps */ #define DPCAPS_ISHOST 0x00000002 #define DPCAPS_GROUPOPTIMIZED 0x00000008 #define DPCAPS_KEEPALIVEOPTIMIZED 0x00000010 #define DPCAPS_GUARANTEEDOPTIMIZED 0x00000020 #define DPCAPS_GUARANTEEDSUPPORTED 0x00000040 #define DPCAPS_SIGNINGSUPPORTED 0x00000080 #define DPCAPS_ENCRYPTIONSUPPORTED 0x00000100 #define DPPLAYERCAPS_LOCAL 0x00000800 #define DPCAPS_ASYNCCANCELSUPPORTED 0x00001000 #define DPCAPS_ASYNCCANCELALLSUPPORTED 0x00002000 #define DPCAPS_SENDTIMEOUTSUPPORTED 0x00004000 #define DPCAPS_SENDPRIORITYSUPPORTED 0x00008000 #define DPCAPS_ASYNCSUPPORTED 0x00010000 /** DirectPlay system messages **/ /* A new player or group has been created in the session */ #define DPSYS_CREATEPLAYERORGROUP 0x0003 /* A player or group has been deleted from the session */ #define DPSYS_DESTROYPLAYERORGROUP 0x0005 /* A player has been added to a group */ #define DPSYS_ADDPLAYERTOGROUP 0x0007 /* A player has been deleted from a group */ #define DPSYS_DELETEPLAYERFROMGROUP 0x0021 /* Session lost for this object - ie lost contact with all players */ #define DPSYS_SESSIONLOST 0x0031 /* The current host has left the session */ #define DPSYS_HOST 0x0101 /* Player or group data has changed */ #define DPSYS_SETPLAYERORGROUPDATA 0x0102 /* The name of a player or group has changed */ #define DPSYS_SETPLAYERORGROUPNAME 0x0103 /* The session description has changed */ #define DPSYS_SETSESSIONDESC 0x0104 /* A group has been added to a group */ #define DPSYS_ADDGROUPTOGROUP 0x0105 /* A group has been deleted from a group */ #define DPSYS_DELETEGROUPFROMGROUP 0x0106 /* A secure player to player message has arrived */ #define DPSYS_SECUREMESSAGE 0x0107 /* Start a new session */ #define DPSYS_STARTSESSION 0x0108 /* A chat message has arrived */ #define DPSYS_CHAT 0x0109 /* The owner of a group has changed */ #define DPSYS_SETGROUPOWNER 0x010A /* An async send is done (finished normally, failed or cancelled) */ #define DPSYS_SENDCOMPLETE 0x010d /** DirectPlay System Messages **/ #define DPPLAYERTYPE_GROUP 0x00000000 #define DPPLAYERTYPE_PLAYER 0x00000001 /* NOTE: DPMSG_HOST and DPMSG_GENERIC share the same format */ typedef struct tagDPMSG_GENERIC { DWORD dwType; /* Use message type as described above */ } DPMSG_GENERIC, *LPDPMSG_GENERIC, DPMSG_HOST, *LPDPMSG_HOST, DPMSG_SESSIONLOST, *LPDPMSG_SESSIONLOST; typedef struct tagDPMSG_CREATEPLAYERORGROUP { DWORD dwType; /* Use message type as described above */ DWORD dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */ DPID dpId; /* ID of the player/group */ DWORD dwCurrentPlayers; /* Current number of players/groups in session */ LPVOID lpData; /* Pointer to data */ DWORD dwDataSize; /* Size of data */ DPNAME dpnName; /* Name info */ /* dpIdParent and dwFlags are only valid in DirectPlay3 and later. What * does that mean about the message size before? -PH */ DPID dpIdParent; /* id of parent group */ DWORD dwFlags; /* Flags for the player/group */ } DPMSG_CREATEPLAYERORGROUP, *LPDPMSG_CREATEPLAYERORGROUP; typedef struct tagDPMSG_DESTROYPLAYERORGROUP { DWORD dwType; /* Use message type as described above */ DWORD dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */ DPID dpId; /* ID of player/group to be deleted */ LPVOID lpLocalData; /* Pointer to local data */ DWORD dwLocalDataSize; /* Sizeof local data */ LPVOID lpRemoteData; /* Pointer to remote data */ DWORD dwRemoteDataSize; /* Sizeof remote data */ /* dpnName, dpIdParent and dwFlags are only valid in DirectPlay3 and later. What * does that mean about the message size before? -PH */ DPNAME dpnName; /* Name info */ DPID dpIdParent; /* id of parent group */ DWORD dwFlags; /* Flags for the player/group */ } DPMSG_DESTROYPLAYERORGROUP, *LPDPMSG_DESTROYPLAYERORGROUP; /* NOTE: DPMSG_ADDPLAYERTOGROUP and DPMSG_DELETEPLAYERFROMGROUP are the same */ typedef struct tagDPMSG_ADDPLAYERTOGROUP { DWORD dwType; /* Use message type as described above */ DPID dpIdGroup; /* Group ID to add player into */ DPID dpIdPlayer; /* ID of player to add */ } DPMSG_ADDPLAYERTOGROUP, *LPDPMSG_ADDPLAYERTOGROUP, DPMSG_DELETEPLAYERFROMGROUP, *LPDPMSG_DELETEPLAYERFROMGROUP; /* NOTE: DPMSG_ADDGROUPTOGROUP and DPMSG_DELETEGROUPFROMGROUP are the same */ typedef struct tagDPMSG_ADDGROUPTOGROUP { DWORD dwType; /* Use message type as described above */ DPID dpIdParentGroup; /* Group ID to add group into */ DPID dpIdGroup; /* ID of group to add */ } DPMSG_ADDGROUPTOGROUP, *LPDPMSG_ADDGROUPTOGROUP, DPMSG_DELETEGROUPFROMGROUP, *LPDPMSG_DELETEGROUPFROMGROUP; typedef struct tagDPMSG_SETPLAYERORGROUPDATA { DWORD dwType; /* Use message type as described above */ DWORD dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */ DPID dpId; /* ID of player/group */ LPVOID lpData; /* Pointer to data */ DWORD dwDataSize; /* Size of data */ } DPMSG_SETPLAYERORGROUPDATA, *LPDPMSG_SETPLAYERORGROUPDATA; typedef struct tagDPMSG_SETPLAYERORGROUPNAME { DWORD dwType; /* Use message type as described above */ DWORD dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */ DPID dpId; /* ID of player/group */ DPNAME dpnName; /* New name */ } DPMSG_SETPLAYERORGROUPNAME, *LPDPMSG_SETPLAYERORGROUPNAME; typedef struct tagDPMSG_SETSESSIONDESC { DWORD dwType; /* Use message type as described above */ DPSESSIONDESC2 dpDesc; /* New session desc */ } DPMSG_SETSESSIONDESC, *LPDPMSG_SETSESSIONDESC; typedef struct tagDPMSG_SECUREMESSAGE { DWORD dwType; /* Use message type as described above */ DWORD dwFlags; /* Signed/Encrypted */ DPID dpIdFrom; /* ID of from player */ LPVOID lpData; /* Message sent */ DWORD dwDataSize; /* Size of message */ } DPMSG_SECUREMESSAGE, *LPDPMSG_SECUREMESSAGE; typedef struct tagDPMSG_STARTSESSION { DWORD dwType; /* Use message type as described above */ LPDPLCONNECTION lpConn; /* DPLCONNECTION structure */ } DPMSG_STARTSESSION, *LPDPMSG_STARTSESSION; typedef struct tagDPMSG_CHAT { DWORD dwType; /* Use message type as described above */ DWORD dwFlags; /* Message flags */ DPID idFromPlayer; /* ID of sender */ DPID idToPlayer; /* ID of who msg is for */ DPID idToGroup; /* ID of what group msg is for */ LPDPCHAT lpChat; /* Chat message */ } DPMSG_CHAT, *LPDPMSG_CHAT; typedef struct tagDPMSG_SETGROUPOWNER { DWORD dwType; /* Use message type as described above */ DPID idGroup; /* Group ID */ DPID idNewOwner; /* ID of player who now owns group */ DPID idOldOwner; /* ID of player who used to own group */ } DPMSG_SETGROUPOWNER, *LPDPMSG_SETGROUPOWNER; typedef struct { DWORD dwType; /* Use message type as described above */ DPID idFrom; /* ID from */ DPID idTo; /* ID to */ DWORD dwFlags; DWORD dwPriority; DWORD dwTimeout; LPVOID lpvContext; DWORD dwMsgID; HRESULT hr; DWORD dwSendTime; /* When sent ? */ } DPMSG_SENDCOMPLETE, *LPDPMSG_SENDCOMPLETE; #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_DPLAY_H */ ================================================ FILE: wine/windows/dplay8.h ================================================ /* * Copyright (C) 2003-2005 Raphael Junqueira * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DPLAY8_H #define __WINE_DPLAY8_H #include #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef HRESULT (WINAPI *PFNDPNMESSAGEHANDLER)(PVOID, DWORD, PVOID); typedef DWORD DPNID, *PDPNID; typedef DWORD DPNHANDLE, *PDPNHANDLE; /***************************************************************************** * DirectPlay8 Message Id */ #define DPN_MSGID_OFFSET 0xFFFF0000 #define DPN_MSGID_ADD_PLAYER_TO_GROUP (DPN_MSGID_OFFSET | 0x0001) #define DPN_MSGID_APPLICATION_DESC (DPN_MSGID_OFFSET | 0x0002) #define DPN_MSGID_ASYNC_OP_COMPLETE (DPN_MSGID_OFFSET | 0x0003) #define DPN_MSGID_CLIENT_INFO (DPN_MSGID_OFFSET | 0x0004) #define DPN_MSGID_CONNECT_COMPLETE (DPN_MSGID_OFFSET | 0x0005) #define DPN_MSGID_CREATE_GROUP (DPN_MSGID_OFFSET | 0x0006) #define DPN_MSGID_CREATE_PLAYER (DPN_MSGID_OFFSET | 0x0007) #define DPN_MSGID_DESTROY_GROUP (DPN_MSGID_OFFSET | 0x0008) #define DPN_MSGID_DESTROY_PLAYER (DPN_MSGID_OFFSET | 0x0009) #define DPN_MSGID_ENUM_HOSTS_QUERY (DPN_MSGID_OFFSET | 0x000A) #define DPN_MSGID_ENUM_HOSTS_RESPONSE (DPN_MSGID_OFFSET | 0x000B) #define DPN_MSGID_GROUP_INFO (DPN_MSGID_OFFSET | 0x000C) #define DPN_MSGID_HOST_MIGRATE (DPN_MSGID_OFFSET | 0x000D) #define DPN_MSGID_INDICATE_CONNECT (DPN_MSGID_OFFSET | 0x000E) #define DPN_MSGID_INDICATED_CONNECT_ABORTED (DPN_MSGID_OFFSET | 0x000F) #define DPN_MSGID_PEER_INFO (DPN_MSGID_OFFSET | 0x0010) #define DPN_MSGID_RECEIVE (DPN_MSGID_OFFSET | 0x0011) #define DPN_MSGID_REMOVE_PLAYER_FROM_GROUP (DPN_MSGID_OFFSET | 0x0012) #define DPN_MSGID_RETURN_BUFFER (DPN_MSGID_OFFSET | 0x0013) #define DPN_MSGID_SEND_COMPLETE (DPN_MSGID_OFFSET | 0x0014) #define DPN_MSGID_SERVER_INFO (DPN_MSGID_OFFSET | 0x0015) #define DPN_MSGID_TERMINATE_SESSION (DPN_MSGID_OFFSET | 0x0016) #define DPN_MSGID_CREATE_THREAD (DPN_MSGID_OFFSET | 0x0017) #define DPN_MSGID_DESTROY_THREAD (DPN_MSGID_OFFSET | 0x0018) #define DPN_MSGID_NAT_RESOLVER_QUERY (DPN_MSGID_OFFSET | 0x0101) /***************************************************************************** * DirectPlay8 Errors */ #define _DPN_FACILITY_CODE 0x015 #define _DPNHRESULT_BASE 0x8000 #define MAKE_DPNHRESULT(code) MAKE_HRESULT(1, _DPN_FACILITY_CODE, (code + _DPNHRESULT_BASE)) #define DPNSUCCESS_EQUAL MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x05 + _DPNHRESULT_BASE)) #define DPNSUCCESS_NOTEQUAL MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0A + _DPNHRESULT_BASE)) #define DPNSUCCESS_PENDING MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0E + _DPNHRESULT_BASE)) #define DPN_OK S_OK #define DPNERR_GENERIC E_FAIL #define DPNERR_INVALIDPARAM E_INVALIDARG #define DPNERR_UNSUPPORTED E_NOTIMPL #define DPNERR_NOINTERFACE E_NOINTERFACE #define DPNERR_OUTOFMEMORY E_OUTOFMEMORY #define DPNERR_INVALIDPOINTER E_POINTER #define DPNERR_PENDING DPNSUCCESS_PENDING #define DPNERR_ABORTED MAKE_DPNHRESULT(0x030) #define DPNERR_ADDRESSING MAKE_DPNHRESULT(0x040) #define DPNERR_ALREADYCLOSING MAKE_DPNHRESULT(0x050) #define DPNERR_ALREADYCONNECTED MAKE_DPNHRESULT(0x060) #define DPNERR_ALREADYDISCONNECTING MAKE_DPNHRESULT(0x070) #define DPNERR_ALREADYINITIALIZED MAKE_DPNHRESULT(0x080) #define DPNERR_ALREADYREGISTERED MAKE_DPNHRESULT(0x090) #define DPNERR_BUFFERTOOSMALL MAKE_DPNHRESULT(0x100) #define DPNERR_CANNOTCANCEL MAKE_DPNHRESULT(0x110) #define DPNERR_CANTCREATEGROUP MAKE_DPNHRESULT(0x120) #define DPNERR_CANTCREATEPLAYER MAKE_DPNHRESULT(0x130) #define DPNERR_CANTLAUNCHAPPLICATION MAKE_DPNHRESULT(0x140) #define DPNERR_CONNECTING MAKE_DPNHRESULT(0x150) #define DPNERR_CONNECTIONLOST MAKE_DPNHRESULT(0x160) #define DPNERR_CONVERSION MAKE_DPNHRESULT(0x170) #define DPNERR_DATATOOLARGE MAKE_DPNHRESULT(0x175) #define DPNERR_DOESNOTEXIST MAKE_DPNHRESULT(0x180) #define DPNERR_DPNSVRNOTAVAILABLE MAKE_DPNHRESULT(0x185) #define DPNERR_DUPLICATECOMMAND MAKE_DPNHRESULT(0x190) #define DPNERR_ENDPOINTNOTRECEIVING MAKE_DPNHRESULT(0x200) #define DPNERR_ENUMQUERYTOOLARGE MAKE_DPNHRESULT(0x210) #define DPNERR_ENUMRESPONSETOOLARGE MAKE_DPNHRESULT(0x220) #define DPNERR_EXCEPTION MAKE_DPNHRESULT(0x230) #define DPNERR_GROUPNOTEMPTY MAKE_DPNHRESULT(0x240) #define DPNERR_HOSTING MAKE_DPNHRESULT(0x250) #define DPNERR_HOSTREJECTEDCONNECTION MAKE_DPNHRESULT(0x260) #define DPNERR_HOSTTERMINATEDSESSION MAKE_DPNHRESULT(0x270) #define DPNERR_INCOMPLETEADDRESS MAKE_DPNHRESULT(0x280) #define DPNERR_INVALIDADDRESSFORMAT MAKE_DPNHRESULT(0x290) #define DPNERR_INVALIDAPPLICATION MAKE_DPNHRESULT(0x300) #define DPNERR_INVALIDCOMMAND MAKE_DPNHRESULT(0x310) #define DPNERR_INVALIDDEVICEADDRESS MAKE_DPNHRESULT(0x320) #define DPNERR_INVALIDENDPOINT MAKE_DPNHRESULT(0x330) #define DPNERR_INVALIDFLAGS MAKE_DPNHRESULT(0x340) #define DPNERR_INVALIDGROUP MAKE_DPNHRESULT(0x350) #define DPNERR_INVALIDHANDLE MAKE_DPNHRESULT(0x360) #define DPNERR_INVALIDHOSTADDRESS MAKE_DPNHRESULT(0x370) #define DPNERR_INVALIDINSTANCE MAKE_DPNHRESULT(0x380) #define DPNERR_INVALIDINTERFACE MAKE_DPNHRESULT(0x390) #define DPNERR_INVALIDOBJECT MAKE_DPNHRESULT(0x400) #define DPNERR_INVALIDPASSWORD MAKE_DPNHRESULT(0x410) #define DPNERR_INVALIDPLAYER MAKE_DPNHRESULT(0x420) #define DPNERR_INVALIDPRIORITY MAKE_DPNHRESULT(0x430) #define DPNERR_INVALIDSTRING MAKE_DPNHRESULT(0x440) #define DPNERR_INVALIDURL MAKE_DPNHRESULT(0x450) #define DPNERR_INVALIDVERSION MAKE_DPNHRESULT(0x460) #define DPNERR_NOCAPS MAKE_DPNHRESULT(0x470) #define DPNERR_NOCONNECTION MAKE_DPNHRESULT(0x480) #define DPNERR_NOHOSTPLAYER MAKE_DPNHRESULT(0x490) #define DPNERR_NOMOREADDRESSCOMPONENTS MAKE_DPNHRESULT(0x500) #define DPNERR_NORESPONSE MAKE_DPNHRESULT(0x510) #define DPNERR_NOTALLOWED MAKE_DPNHRESULT(0x520) #define DPNERR_NOTHOST MAKE_DPNHRESULT(0x530) #define DPNERR_NOTREADY MAKE_DPNHRESULT(0x540) #define DPNERR_NOTREGISTERED MAKE_DPNHRESULT(0x550) #define DPNERR_PLAYERALREADYINGROUP MAKE_DPNHRESULT(0x560) #define DPNERR_PLAYERLOST MAKE_DPNHRESULT(0x570) #define DPNERR_PLAYERNOTINGROUP MAKE_DPNHRESULT(0x580) #define DPNERR_PLAYERNOTREACHABLE MAKE_DPNHRESULT(0x590) #define DPNERR_SENDTOOLARGE MAKE_DPNHRESULT(0x600) #define DPNERR_SESSIONFULL MAKE_DPNHRESULT(0x610) #define DPNERR_TABLEFULL MAKE_DPNHRESULT(0x620) #define DPNERR_TIMEDOUT MAKE_DPNHRESULT(0x630) #define DPNERR_UNINITIALIZED MAKE_DPNHRESULT(0x640) #define DPNERR_USERCANCEL MAKE_DPNHRESULT(0x650) /***************************************************************************** * DirectPlay8 defines */ #define DPNID_ALL_PLAYERS_GROUP 0 #define DPNDESTROYGROUPREASON_NORMAL 0x0001 #define DPNDESTROYGROUPREASON_AUTODESTRUCTED 0x0002 #define DPNDESTROYGROUPREASON_SESSIONTERMINATED 0x0003 #define DPNDESTROYPLAYERREASON_NORMAL 0x0001 #define DPNDESTROYPLAYERREASON_CONNECTIONLOST 0x0002 #define DPNDESTROYPLAYERREASON_SESSIONTERMINATED 0x0003 #define DPNDESTROYPLAYERREASON_HOSTDESTROYEDPLAYER 0x0004 #define DPN_MAX_APPDESC_RESERVEDDATA_SIZE 64 #define DPNOP_SYNC 0x80000000 #define DPNADDPLAYERTOGROUP_SYNC DPNOP_SYNC #define DPNCANCEL_CONNECT 0x0001 #define DPNCANCEL_ENUM 0x0002 #define DPNCANCEL_SEND 0x0004 #define DPNCANCEL_ALL_OPERATIONS 0x8000 #define DPNCANCEL_PLAYER_SENDS 0x80000000 #define DPNCANCEL_PLAYER_SENDS_PRIORITY_HIGH (DPNCANCEL_PLAYER_SENDS | 0x00010000) #define DPNCANCEL_PLAYER_SENDS_PRIORITY_NORMAL (DPNCANCEL_PLAYER_SENDS | 0x00020000) #define DPNCANCEL_PLAYER_SENDS_PRIORITY_LOW (DPNCANCEL_PLAYER_SENDS | 0x00040000) #define DPNCLOSE_IMMEDIATE 0x00000001 #define DPNCONNECT_SYNC DPNOP_SYNC #define DPNCONNECT_OKTOQUERYFORADDRESSING 0x0001 #define DPNCREATEGROUP_SYNC DPNOP_SYNC #define DPNDESTROYGROUP_SYNC DPNOP_SYNC #define DPNENUM_PLAYERS 0x0001 #define DPNENUM_GROUPS 0x0010 #define DPNENUMHOSTS_SYNC DPNOP_SYNC #define DPNENUMHOSTS_OKTOQUERYFORADDRESSING 0x0001 #define DPNENUMHOSTS_NOBROADCASTFALLBACK 0x0002 #define DPNENUMSERVICEPROVIDERS_ALL 0x0001 #define DPNGETLOCALHOSTADDRESSES_COMBINED 0x0001 #define DPNGETSENDQUEUEINFO_PRIORITY_NORMAL 0x0001 #define DPNGETSENDQUEUEINFO_PRIORITY_HIGH 0x0002 #define DPNGETSENDQUEUEINFO_PRIORITY_LOW 0x0004 #define DPNGROUP_AUTODESTRUCT 0x0001 #define DPNHOST_OKTOQUERYFORADDRESSING 0x0001 #define DPNINFO_NAME 0x0001 #define DPNINFO_DATA 0x0002 #define DPNINITIALIZE_DISABLEPARAMVAL 0x0001 #define DPNINITIALIZE_HINT_LANSESSION 0x0002 #define DPNINITIALIZE_DISABLELINKTUNING 0x0004 #define DPNLOBBY_REGISTER 0x0001 #define DPNLOBBY_UNREGISTER 0x0002 #define DPNPLAYER_LOCAL 0x0002 #define DPNPLAYER_HOST 0x0004 #define DPNRECEIVE_GUARANTEED 0x0001 #define DPNRECEIVE_COALESCED 0x0002 #define DPNREMOVEPLAYERFROMGROUP_SYNC DPNOP_SYNC #define DPNSEND_SYNC DPNOP_SYNC #define DPNSEND_NOCOPY 0x0001 #define DPNSEND_NOCOMPLETE 0x0002 #define DPNSEND_COMPLETEONPROCESS 0x0004 #define DPNSEND_GUARANTEED 0x0008 #define DPNSEND_NONSEQUENTIAL 0x0010 #define DPNSEND_NOLOOPBACK 0x0020 #define DPNSEND_PRIORITY_LOW 0x0040 #define DPNSEND_PRIORITY_HIGH 0x0080 #define DPNSEND_COALESCE 0x0100 #define DPNSENDCOMPLETE_GUARANTEED 0x0001 #define DPNSENDCOMPLETE_COALESCED 0x0002 #define DPNSESSION_CLIENT_SERVER 0x0001 #define DPNSESSION_MIGRATE_HOST 0x0004 #define DPNSESSION_NODPNSVR 0x0040 #define DPNSESSION_REQUIREPASSWORD 0x0080 #define DPNSESSION_NOENUMS 0x0100 #define DPNSESSION_FAST_SIGNED 0x0200 #define DPNSESSION_FULL_SIGNED 0x0400 #define DPNSETCLIENTINFO_SYNC DPNOP_SYNC #define DPNSETGROUPINFO_SYNC DPNOP_SYNC #define DPNSETPEERINFO_SYNC DPNOP_SYNC #define DPNSETSERVERINFO_SYNC DPNOP_SYNC #define DPNSPCAPS_SUPPORTSDPNSRV 0x0001 #define DPNSPCAPS_SUPPORTSBROADCAST 0x0002 #define DPNSPCAPS_SUPPORTSALLADAPTERS 0x0004 #define DPNSPCAPS_SUPPORTSTHREADPOOL 0x0008 #define DPNSPCAPS_NETWORKSIMULATOR 0x0010 #define DPNSPINFO_NETWORKSIMULATORDEVICE 0x0001 /***************************************************************************** * DirectPlay8 structures Typedefs */ typedef struct _DPN_APPLICATION_DESC { DWORD dwSize; DWORD dwFlags; GUID guidInstance; GUID guidApplication; DWORD dwMaxPlayers; DWORD dwCurrentPlayers; WCHAR* pwszSessionName; WCHAR* pwszPassword; PVOID pvReservedData; DWORD dwReservedDataSize; PVOID pvApplicationReservedData; DWORD dwApplicationReservedDataSize; } DPN_APPLICATION_DESC, *PDPN_APPLICATION_DESC; typedef struct _BUFFERDESC { DWORD dwBufferSize; BYTE* pBufferData; } BUFFERDESC, DPN_BUFFER_DESC, *PDPN_BUFFER_DESC, *PBUFFERDESC; typedef struct _DPN_CAPS { DWORD dwSize; DWORD dwFlags; DWORD dwConnectTimeout; DWORD dwConnectRetries; DWORD dwTimeoutUntilKeepAlive; } DPN_CAPS, *PDPN_CAPS; typedef struct _DPN_CAPS_EX { DWORD dwSize; DWORD dwFlags; DWORD dwConnectTimeout; DWORD dwConnectRetries; DWORD dwTimeoutUntilKeepAlive; DWORD dwMaxRecvMsgSize; DWORD dwNumSendRetries; DWORD dwMaxSendRetryInterval; DWORD dwDropThresholdRate; DWORD dwThrottleRate; DWORD dwNumHardDisconnectSends; DWORD dwMaxHardDisconnectPeriod; } DPN_CAPS_EX, *PDPN_CAPS_EX; typedef struct _DPN_CONNECTION_INFO { DWORD dwSize; DWORD dwRoundTripLatencyMS; DWORD dwThroughputBPS; DWORD dwPeakThroughputBPS; DWORD dwBytesSentGuaranteed; DWORD dwPacketsSentGuaranteed; DWORD dwBytesSentNonGuaranteed; DWORD dwPacketsSentNonGuaranteed; DWORD dwBytesRetried; DWORD dwPacketsRetried; DWORD dwBytesDropped; DWORD dwPacketsDropped; DWORD dwMessagesTransmittedHighPriority; DWORD dwMessagesTimedOutHighPriority; DWORD dwMessagesTransmittedNormalPriority; DWORD dwMessagesTimedOutNormalPriority; DWORD dwMessagesTransmittedLowPriority; DWORD dwMessagesTimedOutLowPriority; DWORD dwBytesReceivedGuaranteed; DWORD dwPacketsReceivedGuaranteed; DWORD dwBytesReceivedNonGuaranteed; DWORD dwPacketsReceivedNonGuaranteed; DWORD dwMessagesReceived; } DPN_CONNECTION_INFO, *PDPN_CONNECTION_INFO; typedef struct _DPN_GROUP_INFO { DWORD dwSize; DWORD dwInfoFlags; PWSTR pwszName; PVOID pvData; DWORD dwDataSize; DWORD dwGroupFlags; } DPN_GROUP_INFO, *PDPN_GROUP_INFO; typedef struct _DPN_PLAYER_INFO { DWORD dwSize; DWORD dwInfoFlags; PWSTR pwszName; PVOID pvData; DWORD dwDataSize; DWORD dwPlayerFlags; } DPN_PLAYER_INFO, *PDPN_PLAYER_INFO; typedef struct _DPN_SERVICE_PROVIDER_INFO { DWORD dwFlags; GUID guid; WCHAR* pwszName; PVOID pvReserved; DWORD dwReserved; } DPN_SERVICE_PROVIDER_INFO, *PDPN_SERVICE_PROVIDER_INFO; typedef struct _DPN_SP_CAPS { DWORD dwSize; DWORD dwFlags; DWORD dwNumThreads; DWORD dwDefaultEnumCount; DWORD dwDefaultEnumRetryInterval; DWORD dwDefaultEnumTimeout; DWORD dwMaxEnumPayloadSize; DWORD dwBuffersPerThread; DWORD dwSystemBufferSize; } DPN_SP_CAPS, *PDPN_SP_CAPS; typedef struct _DPN_SECURITY_CREDENTIALS DPN_SECURITY_CREDENTIALS, *PDPN_SECURITY_CREDENTIALS; typedef struct _DPN_SECURITY_DESC DPN_SECURITY_DESC, *PDPN_SECURITY_DESC; typedef struct _DPNMSG_ADD_PLAYER_TO_GROUP { DWORD dwSize; DPNID dpnidGroup; PVOID pvGroupContext; DPNID dpnidPlayer; PVOID pvPlayerContext; } DPNMSG_ADD_PLAYER_TO_GROUP, *PDPNMSG_ADD_PLAYER_TO_GROUP; typedef struct _DPNMSG_ASYNC_OP_COMPLETE { DWORD dwSize; DPNHANDLE hAsyncOp; PVOID pvUserContext; HRESULT hResultCode; } DPNMSG_ASYNC_OP_COMPLETE, *PDPNMSG_ASYNC_OP_COMPLETE; typedef struct _DPNMSG_CLIENT_INFO { DWORD dwSize; DPNID dpnidClient; PVOID pvPlayerContext; } DPNMSG_CLIENT_INFO, *PDPNMSG_CLIENT_INFO; typedef struct _DPNMSG_CONNECT_COMPLETE { DWORD dwSize; DPNHANDLE hAsyncOp; PVOID pvUserContext; HRESULT hResultCode; PVOID pvApplicationReplyData; DWORD dwApplicationReplyDataSize; /** DirectX 9 */ DPNID dpnidLocal; } DPNMSG_CONNECT_COMPLETE, *PDPNMSG_CONNECT_COMPLETE; typedef struct _DPNMSG_CREATE_GROUP { DWORD dwSize; DPNID dpnidGroup; DPNID dpnidOwner; PVOID pvGroupContext; /** DirectX 9 */ PVOID pvOwnerContext; } DPNMSG_CREATE_GROUP, *PDPNMSG_CREATE_GROUP; typedef struct _DPNMSG_CREATE_PLAYER { DWORD dwSize; DPNID dpnidPlayer; PVOID pvPlayerContext; } DPNMSG_CREATE_PLAYER, *PDPNMSG_CREATE_PLAYER; typedef struct _DPNMSG_DESTROY_GROUP { DWORD dwSize; DPNID dpnidGroup; PVOID pvGroupContext; DWORD dwReason; } DPNMSG_DESTROY_GROUP, *PDPNMSG_DESTROY_GROUP; typedef struct _DPNMSG_DESTROY_PLAYER { DWORD dwSize; DPNID dpnidPlayer; PVOID pvPlayerContext; DWORD dwReason; } DPNMSG_DESTROY_PLAYER, *PDPNMSG_DESTROY_PLAYER; typedef struct _DPNMSG_ENUM_HOSTS_QUERY { DWORD dwSize; IDirectPlay8Address* pAddressSender; IDirectPlay8Address* pAddressDevice; PVOID pvReceivedData; DWORD dwReceivedDataSize; DWORD dwMaxResponseDataSize; PVOID pvResponseData; DWORD dwResponseDataSize; PVOID pvResponseContext; } DPNMSG_ENUM_HOSTS_QUERY, *PDPNMSG_ENUM_HOSTS_QUERY; typedef struct _DPNMSG_ENUM_HOSTS_RESPONSE { DWORD dwSize; IDirectPlay8Address* pAddressSender; IDirectPlay8Address* pAddressDevice; const DPN_APPLICATION_DESC* pApplicationDescription; PVOID pvResponseData; DWORD dwResponseDataSize; PVOID pvUserContext; DWORD dwRoundTripLatencyMS; } DPNMSG_ENUM_HOSTS_RESPONSE, *PDPNMSG_ENUM_HOSTS_RESPONSE; typedef struct _DPNMSG_GROUP_INFO { DWORD dwSize; DPNID dpnidGroup; PVOID pvGroupContext; } DPNMSG_GROUP_INFO, *PDPNMSG_GROUP_INFO; typedef struct _DPNMSG_HOST_MIGRATE { DWORD dwSize; DPNID dpnidNewHost; PVOID pvPlayerContext; } DPNMSG_HOST_MIGRATE, *PDPNMSG_HOST_MIGRATE; typedef struct _DPNMSG_INDICATE_CONNECT { DWORD dwSize; PVOID pvUserConnectData; DWORD dwUserConnectDataSize; PVOID pvReplyData; DWORD dwReplyDataSize; PVOID pvReplyContext; PVOID pvPlayerContext; IDirectPlay8Address* pAddressPlayer; IDirectPlay8Address* pAddressDevice; } DPNMSG_INDICATE_CONNECT, *PDPNMSG_INDICATE_CONNECT; typedef struct _DPNMSG_INDICATED_CONNECT_ABORTED { DWORD dwSize; PVOID pvPlayerContext; } DPNMSG_INDICATED_CONNECT_ABORTED, *PDPNMSG_INDICATED_CONNECT_ABORTED; typedef struct _DPNMSG_PEER_INFO { DWORD dwSize; DPNID dpnidPeer; PVOID pvPlayerContext; } DPNMSG_PEER_INFO, *PDPNMSG_PEER_INFO; typedef struct _DPNMSG_RECEIVE { DWORD dwSize; DPNID dpnidSender; PVOID pvPlayerContext; PBYTE pReceiveData; DWORD dwReceiveDataSize; DPNHANDLE hBufferHandle; /** DirectX 9 */ DWORD dwReceiveFlags; } DPNMSG_RECEIVE, *PDPNMSG_RECEIVE; typedef struct _DPNMSG_REMOVE_PLAYER_FROM_GROUP { DWORD dwSize; DPNID dpnidGroup; PVOID pvGroupContext; DPNID dpnidPlayer; PVOID pvPlayerContext; } DPNMSG_REMOVE_PLAYER_FROM_GROUP, *PDPNMSG_REMOVE_PLAYER_FROM_GROUP; typedef struct _DPNMSG_RETURN_BUFFER { DWORD dwSize; HRESULT hResultCode; PVOID pvBuffer; PVOID pvUserContext; } DPNMSG_RETURN_BUFFER, *PDPNMSG_RETURN_BUFFER; typedef struct _DPNMSG_SEND_COMPLETE { DWORD dwSize; DPNHANDLE hAsyncOp; PVOID pvUserContext; HRESULT hResultCode; DWORD dwSendTime; /** DirectX 9 */ DWORD dwFirstFrameRTT; DWORD dwFirstFrameRetryCount; DWORD dwSendCompleteFlags; DPN_BUFFER_DESC* pBuffers; DWORD dwNumBuffers; } DPNMSG_SEND_COMPLETE, *PDPNMSG_SEND_COMPLETE; typedef struct _DPNMSG_SERVER_INFO { DWORD dwSize; DPNID dpnidServer; PVOID pvPlayerContext; } DPNMSG_SERVER_INFO, *PDPNMSG_SERVER_INFO; typedef struct _DPNMSG_TERMINATE_SESSION { DWORD dwSize; HRESULT hResultCode; PVOID pvTerminateData; DWORD dwTerminateDataSize; } DPNMSG_TERMINATE_SESSION, *PDPNMSG_TERMINATE_SESSION; typedef struct _DPNMSG_CREATE_THREAD { DWORD dwSize; DWORD dwFlags; DWORD dwProcessorNum; PVOID pvUserContext; } DPNMSG_CREATE_THREAD, *PDPNMSG_CREATE_THREAD; typedef struct _DPNMSG_DESTROY_THREAD { DWORD dwSize; DWORD dwProcessorNum; PVOID pvUserContext; } DPNMSG_DESTROY_THREAD, *PDPNMSG_DESTROY_THREAD; typedef struct _DPNMSG_NAT_RESOLVER_QUERY { DWORD dwSize; IDirectPlay8Address* pAddressSender; IDirectPlay8Address* pAddressDevice; WCHAR* pwszUserString; } DPNMSG_NAT_RESOLVER_QUERY, *PDPNMSG_NAT_RESOLVER_QUERY; /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(CLSID_DirectPlay8Peer, 0x286f484d,0x375e,0x4458,0xa2,0x72,0xb1,0x38,0xe2,0xf8,0x0a,0x6a); DEFINE_GUID(CLSID_DirectPlay8Client, 0x743f1dc6,0x5aba,0x429f,0x8b,0xdf,0xc5,0x4d,0x03,0x25,0x3d,0xc2); DEFINE_GUID(CLSID_DirectPlay8Server, 0xda825e1b,0x6830,0x43d7,0x83,0x5d,0x0b,0x5a,0xd8,0x29,0x56,0xa2); /** DirectX 9 */ DEFINE_GUID(CLSID_DirectPlay8ThreadPool, 0xfc47060e,0x6153,0x4b34,0xb9,0x75,0x8e,0x41,0x21,0xeb,0x7f,0x3c); DEFINE_GUID(CLSID_DirectPlay8NATResolver, 0xe4c1d9a2,0xcbf7,0x48bd,0x9a,0x69,0x34,0xa5,0x5e,0x0d,0x89,0x41); DEFINE_GUID(IID_IDirectPlay8Peer, 0x5102dacf,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11); typedef struct IDirectPlay8Peer *PDIRECTPLAY8PEER; DEFINE_GUID(IID_IDirectPlay8Client, 0x5102dacd,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11); typedef struct IDirectPlay8Client *PDIRECTPLAY8CLIENT; DEFINE_GUID(IID_IDirectPlay8Server, 0x5102dace,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11); typedef struct IDirectPlay8Server *PDIRECTPLAY8SERVER; /** DirectX 9 */ DEFINE_GUID(IID_IDirectPlay8ThreadPool, 0x0d22ee73,0x4a46,0x4a0d,0x89,0xb2,0x04,0x5b,0x4d,0x66,0x64,0x25); typedef struct IDirectPlay8ThreadPool *PDIRECTPLAY8THREADPOOL; DEFINE_GUID(IID_IDirectPlay8NATResolver, 0xa9e213f2,0x9a60,0x486f,0xbf,0x3b,0x53,0x40,0x8b,0x6d,0x1c,0xbb); typedef struct IDirectPlay8NATResolver *PDIRECTPLAY8NATRESOLVER; DEFINE_GUID(CLSID_DP8SP_IPX, 0x53934290,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11); DEFINE_GUID(CLSID_DP8SP_TCPIP, 0xebfe7ba0,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11); DEFINE_GUID(CLSID_DP8SP_SERIAL, 0x743b5d60,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11); DEFINE_GUID(CLSID_DP8SP_MODEM, 0x6d4a3650,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11); /** DirectX 9 */ DEFINE_GUID(CLSID_DP8SP_BLUETOOTH, 0x995513af,0x3027,0x4b9a,0x95,0x6e,0xc7,0x72,0xb3,0xf7,0x80,0x06); typedef struct IDirectPlay8LobbiedApplication *PIDirectPlay8LobbiedApplication, DNLOBBIEDAPPLICATION; /***************************************************************************** * IDirectPlay8Client interface */ #define INTERFACE IDirectPlay8Client DECLARE_INTERFACE_(IDirectPlay8Client,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8Client methods ***/ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE; STDMETHOD(EnumServiceProviders)(THIS_ const GUID *pguidServiceProvider, const GUID *pguidApplication, DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer, PDWORD pcbEnumData, PDWORD pcReturned, DWORD dwFlags) PURE; 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; STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE; 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; STDMETHOD(Send)(THIS_ const DPN_BUFFER_DESC *prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(GetSendQueueInfo)(THIS_ DWORD *pdwNumMsgs, DWORD *pdwNumBytes, DWORD dwFlags) PURE; STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC *pAppDescBuffer, DWORD *pcbDataSize, DWORD dwFlags) PURE; STDMETHOD(SetClientInfo)(THIS_ const DPN_PLAYER_INFO *pdpnPlayerInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(GetServerInfo)(THIS_ DPN_PLAYER_INFO *pdpnPlayerInfo, DWORD *pdwSize, DWORD dwFlags) PURE; STDMETHOD(GetServerAddress)(THIS_ IDirectPlay8Address ** pAddress, DWORD dwFlags) PURE; STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE; STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ DPN_CAPS *pdpCaps, DWORD dwFlags) PURE; STDMETHOD(SetCaps)(THIS_ const DPN_CAPS *pdpCaps, DWORD dwFlags) PURE; STDMETHOD(SetSPCaps)(THIS_ const GUID *pguidSP, const DPN_SP_CAPS *pdpspCaps, DWORD dwFlags ) PURE; STDMETHOD(GetSPCaps)(THIS_ const GUID *pguidSP, DPN_SP_CAPS *pdpspCaps, DWORD dwFlags) PURE; STDMETHOD(GetConnectionInfo)(THIS_ DPN_CONNECTION_INFO *pdpConnectionInfo, DWORD dwFlags) PURE; STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *pIDP8LobbiedApplication, DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8Client_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay8Client_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay8Client_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay8Client methods ***/ #define IDirectPlay8Client_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) #define IDirectPlay8Client_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) #define IDirectPlay8Client_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) #define IDirectPlay8Client_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) #define IDirectPlay8Client_Send(p,a,b,c,d,e,f) (p)->lpVtbl->Send(p,a,b,c,d,e,f) #define IDirectPlay8Client_GetSendQueueInfo(p,a,b,c) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c) #define IDirectPlay8Client_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) #define IDirectPlay8Client_SetClientInfo(p,a,b,c,d) (p)->lpVtbl->SetClientInfo(p,a,b,c,d) #define IDirectPlay8Client_GetServerInfo(p,a,b,c) (p)->lpVtbl->GetServerInfo(p,a,b,c) #define IDirectPlay8Client_GetServerAddress(p,a,b) (p)->lpVtbl->GetServerAddress(p,a,b) #define IDirectPlay8Client_Close(p,a) (p)->lpVtbl->Close(p,a) #define IDirectPlay8Client_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) #define IDirectPlay8Client_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectPlay8Client_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) #define IDirectPlay8Client_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) #define IDirectPlay8Client_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) #define IDirectPlay8Client_GetConnectionInfo(p,a,b) (p)->lpVtbl->GetConnectionInfo(p,a,b) #define IDirectPlay8Client_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlay8Client_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8Client_AddRef(p) (p)->AddRef() #define IDirectPlay8Client_Release(p) (p)->Release() /*** IDirectPlay8Client methods ***/ #define IDirectPlay8Client_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) #define IDirectPlay8Client_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) #define IDirectPlay8Client_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) #define IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j) (p)->Connect(a,b,c,d,e,f,g,h,i,j) #define IDirectPlay8Client_Send(p,a,b,c,d,e,f) (p)->Send(a,b,c,d,e,f) #define IDirectPlay8Client_GetSendQueueInfo(p,a,b,c) (p)->GetSendQueueInfo(a,b,c) #define IDirectPlay8Client_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) #define IDirectPlay8Client_SetClientInfo(p,a,b,c,d) (p)->SetClientInfo(a,b,c,d) #define IDirectPlay8Client_GetServerInfo(p,a,b,c) (p)->GetServerInfo(a,b,c) #define IDirectPlay8Client_GetServerAddress(p,a,b) (p)->GetServerAddress(a,b) #define IDirectPlay8Client_Close(p,a) (p)->Close(a) #define IDirectPlay8Client_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) #define IDirectPlay8Client_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectPlay8Client_SetCaps(p,a,b) (p)->SetCaps(a,b) #define IDirectPlay8Client_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) #define IDirectPlay8Client_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) #define IDirectPlay8Client_GetConnectionInfo(p,a,b) (p)->GetConnectionInfo(a,b) #define IDirectPlay8Client_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) #endif /***************************************************************************** * IDirectPlay8Server interface */ #define INTERFACE IDirectPlay8Server DECLARE_INTERFACE_(IDirectPlay8Server,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8Server methods ***/ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE; STDMETHOD(EnumServiceProviders)(THIS_ const GUID *pguidServiceProvider, const GUID *pguidApplication, DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer, PDWORD pcbEnumData, PDWORD pcReturned, DWORD dwFlags) PURE; STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(GetSendQueueInfo)(THIS_ DPNID dpnid, DWORD *pdwNumMsgs, DWORD *pdwNumBytes, DWORD dwFlags) PURE; STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC *pAppDescBuffer, DWORD *pcbDataSize, DWORD dwFlags) PURE; STDMETHOD(SetServerInfo)(THIS_ const DPN_PLAYER_INFO *pdpnPlayerInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(GetClientInfo)(THIS_ DPNID dpnid, DPN_PLAYER_INFO *pdpnPlayerInfo, DWORD *pdwSize, DWORD dwFlags) PURE; STDMETHOD(GetClientAddress)(THIS_ DPNID dpnid, IDirectPlay8Address ** pAddress, DWORD dwFlags) PURE; STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address ** prgpAddress, DWORD *pcAddress, DWORD dwFlags) PURE; STDMETHOD(SetApplicationDesc)(THIS_ const DPN_APPLICATION_DESC *pad, DWORD dwFlags) PURE; 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; STDMETHOD(SendTo)(THIS_ DPNID dpnid, const DPN_BUFFER_DESC *prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(CreateGroup)(THIS_ const DPN_GROUP_INFO *pdpnGroupInfo, void *pvGroupContext, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(DestroyGroup)(THIS_ DPNID idGroup, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(AddPlayerToGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(RemovePlayerFromGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(SetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO *pdpnGroupInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(GetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO *pdpnGroupInfo, DWORD *pdwSize, DWORD dwFlags) PURE; STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID *prgdpnid, DWORD *pcdpnid, DWORD dwFlags) PURE; STDMETHOD(EnumGroupMembers)(THIS_ DPNID dpnid, DPNID *prgdpnid, DWORD *pcdpnid, DWORD dwFlags) PURE; STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE; STDMETHOD(DestroyClient)(THIS_ DPNID dpnidClient, const void *pvDestroyData, DWORD dwDestroyDataSize, DWORD dwFlags) PURE; STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE; STDMETHOD(GetPlayerContext)(THIS_ DPNID dpnid, PVOID *ppvPlayerContext, DWORD dwFlags) PURE; STDMETHOD(GetGroupContext)(THIS_ DPNID dpnid, PVOID *ppvGroupContext, DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ DPN_CAPS *pdpCaps, DWORD dwFlags) PURE; STDMETHOD(SetCaps)(THIS_ const DPN_CAPS *pdpCaps, DWORD dwFlags) PURE; STDMETHOD(SetSPCaps)(THIS_ const GUID *pguidSP, const DPN_SP_CAPS *pdpspCaps, DWORD dwFlags ) PURE; STDMETHOD(GetSPCaps)(THIS_ const GUID *pguidSP, DPN_SP_CAPS *pdpspCaps, DWORD dwFlags) PURE; STDMETHOD(GetConnectionInfo)(THIS_ DPNID dpnid, DPN_CONNECTION_INFO *pdpConnectionInfo, DWORD dwFlags) PURE; STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *pIDP8LobbiedApplication, DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8Server_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay8Server_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay8Server_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay8Server methods ***/ #define IDirectPlay8Server_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) #define IDirectPlay8Server_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) #define IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d) #define IDirectPlay8Server_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) #define IDirectPlay8Server_SetServerInfo(p,a,b,c,d) (p)->lpVtbl->SetServerInfo(p,a,b,c,d) #define IDirectPlay8Server_GetClientInfo(p,a,b,c,d) (p)->lpVtbl->GetClientInfo(p,a,b,c,d) #define IDirectPlay8Server_GetClientAddress(p,a,b,c) (p)->lpVtbl->GetClientAddress(p,a,b,c) #define IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c) (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c) #define IDirectPlay8Server_SetApplicationDesc(p,a,b) (p)->lpVtbl->SetApplicationDesc(p,a,b) #define IDirectPlay8Server_Host(p,a,b,c,d,e,f,g) (p)->lpVtbl->Host(p,a,b,c,d,e,f,g) #define IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g) (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g) #define IDirectPlay8Server_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) #define IDirectPlay8Server_DestroyGroup(p,a,b,c,d) (p)->lpVtbl->DestroyGroup(p,a,b,c,d) #define IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e) (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e) #define IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e) #define IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e) (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e) #define IDirectPlay8Server_GetGroupInfo(p,a,b,c,d) (p)->lpVtbl->GetGroupInfo(p,a,b,c,d) #define IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c) (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c) #define IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d) (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d) #define IDirectPlay8Server_Close(p,a) (p)->lpVtbl->Close(p,a) #define IDirectPlay8Server_DestroyClient(p,a,b,c,d) (p)->lpVtbl->DestroyClient(p,a,b,c,d) #define IDirectPlay8Server_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) #define IDirectPlay8Server_GetPlayerContext(p,a,b,c) (p)->lpVtbl->GetPlayerContext(p,a,b,c) #define IDirectPlay8Server_GetGroupContext(p,a,b,c) (p)->lpVtbl->GetGroupContext(p,a,b,c) #define IDirectPlay8Server_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectPlay8Server_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) #define IDirectPlay8Server_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) #define IDirectPlay8Server_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) #define IDirectPlay8Server_GetConnectionInfo(p,a,b,c) (p)->lpVtbl->GetConnectionInfo(p,a,b,c) #define IDirectPlay8Server_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlay8Server_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8Server_AddRef(p) (p)->AddRef() #define IDirectPlay8Server_Release(p) (p)->Release() /*** IDirectPlay8Server methods ***/ #define IDirectPlay8Server_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) #define IDirectPlay8Server_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) #define IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d) (p)->GetSendQueueInfo(a,b,c,d) #define IDirectPlay8Server_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) #define IDirectPlay8Server_SetServerInfo(p,a,b,c,d) (p)->SetServerInfo(a,b,c,d) #define IDirectPlay8Server_GetClientInfo(p,a,b,c,d) (p)->GetClientInfo(a,b,c,d) #define IDirectPlay8Server_GetClientAddress(p,a,b,c) (p)->GetClientAddress(a,b,c) #define IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c) (p)->GetLocalHostAddresses(a,b,c) #define IDirectPlay8Server_SetApplicationDesc(p,a,b) (p)->SetApplicationDesc(a,b) #define IDirectPlay8Server_Host(p,a,b,c,d,e,f,g) (p)->Host(a,b,c,d,e,f,g) #define IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g) (p)->SendTo(a,b,c,d,e,f,g) #define IDirectPlay8Server_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) #define IDirectPlay8Server_DestroyGroup(p,a,b,c,d) (p)->DestroyGroup(a,b,c,d) #define IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e) (p)->AddPlayerToGroup(a,b,c,d,e) #define IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->RemovePlayerFromGroup(a,b,c,d,e) #define IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e) (p)->SetGroupInfo(a,b,c,d,e) #define IDirectPlay8Server_GetGroupInfo(p,a,b,c,d) (p)->GetGroupInfo(a,b,c,d) #define IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c) (p)->EnumPlayersAndGroups(a,b,c) #define IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d) (p)->EnumGroupMembers(a,b,c,d) #define IDirectPlay8Server_Close(p,a) (p)->Close(a) #define IDirectPlay8Server_DestroyClient(p,a,b,c,d) (p)->DestroyClient(a,b,c,d) #define IDirectPlay8Server_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) #define IDirectPlay8Server_GetPlayerContext(p,a,b,c) (p)->GetPlayerContext(a,b,c) #define IDirectPlay8Server_GetGroupContext(p,a,b,c) (p)->GetGroupContext(a,b,c) #define IDirectPlay8Server_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectPlay8Server_SetCaps(p,a,b) (p)->SetCaps(a,b) #define IDirectPlay8Server_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) #define IDirectPlay8Server_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) #define IDirectPlay8Server_GetConnectionInfo(p,a,b,c) (p)->GetConnectionInfo(a,b,c) #define IDirectPlay8Server_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) #endif /***************************************************************************** * IDirectPlay8Peer interface */ #define INTERFACE IDirectPlay8Peer DECLARE_INTERFACE_(IDirectPlay8Peer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8Peer methods ***/ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE; STDMETHOD(EnumServiceProviders)(THIS_ const GUID* pguidServiceProvider, const GUID* pguidApplication, DPN_SERVICE_PROVIDER_INFO* pSPInfoBuffer, DWORD* pcbEnumData, DWORD* pcReturned, DWORD dwFlags) PURE; STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE; 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; STDMETHOD(SendTo)(THIS_ DPNID dpnid, const DPN_BUFFER_DESC* prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(GetSendQueueInfo)(THIS_ DPNID dpnid, DWORD* pdwNumMsgs, DWORD* pdwNumBytes, DWORD dwFlags) PURE; 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; STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC* pAppDescBuffer, DWORD* pcbDataSize, DWORD dwFlags) PURE; STDMETHOD(SetApplicationDesc)(THIS_ const DPN_APPLICATION_DESC* pad, DWORD dwFlags) PURE; STDMETHOD(CreateGroup)(THIS_ const DPN_GROUP_INFO* pdpnGroupInfo, void* pvGroupContext, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(DestroyGroup)(THIS_ DPNID idGroup, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(AddPlayerToGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(RemovePlayerFromGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(SetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO* pdpnGroupInfo,PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(GetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO* pdpnGroupInfo, DWORD* pdwSize, DWORD dwFlags) PURE; STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID* prgdpnid, DWORD* pcdpnid, DWORD dwFlags) PURE; STDMETHOD(EnumGroupMembers)(THIS_ DPNID dpnid, DPNID* prgdpnid, DWORD* pcdpnid, DWORD dwFlags) PURE; STDMETHOD(SetPeerInfo)(THIS_ const DPN_PLAYER_INFO* pdpnPlayerInfo,PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE; STDMETHOD(GetPeerInfo)(THIS_ DPNID dpnid, DPN_PLAYER_INFO* pdpnPlayerInfo, DWORD* pdwSize, DWORD dwFlags) PURE; STDMETHOD(GetPeerAddress)(THIS_ DPNID dpnid, IDirectPlay8Address** pAddress, DWORD dwFlags) PURE; STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address** prgpAddress, DWORD* pcAddress, DWORD dwFlags) PURE; STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE; 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; STDMETHOD(DestroyPeer)(THIS_ DPNID dpnidClient, const void* pvDestroyData, DWORD dwDestroyDataSize, DWORD dwFlags) PURE; STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE; STDMETHOD(GetPlayerContext)(THIS_ DPNID dpnid,PVOID* ppvPlayerContext, DWORD dwFlags) PURE; STDMETHOD(GetGroupContext)(THIS_ DPNID dpnid,PVOID* ppvGroupContext, DWORD dwFlags) PURE; STDMETHOD(GetCaps)(THIS_ DPN_CAPS* pdpCaps, DWORD dwFlags) PURE; STDMETHOD(SetCaps)(THIS_ const DPN_CAPS* pdpCaps, DWORD dwFlags) PURE; STDMETHOD(SetSPCaps)(THIS_ const GUID* pguidSP, const DPN_SP_CAPS* pdpspCaps, DWORD dwFlags ) PURE; STDMETHOD(GetSPCaps)(THIS_ const GUID* pguidSP, DPN_SP_CAPS* pdpspCaps, DWORD dwFlags) PURE; STDMETHOD(GetConnectionInfo)(THIS_ DPNID dpnid, DPN_CONNECTION_INFO* pdpConnectionInfo, DWORD dwFlags) PURE; STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication* pIDP8LobbiedApplication, DWORD dwFlags) PURE; STDMETHOD(TerminateSession)(THIS_ void* pvTerminateData, DWORD dwTerminateDataSize, DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8Peer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay8Peer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay8Peer_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay8Peer methods ***/ #define IDirectPlay8Peer_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f) #define IDirectPlay8Peer_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) #define IDirectPlay8Peer_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b) #define IDirectPlay8Peer_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) #define IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g) (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g) #define IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d) #define IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g) (p)->lpVtbl->Host(p,a,b,c,d,e,f,g) #define IDirectPlay8Peer_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c) #define IDirectPlay8Peer_SetApplicationDesc(p,a,b) (p)->lpVtbl->SetApplicationDesc(p,a,b) #define IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) #define IDirectPlay8Peer_DestroyGroup(p,a,b,c,d) (p)->lpVtbl->DestroyGroup(p,a,b,c,d) #define IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e) (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e) #define IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e) #define IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e) (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e) #define IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d) (p)->lpVtbl->GetGroupInfo(p,a,b,c,d) #define IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c) (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c) #define IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d) (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d) #define IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d) (p)->lpVtbl->SetPeerInfo(p,a,b,c,d) #define IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d) (p)->lpVtbl->GetPeerInfo(p,a,b,c,d) #define IDirectPlay8Peer_GetPeerAddress(p,a,b,c) (p)->lpVtbl->GetPeerAddress(p,a,b,c) #define IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c) (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c) #define IDirectPlay8Peer_Close(p,a) (p)->lpVtbl->Close(p,a) #define IDirectPlay8Peer_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) #define IDirectPlay8Peer_DestroyPeer(p,a,b,c,d) (p)->lpVtbl->DestroyPeer(p,a,b,c,d) #define IDirectPlay8Peer_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b) #define IDirectPlay8Peer_GetPlayerContext(p,a,b,c) (p)->lpVtbl->GetPlayerContext(p,a,b,c) #define IDirectPlay8Peer_GetGroupContext(p,a,b,c) (p)->lpVtbl->GetGroupContext(p,a,b,c) #define IDirectPlay8Peer_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectPlay8Peer_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b) #define IDirectPlay8Peer_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c) #define IDirectPlay8Peer_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c) #define IDirectPlay8Peer_GetConnectionInfo(p,a,b,c) (p)->lpVtbl->GetConnectionInfo(p,a,b,c) #define IDirectPlay8Peer_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c) #define IDirectPlay8Peer_TerminateSession(p,a,b,c) (p)->lpVtbl->TerminateSession(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlay8Peer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8Peer_AddRef(p) (p)->AddRef() #define IDirectPlay8Peer_Release(p) (p)->Release() /*** IDirectPlay8Peer methods ***/ #define IDirectPlay8Peer_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f) #define IDirectPlay8Peer_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) #define IDirectPlay8Peer_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b) #define IDirectPlay8Peer_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) #define IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g) (p)->SendTo(a,b,c,d,e,f,g) #define IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d) (p)->GetSendQueueInfo(a,b,c,d) #define IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g) (p)->Host(a,b,c,d,e,f,g) #define IDirectPlay8Peer_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c) #define IDirectPlay8Peer_SetApplicationDesc(p,a,b) (p)->SetApplicationDesc(a,b) #define IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) #define IDirectPlay8Peer_DestroyGroup(p,a,b,c,d) (p)->DestroyGroup(a,b,c,d) #define IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e) (p)->AddPlayerToGroup(a,b,c,d,e) #define IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->RemovePlayerFromGroup(a,b,c,d,e) #define IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e) (p)->SetGroupInfo(a,b,c,d,e) #define IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d) (p)->GetGroupInfo(a,b,c,d) #define IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c) (p)->EnumPlayersAndGroups(a,b,c) #define IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d) (p)->EnumGroupMembers(a,b,c,d) #define IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d) (p)->SetPeerInfo(a,b,c,d) #define IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d) (p)->GetPeerInfo(a,b,c,d) #define IDirectPlay8Peer_GetPeerAddress(p,a,b,c) (p)->GetPeerAddress(a,b,c) #define IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c) (p)->GetLocalHostAddresses(a,b,c) #define IDirectPlay8Peer_Close(p,a) (p)->Close(a) #define IDirectPlay8Peer_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) #define IDirectPlay8Peer_DestroyPeer(p,a,b,c,d) (p)->DestroyPeer(a,b,c,d) #define IDirectPlay8Peer_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b) #define IDirectPlay8Peer_GetPlayerContext(p,a,b,c) (p)->GetPlayerContext(a,b,c) #define IDirectPlay8Peer_GetGroupContext(p,a,b,c) (p)->GetGroupContext(a,b,c) #define IDirectPlay8Peer_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirectPlay8Peer_SetCaps(p,a,b) (p)->SetCaps(a,b) #define IDirectPlay8Peer_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c) #define IDirectPlay8Peer_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c) #define IDirectPlay8Peer_GetConnectionInfo(p,a,b,c) (p)->GetConnectionInfo(a,b,c) #define IDirectPlay8Peer_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c) #define IDirectPlay8Peer_TerminateSession(p,a,b,c) (p)->TerminateSession(a,b,c) #endif /***************************************************************************** * IDirectPlay8ThreadPool interface */ #define INTERFACE IDirectPlay8ThreadPool DECLARE_INTERFACE_(IDirectPlay8ThreadPool,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8ThreadPool methods ***/ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE; STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetThreadCount)(THIS_ DWORD dwProcessorNum, DWORD* pdwNumThreads, DWORD dwFlags) PURE; STDMETHOD(SetThreadCount)(THIS_ DWORD dwProcessorNum, DWORD dwNumThreads, DWORD dwFlags) PURE; STDMETHOD(DoWork)(THIS_ DWORD dwAllowedTimeSlice, DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8ThreadPool_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay8ThreadPool_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay8ThreadPool_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay8ThreadPool methods ***/ #define IDirectPlay8ThreadPool_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectPlay8ThreadPool_Close(p,a) (p)->lpVtbl->Close(p,a) #define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c) (p)->lpVtbl->GetThreadCount(p,a,b,c) #define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c) (p)->lpVtbl->SetThreadCount(p,a,b,c) #define IDirectPlay8ThreadPool_DoWork(p,a,b) (p)->lpVtbl->DoWork(p,a,b) #else /*** IUnknown methods ***/ #define IDirectPlay8ThreadPool_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8ThreadPool_AddRef(p) (p)->AddRef() #define IDirectPlay8ThreadPool_Release(p) (p)->Release() /*** IDirectPlay8ThreadPool methods ***/ #define IDirectPlay8ThreadPool_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectPlay8ThreadPool_Close(p,a) (p)->Close(a) #define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c) (p)->GetThreadCount(a,b,c) #define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c) (p)->SetThreadCount(a,b,c) #define IDirectPlay8ThreadPool_DoWork(p,a,b) (p)->DoWork(a,b) #endif /***************************************************************************** * IDirectPlay8NATResolver interface */ #define INTERFACE IDirectPlay8NATResolver DECLARE_INTERFACE_(IDirectPlay8NATResolver,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8NATResolver methods ***/ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE; STDMETHOD(Start)(THIS_ IDirectPlay8Address** ppDevices, DWORD dwNumDevices, DWORD dwFlags) PURE; STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE; STDMETHOD(EnumDevices)(THIS_ DPN_SERVICE_PROVIDER_INFO* pSPInfoBuffer, PDWORD pdwBufferSize, PDWORD pdwNumDevices, DWORD dwFlags) PURE; STDMETHOD(GetAddresses)(THIS_ IDirectPlay8Address** ppAddresses, DWORD* pdwNumAddresses, DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8NATResolver_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay8NATResolver_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay8NATResolver_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay8NATResolver methods ***/ #define IDirectPlay8NATResolver_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectPlay8NATResolver_Start(p,a,b,c) (p)->lpVtbl->Start(p,a,b,c) #define IDirectPlay8NATResolver_Close(p,a) (p)->lpVtbl->Close(p,a) #define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectPlay8NATResolver_GetAddresses(p,a,b,c) (p)->lpVtbl->GetAddresses(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlay8NATResolver_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8NATResolver_AddRef(p) (p)->AddRef() #define IDirectPlay8NATResolver_Release(p) (p)->Release() /*** IDirectPlay8NATResolver methods ***/ #define IDirectPlay8NATResolver_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectPlay8NATResolver_Start(p,a,b,c) (p)->Start(a,b,c) #define IDirectPlay8NATResolver_Close(p,a) (p)->Close(a) #define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectPlay8NATResolver_GetAddresses(p,a,b,c) (p)->GetAddresses(a,b,c) #endif /* Export functions */ HRESULT WINAPI DirectPlay8Create(const CLSID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/dplobby.h ================================================ /* * Copyright (C) 1999 Francois Gouget * Copyright (C) 1999 Peter Hunnisett * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DPLOBBY_H #define __WINE_DPLOBBY_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(CLSID_DirectPlayLobby, 0x2fe8f810, 0xb2a5, 0x11d0, 0xa7, 0x87, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc); DEFINE_GUID(IID_IDirectPlayLobby, 0xaf465c71, 0x9588, 0x11cf, 0xa0, 0x20, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac); typedef struct IDirectPlayLobby *LPDIRECTPLAYLOBBY; DEFINE_GUID(IID_IDirectPlayLobbyA, 0x26c66a70, 0xb367, 0x11cf, 0xa0, 0x24, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac); typedef struct IDirectPlayLobby IDirectPlayLobbyA,*LPDIRECTPLAYLOBBYA; DEFINE_GUID(IID_IDirectPlayLobby2, 0x194c220, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); typedef struct IDirectPlayLobby2 *LPDIRECTPLAYLOBBY2; DEFINE_GUID(IID_IDirectPlayLobby2A, 0x1bb4af80, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); typedef struct IDirectPlayLobby2 IDirectPlayLobby2A, *LPDIRECTPLAYLOBBY2A; DEFINE_GUID(IID_IDirectPlayLobby3, 0x2db72490, 0x652c, 0x11d1, 0xa7, 0xa8, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc); typedef struct IDirectPlayLobby3 *LPDIRECTPLAYLOBBY3; DEFINE_GUID(IID_IDirectPlayLobby3A, 0x2db72491, 0x652c, 0x11d1, 0xa7, 0xa8, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc); typedef struct IDirectPlayLobby3 IDirectPlayLobby3A, *LPDIRECTPLAYLOBBY3A; /***************************************************************************** * DirectPlayLobby Property GUIDs used in lobby messages */ /* DPLPROPERTY_MessagesSupported {762CCDA1-D916-11d0-BA39-00C04FD7ED67}. * Purpose: Request if the lobby supports standard (?). * Response: Answer is a BOOL. TRUE if supports the standard (?) and FALSE otherwise. Of course, it might not respond at all. */ DEFINE_GUID(DPLPROPERTY_MessagesSupported, 0x762ccda1, 0xd916, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67); /* DPLPROPERTY_LobbyGuid {F56920A0-D218-11d0-BA39-00C04FD7ED67}. * Purpose: Request the GUID that identifies the lobby version that the application is communicating with. * Response: The GUID which identifies the lobby version */ DEFINE_GUID(DPLPROPERTY_LobbyGuid, 0xf56920a0, 0xd218, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67); /* DPLPROPERTY_PlayerGuid {B4319322-D20D-11d0-BA39-00C04FD7ED67} * Purpose: Request the GUID that identifies the player for this particular machine. * Response: DPLDATA_PLAYERDATA structure. */ DEFINE_GUID(DPLPROPERTY_PlayerGuid, 0xb4319322, 0xd20d, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67); /* DPLPROPERTY_PlayerScore {48784000-D219-11d0-BA39-00C04FD7ED67} * Purpose: Used to send a score of a player to the lobby. The format is an array of long integers. * Response: I don't think there is one. */ DEFINE_GUID(DPLPROPERTY_PlayerScore, 0x48784000, 0xd219, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67); /***************************************************************************** * LOBBY structures associated with GUID messages */ typedef struct tagDPLDATA_PLAYERGUID { GUID guidPlayer; DWORD dwPlayerFlags; } DPLDATA_PLAYERGUID, *LPDPLDATA_PLAYERGUID; typedef struct tagDPLDATA_PLAYERSCORE { DWORD dwScoreCount; LONG Score[1]; } DPLDATA_PLAYERSCORE, *LPDPLDATA_PLAYERSCORE; /***************************************************************************** * LOBBY messages and message data structures. * * System messages can be identified by dwMessageFlags having a value of DPLMSG_SYSTEM * after a call to ReceiveLobbyMessage. * * Standard messages can be identified by dwMessageFlags having a value of DPLMSG_STANDARD * after a call to ReceiveLobbyMessage. */ /* DPLobby1 definition required for backwards compatibility */ #define DPLMSG_SYSTEM 0x00000001 #define DPLMSG_STANDARD 0x00000002 #define DPLAD_SYSTEM DPLMSG_SYSTEM /* System messages - dwType field for messages */ #define DPLSYS_CONNECTIONSETTINGSREAD 0x00000001 #define DPLSYS_DPLAYCONNECTFAILED 0x00000002 #define DPLSYS_DPLAYCONNECTSUCCEEDED 0x00000003 #define DPLSYS_APPTERMINATED 0x00000004 #define DPLSYS_SETPROPERTY 0x00000005 #define DPLSYS_SETPROPERTYRESPONSE 0x00000006 #define DPLSYS_GETPROPERTY 0x00000007 #define DPLSYS_GETPROPERTYRESPONSE 0x00000008 #define DPLSYS_NEWSESSIONHOST 0x00000009 #define DPLSYS_NEWCONNECTIONSETTINGS 0x0000000A /* Used to identify the message type */ typedef struct tagDPLMSG_GENERIC { DWORD dwType; /* Message type */ } DPLMSG_GENERIC, *LPDPLMSG_GENERIC; /* Generic format for system messages - see above */ typedef struct tagDPLMSG_SYSTEMMESSAGE { DWORD dwType; /* Message type */ GUID guidInstance; /* Instance GUID of the dplay session the message corresponds to */ } DPLMSG_SYSTEMMESSAGE, *LPDPLMSG_SYSTEMMESSAGE; /* Generic message to set a property - see property GUIDs above */ typedef struct tagDPLMSG_SETPROPERTY { DWORD dwType; /* Message type */ DWORD dwRequestID; /* Request ID (DPL_NOCONFIRMATION if no confirmation desired) */ GUID guidPlayer; /* Player GUID */ GUID guidPropertyTag; /* Property GUID */ DWORD dwDataSize; /* Size of data */ DWORD dwPropertyData[1]; /* Buffer containing data */ } DPLMSG_SETPROPERTY, *LPDPLMSG_SETPROPERTY; #define DPL_NOCONFIRMATION 0 /* Reply to DPLMSG_SETPROPERTY */ typedef struct tagDPLMSG_SETPROPERTYRESPONSE { DWORD dwType; /* Message type */ DWORD dwRequestID; /* Request ID */ GUID guidPlayer; /* Player GUID */ GUID guidPropertyTag; /* Property GUID */ HRESULT hr; /* Return Code */ } DPLMSG_SETPROPERTYRESPONSE, *LPDPLMSG_SETPROPERTYRESPONSE; /* Request to get the present value of a property */ typedef struct tagDPLMSG_GETPROPERTY { DWORD dwType; /* Message type */ DWORD dwRequestID; /* Request ID */ GUID guidPlayer; /* Player GUID */ GUID guidPropertyTag; /* Property GUID */ } DPLMSG_GETPROPERTY, *LPDPLMSG_GETPROPERTY; /* Response to a request to get the present value of a property */ typedef struct tagDPLMSG_GETPROPERTYRESPONSE { DWORD dwType; /* Message type */ DWORD dwRequestID; /* Request ID */ GUID guidPlayer; /* Player GUID */ GUID guidPropertyTag; /* Property GUID */ HRESULT hr; /* Return Code */ DWORD dwDataSize; /* Size of data */ DWORD dwPropertyData[1]; /* Buffer containing data */ } DPLMSG_GETPROPERTYRESPONSE, *LPDPLMSG_GETPROPERTYRESPONSE; /* Standard message in response to a session host migration to a new client */ typedef struct tagDPLMSG_NEWSESSIONHOST { DWORD dwType; /* Message type */ GUID guidInstance; /* GUID Instance of the session */ } DPLMSG_NEWSESSIONHOST, *LPDPLMSG_NEWSESSIONHOST; /***************************************************************************** * DirectPlay Address ID's * A DirectPlay address is composed of multiple data chunks, each associated with * a GUID to give significance to the type of data. All chunks have an associated * size so that unknown chunks can be ignored for backwards compatibility! * EnumAddresses function is used to parse the address data chunks. */ /* DPAID_TotalSize {1318F560-912C-11d0-9DAA-00A0C90A43CB} * Chunk purpose: Chunk is a DWORD containing the size of the entire DPADDRESS struct */ DEFINE_GUID(DPAID_TotalSize, 0x1318f560, 0x912c, 0x11d0, 0x9d, 0xaa, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb); /* DPAID_ServiceProvider {07D916C0-E0AF-11cf-9C4E-00A0C905425E} * Chunk purpose: Chunk is a GUID indicated what service provider created the chunk. */ DEFINE_GUID(DPAID_ServiceProvider, 0x7d916c0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); /* DPAID_LobbyProvider {59B95640-9667-11d0-A77D-0000F803ABFC} * Chunk purpose: Chunk is a GUID indicating what lobby provider created the chunk. */ DEFINE_GUID(DPAID_LobbyProvider, 0x59b95640, 0x9667, 0x11d0, 0xa7, 0x7d, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc); /* DPAID_Phone {78EC89A0-E0AF-11cf-9C4E-00A0C905425E} -- ANSI * DPAID_PhoneW {BA5A7A70-9DBF-11d0-9CC1-00A0C905425E} -- UNICODE * Chunk purpose: Chunk is a phone number in ANSI or UNICODE format */ DEFINE_GUID(DPAID_Phone, 0x78ec89a0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); DEFINE_GUID(DPAID_PhoneW, 0xba5a7a70, 0x9dbf, 0x11d0, 0x9c, 0xc1, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); /* DPAID_Modem {F6DCC200-A2FE-11d0-9C4F-00A0C905425E} -- ANSI * DPAID_ModemW {01FD92E0-A2FF-11d0-9C4F-00A0C905425E} -- UNICODE * Chunk purpose: Chunk is a modem name registered with TAPI */ DEFINE_GUID(DPAID_Modem, 0xf6dcc200, 0xa2fe, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); DEFINE_GUID(DPAID_ModemW, 0x1fd92e0, 0xa2ff, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); /* DPAID_INet {C4A54DA0-E0AF-11cf-9C4E-00A0C905425E} -- ANSI * DPAID_INetW {E63232A0-9DBF-11d0-9CC1-00A0C905425E} -- UNICODE * Chunk purpose: Chunk is a string containing a TCP/IP host name or IP address */ DEFINE_GUID(DPAID_INet, 0xc4a54da0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); DEFINE_GUID(DPAID_INetW, 0xe63232a0, 0x9dbf, 0x11d0, 0x9c, 0xc1, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); /* DPAID_INetPort {E4524541-8EA5-11d1-8A96-006097B01411} * Chunk purpose: Chunk is a port number used for creating TCP and UDP sockets. (WORD) */ DEFINE_GUID(DPAID_INetPort, 0xe4524541, 0x8ea5, 0x11d1, 0x8a, 0x96, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11); /* DPAID_ComPort {F2F0CE00-E0AF-11cf-9C4E-00A0C905425E} * Chunk purpose: Chunk contains the description of a serial port. */ DEFINE_GUID(DPAID_ComPort, 0xf2f0ce00, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); /* Header block for address data elements */ typedef struct tagDPADDRESS { GUID guidDataType; DWORD dwDataSize; } DPADDRESS, *LPDPADDRESS; /* Used for specification of a communication port. Baud rate, stop bits and * parity bits can be found in winbase.h. These are flow control constants only. */ #define DPCPA_NOFLOW 0 /* no flow control */ #define DPCPA_XONXOFFFLOW 1 /* software flow control */ #define DPCPA_RTSFLOW 2 /* hardware flow control with RTS */ #define DPCPA_DTRFLOW 3 /* hardware flow control with DTR */ #define DPCPA_RTSDTRFLOW 4 /* hardware flow control with RTS and DTR */ typedef struct tagDPCOMPORTADDRESS { DWORD dwComPort; /* COM port to use (1-4) */ DWORD dwBaudRate; /* baud rate (100-256k) */ DWORD dwStopBits; /* no. stop bits (1-2) */ DWORD dwParity; /* parity (none, odd, even, mark) */ DWORD dwFlowControl; /* flow control (none, xon/xoff, rts, dtr) */ } DPCOMPORTADDRESS, *LPDPCOMPORTADDRESS; /**************************************************************************** * Miscellaneous */ typedef struct tagDPLAPPINFO { DWORD dwSize; GUID guidApplication; union { LPSTR lpszAppNameA; LPWSTR lpszAppName; } DUMMYUNIONNAME; } DPLAPPINFO, *LPDPLAPPINFO; typedef const DPLAPPINFO *LPCDPLAPPINFO; typedef struct DPCOMPOUNDADDRESSELEMENT { GUID guidDataType; DWORD dwDataSize; LPVOID lpData; } DPCOMPOUNDADDRESSELEMENT, *LPDPCOMPOUNDADDRESSELEMENT; typedef const DPCOMPOUNDADDRESSELEMENT *LPCDPCOMPOUNDADDRESSELEMENT; typedef struct tagDPAPPLICATIONDESC { DWORD dwSize; DWORD dwFlags; union { LPSTR lpszApplicationNameA; LPWSTR lpszApplicationName; } DUMMYUNIONNAME1; GUID guidApplication; union { LPSTR lpszFilenameA; LPWSTR lpszFilename; } DUMMYUNIONNAME2; union { LPSTR lpszCommandLineA; LPWSTR lpszCommandLine; } DUMMYUNIONNAME3; union { LPSTR lpszPathA; LPWSTR lpszPath; } DUMMYUNIONNAME4; union { LPSTR lpszCurrentDirectoryA; LPWSTR lpszCurrentDirectory; } DUMMYUNIONNAME5; LPSTR lpszDescriptionA; LPWSTR lpszDescriptionW; } DPAPPLICATIONDESC, *LPDPAPPLICATIONDESC; extern HRESULT WINAPI DirectPlayLobbyCreateW(LPGUID, LPDIRECTPLAYLOBBY*, IUnknown*, LPVOID, DWORD ); extern HRESULT WINAPI DirectPlayLobbyCreateA(LPGUID, LPDIRECTPLAYLOBBYA*, IUnknown*, LPVOID, DWORD ); #define DirectPlayLobbyCreate WINELIB_NAME_AW(DirectPlayLobbyCreate) typedef BOOL (CALLBACK *LPDPENUMADDRESSCALLBACK)( REFGUID guidDataType, DWORD dwDataSize, LPCVOID lpData, LPVOID lpContext ); typedef BOOL (CALLBACK *LPDPLENUMADDRESSTYPESCALLBACK)( REFGUID guidDataType, LPVOID lpContext, DWORD dwFlags ); typedef BOOL (CALLBACK *LPDPLENUMLOCALAPPLICATIONSCALLBACK)( LPCDPLAPPINFO lpAppInfo, LPVOID lpContext, DWORD dwFlags ); /***************************************************************************** * IDirectPlayLobby and IDirectPlayLobbyA interface */ #define INTERFACE IDirectPlayLobby DECLARE_INTERFACE_(IDirectPlayLobby,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlayLobby methods ***/ STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE; STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE; STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE; STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE; STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE; STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE; STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE; STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE; STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE; STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE; STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectPlayLobby2 and IDirectPlayLobby2A interface */ #define INTERFACE IDirectPlayLobby2 DECLARE_INTERFACE_(IDirectPlayLobby2,IDirectPlayLobby) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlayLobby methods ***/ STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE; STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE; STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE; STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE; STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE; STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE; STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE; STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE; STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE; STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE; STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE; /*** IDirectPlayLobby2 methods ***/ STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE; }; #undef INTERFACE /***************************************************************************** * IDirectPlayLobby3 and IDirectPlayLobby3A interface */ #define INTERFACE IDirectPlayLobby3 DECLARE_INTERFACE_(IDirectPlayLobby3,IDirectPlayLobby2) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlayLobby methods ***/ STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE; STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE; STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE; STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE; STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE; STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE; STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE; STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE; STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE; STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE; STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE; /*** IDirectPlayLobby2 methods ***/ STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE; /*** IDirectPlayLobby3 methods ***/ STDMETHOD(ConnectEx)(THIS_ DWORD, REFIID, LPVOID *, IUnknown *) PURE; STDMETHOD(RegisterApplication)(THIS_ DWORD, LPDPAPPLICATIONDESC) PURE; STDMETHOD(UnregisterApplication)(THIS_ DWORD, REFGUID) PURE; STDMETHOD(WaitForConnectionSettings)(THIS_ DWORD) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlayLobby_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlayLobby_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlayLobby_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlayLobby methods ***/ #define IDirectPlayLobby_Connect(p,a,b,c) (p)->lpVtbl->Connect(p,a,b,c) #define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f) #define IDirectPlayLobby_EnumAddress(p,a,b,c,d) (p)->lpVtbl->EnumAddress(p,a,b,c,d) #define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d) (p)->lpVtbl->EnumAddressTypes(p,a,b,c,d) #define IDirectPlayLobby_EnumLocalApplications(p,a,b,c) (p)->lpVtbl->EnumLocalApplications(p,a,b,c) #define IDirectPlayLobby_GetConnectionSettings(p,a,b,c) (p)->lpVtbl->GetConnectionSettings(p,a,b,c) #define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e) (p)->lpVtbl->ReceiveLobbyMessage(p,a,b,c,d,e) #define IDirectPlayLobby_RunApplication(p,a,b,c,d) (p)->lpVtbl->RunApplication(p,a,b,c,d) #define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d) (p)->lpVtbl->SendLobbyMessage(p,a,b,c,d) #define IDirectPlayLobby_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->SetConnectionSettings(p,a,b,c) #define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c) (p)->lpVtbl->SetLobbyMessageEvent(p,a,b,c) /*** IDirectPlayLobby2 methods ***/ #define IDirectPlayLobby_CreateCompoundAddress(p,a,b,c,d) (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d) /*** IDirectPlayLobby3 methods ***/ #define IDirectPlayLobby_ConnectEx(p,a,b,c,d) (p)->lpVtbl->ConnectEx(p,a,b,c,d) #define IDirectPlayLobby_RegisterApplication(p,a,b) (p)->lpVtbl->RegisterApplication(p,a,b) #define IDirectPlayLobby_UnregisterApplication(p,a,b) (p)->lpVtbl->UnregisterApplication(p,a,b) #define IDirectPlayLobby_WaitForConnectionSettings(p,a) (p)->lpVtbl->WaitForConnectionSettings(p,a) #else /*** IUnknown methods ***/ #define IDirectPlayLobby_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlayLobby_AddRef(p) (p)->AddRef() #define IDirectPlayLobby_Release(p) (p)->Release() /*** IDirectPlayLobby methods ***/ #define IDirectPlayLobby_Connect(p,a,b,c) (p)->Connect(a,b,c) #define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f) (p)->CreateAddress(a,b,c,d,e,f) #define IDirectPlayLobby_EnumAddress(p,a,b,c,d) (p)->EnumAddress(a,b,c,d) #define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d) (p)->EnumAddressTypes(a,b,c,d) #define IDirectPlayLobby_EnumLocalApplications(p,a,b,c) (p)->EnumLocalApplications(a,b,c) #define IDirectPlayLobby_GetConnectionSettings(p,a,b,c) (p)->GetConnectionSettings(a,b,c) #define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e) (p)->ReceiveLobbyMessage(a,b,c,d,e) #define IDirectPlayLobby_RunApplication(p,a,b,c,d) (p)->RunApplication(a,b,c,d) #define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d) (p)->SendLobbyMessage(a,b,c,d) #define IDirectPlayLobby_SetConnectionSettings(p,a,b,c) (p)->SetConnectionSettings(a,b,c) #define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c) (p)->SetLobbyMessageEvent(a,b,c) /*** IDirectPlayLobby2 methods ***/ #define IDirectPlayLobby_CreateCompoundAddress(p,a,b,c,d) (p)->CreateCompoundAddress(a,b,c,d) /*** IDirectPlayLobby3 methods ***/ #define IDirectPlayLobby_ConnectEx(p,a,b,c,d) (p)->ConnectEx(a,b,c,d) #define IDirectPlayLobby_RegisterApplication(p,a,b) (p)->RegisterApplication(a,b) #define IDirectPlayLobby_UnregisterApplication(p,a,b) (p)->UnregisterApplication(a,b) #define IDirectPlayLobby_WaitForConnectionSettings(p,a) (p)->WaitForConnectionSettings(a) #endif /* Used for WaitForConnectionSettings */ #define DPLWAIT_CANCEL 0x00000001 #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_DPLOBBY_H */ ================================================ FILE: wine/windows/dplobby8.h ================================================ /* * Copyright (C) 2003-2005 Raphael Junqueira * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DPLOBBY8_H #define __WINE_DPLOBBY8_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /***************************************************************************** * DirectPlay8Lobby defines */ #define DPL_MSGID_LOBBY 0x8000 #define DPL_MSGID_RECEIVE (0x0001 | DPL_MSGID_LOBBY) #define DPL_MSGID_CONNECT (0x0002 | DPL_MSGID_LOBBY) #define DPL_MSGID_DISCONNECT (0x0003 | DPL_MSGID_LOBBY) #define DPL_MSGID_SESSION_STATUS (0x0004 | DPL_MSGID_LOBBY) #define DPL_MSGID_CONNECTION_SETTINGS (0x0005 | DPL_MSGID_LOBBY) #define DPLHANDLE_ALLCONNECTIONS 0xFFFFFFFF #define DPLSESSION_CONNECTED 0x0001 #define DPLSESSION_COULDNOTCONNECT 0x0002 #define DPLSESSION_DISCONNECTED 0x0003 #define DPLSESSION_TERMINATED 0x0004 #define DPLSESSION_HOSTMIGRATED 0x0005 #define DPLSESSION_HOSTMIGRATEDHERE 0x0006 #define DPLAVAILABLE_ALLOWMULTIPLECONNECT 0x0001 #define DPLCONNECT_LAUNCHNEW 0x0001 #define DPLCONNECT_LAUNCHNOTFOUND 0x0002 #define DPLCONNECTSETTINGS_HOST 0x0001 #define DPLINITIALIZE_DISABLEPARAMVAL 0x0001 /***************************************************************************** * DirectPlay8Lobby structures Typedefs */ typedef struct _DPL_APPLICATION_INFO { GUID guidApplication; PWSTR pwszApplicationName; DWORD dwNumRunning; DWORD dwNumWaiting; DWORD dwFlags; } DPL_APPLICATION_INFO, *PDPL_APPLICATION_INFO; typedef struct _DPL_CONNECTION_SETTINGS { DWORD dwSize; DWORD dwFlags; DPN_APPLICATION_DESC dpnAppDesc; IDirectPlay8Address* pdp8HostAddress; IDirectPlay8Address** ppdp8DeviceAddresses; DWORD cNumDeviceAddresses; PWSTR pwszPlayerName; } DPL_CONNECTION_SETTINGS, *PDPL_CONNECTION_SETTINGS; typedef struct _DPL_CONNECT_INFO { DWORD dwSize; DWORD dwFlags; GUID guidApplication; PDPL_CONNECTION_SETTINGS pdplConnectionSettings; PVOID pvLobbyConnectData; DWORD dwLobbyConnectDataSize; } DPL_CONNECT_INFO, *PDPL_CONNECT_INFO; typedef struct _DPL_PROGRAM_DESC { DWORD dwSize; DWORD dwFlags; GUID guidApplication; PWSTR pwszApplicationName; PWSTR pwszCommandLine; PWSTR pwszCurrentDirectory; PWSTR pwszDescription; PWSTR pwszExecutableFilename; PWSTR pwszExecutablePath; PWSTR pwszLauncherFilename; PWSTR pwszLauncherPath; } DPL_PROGRAM_DESC, *PDPL_PROGRAM_DESC; typedef struct _DPL_MESSAGE_CONNECT { DWORD dwSize; DPNHANDLE hConnectId; PDPL_CONNECTION_SETTINGS pdplConnectionSettings; PVOID pvLobbyConnectData; DWORD dwLobbyConnectDataSize; PVOID pvConnectionContext; } DPL_MESSAGE_CONNECT, *PDPL_MESSAGE_CONNECT; typedef struct _DPL_MESSAGE_CONNECTION_SETTINGS { DWORD dwSize; DPNHANDLE hSender; PDPL_CONNECTION_SETTINGS pdplConnectionSettings; PVOID pvConnectionContext; } DPL_MESSAGE_CONNECTION_SETTINGS, *PDPL_MESSAGE_CONNECTION_SETTINGS; typedef struct _DPL_MESSAGE_DISCONNECT { DWORD dwSize; DPNHANDLE hDisconnectId; HRESULT hrReason; PVOID pvConnectionContext; } DPL_MESSAGE_DISCONNECT, *PDPL_MESSAGE_DISCONNECT; typedef struct _DPL_MESSAGE_RECEIVE { DWORD dwSize; DPNHANDLE hSender; BYTE* pBuffer; DWORD dwBufferSize; PVOID pvConnectionContext; } DPL_MESSAGE_RECEIVE, *PDPL_MESSAGE_RECEIVE; typedef struct _DPL_MESSAGE_SESSION_STATUS { DWORD dwSize; DPNHANDLE hSender; DWORD dwStatus; PVOID pvConnectionContext; } DPL_MESSAGE_SESSION_STATUS, *PDPL_MESSAGE_SESSION_STATUS; /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(CLSID_DirectPlay8LobbiedApplication, 0x667955ad,0x6b3b,0x43ca,0xb9,0x49,0xbc,0x69,0xb5,0xba,0xff,0x7f); DEFINE_GUID(CLSID_DirectPlay8LobbyClient, 0x3b2b6775,0x70b6,0x45af,0x8d,0xea,0xa2,0x09,0xc6,0x95,0x59,0xf3); DEFINE_GUID(IID_IDirectPlay8LobbiedApplication, 0x819074a3,0x16c,0x11d3,0xae,0x14,0x00,0x60,0x97,0xb0,0x14,0x11); typedef struct IDirectPlay8LobbiedApplication *PDIRECTPLAY8LOBBIEDAPPLICATION; DEFINE_GUID(IID_IDirectPlay8LobbyClient, 0x819074a2,0x16c,0x11d3,0xae,0x14,0x00,0x60,0x97,0xb0,0x14,0x11); typedef struct IDirectPlay8LobbyClient *PDIRECTPLAY8LOBBYCLIENT; /***************************************************************************** * IDirectPlay8LobbiedApplication interface */ #define INTERFACE IDirectPlay8LobbiedApplication DECLARE_INTERFACE_(IDirectPlay8LobbiedApplication,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8LobbiedApplication methods ***/ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DPNHANDLE* pdpnhConnection, DWORD dwFlags) PURE; STDMETHOD(RegisterProgram)(THIS_ PDPL_PROGRAM_DESC pdplProgramDesc, DWORD dwFlags) PURE; STDMETHOD(UnRegisterProgram)(THIS_ GUID* pguidApplication, DWORD dwFlags) PURE; STDMETHOD(Send)(THIS_ DPNHANDLE hConnection, BYTE* pBuffer, DWORD pBufferSize, DWORD dwFlags) PURE; STDMETHOD(SetAppAvailable)(THIS_ BOOL fAvailable, DWORD dwFlags) PURE; STDMETHOD(UpdateStatus)(THIS_ DPNHANDLE hConnection, DWORD dwStatus, DWORD dwFlags) PURE; STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetConnectionSettings)(THIS_ DPNHANDLE hConnection, DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD* pdwInfoSize, DWORD dwFlags) PURE; STDMETHOD(SetConnectionSettings)(THIS_ DPNHANDLE hConnection, const DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8LobbiedApplication_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay8LobbiedApplication_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay8LobbiedApplication_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay8LobbiedApplication methods ***/ #define IDirectPlay8LobbiedApplication_Initialize(p,a,b,c,d) (p)->lpVtbl->Initialize(p,a,b,c,d) #define IDirectPlay8LobbiedApplication_RegisterProgram(p,a,b) (p)->lpVtbl->RegisterProgram(p,a,b) #define IDirectPlay8LobbiedApplication_UnRegisterProgram(p,a,b) (p)->lpVtbl->UnRegisterProgram(p,a,b) #define IDirectPlay8LobbiedApplication_Send(p,a,b,c,d) (p)->lpVtbl->Send(p,a,b,c,d) #define IDirectPlay8LobbiedApplication_SetAppAvailable(p,a,b) (p)->lpVtbl->SetAppAvailable(p,a,b) #define IDirectPlay8LobbiedApplication_UpdateStatus(p,a,b,c) (p)->lpVtbl->UpdateStatus(p,a,b,c) #define IDirectPlay8LobbiedApplication_Close(p,a) (p)->lpVtbl->Close(p,a) #define IDirectPlay8LobbiedApplication_GetConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetConnectionSettings(p,a,b,c,d) #define IDirectPlay8LobbiedApplication_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->SetConnectionSettings(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlay8LobbiedApplication_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8LobbiedApplication_AddRef(p) (p)->AddRef() #define IDirectPlay8LobbiedApplication_Release(p) (p)->Release() /*** IDirectPlay8LobbiedApplication methods ***/ #define IDirectPlay8LobbiedApplication_Initialize(p,a,b,c,d) (p)->Initialize(a,b,c,d) #define IDirectPlay8LobbiedApplication_RegisterProgram(p,a,b) (p)->RegisterProgram(a,b) #define IDirectPlay8LobbiedApplication_UnRegisterProgram(p,a,b) (p)->UnRegisterProgram(a,b) #define IDirectPlay8LobbiedApplication_Send(p,a,b,c,d) (p)->Send(a,b,c,d) #define IDirectPlay8LobbiedApplication_SetAppAvailable(p,a,b) (p)->SetAppAvailable(a,b) #define IDirectPlay8LobbiedApplication_UpdateStatus(p,a,b,c) (p)->UpdateStatus(a,b,c) #define IDirectPlay8LobbiedApplication_Close(p,a) (p)->Close(a) #define IDirectPlay8LobbiedApplication_GetConnectionSettings(p,a,b,c,d) (p)->GetConnectionSettings(a,b,c,d) #define IDirectPlay8LobbiedApplication_SetConnectionSettings(p,a,b,c) (p)->SetConnectionSettings(a,b,c) #endif /***************************************************************************** * IDirectPlay8LobbyClient interface */ #define INTERFACE IDirectPlay8LobbyClient DECLARE_INTERFACE_(IDirectPlay8LobbyClient,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectPlay8LobbyClient methods ***/ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE; STDMETHOD(EnumLocalPrograms)(THIS_ GUID* pGuidApplication, BYTE* pEnumData, DWORD* pdwEnumData, DWORD* pdwItems, DWORD dwFlags) PURE; STDMETHOD(ConnectApplication)(THIS_ DPL_CONNECT_INFO* pdplConnectionInfo, PVOID pvConnectionContext, DPNHANDLE* hApplication, DWORD dwTimeOut, DWORD dwFlags) PURE; STDMETHOD(Send)(THIS_ DPNHANDLE hConnection, BYTE* pBuffer, DWORD pBufferSize, DWORD dwFlags) PURE; STDMETHOD(ReleaseApplication)(THIS_ DPNHANDLE hConnection, DWORD dwFlags) PURE; STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE; STDMETHOD(GetConnectionSettings)(THIS_ DPNHANDLE hConnection, DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD* pdwInfoSize, DWORD dwFlags) PURE; STDMETHOD(SetConnectionSettings)(THIS_ DPNHANDLE hConnection, const DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD dwFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectPlay8LobbyClient_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlay8LobbyClient_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlay8LobbyClient_Release(p) (p)->lpVtbl->Release(p) /*** IDirectPlay8LobbyClient methods ***/ #define IDirectPlay8LobbyClient_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectPlay8LobbyClient_EnumLocalPrograms(p,a,b,c,d,e) (p)->lpVtbl->EnumLocalPrograms(p,a,b,c,d,e) #define IDirectPlay8LobbyClient_ConnectApplication(p,a,b,c,d,e) (p)->lpVtbl->ConnectApplication(p,a,b,c,d,e) #define IDirectPlay8LobbyClient_Send(p,a,b,c,d) (p)->lpVtbl->Send(p,a,b,c,d) #define IDirectPlay8LobbyClient_ReleaseApplication(p,a,b) (p)->lpVtbl->ReleaseApplication(p,a,b) #define IDirectPlay8LobbyClient_Close(p,a) (p)->lpVtbl->Close(p,a) #define IDirectPlay8LobbyClient_GetConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetConnectionSettings(p,a,b,c,d) #define IDirectPlay8LobbyClient_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->SetConnectionSettings(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirectPlay8LobbyClient_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlay8LobbyClient_AddRef(p) (p)->AddRef() #define IDirectPlay8LobbyClient_Release(p) (p)->Release() /*** IDirectPlay8LobbyClient methods ***/ #define IDirectPlay8LobbyClient_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectPlay8LobbyClient_EnumLocalPrograms(p,a,b,c,d,e) (p)->EnumLocalPrograms(a,b,c,d,e) #define IDirectPlay8LobbyClient_ConnectApplication(p,a,b,c,d,e) (p)->ConnectApplication(a,b,c,d,e) #define IDirectPlay8LobbyClient_Send(p,a,b,c,d) (p)->Send(a,b,c,d) #define IDirectPlay8LobbyClient_ReleaseApplication(p,a,b) (p)->ReleaseApplication(a,b) #define IDirectPlay8LobbyClient_Close(p,a) (p)->Close(a) #define IDirectPlay8LobbyClient_GetConnectionSettings(p,a,b,c,d) (p)->GetConnectionSettings(a,b,c,d) #define IDirectPlay8LobbyClient_SetConnectionSettings(p,a,b,c) (p)->SetConnectionSettings(a,b,c) #endif /* Export functions */ HRESULT WINAPI DirectPlay8LobbyCreate(const GUID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/dpnathlp.h ================================================ /* * Copyright (C) 2006 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DPNATHLP_H__ #define __DPNATHLP_H__ #include #ifdef __cplusplus extern "C" { #endif HRESULT DirectPlayNATHelpCreate(LPCGUID pIID, LPVOID *ppvInterface); DEFINE_GUID(CLSID_DirectPlayNATHelpUPnP, 0xb9c2e9c4,0x68c1,0x4d42,0xa7,0xa1,0xe7,0x6a,0x26,0x98,0x2a,0xd6); DEFINE_GUID(CLSID_DirectPlayNATHelpPAST, 0x963ab779,0x16a1,0x477c,0xa3,0x6d,0xcb,0x5e,0x71,0x19,0x38,0xf7); DEFINE_GUID(IID_IDirectPlayNATHelp, 0x154940b6,0x2278,0x4a2f,0x91,0x01,0x9b,0xa9,0xf4,0x31,0xf6,0x03); #define DPNHGETCAPS_UPDATESERVERSTATUS 0x01 #define DPNHREGISTERPORTS_TCP 0x01 #define DPNHREGISTERPORTS_FIXEDPORTS 0x02 #define DPNHREGISTERPORTS_SHAREDPORTS 0x04 #define DPNHADDRESSTYPE_TCP 0x01 #define DPNHADDRESSTYPE_FIXEDPORTS 0x02 #define DPNHADDRESSTYPE_SHAREDPORTS 0x04 #define DPNHADDRESSTYPE_LOCALFIREWALL 0x08 #define DPNHADDRESSTYPE_GATEWAY 0x10 #define DPNHADDRESSTYPE_GATEWAYISLOCAL 0x20 #define DPNHCAPSFLAG_LOCALFIREWALLPRESENT 0x01 #define DPNHCAPSFLAG_GATEWAYPRESENT 0x02 #define DPNHCAPSFLAG_GATEWAYISLOCAL 0x04 #define DPNHCAPSFLAG_PUBLICADDRESSAVAILABLE 0x08 #define DPNHCAPSFLAG_NOTALLSUPPORTACTIVENOTIFY 0x10 #define DPNHINITIALIZE_DISABLEGATEWAYSUPPORT 0x01 #define DPNHINITIALIZE_DISABLELOCALFIREWALLSUPPORT 0x02 #define DPNHQUERYADDRESS_TCP 0x01 #define DPNHQUERYADDRESS_CACHEFOUND 0x02 #define DPNHQUERYADDRESS_CACHENOTFOUND 0x04 #define DPNHQUERYADDRESS_CHECKFORPRIVATEBUTUNMAPPED 0x08 #define DPNHGETREGISTEREDADDRESSES_LOCALFIREWALLREMAPONLY 0x01 #define _DPNH_FACILITY_CODE 0x015 #define _DPNH_HRESULT_BASE 0xF000 #define MAKE_DPNHSUCCESS(code) \ MAKE_HRESULT(0, _DPNH_FACILITY_CODE, (code + _DPNH_HRESULT_BASE)) #define MAKE_DPNHFAILURE(code) \ MAKE_HRESULT(1, _DPNH_FACILITY_CODE, (code + _DPNH_HRESULT_BASE)) #define DPNH_OK S_OK #define DPNHSUCCESS_ADDRESSESCHANGED MAKE_DPNHSUCCESS(0x10) #define DPNHERR_ALREADYINITIALIZED MAKE_DPNHFAILURE(0x10) #define DPNHERR_BUFFERTOOSMALL MAKE_DPNHFAILURE(0x20) #define DPNHERR_GENERIC E_FAIL #define DPNHERR_INVALIDFLAGS MAKE_DPNHFAILURE(0x30) #define DPNHERR_INVALIDOBJECT MAKE_DPNHFAILURE(0x40) #define DPNHERR_INVALIDPARAM E_INVALIDARG #define DPNHERR_INVALIDPOINTER E_POINTER #define DPNHERR_NOMAPPING MAKE_DPNHFAILURE(0x50) #define DPNHERR_NOMAPPINGBUTPRIVATE MAKE_DPNHFAILURE(0x60) #define DPNHERR_NOTINITIALIZED MAKE_DPNHFAILURE(0x70) #define DPNHERR_OUTOFMEMORY E_OUTOFMEMORY #define DPNHERR_PORTALREADYREGISTERED MAKE_DPNHFAILURE(0x80) #define DPNHERR_PORTUNAVAILABLE MAKE_DPNHFAILURE(0x90) #define DPNHERR_REENTRANT MAKE_DPNHFAILURE(0x95) #define DPNHERR_SERVERNOTAVAILABLE MAKE_DPNHFAILURE(0xA0) #define DPNHERR_UPDATESERVERSTATUS MAKE_DPNHFAILURE(0xC0) typedef DWORD_PTR DPNHHANDLE; typedef DWORD_PTR *PDPNHHANDLE; typedef struct _DPNHCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwNumRegisteredPorts; DWORD dwMinLeaseTimeRemaining; DWORD dwRecommendedGetCapsInterval; } DPNHCAPS, *PDPNHCAPS; #define INTERFACE IDirectPlayNATHelp DECLARE_INTERFACE_(IDirectPlayNATHelp,IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectPlayNATHelp functions ***/ STDMETHOD(Initialize) (THIS_ DWORD dwFlags) PURE; STDMETHOD(Close) (THIS_ DWORD dwFlags) PURE; STDMETHOD(GetCaps) (THIS_ PDPNHCAPS pCaps, DWORD dwFlags) PURE; STDMETHOD(RegisterPorts) (THIS_ PSOCKADDR aLocalAddresses, DWORD dwAddressSize, DWORD dwAddresses, DWORD dwTime, PDPNHHANDLE phRegisteredPorts, DWORD dwFlags) PURE; STDMETHOD(GetRegisteredAddresses) (THIS_ PDPNHHANDLE hRegisteredPorts, PSOCKADDR paPublicAddresses, const DWORD *dwAddressSize, const DWORD *dwAddressFlags, const DWORD *dwRemaining, DWORD dwFlags) PURE; STDMETHOD(DeregisterPorts)(THIS_ DPNHHANDLE hRegPorts, DWORD dwFlags) PURE; STDMETHOD(QueryAddress) (THIS_ PSOCKADDR pSource, PSOCKADDR pQuery, PSOCKADDR pResponse, INT iAddresses, DWORD dwFlags) PURE; STDMETHOD(SetAlertEvent) (THIS_ HANDLE hEvent, DWORD dwFlags) PURE; STDMETHOD(SetAlertIOCompletionPort)(THIS_ HANDLE hIOCompletionPort, DWORD dwCompletion, DWORD dwMaxThreads, DWORD dwFlags) PURE; STDMETHOD(ExtendRegisteredPortsLease)(THIS_ DPNHHANDLE hRegisteredPorts, DWORD dwLeaseTime, DWORD dwFlags) PURE; }; #undef INTERFACE #ifdef COBJMACROS #define IDirectPlayNATHelp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlayNATHelp_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlayNATHelp_Release(p) (p)->lpVtbl->Release(p) #define IDirectPlayNATHelp_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirectPlayNATHelp_Close(p,a) (p)->lpVtbl->Close(p,a) #define IDirectPlayNATHelp_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirectPlayNATHelp_RegisterPorts(p,a,b,c,d,e,f) (p)->lpVtbl->RegisterPorts(p,a,b,c,d,e,f) #define IDirectPlayNATHelp_GetRegisteredAddresses(p,a,b,c,d,e,f) (p)->lpVtbl->GetRegisteredAddresses(p,a,b,c,d,e,f) #define IDirectPlayNATHelp_DeregisterPorts(p,a,b) (p)->lpVtbl->DeregisterPorts(p,a,b) #define IDirectPlayNATHelp_QueryAddress(p,a,b,c,d,e) (p)->lpVtbl->QueryAddress(p,a,b,c,d,e) #define IDirectPlayNATHelp_SetAlertEvent(p,a,b) (p)->lpVtbl->SetAlertEvent(p,a,b) #define IDirectPlayNATHelp_SetAlertIOCompletionPort(p,a,b,c,d) (p)->lpVtbl->SetAlertIOCompletionPort(p,a,b,c,d) #define IDirectPlayNATHelp_ExtendRegisteredPortsLease(p,a,b,c) (p)->lpVtbl->SetAlertIOCompletionPort(p,a,b,c) #endif #ifdef __cplusplus } #endif #endif /* __DPNATHLP_H__ */ ================================================ FILE: wine/windows/drmexternals.idl ================================================ /* * Copyright 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wmdrmsdk.idl"; ================================================ FILE: wine/windows/dsconf.h ================================================ /* * Copyright (C) 2003 Robert Reif * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DSCONF_H #define __WINE_DSCONF_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(CLSID_DirectSoundPrivate, 0x11ab3ec0,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca); DEFINE_GUID(DSPROPSETID_DirectSoundDevice, 0x84624f82,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca); typedef enum { DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A = 1, DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1 = 2, DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 = 3, DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W = 4, DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A = 5, DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W = 6, DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A = 7, DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W = 8, } DSPROPERTY_DIRECTSOUNDDEVICE; #ifdef UNICODE #define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W #define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W #define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W #else #define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A #define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A #define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A #endif typedef enum { DIRECTSOUNDDEVICE_TYPE_EMULATED, DIRECTSOUNDDEVICE_TYPE_VXD, DIRECTSOUNDDEVICE_TYPE_WDM } DIRECTSOUNDDEVICE_TYPE; typedef enum { DIRECTSOUNDDEVICE_DATAFLOW_RENDER, DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE } DIRECTSOUNDDEVICE_DATAFLOW; typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA { LPSTR DeviceName; DIRECTSOUNDDEVICE_DATAFLOW DataFlow; GUID DeviceId; } DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA; typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA { LPWSTR DeviceName; DIRECTSOUNDDEVICE_DATAFLOW DataFlow; GUID DeviceId; } DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA; #ifdef UNICODE #define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA #define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA #else #define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA #define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA #endif typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA { GUID DeviceId; CHAR DescriptionA[0x100]; WCHAR DescriptionW[0x100]; CHAR ModuleA[MAX_PATH]; WCHAR ModuleW[MAX_PATH]; DIRECTSOUNDDEVICE_TYPE Type; DIRECTSOUNDDEVICE_DATAFLOW DataFlow; ULONG WaveDeviceId; ULONG Devnode; } DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA; typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA { DIRECTSOUNDDEVICE_TYPE Type; DIRECTSOUNDDEVICE_DATAFLOW DataFlow; GUID DeviceId; LPSTR Description; LPSTR Module; LPSTR Interface; ULONG WaveDeviceId; } DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA; typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA { DIRECTSOUNDDEVICE_TYPE Type; DIRECTSOUNDDEVICE_DATAFLOW DataFlow; GUID DeviceId; LPWSTR Description; LPWSTR Module; LPWSTR Interface; ULONG WaveDeviceId; } DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA; #ifdef UNICODE #define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA #define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA #else #define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA #define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA #endif typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, LPVOID); typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, LPVOID); typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, LPVOID); typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA { LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1 Callback; LPVOID Context; } DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA; typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA { LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA Callback; LPVOID Context; } DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA; typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA { LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW Callback; LPVOID Context; } DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA; #ifdef UNICODE #define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA #define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA #else #define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA #define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_DSCONF_H */ ================================================ FILE: wine/windows/dsgetdc.h ================================================ /* * Copyright (C) 2006 Robert Reif * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DSGETDC_H #define __WINE_DSGETDC_H #ifdef __cplusplus extern "C" { #endif #define DS_FORCE_REDISCOVERY 0x00000001 #define DS_DIRECTORY_SERVICE_REQUIRED 0x00000010 #define DS_DIRECTORY_SERVICE_PREFERRED 0x00000020 #define DS_GC_SERVER_REQUIRED 0x00000040 #define DS_PDC_REQUIRED 0x00000080 #define DS_BACKGROUND_ONLY 0x00000100 #define DS_IP_REQUIRED 0x00000200 #define DS_KDC_REQUIRED 0x00000400 #define DS_TIMESERV_REQUIRED 0x00000800 #define DS_WRITABLE_REQUIRED 0x00001000 #define DS_GOOD_TIMESERV_PREFERRED 0x00002000 #define DS_AVOID_SELF 0x00004000 #define DS_ONLY_LDAP_NEEDED 0x00008000 #define DS_IS_FLAT_NAME 0x00010000 #define DS_IS_DNS_NAME 0x00020000 #define DS_RETURN_DNS_NAME 0x40000000 #define DS_RETURN_FLAT_NAME 0x80000000 #define DSGETDC_VALID_FLAGS ( \ DS_FORCE_REDISCOVERY | \ DS_DIRECTORY_SERVICE_REQUIRED | \ DS_DIRECTORY_SERVICE_PREFERRED | \ DS_GC_SERVER_REQUIRED | \ DS_PDC_REQUIRED | \ DS_BACKGROUND_ONLY | \ DS_IP_REQUIRED | \ DS_KDC_REQUIRED | \ DS_TIMESERV_REQUIRED | \ DS_WRITABLE_REQUIRED | \ DS_GOOD_TIMESERV_PREFERRED | \ DS_AVOID_SELF | \ DS_ONLY_LDAP_NEEDED | \ DS_IS_FLAT_NAME | \ DS_IS_DNS_NAME | \ DS_RETURN_FLAT_NAME | \ DS_RETURN_DNS_NAME ) typedef struct _DOMAIN_CONTROLLER_INFOA { LPSTR DomainControllerName; LPSTR DomainControllerAddress; ULONG DomainControllerAddressType; GUID DomainGuid; LPSTR DomainName; LPSTR DnsForestName; ULONG Flags; LPSTR DcSiteName; LPSTR ClientSiteName; } DOMAIN_CONTROLLER_INFOA, *PDOMAIN_CONTROLLER_INFOA; typedef struct _DOMAIN_CONTROLLER_INFOW { LPWSTR DomainControllerName; LPWSTR DomainControllerAddress; ULONG DomainControllerAddressType; GUID DomainGuid; LPWSTR DomainName; LPWSTR DnsForestName; ULONG Flags; LPWSTR DcSiteName; LPWSTR ClientSiteName; } DOMAIN_CONTROLLER_INFOW, *PDOMAIN_CONTROLLER_INFOW; typedef struct _DS_DOMAIN_TRUSTSA { LPSTR NetbiosDomainName; LPSTR DnsDomainName; ULONG Flags; ULONG ParentIndex; ULONG TrustType; ULONG TrustAttributes; PSID DomainSid; GUID DomainGuid; } DS_DOMAIN_TRUSTSA, *PDS_DOMAIN_TRUSTSA; typedef struct _DS_DOMAIN_TRUSTSW { LPWSTR NetbiosDomainName; LPWSTR DnsDomainName; ULONG Flags; ULONG ParentIndex; ULONG TrustType; ULONG TrustAttributes; PSID DomainSid; GUID DomainGuid; } DS_DOMAIN_TRUSTSW, *PDS_DOMAIN_TRUSTSW; DECL_WINELIB_TYPE_AW(DOMAIN_CONTROLLER_INFO) DWORD WINAPI DsGetDcNameA(LPCSTR,LPCSTR,GUID*,LPCSTR,ULONG,PDOMAIN_CONTROLLER_INFOA*); DWORD WINAPI DsGetDcNameW(LPCWSTR,LPCWSTR,GUID*,LPCWSTR,ULONG,PDOMAIN_CONTROLLER_INFOW*); #define DsGetDcName WINELIB_NAME_AW(DsGetDcName) DWORD WINAPI DsGetSiteNameA(LPCSTR ComputerName, LPSTR *SiteName); DWORD WINAPI DsGetSiteNameW(LPCWSTR ComputerName, LPWSTR *SiteName); #define DsGetSiteName WINELIB_NAME_AW(DsGetSiteName) DWORD WINAPI DsEnumerateDomainTrustsA(LPSTR, ULONG, PDS_DOMAIN_TRUSTSA*, PULONG); DWORD WINAPI DsEnumerateDomainTrustsW(LPWSTR, ULONG, PDS_DOMAIN_TRUSTSW*, PULONG); #define DsEnumerateDomainTrusts WINELIB_NAME_AW(DsEnumerateDomainTrusts) #ifdef __cplusplus } #endif #endif /* __WINE_DSGETDC_H */ ================================================ FILE: wine/windows/dshow.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DSHOW_INCLUDED__ #define __DSHOW_INCLUDED__ #define AM_NOVTABLE #include #ifndef __WINESRC__ # include #endif #include #include #include #ifndef NO_DSHOW_STRSAFE #define NO_SHLWAPI_STRFCNS #include #endif #ifndef NUMELMS #define NUMELMS(array) (sizeof(array)/sizeof((array)[0])) #endif #include #include #ifdef DSHOW_USE_AMAUDIO #include #endif #include #include #include #include /* FIXME: #include */ #include /* FIXME: #include */ #ifndef OATRUE #define OATRUE (-1) #endif #ifndef OAFALSE #define OAFALSE (0) #endif #endif /* __DSHOW_INCLUDED__ */ ================================================ FILE: wine/windows/dsound.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DSOUND_INCLUDED__ #define __DSOUND_INCLUDED__ #ifndef DIRECTSOUND_VERSION #define DIRECTSOUND_VERSION 0x0900 #endif #define COM_NO_WINDOWS_H #include #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifndef DX_SHARED_DEFINES typedef float D3DVALUE, *LPD3DVALUE; #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR, *LPD3DCOLOR; #define D3DCOLOR_DEFINED #endif #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; #define D3DVECTOR_DEFINED #endif #ifndef LPD3DVECTOR_DEFINED typedef D3DVECTOR *LPD3DVECTOR; #define LPD3DVECTOR_DEFINED #endif #define DX_SHARED_DEFINES #endif /* DX_SHARED_DEFINES */ /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00); DEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b); DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16); DEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1); DEFINE_GUID(CLSID_DirectSoundFullDuplex,0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d); DEFINE_GUID(IID_IDirectSound, 0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); typedef struct IDirectSound *LPDIRECTSOUND,**LPLPDIRECTSOUND; DEFINE_GUID(IID_IDirectSound8, 0xC50A7E93,0xF395,0x4834,0x9E,0xF6,0x7F,0xA9,0x9D,0xE5,0x09,0x66); typedef struct IDirectSound8 *LPDIRECTSOUND8,**LPLPDIRECTSOUND8; DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER,**LPLPDIRECTSOUNDBUFFER; DEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825A449,0x7524,0x4D82,0x92,0x0F,0x50,0xE3,0x6A,0xB3,0xAB,0x1E); typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8,**LPLPDIRECTSOUNDBUFFER8; DEFINE_GUID(IID_IDirectSoundNotify, 0xB0210783,0x89cd,0x11d0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16); typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY,**LPLPDIRECTSOUNDNOTIFY; #define IID_IDirectSoundNotify8 IID_IDirectSoundNotify DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER,**LPLPDIRECTSOUND3DLISTENER; DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER,**LPLPDIRECTSOUND3DBUFFER; DEFINE_GUID(IID_IDirectSoundCapture, 0xB0210781,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16); typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE,**LPLPDIRECTSOUNDCAPTURE; #define IID_IDirectSoundCapture8 IID_IDirectSoundCapture typedef struct IDirectSoundCapture IDirectSoundCapture8,*LPDIRECTSOUNDCAPTURE8,**LPLPDIRECTSOUNDCAPTURE8; DEFINE_GUID(IID_IDirectSoundCaptureBuffer,0xB0210782,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16); typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER,**LPLPDIRECTSOUNDCAPTUREBUFFER; DEFINE_GUID(IID_IDirectSoundCaptureBuffer8,0x00990DF4,0x0DBB,0x4872,0x83,0x3E,0x6D,0x30,0x3E,0x80,0xAE,0xB6); typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8,**LPLPDIRECTSOUNDCAPTUREBUFFER8; DEFINE_GUID(IID_IDirectSoundFullDuplex, 0xEDCB4C7A,0xDAAB,0x4216,0xA4,0x2E,0x6C,0x50,0x59,0x6D,0xDC,0x1D); typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX,**LPLPDIRECTSOUNDFULLDUPLEX; #define IID_IDirectSoundFullDuplex8 IID_IDirectSoundFullDuplex DEFINE_GUID(IID_IDirectSoundFXI3DL2Reverb, 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4); typedef struct IDirectSoundFXI3DL2Reverb *LPDIRECTSOUNDFXI3DL2REVERB; #define IDirectSoundFXI3DL2Reverb8 IDirectSoundFXI3DL2Reverb #define IID_IDirectSoundFXI3DL2Reverb8 IID_IDirectSoundFXI3DL2Reverb typedef struct IDirectSoundFXI3DL2Reverb8 *LPDIRECTSOUNDFXI3DL2REVERB8; DEFINE_GUID(DSDEVID_DefaultPlayback, 0xDEF00000,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03); DEFINE_GUID(DSDEVID_DefaultCapture, 0xDEF00001,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03); DEFINE_GUID(DSDEVID_DefaultVoicePlayback,0xDEF00002,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03); DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xDEF00003,0x9C6D,0x47ED,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03); DEFINE_GUID(DSDEVID_WinePlayback, 0x40316A1D,0x605B,0xD611,0x87,0xC6,0x00,0x80,0xAD,0x00,0x02,0xFE); DEFINE_GUID(GUID_DSFX_STANDARD_GARGLE, 0xDAFD8210,0x5711,0x4B91,0x9F,0xE3,0xF7,0x5B,0x7A,0xE2,0x79,0xBF); DEFINE_GUID(GUID_DSFX_STANDARD_CHORUS, 0xEFE6629C,0x81F7,0x4281,0xBD,0x91,0xC9,0xD6,0x04,0xA9,0x5A,0xF6); DEFINE_GUID(GUID_DSFX_STANDARD_FLANGER, 0xEFCA3D92,0xDFD8,0x4672,0xA6,0x03,0x74,0x20,0x89,0x4B,0xAD,0x98); DEFINE_GUID(GUID_DSFX_STANDARD_ECHO, 0xEF3E932C,0xD40B,0x4F51,0x8C,0xCF,0x3F,0x98,0xF1,0xB2,0x9D,0x5D); DEFINE_GUID(GUID_DSFX_STANDARD_DISTORTION, 0xEF114C90,0xCD1D,0x484E,0x96,0xE5,0x09,0xCF,0xAF,0x91,0x2A,0x21); DEFINE_GUID(GUID_DSFX_STANDARD_COMPRESSOR, 0xEF011F79,0x4000,0x406D,0x87,0xAF,0xBF,0xFB,0x3F,0xC3,0x9D,0x57); DEFINE_GUID(GUID_DSFX_STANDARD_PARAMEQ, 0x120CED89,0x3BF4,0x4173,0xA1,0x32,0x3C,0xB4,0x06,0xCF,0x32,0x31); DEFINE_GUID(GUID_DSFX_STANDARD_I3DL2REVERB, 0xEF985E71,0xD5C7,0x42D4,0xBA,0x4D,0x2D,0x07,0x3E,0x2E,0x96,0xF4); DEFINE_GUID(GUID_DSFX_WAVES_REVERB, 0x87FC0268,0x9A55,0x4360,0x95,0xAA,0x00,0x4A,0x1D,0x9D,0xE2,0x6C); DEFINE_GUID(GUID_DSCFX_CLASS_AEC, 0xBF963D80,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1); DEFINE_GUID(GUID_DSCFX_MS_AEC, 0xCDEBB919,0x379A,0x488A,0x87,0x65,0xF5,0x3C,0xFD,0x36,0xDE,0x40); DEFINE_GUID(GUID_DSCFX_SYSTEM_AEC, 0x1C22C56D,0x9879,0x4F5B,0xA3,0x89,0x27,0x99,0x6D,0xDC,0x28,0x10); DEFINE_GUID(GUID_DSCFX_CLASS_NS, 0xE07F903F,0x62FD,0x4E60,0x8C,0xDD,0xDE,0xA7,0x23,0x66,0x65,0xB5); DEFINE_GUID(GUID_DSCFX_MS_NS, 0x11C5C73B,0x66E9,0x4BA1,0xA0,0xBA,0xE8,0x14,0xC6,0xEE,0xD9,0x2D); DEFINE_GUID(GUID_DSCFX_SYSTEM_NS, 0x5AB0882E,0x7274,0x4516,0x87,0x7D,0x4E,0xEE,0x99,0xBA,0x4F,0xD0); #define _FACDS 0x878 #define MAKE_DSHRESULT(code) MAKE_HRESULT(1,_FACDS,code) #define DS_OK 0 #define DS_NO_VIRTUALIZATION MAKE_HRESULT(0, _FACDS, 10) #define DS_INCOMPLETE MAKE_HRESULT(0, _FACDS, 20) #define DSERR_ALLOCATED MAKE_DSHRESULT(10) #define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30) #define DSERR_INVALIDPARAM E_INVALIDARG #define DSERR_INVALIDCALL MAKE_DSHRESULT(50) #define DSERR_GENERIC E_FAIL #define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70) #define DSERR_OUTOFMEMORY E_OUTOFMEMORY #define DSERR_BADFORMAT MAKE_DSHRESULT(100) #define DSERR_UNSUPPORTED E_NOTIMPL #define DSERR_NODRIVER MAKE_DSHRESULT(120) #define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130) #define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION #define DSERR_BUFFERLOST MAKE_DSHRESULT(150) #define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160) #define DSERR_UNINITIALIZED MAKE_DSHRESULT(170) #define DSERR_NOINTERFACE E_NOINTERFACE #define DSERR_ACCESSDENIED E_ACCESSDENIED #define DSERR_BUFFERTOOSMALL MAKE_DSHRESULT(180) #define DSERR_DS8_REQUIRED MAKE_DSHRESULT(190) #define DSERR_SENDLOOP MAKE_DSHRESULT(200) #define DSERR_BADSENDBUFFERGUID MAKE_DSHRESULT(210) #define DSERR_FXUNAVAILABLE MAKE_DSHRESULT(220) #define DSERR_OBJECTNOTFOUND MAKE_DSHRESULT(4449) #define DSCAPS_PRIMARYMONO 0x00000001 #define DSCAPS_PRIMARYSTEREO 0x00000002 #define DSCAPS_PRIMARY8BIT 0x00000004 #define DSCAPS_PRIMARY16BIT 0x00000008 #define DSCAPS_CONTINUOUSRATE 0x00000010 #define DSCAPS_EMULDRIVER 0x00000020 #define DSCAPS_CERTIFIED 0x00000040 #define DSCAPS_SECONDARYMONO 0x00000100 #define DSCAPS_SECONDARYSTEREO 0x00000200 #define DSCAPS_SECONDARY8BIT 0x00000400 #define DSCAPS_SECONDARY16BIT 0x00000800 #define DSSCL_NORMAL 1 #define DSSCL_PRIORITY 2 #define DSSCL_EXCLUSIVE 3 #define DSSCL_WRITEPRIMARY 4 typedef struct _DSCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwMinSecondarySampleRate; DWORD dwMaxSecondarySampleRate; DWORD dwPrimaryBuffers; DWORD dwMaxHwMixingAllBuffers; DWORD dwMaxHwMixingStaticBuffers; DWORD dwMaxHwMixingStreamingBuffers; DWORD dwFreeHwMixingAllBuffers; DWORD dwFreeHwMixingStaticBuffers; DWORD dwFreeHwMixingStreamingBuffers; DWORD dwMaxHw3DAllBuffers; DWORD dwMaxHw3DStaticBuffers; DWORD dwMaxHw3DStreamingBuffers; DWORD dwFreeHw3DAllBuffers; DWORD dwFreeHw3DStaticBuffers; DWORD dwFreeHw3DStreamingBuffers; DWORD dwTotalHwMemBytes; DWORD dwFreeHwMemBytes; DWORD dwMaxContigFreeHwMemBytes; DWORD dwUnlockTransferRateHwBuffers; DWORD dwPlayCpuOverheadSwBuffers; DWORD dwReserved1; DWORD dwReserved2; } DSCAPS,*LPDSCAPS; typedef const DSCAPS *LPCDSCAPS; #define DSBPLAY_LOOPING 0x00000001 #define DSBPLAY_LOCHARDWARE 0x00000002 #define DSBPLAY_LOCSOFTWARE 0x00000004 #define DSBPLAY_TERMINATEBY_TIME 0x00000008 #define DSBPLAY_TERMINATEBY_DISTANCE 0x000000010 #define DSBPLAY_TERMINATEBY_PRIORITY 0x000000020 #define DSBSTATUS_PLAYING 0x00000001 #define DSBSTATUS_BUFFERLOST 0x00000002 #define DSBSTATUS_LOOPING 0x00000004 #define DSBSTATUS_LOCHARDWARE 0x00000008 #define DSBSTATUS_LOCSOFTWARE 0x00000010 #define DSBSTATUS_TERMINATED 0x00000020 #define DSBLOCK_FROMWRITECURSOR 0x00000001 #define DSBLOCK_ENTIREBUFFER 0x00000002 #define DSBCAPS_PRIMARYBUFFER 0x00000001 #define DSBCAPS_STATIC 0x00000002 #define DSBCAPS_LOCHARDWARE 0x00000004 #define DSBCAPS_LOCSOFTWARE 0x00000008 #define DSBCAPS_CTRL3D 0x00000010 #define DSBCAPS_CTRLFREQUENCY 0x00000020 #define DSBCAPS_CTRLPAN 0x00000040 #define DSBCAPS_CTRLVOLUME 0x00000080 #define DSBCAPS_CTRLDEFAULT 0x000000E0 /* Pan + volume + frequency. */ #define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100 #define DSBCAPS_CTRLFX 0x00000200 #define DSBCAPS_CTRLALL 0x000001F0 /* All control capabilities */ #define DSBCAPS_STICKYFOCUS 0x00004000 #define DSBCAPS_GLOBALFOCUS 0x00008000 #define DSBCAPS_GETCURRENTPOSITION2 0x00010000 /* More accurate play cursor under emulation*/ #define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000 #define DSBCAPS_LOCDEFER 0x00040000 #define DSBSIZE_MIN 4 #define DSBSIZE_MAX 0xFFFFFFF #define DSBPAN_LEFT -10000 #define DSBPAN_CENTER 0 #define DSBPAN_RIGHT 10000 #define DSBVOLUME_MAX 0 #define DSBVOLUME_MIN -10000 #define DSBFREQUENCY_MIN 100 #define DSBFREQUENCY_MAX 200000 #define DSBFREQUENCY_ORIGINAL 0 #define DSBNOTIFICATIONS_MAX 100000U typedef struct _DSBCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwUnlockTransferRate; DWORD dwPlayCpuOverhead; } DSBCAPS,*LPDSBCAPS; typedef const DSBCAPS *LPCDSBCAPS; #define DSSCL_NORMAL 1 #define DSSCL_PRIORITY 2 #define DSSCL_EXCLUSIVE 3 #define DSSCL_WRITEPRIMARY 4 typedef struct _DSEFFECTDESC { DWORD dwSize; DWORD dwFlags; GUID guidDSFXClass; DWORD_PTR dwReserved1; DWORD_PTR dwReserved2; } DSEFFECTDESC,*LPDSEFFECTDESC; typedef const DSEFFECTDESC *LPCDSEFFECTDESC; #define DSFX_LOCHARDWARE 0x00000001 #define DSFX_LOCSOFTWARE 0x00000002 enum { DSFXR_PRESENT, DSFXR_LOCHARDWARE, DSFXR_LOCSOFTWARE, DSFXR_UNALLOCATED, DSFXR_FAILED, DSFXR_UNKNOWN, DSFXR_SENDLOOP }; typedef struct _DSBUFFERDESC1 { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; } DSBUFFERDESC1,*LPDSBUFFERDESC1; typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1; typedef struct _DSBUFFERDESC { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; GUID guid3DAlgorithm; } DSBUFFERDESC,*LPDSBUFFERDESC; typedef const DSBUFFERDESC *LPCDSBUFFERDESC; typedef struct _DSBPOSITIONNOTIFY { DWORD dwOffset; HANDLE hEventNotify; } DSBPOSITIONNOTIFY,*LPDSBPOSITIONNOTIFY; typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY; #define DSSPEAKER_DIRECTOUT 0 #define DSSPEAKER_HEADPHONE 1 #define DSSPEAKER_MONO 2 #define DSSPEAKER_QUAD 3 #define DSSPEAKER_STEREO 4 #define DSSPEAKER_SURROUND 5 #define DSSPEAKER_5POINT1 6 #define DSSPEAKER_5POINT1_BACK 6 #define DSSPEAKER_7POINT1 7 #define DSSPEAKER_7POINT1_WIDE 7 #define DSSPEAKER_7POINT1_SURROUND 8 #define DSSPEAKER_5POINT1_SURROUND 9 #define DSSPEAKER_GEOMETRY_MIN 0x00000005 /* 5 degrees */ #define DSSPEAKER_GEOMETRY_NARROW 0x0000000A /* 10 degrees */ #define DSSPEAKER_GEOMETRY_WIDE 0x00000014 /* 20 degrees */ #define DSSPEAKER_GEOMETRY_MAX 0x000000B4 /* 180 degrees */ #define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16)) #define DSSPEAKER_CONFIG(a) ((BYTE)(a)) #define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF)) #define DS_CERTIFIED 0x00000000 #define DS_UNCERTIFIED 0x00000001 typedef struct _DSCEFFECTDESC { DWORD dwSize; DWORD dwFlags; GUID guidDSCFXClass; GUID guidDSCFXInstance; DWORD dwReserved1; DWORD dwReserved2; } DSCEFFECTDESC, *LPDSCEFFECTDESC; typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC; #define DSCFX_LOCHARDWARE 0x00000001 #define DSCFX_LOCSOFTWARE 0x00000002 #define DSCFXR_LOCHARDWARE 0x00000010 #define DSCFXR_LOCSOFTWARE 0x00000020 typedef struct _DSCBUFFERDESC1 { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; } DSCBUFFERDESC1, *LPDSCBUFFERDESC1; typedef struct _DSCBUFFERDESC { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; DWORD dwFXCount; LPDSCEFFECTDESC lpDSCFXDesc; } DSCBUFFERDESC, *LPDSCBUFFERDESC; typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC; typedef struct _DSCCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwFormats; DWORD dwChannels; } DSCCAPS, *LPDSCCAPS; typedef const DSCCAPS *LPCDSCCAPS; typedef struct _DSCBCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; } DSCBCAPS, *LPDSCBCAPS; typedef const DSCBCAPS *LPCDSCBCAPS; typedef struct _DSFXI3DL2Reverb { LONG lRoom; LONG lRoomHF; FLOAT flRoomRolloffFactor; FLOAT flDecayTime; FLOAT flDecayHFRatio; LONG lReflections; FLOAT flReflectionsDelay; LONG lReverb; FLOAT flReverbDelay; FLOAT flDiffusion; FLOAT flDensity; FLOAT flHFReference; } DSFXI3DL2Reverb, *LPDSFXI3DL2Reverb; typedef const DSFXI3DL2Reverb *LPCDSFXI3DL2Reverb; #define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER #define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED #define DSCCAPS_MULTIPLECAPTURE 0x00000001 #define DSCBCAPS_WAVEMAPPED 0x80000000 #define DSCBCAPS_CTRLFX 0x00000200 #define DSCBLOCK_ENTIREBUFFER 0x00000001 #define DSCBSTART_LOOPING 0x00000001 #define DSCBPN_OFFSET_STOP 0xffffffff #define DSCBSTATUS_CAPTURING 0x00000001 #define DSCBSTATUS_LOOPING 0x00000002 #ifndef __LPCGUID_DEFINED__ #define __LPCGUID_DEFINED__ typedef const GUID *LPCGUID; #endif typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID,LPCWSTR,LPCWSTR,LPVOID); typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID,LPCSTR,LPCSTR,LPVOID); DECL_WINELIB_TYPE_AW(LPDSENUMCALLBACK) extern HRESULT WINAPI DirectSoundCreate(LPCGUID lpGUID,LPDIRECTSOUND *ppDS,LPUNKNOWN pUnkOuter); extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID); extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID); #define DirectSoundEnumerate WINELIB_NAME_AW(DirectSoundEnumerate) extern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter); extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA, LPVOID); extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW, LPVOID); #define DirectSoundCaptureEnumerate WINELIB_NAME_AW(DirectSoundCaptureEnumerate) extern HRESULT WINAPI DirectSoundCreate8(LPCGUID lpGUID,LPDIRECTSOUND8 *ppDS8,LPUNKNOWN pUnkOuter); extern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter); extern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice, LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd, DWORD dwLevel, LPDIRECTSOUNDFULLDUPLEX *ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter); #define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate extern HRESULT WINAPI GetDeviceID(LPCGUID lpGuidSrc, LPGUID lpGuidDest); /***************************************************************************** * IDirectSound interface */ #define INTERFACE IDirectSound DECLARE_INTERFACE_(IDirectSound,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSound methods ***/ STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE; STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE; STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE; STDMETHOD(Compact)(THIS) PURE; STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE; STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE; STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSound_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSound_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSound_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSound methods ***/ #define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) #define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) #define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) #define IDirectSound_SetSpeakerConfig(p,a) (p)->lpVtbl->SetSpeakerConfig(p,a) #define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #else /*** IUnknown methods ***/ #define IDirectSound_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSound_AddRef(p) (p)->AddRef() #define IDirectSound_Release(p) (p)->Release() /*** IDirectSound methods ***/ #define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) #define IDirectSound_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) #define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectSound_Compact(p) (p)->Compact() #define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) #define IDirectSound_SetSpeakerConfig(p,a) (p)->SetSpeakerConfig(a) #define IDirectSound_Initialize(p,a) (p)->Initialize(a) #endif /***************************************************************************** * IDirectSound8 interface */ #define INTERFACE IDirectSound8 DECLARE_INTERFACE_(IDirectSound8,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSound8 methods ***/ STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE; STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE; STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE; STDMETHOD(Compact)(THIS) PURE; STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE; STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE; STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE; STDMETHOD(VerifyCertification)(THIS_ LPDWORD pdwCertified) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSound8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSound8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSound8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSound methods ***/ #define IDirectSound8_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) #define IDirectSound8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) #define IDirectSound8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectSound8_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectSound8_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) #define IDirectSound8_SetSpeakerConfig(p,a) (p)->lpVtbl->SetSpeakerConfig(p,a) #define IDirectSound8_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) /*** IDirectSound8 methods ***/ #define IDirectSound8_VerifyCertification(p,a) (p)->lpVtbl->VerifyCertification(p,a) #else /*** IUnknown methods ***/ #define IDirectSound8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSound8_AddRef(p) (p)->AddRef() #define IDirectSound8_Release(p) (p)->Release() /*** IDirectSound methods ***/ #define IDirectSound8_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) #define IDirectSound8_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) #define IDirectSound8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectSound8_Compact(p) (p)->Compact() #define IDirectSound8_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) #define IDirectSound8_SetSpeakerConfig(p,a) (p)->SetSpeakerConfig(a) #define IDirectSound8_Initialize(p,a) (p)->Initialize(a) /*** IDirectSound8 methods ***/ #define IDirectSound8_VerifyCertification(p,a) (p)->VerifyCertification(a) #endif /***************************************************************************** * IDirectSoundBuffer interface */ #define INTERFACE IDirectSoundBuffer DECLARE_INTERFACE_(IDirectSoundBuffer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSoundBuffer methods ***/ STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE; STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE; STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE; STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE; STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE; STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE; STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE; STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE; STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE; STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE; STDMETHOD(SetPan)(THIS_ LONG lPan) PURE; STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE; STDMETHOD(Stop)(THIS) PURE; STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE; STDMETHOD(Restore)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundBuffer_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSoundBuffer methods ***/ #define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) #define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) #define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) #define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) #define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) #define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) #define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) #define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) #define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) #define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) #define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) #define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) #define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) #define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p) #else /*** IUnknown methods ***/ #define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundBuffer_AddRef(p) (p)->AddRef() #define IDirectSoundBuffer_Release(p) (p)->Release() /*** IDirectSoundBuffer methods ***/ #define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) #define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) #define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a) #define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a) #define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a) #define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a) #define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) #define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c) #define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) #define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a) #define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a) #define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a) #define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a) #define IDirectSoundBuffer_Stop(p) (p)->Stop() #define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) #define IDirectSoundBuffer_Restore(p) (p)->Restore() #endif /***************************************************************************** * IDirectSoundBuffer8 interface */ #define INTERFACE IDirectSoundBuffer8 DECLARE_INTERFACE_(IDirectSoundBuffer8,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSoundBuffer8 methods ***/ STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE; STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE; STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE; STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE; STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE; STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE; STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE; STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE; STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE; STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE; STDMETHOD(SetPan)(THIS_ LONG lPan) PURE; STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE; STDMETHOD(Stop)(THIS) PURE; STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetFX)(THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE; STDMETHOD(AcquireResources)(THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE; STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; }; #undef INTERFACE DEFINE_GUID(GUID_All_Objects, 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5); #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundBuffer8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSoundBuffer methods ***/ #define IDirectSoundBuffer8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) #define IDirectSoundBuffer8_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #define IDirectSoundBuffer8_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) #define IDirectSoundBuffer8_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) #define IDirectSoundBuffer8_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) #define IDirectSoundBuffer8_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) #define IDirectSoundBuffer8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) #define IDirectSoundBuffer8_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) #define IDirectSoundBuffer8_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) #define IDirectSoundBuffer8_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) #define IDirectSoundBuffer8_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) #define IDirectSoundBuffer8_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) #define IDirectSoundBuffer8_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) #define IDirectSoundBuffer8_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectSoundBuffer8_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) #define IDirectSoundBuffer8_Restore(p) (p)->lpVtbl->Restore(p) /*** IDirectSoundBuffer8 methods ***/ #define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->lpVtbl->SetFX(p,a,b,c) #define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->lpVtbl->AcquireResources(p,a,b,c) #define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundBuffer8_AddRef(p) (p)->AddRef() #define IDirectSoundBuffer8_Release(p) (p)->Release() /*** IDirectSoundBuffer methods ***/ #define IDirectSoundBuffer8_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) #define IDirectSoundBuffer8_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) #define IDirectSoundBuffer8_GetVolume(p,a) (p)->GetVolume(a) #define IDirectSoundBuffer8_GetPan(p,a) (p)->GetPan(a) #define IDirectSoundBuffer8_GetFrequency(p,a) (p)->GetFrequency(a) #define IDirectSoundBuffer8_GetStatus(p,a) (p)->GetStatus(a) #define IDirectSoundBuffer8_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) #define IDirectSoundBuffer8_Play(p,a,b,c) (p)->Play(a,b,c) #define IDirectSoundBuffer8_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) #define IDirectSoundBuffer8_SetFormat(p,a) (p)->SetFormat(a) #define IDirectSoundBuffer8_SetVolume(p,a) (p)->SetVolume(a) #define IDirectSoundBuffer8_SetPan(p,a) (p)->SetPan(a) #define IDirectSoundBuffer8_SetFrequency(p,a) (p)->SetFrequency(a) #define IDirectSoundBuffer8_Stop(p) (p)->Stop() #define IDirectSoundBuffer8_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) #define IDirectSoundBuffer8_Restore(p) (p)->Restore() /*** IDirectSoundBuffer8 methods ***/ #define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->SetFX(a,b,c) #define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->AcquireResources(a,b,c) #define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) #endif /***************************************************************************** * IDirectSoundCapture interface */ #define INTERFACE IDirectSoundCapture DECLARE_INTERFACE_(IDirectSoundCapture,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSoundCapture methods ***/ STDMETHOD(CreateCaptureBuffer)(THIS_ LPCDSCBUFFERDESC lpcDSCBufferDesc,LPDIRECTSOUNDCAPTUREBUFFER *lplpDSCaptureBuffer, LPUNKNOWN pUnk) PURE; STDMETHOD(GetCaps)(THIS_ LPDSCCAPS lpDSCCaps) PURE; STDMETHOD(Initialize)(THIS_ LPCGUID lpcGUID) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSoundCapture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundCapture_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundCapture_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSoundCapture methods ***/ #define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c) #define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #else /*** IUnknown methods ***/ #define IDirectSoundCapture_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundCapture_AddRef(p) (p)->AddRef() #define IDirectSoundCapture_Release(p) (p)->Release() /*** IDirectSoundCapture methods ***/ #define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c) #define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a) #endif /***************************************************************************** * IDirectSoundCaptureBuffer interface */ #define INTERFACE IDirectSoundCaptureBuffer DECLARE_INTERFACE_(IDirectSoundCaptureBuffer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSoundCaptureBuffer methods ***/ STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE; STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE; STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE; STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE; STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE; STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE; STDMETHOD(Stop)(THIS) PURE; STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundCaptureBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundCaptureBuffer_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSoundCaptureBuffer methods ***/ #define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) #define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) #define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a) #define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundCaptureBuffer_AddRef(p) (p)->AddRef() #define IDirectSoundCaptureBuffer_Release(p) (p)->Release() /*** IDirectSoundCaptureBuffer methods ***/ #define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) #define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) #define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a) #define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a) #define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop() #define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) #endif /***************************************************************************** * IDirectSoundCaptureBuffer8 interface */ #define INTERFACE IDirectSoundCaptureBuffer8 DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8,IDirectSoundCaptureBuffer) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSoundCaptureBuffer methods ***/ STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE; STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE; STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE; STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE; STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE; STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE; STDMETHOD(Stop)(THIS) PURE; STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE; /*** IDirectSoundCaptureBuffer8 methods ***/ STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; STDMETHOD(GetFXStatus)(THIS_ DWORD dwFXCount, LPDWORD pdwFXStatus) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundCaptureBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundCaptureBuffer8_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSoundCaptureBuffer methods ***/ #define IDirectSoundCaptureBuffer8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) #define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #define IDirectSoundCaptureBuffer8_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) #define IDirectSoundCaptureBuffer8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer8_Start(p,a) (p)->lpVtbl->Start(p,a) #define IDirectSoundCaptureBuffer8_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) /*** IDirectSoundCaptureBuffer8 methods ***/ #define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) #define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->lpVtbl->GetFXStatus(p,a,b) #else /*** IUnknown methods ***/ #define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundCaptureBuffer8_AddRef(p) (p)->AddRef() #define IDirectSoundCaptureBuffer8_Release(p) (p)->Release() /*** IDirectSoundCaptureBuffer methods ***/ #define IDirectSoundCaptureBuffer8_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) #define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) #define IDirectSoundCaptureBuffer8_GetStatus(p,a) (p)->GetStatus(a) #define IDirectSoundCaptureBuffer8_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer8_Start(p,a) (p)->Start(a) #define IDirectSoundCaptureBuffer8_Stop(p) (p)->Stop() #define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) /*** IDirectSoundCaptureBuffer8 methods ***/ #define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) #define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->GetFXStatus(a,b) #endif /***************************************************************************** * IDirectSoundNotify interface */ #define WINE_NOBUFFER 0x80000000 #define DSBPN_OFFSETSTOP -1 #define INTERFACE IDirectSoundNotify DECLARE_INTERFACE_(IDirectSoundNotify,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSoundNotify methods ***/ STDMETHOD(SetNotificationPositions)(THIS_ DWORD cPositionNotifies, LPCDSBPOSITIONNOTIFY lpcPositionNotifies) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSoundNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundNotify_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundNotify_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSoundNotify methods ***/ #define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b) #else /*** IUnknown methods ***/ #define IDirectSoundNotify_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundNotify_AddRef(p) (p)->AddRef() #define IDirectSoundNotify_Release(p) (p)->Release() /*** IDirectSoundNotify methods ***/ #define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b) #endif /***************************************************************************** * IDirectSound3DListener interface */ #define DS3DMODE_NORMAL 0x00000000 #define DS3DMODE_HEADRELATIVE 0x00000001 #define DS3DMODE_DISABLE 0x00000002 #define DS3D_IMMEDIATE 0x00000000 #define DS3D_DEFERRED 0x00000001 #define DS3D_MINDISTANCEFACTOR FLT_MIN #define DS3D_MAXDISTANCEFACTOR FLT_MAX #define DS3D_DEFAULTDISTANCEFACTOR 1.0f #define DS3D_MINROLLOFFFACTOR 0.0f #define DS3D_MAXROLLOFFFACTOR 10.0f #define DS3D_DEFAULTROLLOFFFACTOR 1.0f #define DS3D_MINDOPPLERFACTOR 0.0f #define DS3D_MAXDOPPLERFACTOR 10.0f #define DS3D_DEFAULTDOPPLERFACTOR 1.0f #define DS3D_DEFAULTMINDISTANCE 1.0f #define DS3D_DEFAULTMAXDISTANCE 1000000000.0f #define DS3D_MINCONEANGLE 0 #define DS3D_MAXCONEANGLE 360 #define DS3D_DEFAULTCONEANGLE 360 #define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX typedef struct _DS3DLISTENER { DWORD dwSize; D3DVECTOR vPosition; D3DVECTOR vVelocity; D3DVECTOR vOrientFront; D3DVECTOR vOrientTop; D3DVALUE flDistanceFactor; D3DVALUE flRolloffFactor; D3DVALUE flDopplerFactor; } DS3DLISTENER, *LPDS3DLISTENER; typedef const DS3DLISTENER *LPCDS3DLISTENER; #define INTERFACE IDirectSound3DListener DECLARE_INTERFACE_(IDirectSound3DListener,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSound3DListener methods ***/ STDMETHOD(GetAllParameters)(THIS_ LPDS3DLISTENER lpListener) PURE; STDMETHOD(GetDistanceFactor)(THIS_ LPD3DVALUE lpflDistanceFactor) PURE; STDMETHOD(GetDopplerFactor)(THIS_ LPD3DVALUE lpflDopplerFactor) PURE; STDMETHOD(GetOrientation)(THIS_ LPD3DVECTOR lpvOrientFront, LPD3DVECTOR lpvOrientTop) PURE; STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE; STDMETHOD(GetRolloffFactor)(THIS_ LPD3DVALUE lpflRolloffFactor) PURE; STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE; STDMETHOD(SetAllParameters)(THIS_ LPCDS3DLISTENER lpcListener, DWORD dwApply) PURE; STDMETHOD(SetDistanceFactor)(THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE; STDMETHOD(SetDopplerFactor)(THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE; STDMETHOD(SetOrientation)(THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE; STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; STDMETHOD(SetRolloffFactor)(THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE; STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; STDMETHOD(CommitDeferredSettings)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSound3DListener_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSound3DListener_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSound3DListener_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSound3DListener methods ***/ #define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a) #define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a) #define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b) #define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) #define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a) #define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) #define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) #define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b) #define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b) #define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) #define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b) #define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) #define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p) #else /*** IUnknown methods ***/ #define IDirectSound3DListener_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSound3DListener_AddRef(p) (p)->AddRef() #define IDirectSound3DListener_Release(p) (p)->Release() /*** IDirectSound3DListener methods ***/ #define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a) #define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a) #define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a) #define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b) #define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a) #define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a) #define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a) #define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) #define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b) #define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b) #define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) #define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b) #define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) #define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings() #endif /***************************************************************************** * IDirectSound3DBuffer interface */ typedef struct _DS3DBUFFER { DWORD dwSize; D3DVECTOR vPosition; D3DVECTOR vVelocity; DWORD dwInsideConeAngle; DWORD dwOutsideConeAngle; D3DVECTOR vConeOrientation; LONG lConeOutsideVolume; D3DVALUE flMinDistance; D3DVALUE flMaxDistance; DWORD dwMode; } DS3DBUFFER, *LPDS3DBUFFER; typedef const DS3DBUFFER *LPCDS3DBUFFER; #define INTERFACE IDirectSound3DBuffer DECLARE_INTERFACE_(IDirectSound3DBuffer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSound3DBuffer methods ***/ STDMETHOD(GetAllParameters)(THIS_ LPDS3DBUFFER lpDs3dBuffer) PURE; STDMETHOD(GetConeAngles)(THIS_ LPDWORD lpdwInsideConeAngle, LPDWORD lpdwOutsideConeAngle) PURE; STDMETHOD(GetConeOrientation)(THIS_ LPD3DVECTOR lpvOrientation) PURE; STDMETHOD(GetConeOutsideVolume)(THIS_ LPLONG lplConeOutsideVolume) PURE; STDMETHOD(GetMaxDistance)(THIS_ LPD3DVALUE lpflMaxDistance) PURE; STDMETHOD(GetMinDistance)(THIS_ LPD3DVALUE lpflMinDistance) PURE; STDMETHOD(GetMode)(THIS_ LPDWORD lpwdMode) PURE; STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE; STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE; STDMETHOD(SetAllParameters)(THIS_ LPCDS3DBUFFER lpcDs3dBuffer, DWORD dwApply) PURE; STDMETHOD(SetConeAngles)(THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE; STDMETHOD(SetConeOrientation)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; STDMETHOD(SetConeOutsideVolume)(THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE; STDMETHOD(SetMaxDistance)(THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE; STDMETHOD(SetMinDistance)(THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE; STDMETHOD(SetMode)(THIS_ DWORD dwMode, DWORD dwApply) PURE; STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSound3DBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSound3DBuffer_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSound3DBuffer methods ***/ #define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b) #define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a) #define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a) #define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a) #define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a) #define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a) #define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) #define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) #define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) #define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c) #define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d) #define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->lpVtbl->SetConeOutsideVolume(p,a,b) #define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b) #define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b) #define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b) #define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) #else /*** IUnknown methods ***/ #define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSound3DBuffer_AddRef(p) (p)->AddRef() #define IDirectSound3DBuffer_Release(p) (p)->Release() /*** IDirectSound3DBuffer methods ***/ #define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a) #define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b) #define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a) #define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a) #define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a) #define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a) #define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a) #define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a) #define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a) #define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) #define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c) #define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d) #define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->SetConeOutsideVolume(a,b) #define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b) #define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b) #define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b) #define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) #endif /***************************************************************************** * IKsPropertySet interface */ #ifndef _IKsPropertySet_ #define _IKsPropertySet_ #define __IKsPropertySet_FWD_DEFINED__ typedef struct IKsPropertySet *LPKSPROPERTYSET; DEFINE_GUID(IID_IKsPropertySet,0x31EFAC30,0x515C,0x11D0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93); #define KSPROPERTY_SUPPORT_GET 1 #define KSPROPERTY_SUPPORT_SET 2 #define INTERFACE IKsPropertySet DECLARE_INTERFACE_(IKsPropertySet,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IKsPropertySet methods ***/ STDMETHOD(Get)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3,ULONG *px4) PURE; STDMETHOD(Set)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3) PURE; STDMETHOD(QuerySupport)(THIS_ REFGUID rgid,ULONG x1,ULONG *px2) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IKsPropertySet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IKsPropertySet_AddRef(p) (p)->lpVtbl->AddRef(p) #define IKsPropertySet_Release(p) (p)->lpVtbl->Release(p) /*** IKsPropertySet methods ***/ #define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g) #define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f) #define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c) #else /*** IUnknown methods ***/ #define IKsPropertySet_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IKsPropertySet_AddRef(p) (p)->AddRef() #define IKsPropertySet_Release(p) (p)->Release() /*** IKsPropertySet methods ***/ #define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g) #define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f) #define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c) #endif #endif /* _IKsPropertySet_ */ /***************************************************************************** * IDirectSoundFullDuplex interface */ #define INTERFACE IDirectSoundFullDuplex DECLARE_INTERFACE_(IDirectSoundFullDuplex,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSoundFullDuplex methods ***/ STDMETHOD(Initialize)(THIS_ LPCGUID pCaptureGuid,LPCGUID pRendererGuid,LPCDSCBUFFERDESC lpDscBufferDesc,LPCDSBUFFERDESC lpDsBufferDesc,HWND hWnd,DWORD dwLevel,LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectSoundFullDuplex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundFullDuplex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundFullDuplex_Release(p) (p)->lpVtbl->Release(p) /*** IDirectSoundFullDuplex methods ***/ #define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h) #else /*** IUnknown methods ***/ #define IDirectSoundFullDuplex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundFullDuplex_AddRef(p) (p)->AddRef() #define IDirectSoundFullDuplex_Release(p) (p)->Release() /*** IDirectSoundFullDuplex methods ***/ #define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->Initialize(a,b,c,d,e,f,g,h) #endif /***************************************************************************** * IDirectSoundFXI3DL2Reverb interface */ #define INTERFACE IDirectSoundFXI3DL2Reverb DECLARE_INTERFACE_(IDirectSoundFXI3DL2Reverb,IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID, void**) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectSoundFXI3DL2Reverb methods ***/ STDMETHOD(SetAllParameters)(THIS_ LPCDSFXI3DL2Reverb reverb) PURE; STDMETHOD(GetAllParameters)(THIS_ LPDSFXI3DL2Reverb reverb) PURE; STDMETHOD(SetPreset)(THIS_ DWORD preset) PURE; STDMETHOD(GetPreset)(THIS_ DWORD *preset) PURE; STDMETHOD(SetQuality)(THIS_ LONG quality) PURE; STDMETHOD(GetQuality)(THIS_ LONG *quality) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundFXI3DL2Reverb_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundFXI3DL2Reverb_Release(p) (p)->lpVtbl->Release(p) #define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->lpVtbl->SetPreset(p,a) #define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->lpVtbl->GetPreset(p,a) #else #define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundFXI3DL2Reverb_AddRef(p) (p)->AddRef() #define IDirectSoundFXI3DL2Reverb_Release(p) (p)->Release() #define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->GetAllParameters(a) #define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->SetPreset(a) #define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->GetPreset(a) #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __DSOUND_INCLUDED__ */ ================================================ FILE: wine/windows/dsrole.h ================================================ /* * Directory Services definitions * * Copyright 2005 Paul Vriens * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DSROLE_H #define __WINE_DSROLE_H #ifdef __cplusplus extern "C" { #endif #define DSROLE_PRIMARY_DS_RUNNING 0x00000001 #define DSROLE_PRIMARY_DS_MIXED_MODE 0x00000002 #define DSROLE_UPGRADE_IN_PROGRESS 0x00000004 #define DSROLE_PRIMARY_DOMAIN_GUID_PRESENT 0x01000000 typedef enum _DSROLE_PRIMARY_DOMAIN_INFO_LEVEL { DsRolePrimaryDomainInfoBasic = 1, DsRoleUpgradeStatus, DsRoleOperationState } DSROLE_PRIMARY_DOMAIN_INFO_LEVEL; typedef enum _DSROLE_MACHINE_ROLE { DsRole_RoleStandaloneWorkstation = 0, DsRole_RoleMemberWorkstation, DsRole_RoleStandaloneServer, DsRole_RoleMemberServer, DsRole_RoleBackupDomainController, DsRole_RolePrimaryDomainController } DSROLE_MACHINE_ROLE; typedef enum _DSROLE_SERVER_STATE { DsRoleServerUnknown = 0, DsRoleServerPrimary, DsRoleServerBackup } DSROLE_SERVER_STATE; typedef enum _DSROLE_OPERATION_STATE { DsRoleOperationIdle = 0, DsRoleOperationActive, DsRoleOperationNeedReboot } DSROLE_OPERATION_STATE; typedef struct _DSROLE_PRIMARY_DOMAIN_INFO_BASIC { DSROLE_MACHINE_ROLE MachineRole; ULONG Flags; LPWSTR DomainNameFlat; LPWSTR DomainNameDns; LPWSTR DomainForestName; GUID DomainGuid; } DSROLE_PRIMARY_DOMAIN_INFO_BASIC, *PDSROLE_PRIMARY_DOMAIN_INFO_BASIC; typedef struct _DSROLE_UPGRADE_STATUS_INFO { ULONG OperationState; DSROLE_SERVER_STATE PreviousServerState; } DSROLE_UPGRADE_STATUS_INFO, *PDSROLE_UPGRADE_STATUS_INFO; typedef struct _DSROLE_OPERATION_STATE_INFO { DSROLE_OPERATION_STATE OperationState; } DSROLE_OPERATION_STATE_INFO, *PDSROLE_OPERATION_STATE_INFO; VOID WINAPI DsRoleFreeMemory(IN PVOID Buffer); DWORD WINAPI DsRoleGetPrimaryDomainInformation(IN LPCWSTR lpServer OPTIONAL, IN DSROLE_PRIMARY_DOMAIN_INFO_LEVEL InfoLevel, OUT PBYTE *Buffer); #ifdef __cplusplus } #endif #endif /* __WINE_DSROLE_H */ ================================================ FILE: wine/windows/dvdmedia.h ================================================ /* * Copyright (C) 2008 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DVDMEDIA_H__ #define __DVDMEDIA_H__ #define AMCONTROL_USED 0x00000001 #define AMCONTROL_PAD_TO_4x3 0x00000002 #define AMCONTROL_PAD_TO_16x9 0x00000004 typedef struct tagVIDEOINFOHEADER2 { RECT rcSource; RECT rcTarget; DWORD dwBitRate; DWORD dwBitErrorRate; REFERENCE_TIME AvgTimePerFrame; DWORD dwInterlaceFlags; DWORD dwCopyProtectFlags; DWORD dwPictAspectRatioX; DWORD dwPictAspectRatioY; union { DWORD dwControlFlags; DWORD dwReserved1; } DUMMYUNIONNAME; DWORD dwReserved2; BITMAPINFOHEADER bmiHeader; } VIDEOINFOHEADER2; typedef struct tagMPEG2VIDEOINFO { VIDEOINFOHEADER2 hdr; DWORD dwStartTimeCode; DWORD cbSequenceHeader; DWORD dwProfile; DWORD dwLevel; DWORD dwFlags; DWORD dwSequenceHeader[1]; } MPEG2VIDEOINFO; #define AMINTERLACE_IsInterlaced 0x0001 #define AMINTERLACE_1FieldPerSample 0x0002 #define AMINTERLACE_Field1First 0x0004 #define AMINTERLACE_UNUSED 0x0008 #define AMINTERLACE_FieldPatField1Only 0x0000 #define AMINTERLACE_FieldPatField2Only 0x0010 #define AMINTERLACE_FieldPatBothRegular 0x0020 #define AMINTERLACE_FieldPatBothIrregular 0x0030 #define AMINTERLACE_FieldPatternMask 0x0030 #define AMINTERLACE_DisplayModeBobOnly 0x0000 #define AMINTERLACE_DisplayModeWeaveOnly 0x0040 #define AMINTERLACE_DisplayModeBobOrWeave 0x0080 #define AMINTERLACE_DisplayModeMask 0x00c0 #endif /* __DVDMEDIA_H__ */ ================================================ FILE: wine/windows/dvoice.h ================================================ /* * DirectPlay Voice Interfaces * * Copyright (C) 2014 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DVOICE_INCLUDED__ #define __DVOICE_INCLUDED__ #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif DEFINE_GUID(CLSID_DirectPlayVoiceClient, 0xb9f3eb85, 0xb781, 0x4ac1, 0x8d, 0x90, 0x93, 0xa0, 0x5e, 0xe3, 0x7d, 0x7d); DEFINE_GUID(CLSID_DirectPlayVoiceServer, 0xd3f5b8e6, 0x9b78, 0x4a4c, 0x94, 0xea, 0xca, 0x23, 0x97, 0xb6, 0x63, 0xd3); DEFINE_GUID(CLSID_DirectPlayVoiceTest, 0x0f0f094b, 0xb01c, 0x4091, 0xa1, 0x4d, 0xdd, 0x0c, 0xd8, 0x07, 0x71, 0x1a); DEFINE_GUID(IID_IDirectPlayVoiceClient, 0x1dfdc8ea, 0xbcf7, 0x41d6, 0xb2, 0x95, 0xab, 0x64, 0xb3, 0xb2, 0x33, 0x06); DEFINE_GUID(IID_IDirectPlayVoiceServer, 0xfaa1c173, 0x0468, 0x43b6, 0x8a, 0x2a, 0xea, 0x8a, 0x4f, 0x20, 0x76, 0xc9); DEFINE_GUID(IID_IDirectPlayVoiceTest, 0xd26af734, 0x208b, 0x41da, 0x82, 0x24, 0xe0, 0xce, 0x79, 0x81, 0x0b, 0xe1); DEFINE_GUID(DPVCTGUID_ADPCM, 0x699b52c1, 0xa885, 0x46a8, 0xa3, 0x08, 0x97, 0x17, 0x24, 0x19, 0xad, 0xc7); DEFINE_GUID(DPVCTGUID_GSM, 0x24768c60, 0x5a0d, 0x11d3, 0x9b, 0xe4, 0x52, 0x54, 0x00, 0xd9, 0x85, 0xe7); DEFINE_GUID(DPVCTGUID_NONE, 0x8de12fd4, 0x7cb3, 0x48ce, 0xa7, 0xe8, 0x9c, 0x47, 0xa2, 0x2e, 0x8a, 0xc5); DEFINE_GUID(DPVCTGUID_SC03, 0x7d82a29b, 0x2242, 0x4f82, 0x8f, 0x39, 0x5d, 0x11, 0x53, 0xdf, 0x3e, 0x41); DEFINE_GUID(DPVCTGUID_SC06, 0x53def900, 0x7168, 0x4633, 0xb4, 0x7f, 0xd1, 0x43, 0x91, 0x6a, 0x13, 0xc7); DEFINE_GUID(DPVCTGUID_TRUESPEECH, 0xd7954361, 0x5a0b, 0x11d3, 0x9b, 0xe4, 0x52, 0x54, 0x00, 0xd9, 0x85, 0xe7); DEFINE_GUID(DPVCTGUID_VR12, 0xfe44a9fe, 0x8ed4, 0x48bf, 0x9d, 0x66, 0x1b, 0x1a, 0xdf, 0xf9, 0xff, 0x6d); #define DPVCTGUID_DEFAULT DPVCTGUID_SC03 typedef struct IDirectPlayVoiceClient *LPDIRECTPLAYVOICECLIENT, *PDIRECTPLAYVOICECLIENT; typedef struct IDirectPlayVoiceServer *LPDIRECTPLAYVOICESERVER, *PDIRECTPLAYVOICESERVER; typedef struct IDirectPlayVoiceTest *LPDIRECTPLAYVOICETEST, *PDIRECTPLAYVOICETEST; typedef HRESULT (PASCAL *PDVMESSAGEHANDLER)(PVOID pvUserContext, DWORD dwMessageType, LPVOID lpMessage); typedef PDVMESSAGEHANDLER LPDVMESSAGEHANDLER; typedef DWORD DVID, *LPDVID, *PDVID; #define DVMSGID_MINBASE DVMSGID_CREATEVOICEPLAYER #define DVMSGID_CREATEVOICEPLAYER 0x0001 #define DVMSGID_DELETEVOICEPLAYER 0x0002 #define DVMSGID_SESSIONLOST 0x0003 #define DVMSGID_PLAYERVOICESTART 0x0004 #define DVMSGID_PLAYERVOICESTOP 0x0005 #define DVMSGID_RECORDSTART 0x0006 #define DVMSGID_RECORDSTOP 0x0007 #define DVMSGID_CONNECTRESULT 0x0008 #define DVMSGID_DISCONNECTRESULT 0x0009 #define DVMSGID_INPUTLEVEL 0x000A #define DVMSGID_OUTPUTLEVEL 0x000B #define DVMSGID_HOSTMIGRATED 0x000C #define DVMSGID_SETTARGETS 0x000D #define DVMSGID_PLAYEROUTPUTLEVEL 0x000E #define DVMSGID_LOSTFOCUS 0x0010 #define DVMSGID_GAINFOCUS 0x0011 #define DVMSGID_LOCALHOSTSETUP 0x0012 #define DVMSGID_MAXBASE DVMSGID_LOCALHOSTSETUP #define DVBUFFERAGGRESSIVENESS_MIN 0x00000001 #define DVBUFFERAGGRESSIVENESS_MAX 0x00000064 #define DVBUFFERAGGRESSIVENESS_DEFAULT 0x00000000 #define DVBUFFERQUALITY_MIN 0x00000001 #define DVBUFFERQUALITY_MAX 0x00000064 #define DVBUFFERQUALITY_DEFAULT 0x00000000 #define DVID_SERVERPLAYER 1 #define DVID_ALLPLAYERS 0 #define DVID_REMAINING 0xFFFFFFFF #define DVINPUTLEVEL_MIN 0x00000000 #define DVINPUTLEVEL_MAX 0x00000063 #define DVNOTIFYPERIOD_MINPERIOD 20 #define DVPLAYBACKVOLUME_DEFAULT DSBVOLUME_MAX #define DVRECORDVOLUME_LAST 0x00000001 #define DVTHRESHOLD_DEFAULT 0xFFFFFFFF #define DVTHRESHOLD_MIN 0x00000000 #define DVTHRESHOLD_MAX 0x00000063 #define DVTHRESHOLD_UNUSED 0xFFFFFFFE #define DVSESSIONTYPE_PEER 0x00000001 #define DVSESSIONTYPE_MIXING 0x00000002 #define DVSESSIONTYPE_FORWARDING 0x00000003 #define DVSESSIONTYPE_ECHO 0x00000004 #define DVCLIENTCONFIG_RECORDMUTE 0x00000001 #define DVCLIENTCONFIG_PLAYBACKMUTE 0x00000002 #define DVCLIENTCONFIG_MANUALVOICEACTIVATED 0x00000004 #define DVCLIENTCONFIG_AUTORECORDVOLUME 0x00000008 #define DVCLIENTCONFIG_MUTEGLOBAL 0x00000010 #define DVCLIENTCONFIG_AUTOVOICEACTIVATED 0x00000020 #define DVCLIENTCONFIG_ECHOSUPPRESSION 0x08000000 #define DVFLAGS_SYNC 0x00000001 #define DVFLAGS_QUERYONLY 0x00000002 #define DVFLAGS_NOHOSTMIGRATE 0x00000008 #define DVFLAGS_ALLOWBACK 0x00000010 #define DVSESSION_NOHOSTMIGRATION 0x00000001 #define DVSESSION_SERVERCONTROLTARGET 0x00000002 #define DVSOUNDCONFIG_NORMALMODE 0x00000001 #define DVSOUNDCONFIG_AUTOSELECT 0x00000002 #define DVSOUNDCONFIG_HALFDUPLEX 0x00000004 #define DVSOUNDCONFIG_NORECVOLAVAILABLE 0x00000010 #define DVSOUNDCONFIG_NOFOCUS 0x20000000 #define DVSOUNDCONFIG_SETCONVERSIONQUALITY 0x00000008 #define DVSOUNDCONFIG_STRICTFOCUS 0x40000000 #define DVPLAYERCAPS_HALFDUPLEX 0x00000001 #define DVPLAYERCAPS_LOCAL 0x00000002 typedef struct { DWORD dwSize; DWORD dwFlags; } DVCAPS, *LPDVCAPS, *PDVCAPS; typedef struct { DWORD dwSize; DWORD dwFlags; LONG lRecordVolume; LONG lPlaybackVolume; DWORD dwThreshold; DWORD dwBufferQuality; DWORD dwBufferAggressiveness; DWORD dwNotifyPeriod; } DVCLIENTCONFIG, *LPDVCLIENTCONFIG, *PDVCLIENTCONFIG; typedef struct { DWORD dwSize; GUID guidType; LPWSTR lpszName; LPWSTR lpszDescription; DWORD dwFlags; DWORD dwMaxBitsPerSecond; } DVCOMPRESSIONINFO, *LPDVCOMPRESSIONINFO, *PDVCOMPRESSIONINFO; typedef struct { DWORD dwSize; DWORD dwFlags; DWORD dwSessionType; GUID guidCT; DWORD dwBufferQuality; DWORD dwBufferAggressiveness; } DVSESSIONDESC, *LPDVSESSIONDESC, *PDVSESSIONDESC; typedef struct { DWORD dwSize; DWORD dwFlags; GUID guidPlaybackDevice; LPDIRECTSOUND lpdsPlaybackDevice; GUID guidCaptureDevice; LPDIRECTSOUNDCAPTURE lpdsCaptureDevice; HWND hwndAppWindow; LPDIRECTSOUNDBUFFER lpdsMainBuffer; DWORD dwMainBufferFlags; DWORD dwMainBufferPriority; } DVSOUNDDEVICECONFIG, *LPDVSOUNDDEVICECONFIG, *PDVSOUNDDEVICECONFIG; typedef struct { DWORD dwSize; HRESULT hrResult; } DVMSG_CONNECTRESULT, *LPDVMSG_CONNECTRESULT, *PDVMSG_CONNECTRESULT; typedef struct { DWORD dwSize; DVID dvidPlayer; DWORD dwFlags; PVOID pvPlayerContext; } DVMSG_CREATEVOICEPLAYER, *LPDVMSG_CREATEVOICEPLAYER, *PDVMSG_CREATEVOICEPLAYER; typedef struct { DWORD dwSize; DVID dvidPlayer; PVOID pvPlayerContext; } DVMSG_DELETEVOICEPLAYER, *LPDVMSG_DELETEVOICEPLAYER, *PDVMSG_DELETEVOICEPLAYER; typedef struct { DWORD dwSize; HRESULT hrResult; } DVMSG_DISCONNECTRESULT, *LPDVMSG_DISCONNECTRESULT, *PDVMSG_DISCONNECTRESULT; typedef struct { DWORD dwSize; DVID dvidNewHostID; LPDIRECTPLAYVOICESERVER pdvServerInterface; } DVMSG_HOSTMIGRATED, *LPDVMSG_HOSTMIGRATED, *PDVMSG_HOSTMIGRATED; typedef struct { DWORD dwSize; DWORD dwPeakLevel; LONG lRecordVolume; PVOID pvLocalPlayerContext; } DVMSG_INPUTLEVEL, *LPDVMSG_INPUTLEVEL, *PDVMSG_INPUTLEVEL; typedef struct { DWORD dwSize; PVOID pvContext; PDVMESSAGEHANDLER pMessageHandler; } DVMSG_LOCALHOSTSETUP, *LPDVMSG_LOCALHOSTSETUP, *PDVMSG_LOCALHOSTSETUP; typedef struct { DWORD dwSize; DWORD dwPeakLevel; LONG lOutputVolume; PVOID pvLocalPlayerContext; } DVMSG_OUTPUTLEVEL, *LPDVMSG_OUTPUTLEVEL, *PDVMSG_OUTPUTLEVEL; typedef struct { DWORD dwSize; DVID dvidSourcePlayerID; DWORD dwPeakLevel; PVOID pvPlayerContext; } DVMSG_PLAYEROUTPUTLEVEL, *LPDVMSG_PLAYEROUTPUTLEVEL, *PDVMSG_PLAYEROUTPUTLEVEL; typedef struct { DWORD dwSize; DVID dvidSourcePlayerID; PVOID pvPlayerContext; } DVMSG_PLAYERVOICESTART, *LPDVMSG_PLAYERVOICESTART, *PDVMSG_PLAYERVOICESTART; typedef struct { DWORD dwSize; DVID dvidSourcePlayerID; PVOID pvPlayerContext; } DVMSG_PLAYERVOICESTOP, *LPDVMSG_PLAYERVOICESTOP, *PDVMSG_PLAYERVOICESTOP; typedef struct { DWORD dwSize; DWORD dwPeakLevel; PVOID pvLocalPlayerContext; } DVMSG_RECORDSTART, *LPDVMSG_RECORDSTART, *PDVMSG_RECORDSTART; typedef struct { DWORD dwSize; DWORD dwPeakLevel; PVOID pvLocalPlayerContext; } DVMSG_RECORDSTOP, *LPDVMSG_RECORDSTOP, *PDVMSG_RECORDSTOP; typedef struct { DWORD dwSize; HRESULT hrResult; } DVMSG_SESSIONLOST, *LPDVMSG_SESSIONLOST, *PDVMSG_SESSIONLOST; typedef struct { DWORD dwSize; DWORD dwNumTargets; PDVID pdvidTargets; } DVMSG_SETTARGETS, *LPDVMSG_SETTARGETS, *PDVMSG_SETTARGETS; #define _FACDPV 0x15 #define MAKE_DVHRESULT( code ) MAKE_HRESULT( 1, _FACDPV, code ) #define DV_OK S_OK #define DV_FULLDUPLEX MAKE_HRESULT(0, _FACDPV, 0x0005) #define DV_HALFDUPLEX MAKE_HRESULT(0, _FACDPV, 0x000A) #define DV_PENDING MAKE_HRESULT(0, _FACDPV, 0x0010) #define DVERR_BUFFERTOOSMALL MAKE_DVHRESULT(0x001E) #define DVERR_EXCEPTION MAKE_DVHRESULT(0x004A) #define DVERR_GENERIC E_FAIL #define DVERR_INVALIDFLAGS MAKE_DVHRESULT(0x0078) #define DVERR_INVALIDOBJECT MAKE_DVHRESULT(0x0082) #define DVERR_INVALIDPARAM E_INVALIDARG #define DVERR_INVALIDPLAYER MAKE_DVHRESULT(0x0087) #define DVERR_INVALIDGROUP MAKE_DVHRESULT(0x0091) #define DVERR_INVALIDHANDLE MAKE_DVHRESULT(0x0096) #define DVERR_OUTOFMEMORY E_OUTOFMEMORY #define DVERR_PENDING DV_PENDING #define DVERR_NOTSUPPORTED E_NOTIMPL #define DVERR_NOINTERFACE E_NOINTERFACE #define DVERR_SESSIONLOST MAKE_DVHRESULT(0x012C) #define DVERR_NOVOICESESSION MAKE_DVHRESULT(0x012E) #define DVERR_CONNECTIONLOST MAKE_DVHRESULT(0x0168) #define DVERR_NOTINITIALIZED MAKE_DVHRESULT(0x0169) #define DVERR_CONNECTED MAKE_DVHRESULT(0x016A) #define DVERR_NOTCONNECTED MAKE_DVHRESULT(0x016B) #define DVERR_CONNECTABORTING MAKE_DVHRESULT(0x016E) #define DVERR_NOTALLOWED MAKE_DVHRESULT(0x016F) #define DVERR_INVALIDTARGET MAKE_DVHRESULT(0x0170) #define DVERR_TRANSPORTNOTHOST MAKE_DVHRESULT(0x0171) #define DVERR_COMPRESSIONNOTSUPPORTED MAKE_DVHRESULT(0x0172) #define DVERR_ALREADYPENDING MAKE_DVHRESULT(0x0173) #define DVERR_SOUNDINITFAILURE MAKE_DVHRESULT(0x0174) #define DVERR_TIMEOUT MAKE_DVHRESULT(0x0175) #define DVERR_CONNECTABORTED MAKE_DVHRESULT(0x0176) #define DVERR_NO3DSOUND MAKE_DVHRESULT(0x0177) #define DVERR_ALREADYBUFFERED MAKE_DVHRESULT(0x0178) #define DVERR_NOTBUFFERED MAKE_DVHRESULT(0x0179) #define DVERR_HOSTING MAKE_DVHRESULT(0x017A) #define DVERR_NOTHOSTING MAKE_DVHRESULT(0x017B) #define DVERR_INVALIDDEVICE MAKE_DVHRESULT(0x017C) #define DVERR_RECORDSYSTEMERROR MAKE_DVHRESULT(0x017D) #define DVERR_PLAYBACKSYSTEMERROR MAKE_DVHRESULT(0x017E) #define DVERR_SENDERROR MAKE_DVHRESULT(0x017F) #define DVERR_USERCANCEL MAKE_DVHRESULT(0x0180) #define DVERR_RUNSETUP MAKE_DVHRESULT(0x0183) #define DVERR_INCOMPATIBLEVERSION MAKE_DVHRESULT(0x0184) #define DVERR_INITIALIZED MAKE_DVHRESULT(0x0187) #define DVERR_INVALIDPOINTER E_POINTER #define DVERR_NOTRANSPORT MAKE_DVHRESULT(0x0188) #define DVERR_NOCALLBACK MAKE_DVHRESULT(0x0189) #define DVERR_TRANSPORTNOTINIT MAKE_DVHRESULT(0x018A) #define DVERR_TRANSPORTNOSESSION MAKE_DVHRESULT(0x018B) #define DVERR_TRANSPORTNOPLAYER MAKE_DVHRESULT(0x018C) #define DVERR_USERBACK MAKE_DVHRESULT(0x018D) #define DVERR_NORECVOLAVAILABLE MAKE_DVHRESULT(0x018E) #define DVERR_INVALIDBUFFER MAKE_DVHRESULT(0x018F) #define DVERR_LOCKEDBUFFER MAKE_DVHRESULT(0x0190) #undef INTERFACE #define INTERFACE IDirectPlayVoiceClient DECLARE_INTERFACE_(IDirectPlayVoiceClient, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, PVOID *ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(Initialize) (THIS_ LPUNKNOWN, PDVMESSAGEHANDLER, PVOID, PDWORD, DWORD) PURE; STDMETHOD(Connect) (THIS_ PDVSOUNDDEVICECONFIG, PDVCLIENTCONFIG, DWORD) PURE; STDMETHOD(Disconnect) (THIS_ DWORD) PURE; STDMETHOD(GetSessionDesc) (THIS_ PDVSESSIONDESC) PURE; STDMETHOD(GetClientConfig) (THIS_ PDVCLIENTCONFIG) PURE; STDMETHOD(SetClientConfig) (THIS_ PDVCLIENTCONFIG) PURE; STDMETHOD(GetCaps) (THIS_ PDVCAPS) PURE; STDMETHOD(GetCompressionTypes) (THIS_ PVOID, PDWORD, PDWORD, DWORD) PURE; STDMETHOD(SetTransmitTargets) (THIS_ PDVID, DWORD, DWORD) PURE; STDMETHOD(GetTransmitTargets) (THIS_ PDVID, PDWORD, DWORD) PURE; STDMETHOD(Create3DSoundBuffer) (THIS_ DVID, LPDIRECTSOUNDBUFFER, DWORD, DWORD, LPDIRECTSOUND3DBUFFER *) PURE; STDMETHOD(Delete3DSoundBuffer) (THIS_ DVID, LPDIRECTSOUND3DBUFFER *) PURE; STDMETHOD(SetNotifyMask) (THIS_ PDWORD, DWORD) PURE; STDMETHOD(GetSoundDeviceConfig)(THIS_ PDVSOUNDDEVICECONFIG, PDWORD) PURE; }; #undef INTERFACE #define INTERFACE IDirectPlayVoiceServer DECLARE_INTERFACE_(IDirectPlayVoiceServer, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID *ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(Initialize) (THIS_ LPUNKNOWN, PDVMESSAGEHANDLER, PVOID, LPDWORD, DWORD) PURE; STDMETHOD(StartSession) (THIS_ PDVSESSIONDESC, DWORD) PURE; STDMETHOD(StopSession) (THIS_ DWORD) PURE; STDMETHOD(GetSessionDesc) (THIS_ PDVSESSIONDESC) PURE; STDMETHOD(SetSessionDesc) (THIS_ PDVSESSIONDESC) PURE; STDMETHOD(GetCaps) (THIS_ PDVCAPS) PURE; STDMETHOD(GetCompressionTypes) (THIS_ PVOID, PDWORD, PDWORD, DWORD) PURE; STDMETHOD(SetTransmitTargets) (THIS_ DVID, PDVID, DWORD, DWORD) PURE; STDMETHOD(GetTransmitTargets) (THIS_ DVID, PDVID, PDWORD, DWORD) PURE; STDMETHOD(SetNotifyMask) (THIS_ PDWORD, DWORD) PURE; }; #undef INTERFACE #define INTERFACE IDirectPlayVoiceTest DECLARE_INTERFACE_(IDirectPlayVoiceTest, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, PVOID *ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(CheckAudioSetup) (THIS_ const GUID *, const GUID *, HWND, DWORD) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectPlayVoiceClient_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlayVoiceClient_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlayVoiceClient_Release(p) (p)->lpVtbl->Release(p) #define IDirectPlayVoiceClient_Initialize(p,a,b,c,d,e) (p)->lpVtbl->Initialize(p,a,b,c,d,e) #define IDirectPlayVoiceClient_Connect(p,a,b,c) (p)->lpVtbl->Connect(p,a,b,c) #define IDirectPlayVoiceClient_Disconnect(p,a) (p)->lpVtbl->Disconnect(p,a) #define IDirectPlayVoiceClient_GetSessionDesc(p,a) (p)->lpVtbl->GetSessionDesc(p,a) #define IDirectPlayVoiceClient_GetClientConfig(p,a) (p)->lpVtbl->GetClientConfig(p,a) #define IDirectPlayVoiceClient_SetClientConfig(p,a) (p)->lpVtbl->SetClientConfig(p,a) #define IDirectPlayVoiceClient_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectPlayVoiceClient_GetCompressionTypes(p,a,b,c,d) (p)->lpVtbl->GetCompressionTypes(p,a,b,c,d) #define IDirectPlayVoiceClient_SetTransmitTargets(p,a,b,c) (p)->lpVtbl->SetTransmitTargets(p,a,b,c) #define IDirectPlayVoiceClient_GetTransmitTargets(p,a,b,c) (p)->lpVtbl->GetTransmitTargets(p,a,b,c) #define IDirectPlayVoiceClient_Create3DSoundBuffer(p,a,b,c,d,e) (p)->lpVtbl->Create3DSoundBuffer(p,a,b,c,d,e) #define IDirectPlayVoiceClient_Delete3DSoundBuffer(p,a,b) (p)->lpVtbl->Delete3DSoundBuffer(p,a,b) #define IDirectPlayVoiceClient_SetNotifyMask(p,a,b) (p)->lpVtbl->SetNotifyMask(p,a,b) #define IDirectPlayVoiceClient_GetSoundDeviceConfig(p,a,b) (p)->lpVtbl->GetSoundDeviceConfig(p,a,b) #define IDirectPlayVoiceServer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlayVoiceServer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlayVoiceServer_Release(p) (p)->lpVtbl->Release(p) #define IDirectPlayVoiceServer_Initialize(p,a,b,c,d,e) (p)->lpVtbl->Initialize(p,a,b,c,d,e) #define IDirectPlayVoiceServer_StartSession(p,a,b) (p)->lpVtbl->StartSession(p,a,b) #define IDirectPlayVoiceServer_StopSession(p,a) (p)->lpVtbl->StopSession(p,a) #define IDirectPlayVoiceServer_GetSessionDesc(p,a) (p)->lpVtbl->GetSessionDesc(p,a) #define IDirectPlayVoiceServer_SetSessionDesc(p,a) (p)->lpVtbl->SetSessionDesc(p,a) #define IDirectPlayVoiceServer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectPlayVoiceServer_GetCompressionTypes(p,a,b,c,d) (p)->lpVtbl->GetCompressionTypes(p,a,b,c,d) #define IDirectPlayVoiceServer_SetTransmitTargets(p,a,b,c,d) (p)->lpVtbl->SetTransmitTargets(p,a,b,c,d) #define IDirectPlayVoiceServer_GetTransmitTargets(p,a,b,c,d) (p)->lpVtbl->GetTransmitTargets(p,a,b,c,d) #define IDirectPlayVoiceServer_SetNotifyMask(p,a,b) (p)->lpVtbl->SetNotifyMask(p,a,b) #define IDirectPlayVoiceTest_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectPlayVoiceTest_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectPlayVoiceTest_Release(p) (p)->lpVtbl->Release(p) #define IDirectPlayVoiceTest_CheckAudioSetup(p,a,b,c,d) (p)->lpVtbl->CheckAudioSetup(p,a,b,c,d) #else /* C++ */ #define IDirectPlayVoiceClient_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlayVoiceClient_AddRef(p) (p)->AddRef() #define IDirectPlayVoiceClient_Release(p) (p)->Release() #define IDirectPlayVoiceClient_Initialize(p,a,b,c,d,e) (p)->Initialize(a,b,c,d,e) #define IDirectPlayVoiceClient_Connect(p,a,b,c) (p)->Connect(a,b,c) #define IDirectPlayVoiceClient_Disconnect(p,a) (p)->Disconnect(a) #define IDirectPlayVoiceClient_GetSessionDesc(p,a) (p)->GetSessionDesc(a) #define IDirectPlayVoiceClient_GetClientConfig(p,a) (p)->GetClientConfig(a) #define IDirectPlayVoiceClient_SetClientConfig(p,a) (p)->SetClientConfig(a) #define IDirectPlayVoiceClient_GetCaps(p,a) (p)->GetCaps(a) #define IDirectPlayVoiceClient_GetCompressionTypes(p,a,b,c,d) (p)->GetCompressionTypes(a,b,c,d) #define IDirectPlayVoiceClient_SetTransmitTargets(p,a,b,c) (p)->SetTransmitTargets(a,b,c) #define IDirectPlayVoiceClient_GetTransmitTargets(p,a,b,c) (p)->GetTransmitTargets(a,b,c) #define IDirectPlayVoiceClient_Create3DSoundBuffer(p,a,b,c,d,e) (p)->Create3DSoundBuffer(a,b,c,d,e) #define IDirectPlayVoiceClient_Delete3DSoundBuffer(p,a,b) (p)->Delete3DSoundBuffer(a,b) #define IDirectPlayVoiceClient_SetNotifyMask(p,a,b) (p)->SetNotifyMask(a,b) #define IDirectPlayVoiceClient_GetSoundDeviceConfig(p,a,b) (p)->GetSoundDeviceConfig(a,b) #define IDirectPlayVoiceServer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlayVoiceServer_AddRef(p) (p)->AddRef() #define IDirectPlayVoiceServer_Release(p) (p)->Release() #define IDirectPlayVoiceServer_Initialize(p,a,b,c,d,e) (p)->Initialize(a,b,c,d,e) #define IDirectPlayVoiceServer_StartSession(p,a,b) (p)->StartSession(a,b) #define IDirectPlayVoiceServer_StopSession(p,a) (p)->StopSession(a) #define IDirectPlayVoiceServer_GetSessionDesc(p,a) (p)->GetSessionDesc(a) #define IDirectPlayVoiceServer_SetSessionDesc(p,a) (p)->SetSessionDesc(a) #define IDirectPlayVoiceServer_GetCaps(p,a) (p)->GetCaps(a) #define IDirectPlayVoiceServer_GetCompressionTypes(p,a,b,c,d) (p)->GetCompressionTypes(a,b,c,d) #define IDirectPlayVoiceServer_SetTransmitTargets(p,a,b,c,d) (p)->SetTransmitTargets(a,b,c,d) #define IDirectPlayVoiceServer_GetTransmitTargets(p,a,b,c,d) (p)->GetTransmitTargets(a,b,c,d) #define IDirectPlayVoiceServer_SetNotifyMask(p,a,b) (p)->SetNotifyMask(a,b) #define IDirectPlayVoiceTest_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectPlayVoiceTest_AddRef(p) (p)->AddRef() #define IDirectPlayVoiceTest_Release(p) (p)->Release() #define IDirectPlayVoiceTest_CheckAudioSetup(p,a,b,c,d) (p)->CheckAudioSetup(a,b,c,d) #endif #ifdef __cplusplus } #endif #endif /* __DVOICE_INCLUDED__ */ ================================================ FILE: wine/windows/dwmapi.h ================================================ /* * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DWMAPI_H #define __WINE_DWMAPI_H #include "wtypes.h" #include "uxtheme.h" #ifdef __cplusplus extern "C" { #endif #ifndef DWMAPI # define DWMAPI STDAPI # define DWMAPI_(type) STDAPI_(type) #endif DECLARE_HANDLE(HTHUMBNAIL); typedef HTHUMBNAIL *PHTHUMBNAIL; #include typedef ULONGLONG DWM_FRAME_COUNT; typedef ULONGLONG QPC_TIME; typedef enum _DWM_SOURCE_FRAME_SAMPLING { DWM_SOURCE_FRAME_SAMPLING_POINT, DWM_SOURCE_FRAME_SAMPLING_COVERAGE, DWM_SOURCE_FRAME_SAMPLING_LAST } DWM_SOURCE_FRAME_SAMPLING; typedef struct _UNSIGNED_RATIO { UINT32 uiNumerator; UINT32 uiDenominator; } UNSIGNED_RATIO; typedef struct _DWM_TIMING_INFO { UINT32 cbSize; UNSIGNED_RATIO rateRefresh; QPC_TIME qpcRefreshPeriod; UNSIGNED_RATIO rateCompose; QPC_TIME qpcVBlank; DWM_FRAME_COUNT cRefresh; UINT cDXRefresh; QPC_TIME qpcCompose; DWM_FRAME_COUNT cFrame; UINT cDXPresent; DWM_FRAME_COUNT cRefreshFrame; DWM_FRAME_COUNT cFrameSubmitted; UINT cDXPresentSubmitted; DWM_FRAME_COUNT cFrameConfirmed; UINT cDXPresentConfirmed; DWM_FRAME_COUNT cRefreshConfirmed; UINT cDXRefreshConfirmed; DWM_FRAME_COUNT cFramesLate; UINT cFramesOutstanding; DWM_FRAME_COUNT cFrameDisplayed; QPC_TIME qpcFrameDisplayed; DWM_FRAME_COUNT cRefreshFrameDisplayed; DWM_FRAME_COUNT cFrameComplete; QPC_TIME qpcFrameComplete; DWM_FRAME_COUNT cFramePending; QPC_TIME qpcFramePending; DWM_FRAME_COUNT cFramesDisplayed; DWM_FRAME_COUNT cFramesComplete; DWM_FRAME_COUNT cFramesPending; DWM_FRAME_COUNT cFramesAvailable; DWM_FRAME_COUNT cFramesDropped; DWM_FRAME_COUNT cFramesMissed; DWM_FRAME_COUNT cRefreshNextDisplayed; DWM_FRAME_COUNT cRefreshNextPresented; DWM_FRAME_COUNT cRefreshesDisplayed; DWM_FRAME_COUNT cRefreshesPresented; DWM_FRAME_COUNT cRefreshStarted; ULONGLONG cPixelsReceived; ULONGLONG cPixelsDrawn; DWM_FRAME_COUNT cBuffersEmpty; } DWM_TIMING_INFO; typedef struct _MilMatrix3x2D { DOUBLE S_11; DOUBLE S_12; DOUBLE S_21; DOUBLE S_22; DOUBLE DX; DOUBLE DY; } MilMatrix3x2D; #define DWM_BB_ENABLE 0x00000001 #define DWM_BB_BLURREGION 0x00000002 #define DWM_BB_TRANSITIONONMAXIMIZED 0x00000004 typedef struct _DWM_BLURBEHIND { DWORD dwFlags; BOOL fEnable; HRGN hRgnBlur; BOOL fTransitionOnMaximized; } DWM_BLURBEHIND, *PDWM_BLURBEHIND; typedef struct _DWM_THUMBNAIL_PROPERTIES { DWORD dwFlags; RECT rcDestination; RECT rcSource; BYTE opacity; BOOL fVisible; BOOL fSourceClientAreaOnly; } DWM_THUMBNAIL_PROPERTIES, *PDWM_THUMBNAIL_PROPERTIES; typedef struct _DWM_PRESENT_PARAMETERS { UINT32 cbSize; BOOL fQueue; DWM_FRAME_COUNT cRefreshStart; UINT cBuffer; BOOL fUseSourceRate; UNSIGNED_RATIO rateSource; UINT cRefreshesPerFrame; DWM_SOURCE_FRAME_SAMPLING eSampling; } DWM_PRESENT_PARAMETERS; #include DWMAPI_(BOOL) DwmDefWindowProc(HWND, UINT, WPARAM, LPARAM, LRESULT*); DWMAPI DwmEnableBlurBehindWindow(HWND, const DWM_BLURBEHIND *); DWMAPI DwmEnableComposition(UINT); DWMAPI DwmEnableMMCSS(BOOL); DWMAPI DwmExtendFrameIntoClientArea(HWND,const MARGINS*); DWMAPI DwmGetColorizationColor(DWORD*,BOOL); DWMAPI DwmGetCompositionTimingInfo(HWND,DWM_TIMING_INFO*); DWMAPI DwmInvalidateIconicBitmaps(HWND); DWMAPI DwmIsCompositionEnabled(BOOL*); DWMAPI DwmRegisterThumbnail(HWND, HWND, PHTHUMBNAIL); DWMAPI DwmSetPresentParameters(HWND, DWM_PRESENT_PARAMETERS *); DWMAPI DwmSetWindowAttribute(HWND, DWORD, LPCVOID, DWORD); DWMAPI DwmUnregisterThumbnail(HTHUMBNAIL); DWMAPI DwmUpdateThumbnailProperties(HTHUMBNAIL, const DWM_THUMBNAIL_PROPERTIES *); #ifdef __cplusplus } #endif #endif /* __WINE_DWMAPI_H */ ================================================ FILE: wine/windows/dwrite.idl ================================================ /* * Copyright 2012 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "dcommon.idl"; interface IDWriteFactory; interface IDWriteFontCollection; interface IDWriteFontFamily; interface IDWriteFontFace; interface IDWriteInlineObject; interface ID2D1SimplifiedGeometrySink; typedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink; cpp_quote("#ifndef _WINDEF_") /* already defined in windef.h but needed for WIDL */ typedef void *HMONITOR; cpp_quote("#endif /* _WINDEF_ */") cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetGlyphIndices") cpp_quote("#endif") typedef enum DWRITE_FACTORY_TYPE { DWRITE_FACTORY_TYPE_SHARED, DWRITE_FACTORY_TYPE_ISOLATED } DWRITE_FACTORY_TYPE; typedef enum DWRITE_FONT_FILE_TYPE { DWRITE_FONT_FILE_TYPE_UNKNOWN, DWRITE_FONT_FILE_TYPE_CFF, DWRITE_FONT_FILE_TYPE_TRUETYPE, DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION, DWRITE_FONT_FILE_TYPE_TYPE1_PFM, DWRITE_FONT_FILE_TYPE_TYPE1_PFB, DWRITE_FONT_FILE_TYPE_VECTOR, DWRITE_FONT_FILE_TYPE_BITMAP, DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION } DWRITE_FONT_FILE_TYPE; typedef enum DWRITE_FONT_FACE_TYPE { DWRITE_FONT_FACE_TYPE_CFF, DWRITE_FONT_FACE_TYPE_TRUETYPE, DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION, DWRITE_FONT_FACE_TYPE_TYPE1, DWRITE_FONT_FACE_TYPE_VECTOR, DWRITE_FONT_FACE_TYPE_BITMAP, DWRITE_FONT_FACE_TYPE_UNKNOWN, DWRITE_FONT_FACE_TYPE_RAW_CFF, DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION } DWRITE_FONT_FACE_TYPE; typedef enum DWRITE_FONT_WEIGHT { DWRITE_FONT_WEIGHT_THIN = 100, DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200, DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200, DWRITE_FONT_WEIGHT_LIGHT = 300, DWRITE_FONT_WEIGHT_SEMI_LIGHT = 350, DWRITE_FONT_WEIGHT_NORMAL = 400, DWRITE_FONT_WEIGHT_REGULAR = 400, DWRITE_FONT_WEIGHT_MEDIUM = 500, DWRITE_FONT_WEIGHT_DEMI_BOLD = 600, DWRITE_FONT_WEIGHT_SEMI_BOLD = 600, DWRITE_FONT_WEIGHT_BOLD = 700, DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800, DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800, DWRITE_FONT_WEIGHT_BLACK = 900, DWRITE_FONT_WEIGHT_HEAVY = 900, DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950, DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950 } DWRITE_FONT_WEIGHT; typedef enum DWRITE_FONT_STRETCH { DWRITE_FONT_STRETCH_UNDEFINED = 0, DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1, DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2, DWRITE_FONT_STRETCH_CONDENSED = 3, DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4, DWRITE_FONT_STRETCH_NORMAL = 5, DWRITE_FONT_STRETCH_MEDIUM = 5, DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6, DWRITE_FONT_STRETCH_EXPANDED = 7, DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8, DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9 } DWRITE_FONT_STRETCH; typedef enum DWRITE_FONT_STYLE { DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STYLE_OBLIQUE, DWRITE_FONT_STYLE_ITALIC } DWRITE_FONT_STYLE; typedef enum DWRITE_INFORMATIONAL_STRING_ID { DWRITE_INFORMATIONAL_STRING_NONE, DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE, DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS, DWRITE_INFORMATIONAL_STRING_TRADEMARK, DWRITE_INFORMATIONAL_STRING_MANUFACTURER, DWRITE_INFORMATIONAL_STRING_DESIGNER, DWRITE_INFORMATIONAL_STRING_DESIGNER_URL, DWRITE_INFORMATIONAL_STRING_DESCRIPTION, DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL, DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION, DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL, DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES, DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES, DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES, DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES, DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT, DWRITE_INFORMATIONAL_STRING_FULL_NAME, DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME, DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME } DWRITE_INFORMATIONAL_STRING_ID; typedef enum DWRITE_FONT_SIMULATIONS { DWRITE_FONT_SIMULATIONS_NONE, DWRITE_FONT_SIMULATIONS_BOLD, DWRITE_FONT_SIMULATIONS_OBLIQUE } DWRITE_FONT_SIMULATIONS; typedef enum DWRITE_PIXEL_GEOMETRY { DWRITE_PIXEL_GEOMETRY_FLAT, DWRITE_PIXEL_GEOMETRY_RGB, DWRITE_PIXEL_GEOMETRY_BGR } DWRITE_PIXEL_GEOMETRY; typedef enum DWRITE_RENDERING_MODE { DWRITE_RENDERING_MODE_DEFAULT, DWRITE_RENDERING_MODE_ALIASED, DWRITE_RENDERING_MODE_GDI_CLASSIC, DWRITE_RENDERING_MODE_GDI_NATURAL, DWRITE_RENDERING_MODE_NATURAL, DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC, DWRITE_RENDERING_MODE_OUTLINE, DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC, DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL, DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = DWRITE_RENDERING_MODE_NATURAL, DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC } DWRITE_RENDERING_MODE; typedef enum DWRITE_TEXT_ALIGNMENT { DWRITE_TEXT_ALIGNMENT_LEADING, DWRITE_TEXT_ALIGNMENT_TRAILING, DWRITE_TEXT_ALIGNMENT_CENTER, DWRITE_TEXT_ALIGNMENT_JUSTIFIED } DWRITE_TEXT_ALIGNMENT; typedef enum DWRITE_PARAGRAPH_ALIGNMENT { DWRITE_PARAGRAPH_ALIGNMENT_NEAR, DWRITE_PARAGRAPH_ALIGNMENT_FAR, DWRITE_PARAGRAPH_ALIGNMENT_CENTER } DWRITE_PARAGRAPH_ALIGNMENT; typedef enum DWRITE_WORD_WRAPPING { DWRITE_WORD_WRAPPING_WRAP, DWRITE_WORD_WRAPPING_NO_WRAP, DWRITE_WORD_WRAPPING_EMERGENCY_BREAK, DWRITE_WORD_WRAPPING_WHOLE_WORD, DWRITE_WORD_WRAPPING_CHARACTER } DWRITE_WORD_WRAPPING; typedef enum DWRITE_READING_DIRECTION { DWRITE_READING_DIRECTION_LEFT_TO_RIGHT, DWRITE_READING_DIRECTION_RIGHT_TO_LEFT, DWRITE_READING_DIRECTION_TOP_TO_BOTTOM, DWRITE_READING_DIRECTION_BOTTOM_TO_TOP } DWRITE_READING_DIRECTION; typedef enum DWRITE_FLOW_DIRECTION { DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM, DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP, DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT, DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT } DWRITE_FLOW_DIRECTION; typedef enum DWRITE_TRIMMING_GRANULARITY { DWRITE_TRIMMING_GRANULARITY_NONE, DWRITE_TRIMMING_GRANULARITY_CHARACTER, DWRITE_TRIMMING_GRANULARITY_WORD } DWRITE_TRIMMING_GRANULARITY; typedef enum DWRITE_BREAK_CONDITION { DWRITE_BREAK_CONDITION_NEUTRAL, DWRITE_BREAK_CONDITION_CAN_BREAK, DWRITE_BREAK_CONDITION_MAY_NOT_BREAK, DWRITE_BREAK_CONDITION_MUST_BREAK } DWRITE_BREAK_CONDITION; typedef enum DWRITE_LINE_SPACING_METHOD { DWRITE_LINE_SPACING_METHOD_DEFAULT, DWRITE_LINE_SPACING_METHOD_UNIFORM, DWRITE_LINE_SPACING_METHOD_PROPORTIONAL } DWRITE_LINE_SPACING_METHOD; cpp_quote("#define DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d) ( \\") cpp_quote(" ((UINT32)(UINT8)(d) << 24) | \\") cpp_quote(" ((UINT32)(UINT8)(c) << 16) | \\") cpp_quote(" ((UINT32)(UINT8)(b) << 8) | \\") cpp_quote(" (UINT32)(UINT8)(a))") typedef enum DWRITE_FONT_FEATURE_TAG { DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS = 0x63726661, /* 'afrc' */ DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS = 0x63703263, /* 'c2pc' */ DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS = 0x63733263, /* 'c2sc' */ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES = 0x746c6163, /* 'calt' */ DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS = 0x65736163, /* 'case' */ DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, /* 'ccmp' */ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES = 0x67696c63, /* 'clig' */ DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING = 0x70737063, /* 'cpsp' */ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH = 0x68777363, /* 'cswh' */ DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING = 0x73727563, /* 'curs' */ DWRITE_FONT_FEATURE_TAG_DEFAULT = 0x746c6664, /* 'dflt' */ DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES = 0x67696c64, /* 'dlig' */ DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS = 0x74707865, /* 'expt' */ DWRITE_FONT_FEATURE_TAG_FRACTIONS = 0x63617266, /* 'frac' */ DWRITE_FONT_FEATURE_TAG_FULL_WIDTH = 0x64697766, /* 'fwid' */ DWRITE_FONT_FEATURE_TAG_HALF_FORMS = 0x666c6168, /* 'half' */ DWRITE_FONT_FEATURE_TAG_HALANT_FORMS = 0x6e6c6168, /* 'haln' */ DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH = 0x746c6168, /* 'halt' */ DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS = 0x74736968, /* 'hist' */ DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES = 0x616e6b68, /* 'hkna' */ DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES = 0x67696c68, /* 'hlig' */ DWRITE_FONT_FEATURE_TAG_HALF_WIDTH = 0x64697768, /* 'hwid' */ DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS = 0x6f6a6f68, /* 'hojo' */ DWRITE_FONT_FEATURE_TAG_JIS04_FORMS = 0x3430706a, /* 'jp04' */ DWRITE_FONT_FEATURE_TAG_JIS78_FORMS = 0x3837706a, /* 'jp78' */ DWRITE_FONT_FEATURE_TAG_JIS83_FORMS = 0x3338706a, /* 'jp83' */ DWRITE_FONT_FEATURE_TAG_JIS90_FORMS = 0x3039706a, /* 'jp90' */ DWRITE_FONT_FEATURE_TAG_KERNING = 0x6e72656b, /* 'kern' */ DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES = 0x6167696c, /* 'liga' */ DWRITE_FONT_FEATURE_TAG_LINING_FIGURES = 0x6d756e6c, /* 'lnum' */ DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS = 0x6c636f6c, /* 'locl' */ DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING = 0x6b72616d, /* 'mark' */ DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK = 0x6b72676d, /* 'mgrk' */ DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING = 0x6b6d6b6d, /* 'mkmk' */ DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS = 0x746c616e, /* 'nalt' */ DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS = 0x6b636c6e, /* 'nlck' */ DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES = 0x6d756e6f, /* 'onum' */ DWRITE_FONT_FEATURE_TAG_ORDINALS = 0x6e64726f, /* 'ordn' */ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH = 0x746c6170, /* 'palt' */ DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS = 0x70616370, /* 'pcap' */ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES = 0x6d756e70, /* 'pnum' */ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS = 0x64697770, /* 'pwid' */ DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS = 0x64697771, /* 'qwid' */ DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES = 0x67696c72, /* 'rlig' */ DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS = 0x79627572, /* 'ruby' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES = 0x746c6173, /* 'salt' */ DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS = 0x666e6973, /* 'sinf' */ DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS = 0x70636d73, /* 'smcp' */ DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS = 0x6c706d73, /* 'smpl' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 = 0x31307373, /* 'ss01' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 = 0x32307373, /* 'ss02' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 = 0x33307373, /* 'ss03' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 = 0x34307373, /* 'ss04' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 = 0x35307373, /* 'ss05' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 = 0x36307373, /* 'ss06' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 = 0x37307373, /* 'ss07' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 = 0x38307373, /* 'ss08' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 = 0x39307373, /* 'ss09' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 = 0x30317373, /* 'ss10' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 = 0x31317373, /* 'ss11' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 = 0x32317373, /* 'ss12' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 = 0x33317373, /* 'ss13' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 = 0x34317373, /* 'ss14' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 = 0x35317373, /* 'ss15' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 = 0x36317373, /* 'ss16' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 = 0x37317373, /* 'ss17' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 = 0x38317373, /* 'ss18' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 = 0x39317373, /* 'ss19' */ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 = 0x30327373, /* 'ss20' */ DWRITE_FONT_FEATURE_TAG_SUBSCRIPT = 0x73627573, /* 'subs' */ DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT = 0x73707573, /* 'sups' */ DWRITE_FONT_FEATURE_TAG_SWASH = 0x68737773, /* 'swsh' */ DWRITE_FONT_FEATURE_TAG_TITLING = 0x6c746974, /* 'titl' */ DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS = 0x6d616e74, /* 'tnam' */ DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES = 0x6d756e74, /* 'tnum' */ DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS = 0x64617274, /* 'trad' */ DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS = 0x64697774, /* 'twid' */ DWRITE_FONT_FEATURE_TAG_UNICASE = 0x63696e75, /* 'unic' */ DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING = 0x74726576, /* 'vert' */ DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION= 0x32747276, /* 'vrt2' */ DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO = 0x6f72657a, /* 'zero' */ } DWRITE_FONT_FEATURE_TAG; typedef enum DWRITE_SCRIPT_SHAPES { DWRITE_SCRIPT_SHAPES_DEFAULT = 0, DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1 } DWRITE_SCRIPT_SHAPES; typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD { DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE, DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL, DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE, DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL, DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL } DWRITE_NUMBER_SUBSTITUTION_METHOD; cpp_quote("#define DWRITE_ALPHA_MAX 255") typedef enum DWRITE_TEXTURE_TYPE { DWRITE_TEXTURE_ALIASED_1x1, DWRITE_TEXTURE_CLEARTYPE_3x1 } DWRITE_TEXTURE_TYPE; typedef struct DWRITE_FONT_METRICS { UINT16 designUnitsPerEm; UINT16 ascent; UINT16 descent; INT16 lineGap; UINT16 capHeight; UINT16 xHeight; INT16 underlinePosition; UINT16 underlineThickness; INT16 strikethroughPosition; UINT16 strikethroughThickness; } DWRITE_FONT_METRICS; typedef struct DWRITE_GLYPH_METRICS { INT32 leftSideBearing; UINT32 advanceWidth; INT32 rightSideBearing; INT32 topSideBearing; UINT32 advanceHeight; INT32 bottomSideBearing; INT32 verticalOriginY; } DWRITE_GLYPH_METRICS; typedef struct DWRITE_GLYPH_OFFSET { FLOAT advanceOffset; FLOAT ascenderOffset; } DWRITE_GLYPH_OFFSET; typedef struct DWRITE_MATRIX { FLOAT m11; FLOAT m12; FLOAT m21; FLOAT m22; FLOAT dx; FLOAT dy; } DWRITE_MATRIX; typedef struct DWRITE_TRIMMING { DWRITE_TRIMMING_GRANULARITY granularity; UINT32 delimiter; UINT32 delimiterCount; } DWRITE_TRIMMING; cpp_quote("#ifndef __d2d1_h__") typedef struct DWRITE_GLYPH_RUN DWRITE_GLYPH_RUN; cpp_quote("#endif /* __d2d1_h__ */") struct DWRITE_GLYPH_RUN { IDWriteFontFace* fontFace; FLOAT fontEmSize; UINT32 glyphCount; UINT16 const* glyphIndices; FLOAT const* glyphAdvances; DWRITE_GLYPH_OFFSET const* glyphOffsets; BOOL isSideways; UINT32 bidiLevel; }; cpp_quote("#ifndef __d2d1_1_h__") typedef struct DWRITE_GLYPH_RUN_DESCRIPTION DWRITE_GLYPH_RUN_DESCRIPTION; cpp_quote("#endif /* __d2d1_1_h__ */") struct DWRITE_GLYPH_RUN_DESCRIPTION { WCHAR const* localeName; WCHAR const* string; UINT32 stringLength; UINT16 const* clusterMap; UINT32 textPosition; }; typedef struct DWRITE_UNDERLINE { FLOAT width; FLOAT thickness; FLOAT offset; FLOAT runHeight; DWRITE_READING_DIRECTION readingDirection; DWRITE_FLOW_DIRECTION flowDirection; WCHAR const* localeName; DWRITE_MEASURING_MODE measuringMode; } DWRITE_UNDERLINE; typedef struct DWRITE_STRIKETHROUGH { FLOAT width; FLOAT thickness; FLOAT offset; DWRITE_READING_DIRECTION readingDirection; DWRITE_FLOW_DIRECTION flowDirection; WCHAR const* localeName; DWRITE_MEASURING_MODE measuringMode; } DWRITE_STRIKETHROUGH; typedef struct DWRITE_INLINE_OBJECT_METRICS { FLOAT width; FLOAT height; FLOAT baseline; BOOL supportsSideways; } DWRITE_INLINE_OBJECT_METRICS; typedef struct DWRITE_OVERHANG_METRICS { FLOAT left; FLOAT top; FLOAT right; FLOAT bottom; } DWRITE_OVERHANG_METRICS; typedef struct DWRITE_FONT_FEATURE { DWRITE_FONT_FEATURE_TAG nameTag; UINT32 parameter; } DWRITE_FONT_FEATURE; typedef struct DWRITE_TEXT_RANGE { UINT32 startPosition; UINT32 length; } DWRITE_TEXT_RANGE; typedef struct DWRITE_LINE_METRICS { UINT32 length; UINT32 trailingWhitespaceLength; UINT32 newlineLength; FLOAT height; FLOAT baseline; BOOL isTrimmed; } DWRITE_LINE_METRICS; typedef struct DWRITE_TEXT_METRICS { FLOAT left; FLOAT top; FLOAT width; FLOAT widthIncludingTrailingWhitespace; FLOAT height; FLOAT layoutWidth; FLOAT layoutHeight; UINT32 maxBidiReorderingDepth; UINT32 lineCount; } DWRITE_TEXT_METRICS; typedef struct DWRITE_CLUSTER_METRICS { FLOAT width; UINT16 length; UINT16 canWrapLineAfter : 1; UINT16 isWhitespace : 1; UINT16 isNewline : 1; UINT16 isSoftHyphen : 1; UINT16 isRightToLeft : 1; UINT16 padding : 11; } DWRITE_CLUSTER_METRICS; typedef struct DWRITE_HIT_TEST_METRICS { UINT32 textPosition; UINT32 length; FLOAT left; FLOAT top; FLOAT width; FLOAT height; UINT32 bidiLevel; BOOL isText; BOOL isTrimmed; } DWRITE_HIT_TEST_METRICS; typedef struct DWRITE_SCRIPT_ANALYSIS { UINT16 script; DWRITE_SCRIPT_SHAPES shapes; } DWRITE_SCRIPT_ANALYSIS; typedef struct DWRITE_LINE_BREAKPOINT { UINT8 breakConditionBefore : 2; UINT8 breakConditionAfter : 2; UINT8 isWhitespace : 1; UINT8 isSoftHyphen : 1; UINT8 padding : 2; } DWRITE_LINE_BREAKPOINT; typedef struct DWRITE_TYPOGRAPHIC_FEATURES { DWRITE_FONT_FEATURE* features; UINT32 featureCount; } DWRITE_TYPOGRAPHIC_FEATURES; typedef struct DWRITE_SHAPING_TEXT_PROPERTIES { UINT16 isShapedAlone : 1; UINT16 reserved : 15; } DWRITE_SHAPING_TEXT_PROPERTIES; typedef struct DWRITE_SHAPING_GLYPH_PROPERTIES { UINT16 justification : 4; UINT16 isClusterStart : 1; UINT16 isDiacritic : 1; UINT16 isZeroWidthSpace : 1; UINT16 reserved : 9; } DWRITE_SHAPING_GLYPH_PROPERTIES; [ local, object, uuid(6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0) ] interface IDWriteFontFileStream : IUnknown { HRESULT ReadFileFragment( void const **fragment_start, UINT64 offset, UINT64 fragment_size, void **fragment_context); void ReleaseFileFragment(void *fragment_context); HRESULT GetFileSize(UINT64 *size); HRESULT GetLastWriteTime(UINT64 *last_writetime); } [ local, object, uuid(727cad4e-d6af-4c9e-8a08-d695b11caa49) ] interface IDWriteFontFileLoader : IUnknown { HRESULT CreateStreamFromKey( void const *key, UINT32 key_size, IDWriteFontFileStream **stream); } [ local, object, uuid(b2d9f3ec-c9fe-4a11-a2ec-d86208f7c0a2) ] interface IDWriteLocalFontFileLoader : IDWriteFontFileLoader { HRESULT GetFilePathLengthFromKey(void const *key, UINT32 key_size, UINT32 *length); HRESULT GetFilePathFromKey(void const *key, UINT32 key_size, WCHAR *path, UINT32 length); HRESULT GetLastWriteTimeFromKey(void const *key, UINT32 key_size, FILETIME *writetime); } [ local, object, uuid(739d886a-cef5-47dc-8769-1a8b41bebbb0) ] interface IDWriteFontFile : IUnknown { HRESULT GetReferenceKey( void const **key, UINT32 *key_size); HRESULT GetLoader(IDWriteFontFileLoader **loader); HRESULT Analyze( BOOL *is_supported_fonttype, DWRITE_FONT_FILE_TYPE *file_type, DWRITE_FONT_FACE_TYPE *face_type, UINT32 *faces_num); } [ local, object, uuid(72755049-5ff7-435d-8348-4be97cfa6c7c) ] interface IDWriteFontFileEnumerator : IUnknown { HRESULT MoveNext(BOOL *has_current_file); HRESULT GetCurrentFontFile(IDWriteFontFile **font_file); } [ local, object, uuid(cca920e4-52f0-492b-bfa8-29c72ee0a468) ] interface IDWriteFontCollectionLoader : IUnknown { HRESULT CreateEnumeratorFromKey( IDWriteFactory* factory, void const* key, UINT32 key_size, IDWriteFontFileEnumerator **enumerator); } [ local, object, uuid(08256209-099a-4b34-b86d-c22b110e7771) ] interface IDWriteLocalizedStrings : IUnknown { UINT32 GetCount(); HRESULT FindLocaleName( WCHAR const *locale_name, UINT32 *index, BOOL *exists); HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length); HRESULT GetLocaleName(UINT32 index, WCHAR *locale_name, UINT32 size); HRESULT GetStringLength(UINT32 index, UINT32 *length); HRESULT GetString(UINT32 index, WCHAR *buffer, UINT32 size); } [ local, object, uuid(2f0da53a-2add-47cd-82ee-d9ec34688e75) ] interface IDWriteRenderingParams : IUnknown { FLOAT GetGamma(); FLOAT GetEnhancedContrast(); FLOAT GetClearTypeLevel(); DWRITE_PIXEL_GEOMETRY GetPixelGeometry(); DWRITE_RENDERING_MODE GetRenderingMode(); } [ local, object, uuid(5f49804d-7024-4d43-bfa9-d25984f53849) ] interface IDWriteFontFace : IUnknown { DWRITE_FONT_FACE_TYPE GetType(); HRESULT GetFiles(UINT32 *number_of_files, IDWriteFontFile **fontfiles); UINT32 GetIndex(); DWRITE_FONT_SIMULATIONS GetSimulations(); BOOL IsSymbolFont(); void GetMetrics(DWRITE_FONT_METRICS *metrics); UINT16 GetGlyphCount(); HRESULT GetDesignGlyphMetrics( UINT16 const *glyph_indices, UINT32 glyph_count, DWRITE_GLYPH_METRICS *metrics, [defaultvalue(FALSE)] BOOL is_sideways); HRESULT GetGlyphIndices( UINT32 const *codepoints, UINT32 count, UINT16 *glyph_indices); HRESULT TryGetFontTable( UINT32 table_tag, const void **table_data, UINT32 *table_size, void **context, BOOL *exists); void ReleaseFontTable(void *table_context); HRESULT GetGlyphRunOutline( FLOAT emSize, UINT16 const *glyph_indices, FLOAT const* glyph_advances, DWRITE_GLYPH_OFFSET const *glyph_offsets, UINT32 glyph_count, BOOL is_sideways, BOOL is_rtl, IDWriteGeometrySink *geometrysink); HRESULT GetRecommendedRenderingMode( FLOAT emSize, FLOAT pixels_per_dip, DWRITE_MEASURING_MODE mode, IDWriteRenderingParams* params, DWRITE_RENDERING_MODE* rendering_mode); HRESULT GetGdiCompatibleMetrics( FLOAT emSize, FLOAT pixels_per_dip, DWRITE_MATRIX const *transform, DWRITE_FONT_METRICS *metrics); HRESULT GetGdiCompatibleGlyphMetrics( FLOAT emSize, FLOAT pixels_per_dip, DWRITE_MATRIX const *transform, BOOL use_gdi_natural, UINT16 const *glyph_indices, UINT32 glyph_count, DWRITE_GLYPH_METRICS *metrics, [defaultvalue(FALSE)] BOOL is_sideways); } [ local, object, uuid(acd16696-8c14-4f5d-877e-fe3fc1d32737) ] interface IDWriteFont : IUnknown { HRESULT GetFontFamily(IDWriteFontFamily **family); DWRITE_FONT_WEIGHT GetWeight(); DWRITE_FONT_STRETCH GetStretch(); DWRITE_FONT_STYLE GetStyle(); BOOL IsSymbolFont(); HRESULT GetFaceNames(IDWriteLocalizedStrings **names); HRESULT GetInformationalStrings( DWRITE_INFORMATIONAL_STRING_ID stringid, IDWriteLocalizedStrings **strings, BOOL *exists); DWRITE_FONT_SIMULATIONS GetSimulations(); void GetMetrics(DWRITE_FONT_METRICS *metrics); HRESULT HasCharacter(UINT32 value, BOOL *exists); HRESULT CreateFontFace(IDWriteFontFace **face); } [ local, object, uuid(1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb) ] interface IDWriteFontList : IUnknown { HRESULT GetFontCollection(IDWriteFontCollection **collection); UINT32 GetFontCount(); HRESULT GetFont(UINT32 index, IDWriteFont **font); } [ local, object, uuid(da20d8ef-812a-4c43-9802-62ec4abd7add) ] interface IDWriteFontFamily : IDWriteFontList { HRESULT GetFamilyNames(IDWriteLocalizedStrings **names); HRESULT GetFirstMatchingFont( DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STRETCH stretch, DWRITE_FONT_STYLE style, IDWriteFont **font); HRESULT GetMatchingFonts( DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STRETCH stretch, DWRITE_FONT_STYLE style, IDWriteFontList **fonts); } [ local, object, uuid(a84cee02-3eea-4eee-a827-87c1a02a0fcc) ] interface IDWriteFontCollection : IUnknown { UINT32 GetFontFamilyCount(); HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily **family); HRESULT FindFamilyName(WCHAR const *name, UINT32 *index, BOOL *exists); HRESULT GetFontFromFontFace(IDWriteFontFace *face, IDWriteFont **font); } [ local, object, uuid(eaf3a2da-ecf4-4d24-b644-b34f6842024b) ] interface IDWritePixelSnapping : IUnknown { HRESULT IsPixelSnappingDisabled( void *client_drawingcontext, BOOL *disabled); HRESULT GetCurrentTransform( void *client_drawingcontext, DWRITE_MATRIX *transform); HRESULT GetPixelsPerDip( void *client_drawingcontext, FLOAT *pixels_per_dip); } [ local, object, uuid(ef8a8135-5cc6-45fe-8825-c5a0724eb819) ] interface IDWriteTextRenderer : IDWritePixelSnapping { HRESULT DrawGlyphRun( void* client_drawingcontext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE mode, DWRITE_GLYPH_RUN const *glyph_run, DWRITE_GLYPH_RUN_DESCRIPTION const *run_descr, IUnknown *drawing_effect); HRESULT DrawUnderline( void *client_drawingcontext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_UNDERLINE const* underline, IUnknown *drawing_effect); HRESULT DrawStrikethrough( void *client_drawingcontext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_STRIKETHROUGH const* strikethrough, IUnknown *drawing_effect); HRESULT DrawInlineObject( void *client_drawingcontext, FLOAT originX, FLOAT originY, IDWriteInlineObject *object, BOOL is_sideways, BOOL is_rtl, IUnknown *drawing_effect); } [ local, object, uuid(8339fde3-106f-47ab-8373-1c6295eb10b3) ] interface IDWriteInlineObject : IUnknown { HRESULT Draw( void* client_drawingontext, IDWriteTextRenderer* renderer, FLOAT originX, FLOAT originY, BOOL is_sideways, BOOL is_rtl, IUnknown *drawing_effect); HRESULT GetMetrics(DWRITE_INLINE_OBJECT_METRICS *metrics); HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs); HRESULT GetBreakConditions( DWRITE_BREAK_CONDITION* condition_before, DWRITE_BREAK_CONDITION* condition_after); } [ local, object, uuid(9c906818-31d7-4fd3-a151-7c5e225db55a) ] interface IDWriteTextFormat : IUnknown { HRESULT SetTextAlignment(DWRITE_TEXT_ALIGNMENT alignment); HRESULT SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT alignment); HRESULT SetWordWrapping(DWRITE_WORD_WRAPPING wrapping); HRESULT SetReadingDirection(DWRITE_READING_DIRECTION direction); HRESULT SetFlowDirection(DWRITE_FLOW_DIRECTION direction); HRESULT SetIncrementalTabStop(FLOAT tabstop); HRESULT SetTrimming(DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign); HRESULT SetLineSpacing(DWRITE_LINE_SPACING_METHOD spacing, FLOAT line_spacing, FLOAT baseline); DWRITE_TEXT_ALIGNMENT GetTextAlignment(); DWRITE_PARAGRAPH_ALIGNMENT GetParagraphAlignment(); DWRITE_WORD_WRAPPING GetWordWrapping(); DWRITE_READING_DIRECTION GetReadingDirection(); DWRITE_FLOW_DIRECTION GetFlowDirection(); FLOAT GetIncrementalTabStop(); HRESULT GetTrimming(DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign); HRESULT GetLineSpacing( DWRITE_LINE_SPACING_METHOD *method, FLOAT *spacing, FLOAT *baseline); HRESULT GetFontCollection(IDWriteFontCollection **collection); UINT32 GetFontFamilyNameLength(); HRESULT GetFontFamilyName(WCHAR *name, UINT32 size); DWRITE_FONT_WEIGHT GetFontWeight(); DWRITE_FONT_STYLE GetFontStyle(); DWRITE_FONT_STRETCH GetFontStretch(); FLOAT GetFontSize(); UINT32 GetLocaleNameLength(); HRESULT GetLocaleName(WCHAR *name, UINT32 size); } [ local, object, uuid(55f1112b-1dc2-4b3c-9541-f46894ed85b6) ] interface IDWriteTypography : IUnknown { HRESULT AddFontFeature(DWRITE_FONT_FEATURE feature); UINT32 GetFontFeatureCount(); HRESULT GetFontFeature(UINT32 index, DWRITE_FONT_FEATURE *feature); } [ local, object, uuid(5e5a32a3-8dff-4773-9ff6-0696eab77267) ] interface IDWriteBitmapRenderTarget : IUnknown { HRESULT DrawGlyphRun( FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE measuring_mode, DWRITE_GLYPH_RUN const* glyph_run, IDWriteRenderingParams* params, COLORREF textColor, [defaultvalue(NULL)] RECT *blackbox_rect); HDC GetMemoryDC(); FLOAT GetPixelsPerDip(); HRESULT SetPixelsPerDip(FLOAT pixels_per_dip); HRESULT GetCurrentTransform(DWRITE_MATRIX *transform); HRESULT SetCurrentTransform(DWRITE_MATRIX const *transform); HRESULT GetSize(SIZE *size); HRESULT Resize(UINT32 width, UINT32 height); } cpp_quote("#ifndef _WINGDI_") /* already defined in wingdi.h but needed for WIDL */ #define LF_FACESIZE 32 typedef struct tagLOGFONTW { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; WCHAR lfFaceName[LF_FACESIZE]; } LOGFONTW, *PLOGFONTW, *LPLOGFONTW; cpp_quote("#endif /* _WINGDI_ */") [ local, object, uuid(1edd9491-9853-4299-898f-6432983b6f3a) ] interface IDWriteGdiInterop : IUnknown { HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont, IDWriteFont **font); HRESULT ConvertFontToLOGFONT( IDWriteFont* font, LOGFONTW* logfont, BOOL *is_systemfont); HRESULT ConvertFontFaceToLOGFONT(IDWriteFontFace* font, LOGFONTW* logfont); HRESULT CreateFontFaceFromHdc(HDC hdc, IDWriteFontFace **fontface); HRESULT CreateBitmapRenderTarget(HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target); } [ local, object, uuid(53737037-6d14-410b-9bfe-0b182bb70961) ] interface IDWriteTextLayout : IDWriteTextFormat { HRESULT SetMaxWidth(FLOAT maxWidth); HRESULT SetMaxHeight(FLOAT maxHeight); HRESULT SetFontCollection(IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range); HRESULT SetFontFamilyName(WCHAR const *name, DWRITE_TEXT_RANGE range); HRESULT SetFontWeight(DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range); HRESULT SetFontStyle(DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range); HRESULT SetFontStretch(DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range); HRESULT SetFontSize(FLOAT size, DWRITE_TEXT_RANGE range); HRESULT SetUnderline(BOOL underline, DWRITE_TEXT_RANGE range); HRESULT SetStrikethrough(BOOL strikethrough, DWRITE_TEXT_RANGE range); HRESULT SetDrawingEffect(IUnknown* effect, DWRITE_TEXT_RANGE range); HRESULT SetInlineObject(IDWriteInlineObject *object, DWRITE_TEXT_RANGE range); HRESULT SetTypography(IDWriteTypography* typography, DWRITE_TEXT_RANGE range); HRESULT SetLocaleName(WCHAR const* locale, DWRITE_TEXT_RANGE range); FLOAT GetMaxWidth(); FLOAT GetMaxHeight(); HRESULT GetFontCollection( UINT32 pos, IDWriteFontCollection** collection, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetFontFamilyNameLength( UINT32 pos, UINT32* len, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetFontFamilyName( UINT32 position, WCHAR* name, UINT32 name_size, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetFontWeight( UINT32 position, DWRITE_FONT_WEIGHT *weight, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetFontStyle( UINT32 currentPosition, DWRITE_FONT_STYLE *style, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetFontStretch( UINT32 position, DWRITE_FONT_STRETCH *stretch, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetFontSize( UINT32 position, FLOAT *size, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetUnderline( UINT32 position, BOOL *has_underline, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetStrikethrough( UINT32 position, BOOL *has_strikethrough, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetDrawingEffect( UINT32 position, IUnknown **effect, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetInlineObject( UINT32 position, IDWriteInlineObject **object, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetTypography( UINT32 position, IDWriteTypography** typography, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetLocaleNameLength( UINT32 position, UINT32* length, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT GetLocaleName( UINT32 position, WCHAR* name, UINT32 name_size, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); HRESULT Draw( void *context, IDWriteTextRenderer* renderer, FLOAT originX, FLOAT originY); HRESULT GetLineMetrics( DWRITE_LINE_METRICS *metrics, UINT32 max_count, UINT32 *actual_count); HRESULT GetMetrics(DWRITE_TEXT_METRICS *metrics); HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs); HRESULT GetClusterMetrics( DWRITE_CLUSTER_METRICS *metrics, UINT32 max_count, UINT32* act_count); HRESULT DetermineMinWidth(FLOAT* min_width); HRESULT HitTestPoint( FLOAT pointX, FLOAT pointY, BOOL* is_trailinghit, BOOL* is_inside, DWRITE_HIT_TEST_METRICS *metrics); HRESULT HitTestTextPosition( UINT32 textPosition, BOOL is_trailinghit, FLOAT* pointX, FLOAT* pointY, DWRITE_HIT_TEST_METRICS *metrics); HRESULT HitTestTextRange( UINT32 textPosition, UINT32 textLength, FLOAT originX, FLOAT originY, DWRITE_HIT_TEST_METRICS *metrics, UINT32 max_metricscount, UINT32* actual_metricscount); } [ local, object, uuid(14885cc9-bab0-4f90-b6ed-5c366a2cd03d) ] interface IDWriteNumberSubstitution : IUnknown { } [ local, object, uuid(688e1a58-5094-47c8-adc8-fbcea60ae92b) ] interface IDWriteTextAnalysisSource : IUnknown { HRESULT GetTextAtPosition( UINT32 position, WCHAR const** text, UINT32* text_len); HRESULT GetTextBeforePosition( UINT32 position, WCHAR const** text, UINT32* text_len); DWRITE_READING_DIRECTION GetParagraphReadingDirection(); HRESULT GetLocaleName( UINT32 position, UINT32* text_len, WCHAR const** locale); HRESULT GetNumberSubstitution( UINT32 position, UINT32* text_len, IDWriteNumberSubstitution **substitution); } [ local, object, uuid(5810cd44-0ca0-4701-b3fa-bec5182ae4f6) ] interface IDWriteTextAnalysisSink : IUnknown { HRESULT SetScriptAnalysis( UINT32 position, UINT32 length, DWRITE_SCRIPT_ANALYSIS const* scriptanalysis); HRESULT SetLineBreakpoints( UINT32 position, UINT32 length, DWRITE_LINE_BREAKPOINT const* breakpoints); HRESULT SetBidiLevel( UINT32 position, UINT32 length, UINT8 explicitLevel, UINT8 resolvedLevel); HRESULT SetNumberSubstitution( UINT32 position, UINT32 length, IDWriteNumberSubstitution* substitution); } [ local, object, uuid(b7e6163e-7f46-43b4-84b3-e4e6249c365d) ] interface IDWriteTextAnalyzer : IUnknown { HRESULT AnalyzeScript( IDWriteTextAnalysisSource* source, UINT32 position, UINT32 length, IDWriteTextAnalysisSink* sink); HRESULT AnalyzeBidi( IDWriteTextAnalysisSource* source, UINT32 position, UINT32 length, IDWriteTextAnalysisSink* sink); HRESULT AnalyzeNumberSubstitution( IDWriteTextAnalysisSource* source, UINT32 position, UINT32 length, IDWriteTextAnalysisSink* sink); HRESULT AnalyzeLineBreakpoints( IDWriteTextAnalysisSource* source, UINT32 position, UINT32 length, IDWriteTextAnalysisSink* sink); HRESULT GetGlyphs( WCHAR const* text, UINT32 length, IDWriteFontFace* font_face, BOOL is_sideways, BOOL is_rtl, DWRITE_SCRIPT_ANALYSIS const* analysis, WCHAR const* locale, IDWriteNumberSubstitution* substitution, DWRITE_TYPOGRAPHIC_FEATURES const** features, UINT32 const* feature_range_len, UINT32 feature_ranges, UINT32 max_glyph_count, UINT16* clustermap, DWRITE_SHAPING_TEXT_PROPERTIES* text_props, UINT16* glyph_indices, DWRITE_SHAPING_GLYPH_PROPERTIES* glyph_props, UINT32* actual_glyph_count); HRESULT GetGlyphPlacements( WCHAR const* text, UINT16 const* clustermap, DWRITE_SHAPING_TEXT_PROPERTIES* props, UINT32 text_len, UINT16 const* glyph_indices, DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props, UINT32 glyph_count, IDWriteFontFace * font_face, FLOAT fontEmSize, BOOL is_sideways, BOOL is_rtl, DWRITE_SCRIPT_ANALYSIS const* analysis, WCHAR const* locale, DWRITE_TYPOGRAPHIC_FEATURES const** features, UINT32 const* feature_range_len, UINT32 feature_ranges, FLOAT* glyph_advances, DWRITE_GLYPH_OFFSET* glyph_offsets); HRESULT GetGdiCompatibleGlyphPlacements( WCHAR const* text, UINT16 const* clustermap, DWRITE_SHAPING_TEXT_PROPERTIES* props, UINT32 text_len, UINT16 const* glyph_indices, DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props, UINT32 glyph_count, IDWriteFontFace * font_face, FLOAT fontEmSize, FLOAT pixels_per_dip, DWRITE_MATRIX const* transform, BOOL use_gdi_natural, BOOL is_sideways, BOOL is_rtl, DWRITE_SCRIPT_ANALYSIS const* analysis, WCHAR const* locale, DWRITE_TYPOGRAPHIC_FEATURES const** features, UINT32 const* feature_range_lengths, UINT32 feature_ranges, FLOAT* glyph_advances, DWRITE_GLYPH_OFFSET* glyph_offsets); } [ local, object, uuid(7d97dbf7-e085-42d4-81e3-6a883bded118) ] interface IDWriteGlyphRunAnalysis : IUnknown { HRESULT GetAlphaTextureBounds(DWRITE_TEXTURE_TYPE type, RECT* bounds); HRESULT CreateAlphaTexture(DWRITE_TEXTURE_TYPE type, RECT const* bounds, BYTE* alphaValues, UINT32 bufferSize); HRESULT GetAlphaBlendParams( IDWriteRenderingParams* renderingParams, FLOAT* blendGamma, FLOAT* blendEnhancedContrast, FLOAT* blendClearTypeLevel); } [ local, object, uuid(b859ee5a-d838-4b5b-a2e8-1adc7d93db48) ] interface IDWriteFactory : IUnknown { HRESULT GetSystemFontCollection(IDWriteFontCollection **collection, [defaultvalue(FALSE)] BOOL check_for_updates); HRESULT CreateCustomFontCollection( IDWriteFontCollectionLoader *loader, void const *key, UINT32 key_size, IDWriteFontCollection **collection); HRESULT RegisterFontCollectionLoader(IDWriteFontCollectionLoader *loader); HRESULT UnregisterFontCollectionLoader(IDWriteFontCollectionLoader *loader); HRESULT CreateFontFileReference( WCHAR const *path, FILETIME const *writetime, IDWriteFontFile **font_file); HRESULT CreateCustomFontFileReference( void const *reference_key, UINT32 key_size, IDWriteFontFileLoader *loader, IDWriteFontFile **font_file); HRESULT CreateFontFace( DWRITE_FONT_FACE_TYPE facetype, UINT32 files_number, IDWriteFontFile* const* font_files, UINT32 index, DWRITE_FONT_SIMULATIONS sim_flags, IDWriteFontFace **font_face); HRESULT CreateRenderingParams(IDWriteRenderingParams **params); HRESULT CreateMonitorRenderingParams( HMONITOR monitor, IDWriteRenderingParams **params); HRESULT CreateCustomRenderingParams( FLOAT gamma, FLOAT enhancedContrast, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY geometry, DWRITE_RENDERING_MODE mode, IDWriteRenderingParams **params); HRESULT RegisterFontFileLoader(IDWriteFontFileLoader *loader); HRESULT UnregisterFontFileLoader(IDWriteFontFileLoader *loader); HRESULT CreateTextFormat( WCHAR const* family_name, IDWriteFontCollection *collection, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STYLE style, DWRITE_FONT_STRETCH stretch, FLOAT size, WCHAR const *locale, IDWriteTextFormat **format); HRESULT CreateTypography(IDWriteTypography **typography); HRESULT GetGdiInterop(IDWriteGdiInterop **gdi_interop); HRESULT CreateTextLayout( WCHAR const* string, UINT32 len, IDWriteTextFormat *format, FLOAT max_width, FLOAT max_height, IDWriteTextLayout **layout); HRESULT CreateGdiCompatibleTextLayout( WCHAR const* string, UINT32 len, IDWriteTextFormat *format, FLOAT layout_width, FLOAT layout_height, FLOAT pixels_per_dip, DWRITE_MATRIX const* transform, BOOL use_gdi_natural, IDWriteTextLayout **layout); HRESULT CreateEllipsisTrimmingSign( IDWriteTextFormat *format, IDWriteInlineObject **trimming_sign); HRESULT CreateTextAnalyzer(IDWriteTextAnalyzer **analyzer); HRESULT CreateNumberSubstitution( DWRITE_NUMBER_SUBSTITUTION_METHOD method, WCHAR const* locale, BOOL ignore_user_override, IDWriteNumberSubstitution **substitution); HRESULT CreateGlyphRunAnalysis( DWRITE_GLYPH_RUN const *glyph_run, FLOAT pixels_per_dip, DWRITE_MATRIX const* transform, DWRITE_RENDERING_MODE rendering_mode, DWRITE_MEASURING_MODE measuring_mode, FLOAT baseline_x, FLOAT baseline_y, IDWriteGlyphRunAnalysis **analysis); } cpp_quote("HRESULT WINAPI DWriteCreateFactory(DWRITE_FACTORY_TYPE,REFIID,IUnknown**);") /* error codes */ cpp_quote("#define FACILITY_DWRITE 0x898") cpp_quote("#define DWRITE_ERR_BASE 0x5000") cpp_quote("#define MAKE_DWRITE_HR(severity, code) MAKE_HRESULT(severity, FACILITY_DWRITE, (DWRITE_ERR_BASE + code))") cpp_quote("#define MAKE_DWRITE_HR_ERR(code) MAKE_DWRITE_HR(SEVERITY_ERROR, code)") ================================================ FILE: wine/windows/dwrite_1.idl ================================================ /* * Copyright 2013 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dwrite.idl"; typedef enum DWRITE_PANOSE_FAMILY { DWRITE_PANOSE_FAMILY_ANY, DWRITE_PANOSE_FAMILY_NO_FIT, DWRITE_PANOSE_FAMILY_TEXT_DISPLAY, DWRITE_PANOSE_FAMILY_SCRIPT, DWRITE_PANOSE_FAMILY_DECORATIVE, DWRITE_PANOSE_FAMILY_SYMBOL, DWRITE_PANOSE_FAMILY_PICTORIAL = DWRITE_PANOSE_FAMILY_SYMBOL } DWRITE_PANOSE_FAMILY; typedef enum DWRITE_PANOSE_SERIF_STYLE { DWRITE_PANOSE_SERIF_STYLE_ANY, DWRITE_PANOSE_SERIF_STYLE_NO_FIT, DWRITE_PANOSE_SERIF_STYLE_COVE, DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE, DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE, DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE, DWRITE_PANOSE_SERIF_STYLE_SQUARE, DWRITE_PANOSE_SERIF_STYLE_THIN, DWRITE_PANOSE_SERIF_STYLE_OVAL, DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED, DWRITE_PANOSE_SERIF_STYLE_TRIANGLE, DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS, DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS, DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS, DWRITE_PANOSE_SERIF_STYLE_FLARED, DWRITE_PANOSE_SERIF_STYLE_ROUNDED, DWRITE_PANOSE_SERIF_STYLE_SCRIPT, DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS, DWRITE_PANOSE_SERIF_STYLE_BONE = DWRITE_PANOSE_SERIF_STYLE_OVAL } DWRITE_PANOSE_SERIF_STYLE; typedef enum DWRITE_PANOSE_WEIGHT { DWRITE_PANOSE_WEIGHT_ANY, DWRITE_PANOSE_WEIGHT_NO_FIT, DWRITE_PANOSE_WEIGHT_VERY_LIGHT, DWRITE_PANOSE_WEIGHT_LIGHT, DWRITE_PANOSE_WEIGHT_THIN, DWRITE_PANOSE_WEIGHT_BOOK, DWRITE_PANOSE_WEIGHT_MEDIUM, DWRITE_PANOSE_WEIGHT_DEMI, DWRITE_PANOSE_WEIGHT_BOLD, DWRITE_PANOSE_WEIGHT_HEAVY, DWRITE_PANOSE_WEIGHT_BLACK, DWRITE_PANOSE_WEIGHT_EXTRA_BLACK, DWRITE_PANOSE_WEIGHT_NORD = DWRITE_PANOSE_WEIGHT_EXTRA_BLACK } DWRITE_PANOSE_WEIGHT; typedef enum DWRITE_PANOSE_PROPORTION { DWRITE_PANOSE_PROPORTION_ANY, DWRITE_PANOSE_PROPORTION_NO_FIT, DWRITE_PANOSE_PROPORTION_OLD_STYLE, DWRITE_PANOSE_PROPORTION_MODERN, DWRITE_PANOSE_PROPORTION_EVEN_WIDTH, DWRITE_PANOSE_PROPORTION_EXPANDED, DWRITE_PANOSE_PROPORTION_CONDENSED, DWRITE_PANOSE_PROPORTION_VERY_EXPANDED, DWRITE_PANOSE_PROPORTION_VERY_CONDENSED, DWRITE_PANOSE_PROPORTION_MONOSPACED } DWRITE_PANOSE_PROPORTION; typedef enum DWRITE_PANOSE_CONTRAST { DWRITE_PANOSE_CONTRAST_ANY, DWRITE_PANOSE_CONTRAST_NO_FIT, DWRITE_PANOSE_CONTRAST_NONE, DWRITE_PANOSE_CONTRAST_VERY_LOW, DWRITE_PANOSE_CONTRAST_LOW, DWRITE_PANOSE_CONTRAST_MEDIUM_LOW, DWRITE_PANOSE_CONTRAST_MEDIUM, DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH, DWRITE_PANOSE_CONTRAST_HIGH, DWRITE_PANOSE_CONTRAST_VERY_HIGH, DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW, DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM, DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH, DWRITE_PANOSE_CONTRAST_BROKEN } DWRITE_PANOSE_CONTRAST; typedef enum DWRITE_PANOSE_STROKE_VARIATION { DWRITE_PANOSE_STROKE_VARIATION_ANY, DWRITE_PANOSE_STROKE_VARIATION_NO_FIT, DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION, DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL, DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL, DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL, DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL, DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL, DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL, DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL, DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL } DWRITE_PANOSE_STROKE_VARIANTION; typedef enum DWRITE_PANOSE_ARM_STYLE { DWRITE_PANOSE_ARM_STYLE_ANY, DWRITE_PANOSE_ARM_STYLE_NO_FIT, DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL, DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE, DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL, DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF, DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF, DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL, DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE, DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL, DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF, DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF, DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL, DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL, DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL, DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE, DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL, DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF, DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF } DWRITE_PANOSE_ARM_STYLE; typedef enum DWRITE_PANOSE_LETTERFORM { DWRITE_PANOSE_LETTERFORM_ANY, DWRITE_PANOSE_LETTERFORM_NO_FIT, DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT, DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED, DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED, DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED, DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED, DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER, DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE, DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT, DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED, DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED, DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED, DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED, DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER, DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE } DWRITE_PANOSE_LETTERFORM; typedef enum DWRITE_PANOSE_MIDLINE { DWRITE_PANOSE_MIDLINE_ANY, DWRITE_PANOSE_MIDLINE_NO_FIT, DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED, DWRITE_PANOSE_MIDLINE_STANDARD_POINTED, DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED, DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED, DWRITE_PANOSE_MIDLINE_HIGH_POINTED, DWRITE_PANOSE_MIDLINE_HIGH_SERIFED, DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED, DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED, DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED, DWRITE_PANOSE_MIDLINE_LOW_TRIMMED, DWRITE_PANOSE_MIDLINE_LOW_POINTED, DWRITE_PANOSE_MIDLINE_LOW_SERIFED } DWRITE_PANOSE_MIDLINE; typedef enum DWRITE_PANOSE_XHEIGHT { DWRITE_PANOSE_XHEIGHT_ANY, DWRITE_PANOSE_XHEIGHT_NO_FIT, DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL, DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD, DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE, DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL, DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD, DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE, DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD, DWRITE_PANOSE_XHEIGHT_DUCKING_STD = DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD } DWRITE_PANOSE_XHEIGHT; typedef enum DWRITE_PANOSE_TOOL_KIND { DWRITE_PANOSE_TOOL_KIND_ANY, DWRITE_PANOSE_TOOL_KIND_NO_FIT, DWRITE_PANOSE_TOOL_KIND_FLAT_NIB, DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT, DWRITE_PANOSE_TOOL_KIND_ENGRAVED, DWRITE_PANOSE_TOOL_KIND_BALL, DWRITE_PANOSE_TOOL_KIND_BRUSH, DWRITE_PANOSE_TOOL_KIND_ROUGH, DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP, DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH } DWRITE_PANOSE_TOOL_KIND; typedef enum DWRITE_PANOSE_SPACING { DWRITE_PANOSE_SPACING_ANY, DWRITE_PANOSE_SPACING_NO_FIT, DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED, DWRITE_PANOSE_SPACING_MONOSPACED } DWRITE_PANOSE_SPACING; typedef enum DWRITE_PANOSE_ASPECT_RATIO { DWRITE_PANOSE_ASPECT_RATIO_ANY, DWRITE_PANOSE_ASPECT_RATIO_NO_FIT, DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED, DWRITE_PANOSE_ASPECT_RATIO_CONDENSED, DWRITE_PANOSE_ASPECT_RATIO_NORMAL, DWRITE_PANOSE_ASPECT_RATIO_EXPANDED, DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED } DWRITE_PANOSE_ASPECT_RATIO; typedef enum DWRITE_PANOSE_SCRIPT_TOPOLOGY { DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY, DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT, DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED, DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING, DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED, DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED, DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING, DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED, DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED, DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING, DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED } DWRITE_PANOSE_SCRIPT_TOPOLOGY; typedef enum DWRITE_PANOSE_SCRIPT_FORM { DWRITE_PANOSE_SCRIPT_FORM_ANY, DWRITE_PANOSE_SCRIPT_FORM_NO_FIT, DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING, DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING } DWRITE_PANOSE_SCRIPT_FORM; typedef enum DWRITE_PANOSE_FINIALS { DWRITE_PANOSE_FINIALS_ANY, DWRITE_PANOSE_FINIALS_NO_FIT, DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS, DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS, DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS, DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS, DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS, DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS, DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS, DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS, DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS, DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS, DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS, DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS } DWRITE_PANOSE_FINIALS; typedef enum DWRITE_PANOSE_XASCENT { DWRITE_PANOSE_XASCENT_ANY, DWRITE_PANOSE_XASCENT_NO_FIT, DWRITE_PANOSE_XASCENT_VERY_LOW, DWRITE_PANOSE_XASCENT_LOW, DWRITE_PANOSE_XASCENT_MEDIUM, DWRITE_PANOSE_XASCENT_HIGH, DWRITE_PANOSE_XASCENT_VERY_HIGH } DWRITE_PANOSE_XASCENT; typedef enum DWRITE_PANOSE_DECORATIVE_CLASS { DWRITE_PANOSE_DECORATIVE_CLASS_ANY, DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT, DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE, DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY, DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS, DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT, DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS, DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON, DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS, DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED, DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND, DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE, DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE } DWRITE_PANOSE_DECORATIVE_CLASS; typedef enum DWRITE_PANOSE_ASPECT { DWRITE_PANOSE_ASPECT_ANY, DWRITE_PANOSE_ASPECT_NO_FIT, DWRITE_PANOSE_ASPECT_SUPER_CONDENSED, DWRITE_PANOSE_ASPECT_VERY_CONDENSED, DWRITE_PANOSE_ASPECT_CONDENSED, DWRITE_PANOSE_ASPECT_NORMAL, DWRITE_PANOSE_ASPECT_EXTENDED, DWRITE_PANOSE_ASPECT_VERY_EXTENDED, DWRITE_PANOSE_ASPECT_SUPER_EXTENDED, DWRITE_PANOSE_ASPECT_MONOSPACED } DWRITE_PANOSE_ASPECT; typedef enum DWRITE_PANOSE_FILL { DWRITE_PANOSE_FILL_ANY, DWRITE_PANOSE_FILL_NO_FIT, DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL, DWRITE_PANOSE_FILL_NO_FILL, DWRITE_PANOSE_FILL_PATTERNED_FILL, DWRITE_PANOSE_FILL_COMPLEX_FILL, DWRITE_PANOSE_FILL_SHAPED_FILL, DWRITE_PANOSE_FILL_DRAWN_DISTRESSED } DWRITE_PANOSE_FILL; typedef enum DWRITE_PANOSE_LINING { DWRITE_PANOSE_LINING_ANY, DWRITE_PANOSE_LINING_NO_FIT, DWRITE_PANOSE_LINING_NONE, DWRITE_PANOSE_LINING_INLINE, DWRITE_PANOSE_LINING_OUTLINE, DWRITE_PANOSE_LINING_ENGRAVED, DWRITE_PANOSE_LINING_SHADOW, DWRITE_PANOSE_LINING_RELIEF, DWRITE_PANOSE_LINING_BACKDROP } DWRITE_PANOSE_LINING; typedef enum DWRITE_PANOSE_DECORATIVE_TOPOLOGY { DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER, DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE } DWRITE_PANOSE_DECORATIVE_TOPOLOGY; typedef enum DWRITE_PANOSE_CHARACTER_RANGES { DWRITE_PANOSE_CHARACTER_RANGES_ANY, DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT, DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION, DWRITE_PANOSE_CHARACTER_RANGES_LITERALS, DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE, DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS } DWRITE_PANOSE_CHARACTER_RANGES; typedef enum DWRITE_PANOSE_SYMBOL_KIND { DWRITE_PANOSE_SYMBOL_KIND_ANY, DWRITE_PANOSE_SYMBOL_KIND_NO_FIT, DWRITE_PANOSE_SYMBOL_KIND_MONTAGES, DWRITE_PANOSE_SYMBOL_KIND_PICTURES, DWRITE_PANOSE_SYMBOL_KIND_SHAPES, DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC, DWRITE_PANOSE_SYMBOL_KIND_MUSIC, DWRITE_PANOSE_SYMBOL_KIND_EXPERT, DWRITE_PANOSE_SYMBOL_KIND_PATTERNS, DWRITE_PANOSE_SYMBOL_KIND_BOARDERS, DWRITE_PANOSE_SYMBOL_KIND_ICONS, DWRITE_PANOSE_SYMBOL_KIND_LOGOS, DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC } DWRITE_PANOSE_SYMBOL_KIND; typedef enum DWRITE_PANOSE_SYMBOL_ASPECT_RATIO { DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW, DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW } DWRITE_PANOSE_SYMBOL_ASPECT_RATIO; typedef enum DWRITE_OUTLINE_THRESHOLD { DWRITE_OUTLINE_THRESHOLD_ANTIALIASED, DWRITE_OUTLINE_THRESHOLD_ALIASED } DWRITE_OUTLINE_THRESHOLD; typedef enum DWRITE_BASELINE { DWRITE_BASELINE_DEFAULT, DWRITE_BASELINE_ROMAN, DWRITE_BASELINE_CENTRAL, DWRITE_BASELINE_MATH, DWRITE_BASELINE_HANGING, DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM, DWRITE_BASELINE_IDEOGRAPHIC_TOP, DWRITE_BASELINE_MINIMUM, DWRITE_BASELINE_MAXIMUM } DWRITE_BASELINE; typedef enum DWRITE_VERTICAL_GLYPH_ORIENTATION { DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT, DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED } DWRITE_VERTICAL_GLYPH_ORIENTATION; typedef enum DWRITE_GLYPH_ORIENTATION_ANGLE { DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES, DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES, DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES, DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES } DWRITE_GLYPH_ORIENTATION_ANGLE; typedef struct DWRITE_FONT_METRICS1 { UINT16 designUnitsPerEm; UINT16 ascent; UINT16 descent; INT16 lineGap; UINT16 capHeight; UINT16 xHeight; INT16 underlinePosition; UINT16 underlineThickness; INT16 strikethroughPosition; UINT16 strikethroughThickness; INT16 glyphBoxLeft; INT16 glyphBoxTop; INT16 glyphBoxRight; INT16 glyphBoxBottom; INT16 subscriptPositionX; INT16 subscriptPositionY; INT16 subscriptSizeX; INT16 subscriptSizeY; INT16 superscriptPositionX; INT16 superscriptPositionY; INT16 superscriptSizeX; INT16 superscriptSizeY; BOOL hasTypographicMetrics; } DWRITE_FONT_METRICS1; typedef struct DWRITE_CARET_METRICS { INT16 slopeRise; INT16 slopeRun; INT16 offset; } DWRITE_CARET_METRICS; typedef union DWRITE_PANOSE { UINT8 values[10]; UINT8 familyKind; struct { UINT8 familyKind; UINT8 serifStyle; UINT8 weight; UINT8 proportion; UINT8 contrast; UINT8 strokeVariation; UINT8 armStyle; UINT8 letterform; UINT8 midline; UINT8 xHeight; } text; struct { UINT8 familyKind; UINT8 toolKind; UINT8 weight; UINT8 spacing; UINT8 aspectRatio; UINT8 contrast; UINT8 scriptTopology; UINT8 scriptForm; UINT8 finials; UINT8 xAscent; } script; struct { UINT8 familyKind; UINT8 decorativeClass; UINT8 weight; UINT8 aspect; UINT8 contrast; UINT8 serifVariant; UINT8 fill; UINT8 lining; UINT8 decorativeTopology; UINT8 characterRange; } decorative; struct { UINT8 familyKind; UINT8 symbolKind; UINT8 weight; UINT8 spacing; UINT8 aspectRatioAndContrast; UINT8 aspectRatio94; UINT8 aspectRatio119; UINT8 aspectRatio157; UINT8 aspectRatio163; UINT8 aspectRatio211; } symbol; } DWRITE_PANOSE; typedef struct DWRITE_UNICODE_RANGE { UINT32 first; UINT32 last; } DWRITE_UNICODE_RANGE; typedef struct DWRITE_SCRIPT_PROPERTIES { UINT32 isoScriptCode; UINT32 isoScriptNumber; UINT32 clusterLookahead; UINT32 justificationCharacter; UINT32 restrictCaretToClusters : 1; UINT32 usesWordDividers : 1; UINT32 isDiscreteWriting : 1; UINT32 isBlockWriting : 1; UINT32 isDistributedWithinCluster : 1; UINT32 isConnectedWriting : 1; UINT32 isCursiveWriting : 1; UINT32 reserved : 25; } DWRITE_SCRIPT_PROPERTIES; typedef struct DWRITE_JUSTIFICATION_OPPORTUNITY { FLOAT expansionMinimum; FLOAT expansionMaximum; FLOAT compressionMaximum; UINT32 expansionPriority : 8; UINT32 compressionPriority : 8; UINT32 allowResidualExpansion : 1; UINT32 allowResidualCompression : 1; UINT32 applyToLeadingEdge : 1; UINT32 applyToTrailingEdge : 1; UINT32 reserved : 12; } DWRITE_JUSTIFICATION_OPPORTUNITY; interface IDWriteTextAnalysisSource1; interface IDWriteTextAnalysisSink1; interface IDWriteRenderingParams1; [ local, object, uuid(30572f99-dac6-41db-a16e-0486307e606a) ] interface IDWriteFactory1 : IDWriteFactory { HRESULT GetEudcFontCollection(IDWriteFontCollection **collection, [defaultvalue(FALSE)] BOOL check_for_updates); HRESULT CreateCustomRenderingParams(FLOAT gamma, FLOAT enhcontrast, FLOAT enhcontrast_grayscale, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY geometry, DWRITE_RENDERING_MODE mode, IDWriteRenderingParams1** params); } [ local, object, uuid(a71efdb4-9fdb-4838-ad90-cfc3be8c3daf) ] interface IDWriteFontFace1 : IDWriteFontFace { void GetMetrics(DWRITE_FONT_METRICS1 *metrics); HRESULT GetGdiCompatibleMetrics(FLOAT em_size, FLOAT pixels_per_dip, const DWRITE_MATRIX *transform, DWRITE_FONT_METRICS1 *metrics); void GetCaretMetrics(DWRITE_CARET_METRICS *metrics); HRESULT GetUnicodeRanges(UINT32 max_count, DWRITE_UNICODE_RANGE *ranges, UINT32 *count); BOOL IsMonospacedFont(); HRESULT GetDesignGlyphAdvances(UINT32 glyph_count, UINT16 const *indices, INT32 *advances, [defaultvalue(FALSE)] BOOL is_sideways); HRESULT GetGdiCompatibleGlyphAdvances(FLOAT em_size, FLOAT pixels_per_dip, const DWRITE_MATRIX *transform, BOOL use_gdi_natural, BOOL is_sideways, UINT32 glyph_count, const UINT16 *indices, INT32 *advances); HRESULT GetKerningPairAdjustments(UINT32 glyph_count, const UINT16 *indices, INT32 *adjustments); BOOL HasKerningPairs(); HRESULT GetRecommendedRenderingMode(FLOAT font_emsize, FLOAT dpiX, FLOAT dpiY, const DWRITE_MATRIX *transform, BOOL is_sideways, DWRITE_OUTLINE_THRESHOLD threshold, DWRITE_MEASURING_MODE measuring_mode, DWRITE_RENDERING_MODE *rendering_mode); HRESULT GetVerticalGlyphVariants(UINT32 glyph_count, const UINT16 *nominal_indices, UINT16 *vertical_indices); BOOL HasVerticalGlyphVariants(); } [ local, object, uuid(acd16696-8c14-4f5d-877e-fe3fc1d32738) ] interface IDWriteFont1 : IDWriteFont { void GetMetrics(DWRITE_FONT_METRICS1 *metrics); void GetPanose(DWRITE_PANOSE *panose); HRESULT GetUnicodeRanges(UINT32 max_count, DWRITE_UNICODE_RANGE *ranges, UINT32 *count); BOOL IsMonospacedFont(); } [ local, object, uuid(94413cf4-a6fc-4248-8b50-6674348fcad3) ] interface IDWriteRenderingParams1 : IDWriteRenderingParams { FLOAT GetGrayscaleEnhancedContrast(); } [ local, object, uuid(80dad800-e21f-4e83-96ce-bfcce500db7c) ] interface IDWriteTextAnalyzer1 : IDWriteTextAnalyzer { HRESULT ApplyCharacterSpacing(FLOAT leading_spacing, FLOAT trailing_spacing, FLOAT min_advance_width, UINT32 len, UINT32 glyph_count, UINT16 const *clustermap, FLOAT const *advances, DWRITE_GLYPH_OFFSET const *offsets, DWRITE_SHAPING_GLYPH_PROPERTIES const *props, FLOAT *modified_advances, DWRITE_GLYPH_OFFSET *modified_offsets); HRESULT GetBaseline(IDWriteFontFace *face, DWRITE_BASELINE baseline, BOOL vertical, BOOL is_simulation_allowed, DWRITE_SCRIPT_ANALYSIS sa, const WCHAR *localeName, INT32 *baseline_coord, BOOL *exists); HRESULT AnalyzeVerticalGlyphOrientation( IDWriteTextAnalysisSource1* source, UINT32 text_pos, UINT32 len, IDWriteTextAnalysisSink1 *sink); HRESULT GetGlyphOrientationTransform( DWRITE_GLYPH_ORIENTATION_ANGLE angle, BOOL is_sideways, DWRITE_MATRIX *transform); HRESULT GetScriptProperties(DWRITE_SCRIPT_ANALYSIS sa, DWRITE_SCRIPT_PROPERTIES *props); HRESULT GetTextComplexity(const WCHAR *text, UINT32 len, IDWriteFontFace *face, BOOL *is_simple, UINT32 *len_read, UINT16 *indices); HRESULT GetJustificationOpportunities( IDWriteFontFace *face, FLOAT font_em_size, DWRITE_SCRIPT_ANALYSIS sa, UINT32 length, UINT32 glyph_count, const WCHAR *text, const UINT16 *clustermap, const DWRITE_SHAPING_GLYPH_PROPERTIES *prop, DWRITE_JUSTIFICATION_OPPORTUNITY *jo); HRESULT JustifyGlyphAdvances( FLOAT width, UINT32 glyph_count, const DWRITE_JUSTIFICATION_OPPORTUNITY *jo, const FLOAT *advances, const DWRITE_GLYPH_OFFSET *offsets, FLOAT *justifiedadvances, DWRITE_GLYPH_OFFSET *justifiedoffsets); HRESULT GetJustifiedGlyphs( IDWriteFontFace *face, FLOAT font_em_size, DWRITE_SCRIPT_ANALYSIS sa, UINT32 length, UINT32 glyph_count, UINT32 max_glyphcount, const UINT16 *clustermap, const UINT16 *indices, const FLOAT *advances, const FLOAT *justifiedadvances, const DWRITE_GLYPH_OFFSET *justifiedoffsets, const DWRITE_SHAPING_GLYPH_PROPERTIES *prop, UINT32 *actual_count, UINT16 *modified_clustermap, UINT16 *modified_indices, FLOAT *modified_advances, DWRITE_GLYPH_OFFSET *modified_offsets); } [ local, object, uuid(639cfad8-0fb4-4b21-a58a-067920120009) ] interface IDWriteTextAnalysisSource1 : IDWriteTextAnalysisSource { HRESULT GetVerticalGlyphOrientation( UINT32 pos, UINT32 *length, DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation, UINT8 *bidi_level); } [ local, object, uuid(b0d941a0-85e7-4d8b-9fd3-5ced9934482a) ] interface IDWriteTextAnalysisSink1 : IDWriteTextAnalysisSink { HRESULT SetGlyphOrientation( UINT32 pos, UINT32 length, DWRITE_GLYPH_ORIENTATION_ANGLE angle, UINT8 adjusted_bidilevel, BOOL is_sideways, BOOL is_rtl); } [ local, object, uuid(9064d822-80a7-465c-a986-df65f78b8feb) ] interface IDWriteTextLayout1 : IDWriteTextLayout { HRESULT SetPairKerning( BOOL is_pairkerning_enabled, DWRITE_TEXT_RANGE range); HRESULT GetPairKerning( UINT32 position, BOOL *is_pairkerning_enabled, DWRITE_TEXT_RANGE *range); HRESULT SetCharacterSpacing( FLOAT leading_spacing, FLOAT trailing_spacing, FLOAT minimum_advance_width, DWRITE_TEXT_RANGE range); HRESULT GetCharacterSpacing( UINT32 position, FLOAT* leading_spacing, FLOAT* trailing_spacing, FLOAT* minimum_advance_width, [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); } typedef enum DWRITE_TEXT_ANTIALIAS_MODE { DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE, DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE } DWRITE_TEXT_ANTIALIAS_MODE; [ local, object, uuid(791e8298-3ef3-4230-9880-c9bdecc42064) ] interface IDWriteBitmapRenderTarget1 : IDWriteBitmapRenderTarget { DWRITE_TEXT_ANTIALIAS_MODE GetTextAntialiasMode(); HRESULT SetTextAntialiasMode(DWRITE_TEXT_ANTIALIAS_MODE mode); } ================================================ FILE: wine/windows/dwrite_2.idl ================================================ /* * Copyright 2014 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dwrite_1.idl"; typedef enum DWRITE_OPTICAL_ALIGNMENT { DWRITE_OPTICAL_ALIGNMENT_NONE, DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS } DWRITE_OPTICAL_ALIGNMENT; typedef enum DWRITE_GRID_FIT_MODE { DWRITE_GRID_FIT_MODE_DEFAULT, DWRITE_GRID_FIT_MODE_DISABLED, DWRITE_GRID_FIT_MODE_ENABLED } DWRITE_GRID_FIT_MODE; typedef struct DWRITE_TEXT_METRICS1 { /* DWRITE_TEXT_METRICS fields */ FLOAT left; FLOAT top; FLOAT width; FLOAT widthIncludingTrailingWhitespace; FLOAT height; FLOAT layoutWidth; FLOAT layoutHeight; UINT32 maxBidiReorderingDepth; UINT32 lineCount; /* DWRITE_TEXT_METRICS1 fields */ FLOAT heightIncludingTrailingWhitespace; } DWRITE_TEXT_METRICS1; cpp_quote("#ifndef D3DCOLORVALUE_DEFINED") typedef struct _D3DCOLORVALUE { union { FLOAT r; FLOAT dvR; }; union { FLOAT g; FLOAT dvG; }; union { FLOAT b; FLOAT dvB; }; union { FLOAT a; FLOAT dvA; }; } D3DCOLORVALUE; cpp_quote("#define D3DCOLORVALUE_DEFINED") cpp_quote("#endif") typedef D3DCOLORVALUE DWRITE_COLOR_F; typedef struct DWRITE_COLOR_GLYPH_RUN { DWRITE_GLYPH_RUN glyphRun; DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription; FLOAT baselineOriginX; FLOAT baselineOriginY; DWRITE_COLOR_F runColor; UINT16 paletteIndex; } DWRITE_COLOR_GLYPH_RUN; [ local, object, uuid(d3e0e934-22a0-427e-aae4-7d9574b59db1) ] interface IDWriteTextRenderer1 : IDWriteTextRenderer { HRESULT DrawGlyphRun(void *context, FLOAT originX, FLOAT originY, DWRITE_GLYPH_ORIENTATION_ANGLE angle, DWRITE_MEASURING_MODE mode, DWRITE_GLYPH_RUN const *run, DWRITE_GLYPH_RUN_DESCRIPTION const *rundescr, IUnknown *effect); HRESULT DrawUnderline(void *context, FLOAT originX, FLOAT originY, DWRITE_GLYPH_ORIENTATION_ANGLE angle, DWRITE_UNDERLINE const *underline, IUnknown *effect); HRESULT DrawStrikethrough(void *context, FLOAT originX, FLOAT originY, DWRITE_GLYPH_ORIENTATION_ANGLE angle, DWRITE_STRIKETHROUGH const *strikethrough, IUnknown *effect ); HRESULT DrawInlineObject(void *context, FLOAT originX, FLOAT originY, DWRITE_GLYPH_ORIENTATION_ANGLE angle, IDWriteInlineObject *inlineObject, BOOL is_sideways, BOOL is_rtl, IUnknown *effect ); } [ local, object, uuid(efa008f9-f7a1-48bf-b05c-f224713cc0ff) ] interface IDWriteFontFallback : IUnknown { HRESULT MapCharacters(IDWriteTextAnalysisSource *source, UINT32 position, UINT32 length, IDWriteFontCollection *basecollection, const WCHAR *baseFamilyName, DWRITE_FONT_WEIGHT baseWeight, DWRITE_FONT_STYLE baseStyle, DWRITE_FONT_STRETCH baseStretch, UINT32 *mappedLength, IDWriteFont **mappedFont, FLOAT *scale ); } [ local, object, uuid(5f174b49-0d8b-4cfb-8bca-f1cce9d06c67) ] interface IDWriteTextFormat1 : IDWriteTextFormat { HRESULT SetVerticalGlyphOrientation(DWRITE_VERTICAL_GLYPH_ORIENTATION orientation); DWRITE_VERTICAL_GLYPH_ORIENTATION GetVerticalGlyphOrientation(); HRESULT SetLastLineWrapping(BOOL lastline_wrapping_enabled); BOOL GetLastLineWrapping(); HRESULT SetOpticalAlignment(DWRITE_OPTICAL_ALIGNMENT alignment); DWRITE_OPTICAL_ALIGNMENT GetOpticalAlignment(); HRESULT SetFontFallback(IDWriteFontFallback *fallback); HRESULT GetFontFallback(IDWriteFontFallback **fallback); } [ local, object, uuid(1093c18f-8d5e-43f0-b064-0917311b525e) ] interface IDWriteTextLayout2 : IDWriteTextLayout1 { HRESULT GetMetrics(DWRITE_TEXT_METRICS1 *metrics); HRESULT SetVerticalGlyphOrientation(DWRITE_VERTICAL_GLYPH_ORIENTATION orientation); DWRITE_VERTICAL_GLYPH_ORIENTATION GetVerticalGlyphOrientation(); HRESULT SetLastLineWrapping(BOOL lastline_wrapping_enabled); BOOL GetLastLineWrapping(); HRESULT SetOpticalAlignment(DWRITE_OPTICAL_ALIGNMENT alignment); DWRITE_OPTICAL_ALIGNMENT GetOpticalAlignment(); HRESULT SetFontFallback(IDWriteFontFallback *fallback); HRESULT GetFontFallback(IDWriteFontFallback **fallback); } [ local, object, uuid(553a9ff3-5693-4df7-b52b-74806f7f2eb9) ] interface IDWriteTextAnalyzer2 : IDWriteTextAnalyzer1 { HRESULT GetGlyphOrientationTransform(DWRITE_GLYPH_ORIENTATION_ANGLE angle, BOOL is_sideways, FLOAT originX, FLOAT originY, DWRITE_MATRIX *transform ); HRESULT GetTypographicFeatures(IDWriteFontFace *fontface, DWRITE_SCRIPT_ANALYSIS analysis, const WCHAR *localeName, UINT32 max_tagcount, UINT32 *actual_tagcount, DWRITE_FONT_FEATURE_TAG *tags ); HRESULT CheckTypographicFeature(IDWriteFontFace *fontface, DWRITE_SCRIPT_ANALYSIS analysis, const WCHAR *localeName, DWRITE_FONT_FEATURE_TAG feature, UINT32 glyph_count, const UINT16 *indices, UINT8 *feature_applies ); } [ local, object, uuid(fd882d06-8aba-4fb8-b849-8be8b73e14de) ] interface IDWriteFontFallbackBuilder : IUnknown { HRESULT AddMapping(const DWRITE_UNICODE_RANGE *ranges, UINT32 rangesCount, WCHAR const **targetFamilyNames, UINT32 targetFamilyNamesCount, [defaultvalue(NULL)] IDWriteFontCollection *collection, [defaultvalue(NULL)] WCHAR const *localeName, [defaultvalue(NULL)] WCHAR const *baseFamilyName, [defaultvalue(1)] FLOAT scale ); HRESULT AddMappings(IDWriteFontFallback *fallback); HRESULT CreateFontFallback(IDWriteFontFallback **fallback); } [ local, object, uuid(29748ed6-8c9c-4a6a-be0b-d912e8538944) ] interface IDWriteFont2 : IDWriteFont1 { BOOL IsColorFont(); } [ local, object, uuid(d8b768ff-64bc-4e66-982b-ec8e87f693f7) ] interface IDWriteFontFace2 : IDWriteFontFace1 { BOOL IsColorFont(); UINT32 GetColorPaletteCount(); UINT32 GetPaletteEntryCount(); HRESULT GetPaletteEntries(UINT32 palette_index, UINT32 first_entry_index, UINT32 entry_count, DWRITE_COLOR_F *entries ); HRESULT GetRecommendedRenderingMode(FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY, DWRITE_MATRIX const *transform, BOOL is_sideways, DWRITE_OUTLINE_THRESHOLD threshold, DWRITE_MEASURING_MODE measuringmode, IDWriteRenderingParams *params, DWRITE_RENDERING_MODE *renderingmode, DWRITE_GRID_FIT_MODE *gridfitmode ); } [ local, object, uuid(d31fbe17-f157-41a2-8d24-cb779e0560e8) ] interface IDWriteColorGlyphRunEnumerator : IUnknown { HRESULT MoveNext(BOOL *hasRun); HRESULT GetCurrentRun(DWRITE_COLOR_GLYPH_RUN const **run); } [ local, object, uuid(f9d711c3-9777-40ae-87e8-3e5aF9bf0948) ] interface IDWriteRenderingParams2 : IDWriteRenderingParams1 { DWRITE_GRID_FIT_MODE GetGridFitMode(); } [ local, object, uuid(0439fc60-ca44-4994-8dee-3a9af7b732ec) ] interface IDWriteFactory2 : IDWriteFactory1 { HRESULT GetSystemFontFallback(IDWriteFontFallback **fallback); HRESULT CreateFontFallbackBuilder(IDWriteFontFallbackBuilder **fallbackbuilder); HRESULT TranslateColorGlyphRun(FLOAT originX, FLOAT originY, const DWRITE_GLYPH_RUN *run, const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr, DWRITE_MEASURING_MODE mode, const DWRITE_MATRIX *transform, UINT32 palette_index, IDWriteColorGlyphRunEnumerator **colorlayers ); HRESULT CreateCustomRenderingParams(FLOAT gamma, FLOAT contrast, FLOAT grayscalecontrast, FLOAT cleartypeLevel, DWRITE_PIXEL_GEOMETRY pixelGeometry, DWRITE_RENDERING_MODE renderingMode, DWRITE_GRID_FIT_MODE gridFitMode, IDWriteRenderingParams2 **params ); HRESULT CreateGlyphRunAnalysis(const DWRITE_GLYPH_RUN *run, const DWRITE_MATRIX *transform, DWRITE_RENDERING_MODE renderingMode, DWRITE_MEASURING_MODE measuringMode, DWRITE_GRID_FIT_MODE gridFitMode, DWRITE_TEXT_ANTIALIAS_MODE antialiasMode, FLOAT originX, FLOAT originY, IDWriteGlyphRunAnalysis **analysis ); } ================================================ FILE: wine/windows/dwrite_3.idl ================================================ /* * Copyright 2016 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dwrite_2.idl"; interface IDWriteFontFaceReference; interface IDWriteFontFaceReference1; interface IDWriteFontFace3; interface IDWriteFontSet; interface IDWriteFontDownloadQueue; interface IDWriteFontFace5; interface IDWriteFontList2; cpp_quote("#ifndef _WINGDI_") /* already defined in wingdi.h but needed for WIDL */ typedef struct FONTSIGNATURE FONTSIGNATURE; cpp_quote("#endif /* _WINGDI_ */") typedef enum DWRITE_LOCALITY { DWRITE_LOCALITY_REMOTE, DWRITE_LOCALITY_PARTIAL, DWRITE_LOCALITY_LOCAL } DWRITE_LOCALITY; typedef enum DWRITE_RENDERING_MODE1 { DWRITE_RENDERING_MODE1_DEFAULT, DWRITE_RENDERING_MODE1_ALIASED, DWRITE_RENDERING_MODE1_GDI_CLASSIC, DWRITE_RENDERING_MODE1_GDI_NATURAL, DWRITE_RENDERING_MODE1_NATURAL, DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC, DWRITE_RENDERING_MODE1_OUTLINE, DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED } DWRITE_RENDERING_MODE1; typedef enum DWRITE_FONT_PROPERTY_ID { DWRITE_FONT_PROPERTY_ID_NONE, DWRITE_FONT_PROPERTY_ID_FAMILY_NAME, DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME, DWRITE_FONT_PROPERTY_ID_FACE_NAME, DWRITE_FONT_PROPERTY_ID_FULL_NAME, DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME, DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME, DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG, DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG, DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG, DWRITE_FONT_PROPERTY_ID_WEIGHT, DWRITE_FONT_PROPERTY_ID_STRETCH, DWRITE_FONT_PROPERTY_ID_STYLE, DWRITE_FONT_PROPERTY_ID_TOTAL } DWRITE_FONT_PROPERTY_ID; typedef struct DWRITE_FONT_PROPERTY { DWRITE_FONT_PROPERTY_ID propertyId; WCHAR const *propertyValue; WCHAR const *localeName; } DWRITE_FONT_PROPERTY; typedef enum DWRITE_FONT_AXIS_TAG { DWRITE_FONT_AXIS_TAG_WEIGHT = 0x74686777, /* 'wght' */ DWRITE_FONT_AXIS_TAG_WIDTH = 0x68746477, /* 'wdth' */ DWRITE_FONT_AXIS_TAG_SLANT = 0x746e6c73, /* 'slnt' */ DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = 0x7a73706f, /* 'opsz' */ DWRITE_FONT_AXIS_TAG_ITALIC = 0x6c617469, /* 'ital' */ } DWRITE_FONT_AXIS_TAG; typedef struct DWRITE_FONT_AXIS_VALUE { DWRITE_FONT_AXIS_TAG axisTag; FLOAT value; } DWRITE_FONT_AXIS_VALUE; typedef struct DWRITE_FONT_AXIS_RANGE { DWRITE_FONT_AXIS_TAG axisTag; FLOAT minValue; FLOAT maxValue; } DWRITE_FONT_AXIS_RANGE; typedef enum DWRITE_AUTOMATIC_FONT_AXES { DWRITE_AUTOMATIC_FONT_AXES_NONE, DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE, } DWRITE_AUTOMATIC_FONT_AXES; typedef enum DWRITE_FONT_AXIS_ATTRIBUTES { DWRITE_FONT_AXIS_ATTRIBUTES_NONE, DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE, DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN, } DWRITE_FONT_AXIS_ATTRIBUTES; typedef enum DWRITE_FONT_FAMILY_MODEL { DWRITE_FONT_FAMILY_MODEL_TYPOGRAPHIC, DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE, } DWRITE_FONT_FAMILY_MODEL; [ local, object, uuid(b06fe5b9-43ec-4393-881b-dbe4dc72fda7) ] interface IDWriteFontDownloadListener : IUnknown { void DownloadCompleted(IDWriteFontDownloadQueue *queue, IUnknown *context, HRESULT result); } [ local, object, uuid(b71e6052-5aea-4fa3-832e-f60d431f7e91) ] interface IDWriteFontDownloadQueue : IUnknown { HRESULT AddListener(IDWriteFontDownloadListener *listener, UINT32 *token); HRESULT RemoveListener(UINT32 token); BOOL IsEmpty(); HRESULT BeginDownload(IUnknown *context); HRESULT CancelDownload(); UINT64 GetGenerationCount(); } [ local, object, uuid(b7924baa-391b-412a-8c5c-e44cc2d867dc) ] interface IDWriteRenderingParams3 : IDWriteRenderingParams2 { DWRITE_RENDERING_MODE1 GetRenderingMode1(); } [ local, object, uuid(cfee3140-1257-47ca-8b85-31bfcf3f2d0e) ] interface IDWriteStringList : IUnknown { UINT32 GetCount(); HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length); HRESULT GetLocaleName(UINT32 index, WCHAR *name, UINT32 size); HRESULT GetStringLength(UINT32 index, UINT32 *length); HRESULT GetString(UINT32 index, WCHAR *string, UINT32 size); } [ local, object, uuid(53585141-d9f8-4095-8321-d73cf6bd116b) ] interface IDWriteFontSet : IUnknown { UINT32 GetFontCount(); HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference); HRESULT FindFontFaceReference(IDWriteFontFaceReference *reference, UINT32 *index, BOOL *exists); HRESULT FindFontFace(IDWriteFontFace *fontface, UINT32 *index, BOOL *exists); HRESULT GetPropertyValues__(DWRITE_FONT_PROPERTY_ID id, IDWriteStringList **values); HRESULT GetPropertyValues_(DWRITE_FONT_PROPERTY_ID id, WCHAR const *preferred_locales, IDWriteStringList **values); HRESULT GetPropertyValues(UINT32 index, DWRITE_FONT_PROPERTY_ID id, BOOL *exists, IDWriteLocalizedStrings **values); HRESULT GetPropertyOccurrenceCount(DWRITE_FONT_PROPERTY const *property, UINT32 *count); HRESULT GetMatchingFonts_(WCHAR const *family, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STRETCH stretch, DWRITE_FONT_STYLE style, IDWriteFontSet **fontset); HRESULT GetMatchingFonts(DWRITE_FONT_PROPERTY const *props, UINT32 count, IDWriteFontSet **fontset); } [ local, object, uuid(1f803a76-6871-48e8-987f-b975551c50f2) ] interface IDWriteFontResource : IUnknown { HRESULT GetFontFile(IDWriteFontFile **fontfile); UINT32 GetFontFaceIndex(); UINT32 GetFontAxisCount(); HRESULT GetDefaultFontAxisValues( DWRITE_FONT_AXIS_VALUE const *values, UINT32 num_values); HRESULT GetFontAxisRanges( DWRITE_FONT_AXIS_RANGE const *ranges, UINT32 num_ranges); DWRITE_FONT_AXIS_ATTRIBUTES GetFontAxisAttributes( UINT32 axis); HRESULT GetAxisNames( UINT32 axis, IDWriteLocalizedStrings **names); UINT32 GetAxisValueNameCount( UINT32 axis); HRESULT GetAxisValueNames( UINT32 axis, UINT32 axis_value, DWRITE_FONT_AXIS_RANGE *axis_range, IDWriteLocalizedStrings **names); BOOL HasVariations(); HRESULT CreateFontFace( DWRITE_FONT_SIMULATIONS simulations, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, IDWriteFontFace5 **fontface); HRESULT CreateFontFaceReference( DWRITE_FONT_SIMULATIONS simulations, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, IDWriteFontFaceReference1 **reference); } [ local, object, uuid(7e9fda85-6c92-4053-bc47-7ae3530db4d3) ] interface IDWriteFontSet1 : IDWriteFontSet { HRESULT GetMatchingFonts( DWRITE_FONT_PROPERTY const *property, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, IDWriteFontSet1 **fontset); HRESULT GetFirstFontResources(IDWriteFontSet1 **fontset); HRESULT GetFilteredFonts__( UINT32 const *indices, UINT32 num_indices, IDWriteFontSet1 **fontset); HRESULT GetFilteredFonts_( DWRITE_FONT_AXIS_RANGE const *axis_ranges, UINT32 num_ranges, BOOL select_any_range, IDWriteFontSet1 **fontset); HRESULT GetFilteredFonts( DWRITE_FONT_PROPERTY const *props, UINT32 num_properties, BOOL select_any_property, IDWriteFontSet1 **fontset); HRESULT GetFilteredFontIndices_( DWRITE_FONT_AXIS_RANGE const *ranges, UINT32 num_ranges, BOOL select_any_range, UINT32 *indices, UINT32 num_indices, UINT32 *actual_num_indices); HRESULT GetFilteredFontIndices( DWRITE_FONT_PROPERTY const *props, UINT32 num_properties, BOOL select_any_range, UINT32 *indices, UINT32 num_indices, UINT32 *actual_num_indices); HRESULT GetFontAxisRanges_( UINT32 font_index, DWRITE_FONT_AXIS_RANGE *axis_ranges, UINT32 num_ranges, UINT32 *actual_num_ranges); HRESULT GetFontAxisRanges( DWRITE_FONT_AXIS_RANGE *axis_ranges, UINT32 num_ranges, UINT32 *actual_num_ranges); HRESULT GetFontFaceReference( UINT32 index, IDWriteFontFaceReference1 **reference); HRESULT CreateFontResource( UINT32 index, IDWriteFontResource **resource); HRESULT CreateFontFace( UINT32 index, IDWriteFontFace5 **fontface); DWRITE_LOCALITY GetFontLocality(UINT32 index); } [ local, object, uuid(29748ed6-8c9c-4a6a-be0b-d912e8538944) ] interface IDWriteFont3 : IDWriteFont2 { HRESULT CreateFontFace(IDWriteFontFace3 **fontface); BOOL Equals(IDWriteFont *font); HRESULT GetFontFaceReference(IDWriteFontFaceReference **reference); BOOL HasCharacter(UINT32 character); DWRITE_LOCALITY GetLocality(); } [ local, object, uuid(da20d8ef-812a-4c43-9802-62ec4abd7adf) ] interface IDWriteFontFamily1 : IDWriteFontFamily { DWRITE_LOCALITY GetFontLocality(UINT32 index); HRESULT GetFont(UINT32 index, IDWriteFont3 **font); HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference); } [ local, object, uuid(3ed49e77-a398-4261-b9cf-c126c2131ef3) ] interface IDWriteFontFamily2 : IDWriteFontFamily1 { HRESULT GetMatchingFonts( DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, IDWriteFontList2 **fontlist); HRESULT GetFontSet(IDWriteFontSet1 **fontset); } [ local, object, uuid(53585141-d9f8-4095-8321-d73cf6bd116c) ] interface IDWriteFontCollection1 : IDWriteFontCollection { HRESULT GetFontSet(IDWriteFontSet **fontset); HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily1 **family); } [ local, object, uuid(514039c6-4617-4064-bf8b-92ea83e506e0) ] interface IDWriteFontCollection2 : IDWriteFontCollection1 { HRESULT GetFontFamily( UINT32 index, IDWriteFontFamily2 **family); HRESULT GetMatchingFonts( const WCHAR *familyname, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, IDWriteFontList2 **fontlist); DWRITE_FONT_FAMILY_MODEL GetFontFamilyModel(); HRESULT GetFontSet(IDWriteFontSet1 **fontset); } [ local, object, uuid(a4d055a6-f9e3-4e25-93b7-9e309f3af8e9) ] interface IDWriteFontCollection3 : IDWriteFontCollection2 { HANDLE GetExiprationEvent(); } [ local, object, uuid(5e7fa7ca-dde3-424c-89f0-9fcd6fed58cd) ] interface IDWriteFontFaceReference : IUnknown { HRESULT CreateFontFace(IDWriteFontFace3 **fontface); HRESULT CreateFontFaceWithSimulations(DWRITE_FONT_SIMULATIONS simulations, IDWriteFontFace3 **fontface); BOOL Equals(IDWriteFontFaceReference *reference); UINT32 GetFontFaceIndex(); DWRITE_FONT_SIMULATIONS GetSimulations(); HRESULT GetFontFile(IDWriteFontFile **fontfile); UINT64 GetLocalFileSize(); UINT64 GetFileSize(); HRESULT GetFileTime(FILETIME *writetime); DWRITE_LOCALITY GetLocality(); HRESULT EnqueueFontDownloadRequest(); HRESULT EnqueueCharacterDownloadRequest(WCHAR const *chars, UINT32 count); HRESULT EnqueueGlyphDownloadRequest(UINT16 const *glyphs, UINT32 count); HRESULT EnqueueFileFragmentDownloadRequest(UINT64 offset, UINT64 size); } [ local, object, uuid(c081fe77-2fd1-41ac-a5a3-34983c4ba61a) ] interface IDWriteFontFaceReference1 : IDWriteFontFaceReference { HRESULT CreateFontFace(IDWriteFontFace5 **fontface); UINT32 GetFontAxisValueCount(); HRESULT GetFontAxisValues( DWRITE_FONT_AXIS_VALUE *values, UINT32 num_values); } [ local, object, uuid(da20d8ef-812a-4c43-9802-62ec4abd7ade) ] interface IDWriteFontList1 : IDWriteFontList { DWRITE_LOCALITY GetFontLocality(UINT32 index); HRESULT GetFont(UINT32 index, IDWriteFont3 **font); HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference); } [ local, object, uuid(c0763a34-77af-445a-b735-08c37b0a5bf5) ] interface IDWriteFontList2 : IDWriteFontList1 { HRESULT GetFontSet(IDWriteFontSet1 **fontset); } [ local, object, uuid(dc7ead19-e54c-43af-b2da-4e2b79ba3f7f) ] interface IDWriteFontSet2 : IDWriteFontSet1 { HANDLE GetExpirationEvent(); } [ local, object, uuid(d37d7598-09be-4222-a236-2081341cc1f2) ] interface IDWriteFontFace3 : IDWriteFontFace2 { HRESULT GetFontFaceReference(IDWriteFontFaceReference **reference); void GetPanose(DWRITE_PANOSE *panose); DWRITE_FONT_WEIGHT GetWeight(); DWRITE_FONT_STRETCH GetStretch(); DWRITE_FONT_STYLE GetStyle(); HRESULT GetFamilyNames(IDWriteLocalizedStrings **names); HRESULT GetFaceNames(IDWriteLocalizedStrings **names); HRESULT GetInformationalStrings(DWRITE_INFORMATIONAL_STRING_ID stringid, IDWriteLocalizedStrings **strings, BOOL *exists); BOOL HasCharacter(UINT32 character); HRESULT GetRecommendedRenderingMode( FLOAT emsize, FLOAT dpi_x, FLOAT dpi_y, DWRITE_MATRIX const *transform, BOOL is_sideways, DWRITE_OUTLINE_THRESHOLD threshold, DWRITE_MEASURING_MODE measuring_mode, IDWriteRenderingParams *params, DWRITE_RENDERING_MODE1 *rendering_mode, DWRITE_GRID_FIT_MODE *gridfit_mode); BOOL IsCharacterLocal(UINT32 character); BOOL IsGlyphLocal(UINT16 glyph); HRESULT AreCharactersLocal(WCHAR const *characters, UINT32 count, BOOL enqueue_if_not, BOOL *are_local); HRESULT AreGlyphsLocal(UINT16 const *glyphs, UINT32 count, BOOL enqueue_if_not, BOOL *are_local); } typedef struct DWRITE_LINE_METRICS1 { UINT32 length; UINT32 trailingWhitespaceLength; UINT32 newlineLength; FLOAT height; FLOAT baseline; BOOL isTrimmed; FLOAT leadingBefore; FLOAT leadingAfter; } DWRITE_LINE_METRICS1; typedef enum DWRITE_FONT_LINE_GAP_USAGE { DWRITE_FONT_LINE_GAP_USAGE_DEFAULT, DWRITE_FONT_LINE_GAP_USAGE_DISABLED, DWRITE_FONT_LINE_GAP_USAGE_ENABLED } DWRITE_FONT_LINE_GAP_USAGE; typedef struct DWRITE_LINE_SPACING { DWRITE_LINE_SPACING_METHOD method; FLOAT height; FLOAT baseline; FLOAT leadingBefore; DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage; } DWRITE_LINE_SPACING; [ local, object, uuid(f67e0edd-9e3d-4ecc-8c32-4183253dfe70) ] interface IDWriteTextFormat2 : IDWriteTextFormat1 { HRESULT SetLineSpacing(DWRITE_LINE_SPACING const *spacing); HRESULT GetLineSpacing(DWRITE_LINE_SPACING *spacing); } [ local, object, uuid(6d3b5641-e550-430d-a85b-b7bf48a93427) ] interface IDWriteTextFormat3 : IDWriteTextFormat2 { HRESULT SetFontAxisValues( DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values); UINT32 GetFontAxisValueCount(); HRESULT GetFontAxisValues( DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values); DWRITE_AUTOMATIC_FONT_AXES GetAutomaticFontAxes(); HRESULT SetAutomaticFontAxes(DWRITE_AUTOMATIC_FONT_AXES axes); } [ local, object, uuid(07ddcd52-020e-4de8-ac33-6c953d83f92d) ] interface IDWriteTextLayout3 : IDWriteTextLayout2 { HRESULT InvalidateLayout(); HRESULT SetLineSpacing(DWRITE_LINE_SPACING const *spacing); HRESULT GetLineSpacing(DWRITE_LINE_SPACING *spacing); HRESULT GetLineMetrics(DWRITE_LINE_METRICS1 *metrics, UINT32 max_count, UINT32 *count); } [ local, object, uuid(05a9bf42-223f-4441-b5fb-8263685f55e9) ] interface IDWriteTextLayout4 : IDWriteTextLayout3 { HRESULT SetFontAxisValues( DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, DWRITE_TEXT_RANGE range); UINT32 GetFontAxisValueCount(UINT32 pos); HRESULT GetFontAxisValues( UINT32 pos, DWRITE_FONT_AXIS_VALUE *values, UINT32 num_values, DWRITE_TEXT_RANGE *range); DWRITE_AUTOMATIC_FONT_AXES GetAutomaticFontAxes(); HRESULT SetAutomaticFontAxes(DWRITE_AUTOMATIC_FONT_AXES axes); } [ local, object, uuid(2397599d-dd0d-4681-bd6a-f4f31eaade77) ] interface IDWriteFontFallback1 : IDWriteFontFallback { HRESULT MapCharacters( IDWriteTextAnalysisSource *source, UINT32 pos, UINT32 length, IDWriteFontCollection *base_collection, const WCHAR *familyname, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, UINT32 *mapped_length, FLOAT *scale, IDWriteFontFace5 **fontface); } [ local, object, uuid(4556be70-3abd-4f70-90be-421780a6f515) ] interface IDWriteGdiInterop1 : IDWriteGdiInterop { HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont, IDWriteFontCollection *collection, IDWriteFont **font); /* GetFontSignature() methods are listed in reversed order to make resulting vtable order compatible. */ HRESULT GetFontSignature_(IDWriteFontFace *fontface, FONTSIGNATURE *fontsig); HRESULT GetFontSignature(IDWriteFont *font, FONTSIGNATURE *fontsig); HRESULT GetMatchingFontsByLOGFONT(LOGFONTW const *logfont, IDWriteFontSet *fontset, IDWriteFontSet **subset); } [ local, object, uuid(2f642afe-9c68-4f40-b8be-457401afcb3d) ] interface IDWriteFontSetBuilder : IUnknown { HRESULT AddFontFaceReference_(IDWriteFontFaceReference *ref, DWRITE_FONT_PROPERTY const *props, UINT32 prop_count); HRESULT AddFontFaceReference(IDWriteFontFaceReference *ref); HRESULT AddFontSet(IDWriteFontSet *fontset); HRESULT CreateFontSet(IDWriteFontSet **fontset); } [ local, object, uuid(3ff7715f-3cdc-4dc6-9b72-ec5621dccafd) ] interface IDWriteFontSetBuilder1 : IDWriteFontSetBuilder { HRESULT AddFontFile(IDWriteFontFile *file); } [ local, object, uuid(ee5ba612-b131-463c-8f4f-3189b9401e45) ] interface IDWriteFontSetBuilder2 : IDWriteFontSetBuilder1 { HRESULT AddFont( IDWriteFontFile *fontfile, UINT32 face_index, DWRITE_FONT_SIMULATIONS simulations, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_values, DWRITE_FONT_AXIS_RANGE const *axis_ranges, UINT32 num_ranges, DWRITE_FONT_PROPERTY const *props, UINT32 num_properties); HRESULT AddFontFile(const WCHAR *filepath); } [ local, object, uuid(9a1b41c3-d3bb-466a-87fc-fe67556a3b65) ] interface IDWriteFactory3 : IDWriteFactory2 { HRESULT CreateGlyphRunAnalysis( DWRITE_GLYPH_RUN const *run, DWRITE_MATRIX const *transform, DWRITE_RENDERING_MODE1 rendering_mode, DWRITE_MEASURING_MODE measuring_mode, DWRITE_GRID_FIT_MODE gridfit_mode, DWRITE_TEXT_ANTIALIAS_MODE antialias_mode, FLOAT origin_x, FLOAT origin_y, IDWriteGlyphRunAnalysis **analysis); HRESULT CreateCustomRenderingParams( FLOAT gamma, FLOAT enhanced_contrast, FLOAT grayscale_enhanced_contrast, FLOAT cleartype_level, DWRITE_PIXEL_GEOMETRY pixel_geometry, DWRITE_RENDERING_MODE1 rendering_mode, DWRITE_GRID_FIT_MODE gridfit_mode, IDWriteRenderingParams3 **params); /* CreateFontFaceReference methods are listed in reversed order to make resulting vtable order compatible. */ HRESULT CreateFontFaceReference_( IDWriteFontFile *file, UINT32 index, DWRITE_FONT_SIMULATIONS simulations, IDWriteFontFaceReference **reference); HRESULT CreateFontFaceReference( WCHAR const *path, FILETIME const *writetime, UINT32 index, DWRITE_FONT_SIMULATIONS simulations, IDWriteFontFaceReference **reference); HRESULT GetSystemFontSet(IDWriteFontSet **fontset); HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder **builder); HRESULT CreateFontCollectionFromFontSet( IDWriteFontSet *fontset, IDWriteFontCollection1 **collection); HRESULT GetSystemFontCollection( BOOL include_downloadable, IDWriteFontCollection1 **collection, BOOL check_for_updates); HRESULT GetFontDownloadQueue(IDWriteFontDownloadQueue **queue); } typedef enum DWRITE_GLYPH_IMAGE_FORMATS { DWRITE_GLYPH_IMAGE_FORMATS_NONE = 0, DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE = 1 << 0, DWRITE_GLYPH_IMAGE_FORMATS_CFF = 1 << 1, DWRITE_GLYPH_IMAGE_FORMATS_COLR = 1 << 2, DWRITE_GLYPH_IMAGE_FORMATS_SVG = 1 << 3, DWRITE_GLYPH_IMAGE_FORMATS_PNG = 1 << 4, DWRITE_GLYPH_IMAGE_FORMATS_JPEG = 1 << 5, DWRITE_GLYPH_IMAGE_FORMATS_TIFF = 1 << 6, DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = 1 << 7 } DWRITE_GLYPH_IMAGE_FORMATS; typedef struct DWRITE_GLYPH_IMAGE_DATA { void const *imageData; UINT32 imageDataSize; UINT32 uniqueDataId; UINT32 pixelsPerEm; D2D1_SIZE_U pixelSize; D2D1_POINT_2L horizontalLeftOrigin; D2D1_POINT_2L horizontalRightOrigin; D2D1_POINT_2L verticalTopOrigin; D2D1_POINT_2L verticalBottomOrigin; } DWRITE_GLYPH_IMAGE_DATA; [ local, object, uuid(27f2a904-4eb8-441d-9678-0563f53e3e2f) ] interface IDWriteFontFace4 : IDWriteFontFace3 { HRESULT GetGlyphImageFormats_( UINT16 glyph, UINT32 ppem_first, UINT32 ppem_last, DWRITE_GLYPH_IMAGE_FORMATS *formats); DWRITE_GLYPH_IMAGE_FORMATS GetGlyphImageFormats(); HRESULT GetGlyphImageData( UINT16 glyph, UINT32 ppem, DWRITE_GLYPH_IMAGE_FORMATS format, DWRITE_GLYPH_IMAGE_DATA *data, void **context); void ReleaseGlyphImageData(void *context); } [ local, object, uuid(98eff3a5-b667-479a-b145-e2fa5b9fdc29) ] interface IDWriteFontFace5 : IDWriteFontFace4 { UINT32 GetFontAxisValueCount(); HRESULT GetFontAxisValues( DWRITE_FONT_AXIS_VALUE *values, UINT32 value_count); BOOL HasVariations(); HRESULT GetFontResource(IDWriteFontResource **resource); BOOL Equals(IDWriteFontFace *fontface); } typedef struct DWRITE_COLOR_GLYPH_RUN1 { DWRITE_GLYPH_RUN glyphRun; DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription; FLOAT baselineOriginX; FLOAT baselineOriginY; DWRITE_COLOR_F runColor; UINT16 paletteIndex; DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat; DWRITE_MEASURING_MODE measuringMode; } DWRITE_COLOR_GLYPH_RUN1; [ local, object, uuid(7c5f86da-c7a1-4f05-b8e1-55a179fe5a35) ] interface IDWriteColorGlyphRunEnumerator1 : IDWriteColorGlyphRunEnumerator { HRESULT GetCurrentRun( DWRITE_COLOR_GLYPH_RUN1 const **run); } [ local, object, uuid(4b0b5bd3-0797-4549-8ac5-fe915cc53856) ] interface IDWriteFactory4 : IDWriteFactory3 { HRESULT TranslateColorGlyphRun( D2D1_POINT_2F baseline_origin, DWRITE_GLYPH_RUN const *run, DWRITE_GLYPH_RUN_DESCRIPTION const *run_desc, DWRITE_GLYPH_IMAGE_FORMATS desired_formats, DWRITE_MEASURING_MODE measuring_mode, DWRITE_MATRIX const *transform, UINT32 palette, IDWriteColorGlyphRunEnumerator1 **layers); HRESULT ComputeGlyphOrigins_( DWRITE_GLYPH_RUN const *run, D2D1_POINT_2F baseline_origin, D2D1_POINT_2F *origins); HRESULT ComputeGlyphOrigins( DWRITE_GLYPH_RUN const *run, DWRITE_MEASURING_MODE measuring_mode, D2D1_POINT_2F baseline_origin, DWRITE_MATRIX const *transform, D2D1_POINT_2F *origins); } [ local, object, uuid(ce25f8fd-863b-4d13-9651-c1f88dc73fe2) ] interface IDWriteAsyncResult : IUnknown { HANDLE GetWaitHandle(); HRESULT GetResult(); } typedef struct DWRITE_FILE_FRAGMENT { UINT64 fileOffset; UINT64 fragmentSize; } DWRITE_FILE_FRAGMENT; [ local, object, uuid(4db3757a-2c72-4ed9-b2b6-1ababe1aff9c) ] interface IDWriteRemoteFontFileStream : IDWriteFontFileStream { HRESULT GetLocalFileSize(UINT64 *size); HRESULT GetFileFragmentLocality(UINT64 offset, UINT64 size, BOOL *is_local, UINT64 *partial_size); DWRITE_LOCALITY GetLocality(); HRESULT BeginDownload( GUID const *operation_id, DWRITE_FILE_FRAGMENT const *fragments, UINT32 fragment_count, IDWriteAsyncResult **async_result); } typedef enum DWRITE_CONTAINER_TYPE { DWRITE_CONTAINER_TYPE_UNKNOWN, DWRITE_CONTAINER_TYPE_WOFF, DWRITE_CONTAINER_TYPE_WOFF2, } DWRITE_CONTAINER_TYPE; [ local, object, uuid(68648c83-6ede-46c0-ab46-20083a887fde) ] interface IDWriteRemoteFontFileLoader : IDWriteFontFileLoader { HRESULT CreateRemoteStreamFromKey(void const *key, UINT32 key_size, IDWriteRemoteFontFileStream **stream); HRESULT GetLocalityFromKey(void const *key, UINT32 key_size, DWRITE_LOCALITY *locality); HRESULT CreateFontFileReferenceFromUrl( IDWriteFactory *factory, WCHAR const *base_url, WCHAR const *file_url, IDWriteFontFile **fontfile); } [ local, object, uuid(dc102f47-a12d-4b1c-822d-9e117e33043f) ] interface IDWriteInMemoryFontFileLoader : IDWriteFontFileLoader { HRESULT CreateInMemoryFontFileReference( IDWriteFactory *factory, void const *data, UINT32 data_size, IUnknown *owner, IDWriteFontFile **fontfile); UINT32 GetFileCount(); } [ local, object, uuid(958db99a-be2a-4f09-af7d-65189803d1d3) ] interface IDWriteFactory5 : IDWriteFactory4 { HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder1 **fontset_builder); HRESULT CreateInMemoryFontFileLoader(IDWriteFontFileLoader **loader); HRESULT CreateHttpFontFileLoader( WCHAR const *referrer_url, WCHAR const *extra_headers, IDWriteRemoteFontFileLoader **loader); DWRITE_CONTAINER_TYPE AnalyzeContainerType(void const *data, UINT32 data_size); HRESULT UnpackFontFile( DWRITE_CONTAINER_TYPE container_type, void const *data, UINT32 data_size, IDWriteFontFileStream **stream); } [ local, object, uuid(f3744d80-21f7-42eb-b35d-995bc72fc223) ] interface IDWriteFactory6 : IDWriteFactory5 { HRESULT CreateFontFaceReference( IDWriteFontFile *file, UINT32 face_index, DWRITE_FONT_SIMULATIONS simulations, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_axis, IDWriteFontFaceReference1 **face_ref); HRESULT CreateFontResource( IDWriteFontFile *file, UINT32 face_index, IDWriteFontResource **resource); HRESULT GetSystemFontSet( BOOL include_downloadable, IDWriteFontSet1 **fontset); HRESULT GetSystemFontCollection( BOOL include_downloadable, DWRITE_FONT_FAMILY_MODEL family_model, IDWriteFontCollection2 **collection); HRESULT CreateFontCollectionFromFontSet( IDWriteFontSet *fontset, DWRITE_FONT_FAMILY_MODEL family_model, IDWriteFontCollection2 **collection); HRESULT CreateFontSetBuilder( IDWriteFontSetBuilder2 **builder); HRESULT CreateTextFormat( const WCHAR *familyname, IDWriteFontCollection *collection, DWRITE_FONT_AXIS_VALUE const *axis_values, UINT32 num_axis, FLOAT fontsize, const WCHAR *localename, IDWriteTextFormat3 **format); } [ local, object, uuid(35d0e0b3-9076-4d2e-a016-a91b568a06b4) ] interface IDWriteFactory7 : IDWriteFactory6 { HRESULT GetSystemFontSet( BOOL include_downloadable, IDWriteFontSet2 **fontset); HRESULT GetSystemFontCollection( BOOL include_downloadable, DWRITE_FONT_FAMILY_MODEL family_model, IDWriteFontCollection3 **collection); } ================================================ FILE: wine/windows/dxdiag.h ================================================ /* * Copyright (C) 2004 Raphael Junqueira * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DXDIAG_H #define __WINE_DXDIAG_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /***************************************************************************** * #defines and error codes */ #define DXDIAG_DX9_SDK_VERSION 111 #define _FACDXDIAG 0x007 #define MAKE_DXDIAGHRESULT( code ) MAKE_HRESULT( 1, _FACDXDIAG, code ) /* * DXDiag Errors */ #define DXDIAG_E_INSUFFICIENT_BUFFER MAKE_DXDIAGHRESULT(0x007A) /***************************************************************************** * DXDiag structures Typedefs */ typedef struct _DXDIAG_INIT_PARAMS { DWORD dwSize; DWORD dwDxDiagHeaderVersion; BOOL bAllowWHQLChecks; VOID* pReserved; } DXDIAG_INIT_PARAMS; /***************************************************************************** * Predeclare the interfaces */ /* CLSIDs */ DEFINE_GUID(CLSID_DxDiagProvider, 0xA65B8071, 0x3BFE, 0x4213, 0x9A, 0x5B, 0x49, 0x1D, 0xA4, 0x46, 0x1C, 0xA7); /* IIDs */ DEFINE_GUID(IID_IDxDiagProvider, 0x9C6B4CB0, 0x23F8, 0x49CC, 0xA3, 0xED, 0x45, 0xA5, 0x50, 0x00, 0xA6, 0xD2); DEFINE_GUID(IID_IDxDiagContainer, 0x7D0F462F, 0x4064, 0x4862, 0xBC, 0x7F, 0x93, 0x3E, 0x50, 0x58, 0xC1, 0x0F); /* typedef definitions */ typedef struct IDxDiagProvider *LPDXDIAGPROVIDER, *PDXDIAGPROVIDER; typedef struct IDxDiagContainer *LPDXDIAGCONTAINER, *PDXDIAGCONTAINER; /***************************************************************************** * IDxDiagContainer interface */ #ifdef WINE_NO_UNICODE_MACROS #undef GetProp #endif #define INTERFACE IDxDiagContainer DECLARE_INTERFACE_(IDxDiagContainer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDxDiagContainer methods ***/ STDMETHOD(GetNumberOfChildContainers)(THIS_ DWORD* pdwCount) PURE; STDMETHOD(EnumChildContainerNames)(THIS_ DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) PURE; STDMETHOD(GetChildContainer)(THIS_ LPCWSTR pwszContainer, IDxDiagContainer** ppInstance) PURE; STDMETHOD(GetNumberOfProps)(THIS_ DWORD* pdwCount) PURE; STDMETHOD(EnumPropNames)(THIS_ DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) PURE; STDMETHOD(GetProp)(THIS_ LPCWSTR pwszPropName, VARIANT* pvarProp) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDxDiagContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDxDiagContainer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDxDiagContainer_Release(p) (p)->lpVtbl->Release(p) /*** IDxDiagContainer methods ***/ #define IDxDiagContainer_GetNumberOfChildContainers(p,a) (p)->lpVtbl->GetNumberOfChildContainers(p,a) #define IDxDiagContainer_EnumChildContainerNames(p,a,b,c) (p)->lpVtbl->EnumChildContainerNames(p,a,b,c) #define IDxDiagContainer_GetChildContainer(p,a,b) (p)->lpVtbl->GetChildContainer(p,a,b) #define IDxDiagContainer_GetNumberOfProps(p,a) (p)->lpVtbl->GetNumberOfProps(p,a) #define IDxDiagContainer_EnumPropNames(p,a,b,c) (p)->lpVtbl->EnumPropNames(p,a,b,c) #define IDxDiagContainer_GetProp(p,a,b) (p)->lpVtbl->GetProp(p,a,b) #else /*** IUnknown methods ***/ #define IDxDiagContainer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDxDiagContainer_AddRef(p) (p)->AddRef() #define IDxDiagContainer_Release(p) (p)->Release() /*** IDxDiagContainer methods ***/ #define IDxDiagContainer_GetNumberOfChildContainers(p,a) (p)->GetNumberOfChildContainers(a) #define IDxDiagContainer_EnumChildContainerNames(p,a,b,c) (p)->EnumChildContainerNames(a,b,c) #define IDxDiagContainer_GetChildContainer(p,a,b) (p)->GetChildContainer(a,b) #define IDxDiagContainer_GetNumberOfProps(p,a) (p)->GetNumberOfProps(a) #define IDxDiagContainer_EnumPropNames(p,a,b,c) (p)->EnumPropNames(a,b,c) #define IDxDiagContainer_GetProp(p,a,b) (p)->GetProp(a,b) #endif /***************************************************************************** * IDxDiagProvider interface */ #define INTERFACE IDxDiagProvider DECLARE_INTERFACE_(IDxDiagProvider,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDxDiagProvider methods ***/ STDMETHOD(Initialize)(THIS_ DXDIAG_INIT_PARAMS* pParams) PURE; STDMETHOD(GetRootContainer)(THIS_ IDxDiagContainer** ppInstance) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDxDiagProvider_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDxDiagProvider_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDxDiagProvider_Release(p) (p)->lpVtbl->Release(p) /*** IDxDiagProvider methods ***/ #define IDxDiagProvider_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDxDiagProvider_GetRootContainer(p,a) (p)->lpVtbl->GetRootContainer(p,a) #else /*** IUnknown methods ***/ #define IDxDiagProvider_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDxDiagProvider_AddRef(p) (p)->AddRef() #define IDxDiagProvider_Release(p) (p)->Release() /*** IDxDiagProvider methods ***/ #define IDxDiagProvider_Initialize(p,a) (p)->Initialize(a) #define IDxDiagProvider_GetRootContainer(p,a) (p)->GetRootContainer(a) #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/dxerr8.h ================================================ /* * Copyright (C) 2004 Robert Reif * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DXERR8_H #define __WINE_DXERR8_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ const char* WINAPI DXGetErrorString8A(HRESULT hr); const WCHAR* WINAPI DXGetErrorString8W(HRESULT hr); #define DXGetErrorString8 WINELIB_NAME_AW(DXGetErrorString8) const char* WINAPI DXGetErrorDescription8A(HRESULT hr); const WCHAR* WINAPI DXGetErrorDescription8W(HRESULT hr); #define DXGetErrorDescription8 WINELIB_NAME_AW(DXGetErrorDescription8) HRESULT WINAPI DXTraceA(const char* strFile, DWORD dwLine, HRESULT hr, const char* strMsg, BOOL bPopMsgBox); HRESULT WINAPI DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox); #define DXTrace WINELIB_NAME_AW(DXTrace) #if defined(DEBUG) || defined(_DEBUG) #define DXTRACE_MSG(str) DXTrace(__FILE__, (DWORD)__LINE__, 0, str, FALSE) #define DXTRACE_ERR(str,hr) DXTrace(__FILE__, (DWORD)__LINE__, hr, str, TRUE) #define DXTRACE_ERR_NOMSGBOX(str,hr) DXTrace(__FILE__, (DWORD)__LINE__, hr, str, FALSE) #else #define DXTRACE_MSG(str) __MSABI_LONG(0) #define DXTRACE_ERR(str,hr) (hr) #define DXTRACE_ERR_NOMSGBOX(str,hr) (hr) #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_DXERR8_H */ ================================================ FILE: wine/windows/dxerr9.h ================================================ /* * Copyright (C) 2004 Robert Reif * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DXERR9_H #define __WINE_DXERR9_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ const char* WINAPI DXGetErrorString9A(HRESULT hr); const WCHAR* WINAPI DXGetErrorString9W(HRESULT hr); #define DXGetErrorString9 WINELIB_NAME_AW(DXGetErrorString9) const char* WINAPI DXGetErrorDescription9A(HRESULT hr); const WCHAR* WINAPI DXGetErrorDescription9W(HRESULT hr); #define DXGetErrorDescription9 WINELIB_NAME_AW(DXGetErrorDescription9) HRESULT WINAPI DXTraceA(const char* strFile, DWORD dwLine, HRESULT hr, const char* strMsg, BOOL bPopMsgBox); HRESULT WINAPI DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox); #define DXTrace WINELIB_NAME_AW(DXTrace) #if defined(DEBUG) || defined(_DEBUG) #define DXTRACE_MSG(str) DXTrace(__FILE__, (DWORD)__LINE__, 0, str, FALSE) #define DXTRACE_ERR(str,hr) DXTrace(__FILE__, (DWORD)__LINE__, hr, str, TRUE) #define DXTRACE_ERR_NOMSGBOX(str,hr) DXTrace(__FILE__, (DWORD)__LINE__, hr, str, FALSE) #else #define DXTRACE_MSG(str) __MSABI_LONG(0) #define DXTRACE_ERR(str,hr) (hr) #define DXTRACE_ERR_NOMSGBOX(str,hr) (hr) #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_DXERR9_H */ ================================================ FILE: wine/windows/dxfile.h ================================================ /* * Copyright 2004 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DXFILE_H #define __WINE_DXFILE_H #include #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef DWORD DXFILEFORMAT; #define DXFILEFORMAT_BINARY 0 #define DXFILEFORMAT_TEXT 1 #define DXFILEFORMAT_COMPRESSED 2 typedef DWORD DXFILELOADOPTIONS; #define DXFILELOAD_FROMFILE __MSABI_LONG(0x00) #define DXFILELOAD_FROMRESOURCE __MSABI_LONG(0x01) #define DXFILELOAD_FROMMEMORY __MSABI_LONG(0x02) #define DXFILELOAD_FROMSTREAM __MSABI_LONG(0x04) #define DXFILELOAD_FROMURL __MSABI_LONG(0x08) typedef struct _DXFILELOADRESOURCE { HMODULE hModule; LPCSTR /*LPCTSTR*/ lpName; LPCSTR /*LPCTSTR*/ lpType; } DXFILELOADRESOURCE, *LPDXFILELOADRESOURCE; typedef struct _DXFILELOADMEMORY { LPVOID lpMemory; DWORD dSize; } DXFILELOADMEMORY, *LPDXFILELOADMEMORY; typedef struct IDirectXFile *LPDIRECTXFILE; typedef struct IDirectXFileEnumObject *LPDIRECTXFILEENUMOBJECT; typedef struct IDirectXFileSaveObject *LPDIRECTXFILESAVEOBJECT; typedef struct IDirectXFileObject *LPDIRECTXFILEOBJECT; typedef struct IDirectXFileData *LPDIRECTXFILEDATA; typedef struct IDirectXFileDataReference *LPDIRECTXFILEDATAREFERENCE; typedef struct IDirectXFileBinary *LPDIRECTXFILEBINARY; STDAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile); #define INTERFACE IDirectXFile DECLARE_INTERFACE_(IDirectXFile,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectXFile methods ***/ STDMETHOD(CreateEnumObject) (THIS_ LPVOID, DXFILELOADOPTIONS, LPDIRECTXFILEENUMOBJECT *) PURE; STDMETHOD(CreateSaveObject) (THIS_ LPCSTR, DXFILEFORMAT, LPDIRECTXFILESAVEOBJECT *) PURE; STDMETHOD(RegisterTemplates) (THIS_ LPVOID, DWORD) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectXFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectXFile_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectXFile_Release(p) (p)->lpVtbl->Release(p) /*** IDirectXFile methods ***/ #define IDirectXFile_CreateEnumObject(p,a,b,c) (p)->lpVtbl->CreateEnumObject(p,a,b,c) #define IDirectXFile_CreateSaveObject(p,a,b,c) (p)->lpVtbl->CreateSaveObject(p,a,b,c) #define IDirectXFile_RegisterTemplates(p,a,b) (p)->lpVtbl->RegisterTemplates(p,a,b) #endif #define INTERFACE IDirectXFileEnumObject DECLARE_INTERFACE_(IDirectXFileEnumObject,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectXFileEnumObject methods ***/ STDMETHOD(GetNextDataObject) (THIS_ LPDIRECTXFILEDATA *) PURE; STDMETHOD(GetDataObjectById) (THIS_ REFGUID, LPDIRECTXFILEDATA *) PURE; STDMETHOD(GetDataObjectByName) (THIS_ LPCSTR, LPDIRECTXFILEDATA *) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectXFileEnumObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectXFileEnumObject_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectXFileEnumObject_Release(p) (p)->lpVtbl->Release(p) /*** IDirectXFileEnumObject methods ***/ #define IDirectXFileEnumObject_GetNextDataObject(p,a) (p)->lpVtbl->GetNextDataObject(p,a) #define IDirectXFileEnumObject_GetDataObjectById(p,a,b) (p)->lpVtbl->GetDataObjectById(p,a,b) #define IDirectXFileEnumObject_GetDataObjectByName(p,a,b) (p)->lpVtbl->GetDataObjectByName(p,a,b) #endif #define INTERFACE IDirectXFileSaveObject DECLARE_INTERFACE_(IDirectXFileSaveObject,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectXFileSaveObject methods ***/ STDMETHOD(SaveTemplates) (THIS_ DWORD, const GUID **) PURE; STDMETHOD(CreateDataObject) (THIS_ REFGUID, LPCSTR, const GUID *, DWORD, LPVOID, LPDIRECTXFILEDATA *) PURE; STDMETHOD(SaveData) (THIS_ LPDIRECTXFILEDATA) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectXFileSaveObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectXFileSaveObject_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectXFileSaveObject_Release(p) (p)->lpVtbl->Release(p) /*** IDirectXFileSaveObject methods ***/ #define IDirectXFileSaveObject_SaveTemplates(p,a,b) (p)->lpVtbl->SaveTemplates(p,a,b) #define IDirectXFileSaveObject_CreateDataObject(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDataObject(p,a,b,c,d,e,f) #define IDirectXFileSaveObject_SaveData(p,a) (p)->lpVtbl->SaveData(p,a) #endif #define IUNKNOWN_METHODS(kind) \ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) kind; \ STDMETHOD_(ULONG,AddRef)(THIS) kind; \ STDMETHOD_(ULONG,Release)(THIS) kind #define IDIRECTXFILEOBJECT_METHODS(kind) \ STDMETHOD(GetName) (THIS_ LPSTR, LPDWORD) kind; \ STDMETHOD(GetId) (THIS_ LPGUID) kind #define INTERFACE IDirectXFileObject DECLARE_INTERFACE_(IDirectXFileObject,IUnknown) { IUNKNOWN_METHODS(PURE); IDIRECTXFILEOBJECT_METHODS(PURE); }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectXFileObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectXFileObject_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectXFileObject_Release(p) (p)->lpVtbl->Release(p) /*** IDirectXFileObject methods ***/ #define IDirectXFileObject_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirectXFileObject_GetId(p,a) (p)->lpVtbl->GetId(p,a) #endif #define INTERFACE IDirectXFileData DECLARE_INTERFACE_(IDirectXFileData,IDirectXFileObject) { IUNKNOWN_METHODS(PURE); IDIRECTXFILEOBJECT_METHODS(PURE); /*** IDirectXFileData methods ***/ STDMETHOD(GetData) (THIS_ LPCSTR, DWORD *, void **) PURE; STDMETHOD(GetType) (THIS_ const GUID **) PURE; STDMETHOD(GetNextObject) (THIS_ LPDIRECTXFILEOBJECT *) PURE; STDMETHOD(AddDataObject) (THIS_ LPDIRECTXFILEDATA) PURE; STDMETHOD(AddDataReference) (THIS_ LPCSTR, const GUID *) PURE; STDMETHOD(AddBinaryObject) (THIS_ LPCSTR, const GUID *, LPCSTR, LPVOID, DWORD) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectXFileData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectXFileData_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectXFileData_Release(p) (p)->lpVtbl->Release(p) /*** IDirectXFileObject methods ***/ #define IDirectXFileData_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirectXFileData_GetId(p,a) (p)->lpVtbl->GetId(p,a) /*** IDirectXFileData methods ***/ #define IDirectXFileData_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c) #define IDirectXFileData_GetType(p,a) (p)->lpVtbl->GetType(p,a) #define IDirectXFileData_GetNextObject(p,a) (p)->lpVtbl->GetNextObject(p,a) #define IDirectXFileData_AddDataObject(p,a) (p)->lpVtbl->AddDataObject(p,a) #define IDirectXFileData_AddDataReference(p,a,b) (p)->lpVtbl->AddDataReference(p,a,b) #define IDirectXFileData_AddBinaryObject(p,a,b,c,d,e) (p)->lpVtbl->AddBinaryObject(p,a,b,c,d,e) #endif #define INTERFACE IDirectXFileDataReference DECLARE_INTERFACE_(IDirectXFileDataReference,IDirectXFileObject) { IUNKNOWN_METHODS(PURE); IDIRECTXFILEOBJECT_METHODS(PURE); /*** IDirectXFileDataReference methods ***/ STDMETHOD(Resolve) (THIS_ LPDIRECTXFILEDATA *) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectXFileDataReference_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectXFileDataReference_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectXFileDataReference_Release(p) (p)->lpVtbl->Release(p) /*** IDirectXFileObject methods ***/ #define IDirectXFileDataReference_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirectXFileDataReference_GetId(p,a) (p)->lpVtbl->GetId(p,a) /*** IDirectXFileDataReference methods ***/ #define IDirectXFileDataReference_Resolve(p,a) (p)->lpVtbl->Resolve(p,a) #endif #define INTERFACE IDirectXFileBinary DECLARE_INTERFACE_(IDirectXFileBinary,IDirectXFileObject) { IUNKNOWN_METHODS(PURE); IDIRECTXFILEOBJECT_METHODS(PURE); /*** IDirectXFileBinary methods ***/ STDMETHOD(GetSize) (THIS_ DWORD *) PURE; STDMETHOD(GetMimeType) (THIS_ LPCSTR *) PURE; STDMETHOD(Read) (THIS_ LPVOID, DWORD, LPDWORD) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirectXFileBinary_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectXFileBinary_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectXFileBinary_Release(p) (p)->lpVtbl->Release(p) /*** IDirectXFileObject methods ***/ #define IDirectXFileBinary_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) #define IDirectXFileBinary_GetId(p,a) (p)->lpVtbl->GetId(p,a) /*** IDirectXFileBinary methods ***/ #define IDirectXFileBinary_GetSize(p,a) (p)->lpVtbl->GetSize(p,a) #define IDirectXFileBinary_GetMimeType(p,a) (p)->lpVtbl->GetMimeType(p,a) #define IDirectXFileBinary_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c) #endif /* DirectXFile Object CLSID */ DEFINE_GUID(CLSID_CDirectXFile, 0x4516ec43, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); /* DirectX File Interface GUIDs */ DEFINE_GUID(IID_IDirectXFile, 0x3d82ab40, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(IID_IDirectXFileEnumObject, 0x3d82ab41, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(IID_IDirectXFileSaveObject, 0x3d82ab42, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(IID_IDirectXFileObject, 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(IID_IDirectXFileData, 0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(IID_IDirectXFileDataReference, 0x3d82ab45, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(IID_IDirectXFileBinary, 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); /* DirectX File Header template's GUID */ DEFINE_GUID(TID_DXFILEHeader, 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); /* DirectX File errors */ #define _FACDD 0x876 #define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) #define DXFILE_OK 0 #define DXFILEERR_BADOBJECT MAKE_DDHRESULT(850) #define DXFILEERR_BADVALUE MAKE_DDHRESULT(851) #define DXFILEERR_BADTYPE MAKE_DDHRESULT(852) #define DXFILEERR_BADSTREAMHANDLE MAKE_DDHRESULT(853) #define DXFILEERR_BADALLOC MAKE_DDHRESULT(854) #define DXFILEERR_NOTFOUND MAKE_DDHRESULT(855) #define DXFILEERR_NOTDONEYET MAKE_DDHRESULT(856) #define DXFILEERR_FILENOTFOUND MAKE_DDHRESULT(857) #define DXFILEERR_RESOURCENOTFOUND MAKE_DDHRESULT(858) #define DXFILEERR_URLNOTFOUND MAKE_DDHRESULT(859) #define DXFILEERR_BADRESOURCE MAKE_DDHRESULT(860) #define DXFILEERR_BADFILETYPE MAKE_DDHRESULT(861) #define DXFILEERR_BADFILEVERSION MAKE_DDHRESULT(862) #define DXFILEERR_BADFILEFLOATSIZE MAKE_DDHRESULT(863) #define DXFILEERR_BADFILECOMPRESSIONTYPE MAKE_DDHRESULT(864) #define DXFILEERR_BADFILE MAKE_DDHRESULT(865) #define DXFILEERR_PARSEERROR MAKE_DDHRESULT(866) #define DXFILEERR_NOTEMPLATE MAKE_DDHRESULT(867) #define DXFILEERR_BADARRAYSIZE MAKE_DDHRESULT(868) #define DXFILEERR_BADDATAREFERENCE MAKE_DDHRESULT(869) #define DXFILEERR_INTERNALERROR MAKE_DDHRESULT(870) #define DXFILEERR_NOMOREOBJECTS MAKE_DDHRESULT(871) #define DXFILEERR_BADINTRINSICS MAKE_DDHRESULT(872) #define DXFILEERR_NOMORESTREAMHANDLES MAKE_DDHRESULT(873) #define DXFILEERR_NOMOREDATA MAKE_DDHRESULT(874) #define DXFILEERR_BADCACHEFILE MAKE_DDHRESULT(875) #define DXFILEERR_NOINTERNET MAKE_DDHRESULT(876) #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_DXFILE_H */ ================================================ FILE: wine/windows/dxgi.idl ================================================ /* * Copyright 2007 Andras Kovacs * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "dxgitype.idl"; const UINT _FACDXGI = 0x87a; cpp_quote("#define MAKE_DXGI_STATUS(x) MAKE_HRESULT(0, _FACDXGI, x)") cpp_quote("#define MAKE_DXGI_HRESULT(x) MAKE_HRESULT(1, _FACDXGI, x)") cpp_quote("#if 0") typedef HANDLE HMONITOR; typedef struct _LUID { DWORD LowPart; LONG HighPart; } LUID, *PLUID; cpp_quote("#endif") typedef UINT DXGI_USAGE; const DXGI_USAGE DXGI_USAGE_SHADER_INPUT = 0x10L; const DXGI_USAGE DXGI_USAGE_RENDER_TARGET_OUTPUT = 0x20L; const DXGI_USAGE DXGI_USAGE_BACK_BUFFER = 0x40L; const DXGI_USAGE DXGI_USAGE_SHARED = 0x80L; const DXGI_USAGE DXGI_USAGE_READ_ONLY = 0x100L; const DXGI_USAGE DXGI_USAGE_DISCARD_ON_PRESENT = 0x200L; const DXGI_USAGE DXGI_USAGE_UNORDERED_ACCESS = 0x400L; const UINT DXGI_ENUM_MODES_INTERLACED = 1; const UINT DXGI_ENUM_MODES_SCALING = 2; const UINT DXGI_RESOURCE_PRIORITY_MINIMUM = 0x28000000; const UINT DXGI_RESOURCE_PRIORITY_LOW = 0x50000000; const UINT DXGI_RESOURCE_PRIORITY_NORMAL = 0x78000000; const UINT DXGI_RESOURCE_PRIORITY_HIGH = 0xa0000000; const UINT DXGI_RESOURCE_PRIORITY_MAXIMUM = 0xc8000000; const UINT DXGI_MAP_READ = 0x1; const UINT DXGI_MAP_WRITE = 0x2; const UINT DXGI_MAP_DISCARD = 0x4; typedef enum DXGI_SWAP_EFFECT { DXGI_SWAP_EFFECT_DISCARD = 0, DXGI_SWAP_EFFECT_SEQUENTIAL = 1, DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3, DXGI_SWAP_EFFECT_FLIP_DISCARD = 4 } DXGI_SWAP_EFFECT; typedef enum DXGI_RESIDENCY { DXGI_RESIDENCY_FULLY_RESIDENT = 1, DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2, DXGI_RESIDENCY_EVICTED_TO_DISK = 3, } DXGI_RESIDENCY; typedef struct DXGI_SURFACE_DESC { UINT Width; UINT Height; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; } DXGI_SURFACE_DESC; typedef struct DXGI_MAPPED_RECT { INT Pitch; BYTE *pBits; } DXGI_MAPPED_RECT; typedef struct DXGI_OUTPUT_DESC { WCHAR DeviceName[32]; RECT DesktopCoordinates; BOOL AttachedToDesktop; DXGI_MODE_ROTATION Rotation; HMONITOR Monitor; } DXGI_OUTPUT_DESC; typedef struct DXGI_FRAME_STATISTICS { UINT PresentCount; UINT PresentRefreshCount; UINT SyncRefreshCount; LARGE_INTEGER SyncQPCTime; LARGE_INTEGER SyncGPUTime; } DXGI_FRAME_STATISTICS; typedef struct DXGI_ADAPTER_DESC { WCHAR Description[128]; UINT VendorId; UINT DeviceId; UINT SubSysId; UINT Revision; SIZE_T DedicatedVideoMemory; SIZE_T DedicatedSystemMemory; SIZE_T SharedSystemMemory; LUID AdapterLuid; } DXGI_ADAPTER_DESC; typedef enum DXGI_SWAP_CHAIN_FLAG { DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 0x0001, DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 0x0002, DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 0x0004, DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTEXT = 0x0008, DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER = 0x0010, DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY = 0x0020, DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT = 0x0040, DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER = 0x0080, DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO = 0x0100, DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO = 0x0200, DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED = 0x0400, DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING = 0x0800, DXGI_SWAP_CHAIN_FLAG_RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS = 0x1000, } DXGI_SWAP_CHAIN_FLAG; typedef struct DXGI_SWAP_CHAIN_DESC { DXGI_MODE_DESC BufferDesc; DXGI_SAMPLE_DESC SampleDesc; DXGI_USAGE BufferUsage; UINT BufferCount; HWND OutputWindow; BOOL Windowed; DXGI_SWAP_EFFECT SwapEffect; UINT Flags; } DXGI_SWAP_CHAIN_DESC; typedef struct DXGI_SHARED_RESOURCE { HANDLE Handle; } DXGI_SHARED_RESOURCE; [ object, local, uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e) ] interface IDXGIObject : IUnknown { HRESULT SetPrivateData( [in] REFGUID guid, [in] UINT data_size, [in] const void *data ); HRESULT SetPrivateDataInterface( [in] REFGUID guid, [in] const IUnknown *object ); HRESULT GetPrivateData( [in] REFGUID guid, [in, out] UINT *data_size, [out] void *data ); HRESULT GetParent( [in] REFIID riid, [out] void **parent ); } [ object, local, uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6) ] interface IDXGIDeviceSubObject : IDXGIObject { HRESULT GetDevice( [in] REFIID riid, [out] void **device ); } [ object, uuid(035f3ab4-482e-4e50-b41f-8a7f8bd8960b), local, pointer_default(unique) ] interface IDXGIResource : IDXGIDeviceSubObject { HRESULT GetSharedHandle([out] HANDLE *pSharedHandle); HRESULT GetUsage([out] DXGI_USAGE *pUsage); HRESULT SetEvictionPriority([in] UINT EvictionPriority); HRESULT GetEvictionPriority([out, retval] UINT *pEvictionPriority); } [ object, uuid(9d8e1289-d7b3-465f-8126-250e349af85d), local, pointer_default(unique) ] interface IDXGIKeyedMutex : IDXGIDeviceSubObject { HRESULT AcquireSync([in] UINT64 Key, [in] DWORD dwMilliseconds); HRESULT ReleaseSync([in] UINT64 Key); } [ object, local, uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec) ] interface IDXGISurface : IDXGIDeviceSubObject { HRESULT GetDesc( [out] DXGI_SURFACE_DESC *desc ); HRESULT Map( [out] DXGI_MAPPED_RECT *mapped_rect, [in] UINT flags ); HRESULT Unmap( ); } [ object, local, uuid(4ae63092-6327-4c1b-80ae-bfe12ea32b86) ] interface IDXGISurface1 : IDXGISurface { HRESULT GetDC( [in] BOOL discard, [out] HDC *hdc ); HRESULT ReleaseDC( [in] RECT *dirty_rect ); } [ object, local, uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa) ] interface IDXGIOutput : IDXGIObject { HRESULT GetDesc( [out] DXGI_OUTPUT_DESC *desc ); HRESULT GetDisplayModeList( [in] DXGI_FORMAT format, [in] UINT flags, [in, out] UINT *mode_count, [out] DXGI_MODE_DESC *desc ); HRESULT FindClosestMatchingMode( [in] const DXGI_MODE_DESC *mode, [out] DXGI_MODE_DESC *closest_match, [in] IUnknown *device ); HRESULT WaitForVBlank( ); HRESULT TakeOwnership( [in] IUnknown *device, [in] BOOL exclusive ); void ReleaseOwnership( ); HRESULT GetGammaControlCapabilities( [out] DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps ); HRESULT SetGammaControl( [in] const DXGI_GAMMA_CONTROL *gamma_control ); HRESULT GetGammaControl( [out] DXGI_GAMMA_CONTROL *gamma_control ); HRESULT SetDisplaySurface( [in] IDXGISurface *surface ); HRESULT GetDisplaySurfaceData( [in] IDXGISurface *surface ); HRESULT GetFrameStatistics( [out] DXGI_FRAME_STATISTICS *stats ); } [ object, local, uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0) ] interface IDXGIAdapter : IDXGIObject { HRESULT EnumOutputs( [in] UINT output_idx, [in, out] IDXGIOutput **output ); HRESULT GetDesc( [out] DXGI_ADAPTER_DESC *desc ); HRESULT CheckInterfaceSupport( [in] REFGUID guid, [out] LARGE_INTEGER *umd_version ); } cpp_quote("#define DXGI_MAX_SWAP_CHAIN_BUFFERS (16)") cpp_quote("#define DXGI_PRESENT_TEST __MSABI_LONG(0x00000001U)") cpp_quote("#define DXGI_PRESENT_DO_NOT_SEQUENCE __MSABI_LONG(0x00000002U)") cpp_quote("#define DXGI_PRESENT_RESTART __MSABI_LONG(0x00000004U)") cpp_quote("#define DXGI_PRESENT_DO_NOT_WAIT __MSABI_LONG(0x00000008U)") cpp_quote("#define DXGI_PRESENT_STEREO_PREFER_RIGHT __MSABI_LONG(0x00000010U)") cpp_quote("#define DXGI_PRESENT_STEREO_TEMPORARY_MONO __MSABI_LONG(0x00000020U)") cpp_quote("#define DXGI_PRESENT_RESTRICT_TO_OUTPUT __MSABI_LONG(0x00000040U)") cpp_quote("#define DXGI_PRESENT_USE_DURATION __MSABI_LONG(0x00000100U)") cpp_quote("#define DXGI_PRESENT_ALLOW_TEARING __MSABI_LONG(0x00000200U)") [ object, local, uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a) ] interface IDXGISwapChain : IDXGIDeviceSubObject { HRESULT Present( [in] UINT sync_interval, [in] UINT flags ); HRESULT GetBuffer( [in] UINT buffer_idx, [in] REFIID riid, [in, out] void **surface ); HRESULT SetFullscreenState( [in] BOOL fullscreen, [in] IDXGIOutput *target ); HRESULT GetFullscreenState( [out] BOOL *fullscreen, [out] IDXGIOutput **target ); HRESULT GetDesc( [out] DXGI_SWAP_CHAIN_DESC *desc ); HRESULT ResizeBuffers( [in] UINT buffer_count, [in] UINT width, [in] UINT height, [in] DXGI_FORMAT format, [in] UINT flags ); HRESULT ResizeTarget( [in] const DXGI_MODE_DESC *target_mode_desc ); HRESULT GetContainingOutput( [out] IDXGIOutput **output ); HRESULT GetFrameStatistics( [out] DXGI_FRAME_STATISTICS *stats ); HRESULT GetLastPresentCount( [out] UINT *last_present_count ); } cpp_quote("#define DXGI_MWA_NO_WINDOW_CHANGES 0x1") cpp_quote("#define DXGI_MWA_NO_ALT_ENTER 0x2") cpp_quote("#define DXGI_MWA_NO_PRINT_SCREEN 0x4") cpp_quote("#define DXGI_MWA_VALID 0x7") [ object, local, uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369) ] interface IDXGIFactory : IDXGIObject { HRESULT EnumAdapters( [in] UINT adapter_idx, [out] IDXGIAdapter **adapter ); HRESULT MakeWindowAssociation( [in] HWND window, [in] UINT flags ); HRESULT GetWindowAssociation( [in] HWND *window ); HRESULT CreateSwapChain( [in] IUnknown *device, [in] DXGI_SWAP_CHAIN_DESC *desc, [out] IDXGISwapChain **swapchain ); HRESULT CreateSoftwareAdapter( [in] HMODULE swrast, [out] IDXGIAdapter **adapter ); } [local] HRESULT __stdcall CreateDXGIFactory(REFIID riid, void **factory); [local] HRESULT __stdcall CreateDXGIFactory1(REFIID riid, void **factory); [ object, local, uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c) ] interface IDXGIDevice : IDXGIObject { HRESULT GetAdapter( [out] IDXGIAdapter **adapter ); HRESULT CreateSurface( [in] const DXGI_SURFACE_DESC *desc, [in] UINT surface_count, [in] DXGI_USAGE usage, [in] const DXGI_SHARED_RESOURCE *shared_resource, [out] IDXGISurface **surface ); HRESULT QueryResourceResidency( [in] IUnknown *const *resources, [out] DXGI_RESIDENCY *residency, [in] UINT resource_count ); HRESULT SetGPUThreadPriority( [in] INT priority ); HRESULT GetGPUThreadPriority( [out] INT *priority ); } typedef enum DXGI_ADAPTER_FLAG { DXGI_ADAPTER_FLAG_NONE = 0, DXGI_ADAPTER_FLAG_REMOTE = 1, DXGI_ADAPTER_FLAG_FORCE_DWORD = 0xFFFFFFFF } DXGI_ADAPTER_FLAG; typedef struct DXGI_ADAPTER_DESC1 { WCHAR Description[128]; UINT VendorId; UINT DeviceId; UINT SubSysId; UINT Revision; SIZE_T DedicatedVideoMemory; SIZE_T DedicatedSystemMemory; SIZE_T SharedSystemMemory; LUID AdapterLuid; UINT Flags; } DXGI_ADAPTER_DESC1; [ object, uuid(29038f61-3839-4626-91fd-086879011a05), local, pointer_default(unique) ] interface IDXGIAdapter1 : IDXGIAdapter { HRESULT GetDesc1([out] DXGI_ADAPTER_DESC1 *pDesc); } [ object, uuid(77db970f-6276-48ba-ba28-070143b4392c), local, pointer_default(unique) ] interface IDXGIDevice1 : IDXGIDevice { HRESULT SetMaximumFrameLatency([in] UINT MaxLatency); HRESULT GetMaximumFrameLatency([out] UINT *pMaxLatency); } [ object, uuid(770aae78-f26f-4dba-a829-253c83d1b387), local, pointer_default(unique) ] interface IDXGIFactory1 : IDXGIFactory { HRESULT EnumAdapters1([in] UINT Adapter, [out] IDXGIAdapter1 **ppAdapter); BOOL IsCurrent(); } ================================================ FILE: wine/windows/dxgi1_2.idl ================================================ /* * Copyright 2014 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dxgi.idl"; const UINT DXGI_ENUM_MODES_STEREO = 0x4; const UINT DXGI_ENUM_MODES_DISABLED_STEREO = 0x8; const DWORD DXGI_SHARED_RESOURCE_READ = 0x80000000; const DWORD DXGI_SHARED_RESOURCE_WRITE = 0x00000001; typedef enum _DXGI_OFFER_RESOURCE_PRIORITY { DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1, DXGI_OFFER_RESOURCE_PRIORITY_NORMAL, DXGI_OFFER_RESOURCE_PRIORITY_HIGH } DXGI_OFFER_RESOURCE_PRIORITY; typedef enum DXGI_ALPHA_MODE { DXGI_ALPHA_MODE_UNSPECIFIED = 0, DXGI_ALPHA_MODE_PREMULTIPLIED = 1, DXGI_ALPHA_MODE_STRAIGHT = 2, DXGI_ALPHA_MODE_IGNORE = 3, DXGI_ALPHA_MODE_FORCE_DWORD = 0xffffffff } DXGI_ALPHA_MODE; typedef struct DXGI_OUTDUPL_MOVE_RECT { POINT SourcePoint; RECT DestinationRect; } DXGI_OUTDUPL_MOVE_RECT; typedef struct DXGI_OUTDUPL_DESC { DXGI_MODE_DESC ModeDesc; DXGI_MODE_ROTATION Rotation; BOOL DesktopImageInSystemMemory; } DXGI_OUTDUPL_DESC; typedef struct DXGI_OUTDUPL_POINTER_POSITION { POINT Position; BOOL Visible; } DXGI_OUTDUPL_POINTER_POSITION; typedef enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE { DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001, DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002, DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004 } DXGI_OUTDUPL_POINTER_SHAPE_TYPE; typedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO { UINT Type; UINT Width; UINT Height; UINT Pitch; POINT HotSpot; } DXGI_OUTDUPL_POINTER_SHAPE_INFO; typedef struct DXGI_OUTDUPL_FRAME_INFO { LARGE_INTEGER LastPresentTime; LARGE_INTEGER LastMouseUpdateTime; UINT AccumulatedFrames; BOOL RectsCoalesced; BOOL ProtectedContentMaskedOut; DXGI_OUTDUPL_POINTER_POSITION PointerPosition; UINT TotalMetadataBufferSize; UINT PointerShapeBufferSize; } DXGI_OUTDUPL_FRAME_INFO; typedef struct DXGI_MODE_DESC1 { UINT Width; UINT Height; DXGI_RATIONAL RefreshRate; DXGI_FORMAT Format; DXGI_MODE_SCANLINE_ORDER ScanlineOrdering; DXGI_MODE_SCALING Scaling; BOOL Stereo; } DXGI_MODE_DESC1; [ object, uuid(191cfac3-a341-470d-b26e-a864f428319c), local, pointer_default(unique) ] interface IDXGIOutputDuplication : IDXGIObject { void GetDesc( [out] DXGI_OUTDUPL_DESC *desc ); HRESULT AcquireNextFrame( [in] UINT timeout_in_milliseconds, [out] DXGI_OUTDUPL_FRAME_INFO *frame_info, [out] IDXGIResource **desktop_resource ); HRESULT GetFrameDirtyRects( [in] UINT dirty_rects_buffer_size, [out] RECT *dirty_rects_buffer, [out] UINT *dirty_rects_buffer_size_required ); HRESULT GetFrameMoveRects( [in] UINT move_rects_buffer_size, [out] DXGI_OUTDUPL_MOVE_RECT *move_rect_buffer, [out] UINT *move_rects_buffer_size_required ); HRESULT GetFramePointerShape( [in] UINT pointer_shape_buffer_size, [out] void *pointer_shape_buffer, [out] UINT *pointer_shape_buffer_size_required, [out] DXGI_OUTDUPL_POINTER_SHAPE_INFO *pointer_shape_info ); HRESULT MapDesktopSurface( [out] DXGI_MAPPED_RECT *locked_rect ); HRESULT UnMapDesktopSurface(); HRESULT ReleaseFrame(); } [ object, uuid(aba496dd-b617-4cb8-a866-bc44d7eb1fa2), local, pointer_default(unique) ] interface IDXGISurface2 : IDXGISurface1 { HRESULT GetResource( [in] REFIID iid, [out] void **parent_resource, [out] UINT *subresource_idx ); } [ object, uuid(30961379-4609-4a41-998e-54fe567ee0c1), local, pointer_default(unique) ] interface IDXGIResource1 : IDXGIResource { HRESULT CreateSubresourceSurface( UINT index, [out] IDXGISurface2 **surface ); HRESULT CreateSharedHandle( [in] const SECURITY_ATTRIBUTES *attributes, [in] DWORD access, [in] const WCHAR *name, [out] HANDLE *handle ); } [ object, uuid(ea9dbf1a-c88e-4486-854a-98aa0138f30c), local, pointer_default(unique) ] interface IDXGIDisplayControl : IUnknown { BOOL IsStereoEnabled(); void SetStereoEnabled(BOOL enabled); } [ object, uuid(05008617-fbfd-4051-a790-144884b4f6a9), local, pointer_default(unique) ] interface IDXGIDevice2 : IDXGIDevice1 { HRESULT OfferResources( [in] UINT NumResources, [in, size_is(NumResources)] IDXGIResource *const *ppResources, [in] DXGI_OFFER_RESOURCE_PRIORITY Priority); HRESULT ReclaimResources( [in] UINT NumResources, [in, size_is(NumResources)] IDXGIResource *const *ppResources, [out, size_is(NumResources)] BOOL *pDiscarded); HRESULT EnqueueSetEvent( [in] HANDLE hEvent); } typedef enum DXGI_SCALING { DXGI_SCALING_STRETCH = 0, DXGI_SCALING_NONE = 1 } DXGI_SCALING; typedef struct DXGI_SWAP_CHAIN_DESC1 { UINT Width; UINT Height; DXGI_FORMAT Format; BOOL Stereo; DXGI_SAMPLE_DESC SampleDesc; DXGI_USAGE BufferUsage; UINT BufferCount; DXGI_SCALING Scaling; DXGI_SWAP_EFFECT SwapEffect; DXGI_ALPHA_MODE AlphaMode; UINT Flags; } DXGI_SWAP_CHAIN_DESC1; typedef struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC { DXGI_RATIONAL RefreshRate; DXGI_MODE_SCANLINE_ORDER ScanlineOrdering; DXGI_MODE_SCALING Scaling; BOOL Windowed; } DXGI_SWAP_CHAIN_FULLSCREEN_DESC; typedef struct DXGI_PRESENT_PARAMETERS { UINT DirtyRectsCount; RECT *pDirtyRects; RECT *pScrollRect; POINT *pScrollOffset; } DXGI_PRESENT_PARAMETERS; [ object, uuid(790a45f7-0d42-4876-983a-0a55cfe6f4aa), local, pointer_default(unique) ] interface IDXGISwapChain1 : IDXGISwapChain { HRESULT GetDesc1( [out] DXGI_SWAP_CHAIN_DESC1 *pDesc); HRESULT GetFullscreenDesc( [out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc); HRESULT GetHwnd( [out] HWND *pHwnd); HRESULT GetCoreWindow( [in] REFIID refiid, [out] void **ppUnk); HRESULT Present1( [in] UINT SyncInterval, [in] UINT PresentFlags, [in] const DXGI_PRESENT_PARAMETERS *pPresentParameters); BOOL IsTemporaryMonoSupported(); HRESULT GetRestrictToOutput( [out] IDXGIOutput **ppRestrictToOutput); HRESULT SetBackgroundColor( [in] const DXGI_RGBA *pColor); HRESULT GetBackgroundColor( [out] DXGI_RGBA *pColor); HRESULT SetRotation( [in] DXGI_MODE_ROTATION Rotation); HRESULT GetRotation( [out] DXGI_MODE_ROTATION *pRotation); } [ object, uuid(50c83a1c-e072-4c48-87b0-3630fa36a6d0), local, pointer_default(unique) ] interface IDXGIFactory2 : IDXGIFactory1 { BOOL IsWindowedStereoEnabled(); HRESULT CreateSwapChainForHwnd( [in] IUnknown *pDevice, [in] HWND hWnd, [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, [in] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc, [in] IDXGIOutput *pRestrictToOutput, [out] IDXGISwapChain1 **ppSwapChain); HRESULT CreateSwapChainForCoreWindow( [in] IUnknown *pDevice, [in] IUnknown *pWindow, [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, [in] IDXGIOutput *pRestrictToOutput, [out] IDXGISwapChain1 **ppSwapChain); HRESULT GetSharedResourceAdapterLuid( [in] HANDLE hResource, [out] LUID *pLuid); HRESULT RegisterOcclusionStatusWindow( [in] HWND WindowHandle, [in] UINT wMsg, [out] DWORD *pdwCookie); HRESULT RegisterStereoStatusEvent( [in] HANDLE hEvent, [out] DWORD *pdwCookie); void UnregisterStereoStatus( [in] DWORD dwCookie); HRESULT RegisterStereoStatusWindow( [in] HWND WindowHandle, [in] UINT wMsg, [out] DWORD *pdwCookie); HRESULT RegisterOcclusionStatusEvent( [in] HANDLE hEvent, [out] DWORD *pdwCookie); void UnregisterOcclusionStatus( [in] DWORD dwCookie); HRESULT CreateSwapChainForComposition( [in] IUnknown *pDevice, [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, [in] IDXGIOutput *pRestrictToOutput, [out] IDXGISwapChain1 **ppSwapChain); } typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY { DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY, DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY, DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY, DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY, DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY } DXGI_GRAPHICS_PREEMPTION_GRANULARITY; typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY { DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY, DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY, DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY, DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY, DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY } DXGI_COMPUTE_PREEMPTION_GRANULARITY; typedef struct DXGI_ADAPTER_DESC2 { WCHAR Description[128]; UINT VendorId; UINT DeviceId; UINT SubSysId; UINT Revision; SIZE_T DedicatedVideoMemory; SIZE_T DedicatedSystemMemory; SIZE_T SharedSystemMemory; LUID AdapterLuid; UINT Flags; DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity; DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity; } DXGI_ADAPTER_DESC2; [ object, uuid(0aa1ae0a-fa0e-4b84-8644-e05ff8e5acb5), local, pointer_default(unique) ] interface IDXGIAdapter2 : IDXGIAdapter1 { HRESULT GetDesc2([out] DXGI_ADAPTER_DESC2 *pDesc); } [ object, uuid(00cddea8-939b-4b83-a340-a685226666cc), local, pointer_default(unique) ] interface IDXGIOutput1 : IDXGIOutput { HRESULT GetDisplayModeList1( [in] DXGI_FORMAT enum_format, [in] UINT flags, [in, out] UINT *num_modes, [out] DXGI_MODE_DESC1 *desc ); HRESULT FindClosestMatchingMode1( [in] const DXGI_MODE_DESC1 *mode_to_match, [out] DXGI_MODE_DESC1 *closest_match, [in] IUnknown *concerned_device ); HRESULT GetDisplaySurfaceData1( [in] IDXGIResource *destination ); HRESULT DuplicateOutput( [in] IUnknown *device, [out] IDXGIOutputDuplication **output_duplication ); } ================================================ FILE: wine/windows/dxgi1_3.idl ================================================ /* * Copyright 2017 Ihsan Akmal * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dxgi1_2.idl"; typedef struct DXGI_MATRIX_3X2_F { float _11; float _12; float _21; float _22; float _31; float _32; } DXGI_MATRIX_3X2_F; typedef struct DXGI_DECODE_SWAP_CHAIN_DESC { UINT Flags; } DXGI_DECODE_SWAP_CHAIN_DESC; typedef enum DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS { DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE = 0x1, DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 = 0x2, DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC = 0x4, } DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS; typedef enum DXGI_FRAME_PRESENTATION_MODE { DXGI_FRAME_PRESENTATION_MODE_COMPOSED = 0, DXGI_FRAME_PRESENTATION_MODE_OVERLAY = 1, DXGI_FRAME_PRESENTATION_MODE_NONE = 2, DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE = 3, } DXGI_FRAME_PRESENTATION_MODE; typedef struct DXGI_FRAME_STATISTICS_MEDIA { UINT PresentCount; UINT PresentRefreshCount; UINT SyncRefreshCount; LARGE_INTEGER SyncQPCTime; LARGE_INTEGER SyncGPUTime; DXGI_FRAME_PRESENTATION_MODE CompositionMode; UINT ApprovedPresentDuration; } DXGI_FRAME_STATISTICS_MEDIA; typedef enum DXGI_OVERLAY_SUPPORT_FLAG { DXGI_OVERLAY_SUPPORT_FLAG_DIRECT = 0x1, DXGI_OVERLAY_SUPPORT_FLAG_SCALING = 0x2, } DXGI_OVERLAY_SUPPORT_FLAG; [ object, uuid(6007896c-3244-4afd-bf18-a6d3beda5023), local, pointer_default(unique) ] interface IDXGIDevice3 : IDXGIDevice2 { void Trim(); } [ object, uuid(a8be2ac4-199f-4946-b331-79599fb98de7), local, pointer_default(unique) ] interface IDXGISwapChain2 : IDXGISwapChain1 { HRESULT SetSourceSize(UINT width, UINT height); HRESULT GetSourceSize( [out] UINT *width, [out] UINT *height ); HRESULT SetMaximumFrameLatency(UINT max_latency); HRESULT GetMaximumFrameLatency( [out] UINT *max_latency ); HANDLE GetFrameLatencyWaitableObject(); HRESULT SetMatrixTransform(const DXGI_MATRIX_3X2_F *matrix); HRESULT GetMatrixTransform( [out] DXGI_MATRIX_3X2_F *matrix ); } [ object, uuid(595e39d1-2724-4663-99b1-da969de28364), local, pointer_default(unique) ] interface IDXGIOutput2 : IDXGIOutput1 { BOOL SupportsOverlays(); } [ object, uuid(25483823-cd46-4c7d-86ca-47aa95b837bd), local, pointer_default(unique) ] interface IDXGIFactory3 : IDXGIFactory2 { UINT GetCreationFlags(); } [ object, uuid(2633066b-4514-4c7a-8fd8-12ea98059d18), local, pointer_default(unique) ] interface IDXGIDecodeSwapChain : IUnknown { HRESULT PresentBuffer(UINT buffer_to_present, UINT sync_interval, UINT flags); HRESULT SetSourceRect(const RECT *rect); HRESULT SetTargetRect(const RECT *rect); HRESULT SetDestSize(UINT width, UINT height); HRESULT GetSourceRect( [out] RECT *rect ); HRESULT GetTargetRect( [out] RECT *rect ); HRESULT GetDestSize( [out] UINT *width, [out] UINT *height ); HRESULT SetColorSpace(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS colorspace); DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS GetColorSpace(); } [ object, uuid(41e7d1f2-a591-4f7b-a2e5-fa9c843e1c12), local, pointer_default(unique) ] interface IDXGIFactoryMedia : IUnknown { HRESULT CreateSwapChainForCompositionSurfaceHandle( [in] IUnknown *device, [in] HANDLE surface, [in] const DXGI_SWAP_CHAIN_DESC1 *desc, [in] IDXGIOutput *restrict_to_output, [out] IDXGISwapChain1 **swapchain ); HRESULT CreateDecodeSwapChainForCompositionSurfaceHandle( [in] IUnknown *device, [in] HANDLE surface, [in] DXGI_DECODE_SWAP_CHAIN_DESC *desc, [in] IDXGIResource *yuv_decode_buffers, [in] IDXGIOutput *restrict_to_output, [out] IDXGIDecodeSwapChain **swapchain ); } [ object, uuid(dd95b90b-f05f-4f6a-bd65-25bfb264bd84), local, pointer_default(unique) ] interface IDXGISwapChainMedia : IUnknown { HRESULT GetFrameStatisticsMedia( [out] DXGI_FRAME_STATISTICS_MEDIA *stats ); HRESULT SetPresentDuration(UINT duration); HRESULT CheckPresentDurationSupport( UINT desired_present_duration, [out] UINT *closest_smaller_present_duration, [out] UINT *closest_larger_present_duration ); } [ object, uuid(8a6bb301-7e7e-41F4-a8e0-5b32f7f99b18), local, pointer_default(unique) ] interface IDXGIOutput3 : IDXGIOutput2 { HRESULT CheckOverlaySupport( [in] DXGI_FORMAT enum_format, [out] IUnknown *concerned_device, [out] UINT *flags ); } const UINT DXGI_CREATE_FACTORY_DEBUG = 0x1; [local] HRESULT __stdcall CreateDXGIFactory2(UINT flags, REFIID iid, void **factory); [local] HRESULT __stdcall DXGIGetDebugInterface1(UINT flags, REFIID iid, void **debug); ================================================ FILE: wine/windows/dxgi1_4.idl ================================================ /* * Copyright 2017 Ihsan Akmal * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dxgi1_3.idl"; typedef enum DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG { DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT = 0x1, DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT = 0x2, } DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG; typedef enum DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG { DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG_PRESENT = 0x1, } DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG; typedef enum DXGI_MEMORY_SEGMENT_GROUP { DXGI_MEMORY_SEGMENT_GROUP_LOCAL = 0x0, DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL = 0x1, } DXGI_MEMORY_SEGMENT_GROUP; typedef struct DXGI_QUERY_VIDEO_MEMORY_INFO { UINT64 Budget; UINT64 CurrentUsage; UINT64 AvailableForReservation; UINT64 CurrentReservation; } DXGI_QUERY_VIDEO_MEMORY_INFO; [ object, uuid(94d99bdb-f1f8-4ab0-b236-7da0170edab1), local, pointer_default(unique) ] interface IDXGISwapChain3 : IDXGISwapChain2 { UINT GetCurrentBackBufferIndex(); HRESULT CheckColorSpaceSupport( [in] DXGI_COLOR_SPACE_TYPE colour_space, [out] UINT *colour_space_support ); HRESULT SetColorSpace1( [in] DXGI_COLOR_SPACE_TYPE colour_space ); HRESULT ResizeBuffers1( [in] UINT buffer_count, [in] UINT width, [in] UINT height, [in] DXGI_FORMAT format, [in] UINT flags, [in] const UINT *node_mask, [in] IUnknown *const *present_queue ); } [ object, uuid(dc7dca35-2196-414d-9F53-617884032a60), local, pointer_default(unique) ] interface IDXGIOutput4 : IDXGIOutput3 { HRESULT CheckOverlayColorSpaceSupport( [in] DXGI_FORMAT format, [in] DXGI_COLOR_SPACE_TYPE colour_space, [in] IUnknown *device, [out] UINT *flags ); } [ object, uuid(1bc6ea02-ef36-464f-bf0c-21ca39e5168a), local, pointer_default(unique) ] interface IDXGIFactory4 : IDXGIFactory3 { HRESULT EnumAdapterByLuid( [in] LUID luid, [in] REFIID iid, [out] void **adapter ); HRESULT EnumWarpAdapter( [in] REFIID iid, [out] void **adapter ); } [ object, uuid(645967a4-1392-4310-a798-8053ce3e93fd), local, pointer_default(unique) ] interface IDXGIAdapter3 : IDXGIAdapter2 { HRESULT RegisterHardwareContentProtectionTeardownStatusEvent( [in] HANDLE event, [out] DWORD *cookie ); void UnregisterHardwareContentProtectionTeardownStatus( [in] DWORD cookie ); HRESULT QueryVideoMemoryInfo( [in] UINT node_index, [in] DXGI_MEMORY_SEGMENT_GROUP segment_group, [out] DXGI_QUERY_VIDEO_MEMORY_INFO *memory_info ); HRESULT SetVideoMemoryReservation( [in] UINT node_index, [in] DXGI_MEMORY_SEGMENT_GROUP segment_group, [in] UINT64 reservation ); HRESULT RegisterVideoMemoryBudgetChangeNotificationEvent( [in] HANDLE event, [out] DWORD *cookie ); void UnregisterVideoMemoryBudgetChangeNotification( [in] DWORD cookie ); } ================================================ FILE: wine/windows/dxgi1_5.idl ================================================ /* * Copyright 2017 Ihsan Akmal * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dxgi1_4.idl"; typedef enum DXGI_OUTDUPL_FLAG { DXGI_OUTDUPL_COMPOSITED_UI_CAPTURE_ONLY = 0x1, } DXGI_OUTDUPL_FLAG; typedef enum DXGI_HDR_METADATA_TYPE { DXGI_HDR_METADATA_TYPE_NONE = 0x0, DXGI_HDR_METADATA_TYPE_HDR10 = 0x1, } DXGI_HDR_METADATA_TYPE; typedef enum _DXGI_OFFER_RESOURCE_FLAGS { DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT = 0x1, } DXGI_OFFER_RESOURCE_FLAGS; typedef enum _DXGI_RECLAIM_RESOURCE_RESULTS { DXGI_RECLAIM_RESOURCE_RESULT_OK = 0x0, DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED = 0x1, DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED = 0x2, } DXGI_RECLAIM_RESOURCE_RESULTS; typedef enum DXGI_FEATURE { DXGI_FEATURE_PRESENT_ALLOW_TEARING = 0x0, } DXGI_FEATURE; typedef struct DXGI_HDR_METADATA_HDR10 { UINT16 RedPrimary[2]; UINT16 GreenPrimary[2]; UINT16 BluePrimary[2]; UINT16 WhitePoint[2]; UINT MaxMasteringLuminance; UINT MinMasteringLuminance; UINT16 MaxContentLightLevel; UINT16 MaxFrameAverageLightLevel; } DXGI_HDR_METADATA_HDR10; [ object, uuid(80a07424-ab52-42eb-833c-0c42fd282d98), local, pointer_default(unique) ] interface IDXGIOutput5 : IDXGIOutput4 { HRESULT DuplicateOutput1( [in] IUnknown *device, [in] UINT flags, [in] UINT format_count, [in] const DXGI_FORMAT *formats, [out] IDXGIOutputDuplication **duplication ); } [ object, uuid(3d585d5a-bd4a-489e-b1f4-3dbcb6452ffb), local, pointer_default(unique) ] interface IDXGISwapChain4 : IDXGISwapChain3 { HRESULT SetHDRMetaData( [in] DXGI_HDR_METADATA_TYPE type, [in] UINT size, [in] void *metadata ); } [ object, uuid(95b4f95f-d8da-4ca4-9ee6-3b76d5968a10), local, pointer_default(unique) ] interface IDXGIDevice4 : IDXGIDevice3 { HRESULT OfferResources1( [in] UINT resource_count, [in] IDXGIResource *const *resources, [in] DXGI_OFFER_RESOURCE_PRIORITY priority, [in] UINT flags ); HRESULT ReclaimResources1( [in] UINT resource_count, [in] IDXGIResource *const *resources, [out] DXGI_RECLAIM_RESOURCE_RESULTS *results ); } [ object, uuid(7632e1f5-ee65-4dca-87fd-84cd75f8838d), local, pointer_default(unique) ] interface IDXGIFactory5 : IDXGIFactory4 { HRESULT CheckFeatureSupport( DXGI_FEATURE feature, [in, out] void *support_data, UINT support_data_size ); } ================================================ FILE: wine/windows/dxgi1_6.idl ================================================ /* * Copyright 2017 Ihsan Akmal * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dxgi1_5.idl"; typedef enum DXGI_ADAPTER_FLAG3 { DXGI_ADAPTER_FLAG3_NONE = 0x0, DXGI_ADAPTER_FLAG3_REMOTE = 0x1, DXGI_ADAPTER_FLAG3_SOFTWARE = 0x2, DXGI_ADAPTER_FLAG3_ACG_COMPATIBLE = 0x4, DXGI_ADAPTER_FLAG3_FORCE_DWORD = 0xffffffff, } DXGI_ADAPTER_FLAG3; typedef enum DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS { DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN = 0x1, DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED = 0x2, DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED = 0x4, } DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS; typedef struct DXGI_ADAPTER_DESC3 { WCHAR Description[128]; UINT VendorId; UINT DeviceId; UINT SubSysId; UINT Revision; SIZE_T DedicatedVideoMemory; SIZE_T DedicatedSystemMemory; SIZE_T SharedSystemMemory; LUID AdapterLuid; DXGI_ADAPTER_FLAG3 Flags; DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity; DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity; } DXGI_ADAPTER_DESC3; typedef struct DXGI_OUTPUT_DESC1 { WCHAR DeviceName[32]; RECT DesktopCoordinates; BOOL AttachedToDesktop; DXGI_MODE_ROTATION Rotation; HMONITOR Monitor; UINT BitsPerColor; DXGI_COLOR_SPACE_TYPE ColorSpace; FLOAT RedPrimary[2]; FLOAT GreenPrimary[2]; FLOAT BluePrimary[2]; FLOAT WhitePoint[2]; FLOAT MinLuminance; FLOAT MaxLuminance; FLOAT MaxFullFrameLuminance; } DXGI_OUTPUT_DESC1; [ object, uuid(3c8d99d1-4fbf-4181-a82c-af66bf7bd24e), local, pointer_default(unique) ] interface IDXGIAdapter4 : IDXGIAdapter3 { HRESULT GetDesc3( [out] DXGI_ADAPTER_DESC3 *desc ); } [ object, uuid(068346e8-aaec-4b84-add7-137f513f77a1), local, pointer_default(unique) ] interface IDXGIOutput6 : IDXGIOutput5 { HRESULT GetDesc1( [out] DXGI_OUTPUT_DESC1 *desc ); HRESULT CheckHardwareCompositionSupport( [out] UINT *flags ); } ================================================ FILE: wine/windows/dxgicommon.idl ================================================ /* * Copyright 2017 Ihsan Akmal * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ cpp_quote("#if 0") typedef unsigned int UINT; cpp_quote("#endif") const UINT DXGI_STANDARD_MULTISAMPLE_QUALITY_PATTERN = 0xffffffff; const UINT DXGI_CENTER_MULTISAMPLE_QUALITY_PATTERN = 0xfffffffe; typedef enum DXGI_COLOR_SPACE_TYPE { DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 = 0x00, DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 = 0x01, DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709 = 0x02, DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020 = 0x03, DXGI_COLOR_SPACE_RESERVED = 0x04, DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 = 0x05, DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 = 0x06, DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601 = 0x07, DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 = 0x08, DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709 = 0x09, DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020 = 0x0a, DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 = 0x0b, DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 = 0x0c, DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_LEFT_P2020 = 0x0d, DXGI_COLOR_SPACE_RGB_STUDIO_G2084_NONE_P2020 = 0x0e, DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_TOPLEFT_P2020 = 0x0f, DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_TOPLEFT_P2020 = 0x10, DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P2020 = 0x11, DXGI_COLOR_SPACE_YCBCR_STUDIO_GHLG_TOPLEFT_P2020 = 0x12, DXGI_COLOR_SPACE_YCBCR_FULL_GHLG_TOPLEFT_P2020 = 0x13, DXGI_COLOR_SPACE_CUSTOM = 0xffffffff, } DXGI_COLOR_SPACE_TYPE; typedef struct DXGI_SAMPLE_DESC { UINT Count; UINT Quality; } DXGI_SAMPLE_DESC; typedef struct DXGI_RATIONAL { UINT Numerator; UINT Denominator; } DXGI_RATIONAL; ================================================ FILE: wine/windows/dxgiformat.idl ================================================ /* * Copyright 2016 Józef Kucia for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ const unsigned int DXGI_FORMAT_DEFINED = 1; typedef enum DXGI_FORMAT { DXGI_FORMAT_UNKNOWN = 0x00, DXGI_FORMAT_R32G32B32A32_TYPELESS = 0x01, DXGI_FORMAT_R32G32B32A32_FLOAT = 0x02, DXGI_FORMAT_R32G32B32A32_UINT = 0x03, DXGI_FORMAT_R32G32B32A32_SINT = 0x04, DXGI_FORMAT_R32G32B32_TYPELESS = 0x05, DXGI_FORMAT_R32G32B32_FLOAT = 0x06, DXGI_FORMAT_R32G32B32_UINT = 0x07, DXGI_FORMAT_R32G32B32_SINT = 0x08, DXGI_FORMAT_R16G16B16A16_TYPELESS = 0x09, DXGI_FORMAT_R16G16B16A16_FLOAT = 0x0a, DXGI_FORMAT_R16G16B16A16_UNORM = 0x0b, DXGI_FORMAT_R16G16B16A16_UINT = 0x0c, DXGI_FORMAT_R16G16B16A16_SNORM = 0x0d, DXGI_FORMAT_R16G16B16A16_SINT = 0x0e, DXGI_FORMAT_R32G32_TYPELESS = 0x0f, DXGI_FORMAT_R32G32_FLOAT = 0x10, DXGI_FORMAT_R32G32_UINT = 0x11, DXGI_FORMAT_R32G32_SINT = 0x12, DXGI_FORMAT_R32G8X24_TYPELESS = 0x13, DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 0x14, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 0x15, DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 0x16, DXGI_FORMAT_R10G10B10A2_TYPELESS = 0x17, DXGI_FORMAT_R10G10B10A2_UNORM = 0x18, DXGI_FORMAT_R10G10B10A2_UINT = 0x19, DXGI_FORMAT_R11G11B10_FLOAT = 0x1a, DXGI_FORMAT_R8G8B8A8_TYPELESS = 0x1b, DXGI_FORMAT_R8G8B8A8_UNORM = 0x1c, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 0x1d, DXGI_FORMAT_R8G8B8A8_UINT = 0x1e, DXGI_FORMAT_R8G8B8A8_SNORM = 0x1f, DXGI_FORMAT_R8G8B8A8_SINT = 0x20, DXGI_FORMAT_R16G16_TYPELESS = 0x21, DXGI_FORMAT_R16G16_FLOAT = 0x22, DXGI_FORMAT_R16G16_UNORM = 0x23, DXGI_FORMAT_R16G16_UINT = 0x24, DXGI_FORMAT_R16G16_SNORM = 0x25, DXGI_FORMAT_R16G16_SINT = 0x26, DXGI_FORMAT_R32_TYPELESS = 0x27, DXGI_FORMAT_D32_FLOAT = 0x28, DXGI_FORMAT_R32_FLOAT = 0x29, DXGI_FORMAT_R32_UINT = 0x2a, DXGI_FORMAT_R32_SINT = 0x2b, DXGI_FORMAT_R24G8_TYPELESS = 0x2c, DXGI_FORMAT_D24_UNORM_S8_UINT = 0x2d, DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 0x2e, DXGI_FORMAT_X24_TYPELESS_G8_UINT = 0x2f, DXGI_FORMAT_R8G8_TYPELESS = 0x30, DXGI_FORMAT_R8G8_UNORM = 0x31, DXGI_FORMAT_R8G8_UINT = 0x32, DXGI_FORMAT_R8G8_SNORM = 0x33, DXGI_FORMAT_R8G8_SINT = 0x34, DXGI_FORMAT_R16_TYPELESS = 0x35, DXGI_FORMAT_R16_FLOAT = 0x36, DXGI_FORMAT_D16_UNORM = 0x37, DXGI_FORMAT_R16_UNORM = 0x38, DXGI_FORMAT_R16_UINT = 0x39, DXGI_FORMAT_R16_SNORM = 0x3a, DXGI_FORMAT_R16_SINT = 0x3b, DXGI_FORMAT_R8_TYPELESS = 0x3c, DXGI_FORMAT_R8_UNORM = 0x3d, DXGI_FORMAT_R8_UINT = 0x3e, DXGI_FORMAT_R8_SNORM = 0x3f, DXGI_FORMAT_R8_SINT = 0x40, DXGI_FORMAT_A8_UNORM = 0x41, DXGI_FORMAT_R1_UNORM = 0x42, DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 0x43, DXGI_FORMAT_R8G8_B8G8_UNORM = 0x44, DXGI_FORMAT_G8R8_G8B8_UNORM = 0x45, DXGI_FORMAT_BC1_TYPELESS = 0x46, DXGI_FORMAT_BC1_UNORM = 0x47, DXGI_FORMAT_BC1_UNORM_SRGB = 0x48, DXGI_FORMAT_BC2_TYPELESS = 0x49, DXGI_FORMAT_BC2_UNORM = 0x4a, DXGI_FORMAT_BC2_UNORM_SRGB = 0x4b, DXGI_FORMAT_BC3_TYPELESS = 0x4c, DXGI_FORMAT_BC3_UNORM = 0x4d, DXGI_FORMAT_BC3_UNORM_SRGB = 0x4e, DXGI_FORMAT_BC4_TYPELESS = 0x4f, DXGI_FORMAT_BC4_UNORM = 0x50, DXGI_FORMAT_BC4_SNORM = 0x51, DXGI_FORMAT_BC5_TYPELESS = 0x52, DXGI_FORMAT_BC5_UNORM = 0x53, DXGI_FORMAT_BC5_SNORM = 0x54, DXGI_FORMAT_B5G6R5_UNORM = 0x55, DXGI_FORMAT_B5G5R5A1_UNORM = 0x56, DXGI_FORMAT_B8G8R8A8_UNORM = 0x57, DXGI_FORMAT_B8G8R8X8_UNORM = 0x58, DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 0x59, DXGI_FORMAT_B8G8R8A8_TYPELESS = 0x5a, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 0x5b, DXGI_FORMAT_B8G8R8X8_TYPELESS = 0x5c, DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 0x5d, DXGI_FORMAT_BC6H_TYPELESS = 0x5e, DXGI_FORMAT_BC6H_UF16 = 0x5f, DXGI_FORMAT_BC6H_SF16 = 0x60, DXGI_FORMAT_BC7_TYPELESS = 0x61, DXGI_FORMAT_BC7_UNORM = 0x62, DXGI_FORMAT_BC7_UNORM_SRGB = 0x63, DXGI_FORMAT_AYUV = 0x64, DXGI_FORMAT_Y410 = 0x65, DXGI_FORMAT_Y416 = 0x66, DXGI_FORMAT_NV12 = 0x67, DXGI_FORMAT_P010 = 0x68, DXGI_FORMAT_P016 = 0x69, DXGI_FORMAT_420_OPAQUE = 0x6a, DXGI_FORMAT_YUY2 = 0x6b, DXGI_FORMAT_Y210 = 0x6c, DXGI_FORMAT_Y216 = 0x6d, DXGI_FORMAT_NV11 = 0x6e, DXGI_FORMAT_AI44 = 0x6f, DXGI_FORMAT_IA44 = 0x70, DXGI_FORMAT_P8 = 0x71, DXGI_FORMAT_A8P8 = 0x72, DXGI_FORMAT_B4G4R4A4_UNORM = 0x73, DXGI_FORMAT_P208 = 0x82, DXGI_FORMAT_V208 = 0x83, DXGI_FORMAT_V408 = 0x84, DXGI_FORMAT_FORCE_UINT = 0xffffffff, } DXGI_FORMAT; ================================================ FILE: wine/windows/dxgitype.idl ================================================ /* * Copyright 2007 Andras Kovacs * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dxgicommon.idl"; import "dxgiformat.idl"; cpp_quote("#if 0") typedef unsigned int UINT; typedef long BOOL; cpp_quote("#endif") typedef enum DXGI_MODE_ROTATION { DXGI_MODE_ROTATION_UNSPECIFIED = 0x0, DXGI_MODE_ROTATION_IDENTITY = 0x1, DXGI_MODE_ROTATION_ROTATE90 = 0x2, DXGI_MODE_ROTATION_ROTATE180 = 0x3, DXGI_MODE_ROTATION_ROTATE270 = 0x4, } DXGI_MODE_ROTATION; typedef enum DXGI_MODE_SCANLINE_ORDER { DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED = 0x0, DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE = 0x1, DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST = 0x2, DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST = 0x3, } DXGI_MODE_SCANLINE_ORDER; typedef enum DXGI_MODE_SCALING { DXGI_MODE_SCALING_UNSPECIFIED = 0x0, DXGI_MODE_SCALING_CENTERED = 0x1, DXGI_MODE_SCALING_STRETCHED = 0x2, } DXGI_MODE_SCALING; cpp_quote("#ifndef D3DCOLORVALUE_DEFINED") cpp_quote("#define D3DCOLORVALUE_DEFINED") typedef struct _D3DCOLORVALUE { float r; float g; float b; float a; } D3DCOLORVALUE; cpp_quote("#endif") typedef D3DCOLORVALUE DXGI_RGBA; typedef struct DXGI_MODE_DESC { UINT Width; UINT Height; DXGI_RATIONAL RefreshRate; DXGI_FORMAT Format; DXGI_MODE_SCANLINE_ORDER ScanlineOrdering; DXGI_MODE_SCALING Scaling; } DXGI_MODE_DESC; typedef struct DXGI_GAMMA_CONTROL_CAPABILITIES { BOOL ScaleAndOffsetSupported; float MaxConvertedValue; float MinConvertedValue; UINT NumGammaControlPoints; float ControlPointPositions[1025]; } DXGI_GAMMA_CONTROL_CAPABILITIES; typedef struct DXGI_RGB { float Red; float Green; float Blue; } DXGI_RGB; typedef struct DXGI_GAMMA_CONTROL { DXGI_RGB Scale; DXGI_RGB Offset; DXGI_RGB GammaCurve[1025]; } DXGI_GAMMA_CONTROL; ================================================ FILE: wine/windows/dxva2api.idl ================================================ /* * Copyright 2014 Michael Müller for Pipelight * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; cpp_quote("#if 0") typedef DWORD IDirect3DDevice9; typedef DWORD IDirect3DSurface9; typedef DWORD D3DFORMAT; typedef DWORD D3DPOOL; cpp_quote("#endif") /* MPEG2 */ cpp_quote("DEFINE_GUID(DXVA2_ModeMPEG2_MoComp, 0xe6a9f44b, 0x61b0,0x4563, 0x9e,0xa4,0x63,0xd2,0xa3,0xc6,0xfe,0x66);") cpp_quote("#define DXVA2_ModeMPEG2_MOCOMP DXVA2_ModeMPEG2_MoComp") cpp_quote("DEFINE_GUID(DXVA2_ModeMPEG2_IDCT, 0xbf22ad00, 0x03ea,0x4690, 0x80,0x77,0x47,0x33,0x46,0x20,0x9b,0x7e);") cpp_quote("DEFINE_GUID(DXVA2_ModeMPEG2_VLD, 0xee27417f, 0x5e28,0x4e65, 0xbe,0xea,0x1d,0x26,0xb5,0x08,0xad,0xc9);") /* H264 */ cpp_quote("DEFINE_GUID(DXVA2_ModeH264_A, 0x1b81be64, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeH264_MoComp_NoFGT DXVA2_ModeH264_A") cpp_quote("DEFINE_GUID(DXVA2_ModeH264_B, 0x1b81be65, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeH264_MoComp_FGT DXVA2_ModeH264_B") cpp_quote("DEFINE_GUID(DXVA2_ModeH264_C, 0x1b81be66, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeH264_IDCT_NoFGT DXVA2_ModeH264_C") cpp_quote("DEFINE_GUID(DXVA2_ModeH264_D, 0x1b81be67, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeH264_IDCT_FGT DXVA2_ModeH264_D") cpp_quote("DEFINE_GUID(DXVA2_ModeH264_E, 0x1b81be68, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeH264_VLD_NoFGT DXVA2_ModeH264_E") cpp_quote("DEFINE_GUID(DXVA2_ModeH264_F, 0x1b81be69, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeH264_VLD_FGT DXVA2_ModeH264_F") /* WMV8 */ cpp_quote("DEFINE_GUID(DXVA2_ModeWMV8_A, 0x1b81be80, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeWMV8_PostProc DXVA2_ModeWMV8_A") cpp_quote("DEFINE_GUID(DXVA2_ModeWMV8_B, 0x1b81be81, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeWMV8_MoComp DXVA2_ModeWMV8_B") /* WMV9 */ cpp_quote("DEFINE_GUID(DXVA2_ModeWMV9_A, 0x1b81be90, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeWMV9_PostProc DXVA2_ModeWMV9_A") cpp_quote("DEFINE_GUID(DXVA2_ModeWMV9_B, 0x1b81be91, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeWMV9_MoComp DXVA2_ModeWMV9_B") cpp_quote("DEFINE_GUID(DXVA2_ModeWMV9_C, 0x1b81be94, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeWMV9_IDCT DXVA2_ModeWMV9_C") /* VC1 */ cpp_quote("DEFINE_GUID(DXVA2_ModeVC1_A, 0x1b81beA0, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeVC1_PostProc DXVA2_ModeVC1_A") cpp_quote("DEFINE_GUID(DXVA2_ModeVC1_B, 0x1b81beA1, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeVC1_MoComp DXVA2_ModeVC1_B") cpp_quote("DEFINE_GUID(DXVA2_ModeVC1_C, 0x1b81beA2, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeVC1_IDCT DXVA2_ModeVC1_C") cpp_quote("DEFINE_GUID(DXVA2_ModeVC1_D, 0x1b81beA3, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#define DXVA2_ModeVC1_VLD DXVA2_ModeVC1_D") /* Encryption */ cpp_quote("DEFINE_GUID(DXVA_NoEncrypt, 0x1b81bed0, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);") cpp_quote("#ifndef REFERENCE_TIME_DEFINED") cpp_quote("#define REFERENCE_TIME_DEFINED") typedef LONGLONG REFERENCE_TIME; cpp_quote("#endif") enum { DXVA2_PictureParametersBufferType, DXVA2_MacroBlockControlBufferType, DXVA2_ResidualDifferenceBufferType, DXVA2_DeblockingControlBufferType, DXVA2_InverseQuantizationMatrixBufferType, DXVA2_SliceControlBufferType, DXVA2_BitStreamDateBufferType, DXVA2_MotionVectorBuffer, DXVA2_FilmGrainBuffer }; enum { DXVA2_VideoDecoderRenderTarget, DXVA2_VideoProcessorRenderTarget, DXVA2_VideoSoftwareRenderTarget }; typedef struct _DXVA2_ExtendedFormat { union { struct { UINT SampleFormat :8; UINT VideoChromaSubsampling :4; UINT NominalRange :3; UINT VideoTransferMatrix :3; UINT VideoLighting :4; UINT VideoPrimaries :5; UINT VideoTransferFunction :5; }; UINT value; }; } DXVA2_ExtendedFormat; typedef struct _DXVA2_Frequency { UINT Numerator; UINT Denominator; } DXVA2_Frequency; typedef struct _DXVA2_ConfigPictureDecode { GUID guidConfigBitstreamEncryption; GUID guidConfigMBcontrolEncryption; GUID guidConfigResidDiffEncryption; UINT ConfigBitstreamRaw; UINT ConfigMBcontrolRasterOrder; UINT ConfigResidDiffHost; UINT ConfigSpatialResid8; UINT ConfigResid8Subtraction; UINT ConfigSpatialHost8or9Clipping; UINT ConfigSpatialResidInterleaved; UINT ConfigIntraResidUnsigned; UINT ConfigResidDiffAccelerator; UINT ConfigHostInverseScan; UINT ConfigSpecificIDCT; UINT Config4GroupedCoefs; UINT ConfigMinRenderTargetBuffCount; USHORT ConfigDecoderSpecific; } DXVA2_ConfigPictureDecode; typedef struct _DXVA2_VideoDesc { UINT SampleWidth; UINT SampleHeight; DXVA2_ExtendedFormat SampleFormat; D3DFORMAT Format; DXVA2_Frequency InputSampleFreq; DXVA2_Frequency OutputFrameFreq; UINT UABProtectionLevel; UINT Reserved; } DXVA2_VideoDesc; typedef struct _DXVA2_DecodeBufferDesc { DWORD CompressedBufferType; UINT BufferIndex; UINT DataOffset; UINT DataSize; UINT FirstMBaddress; UINT NumMBsInBuffer; UINT Width; UINT Height; UINT Stride; UINT ReservedBits; PVOID pvPVPState; } DXVA2_DecodeBufferDesc; typedef struct _DXVA2_DecodeExtensionData { UINT Function; PVOID pPrivateInputData; UINT PrivateInputDataSize; PVOID pPrivateOutputData; UINT PrivateOutputDataSize; } DXVA2_DecodeExtensionData; typedef struct _DXVA2_DecodeExecuteParams { UINT NumCompBuffers; DXVA2_DecodeBufferDesc* pCompressedBuffers; DXVA2_DecodeExtensionData* pExtensionData; } DXVA2_DecodeExecuteParams; typedef struct _DXVA2_VideoProcessorCaps { UINT DeviceCaps; D3DPOOL InputPool; UINT NumForwardRefSamples; UINT NumBackwardRefSamples; UINT Reserved; UINT DeinterlaceTechnology; UINT ProcAmpControlCaps; UINT VideoProcessorOperations; UINT NoiseFilterTechnology; UINT DetailFilterTechnology; } DXVA2_VideoProcessorCaps; typedef struct _DXVA2_Fixed32 { union { struct { USHORT Fraction; SHORT Value; }; LONG ll; }; } DXVA2_Fixed32; typedef struct _DXVA2_ValueRange { DXVA2_Fixed32 MinValue; DXVA2_Fixed32 MaxValue; DXVA2_Fixed32 DefaultValue; DXVA2_Fixed32 StepSize; } DXVA2_ValueRange; typedef struct _DXVA2_AYUVSample8 { UCHAR Cr; UCHAR Cb; UCHAR Y; UCHAR Alpha; } DXVA2_AYUVSample8; typedef struct _DXVA2_AYUVSample16 { USHORT Cr; USHORT Cb; USHORT Y; USHORT Alpha; } DXVA2_AYUVSample16; typedef struct _DXVA2_ProcAmpValues { DXVA2_Fixed32 Brightness; DXVA2_Fixed32 Contrast; DXVA2_Fixed32 Hue; DXVA2_Fixed32 Saturation; } DXVA2_ProcAmpValues; typedef struct _DXVA2_FilterValues { DXVA2_Fixed32 Level; DXVA2_Fixed32 Threshold; DXVA2_Fixed32 Radius; } DXVA2_FilterValues; typedef struct _DXVA2_VideoProcessBltParams { REFERENCE_TIME TargetFrame; RECT TargetRect; SIZE ConstrictionSize; UINT StreamingFlags; DXVA2_AYUVSample16 BackgroundColor; DXVA2_ExtendedFormat DestFormat; DXVA2_ProcAmpValues ProcAmpValues; DXVA2_Fixed32 Alpha; DXVA2_FilterValues NoiseFilterLuma; DXVA2_FilterValues NoiseFilterChroma; DXVA2_FilterValues DetailFilterLuma; DXVA2_FilterValues DetailFilterChroma; DWORD DestData; } DXVA2_VideoProcessBltParams; typedef struct _DXVA2_VideoSample { REFERENCE_TIME Start; REFERENCE_TIME End; DXVA2_ExtendedFormat SampleFormat; IDirect3DSurface9* SrcSurface; RECT SrcRect; RECT DstRect; DXVA2_AYUVSample8 Pal[16]; DXVA2_Fixed32 PlanarAlpha; DWORD SampleData; } DXVA2_VideoSample; typedef enum { DXVA2_SurfaceType_DecoderRenderTarget, DXVA2_SurfaceType_ProcessorRenderTarget, DXVA2_SurfaceType_D3DRenderTargetTexture, } DXVA2_SurfaceType; interface IDirectXVideoDecoder; interface IDirectXVideoProcessor; /***************************************************************************** * IDirect3DDeviceManager9 interface */ [ object, uuid(a0cade0f-06d5-4cf4-a1c7-f3cdd725aa75), local ] interface IDirect3DDeviceManager9 : IUnknown { HRESULT ResetDevice( [in] IDirect3DDevice9* pDevice, [in] UINT resetToken); HRESULT OpenDeviceHandle( [out] HANDLE* phDevice); HRESULT CloseDeviceHandle( [in] HANDLE hDevice); HRESULT TestDevice( [in] HANDLE hDevice); HRESULT LockDevice( [in] HANDLE hDevice, [out] IDirect3DDevice9** ppDevice, [in] BOOL fBlock); HRESULT UnlockDevice( [in] HANDLE hDevice, [in] BOOL fSaveState); HRESULT GetVideoService( [in] HANDLE hDevice, [in] REFIID riid, [out] void** ppService); } /***************************************************************************** * IDirectXVideoAccelerationService interface */ [ object, uuid(fc51a550-d5e7-11d9-af55-00054e43ff02), local ] interface IDirectXVideoAccelerationService : IUnknown { HRESULT CreateSurface( [in] UINT width, [in] UINT height, [in] UINT backBuffers, [in] D3DFORMAT format, [in] D3DPOOL pool, [in] DWORD usage, [in] DWORD dxvaType, [out] IDirect3DSurface9 **ppSurface, [in, out] HANDLE *pSharedHandle); } /***************************************************************************** * IDirectXVideoDecoderService interface */ [ object, uuid(fc51a551-d5e7-11d9-af55-00054e43ff02), local ] interface IDirectXVideoDecoderService : IDirectXVideoAccelerationService { HRESULT GetDecoderDeviceGuids( [out] UINT *count, [out] GUID **pGuids); HRESULT GetDecoderRenderTargets( [in] REFGUID guid, [out] UINT *pCount, [out] D3DFORMAT **pFormats); HRESULT GetDecoderConfigurations( [in] REFGUID guid, [in] const DXVA2_VideoDesc *pVideoDesc, [in] IUnknown *pReserved, [out] UINT *pCount, [out] DXVA2_ConfigPictureDecode **ppConfigs); HRESULT CreateVideoDecoder( [in] REFGUID guid, [in] const DXVA2_VideoDesc *pVideoDesc, [in] DXVA2_ConfigPictureDecode *pConfig, [in] IDirect3DSurface9 **ppDecoderRenderTargets, [in] UINT NumSurfaces, [out] IDirectXVideoDecoder **ppDecode); } /***************************************************************************** * IDirectXVideoDecoder interface */ [ object, uuid(f2b0810a-fd00-43c9-918c-df94e2d8ef7d), local ] interface IDirectXVideoDecoder : IUnknown { HRESULT GetVideoDecoderService( [out] IDirectXVideoDecoderService** ppService); HRESULT GetCreationParameters( [out] GUID* pDeviceGuid, [out] DXVA2_VideoDesc* pVideoDesc, [out] DXVA2_ConfigPictureDecode* pConfig, [out] IDirect3DSurface9*** pDecoderRenderTargets, [out] UINT* pNumSurfaces); HRESULT GetBuffer( [in] UINT BufferType, [out] void** ppBuffer, [out] UINT* pBufferSize); HRESULT ReleaseBuffer( [in] UINT BufferType); HRESULT BeginFrame( [in] IDirect3DSurface9* pRenderTarget, [in] void* pvPVPData); HRESULT EndFrame( [out] HANDLE* pHandleComplete); HRESULT Execute( [in] const DXVA2_DecodeExecuteParams* pExecuteParams); } /***************************************************************************** * IDirectXVideoProcessorService interface */ [ object, uuid(fc51a552-d5e7-11d9-af55-00054e43ff02), local ] interface IDirectXVideoProcessorService : IDirectXVideoAccelerationService { HRESULT RegisterVideoProcessorSoftwareDevice( [in] void* pCallbacks); HRESULT GetVideoProcessorDeviceGuids( [in] const DXVA2_VideoDesc* pVideoDesc, [out] UINT* pCount, [out] GUID** pGuids); HRESULT GetVideoProcessorRenderTargets( [in] REFGUID VideoProcDeviceGuid, [in] const DXVA2_VideoDesc* pVideoDesc, [out] UINT* pCount, [out] D3DFORMAT** pFormats); HRESULT GetVideoProcessorSubStreamFormats( [in] REFGUID VideoProcDeviceGuid, [in] const DXVA2_VideoDesc* pVideoDesc, [in] D3DFORMAT RenderTargetFormat, [out] UINT* pCount, [out] D3DFORMAT** pFormats); HRESULT GetVideoProcessorCaps( [in] REFGUID VideoProcDeviceGuid, [in] const DXVA2_VideoDesc* pVideoDesc, [in] D3DFORMAT RenderTargetFormat, [out] DXVA2_VideoProcessorCaps* pCaps); HRESULT GetProcAmpRange( [in] REFGUID VideoProcDeviceGuid, [in] const DXVA2_VideoDesc* pVideoDesc, [in] D3DFORMAT RenderTargetFormat, [in] UINT ProcAmpCap, [out] DXVA2_ValueRange* pRange); HRESULT GetFilterPropertyRange( [in] REFGUID VideoProcDeviceGuid, [in] const DXVA2_VideoDesc* pVideoDesc, [in] D3DFORMAT renderTargetFormat, [in] UINT FilterSetting, [out] DXVA2_ValueRange* pRange); HRESULT CreateVideoProcessor( [in] REFGUID VideoProcDeviceGuid, [in] const DXVA2_VideoDesc* pVideoDesc, [in] D3DFORMAT RenderTargetFormat, [in] UINT MaxNumSubStreams, [out] IDirectXVideoProcessor** ppVidProcess); } /***************************************************************************** * IDirectXVideoProcessor interface */ [ object, uuid(8c3a39f0-916e-4690-804f-4c8001355d25), local ] interface IDirectXVideoProcessor : IUnknown { HRESULT GetVideoProcessorService( [out] IDirectXVideoProcessorService** ppService); HRESULT GetCreationParameters( [out] GUID* pDeviceGuid, [out] DXVA2_VideoDesc* pVideoDesc, [out] D3DFORMAT* pRenderTargetFormat, [out] UINT* pMaxNumSubStreams); HRESULT GetVideoProcessorCaps( [out] DXVA2_VideoProcessorCaps* pCaps); HRESULT GetProcAmpRange( [in] UINT ProcAmpCap, [out] DXVA2_ValueRange* pRange); HRESULT GetFilterPropertyRange( [in] UINT FilterSetting, [out] DXVA2_ValueRange* pRange); HRESULT VideoProcessBlt( [in] IDirect3DSurface9* pRenderTarget, [in] const DXVA2_VideoProcessBltParams* pBltParams, [in] const DXVA2_VideoSample* pSamples, [in] UINT NumSamples, [out] HANDLE* pHandleCompleteIDirect3DDeviceManager9); } /***************************************************************************** * IDirectXVideoMemoryConfiguration interface */ [ object, uuid(b7f916dd-db3b-49c1-84d7-e45ef99ec726), local ] interface IDirectXVideoMemoryConfiguration : IUnknown { HRESULT GetAvailableSurfaceTypeByIndex( [in] DWORD wTypeIndex, [out] DXVA2_SurfaceType *pdwType); HRESULT SetSurfaceType( [in] DXVA2_SurfaceType dwType); } ================================================ FILE: wine/windows/dyngraph.idl ================================================ /* * Copyright (C) 2002 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif interface IPinConnection; interface IPinFlowControl; interface IGraphConfig; interface IGraphConfigCallback; [ local, object, uuid(4a9a62d3-27d4-403d-91e9-89f540e55534), pointer_default(unique) ] interface IPinConnection : IUnknown { HRESULT DynamicQueryAccept([in] const AM_MEDIA_TYPE *pmt); HRESULT NotifyEndOfStream([in] HANDLE hNotifyEvent); HRESULT IsEndPin(); HRESULT DynamicDisconnect(); } [ local, object, uuid(c56e9858-dbf3-4f6b-8119-384af2060deb), pointer_default(unique) ] interface IPinFlowControl : IUnknown { HRESULT Block([in] DWORD dwBlockFlags, [in] HANDLE hEvent); } enum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS { AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001, }; typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS { AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001, AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002, AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004 } AM_GRAPH_CONFIG_RECONNECT_FLAGS; enum _REM_FILTER_FLAGS { REMFILTERF_LEAVECONNECTED = 0x00000001 }; typedef enum _AM_FILTER_FLAGS { AM_FILTER_FLAGS_REMOVABLE = 0x00000001 } AM_FILTER_FLAGS; [ local, object, uuid(03A1EB8E-32BF-4245-8502-114D08A9CB88), pointer_default(unique) ] interface IGraphConfig : IUnknown { HRESULT Reconnect( [in] IPin *pOutputPin, [in] IPin *pInputPin, [in] const AM_MEDIA_TYPE *pmtFirstConnection, [in] IBaseFilter *pUsingFilter, [in] HANDLE hAbortEvent, [in] DWORD dwFlags); HRESULT Reconfigure( [in] IGraphConfigCallback *pCallback, [in] PVOID pvContext, [in] DWORD dwFlags, [in] HANDLE hAbortEvent); HRESULT AddFilterToCache([in] IBaseFilter *pFilter); HRESULT EnumCacheFilter([out] IEnumFilters **pEnum); HRESULT RemoveFilterFromCache([in]IBaseFilter *pFilter); HRESULT GetStartTime([out] REFERENCE_TIME *prtStart); HRESULT PushThroughData( [in] IPin *pOutputPin, [in] IPinConnection *pConnection, [in] HANDLE hEventAbort); HRESULT SetFilterFlags([in] IBaseFilter *pFilter, [in] DWORD dwFlags); HRESULT GetFilterFlags([in] IBaseFilter *pFilter, [out] DWORD *pdwFlags); HRESULT RemoveFilterEx([in] IBaseFilter *pFilter, DWORD Flags); } [ local, object, uuid(ade0fd60-d19d-11d2-abf6-00a0c905f375), pointer_default(unique) ] interface IGraphConfigCallback : IUnknown { HRESULT Reconfigure(PVOID pvContext, DWORD dwFlags); } [ local, object, uuid(DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29), pointer_default(unique) ] interface IFilterChain : IUnknown { HRESULT StartChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter); HRESULT PauseChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter); HRESULT StopChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter); HRESULT RemoveChain( [in] IBaseFilter *pStartFilter, [in] IBaseFilter *pEndFilter); } ================================================ FILE: wine/windows/endpointvolume.idl ================================================ /* * Copyright (C) 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "devicetopology.idl"; typedef struct AUDIO_VOLUME_NOTIFICATION_DATA { GUID guidEventContext; BOOL bMuted; FLOAT fMasterVolume; UINT nChannels; FLOAT afChannelVolumes[1]; } AUDIO_VOLUME_NOTIFICATION_DATA; cpp_quote("typedef struct AUDIO_VOLUME_NOTIFICATION_DATA *PAUDIO_VOLUME_NOTIFICATION_DATA;") cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_VOLUME 0x1") cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_MUTE 0x2") cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_METER 0x4") interface IAudioEndpointVolumeCallback; interface IAudioEndpointVolume; interface IAudioEndpointVolumeEx; interface IAudioMeterInformation; [ pointer_default(unique), nonextensible, uuid(657804fa-d6ad-4496-8a60-352752af4f89), local, object ] interface IAudioEndpointVolumeCallback : IUnknown { HRESULT OnNotify( AUDIO_VOLUME_NOTIFICATION_DATA *pNotify ); } [ pointer_default(unique), nonextensible, uuid(5cdf2c82-841e-4546-9722-0cf74078229a), local, object ] interface IAudioEndpointVolume : IUnknown { HRESULT RegisterControlChangeNotify( [in] IAudioEndpointVolumeCallback *pNotify ); HRESULT UnregisterControlChangeNotify( [in] IAudioEndpointVolumeCallback *pNotify ); HRESULT GetChannelCount( [out] UINT *pnChannelCount ); HRESULT SetMasterVolumeLevel( [in] FLOAT fLevelDB, [unique,in] LPCGUID pguidEventContext ); HRESULT SetMasterVolumeLevelScalar( [in] FLOAT fLevel, [unique,in] LPCGUID pguidEventContext ); HRESULT GetMasterVolumeLevel( [out] FLOAT *fLevelDB ); HRESULT GetMasterVolumeLevelScalar( [out] FLOAT *fLevel ); HRESULT SetChannelVolumeLevel( [in] UINT nChannel, [in] FLOAT fLevelDB, [unique,in] LPCGUID pguidEventContext ); HRESULT SetChannelVolumeLevelScalar( [in] UINT nChannel, [in] FLOAT fLevel, [unique,in] LPCGUID pguidEventContext ); HRESULT GetChannelVolumeLevel( [in] UINT nChannel, [out] FLOAT *fLevelDB ); HRESULT GetChannelVolumeLevelScalar( [in] UINT nChannel, [out] FLOAT *fLevel ); HRESULT SetMute( [in] BOOL bMute, [unique,in] LPCGUID pguidEventContext ); HRESULT GetMute( [out] BOOL *bMute ); HRESULT GetVolumeStepInfo( [out] UINT *pnStep, [out] UINT *pnStepCount ); HRESULT VolumeStepUp( [unique,in] LPCGUID pguidEventContext ); HRESULT VolumeStepDown( [unique,in] LPCGUID pguidEventContext ); HRESULT QueryHardwareSupport( [out] DWORD *pdwHardwareSupportMask ); HRESULT GetVolumeRange( [out] FLOAT *pflVolumeMindB, [out] FLOAT *pflVolumeMaxdB, [out] FLOAT *pflVolumeIncrementdB ); } [ pointer_default(unique), nonextensible, uuid(66e11784-f695-4f28-a505-a7080081a78f), local, object ] interface IAudioEndpointVolumeEx : IAudioEndpointVolume { HRESULT GetVolumeRangeChannel( [in] UINT iChannel, [out] FLOAT *pflVolumeMindB, [out] FLOAT *pflVolumeMaxdB, [out] FLOAT *pflVolumeIncrementdB ); } ================================================ FILE: wine/windows/errorrep.h ================================================ /* * errorrep.h - error reporting APIs (implemented in faultrep.dll) * * Copyright 2007 Google (Mikolaj Zalewski) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ERRORREP_H #define __WINE_ERRORREP_H typedef enum tagEFaultRepRetVal { frrvOk, frrvOkManifest, frrvOkQueued, frrvOkErr, frrvErrNoDW, frrvErrTimeout, frrvLaunchDebugger, frrvOkHeadless, frrvErrAnotherInstance } EFaultRepRetVal; EFaultRepRetVal WINAPI ReportFault(LPEXCEPTION_POINTERS, DWORD); BOOL WINAPI AddERExcludedApplicationA(LPCSTR); BOOL WINAPI AddERExcludedApplicationW(LPCWSTR); #define AddERExcludedApplication WINELIB_NAME_AW(AddERExcludedApplication) #endif /* __WINE_ERORREP_H */ ================================================ FILE: wine/windows/errors.h ================================================ /* * Copyright (C) 2006 Hans Leidekker * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __ERRORS__ #define __ERRORS__ #ifdef __cplusplus extern "C" { #endif #define AMOVIEAPI #define VFW_FIRST_CODE 0x200 #define MAX_ERROR_TEXT_LEN 160 #include typedef BOOL (WINAPI* AMGETERRORTEXTPROCA)(HRESULT,char*,DWORD); typedef BOOL (WINAPI* AMGETERRORTEXTPROCW)(HRESULT,WCHAR*,DWORD); DECL_WINELIB_TYPE_AW(AMGETERRORTEXTPROC) DWORD WINAPI AMGetErrorTextA(HRESULT,LPSTR,DWORD); DWORD WINAPI AMGetErrorTextW(HRESULT,LPWSTR,DWORD); #define AMGetErrorText WINELIB_NAME_AW(AMGetErrorText) #ifdef __cplusplus } #endif #endif /* __ERRORS__ */ ================================================ FILE: wine/windows/errrec.idl ================================================ /* * Copyright (C) 2013 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a67-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IErrorRecords : IUnknown { cpp_quote("#define IDENTIFIER_SDK_MASK 0xF0000000") cpp_quote("#define IDENTIFIER_SDK_ERROR 0x10000000") typedef struct tagERRORINFO { HRESULT hrError; DWORD dwMinor; CLSID clsid; IID iid; DISPID dispid; } ERRORINFO; [local] HRESULT AddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams, [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID); [call_as(AddErrorRecord)] HRESULT RemoteAddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams, [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID, [out] IErrorInfo ** ppErrorInfoRem); [local] HRESULT GetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo); [call_as(GetBasicErrorInfo)] HRESULT RemoteGetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject); [call_as(GetCustomErrorObject)] HRESULT RemoteGetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo); [call_as(GetErrorInfo)] HRESULT RemoteGetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams); [call_as(GetErrorParameters)] HRESULT RemoteGetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams, [out] IErrorInfo ** ppErrorInfoRem); [local] HRESULT GetRecordCount([out] ULONG *records); [call_as(GetRecordCount)] HRESULT RemoteGetRecordCount([out] ULONG * pcRecords, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/evcode.h ================================================ /* * Copyright (C) 2004 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_EVCODE_H #define __WINE_EVCODE_H #define EC_SYSTEMBASE 0x00 #define EC_USER 0x8000 #define EC_COMPLETE 0x01 #define EC_USERABORT 0x02 #define EC_ERRORABORT 0x03 #define EC_TIME 0x04 #define EC_REPAINT 0x05 #define EC_STREAM_ERROR_STOPPED 0x06 #define EC_STREAM_ERROR_STILLPLAYING 0x07 #define EC_ERROR_STILLPLAYING 0x08 #define EC_PALETTE_CHANGED 0x09 #define EC_VIDEO_SIZE_CHANGED 0x0A #define EC_QUALITY_CHANGE 0x0B #define EC_SHUTTING_DOWN 0x0C #define EC_CLOCK_CHANGED 0x0D #define EC_PAUSED 0x0E #define EC_OPENING_FILE 0x10 #define EC_BUFFERING_DATA 0x11 #define EC_FULLSCREEN_LOST 0x12 #define EC_ACTIVATE 0x13 #define EC_NEED_RESTART 0x14 #define EC_WINDOW_DESTROYED 0x15 #define EC_DISPLAY_CHANGED 0x16 #define EC_STARVATION 0x17 #define EC_OLE_EVENT 0x18 #define EC_NOTIFY_WINDOW 0x19 #define EC_STREAM_CONTROL_STOPPED 0x1A #define EC_STREAM_CONTROL_STARTED 0x1B #define EC_END_OF_SEGMENT 0x1C #define EC_SEGMENT_STARTED 0x1D #define EC_LENGTH_CHANGED 0x1E #define EC_DEVICE_LOST 0x1F #define EC_SAMPLE_NEEDED 0x20 #define EC_PROCESSING_LATENCY 0x21 #define EC_SAMPLE_LATENCY 0x22 #define EC_SCRUB_TIME 0x23 #define EC_STEP_COMPLETE 0x24 #define EC_NEW_PIN 0x20 #define EC_RENDER_FINISHED 0x21 #define EC_TIMECODE_AVAILABLE 0x30 #define EC_EXTDEVICE_MODE_CHANGE 0x31 #define EC_STATE_CHANGE 0x32 #define EC_PLEASE_REOPEN 0x40 #define EC_STATUS 0x41 #define EC_MARKER_HIT 0x42 #define EC_LOADSTATUS 0x43 #define EC_FILE_CLOSED 0x44 #define EC_ERRORABORTEX 0x45 #define EC_EOS_SOON 0x46 #define EC_CONTENTPROPERTY_CHANGED 0x47 #define EC_BANDWIDTHCHANGE 0x48 #define EC_VIDEOFRAMEREADY 0x49 #define EC_GRAPH_CHANGED 0x50 #define EC_CLOCK_UNSET 0x51 #define EC_VMR_RENDERDEVICE_SET 0x53 #define EC_VMR_SURFACE_FLIPPED 0x54 #define EC_VMR_RECONNECTION_FAILED 0x55 #define EC_PREPROCESS_COMPLETE 0x56 #define EC_CODECAPI_EVENT 0x57 #define EC_BUILT 0x300 #define EC_UNBUILT 0x301 #define EC_WMT_EVENT_BASE 0x0251 #define EC_WMT_INDEX_EVENT EC_WMT_EVENT_BASE #define EC_WMT_EVENT EC_WMT_EVENT_BASE+1 #endif /* __WINE_EVCODE_H */ ================================================ FILE: wine/windows/evntprov.h ================================================ /* * Copyright 2010 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _EVNTPROV_H_ #define _EVNTPROV_H_ #ifdef __cplusplus extern "C" { #endif #define EVENT_LEVEL_MIN 0x00 #define EVENT_LEVEL_MAX 0xff typedef ULONGLONG REGHANDLE, *PREGHANDLE; typedef struct _EVENT_DATA_DESCRIPTOR { ULONGLONG Ptr; ULONG Size; ULONG Reserved; } EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR; typedef struct _EVENT_DESCRIPTOR { USHORT Id; UCHAR Version; UCHAR Channel; UCHAR Level; UCHAR Opcode; USHORT Task; ULONGLONG Keyword; } EVENT_DESCRIPTOR; typedef EVENT_DESCRIPTOR *PEVENT_DESCRIPTOR; typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR; typedef struct _EVENT_FILTER_DESCRIPTOR { ULONGLONG Ptr; ULONG Size; ULONG Type; } EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR; typedef VOID (NTAPI *PENABLECALLBACK)(LPCGUID,ULONG,UCHAR,ULONGLONG,ULONGLONG,PEVENT_FILTER_DESCRIPTOR,PVOID); typedef enum _EVENT_INFO_CLASS { EventProviderBinaryTrackInfo = 0, EventProviderSetTraits, EventProviderUseDescriptorType, MaxEventInfo } EVENT_INFO_CLASS; BOOLEAN WINAPI EventEnabled(REGHANDLE, PCEVENT_DESCRIPTOR); BOOLEAN WINAPI EventProviderEnabled(REGHANDLE, UCHAR, ULONGLONG); ULONG WINAPI EventRegister(LPCGUID,PENABLECALLBACK,PVOID,PREGHANDLE); ULONG WINAPI EventSetInformation(REGHANDLE, EVENT_INFO_CLASS, PVOID, ULONG); ULONG WINAPI EventUnregister(REGHANDLE); ULONG WINAPI EventWrite(REGHANDLE,PCEVENT_DESCRIPTOR,ULONG,PEVENT_DATA_DESCRIPTOR); ULONG WINAPI EventWriteTransfer(REGHANDLE,PCEVENT_DESCRIPTOR,LPCGUID,LPCGUID,ULONG,PEVENT_DATA_DESCRIPTOR); #ifdef __cplusplus } #endif #endif /* _EVNTPROV_H_ */ ================================================ FILE: wine/windows/evntrace.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _EVNTRACE_ #define _EVNTRACE_ #include #ifdef __cplusplus extern "C" { #endif #define EVENT_TRACE_CONTROL_QUERY 0 #define EVENT_TRACE_CONTROL_STOP 1 #define EVENT_TRACE_CONTROL_UPDATE 2 #define EVENT_TRACE_CONTROL_FLUSH 3 #define TRACE_LEVEL_NONE 0 #define TRACE_LEVEL_CRITICAL 1 #define TRACE_LEVEL_FATAL 1 #define TRACE_LEVEL_ERROR 2 #define TRACE_LEVEL_WARNING 3 #define TRACE_LEVEL_INFORMATION 4 #define TRACE_LEVEL_VERBOSE 5 #define EVENT_TRACE_FILE_MODE_NONE 0x00000000 #define EVENT_TRACE_FILE_MODE_SEQUENTIAL 0x00000001 #define EVENT_TRACE_FILE_MODE_CIRCULAR 0x00000002 #define EVENT_TRACE_FILE_MODE_APPEND 0x00000004 #define EVENT_TRACE_FILE_MODE_NEWFILE 0x00000008 #define EVENT_TRACE_FILE_MODE_PREALLOCATE 0x00000020 #define EVENT_TRACE_NONSTOPPABLE_MODE 0x00000040 #define EVENT_TRACE_SECURE_MODE 0x00000080 #define EVENT_TRACE_REAL_TIME_MODE 0x00000100 #define EVENT_TRACE_DELAY_OPEN_FILE_MODE 0x00000200 #define EVENT_TRACE_BUFFERING_MODE 0x00000400 #define EVENT_TRACE_PRIVATE_LOGGER_MODE 0x00000800 #define EVENT_TRACE_ADD_HEADER_MODE 0x00001000 #define EVENT_TRACE_USE_KBYTES_FOR_SIZE 0x00002000 #define EVENT_TRACE_USE_GLOBAL_SEQUENCE 0x00004000 #define EVENT_TRACE_USE_LOCAL_SEQUENCE 0x00008000 #define EVENT_TRACE_RELOG_MODE 0x00010000 #define EVENT_TRACE_PRIVATE_IN_PROC 0x00020000 #define EVENT_TRACE_MODE_RESERVED 0x00100000 #define EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWN 0x00400000 #define EVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN 0x00800000 #define EVENT_TRACE_USE_PAGED_MEMORY 0x01000000 #define EVENT_TRACE_SYSTEM_LOGGER_MODE 0x02000000 #define EVENT_TRACE_INDEPENDENT_SESSION_MODE 0x08000000 #define EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING 0x10000000 #define EVENT_TRACE_ADDTO_TRIAGE_DUMP 0x80000000 DEFINE_GUID (SystemTraceControlGuid, 0x9e814aad, 0x3204, 0x11d2, 0x9a, 0x82, 0x00, 0x60, 0x08, 0xa8, 0x69, 0x39); typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE; struct _EVENT_TRACE_LOGFILEA; struct _EVENT_TRACE_LOGFILEW; typedef struct _EVENT_TRACE_LOGFILEA EVENT_TRACE_LOGFILEA, *PEVENT_TRACE_LOGFILEA; typedef struct _EVENT_TRACE_LOGFILEW EVENT_TRACE_LOGFILEW, *PEVENT_TRACE_LOGFILEW; typedef ULONG (WINAPI * PEVENT_TRACE_BUFFER_CALLBACKA)( PEVENT_TRACE_LOGFILEA ); typedef ULONG (WINAPI * PEVENT_TRACE_BUFFER_CALLBACKW)( PEVENT_TRACE_LOGFILEW ); typedef ULONG (WINAPI * WMIDPREQUEST)( WMIDPREQUESTCODE, PVOID, ULONG*, PVOID ); typedef struct _TRACE_GUID_REGISTRATION { LPCGUID Guid; HANDLE RegHandle; } TRACE_GUID_REGISTRATION, *PTRACE_GUID_REGISTRATION; typedef struct _TRACE_GUID_PROPERTIES { GUID Guid; ULONG GuidType; ULONG LoggerId; ULONG EnableLevel; ULONG EnableFlags; BOOLEAN IsEnable; } TRACE_GUID_PROPERTIES, *PTRACE_GUID_PROPERTIES; typedef struct _EVENT_TRACE_HEADER { USHORT Size; union { USHORT FieldTypeFlags; struct { UCHAR HeaderType; UCHAR MarkerFlags; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; union { ULONG Version; struct { UCHAR Type; UCHAR Level; USHORT Version; } Class; } DUMMYUNIONNAME1; ULONG ThreadId; ULONG ProcessId; LARGE_INTEGER TimeStamp; union { GUID Guid; ULONGLONG GuidPtr; } DUMMYUNIONNAME2; union { struct { ULONG ClientContext; ULONG Flags; } DUMMYSTRUCTNAME1; struct { ULONG KernelTime; ULONG UserTime; } DUMMYSTRUCTNAME2; } DUMMYUNIONNAME3; } EVENT_TRACE_HEADER, *PEVENT_TRACE_HEADER; typedef struct _EVENT_TRACE { EVENT_TRACE_HEADER Header; ULONG InstanceId; ULONG ParentInstanceId; GUID ParentGuid; PVOID MofData; ULONG MofLength; ULONG ClientContext; } EVENT_TRACE, *PEVENT_TRACE; typedef VOID (WINAPI * PEVENT_CALLBACK)( PEVENT_TRACE ); typedef struct _TRACE_LOGFILE_HEADER { ULONG BufferSize; union { ULONG Version; struct { UCHAR MajorVersion; UCHAR MinorVersion; UCHAR SubVersion; UCHAR SubMinorVersion; } VersionDetail; } DUMMYUNIONNAME; ULONG ProviderVersion; ULONG NumberOfProcessors; LARGE_INTEGER EndTime; ULONG TimerResolution; ULONG MaximumFileSize; ULONG LogFileMode; ULONG BuffersWritten; union { GUID LogInstanceGuid; struct { ULONG StartBuffers; ULONG PointerSize; ULONG EventsLost; ULONG CpuSpeedInMHZ; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME1; LPWSTR LoggerName; LPWSTR LogFileName; TIME_ZONE_INFORMATION TimeZone; LARGE_INTEGER BootTime; LARGE_INTEGER PerfFreq; LARGE_INTEGER StartTime; ULONG ReservedTime; ULONG BuffersLost; } TRACE_LOGFILE_HEADER, *PTRACE_LOGFILE_HEADER; struct _EVENT_TRACE_LOGFILEW { LPWSTR LogFileName; LPWSTR LoggerName; LONGLONG CurrentTime; ULONG LogFileMode; EVENT_TRACE CurrentEvent; TRACE_LOGFILE_HEADER LogfileHeader; PEVENT_TRACE_BUFFER_CALLBACKW BufferCallback; ULONG BufferSize; ULONG Filled; ULONG EventsLost; PEVENT_CALLBACK EventCallback; PVOID Context; }; struct _EVENT_TRACE_LOGFILEA { LPSTR LogFileName; LPSTR LoggerName; LONGLONG CurrentTime; ULONG LogFileMode; EVENT_TRACE CurrentEvent; TRACE_LOGFILE_HEADER LogfileHeader; PEVENT_TRACE_BUFFER_CALLBACKA BufferCallback; ULONG BufferSize; ULONG Filled; ULONG EventsLost; PEVENT_CALLBACK EventCallback; PVOID Context; }; typedef struct _EVENT_TRACE_PROPERTIES { WNODE_HEADER Wnode; ULONG BufferSize; ULONG MinimumBuffers; ULONG MaximumBuffers; ULONG MaximumFileSize; ULONG LogFileMode; ULONG FlushTimer; ULONG EnableFlags; LONG AgeLimit; ULONG NumberOfBuffers; ULONG FreeBuffers; ULONG EventsLost; ULONG BuffersWritten; ULONG LogBuffersLost; ULONG RealTimeBuffersLost; HANDLE LoggerThreadId; ULONG LogFileNameOffset; ULONG LoggerNameOffset; } EVENT_TRACE_PROPERTIES, *PEVENT_TRACE_PROPERTIES; typedef struct _ENABLE_TRACE_PARAMETERS { ULONG Version; ULONG EnableProperty; ULONG ControlFlags; GUID SourceId; struct _EVENT_FILTER_DESCRIPTOR *EnableFilterDesc; ULONG FilterDescCount; } ENABLE_TRACE_PARAMETERS, *PENABLE_TRACE_PARAMETERS; typedef enum _TRACE_QUERY_INFO_CLASS { TraceGuidQueryList, TraceGuidQueryInfo, TraceGuidQueryProcess, TraceStackTracingInfo, TraceSystemTraceEnableFlagsInfo, TraceSampledProfileIntervalInfo, TraceProfileSourceConfigInfo, TraceProfileSourceListInfo, TracePmcEventListInfo, TracePmcCounterListInfo, TraceSetDisallowList, TraceVersionInfo, TraceGroupQueryList, TraceGroupQueryInfo, TraceDisallowListQuery, TraceCompressionInfo, TracePeriodicCaptureStateListInfo, TracePeriodicCaptureStateInfo, TraceProviderBinaryTracking, TraceMaxLoggersQuery, MaxTraceSetInfoClass } TRACE_QUERY_INFO_CLASS, TRACE_INFO_CLASS; #define INVALID_PROCESSTRACE_HANDLE ((TRACEHANDLE)~(ULONG_PTR)0) ULONG WINAPI CloseTrace(TRACEHANDLE); ULONG WINAPI ControlTraceA(TRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES,ULONG); ULONG WINAPI ControlTraceW(TRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES,ULONG); #define ControlTrace WINELIB_NAME_AW(ControlTrace) ULONG WINAPI EnableTrace(ULONG,ULONG,ULONG,LPCGUID,TRACEHANDLE); ULONG WINAPI EnableTraceEx2(TRACEHANDLE,LPCGUID,ULONG,UCHAR,ULONGLONG,ULONGLONG,ULONG,PENABLE_TRACE_PARAMETERS); ULONG WINAPI FlushTraceA(TRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES); ULONG WINAPI FlushTraceW(TRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES); #define FlushTrace WINELIB_NAME_AW(FlushTrace) ULONG WINAPI GetTraceEnableFlags(TRACEHANDLE); UCHAR WINAPI GetTraceEnableLevel(TRACEHANDLE); TRACEHANDLE WINAPI GetTraceLoggerHandle(PVOID); ULONG WINAPI QueryAllTracesA(PEVENT_TRACE_PROPERTIES*,ULONG,PULONG); ULONG WINAPI QueryAllTracesW(PEVENT_TRACE_PROPERTIES*,ULONG,PULONG); #define QueryAllTraces WINELIB_NAME_AW(QueryAllTraces) ULONG WINAPI RegisterTraceGuidsA(WMIDPREQUEST,PVOID,LPCGUID,ULONG,PTRACE_GUID_REGISTRATION,LPCSTR,LPCSTR,PTRACEHANDLE); ULONG WINAPI RegisterTraceGuidsW(WMIDPREQUEST,PVOID,LPCGUID,ULONG,PTRACE_GUID_REGISTRATION,LPCWSTR,LPCWSTR,PTRACEHANDLE); #define RegisterTraceGuids WINELIB_NAME_AW(RegisterTraceGuids) ULONG WINAPI StartTraceA(PTRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES); ULONG WINAPI StartTraceW(PTRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES); #define StartTrace WINELIB_NAME_AW(StartTrace) ULONG WINAPI TraceEvent(TRACEHANDLE,PEVENT_TRACE_HEADER); ULONG WINAPIV TraceMessage(TRACEHANDLE,ULONG,LPGUID,USHORT,...); ULONG WINAPI TraceMessageVa(TRACEHANDLE,ULONG,LPGUID,USHORT,__ms_va_list); ULONG WINAPI UnregisterTraceGuids(TRACEHANDLE); #ifdef __cplusplus } #endif #endif /* _EVNTRACE_ */ ================================================ FILE: wine/windows/evr.idl ================================================ /* * COM Classes for evr * * Copyright 2017 Fabian Maurer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "propidl.idl"; import "mfidl.idl"; import "mftransform.idl"; import "mediaobj.idl"; import "strmif.idl"; typedef enum _MFVP_MESSAGE_TYPE { MFVP_MESSAGE_FLUSH, MFVP_MESSAGE_INVALIDATEMEDIATYPE, MFVP_MESSAGE_PROCESSINPUTNOTIFY, MFVP_MESSAGE_BEGINSTREAMING, MFVP_MESSAGE_ENDSTREAMING, MFVP_MESSAGE_ENDOFSTREAM, MFVP_MESSAGE_STEP, MFVP_MESSAGE_CANCELSTEP, } MFVP_MESSAGE_TYPE; [ object, uuid(29aff080-182a-4a5d-af3b-448f3a6346cb), local ] interface IMFVideoPresenter : IMFClockStateSink { HRESULT ProcessMessage( [in] MFVP_MESSAGE_TYPE eMessage, [in] ULONG_PTR ulParam ); HRESULT GetCurrentMediaType( [out] IMFVideoMediaType **ppMediaType ); } [ object, uuid(83e91e85-82c1-4ea7-801d-85dc50b75086), local ] interface IEVRFilterConfig : IUnknown { HRESULT SetNumberOfStreams( [in] DWORD dwMaxStreams ); HRESULT GetNumberOfStreams( [out] DWORD *pdwMaxStreams ); } [ object, uuid(1f6a9f17-e70b-4e24-8ae4-0b2c3ba7a4ae), local ] interface IMFVideoPositionMapper : IUnknown { HRESULT MapOutputCoordinateToInputStream( [in] float xOut, [in] float yOut, [in] DWORD dwOutputStreamIndex, [in] DWORD dwInputStreamIndex, [out] float *pxIn, [out] float *pyIn ); } [ object, uuid(dfdfd197-a9ca-43d8-b341-6af3503792cd), local ] interface IMFVideoRenderer : IUnknown { HRESULT InitializeRenderer( [in] IMFTransform *pVideoMixer, [in] IMFVideoPresenter *pVideoPresenter ); } ================================================ FILE: wine/windows/excpt.h ================================================ /* * Copyright (C) 2002 Peter Hunnisett * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_EXCPT_H #define __WINE_EXCPT_H /* * Return values from the actual exception handlers */ typedef enum _EXCEPTION_DISPOSITION { ExceptionContinueExecution, ExceptionContinueSearch, ExceptionNestedException, ExceptionCollidedUnwind } EXCEPTION_DISPOSITION; /* * Return values from filters in except() and from UnhandledExceptionFilter */ #define EXCEPTION_EXECUTE_HANDLER 1 #define EXCEPTION_CONTINUE_SEARCH 0 #define EXCEPTION_CONTINUE_EXECUTION -1 #if defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS) #define GetExceptionCode _exception_code #define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info #define AbnormalTermination _abnormal_termination unsigned long __cdecl _exception_code(void); void * __cdecl _exception_info(void); int __cdecl _abnormal_termination(void); #endif /* defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS) */ #endif /* __WINE_EXCPT_H */ ================================================ FILE: wine/windows/exdisp.idl ================================================ /* * Defines the COM interfaces and APIs related to the IE Web browser * * Copyright (C) 2001 John R. Sheets (for CodeWeavers) * Copyright (C) 2003 Alexandre Julliard * Copyright (C) 2004 Jacek Caban * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "ocidl.idl"; import "docobj.idl"; #include #include #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef FindText") cpp_quote("#endif") /***************************************************************************** * SHDocVw library */ [ uuid(EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B), version(1.1), helpstring("Microsoft Internet Controls") ] library SHDocVw { importlib("stdole2.tlb"); /***************************************************************************** * IWebBrowser interface */ [ object, oleautomation, uuid(eab22ac1-30c1-11cf-a7eb-0000c05bae0b), hidden, dual ] interface IWebBrowser : IDispatch { typedef enum BrowserNavConstants { navOpenInNewWindow = 0x00000001, navNoHistory = 0x00000002, navNoReadFromCache = 0x00000004, navNoWriteToCache = 0x00000008, navAllowAutosearch = 0x00000010, navBrowserBar = 0x00000020, navHyperlink = 0x00000040, navEnforceRestricted = 0x00000080, navNewWindowsManaged = 0x00000100, navUntrustedForDownload = 0x00000200, navTrustedForActiveX = 0x00000400, navOpenInNewTab = 0x00000800, navOpenInBackgroundTab = 0x00001000, navKeepWordWheelText = 0x00002000, navVirtualTab = 0x00004000, navBlockRedirectsXDomain = 0x00008000, navOpenNewForegroundTab = 0x00010000, navTravelLogScreenshot = 0x00020000, navDeferUnload = 0x00040000, navSpeculative = 0x00080000, navSuggestNewWindow = 0x00100000, navSuggestNewTab = 0x00200000, navReserved1 = 0x00400000, navHomepageNavigate = 0x00800000, navRefresh = 0x01000000, navHostNavigation = 0x02000000, navReserved2 = 0x04000000, navReserved3 = 0x08000000, navReserved4 = 0x10000000, } BrowserNavConstants; typedef enum RefreshConstants { REFRESH_NORMAL = 0, REFRESH_IFEXPIRED = 1, REFRESH_COMPLETELY = 3 } RefreshConstants; [id(100)] HRESULT GoBack(); [id(101)] HRESULT GoForward(); [id(102)] HRESULT GoHome(); [id(103)] HRESULT GoSearch(); [id(104)] HRESULT Navigate( [in] BSTR URL, [in, optional] VARIANT *Flags, [in, optional] VARIANT *TargetFrameName, [in, optional] VARIANT *PostData, [in, optional] VARIANT *Headers); [id(DISPID_REFRESH)] HRESULT Refresh(); [id(105)] HRESULT Refresh2([in, optional] VARIANT *Level); [id(106)] HRESULT Stop(); [id(200), propget] HRESULT Application([out, retval] IDispatch** ppDisp); [id(201), propget] HRESULT Parent([out, retval] IDispatch** ppDisp); [id(202), propget] HRESULT Container([out, retval] IDispatch** ppDisp); [id(203), propget] HRESULT Document([out, retval] IDispatch** ppDisp); [id(204), propget] HRESULT TopLevelContainer([out, retval] VARIANT_BOOL* pBool); [id(205), propget] HRESULT Type([out, retval] BSTR* Type); [id(206), propget] HRESULT Left([out, retval] long *pl); [id(206), propput] HRESULT Left([in] long Left); [id(207), propget] HRESULT Top([out, retval] long *pl); [id(207), propput] HRESULT Top([in] long Top); [id(208), propget] HRESULT Width([out, retval] long *pl); [id(208), propput] HRESULT Width([in] long Width); [id(209), propget] HRESULT Height([out, retval] long *pl); [id(209), propput] HRESULT Height([in] long Height); [id(210), propget] HRESULT LocationName([out, retval] BSTR *LocationName); [id(211), propget] HRESULT LocationURL([out, retval] BSTR *LocationURL); [id(212), propget] HRESULT Busy([out, retval] VARIANT_BOOL *pBool); } /***************************************************************************** * DWebBrowserEvents dispinterface */ [ uuid(eab22ac2-30c1-11CF-a7eb-0000C05bae0b), hidden ] dispinterface DWebBrowserEvents { properties: methods: [id(DISPID_BEFORENAVIGATE)] void BeforeNavigate( [in] BSTR URL, long Flags, BSTR TargetFrameName, VARIANT *PostData, BSTR Headers, [in, out] VARIANT_BOOL *Cancel); [id(DISPID_NAVIGATECOMPLETE)] void NavigateComplete([in] BSTR URL); [id(DISPID_STATUSTEXTCHANGE)] void StatusTextChange([in] BSTR Text); [id(DISPID_PROGRESSCHANGE)] void ProgressChange([in] long Progress, [in] long ProgressMax); [id(DISPID_DOWNLOADCOMPLETE)] void DownloadComplete(); [id(DISPID_COMMANDSTATECHANGE)] void CommandStateChange([in] long Command, [in]VARIANT_BOOL Enable); [id(DISPID_DOWNLOADBEGIN)] void DownloadBegin(); [id(DISPID_NEWWINDOW)] void NewWindow( [in] BSTR URL, [in] long Flags, [in] BSTR TargetFrameName, [in] VARIANT *PostData, [in] BSTR Headers, [in,out] VARIANT_BOOL *Processed); [id(DISPID_TITLECHANGE)] void TitleChange([in] BSTR Text); [id(DISPID_FRAMEBEFORENAVIGATE)] void FrameBeforeNavigate( [in] BSTR URL, long Flags, BSTR TargetFrameName, VARIANT *PostData, BSTR Headers, [in, out]VARIANT_BOOL *Cancel); [id(DISPID_FRAMENAVIGATECOMPLETE)] void FrameNavigateComplete([in] BSTR URL); [id(DISPID_FRAMENEWWINDOW)] void FrameNewWindow( [in] BSTR URL, [in] long Flags, [in] BSTR TargetFrameName, [in] VARIANT *PostData, [in] BSTR Headers, [in,out] VARIANT_BOOL *Processed); [id(DISPID_QUIT)] void Quit([in, out] VARIANT_BOOL *Cancel); [id(DISPID_WINDOWMOVE)] void WindowMove(); [id(DISPID_WINDOWRESIZE)] void WindowResize(); [id(DISPID_WINDOWACTIVATE)] void WindowActivate(); [id(DISPID_PROPERTYCHANGE)] void PropertyChange([in] BSTR Property); } typedef [ uuid(34a226e0-df30-11cf-89a9-00a0c9054129) ] enum CommandStateChangeConstants { CSC_UPDATECOMMANDS = -1, CSC_NAVIGATEFORWARD = 1, CSC_NAVIGATEBACK = 2 } CommandStateChangeConstants; /***************************************************************************** * IWebBrowserApp interface */ [ object, oleautomation, uuid(0002df05-0000-0000-c000-000000000046), hidden, dual ] interface IWebBrowserApp : IWebBrowser { [id(300)] HRESULT Quit(); [id(301)] HRESULT ClientToWindow([in,out] int* pcx, [in,out] int* pcy); [id(302)] HRESULT PutProperty([in] BSTR Property, [in] VARIANT vtValue); [id(303)] HRESULT GetProperty([in] BSTR Property, [out, retval] VARIANT *pvtValue); [id(DISPID_VALUE), propget] HRESULT Name([out, retval] BSTR* Name); [id(DISPID_HWND), propget] HRESULT HWND([out, retval] SHANDLE_PTR *pHWND); [id(400), propget] HRESULT FullName([out, retval] BSTR* FullName); [id(401), propget] HRESULT Path([out, retval] BSTR* Path); [id(402), propget] HRESULT Visible([out, retval] VARIANT_BOOL* pBool); [id(402), propput] HRESULT Visible([in] VARIANT_BOOL Value); [id(403), propget] HRESULT StatusBar([out, retval] VARIANT_BOOL* pBool); [id(403), propput] HRESULT StatusBar([in] VARIANT_BOOL Value); [id(404), propget] HRESULT StatusText([out, retval] BSTR *StatusText); [id(404), propput] HRESULT StatusText([in] BSTR StatusText); [id(405), propget] HRESULT ToolBar([out, retval] int * Value); [id(405), propput] HRESULT ToolBar([in] int Value); [id(406), propget] HRESULT MenuBar([out, retval] VARIANT_BOOL *Value); [id(406), propput] HRESULT MenuBar([in] VARIANT_BOOL Value); [id(407), propget] HRESULT FullScreen([out, retval] VARIANT_BOOL *pbFullScreen); [id(407), propput] HRESULT FullScreen([in] VARIANT_BOOL bFullScreen); } /***************************************************************************** * IWebBrowser2 interface */ [ object, oleautomation, uuid(d30c1661-cdaf-11d0-8a3e-00c04fc9e26e), hidden, dual ] interface IWebBrowser2 : IWebBrowserApp { [id(500)] HRESULT Navigate2( [in] VARIANT *URL, [in, optional] VARIANT *Flags, [in, optional] VARIANT *TargetFrameName, [in, optional] VARIANT *PostData, [in, optional] VARIANT *Headers); [id(501)] HRESULT QueryStatusWB( [in] OLECMDID cmdID, [out, retval] OLECMDF *pcmdf); [id(502)] HRESULT ExecWB( [in] OLECMDID cmdID, [in] OLECMDEXECOPT cmdexecopt, [in, optional] VARIANT *pvaIn, [out, in, optional] VARIANT *pvaOut); [id(503)] HRESULT ShowBrowserBar( [in] VARIANT *pvaClsid, [in, optional] VARIANT *pvarShow, [in, optional] VARIANT *pvarSize); [id(DISPID_READYSTATE), propget, bindable] HRESULT ReadyState([out, retval] READYSTATE *plReadyState); [id(550), propget] HRESULT Offline([out, retval] VARIANT_BOOL *pbOffline); [id(550), propput] HRESULT Offline([in] VARIANT_BOOL bOffline); [id(551), propget] HRESULT Silent([out, retval] VARIANT_BOOL *pbSilent); [id(551), propput] HRESULT Silent([in] VARIANT_BOOL bSilent); [id(552), propget] HRESULT RegisterAsBrowser([out, retval] VARIANT_BOOL *pbRegister); [id(552), propput] HRESULT RegisterAsBrowser([in] VARIANT_BOOL bRegister); [id(553), propget] HRESULT RegisterAsDropTarget([out, retval] VARIANT_BOOL *pbRegister); [id(553), propput] HRESULT RegisterAsDropTarget([in] VARIANT_BOOL bRegister); [id(554), propget] HRESULT TheaterMode([out, retval] VARIANT_BOOL *pbRegister); [id(554), propput] HRESULT TheaterMode([in] VARIANT_BOOL bRegister); [id(555), propget] HRESULT AddressBar([out, retval] VARIANT_BOOL *Value); [id(555), propput] HRESULT AddressBar([in] VARIANT_BOOL Value); [id(556), propget] HRESULT Resizable([out, retval] VARIANT_BOOL *Value); [id(556), propput] HRESULT Resizable([in] VARIANT_BOOL Value); } typedef [ uuid(65507be0-91a8-11d3-a845-009027220e6d) ] enum SecureLockIconConstants { secureLockIconUnsecure = 0, secureLockIconMixed = 1, secureLockIconSecureUnknownBits = 2, secureLockIconSecure40Bit = 3, secureLockIconSecure56Bit = 4, secureLockIconSecureFortezza = 5, secureLockIconSecure128Bit = 6 } SecureLockIconConstants; /***************************************************************************** * DWebBrowserEvents2 dispinterface */ [ uuid(34a715a0-6587-11d0-924a-0020afc7ac4d), hidden ] dispinterface DWebBrowserEvents2 { properties: methods: [id(DISPID_STATUSTEXTCHANGE)] void StatusTextChange([in] BSTR Text); [id(DISPID_PROGRESSCHANGE)] void ProgressChange([in] long Progress, [in] long ProgressMax); [id(DISPID_COMMANDSTATECHANGE)] void CommandStateChange([in] long Command, [in] VARIANT_BOOL Enable); [id(DISPID_DOWNLOADBEGIN)] void DownloadBegin(); [id(DISPID_DOWNLOADCOMPLETE)] void DownloadComplete(); [id(DISPID_TITLECHANGE)] void TitleChange([in] BSTR Text); [id(DISPID_PROPERTYCHANGE)] void PropertyChange([in] BSTR szProperty); [id(DISPID_BEFORENAVIGATE2)] void BeforeNavigate2( [in] IDispatch *pDisp, [in] VARIANT *URL, [in] VARIANT *Flags, [in] VARIANT *TargetFrameName, [in] VARIANT *PostData, [in] VARIANT *Headers, [in, out] VARIANT_BOOL *Cancel); [id(DISPID_NEWWINDOW2)] void NewWindow2([in, out] IDispatch **ppDisp, [in, out] VARIANT_BOOL *Cancel); [id(DISPID_NAVIGATECOMPLETE2)] void NavigateComplete2([in] IDispatch *pDisp, [in] VARIANT *URL); [id(DISPID_DOCUMENTCOMPLETE)] void DocumentComplete([in] IDispatch *pDisp, [in] VARIANT *URL); [id(DISPID_ONQUIT)] void OnQuit(); [id(DISPID_ONVISIBLE)] void OnVisible([in] VARIANT_BOOL Visible); [id(DISPID_ONTOOLBAR)] void OnToolBar([in] VARIANT_BOOL ToolBar); [id(DISPID_ONMENUBAR)] void OnMenuBar([in] VARIANT_BOOL MenuBar); [id(DISPID_ONSTATUSBAR)] void OnStatusBar([in] VARIANT_BOOL StatusBar); [id(DISPID_ONFULLSCREEN)] void OnFullScreen([in] VARIANT_BOOL FullScreen); [id(DISPID_ONTHEATERMODE)] void OnTheaterMode([in] VARIANT_BOOL TheaterMode); [id(DISPID_WINDOWSETRESIZABLE)] void WindowSetResizable([in] VARIANT_BOOL Resizable); [id(DISPID_WINDOWSETLEFT)] void WindowSetLeft([in] long Left); [id(DISPID_WINDOWSETTOP)] void WindowSetTop([in] long Top); [id(DISPID_WINDOWSETWIDTH)] void WindowSetWidth([in] long Width); [id(DISPID_WINDOWSETHEIGHT)] void WindowSetHeight([in] long Height); [id(DISPID_WINDOWCLOSING)] void WindowClosing( [in] VARIANT_BOOL IsChildWindow, [in, out] VARIANT_BOOL *Cancel); [id(DISPID_CLIENTTOHOSTWINDOW)] void ClientToHostWindow( [in, out] long *CX, [in, out] long *CY); [id(DISPID_SETSECURELOCKICON)] void SetSecureLockIcon([in] long SecureLockIcon); [id(DISPID_FILEDOWNLOAD)] void FileDownload( [in] VARIANT_BOOL ActiveDocument, [in, out] VARIANT_BOOL *Cancel); [id(DISPID_NAVIGATEERROR)] void NavigateError( [in] IDispatch *pDisp, [in] VARIANT *URL, [in] VARIANT *Frame, [in] VARIANT *StatusCode, [in, out] VARIANT_BOOL *Cancel); [id(DISPID_PRINTTEMPLATEINSTANTIATION)] void PrintTemplateInstantiation([in] IDispatch *pDisp); [id(DISPID_PRINTTEMPLATETEARDOWN)] void PrintTemplateTeardown([in] IDispatch *pDisp); [id(DISPID_UPDATEPAGESTATUS)] void UpdatePageStatus( [in] IDispatch *pDisp, [in] VARIANT *nPage, [in] VARIANT *fDone); [id(DISPID_PRIVACYIMPACTEDSTATECHANGE)] void PrivacyImpactedStateChange([in] VARIANT_BOOL bImpacted); [id(DISPID_NEWWINDOW3)] void NewWindow3( [in, out] IDispatch **ppDisp, [in, out] VARIANT_BOOL *Cancel, [in] DWORD dwFlags, [in] BSTR bstrUrlContext, [in] BSTR bstrUrl); [id(DISPID_SETPHISHINGFILTERSTATUS)] void SetPhishingFilterStatus([in] long PhishingFilterStatus); [id(DISPID_WINDOWSTATECHANGED)] void WindowStateChanged( [in] DWORD dwWindowStateFlags, [in] DWORD dwValidFlagsMask); [id(DISPID_NEWPROCESS)] void NewProcess( [in] long lCauseFlag, [in] IDispatch *pWB2, [in, out] VARIANT_BOOL *Cancel); [id(DISPID_THIRDPARTYURLBLOCKED)] void ThirdPartyUrlBlocked( [in] VARIANT *URL, [in] DWORD dwCount); [id(DISPID_REDIRECTXDOMAINBLOCKED)] void RedirectXDomainBlocked( [in] IDispatch *pDisp, [in] VARIANT *StartURL, [in] VARIANT *RedirectURL, [in] VARIANT *Frame, [in] VARIANT *StatusCode); [id(DISPID_BEFORESCRIPTEXECUTE)] void BeforeScriptExecute([in] IDispatch *pDispWindow); [id(DISPID_WEBWORKERSTARTED)] void WebWorkerStarted( [in] DWORD dwUniqueID, [in] BSTR bstrWorkerLabel); [id(DISPID_WEBWORKERFINISHED)] void WebWorkerFinished([in] DWORD dwUniqueID); } [ helpstring("Microsoft Web Browser Version 1"), threading(apartment), progid("Shell.Explorer.1"), vi_progid("Shell.Explorer"), uuid(eab22ac3-30c1-11cf-a7eb-0000c05bae0b), control ] coclass WebBrowser_V1 { interface IWebBrowser2; [default] interface IWebBrowser; [source] dispinterface DWebBrowserEvents2; [default, source] dispinterface DWebBrowserEvents; } [ helpstring("Microsoft Web Browser"), threading(apartment), progid("Shell.Explorer.2"), vi_progid("Shell.Explorer"), uuid(8856f961-340a-11d0-a96b-00c04fd705a2), control ] coclass WebBrowser { [default] interface IWebBrowser2; interface IWebBrowser; [default, source] dispinterface DWebBrowserEvents2; [source] dispinterface DWebBrowserEvents; } [ helpstring("Internet Explorer(Ver 1.0)"), progid("InternetExplorer.Application.1"), vi_progid("InternetExplorer.Application"), uuid(0002df01-0000-0000-c000-000000000046) ] coclass InternetExplorer { [default] interface IWebBrowser2; interface IWebBrowserApp; [default, source] dispinterface DWebBrowserEvents2; [source] dispinterface DWebBrowserEvents; } [ uuid(C08AFD90-F2A1-11D1-8455-00A0C91F3880), hidden ] coclass ShellBrowserWindow { [default] interface IWebBrowser2; interface IWebBrowserApp; [default, source] dispinterface DWebBrowserEvents2; [source] dispinterface DWebBrowserEvents; } typedef [ uuid(f41e6981-28e5-11d0-82b4-00a0c90c29c5) ] enum ShellWindowTypeConstants { SWC_EXPLORER = 0, SWC_BROWSER = 1, SWC_3RDPARTY = 2, SWC_CALLBACK = 4, SWC_DESKTOP = 8 } ShellWindowTypeConstants; typedef [ uuid(7716a370-38Ca-11d0-a48B-00a0c90a8f39) ] enum ShellWindowFindWindowOptions { SWFO_NEEDDISPATCH = 1, SWFO_INCLUDEPENDING = 2, SWFO_COOKIEPASSED = 4 } ShellWindowFindWindowOptions; [ uuid(FE4106E0-399A-11D0-A48C-00A0C90A8F39) ] dispinterface DShellWindowsEvents { properties: methods: [id(DISPID_WINDOWREGISTERED)] void WindowRegistered([in] long lCookie); [id(DISPID_WINDOWREVOKED)] void WindowRevoked([in] long lCookie); } [ object, oleautomation, uuid(85cb6900-4d95-11cf-960c-0080c7f4ee85), dual ] interface IShellWindows : IDispatch { [propget] HRESULT Count([out, retval] long *Count); [id(DISPID_VALUE)] HRESULT Item( [in, optional] VARIANT index, [out, retval] IDispatch **Folder); [id(DISPID_NEWENUM)] HRESULT _NewEnum([out, retval] IUnknown **ppunk); [hidden] HRESULT Register( [in] IDispatch *pid, [in] long hWnd, [in] int swClass, [out] long *plCookie); [hidden] HRESULT RegisterPending( [in] long lThreadId, [in] VARIANT *pvarloc, [in] VARIANT *pvarlocRoot, [in] int swClass, [out] long *plCookie); [hidden] HRESULT Revoke([in] long lCookie); [hidden] HRESULT OnNavigate([in] long lCookie, [in] VARIANT *pvarLoc); [hidden] HRESULT OnActivated([in] long lCookie, [in] VARIANT_BOOL fActive); [hidden] HRESULT FindWindowSW( [in] VARIANT *pvarLoc, [in] VARIANT *pvarLocRoot, [in] int swClass, [out] long *phwnd, [in] int swfwOptions, [out, retval] IDispatch **ppdispOut); [hidden] HRESULT OnCreated([in] long lCookie, [in] IUnknown *punk); [hidden] HRESULT ProcessAttachDetach([in] VARIANT_BOOL fAttach); } [ threading(apartment), uuid(9ba05972-f6a8-11cf-a442-00a0c90a8f39) ] coclass ShellWindows { [default] interface IShellWindows; [default, source] dispinterface DShellWindowsEvents; } [ odl, uuid(729fe2f8-1ea8-11d1-8f85-00C04fc2fbe1), dual, oleautomation ] interface IShellUIHelper : IDispatch { [id(1), hidden] HRESULT ResetFirstBootMode(); [id(2), hidden] HRESULT ResetSafeMode(); [id(3), hidden] HRESULT RefreshOfflineDesktop(); [id(4)] HRESULT AddFavorite( [in] BSTR URL, [in, optional] VARIANT* Title); [id(5)] HRESULT AddChannel([in] BSTR URL); [id(6)] HRESULT AddDesktopComponent( [in] BSTR URL, [in] BSTR Type, [in, optional] VARIANT *Left, [in, optional] VARIANT *Top, [in, optional] VARIANT *Width, [in, optional] VARIANT *Height); [id(7)] HRESULT IsSubscribed( [in] BSTR URL, [out, retval] VARIANT_BOOL *pBool); [id(8)] HRESULT NavigateAndFind( [in] BSTR URL, [in] BSTR strQuery, [in] VARIANT *varTargetFrame); [id(9)] HRESULT ImportExportFavorites( [in] VARIANT_BOOL fImport, [in] BSTR strImpExpPath); [id(10)] HRESULT AutoCompleteSaveForm([in, optional] VARIANT *Form); [id(11)] HRESULT AutoScan( [in] BSTR strSearch, [in] BSTR strFailureUrl, [in, optional] VARIANT *pvarTargetFrame); [id(12), hidden] HRESULT AutoCompleteAttach([in, optional] VARIANT *Reserved); [id(13)] HRESULT ShowBrowserUI( [in] BSTR bstrName, [in] VARIANT *pvarIn, [out, retval] VARIANT *pvarOut); } [ uuid(a7fe6eda-1932-4281-b881-87b31b8bc52c), oleautomation, dual ] interface IShellUIHelper2 : IShellUIHelper { [id(DISPID_ADDSEARCHPROVIDER)] HRESULT AddSearchProvider([in] BSTR URL); [id(DISPID_RUNONCESHOWN)] HRESULT RunOnceShown(); [id(DISPID_SKIPRUNONCE)] HRESULT SkipRunOnce(); [id(DISPID_CUSTOMIZESETTINGS)] HRESULT CustomizeSettings( [in] VARIANT_BOOL fSQM, [in] VARIANT_BOOL fPhishing, [in] BSTR bstrLocale); [id(DISPID_SQMENABLED)] HRESULT SqmEnabled([out, retval] VARIANT_BOOL *pfEnabled); [id(DISPID_PHISHINGENABLED)] HRESULT PhishingEnabled([out, retval] VARIANT_BOOL *pfEnabled); [id(DISPID_BRANDIMAGEURI)] HRESULT BrandImageUri([out, retval] BSTR *pbstrUri); [id(DISPID_SKIPTABSWELCOME)] HRESULT SkipTabsWelcome(); [id(DISPID_DIAGNOSECONNECTION)] HRESULT DiagnoseConnection(); [id(DISPID_CUSTOMIZECLEARTYPE)] HRESULT CustomizeClearType([in] VARIANT_BOOL fSet); [id(DISPID_ISSEARCHPROVIDERINSTALLED)] HRESULT IsSearchProviderInstalled( [in] BSTR URL, [out, retval] DWORD *pdwResult); [id(DISPID_ISSEARCHMIGRATED)] HRESULT IsSearchMigrated([out, retval] VARIANT_BOOL *pfMigrated); [id(DISPID_DEFAULTSEARCHPROVIDER)] HRESULT DefaultSearchProvider([out, retval] BSTR *pbstrName); [id(DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE)] HRESULT RunOnceRequiredSettingsComplete([in] VARIANT_BOOL fComplete); [id(DISPID_RUNONCEHASSHOWN)] HRESULT RunOnceHasShown([out, retval] VARIANT_BOOL *pfShown); [id(DISPID_SEARCHGUIDEURL)] HRESULT SearchGuideUrl([out, retval] BSTR *pbstrUrl); } [ helpstring("Microsoft Shell UI Helper"), threading(apartment), progid("Shell.UIHelper.1"), vi_progid("Shell.UIHelper"), uuid(64ab4bb7-111e-11d1-8f79-00c04fc2fbe1) ] coclass ShellUIHelper { [default] interface IShellUIHelper2; } [ uuid(55136806-b2de-11d1-b9f2-00a0c98bc547) ] dispinterface DShellNameSpaceEvents { properties: methods: [id(1)] void FavoritesSelectionChange( [in] long cItems, [in] long hItem, [in] BSTR strName, [in] BSTR strUrl, [in] long cVisits, [in] BSTR strDate, [in] long fAvailableOffline); [id(2)] void SelectionChange(); [id(3)] void DoubleClick(); [id(4)] void Initialized(); } [ odl, uuid(55136804-b2de-11d1-b9f2-00a0c98bc547), hidden, dual, oleautomation ] interface IShellFavoritesNameSpace : IDispatch { [id(1)] HRESULT MoveSelectionUp(); [id(2)] HRESULT MoveSelectionDown(); [id(3)] HRESULT ResetSort(); [id(4)] HRESULT NewFolder(); [id(5)] HRESULT Synchronize(); [id(6)] HRESULT Import(); [id(7)] HRESULT Export(); [id(8)] HRESULT InvokeContextMenuCommand([in] BSTR strCommand); [id(9)] HRESULT MoveSelectionTo(); [id(10), propget] HRESULT SubscriptionsEnabled([out, retval] VARIANT_BOOL *pBool); [id(11)] HRESULT CreateSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool); [id(12)] HRESULT DeleteSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool); [id(13)] HRESULT SetRoot([in] BSTR bstrFullPath); } [ odl, uuid(e572d3c9-37be-4ae2-825d-d521763e3108), hidden, dual, oleautomation ] interface IShellNameSpace : IShellFavoritesNameSpace { [id(14), propget] HRESULT EnumOptions([out, retval] long* pgrfEnumFlags); [id(14), propput] HRESULT EnumOptions([in] long pgrfEnumFlags); [id(15), propget] HRESULT SelectedItem([out, retval] IDispatch **pItem); [id(15), propput] HRESULT SelectedItem([in] IDispatch *pItem); [id(16), propget] HRESULT Root([out, retval] VARIANT *pvar); [id(16), propput] HRESULT Root([in] VARIANT pvar); [id(17), propget] HRESULT Depth([out, retval] int *piDepth); [id(17), propput] HRESULT Depth([in] int piDepth); [id(18), propget] HRESULT Mode([out, retval] unsigned int *puMode); [id(18), propput] HRESULT Mode([in] unsigned int puMode); [id(19), propget] HRESULT Flags([out, retval] unsigned long *pdwFlags); [id(19), propput] HRESULT Flags([in] unsigned long pdwFlags); [id(20), propput] HRESULT TVFlags([in] unsigned long dwFlags); [id(20), propget] HRESULT TVFlags([out, retval] unsigned long *dwFlags); [id(21), propget] HRESULT Columns([out, retval] BSTR *bstrColumns); [id(21), propput] HRESULT Columns([in] BSTR bstrColumns); [id(22), propget] HRESULT CountViewTypes([out, retval] int *piTypes); [id(23)] HRESULT SetViewType([in] int iType); [id(24)] HRESULT SelectedItems([out, retval] IDispatch **ppid); [id(25)] HRESULT Expand([in] VARIANT var, int iDepth); [id(26)] HRESULT UnselectAll(); } [ helpstring("Shell Name Space"), threading(apartment), progid("ShellNameSpace.ShellNameSpace.1"), vi_progid("ShellNameSpace.ShellNameSpace"), uuid(2f2f1f96-2bc1-4b1c-be28-ea3774f4676a) ] coclass ShellShellNameSpace { [default] interface IShellNameSpace; [default, source] dispinterface DShellNameSpaceEvents; } [ helpstring("Shell Name Space"), threading(apartment), progid("ShellNameSpace.ShellNameSpace.1"), vi_progid("ShellNameSpace.ShellNameSpace"), uuid(55136805-b2de-11d1-b9f2-00a0c98bc547) ] coclass ShellNameSpace { [default] interface IShellNameSpace; [default, source] dispinterface DShellNameSpaceEvents; } [ odl, uuid(f3470f24-15fd-11d2-bb2e-00805ff7efca), hidden, dual, oleautomation ] interface IScriptErrorList : IDispatch { [id(10)] HRESULT advanceError(); [id(11)] HRESULT retreatError(); [id(12)] HRESULT canAdvanceError([out, retval] long *pfCanAdvance); [id(13)] HRESULT canRetreatError([out, retval] long *pfCanRetreat); [id(14)] HRESULT getErrorLine([out, retval] long *plLine); [id(15)] HRESULT getErrorChar([out, retval] long *plChar); [id(16)] HRESULT getErrorCode([out, retval] long *plCode); [id(17)] HRESULT getErrorMsg([out, retval] BSTR *pstr); [id(18)] HRESULT getErrorUrl([out, retval] BSTR *pstr); [id(23)] HRESULT getAlwaysShowLockState([out, retval] long *pfAlwaysShowLocked); [id(19)] HRESULT getDetailsPaneOpen([out, retval] long *pfDetailsPaneOpen); [id(20)] HRESULT setDetailsPaneOpen(long fDetailsPaneOpen); [id(21)] HRESULT getPerErrorDisplay([out, retval] long *pfPerErrorDisplay); [id(22)] HRESULT setPerErrorDisplay(long fPerErrorDisplay); } [ uuid(efd01300-160f-11d2-bb2e-00805ff7efca), hidden, noncreatable ] coclass CScriptErrorList { [default] interface IScriptErrorList; } [ odl, uuid(ba9239a4-3dd5-11d2-bf8b-00c04fb93661), hidden, dual, oleautomation ] interface ISearch : IDispatch { [propget] HRESULT Title([out, retval] BSTR *pbstrTitle); [propget] HRESULT Id([out, retval] BSTR *pbstrId); [propget] HRESULT URL([out, retval] BSTR *pbstrUrl); } [ odl, uuid(47c922a2-3dd5-11d2-bf8b-00c04fb93661), hidden, dual, oleautomation ] interface ISearches : IDispatch { [propget] HRESULT Count([out, retval] long *plCount); [propget] HRESULT Default([out, retval] BSTR *pbstrDefault); HRESULT Item( [in, optional] VARIANT index, [out, retval] ISearch **ppid); [id(DISPID_NEWENUM)] HRESULT _NewEnum([out, retval] IUnknown **ppunk); } [ odl, uuid(72423e8f-8011-11d2-be79-00a0c9a83da1), hidden, dual, oleautomation ] interface ISearchAssistantOC : IDispatch { [id(1)] HRESULT AddNextMenuItem([in] BSTR bstrText, [in] long idItem); [id(2)] HRESULT SetDefaultSearchUrl([in] BSTR bstrUrl); [id(3)] HRESULT NavigateToDefaultSearch(); [id(4)] HRESULT IsRestricted( [in] BSTR bstrGuid, [out, retval] VARIANT_BOOL *pVal); [id(5), propget] HRESULT ShellFeaturesEnabled([out, retval] VARIANT_BOOL *pVal); [id(6), propget] HRESULT SearchAssistantDefault([out, retval] VARIANT_BOOL *pVal); [id(7), propget] HRESULT Searches([out, retval] ISearches **ppid); [id(8), propget] HRESULT InWebFolder([out, retval] VARIANT_BOOL *pVal); [id(9)] HRESULT PutProperty( [in] VARIANT_BOOL bPerLocale, [in] BSTR bstrName, [in] BSTR bstrValue); [id(10)] HRESULT GetProperty( [in] VARIANT_BOOL bPerLocale, [in] BSTR bstrName, [out, retval] BSTR *pbstrValue); [id(11), propput] HRESULT EventHandled([in] VARIANT_BOOL rhs); [id(12)] HRESULT ResetNextMenu(); [id(13)] HRESULT FindOnWeb(); [id(14)] HRESULT FindFilesOrFolders(); [id(15)] HRESULT FindComputer(); [id(16)] HRESULT FindPrinter(); [id(17)] HRESULT FindPeople(); [id(18)] HRESULT GetSearchAssistantURL( [in] VARIANT_BOOL bSubstitute, [in] VARIANT_BOOL bCustomize, [out, retval] BSTR *pbstrValue); [id(19)] HRESULT NotifySearchSettingsChanged(); [id(20), propput] HRESULT ASProvider([in] BSTR pProvider); [id(20), propget] HRESULT ASProvider([out, retval] BSTR *pProvider); [id(21), propput] HRESULT ASSetting([in] int pSetting); [id(21), propget] HRESULT ASSetting([out, retval] int *pSetting); [id(22)] HRESULT NETDetectNextNavigate(); [id(23)] HRESULT PutFindText([in] BSTR FindText); [id(24), propget] HRESULT Version([out, retval] int *pVersion); [id(25)] HRESULT EncodeString( [in] BSTR bstrValue, [in] BSTR bstrCharSet, [in] VARIANT_BOOL bUseUTF8, [out, retval] BSTR* pbstrResult); } [ odl, uuid(72423e8f-8011-11d2-be79-00a0c9a83da2), hidden, dual, oleautomation ] interface ISearchAssistantOC2 : ISearchAssistantOC { [id(26), propget] HRESULT ShowFindPrinter([out, retval] VARIANT_BOOL *pbShowFindPrinter); } [ odl, uuid(72423e8f-8011-11d2-be79-00a0c9a83da3), hidden, dual, oleautomation ] interface ISearchAssistantOC3 : ISearchAssistantOC2 { [id(27), propget] HRESULT SearchCompanionAvailable([out, retval] VARIANT_BOOL *pbAvailable); [id(28), propput] HRESULT UseSearchCompanion([in] VARIANT_BOOL pbUseSC); [id(28), propget] HRESULT UseSearchCompanion([out, retval] VARIANT_BOOL *pbUseSC); } [ uuid(1611fdda-445b-11d2-85de-00C04fa35c89), hidden ] dispinterface _SearchAssistantEvents { properties: methods: [id(1)] void OnNextMenuSelect([in] long idItem); [id(2)] void OnNewSearch(); } [ helpstring("SearchAssistantOC"), threading(apartment), progid("SearchAssistantOC.SearchAssistantOC.1"), vi_progid("SearchAssistantOC.SearchAssistantOC"), uuid(2e71fd0f-aab1-42c0-9146-6d2c4edcf07d), hidden ] coclass ShellSearchAssistantOC { [default] interface ISearchAssistantOC3; [default, source] dispinterface _SearchAssistantEvents; } [ threading(apartment), progid("SearchAssistantOC.SearchAssistantOC.1"), vi_progid("SearchAssistantOC.SearchAssistantOC"), uuid(b45ff030-4447-11d2-85de-00C04fa35c89), hidden ] coclass SearchAssistantOC { [default] interface ISearchAssistantOC3; [default, source] dispinterface _SearchAssistantEvents; } } /* library */ ================================================ FILE: wine/windows/exdispid.h ================================================ /* * Copyright 2004 Jacek Caban * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef EXDISPID_H_ #define EXDISPID_H_ #define DISPID_BEFORENAVIGATE 100 #define DISPID_NAVIGATECOMPLETE 101 #define DISPID_STATUSTEXTCHANGE 102 #define DISPID_QUIT 103 #define DISPID_DOWNLOADCOMPLETE 104 #define DISPID_COMMANDSTATECHANGE 105 #define DISPID_DOWNLOADBEGIN 106 #define DISPID_NEWWINDOW 107 #define DISPID_PROGRESSCHANGE 108 #define DISPID_WINDOWMOVE 109 #define DISPID_WINDOWRESIZE 110 #define DISPID_WINDOWACTIVATE 111 #define DISPID_PROPERTYCHANGE 112 #define DISPID_TITLECHANGE 113 #define DISPID_TITLEICONCHANGE 114 #define DISPID_FRAMEBEFORENAVIGATE 200 #define DISPID_FRAMENAVIGATECOMPLETE 201 #define DISPID_FRAMENEWWINDOW 204 #define DISPID_BEFORENAVIGATE2 250 #define DISPID_NEWWINDOW2 251 #define DISPID_NAVIGATECOMPLETE2 252 #define DISPID_ONQUIT 253 #define DISPID_ONVISIBLE 254 #define DISPID_ONTOOLBAR 255 #define DISPID_ONMENUBAR 256 #define DISPID_ONSTATUSBAR 257 #define DISPID_ONFULLSCREEN 258 #define DISPID_DOCUMENTCOMPLETE 259 #define DISPID_ONTHEATERMODE 260 #define DISPID_ONADDRESSBAR 261 #define DISPID_WINDOWSETRESIZABLE 262 #define DISPID_WINDOWCLOSING 263 #define DISPID_WINDOWSETLEFT 264 #define DISPID_WINDOWSETTOP 265 #define DISPID_WINDOWSETWIDTH 266 #define DISPID_WINDOWSETHEIGHT 267 #define DISPID_CLIENTTOHOSTWINDOW 268 #define DISPID_SETSECURELOCKICON 269 #define DISPID_FILEDOWNLOAD 270 #define DISPID_NAVIGATEERROR 271 #define DISPID_PRIVACYIMPACTEDSTATECHANGE 272 #define DISPID_NEWWINDOW3 273 #define DISPID_VIEWUPDATE 281 #define DISPID_SETPHISHINGFILTERSTATUS 282 #define DISPID_WINDOWSTATECHANGED 283 #define DISPID_NEWPROCESS 284 #define DISPID_THIRDPARTYURLBLOCKED 285 #define DISPID_REDIRECTXDOMAINBLOCKED 286 #define DISPID_WEBWORKERSTARTED 288 #define DISPID_WEBWORKERFINISHED 289 #define DISPID_BEFORESCRIPTEXECUTE 290 #define DISPID_PRINTTEMPLATEINSTANTIATION 225 #define DISPID_PRINTTEMPLATETEARDOWN 226 #define DISPID_UPDATEPAGESTATUS 227 #define DISPID_WINDOWREGISTERED 200 #define DISPID_WINDOWREVOKED 201 #define DISPID_RESETFIRSTBOOTMODE 1 #define DISPID_RESETSAFEMODE 2 #define DISPID_REFRESHOFFLINEDESKTOP 3 #define DISPID_ADDFAVORITE 4 #define DISPID_ADDCHANNEL 5 #define DISPID_ADDDESKTOPCOMPONENT 6 #define DISPID_ISSUBSCRIBED 7 #define DISPID_NAVIGATEANDFIND 8 #define DISPID_IMPORTEXPORTFAVORITES 9 #define DISPID_AUTOCOMPLETESAVEFORM 10 #define DISPID_AUTOSCAN 11 #define DISPID_AUTOCOMPLETEATTACH 12 #define DISPID_SHOWBROWSERUI 13 #define DISPID_ADDSEARCHPROVIDER 14 #define DISPID_RUNONCESHOWN 15 #define DISPID_SKIPRUNONCE 16 #define DISPID_CUSTOMIZESETTINGS 17 #define DISPID_SQMENABLED 18 #define DISPID_PHISHINGENABLED 19 #define DISPID_BRANDIMAGEURI 20 #define DISPID_SKIPTABSWELCOME 21 #define DISPID_DIAGNOSECONNECTION 22 #define DISPID_CUSTOMIZECLEARTYPE 23 #define DISPID_ISSEARCHPROVIDERINSTALLED 24 #define DISPID_ISSEARCHMIGRATED 25 #define DISPID_DEFAULTSEARCHPROVIDER 26 #define DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE 27 #define DISPID_RUNONCEHASSHOWN 28 #define DISPID_SEARCHGUIDEURL 29 #define DISPID_ADDSERVICE 30 #define DISPID_ISSERVICEINSTALLED 31 #define DISPID_ADDTOFAVORITESBAR 32 #define DISPID_BUILDNEWTABPAGE 33 #define DISPID_SETRECENTLYCLOSEDVISIBLE 34 #define DISPID_SETACTIVITIESVISIBLE 35 #define DISPID_CONTENTDISCOVERYRESET 36 #define DISPID_INPRIVATEFILTERINGENABLED 37 #define DISPID_SUGGESTEDSITESENABLED 38 #define DISPID_ENABLESUGGESTEDSITES 39 #define DISPID_NAVIGATETOSUGGESTEDSITES 40 #define DISPID_SHOWTABSHELP 41 #define DISPID_SHOWINPRIVATEHELP 42 #define DISPID_SHELLUIHELPERLAST 43 #define DISPID_ADVANCEERROR 10 #define DISPID_RETREATERROR 11 #define DISPID_CANADVANCEERROR 12 #define DISPID_CANRETREATERROR 13 #define DISPID_GETERRORLINE 14 #define DISPID_GETERRORCHAR 15 #define DISPID_GETERRORCODE 16 #define DISPID_GETERRORMSG 17 #define DISPID_GETERRORURL 18 #define DISPID_GETDETAILSSTATE 19 #define DISPID_SETDETAILSSTATE 20 #define DISPID_GETPERERRSTATE 21 #define DISPID_SETPERERRSTATE 22 #define DISPID_GETALWAYSSHOWLOCKSTATE 23 #define DISPID_FAVSELECTIONCHANGE 1 #define DISPID_SELECTIONCHANGE 2 #define DISPID_DOUBLECLICK 3 #define DISPID_INITIALIZED 4 #define DISPID_MOVESELECTIONUP 1 #define DISPID_MOVESELECTIONDOWN 2 #define DISPID_RESETSORT 3 #define DISPID_NEWFOLDER 4 #define DISPID_SYNCHRONIZE 5 #define DISPID_IMPORT 6 #define DISPID_EXPORT 7 #define DISPID_INVOKECONTEXTMENU 8 #define DISPID_MOVESELECTIONTO 9 #define DISPID_SUBSCRIPTIONSENABLED 10 #define DISPID_CREATESUBSCRIPTION 11 #define DISPID_DELETESUBSCRIPTION 12 #define DISPID_SETROOT 13 #define DISPID_ENUMOPTIONS 14 #define DISPID_SELECTEDITEM 15 #define DISPID_ROOT 16 #define DISPID_DEPTH 17 #define DISPID_MODE 18 #define DISPID_FLAGS 19 #define DISPID_TVFLAGS 20 #define DISPID_NSCOLUMNS 21 #define DISPID_COUNTVIEWTYPES 22 #define DISPID_SETVIEWTYPE 23 #define DISPID_SELECTEDITEMS 24 #define DISPID_EXPAND 25 #define DISPID_UNSELECTALL 26 #endif /* EXDISPID_H_ */ ================================================ FILE: wine/windows/fci.h ================================================ /* * Copyright (C) 2002 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_FCI_H #define __WINE_FCI_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifndef _WIN64 #include #endif #ifndef INCLUDED_TYPES_FCI_FDI #define INCLUDED_TYPES_FCI_FDI 1 /*********************************************************************** * Common FCI/TDI declarations */ typedef ULONG CHECKSUM; typedef ULONG UOFF; typedef ULONG COFF; /**********************************************************************/ typedef struct { int erfOper; /* FCI/FDI error code - see {FCI,FDI}ERROR_XXX for details. */ int erfType; /* Optional error value filled in by FCI/FDI. */ BOOL fError; /* TRUE => error present */ } ERF, *PERF; /**********************************************************************/ #define CB_MAX_CHUNK 32768U #define CB_MAX_DISK __MSABI_LONG(0x7fffffff) #define CB_MAX_FILENAME 256 #define CB_MAX_CABINET_NAME 256 #define CB_MAX_CAB_PATH 256 #define CB_MAX_DISK_NAME 256 /**********************************************************************/ typedef unsigned short TCOMP; #define tcompMASK_TYPE 0x000F /* Mask for compression type */ #define tcompTYPE_NONE 0x0000 /* No compression */ #define tcompTYPE_MSZIP 0x0001 /* MSZIP */ #define tcompTYPE_QUANTUM 0x0002 /* Quantum */ #define tcompTYPE_LZX 0x0003 /* LZX */ #define tcompBAD 0x000F /* Unspecified compression type */ #define tcompMASK_LZX_WINDOW 0x1F00 /* Mask for LZX Compression Memory */ #define tcompLZX_WINDOW_LO 0x0F00 /* Lowest LZX Memory (15) */ #define tcompLZX_WINDOW_HI 0x1500 /* Highest LZX Memory (21) */ #define tcompSHIFT_LZX_WINDOW 8 /* Amount to shift over to get int */ #define tcompMASK_QUANTUM_LEVEL 0x00F0 /* Mask for Quantum Compression Level */ #define tcompQUANTUM_LEVEL_LO 0x0010 /* Lowest Quantum Level (1) */ #define tcompQUANTUM_LEVEL_HI 0x0070 /* Highest Quantum Level (7) */ #define tcompSHIFT_QUANTUM_LEVEL 4 /* Amount to shift over to get int */ #define tcompMASK_QUANTUM_MEM 0x1F00 /* Mask for Quantum Compression Memory */ #define tcompQUANTUM_MEM_LO 0x0A00 /* Lowest Quantum Memory (10) */ #define tcompQUANTUM_MEM_HI 0x1500 /* Highest Quantum Memory (21) */ #define tcompSHIFT_QUANTUM_MEM 8 /* Amount to shift over to get int */ #define tcompMASK_RESERVED 0xE000 /* Reserved bits (high 3 bits) */ /**********************************************************************/ #define CompressionTypeFromTCOMP(tc) \ ((tc) & tcompMASK_TYPE) #define CompressionLevelFromTCOMP(tc) \ (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL) #define CompressionMemoryFromTCOMP(tc) \ (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM) #define TCOMPfromTypeLevelMemory(t, l, m) \ (((m) << tcompSHIFT_QUANTUM_MEM ) | \ ((l) << tcompSHIFT_QUANTUM_LEVEL) | \ ( t )) #define LZXCompressionWindowFromTCOMP(tc) \ (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW) #define TCOMPfromLZXWindow(w) \ (((w) << tcompSHIFT_LZX_WINDOW) | \ ( tcompTYPE_LZX )) #endif /* !defined(INCLUDED_TYPES_FCI_FDI) */ /*********************************************************************** * FCI declarations */ typedef enum { FCIERR_NONE, FCIERR_OPEN_SRC, FCIERR_READ_SRC, FCIERR_ALLOC_FAIL, FCIERR_TEMP_FILE, FCIERR_BAD_COMPR_TYPE, FCIERR_CAB_FILE, FCIERR_USER_ABORT, FCIERR_MCI_FAIL, } FCIERROR; /**********************************************************************/ #ifndef _A_NAME_IS_UTF #define _A_NAME_IS_UTF 0x80 #endif #ifndef _A_EXEC #define _A_EXEC 0x40 #endif /**********************************************************************/ typedef void *HFCI; /**********************************************************************/ typedef struct { ULONG cb; /* Size available for cabinet on this media */ ULONG cbFolderThresh; /* Threshold for forcing a new Folder */ UINT cbReserveCFHeader; /* Space to reserve in CFHEADER */ UINT cbReserveCFFolder; /* Space to reserve in CFFOLDER */ UINT cbReserveCFData; /* Space to reserve in CFDATA */ int iCab; /* Sequential numbers for cabinets */ int iDisk; /* Disk number */ #ifndef REMOVE_CHICAGO_M6_HACK int fFailOnIncompressible; /* TRUE => Fail if a block is incompressible */ #endif USHORT setID; /* Cabinet set ID */ char szDisk[CB_MAX_DISK_NAME]; /* Current disk name */ char szCab[CB_MAX_CABINET_NAME]; /* Current cabinet name */ char szCabPath[CB_MAX_CAB_PATH]; /* Path for creating cabinet */ } CCAB, *PCCAB; /**********************************************************************/ typedef void * (__cdecl __WINE_ALLOC_SIZE(1) *PFNFCIALLOC)(ULONG cb); #define FNFCIALLOC(fn) void * __cdecl fn(ULONG cb) typedef void (__cdecl *PFNFCIFREE)(void *memory); #define FNFCIFREE(fn) void __cdecl fn(void *memory) typedef INT_PTR (__cdecl *PFNFCIOPEN) (char *pszFile, int oflag, int pmode, int *err, void *pv); #define FNFCIOPEN(fn) INT_PTR __cdecl fn(char *pszFile, int oflag, int pmode, int *err, void *pv) typedef UINT (__cdecl *PFNFCIREAD) (INT_PTR hf, void *memory, UINT cb, int *err, void *pv); #define FNFCIREAD(fn) UINT __cdecl fn(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) typedef UINT (__cdecl *PFNFCIWRITE)(INT_PTR hf, void *memory, UINT cb, int *err, void *pv); #define FNFCIWRITE(fn) UINT __cdecl fn(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) typedef int (__cdecl *PFNFCICLOSE)(INT_PTR hf, int *err, void *pv); #define FNFCICLOSE(fn) int __cdecl fn(INT_PTR hf, int *err, void *pv) typedef LONG (__cdecl *PFNFCISEEK) (INT_PTR hf, LONG dist, int seektype, int *err, void *pv); #define FNFCISEEK(fn) LONG __cdecl fn(INT_PTR hf, LONG dist, int seektype, int *err, void *pv) typedef int (__cdecl *PFNFCIDELETE) (char *pszFile, int *err, void *pv); #define FNFCIDELETE(fn) int __cdecl fn(char *pszFile, int *err, void *pv) typedef BOOL (__cdecl *PFNFCIGETNEXTCABINET)(PCCAB pccab, ULONG cbPrevCab, void *pv); #define FNFCIGETNEXTCABINET(fn) BOOL __cdecl fn(PCCAB pccab, \ ULONG cbPrevCab, \ void *pv) typedef int (__cdecl *PFNFCIFILEPLACED)(PCCAB pccab, char *pszFile, LONG cbFile, BOOL fContinuation, void *pv); #define FNFCIFILEPLACED(fn) int __cdecl fn(PCCAB pccab, \ char *pszFile, \ LONG cbFile, \ BOOL fContinuation, \ void *pv) typedef INT_PTR (__cdecl *PFNFCIGETOPENINFO)(char *pszName, USHORT *pdate, USHORT *ptime, USHORT *pattribs, int *err, void *pv); #define FNFCIGETOPENINFO(fn) INT_PTR __cdecl fn(char *pszName, \ USHORT *pdate, \ USHORT *ptime, \ USHORT *pattribs, \ int *err, \ void *pv) #define statusFile 0 /* Add File to Folder callback */ #define statusFolder 1 /* Add Folder to Cabinet callback */ #define statusCabinet 2 /* Write out a completed cabinet callback */ typedef LONG (__cdecl *PFNFCISTATUS)(UINT typeStatus, ULONG cb1, ULONG cb2, void *pv); #define FNFCISTATUS(fn) LONG __cdecl fn(UINT typeStatus, \ ULONG cb1, \ ULONG cb2, \ void *pv) typedef BOOL (__cdecl *PFNFCIGETTEMPFILE)(char *pszTempName, int cbTempName, void *pv); #define FNFCIGETTEMPFILE(fn) BOOL __cdecl fn(char *pszTempName, \ int cbTempName, \ void *pv) /**********************************************************************/ HFCI __cdecl FCICreate(PERF, PFNFCIFILEPLACED, PFNFCIALLOC, PFNFCIFREE, PFNFCIOPEN, PFNFCIREAD, PFNFCIWRITE, PFNFCICLOSE, PFNFCISEEK, PFNFCIDELETE, PFNFCIGETTEMPFILE, PCCAB, void *); BOOL __cdecl FCIAddFile(HFCI, char *, char *, BOOL, PFNFCIGETNEXTCABINET, PFNFCISTATUS, PFNFCIGETOPENINFO, TCOMP); BOOL __cdecl FCIFlushCabinet(HFCI, BOOL, PFNFCIGETNEXTCABINET, PFNFCISTATUS); BOOL __cdecl FCIFlushFolder(HFCI, PFNFCIGETNEXTCABINET, PFNFCISTATUS); BOOL __cdecl FCIDestroy(HFCI hfci); /**********************************************************************/ #ifndef _WIN64 #include #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_FCI_H */ ================================================ FILE: wine/windows/fdi.h ================================================ /* * Copyright (C) 2002 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_FDI_H #define __WINE_FDI_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifndef _WIN64 #include #endif #ifndef INCLUDED_TYPES_FCI_FDI #define INCLUDED_TYPES_FCI_FDI 1 /*********************************************************************** * Common FCI/TDI declarations */ typedef ULONG CHECKSUM; typedef ULONG UOFF; typedef ULONG COFF; /**********************************************************************/ typedef struct { int erfOper; /* FCI/FDI error code - see {FCI,FDI}ERROR_XXX for details. */ int erfType; /* Optional error value filled in by FCI/FDI. */ BOOL fError; /* TRUE => error present */ } ERF, *PERF; /**********************************************************************/ #define CB_MAX_CHUNK 32768U #define CB_MAX_DISK __MSABI_LONG(0x7fffffff) #define CB_MAX_FILENAME 256 #define CB_MAX_CABINET_NAME 256 #define CB_MAX_CAB_PATH 256 #define CB_MAX_DISK_NAME 256 /**********************************************************************/ typedef unsigned short TCOMP; #define tcompMASK_TYPE 0x000F /* Mask for compression type */ #define tcompTYPE_NONE 0x0000 /* No compression */ #define tcompTYPE_MSZIP 0x0001 /* MSZIP */ #define tcompTYPE_QUANTUM 0x0002 /* Quantum */ #define tcompTYPE_LZX 0x0003 /* LZX */ #define tcompBAD 0x000F /* Unspecified compression type */ #define tcompMASK_LZX_WINDOW 0x1F00 /* Mask for LZX Compression Memory */ #define tcompLZX_WINDOW_LO 0x0F00 /* Lowest LZX Memory (15) */ #define tcompLZX_WINDOW_HI 0x1500 /* Highest LZX Memory (21) */ #define tcompSHIFT_LZX_WINDOW 8 /* Amount to shift over to get int */ #define tcompMASK_QUANTUM_LEVEL 0x00F0 /* Mask for Quantum Compression Level */ #define tcompQUANTUM_LEVEL_LO 0x0010 /* Lowest Quantum Level (1) */ #define tcompQUANTUM_LEVEL_HI 0x0070 /* Highest Quantum Level (7) */ #define tcompSHIFT_QUANTUM_LEVEL 4 /* Amount to shift over to get int */ #define tcompMASK_QUANTUM_MEM 0x1F00 /* Mask for Quantum Compression Memory */ #define tcompQUANTUM_MEM_LO 0x0A00 /* Lowest Quantum Memory (10) */ #define tcompQUANTUM_MEM_HI 0x1500 /* Highest Quantum Memory (21) */ #define tcompSHIFT_QUANTUM_MEM 8 /* Amount to shift over to get int */ #define tcompMASK_RESERVED 0xE000 /* Reserved bits (high 3 bits) */ /**********************************************************************/ #define CompressionTypeFromTCOMP(tc) \ ((tc) & tcompMASK_TYPE) #define CompressionLevelFromTCOMP(tc) \ (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL) #define CompressionMemoryFromTCOMP(tc) \ (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM) #define TCOMPfromTypeLevelMemory(t, l, m) \ (((m) << tcompSHIFT_QUANTUM_MEM ) | \ ((l) << tcompSHIFT_QUANTUM_LEVEL) | \ ( t )) #define LZXCompressionWindowFromTCOMP(tc) \ (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW) #define TCOMPfromLZXWindow(w) \ (((w) << tcompSHIFT_LZX_WINDOW) | \ ( tcompTYPE_LZX )) #endif /* !defined(INCLUDED_TYPES_FCI_FDI) */ /*********************************************************************** * FDI declarations */ typedef enum { FDIERROR_NONE, FDIERROR_CABINET_NOT_FOUND, FDIERROR_NOT_A_CABINET, FDIERROR_UNKNOWN_CABINET_VERSION, FDIERROR_CORRUPT_CABINET, FDIERROR_ALLOC_FAIL, FDIERROR_BAD_COMPR_TYPE, FDIERROR_MDI_FAIL, FDIERROR_TARGET_FILE, FDIERROR_RESERVE_MISMATCH, FDIERROR_WRONG_CABINET, FDIERROR_USER_ABORT, } FDIERROR; /**********************************************************************/ #ifndef _A_NAME_IS_UTF #define _A_NAME_IS_UTF 0x80 #endif #ifndef _A_EXEC #define _A_EXEC 0x40 #endif /**********************************************************************/ typedef void *HFDI; /**********************************************************************/ typedef struct { LONG cbCabinet; /* Total length of cabinet file */ USHORT cFolders; /* Count of folders in cabinet */ USHORT cFiles; /* Count of files in cabinet */ USHORT setID; /* Cabinet set ID */ USHORT iCabinet; /* Cabinet number in set (0 based) */ BOOL fReserve; /* TRUE => RESERVE present in cabinet */ BOOL hasprev; /* TRUE => Cabinet is chained prev */ BOOL hasnext; /* TRUE => Cabinet is chained next */ } FDICABINETINFO, *PFDICABINETINFO; /* pfdici */ /**********************************************************************/ typedef enum { fdidtNEW_CABINET, /* New cabinet */ fdidtNEW_FOLDER, /* New folder */ fdidtDECRYPT, /* Decrypt a data block */ } FDIDECRYPTTYPE; /**********************************************************************/ typedef struct { FDIDECRYPTTYPE fdidt; /* Command type (selects union below) */ void *pvUser; /* Decryption context */ union { struct { /* fdidtNEW_CABINET */ void *pHeaderReserve; /* RESERVE section from CFHEADER */ USHORT cbHeaderReserve; /* Size of pHeaderReserve */ USHORT setID; /* Cabinet set ID */ int iCabinet; /* Cabinet number in set (0 based) */ } cabinet; struct { /* fdidtNEW_FOLDER */ void *pFolderReserve; /* RESERVE section from CFFOLDER */ USHORT cbFolderReserve; /* Size of pFolderReserve */ USHORT iFolder; /* Folder number in cabinet (0 based) */ } folder; struct { /* fdidtDECRYPT */ void *pDataReserve; /* RESERVE section from CFDATA */ USHORT cbDataReserve; /* Size of pDataReserve */ void *pbData; /* Data buffer */ USHORT cbData; /* Size of data buffer */ BOOL fSplit; /* TRUE if this is a split data block */ USHORT cbPartial; /* 0 if this is not a split block, or * the first piece of a split block; * Greater than 0 if this is the * second piece of a split block. */ } decrypt; } DUMMYUNIONNAME; } FDIDECRYPT, *PFDIDECRYPT; /**********************************************************************/ typedef void * (__cdecl *PFNALLOC)(ULONG cb); #define FNALLOC(fn) void * __cdecl fn(ULONG cb) typedef void (__cdecl *PFNFREE)(void *pv); #define FNFREE(fn) void __cdecl fn(void *pv) typedef INT_PTR (__cdecl *PFNOPEN) (char *pszFile, int oflag, int pmode); #define FNOPEN(fn) INT_PTR __cdecl fn(char *pszFile, int oflag, int pmode) typedef UINT (__cdecl *PFNREAD) (INT_PTR hf, void *pv, UINT cb); #define FNREAD(fn) UINT __cdecl fn(INT_PTR hf, void *pv, UINT cb) typedef UINT (__cdecl *PFNWRITE)(INT_PTR hf, void *pv, UINT cb); #define FNWRITE(fn) UINT __cdecl fn(INT_PTR hf, void *pv, UINT cb) typedef int (__cdecl *PFNCLOSE)(INT_PTR hf); #define FNCLOSE(fn) int __cdecl fn(INT_PTR hf) typedef LONG (__cdecl *PFNSEEK) (INT_PTR hf, LONG dist, int seektype); #define FNSEEK(fn) LONG __cdecl fn(INT_PTR hf, LONG dist, int seektype) typedef int (__cdecl *PFNFDIDECRYPT)(PFDIDECRYPT pfdid); #define FNFDIDECRYPT(fn) int __cdecl fn(PFDIDECRYPT pfdid) typedef struct { LONG cb; char *psz1; char *psz2; char *psz3; /* Points to a 256 character buffer */ void *pv; /* Value for client */ INT_PTR hf; USHORT date; USHORT time; USHORT attribs; USHORT setID; /* Cabinet set ID */ USHORT iCabinet; /* Cabinet number (0-based) */ USHORT iFolder; /* Folder number (0-based) */ FDIERROR fdie; } FDINOTIFICATION, *PFDINOTIFICATION; typedef enum { fdintCABINET_INFO, /* General information about cabinet */ fdintPARTIAL_FILE, /* First file in cabinet is continuation */ fdintCOPY_FILE, /* File to be copied */ fdintCLOSE_FILE_INFO, /* Close the file, set relevant info */ fdintNEXT_CABINET, /* File continued to next cabinet */ fdintENUMERATE, /* Enumeration status */ } FDINOTIFICATIONTYPE; typedef INT_PTR (__cdecl *PFNFDINOTIFY)(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin); #define FNFDINOTIFY(fn) INT_PTR __cdecl fn(FDINOTIFICATIONTYPE fdint, \ PFDINOTIFICATION pfdin) #ifndef _WIN64 #include #endif typedef struct { char ach[2]; /* Set to { '*', '\0' } */ LONG cbFile; /* Required spill file size */ } FDISPILLFILE, *PFDISPILLFILE; #ifndef _WIN64 #include #endif #define cpuUNKNOWN (-1) /* FDI does detection */ #define cpu80286 (0) /* '286 opcodes only */ #define cpu80386 (1) /* '386 opcodes used */ /**********************************************************************/ HFDI __cdecl FDICreate(PFNALLOC, PFNFREE, PFNOPEN, PFNREAD, PFNWRITE, PFNCLOSE, PFNSEEK, int, PERF); BOOL __cdecl FDIIsCabinet(HFDI, INT_PTR, PFDICABINETINFO); BOOL __cdecl FDICopy(HFDI, char *, char *, int, PFNFDINOTIFY, PFNFDIDECRYPT, void *pvUser); BOOL __cdecl FDIDestroy(HFDI); BOOL __cdecl FDITruncateCabinet(HFDI, char *, USHORT); /**********************************************************************/ #ifndef _WIN64 #include #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_FDI_H */ ================================================ FILE: wine/windows/fileapi.h ================================================ /* * Copyright 2013 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_FILEAPI_H #define __WINE_FILEAPI_H #ifdef __cplusplus extern "C" { #endif typedef struct _CREATEFILE2_EXTENDED_PARAMETERS { DWORD dwSize; DWORD dwFileAttributes; DWORD dwFileFlags; DWORD dwSecurityQosFlags; LPSECURITY_ATTRIBUTES lpSecurityAttributes; HANDLE hTemplateFile; } CREATEFILE2_EXTENDED_PARAMETERS, *PCREATEFILE2_EXTENDED_PARAMETERS, *LPCREATEFILE2_EXTENDED_PARAMETERS; WINBASEAPI HANDLE WINAPI CreateFile2(LPCWSTR,DWORD,DWORD,DWORD,LPCREATEFILE2_EXTENDED_PARAMETERS); #ifdef __cplusplus } #endif #endif /* __WINE_FILEAPI_H */ ================================================ FILE: wine/windows/fltdefs.h ================================================ /** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _FLTDEFS_H #define _FLTDEFS_H typedef PVOID FILTER_HANDLE,*PFILTER_HANDLE; typedef PVOID INTERFACE_HANDLE,*PINTERFACE_HANDLE; #ifdef __cplusplus #define EXTERNCDECL EXTERN_C #else #define EXTERNCDECL #endif #define PFAPIENTRY EXTERNCDECL DWORD WINAPI typedef enum _GlobalFilter { GF_FRAGMENTS = 2,GF_STRONGHOST = 8,GF_FRAGCACHE = 9 } GLOBAL_FILTER,*PGLOBAL_FILTER; typedef enum _PfForwardAction { PF_ACTION_FORWARD = 0,PF_ACTION_DROP } PFFORWARD_ACTION,*PPFFORWARD_ACTION; typedef enum _PfAddresType { PF_IPV4,PF_IPV6 } PFADDRESSTYPE,*PPFADDRESSTYPE; #define FILTER_PROTO(ProtoId) MAKELONG(MAKEWORD((ProtoId),0x00),0x00000) #define FILTER_PROTO_ANY FILTER_PROTO(0x00) #define FILTER_PROTO_ICMP FILTER_PROTO(0x01) #define FILTER_PROTO_TCP FILTER_PROTO(0x06) #define FILTER_PROTO_UDP FILTER_PROTO(0x11) #define FILTER_TCPUDP_PORT_ANY (WORD)0x0000 #define FILTER_ICMP_TYPE_ANY (BYTE)0xff #define FILTER_ICMP_CODE_ANY (BYTE)0xff typedef struct _PF_FILTER_DESCRIPTOR { DWORD dwFilterFlags; DWORD dwRule; PFADDRESSTYPE pfatType; PBYTE SrcAddr; PBYTE SrcMask; PBYTE DstAddr; PBYTE DstMask; DWORD dwProtocol; DWORD fLateBound; WORD wSrcPort; WORD wDstPort; WORD wSrcPortHighRange; WORD wDstPortHighRange; } PF_FILTER_DESCRIPTOR,*PPF_FILTER_DESCRIPTOR; typedef struct _PF_FILTER_STATS { DWORD dwNumPacketsFiltered; PF_FILTER_DESCRIPTOR info; } PF_FILTER_STATS,*PPF_FILTER_STATS; typedef struct _PF_INTERFACE_STATS { PVOID pvDriverContext; DWORD dwFlags; DWORD dwInDrops; DWORD dwOutDrops; PFFORWARD_ACTION eaInAction; PFFORWARD_ACTION eaOutAction; DWORD dwNumInFilters; DWORD dwNumOutFilters; DWORD dwFrag; DWORD dwSpoof; DWORD dwReserved1; DWORD dwReserved2; LARGE_INTEGER liSYN; LARGE_INTEGER liTotalLogged; DWORD dwLostLogEntries; PF_FILTER_STATS FilterInfo[1]; } PF_INTERFACE_STATS,*PPF_INTERFACE_STATS; #define FILTERSIZE (sizeof(PF_FILTER_DESCRIPTOR) - (DWORD)(&((PPF_FILTER_DESCRIPTOR)0)->SrcAddr)) #define FD_FLAGS_NOSYN 0x1 #define FD_FLAGS_ALLFLAGS FD_FLAGS_NOSYN #define LB_SRC_ADDR_USE_SRCADDR_FLAG 0x00000001 #define LB_SRC_ADDR_USE_DSTADDR_FLAG 0x00000002 #define LB_DST_ADDR_USE_SRCADDR_FLAG 0x00000004 #define LB_DST_ADDR_USE_DSTADDR_FLAG 0x00000008 #define LB_SRC_MASK_LATE_FLAG 0x00000010 #define LB_DST_MASK_LATE_FLAG 0x00000020 typedef struct _PF_LATEBIND_INFO { PBYTE SrcAddr; PBYTE DstAddr; PBYTE Mask; } PF_LATEBIND_INFO,*PPF_LATEBIND_INFO; typedef enum _PfFrameType { PFFT_FILTER = 1,PFFT_FRAG = 2,PFFT_SPOOF = 3 } PFFRAMETYPE,*PPFFRAMETYPE; typedef struct _pfLogFrame { LARGE_INTEGER Timestamp; PFFRAMETYPE pfeTypeOfFrame; DWORD dwTotalSizeUsed; DWORD dwFilterRule; WORD wSizeOfAdditionalData; WORD wSizeOfIpHeader; DWORD dwInterfaceName; DWORD dwIPIndex; BYTE bPacketData[1]; } PFLOGFRAME,*PPFLOGFRAME; #define ERROR_BASE 23000 #define PFERROR_NO_PF_INTERFACE (ERROR_BASE + 0) #define PFERROR_NO_FILTERS_GIVEN (ERROR_BASE + 1) #define PFERROR_BUFFER_TOO_SMALL (ERROR_BASE + 2) #define ERROR_IPV6_NOT_IMPLEMENTED (ERROR_BASE + 3) PFAPIENTRY PfCreateInterface(DWORD dwName,PFFORWARD_ACTION inAction,PFFORWARD_ACTION outAction,BOOL bUseLog,BOOL bMustBeUnique,INTERFACE_HANDLE *ppInterface); PFAPIENTRY PfDeleteInterface(INTERFACE_HANDLE pInterface); PFAPIENTRY PfAddFiltersToInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut,PFILTER_HANDLE pfHandle); PFAPIENTRY PfRemoveFiltersFromInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut); PFAPIENTRY PfRemoveFilterHandles(INTERFACE_HANDLE pInterface,DWORD cFilters,PFILTER_HANDLE pvHandles); PFAPIENTRY PfUnBindInterface(INTERFACE_HANDLE pInterface); PFAPIENTRY PfBindInterfaceToIndex(INTERFACE_HANDLE pInterface,DWORD dwIndex,PFADDRESSTYPE pfatLinkType,PBYTE LinkIPAddress); PFAPIENTRY PfBindInterfaceToIPAddress(INTERFACE_HANDLE pInterface,PFADDRESSTYPE pfatType,PBYTE IPAddress); PFAPIENTRY PfRebindFilters(INTERFACE_HANDLE pInterface,PPF_LATEBIND_INFO pLateBindInfo); PFAPIENTRY PfAddGlobalFilterToInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter); PFAPIENTRY PfRemoveGlobalFilterFromInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter); PFAPIENTRY PfMakeLog(HANDLE hEvent); PFAPIENTRY PfSetLogBuffer(PBYTE pbBuffer,DWORD dwSize,DWORD dwThreshold,DWORD dwEntries,PDWORD pdwLoggedEntries,PDWORD pdwLostEntries,PDWORD pdwSizeUsed); PFAPIENTRY PfDeleteLog(VOID); PFAPIENTRY PfGetInterfaceStatistics(INTERFACE_HANDLE pInterface,PPF_INTERFACE_STATS ppfStats,PDWORD pdwBufferSize,BOOL fResetCounters); PFAPIENTRY PfTestPacket(INTERFACE_HANDLE pInInterface,INTERFACE_HANDLE pOutInterface,DWORD cBytes,PBYTE pbPacket,PPFFORWARD_ACTION ppAction); #endif ================================================ FILE: wine/windows/fontsub.h ================================================ /* * Copyright 2016 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_FONTSUB_H #define __WINE_FONTSUB_H #ifdef __cplusplus extern "C" { #endif typedef void *(__cdecl *CFP_ALLOCPROC)(size_t); typedef void *(__cdecl *CFP_REALLOCPROC)(void *, size_t); typedef void (__cdecl *CFP_FREEPROC)(void *); #define TTFCFP_SUBSET 0 #define TTFCFP_SUBSET1 1 #define TTFCFP_DELTA 2 #define TTFCFP_UNICODE_PLATFORMID 0 #define TTFCFP_APPLE_PLATFORMID 1 #define TTFCFP_ISO_PLATFORMID 2 #define TTFCFP_MS_PLATFORMID 3 #define TTFCFP_STD_MAC_CHAR_SET 0 #define TTFCFP_SYMBOL_CHAR_SET 0 #define TTFCFP_UNICODE_CHAR_SET 1 #define TTFCFP_DONT_CARE 0xffff #define TTFCFP_LANG_KEEP_ALL 0 #define TTFCFP_FLAGS_SUBSET 0x0001 #define TTFCFP_FLAGS_COMPRESS 0x0002 #define TTFCFP_FLAGS_TTC 0x0004 #define TTFCFP_FLAGS_GLYPHLIST 0x0008 #define ERR_GENERIC 1000 #define ERR_MEM 1005 ULONG __cdecl CreateFontPackage(const unsigned char *src, const ULONG src_len, unsigned char **dest, ULONG *dest_len, ULONG *written, const unsigned short flags, const unsigned short face_index, const unsigned short format, const unsigned short lang, const unsigned short platform, const unsigned short encoding, const unsigned short *keep_list, const unsigned short keep_len, CFP_ALLOCPROC allocproc, CFP_REALLOCPROC reallocproc, CFP_FREEPROC freeproc, void *reserved); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/fusion.idl ================================================ /* * Copyright 2008 James Hawkins * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; interface IAssemblyCache; interface IAssemblyCacheItem; interface IAssemblyEnum; interface IAssemblyName; typedef enum { ASM_CACHE_ZAP = 0x1, ASM_CACHE_GAC = 0x2, ASM_CACHE_DOWNLOAD = 0x4, ASM_CACHE_ROOT = 0x8, ASM_CACHE_ROOT_EX = 0x80 } ASM_CACHE_FLAGS; typedef enum { peNone = 0x00000000, peMSIL = 0x00000001, peI386 = 0x00000002, peIA64 = 0x00000003, peAMD64 = 0x00000004, peARM = 0x00000005, peInvalid = 0xffffffff } PEKIND; typedef enum _tagAssemblyComparisonResult { ACR_Unknown, ACR_EquivalentFullMatch, ACR_EquivalentWeakNamed, ACR_EquivalentFXUnified, ACR_EquivalentUnified, ACR_NonEquivalentVersion, ACR_NonEquivalent, ACR_EquivalentPartialMatch, ACR_EquivalentPartialWeakNamed, ACR_EquivalentPartialUnified, ACR_EquivalentPartialFXUnified, ACR_NonEquivalentPartialVersion } AssemblyComparisonResult; [ local, object, uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae), pointer_default(unique) ] interface IAssemblyCache : IUnknown { typedef struct _FUSION_INSTALL_REFERENCE_ { DWORD cbSize; DWORD dwFlags; GUID guidScheme; LPCWSTR szIdentifier; LPCWSTR szNonCannonicalData; } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE; typedef const FUSION_INSTALL_REFERENCE *LPCFUSION_INSTALL_REFERENCE; typedef struct _ASSEMBLY_INFO { ULONG cbAssemblyInfo; DWORD dwAssemblyFlags; ULARGE_INTEGER uliAssemblySizeInKB; LPWSTR pszCurrentAssemblyPathBuf; ULONG cchBuf; } ASSEMBLY_INFO; cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH 0x00000001") cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH 0x00000002") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED 1") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE 2") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED 3") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING 4") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES 5") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND 6") cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE 0x00000001") cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE 0x00000002") cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED 0x00000001") cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT 0x00000002") HRESULT UninstallAssembly( [in] DWORD dwFlags, [in] LPCWSTR pszAssemblyName, [in] LPCFUSION_INSTALL_REFERENCE pRefData, [out, optional] ULONG *pulDisposition); HRESULT QueryAssemblyInfo( [in] DWORD dwFlags, [in] LPCWSTR pszAssemblyName, [in, out] ASSEMBLY_INFO *pAsmInfo); HRESULT CreateAssemblyCacheItem( [in] DWORD dwFlags, [in] PVOID pvReserved, [out] IAssemblyCacheItem **ppAsmItem, [in, optional] LPCWSTR pszAssemblyName); HRESULT CreateAssemblyScavenger([out] IUnknown **ppUnkReserved); HRESULT InstallAssembly( [in] DWORD dwFlags, [in] LPCWSTR pszManifestFilePath, [in] LPCFUSION_INSTALL_REFERENCE pRefData); } [ local, object, uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae), pointer_default(unique) ] interface IAssemblyCacheItem : IUnknown { cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE 0") cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST 1") cpp_quote("#define STREAM_FORMAT_WIN32_MODULE 2") cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST 4") cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH 0x00000001") cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH 0x00000002") cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED 1") cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED 2") cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED 3") HRESULT CreateStream( [in] DWORD dwFlags, [in] LPCWSTR pszStreamName, [in] DWORD dwFormat, [in] DWORD dwFormatFlags, [out] IStream **ppIStream, [in, optional] ULARGE_INTEGER *puliMaxSize); HRESULT Commit( [in] DWORD dwFlags, [out, optional] ULONG *pulDisposition); HRESULT AbortItem(); } [ local, object, uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E), pointer_default(unique) ] interface IAssemblyName: IUnknown { typedef [unique] IAssemblyName *LPASSEMBLYNAME; typedef enum { CANOF_PARSE_DISPLAY_NAME = 0x1, CANOF_SET_DEFAULT_VALUES = 0x2, CANOF_VERIFY_FRIEND_ASSEMBLYNAME = 0x4, CANOF_PARSE_FRIEND_DISPLAY_NAME = CANOF_PARSE_DISPLAY_NAME | CANOF_VERIFY_FRIEND_ASSEMBLYNAME } CREATE_ASM_NAME_OBJ_FLAGS; typedef enum { ASM_NAME_PUBLIC_KEY = 0, ASM_NAME_PUBLIC_KEY_TOKEN, ASM_NAME_HASH_VALUE, ASM_NAME_NAME, ASM_NAME_MAJOR_VERSION, ASM_NAME_MINOR_VERSION, ASM_NAME_BUILD_NUMBER, ASM_NAME_REVISION_NUMBER, ASM_NAME_CULTURE, ASM_NAME_PROCESSOR_ID_ARRAY, ASM_NAME_OSINFO_ARRAY, ASM_NAME_HASH_ALGID, ASM_NAME_ALIAS, ASM_NAME_CODEBASE_URL, ASM_NAME_CODEBASE_LASTMOD, ASM_NAME_NULL_PUBLIC_KEY, ASM_NAME_NULL_PUBLIC_KEY_TOKEN, ASM_NAME_CUSTOM, ASM_NAME_NULL_CUSTOM, ASM_NAME_MVID, ASM_NAME_FILE_MAJOR_VERSION, ASM_NAME_FILE_MINOR_VERSION, ASM_NAME_FILE_BUILD_NUMBER, ASM_NAME_FILE_REVISION_NUMBER, ASM_NAME_RETARGET, ASM_NAME_SIGNATURE_BLOB, ASM_NAME_CONFIG_MASK, ASM_NAME_ARCHITECTURE, ASM_NAME_MAX_PARAMS } ASM_NAME; typedef enum { ASM_DISPLAYF_VERSION = 0x1, ASM_DISPLAYF_CULTURE = 0x2, ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4, ASM_DISPLAYF_PUBLIC_KEY = 0x8, ASM_DISPLAYF_CUSTOM = 0x10, ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20, ASM_DISPLAYF_LANGUAGEID = 0x40, ASM_DISPLAYF_RETARGET = 0x80, ASM_DISPLAYF_CONFIG_MASK = 0x100, ASM_DISPLAYF_MVID = 0x200, ASM_DISPLAYF_FULL = ASM_DISPLAYF_VERSION | ASM_DISPLAYF_CULTURE | ASM_DISPLAYF_PUBLIC_KEY_TOKEN | ASM_DISPLAYF_RETARGET | ASM_DISPLAYF_PROCESSORARCHITECTURE, } ASM_DISPLAY_FLAGS; typedef enum { ASM_CMPF_NAME = 0x1, ASM_CMPF_MAJOR_VERSION = 0x2, ASM_CMPF_MINOR_VERSION = 0x4, ASM_CMPF_BUILD_NUMBER = 0x8, ASM_CMPF_REVISION_NUMBER = 0x10, ASM_CMPF_VERSION = ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION | ASM_CMPF_BUILD_NUMBER | ASM_CMPF_REVISION_NUMBER, ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20, ASM_CMPF_CULTURE = 0x40, ASM_CMPF_CUSTOM = 0x80, ASM_CMPF_DEFAULT = 0x100, ASM_CMPF_RETARGET = 0x200, ASM_CMPF_ARCHITECTURE = 0x400, ASM_CMPF_CONFIG_MASK = 0x800, ASM_CMPF_MVID = 0x1000, ASM_CMPF_SIGNATURE = 0x2000, ASM_CMPF_IL_ALL = ASM_CMPF_NAME | ASM_CMPF_VERSION | ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE, ASM_CMPF_IL_NO_VERSION = ASM_CMPF_NAME | ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE } ASM_CMP_FLAGS; HRESULT SetProperty( [in] DWORD PropertyId, [in] LPVOID pvProperty, [in] DWORD cbProperty); HRESULT GetProperty( [in] DWORD PropertyId, [out] LPVOID pvProperty, [in, out] LPDWORD pcbProperty); HRESULT Finalize(); HRESULT GetDisplayName( [out] LPOLESTR szDisplayName, [in, out] LPDWORD pccDisplayName, [in] DWORD dwDisplayFlags); HRESULT Reserved( [in] REFIID refIID, [in] IUnknown *pUnkReserved1, [in] IUnknown *pUnkReserved2, [in] LPCOLESTR szReserved, [in] LONGLONG llReserved, [in] LPVOID pvReserved, [in] DWORD cbReserved, [out] LPVOID *ppReserved); HRESULT GetName( [in, out] LPDWORD lpcwBuffer, [out] WCHAR *pwzName); HRESULT GetVersion( [out] LPDWORD pdwVersionHi, [out] LPDWORD pdwVersionLow); HRESULT IsEqual( [in] IAssemblyName *pName, [in] DWORD dwCmpFlags); HRESULT Clone([out] IAssemblyName **pName); } [ local, object, uuid(21b8916c-f28e-11d2-a473-00c04f8ef448), pointer_default(unique) ] interface IAssemblyEnum : IUnknown { HRESULT GetNextAssembly( [in] LPVOID pvReserved, [out] IAssemblyName **ppName, [in] DWORD dwFlags); HRESULT Reset(void); HRESULT Clone([out] IAssemblyEnum **ppEnum); } [ local, object, uuid(582dac66-e678-449f-aba6-6faaec8a9394), pointer_default(unique) ] interface IInstallReferenceItem : IUnknown { } [ local, object, uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f), pointer_default(unique) ] interface IInstallReferenceEnum : IUnknown { } cpp_quote("HRESULT WINAPI ClearDownloadCache(void);") cpp_quote("HRESULT WINAPI CompareAssemblyIdentity(LPCWSTR,BOOL,LPCWSTR,BOOL,BOOL*,AssemblyComparisonResult*);") cpp_quote("HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);") cpp_quote("HRESULT WINAPI CreateAssemblyEnum(IAssemblyEnum**,IUnknown*,IAssemblyName*,DWORD,LPVOID);") cpp_quote("HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME*,LPCWSTR,DWORD,LPVOID);") cpp_quote("HRESULT WINAPI CreateInstallReferenceEnum(IInstallReferenceEnum**,IAssemblyName*,DWORD,LPVOID);") cpp_quote("HRESULT WINAPI GetAssemblyIdentityFromFile(LPCWSTR,REFIID,IUnknown**);") cpp_quote("HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS,LPWSTR,PDWORD);") ================================================ FILE: wine/windows/gameux.idl ================================================ /* * Defines the COM interfaces of Game Explorer * * Copyright (C) 2008 Alistair Leslie-Hughes * Copyright (C) 2010 Mariusz Pluciński * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "shobjidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ uuid(4F48A59C-942D-4F3C-83C9-4EFFE84E4959), version(1.0), helpstring("gameux public 1.0 Type Library") ] library gameuxLib { importlib("stdole2.tlb"); cpp_quote("#define ID_GDF_XML __GDF_XML") cpp_quote("#define ID_GDF_THUMBNAIL __GDF_THUMBNAIL") cpp_quote("#define ID_ICON_ICO __ICON_ICO") cpp_quote("#if defined(__GNUC__)") cpp_quote("#define ID_GDF_XML_STR (const WCHAR[]){'_','_','G','D','F','_','X','M','L',0}") cpp_quote("#define ID_GDF_THUMBNAIL_STR (const WCHAR[]){'_','_','G','D','F','_','T','H','U','M','B','N','A','I','L',0}") cpp_quote("#elif defined(_MSC_VER)") cpp_quote("#define ID_GDF_XML_STR L\"__GDF_XML\"") cpp_quote("#define ID_GDF_THUMBNAIL_STR L\"__GDF_THUMBNAIL\"") cpp_quote("#endif") typedef enum { GIS_NOT_INSTALLED = 1, GIS_CURRENT_USER = 2, GIS_ALL_USERS = 3 } GAME_INSTALL_SCOPE; typedef enum { GAMESTATS_OPEN_OPENORCREATE = 0, GAMESTATS_OPEN_OPENONLY = 1 } GAMESTATS_OPEN_TYPE; typedef enum { GAMESTATS_OPEN_CREATED = 0, GAMESTATS_OPEN_OPENED = 1 } GAMESTATS_OPEN_RESULT; [ object, uuid(E7B2FB72-D728-49B3-A5F2-18EBF5F1349E) ] interface IGameExplorer : IUnknown { HRESULT AddGame([in] BSTR sGDFBinaryPath, [in] BSTR sInstallDirectory, [in] GAME_INSTALL_SCOPE installScope, [in, out] GUID* pguidInstanceID); HRESULT RemoveGame([in] GUID instanceID); HRESULT UpdateGame([in] GUID instanceID); HRESULT VerifyAccess([in] BSTR sGDFBinaryPath, [out] BOOL* pHasAccess); }; [ object, uuid(3887C9CA-04A0-42ae-BC4C-5FA6C7721145) ] interface IGameStatistics : IUnknown { HRESULT GetMaxCategoryLength( [retval, out] UINT* cch); HRESULT GetMaxNameLength( [retval, out] UINT* cch); HRESULT GetMaxValueLength( [retval, out] UINT* cch); HRESULT GetMaxCategories( [retval, out] WORD* pMax); HRESULT GetMaxStatsPerCategory( [retval, out] WORD* pMax); HRESULT SetCategoryTitle( [in] WORD categoryIndex, [string, in] LPCWSTR title); HRESULT GetCategoryTitle( [in] WORD categoryIndex, [retval, string, out] LPWSTR* pTitle); HRESULT GetStatistic( [in] WORD categoryIndex, [in] WORD statIndex, [string, unique, out, in] LPWSTR* pName, [string, unique, out, in] LPWSTR* pValue); HRESULT SetStatistic( [in] WORD categoryIndex, [in] WORD statIndex, [string, in] LPCWSTR name, [string, in] LPCWSTR value); HRESULT Save( [in] BOOL trackChanges); HRESULT SetLastPlayedCategory( [in] UINT categoryIndex); HRESULT GetLastPlayedCategory( [retval, out] UINT* pCategoryIndex); }; [ object, uuid(AFF3EA11-E70E-407d-95DD-35E612C41CE2) ] interface IGameStatisticsMgr : IUnknown { HRESULT GetGameStatistics( [string, in] LPCWSTR GDFBinaryPath, [in] GAMESTATS_OPEN_TYPE openType, [out] GAMESTATS_OPEN_RESULT* pOpenResult, [retval, out] IGameStatistics** ppiStats); HRESULT RemoveGameStatistics( [string, in] LPCWSTR GDFBinaryPath); }; [ object, uuid(86874AA7-A1ED-450d-A7EB-B89E20B2FFF3) ] interface IGameExplorer2 : IUnknown { HRESULT InstallGame( [string, in] LPCWSTR binaryGDFPath, [unique, in] LPCWSTR installDirectory, [in] GAME_INSTALL_SCOPE installScope); HRESULT UninstallGame( [string, in] LPCWSTR binaryGDFPath); HRESULT CheckAccess( [string, in] LPCWSTR binaryGDFPath, [retval, out] BOOL* pHasAccess); } [ helpstring("GameExplorer Class"), threading(both), progid("gameux.GameExplorer.1"), vi_progid("gameux.GameExplorer"), uuid(9A5EA990-3034-4D6F-9128-01F3C61022BC) ] coclass GameExplorer { [default] interface IGameExplorer; }; [ helpstring("GameStatistics Class"), threading(apartment), progid("gameux.GameStatistics.1"), vi_progid("gameux.GameStatistics"), uuid(DBC85A2C-C0DC-4961-B6E2-D28B62C11AD4) ] coclass GameStatistics { [default] interface IGameStatistics; }; } ================================================ FILE: wine/windows/gdiplus.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUS_H #define _GDIPLUS_H #ifdef __cplusplus namespace Gdiplus { namespace DllExports { #include "gdiplusmem.h" }; #include "gdiplusenums.h" #include "gdiplustypes.h" #include "gdiplusinit.h" #include "gdipluspixelformats.h" #include "gdiplusmetaheader.h" #include "gdiplusimaging.h" #include "gdipluscolor.h" #include "gdipluscolormatrix.h" #include "gdiplusgpstubs.h" #include "gdipluseffects.h" namespace DllExports { #include "gdiplusflat.h" }; }; #else /* end c++ includes */ #include "gdiplusmem.h" #include "gdiplusenums.h" #include "gdiplustypes.h" #include "gdiplusinit.h" #include "gdipluspixelformats.h" #include "gdiplusmetaheader.h" #include "gdiplusimaging.h" #include "gdipluscolor.h" #include "gdipluscolormatrix.h" #include "gdiplusgpstubs.h" #include "gdipluseffects.h" #include "gdiplusflat.h" #endif /* end c includes */ #endif /* _GDIPLUS_H_ */ ================================================ FILE: wine/windows/gdipluscolor.h ================================================ /* * Copyright (C) 2808 Google (Lei Zhang) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSCOLOR_H #define _GDIPLUSCOLOR_H enum ColorChannelFlags { ColorChannelFlagsC, ColorChannelFlagsM, ColorChannelFlagsY, ColorChannelFlagsK, ColorChannelFlagsLast }; #ifdef __cplusplus /* FIXME: missing the methods. */ class Color { protected: ARGB Argb; }; #else /* end of c++ typedefs */ typedef struct Color { ARGB Argb; } Color; typedef enum ColorChannelFlags ColorChannelFlags; #endif /* end of c typedefs */ #endif /* _GDIPLUSCOLOR_H */ ================================================ FILE: wine/windows/gdipluscolormatrix.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSCOLORMATRIX_H #define _GDIPLUSCOLORMATRIX_H struct ColorMatrix { REAL m[5][5]; }; enum ColorMatrixFlags { ColorMatrixFlagsDefault = 0, ColorMatrixFlagsSkipGrays = 1, ColorMatrixFlagsAltGray = 2 }; enum ColorAdjustType { ColorAdjustTypeDefault, ColorAdjustTypeBitmap, ColorAdjustTypeBrush, ColorAdjustTypePen, ColorAdjustTypeText, ColorAdjustTypeCount, ColorAdjustTypeAny }; struct ColorMap { Color oldColor; Color newColor; }; enum HistogramFormat { HistogramFormatARGB, HistogramFormatPARGB, HistogramFormatRGB, HistogramFormatGray, HistogramFormatB, HistogramFormatG, HistogramFormatR, HistogramFormatA, }; #ifndef __cplusplus typedef enum ColorAdjustType ColorAdjustType; typedef enum ColorMatrixFlags ColorMatrixFlags; typedef enum HistogramFormat HistogramFormat; typedef struct ColorMatrix ColorMatrix; typedef struct ColorMap ColorMap; #endif /* end of c typedefs */ #endif /* _GDIPLUSCOLORMATRIX_H */ ================================================ FILE: wine/windows/gdipluseffects.h ================================================ /* * Copyright (C) 2015 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSEFFECTS_H #define _GDIPLUSEFFECTS_H DEFINE_GUID(BlurEffectGuid, 0x633c80a4, 0x1843, 0x482b, 0x9e, 0xf2, 0xbe, 0x28, 0x34, 0xc5, 0xfd, 0xd4); DEFINE_GUID(SharpenEffectGuid, 0x63cbf3ee, 0xc526, 0x402c, 0x8f, 0x71, 0x62, 0xc5, 0x40, 0xbf, 0x51, 0x42); DEFINE_GUID(ColorMatrixEffectGuid, 0x718f2615, 0x7933, 0x40e3, 0xa5, 0x11, 0x5f, 0x68, 0xfe, 0x14, 0xdd, 0x74); DEFINE_GUID(ColorLUTEffectGuid, 0xa7ce72a9, 0x0f7f, 0x40d7, 0xb3, 0xcc, 0xd0, 0xc0, 0x2d, 0x5c, 0x32, 0x12); DEFINE_GUID(BrightnessContrastEffectGuid, 0xd3a1dbe1, 0x8ec4, 0x4c17, 0x9f, 0x4c, 0xea, 0x97, 0xad, 0x1c, 0x34, 0x3d); DEFINE_GUID(HueSaturationLightnessEffectGuid, 0x8b2dd6c3, 0xeb07, 0x4d87, 0xa5, 0xf0, 0x71, 0x08, 0xe2, 0x6a, 0x9c, 0x5f); DEFINE_GUID(LevelsEffectGuid, 0x99c354ec, 0x2a31, 0x4f3a, 0x8c, 0x34, 0x17, 0xa8, 0x03, 0xb3, 0x3a, 0x25); DEFINE_GUID(TintEffectGuid, 0x1077af00, 0x2848, 0x4441, 0x94, 0x89, 0x44, 0xad, 0x4c, 0x2d, 0x7a, 0x2c); DEFINE_GUID(ColorBalanceEffectGuid, 0x537e597d, 0x251e, 0x48da, 0x96, 0x64, 0x29, 0xca, 0x49, 0x6b, 0x70, 0xf8); DEFINE_GUID(RedEyeCorrectionEffectGuid, 0x74d29d05, 0x69a4, 0x4266, 0x95, 0x49, 0x3c, 0xc5, 0x28, 0x36, 0xb6, 0x32); DEFINE_GUID(ColorCurveEffectGuid, 0xdd6a0022, 0x58e4, 0x4a67, 0x9d, 0x9b, 0xd4, 0x8e, 0xb8, 0x81, 0xa5, 0x3d); #ifdef __cplusplus extern "C" { #endif GpStatus WINGDIPAPI GdipCreateEffect(const GUID guid, CGpEffect **effect); GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect *effect); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/gdiplusenums.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSENUMS_H #define _GDIPLUSENUMS_H typedef UINT GraphicsState; typedef UINT GraphicsContainer; enum Unit { UnitWorld = 0, UnitDisplay = 1, UnitPixel = 2, UnitPoint = 3, UnitInch = 4, UnitDocument = 5, UnitMillimeter = 6 }; enum BrushType { BrushTypeSolidColor = 0, BrushTypeHatchFill = 1, BrushTypeTextureFill = 2, BrushTypePathGradient = 3, BrushTypeLinearGradient = 4 }; enum DriverStringOptions { DriverStringOptionsCmapLookup = 1, DriverStringOptionsVertical = 2, DriverStringOptionsRealizedAdvance = 4, DriverStringOptionsLimitSubpixel = 8 }; enum FillMode { FillModeAlternate = 0, FillModeWinding = 1 }; enum LineCap { LineCapFlat = 0x00, LineCapSquare = 0x01, LineCapRound = 0x02, LineCapTriangle = 0x03, LineCapNoAnchor = 0x10, LineCapSquareAnchor = 0x11, LineCapRoundAnchor = 0x12, LineCapDiamondAnchor = 0x13, LineCapArrowAnchor = 0x14, LineCapCustom = 0xff, LineCapAnchorMask = 0xf0 }; enum CustomLineCapType { CustomLineCapTypeDefault = 0, CustomLineCapTypeAdjustableArrow = 1 }; enum PathPointType{ PathPointTypeStart = 0, /* start of a figure */ PathPointTypeLine = 1, PathPointTypeBezier = 3, PathPointTypePathTypeMask = 7, PathPointTypePathDashMode = 16, /* not used */ PathPointTypePathMarker = 32, PathPointTypeCloseSubpath = 128, /* end of a closed figure */ PathPointTypeBezier3 = 3 }; enum PenType { PenTypeSolidColor = BrushTypeSolidColor, PenTypeHatchFill = BrushTypeHatchFill, PenTypeTextureFill = BrushTypeTextureFill, PenTypePathGradient = BrushTypePathGradient, PenTypeLinearGradient = BrushTypeLinearGradient, PenTypeUnknown = -1 }; enum LineJoin { LineJoinMiter = 0, LineJoinBevel = 1, LineJoinRound = 2, LineJoinMiterClipped = 3 }; enum QualityMode { QualityModeInvalid = -1, QualityModeDefault = 0, QualityModeLow = 1, QualityModeHigh = 2 }; enum SmoothingMode { SmoothingModeInvalid = QualityModeInvalid, SmoothingModeDefault = QualityModeDefault, SmoothingModeHighSpeed = QualityModeLow, SmoothingModeHighQuality = QualityModeHigh, SmoothingModeNone, SmoothingModeAntiAlias }; enum CompositingQuality { CompositingQualityInvalid = QualityModeInvalid, CompositingQualityDefault = QualityModeDefault, CompositingQualityHighSpeed = QualityModeLow, CompositingQualityHighQuality = QualityModeHigh, CompositingQualityGammaCorrected, CompositingQualityAssumeLinear }; enum InterpolationMode { InterpolationModeInvalid = QualityModeInvalid, InterpolationModeDefault = QualityModeDefault, InterpolationModeLowQuality = QualityModeLow, InterpolationModeHighQuality = QualityModeHigh, InterpolationModeBilinear, InterpolationModeBicubic, InterpolationModeNearestNeighbor, InterpolationModeHighQualityBilinear, InterpolationModeHighQualityBicubic }; enum PenAlignment { PenAlignmentCenter = 0, PenAlignmentInset = 1 }; enum PixelOffsetMode { PixelOffsetModeInvalid = QualityModeInvalid, PixelOffsetModeDefault = QualityModeDefault, PixelOffsetModeHighSpeed = QualityModeLow, PixelOffsetModeHighQuality = QualityModeHigh, PixelOffsetModeNone, PixelOffsetModeHalf }; enum DashCap { DashCapFlat = 0, DashCapRound = 2, DashCapTriangle = 3 }; enum DashStyle { DashStyleSolid, DashStyleDash, DashStyleDot, DashStyleDashDot, DashStyleDashDotDot, DashStyleCustom }; enum MatrixOrder { MatrixOrderPrepend = 0, MatrixOrderAppend = 1 }; enum ImageType { ImageTypeUnknown, ImageTypeBitmap, ImageTypeMetafile }; enum WarpMode { WarpModePerspective, WarpModeBilinear }; enum WrapMode { WrapModeTile, WrapModeTileFlipX, WrapModeTileFlipY, WrapModeTileFlipXY, WrapModeClamp }; enum MetafileType { MetafileTypeInvalid, MetafileTypeWmf, MetafileTypeWmfPlaceable, MetafileTypeEmf, MetafileTypeEmfPlusOnly, MetafileTypeEmfPlusDual }; enum LinearGradientMode { LinearGradientModeHorizontal, LinearGradientModeVertical, LinearGradientModeForwardDiagonal, LinearGradientModeBackwardDiagonal }; enum EmfType { EmfTypeEmfOnly = MetafileTypeEmf, EmfTypeEmfPlusOnly = MetafileTypeEmfPlusOnly, EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual }; enum CompositingMode { CompositingModeSourceOver, CompositingModeSourceCopy }; enum TextRenderingHint { TextRenderingHintSystemDefault = 0, TextRenderingHintSingleBitPerPixelGridFit, TextRenderingHintSingleBitPerPixel, TextRenderingHintAntiAliasGridFit, TextRenderingHintAntiAlias, TextRenderingHintClearTypeGridFit }; enum StringAlignment { StringAlignmentNear = 0, StringAlignmentCenter = 1, StringAlignmentFar = 2 }; enum StringDigitSubstitute { StringDigitSubstituteUser = 0, StringDigitSubstituteNone = 1, StringDigitSubstituteNational = 2, StringDigitSubstituteTraditional = 3 }; enum StringFormatFlags { StringFormatFlagsDirectionRightToLeft = 0x00000001, StringFormatFlagsDirectionVertical = 0x00000002, StringFormatFlagsNoFitBlackBox = 0x00000004, StringFormatFlagsDisplayFormatControl = 0x00000020, StringFormatFlagsNoFontFallback = 0x00000400, StringFormatFlagsMeasureTrailingSpaces = 0x00000800, StringFormatFlagsNoWrap = 0x00001000, StringFormatFlagsLineLimit = 0x00002000, StringFormatFlagsNoClip = 0x00004000 }; enum StringTrimming { StringTrimmingNone = 0, StringTrimmingCharacter = 1, StringTrimmingWord = 2, StringTrimmingEllipsisCharacter = 3, StringTrimmingEllipsisWord = 4, StringTrimmingEllipsisPath = 5 }; enum FontStyle { FontStyleRegular = 0, FontStyleBold = 1, FontStyleItalic = 2, FontStyleBoldItalic = 3, FontStyleUnderline = 4, FontStyleStrikeout = 8 }; enum HotkeyPrefix { HotkeyPrefixNone = 0, HotkeyPrefixShow = 1, HotkeyPrefixHide = 2 }; enum ImageCodecFlags { ImageCodecFlagsEncoder = 1, ImageCodecFlagsDecoder = 2, ImageCodecFlagsSupportBitmap = 4, ImageCodecFlagsSupportVector = 8, ImageCodecFlagsSeekableEncode = 16, ImageCodecFlagsBlockingDecode = 32, ImageCodecFlagsBuiltin = 65536, ImageCodecFlagsSystem = 131072, ImageCodecFlagsUser = 262144 }; enum ImageFlags { ImageFlagsNone = 0, ImageFlagsScalable = 0x0001, ImageFlagsHasAlpha = 0x0002, ImageFlagsHasTranslucent = 0x0004, ImageFlagsPartiallyScalable = 0x0008, ImageFlagsColorSpaceRGB = 0x0010, ImageFlagsColorSpaceCMYK = 0x0020, ImageFlagsColorSpaceGRAY = 0x0040, ImageFlagsColorSpaceYCBCR = 0x0080, ImageFlagsColorSpaceYCCK = 0x0100, ImageFlagsHasRealDPI = 0x1000, ImageFlagsHasRealPixelSize = 0x2000, ImageFlagsReadOnly = 0x00010000, ImageFlagsCaching = 0x00020000 }; enum CombineMode { CombineModeReplace, CombineModeIntersect, CombineModeUnion, CombineModeXor, CombineModeExclude, CombineModeComplement }; enum FlushIntention { FlushIntentionFlush = 0, FlushIntentionSync = 1 }; enum CoordinateSpace { CoordinateSpaceWorld, CoordinateSpacePage, CoordinateSpaceDevice }; enum GpTestControlEnum { TestControlForceBilinear = 0, TestControlNoICM = 1, TestControlGetBuildNumber = 2 }; enum MetafileFrameUnit { MetafileFrameUnitPixel = UnitPixel, MetafileFrameUnitPoint = UnitPoint, MetafileFrameUnitInch = UnitInch, MetafileFrameUnitDocument = UnitDocument, MetafileFrameUnitMillimeter = UnitMillimeter, MetafileFrameUnitGdi }; enum HatchStyle { HatchStyleHorizontal = 0, HatchStyleVertical = 1, HatchStyleForwardDiagonal = 2, HatchStyleBackwardDiagonal = 3, HatchStyleCross = 4, HatchStyleDiagonalCross = 5, HatchStyle05Percent = 6, HatchStyle10Percent = 7, HatchStyle20Percent = 8, HatchStyle25Percent = 9, HatchStyle30Percent = 10, HatchStyle40Percent = 11, HatchStyle50Percent = 12, HatchStyle60Percent = 13, HatchStyle70Percent = 14, HatchStyle75Percent = 15, HatchStyle80Percent = 16, HatchStyle90Percent = 17, HatchStyleLightDownwardDiagonal = 18, HatchStyleLightUpwardDiagonal = 19, HatchStyleDarkDownwardDiagonal = 20, HatchStyleDarkUpwardDiagonal = 21, HatchStyleWideDownwardDiagonal = 22, HatchStyleWideUpwardDiagonal = 23, HatchStyleLightVertical = 24, HatchStyleLightHorizontal = 25, HatchStyleNarrowVertical = 26, HatchStyleNarrowHorizontal = 27, HatchStyleDarkVertical = 28, HatchStyleDarkHorizontal = 29, HatchStyleDashedDownwardDiagonal = 30, HatchStyleDashedUpwardDiagonal = 31, HatchStyleDashedHorizontal = 32, HatchStyleDashedVertical = 33, HatchStyleSmallConfetti = 34, HatchStyleLargeConfetti = 35, HatchStyleZigZag = 36, HatchStyleWave = 37, HatchStyleDiagonalBrick = 38, HatchStyleHorizontalBrick = 39, HatchStyleWeave = 40, HatchStylePlaid = 41, HatchStyleDivot = 42, HatchStyleDottedGrid = 43, HatchStyleDottedDiamond = 44, HatchStyleShingle = 45, HatchStyleTrellis = 46, HatchStyleSphere = 47, HatchStyleSmallGrid = 48, HatchStyleSmallCheckerBoard = 49, HatchStyleLargeCheckerBoard = 50, HatchStyleOutlinedDiamond = 51, HatchStyleSolidDiamond = 52, HatchStyleTotal = 53, HatchStyleLargeGrid = HatchStyleCross, HatchStyleMin = HatchStyleHorizontal, HatchStyleMax = HatchStyleTotal - 1 }; #define GDIP_EMFPLUS_RECORD_BASE 0x00004000 #define GDIP_WMF_RECORD_BASE 0x00010000 #define GDIP_WMF_RECORD_TO_EMFPLUS(x) ((x)|GDIP_WMF_RECORD_BASE) enum EmfPlusRecordType { WmfRecordTypeSetBkColor = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR), WmfRecordTypeSetBkMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE), WmfRecordTypeSetMapMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE), WmfRecordTypeSetROP2 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2), WmfRecordTypeSetRelAbs = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS), WmfRecordTypeSetPolyFillMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE), WmfRecordTypeSetStretchBltMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE), WmfRecordTypeSetTextCharExtra = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA), WmfRecordTypeSetTextColor = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR), WmfRecordTypeSetTextJustification = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION), WmfRecordTypeSetWindowOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG), WmfRecordTypeSetWindowExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT), WmfRecordTypeSetViewportOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG), WmfRecordTypeSetViewportExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT), WmfRecordTypeOffsetWindowOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG), WmfRecordTypeScaleWindowExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT), WmfRecordTypeOffsetViewportOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG), WmfRecordTypeScaleViewportExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT), WmfRecordTypeLineTo = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO), WmfRecordTypeMoveTo = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO), WmfRecordTypeExcludeClipRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT), WmfRecordTypeIntersectClipRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT), WmfRecordTypeArc = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC), WmfRecordTypeEllipse = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE), WmfRecordTypeFloodFill = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL), WmfRecordTypePie = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE), WmfRecordTypeRectangle = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE), WmfRecordTypeRoundRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT), WmfRecordTypePatBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT), WmfRecordTypeSaveDC = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC), WmfRecordTypeSetPixel = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL), WmfRecordTypeOffsetClipRgn = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN), WmfRecordTypeTextOut = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT), WmfRecordTypeBitBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT), WmfRecordTypeStretchBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT), WmfRecordTypePolygon = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON), WmfRecordTypePolyline = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE), WmfRecordTypeEscape = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE), WmfRecordTypeRestoreDC = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC), WmfRecordTypeFillRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION), WmfRecordTypeFrameRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION), WmfRecordTypeInvertRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION), WmfRecordTypePaintRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION), WmfRecordTypeSelectClipRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION), WmfRecordTypeSelectObject = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT), WmfRecordTypeSetTextAlign = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN), WmfRecordTypeDrawText = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F), WmfRecordTypeChord = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD), WmfRecordTypeSetMapperFlags = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS), WmfRecordTypeExtTextOut = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT), WmfRecordTypeSetDIBToDev = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV), WmfRecordTypeSelectPalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE), WmfRecordTypeRealizePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE), WmfRecordTypeAnimatePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE), WmfRecordTypeSetPalEntries = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES), WmfRecordTypePolyPolygon = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON), WmfRecordTypeResizePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE), WmfRecordTypeDIBBitBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT), WmfRecordTypeDIBStretchBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT), WmfRecordTypeDIBCreatePatternBrush = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH), WmfRecordTypeStretchDIB = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB), WmfRecordTypeExtFloodFill = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL), WmfRecordTypeSetLayout = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149), WmfRecordTypeResetDC = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C), WmfRecordTypeStartDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D), WmfRecordTypeStartPage = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F), WmfRecordTypeEndPage = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050), WmfRecordTypeAbortDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052), WmfRecordTypeEndDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E), WmfRecordTypeDeleteObject = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT), WmfRecordTypeCreatePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE), WmfRecordTypeCreateBrush = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8), WmfRecordTypeCreatePatternBrush = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH), WmfRecordTypeCreatePenIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT), WmfRecordTypeCreateFontIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT), WmfRecordTypeCreateBrushIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT), WmfRecordTypeCreateBitmapIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD), WmfRecordTypeCreateBitmap = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE), WmfRecordTypeCreateRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION), EmfRecordTypeHeader = EMR_HEADER, EmfRecordTypePolyBezier = EMR_POLYBEZIER, EmfRecordTypePolygon = EMR_POLYGON, EmfRecordTypePolyline = EMR_POLYLINE, EmfRecordTypePolyBezierTo = EMR_POLYBEZIERTO, EmfRecordTypePolyLineTo = EMR_POLYLINETO, EmfRecordTypePolyPolyline = EMR_POLYPOLYLINE, EmfRecordTypePolyPolygon = EMR_POLYPOLYGON, EmfRecordTypeSetWindowExtEx = EMR_SETWINDOWEXTEX, EmfRecordTypeSetWindowOrgEx = EMR_SETWINDOWORGEX, EmfRecordTypeSetViewportExtEx = EMR_SETVIEWPORTEXTEX, EmfRecordTypeSetViewportOrgEx = EMR_SETVIEWPORTORGEX, EmfRecordTypeSetBrushOrgEx = EMR_SETBRUSHORGEX, EmfRecordTypeEOF = EMR_EOF, EmfRecordTypeSetPixelV = EMR_SETPIXELV, EmfRecordTypeSetMapperFlags = EMR_SETMAPPERFLAGS, EmfRecordTypeSetMapMode = EMR_SETMAPMODE, EmfRecordTypeSetBkMode = EMR_SETBKMODE, EmfRecordTypeSetPolyFillMode = EMR_SETPOLYFILLMODE, EmfRecordTypeSetROP2 = EMR_SETROP2, EmfRecordTypeSetStretchBltMode = EMR_SETSTRETCHBLTMODE, EmfRecordTypeSetTextAlign = EMR_SETTEXTALIGN, EmfRecordTypeSetColorAdjustment = EMR_SETCOLORADJUSTMENT, EmfRecordTypeSetTextColor = EMR_SETTEXTCOLOR, EmfRecordTypeSetBkColor = EMR_SETBKCOLOR, EmfRecordTypeOffsetClipRgn = EMR_OFFSETCLIPRGN, EmfRecordTypeMoveToEx = EMR_MOVETOEX, EmfRecordTypeSetMetaRgn = EMR_SETMETARGN, EmfRecordTypeExcludeClipRect = EMR_EXCLUDECLIPRECT, EmfRecordTypeIntersectClipRect = EMR_INTERSECTCLIPRECT, EmfRecordTypeScaleViewportExtEx = EMR_SCALEVIEWPORTEXTEX, EmfRecordTypeScaleWindowExtEx = EMR_SCALEWINDOWEXTEX, EmfRecordTypeSaveDC = EMR_SAVEDC, EmfRecordTypeRestoreDC = EMR_RESTOREDC, EmfRecordTypeSetWorldTransform = EMR_SETWORLDTRANSFORM, EmfRecordTypeModifyWorldTransform = EMR_MODIFYWORLDTRANSFORM, EmfRecordTypeSelectObject = EMR_SELECTOBJECT, EmfRecordTypeCreatePen = EMR_CREATEPEN, EmfRecordTypeCreateBrushIndirect = EMR_CREATEBRUSHINDIRECT, EmfRecordTypeDeleteObject = EMR_DELETEOBJECT, EmfRecordTypeAngleArc = EMR_ANGLEARC, EmfRecordTypeEllipse = EMR_ELLIPSE, EmfRecordTypeRectangle = EMR_RECTANGLE, EmfRecordTypeRoundRect = EMR_ROUNDRECT, EmfRecordTypeArc = EMR_ARC, EmfRecordTypeChord = EMR_CHORD, EmfRecordTypePie = EMR_PIE, EmfRecordTypeSelectPalette = EMR_SELECTPALETTE, EmfRecordTypeCreatePalette = EMR_CREATEPALETTE, EmfRecordTypeSetPaletteEntries = EMR_SETPALETTEENTRIES, EmfRecordTypeResizePalette = EMR_RESIZEPALETTE, EmfRecordTypeRealizePalette = EMR_REALIZEPALETTE, EmfRecordTypeExtFloodFill = EMR_EXTFLOODFILL, EmfRecordTypeLineTo = EMR_LINETO, EmfRecordTypeArcTo = EMR_ARCTO, EmfRecordTypePolyDraw = EMR_POLYDRAW, EmfRecordTypeSetArcDirection = EMR_SETARCDIRECTION, EmfRecordTypeSetMiterLimit = EMR_SETMITERLIMIT, EmfRecordTypeBeginPath = EMR_BEGINPATH, EmfRecordTypeEndPath = EMR_ENDPATH, EmfRecordTypeCloseFigure = EMR_CLOSEFIGURE, EmfRecordTypeFillPath = EMR_FILLPATH, EmfRecordTypeStrokeAndFillPath = EMR_STROKEANDFILLPATH, EmfRecordTypeStrokePath = EMR_STROKEPATH, EmfRecordTypeFlattenPath = EMR_FLATTENPATH, EmfRecordTypeWidenPath = EMR_WIDENPATH, EmfRecordTypeSelectClipPath = EMR_SELECTCLIPPATH, EmfRecordTypeAbortPath = EMR_ABORTPATH, EmfRecordTypeReserved_069 = 69, EmfRecordTypeGdiComment = EMR_GDICOMMENT, EmfRecordTypeFillRgn = EMR_FILLRGN, EmfRecordTypeFrameRgn = EMR_FRAMERGN, EmfRecordTypeInvertRgn = EMR_INVERTRGN, EmfRecordTypePaintRgn = EMR_PAINTRGN, EmfRecordTypeExtSelectClipRgn = EMR_EXTSELECTCLIPRGN, EmfRecordTypeBitBlt = EMR_BITBLT, EmfRecordTypeStretchBlt = EMR_STRETCHBLT, EmfRecordTypeMaskBlt = EMR_MASKBLT, EmfRecordTypePlgBlt = EMR_PLGBLT, EmfRecordTypeSetDIBitsToDevice = 80, EmfRecordTypeStretchDIBits = EMR_STRETCHDIBITS, EmfRecordTypeExtCreateFontIndirect = EMR_EXTCREATEFONTINDIRECTW, EmfRecordTypeExtTextOutA = EMR_EXTTEXTOUTA, EmfRecordTypeExtTextOutW = EMR_EXTTEXTOUTW, EmfRecordTypePolyBezier16 = EMR_POLYBEZIER16, EmfRecordTypePolygon16 = EMR_POLYGON16, EmfRecordTypePolyline16 = EMR_POLYLINE16, EmfRecordTypePolyBezierTo16 = EMR_POLYBEZIERTO16, EmfRecordTypePolylineTo16 = EMR_POLYLINETO16, EmfRecordTypePolyPolyline16 = EMR_POLYPOLYLINE16, EmfRecordTypePolyPolygon16 = EMR_POLYPOLYGON16, EmfRecordTypePolyDraw16 = EMR_POLYDRAW16, EmfRecordTypeCreateMonoBrush = EMR_CREATEMONOBRUSH, EmfRecordTypeCreateDIBPatternBrushPt = EMR_CREATEDIBPATTERNBRUSHPT, EmfRecordTypeExtCreatePen = EMR_EXTCREATEPEN, EmfRecordTypePolyTextOutA = EMR_POLYTEXTOUTA, EmfRecordTypePolyTextOutW = EMR_POLYTEXTOUTW, EmfRecordTypeSetICMMode = 98, EmfRecordTypeCreateColorSpace = 99, EmfRecordTypeSetColorSpace = 100, EmfRecordTypeDeleteColorSpace = 101, EmfRecordTypeGLSRecord = 102, EmfRecordTypeGLSBoundedRecord = 103, EmfRecordTypePixelFormat = 104, EmfRecordTypeDrawEscape = 105, EmfRecordTypeExtEscape = 106, EmfRecordTypeStartDoc = 107, EmfRecordTypeSmallTextOut = 108, EmfRecordTypeForceUFIMapping = 109, EmfRecordTypeNamedEscape = 110, EmfRecordTypeColorCorrectPalette = 111, EmfRecordTypeSetICMProfileA = 112, EmfRecordTypeSetICMProfileW = 113, EmfRecordTypeAlphaBlend = 114, EmfRecordTypeSetLayout = 115, EmfRecordTypeTransparentBlt = 116, EmfRecordTypeReserved_117 = 117, EmfRecordTypeGradientFill = 118, EmfRecordTypeSetLinkedUFIs = 119, EmfRecordTypeSetTextJustification = 120, EmfRecordTypeColorMatchToTargetW = 121, EmfRecordTypeCreateColorSpaceW = 122, EmfRecordTypeMax = 122, EmfRecordTypeMin = 1, EmfPlusRecordTypeInvalid = GDIP_EMFPLUS_RECORD_BASE, EmfPlusRecordTypeHeader, EmfPlusRecordTypeEndOfFile, EmfPlusRecordTypeComment, EmfPlusRecordTypeGetDC, EmfPlusRecordTypeMultiFormatStart, EmfPlusRecordTypeMultiFormatSection, EmfPlusRecordTypeMultiFormatEnd, EmfPlusRecordTypeObject, EmfPlusRecordTypeClear, EmfPlusRecordTypeFillRects, EmfPlusRecordTypeDrawRects, EmfPlusRecordTypeFillPolygon, EmfPlusRecordTypeDrawLines, EmfPlusRecordTypeFillEllipse, EmfPlusRecordTypeDrawEllipse, EmfPlusRecordTypeFillPie, EmfPlusRecordTypeDrawPie, EmfPlusRecordTypeDrawArc, EmfPlusRecordTypeFillRegion, EmfPlusRecordTypeFillPath, EmfPlusRecordTypeDrawPath, EmfPlusRecordTypeFillClosedCurve, EmfPlusRecordTypeDrawClosedCurve, EmfPlusRecordTypeDrawCurve, EmfPlusRecordTypeDrawBeziers, EmfPlusRecordTypeDrawImage, EmfPlusRecordTypeDrawImagePoints, EmfPlusRecordTypeDrawString, EmfPlusRecordTypeSetRenderingOrigin, EmfPlusRecordTypeSetAntiAliasMode, EmfPlusRecordTypeSetTextRenderingHint, EmfPlusRecordTypeSetTextContrast, EmfPlusRecordTypeSetInterpolationMode, EmfPlusRecordTypeSetPixelOffsetMode, EmfPlusRecordTypeSetCompositingMode, EmfPlusRecordTypeSetCompositingQuality, EmfPlusRecordTypeSave, EmfPlusRecordTypeRestore, EmfPlusRecordTypeBeginContainer, EmfPlusRecordTypeBeginContainerNoParams, EmfPlusRecordTypeEndContainer, EmfPlusRecordTypeSetWorldTransform, EmfPlusRecordTypeResetWorldTransform, EmfPlusRecordTypeMultiplyWorldTransform, EmfPlusRecordTypeTranslateWorldTransform, EmfPlusRecordTypeScaleWorldTransform, EmfPlusRecordTypeRotateWorldTransform, EmfPlusRecordTypeSetPageTransform, EmfPlusRecordTypeResetClip, EmfPlusRecordTypeSetClipRect, EmfPlusRecordTypeSetClipPath, EmfPlusRecordTypeSetClipRegion, EmfPlusRecordTypeOffsetClip, EmfPlusRecordTypeDrawDriverString, EmfPlusRecordTypeStrokeFillPath, EmfPlusRecordTypeSerializableObject, EmfPlusRecordTypeSetTSGraphics, EmfPlusRecordTypeSetTSClip, EmfPlusRecordTotal, EmfPlusRecordTypeMax = EmfPlusRecordTotal-1, EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader }; #define FlatnessDefault 0.25f #ifndef __cplusplus typedef enum Unit Unit; typedef enum BrushType BrushType; typedef enum DriverStringOptions DriverStringOptions; typedef enum FillMode FillMode; typedef enum LineCap LineCap; typedef enum CustomLineCapType CustomLineCapType; typedef enum PathPointType PathPointType; typedef enum LineJoin LineJoin; typedef enum QualityMode QualityMode; typedef enum SmoothingMode SmoothingMode; typedef enum CompositingQuality CompositingQuality; typedef enum InterpolationMode InterpolationMode; typedef enum PixelOffsetMode PixelOffsetMode; typedef enum DashCap DashCap; typedef enum DashStyle DashStyle; typedef enum MatrixOrder MatrixOrder; typedef enum ImageType ImageType; typedef enum ImageFlags ImageFlags; typedef enum WarpMode WarpMode; typedef enum WrapMode WrapMode; typedef enum MetafileType MetafileType; typedef enum LinearGradientMode LinearGradientMode; typedef enum EmfType EmfType; typedef enum CompositingMode CompositingMode; typedef enum TextRenderingHint TextRenderingHint; typedef enum StringAlignment StringAlignment; typedef enum StringDigitSubstitute StringDigitSubstitute; typedef enum StringTrimming StringTrimming; typedef enum FontStyle FontStyle; typedef enum StringFormatFlags StringFormatFlags; typedef enum HotkeyPrefix HotkeyPrefix; typedef enum PenAlignment PenAlignment; typedef enum PaletteFlags PaletteFlags; typedef enum ImageCodecFlags ImageCodecFlags; typedef enum CombineMode CombineMode; typedef enum FlushIntention FlushIntention; typedef enum CoordinateSpace CoordinateSpace; typedef enum GpTestControlEnum GpTestControlEnum; typedef enum MetafileFrameUnit MetafileFrameUnit; typedef enum PenType PenType; typedef enum HatchStyle HatchStyle; typedef enum EmfPlusRecordType EmfPlusRecordType; #endif /* end of c typedefs */ #undef GDIP_WMF_RECORD_TO_EMFPLUS #define GDIP_WMF_RECORD_TO_EMFPLUS(x) ((EmfPlusRecordType)((x)|GDIP_WMF_RECORD_BASE)) #endif ================================================ FILE: wine/windows/gdiplusflat.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _FLATAPI_H #define _FLATAPI_H #define WINGDIPAPI __stdcall #define GDIPCONST const #ifdef __cplusplus extern "C" { #endif /* AdjustableArrowCap */ GpStatus WINGDIPAPI GdipCreateAdjustableArrowCap(REAL,REAL,BOOL,GpAdjustableArrowCap**); GpStatus WINGDIPAPI GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL*); GpStatus WINGDIPAPI GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL*); GpStatus WINGDIPAPI GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL*); GpStatus WINGDIPAPI GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL*); GpStatus WINGDIPAPI GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL); GpStatus WINGDIPAPI GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL); GpStatus WINGDIPAPI GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL); GpStatus WINGDIPAPI GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL); /* Bitmap */ GpStatus WINGDIPAPI GdipBitmapApplyEffect(GpBitmap*,CGpEffect*,RECT*,BOOL,VOID**,INT*); GpStatus WINGDIPAPI GdipBitmapCreateApplyEffect(GpBitmap**,INT,CGpEffect*,RECT*,RECT*,GpBitmap**,BOOL,VOID**,INT*); GpStatus WINGDIPAPI GdipBitmapGetHistogram(GpBitmap*,HistogramFormat,UINT,UINT*,UINT*,UINT*,UINT*); GpStatus WINGDIPAPI GdipBitmapGetHistogramSize(HistogramFormat,UINT*); GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*); GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT, PixelFormat,BitmapData*); GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB); GpStatus WINGDIPAPI GdipBitmapSetResolution(GpBitmap*,REAL,REAL); GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*); GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL,REAL,REAL,REAL,PixelFormat,GpBitmap*,GpBitmap**); GpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT,INT,INT,INT,PixelFormat,GpBitmap*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP, HPALETTE, GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON, GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*, GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap*,HBITMAP*,ARGB); GpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap*,HICON*); GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect*); GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect*,const VOID*,const UINT); /* Brush */ GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**); GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*); GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*); /* CachedBitmap */ GpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap*,GpGraphics*, GpCachedBitmap**); GpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap*); GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics*,GpCachedBitmap*,INT,INT); /* CustomLineCap */ GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**); GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL, GpCustomLineCap**); GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*); GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*); GpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap); GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*); GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL); GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap, GpLineCap); GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*); GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin); GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*); GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap*,REAL); GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL); GpStatus WINGDIPAPI GdipGetCustomLineCapType(GpCustomLineCap*,CustomLineCapType*); /* Font */ GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**); GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily*, REAL, INT, Unit, GpFont**); GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**); GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**); GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**); GpStatus WINGDIPAPI GdipDeleteFont(GpFont*); GpStatus WINGDIPAPI GdipGetLogFontA(GpFont*,GpGraphics*,LOGFONTA*); GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*); GpStatus WINGDIPAPI GdipGetFamily(GpFont*, GpFontFamily**); GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*); GpStatus WINGDIPAPI GdipGetFontSize(GpFont*, REAL*); GpStatus WINGDIPAPI GdipGetFontStyle(GpFont*, INT*); GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont*, GDIPCONST GpGraphics*, REAL*); GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*, REAL, REAL*); /* FontCollection */ GpStatus WINGDIPAPI GdipNewInstalledFontCollection(GpFontCollection**); GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**); GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**); GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*); GpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection*, GDIPCONST void*,INT); GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*); GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT, GpFontFamily*[], INT*); /* FontFamily */ GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*, GpFontFamily**); GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*, GpFontCollection*, GpFontFamily**); GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*); GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*, WCHAR*, LANGID); GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*, INT, UINT16*); GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*, INT, UINT16*); GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*, INT, UINT16*); GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**); GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**); GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**); GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*, INT, UINT16*); GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily *, INT, BOOL*); /* Graphics */ GpStatus WINGDIPAPI GdipFlush(GpGraphics*, GpFlushIntention); GpStatus WINGDIPAPI GdipBeginContainer(GpGraphics*,GDIPCONST GpRectF*,GDIPCONST GpRectF*,GpUnit,GraphicsContainer*); GpStatus WINGDIPAPI GdipBeginContainer2(GpGraphics*,GraphicsContainer*); GpStatus WINGDIPAPI GdipBeginContainerI(GpGraphics*,GDIPCONST GpRect*,GDIPCONST GpRect*,GpUnit,GraphicsContainer*); GpStatus WINGDIPAPI GdipEndContainer(GpGraphics*,GraphicsContainer); GpStatus WINGDIPAPI GdipComment(GpGraphics*,UINT,GDIPCONST BYTE*); GpStatus WINGDIPAPI GdipCreateFromHDC(HDC,GpGraphics**); GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC,HANDLE,GpGraphics**); GpStatus WINGDIPAPI GdipCreateFromHWND(HWND,GpGraphics**); GpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND,GpGraphics**); HPALETTE WINGDIPAPI GdipCreateHalftonePalette(void); GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *); GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL); GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL); GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL); GpStatus WINGDIPAPI GdipDrawCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipDrawCurve3(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,INT,INT,REAL); GpStatus WINGDIPAPI GdipDrawCurve3I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,INT,INT,REAL); GpStatus WINGDIPAPI GdipDrawDriverString(GpGraphics*,GDIPCONST UINT16*,INT, GDIPCONST GpFont*,GDIPCONST GpBrush*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*); GpStatus WINGDIPAPI GdipDrawEllipse(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawEllipseI(GpGraphics*,GpPen*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawImage(GpGraphics*,GpImage*,REAL,REAL); GpStatus WINGDIPAPI GdipDrawImageI(GpGraphics*,GpImage*,INT,INT); GpStatus WINGDIPAPI GdipDrawImagePointRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL,REAL,REAL,GpUnit); GpStatus WINGDIPAPI GdipDrawImagePointRectI(GpGraphics*,GpImage*,INT,INT,INT,INT,INT,INT,GpUnit); GpStatus WINGDIPAPI GdipDrawImagePoints(GpGraphics*,GpImage*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawImagePointsI(GpGraphics*,GpImage*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics*,GpImage*, GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,GpUnit, GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*); GpStatus WINGDIPAPI GdipDrawImagePointsRectI(GpGraphics*,GpImage*, GDIPCONST GpPoint*,INT,INT,INT,INT,INT,GpUnit, GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*); GpStatus WINGDIPAPI GdipDrawImageRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics*,GpImage*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawImageRectRect(GpGraphics*,GpImage*,REAL,REAL,REAL, REAL,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort, VOID*); GpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics*,GpImage*,INT,INT,INT, INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort, VOID*); GpStatus WINGDIPAPI GdipDrawLine(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawLineI(GpGraphics*,GpPen*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawLines(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawLinesI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawPath(GpGraphics*,GpPen*,GpPath*); GpStatus WINGDIPAPI GdipDrawPie(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawPieI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL); GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics*,GpPen*,GDIPCONST GpPointF*, INT); GpStatus WINGDIPAPI GdipDrawPolygonI(GpGraphics*,GpPen*,GDIPCONST GpPoint*, INT); GpStatus WINGDIPAPI GdipDrawRectangle(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawRectangleI(GpGraphics*,GpPen*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics*,GpPen*,GDIPCONST GpRectF*,INT); GpStatus WINGDIPAPI GdipDrawRectanglesI(GpGraphics*,GpPen*,GDIPCONST GpRect*,INT); GpStatus WINGDIPAPI GdipDrawString(GpGraphics*,GDIPCONST WCHAR*,INT, GDIPCONST GpFont*,GDIPCONST RectF*, GDIPCONST GpStringFormat*, GDIPCONST GpBrush*); GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoint(GpGraphics*,GDIPCONST GpMetafile*, GDIPCONST GpPointF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointI(GpGraphics*,GDIPCONST GpMetafile*, GDIPCONST GpPoint*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); GpStatus WINGDIPAPI GdipEnumerateMetafileDestRect(GpGraphics*,GDIPCONST GpMetafile*, GDIPCONST GpRectF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); GpStatus WINGDIPAPI GdipEnumerateMetafileDestRectI(GpGraphics*,GDIPCONST GpMetafile*, GDIPCONST GpRect*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoints(GpGraphics*, GDIPCONST GpMetafile*,GDIPCONST GpPointF*,INT,GDIPCONST GpRectF*,Unit, EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); GpStatus WINGDIPAPI GdipFillClosedCurve2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT, REAL,GpFillMode); GpStatus WINGDIPAPI GdipFillClosedCurve2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT, REAL,GpFillMode); GpStatus WINGDIPAPI GdipFillClosedCurve(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipFillClosedCurveI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipFillEllipse(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipFillEllipseI(GpGraphics*,GpBrush*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipFillPath(GpGraphics*,GpBrush*,GpPath*); GpStatus WINGDIPAPI GdipFillPie(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipFillPieI(GpGraphics*,GpBrush*,INT,INT,INT,INT,REAL,REAL); GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics*,GpBrush*,GDIPCONST GpPointF*, INT,GpFillMode); GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*, INT,GpFillMode); GpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics*,GpBrush*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics*,GpBrush*,GDIPCONST GpRectF*,INT); GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT); GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*); GpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*); GpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics*,GpRectF*); GpStatus WINGDIPAPI GdipGetClipBoundsI(GpGraphics*,GpRect*); GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*); GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*); GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*); GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*); GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*); GpStatus WINGDIPAPI GdipGetImageDecoders(UINT,UINT,ImageCodecInfo*); GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT*,UINT*); GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**); GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*); GpStatus WINGDIPAPI GdipGetNearestColor(GpGraphics*,ARGB*); GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*); GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*); GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*); GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*); GpStatus WINGDIPAPI GdipGetTextContrast(GpGraphics*,UINT*); GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*); GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*); GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics*,ARGB); GpStatus WINGDIPAPI GdipGraphicsSetAbort(GpGraphics*,GdiplusAbort*); GpStatus WINGDIPAPI GdipGetVisibleClipBounds(GpGraphics*,GpRectF*); GpStatus WINGDIPAPI GdipGetVisibleClipBoundsI(GpGraphics*,GpRect*); GpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics*, BOOL*); GpStatus WINGDIPAPI GdipIsVisiblePoint(GpGraphics*,REAL,REAL,BOOL*); GpStatus WINGDIPAPI GdipIsVisiblePointI(GpGraphics*,INT,INT,BOOL*); GpStatus WINGDIPAPI GdipIsVisibleRect(GpGraphics*,REAL,REAL,REAL,REAL,BOOL*); GpStatus WINGDIPAPI GdipIsVisibleRectI(GpGraphics*,INT,INT,INT,INT,BOOL*); GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*, GDIPCONST WCHAR*, INT, GDIPCONST GpFont*, GDIPCONST RectF*, GDIPCONST GpStringFormat*, INT, GpRegion**); GpStatus WINGDIPAPI GdipMeasureDriverString(GpGraphics*,GDIPCONST UINT16*,INT, GDIPCONST GpFont*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*,RectF*); GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT, GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*); GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder); GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR*,HDC,EmfType, GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR*,HDC,EmfType, GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipRecordMetafileI(HDC,EmfType,GDIPCONST GpRect*, MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC); GpStatus WINGDIPAPI GdipResetClip(GpGraphics*); GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*); GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState); GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*); GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics*,HRGN,CombineMode); GpStatus WINGDIPAPI GdipSetClipGraphics(GpGraphics*,GpGraphics*,CombineMode); GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode); GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode); GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode); GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode); GpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics*,CompositingMode); GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality); GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode); GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL); GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit); GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode); GpStatus WINGDIPAPI GdipSetRenderingOrigin(GpGraphics*,INT,INT); GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode); GpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics*,UINT); GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics*,TextRenderingHint); GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*); GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace, GpPointF *, INT); GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace, GpPoint *, INT); GpStatus WINGDIPAPI GdipTranslateClip(GpGraphics*,REAL,REAL); GpStatus WINGDIPAPI GdipTranslateClipI(GpGraphics*,INT,INT); GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder); /* GraphicsPath */ GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathBezierI(GpPath*,INT,INT,INT,INT,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL); GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipAddPathCurve(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL); GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipAddPathCurve3(GpPath*,GDIPCONST GpPointF*,INT,INT,INT,REAL); GpStatus WINGDIPAPI GdipAddPathCurve3I(GpPath*,GDIPCONST GpPoint*,INT,INT,INT,REAL); GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL); GpStatus WINGDIPAPI GdipAddPathPie(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathPieI(GpPath*,INT,INT,INT,INT,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathRectangles(GpPath*,GDIPCONST GpRectF*,INT); GpStatus WINGDIPAPI GdipAddPathRectanglesI(GpPath*,GDIPCONST GpRect*,INT); GpStatus WINGDIPAPI GdipAddPathString(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST RectF*,GDIPCONST GpStringFormat*); GpStatus WINGDIPAPI GdipAddPathStringI(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST Rect*,GDIPCONST GpStringFormat*); GpStatus WINGDIPAPI GdipClearPathMarkers(GpPath*); GpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**); GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*); GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*); GpStatus WINGDIPAPI GdipCreatePath(GpFillMode,GpPath**); GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF*,GDIPCONST BYTE*,INT, GpFillMode,GpPath**); GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**); GpStatus WINGDIPAPI GdipDeletePath(GpPath*); GpStatus WINGDIPAPI GdipFlattenPath(GpPath*,GpMatrix*,REAL); GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*, GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*, GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*); GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*); GpStatus WINGDIPAPI GdipGetPathLastPoint(GpPath*,GpPointF*); GpStatus WINGDIPAPI GdipGetPathPoints(GpPath*,GpPointF*,INT); GpStatus WINGDIPAPI GdipGetPathPointsI(GpPath*,GpPoint*,INT); GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT); GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*); GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*); GpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*); GpStatus WINGDIPAPI GdipResetPath(GpPath*); GpStatus WINGDIPAPI GdipReversePath(GpPath*); GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode); GpStatus WINGDIPAPI GdipSetPathMarker(GpPath*); GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*); GpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*); GpStatus WINGDIPAPI GdipWarpPath(GpPath*,GpMatrix*,GDIPCONST GpPointF*,INT,REAL, REAL,REAL,REAL,WarpMode,REAL); GpStatus WINGDIPAPI GdipWidenPath(GpPath*,GpPen*,GpMatrix*,REAL); /* HatchBrush */ GpStatus WINGDIPAPI GdipCreateHatchBrush(GpHatchStyle,ARGB,ARGB,GpHatch**); GpStatus WINGDIPAPI GdipGetHatchBackgroundColor(GpHatch*,ARGB*); GpStatus WINGDIPAPI GdipGetHatchForegroundColor(GpHatch*,ARGB*); GpStatus WINGDIPAPI GdipGetHatchStyle(GpHatch*,GpHatchStyle*); /* Image */ GpStatus WINGDIPAPI GdipCloneImage(GpImage*, GpImage**); GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes*,GpImageAttributes**); GpStatus WINGDIPAPI GdipDisposeImage(GpImage*); GpStatus WINGDIPAPI GdipEmfToWmfBits(HENHMETAFILE,UINT,LPBYTE,INT,INT); GpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage*,ImageItemData*); GpStatus WINGDIPAPI GdipFindNextImageItem(GpImage*,ImageItemData*); GpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage*,UINT,UINT,PropertyItem*); GpStatus WINGDIPAPI GdipGetImageBounds(GpImage*,GpRectF*,GpUnit*); GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*); GpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*); GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*); GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*); GpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*); GpStatus WINGDIPAPI GdipGetImagePalette(GpImage*,ColorPalette*,INT); GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage*,INT*); GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*); GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*); GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage*,UINT,UINT,GpImage**,GetThumbnailImageAbort,VOID*); GpStatus WINGDIPAPI GdipGetImageType(GpImage*,ImageType*); GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*); GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*); GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage*,UINT*); GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*); GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*); GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*); GpStatus WINGDIPAPI GdipGetPropertySize(GpImage*,UINT*,UINT*); GpStatus WINGDIPAPI GdipImageForceValidation(GpImage*); GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*); GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage*,UINT*); GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage*,GUID*,UINT); GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage*,RotateFlipType); GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage*,GDIPCONST GUID*,UINT); GpStatus WINGDIPAPI GdipImageSetAbort(GpImage*,GdiplusAbort*); GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR*,GpImage**); GpStatus WINGDIPAPI GdipLoadImageFromFileICM(GDIPCONST WCHAR*,GpImage**); GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream*,GpImage**); GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream*,GpImage**); GpStatus WINGDIPAPI GdipRemovePropertyItem(GpImage*,PROPID); GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage*,GDIPCONST WCHAR*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*); GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage*,IStream*, GDIPCONST CLSID*,GDIPCONST EncoderParameters*); GpStatus WINGDIPAPI GdipSetImagePalette(GpImage*,GDIPCONST ColorPalette*); GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage*,GDIPCONST PropertyItem*); /* ImageAttributes */ GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**); GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*); GpStatus WINGDIPAPI GdipGetImageAttributesAdjustedPalette(GpImageAttributes*, ColorPalette*,ColorAdjustType); GpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes*, BOOL); GpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes*, ColorAdjustType,BOOL,ARGB,ARGB); GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes*, ColorAdjustType,BOOL,GDIPCONST ColorMatrix*,GDIPCONST ColorMatrix*, ColorMatrixFlags); GpStatus WINGDIPAPI GdipSetImageAttributesGamma(GpImageAttributes*, ColorAdjustType,BOOL,REAL); GpStatus WINGDIPAPI GdipSetImageAttributesNoOp(GpImageAttributes*, ColorAdjustType,BOOL); GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannel(GpImageAttributes*, ColorAdjustType,BOOL,ColorChannelFlags); GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannelColorProfile( GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST WCHAR*); GpStatus WINGDIPAPI GdipSetImageAttributesRemapTable(GpImageAttributes*, ColorAdjustType,BOOL,UINT,GDIPCONST ColorMap*); GpStatus WINGDIPAPI GdipSetImageAttributesThreshold(GpImageAttributes*, ColorAdjustType,BOOL,REAL); GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes*, ColorAdjustType); GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode, ARGB,BOOL); GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes*, ColorAdjustType); /* LinearGradientBrush */ GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*, ARGB,ARGB,GpWrapMode,GpLineGradient**); GpStatus WINGDIPAPI GdipCreateLineBrushI(GDIPCONST GpPoint*,GDIPCONST GpPoint*, ARGB,ARGB,GpWrapMode,GpLineGradient**); GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB, LinearGradientMode,GpWrapMode,GpLineGradient**); GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB, LinearGradientMode,GpWrapMode,GpLineGradient**); GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*, ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*, ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*); GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*); GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*); GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*); GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*); GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*, GDIPCONST REAL*,INT); GpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient*,REAL*,REAL*,INT); GpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient*,INT*); GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient*,GDIPCONST ARGB*, GDIPCONST REAL*,INT); GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient*,ARGB*,REAL*,INT); GpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient*,INT*); GpStatus WINGDIPAPI GdipGetLineTransform(GpLineGradient*,GpMatrix*); GpStatus WINGDIPAPI GdipMultiplyLineTransform(GpLineGradient*,GDIPCONST GpMatrix*,GpMatrixOrder); GpStatus WINGDIPAPI GdipResetLineTransform(GpLineGradient*); GpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient*,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipScaleLineTransform(GpLineGradient*,REAL,REAL, GpMatrixOrder); GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB); GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL); GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL); GpStatus WINGDIPAPI GdipSetLineTransform(GpLineGradient*,GDIPCONST GpMatrix*); GpStatus WINGDIPAPI GdipSetLineLinearBlend(GpLineGradient*,REAL,REAL); GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode); GpStatus WINGDIPAPI GdipTranslateLineTransform(GpLineGradient*,REAL,REAL, GpMatrixOrder); /* Matrix */ GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*,GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**); GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*); GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*); GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*); GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*, GDIPCONST GpMatrix*, BOOL*); GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*, BOOL*); GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*, BOOL*); GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix*,GDIPCONST GpMatrix*,GpMatrixOrder); GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix*,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix*,GpPointF*,INT); GpStatus WINGDIPAPI GdipTransformMatrixPointsI(GpMatrix*,GpPoint*,INT); GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipVectorTransformMatrixPoints(GpMatrix*,GpPointF*,INT); GpStatus WINGDIPAPI GdipVectorTransformMatrixPointsI(GpMatrix*,GpPoint*,INT); /* Metafile */ GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics*,GpMetafile*,INT*, EmfType,const WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT*,const WCHAR*,EmfType,const WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**); GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL, GDIPCONST WmfPlaceableFileHeader*,GpMetafile**); GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*, GDIPCONST WmfPlaceableFileHeader*, GpMetafile**); GpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipCreateMetafileFromStream(IStream*,GpMetafile**); GpStatus WINGDIPAPI GdipGetHemfFromMetafile(GpMetafile*,HENHMETAFILE*); GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile*,EmfPlusRecordType,UINT,UINT,GDIPCONST BYTE*); GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT); GpStatus WINGDIPAPI GdipRecordMetafile(HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**); /* MetafileHeader */ GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE,MetafileHeader*); GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR*,MetafileHeader*); GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*); GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*); GpStatus WINGDIPAPI GdipGetMetafileHeaderFromWmf(HMETAFILE,GDIPCONST WmfPlaceableFileHeader*,MetafileHeader*); /* Notification */ GpStatus WINAPI GdiplusNotificationHook(ULONG_PTR*); void WINAPI GdiplusNotificationUnhook(ULONG_PTR); /* PathGradientBrush */ GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**); GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**); GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*, GpPathGradient**); GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT); GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*); GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*); GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*); GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*); GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*); GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*); GpStatus WINGDIPAPI GdipGetPathGradientPath(GpPathGradient*,GpPath*); GpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient*,ARGB*,REAL*,INT); GpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient*,INT*); GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*); GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient*, GDIPCONST ARGB*,GDIPCONST REAL*,INT); GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*); GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*); GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*, ARGB*,INT*); GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*); GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT); GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB); GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient*,GpPointF*); GpStatus WINGDIPAPI GdipSetPathGradientCenterPointI(GpPathGradient*,GpPoint*); GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient*,REAL,REAL); GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient*,BOOL); GpStatus WINGDIPAPI GdipSetPathGradientPath(GpPathGradient*,GDIPCONST GpPath*); GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient*,REAL,REAL); GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*, GDIPCONST ARGB*,INT*); GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode); GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorCount(GpPathGradient*,INT*); /* PathIterator */ GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*); GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*); GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*, INT,INT); GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*); GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*); GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT); GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*); GpStatus WINGDIPAPI GdipPathIterIsValid(GpPathIterator*,BOOL*); GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*); GpStatus WINGDIPAPI GdipPathIterNextMarkerPath(GpPathIterator*,INT*,GpPath*); GpStatus WINGDIPAPI GdipPathIterNextPathType(GpPathIterator*,INT*,BYTE*,INT*,INT*); GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*); GpStatus WINGDIPAPI GdipPathIterNextSubpathPath(GpPathIterator*,INT*,GpPath*,BOOL*); GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*); /* Pen */ GpStatus WINGDIPAPI GdipClonePen(GpPen*,GpPen**); GpStatus WINGDIPAPI GdipCreatePen1(ARGB,REAL,GpUnit,GpPen**); GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**); GpStatus WINGDIPAPI GdipDeletePen(GpPen*); GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**); GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*); GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen*,INT*); GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**); GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**); GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT); GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*); GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*); GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*); GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*); GpStatus WINGDIPAPI GdipGetPenTransform(GpPen *, GpMatrix *); GpStatus WINGDIPAPI GdipResetPenTransform(GpPen*); GpStatus WINGDIPAPI GdipScalePenTransform(GpPen*,REAL,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*); GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB); GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT); GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*); GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*); GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT); GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap); GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL); GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle); GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap); GpStatus WINGDIPAPI GdipGetPenFillType(GpPen*,GpPenType*); GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap); GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin); GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment); GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL); GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap); GpStatus WINGDIPAPI GdipSetPenTransform(GpPen *, GpMatrix *); GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL); GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen*,GpDashCap*); GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen*,GpLineCap*); GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen*,GpLineJoin*); GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen*,REAL*); GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen*,GpLineCap*); GpStatus WINGDIPAPI GdipGetPenUnit(GpPen*,GpUnit*); GpStatus WINGDIPAPI GdipGetPenWidth(GpPen*,REAL*); GpStatus WINGDIPAPI GdipTranslatePenTransform(GpPen*,REAL,REAL,GpMatrixOrder); /* Region */ GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *, GpRegion **); GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *, GpPath *, CombineMode); GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *, GDIPCONST GpRectF *, CombineMode); GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *, GDIPCONST GpRect *, CombineMode); GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *, GpRegion *, CombineMode); GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **); GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *, GpRegion **); GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *, GpRegion **); GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect *, GpRegion **); GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *, INT, GpRegion **); GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN, GpRegion **); GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *); GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *, GpGraphics *, GpRectF *); GpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion *, GpGraphics *, GpRect *); GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *, BYTE *, UINT, UINT *); GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *, UINT *); GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *, GpGraphics *, HRGN *); GpStatus WINGDIPAPI GdipGetRegionScans(GpRegion *, GpRectF *, INT *, GpMatrix *); GpStatus WINGDIPAPI GdipGetRegionScansI(GpRegion *, GpRect *, INT *, GpMatrix *); GpStatus WINGDIPAPI GdipGetRegionScansCount(GpRegion *, UINT *, GpMatrix *); GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion *, GpGraphics *, BOOL *); GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion *, GpRegion *, GpGraphics *, BOOL *); GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *, GpGraphics *, BOOL *); GpStatus WINGDIPAPI GdipIsVisibleRegionPoint(GpRegion *, REAL, REAL, GpGraphics *, BOOL *); GpStatus WINGDIPAPI GdipIsVisibleRegionPointI(GpRegion *, INT, INT, GpGraphics *, BOOL *); GpStatus WINGDIPAPI GdipIsVisibleRegionRect(GpRegion *, REAL, REAL, REAL, REAL, GpGraphics *, BOOL *); GpStatus WINGDIPAPI GdipIsVisibleRegionRectI(GpRegion *, INT, INT, INT, INT, GpGraphics *, BOOL *); GpStatus WINGDIPAPI GdipSetEmpty(GpRegion *); GpStatus WINGDIPAPI GdipSetInfinite(GpRegion *); GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *, GpMatrix *); GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *, REAL, REAL); GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *, INT, INT); /* SolidBrush */ GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**); GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*); GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB); /* StringFormat */ GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**); GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**); GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*); GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*); GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*, StringDigitSubstitute*); GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*); GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*); GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*); GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( GDIPCONST GpStringFormat*, INT*); GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*); GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*); GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*); GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment); GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute); GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT); GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment); GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges( GpStringFormat*, INT, GDIPCONST CharacterRange*); GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*); GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming); GpStatus WINGDIPAPI GdipSetStringFormatFlags(GpStringFormat*, INT); GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **); GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **); /* Texture */ GpStatus WINGDIPAPI GdipCreateTexture(GpImage*,GpWrapMode,GpTexture**); GpStatus WINGDIPAPI GdipCreateTexture2(GpImage*,GpWrapMode,REAL,REAL,REAL,REAL,GpTexture**); GpStatus WINGDIPAPI GdipCreateTexture2I(GpImage*,GpWrapMode,INT,INT,INT,INT,GpTexture**); GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*, REAL,REAL,REAL,REAL,GpTexture**); GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*, INT,INT,INT,INT,GpTexture**); GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*); GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*, GpWrapMode*); GpStatus WINGDIPAPI GdipMultiplyTextureTransform(GpTexture*, GDIPCONST GpMatrix*,GpMatrixOrder); GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture*); GpStatus WINGDIPAPI GdipRotateTextureTransform(GpTexture*,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipScaleTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*); GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*, GpWrapMode); GpStatus WINGDIPAPI GdipTranslateTextureTransform(GpTexture*,REAL,REAL, GpMatrixOrder); /* Without wrapper methods */ GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**); GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size); GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders); GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum,void*); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/gdiplusgpstubs.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSGPSTUBS_H #define _GDIPLUSGPSTUBS_H #ifdef __cplusplus class GpGraphics {}; class GpPen {}; class GpBrush {}; class GpHatch : public GpBrush {}; class GpSolidFill : public GpBrush {}; class GpPath {}; class GpMatrix {}; class GpPathIterator {}; class GpCustomLineCap {}; class GpAdjustableArrowCap : public GpCustomLineCap {}; class GpImage {}; class GpMetafile : public GpImage {}; class GpImageAttributes {}; class GpCachedBitmap {}; class GpBitmap : public GpImage {}; class GpPathGradient : public GpBrush {}; class GpLineGradient : public GpBrush {}; class GpTexture : public GpBrush {}; class GpFont {}; class GpFontCollection {}; class GpFontFamily {}; class GpStringFormat {}; class GpRegion {}; class CGpEffect {}; #else /* end of c++ declarations */ typedef struct GpGraphics GpGraphics; typedef struct GpPen GpPen; typedef struct GpBrush GpBrush; typedef struct GpHatch GpHatch; typedef struct GpSolidFill GpSolidFill; typedef struct GpPath GpPath; typedef struct GpMatrix GpMatrix; typedef struct GpPathIterator GpPathIterator; typedef struct GpCustomLineCap GpCustomLineCap; typedef struct GpAdjustableArrowCap GpAdjustableArrowCap; typedef struct GpImage GpImage; typedef struct GpMetafile GpMetafile; typedef struct GpImageAttributes GpImageAttributes; typedef struct GpCachedBitmap GpCachedBitmap; typedef struct GpBitmap GpBitmap; typedef struct GpPathGradient GpPathGradient; typedef struct GpLineGradient GpLineGradient; typedef struct GpTexture GpTexture; typedef struct GpFont GpFont; typedef struct GpFontCollection GpFontCollection; typedef struct GpFontFamily GpFontFamily; typedef struct GpStringFormat GpStringFormat; typedef struct GpRegion GpRegion; typedef struct CGpEffect CGpEffect; #endif /* end of c declarations */ typedef Status GpStatus; typedef Unit GpUnit; typedef BrushType GpBrushType; typedef PointF GpPointF; typedef FillMode GpFillMode; typedef PathData GpPathData; typedef LineCap GpLineCap; typedef RectF GpRectF; typedef Rect GpRect; typedef LineJoin GpLineJoin; typedef DashCap GpDashCap; typedef DashStyle GpDashStyle; typedef MatrixOrder GpMatrixOrder; typedef Point GpPoint; typedef WrapMode GpWrapMode; typedef Color GpColor; typedef FlushIntention GpFlushIntention; typedef CoordinateSpace GpCoordinateSpace; typedef PenAlignment GpPenAlignment; typedef PenType GpPenType; typedef HatchStyle GpHatchStyle; #endif ================================================ FILE: wine/windows/gdiplusimaging.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSIMAGING_H #define _GDIPLUSIMAGING_H DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatBMP, 0xb96b3cab, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatEMF, 0xb96b3cac, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatWMF, 0xb96b3cad, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatJPEG, 0xb96b3cae, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatPNG, 0xb96b3caf, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatGIF, 0xb96b3cb0, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatTIFF, 0xb96b3cb1, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatEXIF, 0xb96b3cb2, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(ImageFormatIcon, 0xb96b3cb5, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e); DEFINE_GUID(FrameDimensionTime, 0x6aedbd6d, 0x3fb5, 0x418a, 0x83, 0xa6, 0x7f, 0x45, 0x22, 0x9d, 0xc8, 0x72); DEFINE_GUID(FrameDimensionPage, 0x7462dc86, 0x6180, 0x4c7e, 0x8e, 0x3f, 0xee, 0x73, 0x33, 0xa7, 0xa4, 0x83); DEFINE_GUID(FrameDimensionResolution, 0x84236f7b, 0x3bd3, 0x428f, 0x8d, 0xab, 0x4e, 0xa1, 0x43, 0x9c, 0xa3, 0x15); enum ImageLockMode { ImageLockModeRead = 1, ImageLockModeWrite = 2, ImageLockModeUserInputBuf = 4 }; enum RotateFlipType { RotateNoneFlipNone = 0, Rotate180FlipXY = RotateNoneFlipNone, Rotate90FlipNone = 1, Rotate270FlipXY = Rotate90FlipNone, Rotate180FlipNone = 2, RotateNoneFlipXY = Rotate180FlipNone, Rotate270FlipNone = 3, Rotate90FlipXY = Rotate270FlipNone, RotateNoneFlipX = 4, Rotate180FlipY = RotateNoneFlipX, Rotate90FlipX = 5, Rotate270FlipY = Rotate90FlipX, Rotate180FlipX = 6, RotateNoneFlipY = Rotate180FlipX, Rotate270FlipX = 7, Rotate90FlipY = Rotate270FlipX }; #ifdef __cplusplus class EncoderParameter { public: GUID Guid; ULONG NumberOfValues; ULONG Type; VOID* Value; }; class EncoderParameters { public: UINT Count; EncoderParameter Parameter[1]; }; class ImageCodecInfo { public: CLSID Clsid; GUID FormatID; const WCHAR* CodecName; const WCHAR* DllName; const WCHAR* FormatDescription; const WCHAR* FilenameExtension; const WCHAR* MimeType; DWORD Flags; DWORD Version; DWORD SigCount; DWORD SigSize; const BYTE* SigPattern; const BYTE* SigMask; }; class BitmapData { public: UINT Width; UINT Height; INT Stride; Gdiplus::PixelFormat PixelFormat; VOID* Scan0; UINT_PTR Reserved; }; class ImageItemData { public: UINT Size; UINT Position; VOID* Desc; UINT DescSize; VOID* Data; UINT DataSize; UINT Cookie; }; class PropertyItem { public: PROPID id; ULONG length; WORD type; VOID* value; }; #else /* end of c++ typedefs */ typedef enum ImageLockMode ImageLockMode; typedef enum RotateFlipType RotateFlipType; typedef struct EncoderParameter { GUID Guid; ULONG NumberOfValues; ULONG Type; VOID* Value; } EncoderParameter; typedef struct EncoderParameters { UINT Count; EncoderParameter Parameter[1]; } EncoderParameters; typedef struct ImageCodecInfo { CLSID Clsid; GUID FormatID; const WCHAR* CodecName; const WCHAR* DllName; const WCHAR* FormatDescription; const WCHAR* FilenameExtension; const WCHAR* MimeType; DWORD Flags; DWORD Version; DWORD SigCount; DWORD SigSize; const BYTE* SigPattern; const BYTE* SigMask; } ImageCodecInfo; typedef struct BitmapData { UINT Width; UINT Height; INT Stride; PixelFormat PixelFormat; VOID* Scan0; UINT_PTR Reserved; /* undocumented: stores the lock mode */ } BitmapData; typedef struct ImageItemData { UINT Size; UINT Position; VOID* Desc; UINT DescSize; VOID* Data; UINT DataSize; UINT Cookie; } ImageItemData; typedef struct PropertyItem { PROPID id; ULONG length; WORD type; VOID* value; } PropertyItem; #endif /* end of c typedefs */ /* property types */ #define PropertyTagTypeByte 1 #define PropertyTagTypeASCII 2 #define PropertyTagTypeShort 3 #define PropertyTagTypeLong 4 #define PropertyTagTypeRational 5 #define PropertyTagTypeUndefined 7 #define PropertyTagTypeSLONG 9 #define PropertyTagTypeSRational 10 /* property IDs */ #define PropertyTagExifIFD 0x8769 #define PropertyTagGpsIFD 0x8825 #define PropertyTagNewSubfileType 0x00FE #define PropertyTagSubfileType 0x00FF #define PropertyTagImageWidth 0x0100 #define PropertyTagImageHeight 0x0101 #define PropertyTagBitsPerSample 0x0102 #define PropertyTagCompression 0x0103 #define PropertyTagPhotometricInterp 0x0106 #define PropertyTagThreshHolding 0x0107 #define PropertyTagCellWidth 0x0108 #define PropertyTagCellHeight 0x0109 #define PropertyTagFillOrder 0x010A #define PropertyTagDocumentName 0x010D #define PropertyTagImageDescription 0x010E #define PropertyTagEquipMake 0x010F #define PropertyTagEquipModel 0x0110 #define PropertyTagStripOffsets 0x0111 #define PropertyTagOrientation 0x0112 #define PropertyTagSamplesPerPixel 0x0115 #define PropertyTagRowsPerStrip 0x0116 #define PropertyTagStripBytesCount 0x0117 #define PropertyTagMinSampleValue 0x0118 #define PropertyTagMaxSampleValue 0x0119 #define PropertyTagXResolution 0x011A #define PropertyTagYResolution 0x011B #define PropertyTagPlanarConfig 0x011C #define PropertyTagPageName 0x011D #define PropertyTagXPosition 0x011E #define PropertyTagYPosition 0x011F #define PropertyTagFreeOffset 0x0120 #define PropertyTagFreeByteCounts 0x0121 #define PropertyTagGrayResponseUnit 0x0122 #define PropertyTagGrayResponseCurve 0x0123 #define PropertyTagT4Option 0x0124 #define PropertyTagT6Option 0x0125 #define PropertyTagResolutionUnit 0x0128 #define PropertyTagPageNumber 0x0129 #define PropertyTagTransferFuncition 0x012D #define PropertyTagSoftwareUsed 0x0131 #define PropertyTagDateTime 0x0132 #define PropertyTagArtist 0x013B #define PropertyTagHostComputer 0x013C #define PropertyTagPredictor 0x013D #define PropertyTagWhitePoint 0x013E #define PropertyTagPrimaryChromaticities 0x013F #define PropertyTagColorMap 0x0140 #define PropertyTagHalftoneHints 0x0141 #define PropertyTagTileWidth 0x0142 #define PropertyTagTileLength 0x0143 #define PropertyTagTileOffset 0x0144 #define PropertyTagTileByteCounts 0x0145 #define PropertyTagInkSet 0x014C #define PropertyTagInkNames 0x014D #define PropertyTagNumberOfInks 0x014E #define PropertyTagDotRange 0x0150 #define PropertyTagTargetPrinter 0x0151 #define PropertyTagExtraSamples 0x0152 #define PropertyTagSampleFormat 0x0153 #define PropertyTagSMinSampleValue 0x0154 #define PropertyTagSMaxSampleValue 0x0155 #define PropertyTagTransferRange 0x0156 #define PropertyTagJPEGProc 0x0200 #define PropertyTagJPEGInterFormat 0x0201 #define PropertyTagJPEGInterLength 0x0202 #define PropertyTagJPEGRestartInterval 0x0203 #define PropertyTagJPEGLosslessPredictors 0x0205 #define PropertyTagJPEGPointTransforms 0x0206 #define PropertyTagJPEGQTables 0x0207 #define PropertyTagJPEGDCTables 0x0208 #define PropertyTagJPEGACTables 0x0209 #define PropertyTagYCbCrCoefficients 0x0211 #define PropertyTagYCbCrSubsampling 0x0212 #define PropertyTagYCbCrPositioning 0x0213 #define PropertyTagREFBlackWhite 0x0214 #define PropertyTagICCProfile 0x8773 #define PropertyTagGamma 0x0301 #define PropertyTagICCProfileDescriptor 0x0302 #define PropertyTagSRGBRenderingIntent 0x0303 #define PropertyTagImageTitle 0x0320 #define PropertyTagCopyright 0x8298 #define PropertyTagResolutionXUnit 0x5001 #define PropertyTagResolutionYUnit 0x5002 #define PropertyTagResolutionXLengthUnit 0x5003 #define PropertyTagResolutionYLengthUnit 0x5004 #define PropertyTagPrintFlags 0x5005 #define PropertyTagPrintFlagsVersion 0x5006 #define PropertyTagPrintFlagsCrop 0x5007 #define PropertyTagPrintFlagsBleedWidth 0x5008 #define PropertyTagPrintFlagsBleedWidthScale 0x5009 #define PropertyTagHalftoneLPI 0x500A #define PropertyTagHalftoneLPIUnit 0x500B #define PropertyTagHalftoneDegree 0x500C #define PropertyTagHalftoneShape 0x500D #define PropertyTagHalftoneMisc 0x500E #define PropertyTagHalftoneScreen 0x500F #define PropertyTagJPEGQuality 0x5010 #define PropertyTagGridSize 0x5011 #define PropertyTagThumbnailFormat 0x5012 #define PropertyTagThumbnailWidth 0x5013 #define PropertyTagThumbnailHeight 0x5014 #define PropertyTagThumbnailColorDepth 0x5015 #define PropertyTagThumbnailPlanes 0x5016 #define PropertyTagThumbnailRawBytes 0x5017 #define PropertyTagThumbnailSize 0x5018 #define PropertyTagThumbnailCompressedSize 0x5019 #define PropertyTagColorTransferFunction 0x501A #define PropertyTagThumbnailData 0x501B #define PropertyTagThumbnailImageWidth 0x5020 #define PropertyTagThumbnailImageHeight 0x5021 #define PropertyTagThumbnailBitsPerSample 0x5022 #define PropertyTagThumbnailCompression 0x5023 #define PropertyTagThumbnailPhotometricInterp 0x5024 #define PropertyTagThumbnailImageDescription 0x5025 #define PropertyTagThumbnailEquipMake 0x5026 #define PropertyTagThumbnailEquipModel 0x5027 #define PropertyTagThumbnailStripOffsets 0x5028 #define PropertyTagThumbnailOrientation 0x5029 #define PropertyTagThumbnailSamplesPerPixel 0x502A #define PropertyTagThumbnailRowsPerStrip 0x502B #define PropertyTagThumbnailStripBytesCount 0x502C #define PropertyTagThumbnailResolutionX 0x502D #define PropertyTagThumbnailResolutionY 0x502E #define PropertyTagThumbnailPlanarConfig 0x502F #define PropertyTagThumbnailResolutionUnit 0x5030 #define PropertyTagThumbnailTransferFunction 0x5031 #define PropertyTagThumbnailSoftwareUsed 0x5032 #define PropertyTagThumbnailDateTime 0x5033 #define PropertyTagThumbnailArtist 0x5034 #define PropertyTagThumbnailWhitePoint 0x5035 #define PropertyTagThumbnailPrimaryChromaticities 0x5036 #define PropertyTagThumbnailYCbCrCoefficients 0x5037 #define PropertyTagThumbnailYCbCrSubsampling 0x5038 #define PropertyTagThumbnailYCbCrPositioning 0x5039 #define PropertyTagThumbnailRefBlackWhite 0x503A #define PropertyTagThumbnailCopyRight 0x503B #define PropertyTagLuminanceTable 0x5090 #define PropertyTagChrominanceTable 0x5091 #define PropertyTagFrameDelay 0x5100 #define PropertyTagLoopCount 0x5101 #define PropertyTagGlobalPalette 0x5102 #define PropertyTagIndexBackground 0x5103 #define PropertyTagIndexTransparent 0x5104 #define PropertyTagPixelUnit 0x5110 #define PropertyTagPixelPerUnitX 0x5111 #define PropertyTagPixelPerUnitY 0x5112 #define PropertyTagPaletteHistogram 0x5113 #define PropertyTagExifExposureTime 0x829A #define PropertyTagExifFNumber 0x829D #define PropertyTagExifExposureProg 0x8822 #define PropertyTagExifSpectralSense 0x8824 #define PropertyTagExifISOSpeed 0x8827 #define PropertyTagExifOECF 0x8828 #define PropertyTagExifVer 0x9000 #define PropertyTagExifDTOrig 0x9003 #define PropertyTagExifDTDigitized 0x9004 #define PropertyTagExifCompConfig 0x9101 #define PropertyTagExifCompBPP 0x9102 #define PropertyTagExifShutterSpeed 0x9201 #define PropertyTagExifAperture 0x9202 #define PropertyTagExifBrightness 0x9203 #define PropertyTagExifExposureBias 0x9204 #define PropertyTagExifMaxAperture 0x9205 #define PropertyTagExifSubjectDist 0x9206 #define PropertyTagExifMeteringMode 0x9207 #define PropertyTagExifLightSource 0x9208 #define PropertyTagExifFlash 0x9209 #define PropertyTagExifFocalLength 0x920A #define PropertyTagExifMakerNote 0x927C #define PropertyTagExifUserComment 0x9286 #define PropertyTagExifDTSubsec 0x9290 #define PropertyTagExifDTOrigSS 0x9291 #define PropertyTagExifDTDigSS 0x9292 #define PropertyTagExifFPXVer 0xA000 #define PropertyTagExifColorSpace 0xA001 #define PropertyTagExifPixXDim 0xA002 #define PropertyTagExifPixYDim 0xA003 #define PropertyTagExifRelatedWav 0xA004 #define PropertyTagExifInterop 0xA005 #define PropertyTagExifFlashEnergy 0xA20B #define PropertyTagExifSpatialFR 0xA20C #define PropertyTagExifFocalXRes 0xA20E #define PropertyTagExifFocalYRes 0xA20F #define PropertyTagExifFocalResUnit 0xA210 #define PropertyTagExifSubjectLoc 0xA214 #define PropertyTagExifExposureIndex 0xA215 #define PropertyTagExifSensingMethod 0xA217 #define PropertyTagExifFileSource 0xA300 #define PropertyTagExifSceneType 0xA301 #define PropertyTagExifCfaPattern 0xA302 #define PropertyTagGpsVer 0x0000 #define PropertyTagGpsLatitudeRef 0x0001 #define PropertyTagGpsLatitude 0x0002 #define PropertyTagGpsLongitudeRef 0x0003 #define PropertyTagGpsLongitude 0x0004 #define PropertyTagGpsAltitudeRef 0x0005 #define PropertyTagGpsAltitude 0x0006 #define PropertyTagGpsGpsTime 0x0007 #define PropertyTagGpsGpsSatellites 0x0008 #define PropertyTagGpsGpsStatus 0x0009 #define PropertyTagGpsGpsMeasureMode 0x000A #define PropertyTagGpsGpsDop 0x000B #define PropertyTagGpsSpeedRef 0x000C #define PropertyTagGpsSpeed 0x000D #define PropertyTagGpsTrackRef 0x000E #define PropertyTagGpsTrack 0x000F #define PropertyTagGpsImgDirRef 0x0010 #define PropertyTagGpsImgDir 0x0011 #define PropertyTagGpsMapDatum 0x0012 #define PropertyTagGpsDestLatRef 0x0013 #define PropertyTagGpsDestLat 0x0014 #define PropertyTagGpsDestLongRef 0x0015 #define PropertyTagGpsDestLong 0x0016 #define PropertyTagGpsDestBearRef 0x0017 #define PropertyTagGpsDestBear 0x0018 #define PropertyTagGpsDestDistRef 0x0019 #define PropertyTagGpsDestDist 0x001A #endif /* _GDIPLUSIMAGING_H */ ================================================ FILE: wine/windows/gdiplusinit.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSINIT_H #define _GDIPLUSINIT_H enum DebugEventLevel { DebugEventLevelFatal, DebugEventLevelWarning }; typedef VOID (WINAPI *DebugEventProc)(enum DebugEventLevel, CHAR *); typedef Status (WINAPI *NotificationHookProc)(ULONG_PTR *); typedef void (WINAPI *NotificationUnhookProc)(ULONG_PTR); struct GdiplusStartupInput { UINT32 GdiplusVersion; DebugEventProc DebugEventCallback; BOOL SuppressBackgroundThread; BOOL SuppressExternalCodecs; #ifdef __cplusplus GdiplusStartupInput(DebugEventProc debugEventCallback = NULL, BOOL suppressBackgroundThread = FALSE, BOOL suppressExternalCodecs = FALSE) { GdiplusVersion = 1; DebugEventCallback = debugEventCallback; SuppressBackgroundThread = suppressBackgroundThread; SuppressExternalCodecs = suppressExternalCodecs; } #endif }; struct GdiplusStartupOutput { NotificationHookProc NotificationHook; NotificationUnhookProc NotificationUnhook; }; #ifdef __cplusplus extern "C" { #endif Status WINAPI GdiplusStartup(ULONG_PTR *, const struct GdiplusStartupInput *, struct GdiplusStartupOutput *); void WINAPI GdiplusShutdown(ULONG_PTR); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/gdiplusmem.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSMEM_H #define _GDIPLUSMEM_H #define WINGDIPAPI __stdcall #ifdef __cplusplus extern "C" { #endif void* WINGDIPAPI GdipAlloc(SIZE_T) __WINE_ALLOC_SIZE(1); void WINGDIPAPI GdipFree(void*); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/gdiplusmetaheader.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSMETAHEADER_H #define _GDIPLUSMETAHEADER_H typedef struct { DWORD iType; DWORD nSize; RECTL rclBounds; RECTL rclFrame; DWORD dSignature; DWORD nVersion; DWORD nBytes; DWORD nRecords; WORD nHandles; WORD sReserved; DWORD nDescription; DWORD offDescription; DWORD nPalEntries; SIZEL szlDevice; SIZEL szlMillimeters; } ENHMETAHEADER3; #include typedef struct { INT16 Left; INT16 Top; INT16 Right; INT16 Bottom; } PWMFRect16; typedef struct { UINT32 Key; INT16 Hmf; PWMFRect16 BoundingBox; INT16 Inch; UINT32 Reserved; INT16 Checksum; } WmfPlaceableFileHeader; #include #define GDIP_EMFPLUSFLAGS_DISPLAY 0x00000001 #ifdef __cplusplus class MetafileHeader { public: MetafileType Type; UINT Size; UINT Version; UINT EmfPlusFlags; REAL DpiX; REAL DpiY; INT X; INT Y; INT Width; INT Height; union { METAHEADER WmfHeader; ENHMETAHEADER3 EmfHeader; }; INT EmfPlusHeaderSize; INT LogicalDpiX; INT LogicalDpiY; public: MetafileType GetType() const { return Type; } UINT GetMetafileSize() const { return Size; } UINT GetVersion() const { return Version; } UINT GetEmfPlusFlags() const { return EmfPlusFlags; } REAL GetDpiX() const { return DpiX; } REAL GetDpiY() const { return DpiY; } VOID GetBounds (OUT Rect *r) const { r->X = X; r->Y = Y; r->Width = Width; r->Height = Height; } BOOL IsWmf() const { return ((Type == MetafileTypeWmf) || (Type == MetafileTypeWmfPlaceable)); } BOOL IsWmfPlaceable() const { return (Type == MetafileTypeWmfPlaceable); } BOOL IsEmf() const { return (Type == MetafileTypeEmf); } BOOL IsEmfOrEmfPlus() const { return (Type >= MetafileTypeEmf); } BOOL IsEmfPlus() const { return (Type >= MetafileTypeEmfPlusOnly); } BOOL IsEmfPlusDual() const { return (Type == MetafileTypeEmfPlusDual); } BOOL IsEmfPlusOnly() const { return (Type == MetafileTypeEmfPlusOnly); } BOOL IsDisplay() const { return IsEmfPlus() && ((EmfPlusFlags & GDIP_EMFPLUSFLAGS_DISPLAY) != 0); } const METAHEADER * GetWmfHeader() const { return IsWmf() ? &WmfHeader : NULL; } const ENHMETAHEADER3 * GetEmfHeader() const { return IsEmfOrEmfPlus() ? &EmfHeader : NULL; } }; #else /* end of c++ typedefs */ typedef struct MetafileHeader { MetafileType Type; UINT Size; UINT Version; UINT EmfPlusFlags; REAL DpiX; REAL DpiY; INT X; INT Y; INT Width; INT Height; union { METAHEADER WmfHeader; ENHMETAHEADER3 EmfHeader; } DUMMYUNIONNAME; INT EmfPlusHeaderSize; INT LogicalDpiX; INT LogicalDpiY; } MetafileHeader; #endif /* end of c typedefs */ #endif /* _GDIPLUSMETAHEADER_H */ ================================================ FILE: wine/windows/gdipluspixelformats.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSPIXELFORMATS_H #define _GDIPLUSPIXELFORMATS_H typedef DWORD ARGB; typedef INT PixelFormat; #define PixelFormatIndexed 0x00010000 #define PixelFormatGDI 0x00020000 #define PixelFormatAlpha 0x00040000 #define PixelFormatPAlpha 0x00080000 #define PixelFormatExtended 0x00100000 #define PixelFormatCanonical 0x00200000 #define PixelFormatUndefined 0 #define PixelFormatDontCare 0 #define PixelFormat1bppIndexed (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI) #define PixelFormat4bppIndexed (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI) #define PixelFormat8bppIndexed (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI) #define PixelFormat16bppGrayScale (4 | (16 << 8) | PixelFormatExtended) #define PixelFormat16bppRGB555 (5 | (16 << 8) | PixelFormatGDI) #define PixelFormat16bppRGB565 (6 | (16 << 8) | PixelFormatGDI) #define PixelFormat16bppARGB1555 (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI) #define PixelFormat24bppRGB (8 | (24 << 8) | PixelFormatGDI) #define PixelFormat32bppRGB (9 | (32 << 8) | PixelFormatGDI) #define PixelFormat32bppARGB (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical) #define PixelFormat32bppPARGB (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI) #define PixelFormat48bppRGB (12 | (48 << 8) | PixelFormatExtended) #define PixelFormat64bppARGB (13 | (64 << 8) | PixelFormatAlpha | PixelFormatCanonical | PixelFormatExtended) #define PixelFormat64bppPARGB (14 | (64 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatExtended) #define PixelFormat32bppCMYK (15 | (32 << 8)) #define PixelFormatMax 16 static inline BOOL IsIndexedPixelFormat(PixelFormat format) { return (format & PixelFormatIndexed) != 0; } static inline BOOL IsAlphaPixelFormat(PixelFormat format) { return (format & PixelFormatAlpha) != 0; } static inline BOOL IsCanonicalPixelFormat(PixelFormat format) { return (format & PixelFormatCanonical) != 0; } static inline BOOL IsExtendedPixelFormat(PixelFormat format) { return (format & PixelFormatExtended) != 0; } static inline UINT GetPixelFormatSize(PixelFormat format) { return (format >> 8) & 0xff; } enum PaletteFlags { PaletteFlagsHasAlpha = 1, PaletteFlagsGrayScale = 2, PaletteFlagsHalftone = 4 }; #ifdef __cplusplus struct ColorPalette { public: UINT Flags; UINT Count; ARGB Entries[1]; }; #else /* end of c++ typedefs */ typedef struct ColorPalette { UINT Flags; UINT Count; ARGB Entries[1]; } ColorPalette; #endif /* end of c typedefs */ typedef enum DitherType { DitherTypeNone, DitherTypeSolid, DitherTypeOrdered4x4, DitherTypeOrdered8x8, DitherTypeOrdered16x16, DitherTypeSpiral4x4, DitherTypeSpiral8x8, DitherTypeDualSpiral4x4, DitherTypeDualSpiral8x8, DitherTypeErrorDiffusion, DitherTypeMax } DitherType; typedef enum PaletteType { PaletteTypeCustom, PaletteTypeOptimal, PaletteTypeFixedBW, PaletteTypeFixedHalftone8, PaletteTypeFixedHalftone27, PaletteTypeFixedHalftone64, PaletteTypeFixedHalftone125, PaletteTypeFixedHalftone216, PaletteTypeFixedHalftone252, PaletteTypeFixedHalftone256 } PaletteType; #endif ================================================ FILE: wine/windows/gdiplustypes.h ================================================ /* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _GDIPLUSTYPES_H #define _GDIPLUSTYPES_H typedef float REAL; enum Status{ Ok = 0, GenericError = 1, InvalidParameter = 2, OutOfMemory = 3, ObjectBusy = 4, InsufficientBuffer = 5, NotImplemented = 6, Win32Error = 7, WrongState = 8, Aborted = 9, FileNotFound = 10, ValueOverflow = 11, AccessDenied = 12, UnknownImageFormat = 13, FontFamilyNotFound = 14, FontStyleNotFound = 15, NotTrueTypeFont = 16, UnsupportedGdiplusVersion = 17, GdiplusNotInitialized = 18, PropertyNotFound = 19, PropertyNotSupported = 20, ProfileNotFound = 21 }; #ifdef __cplusplus extern "C" { #endif typedef BOOL (CALLBACK * ImageAbort)(VOID *); typedef ImageAbort DrawImageAbort; typedef ImageAbort GetThumbnailImageAbort; typedef struct GdiplusAbort GdiplusAbort; typedef BOOL (CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*); #ifdef __cplusplus } #endif #ifdef __cplusplus class Point { public: Point() { X = Y = 0; } Point(IN const Point &pt) { X = pt.X; Y = pt.Y; } /* FIXME: missing constructor that takes a Size */ Point(IN INT x, IN INT y) { X = x; Y = y; } Point operator+(IN const Point& pt) const { return Point(X + pt.X, Y + pt.Y); } Point operator-(IN const Point& pt) const { return Point(X - pt.X, Y - pt.Y); } BOOL Equals(IN const Point& pt) { return (X == pt.X) && (Y == pt.Y); } public: INT X; INT Y; }; class PointF { public: PointF() { X = Y = 0.0f; } PointF(IN const PointF &pt) { X = pt.X; Y = pt.Y; } /* FIXME: missing constructor that takes a SizeF */ PointF(IN REAL x, IN REAL y) { X = x; Y = y; } PointF operator+(IN const PointF& pt) const { return PointF(X + pt.X, Y + pt.Y); } PointF operator-(IN const PointF& pt) const { return PointF(X - pt.X, Y - pt.Y); } BOOL Equals(IN const PointF& pt) { return (X == pt.X) && (Y == pt.Y); } public: REAL X; REAL Y; }; class PathData { public: PathData() { Count = 0; Points = NULL; Types = NULL; } ~PathData() { if (Points != NULL) { delete Points; } if (Types != NULL) { delete Types; } } private: PathData(const PathData &); PathData& operator=(const PathData &); public: INT Count; PointF* Points; BYTE* Types; }; /* FIXME: missing the methods. */ class RectF { public: REAL X; REAL Y; REAL Width; REAL Height; }; /* FIXME: missing the methods. */ class Rect { public: INT X; INT Y; INT Width; INT Height; }; class CharacterRange { public: CharacterRange() { First = Length = 0; } CharacterRange(INT first, INT length) { First = first; Length = length; } CharacterRange& operator=(const CharacterRange& rhs) { First = rhs.First; Length = rhs.Length; return *this; } public: INT First; INT Length; }; #else /* end of c++ typedefs */ typedef struct Point { INT X; INT Y; } Point; typedef struct PointF { REAL X; REAL Y; } PointF; typedef struct PathData { INT Count; PointF* Points; BYTE* Types; } PathData; typedef struct RectF { REAL X; REAL Y; REAL Width; REAL Height; } RectF; typedef struct Rect { INT X; INT Y; INT Width; INT Height; } Rect; typedef struct CharacterRange { INT First; INT Length; } CharacterRange; typedef enum Status Status; #endif /* end of c typedefs */ #endif ================================================ FILE: wine/windows/guiddef.h ================================================ /* * Copyright (C) 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef GUID_DEFINED #define GUID_DEFINED #ifdef __WIDL__ typedef struct { unsigned long Data1; unsigned short Data2; unsigned short Data3; byte Data4[ 8 ]; } GUID; #else typedef struct _GUID { #ifdef _MSC_VER unsigned long Data1; #else unsigned int Data1; #endif unsigned short Data2; unsigned short Data3; unsigned char Data4[ 8 ]; } GUID; #endif /* Macros for __uuidof emulation */ #if defined(__cplusplus) && !defined(_MSC_VER) extern "C++" { template const GUID &__wine_uuidof(); } #define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ extern "C++" { \ template<> inline const GUID &__wine_uuidof() { \ static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \ return __uuid_inst; \ } \ template<> inline const GUID &__wine_uuidof() { \ return __wine_uuidof(); \ } \ } #define __uuidof(type) __wine_uuidof() #else #define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) #endif #endif #undef DEFINE_GUID #ifdef INITGUID #ifdef __cplusplus #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ EXTERN_C const GUID name DECLSPEC_HIDDEN; \ EXTERN_C const GUID name = \ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } #else #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ const GUID name DECLSPEC_HIDDEN; \ const GUID name = \ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } #endif #else #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ EXTERN_C const GUID name DECLSPEC_HIDDEN #endif #define DEFINE_OLEGUID(name, l, w1, w2) \ DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46) #ifndef _GUIDDEF_H_ #define _GUIDDEF_H_ #ifndef __LPGUID_DEFINED__ #define __LPGUID_DEFINED__ typedef GUID *LPGUID; #endif #ifndef __LPCGUID_DEFINED__ #define __LPCGUID_DEFINED__ typedef const GUID *LPCGUID; #endif #ifndef __IID_DEFINED__ #define __IID_DEFINED__ typedef GUID IID,*LPIID; typedef GUID CLSID,*LPCLSID; typedef GUID FMTID,*LPFMTID; #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2) #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2) #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2) #define IID_NULL GUID_NULL #define CLSID_NULL GUID_NULL #define FMTID_NULL GUID_NULL #ifdef __midl_proxy #define __MIDL_CONST #else #define __MIDL_CONST const #endif #endif /* ndef __IID_DEFINED__ */ #ifdef __cplusplus #define REFGUID const GUID & #define REFCLSID const CLSID & #define REFIID const IID & #define REFFMTID const FMTID & #else /* !defined(__cplusplus) */ #define REFGUID const GUID* __MIDL_CONST #define REFCLSID const CLSID* __MIDL_CONST #define REFIID const IID* __MIDL_CONST #define REFFMTID const FMTID* __MIDL_CONST #endif /* !defined(__cplusplus) */ #if defined(__cplusplus) && !defined(CINTERFACE) #define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID))) #else /* defined(__cplusplus) && !defined(CINTERFACE) */ #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID))) #endif /* defined(__cplusplus) && !defined(CINTERFACE) */ #if defined(__cplusplus) && !defined(CINTERFACE) #include inline bool operator==(const GUID& guidOne, const GUID& guidOther) { return !memcmp(&guidOne,&guidOther,sizeof(GUID)); } inline bool operator!=(const GUID& guidOne, const GUID& guidOther) { return !(guidOne == guidOther); } #endif extern const IID GUID_NULL; #endif /* _GUIDDEF_H_ */ ================================================ FILE: wine/windows/hidusage.h ================================================ /* * Copyright (C) 2015 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __HIDUSAGE_H #define __HIDUSAGE_H #ifdef __cplusplus extern "C" { #endif typedef USHORT USAGE, *PUSAGE; #define HID_USAGE_GENERIC_POINTER ((USAGE) 0x01) #define HID_USAGE_GENERIC_MOUSE ((USAGE) 0x02) #define HID_USAGE_GENERIC_JOYSTICK ((USAGE) 0x04) #define HID_USAGE_GENERIC_GAMEPAD ((USAGE) 0x05) #define HID_USAGE_GENERIC_KEYBOARD ((USAGE) 0x06) #define HID_USAGE_GENERIC_KEYPAD ((USAGE) 0x07) #define HID_USAGE_GENERIC_SYSTEM_CTL ((USAGE) 0x80) #define HID_USAGE_GENERIC_X ((USAGE) 0x30) #define HID_USAGE_GENERIC_Y ((USAGE) 0x31) #define HID_USAGE_GENERIC_Z ((USAGE) 0x32) #define HID_USAGE_GENERIC_RX ((USAGE) 0x33) #define HID_USAGE_GENERIC_RY ((USAGE) 0x34) #define HID_USAGE_GENERIC_RZ ((USAGE) 0x35) #define HID_USAGE_GENERIC_SLIDER ((USAGE) 0x36) #define HID_USAGE_GENERIC_DIAL ((USAGE) 0x37) #define HID_USAGE_GENERIC_WHEEL ((USAGE) 0x38) #define HID_USAGE_GENERIC_HATSWITCH ((USAGE) 0x39) #define HID_USAGE_GENERIC_COUNTED_BUFFER ((USAGE) 0x3A) #define HID_USAGE_GENERIC_BYTE_COUNT ((USAGE) 0x3B) #define HID_USAGE_GENERIC_MOTION_WAKEUP ((USAGE) 0x3C) #define HID_USAGE_GENERIC_VX ((USAGE) 0x40) #define HID_USAGE_GENERIC_VY ((USAGE) 0x41) #define HID_USAGE_GENERIC_VZ ((USAGE) 0x42) #define HID_USAGE_GENERIC_VBRX ((USAGE) 0x43) #define HID_USAGE_GENERIC_VBRY ((USAGE) 0x44) #define HID_USAGE_GENERIC_VBRZ ((USAGE) 0x45) #define HID_USAGE_GENERIC_VNO ((USAGE) 0x46) #define HID_USAGE_GENERIC_SYSCTL_POWER ((USAGE) 0x81) #define HID_USAGE_GENERIC_SYSCTL_SLEEP ((USAGE) 0x82) #define HID_USAGE_GENERIC_SYSCTL_WAKE ((USAGE) 0x83) #define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU ((USAGE) 0x84) #define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU ((USAGE) 0x85) #define HID_USAGE_GENERIC_SYSCTL_APP_MENU ((USAGE) 0x86) #define HID_USAGE_GENERIC_SYSCTL_HELP_MENU ((USAGE) 0x87) #define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT ((USAGE) 0x88) #define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT ((USAGE) 0x89) #define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT ((USAGE) 0x8A) #define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT ((USAGE) 0x8B) #define HID_USAGE_GENERIC_SYSCTL_MENU_UP ((USAGE) 0x8C) #define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN ((USAGE) 0x8D) #define HID_USAGE_KEYBOARD_NOEVENT ((USAGE) 0x00) #define HID_USAGE_KEYBOARD_ROLLOVER ((USAGE) 0x01) #define HID_USAGE_KEYBOARD_POSTFAIL ((USAGE) 0x02) #define HID_USAGE_KEYBOARD_UNDEFINED ((USAGE) 0x03) #define HID_USAGE_KEYBOARD_aA ((USAGE) 0x04) #define HID_USAGE_KEYBOARD_zZ ((USAGE) 0x1D) #define HID_USAGE_KEYBOARD_ONE ((USAGE) 0x1E) #define HID_USAGE_KEYBOARD_ZERO ((USAGE) 0x27) #define HID_USAGE_KEYBOARD_LCTRL ((USAGE) 0xE0) #define HID_USAGE_KEYBOARD_LSHFT ((USAGE) 0xE1) #define HID_USAGE_KEYBOARD_LALT ((USAGE) 0xE2) #define HID_USAGE_KEYBOARD_LGUI ((USAGE) 0xE3) #define HID_USAGE_KEYBOARD_RCTRL ((USAGE) 0xE4) #define HID_USAGE_KEYBOARD_RSHFT ((USAGE) 0xE5) #define HID_USAGE_KEYBOARD_RALT ((USAGE) 0xE6) #define HID_USAGE_KEYBOARD_RGUI ((USAGE) 0xE7) #define HID_USAGE_KEYBOARD_SCROLL_LOCK ((USAGE) 0x47) #define HID_USAGE_KEYBOARD_NUM_LOCK ((USAGE) 0x53) #define HID_USAGE_KEYBOARD_CAPS_LOCK ((USAGE) 0x39) #define HID_USAGE_KEYBOARD_F1 ((USAGE) 0x3A) #define HID_USAGE_KEYBOARD_F12 ((USAGE) 0x45) #define HID_USAGE_KEYBOARD_RETURN ((USAGE) 0x28) #define HID_USAGE_KEYBOARD_ESCAPE ((USAGE) 0x29) #define HID_USAGE_KEYBOARD_DELETE ((USAGE) 0x2A) #define HID_USAGE_KEYBOARD_PRINT_SCREEN ((USAGE) 0x46) #define HID_USAGE_LED_NUM_LOCK ((USAGE) 0x01) #define HID_USAGE_LED_CAPS_LOCK ((USAGE) 0x02) #define HID_USAGE_LED_SCROLL_LOCK ((USAGE) 0x03) #define HID_USAGE_LED_COMPOSE ((USAGE) 0x04) #define HID_USAGE_LED_KANA ((USAGE) 0x05) #define HID_USAGE_LED_POWER ((USAGE) 0x06) #define HID_USAGE_LED_SHIFT ((USAGE) 0x07) #define HID_USAGE_LED_DO_NOT_DISTURB ((USAGE) 0x08) #define HID_USAGE_LED_MUTE ((USAGE) 0x09) #define HID_USAGE_LED_TONE_ENABLE ((USAGE) 0x0A) #define HID_USAGE_LED_HIGH_CUT_FILTER ((USAGE) 0x0B) #define HID_USAGE_LED_LOW_CUT_FILTER ((USAGE) 0x0C) #define HID_USAGE_LED_EQUALIZER_ENABLE ((USAGE) 0x0D) #define HID_USAGE_LED_SOUND_FIELD_ON ((USAGE) 0x0E) #define HID_USAGE_LED_SURROUND_FIELD_ON ((USAGE) 0x0F) #define HID_USAGE_LED_REPEAT ((USAGE) 0x10) #define HID_USAGE_LED_STEREO ((USAGE) 0x11) #define HID_USAGE_LED_SAMPLING_RATE_DETECT ((USAGE) 0x12) #define HID_USAGE_LED_SPINNING ((USAGE) 0x13) #define HID_USAGE_LED_CAV ((USAGE) 0x14) #define HID_USAGE_LED_CLV ((USAGE) 0x15) #define HID_USAGE_LED_RECORDING_FORMAT_DET ((USAGE) 0x16) #define HID_USAGE_LED_OFF_HOOK ((USAGE) 0x17) #define HID_USAGE_LED_RING ((USAGE) 0x18) #define HID_USAGE_LED_MESSAGE_WAITING ((USAGE) 0x19) #define HID_USAGE_LED_DATA_MODE ((USAGE) 0x1A) #define HID_USAGE_LED_BATTERY_OPERATION ((USAGE) 0x1B) #define HID_USAGE_LED_BATTERY_OK ((USAGE) 0x1C) #define HID_USAGE_LED_BATTERY_LOW ((USAGE) 0x1D) #define HID_USAGE_LED_SPEAKER ((USAGE) 0x1E) #define HID_USAGE_LED_HEAD_SET ((USAGE) 0x1F) #define HID_USAGE_LED_HOLD ((USAGE) 0x20) #define HID_USAGE_LED_MICROPHONE ((USAGE) 0x21) #define HID_USAGE_LED_COVERAGE ((USAGE) 0x22) #define HID_USAGE_LED_NIGHT_MODE ((USAGE) 0x23) #define HID_USAGE_LED_SEND_CALLS ((USAGE) 0x24) #define HID_USAGE_LED_CALL_PICKUP ((USAGE) 0x25) #define HID_USAGE_LED_CONFERENCE ((USAGE) 0x26) #define HID_USAGE_LED_STAND_BY ((USAGE) 0x27) #define HID_USAGE_LED_CAMERA_ON ((USAGE) 0x28) #define HID_USAGE_LED_CAMERA_OFF ((USAGE) 0x29) #define HID_USAGE_LED_ON_LINE ((USAGE) 0x2A) #define HID_USAGE_LED_OFF_LINE ((USAGE) 0x2B) #define HID_USAGE_LED_BUSY ((USAGE) 0x2C) #define HID_USAGE_LED_READY ((USAGE) 0x2D) #define HID_USAGE_LED_PAPER_OUT ((USAGE) 0x2E) #define HID_USAGE_LED_PAPER_JAM ((USAGE) 0x2F) #define HID_USAGE_LED_REMOTE ((USAGE) 0x30) #define HID_USAGE_LED_FORWARD ((USAGE) 0x31) #define HID_USAGE_LED_REVERSE ((USAGE) 0x32) #define HID_USAGE_LED_STOP ((USAGE) 0x33) #define HID_USAGE_LED_REWIND ((USAGE) 0x34) #define HID_USAGE_LED_FAST_FORWARD ((USAGE) 0x35) #define HID_USAGE_LED_PLAY ((USAGE) 0x36) #define HID_USAGE_LED_PAUSE ((USAGE) 0x37) #define HID_USAGE_LED_RECORD ((USAGE) 0x38) #define HID_USAGE_LED_ERROR ((USAGE) 0x39) #define HID_USAGE_LED_SELECTED_INDICATOR ((USAGE) 0x3A) #define HID_USAGE_LED_IN_USE_INDICATOR ((USAGE) 0x3B) #define HID_USAGE_LED_MULTI_MODE_INDICATOR ((USAGE) 0x3C) #define HID_USAGE_LED_INDICATOR_ON ((USAGE) 0x3D) #define HID_USAGE_LED_INDICATOR_FLASH ((USAGE) 0x3E) #define HID_USAGE_LED_INDICATOR_SLOW_BLINK ((USAGE) 0x3F) #define HID_USAGE_LED_INDICATOR_FAST_BLINK ((USAGE) 0x40) #define HID_USAGE_LED_INDICATOR_OFF ((USAGE) 0x41) #define HID_USAGE_LED_FLASH_ON_TIME ((USAGE) 0x42) #define HID_USAGE_LED_SLOW_BLINK_ON_TIME ((USAGE) 0x43) #define HID_USAGE_LED_SLOW_BLINK_OFF_TIME ((USAGE) 0x44) #define HID_USAGE_LED_FAST_BLINK_ON_TIME ((USAGE) 0x45) #define HID_USAGE_LED_FAST_BLINK_OFF_TIME ((USAGE) 0x46) #define HID_USAGE_LED_INDICATOR_COLOR ((USAGE) 0x47) #define HID_USAGE_LED_RED ((USAGE) 0x48) #define HID_USAGE_LED_GREEN ((USAGE) 0x49) #define HID_USAGE_LED_AMBER ((USAGE) 0x4A) #define HID_USAGE_LED_GENERIC_INDICATOR ((USAGE) 0x3B) #define HID_USAGE_PAGE_UNDEFINED ((USAGE) 0x00) #define HID_USAGE_PAGE_GENERIC ((USAGE) 0x01) #define HID_USAGE_PAGE_SIMULATION ((USAGE) 0x02) #define HID_USAGE_PAGE_VR ((USAGE) 0x03) #define HID_USAGE_PAGE_SPORT ((USAGE) 0x04) #define HID_USAGE_PAGE_GAME ((USAGE) 0x05) #define HID_USAGE_PAGE_KEYBOARD ((USAGE) 0x07) #define HID_USAGE_PAGE_LED ((USAGE) 0x08) #define HID_USAGE_PAGE_BUTTON ((USAGE) 0x09) #define HID_USAGE_PAGE_ORDINAL ((USAGE) 0x0A) #define HID_USAGE_PAGE_TELEPHONY ((USAGE) 0x0B) #define HID_USAGE_PAGE_CONSUMER ((USAGE) 0x0C) #define HID_USAGE_PAGE_DIGITIZER ((USAGE) 0x0D) #define HID_USAGE_PAGE_UNICODE ((USAGE) 0x10) #define HID_USAGE_PAGE_ALPHANUMERIC ((USAGE) 0x14) #define HID_USAGE_TELEPHONY_PHONE ((USAGE) 0x01) #define HID_USAGE_TELEPHONY_ANSWERING_MACHINE ((USAGE) 0x02) #define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS ((USAGE) 0x03) #define HID_USAGE_TELEPHONY_HANDSET ((USAGE) 0x04) #define HID_USAGE_TELEPHONY_HEADSET ((USAGE) 0x05) #define HID_USAGE_TELEPHONY_KEYPAD ((USAGE) 0x06) #define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON ((USAGE) 0x07) #define HID_USAGE_SIMULATION_RUDDER ((USAGE) 0xBA) #define HID_USAGE_SIMULATION_THROTTLE ((USAGE) 0xBB) #define HID_USAGE_TELEPHONY_PHONE ((USAGE) 0x01) #define HID_USAGE_TELEPHONY_ANSWERING_MACHINE ((USAGE) 0x02) #define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS ((USAGE) 0x03) #define HID_USAGE_TELEPHONY_HANDSET ((USAGE) 0x04) #define HID_USAGE_TELEPHONY_HEADSET ((USAGE) 0x05) #define HID_USAGE_TELEPHONY_KEYPAD ((USAGE) 0x06) #define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON ((USAGE) 0x07) #define HID_USAGE_TELEPHONY_REDIAL ((USAGE) 0x24) #define HID_USAGE_TELEPHONY_TRANSFER ((USAGE) 0x25) #define HID_USAGE_TELEPHONY_DROP ((USAGE) 0x26) #define HID_USAGE_TELEPHONY_LINE ((USAGE) 0x2A) #define HID_USAGE_TELEPHONY_RING_ENABLE ((USAGE) 0x2D) #define HID_USAGE_TELEPHONY_SEND ((USAGE) 0x31) #define HID_USAGE_TELEPHONY_KEYPAD_0 ((USAGE) 0xB0) #define HID_USAGE_TELEPHONY_KEYPAD_D ((USAGE) 0xBF) #define HID_USAGE_TELEPHONY_HOST_AVAILABLE ((USAGE) 0xF1) #define HID_USAGE_MS_BTH_HF_DIALNUMBER ((USAGE) 0x21) #define HID_USAGE_MS_BTH_HF_DIALMEMORY ((USAGE) 0x22) #define HID_USAGE_CONSUMERCTRL ((USAGE) 0x01) #define HID_USAGE_DIGITIZER_PEN ((USAGE) 0x02) #define HID_USAGE_DIGITIZER_IN_RANGE ((USAGE) 0x32) #define HID_USAGE_DIGITIZER_TIP_SWITCH ((USAGE) 0x42) #define HID_USAGE_DIGITIZER_BARREL_SWITCH ((USAGE) 0x44) #ifdef __cplusplus } #endif #endif /* __HIDUSAGE_H */ ================================================ FILE: wine/windows/highlevelmonitorconfigurationapi.h ================================================ /* * Copyright 2014 Michael Müller for Pipelight * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_HIGHLEVELMONITORCONFIGURATIONAPI_H #define __WINE_HIGHLEVELMONITORCONFIGURATIONAPI_H #ifdef __cplusplus extern "C" { #endif typedef enum _MC_COLOR_TEMPERATURE { MC_COLOR_TEMPERATURE_UNKNOWN, MC_COLOR_TEMPERATURE_4000K, MC_COLOR_TEMPERATURE_5000K, MC_COLOR_TEMPERATURE_6500K, MC_COLOR_TEMPERATURE_7500K, MC_COLOR_TEMPERATURE_8200K, MC_COLOR_TEMPERATURE_9300K, MC_COLOR_TEMPERATURE_10000K, MC_COLOR_TEMPERATURE_11500K } MC_COLOR_TEMPERATURE, *LPMC_COLOR_TEMPERATURE; typedef enum _MC_POSITION_TYPE { MC_HORIZONTAL_POSITION, MC_VERTICAL_POSITION } MC_POSITION_TYPE; typedef enum _MC_SIZE_TYPE { MC_WIDTH, MC_HEIGHT } MC_SIZE_TYPE; typedef enum _MC_DRIVE_TYPE { MC_RED_DRIVE, MC_GREEN_DRIVE, MC_BLUE_DRIVE } MC_DRIVE_TYPE; typedef enum _MC_GAIN_TYPE { MC_RED_GAIN, MC_GREEN_GAIN, MC_BLUE_GAIN } MC_GAIN_TYPE; typedef enum _MC_DISPLAY_TECHNOLOGY_TYPE { MC_SHADOW_MASK_CATHODE_RAY_TUBE, MC_APERTURE_GRILL_CATHODE_RAY_TUBE, MC_THIN_FILM_TRANSISTOR, MC_LIQUID_CRYSTAL_ON_SILICON, MC_PLASMA, MC_ORGANIC_LIGHT_EMITTING_DIODE, MC_ELECTROLUMINESCENT, MC_MICROELECTROMECHANICAL, MC_FIELD_EMISSION_DEVICE } MC_DISPLAY_TECHNOLOGY_TYPE, *LPMC_DISPLAY_TECHNOLOGY_TYPE; #ifdef __cplusplus } #endif #endif /* __WINE_HIGHLEVELMONITORCONFIGURATIONAPI_H */ ================================================ FILE: wine/windows/hlguids.h ================================================ /* * Implementation of hyperlinking (hlink.dll) * * Copyright 2005 Aric Stewart for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_HLGUIDS_H__ #define __WINE_HLGUIDS_H__ DEFINE_GUID(CLSID_StdHlink, 0x79eac9d0, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b); DEFINE_GUID(CLSID_StdHlinkBrowseContext, 0x79eac9d1, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b); DEFINE_GUID(CLSID_IID_IExtensionServices, 0x79eac9cb, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b); #endif ================================================ FILE: wine/windows/hlink.idl ================================================ /* * Copyright 2005 Jacek Caban * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "urlmon.idl"; interface IHlink; interface IHlinkSite; interface IHlinkFrame; interface IHlinkBrowseContext; cpp_quote("HRESULT WINAPI HlinkCreateFromMoniker(IMoniker*, LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IUnknown*, REFIID, void**);") cpp_quote("HRESULT WINAPI HlinkCreateFromString(LPCWSTR, LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IUnknown*, REFIID, void**);") cpp_quote("HRESULT WINAPI HlinkCreateFromData(IDataObject*, IHlinkSite*, DWORD dwSiteData, IUnknown*, REFIID, void**);") cpp_quote("HRESULT WINAPI HlinkCreateExtensionServices(LPCWSTR, HWND, LPCWSTR, LPCWSTR, IUnknown*, REFIID, void**);") cpp_quote("HRESULT WINAPI HlinkQueryCreateFromData(IDataObject*);") cpp_quote("HRESULT WINAPI HlinkClone(IHlink*, REFIID, IHlinkSite*, DWORD, void **);") cpp_quote("HRESULT WINAPI HlinkCreateBrowseContext(IUnknown*, REFIID, void **);") cpp_quote("HRESULT WINAPI HlinkNavigateToStringReference(LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);") cpp_quote("HRESULT WINAPI HlinkNavigate(IHlink*, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);") cpp_quote("HRESULT WINAPI HlinkOnNavigate(IHlinkFrame*, IHlinkBrowseContext*, DWORD, IMoniker*, LPCWSTR, LPCWSTR, ULONG*);") cpp_quote("HRESULT WINAPI HlinkIsShortcut(LPCWSTR);") cpp_quote("HRESULT WINAPI HlinkTranslateURL(LPCWSTR,DWORD,LPWSTR*);") cpp_quote("HRESULT WINAPI HlinkParseDisplayName(LPBC,LPCWSTR,BOOL,ULONG*,IMoniker**);") cpp_quote("HRESULT WINAPI HlinkResolveMonikerForData(LPMONIKER,DWORD,LPBC,ULONG,FORMATETC*,IBindStatusCallback*,LPMONIKER);") cpp_quote("HRESULT WINAPI HlinkUpdateStackItem(IHlinkFrame*, IHlinkBrowseContext*, ULONG, IMoniker*, LPCWSTR, LPCWSTR);") typedef enum _HLSR_NOREDEF10 { HLSR_HOME, HLSR_SEARCHPAGE, HLSR_HISTORYFOLDER } HLSR; cpp_quote("HRESULT WINAPI HlinkSetSpecialReference(ULONG uReference, LPCWSTR pwzReference);") cpp_quote("HRESULT WINAPI HlinkGetSpecialReference(ULONG uReference, LPWSTR *ppwzReference);") cpp_quote("#define SID_SHlinkFrame IID_IHlinkFrame") /***************************************************************************** * IHlink interface */ [ object, uuid(79EAC9C3-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IHlink: IUnknown { typedef [unique] IHlink *LPHLINK; typedef enum { HLNF_INTERNALJUMP = 0x00000001, HLNF_OPENINNEWWINDOW = 0x00000002, HLNF_NAVIGATINGBACK = 0x00000004, HLNF_NAVIGATINGFORWARD = 0x00000008, HLNF_NAVIGATINGTOSTACKITEM = 0x00000010, HLNF_CREATENOHISTORY = 0x00000020 } HLNF; typedef enum { HLINKGETREF_DEFAULT = 0, HLINKGETREF_ABSOLUTE = 1, HLINKGETREF_RELATIVE = 2, } HLINKGETREF; typedef enum { HLFNAMEF_DEFAULT = 0x00000000, HLFNAMEF_TRYCACHE = 0x00000001, HLFNAMEF_TRYPRETTYTARGET = 0x00000002, HLFNAMEF_TRYFULLTARGET = 0x00000004, HLFNAMEF_TRYWIN95SHORTCUT = 0x00000008 } HLFNAMEF; typedef enum { HLINKMISC_RELATIVE = 0x00000001, } HLINKMISC; typedef enum { HLINKSETF_TARGET = 0x00000001, HLINKSETF_LOCATION = 0x00000002 } HLINKSETF; HRESULT SetHlinkSite( [in, unique] IHlinkSite *pihlSite, [in] DWORD dwSiteData); HRESULT GetHlinkSite( [out] IHlinkSite **ppihlSite, [out] DWORD *pdwSiteData); HRESULT SetMonikerReference( [in] DWORD grfHLSETF, [in, unique] IMoniker *pimkTarget, [in, unique] LPCWSTR pwzLocation); HRESULT GetMonikerReference( [in] DWORD dwWhichRef, [out] IMoniker **ppimkTarget, [out] LPWSTR *ppwzLocation); HRESULT SetStringReference( [in] DWORD grfHLSETF, [in, unique] LPCWSTR pwzTarget, [in, unique] LPCWSTR pwzLocation); HRESULT GetStringReference( [in] DWORD dwWhichRef, [out] LPWSTR *ppwzTarget, [out] LPWSTR *ppwzLocation); HRESULT SetFriendlyName( [in, unique] LPCWSTR pwzFriendlyName); HRESULT GetFriendlyName( [in] DWORD grfHLFNAMEF, [out] LPWSTR *ppwzFriendlyName); HRESULT SetTargetFrameName( [in, unique] LPCWSTR pwzTargetFrameName); HRESULT GetTargetFrameName( [out] LPWSTR *ppwzTargetFrameName); HRESULT GetMiscStatus( [out] DWORD *pdwStatus); HRESULT Navigate( [in] DWORD grfHLNF, [in, unique] LPBC pibc, [in, unique] IBindStatusCallback *pibsc, [in, unique] IHlinkBrowseContext *pihlbc); HRESULT SetAdditionalParams( [in, unique] LPCWSTR pwzAdditionalParams); HRESULT GetAdditionalParams( [out] LPWSTR *ppwzAdditionalParams); } /***************************************************************************** * IHlinkSite interface */ [ object, uuid(79EAC9C2-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IHlinkSite: IUnknown { typedef [unique] IHlinkSite *LPHLINKSITE; typedef enum { HLINKWHICHMK_CONTAINER = 1, HLINKWHICHMK_BASE = 2, } HLINKWHICHMK; HRESULT QueryService( [in] DWORD dwSiteData, [in] REFGUID guidService, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppiunk); HRESULT GetMoniker( [in] DWORD dwSiteData, [in] DWORD dwAssign, [in] DWORD dwWhich, [out] IMoniker **ppimk); HRESULT ReadyToNavigate( [in] DWORD dwSiteData, [in] DWORD dwReserved); HRESULT OnNavigationComplete( [in] DWORD dwSiteData, [in] DWORD dwreserved, [in] HRESULT hrError, [in, unique] LPCWSTR pwzError); } /***************************************************************************** * IEnumHLITEM interface */ [ local, object, uuid(79EAC9C6-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IEnumHLITEM : IUnknown { typedef [unique] IEnumHLITEM *LPENUMHLITEM; typedef struct tagHLITEM { ULONG uHLID; LPWSTR pwzFriendlyName; } HLITEM; typedef [unique] HLITEM *LPHLITEM; HRESULT Next( [in] ULONG celt, [out] HLITEM *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumHLITEM **ppienumhlitem); } /***************************************************************************** * IHlinkBrowseContext interface */ [ local, object, uuid(79EAC9C7-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IHlinkBrowseContext : IUnknown { typedef [unique] IHlinkBrowseContext *LPHLINKBROWSECONTEXT; enum { HLTB_DOCKEDLEFT = 0, HLTB_DOCKEDTOP = 1, HLTB_DOCKEDRIGHT = 2, HLTB_DOCKEDBOTTOM = 3, HLTB_FLOATING = 4 }; typedef struct _tagHLTBINFO { ULONG uDockType; RECT rcTbPos; } HLTBINFO; enum { HLBWIF_HASFRAMEWNDINFO = 0x00000001, HLBWIF_HASDOCWNDINFO = 0x00000002, HLBWIF_FRAMEWNDMAXIMIZED = 0x00000004, HLBWIF_DOCWNDMAXIMIZED = 0x00000008, HLBWIF_HASWEBTOOLBARINFO = 0x00000010, HLBWIF_WEBTOOLBARHIDDEN = 0x00000020 }; typedef struct _tagHLBWINFO { ULONG cbSize; DWORD grfHLBWIF; RECT rcFramePos; RECT rcDocPos; HLTBINFO hltbinfo; } HLBWINFO; typedef [unique] HLBWINFO *LPHLBWINFO; enum { HLID_INVALID = 0x00000000, HLID_PREVIOUS = 0xFFFFFFFF, HLID_NEXT = 0xFFFFFFFE, HLID_CURRENT = 0xFFFFFFFD, HLID_STACKBOTTOM = 0xFFFFFFFC, HLID_STACKTOP = 0xFFFFFFFB }; enum { HLQF_ISVALID = 0x00000001, HLQF_ISCURRENT = 0x00000002 }; HRESULT Register( [in] DWORD reserved, [in, unique] IUnknown *piunk, [in, unique] IMoniker *pimk, [out] DWORD *pdwRegister); cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetObject") cpp_quote("#endif") HRESULT GetObject( [in, unique] IMoniker *pimk, [in] BOOL fBindIfRootRegistered, [out] IUnknown **ppiunk); HRESULT Revoke( [in] DWORD dwRegister); HRESULT SetBrowseWindowInfo( [in, unique] HLBWINFO *phlbwi); HRESULT GetBrowseWindowInfo( [out] HLBWINFO *phlbwi); HRESULT SetInitialHlink( [in, unique] IMoniker * pimkTarget, [in, unique] LPCWSTR pwzLocation, [in, unique] LPCWSTR pwzFriendlyName); HRESULT OnNavigateHlink( [in] DWORD grfHLNF, [in, unique] IMoniker *pimkTarget, [in, unique] LPCWSTR pwzLocation, [in, unique] LPCWSTR pwzFriendlyName, [out] ULONG *puHLID); HRESULT UpdateHlink( [in] ULONG uHLID, [in, unique] IMoniker *pimkTarget, [in, unique] LPCWSTR pwzLocation, [in, unique] LPCWSTR pwzFriendlyName); HRESULT EnumNavigationStack( [in] DWORD dwReserved, [in] DWORD grfHLFNAMEF, [out] IEnumHLITEM **ppienumhlitem); HRESULT QueryHlink( [in] DWORD grfHLQF, [in] ULONG uHLID); HRESULT GetHlink( [in] ULONG uHLID, [out] IHlink **ppihl); HRESULT SetCurrentHlink( [in] ULONG uHLID); HRESULT Clone( [in, unique] IUnknown *piunkOuter, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppiunkObj); HRESULT Close( [in] DWORD reserved); } /***************************************************************************** * IHlinkTarget interface */ [ object, uuid(79EAC9C4-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IHlinkTarget : IUnknown { typedef [unique] IHlinkTarget *LPHLINKTARGET; HRESULT SetBrowseContext( [in, unique] IHlinkBrowseContext *pihlbc); HRESULT GetBrowseContext( [out] IHlinkBrowseContext **ppihlbc); HRESULT Navigate( [in] DWORD grfHLNF, [in, unique] LPCWSTR pwzJumpLocation); HRESULT GetMoniker( [in,unique] LPCWSTR pwzLocation, [in] DWORD dwAssign, [out] IMoniker **ppimkLocation); HRESULT GetFriendlyName( [in,unique] LPCWSTR pwzLocation, [out] LPWSTR *ppwzFriendlyName); } /***************************************************************************** * IHlinkFrame interface */ [ object, uuid(79eac9c5-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IHlinkFrame : IUnknown { typedef IHlinkFrame *LPHLINKFRAME; HRESULT SetBrowseContext( [in, unique] IHlinkBrowseContext * pihlbc); HRESULT GetBrowseContext( [out] IHlinkBrowseContext ** ppihlbc); HRESULT Navigate( [in] DWORD grfHLNF, [in, unique] LPBC pbc, [in, unique] IBindStatusCallback *pibsc, [in, unique] IHlink *pihlNavigate); HRESULT OnNavigate( [in] DWORD grfHLNF, [in, unique] IMoniker *pimkTarget, [in, unique] LPCWSTR pwzLocation, [in, unique] LPCWSTR pwzFriendlyName, [in] DWORD dwreserved); HRESULT UpdateHlink( [in] ULONG uHLID, [in, unique] IMoniker *pimkTarget, [in, unique] LPCWSTR pwzLocation, [in, unique] LPCWSTR pwzFriendlyName); } /***************************************************************************** * IExtensionServices interface */ [ object, uuid(79eac9cb-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IExtensionServices: IUnknown { typedef IExtensionServices *LPEXTENSIONSERVICES; HRESULT SetAdditionalHeaders( [in] LPCWSTR pwzAdditionalHeaders); HRESULT SetAuthenticateData( [in] HWND phwnd, [in] LPCWSTR pwzUsername, [in] LPCWSTR pwzPassword); } ================================================ FILE: wine/windows/hstring.idl ================================================ /* * Copyright (C) 2014 Martin Storsjo * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; typedef struct HSTRING__ { int unused; } HSTRING__; typedef [wire_marshal(wireBSTR), unique] HSTRING__* HSTRING; cpp_quote("DECLARE_HANDLE(HSTRING_BUFFER);") cpp_quote("typedef struct HSTRING_HEADER") cpp_quote("{") cpp_quote(" union") cpp_quote(" {") cpp_quote(" PVOID Reserved1;") cpp_quote("#ifdef _WIN64") cpp_quote(" char Reserved2[24];") cpp_quote("#else") cpp_quote(" char Reserved2[20];") cpp_quote("#endif") cpp_quote(" } Reserved;") cpp_quote("} HSTRING_HEADER;") ================================================ FILE: wine/windows/htiface.idl ================================================ /* * Copyright 2006,2011 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; import "urlmon.idl"; cpp_quote("#include ") /***************************************************************************** * ITargetFrame interface */ [ object, uuid(d5f78c80-5252-11cf-90fa-00aa0042106e), pointer_default(unique) ] interface ITargetFrame: IUnknown { typedef [unique] ITargetFrame *LPTARGETFRAME; typedef enum { NAVIGATEFRAME_FL_RECORD = 0x01, NAVIGATEFRAME_FL_POST = 0x02, NAVIGATEFRAME_FL_NO_DOC_CACHE = 0x04, NAVIGATEFRAME_FL_NO_IMAGE_CACHE = 0x08, NAVIGATEFRAME_FL_AUTH_FAIL_CACHE_OK = 0x10, NAVIGATEFRAME_FL_SENDING_FROM_FORM = 0x20, NAVIGATEFRAME_FL_REALLY_SENDING_FROM_FORM = 0x40 } NAVIGATEFRAME_FLAGS; typedef struct tagNavigateData { ULONG ulTarget; ULONG ulURL; ULONG ulRefURL; ULONG ulPostData; DWORD dwFlags; } NAVIGATEDATA; HRESULT SetFrameName([in] LPCWSTR pszFrameName); HRESULT GetFrameName([out] LPWSTR *ppszFrameName); HRESULT GetParentFrame([out] IUnknown **ppunkParent); HRESULT FindFrame( [in] LPCWSTR pszTargetName, [in] IUnknown *ppunkContextFrame, [in] DWORD dwFlags, [out] IUnknown **ppunkTargetFrame); HRESULT SetFrameSrc([in] LPCWSTR pszFrameSrc); HRESULT GetFrameSrc([out] LPWSTR *ppszFrameSrc); HRESULT GetFramesContainer([out] IOleContainer **ppContainer); HRESULT SetFrameOptions([in] DWORD dwFlags); HRESULT GetFrameOptions([out] DWORD *pdwFlags); HRESULT SetFrameMargins( [in] DWORD dwWidth, [in] DWORD dwHeight); HRESULT GetFrameMargins( [out] DWORD *pdwWidth, [out] DWORD *pdwHeight); HRESULT RemoteNavigate( [in] ULONG cLength, [in, size_is(cLength)] ULONG *pulData); HRESULT OnChildFrameActivate([in] IUnknown *pUnkChildFrame); HRESULT OnChildFrameDeactivate([in] IUnknown *pUnkChildFrame); } /***************************************************************************** * ITargetFramePriv interface */ [ object, uuid(9216e421-2bf5-11d0-82b4-00a0c90c29c5), pointer_default(unique) ] interface ITargetFramePriv : IUnknown { typedef [unique] ITargetFramePriv *LPTARGETFRAMEPRIV; HRESULT FindFrameDownwards( [in] LPCWSTR pszTargetName, [in] DWORD dwFlags, [out] IUnknown **ppunkTargetFrame); HRESULT FindFrameInContext( [in] LPCWSTR pszTargetName, [in] IUnknown *punkContextFrame, [in] DWORD dwFlags, [out] IUnknown **ppunkTargetFrame); HRESULT OnChildFrameActivate([in] IUnknown *pUnkChildFrame); HRESULT OnChildFrameDeactivate([in] IUnknown *pUnkChildFrame); HRESULT NavigateHack( [in] DWORD grfHLNF, [in, unique] LPBC pbc, [in, unique] IBindStatusCallback *pibsc, [in, unique] LPCWSTR pszTargetName, [in] LPCWSTR pszUrl, [in, unique] LPCWSTR pszLocation); HRESULT FindBrowserByIndex( [in] DWORD dwID, [out] IUnknown **ppunkBrowser); } /***************************************************************************** * ITargetFramePriv2 interface */ [ object, uuid(b2c867e6-69d6-46f2-a611-ded9a4bd7fef), pointer_default(unique) ] interface ITargetFramePriv2 : ITargetFramePriv { typedef [unique] ITargetFramePriv2 *LPTARGETFRAMEPRIV2; HRESULT AggregatedNavigation2( [in] DWORD grfHLNF, [in, unique] LPBC pbc, [in, unique] IBindStatusCallback *pibsc, [in, unique] LPCWSTR pszTargetName, [in] IUri *pUri, [in, unique] LPCWSTR pszLocation); } ================================================ FILE: wine/windows/htiframe.idl ================================================ /* * Copyright 2006,2011 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; /***************************************************************************** * ITargetNotify interface */ [ object, uuid(863a99a0-21bc-11d0-82b4-00a0c90c29c5), pointer_default(unique) ] interface ITargetNotify : IUnknown { typedef [unique] ITargetNotify *LPTARGETNOTIFY; HRESULT OnCreate( [in] IUnknown *pUnkDestination, [in] ULONG cbCookie); HRESULT OnReuse([in] IUnknown *pUnkDestination); } /***************************************************************************** * ITargetNotify2 interface */ [ object, uuid(3050f6b1-98b5-11cf-bb82-00aa00bdce0b), pointer_default(unique) ] interface ITargetNotify2 : ITargetNotify { typedef [unique] ITargetNotify2 *LPTARGETNOTIFY2; HRESULT GetOptionString([in,out] BSTR *pbstrOptions); } /***************************************************************************** * ITargetFrame2 interface */ [ object, uuid(86d52e11-94a8-11d0-82af-00c04fd5ae38), pointer_default(unique) ] interface ITargetFrame2 : IUnknown { typedef [unique] ITargetFrame2 *LPTARGETFRAME2; typedef enum { FINDFRAME_NONE = 0, FINDFRAME_JUSTTESTEXISTENCE = 1, FINDFRAME_INTERNAL = 0x80000000 } FINDFRAME_FLAGS; typedef enum { FRAMEOPTIONS_SCROLL_YES = 0x00000001, FRAMEOPTIONS_SCROLL_NO = 0x00000002, FRAMEOPTIONS_SCROLL_AUTO = 0x00000004, FRAMEOPTIONS_NORESIZE = 0x00000008, FRAMEOPTIONS_NO3DBORDER = 0x00000010, FRAMEOPTIONS_DESKTOP = 0x00000020, FRAMEOPTIONS_BROWSERBAND = 0x00000040 } FRAMEOPTIONS_FLAGS; HRESULT SetFrameName([in] LPCWSTR pszFrameName); HRESULT GetFrameName([out] LPWSTR *ppszFrameName); HRESULT GetParentFrame([out] IUnknown **ppunkParent); HRESULT SetFrameSrc([in] LPCWSTR pszFrameSrc); HRESULT GetFrameSrc([out] LPWSTR *ppszFrameSrc); HRESULT GetFramesContainer([out] IOleContainer **ppContainer); HRESULT SetFrameOptions([in] DWORD dwFlags); HRESULT GetFrameOptions([out] DWORD *pdwFlags); HRESULT SetFrameMargins( [in] DWORD dwWidth, [in] DWORD dwHeight); HRESULT GetFrameMargins( [out] DWORD *pdwWidth, [out] DWORD *pdwHeight); HRESULT FindFrame( [in,unique] LPCWSTR pszTargetName, [in] DWORD dwFlags, [out] IUnknown **ppunkTargetFrame); HRESULT GetTargetAlias( [in,unique] LPCWSTR pszTargetName, [out] LPWSTR *ppszTargetAlias); } /***************************************************************************** * ITargetContainer interface */ [ object, uuid(7847ec01-2bec-11d0-82b4-00a0c90C29c5), pointer_default(unique) ] interface ITargetContainer : IUnknown { typedef [unique] ITargetContainer *LPTARGETCONTAINER; HRESULT GetFrameUrl([out] LPWSTR *ppszFrameSrc); HRESULT GetFramesContainer([out] IOleContainer **ppContainer); } ================================================ FILE: wine/windows/htmlhelp.h ================================================ /* * Copyright 2004 Jacek Caban * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __HTMLHELP_H__ #define __HTMLHELP_H__ #define HH_DISPLAY_TOPIC 0x00 #define HH_HELP_FINDER 0x00 #define HH_DISPLAY_TOC 0x01 #define HH_DISPLAY_INDEX 0x02 #define HH_DISPLAY_SEARCH 0x03 #define HH_SET_WIN_TYPE 0x04 #define HH_GET_WIN_TYPE 0x05 #define HH_GET_WIN_HANDLE 0x06 #define HH_ENUM_INFO_TYPE 0x07 #define HH_SET_INFO_TYPE 0x08 #define HH_SYNC 0x09 #define HH_RESERVED1 0x0A #define HH_RESERVED2 0x0B #define HH_RESERVED3 0x0C #define HH_KEYWORD_LOOKUP 0x0D #define HH_DISPLAY_TEXT_POPUP 0x0E #define HH_HELP_CONTEXT 0x0F #define HH_TP_HELP_CONTEXTMENU 0x10 #define HH_TP_HELP_WM_HELP 0x11 #define HH_CLOSE_ALL 0x12 #define HH_ALINK_LOOKUP 0x13 #define HH_GET_LAST_ERROR 0x14 #define HH_ENUM_CATEGORY 0x15 #define HH_ENUM_CATEGORY_IT 0x16 #define HH_RESET_IT_FILTER 0x17 #define HH_SET_INCLUSIVE_FILTER 0x18 #define HH_SET_EXCLUSIVE_FILTER 0x19 #define HH_INITIALIZE 0x1C #define HH_UNINITIALIZE 0x1D #define HH_SAFE_DISPLAY_TOPIC 0x20 #define HH_PRETRANSLATEMESSAGE 0xFD #define HH_SET_GLOBAL_PROPERTY 0xFC #define HHWIN_PROP_TAB_AUTOHIDESHOW 0x00000001 #define HHWIN_PROP_ONTOP 0x00000002 #define HHWIN_PROP_NOTITLEBAR 0x00000004 #define HHWIN_PROP_NODEF_STYLES 0x00000008 #define HHWIN_PROP_NODEF_EXSTYLES 0x00000010 #define HHWIN_PROP_TRI_PANE 0x00000020 #define HHWIN_PROP_NOTB_TEXT 0x00000040 #define HHWIN_PROP_POST_QUIT 0x00000080 #define HHWIN_PROP_AUTO_SYNC 0x00000100 #define HHWIN_PROP_TRACKING 0x00000200 #define HHWIN_PROP_TAB_SEARCH 0x00000400 #define HHWIN_PROP_TAB_HISTORY 0x00000800 #define HHWIN_PROP_TAB_FAVORITES 0x00001000 #define HHWIN_PROP_CHANGE_TITLE 0x00002000 #define HHWIN_PROP_NAV_ONLY_WIN 0x00004000 #define HHWIN_PROP_NO_TOOLBAR 0x00008000 #define HHWIN_PROP_MENU 0x00010000 #define HHWIN_PROP_TAB_ADVSEARCH 0x00020000 #define HHWIN_PROP_USER_POS 0x00040000 #define HHWIN_PROP_TAB_CUSTOM1 0x00080000 #define HHWIN_PROP_TAB_CUSTOM2 0x00100000 #define HHWIN_PROP_TAB_CUSTOM3 0x00200000 #define HHWIN_PROP_TAB_CUSTOM4 0x00400000 #define HHWIN_PROP_TAB_CUSTOM5 0x00800000 #define HHWIN_PROP_TAB_CUSTOM6 0x01000000 #define HHWIN_PROP_TAB_CUSTOM7 0x02000000 #define HHWIN_PROP_TAB_CUSTOM8 0x04000000 #define HHWIN_PROP_TAB_CUSTOM9 0x08000000 #define HHWIN_TB_MARGIN 0x10000000 #define HHWIN_PARAM_PROPERTIES 0x00000002 #define HHWIN_PARAM_STYLES 0x00000004 #define HHWIN_PARAM_EXSTYLES 0x00000008 #define HHWIN_PARAM_RECT 0x00000010 #define HHWIN_PARAM_NAV_WIDTH 0x00000020 #define HHWIN_PARAM_SHOWSTATE 0x00000040 #define HHWIN_PARAM_INFOTYPES 0x00000080 #define HHWIN_PARAM_TB_FLAGS 0x00000100 #define HHWIN_PARAM_EXPANSION 0x00000200 #define HHWIN_PARAM_TABPOS 0x00000400 #define HHWIN_PARAM_TABORDER 0x00000800 #define HHWIN_PARAM_HISTORY_COUNT 0x00001000 #define HHWIN_PARAM_CUR_TAB 0x00002000 #define HHWIN_BUTTON_EXPAND 0x00000002 #define HHWIN_BUTTON_BACK 0x00000004 #define HHWIN_BUTTON_FORWARD 0x00000008 #define HHWIN_BUTTON_STOP 0x00000010 #define HHWIN_BUTTON_REFRESH 0x00000020 #define HHWIN_BUTTON_HOME 0x00000040 #define HHWIN_BUTTON_BROWSE_FWD 0x00000080 #define HHWIN_BUTTON_BROWSE_BCK 0x00000100 #define HHWIN_BUTTON_NOTES 0x00000200 #define HHWIN_BUTTON_CONTENTS 0x00000400 #define HHWIN_BUTTON_SYNC 0x00000800 #define HHWIN_BUTTON_OPTIONS 0x00001000 #define HHWIN_BUTTON_PRINT 0x00002000 #define HHWIN_BUTTON_INDEX 0x00004000 #define HHWIN_BUTTON_SEARCH 0x00008000 #define HHWIN_BUTTON_HISTORY 0x00010000 #define HHWIN_BUTTON_FAVORITES 0x00020000 #define HHWIN_BUTTON_JUMP1 0x00040000 #define HHWIN_BUTTON_JUMP2 0x00080000 #define HHWIN_BUTTON_ZOOM 0x00100000 #define HHWIN_BUTTON_TOC_NEXT 0x00200000 #define HHWIN_BUTTON_TOC_PREV 0x00400000 #define HHWIN_DEF_BUTTONS \ (HHWIN_BUTTON_EXPAND | HHWIN_BUTTON_BACK | HHWIN_BUTTON_OPTIONS | HHWIN_BUTTON_PRINT) #define IDTB_EXPAND 200 #define IDTB_CONTRACT 201 #define IDTB_STOP 202 #define IDTB_REFRESH 203 #define IDTB_BACK 204 #define IDTB_HOME 205 #define IDTB_SYNC 206 #define IDTB_PRINT 207 #define IDTB_OPTIONS 208 #define IDTB_FORWARD 209 #define IDTB_NOTES 210 #define IDTB_BROWSE_FWD 211 #define IDTB_BROWSE_BACK 212 #define IDTB_CONTENTS 213 #define IDTB_INDEX 214 #define IDTB_SEARCH 215 #define IDTB_HISTORY 216 #define IDTB_FAVORITES 217 #define IDTB_JUMP1 218 #define IDTB_JUMP2 219 #define IDTB_CUSTOMIZE 221 #define IDTB_ZOOM 222 #define IDTB_TOC_NEXT 223 #define IDTB_TOC_PREV 224 #define HHN_FIRST (0U-860U) #define HHN_LAST (0U-879U) #define HHN_NAVCOMPLETE HHN_FIRST #define HHN_TRACK (HHN_FIRST-1) #define HHN_WINDOW_CREATE (HHN_FIRST-2) #ifdef __cplusplus extern "C" { #endif typedef struct tagHH_NOTIFY { NMHDR hdr; PCSTR pszurl; } HH_NOTIFY; typedef struct tagHH_POPUPA { int cbStruct; HINSTANCE hinst; UINT idString; LPCSTR pszText; POINT pt; COLORREF clrForeground; COLORREF clrBackground; RECT rcMargins; LPCSTR pszFont; } HH_POPUPA; typedef struct tagHH_POPUPW { int cbStruct; HINSTANCE hinst; UINT idString; LPCWSTR pszText; POINT pt; COLORREF clrForeground; COLORREF clrBackground; RECT rcMargins; LPCWSTR pszFont; } HH_POPUPW; DECL_WINELIB_TYPE_AW(HH_POPUP) typedef struct tagHH_ALINKA { int cbStruct; BOOL fReserved; LPCSTR pszKeywords; LPCSTR pszUrl; LPCSTR pszMsgText; LPCSTR pszMsgTitle; LPCSTR pszWindow; BOOL fIndexOnFail; } HH_ALINKA; typedef struct tagHH_ALINKW { int cbStruct; BOOL fReserved; LPCWSTR pszKeywords; LPCWSTR pszUrl; LPCWSTR pszMsgText; LPCWSTR pszMsgTitle; LPCWSTR pszWindow; BOOL fIndexOnFail; } HH_ALINKW; DECL_WINELIB_TYPE_AW(HH_ALINK) enum { HHWIN_NAVTYPE_TOC, HHWIN_NAVTYPE_INDEX, HHWIN_NAVTYPE_SEARCH, HHWIN_NAVTYPE_FAVORITES, HHWIN_NAVTYPE_HISTORY, HHWIN_NAVTYPE_AUTHOR, HHWIN_NAVTYPE_CUSTOM_FIRST = 11 }; enum { IT_INCLUSIVE, IT_EXCLUSIVE, IT_HIDDEN }; typedef struct tagHH_ENUM_IT { int cbStruct; int iType; LPCSTR pszCatName; LPCSTR pszITName; LPCSTR pszITDescription; } HH_ENUM_IT, *PHH_ENUM_IT; typedef struct tagHH_ENUM_CAT { int cbStruct; LPCSTR pszCatName; LPCSTR pszCatDescription; } HH_ENUM_CAT, *PHH_ENUM_CAT; typedef struct tagHH_SET_INFOTYPE { int cbStruct; LPCSTR pszCatName; LPCSTR pszInfoTypeName; } HH_SET_INFOTYPE; typedef DWORD HH_INFOTYPE, *PHH_INFOTYPE; enum { HHWIN_NAVTAB_TOP, HHWIN_NAVTAB_LEFT, HHWIN_NAVTAB_BOTTOM }; #define HH_MAX_TABS 19 enum { HH_TAB_CONTENTS, HH_TAB_INDEX, HH_TAB_SEARCH, HH_TAB_FAVORITES, HH_TAB_HISTORY, HH_TAB_AUTHOR, HH_TAB_CUSTOM_FIRST = 11, HH_TAB_CUSTOM_LAST = HH_MAX_TABS }; #define HH_MAX_TABS_CUSTOM (HH_TAB_CUSTOM_LAST-HH_TAB_CUSTOM_FIRST+1) #define HH_FTS_DEFAULT_PROXIMITY -1 typedef struct tagHH_FTS_QUERYA { int cbStruct; BOOL fUniCodeStrings; LPCSTR pszSearchQuery; LONG iProximity; BOOL fStemmedSearch; BOOL fTitleOnly; BOOL fExecute; LPCSTR pszWindow; } HH_FTS_QUERYA; typedef struct tagHH_FTS_QUERYW { int cbStruct; BOOL fUniCodeStrings; LPCWSTR pszSearchQuery; LONG iProximity; BOOL fStemmedSearch; BOOL fTitleOnly; BOOL fExecute; LPCWSTR pszWindow; } HH_FTS_QUERYW; DECL_WINELIB_TYPE_AW(HH_FTS_QUERY) typedef struct tagHH_WINTYPEA { int cbStruct; BOOL fUniCodeStrings; LPCSTR pszType; DWORD fsValidMembers; DWORD fsWinProperties; LPCSTR pszCaption; DWORD dwStyles; DWORD dwExStyles; RECT rcWindowPos; int nShowState; HWND hwndHelp; HWND hwndCaller; PHH_INFOTYPE paInfoTypes; HWND hwndToolBar; HWND hwndNavigation; HWND hwndHTML; int iNavWidth; RECT rcHTML; LPCSTR pszToc; LPCSTR pszIndex; LPCSTR pszFile; LPCSTR pszHome; DWORD fsToolBarFlags; BOOL fNotExpanded; int curNavType; int tabpos; int idNotify; BYTE tabOrder[HH_MAX_TABS+1]; int cHistory; LPCSTR pszJump1; LPCSTR pszJump2; LPCSTR pszUrlJump1; LPCSTR pszUrlJump2; RECT rcMinSize; int cbInfoTypes; LPCSTR pszCustomTabs; } HH_WINTYPEA, *PHH_WINTYPEA; typedef struct tagHH_WINTYPEW { int cbStruct; BOOL fUniCodeStrings; LPCWSTR pszType; DWORD fsValidMembers; DWORD fsWinProperties; LPCWSTR pszCaption; DWORD dwStyles; DWORD dwExStyles; RECT rcWindowPos; int nShowState; HWND hwndHelp; HWND hwndCaller; PHH_INFOTYPE paInfoTypes; HWND hwndToolBar; HWND hwndNavigation; HWND hwndHTML; int iNavWidth; RECT rcHTML; LPCWSTR pszToc; LPCWSTR pszIndex; LPCWSTR pszFile; LPCWSTR pszHome; DWORD fsToolBarFlags; BOOL fNotExpanded; int curNavType; int tabpos; int idNotify; BYTE tabOrder[HH_MAX_TABS+1]; int cHistory; LPCWSTR pszJump1; LPCWSTR pszJump2; LPCWSTR pszUrlJump1; LPCWSTR pszUrlJump2; RECT rcMinSize; int cbInfoTypes; LPCWSTR pszCustomTabs; } HH_WINTYPEW, *PHH_WINTYPEW; DECL_WINELIB_TYPE_AW(HH_WINTYPE) enum { HHACT_TAB_CONTENTS, HHACT_TAB_INDEX, HHACT_TAB_SEARCH, HHACT_TAB_HISTORY, HHACT_TAB_FAVORITES, HHACT_EXPAND, HHACT_CONTRACT, HHACT_BACK, HHACT_FORWARD, HHACT_STOP, HHACT_REFRESH, HHACT_HOME, HHACT_SYNC, HHACT_OPTIONS, HHACT_PRINT, HHACT_HIGHLIGHT, HHACT_CUSTOMIZE, HHACT_JUMP1, HHACT_JUMP2, HHACT_ZOOM, HHACT_TOC_NEXT, HHACT_TOC_PREV, HHACT_NOTES, HHACT_LAST_ENUM }; typedef struct tagHH_NTRACKA { NMHDR hdr; PCSTR pszCurUrl; int idAction; PHH_WINTYPEA phhWinType; } HH_NTRACKA; typedef struct tagHH_NTRACKW { NMHDR hdr; PCSTR pszCurUrl; int idAction; PHH_WINTYPEW phhWinType; } HH_NTRACKW; DECL_WINELIB_TYPE_AW(HH_NTRACK) HWND WINAPI HtmlHelpA(HWND,LPCSTR,UINT,DWORD_PTR); HWND WINAPI HtmlHelpW(HWND,LPCWSTR,UINT,DWORD_PTR); #define HtmlHelp WINELIB_NAME_AW(HtmlHelp) #define ATOM_HTMLHELP_API_ANSI (LPTSTR)14 #define ATOM_HTMLHELP_API_UNICODE (LPTSTR)15 typedef enum tagHH_GPROPID { HH_GPROPID_SINGLETHREAD = 1, HH_GPROPID_TOOLBAR_MARGIN = 2, HH_GPROPID_UI_LANGUAGE = 3, HH_GPROPID_CURRENT_SUBSET = 4, HH_GPROPID_CONTENT_LANGUAGE = 5 } HH_GPROPID; #ifdef __oaidl_h__ typedef struct tagHH_GLOBAL_PROPERTY { HH_GPROPID id; VARIANT var; } HH_GLOBAL_PROPERTY ; #endif /* __oaidl_h__ */ #ifdef __cplusplus } #endif #endif /* __HTMLHELP_H__ */ ================================================ FILE: wine/windows/http.h ================================================ /* * HTTP Server API definitions * * Copyright (C) 2009 Andrey Turkin * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_HTTP_H #define __WINE_HTTP_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct _HTTPAPI_VERSION { USHORT HttpApiMajorVersion; USHORT HttpApiMinorVersion; } HTTPAPI_VERSION, *PHTTPAPI_VERSION; #define HTTPAPI_VERSION_1 {1,0} #define HTTPAPI_VERSION_2 {2,0} /* HttpInitialize and HttpTerminate flags */ #define HTTP_INITIALIZE_SERVER 0x00000001 #define HTTP_INITIALIZE_CONFIG 0x00000002 typedef enum _HTTP_SERVICE_CONFIG_ID { HttpServiceConfigIPListenList, HttpServiceConfigSSLCertInfo, HttpServiceConfigUrlAclInfo, HttpServiceConfigTimeout, HttpServiceConfigMax } HTTP_SERVICE_CONFIG_ID, *PHTTP_SERVICE_CONFIG_ID; typedef ULONGLONG HTTP_OPAQUE_ID, *PHTTP_OPAQUE_ID; typedef HTTP_OPAQUE_ID HTTP_SERVER_SESSION_ID, *PHTTP_SERVER_SESSION_ID; typedef HTTP_OPAQUE_ID HTTP_URL_GROUP_ID, *PHTTP_URL_GROUP_ID; ULONG WINAPI HttpInitialize(HTTPAPI_VERSION,ULONG,PVOID); ULONG WINAPI HttpTerminate(ULONG,PVOID); ULONG WINAPI HttpAddUrl(HANDLE,PCWSTR,PVOID); ULONG WINAPI HttpCreateHttpHandle(PHANDLE,ULONG); ULONG WINAPI HttpCreateServerSession(HTTPAPI_VERSION,PHTTP_SERVER_SESSION_ID,ULONG); ULONG WINAPI HttpDeleteServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED); ULONG WINAPI HttpQueryServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,PVOID,ULONG,PULONG,LPOVERLAPPED); ULONG WINAPI HttpSetServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED); #ifdef __cplusplus } #endif #endif /* __WINE_HTTP_H */ ================================================ FILE: wine/windows/httprequest.idl ================================================ /* * Copyright 2011 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "httprequestid.h" import "oaidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ uuid(662901fc-6951-4854-9eb2-d9a2570f2b2e), helpstring("Microsoft WinHTTP Services, version 5.1"), lcid(0x0000), version(5.1) ] library WinHttp { importlib ("stdole2.tlb"); typedef [public] LONG HTTPREQUEST_PROXY_SETTING; const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DEFAULT = 0x00000000; const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PRECONFIG = 0x00000000; const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DIRECT = 0x00000001; const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PROXY = 0x00000002; typedef [public] LONG HTTPREQUEST_SETCREDENTIALS_FLAGS; const HTTPREQUEST_SETCREDENTIALS_FLAGS HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0x00000000; const HTTPREQUEST_SETCREDENTIALS_FLAGS HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 0x00000001; typedef [uuid(12782009-fe90-4877-9730-e5e183669b19)] enum WinHttpRequestOption { WinHttpRequestOption_UserAgentString, WinHttpRequestOption_URL, WinHttpRequestOption_URLCodePage, WinHttpRequestOption_EscapePercentInURL, WinHttpRequestOption_SslErrorIgnoreFlags, WinHttpRequestOption_SelectCertificate, WinHttpRequestOption_EnableRedirects, WinHttpRequestOption_UrlEscapeDisable, WinHttpRequestOption_UrlEscapeDisableQuery, WinHttpRequestOption_SecureProtocols, WinHttpRequestOption_EnableTracing, WinHttpRequestOption_RevertImpersonationOverSsl, WinHttpRequestOption_EnableHttpsToHttpRedirects, WinHttpRequestOption_EnablePassportAuthentication, WinHttpRequestOption_MaxAutomaticRedirects, WinHttpRequestOption_MaxResponseHeaderSize, WinHttpRequestOption_MaxResponseDrainSize, WinHttpRequestOption_EnableHttp1_1, WinHttpRequestOption_EnableCertificateRevocationCheck, WinHttpRequestOption_RejectUserpwd } WinHttpRequestOption; typedef [uuid(9d8a6df8-13de-4b1f-a330-67c719d62514)] enum WinHttpRequestAutoLogonPolicy { AutoLogonPolicy_Always, AutoLogonPolicy_OnlyIfBypassProxy, AutoLogonPolicy_Never } WinHttpRequestAutoLogonPolicy; [ object, uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396b), odl, dual, oleautomation, nonextensible, pointer_default(unique) ] interface IWinHttpRequest : IDispatch { [id(DISPID_HTTPREQUEST_SETPROXY)] HRESULT SetProxy( [in] HTTPREQUEST_PROXY_SETTING proxy_setting, [in, optional] VARIANT proxy_server, [in, optional] VARIANT bypass_list); [id(DISPID_HTTPREQUEST_SETCREDENTIALS)] HRESULT SetCredentials( [in] BSTR username, [in] BSTR password, [in] HTTPREQUEST_SETCREDENTIALS_FLAGS flags); [id(DISPID_HTTPREQUEST_OPEN)] HRESULT Open( [in] BSTR method, [in] BSTR url, [in, optional] VARIANT async); [id(DISPID_HTTPREQUEST_SETREQUESTHEADER)] HRESULT SetRequestHeader( [in] BSTR header, [in] BSTR value); [id(DISPID_HTTPREQUEST_GETRESPONSEHEADER)] HRESULT GetResponseHeader( [in] BSTR header, [out, retval] BSTR *value); [id(DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS)] HRESULT GetAllResponseHeaders( [out, retval] BSTR *headers); [id(DISPID_HTTPREQUEST_SEND)] HRESULT Send( [in, optional] VARIANT body); [propget, id(DISPID_HTTPREQUEST_STATUS)] HRESULT Status( [out, retval] LONG *status); [propget, id(DISPID_HTTPREQUEST_STATUSTEXT)] HRESULT StatusText( [out, retval] BSTR *status); [propget, id(DISPID_HTTPREQUEST_RESPONSETEXT)] HRESULT ResponseText( [out, retval] BSTR *body); [propget, id(DISPID_HTTPREQUEST_RESPONSEBODY)] HRESULT ResponseBody( [out, retval] VARIANT *body); [propget, id(DISPID_HTTPREQUEST_RESPONSESTREAM)] HRESULT ResponseStream( [out, retval] VARIANT *body); [propget, id(DISPID_HTTPREQUEST_OPTION)] HRESULT Option( [in] WinHttpRequestOption option, [out, retval] VARIANT *value); [propput, id(DISPID_HTTPREQUEST_OPTION)] HRESULT Option( [in] WinHttpRequestOption option, [in] VARIANT value); [id(DISPID_HTTPREQUEST_WAITFORRESPONSE)] HRESULT WaitForResponse( [in, optional] VARIANT timeout, [out, retval] VARIANT_BOOL *succeeded); [id(DISPID_HTTPREQUEST_ABORT)] HRESULT Abort(); [id(DISPID_HTTPREQUEST_SETTIMEOUTS)] HRESULT SetTimeouts( [in] LONG resolve_timeout, [in] LONG connect_timeout, [in] LONG send_timeout, [in] LONG receive_timeout); [id(DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE)] HRESULT SetClientCertificate( [in] BSTR certificate); [id(DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY)] HRESULT SetAutoLogonPolicy( [in] WinHttpRequestAutoLogonPolicy policy); } [ helpstring("WinHttpRequest Component version 5.1"), threading(apartment), progid("WinHttp.WinHttpRequest.5.1"), uuid(2087c2f4-2cef-4953-a8ab-66779b670495) ] coclass WinHttpRequest { interface IWinHttpRequest; } } /* WinHttp */ ================================================ FILE: wine/windows/httprequestid.h ================================================ /* * Copyright 2011 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_HTTPREQUESTID_H #define __WINE_HTTPREQUESTID_H #define DISPID_HTTPREQUEST_BASE 1 #define DISPID_HTTPREQUEST_OPEN (DISPID_HTTPREQUEST_BASE) #define DISPID_HTTPREQUEST_SETREQUESTHEADER (DISPID_HTTPREQUEST_BASE + 1) #define DISPID_HTTPREQUEST_GETRESPONSEHEADER (DISPID_HTTPREQUEST_BASE + 2) #define DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS (DISPID_HTTPREQUEST_BASE + 3) #define DISPID_HTTPREQUEST_SEND (DISPID_HTTPREQUEST_BASE + 4) #define DISPID_HTTPREQUEST_OPTION (DISPID_HTTPREQUEST_BASE + 5) #define DISPID_HTTPREQUEST_STATUS (DISPID_HTTPREQUEST_BASE + 6) #define DISPID_HTTPREQUEST_STATUSTEXT (DISPID_HTTPREQUEST_BASE + 7) #define DISPID_HTTPREQUEST_RESPONSETEXT (DISPID_HTTPREQUEST_BASE + 8) #define DISPID_HTTPREQUEST_RESPONSEBODY (DISPID_HTTPREQUEST_BASE + 9) #define DISPID_HTTPREQUEST_RESPONSESTREAM (DISPID_HTTPREQUEST_BASE + 10) #define DISPID_HTTPREQUEST_ABORT (DISPID_HTTPREQUEST_BASE + 11) #define DISPID_HTTPREQUEST_SETPROXY (DISPID_HTTPREQUEST_BASE + 12) #define DISPID_HTTPREQUEST_SETCREDENTIALS (DISPID_HTTPREQUEST_BASE + 13) #define DISPID_HTTPREQUEST_WAITFORRESPONSE (DISPID_HTTPREQUEST_BASE + 14) #define DISPID_HTTPREQUEST_SETTIMEOUTS (DISPID_HTTPREQUEST_BASE + 15) #define DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE (DISPID_HTTPREQUEST_BASE + 16) #define DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY (DISPID_HTTPREQUEST_BASE + 17) #endif /* __WINE_HTTPREQUESTID_H */ ================================================ FILE: wine/windows/i_cryptasn1tls.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_I_CRYPTASN1TLS_H #define __WINE_I_CRYPTASN1TLS_H typedef void *ASN1decoding_t; typedef void *ASN1encoding_t; typedef void *ASN1module_t; typedef DWORD HCRYPTASN1MODULE; #ifdef __cplusplus extern "C" { #endif ASN1decoding_t WINAPI I_CryptGetAsn1Decoder(HCRYPTASN1MODULE); ASN1encoding_t WINAPI I_CryptGetAsn1Encoder(HCRYPTASN1MODULE); BOOL WINAPI I_CryptInstallAsn1Module(ASN1module_t, DWORD, void*); BOOL WINAPI I_CryptUninstallAsn1Module(HCRYPTASN1MODULE); #ifdef __cplusplus } #endif #endif /* __WINE_I_CRYPTASN1TLS_H */ ================================================ FILE: wine/windows/iads.idl ================================================ /* * Copyright 2005 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ helpstring("Active DS Type Library"), uuid(97d25db0-0363-11cf-abc4-02608c9e7553), version(1.0) ] library ActiveDs { importlib("stdole2.tlb"); typedef enum { ADS_RIGHT_DS_CREATE_CHILD = 0x00000001, ADS_RIGHT_DS_DELETE_CHILD = 0x00000002, ADS_RIGHT_ACTRL_DS_LIST = 0x00000004, ADS_RIGHT_DS_SELF = 0x00000008, ADS_RIGHT_DS_READ_PROP = 0x00000010, ADS_RIGHT_DS_WRITE_PROP = 0x00000020, ADS_RIGHT_DS_DELETE_TREE = 0x00000040, ADS_RIGHT_DS_LIST_OBJECT = 0x00000080, ADS_RIGHT_DS_CONTROL_ACCESS = 0x00000100, ADS_RIGHT_DELETE = 0x00010000, ADS_RIGHT_READ_CONTROL = 0x00020000, ADS_RIGHT_WRITE_DAC = 0x00040000, ADS_RIGHT_WRITE_OWNER = 0x00080000, ADS_RIGHT_SYNCHRONIZE = 0x00100000, ADS_RIGHT_ACCESS_SYSTEM_SECURITY = 0x00200000, ADS_RIGHT_GENERIC_ALL = 0x10000000, ADS_RIGHT_GENERIC_EXECUTE = 0x20000000, ADS_RIGHT_GENERIC_WRITE = 0x40000000, ADS_RIGHT_GENERIC_READ = 0x80000000 } ADS_RIGHTS_ENUM; typedef enum { ADS_SECURE_AUTHENTICATION = 0x1, ADS_USE_ENCRYPTION = 0x2, ADS_USE_SSL = 0x2, ADS_READONLY_SERVER = 0x4, ADS_PROMPT_CREDENTIALS = 0x8, ADS_NO_AUTHENTICATION = 0x10, ADS_FAST_BIND = 0x20, ADS_USE_SIGNING = 0x40, ADS_USE_SEALING = 0x80, ADS_USE_DELEGATION = 0x100, ADS_SERVER_BIND = 0x200, ADS_NO_REFERRAL_CHASING = 0x400, ADS_AUTH_RESERVED = 0x80000000 } ADS_AUTHENTICATION_ENUM; typedef enum { ADS_SEARCHPREF_ASYNCHRONOUS, ADS_SEARCHPREF_DEREF_ALIASES, ADS_SEARCHPREF_SIZE_LIMIT, ADS_SEARCHPREF_TIME_LIMIT, ADS_SEARCHPREF_ATTRIBTYPES_ONLY, ADS_SEARCHPREF_SEARCH_SCOPE, ADS_SEARCHPREF_TIMEOUT, ADS_SEARCHPREF_PAGESIZE, ADS_SEARCHPREF_PAGED_TIME_LIMIT, ADS_SEARCHPREF_CHASE_REFERRALS, ADS_SEARCHPREF_SORT_ON, ADS_SEARCHPREF_CACHE_RESULTS, ADS_SEARCHPREF_DIRSYNC, ADS_SEARCHPREF_TOMBSTONE, ADS_SEARCHPREF_VLV, ADS_SEARCHPREF_ATTRIBUTE_QUERY, ADS_SEARCHPREF_SECURITY_MASK, ADS_SEARCHPREF_DIRSYNC_FLAG, ADS_SEARCHPREF_EXTENDED_DN } ADS_SEARCHPREF_ENUM; typedef ADS_SEARCHPREF_ENUM *PADS_SEARCHPREF_INFO; typedef enum { ADS_STATUS_S_OK, ADS_STATUS_INVALID_SEARCHPREF, ADS_STATUS_INVALID_SEARCHPREFVALUE } ADS_STATUSENUM; typedef enum { ADSTYPE_INVALID, ADSTYPE_DN_STRING, ADSTYPE_CASE_EXACT_STRING, ADSTYPE_CASE_IGNORE_STRING, ADSTYPE_PRINTABLE_STRING, ADSTYPE_NUMERIC_STRING, ADSTYPE_BOOLEAN, ADSTYPE_INTEGER, ADSTYPE_OCTET_STRING, ADSTYPE_UTC_TIME, ADSTYPE_LARGE_INTEGER, ADSTYPE_PROV_SPECIFIC, ADSTYPE_OBJECT_CLASS, ADSTYPE_CASEIGNORE_LIST, ADSTYPE_OCTET_LIST, ADSTYPE_PATH, ADSTYPE_POSTALADDRESS, ADSTYPE_TIMESTAMP, ADSTYPE_BACKLINK, ADSTYPE_TYPEDNAME, ADSTYPE_HOLD, ADSTYPE_NETADDRESS, ADSTYPE_REPLICAPOINTER, ADSTYPE_FAXNUMBER, ADSTYPE_EMAIL, ADSTYPE_NT_SECURITY_DESCRIPTOR, ADSTYPE_UNKNOWN, ADSTYPE_DN_WITH_BINARY, ADSTYPE_DN_WITH_STRING } ADSTYPEENUM; typedef enum { ADS_PASSWORD_ENCODE_REQUIRE_SSL, ADS_PASSWORD_ENCODE_CLEAR } ADS_PASSWORD_ENCODING_ENUM; typedef struct _ADS_CASEIGNORE_LIST { struct _ADS_CASEIGNORE_LIST *Next; LPWSTR String; } ADS_CASEIGNORE_LIST; typedef struct _ADS_OCTET_LIST { struct _ADS_OCTET_LIST *Next; DWORD Length; BYTE *Data; } ADS_OCTET_LIST; typedef struct { DWORD Type; LPWSTR VolumeName; LPWSTR Path; } ADS_PATH, *PADS_PATH; typedef struct { DWORD WholeSeconds; DWORD EventID; } ADS_TIMESTAMP; typedef ADSTYPEENUM ADSTYPE; typedef LPWSTR ADS_DN_STRING; typedef LPWSTR *PADS_DN_STRING; typedef LPWSTR ADS_CASE_EXACT_STRING; typedef LPWSTR *PADS_CASE_EXACT_STRING; typedef LPWSTR ADS_CASE_IGNORE_STRING; typedef LPWSTR *PADS_CASE_IGNORE_STRING; typedef LPWSTR ADS_PRINTABLE_STRING; typedef LPWSTR *PADS_PRINTABLE_STRING; typedef LPWSTR ADS_NUMERIC_STRING; typedef LPWSTR *PADS_NUMERIC_STRING; typedef DWORD ADS_BOOLEAN; typedef DWORD *LPNDS_BOOLEAN; typedef DWORD ADS_INTEGER; typedef DWORD *PADS_INTEGER; typedef SYSTEMTIME ADS_UTC_TIME; typedef SYSTEMTIME *PADS_UTC_TIME; typedef LARGE_INTEGER ADS_LARGE_INTEGER; typedef LARGE_INTEGER *PADS_LARGE_INTEGER; typedef LPWSTR ADS_OBJECT_CLASS; typedef LPWSTR *PADS_OBJECT_CLASS; typedef struct _ADS_OCTET_LIST *PADS_OCTET_LIST; typedef struct _ADS_CASEIGNORE_LIST *PADS_CASEIGNORE_LIST; typedef ADS_STATUSENUM ADS_STATUS; typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF; typedef HANDLE ADS_SEARCH_HANDLE; typedef HANDLE *PADS_SEARCH_HANDLE; typedef struct { DWORD dwLength; BYTE *lpValue; } ADS_OCTET_STRING; typedef struct { DWORD dwLength; BYTE *lpValue; } ADS_PROV_SPECIFIC; typedef struct { LPWSTR PostalAddress[ 6 ]; } ADS_POSTALADDRESS, *PADS_POSTALADDRESS; typedef struct { LPWSTR ObjectName; DWORD Level; DWORD Interval; } ADS_TYPEDNAME, *PADS_TYPEDNAME; typedef struct { DWORD RemoteID; LPWSTR ObjectName; } ADS_BACKLINK; typedef struct { LPWSTR ObjectName; DWORD Amount; } ADS_HOLD; typedef struct { DWORD AddressType; DWORD AddressLength; BYTE *Address; } ADS_NETADDRESS, *PADS_NETADDRESS; typedef struct { LPWSTR ServerName; DWORD ReplicaType; DWORD ReplicaNumber; DWORD Count; PADS_NETADDRESS ReplicaAddressHints; } ADS_REPLICAPOINTER, *PADS_REPLICAPOINTER; typedef struct { LPWSTR TelephoneNumber; DWORD NumberOfBits; BYTE *Parameters; } ADS_FAXNUMBER, *PADS_FAXNUMBER; typedef struct { LPWSTR Address; DWORD Type; } ADS_EMAIL, *PADS_EMAIL; typedef struct { DWORD dwLength; BYTE *lpValue; } ADS_NT_SECURITY_DESCRIPTOR; typedef struct { DWORD dwLength; BYTE *lpBinaryValue; LPWSTR pszDNString; } ADS_DN_WITH_BINARY, *PADS_DN_WITH_BINARY; typedef struct { LPWSTR pszStringValue; LPWSTR pszDNString; } ADS_DN_WITH_STRING, *PADS_DN_WITH_STRING; typedef struct _adsvalue { ADSTYPE dwType; union { ADS_DN_STRING DNString; ADS_CASE_EXACT_STRING CaseExactString; ADS_CASE_IGNORE_STRING CaseIgnoreString; ADS_PRINTABLE_STRING PrintableString; ADS_NUMERIC_STRING NumericString; ADS_BOOLEAN Boolean; ADS_INTEGER Integer; ADS_OCTET_STRING OctetString; ADS_UTC_TIME UTCTime; ADS_LARGE_INTEGER LargeInteger; ADS_OBJECT_CLASS ClassName; ADS_PROV_SPECIFIC ProviderSpecific; PADS_CASEIGNORE_LIST pCaseIgnoreList; PADS_OCTET_LIST pOctetList; PADS_PATH pPath; PADS_POSTALADDRESS pPostalAddress; ADS_TIMESTAMP Timestamp; ADS_BACKLINK BackLink; PADS_TYPEDNAME pTypedName; ADS_HOLD Hold; PADS_NETADDRESS pNetAddress; PADS_REPLICAPOINTER pReplicaPointer; PADS_FAXNUMBER pFaxNumber; ADS_EMAIL Email; ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor; PADS_DN_WITH_BINARY pDNWithBinary; PADS_DN_WITH_STRING pDNWithString; }; } ADSVALUE, *PADSVALUE; typedef struct ads_searchpref_info { ADS_SEARCHPREF dwSearchPref; ADSVALUE vValue; ADS_STATUS dwStatus; } ADS_SEARCHPREF_INFO; typedef struct ads_search_column { LPWSTR pszAttrName; ADSTYPE dwADsType; PADSVALUE pADsValues; DWORD dwNumValues; HANDLE hReserved; } ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN; /***************************************************************************** * IADsContainer interface */ [ object, uuid(001677d0-fd16-11ce-abc4-02608c9e7553) ] interface IADsContainer: IDispatch { [propget] HRESULT Count( [out, retval] long *retval); [propget, restricted] HRESULT _NewEnum( [out, retval] IUnknown **retval); [propget] HRESULT Filter( [out, retval] VARIANT *pvFilter); [propput] HRESULT Filter( [in] VARIANT vFilter); [propget] HRESULT Hints( [out, retval] VARIANT *pvHints); [propput] HRESULT Hints( [in] VARIANT vHints); HRESULT GetObject( [in] BSTR bstrClassName, [in] BSTR bstrRelativeName, [out, retval] IDispatch **ppObject); HRESULT Create( [in] BSTR bstrClassName, [in] BSTR bstrRelativeName, [out, retval] IDispatch **ppObject); HRESULT Delete( [in] BSTR bstrClassName, [in] BSTR bstrRelativeName); HRESULT CopyHere( [in] BSTR bstrSourceName, [in] BSTR bstrNewName, [out, retval] IDispatch **ppObject); HRESULT MoveHere( [in] BSTR bstrSourceName, [in] BSTR bstrNewName, [out, retval] IDispatch **ppObject); } /***************************************************************************** * IADs interface */ [ odl, uuid(FD8256D0-FD15-11CE-ABC4-02608C9E7553), dual, oleautomation ] interface IADs : IDispatch { [id(0x00000002), propget] HRESULT Name([out, retval] BSTR* retval); [id(0x00000003), propget] HRESULT Class([out, retval] BSTR* retval); [id(0x00000004), propget] HRESULT GUID([out, retval] BSTR* retval); [id(0x00000005), propget] HRESULT ADsPath([out, retval] BSTR* retval); [id(0x00000006), propget] HRESULT Parent([out, retval] BSTR* retval); [id(0x00000007), propget] HRESULT Schema([out, retval] BSTR* retval); [id(0x00000008)] HRESULT GetInfo(); [id(0x00000009)] HRESULT SetInfo(); [id(0x0000000a)] HRESULT Get([in] BSTR bstrName, [out, retval] VARIANT* pvProp); [id(0x0000000b)] HRESULT Put([in] BSTR bstrName, [in] VARIANT vProp); [id(0x0000000c)] HRESULT GetEx([in] BSTR bstrName, [out, retval] VARIANT* pvProp); [id(0x0000000d)] HRESULT PutEx([in] long lnControlCode, [in] BSTR bstrName, [in] VARIANT vProp); [id(0x0000000e)] HRESULT GetInfoEx( [in] VARIANT vProperties, [in] long lnReserved); } /***************************************************************************** * IADsMembers interface */ [ odl, uuid(451A0030-72EC-11CF-B03B-00AA006E0975), dual, oleautomation ] interface IADsMembers : IDispatch { [id(0x00000002), propget] HRESULT Count([out, retval] long* plCount); [id(0xfffffffc), propget] HRESULT _NewEnum([out, retval] IUnknown** ppEnumerator); [id(0x00000003), propget] HRESULT Filter([out, retval] VARIANT* pvFilter); [id(0x00000003), propput] HRESULT Filter([in] VARIANT pvFilter); } /***************************************************************************** * IADsGroup interface */ [ odl, uuid(27636B00-410F-11CF-B1FF-02608C9E7553), dual, oleautomation ] interface IADsGroup : IADs { [id(0x0000000f), propget] HRESULT Description([out, retval] BSTR* retval); [id(0x0000000f), propput] HRESULT Description([in] BSTR retval); [id(0x00000010)] HRESULT Members([out, retval] IADsMembers** ppMembers); [id(0x00000011)] HRESULT IsMember([in] BSTR bstrMember, [out, retval] VARIANT_BOOL* bMember); [id(0x00000012)] HRESULT Add([in] BSTR bstrNewItem); [id(0x00000013)] HRESULT Remove([in] BSTR bstrItemToBeRemoved); } /***************************************************************************** * IADsUser interface */ [ odl, uuid(3E37E320-17E2-11CF-ABC4-02608C9E7553), dual, oleautomation ] interface IADsUser : IADs { [id(0x00000035), propget] HRESULT BadLoginAddress([out, retval] BSTR* retval); [id(0x00000036), propget] HRESULT BadLoginCount([out, retval] long* retval); [id(0x00000038), propget] HRESULT LastLogin([out, retval] DATE* retval); [id(0x00000039), propget] HRESULT LastLogoff([out, retval] DATE* retval); [id(0x0000003a), propget] HRESULT LastFailedLogin([out, retval] DATE* retval); [id(0x0000003b), propget] HRESULT PasswordLastChanged([out, retval] DATE* retval); [id(0x0000000f), propget] HRESULT Description([out, retval] BSTR* retval); [id(0x0000000f), propput] HRESULT Description([in] BSTR retval); [id(0x00000013), propget] HRESULT Division([out, retval] BSTR* retval); [id(0x00000013), propput] HRESULT Division([in] BSTR retval); [id(0x0000007a), propget] HRESULT Department([out, retval] BSTR* retval); [id(0x0000007a), propput] HRESULT Department([in] BSTR retval); [id(0x00000014), propget] HRESULT EmployeeID([out, retval] BSTR* retval); [id(0x00000014), propput] HRESULT EmployeeID([in] BSTR retval); [id(0x00000017), propget] HRESULT FullName([out, retval] BSTR* retval); [id(0x00000017), propput] HRESULT FullName([in] BSTR retval); [id(0x00000016), propget] HRESULT FirstName([out, retval] BSTR* retval); [id(0x00000016), propput] HRESULT FirstName([in] BSTR retval); [id(0x00000019), propget] HRESULT LastName([out, retval] BSTR* retval); [id(0x00000019), propput] HRESULT LastName([in] BSTR retval); [id(0x0000001b), propget] HRESULT OtherName([out, retval] BSTR* retval); [id(0x0000001b), propput] HRESULT OtherName([in] BSTR retval); [id(0x00000072), propget] HRESULT NamePrefix([out, retval] BSTR* retval); [id(0x00000072), propput] HRESULT NamePrefix([in] BSTR retval); [id(0x00000073), propget] HRESULT NameSuffix([out, retval] BSTR* retval); [id(0x00000073), propput] HRESULT NameSuffix([in] BSTR retval); [id(0x00000024), propget] HRESULT Title([out, retval] BSTR* retval); [id(0x00000024), propput] HRESULT Title([in] BSTR retval); [id(0x0000001a), propget] HRESULT Manager([out, retval] BSTR* retval); [id(0x0000001a), propput] HRESULT Manager([in] BSTR retval); [id(0x00000020), propget] HRESULT TelephoneHome([out, retval] VARIANT* retval); [id(0x00000020), propput] HRESULT TelephoneHome([in] VARIANT retval); [id(0x00000021), propget] HRESULT TelephoneMobile([out, retval] VARIANT* retval); [id(0x00000021), propput] HRESULT TelephoneMobile([in] VARIANT retval); [id(0x00000022), propget] HRESULT TelephoneNumber([out, retval] VARIANT* retval); [id(0x00000022), propput] HRESULT TelephoneNumber([in] VARIANT retval); [id(0x00000011), propget] HRESULT TelephonePager([out, retval] VARIANT* retval); [id(0x00000011), propput] HRESULT TelephonePager([in] VARIANT retval); [id(0x00000010), propget] HRESULT FaxNumber([out, retval] VARIANT* retval); [id(0x00000010), propput] HRESULT FaxNumber([in] VARIANT retval); [id(0x0000001c), propget] HRESULT OfficeLocations([out, retval] VARIANT* retval); [id(0x0000001c), propput] HRESULT OfficeLocations([in] VARIANT retval); [id(0x0000001e), propget] HRESULT PostalAddresses([out, retval] VARIANT* retval); [id(0x0000001e), propput] HRESULT PostalAddresses([in] VARIANT retval); [id(0x0000001f), propget] HRESULT PostalCodes([out, retval] VARIANT* retval); [id(0x0000001f), propput] HRESULT PostalCodes([in] VARIANT retval); [id(0x00000075), propget] HRESULT SeeAlso([out, retval] VARIANT* retval); [id(0x00000075), propput] HRESULT SeeAlso([in] VARIANT retval); [id(0x00000025), propget] HRESULT AccountDisabled([out, retval] VARIANT_BOOL* retval); [id(0x00000025), propput] HRESULT AccountDisabled([in] VARIANT_BOOL retval); [id(0x00000026), propget] HRESULT AccountExpirationDate([out, retval] DATE* retval); [id(0x00000026), propput] HRESULT AccountExpirationDate([in] DATE retval); [id(0x00000029), propget] HRESULT GraceLoginsAllowed([out, retval] long* retval); [id(0x00000029), propput] HRESULT GraceLoginsAllowed([in] long retval); [id(0x0000002a), propget] HRESULT GraceLoginsRemaining([out, retval] long* retval); [id(0x0000002a), propput] HRESULT GraceLoginsRemaining([in] long retval); [id(0x0000002b), propget] HRESULT IsAccountLocked([out, retval] VARIANT_BOOL* retval); [id(0x0000002b), propput] HRESULT IsAccountLocked([in] VARIANT_BOOL retval); [id(0x0000002d), propget] HRESULT LoginHours([out, retval] VARIANT* retval); [id(0x0000002d), propput] HRESULT LoginHours([in] VARIANT retval); [id(0x0000002e), propget] HRESULT LoginWorkstations([out, retval] VARIANT* retval); [id(0x0000002e), propput] HRESULT LoginWorkstations([in] VARIANT retval); [id(0x0000002f), propget] HRESULT MaxLogins([out, retval] long* retval); [id(0x0000002f), propput] HRESULT MaxLogins([in] long retval); [id(0x00000030), propget] HRESULT MaxStorage([out, retval] long* retval); [id(0x00000030), propput] HRESULT MaxStorage([in] long retval); [id(0x00000031), propget] HRESULT PasswordExpirationDate([out, retval] DATE* retval); [id(0x00000031), propput] HRESULT PasswordExpirationDate([in] DATE retval); [id(0x00000032), propget] HRESULT PasswordMinimumLength([out, retval] long* retval); [id(0x00000032), propput] HRESULT PasswordMinimumLength([in] long retval); [id(0x00000033), propget] HRESULT PasswordRequired([out, retval] VARIANT_BOOL* retval); [id(0x00000033), propput] HRESULT PasswordRequired([in] VARIANT_BOOL retval); [id(0x00000034), propget] HRESULT RequireUniquePassword([out, retval] VARIANT_BOOL* retval); [id(0x00000034), propput] HRESULT RequireUniquePassword([in] VARIANT_BOOL retval); [id(0x0000003c), propget] HRESULT EmailAddress([out, retval] BSTR* retval); [id(0x0000003c), propput] HRESULT EmailAddress([in] BSTR retval); [id(0x0000003d), propget] HRESULT HomeDirectory([out, retval] BSTR* retval); [id(0x0000003d), propput] HRESULT HomeDirectory([in] BSTR retval); [id(0x0000003e), propget] HRESULT Languages([out, retval] VARIANT* retval); [id(0x0000003e), propput] HRESULT Languages([in] VARIANT retval); [id(0x0000003f), propget] HRESULT Profile([out, retval] BSTR* retval); [id(0x0000003f), propput] HRESULT Profile([in] BSTR retval); [id(0x00000040), propget] HRESULT LoginScript([out, retval] BSTR* retval); [id(0x00000040), propput] HRESULT LoginScript([in] BSTR retval); [id(0x00000041), propget] HRESULT Picture([out, retval] VARIANT* retval); [id(0x00000041), propput] HRESULT Picture([in] VARIANT retval); [id(0x00000078), propget] HRESULT HomePage([out, retval] BSTR* retval); [id(0x00000078), propput] HRESULT HomePage([in] BSTR retval); [id(0x00000042)] HRESULT Groups([out, retval] IADsMembers** ppGroups); [id(0x00000043)] HRESULT SetPassword([in] BSTR NewPassword); [id(0x00000044)] HRESULT ChangePassword([in] BSTR bstrOldPassword, [in] BSTR bstrNewPassword); } /***************************************************************************** * IDirectorySearch interface */ [ odl, local, uuid(109BA8EC-92F0-11D0-A790-00C04FD8D5A8) ] interface IDirectorySearch : IUnknown { HRESULT SetSearchPreference([in] PADS_SEARCHPREF_INFO pSearchPrefs, [in] DWORD dwNumPrefs); HRESULT ExecuteSearch([in] LPWSTR pszSearchFilter, [in] LPWSTR* pAttributeNames, [in] DWORD dwNumberAttributes, [out] PADS_SEARCH_HANDLE phSearchResult); HRESULT AbandonSearch([in] ADS_SEARCH_HANDLE phSearchResult); HRESULT GetFirstRow([in] ADS_SEARCH_HANDLE hSearchResult); HRESULT GetNextRow([in] ADS_SEARCH_HANDLE hSearchResult); HRESULT GetPreviousRow([in] ADS_SEARCH_HANDLE hSearchResult); HRESULT GetNextColumnName([in] ADS_SEARCH_HANDLE hSearchHandle, [out] LPWSTR* ppszColumnName); HRESULT GetColumn( [in] ADS_SEARCH_HANDLE hSearchResult, [in] LPWSTR szColumnName, [out] PADS_SEARCH_COLUMN pSearchColumn); HRESULT FreeColumn([in] PADS_SEARCH_COLUMN pSearchColumn); HRESULT CloseSearchHandle([in] ADS_SEARCH_HANDLE hSearchResult); } /***************************************************************************** * IADsADSystemInfo interface */ [ odl, uuid(5bb11929-afd1-11d2-9cb9-0000f87a369e), dual, oleautomation ] interface IADsADSystemInfo : IDispatch { [id(0x00000002), propget] HRESULT UserName([out, retval] BSTR *retval); [id(0x00000003), propget] HRESULT ComputerName([out, retval] BSTR *retval); [id(0x00000004), propget] HRESULT SiteName([out, retval] BSTR *retval); [id(0x00000005), propget] HRESULT DomainShortName([out, retval] BSTR *retval); [id(0x00000006), propget] HRESULT DomainDNSName([out, retval] BSTR *retval); [id(0x00000007), propget] HRESULT ForestDNSName([out, retval] BSTR *retval); [id(0x00000008), propget] HRESULT PDCRoleOwner([out, retval] BSTR *retval); [id(0x00000009), propget] HRESULT SchemaRoleOwner([out, retval] BSTR *retval); [id(0x0000000a), propget] HRESULT IsNativeMode([out, retval] VARIANT_BOOL *retval); [id(0x0000000b)] HRESULT GetAnyDCName([out, retval] BSTR *retval); [id(0x0000000c)] HRESULT GetDCSiteName([in] BSTR server, [out, retval] BSTR *retval); [id(0x0000000d)] HRESULT RefreshSchemaCache(); [id(0x0000000e)] HRESULT GetTrees([out, retval] VARIANT *retval); } [ helpstring("AD System Info Object"), uuid(50b6327f-afd1-11d2-9cb9-0000f87a369e), progid("ADSystemInfo"), version(1.0) ] coclass ADSystemInfo { [default] interface IADsADSystemInfo; interface IDispatch; } } /* library */ ================================================ FILE: wine/windows/icftypes.idl ================================================ /* * Types for the ICF api * * Copyright 2007 Jeff Latimer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ import "wtypes.idl"; typedef enum NET_FW_PROFILE_TYPE_ { NET_FW_PROFILE_DOMAIN, NET_FW_PROFILE_STANDARD, NET_FW_PROFILE_CURRENT, NET_FW_PROFILE_TYPE_MAX } NET_FW_PROFILE_TYPE; typedef enum NET_FW_PROFILE_TYPE2_ { NET_FW_PROFILE2_DOMAIN = 0x0001, NET_FW_PROFILE2_PRIVATE = 0x0002, NET_FW_PROFILE2_PUBLIC = 0x0004, NET_FW_PROFILE2_ALL = 0x7FFFFFFF } NET_FW_PROFILE_TYPE2; typedef enum NET_FW_IP_VERSION_ { NET_FW_IP_VERSION_V4, NET_FW_IP_VERSION_V6, NET_FW_IP_VERSION_ANY, NET_FW_IP_VERSION_MAX } NET_FW_IP_VERSION; typedef enum NET_FW_POLICY_TYPE_ { NET_FW_POLICY_GROUP, NET_FW_POLICY_LOCAL, NET_FW_POLICY_EFFECTIVE, NET_FW_POLICY_TYPE_MAX } NET_FW_POLICY_TYPE; typedef enum NET_FW_SCOPE_ { NET_FW_SCOPE_ALL, NET_FW_SCOPE_LOCAL_SUBNET, NET_FW_SCOPE_CUSTOM, NET_FW_SCOPE_MAX } NET_FW_SCOPE; typedef enum NET_FW_SERVICE_TYPE_ { NET_FW_SERVICE_FILE_AND_PRINT, NET_FW_SERVICE_UPNP, NET_FW_SERVICE_REMOTE_DESKTOP, NET_FW_SERVICE_NONE, NET_FW_SERVICE_TYPE_MAX } NET_FW_SERVICE_TYPE; typedef enum NET_FW_IP_PROTOCOL_ { NET_FW_IP_PROTOCOL_TCP = 6, NET_FW_IP_PROTOCOL_UDP = 17 } NET_FW_IP_PROTOCOL; typedef enum NET_FW_RULE_DIRECTION_ { NET_FW_RULE_DIR_IN = 1, NET_FW_RULE_DIR_OUT, NET_FW_RULE_DIR_MAX } NET_FW_RULE_DIRECTION; typedef enum NET_FW_ACTION_ { NET_FW_ACTION_BLOCK, NET_FW_ACTION_ALLOW, NET_FW_ACTION_MAX } NET_FW_ACTION; typedef enum NET_FW_MODIFY_STATE_ { NET_FW_MODIFY_STATE_OK, NET_FW_MODIFY_STATE_GP_OVERRIDE, NET_FW_MODIFY_STATE_INBOUND_BLOCKED } NET_FW_MODIFY_STATE; ================================================ FILE: wine/windows/icm.h ================================================ /* * Copyright 2004 (C) Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ICM_H #define __WINE_ICM_H #ifdef __cplusplus extern "C" { #endif typedef HANDLE HPROFILE; typedef HPROFILE *PHPROFILE; typedef HANDLE HTRANSFORM; typedef DWORD TAGTYPE, *PTAGTYPE, *LPTAGTYPE; typedef char COLOR_NAME[32]; typedef COLOR_NAME *PCOLOR_NAME, *LPCOLOR_NAME; typedef struct tagNAMED_PROFILE_INFO { DWORD dwFlags; DWORD dwCount; DWORD dwCountDevCoordinates; COLOR_NAME szPrefix; COLOR_NAME szSuffix; } NAMED_PROFILE_INFO, *PNAMED_PROFILE_INFO, *LPNAMED_PROFILE_INFO; #define MAX_COLOR_CHANNELS 8 struct GRAYCOLOR { WORD gray; }; struct RGBCOLOR { WORD red; WORD green; WORD blue; }; struct CMYKCOLOR { WORD cyan; WORD magenta; WORD yellow; WORD black; }; struct XYZCOLOR { WORD X; WORD Y; WORD Z; }; struct YxyCOLOR { WORD Y; WORD x; WORD y; }; struct LabCOLOR { WORD L; WORD a; WORD b; }; struct GENERIC3CHANNEL { WORD ch1; WORD ch2; WORD ch3; }; struct NAMEDCOLOR { DWORD dwIndex; }; struct HiFiCOLOR { BYTE channel[MAX_COLOR_CHANNELS]; }; typedef union tagCOLOR { struct GRAYCOLOR gray; struct RGBCOLOR rgb; struct CMYKCOLOR cmyk; struct XYZCOLOR XYZ; struct YxyCOLOR Yxy; struct LabCOLOR Lab; struct GENERIC3CHANNEL gen3ch; struct NAMEDCOLOR named; struct HiFiCOLOR hifi; struct { DWORD reserved1; VOID *reserved2; } DUMMYSTRUCTNAME; } COLOR, *PCOLOR, *LPCOLOR; typedef enum { COLOR_GRAY = 1, COLOR_RGB, COLOR_XYZ, COLOR_Yxy, COLOR_Lab, COLOR_3_CHANNEL, COLOR_CMYK, COLOR_5_CHANNEL, COLOR_6_CHANNEL, COLOR_7_CHANNEL, COLOR_8_CHANNEL, COLOR_NAMED, } COLORTYPE, *PCOLORTYPE, *LPCOLORTYPE; typedef enum { BM_x555RGB = 0x00, BM_565RGB = 0x01, BM_RGBTRIPLETS = 0x02, BM_BGRTRIPLETS = 0x04, BM_xRGBQUADS = 0x08, BM_10b_RGB = 0x09, BM_16b_RGB = 0x0a, BM_xBGRQUADS = 0x10, BM_CMYKQUADS = 0x20, BM_x555XYZ = 0x101, BM_x555Yxz, BM_x555Lab, BM_x555G3CH, BM_XYZTRIPLETS = 0x201, BM_YxyTRIPLETS, BM_LabTRIPLETS, BM_G3CHTRIPLETS, BM_5CHANNEL, BM_6CHANNEL, BM_7CHANNEL, BM_8CHANNEL, BM_GRAY, BM_xXYZQUADS = 0x301, BM_xYxyQUADS, BM_xLabQUADS, BM_xG3CHQUADS, BM_KYMCQUADS, BM_10b_XYZ = 0x401, BM_10b_Yxy, BM_10b_Lab, BM_10b_G3CH, BM_NAMED_INDEX, BM_16b_XYZ = 0x501, BM_16b_Yxy, BM_16b_Lab, BM_16b_G3CH, BM_16b_GRAY, } BMFORMAT, *PBMFORMAT, *LPBMFORMAT; typedef BOOL (CALLBACK *PBMCALLBACKFN)(ULONG,ULONG,LPARAM); typedef PBMCALLBACKFN LPPBMCALLBACKFN; #define INTENT_PERCEPTUAL 0 #define INTENT_RELATIVE_COLORIMETRIC 1 #define INTENT_SATURATION 2 #define INTENT_ABSOLUTE_COLORIMETRIC 3 typedef struct tagPROFILEHEADER { DWORD phSize; DWORD phCMMType; DWORD phVersion; DWORD phClass; DWORD phDataColorSpace; DWORD phConnectionSpace; DWORD phDateTime[3]; DWORD phSignature; DWORD phPlatform; DWORD phProfileFlags; DWORD phManufacturer; DWORD phModel; DWORD phAttributes[2]; DWORD phRenderingIntent; CIEXYZ phIlluminant; DWORD phCreator; BYTE phReserved[44]; } PROFILEHEADER, *PPROFILEHEADER, *LPPROFILEHEADER; typedef struct tagPROFILE { DWORD dwType; PVOID pProfileData; DWORD cbDataSize; } PROFILE, *PPROFILE, *LPPROFILE; #define ENUM_TYPE_VERSION 0x0300 typedef struct tagENUMTYPEA { DWORD dwSize; DWORD dwVersion; DWORD dwFields; PCSTR pDeviceName; DWORD dwMediaType; DWORD dwDitheringMode; DWORD dwResolution[2]; DWORD dwCMMType; DWORD dwClass; DWORD dwDataColorSpace; DWORD dwConnectionSpace; DWORD dwSignature; DWORD dwPlatform; DWORD dwProfileFlags; DWORD dwManufacturer; DWORD dwModel; DWORD dwAttributes[2]; DWORD dwRenderingIntent; DWORD dwCreator; DWORD dwDeviceClass; } ENUMTYPEA, *PENUMTYPEA, *LPENUMTYPEA; typedef struct tagENUMTYPEW { DWORD dwSize; DWORD dwVersion; DWORD dwFields; PCWSTR pDeviceName; DWORD dwMediaType; DWORD dwDitheringMode; DWORD dwResolution[2]; DWORD dwCMMType; DWORD dwClass; DWORD dwDataColorSpace; DWORD dwConnectionSpace; DWORD dwSignature; DWORD dwPlatform; DWORD dwProfileFlags; DWORD dwManufacturer; DWORD dwModel; DWORD dwAttributes[2]; DWORD dwRenderingIntent; DWORD dwCreator; DWORD dwDeviceClass; } ENUMTYPEW, *PENUMTYPEW, *LPENUMTYPEW; #define ET_DEVICENAME 0x00000001 #define ET_MEDIATYPE 0x00000002 #define ET_DITHERMODE 0x00000004 #define ET_RESOLUTION 0x00000008 #define ET_CMMTYPE 0x00000010 #define ET_CLASS 0x00000020 #define ET_DATACOLORSPACE 0x00000040 #define ET_CONNECTIONSPACE 0x00000080 #define ET_SIGNATURE 0x00000100 #define ET_PLATFORM 0x00000200 #define ET_PROFILEFLAGS 0x00000400 #define ET_MANUFACTURER 0x00000800 #define ET_MODEL 0x00001000 #define ET_ATTRIBUTES 0x00002000 #define ET_RENDERINGINTENT 0x00004000 #define ET_CREATOR 0x00008000 #define ET_DEVICECLASS 0x00010000 struct _tagCOLORMATCHSETUPA; struct _tagCOLORMATCHSETUPW; typedef BOOL (WINAPI *PCMSCALLBACKA)(struct _tagCOLORMATCHSETUPA*,LPARAM); typedef BOOL (WINAPI *PCMSCALLBACKW)(struct _tagCOLORMATCHSETUPW*,LPARAM); typedef struct _tagCOLORMATCHSETUPA { DWORD dwSize; DWORD dwVersion; DWORD dwFlags; HWND hwndOwner; PCSTR pSourceName; PCSTR pDisplayName; PCSTR pPrinterName; DWORD dwRenderIntent; DWORD dwProofingIntent; PSTR pMonitorProfile; DWORD ccMonitorProfile; PSTR pPrinterProfile; DWORD ccPrinterProfile; PSTR pTargetProfile; DWORD ccTargetProfile; DLGPROC lpfnHook; LPARAM lParam; PCMSCALLBACKA lpfnApplyCallback; LPARAM lParamApplyCallback; } COLORMATCHSETUPA, *PCOLORMATCHSETUPA, *LPCOLORMATCHSETUPA; typedef struct _tagCOLORMATCHSETUPW { DWORD dwSize; DWORD dwVersion; DWORD dwFlags; HWND hwndOwner; PCWSTR pSourceName; PCWSTR pDisplayName; PCWSTR pPrinterName; DWORD dwRenderIntent; DWORD dwProofingIntent; PWSTR pMonitorProfile; DWORD ccMonitorProfile; PWSTR pPrinterProfile; DWORD ccPrinterProfile; PWSTR pTargetProfile; DWORD ccTargetProfile; DLGPROC lpfnHook; LPARAM lParam; PCMSCALLBACKW lpfnApplyCallback; LPARAM lParamApplyCallback; } COLORMATCHSETUPW, *PCOLORMATCHSETUPW, *LPCOLORMATCHSETUPW; BOOL WINAPI AssociateColorProfileWithDeviceA(PCSTR,PCSTR,PCSTR); BOOL WINAPI AssociateColorProfileWithDeviceW(PCWSTR,PCWSTR,PCWSTR); #define AssociateColorProfileWithDevice WINELIB_NAME_AW(AssociateColorProfileWithDevice) BOOL WINAPI CheckBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PBYTE,PBMCALLBACKFN,LPARAM); BOOL WINAPI CheckColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PBYTE); BOOL WINAPI ConvertColorNameToIndex(HPROFILE,PCOLOR_NAME,PDWORD,DWORD); BOOL WINAPI ConvertIndexToColorName(HPROFILE,PDWORD,PCOLOR_NAME,DWORD); BOOL WINAPI CloseColorProfile(HPROFILE); HTRANSFORM WINAPI CreateColorTransformA(LPLOGCOLORSPACEA,HPROFILE,HPROFILE,DWORD); HTRANSFORM WINAPI CreateColorTransformW(LPLOGCOLORSPACEW,HPROFILE,HPROFILE,DWORD); #define CreateColorTransform WINELIB_NAME_AW(CreateColorTransform) BOOL WINAPI CreateDeviceLinkProfile(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,PBYTE*,DWORD); HTRANSFORM WINAPI CreateMultiProfileTransform(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,DWORD); BOOL WINAPI CreateProfileFromLogColorSpaceA(LPLOGCOLORSPACEA,PBYTE*); BOOL WINAPI CreateProfileFromLogColorSpaceW(LPLOGCOLORSPACEW,PBYTE*); #define CreateProfileFromLogColorSpace WINELIB_NAME_AW(CreateProfileFromLogColorSpace) BOOL WINAPI DeleteColorTransform(HTRANSFORM); BOOL WINAPI DisassociateColorProfileFromDeviceA(PCSTR,PCSTR,PCSTR); BOOL WINAPI DisassociateColorProfileFromDeviceW(PCWSTR,PCWSTR,PCWSTR); #define DisassociateColorProfileFromDevice WINELIB_NAME_AW(DisassociateColorProfileFromDevice) BOOL WINAPI EnumColorProfilesA(PCSTR,PENUMTYPEA,PBYTE,PDWORD,PDWORD); BOOL WINAPI EnumColorProfilesW(PCWSTR,PENUMTYPEW,PBYTE,PDWORD,PDWORD); #define EnumColorProfiles WINELIB_NAME_AW(EnumColorProfiles) DWORD WINAPI GenerateCopyFilePaths(LPCWSTR,LPCWSTR,LPBYTE,DWORD,LPWSTR,LPDWORD,LPWSTR,LPDWORD,DWORD); DWORD WINAPI GetCMMInfo(HTRANSFORM,DWORD); BOOL WINAPI GetColorDirectoryA(PCSTR,PSTR,PDWORD); BOOL WINAPI GetColorDirectoryW(PCWSTR,PWSTR,PDWORD); #define GetColorDirectory WINELIB_NAME_AW(GetColorDirectory) BOOL WINAPI GetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID,PBOOL); BOOL WINAPI GetColorProfileElementTag(HPROFILE,DWORD,PTAGTYPE); BOOL WINAPI GetColorProfileFromHandle(HPROFILE,PBYTE,PDWORD); BOOL WINAPI GetColorProfileHeader(HPROFILE,PPROFILEHEADER); BOOL WINAPI GetCountColorProfileElements(HPROFILE,PDWORD); BOOL WINAPI GetNamedProfileInfo(HPROFILE,PNAMED_PROFILE_INFO); BOOL WINAPI GetPS2ColorRenderingDictionary(HPROFILE,DWORD,PBYTE,PDWORD,PBOOL); BOOL WINAPI GetPS2ColorRenderingIntent(HPROFILE,DWORD,PBYTE,PDWORD); BOOL WINAPI GetPS2ColorSpaceArray(HPROFILE,DWORD,DWORD,PBYTE,PDWORD,PBOOL); BOOL WINAPI GetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR,PDWORD); BOOL WINAPI GetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR,PDWORD); #define GetStandardColorSpaceProfile WINELIB_NAME_AW(GetStandardColorSpaceProfile) BOOL WINAPI InstallColorProfileA(PCSTR,PCSTR); BOOL WINAPI InstallColorProfileW(PCWSTR,PCWSTR); #define InstallColorProfile WINELIB_NAME_AW(InstallColorProfile) BOOL WINAPI IsColorProfileTagPresent(HPROFILE,TAGTYPE,PBOOL); BOOL WINAPI IsColorProfileValid(HPROFILE,PBOOL); HPROFILE WINAPI OpenColorProfileA(PPROFILE,DWORD,DWORD,DWORD); HPROFILE WINAPI OpenColorProfileW(PPROFILE,DWORD,DWORD,DWORD); #define OpenColorProfile WINELIB_NAME_AW(OpenColorProfile) BOOL WINAPI RegisterCMMA(PCSTR,DWORD,PCSTR); BOOL WINAPI RegisterCMMW(PCWSTR,DWORD,PCWSTR); #define RegisterCMM WINELIB_NAME_AW(RegisterCMM) BOOL WINAPI SelectCMM(DWORD id); BOOL WINAPI SetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID); BOOL WINAPI SetColorProfileElementReference(HPROFILE,TAGTYPE,TAGTYPE); BOOL WINAPI SetColorProfileElementSize(HPROFILE,TAGTYPE,DWORD); BOOL WINAPI SetColorProfileHeader(HPROFILE,PPROFILEHEADER); BOOL WINAPI SetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR); BOOL WINAPI SetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR); #define SetStandardColorSpaceProfile WINELIB_NAME_AW(SetStandardColorSpaceProfile) BOOL WINAPI SetupColorMatchingA(PCOLORMATCHSETUPA); BOOL WINAPI SetupColorMatchingW(PCOLORMATCHSETUPW); #define SetupColorMatching WINELIB_NAME_AW(SetupColorMatching) BOOL WINAPI SpoolerCopyFileEvent(LPWSTR,LPWSTR,DWORD); BOOL WINAPI TranslateBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PVOID,BMFORMAT,DWORD,PBMCALLBACKFN,ULONG); BOOL WINAPI TranslateColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PCOLOR,COLORTYPE); BOOL WINAPI UninstallColorProfileA(PCSTR,PCSTR,BOOL); BOOL WINAPI UninstallColorProfileW(PCWSTR,PCWSTR,BOOL); #define UninstallColorProfile WINELIB_NAME_AW(UninstallColorProfile) BOOL WINAPI UnregisterCMMA(PCSTR,DWORD); BOOL WINAPI UnregisterCMMW(PCWSTR,DWORD); #define UnregisterCMM WINELIB_NAME_AW(UnregisterCMM) #define PROFILE_FILENAME 1 #define PROFILE_MEMBUFFER 2 #define PROFILE_READ 1 #define PROFILE_READWRITE 2 #define SPACE_XYZ 0x58595A20 /* 'XYZ ' */ #define SPACE_Lab 0x4C616220 /* 'Lab ' */ #define SPACE_Luv 0x4C757620 /* 'Luv ' */ #define SPACE_YCbCr 0x59436272 /* 'YCbr' */ #define SPACE_Yxy 0x59787920 /* 'Yxy ' */ #define SPACE_RGB 0x52474220 /* 'RGB ' */ #define SPACE_GRAY 0x47524159 /* 'GRAY' */ #define SPACE_HSV 0x48535620 /* 'HSV ' */ #define SPACE_HLS 0x484C5320 /* 'HLS ' */ #define SPACE_CMYK 0x434D594B /* 'CMYK' */ #define SPACE_CMY 0x434D5920 /* 'CMY ' */ #define SPACE_2_CHANNEL 0x32434c52 /* '2CLR' */ #define SPACE_3_CHANNEL 0x33434c52 /* '3CLR' */ #define SPACE_4_CHANNEL 0x34434c52 /* '4CLR' */ #define SPACE_5_CHANNEL 0x35434c52 /* '5CLR' */ #define SPACE_6_CHANNEL 0x36434c52 /* '6CLR' */ #define SPACE_7_CHANNEL 0x37434c52 /* '7CLR' */ #define SPACE_8_CHANNEL 0x38434c52 /* '8CLR' */ #ifdef __cplusplus } #endif #endif /* __WINE_ICM_H */ ================================================ FILE: wine/windows/icmpapi.h ================================================ /* * Interface to the ICMP functions. * * Copyright (C) 1999 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ICMPAPI_H #define __WINE_ICMPAPI_H #ifdef __cplusplus extern "C" { #endif HANDLE WINAPI IcmpCreateFile( VOID ); BOOL WINAPI IcmpCloseHandle( HANDLE IcmpHandle ); DWORD WINAPI IcmpSendEcho( HANDLE IcmpHandle, IPAddr DestinationAddress, LPVOID RequestData, WORD RequestSize, PIP_OPTION_INFORMATION RequestOptions, LPVOID ReplyBuffer, DWORD ReplySize, DWORD Timeout ); #ifdef __cplusplus } #endif #endif /* __WINE_ICMPAPI_H */ ================================================ FILE: wine/windows/idispids.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_IDISPIDS_H__ #define __WINE_IDISPIDS_H__ #define DISPID_READYSTATE (-525) #define DISPID_READYSTATECHANGE (-609) #define DISPID_AMBIENT_TRANSFERPRIORITY (-728) #define DISPID_AMBIENT_OFFLINEIFNOTCONNECTED (-5501) #define DISPID_AMBIENT_SILENT (-5502) #ifndef DISPID_AMBIENT_CODEPAGE #define DISPID_AMBIENT_CODEPAGE (-725) #define DISPID_AMBIENT_CHARSET (-727) #endif /* DISPID_AMBIENT_CODEPAGE */ #endif /* __WINE_IDISPIDS_H__ */ ================================================ FILE: wine/windows/ieautomation.idl ================================================ /* * Copyright 2017 Zebediah Figura for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "ocidl.idl"; typedef [ uuid(44ec9b57-dcab-4cde-b373-ee94962950e3) ] enum INTERNETEXPLORERCONFIGURATION { INTERNETEXPLORERCONFIGURATION_HOST = 0x00000001, INTERNETEXPLORERCONFIGURATION_WEB_DRIVER = 0x00000002, INTERNETEXPLORERCONFIGURATION_WEB_DRIVER_EDGE = 0x00000004, } INTERNETEXPLORERCONFIGURATION; [ object, uuid(acc84351-04ff-44f9-b23f-655ed168c6d5), pointer_default(unique) ] interface IInternetExplorerManager : IUnknown { HRESULT CreateObject([in] DWORD config, [in, unique, string] LPCWSTR url, [in] REFIID riid, [out, iid_is(riid)] void **ppv); } [ uuid(df4fcc34-067a-4e0a-8352-4a1a5095346e) ] coclass InternetExplorerManager { [default] interface IInternetExplorerManager; } ================================================ FILE: wine/windows/iextag.idl ================================================ /* * Copyright 2011 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; [ object, uuid(7e8bc44d-aeff-11d1-89c2-00c04fb6bfc4), dual, pointer_default(unique) ] interface IClientCaps : IDispatch { [propget, id(1)] HRESULT javaEnabled([out, retval] VARIANT_BOOL *pVal); [propget, id(2)] HRESULT cookieEnabled([out, retval] VARIANT_BOOL *pVal); [propget, id(3)] HRESULT cpuClass([out, retval] BSTR *p); [propget, id(4)] HRESULT systemLanguage([out, retval] BSTR *p); [propget, id(6)] HRESULT userLanguage([out, retval] BSTR *p); [propget, id(7)] HRESULT platform([out, retval] BSTR *p); [propget, id(9)] HRESULT connectionSpeed([out, retval] long *p); [propget, id(10)] HRESULT onLine([out, retval] VARIANT_BOOL *p); [propget, id(11)] HRESULT colorDepth([out, retval] long *p); [propget, id(12)] HRESULT bufferDepth([out, retval] long *p); [propget, id(13)] HRESULT width([out, retval] long *p); [propget, id(14)] HRESULT height([out, retval] long *p); [propget, id(15)] HRESULT availHeight([out, retval] long *p); [propget, id(16)] HRESULT availWidth([out, retval] long *p); [propget, id(17)] HRESULT connectionType([out, retval] BSTR *p); [id(18)] HRESULT isComponentInstalled( [in] BSTR bstrName, [in] BSTR bstrType, [in, defaultvalue("")] BSTR bStrVer, [out, retval] VARIANT_BOOL *p); [id(19)] HRESULT getComponentVersion( [in] BSTR bstrName, [in] BSTR bstrType, [out, retval] BSTR *pbstrVer); [id(20)] HRESULT compareVersions( [in] BSTR bstrVer1, [in] BSTR bstrVer2, [out, retval] long *p); [id(21)] HRESULT addComponentRequest( [in] BSTR bstrName, [in] BSTR bstrType, [in, defaultvalue("")] BSTR bstrVer); [id(22)] HRESULT doComponentRequest([out, retval] VARIANT_BOOL *p); [id(23)] HRESULT clearComponentRequest(); } [ uuid(7e8bc440-aeff-11d1-89c2-00c04fb6bfc4), version(1.0) ] library IEXTagLib { [ uuid(7e8bc44e-aeff-11d1-89c2-00C04fb6bfc4) ] coclass ClientCaps { [default] interface IClientCaps; } } ================================================ FILE: wine/windows/ifdef.h ================================================ /* WINE ifdef.h * Copyright 2010 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WINE_IFDEF_H #define WINE_IFDEF_H #include typedef ULONG32 NET_IF_OBJECT_ID, *PNET_IF_OBJECT_ID; typedef UINT32 NET_IF_COMPARTMENT_ID, *PNET_IF_COMPARTMENT_ID; typedef GUID NET_IF_NETWORK_GUID, *PNET_IF_NETWORK_GUID; typedef ULONG NET_IFINDEX, *PNET_IFINDEX; typedef NET_IFINDEX IF_INDEX, *PIF_INDEX; typedef UINT16 NET_IFTYPE, *PNET_IFTYPE; #define NET_IF_OPER_STATUS_DOWN_NOT_AUTHENTICATED 0x00000001 #define NET_IF_OPER_STATUS_DOWN_NOT_MEDIA_CONNECTED 0x00000002 #define NET_IF_OPER_STATUS_DORMANT_PAUSED 0x00000004 #define NET_IF_OPER_STATUS_DORMANT_LOW_POWER 0x00000008 #define NET_IF_COMPARTMENT_ID_UNSPECIFIED 0 #define NET_IF_COMPARTMENT_ID_PRIMARY 1 #define NET_IF_OID_IF_ALIAS 0x00000001 #define NET_IF_OID_COMPARTMENT_ID 0x00000002 #define NET_IF_OID_NETWORK_GUID 0x00000003 #define NET_IF_OID_IF_ENTRY 0x00000004 #define NET_SET_UNSPECIFIED_NETWORK_GUID(x) #define NET_IS_UNSPECIFIED_NETWORK_GUID(x) #define NET_SITEID_UNSPECIFIED 0 #define NET_SITEID_MAXUSER 0x07ffffff #define NET_SITEID_MAXSYSTEM 0x0fffffff #define NET_IFINDEX_UNSPECIFIED 0 #define IFI_UNSPECIFIED NET_IFINDEX_UNSPECIFIED #define NET_IFLUID_UNSPECIFIED 0 #define NIIF_HARDWARE_INTERFACE 0x00000001 #define NIIF_FILTER_INTERFACE 0x00000002 #define NIIF_NDIS_WDM_INTERFACE 0x00000020 #define NIIF_NDIS_ENDPOINT_INTERFACE 0x00000040 #define NIIF_NDIS_ISCSI_INTERFACE 0x00000080 #define NIIF_WAN_TUNNEL_TYPE_UNKNOWN 0xffffffff #define NET_BUS_NUMBER_UNKNOWN 0xffffffff #define NET_SLOT_NUMBER_UNKNOWN 0xffffffff #define NET_FUNCTION_NUMBER_UNKNOWN 0xffffffff #define IF_MAX_STRING_SIZE 256 #define IF_MAX_PHYS_ADDRESS_LENGTH 32 typedef enum _NET_IF_ADMIN_STATUS { NET_IF_ADMIN_STATUS_UP = 1, NET_IF_ADMIN_STATUS_DOWN = 2, NET_IF_ADMIN_STATUS_TESTING = 3 } NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS; typedef enum _NET_IF_OPER_STATUS { NET_IF_OPER_STATUS_UP = 1, NET_IF_OPER_STATUS_DOWN = 2, NET_IF_OPER_STATUS_TESTING = 3, NET_IF_OPER_STATUS_UNKNOWN = 4, NET_IF_OPER_STATUS_DORMANT = 5, NET_IF_OPER_STATUS_NOT_PRESENT = 6, NET_IF_OPER_STATUS_LOWER_LAYER_DOWN = 7 } NET_IF_OPER_STATUS, *PNET_IF_OPER_STATUS; typedef enum _NET_IF_RCV_ADDRESS_TYPE { NET_IF_RCV_ADDRESS_TYPE_OTHER = 1, NET_IF_RCV_ADDRESS_TYPE_VOLATILE = 2, NET_IF_RCV_ADDRESS_TYPE_NON_VOLATILE = 3 } NET_IF_RCV_ADDRESS_TYPE, *PNET_IF_RCV_ADDRESS_TYPE; typedef struct _NET_IF_RCV_ADDRESS_LH { NET_IF_RCV_ADDRESS_TYPE ifRcvAddressType; USHORT ifRcvAddressLength; USHORT ifRcvAddressOffset; } NET_IF_RCV_ADDRESS_LH, *PNET_IF_RCV_ADDRESS_LH; typedef NET_IF_RCV_ADDRESS_LH NET_IF_RCV_ADDRESS; typedef NET_IF_RCV_ADDRESS_LH *PNET_IF_RCV_ADDRESS; typedef union _NET_LUID_LH { ULONG64 Value; struct { ULONG64 Reserved : 24; ULONG64 NetLuidIndex : 24; ULONG64 IfType : 16; } Info; } NET_LUID_LH, *PNET_LUID_LH; typedef NET_LUID_LH NET_LUID; typedef NET_LUID *PNET_LUID; typedef NET_LUID IF_LUID; typedef NET_LUID *PIF_LUID; typedef enum _NET_IF_ACCESS_TYPE { NET_IF_ACCESS_LOOPBACK = 1, NET_IF_ACCESS_BROADCAST = 2, NET_IF_ACCESS_POINT_TO_POINT = 2, NET_IF_ACCESS_POINT_TO_MULTI_POINT = 4, NET_IF_ACCESS_MAXIMUM = 5 } NET_IF_ACCESS_TYPE, *PNET_IF_ACCESS_TYPE; typedef enum _NET_IF_DIRECTION_TYPE { NET_IF_DIRECTION_SENDRECEIVE = 0, NET_IF_DIRECTION_SENDONLY = 1, NET_IF_DIRECTION_RECEIVEONLY = 2, NET_IF_DIRECTION_MAXIMUM = 3 } NET_IF_DIRECTION_TYPE, *PNET_IF_DIRECTION_TYPE; typedef enum _NET_IF_CONNECTION_TYPE { NET_IF_CONNECTION_DEDICATED = 1, NET_IF_CONNECTION_PASSIVE = 2, NET_IF_CONNECTION_DEMAND = 3, NET_IF_CONNECTION_MAXIMUM = 4, } NET_IF_CONNECTION_TYPE, *PNET_IF_CONNECTION_TYPE; typedef enum _NET_IF_MEDIA_CONNECT_STATE { MediaConnectStateUnknown = 0, MediaConnectStateConnected = 1, MediaConnectStateDisconnected = 2 } NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE; typedef enum _NET_IF_MEDIA_DUPLEX_STATE { MediaDuplexStateUnknown = 0, MediaDuplexStateHalf = 1, MediaDuplexStateFull = 2 } NET_IF_MEDIA_DUPLEX_STATE, *PNET_IF_MEDIA_DUPLEX_STATE; typedef struct _NET_PHYSICAL_LOCATION_LH { ULONG BusNumber; ULONG SlotNumber; ULONG FunctionNumber; } NET_PHYSICAL_LOCATION_LH, *PNET_PHYSICAL_LOCATION_LH; typedef NET_PHYSICAL_LOCATION_LH NET_PHYSICAL_LOCATION; typedef NET_PHYSICAL_LOCATION *PNET_PHYSICAL_LOCATION; typedef struct _IF_COUNTED_STRING_LH { USHORT Length; WCHAR String[IF_MAX_STRING_SIZE + 1]; } IF_COUNTED_STRING_LH, *PIF_COUNTED_STRING_LH; typedef IF_COUNTED_STRING_LH IF_COUNTED_STRING; typedef IF_COUNTED_STRING *PIF_COUNTED_STRING; typedef struct _IF_PHYSICAL_ADDRESS_LH { USHORT Length; UCHAR Address[IF_MAX_PHYS_ADDRESS_LENGTH]; } IF_PHYSICAL_ADDRESS_LH, *PIF_PHYSICAL_ADDRESS_LH; typedef IF_PHYSICAL_ADDRESS_LH IF_PHYSICAL_ADDRESS; typedef IF_PHYSICAL_ADDRESS *PIF_PHYSICAL_ADDRESS; typedef enum { TUNNEL_TYPE_NONE = 0, TUNNEL_TYPE_OTHER = 1, TUNNEL_TYPE_DIRECT = 2, TUNNEL_TYPE_6TO4 = 11, TUNNEL_TYPE_ISATAP = 13, TUNNEL_TYPE_TEREDO = 14, TUNNEL_TYPE_IPHTTPS = 15, } TUNNEL_TYPE; typedef enum _IF_ADMINISTRATIVE_STATE { IF_ADMINISTRATIVE_STATE_DISABLED = 0, IF_ADMINISTRATIVE_STATE_ENABLED = 1, IF_ADMINISTRATIVE_STATE_DEMANDDIAL = 2 } IF_ADMINISTRATIVE_STATE, *PIF_ADMINISTRATIVE_STATE; typedef enum { IfOperStatusUp = 1, IfOperStatusDown, IfOperStatusTesting, IfOperStatusUnknown, IfOperStatusDormant, IfOperStatusNotPresent, IfOperStatusLowerLayerDown } IF_OPER_STATUS; typedef struct _NDIS_INTERFACE_INFORMATION { NET_IF_OPER_STATUS ifOperStatus; ULONG ifOperStatusFlags; NET_IF_MEDIA_CONNECT_STATE MediaConnectState; NET_IF_MEDIA_DUPLEX_STATE MediaDuplexState; ULONG ifMtu; BOOLEAN ifPromiscuousMode; BOOLEAN ifDeviceWakeUpEnable; ULONG64 XmitLinkSpeed; ULONG64 RcvLinkSpeed; ULONG64 ifLastChange; ULONG64 ifCounterDiscontinuityTime; ULONG64 ifInUnknownProtos; ULONG64 ifInDiscards; ULONG64 ifInErrors; ULONG64 ifHCInOctets; ULONG64 ifHCInUcastPkts; ULONG64 ifHCInMulticastPkts; ULONG64 ifHCInBroadcastPkts; ULONG64 ifHCOutOctets; ULONG64 ifHCOutUcastPkts; ULONG64 ifHCOutMulticastPkts; ULONG64 ifHCOutBroadcastPkts; ULONG64 ifOutErrors; ULONG64 ifOutDiscards; ULONG64 ifHCInUcastOctets; ULONG64 ifHCInMulticastOctets; ULONG64 ifHCInBroadcastOctets; ULONG64 ifHCOutUcastOctets; ULONG64 ifHCOutMulticastOctets; ULONG64 ifHCOutBroadcastOctets; NET_IF_COMPARTMENT_ID CompartmentId; ULONG SupportedStatistics; } NDIS_INTERFACE_INFORMATION, *PNDIS_INTERFACE_INFORMATION; #endif /* WINE_IFDEF_H*/ ================================================ FILE: wine/windows/ifmib.h ================================================ /* * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_IFMIB_H #define __WINE_IFMIB_H #include typedef struct _MIB_IFNUMBER { DWORD dwValue; } MIB_IFNUMBER, *PMIB_IFNUMBER; /* Interface table */ #define MAX_INTERFACE_NAME_LEN 256 #define MAXLEN_PHYSADDR 8 #define MAXLEN_IFDESCR 256 typedef struct _MIB_IFROW { WCHAR wszName[MAX_INTERFACE_NAME_LEN]; DWORD dwIndex; DWORD dwType; DWORD dwMtu; DWORD dwSpeed; DWORD dwPhysAddrLen; UCHAR bPhysAddr[MAXLEN_PHYSADDR]; DWORD dwAdminStatus; INTERNAL_IF_OPER_STATUS dwOperStatus; DWORD dwLastChange; DWORD dwInOctets; DWORD dwInUcastPkts; DWORD dwInNUcastPkts; DWORD dwInDiscards; DWORD dwInErrors; DWORD dwInUnknownProtos; DWORD dwOutOctets; DWORD dwOutUcastPkts; DWORD dwOutNUcastPkts; DWORD dwOutDiscards; DWORD dwOutErrors; DWORD dwOutQLen; DWORD dwDescrLen; BYTE bDescr[MAXLEN_IFDESCR]; } MIB_IFROW, *PMIB_IFROW; typedef struct _MIB_IFTABLE { DWORD dwNumEntries; MIB_IFROW table[1]; } MIB_IFTABLE, *PMIB_IFTABLE; #endif /* __WINE_IFMIB_H */ ================================================ FILE: wine/windows/iimgctx.idl ================================================ /* * Copyright 2015 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; cpp_quote("#define IMGCHG_SIZE 0x0001") cpp_quote("#define IMGCHG_VIEW 0x0002") cpp_quote("#define IMGCHG_COMPLETE 0x0004") cpp_quote("#define IMGCHG_ANIMATE 0x0008") cpp_quote("#define IMGCHG_MASK 0x000f") cpp_quote("#define IMGLOAD_NOTLOADED 0x00100000") cpp_quote("#define IMGLOAD_LOADING 0x00200000") cpp_quote("#define IMGLOAD_STOPPED 0x00400000") cpp_quote("#define IMGLOAD_ERROR 0x00800000") cpp_quote("#define IMGLOAD_COMPLETE 0x01000000") cpp_quote("#define IMGLOAD_MASK 0x01f00000") cpp_quote("#define IMGBITS_NONE 0x02000000") cpp_quote("#define IMGBITS_PARTIAL 0x04000000") cpp_quote("#define IMGBITS_TOTAL 0x08000000") cpp_quote("#define IMGBITS_MASK 0x0e000000") cpp_quote("#define IMGANIM_ANIMATED 0x10000000") cpp_quote("#define IMGANIM_MASK 0x10000000") cpp_quote("#define IMGTRANS_OPAQUE 0x20000000") cpp_quote("#define IMGTRANS_MASK 0x20000000") cpp_quote("#define DWN_COLORMODE 0x0000003f") cpp_quote("#define DWN_DOWNLOADONLY 0x00000040") cpp_quote("#define DWN_FORCEDITHER 0x00000080") cpp_quote("#define DWN_RAWIMAGE 0x00000100") cpp_quote("#define DWN_MIRRORIMAGE 0x00000200") typedef void (__stdcall *PFNIMGCTXCALLBACK)(void *, void *); [ local, object, uuid(3050f3d7-98b5-11cf-bb82-00aa00bdce0b) ] interface IImgCtx : IUnknown { HRESULT Load(LPCWSTR url, DWORD flags); HRESULT SelectChanges(ULONG changeon, ULONG changeoff, BOOL signal); HRESULT SetCallback(PFNIMGCTXCALLBACK fn, void *priv); HRESULT Disconnect(); HRESULT GetUpdateRects(RECT *rect, RECT *img, LONG *pcrc); HRESULT GetStateInfo(ULONG *state, SIZE *size, BOOL clear_changes); HRESULT GetPalette(HPALETTE *hpal); HRESULT Draw(HDC hdc, RECT *bounds); HRESULT Tile(HDC hdc, POINT *backorg, RECT *clip, SIZE *size); HRESULT StretchBlt(HDC hdc, int dstX, int dstY, int dstXE, int dstYE, int srcX, int srcY, int srcXE, int srcYE, DWORD rop); } ================================================ FILE: wine/windows/imagehlp.h ================================================ /* * Declarations for IMAGEHLP * * Copyright (C) 1998 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_IMAGEHLP_H #define __WINE_IMAGEHLP_H #include /* A set of documentation macros (see also dbghelp.h) */ #ifndef __deref_out # define __deref_out #endif #ifndef __deref_out_opt # define __deref_out_opt #endif #ifndef __deref_opt_out # define __deref_opt_out #endif #ifndef __in # define __in #endif #ifndef __in_opt # define __in_opt #endif #ifndef __in_bcount # define __in_bcount(x) #endif #ifndef __in_bcount_opt # define __in_bcount_opt(x) #endif #ifndef __in_ecount # define __in_ecount(x) #endif #ifndef __inout # define __inout #endif #ifndef __inout_opt # define __inout_opt #endif #ifndef __inout_bcount # define __inout_bcount(x) #endif #ifndef __inout_ecount # define __inout_ecount(x) #endif #ifndef __out # define __out #endif #ifndef __out_opt # define __out_opt #endif #ifndef __out_bcount # define __out_bcount(x) #endif #ifndef __out_bcount_opt # define __out_bcount_opt(x) #endif #ifndef __out_ecount # define __out_ecount(x) #endif #ifndef __out_ecount_opt # define __out_ecount_opt(x) #endif #ifndef __out_xcount # define __out_xcount(x) #endif #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #define IMAGEAPI WINAPI #define DBHLPAPI IMAGEAPI #define API_VERSION_NUMBER 7 /* 7 is the default */ /*********************************************************************** * Types */ typedef PVOID DIGEST_HANDLE; /*********************************************************************** * Enums/Defines */ typedef enum _IMAGEHLP_STATUS_REASON { BindOutOfMemory, BindRvaToVaFailed, BindNoRoomInImage, BindImportModuleFailed, BindImportProcedureFailed, BindImportModule, BindImportProcedure, BindForwarder, BindForwarderNOT, BindImageModified, BindExpandFileHeaders, BindImageComplete, BindMismatchedSymbols, BindSymbolsNotUpdated } IMAGEHLP_STATUS_REASON; #define BIND_NO_BOUND_IMPORTS 0x00000001 #define BIND_NO_UPDATE 0x00000002 #define BIND_ALL_IMAGES 0x00000004 #define BIND_CACHE_IMPORT_DLLS 0x00000008 #define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 0x01 #define CERT_PE_IMAGE_DIGEST_RESOURCES 0x02 #define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x04 #define CERT_PE_IMAGE_DIGEST_NON_PE_INFO 0x08 #define CERT_SECTION_TYPE_ANY 0xFF #define SPLITSYM_REMOVE_PRIVATE 0x00000001 #define SPLITSYM_EXTRACT_ALL 0x00000002 #define SPLITSYM_SYMBOLPATH_IS_SRC 0x00000004 #define FRAME_FPO 0 #define FRAME_TRAP 1 #define FRAME_TSS 2 #define FRAME_NONFPO 3 #define CHECKSUM_SUCCESS 0 #define CHECKSUM_OPEN_FAILURE 1 #define CHECKSUM_MAP_FAILURE 2 #define CHECKSUM_MAPVIEW_FAILURE 3 #define CHECKSUM_UNICODE_FAILURE 4 typedef enum _ADDRESS_MODE { AddrMode1616, AddrMode1632, AddrModeReal, AddrModeFlat } ADDRESS_MODE; #define SYMOPT_CASE_INSENSITIVE 0x00000001 #define SYMOPT_UNDNAME 0x00000002 #define SYMOPT_DEFERRED_LOADS 0x00000004 #define SYMOPT_NO_CPP 0x00000008 #define SYMOPT_LOAD_LINES 0x00000010 #define SYMOPT_OMAP_FIND_NEAREST 0x00000020 #define SYMF_OMAP_GENERATED 0x00000001 #define SYMF_OMAP_MODIFIED 0x00000002 /* 0x00000004 has been obsoleted */ #define SYMF_REGISTER 0x00000008 #define SYMF_REGREL 0x00000010 #define SYMF_FRAMEREL 0x00000020 #define SYMF_PARAMETER 0x00000040 #define SYMF_LOCAL 0x00000080 #define SYMF_CONSTANT 0x00000100 #define SYMF_EXPORT 0x00000200 #define SYMF_FORWARDER 0x00000400 #define SYMF_FUNCTION 0x00000800 typedef enum { SymNone, SymCoff, SymCv, SymPdb, SymExport, SymDeferred, SymSym, SymDia, SymVirtual, NumSymTypes } SYM_TYPE; #define UNDNAME_COMPLETE 0x0000 #define UNDNAME_NO_LEADING_UNDERSCORES 0x0001 #define UNDNAME_NO_MS_KEYWORDS 0x0002 #define UNDNAME_NO_FUNCTION_RETURNS 0x0004 #define UNDNAME_NO_ALLOCATION_MODEL 0x0008 #define UNDNAME_NO_ALLOCATION_LANGUAGE 0x0010 #define UNDNAME_NO_MS_THISTYPE 0x0020 #define UNDNAME_NO_CV_THISTYPE 0x0040 #define UNDNAME_NO_THISTYPE 0x0060 #define UNDNAME_NO_ACCESS_SPECIFIERS 0x0080 #define UNDNAME_NO_THROW_SIGNATURES 0x0100 #define UNDNAME_NO_MEMBER_TYPE 0x0200 #define UNDNAME_NO_RETURN_UDT_MODEL 0x0400 #define UNDNAME_32_BIT_DECODE 0x0800 #define UNDNAME_NAME_ONLY 0x1000 #define UNDNAME_NO_ARGUMENTS 0x2000 #define UNDNAME_NO_SPECIAL_SYMS 0x4000 #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003 #define CBA_SYMBOLS_UNLOADED 0x00000004 #define CBA_DUPLICATE_SYMBOL 0x00000005 /*********************************************************************** * Structures */ typedef struct _LOADED_IMAGE { PSTR ModuleName; HANDLE hFile; PUCHAR MappedAddress; PIMAGE_NT_HEADERS FileHeader; PIMAGE_SECTION_HEADER LastRvaSection; ULONG NumberOfSections; PIMAGE_SECTION_HEADER Sections; ULONG Characteristics; BOOLEAN fSystemImage; BOOLEAN fDOSImage; BOOLEAN fReadOnly; UCHAR Version; LIST_ENTRY Links; ULONG SizeOfImage; } LOADED_IMAGE, *PLOADED_IMAGE; typedef struct _API_VERSION { USHORT MajorVersion; USHORT MinorVersion; USHORT Revision; USHORT Reserved; } API_VERSION, *LPAPI_VERSION; typedef struct _IMAGE_DEBUG_INFORMATION { LIST_ENTRY List; DWORD Size; PVOID MappedBase; USHORT Machine; USHORT Characteristics; DWORD CheckSum; DWORD ImageBase; DWORD SizeOfImage; DWORD NumberOfSections; PIMAGE_SECTION_HEADER Sections; DWORD ExportedNamesSize; PSTR ExportedNames; DWORD NumberOfFunctionTableEntries; PIMAGE_FUNCTION_ENTRY FunctionTableEntries; DWORD LowestFunctionStartingAddress; DWORD HighestFunctionEndingAddress; DWORD NumberOfFpoTableEntries; PFPO_DATA FpoTableEntries; DWORD SizeOfCoffSymbols; PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; DWORD SizeOfCodeViewSymbols; PVOID CodeViewSymbols; PSTR ImageFilePath; PSTR ImageFileName; PSTR DebugFilePath; DWORD TimeDateStamp; BOOL RomImage; PIMAGE_DEBUG_DIRECTORY DebugDirectory; DWORD NumberOfDebugDirectories; DWORD Reserved[3]; } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION; typedef struct _ADDRESS { DWORD Offset; WORD Segment; ADDRESS_MODE Mode; } ADDRESS, *LPADDRESS; typedef struct _ADDRESS64 { DWORD64 Offset; WORD Segment; ADDRESS_MODE Mode; } ADDRESS64, *LPADDRESS64; typedef struct _KDHELP { DWORD Thread; DWORD ThCallbackStack; DWORD NextCallback; DWORD FramePointer; DWORD KiCallUserMode; DWORD KeUserCallbackDispatcher; DWORD SystemRangeStart; } KDHELP, *PKDHELP; typedef struct _KDHELP64 { DWORD64 Thread; DWORD ThCallbackStack; DWORD ThCallbackBStore; DWORD NextCallback; DWORD FramePointer; DWORD64 KiCallUserMode; DWORD64 KeUserCallbackDispatcher; DWORD64 SystemRangeStart; DWORD64 Reserved[8]; } KDHELP64, *PKDHELP64; typedef struct _STACKFRAME { ADDRESS AddrPC; ADDRESS AddrReturn; ADDRESS AddrFrame; ADDRESS AddrStack; PVOID FuncTableEntry; DWORD Params[4]; BOOL Far; BOOL Virtual; DWORD Reserved[3]; KDHELP KdHelp; } STACKFRAME, *LPSTACKFRAME; typedef struct _STACKFRAME64 { ADDRESS64 AddrPC; ADDRESS64 AddrReturn; ADDRESS64 AddrFrame; ADDRESS64 AddrStack; ADDRESS64 AddrBStore; PVOID FuncTableEntry; DWORD64 Params[4]; BOOL Far; BOOL Virtual; DWORD64 Reserved[3]; KDHELP64 KdHelp; } STACKFRAME64, *LPSTACKFRAME64; typedef struct _SOURCEFILE { DWORD64 ModBase; PCHAR FileName; } SOURCEFILE, *PSOURCEFILE; typedef struct _SOURCEFILEW { DWORD64 ModBase; PWSTR FileName; } SOURCEFILEW, *PSOURCEFILEW; typedef struct _IMAGEHLP_STACK_FRAME { DWORD InstructionOffset; DWORD ReturnOffset; DWORD FrameOffset; DWORD StackOffset; DWORD BackingStoreOffset; DWORD FuncTableEntry; DWORD Params[4]; DWORD Reserved[5]; DWORD Virtual; DWORD Reserved2; } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; typedef struct _IMAGEHLP_SYMBOL { DWORD SizeOfStruct; DWORD Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; CHAR Name[ANYSIZE_ARRAY]; } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL; typedef struct _IMAGEHLP_SYMBOLW { DWORD SizeOfStruct; DWORD Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; WCHAR Name[ANYSIZE_ARRAY]; } IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW; typedef struct _IMAGEHLP_SYMBOL64 { DWORD SizeOfStruct; DWORD64 Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; CHAR Name[1]; } IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; typedef struct _IMAGEHLP_SYMBOLW64 { DWORD SizeOfStruct; DWORD64 Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; WCHAR Name[1]; } IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64; typedef struct _IMAGEHLP_MODULE { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; CHAR ModuleName[32]; CHAR ImageName[256]; CHAR LoadedImageName[256]; } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE; typedef struct _IMAGEHLP_MODULEW { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; WCHAR ModuleName[32]; WCHAR ImageName[256]; WCHAR LoadedImageName[256]; } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW; typedef struct _IMAGEHLP_MODULE64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; CHAR ModuleName[32]; CHAR ImageName[256]; CHAR LoadedImageName[256]; CHAR LoadedPdbName[256]; DWORD CVSig; CHAR CVData[MAX_PATH*3]; DWORD PdbSig; GUID PdbSig70; DWORD PdbAge; BOOL PdbUnmatched; BOOL DbgUnmatched; BOOL LineNumbers; BOOL GlobalSymbols; BOOL TypeInfo; BOOL SourceIndexed; BOOL Publics; } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; typedef struct _IMAGEHLP_MODULEW64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; WCHAR ModuleName[32]; WCHAR ImageName[256]; WCHAR LoadedImageName[256]; WCHAR LoadedPdbName[256]; DWORD CVSig; WCHAR CVData[MAX_PATH*3]; DWORD PdbSig; GUID PdbSig70; DWORD PdbAge; BOOL PdbUnmatched; BOOL DbgUnmatched; BOOL LineNumbers; BOOL GlobalSymbols; BOOL TypeInfo; BOOL SourceIndexed; BOOL Publics; } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64; typedef struct _IMAGEHLP_LINE { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PCHAR FileName; DWORD Address; } IMAGEHLP_LINE, *PIMAGEHLP_LINE; typedef struct _IMAGEHLP_LINEW { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PWSTR FileName; DWORD Address; } IMAGEHLP_LINEW, *PIMAGEHLP_LINEW; typedef struct _IMAGEHLP_LINE64 { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PCHAR FileName; DWORD64 Address; } IMAGEHLP_LINE64, *PIMAGEHLP_LINE64; typedef struct _IMAGEHLP_LINEW64 { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PWSTR FileName; DWORD64 Address; } IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64; typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD CheckSum; DWORD TimeDateStamp; CHAR FileName[MAX_PATH]; BOOLEAN Reparse; } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD; typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { DWORD SizeOfStruct; DWORD NumberOfDups; PIMAGEHLP_SYMBOL Symbol; ULONG SelectedSymbol; } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL; typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { TI_GET_SYMTAG, TI_GET_SYMNAME, TI_GET_LENGTH, TI_GET_TYPE, TI_GET_TYPEID, TI_GET_BASETYPE, TI_GET_ARRAYINDEXTYPEID, TI_FINDCHILDREN, TI_GET_DATAKIND, TI_GET_ADDRESSOFFSET, TI_GET_OFFSET, TI_GET_VALUE, TI_GET_COUNT, TI_GET_CHILDRENCOUNT, TI_GET_BITPOSITION, TI_GET_VIRTUALBASECLASS, TI_GET_VIRTUALTABLESHAPEID, TI_GET_VIRTUALBASEPOINTEROFFSET, TI_GET_CLASSPARENTID, TI_GET_NESTED, TI_GET_SYMINDEX, TI_GET_LEXICALPARENT, TI_GET_ADDRESS, TI_GET_THISADJUST, TI_GET_UDTKIND, TI_IS_EQUIV_TO, TI_GET_CALLING_CONVENTION, } IMAGEHLP_SYMBOL_TYPE_INFO; #define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001 #define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002 typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS { ULONG SizeOfStruct; ULONG Flags; ULONG NumIds; PULONG TypeIds; ULONG64 TagFilter; ULONG NumReqs; IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds; PULONG_PTR ReqOffsets; PULONG ReqSizes; ULONG_PTR ReqStride; ULONG_PTR BufferSize; PVOID Buffer; ULONG EntriesMatched; ULONG EntriesFilled; ULONG64 TagsFound; ULONG64 AllReqsValid; ULONG NumReqsValid; PULONG64 ReqsValid; } IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS; #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1 #define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION #define MAX_SYM_NAME 2000 typedef struct _SYMBOL_INFO { ULONG SizeOfStruct; ULONG TypeIndex; ULONG64 Reserved[2]; ULONG info; ULONG Size; ULONG64 ModBase; ULONG Flags; ULONG64 Value; ULONG64 Address; ULONG Register; ULONG Scope; ULONG Tag; ULONG NameLen; ULONG MaxNameLen; CHAR Name[1]; } SYMBOL_INFO, *PSYMBOL_INFO; typedef struct _SYMBOL_INFOW { ULONG SizeOfStruct; ULONG TypeIndex; ULONG64 Reserved[2]; ULONG Index; ULONG Size; ULONG64 ModBase; ULONG Flags; ULONG64 Value; ULONG64 Address; ULONG Register; ULONG Scope; ULONG Tag; ULONG NameLen; ULONG MaxNameLen; WCHAR Name[1]; } SYMBOL_INFOW, *PSYMBOL_INFOW; typedef struct _SYMBOL_INFO_PACKAGE { SYMBOL_INFO si; CHAR name[MAX_SYM_NAME+1]; } SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE; typedef struct _SYMBOL_INFO_PACKAGEW { SYMBOL_INFOW si; WCHAR name[MAX_SYM_NAME+1]; } SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW; #define DBHHEADER_DEBUGDIRS 0x1 typedef struct _MODLOAD_DATA { DWORD ssize; DWORD ssig; PVOID data; DWORD size; DWORD flags; } MODLOAD_DATA, *PMODLOAD_DATA; typedef struct _SRCCODEINFO { DWORD SizeOfStruct; PVOID Key; DWORD64 ModBase; CHAR Obj[MAX_PATH+1]; CHAR FileName[MAX_PATH+1]; DWORD LineNumber; DWORD64 Address; } SRCCODEINFO, *PSRCCODEINFO; typedef struct _SRCCODEINFOW { DWORD SizeOfStruct; PVOID Key; DWORD64 ModBase; WCHAR Obj[MAX_PATH+1]; WCHAR FileName[MAX_PATH+1]; DWORD LineNumber; DWORD64 Address; } SRCCODEINFOW, *PSRCCODEINFOW; /*********************************************************************** * Callbacks */ typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)( PCSTR, PVOID ); typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)( PCWSTR, PVOID ); typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)( PCSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize, PVOID UserContext ); typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)( PCSTR, DWORD64, ULONG, PVOID ); typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)( PCWSTR, DWORD64, ULONG, PVOID ); typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)( HANDLE, PCSTR, PVOID ); typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)( HANDLE, PCWSTR, PVOID ); typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)( HANDLE, PCSTR, PVOID ); typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)( HANDLE, PCWSTR, PVOID ); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)( PCSTR, PVOID ); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)( PCWSTR, PVOID ); typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE)( IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName, ULONG_PTR Va, ULONG_PTR Parameter ); typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE32)( IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName, ULONG Va, ULONG_PTR Parameter ); typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE64)( IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName, ULONG64 Va, ULONG_PTR Parameter ); typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)( PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext ); typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)( PSYMBOL_INFOW pSymInfo, ULONG SymbolSize, PVOID UserContext ); typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)( PSRCCODEINFO, PVOID ); typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)( PSRCCODEINFOW, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)( PSOURCEFILE pSourceFile, PVOID UserContext ); typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)( PSOURCEFILEW pSourceFile, PVOID UserContext ); typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)( PCSTR ModuleName, ULONG BaseOfDll, PVOID UserContext ); typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)( PCSTR, DWORD64, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)( PCWSTR, DWORD64, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)( PCSTR, ULONG, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)( PCWSTR, ULONG, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)( PCSTR, DWORD64, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)( PCWSTR, DWORD64, ULONG, PVOID ); typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)( HANDLE, DWORD, PVOID ); typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)( HANDLE, ULONG64, ULONG64 ); typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)( HANDLE hProcess, ULONG ActionCode, PVOID CallbackData, PVOID UserContext ); typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)( HANDLE, ULONG, ULONG64, ULONG64 ); typedef BOOL (CALLBACK *DIGEST_FUNCTION)( DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength ); typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)( HANDLE hProcess, DWORD lpBaseAddress, PVOID lpBuffer, DWORD nSize, PDWORD lpNumberOfBytesRead ); typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)( HANDLE hProcess, DWORD64 lpBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead ); typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)( HANDLE hProcess, DWORD AddrBase ); typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)( HANDLE hProcess, DWORD64 AddrBase ); typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)( HANDLE hProcess, DWORD ReturnAddress); typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE64)( HANDLE hProcess, DWORD64 ReturnAddress); typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)( HANDLE hProcess, HANDLE hThread, LPADDRESS lpaddr ); typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)( HANDLE hProcess, HANDLE hThread, LPADDRESS64 lpaddr ); /*********************************************************************** * Functions */ BOOL WINAPI BindImage( PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath ); BOOL WINAPI BindImageEx( DWORD Flags, PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath, PIMAGEHLP_STATUS_ROUTINE StatusRoutine ); PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile( LPVOID BaseAddress, DWORD FileLength, LPDWORD HeaderSum, LPDWORD CheckSum ); BOOL WINAPI EnumDirTree( HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID ); BOOL WINAPI EnumDirTreeW( HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID ); BOOL WINAPI EnumerateLoadedModules( HANDLE hProcess, PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback, PVOID UserContext ); BOOL WINAPI EnumerateLoadedModules64( HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID ); BOOL WINAPI EnumerateLoadedModulesW64( HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID ); HANDLE WINAPI FindDebugInfoFile( PCSTR FileName, PCSTR SymbolPath, PSTR DebugFilePath ); HANDLE WINAPI FindDebugInfoFileEx( PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID ); HANDLE WINAPI FindDebugInfoFileExW( PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID ); HANDLE WINAPI FindExecutableImage( PCSTR, PCSTR, PSTR ); HANDLE WINAPI FindExecutableImageEx( PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID ); HANDLE WINAPI FindExecutableImageExW( PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID ); BOOL WINAPI FindFileInPath( HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, PSTR, PFINDFILEINPATHCALLBACK, PVOID ); BOOL WINAPI GetImageConfigInformation( PLOADED_IMAGE LoadedImage, PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation ); DWORD WINAPI GetImageUnusedHeaderBytes( PLOADED_IMAGE LoadedImage, LPDWORD SizeUnusedHeaderBytes ); DWORD WINAPI GetTimestampForLoadedLibrary( HMODULE Module ); BOOL WINAPI ImageAddCertificate( HANDLE FileHandle, LPWIN_CERTIFICATE Certificate, PDWORD Index ); PVOID WINAPI ImageDirectoryEntryToData( PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size ); BOOL WINAPI ImageEnumerateCertificates( HANDLE FileHandle, WORD TypeFilter, PDWORD CertificateCount, PDWORD Indices, DWORD IndexCount ); BOOL WINAPI ImageGetCertificateData( HANDLE FileHandle, DWORD CertificateIndex, LPWIN_CERTIFICATE Certificate, PDWORD RequiredLength ); BOOL WINAPI ImageGetCertificateHeader( HANDLE FileHandle, DWORD CertificateIndex, LPWIN_CERTIFICATE Certificateheader ); BOOL WINAPI ImageGetDigestStream( HANDLE FileHandle, DWORD DigestLevel, DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle ); PLOADED_IMAGE WINAPI ImageLoad( PCSTR DllName, PCSTR DllPath ); PIMAGE_NT_HEADERS WINAPI ImageNtHeader( PVOID Base ); BOOL WINAPI ImageRemoveCertificate( HANDLE FileHandle, DWORD Index ); PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection( PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva ); PVOID WINAPI ImageRvaToVa( PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva, PIMAGE_SECTION_HEADER *LastRvaSection ); BOOL WINAPI ImageUnload( PLOADED_IMAGE LoadedImage ); LPAPI_VERSION WINAPI ImagehlpApiVersion( void ); LPAPI_VERSION WINAPI ImagehlpApiVersionEx( LPAPI_VERSION AppVersion ); BOOL WINAPI MakeSureDirectoryPathExists( PCSTR DirPath ); BOOL WINAPI MapAndLoad( PCSTR ImageName, PCSTR DllPath, PLOADED_IMAGE LoadedImage, BOOL DotDll, BOOL ReadOnly ); PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation( HANDLE FileHandle, PCSTR FileName, PCSTR SymbolPath, ULONG ImageBase ); DWORD WINAPI MapFileAndCheckSumA( PCSTR Filename, PDWORD HeaderSum, PDWORD CheckSum ); DWORD WINAPI MapFileAndCheckSumW( PCWSTR Filename, PDWORD HeaderSum, PDWORD CheckSum ); BOOL WINAPI ReBaseImage( PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase, BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize, ULONG *OldImageSize, ULONG_PTR *OldImageBase, ULONG *NewImageSize, ULONG_PTR *NewImageBase, ULONG TimeStamp ); BOOL WINAPI ReBaseImage64( PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase, BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize, ULONG *OldImageSize, ULONG64 *OldImageBase, ULONG *NewImageSize, ULONG64 *NewImageBase, ULONG TimeStamp ); BOOL WINAPI RemovePrivateCvSymbolic( PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize ); BOOL WINAPI SearchTreeForFile( PCSTR RootPath, PCSTR InputPathName, PSTR OutputPathBuffer ); BOOL WINAPI SearchTreeForFileW( PCWSTR RootPath, PCWSTR InputPathName, PWSTR OutputPathBuffer ); BOOL WINAPI SetImageConfigInformation( PLOADED_IMAGE LoadedImage, PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation ); BOOL WINAPI SplitSymbols( PSTR ImageName, PCSTR SymbolsPath, PSTR SymbolFilePath, ULONG Flags ); BOOL WINAPI StackWalk( DWORD MachineType, HANDLE hProcess, HANDLE hThread, LPSTACKFRAME StackFrame, PVOID ContextRecord, PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, PTRANSLATE_ADDRESS_ROUTINE TranslateAddress ); BOOL WINAPI StackWalk64( DWORD MachineType, HANDLE hProcess, HANDLE hThread, LPSTACKFRAME64 StackFrame, PVOID ContextRecord, PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress ); BOOL WINAPI SymAddSymbol( HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD ); BOOL WINAPI SymAddSymbolW( HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD ); BOOL WINAPI SymCleanup( HANDLE hProcess ); BOOL WINAPI SymDeleteSymbol( HANDLE, ULONG64, PCSTR, DWORD64, DWORD ); BOOL WINAPI SymDeleteSymbolW( HANDLE, ULONG64, PCWSTR, DWORD64, DWORD ); BOOL WINAPI SymEnumerateModules( HANDLE hProcess, PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, PVOID UserContext ); BOOL WINAPI SymEnumerateModules64( HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID ); BOOL WINAPI SymEnumerateModulesW64( HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID ); BOOL WINAPI SymEnumerateSymbols( HANDLE hProcess, DWORD BaseOfDll, PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext ); BOOL WINAPI SymEnumerateSymbolsW( HANDLE hProcess, DWORD BaseOfDll, PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext ); BOOL WINAPI SymEnumerateSymbols64( HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID ); BOOL WINAPI SymEnumerateSymbolsW64( HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID ); BOOL WINAPI SymEnumLines( HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID ); BOOL WINAPI SymEnumLinesW( HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID ); BOOL WINAPI SymEnumSourceFiles( HANDLE hProcess, ULONG64 ModBase, PCSTR Mask, PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles, PVOID UserContext ); BOOL WINAPI SymEnumSourceFilesW( HANDLE hProcess, ULONG64 ModBase, PCWSTR Mask, PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles, PVOID UserContext ); BOOL WINAPI SymEnumSourceLines( HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID ); BOOL WINAPI SymEnumSourceLinesW( HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID ); BOOL WINAPI SymEnumSymbols( HANDLE hProcess, DWORD BaseOfDll, PCSTR Mask, PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext ); BOOL WINAPI SymEnumSymbolsW( HANDLE hProcess, DWORD BaseOfDll, PCWSTR Mask, PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext ); BOOL WINAPI SymEnumSymbolsForAddr( HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID ); BOOL WINAPI SymEnumSymbolsForAddrW( HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID ); BOOL WINAPI SymEnumTypes( HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID ); BOOL WINAPI SymEnumTypesW( HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID ); HANDLE WINAPI SymFindExecutableImage( HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID ); HANDLE WINAPI SymFindExecutableImageW( HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID ); BOOL WINAPI SymFindFileInPath( HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, PSTR, PFINDFILEINPATHCALLBACK, PVOID ); BOOL WINAPI SymFindFileInPathW( HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD, PWSTR, PFINDFILEINPATHCALLBACKW, PVOID ); BOOL WINAPI SymFromAddr( HANDLE, DWORD64, DWORD64*, SYMBOL_INFO* ); BOOL WINAPI SymFromAddrW( HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW* ); BOOL WINAPI SymFromIndex( HANDLE, ULONG64, DWORD, PSYMBOL_INFO ); BOOL WINAPI SymFromIndexW( HANDLE, ULONG64, DWORD, PSYMBOL_INFOW ); BOOL WINAPI SymFromName( HANDLE, PCSTR, PSYMBOL_INFO ); BOOL WINAPI SymFromNameW( HANDLE, PCWSTR, PSYMBOL_INFOW ); BOOL WINAPI SymFromToken( HANDLE, DWORD64, DWORD, PSYMBOL_INFO ); BOOL WINAPI SymFromTokenW( HANDLE, DWORD64, DWORD, PSYMBOL_INFOW ); PVOID WINAPI SymFunctionTableAccess( HANDLE hProcess, DWORD AddrBase ); PVOID WINAPI SymFunctionTableAccess64( HANDLE hProcess, DWORD64 AddrBase ); ULONG WINAPI SymGetFileLineOffsets64( HANDLE, PCSTR, PCSTR, PDWORD64, ULONG ); PCHAR WINAPI SymGetHomeDirectory( DWORD, PSTR, size_t ); PWSTR WINAPI SymGetHomeDirectoryW( DWORD, PWSTR, size_t ); BOOL WINAPI SymGetLineFromAddr( HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE ); BOOL WINAPI SymGetLineFromAddrW( HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW ); BOOL WINAPI SymGetLineFromAddr64( HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64 ); BOOL WINAPI SymGetLineFromAddrW64( HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64 ); BOOL WINAPI SymGetLineFromName( HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE ); BOOL WINAPI SymGetLineFromName64( HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64 ); BOOL WINAPI SymGetLineFromNameW64( HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64 ); BOOL WINAPI SymGetLineNext( HANDLE, PIMAGEHLP_LINE ); BOOL WINAPI SymGetLineNextW( HANDLE, PIMAGEHLP_LINEW ); BOOL WINAPI SymGetLineNext64( HANDLE, PIMAGEHLP_LINE64 ); BOOL WINAPI SymGetLineNextW64( HANDLE, PIMAGEHLP_LINEW64 ); BOOL WINAPI SymGetLinePrev( HANDLE, PIMAGEHLP_LINE ); BOOL WINAPI SymGetLinePrevW( HANDLE, PIMAGEHLP_LINEW ); BOOL WINAPI SymGetLinePrev64( HANDLE, PIMAGEHLP_LINE64 ); BOOL WINAPI SymGetLinePrevW64( HANDLE, PIMAGEHLP_LINEW64 ); DWORD WINAPI SymGetModuleBase( HANDLE hProcess, DWORD dwAddr ); BOOL WINAPI SymGetModuleInfo( HANDLE hProcess, DWORD dwAddr, PIMAGEHLP_MODULE ModuleInfo ); BOOL WINAPI SymGetModuleInfoW( HANDLE, DWORD, PIMAGEHLP_MODULEW ); BOOL WINAPI SymGetModuleInfo64( HANDLE, DWORD64, PIMAGEHLP_MODULE64 ); BOOL WINAPI SymGetModuleInfoW64( HANDLE, DWORD64, PIMAGEHLP_MODULEW64 ); DWORD WINAPI SymGetOptions( void ); BOOL WINAPI SymGetScope( HANDLE, ULONG64, DWORD, PSYMBOL_INFO ); BOOL WINAPI SymGetScopeW( HANDLE, ULONG64, DWORD, PSYMBOL_INFOW ); BOOL WINAPI SymGetSearchPath( HANDLE hProcess, PSTR szSearchPath, DWORD SearchPathLength ); BOOL WINAPI SymGetSearchPathW( HANDLE hProcess, PWSTR szSearchPath, DWORD SearchPathLength ); BOOL WINAPI SymGetSourceFile( HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD ); BOOL WINAPI SymGetSourceFileW( HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD ); BOOL WINAPI SymGetSourceFileFromToken( HANDLE, PVOID, PCSTR, PSTR, DWORD ); BOOL WINAPI SymGetSourceFileFromTokenW( HANDLE, PVOID, PCWSTR, PWSTR, DWORD ); BOOL WINAPI SymGetSourceFileToken( HANDLE, ULONG64, PCSTR, PVOID*, DWORD* ); BOOL WINAPI SymGetSourceFileTokenW( HANDLE, ULONG64, PCWSTR, PVOID*, DWORD* ); BOOL WINAPI SymGetSourceVarFromToken( HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD ); BOOL WINAPI SymGetSourceVarFromTokenW( HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD ); BOOL WINAPI SymGetSymFromAddr( HANDLE hProcess, DWORD dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL Symbol ); BOOL WINAPI SymGetSymFromAddr64( HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64 ); BOOL WINAPI SymGetSymFromName( HANDLE hProcess, PCSTR Name, PIMAGEHLP_SYMBOL Symbol ); BOOL WINAPI SymGetSymFromName64( HANDLE, PCSTR, PIMAGEHLP_SYMBOL64 ); BOOL WINAPI SymGetSymNext( HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol ); BOOL WINAPI SymGetSymNext64( HANDLE, PIMAGEHLP_SYMBOL64 ); BOOL WINAPI SymGetSymPrev( HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol ); BOOL WINAPI SymGetSymPrev64( HANDLE, PIMAGEHLP_SYMBOL64 ); BOOL WINAPI SymGetTypeFromName( HANDLE, ULONG64, PCSTR, PSYMBOL_INFO ); BOOL WINAPI SymGetTypeFromNameW( HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW ); BOOL WINAPI SymGetTypeInfo( HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID ); BOOL WINAPI SymGetTypeInfoEx( HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS ); BOOL WINAPI SymInitialize( HANDLE hProcess, PCSTR UserSearchPath, BOOL fInvadeProcess ); BOOL WINAPI SymInitializeW( HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeProcess ); DWORD WINAPI SymLoadModule( HANDLE hProcess, HANDLE hFile, PCSTR ImageName, PCSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll ); DWORD64 WINAPI SymLoadModule64( HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD ); DWORD64 WINAPI SymLoadModuleEx( HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD ); DWORD64 WINAPI SymLoadModuleExW( HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD ); BOOL WINAPI SymMatchFileName( PCSTR, PCSTR, PSTR*, PSTR* ); BOOL WINAPI SymMatchFileNameW( PCWSTR, PCWSTR, PWSTR*, PWSTR* ); BOOL WINAPI SymMatchString( PCSTR, PCSTR, BOOL ); BOOL WINAPI SymMatchStringA( PCSTR, PCSTR, BOOL ); BOOL WINAPI SymMatchStringW( PCWSTR, PCWSTR, BOOL ); BOOL WINAPI SymRegisterCallback( HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK CallbackFunction, PVOID UserContext ); BOOL WINAPI SymRegisterCallback64( HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64 ); BOOL WINAPI SymRegisterCallbackW64( HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64 ); BOOL WINAPI SymRegisterFunctionEntryCallback( HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID ); BOOL WINAPI SymRegisterFunctionEntryCallback64( HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64 ); BOOL WINAPI SymSearch( HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD ); BOOL WINAPI SymSearchW( HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD ); DWORD WINAPI SymSetContext( HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame, PIMAGEHLP_CONTEXT Context ); PCHAR WINAPI SymSetHomeDirectory( HANDLE, PCSTR ); PWSTR WINAPI SymSetHomeDirectoryW( HANDLE, PCWSTR ); DWORD WINAPI SymSetOptions( DWORD SymOptions ); BOOL WINAPI SymSetParentWindow( HWND ); BOOL WINAPI SymSetSearchPath( HANDLE hProcess, PCSTR szSearchPath ); BOOL WINAPI SymSetSearchPathW( HANDLE hProcess, PCWSTR szSearchPath ); BOOL WINAPI SymUnDName( PIMAGEHLP_SYMBOL sym, PSTR UnDecName, DWORD UnDecNameLength ); BOOL WINAPI SymUnDName64( PIMAGEHLP_SYMBOL64, PSTR, DWORD ); BOOL WINAPI SymUnloadModule( HANDLE hProcess, DWORD BaseOfDll ); BOOL WINAPI TouchFileTimes( HANDLE FileHandle, LPSYSTEMTIME lpSystemTime ); DWORD WINAPI UnDecorateSymbolName( PCSTR DecoratedName, PSTR UnDecoratedName, DWORD UndecoratedLength, DWORD Flags ); DWORD WINAPI UnDecorateSymbolNameW( PCWSTR DecoratedName, PWSTR UnDecoratedName, DWORD UndecoratedLength, DWORD Flags ); BOOL WINAPI UnMapAndLoad( PLOADED_IMAGE LoadedImage ); BOOL WINAPI UnmapDebugInformation( PIMAGE_DEBUG_INFORMATION DebugInfo ); BOOL WINAPI UpdateDebugInfoFile( PCSTR ImageFileName, PCSTR SymbolPath, PSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders ); BOOL WINAPI UpdateDebugInfoFileEx( PCSTR ImageFileName, PCSTR SymbolPath, PSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum ); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_IMAGEHLP_H */ ================================================ FILE: wine/windows/ime.h ================================================ /** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _IME_ #define _IME_ #ifdef __cplusplus extern "C" { #endif #ifndef _WINDEF_ typedef unsigned int UINT; #endif #define IME_MAXPROCESS 32 LRESULT WINAPI SendIMEMessageExA(HWND,LPARAM); LRESULT WINAPI SendIMEMessageExW(HWND,LPARAM); #define SendIMEMessageEx WINELIB_NAME_AW(SendIMEMessageEx) typedef struct tagIMESTRUCT { UINT fnc; WPARAM wParam; UINT wCount; UINT dchSource; UINT dchDest; LPARAM lParam1; LPARAM lParam2; LPARAM lParam3; } IMESTRUCT,*PIMESTRUCT,*NPIMESTRUCT,*LPIMESTRUCT; #define CP_HWND 0 #define CP_OPEN 1 #define CP_DIRECT 2 #define CP_LEVEL 3 #if !defined(VK_DBE_ALPHANUMERIC) #define VK_DBE_ALPHANUMERIC 0x0f0 #define VK_DBE_KATAKANA 0x0f1 #define VK_DBE_HIRAGANA 0x0f2 #define VK_DBE_SBCSCHAR 0x0f3 #define VK_DBE_DBCSCHAR 0x0f4 #define VK_DBE_ROMAN 0x0f5 #define VK_DBE_NOROMAN 0x0f6 #define VK_DBE_ENTERWORDREGISTERMODE 0x0f7 #define VK_DBE_ENTERIMECONFIGMODE 0x0f8 #define VK_DBE_FLUSHSTRING 0x0f9 #define VK_DBE_CODEINPUT 0x0fa #define VK_DBE_NOCODEINPUT 0x0fb #define VK_DBE_DETERMINESTRING 0x0fc #define VK_DBE_ENTERDLGCONVERSIONMODE 0x0fd #endif #define MCW_DEFAULT 0x00 #define MCW_RECT 0x01 #define MCW_WINDOW 0x02 #define MCW_SCREEN 0x04 #define MCW_VERTICAL 0x08 #define MCW_HIDDEN 0x10 #define IME_MODE_ALPHANUMERIC 0x0001 #ifdef KOREA #define IME_MODE_SBCSCHAR 0x0002 #else #define IME_MODE_SBCSCHAR 0x0008 #endif #define IME_MODE_KATAKANA 0x0002 #define IME_MODE_HIRAGANA 0x0004 #define IME_MODE_HANJACONVERT 0x0004 #define IME_MODE_DBCSCHAR 0x0010 #define IME_MODE_ROMAN 0x0020 #define IME_MODE_NOROMAN 0x0040 #define IME_MODE_CODEINPUT 0x0080 #define IME_MODE_NOCODEINPUT 0x0100 #define IME_GETIMECAPS 0x03 #define IME_SETOPEN 0x04 #define IME_GETOPEN 0x05 #define IME_GETVERSION 0x07 #define IME_SETCONVERSIONWINDOW 0x08 #define IME_MOVEIMEWINDOW IME_SETCONVERSIONWINDOW #define IME_SETCONVERSIONMODE 0x10 #define IME_GETCONVERSIONMODE 0x11 #define IME_SET_MODE 0x12 #define IME_SENDVKEY 0x13 #define IME_ENTERWORDREGISTERMODE 0x18 #define IME_SETCONVERSIONFONTEX 0x19 #define IME_BANJAtoJUNJA 0x13 #define IME_JUNJAtoBANJA 0x14 #define IME_JOHABtoKS 0x15 #define IME_KStoJOHAB 0x16 #define IMEA_INIT 0x01 #define IMEA_NEXT 0x02 #define IMEA_PREV 0x03 #define IME_REQUEST_CONVERT 0x01 #define IME_ENABLE_CONVERT 0x02 #define INTERIM_WINDOW 0x00 #define MODE_WINDOW 0x01 #define HANJA_WINDOW 0x02 #define IME_RS_ERROR 0x01 #define IME_RS_NOIME 0x02 #define IME_RS_TOOLONG 0x05 #define IME_RS_ILLEGAL 0x06 #define IME_RS_NOTFOUND 0x07 #define IME_RS_NOROOM 0x0a #define IME_RS_DISKERROR 0x0e #define IME_RS_INVALID 0x11 #define IME_RS_NEST 0x12 #define IME_RS_SYSTEMMODAL 0x13 #define WM_IME_REPORT 0x0280 #define IR_STRINGSTART 0x100 #define IR_STRINGEND 0x101 #define IR_OPENCONVERT 0x120 #define IR_CHANGECONVERT 0x121 #define IR_CLOSECONVERT 0x122 #define IR_FULLCONVERT 0x123 #define IR_IMESELECT 0x130 #define IR_STRING 0x140 #define IR_DBCSCHAR 0x160 #define IR_UNDETERMINE 0x170 #define IR_STRINGEX 0x180 #define IR_MODEINFO 0x190 #define WM_WNT_CONVERTREQUESTEX 0x0109 #define WM_CONVERTREQUEST 0x010A #define WM_CONVERTRESULT 0x010B #define WM_INTERIM 0x010C #define WM_IMEKEYDOWN 0x290 #define WM_IMEKEYUP 0x291 typedef struct tagUNDETERMINESTRUCT { DWORD dwSize; UINT uDefIMESize; UINT uDefIMEPos; UINT uUndetTextLen; UINT uUndetTextPos; UINT uUndetAttrPos; UINT uCursorPos; UINT uDeltaStart; UINT uDetermineTextLen; UINT uDetermineTextPos; UINT uDetermineDelimPos; UINT uYomiTextLen; UINT uYomiTextPos; UINT uYomiDelimPos; } UNDETERMINESTRUCT,*PUNDETERMINESTRUCT,*NPUNDETERMINESTRUCT,*LPUNDETERMINESTRUCT; typedef struct tagSTRINGEXSTRUCT { DWORD dwSize; UINT uDeterminePos; UINT uDetermineDelimPos; UINT uYomiPos; UINT uYomiDelimPos; } STRINGEXSTRUCT,*NPSTRINGEXSTRUCT,*LPSTRINGEXSTRUCT; #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/imm.h ================================================ /* * Declarations for IMM32 * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_IMM_H #define __WINE_IMM_H #ifdef __cplusplus extern "C" { #endif typedef HANDLE HIMC; typedef HANDLE HIMCC; typedef struct tagREGISTERWORDA { LPSTR lpReading; LPSTR lpWord; } REGISTERWORDA, *PREGISTERWORDA, *NPREGISTERWORDA, *LPREGISTERWORDA; typedef struct tagREGISTERWORDW { LPWSTR lpReading; LPWSTR lpWord; } REGISTERWORDW, *PREGISTERWORDW, *NPREGISTERWORDW, *LPREGISTERWORDW; typedef int (CALLBACK *REGISTERWORDENUMPROCA)(LPCSTR, DWORD, LPCSTR, LPVOID); typedef int (CALLBACK *REGISTERWORDENUMPROCW)(LPCWSTR, DWORD, LPCWSTR, LPVOID); typedef struct tagCANDIDATEFORM { DWORD dwIndex; DWORD dwStyle; POINT ptCurrentPos; RECT rcArea; } CANDIDATEFORM, *LPCANDIDATEFORM; typedef struct tagCANDIDATELIST { DWORD dwSize; DWORD dwStyle; DWORD dwCount; DWORD dwSelection; DWORD dwPageStart; DWORD dwPageSize; DWORD dwOffset[1]; } CANDIDATELIST, *LPCANDIDATELIST; typedef struct tagSTYLEBUFA { DWORD dwStyle; CHAR szDescription[32]; } STYLEBUFA, *LPSTYLEBUFA; typedef struct tagSTYLEBUFW { DWORD dwStyle; WCHAR szDescription[32]; } STYLEBUFW, *LPSTYLEBUFW; DECL_WINELIB_TYPE_AW(STYLEBUF) DECL_WINELIB_TYPE_AW(LPSTYLEBUF) typedef struct tagRECONVERTSTRING { DWORD dwSize; DWORD dwVersion; DWORD dwStrLen; DWORD dwStrOffset; DWORD dwCompStrLen; DWORD dwCompStrOffset; DWORD dwTargetStrLen; DWORD dwTargetStrOffset; } RECONVERTSTRING, *LPRECONVERTSTRING; #define IMEMENUITEM_STRING_SIZE 80 typedef struct tagIMEMENUITEMINFOA { UINT cbSize; UINT fType; UINT fState; UINT wID; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; DWORD dwItemData; CHAR szString[IMEMENUITEM_STRING_SIZE]; HBITMAP hbmpItem; } IMEMENUITEMINFOA, *LPIMEMENUITEMINFOA; typedef struct tagIMEMENUITEMINFOW { UINT cbSize; UINT fType; UINT fState; UINT wID; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; DWORD dwItemData; WCHAR szString[IMEMENUITEM_STRING_SIZE]; HBITMAP hbmpItem; } IMEMENUITEMINFOW, *LPIMEMENUITEMINFOW; DECL_WINELIB_TYPE_AW(IMEMENUITEMINFO) DECL_WINELIB_TYPE_AW(LPIMEMENUITEMINFO) typedef struct _tagCOMPOSITIONFORM { DWORD dwStyle; POINT ptCurrentPos; RECT rcArea; } COMPOSITIONFORM, *LPCOMPOSITIONFORM; typedef BOOL (CALLBACK* IMCENUMPROC)(HIMC, LPARAM); typedef struct _tagIMECHARPOSITION { DWORD dwSize; DWORD dwCharPos; POINT pt; UINT cLineHeight; RECT rcDocument; } IMECHARPOSITION, *LPIMECHARPOSITION; /* wParam for WM_IME_CONTROL */ #define IMC_GETCANDIDATEPOS 0x0007 #define IMC_SETCANDIDATEPOS 0x0008 #define IMC_GETCOMPOSITIONFONT 0x0009 #define IMC_SETCOMPOSITIONFONT 0x000A #define IMC_GETCOMPOSITIONWINDOW 0x000B #define IMC_SETCOMPOSITIONWINDOW 0x000C #define IMC_GETSTATUSWINDOWPOS 0x000F #define IMC_SETSTATUSWINDOWPOS 0x0010 #define IMC_CLOSESTATUSWINDOW 0x0021 #define IMC_OPENSTATUSWINDOW 0x0022 /* * wParam for WM_IME_CONTROL to the soft keyboard * dwAction for ImmNotifyIME */ #define NI_OPENCANDIDATE 0x0010 #define NI_CLOSECANDIDATE 0x0011 #define NI_SELECTCANDIDATESTR 0x0012 #define NI_CHANGECANDIDATELIST 0x0013 #define NI_FINALIZECONVERSIONRESULT 0x0014 #define NI_COMPOSITIONSTR 0x0015 #define NI_SETCANDIDATE_PAGESTART 0x0016 #define NI_SETCANDIDATE_PAGESIZE 0x0017 #define NI_IMEMENUSELECTED 0x0018 /* lParam for WM_IME_SETCONTEXT */ #define ISC_SHOWUICANDIDATEWINDOW 0x00000001 #define ISC_SHOWUICOMPOSITIONWINDOW 0x80000000 #define ISC_SHOWUIGUIDELINE 0x40000000 #define ISC_SHOWUIALLCANDIDATEWINDOW 0x0000000F #define ISC_SHOWUIALL 0xC000000F /* dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR */ #define CPS_COMPLETE 0x0001 #define CPS_CONVERT 0x0002 #define CPS_REVERT 0x0003 #define CPS_CANCEL 0x0004 /* the modifiers of hot key */ #define MOD_ALT 0x0001 #define MOD_CONTROL 0x0002 #define MOD_SHIFT 0x0004 #define MOD_LEFT 0x8000 #define MOD_RIGHT 0x4000 #define MOD_ON_KEYUP 0x0800 #define MOD_IGNORE_ALL_MODIFIER 0x0400 /* Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F */ #define IME_CHOTKEY_IME_NONIME_TOGGLE 0x10 #define IME_CHOTKEY_SHAPE_TOGGLE 0x11 #define IME_CHOTKEY_SYMBOL_TOGGLE 0x12 /* Windows for Japanese Edition hot key ID from 0x30 - 0x4F */ #define IME_JHOTKEY_CLOSE_OPEN 0x30 /* Windows for Korean Edition hot key ID from 0x50 - 0x6F */ #define IME_KHOTKEY_SHAPE_TOGGLE 0x50 #define IME_KHOTKEY_HANJACONVERT 0x51 #define IME_KHOTKEY_ENGLISH 0x52 /* Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F */ #define IME_THOTKEY_IME_NONIME_TOGGLE 0x70 #define IME_THOTKEY_SHAPE_TOGGLE 0x71 #define IME_THOTKEY_SYMBOL_TOGGLE 0x72 /* direct switch hot key ID from 0x100 - 0x11F */ #define IME_HOTKEY_DSWITCH_FIRST 0x100 #define IME_HOTKEY_DSWITCH_LAST 0x11F /* IME private hot key from 0x200 - 0x21F */ #define IME_HOTKEY_PRIVATE_FIRST 0x200 #define IME_ITHOTKEY_RESEND_RESULTSTR 0x200 #define IME_ITHOTKEY_PREVIOUS_COMPOSITION 0x201 #define IME_ITHOTKEY_UISTYLE_TOGGLE 0x202 #define IME_ITHOTKEY_RECONVERTSTRING 0x203 #define IME_HOTKEY_PRIVATE_LAST 0x21F /* * dwSystemInfoFlags bits * parameter of ImmGetCompositionString */ #define GCS_COMPREADSTR 0x0001 #define GCS_COMPREADATTR 0x0002 #define GCS_COMPREADCLAUSE 0x0004 #define GCS_COMPSTR 0x0008 #define GCS_COMPATTR 0x0010 #define GCS_COMPCLAUSE 0x0020 #define GCS_CURSORPOS 0x0080 #define GCS_DELTASTART 0x0100 #define GCS_RESULTREADSTR 0x0200 #define GCS_RESULTREADCLAUSE 0x0400 #define GCS_RESULTSTR 0x0800 #define GCS_RESULTCLAUSE 0x1000 /* style bit flags for WM_IME_COMPOSITION */ #define CS_INSERTCHAR 0x2000 #define CS_NOMOVECARET 0x4000 /* * bits of fdwInit of INPUTCONTEXT * IME version constants */ #define IMEVER_0310 0x0003000A #define IMEVER_0400 0x00040000 /* IME property bits */ #define IME_PROP_AT_CARET 0x00010000 #define IME_PROP_SPECIAL_UI 0x00020000 #define IME_PROP_CANDLIST_START_FROM_1 0x00040000 #define IME_PROP_UNICODE 0x00080000 #define IME_PROP_COMPLETE_ON_UNSELECT 0x00100000 /* IME UICapability bits */ #define UI_CAP_2700 0x00000001 #define UI_CAP_ROT90 0x00000002 #define UI_CAP_ROTANY 0x00000004 /* ImmSetCompositionString Capability bits */ #define SCS_CAP_COMPSTR 0x00000001 #define SCS_CAP_MAKEREAD 0x00000002 #define SCS_CAP_SETRECONVERTSTRING 0x00000004 /* IME WM_IME_SELECT inheritance Capability bits */ #define SELECT_CAP_CONVERSION 0x00000001 #define SELECT_CAP_SENTENCE 0x00000002 /* ID for deIndex of ImmGetGuideLine */ #define GGL_LEVEL 0x00000001 #define GGL_INDEX 0x00000002 #define GGL_STRING 0x00000003 #define GGL_PRIVATE 0x00000004 /* ID for dwLevel of GUIDELINE Structure */ #define GL_LEVEL_NOGUIDELINE 0x00000000 #define GL_LEVEL_FATAL 0x00000001 #define GL_LEVEL_ERROR 0x00000002 #define GL_LEVEL_WARNING 0x00000003 #define GL_LEVEL_INFORMATION 0x00000004 /* ID for dwIndex of GUIDELINE Structure */ #define GL_ID_UNKNOWN 0x00000000 #define GL_ID_NOMODULE 0x00000001 #define GL_ID_NODICTIONARY 0x00000010 #define GL_ID_CANNOTSAVE 0x00000011 #define GL_ID_NOCONVERT 0x00000020 #define GL_ID_TYPINGERROR 0x00000021 #define GL_ID_TOOMANYSTROKE 0x00000022 #define GL_ID_READINGCONFLICT 0x00000023 #define GL_ID_INPUTREADING 0x00000024 #define GL_ID_INPUTRADICAL 0x00000025 #define GL_ID_INPUTCODE 0x00000026 #define GL_ID_INPUTSYMBOL 0x00000027 #define GL_ID_CHOOSECANDIDATE 0x00000028 #define GL_ID_REVERSECONVERSION 0x00000029 #define GL_ID_PRIVATE_FIRST 0x00008000 #define GL_ID_PRIVATE_LAST 0x0000FFFF /* ID for dwIndex of ImmGetProperty */ #define IGP_GETIMEVERSION (DWORD)(-4) #define IGP_PROPERTY 0x00000004 #define IGP_CONVERSION 0x00000008 #define IGP_SENTENCE 0x0000000c #define IGP_UI 0x00000010 #define IGP_SETCOMPSTR 0x00000014 #define IGP_SELECT 0x00000018 /* dwIndex for ImmSetCompositionString API */ #define SCS_SETSTR (GCS_COMPREADSTR|GCS_COMPSTR) #define SCS_CHANGEATTR (GCS_COMPREADATTR|GCS_COMPATTR) #define SCS_CHANGECLAUSE (GCS_COMPREADCLAUSE|GCS_COMPCLAUSE) #define SCS_SETRECONVERTSTRING 0x00010000 #define SCS_QUERYRECONVERTSTRING 0x00020000 /* attribute for COMPOSITIONSTRING Structure */ #define ATTR_INPUT 0x00 #define ATTR_TARGET_CONVERTED 0x01 #define ATTR_CONVERTED 0x02 #define ATTR_TARGET_NOTCONVERTED 0x03 #define ATTR_INPUT_ERROR 0x04 #define ATTR_FIXEDCONVERTED 0x05 /* bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW */ #define CFS_DEFAULT 0x0000 #define CFS_RECT 0x0001 #define CFS_POINT 0x0002 #define CFS_FORCE_POSITION 0x0020 #define CFS_CANDIDATEPOS 0x0040 #define CFS_EXCLUDE 0x0080 /* conversion direction for ImmGetConversionList */ #define GCL_CONVERSION 0x0001 #define GCL_REVERSECONVERSION 0x0002 #define GCL_REVERSE_LENGTH 0x0003 /* bit field for conversion mode */ #define IME_CMODE_ALPHANUMERIC 0x0000 #define IME_CMODE_NATIVE 0x0001 #define IME_CMODE_CHINESE IME_CMODE_NATIVE /* IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually. */ #define IME_CMODE_HANGEUL IME_CMODE_NATIVE #define IME_CMODE_HANGUL IME_CMODE_NATIVE #define IME_CMODE_JAPANESE IME_CMODE_NATIVE #define IME_CMODE_KATAKANA 0x0002 /* only effect under IME_CMODE_NATIVE */ #define IME_CMODE_LANGUAGE 0x0003 #define IME_CMODE_FULLSHAPE 0x0008 #define IME_CMODE_ROMAN 0x0010 #define IME_CMODE_CHARCODE 0x0020 #define IME_CMODE_HANJACONVERT 0x0040 #define IME_CMODE_SOFTKBD 0x0080 #define IME_CMODE_NOCONVERSION 0x0100 #define IME_CMODE_EUDC 0x0200 #define IME_CMODE_SYMBOL 0x0400 #define IME_CMODE_FIXED 0x0800 #define IME_SMODE_NONE 0x0000 #define IME_SMODE_PLAURALCLAUSE 0x0001 #define IME_SMODE_SINGLECONVERT 0x0002 #define IME_SMODE_AUTOMATIC 0x0004 #define IME_SMODE_PHRASEPREDICT 0x0008 #define IME_SMODE_CONVERSATION 0x0010 /* style of candidate */ #define IME_CAND_UNKNOWN 0x0000 #define IME_CAND_READ 0x0001 #define IME_CAND_CODE 0x0002 #define IME_CAND_MEANING 0x0003 #define IME_CAND_RADICAL 0x0004 #define IME_CAND_STROKE 0x0005 /* wParam of report message WM_IME_NOTIFY */ #define IMN_CLOSESTATUSWINDOW 0x0001 #define IMN_OPENSTATUSWINDOW 0x0002 #define IMN_CHANGECANDIDATE 0x0003 #define IMN_CLOSECANDIDATE 0x0004 #define IMN_OPENCANDIDATE 0x0005 #define IMN_SETCONVERSIONMODE 0x0006 #define IMN_SETSENTENCEMODE 0x0007 #define IMN_SETOPENSTATUS 0x0008 #define IMN_SETCANDIDATEPOS 0x0009 #define IMN_SETCOMPOSITIONFONT 0x000A #define IMN_SETCOMPOSITIONWINDOW 0x000B #define IMN_SETSTATUSWINDOWPOS 0x000C #define IMN_GUIDELINE 0x000D #define IMN_PRIVATE 0x000E /* wParam of report message WM_IME_REQUEST */ #define IMR_COMPOSITIONWINDOW 0x0001 #define IMR_CANDIDATEWINDOW 0x0002 #define IMR_COMPOSITIONFONT 0x0003 #define IMR_RECONVERTSTRING 0x0004 #define IMR_CONFIRMRECONVERTSTRING 0x0005 #define IMR_QUERYCHARPOSITION 0x0006 #define IMR_DOCUMENTFEED 0x0007 /* error code of ImmGetCompositionString */ #define IMM_ERROR_NODATA (-1) #define IMM_ERROR_GENERAL (-2) /* dialog mode of ImmConfigureIME */ #define IME_CONFIG_GENERAL 1 #define IME_CONFIG_REGISTERWORD 2 #define IME_CONFIG_SELECTDICTIONARY 3 /* dialog mode of ImmEscape */ #define IME_ESC_QUERY_SUPPORT 0x0003 #define IME_ESC_RESERVED_FIRST 0x0004 #define IME_ESC_RESERVED_LAST 0x07FF #define IME_ESC_PRIVATE_FIRST 0x0800 #define IME_ESC_PRIVATE_LAST 0x0FFF #define IME_ESC_SEQUENCE_TO_INTERNAL 0x1001 #define IME_ESC_GET_EUDC_DICTIONARY 0x1003 #define IME_ESC_SET_EUDC_DICTIONARY 0x1004 #define IME_ESC_MAX_KEY 0x1005 #define IME_ESC_IME_NAME 0x1006 #define IME_ESC_SYNC_HOTKEY 0x1007 #define IME_ESC_HANJA_MODE 0x1008 #define IME_ESC_AUTOMATA 0x1009 #define IME_ESC_PRIVATE_HOTKEY 0x100a #define IME_ESC_GETHELPFILENAME 0x100b /* style of word registration */ #define IME_REGWORD_STYLE_EUDC 0x00000001 #define IME_REGWORD_STYLE_USER_FIRST 0x80000000 #define IME_REGWORD_STYLE_USER_LAST 0xFFFFFFFF /* dwFlags for ImmAssociateContextEx */ #define IACE_CHILDREN 0x0001 #define IACE_DEFAULT 0x0010 #define IACE_IGNORENOCONTEXT 0x0020 /* dwFlags for ImmGetImeMenuItems */ #define IGIMIF_RIGHTMENU 0x0001 /* dwType for ImmGetImeMenuItems */ #define IGIMII_CMODE 0x0001 #define IGIMII_SMODE 0x0002 #define IGIMII_CONFIGURE 0x0004 #define IGIMII_TOOLS 0x0008 #define IGIMII_HELP 0x0010 #define IGIMII_OTHER 0x0020 #define IGIMII_INPUTTOOLS 0x0040 /* fType of IMEMENUITEMINFO structure */ #define IMFT_RADIOCHECK 0x00001 #define IMFT_SEPARATOR 0x00002 #define IMFT_SUBMENU 0x00004 /* fState of IMEMENUITEMINFO structure */ #define IMFS_GRAYED MFS_GRAYED #define IMFS_DISABLED MFS_DISABLED #define IMFS_CHECKED MFS_CHECKED #define IMFS_HILITE MFS_HILITE #define IMFS_ENABLED MFS_ENABLED #define IMFS_UNCHECKED MFS_UNCHECKED #define IMFS_UNHILITE MFS_UNHILITE #define IMFS_DEFAULT MFS_DEFAULT /* * type of soft keyboard * for Windows Traditional Chinese Edition */ #define SOFTKEYBOARD_TYPE_T1 0x0001 /* for Windows Simplified Chinese Edition */ #define SOFTKEYBOARD_TYPE_C1 0x0002 HIMC WINAPI ImmAssociateContext(HWND, HIMC); BOOL WINAPI ImmAssociateContextEx(HWND, HIMC, DWORD); BOOL WINAPI ImmConfigureIMEA(HKL, HWND, DWORD, LPVOID); BOOL WINAPI ImmConfigureIMEW(HKL, HWND, DWORD, LPVOID); #define ImmConfigureIME WINELIB_NAME_AW(ImmConfigureIME) HIMC WINAPI ImmCreateContext(void); BOOL WINAPI ImmDestroyContext(HIMC hIMC); BOOL WINAPI ImmDisableIME(DWORD idThread); BOOL WINAPI ImmDisableLegacyIME(void); BOOL WINAPI ImmEnumInputContext(DWORD, IMCENUMPROC, LPARAM); UINT WINAPI ImmEnumRegisterWordA(HKL, REGISTERWORDENUMPROCA, LPCSTR, DWORD, LPCSTR, LPVOID); UINT WINAPI ImmEnumRegisterWordW(HKL, REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID); #define ImmEnumRegisterWord WINELIB_NAME_AW(ImmEnumRegisterWord) LRESULT WINAPI ImmEscapeA(HKL, HIMC, UINT, LPVOID); LRESULT WINAPI ImmEscapeW(HKL, HIMC, UINT, LPVOID); #define ImmEscape WINELIB_NAME_AW(ImmEscape) DWORD WINAPI ImmGetCandidateListA(HIMC, DWORD, LPCANDIDATELIST, DWORD); DWORD WINAPI ImmGetCandidateListW(HIMC, DWORD, LPCANDIDATELIST, DWORD); #define ImmGetCandidateList WINELIB_NAME_AW(ImmGetCandidateList) DWORD WINAPI ImmGetCandidateListCountA(HIMC, LPDWORD); DWORD WINAPI ImmGetCandidateListCountW(HIMC, LPDWORD); #define ImmGetCandidateListCount WINELIB_NAME_AW(ImmGetCandidateListCount) BOOL WINAPI ImmGetCandidateWindow(HIMC, DWORD, LPCANDIDATEFORM); #if defined(_WINGDI_) && !defined(NOGDI) BOOL WINAPI ImmGetCompositionFontA(HIMC, LPLOGFONTA); BOOL WINAPI ImmGetCompositionFontW(HIMC, LPLOGFONTW); #define ImmGetCompositionFont WINELIB_NAME_AW(ImmGetCompositionFont) BOOL WINAPI ImmSetCompositionFontA(HIMC, LPLOGFONTA); BOOL WINAPI ImmSetCompositionFontW(HIMC, LPLOGFONTW); #define ImmSetCompositionFont WINELIB_NAME_AW(ImmSetCompositionFont) #endif LONG WINAPI ImmGetCompositionStringA(HIMC, DWORD, LPVOID, DWORD); LONG WINAPI ImmGetCompositionStringW(HIMC, DWORD, LPVOID, DWORD); #define ImmGetCompositionString WINELIB_NAME_AW(ImmGetCompositionString) BOOL WINAPI ImmGetCompositionWindow(HIMC, LPCOMPOSITIONFORM); HIMC WINAPI ImmGetContext(HWND); DWORD WINAPI ImmGetConversionListA(HKL, HIMC, LPCSTR, LPCANDIDATELIST, DWORD, UINT); DWORD WINAPI ImmGetConversionListW(HKL, HIMC, LPCWSTR, LPCANDIDATELIST, DWORD, UINT); #define ImmGetConversionList WINELIB_NAME_AW(ImmGetConversionList) BOOL WINAPI ImmGetConversionStatus(HIMC, LPDWORD, LPDWORD); HWND WINAPI ImmGetDefaultIMEWnd(HWND); UINT WINAPI ImmGetDescriptionA(HKL, LPSTR, UINT); UINT WINAPI ImmGetDescriptionW(HKL, LPWSTR, UINT); #define ImmGetDescription WINELIB_NAME_AW(ImmGetDescription) DWORD WINAPI ImmGetGuideLineA(HIMC, DWORD, LPSTR, DWORD); DWORD WINAPI ImmGetGuideLineW(HIMC, DWORD, LPWSTR, DWORD); #define ImmGetGuideLine WINELIB_NAME_AW(ImmGetGuideLine) UINT WINAPI ImmGetIMEFileNameA(HKL, LPSTR, UINT); UINT WINAPI ImmGetIMEFileNameW(HKL, LPWSTR, UINT); #define ImmGetIMEFileName WINELIB_NAME_AW(ImmGetIMEFileName) DWORD WINAPI ImmGetImeMenuItemsA(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOA, LPIMEMENUITEMINFOA, DWORD); DWORD WINAPI ImmGetImeMenuItemsW(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD); #define ImmGetImeMenuItems WINELIB_NAME_AW(ImmGetImeMenuItems) BOOL WINAPI ImmGetOpenStatus(HIMC); DWORD WINAPI ImmGetProperty(HKL, DWORD); UINT WINAPI ImmGetRegisterWordStyleA(HKL, UINT, LPSTYLEBUFA); UINT WINAPI ImmGetRegisterWordStyleW(HKL, UINT, LPSTYLEBUFW); #define ImmGetRegisterWordStyle WINELIB_NAME_AW(ImmGetRegisterWordStyle) BOOL WINAPI ImmGetStatusWindowPos(HIMC, LPPOINT); UINT WINAPI ImmGetVirtualKey(HWND); HKL WINAPI ImmInstallIMEA(LPCSTR, LPCSTR); HKL WINAPI ImmInstallIMEW(LPCWSTR, LPCWSTR); #define ImmInstallIME WINELIB_NAME_AW(ImmInstallIME) BOOL WINAPI ImmIsIME(HKL); BOOL WINAPI ImmIsUIMessageA(HWND, UINT, WPARAM, LPARAM); BOOL WINAPI ImmIsUIMessageW(HWND, UINT, WPARAM, LPARAM); #define ImmIsUIMessage WINELIB_NAME_AW(ImmIsUIMessage) BOOL WINAPI ImmNotifyIME(HIMC, DWORD, DWORD, DWORD); BOOL WINAPI ImmProcessKey(HWND, HKL, UINT, LPARAM, DWORD); BOOL WINAPI ImmRegisterWordA(HKL, LPCSTR, DWORD, LPCSTR); BOOL WINAPI ImmRegisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR); #define ImmRegisterWord WINELIB_NAME_AW(ImmRegisterWord) BOOL WINAPI ImmReleaseContext(HWND, HIMC); BOOL WINAPI ImmSetCandidateWindow(HIMC, LPCANDIDATEFORM); BOOL WINAPI ImmSetCompositionStringA(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD); BOOL WINAPI ImmSetCompositionStringW(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD); #define ImmSetCompositionString WINELIB_NAME_AW(ImmSetCompositionString) BOOL WINAPI ImmSetCompositionWindow(HIMC, LPCOMPOSITIONFORM); BOOL WINAPI ImmSetConversionStatus(HIMC, DWORD, DWORD); BOOL WINAPI ImmSetOpenStatus(HIMC, BOOL); BOOL WINAPI ImmSetStatusWindowPos(HIMC, LPPOINT); BOOL WINAPI ImmSimulateHotKey(HWND, DWORD); BOOL WINAPI ImmUnregisterWordA(HKL, LPCSTR, DWORD, LPCSTR); BOOL WINAPI ImmUnregisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR); #define ImmUnregisterWord WINELIB_NAME_AW(ImmUnregisterWord) #ifdef __cplusplus } #endif #endif /* __WINE_IMM_H */ ================================================ FILE: wine/windows/imnact.idl ================================================ /* * Copyright 2006 Robert Shearman for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; interface IImnAccount; cpp_quote("#ifndef HR_E") cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)") cpp_quote("#endif") cpp_quote("#ifndef HR_S") cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)") cpp_quote("#endif") typedef enum tagSMTPAUTHTYPE { SMTP_AUTH_NONE, SMTP_AUTH_SICILY, SMTP_AUTH_USE_POP3ORIMAP_SETTINGS, SMTP_AUTH_USE_SMTP_SETTINGS, } SMTPAUTHTYPE; const SHORT CCHMAX_ORG_NAME = 256; const SHORT CCHMAX_DISPLAY_NAME = 256; const SHORT CCHMAX_ACCOUNT_NAME = 256; const SHORT CCHMAX_SERVER_NAME = 256; const SHORT CCHMAX_PASSWORD = 256; const SHORT CCHMAX_USERNAME = 256; const SHORT CCHMAX_EMAIL_ADDRESS = 256; const SHORT CCHMAX_CONNECTOID = 256; const SHORT CCHMAX_SEARCH_BASE = 256; const SHORT CCHMAX_ROOT_FOLDER = 256; const SHORT CCHMAX_SIGNATURE = 16; const SHORT CCHMAX_SERVICE = 256; [ object, uuid(0A06BD31-166F-11D0-81B9-00C04FD85AB4), pointer_default(unique) ] interface IImnAdviseAccount : IUnknown { typedef enum { ACCT_NEWS, ACCT_MAIL, ACCT_DIR_SERV, ACCT_LAST } ACCTTYPE; typedef struct tagAccountContext { ACCTTYPE AcctType; LPSTR pszAccountID; LPSTR pszOldName; DWORD dwServerType; } ACTX; HRESULT AdviseAccount( [in] DWORD dwAdviseType, [in] ACTX *pAcctCtx); } [ object, uuid(8D0AED11-1638-11D0-81B9-00C04FD85AB4), pointer_default(unique) ] interface IImnAdviseMigrateServer : IUnknown { HRESULT MigrateServer( [in] DWORD dwSrvType, [in] IImnAccount *pAccount); } [ object, uuid(FD465483-1384-11D0-ABBD-0020AFDFD10A), pointer_default(unique) ] interface IImnEnumAccounts : IUnknown { HRESULT GetCount( [out] ULONG *pcItems); HRESULT SortByAccountName(); HRESULT GetNext( [out] IImnAccount **ppAccount); HRESULT Reset(); } [ object, uuid(FD465481-1384-11D0-ABBD-0020AFDFD10A), pointer_default(unique) ] interface IImnAccountManager : IUnknown { typedef struct tagACCTLISTINFO { DWORD cbSize; ACCTTYPE AcctTypeInit; DWORD dwAcctFlags; DWORD dwFlags; } ACCTLISTINFO; HRESULT Init( [in] IImnAdviseMigrateServer *pAdviseMigrateServer); HRESULT CreateAccountObject( [in] ACCTTYPE AcctType, [out] IImnAccount **ppAccount); HRESULT Enumerate( [in] DWORD dwSrvTypes, [out] IImnEnumAccounts **ppEnumAccounts); HRESULT GetAccountCount( [in] ACCTTYPE AcctType, [out] ULONG *pcServers); HRESULT FindAccount( [in] DWORD dwPropTag, [in] LPCSTR pszSearchData, [out] IImnAccount **ppAccount); HRESULT GetDefaultAccountName( [in] ACCTTYPE AcctType, [in,ref] LPSTR pszAccount, [in] ULONG cchMax); HRESULT ProcessNotification( [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam); HRESULT ValidateDefaultSendAccount(); HRESULT AccountListDialog( [in] HWND hwnd, [in] ACCTLISTINFO *pinfo); HRESULT Advise( [in] IImnAdviseAccount *pAdviseAccount, [out] DWORD *pdwConnection); HRESULT Unadvise( [in] DWORD dwConnection); HRESULT GetUniqueAccountName( [in] LPSTR szName, [in] UINT cch); HRESULT InitEx( [in] IImnAdviseMigrateServer *pAdviseMigrateServer, [in] DWORD dwFlags); } [ object, uuid(C43DFC6F-62BB-11D2-A727-00C04F79E7C8), pointer_default(unique) ] interface IImnAccountManager2 : IImnAccountManager { HRESULT InitUser( [in] IImnAdviseMigrateServer *pAdviseMigrateServer, [in] REFGUID rguidID, [in] DWORD dwFlags); HRESULT GetIncompleteAccount( [in] ACCTTYPE AcctType, [in,ref] LPSTR pszAccountId, [in] ULONG cchMax); HRESULT SetIncompleteAccount( [in] ACCTTYPE AcctType, [in] LPCSTR pszAccountId); } [ object, uuid(FD465484-1384-11D0-ABBD-0020AFDFD10A), pointer_default(unique) ] interface IPropertyContainer : IUnknown { typedef enum { TYPE_ERROR = 1000, TYPE_DWORD, TYPE_LONG, TYPE_WORD, TYPE_SHORT, TYPE_BYTE, TYPE_CHAR, TYPE_FILETIME, TYPE_STRING, TYPE_BINARY, TYPE_FLAGS, TYPE_STREAM, TYPE_WSTRING, TYPE_BOOL, TYPE_PASS, TYPE_LAST } PROPTYPE; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetProp") cpp_quote("#undef SetProp") cpp_quote("#endif") HRESULT GetProp( [in] DWORD dwPropTag, [in,size_is(*pcb),ref] BYTE *pb, [in] ULONG *pcb); HRESULT GetPropDw( [in] DWORD dwPropTag, [out] DWORD *pdw); HRESULT GetPropSz( [in] DWORD dwPropTag, [in,ref] LPSTR psz, [in] ULONG cchMax); HRESULT SetProp( [in] DWORD dwPropTag, [in,size_is(cb)] BYTE *pb, [in] ULONG cb); HRESULT SetPropDw( [in] DWORD dwPropTag, [in] DWORD dw); HRESULT SetPropSz( [in] DWORD dwPropTag, [in] LPSTR psz); } [ object, uuid(FD465482-1384-11D0-ABBD-0020AFDFD10A), pointer_default(unique) ] interface IImnAccount : IPropertyContainer { HRESULT Exist(); HRESULT SetAsDefault(); HRESULT Delete(); HRESULT SaveChanges(); HRESULT GetAccountType( [out] ACCTTYPE *pAcctType); HRESULT GetServerTypes( [out] DWORD *pdwSrvTypes); HRESULT ShowProperties( [in] HWND hwnd, [in] DWORD dwFlags); HRESULT ValidateProperty( [in] DWORD dwPropTag, [in,size_is(cb)] BYTE *pb, [in] ULONG cb); HRESULT DoWizard( [in] HWND hwnd, [in] DWORD dwFlags); HRESULT DoImportWizard( [in] HWND hwnd, [in] CLSID clsid, [in] DWORD dwFlags); } cpp_quote("HRESULT WINAPI HrCreateAccountManager(IImnAccountManager **ppAccountManager);") cpp_quote("HRESULT WINAPI ValidEmailAddress(LPSTR lpAddress);") ================================================ FILE: wine/windows/imnxport.idl ================================================ /* * Copyright 2006 Robert Shearman for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "imnact.idl"; interface IInternetTransport; interface ISMTPTransport; interface IPOP3Transport; interface IIMAPTransport; /* CLSIDs */ cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);") cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);") cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);") /* Error Codes */ cpp_quote("#ifndef HR_E") cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)") cpp_quote("#endif") cpp_quote("#ifndef HR_S") cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)") cpp_quote("#endif") /* General Error Codes */ cpp_quote("#define IXP_E_LOAD_SICILY_FAILED HR_E(0xCC00)") cpp_quote("#define IXP_E_INVALID_CERT_CN HR_E(0xCC01)") cpp_quote("#define IXP_E_INVALID_CERT_DATE HR_E(0xCC02)") cpp_quote("#define IXP_E_ALREADY_CONNECTED HR_E(0xCC03)") cpp_quote("#define IXP_E_CONN HR_E(0xCC04)") cpp_quote("#define IXP_E_NOT_CONNECTED HR_E(0xCC05)") cpp_quote("#define IXP_E_CONN_SEND HR_E(0xCC06)") cpp_quote("#define IXP_E_WOULD_BLOCK HR_E(0xCC07)") cpp_quote("#define IXP_E_INVALID_STATE HR_E(0xCC08)") cpp_quote("#define IXP_E_CONN_RECV HR_E(0xCC09)") cpp_quote("#define IXP_E_INCOMPLETE HR_E(0xCC0A)") cpp_quote("#define IXP_E_BUSY HR_E(0xCC0B)") cpp_quote("#define IXP_E_NOT_INIT HR_E(0xCC0C)") cpp_quote("#define IXP_E_CANT_FIND_HOST HR_E(0xCC0D)") cpp_quote("#define IXP_E_FAILED_TO_CONNECT HR_E(0xCC0E)") cpp_quote("#define IXP_E_CONNECTION_DROPPED HR_E(0xCC0F)") cpp_quote("#define IXP_E_INVALID_ADDRESS HR_E(0xCC10)") cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST HR_E(0xCC11)") cpp_quote("#define IXP_E_SOCKET_READ_ERROR HR_E(0xCC12)") cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR HR_E(0xCC13)") cpp_quote("#define IXP_E_SCOKET_INIT_ERROR HR_E(0xCC14)") cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR HR_E(0xCC15)") cpp_quote("#define IXP_E_INVALID_ACCOUNT HR_E(0xCC16)") cpp_quote("#define IXP_E_USER_CANCEL HR_E(0xCC17)") cpp_quote("#define IXP_E_SICILY_LOGON_FAILED HR_E(0xCC18)") cpp_quote("#define IXP_E_TIMEOUT HR_E(0xCC19)") cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED HR_E(0xCC1A)") /* SMTP Failure Statuses */ cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR HR_E(0xCC60)") cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE HR_E(0xCC61)") cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR HR_E(0xCC62)") cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX HR_E(0xCC63)") cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL HR_E(0xCC64)") cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ HR_E(0xCC65)") cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)") cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE HR_E(0xCC67)") cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY HR_E(0xCC68)") cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND HR_E(0xCC69)") cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING HR_E(0xCC6A)") cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL HR_E(0xCC6B)") cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE HR_E(0xCC6C)") cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW HR_E(0xCC6D)") cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX HR_E(0xCC6E)") cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED HR_E(0xCC6F)") /* SMTP Success Statuses */ cpp_quote("#define IXP_E_SMTP_211_SYSTEM_STATUS HR_S(0xCC70)") cpp_quote("#define IXP_E_SMTP_214_HELP_MESSAGE HR_S(0xCC71)") cpp_quote("#define IXP_E_SMTP_220_READY HR_S(0xCC72)") cpp_quote("#define IXP_E_SMTP_221_CLOSING HR_S(0xCC73)") cpp_quote("#define IXP_E_SMTP_250_MAIL_ACTION_OKAY HR_S(0xCC74)") cpp_quote("#define IXP_E_SMTP_251_FORWARDING_MAIL HR_S(0xCC75)") cpp_quote("#define IXP_E_SMTP_354_START_MAIL_INPUT HR_S(0xCC76)") cpp_quote("#define IXP_E_SMTP_CONTINUE HR_S(0xCC77)") cpp_quote("#define IXP_E_SMTP_334_AUTH_READY_RESPONSE HR_S(0xCC78)") cpp_quote("#define IXP_E_SMTP_245_AUTH_SUCCESS HR_S(0xCC79)") /* More SMTP Failure Statuses */ cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER HR_E(0xCC78)") cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS HR_E(0xCC79)") cpp_quote("#define IXP_E_SMTP_NO_SENDER HR_E(0xCC7A)") cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS HR_E(0xCC7B)") cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED HR_E(0xCC7C)") cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT HR_E(0xCC7D)") cpp_quote("#define IXP_E_SMTP_NO_DSN_SUPPORT HR_E(0xCC7E)") cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED HR_E(0xCC7F)") const SHORT CCHMAX_DOMAIN = 256; const SHORT CCHMAX_PHONE_NUMBER = 128; const DWORD DEFAULT_IMAP_PORT = 143; const DWORD DEFAULT_POP3_PORT = 110; const DWORD DEFAULT_SMTP_PORT = 25; const DWORD DEFAULT_NNTP_PORT = 119; typedef enum tagINETADDRTYPE { ADDR_TO, ADDR_FROM, ADDR_DSN_NEVER = 16, ADDR_DSN_SUCCESS = 32, ADDR_DSN_FAILURE = 64, ADDR_DSN_DELAY = 128 } INETADDRTYPE; const DWORD ADDR_TOFROM_MASK = 0x1; const DWORD ADDR_DSN_MASK = 0xf0; typedef enum tagDSNRET { DSNRET_DEFAULT, DSNRET_HDRS, DSNRET_FULL, } DSNRET; typedef struct tagINETADDR { INETADDRTYPE addrtype; CHAR szEmail[CCHMAX_EMAIL_ADDRESS]; } INETADDR, *LPINETADDR; typedef struct tagINETADDRLIST { ULONG cAddress; LPINETADDR prgAddress; } INETADDRLIST, *LPINETADDRLIST; typedef enum tagRASCONNTYPE { RAS_CONNECT_LAN, RAS_CONNECT_MANUAL, RAS_CONNECT_RAS } RASCONNTYPE; typedef enum tagHTTPMAILPROPTYPE { HTTPMAIL_PROP_INVALID, HTTPMAIL_PROP_ADBAR, HTTPMAIL_PROP_CONTACTS, HTTPMAIL_PROP_INBOX, HTTPMAIL_PROP_OUTBOX, HTTPMAIL_PROP_SENDMSG, HTTPMAIL_PROP_SENTITEMS, HTTPMAIL_PROP_DELETEDITEMS, HTTPMAIL_PROP_DRAFTS, HTTPMAIL_PROP_MSGFOLDERROOT, HTTPMAIL_PROP_SIG, HTTPMAIL_PROP_LAST } HTTPMAILPROPTYPE; typedef enum tagHTTPMAILSPECIALFOLDER { HTTPMAIL_SF_NONE, HTTPMAIL_SF_UNRECOGNIZED, HTTPMAIL_SF_INBOX, HTTPMAIL_SF_DELETEDITEMS, HTTPMAIL_SF_DRAFTS, HTTPMAIL_SF_OUTBOX, HTTPMAIL_SF_SENTITEMS, HTTPMAIL_SF_CONTACTS, HTTPMAIL_SF_CALENDAR, HTTPMAIL_SF_MSNPROMO, HTTPMAIL_SF_LAST } HTTPMAILSPECIALFOLDER; typedef enum tagHTTPMAILCONTACTTYPE { HTTPMAIL_CT_CONTACT, HTTPMAIL_CT_GROUP, HTTPMAIL_CT_LAST } HTTPMAILCONTACTTYPE; const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF; const DWORD DAVNAMESPACE_DAV = 0; const DWORD DAVNAMESPACE_HOTMAIL = 1; const DWORD DAVNAMESPACE_HTTPMAIL = 2; const DWORD DAVNAMESPACE_MAIL = 3; const DWORD DAVNAMESPACE_CONTACTS = 4; cpp_quote("#define ISF_SMTP_USEIPFORHELO 0x01") cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD 0x02") /* for SMTP - send EHLO and use STARTTLS if available: */ cpp_quote("#define ISF_SSLONSAMEPORT 0x04") cpp_quote("#define ISF_QUERYDSNSUPPORT 0x08") /* for SMTP - send EHLO and use AUTH if available: */ cpp_quote("#define ISF_QUERYAUTHSUPPORT 0x10") typedef struct INETSERVER { CHAR szAccount[CCHMAX_ACCOUNT_NAME]; CHAR szUserName[CCHMAX_USERNAME]; CHAR szPassword[CCHMAX_PASSWORD]; CHAR szServerName[CCHMAX_SERVER_NAME]; CHAR szConnectoid[CCHMAX_CONNECTOID]; RASCONNTYPE rasconntype; DWORD dwPort; BOOL fSSL; BOOL fTrySicily; DWORD dwTimeout; DWORD dwFlags; } INETSERVER, *LPINETSERVER; typedef enum tagIXPTYPE { IXP_NNTP, IXP_SMTP, IXP_POP3, IXP_IMAP, IXP_RAS, IXP_HTTPMail } IXPTYPE; typedef enum tagIXPSTATUS { IXP_FINDINGHOST, IXP_CONNECTING, IXP_SECURING, IXP_CONNECTED, IXP_AUTHORIZING, IXP_AUTHRETRY, IXP_AUTHORIZED, IXP_DISCONNECTING, IXP_DISCONNECTED, IXP_LAST } IXPSTATUS; const DWORD DEPTH_INFINITY = 0xFFFFFFFE; typedef DWORD MEMBERINFOFLAGS; const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0; const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1; const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2; const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS; typedef DWORD IMAP_MSGFLAGS; const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00; const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01; const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02; const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04; const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08; const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10; const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f; [ object, uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4), local ] interface ITransportCallbackService : IUnknown { HRESULT GetParentWindow( [in] DWORD dwReserved, [out] HWND *phwndParent); HRESULT GetAccount( [out] LPDWORD pdwServerType, [out] IImnAccount **ppAccount); } [ object, uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4), local ] interface ITransportCallback : IUnknown { typedef struct tagIXPRESULT { HRESULT hrResult; LPSTR pszResponse; UINT uiServerError; HRESULT hrServerError; DWORD dwSocketError; LPSTR pszProblem; } IXPRESULT, *LPIXPRESULT; typedef enum tagCMDTYPE { CMD_SEND, CMD_RESP } CMDTYPE; HRESULT OnTimeout( [in,out] DWORD *pdwTimeout, [in] IInternetTransport *pTransport); HRESULT OnLogonPrompt( [in,out] LPINETSERVER pInetServer, [in] IInternetTransport *pTransport); INT OnPrompt( [in] HRESULT hrError, [in] LPCSTR pszText, [in] LPCSTR pszCaption, [in] UINT uType, [in] IInternetTransport *pTransport); HRESULT OnStatus( [in] IXPSTATUS ixpstatus, [in] IInternetTransport *pTransport); HRESULT OnError( [in] IXPSTATUS ixpstatus, [in] LPIXPRESULT pResult, [in] IInternetTransport *pTransport); HRESULT OnCommand( [in] CMDTYPE cmdtype, [in] LPSTR pszLine, [in] HRESULT hrResponse, [in] IInternetTransport *pTransport); } [ object, uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4), local ] interface IInternetTransport : IUnknown { const boolean iitAUTHENTICATE = TRUE; const boolean iitDONT_AUTHENTICATe = FALSE; const boolean iitENABLE_ONCOMMAND = TRUE; const boolean iitDISABLE_ONCOMMAND = FALSE; typedef enum tagIXPISSTATE { IXP_IS_CONNECTED, IXP_IS_BUSY, IXP_IS_READY, IXP_IS_AUTHENTICATED } IXPISSTATE; HRESULT GetServerInfo( [in,out] LPINETSERVER pInetServer); IXPTYPE GetIXPType(); HRESULT IsState( [in] IXPISSTATE isstate); HRESULT InetServerFromAccount( [in] IImnAccount *pAccount, [in,out] LPINETSERVER pInetServer); HRESULT Connect( [in] LPINETSERVER pInetServer, [in] boolean fAuthenticate, [in] boolean fCommandLogging); HRESULT HandsOffCallback(); HRESULT Disconnect(); HRESULT DropConnection(); HRESULT GetStatus( [out] IXPSTATUS *pCurrentStatus); } [ object, uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4), local ] interface ISMTPCallback : ITransportCallback { typedef enum tagSMTPCOMMAND { SMTP_NONE, SMTP_BANNER, SMTP_CONNECTED, SMTP_SEND_MESSAGE, SMTP_AUTH, SMTP_EHLO, SMTP_HELO, SMTP_MAIL, SMTP_RCPT, SMTP_RSET, SMTP_QUIT, SMTP_DATA, SMTP_DOT, SMTP_SEND_STREAM, SMTP_CUSTOM } SMTPCOMMAND; typedef struct tagSMTPSTREAM { DWORD cbIncrement; DWORD cbCurrent; DWORD cbTotal; } SMTPSTREAM, *LPSMTPSTREAM; typedef struct tagSMTPRESPONSE { SMTPCOMMAND command; BOOL fDone; IXPRESULT rIxpResult; ISMTPTransport *pTransport; [switch_type(SMTPCOMMAND), switch_is(command)] union { [case(SMTP_SEND_STREAM)] SMTPSTREAM rStreamInfo; [default]; }; } SMTPRESPONSE, *LPSMTPRESPONSE; HRESULT OnResponse( [in] LPSMTPRESPONSE pResponse); } [ object, uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4), local ] interface ISMTPTransport : IInternetTransport { typedef struct tagSMTPMESSAGE { ULONG cbSize; LPSTREAM pstmMsg; INETADDRLIST rAddressList; } SMTPMESSAGE, *LPSMTPMESSAGE; HRESULT InitNew( [in] LPSTR pszLogFilePath, [in] ISMTPCallback *pCallback); cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef SendMessage") cpp_quote("#endif") HRESULT SendMessage( [in] LPSMTPMESSAGE pMessage); HRESULT CommandMAIL( [in] LPSTR pszEmailFrom); HRESULT CommandRCPT( [in] LPSTR pszEmailTo); HRESULT CommandEHLO(); HRESULT CommandHELO(); HRESULT CommandAUTH( [in] LPSTR pszAuthType); HRESULT CommandQUIT(); HRESULT CommandRSET(); HRESULT CommandDATA(); HRESULT CommandDOT(); HRESULT SendDataStream( [in] IStream *pStream, [in] ULONG cbSize); } [ object, uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4), local ] interface ISMTPTransport2 : ISMTPTransport { typedef struct tagSMTPMESSAGE2 { SMTPMESSAGE smtpMsg; LPSTR pszDSNENVID; DSNRET dsnRet; DWORD dwReserved; DWORD dwReserved2; } SMTPMESSAGE2, *LPSMTPMESSAGE2; HRESULT SetWindow(); HRESULT ResetWindow(); HRESULT SendMessage2( [in] LPSMTPMESSAGE2 pMessage); HRESULT CommandRCPT2( [in] LPSTR pszEmailTo, [in] INETADDRTYPE atDSN); } /* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */ [ object, uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4), local ] interface IPOP3Callback : ITransportCallback { typedef enum tagPOP3COMMAND { POP3_NONE, POP3_BANNER, POP3_CONNECTED, POP3_USER, POP3_PASS, POP3_AUTH, POP3_UIDL, POP3_STAT, POP3_LIST, POP3_DELE, POP3_RETR, POP3_TOP, POP3_NOOP, POP3_QUIT, POP3_RSET, POP3_CUSTOM } POP3COMMAND; typedef struct tagPOP3RETR { BOOL fHeader; BOOL fBody; DWORD dwPopId; DWORD cbSoFar; LPSTR pszLines; ULONG cbLines; } POP3RETR, *LPPOP3RETR; typedef struct tagPOP3TOP { BOOL fHeader; BOOL fBody; DWORD dwPopId; DWORD cPreviewLines; DWORD cbSoFar; LPSTR pszLines; ULONG cbLines; } POP3TOP, *LPPOP3TOP; typedef struct tagPOP3LIST { DWORD dwPopId; DWORD cbSize; } POP3LIST, *LPPOP3LIST; typedef struct tagPOP3UIDL { DWORD dwPopId; LPSTR pszUidl; } POP3UIDL, *LPPOP3UIDL; typedef struct tagPOP3STAT { DWORD cMessages; DWORD cbMessages; } POP3STAT, *LPPOP3STAT; typedef struct tagPOP3RESPONSE { POP3COMMAND command; BOOL fDone; IXPRESULT rIxpResult; IPOP3Transport *pTransport; BOOL fValidInfo; [switch_type(POP3COMMAND), switch_is(command)] union { [case(POP3_UIDL)] POP3UIDL rUidlInfo; [case(POP3_STAT)] POP3STAT rStatInfo; [case(POP3_LIST)] POP3LIST rListInfo; [case(POP3_DELE)] DWORD dwPopId; [case(POP3_RETR)] POP3RETR rRetrInfo; [case(POP3_TOP)] POP3TOP rTopInfo; [default]; }; } POP3RESPONSE, *LPPOP3RESPONSE; HRESULT OnResponse( [in] LPPOP3RESPONSE pResponse); } [ object, uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4), local ] interface IPOP3Transport : IInternetTransport { typedef enum tagPOP3CMDTYPE { POP3CMD_GET_POPID, POP3CMD_GET_MARKED, POP3CMD_GET_ALL } POP3CMDTYPE; typedef enum tagPOP3MARKTYPE { POP3_MARK_FOR_TOP = 0x01, POP3_MARK_FOR_RETR = 0x02, POP3_MARK_FOR_DELE = 0x04, POP3_MARK_FOR_UIDL = 0x08, POP3_MARK_FOR_LIST = 0x10 } POP3MARKTYPE; HRESULT InitNew( [in] LPSTR pszLogFilePath, [in] IPOP3Callback *pCallback); HRESULT MarkItem( [in] POP3MARKTYPE marktype, [in] DWORD dwPopId, [in] boolean fMarked); HRESULT CommandAUTH( [in] LPSTR pszAuthType); HRESULT CommandUSER( [in] LPSTR pszUserName); HRESULT CommandPASS( [in] LPSTR pszPassword); HRESULT CommandLIST( [in] POP3CMDTYPE cmdtype, [in] DWORD dwPopId); HRESULT CommandTOP( [in] POP3CMDTYPE cmdtype, [in] DWORD dwPopId, [in] DWORD cPreviewLines); HRESULT CommandQUIT(); HRESULT CommandSTAT(); HRESULT CommandNOOP(); HRESULT CommandRSET(); HRESULT CommandUIDL( [in] POP3CMDTYPE cmdtype, [in] DWORD dwPopId); HRESULT CommandDELE( [in] POP3CMDTYPE cmdtype, [in] DWORD dwPopId); HRESULT CommandRETR( [in] POP3CMDTYPE cmdtype, [in] DWORD dwPopId); } /* FIXME: INNTPCallback, INNTPTransport */ [ object, uuid(8C438160-4EF6-11d0-874F-00AA00530EE9), local, ] interface IRangeList : IUnknown { const ULONG RL_RANGE_ERROR = ((ULONG)-1); const ULONG RL_LAST_MESSAGE = ((ULONG)-1); HRESULT Clear(); HRESULT IsInRange( [in] const ULONG value); HRESULT Min( [out] ULONG *pulMin); HRESULT Max( [out] ULONG *pulMax); HRESULT Save( [out] byte **ppbDestination, [out] ULONG *pulSizeOfDestination); HRESULT Load( [in, size_is(ulSizeOfSource)] byte *pbSource, [in] const ULONG ulSizeOfSource); HRESULT AddRange( [in] const ULONG low, [in] const ULONG high); HRESULT AddSingleValue( [in] const ULONG value); HRESULT AddRangeList( [in] const IRangeList *prl); HRESULT DeleteRange( [in] const ULONG low, [in] const ULONG high); HRESULT DeleteSingleValue( [in] const ULONG value); HRESULT DeleteRangeList( [in] const IRangeList *prl); HRESULT MinOfRange( [in] const ULONG value, [out] ULONG *pulMinOfRange); HRESULT MaxOfRange( [in] const ULONG value, [out] ULONG *pulMaxOfRange); HRESULT RangeToIMAPString( [out] LPSTR *ppszDestination, [out] LPDWORD pdwLengthOfDestination); HRESULT Next( [in] const ULONG current, [out] ULONG *pulNext); HRESULT Prev( [in] const ULONG current, [out] ULONG *pulPrev); HRESULT Cardinality( [out] ULONG *pulCardinality); HRESULT CardinalityFrom( [in] const ULONG ulStartPoint, [out] ULONG *pulCardinalityFrom); } [ object, uuid(E9E9D8A3-4EDD-11d0-874F-00AA00530EE9), local ] interface IIMAPCallback : ITransportCallback { typedef DWORD IMAP_MBOXFLAGS; const IMAP_MBOXFLAGS IMAP_MBOX_NOFLAGS = 0x0; const IMAP_MBOXFLAGS IMAP_MBOX_MARKED = 0x1; const IMAP_MBOXFLAGS IMAP_MBOX_NOINFERIORS = 0x2; const IMAP_MBOXFLAGS IMAP_MBOX_NOSELECT = 0x4; const IMAP_MBOXFLAGS IMAP_MBOX_UNMARKED = 0x8; const IMAP_MBOXFLAGS IMAP_MBOX_ALLFLAGS = 0xf; typedef enum tagIMAP_RESPONSE_TYPE { irtERROR_NOTIFICATION, irtCOMMAND_COMPLETION, irtSERVER_ALERT, irtPARSE_ERROR, irtMAILBOX_UPDATE, irtDELETED_MSG, irtFETCH_BODY, irtUPDATE_MSG, irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS, irtUIDVALIDITY, irtREADWRITE_STATUS, irtTRYCREATE, irtSEARCH, irtMAILBOX_LISTING, irtMAILBOX_STATUS, irtAPPEND_PROGRESS, irtUPDATE_MSG_EX } IMAP_RESPONSE_TYPE; typedef struct tagFETCH_BODY_PART { DWORD dwMsgSeqNum; LPSTR pszBodyTag; DWORD dwTotalBytes; DWORD dwSizeOfData; DWORD dwOffset; BOOL fDone; LPSTR pszData; LPARAM lpFetchCookie1; LPARAM lpFetchCookie2; } FETCH_BODY_PART; typedef struct tagFETCH_CMD_RESULTS { DWORD dwMsgSeqNum; BOOL bMsgFlags; IMAP_MSGFLAGS mfMsgFlags; BOOL bRFC822Size; DWORD dwRFC822Size; BOOL bUID; DWORD dwUID; BOOL bInternalDate; FILETIME ftInternalDate; LPARAM lpFetchCookie1; LPARAM lpFetchCookie2; } FETCH_CMD_RESULTS; typedef struct tagIMAPADDR { LPSTR pszName; LPSTR pszADL; LPSTR pszMailbox; LPSTR pszHost; struct tagIMAPADDR *pNext; } IMAPADDR; typedef struct tagFETCH_CMD_RESULTS_EX { DWORD dwMsgSeqNum; BOOL bMsgFlags; IMAP_MSGFLAGS mfMsgFlags; BOOL bRFC822Size; DWORD dwRFC822Size; BOOL bUID; DWORD dwUID; BOOL bInternalDate; FILETIME ftInternalDate; LPARAM lpFetchCookie1; LPARAM lpFetchCookie2; BOOL bEnvelope; FILETIME ftENVDate; LPSTR pszENVSubject; IMAPADDR *piaENVFrom; IMAPADDR *piaENVSender; IMAPADDR *piaENVReplyTo; IMAPADDR *piaENVTo; IMAPADDR *piaENVCc; IMAPADDR *piaENVBcc; LPSTR pszENVInReplyTo; LPSTR pszENVMessageID; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; } FETCH_CMD_RESULTS_EX; typedef struct tagMBOX_MSGCOUNT { BOOL bGotExistsResponse; DWORD dwExists; BOOL bGotRecentResponse; DWORD dwRecent; BOOL bGotUnseenResponse; DWORD dwUnseen; } MBOX_MSGCOUNT; typedef struct tagIMAP_LISTLSUB_RESPONSE { LPSTR pszMailboxName; IMAP_MBOXFLAGS imfMboxFlags; char cHierarchyChar; } IMAP_LISTLSUB_RESPONSE; typedef struct tagIMAP_STATUS_RESPONSE { LPSTR pszMailboxName; BOOL fMessages; DWORD dwMessages; BOOL fRecent; DWORD dwRecent; BOOL fUIDNext; DWORD dwUIDNext; BOOL fUIDValidity; DWORD dwUIDValidity; BOOL fUnseen; DWORD dwUnseen; } IMAP_STATUS_RESPONSE; typedef struct tagAPPEND_PROGRESS { DWORD dwUploaded; DWORD dwTotal; } APPEND_PROGRESS; typedef [switch_type(IMAP_RESPONSE_TYPE)] union tagIMAP_RESPONSE_DATA { [case (irtMAILBOX_UPDATE)] MBOX_MSGCOUNT *pmcMsgCount; [case (irtDELETED_MSG)] DWORD dwDeletedMsgSeqNum; [case (irtFETCH_BODY)] FETCH_BODY_PART *pFetchBodyPart; [case (irtUPDATE_MSG)] FETCH_CMD_RESULTS *pFetchResults; [case (irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS)] IMAP_MSGFLAGS imfImapMessageFlags; [case (irtUIDVALIDITY)] DWORD dwUIDValidity; [case (irtREADWRITE_STATUS)] BOOL bReadWrite; [case (irtSEARCH)] IRangeList *prlSearchResults; [case (irtMAILBOX_LISTING)] IMAP_LISTLSUB_RESPONSE illrdMailboxListing; [case (irtMAILBOX_STATUS)] IMAP_STATUS_RESPONSE *pisrStatusResponse; [case (irtAPPEND_PROGRESS)] APPEND_PROGRESS *papAppendProgress; [case (irtUPDATE_MSG_EX)] FETCH_CMD_RESULTS_EX *pFetchResultsEx; } IMAP_RESPONSE_DATA; typedef struct tagIMAP_RESPONSE { WPARAM wParam; LPARAM lParam; HRESULT hrResult; LPSTR lpszResponseText; IMAP_RESPONSE_TYPE irtResponseType; [switch_is(irtResponseType)] IMAP_RESPONSE_DATA irdResponseData; } IMAP_RESPONSE; HRESULT OnResponse([in] const IMAP_RESPONSE *pirIMAPResponse); } [ object, uuid(E9E9D8A8-4EDD-11d0-874F-00AA00530EE9), local, ] interface IIMAPTransport : IInternetTransport { const DWORD IMAP_CAPABILITY_IMAP4 = 0x1; const DWORD IMAP_CAPABILITY_IMAP4rev1 = 0x2; const DWORD IMAP_CAPABILITY_IDLE = 0x4; const DWORD IMAP_CAPABILITY_ALLFLAGS = 0x7; HRESULT InitNew( [in] LPSTR pszLogFilePath, [in] IIMAPCallback *pCBHandler); HRESULT NewIRangeList( [out] IRangeList **pprlNewRangeList); HRESULT Capability( [out] DWORD *pdwCapabilityFlags); HRESULT Select( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxName); HRESULT Examine( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxName); HRESULT Create( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxName); HRESULT Delete( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxName); HRESULT Rename( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxName, [in] LPSTR lpszNewMailboxName); HRESULT Subscribe( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxName); HRESULT Unsubscribe( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxName); HRESULT List( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxNameReference, [in] LPSTR lpszMailboxNamePattern); HRESULT Lsub( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxNameReference, [in] LPSTR lpszMailboxNamePattern); HRESULT Append( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszMailboxName, [in] LPSTR lpszMessageFlags, [in] FILETIME ftMessageDateTime, [in] LPSTREAM lpstmMessageToSave); HRESULT Close( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler); HRESULT Expunge( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler); HRESULT Search( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR lpszSearchCriteria, [in] boolean bReturnUIDs, [in] IRangeList *pMsgRange, [in] boolean bUIDRangeList); HRESULT Fetch( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] IRangeList *pMsgRange, [in] boolean bUIDMsgRange, [in] LPSTR lpszFetchArgs); HRESULT Store( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] IRangeList *pMsgRange, [in] boolean bUIDRangeList, [in] LPSTR lpszStoreArgs); HRESULT Copy( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] IRangeList *pMsgRange, [in] boolean bUIDRangeList, [in] LPSTR lpszMailboxName); HRESULT Noop( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler); HRESULT ResizeMsgSeqNumTable( [in] DWORD dwSizeOfMbox); HRESULT UpdateSeqNumToUID( [in] DWORD dwMsgSeqNum, [in] DWORD dwUID); HRESULT RemoveSequenceNum( [in] DWORD dwDeletedMsgSeqNum); HRESULT MsgSeqNumToUID( [in] DWORD dwMsgSeqNum, [out] DWORD *pdwUID); HRESULT GetMsgSeqNumToUIDArray( [out] DWORD **ppdwMsgSeqNumToUIDArray, [out] DWORD *pdwNumberOfElements); HRESULT GetHighestMsgSeqNum( [out] DWORD *pdwHighestMSN); HRESULT ResetMsgSeqNumToUID(); HRESULT SetDefaultCBHandler( [in] IIMAPCallback *pCBHandler); HRESULT Status( [in] WPARAM wParam, [in] LPARAM lParam, [in] IIMAPCallback *pCBHandler, [in] LPSTR pszMailboxName, [in] LPSTR pszStatusCmdArgs); } #if 0 cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);") cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);") cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);") #endif cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);") cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);") cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);") cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);") ================================================ FILE: wine/windows/in6addr.h ================================================ /* * Copyright (C) 2009 Jeff Latimer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __IN6ADDR__ #define __IN6ADDR__ #ifdef USE_WS_PREFIX #define WS(x) WS_##x #else #define WS(x) x #endif typedef struct WS(in6_addr) { union { UCHAR Byte[16]; USHORT Word[8]; } u; } IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR; #define in_addr6 WS(in6_addr) #ifdef USE_WS_PREFIX #define WS__S6_un u #define WS__S6_u8 Byte #define WS_s6_addr WS__S6_un.WS__S6_u8 #else #define _S6_un u #define _S6_u8 Byte #define s6_addr _S6_un._S6_u8 #endif #define s6_bytes u.Byte #define s6_words u.Word #undef WS #endif /* __IN6ADDR__ */ ================================================ FILE: wine/windows/inaddr.h ================================================ /* * Copyright 2010 Detlef Riekenberg * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #ifndef __INADDR_H__ #define __INADDR_H__ #ifdef USE_WS_PREFIX #define WS(x) WS_##x #else #define WS(x) x #endif typedef struct WS(in_addr) { union { struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { USHORT s_w1,s_w2; } S_un_w; ULONG S_addr; } S_un; } IN_ADDR, *PIN_ADDR, *LPIN_ADDR; #undef WS #ifndef USE_WS_PREFIX #define s_addr S_un.S_addr #define s_net S_un.S_un_b.s_b1 #define s_host S_un.S_un_b.s_b2 #define s_lh S_un.S_un_b.s_b3 #define s_impno S_un.S_un_b.s_b4 #define s_imp S_un.S_un_w.s_w2 #else #define WS_s_addr S_un.S_addr #define WS_s_net S_un.S_un_b.s_b1 #define WS_s_host S_un.S_un_b.s_b2 #define WS_s_lh S_un.S_un_b.s_b3 #define WS_s_impno S_un.S_un_b.s_b4 #define WS_s_imp S_un.S_un_w.s_w2 #endif /* USE_WS_PREFIX */ #endif /* __INADDR_H__ */ ================================================ FILE: wine/windows/indexsrv.idl ================================================ /* * Copyright 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; /* FIXME: import "filter.idl"; */ /* * widl doesn't like the declaration of PFNFILLTEXTBUFFER, so work around it... * Not sure that function pointers are even legal in idl. */ cpp_quote("struct tagTEXT_SOURCE;") cpp_quote("typedef HRESULT (WINAPI *PFNFILLTEXTBUFFER)(struct tagTEXT_SOURCE *pTextSource);") cpp_quote("#if 0") typedef void* PFNFILLTEXTBUFFER; cpp_quote("#endif") typedef struct tagTEXT_SOURCE { PFNFILLTEXTBUFFER pfnFillTextBuffer; const WCHAR *awcBuffer; ULONG iEnd; ULONG iCur; } TEXT_SOURCE; typedef enum tagWORDREP_BREAK_TYPE { WORDREP_BREAK_EOW = 0, WORDREP_BREAK_EOS = 1, WORDREP_BREAK_EOP = 2, WORDREP_BREAK_EOC = 3 } WORDREP_BREAK_TYPE; /***************************************************************************** * IWordSink interface */ [ uuid(cc907054-c058-101a-b554-08002b33b0e6), object, local ] interface IWordSink : IUnknown { HRESULT PutWord( [in] ULONG cwc, [size_is(cwcSrcLen)][in] const WCHAR *pwcInBuf, [in] ULONG cwcSrcLen, [in] ULONG cwcSrcPos); HRESULT PutAltWord( [in] ULONG cwc, [size_is(cwcSrcLen)][in] const WCHAR *pwcInBuf, [in] ULONG cwcSrcLen, [in] ULONG cwcSrcPos); HRESULT StartAltPhrase(void); HRESULT EndAltPhrase(void); HRESULT PutBreak( [in] WORDREP_BREAK_TYPE breakType); } /***************************************************************************** * IPhraseSink interface */ [ uuid(cc906ff0-c058-101a-b554-08002b33b0e6), object, local ] interface IPhraseSink: IUnknown { HRESULT PutSmallPhrase( [size_is(cwcNoun)][in] const WCHAR *pwcNoun, [in] ULONG cwcNoun, [size_is(cwcModifier)][in] const WCHAR *pwcModifier, [in] ULONG cwcModifier, [in] ULONG ulAttachmentType); HRESULT PutPhrase( [size_is(cwcPhrase)][in] const WCHAR *pwcPhrase, [in] ULONG cwcPhrase); } /***************************************************************************** * IWordBreaker interface */ [ uuid(d53552c8-77e3-101a-b552-08002b33b0e6), object, local ] interface IWordBreaker: IUnknown { HRESULT Init( [in] BOOL fQuery, [in] ULONG ulMaxTokenSize, [out] BOOL *pfLicense); HRESULT BreakText( [in] TEXT_SOURCE *pTextSource, [in] IWordSink *pWordSink, [in] IPhraseSink *pPhraseSink); HRESULT ComposePhrase( [size_is(cwcNoun)][in] const WCHAR *pwcNoun, [in] ULONG cwcNoun, [size_is(cwcModifier)][in] const WCHAR *pwcModifier, [in] ULONG cwcModifier, [in] ULONG ulAttachmentType, [size_is(*pcwcPhrase)][out] WCHAR *pwcPhrase, [out][in] ULONG *pcwcPhrase); HRESULT GetLicenseToUse( [string][out] const WCHAR **ppwcsLicense); } ================================================ FILE: wine/windows/initguid.h ================================================ /* * Defines a minimum set of macros create GUID's to keep the size * small * * This file should be included into "only GUID definition *.h" like * shlguid.h * * Copyright (C) 1999 Juergen Schmied * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define INITGUID #include ================================================ FILE: wine/windows/inputscope.idl ================================================ /** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given. */ import "oaidl.idl"; import "ocidl.idl"; typedef enum { IS_DEFAULT = 0, IS_URL = 1, IS_FILE_FULLFILEPATH = 2, IS_FILE_FILENAME = 3, IS_EMAIL_USERNAME = 4, IS_EMAIL_SMTPEMAILADDRESS = 5, IS_LOGINNAME = 6, IS_PERSONALNAME_FULLNAME = 7, IS_PERSONALNAME_PREFIX = 8, IS_PERSONALNAME_GIVENNAME = 9, IS_PERSONALNAME_MIDDLENAME = 10, IS_PERSONALNAME_SURNAME = 11, IS_PERSONALNAME_SUFFIX = 12, IS_ADDRESS_FULLPOSTALADDRESS = 13, IS_ADDRESS_POSTALCODE = 14, IS_ADDRESS_STREET = 15, IS_ADDRESS_STATEORPROVINCE = 16, IS_ADDRESS_CITY = 17, IS_ADDRESS_COUNTRYNAME = 18, IS_ADDRESS_COUNTRYSHORTNAME = 19, IS_CURRENCY_AMOUNTANDSYMBOL = 20, IS_CURRENCY_AMOUNT = 21, IS_DATE_FULLDATE = 22, IS_DATE_MONTH = 23, IS_DATE_DAY = 24, IS_DATE_YEAR = 25, IS_DATE_MONTHNAME = 26, IS_DATE_DAYNAME = 27, IS_DIGITS = 28, IS_NUMBER = 29, IS_ONECHAR = 30, IS_PASSWORD = 31, IS_TELEPHONE_FULLTELEPHONENUMBER = 32, IS_TELEPHONE_COUNTRYCODE = 33, IS_TELEPHONE_AREACODE = 34, IS_TELEPHONE_LOCALNUMBER = 35, IS_TIME_FULLTIME = 36, IS_TIME_HOUR = 37, IS_TIME_MINORSEC = 38, IS_NUMBER_FULLWIDTH = 39, IS_ALPHANUMERIC_HALFWIDTH = 40, IS_ALPHANUMERIC_FULLWIDTH = 41, IS_CURRENCY_CHINESE = 42, IS_BOPOMOFO = 43, IS_HIRAGANA = 44, IS_KATAKANA_HALFWIDTH = 45, IS_KATAKANA_FULLWIDTH = 46, IS_HANJA = 47, IS_HANGUL_HALFWIDTH = 48, IS_HANGUL_FULLWIDTH = 49, IS_SEARCH = 50, IS_FORMULA = 51, IS_SEARCH_INCREMENTAL = 52, IS_CHINESE_HALFWIDTH = 53, IS_CHINESE_FULLWIDTH = 54, IS_NATIVE_SCRIPT = 55, IS_PHRASELIST = -1, IS_REGULAREXPRESSION = -2, IS_SRGS = -3, IS_XML = -4, IS_ENUMSTRING = -5 } InputScope; cpp_quote("HRESULT WINAPI SetInputScope(HWND hwnd,InputScope inputscope);") cpp_quote("HRESULT WINAPI SetInputScopes(HWND hwnd,const InputScope *pInputScopes,UINT cInputScopes,WCHAR **ppszPhraseList,UINT cPhrases,WCHAR *pszRegExp,WCHAR *pszSRGS);") cpp_quote("HRESULT WINAPI SetInputScopeXML(HWND hwnd,WCHAR *pszXML);") cpp_quote("DEFINE_GUID(GUID_PROP_INPUTSCOPE,0x1713dd5a,0x68e7,0x4a5b,0x9a,0xf6,0x59,0x2a,0x59,0x5c,0x77,0x8d);") [ object, uuid(fde1eaee-6924-4cdf-91e7-da38cff5559d), pointer_default(unique) ] interface ITfInputScope : IUnknown { HRESULT GetInputScopes([out, size_is(,*pcCount)] InputScope **pprgInputScopes, [out] UINT *pcCount); HRESULT GetPhrase([out, size_is(,*pcCount)] BSTR **ppbstrPhrases, [out] UINT *pcCount); HRESULT GetRegularExpression([out] BSTR *pbstrRegExp); HRESULT GetSRGS([out] BSTR *pbstrSRGS); HRESULT GetXML([out] BSTR *pbstrXML); } ================================================ FILE: wine/windows/inseng.idl ================================================ /* * Copyright 2015 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WIDL__ #define threading(model) #endif cpp_quote("#if 0") import "unknwn.idl"; cpp_quote("#endif") interface IStream; /* FIXME: Add full declarations. */ interface ICifComponent; interface IEnumCifComponents; interface ICifGroup; interface IEnumCifGroups; interface ICifMode; interface IEnumCifModes; typedef struct { DWORD cbSize; DWORD dwInstallSize; DWORD dwWinDriveSize; DWORD dwDownloadSize; DWORD dwDependancySize; DWORD dwInstallDriveReq; DWORD dwWinDriveReq; DWORD dwDownloadDriveReq; char chWinDrive; char chInstallDrive; char chDownloadDrive; DWORD dwTotalDownloadSize; } COMPONENT_SIZES; [ uuid(6e449688-c509-11cf-aafa-00aa00b6015c), local ] interface ICifFile : IUnknown { HRESULT EnumComponents(IEnumCifComponents **enum_components, DWORD filter, void *pv); HRESULT FindComponent(const char *id, ICifComponent **p); HRESULT EnumGroups(IEnumCifGroups **enum_groups, DWORD filter, void *pv); HRESULT FindGroup(const char *id, ICifGroup **p); HRESULT EnumModes(IEnumCifModes **cuf_modes, DWORD filter, void *pv); HRESULT FindMode(const char *id, ICifMode **p); HRESULT GetDescription(char *desc, DWORD size); HRESULT GetDetDlls(char **dlls, DWORD size); } [ uuid(6e449685-c509-11cf-aafa-00aa00b6015c), local ] interface IInstallEngineCallback : IUnknown { HRESULT OnEngineStatusChange(DWORD status, DWORD substatus); HRESULT OnStartInstall(DWORD dl_size, DWORD install_size); HRESULT OnStartComponent(const char *id, DWORD dl_size, DWORD install_size, const char *string); HRESULT OnComponentProgress(const char *id, DWORD phrase, const char *string, const char *msg_string, ULONG progress, ULONG max); HRESULT OnStopComponent(const char *id, HRESULT error, DWORD phrase, const char *string, DWORD status); HRESULT OnStopInstall(HRESULT error, const char *error_string, DWORD status); HRESULT OnEngineProblem(DWORD problem, LPDWORD action); } [ uuid(6e449684-c509-11cf-aafa-00aa00b6015c), local ] interface IInstallEngine : IUnknown { HRESULT GetEngineStatus(DWORD *status); HRESULT SetCifFile(const char *cab_name, const char *cif_name); HRESULT DownloadComponents(DWORD flags); HRESULT InstallComponents(DWORD flags); HRESULT EnumInstallIDs(UINT index, char **id); HRESULT EnumDownloadIDs(UINT index, char **id); HRESULT IsComponentInstalled(const char *id, DWORD *status); HRESULT RegisterInstallEngineCallback(IInstallEngineCallback *callback); HRESULT UnregisterInstallEngineCallback(); HRESULT SetAction(const char *id, DWORD action, DWORD priority); HRESULT GetSizes(const char *id, COMPONENT_SIZES *sizes); HRESULT LaunchExtraCommand(const char *inf_name, const char *section); HRESULT GetDisplayName(const char *id, const char *name); HRESULT SetBaseUrl(const char *base_name); HRESULT SetDownloadDir(const char *download_dir); HRESULT SetInstallDrive(char drive); HRESULT SetInstallOptions(DWORD flags); HRESULT SetHWND(HWND hwnd); HRESULT SetIStream(IStream *stream); HRESULT Abort(DWORD flags); HRESULT Suspend(); HRESULT Resume(); } [ uuid(6e449689-c509-11cf-aafa-00aa00b6015c), local ] interface IInstallEngine2 : IInstallEngine { HRESULT SetLocalCif(const char *cif); HRESULT GetICifFile(ICifFile **cif_file); } [ helpstring("Microsoft Active Setup Engine"), threading(apartment), uuid(6e449686-c509-11cf-aafa-00aa00b6015c) ] coclass InstallEngine { } [ helpstring("Download Site Manager"), threading(apartment), uuid(bfc880f1-7484-11d0-8309-00aa00b6015c) ] coclass DownloadSiteMgr { } ================================================ FILE: wine/windows/inspectable.idl ================================================ /* * Copyright 2015 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; import "unknwn.idl"; import "hstring.idl"; typedef [v1_enum] enum TrustLevel { BaseTrust, PartialTrust, FullTrust } TrustLevel; [ object, uuid(af86e2e0-b12d-4c6a-9c5a-d7aa65101e90), pointer_default(unique) ] interface IInspectable : IUnknown { HRESULT GetIids([out] ULONG *iidCount, [out, size_is(,*iidCount)] IID **iids); HRESULT GetRuntimeClassName([out] HSTRING *className); HRESULT GetTrustLevel([out] TrustLevel *trustLevel); } typedef [unique] IInspectable *LPINSPECTABLE; ================================================ FILE: wine/windows/interactioncontext.h ================================================ /* * Copyright 2018 Józef Kucia * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef INTERACTION_CONTEXT_H #define INTERACTION_CONTEXT_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ DECLARE_HANDLE(HINTERACTIONCONTEXT); typedef enum INTERACTION_CONTEXT_PROPERTY { INTERACTION_CONTEXT_PROPERTY_MEASUREMENT_UNITS = 1, INTERACTION_CONTEXT_PROPERTY_INTERACTION_UI_FEEDBACK = 2, INTERACTION_CONTEXT_PROPERTY_FILTER_POINTERS = 3, INTERACTION_CONTEXT_PROPERTY_MAX = 0xffffffff, } INTERACTION_CONTEXT_PROPERTY; typedef enum INTERACTION_ID { INTERACTION_ID_NONE = 0, INTERACTION_ID_MANIPULATION = 1, INTERACTION_ID_TAP = 2, INTERACTION_ID_SECONDARY_TAP = 3, INTERACTION_ID_HOLD = 4, INTERACTION_ID_DRAG = 5, INTERACTION_ID_CROSS_SLIDE = 6, INTERACTION_ID_MAX = 0xffffffff, } INTERACTION_ID; typedef enum INTERACTION_FLAGS { INTERACTION_FLAG_NONE = 0x00000000, INTERACTION_FLAG_BEGIN = 0x00000001, INTERACTION_FLAG_END = 0x00000002, INTERACTION_FLAG_CANCEL = 0x00000004, INTERACTION_FLAG_INERTIA = 0x00000008, INTERACTION_FLAG_MAX = 0xffffffff, } INTERACTION_FLAGS; typedef enum INTERACTION_CONFIGURATION_FLAGS { INTERACTION_CONFIGURATION_FLAG_NONE = 0x00000000, INTERACTION_CONFIGURATION_FLAG_MANIPULATION = 0x00000001, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_X = 0x00000002, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_Y = 0x00000004, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION = 0x00000008, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING = 0x00000010, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_INERTIA = 0x00000020, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION_INERTIA = 0x00000040, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING_INERTIA = 0x00000080, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_RAILS_X = 0x00000100, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_RAILS_Y = 0x00000200, INTERACTION_CONFIGURATION_FLAG_MANIPULATION_EXACT = 0x00000400, INTERACTION_CONFIGURATION_FLAG_TAP = 0x00000001, INTERACTION_CONFIGURATION_FLAG_TAP_DOUBLE = 0x00000002, INTERACTION_CONFIGURATION_FLAG_SECONDARY_TAP = 0x00000001, INTERACTION_CONFIGURATION_FLAG_HOLD = 0x00000001, INTERACTION_CONFIGURATION_FLAG_HOLD_MOUSE = 0x00000002, INTERACTION_CONFIGURATION_FLAG_DRAG = 0x00000001, INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE = 0x00000001, INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_HORIZONTAL = 0x00000002, INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_SELECT = 0x00000004, INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_SPEED_BUMP = 0x00000008, INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_REARRANGE = 0x00000010, INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_EXACT = 0x00000020, INTERACTION_CONFIGURATION_FLAG_MAX = 0xffffffff, } INTERACTION_CONFIGURATION_FLAGS; typedef struct INTERACTION_CONTEXT_CONFIGURATION { INTERACTION_ID interactionId; INTERACTION_CONFIGURATION_FLAGS enable; } INTERACTION_CONTEXT_CONFIGURATION; typedef struct MANIPULATION_TRANSFORM { float translationX; float translationY; float scale; float expansion; float rotation; } MANIPULATION_TRANSFORM; typedef struct MANIPULATION_VELOCITY { float velocityX; float velocityY; float velocityExapnsion; float velocityAngular; } MANIPULATION_VELOCITY; typedef enum MANIPULATION_RAILS_STATE { MANIPULATION_RAILS_STATE_UNDECIDED = 0, MANIPULATION_RAILS_STATE_FREE = 1, MANIPULATION_RAILS_STATE_RAILED = 2, MANIPULATION_RAILS_STATE_MAX = 0xffffffff, } MANIPULATION_RAILS_STATE; typedef struct INTERACTION_ARGUMENTS_MANIPULATION { MANIPULATION_TRANSFORM delta; MANIPULATION_TRANSFORM cumulative; MANIPULATION_VELOCITY veolcity; MANIPULATION_RAILS_STATE railsState; } INTERACTION_ARGUMENTS_MANIPULATION; typedef struct INTERACTION_ARGUMENTS_TAP { UINT32 count; } INTERACTION_ARGUMENTS_TAP; typedef enum CROSS_SLIDE_FLAGS { CROSS_SLIDE_FLAGS_NONE = 0x00000000, CROSS_SLIDE_FLAGS_SELECT = 0x00000001, CROSS_SLIDE_FLAGS_SPEED_BUMP = 0x00000002, CROSS_SLIDE_FLAGS_REARRANGE = 0x00000004, CROSS_SLIDE_FLAGS_MAX = 0xffffffff, } CROSS_SLIDE_FLAGS; typedef struct INTERACTION_ARGUMENTS_CROSS_SLIDE { CROSS_SLIDE_FLAGS flags; } INTERACTION_ARGUMENTS_CROSS_SLIDE; typedef struct INTERACTION_CONTEXT_OUTPUT { INTERACTION_ID interactionId; INTERACTION_FLAGS interactionFlags; POINTER_INPUT_TYPE inputType; float x; float y; union { INTERACTION_ARGUMENTS_MANIPULATION manipulation; INTERACTION_ARGUMENTS_TAP tap; INTERACTION_ARGUMENTS_CROSS_SLIDE crossSlide; } arguments; } INTERACTION_CONTEXT_OUTPUT; typedef void (CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK)(void *data, const INTERACTION_CONTEXT_OUTPUT *output); HRESULT WINAPI CreateInteractionContext(HINTERACTIONCONTEXT *context); HRESULT WINAPI DestroyInteractionContext(HINTERACTIONCONTEXT context); HRESULT WINAPI ProcessInertiaInteractionContext(HINTERACTIONCONTEXT context); HRESULT WINAPI RegisterOutputCallbackInteractionContext(HINTERACTIONCONTEXT context, INTERACTION_CONTEXT_OUTPUT_CALLBACK callback, void *data); HRESULT WINAPI GetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT context, UINT32 count, INTERACTION_CONTEXT_CONFIGURATION *configuration); HRESULT WINAPI SetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT context, UINT32 count, const INTERACTION_CONTEXT_CONFIGURATION *configuration); HRESULT WINAPI GetPropertyInteractionContext(HINTERACTIONCONTEXT context, INTERACTION_CONTEXT_PROPERTY proerty, UINT32 *value); HRESULT WINAPI SetPropertyInteractionContext(HINTERACTIONCONTEXT context, INTERACTION_CONTEXT_PROPERTY property, UINT32 value); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif ================================================ FILE: wine/windows/intshcut.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_INTSHCUT_H #define __WINE_INTSHCUT_H #include #define INTSHCUTAPI #ifdef __cplusplus extern "C" { #endif #define E_FLAGS MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1000) #define IS_E_EXEC_FAILED MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x2002) #define URL_E_INVALID_SYNTAX MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1001) #define URL_E_UNREGISTERED_PROTOCOL MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1002) typedef enum iurl_seturl_flags { IURL_SETURL_FL_GUESS_PROTOCOL=1, IURL_SETURL_FL_USE_DEFAULT_PROTOCOL, ALL_IURL_SETURL_FLAGS=(IURL_SETURL_FL_GUESS_PROTOCOL|IURL_SETURL_FL_USE_DEFAULT_PROTOCOL) } IURL_SETURL_FLAGS; typedef enum iurl_invokecommand_flags { IURL_INVOKECOMMAND_FL_ALLOW_UI=1, IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB, ALL_IURL_INVOKECOMMAND_FLAGS=(IURL_INVOKECOMMAND_FL_ALLOW_UI|IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB) } IURL_INVOKECOMMAND_FLAGS; typedef struct urlinvokecommandinfoA { DWORD dwcbSize; DWORD dwFlags; HWND hwndParent; LPCSTR pcszVerb; } URLINVOKECOMMANDINFOA, *PURLINVOKECOMMANDINFOA; typedef const URLINVOKECOMMANDINFOA CURLINVOKECOMMANDINFOA; typedef const URLINVOKECOMMANDINFOA *PCURLINVOKECOMMANDINFOA; typedef struct urlinvokecommandinfoW { DWORD dwcbSize; DWORD dwFlags; HWND hwndParent; LPCWSTR pcszVerb; } URLINVOKECOMMANDINFOW, *PURLINVOKECOMMANDINFOW; typedef const URLINVOKECOMMANDINFOW CURLINVOKECOMMANDINFOW; typedef const URLINVOKECOMMANDINFOW *PCURLINVOKECOMMANDINFOW; #define INTERFACE IUniformResourceLocatorA DECLARE_INTERFACE_(IUniformResourceLocatorA,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, VOID **ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IUniformResourceLocatorA methods ***/ STDMETHOD(SetURL)(THIS_ LPCSTR pcszURL, DWORD dwInFlags) PURE; STDMETHOD(GetURL)(THIS_ LPSTR *ppszURL) PURE; STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFOA pURLCommandInfo) PURE; }; #undef INTERFACE #define INTERFACE IUniformResourceLocatorW DECLARE_INTERFACE_(IUniformResourceLocatorW,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, VOID **ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IUniformResourceLocatorW methods ***/ STDMETHOD(SetURL)(THIS_ LPCWSTR pcszURL, DWORD dwInFlags) PURE; STDMETHOD(GetURL)(THIS_ LPWSTR *ppszURL) PURE; STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFOW pURLCommandInfo) PURE; }; #undef INTERFACE DECL_WINELIB_TYPE_AW(URLINVOKECOMMANDINFO) DECL_WINELIB_TYPE_AW(PURLINVOKECOMMANDINFO) DECL_WINELIB_TYPE_AW(CURLINVOKECOMMANDINFO) DECL_WINELIB_TYPE_AW(PCURLINVOKECOMMANDINFO) typedef enum translateurl_in_flags { TRANSLATEURL_FL_GUESS_PROTOCOL=1, TRANSLATEURL_FL_USE_DEFAULT_PROTOCOL } TRANSLATEURL_IN_FLAGS; HRESULT WINAPI TranslateURLA(LPCSTR, DWORD, LPSTR *); HRESULT WINAPI TranslateURLW(LPCWSTR, DWORD, LPWSTR *); #define TranslateURL WINELIB_NAME_AW(TranslateURL) BOOL WINAPI InetIsOffline(DWORD); #ifdef __cplusplus } #endif #endif /* __WINE_INTSHCUT_H */ ================================================ FILE: wine/windows/ipexport.h ================================================ /* * Defines the types and macros used by the ICMP API, see icmpapi.h. * * Copyright (C) 1999 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_IPEXPORT_H #define __WINE_IPEXPORT_H #include #include typedef ULONG IPAddr; typedef ULONG IPMask; typedef ULONG IP_STATUS; struct ip_option_information { unsigned char Ttl; unsigned char Tos; unsigned char Flags; unsigned char OptionsSize; unsigned char* OptionsData; }; #define IP_FLAG_DF 0x2 #define IP_OPT_EOL 0 #define IP_OPT_NOP 1 #define IP_OPT_SECURITY 0x82 #define IP_OPT_LSRR 0x83 #define IP_OPT_SSRR 0x89 #define IP_OPT_RR 0x7 #define IP_OPT_TS 0x44 #define IP_OPT_SID 0x88 #define MAX_OPT_SIZE 40 struct icmp_echo_reply { IPAddr Address; ULONG Status; ULONG RoundTripTime; unsigned short DataSize; unsigned short Reserved; void* Data; struct ip_option_information Options; }; typedef struct ip_option_information IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION; typedef struct icmp_echo_reply ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY; #define IP_STATUS_BASE 11000 #define IP_SUCCESS 0 #define IP_BUF_TOO_SMALL (IP_STATUS_BASE + 1) #define IP_DEST_NET_UNREACHABLE (IP_STATUS_BASE + 2) #define IP_DEST_HOST_UNREACHABLE (IP_STATUS_BASE + 3) #define IP_DEST_PROT_UNREACHABLE (IP_STATUS_BASE + 4) #define IP_DEST_PORT_UNREACHABLE (IP_STATUS_BASE + 5) #define IP_NO_RESOURCES (IP_STATUS_BASE + 6) #define IP_BAD_OPTION (IP_STATUS_BASE + 7) #define IP_HW_ERROR (IP_STATUS_BASE + 8) #define IP_PACKET_TOO_BIG (IP_STATUS_BASE + 9) #define IP_REQ_TIMED_OUT (IP_STATUS_BASE + 10) #define IP_BAD_REQ (IP_STATUS_BASE + 11) #define IP_BAD_ROUTE (IP_STATUS_BASE + 12) #define IP_TTL_EXPIRED_TRANSIT (IP_STATUS_BASE + 13) #define IP_TTL_EXPIRED_REASSEM (IP_STATUS_BASE + 14) #define IP_PARAM_PROBLEM (IP_STATUS_BASE + 15) #define IP_SOURCE_QUENCH (IP_STATUS_BASE + 16) #define IP_OPTION_TOO_BIG (IP_STATUS_BASE + 17) #define IP_BAD_DESTINATION (IP_STATUS_BASE + 18) #define IP_ADDR_DELETED (IP_STATUS_BASE + 19) #define IP_SPEC_MTU_CHANGE (IP_STATUS_BASE + 20) #define IP_MTU_CHANGE (IP_STATUS_BASE + 21) #define IP_UNLOAD (IP_STATUS_BASE + 22) #define IP_GENERAL_FAILURE (IP_STATUS_BASE + 50) #define MAX_IP_STATUS IP_GENERAL_FAILURE #define IP_PENDING (IP_STATUS_BASE + 255) #define MAX_ADAPTER_NAME 128 typedef struct _IP_ADAPTER_INDEX_MAP { ULONG Index; WCHAR Name[MAX_ADAPTER_NAME]; } IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP; typedef struct _IP_INTERFACE_INFO { LONG NumAdapters; IP_ADAPTER_INDEX_MAP Adapter[1]; } IP_INTERFACE_INFO,*PIP_INTERFACE_INFO; typedef struct _IP_UNIDIRECTIONAL_ADAPTER_ADDRESS { ULONG NumAdapters; IPAddr Address[1]; } IP_UNIDIRECTIONAL_ADAPTER_ADDRESS, *PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS; #endif /* __WINE_IPEXPORT_H */ ================================================ FILE: wine/windows/iphlpapi.h ================================================ /* WINE iphlpapi.h * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WINE_IPHLPAPI_H__ #define WINE_IPHLPAPI_H__ #ifdef __cplusplus extern "C" { #endif #include #include #include DWORD WINAPI GetExtendedTcpTable(PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved); DWORD WINAPI GetExtendedUdpTable(PVOID pUdpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, UDP_TABLE_CLASS TableClass, ULONG Reserved); DWORD WINAPI GetNumberOfInterfaces(PDWORD pdwNumIf); DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow); DWORD WINAPI GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder); DWORD WINAPI GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize, BOOL bOrder); DWORD WINAPI GetIpNetTable(PMIB_IPNETTABLE pIpNetTable, PULONG pdwSize, BOOL bOrder); DWORD WINAPI GetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable, PULONG pdwSize, BOOL bOrder); DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder); DWORD WINAPI GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder); DWORD WINAPI GetUdp6Table(PMIB_UDP6TABLE pUdpTable, PDWORD pdwSize, BOOL bOrder); DWORD WINAPI GetIpStatistics(PMIB_IPSTATS pStats); DWORD WINAPI GetIpStatisticsEx(PMIB_IPSTATS pStats, DWORD dwFamily); DWORD WINAPI GetIcmpStatistics(PMIB_ICMP pStats); DWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS pStats); DWORD WINAPI GetTcpStatisticsEx(PMIB_TCPSTATS pStats, DWORD dwFamily); DWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS pStats); DWORD WINAPI GetUdpStatisticsEx(PMIB_UDPSTATS pStats, DWORD dwFamily); DWORD WINAPI SetIfEntry(PMIB_IFROW pIfRow); DWORD WINAPI CreateIpForwardEntry(PMIB_IPFORWARDROW pRoute); DWORD WINAPI SetIpForwardEntry(PMIB_IPFORWARDROW pRoute); DWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute); DWORD WINAPI SetIpStatistics(PMIB_IPSTATS pIpStats); DWORD WINAPI SetIpTTL(UINT nTTL); DWORD WINAPI CreateIpNetEntry(PMIB_IPNETROW pArpEntry); DWORD WINAPI SetIpNetEntry(PMIB_IPNETROW pArpEntry); DWORD WINAPI DeleteIpNetEntry(PMIB_IPNETROW pArpEntry); DWORD WINAPI FlushIpNetTable(DWORD dwIfIndex); DWORD WINAPI CreateProxyArpEntry(DWORD dwAddress, DWORD dwMask, DWORD dwIfIndex); DWORD WINAPI DeleteProxyArpEntry(DWORD dwAddress, DWORD dwMask, DWORD dwIfIndex); DWORD WINAPI SetTcpEntry(PMIB_TCPROW pTcpRow); DWORD WINAPI GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen); DWORD WINAPI GetUniDirectionalAdapterInfo( PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo, PULONG dwOutBufLen); DWORD WINAPI GetBestInterface(IPAddr dwDestAddr, PDWORD pdwBestIfIndex); #ifdef __WINE_WINSOCKAPI_STDLIB_H DWORD WINAPI GetBestInterfaceEx( #ifdef USE_WS_PREFIX struct WS_sockaddr *pDestAddr, #else struct sockaddr *pDestAddr, #endif PDWORD pdwBestIfIndex); #endif DWORD WINAPI GetBestRoute(DWORD dwDestAddr, DWORD dwSourceAddr, PMIB_IPFORWARDROW pBestRoute); DWORD WINAPI NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped); DWORD WINAPI NotifyRouteChange(PHANDLE Handle, LPOVERLAPPED overlapped); BOOL WINAPI CancelIPChangeNotify(LPOVERLAPPED overlapped); DWORD WINAPI GetAdapterIndex(IN LPWSTR AdapterName, OUT PULONG IfIndex); DWORD WINAPI AddIPAddress(IPAddr Address, IPMask IpMask, DWORD IfIndex, PULONG NTEContext, PULONG NTEInstance); DWORD WINAPI DeleteIPAddress(ULONG NTEContext); DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen); DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen); DWORD WINAPI GetPerAdapterInfo(ULONG IfIndex, PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen); DWORD WINAPI IpReleaseAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo); DWORD WINAPI IpRenewAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo); DWORD WINAPI SendARP(IPAddr DestIP, IPAddr SrcIP, PULONG pMacAddr, PULONG PhyAddrLen); BOOL WINAPI GetRTTAndHopCount(IPAddr DestIpAddress, PULONG HopCount, ULONG MaxHops, PULONG RTT); DWORD WINAPI GetFriendlyIfIndex(DWORD IfIndex); DWORD WINAPI EnableRouter(HANDLE* pHandle, OVERLAPPED* pOverlapped); DWORD WINAPI UnenableRouter(OVERLAPPED* pOverlapped, LPDWORD lpdwEnableCount); #ifdef _WINSOCK2API_ ULONG WINAPI GetAdaptersAddresses(ULONG family, ULONG flags, PVOID reserved, PIP_ADAPTER_ADDRESSES aa, PULONG buflen); #endif DWORD WINAPI AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable, BOOL bOrder, HANDLE heap, DWORD flags); DWORD WINAPI AllocateAndGetTcpTableFromStack(PMIB_TCPTABLE *ppTcpTable, BOOL bOrder, HANDLE heap, DWORD flags); DWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable, BOOL bOrder, HANDLE heap, DWORD flags); DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForwardTable, BOOL bOrder, HANDLE heap, DWORD flags); #ifdef __cplusplus } #endif #endif /* WINE_IPHLPAPI_H__ */ ================================================ FILE: wine/windows/ipifcons.h ================================================ /* WINE ipifcons.h * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WINE_IPIFCONS_H__ #define WINE_IPIFCONS_H__ #define IF_TYPE_OTHER 1 #define IF_TYPE_REGULAR_1822 2 #define IF_TYPE_HDH_1822 3 #define IF_TYPE_DDN_X25 4 #define IF_TYPE_RFC877_X25 5 #define IF_TYPE_ETHERNET_CSMACD 6 #define IF_TYPE_IS088023_CSMACD 7 #define IF_TYPE_ISO88024_TOKENBUS 8 #define IF_TYPE_ISO88025_TOKENRING 9 #define IF_TYPE_ISO88026_MAN 10 #define IF_TYPE_STARLAN 11 #define IF_TYPE_PROTEON_10MBIT 12 #define IF_TYPE_PROTEON_80MBIT 13 #define IF_TYPE_HYPERCHANNEL 14 #define IF_TYPE_FDDI 15 #define IF_TYPE_LAP_B 16 #define IF_TYPE_SDLC 17 #define IF_TYPE_DS1 18 #define IF_TYPE_E1 19 #define IF_TYPE_BASIC_ISDN 20 #define IF_TYPE_PRIMARY_ISDN 21 #define IF_TYPE_PROP_POINT2POINT_SERIAL 22 #define IF_TYPE_PPP 23 #define IF_TYPE_SOFTWARE_LOOPBACK 24 #define IF_TYPE_EON 25 #define IF_TYPE_ETHERNET_3MBIT 26 #define IF_TYPE_NSIP 27 #define IF_TYPE_SLIP 28 #define IF_TYPE_ULTRA 29 #define IF_TYPE_DS3 30 #define IF_TYPE_SIP 31 #define IF_TYPE_FRAMERELAY 32 #define IF_TYPE_RS232 33 #define IF_TYPE_PARA 34 #define IF_TYPE_ARCNET 35 #define IF_TYPE_ARCNET_PLUS 36 #define IF_TYPE_ATM 37 #define IF_TYPE_MIO_X25 38 #define IF_TYPE_SONET 39 #define IF_TYPE_X25_PLE 40 #define IF_TYPE_ISO88022_LLC 41 #define IF_TYPE_LOCALTALK 42 #define IF_TYPE_SMDS_DXI 43 #define IF_TYPE_FRAMERELAY_SERVICE 44 #define IF_TYPE_V35 45 #define IF_TYPE_HSSI 46 #define IF_TYPE_HIPPI 47 #define IF_TYPE_MODEM 48 #define IF_TYPE_AAL5 49 #define IF_TYPE_SONET_PATH 50 #define IF_TYPE_SONET_VT 51 #define IF_TYPE_SMDS_ICIP 52 #define IF_TYPE_PROP_VIRTUAL 53 #define IF_TYPE_PROP_MULTIPLEXOR 54 #define IF_TYPE_IEEE80212 55 #define IF_TYPE_FIBRECHANNEL 56 #define IF_TYPE_HIPPIINTERFACE 57 #define IF_TYPE_FRAMERELAY_INTERCONNECT 58 #define IF_TYPE_AFLANE_8023 59 #define IF_TYPE_AFLANE_8025 60 #define IF_TYPE_CCTEMUL 61 #define IF_TYPE_FASTETHER 62 #define IF_TYPE_ISDN 63 #define IF_TYPE_V11 64 #define IF_TYPE_V36 65 #define IF_TYPE_G703_64K 66 #define IF_TYPE_G703_2MB 67 #define IF_TYPE_QLLC 68 #define IF_TYPE_FASTETHER_FX 69 #define IF_TYPE_CHANNEL 70 #define IF_TYPE_IEEE80211 71 #define IF_TYPE_IBM370PARCHAN 72 #define IF_TYPE_ESCON 73 #define IF_TYPE_DLSW 74 #define IF_TYPE_ISDN_S 75 #define IF_TYPE_ISDN_U 76 #define IF_TYPE_LAP_D 77 #define IF_TYPE_IPSWITCH 78 #define IF_TYPE_RSRB 79 #define IF_TYPE_ATM_LOGICAL 80 #define IF_TYPE_DS0 81 #define IF_TYPE_DS0_BUNDLE 82 #define IF_TYPE_BSC 83 #define IF_TYPE_ASYNC 84 #define IF_TYPE_CNR 85 #define IF_TYPE_ISO88025R_DTR 86 #define IF_TYPE_EPLRS 87 #define IF_TYPE_ARAP 88 #define IF_TYPE_PROP_CNLS 89 #define IF_TYPE_HOSTPAD 90 #define IF_TYPE_TERMPAD 91 #define IF_TYPE_FRAMERELAY_MPI 92 #define IF_TYPE_X213 93 #define IF_TYPE_ADSL 94 #define IF_TYPE_RADSL 95 #define IF_TYPE_SDSL 96 #define IF_TYPE_VDSL 97 #define IF_TYPE_ISO88025_CRFPRINT 98 #define IF_TYPE_MYRINET 99 #define IF_TYPE_VOICE_EM 100 #define IF_TYPE_VOICE_FXO 101 #define IF_TYPE_VOICE_FXS 102 #define IF_TYPE_VOICE_ENCAP 103 #define IF_TYPE_VOICE_OVERIP 104 #define IF_TYPE_ATM_DXI 105 #define IF_TYPE_ATM_FUNI 106 #define IF_TYPE_ATM_IMA 107 #define IF_TYPE_PPPMULTILINKBUNDLE 108 #define IF_TYPE_IPOVER_CDLC 109 #define IF_TYPE_IPOVER_CLAW 110 #define IF_TYPE_STACKTOSTACK 111 #define IF_TYPE_VIRTUALIPADDRESS 112 #define IF_TYPE_MPC 113 #define IF_TYPE_IPOVER_ATM 114 #define IF_TYPE_ISO88025_FIBER 115 #define IF_TYPE_TDLC 116 #define IF_TYPE_GIGABITETHERNET 117 #define IF_TYPE_HDLC 118 #define IF_TYPE_LAP_F 119 #define IF_TYPE_V37 120 #define IF_TYPE_X25_MLP 121 #define IF_TYPE_X25_HUNTGROUP 122 #define IF_TYPE_TRANSPHDLC 123 #define IF_TYPE_INTERLEAVE 124 #define IF_TYPE_FAST 125 #define IF_TYPE_IP 126 #define IF_TYPE_DOCSCABLE_MACLAYER 127 #define IF_TYPE_DOCSCABLE_DOWNSTREAM 128 #define IF_TYPE_DOCSCABLE_UPSTREAM 129 #define IF_TYPE_A12MPPSWITCH 130 #define IF_TYPE_TUNNEL 131 #define IF_TYPE_COFFEE 132 #define IF_TYPE_CES 133 #define IF_TYPE_ATM_SUBINTERFACE 134 #define IF_TYPE_L2_VLAN 135 #define IF_TYPE_L3_IPVLAN 136 #define IF_TYPE_L3_IPXVLAN 137 #define IF_TYPE_DIGITALPOWERLINE 138 #define IF_TYPE_MEDIAMAILOVERIP 139 #define IF_TYPE_DTM 140 #define IF_TYPE_DCN 141 #define IF_TYPE_IPFORWARD 142 #define IF_TYPE_MSDSL 143 #define IF_TYPE_IEEE1394 144 #define IF_TYPE_IF_GSN 145 #define IF_TYPE_DVBRCC_MACLAYER 146 #define IF_TYPE_DVBRCC_DOWNSTREAM 147 #define IF_TYPE_DVBRCC_UPSTREAM 148 #define IF_TYPE_ATM_VIRTUAL 149 #define IF_TYPE_MPLS_TUNNEL 150 #define IF_TYPE_SRP 151 #define IF_TYPE_VOICEOVERATM 152 #define IF_TYPE_VOICEOVERFRAMERELAY 153 #define IF_TYPE_IDSL 154 #define IF_TYPE_COMPOSITELINK 155 #define IF_TYPE_SS7_SIGLINK 156 #define IF_TYPE_PROP_WIRELESS_P2P 157 #define IF_TYPE_FR_FORWARD 158 #define IF_TYPE_RFC1483 159 #define IF_TYPE_USB 160 #define IF_TYPE_IEEE8023AD_LAG 161 #define IF_TYPE_BGP_POLICY_ACCOUNTING 162 #define IF_TYPE_FRF16_MFR_BUNDLE 163 #define IF_TYPE_H323_GATEKEEPER 164 #define IF_TYPE_H323_PROXY 165 #define IF_TYPE_MPLS 166 #define IF_TYPE_MF_SIGLINK 167 #define IF_TYPE_HDSL2 168 #define IF_TYPE_SHDSL 169 #define IF_TYPE_DS1_FDL 170 #define IF_TYPE_POS 171 #define IF_TYPE_DVB_ASI_IN 172 #define IF_TYPE_DVB_ASI_OUT 173 #define IF_TYPE_PLC 175 #define IF_TYPE_NFAS 175 #define IF_TYPE_TR008 176 #define IF_TYPE_GR303_RDT 177 #define IF_TYPE_GR303_IDT 178 #define IF_TYPE_ISUP 179 #define IF_TYPE_PROP_DOCS_WIRELESS_MACLAYER 180 #define IF_TYPE_PROP_DOCS_WIRELESS_DOWNSTREAM 181 #define IF_TYPE_PROP_DOCS_WIRELESS_UPSTREAM 182 #define IF_TYPE_HIPERLAN2 183 #define IF_TYPE_PROP_BWA_P2MP 184 #define IF_TYPE_SONET_OVERHEAD_CHANNEL 185 #define IF_TYPE_DIGITAL_WRAPPER_OVERHEAD_CHANNEL 186 #define IF_TYPE_AAL2 187 #define IF_TYPE_RADIO_MAC 188 #define IF_TYPE_ATM_RADIO 189 #define IF_TYPE_IMT 190 #define IF_TYPE_MVL 191 #define IF_TYPE_REACH_DSL 192 #define IF_TYPE_FR_DLCI_ENDPT 193 #define IF_TYPE_ATM_VCI_ENDPT 194 #define IF_TYPE_OPTICAL_CHANNEL 195 #define IF_TYPE_OPTICAL_TRANSPORT 196 #define IF_TYPE_IEEE80216_WANN 237 #define IF_TYPE_WWANPP 243 #define IF_TYPE_WWANPP2 244 #define MAX_IF_TYPE 244 #define MIB_IF_TYPE_OTHER 1 #define MIB_IF_TYPE_ETHERNET 6 #define MIB_IF_TYPE_TOKENRING 9 #define MIB_IF_TYPE_FDDI 15 #define MIB_IF_TYPE_PPP 23 #define MIB_IF_TYPE_LOOPBACK 24 #define MIB_IF_TYPE_SLIP 28 typedef ULONG IFTYPE; #define MIB_IF_ADMIN_STATUS_UP 1 #define MIB_IF_ADMIN_STATUS_DOWN 2 #define MIB_IF_ADMIN_STATUS_TESTING 3 typedef enum _INTERNAL_IF_OPER_STATUS { MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0, MIB_IF_OPER_STATUS_UNREACHABLE = 1, MIB_IF_OPER_STATUS_DISCONNECTED = 2, MIB_IF_OPER_STATUS_CONNECTING = 3, MIB_IF_OPER_STATUS_CONNECTED = 4, MIB_IF_OPER_STATUS_OPERATIONAL = 5, } INTERNAL_IF_OPER_STATUS; #endif /* WINE_IPIFCONS_H__ */ ================================================ FILE: wine/windows/ipmib.h ================================================ /* * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_IPMIB_H #define __WINE_IPMIB_H #include #include /* Flags used in the wType field from MIB_IPADDRROW */ #define MIB_IPADDR_PRIMARY 0x0001 #define MIB_IPADDR_DYNAMIC 0x0004 #define MIB_IPADDR_DISCONNECTED 0x0008 #define MIB_IPADDR_DELETED 0x0040 #define MIB_IPADDR_TRANSIENT 0x0080 /* IPADDR table */ typedef struct _MIB_IPADDRROW { DWORD dwAddr; IF_INDEX dwIndex; DWORD dwMask; DWORD dwBCastAddr; DWORD dwReasmSize; unsigned short unused1; unsigned short wType; } MIB_IPADDRROW, *PMIB_IPADDRROW; typedef struct _MIB_IPADDRTABLE { DWORD dwNumEntries; MIB_IPADDRROW table[1]; } MIB_IPADDRTABLE, *PMIB_IPADDRTABLE; /* IPFORWARD table */ typedef struct _MIB_IPFORWARDNUMBER { DWORD dwValue; } MIB_IPFORWARDNUMBER, *PMIB_IPFORWARDNUMBER; typedef enum { MIB_IPROUTE_TYPE_OTHER = 1, MIB_IPROUTE_TYPE_INVALID = 2, MIB_IPROUTE_TYPE_DIRECT = 3, MIB_IPROUTE_TYPE_INDIRECT = 4, } MIB_IPFORWARD_TYPE; typedef NL_ROUTE_PROTOCOL MIB_IPFORWARD_PROTO; typedef struct _MIB_IPFORWARDROW { DWORD dwForwardDest; DWORD dwForwardMask; DWORD dwForwardPolicy; DWORD dwForwardNextHop; IF_INDEX dwForwardIfIndex; union { DWORD dwForwardType; MIB_IPFORWARD_TYPE ForwardType; } DUMMYUNIONNAME1; union { DWORD dwForwardProto; MIB_IPFORWARD_PROTO ForwardProto; } DUMMYUNIONNAME2; DWORD dwForwardAge; DWORD dwForwardNextHopAS; DWORD dwForwardMetric1; DWORD dwForwardMetric2; DWORD dwForwardMetric3; DWORD dwForwardMetric4; DWORD dwForwardMetric5; } MIB_IPFORWARDROW, *PMIB_IPFORWARDROW; typedef struct _MIB_IPFORWARDTABLE { DWORD dwNumEntries; MIB_IPFORWARDROW table[1]; } MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE; /* IPNET table */ typedef enum { MIB_IPNET_TYPE_OTHER = 1, MIB_IPNET_TYPE_INVALID = 2, MIB_IPNET_TYPE_DYNAMIC = 3, MIB_IPNET_TYPE_STATIC = 4, } MIB_IPNET_TYPE; typedef struct _MIB_IPNETROW { DWORD dwIndex; DWORD dwPhysAddrLen; BYTE bPhysAddr[MAXLEN_PHYSADDR]; DWORD dwAddr; union { DWORD dwType; MIB_IPNET_TYPE Type; } DUMMYUNIONNAME; } MIB_IPNETROW, *PMIB_IPNETROW; typedef struct _MIB_IPNETTABLE { DWORD dwNumEntries; MIB_IPNETROW table[1]; } MIB_IPNETTABLE, *PMIB_IPNETTABLE; /* IP statistics */ typedef enum { MIB_IP_FORWARDING = 1, MIB_IP_NOT_FORWARDING = 2, } MIB_IPSTATS_FORWARDING, *PMIB_IPSTATS_FORWARDING; typedef struct _MIB_IPSTATS { union { DWORD dwForwarding; MIB_IPSTATS_FORWARDING Forwarding; } DUMMYUNIONNAME; DWORD dwDefaultTTL; DWORD dwInReceives; DWORD dwInHdrErrors; DWORD dwInAddrErrors; DWORD dwForwDatagrams; DWORD dwInUnknownProtos; DWORD dwInDiscards; DWORD dwInDelivers; DWORD dwOutRequests; DWORD dwRoutingDiscards; DWORD dwOutDiscards; DWORD dwOutNoRoutes; DWORD dwReasmTimeout; DWORD dwReasmReqds; DWORD dwReasmOks; DWORD dwReasmFails; DWORD dwFragOks; DWORD dwFragFails; DWORD dwFragCreates; DWORD dwNumIf; DWORD dwNumAddr; DWORD dwNumRoutes; } MIB_IPSTATS, *PMIB_IPSTATS; /* ICMP statistics */ typedef struct _MIBICMPSTATS { DWORD dwMsgs; DWORD dwErrors; DWORD dwDestUnreachs; DWORD dwTimeExcds; DWORD dwParmProbs; DWORD dwSrcQuenchs; DWORD dwRedirects; DWORD dwEchos; DWORD dwEchoReps; DWORD dwTimestamps; DWORD dwTimestampReps; DWORD dwAddrMasks; DWORD dwAddrMaskReps; } MIBICMPSTATS, *PMIBICMPSTATS; typedef struct _MIBICMPINFO { MIBICMPSTATS icmpInStats; MIBICMPSTATS icmpOutStats; } MIBICMPINFO; typedef struct _MIB_ICMP { MIBICMPINFO stats; } MIB_ICMP, *PMIB_ICMP; typedef enum { ICMP4_ECHO_REPLY = 0, ICMP4_DST_UNREACH = 3, ICMP4_SOURCE_QUENCH = 4, ICMP4_REDIRECT = 5, ICMP4_ECHO_REQUEST = 8, ICMP4_ROUTER_ADVERT = 9, ICMP4_ROUTER_SOLICIT = 10, ICMP4_TIME_EXCEEDED = 11, ICMP4_PARAM_PROB = 12, ICMP4_TIMESTAMP_REQUEST = 13, ICMP4_TIMESTAMP_REPLY = 14, ICMP4_MASK_REQUEST = 17, ICMP4_MASK_REPLY = 18, } ICMP4_TYPE, *PICMP4_TYPE; typedef enum { ICMP6_DST_UNREACH = 1, ICMP6_PACKET_TOO_BIG = 2, ICMP6_TIME_EXCEEDED = 3, ICMP6_PARAM_PROB = 4, ICMP6_ECHO_REQUEST = 128, ICMP6_ECHO_REPLY = 129, ICMP6_MEMBERSHIP_QUERY = 130, ICMP6_MEMBERSHIP_REPORT = 131, ICMP6_MEMBERSHIP_REDUCTION = 132, ND_ROUTER_SOLICIT = 133, ND_ROUTER_ADVERT = 134, ND_NEIGHBOR_SOLICIT = 135, ND_NEIGHBOR_ADVERT = 136, ND_REDIRECT = 137, ICMP6_V2_MEMBERSHIP_REPORT = 143, } ICMP6_TYPE, *PICMP6_TYPE; typedef struct _MIBICMPSTATS_EX { DWORD dwMsgs; DWORD dwErrors; DWORD rgdwTypeCount[256]; } MIBICMPSTATS_EX, *PMIBICMPSTATS_EX; typedef struct _MIB_ICMP_EX { MIBICMPSTATS_EX icmpInStats; MIBICMPSTATS_EX icmpOutStats; } MIB_ICMP_EX, *PMIB_ICMP_EX; #endif /* __WINE_IPMIB_H */ ================================================ FILE: wine/windows/iprtrmib.h ================================================ /* WINE iprtrmib.h * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WINE_IPRTRMIB_H__ #define WINE_IPRTRMIB_H__ #include #include #include #include #include typedef enum _TCP_TABLE_CLASS { TCP_TABLE_BASIC_LISTENER, TCP_TABLE_BASIC_CONNECTIONS, TCP_TABLE_BASIC_ALL, TCP_TABLE_OWNER_PID_LISTENER, TCP_TABLE_OWNER_PID_CONNECTIONS, TCP_TABLE_OWNER_PID_ALL, TCP_TABLE_OWNER_MODULE_LISTENER, TCP_TABLE_OWNER_MODULE_CONNECTIONS, TCP_TABLE_OWNER_MODULE_ALL } TCP_TABLE_CLASS, *PTCP_TABLE_CLASS; typedef enum _UDP_TABLE_CLASS { UDP_TABLE_BASIC, UDP_TABLE_OWNER_PID, UDP_TABLE_OWNER_MODULE } UDP_TABLE_CLASS, *PUDP_TABLE_CLASS; #endif /* WINE_IPRTRMIB_H__ */ ================================================ FILE: wine/windows/iptypes.h ================================================ /* WINE iptypes.h * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WINE_IPTYPES_H_ #define WINE_IPTYPES_H_ #include #include #include #define MAX_ADAPTER_DESCRIPTION_LENGTH 128 #define MAX_ADAPTER_NAME_LENGTH 256 #define MAX_ADAPTER_ADDRESS_LENGTH 8 #define MAX_HOSTNAME_LEN 128 #define MAX_DOMAIN_NAME_LEN 128 #define MAX_SCOPE_ID_LEN 256 #define MAX_DHCPV6_DUID_LENGTH 130 #define MAX_DNS_SUFFIX_STRING_LENGTH 256 #define BROADCAST_NODETYPE 1 #define PEER_TO_PEER_NODETYPE 2 #define MIXED_NODETYPE 4 #define HYBRID_NODETYPE 8 typedef struct { char String[4 * 4]; } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING; typedef struct _IP_ADDR_STRING { struct _IP_ADDR_STRING* Next; IP_ADDRESS_STRING IpAddress; IP_MASK_STRING IpMask; DWORD Context; } IP_ADDR_STRING, *PIP_ADDR_STRING; typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO* Next; DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD Index; UINT Type; UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires; } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; typedef struct _IP_PER_ADAPTER_INFO { UINT AutoconfigEnabled; UINT AutoconfigActive; PIP_ADDR_STRING CurrentDnsServer; IP_ADDR_STRING DnsServerList; } IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO; typedef struct { char HostName[MAX_HOSTNAME_LEN + 4] ; char DomainName[MAX_DOMAIN_NAME_LEN + 4]; PIP_ADDR_STRING CurrentDnsServer; IP_ADDR_STRING DnsServerList; UINT NodeType; char ScopeId[MAX_SCOPE_ID_LEN + 4]; UINT EnableRouting; UINT EnableProxy; UINT EnableDns; } FIXED_INFO, *PFIXED_INFO; typedef NL_PREFIX_ORIGIN IP_PREFIX_ORIGIN; typedef NL_SUFFIX_ORIGIN IP_SUFFIX_ORIGIN; typedef NL_DAD_STATE IP_DAD_STATE; #ifdef _WINSOCK2API_ typedef struct _IP_ADAPTER_UNICAST_ADDRESS_LH { union { struct { ULONG Length; DWORD Flags; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_UNICAST_ADDRESS_LH *Next; SOCKET_ADDRESS Address; IP_PREFIX_ORIGIN PrefixOrigin; IP_SUFFIX_ORIGIN SuffixOrigin; IP_DAD_STATE DadState; ULONG ValidLifetime; ULONG PreferredLifetime; ULONG LeaseLifetime; UINT8 OnLinkPrefixLength; } IP_ADAPTER_UNICAST_ADDRESS_LH, *PIP_ADAPTER_UNICAST_ADDRESS_LH; typedef struct _IP_ADAPTER_UNICAST_ADDRESS_XP { union { struct { ULONG Length; DWORD Flags; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_UNICAST_ADDRESS_XP *Next; SOCKET_ADDRESS Address; IP_PREFIX_ORIGIN PrefixOrigin; IP_SUFFIX_ORIGIN SuffixOrigin; IP_DAD_STATE DadState; ULONG ValidLifetime; ULONG PreferredLifetime; ULONG LeaseLifetime; } IP_ADAPTER_UNICAST_ADDRESS_XP, *PIP_ADAPTER_UNICAST_ADDRESS_XP; typedef IP_ADAPTER_UNICAST_ADDRESS_LH IP_ADAPTER_UNICAST_ADDRESS; typedef IP_ADAPTER_UNICAST_ADDRESS_LH *PIP_ADAPTER_UNICAST_ADDRESS; typedef struct _IP_ADAPTER_ANYCAST_ADDRESS { union { ULONGLONG Alignment; struct { ULONG Length; DWORD Flags; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_ANYCAST_ADDRESS *Next; SOCKET_ADDRESS Address; } IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS; typedef struct _IP_ADAPTER_MULTICAST_ADDRESS { union { ULONGLONG Alignment; struct { ULONG Length; DWORD Flags; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_MULTICAST_ADDRESS *Next; SOCKET_ADDRESS Address; } IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS; typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS { union { ULONGLONG Alignment; struct { ULONG Length; DWORD Reserved; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next; SOCKET_ADDRESS Address; } IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS; typedef struct _IP_ADAPTER_PREFIX { union { ULONGLONG Alignment; struct { ULONG Length; DWORD Flags; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_PREFIX *Next; SOCKET_ADDRESS Address; ULONG PrefixLength; } IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX; typedef struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH { union { ULONGLONG Alignment; struct { ULONG Length; DWORD Reserved; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH *Next; SOCKET_ADDRESS Address; } IP_ADAPTER_WINS_SERVER_ADDRESS_LH, *PIP_ADAPTER_WINS_SERVER_ADDRESS_LH; typedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH IP_ADAPTER_WINS_SERVER_ADDRESS; typedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH *PIP_ADAPTER_WINS_SERVER_ADDRESS; typedef struct _IP_ADAPTER_GATEWAY_ADDRESS_LH { union { ULONGLONG Alignment; struct { ULONG Length; DWORD Reserved; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_GATEWAY_ADDRESS_LH *Next; SOCKET_ADDRESS Address; } IP_ADAPTER_GATEWAY_ADDRESS_LH, *PIP_ADAPTER_GATEWAY_ADDRESS_LH; typedef IP_ADAPTER_GATEWAY_ADDRESS_LH IP_ADAPTER_GATEWAY_ADDRESS; typedef IP_ADAPTER_GATEWAY_ADDRESS_LH *PIP_ADAPTER_GATEWAY_ADDRESS; typedef struct _IP_ADAPTER_DNS_SUFFIX { struct _IP_ADAPTER_DNS_SUFFIX *Next; WCHAR String[MAX_DNS_SUFFIX_STRING_LENGTH]; } IP_ADAPTER_DNS_SUFFIX, *PIP_ADAPTER_DNS_SUFFIX; #define IP_ADAPTER_DDNS_ENABLED 0x1 #define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x2 #define IP_ADAPTER_DHCP_ENABLED 0x4 #define IP_ADAPTER_RECEIVE_ONLY 0x8 #define IP_ADAPTER_NO_MULTICAST 0x10 #define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x20 #define IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED 0x40 #define IP_ADAPTER_IPV4_ENABLED 0x80 #define IP_ADAPTER_IPV6_ENABLED 0x100 #define IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG 0x200 typedef struct _IP_ADAPTER_ADDRESSES_LH { union { ULONGLONG Alignment; struct { ULONG Length; DWORD IfIndex; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_ADDRESSES_LH *Next; PCHAR AdapterName; PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress; PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress; PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress; PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress; PWCHAR DnsSuffix; PWCHAR Description; PWCHAR FriendlyName; BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD PhysicalAddressLength; union { DWORD Flags; struct { DWORD DdnsEnabled : 1; DWORD RegisterAdapterSuffix : 1; DWORD Dhcpv4Enabled : 1; DWORD ReceiveOnly : 1; DWORD NoMulticast : 1; DWORD Ipv6OtherStatefulConfig : 1; DWORD NetbiosOverTcpipEnabled : 1; DWORD Ipv4Enabled : 1; DWORD Ipv6Enabled : 1; DWORD Ipv6ManagedAddressConfigurationSupported : 1; } DUMMYSTRUCTNAME1; } DUMMYUNIONNAME1; DWORD Mtu; DWORD IfType; IF_OPER_STATUS OperStatus; DWORD Ipv6IfIndex; DWORD ZoneIndices[16]; PIP_ADAPTER_PREFIX FirstPrefix; ULONG64 TransmitLinkSpeed; ULONG64 ReceiveLinkSpeed; PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress; PIP_ADAPTER_GATEWAY_ADDRESS_LH FirstGatewayAddress; ULONG Ipv4Metric; ULONG Ipv6Metric; IF_LUID Luid; SOCKET_ADDRESS Dhcpv4Server; NET_IF_COMPARTMENT_ID CompartmentId; NET_IF_NETWORK_GUID NetworkGuid; NET_IF_CONNECTION_TYPE ConnectionType; TUNNEL_TYPE TunnelType; SOCKET_ADDRESS Dhcpv6Server; BYTE Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]; ULONG Dhcpv6ClientDuidLength; ULONG Dhcpv6Iaid; PIP_ADAPTER_DNS_SUFFIX FirstDnsSuffix; } IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH; typedef struct _IP_ADAPTER_ADDRESSES_XP { union { ULONGLONG Alignment; struct { ULONG Length; DWORD IfIndex; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; struct _IP_ADAPTER_ADDRESSES_XP *Next; PCHAR AdapterName; PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress; PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress; PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress; PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress; PWCHAR DnsSuffix; PWCHAR Description; PWCHAR FriendlyName; BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD PhysicalAddressLength; DWORD Flags; DWORD Mtu; DWORD IfType; IF_OPER_STATUS OperStatus; DWORD Ipv6IfIndex; DWORD ZoneIndices[16]; PIP_ADAPTER_PREFIX FirstPrefix; } IP_ADAPTER_ADDRESSES_XP, *PIP_ADAPTER_ADDRESSES_XP; typedef IP_ADAPTER_ADDRESSES_LH IP_ADAPTER_ADDRESSES; typedef IP_ADAPTER_ADDRESSES_LH *PIP_ADAPTER_ADDRESSES; #define GAA_FLAG_SKIP_UNICAST 0x00000001 #define GAA_FLAG_SKIP_ANYCAST 0x00000002 #define GAA_FLAG_SKIP_MULTICAST 0x00000004 #define GAA_FLAG_SKIP_DNS_SERVER 0x00000008 #define GAA_FLAG_INCLUDE_PREFIX 0x00000010 #define GAA_FLAG_SKIP_FRIENDLY_NAME 0x00000020 #define GAA_FLAG_INCLUDE_WINS_INFO 0x00000040 #define GAA_FLAG_INCLUDE_ALL_GATEWAYS 0x00000080 #define GAA_FLAG_INCLUDE_ALL_INTERFACES 0x00000100 #define GAA_FLAG_INCLUDE_ALL_COMPARTMENTS 0x00000200 #define GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER 0x00000400 #endif /* _WINSOCK2API_ */ #endif /* WINE_IPTYPES_H_*/ ================================================ FILE: wine/windows/isguids.h ================================================ /* * Copyright 2007 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _ISGUIDS_H_ #define _ISGUIDS_H_ DEFINE_GUID(CLSID_InternetShortcut, 0xfbf23b40,0xe3f0,0x101b,0x84,0x88,0x00,0xaa,0x00,0x3e,0x56,0xf8); DEFINE_GUID(IID_IUniformResourceLocatorA, 0xfbf23b80,0xe3f0,0x101b,0x84,0x88,0x00,0xaa,0x00,0x3e,0x56,0xf8); DEFINE_GUID(IID_IUniformResourceLocatorW, 0xcabb0da0,0xda57,0x11cf,0x99,0x74,0x00,0x20,0xaf,0xd7,0x97,0x62); #define IID_IUniformResourceLocator WINELIB_NAME_AW(IID_IUniformResourceLocator) #endif ================================================ FILE: wine/windows/knownfolders.h ================================================ /* * Copyright 2010 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_KNOWNFOLDERS_H #define __WINE_KNOWNFOLDERS_H #ifdef DEFINE_KNOWN_FOLDER #undef DEFINE_KNOWN_FOLDER #endif #ifdef INITGUID #ifdef __cplusplus #define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ EXTERN_C const GUID name DECLSPEC_HIDDEN; \ EXTERN_C const GUID name = \ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } #else #define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ const GUID name DECLSPEC_HIDDEN; \ const GUID name = \ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } #endif #else #define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ EXTERN_C const GUID name DECLSPEC_HIDDEN #endif DEFINE_KNOWN_FOLDER(FOLDERID_AddNewPrograms, 0xde61d971, 0x5ebc, 0x4f02, 0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04); DEFINE_KNOWN_FOLDER(FOLDERID_AdminTools, 0x724ef170, 0xa42d, 0x4fef, 0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f); DEFINE_KNOWN_FOLDER(FOLDERID_AppUpdates, 0xa305ce99, 0xf527, 0x492b, 0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4); DEFINE_KNOWN_FOLDER(FOLDERID_CDBurning, 0x9e52ab10, 0xf80d, 0x49df, 0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55); DEFINE_KNOWN_FOLDER(FOLDERID_ChangeRemovePrograms, 0xdf7266ac, 0x9274, 0x4867, 0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d); DEFINE_KNOWN_FOLDER(FOLDERID_CommonAdminTools, 0xd0384e7d, 0xbac3, 0x4797, 0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5); DEFINE_KNOWN_FOLDER(FOLDERID_CommonOEMLinks, 0xc1bae2d0, 0x10df, 0x4334, 0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d); DEFINE_KNOWN_FOLDER(FOLDERID_CommonPrograms, 0x0139d44e, 0x6afe, 0x49f2, 0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8); DEFINE_KNOWN_FOLDER(FOLDERID_CommonStartMenu, 0xa4115719, 0xd62e, 0x491d, 0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67); DEFINE_KNOWN_FOLDER(FOLDERID_CommonStartup, 0x82a5ea35, 0xd9cd, 0x47c5, 0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e); DEFINE_KNOWN_FOLDER(FOLDERID_CommonTemplates, 0xb94237e7, 0x57ac, 0x4347, 0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7); DEFINE_KNOWN_FOLDER(FOLDERID_ComputerFolder, 0x0ac0837c, 0xbbf8, 0x452a, 0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7); DEFINE_KNOWN_FOLDER(FOLDERID_ConflictFolder, 0x4bfefb45, 0x347d, 0x4006, 0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92); DEFINE_KNOWN_FOLDER(FOLDERID_ConnectionsFolder, 0x6f0cd92b, 0x2e97, 0x45d1, 0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd); DEFINE_KNOWN_FOLDER(FOLDERID_Contacts, 0x56784854, 0xc6cb, 0x462b, 0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82); DEFINE_KNOWN_FOLDER(FOLDERID_ControlPanelFolder, 0x82a74aeb, 0xaeb4, 0x465c, 0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63); DEFINE_KNOWN_FOLDER(FOLDERID_Cookies, 0x2b0f765d, 0xc0e9, 0x4171, 0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6); DEFINE_KNOWN_FOLDER(FOLDERID_Desktop, 0xb4bfcc3a, 0xdb2c, 0x424c, 0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41); DEFINE_KNOWN_FOLDER(FOLDERID_DeviceMetadataStore, 0x5ce4a5e9, 0xe4eb, 0x479d, 0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55); DEFINE_KNOWN_FOLDER(FOLDERID_Documents, 0xfdd39ad0, 0x238f, 0x46af, 0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7); DEFINE_KNOWN_FOLDER(FOLDERID_DocumentsLibrary, 0x7b0db17d, 0x9cd2, 0x4a93, 0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c); DEFINE_KNOWN_FOLDER(FOLDERID_Downloads, 0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b); DEFINE_KNOWN_FOLDER(FOLDERID_Favorites, 0x1777f761, 0x68ad, 0x4d8a, 0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd); DEFINE_KNOWN_FOLDER(FOLDERID_Fonts, 0xfd228cb7, 0xae11, 0x4ae3, 0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe); DEFINE_KNOWN_FOLDER(FOLDERID_Games, 0xcac52c1a, 0xb53d, 0x4edc, 0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34); DEFINE_KNOWN_FOLDER(FOLDERID_GameTasks, 0x054fae61, 0x4dd8, 0x4787, 0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00); DEFINE_KNOWN_FOLDER(FOLDERID_History, 0xd9dc8a3b, 0xb784, 0x432e, 0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63); DEFINE_KNOWN_FOLDER(FOLDERID_HomeGroup, 0x52528a6b, 0xb9e3, 0x4add, 0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d); DEFINE_KNOWN_FOLDER(FOLDERID_ImplicitAppShortcuts, 0xbcb5256f, 0x79f6, 0x4cee, 0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46); DEFINE_KNOWN_FOLDER(FOLDERID_InternetCache, 0x352481e8, 0x33be, 0x4251, 0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d); DEFINE_KNOWN_FOLDER(FOLDERID_InternetFolder, 0x4d9f7874, 0x4e0c, 0x4904, 0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b); DEFINE_KNOWN_FOLDER(FOLDERID_Libraries, 0x1b3ea5dc, 0xb587, 0x4786, 0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae); DEFINE_KNOWN_FOLDER(FOLDERID_Links, 0xbfb9d5e0, 0xc6a9, 0x404c, 0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68); DEFINE_KNOWN_FOLDER(FOLDERID_LocalAppData, 0xf1b32785, 0x6fba, 0x4fcf, 0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91); DEFINE_KNOWN_FOLDER(FOLDERID_LocalAppDataLow, 0xa520a1a4, 0x1780, 0x4ff6, 0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16); DEFINE_KNOWN_FOLDER(FOLDERID_LocalizedResourcesDir, 0x2a00375e, 0x224c, 0x49de, 0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc); DEFINE_KNOWN_FOLDER(FOLDERID_Music, 0x4bd8d571, 0x6d19, 0x48d3, 0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43); DEFINE_KNOWN_FOLDER(FOLDERID_MusicLibrary, 0x2112ab0a, 0xc86a, 0x4ffe, 0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e); DEFINE_KNOWN_FOLDER(FOLDERID_NetHood, 0xc5abbf53, 0xe17f, 0x4121, 0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73); DEFINE_KNOWN_FOLDER(FOLDERID_NetworkFolder, 0xd20beec4, 0x5ca8, 0x4905, 0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53); DEFINE_KNOWN_FOLDER(FOLDERID_OriginalImages, 0x2c36c0aa, 0x5812, 0x4b87, 0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39); DEFINE_KNOWN_FOLDER(FOLDERID_PhotoAlbums, 0x69d2cf90, 0xfc33, 0x4fb7, 0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c); DEFINE_KNOWN_FOLDER(FOLDERID_Pictures, 0x33e28130, 0x4e1e, 0x4676, 0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb); DEFINE_KNOWN_FOLDER(FOLDERID_PicturesLibrary, 0xa990ae9f, 0xa03b, 0x4e80, 0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04); DEFINE_KNOWN_FOLDER(FOLDERID_Playlists, 0xde92c1c7, 0x837f, 0x4f69, 0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23); DEFINE_KNOWN_FOLDER(FOLDERID_PrintersFolder, 0x76fc4e2d, 0xd6ad, 0x4519, 0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85); DEFINE_KNOWN_FOLDER(FOLDERID_PrintHood, 0x9274bd8d, 0xcfd1, 0x41c3, 0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4); DEFINE_KNOWN_FOLDER(FOLDERID_Profile, 0x5e6c858f, 0x0e22, 0x4760, 0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73); DEFINE_KNOWN_FOLDER(FOLDERID_ProgramData, 0x62ab5d82, 0xfdc1, 0x4dc3, 0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97); DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFiles, 0x905e63b6, 0xc1bf, 0x494e, 0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a); DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommon, 0xf7f1ed05, 0x9f6d, 0x47a2, 0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66); DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX64, 0x6365d5a7, 0x0f0d, 0x45e5, 0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d); DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX86, 0xde974d24, 0xd9c6, 0x4d3e, 0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17); DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesX64, 0x6d809377, 0x6af0, 0x444b, 0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e); DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesX86, 0x7c5a40ef, 0xa0fb, 0x4bfc, 0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e); DEFINE_KNOWN_FOLDER(FOLDERID_Programs, 0xa77f5d77, 0x2e2b, 0x44c3, 0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51); DEFINE_KNOWN_FOLDER(FOLDERID_Public, 0xdfdf76a2, 0xc82a, 0x4d63, 0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85); DEFINE_KNOWN_FOLDER(FOLDERID_PublicDesktop, 0xc4aa340d, 0xf20f, 0x4863, 0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25); DEFINE_KNOWN_FOLDER(FOLDERID_PublicDocuments, 0xed4824af, 0xdce4, 0x45a8, 0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34); DEFINE_KNOWN_FOLDER(FOLDERID_PublicDownloads, 0x3d644c9b, 0x1fb8, 0x4f30, 0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0); DEFINE_KNOWN_FOLDER(FOLDERID_PublicGameTasks, 0xdebf2536, 0xe1a8, 0x4c59, 0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea); DEFINE_KNOWN_FOLDER(FOLDERID_PublicLibraries, 0x48daf80b, 0xe6cf, 0x4f4e, 0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84); DEFINE_KNOWN_FOLDER(FOLDERID_PublicMusic, 0x3214fab5, 0x9757, 0x4298, 0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff); DEFINE_KNOWN_FOLDER(FOLDERID_PublicPictures, 0xb6ebfb86, 0x6907, 0x413c, 0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5); DEFINE_KNOWN_FOLDER(FOLDERID_PublicRingtones, 0xe555ab60, 0x153b, 0x4d17, 0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec); DEFINE_KNOWN_FOLDER(FOLDERID_PublicVideos, 0x2400183a, 0x6185, 0x49fb, 0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3); DEFINE_KNOWN_FOLDER(FOLDERID_QuickLaunch, 0x52a4f021, 0x7b75, 0x48a9, 0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f); DEFINE_KNOWN_FOLDER(FOLDERID_Recent, 0xae50c081, 0xebd2, 0x438a, 0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a); DEFINE_KNOWN_FOLDER(FOLDERID_RecordedTV, 0xbd85e001, 0x112e, 0x431e, 0x98, 0x3b, 0x7b, 0x15, 0xac, 0x09, 0xff, 0xf1); DEFINE_KNOWN_FOLDER(FOLDERID_RecordedTVLibrary, 0x1a6fdba2, 0xf42d, 0x4358, 0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5); DEFINE_KNOWN_FOLDER(FOLDERID_RecycleBinFolder, 0xb7534046, 0x3ecb, 0x4c18, 0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac); DEFINE_KNOWN_FOLDER(FOLDERID_ResourceDir, 0x8ad10c31, 0x2adb, 0x4296, 0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72); DEFINE_KNOWN_FOLDER(FOLDERID_Ringtones, 0xc870044b, 0xf49e, 0x4126, 0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8); DEFINE_KNOWN_FOLDER(FOLDERID_RoamingAppData, 0x3eb685db, 0x65f9, 0x4cf6, 0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d); DEFINE_KNOWN_FOLDER(FOLDERID_SampleMusic, 0xb250c668, 0xf57d, 0x4ee1, 0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f); DEFINE_KNOWN_FOLDER(FOLDERID_SamplePictures, 0xc4900540, 0x2379, 0x4c75, 0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b); DEFINE_KNOWN_FOLDER(FOLDERID_SamplePlaylists, 0x15ca69b3, 0x30ee, 0x49c1, 0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5); DEFINE_KNOWN_FOLDER(FOLDERID_SampleVideos, 0x859ead94, 0x2e85, 0x48ad, 0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd); DEFINE_KNOWN_FOLDER(FOLDERID_SavedGames, 0x4c5c32ff, 0xbb9d, 0x43b0, 0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4); DEFINE_KNOWN_FOLDER(FOLDERID_SavedSearches, 0x7d1d3a04, 0xdebb, 0x4115, 0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda); DEFINE_KNOWN_FOLDER(FOLDERID_SEARCH_CSC, 0xee32e446, 0x31ca, 0x4aba, 0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e); DEFINE_KNOWN_FOLDER(FOLDERID_SearchHome, 0x190337d1, 0xb8ca, 0x4121, 0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a); DEFINE_KNOWN_FOLDER(FOLDERID_SEARCH_MAPI, 0x98ec0e18, 0x2098, 0x4d44, 0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81); DEFINE_KNOWN_FOLDER(FOLDERID_SendTo, 0x8983036c, 0x27c0, 0x404b, 0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74); DEFINE_KNOWN_FOLDER(FOLDERID_SidebarDefaultParts, 0x7b396e54, 0x9ec5, 0x4300, 0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26); DEFINE_KNOWN_FOLDER(FOLDERID_SidebarParts, 0xa75d362e, 0x50fc, 0x4fb7, 0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93); DEFINE_KNOWN_FOLDER(FOLDERID_StartMenu, 0x625b53c3, 0xab48, 0x4ec1, 0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19); DEFINE_KNOWN_FOLDER(FOLDERID_Startup, 0xb97d20bb, 0xf46a, 0x4c97, 0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54); DEFINE_KNOWN_FOLDER(FOLDERID_SyncManagerFolder, 0x43668bf8, 0xc14e, 0x49b2, 0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7); DEFINE_KNOWN_FOLDER(FOLDERID_SyncResultsFolder, 0x289a9a43, 0xbe44, 0x4057, 0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9); DEFINE_KNOWN_FOLDER(FOLDERID_SyncSetupFolder, 0x0f214138, 0xb1d3, 0x4a90, 0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a); DEFINE_KNOWN_FOLDER(FOLDERID_System, 0x1ac14e77, 0x02e7, 0x4e5d, 0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7); DEFINE_KNOWN_FOLDER(FOLDERID_SystemX86, 0xd65231b0, 0xb2f1, 0x4857, 0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27); DEFINE_KNOWN_FOLDER(FOLDERID_Templates, 0xa63293e8, 0x664e, 0x48db, 0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7); DEFINE_KNOWN_FOLDER(FOLDERID_UserPinned, 0x9e3995ab, 0x1f9c, 0x4f13, 0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74); DEFINE_KNOWN_FOLDER(FOLDERID_UserProfiles, 0x0762d272, 0xc50a, 0x4bb0, 0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80); DEFINE_KNOWN_FOLDER(FOLDERID_UserProgramFiles, 0x5cd7aee2, 0x2219, 0x4a67, 0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb); DEFINE_KNOWN_FOLDER(FOLDERID_UserProgramFilesCommon, 0xbcbd3057, 0xca5c, 0x4622, 0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16); DEFINE_KNOWN_FOLDER(FOLDERID_UsersFiles, 0xf3ce0f7c, 0x4901, 0x4acc, 0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f); DEFINE_KNOWN_FOLDER(FOLDERID_UsersLibraries, 0xa302545d, 0xdeff, 0x464b, 0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b); DEFINE_KNOWN_FOLDER(FOLDERID_Videos, 0x18989b1d, 0x99b5, 0x455b, 0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc); DEFINE_KNOWN_FOLDER(FOLDERID_VideosLibrary, 0x491e922f, 0x5643, 0x4af4, 0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74); DEFINE_KNOWN_FOLDER(FOLDERID_Windows, 0xf38bf404, 0x1d43, 0x42f2, 0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23); #endif /* __WINE_KNOWNFOLDERS_H */ ================================================ FILE: wine/windows/ks.h ================================================ /* * Copyright (C) 2004 Robert Reif * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _KS_ #define _KS_ typedef union tagKSIDENTIFIER { struct { GUID Set; ULONG Id; ULONG Flags; } DUMMYSTRUCTNAME; LONGLONG Alignment; } KSIDENTIFIER; typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY, KSMETHOD, *PKSMETHOD, KSEVENT, *PKSEVENT; typedef enum { KSPIN_DATAFLOW_IN = 1, KSPIN_DATAFLOW_OUT } KSPIN_DATAFLOW, *PKSPIN_DATAFLOW; #define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0 #define KSDATAFORMAT_BIT_ATTRIBUTES 1 #define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << 0) #define KSDATAFORMAT_ATTRIBUTES 1 (1 << 1) #define KSDATARANGE_BIT_ATTRIBUTES 1 #define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2 #define KSDATARANGE_ATTRIBUTES (1 << 1) #define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << 2) typedef union unionKSDATAFORMAT { struct { ULONG FormatSize; ULONG Flags; ULONG SampleSize; ULONG Reserved; GUID MajorFormat; GUID SubFormat; GUID Specifier; } DUMMYSTRUCTNAME; LONGLONG Alignment; } KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE; #endif /* _KS_ */ ================================================ FILE: wine/windows/ksguid.h ================================================ /* * Copyright (C) 2004 Robert Reif * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define INITGUID #include ================================================ FILE: wine/windows/ksmedia.h ================================================ /* * Copyright (C) 2004 Robert Reif * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _KS_ #error must include ks.h before ksmedia.h #endif #ifndef _KSMEDIA_ #define _KSMEDIA_ DEFINE_GUID(KSDATAFORMAT_TYPE_AUDIO, 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); DEFINE_GUID(KSDATAFORMAT_SUBTYPE_PCM, 0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); DEFINE_GUID(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, 0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); DEFINE_GUID(KSDATAFORMAT_SUBTYPE_MULAW, 0x00000007, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); DEFINE_GUID(KSDATAFORMAT_SUBTYPE_ALAW, 0x00000006, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); #define KSAUDIO_SPEAKER_DIRECTOUT 0 #define KSAUDIO_SPEAKER_MONO SPEAKER_FRONT_CENTER #define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT) #define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT) #define KSAUDIO_SPEAKER_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER) #define KSAUDIO_SPEAKER_5POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT) /* 5:1 SIDE or BACK is not distinguished, only 0x3F shall be used (BACK) */ #define KSAUDIO_SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT) #define KSAUDIO_SPEAKER_7POINT1 (KSAUDIO_SPEAKER_5POINT1 | SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER) /* 7:1 home theater 0x63F */ #define KSAUDIO_SPEAKER_7POINT1_SURROUND (KSAUDIO_SPEAKER_5POINT1 | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT) #ifndef REFERENCE_TIME_DEFINED #define REFERENCE_TIME_DEFINED typedef LONGLONG REFERENCE_TIME; #endif typedef enum { eConnTypeUnknown = 0, eConnType3Point5mm, eConnTypeQuarter, eConnTypeAtapiInternal, eConnTypeRCA, eConnTypeOptical, eConnTypeOtherDigital, eConnTypeOtherAnalog, eConnTypeMultichannelAnalogDIN, eConnTypeXlrProfessional, eConnTypeRJ11Modem, eConnTypeCombination } EPcxConnectionType; typedef enum { eGeoLocRear = 1, eGeoLocFront, eGeoLocLeft, eGeoLocRight, eGeoLocTop, eGeoLocBottom, eGeoLocRearPanel, eGeoLocRiser, eGeoLocInsideMobileLid, eGeoLocDrivebay, eGeoLocHDMI, eGeoLocOutsideMobileLid, eGeoLocATAPI, eGeoLocReserved5, eGeoLocReserved6 } EPcxGeoLocation; typedef enum { eGenLocPrimaryBox = 0, eGenLocInternal, eGenLocSeparate, eGenLocOther } EPcxGenLocation; typedef enum { ePortConnJack = 0, ePortConnIntegratedDevice, ePortConnBothIntegratedAndJack, ePortConnUnknown } EPxcPortConnection; typedef struct { DWORD ChannelMapping; COLORREF Color; EPcxConnectionType ConnectionType; EPcxGeoLocation GeoLocation; EPcxGenLocation GenLocation; EPxcPortConnection PortConnection; BOOL IsConnected; } KSJACK_DESCRIPTION; typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION; typedef enum { KSJACK_SINK_CONNECTIONTYPE_HDMI = 0, KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT } KSJACK_SINK_CONNECTIONTYPE; #define MAX_SINK_DESCRIPTION_NAME_LENGTH 32 typedef struct _tagKSJACK_SINK_INFORMATION { KSJACK_SINK_CONNECTIONTYPE ConnType; WORD ManufacturerId; WORD ProductId; WORD AudioLatency; BOOL HDCPCapable; BOOL AICapable; UCHAR SinkDescriptionLength; WCHAR SinkDescription[MAX_SINK_DESCRIPTION_NAME_LENGTH]; LUID PortId; } KSJACK_SINK_INFORMATION; #define JACKDESC2_PRESENCE_DETECT_CAPABILITY 0x1 #define JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY 0x2 typedef struct _tagKSJACK_DESCRIPTION2 { DWORD DeviceStateInfo; DWORD JackCapabilities; } KSJACK_DESCRIPTION2; typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2; #endif /* _KSMEDIA_ */ ================================================ FILE: wine/windows/ksuuids.h ================================================ /* * Copyright (C) 2014 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ OUR_GUID_ENTRY(AM_INTERFACESETID_Standard, 0x1a8766a0, 0x62ce, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00) OUR_GUID_ENTRY(AM_KSCATEGORY_AUDIO, 0x6994ad04, 0x93ef, 0x11d0, 0xa3, 0xcc, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) OUR_GUID_ENTRY(AM_KSCATEGORY_CAPTURE, 0x65e8773d, 0x8f56, 0x11d0, 0xa3, 0xb9, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) OUR_GUID_ENTRY(AM_KSCATEGORY_CROSSBAR, 0xa799a801, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4) OUR_GUID_ENTRY(AM_KSCATEGORY_DATACOMPRESSOR, 0x1e84c900, 0x7e70, 0x11d0, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00) OUR_GUID_ENTRY(AM_KSCATEGORY_RENDER, 0x65e8773e, 0x8f56, 0x11d0, 0xa3, 0xb9, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) OUR_GUID_ENTRY(AM_KSCATEGORY_SPLITTER, 0x0a4252a0, 0x7e70, 0x11d0, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00) OUR_GUID_ENTRY(AM_KSCATEGORY_TVAUDIO, 0xa799a802, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4) OUR_GUID_ENTRY(AM_KSCATEGORY_TVTUNER, 0xa799a800, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4) OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC, 0x07dad660, 0x22f1, 0x11d1, 0xa9, 0xf4, 0x00, 0xc0, 0x4f, 0xbb, 0xde, 0x8f) OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC_MI, 0x9c24a977, 0x0951, 0x451a, 0x80, 0x06, 0x0e, 0x49, 0xbd, 0x28, 0xcd, 0x5f) OUR_GUID_ENTRY(AM_KSCATEGORY_VIDEO, 0x6994ad05, 0x93ef, 0x11d0, 0xa3, 0xcc, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) OUR_GUID_ENTRY(AM_KSPROPSETID_AC3, 0xbfabe720, 0x6e1f, 0x11d0, 0xbc, 0xf2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00) OUR_GUID_ENTRY(AM_KSPROPSETID_CopyProt, 0x0e8a0a40, 0x6aef, 0x11d0, 0x9e, 0xd0, 0x00, 0xa0, 0x24, 0xca, 0x19, 0xb3) OUR_GUID_ENTRY(AM_KSPROPSETID_DVD_RateChange, 0x3577eb09, 0x9582, 0x477f, 0xb2, 0x9c, 0xb0, 0xc4, 0x52, 0xa4, 0xff, 0x9a) OUR_GUID_ENTRY(AM_KSPROPSETID_DvdKaraoke, 0xae4720ae, 0xaa71, 0x42d8, 0xb8, 0x2a, 0xff, 0xfd, 0xf5, 0x8b, 0x76, 0xfd) OUR_GUID_ENTRY(AM_KSPROPSETID_DvdSubPic, 0xac390460, 0x43af, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9) OUR_GUID_ENTRY(AM_KSPROPSETID_FrameStep, 0xc830acbd, 0xab07, 0x492f, 0x88, 0x52, 0x45, 0xb6, 0x98, 0x7c, 0x29, 0x79) OUR_GUID_ENTRY(AM_KSPROPSETID_MPEG4_MediaType_Attributes, 0xff6c4bfa, 0x07a9, 0x4c7b, 0xa2, 0x37, 0x67, 0x2f, 0x9d, 0x68, 0x06, 0x5f) OUR_GUID_ENTRY(AM_KSPROPSETID_TSRateChange, 0xa503c5c0, 0x1d1d, 0x11d1, 0xad, 0x80, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00) OUR_GUID_ENTRY(FORMAT_DVD_LPCMAudio, 0xe06d80e6, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(FORMAT_DolbyAC3, 0xe06d80e4, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(FORMAT_Image, 0x692fa379, 0xd3e8, 0x4651, 0xb5, 0xb4, 0x0b, 0x94, 0xb0, 0x13, 0xee, 0xaf) OUR_GUID_ENTRY(FORMAT_JPEGImage, 0x692fa379, 0xd3e8, 0x4651, 0xb5, 0xb4, 0x0b, 0x94, 0xb0, 0x13, 0xee, 0xaf) OUR_GUID_ENTRY(FORMAT_MPEG2Audio, 0xe06d80e5, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(FORMAT_MPEG2Video, 0xe06d80e3, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(FORMAT_MPEG2_VIDEO, 0xe06d80e3, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(FORMAT_UVCH264Video, 0x2017be05, 0x6629, 0x4248, 0xaa, 0xed, 0x7e, 0x1a, 0x47, 0xbc, 0x9b, 0x9c) OUR_GUID_ENTRY(FORMAT_VIDEOINFO2, 0xf72a76a0, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(IID_IKsDataTypeHandler, 0x5ffbaa02, 0x49a3, 0x11d0, 0x9f, 0x36, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1) OUR_GUID_ENTRY(IID_IKsInterfaceHandler, 0xd3abc7e0, 0x9a61, 0x11d0, 0xa4, 0x0d, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) OUR_GUID_ENTRY(IID_IKsPin, 0xb61178d1, 0xa2d9, 0x11cf, 0x9e, 0x53, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1) OUR_GUID_ENTRY(IID_IKsPinFactory, 0xcd5ebe6b, 0x8b6e, 0x11d1, 0x8a, 0xe0, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) OUR_GUID_ENTRY(MEDIASUBTYPE_ATSC_SI, 0xb3c7397c, 0xd303, 0x414d, 0xb3, 0x3c, 0x4e, 0xd2, 0xc9, 0xd2, 0x97, 0x33) OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3, 0xe06d802c, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_DTS, 0xe06d8033, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SI, 0xe9dd31a3, 0x221d, 0x4adb, 0x85, 0x32, 0x9a, 0xf3, 0x09, 0xc1, 0xa4, 0x08) OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_LPCM_AUDIO, 0xe06d8032, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_DSI, 0xe06d8030, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PCI, 0xe06d802f, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER, 0xe06d8031, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_SUBPICTURE, 0xe06d802d, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_ISDB_SI, 0xe89ad298, 0x3601, 0x4b06, 0xaa, 0xec, 0x9d, 0xde, 0xed, 0xcc, 0x5b, 0xd0) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2DATA, 0xc892e55b, 0x252d, 0x42b5, 0xa3, 0x16, 0xd9, 0x97, 0xe7, 0xa5, 0xd9, 0x95) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_AUDIO, 0xe06d802b, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PBDA_TRANSPORT_PROCESSED, 0xaf748dd4, 0x0d80, 0x11db, 0x97, 0x05, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x08) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PBDA_TRANSPORT_RAW, 0x0d7aed42, 0xcb9a, 0x11db, 0x97, 0x05, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x08) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PROGRAM, 0xe06d8022, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT, 0xe06d8023, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE, 0x138aa9a4, 0x1ee2, 0x4c5b, 0x98, 0x8e, 0x19, 0xab, 0xfd, 0xbc, 0x8a, 0x11) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_UDCR_TRANSPORT, 0x18bec4ea, 0x4676, 0x450e, 0xb4, 0x78, 0x0c, 0xd8, 0x4c, 0x54, 0xb3, 0x27) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VERSIONED_TABLES, 0x1ed988b0, 0x3ffc, 0x4523, 0x87, 0x25, 0x34, 0x7b, 0xee, 0xc1, 0xa8, 0xa0) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VIDEO, 0xe06d8026, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_WMDRM_TRANSPORT, 0x18bec4ea, 0x4676, 0x450e, 0xb4, 0x78, 0x0c, 0xd8, 0x4c, 0x54, 0xb3, 0x27) OUR_GUID_ENTRY(MEDIASUBTYPE_SDDS, 0xe06d8034, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIASUBTYPE_TIF_SI, 0xec232eb2, 0xcb96, 0x4191, 0xb2, 0x26, 0x0e, 0xa1, 0x29, 0xf3, 0x82, 0x50) OUR_GUID_ENTRY(MEDIATYPE_DVD_ENCRYPTED_PACK, 0xed0b916a, 0x044d, 0x11d1, 0xaa, 0x78, 0x00, 0xc0, 0x4f, 0xc3, 0x1d, 0x60) OUR_GUID_ENTRY(MEDIATYPE_DVD_NAVIGATION, 0xe06d802e, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PACK, 0x36523b13, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a) OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PES, 0xe06d8020, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea) OUR_GUID_ENTRY(MEDIATYPE_MPEG2_SECTIONS, 0x455f176c, 0x4b06, 0x47ce, 0x9a, 0xef, 0x8c, 0xae, 0xf7, 0x3d, 0xf7, 0xb5) /* FIXME: conflicts with devicetopology.h */ /* OUR_GUID_ENTRY(IID_IKsControl, 0x28f54685, 0x06fd, 0x11d2, 0xb2, 0x7a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) */ ================================================ FILE: wine/windows/libloaderapi.h ================================================ /* * Copyright (C) 2017 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _APISETLIBLOADER_ #define _APISETLIBLOADER_ #ifdef __cplusplus extern "C" { #endif typedef void *DLL_DIRECTORY_COOKIE, **PDLL_DIRECTORY_COOKIE; WINBASEAPI DLL_DIRECTORY_COOKIE WINAPI AddDllDirectory(const WCHAR *); WINBASEAPI BOOL WINAPI RemoveDllDirectory(DLL_DIRECTORY_COOKIE); WINBASEAPI BOOL WINAPI SetDefaultDllDirectories(DWORD); #ifdef __cplusplus } #endif #endif /* _APISETLIBLOADER_ */ ================================================ FILE: wine/windows/lm.h ================================================ /* * Copyright 2002 Andriy Palamarchuk * * General lm header which includes other lm headers. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LM_H #define __WINE_LM_H #include #include #include #include #include #include #include #include #include #include #include /* FIXME: #include */ /* FIXME: #include */ /* FIXME: #include */ /* FIXME: #include */ /* FIXME: #include */ /* FIXME: #include */ /* FIXME: #include */ /* The following are obsolete headers */ #include #endif ================================================ FILE: wine/windows/lmaccess.h ================================================ /* * Copyright 2002 Andriy Palamarchuk * * User information Net API. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMACCESS_H #define __WINE_LMACCESS_H #ifdef __cplusplus extern "C" { #endif #include #define ACCESS_NONE 0x0000 #define ACCESS_READ 0x0001 #define ACCESS_WRITE 0x0002 #define ACCESS_CREATE 0x0004 #define ACCESS_EXEC 0x0008 #define ACCESS_DELETE 0x0010 #define ACCESS_ATRIB 0x0020 #define ACCESS_PERM 0x0040 #define ACCESS_GROUP 0x8000 #define ACCESS_ALL (ACCESS_READ|ACCESS_WRITE|ACCESS_CREATE|ACCESS_EXEC|ACCESS_DELETE|ACCESS_ATRIB|ACCESS_PERM) #define UF_SCRIPT 0x000001 #define UF_ACCOUNTDISABLE 0x000002 #define UF_HOMEDIR_REQUIRED 0x000008 #define UF_LOCKOUT 0x000010 #define UF_PASSWD_NOTREQD 0x000020 #define UF_PASSWD_CANT_CHANGE 0x000040 #define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED 0x000080 #define UF_TEMP_DUPLICATE_ACCOUNT 0x000100 #define UF_NORMAL_ACCOUNT 0x000200 #define UF_INTERDOMAIN_TRUST_ACCOUNT 0x000800 #define UF_WORKSTATION_TRUST_ACCOUNT 0x001000 #define UF_SERVER_TRUST_ACCOUNT 0x002000 #define UF_DONT_EXPIRE_PASSWD 0x010000 #define UF_MNS_LOGON_ACCOUNT 0x020000 #define UF_SMARTCARD_REQUIRED 0x040000 #define UF_TRUSTED_FOR_DELEGATION 0x080000 #define UF_NOT_DELEGATED 0x100000 #define UF_USE_DES_KEY_ONLY 0x200000 #define UF_DONT_REQUIRE_PREAUTH 0x400000 #define UF_PASSWORD_EXPIRED 0x800000 #define UF_MACHINE_ACCOUNT_MASK ( \ UF_INTERDOMAIN_TRUST_ACCOUNT | \ UF_WORKSTATION_TRUST_ACCOUNT | \ UF_SERVER_TRUST_ACCOUNT) #define UF_ACCOUNT_TYPE_MASK ( \ UF_TEMP_DUPLICATE_ACCOUNT | \ UF_NORMAL_ACCOUNT | \ UF_INTERDOMAIN_TRUST_ACCOUNT | \ UF_WORKSTATION_TRUST_ACCOUNT | \ UF_SERVER_TRUST_ACCOUNT) #define UF_SETTABLE_BITS ( \ UF_SCRIPT | \ UF_ACCOUNTDISABLE | \ UF_LOCKOUT | \ UF_HOMEDIR_REQUIRED | \ UF_PASSWD_NOTREQD | \ UF_PASSWD_CANT_CHANGE | \ UF_ACCOUNT_TYPE_MASK | \ UF_DONT_EXPIRE_PASSWD | \ UF_MNS_LOGON_ACCOUNT |\ UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED |\ UF_SMARTCARD_REQUIRED | \ UF_TRUSTED_FOR_DELEGATION | \ UF_NOT_DELEGATED | \ UF_USE_DES_KEY_ONLY | \ UF_DONT_REQUIRE_PREAUTH |\ UF_PASSWORD_EXPIRED) #if defined(__GNUC__) # define GROUP_SPECIALGRP_USERS (const WCHAR []){ 'U','S','E','R','S',0 } #elif defined(_MSC_VER) # define GROUP_SPECIALGRP_USERS L"USERS" #else static const WCHAR GROUP_SPECIALGRP_USERS[] = { 'U','S','E','R','S',0 }; #endif #if defined(__GNUC__) # define GROUP_SPECIALGRP_ADMINS (const WCHAR []){ 'A','D','M','I','N','S',0 } #elif defined(_MSC_VER) # define GROUP_SPECIALGRP_ADMINS L"ADMINS" #else static const WCHAR GROUP_SPECIALGRP_ADMINS[] = { 'A','D','M','I','N','S',0 }; #endif #if defined(__GNUC__) # define GROUP_SPECIALGRP_GUESTS (const WCHAR []){ 'G','U','E','S','T','S',0 } #elif defined(_MSC_VER) # define GROUP_SPECIALGRP_GUESTS L"GUESTS" #else static const WCHAR GROUP_SPECIALGRP_GUESTS[] = { 'G','U','E','S','T','S',0 }; #endif #if defined(__GNUC__) # define GROUP_SPECIALGRP_LOCAL (const WCHAR []){ 'L','O','C','A','L',0 } #elif defined(_MSC_VER) # define GROUP_SPECIALGRP_LOCAL L"LOCAL" #else static const WCHAR GROUP_SPECIALGRP_LOCAL[] = { 'L','O','C','A','L',0 }; #endif #ifndef WINE_NTSTATUS_DECLARED #define WINE_NTSTATUS_DECLARED typedef LONG NTSTATUS; #endif #ifndef WINE_PNTSTATUS_DECLARED #define WINE_PNTSTATUS_DECLARED typedef NTSTATUS *PNTSTATUS; #endif /* NetGetUserInfo structures */ typedef struct _USER_INFO_0 { LPWSTR usri0_name; } USER_INFO_0, *PUSER_INFO_0, *LPUSER_INFO_0; typedef struct _USER_INFO_1 { LPWSTR usri1_name; LPWSTR usri1_password; DWORD usri1_password_age; DWORD usri1_priv; LPWSTR usri1_home_dir; LPWSTR usri1_comment; DWORD usri1_flags; LPWSTR usri1_script_path; } USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1; typedef struct _USER_INFO_2 { LPWSTR usri2_name; LPWSTR usri2_password; DWORD usri2_password_age; DWORD usri2_priv; LPWSTR usri2_home_dir; LPWSTR usri2_comment; DWORD usri2_flags; LPWSTR usri2_script_path; DWORD usri2_auth_flags; LPWSTR usri2_full_name; LPWSTR usri2_usr_comment; LPWSTR usri2_parms; LPWSTR usri2_workstations; DWORD usri2_last_logon; DWORD usri2_last_logoff; DWORD usri2_acct_expires; DWORD usri2_max_storage; DWORD usri2_units_per_week; PBYTE usri2_logon_hours; DWORD usri2_bad_pw_count; DWORD usri2_num_logons; LPWSTR usri2_logon_server; DWORD usri2_country_code; DWORD usri2_code_page; } USER_INFO_2, *PUSER_INFO_2, *LPUSER_INFO_2; typedef struct _USER_INFO_3 { LPWSTR usri3_name; LPWSTR usri3_password; DWORD usri3_password_age; DWORD usri3_priv; LPWSTR usri3_home_dir; LPWSTR usri3_comment; DWORD usri3_flags; LPWSTR usri3_script_path; DWORD usri3_auth_flags; LPWSTR usri3_full_name; LPWSTR usri3_usr_comment; LPWSTR usri3_parms; LPWSTR usri3_workstations; DWORD usri3_last_logon; DWORD usri3_last_logoff; DWORD usri3_acct_expires; DWORD usri3_max_storage; DWORD usri3_units_per_week; PBYTE usri3_logon_hours; DWORD usri3_bad_pw_count; DWORD usri3_num_logons; LPWSTR usri3_logon_server; DWORD usri3_country_code; DWORD usri3_code_page; DWORD usri3_user_id; DWORD usri3_primary_group_id; LPWSTR usri3_profile; LPWSTR usri3_home_dir_drive; DWORD usri3_password_expired; } USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3; typedef struct _USER_INFO_4 { LPWSTR usri4_name; LPWSTR usri4_password; DWORD usri4_password_age; DWORD usri4_priv; LPWSTR usri4_home_dir; LPWSTR usri4_comment; DWORD usri4_flags; LPWSTR usri4_script_path; DWORD usri4_auth_flags; LPWSTR usri4_full_name; LPWSTR usri4_usr_comment; LPWSTR usri4_parms; LPWSTR usri4_workstations; DWORD usri4_last_logon; DWORD usri4_last_logoff; DWORD usri4_acct_expires; DWORD usri4_max_storage; DWORD usri4_units_per_week; PBYTE usri4_logon_hours; DWORD usri4_bad_pw_count; DWORD usri4_num_logons; LPWSTR usri4_logon_server; DWORD usri4_country_code; DWORD usri4_code_page; PSID usri4_user_sid; DWORD usri4_primary_group_id; LPWSTR usri4_profile; LPWSTR usri4_home_dir_drive; DWORD usri4_password_expired; } USER_INFO_4, *PUSER_INFO_4, *LPUSER_INFO_4; typedef struct _USER_INFO_10 { LPWSTR usri10_name; LPWSTR usri10_comment; LPWSTR usri10_usr_comment; LPWSTR usri10_full_name; } USER_INFO_10, *PUSER_INFO_10, *LPUSER_INFO_10; typedef struct _USER_INFO_11 { LPWSTR usri11_name; LPWSTR usri11_comment; LPWSTR usri11_usr_comment; LPWSTR usri11_full_name; DWORD usri11_priv; DWORD usri11_auth_flags; DWORD usri11_password_age; LPWSTR usri11_home_dir; LPWSTR usri11_parms; DWORD usri11_last_logon; DWORD usri11_last_logoff; DWORD usri11_bad_pw_count; DWORD usri11_num_logons; LPWSTR usri11_logon_server; DWORD usri11_country_code; LPWSTR usri11_workstations; DWORD usri11_max_storage; DWORD usri11_units_per_week; PBYTE usri11_logon_hours; DWORD usri11_code_page; } USER_INFO_11, *PUSER_INFO_11, *LPUSER_INFO_11; typedef struct _USER_INFO_20 { LPWSTR usri20_name; LPWSTR usri20_full_name; LPWSTR usri20_comment; DWORD usri20_flags; DWORD usri20_user_id; } USER_INFO_20, *PUSER_INFO_20, *LPUSER_INFO_20; typedef struct _USER_INFO_23 { LPWSTR usri23_name; LPWSTR usri23_full_name; LPWSTR usri23_comment; DWORD usri23_flags; PSID usri23_user_sid; } USER_INFO_23, *PUSER_INFO_23, *LPUSER_INFO_23; typedef struct _USER_INFO_1003 { LPWSTR usri1003_password; } USER_INFO_1003, *PUSER_INFO_1003, *LPUSER_INFO_1003; typedef struct _USER_INFO_1005 { DWORD usri1005_priv; } USER_INFO_1005, *PUSER_INFO_1005, *LPUSER_INFO_1005; typedef struct _USER_INFO_1006 { LPWSTR usri1006_home_dir; } USER_INFO_1006, *PUSER_INFO_1006, *LPUSER_INFO_1006; typedef struct _USER_INFO_1007 { LPWSTR usri1007_comment; } USER_INFO_1007, *PUSER_INFO_1007, *LPUSER_INFO_1007; typedef struct _USER_INFO_1008 { DWORD usri1008_flags; } USER_INFO_1008, *PUSER_INFO_1008, *LPUSER_INFO_1008; typedef struct _USER_INFO_1009 { LPWSTR usri1009_script_path; } USER_INFO_1009, *PUSER_INFO_1009, *LPUSER_INFO_1009; typedef struct _USER_INFO_1010 { DWORD usri1010_auth_flags; } USER_INFO_1010, *PUSER_INFO_1010, *LPUSER_INFO_1010; typedef struct _USER_INFO_1011 { LPWSTR usri1011_full_name; } USER_INFO_1011, *PUSER_INFO_1011, *LPUSER_INFO_1011; typedef struct _USER_INFO_1012 { LPWSTR usri1012_usr_comment; } USER_INFO_1012, *PUSER_INFO_1012, *LPUSER_INFO_1012; typedef struct _USER_INFO_1013 { LPWSTR usri1013_parms; } USER_INFO_1013, *PUSER_INFO_1013, *LPUSER_INFO_1013; typedef struct _USER_INFO_1014 { LPWSTR usri1014_workstations; } USER_INFO_1014, *PUSER_INFO_1014, *LPUSER_INFO_1014; typedef struct _USER_INFO_1017 { DWORD usri1017_acct_expires; } USER_INFO_1017, *PUSER_INFO_1017, *LPUSER_INFO_1017; typedef struct _USER_INFO_1018 { DWORD usri1018_max_storage; } USER_INFO_1018, *PUSER_INFO_1018, *LPUSER_INFO_1018; typedef struct _USER_INFO_1020 { DWORD usri1020_units_per_week; LPBYTE usri1020_logon_hours; } USER_INFO_1020, *PUSER_INFO_1020, *LPUSER_INFO_1020; typedef struct _USER_INFO_1023 { LPWSTR usri1023_logon_server; } USER_INFO_1023, *PUSER_INFO_1023, *LPUSER_INFO_1023; typedef struct _USER_INFO_1024 { DWORD usri1024_country_code; } USER_INFO_1024, *PUSER_INFO_1024, *LPUSER_INFO_1024; typedef struct _USER_INFO_1025 { DWORD usri1025_code_page; } USER_INFO_1025, *PUSER_INFO_1025, *LPUSER_INFO_1025; typedef struct _USER_INFO_1051 { DWORD usri1051_primary_group_id; } USER_INFO_1051, *PUSER_INFO_1051, *LPUSER_INFO_1051; typedef struct _USER_INFO_1052 { LPWSTR usri1052_profile; } USER_INFO_1052, *PUSER_INFO_1052, *LPUSER_INFO_1052; typedef struct _USER_INFO_1053 { LPWSTR usri1053_home_dir_drive; } USER_INFO_1053, *PUSER_INFO_1053, *LPUSER_INFO_1053; typedef struct _USER_MODALS_INFO_0 { DWORD usrmod0_min_passwd_len; DWORD usrmod0_max_passwd_age; DWORD usrmod0_min_passwd_age; DWORD usrmod0_force_logoff; DWORD usrmod0_password_hist_len; } USER_MODALS_INFO_0, *PUSER_MODALS_INFO_0, *LPUSER_MODALS_INFO_0; typedef struct _USER_MODALS_INFO_1 { DWORD usrmod1_role; LPWSTR usrmod1_primary; } USER_MODALS_INFO_1, *PUSER_MODALS_INFO_1, *LPUSER_MODALS_INFO_1; typedef struct _USER_MODALS_INFO_2 { LPWSTR usrmod2_domain_name; PSID usrmod2_domain_id; } USER_MODALS_INFO_2, *PUSER_MODALS_INFO_2, *LPUSER_MODALS_INFO_2; typedef struct _USER_MODALS_INFO_3 { DWORD usrmod3_lockout_duration; DWORD usrmod3_lockout_observation_window; DWORD usrmod3_lockout_threshold; } USER_MODALS_INFO_3, *PUSER_MODALS_INFO_3, *LPUSER_MODALS_INFO_3; typedef struct _NET_DISPLAY_USER { LPWSTR usri1_name; LPWSTR usri1_comment; DWORD usri1_flags; LPWSTR usri1_full_name; DWORD usri1_user_id; DWORD usri1_next_index; } NET_DISPLAY_USER, *PNET_DISPLAY_USER; typedef struct _NET_DISPLAY_MACHINE { LPWSTR usri2_name; LPWSTR usri2_comment; DWORD usri2_flags; DWORD usri2_user_id; DWORD usri2_next_index; } NET_DISPLAY_MACHINE, *PNET_DISPLAY_MACHINE; typedef struct _NET_DISPLAY_GROUP { LPWSTR grpi3_name; LPWSTR grpi3_comment; DWORD grpi3_group_id; DWORD grpi3_attributes; DWORD grpi3_next_index; } NET_DISPLAY_GROUP, *PNET_DISPLAY_GROUP; typedef struct _LOCALGROUP_INFO_0 { LPWSTR lgrpi0_name; } LOCALGROUP_INFO_0, *PLOCALGROUP_INFO_0, *LPLOCALGROUP_INFO_0; typedef struct _LOCALGROUP_INFO_1 { LPWSTR lgrpi1_name; LPWSTR lgrpi1_comment; } LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, *LPLOCALGROUP_INFO_1; typedef struct _LOCALGROUP_INFO_1002 { LPWSTR lgrpi1002_comment; } LOCALGROUP_INFO_1002, *PLOCALGROUP_INFO_1002, *LPLOCALGROUP_INFO_1002; typedef struct _LOCALGROUP_MEMBERS_INFO_0 { PSID lgrmi0_sid; } LOCALGROUP_MEMBERS_INFO_0, *PLOCALGROUP_MEMBERS_INFO_0, *LPLOCALGROUP_MEMBERS_INFO_0; typedef struct _LOCALGROUP_MEMBERS_INFO_1 { PSID lgrmi1_sid; SID_NAME_USE lgrmi1_sidusage; LPWSTR lgrmi1_name; } LOCALGROUP_MEMBERS_INFO_1, *PLOCALGROUP_MEMBERS_INFO_1, *LPLOCALGROUP_MEMBERS_INFO_1; typedef struct _LOCALGROUP_MEMBERS_INFO_2 { PSID lgrmi2_sid; SID_NAME_USE lgrmi2_sidusage; LPWSTR lgrmi2_domainandname; } LOCALGROUP_MEMBERS_INFO_2, *PLOCALGROUP_MEMBERS_INFO_2, *LPLOCALGROUP_MEMBERS_INFO_2; typedef struct _LOCALGROUP_MEMBERS_INFO_3 { LPWSTR lgrmi3_domainandname; } LOCALGROUP_MEMBERS_INFO_3, *PLOCALGROUP_MEMBERS_INFO_3, *LPLOCALGROUP_MEMBERS_INFO_3; typedef struct _LOCALGROUP_USERS_INFO_0 { LPWSTR lgrui0_name; } LOCALGROUP_USERS_INFO_0, *PLOCALGROUP_USERS_INFO_0, *LPLOCALGROUP_USERS_INFO_0; #define USER_PRIV_GUEST 0 #define USER_PRIV_USER 1 #define USER_PRIV_ADMIN 2 #define USER_PRIV_MASK 3 #define LOCALGROUP_NAME_PARMNUM 1 #define LOCALGROUP_COMMENT_PARMNUM 2 NET_API_STATUS WINAPI NetGetDCName(LPCWSTR,LPCWSTR,LPBYTE*); NET_API_STATUS WINAPI NetGroupEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetLocalGroupAdd(LPCWSTR,DWORD,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetLocalGroupAddMember(LPCWSTR,LPCWSTR,PSID); NET_API_STATUS WINAPI NetLocalGroupAddMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD); NET_API_STATUS WINAPI NetLocalGroupDel(LPCWSTR,LPCWSTR); NET_API_STATUS WINAPI NetLocalGroupDelMember(LPCWSTR,LPCWSTR,PSID); NET_API_STATUS WINAPI NetLocalGroupDelMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD); NET_API_STATUS WINAPI NetLocalGroupEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,PDWORD_PTR); NET_API_STATUS WINAPI NetLocalGroupGetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE*); NET_API_STATUS WINAPI NetLocalGroupGetMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,PDWORD_PTR); NET_API_STATUS WINAPI NetLocalGroupSetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetLocalGroupSetMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD); NET_API_STATUS WINAPI NetQueryDisplayInformation(LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPDWORD,PVOID*); NET_API_STATUS WINAPI NetUserAdd(LPCWSTR,DWORD,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetUserChangePassword(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); NET_API_STATUS WINAPI NetUserDel(LPCWSTR,LPCWSTR); NET_API_STATUS WINAPI NetUserEnum(LPCWSTR,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetUserGetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE*); NET_API_STATUS WINAPI NetUserGetGroups(LPCWSTR,LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetUserGetLocalGroups(LPCWSTR,LPCWSTR,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetUserModalsGet(LPCWSTR,DWORD,LPBYTE*); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/lmapibuf.h ================================================ /* * Copyright 2002 Andriy Palamarchuk * * Net API buffer calls * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMAPIBUF_H #define __WINE_LMAPIBUF_H #ifdef __cplusplus extern "C" { #endif /* Buffer functions */ NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID* Buffer); NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer); NET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount, LPVOID* NewBuffer); NET_API_STATUS WINAPI NetApiBufferSize(LPVOID Buffer, LPDWORD ByteCount); NET_API_STATUS WINAPI NetapipBufferAllocate(DWORD ByteCount, LPVOID* Buffer); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/lmat.h ================================================ /* * Schedule Service Functions * * Copyright (C) 2011 Louis Lenders * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMAT_H #define __WINE_LMAT_H #ifdef __cplusplus extern "C" { #endif #define JOB_RUN_PERIODICALLY 0x01 #define JOB_EXEC_ERROR 0x02 #define JOB_RUNS_TODAY 0x04 #define JOB_ADD_CURRENT_DATE 0x08 #define JOB_NONINTERACTIVE 0x10 #define JOB_INPUT_FLAGS (JOB_RUN_PERIODICALLY | JOB_ADD_CURRENT_DATE | JOB_NONINTERACTIVE) #define JOB_OUTPUT_FLAGS (JOB_RUN_PERIODICALLY | JOB_EXEC_ERROR | JOB_RUNS_TODAY | JOB_NONINTERACTIVE) typedef struct _AT_INFO { DWORD_PTR JobTime; DWORD DaysOfMonth; UCHAR DaysOfWeek; UCHAR Flags; LPWSTR Command; } AT_INFO, *PAT_INFO, *LPAT_INFO; typedef struct _AT_ENUM { DWORD JobId; DWORD_PTR JobTime; DWORD DaysOfMonth; UCHAR DaysOfWeek; UCHAR Flags; LPWSTR Command; } AT_ENUM, *PAT_ENUM, *LPAT_ENUM; NET_API_STATUS WINAPI NetScheduleJobAdd(LPCWSTR,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetScheduleJobDel(LPCWSTR,DWORD,DWORD); NET_API_STATUS WINAPI NetScheduleJobEnum(LPCWSTR,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); #ifdef __cplusplus } #endif #endif /* __WINE_LMAT_H */ ================================================ FILE: wine/windows/lmbrowsr.h ================================================ /* * Copyright 2002 Andriy Palamarchuk * * Browser NET API calls * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMBROWSR_H #define __WINE_LMBROWSR_H #ifdef __cplusplus extern "C" { #endif typedef struct _BROWSER_EMULATED_DOMAIN { LPWSTR DomainName; LPWSTR EmulatedServerName; DWORD Role; } BROWSER_EMULATED_DOMAIN, *PBROWSER_EMULATED_DOMAIN; NET_API_STATUS WINAPI I_BrowserSetNetlogonState( LPWSTR ServerName, LPWSTR DomainName, LPWSTR EmulatedServerName, DWORD Role); NET_API_STATUS WINAPI I_BrowserQueryEmulatedDomains( LPWSTR ServerName, PBROWSER_EMULATED_DOMAIN *EmulatedDomains, LPDWORD EntriesRead); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/lmcons.h ================================================ /* * Copyright (C) 1999 Rein Klazes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMCONS_H #define __WINE_LMCONS_H /* Types */ #define NET_API_STATUS DWORD #define API_RET_TYPE NET_API_STATUS #define NET_API_FUNCTION WINAPI #define MAX_PREFERRED_LENGTH ((DWORD) -1) /* Lan manager API defines */ #define UNLEN 256 #define LM20_UNLEN 20 #define GNLEN UNLEN #define LM20_GNLEN LM20_UNLEN #define PWLEN 256 #define LM20_PWLEN 14 #define SHPWLEN 8 #define CNLEN 15 #define LM20_CNLEN CNLEN #define DNLEN CNLEN #define LM20_DNLEN DNLEN #define UNCLEN (CNLEN+2) #define LM20_UNCLEN (LM20_CNLEN+2) #define NNLEN 80 #define LM20_NNLEN 12 #define RMLEN (UNCLEN+1+NNLEN) #define LM20_RMLEN (LM20_UNCLEN+1+LM20_NNLEN) #define SNLEN 80 #define LM20_SNLEN 15 #define STXTLEN 256 #define LM20_STXTLEN 63 #define PATHLEN 256 #define LM20_PATHLEN 256 #define DEVLEN 80 #define LM20_DEVLEN 8 #define EVLEN 16 #define CLTYPE_LEN 12 /* platform IDs */ #define PLATFORM_ID_DOS 300 #define PLATFORM_ID_OS2 400 #define PLATFORM_ID_NT 500 #define PLATFORM_ID_OSF 600 #define PLATFORM_ID_VMS 700 #define LMSTR LPWSTR #define LMCSTR LPCWSTR #endif ================================================ FILE: wine/windows/lmerr.h ================================================ /* * Copyright 2002 Andriy Palamarchuk * * NERR error codes. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMERR_H #define __WINE_LMERR_H #include #define NERR_Success 0 #define NERR_BASE 2100 #define NERR_NetNotStarted (NERR_BASE + 2) #define NERR_UnknownServer (NERR_BASE + 3) #define NERR_ShareMem (NERR_BASE + 4) #define NERR_NoNetworkResource (NERR_BASE + 5) #define NERR_RemoteOnly (NERR_BASE + 6) #define NERR_DevNotRedirected (NERR_BASE + 7) #define NERR_ServerNotStarted (NERR_BASE + 14) #define NERR_ItemNotFound (NERR_BASE + 15) #define NERR_UnknownDevDir (NERR_BASE + 16) #define NERR_RedirectedPath (NERR_BASE + 17) #define NERR_DuplicateShare (NERR_BASE + 18) #define NERR_NoRoom (NERR_BASE + 19) #define NERR_TooManyItems (NERR_BASE + 21) #define NERR_InvalidMaxUsers (NERR_BASE + 22) #define NERR_BufTooSmall (NERR_BASE + 23) #define NERR_RemoteErr (NERR_BASE + 27) #define NERR_LanmanIniError (NERR_BASE + 31) #define NERR_NetworkError (NERR_BASE + 36) #define NERR_WkstaInconsistentState (NERR_BASE + 37) #define NERR_WkstaNotStarted (NERR_BASE + 38) #define NERR_BrowserNotStarted (NERR_BASE + 39) #define NERR_InternalError (NERR_BASE + 40) #define NERR_BadTransactConfig (NERR_BASE + 41) #define NERR_InvalidAPI (NERR_BASE + 42) #define NERR_BadEventName (NERR_BASE + 43) #define NERR_DupNameReboot (NERR_BASE + 44) #define NERR_CfgCompNotFound (NERR_BASE + 46) #define NERR_CfgParamNotFound (NERR_BASE + 47) #define NERR_LineTooLong (NERR_BASE + 49) #define NERR_QNotFound (NERR_BASE + 50) #define NERR_JobNotFound (NERR_BASE + 51) #define NERR_DestNotFound (NERR_BASE + 52) #define NERR_DestExists (NERR_BASE + 53) #define NERR_QExists (NERR_BASE + 54) #define NERR_QNoRoom (NERR_BASE + 55) #define NERR_JobNoRoom (NERR_BASE + 56) #define NERR_DestNoRoom (NERR_BASE + 57) #define NERR_DestIdle (NERR_BASE + 58) #define NERR_DestInvalidOp (NERR_BASE + 59) #define NERR_ProcNoRespond (NERR_BASE + 60) #define NERR_SpoolerNotLoaded (NERR_BASE + 61) #define NERR_DestInvalidState (NERR_BASE + 62) #define NERR_QInvalidState (NERR_BASE + 63) #define NERR_JobInvalidState (NERR_BASE + 64) #define NERR_SpoolNoMemory (NERR_BASE + 65) #define NERR_DriverNotFound (NERR_BASE + 66) #define NERR_DataTypeInvalid (NERR_BASE + 67) #define NERR_ProcNotFound (NERR_BASE + 68) #define NERR_ServiceTableLocked (NERR_BASE + 80) #define NERR_ServiceTableFull (NERR_BASE + 81) #define NERR_ServiceInstalled (NERR_BASE + 82) #define NERR_ServiceEntryLocked (NERR_BASE + 83) #define NERR_ServiceNotInstalled (NERR_BASE + 84) #define NERR_BadServiceName (NERR_BASE + 85) #define NERR_ServiceCtlTimeout (NERR_BASE + 86) #define NERR_ServiceCtlBusy (NERR_BASE + 87) #define NERR_BadServiceProgName (NERR_BASE + 88) #define NERR_ServiceNotCtrl (NERR_BASE + 89) #define NERR_ServiceKillProc (NERR_BASE + 90) #define NERR_ServiceCtlNotValid (NERR_BASE + 91) #define NERR_NotInDispatchTbl (NERR_BASE + 92) #define NERR_BadControlRecv (NERR_BASE + 93) #define NERR_ServiceNotStarting (NERR_BASE + 94) #define NERR_AlreadyLoggedOn (NERR_BASE + 100) #define NERR_NotLoggedOn (NERR_BASE + 101) #define NERR_BadUsername (NERR_BASE + 102) #define NERR_BadPassword (NERR_BASE + 103) #define NERR_UnableToAddName_W (NERR_BASE + 104) #define NERR_UnableToAddName_F (NERR_BASE + 105) #define NERR_UnableToDelName_W (NERR_BASE + 106) #define NERR_UnableToDelName_F (NERR_BASE + 107) #define NERR_LogonsPaused (NERR_BASE + 109) #define NERR_LogonServerConflict (NERR_BASE + 110) #define NERR_LogonNoUserPath (NERR_BASE + 111) #define NERR_LogonScriptError (NERR_BASE + 112) #define NERR_StandaloneLogon (NERR_BASE + 114) #define NERR_LogonServerNotFound (NERR_BASE + 115) #define NERR_LogonDomainExists (NERR_BASE + 116) #define NERR_NonValidatedLogon (NERR_BASE + 117) #define NERR_ACFNotFound (NERR_BASE + 119) #define NERR_GroupNotFound (NERR_BASE + 120) #define NERR_UserNotFound (NERR_BASE + 121) #define NERR_ResourceNotFound (NERR_BASE + 122) #define NERR_GroupExists (NERR_BASE + 123) #define NERR_UserExists (NERR_BASE + 124) #define NERR_ResourceExists (NERR_BASE + 125) #define NERR_NotPrimary (NERR_BASE + 126) #define NERR_ACFNotLoaded (NERR_BASE + 127) #define NERR_ACFNoRoom (NERR_BASE + 128) #define NERR_ACFFileIOFail (NERR_BASE + 129) #define NERR_ACFTooManyLists (NERR_BASE + 130) #define NERR_UserLogon (NERR_BASE + 131) #define NERR_ACFNoParent (NERR_BASE + 132) #define NERR_CanNotGrowSegment (NERR_BASE + 133) #define NERR_SpeGroupOp (NERR_BASE + 134) #define NERR_NotInCache (NERR_BASE + 135) #define NERR_UserInGroup (NERR_BASE + 136) #define NERR_UserNotInGroup (NERR_BASE + 137) #define NERR_AccountUndefined (NERR_BASE + 138) #define NERR_AccountExpired (NERR_BASE + 139) #define NERR_InvalidWorkstation (NERR_BASE + 140) #define NERR_InvalidLogonHours (NERR_BASE + 141) #define NERR_PasswordExpired (NERR_BASE + 142) #define NERR_PasswordCantChange (NERR_BASE + 143) #define NERR_PasswordHistConflict (NERR_BASE + 144) #define NERR_PasswordTooShort (NERR_BASE + 145) #define NERR_PasswordTooRecent (NERR_BASE + 146) #define NERR_InvalidDatabase (NERR_BASE + 147) #define NERR_DatabaseUpToDate (NERR_BASE + 148) #define NERR_SyncRequired (NERR_BASE + 149) #define NERR_UseNotFound (NERR_BASE + 150) #define NERR_BadAsgType (NERR_BASE + 151) #define NERR_DeviceIsShared (NERR_BASE + 152) #define NERR_NoComputerName (NERR_BASE + 170) #define NERR_MsgAlreadyStarted (NERR_BASE + 171) #define NERR_MsgInitFailed (NERR_BASE + 172) #define NERR_NameNotFound (NERR_BASE + 173) #define NERR_AlreadyForwarded (NERR_BASE + 174) #define NERR_AddForwarded (NERR_BASE + 175) #define NERR_AlreadyExists (NERR_BASE + 176) #define NERR_TooManyNames (NERR_BASE + 177) #define NERR_DelComputerName (NERR_BASE + 178) #define NERR_LocalForward (NERR_BASE + 179) #define NERR_GrpMsgProcessor (NERR_BASE + 180) #define NERR_PausedRemote (NERR_BASE + 181) #define NERR_BadReceive (NERR_BASE + 182) #define NERR_NameInUse (NERR_BASE + 183) #define NERR_MsgNotStarted (NERR_BASE + 184) #define NERR_NotLocalName (NERR_BASE + 185) #define NERR_NoForwardName (NERR_BASE + 186) #define NERR_RemoteFull (NERR_BASE + 187) #define NERR_NameNotForwarded (NERR_BASE + 188) #define NERR_TruncatedBroadcast (NERR_BASE + 189) #define NERR_InvalidDevice (NERR_BASE + 194) #define NERR_WriteFault (NERR_BASE + 195) #define NERR_DuplicateName (NERR_BASE + 197) #define NERR_DeleteLater (NERR_BASE + 198) #define NERR_IncompleteDel (NERR_BASE + 199) #define NERR_MultipleNets (NERR_BASE + 200) #define NERR_NetNameNotFound (NERR_BASE + 210) #define NERR_DeviceNotShared (NERR_BASE + 211) #define NERR_ClientNameNotFound (NERR_BASE + 212) #define NERR_FileIdNotFound (NERR_BASE + 214) #define NERR_ExecFailure (NERR_BASE + 215) #define NERR_TmpFile (NERR_BASE + 216) #define NERR_TooMuchData (NERR_BASE + 217) #define NERR_DeviceShareConflict (NERR_BASE + 218) #define NERR_BrowserTableIncomplete (NERR_BASE + 219) #define NERR_NotLocalDomain (NERR_BASE + 220) #define NERR_IsDfsShare (NERR_BASE + 221) #define NERR_DevInvalidOpCode (NERR_BASE + 231) #define NERR_DevNotFound (NERR_BASE + 232) #define NERR_DevNotOpen (NERR_BASE + 233) #define NERR_BadQueueDevString (NERR_BASE + 234) #define NERR_BadQueuePriority (NERR_BASE + 235) #define NERR_NoCommDevs (NERR_BASE + 237) #define NERR_QueueNotFound (NERR_BASE + 238) #define NERR_BadDevString (NERR_BASE + 240) #define NERR_BadDev (NERR_BASE + 241) #define NERR_InUseBySpooler (NERR_BASE + 242) #define NERR_CommDevInUse (NERR_BASE + 243) #define NERR_InvalidComputer (NERR_BASE + 251) #define NERR_MaxLenExceeded (NERR_BASE + 254) #define NERR_BadComponent (NERR_BASE + 256) #define NERR_CantType (NERR_BASE + 257) #define NERR_TooManyEntries (NERR_BASE + 262) #define NERR_ProfileFileTooBig (NERR_BASE + 270) #define NERR_ProfileOffset (NERR_BASE + 271) #define NERR_ProfileCleanup (NERR_BASE + 272) #define NERR_ProfileUnknownCmd (NERR_BASE + 273) #define NERR_ProfileLoadErr (NERR_BASE + 274) #define NERR_ProfileSaveErr (NERR_BASE + 275) #define NERR_LogOverflow (NERR_BASE + 277) #define NERR_LogFileChanged (NERR_BASE + 278) #define NERR_LogFileCorrupt (NERR_BASE + 279) #define NERR_SourceIsDir (NERR_BASE + 280) #define NERR_BadSource (NERR_BASE + 281) #define NERR_BadDest (NERR_BASE + 282) #define NERR_DifferentServers (NERR_BASE + 283) #define NERR_RunSrvPaused (NERR_BASE + 285) #define NERR_ErrCommRunSrv (NERR_BASE + 289) #define NERR_ErrorExecingGhost (NERR_BASE + 291) #define NERR_ShareNotFound (NERR_BASE + 292) #define NERR_InvalidLana (NERR_BASE + 300) #define NERR_OpenFiles (NERR_BASE + 301) #define NERR_ActiveConns (NERR_BASE + 302) #define NERR_BadPasswordCore (NERR_BASE + 303) #define NERR_DevInUse (NERR_BASE + 304) #define NERR_LocalDrive (NERR_BASE + 305) #define NERR_AlertExists (NERR_BASE + 330) #define NERR_TooManyAlerts (NERR_BASE + 331) #define NERR_NoSuchAlert (NERR_BASE + 332) #define NERR_BadRecipient (NERR_BASE + 333) #define NERR_AcctLimitExceeded (NERR_BASE + 334) #define NERR_InvalidLogSeek (NERR_BASE + 340) #define NERR_BadUasConfig (NERR_BASE + 350) #define NERR_InvalidUASOp (NERR_BASE + 351) #define NERR_LastAdmin (NERR_BASE + 352) #define NERR_DCNotFound (NERR_BASE + 353) #define NERR_LogonTrackingError (NERR_BASE + 354) #define NERR_NetlogonNotStarted (NERR_BASE + 355) #define NERR_CanNotGrowUASFile (NERR_BASE + 356) #define NERR_TimeDiffAtDC (NERR_BASE + 357) #define NERR_PasswordMismatch (NERR_BASE + 358) #define NERR_NoSuchServer (NERR_BASE + 360) #define NERR_NoSuchSession (NERR_BASE + 361) #define NERR_NoSuchConnection (NERR_BASE + 362) #define NERR_TooManyServers (NERR_BASE + 363) #define NERR_TooManySessions (NERR_BASE + 364) #define NERR_TooManyConnections (NERR_BASE + 365) #define NERR_TooManyFiles (NERR_BASE + 366) #define NERR_NoAlternateServers (NERR_BASE + 367) #define NERR_TryDownLevel (NERR_BASE + 370) #define NERR_UPSDriverNotStarted (NERR_BASE + 380) #define NERR_UPSInvalidConfig (NERR_BASE + 381) #define NERR_UPSInvalidCommPort (NERR_BASE + 382) #define NERR_UPSSignalAsserted (NERR_BASE + 383) #define NERR_UPSShutdownFailed (NERR_BASE + 384) #define NERR_BadDosRetCode (NERR_BASE + 400) #define NERR_ProgNeedsExtraMem (NERR_BASE + 401) #define NERR_BadDosFunction (NERR_BASE + 402) #define NERR_RemoteBootFailed (NERR_BASE + 403) #define NERR_BadFileCheckSum (NERR_BASE + 404) #define NERR_NoRplBootSystem (NERR_BASE + 405) #define NERR_RplLoadrNetBiosErr (NERR_BASE + 406) #define NERR_RplLoadrDiskErr (NERR_BASE + 407) #define NERR_ImageParamErr (NERR_BASE + 408) #define NERR_TooManyImageParams (NERR_BASE + 409) #define NERR_NonDosFloppyUsed (NERR_BASE + 410) #define NERR_RplBootRestart (NERR_BASE + 411) #define NERR_RplSrvrCallFailed (NERR_BASE + 412) #define NERR_CantConnectRplSrvr (NERR_BASE + 413) #define NERR_CantOpenImageFile (NERR_BASE + 414) #define NERR_CallingRplSrvr (NERR_BASE + 415) #define NERR_StartingRplBoot (NERR_BASE + 416) #define NERR_RplBootServiceTerm (NERR_BASE + 417) #define NERR_RplBootStartFailed (NERR_BASE + 418) #define NERR_RPL_CONNECTED (NERR_BASE + 419) #define NERR_BrowserConfiguredToNotRun (NERR_BASE + 450) #define NERR_RplNoAdaptersStarted (NERR_BASE + 510) #define NERR_RplBadRegistry (NERR_BASE + 511) #define NERR_RplBadDatabase (NERR_BASE + 512) #define NERR_RplRplfilesShare (NERR_BASE + 513) #define NERR_RplNotRplServer (NERR_BASE + 514) #define NERR_RplCannotEnum (NERR_BASE + 515) #define NERR_RplWkstaInfoCorrupted (NERR_BASE + 516) #define NERR_RplWkstaNotFound (NERR_BASE + 517) #define NERR_RplWkstaNameUnavailable (NERR_BASE + 518) #define NERR_RplProfileInfoCorrupted (NERR_BASE + 519) #define NERR_RplProfileNotFound (NERR_BASE + 520) #define NERR_RplProfileNameUnavailable (NERR_BASE + 521) #define NERR_RplProfileNotEmpty (NERR_BASE + 522) #define NERR_RplConfigInfoCorrupted (NERR_BASE + 523) #define NERR_RplConfigNotFound (NERR_BASE + 524) #define NERR_RplAdapterInfoCorrupted (NERR_BASE + 525) #define NERR_RplInternal (NERR_BASE + 526) #define NERR_RplVendorInfoCorrupted (NERR_BASE + 527) #define NERR_RplBootInfoCorrupted (NERR_BASE + 528) #define NERR_RplWkstaNeedsUserAcct (NERR_BASE + 529) #define NERR_RplNeedsRPLUSERAcct (NERR_BASE + 530) #define NERR_RplBootNotFound (NERR_BASE + 531) #define NERR_RplIncompatibleProfile (NERR_BASE + 532) #define NERR_RplAdapterNameUnavailable (NERR_BASE + 533) #define NERR_RplConfigNotEmpty (NERR_BASE + 534) #define NERR_RplBootInUse (NERR_BASE + 535) #define NERR_RplBackupDatabase (NERR_BASE + 536) #define NERR_RplAdapterNotFound (NERR_BASE + 537) #define NERR_RplVendorNotFound (NERR_BASE + 538) #define NERR_RplVendorNameUnavailable (NERR_BASE + 539) #define NERR_RplBootNameUnavailable (NERR_BASE + 540) #define NERR_RplConfigNameUnavailable (NERR_BASE + 541) #define NERR_DfsInternalCorruption (NERR_BASE + 560) #define NERR_DfsVolumeDataCorrupt (NERR_BASE + 561) #define NERR_DfsNoSuchVolume (NERR_BASE + 562) #define NERR_DfsVolumeAlreadyExists (NERR_BASE + 563) #define NERR_DfsAlreadyShared (NERR_BASE + 564) #define NERR_DfsNoSuchShare (NERR_BASE + 565) #define NERR_DfsNotALeafVolume (NERR_BASE + 566) #define NERR_DfsLeafVolume (NERR_BASE + 567) #define NERR_DfsVolumeHasMultipleServers (NERR_BASE + 568) #define NERR_DfsCantCreateJunctionPoint (NERR_BASE + 569) #define NERR_DfsServerNotDfsAware (NERR_BASE + 570) #define NERR_DfsBadRenamePath (NERR_BASE + 571) #define NERR_DfsVolumeIsOffline (NERR_BASE + 572) #define NERR_DfsInternalError (NERR_BASE + 590) #define MAX_NERR (NERR_BASE + 899) #endif ================================================ FILE: wine/windows/lmjoin.h ================================================ /* * Copyright 2005 Ulrich Czekalla (For CodeWeavers) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMJOIN_H #define __WINE_LMJOIN_H #ifdef __cplusplus extern "C" { #endif typedef enum tagNETSETUP_JOIN_STATUS { NetSetupUnknownStatus = 0, NetSetupUnjoined, NetSetupWorkgroupName, NetSetupDomainName } NETSETUP_JOIN_STATUS, *PNETSETUP_JOIN_STATUS; NET_API_STATUS NET_API_FUNCTION NetGetJoinInformation( LPCWSTR Server, LPWSTR *Name, PNETSETUP_JOIN_STATUS type); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/lmmsg.h ================================================ /* * Copyright (C) 2006 Robert Reif * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _LMMSG_ #define _LMMSG_ #ifdef __cplusplus extern "C" { #endif #define MSGNAME_NOT_FORWARDED 0x00 #define MSGNAME_FORWARDED_TO 0x04 #define MSGNAME_FORWARDED_FROM 0x10 typedef struct _MSG_INFO_0 { LPWSTR msgi0_name; } MSG_INFO_0, *PMSG_INFO_0, *LPMSG_INFO_0; typedef struct _MSG_INFO_1 { LPWSTR msgi1_name; DWORD msgi1_forward_flag; LPWSTR msgi1_forward; } MSG_INFO_1, *PMSG_INFO_1, *LPMSG_INFO_1; NET_API_STATUS NET_API_FUNCTION NetMessageBufferSend(LPCWSTR,LPCWSTR,LPCWSTR,LPBYTE,DWORD); NET_API_STATUS NET_API_FUNCTION NetMessageNameAdd(LPCWSTR,LPCWSTR); NET_API_STATUS NET_API_FUNCTION NetMessageNameDel(LPCWSTR,LPCWSTR); NET_API_STATUS NET_API_FUNCTION NetMessageNameEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); NET_API_STATUS NET_API_FUNCTION NetMessageNameGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/lmserver.h ================================================ /* * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _LMSERVER_ #define _LMSERVER_ #include #include #ifdef __cplusplus extern "C" { #endif typedef struct _SERVER_INFO_100 { DWORD sv100_platform_id; LMSTR sv100_name; } SERVER_INFO_100, *PSERVER_INFO_100, *LPSERVER_INFO_100; typedef struct _SERVER_INFO_101 { DWORD sv101_platform_id; LMSTR sv101_name; DWORD sv101_version_major; DWORD sv101_version_minor; DWORD sv101_type; LMSTR sv101_comment; } SERVER_INFO_101, *PSERVER_INFO_101, *LPSERVER_INFO_101; NET_API_STATUS WINAPI NetServerEnum(LMCSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,DWORD,LMCSTR,LPDWORD); NET_API_STATUS WINAPI NetServerEnumEx(LMCSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,DWORD,LMCSTR,LMCSTR); NET_API_STATUS WINAPI NetServerGetInfo(LMSTR,DWORD,LPBYTE*); BOOL WINAPI SetServiceBits(SERVICE_STATUS_HANDLE,DWORD,BOOL,BOOL); #define SV_TYPE_WORKSTATION 0x00000001 #define SV_TYPE_SERVER 0x00000002 #define SV_TYPE_SQLSERVER 0x00000004 #define SV_TYPE_DOMAIN_CTRL 0x00000008 #define SV_TYPE_DOMAIN_BAKCTRL 0x00000010 #define SV_TYPE_TIME_SOURCE 0x00000020 #define SV_TYPE_AFP 0x00000040 #define SV_TYPE_NOVELL 0x00000080 #define SV_TYPE_DOMAIN_MEMBER 0x00000100 #define SV_TYPE_PRINTQ_SERVER 0x00000200 #define SV_TYPE_DIALIN_SERVER 0x00000400 #define SV_TYPE_XENIX_SERVER 0x00000800 #define SV_TYPE_SERVER_UNIX SV_TYPE_XENIX_SERVER #define SV_TYPE_NT 0x00001000 #define SV_TYPE_WFW 0x00002000 #define SV_TYPE_SERVER_MFPN 0x00004000 #define SV_TYPE_SERVER_NT 0x00008000 #define SV_TYPE_POTENTIAL_BROWSER 0x00010000 #define SV_TYPE_BACKUP_BROWSER 0x00020000 #define SV_TYPE_MASTER_BROWSER 0x00040000 #define SV_TYPE_DOMAIN_MASTER 0x00080000 #define SV_TYPE_SERVER_OSF 0x00100000 #define SV_TYPE_SERVER_VMS 0x00200000 #define SV_TYPE_WINDOWS 0x00400000 #define SV_TYPE_DFS 0x00800000 #define SV_TYPE_CLUSTER_NT 0x01000000 #define SV_TYPE_TERMINALSERVER 0x02000000 #define SV_TYPE_CLUSTER_VS_NT 0x04000000 #define SV_TYPE_DCE 0x10000000 #define SV_TYPE_ALTERNATE_XPORT 0x20000000 #define SV_TYPE_LOCAL_LIST_ONLY 0x40000000 #define SV_TYPE_DOMAIN_ENUM 0x80000000 #define SV_TYPE_ALL 0xFFFFFFFF #ifdef __cplusplus } #endif #endif /* ndef _LMSERVER_ */ ================================================ FILE: wine/windows/lmshare.h ================================================ /* * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _LMSHARE_H #define _LMSHARE_H #ifdef __cplusplus extern "C" { #endif #include typedef struct _SHARE_INFO_0 { LMSTR shi0_netname; } SHARE_INFO_0, *PSHARE_INFO_0, *LPSHARE_INFO_0; typedef struct _SHARE_INFO_1 { LMSTR shi1_netname; DWORD shi1_type; LMSTR shi1_remark; } SHARE_INFO_1, *PSHARE_INFO_1, *LPSHARE_INFO_1; typedef struct _SHARE_INFO_2 { LMSTR shi2_netname; DWORD shi2_type; LMSTR shi2_remark; DWORD shi2_permissions; DWORD shi2_max_uses; DWORD shi2_current_uses; LMSTR shi2_path; LMSTR shi2_passwd; } SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2; typedef struct _SHARE_INFO_502 { LMSTR shi502_netname; DWORD shi502_type; LMSTR shi502_remark; DWORD shi502_permissions; DWORD shi502_max_uses; DWORD shi502_current_uses; LMSTR shi502_path; LMSTR shi502_passwd; DWORD shi502_reserved; PSECURITY_DESCRIPTOR shi502_security_descriptor; } SHARE_INFO_502, *PSHARE_INFO_502, *LPSHARE_INFO_502; NET_API_STATUS WINAPI NetShareAdd(LMSTR,DWORD,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetShareCheck(LMSTR,LMSTR,LPDWORD); NET_API_STATUS WINAPI NetShareDel(LMSTR,LMSTR,DWORD); NET_API_STATUS WINAPI NetShareDelEx(LMSTR,DWORD,LPBYTE); NET_API_STATUS WINAPI NetShareDelSticky(LMSTR,LMSTR,DWORD); NET_API_STATUS WINAPI NetShareEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetShareEnumSticky(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetShareGetInfo(LMSTR,LMSTR,DWORD,LPBYTE*); NET_API_STATUS WINAPI NetShareSetInfo(LMSTR,LMSTR,DWORD,LPBYTE,LPDWORD); #define STYPE_DISKTREE 0 #define STYPE_PRINTQ 1 #define STYPE_DEVICE 2 #define STYPE_IPC 3 #define STYPE_SPECIAL 0x80000000 NET_API_STATUS WINAPI NetSessionDel(LMSTR,LMSTR,LMSTR); NET_API_STATUS WINAPI NetSessionEnum(LMSTR,LMSTR,LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetSessionGetInfo(LMSTR,LMSTR,LMSTR,DWORD,LPBYTE*); #ifdef __cplusplus } #endif #endif /* ndef _LMSHARE_H */ ================================================ FILE: wine/windows/lmstats.h ================================================ /* * Copyright 2003 Geoff Thorpe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMSTATS_H #define __WINE_LMSTATS_H #include #ifdef __cplusplus extern "C" { #endif typedef struct _STAT_WORKSTATION_0 { LARGE_INTEGER StatisticsStartTime; LARGE_INTEGER BytesReceived; LARGE_INTEGER SmbsReceived; LARGE_INTEGER PagingReadBytesRequested; LARGE_INTEGER NonPagingReadBytesRequested; LARGE_INTEGER CacheReadBytesRequested; LARGE_INTEGER NetworkReadBytesRequested; LARGE_INTEGER BytesTransmitted; LARGE_INTEGER SmbsTransmitted; LARGE_INTEGER PagingWriteBytesRequested; LARGE_INTEGER NonPagingWriteBytesRequested; LARGE_INTEGER CacheWriteBytesRequested; LARGE_INTEGER NetworkWriteBytesRequested; DWORD InitiallyFailedOperations; DWORD FailedCompletionOperations; DWORD ReadOperations; DWORD RandomReadOperations; DWORD ReadSmbs; DWORD LargeReadSmbs; DWORD SmallReadSmbs; DWORD WriteOperations; DWORD RandomWriteOperations; DWORD WriteSmbs; DWORD LargeWriteSmbs; DWORD SmallWriteSmbs; DWORD RawReadsDenied; DWORD RawWritesDenied; DWORD NetworkErrors; DWORD Sessions; DWORD FailedSessions; DWORD Reconnects; DWORD CoreConnects; DWORD Lanman20Connects; DWORD Lanman21Connects; DWORD LanmanNtConnects; DWORD ServerDisconnects; DWORD HungSessions; DWORD UseCount; DWORD FailedUseCount; DWORD CurrentCommands; } STAT_WORKSTATION_0, *PSTAT_WORKSTATION_0, *LPSTAT_WORKSTATION_0; typedef struct _STAT_SERVER_0 { DWORD sts0_start; DWORD sts0_fopens; DWORD sts0_devopens; DWORD sts0_jobsqueued; DWORD sts0_sopens; DWORD sts0_stimedout; DWORD sts0_serrorout; DWORD sts0_pwerrors; DWORD sts0_permerrors; DWORD sts0_syserrors; DWORD sts0_bytessent_low; DWORD sts0_bytessent_high; DWORD sts0_bytesrcvd_low; DWORD sts0_bytesrcvd_high; DWORD sts0_avresponse; DWORD sts0_reqbufneed; DWORD sts0_bigbufneed; } STAT_SERVER_0, *PSTAT_SERVER_0, *LPSTAT_SERVER_0; NET_API_STATUS WINAPI NetStatisticsGet(LPWSTR server, LPWSTR service, DWORD level, DWORD options, LPBYTE *bufptr); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/lmuse.h ================================================ /* * Copyright (C) 2007 Tim Schwartz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _LMUSE_H #define _LMUSE_H #ifdef __cplusplus extern "C" { #endif #include "lmcons.h" #include "lmuseflg.h" #define USE_LOCAL_PARMNUM 1 #define USE_REMOTE_PARMNUM 2 #define USE_PASSWORD_PARMNUM 3 #define USE_ASGTYPE_PARMNUM 4 #define USE_USERNAME_PARMNUM 5 #define USE_DOMAINNAME_PARMNUM 6 #define USE_OK 0 #define USE_PAUSED 1 #define USE_SESSLOST 2 #define USE_DISCONN USE_SESSLOST #define USE_NETERR 3 #define USE_CONN 4 #define USE_RECONN 5 #define USE_WILDCARD ((DWORD)-1) #define USE_DISKDEV 0 #define USE_SPOOLDEV 1 #define USE_CHARDEV 2 #define USE_IPC 3 typedef struct _USE_INFO_1 { LMSTR ui1_local; LMSTR ui1_remote; LMSTR ui1_password; DWORD ui1_status; DWORD ui1_asg_type; DWORD ui1_refcount; DWORD ui1_usecount; } USE_INFO_1, *PUSE_INFO_1, *LPUSE_INFO_1; typedef struct _USE_INFO_2 { LMSTR ui2_local; LMSTR ui2_remote; LMSTR ui2_password; DWORD ui2_status; DWORD ui2_asg_type; DWORD ui2_refcount; DWORD ui2_usecount; LMSTR ui2_username; LMSTR ui2_domainname; } USE_INFO_2, *PUSE_INFO_2, *LPUSE_INFO_2; NET_API_STATUS WINAPI NetUseAdd(LMSTR,DWORD,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetUseDel(LMSTR,LMSTR,DWORD); NET_API_STATUS WINAPI NetUseEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetUseGetInfo(LMSTR,LMSTR,DWORD,LPBYTE*); #ifdef __cplusplus } #endif #endif /* _LMUSE_H */ ================================================ FILE: wine/windows/lmuseflg.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMUSEFLG_H #define __WINE_LMUSEFLG_H #define USE_NOFORCE 0 #define USE_FORCE 1 #define USE_LOTS_OF_FORCE 2 #endif /* __WINE_LMUSEFLG_H */ ================================================ FILE: wine/windows/lmwksta.h ================================================ /* * Copyright 2002 Andriy Palamarchuk * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LMWKSTA_H #define __WINE_LMWKSTA_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct _WKSTA_TRANSPORT_INFO_0 { DWORD wkti0_quality_of_service; DWORD wkti0_number_of_vcs; LMSTR wkti0_transport_name; LMSTR wkti0_transport_address; BOOL wkti0_wan_ish; } WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0; typedef struct _WKSTA_USER_INFO_0 { LMSTR wkui0_username; } WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0; typedef struct _WKSTA_USER_INFO_1 { LMSTR wkui1_username; LMSTR wkui1_logon_domain; LMSTR wkui1_oth_domains; LMSTR wkui1_logon_server; } WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1; typedef struct _WKSTA_USER_INFO_1101 { LMSTR wkui1101_oth_domains; } WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101; typedef struct _WKSTA_INFO_100 { DWORD wki100_platform_id; LMSTR wki100_computername; LMSTR wki100_langroup; DWORD wki100_ver_major; DWORD wki100_ver_minor; } WKSTA_INFO_100, *PWKSTA_INFO_100, *LPWKSTA_INFO_100; typedef struct _WKSTA_INFO_101 { DWORD wki101_platform_id; LMSTR wki101_computername; LMSTR wki101_langroup; DWORD wki101_ver_major; DWORD wki101_ver_minor; LMSTR wki101_lanroot; } WKSTA_INFO_101, *PWKSTA_INFO_101, *LPWKSTA_INFO_101; typedef struct _WKSTA_INFO_102 { DWORD wki102_platform_id; LMSTR wki102_computername; LMSTR wki102_langroup; DWORD wki102_ver_major; DWORD wki102_ver_minor; LMSTR wki102_lanroot; DWORD wki102_logged_on_users; } WKSTA_INFO_102, *PWKSTA_INFO_102, *LPWKSTA_INFO_102; /* workstation */ NET_API_STATUS WINAPI NetWkstaGetInfo(LMSTR,DWORD,LPBYTE*); NET_API_STATUS WINAPI NetWkstaSetInfo(LMSTR,DWORD,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetWkstaTransportAdd(LMSTR,DWORD,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetWkstaTransportDel(LMSTR,LMSTR,DWORD); NET_API_STATUS WINAPI NetWkstaTransportEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR,DWORD,LPBYTE*); NET_API_STATUS WINAPI NetWkstaUserSetInfo(LMSTR,DWORD,LPBYTE,LPDWORD); NET_API_STATUS WINAPI NetWkstaUserEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/loadperf.h ================================================ /* * Copyright (C) 2009 Andrey Turkin * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LOADPERF_H #define __WINE_LOADPERF_H #ifdef __cplusplus extern "C" { #endif DWORD WINAPI InstallPerfDllA(LPCSTR, LPCSTR, ULONG_PTR); DWORD WINAPI InstallPerfDllW(LPCWSTR, LPCWSTR, ULONG_PTR); #define InstallPerfDll WINELIB_NAME_AW(InstallPerfDll) DWORD WINAPI LoadPerfCounterTextStringsA(LPCSTR, BOOL); DWORD WINAPI LoadPerfCounterTextStringsW(LPCWSTR, BOOL); #define LoadPerfCounterTextStrings WINELIB_NAME_AW(LoadPerfCounterTextStrings) DWORD WINAPI UnloadPerfCounterTextStringsA(LPCSTR, BOOL); DWORD WINAPI UnloadPerfCounterTextStringsW(LPCWSTR, BOOL); #define UnloadPerfCounterTextStrings WINELIB_NAME_AW(UnloadPerfCounterTextStrings) #ifdef __cplusplus } #endif #endif /* __WINE_LOADPERF_H */ ================================================ FILE: wine/windows/lowlevelmonitorconfigurationapi.h ================================================ /* * Copyright 2014 Michael Müller for Pipelight * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LOWLEVELMONITORCONFIGURATIONAPI_H #define __WINE_LOWLEVELMONITORCONFIGURATIONAPI_H #ifdef __cplusplus extern "C" { #endif typedef struct _MC_TIMING_REPORT { BYTE bTimingStatusByte; DWORD dwHorizontalFrequencyInHZ; DWORD dwVerticalFrequencyInHZ; } MC_TIMING_REPORT, *LPMC_TIMING_REPORT; typedef enum _MC_VCP_CODE_TYPE { MC_MOMENTARY, MC_SET_PARAMETER } MC_VCP_CODE_TYPE, *LPMC_VCP_CODE_TYPE; #ifdef __cplusplus } #endif #endif /* __WINE_LOWLEVELMONITORCONFIGURATIONAPI_H */ ================================================ FILE: wine/windows/lzexpand.h ================================================ /* Includefile for the decompression library, lzexpand * * Copyright 1996 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_LZEXPAND_H #define __WINE_LZEXPAND_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #define LZERROR_BADINHANDLE -1 /* -1 */ #define LZERROR_BADOUTHANDLE -2 /* -2 */ #define LZERROR_READ -3 /* -3 */ #define LZERROR_WRITE -4 /* -4 */ #define LZERROR_GLOBALLOC -5 /* -5 */ #define LZERROR_GLOBLOCK -6 /* -6 */ #define LZERROR_BADVALUE -7 /* -7 */ #define LZERROR_UNKNOWNALG -8 /* -8 */ VOID WINAPI LZDone(void); LONG WINAPI CopyLZFile(HFILE,HFILE); HFILE WINAPI LZOpenFileA(LPSTR,LPOFSTRUCT,WORD); HFILE WINAPI LZOpenFileW(LPWSTR,LPOFSTRUCT,WORD); #define LZOpenFile WINELIB_NAME_AW(LZOpenFile) INT WINAPI LZRead(INT,LPSTR,INT); INT WINAPI LZStart(void); void WINAPI LZClose(HFILE); LONG WINAPI LZCopy(HFILE,HFILE); HFILE WINAPI LZInit(HFILE); LONG WINAPI LZSeek(HFILE,LONG,INT); INT WINAPI GetExpandedNameA(LPSTR,LPSTR); INT WINAPI GetExpandedNameW(LPWSTR,LPWSTR); #define GetExpandedName WINELIB_NAME_AW(GetExpandedName) #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_LZEXPAND_H */ ================================================ FILE: wine/windows/mapi.h ================================================ /* * Copyright (C) 2000 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPI_H #define MAPI_H #ifdef __cplusplus extern "C" { #endif /* Some types */ #ifndef __LHANDLE #define __LHANDLE typedef ULONG_PTR LHANDLE, *LPLHANDLE; #endif #define lhSessionNull ((LHANDLE)0) #ifndef WINE_FLAGS_DEFINED #define WINE_FLAGS_DEFINED typedef ULONG FLAGS; #endif typedef ULONG *LPULONG; typedef struct { ULONG ulReserved; ULONG flFlags; ULONG nPosition; LPSTR lpszPathName; LPSTR lpszFileName; LPVOID lpFileType; } MapiFileDesc, *lpMapiFileDesc; typedef struct { ULONG ulReserved; ULONG flFlags; ULONG nPosition; PWSTR lpszPathName; PWSTR lpszFileName; PVOID lpFileType; } MapiFileDescW, *lpMapiFileDescW; #ifndef MAPI_ORIG #define MAPI_ORIG 0 #define MAPI_TO 1 #define MAPI_CC 2 #define MAPI_BCC 3 #endif typedef struct { ULONG ulReserved; ULONG ulRecipClass; LPSTR lpszName; LPSTR lpszAddress; ULONG ulEIDSize; LPVOID lpEntryID; } MapiRecipDesc, *lpMapiRecipDesc; typedef struct { ULONG ulReserved; ULONG ulRecipClass; PWSTR lpszName; PWSTR lpszAddress; ULONG ulEIDSize; PVOID lpEntryID; } MapiRecipDescW, *lpMapiRecipDescW; typedef struct { ULONG ulReserved; LPSTR lpszSubject; LPSTR lpszNoteText; LPSTR lpszMessageType; LPSTR lpszDateReceived; LPSTR lpszConversationID; FLAGS flFlags; lpMapiRecipDesc lpOriginator; ULONG nRecipCount; lpMapiRecipDesc lpRecips; ULONG nFileCount; lpMapiFileDesc lpFiles; } MapiMessage, *lpMapiMessage; typedef struct { ULONG ulReserved; PWSTR lpszSubject; PWSTR lpszNoteText; PWSTR lpszMessageType; PWSTR lpszDateReceived; PWSTR lpszConversationID; FLAGS flFlags; lpMapiRecipDescW lpOriginator; ULONG nRecipCount; lpMapiRecipDescW lpRecips; ULONG nFileCount; lpMapiFileDescW lpFiles; } MapiMessageW, *lpMapiMessageW; /* Error codes */ #ifndef SUCCESS_SUCCESS #define SUCCESS_SUCCESS 0 #endif #define MAPI_USER_ABORT 1 #define MAPI_E_USER_ABORT MAPI_USER_ABORT #define MAPI_E_FAILURE 2 #define MAPI_E_LOGON_FAILURE 3 #define MAPI_E_LOGIN_FAILURE MAPI_E_LOGON_FAILURE #define MAPI_E_DISK_FULL 4 #define MAPI_E_INSUFFICIENT_MEMORY 5 #define MAPI_E_ACCESS_DENIED 6 #define MAPI_E_TOO_MANY_SESSIONS 8 #define MAPI_E_TOO_MANY_FILES 9 #define MAPI_E_TOO_MANY_RECIPIENTS 10 #define MAPI_E_ATTACHMENT_NOT_FOUND 11 #define MAPI_E_ATTACHMENT_OPEN_FAILURE 12 #define MAPI_E_ATTACHMENT_WRITE_FAILURE 13 #define MAPI_E_UNKNOWN_RECIPIENT 14 #define MAPI_E_BAD_RECIPTYPE 15 #define MAPI_E_NO_MESSAGES 16 #define MAPI_E_INVALID_MESSAGE 17 #define MAPI_E_TEXT_TOO_LARGE 18 #define MAPI_E_INVALID_SESSION 19 #define MAPI_E_TYPE_NOT_SUPPORTED 20 #define MAPI_E_AMBIGUOUS_RECIPIENT 21 #define MAPI_E_AMBIG_RECIP MAPI_E_AMBIGUOUS_RECIPIENT #define MAPI_E_MESSAGE_IN_USE 22 #define MAPI_E_NETWORK_FAILURE 23 #define MAPI_E_INVALID_EDITFIELDS 24 #define MAPI_E_INVALID_RECIPS 25 #define MAPI_E_NOT_SUPPORTED 26 #define MAPI_E_UNICODE_NOT_SUPPORTED 27 /* MAPILogon */ #ifndef MAPI_LOGON_UI #define MAPI_LOGON_UI 0x00000001 #endif #ifndef MAPI_NEW_SESSION #define MAPI_NEW_SESSION 0x00000002 #endif #ifndef MAPI_EXTENDED #define MAPI_EXTENDED 0x00000020 #endif #ifndef MAPI_FORCE_DOWNLOAD #define MAPI_FORCE_DOWNLOAD 0x00001000 #endif #ifndef MAPI_PASSWORD_UI #define MAPI_PASSWORD_UI 0x00020000 #endif /* MAPISendMail */ #define MAPI_DIALOG 0x00000008 /* MAPISendMailW */ #define MAPI_FORCE_UNICODE 0x00040000 /* API typedefs and prototypes */ typedef ULONG (WINAPI MAPIADDRESS)(LHANDLE,ULONG_PTR,LPSTR,ULONG,LPSTR,ULONG,lpMapiRecipDesc,FLAGS,ULONG,LPULONG,lpMapiRecipDesc*); typedef MAPIADDRESS *LPMAPIADDRESS; MAPIADDRESS MAPIAddress; typedef ULONG (WINAPI MAPIDELETEMAIL)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG); typedef MAPIDELETEMAIL *LPMAPIDELETEMAIL; MAPIDELETEMAIL MAPIDeleteMail; typedef ULONG (WINAPI MAPIDETAILS)(LHANDLE,ULONG_PTR,lpMapiRecipDesc,FLAGS,ULONG); typedef MAPIDETAILS *LPMAPIDETAILS; MAPIDETAILS MAPIDetails; typedef ULONG (WINAPI MAPIFINDNEXT)(LHANDLE,ULONG_PTR,LPSTR,LPSTR,FLAGS,ULONG,LPSTR); typedef MAPIFINDNEXT *LPMAPIFINDNEXT; MAPIFINDNEXT MAPIFindNext; #ifndef MAPIFREEBUFFER_DEFINED #define MAPIFREEBUFFER_DEFINED typedef ULONG (WINAPI MAPIFREEBUFFER)(LPVOID); typedef MAPIFREEBUFFER *LPMAPIFREEBUFFER; MAPIFREEBUFFER MAPIFreeBuffer; #endif typedef ULONG (WINAPI MAPILOGOFF)(LHANDLE,ULONG_PTR,FLAGS,ULONG); typedef MAPILOGOFF *LPMAPILOGOFF; MAPILOGOFF MAPILogoff; typedef ULONG (WINAPI MAPILOGON)(ULONG_PTR,LPSTR,LPSTR,FLAGS,ULONG,LPLHANDLE); typedef MAPILOGON *LPMAPILOGON; MAPILOGON MAPILogon; typedef ULONG (WINAPI MAPIREADMAIL)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG,lpMapiMessage); typedef MAPIREADMAIL *LPMAPIREADMAIL; MAPIREADMAIL MAPIReadMail; typedef ULONG (WINAPI MAPIRESOLVENAME)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG,lpMapiRecipDesc*); typedef MAPIRESOLVENAME *LPMAPIRESOLVENAME; MAPIRESOLVENAME MAPIResolveName; typedef ULONG (WINAPI MAPISAVEMAIL)(LHANDLE,ULONG_PTR,lpMapiMessage,FLAGS,ULONG,LPSTR); typedef MAPISAVEMAIL *LPMAPISAVEMAIL; MAPISAVEMAIL MAPISaveMail; typedef ULONG (WINAPI MAPISENDDOCUMENTS)(ULONG_PTR,LPSTR,LPSTR,LPSTR,ULONG); typedef MAPISENDDOCUMENTS *LPMAPISENDDOCUMENTS; MAPISENDDOCUMENTS MAPISendDocuments; typedef ULONG (WINAPI MAPISENDMAIL)(LHANDLE,ULONG_PTR,lpMapiMessage,FLAGS,ULONG); typedef MAPISENDMAIL *LPMAPISENDMAIL; MAPISENDMAIL MAPISendMail; typedef ULONG (WINAPI MAPISENDMAILW)(LHANDLE,ULONG_PTR,lpMapiMessageW,FLAGS,ULONG); typedef MAPISENDMAILW *LPMAPISENDMAILW; MAPISENDMAILW MAPISendMailW; #ifdef __cplusplus } #endif #endif /* MAPI_H */ ================================================ FILE: wine/windows/mapicode.h ================================================ /* * Status codes returned by MAPI * * Copyright (C) 2002 Aric Stewart * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPICODE_H #define MAPICODE_H #include #define MAKE_MAPI_SCODE(sev,fac,code) \ ((SCODE)(((ULONG)(sev)<<31)|((ULONG)(fac)<<16)|((ULONG)(code)))) #define MAKE_MAPI_E(e) (MAKE_MAPI_SCODE(1,FACILITY_ITF,(e))) #define MAKE_MAPI_S(e) (MAKE_MAPI_SCODE(0,FACILITY_ITF,(e))) #ifndef SUCCESS_SUCCESS #define SUCCESS_SUCCESS __MSABI_LONG(0) #endif /* Errors */ #define MAPI_E_ACCOUNT_DISABLED ((SCODE)0x80040124) #define MAPI_E_AMBIGUOUS_RECIP ((SCODE)0x80040700) #define MAPI_E_BAD_CHARWIDTH ((SCODE)0x80040103) #define MAPI_E_BAD_COLUMN ((SCODE)0x80040118) #define MAPI_E_BAD_VALUE ((SCODE)0x80040301) #define MAPI_E_BUSY ((SCODE)0x8004010B) #define MAPI_E_CALL_FAILED E_FAIL #define MAPI_E_CANCEL ((SCODE)0x80040501) #define MAPI_E_COLLISION ((SCODE)0x80040604) #define MAPI_E_COMPUTED ((SCODE)0x8004011A) #define MAPI_E_CORRUPT_DATA ((SCODE)0x8004011B) #define MAPI_E_CORRUPT_STORE ((SCODE)0x80040600) #define MAPI_E_DECLINE_COPY ((SCODE)0x80040306) #define MAPI_E_DISK_ERROR ((SCODE)0x80040116) #define MAPI_E_END_OF_SESSION ((SCODE)0x80040200) #define MAPI_E_EXTENDED_ERROR ((SCODE)0x80040119) #define MAPI_E_FAILONEPROVIDER ((SCODE)0x8004011D) #define MAPI_E_FOLDER_CYCLE ((SCODE)0x8004060B) #define MAPI_E_HAS_FOLDERS ((SCODE)0x80040609) #define MAPI_E_HAS_MESSAGES ((SCODE)0x8004060A) #define MAPI_E_INTERFACE_NOT_SUPPORTED E_NOINTERFACE #define MAPI_E_INVALID_ACCESS_TIME ((SCODE)0x80040123) #define MAPI_E_INVALID_BOOKMARK ((SCODE)0x80040405) #define MAPI_E_INVALID_ENTRYID ((SCODE)0x80040107) #define MAPI_E_INVALID_OBJECT ((SCODE)0x80040108) #define MAPI_E_INVALID_PARAMETER E_INVALIDARG #define MAPI_E_INVALID_TYPE ((SCODE)0x80040302) #define MAPI_E_INVALID_WORKSTATION_ACCOUNT ((SCODE)0x80040122) #define MAPI_E_LOGON_FAILED ((SCODE)0x80040111) #define MAPI_E_MISSING_REQUIRED_COLUMN ((SCODE)0x80040202) #define MAPI_E_NETWORK_ERROR ((SCODE)0x80040115) #define MAPI_E_NO_ACCESS E_ACCESSDENIED #define MAPI_E_NON_STANDARD ((SCODE)0x80040606) #define MAPI_E_NO_RECIPIENTS ((SCODE)0x80040607) #define MAPI_E_NO_SUPPORT ((SCODE)0x80040102) #define MAPI_E_NO_SUPPRESS ((SCODE)0x80040602) #define MAPI_E_NOT_ENOUGH_DISK ((SCODE)0x8004010D) #define MAPI_E_NOT_ENOUGH_MEMORY E_OUTOFMEMORY #define MAPI_E_NOT_ENOUGH_RESOURCES ((SCODE)0x8004010E) #define MAPI_E_NOT_FOUND ((SCODE)0x8004010F) #define MAPI_E_NOT_INITIALIZED ((SCODE)0x80040605) #define MAPI_E_NOT_IN_QUEUE ((SCODE)0x80040601) #define MAPI_E_NOT_ME ((SCODE)0x80040502) #define MAPI_E_OBJECT_CHANGED ((SCODE)0x80040109) #define MAPI_E_OBJECT_DELETED ((SCODE)0x8004010A) #define MAPI_E_PASSWORD_CHANGE_REQUIRED ((SCODE)0x80040120) #define MAPI_E_PASSWORD_EXPIRED ((SCODE)0x80040121) #define MAPI_E_SESSION_LIMIT ((SCODE)0x80040112) #define MAPI_E_STRING_TOO_LONG ((SCODE)0x80040105) #define MAPI_E_SUBMITTED ((SCODE)0x80040608) #define MAPI_E_TABLE_EMPTY ((SCODE)0x80040402) #define MAPI_E_TABLE_TOO_BIG ((SCODE)0x80040403) #define MAPI_E_TIMEOUT ((SCODE)0x80040401) #define MAPI_E_TOO_BIG ((SCODE)0x80040305) #define MAPI_E_TOO_COMPLEX ((SCODE)0x80040117) #define MAPI_E_TYPE_NO_SUPPORT ((SCODE)0x80040303) #define MAPI_E_UNABLE_TO_ABORT ((SCODE)0x80040114) #define MAPI_E_UNABLE_TO_COMPLETE ((SCODE)0x80040400) #define MAPI_E_UNCONFIGURED ((SCODE)0x8004011C) #define MAPI_E_UNEXPECTED_ID ((SCODE)0x80040307) #define MAPI_E_UNEXPECTED_TYPE ((SCODE)0x80040304) #define MAPI_E_UNKNOWN_CPID ((SCODE)0x8004011E) #define MAPI_E_UNKNOWN_ENTRYID ((SCODE)0x80040201) #define MAPI_E_UNKNOWN_FLAGS ((SCODE)0x80040106) #define MAPI_E_UNKNOWN_LCID ((SCODE)0x8004011F) #define MAPI_E_USER_CANCEL ((SCODE)0x80040113) #define MAPI_E_VERSION ((SCODE)0x80040110) #define MAPI_E_WAIT ((SCODE)0x80040500) /* Warnings */ #define MAPI_W_APPROX_COUNT ((SCODE)0x00040482) #define MAPI_W_CANCEL_MESSAGE ((SCODE)0x00040580) #define MAPI_W_ERRORS_RETURNED ((SCODE)0x00040380) #define MAPI_W_NO_SERVICE ((SCODE)0x00040203) #define MAPI_W_PARTIAL_COMPLETION ((SCODE)0x00040680) #define MAPI_W_POSITION_CHANGED ((SCODE)0x00040481) #endif /* MAPICODE_H */ ================================================ FILE: wine/windows/mapidefs.h ================================================ /* * Copyright (C) 1998 Justin Bradford * Copyright (c) 2009 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPIDEFS_H #define MAPIDEFS_H #include #include #include #include /* Some types from other headers */ #ifndef __LHANDLE #define __LHANDLE typedef ULONG_PTR LHANDLE, *LPLHANDLE; #endif #ifndef _tagCY_DEFINED #define _tagCY_DEFINED typedef union tagCY { struct { #ifdef WORDS_BIGENDIAN LONG Hi; ULONG Lo; #else ULONG Lo; LONG Hi; #endif } DUMMYSTRUCTNAME; LONGLONG int64; } CY; typedef CY CURRENCY; #endif /* _tagCY_DEFINED */ #ifndef _FILETIME_ #define _FILETIME_ typedef struct _FILETIME { #ifdef WORDS_BIGENDIAN DWORD dwHighDateTime; DWORD dwLowDateTime; #else DWORD dwLowDateTime; DWORD dwHighDateTime; #endif } FILETIME, *PFILETIME, *LPFILETIME; #endif /* Memory allocation routines */ typedef SCODE (WINAPI ALLOCATEBUFFER)(ULONG,LPVOID*); typedef SCODE (WINAPI ALLOCATEMORE)(ULONG,LPVOID,LPVOID*); typedef ULONG (WINAPI FREEBUFFER)(LPVOID); typedef ALLOCATEBUFFER *LPALLOCATEBUFFER; typedef ALLOCATEMORE *LPALLOCATEMORE; typedef FREEBUFFER *LPFREEBUFFER; /* MAPI exposed interfaces */ typedef const IID *LPCIID; typedef struct IAddrBook IAddrBook; typedef IAddrBook *LPADRBOOK; typedef struct IABContainer IABContainer; typedef IABContainer *LPABCONT; typedef struct IAttach *LPATTACH; typedef struct IDistList IDistList; typedef IDistList *LPDISTLIST; typedef struct IMailUser IMailUser; typedef IMailUser *LPMAILUSER; typedef struct IMAPIAdviseSink *LPMAPIADVISESINK; typedef struct IMAPIContainer *LPMAPICONTAINER; typedef struct IMAPIFolder *LPMAPIFOLDER; typedef struct IMAPIProgress IMAPIProgress; typedef IMAPIProgress *LPMAPIPROGRESS; typedef struct IMAPIStatus IMAPIStatus; typedef IMAPIStatus *LPMAPISTATUS; typedef struct IMessage *LPMESSAGE; typedef struct IProfSect IProfSect; typedef IProfSect *LPPROFSECT; typedef struct IProviderAdmin IProviderAdmin; typedef IProviderAdmin *LPPROVIDERADMIN; #ifndef MAPI_DIM # define MAPI_DIM 1 /* Default to one dimension for variable length arrays */ #endif /* Flags for abFlags[0] */ #define MAPI_NOTRESERVED 0x08 #define MAPI_NOW 0x10 #define MAPI_THISSESSION 0x20 #define MAPI_NOTRECIP 0x40 #define MAPI_SHORTTERM 0x80 /* Flags for abFlags[1] */ #define MAPI_COMPOUND 0x80 typedef struct _ENTRYID { BYTE abFlags[4]; BYTE ab[MAPI_DIM]; } ENTRYID, *LPENTRYID; /* MAPI GUID's */ typedef struct _MAPIUID { BYTE ab[sizeof(GUID)]; } MAPIUID, *LPMAPIUID; #define IsEqualMAPIUID(pl,pr) (!memcmp((pl),(pr),sizeof(MAPIUID))) #define MAPI_ONE_OFF_UID { 0x81,0x2b,0x1f,0xa4,0xbe,0xa3,0x10,0x19,0x9d,0x6e, \ 0x00,0xdd,0x01,0x0f,0x54,0x02 } #define MAPI_ONE_OFF_UNICODE 0x8000 #define MAPI_ONE_OFF_NO_RICH_INFO 0x0001 /* Object types */ #define MAPI_STORE 1U #define MAPI_ADDRBOOK 2U #define MAPI_FOLDER 3U #define MAPI_ABCONT 4U #define MAPI_MESSAGE 5U #define MAPI_MAILUSER 6U #define MAPI_ATTACH 7U #define MAPI_DISTLIST 8U #define MAPI_PROFSECT 9U #define MAPI_STATUS 10U #define MAPI_SESSION 11U #define MAPI_FORMINFO 12U /* Flags for various calls */ #define MAPI_MODIFY 0x00000001U /* Object can be modified */ #define MAPI_CREATE 0x00000002U /* Object can be created */ #define MAPI_ACCESS_MODIFY MAPI_MODIFY /* Want write access */ #define MAPI_ACCESS_READ 0x00000002U /* Want read access */ #define MAPI_ACCESS_DELETE 0x00000004U /* Want delete access */ #define MAPI_ACCESS_CREATE_HIERARCHY 0x00000008U #define MAPI_ACCESS_CREATE_CONTENTS 0x00000010U #define MAPI_ACCESS_CREATE_ASSOCIATED 0x00000020U #define MAPI_USE_DEFAULT 0x00000040U #define MAPI_UNICODE 0x80000000U /* Strings in this call are Unicode */ #if defined (UNICODE) || defined (__WINESRC__) #define fMapiUnicode MAPI_UNICODE #else #define fMapiUnicode 0U #endif /* IMAPISession::OpenMessageStore() flags */ #define MDB_NO_DIALOG 0x00000001 /* Types of message receivers */ #ifndef MAPI_ORIG #define MAPI_ORIG 0 /* The original author */ #define MAPI_TO 1 /* The primary message receiver */ #define MAPI_CC 2 /* A carbon copy receiver */ #define MAPI_BCC 3 /* A blind carbon copy receiver */ #define MAPI_P1 0x10000000 /* A message resend */ #define MAPI_SUBMITTED 0x80000000 /* This message has already been sent */ #endif #ifndef cchProfileNameMax #define cchProfileNameMax 64 /* Maximum length of a profile name */ #define cchProfilePassMax 64 /* Maximum length of a profile password */ #endif /* Properties: These are the contents of cells in MAPI tables, as well as the * values returned when object properties are queried. */ /* Property types */ #define PT_UNSPECIFIED 0U #define PT_NULL 1U #define PT_I2 2U #define PT_SHORT PT_I2 #define PT_LONG 3U #define PT_I4 PT_LONG #define PT_R4 4U #define PT_FLOAT PT_R4 #define PT_DOUBLE 5U #define PT_R8 PT_DOUBLE #define PT_CURRENCY 6U #define PT_APPTIME 7U #define PT_ERROR 10U #define PT_BOOLEAN 11U #define PT_OBJECT 13U #define PT_I8 20U #define PT_LONGLONG PT_I8 #define PT_STRING8 30U #define PT_UNICODE 31U #define PT_SYSTIME 64U #define PT_CLSID 72U #define PT_BINARY 258U #define MV_FLAG 0x1000 /* This property type is multi-valued (an array) */ #define MV_INSTANCE 0x2000 #define MVI_FLAG (MV_FLAG|MV_INSTANCE) #define MVI_PROP(t) ((t)|MVI_FLAG) #ifndef WINE_NO_UNICODE_MACROS # ifdef UNICODE # define PT_TSTRING PT_UNICODE # define PT_MV_TSTRING (MV_FLAG|PT_UNICODE) # define LPSZ lpszW # define LPPSZ lppszW # define MVSZ MVszW # else # define PT_TSTRING PT_STRING8 # define PT_MV_TSTRING (MV_FLAG|PT_STRING8) # define LPSZ lpszA # define LPPSZ lppszA # define MVSZ MVszA # endif #endif #define PROP_TYPE_MASK 0xFFFFU #define PROP_TYPE(t) ((t) & PROP_TYPE_MASK) #define PROP_ID(t) ((t) >> 16) #define PROP_TAG(t,id) (((id) << 16) | t) #define PROP_ID_NULL 0 #define PROP_ID_INVALID 0xFFFF #define PR_NULL PROP_TAG(PT_NULL, PROP_ID_NULL) #define CHANGE_PROP_TYPE(t,typ) ((0xFFFF0000 & t) | typ) /* Multi-valued property types */ #define PT_MV_I2 (MV_FLAG|PT_I2) #define PT_MV_SHORT PT_MV_I2 #define PT_MV_LONG (MV_FLAG|PT_LONG) #define PT_MV_I4 PT_MV_LONG #define PT_MV_R4 (MV_FLAG|PT_R4) #define PT_MV_FLOAT PT_MV_R4 #define PT_MV_DOUBLE (MV_FLAG|PT_DOUBLE) #define PT_MV_R8 PT_MV_DOUBLE #define PT_MV_CURRENCY (MV_FLAG|PT_CURRENCY) #define PT_MV_APPTIME (MV_FLAG|PT_APPTIME) #define PT_MV_SYSTIME (MV_FLAG|PT_SYSTIME) #define PT_MV_STRING8 (MV_FLAG|PT_STRING8) #define PT_MV_BINARY (MV_FLAG|PT_BINARY) #define PT_MV_UNICODE (MV_FLAG|PT_UNICODE) #define PT_MV_CLSID (MV_FLAG|PT_CLSID) #define PT_MV_I8 (MV_FLAG|PT_I8) #define PT_MV_LONGLONG PT_MV_I8 /* The property tag structure. This describes a list of columns */ typedef struct _SPropTagArray { ULONG cValues; /* Number of elements in aulPropTag */ ULONG aulPropTag[MAPI_DIM]; /* Property tags */ } SPropTagArray, *LPSPropTagArray; #define CbNewSPropTagArray(c) (offsetof(SPropTagArray,aulPropTag)+(c)*sizeof(ULONG)) #define CbSPropTagArray(p) CbNewSPropTagArray((p)->cValues) #define SizedSPropTagArray(n,id) \ struct _SPropTagArray_##id { ULONG cValues; ULONG aulPropTag[n]; } id /* Multi-valued PT_APPTIME property value */ typedef struct _SAppTimeArray { ULONG cValues; /* Number of doubles in lpat */ double *lpat; /* Pointer to double array of length cValues */ } SAppTimeArray; /* PT_BINARY property value */ typedef struct _SBinary { ULONG cb; /* Number of bytes in lpb */ LPBYTE lpb; /* Pointer to byte array of length cb */ } SBinary, *LPSBinary; /* Multi-valued PT_BINARY property value */ typedef struct _SBinaryArray { ULONG cValues; /* Number of SBinarys in lpbin */ SBinary *lpbin; /* Pointer to SBinary array of length cValues */ } SBinaryArray; typedef SBinaryArray ENTRYLIST, *LPENTRYLIST; /* Multi-valued PT_CY property value */ typedef struct _SCurrencyArray { ULONG cValues; /* Number of CYs in lpcu */ CY *lpcur; /* Pointer to CY array of length cValues */ } SCurrencyArray; /* Multi-valued PT_SYSTIME property value */ typedef struct _SDateTimeArray { ULONG cValues; /* Number of FILETIMEs in lpft */ FILETIME *lpft; /* Pointer to FILETIME array of length cValues */ } SDateTimeArray; /* Multi-valued PT_DOUBLE property value */ typedef struct _SDoubleArray { ULONG cValues; /* Number of doubles in lpdbl */ double *lpdbl; /* Pointer to double array of length cValues */ } SDoubleArray; /* Multi-valued PT_CLSID property value */ typedef struct _SGuidArray { ULONG cValues; /* Number of GUIDs in lpguid */ GUID *lpguid; /* Pointer to GUID array of length cValues */ } SGuidArray; /* Multi-valued PT_LONGLONG property value */ typedef struct _SLargeIntegerArray { ULONG cValues; /* Number of long64s in lpli */ LARGE_INTEGER *lpli; /* Pointer to long64 array of length cValues */ } SLargeIntegerArray; /* Multi-valued PT_LONG property value */ typedef struct _SLongArray { ULONG cValues; /* Number of longs in lpl */ LONG *lpl; /* Pointer to long array of length cValues */ } SLongArray; /* Multi-valued PT_STRING8 property value */ typedef struct _SLPSTRArray { ULONG cValues; /* Number of Ascii strings in lppszA */ LPSTR *lppszA; /* Pointer to Ascii string array of length cValues */ } SLPSTRArray; /* Multi-valued PT_FLOAT property value */ typedef struct _SRealArray { ULONG cValues; /* Number of floats in lpflt */ float *lpflt; /* Pointer to float array of length cValues */ } SRealArray; /* Multi-valued PT_SHORT property value */ typedef struct _SShortArray { ULONG cValues; /* Number of shorts in lpb */ short int *lpi; /* Pointer to short array of length cValues */ } SShortArray; /* Multi-valued PT_UNICODE property value */ typedef struct _SWStringArray { ULONG cValues; /* Number of Unicode strings in lppszW */ LPWSTR *lppszW; /* Pointer to Unicode string array of length cValues */ } SWStringArray; /* A property value */ typedef union _PV { short int i; LONG l; ULONG ul; float flt; double dbl; unsigned short b; CY cur; double at; FILETIME ft; LPSTR lpszA; SBinary bin; LPWSTR lpszW; LPGUID lpguid; LARGE_INTEGER li; SShortArray MVi; SLongArray MVl; SRealArray MVflt; SDoubleArray MVdbl; SCurrencyArray MVcur; SAppTimeArray MVat; SDateTimeArray MVft; SBinaryArray MVbin; SLPSTRArray MVszA; SWStringArray MVszW; SGuidArray MVguid; SLargeIntegerArray MVli; SCODE err; LONG x; } __UPV; /* Property value structure. This is essentially a mini-Variant */ typedef struct _SPropValue { ULONG ulPropTag; /* The property type */ ULONG dwAlignPad; /* Alignment, treat as reserved */ union _PV Value; /* The property value */ } SPropValue, *LPSPropValue; /* Structure describing a table row (a collection of property values) */ typedef struct _SRow { ULONG ulAdrEntryPad; /* Padding, treat as reserved */ ULONG cValues; /* Count of property values in lpProbs */ LPSPropValue lpProps; /* Pointer to an array of property values of length cValues */ } SRow, *LPSRow; /* Structure describing a set of table rows */ typedef struct _SRowSet { ULONG cRows; /* Count of rows in aRow */ SRow aRow[MAPI_DIM]; /* Array of rows of length cRows */ } SRowSet, *LPSRowSet; #define CbNewSRowSet(c) (offsetof(SRowSet,aRow)+(c)*sizeof(SRow)) #define CbSRowSet(p) CbNewSRowSet((p)->cRows) #define SizedSRowSet(n,id) \ struct _SRowSet_##id { ULONG cRows; SRow aRow[n]; } id /* Structure describing a problem with a property */ typedef struct _SPropProblem { ULONG ulIndex; /* Index of the property */ ULONG ulPropTag; /* Property tag of the property */ SCODE scode; /* Error code of the problem */ } SPropProblem, *LPSPropProblem; /* A collection of property problems */ typedef struct _SPropProblemArray { ULONG cProblem; /* Number of problems in aProblem */ SPropProblem aProblem[MAPI_DIM]; /* Array of problems of length cProblem */ } SPropProblemArray, *LPSPropProblemArray; /* FPropContainsProp flags */ #define FL_FULLSTRING ((ULONG)0x00000) /* Exact string match */ #define FL_SUBSTRING ((ULONG)0x00001) /* Substring match */ #define FL_PREFIX ((ULONG)0x00002) /* Prefix match */ #define FL_IGNORECASE ((ULONG)0x10000) /* Case insensitive */ #define FL_IGNORENONSPACE ((ULONG)0x20000) /* Ignore non spacing characters */ #define FL_LOOSE ((ULONG)0x40000) /* Try very hard to match */ /* Table types returned by IMAPITable_GetStatus() */ #define TBLTYPE_SNAPSHOT 0U /* Table is fixed at creation time and contents do not change */ #define TBLTYPE_KEYSET 1U /* Table has a fixed number of rows, but row values may change */ #define TBLTYPE_DYNAMIC 2U /* Table values and the number of rows may change */ /* Table status returned by IMAPITable_GetStatus() */ #define TBLSTAT_COMPLETE 0U /* All operations have completed (normal status) */ #define TBLSTAT_QCHANGED 7U /* Table data has changed as expected */ #define TBLSTAT_SORTING 9U /* Table is being asynchronously sorted */ #define TBLSTAT_SORT_ERROR 10U /* An error occurred while sorting the table */ #define TBLSTAT_SETTING_COLS 11U /* Table columns are being asynchronously changed */ #define TBLSTAT_SETCOL_ERROR 13U /* An error occurred during column changing */ #define TBLSTAT_RESTRICTING 14U /* Table rows are being asynchronously restricted */ #define TBLSTAT_RESTRICT_ERROR 15U /* An error occurred during row restriction */ /* Flags for IMAPITable operations that can be asynchronous */ #define TBL_NOWAIT 1U /* Perform the operation asynchronously */ #define TBL_BATCH 2U /* Perform the operation when the results are needed */ #define TBL_ASYNC TBL_NOWAIT /* Synonym for TBL_NOWAIT */ /* Flags for IMAPITable_FindRow() */ #define DIR_BACKWARD 1U /* Read rows backwards from the start bookmark */ /* Table bookmarks */ typedef ULONG BOOKMARK; #define BOOKMARK_BEGINNING ((BOOKMARK)0) /* The first row */ #define BOOKMARK_CURRENT ((BOOKMARK)1) /* The current table row */ #define BOOKMARK_END ((BOOKMARK)2) /* The last row */ /* Row restrictions */ typedef struct _SRestriction* LPSRestriction; typedef struct _SAndRestriction { ULONG cRes; LPSRestriction lpRes; } SAndRestriction; typedef struct _SBitMaskRestriction { ULONG relBMR; ULONG ulPropTag; ULONG ulMask; } SBitMaskRestriction; typedef struct _SCommentRestriction { ULONG cValues; LPSRestriction lpRes; LPSPropValue lpProp; } SCommentRestriction; #define RELOP_LT 0U #define RELOP_LE 1U #define RELOP_GT 2U #define RELOP_GE 3U #define RELOP_EQ 4U #define RELOP_NE 5U #define RELOP_RE 6U typedef struct _SComparePropsRestriction { ULONG relop; ULONG ulPropTag1; ULONG ulPropTag2; } SComparePropsRestriction; typedef struct _SContentRestriction { ULONG ulFuzzyLevel; ULONG ulPropTag; LPSPropValue lpProp; } SContentRestriction; typedef struct _SExistRestriction { ULONG ulReserved1; ULONG ulPropTag; ULONG ulReserved2; } SExistRestriction; typedef struct _SNotRestriction { ULONG ulReserved; LPSRestriction lpRes; } SNotRestriction; typedef struct _SOrRestriction { ULONG cRes; LPSRestriction lpRes; } SOrRestriction; typedef struct _SPropertyRestriction { ULONG relop; ULONG ulPropTag; LPSPropValue lpProp; } SPropertyRestriction; typedef struct _SSizeRestriction { ULONG relop; ULONG ulPropTag; ULONG cb; } SSizeRestriction; typedef struct _SSubRestriction { ULONG ulSubObject; LPSRestriction lpRes; } SSubRestriction; /* Restriction types */ #define RES_AND 0U #define RES_OR 1U #define RES_NOT 2U #define RES_CONTENT 3U #define RES_PROPERTY 4U #define RES_COMPAREPROPS 5U #define RES_BITMASK 6U #define RES_SIZE 7U #define RES_EXIST 8U #define RES_SUBRESTRICTION 9U #define RES_COMMENT 10U typedef struct _SRestriction { ULONG rt; union { SAndRestriction resAnd; SBitMaskRestriction resBitMask; SCommentRestriction resComment; SComparePropsRestriction resCompareProps; SContentRestriction resContent; SExistRestriction resExist; SNotRestriction resNot; SOrRestriction resOr; SPropertyRestriction resProperty; SSizeRestriction resSize; SSubRestriction resSub; } res; } SRestriction; /* Errors */ typedef struct _MAPIERROR { ULONG ulVersion; /* Mapi version */ #if defined (UNICODE) || defined (__WINESRC__) LPWSTR lpszError; /* Error and component strings. These are Ascii */ LPWSTR lpszComponent; /* unless the MAPI_UNICODE flag is passed in */ #else LPSTR lpszError; LPSTR lpszComponent; #endif ULONG ulLowLevelError; ULONG ulContext; } MAPIERROR, *LPMAPIERROR; /* Sorting */ #define TABLE_SORT_ASCEND 0U #define TABLE_SORT_DESCEND 1U #define TABLE_SORT_COMBINE 2U typedef struct _SSortOrder { ULONG ulPropTag; ULONG ulOrder; } SSortOrder, *LPSSortOrder; typedef struct _SSortOrderSet { ULONG cSorts; ULONG cCategories; ULONG cExpanded; SSortOrder aSort[MAPI_DIM]; } SSortOrderSet, * LPSSortOrderSet; #define MNID_ID 0 #define MNID_STRING 1 typedef struct _MAPINAMEID { LPGUID lpguid; ULONG ulKind; union { LONG lID; LPWSTR lpwstrName; } Kind; } MAPINAMEID, *LPMAPINAMEID; /* Desired notification types (bitflags) */ #define fnevCriticalError ((ULONG)0x00000001) #define fnevNewMail ((ULONG)0x00000002) #define fnevObjectCreated ((ULONG)0x00000004) #define fnevObjectDeleted ((ULONG)0x00000008) #define fnevObjectModified ((ULONG)0x00000010) #define fnevObjectMoved ((ULONG)0x00000020) #define fnevObjectCopied ((ULONG)0x00000040) #define fnevSearchComplete ((ULONG)0x00000080) #define fnevTableModified ((ULONG)0x00000100) #define fnevStatusObjectModified ((ULONG)0x00000200) #define fnevReservedForMapi ((ULONG)0x40000000) #define fnevExtended ((ULONG)0x80000000) /* Type of notification event */ #define TABLE_CHANGED 1U #define TABLE_ERROR 2U #define TABLE_ROW_ADDED 3U #define TABLE_ROW_DELETED 4U #define TABLE_ROW_MODIFIED 5U #define TABLE_SORT_DONE 6U #define TABLE_RESTRICT_DONE 7U #define TABLE_SETCOL_DONE 8U #define TABLE_RELOAD 9U /* fnevCriticalError notification */ typedef struct _ERROR_NOTIFICATION { ULONG cbEntryID; LPENTRYID lpEntryID; SCODE scode; ULONG ulFlags; LPMAPIERROR lpMAPIError; } ERROR_NOTIFICATION; /* fnevNewMail notification */ typedef struct _NEWMAIL_NOTIFICATION { ULONG cbEntryID; LPENTRYID lpEntryID; ULONG cbParentID; LPENTRYID lpParentID; ULONG ulFlags; #if defined (UNICODE) || defined (__WINESRC__) LPWSTR lpszMessageClass; #else LPSTR lpszMessageClass; #endif ULONG ulMessageFlags; } NEWMAIL_NOTIFICATION; /* fnevObjectCreated/Deleted/Modified/Moved/Copied notification */ typedef struct _OBJECT_NOTIFICATION { ULONG cbEntryID; LPENTRYID lpEntryID; ULONG ulObjType; ULONG cbParentID; LPENTRYID lpParentID; ULONG cbOldID; LPENTRYID lpOldID; ULONG cbOldParentID; LPENTRYID lpOldParentID; LPSPropTagArray lpPropTagArray; } OBJECT_NOTIFICATION; /* fnevTableModified notification */ typedef struct _TABLE_NOTIFICATION { ULONG ulTableEvent; HRESULT hResult; SPropValue propIndex; SPropValue propPrior; SRow row; ULONG ulPad; } TABLE_NOTIFICATION; /* fnevExtended notification */ typedef struct _EXTENDED_NOTIFICATION { ULONG ulEvent; ULONG cb; LPBYTE pbEventParameters; } EXTENDED_NOTIFICATION; /* fnevStatusObjectModified notification */ typedef struct { ULONG cbEntryID; LPENTRYID lpEntryID; ULONG cValues; LPSPropValue lpPropVals; } STATUS_OBJECT_NOTIFICATION; /* The notification structure passed to advise sinks */ typedef struct _NOTIFICATION { ULONG ulEventType; ULONG ulAlignPad; union { ERROR_NOTIFICATION err; NEWMAIL_NOTIFICATION newmail; OBJECT_NOTIFICATION obj; TABLE_NOTIFICATION tab; EXTENDED_NOTIFICATION ext; STATUS_OBJECT_NOTIFICATION statobj; } info; } NOTIFICATION, *LPNOTIFICATION; typedef LONG (WINAPI NOTIFCALLBACK)(LPVOID,ULONG,LPNOTIFICATION); typedef NOTIFCALLBACK *LPNOTIFCALLBACK; /* IMAPIContainer::OpenEntry flags */ #define MAPI_BEST_ACCESS 0x00000010 /***************************************************************************** * IMAPITable interface * * This is the read-only 'view' over an I(MAPI)TableData object. */ #define INTERFACE IMAPITable DECLARE_INTERFACE_(IMAPITable,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPITable methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppError) PURE; STDMETHOD(Advise)(THIS_ ULONG ulMask, LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE; STDMETHOD(Unadvise)(THIS_ ULONG ulCxn) PURE; STDMETHOD(GetStatus)(THIS_ ULONG *lpStatus, ULONG *lpType) PURE; STDMETHOD(SetColumns)(THIS_ LPSPropTagArray lpProps, ULONG ulFlags) PURE; STDMETHOD(QueryColumns)(THIS_ ULONG ulFlags, LPSPropTagArray *lpCols) PURE; STDMETHOD(GetRowCount)(THIS_ ULONG ulFlags, ULONG *lpCount) PURE; STDMETHOD(SeekRow)(THIS_ BOOKMARK lpStart, LONG lRows, LONG *lpSeeked) PURE; STDMETHOD(SeekRowApprox)(THIS_ ULONG ulNum, ULONG ulDenom) PURE; STDMETHOD(QueryPosition)(THIS_ ULONG *lpRow, ULONG *lpNum, ULONG *lpDenom) PURE; STDMETHOD(FindRow)(THIS_ LPSRestriction lpRestrict, BOOKMARK lpOrigin, ULONG ulFlags) PURE; STDMETHOD(Restrict)(THIS_ LPSRestriction lpRestrict, ULONG ulFlags) PURE; STDMETHOD(CreateBookmark)(THIS_ BOOKMARK *lppPos) PURE; STDMETHOD(FreeBookmark)(THIS_ BOOKMARK lpPos) PURE; STDMETHOD(SortTable)(THIS_ LPSSortOrderSet lpSortOpts, ULONG ulFlags) PURE; STDMETHOD(QuerySortOrder)(THIS_ LPSSortOrderSet *lppSortOpts) PURE; STDMETHOD(QueryRows)(THIS_ LONG lRows, ULONG ulFlags, LPSRowSet *lppRows) PURE; STDMETHOD(Abort) (THIS) PURE; STDMETHOD(ExpandRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulRows, ULONG ulFlags, LPSRowSet *lppRows, ULONG *lpMore) PURE; STDMETHOD(CollapseRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulFlags, ULONG *lpRows) PURE; STDMETHOD(WaitForCompletion)(THIS_ ULONG ulFlags, ULONG ulTime, ULONG *lpState) PURE; STDMETHOD(GetCollapseState)(THIS_ ULONG ulFlags, ULONG cbKey, LPBYTE lpKey, ULONG *lpStateLen, LPBYTE *lpState) PURE; STDMETHOD(SetCollapseState)(THIS_ ULONG ulFlags, ULONG ulLen, LPBYTE lpStart, BOOKMARK *lppWhere) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IMAPITable_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IMAPITable_AddRef(p) (p)->lpVtbl->AddRef(p) #define IMAPITable_Release(p) (p)->lpVtbl->Release(p) /*** IMAPITable methods ***/ #define IMAPITable_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IMAPITable_Advise(p,a,b,c) (p)->lpVtbl->Advise(p,a,b,c) #define IMAPITable_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a) #define IMAPITable_GetStatus(p,a,b) (p)->lpVtbl->GetStatus(p,a,b) #define IMAPITable_SetColumns(p,a,b) (p)->lpVtbl->SetColumns(p,a,b) #define IMAPITable_QueryColumns(p,a,b) (p)->lpVtbl->QueryColumns(p,a,b) #define IMAPITable_GetRowCount(p,a,b) (p)->lpVtbl->GetRowCount(p,a,b) #define IMAPITable_SeekRow(p,a,b) (p)->lpVtbl->SeekRow(p,a,b) #define IMAPITable_SeekRowApprox(p,a,b) (p)->lpVtbl->SeekRowApprox(p,a,b) #define IMAPITable_QueryPosition(p,a,b) (p)->lpVtbl->QueryPosition(p,a,b) #define IMAPITable_FindRow(p,a,b,c) (p)->lpVtbl->FindRow(p,a,b,c) #define IMAPITable_Restrict(p,a,b) (p)->lpVtbl->Recstrict(p,a,b) #define IMAPITable_CreateBookmark(p,a) (p)->lpVtbl->CreateBookmark(p,a) #define IMAPITable_FreeBookmark(p,a) (p)->lpVtbl->FreeBookmark(p,a) #define IMAPITable_SortTable(p,a,b) (p)->lpVtbl->SortTable(p,a,b) #define IMAPITable_QuerySortOrder(p,a) (p)->lpVtbl->QuerySortOrder(p,a) #define IMAPITable_QueryRows(p,a,b,c) (p)->lpVtbl->QueryRows(p,a,b,c) #define IMAPITable_Abort(p) (p)->lpVtbl->Abort(p) #define IMAPITable_ExpandRow(p,a,b,c,d,e,f) (p)->lpVtbl->ExpandRow(p,a,b,c,d,e,f) #define IMAPITable_CollapseRow(p,a,b,c,d) (p)->lpVtbl->CollapseRow(p,a,b,c,d) #define IMAPITable_WaitForCompletion(p,a,b,c) (p)->lpVtbl->WaitForCompletion(p,a,b,c) #define IMAPITable_GetCollapseState(p,a,b,c,d,e) (p)->lpVtbl->GetCollapseState(p,a,b,c,d,e) #define IMAPITable_SetCollapseState(p,a,b,c,d) (p)->lpVtbl->SetCollapseState(p,a,b,c,d) #endif typedef IMAPITable *LPMAPITABLE; /***************************************************************************** * IMAPIAdviseSink interface */ #define INTERFACE IMAPIAdviseSink DECLARE_INTERFACE_(IMAPIAdviseSink,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPIAdviseSink methods ***/ STDMETHOD(OnNotify)(THIS_ ULONG NumNotif, LPNOTIFICATION lpNotif) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IMAPIAdviseSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IMAPIAdviseSink_AddRef(p) (p)->lpVtbl->AddRef(p) #define IMAPIAdviseSink_Release(p) (p)->lpVtbl->Release(p) /*** IMAPIAdviseSink methods ***/ #define IMAPIAdviseSink_OnNotify(p,a,b) (p)->lpVtbl->OnNotify(p,a,b) #endif /***************************************************************************** * IMAPIProp interface */ #define INTERFACE IMAPIProp DECLARE_INTERFACE_(IMAPIProp,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPIProp methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE; STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, LPMAPINAMEID **lpppNames) PURE; STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IMAPIProp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IMAPIProp_AddRef(p) (p)->lpVtbl->AddRef(p) #define IMAPIProp_Release(p) (p)->lpVtbl->Release(p) /*** IMAPIProp methods ***/ #define IMAPIProp_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IMAPIProp_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a) #define IMAPIProp_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d) #define IMAPIProp_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b) #define IMAPIProp_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) #define IMAPIProp_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c) #define IMAPIProp_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b) #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) #define IMAPIProp_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) #define IMAPIProp_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) #define IMAPIProp_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) #endif typedef IMAPIProp *LPMAPIPROP; #define KEEP_OPEN_READONLY (0x00000001U) #define KEEP_OPEN_READWRITE (0x00000002U) #define FORCE_SAVE (0x00000004U) /***************************************************************************** * IMsgStore interface */ #define INTERFACE IMsgStore DECLARE_INTERFACE_(IMsgStore,IMAPIProp) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPIProp methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE; STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, LPMAPINAMEID **lpppNames) PURE; STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; /*** IMsgStore methods ***/ STDMETHOD(Advise)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulEventMask, LPMAPIADVISESINK lpAdviseSink, ULONG * lpulConnection) PURE; STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE; STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbEntryID1, LPENTRYID lpEntryID1, ULONG cbEntryID2, LPENTRYID lpEntryID2, ULONG ulFlags, ULONG * lpulResult) PURE; STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags, ULONG *lpulObjType, LPUNKNOWN *lppUnk) PURE; STDMETHOD(SetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE; STDMETHOD(GetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG * lpcbEntryID, LPENTRYID *lppEntryID, LPSTR *lppszExplicitClass) PURE; STDMETHOD(GetReceiveFolderTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE; STDMETHOD(StoreLogoff)(THIS_ ULONG * lpulFlags) PURE; STDMETHOD(AbortSubmit)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags) PURE; STDMETHOD(GetOutgoingQueue)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE; STDMETHOD(SetLockState)(THIS_ LPMESSAGE lpMessage, ULONG ulLockState) PURE; STDMETHOD(FinishedMsg)(THIS_ ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE; STDMETHOD(NotifyNewMail)(THIS_ LPNOTIFICATION lpNotification) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IMsgStore_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IMsgStore_AddRef(p) (p)->lpVtbl->AddRef(p) #define IMsgStore_Release(p) (p)->lpVtbl->Release(p) /*** IMAPIProp methods ***/ #define IMsgStore_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IMsgStore_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a) #define IMsgStore_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d) #define IMsgStore_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b) #define IMsgStore_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) #define IMsgStore_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c) #define IMsgStore_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b) #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) #define IMsgStore_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) #define IMsgStore_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) #define IMsgStore_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) /*** IMsgStore methods ***/ #define IMsgStore_Advise(p,a,b,c,d,e) (p)->lpVtbl->Advise(p,a,b,c,d,e) #define IMsgStore_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a) #define IMsgStore_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f) #define IMsgStore_OpenEntry(p,a,b,c,d,e,f) (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f) #define IMsgStore_SetReceiveFolder(p,a,b,c,d) (p)->lpVtbl->SetReceiveFolder(p,a,b,c,d) #define IMsgStore_GetReceiveFolder(p,a,b,c,d,e) (p)->lpVtbl->GetReceiveFolder(p,a,b,c,d,e) #define IMsgStore_GetReceiveFolderTable(p,a,b) (p)->lpVtbl->GetReceiveFolderTable(p,a,b) #define IMsgStore_StoreLogoff(p,a) (p)->lpVtbl->StoreLogoff(p,a) #define IMsgStore_AbortSubmit(p,a,b,c) (p)->lpVtbl->AbortSubmit(p,a,b,c) #define IMsgStore_GetOutgoingQueue(p,a,b) (p)->lpVtbl->GetOutgoingQueue(p,a,b) #define IMsgStore_SetLockState(p,a,b) (p)->lpVtbl->SetLockState(p,a,b) #define IMsgStore_FinishedMsg(p,a,b,c) (p)->lpVtbl->FinishedMsg(p,a,b,c) #define IMsgStore_NotifyNewMail(p,a) (p)->lpVtbl->NotifyNewMail(p,a) #endif typedef IMsgStore *LPMDB; /***************************************************************************** * IMAPIContainer interface */ #define INTERFACE IMAPIContainer DECLARE_INTERFACE_(IMAPIContainer,IMAPIProp) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPIProp methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE; STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, LPMAPINAMEID **lpppNames) PURE; STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; /*** IMAPIContainer methods ***/ STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE; STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE; STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags, ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE; STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE; STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList, ULONG * lpulSearchState) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IMAPIContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IMAPIContainer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IMAPIContainer_Release(p) (p)->lpVtbl->Release(p) /*** IMAPIProp methods ***/ #define IMAPIContainer_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IMAPIContainer_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a) #define IMAPIContainer_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d) #define IMAPIContainer_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b) #define IMAPIContainer_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) #define IMAPIContainer_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c) #define IMAPIContainer_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b) #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) #define IMAPIContainer_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) #define IMAPIContainer_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) #define IMAPIContainer_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) /*** IMAPIContainer methods ***/ #define IMAPIContainer_GetContentsTable(p,a,b) (p)->lpVtbl->GetContentsTable(p,a,b) #define IMAPIContainer_GetHierarchyTable(p,a,b) (p)->lpVtbl->GetHierarchyTable(p,a,b) #define IMAPIContainer_OpenEntry(p,a,b,c,d,e,f) (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f) #define IMAPIContainer_SetSearchCriteria(p,a,b,c) (p)->lpVtbl->SetSearchCriteria(p,a,b,c) #define IMAPIContainer_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d) #endif /***************************************************************************** * IMAPIFolder interface */ #define INTERFACE IMAPIFolder DECLARE_INTERFACE_(IMAPIFolder,IMAPIContainer) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPIProp methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE; STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, LPMAPINAMEID **lpppNames) PURE; STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; /*** IMAPIContainer methods ***/ STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE; STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE; STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags, ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE; STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE; STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList, ULONG * lpulSearchState) PURE; /*** IMAPIFolder methods ***/ STDMETHOD(CreateMessage)(THIS_ LPCIID lpInterface, ULONG ulFlags, LPMESSAGE *lppMessage) PURE; STDMETHOD(CopyMessages)(THIS_ LPENTRYLIST lpMsgList, LPCIID lpInterface, LPVOID lpDestFolder, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE; STDMETHOD(DeleteMessages)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE; STDMETHOD(CreateFolder)(THIS_ ULONG ulFolderType, LPSTR lpszFolderName, LPSTR lpszFolderComment, LPCIID lpInterface, ULONG ulFlags, LPMAPIFOLDER lppFolder) PURE; STDMETHOD(CopyFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, LPVOID lpDestFolder, LPSTR lpszNewFolderName, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE; STDMETHOD(DeleteFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE; STDMETHOD(SetReadFlags)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE; STDMETHOD(GetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags, ULONG * lpulMessageStatus) PURE; STDMETHOD(SetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulNewStatus, ULONG ulNewStatusMask, ULONG * lpulOldStatus) PURE; STDMETHOD(SaveContentsSort)(THIS_ LPSSortOrderSet lpSortCriteria, ULONG ulFlags) PURE; STDMETHOD(EmptyFolder) (THIS_ ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IMAPIFolder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IMAPIFolder_AddRef(p) (p)->lpVtbl->AddRef(p) #define IMAPIFolder_Release(p) (p)->lpVtbl->Release(p) /*** IMAPIProp methods ***/ #define IMAPIFolder_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IMAPIFolder_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a) #define IMAPIFolder_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d) #define IMAPIFolder_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b) #define IMAPIFolder_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) #define IMAPIFolder_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c) #define IMAPIFolder_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b) #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) #define IMAPIFolder_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) #define IMAPIFolder_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) #define IMAPIFolder_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) /*** IMAPIContainer methods ***/ #define IMAPIFolder_GetContentsTable(p,a,b) (p)->lpVtbl->GetContentsTable(p,a,b) #define IMAPIFolder_GetHierarchyTable(p,a,b) (p)->lpVtbl->GetHierarchyTable(p,a,b) #define IMAPIFolder_OpenEntry(p,a,b,c,d,e,f) (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f) #define IMAPIFolder_SetSearchCriteria(p,a,b,c) (p)->lpVtbl->SetSearchCriteria(p,a,b,c) #define IMAPIFolder_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d) /*** IMAPIFolder methods ***/ #define IMAPIFolder_CreateMessage(p,a,b,c) (p)->lpVtbl->CreateMessage(p,a,b,c) #define IMAPIFolder_CopyMessages(p,a,b,c,d,e,f) (p)->lpVtbl->CopyMessages(p,a,b,c,d,e,f) #define IMAPIFolder_DeleteMessages(p,a,b,c,d) (p)->lpVtbl->DeleteMessages(p,a,b,c,d) #define IMAPIFolder_CreateFolder(p,a,b,c,d,e,f) (p)->lpVtbl->CreateFolder(p,a,b,c,d,e,f) #define IMAPIFolder_CopyFolder(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CopyFolder(p,a,b,c,d,e,f,g,h) #define IMAPIFolder_DeleteFolder(p,a,b,c,d,e) (p)->lpVtbl->CreateFolder(p,a,b,c,d,e) #define IMAPIFolder_SetReadFlags(p,a,b,c,d) (p)->lpVtbl->SetReadFlags(p,a,b,c,d) #define IMAPIFolder_GetMessageStatus(p,a,b,c,d) (p)->lpVtbl->GetMessageStatus(p,a,b,c,d) #define IMAPIFolder_SetMessageStatus(p,a,b,c,d,e) (p)->lpVtbl->SetMessageStatus(p,a,b,c,d,e) #define IMAPIFolder_SaveContentsSort(p,a,b) (p)->lpVtbl->SaveContentsSort(p,a,b) #define IMAPIFolder_EmptyFolder(p,a,b,c) (p)->lpVtbl->EmptyFolder(p,a,b,c) #endif typedef struct { ULONG cb; BYTE abEntry[MAPI_DIM]; } FLATENTRY, *LPFLATENTRY; typedef struct { ULONG cEntries; ULONG cbEntries; BYTE abEntries[MAPI_DIM]; } FLATENTRYLIST, *LPFLATENTRYLIST; typedef struct { ULONG cb; BYTE ab[MAPI_DIM]; } MTSID, *LPMTSID; typedef struct { ULONG cMTSIDs; ULONG cbMTSIDs; BYTE abMTSIDs[MAPI_DIM]; } FLATMTSIDLIST, *LPFLATMTSIDLIST; typedef struct _ADRENTRY { ULONG ulReserved1; ULONG cValues; LPSPropValue rgPropVals; } ADRENTRY, *LPADRENTRY; typedef struct _ADRLIST { ULONG cEntries; ADRENTRY aEntries[MAPI_DIM]; } ADRLIST, *LPADRLIST; /***************************************************************************** * IMessage interface */ #define INTERFACE IMessage DECLARE_INTERFACE_(IMessage,IMAPIProp) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPIProp methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE; STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, LPMAPINAMEID **lpppNames) PURE; STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; /*** IMessage methods ***/ STDMETHOD(GetAttachmentTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE; STDMETHOD(OpenAttach)(THIS_ ULONG ulAttachmentNum, LPCIID lpInterface, ULONG ulFlags, LPATTACH *lppAttach) PURE; STDMETHOD(CreateAttach)(THIS_ LPCIID lpInterface, ULONG ulFlags, ULONG *lpulAttachmentNum, LPATTACH *lppAttach) PURE; STDMETHOD(DeleteAttach)(THIS_ ULONG ulAttachmentNum, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE; STDMETHOD(GetRecipientTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE; STDMETHOD(ModifyRecipients)(THIS_ ULONG ulFlags, LPADRLIST lpMods) PURE; STDMETHOD(SubmitMessage)(THIS_ ULONG ulFlags) PURE; STDMETHOD(SetReadFlag)(THIS_ ULONG ulFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IMessage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IMessage_AddRef(p) (p)->lpVtbl->AddRef(p) #define IMessage_Release(p) (p)->lpVtbl->Release(p) /*** IMAPIProp methods ***/ #define IMessage_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IMessage_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a) #define IMessage_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d) #define IMessage_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b) #define IMessage_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) #define IMessage_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c) #define IMessage_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b) #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) #define IMessage_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) #define IMessage_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) #define IMessage_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) /*** IMessage methods ***/ #define IMessage_GetAttachmentTable(p,a,b) (p)->lpVtbl->GetAttachmentTable(p,a,b) #define IMessage_OpenAttach(p,a,b,c,d) (p)->lpVtbl->OpenAttach(p,a,b,c,d) #define IMessage_CreateAttach(p,a,b,c,d) (p)->lpVtbl->CreateAttach(p,a,b,c,d) #define IMessage_DeleteAttach(p,a,b,c,d) (p)->lpVtbl->DeleteAttach(p,a,b,c,d) #define IMessage_GetRecipientTable(p,a,b) (p)->lpVtbl->GetRecipientTable(p,a,b) #define IMessage_ModifyRecipients(p,a,b) (p)->lpVtbl->ModifyRecipients(p,a,b) #define IMessage_SubmitMessage(p,a) (p)->lpVtbl->SubmitMessage(p,a) #define IMessage_SetReadFlag(p,a) (p)->lpVtbl->SetReadFlag(p,a) #endif /* Message flags (PR_MESSAGE_FLAGS) */ #define MSGFLAG_READ 0x00000001U #define MSGFLAG_UNMODIFIED 0x00000002U #define MSGFLAG_SUBMIT 0x00000004U #define MSGFLAG_UNSENT 0x00000008U #define MSGFLAG_HASATTACH 0x00000010U #define MSGFLAG_FROMME 0x00000020U /***************************************************************************** * IAttach interface */ #define INTERFACE IAttach DECLARE_INTERFACE_(IAttach,IMAPIProp) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPIProp methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE; STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, LPMAPINAMEID **lpppNames) PURE; STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IAttach_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IAttach_AddRef(p) (p)->lpVtbl->AddRef(p) #define IAttach_Release(p) (p)->lpVtbl->Release(p) /*** IMAPIProp methods ***/ #define IAttach_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IAttach_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a) #define IAttach_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d) #define IAttach_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b) #define IAttach_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) #define IAttach_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c) #define IAttach_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b) #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) #define IAttach_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) #define IAttach_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) #define IAttach_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) #endif /* Attachment flags */ #define NO_ATTACHMENT 0x00000000U #define ATTACH_BY_VALUE 0x00000001U #endif /*MAPIDEFS_H*/ ================================================ FILE: wine/windows/mapiform.h ================================================ /* * Copyright (C) 1998 Justin Bradford * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPIFORM_H #define MAPIFORM_H #include #include #include #include typedef ULONG HFRMREG; #define HFRMREG_DEFAULT 0 #define HFRMREG_LOCAL 1 #define HFRMREG_PERSONAL 2 #define HFRMREG_FOLDER 3 typedef const char **LPPCSTR; #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI MAPIOpenLocalFormContainer(LPVOID*); #ifdef __cplusplus } #endif #endif /* MAPIFORM_H */ ================================================ FILE: wine/windows/mapiguid.h ================================================ /* * Copyright 2004 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPIGUID_H #define MAPIGUID_H #define DEFINE_MAPIGUID(n,l,w1,w2) DEFINE_OLEGUID(n,l,w1,w2) DEFINE_MAPIGUID(IID_IABContainer,0x2030D,0,0); DEFINE_MAPIGUID(IID_IABLogon,0x20314,0,0); DEFINE_MAPIGUID(IID_IABProvider,0x20311,0,0); DEFINE_MAPIGUID(IID_IAddrBook,0x20309,0,0); DEFINE_MAPIGUID(IID_IAttachment,0x20308,0,0); DEFINE_MAPIGUID(IID_IDistList,0x2030E,0,0); DEFINE_MAPIGUID(IID_IEnumMAPIFormProp,0x20323,0,0); DEFINE_MAPIGUID(IID_IMailUser,0x2030A,0,0); DEFINE_MAPIGUID(IID_IMAPIAdviseSink,0x20302,0,0); DEFINE_MAPIGUID(IID_IMAPIContainer,0x2030B,0,0); DEFINE_MAPIGUID(IID_IMAPIControl,0x2031B,0,0); DEFINE_MAPIGUID(IID_IMAPIFolder,0x2030C,0,0); DEFINE_MAPIGUID(IID_IMAPIForm,0x20327,0,0); DEFINE_MAPIGUID(IID_IMAPIFormAdviseSink,0x2032F,0,0); DEFINE_MAPIGUID(IID_IMAPIFormContainer,0x2032E,0,0); DEFINE_MAPIGUID(IID_IMAPIFormFactory,0x20350,0,0); DEFINE_MAPIGUID(IID_IMAPIFormInfo,0x20324,0,0); DEFINE_MAPIGUID(IID_IMAPIFormMgr,0x20322,0,0); DEFINE_MAPIGUID(IID_IMAPIFormProp,0x2032D,0,0); DEFINE_MAPIGUID(IID_IMAPIMessageSite,0x20370,0,0); DEFINE_MAPIGUID(IID_IMAPIProgress,0x2031F,0,0); DEFINE_MAPIGUID(IID_IMAPIProp,0x20303,0,0); DEFINE_MAPIGUID(IID_IMAPIPropData,0x2031A,0,0); DEFINE_MAPIGUID(IID_IMAPISession,0x20300,0,0); DEFINE_MAPIGUID(IID_IMAPISpoolerInit,0x20317,0,0); DEFINE_MAPIGUID(IID_IMAPISpoolerService,0x2031E,0,0); DEFINE_MAPIGUID(IID_IMAPISpoolerSession,0x20318,0,0); DEFINE_MAPIGUID(IID_IMAPIStatus,0x20305,0,0); DEFINE_MAPIGUID(IID_IMAPISup,0x2030F,0,0); DEFINE_MAPIGUID(IID_IMAPITable,0x20301,0,0); DEFINE_MAPIGUID(IID_IMAPITableData,0x20316,0,0); DEFINE_MAPIGUID(IID_IMAPIViewAdviseSink,0x2032B,0,0); DEFINE_MAPIGUID(IID_IMAPIViewContext,0x20321,0,0); DEFINE_MAPIGUID(IID_IMessage,0x20307,0,0); DEFINE_MAPIGUID(IID_IMsgServiceAdmin,0x2031D,0,0); DEFINE_MAPIGUID(IID_IMsgStore,0x20306,0,0); DEFINE_MAPIGUID(IID_IMSLogon,0x20313,0,0); DEFINE_MAPIGUID(IID_IMSProvider,0x20310,0,0); DEFINE_MAPIGUID(IID_IPersistMessage,0x2032A,0,0); DEFINE_MAPIGUID(IID_IProfAdmin,0x2031C,0,0); DEFINE_MAPIGUID(IID_IProfSect,0x20304,0,0); DEFINE_MAPIGUID(IID_IProviderAdmin,0x20325,0,0); DEFINE_MAPIGUID(IID_ISpoolerHook,0x20320,0,0); DEFINE_MAPIGUID(IID_IStreamDocfile,0x2032C,0,0); DEFINE_MAPIGUID(IID_IStreamTnef,0x20330,0,0); DEFINE_MAPIGUID(IID_ITNEF,0x20319,0,0); DEFINE_MAPIGUID(IID_IXPLogon,0x20315,0,0); DEFINE_MAPIGUID(IID_IXPProvider,0x20312,0,0); DEFINE_MAPIGUID(MUID_PROFILE_INSTANCE,0x20385,0,0); DEFINE_MAPIGUID(PS_MAPI,0x20328,0,0); DEFINE_MAPIGUID(PS_PUBLIC_STRINGS,0x20329,0,0); DEFINE_MAPIGUID(PS_ROUTING_ADDRTYPE,0x20381,0,0); DEFINE_MAPIGUID(PS_ROUTING_DISPLAY_NAME,0x20382,0,0); DEFINE_MAPIGUID(PS_ROUTING_EMAIL_ADDRESSES,0x20380,0,0); DEFINE_MAPIGUID(PS_ROUTING_ENTRYID,0x20383,0,0); DEFINE_MAPIGUID(PS_ROUTING_SEARCH_KEY,0x20384,0,0); #endif/* MAPIGUID_H */ ================================================ FILE: wine/windows/mapitags.h ================================================ /* * MAPI property tag declarations * * Copyright 2004 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPITAGS_H #define MAPITAGS_H #define FIsTransmittable(t) (PROP_ID(t) < 0x0E00 || PROP_ID(t) >= 0x8000 || \ (PROP_ID(t) >= 0x1000 && PROP_ID(t) < 0x6000) || \ (PROP_ID(t) >= 0x6800 && PROP_ID(t) < 0x7C00)) #define PR_ACKNOWLEDGEMENT_MODE PROP_TAG(PT_I4,0x01) #define PR_ALTERNATE_RECIPIENT_ALLOWED PROP_TAG(PT_BOOLEAN,0x02) #define PR_AUTHORIZING_USERS PROP_TAG(PT_BINARY,0x03) /* Comment on an automatically forwarded message */ #define PR_AUTO_FORWARD_COMMENT_W PROP_TAG(PT_UNICODE,0x04) #define PR_AUTO_FORWARD_COMMENT_A PROP_TAG(PT_STRING8,0x04) #define PR_AUTO_FORWARD_COMMENT WINELIB_NAME_AW(PR_AUTO_FORWARD_COMMENT_) /* Whether a message has been automatically forwarded */ #define PR_AUTO_FORWARDED PROP_TAG(PT_BOOLEAN,0x05) #define PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID PROP_TAG(PT_BINARY,0x06) #define PR_CONTENT_CORRELATOR PROP_TAG(PT_BINARY,0x07) #define PR_CONTENT_IDENTIFIER_W PROP_TAG(PT_UNICODE,0x08) #define PR_CONTENT_IDENTIFIER_A PROP_TAG(PT_STRING8,0x08) #define PR_CONTENT_IDENTIFIER WINELIB_NAME_AW(PR_CONTENT_IDENTIFIER_) /* MIME content length */ #define PR_CONTENT_LENGTH PROP_TAG(PT_I4,0x09) #define PR_CONTENT_RETURN_REQUESTED PROP_TAG(PT_BOOLEAN,0x0A) #define PR_CONVERSATION_KEY PROP_TAG(PT_BINARY,0x0B) #define PR_CONVERSION_EITS PROP_TAG(PT_BINARY,0x0C) #define PR_CONVERSION_WITH_LOSS_PROHIBITED PROP_TAG(PT_BOOLEAN,0x0D) #define PR_CONVERTED_EITS PROP_TAG(PT_BINARY,0x0E) /* Time to deliver for delayed delivery messages */ #define PR_DEFERRED_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x0F) #define PR_DELIVER_TIME PROP_TAG(PT_SYSTIME,0x10) /* Reason a message was discarded */ #define PR_DISCARD_REASON PROP_TAG(PT_I4,0x11) #define PR_DISCLOSURE_OF_RECIPIENTS PROP_TAG(PT_BOOLEAN,0x12) #define PR_DL_EXPANSION_HISTORY PROP_TAG(PT_BINARY,0x13) #define PR_DL_EXPANSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x14) #define PR_EXPIRY_TIME PROP_TAG(PT_SYSTIME,0x15) #define PR_IMPLICIT_CONVERSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x16) /* Message importance */ #define PR_IMPORTANCE PROP_TAG(PT_I4,0x17) #define PR_IPM_ID PROP_TAG(PT_BINARY,0x18) #define PR_LATEST_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x19) #define PR_MESSAGE_CLASS_W PROP_TAG(PT_UNICODE,0x1A) #define PR_MESSAGE_CLASS_A PROP_TAG(PT_STRING8,0x1A) #define PR_MESSAGE_CLASS WINELIB_NAME_AW(PR_MESSAGE_CLASS_) #define PR_MESSAGE_DELIVERY_ID PROP_TAG(PT_BINARY,0x1B) #define PR_MESSAGE_SECURITY_LABEL PROP_TAG(PT_BINARY,0x1E) #define PR_OBSOLETED_IPMS PROP_TAG(PT_BINARY,0x1F) /* Person a message was originally for */ #define PR_ORIGINALLY_INTENDED_RECIPIENT_NAME PROP_TAG(PT_BINARY,0x20) #define PR_ORIGINAL_EITS PROP_TAG(PT_BINARY,0x21) #define PR_ORIGINATOR_CERTIFICATE PROP_TAG(PT_BINARY,0x22) #define PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED PROP_TAG(PT_BOOLEAN,0x23) /* Address of the message sender */ #define PR_ORIGINATOR_RETURN_ADDRESS PROP_TAG(PT_BINARY,0x24) #define PR_PARENT_KEY PROP_TAG(PT_BINARY,0x25) #define PR_PRIORITY PROP_TAG(PT_I4,0x26) #define PR_ORIGIN_CHECK PROP_TAG(PT_BINARY,0x27) #define PR_PROOF_OF_SUBMISSION_REQUESTED PROP_TAG(PT_BOOLEAN,0x28) /* Whether a read receipt is desired */ #define PR_READ_RECEIPT_REQUESTED PROP_TAG(PT_BOOLEAN,0x29) /* Time a message was received */ #define PR_RECEIPT_TIME PROP_TAG(PT_SYSTIME,0x2A) #define PR_RECIPIENT_REASSIGNMENT_PROHIBITED PROP_TAG(PT_BOOLEAN,0x2B) #define PR_REDIRECTION_HISTORY PROP_TAG(PT_BINARY,0x2C) #define PR_RELATED_IPMS PROP_TAG(PT_BINARY,0x2D) /* Sensitivity of the original message */ #define PR_ORIGINAL_SENSITIVITY PROP_TAG(PT_I4,0x2E) #define PR_LANGUAGES_W PROP_TAG(PT_UNICODE,0x2F) #define PR_LANGUAGES_A PROP_TAG(PT_STRING8,0x2F) #define PR_LANGUAGES WINELIB_NAME_AW(PR_LANGUAGES_) #define PR_REPLY_TIME PROP_TAG(PT_SYSTIME,0x30) #define PR_REPORT_TAG PROP_TAG(PT_BINARY,0x31) #define PR_REPORT_TIME PROP_TAG(PT_SYSTIME,0x32) #define PR_RETURNED_IPM PROP_TAG(PT_BOOLEAN,0x33) #define PR_SECURITY PROP_TAG(PT_I4,0x34) #define PR_INCOMPLETE_COPY PROP_TAG(PT_BOOLEAN,0x35) #define PR_SENSITIVITY PROP_TAG(PT_I4,0x36) /* The message subject */ #define PR_SUBJECT_W PROP_TAG(PT_UNICODE,0x37) #define PR_SUBJECT_A PROP_TAG(PT_STRING8,0x37) #define PR_SUBJECT WINELIB_NAME_AW(PR_SUBJECT_) #define PR_SUBJECT_IPM PROP_TAG(PT_BINARY,0x38) #define PR_CLIENT_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x39) #define PR_REPORT_NAME_W PROP_TAG(PT_UNICODE,0x3A) #define PR_REPORT_NAME_A PROP_TAG(PT_STRING8,0x3A) #define PR_REPORT_NAME WINELIB_NAME_AW(PR_REPORT_NAME_) #define PR_SENT_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x3B) #define PR_X400_CONTENT_TYPE PROP_TAG(PT_BINARY,0x3C) #define PR_SUBJECT_PREFIX_W PROP_TAG(PT_UNICODE,0x3D) #define PR_SUBJECT_PREFIX_A PROP_TAG(PT_STRING8,0x3D) #define PR_SUBJECT_PREFIX WINELIB_NAME_AW(PR_SUBJECT_PREFIX_) #define PR_NON_RECEIPT_REASON PROP_TAG(PT_I4,0x3E) #define PR_RECEIVED_BY_ENTRYID PROP_TAG(PT_BINARY,0x3F) /* Received by: entry */ #define PR_RECEIVED_BY_NAME_W PROP_TAG(PT_UNICODE,0x40) #define PR_RECEIVED_BY_NAME_A PROP_TAG(PT_STRING8,0x40) #define PR_RECEIVED_BY_NAME WINELIB_NAME_AW(PR_RECEIVED_BY_NAME_) #define PR_SENT_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x41) #define PR_SENT_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x42) #define PR_SENT_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x42) #define PR_SENT_REPRESENTING_NAME WINELIB_NAME_AW(PR_SENT_REPRESENTING_NAME_) #define PR_RCVD_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x43) #define PR_RCVD_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x44) #define PR_RCVD_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x44) #define PR_RCVD_REPRESENTING_NAME WINELIB_NAME_AW(PR_RCVD_REPRESENTING_NAME_) #define PR_REPORT_ENTRYID PROP_TAG(PT_BINARY,0x45) #define PR_READ_RECEIPT_ENTRYID PROP_TAG(PT_BINARY,0x46) #define PR_MESSAGE_SUBMISSION_ID PROP_TAG(PT_BINARY,0x47) #define PR_PROVIDER_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x48) /* Subject of the original message */ #define PR_ORIGINAL_SUBJECT_W PROP_TAG(PT_UNICODE,0x49) #define PR_ORIGINAL_SUBJECT_A PROP_TAG(PT_STRING8,0x49) #define PR_ORIGINAL_SUBJECT WINELIB_NAME_AW(PR_ORIGINAL_SUBJECT_) #define PR_DISC_VAL PROP_TAG(PT_BOOLEAN,0x4A) #define PR_ORIG_MESSAGE_CLASS_W PROP_TAG(PT_UNICODE,0x4B) #define PR_ORIG_MESSAGE_CLASS_A PROP_TAG(PT_STRING8,0x4B) #define PR_ORIG_MESSAGE_CLASS WINELIB_NAME_AW(PR_ORIG_MESSAGE_CLASS_) #define PR_ORIGINAL_AUTHOR_ENTRYID PROP_TAG(PT_BINARY,0x4C) /* Author of the original message */ #define PR_ORIGINAL_AUTHOR_NAME_W PROP_TAG(PT_UNICODE,0x4D) #define PR_ORIGINAL_AUTHOR_NAME_A PROP_TAG(PT_STRING8,0x4D) #define PR_ORIGINAL_AUTHOR_NAME WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_NAME_) /* Time the original message was submitted */ #define PR_ORIGINAL_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x4E) #define PR_REPLY_RECIPIENT_ENTRIES PROP_TAG(PT_BINARY,0x4F) #define PR_REPLY_RECIPIENT_NAMES_W PROP_TAG(PT_UNICODE,0x50) #define PR_REPLY_RECIPIENT_NAMES_A PROP_TAG(PT_STRING8,0x50) #define PR_REPLY_RECIPIENT_NAMES WINELIB_NAME_AW(PR_REPLY_RECIPIENT_NAMES_) #define PR_RECEIVED_BY_SEARCH_KEY PROP_TAG(PT_BINARY,0x51) #define PR_RCVD_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x52) #define PR_READ_RECEIPT_SEARCH_KEY PROP_TAG(PT_BINARY,0x53) #define PR_REPORT_SEARCH_KEY PROP_TAG(PT_BINARY,0x54) #define PR_ORIGINAL_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x55) #define PR_ORIGINAL_AUTHOR_SEARCH_KEY PROP_TAG(PT_BINARY,0x56) #define PR_MESSAGE_TO_ME PROP_TAG(PT_BOOLEAN,0x57) #define PR_MESSAGE_CC_ME PROP_TAG(PT_BOOLEAN,0x58) #define PR_MESSAGE_RECIP_ME PROP_TAG(PT_BOOLEAN,0x59) /* Sender of the original message */ #define PR_ORIGINAL_SENDER_NAME_W PROP_TAG(PT_UNICODE,0x5A) #define PR_ORIGINAL_SENDER_NAME_A PROP_TAG(PT_STRING8,0x5A) #define PR_ORIGINAL_SENDER_NAME WINELIB_NAME_AW(PR_ORIGINAL_SENDER_NAME_) #define PR_ORIGINAL_SENDER_ENTRYID PROP_TAG(PT_BINARY,0x5B) #define PR_ORIGINAL_SENDER_SEARCH_KEY PROP_TAG(PT_BINARY,0x5C) #define PR_ORIGINAL_SENT_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x5D) #define PR_ORIGINAL_SENT_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x5D) #define PR_ORIGINAL_SENT_REPRESENTING_NAME WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_NAME_) #define PR_ORIGINAL_SENT_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x5E) #define PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x5F) #define PR_START_DATE PROP_TAG(PT_SYSTIME,0x60) #define PR_END_DATE PROP_TAG(PT_SYSTIME,0x61) #define PR_OWNER_APPT_ID PROP_TAG(PT_I4,0x62) /* Whether a response to the message is desired */ #define PR_RESPONSE_REQUESTED PROP_TAG(PT_BOOLEAN,0x63) #define PR_SENT_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x64) #define PR_SENT_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x64) #define PR_SENT_REPRESENTING_ADDRTYPE WINELIB_NAME_AW(PR_SENT_REPRESENTING_ADDRTYPE_) #define PR_SENT_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x65) #define PR_SENT_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x65) #define PR_SENT_REPRESENTING_EMAIL_ADDRESS WINELIB_NAME_AW(PR_SENT_REPRESENTING_EMAIL_ADDRESS_) #define PR_ORIGINAL_SENDER_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x66) #define PR_ORIGINAL_SENDER_ADDRTYPE_A PROP_TAG(PT_STRING8,0x66) #define PR_ORIGINAL_SENDER_ADDRTYPE WINELIB_NAME_AW(PR_ORIGINAL_SENDER_ADDRTYPE_) /* Email of the original message sender */ #define PR_ORIGINAL_SENDER_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x67) #define PR_ORIGINAL_SENDER_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x67) #define PR_ORIGINAL_SENDER_EMAIL_ADDRESS WINELIB_NAME_AW(PR_ORIGINAL_SENDER_EMAIL_ADDRESS_) #define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x68) #define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x68) #define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_) #define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x69) #define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x69) #define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_) #define PR_CONVERSATION_TOPIC_W PROP_TAG(PT_UNICODE,0x70) #define PR_CONVERSATION_TOPIC_A PROP_TAG(PT_STRING8,0x70) #define PR_CONVERSATION_TOPIC WINELIB_NAME_AW(PR_CONVERSATION_TOPIC_) #define PR_CONVERSATION_INDEX PROP_TAG(PT_BINARY,0x71) #define PR_ORIGINAL_DISPLAY_BCC_W PROP_TAG(PT_UNICODE,0x72) #define PR_ORIGINAL_DISPLAY_BCC_A PROP_TAG(PT_STRING8,0x72) #define PR_ORIGINAL_DISPLAY_BCC WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_BCC_) #define PR_ORIGINAL_DISPLAY_CC_W PROP_TAG(PT_UNICODE,0x73) #define PR_ORIGINAL_DISPLAY_CC_A PROP_TAG(PT_STRING8,0x73) #define PR_ORIGINAL_DISPLAY_CC WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_CC_) #define PR_ORIGINAL_DISPLAY_TO_W PROP_TAG(PT_UNICODE,0x74) #define PR_ORIGINAL_DISPLAY_TO_A PROP_TAG(PT_STRING8,0x74) #define PR_ORIGINAL_DISPLAY_TO WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_TO_) #define PR_RECEIVED_BY_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x75) #define PR_RECEIVED_BY_ADDRTYPE_A PROP_TAG(PT_STRING8,0x75) #define PR_RECEIVED_BY_ADDRTYPE WINELIB_NAME_AW(PR_RECEIVED_BY_ADDRTYPE_) #define PR_RECEIVED_BY_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x76) #define PR_RECEIVED_BY_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x76) #define PR_RECEIVED_BY_EMAIL_ADDRESS WINELIB_NAME_AW(PR_RECEIVED_BY_EMAIL_ADDRESS_) #define PR_RCVD_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x77) #define PR_RCVD_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x77) #define PR_RCVD_REPRESENTING_ADDRTYPE WINELIB_NAME_AW(PR_RCVD_REPRESENTING_ADDRTYPE_) #define PR_RCVD_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x78) #define PR_RCVD_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x78) #define PR_RCVD_REPRESENTING_EMAIL_ADDRESS WINELIB_NAME_AW(PR_RCVD_REPRESENTING_EMAIL_ADDRESS_) #define PR_ORIGINAL_AUTHOR_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x79) #define PR_ORIGINAL_AUTHOR_ADDRTYPE_A PROP_TAG(PT_STRING8,0x79) #define PR_ORIGINAL_AUTHOR_ADDRTYPE WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_ADDRTYPE_) #define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x7A) #define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x7A) #define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_) #define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x7B) #define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_A PROP_TAG(PT_STRING8,0x7B) #define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE WINELIB_NAME_AW(PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_) #define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x7C) #define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x7C) #define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS WINELIB_NAME_AW(PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_) #define PR_TRANSPORT_MESSAGE_HEADERS_W PROP_TAG(PT_UNICODE,0x7D) #define PR_TRANSPORT_MESSAGE_HEADERS_A PROP_TAG(PT_STRING8,0x7D) #define PR_TRANSPORT_MESSAGE_HEADERS WINELIB_NAME_AW(PR_TRANSPORT_MESSAGE_HEADERS_) #define PR_DELEGATION PROP_TAG(PT_BINARY,0x7E) #define PR_TNEF_CORRELATION_KEY PROP_TAG(PT_BINARY,0x7F) #define PR_BODY_W PROP_TAG(PT_UNICODE,0x1000) #define PR_BODY_A PROP_TAG(PT_STRING8,0x1000) #define PR_BODY WINELIB_NAME_AW(PR_BODY_) #define PR_REPORT_TEXT_W PROP_TAG(PT_UNICODE,0x1001) #define PR_REPORT_TEXT_A PROP_TAG(PT_STRING8,0x1001) #define PR_REPORT_TEXT WINELIB_NAME_AW(PR_REPORT_TEXT_) #define PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY PROP_TAG(PT_BINARY,0x1002) #define PR_REPORTING_DL_NAME PROP_TAG(PT_BINARY,0x1003) #define PR_REPORTING_MTA_CERTIFICATE PROP_TAG(PT_BINARY,0x1004) #define PR_RTF_SYNC_BODY_CRC PROP_TAG(PT_I4,0x1006) #define PR_RTF_SYNC_BODY_COUNT PROP_TAG(PT_I4,0x1007) #define PR_RTF_SYNC_BODY_TAG_W PROP_TAG(PT_UNICODE,0x1008) #define PR_RTF_SYNC_BODY_TAG_A PROP_TAG(PT_STRING8,0x1008) #define PR_RTF_SYNC_BODY_TAG WINELIB_NAME_AW(PR_RTF_SYNC_BODY_TAG_) #define PR_RTF_COMPRESSED PROP_TAG(PT_BINARY,0x1009) #define PR_RTF_SYNC_PREFIX_COUNT PROP_TAG(PT_I4,0x1010) #define PR_RTF_SYNC_TRAILING_COUNT PROP_TAG(PT_I4,0x1011) #define PR_ORIGINALLY_INTENDED_RECIP_ENTRYID PROP_TAG(PT_BINARY,0x1012) #define PR_CONTENT_INTEGRITY_CHECK PROP_TAG(PT_BINARY,0x0C00) #define PR_EXPLICIT_CONVERSION PROP_TAG(PT_I4,0x0C01) #define PR_IPM_RETURN_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C02) #define PR_MESSAGE_TOKEN PROP_TAG(PT_BINARY,0x0C03) #define PR_NDR_REASON_CODE PROP_TAG(PT_I4,0x0C04) #define PR_NDR_DIAG_CODE PROP_TAG(PT_I4,0x0C05) #define PR_NON_RECEIPT_NOTIFICATION_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C06) #define PR_DELIVERY_POINT PROP_TAG(PT_I4,0x0C07) #define PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C08) #define PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT PROP_TAG(PT_BINARY,0x0C09) #define PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY PROP_TAG(PT_BOOLEAN,0x0C0A) #define PR_PHYSICAL_DELIVERY_MODE PROP_TAG(PT_I4,0x0C0B) #define PR_PHYSICAL_DELIVERY_REPORT_REQUEST PROP_TAG(PT_I4,0x0C0C) #define PR_PHYSICAL_FORWARDING_ADDRESS PROP_TAG(PT_BINARY,0x0C0D) #define PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C0E) #define PR_PHYSICAL_FORWARDING_PROHIBITED PROP_TAG(PT_BOOLEAN,0x0C0F) #define PR_PHYSICAL_RENDITION_ATTRIBUTES PROP_TAG(PT_BINARY,0x0C10) #define PR_PROOF_OF_DELIVERY PROP_TAG(PT_BINARY,0x0C11) #define PR_PROOF_OF_DELIVERY_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C12) #define PR_RECIPIENT_CERTIFICATE PROP_TAG(PT_BINARY,0x0C13) #define PR_RECIPIENT_NUMBER_FOR_ADVICE_W PROP_TAG(PT_UNICODE,0x0C14) #define PR_RECIPIENT_NUMBER_FOR_ADVICE_A PROP_TAG(PT_STRING8,0x0C14) #define PR_RECIPIENT_NUMBER_FOR_ADVICE WINELIB_NAME_AW(PR_RECIPIENT_NUMBER_FOR_ADVICE_) #define PR_RECIPIENT_TYPE PROP_TAG(PT_I4,0x0C15) #define PR_REGISTERED_MAIL_TYPE PROP_TAG(PT_I4,0x0C16) #define PR_REPLY_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C17) #define PR_REQUESTED_DELIVERY_METHOD PROP_TAG(PT_I4,0x0C18) #define PR_SENDER_ENTRYID PROP_TAG(PT_BINARY,0x0C19) #define PR_SENDER_NAME_W PROP_TAG(PT_UNICODE,0x0C1A) #define PR_SENDER_NAME_A PROP_TAG(PT_STRING8,0x0C1A) #define PR_SENDER_NAME WINELIB_NAME_AW(PR_SENDER_NAME_) #define PR_SUPPLEMENTARY_INFO_W PROP_TAG(PT_UNICODE,0x0C1B) #define PR_SUPPLEMENTARY_INFO_A PROP_TAG(PT_STRING8,0x0C1B) #define PR_SUPPLEMENTARY_INFO WINELIB_NAME_AW(PR_SUPPLEMENTARY_INFO_) #define PR_TYPE_OF_MTS_USER PROP_TAG(PT_I4,0x0C1C) #define PR_SENDER_SEARCH_KEY PROP_TAG(PT_BINARY,0x0C1D) #define PR_SENDER_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x0C1E) #define PR_SENDER_ADDRTYPE_A PROP_TAG(PT_STRING8,0x0C1E) #define PR_SENDER_ADDRTYPE WINELIB_NAME_AW(PR_SENDER_ADDRTYPE_) #define PR_SENDER_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x0C1F) #define PR_SENDER_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x0C1F) #define PR_SENDER_EMAIL_ADDRESS WINELIB_NAME_AW(PR_SENDER_EMAIL_ADDRESS_) #define PR_CURRENT_VERSION PROP_TAG(PT_I8,0x0E00) #define PR_DELETE_AFTER_SUBMIT PROP_TAG(PT_BOOLEAN,0x0E01) #define PR_DISPLAY_BCC_W PROP_TAG(PT_UNICODE,0x0E02) #define PR_DISPLAY_BCC_A PROP_TAG(PT_STRING8,0x0E02) #define PR_DISPLAY_BCC WINELIB_NAME_AW(PR_DISPLAY_BCC_) #define PR_DISPLAY_CC_W PROP_TAG(PT_UNICODE,0x0E03) #define PR_DISPLAY_CC_A PROP_TAG(PT_STRING8,0x0E03) #define PR_DISPLAY_CC WINELIB_NAME_AW(PR_DISPLAY_CC_) #define PR_DISPLAY_TO_W PROP_TAG(PT_UNICODE,0x0E04) #define PR_DISPLAY_TO_A PROP_TAG(PT_STRING8,0x0E04) #define PR_DISPLAY_TO WINELIB_NAME_AW(PR_DISPLAY_TO_) #define PR_PARENT_DISPLAY_W PROP_TAG(PT_UNICODE,0x0E05) #define PR_PARENT_DISPLAY_A PROP_TAG(PT_STRING8,0x0E05) #define PR_PARENT_DISPLAY WINELIB_NAME_AW(PR_PARENT_DISPLAY_) #define PR_MESSAGE_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x0E06) #define PR_MESSAGE_FLAGS PROP_TAG(PT_I4,0x0E07) #define PR_MESSAGE_SIZE PROP_TAG(PT_I4,0x0E08) #define PR_PARENT_ENTRYID PROP_TAG(PT_BINARY,0x0E09) #define PR_SENTMAIL_ENTRYID PROP_TAG(PT_BINARY,0x0E0A) #define PR_CORRELATE PROP_TAG(PT_BOOLEAN,0x0E0C) #define PR_CORRELATE_MTSID PROP_TAG(PT_BINARY,0x0E0D) #define PR_DISCRETE_VALUES PROP_TAG(PT_BOOLEAN,0x0E0E) #define PR_RESPONSIBILITY PROP_TAG(PT_BOOLEAN,0x0E0F) #define PR_SPOOLER_STATUS PROP_TAG(PT_I4,0x0E10) #define PR_TRANSPORT_STATUS PROP_TAG(PT_I4,0x0E11) #define PR_MESSAGE_RECIPIENTS PROP_TAG(PT_OBJECT,0x0E12) #define PR_MESSAGE_ATTACHMENTS PROP_TAG(PT_OBJECT,0x0E13) #define PR_SUBMIT_FLAGS PROP_TAG(PT_I4,0x0E14) #define PR_RECIPIENT_STATUS PROP_TAG(PT_I4,0x0E15) #define PR_TRANSPORT_KEY PROP_TAG(PT_I4,0x0E16) #define PR_MSG_STATUS PROP_TAG(PT_I4,0x0E17) #define PR_MESSAGE_DOWNLOAD_TIME PROP_TAG(PT_I4,0x0E18) #define PR_CREATION_VERSION PROP_TAG(PT_I8,0x0E19) #define PR_MODIFY_VERSION PROP_TAG(PT_I8,0x0E1A) #define PR_HASATTACH PROP_TAG(PT_BOOLEAN,0x0E1B) #define PR_BODY_CRC PROP_TAG(PT_I4, 0x0E1C) #define PR_NORMALIZED_SUBJECT_W PROP_TAG(PT_UNICODE,0x0E1D) #define PR_NORMALIZED_SUBJECT_A PROP_TAG(PT_STRING8,0x0E1D) #define PR_NORMALIZED_SUBJECT WINELIB_NAME_AW(PR_NORMALIZED_SUBJECT_) #define PR_RTF_IN_SYNC PROP_TAG(PT_BOOLEAN,0x0E1F) #define PR_ATTACH_SIZE PROP_TAG(PT_I4,0x0E20) #define PR_ATTACH_NUM PROP_TAG(PT_I4,0x0E21) #define PR_PREPROCESS PROP_TAG(PT_BOOLEAN,0x0E22) #define PR_ORIGINATING_MTA_CERTIFICATE PROP_TAG(PT_BINARY,0x0E25) #define PR_PROOF_OF_SUBMISSION PROP_TAG(PT_BINARY,0x0E26) /* A unique identifier for editing the properties of a MAPI object */ #define PR_ENTRYID PROP_TAG(PT_BINARY,0x0FFF) /* The type of an object */ #define PR_OBJECT_TYPE PROP_TAG(PT_I4,0x0FFE) #define PR_ICON PROP_TAG(PT_BINARY,0x0FFD) #define PR_MINI_ICON PROP_TAG(PT_BINARY,0x0FFC) #define PR_STORE_ENTRYID PROP_TAG(PT_BINARY,0x0FFB) #define PR_STORE_RECORD_KEY PROP_TAG(PT_BINARY,0x0FFA) /* Binary identifier for an individual object */ #define PR_RECORD_KEY PROP_TAG(PT_BINARY,0x0FF9) #define PR_MAPPING_SIGNATURE PROP_TAG(PT_BINARY,0x0FF8) #define PR_ACCESS_LEVEL PROP_TAG(PT_I4,0x0FF7) /* The primary key of a column in a table */ #define PR_INSTANCE_KEY PROP_TAG(PT_BINARY,0x0FF6) #define PR_ROW_TYPE PROP_TAG(PT_I4,0x0FF5) #define PR_ACCESS PROP_TAG(PT_I4,0x0FF4) #define PR_ROWID PROP_TAG(PT_I4,0x3000) /* The name to display for a given MAPI object */ #define PR_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3001) #define PR_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3001) #define PR_DISPLAY_NAME WINELIB_NAME_AW(PR_DISPLAY_NAME_) #define PR_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x3002) #define PR_ADDRTYPE_A PROP_TAG(PT_STRING8,0x3002) #define PR_ADDRTYPE WINELIB_NAME_AW(PR_ADDRTYPE_) /* An email address */ #define PR_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x3003) #define PR_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x3003) #define PR_EMAIL_ADDRESS WINELIB_NAME_AW(PR_EMAIL_ADDRESS_) /* A comment field */ #define PR_COMMENT_W PROP_TAG(PT_UNICODE,0x3004) #define PR_COMMENT_A PROP_TAG(PT_STRING8,0x3004) #define PR_COMMENT WINELIB_NAME_AW(PR_COMMENT_) #define PR_DEPTH PROP_TAG(PT_I4,0x3005) /* Provider-defined display name for a service provider */ #define PR_PROVIDER_DISPLAY_W PROP_TAG(PT_UNICODE,0x3006) #define PR_PROVIDER_DISPLAY_A PROP_TAG(PT_STRING8,0x3006) #define PR_PROVIDER_DISPLAY WINELIB_NAME_AW(PR_PROVIDER_DISPLAY_) /* The time an object was created */ #define PR_CREATION_TIME PROP_TAG(PT_SYSTIME,0x3007) /* The time an object was last modified */ #define PR_LAST_MODIFICATION_TIME PROP_TAG(PT_SYSTIME,0x3008) /* Flags describing a service provider, message service, or status object */ #define PR_RESOURCE_FLAGS PROP_TAG(PT_I4,0x3009) /* The name of a provider dll, minus any "32" suffix and ".dll" */ #define PR_PROVIDER_DLL_NAME_W PROP_TAG(PT_UNICODE,0x300A) #define PR_PROVIDER_DLL_NAME_A PROP_TAG(PT_STRING8,0x300A) #define PR_PROVIDER_DLL_NAME WINELIB_NAME_AW(PR_PROVIDER_DLL_NAME_) #define PR_SEARCH_KEY PROP_TAG(PT_BINARY,0x300B) #define PR_PROVIDER_UID PROP_TAG(PT_BINARY,0x300C) #define PR_PROVIDER_ORDINAL PROP_TAG(PT_I4,0x300D) #define PR_FORM_VERSION_W PROP_TAG(PT_UNICODE,0x3301) #define PR_FORM_VERSION_A PROP_TAG(PT_STRING8,0x3301) #define PR_FORM_VERSION WINELIB_NAME_AW(PR_FORM_VERSION_) #define PR_FORM_CLSID PROP_TAG(PT_CLSID,0x3302) #define PR_FORM_CONTACT_NAME_W PROP_TAG(PT_UNICODE,0x3303) #define PR_FORM_CONTACT_NAME_A PROP_TAG(PT_STRING8,0x3303) #define PR_FORM_CONTACT_NAME WINELIB_NAME_AW(PR_FORM_CONTACT_NAME_) #define PR_FORM_CATEGORY_W PROP_TAG(PT_UNICODE,0x3304) #define PR_FORM_CATEGORY_A PROP_TAG(PT_STRING8,0x3304) #define PR_FORM_CATEGORY WINELIB_NAME_AW(PR_FORM_CATEGORY_) #define PR_FORM_CATEGORY_SUB_W PROP_TAG(PT_UNICODE,0x3305) #define PR_FORM_CATEGORY_SUB_A PROP_TAG(PT_STRING8,0x3305) #define PR_FORM_CATEGORY_SUB WINELIB_NAME_AW(PR_FORM_CATEGORY_SUB_) #define PR_FORM_HOST_MAP PROP_TAG(PT_MV_LONG,0x3306) #define PR_FORM_HIDDEN PROP_TAG(PT_BOOLEAN,0x3307) #define PR_FORM_DESIGNER_NAME_W PROP_TAG(PT_UNICODE,0x3308) #define PR_FORM_DESIGNER_NAME_A PROP_TAG(PT_STRING8,0x3308) #define PR_FORM_DESIGNER_NAME WINELIB_NAME_AW(PR_FORM_DESIGNER_NAME_) #define PR_FORM_DESIGNER_GUID PROP_TAG(PT_CLSID,0x3309) #define PR_FORM_MESSAGE_BEHAVIOR PROP_TAG(PT_I4,0x330A) /* Is this row the default message store? */ #define PR_DEFAULT_STORE PROP_TAG(PT_BOOLEAN,0x3400) #define PR_STORE_SUPPORT_MASK PROP_TAG(PT_I4,0x340D) #define PR_STORE_STATE PROP_TAG(PT_I4,0x340E) #define PR_IPM_SUBTREE_SEARCH_KEY PROP_TAG(PT_BINARY,0x3410) #define PR_IPM_OUTBOX_SEARCH_KEY PROP_TAG(PT_BINARY,0x3411) #define PR_IPM_WASTEBASKET_SEARCH_KEY PROP_TAG(PT_BINARY,0x3412) #define PR_IPM_SENTMAIL_SEARCH_KEY PROP_TAG(PT_BINARY,0x3413) /* Provider-defined message store type */ #define PR_MDB_PROVIDER PROP_TAG(PT_BINARY,0x3414) #define PR_RECEIVE_FOLDER_SETTINGS PROP_TAG(PT_OBJECT,0x3415) #define PR_VALID_FOLDER_MASK PROP_TAG(PT_I4,0x35DF) #define PR_IPM_SUBTREE_ENTRYID PROP_TAG(PT_BINARY,0x35E0) #define PR_IPM_OUTBOX_ENTRYID PROP_TAG(PT_BINARY,0x35E2) #define PR_IPM_WASTEBASKET_ENTRYID PROP_TAG(PT_BINARY,0x35E3) #define PR_IPM_SENTMAIL_ENTRYID PROP_TAG(PT_BINARY,0x35E4) #define PR_VIEWS_ENTRYID PROP_TAG(PT_BINARY,0x35E5) #define PR_COMMON_VIEWS_ENTRYID PROP_TAG(PT_BINARY,0x35E6) #define PR_FINDER_ENTRYID PROP_TAG(PT_BINARY,0x35E7) #define PR_CONTAINER_FLAGS PROP_TAG(PT_I4,0x3600) #define PR_FOLDER_TYPE PROP_TAG(PT_I4,0x3601) #define PR_CONTENT_COUNT PROP_TAG(PT_I4,0x3602) #define PR_CONTENT_UNREAD PROP_TAG(PT_I4,0x3603) #define PR_CREATE_TEMPLATES PROP_TAG(PT_OBJECT,0x3604) #define PR_DETAILS_TABLE PROP_TAG(PT_OBJECT,0x3605) #define PR_SEARCH PROP_TAG(PT_OBJECT,0x3607) #define PR_SELECTABLE PROP_TAG(PT_BOOLEAN,0x3609) #define PR_SUBFOLDERS PROP_TAG(PT_BOOLEAN,0x360A) #define PR_STATUS PROP_TAG(PT_I4,0x360B) #define PR_ANR_W PROP_TAG(PT_UNICODE,0x360C) #define PR_ANR_A PROP_TAG(PT_STRING8,0x360C) #define PR_ANR WINELIB_NAME_AW(PR_ANR_) #define PR_CONTENTS_SORT_ORDER PROP_TAG(PT_MV_LONG,0x360D) #define PR_CONTAINER_HIERARCHY PROP_TAG(PT_OBJECT,0x360E) #define PR_CONTAINER_CONTENTS PROP_TAG(PT_OBJECT,0x360F) #define PR_FOLDER_ASSOCIATED_CONTENTS PROP_TAG(PT_OBJECT,0x3610) #define PR_DEF_CREATE_DL PROP_TAG(PT_BINARY,0x3611) #define PR_DEF_CREATE_MAILUSER PROP_TAG(PT_BINARY,0x3612) #define PR_CONTAINER_CLASS_W PROP_TAG(PT_UNICODE,0x3613) #define PR_CONTAINER_CLASS_A PROP_TAG(PT_STRING8,0x3613) #define PR_CONTAINER_CLASS WINELIB_NAME_AW(PR_CONTAINER_CLASS_) #define PR_CONTAINER_MODIFY_VERSION PROP_TAG(PT_I8,0x3614) #define PR_AB_PROVIDER_ID PROP_TAG(PT_BINARY,0x3615) #define PR_DEFAULT_VIEW_ENTRYID PROP_TAG(PT_BINARY,0x3616) #define PR_ASSOC_CONTENT_COUNT PROP_TAG(PT_I4,0x3617) #define PR_IPM_DRAFTS_ENTRYID PROP_TAG(PT_BINARY,0x36D7) #define PR_ATTACHMENT_X400_PARAMETERS PROP_TAG(PT_BINARY,0x3700) #define PR_ATTACH_DATA_OBJ PROP_TAG(PT_OBJECT,0x3701) #define PR_ATTACH_DATA_BIN PROP_TAG(PT_BINARY,0x3701) #define PR_ATTACH_ENCODING PROP_TAG(PT_BINARY,0x3702) #define PR_ATTACH_EXTENSION_W PROP_TAG(PT_UNICODE,0x3703) #define PR_ATTACH_EXTENSION_A PROP_TAG(PT_STRING8,0x3703) #define PR_ATTACH_EXTENSION WINELIB_NAME_AW(PR_ATTACH_EXTENSION_) #define PR_ATTACH_FILENAME_W PROP_TAG(PT_UNICODE,0x3704) #define PR_ATTACH_FILENAME_A PROP_TAG(PT_STRING8,0x3704) #define PR_ATTACH_FILENAME WINELIB_NAME_AW(PR_ATTACH_FILENAME_) #define PR_ATTACH_METHOD PROP_TAG(PT_I4,0x3705) #define PR_ATTACH_LONG_FILENAME_W PROP_TAG(PT_UNICODE,0x3707) #define PR_ATTACH_LONG_FILENAME_A PROP_TAG(PT_STRING8,0x3707) #define PR_ATTACH_LONG_FILENAME WINELIB_NAME_AW(PR_ATTACH_LONG_FILENAME_) #define PR_ATTACH_PATHNAME_W PROP_TAG(PT_UNICODE,0x3708) #define PR_ATTACH_PATHNAME_A PROP_TAG(PT_STRING8,0x3708) #define PR_ATTACH_PATHNAME WINELIB_NAME_AW(PR_ATTACH_PATHNAME_) #define PR_ATTACH_RENDERING PROP_TAG(PT_BINARY, 0x3709) #define PR_ATTACH_TAG PROP_TAG(PT_BINARY,0x370A) #define PR_RENDERING_POSITION PROP_TAG(PT_I4,0x370B) #define PR_ATTACH_TRANSPORT_NAME_W PROP_TAG(PT_UNICODE,0x370C) #define PR_ATTACH_TRANSPORT_NAME_A PROP_TAG(PT_STRING8,0x370C) #define PR_ATTACH_TRANSPORT_NAME WINELIB_NAME_AW(PR_ATTACH_TRANSPORT_NAME_) #define PR_ATTACH_LONG_PATHNAME_W PROP_TAG(PT_UNICODE,0x370D) #define PR_ATTACH_LONG_PATHNAME_A PROP_TAG(PT_STRING8,0x370D) #define PR_ATTACH_LONG_PATHNAME WINELIB_NAME_AW(PR_ATTACH_LONG_PATHNAME_) #define PR_ATTACH_MIME_TAG_W PROP_TAG(PT_UNICODE,0x370E) #define PR_ATTACH_MIME_TAG_A PROP_TAG(PT_STRING8,0x370E) #define PR_ATTACH_MIME_TAG WINELIB_NAME_AW(PR_ATTACH_MIME_TAG_) #define PR_ATTACH_ADDITIONAL_INFO PROP_TAG(PT_BINARY,0x370F) #define PR_DISPLAY_TYPE PROP_TAG(PT_I4,0x3900) #define PR_TEMPLATEID PROP_TAG(PT_BINARY,0x3902) #define PR_PRIMARY_CAPABILITY PROP_TAG(PT_BINARY,0x3904) #define PR_7BIT_DISPLAY_NAME PROP_TAG(PT_STRING8,0x39FF) #define PR_ACCOUNT_W PROP_TAG(PT_UNICODE,0x3A00) #define PR_ACCOUNT_A PROP_TAG(PT_STRING8,0x3A00) #define PR_ACCOUNT WINELIB_NAME_AW(PR_ACCOUNT_) #define PR_ALTERNATE_RECIPIENT PROP_TAG(PT_BINARY,0x3A01) #define PR_CALLBACK_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A02) #define PR_CALLBACK_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A02) #define PR_CALLBACK_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_CALLBACK_TELEPHONE_NUMBER_) #define PR_CONVERSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x3A03) #define PR_DISCLOSE_RECIPIENTS PROP_TAG(PT_BOOLEAN,0x3A04) #define PR_GENERATION_W PROP_TAG(PT_UNICODE,0x3A05) #define PR_GENERATION_A PROP_TAG(PT_STRING8,0x3A05) #define PR_GENERATION WINELIB_NAME_AW(PR_GENERATION_) #define PR_GIVEN_NAME_W PROP_TAG(PT_UNICODE,0x3A06) #define PR_GIVEN_NAME_A PROP_TAG(PT_STRING8,0x3A06) #define PR_GIVEN_NAME WINELIB_NAME_AW(PR_GIVEN_NAME_) #define PR_GOVERNMENT_ID_NUMBER_W PROP_TAG(PT_UNICODE,0x3A07) #define PR_GOVERNMENT_ID_NUMBER_A PROP_TAG(PT_STRING8,0x3A07) #define PR_GOVERNMENT_ID_NUMBER WINELIB_NAME_AW(PR_GOVERNMENT_ID_NUMBER_) #define PR_BUSINESS_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A08) #define PR_BUSINESS_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A08) #define PR_BUSINESS_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_BUSINESS_TELEPHONE_NUMBER_) #define PR_OFFICE_TELEPHONE_NUMBER_W PR_BUSINESS_TELEPHONE_NUMBER_W #define PR_OFFICE_TELEPHONE_NUMBER_A PR_BUSINESS_TELEPHONE_NUMBER_A #define PR_OFFICE_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_OFFICE_TELEPHONE_NUMBER_) #define PR_HOME_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A09) #define PR_HOME_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A09) #define PR_HOME_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_HOME_TELEPHONE_NUMBER_) #define PR_INITIALS_W PROP_TAG(PT_UNICODE,0x3A0A) #define PR_INITIALS_A PROP_TAG(PT_STRING8,0x3A0A) #define PR_INITIALS WINELIB_NAME_AW(PR_INITIALS_) #define PR_KEYWORD_W PROP_TAG(PT_UNICODE,0x3A0B) #define PR_KEYWORD_A PROP_TAG(PT_STRING8,0x3A0B) #define PR_KEYWORD WINELIB_NAME_AW(PR_KEYWORD_) #define PR_LANGUAGE_W PROP_TAG(PT_UNICODE,0x3A0C) #define PR_LANGUAGE_A PROP_TAG(PT_STRING8,0x3A0C) #define PR_LANGUAGE WINELIB_NAME_AW(PR_LANGUAGE_) #define PR_LOCATION_W PROP_TAG(PT_UNICODE,0x3A0D) #define PR_LOCATION_A PROP_TAG(PT_STRING8,0x3A0D) #define PR_LOCATION WINELIB_NAME_AW(PR_LOCATION_) #define PR_MAIL_PERMISSION PROP_TAG(PT_BOOLEAN,0x3A0E) #define PR_MHS_COMMON_NAME_W PROP_TAG(PT_UNICODE,0x3A0F) #define PR_MHS_COMMON_NAME_A PROP_TAG(PT_STRING8,0x3A0F) #define PR_MHS_COMMON_NAME WINELIB_NAME_AW(PR_MHS_COMMON_NAME_) #define PR_ORGANIZATIONAL_ID_NUMBER_W PROP_TAG(PT_UNICODE,0x3A10) #define PR_ORGANIZATIONAL_ID_NUMBER_A PROP_TAG(PT_STRING8,0x3A10) #define PR_ORGANIZATIONAL_ID_NUMBER WINELIB_NAME_AW(PR_ORGANIZATIONAL_ID_NUMBER_) #define PR_SURNAME_W PROP_TAG(PT_UNICODE,0x3A11) #define PR_SURNAME_A PROP_TAG(PT_STRING8,0x3A11) #define PR_SURNAME WINELIB_NAME_AW(PR_SURNAME_) #define PR_ORIGINAL_ENTRYID PROP_TAG(PT_BINARY,0x3A12) #define PR_ORIGINAL_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3A13) #define PR_ORIGINAL_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3A13) #define PR_ORIGINAL_DISPLAY_NAME WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_NAME_) #define PR_ORIGINAL_SEARCH_KEY PROP_TAG(PT_BINARY,0x3A14) #define PR_POSTAL_ADDRESS_W PROP_TAG(PT_UNICODE,0x3A15) #define PR_POSTAL_ADDRESS_A PROP_TAG(PT_STRING8,0x3A15) #define PR_POSTAL_ADDRESS WINELIB_NAME_AW(PR_POSTAL_ADDRESS_) #define PR_COMPANY_NAME_W PROP_TAG(PT_UNICODE,0x3A16) #define PR_COMPANY_NAME_A PROP_TAG(PT_STRING8,0x3A16) #define PR_COMPANY_NAME WINELIB_NAME_AW(PR_COMPANY_NAME_) #define PR_TITLE_W PROP_TAG(PT_UNICODE,0x3A17) #define PR_TITLE_A PROP_TAG(PT_STRING8,0x3A17) #define PR_TITLE WINELIB_NAME_AW(PR_TITLE_) #define PR_DEPARTMENT_NAME_W PROP_TAG(PT_UNICODE,0x3A18) #define PR_DEPARTMENT_NAME_A PROP_TAG(PT_STRING8,0x3A18) #define PR_DEPARTMENT_NAME WINELIB_NAME_AW(PR_DEPARTMENT_NAME_) #define PR_OFFICE_LOCATION_W PROP_TAG(PT_UNICODE,0x3A19) #define PR_OFFICE_LOCATION_A PROP_TAG(PT_STRING8,0x3A19) #define PR_OFFICE_LOCATION WINELIB_NAME_AW(PR_OFFICE_LOCATION_) #define PR_PRIMARY_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1A) #define PR_PRIMARY_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1A) #define PR_PRIMARY_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_PRIMARY_TELEPHONE_NUMBER_) #define PR_BUSINESS2_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1B) #define PR_BUSINESS2_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1B) #define PR_BUSINESS2_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_BUSINESS2_TELEPHONE_NUMBER_) #define PR_OFFICE2_TELEPHONE_NUMBER_W PR_BUSINESS2_TELEPHONE_NUMBER_W #define PR_OFFICE2_TELEPHONE_NUMBER_A PR_BUSINESS2_TELEPHONE_NUMBER_A #define PR_OFFICE2_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_OFFICE2_TELEPHONE_NUMBER_) #define PR_MOBILE_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1C) #define PR_MOBILE_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1C) #define PR_MOBILE_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_MOBILE_TELEPHONE_NUMBER_) #define PR_CELLULAR_TELEPHONE_NUMBER_W PR_MOBILE_TELEPHONE_NUMBER_W #define PR_CELLULAR_TELEPHONE_NUMBER_A PR_MOBILE_TELEPHONE_NUMBER_A #define PR_CELLULAR_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_CELLULAR_TELEPHONE_NUMBER_) #define PR_RADIO_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1D) #define PR_RADIO_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1D) #define PR_RADIO_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_RADIO_TELEPHONE_NUMBER_) #define PR_CAR_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1E) #define PR_CAR_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1E) #define PR_CAR_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_CAR_TELEPHONE_NUMBER_) #define PR_OTHER_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1F) #define PR_OTHER_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1F) #define PR_OTHER_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_OTHER_TELEPHONE_NUMBER_) #define PR_TRANSMITABLE_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3A20) #define PR_TRANSMITABLE_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3A20) #define PR_TRANSMITABLE_DISPLAY_NAME WINELIB_NAME_AW(PR_TRANSMITABLE_DISPLAY_NAME_) #define PR_PAGER_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A21) #define PR_PAGER_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A21) #define PR_PAGER_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_PAGER_TELEPHONE_NUMBER_) #define PR_BEEPER_TELEPHONE_NUMBER_W PR_PAGER_TELEPHONE_NUMBER_W #define PR_BEEPER_TELEPHONE_NUMBER_A PR_PAGER_TELEPHONE_NUMBER_A #define PR_BEEPER_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_BEEPER_TELEPHONE_NUMBER_) #define PR_USER_CERTIFICATE PROP_TAG(PT_BINARY,0x3A22) #define PR_PRIMARY_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A23) #define PR_PRIMARY_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A23) #define PR_PRIMARY_FAX_NUMBER WINELIB_NAME_AW(PR_PRIMARY_FAX_NUMBER_) #define PR_BUSINESS_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A24) #define PR_BUSINESS_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A24) #define PR_BUSINESS_FAX_NUMBER WINELIB_NAME_AW(PR_BUSINESS_FAX_NUMBER_) #define PR_HOME_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A25) #define PR_HOME_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A25) #define PR_HOME_FAX_NUMBER WINELIB_NAME_AW(PR_HOME_FAX_NUMBER_) #define PR_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A26) #define PR_COUNTRY_A PROP_TAG(PT_STRING8,0x3A26) #define PR_COUNTRY WINELIB_NAME_AW(PR_COUNTRY_) #define PR_BUSINESS_ADDRESS_COUNTRY_W PR_COUNTRY_W #define PR_BUSINESS_ADDRESS_COUNTRY_A PR_COUNTRY_A #define PR_BUSINESS_ADDRESS_COUNTRY WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_COUNTRY_) #define PR_LOCALITY_W PROP_TAG(PT_UNICODE,0x3A27) #define PR_LOCALITY_A PROP_TAG(PT_STRING8,0x3A27) #define PR_LOCALITY WINELIB_NAME_AW(PR_LOCALITY_) #define PR_BUSINESS_ADDRESS_CITY_W PR_LOCALITY_W #define PR_BUSINESS_ADDRESS_CITY_A PR_LOCALITY_A #define PR_BUSINESS_ADDRESS_CITY WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_CITY_) #define PR_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A28) #define PR_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A28) #define PR_STATE_OR_PROVINCE WINELIB_NAME_AW(PR_STATE_OR_PROVINCE_) #define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_W PR_STATE_OR_PROVINCE_W #define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_A PR_STATE_OR_PROVINCE_A #define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_) #define PR_STREET_ADDRESS_W PROP_TAG(PT_UNICODE,0x3A29) #define PR_STREET_ADDRESS_A PROP_TAG(PT_STRING8,0x3A29) #define PR_STREET_ADDRESS WINELIB_NAME_AW(PR_STREET_ADDRESS_) #define PR_BUSINESS_ADDRESS_STREET_W PR_STREET_ADDRESS_W #define PR_BUSINESS_ADDRESS_STREET_A PR_STREET_ADDRESS_A #define PR_BUSINESS_ADDRESS_STREET WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_STREET_) #define PR_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A2A) #define PR_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A2A) #define PR_POSTAL_CODE WINELIB_NAME_AW(PR_POSTAL_CODE_) #define PR_BUSINESS_ADDRESS_POSTAL_CODE_W PR_POSTAL_CODE_W #define PR_BUSINESS_ADDRESS_POSTAL_CODE_A PR_POSTAL_CODE_A #define PR_BUSINESS_ADDRESS_POSTAL_CODE WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_POSTAL_CODE_) #define PR_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A2B) #define PR_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A2B) #define PR_POST_OFFICE_BOX WINELIB_NAME_AW(PR_POST_OFFICE_BOX_) #define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_W PR_POST_OFFICE_BOX_W #define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_A PR_POST_OFFICE_BOX_A #define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_) #define PR_TELEX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2C) #define PR_TELEX_NUMBER_A PROP_TAG(PT_STRING8,0x3A2C) #define PR_TELEX_NUMBER WINELIB_NAME_AW(PR_TELEX_NUMBER_) #define PR_ISDN_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2D) #define PR_ISDN_NUMBER_A PROP_TAG(PT_STRING8,0x3A2D) #define PR_ISDN_NUMBER WINELIB_NAME_AW(PR_ISDN_NUMBER_) #define PR_ASSISTANT_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2E) #define PR_ASSISTANT_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A2E) #define PR_ASSISTANT_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_ASSISTANT_TELEPHONE_NUMBER_) #define PR_HOME2_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2F) #define PR_HOME2_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A2F) #define PR_HOME2_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_HOME2_TELEPHONE_NUMBER_) #define PR_ASSISTANT_W PROP_TAG(PT_UNICODE,0x3A30) #define PR_ASSISTANT_A PROP_TAG(PT_STRING8,0x3A30) #define PR_ASSISTANT WINELIB_NAME_AW(PR_ASSISTANT_) #define PR_SEND_RICH_INFO PROP_TAG(PT_BOOLEAN,0x3A40) #define PR_WEDDING_ANNIVERSARY PROP_TAG(PT_SYSTIME,0x3A41) #define PR_BIRTHDAY PROP_TAG(PT_SYSTIME,0x3A42) #define PR_HOBBIES_W PROP_TAG(PT_UNICODE,0x3A43) #define PR_HOBBIES_A PROP_TAG(PT_STRING8,0x3A43) #define PR_HOBBIES WINELIB_NAME_AW(PR_HOBBIES_) #define PR_MIDDLE_NAME_W PROP_TAG(PT_UNICODE,0x3A44) #define PR_MIDDLE_NAME_A PROP_TAG(PT_STRING8,0x3A44) #define PR_MIDDLE_NAME WINELIB_NAME_AW(PR_MIDDLE_NAME_) #define PR_DISPLAY_NAME_PREFIX_W PROP_TAG(PT_UNICODE,0x3A45) #define PR_DISPLAY_NAME_PREFIX_A PROP_TAG(PT_STRING8,0x3A45) #define PR_DISPLAY_NAME_PREFIX WINELIB_NAME_AW(PR_DISPLAY_NAME_PREFIX_) #define PR_PROFESSION_W PROP_TAG(PT_UNICODE,0x3A46) #define PR_PROFESSION_A PROP_TAG(PT_STRING8,0x3A46) #define PR_PROFESSION WINELIB_NAME_AW(PR_PROFESSION_) #define PR_PREFERRED_BY_NAME_W PROP_TAG(PT_UNICODE,0x3A47) #define PR_PREFERRED_BY_NAME_A PROP_TAG(PT_STRING8,0x3A47) #define PR_PREFERRED_BY_NAME WINELIB_NAME_AW(PR_PREFERRED_BY_NAME_) #define PR_SPOUSE_NAME_W PROP_TAG(PT_UNICODE,0x3A48) #define PR_SPOUSE_NAME_A PROP_TAG(PT_STRING8,0x3A48) #define PR_SPOUSE_NAME WINELIB_NAME_AW(PR_SPOUSE_NAME_) #define PR_COMPUTER_NETWORK_NAME_W PROP_TAG(PT_UNICODE,0x3A49) #define PR_COMPUTER_NETWORK_NAME_A PROP_TAG(PT_STRING8,0x3A49) #define PR_COMPUTER_NETWORK_NAME WINELIB_NAME_AW(PR_COMPUTER_NETWORK_NAME_) #define PR_CUSTOMER_ID_W PROP_TAG(PT_UNICODE,0x3A4A) #define PR_CUSTOMER_ID_A PROP_TAG(PT_STRING8,0x3A4A) #define PR_CUSTOMER_ID WINELIB_NAME_AW(PR_CUSTOMER_ID_) #define PR_TTYTDD_PHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A4B) #define PR_TTYTDD_PHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A4B) #define PR_TTYTDD_PHONE_NUMBER WINELIB_NAME_AW(PR_TTYTDD_PHONE_NUMBER_) #define PR_FTP_SITE_W PROP_TAG(PT_UNICODE,0x3A4C) #define PR_FTP_SITE_A PROP_TAG(PT_STRING8,0x3A4C) #define PR_FTP_SITE WINELIB_NAME_AW(PR_FTP_SITE_) #define PR_GENDER PROP_TAG(PT_I2,0x3A4D) #define PR_MANAGER_NAME_W PROP_TAG(PT_UNICODE,0x3A4E) #define PR_MANAGER_NAME_A PROP_TAG(PT_STRING8,0x3A4E) #define PR_MANAGER_NAME WINELIB_NAME_AW(PR_MANAGER_NAME_) #define PR_NICKNAME_W PROP_TAG(PT_UNICODE,0x3A4F) #define PR_NICKNAME_A PROP_TAG(PT_STRING8,0x3A4F) #define PR_NICKNAME WINELIB_NAME_AW(PR_NICKNAME_) #define PR_PERSONAL_HOME_PAGE_W PROP_TAG(PT_UNICODE,0x3A50) #define PR_PERSONAL_HOME_PAGE_A PROP_TAG(PT_STRING8,0x3A50) #define PR_PERSONAL_HOME_PAGE WINELIB_NAME_AW(PR_PERSONAL_HOME_PAGE_) #define PR_BUSINESS_HOME_PAGE_W PROP_TAG(PT_UNICODE,0x3A51) #define PR_BUSINESS_HOME_PAGE_A PROP_TAG(PT_STRING8,0x3A51) #define PR_BUSINESS_HOME_PAGE WINELIB_NAME_AW(PR_BUSINESS_HOME_PAGE_) #define PR_CONTACT_VERSION PROP_TAG(PT_CLSID,0x3A52) #define PR_CONTACT_ENTRYIDS PROP_TAG(PT_MV_BINARY,0x3A53) #define PR_CONTACT_ADDRTYPES_W PROP_TAG(PT_MV_UNICODE,0x3A54) #define PR_CONTACT_ADDRTYPES_A PROP_TAG(PT_MV_STRING8,0x3A54) #define PR_CONTACT_ADDRTYPES WINELIB_NAME_AW(PR_CONTACT_ADDRTYPES_) #define PR_CONTACT_DEFAULT_ADDRESS_INDEX PROP_TAG(PT_I4,0x3A55) #define PR_CONTACT_EMAIL_ADDRESSES_W PROP_TAG(PT_MV_UNICODE,0x3A56) #define PR_CONTACT_EMAIL_ADDRESSES_A PROP_TAG(PT_MV_STRING8,0x3A56) #define PR_CONTACT_EMAIL_ADDRESSES WINELIB_NAME_AW(PR_CONTACT_EMAIL_ADDRESSES_) #define PR_COMPANY_MAIN_PHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A57) #define PR_COMPANY_MAIN_PHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A57) #define PR_COMPANY_MAIN_PHONE_NUMBER WINELIB_NAME_AW(PR_COMPANY_MAIN_PHONE_NUMBER_) #define PR_CHILDRENS_NAMES_W PROP_TAG(PT_MV_UNICODE,0x3A58) #define PR_CHILDRENS_NAMES_A PROP_TAG(PT_MV_STRING8,0x3A58) #define PR_CHILDRENS_NAMES WINELIB_NAME_AW(PR_CHILDRENS_NAMES_) #define PR_HOME_ADDRESS_CITY_W PROP_TAG(PT_UNICODE,0x3A59) #define PR_HOME_ADDRESS_CITY_A PROP_TAG(PT_STRING8,0x3A59) #define PR_HOME_ADDRESS_CITY WINELIB_NAME_AW(PR_HOME_ADDRESS_CITY_) #define PR_HOME_ADDRESS_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A5A) #define PR_HOME_ADDRESS_COUNTRY_A PROP_TAG(PT_STRING8,0x3A5A) #define PR_HOME_ADDRESS_COUNTRY WINELIB_NAME_AW(PR_HOME_ADDRESS_COUNTRY_) #define PR_HOME_ADDRESS_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A5B) #define PR_HOME_ADDRESS_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A5B) #define PR_HOME_ADDRESS_POSTAL_CODE WINELIB_NAME_AW(PR_HOME_ADDRESS_POSTAL_CODE_) #define PR_HOME_ADDRESS_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A5C) #define PR_HOME_ADDRESS_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A5C) #define PR_HOME_ADDRESS_STATE_OR_PROVINCE WINELIB_NAME_AW(PR_HOME_ADDRESS_STATE_OR_PROVINCE_) #define PR_HOME_ADDRESS_STREET_W PROP_TAG(PT_UNICODE,0x3A5D) #define PR_HOME_ADDRESS_STREET_A PROP_TAG(PT_STRING8,0x3A5D) #define PR_HOME_ADDRESS_STREET WINELIB_NAME_AW(PR_HOME_ADDRESS_STREET_) #define PR_HOME_ADDRESS_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A5E) #define PR_HOME_ADDRESS_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A5E) #define PR_HOME_ADDRESS_POST_OFFICE_BOX WINELIB_NAME_AW(PR_HOME_ADDRESS_POST_OFFICE_BOX_) #define PR_OTHER_ADDRESS_CITY_W PROP_TAG(PT_UNICODE,0x3A5F) #define PR_OTHER_ADDRESS_CITY_A PROP_TAG(PT_STRING8,0x3A5F) #define PR_OTHER_ADDRESS_CITY WINELIB_NAME_AW(PR_OTHER_ADDRESS_CITY_) #define PR_OTHER_ADDRESS_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A60) #define PR_OTHER_ADDRESS_COUNTRY_A PROP_TAG(PT_STRING8,0x3A60) #define PR_OTHER_ADDRESS_COUNTRY WINELIB_NAME_AW(PR_OTHER_ADDRESS_COUNTRY_) #define PR_OTHER_ADDRESS_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A61) #define PR_OTHER_ADDRESS_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A61) #define PR_OTHER_ADDRESS_POSTAL_CODE WINELIB_NAME_AW(PR_OTHER_ADDRESS_POSTAL_CODE_) #define PR_OTHER_ADDRESS_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A62) #define PR_OTHER_ADDRESS_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A62) #define PR_OTHER_ADDRESS_STATE_OR_PROVINCE WINELIB_NAME_AW(PR_OTHER_ADDRESS_STATE_OR_PROVINCE_) #define PR_OTHER_ADDRESS_STREET_W PROP_TAG(PT_UNICODE,0x3A63) #define PR_OTHER_ADDRESS_STREET_A PROP_TAG(PT_STRING8,0x3A63) #define PR_OTHER_ADDRESS_STREET WINELIB_NAME_AW(PR_OTHER_ADDRESS_STREET_) #define PR_OTHER_ADDRESS_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A64) #define PR_OTHER_ADDRESS_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A64) #define PR_OTHER_ADDRESS_POST_OFFICE_BOX WINELIB_NAME_AW(PR_OTHER_ADDRESS_POST_OFFICE_BOX_) #define PR_STORE_PROVIDERS PROP_TAG(PT_BINARY,0x3D00) #define PR_AB_PROVIDERS PROP_TAG(PT_BINARY,0x3D01) #define PR_TRANSPORT_PROVIDERS PROP_TAG(PT_BINARY,0x3D02) #define PR_DEFAULT_PROFILE PROP_TAG(PT_BOOLEAN,0x3D04) #define PR_AB_SEARCH_PATH PROP_TAG(PT_MV_BINARY,0x3D05) #define PR_AB_DEFAULT_DIR PROP_TAG(PT_BINARY,0x3D06) #define PR_AB_DEFAULT_PAB PROP_TAG(PT_BINARY,0x3D07) #define PR_FILTERING_HOOKS PROP_TAG(PT_BINARY, 0x3D08) #define PR_SERVICE_NAME_W PROP_TAG(PT_UNICODE,0x3D09) #define PR_SERVICE_NAME_A PROP_TAG(PT_STRING8,0x3D09) #define PR_SERVICE_NAME WINELIB_NAME_AW(PR_SERVICE_NAME_) #define PR_SERVICE_DLL_NAME_W PROP_TAG(PT_UNICODE,0x3D0A) #define PR_SERVICE_DLL_NAME_A PROP_TAG(PT_STRING8,0x3D0A) #define PR_SERVICE_DLL_NAME WINELIB_NAME_AW(PR_SERVICE_DLL_NAME_) #define PR_SERVICE_ENTRY_NAME PROP_TAG(PT_STRING8,0x3D0B) #define PR_SERVICE_UID PROP_TAG(PT_BINARY,0x3D0C) #define PR_SERVICE_EXTRA_UIDS PROP_TAG(PT_BINARY,0x3D0D) #define PR_SERVICES PROP_TAG(PT_BINARY,0x3D0E) #define PR_SERVICE_SUPPORT_FILES_W PROP_TAG(PT_MV_UNICODE,0x3D0F) #define PR_SERVICE_SUPPORT_FILES_A PROP_TAG(PT_MV_STRING8,0x3D0F) #define PR_SERVICE_SUPPORT_FILES WINELIB_NAME_AW(PR_SERVICE_SUPPORT_FILES_) #define PR_SERVICE_DELETE_FILES_W PROP_TAG(PT_MV_UNICODE,0x3D10) #define PR_SERVICE_DELETE_FILES_A PROP_TAG(PT_MV_STRING8,0x3D10) #define PR_SERVICE_DELETE_FILES WINELIB_NAME_AW(PR_SERVICE_DELETE_FILES_) #define PR_AB_SEARCH_PATH_UPDATE PROP_TAG(PT_BINARY,0x3D11) #define PR_PROFILE_NAME_A PROP_TAG(PT_STRING8,0x3D12) #define PR_PROFILE_NAME_W PROP_TAG(PT_UNICODE,0x3D12) #define PR_PROFILE_NAME WINELIB_NAME_AW(PR_PROFILE_NAME_) #define PR_IDENTITY_DISPLAY_W PROP_TAG(PT_UNICODE,0x3E00) #define PR_IDENTITY_DISPLAY_A PROP_TAG(PT_STRING8,0x3E00) #define PR_IDENTITY_DISPLAY WINELIB_NAME_AW(PR_IDENTITY_DISPLAY_) #define PR_IDENTITY_ENTRYID PROP_TAG(PT_BINARY,0x3E01) #define PR_RESOURCE_METHODS PROP_TAG(PT_I4,0x3E02) /* Service provider type */ #define PR_RESOURCE_TYPE PROP_TAG(PT_I4,0x3E03) #define PR_STATUS_CODE PROP_TAG(PT_I4,0x3E04) #define PR_IDENTITY_SEARCH_KEY PROP_TAG(PT_BINARY,0x3E05) #define PR_OWN_STORE_ENTRYID PROP_TAG(PT_BINARY,0x3E06) #define PR_RESOURCE_PATH_W PROP_TAG(PT_UNICODE,0x3E07) #define PR_RESOURCE_PATH_A PROP_TAG(PT_STRING8,0x3E07) #define PR_RESOURCE_PATH WINELIB_NAME_AW(PR_RESOURCE_PATH_) #define PR_STATUS_STRING_W PROP_TAG(PT_UNICODE,0x3E08) #define PR_STATUS_STRING_A PROP_TAG(PT_STRING8,0x3E08) #define PR_STATUS_STRING WINELIB_NAME_AW(PR_STATUS_STRING_) #define PR_X400_DEFERRED_DELIVERY_CANCEL PROP_TAG(PT_BOOLEAN,0x3E09) #define PR_HEADER_FOLDER_ENTRYID PROP_TAG(PT_BINARY,0x3E0A) #define PR_REMOTE_PROGRESS PROP_TAG(PT_I4,0x3E0B) #define PR_REMOTE_PROGRESS_TEXT_W PROP_TAG(PT_UNICODE,0x3E0C) #define PR_REMOTE_PROGRESS_TEXT_A PROP_TAG(PT_STRING8,0x3E0C) #define PR_REMOTE_PROGRESS_TEXT WINELIB_NAME_AW(PR_REMOTE_PROGRESS_TEXT_) #define PR_REMOTE_VALIDATE_OK PROP_TAG(PT_BOOLEAN,0x3E0D) #define PR_CONTROL_FLAGS PROP_TAG(PT_I4,0x3F00) #define PR_CONTROL_STRUCTURE PROP_TAG(PT_BINARY,0x3F01) #define PR_CONTROL_TYPE PROP_TAG(PT_I4,0x3F02) #define PR_DELTAX PROP_TAG(PT_I4,0x3F03) #define PR_DELTAY PROP_TAG(PT_I4,0x3F04) #define PR_XPOS PROP_TAG(PT_I4,0x3F05) #define PR_YPOS PROP_TAG(PT_I4,0x3F06) #define PR_CONTROL_ID PROP_TAG(PT_BINARY,0x3F07) #define PR_INITIAL_DETAILS_PANE PROP_TAG(PT_I4,0x3F08) #define PROP_ID_SECURE_MIN 0x67F0 #define PROP_ID_SECURE_MAX 0x67FF #endif /* MAPITAGS_H */ ================================================ FILE: wine/windows/mapiutil.h ================================================ /* * Copyright 2004 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPIUTIL_H_ #define MAPIUTIL_H_ #include #ifdef __cplusplus extern "C" { #endif #define TAD_ALL_ROWS 1 /* Delete all rows */ LPMALLOC WINAPI MAPIGetDefaultMalloc(void); #define SOF_UNIQUEFILENAME 0x80000000U /* Create a unique (temporary) filename */ #if defined (UNICODE) || defined (__WINESRC__) typedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER, ULONG,LPWSTR,LPWSTR,LPSTREAM*); HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER, ULONG,LPWSTR,LPWSTR,LPSTREAM*); #else typedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER, ULONG,LPSTR,LPSTR,LPSTREAM*); HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER, ULONG,LPSTR,LPSTR,LPSTREAM*); #endif #define OPENSTREAMONFILE "OpenStreamOnFile" BOOL WINAPI FEqualNames(LPMAPINAMEID,LPMAPINAMEID); typedef struct IPropData *LPPROPDATA; #define IPROP_READONLY 0x00001U #define IPROP_READWRITE 0x00002U #define IPROP_CLEAN 0x10000U #define IPROP_DIRTY 0x20000U SCODE WINAPI CreateIProp(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*, LPVOID,LPPROPDATA*); SCODE WINAPI PropCopyMore(LPSPropValue,LPSPropValue,ALLOCATEMORE*,LPVOID); ULONG WINAPI UlPropSize(LPSPropValue); VOID WINAPI GetInstance(LPSPropValue,LPSPropValue,ULONG); BOOL WINAPI FPropContainsProp(LPSPropValue,LPSPropValue,ULONG); BOOL WINAPI FPropCompareProp(LPSPropValue,ULONG,LPSPropValue); LONG WINAPI LPropCompareProp(LPSPropValue,LPSPropValue); HRESULT WINAPI HrAddColumns(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER,LPFREEBUFFER); HRESULT WINAPI HrAddColumnsEx(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER, LPFREEBUFFER,void (*)(LPSPropTagArray)); HRESULT WINAPI HrAllocAdviseSink(LPNOTIFCALLBACK,LPVOID,LPMAPIADVISESINK*); HRESULT WINAPI HrThisThreadAdviseSink(LPMAPIADVISESINK,LPMAPIADVISESINK*); HRESULT WINAPI HrDispatchNotifications (ULONG); ULONG WINAPI UlAddRef(void*); ULONG WINAPI UlRelease(void*); HRESULT WINAPI HrGetOneProp(LPMAPIPROP,ULONG,LPSPropValue*); HRESULT WINAPI HrSetOneProp(LPMAPIPROP,LPSPropValue); BOOL WINAPI FPropExists(LPMAPIPROP,ULONG); void WINAPI FreePadrlist(LPADRLIST); void WINAPI FreeProws(LPSRowSet); HRESULT WINAPI HrQueryAllRows(LPMAPITABLE,LPSPropTagArray,LPSRestriction, LPSSortOrderSet,LONG,LPSRowSet*); LPSPropValue WINAPI PpropFindProp(LPSPropValue,ULONG,ULONG); #if defined (UNICODE) || defined (__WINESRC__) BOOL WINAPI FBinFromHex(LPWSTR,LPBYTE); SCODE WINAPI ScBinFromHexBounded(LPWSTR,LPBYTE,ULONG); void WINAPI HexFromBin(LPBYTE,int,LPWSTR); ULONG WINAPI UlFromSzHex(LPCWSTR); LPWSTR WINAPI SzFindCh(LPCWSTR,USHORT); LPWSTR WINAPI SzFindLastCh(LPCWSTR,USHORT); LPWSTR WINAPI SzFindSz(LPCWSTR,LPCWSTR); UINT WINAPI UFromSz(LPCSTR); #else BOOL WINAPI FBinFromHex(LPSTR,LPBYTE); SCODE WINAPI ScBinFromHexBounded(LPSTR,LPBYTE,ULONG); void WINAPI HexFromBin(LPBYTE,int,LPSTR); ULONG WINAPI UlFromSzHex(LPCSTR); LPSTR WINAPI SzFindCh(LPCSTR,USHORT); LPSTR WINAPI SzFindLastCh(LPCSTR,USHORT); LPSTR WINAPI SzFindSz(LPCSTR,LPCSTR); UINT WINAPI UFromSz(LPCSTR); #endif SCODE WINAPI ScInitMapiUtil(ULONG); void WINAPI DeinitMapiUtil(void); #define szHrDispatchNotifications "_HrDispatchNotifications@4" #define szScCreateConversationIndex "_ScCreateConversationIndex@16" typedef HRESULT (WINAPI DISPATCHNOTIFICATIONS)(ULONG); typedef DISPATCHNOTIFICATIONS *LPDISPATCHNOTIFICATIONS; typedef SCODE (WINAPI CREATECONVERSATIONINDEX)(ULONG,LPBYTE,ULONG*,LPBYTE*); typedef CREATECONVERSATIONINDEX *LPCREATECONVERSATIONINDEX; typedef struct ITableData *LPTABLEDATA; typedef void (WINAPI CALLERRELEASE)(ULONG,LPTABLEDATA,LPMAPITABLE); /***************************************************************************** * ITableData interface * * The underlying table data structure for IMAPITable. */ #define INTERFACE ITableData DECLARE_INTERFACE_(ITableData,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** ITableData methods ***/ STDMETHOD(HrGetView)(THIS_ LPSSortOrderSet lpSort, CALLERRELEASE *lpRel, ULONG ulData, LPMAPITABLE *lppTable) PURE; STDMETHOD(HrModifyRow)(THIS_ LPSRow lpRow) PURE; STDMETHOD(HrDeleteRow)(THIS_ LPSPropValue lpKey) PURE; STDMETHOD(HrQueryRow)(THIS_ LPSPropValue lpKey, LPSRow *lppRow, ULONG *lpRowNum) PURE; STDMETHOD(HrEnumRow)(THIS_ ULONG ulRowNum, LPSRow *lppRow) PURE; STDMETHOD(HrNotify)(THIS_ ULONG ulFlags, ULONG cValues, LPSPropValue lpValues) PURE; STDMETHOD(HrInsertRow)(THIS_ ULONG ulRow, LPSRow lpRow) PURE; STDMETHOD(HrModifyRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows) PURE; STDMETHOD(HrDeleteRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows, ULONG *lpCount) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define ITableData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ITableData_AddRef(p) (p)->lpVtbl->AddRef(p) #define ITableData_Release(p) (p)->lpVtbl->Release(p) /*** ITableData methods ***/ #define ITableData_HrGetView(p,a,b,c,d) (p)->lpVtbl->HrGetView(p,a,b,c,d) #define ITableData_HrModifyRow(p,a) (p)->lpVtbl->HrModifyRow(p,a) #define ITableData_HrDeleteRow(p,a) (p)->lpVtbl->HrDeleteRow(p,a) #define ITableData_HrQueryRow(p,a,b,c) (p)->lpVtbl->HrQueryRow(p,a,b,c) #define ITableData_HrEnumRow(p,a,b) (p)->lpVtbl->HrEnumRow(p,a,b) #define ITableData_HrNotify(p,a,b,c) (p)->lpVtbl->HrNotify(p,a,b,c) #define ITableData_HrInsertRow(p,a,b) (p)->lpVtbl->HrInsertRow(p,a,b) #define ITableData_HrModifyRows(p,a,b) (p)->lpVtbl->HrModifyRows(p,a,b) #define ITableData_HrDeleteRows(p,a,b,c) (p)->lpVtbl->HrDeleteRows(p,a,b,c) #endif SCODE WINAPI CreateTable(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*, LPVOID,ULONG,ULONG,LPSPropTagArray,LPTABLEDATA*); SCODE WINAPI ScCountNotifications(int,LPNOTIFICATION,ULONG*); SCODE WINAPI ScCountProps(int,LPSPropValue,ULONG*); SCODE WINAPI ScCopyNotifications(int,LPNOTIFICATION,LPVOID,ULONG*); SCODE WINAPI ScCopyProps(int,LPSPropValue,LPVOID,ULONG*); SCODE WINAPI ScDupPropset(int,LPSPropValue,LPALLOCATEBUFFER,LPSPropValue*); SCODE WINAPI ScRelocNotifications(int,LPNOTIFICATION,LPVOID,LPVOID,ULONG*); SCODE WINAPI ScRelocProps(int,LPSPropValue,LPVOID,LPVOID,ULONG*); LPSPropValue WINAPI LpValFindProp(ULONG,ULONG,LPSPropValue); static inline FILETIME FtAddFt(FILETIME ftLeft, FILETIME ftRight) { LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight; union { FILETIME ft; LONG64 ll; } ftmap; ftmap.ll = *pl + *pr; return ftmap.ft; } static inline FILETIME FtSubFt(FILETIME ftLeft, FILETIME ftRight) { LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight; union { FILETIME ft; LONG64 ll; } ftmap; ftmap.ll = *pl - *pr; return ftmap.ft; } static inline FILETIME FtNegFt(FILETIME ftLeft) { LONG64 *p = (LONG64*)&ftLeft; union { FILETIME ft; LONG64 ll; } ftmap; ftmap.ll = -*p; return ftmap.ft; } static inline FILETIME FtMulDw(DWORD dwLeft, FILETIME ftRight) { LONG64 l = (LONG64)dwLeft, *pr = (LONG64*)&ftRight; union { FILETIME ft; LONG64 ll; } ftmap; ftmap.ll = l * (*pr); return ftmap.ft; } static inline FILETIME FtMulDwDw(DWORD dwLeft, DWORD dwRight) { LONG64 l = (LONG64)dwLeft, r = (LONG64)dwRight; union { FILETIME ft; LONG64 ll; } ftmap; ftmap.ll = l * r; return ftmap.ft; } /***************************************************************************** * IPropData interface * */ #define INTERFACE IPropData DECLARE_INTERFACE_(IPropData,IMAPIProp) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPIProp methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE; STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, LPSPropProblemArray *lppProbs) PURE; STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, LPMAPINAMEID **lpppNames) PURE; STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; /*** IPropData methods ***/ STDMETHOD(HrSetObjAccess)(THIS_ ULONG ulAccess) PURE; STDMETHOD(HrSetPropAccess)(THIS_ LPSPropTagArray lpPropTags, ULONG *lpAccess) PURE; STDMETHOD(HrGetPropAccess)(THIS_ LPSPropTagArray *lppPropTags, ULONG **lppAccess) PURE; STDMETHOD(HrAddObjProps)(THIS_ LPSPropTagArray lppPropTags, LPSPropProblemArray *lppProbs) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IPropData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IPropData_AddRef(p) (p)->lpVtbl->AddRef(p) #define IPropData_Release(p) (p)->lpVtbl->Release(p) /*** IMAPIProp methods ***/ #define IPropData_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IPropData_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a) #define IPropData_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d) #define IPropData_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b) #define IPropData_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) #define IPropData_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c) #define IPropData_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b) #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) #define IPropData_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) #define IPropData_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) #define IPropData_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) #define IPropData_HrSetObjAccess(p,a) (p)->lpVtbl->HrSetObjAccess(p,a) #define IPropData_HrSetPropAccess(p,a,b) (p)->lpVtbl->HrSetPropAccess(p,a,b) #define IPropData_HrGetPropAccess(p,a,b) (p)->lpVtbl->HrGetPropAccess(p,a,b) #define IPropData_HrAddObjProps(p,a,b) (p)->lpVtbl->HrAddObjProps(p,a,b) #endif #ifdef __cplusplus } #endif #endif /* MAPIUTIL_H_ */ ================================================ FILE: wine/windows/mapival.h ================================================ /* * Copyright 2004 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPIVAL_H #define MAPIVAL_H #include #include #include #ifdef __cplusplus extern "C" { #endif BOOL WINAPI FBadRglpszW(LPWSTR*,ULONG); BOOL WINAPI FBadRowSet(LPSRowSet); BOOL WINAPI FBadRglpNameID(LPMAPINAMEID*,ULONG); BOOL WINAPI FBadEntryList(LPENTRYLIST); ULONG WINAPI FBadRestriction(LPSRestriction); ULONG WINAPI FBadPropTag(ULONG); ULONG WINAPI FBadRow(LPSRow); ULONG WINAPI FBadProp(LPSPropValue); ULONG WINAPI FBadSortOrderSet(LPSSortOrderSet); ULONG WINAPI FBadColumnSet(LPSPropTagArray); #define FBadRgPropVal(p,n) FAILED(ScCountProps((n),(p),NULL)) #define FBadPropVal(p) FBadRgPropVal(1,(p)) #define FBadAdrList(p) FBadRowSet((LPSRowSet)(p)) #define BAD_STANDARD_OBJ(a,b,c,d) FALSE #define FBadUnknown(a) FALSE #define FBadQueryInterface(a,b,c) FALSE #define FBadAddRef(a) FALSE #define FBadRelease(a) FALSE #define FBadGetLastError(a,b,c,d) FALSE #define FBadSaveChanges(a,b) FALSE #define FBadGetProps(a,b,c,d) FALSE #define FBadGetPropList(a,b) FALSE #define FBadOpenProperty(a,b,c,d,e,f) FALSE #define FBadSetProps(a,b,c,d) FALSE #define FBadDeleteProps(a,b,c) FALSE #define FBadCopyTo(a,b,c,d,e,f,g,h,i,j) FALSE #define FBadCopyProps(a,b,c,d,e,f,g,h) FALSE #define FBadGetNamesFromIDs(a,b,c,d,e,f) FALSE #define FBadGetIDsFromNames(a,b,c,d,e) FALSE #define ValidateParms(x) do { } while(0) #define UlValidateParms(x) do { } while(0) #define CheckParms(x) do { } while(0) #define ValidateParameters1(a,b) do { } while(0) #define ValidateParameters2(a,b,c) do { } while(0) #define ValidateParameters3(a,b,c,d) do { } while(0) #define ValidateParameters4(a,b,c,d,e) do { } while(0) #define ValidateParameters5(a,b,c,d,e,f) do { } while(0) #define ValidateParameters6(a,b,c,d,e,f,g) do { } while(0) #define ValidateParameters7(a,b,c,d,e,f,g,h) do { } while(0) #define ValidateParameters8(a,b,c,d,e,f,g,h,i) do { } while(0) #define ValidateParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0) #define ValidateParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0) #define ValidateParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0) #define ValidateParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0) #define ValidateParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0) #define ValidateParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0) #define ValidateParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0) #define ValidateParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0) #define UlValidateParameters1(a,b) do { } while(0) #define UlValidateParameters2(a,b,c) do { } while(0) #define UlValidateParameters3(a,b,c,d) do { } while(0) #define UlValidateParameters4(a,b,c,d,e) do { } while(0) #define UlValidateParameters5(a,b,c,d,e,f) do { } while(0) #define UlValidateParameters6(a,b,c,d,e,f,g) do { } while(0) #define UlValidateParameters7(a,b,c,d,e,f,g,h) do { } while(0) #define UlValidateParameters8(a,b,c,d,e,f,g,h,i) do { } while(0) #define UlValidateParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0) #define UlValidateParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0) #define UlValidateParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0) #define UlValidateParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0) #define UlValidateParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0) #define UlValidateParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0) #define UlValidateParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0) #define UlValidateParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0) #define CheckParameters1(a,b) do { } while(0) #define CheckParameters2(a,b,c) do { } while(0) #define CheckParameters3(a,b,c,d) do { } while(0) #define CheckParameters4(a,b,c,d,e) do { } while(0) #define CheckParameters5(a,b,c,d,e,f) do { } while(0) #define CheckParameters6(a,b,c,d,e,f,g) do { } while(0) #define CheckParameters7(a,b,c,d,e,f,g,h) do { } while(0) #define CheckParameters8(a,b,c,d,e,f,g,h,i) do { } while(0) #define CheckParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0) #define CheckParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0) #define CheckParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0) #define CheckParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0) #define CheckParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0) #define CheckParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0) #define CheckParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0) #define CheckParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0) #ifdef __cplusplus } #endif #endif /* MAPIVAL_H */ ================================================ FILE: wine/windows/mapix.h ================================================ /* * Copyright 2004 Jon Griffiths * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef MAPIX_H #define MAPIX_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct IProfAdmin IProfAdmin; typedef IProfAdmin *LPPROFADMIN; typedef struct IMsgServiceAdmin IMsgServiceAdmin; typedef IMsgServiceAdmin *LPSERVICEADMIN; typedef struct IMAPISession *LPMAPISESSION; #ifndef WINE_FLAGS_DEFINED #define WINE_FLAGS_DEFINED typedef ULONG FLAGS; #endif /* Flags for MAPILogon and MAPILogonEx */ #ifndef MAPI_LOGON_UI #define MAPI_LOGON_UI 0x00000001 #endif #ifndef MAPI_NEW_SESSION #define MAPI_NEW_SESSION 0x00000002 #endif #define MAPI_ALLOW_OTHERS 0x00000008 #define MAPI_EXPLICIT_PROFILE 0x00000010 #ifndef MAPI_EXTENDED #define MAPI_EXTENDED 0x00000020 #endif #ifndef MAPI_FORCE_DOWNLOAD #define MAPI_FORCE_DOWNLOAD 0x00001000 #endif #ifndef MAPI_PASSWORD_UI #define MAPI_PASSWORD_UI 0x00020000 #endif #define MAPI_SERVICE_UI_ALWAYS 0x00002000 #define MAPI_NO_MAIL 0x00008000 #define MAPI_NT_SERVICE 0x00010000 #define MAPI_TIMEOUT_SHORT 0x00100000 #define MAPI_SIMPLE_DEFAULT (MAPI_LOGON_UI|MAPI_ALLOW_OTHERS|MAPI_FORCE_DOWNLOAD) #define MAPI_SIMPLE_EXPLICIT (MAPI_NEW_SESSION|MAPI_EXPLICIT_PROFILE|MAPI_FORCE_DOWNLOAD) #define MAPI_MULTITHREAD_NOTIFICATIONS 0x00000001 #define MAPI_NO_COINIT 0x00000008 typedef struct tagMAPIINIT_0 { ULONG ulVersion; ULONG ulFlags; } MAPIINIT_0, *LPMAPIINIT_0; typedef MAPIINIT_0 MAPIINIT, *LPMAPIINIT; #define MAPI_INIT_VERSION 0U typedef HRESULT (WINAPI MAPIINITIALIZE)(void*); typedef MAPIINITIALIZE *LPMAPIINITIALIZE; MAPIINITIALIZE MAPIInitialize; typedef void (WINAPI MAPIUNINITIALIZE)(void); typedef MAPIUNINITIALIZE *LPMAPIUNINITIALIZE; MAPIUNINITIALIZE MAPIUninitialize; #if defined (UNICODE) || defined (__WINESRC__) typedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)(ULONG_PTR,LPWSTR,LPWSTR,ULONG,LPMAPISESSION*); #else typedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)(ULONG_PTR,LPSTR,LPSTR,ULONG,LPMAPISESSION *); #endif typedef MAPILOGONEX *LPMAPILOGONEX; MAPILOGONEX MAPILogonEx; typedef SCODE (WINAPI MAPIALLOCATEBUFFER)(ULONG,LPVOID*); typedef MAPIALLOCATEBUFFER *LPMAPIALLOCATEBUFFER; MAPIALLOCATEBUFFER MAPIAllocateBuffer; typedef SCODE (WINAPI MAPIALLOCATEMORE)(ULONG,LPVOID,LPVOID*); typedef MAPIALLOCATEMORE *LPMAPIALLOCATEMORE; MAPIALLOCATEMORE MAPIAllocateMore; #ifndef MAPIFREEBUFFER_DEFINED #define MAPIFREEBUFFER_DEFINED typedef ULONG (WINAPI MAPIFREEBUFFER)(LPVOID); typedef MAPIFREEBUFFER *LPMAPIFREEBUFFER; MAPIFREEBUFFER MAPIFreeBuffer; #endif typedef HRESULT (WINAPI MAPIADMINPROFILES)(ULONG,LPPROFADMIN*); typedef MAPIADMINPROFILES *LPMAPIADMINPROFILES; MAPIADMINPROFILES MAPIAdminProfiles; /***************************************************************************** * IMAPISession interface */ #define INTERFACE IMAPISession DECLARE_INTERFACE_(IMAPISession,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IMAPISession methods ***/ STDMETHOD(GetLastError)(THIS_ HRESULT hResult, ULONG ulFlags, LPMAPIERROR *lppMAPIError) PURE; STDMETHOD(GetMsgStoresTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE; STDMETHOD(OpenMsgStore)(THIS_ ULONG_PTR ulUIParam, ULONG cbId, LPENTRYID lpId, LPCIID lpIFace, ULONG ulFlags, LPMDB *lppMDB) PURE; STDMETHOD(OpenAddressBook)(THIS_ ULONG_PTR ulUIParam, LPCIID iid, ULONG ulFlags, LPADRBOOK *lppAdrBook) PURE; STDMETHOD(OpenProfileSection)(THIS_ LPMAPIUID lpUID, LPCIID iid, ULONG ulFlags, LPPROFSECT *lppProf) PURE; STDMETHOD(GetStatusTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE; STDMETHOD(OpenEntry)(THIS_ ULONG cbId, LPENTRYID lpId, LPCIID iid, ULONG ulFlags, ULONG *lpType, LPUNKNOWN *lppUnk) PURE; STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbLID, LPENTRYID lpLID, ULONG cbRID, LPENTRYID lpRID, ULONG ulFlags, ULONG *lpRes) PURE; STDMETHOD(Advise)(THIS_ ULONG cbId, LPENTRYID lpId, ULONG ulMask, LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE; STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE; STDMETHOD(MessageOptions)(THIS_ ULONG_PTR ulUIParam, ULONG ulFlags, LPSTR lpszAddr, LPMESSAGE lpMsg) PURE; STDMETHOD(QueryDefaultMessageOpt)(THIS_ LPSTR lpszAddr, ULONG ulFlags, ULONG *lpcVals, LPSPropValue *lppOpts) PURE; STDMETHOD(EnumAdrTypes)(THIS_ ULONG ulFlags, ULONG *lpcTypes, LPSTR **lpppszTypes) PURE; STDMETHOD(QueryIdentity)(THIS_ ULONG *lpcbId, LPENTRYID *lppEntryID) PURE; STDMETHOD(Logoff)(THIS_ ULONG_PTR ulUIParam, ULONG ulFlags, ULONG ulReserved) PURE; STDMETHOD(SetDefaultStore)(THIS_ ULONG ulFlags, ULONG cbId, LPENTRYID lpId) PURE; STDMETHOD(AdminServices)(THIS_ ULONG ulFlags, LPSERVICEADMIN *lppAdmin) PURE; STDMETHOD(ShowForm)(THIS_ ULONG_PTR ulUIParam, LPMDB lpStore, LPMAPIFOLDER lpParent, LPCIID iid, ULONG ulToken, LPMESSAGE lpSent, ULONG ulFlags, ULONG ulStatus, ULONG ulMsgFlags, ULONG ulAccess, LPSTR lpszClass) PURE; STDMETHOD(PrepareForm)(THIS_ LPCIID lpIFace, LPMESSAGE lpMsg, ULONG *lpToken) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IMAPISession_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IMAPISession_AddRef(p) (p)->lpVtbl->AddRef(p) #define IMAPISession_Release(p) (p)->lpVtbl->Release(p) /*** IMAPISession methods ***/ #define IMAPISession_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) #define IMAPISession_GetMsgStoresTable(p,a,b) (p)->lpVtbl->GetMsgStoresTable(p,a,b) #define IMAPISession_OpenMsgStore(p,a,b,c,d,e,f) (p)->lpVtbl->OpenMsgStore(p,a,b,c,d,e,f) #define IMAPISession_OpenAddressBook(p,a,b,c,d) (p)->lpVtbl->OpenAddressBook(p,a,b,c,d) #define IMAPISession_OpenProfileSection(p,a,b,c,d) (p)->lpVtbl->OpenProfileSection(p,a,b,c,d) #define IMAPISession_GetStatusTable(p,a,b) (p)->lpVtbl->GetStatusTable(p,a,b) #define IMAPISession_OpenEntry(p,a,b,c,d,e,f) (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f) #define IMAPISession_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f) #define IMAPISession_Advise(p,a,b,c,d,e) (p)->lpVtbl->Advise(p,a,b,c,d,e) #define IMAPISession_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a) #define IMAPISession_MessageOptions(p,a,b,c,d) (p)->lpVtbl->MessageOptions)(p,a,b,c,d) #define IMAPISession_QueryDefaultMessageOpt(p,a,b,c,d) \ (p)->lpVtbl->QueryDefaultMessageOpt(p,a,b,c,d) #define IMAPISession_EnumAdrTypes(p,a,b,c) (p)->lpVtbl->EnumAdrTypes(p,a,b,c) #define IMAPISession_QueryIdentity(p,a,b) (p)->lpVtbl->QueryIdentity(p,a,b) #define IMAPISession_Logoff(p,a,b,c) (p)->lpVtbl->Logoff(p,a,b,c) #define IMAPISession_SetDefaultStore(p,a,b,c) (p)->lpVtbl->SetDefaultStore(p,a,b,c) #define IMAPISession_AdminServices(p,a,b) (p)->lpVtbl->AdminServices(p,a,b) #define IMAPISession_ShowForm(p,a,b,c,d,e,f,g,h,i,j,k) \ (p)->lpVtbl->ShowForm(p,a,b,c,d,e,f,g,h,i,j,k) #define IMAPISession_PrepareForm(p,a,b,c) (p)->lpVtbl->PrepareForm(p,a,b,c) #endif #ifdef __cplusplus } #endif #endif /* MAPIX_H */ ================================================ FILE: wine/windows/mciavi.h ================================================ /* * Copyright (C) 2001 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define MCI_MCIAVI_PLAY_WINDOW __MSABI_LONG(0x01000000) #define MCI_MCIAVI_PLAY_FULLSCREEN __MSABI_LONG(0x02000000) #define MCI_MCIAVI_PLAY_FULLBY2 __MSABI_LONG(0x04000000) #define MCI_AVI_STATUS_FRAMES_SKIPPED __MSABI_LONG(0x8001) #define MCI_AVI_STATUS_LAST_PLAY_SPEED __MSABI_LONG(0x8002) #define MCI_AVI_STATUS_AUDIO_BREAKS __MSABI_LONG(0x8003) #define MCI_AVI_SETVIDEO_DRAW_PROCEDURE __MSABI_LONG(0x8000) #define MCI_AVI_SETVIDEO_PALETTE_COLOR __MSABI_LONG(0x8100) #define MCI_AVI_SETVIDEO_PALETTE_HALFTONE __MSABI_LONG(0x0000FFFF) #define MCIERR_AVI_OLDAVIFORMAT (MCIERR_CUSTOM_DRIVER_BASE + 100) #define MCIERR_AVI_NOTINTERLEAVED (MCIERR_CUSTOM_DRIVER_BASE + 101) #define MCIERR_AVI_NODISPDIB (MCIERR_CUSTOM_DRIVER_BASE + 102) #define MCIERR_AVI_CANTPLAYFULLSCREEN (MCIERR_CUSTOM_DRIVER_BASE + 103) #define MCIERR_AVI_TOOBIGFORVGA (MCIERR_CUSTOM_DRIVER_BASE + 104) #define MCIERR_AVI_NOCOMPRESSOR (MCIERR_CUSTOM_DRIVER_BASE + 105) #define MCIERR_AVI_DISPLAYERROR (MCIERR_CUSTOM_DRIVER_BASE + 106) #define MCIERR_AVI_AUDIOERROR (MCIERR_CUSTOM_DRIVER_BASE + 107) #define MCIERR_AVI_BADPALETTE (MCIERR_CUSTOM_DRIVER_BASE + 108) ================================================ FILE: wine/windows/mcx.h ================================================ /* * Copyright (C) 2000 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MCX_H #define __WINE_MCX_H typedef struct tagMODEMDEVCAPS { DWORD dwActualSize; DWORD dwRequiredSize; DWORD dwDevSpecificOffset; DWORD dwDevSpecificSize; DWORD dwModemProviderVersion; DWORD dwModemManufacturerOffset; DWORD dwModemManufacturerSize; DWORD dwModemModelOffset; DWORD dwModemModelSize; DWORD dwModemVersionOffset; DWORD dwModemVersionSize; DWORD dwDialOptions; DWORD dwCallSetupFailTimer; DWORD dwInactivityTimeout; DWORD dwSpeakerVolume; DWORD dwSpeakerMode; DWORD dwModemoptions; DWORD dwMaxDTERate; DWORD dwMaxDCERate; BYTE abVariablePortion[1]; } MODEMDEVCAPS, *LPMODEMDEVCAPS; typedef struct tagMODEMSETTINGS { DWORD dwActualSize; DWORD dwRequiredSize; DWORD dwDevSpecificOffset; DWORD dwDevSpecificSize; DWORD dwCallSetupFailTimer; DWORD dwInactivityTimeout; DWORD dwSpeakerVolume; DWORD dwSpeakerMode; DWORD dwPreferredModemOptions; DWORD dwNegotiatedModemOptions; DWORD dwNegotiatedDCERate; BYTE abVariablePortion[1]; } MODEMSETTINGS, *LPMODEMSETTINGS; #endif /* __WINE_MCX_H */ ================================================ FILE: wine/windows/mediaerr.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _MEDIAERR_H_ #define _MEDIAERR_H_ #define DMO_E_INVALIDSTREAMINDEX 0x80040201 #define DMO_E_INVALIDTYPE 0x80040202 #define DMO_E_TYPE_NOT_SET 0x80040203 #define DMO_E_NOTACCEPTING 0x80040204 #define DMO_E_TYPE_NOT_ACCEPTED 0x80040205 #define DMO_E_NO_MORE_ITEMS 0x80040206 #endif /* _MEDIAERR_H_ */ ================================================ FILE: wine/windows/mediaobj.idl ================================================ /* * Copyright (C) 2002 Alexandre Julliard * Copyright (C) 2004 Vincent Béron * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "objidl.idl"; import "strmif.idl"; interface IDMOQualityControl; interface IDMOVideoOutputOptimizations; typedef struct _DMOMediaType { GUID majortype; GUID subtype; BOOL bFixedSizeSamples; BOOL bTemporalCompression; ULONG lSampleSize; GUID formattype; IUnknown *pUnk; ULONG cbFormat; BYTE *pbFormat; } DMO_MEDIA_TYPE; /***************************************************************************** * IEnumDMO interface */ [ object, uuid(2C3CD98A-2BFA-4A53-9C27-5249BA64BA0F), pointer_default(unique) ] interface IEnumDMO : IUnknown { [local] HRESULT Next( [in] DWORD cItemsToFetch, [out] CLSID *pCLSID, [out] WCHAR **Names, [out] DWORD *pcItemsFetched ); HRESULT Skip( [in] DWORD cItemsToSkip ); HRESULT Reset(); HRESULT Clone( [out] IEnumDMO **ppEnum ); } /***************************************************************************** * IMediaBuffer interface */ [ object, uuid(59eff8b9-938c-4a26-82f2-95cb84cdc837), local ] interface IMediaBuffer : IUnknown { HRESULT SetLength( DWORD cbLength ); HRESULT GetMaxLength( [out] DWORD *pcbMaxLength ); HRESULT GetBufferAndLength( [out] BYTE **ppBuffer, [out] DWORD *pcbLength ); } typedef struct _DMO_OUTPUT_DATA_BUFFER { IMediaBuffer *pBuffer; DWORD dwStatus; REFERENCE_TIME rtTimestamp; REFERENCE_TIME rtTimelength; } DMO_OUTPUT_DATA_BUFFER, *PDMO_OUTPUT_DATA_BUFFER; enum _DMO_INPLACE_PROCESS_FLAGS { DMO_INPLACE_NORMAL = 0x00000000, DMO_INPLACE_ZERO = 0x00000001 }; enum _DMO_SET_TYPE_FLAGS { DMO_SET_TYPEF_TEST_ONLY = 0x00000001, DMO_SET_TYPEF_CLEAR = 0x00000002, }; enum _DMO_OUTPUT_DATA_BUFFERF_FLAGS { DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT = 0x00000001, DMO_OUTPUT_DATA_BUFFERF_TIME = 0x00000002, DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH = 0x00000004, DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE = 0x01000000, }; /***************************************************************************** * IMediaObject interface */ [ object, uuid(d8ad0f58-5494-4102-97c5-ec798e59bcf4), local ] interface IMediaObject : IUnknown { HRESULT GetStreamCount( [out] DWORD *pcInputStreams, [out] DWORD *pcOutputStreams ); HRESULT GetInputStreamInfo( DWORD dwInputStreamIndex, [out] DWORD *pdwFlags ); HRESULT GetOutputStreamInfo( DWORD dwOutputStreamIndex, [out] DWORD *pdwFlags ); HRESULT GetInputType( DWORD dwInputStreamIndex, DWORD dwTypeIndex, [out] DMO_MEDIA_TYPE *pmt ); HRESULT GetOutputType( DWORD dwOutputStreamIndex, DWORD dwTypeIndex, [out] DMO_MEDIA_TYPE *pmt ); HRESULT SetInputType( DWORD dwInputStreamIndex, [in] const DMO_MEDIA_TYPE *pmt, DWORD dwFlags ); HRESULT SetOutputType( DWORD dwOutputStreamIndex, [in] const DMO_MEDIA_TYPE *pmt, DWORD dwFlags ); HRESULT GetInputCurrentType( DWORD dwInputStreamIndex, [out] DMO_MEDIA_TYPE *pmt ); HRESULT GetOutputCurrentType( DWORD dwOutputStreamIndex, [out] DMO_MEDIA_TYPE *pmt ); HRESULT GetInputSizeInfo( DWORD dwInputStreamIndex, [out] DWORD *pcbSize, [out] DWORD *pcbMaxLookahead, [out] DWORD *pcbAlignment ); HRESULT GetOutputSizeInfo( DWORD dwOutputStreamIndex, [out] DWORD *pcbSize, [out] DWORD *pcbAlignment ); HRESULT GetInputMaxLatency( DWORD dwInputStreamIndex, [out] REFERENCE_TIME *prtMaxLatency ); HRESULT SetInputMaxLatency( DWORD dwInputStreamIndex, REFERENCE_TIME rtMaxLatency ); HRESULT Flush(); HRESULT Discontinuity(DWORD dwInputStreamIndex); HRESULT AllocateStreamingResources(); HRESULT FreeStreamingResources(); HRESULT GetInputStatus( DWORD dwInputStreamIndex, [out] DWORD *dwFlags ); HRESULT ProcessInput( DWORD dwInputStreamIndex, IMediaBuffer *pBuffer, DWORD dwFlags, REFERENCE_TIME rtTimestamp, REFERENCE_TIME rtTimelength ); HRESULT ProcessOutput( DWORD dwFlags, DWORD cOutputBufferCount, [in,out] DMO_OUTPUT_DATA_BUFFER *pOutputBuffers, [out] DWORD *pdwStatus ); HRESULT Lock(LONG bLock); } /***************************************************************************** * IMediaObjectInPlace interface */ [ object, uuid(651b9ad0-0fc7-4aa9-9538-d89931010741), local ] interface IMediaObjectInPlace : IUnknown { HRESULT Process( [in] ULONG ulSize, [in,out] BYTE* pData, [in] REFERENCE_TIME refTimeStart, [in] DWORD dwFlags ); HRESULT Clone( [out] IMediaObjectInPlace **ppMediaObject ); HRESULT GetLatency( [out] REFERENCE_TIME *pLatencyTime ); } ================================================ FILE: wine/windows/metahost.idl ================================================ /* * Copyright 2010 Vincent Povirk for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "oaidl.idl"; import "ocidl.idl"; import "mscoree.idl"; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef LoadLibrary") cpp_quote("#endif") typedef enum { METAHOST_POLICY_HIGHCOMPAT = 0, METAHOST_POLICY_APPLY_UPGRADE_POLICY = 0x08, METAHOST_POLICY_EMULATE_EXE_LAUNCH = 0x10, METAHOST_POLICY_SHOW_ERROR_DIALOG = 0x20, METAHOST_POLICY_USE_PROCESS_IMAGE_PATH = 0x40, METAHOST_POLICY_ENSURE_SKU_SUPPORTED = 0x80 } METAHOST_POLICY_FLAGS; typedef enum { CLR_DEBUGGING_MANAGED_EVENT_PENDING = 1 } CLR_DEBUGGING_PROCESS_FLAGS; typedef struct _CLR_DEBUGGING_VERSION { WORD wStructVersion; WORD wMajor; WORD wMinor; WORD wBuild; WORD wRevision; } CLR_DEBUGGING_VERSION; [ object, local, uuid(bd39d1d2-ba2f-486a-89b0-b4b0cb466891) ] interface ICLRRuntimeInfo : IUnknown { HRESULT GetVersionString( [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer, [in, out] DWORD *pcchBuffer); HRESULT GetRuntimeDirectory( [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer, [in, out] DWORD *pcchBuffer); HRESULT IsLoaded( [in] HANDLE hndProcess, [out, retval] BOOL *pbLoaded); HRESULT LoadErrorString( [in] UINT iResourceID, [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer, [in, out] DWORD *pcchBuffer, [in] LONG iLocaleid); HRESULT LoadLibrary( [in] LPCWSTR pwzDllName, [out, retval] HMODULE *phndModule); HRESULT GetProcAddress( [in] LPCSTR pszProcName, [out, retval] LPVOID *ppProc); HRESULT GetInterface( [in] REFCLSID rclsid, [in] REFIID riid, [out, iid_is(riid), retval] LPVOID *ppUnk); HRESULT IsLoadable( [out, retval] BOOL *pbLoadable); HRESULT SetDefaultStartupFlags( [in] DWORD dwStartupFlags, [in] LPCWSTR pwzHostConfigFile); HRESULT GetDefaultStartupFlags( [out] DWORD *pdwStartupFlags, [out, size_is(*pcchHostConfigFile)] LPWSTR pwzHostConfigFile, [in, out] DWORD *pcchHostConfigFile); HRESULT BindAsLegacyV2Runtime(); HRESULT IsStarted( [out] BOOL *pbStarted, [out] DWORD *pdwStartupFlags); } typedef HRESULT (__stdcall *CallbackThreadSetFnPtr)(); typedef HRESULT (__stdcall *CallbackThreadUnsetFnPtr)(); typedef void (__stdcall *RuntimeLoadedCallbackFnPtr)( ICLRRuntimeInfo *pRuntimeInfo, CallbackThreadSetFnPtr pfnCallbackThreadSet, CallbackThreadUnsetFnPtr pfnCallbackThreadUnset); cpp_quote("DEFINE_GUID(CLSID_CLRDebuggingLegacy, 0xDF8395B5,0xA4BA,0x450b,0xA7,0x7C,0xA9,0xA4,0x77,0x62,0xC5,0x20);") cpp_quote("DEFINE_GUID(CLSID_CLRMetaHost, 0x9280188d,0x0e8e,0x4867,0xb3,0x0c,0x7f,0xa8,0x38,0x84,0xe8,0xde);") [ object, local, uuid(d332db9e-b9b3-4125-8207-a14884f53216) ] interface ICLRMetaHost : IUnknown { HRESULT GetRuntime( [in] LPCWSTR pwzVersion, [in] REFIID iid, [out, iid_is(iid), retval] LPVOID *ppRuntime); HRESULT GetVersionFromFile( [in] LPCWSTR pwzFilePath, [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer, [in, out] DWORD *pcchBuffer); HRESULT EnumerateInstalledRuntimes( [out, retval] IEnumUnknown **ppEnumerator); HRESULT EnumerateLoadedRuntimes( [in] HANDLE hndProcess, [out, retval] IEnumUnknown **ppEnumerator); HRESULT RequestRuntimeLoadedNotification( [in] RuntimeLoadedCallbackFnPtr pCallbackFunction); HRESULT QueryLegacyV2RuntimeBinding( [in] REFIID riid, [out, iid_is(riid), retval] LPVOID *ppUnk); HRESULT ExitProcess( [in] INT32 iExitCode); } [ object, local, uuid(e2190695-77b2-492e-8e14-c4b3a7fdd593) ] interface ICLRMetaHostPolicy : IUnknown { HRESULT GetRequestedRuntime([in] METAHOST_POLICY_FLAGS dwPolicyFlags, [in] LPCWSTR pwzBinary, [in] IStream *pCfgStream, [in, out] LPWSTR pwzVersion, [in, out] DWORD *pcchVersion, [out] LPWSTR pwzImageVersion, [out, in] DWORD *pcchImageVersion, [out] DWORD *pdwConfigFlags, [in] REFIID riid, [retval, out] LPVOID *ppRuntime); } [ uuid(2ebcd49a-1b47-4a61-b13a-4a03701e594b) ] coclass CLRMetaHostPolicy { [default] interface ICLRMetaHostPolicy; } [ object, local, uuid(3151c08d-4d09-4f9b-8838-2880bf18fe51) ] interface ICLRDebuggingLibraryProvider : IUnknown { HRESULT ProvideLibrary([in] const WCHAR *pwszFileName, [in] DWORD dwTimestamp, [in] DWORD dwSizeOfImage, [out] HMODULE *phModule); } [ object, local, uuid(d28f3c5a-9634-4206-a509-477552eefb10) ] interface ICLRDebugging : IUnknown { HRESULT OpenVirtualProcess([in] ULONG64 moduleBaseAddress, [in] IUnknown *pDataTarget, [in] ICLRDebuggingLibraryProvider *pLibraryProvider, [in] CLR_DEBUGGING_VERSION *pMaxDebuggerSupportedVersion, [in] REFIID riidProcess, [out] IUnknown **ppProcess, [out, in] CLR_DEBUGGING_VERSION *pVersion, [out] CLR_DEBUGGING_PROCESS_FLAGS *pdwFlags); HRESULT CanUnloadNow(HMODULE hModule); } cpp_quote("HRESULT WINAPI CLRCreateInstance(REFCLSID clsid, REFIID riid, LPVOID *ppInterface);") ================================================ FILE: wine/windows/mfapi.h ================================================ /* * Copyright (C) 2015 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MFAPI_H #define __WINE_MFAPI_H #include #include #include #if !defined(MF_VERSION) /* Default to Windows XP */ #define MF_SDK_VERSION 0x0001 #define MF_API_VERSION 0x0070 #define MF_VERSION (MF_SDK_VERSION << 16 | MF_API_VERSION) #endif #define MFSTARTUP_NOSOCKET 0x1 #define MFSTARTUP_LITE (MFSTARTUP_NOSOCKET) #define MFSTARTUP_FULL 0 #ifndef MAKEFOURCC #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) #endif #define DEFINE_MEDIATYPE_GUID(name, format) \ DEFINE_GUID(name, format, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); #ifndef DIRECT3D_VERSION #define D3DFMT_X8R8G8B8 22 #endif DEFINE_MEDIATYPE_GUID(MFVideoFormat_WMV3, MAKEFOURCC('W','M','V','3')); DEFINE_MEDIATYPE_GUID(MFVideoFormat_RGB32, D3DFMT_X8R8G8B8); DEFINE_GUID(MF_MT_AVG_BITRATE, 0x20332624, 0xfb0d, 0x4d9e, 0xbd, 0x0d, 0xcb, 0xf6, 0x78, 0x6c, 0x10, 0x2e); DEFINE_GUID(MF_MT_FRAME_RATE, 0xc459a2e8, 0x3d2c, 0x4e44, 0xb1, 0x32, 0xfe, 0xe5, 0x15, 0x6c, 0x7b, 0xb0); DEFINE_GUID(MF_MT_FRAME_SIZE, 0x1652c33d, 0xd6b2, 0x4012, 0xb8, 0x34, 0x72, 0x03, 0x08, 0x49, 0xa3, 0x7d); DEFINE_GUID(MF_MT_INTERLACE_MODE, 0xe2724bb8, 0xe676, 0x4806, 0xb4, 0xb2, 0xa8, 0xd6, 0xef, 0xb4, 0x4c, 0xcd); DEFINE_GUID(MF_MT_MAJOR_TYPE, 0x48eba18e, 0xf8c9, 0x4687, 0xbf, 0x11, 0x0a, 0x74, 0xc9, 0xf9, 0x6a, 0x8f); DEFINE_GUID(MF_MT_PIXEL_ASPECT_RATIO, 0xc6376a1e, 0x8d0a, 0x4027, 0xbe, 0x45, 0x6d, 0x9a, 0x0a, 0xd3, 0x9b, 0xb6); DEFINE_GUID(MF_MT_SUBTYPE, 0xf7e34c9a, 0x42e8, 0x4714, 0xb7, 0x4b, 0xcb, 0x29, 0xd7, 0x2c, 0x35, 0xe5); DEFINE_GUID(MFMediaType_Video, 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); typedef unsigned __int64 MFWORKITEM_KEY; HRESULT WINAPI MFCancelWorkItem(MFWORKITEM_KEY key); HRESULT WINAPI MFCopyImage(BYTE *dest, LONG deststride, const BYTE *src, LONG srcstride, DWORD width, DWORD lines); HRESULT WINAPI MFCreateAttributes(IMFAttributes **attributes, UINT32 size); HRESULT WINAPI MFCreateEventQueue(IMFMediaEventQueue **queue); HRESULT WINAPI MFCreateMediaType(IMFMediaType **type); HRESULT WINAPI MFCreateSample(IMFSample **sample); HRESULT WINAPI MFCreateMemoryBuffer(DWORD max_length, IMFMediaBuffer **buffer); HRESULT WINAPI MFGetTimerPeriodicity(DWORD *periodicity); HRESULT WINAPI MFTEnum(GUID category, UINT32 flags, MFT_REGISTER_TYPE_INFO *input_type, MFT_REGISTER_TYPE_INFO *output_type, IMFAttributes *attributes, CLSID **pclsids, UINT32 *pcount); HRESULT WINAPI MFTEnumEx(GUID category, UINT32 flags, const MFT_REGISTER_TYPE_INFO *input_type, const MFT_REGISTER_TYPE_INFO *output_type, IMFActivate ***activate, UINT32 *pcount); HRESULT WINAPI MFLockPlatform(void); HRESULT WINAPI MFTRegister(CLSID clsid, GUID category, LPWSTR name, UINT32 flags, UINT32 cinput, MFT_REGISTER_TYPE_INFO *input_types, UINT32 coutput, MFT_REGISTER_TYPE_INFO *output_types, IMFAttributes *attributes); HRESULT WINAPI MFTRegisterLocal(IClassFactory *factory, REFGUID category, LPCWSTR name, UINT32 flags, UINT32 cinput, const MFT_REGISTER_TYPE_INFO *input_types, UINT32 coutput, const MFT_REGISTER_TYPE_INFO* output_types); HRESULT WINAPI MFShutdown(void); HRESULT WINAPI MFStartup(ULONG version, DWORD flags); HRESULT WINAPI MFUnlockPlatform(void); HRESULT WINAPI MFTUnregister(CLSID clsid); HRESULT WINAPI MFTUnregisterLocal(IClassFactory *factory); HRESULT WINAPI MFGetPluginControl(IMFPluginControl**); #endif /* __WINE_MFAPI_H */ ================================================ FILE: wine/windows/mferror.h ================================================ /* * Copyright (C) 2014 Sebastian Lackner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MFERROR_H #define __WINE_MFERROR_H #define MF_E_PLATFORM_NOT_INITIALIZED _HRESULT_TYPEDEF_(0xc00d36b0) #define MF_E_BUFFERTOOSMALL _HRESULT_TYPEDEF_(0xc00d36b1) #define MF_E_INVALIDREQUEST _HRESULT_TYPEDEF_(0xc00d36b2) #define MF_E_INVALIDSTREAMNUMBER _HRESULT_TYPEDEF_(0xc00d36b3) #define MF_E_INVALIDMEDIATYPE _HRESULT_TYPEDEF_(0xc00d36b4) #define MF_E_NOTACCEPTING _HRESULT_TYPEDEF_(0xc00d36b5) #define MF_E_NOT_INITIALIZED _HRESULT_TYPEDEF_(0xc00d36b6) #define MF_E_UNSUPPORTED_REPRESENTATION _HRESULT_TYPEDEF_(0xc00d36b7) #define MF_E_NO_MORE_TYPES _HRESULT_TYPEDEF_(0xc00d36b9) #define MF_E_UNSUPPORTED_SERVICE _HRESULT_TYPEDEF_(0xc00d36ba) #define MF_E_UNEXPECTED _HRESULT_TYPEDEF_(0xc00d36bb) #define MF_E_INVALIDNAME _HRESULT_TYPEDEF_(0xc00d36bc) #define MF_E_INVALIDTYPE _HRESULT_TYPEDEF_(0xc00d36bd) #define MF_E_INVALID_FILE_FORMAT _HRESULT_TYPEDEF_(0xc00d36be) #define MF_E_INVALIDINDEX _HRESULT_TYPEDEF_(0xc00d36bf) #define MF_E_INVALID_TIMESTAMP _HRESULT_TYPEDEF_(0xc00d36c0) #define MF_E_UNSUPPORTED_SCHEME _HRESULT_TYPEDEF_(0xc00d36c3) #define MF_E_UNSUPPORTED_BYTESTREAM_TYPE _HRESULT_TYPEDEF_(0xc00d36c4) #define MF_E_UNSUPPORTED_TIME_FORMAT _HRESULT_TYPEDEF_(0xc00d36c5) #define MF_E_NO_SAMPLE_TIMESTAMP _HRESULT_TYPEDEF_(0xc00d36c8) #define MF_E_NO_SAMPLE_DURATION _HRESULT_TYPEDEF_(0xc00d36c9) #define MF_E_INVALID_STREAM_DATA _HRESULT_TYPEDEF_(0xc00d36cb) #define MF_E_RT_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d36cf) #define MF_E_UNSUPPORTED_RATE _HRESULT_TYPEDEF_(0xc00d36d0) #define MF_E_THINNING_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d36d1) #define MF_E_REVERSE_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d36d2) #define MF_E_UNSUPPORTED_RATE_TRANSITION _HRESULT_TYPEDEF_(0xc00d36d3) #define MF_E_RATE_CHANGE_PREEMPTED _HRESULT_TYPEDEF_(0xc00d36d4) #define MF_E_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d36d5) #define MF_E_NOT_AVAILABLE _HRESULT_TYPEDEF_(0xc00d36d6) #define MF_E_NO_CLOCK _HRESULT_TYPEDEF_(0xc00d36d7) #define MF_S_MULTIPLE_BEGIN _HRESULT_TYPEDEF_(0x000d36d8) #define MF_E_MULTIPLE_BEGIN _HRESULT_TYPEDEF_(0xc00d36d9) #define MF_E_MULTIPLE_SUBSCRIBERS _HRESULT_TYPEDEF_(0xc00d36da) #define MF_E_TIMER_ORPHANED _HRESULT_TYPEDEF_(0xc00d36db) #define MF_E_STATE_TRANSITION_PENDING _HRESULT_TYPEDEF_(0xc00d36dc) #define MF_E_UNSUPPORTED_STATE_TRANSITION _HRESULT_TYPEDEF_(0xc00d36dd) #define MF_E_UNRECOVERABLE_ERROR_OCCURRED _HRESULT_TYPEDEF_(0xc00d36de) #define MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS _HRESULT_TYPEDEF_(0xc00d36df) #define MF_E_SAMPLE_NOT_WRITABLE _HRESULT_TYPEDEF_(0xc00d36e0) #define MF_E_INVALID_KEY _HRESULT_TYPEDEF_(0xc00d36e2) #define MF_E_BAD_STARTUP_VERSION _HRESULT_TYPEDEF_(0xc00d36e3) #define MF_E_UNSUPPORTED_CAPTION _HRESULT_TYPEDEF_(0xc00d36e4) #define MF_E_INVALID_POSITION _HRESULT_TYPEDEF_(0xc00d36e5) #define MF_E_ATTRIBUTENOTFOUND _HRESULT_TYPEDEF_(0xc00d36e6) #define MF_E_PROPERTY_TYPE_NOT_ALLOWED _HRESULT_TYPEDEF_(0xc00d36e7) #define MF_E_TOPO_INVALID_OPTIONAL_NODE _HRESULT_TYPEDEF_(0xc00d520e) #define MF_E_TOPO_CANNOT_FIND_DECRYPTOR _HRESULT_TYPEDEF_(0xc00d5211) #define MF_E_TOPO_CODEC_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d5212) #define MF_E_TOPO_CANNOT_CONNECT _HRESULT_TYPEDEF_(0xc00d5213) #define MF_E_TOPO_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d5214) #define MF_E_TOPO_INVALID_TIME_ATTRIBUTES _HRESULT_TYPEDEF_(0xc00d5215) #define MF_E_TOPO_LOOPS_IN_TOPOLOGY _HRESULT_TYPEDEF_(0xC00d5216) #define MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR _HRESULT_TYPEDEF_(0xc00d5217) #define MF_E_TOPO_MISSING_STREAM_DESCRIPTOR _HRESULT_TYPEDEF_(0xc00d5218) #define MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED _HRESULT_TYPEDEF_(0xc00d5219) #define MF_E_TOPO_MISSING_SOURCE _HRESULT_TYPEDEF_(0xc00d521a) #define MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d521b) #endif /* __WINE_MFERROR_H */ ================================================ FILE: wine/windows/mfidl.idl ================================================ /* * Copyright 2016 Michael Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "mfobjects.idl"; import "mftransform.idl"; typedef unsigned __int64 TOPOID; typedef LONGLONG MFTIME; typedef enum MF_TOPOLOGY_TYPE { MF_TOPOLOGY_OUTPUT_NODE, MF_TOPOLOGY_SOURCESTREAM_NODE, MF_TOPOLOGY_TRANSFORM_NODE, MF_TOPOLOGY_TEE_NODE, MF_TOPOLOGY_MAX = 0xffffffff } MF_TOPOLOGY_TYPE; typedef enum _MFCLOCK_STATE { MFCLOCK_STATE_INVALID, MFCLOCK_STATE_RUNNING, MFCLOCK_STATE_STOPPED, MFCLOCK_STATE_PAUSED } MFCLOCK_STATE; typedef enum MF_OBJECT_TYPE { MF_OBJECT_MEDIASOURCE, MF_OBJECT_BYTESTREAM, MF_OBJECT_INVALID } MF_OBJECT_TYPE; typedef struct _MFCLOCK_PROPERTIES { unsigned __int64 qwCorrelationRate; GUID guidClockId; DWORD dwClockFlags; unsigned __int64 qwClockFrequency; DWORD dwClockTolerance; DWORD dwClockJitter; } MFCLOCK_PROPERTIES; [ object, uuid(2eb1e945-18b8-4139-9b1a-d5d584818530), ] interface IMFClock : IUnknown { HRESULT GetClockCharacteristics([out] DWORD *characteristics); HRESULT GetCorrelatedTime([in] DWORD reserved, [out] LONGLONG *clock_time, [out] MFTIME *system_time); HRESULT GetContinuityKey([out] DWORD *key); HRESULT GetState([in] DWORD reserved, [out] MFCLOCK_STATE *state); HRESULT GetProperties([out] MFCLOCK_PROPERTIES *props); } [ object, uuid(83cf873a-f6da-4bc8-823f-bacfd55dc430), ] interface IMFTopologyNode : IMFAttributes { HRESULT SetObject([in] IUnknown *object); HRESULT GetObject([out] IUnknown **object); HRESULT GetNodeType([out] MF_TOPOLOGY_TYPE *type); HRESULT GetTopoNodeID([out] TOPOID *id); HRESULT SetTopoNodeID([in] TOPOID id); HRESULT GetInputCount([out] DWORD *count); HRESULT GetOutputCount([out] DWORD *count); [local] HRESULT ConnectOutput([in] DWORD output_index, [in] IMFTopologyNode *node, [in] DWORD input_index); [local] HRESULT DisconnectOutput([in] DWORD index); HRESULT GetInput([in] DWORD input_index, [out] IMFTopologyNode **node, [out] DWORD *output_index); HRESULT GetOutput([in] DWORD output_index, [out] IMFTopologyNode **node, [out] DWORD *input_index); [local] HRESULT SetOutputPrefType([in] DWORD index, [in] IMFMediaType *type); [local] HRESULT GetOutputPrefType([in] DWORD output_index, [out] IMFMediaType **type); [call_as(GetOutputPrefType)] HRESULT RemoteGetOutputPrefType([in] DWORD index, [out] DWORD *length, [out, size_is(, *length)] BYTE **data); [local] HRESULT SetInputPrefType([in] DWORD index, [in] IMFMediaType *type); [local] HRESULT GetInputPrefType([in] DWORD index, [out] IMFMediaType **type); [call_as(GetInputPrefType)] HRESULT RemoteGetInputPrefType([in] DWORD index, [out] DWORD *length, [out, size_is(, *length)] BYTE **data); HRESULT CloneFrom([in] IMFTopologyNode *node); } [ object, uuid(83cf873a-f6da-4bc8-823f-bacfd55dc433), ] interface IMFTopology : IMFAttributes { HRESULT GetTopologyID([out] TOPOID *id); [local] HRESULT AddNode([in] IMFTopologyNode *node); [local] HRESULT RemoveNode([in] IMFTopologyNode *node); HRESULT GetNodeCount([out] WORD *nodes); HRESULT GetNode([in] WORD index, [out] IMFTopologyNode **node); [local] HRESULT Clear(); HRESULT CloneFrom([in] IMFTopology *topology); HRESULT GetNodeByID([in] TOPOID id, [out] IMFTopologyNode **node); HRESULT GetSourceNodeCollection([out] IMFCollection **collection); HRESULT GetOutputNodeCollection([out] IMFCollection **collection); } [ object, uuid(90377834-21d0-4dee-8214-ba2e3e6c1127), ] interface IMFMediaSession : IMFMediaEventGenerator { HRESULT SetTopology([in] DWORD flags, [in] IMFTopology *topology); HRESULT ClearTopologies(); HRESULT Start([in, unique] const GUID *format, [in, unique] const PROPVARIANT *start); HRESULT Pause(); HRESULT Stop(); HRESULT Close(); HRESULT Shutdown(); HRESULT GetClock([out] IMFClock **clock); HRESULT GetSessionCapabilities([out] DWORD *caps); HRESULT GetFullTopology([in] DWORD flags, [in] TOPOID id, [out] IMFTopology **topology); } [ object, uuid(fbe5a32d-a497-4b61-bb85-97b1a848a6e3) ] interface IMFSourceResolver : IUnknown { [local] HRESULT CreateObjectFromURL([in] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props, [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); [local] HRESULT CreateObjectFromByteStream([in] IMFByteStream *stream, [in] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props, [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); [local] HRESULT BeginCreateObjectFromURL([in] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props, [out] IUnknown **cancel_cookie, [in] IMFAsyncCallback *callback, [in] IUnknown *unk_state); [call_as(BeginCreateObjectFromURL)] HRESULT RemoteBeginCreateObjectFromURL([in, string] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props, [in] IMFRemoteAsyncCallback *callback); [local] HRESULT EndCreateObjectFromURL([in] IMFAsyncResult *result, [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); [call_as(EndCreateObjectFromURL)] HRESULT RemoteEndCreateObjectFromURL([in] IUnknown *result, [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); [local] HRESULT BeginCreateObjectFromByteStream([in] IMFByteStream *stream, [in] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props, [out] IUnknown **cancel_cookie, [in] IMFAsyncCallback *callback, [in] IUnknown *unk_state); [call_as(BeginCreateObjectFromByteStream)] HRESULT RemoteBeginCreateObjectFromByteStream([in] IMFByteStream *stream, [in, unique] const WCHAR *url, [in] DWORD flags, [in, unique] IPropertyStore *props, [in] IMFRemoteAsyncCallback *callback); [local] HRESULT EndCreateObjectFromByteStream([in] IMFAsyncResult *result, [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); [call_as(EndCreateObjectFromByteStream)] HRESULT RemoteEndCreateObjectFromByteStream([in] IUnknown *result, [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object); [local] HRESULT CanceObjectCreation([in] IUnknown *cancel_cookie); } [ object, uuid(e93dcf6c-4b07-4e1e-8123-aa16ed6eadf5) ] interface IMFMediaTypeHandler : IUnknown { [local] HRESULT IsMediaTypeSupported([in] IMFMediaType *in_type, [out] IMFMediaType **out_type); [call_as(IsMediaTypeSupported)] HRESULT RemoteIsMediaTypeSupported([in, size_is(size)] BYTE *data, [in] DWORD size, [out, size_is(, *match_count)] BYTE **match, [out] DWORD *match_count); HRESULT GetMediaTypeCount([out] DWORD *count); [local] HRESULT GetMediaTypeByIndex([in] DWORD index, [out] IMFMediaType **type); [call_as(GetMediaTypeByIndex)] HRESULT RemoteGetMediaTypeByIndex([in] DWORD index, [out, size_is(, *count)] BYTE **data, [out] DWORD *count); [local] HRESULT SetCurrentMediaType([in] IMFMediaType *type); [call_as(SetCurrentMediaType)] HRESULT RemoteSetCurrentMediaType([in, size_is(count)] BYTE *data, [in] DWORD count); [local] HRESULT GetCurrentMediaType([out] IMFMediaType **type); [call_as(GetCurrentMediaType)] HRESULT RemoteGetCurrentMediaType([out, size_is(, *count)] BYTE **data, [out] DWORD *count); HRESULT GetMajorType([out] GUID *type); } [ object, uuid(56c03d9c-9dbb-45f5-ab4b-d80f47c05938) ] interface IMFStreamDescriptor : IMFAttributes { HRESULT GetStreamIdentifier([out] DWORD *identifier); HRESULT GetMediaTypeHandler([out] IMFMediaTypeHandler **handler); } [ object, uuid(f6696e82-74f7-4f3d-a178-8a5e09c3659f) ] interface IMFClockStateSink : IUnknown { HRESULT OnClockStart( [in] MFTIME hnsSystemTime, [in] LONGLONG llClockStartOffset ); HRESULT OnClockStop( [in] MFTIME hnssSystemTime ); HRESULT OnClockPause( [in] MFTIME hnsSystemTime ); HRESULT OnClockRestart( [in] MFTIME hnsSystemTime ); HRESULT OnClockSetRate( [in] MFTIME hnsSystemTime, [in] float flRate ); } [ object, uuid(fa993888-4383-415a-a930-dd472a8cf6f7) ] interface IMFGetService : IUnknown { HRESULT GetService( [in] REFGUID guidService, [in] REFIID riid, [out, iid_is(riid)] LPVOID *ppvObject ); } cpp_quote("HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **session);") cpp_quote("HRESULT WINAPI MFCreateMFByteStreamOnStream(IStream *stream, IMFByteStream **bytestream);" ) cpp_quote("HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver);") cpp_quote("HRESULT WINAPI MFCreateStreamDescriptor(DWORD identifier, DWORD cMediaTypes,") cpp_quote(" IMFMediaType **types, IMFStreamDescriptor **descriptor);") cpp_quote("HRESULT WINAPI MFCreateTopology(IMFTopology **topology);") cpp_quote("HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array);") cpp_quote("HRESULT WINAPI MFGetService(IUnknown *object, REFGUID service, REFIID iid, void **obj);") ================================================ FILE: wine/windows/mfobjects.idl ================================================ /* * Copyright 2015 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "propsys.idl"; import "mediaobj.idl"; cpp_quote("#include ") #include typedef ULONGLONG QWORD; typedef enum _MF_ATTRIBUTE_TYPE { MF_ATTRIBUTE_UINT32 = VT_UI4, MF_ATTRIBUTE_UINT64 = VT_UI8, MF_ATTRIBUTE_DOUBLE = VT_R8, MF_ATTRIBUTE_GUID = VT_CLSID, MF_ATTRIBUTE_STRING = VT_LPWSTR, MF_ATTRIBUTE_BLOB = VT_VECTOR | VT_UI1, MF_ATTRIBUTE_IUNKNOWN = VT_UNKNOWN } MF_ATTRIBUTE_TYPE; typedef enum _MF_ATTRIBUTES_MATCH_TYPE { MF_ATTRIBUTES_MATCH_OUR_ITEMS = 0, MF_ATTRIBUTES_MATCH_THEIR_ITEMS = 1, MF_ATTRIBUTES_MATCH_ALL_ITEMS = 2, MF_ATTRIBUTES_MATCH_INTERSECTION = 3, MF_ATTRIBUTES_MATCH_SMALLER = 4 } MF_ATTRIBUTES_MATCH_TYPE; [ object, uuid(2cd2d921-c447-44a7-a13c-4adabfc247e3) ] interface IMFAttributes : IUnknown { HRESULT GetItem(REFGUID guidKey, [in, out, ptr] PROPVARIANT *pValue); HRESULT GetItemType(REFGUID guidKey, [out] MF_ATTRIBUTE_TYPE *pType); HRESULT CompareItem(REFGUID guidKey, REFPROPVARIANT Value, [out] BOOL *pbResult); HRESULT Compare(IMFAttributes *pTheirs, MF_ATTRIBUTES_MATCH_TYPE MatchType, [out] BOOL *pbResult); HRESULT GetUINT32(REFGUID guidKey, [out] UINT32 *punValue); HRESULT GetUINT64(REFGUID guidKey, [out] UINT64 *punValue); HRESULT GetDouble(REFGUID guidKey, [out] double *pfValue); HRESULT GetGUID(REFGUID guidKey, [out] GUID *pguidValue); HRESULT GetStringLength(REFGUID guidKey, [out] UINT32 *pcchLength); HRESULT GetString(REFGUID guidKey, [out, size_is(cchBufSize)] LPWSTR pwszValue, UINT32 cchBufSize, [in, out, ptr] UINT32 *pcchLength); HRESULT GetAllocatedString(REFGUID guidKey, [out, size_is(,*pcchLength+1)] LPWSTR *ppwszValue, [out] UINT32 *pcchLength); HRESULT GetBlobSize(REFGUID guidKey, [out] UINT32 *pcbBlobSize); HRESULT GetBlob(REFGUID guidKey, [out, size_is(cbBufSize)] UINT8 *pBuf, UINT32 cbBufSize, [in, out, ptr] UINT32 *pcbBlobSize); HRESULT GetAllocatedBlob(REFGUID guidKey, [out, size_is(,*pcbSize)] UINT8 **ppBuf, [out] UINT32 *pcbSize); HRESULT GetUnknown(REFGUID guidKey, REFIID riid, [out, iid_is(riid)] LPVOID *ppv); HRESULT SetItem(REFGUID guidKey, REFPROPVARIANT Value); HRESULT DeleteItem(REFGUID guidKey); HRESULT DeleteAllItems(); HRESULT SetUINT32(REFGUID guidKey, UINT32 unValue); HRESULT SetUINT64(REFGUID guidKey, UINT64 unValue); HRESULT SetDouble(REFGUID guidKey, double fValue); HRESULT SetGUID(REFGUID guidKey, REFGUID guidValue); HRESULT SetString(REFGUID guidKey, [in, string] LPCWSTR wszValue); HRESULT SetBlob(REFGUID guidKey, [in, size_is(cbBufSize)] const UINT8* pBuf, UINT32 cbBufSize); HRESULT SetUnknown(REFGUID guidKey, [in] IUnknown *pUnknown); HRESULT LockStore(); HRESULT UnlockStore(); HRESULT GetCount([out] UINT32 *pcItems); HRESULT GetItemByIndex(UINT32 unIndex, [out] GUID *pguidKey, [in, out, ptr] PROPVARIANT *pValue); HRESULT CopyAllItems([in] IMFAttributes *pDest); } enum MF_ATTRIBUTE_SERIALIZE_OPTIONS { MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF = 0x00000001 }; [ object, uuid(045fa593-8799-42b8-bc8d-8968c6453507), local ] interface IMFMediaBuffer : IUnknown { HRESULT Lock([out] BYTE **ppbBuffer, [out] DWORD *pcbMaxLength, [out] DWORD *pcbCurrentLength); HRESULT Unlock(); HRESULT GetCurrentLength([out] DWORD *pcbCurrentLength); HRESULT SetCurrentLength([in] DWORD cbCurrentLength); HRESULT GetMaxLength([out] DWORD *pcbMaxLength); } [ object, uuid(c40a00f2-b93a-4d80-ae8c-5a1c634f58e4), local ] interface IMFSample : IMFAttributes { HRESULT GetSampleFlags([out] DWORD *pdwSampleFlags); HRESULT SetSampleFlags([in] DWORD dwSampleFlags); HRESULT GetSampleTime([out] LONGLONG *phnsSampleTime); HRESULT SetSampleTime([in] LONGLONG hnsSampleTime); HRESULT GetSampleDuration([out] LONGLONG *phnsSampleDuration); HRESULT SetSampleDuration([in] LONGLONG hnsSampleDuration); HRESULT GetBufferCount([out] DWORD *pdwBufferCount); HRESULT GetBufferByIndex([in] DWORD dwIndex, [out] IMFMediaBuffer **ppBuffer); HRESULT ConvertToContiguousBuffer([out] IMFMediaBuffer **ppBuffer); HRESULT AddBuffer([in] IMFMediaBuffer *pBuffer); HRESULT RemoveBufferByIndex([in] DWORD dwIndex); HRESULT RemoveAllBuffers(); HRESULT GetTotalLength([out] DWORD *pcbTotalLength); HRESULT CopyToBuffer([in] IMFMediaBuffer *pBuffer); } [ object, uuid(7dc9d5f9-9ed9-44ec-9bbf-0600bb589fbb), local ] interface IMF2DBuffer : IUnknown { HRESULT Lock2D([out] BYTE **pbScanline0, [out] LONG *plPitch); HRESULT Unlock2D(); HRESULT GetScanline0AndPitch([out] BYTE **pbScanline0, [out] LONG *plPitch); HRESULT IsContiguousFormat([out] BOOL *pfIsContiguous); HRESULT GetContiguousLength([out] DWORD *pcbLength); HRESULT ContiguousCopyTo([out, size_is(cbDestBuffer)] BYTE *pbDestBuffer, [in] DWORD cbDestBuffer); HRESULT ContiguousCopyFrom([in, size_is(cbSrcBuffer)] const BYTE *pbSrcBuffer, [in] DWORD cbSrcBuffer); } [ object, uuid(44ae0fa8-ea31-4109-8d2e-4cae4997c555), local ] interface IMFMediaType : IMFAttributes { HRESULT GetMajorType([out] GUID *pguidMajorType); HRESULT IsCompressedFormat([out] BOOL *pfCompressed); HRESULT IsEqual([in] IMFMediaType *pIMediaType, [out] DWORD *pdwFlags); HRESULT GetRepresentation([in] GUID guidRepresentation, [out] LPVOID *ppvRepresentation); HRESULT FreeRepresentation([in] GUID guidRepresentation, [in] LPVOID pvRepresentation); } cpp_quote("#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES 0x00000001") cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES 0x00000002") cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_DATA 0x00000004") cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA 0x00000008") [ object, uuid(26a0adc3-ce26-4672-9304-69552edd3faf), local ] interface IMFAudioMediaType : IMFMediaType { const WAVEFORMATEX *GetAudioFormat(); } typedef struct { GUID guidMajorType; GUID guidSubtype; } MFT_REGISTER_TYPE_INFO; typedef enum _MFVideoFlags { MFVideoFlag_PAD_TO_Mask = 0x00000003, MFVideoFlag_PAD_TO_None = 0, MFVideoFlag_PAD_TO_4x3 = 0x00000001, MFVideoFlag_PAD_TO_16x9 = 0x00000002, MFVideoFlag_SrcContentHintMask = 0x0000001c, MFVideoFlag_SrcContentHintNone = 0, MFVideoFlag_SrcContentHint16x9 = 0x00000004, MFVideoFlag_SrcContentHint235_1 = 0x00000008, MFVideoFlag_AnalogProtected = 0x00000020, MFVideoFlag_DigitallyProtected = 0x00000040, MFVideoFlag_ProgressiveContent = 0x00000080, MFVideoFlag_FieldRepeatCountMask = 0x00000700, MFVideoFlag_FieldRepeatCountShift = 8, MFVideoFlag_ProgressiveSeqReset = 0x00000800, MFVideoFlag_PanScanEnabled = 0x00020000, MFVideoFlag_LowerFieldFirst = 0x00040000, MFVideoFlag_BottomUpLinearRep = 0x00080000, MFVideoFlags_DXVASurface = 0x00100000, MFVideoFlags_RenderTargetSurface = 0x00400000, MFVideoFlags_ForceQWORD = 0x7fffffff } MFVideoFlags; typedef struct _MFRatio { DWORD Numerator; DWORD Denominator; } MFRatio; typedef struct _MFOffset { WORD fract; short value; } MFOffset; typedef struct _MFVideoArea { MFOffset OffsetX; MFOffset OffsetY; SIZE Area; } MFVideoArea; typedef enum _MFVideoChromaSubsampling { MFVideoChromaSubsampling_Unknown = 0, MFVideoChromaSubsampling_ProgressiveChroma = 0x8, MFVideoChromaSubsampling_Horizontally_Cosited = 0x4, MFVideoChromaSubsampling_Vertically_Cosited = 0x2, MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes = 0x1, MFVideoChromaSubsampling_MPEG2 = MFVideoChromaSubsampling_Horizontally_Cosited | MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes, MFVideoChromaSubsampling_MPEG1 = MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes, MFVideoChromaSubsampling_DV_PAL = MFVideoChromaSubsampling_Horizontally_Cosited | MFVideoChromaSubsampling_Vertically_Cosited, MFVideoChromaSubsampling_Cosited = MFVideoChromaSubsampling_Horizontally_Cosited | MFVideoChromaSubsampling_Vertically_Cosited | MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes, MFVideoChromaSubsampling_Last = MFVideoChromaSubsampling_Cosited + 1, MFVideoChromaSubsampling_ForceDWORD = 0x7fffffff } MFVideoChromaSubsampling; typedef enum _MFVideoInterlaceMode { MFVideoInterlace_Unknown = 0, MFVideoInterlace_Progressive = 2, MFVideoInterlace_FieldInterleavedUpperFirst = 3, MFVideoInterlace_FieldInterleavedLowerFirst = 4, MFVideoInterlace_FieldSingleUpper = 5, MFVideoInterlace_FieldSingleLower = 6, MFVideoInterlace_MixedInterlaceOrProgressive = 7, MFVideoInterlace_Last, MFVideoInterlace_ForceDWORD = 0x7fffffff } MFVideoInterlaceMode; typedef enum _MFVideoTransferFunction { MFVideoTransFunc_Unknown = 0, MFVideoTransFunc_10 = 1, MFVideoTransFunc_18 = 2, MFVideoTransFunc_20 = 3, MFVideoTransFunc_22 = 4, MFVideoTransFunc_709 = 5, MFVideoTransFunc_240M = 6, MFVideoTransFunc_sRGB = 7, MFVideoTransFunc_28 = 8, MFVideoTransFunc_Log_100 = 9, MFVideoTransFunc_Log_316 = 10, MFVideoTransFunc_709_sym = 11, MFVideoTransFunc_Last, MFVideoTransFunc_ForceDWORD = 0x7fffffff } MFVideoTransferFunction; typedef enum _MFVideoTransferMatrix { MFVideoTransferMatrix_Unknown = 0, MFVideoTransferMatrix_BT709 = 1, MFVideoTransferMatrix_BT601 = 2, MFVideoTransferMatrix_SMPTE240M = 3, MFVideoTransferMatrix_Last, MFVideoTransferMatrix_ForceDWORD = 0x7fffffff } MFVideoTransferMatrix; typedef enum _MFVideoPrimaries { MFVideoPrimaries_Unknown = 0, MFVideoPrimaries_reserved = 1, MFVideoPrimaries_BT709 = 2, MFVideoPrimaries_BT470_2_SysM = 3, MFVideoPrimaries_BT470_2_SysBG = 4, MFVideoPrimaries_SMPTE170M = 5, MFVideoPrimaries_SMPTE240M = 6, MFVideoPrimaries_EBU3213 = 7, MFVideoPrimaries_SMPTE_C = 8, MFVideoPrimaries_Last, MFVideoPrimaries_ForceDWORD = 0x7fffffff } MFVideoPrimaries; typedef enum _MFVideoLighting { MFVideoLighting_Unknown = 0, MFVideoLighting_bright = 1, MFVideoLighting_office = 2, MFVideoLighting_dim = 3, MFVideoLighting_dark = 4, MFVideoLighting_Last, MFVideoLighting_ForceDWORD = 0x7fffffff } MFVideoLighting; typedef enum _MFNominalRange { MFNominalRange_Unknown = 0, MFNominalRange_Normal = 1, MFNominalRange_Wide = 2, MFNominalRange_0_255 = 1, MFNominalRange_16_235 = 2, MFNominalRange_48_208 = 3, MFNominalRange_64_127 = 4 } MFNominalRange; typedef struct _MFVideoInfo { DWORD dwWidth; DWORD dwHeight; MFRatio PixelAspectRatio; MFVideoChromaSubsampling SourceChromaSubsampling; MFVideoInterlaceMode InterlaceMode; MFVideoTransferFunction TransferFunction; MFVideoPrimaries ColorPrimaries; MFVideoTransferMatrix TransferMatrix; MFVideoLighting SourceLighting; MFRatio FramesPerSecond; MFNominalRange NominalRange; MFVideoArea GeometricAperture; MFVideoArea MinimumDisplayAperture; MFVideoArea PanScanAperture; unsigned __int64 VideoFlags; } MFVideoInfo; typedef struct _MFVideoCompressedInfo { LONGLONG AvgBitrate; LONGLONG AvgBitErrorRate; DWORD MaxKeyFrameSpacing; } MFVideoCompressedInfo; typedef struct _MFARGB { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbAlpha; } MFARGB; typedef struct __MFAYUVSample { BYTE bCrValue; BYTE bCbValue; BYTE bYValue; BYTE bSampleAlpha8; } MFAYUVSample; typedef union _MFPaletteEntry { MFARGB ARGB; MFAYUVSample AYCbCr; } MFPaletteEntry; typedef struct _MFVideoSurfaceInfo { DWORD Format; DWORD PaletteEntries; MFPaletteEntry Palette[]; } MFVideoSurfaceInfo; typedef struct _MFVIDEOFORMAT { DWORD dwSize; MFVideoInfo videoInfo; GUID guidFormat; MFVideoCompressedInfo compressedInfo; MFVideoSurfaceInfo surfaceInfo; } MFVIDEOFORMAT; typedef enum _MFStandardVideoFormat { MFStdVideoFormat_reserved = 0, MFStdVideoFormat_NTSC, MFStdVideoFormat_PAL, MFStdVideoFormat_DVD_NTSC, MFStdVideoFormat_DVD_PAL, MFStdVideoFormat_DV_PAL, MFStdVideoFormat_DV_NTSC, MFStdVideoFormat_ATSC_SD480i, MFStdVideoFormat_ATSC_HD1080i, MFStdVideoFormat_ATSC_HD720p } MFStandardVideoFormat; [ object, uuid(b99f381f-a8f9-47a2-a5af-ca3a225a3890), local ] interface IMFVideoMediaType : IMFMediaType { const MFVIDEOFORMAT *GetVideoFormat(); HRESULT GetVideoRepresentation([in] GUID guidRepresentation, [out] LPVOID *ppvRepresentation, [in] LONG lStride); } [ object, uuid(ac6b7889-0740-4d51-8619-905994a55cc6) ] interface IMFAsyncResult : IUnknown { HRESULT GetState([out] IUnknown **ppunkState); HRESULT GetStatus(); HRESULT SetStatus([in] HRESULT hrStatus); HRESULT GetObject([out] IUnknown **ppObject); [local] IUnknown *GetStateNoAddRef(); } [ object, uuid(a27003cf-2354-4f2a-8d6a-ab7cff15437e), ] interface IMFAsyncCallback : IUnknown { HRESULT GetParameters([out] DWORD *pdwFlags, [out] DWORD *pdwQueue); HRESULT Invoke([in] IMFAsyncResult *pAsyncResult); } [ object, uuid(a27003d0-2354-4f2a-8d6a-ab7cff15437e), ] interface IMFRemoteAsyncCallback : IUnknown { HRESULT Invoke([in] HRESULT hr, [in] IUnknown *pRemoteResult); } cpp_quote("#define MFASYNC_FAST_IO_PROCESSING_CALLBACK 0x0001") cpp_quote("#define MFASYNC_SIGNAL_CALLBACK 0x0002" ) cpp_quote("#define MFASYNC_CALLBACK_QUEUE_UNDEFINED 0x00000000") cpp_quote("#define MFASYNC_CALLBACK_QUEUE_STANDARD 0x00000001") cpp_quote("#define MFASYNC_CALLBACK_QUEUE_RT 0x00000002") cpp_quote("#define MFASYNC_CALLBACK_QUEUE_IO 0x00000003") cpp_quote("#define MFASYNC_CALLBACK_QUEUE_TIMER 0x00000004") cpp_quote("#define MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION 0x00000007") cpp_quote("#define MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK 0xffff0000") cpp_quote("#define MFASYNC_CALLBACK_QUEUE_ALL 0xffffffff") typedef DWORD MediaEventType; [ object, uuid(df598932-f10c-4e39-bba2-c308f101daa3) ] interface IMFMediaEvent : IMFAttributes { HRESULT GetType([out] MediaEventType *pmet); HRESULT GetExtendedType([out] GUID *pguidExtendedType); HRESULT GetStatus([out] HRESULT *phrStatus); HRESULT GetValue([out] PROPVARIANT *pvValue); } [ object, uuid(2cd0bd52-bcd5-4b89-b62c-eadc0c031e7d) ] interface IMFMediaEventGenerator : IUnknown { HRESULT GetEvent([in] DWORD dwFlags, [out] IMFMediaEvent **ppEvent); [local] HRESULT BeginGetEvent([in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState); [call_as(BeginGetEvent)] HRESULT RemoteBeginGetEvent([in] IMFRemoteAsyncCallback *pCallback); [local] HRESULT EndGetEvent([in] IMFAsyncResult *pResult, [out] IMFMediaEvent **ppEvent); [call_as(EndGetEvent)] HRESULT RemoteEndGetEvent([in] IUnknown *pResult, [out] DWORD *pcbEvent, [out, size_is(,*pcbEvent)] BYTE **ppbEvent); HRESULT QueueEvent([in] MediaEventType met, [in] REFGUID guidExtendedType, [in] HRESULT hrStatus, [in, unique] const PROPVARIANT *pvValue); } typedef enum _MFBYTESTREAM_SEEK_ORIGIN { msoBegin, msoCurrent } MFBYTESTREAM_SEEK_ORIGIN; [ object, uuid(ad4c1b00-4bf7-422f-9175-756693d9130d), ] interface IMFByteStream : IUnknown { HRESULT GetCapabilities([out] DWORD *pdwCapabilities); HRESULT GetLength([out] QWORD *pqwLength); HRESULT SetLength([in] QWORD qwLength); HRESULT GetCurrentPosition([out] QWORD *pqwPosition); HRESULT SetCurrentPosition([in] QWORD qwPosition); HRESULT IsEndOfStream([out] BOOL *pfEndOfStream); [local] HRESULT Read([in] BYTE* pb, [in] ULONG cb, [out] ULONG *pcbRead); [local] HRESULT BeginRead([in] BYTE *pb, [in] ULONG cb, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState); [local] HRESULT EndRead([in] IMFAsyncResult *pResult, [out] ULONG *pcbRead); [local] HRESULT Write([in] const BYTE *pb, [in] ULONG cb, [out] ULONG *pcbWritten); [local] HRESULT BeginWrite([in] const BYTE *pb, [in] ULONG cb, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState); [local] HRESULT EndWrite([in] IMFAsyncResult *pResult, [out] ULONG *pcbWritten); [local] HRESULT Seek([in] MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, [in] LONGLONG llSeekOffset, [in] DWORD dwSeekFlags, [out] QWORD *pqwCurrentPosition); HRESULT Flush(); HRESULT Close(); } cpp_quote("#define MFBYTESTREAM_IS_READABLE 0x00000001") cpp_quote("#define MFBYTESTREAM_IS_WRITABLE 0x00000002") cpp_quote("#define MFBYTESTREAM_IS_SEEKABLE 0x00000004") cpp_quote("#define MFBYTESTREAM_IS_REMOTE 0x00000008") cpp_quote("#define MFBYTESTREAM_IS_DIRECTORY 0x00000080") cpp_quote("#define MFBYTESTREAM_HAS_SLOW_SEEK 0x00000100") cpp_quote("#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED 0x00000200") cpp_quote("#define MFBYTESTREAM_SHARE_WRITE 0x00000400") cpp_quote("#define MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO 0x00000001") cpp_quote("EXTERN_GUID(MF_BYTESTREAM_ORIGIN_NAME, 0xfc358288,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") cpp_quote("EXTERN_GUID(MF_BYTESTREAM_CONTENT_TYPE, 0xfc358289,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") cpp_quote("EXTERN_GUID(MF_BYTESTREAM_DURATION, 0xfc35828a,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") cpp_quote("EXTERN_GUID(MF_BYTESTREAM_LAST_MODIFIED_TIME, 0xfc35828b,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") cpp_quote("EXTERN_GUID(MF_BYTESTREAM_IFO_FILE_URI, 0xfc35828c,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") cpp_quote("EXTERN_GUID(MF_BYTESTREAM_DLNA_PROFILE_ID, 0xfc35828d,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") typedef enum MF_FILE_ACCESSMODE { MF_ACCESSMODE_READ = 1, MF_ACCESSMODE_WRITE = 2, MF_ACCESSMODE_READWRITE = 3 } MF_FILE_ACCESSMODE; typedef enum { MF_OPENMODE_FAIL_IF_NOT_EXIST = 0, MF_OPENMODE_FAIL_IF_EXIST = 1, MF_OPENMODE_RESET_IF_EXIST = 2, MF_OPENMODE_APPEND_IF_EXIST = 3, MF_OPENMODE_DELETE_IF_EXIST = 4 } MF_FILE_OPENMODE; typedef enum { MF_FILEFLAGS_NONE = 0x00000000, MF_FILEFLAGS_NOBUFFERING = 0x00000001, MF_FILEFLAGS_ALLOW_WRITE_SHARING = 0x00000002 } MF_FILE_FLAGS; [ object, uuid(5bc8a76b-869a-46a3-9b03-fa218a66aebe) ] interface IMFCollection : IUnknown { HRESULT GetElementCount([out] DWORD *pcElements); HRESULT GetElement([in] DWORD dwElementIndex, [out] IUnknown **ppUnkElement); HRESULT AddElement([in] IUnknown *pUnkElement); HRESULT RemoveElement([in] DWORD dwElementIndex, [out] IUnknown **ppUnkElement); HRESULT InsertElementAt([in] DWORD dwIndex, [in] IUnknown *pUnknown); HRESULT RemoveAllElements(); } [ object, uuid(7fee9e9a-4a89-47a6-899c-b6a53a70fb67), pointer_default(unique) ] interface IMFActivate : IMFAttributes { HRESULT ActivateObject([in] REFIID riid, [out, iid_is(riid), retval] void **ppv); HRESULT ShutdownObject(); HRESULT DetachObject(); } typedef enum _MF_Plugin_Type { MF_Plugin_Type_MFT = 0, MF_Plugin_Type_MediaSource = 1 } MF_Plugin_Type; [ object, local, uuid(5c6c44bf-1db6-435b-9249-e8cd10fdec96), pointer_default(unique) ] interface IMFPluginControl : IUnknown { HRESULT GetPreferredClsid(DWORD pluginType, LPCWSTR selector, CLSID *clsid); HRESULT GetPreferredClsidByIndex(DWORD pluginType, DWORD index, LPWSTR *selector, CLSID *clsid); HRESULT SetPreferredClsid(DWORD pluginType, LPCWSTR selector, const CLSID *clsid); HRESULT IsDisabled(DWORD pluginType, REFCLSID clsid); HRESULT GetDisabledByIndex(DWORD pluginType, DWORD index, CLSID *clsid); HRESULT SetDisabled(DWORD pluginType, REFCLSID clsid, BOOL disabled); } [ object, uuid(36f846fc-2256-48b6-b58e-e2b638316581), local ] interface IMFMediaEventQueue : IUnknown { HRESULT GetEvent([in] DWORD flags, [out] IMFMediaEvent **event); HRESULT BeginGetEvent([in] IMFAsyncCallback *callback, [in] IUnknown *state); HRESULT EndGetEvent([in] IMFAsyncResult *result, [out] IMFMediaEvent **event); HRESULT QueueEvent([in] IMFMediaEvent *event); HRESULT QueueEventParamVar([in] MediaEventType met, [in] REFGUID type, [in] HRESULT status, [in, unique] const PROPVARIANT *value); HRESULT QueueEventParamUnk([in] MediaEventType met, [in] REFGUID type, [in] HRESULT status, [in, unique] IUnknown *unk); HRESULT Shutdown(); } ================================================ FILE: wine/windows/mfreadwrite.idl ================================================ /* * Copyright (C) 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "mfobjects.idl"; import "mftransform.idl"; enum { MF_SOURCE_READER_INVALID_STREAM_INDEX = 0xffffffff, MF_SOURCE_READER_ALL_STREAMS = 0xfffffffe, MF_SOURCE_READER_ANY_STREAM = 0xfffffffe, MF_SOURCE_READER_FIRST_AUDIO_STREAM = 0xfffffffd, MF_SOURCE_READER_FIRST_VIDEO_STREAM = 0xfffffffc, MF_SOURCE_READER_MEDIASOURCE = 0xffffffff, MF_SOURCE_READER_CURRENT_TYPE_INDEX = 0xffffffff }; typedef enum MF_SOURCE_READER_FLAG { MF_SOURCE_READERF_ERROR = 0x001, MF_SOURCE_READERF_ENDOFSTREAM = 0x002, MF_SOURCE_READERF_NEWSTREAM = 0x004, MF_SOURCE_READERF_NATIVEMEDIATYPECHANGED = 0x010, MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED = 0x020, MF_SOURCE_READERF_STREAMTICK = 0x100, MF_SOURCE_READERF_ALLEFFECTSREMOVED = 0x200 } MF_SOURCE_READER_FLAG; typedef struct _MF_SINK_WRITER_STATISTICS { DWORD cb; LONGLONG llLastTimestampReceived; LONGLONG llLastTimestampEncoded; LONGLONG llLastTimestampProcessed; LONGLONG llLastStreamTickReceived; LONGLONG llLastSinkSampleRequest; QWORD qwNumSamplesReceived; QWORD qwNumSamplesEncoded; QWORD qwNumSamplesProcessed; QWORD qwNumStreamTicksReceived; DWORD dwByteCountQueued; QWORD qwByteCountProcessed; DWORD dwNumOutstandingSinkSampleRequests; DWORD dwAverageSampleRateReceived; DWORD dwAverageSampleRateEncoded; DWORD dwAverageSampleRateProcessed; } MF_SINK_WRITER_STATISTICS; cpp_quote("EXTERN_GUID(CLSID_MFReadWriteClassFactory, 0x48e2ed0f, 0x98c2, 0x4a37, 0xbe, 0xd5, 0x16, 0x63, 0x12, 0xdd, 0xd8, 0x3f);") cpp_quote("EXTERN_GUID(CLSID_MFSourceReader, 0x1777133c, 0x0881, 0x411b, 0xa5, 0x77, 0xad, 0x54, 0x5f, 0x07, 0x14, 0xc4);") cpp_quote("EXTERN_GUID(CLSID_MFSinkWriter, 0xa3bbfb17, 0x8273, 0x4e52, 0x9e, 0x0e, 0x97, 0x39, 0xdc, 0x88, 0x79, 0x90);") cpp_quote("EXTERN_GUID(MF_SINK_WRITER_ASYNC_CALLBACK, 0x48cb183e, 0x7b0b, 0x46f4, 0x82, 0x2e, 0x5e, 0x1d, 0x2d, 0xda, 0x43, 0x54);") cpp_quote("EXTERN_GUID(MF_SINK_WRITER_DISABLE_THROTTLING, 0x08b845d8, 0x2b74, 0x4afe, 0x9d, 0x53, 0xbe, 0x16, 0xd2, 0xd5, 0xae, 0x4f);") cpp_quote("EXTERN_GUID(MF_SINK_WRITER_D3D_MANAGER, 0xec822da2, 0xe1e9, 0x4b29, 0xa0, 0xd8, 0x56, 0x3c, 0x71, 0x9f, 0x52, 0x69);") cpp_quote("EXTERN_GUID(MF_SINK_WRITER_ENCODER_CONFIG, 0xad91cd04, 0xa7cc, 0x4ac7, 0x99, 0xb6, 0xa5, 0x7b, 0x9a, 0x4a, 0x7c, 0x70);") cpp_quote("EXTERN_GUID(MF_READWRITE_DISABLE_CONVERTERS, 0x98d5b065, 0x1374, 0x4847, 0x8d, 0x5d, 0x31, 0x52, 0x0f, 0xee, 0x71, 0x56);") cpp_quote("EXTERN_GUID(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, 0xa634a91c, 0x822b, 0x41b9, 0xa4, 0x94, 0x4d, 0xe4, 0x64, 0x36, 0x12, 0xb0);") cpp_quote("EXTERN_GUID(MF_READWRITE_MMCSS_CLASS, 0x39384300, 0xd0eb, 0x40b1, 0x87, 0xa0, 0x33, 0x18, 0x87, 0x1b, 0x5a, 0x53);") cpp_quote("EXTERN_GUID(MF_READWRITE_MMCSS_PRIORITY, 0x43ad19ce, 0xf33f, 0x4ba9, 0xa5, 0x80, 0xe4, 0xcd, 0x12, 0xf2, 0xd1, 0x44);") cpp_quote("EXTERN_GUID(MF_READWRITE_MMCSS_CLASS_AUDIO, 0x430847da, 0x0890, 0x4b0e, 0x93, 0x8c, 0x05, 0x43, 0x32, 0xc5, 0x47, 0xe1);") cpp_quote("EXTERN_GUID(MF_READWRITE_MMCSS_PRIORITY_AUDIO, 0x273db885, 0x2de2, 0x4db2, 0xa6, 0xa7, 0xfd, 0xb6, 0x6f, 0xb4, 0x0b, 0x61);") cpp_quote("EXTERN_GUID(MF_READWRITE_D3D_OPTIONAL, 0x216479d9, 0x3071, 0x42ca, 0xbb, 0x6c, 0x4c, 0x22, 0x10, 0x2e, 0x1d, 0x18);") interface IMFMediaSource; [ object, uuid(70ae66f2-c809-4e4f-8915-bdcb406b7993), local ] interface IMFSourceReader : IUnknown { HRESULT GetStreamSelection([in] DWORD index, [out] BOOL *selected); HRESULT SetStreamSelection([in] DWORD index, [in] BOOL selected); HRESULT GetNativeMediaType([in] DWORD index, [in] DWORD typeindex, [out] IMFMediaType **type); HRESULT GetCurrentMediaType([in] DWORD index, [out] IMFMediaType **type); HRESULT SetCurrentMediaType([in] DWORD index, [in, out] DWORD *reserved, [in] IMFMediaType *type); HRESULT SetCurrentPosition([in] REFGUID format, [in] REFPROPVARIANT position); HRESULT ReadSample([in] DWORD index, [in] DWORD flags, [out] DWORD *actualindex, [out] DWORD *sampleflags, [out] LONGLONG *timestamp, [out] IMFSample **sample); HRESULT Flush([in] DWORD index); HRESULT GetServiceForStream([in] DWORD index, [in] REFGUID service, [in] REFIID riid, [out] void **object); HRESULT GetPresentationAttribute([in] DWORD index, [in] REFGUID guid, [out] PROPVARIANT *attr); } [ object, uuid(3137f1cd-fe5e-4805-a5d8-fb477448cb3d), local ] interface IMFSinkWriter : IUnknown { HRESULT AddStream([in] IMFMediaType *type, [out] DWORD *index); HRESULT SetInputMediaType([in] DWORD index, [in] IMFMediaType *type, [in] IMFAttributes *parameters); HRESULT BeginWriting(void); HRESULT WriteSample([in] DWORD index, [in] IMFSample *sample); HRESULT SendStreamTick([in] DWORD index, [in] LONGLONG timestamp); HRESULT PlaceMarker([in] DWORD index, [in] void *context); HRESULT NotifyEndOfSegment([in] DWORD index); HRESULT Flush([in] DWORD index); HRESULT Finalize(void); HRESULT GetServiceForStream([in] DWORD index, [in] REFGUID service, [in] REFIID riid, [out] void **object); HRESULT GetStatistics([in] DWORD index, [out] MF_SINK_WRITER_STATISTICS *stats); } [ object, uuid(588d72ab-5Bc1-496a-8714-b70617141b25), local ] interface IMFSinkWriterEx : IMFSinkWriter { HRESULT GetTransformForStream([in] DWORD index, [in] DWORD tindex, [out] GUID *category, [out] IMFTransform **transform); } [ object, uuid(e7fe2e12-661c-40da-92f9-4f002ab67627), local ] interface IMFReadWriteClassFactory : IUnknown { HRESULT CreateInstanceFromURL([in] REFCLSID clsid, [in] LPCWSTR url, [in] IMFAttributes *attributes, [in] REFIID riid, [out, iid_is(riid)] void **object ); HRESULT CreateInstanceFromObject([in] REFCLSID clsid, [in] IUnknown *unk, [in] IMFAttributes *attributes, [in] REFIID riid, [out, iid_is(riid)] void **object ); } cpp_quote( "HRESULT WINAPI MFCreateSourceReaderFromByteStream(IMFByteStream *stream, IMFAttributes *attributes," ) cpp_quote( " IMFSourceReader **reader);" ) cpp_quote( "HRESULT WINAPI MFCreateSourceReaderFromMediaSource(IMFMediaSource *source, IMFAttributes *attributes," ) cpp_quote( " IMFSourceReader **reader);" ) ================================================ FILE: wine/windows/mftransform.idl ================================================ /* * Copyright 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "mfobjects.idl"; typedef struct _MFT_INPUT_STREAM_INFO { LONGLONG hnsMaxLatency; DWORD dwFlags; DWORD cbSize; DWORD cbMaxLookahead; DWORD cbAlignment; } MFT_INPUT_STREAM_INFO; typedef struct _MFT_OUTPUT_STREAM_INFO { DWORD dwFlags; DWORD cbSize; DWORD cbAlignment; } MFT_OUTPUT_STREAM_INFO; typedef struct _MFT_OUTPUT_DATA_BUFFER { DWORD dwStreamID; IMFSample *pSample; DWORD dwStatus; IMFCollection *pEvents; } MFT_OUTPUT_DATA_BUFFER, *PMFT_OUTPUT_DATA_BUFFER; typedef enum _MFT_MESSAGE_TYPE { MFT_MESSAGE_COMMAND_FLUSH = 0x00000000, MFT_MESSAGE_COMMAND_DRAIN = 0x00000001, MFT_MESSAGE_SET_D3D_MANAGER = 0x00000002, MFT_MESSAGE_DROP_SAMPLES = 0x00000003, MFT_MESSAGE_COMMAND_TICK = 0x00000004, MFT_MESSAGE_NOTIFY_BEGIN_STREAMING = 0x10000000, MFT_MESSAGE_NOTIFY_END_STREAMING = 0x10000001, MFT_MESSAGE_NOTIFY_END_OF_STREAM = 0x10000002, MFT_MESSAGE_NOTIFY_START_OF_STREAM = 0x10000003, MFT_MESSAGE_COMMAND_MARKER = 0x20000000 } MFT_MESSAGE_TYPE; [ object, uuid(bf94c121-5b05-4e6f-8000-ba598961414d) ] interface IMFTransform : IUnknown { HRESULT GetStreamLimits([out] DWORD *input_minimum, [out] DWORD *input_maximum, [out] DWORD *output_minimum, [out] DWORD *output_maximum); HRESULT GetStreamCount([out] DWORD *inputs, [out] DWORD *outputs); HRESULT GetStreamIDs([in] DWORD input_size, [out,size_is(input_size)] DWORD *inputs, [in] DWORD output_size, [out,size_is(output_size)] DWORD *outputs); HRESULT GetInputStreamInfo([in] DWORD id, [out] MFT_INPUT_STREAM_INFO *info); HRESULT GetOutputStreamInfo([in] DWORD id, [out] MFT_OUTPUT_STREAM_INFO *info); HRESULT GetAttributes([out] IMFAttributes **attributes); HRESULT GetInputStreamAttributes([in] DWORD id, [out] IMFAttributes **attributes); HRESULT GetOutputStreamAttributes([in] DWORD id, [out] IMFAttributes **attributes); HRESULT DeleteInputStream([in] DWORD id); HRESULT AddInputStreams([in] DWORD streams, [in] DWORD *ids); HRESULT GetInputAvailableType([in] DWORD id, [in] DWORD index, [out] IMFMediaType **type); HRESULT GetOutputAvailableType([in] DWORD id, [in] DWORD index, [out] IMFMediaType **type); HRESULT SetInputType(DWORD id, [in] IMFMediaType *type, [in] DWORD flags); HRESULT SetOutputType(DWORD id, [in] IMFMediaType *type, [in] DWORD flags); HRESULT GetInputCurrentType([in] DWORD id, [out] IMFMediaType **type); HRESULT GetOutputCurrentType([in] DWORD id, [out] IMFMediaType **type); HRESULT GetInputStatus([in] DWORD id, [out] DWORD *flags); HRESULT GetOutputStatus([out] DWORD *flags); HRESULT SetOutputBounds([in] LONGLONG lower, [in] LONGLONG upper); HRESULT ProcessEvent([in] DWORD id, [in] IMFMediaEvent *event); HRESULT ProcessMessage([in] MFT_MESSAGE_TYPE message, [in] ULONG_PTR param); [local] HRESULT ProcessInput([in] DWORD id, [in] IMFSample *sample, [in] DWORD flags); [local] HRESULT ProcessOutput([in] DWORD flags, [in] DWORD count, [in,out,size_is(count)] MFT_OUTPUT_DATA_BUFFER *samples, [out] DWORD *status); } ================================================ FILE: wine/windows/midles.h ================================================ /* * NDR Serialization Services * * Copyright (c) 2007 Robert Shearman for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MIDLES_H__ #define __WINE_MIDLES_H__ #include #ifdef __cplusplus extern "C" { #endif typedef enum { MES_ENCODE, MES_DECODE, MES_ENCODE_NDR64 } MIDL_ES_CODE; typedef enum { MES_INCREMENTAL_HANDLE, MES_FIXED_BUFFER_HANDLE, MES_DYNAMIC_BUFFER_HANDLE } MIDL_ES_HANDLE_STYLE; typedef void (__RPC_USER * MIDL_ES_ALLOC)(void *,char **,unsigned int *); typedef void (__RPC_USER * MIDL_ES_WRITE)(void *,char *,unsigned int); typedef void (__RPC_USER * MIDL_ES_READ)(void *,char **,unsigned int *); typedef struct _MIDL_ES_MESSAGE { MIDL_STUB_MESSAGE StubMsg; MIDL_ES_CODE Operation; void *UserState; ULONG MesVersion : 8; ULONG HandleStyle : 8; ULONG HandleFlags : 8; ULONG Reserve : 8; MIDL_ES_ALLOC Alloc; MIDL_ES_WRITE Write; MIDL_ES_READ Read; unsigned char *Buffer; ULONG BufferSize; unsigned char **pDynBuffer; ULONG *pEncodedSize; RPC_SYNTAX_IDENTIFIER InterfaceId; ULONG ProcNumber; ULONG AlienDataRep; ULONG IncrDataSize; ULONG ByteCount; } MIDL_ES_MESSAGE, *PMIDL_ES_MESSAGE; typedef PMIDL_ES_MESSAGE MIDL_ES_HANDLE; typedef struct _MIDL_TYPE_PICKLING_INFO { ULONG Version; ULONG Flags; UINT_PTR Reserved[3]; } MIDL_TYPE_PICKLING_INFO, *PMIDL_TYPE_PICKLING_INFO; RPC_STATUS RPC_ENTRY MesEncodeIncrementalHandleCreate(void *,MIDL_ES_ALLOC,MIDL_ES_WRITE,handle_t *); RPC_STATUS RPC_ENTRY MesDecodeIncrementalHandleCreate(void *,MIDL_ES_READ,handle_t *); RPC_STATUS RPC_ENTRY MesIncrementalHandleReset(handle_t,void *,MIDL_ES_ALLOC,MIDL_ES_WRITE,MIDL_ES_READ,MIDL_ES_CODE); RPC_STATUS RPC_ENTRY MesEncodeFixedBufferHandleCreate(char *,ULONG,ULONG *,handle_t *); RPC_STATUS RPC_ENTRY MesEncodeDynBufferHandleCreate(char **,ULONG *,handle_t *); RPC_STATUS RPC_ENTRY MesDecodeBufferHandleCreate(char *,ULONG,handle_t *); RPC_STATUS RPC_ENTRY MesBufferHandleReset(handle_t,ULONG,MIDL_ES_CODE,char **,ULONG,ULONG *); RPC_STATUS RPC_ENTRY MesHandleFree(handle_t); RPC_STATUS RPC_ENTRY MesInqProcEncodingId(handle_t,PRPC_SYNTAX_IDENTIFIER,ULONG *); SIZE_T RPC_ENTRY NdrMesSimpleTypeAlignSize(handle_t); void RPC_ENTRY NdrMesSimpleTypeDecode(handle_t,void *,short); void RPC_ENTRY NdrMesSimpleTypeEncode(handle_t,const MIDL_STUB_DESC *,const void *,short); SIZE_T RPC_ENTRY NdrMesTypeAlignSize(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *); void RPC_ENTRY NdrMesTypeEncode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *); void RPC_ENTRY NdrMesTypeDecode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,void *); SIZE_T RPC_ENTRY NdrMesTypeAlignSize2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *); void RPC_ENTRY NdrMesTypeEncode2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *); void RPC_ENTRY NdrMesTypeDecode2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,void *); void RPC_ENTRY NdrMesTypeFree2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,void *); void RPC_VAR_ENTRY NdrMesProcEncodeDecode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,...); CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrMesProcEncodeDeocde2(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,...); #ifdef __cplusplus } #endif #endif /* __WINE_MIDLES_H__ */ ================================================ FILE: wine/windows/mimeinfo.idl ================================================ /* * Copyright (C) 2005 Vijay Kiran Kamuju * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; [ local, object, uuid(f77459a0-bf9a-11cf-ba4e-00c04fd70816), pointer_default(unique) ] interface IMimeInfo : IUnknown { typedef [unique] IMimeInfo *LPMIMEINFO; HRESULT GetMimeCLSIDMapping( [out] UINT *pcTypes, [out] LPCSTR * *ppszTypes, [out] CLSID * *ppclsID ); } cpp_quote("#define SID_IMimeInfo IID_IMimeInfo") ================================================ FILE: wine/windows/mimeole.idl ================================================ /* * Copyright 2007 Robert Shearman for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "ocidl.idl"; import "objidl.idl"; import "propidl.idl"; #define DECLARE_HANDLE(name) typedef void *name interface IMimeMessageCallback; interface IMimeEnumAddressTypes; interface IMimeMessageParts; interface IMimeMessageTree; interface IMimeBody; interface IMimeEnumProperties; cpp_quote("DEFINE_GUID(CLSID_IMimeBody, 0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IMimeMessage, 0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IMimeSecurity, 0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IMimeHtmlProtocol,0x5300401,0xbcbc, 0x11d0, 0x85, 0xe3, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_MimeEdit, 0x1c82ead9, 0x508e, 0x11d1, 0x8d, 0xcf, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf9);") cpp_quote("#define MIME_E_REG_CREATE_KEY 0x800cce01") cpp_quote("#define MIME_E_REG_QUERY_INFO 0x800cce02") cpp_quote("#define MIME_E_INVALID_ENCTYPE 0x800cce03") cpp_quote("#define MIME_E_BOUNDARY_MISMATCH 0x800cce04") cpp_quote("#define MIME_E_NOT_FOUND 0x800cce05") cpp_quote("#define MIME_E_NO_DATA 0x800cce05") cpp_quote("#define MIME_E_BUFFER_TOO_SMALL 0x800cce06") cpp_quote("#define MIME_E_INVALID_ITEM_FLAGS 0x800cce07") cpp_quote("#define MIME_E_ONE_LINE_ITEME 0x800cce08") cpp_quote("#define MIME_E_INVALID_HANDLE 0x800cce09") cpp_quote("#define MIME_E_CHARSET_TRANSLATE 0x800cce0a") cpp_quote("#define MIME_E_NOT_INITIALIZED 0x800cce0b") cpp_quote("#define MIME_E_INVALID_OPTION_VALUE 0x800cce1f") cpp_quote("#define MIME_E_INVALID_OPTION_ID 0x800cce20") cpp_quote("#define MIME_E_INVALID_HEADER_NAME 0x800cce21") cpp_quote("#define MIME_E_NOT_BOUND 0x800cce22") cpp_quote("#define MIME_E_MAX_SIZE_TOO_SMALL 0x800cce23") cpp_quote("#define MIME_E_MULTIPART_HAS_CHILDREN 0x800cce25") cpp_quote("#define MIME_E_INVALID_PROP_FLAGS 0x800cce26") cpp_quote("#define MIME_E_INVALID_ADDRESS_TYPE 0x800cce27") cpp_quote("#define MIME_E_INVALID_OBJECT_IID 0x800cce28") cpp_quote("#define MIME_E_MLANG_DLL_NOT_FOUND 0x800cce29") cpp_quote("#define MIME_E_ROOT_NOT_EMPTY 0x800cce2a") cpp_quote("#define MIME_E_MLANG_BAD_DLL 0x800cce2b") cpp_quote("#define MIME_E_REG_OPEN_KEY 0x800cce2c") cpp_quote("#define MIME_E_INVALID_INET_DATE 0x800cce2d") cpp_quote("#define MIME_E_INVALID_BODYTYPE 0x800cce2e") cpp_quote("#define MIME_E_INVALID_DELETE_TYPE 0x800cce2f") cpp_quote("#define MIME_E_OPTION_HAS_NO_VALUE 0x800cce30") cpp_quote("#define MIME_E_INVALID_CHARSET_TYPE 0x800cce31") cpp_quote("#define MIME_E_INVALID_TEXT_TYPE 0x800cce38") cpp_quote("#define MIME_E_SECURITY_NOOP 0x800cceb1") cpp_quote("#define MIME_S_SECURITY_NOOP 0x000cceb1") cpp_quote("typedef enum tagMIMEPROPID {") cpp_quote(" PID_HDR_NEWSGROUP = 2,") cpp_quote(" PID_HDR_NEWSGROUPS = 3,") cpp_quote(" PID_HDR_REFS = 4,") cpp_quote(" PID_HDR_SUBJECT = 5,") cpp_quote(" PID_HDR_FROM = 6,") cpp_quote(" PID_HDR_MESSAGEID = 7,") cpp_quote(" PID_HDR_RETURNPATH = 8,") cpp_quote(" PID_HDR_RR = 9,") cpp_quote(" PID_HDR_RETRCPTO = 10,") cpp_quote(" PID_HDR_APPARTO = 11,") cpp_quote(" PID_HDR_DATE = 12,") cpp_quote(" PID_HDR_RECEIVED = 13,") cpp_quote(" PID_HDR_REPLYTO = 14,") cpp_quote(" PID_HDR_XMAILER = 15,") cpp_quote(" PID_HDR_BCC = 16,") cpp_quote(" PID_HDR_MIMEVER = 17,") cpp_quote(" PID_HDR_CNTTYPE = 18,") cpp_quote(" PID_HDR_CNTXFER = 19,") cpp_quote(" PID_HDR_CNTID = 20,") cpp_quote(" PID_HDR_CNTDESC = 21,") cpp_quote(" PID_HDR_CNTDISP = 22,") cpp_quote(" PID_HDR_CNTBASE = 23,") cpp_quote(" PID_HDR_CNTLOC = 24,") cpp_quote(" PID_HDR_TO = 25,") cpp_quote(" PID_HDR_PATH = 26,") cpp_quote(" PID_HDR_FOLLOWUPTO = 27,") cpp_quote(" PID_HDR_EXPIRES = 28,") cpp_quote(" PID_HDR_CC = 29,") cpp_quote(" PID_HDR_CONTROL = 30,") cpp_quote(" PID_HDR_DISTRIB = 31,") cpp_quote(" PID_HDR_KEYWORDS = 32,") cpp_quote(" PID_HDR_SUMMARY = 33,") cpp_quote(" PID_HDR_APPROVED = 34,") cpp_quote(" PID_HDR_LINES = 35,") cpp_quote(" PID_HDR_XREF = 36,") cpp_quote(" PID_HDR_ORG = 37,") cpp_quote(" PID_HDR_XNEWSRDR = 38,") cpp_quote(" PID_HDR_XPRI = 39,") cpp_quote(" PID_HDR_XMSPRI = 40,") cpp_quote(" PID_PAR_FILENAME = 41,") cpp_quote(" PID_PAR_BOUNDARY = 42,") cpp_quote(" PID_PAR_CHARSET = 43,") cpp_quote(" PID_PAR_NAME = 44,") cpp_quote(" PID_ATT_FILENAME = 45,") cpp_quote(" PID_ATT_GENFNAME = 46,") cpp_quote(" PID_ATT_PRITYPE = 47,") cpp_quote(" PID_ATT_SUBTYPE = 48,") cpp_quote(" PID_ATT_NORMSUBJ = 49,") cpp_quote(" PID_ATT_ILLEGAL = 50,") cpp_quote(" PID_ATT_RENDERED = 51,") cpp_quote(" PID_ATT_SENTTIME = 52,") cpp_quote(" PID_ATT_RECVTIME = 53,") cpp_quote(" PID_ATT_PRIORITY = 54,") cpp_quote(" PID_HDR_COMMENT = 55,") cpp_quote(" PID_HDR_ENCODING = 56,") cpp_quote(" PID_HDR_ENCRYPTED = 57,") cpp_quote(" PID_HDR_OFFSETS = 58,") cpp_quote(" PID_HDR_XUNSENT = 59,") cpp_quote(" PID_HDR_ARTICLEID = 60,") cpp_quote(" PID_HDR_SENDER = 61,") cpp_quote(" PID_ATT_SERVER = 62,") cpp_quote(" PID_ATT_ACCOUNT = 63,") cpp_quote(" PID_ATT_UIDL = 64,") cpp_quote(" PID_ATT_STOREMSGID = 65,") cpp_quote(" PID_ATT_USERNAME = 66,") cpp_quote(" PID_ATT_FORWARDTO = 67,") cpp_quote(" PID_ATT_STOREFOLDERID = 68,") cpp_quote(" PID_ATT_GHOSTED = 69,") cpp_quote(" PID_ATT_UNCACHEDSIZE = 70,") cpp_quote(" PID_ATT_COMBINED = 71,") cpp_quote(" PID_ATT_AUTOINLINED = 72,") cpp_quote(" PID_HDR_DISP_NOTIFICATION_TO = 73,") cpp_quote(" PID_PAR_REPLYTYPE = 74,") cpp_quote(" PID_PAR_FORMAT = 75,") cpp_quote(" PID_ATT_FORMAT = 76,") cpp_quote(" PID_HDR_INREPLYTO = 77,") cpp_quote(" PID_ATT_ACCOUNTNAME = 78,") cpp_quote(" PID_LAST = 79,") cpp_quote("} MIMEPROPID;") cpp_quote("#define ISPIDSTR(_name) (((DWORD_PTR)(_name) >> 16) == 0)") cpp_quote("#define STRTOPID(_name) ((DWORD)((DWORD_PTR)((LPCSTR)(_name))))") cpp_quote("#define PIDTOSTR(_id) ((LPCSTR)((DWORD_PTR)(_id)))") cpp_quote("#define TYPEDID_ID(_typedid) (((ULONG)(_typedid))>>16)") cpp_quote("#define TYPEDID_MASK ((ULONG)0xffff)") cpp_quote("#define TYPEDID_TYPE(t) ((VARTYPE)((t) & TYPEDID_MASK))") cpp_quote("#define OID_ALLOW_8BIT_HEADER (0x00010000 | VT_BOOL)") cpp_quote("#define OID_CBMAX_HEADER_LINE (0x00020000 | VT_UI4)") cpp_quote("#define OID_SAVE_FORMAT (0x00030000 | VT_UI4)") cpp_quote("#define OID_WRAP_BODY_TEXT (0x00040000 | VT_BOOL)") cpp_quote("#define OID_CBMAX_BODY_LINE (0x00050000 | VT_UI4)") cpp_quote("#define OID_TRANSMIT_BODY_ENCODING (0x00060000 | VT_UI4)") cpp_quote("#define OID_TRANSMIT_TEXT_ENCODING (0x00070000 | VT_UI4)") cpp_quote("#define OID_GENERATE_MESSAGE_ID (0x00080000 | VT_BOOL)") cpp_quote("#define OID_HIDE_TNEF_ATTACHMENTS (0x000e0000 | VT_BOOL)") cpp_quote("#define OID_CLEANUP_TREE_ON_SAVE (0x000f0000 | VT_BOOL)") cpp_quote("#define OID_BODY_REMOVE_NBSP (0x00140000 | VT_BOOL)") cpp_quote("#define OID_DEFAULT_BODY_CHARSET (0x00150000 | VT_UI4)") cpp_quote("#define OID_DEFAULT_HEADER_CHARSET (0x00160000 | VT_UI4)") cpp_quote("#define OID_DBCS_ESCAPE_IS_8BIT (0x00170000 | VT_BOOL)") cpp_quote("#define OID_SECURITY_TYPE (0x00180000 | VT_UI4)") cpp_quote("#define OID_SECURITY_HWND_OWNER (0x00320000 | VT_UI4)") cpp_quote("#define OID_HEADER_RELOAD_TYPE (0x00370000 | VT_UI4)") cpp_quote("#define OID_CAN_INLINE_TEXT_BODIES (0x00380000 | VT_BOOL)") cpp_quote("#define OID_SHOW_MACBINARY (0x00390000 | VT_BOOL)") cpp_quote("#define OID_SAVEBODY_KEEPBOUNDARY (0x00400000 | VT_BOOL)") cpp_quote("#define OID_SECURITY_2KEY_CERT_BAG (0x00590000 | VT_VECTOR | VT_UI4)") cpp_quote("#define OID_SECURITY_2KEY_CERT_BAG_64 (0x00590000 | VT_VECTOR | VT_UI8)") [ uuid(e4b28371-83b0-11d0-8259-00c04fd85ab4), version(1.0) ] library MIMEOLE { importlib("stdole2.tlb"); DECLARE_HANDLE(HCHARSET); DECLARE_HANDLE(HBODY); DECLARE_HANDLE(HHEADERROW); typedef HCHARSET *LPHCHARSET; typedef HBODY *LPHBODY; typedef HHEADERROW *LPHHEADERROW; typedef DWORD TYPEDID; typedef const PROPVARIANT *LPCPROPVARIANT; typedef const BLOB *LPCBLOB; typedef enum tagRELOADTYPE { RELOAD_HEADER_NONE, RELOAD_HEADER_RESET, RELOAD_HEADER_APPEND, RELOAD_HEADER_REPLACE, } RELOADTYPE; typedef enum tagMIMESAVETYPE { SAVE_RFC822, SAVE_RFC1521, } MIMESAVETYPE; typedef enum tagCSETAPPLYTYPE { CSET_APPLY_UNTAGGED, CSET_APPLY_ALL, CSET_APPLY_TAG_ALL, } CSETAPPLYTYPE; typedef enum tagENCODINGTYPE { IET_BINARY, IET_BASE64, IET_UUENCODE, IET_QP, IET_7BIT, IET_8BIT, IET_INETCSET, IET_UNICODE, IET_RFC1522, IET_ENCODED, IET_CURRENT, IET_UNKNOWN, IET_BINHEX40, IET_LAST } ENCODINGTYPE; const SHORT IET_DECODED = IET_BINARY; const SHORT CCHMAX_HEADER_LINE = 1000; [ uuid(c5588349-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeInternational : IUnknown { typedef [unique] IMimeInternational *LPMIMEINTERNATIONAL; typedef DWORD CODEPAGEID; const CODEPAGEID CP_USASCII = 1252; const CODEPAGEID CP_UNICODE = 1200; const CODEPAGEID CP_JAUTODETECT = 50932; const CODEPAGEID CP_KAUTODETECT = 50949; const CODEPAGEID CP_ISO2022JPESC = 50221; const CODEPAGEID CP_ISO2022JPSIO = 50222; const SHORT CCHMAX_CSET_NAME = 128; const SHORT CCHMAX_LANG_NAME = 128; const SHORT CCHMAX_FACE_NAME = 128; typedef struct tagINETCSETINFO { CHAR szName[CCHMAX_CSET_NAME]; HCHARSET hCharset; CODEPAGEID cpiWindows; CODEPAGEID cpiInternet; DWORD dwReserved1; } INETCSETINFO, *LPINETCSETINFO; typedef enum tagINETLANGMASK { ILM_FAMILY = 0x01, ILM_NAME = 0x02, ILM_BODYCSET = 0x04, ILM_HEADERCSET = 0x08, ILM_WEBCSET = 0x10, ILM_FIXEDFONT = 0x20, ILM_VARIABLEFONT = 0x40, } INETLANGMASK; typedef struct tagCODEPAGEINFO { DWORD dwMask; CODEPAGEID cpiCodePage; BOOL fIsValidCodePage; ULONG ulMaxCharSize; BOOL fInternetCP; CODEPAGEID cpiFamily; CHAR szName[CCHMAX_LANG_NAME]; CHAR szBodyCset[CCHMAX_CSET_NAME]; CHAR szHeaderCset[CCHMAX_CSET_NAME]; CHAR szWebCset[CCHMAX_CSET_NAME]; CHAR szFixedFont[CCHMAX_FACE_NAME]; CHAR szVariableFont[CCHMAX_FACE_NAME]; ENCODINGTYPE ietNewsDefault; ENCODINGTYPE ietMailDefault; DWORD dwReserved1; } CODEPAGEINFO, *LPCODEPAGEINFO; typedef struct tagRFC1522INFO { BOOL fRfc1522Allowed; BOOL fRfc1522Used; BOOL fAllow8bit; HCHARSET hRfc1522Cset; } RFC1522INFO, *LPRFC1522INFO; typedef enum tagCHARSETTYPE { CHARSET_BODY, CHARSET_HEADER, CHARSET_WEB, } CHARSETTYPE; HRESULT SetDefaultCharset( [in] HCHARSET hCharset); HRESULT GetDefaultCharset( [out] LPHCHARSET phCharset); HRESULT GetCodePageCharset( [in] CODEPAGEID cpiCodePage, [in] CHARSETTYPE ctCsetType, [out] LPHCHARSET phCharset); HRESULT FindCharset( [in] LPCSTR pszCharset, [out] LPHCHARSET phCharset); HRESULT GetCharsetInfo( [in] HCHARSET hCharset, [in, out] LPINETCSETINFO pCsetInfo); HRESULT GetCodePageInfo( [in] CODEPAGEID cpiCodePage, [in, out] LPCODEPAGEINFO pCodePageInfo); HRESULT CanConvertCodePages( [in] CODEPAGEID cpiSource, [in] CODEPAGEID cpiDest); HRESULT DecodeHeader( [in] HCHARSET hCharset, [in] LPCSTR pszData, [in, out] LPPROPVARIANT pDecoded, [in, out] LPRFC1522INFO pRfc1522Info); HRESULT EncodeHeader( [in] HCHARSET hCharset, [in] LPPROPVARIANT pData, [out] LPSTR *ppszEncoded, [in, out] LPRFC1522INFO pRfc1522Info); HRESULT ConvertBuffer( [in] CODEPAGEID cpiSource, [in] CODEPAGEID cpiDest, [in] LPBLOB pIn, [in, out] LPBLOB pOut, [out] ULONG *pcbRead); HRESULT ConvertString( [in] CODEPAGEID cpiSource, [in] CODEPAGEID cpiDest, [in] LPPROPVARIANT pIn, [in, out] LPPROPVARIANT pOut); HRESULT MLANG_ConvertInetReset(void); HRESULT MLANG_ConvertInetString( [in] CODEPAGEID cpiSource, [in] CODEPAGEID cpiDest, [in] LPCSTR pSource, [in] int *pnSizeOfSource, [in,out,unique] LPSTR pDestination, [in] int *pnDstSize); HRESULT Rfc1522Decode( [in] LPCSTR pszValue, [in,ref] LPSTR pszCharset, [in] ULONG cchmax, [out] LPSTR *ppszDecoded); HRESULT Rfc1522Encode( [in] LPCSTR pszValue, [in] HCHARSET hCharset, [out] LPSTR *ppszEncoded); } [ uuid(c5588353-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeSecurity : IUnknown { typedef [unique] IMimeSecurity *LPMIMESECURITY; cpp_quote("#ifdef __WINE_WINCRYPT_H") cpp_quote("typedef PCCERT_CONTEXT PCX509CERT;") cpp_quote("#else") typedef const void *PCX509CERT; typedef void *HCERTSTORE; cpp_quote("#endif") typedef BLOB THUMBBLOB; typedef void *HCAPICERTSTORE; cpp_quote("#define MST_NONE 0x00000000") cpp_quote("#define MST_THIS_SIGN 0x00000001") cpp_quote("#define MST_THIS_ENCRYPT 0x00000002") cpp_quote("#define MST_BLOB_FLAG 0x00000004") cpp_quote("#define MST_THIS_BLOBSIGN (MST_BLOB_FLAG | MST_THIS_SIGN)") cpp_quote("#define MST_CHILD_SIGN 0x00000100") cpp_quote("#define MST_CHILD_ENCRYPT 0x00000200") cpp_quote("#define MST_SUBMSG_SIGN 0x00001000") cpp_quote("#define MST_SUBMSG_ENCRYPT 0x00002000") cpp_quote("#define MST_RECEIPT_REQUEST 0x00010000") cpp_quote("#define MST_CLASS_SMIME_V1 0x00000000") cpp_quote("#define MST_CLASS_PGP 0x01000000") typedef enum tagCERTSTATE { CERTIFICATE_OK, CERTIFICATE_NOT_PRESENT, CERTIFICATE_EXPIRED, CERTIFICATE_CHAIN_TOO_LONG, CERTIFICATE_MISSING_ISSUER, CERTIFICATE_CRL_LISTED, CERTIFICATE_NOT_TRUSTED, CERTIFICATE_INVALID, CERTIFICATE_ERROR, CERTIFICATE_NOPRINT, CERTIFICATE_UNKNOWN } CERTSTATE; typedef enum tagCERTNAMETYPE { SIMPLE, OID, X500, } CERTNAMETYPE; typedef enum tagCERTDATAID { CDID_EMAIL, CDID_MAX } CERTDATAID; typedef struct tagX509CERTRESULT { DWORD cEntries; CERTSTATE *rgcs; PCX509CERT *rgpCert; } X509CERTRESULT, *PX509CERTRESULT; typedef const X509CERTRESULT *PCX509CERTRESULT; HRESULT InitNew(void); HRESULT CheckInit(void); HRESULT EncodeMessage( [in] IMimeMessageTree */*const*/ pTree, [in] DWORD dwFlags); HRESULT EncodeBody( [in] IMimeMessageTree */*const*/ pTree, [in] HBODY hEncodeRoot, [in] DWORD dwFlags); HRESULT DecodeMessage( [in] IMimeMessageTree */*const*/ pTree, [in] DWORD dwFlags); HRESULT DecodeBody( [in] IMimeMessageTree */*const*/ pTree, [in] HBODY hDecodeRoot, [in] DWORD dwFlags); HRESULT EnumCertificates( [in] HCAPICERTSTORE hc, [in] DWORD dwUsage, [in] PCX509CERT pPrev, [out] PCX509CERT *ppCert); HRESULT GetCertificateName( [in] const PCX509CERT pX509Cert, [in] const CERTNAMETYPE cn, [out] LPSTR *ppszName); HRESULT GetMessageType( [in] const HWND hwndParent, [in] IMimeBody */*const*/ pBody, [out] DWORD */*const*/ pdwSecType); HRESULT GetCertData( [in] const PCX509CERT pX509Cert, [in] const CERTDATAID dataid, [out, ref] LPPROPVARIANT pValue); } [ uuid(fd853cd1-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeHeaderTable : IPersistStream { /* FIXME: fill this in */ } [ uuid(fd853cec-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimePropertySchema : IUnknown { typedef [unique] IMimePropertySchema *LPMIMEPROPERTYSCHEMA; typedef enum tagMIMEPROPFLAGS { MPF_INETCSET = 0x01, MPF_RFC1522 = 0x02, MPF_ADDRESS = 0x04, MPF_HASPARAMS = 0x08, MPF_MIME = 0x10, MPF_READONLY = 0x20 } MIMEPROPFLAGS; HRESULT RegisterProperty( [in] const char *name, [in] DWORD flags, [in] DWORD rownumber, [in] VARTYPE vtdefault, [out] DWORD *propid); HRESULT ModifyProperty( [in] const char *name, [in] DWORD flags, [in] DWORD rownumber, [in] VARTYPE vtdefault); HRESULT GetPropertyId( [in] const char *name, [out] DWORD *propid); HRESULT GetPropertyName( [in] DWORD propid, [out] char **name); HRESULT RegisterAddressType( [in] const char *name, [out] DWORD *adrtype); } [ uuid(fd853cd3-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimePropertySet : IPersistStreamInit { typedef [unique] IMimePropertySet *LPMIMEPROPERTYSET; cpp_quote("#define PDF_ENCODED 0x00000001") cpp_quote("#define PDF_NAMEINDATA 0x00000002") cpp_quote("#define PDF_HEADERFORMAT (0x00000004 | PDF_ENCODED)") cpp_quote("#define PDF_NOCOMMENTS 0x00000008") cpp_quote("#define PDF_SAVENOENCODE 0x00000010") cpp_quote("#define PDF_VECTOR 0x00000020") typedef struct tagMIMEPARAMINFO { LPSTR pszName; LPSTR pszData; } MIMEPARAMINFO, *LPMIMEPARAMINFO; typedef enum tagPROPINFOMASK { PIM_CHARSET = 0x01, PIM_ENCODINGTYPE = 0x02, PIM_ROWNUMBER = 0x04, PIM_FLAGS = 0x08, PIM_PROPID = 0x10, PIM_VALUES = 0x20, PIM_VTDEFAULT = 0x40, PIM_VTCURRENT = 0x80 } PROPINFOMASK; typedef struct tagMIMEPROPINFO { DWORD dwMask; HCHARSET hCharset; ENCODINGTYPE ietEncoding; DWORD dwRowNumber; DWORD dwFlags; DWORD dwPropId; DWORD cValues; VARTYPE vtDefault; VARTYPE vtCurrent; } MIMEPROPINFO, *LPMIMEPROPINFO; typedef const MIMEPROPINFO *LPCMIMEPROPINFO; HRESULT GetPropInfo( [in] LPCSTR pszName, [in,out] LPMIMEPROPINFO pInfo); HRESULT SetPropInfo( [in] LPCSTR pszName, [in] LPCMIMEPROPINFO pInfo); cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetProp") cpp_quote("#undef SetProp") cpp_quote("#undef EnumProps") cpp_quote("#endif") HRESULT GetProp( [in] LPCSTR pszName, [in] DWORD dwFlags, [in,out] LPPROPVARIANT pValue); HRESULT SetProp( [in] LPCSTR pszName, [in] DWORD dwFlags, [in] LPCPROPVARIANT pValue); HRESULT AppendProp( [in] LPCSTR pszName, [in] DWORD dwFlags, [in] LPPROPVARIANT pValue); HRESULT DeleteProp( [in] LPCSTR pszName); HRESULT CopyProps( [in] ULONG cNames, [in,unique] LPCSTR *prgszName, [in] IMimePropertySet *pPropertySet); HRESULT MoveProps( [in] ULONG cNames, [in] LPCSTR *prgszName, [in] IMimePropertySet *pPropertySet); HRESULT DeleteExcept( [in] ULONG cNames, [in] LPCSTR *prgszName); HRESULT QueryProp( [in] LPCSTR pszName, [in] LPCSTR pszCriteria, [in] boolean fSubString, [in] boolean fCaseSensitive); HRESULT GetCharset( [out] LPHCHARSET phCharset); HRESULT SetCharset( [in] HCHARSET hCharset, [in] CSETAPPLYTYPE applytype); HRESULT GetParameters( [in] LPCSTR pszName, [out] ULONG *pcParams, [out] LPMIMEPARAMINFO *pprgParam); HRESULT IsContentType( [in] LPCSTR pszPriType, [in,unique] LPCSTR pszSubType); HRESULT BindToObject( [in] REFIID riid, [out,iid_is(riid)] void **ppvObject); HRESULT Clone( [out] IMimePropertySet **ppPropertySet); HRESULT SetOption( [in] const TYPEDID oid, [in] LPCPROPVARIANT pValue); HRESULT GetOption( [in] const TYPEDID oid, [in,out] LPPROPVARIANT pValue); cpp_quote("#define EPF_NONAME 0x00000001") HRESULT EnumProps( [in] DWORD dwFlags, [out] IMimeEnumProperties **ppEnum); } [ uuid(c558834a-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeAddressTable : IUnknown { typedef [unique] IMimeAddressTable *LPMIMEADDRESSTABLE; DECLARE_HANDLE(HADDRESS); typedef HADDRESS *LPHADDRESS; typedef DWORD IADDRESSTYPE; typedef enum tagADDRESSFORMAT { AFT_DISPLAY_FRIENDLY, AFT_DISPLAY_EMAIL, AFT_DISPLAY_BOTH, AFT_RFC822_DECODED, AFT_RFC822_ENCODED, AFT_RFC822_TRANSMIT, } ADDRESSFORMAT; cpp_quote("#define IAT_UNKNOWN 0x00000000") cpp_quote("#define IAT_FROM 0x00000001") cpp_quote("#define IAT_SENDER 0x00000002") cpp_quote("#define IAT_TO 0x00000004") cpp_quote("#define IAT_CC 0x00000008") cpp_quote("#define IAT_BCC 0x00000010") cpp_quote("#define IAT_REPLYTO 0x00000020") cpp_quote("#define IAT_RETURNPATH 0x00000040") cpp_quote("#define IAT_RETRCPTTO 0x00000080") cpp_quote("#define IAT_RR 0x00000100") cpp_quote("#define IAT_APPARTO 0x00000200") cpp_quote("#define IAT_DISP_NOTIFICATION_TO 0x00000400") cpp_quote("#define IAT_ALL 0xffffffff") cpp_quote("#define IAT_KNOWN (IAT_FROM | IAT_TO | IAT_CC | IAT_BCC | IAT_REPLYTO | IAT_SENDER)") cpp_quote("#define IAT_RECIPS (IAT_TO | IAT_CC | IAT_BCC)") typedef struct tagADDRESSPROPS { DWORD dwProps; HADDRESS hAddress; ENCODINGTYPE ietFriendly; HCHARSET hCharset; DWORD dwAdrType; LPSTR pszFriendly; LPWSTR pwszReserved; LPSTR pszEmail; CERTSTATE certstate; THUMBBLOB tbSigning; THUMBBLOB tbEncryption; DWORD dwCookie; DWORD dwReserved1; DWORD dwReserved2; } ADDRESSPROPS, *LPADDRESSPROPS; cpp_quote("#define IAP_CHARSET 0x00000001") cpp_quote("#define IAP_HANDLE 0x00000002") cpp_quote("#define IAP_ADRTYPE 0x00000004") cpp_quote("#define IAP_FRIENDLY 0x00000008") cpp_quote("#define IAP_EMAIL 0x00000020") cpp_quote("#define IAP_CERTSTATE 0x00000100") cpp_quote("#define IAP_SIGNING_PRINT 0x00000200") cpp_quote("#define IAP_ENCRYPTION_PRINT 0x00000400") cpp_quote("#define IAP_ENCODING 0x00000800") cpp_quote("#define IAP_COOKIE 0x00001000") cpp_quote("#define IAP_FRIENDLYW 0x00002000") cpp_quote("#define IAP_ALL 0xffffffff") typedef struct tagADDRESSLIST { ULONG cAdrs; LPADDRESSPROPS prgAdr; } ADDRESSLIST, *LPADDRESSLIST; HRESULT Append( [in] DWORD addrtype, [in] ENCODINGTYPE encoding, [in] const char *friendly, [in,unique] const char *email, [in,out,unique] HADDRESS *address); HRESULT Insert( [in] ADDRESSPROPS *addressprop, [in,out,unique] HADDRESS *address); HRESULT SetProps( [in] HADDRESS address, [in] ADDRESSPROPS *addressprop); HRESULT GetProps( [in] HADDRESS address, [in] ADDRESSPROPS *addressprop); HRESULT GetSender( [in,out] ADDRESSPROPS *addressprop); HRESULT CountTypes( [in] DWORD addrtype, [out] ULONG *count); HRESULT GetTypes( [in] DWORD addrtype, [in] DWORD dwProps, [in,out] ADDRESSLIST *list); HRESULT EnumTypes( [in] DWORD addrtype, [in] DWORD props, [out] IMimeEnumAddressTypes **types); HRESULT Delete( [in] HADDRESS hAddress); HRESULT DeleteTypes( [in] DWORD addrtype); HRESULT GetFormat( [in] DWORD addrtype, [in] ADDRESSFORMAT addrformat, [out] char **format); HRESULT AppendRfc822( [in] DWORD addrtype, [in] ENCODINGTYPE encoding, [in] const char *rfcaddr); HRESULT ParseRfc822( [in] DWORD addrtype, [in] ENCODINGTYPE encoding, [in] const char *rfcaddr, [in,out] ADDRESSLIST *list); HRESULT Clone( [out] IMimeAddressTable **table); HRESULT BindToObject( [in] REFIID riid, [out, iid_is(riid)] void **obj); } [ uuid(ee519f11-851a-11d0-8252-00c04fd85ab4), object ] interface IMimeWebDocument : IUnknown { /* FIXME: fill this in */ } [ uuid(c558834c-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeBody : IMimePropertySet { typedef [unique] IMimeBody *LPMIMEBODY; typedef enum tagIMSGBODYTYPE { IBT_SECURE, IBT_ATTACHMENT, IBT_EMPTY, IBT_CSETTAGGED, IBT_AUTOATTACH, } IMSGBODYTYPE; typedef struct tagBODYOFFSETS { DWORD cbBoundaryStart; DWORD cbHeaderStart; DWORD cbBodyStart; DWORD cbBodyEnd; } BODYOFFSETS, *LPBODYOFFSETS; typedef struct tagTRANSMITINFO { ENCODINGTYPE ietCurrent; ENCODINGTYPE ietXmitMime; ENCODINGTYPE ietXmit822; ULONG cbLongestLine; ULONG cExtended; ULONG ulPercentExt; ULONG cbSize; ULONG cLines; } TRANSMITINFO, *LPTRANSMITINFO; HRESULT IsType( [in] IMSGBODYTYPE bodytype); HRESULT SetDisplayName( [in] LPCSTR pszDisplay); HRESULT GetDisplayName( [out] LPSTR *ppszDisplay); HRESULT GetOffsets( [out] LPBODYOFFSETS pOffsets); HRESULT GetCurrentEncoding( [out] ENCODINGTYPE *pietEncoding); HRESULT SetCurrentEncoding( [in] ENCODINGTYPE ietEncoding); HRESULT GetEstimatedSize( [in] ENCODINGTYPE ietEncoding, [out] ULONG *pcbSize); HRESULT GetDataHere( [in] ENCODINGTYPE ietEncoding, [in] IStream *pStream); HRESULT GetData( [in] ENCODINGTYPE ietEncoding, [out] IStream **ppStream); HRESULT SetData( [in] ENCODINGTYPE ietEncoding, [in,unique] LPCSTR pszPriType, [in,unique] LPCSTR pszSubType, [in] REFIID riid, [in,iid_is(riid)] LPVOID pvObject); HRESULT EmptyData(void); HRESULT CopyTo( [in] IMimeBody *pBody); HRESULT GetTransmitInfo( [in,out] LPTRANSMITINFO pTransmitInfo); HRESULT SaveToFile( [in] ENCODINGTYPE ietEncoding, [in] LPCSTR pszFilePath); HRESULT GetHandle( [out] LPHBODY phBody); } [ uuid(fd853cd4-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeMessageTree : IPersistStreamInit { typedef [unique] IMimeMessageTree *LPMIMEMESSAGETREE; const HBODY HBODY_ROOT = (HBODY)-1; typedef enum tagBODYLOCATION { IBL_ROOT, IBL_PARENT, IBL_FIRST, IBL_LAST, IBL_NEXT, IBL_PREVIOUS, } BODYLOCATION; typedef struct tagFINDBODY { LPSTR pszPriType; LPSTR pszSubType; DWORD dwReserved; } FINDBODY, *LPFINDBODY; HRESULT GetMessageSource( [out] IStream **ppStream, [in] DWORD dwFlags); HRESULT GetMessageSize( [out] ULONG *pcbSize, [in] DWORD dwFlags); HRESULT LoadOffsetTable( [in] IStream *pStream); HRESULT SaveOffsetTable( [in] IStream *pStream, [in] DWORD dwFlags); HRESULT GetFlags( [out] DWORD *pdwFlags); HRESULT Commit( [in] DWORD dwFlags); HRESULT HandsOffStorage(); HRESULT BindToObject( [in] const HBODY hBody, [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); HRESULT SaveBody( [in] HBODY hBody, [in] DWORD dwFlags, [in] IStream *pStream); HRESULT InsertBody( [in] BODYLOCATION location, [in] HBODY hPivot, [out] LPHBODY phBody); HRESULT GetBody( [in] BODYLOCATION location, [in] HBODY hPivot, [out] LPHBODY phBody); HRESULT DeleteBody( [in] HBODY hBody, [in] DWORD dwFlags); HRESULT MoveBody( [in] HBODY hBody, [in] BODYLOCATION location); HRESULT CountBodies( [in] HBODY hParent, [in] boolean fRecurse, [out] ULONG *pcBodies); HRESULT FindFirst( [in, out] LPFINDBODY pFindBody, [out] LPHBODY phBody); HRESULT FindNext( [in, out] LPFINDBODY pFindBody, [out] LPHBODY phBody); HRESULT ResolveURL( [in] HBODY hRelated, [in] LPCSTR pszBase, [in] LPCSTR pszURL, [in] DWORD dwFlags, [out] LPHBODY phBody); HRESULT ToMultipart( [in] HBODY hBody, [in] LPCSTR pszSubType, [out] LPHBODY phMultipart); HRESULT GetBodyOffsets( [in] HBODY hBody, [in, out] LPBODYOFFSETS pOffsets); HRESULT GetCharset( [out] LPHCHARSET phCharset); HRESULT SetCharset( [in] HCHARSET hCharset, [in] CSETAPPLYTYPE applytype); HRESULT IsBodyType( [in] HBODY hBody, [in] IMSGBODYTYPE bodytype); HRESULT IsContentType( [in] HBODY hBody, [in] LPCSTR pszPriType, [in] LPCSTR pszSubType); HRESULT QueryBodyProp( [in] HBODY hBody, [in] LPCSTR pszName, [in] LPCSTR pszCriteria, [in] boolean fSubString, [in] boolean fCaseSensitive); HRESULT GetBodyProp( [in] HBODY hBody, [in] LPCSTR pszName, [in] DWORD dwFlags, [in, out] LPPROPVARIANT pValue); HRESULT SetBodyProp( [in] HBODY hBody, [in] LPCSTR pszName, [in] DWORD dwFlags, [in] LPCPROPVARIANT pValue); HRESULT DeleteBodyProp( [in] HBODY hBody, [in] LPCSTR pszName); HRESULT SetOption( [in] const TYPEDID oid, [in] LPCPROPVARIANT pValue); HRESULT GetOption( [in] const TYPEDID oid, [in, out] LPPROPVARIANT pValue); } [ uuid(fd853cd5-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeMessage : IMimeMessageTree { typedef [unique] IMimeMessage *LPMIMEMESSAGE; typedef DWORD TEXTTYPE; typedef enum tagIMSGFLAGS { IMF_ATTACHMENTS = 0x00000001, IMF_MULTIPART = 0x00000002, IMF_SUBMULTIPART = 0x00000004, IMF_MIME = 0x00000008, IMF_HTML = 0x00000010, IMF_PLAIN = 0x00000020, IMF_PARTIAL = 0x00000040, IMF_SIGNED = 0x00000080, IMF_ENCRYPTED = 0x00000100, IMF_TNEF = 0x00000200, IMF_MHTML = 0x00000400, IMF_SECURE = 0x00000800, IMF_TEXT = 0x00001000, IMF_CSETTAGGED = 0x00002000, IMF_NEWS = 0x00004000, IMF_VOICEMAIL = 0x00008000, IMF_HASVCARD = 0x00010000, IMF_RFC1154 = 0x00020000, } IMSGFLAGS; typedef enum tagIMSGPRIORITY { IMSG_PRI_LOW = 5, IMSG_PRI_NORMAL = 3, IMSG_PRI_HIGH = 1, } IMSGPRIORITY; cpp_quote("#define WPF_HTML 0x00000001") cpp_quote("#define WPF_AUTOINLINE 0x00000002") cpp_quote("#define WPF_SLIDESHOW 0x00000004") cpp_quote("#define WPF_ATTACHLINKS 0x00000008") cpp_quote("#define WPF_IMAGESONLY 0x00000010") cpp_quote("#define WPF_NOMETACHARSET 0x00000020") typedef struct tagWEPAGEOPTIONS { DWORD cbSize; DWORD dwFlags; DWORD dwDelay; WCHAR wchQuote; } WEBPAGEOPTIONS, *LPWEBPAGEOPTIONS; cpp_quote("#define TXT_PLAIN 1") cpp_quote("#define TXT_HTML 2") HRESULT CreateWebPage( [in] IStream *pRootStm, [in] LPWEBPAGEOPTIONS pOptions, [in] IMimeMessageCallback *pCallback, [out] IMoniker **ppMoniker); HRESULT GetProp( [in] LPCSTR pszName, [in] DWORD dwFlags, [in,out] LPPROPVARIANT pValue); HRESULT SetProp( [in] LPCSTR pszName, [in] DWORD dwFlags, [in] LPCPROPVARIANT pValue); HRESULT DeleteProp( [in] LPCSTR pszName); HRESULT QueryProp( [in] LPCSTR pszName, [in] LPCSTR pszCriteria, [in] boolean fSubString, [in] boolean fCaseSensitive); HRESULT GetTextBody( [in] DWORD dwTxtType, [in] ENCODINGTYPE ietEncoding, [out] IStream **pStream, [out] LPHBODY phBody); HRESULT SetTextBody( [in] DWORD dwTxtType, [in] ENCODINGTYPE ietEncoding, [in] HBODY hAlternative, [in] IStream *pStream, [out] LPHBODY phBody); HRESULT AttachObject( [in] REFIID riid, [in, iid_is(riid)] void *pvObject, [out] LPHBODY phBody); HRESULT AttachFile( [in] LPCSTR pszFilePath, [in] IStream *pstmFile, [out] LPHBODY phBody); HRESULT AttachURL( [in] LPCSTR pszBase, [in] LPCSTR pszURL, [in] DWORD dwFlags, [in] IStream *pstmURL, [out] LPSTR *ppszCIDURL, [out] LPHBODY phBody); HRESULT GetAttachments( [out] ULONG *pcAttach, [out] LPHBODY *pprghAttach); HRESULT GetAddressTable( [out] IMimeAddressTable **ppTable); HRESULT GetSender( [in, out] LPADDRESSPROPS pAddress); HRESULT GetAddressTypes( [in] DWORD dwAdrTypes, [in] DWORD dwProps, [in, out] LPADDRESSLIST pList); HRESULT GetAddressFormat( [in] DWORD dwAdrTypes, [in] ADDRESSFORMAT format, [out] LPSTR *ppszFormat); HRESULT EnumAddressTypes( [in] DWORD dwAdrTypes, [in] DWORD dwProps, [out] IMimeEnumAddressTypes **ppEnum); HRESULT SplitMessage( [in] ULONG cbMaxPart, [out] IMimeMessageParts **ppParts); HRESULT GetRootMoniker( [out] IMoniker **ppMoniker); } [ uuid(761aa741-7bda-11d1-8aa9-00c04fb951f3), object ] interface IMimeMessageCallback : IUnknown { HRESULT OnWebPageSplitter( [in] DWORD cInlined, [in] IStream *ppStream); } [ uuid(de4ad8da-555f-11d1-8dd0-00c04fb951f9), object ] interface IPersistMime : IPersist { /* FIXME: fill this in */ } [ uuid(c558834f-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeMessageParts : IUnknown { /* FIXME: fill this in */ } [ uuid(c558834d-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeEnumHeaderRows : IUnknown { typedef struct tagENUMHEADERROW { HHEADERROW hRow; LPSTR pszHeader; LPSTR pszData; ULONG cchData; DWORD_PTR dwReserved; } ENUMHEADERROW, *LPENUMHEADERROW; /* FIXME: fill this in */ } [ uuid(fd853cee-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeEnumProperties : IUnknown { typedef [unique] IMimeEnumProperties *LPMIMEENUMPROPERTIES; typedef struct tagENUMPROPERTY { LPSTR pszName; HHEADERROW hRow; DWORD dwPropId; } ENUMPROPERTY, *LPENUMPROPERTY; HRESULT Next( [in] ULONG cFetch, [in, out] LPENUMPROPERTY prgProp, [out] ULONG *pcFetched); HRESULT Skip( [in] ULONG cItems); HRESULT Reset(void); HRESULT Clone( [out] IMimeEnumProperties **ppEnum); HRESULT Count( [out] ULONG *pcItems); } [ uuid(c5588354-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeEnumAddressTypes : IUnknown { /* FIXME: fill this in */ } [ uuid(c5588350-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeEnumMessageParts : IUnknown { /* FIXME: fill this in */ } [ uuid(64577981-86d7-11d1-bdfc-00c04fa31009), object ] interface IHashTable : IUnknown { /* FIXME: fill this in */ } [ uuid(c5588351-7f86-11d0-8252-00c04fd85ab4), object ] interface IMimeAllocator : IMalloc { typedef [unique] IMimeAllocator *LPMIMEALLOCATOR; HRESULT FreeParamInfoArray( [in] ULONG cParams, [in] LPMIMEPARAMINFO prgParam, [in] boolean fFreeArray); HRESULT FreeAddressList( [in,out] LPADDRESSLIST pList); HRESULT FreeAddressProps( [in,out] LPADDRESSPROPS pAddress); HRESULT ReleaseObjects( [in] ULONG cObjects, [in] IUnknown **prgpUnknown, [in] boolean fFreeArray); HRESULT FreeEnumHeaderRowArray( [in] ULONG cRows, [in] LPENUMHEADERROW prgRow, [in] boolean fFreeArray); HRESULT FreeEnumPropertyArray( [in] ULONG cProps, [in] LPENUMPROPERTY prgProp, [in] boolean fFreeArray); HRESULT FreeThumbprint( [in] THUMBBLOB *pthumbprint); HRESULT PropVariantClear( [in] LPPROPVARIANT pProp); } [ uuid(feceaffd-c441-11d1-960e-00c04fbd7c09), object ] interface IMimeObjResolver : IUnknown { /* FIXME: fill this in */ } [ uuid(b0d17fc2-7bc4-11d1-bdfa-00c04fa31009), object ] interface IFontCache : IUnknown { /* FIXME: fill this in */ } [ uuid(b0d17fc5-7bc4-11d1-bdfa-00c04fa31009), object ] interface IFontCacheNotify : IUnknown { /* FIXME: fill this in */ } [ uuid(70183210-7b36-11d2-8c12-00c04fa31009), object ] interface IMimeEditTag : IUnknown { /* FIXME: fill this in */ } [ uuid(d09ee528-7b38-11d2-8c12-00c04fa31009), object ] interface IMimeEditTagCollection : IUnknown { /* FIXME: fill this in */ } [ uuid(ba715ae0-a740-11d2-8b22-0080c76b34c6), local ] interface IMimeSecurityCallback : IUnknown { /* FIXME: fill this in */ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_UNKNOWN 0") cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYTRANS 1") cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYAGREE 2") cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_MAIL_LIST 3") cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_CERTIFICATE 0") cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_KEYTRANS 1") cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_PROVIDER 2") cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_EPHEMERAL_KEYAGREE 3") cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_STATIC_KEYAGREE 4") cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_CERTIFICATE 0") cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_ISSUERSERIAL 1") cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_KEY_ID 2") } } cpp_quote("#ifdef __cplusplus") cpp_quote(" extern \"C\" {") cpp_quote("#endif") cpp_quote("") cpp_quote("HRESULT WINAPI MimeOleSetCompatMode(DWORD);") cpp_quote("HRESULT WINAPI MimeOleContentTypeFromUrl(LPCSTR,LPCSTR,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleParseMhtmlUrl(LPSTR,LPSTR*,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleObjectFromUrl(LPCSTR,BOOL,REFIID,LPVOID*,IUnknown**);") cpp_quote("HRESULT WINAPI MimeOleObjectFromMoniker(BINDF,IMoniker*,IBindCtx*,REFIID,LPVOID*,IMoniker**);") cpp_quote("HRESULT WINAPI MimeOleCombineURL(LPCSTR,ULONG,LPCSTR,ULONG,BOOL,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleGetSubjectFileName(IMimePropertySet*,ULONG*,ULONG*,LPSTR,ULONG);") cpp_quote("HRESULT WINAPI MimeOleCreateWebDocument(LPCSTR,LPCSTR,IMimeWebDocument**);") cpp_quote("HRESULT WINAPI MimeOleGetRelatedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);") cpp_quote("HRESULT WINAPI MimeOleGetMixedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);") cpp_quote("HRESULT WINAPI MimeOleGetAlternativeSection(IMimeMessageTree*,LPHBODY,boolean*);") cpp_quote("HRESULT WINAPI MimeOleGenerateCID(LPSTR,ULONG,boolean);") cpp_quote("HRESULT WINAPI MimeOleGenerateMID(LPSTR,ULONG,boolean);") cpp_quote("HRESULT WINAPI MimeOleCreateByteStream(IStream**);") cpp_quote("HRESULT WINAPI MimeOlGetPropertySchema(IMimePropertySchema**);") cpp_quote("HRESULT WINAPI MimeOleQueryString(LPCSTR,LPCSTR,boolean,boolean);") cpp_quote("HRESULT WINAPI MimeOleGetPropA(IMimePropertySet*,LPCSTR,DWORD,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleSetPropA(IMimePropertySet*,LPCSTR,DWORD,LPCSTR);") cpp_quote("HRESULT WINAPI MimeOleGetPropW(IMimePropertySet*,LPCSTR,DWORD,LPWSTR*);") cpp_quote("HRESULT WINAPI MimeOleSetPropW(IMimePropertySet*,LPCSTR,DWORD,LPCWSTR);") cpp_quote("HRESULT WINAPI MimeOleGetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleSetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCSTR);") cpp_quote("HRESULT WINAPI MimeOleGetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPWSTR*);") cpp_quote("HRESULT WINAPI MimeOleSetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCWSTR);") cpp_quote("HRESULT WINAPI MimeOleCreateHeaderTable(IMimeHeaderTable**);") cpp_quote("HRESULT WINAPI MimeOleVariantFree(LPPROPVARIANT);") cpp_quote("HRESULT WINAPI MimeOleVariantCopy(LPPROPVARIANT,LPPROPVARIANT);") cpp_quote("HRESULT WINAPI MimeOleGetExtClassId(LPCSTR,LPCLSID);") cpp_quote("HRESULT WINAPI MimeOleEncodeHeader(HCHARSET,LPPROPVARIANT,LPSTR*,LPRFC1522INFO);") cpp_quote("HRESULT WINAPI MimeOleDecodeHeader(HCHARSET,LPCSTR,LPPROPVARIANT,LPRFC1522INFO);") cpp_quote("HRESULT WINAPI MimeOleRfc1522Decode(LPCSTR,LPSTR,ULONG,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleRfc1522Encode(LPCSTR,HCHARSET,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleGetInternat(IMimeInternational**);") cpp_quote("HRESULT WINAPI MimeOleFindCharset(LPCSTR,LPHCHARSET);") cpp_quote("HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET,LPINETCSETINFO);") cpp_quote("HRESULT WINAPI MimeOleGetCodePageInfo(HCHARSET,LPCODEPAGEINFO);") cpp_quote("HRESULT WINAPI MimeOleGetDefaultCharset(LPHCHARSET);") cpp_quote("HRESULT WINAPI MimeOleSetDefaultCharset(HCHARSET);") cpp_quote("HRESULT WINAPI MimeOleGetCodePageCharset(CODEPAGEID,CHARSETTYPE,LPHCHARSET);") cpp_quote("HRESULT WINAPI MimeOleCreateVirtualStream(IStream**);") cpp_quote("HRESULT WINAPI MimeOleOpenFileStream(LPCSTR,DWORD,DWORD,IStream**);") cpp_quote("HRESULT WINAPI MimeOleIsTnefStream(IStream*);") cpp_quote("HRESULT WINAPI MimeOleGenerateFileName(LPCSTR,LPCSTR,LPCSTR,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleGetFileExtension(LPCSTR,LPSTR,ULONG);") cpp_quote("HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity**);") cpp_quote("HRESULT WINAPI MimeOleInetDateToFileTime(LPCSTR,LPFILETIME);") cpp_quote("HRESULT WINAPI MimeOleFileTimeToInetDate(LPFILETIME,LPSTR,ULONG);") cpp_quote("HRESULT WINAPI MimeOleCreateMessageParts(IMimeMessageParts**);") cpp_quote("HRESULT WINAPI MimeOleGetAllocator(IMimeAllocator**);") cpp_quote("HRESULT WINAPI MimeOleParseRfc822Address(DWORD,ENCODINGTYPE,LPCSTR,LPADDRESSLIST);") cpp_quote("HRESULT WINAPI MimeOleCreateMessage(IUnknown*,IMimeMessage**);") cpp_quote("HRESULT WINAPI MimeOleMergePartialHeaders(IStream*,IStream*);") cpp_quote("HRESULT WINAPI MimeOleEscapeString(CODEPAGEID,LPCSTR,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleGetExtContentType(LPCSTR,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleGetContentTypeExt(LPCSTR,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleGetFileInfo(LPSTR,LPSTR*,LPSTR*,LPSTR*,LPSTR*,LPSTR*);") cpp_quote("HRESULT WINAPI MimeOleCreateBody(IMimeBody**);") cpp_quote("HRESULT WINAPI MimeOleCreatePropertySet(IUnknown*,IMimePropertySet**);") cpp_quote("HRESULT WINAPI MimeOleCreateMessageTree(IUnknown*,IMimeMessageTree**);") cpp_quote("HRESULT WINAPI MimeOleGetCertsFromThumbprints(THUMBBLOB*,X509CERTRESULT*,const HCERTSTORE*,DWORD);") cpp_quote("HRESULT WINAPI MimeOleSplitMessage(IMimeMessage*,ULONG,IMimeMessageParts**);") cpp_quote("HRESULT WINAPI MimeOleClearDirtyTree(IMimeMessageTree*);") cpp_quote("HRESULT WINAPI MimeOleConvertEnrichedToHTML(CODEPAGEID,IStream*,IStream*);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapsToDlg(LPBYTE,DWORD,DWORD,PCX509CERT*,HWND,DWORD,DWORD,DWORD);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapsFromDlg(HWND,DWORD,DWORD,DWORD,LPBYTE,DWORD*);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapInit(LPBYTE,DWORD,LPVOID*);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapAddSMimeCap(LPBYTE,DWORD,LPVOID);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapAddCert(LPBYTE,DWORD,BOOL,LPVOID);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapGetEncAlg(LPVOID,LPBYTE,DWORD*,DWORD*);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapGetHashAlg(LPVOID,LPBYTE,DWORD*,DWORD*);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapRelease(LPVOID);") cpp_quote("HRESULT WINAPI MimeOleAlgNameFromSMimeap(LPBYTE,DWORD,LPCSTR*);") cpp_quote("HRESULT WINAPI MimeOleAlgStrengthFromSMimeCap(LPBYTE,DWORD,BOOL,DWORD*);") cpp_quote("HRESULT WINAPI MimeOleSMimeCapsFull(LPVOID,BOOL,BOOL,LPBYTE,DWORD*);") cpp_quote("HRESULT WINAPI MimeOleCreateHashTable(DWORD,BOOL,IHashTable**);") cpp_quote("HRESULT WINAPI MimeOleStripHeaders(IMimeMessage*,HBODY,LPCSTR,LPCSTR,IStream**);") cpp_quote("HRESULT WINAPI MimeEditViewSource(HWND,IMimeMessage*);") cpp_quote("HRESULT WINAPI MimeEditIsSafeToRun(HWND,LPCSTR);") cpp_quote("HRESULT WINAPI MimeEditVerifyTrust(HWND,LPCSTR,LPCSTR);") cpp_quote("HRESULT WINAPI MimeEditCreateMimeDocument(IUnknown*,IMimeMessage*,DWORD,IMimeMessage**);") cpp_quote("HRESULT WINAPI MimeEditGetBackgroundImageUrl(IUnknown*,BSTR*);") cpp_quote("HRESULT WINAPI MimeEditDocumentFromStream(IStream*,REFIID,void**);") cpp_quote("HRESULT WINAPI MimeOleGetPropertySchema(IMimePropertySchema**);") cpp_quote("HRESULT WINAPI MimeGetAddressFormatW(REFIID,void*,DWORD,ADDRESSFORMAT,WCHAR**);") cpp_quote("#ifdef __cplusplus") cpp_quote("}") cpp_quote("#endif") ================================================ FILE: wine/windows/minmax.h ================================================ /* * min/max macros * * Copyright 2001 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MINMAX_H #define __WINE_MINMAX_H #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif #endif /* __WINE_MINMAX_H */ ================================================ FILE: wine/windows/mlang.idl ================================================ /* * Copyright (C) 2004 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; #endif interface IStream; cpp_quote("#define CPIOD_PEEK 0x40000000") cpp_quote("#define CPIOD_FORCE_PROMPT 0x80000000") [ object, uuid(359f3443-bd4a-11d0-b188-00aa0038c969), pointer_default(unique) ] interface IMLangCodePages : IUnknown { HRESULT GetCharCodePages( [in] WCHAR chSrc, [out] DWORD *pdwCodePages); HRESULT GetStrCodePages( [in, size_is(cchSrc)] const WCHAR *pszSrc, [in] LONG cchSrc, [in] DWORD dwPriorityCodePages, [out] DWORD *pdwCodePages, [out] LONG *pcchCodePages); HRESULT CodePageToCodePages( [in] UINT uCodePage, [out] DWORD *pdwCodePages); HRESULT CodePagesToCodePage( [in] DWORD dwCodePages, [in] UINT uDefaultCodePage, [out] UINT *puCodePage); } [ object, uuid(359f3441-bd4a-11d0-b188-00aa0038c969), pointer_default(unique) ] interface IMLangFontLink : IMLangCodePages { HRESULT GetFontCodePages( [in] HDC hDC, [in] HFONT hFont, [out] DWORD *pdwCodePages ); HRESULT MapFont( [in] HDC hDC, [in] DWORD dwCodePages, [in] HFONT hSrcFont, [out] HFONT *phDestFont); HRESULT ReleaseFont( [in] HFONT hFont); HRESULT ResetFontMapping(); } [ object, uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1), pointer_default(unique) ] interface IEnumScript : IUnknown { const USHORT MAX_SCRIPT_NAME = 48; const USHORT MAX_MIMEFACE_NAME = 32; typedef BYTE SCRIPT_ID; typedef __int64 SCRIPT_IDS; typedef enum tagSCRIPTCONTF { sidDefault = 0, sidMerge = sidDefault + 1, sidAsciiSym = sidMerge + 1, sidAsciiLatin = sidAsciiSym + 1, sidLatin = sidAsciiLatin + 1, sidGreek = sidLatin + 1, sidCyrillic = sidGreek + 1, sidArmenian = sidCyrillic + 1, sidHebrew = sidArmenian + 1, sidArabic = sidHebrew + 1, sidDevanagari = sidArabic + 1, sidBengali = sidDevanagari + 1, sidGurmukhi = sidBengali + 1, sidGujarati = sidGurmukhi + 1, sidOriya = sidGujarati + 1, sidTamil = sidOriya + 1, sidTelugu = sidTamil + 1, sidKannada = sidTelugu + 1, sidMalayalam = sidKannada + 1, sidThai = sidMalayalam + 1, sidLao = sidThai + 1, sidTibetan = sidLao + 1, sidGeorgian = sidTibetan + 1, sidHangul = sidGeorgian + 1, sidKana = sidHangul + 1, sidBopomofo = sidKana + 1, sidHan = sidBopomofo + 1, sidEthiopic = sidHan + 1, sidCanSyllabic = sidEthiopic + 1, sidCherokee = sidCanSyllabic + 1, sidYi = sidCherokee + 1, sidBraille = sidYi + 1, sidRunic = sidBraille + 1, sidOgham = sidRunic + 1, sidSinhala = sidOgham + 1, sidSyriac = sidSinhala + 1, sidBurmese = sidSyriac + 1, sidKhmer = sidBurmese + 1, sidThaana = sidKhmer + 1, sidMongolian = sidThaana + 1, sidUserDefined = sidMongolian + 1, sidLim = sidUserDefined + 1, sidFEFirst = sidHangul, sidFELast = sidHan } SCRIPTCONTF; typedef enum tagSCRIPTFONTCONTF { SCRIPTCONTF_FIXED_FONT = 0x1, SCRIPTCONTF_PROPORTIONAL_FONT = 0x2, SCRIPTCONTF_SCRIPT_USER = 0x10000, SCRIPTCONTF_SCRIPT_HIDE = 0x20000, SCRIPTCONTF_SCRIPT_SYSTEM = 0x40000 } SCRIPTFONTCONTF; typedef struct tagSCRIPFONTINFO { SCRIPT_IDS scripts; WCHAR wszFont[MAX_MIMEFACE_NAME]; } SCRIPTFONTINFO, *PSCRIPTFONTINFO; typedef struct tagSCRIPTINFO { SCRIPT_ID ScriptId; UINT uiCodePage; WCHAR wszDescription[MAX_SCRIPT_NAME]; WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME]; WCHAR wszProportionalFont[MAX_MIMEFACE_NAME]; } SCRIPTINFO, *PSCRIPTINFO; HRESULT Clone( [out] IEnumScript **ppEnum); HRESULT Next( [in] ULONG celt, [out] PSCRIPTINFO rgelt, [out] ULONG *pceltFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG celt); } [ object, uuid(dccfc162-2b38-11d2-b7ec-00c04f8f5d9a), pointer_default(unique) ] interface IMLangFontLink2 : IMLangCodePages { typedef struct tagUNICODERANGE { WCHAR wcFrom; WCHAR wcTo; } UNICODERANGE; typedef [unique] IMLangFontLink2 *PMLANGFONTLINK2; HRESULT GetFontCodePages( [in] HDC hDC, [in] HFONT hFont, [out] DWORD *pdwCodePages ); HRESULT ReleaseFont( [in] HFONT hFont); HRESULT ResetFontMapping(); HRESULT MapFont( [in] HDC hDC, [in] DWORD dwCodePages, [in] WCHAR chSrc, [out] HFONT *pFont); HRESULT GetFontUnicodeRanges( [in] HDC hDC, [in,out] UINT *puiRanges, [out] UNICODERANGE* pUranges); HRESULT GetScriptFontInfo( [in] SCRIPT_ID sid, [in] DWORD dwFlags, [in,out] UINT *puiFonts, [out] SCRIPTFONTINFO* pScriptFont); HRESULT CodePageToScriptID( [in] UINT uiCodePage, [out] SCRIPT_ID *pSid); } [ object, uuid(c04d65ce-b70d-11d0-b188-00aa0038c969), pointer_default(unique) ] interface IMLangString : IUnknown { #ifdef NEWMLSTR HRESULT LockMLStr( [in] LONG lPos, [in] DWORD dwFlags, [out] DWORD* pdwCookie, [out] LONG* plActualPos, [out] LONG* plActualLen); HRESULT UnlockMLStr( [in] DWORD dwCookie); #else HRESULT Sync( [in] BOOL fNoAccess); #endif HRESULT GetLength( [out, retval] LONG* plLen); HRESULT SetMLStr( [in] LONG lDestPos, [in] LONG lDestLen, [in] IUnknown *pSrcMLStr, [in] LONG lSrcPos, [in] LONG lSrcLen); #ifdef NEWMLSTR HRESULT RegisterAttr( [in] IUnknown *pUnk, [out] DWORD* pdwCookie); HRESULT UnregisterAttr( [in] DWORD dwCookie); HRESULT EnumAttr( [out] IEnumUnknown **ppEnumUnk); HRESULT FindAttr( [in] REFIID riid, [in] LPARAM lParam, [out] IUnknown **ppUnk); #else HRESULT GetMLStr( [in] LONG lSrcPos, [in] LONG lSrcLen, [in] IUnknown *pUnkOuter, [in] DWORD dwClsContext, [in] const IID* piid, [out] IUnknown** ppDestMLStr, [out] LONG* plDestPos, [out] LONG* plDestLen); #endif } [ object, uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969), pointer_default(unique) ] interface IMLangLineBreakConsole : IUnknown { HRESULT BreakLineML( [in] IMLangString* pSrcMLStr, [in] LONG lSrcPos, [in] LONG lSrcLen, [in] LONG cMinColumns, [in] LONG cMaxColumns, [out] LONG* plLineLen, [out] LONG* plSkipLen); HRESULT BreakLineW( [in] LCID locale, [in, size_is(cchSrc)] const WCHAR* pszSrc, [in] LONG cchSrc, [in] LONG cMaxColumns, [out] LONG* pcchLine, [out] LONG* pcchSkip ); HRESULT BreakLineA( [in] LCID locale, [in] UINT uCodePage, [in, size_is(cchSrc)] const CHAR* pszSrc, [in] LONG cchSrc, [in] LONG cMaxColumns, [out] LONG* pcchLine, [out] LONG* pcchSkip); } [ object, uuid(275c23e3-3747-11d0-9fea-00aa003f8646), pointer_default(unique) ] interface IEnumCodePage : IUnknown { const USHORT MAX_MIMECP_NAME = 64; const USHORT MAX_MIMECSET_NAME = 50; typedef enum tagMIMECONTF { MIMECONTF_MAILNEWS = 0x00000001, MIMECONTF_BROWSER = 0x00000002, MIMECONTF_MINIMAL = 0x00000004, MIMECONTF_IMPORT = 0x00000008, MIMECONTF_SAVABLE_MAILNEWS = 0x00000100, MIMECONTF_SAVABLE_BROWSER = 0x00000200, MIMECONTF_EXPORT = 0x00000400, MIMECONTF_PRIVCONVERTER = 0x00010000, MIMECONTF_VALID = 0x00020000, MIMECONTF_VALID_NLS = 0x00040000, MIMECONTF_MIME_IE4 = 0x10000000, MIMECONTF_MIME_LATEST = 0x20000000, MIMECONTF_MIME_REGISTRY = 0x40000000 } MIMECONTF; typedef struct tagMIMECPINFO { DWORD dwFlags; UINT uiCodePage; UINT uiFamilyCodePage; WCHAR wszDescription[MAX_MIMECP_NAME]; WCHAR wszWebCharset[MAX_MIMECSET_NAME]; WCHAR wszHeaderCharset[MAX_MIMECSET_NAME]; WCHAR wszBodyCharset[MAX_MIMECSET_NAME]; WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME]; WCHAR wszProportionalFont[MAX_MIMEFACE_NAME]; BYTE bGDICharset; } MIMECPINFO, *PMIMECPINFO; typedef struct tagMIMECSETINFO { UINT uiCodePage; UINT uiInternetEncoding; WCHAR wszCharset[MAX_MIMECSET_NAME]; } MIMECSETINFO, *PMIMECSETINFO; HRESULT Clone( [out] IEnumCodePage **ppEnum); HRESULT Next( [in] ULONG celt, [out] PMIMECPINFO rgelt, [out] ULONG *pceltFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG celt); } [ object, uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f), pointer_default(unique) ] interface IMLangConvertCharset : IUnknown { typedef enum tagMLCONVCHARF { MLCONVCHARF_AUTODETECT = 1, MLCONVCHARF_ENTITIZE = 2, MLCONVCHARF_NCR_ENTITIZE = 2, MLCONVCHARF_NAME_ENTITIZE = 4, MLCONVCHARF_USEDEFCHAR = 8, MLCONVCHARF_NOBESTFITCHARS = 16, MLCONVCHARF_DETECTJPN = 32 } MLCONVCHAR; typedef enum tagMLCPF { MLDETECTF_MAILNEWS = 0x0001, MLDETECTF_BROWSER = 0x0002, MLDETECTF_VALID = 0x0004, MLDETECTF_VALID_NLS = 0x0008, MLDETECTF_PRESERVE_ORDER = 0x0010, MLDETECTF_PREFERRED_ONLY = 0x0020, MLDETECTF_FILTER_SPECIALCHAR = 0x0040, MLDETECTF_EURO_UTF8 = 0x0080 } MLCP; HRESULT Initialize( [in] UINT uiSrcCodePage, [in] UINT uiDstCodePage, [in] DWORD dwProperty); HRESULT GetSourceCodePage( [out] UINT *puiSrcCodePage); HRESULT GetDestinationCodePage( [out] UINT *puiDstCodePage); HRESULT GetProperty( [out] DWORD *pdwProperty); HRESULT DoConversion( [in] BYTE *pSrcStr, [in,out] UINT *pcSrcSize, [in] BYTE *pDstStr, [in,out] UINT *pcDstSize); HRESULT DoConversionToUnicode( [in] CHAR *pSrcStr, [in,out] UINT *pcSrcSize, [in] WCHAR *pDstStr, [in,out] UINT *pcDstSize); HRESULT DoConversionFromUnicode( [in] WCHAR *pSrcStr, [in,out] UINT *pcSrcSize, [in] CHAR *pDstStr, [in,out] UINT *pcDstSize); } [ uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f) ] coclass CMLangConvertCharset { [default] interface IMLangConvertCharset; } [ object, uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f), pointer_default(unique) ] interface IEnumRfc1766 : IUnknown { const USHORT MAX_RFC1766_NAME = 6; const USHORT MAX_LOCALE_NAME = 32; typedef struct tagRFC1766INFO { LCID lcid; WCHAR wszRfc1766[MAX_RFC1766_NAME]; WCHAR wszLocaleName[MAX_LOCALE_NAME]; } RFC1766INFO, *PRFC1766INFO; HRESULT Clone( [out] IEnumRfc1766 **ppEnum); HRESULT Next( [in] ULONG celt, [out] PRFC1766INFO rgelt, [out] ULONG *pceltFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG celt); } [ object, uuid(275c23e1-3747-11d0-9fea-00aa003f8646), pointer_default(unique) ] interface IMultiLanguage : IUnknown { HRESULT GetNumberOfCodePageInfo( [out] UINT *pcCodePage); HRESULT GetCodePageInfo( [in] UINT uiCodePage, [out] PMIMECPINFO pCodePageInfo); HRESULT GetFamilyCodePage( [in] UINT uiCodePage, [out] UINT *puiFamilyCodePage); HRESULT EnumCodePages( [in] DWORD grfFlags, [out] IEnumCodePage **ppEnumCodePage); HRESULT GetCharsetInfo( [in] BSTR Charset, [in] PMIMECSETINFO pCharsetInfo); HRESULT IsConvertible( [in] DWORD dwSrcEncoding, [in] DWORD dwDstEncoding); HRESULT ConvertString( [in,out] DWORD *pdwMode, [in] DWORD dwSrcEncoding, [in] DWORD dwDstEncoding, [in] BYTE *pSrcStr, [in,out] UINT *pcSrcSize, [in] BYTE *pDstStr, [in,out] UINT *pcDstSize); HRESULT ConvertStringToUnicode( [in,out] DWORD *pdwMode, [in] DWORD dwEncoding, [in] CHAR *pSrcStr, [in,out] UINT *pcSrcSize, [in] WCHAR *pDstStr, [in,out] UINT *pcDstSize); HRESULT ConvertStringFromUnicode( [in,out] DWORD *pdwMode, [in] DWORD dwEncoding, [in] WCHAR *pSrcStr, [in,out] UINT *pcSrcSize, [in] CHAR *pDstStr, [in,out] UINT *pcDstSize); HRESULT ConvertStringReset(); HRESULT GetRfc1766FromLcid( [in] LCID Locale, [out] BSTR *pbstrRfc1766); HRESULT GetLcidFromRfc1766( [out] LCID *pLocale, [in] BSTR bstrRfc1766); HRESULT EnumRfc1766( [out] IEnumRfc1766 **ppEnumRfc1766); HRESULT GetRfc1766Info( [in] LCID Locale, [out] PRFC1766INFO pRfc1766Info); HRESULT CreateConvertCharset( [in] UINT uiSrcCodePage, [in] UINT uiDstCodePage, [in] DWORD dwProperty, [out] IMLangConvertCharset **ppMLangConvertCharset); } [ object, uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a), pointer_default(unique) ] interface IMultiLanguage2 : IUnknown { typedef struct tagDetectEncodingInfo { UINT nLangID; UINT nCodePage; INT nDocPercent; INT nConfidence; } DetectEncodingInfo, *pDetectEncodingInfo; HRESULT GetNumberOfCodePageInfo( [out] UINT *pcCodePage); HRESULT GetCodePageInfo( [in] UINT uiCodePage, [in] LANGID LangId, [out] PMIMECPINFO pCodePageInfo); HRESULT GetFamilyCodePage( [in] UINT uiCodePage, [out] UINT *puiFamilyCodePage); HRESULT EnumCodePages( [in] DWORD grfFlags, [in] LANGID LangId, [out] IEnumCodePage **ppEnumCodePage); HRESULT GetCharsetInfo( [in] BSTR Charset, [in] PMIMECSETINFO pCharsetInfo); HRESULT IsConvertible( [in] DWORD dwSrcEncoding, [in] DWORD dwDstEncoding); HRESULT ConvertString( [in,out] DWORD *pdwMode, [in] DWORD dwSrcEncoding, [in] DWORD dwDstEncoding, [in] BYTE *pSrcStr, [in,out] UINT *pcSrcSize, [in] BYTE *pDstStr, [in,out] UINT *pcDstSize); HRESULT ConvertStringToUnicode( [in,out] DWORD *pdwMode, [in] DWORD dwEncoding, [in] CHAR *pSrcStr, [in,out] UINT *pcSrcSize, [in] WCHAR *pDstStr, [in,out] UINT *pcDstSize); HRESULT ConvertStringFromUnicode( [in,out] DWORD *pdwMode, [in] DWORD dwEncoding, [in] WCHAR *pSrcStr, [in,out] UINT *pcSrcSize, [in] CHAR *pDstStr, [in,out] UINT *pcDstSize); HRESULT ConvertStringReset(); HRESULT GetRfc1766FromLcid( [in] LCID Locale, [out] BSTR *pbstrRfc1766); HRESULT GetLcidFromRfc1766( [out] LCID *pLocale, [in] BSTR bstrRfc1766); HRESULT EnumRfc1766( [in] LANGID LangId, [out] IEnumRfc1766 **ppEnumRfc1766); HRESULT GetRfc1766Info( [in] LCID Locale, [in] LANGID LangId, [out] PRFC1766INFO pRfc1766Info); HRESULT CreateConvertCharset( [in] UINT uiSrcCodePage, [in] UINT uiDstCodePage, [in] DWORD dwProperty, [out] IMLangConvertCharset **ppMLangConvertCharset); HRESULT ConvertStringInIStream( [in,out] DWORD *pdwMode, [in] DWORD dwFlag, [in] WCHAR *lpFallBack, [in] DWORD dwSrcEncoding, [in] DWORD dwDstEncoding, [in] IStream *pstmIn, [in] IStream *pstmOut); HRESULT ConvertStringToUnicodeEx( [in,out] DWORD *pdwMode, [in] DWORD dwEncoding, [in] CHAR *pSrcStr, [in,out] UINT *pcSrcSize, [in] WCHAR *pDstStr, [in,out] UINT *pcDstSize, [in] DWORD dwFlag, [in] WCHAR *lpFallBack); HRESULT ConvertStringFromUnicodeEx( [in,out] DWORD *pdwMode, [in] DWORD dwEncoding, [in] WCHAR *pSrcStr, [in,out] UINT *pcSrcSize, [in] CHAR *pDstStr, [in,out] UINT *pcDstSize, [in] DWORD dwFlag, [in] WCHAR *lpFallBack); HRESULT DetectCodepageInIStream( [in] DWORD dwFlag, [in] DWORD dwPrefWinCodePage, [in] IStream *pstmIn, [in,out] DetectEncodingInfo *lpEncoding, [in,out] INT *pnScores); HRESULT DetectInputCodepage( [in] DWORD dwFlag, [in] DWORD dwPrefWinCodePage, [in] CHAR *pSrcStr, [in,out] INT *pcSrcSize, [in,out] DetectEncodingInfo *lpEncoding, [in,out] INT *pnScores); HRESULT ValidateCodePage( [in] UINT uiCodePage, [in] HWND hwnd); HRESULT GetCodePageDescription( [in] UINT uiCodePage, [in] LCID lcid, [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr, [in] int cchWideChar); HRESULT IsCodePageInstallable( [in] UINT uiCodePage); HRESULT SetMimeDBSource( [in] MIMECONTF dwSource); HRESULT GetNumberOfScripts( [out] UINT *pnScripts); HRESULT EnumScripts( [in] DWORD dwFlags, [in] LANGID LangId, [out] IEnumScript **ppEnumScript); HRESULT ValidateCodePageEx( /* undocumented on MSDN */ [in] UINT uiCodePage, [in] HWND hwnd, [in] DWORD dwfIODControl); } [ object, uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04), pointer_default(unique) ] interface IMultiLanguage3 : IMultiLanguage2 { typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3; HRESULT DetectOutboundCodePage( [in] DWORD dwFlags, [in] LPCWSTR lpWideCharStr, [in] UINT cchWideChar, [in] UINT *puiPreferredCodePages, [in] UINT nPreferredCodePages, [in] UINT *puiDetectedCodePages, [in, out] UINT *pnDetectedCodePages, [in] WCHAR *lpSpecialChar); HRESULT DetectOutboundCodePageInIStream( [in] DWORD dwFlags, [in] IStream *pStrIn, [in] UINT *puiPreferredCodePages, [in] UINT nPreferredCodePages, [in] UINT *puiDetectedCodePages, [in, out] UINT *pnDetectedCodePages, [in] WCHAR *lpSpecialChar); } [ uuid(275C23E2-3747-11d0-9FEA-00AA003f8646) ] coclass CMultiLanguage { [default] interface IMultiLanguage; interface IMLangCodePages; interface IMLangFontLink; /* interface IMLangLineBreakConsole; */ interface IMLangFontLink2; } cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);") cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);") cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)") cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);") cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);") cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)") cpp_quote("STDAPI GetGlobalFontLinkObject(void **unknown);") cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);") cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);") cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);") cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);") ================================================ FILE: wine/windows/mmc.idl ================================================ /* * * Copyright 2011 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "basetsd.h"; import "oaidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ uuid(A8D2C5FE-CDCB-4B9D-BDE5-A27343FF54BC), ] interface IMMCVersionInfo : IUnknown { HRESULT GetMMCVersion([out] long * pVersionMajor, [out] long * pVersionMinor); } [ uuid(9EECDD85-B715-4188-8A72-61159ABDB8C4), version(1.0), ] library MMCVersionLib { importlib("stdole2.tlb"); [ helpstring("MMCVersionInfo 1.0 Object"), uuid(D6FEDB1D-CF21-4BD9-AF3B-C5468E9C6684), threading(apartment), progid("NODEMGR.MMCVersionInfo.1"), vi_progid("NODEMGR.MMCVersionInfo") ] coclass MMCVersionInfo { [default] interface IMMCVersionInfo; } } ================================================ FILE: wine/windows/mmddk.h ================================================ /* * Copyright 1998, Luiz Otavio L. Zorzella * 1999, Eric Pouech * * Purpose: multimedia declarations (external to WINMM & MMSYSTEM DLLs * for other DLLs (MCI, drivers...)) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __MMDDK_H #define __MMDDK_H #include #include #ifdef __cplusplus extern "C" { #endif #define MAX_MIDIINDRV (16) /* For now I'm making 16 the maximum number of midi devices one can * have. This should be more than enough for everybody. But as a purist, * I intend to make it unbounded in the future, as soon as I figure * a good way to do so. */ #define MAX_MIDIOUTDRV (16) /* ================================== * Multimedia DDK compatible part * ================================== */ #include #define DRVM_INIT 100 #define DRVM_EXIT 101 #define DRVM_DISABLE 102 #define DRVM_ENABLE 103 /* messages that have IOCTL format * dw1 = NULL or handle * dw2 = NULL or ptr to DRVM_IOCTL_DATA * return is MMRESULT */ #define DRVM_IOCTL 0x100 #define DRVM_ADD_THRU (DRVM_IOCTL+1) #define DRVM_REMOVE_THRU (DRVM_IOCTL+2) #define DRVM_IOCTL_LAST (DRVM_IOCTL+5) typedef struct { DWORD dwSize; /* size of this structure */ DWORD dwCmd; /* IOCTL command code, 0x80000000 and above reserved for system */ } DRVM_IOCTL_DATA, *LPDRVM_IOCTL_DATA; /* command code ranges for dwCmd field of DRVM_IOCTL message * - codes from 0 to 0x7FFFFFFF are user defined * - codes from 0x80000000 to 0xFFFFFFFF are reserved for future definition by microsoft */ #define DRVM_IOCTL_CMD_USER __MSABI_LONG(0x00000000) #define DRVM_IOCTL_CMD_SYSTEM __MSABI_LONG(0x80000000) #define DRVM_MAPPER 0x2000 #define DRVM_USER 0x4000 #define DRVM_MAPPER_STATUS (DRVM_MAPPER+0) #define DRVM_MAPPER_RECONFIGURE (DRVM_MAPPER+1) #define DRVM_MAPPER_PREFERRED_GET (DRVM_MAPPER+21) #define DRVM_MAPPER_CONSOLEVOICECOM_GET (DRVM_MAPPER+23) #define DRV_QUERYDRVENTRY (DRV_RESERVED + 1) #define DRV_QUERYDEVNODE (DRV_RESERVED + 2) #define DRV_QUERYNAME (DRV_RESERVED + 3) #define DRV_QUERYDRIVERIDS (DRV_RESERVED + 4) #define DRV_QUERYMAPPABLE (DRV_RESERVED + 5) #define DRV_QUERYMODULE (DRV_RESERVED + 9) #define DRV_PNPINSTALL (DRV_RESERVED + 11) #define DRV_QUERYDEVICEINTERFACE (DRV_RESERVED + 12) #define DRV_QUERYDEVICEINTERFACESIZE (DRV_RESERVED + 13) #define DRV_QUERYSTRINGID (DRV_RESERVED + 14) #define DRV_QUERYSTRINGIDSIZE (DRV_RESERVED + 15) #define DRV_QUERYIDFROMSTRINGID (DRV_RESERVED + 16) #define DRV_QUERYFUNCTIONINSTANCEID (DRV_RESERVED + 17) #define DRV_QUERYFUNCTIONINSTANCEIDSIZE (DRV_RESERVED + 18) #define DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY 0x00000001 #define WODM_INIT DRVM_INIT #define WODM_GETNUMDEVS 3 #define WODM_GETDEVCAPS 4 #define WODM_OPEN 5 #define WODM_CLOSE 6 #define WODM_PREPARE 7 #define WODM_UNPREPARE 8 #define WODM_WRITE 9 #define WODM_PAUSE 10 #define WODM_RESTART 11 #define WODM_RESET 12 #define WODM_GETPOS 13 #define WODM_GETPITCH 14 #define WODM_SETPITCH 15 #define WODM_GETVOLUME 16 #define WODM_SETVOLUME 17 #define WODM_GETPLAYBACKRATE 18 #define WODM_SETPLAYBACKRATE 19 #define WODM_BREAKLOOP 20 #define WODM_PREFERRED 21 #define WODM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0) #define WAVEOUT_MAPPER_STATUS_DEVICE 0 #define WAVEOUT_MAPPER_STATUS_MAPPED 1 #define WAVEOUT_MAPPER_STATUS_FORMAT 2 #define WODM_BUSY 21 #define WIDM_INIT DRVM_INIT #define WIDM_GETNUMDEVS 50 #define WIDM_GETDEVCAPS 51 #define WIDM_OPEN 52 #define WIDM_CLOSE 53 #define WIDM_PREPARE 54 #define WIDM_UNPREPARE 55 #define WIDM_ADDBUFFER 56 #define WIDM_START 57 #define WIDM_STOP 58 #define WIDM_RESET 59 #define WIDM_GETPOS 60 #define WIDM_PREFERRED 61 #define WIDM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0) #define WAVEIN_MAPPER_STATUS_DEVICE 0 #define WAVEIN_MAPPER_STATUS_MAPPED 1 #define WAVEIN_MAPPER_STATUS_FORMAT 2 #define MODM_INIT DRVM_INIT #define MODM_GETNUMDEVS 1 #define MODM_GETDEVCAPS 2 #define MODM_OPEN 3 #define MODM_CLOSE 4 #define MODM_PREPARE 5 #define MODM_UNPREPARE 6 #define MODM_DATA 7 #define MODM_LONGDATA 8 #define MODM_RESET 9 #define MODM_GETVOLUME 10 #define MODM_SETVOLUME 11 #define MODM_CACHEPATCHES 12 #define MODM_CACHEDRUMPATCHES 13 #define MIDM_INIT DRVM_INIT #define MIDM_GETNUMDEVS 53 #define MIDM_GETDEVCAPS 54 #define MIDM_OPEN 55 #define MIDM_CLOSE 56 #define MIDM_PREPARE 57 #define MIDM_UNPREPARE 58 #define MIDM_ADDBUFFER 59 #define MIDM_START 60 #define MIDM_STOP 61 #define MIDM_RESET 62 #define AUXM_INIT DRVM_INIT #define AUXDM_GETNUMDEVS 3 #define AUXDM_GETDEVCAPS 4 #define AUXDM_GETVOLUME 5 #define AUXDM_SETVOLUME 6 #define MXDM_INIT DRVM_INIT #define MXDM_USER DRVM_USER #define MXDM_MAPPER DRVM_MAPPER #define MXDM_GETNUMDEVS 1 #define MXDM_GETDEVCAPS 2 #define MXDM_OPEN 3 #define MXDM_CLOSE 4 #define MXDM_GETLINEINFO 5 #define MXDM_GETLINECONTROLS 6 #define MXDM_GETCONTROLDETAILS 7 #define MXDM_SETCONTROLDETAILS 8 /* pre-defined joystick types */ #define JOY_HW_NONE 0 #define JOY_HW_CUSTOM 1 #define JOY_HW_2A_2B_GENERIC 2 #define JOY_HW_2A_4B_GENERIC 3 #define JOY_HW_2B_GAMEPAD 4 #define JOY_HW_2B_FLIGHTYOKE 5 #define JOY_HW_2B_FLIGHTYOKETHROTTLE 6 #define JOY_HW_3A_2B_GENERIC 7 #define JOY_HW_3A_4B_GENERIC 8 #define JOY_HW_4B_GAMEPAD 9 #define JOY_HW_4B_FLIGHTYOKE 10 #define JOY_HW_4B_FLIGHTYOKETHROTTLE 11 #define JOY_HW_LASTENTRY 12 /* calibration flags */ #define JOY_ISCAL_XY __MSABI_LONG(0x00000001) /* XY are calibrated */ #define JOY_ISCAL_Z __MSABI_LONG(0x00000002) /* Z is calibrated */ #define JOY_ISCAL_R __MSABI_LONG(0x00000004) /* R is calibrated */ #define JOY_ISCAL_U __MSABI_LONG(0x00000008) /* U is calibrated */ #define JOY_ISCAL_V __MSABI_LONG(0x00000010) /* V is calibrated */ #define JOY_ISCAL_POV __MSABI_LONG(0x00000020) /* POV is calibrated */ /* point of view constants */ #define JOY_POV_NUMDIRS 4 #define JOY_POVVAL_FORWARD 0 #define JOY_POVVAL_BACKWARD 1 #define JOY_POVVAL_LEFT 2 #define JOY_POVVAL_RIGHT 3 /* Specific settings for joystick hardware */ #define JOY_HWS_HASZ __MSABI_LONG(0x00000001) /* has Z info? */ #define JOY_HWS_HASPOV __MSABI_LONG(0x00000002) /* point of view hat present */ #define JOY_HWS_POVISBUTTONCOMBOS __MSABI_LONG(0x00000004) /* pov done through combo of buttons */ #define JOY_HWS_POVISPOLL __MSABI_LONG(0x00000008) /* pov done through polling */ #define JOY_HWS_ISYOKE __MSABI_LONG(0x00000010) /* joystick is a flight yoke */ #define JOY_HWS_ISGAMEPAD __MSABI_LONG(0x00000020) /* joystick is a game pad */ #define JOY_HWS_ISCARCTRL __MSABI_LONG(0x00000040) /* joystick is a car controller */ /* X defaults to J1 X axis */ #define JOY_HWS_XISJ1Y __MSABI_LONG(0x00000080) /* X is on J1 Y axis */ #define JOY_HWS_XISJ2X __MSABI_LONG(0x00000100) /* X is on J2 X axis */ #define JOY_HWS_XISJ2Y __MSABI_LONG(0x00000200) /* X is on J2 Y axis */ /* Y defaults to J1 Y axis */ #define JOY_HWS_YISJ1X __MSABI_LONG(0x00000400) /* Y is on J1 X axis */ #define JOY_HWS_YISJ2X __MSABI_LONG(0x00000800) /* Y is on J2 X axis */ #define JOY_HWS_YISJ2Y __MSABI_LONG(0x00001000) /* Y is on J2 Y axis */ /* Z defaults to J2 Y axis */ #define JOY_HWS_ZISJ1X __MSABI_LONG(0x00002000) /* Z is on J1 X axis */ #define JOY_HWS_ZISJ1Y __MSABI_LONG(0x00004000) /* Z is on J1 Y axis */ #define JOY_HWS_ZISJ2X __MSABI_LONG(0x00008000) /* Z is on J2 X axis */ /* POV defaults to J2 Y axis, if it is not button based */ #define JOY_HWS_POVISJ1X __MSABI_LONG(0x00010000) /* pov done through J1 X axis */ #define JOY_HWS_POVISJ1Y __MSABI_LONG(0x00020000) /* pov done through J1 Y axis */ #define JOY_HWS_POVISJ2X __MSABI_LONG(0x00040000) /* pov done through J2 X axis */ /* R defaults to J2 X axis */ #define JOY_HWS_HASR __MSABI_LONG(0x00080000) /* has R (4th axis) info */ #define JOY_HWS_RISJ1X __MSABI_LONG(0x00100000) /* R done through J1 X axis */ #define JOY_HWS_RISJ1Y __MSABI_LONG(0x00200000) /* R done through J1 Y axis */ #define JOY_HWS_RISJ2Y __MSABI_LONG(0x00400000) /* R done through J2 X axis */ /* U & V for future hardware */ #define JOY_HWS_HASU __MSABI_LONG(0x00800000) /* has U (5th axis) info */ #define JOY_HWS_HASV __MSABI_LONG(0x01000000) /* has V (6th axis) info */ /* Usage settings */ #define JOY_US_HASRUDDER __MSABI_LONG(0x00000001) /* joystick configured with rudder */ #define JOY_US_PRESENT __MSABI_LONG(0x00000002) /* is joystick actually present? */ #define JOY_US_ISOEM __MSABI_LONG(0x00000004) /* joystick is an OEM defined type */ /* struct for storing x,y, z, and rudder values */ typedef struct joypos_tag { DWORD dwX; DWORD dwY; DWORD dwZ; DWORD dwR; DWORD dwU; DWORD dwV; } JOYPOS, *LPJOYPOS; /* struct for storing ranges */ typedef struct joyrange_tag { JOYPOS jpMin; JOYPOS jpMax; JOYPOS jpCenter; } JOYRANGE,*LPJOYRANGE; typedef struct joyreguservalues_tag { DWORD dwTimeOut; /* value at which to timeout joystick polling */ JOYRANGE jrvRanges; /* range of values app wants returned for axes */ JOYPOS jpDeadZone; /* area around center to be considered as "dead". specified as a percentage (0-100). Only X & Y handled by system driver */ } JOYREGUSERVALUES, *LPJOYREGUSERVALUES; typedef struct joyreghwsettings_tag { DWORD dwFlags; DWORD dwNumButtons; /* number of buttons */ } JOYREGHWSETTINGS, *LPJOYHWSETTINGS; /* range of values returned by the hardware (filled in by calibration) */ typedef struct joyreghwvalues_tag { JOYRANGE jrvHardware; /* values returned by hardware */ DWORD dwPOVValues[JOY_POV_NUMDIRS];/* POV values returned by hardware */ DWORD dwCalFlags; /* what has been calibrated */ } JOYREGHWVALUES, *LPJOYREGHWVALUES; /* hardware configuration */ typedef struct joyreghwconfig_tag { JOYREGHWSETTINGS hws; /* hardware settings */ DWORD dwUsageSettings;/* usage settings */ JOYREGHWVALUES hwv; /* values returned by hardware */ DWORD dwType; /* type of joystick */ DWORD dwReserved; /* reserved for OEM drivers */ } JOYREGHWCONFIG, *LPJOYREGHWCONFIG; /* joystick calibration info structure */ typedef struct joycalibrate_tag { UINT wXbase; UINT wXdelta; UINT wYbase; UINT wYdelta; UINT wZbase; UINT wZdelta; } JOYCALIBRATE; typedef JOYCALIBRATE *LPJOYCALIBRATE; /* prototype for joystick message function */ typedef UINT (CALLBACK * JOYDEVMSGPROC)(DWORD dwID, UINT uMessage, LPARAM lParam1, LPARAM lParam2); typedef JOYDEVMSGPROC *LPJOYDEVMSGPROC; /* messages sent to joystick driver's DriverProc() function */ #define JDD_GETNUMDEVS (DRV_RESERVED + 0x0001) #define JDD_GETDEVCAPS (DRV_RESERVED + 0x0002) #define JDD_GETPOS (DRV_RESERVED + 0x0101) #define JDD_SETCALIBRATION (DRV_RESERVED + 0x0102) #define JDD_CONFIGCHANGED (DRV_RESERVED + 0x0103) #define JDD_GETPOSEX (DRV_RESERVED + 0x0104) #define MCI_MAX_DEVICE_TYPE_LENGTH 80 #define MCI_FALSE (MCI_STRING_OFFSET + 19) #define MCI_TRUE (MCI_STRING_OFFSET + 20) #define MCI_FORMAT_RETURN_BASE MCI_FORMAT_MILLISECONDS_S #define MCI_FORMAT_MILLISECONDS_S (MCI_STRING_OFFSET + 21) #define MCI_FORMAT_HMS_S (MCI_STRING_OFFSET + 22) #define MCI_FORMAT_MSF_S (MCI_STRING_OFFSET + 23) #define MCI_FORMAT_FRAMES_S (MCI_STRING_OFFSET + 24) #define MCI_FORMAT_SMPTE_24_S (MCI_STRING_OFFSET + 25) #define MCI_FORMAT_SMPTE_25_S (MCI_STRING_OFFSET + 26) #define MCI_FORMAT_SMPTE_30_S (MCI_STRING_OFFSET + 27) #define MCI_FORMAT_SMPTE_30DROP_S (MCI_STRING_OFFSET + 28) #define MCI_FORMAT_BYTES_S (MCI_STRING_OFFSET + 29) #define MCI_FORMAT_SAMPLES_S (MCI_STRING_OFFSET + 30) #define MCI_FORMAT_TMSF_S (MCI_STRING_OFFSET + 31) #define MCI_VD_FORMAT_TRACK_S (MCI_VD_OFFSET + 5) #define WAVE_FORMAT_PCM_S (MCI_WAVE_OFFSET + 0) #define WAVE_MAPPER_S (MCI_WAVE_OFFSET + 1) #define MCI_SEQ_MAPPER_S (MCI_SEQ_OFFSET + 5) #define MCI_SEQ_FILE_S (MCI_SEQ_OFFSET + 6) #define MCI_SEQ_MIDI_S (MCI_SEQ_OFFSET + 7) #define MCI_SEQ_SMPTE_S (MCI_SEQ_OFFSET + 8) #define MCI_SEQ_FORMAT_SONGPTR_S (MCI_SEQ_OFFSET + 9) #define MCI_SEQ_NONE_S (MCI_SEQ_OFFSET + 10) #define MIDIMAPPER_S (MCI_SEQ_OFFSET + 11) #define MCI_RESOURCE_RETURNED 0x00010000 /* resource ID */ #define MCI_COLONIZED3_RETURN 0x00020000 /* colonized ID, 3 bytes data */ #define MCI_COLONIZED4_RETURN 0x00040000 /* colonized ID, 4 bytes data */ #define MCI_INTEGER_RETURNED 0x00080000 /* integer conversion needed */ #define MCI_RESOURCE_DRIVER 0x00100000 /* driver owns returned resource */ #define MCI_NO_COMMAND_TABLE 0xFFFF #define MCI_COMMAND_HEAD 0 #define MCI_STRING 1 #define MCI_INTEGER 2 #define MCI_END_COMMAND 3 #define MCI_RETURN 4 #define MCI_FLAG 5 #define MCI_END_COMMAND_LIST 6 #define MCI_RECT 7 #define MCI_CONSTANT 8 #define MCI_END_CONSTANT 9 #define MCI_HWND 10 #define MCI_HPAL 11 #define MCI_HDC 12 #ifdef _WIN64 #define MCI_INTEGER64 13 #endif /* _WIN64 */ #define MAKEMCIRESOURCE(wRet, wRes) MAKELRESULT((wRet), (wRes)) typedef struct { HWAVE hWave; LPWAVEFORMATEX lpFormat; DWORD_PTR dwCallback; DWORD_PTR dwInstance; UINT uMappedDeviceID; DWORD_PTR dnDevNode; } WAVEOPENDESC, *LPWAVEOPENDESC; typedef struct { DWORD dwStreamID; WORD wDeviceID; } MIDIOPENSTRMID; typedef struct { HMIDI hMidi; DWORD_PTR dwCallback; DWORD_PTR dwInstance; DWORD_PTR dnDevNode; DWORD cIds; MIDIOPENSTRMID rgIds; } MIDIOPENDESC, *LPMIDIOPENDESC; typedef struct tMIXEROPENDESC { HMIXEROBJ hmx; LPVOID pReserved0; DWORD_PTR dwCallback; DWORD_PTR dwInstance; DWORD_PTR dnDevNode; } MIXEROPENDESC, *LPMIXEROPENDESC; typedef struct { UINT wDeviceID; /* device ID */ LPSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */ UINT wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */ UINT wType; /* driver type (filled in by the driver) */ } MCI_OPEN_DRIVER_PARMSA, *LPMCI_OPEN_DRIVER_PARMSA; typedef struct { UINT wDeviceID; /* device ID */ LPWSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */ UINT wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */ UINT wType; /* driver type (filled in by the driver) */ } MCI_OPEN_DRIVER_PARMSW, *LPMCI_OPEN_DRIVER_PARMSW; DECL_WINELIB_TYPE_AW(MCI_OPEN_DRIVER_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_OPEN_DRIVER_PARMS) DWORD_PTR WINAPI mciGetDriverData(UINT uDeviceID); BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD_PTR dwData); UINT WINAPI mciDriverYield(UINT uDeviceID); BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus); UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType); BOOL WINAPI mciFreeCommandResource(UINT uTable); #define DCB_NULL 0x0000 #define DCB_WINDOW 0x0001 /* dwCallback is a HWND */ #define DCB_TASK 0x0002 /* dwCallback is a HTASK */ #define DCB_FUNCTION 0x0003 /* dwCallback is a FARPROC */ #define DCB_EVENT 0x0005 /* dwCallback is an EVENT Handler */ #define DCB_TYPEMASK 0x0007 #define DCB_NOSWITCH 0x0008 /* don't switch stacks for callback */ BOOL WINAPI DriverCallback(DWORD_PTR dwCallBack, DWORD uFlags, HDRVR hDev, DWORD wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2); typedef VOID (*LPTASKCALLBACK)(DWORD_PTR dwInst); #define TASKERR_NOTASKSUPPORT 1 #define TASKERR_OUTOFMEMORY 2 UINT WINAPI mmTaskCreate(LPTASKCALLBACK, HANDLE*, DWORD_PTR); VOID WINAPI mmTaskBlock(DWORD); BOOL WINAPI mmTaskSignal(DWORD); VOID WINAPI mmTaskYield(VOID); DWORD WINAPI mmGetCurrentTask(VOID); #include #ifdef __cplusplus } #endif #endif /* __MMDDK_H */ ================================================ FILE: wine/windows/mmdeviceapi.idl ================================================ /* * Copyright (C) 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "propsys.idl"; cpp_quote("#ifndef E_NOTFOUND") cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)") cpp_quote("#endif") cpp_quote("#ifndef E_UNSUPPORTED_TYPE") cpp_quote("#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)") cpp_quote("#endif") cpp_quote("#define DEVICE_STATE_ACTIVE 0x1") cpp_quote("#define DEVICE_STATE_DISABLED 0x2") cpp_quote("#define DEVICE_STATE_NOTPRESENT 0x4") cpp_quote("#define DEVICE_STATE_UNPLUGGED 0x8") cpp_quote("#define DEVICE_STATEMASK_ALL 0xf") /* Generic PKEY_AudioEndPoint ID for grepping: {1da5d803-d492-4edd-8c23-e0c0ffee7f0e} */ cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,0);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,1);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,2);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,3);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,4);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,5);") cpp_quote("#define ENDPOINT_SYSFX_ENABLED 0") cpp_quote("#define ENDPOINT_SYSFX_DISABLED 1") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,6);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Supports_EventDriven_Mode,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,7);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_JackSubType,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,8);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat,0xf19f064d,0x082c,0x4e27,0xbc,0x73,0x68,0x82,0xa1,0xbb,0x8e,0x4c,0);") cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_OEMFormat,0xe4870e26,0x3cc5,0x4cd2,0xba,0x46,0xca,0x0a,0x9a,0x70,0xed,0x04,3);") typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS { DWORD cbDirectXAudioActivationParams; GUID guidAudioSession; DWORD dwAudioStreamFlags; } DIRECTX_AUDIO_ACTIVATION_PARAMS, *PDIRECTX_AUDIO_ACTIVATION_PARAMS; typedef enum _EDataFlow { eRender, eCapture, eAll, EDataFlow_enum_count } EDataFlow; typedef enum _ERole { eConsole, eMultimedia, eCommunications, ERole_enum_count } ERole; typedef enum _EndpointFormFactor { RemoteNetworkDevice, Speakers, LineLevel, Headphones, Microphone, Headset, Handset, UnknownDigitalPassthrough, SPDIF, DigitalAudioDisplayDevice, UnknownFormFactor, EndpointFormFactor_enum_count } EndpointFormFactor; cpp_quote("#define HDMI DigitalAudioDisplayDevice") [ object, local, uuid(7991eec9-7e89-4d85-8390-6c703cec60c0), nonextensible, pointer_default(unique) ] interface IMMNotificationClient : IUnknown { [id(1)] HRESULT OnDeviceStateChanged( [in] LPCWSTR pwstrDeviceId, [in] DWORD dwNewState ); [id(2)] HRESULT OnDeviceAdded( [in] LPCWSTR pwstrDeviceId ); [id(3)] HRESULT OnDeviceRemoved( [in] LPCWSTR pwstrDeviceId ); [id(4)] HRESULT OnDefaultDeviceChanged( [in] EDataFlow flow, [in] ERole role, [in] LPCWSTR pwstrDeviceId ); [id(5)] HRESULT OnPropertyValueChanged( [in] LPCWSTR pwstrDeviceId, [in] const PROPERTYKEY key ); } [ object, local, uuid(d666063f-1587-4e43-81f1-b948e807363f), nonextensible, pointer_default(unique) ] interface IMMDevice : IUnknown { [id(1)] HRESULT Activate( [in] REFIID iid, [in] DWORD dwClsCtx, [in,unique] PROPVARIANT *pActivationParams, [out,iid_is(iid)] void **ppv ); [id(2)] HRESULT OpenPropertyStore( [in] DWORD stgmAccess, [out] IPropertyStore **ppProperties ); [id(3)] HRESULT GetId( [out] LPWSTR *ppstrId ); [id(4)] HRESULT GetState( [out] DWORD *pdwState ); } [ object, local, uuid(0bd7a1be-7a1a-44db-8397-cc5392387b5e), nonextensible, pointer_default(unique) ] interface IMMDeviceCollection : IUnknown { [id(1)] HRESULT GetCount( [out] UINT *pcDevices ); [id(2)] HRESULT Item( [in] UINT nDevice, [out] IMMDevice **ppdevice ); } [ object, local, uuid(1be09788-6894-4089-8586-9a2a6c265ac5), nonextensible, pointer_default(unique) ] interface IMMEndpoint : IUnknown { [id(1)] HRESULT GetDataFlow( [out] EDataFlow *pDataFlow ); } [ object, local, uuid(a95664d2-9614-4f35-a746-de8db63617e6), nonextensible, pointer_default(unique) ] interface IMMDeviceEnumerator : IUnknown { [id(1)] HRESULT EnumAudioEndpoints( [in] EDataFlow dataFlow, [in] DWORD dwStateMask, [out] IMMDeviceCollection **ppDevices ); [id(2)] HRESULT GetDefaultAudioEndpoint( [in] EDataFlow dataFlow, [in] ERole role, [out] IMMDevice **ppEndpoint ); [id(3)] HRESULT GetDevice( [in] LPCWSTR pwstrId, [out] IMMDevice **ppDevice ); [id(4)] HRESULT RegisterEndpointNotificationCallback( [in] IMMNotificationClient *pClient ); [id(5)] HRESULT UnregisterEndpointNotificationCallback( [in] IMMNotificationClient *pClient ); } [ object, local, uuid(3b0d0ea4-d0a9-4b0e-935b-09516746fac0), nonextensible, pointer_default(unique) ] interface IMMDeviceActivator : IUnknown { [id(1)] HRESULT Activate( [in] REFIID iid, [in] IMMDevice *pDevice, [in] PROPVARIANT *pActivationParams, [out,iid_is(iid)] void **ppv ); } typedef struct _AudioExtensionParams { LPARAM AddPageParam; IMMDevice *pEndPoint; IMMDevice *pPnpInterface; IMMDevice *pPnpDevnode; } AudioExtensionParams; [ uuid(2fdaafa3-7523-4f66-9957-9d5e7fe698f6), version(1.0) ] library MMDeviceAPILib { [ uuid(bcde0395-e52f-467c-8e3d-c4579291692e) ] coclass MMDeviceEnumerator { [default] interface IMMDeviceEnumerator; } } ================================================ FILE: wine/windows/mmreg.h ================================================ /* * Declarations for MultiMedia-REGistration * * Copyright (C) 1999 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WIDL__ #ifndef __WINE_MMREG_H #define __WINE_MMREG_H #include /*********************************************************************** * Defines/Enums */ #ifndef _ACM_WAVEFILTER #define _ACM_WAVEFILTER #define WAVE_FILTER_UNKNOWN 0x0000 #define WAVE_FILTER_DEVELOPMENT 0xFFFF typedef struct _WAVEFILTER { DWORD cbStruct; DWORD dwFilterTag; DWORD fdwFilter; DWORD dwReserved[5]; } WAVEFILTER, *PWAVEFILTER, *NPWAVEFILTER, *LPWAVEFILTER; #endif /* _ACM_WAVEFILTER */ #ifndef WAVE_FILTER_VOLUME #define WAVE_FILTER_VOLUME 0x0001 typedef struct _WAVEFILTER_VOLUME { WAVEFILTER wfltr; DWORD dwVolume; } VOLUMEWAVEFILTER, *PVOLUMEWAVEFILTER, *NPVOLUMEWAVEFILTER, *LPVOLUMEWAVEFILTER; #endif /* WAVE_FILTER_VOLUME */ #ifndef WAVE_FILTER_ECHO #define WAVE_FILTER_ECHO 0x0002 typedef struct WAVEFILTER_ECHO { WAVEFILTER wfltr; DWORD dwVolume; DWORD dwDelay; } ECHOWAVEFILTER, *PECHOWAVEFILTER, *NPECHOWAVEFILTER, *LPECHOWAVEFILTER; #endif /* WAVEFILTER_ECHO */ #ifndef _WAVEFORMATEX_ #define _WAVEFORMATEX_ typedef struct _WAVEFORMATEX { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX; #endif /* _WAVEFORMATEX_ */ /* WAVE form wFormatTag IDs */ #define WAVE_FORMAT_UNKNOWN 0x0000 /* Microsoft Corporation */ #define WAVE_FORMAT_ADPCM 0x0002 /* Microsoft Corporation */ #define WAVE_FORMAT_IEEE_FLOAT 0x0003 /* Microsoft Corporation */ #define WAVE_FORMAT_IBM_CVSD 0x0005 /* IBM Corporation */ #define WAVE_FORMAT_ALAW 0x0006 /* Microsoft Corporation */ #define WAVE_FORMAT_MULAW 0x0007 /* Microsoft Corporation */ #define WAVE_FORMAT_OKI_ADPCM 0x0010 /* OKI */ #define WAVE_FORMAT_DVI_ADPCM 0x0011 /* Intel Corporation */ #define WAVE_FORMAT_IMA_ADPCM (WAVE_FORMAT_DVI_ADPCM) /* Intel Corporation */ #define WAVE_FORMAT_MEDIASPACE_ADPCM 0x0012 /* Videologic */ #define WAVE_FORMAT_SIERRA_ADPCM 0x0013 /* Sierra Semiconductor Corp */ #define WAVE_FORMAT_G723_ADPCM 0x0014 /* Antex Electronics Corporation */ #define WAVE_FORMAT_DIGISTD 0x0015 /* DSP Solutions, Inc. */ #define WAVE_FORMAT_DIGIFIX 0x0016 /* DSP Solutions, Inc. */ #define WAVE_FORMAT_DIALOGIC_OKI_ADPCM 0x0017 /* Dialogic Corporation */ #define WAVE_FORMAT_YAMAHA_ADPCM 0x0020 /* Yamaha Corporation of America */ #define WAVE_FORMAT_SONARC 0x0021 /* Speech Compression */ #define WAVE_FORMAT_DSPGROUP_TRUESPEECH 0x0022 /* DSP Group, Inc */ #define WAVE_FORMAT_ECHOSC1 0x0023 /* Echo Speech Corporation */ #define WAVE_FORMAT_AUDIOFILE_AF36 0x0024 /* */ #define WAVE_FORMAT_APTX 0x0025 /* Audio Processing Technology */ #define WAVE_FORMAT_AUDIOFILE_AF10 0x0026 /* */ #define WAVE_FORMAT_DOLBY_AC2 0x0030 /* Dolby Laboratories */ #define WAVE_FORMAT_GSM610 0x0031 /* Microsoft Corporation */ #define WAVE_FORMAT_ANTEX_ADPCME 0x0033 /* Antex Electronics Corporation */ #define WAVE_FORMAT_CONTROL_RES_VQLPC 0x0034 /* Control Resources Limited */ #define WAVE_FORMAT_DIGIREAL 0x0035 /* DSP Solutions, Inc. */ #define WAVE_FORMAT_DIGIADPCM 0x0036 /* DSP Solutions, Inc. */ #define WAVE_FORMAT_CONTROL_RES_CR10 0x0037 /* Control Resources Limited */ #define WAVE_FORMAT_NMS_VBXADPCM 0x0038 /* Natural MicroSystems */ #define WAVE_FORMAT_G721_ADPCM 0x0040 /* Antex Electronics Corporation */ #define WAVE_FORMAT_MPEG 0x0050 /* Microsoft Corporation */ #define WAVE_FORMAT_MPEGLAYER3 0x0055 #define WAVE_FORMAT_MSRT24 0x0082 /* Microsoft Corporation */ #define WAVE_FORMAT_CREATIVE_ADPCM 0x0200 /* Creative Labs, Inc */ #define WAVE_FORMAT_CREATIVE_FASTSPEECH8 0x0202 /* Creative Labs, Inc */ #define WAVE_FORMAT_CREATIVE_FASTSPEECH10 0x0203 /* Creative Labs, Inc */ #define WAVE_FORMAT_FM_TOWNS_SND 0x0300 /* Fujitsu Corp. */ #define WAVE_FORMAT_OLIGSM 0x1000 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_OLIADPCM 0x1001 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_OLICELP 0x1002 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_OLISBC 0x1003 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_OLIOPR 0x1004 /* Ing C. Olivetti & C., S.p.A. */ #ifndef MM_MICROSOFT #define MM_MICROSOFT 0x01 #endif #define MM_MSFT_ACM_MSADPCM 0x21 #define MM_MSFT_ACM_IMAADPCM 0x22 #define MM_MSFT_ACM_GSM610 0x24 #define MM_MSFT_ACM_G711 0x25 #define MM_MSFT_ACM_PCM 0x26 #define MM_FRAUNHOFER_IIS 0xAC #define MM_FHGIIS_MPEGLAYER3_DECODE 0x09 #define MM_FHGIIS_MPEGLAYER3_PROFESSIONAL 0x0d #if !defined(WAVE_FORMAT_EXTENSIBLE) #define WAVE_FORMAT_EXTENSIBLE 0xFFFE /* Microsoft */ #endif #define WAVE_FORMAT_DEVELOPMENT (0xFFFF) typedef struct adpcmcoef_tag { short iCoef1; short iCoef2; } ADPCMCOEFSET; typedef ADPCMCOEFSET *PADPCMCOEFSET, *NPADPCMCOEFSET, *LPADPCMCOEFSET; typedef struct adpcmwaveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; WORD wNumCoef; /* FIXME: this should be aCoef[0] */ ADPCMCOEFSET aCoef[1]; } ADPCMWAVEFORMAT; typedef ADPCMWAVEFORMAT *PADPCMWAVEFORMAT, *NPADPCMWAVEFORMAT, *LPADPCMWAVEFORMAT; typedef struct dvi_adpcmwaveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } DVIADPCMWAVEFORMAT; typedef DVIADPCMWAVEFORMAT *PDVIADPCMWAVEFORMAT, *NPDVIADPCMWAVEFORMAT, *LPDVIADPCMWAVEFORMAT; typedef struct ima_adpcmwaveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } IMAADPCMWAVEFORMAT; typedef IMAADPCMWAVEFORMAT *PIMAADPCMWAVEFORMAT, *NPIMAADPCMWAVEFORMAT, *LPIMAADPCMWAVEFORMAT; typedef struct mediaspace_adpcmwaveformat_tag { WAVEFORMATEX wfx; WORD wRevision; } MEDIASPACEADPCMWAVEFORMAT; typedef MEDIASPACEADPCMWAVEFORMAT *PMEDIASPACEADPCMWAVEFORMAT, *NPMEDIASPACEADPCMWAVEFORMAT, *LPMEDIASPACEADPCMWAVEFORMAT; typedef struct sierra_adpcmwaveformat_tag { WAVEFORMATEX wfx; WORD wRevision; } SIERRAADPCMWAVEFORMAT; typedef SIERRAADPCMWAVEFORMAT *PSIERRAADPCMWAVEFORMAT, *NPSIERRAADPCMWAVEFORMAT, *LPSIERRAADPCMWAVEFORMAT; typedef struct g723_adpcmwaveformat_tag { WAVEFORMATEX wfx; WORD cbExtraSize; WORD nAuxBlockSize; } G723_ADPCMWAVEFORMAT; typedef G723_ADPCMWAVEFORMAT *PG723_ADPCMWAVEFORMAT, *NPG723_ADPCMWAVEFORMAT, *LPG723_ADPCMWAVEFORMAT; typedef struct digistdwaveformat_tag { WAVEFORMATEX wfx; } DIGISTDWAVEFORMAT; typedef DIGISTDWAVEFORMAT *PDIGISTDWAVEFORMAT, *NPDIGISTDWAVEFORMAT, *LPDIGISTDWAVEFORMAT; typedef struct digifixwaveformat_tag { WAVEFORMATEX wfx; } DIGIFIXWAVEFORMAT; typedef DIGIFIXWAVEFORMAT *PDIGIFIXWAVEFORMAT, *NPDIGIFIXWAVEFORMAT, *LPDIGIFIXWAVEFORMAT; typedef struct creative_fastspeechformat_tag { WAVEFORMATEX ewf; } DIALOGICOKIADPCMWAVEFORMAT; typedef DIALOGICOKIADPCMWAVEFORMAT *PDIALOGICOKIADPCMWAVEFORMAT, *NPDIALOGICOKIADPCMWAVEFORMAT, *LPDIALOGICOKIADPCMWAVEFORMAT; typedef struct yamaha_adpmcwaveformat_tag { WAVEFORMATEX wfx; } YAMAHA_ADPCMWAVEFORMAT; typedef YAMAHA_ADPCMWAVEFORMAT *PYAMAHA_ADPCMWAVEFORMAT, *NPYAMAHA_ADPCMWAVEFORMAT, *LPYAMAHA_ADPCMWAVEFORMAT; typedef struct sonarcwaveformat_tag { WAVEFORMATEX wfx; WORD wCompType; } SONARCWAVEFORMAT; typedef SONARCWAVEFORMAT *PSONARCWAVEFORMAT, *NPSONARCWAVEFORMAT,*LPSONARCWAVEFORMAT; typedef struct truespeechwaveformat_tag { WAVEFORMATEX wfx; WORD wRevision; WORD nSamplesPerBlock; BYTE abReserved[28]; } TRUESPEECHWAVEFORMAT; typedef TRUESPEECHWAVEFORMAT *PTRUESPEECHWAVEFORMAT, *NPTRUESPEECHWAVEFORMAT, *LPTRUESPEECHWAVEFORMAT; typedef struct echosc1waveformat_tag { WAVEFORMATEX wfx; } ECHOSC1WAVEFORMAT; typedef ECHOSC1WAVEFORMAT *PECHOSC1WAVEFORMAT, *NPECHOSC1WAVEFORMAT, *LPECHOSC1WAVEFORMAT; typedef struct audiofile_af36waveformat_tag { WAVEFORMATEX wfx; } AUDIOFILE_AF36WAVEFORMAT; typedef AUDIOFILE_AF36WAVEFORMAT *PAUDIOFILE_AF36WAVEFORMAT, *NPAUDIOFILE_AF36WAVEFORMAT, *LPAUDIOFILE_AF36WAVEFORMAT; typedef struct aptxwaveformat_tag { WAVEFORMATEX wfx; } APTXWAVEFORMAT; typedef APTXWAVEFORMAT *PAPTXWAVEFORMAT, *NPAPTXWAVEFORMAT, *LPAPTXWAVEFORMAT; typedef struct audiofile_af10waveformat_tag { WAVEFORMATEX wfx; } AUDIOFILE_AF10WAVEFORMAT; typedef AUDIOFILE_AF10WAVEFORMAT *PAUDIOFILE_AF10WAVEFORMAT, *NPAUDIOFILE_AF10WAVEFORMAT, *LPAUDIOFILE_AF10WAVEFORMAT; typedef struct dolbyac2waveformat_tag { WAVEFORMATEX wfx; WORD nAuxBitsCode; } DOLBYAC2WAVEFORMAT; typedef struct gsm610waveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } GSM610WAVEFORMAT; typedef GSM610WAVEFORMAT *PGSM610WAVEFORMAT, *NPGSM610WAVEFORMAT, *LPGSM610WAVEFORMAT; typedef struct adpcmewaveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } ADPCMEWAVEFORMAT; typedef ADPCMEWAVEFORMAT *PADPCMEWAVEFORMAT, *NPADPCMEWAVEFORMAT, *LPADPCMEWAVEFORMAT; typedef struct contres_vqlpcwaveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } CONTRESVQLPCWAVEFORMAT; typedef CONTRESVQLPCWAVEFORMAT *PCONTRESVQLPCWAVEFORMAT, *NPCONTRESVQLPCWAVEFORMAT, *LPCONTRESVQLPCWAVEFORMAT; typedef struct digirealwaveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } DIGIREALWAVEFORMAT; typedef DIGIREALWAVEFORMAT *PDIGIREALWAVEFORMAT, *NPDIGIREALWAVEFORMAT, *LPDIGIREALWAVEFORMAT; typedef struct digiadpcmmwaveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } DIGIADPCMWAVEFORMAT; typedef DIGIADPCMWAVEFORMAT *PDIGIADPCMWAVEFORMAT, *NPDIGIADPCMWAVEFORMAT, *LPDIGIADPCMWAVEFORMAT; typedef struct contres_cr10waveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } CONTRESCR10WAVEFORMAT; typedef CONTRESCR10WAVEFORMAT *PCONTRESCR10WAVEFORMAT, *NPCONTRESCR10WAVEFORMAT, *LPCONTRESCR10WAVEFORMAT; typedef struct nms_vbxadpcmmwaveformat_tag { WAVEFORMATEX wfx; WORD wSamplesPerBlock; } NMS_VBXADPCMWAVEFORMAT; typedef NMS_VBXADPCMWAVEFORMAT *PNMS_VBXADPCMWAVEFORMAT, *NPNMS_VBXADPCMWAVEFORMAT, *LPNMS_VBXADPCMWAVEFORMAT; typedef struct g721_adpcmwaveformat_tag { WAVEFORMATEX wfx; WORD nAuxBlockSize; } G721_ADPCMWAVEFORMAT; typedef G721_ADPCMWAVEFORMAT *PG721_ADPCMWAVEFORMAT, *NG721_ADPCMWAVEFORMAT, *LPG721_ADPCMWAVEFORMAT; typedef struct creative_adpcmwaveformat_tag { WAVEFORMATEX wfx; WORD wRevision; } CREATIVEADPCMWAVEFORMAT; typedef CREATIVEADPCMWAVEFORMAT *PCREATIVEADPCMWAVEFORMAT, *NPCREATIVEADPCMWAVEFORMAT, *LPCREATIVEADPCMWAVEFORMAT; typedef struct creative_fastspeech8format_tag { WAVEFORMATEX wfx; WORD wRevision; } CREATIVEFASTSPEECH8WAVEFORMAT; typedef CREATIVEFASTSPEECH8WAVEFORMAT *PCREATIVEFASTSPEECH8WAVEFORMAT, *NPCREATIVEFASTSPEECH8WAVEFORMAT, *LPCREATIVEFASTSPEECH8WAVEFORMAT; typedef struct creative_fastspeech10format_tag { WAVEFORMATEX wfx; WORD wRevision; } CREATIVEFASTSPEECH10WAVEFORMAT; typedef CREATIVEFASTSPEECH10WAVEFORMAT *PCREATIVEFASTSPEECH10WAVEFORMAT, *NPCREATIVEFASTSPEECH10WAVEFORMAT, *LPCREATIVEFASTSPEECH10WAVEFORMAT; typedef struct fmtowns_snd_waveformat_tag { WAVEFORMATEX wfx; WORD wRevision; } FMTOWNS_SND_WAVEFORMAT; typedef FMTOWNS_SND_WAVEFORMAT *PFMTOWNS_SND_WAVEFORMAT, *NPFMTOWNS_SND_WAVEFORMAT, *LPFMTOWNS_SND_WAVEFORMAT; typedef struct oligsmwaveformat_tag { WAVEFORMATEX wfx; } OLIGSMWAVEFORMAT; typedef OLIGSMWAVEFORMAT *POLIGSMWAVEFORMAT, *NPOLIGSMWAVEFORMAT, *LPOLIGSMWAVEFORMAT; typedef struct oliadpcmwaveformat_tag { WAVEFORMATEX wfx; } OLIADPCMWAVEFORMAT; typedef OLIADPCMWAVEFORMAT *POLIADPCMWAVEFORMAT, *NPOLIADPCMWAVEFORMAT, *LPOLIADPCMWAVEFORMAT; typedef struct olicelpwaveformat_tag { WAVEFORMATEX wfx; } OLICELPWAVEFORMAT; typedef OLICELPWAVEFORMAT *POLICELPWAVEFORMAT, *NPOLICELPWAVEFORMAT, *LPOLICELPWAVEFORMAT; typedef struct olisbcwaveformat_tag { WAVEFORMATEX wfx; } OLISBCWAVEFORMAT; typedef OLISBCWAVEFORMAT *POLISBCWAVEFORMAT, *NPOLISBCWAVEFORMAT, *LPOLISBCWAVEFORMAT; typedef struct olioprwaveformat_tag { WAVEFORMATEX wfx; } OLIOPRWAVEFORMAT; typedef OLIOPRWAVEFORMAT *POLIOPRWAVEFORMAT, *NPOLIOPRWAVEFORMAT, *LPOLIOPRWAVEFORMAT; typedef struct csimaadpcmwaveformat_tag { WAVEFORMATEX wfx; } CSIMAADPCMWAVEFORMAT; typedef CSIMAADPCMWAVEFORMAT *PCSIMAADPCMWAVEFORMAT, *NPCSIMAADPCMWAVEFORMAT, *LPCSIMAADPCMWAVEFORMAT; typedef struct mpeg1waveformat_tag { WAVEFORMATEX wfx; WORD fwHeadLayer; DWORD dwHeadBitrate; WORD fwHeadMode; WORD fwHeadModeExt; WORD wHeadEmphasis; WORD fwHeadFlags; DWORD dwPTSLow; DWORD dwPTSHigh; } MPEG1WAVEFORMAT,* PMPEG1WAVEFORMAT; #define ACM_MPEG_LAYER1 0x0001 #define ACM_MPEG_LAYER2 0x0002 #define ACM_MPEG_LAYER3 0x0004 #define ACM_MPEG_STEREO 0x0001 #define ACM_MPEG_JOINTSTEREO 0x0002 #define ACM_MPEG_DUALCHANNEL 0x0004 #define ACM_MPEG_SINGLECHANNEL 0x0008 #define ACM_MPEG_PRIVATEBIT 0x0001 #define ACM_MPEG_COPYRIGHT 0x0002 #define ACM_MPEG_ORIGINALHOME 0x0004 #define ACM_MPEG_PROTECTIONBIT 0x0008 #define ACM_MPEG_ID_MPEG1 0x0010 typedef struct mpeglayer3waveformat_tag { WAVEFORMATEX wfx; WORD wID; DWORD fdwFlags; WORD nBlockSize; WORD nFramesPerBlock; WORD nCodecDelay; } MPEGLAYER3WAVEFORMAT; #define MPEGLAYER3_WFX_EXTRA_BYTES 12 #define MPEGLAYER3_ID_UNKNOWN 0 #define MPEGLAYER3_ID_MPEG 1 #define MPEGLAYER3_ID_CONSTANTFRAMESIZE 2 #define MPEGLAYER3_FLAG_PADDING_ISO 0x00000000 #define MPEGLAYER3_FLAG_PADDING_ON 0x00000001 #define MPEGLAYER3_FLAG_PADDING_OFF 0x00000002 #ifdef GUID_DEFINED #ifndef _WAVEFORMATEXTENSIBLE_ #define _WAVEFORMATEXTENSIBLE_ typedef struct { WAVEFORMATEX Format; union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; } Samples; DWORD dwChannelMask; GUID SubFormat; } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; #endif /* _WAVEFORMATEXTENSIBLE_ */ #endif /* GUID_DEFINED */ typedef WAVEFORMATEXTENSIBLE WAVEFORMATPCMEX; typedef WAVEFORMATPCMEX* PWAVEFORMATPCMEX; typedef WAVEFORMATPCMEX* NPWAVEFORMATPCMEX; typedef WAVEFORMATPCMEX* LPWAVEFORMATPCMEX; typedef WAVEFORMATEXTENSIBLE WAVEFORMATIEEEFLOATEX; typedef WAVEFORMATIEEEFLOATEX* PWAVEFORMATIEEEFLOATEX; typedef WAVEFORMATIEEEFLOATEX* NPWAVEFORMATIEEEFLOATEX; typedef WAVEFORMATIEEEFLOATEX* LPWAVEFORMATIEEEFLOATEX; #ifndef _SPEAKER_POSITIONS_ #define _SPEAKER_POSITIONS_ #define SPEAKER_FRONT_LEFT 0x00000001 #define SPEAKER_FRONT_RIGHT 0x00000002 #define SPEAKER_FRONT_CENTER 0x00000004 #define SPEAKER_LOW_FREQUENCY 0x00000008 #define SPEAKER_BACK_LEFT 0x00000010 #define SPEAKER_BACK_RIGHT 0x00000020 #define SPEAKER_FRONT_LEFT_OF_CENTER 0x00000040 #define SPEAKER_FRONT_RIGHT_OF_CENTER 0x00000080 #define SPEAKER_BACK_CENTER 0x00000100 #define SPEAKER_SIDE_LEFT 0x00000200 #define SPEAKER_SIDE_RIGHT 0x00000400 #define SPEAKER_TOP_CENTER 0x00000800 #define SPEAKER_TOP_FRONT_LEFT 0x00001000 #define SPEAKER_TOP_FRONT_CENTER 0x00002000 #define SPEAKER_TOP_FRONT_RIGHT 0x00004000 #define SPEAKER_TOP_BACK_LEFT 0x00008000 #define SPEAKER_TOP_BACK_CENTER 0x00010000 #define SPEAKER_TOP_BACK_RIGHT 0x00020000 #define SPEAKER_RESERVED 0x7FFC0000 #define SPEAKER_ALL 0x80000000 #endif /* _SPEAKER_POSITIONS_ */ /* DIB stuff */ #ifndef BI_BITFIELDS #define BI_BITFIELDS 3 #endif #ifndef QUERYDIBSUPPORT #define QUERYDIBSUPPORT 3073 #define QDI_SETDIBITS 1 #define QDI_GETDIBITS 2 #define QDI_DIBTOSCREEN 4 #define QDI_STRETCHDIB 8 #endif #ifndef NOBITMAP typedef struct tagEXBMINFOHEADER { BITMAPINFOHEADER bmi; DWORD biExtDataOffset; } EXBMINFOHEADER; #endif /* Video stuff */ #ifndef NONEWIC #ifndef ICTYPE_VIDEO #define ICTYPE_VIDEO mmioFOURCC('v', 'i', 'd', 'c') #define ICTYPE_AUDIO mmioFOURCC('a', 'u', 'd', 'c') #endif #endif #include #endif /* __WINE_MMREG_H */ #else /* __WIDL__ */ cpp_quote("#if 0") #pragma pack(push, 1) typedef struct tWAVEFORMATEX { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; [size_is(cbSize)] BYTE pExtraBytes[]; } WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX; typedef struct { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; WORD wValidBitsPerSample; DWORD dwChannelMask; GUID SubFormat; } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; #pragma pack(pop) cpp_quote("#endif") #endif /* __WIDL__ */ ================================================ FILE: wine/windows/mmstream.idl ================================================ /* * Copyright 2004 Christian Costa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; cpp_quote("#define MS_ERROR_CODE(x) MAKE_HRESULT(1, FACILITY_ITF, (x) + 0x400)") cpp_quote("#define MS_SUCCESS_CODE(x) MAKE_HRESULT(0, FACILITY_ITF, x)") cpp_quote("#define MS_S_PENDING MS_SUCCESS_CODE(1)") cpp_quote("#define MS_S_NOUPDATE MS_SUCCESS_CODE(2)") cpp_quote("#define MS_S_ENDOFSTREAM MS_SUCCESS_CODE(3)") cpp_quote("#define MS_E_SAMPLEALLOC MS_ERROR_CODE(1)") cpp_quote("#define MS_E_PURPOSEID MS_ERROR_CODE(2)") cpp_quote("#define MS_E_NOSTREAM MS_ERROR_CODE(3)") cpp_quote("#define MS_E_NOSEEKING MS_ERROR_CODE(4)") cpp_quote("#define MS_E_INCOMPATIBLE MS_ERROR_CODE(5)") cpp_quote("#define MS_E_BUSY MS_ERROR_CODE(6)") cpp_quote("#define MS_E_NOTINIT MS_ERROR_CODE(7)") cpp_quote("#define MS_E_SOURCEALREADYDEFINED MS_ERROR_CODE(8)") cpp_quote("#define MS_E_INVALIDSTREAMTYPE MS_ERROR_CODE(9)") cpp_quote("#define MS_E_NOTRUNNING MS_ERROR_CODE(10)") cpp_quote("DEFINE_GUID(MSPID_PrimaryVideo, 0xa35ff56a, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);") cpp_quote("DEFINE_GUID(MSPID_PrimaryAudio, 0xa35ff56b, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);") cpp_quote("#if 0") typedef void* PAPCFUNC; cpp_quote("#endif") typedef LONGLONG STREAM_TIME; typedef GUID MSPID; typedef REFGUID REFMSPID; typedef enum { STREAMTYPE_READ = 0, STREAMTYPE_WRITE = 1, STREAMTYPE_TRANSFORM = 2 } STREAM_TYPE; typedef enum { STREAMSTATE_STOP = 0, STREAMSTATE_RUN = 1 } STREAM_STATE; typedef enum { COMPSTAT_NOUPDATEOK = 0x00000001, COMPSTAT_WAIT = 0x00000002, COMPSTAT_ABORT = 0x00000004 } COMPLETION_STATUS_FLAGS; enum { MMSSF_HASCLOCK = 0x00000001, MMSSF_SUPPORTSEEK = 0x00000002, MMSSF_ASYNCHRONOUS = 0x00000004 }; enum { SSUPDATE_ASYNC = 0x00000001, SSUPDATE_CONTINUOUS = 0x00000002 }; interface IMultiMediaStream; interface IMediaStream; interface IStreamSample; [ object, local, uuid(B502D1BC-9A57-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IMultiMediaStream : IUnknown { HRESULT GetInformation( [out, optional] DWORD *pdwFlags, [out, optional] STREAM_TYPE *pStreamType); HRESULT GetMediaStream( [in] REFMSPID idPurpose, [out] IMediaStream **ppMediaStream); HRESULT EnumMediaStreams( [in] long Index, [out] IMediaStream **ppMediaStream); HRESULT GetState( [out] STREAM_STATE *pCurrentState); HRESULT SetState( [in] STREAM_STATE NewState); HRESULT GetTime( [out] STREAM_TIME *pCurrentTime); HRESULT GetDuration( [out] STREAM_TIME *pDuration); HRESULT Seek( [in] STREAM_TIME SeekTime); HRESULT GetEndOfStreamEventHandle( [out] HANDLE *phEOS); } [ object, uuid(B502D1BD-9A57-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IMediaStream : IUnknown { HRESULT GetMultiMediaStream( [out] IMultiMediaStream **ppMultiMediaStream); HRESULT GetInformation( [out, optional] MSPID *pPurposeId, [out, optional] STREAM_TYPE *pType); HRESULT SetSameFormat( [in] IMediaStream *pStreamThatHasDesiredFormat, [in] DWORD dwFlags); HRESULT AllocateSample( [in] DWORD dwFlags, [out] IStreamSample **ppSample); HRESULT CreateSharedSample( [in] IStreamSample *pExistingSample, [in] DWORD dwFlags, [out] IStreamSample **ppNewSample); HRESULT SendEndOfStream(DWORD dwFlags); } [ object, local, uuid(B502D1BE-9A57-11d0-8FDE-00C04FD9189D), pointer_default(unique) ] interface IStreamSample : IUnknown { HRESULT GetMediaStream( [in] IMediaStream **ppMediaStream); HRESULT GetSampleTimes( [out, optional] STREAM_TIME * pStartTime, [out, optional] STREAM_TIME * pEndTime, [out, optional] STREAM_TIME * pCurrentTime); HRESULT SetSampleTimes( [in, optional] const STREAM_TIME *pStartTime, [in, optional] const STREAM_TIME *pEndTime); HRESULT Update( [in] DWORD dwFlags, [in, optional] HANDLE hEvent, [in, optional] PAPCFUNC pfnAPC, [in, optional] DWORD dwAPCData); HRESULT CompletionStatus( [in] DWORD dwFlags, [in, optional] DWORD dwMilliseconds); } ================================================ FILE: wine/windows/mmsystem.h ================================================ /* * MMSYSTEM - Multimedia Wine Extension ... :-) * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MMSYSTEM_H #define __WINE_MMSYSTEM_H #ifdef __cplusplus extern "C" { #endif typedef LPSTR HPSTR; /* a huge version of LPSTR */ typedef LPCSTR HPCSTR; /* a huge version of LPCSTR */ typedef UINT* LPUINT; DECLARE_HANDLE(HDRVR); DECLARE_HANDLE(HWAVE); DECLARE_HANDLE(HWAVEIN); DECLARE_HANDLE(HWAVEOUT); DECLARE_HANDLE(HMIDI); DECLARE_HANDLE(HMIDIIN); DECLARE_HANDLE(HMIDIOUT); DECLARE_HANDLE(HMIDISTRM); DECLARE_HANDLE(HMIXER); DECLARE_HANDLE(HMIXEROBJ); DECLARE_HANDLE(HMMIO); typedef HMIDI *LPHMIDI; typedef HMIDIIN *LPHMIDIIN; typedef HMIDIOUT *LPHMIDIOUT; typedef HMIDISTRM *LPHMIDISTRM; typedef HMIXER *LPHMIXER; typedef HMIXEROBJ *LPHMIXEROBJ; typedef HWAVEIN *LPHWAVEIN; typedef HWAVEOUT *LPHWAVEOUT; #include typedef LRESULT (CALLBACK *DRIVERPROC)(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM); #define MAXWAVEDRIVERS 10 #define MAXMIDIDRIVERS 10 #define MAXAUXDRIVERS 10 #define MAXMCIDRIVERS 32 #define MAXMIXERDRIVERS 10 #define MAXPNAMELEN 32 /* max product name length (including NULL) */ #define MAXERRORLENGTH 256 /* max error text length (including NULL) */ #define MAX_JOYSTICKOEMVXDNAME 260 #ifndef _MCIERROR_ #define _MCIERROR_ typedef DWORD MCIERROR; #endif typedef UINT MMVERSION; #ifndef _MCIDEVICEID_ #define _MCIDEVICEID_ typedef UINT MCIDEVICEID; #endif typedef UINT MMRESULT; typedef struct mmtime_tag { UINT wType; union { DWORD ms; DWORD sample; DWORD cb; DWORD ticks; struct { BYTE hour; BYTE min; BYTE sec; BYTE frame; BYTE fps; BYTE dummy; BYTE pad[2]; } smpte; struct { DWORD songptrpos; } midi; } u; } MMTIME, *PMMTIME, *LPMMTIME; #define TIME_MS 0x0001 /* time in milliseconds */ #define TIME_SAMPLES 0x0002 /* number of wave samples */ #define TIME_BYTES 0x0004 /* current byte offset */ #define TIME_SMPTE 0x0008 /* SMPTE time */ #define TIME_MIDI 0x0010 /* MIDI time */ #define TIME_TICKS 0x0020 /* MIDI ticks */ #define MM_JOY1MOVE 0x3A0 /* joystick */ #define MM_JOY2MOVE 0x3A1 #define MM_JOY1ZMOVE 0x3A2 #define MM_JOY2ZMOVE 0x3A3 #define MM_JOY1BUTTONDOWN 0x3B5 #define MM_JOY2BUTTONDOWN 0x3B6 #define MM_JOY1BUTTONUP 0x3B7 #define MM_JOY2BUTTONUP 0x3B8 #define MM_MCINOTIFY 0x3B9 /* MCI */ #define MM_WOM_OPEN 0x3BB /* waveform output */ #define MM_WOM_CLOSE 0x3BC #define MM_WOM_DONE 0x3BD #define MM_WIM_OPEN 0x3BE /* waveform input */ #define MM_WIM_CLOSE 0x3BF #define MM_WIM_DATA 0x3C0 #define MM_MIM_OPEN 0x3C1 /* MIDI input */ #define MM_MIM_CLOSE 0x3C2 #define MM_MIM_DATA 0x3C3 #define MM_MIM_LONGDATA 0x3C4 #define MM_MIM_ERROR 0x3C5 #define MM_MIM_LONGERROR 0x3C6 #define MM_MOM_OPEN 0x3C7 /* MIDI output */ #define MM_MOM_CLOSE 0x3C8 #define MM_MOM_DONE 0x3C9 #define MM_MOM_POSITIONCB 0x3CA #define MM_MIM_MOREDATA 0x3CC #define MM_MIXM_LINE_CHANGE 0x3D0 #define MM_MIXM_CONTROL_CHANGE 0x3D1 #define MMSYSERR_BASE 0 #define WAVERR_BASE 32 #define MIDIERR_BASE 64 #define TIMERR_BASE 96 #define JOYERR_BASE 160 #define MCIERR_BASE 256 #define MCI_STRING_OFFSET 512 #define MCI_VD_OFFSET 1024 #define MCI_CD_OFFSET 1088 #define MCI_WAVE_OFFSET 1152 #define MCI_SEQ_OFFSET 1216 #define MMSYSERR_NOERROR 0 #define MMSYSERR_ERROR (MMSYSERR_BASE + 1) #define MMSYSERR_BADDEVICEID (MMSYSERR_BASE + 2) #define MMSYSERR_NOTENABLED (MMSYSERR_BASE + 3) #define MMSYSERR_ALLOCATED (MMSYSERR_BASE + 4) #define MMSYSERR_INVALHANDLE (MMSYSERR_BASE + 5) #define MMSYSERR_NODRIVER (MMSYSERR_BASE + 6) #define MMSYSERR_NOMEM (MMSYSERR_BASE + 7) #define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8) #define MMSYSERR_BADERRNUM (MMSYSERR_BASE + 9) #define MMSYSERR_INVALFLAG (MMSYSERR_BASE + 10) #define MMSYSERR_INVALPARAM (MMSYSERR_BASE + 11) #define MMSYSERR_HANDLEBUSY (MMSYSERR_BASE + 12) #define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE + 13) #define MMSYSERR_BADDB (MMSYSERR_BASE + 14) #define MMSYSERR_KEYNOTFOUND (MMSYSERR_BASE + 15) #define MMSYSERR_READERROR (MMSYSERR_BASE + 16) #define MMSYSERR_WRITEERROR (MMSYSERR_BASE + 17) #define MMSYSERR_DELETEERROR (MMSYSERR_BASE + 18) #define MMSYSERR_VALNOTFOUND (MMSYSERR_BASE + 19) #define MMSYSERR_NODRIVERCB (MMSYSERR_BASE + 20) #define MMSYSERR_MOREDATA (MMSYSERR_BASE + 21) #define MMSYSERR_LASTERROR (MMSYSERR_BASE + 21) #define CALLBACK_TYPEMASK __MSABI_LONG(0x00070000) /* callback type mask */ #define CALLBACK_NULL __MSABI_LONG(0x00000000) /* no callback */ #define CALLBACK_WINDOW __MSABI_LONG(0x00010000) /* dwCallback is a HWND */ #define CALLBACK_TASK __MSABI_LONG(0x00020000) /* dwCallback is a HTASK */ #define CALLBACK_THREAD (CALLBACK_TASK) /* dwCallback is a thread ID */ #define CALLBACK_FUNCTION __MSABI_LONG(0x00030000) /* dwCallback is a FARPROC */ #define CALLBACK_EVENT __MSABI_LONG(0x00050000) /* dwCallback is an EVENT Handler */ #define DRV_LOAD 0x0001 #define DRV_ENABLE 0x0002 #define DRV_OPEN 0x0003 #define DRV_CLOSE 0x0004 #define DRV_DISABLE 0x0005 #define DRV_FREE 0x0006 #define DRV_CONFIGURE 0x0007 #define DRV_QUERYCONFIGURE 0x0008 #define DRV_INSTALL 0x0009 #define DRV_REMOVE 0x000A #define DRV_EXITSESSION 0x000B #define DRV_EXITAPPLICATION 0x000C #define DRV_POWER 0x000F #define DRV_RESERVED 0x0800 #define DRV_MCI_FIRST DRV_RESERVED #define DRV_MCI_LAST (0xFFF + DRV_MCI_FIRST) #define DRV_USER 0x4000 #define DRVCNF_CANCEL 0x0000 #define DRVCNF_OK 0x0001 #define DRVCNF_RESTART 0x0002 #define DRVEA_NORMALEXIT 0x0001 #define DRVEA_ABNORMALEXIT 0x0002 #define DRV_SUCCESS 0x0001 #define DRV_FAILURE 0x0000 #define GND_FIRSTINSTANCEONLY 0x00000001 #define GND_FORWARD 0x00000000 #define GND_REVERSE 0x00000002 typedef struct tagDRVCONFIGINFO { DWORD dwDCISize; LPCWSTR lpszDCISectionName; LPCWSTR lpszDCIAliasName; } DRVCONFIGINFO, *LPDRVCONFIGINFO; LRESULT WINAPI DefDriverProc(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM); /* this sounds odd, but it's the way it is. OpenDriverA even disappeared * from latest SDK */ HDRVR WINAPI OpenDriverA(LPCSTR szDriverName, LPCSTR szSectionName, LPARAM lParam2); HDRVR WINAPI OpenDriver(LPCWSTR szDriverName, LPCWSTR szSectionName, LPARAM lParam2); LRESULT WINAPI CloseDriver(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2); LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message, LPARAM lParam1, LPARAM lParam2); HMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver); DWORD WINAPI GetDriverFlags(HDRVR hDriver); typedef void (CALLBACK *LPDRVCALLBACK)(HDRVR,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR); #ifndef MM_MICROSOFT #define MM_MICROSOFT 1 /* Microsoft Corp. */ #endif #define MM_MIDI_MAPPER 1 /* MIDI Mapper */ #define MM_WAVE_MAPPER 2 /* Wave Mapper */ #define MM_SNDBLST_MIDIOUT 3 /* Sound Blaster MIDI output port */ #define MM_SNDBLST_MIDIIN 4 /* Sound Blaster MIDI input port */ #define MM_SNDBLST_SYNTH 5 /* Sound Blaster internal synthesizer */ #define MM_SNDBLST_WAVEOUT 6 /* Sound Blaster waveform output */ #define MM_SNDBLST_WAVEIN 7 /* Sound Blaster waveform input */ #define MM_ADLIB 9 /* Ad Lib-compatible synthesizer */ #define MM_MPU401_MIDIOUT 10 /* MPU401-compatible MIDI output port */ #define MM_MPU401_MIDIIN 11 /* MPU401-compatible MIDI input port */ #define MM_PC_JOYSTICK 12 /* Joystick adapter */ #define MM_CREATIVE_SBP16_WAVEOUT 104 UINT WINAPI mmsystemGetVersion(void); BOOL WINAPI sndPlaySoundA(LPCSTR lpszSound, UINT fuSound); BOOL WINAPI sndPlaySoundW(LPCWSTR lpszSound, UINT fuSound); #define sndPlaySound WINELIB_NAME_AW(sndPlaySound) BOOL WINAPI PlaySoundA(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound); BOOL WINAPI PlaySoundW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound); #define PlaySound WINELIB_NAME_AW(PlaySound) #define SND_SYNC 0x0000 /* play synchronously (default) */ #define SND_ASYNC 0x0001 /* play asynchronously */ #define SND_NODEFAULT 0x0002 /* don't use default sound */ #define SND_MEMORY 0x0004 /* lpszSoundName points to a memory file */ #define SND_LOOP 0x0008 /* loop the sound until next sndPlaySound */ #define SND_NOSTOP 0x0010 /* don't stop any currently playing sound */ #define SND_NOWAIT __MSABI_LONG(0x00002000) /* don't wait if the driver is busy */ #define SND_ALIAS __MSABI_LONG(0x00010000) /* name is a registry alias */ #define SND_ALIAS_ID __MSABI_LONG(0x00110000) /* alias is a predefined ID */ #define SND_FILENAME __MSABI_LONG(0x00020000) /* name is file name */ #define SND_RESOURCE __MSABI_LONG(0x00040004) /* name is resource name or atom */ #define SND_PURGE __MSABI_LONG(0x00000040) /* purge all sounds */ #define SND_APPLICATION __MSABI_LONG(0x00000080) /* look for application specific association */ #define SND_ALIAS_START 0 #define sndAlias(ch0, ch1) (SND_ALIAS_START + ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8))) #define SND_ALIAS_SYSTEMASTERISK sndAlias('S', '*') #define SND_ALIAS_SYSTEMQUESTION sndAlias('S', '?') #define SND_ALIAS_SYSTEMHAND sndAlias('S', 'H') #define SND_ALIAS_SYSTEMEXIT sndAlias('S', 'E') #define SND_ALIAS_SYSTEMSTART sndAlias('S', 'S') #define SND_ALIAS_SYSTEMWELCOME sndAlias('S', 'W') #define SND_ALIAS_SYSTEMEXCLAMATION sndAlias('S', '!') #define SND_ALIAS_SYSTEMDEFAULT sndAlias('S', 'D') /* waveform audio error return values */ #define WAVERR_BADFORMAT (WAVERR_BASE + 0) /* unsupported wave format */ #define WAVERR_STILLPLAYING (WAVERR_BASE + 1) /* still something playing */ #define WAVERR_UNPREPARED (WAVERR_BASE + 2) /* header not prepared */ #define WAVERR_SYNC (WAVERR_BASE + 3) /* device is synchronous */ #define WAVERR_LASTERROR (WAVERR_BASE + 3) /* last error in range */ typedef LPDRVCALLBACK LPWAVECALLBACK; #define WOM_OPEN MM_WOM_OPEN #define WOM_CLOSE MM_WOM_CLOSE #define WOM_DONE MM_WOM_DONE #define WIM_OPEN MM_WIM_OPEN #define WIM_CLOSE MM_WIM_CLOSE #define WIM_DATA MM_WIM_DATA #define WAVE_MAPPER (-1) #define WAVE_FORMAT_QUERY 0x0001 #define WAVE_ALLOWSYNC 0x0002 #define WAVE_MAPPED 0x0004 #define WAVE_FORMAT_DIRECT 0x0008 #define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT) typedef struct wavehdr_tag { LPSTR lpData; DWORD dwBufferLength; DWORD dwBytesRecorded; DWORD_PTR dwUser; DWORD dwFlags; DWORD dwLoops; struct wavehdr_tag *lpNext; DWORD_PTR reserved; } WAVEHDR, *PWAVEHDR, *NPWAVEHDR, *LPWAVEHDR; #define WHDR_DONE 0x00000001 #define WHDR_PREPARED 0x00000002 #define WHDR_BEGINLOOP 0x00000004 #define WHDR_ENDLOOP 0x00000008 #define WHDR_INQUEUE 0x00000010 typedef struct tagWAVEOUTCAPSA { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; DWORD dwSupport; } WAVEOUTCAPSA, *LPWAVEOUTCAPSA; typedef struct tagWAVEOUTCAPSW { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; DWORD dwSupport; } WAVEOUTCAPSW, *LPWAVEOUTCAPSW; DECL_WINELIB_TYPE_AW(WAVEOUTCAPS) DECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS) typedef struct tagWAVEOUTCAPS2A { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; DWORD dwSupport; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } WAVEOUTCAPS2A, *LPWAVEOUTCAPS2A; typedef struct tagWAVEOUTCAPS2W { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; DWORD dwSupport; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } WAVEOUTCAPS2W, *LPWAVEOUTCAPS2W; DECL_WINELIB_TYPE_AW(WAVEOUTCAPS2) DECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS2) #define WAVECAPS_PITCH 0x0001 /* supports pitch control */ #define WAVECAPS_PLAYBACKRATE 0x0002 /* supports playback rate control */ #define WAVECAPS_VOLUME 0x0004 /* supports volume control */ #define WAVECAPS_LRVOLUME 0x0008 /* separate left-right volume control */ #define WAVECAPS_SYNC 0x0010 /* driver is synchronous and playing is blocking */ #define WAVECAPS_SAMPLEACCURATE 0x0020 /* position is sample accurate */ #define WAVECAPS_DIRECTSOUND 0x0040 /* ? */ typedef struct tagWAVEINCAPSA { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; } WAVEINCAPSA, *LPWAVEINCAPSA; typedef struct tagWAVEINCAPSW { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; } WAVEINCAPSW, *LPWAVEINCAPSW; DECL_WINELIB_TYPE_AW(WAVEINCAPS) DECL_WINELIB_TYPE_AW(LPWAVEINCAPS) typedef struct tagWAVEINCAPS2A { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } WAVEINCAPS2A, *LPWAVEINCAPS2A; typedef struct tagWAVEINCAPS2W { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; DWORD dwFormats; WORD wChannels; WORD wReserved1; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } WAVEINCAPS2W, *LPWAVEINCAPS2W; DECL_WINELIB_TYPE_AW(WAVEINCAPS2) DECL_WINELIB_TYPE_AW(LPWAVEINCAPS2) #define WAVE_INVALIDFORMAT 0x00000000 /* invalid format */ #define WAVE_FORMAT_1M08 0x00000001 /* 11.025 kHz, Mono, 8-bit */ #define WAVE_FORMAT_1S08 0x00000002 /* 11.025 kHz, Stereo, 8-bit */ #define WAVE_FORMAT_1M16 0x00000004 /* 11.025 kHz, Mono, 16-bit */ #define WAVE_FORMAT_1S16 0x00000008 /* 11.025 kHz, Stereo, 16-bit */ #define WAVE_FORMAT_2M08 0x00000010 /* 22.05 kHz, Mono, 8-bit */ #define WAVE_FORMAT_2S08 0x00000020 /* 22.05 kHz, Stereo, 8-bit */ #define WAVE_FORMAT_2M16 0x00000040 /* 22.05 kHz, Mono, 16-bit */ #define WAVE_FORMAT_2S16 0x00000080 /* 22.05 kHz, Stereo, 16-bit */ #define WAVE_FORMAT_4M08 0x00000100 /* 44.1 kHz, Mono, 8-bit */ #define WAVE_FORMAT_4S08 0x00000200 /* 44.1 kHz, Stereo, 8-bit */ #define WAVE_FORMAT_4M16 0x00000400 /* 44.1 kHz, Mono, 16-bit */ #define WAVE_FORMAT_4S16 0x00000800 /* 44.1 kHz, Stereo, 16-bit */ #define WAVE_FORMAT_48M08 0x00001000 /* 48 kHz, Mono, 8-bit */ #define WAVE_FORMAT_48S08 0x00002000 /* 48 kHz, Stereo, 8-bit */ #define WAVE_FORMAT_48M16 0x00004000 /* 48 kHz, Mono, 16-bit */ #define WAVE_FORMAT_48S16 0x00008000 /* 48 kHz, Stereo, 16-bit */ #define WAVE_FORMAT_96M08 0x00010000 /* 96 kHz, Mono, 8-bit */ #define WAVE_FORMAT_96S08 0x00020000 /* 96 kHz, Stereo, 8-bit */ #define WAVE_FORMAT_96M16 0x00040000 /* 96 kHz, Mono, 16-bit */ #define WAVE_FORMAT_96S16 0x00080000 /* 96 kHz, Stereo, 16-bit */ /* General format structure common to all formats, same for Win16 and Win32 */ typedef struct waveformat_tag { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; } WAVEFORMAT, *LPWAVEFORMAT; #define WAVE_FORMAT_PCM 1 typedef struct pcmwaveformat_tag { WAVEFORMAT wf; WORD wBitsPerSample; } PCMWAVEFORMAT, *LPPCMWAVEFORMAT; #ifndef _WAVEFORMATEX_ #define _WAVEFORMATEX_ /* ditto same for Win16 / Win32 */ typedef struct tWAVEFORMATEX { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX, *LPWAVEFORMATEX, *NPWAVEFORMATEX, *PWAVEFORMATEX; #endif typedef const WAVEFORMATEX *LPCWAVEFORMATEX; UINT WINAPI waveOutGetNumDevs(void); UINT WINAPI waveOutGetDevCapsA(UINT_PTR,LPWAVEOUTCAPSA,UINT); UINT WINAPI waveOutGetDevCapsW(UINT_PTR,LPWAVEOUTCAPSW,UINT); #define waveOutGetDevCaps WINELIB_NAME_AW(waveOutGetDevCaps) UINT WINAPI waveOutGetVolume(HWAVEOUT,DWORD*); UINT WINAPI waveOutSetVolume(HWAVEOUT,DWORD); UINT WINAPI waveOutGetErrorTextA(UINT,LPSTR,UINT); UINT WINAPI waveOutGetErrorTextW(UINT,LPWSTR,UINT); #define waveOutGetErrorText WINELIB_NAME_AW(waveOutGetErrorText) MMRESULT WINAPI waveOutOpen(HWAVEOUT*,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD); UINT WINAPI waveOutClose(HWAVEOUT); UINT WINAPI waveOutPrepareHeader(HWAVEOUT,WAVEHDR*,UINT); UINT WINAPI waveOutUnprepareHeader(HWAVEOUT,WAVEHDR*,UINT); UINT WINAPI waveOutWrite(HWAVEOUT,WAVEHDR*,UINT); UINT WINAPI waveOutPause(HWAVEOUT); UINT WINAPI waveOutRestart(HWAVEOUT); UINT WINAPI waveOutReset(HWAVEOUT); UINT WINAPI waveOutBreakLoop(HWAVEOUT); UINT WINAPI waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT); UINT WINAPI waveOutGetPitch(HWAVEOUT,DWORD*); UINT WINAPI waveOutSetPitch(HWAVEOUT,DWORD); UINT WINAPI waveOutGetPlaybackRate(HWAVEOUT,DWORD*); UINT WINAPI waveOutSetPlaybackRate(HWAVEOUT,DWORD); UINT WINAPI waveOutGetID(HWAVEOUT,UINT*); UINT WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD_PTR,DWORD_PTR); UINT WINAPI waveInGetNumDevs(void); UINT WINAPI waveInGetDevCapsA(UINT_PTR,LPWAVEINCAPSA,UINT); UINT WINAPI waveInGetDevCapsW(UINT_PTR,LPWAVEINCAPSW,UINT); #define waveInGetDevCaps WINELIB_NAME_AW(waveInGetDevCaps) UINT WINAPI waveInGetErrorTextA(UINT,LPSTR,UINT); UINT WINAPI waveInGetErrorTextW(UINT,LPWSTR,UINT); #define waveInGetErrorText WINELIB_NAME_AW(waveInGetErrorText) MMRESULT WINAPI waveInOpen(HWAVEIN*,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD); UINT WINAPI waveInClose(HWAVEIN); UINT WINAPI waveInPrepareHeader(HWAVEIN,WAVEHDR*,UINT); UINT WINAPI waveInUnprepareHeader(HWAVEIN,WAVEHDR*,UINT); UINT WINAPI waveInAddBuffer(HWAVEIN,WAVEHDR*,UINT); UINT WINAPI waveInStart(HWAVEIN); UINT WINAPI waveInStop(HWAVEIN); UINT WINAPI waveInReset(HWAVEIN); UINT WINAPI waveInGetPosition(HWAVEIN,LPMMTIME,UINT); UINT WINAPI waveInGetID(HWAVEIN,UINT*); UINT WINAPI waveInMessage(HWAVEIN,UINT,DWORD_PTR,DWORD_PTR); #define MIDIERR_UNPREPARED (MIDIERR_BASE + 0) #define MIDIERR_STILLPLAYING (MIDIERR_BASE + 1) #define MIDIERR_NOMAP (MIDIERR_BASE + 2) #define MIDIERR_NOTREADY (MIDIERR_BASE + 3) #define MIDIERR_NODEVICE (MIDIERR_BASE + 4) #define MIDIERR_INVALIDSETUP (MIDIERR_BASE + 5) #define MIDIERR_BADOPENMODE (MIDIERR_BASE + 6) #define MIDIERR_DONT_CONTINUE (MIDIERR_BASE + 7) #define MIDIERR_LASTERROR (MIDIERR_BASE + 7) typedef LPDRVCALLBACK LPMIDICALLBACK; #define MIDIPATCHSIZE 128 typedef WORD PATCHARRAY[MIDIPATCHSIZE]; typedef WORD *LPPATCHARRAY; typedef WORD KEYARRAY[MIDIPATCHSIZE]; typedef WORD *LPKEYARRAY; #define MIM_OPEN MM_MIM_OPEN #define MIM_CLOSE MM_MIM_CLOSE #define MIM_DATA MM_MIM_DATA #define MIM_LONGDATA MM_MIM_LONGDATA #define MIM_ERROR MM_MIM_ERROR #define MIM_LONGERROR MM_MIM_LONGERROR #define MIM_MOREDATA MM_MIM_MOREDATA #define MOM_OPEN MM_MOM_OPEN #define MOM_CLOSE MM_MOM_CLOSE #define MOM_DONE MM_MOM_DONE #define MOM_POSITIONCB MM_MOM_POSITIONCB /* device ID for MIDI mapper */ #define MIDIMAPPER (-1) #define MIDI_MAPPER (-1) /* Only on Win95 and up */ #define MIDI_IO_STATUS __MSABI_LONG(0x00000020) /* flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches() */ #define MIDI_CACHE_ALL 1 #define MIDI_CACHE_BESTFIT 2 #define MIDI_CACHE_QUERY 3 #define MIDI_UNCACHE 4 typedef struct tagMIDIOUTCAPSA { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wVoices; WORD wNotes; WORD wChannelMask; DWORD dwSupport; } MIDIOUTCAPSA, *LPMIDIOUTCAPSA; typedef struct tagMIDIOUTCAPSW { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wVoices; WORD wNotes; WORD wChannelMask; DWORD dwSupport; } MIDIOUTCAPSW, *LPMIDIOUTCAPSW; DECL_WINELIB_TYPE_AW(MIDIOUTCAPS) DECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS) typedef struct tagMIDIOUTCAPS2A { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wVoices; WORD wNotes; WORD wChannelMask; DWORD dwSupport; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } MIDIOUTCAPS2A, *LPMIDIOUTCAPS2A; typedef struct tagMIDIOUTCAPS2W { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wVoices; WORD wNotes; WORD wChannelMask; DWORD dwSupport; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } MIDIOUTCAPS2W, *LPMIDIOUTCAPS2W; DECL_WINELIB_TYPE_AW(MIDIOUTCAPS2) DECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS2) #define MOD_MIDIPORT 1 /* output port */ #define MOD_SYNTH 2 /* generic internal synth */ #define MOD_SQSYNTH 3 /* square wave internal synth */ #define MOD_FMSYNTH 4 /* FM internal synth */ #define MOD_MAPPER 5 /* MIDI mapper */ #define MOD_WAVETABLE 6 /* hardware wavetable internal synth */ #define MOD_SWSYNTH 7 /* software synth */ #define MIDICAPS_VOLUME 0x0001 /* supports volume control */ #define MIDICAPS_LRVOLUME 0x0002 /* separate left-right volume control */ #define MIDICAPS_CACHE 0x0004 #define MIDICAPS_STREAM 0x0008 /* capable of supporting stream buffer */ typedef struct tagMIDIINCAPSA { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwSupport; } MIDIINCAPSA, *LPMIDIINCAPSA; typedef struct tagMIDIINCAPSW { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; DWORD dwSupport; } MIDIINCAPSW, *LPMIDIINCAPSW; DECL_WINELIB_TYPE_AW(MIDIINCAPS) DECL_WINELIB_TYPE_AW(LPMIDIINCAPS) typedef struct tagMIDIINCAPS2A { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD dwSupport; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } MIDIINCAPS2A, *LPMIDIINCAPS2A; typedef struct tagMIDIINCAPS2W { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; DWORD dwSupport; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } MIDIINCAPS2W, *LPMIDIINCAPS2W; DECL_WINELIB_TYPE_AW(MIDIINCAPS2) DECL_WINELIB_TYPE_AW(LPMIDIINCAPS2) /* It seems that Win32 has a slightly different structure than Win 16. * sigh.... */ typedef struct midihdr_tag { LPSTR lpData; DWORD dwBufferLength; DWORD dwBytesRecorded; DWORD_PTR dwUser; DWORD dwFlags; struct midihdr_tag *lpNext; DWORD_PTR reserved; /* Win 32 extended the structure with these 2 fields */ DWORD dwOffset; DWORD_PTR dwReserved[8]; } MIDIHDR, *LPMIDIHDR; #define MHDR_DONE 0x00000001 /* done bit */ #define MHDR_PREPARED 0x00000002 /* set if header prepared */ #define MHDR_INQUEUE 0x00000004 /* reserved for driver */ #define MHDR_ISSTRM 0x00000008 /* data is sent by Stream functions */ typedef struct midiproptempo_tag { DWORD cbStruct; DWORD dwTempo; } MIDIPROPTEMPO, *LPMIDIPROPTEMPO; typedef struct midiproptimediv_tag { DWORD cbStruct; DWORD dwTimeDiv; } MIDIPROPTIMEDIV, *LPMIDIPROPTIMEDIV; #define MIDIPROP_GET 0x40000000 #define MIDIPROP_SET 0x80000000 #define MIDIPROP_TEMPO 0x00000002 #define MIDIPROP_TIMEDIV 0x00000001 typedef struct midievent_tag { DWORD dwDeltaTime; /* Time, in MIDI ticks, between the previous * event and the current event. */ DWORD dwStreamID; /* Reserved; must be zero. */ DWORD dwEvent; /* event => see MEVT_XXX macros */ DWORD dwParms[1]; /* extra pmts to dwEvent if F_LONG is set */ } MIDIEVENT, *LPMIDIEVENT; #define MEVT_EVENTTYPE(x) ((BYTE) (((x)>>24)&0xFF)) #define MEVT_EVENTPARM(x) ((DWORD) ((x)&0x00FFFFFF)) #define MEVT_F_CALLBACK __MSABI_LONG(0x40000000) #define MEVT_F_LONG __MSABI_LONG(0x80000000) #define MEVT_F_SHORT __MSABI_LONG(0x00000000) #define MEVT_COMMENT ((BYTE)0x82) #define MEVT_LONGMSG ((BYTE)0x80) #define MEVT_NOP ((BYTE)0x02) #define MEVT_SHORTMSG ((BYTE)0x00) #define MEVT_TEMPO ((BYTE)0x01) #define MEVT_VERSION ((BYTE)0x84) UINT WINAPI midiOutGetNumDevs(void); UINT WINAPI midiOutGetDevCapsA(UINT_PTR,LPMIDIOUTCAPSA,UINT); UINT WINAPI midiOutGetDevCapsW(UINT_PTR,LPMIDIOUTCAPSW,UINT); #define midiOutGetDevCaps WINELIB_NAME_AW(midiOutGetDevCaps) UINT WINAPI midiOutGetVolume(HMIDIOUT,DWORD*); UINT WINAPI midiOutSetVolume(HMIDIOUT,DWORD); UINT WINAPI midiOutGetErrorTextA(UINT,LPSTR,UINT); UINT WINAPI midiOutGetErrorTextW(UINT,LPWSTR,UINT); #define midiOutGetErrorText WINELIB_NAME_AW(midiOutGetErrorText) MMRESULT WINAPI midiOutOpen(LPHMIDIOUT,UINT,DWORD_PTR,DWORD_PTR,DWORD); UINT WINAPI midiOutClose(HMIDIOUT); UINT WINAPI midiOutPrepareHeader(HMIDIOUT,MIDIHDR*,UINT); UINT WINAPI midiOutUnprepareHeader(HMIDIOUT,MIDIHDR*,UINT); UINT WINAPI midiOutShortMsg(HMIDIOUT,DWORD); UINT WINAPI midiOutLongMsg(HMIDIOUT,MIDIHDR*,UINT); UINT WINAPI midiOutReset(HMIDIOUT); UINT WINAPI midiOutCachePatches(HMIDIOUT,UINT,WORD*,UINT); UINT WINAPI midiOutCacheDrumPatches(HMIDIOUT,UINT,WORD*,UINT); UINT WINAPI midiOutGetID(HMIDIOUT,UINT*); UINT WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD_PTR,DWORD_PTR); UINT WINAPI midiInGetNumDevs(void); UINT WINAPI midiInGetDevCapsA(UINT_PTR,LPMIDIINCAPSA,UINT); UINT WINAPI midiInGetDevCapsW(UINT_PTR,LPMIDIINCAPSW,UINT); #define midiInGetDevCaps WINELIB_NAME_AW(midiInGetDevCaps) UINT WINAPI midiInGetErrorTextA(UINT,LPSTR,UINT); UINT WINAPI midiInGetErrorTextW(UINT,LPWSTR,UINT); #define midiInGetErrorText WINELIB_NAME_AW(midiInGetErrorText) MMRESULT WINAPI midiInOpen(LPHMIDIIN,UINT,DWORD_PTR,DWORD_PTR,DWORD); UINT WINAPI midiInClose(HMIDIIN); UINT WINAPI midiInPrepareHeader(HMIDIIN,MIDIHDR*,UINT); UINT WINAPI midiInUnprepareHeader(HMIDIIN,MIDIHDR*,UINT); UINT WINAPI midiInAddBuffer(HMIDIIN,MIDIHDR*,UINT); UINT WINAPI midiInStart(HMIDIIN); UINT WINAPI midiInStop(HMIDIIN); UINT WINAPI midiInReset(HMIDIIN); UINT WINAPI midiInGetID(HMIDIIN,UINT*); UINT WINAPI midiInMessage(HMIDIIN,UINT,DWORD_PTR,DWORD_PTR); MMRESULT WINAPI midiStreamClose(HMIDISTRM hms); MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD_PTR,DWORD_PTR,DWORD); MMRESULT WINAPI midiStreamOut(HMIDISTRM hms, LPMIDIHDR lpMidiHdr, UINT cbMidiHdr); MMRESULT WINAPI midiStreamPause(HMIDISTRM hms); MMRESULT WINAPI midiStreamPosition(HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt); MMRESULT WINAPI midiStreamProperty(HMIDISTRM hms, LPBYTE lpPropData, DWORD dwProperty); MMRESULT WINAPI midiStreamRestart(HMIDISTRM hms); MMRESULT WINAPI midiStreamStop(HMIDISTRM hms); #define AUX_MAPPER (-1) typedef struct tagAUXCAPSA { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wReserved1; DWORD dwSupport; } AUXCAPSA, *LPAUXCAPSA; typedef struct tagAUXCAPSW { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wReserved1; DWORD dwSupport; } AUXCAPSW, *LPAUXCAPSW; DECL_WINELIB_TYPE_AW(AUXCAPS) DECL_WINELIB_TYPE_AW(LPAUXCAPS) typedef struct tagAUXCAPS2A { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wReserved1; DWORD dwSupport; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } AUXCAPS2A, *LPAUXCAPS2A; typedef struct tagAUXCAPS2W { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; WORD wTechnology; WORD wReserved1; DWORD dwSupport; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } AUXCAPS2W, *LPAUXCAPS2W; DECL_WINELIB_TYPE_AW(AUXCAPS2) DECL_WINELIB_TYPE_AW(LPAUXCAPS2) #define AUXCAPS_CDAUDIO 1 /* audio from internal CD-ROM drive */ #define AUXCAPS_AUXIN 2 /* audio from auxiliary input jacks */ #define AUXCAPS_VOLUME 0x0001 /* supports volume control */ #define AUXCAPS_LRVOLUME 0x0002 /* separate left-right volume control */ UINT WINAPI auxGetNumDevs(void); UINT WINAPI auxGetDevCapsA(UINT_PTR,LPAUXCAPSA,UINT); UINT WINAPI auxGetDevCapsW(UINT_PTR,LPAUXCAPSW,UINT); #define auxGetDevCaps WINELIB_NAME_AW(auxGetDevCaps) UINT WINAPI auxSetVolume(UINT,DWORD); UINT WINAPI auxGetVolume(UINT,LPDWORD); UINT WINAPI auxOutMessage(UINT,UINT,DWORD_PTR,DWORD_PTR); #define TIMERR_NOERROR (0) /* no error */ #define TIMERR_NOCANDO (TIMERR_BASE+1) /* request not completed */ #define TIMERR_STRUCT (TIMERR_BASE+33) /* time struct size */ typedef void (CALLBACK *LPTIMECALLBACK)(UINT,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR); #define TIME_ONESHOT 0x0000 /* program timer for single event */ #define TIME_PERIODIC 0x0001 /* program for continuous periodic event */ #define TIME_CALLBACK_FUNCTION 0x0000 /* callback is function */ #define TIME_CALLBACK_EVENT_SET 0x0010 /* callback is event - use SetEvent */ #define TIME_CALLBACK_EVENT_PULSE 0x0020 /* callback is event - use PulseEvent */ #define TIME_KILL_SYNCHRONOUS 0x0100 typedef struct timecaps_tag { UINT wPeriodMin; UINT wPeriodMax; } TIMECAPS, *LPTIMECAPS; MMRESULT WINAPI timeGetSystemTime(LPMMTIME,UINT); DWORD WINAPI timeGetTime(void); /* same for win32/win16 */ MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD_PTR,UINT); MMRESULT WINAPI timeKillEvent(UINT); MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS,UINT); MMRESULT WINAPI timeBeginPeriod(UINT); MMRESULT WINAPI timeEndPeriod(UINT); #define JOYERR_NOERROR (0) /* no error */ #define JOYERR_PARMS (JOYERR_BASE+5) /* bad parameters */ #define JOYERR_NOCANDO (JOYERR_BASE+6) /* request not completed */ #define JOYERR_UNPLUGGED (JOYERR_BASE+7) /* joystick is unplugged */ /* JOYINFO, JOYINFOEX, MM_JOY* */ #define JOY_BUTTON1 0x0001 #define JOY_BUTTON2 0x0002 #define JOY_BUTTON3 0x0004 #define JOY_BUTTON4 0x0008 #define JOY_BUTTON1CHG 0x0100 #define JOY_BUTTON2CHG 0x0200 #define JOY_BUTTON3CHG 0x0400 #define JOY_BUTTON4CHG 0x0800 #define JOYSTICKID1 0 #define JOYSTICKID2 1 /* JOYCAPS.wCaps */ #define JOYCAPS_HASZ 0x0001 #define JOYCAPS_HASR 0x0002 #define JOYCAPS_HASU 0x0004 #define JOYCAPS_HASV 0x0008 #define JOYCAPS_HASPOV 0x0010 #define JOYCAPS_POV4DIR 0x0020 #define JOYCAPS_POVCTS 0x0040 /* JOYINFOEX stuff */ #define JOY_POVCENTERED (WORD) -1 #define JOY_POVFORWARD 0 #define JOY_POVRIGHT 9000 #define JOY_POVBACKWARD 18000 #define JOY_POVLEFT 27000 #define JOY_RETURNX 0x00000001 #define JOY_RETURNY 0x00000002 #define JOY_RETURNZ 0x00000004 #define JOY_RETURNR 0x00000008 #define JOY_RETURNU 0x00000010 #define JOY_RETURNV 0x00000020 #define JOY_RETURNPOV 0x00000040 #define JOY_RETURNBUTTONS 0x00000080 #define JOY_RETURNRAWDATA 0x00000100 #define JOY_RETURNPOVCTS 0x00000200 #define JOY_RETURNCENTERED 0x00000400 #define JOY_USEDEADZONE 0x00000800 #define JOY_RETURNALL (JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | \ JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | \ JOY_RETURNPOV | JOY_RETURNBUTTONS) #define JOY_CAL_READALWAYS 0x00010000 #define JOY_CAL_READXYONLY 0x00020000 #define JOY_CAL_READ3 0x00040000 #define JOY_CAL_READ4 0x00080000 #define JOY_CAL_READXONLY 0x00100000 #define JOY_CAL_READYONLY 0x00200000 #define JOY_CAL_READ5 0x00400000 #define JOY_CAL_READ6 0x00800000 #define JOY_CAL_READZONLY 0x01000000 #define JOY_CAL_READRONLY 0x02000000 #define JOY_CAL_READUONLY 0x04000000 #define JOY_CAL_READVONLY 0x08000000 typedef struct tagJOYCAPSA { WORD wMid; WORD wPid; CHAR szPname[MAXPNAMELEN]; UINT wXmin; UINT wXmax; UINT wYmin; UINT wYmax; UINT wZmin; UINT wZmax; UINT wNumButtons; UINT wPeriodMin; UINT wPeriodMax; UINT wRmin; UINT wRmax; UINT wUmin; UINT wUmax; UINT wVmin; UINT wVmax; UINT wCaps; UINT wMaxAxes; UINT wNumAxes; UINT wMaxButtons; CHAR szRegKey[MAXPNAMELEN]; CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; } JOYCAPSA, *LPJOYCAPSA; typedef struct tagJOYCAPSW { WORD wMid; WORD wPid; WCHAR szPname[MAXPNAMELEN]; UINT wXmin; UINT wXmax; UINT wYmin; UINT wYmax; UINT wZmin; UINT wZmax; UINT wNumButtons; UINT wPeriodMin; UINT wPeriodMax; UINT wRmin; UINT wRmax; UINT wUmin; UINT wUmax; UINT wVmin; UINT wVmax; UINT wCaps; UINT wMaxAxes; UINT wNumAxes; UINT wMaxButtons; WCHAR szRegKey[MAXPNAMELEN]; WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; } JOYCAPSW, *LPJOYCAPSW; DECL_WINELIB_TYPE_AW(JOYCAPS) DECL_WINELIB_TYPE_AW(LPJOYCAPS) typedef struct tagJOYCAPS2A { WORD wMid; WORD wPid; CHAR szPname[MAXPNAMELEN]; UINT wXmin; UINT wXmax; UINT wYmin; UINT wYmax; UINT wZmin; UINT wZmax; UINT wNumButtons; UINT wPeriodMin; UINT wPeriodMax; UINT wRmin; UINT wRmax; UINT wUmin; UINT wUmax; UINT wVmin; UINT wVmax; UINT wCaps; UINT wMaxAxes; UINT wNumAxes; UINT wMaxButtons; CHAR szRegKey[MAXPNAMELEN]; CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } JOYCAPS2A, *LPJOYCAPS2A; typedef struct tagJOYCAPS2W { WORD wMid; WORD wPid; WCHAR szPname[MAXPNAMELEN]; UINT wXmin; UINT wXmax; UINT wYmin; UINT wYmax; UINT wZmin; UINT wZmax; UINT wNumButtons; UINT wPeriodMin; UINT wPeriodMax; UINT wRmin; UINT wRmax; UINT wUmin; UINT wUmax; UINT wVmin; UINT wVmax; UINT wCaps; UINT wMaxAxes; UINT wNumAxes; UINT wMaxButtons; WCHAR szRegKey[MAXPNAMELEN]; WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } JOYCAPS2W, *LPJOYCAPS2W; DECL_WINELIB_TYPE_AW(JOYCAPS2) DECL_WINELIB_TYPE_AW(LPJOYCAPS2) typedef struct joyinfo_tag { UINT wXpos; UINT wYpos; UINT wZpos; UINT wButtons; } JOYINFO, *LPJOYINFO; typedef struct joyinfoex_tag { DWORD dwSize; DWORD dwFlags; DWORD dwXpos; DWORD dwYpos; DWORD dwZpos; DWORD dwRpos; DWORD dwUpos; DWORD dwVpos; DWORD dwButtons; DWORD dwButtonNumber; DWORD dwPOV; DWORD dwReserved1; DWORD dwReserved2; } JOYINFOEX,*LPJOYINFOEX; MMRESULT WINAPI joyGetDevCapsA(UINT_PTR,LPJOYCAPSA,UINT); MMRESULT WINAPI joyGetDevCapsW(UINT_PTR,LPJOYCAPSW,UINT); #define joyGetDevCaps WINELIB_NAME_AW(joyGetDevCaps) UINT WINAPI joyGetNumDevs(void); MMRESULT WINAPI joyGetPos(UINT,LPJOYINFO); MMRESULT WINAPI joyGetPosEx(UINT,LPJOYINFOEX); MMRESULT WINAPI joyGetThreshold(UINT,UINT*); MMRESULT WINAPI joyReleaseCapture(UINT); MMRESULT WINAPI joySetCapture(HWND,UINT,UINT,BOOL); MMRESULT WINAPI joySetThreshold(UINT,UINT); #define MIXERR_BASE 1024 #define MIXERR_INVALLINE (MIXERR_BASE + 0) #define MIXERR_INVALCONTROL (MIXERR_BASE + 1) #define MIXERR_INVALVALUE (MIXERR_BASE + 2) #define MIXERR_LASTERROR (MIXERR_BASE + 2) typedef struct tagMIXERCAPSA { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD fdwSupport; DWORD cDestinations; } MIXERCAPSA,*LPMIXERCAPSA; typedef struct tagMIXERCAPSW { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; DWORD fdwSupport; DWORD cDestinations; } MIXERCAPSW,*LPMIXERCAPSW; DECL_WINELIB_TYPE_AW(MIXERCAPS) DECL_WINELIB_TYPE_AW(LPMIXERCAPS) typedef struct tagMIXERCAPS2A { WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; DWORD fdwSupport; DWORD cDestinations; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } MIXERCAPS2A,*LPMIXERCAPS2A; typedef struct tagMIXERCAPS2W { WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; DWORD fdwSupport; DWORD cDestinations; GUID ManufacturerGuid; GUID ProductGuid; GUID NameGuid; } MIXERCAPS2W,*LPMIXERCAPS2W; DECL_WINELIB_TYPE_AW(MIXERCAPS2) DECL_WINELIB_TYPE_AW(LPMIXERCAPS2) #define MIXER_SHORT_NAME_CHARS 16 #define MIXER_LONG_NAME_CHARS 64 /* MIXERLINE.fdwLine */ #define MIXERLINE_LINEF_ACTIVE 0x00000001 #define MIXERLINE_LINEF_DISCONNECTED 0x00008000 #define MIXERLINE_LINEF_SOURCE 0x80000000 /* Mixer flags */ #define MIXER_OBJECTF_HANDLE __MSABI_LONG(0x80000000) #define MIXER_OBJECTF_MIXER __MSABI_LONG(0x00000000) #define MIXER_OBJECTF_HMIXER (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER) #define MIXER_OBJECTF_WAVEOUT __MSABI_LONG(0x10000000) #define MIXER_OBJECTF_HWAVEOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT) #define MIXER_OBJECTF_WAVEIN __MSABI_LONG(0x20000000) #define MIXER_OBJECTF_HWAVEIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN) #define MIXER_OBJECTF_MIDIOUT __MSABI_LONG(0x30000000) #define MIXER_OBJECTF_HMIDIOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT) #define MIXER_OBJECTF_MIDIIN __MSABI_LONG(0x40000000) #define MIXER_OBJECTF_HMIDIIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN) #define MIXER_OBJECTF_AUX __MSABI_LONG(0x50000000) /* MIXERLINE.dwComponentType */ /* component types for destinations and sources */ #define MIXERLINE_COMPONENTTYPE_DST_FIRST __MSABI_LONG(0x00000000) #define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0) #define MIXERLINE_COMPONENTTYPE_DST_DIGITAL (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1) #define MIXERLINE_COMPONENTTYPE_DST_LINE (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2) #define MIXERLINE_COMPONENTTYPE_DST_MONITOR (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3) #define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4) #define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5) #define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6) #define MIXERLINE_COMPONENTTYPE_DST_WAVEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7) #define MIXERLINE_COMPONENTTYPE_DST_VOICEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8) #define MIXERLINE_COMPONENTTYPE_DST_LAST (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8) #define MIXERLINE_COMPONENTTYPE_SRC_FIRST __MSABI_LONG(0x00001000) #define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0) #define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1) #define MIXERLINE_COMPONENTTYPE_SRC_LINE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2) #define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3) #define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4) #define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5) #define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6) #define MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7) #define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8) #define MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9) #define MIXERLINE_COMPONENTTYPE_SRC_ANALOG (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10) #define MIXERLINE_COMPONENTTYPE_SRC_LAST (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10) /* MIXERLINE.Target.dwType */ #define MIXERLINE_TARGETTYPE_UNDEFINED 0 #define MIXERLINE_TARGETTYPE_WAVEOUT 1 #define MIXERLINE_TARGETTYPE_WAVEIN 2 #define MIXERLINE_TARGETTYPE_MIDIOUT 3 #define MIXERLINE_TARGETTYPE_MIDIIN 4 #define MIXERLINE_TARGETTYPE_AUX 5 typedef struct tagMIXERLINEA { DWORD cbStruct; DWORD dwDestination; DWORD dwSource; DWORD dwLineID; DWORD fdwLine; DWORD_PTR dwUser; DWORD dwComponentType; DWORD cChannels; DWORD cConnections; DWORD cControls; CHAR szShortName[MIXER_SHORT_NAME_CHARS]; CHAR szName[MIXER_LONG_NAME_CHARS]; struct { DWORD dwType; DWORD dwDeviceID; WORD wMid; WORD wPid; MMVERSION vDriverVersion; CHAR szPname[MAXPNAMELEN]; } Target; } MIXERLINEA, *LPMIXERLINEA; typedef struct tagMIXERLINEW { DWORD cbStruct; DWORD dwDestination; DWORD dwSource; DWORD dwLineID; DWORD fdwLine; DWORD_PTR dwUser; DWORD dwComponentType; DWORD cChannels; DWORD cConnections; DWORD cControls; WCHAR szShortName[MIXER_SHORT_NAME_CHARS]; WCHAR szName[MIXER_LONG_NAME_CHARS]; struct { DWORD dwType; DWORD dwDeviceID; WORD wMid; WORD wPid; MMVERSION vDriverVersion; WCHAR szPname[MAXPNAMELEN]; } Target; } MIXERLINEW, *LPMIXERLINEW; DECL_WINELIB_TYPE_AW(MIXERLINE) DECL_WINELIB_TYPE_AW(LPMIXERLINE) /* MIXERCONTROL.fdwControl */ #define MIXERCONTROL_CONTROLF_UNIFORM __MSABI_LONG(0x00000001) #define MIXERCONTROL_CONTROLF_MULTIPLE __MSABI_LONG(0x00000002) #define MIXERCONTROL_CONTROLF_DISABLED __MSABI_LONG(0x80000000) /* MIXERCONTROL_CONTROLTYPE_xxx building block defines */ #define MIXERCONTROL_CT_CLASS_MASK __MSABI_LONG(0xF0000000) #define MIXERCONTROL_CT_CLASS_CUSTOM __MSABI_LONG(0x00000000) #define MIXERCONTROL_CT_CLASS_METER __MSABI_LONG(0x10000000) #define MIXERCONTROL_CT_CLASS_SWITCH __MSABI_LONG(0x20000000) #define MIXERCONTROL_CT_CLASS_NUMBER __MSABI_LONG(0x30000000) #define MIXERCONTROL_CT_CLASS_SLIDER __MSABI_LONG(0x40000000) #define MIXERCONTROL_CT_CLASS_FADER __MSABI_LONG(0x50000000) #define MIXERCONTROL_CT_CLASS_TIME __MSABI_LONG(0x60000000) #define MIXERCONTROL_CT_CLASS_LIST __MSABI_LONG(0x70000000) #define MIXERCONTROL_CT_SUBCLASS_MASK __MSABI_LONG(0x0F000000) #define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN __MSABI_LONG(0x00000000) #define MIXERCONTROL_CT_SC_SWITCH_BUTTON __MSABI_LONG(0x01000000) #define MIXERCONTROL_CT_SC_METER_POLLED __MSABI_LONG(0x00000000) #define MIXERCONTROL_CT_SC_TIME_MICROSECS __MSABI_LONG(0x00000000) #define MIXERCONTROL_CT_SC_TIME_MILLISECS __MSABI_LONG(0x01000000) #define MIXERCONTROL_CT_SC_LIST_SINGLE __MSABI_LONG(0x00000000) #define MIXERCONTROL_CT_SC_LIST_MULTIPLE __MSABI_LONG(0x01000000) #define MIXERCONTROL_CT_UNITS_MASK __MSABI_LONG(0x00FF0000) #define MIXERCONTROL_CT_UNITS_CUSTOM __MSABI_LONG(0x00000000) #define MIXERCONTROL_CT_UNITS_BOOLEAN __MSABI_LONG(0x00010000) #define MIXERCONTROL_CT_UNITS_SIGNED __MSABI_LONG(0x00020000) #define MIXERCONTROL_CT_UNITS_UNSIGNED __MSABI_LONG(0x00030000) #define MIXERCONTROL_CT_UNITS_DECIBELS __MSABI_LONG(0x00040000) /* in 10ths */ #define MIXERCONTROL_CT_UNITS_PERCENT __MSABI_LONG(0x00050000) /* in 10ths */ /* Commonly used control types for specifying MIXERCONTROL.dwControlType */ #define MIXERCONTROL_CONTROLTYPE_CUSTOM (MIXERCONTROL_CT_CLASS_CUSTOM | MIXERCONTROL_CT_UNITS_CUSTOM) #define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_BOOLEAN) #define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_SIGNED) #define MIXERCONTROL_CONTROLTYPE_PEAKMETER (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1) #define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_UNSIGNED) #define MIXERCONTROL_CONTROLTYPE_BOOLEAN (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BOOLEAN | MIXERCONTROL_CT_UNITS_BOOLEAN) #define MIXERCONTROL_CONTROLTYPE_ONOFF (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1) #define MIXERCONTROL_CONTROLTYPE_MUTE (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2) #define MIXERCONTROL_CONTROLTYPE_MONO (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3) #define MIXERCONTROL_CONTROLTYPE_LOUDNESS (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4) #define MIXERCONTROL_CONTROLTYPE_STEREOENH (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5) #define MIXERCONTROL_CONTROLTYPE_BASS_BOOST (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 0x00002277) #define MIXERCONTROL_CONTROLTYPE_BUTTON (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BUTTON | MIXERCONTROL_CT_UNITS_BOOLEAN) #define MIXERCONTROL_CONTROLTYPE_DECIBELS (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_DECIBELS) #define MIXERCONTROL_CONTROLTYPE_SIGNED (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_SIGNED) #define MIXERCONTROL_CONTROLTYPE_UNSIGNED (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_UNSIGNED) #define MIXERCONTROL_CONTROLTYPE_PERCENT (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_PERCENT) #define MIXERCONTROL_CONTROLTYPE_SLIDER (MIXERCONTROL_CT_CLASS_SLIDER | MIXERCONTROL_CT_UNITS_SIGNED) #define MIXERCONTROL_CONTROLTYPE_PAN (MIXERCONTROL_CONTROLTYPE_SLIDER + 1) #define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN (MIXERCONTROL_CONTROLTYPE_SLIDER + 2) #define MIXERCONTROL_CONTROLTYPE_FADER (MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED) #define MIXERCONTROL_CONTROLTYPE_VOLUME (MIXERCONTROL_CONTROLTYPE_FADER + 1) #define MIXERCONTROL_CONTROLTYPE_BASS (MIXERCONTROL_CONTROLTYPE_FADER + 2) #define MIXERCONTROL_CONTROLTYPE_TREBLE (MIXERCONTROL_CONTROLTYPE_FADER + 3) #define MIXERCONTROL_CONTROLTYPE_EQUALIZER (MIXERCONTROL_CONTROLTYPE_FADER + 4) #define MIXERCONTROL_CONTROLTYPE_SINGLESELECT (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_SINGLE | MIXERCONTROL_CT_UNITS_BOOLEAN) #define MIXERCONTROL_CONTROLTYPE_MUX (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1) #define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_MULTIPLE | MIXERCONTROL_CT_UNITS_BOOLEAN) #define MIXERCONTROL_CONTROLTYPE_MIXER (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1) #define MIXERCONTROL_CONTROLTYPE_MICROTIME (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MICROSECS | MIXERCONTROL_CT_UNITS_UNSIGNED) #define MIXERCONTROL_CONTROLTYPE_MILLITIME (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MILLISECS | MIXERCONTROL_CT_UNITS_UNSIGNED) typedef struct tagMIXERCONTROLA { DWORD cbStruct; DWORD dwControlID; DWORD dwControlType; DWORD fdwControl; DWORD cMultipleItems; CHAR szShortName[MIXER_SHORT_NAME_CHARS]; CHAR szName[MIXER_LONG_NAME_CHARS]; union { struct { LONG lMinimum; LONG lMaximum; } DUMMYSTRUCTNAME; struct { DWORD dwMinimum; DWORD dwMaximum; } DUMMYSTRUCTNAME1; DWORD dwReserved[6]; } Bounds; union { DWORD cSteps; DWORD cbCustomData; DWORD dwReserved[6]; } Metrics; } MIXERCONTROLA, *LPMIXERCONTROLA; typedef struct MIXERCONTROLW { DWORD cbStruct; DWORD dwControlID; DWORD dwControlType; DWORD fdwControl; DWORD cMultipleItems; WCHAR szShortName[MIXER_SHORT_NAME_CHARS]; WCHAR szName[MIXER_LONG_NAME_CHARS]; union { struct { LONG lMinimum; LONG lMaximum; } DUMMYSTRUCTNAME; struct { DWORD dwMinimum; DWORD dwMaximum; } DUMMYSTRUCTNAME1; DWORD dwReserved[6]; } Bounds; union { DWORD cSteps; DWORD cbCustomData; DWORD dwReserved[6]; } Metrics; } MIXERCONTROLW, *LPMIXERCONTROLW; DECL_WINELIB_TYPE_AW(MIXERCONTROL) DECL_WINELIB_TYPE_AW(LPMIXERCONTROL) typedef struct tagMIXERLINECONTROLSA { DWORD cbStruct; DWORD dwLineID; union { DWORD dwControlID; DWORD dwControlType; } DUMMYUNIONNAME; DWORD cControls; DWORD cbmxctrl; LPMIXERCONTROLA pamxctrl; } MIXERLINECONTROLSA, *LPMIXERLINECONTROLSA; typedef struct tagMIXERLINECONTROLSW { DWORD cbStruct; DWORD dwLineID; union { DWORD dwControlID; DWORD dwControlType; } DUMMYUNIONNAME; DWORD cControls; DWORD cbmxctrl; LPMIXERCONTROLW pamxctrl; } MIXERLINECONTROLSW, *LPMIXERLINECONTROLSW; DECL_WINELIB_TYPE_AW(MIXERLINECONTROLS) DECL_WINELIB_TYPE_AW(LPMIXERLINECONTROLS) typedef struct tMIXERCONTROLDETAILS { DWORD cbStruct; DWORD dwControlID; DWORD cChannels; union { HWND hwndOwner; DWORD cMultipleItems; } DUMMYUNIONNAME; DWORD cbDetails; LPVOID paDetails; } MIXERCONTROLDETAILS,*LPMIXERCONTROLDETAILS; typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA { DWORD dwParam1; DWORD dwParam2; CHAR szName[MIXER_LONG_NAME_CHARS]; } MIXERCONTROLDETAILS_LISTTEXTA,*LPMIXERCONTROLDETAILS_LISTTEXTA; typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW { DWORD dwParam1; DWORD dwParam2; WCHAR szName[MIXER_LONG_NAME_CHARS]; } MIXERCONTROLDETAILS_LISTTEXTW,*LPMIXERCONTROLDETAILS_LISTTEXTW; DECL_WINELIB_TYPE_AW(MIXERCONTROLDETAILS_LISTTEXT) DECL_WINELIB_TYPE_AW(LPMIXERCONTROLDETAILS_LISTTEXT) /* MIXER_GETCONTROLDETAILSF_VALUE */ typedef struct { LONG fValue; } MIXERCONTROLDETAILS_BOOLEAN,*LPMIXERCONTROLDETAILS_BOOLEAN; typedef struct { LONG lValue; } MIXERCONTROLDETAILS_SIGNED,*LPMIXERCONTROLDETAILS_SIGNED; typedef struct { DWORD dwValue; } MIXERCONTROLDETAILS_UNSIGNED,*LPMIXERCONTROLDETAILS_UNSIGNED; /* bits passed to mixerGetLineInfo.fdwInfo */ #define MIXER_GETLINEINFOF_DESTINATION __MSABI_LONG(0x00000000) #define MIXER_GETLINEINFOF_SOURCE __MSABI_LONG(0x00000001) #define MIXER_GETLINEINFOF_LINEID __MSABI_LONG(0x00000002) #define MIXER_GETLINEINFOF_COMPONENTTYPE __MSABI_LONG(0x00000003) #define MIXER_GETLINEINFOF_TARGETTYPE __MSABI_LONG(0x00000004) #define MIXER_GETLINEINFOF_QUERYMASK __MSABI_LONG(0x0000000F) /* bitmask passed to mixerGetLineControl */ #define MIXER_GETLINECONTROLSF_ALL __MSABI_LONG(0x00000000) #define MIXER_GETLINECONTROLSF_ONEBYID __MSABI_LONG(0x00000001) #define MIXER_GETLINECONTROLSF_ONEBYTYPE __MSABI_LONG(0x00000002) #define MIXER_GETLINECONTROLSF_QUERYMASK __MSABI_LONG(0x0000000F) /* bitmask passed to mixerGetControlDetails */ #define MIXER_GETCONTROLDETAILSF_VALUE __MSABI_LONG(0x00000000) #define MIXER_GETCONTROLDETAILSF_LISTTEXT __MSABI_LONG(0x00000001) #define MIXER_GETCONTROLDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F) /* bitmask passed to mixerSetControlDetails */ #define MIXER_SETCONTROLDETAILSF_VALUE __MSABI_LONG(0x00000000) #define MIXER_SETCONTROLDETAILSF_CUSTOM __MSABI_LONG(0x00000001) #define MIXER_SETCONTROLDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F) UINT WINAPI mixerGetNumDevs(void); UINT WINAPI mixerOpen(LPHMIXER,UINT,DWORD_PTR,DWORD_PTR,DWORD); UINT WINAPI mixerClose(HMIXER); DWORD WINAPI mixerMessage(HMIXER,UINT,DWORD_PTR,DWORD_PTR); UINT WINAPI mixerGetDevCapsA(UINT_PTR,LPMIXERCAPSA,UINT); UINT WINAPI mixerGetDevCapsW(UINT_PTR,LPMIXERCAPSW,UINT); #define mixerGetDevCaps WINELIB_NAME_AW(mixerGetDevCaps) UINT WINAPI mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD); UINT WINAPI mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD); #define mixerGetLineInfo WINELIB_NAME_AW(mixerGetLineInfo) UINT WINAPI mixerGetID(HMIXEROBJ,LPUINT,DWORD); UINT WINAPI mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD); UINT WINAPI mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD); #define mixerGetLineControls WINELIB_NAME_AW(mixerGetLineControls) UINT WINAPI mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); UINT WINAPI mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); #define mixerGetControlDetails WINELIB_NAME_AW(mixerGetControlDetails) UINT WINAPI mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); #define MMIOERR_BASE 256 #define MMIOERR_FILENOTFOUND (MMIOERR_BASE + 1) /* file not found */ #define MMIOERR_OUTOFMEMORY (MMIOERR_BASE + 2) /* out of memory */ #define MMIOERR_CANNOTOPEN (MMIOERR_BASE + 3) /* cannot open */ #define MMIOERR_CANNOTCLOSE (MMIOERR_BASE + 4) /* cannot close */ #define MMIOERR_CANNOTREAD (MMIOERR_BASE + 5) /* cannot read */ #define MMIOERR_CANNOTWRITE (MMIOERR_BASE + 6) /* cannot write */ #define MMIOERR_CANNOTSEEK (MMIOERR_BASE + 7) /* cannot seek */ #define MMIOERR_CANNOTEXPAND (MMIOERR_BASE + 8) /* cannot expand file */ #define MMIOERR_CHUNKNOTFOUND (MMIOERR_BASE + 9) /* chunk not found */ #define MMIOERR_UNBUFFERED (MMIOERR_BASE + 10) /* file is unbuffered */ #define MMIOERR_PATHNOTFOUND (MMIOERR_BASE + 11) #define MMIOERR_ACCESSDENIED (MMIOERR_BASE + 12) #define MMIOERR_SHARINGVIOLATION (MMIOERR_BASE + 13) #define MMIOERR_NETWORKERROR (MMIOERR_BASE + 14) #define MMIOERR_TOOMANYOPENFILES (MMIOERR_BASE + 15) #define MMIOERR_INVALIDFILE (MMIOERR_BASE + 16) #define CFSEPCHAR '+' /* compound file name separator char. */ typedef DWORD FOURCC; /* a four character code */ typedef LRESULT (CALLBACK *LPMMIOPROC) (LPSTR lpmmioinfo, UINT uMessage, LPARAM lParam1, LPARAM lParam2); typedef struct _MMIOINFO { DWORD dwFlags; FOURCC fccIOProc; LPMMIOPROC pIOProc; UINT wErrorRet; HTASK hTask; /* fields maintained by MMIO functions during buffered I/O */ LONG cchBuffer; HPSTR pchBuffer; HPSTR pchNext; HPSTR pchEndRead; HPSTR pchEndWrite; LONG lBufOffset; /* fields maintained by I/O procedure */ LONG lDiskOffset; DWORD adwInfo[3]; /* other fields maintained by MMIO */ DWORD dwReserved1; DWORD dwReserved2; HMMIO hmmio; } MMIOINFO, *PMMIOINFO, *LPMMIOINFO; typedef struct _MMCKINFO { FOURCC ckid; /* chunk ID */ DWORD cksize; /* chunk size */ FOURCC fccType; /* form type or list type */ DWORD dwDataOffset; /* offset of data portion of chunk */ DWORD dwFlags; /* flags used by MMIO functions */ } MMCKINFO, *LPMMCKINFO; #define MMIO_RWMODE 0x00000003 /* open file for reading/writing/both */ #define MMIO_SHAREMODE 0x00000070 /* file sharing mode number */ #define MMIO_CREATE 0x00001000 /* create new file (or truncate file) */ #define MMIO_PARSE 0x00000100 /* parse new file returning path */ #define MMIO_DELETE 0x00000200 /* create new file (or truncate file) */ #define MMIO_EXIST 0x00004000 /* checks for existence of file */ #define MMIO_ALLOCBUF 0x00010000 /* mmioOpen() should allocate a buffer */ #define MMIO_GETTEMP 0x00020000 /* mmioOpen() should retrieve temp name */ #define MMIO_DIRTY 0x10000000 /* I/O buffer is dirty */ #define MMIO_READ 0x00000000 /* open file for reading only */ #define MMIO_WRITE 0x00000001 /* open file for writing only */ #define MMIO_READWRITE 0x00000002 /* open file for reading and writing */ #define MMIO_COMPAT 0x00000000 /* compatibility mode */ #define MMIO_EXCLUSIVE 0x00000010 /* exclusive-access mode */ #define MMIO_DENYWRITE 0x00000020 /* deny writing to other processes */ #define MMIO_DENYREAD 0x00000030 /* deny reading to other processes */ #define MMIO_DENYNONE 0x00000040 /* deny nothing to other processes */ #define MMIO_FHOPEN 0x0010 /* mmioClose: keep file handle open */ #define MMIO_EMPTYBUF 0x0010 /* mmioFlush: empty the I/O buffer */ #define MMIO_TOUPPER 0x0010 /* mmioStringToFOURCC: to u-case */ #define MMIO_INSTALLPROC 0x00010000 /* mmioInstallIOProc: install MMIOProc */ #define MMIO_GLOBALPROC 0x10000000 /* mmioInstallIOProc: install globally */ #define MMIO_REMOVEPROC 0x00020000 /* mmioInstallIOProc: remove MMIOProc */ #define MMIO_FINDPROC 0x00040000 /* mmioInstallIOProc: find an MMIOProc */ #define MMIO_FINDCHUNK 0x0010 /* mmioDescend: find a chunk by ID */ #define MMIO_FINDRIFF 0x0020 /* mmioDescend: find a LIST chunk */ #define MMIO_FINDLIST 0x0040 /* mmioDescend: find a RIFF chunk */ #define MMIO_CREATERIFF 0x0020 /* mmioCreateChunk: make a LIST chunk */ #define MMIO_CREATELIST 0x0040 /* mmioCreateChunk: make a RIFF chunk */ #ifndef SEEK_SET #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #endif /* SEEK_SET */ #define MMIOM_READ MMIO_READ /* read */ #define MMIOM_WRITE MMIO_WRITE /* write */ #define MMIOM_SEEK 2 /* seek to a new position in file */ #define MMIOM_OPEN 3 /* open file */ #define MMIOM_CLOSE 4 /* close file */ #define MMIOM_WRITEFLUSH 5 /* write and flush */ #define MMIOM_RENAME 6 /* rename specified file */ #define MMIOM_USER 0x8000 /* beginning of user-defined messages */ #define FOURCC_RIFF mmioFOURCC('R', 'I', 'F', 'F') #define FOURCC_LIST mmioFOURCC('L', 'I', 'S', 'T') #define FOURCC_DOS mmioFOURCC('D', 'O', 'S', ' ') #define FOURCC_MEM mmioFOURCC('M', 'E', 'M', ' ') #define MMIO_DEFAULTBUFFER 8192 /* default buffer size */ #define mmioFOURCC( ch0, ch1, ch2, ch3 ) \ ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \ ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) ) LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD); LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD); #define mmioInstallIOProc WINELIB_NAME_AW(mmioInstallIOProc) FOURCC WINAPI mmioStringToFOURCCA(LPCSTR,UINT); FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR,UINT); #define mmioStringToFOURCC WINELIB_NAME_AW(mmioStringToFOURCC) HMMIO WINAPI mmioOpenA(LPSTR,MMIOINFO*,DWORD); HMMIO WINAPI mmioOpenW(LPWSTR,MMIOINFO*,DWORD); #define mmioOpen WINELIB_NAME_AW(mmioOpen) MMRESULT WINAPI mmioRenameA(LPCSTR szFileName, LPCSTR szNewFileName, const MMIOINFO * lpmmioinfo, DWORD dwRenameFlags); MMRESULT WINAPI mmioRenameW(LPCWSTR szFileName, LPCWSTR szNewFileName, const MMIOINFO * lpmmioinfo, DWORD dwRenameFlags); #define mmioRename WINELIB_NAME_AW(mmioRename) MMRESULT WINAPI mmioClose(HMMIO,UINT); LONG WINAPI mmioRead(HMMIO,HPSTR,LONG); LONG WINAPI mmioWrite(HMMIO,HPCSTR,LONG); LONG WINAPI mmioSeek(HMMIO,LONG,INT); MMRESULT WINAPI mmioGetInfo(HMMIO,MMIOINFO*,UINT); MMRESULT WINAPI mmioSetInfo(HMMIO,const MMIOINFO*,UINT); MMRESULT WINAPI mmioSetBuffer(HMMIO,LPSTR,LONG,UINT); MMRESULT WINAPI mmioFlush(HMMIO,UINT); MMRESULT WINAPI mmioAdvance(HMMIO,MMIOINFO*,UINT); LRESULT WINAPI mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM); MMRESULT WINAPI mmioDescend(HMMIO,MMCKINFO*,const MMCKINFO*,UINT); MMRESULT WINAPI mmioAscend(HMMIO,MMCKINFO*,UINT); MMRESULT WINAPI mmioCreateChunk(HMMIO,MMCKINFO*,UINT); typedef UINT (CALLBACK *YIELDPROC)(MCIDEVICEID,DWORD); BOOL WINAPI mciExecute(LPCSTR); DWORD WINAPI mciSendCommandA(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR); DWORD WINAPI mciSendCommandW(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR); #define mciSendCommand WINELIB_NAME_AW(mciSendCommand) DWORD WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND); DWORD WINAPI mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND); #define mciSendString WINELIB_NAME_AW(mciSendString) MCIDEVICEID WINAPI mciGetDeviceIDA(LPCSTR); MCIDEVICEID WINAPI mciGetDeviceIDW(LPCWSTR); #define mciGetDeviceID WINELIB_NAME_AW(mciGetDeviceID) MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA(DWORD,LPCSTR); MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR); #define mciGetDeviceIDFromElementID WINELIB_NAME_AW(mciGetDeviceIDFromElementID) BOOL WINAPI mciGetErrorStringA(MCIERROR,LPSTR,UINT); BOOL WINAPI mciGetErrorStringW(MCIERROR,LPWSTR,UINT); #define mciGetErrorString WINELIB_NAME_AW(mciGetErrorString) BOOL WINAPI mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD); HTASK WINAPI mciGetCreatorTask(MCIDEVICEID); YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID,DWORD*); #define MCIERR_INVALID_DEVICE_ID (MCIERR_BASE + 1) #define MCIERR_UNRECOGNIZED_KEYWORD (MCIERR_BASE + 3) #define MCIERR_UNRECOGNIZED_COMMAND (MCIERR_BASE + 5) #define MCIERR_HARDWARE (MCIERR_BASE + 6) #define MCIERR_INVALID_DEVICE_NAME (MCIERR_BASE + 7) #define MCIERR_OUT_OF_MEMORY (MCIERR_BASE + 8) #define MCIERR_DEVICE_OPEN (MCIERR_BASE + 9) #define MCIERR_CANNOT_LOAD_DRIVER (MCIERR_BASE + 10) #define MCIERR_MISSING_COMMAND_STRING (MCIERR_BASE + 11) #define MCIERR_PARAM_OVERFLOW (MCIERR_BASE + 12) #define MCIERR_MISSING_STRING_ARGUMENT (MCIERR_BASE + 13) #define MCIERR_BAD_INTEGER (MCIERR_BASE + 14) #define MCIERR_PARSER_INTERNAL (MCIERR_BASE + 15) #define MCIERR_DRIVER_INTERNAL (MCIERR_BASE + 16) #define MCIERR_MISSING_PARAMETER (MCIERR_BASE + 17) #define MCIERR_UNSUPPORTED_FUNCTION (MCIERR_BASE + 18) #define MCIERR_FILE_NOT_FOUND (MCIERR_BASE + 19) #define MCIERR_DEVICE_NOT_READY (MCIERR_BASE + 20) #define MCIERR_INTERNAL (MCIERR_BASE + 21) #define MCIERR_DRIVER (MCIERR_BASE + 22) #define MCIERR_CANNOT_USE_ALL (MCIERR_BASE + 23) #define MCIERR_MULTIPLE (MCIERR_BASE + 24) #define MCIERR_EXTENSION_NOT_FOUND (MCIERR_BASE + 25) #define MCIERR_OUTOFRANGE (MCIERR_BASE + 26) #define MCIERR_FLAGS_NOT_COMPATIBLE (MCIERR_BASE + 28) #define MCIERR_FILE_NOT_SAVED (MCIERR_BASE + 30) #define MCIERR_DEVICE_TYPE_REQUIRED (MCIERR_BASE + 31) #define MCIERR_DEVICE_LOCKED (MCIERR_BASE + 32) #define MCIERR_DUPLICATE_ALIAS (MCIERR_BASE + 33) #define MCIERR_BAD_CONSTANT (MCIERR_BASE + 34) #define MCIERR_MUST_USE_SHAREABLE (MCIERR_BASE + 35) #define MCIERR_MISSING_DEVICE_NAME (MCIERR_BASE + 36) #define MCIERR_BAD_TIME_FORMAT (MCIERR_BASE + 37) #define MCIERR_NO_CLOSING_QUOTE (MCIERR_BASE + 38) #define MCIERR_DUPLICATE_FLAGS (MCIERR_BASE + 39) #define MCIERR_INVALID_FILE (MCIERR_BASE + 40) #define MCIERR_NULL_PARAMETER_BLOCK (MCIERR_BASE + 41) #define MCIERR_UNNAMED_RESOURCE (MCIERR_BASE + 42) #define MCIERR_NEW_REQUIRES_ALIAS (MCIERR_BASE + 43) #define MCIERR_NOTIFY_ON_AUTO_OPEN (MCIERR_BASE + 44) #define MCIERR_NO_ELEMENT_ALLOWED (MCIERR_BASE + 45) #define MCIERR_NONAPPLICABLE_FUNCTION (MCIERR_BASE + 46) #define MCIERR_ILLEGAL_FOR_AUTO_OPEN (MCIERR_BASE + 47) #define MCIERR_FILENAME_REQUIRED (MCIERR_BASE + 48) #define MCIERR_EXTRA_CHARACTERS (MCIERR_BASE + 49) #define MCIERR_DEVICE_NOT_INSTALLED (MCIERR_BASE + 50) #define MCIERR_GET_CD (MCIERR_BASE + 51) #define MCIERR_SET_CD (MCIERR_BASE + 52) #define MCIERR_SET_DRIVE (MCIERR_BASE + 53) #define MCIERR_DEVICE_LENGTH (MCIERR_BASE + 54) #define MCIERR_DEVICE_ORD_LENGTH (MCIERR_BASE + 55) #define MCIERR_NO_INTEGER (MCIERR_BASE + 56) #define MCIERR_WAVE_OUTPUTSINUSE (MCIERR_BASE + 64) #define MCIERR_WAVE_SETOUTPUTINUSE (MCIERR_BASE + 65) #define MCIERR_WAVE_INPUTSINUSE (MCIERR_BASE + 66) #define MCIERR_WAVE_SETINPUTINUSE (MCIERR_BASE + 67) #define MCIERR_WAVE_OUTPUTUNSPECIFIED (MCIERR_BASE + 68) #define MCIERR_WAVE_INPUTUNSPECIFIED (MCIERR_BASE + 69) #define MCIERR_WAVE_OUTPUTSUNSUITABLE (MCIERR_BASE + 70) #define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71) #define MCIERR_WAVE_INPUTSUNSUITABLE (MCIERR_BASE + 72) #define MCIERR_WAVE_SETINPUTUNSUITABLE (MCIERR_BASE + 73) #define MCIERR_SEQ_DIV_INCOMPATIBLE (MCIERR_BASE + 80) #define MCIERR_SEQ_PORT_INUSE (MCIERR_BASE + 81) #define MCIERR_SEQ_PORT_NONEXISTENT (MCIERR_BASE + 82) #define MCIERR_SEQ_PORT_MAPNODEVICE (MCIERR_BASE + 83) #define MCIERR_SEQ_PORT_MISCERROR (MCIERR_BASE + 84) #define MCIERR_SEQ_TIMER (MCIERR_BASE + 85) #define MCIERR_SEQ_PORTUNSPECIFIED (MCIERR_BASE + 86) #define MCIERR_SEQ_NOMIDIPRESENT (MCIERR_BASE + 87) #define MCIERR_NO_WINDOW (MCIERR_BASE + 90) #define MCIERR_CREATEWINDOW (MCIERR_BASE + 91) #define MCIERR_FILE_READ (MCIERR_BASE + 92) #define MCIERR_FILE_WRITE (MCIERR_BASE + 93) #define MCIERR_NO_IDENTITY (MCIERR_BASE + 94) #define MCIERR_CUSTOM_DRIVER_BASE (MCIERR_BASE + 256) #define MCI_OPEN_DRIVER 0x0801 #define MCI_CLOSE_DRIVER 0x0802 #define MCI_OPEN 0x0803 #define MCI_CLOSE 0x0804 #define MCI_ESCAPE 0x0805 #define MCI_PLAY 0x0806 #define MCI_SEEK 0x0807 #define MCI_STOP 0x0808 #define MCI_PAUSE 0x0809 #define MCI_INFO 0x080A #define MCI_GETDEVCAPS 0x080B #define MCI_SPIN 0x080C #define MCI_SET 0x080D #define MCI_STEP 0x080E #define MCI_RECORD 0x080F #define MCI_SYSINFO 0x0810 #define MCI_BREAK 0x0811 #define MCI_SOUND 0x0812 #define MCI_SAVE 0x0813 #define MCI_STATUS 0x0814 #define MCI_CUE 0x0830 #define MCI_REALIZE 0x0840 #define MCI_WINDOW 0x0841 #define MCI_PUT 0x0842 #define MCI_WHERE 0x0843 #define MCI_FREEZE 0x0844 #define MCI_UNFREEZE 0x0845 #define MCI_LOAD 0x0850 #define MCI_CUT 0x0851 #define MCI_COPY 0x0852 #define MCI_PASTE 0x0853 #define MCI_UPDATE 0x0854 #define MCI_RESUME 0x0855 #define MCI_DELETE 0x0856 #define MCI_USER_MESSAGES (0x400 + DRV_MCI_FIRST) #define MCI_ALL_DEVICE_ID 0xFFFFFFFF #define MCI_DEVTYPE_VCR (MCI_STRING_OFFSET + 1) #define MCI_DEVTYPE_VIDEODISC (MCI_STRING_OFFSET + 2) #define MCI_DEVTYPE_OVERLAY (MCI_STRING_OFFSET + 3) #define MCI_DEVTYPE_CD_AUDIO (MCI_STRING_OFFSET + 4) #define MCI_DEVTYPE_DAT (MCI_STRING_OFFSET + 5) #define MCI_DEVTYPE_SCANNER (MCI_STRING_OFFSET + 6) #define MCI_DEVTYPE_ANIMATION (MCI_STRING_OFFSET + 7) #define MCI_DEVTYPE_DIGITAL_VIDEO (MCI_STRING_OFFSET + 8) #define MCI_DEVTYPE_OTHER (MCI_STRING_OFFSET + 9) #define MCI_DEVTYPE_WAVEFORM_AUDIO (MCI_STRING_OFFSET + 10) #define MCI_DEVTYPE_SEQUENCER (MCI_STRING_OFFSET + 11) #define MCI_DEVTYPE_FIRST MCI_DEVTYPE_VCR #define MCI_DEVTYPE_LAST MCI_DEVTYPE_SEQUENCER #define MCI_MODE_NOT_READY (MCI_STRING_OFFSET + 12) #define MCI_MODE_STOP (MCI_STRING_OFFSET + 13) #define MCI_MODE_PLAY (MCI_STRING_OFFSET + 14) #define MCI_MODE_RECORD (MCI_STRING_OFFSET + 15) #define MCI_MODE_SEEK (MCI_STRING_OFFSET + 16) #define MCI_MODE_PAUSE (MCI_STRING_OFFSET + 17) #define MCI_MODE_OPEN (MCI_STRING_OFFSET + 18) #define MCI_FORMAT_MILLISECONDS 0 #define MCI_FORMAT_HMS 1 #define MCI_FORMAT_MSF 2 #define MCI_FORMAT_FRAMES 3 #define MCI_FORMAT_SMPTE_24 4 #define MCI_FORMAT_SMPTE_25 5 #define MCI_FORMAT_SMPTE_30 6 #define MCI_FORMAT_SMPTE_30DROP 7 #define MCI_FORMAT_BYTES 8 #define MCI_FORMAT_SAMPLES 9 #define MCI_FORMAT_TMSF 10 #define MCI_MSF_MINUTE(msf) ((BYTE)(msf)) #define MCI_MSF_SECOND(msf) ((BYTE)(((WORD)(msf)) >> 8)) #define MCI_MSF_FRAME(msf) ((BYTE)((msf)>>16)) #define MCI_MAKE_MSF(m, s, f) ((DWORD)(((BYTE)(m) | \ ((WORD)(s)<<8)) | \ (((DWORD)(BYTE)(f))<<16))) #define MCI_TMSF_TRACK(tmsf) ((BYTE)(tmsf)) #define MCI_TMSF_MINUTE(tmsf) ((BYTE)(((WORD)(tmsf)) >> 8)) #define MCI_TMSF_SECOND(tmsf) ((BYTE)((tmsf)>>16)) #define MCI_TMSF_FRAME(tmsf) ((BYTE)((tmsf)>>24)) #define MCI_MAKE_TMSF(t, m, s, f) ((DWORD)(((BYTE)(t) | \ ((WORD)(m)<<8)) | \ (((DWORD)(BYTE)(s) | \ ((WORD)(f)<<8))<<16))) #define MCI_HMS_HOUR(hms) ((BYTE)(hms)) #define MCI_HMS_MINUTE(hms) ((BYTE)(((WORD)(hms)) >> 8)) #define MCI_HMS_SECOND(hms) ((BYTE)((hms)>>16)) #define MCI_MAKE_HMS(h, m, s) ((DWORD)(((BYTE)(h) | \ ((WORD)(m)<<8)) | \ (((DWORD)(BYTE)(s))<<16))) #define MCI_NOTIFY_SUCCESSFUL 0x0001 #define MCI_NOTIFY_SUPERSEDED 0x0002 #define MCI_NOTIFY_ABORTED 0x0004 #define MCI_NOTIFY_FAILURE 0x0008 #define MCI_NOTIFY __MSABI_LONG(0x00000001) #define MCI_WAIT __MSABI_LONG(0x00000002) #define MCI_FROM __MSABI_LONG(0x00000004) #define MCI_TO __MSABI_LONG(0x00000008) #define MCI_TRACK __MSABI_LONG(0x00000010) #define MCI_OPEN_SHAREABLE __MSABI_LONG(0x00000100) #define MCI_OPEN_ELEMENT __MSABI_LONG(0x00000200) #define MCI_OPEN_ALIAS __MSABI_LONG(0x00000400) #define MCI_OPEN_ELEMENT_ID __MSABI_LONG(0x00000800) #define MCI_OPEN_TYPE_ID __MSABI_LONG(0x00001000) #define MCI_OPEN_TYPE __MSABI_LONG(0x00002000) #define MCI_SEEK_TO_START __MSABI_LONG(0x00000100) #define MCI_SEEK_TO_END __MSABI_LONG(0x00000200) #define MCI_STATUS_ITEM __MSABI_LONG(0x00000100) #define MCI_STATUS_START __MSABI_LONG(0x00000200) #define MCI_STATUS_LENGTH __MSABI_LONG(0x00000001) #define MCI_STATUS_POSITION __MSABI_LONG(0x00000002) #define MCI_STATUS_NUMBER_OF_TRACKS __MSABI_LONG(0x00000003) #define MCI_STATUS_MODE __MSABI_LONG(0x00000004) #define MCI_STATUS_MEDIA_PRESENT __MSABI_LONG(0x00000005) #define MCI_STATUS_TIME_FORMAT __MSABI_LONG(0x00000006) #define MCI_STATUS_READY __MSABI_LONG(0x00000007) #define MCI_STATUS_CURRENT_TRACK __MSABI_LONG(0x00000008) #define MCI_INFO_PRODUCT __MSABI_LONG(0x00000100) #define MCI_INFO_FILE __MSABI_LONG(0x00000200) #define MCI_INFO_MEDIA_UPC __MSABI_LONG(0x00000400) #define MCI_INFO_MEDIA_IDENTITY __MSABI_LONG(0x00000800) #define MCI_INFO_NAME __MSABI_LONG(0x00001000) #define MCI_INFO_COPYRIGHT __MSABI_LONG(0x00002000) #define MCI_GETDEVCAPS_ITEM __MSABI_LONG(0x00000100) #define MCI_GETDEVCAPS_CAN_RECORD __MSABI_LONG(0x00000001) #define MCI_GETDEVCAPS_HAS_AUDIO __MSABI_LONG(0x00000002) #define MCI_GETDEVCAPS_HAS_VIDEO __MSABI_LONG(0x00000003) #define MCI_GETDEVCAPS_DEVICE_TYPE __MSABI_LONG(0x00000004) #define MCI_GETDEVCAPS_USES_FILES __MSABI_LONG(0x00000005) #define MCI_GETDEVCAPS_COMPOUND_DEVICE __MSABI_LONG(0x00000006) #define MCI_GETDEVCAPS_CAN_EJECT __MSABI_LONG(0x00000007) #define MCI_GETDEVCAPS_CAN_PLAY __MSABI_LONG(0x00000008) #define MCI_GETDEVCAPS_CAN_SAVE __MSABI_LONG(0x00000009) #define MCI_SYSINFO_QUANTITY __MSABI_LONG(0x00000100) #define MCI_SYSINFO_OPEN __MSABI_LONG(0x00000200) #define MCI_SYSINFO_NAME __MSABI_LONG(0x00000400) #define MCI_SYSINFO_INSTALLNAME __MSABI_LONG(0x00000800) #define MCI_SET_DOOR_OPEN __MSABI_LONG(0x00000100) #define MCI_SET_DOOR_CLOSED __MSABI_LONG(0x00000200) #define MCI_SET_TIME_FORMAT __MSABI_LONG(0x00000400) #define MCI_SET_AUDIO __MSABI_LONG(0x00000800) #define MCI_SET_VIDEO __MSABI_LONG(0x00001000) #define MCI_SET_ON __MSABI_LONG(0x00002000) #define MCI_SET_OFF __MSABI_LONG(0x00004000) #define MCI_SET_AUDIO_ALL __MSABI_LONG(0x00000000) #define MCI_SET_AUDIO_LEFT __MSABI_LONG(0x00000001) #define MCI_SET_AUDIO_RIGHT __MSABI_LONG(0x00000002) #define MCI_BREAK_KEY __MSABI_LONG(0x00000100) #define MCI_BREAK_HWND __MSABI_LONG(0x00000200) #define MCI_BREAK_OFF __MSABI_LONG(0x00000400) #define MCI_RECORD_INSERT __MSABI_LONG(0x00000100) #define MCI_RECORD_OVERWRITE __MSABI_LONG(0x00000200) #define MCI_SOUND_NAME __MSABI_LONG(0x00000100) #define MCI_SAVE_FILE __MSABI_LONG(0x00000100) #define MCI_LOAD_FILE __MSABI_LONG(0x00000100) typedef struct tagMCI_GENERIC_PARMS { DWORD_PTR dwCallback; } MCI_GENERIC_PARMS, *LPMCI_GENERIC_PARMS; typedef struct tagMCI_OPEN_PARMSA { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; } MCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA; typedef struct tagMCI_OPEN_PARMSW { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCWSTR lpstrDeviceType; LPCWSTR lpstrElementName; LPCWSTR lpstrAlias; } MCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW; DECL_WINELIB_TYPE_AW(MCI_OPEN_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_OPEN_PARMS) typedef struct tagMCI_PLAY_PARMS{ DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; } MCI_PLAY_PARMS, *LPMCI_PLAY_PARMS; typedef struct tagMCI_SEEK_PARMS { DWORD_PTR dwCallback; DWORD dwTo; } MCI_SEEK_PARMS, *LPMCI_SEEK_PARMS; typedef struct tagMCI_STATUS_PARMS { DWORD_PTR dwCallback; DWORD_PTR dwReturn; DWORD dwItem; DWORD dwTrack; } MCI_STATUS_PARMS, *LPMCI_STATUS_PARMS; typedef struct tagMCI_INFO_PARMSA { DWORD_PTR dwCallback; LPSTR lpstrReturn; DWORD dwRetSize; } MCI_INFO_PARMSA, *LPMCI_INFO_PARMSA; typedef struct tagMCI_INFO_PARMSW { DWORD_PTR dwCallback; LPWSTR lpstrReturn; DWORD dwRetSize; } MCI_INFO_PARMSW, *LPMCI_INFO_PARMSW; DECL_WINELIB_TYPE_AW(MCI_INFO_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_INFO_PARMS) typedef struct tagMCI_GETDEVCAPS_PARMS { DWORD_PTR dwCallback; DWORD dwReturn; DWORD dwItem; } MCI_GETDEVCAPS_PARMS, *LPMCI_GETDEVCAPS_PARMS; typedef struct tagMCI_SYSINFO_PARMSA { DWORD_PTR dwCallback; LPSTR lpstrReturn; DWORD dwRetSize; DWORD dwNumber; UINT wDeviceType; } MCI_SYSINFO_PARMSA, *LPMCI_SYSINFO_PARMSA; typedef struct tagMCI_SYSINFO_PARMSW { DWORD_PTR dwCallback; LPWSTR lpstrReturn; DWORD dwRetSize; DWORD dwNumber; UINT wDeviceType; } MCI_SYSINFO_PARMSW, *LPMCI_SYSINFO_PARMSW; DECL_WINELIB_TYPE_AW(MCI_SYSINFO_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_SYSINFO_PARMS) typedef struct tagMCI_SET_PARMS { DWORD_PTR dwCallback; DWORD dwTimeFormat; DWORD dwAudio; } MCI_SET_PARMS, *LPMCI_SET_PARMS; typedef struct tagMCI_BREAK_PARMS { DWORD_PTR dwCallback; INT nVirtKey; HWND hwndBreak; } MCI_BREAK_PARMS, *LPMCI_BREAK_PARMS; typedef struct tagMCI_SOUND_PARMSA { DWORD_PTR dwCallback; LPCSTR lpstrSoundName; } MCI_SOUND_PARMSA, *LPMCI_SOUND_PARMSA; typedef struct tagMCI_SOUND_PARMSW { DWORD_PTR dwCallback; LPCWSTR lpstrSoundName; } MCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW; DECL_WINELIB_TYPE_AW(MCI_SOUND_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_SOUND_PARMS) typedef struct tagMCI_SAVE_PARMSA { DWORD_PTR dwCallback; LPCSTR lpfilename; } MCI_SAVE_PARMSA, *LPMCI_SAVE_PARMSA; typedef struct tagMCI_SAVE_PARMSW { DWORD_PTR dwCallback; LPCWSTR lpfilename; } MCI_SAVE_PARMSW, *LPMCI_SAVE_PARMSW; DECL_WINELIB_TYPE_AW(MCI_SAVE_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_SAVE_PARMS) typedef struct tagMCI_LOAD_PARMSA { DWORD_PTR dwCallback; LPCSTR lpfilename; } MCI_LOAD_PARMSA, *LPMCI_LOAD_PARMSA; typedef struct tagMCI_LOAD_PARMSW { DWORD_PTR dwCallback; LPCWSTR lpfilename; } MCI_LOAD_PARMSW, *LPMCI_LOAD_PARMSW; DECL_WINELIB_TYPE_AW(MCI_LOAD_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_LOAD_PARMS) typedef struct tagMCI_RECORD_PARMS { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; } MCI_RECORD_PARMS, *LPMCI_RECORD_PARMS; #define MCI_CDA_STATUS_TYPE_TRACK 0x00004001 #define MCI_CDA_TRACK_AUDIO (MCI_CD_OFFSET + 0) #define MCI_CDA_TRACK_OTHER (MCI_CD_OFFSET + 1) #define MCI_VD_MODE_PARK (MCI_VD_OFFSET + 1) #define MCI_VD_MEDIA_CLV (MCI_VD_OFFSET + 2) #define MCI_VD_MEDIA_CAV (MCI_VD_OFFSET + 3) #define MCI_VD_MEDIA_OTHER (MCI_VD_OFFSET + 4) #define MCI_VD_FORMAT_TRACK 0x4001 #define MCI_VD_PLAY_REVERSE __MSABI_LONG(0x00010000) #define MCI_VD_PLAY_FAST __MSABI_LONG(0x00020000) #define MCI_VD_PLAY_SPEED __MSABI_LONG(0x00040000) #define MCI_VD_PLAY_SCAN __MSABI_LONG(0x00080000) #define MCI_VD_PLAY_SLOW __MSABI_LONG(0x00100000) #define MCI_VD_SEEK_REVERSE __MSABI_LONG(0x00010000) #define MCI_VD_STATUS_SPEED __MSABI_LONG(0x00004002) #define MCI_VD_STATUS_FORWARD __MSABI_LONG(0x00004003) #define MCI_VD_STATUS_MEDIA_TYPE __MSABI_LONG(0x00004004) #define MCI_VD_STATUS_SIDE __MSABI_LONG(0x00004005) #define MCI_VD_STATUS_DISC_SIZE __MSABI_LONG(0x00004006) #define MCI_VD_GETDEVCAPS_CLV __MSABI_LONG(0x00010000) #define MCI_VD_GETDEVCAPS_CAV __MSABI_LONG(0x00020000) #define MCI_VD_SPIN_UP __MSABI_LONG(0x00010000) #define MCI_VD_SPIN_DOWN __MSABI_LONG(0x00020000) #define MCI_VD_GETDEVCAPS_CAN_REVERSE __MSABI_LONG(0x00004002) #define MCI_VD_GETDEVCAPS_FAST_RATE __MSABI_LONG(0x00004003) #define MCI_VD_GETDEVCAPS_SLOW_RATE __MSABI_LONG(0x00004004) #define MCI_VD_GETDEVCAPS_NORMAL_RATE __MSABI_LONG(0x00004005) #define MCI_VD_STEP_FRAMES __MSABI_LONG(0x00010000) #define MCI_VD_STEP_REVERSE __MSABI_LONG(0x00020000) #define MCI_VD_ESCAPE_STRING __MSABI_LONG(0x00000100) typedef struct tagMCI_VD_PLAY_PARMS { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; DWORD dwSpeed; } MCI_VD_PLAY_PARMS, *LPMCI_VD_PLAY_PARMS; typedef struct tagMCI_VD_STEP_PARMS { DWORD_PTR dwCallback; DWORD dwFrames; } MCI_VD_STEP_PARMS, *LPMCI_VD_STEP_PARMS; typedef struct tagMCI_VD_ESCAPE_PARMSA { DWORD_PTR dwCallback; LPCSTR lpstrCommand; } MCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA; typedef struct tagMCI_VD_ESCAPE_PARMSW { DWORD_PTR dwCallback; LPCWSTR lpstrCommand; } MCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW; DECL_WINELIB_TYPE_AW(MCI_VD_ESCAPE_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_VD_ESCAPE_PARMS) #define MCI_WAVE_OPEN_BUFFER __MSABI_LONG(0x00010000) #define MCI_WAVE_SET_FORMATTAG __MSABI_LONG(0x00010000) #define MCI_WAVE_SET_CHANNELS __MSABI_LONG(0x00020000) #define MCI_WAVE_SET_SAMPLESPERSEC __MSABI_LONG(0x00040000) #define MCI_WAVE_SET_AVGBYTESPERSEC __MSABI_LONG(0x00080000) #define MCI_WAVE_SET_BLOCKALIGN __MSABI_LONG(0x00100000) #define MCI_WAVE_SET_BITSPERSAMPLE __MSABI_LONG(0x00200000) #define MCI_WAVE_INPUT __MSABI_LONG(0x00400000) #define MCI_WAVE_OUTPUT __MSABI_LONG(0x00800000) #define MCI_WAVE_STATUS_FORMATTAG __MSABI_LONG(0x00004001) #define MCI_WAVE_STATUS_CHANNELS __MSABI_LONG(0x00004002) #define MCI_WAVE_STATUS_SAMPLESPERSEC __MSABI_LONG(0x00004003) #define MCI_WAVE_STATUS_AVGBYTESPERSEC __MSABI_LONG(0x00004004) #define MCI_WAVE_STATUS_BLOCKALIGN __MSABI_LONG(0x00004005) #define MCI_WAVE_STATUS_BITSPERSAMPLE __MSABI_LONG(0x00004006) #define MCI_WAVE_STATUS_LEVEL __MSABI_LONG(0x00004007) #define MCI_WAVE_SET_ANYINPUT __MSABI_LONG(0x04000000) #define MCI_WAVE_SET_ANYOUTPUT __MSABI_LONG(0x08000000) #define MCI_WAVE_GETDEVCAPS_INPUTS __MSABI_LONG(0x00004001) #define MCI_WAVE_GETDEVCAPS_OUTPUTS __MSABI_LONG(0x00004002) typedef struct tagMCI_WAVE_OPEN_PARMSA { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; DWORD dwBufferSeconds; } MCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA; typedef struct tagMCI_WAVE_OPEN_PARMSW { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCWSTR lpstrDeviceType; LPCWSTR lpstrElementName; LPCWSTR lpstrAlias; DWORD dwBufferSeconds; } MCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW; DECL_WINELIB_TYPE_AW(MCI_WAVE_OPEN_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_WAVE_OPEN_PARMS) typedef struct tagMCI_WAVE_DELETE_PARMS { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; } MCI_WAVE_DELETE_PARMS, *LPMCI_WAVE_DELETE_PARMS; typedef struct tagMCI_WAVE_SET_PARMS { DWORD_PTR dwCallback; DWORD dwTimeFormat; DWORD dwAudio; UINT wInput; UINT wOutput; UINT wFormatTag; UINT nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; UINT nBlockAlign; UINT wBitsPerSample; } MCI_WAVE_SET_PARMS, * LPMCI_WAVE_SET_PARMS; #define MCI_SEQ_DIV_PPQN (0 + MCI_SEQ_OFFSET) #define MCI_SEQ_DIV_SMPTE_24 (1 + MCI_SEQ_OFFSET) #define MCI_SEQ_DIV_SMPTE_25 (2 + MCI_SEQ_OFFSET) #define MCI_SEQ_DIV_SMPTE_30DROP (3 + MCI_SEQ_OFFSET) #define MCI_SEQ_DIV_SMPTE_30 (4 + MCI_SEQ_OFFSET) #define MCI_SEQ_FORMAT_SONGPTR 0x4001 #define MCI_SEQ_FILE 0x4002 #define MCI_SEQ_MIDI 0x4003 #define MCI_SEQ_SMPTE 0x4004 #define MCI_SEQ_NONE 65533 #define MCI_SEQ_STATUS_TEMPO __MSABI_LONG(0x00004002) #define MCI_SEQ_STATUS_PORT __MSABI_LONG(0x00004003) #define MCI_SEQ_STATUS_SLAVE __MSABI_LONG(0x00004007) #define MCI_SEQ_STATUS_MASTER __MSABI_LONG(0x00004008) #define MCI_SEQ_STATUS_OFFSET __MSABI_LONG(0x00004009) #define MCI_SEQ_STATUS_DIVTYPE __MSABI_LONG(0x0000400A) #define MCI_SEQ_SET_TEMPO __MSABI_LONG(0x00010000) #define MCI_SEQ_SET_PORT __MSABI_LONG(0x00020000) #define MCI_SEQ_SET_SLAVE __MSABI_LONG(0x00040000) #define MCI_SEQ_SET_MASTER __MSABI_LONG(0x00080000) #define MCI_SEQ_SET_OFFSET __MSABI_LONG(0x01000000) typedef struct tagMCI_SEQ_SET_PARMS { DWORD_PTR dwCallback; DWORD dwTimeFormat; DWORD dwAudio; DWORD dwTempo; DWORD dwPort; DWORD dwSlave; DWORD dwMaster; DWORD dwOffset; } MCI_SEQ_SET_PARMS, *LPMCI_SEQ_SET_PARMS; #define MCI_ANIM_OPEN_WS __MSABI_LONG(0x00010000) #define MCI_ANIM_OPEN_PARENT __MSABI_LONG(0x00020000) #define MCI_ANIM_OPEN_NOSTATIC __MSABI_LONG(0x00040000) #define MCI_ANIM_PLAY_SPEED __MSABI_LONG(0x00010000) #define MCI_ANIM_PLAY_REVERSE __MSABI_LONG(0x00020000) #define MCI_ANIM_PLAY_FAST __MSABI_LONG(0x00040000) #define MCI_ANIM_PLAY_SLOW __MSABI_LONG(0x00080000) #define MCI_ANIM_PLAY_SCAN __MSABI_LONG(0x00100000) #define MCI_ANIM_STEP_REVERSE __MSABI_LONG(0x00010000) #define MCI_ANIM_STEP_FRAMES __MSABI_LONG(0x00020000) #define MCI_ANIM_STATUS_SPEED __MSABI_LONG(0x00004001) #define MCI_ANIM_STATUS_FORWARD __MSABI_LONG(0x00004002) #define MCI_ANIM_STATUS_HWND __MSABI_LONG(0x00004003) #define MCI_ANIM_STATUS_HPAL __MSABI_LONG(0x00004004) #define MCI_ANIM_STATUS_STRETCH __MSABI_LONG(0x00004005) #define MCI_ANIM_INFO_TEXT __MSABI_LONG(0x00010000) #define MCI_ANIM_GETDEVCAPS_CAN_REVERSE __MSABI_LONG(0x00004001) #define MCI_ANIM_GETDEVCAPS_FAST_RATE __MSABI_LONG(0x00004002) #define MCI_ANIM_GETDEVCAPS_SLOW_RATE __MSABI_LONG(0x00004003) #define MCI_ANIM_GETDEVCAPS_NORMAL_RATE __MSABI_LONG(0x00004004) #define MCI_ANIM_GETDEVCAPS_PALETTES __MSABI_LONG(0x00004006) #define MCI_ANIM_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004007) #define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004008) #define MCI_ANIM_REALIZE_NORM __MSABI_LONG(0x00010000) #define MCI_ANIM_REALIZE_BKGD __MSABI_LONG(0x00020000) #define MCI_ANIM_WINDOW_HWND __MSABI_LONG(0x00010000) #define MCI_ANIM_WINDOW_STATE __MSABI_LONG(0x00040000) #define MCI_ANIM_WINDOW_TEXT __MSABI_LONG(0x00080000) #define MCI_ANIM_WINDOW_ENABLE_STRETCH __MSABI_LONG(0x00100000) #define MCI_ANIM_WINDOW_DISABLE_STRETCH __MSABI_LONG(0x00200000) #define MCI_ANIM_WINDOW_DEFAULT __MSABI_LONG(0x00000000) #define MCI_ANIM_RECT __MSABI_LONG(0x00010000) #define MCI_ANIM_PUT_SOURCE __MSABI_LONG(0x00020000) #define MCI_ANIM_PUT_DESTINATION __MSABI_LONG(0x00040000) #define MCI_ANIM_WHERE_SOURCE __MSABI_LONG(0x00020000) #define MCI_ANIM_WHERE_DESTINATION __MSABI_LONG(0x00040000) #define MCI_ANIM_UPDATE_HDC __MSABI_LONG(0x00020000) typedef struct tagMCI_ANIM_OPEN_PARMSA { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; DWORD dwStyle; HWND hWndParent; } MCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA; typedef struct tagMCI_ANIM_OPEN_PARMSW { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCWSTR lpstrDeviceType; LPCWSTR lpstrElementName; LPCWSTR lpstrAlias; DWORD dwStyle; HWND hWndParent; } MCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW; DECL_WINELIB_TYPE_AW(MCI_ANIM_OPEN_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_ANIM_OPEN_PARMS) typedef struct tagMCI_ANIM_PLAY_PARMS { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; DWORD dwSpeed; } MCI_ANIM_PLAY_PARMS, *LPMCI_ANIM_PLAY_PARMS; typedef struct tagMCI_ANIM_STEP_PARMS { DWORD_PTR dwCallback; DWORD dwFrames; } MCI_ANIM_STEP_PARMS, *LPMCI_ANIM_STEP_PARMS; typedef struct tagMCI_ANIM_WINDOW_PARMSA { DWORD_PTR dwCallback; HWND hWnd; UINT nCmdShow; LPCSTR lpstrText; } MCI_ANIM_WINDOW_PARMSA, *LPMCI_ANIM_WINDOW_PARMSA; typedef struct tagMCI_ANIM_WINDOW_PARMSW { DWORD_PTR dwCallback; HWND hWnd; UINT nCmdShow; LPCWSTR lpstrText; } MCI_ANIM_WINDOW_PARMSW, *LPMCI_ANIM_WINDOW_PARMSW; DECL_WINELIB_TYPE_AW(MCI_ANIM_WINDOW_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_ANIM_WINDOW_PARMS) typedef struct tagMCI_ANIM_RECT_PARMS { DWORD_PTR dwCallback; #ifdef MCI_USE_OFFEXT POINT ptOffset; POINT ptExtent; #else /* ifdef MCI_USE_OFFEXT */ RECT rc; #endif /* ifdef MCI_USE_OFFEXT */ } MCI_ANIM_RECT_PARMS, *LPMCI_ANIM_RECT_PARMS; typedef struct tagMCI_ANIM_UPDATE_PARMS { DWORD_PTR dwCallback; RECT rc; HDC hDC; } MCI_ANIM_UPDATE_PARMS, *LPMCI_ANIM_UPDATE_PARMS; #define MCI_OVLY_OPEN_WS __MSABI_LONG(0x00010000) #define MCI_OVLY_OPEN_PARENT __MSABI_LONG(0x00020000) #define MCI_OVLY_STATUS_HWND __MSABI_LONG(0x00004001) #define MCI_OVLY_STATUS_STRETCH __MSABI_LONG(0x00004002) #define MCI_OVLY_INFO_TEXT __MSABI_LONG(0x00010000) #define MCI_OVLY_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004001) #define MCI_OVLY_GETDEVCAPS_CAN_FREEZE __MSABI_LONG(0x00004002) #define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004003) #define MCI_OVLY_WINDOW_HWND __MSABI_LONG(0x00010000) #define MCI_OVLY_WINDOW_STATE __MSABI_LONG(0x00040000) #define MCI_OVLY_WINDOW_TEXT __MSABI_LONG(0x00080000) #define MCI_OVLY_WINDOW_ENABLE_STRETCH __MSABI_LONG(0x00100000) #define MCI_OVLY_WINDOW_DISABLE_STRETCH __MSABI_LONG(0x00200000) #define MCI_OVLY_WINDOW_DEFAULT __MSABI_LONG(0x00000000) #define MCI_OVLY_RECT __MSABI_LONG(0x00010000) #define MCI_OVLY_PUT_SOURCE __MSABI_LONG(0x00020000) #define MCI_OVLY_PUT_DESTINATION __MSABI_LONG(0x00040000) #define MCI_OVLY_PUT_FRAME __MSABI_LONG(0x00080000) #define MCI_OVLY_PUT_VIDEO __MSABI_LONG(0x00100000) #define MCI_OVLY_WHERE_SOURCE __MSABI_LONG(0x00020000) #define MCI_OVLY_WHERE_DESTINATION __MSABI_LONG(0x00040000) #define MCI_OVLY_WHERE_FRAME __MSABI_LONG(0x00080000) #define MCI_OVLY_WHERE_VIDEO __MSABI_LONG(0x00100000) typedef struct tagMCI_OVLY_OPEN_PARMSA { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; DWORD dwStyle; HWND hWndParent; } MCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA; typedef struct tagMCI_OVLY_OPEN_PARMSW { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCWSTR lpstrDeviceType; LPCWSTR lpstrElementName; LPCWSTR lpstrAlias; DWORD dwStyle; HWND hWndParent; } MCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW; DECL_WINELIB_TYPE_AW(MCI_OVLY_OPEN_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_OVLY_OPEN_PARMS) typedef struct tagMCI_OVLY_WINDOW_PARMSA { DWORD_PTR dwCallback; HWND hWnd; UINT nCmdShow; LPCSTR lpstrText; } MCI_OVLY_WINDOW_PARMSA, *LPMCI_OVLY_WINDOW_PARMSA; typedef struct tagMCI_OVLY_WINDOW_PARMSW { DWORD_PTR dwCallback; HWND hWnd; UINT nCmdShow; LPCWSTR lpstrText; } MCI_OVLY_WINDOW_PARMSW, *LPMCI_OVLY_WINDOW_PARMSW; DECL_WINELIB_TYPE_AW(MCI_OVLY_WINDOW_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_OVLY_WINDOW_PARMS) typedef struct tagMCI_OVLY_RECT_PARMS { DWORD_PTR dwCallback; #ifdef MCI_USE_OFFEXT POINT ptOffset; POINT ptExtent; #else /* ifdef MCI_USE_OFFEXT */ RECT rc; #endif /* ifdef MCI_USE_OFFEXT */ } MCI_OVLY_RECT_PARMS, *LPMCI_OVLY_RECT_PARMS; typedef struct tagMCI_OVLY_SAVE_PARMSA { DWORD_PTR dwCallback; LPCSTR lpfilename; RECT rc; } MCI_OVLY_SAVE_PARMSA, *LPMCI_OVLY_SAVE_PARMSA; typedef struct tagMCI_OVLY_SAVE_PARMSW { DWORD_PTR dwCallback; LPCWSTR lpfilename; RECT rc; } MCI_OVLY_SAVE_PARMSW, *LPMCI_OVLY_SAVE_PARMSW; DECL_WINELIB_TYPE_AW(MCI_OVLY_SAVE_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_OVLY_SAVE_PARMS) typedef struct tagMCI_OVLY_LOAD_PARMSA { DWORD_PTR dwCallback; LPCSTR lpfilename; RECT rc; } MCI_OVLY_LOAD_PARMSA, *LPMCI_OVLY_LOAD_PARMSA; typedef struct tagMCI_OVLY_LOAD_PARMSW { DWORD_PTR dwCallback; LPCWSTR lpfilename; RECT rc; } MCI_OVLY_LOAD_PARMSW, *LPMCI_OVLY_LOAD_PARMSW; DECL_WINELIB_TYPE_AW(MCI_OVLY_LOAD_PARMS) DECL_WINELIB_TYPE_AW(LPMCI_OVLY_LOAD_PARMS) #ifndef NEWTRANSPARENT #define NEWTRANSPARENT 3 #define QUERYROPSUPPORT 40 #endif #define SELECTDIB 41 #define DIBINDEX(n) MAKELONG((n),0x10FF) #ifndef SC_SCREENSAVE #define SC_SCREENSAVE 0xf140 #endif #include #ifdef __cplusplus } #endif #endif /* __WINE_MMSYSTEM_H */ ================================================ FILE: wine/windows/mprapi.h ================================================ /* * Copyright (C) 2006 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MPRAPI_H #define __WINE_MPRAPI_H #include #include #include #include #define MAX_DEVICE_NAME 128 #define MAX_DEVICETYPE_NAME 16 #define MAX_INTERFACE_NAME_LEN 256 #define MAX_MEDIA_NAME 16 #define MAX_PHONE_NUMBER_LEN 128 #define MAX_PORT_NAME 16 #define MAX_TRANSPORT_NAME_LEN 40 #ifdef __cplusplus extern "C" { #endif BOOL APIENTRY MprAdminIsServiceRunning(LPWSTR); #ifdef __cplusplus } #endif #endif /* __WINE_MPRAPI_H */ ================================================ FILE: wine/windows/mprerror.h ================================================ /* * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the w64 mingw-runtime package. * No warranty is given: * The w64 mingw-runtime package and its code is distributed in the hope that it * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #ifndef _MPRERROR_H_ #define _MPRERROR_H_ #define ROUTEBASE 900 #define SUCCESS 0 #define ERROR_ROUTER_STOPPED (ROUTEBASE+0) #define ERROR_ALREADY_CONNECTED (ROUTEBASE+1) #define ERROR_UNKNOWN_PROTOCOL_ID (ROUTEBASE+2) #define ERROR_DDM_NOT_RUNNING (ROUTEBASE+3) #define ERROR_INTERFACE_ALREADY_EXISTS (ROUTEBASE+4) #define ERROR_NO_SUCH_INTERFACE (ROUTEBASE+5) #define ERROR_INTERFACE_NOT_CONNECTED (ROUTEBASE+6) #define ERROR_PROTOCOL_STOP_PENDING (ROUTEBASE+7) #define ERROR_INTERFACE_CONNECTED (ROUTEBASE+8) #define ERROR_NO_INTERFACE_CREDENTIALS_SET (ROUTEBASE+9) #define ERROR_ALREADY_CONNECTING (ROUTEBASE+10) #define ERROR_UPDATE_IN_PROGRESS (ROUTEBASE+11) #define ERROR_INTERFACE_CONFIGURATION (ROUTEBASE+12) #define ERROR_NOT_CLIENT_PORT (ROUTEBASE+13) #define ERROR_NOT_ROUTER_PORT (ROUTEBASE+14) #define ERROR_CLIENT_INTERFACE_ALREADY_EXISTS (ROUTEBASE+15) #define ERROR_INTERFACE_DISABLED (ROUTEBASE+16) #define ERROR_AUTH_PROTOCOL_REJECTED (ROUTEBASE+17) #define ERROR_NO_AUTH_PROTOCOL_AVAILABLE (ROUTEBASE+18) #define ERROR_PEER_REFUSED_AUTH (ROUTEBASE+19) #define ERROR_REMOTE_NO_DIALIN_PERMISSION (ROUTEBASE+20) #define ERROR_REMOTE_PASSWD_EXPIRED (ROUTEBASE+21) #define ERROR_REMOTE_ACCT_DISABLED (ROUTEBASE+22) #define ERROR_REMOTE_RESTRICTED_LOGON_HOURS (ROUTEBASE+23) #define ERROR_REMOTE_AUTHENTICATION_FAILURE (ROUTEBASE+24) #define ERROR_INTERFACE_HAS_NO_DEVICES (ROUTEBASE+25) #define ERROR_IDLE_DISCONNECTED (ROUTEBASE+26) #define ERROR_INTERFACE_UNREACHABLE (ROUTEBASE+27) #define ERROR_SERVICE_IS_PAUSED (ROUTEBASE+28) #define ERROR_INTERFACE_DISCONNECTED (ROUTEBASE+29) #define ERROR_AUTH_SERVER_TIMEOUT (ROUTEBASE+30) #define ERROR_PORT_LIMIT_REACHED (ROUTEBASE+31) #define ERROR_PPP_SESSION_TIMEOUT (ROUTEBASE+32) #define ERROR_MAX_LAN_INTERFACE_LIMIT (ROUTEBASE+33) #define ERROR_MAX_WAN_INTERFACE_LIMIT (ROUTEBASE+34) #define ERROR_MAX_CLIENT_INTERFACE_LIMIT (ROUTEBASE+35) #define ERROR_BAP_DISCONNECTED (ROUTEBASE+36) #define ERROR_USER_LIMIT (ROUTEBASE+37) #define ERROR_NO_RADIUS_SERVERS (ROUTEBASE+38) #define ERROR_INVALID_RADIUS_RESPONSE (ROUTEBASE+39) #define ERROR_DIALIN_HOURS_RESTRICTION (ROUTEBASE+40) #define ERROR_ALLOWED_PORT_TYPE_RESTRICTION (ROUTEBASE+41) #define ERROR_AUTH_PROTOCOL_RESTRICTION (ROUTEBASE+42) #define ERROR_BAP_REQUIRED (ROUTEBASE+43) #define ERROR_DIALOUT_HOURS_RESTRICTION (ROUTEBASE+44) #define ERROR_ROUTER_CONFIG_INCOMPATIBLE (ROUTEBASE+45) #define WARNING_NO_MD5_MIGRATION (ROUTEBASE+46) #define ERROR_PROTOCOL_ALREADY_INSTALLED (ROUTEBASE+48) #define ERROR_INVALID_SIGNATURE_LENGTH (ROUTEBASE+49) #define ERROR_INVALID_SIGNATURE (ROUTEBASE+50) #define ERROR_NO_SIGNATURE (ROUTEBASE+51) #define ERROR_INVALID_PACKET_LENGTH_OR_ID (ROUTEBASE+52) #define ERROR_INVALID_ATTRIBUTE_LENGTH (ROUTEBASE+53) #define ERROR_INVALID_PACKET (ROUTEBASE+54) #define ERROR_AUTHENTICATOR_MISMATCH (ROUTEBASE+55) #define ROUTEBASEEND (ROUTEBASE+56) #endif ================================================ FILE: wine/windows/msacm.h ================================================ /* * Declarations for MSACM * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSACM_H #define __WINE_MSACM_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #include #define ACMAPI WINAPI /*********************************************************************** * Defines/Enums */ #define ACMERR_BASE 512 #define ACMERR_NOTPOSSIBLE (ACMERR_BASE + 0) #define ACMERR_BUSY (ACMERR_BASE + 1) #define ACMERR_UNPREPARED (ACMERR_BASE + 2) #define ACMERR_CANCELED (ACMERR_BASE + 3) #define MM_ACM_OPEN MM_STREAM_OPEN #define MM_ACM_CLOSE MM_STREAM_CLOSE #define MM_ACM_DONE MM_STREAM_DONE #define ACM_DRIVERADDF_NAME __MSABI_LONG(0x00000001) #define ACM_DRIVERADDF_FUNCTION __MSABI_LONG(0x00000003) #define ACM_DRIVERADDF_NOTIFYHWND __MSABI_LONG(0x00000004) #define ACM_DRIVERADDF_TYPEMASK __MSABI_LONG(0x00000007) #define ACM_DRIVERADDF_LOCAL __MSABI_LONG(0x00000000) #define ACM_DRIVERADDF_GLOBAL __MSABI_LONG(0x00000008) #define ACMDRIVERDETAILS_SHORTNAME_CHARS 32 #define ACMDRIVERDETAILS_LONGNAME_CHARS 128 #define ACMDRIVERDETAILS_COPYRIGHT_CHARS 80 #define ACMDRIVERDETAILS_LICENSING_CHARS 128 #define ACMDRIVERDETAILS_FEATURES_CHARS 512 #define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a', 'u', 'd', 'c') #define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED mmioFOURCC('\0', '\0', '\0', '\0') #define ACMDRIVERDETAILS_SUPPORTF_CODEC __MSABI_LONG(0x00000001) #define ACMDRIVERDETAILS_SUPPORTF_CONVERTER __MSABI_LONG(0x00000002) #define ACMDRIVERDETAILS_SUPPORTF_FILTER __MSABI_LONG(0x00000004) #define ACMDRIVERDETAILS_SUPPORTF_HARDWARE __MSABI_LONG(0x00000008) #define ACMDRIVERDETAILS_SUPPORTF_ASYNC __MSABI_LONG(0x00000010) #define ACMDRIVERDETAILS_SUPPORTF_LOCAL __MSABI_LONG(0x40000000) #define ACMDRIVERDETAILS_SUPPORTF_DISABLED __MSABI_LONG(0x80000000) #define ACM_DRIVERENUMF_NOLOCAL __MSABI_LONG(0x40000000) #define ACM_DRIVERENUMF_DISABLED __MSABI_LONG(0x80000000) #define ACM_DRIVERPRIORITYF_ENABLE __MSABI_LONG(0x00000001) #define ACM_DRIVERPRIORITYF_DISABLE __MSABI_LONG(0x00000002) #define ACM_DRIVERPRIORITYF_ABLEMASK __MSABI_LONG(0x00000003) #define ACM_DRIVERPRIORITYF_BEGIN __MSABI_LONG(0x00010000) #define ACM_DRIVERPRIORITYF_END __MSABI_LONG(0x00020000) #define ACM_DRIVERPRIORITYF_DEFERMASK __MSABI_LONG(0x00030000) #define MM_ACM_FILTERCHOOSE 0x8000 #define FILTERCHOOSE_MESSAGE 0 #define FILTERCHOOSE_FILTERTAG_VERIFY (FILTERCHOOSE_MESSAGE+0) #define FILTERCHOOSE_FILTER_VERIFY (FILTERCHOOSE_MESSAGE+1) #define FILTERCHOOSE_CUSTOM_VERIFY (FILTERCHOOSE_MESSAGE+2) #define ACMFILTERCHOOSE_STYLEF_SHOWHELP __MSABI_LONG(0x00000004) #define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK __MSABI_LONG(0x00000008) #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE __MSABI_LONG(0x00000010) #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020) #define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT __MSABI_LONG(0x00000040) #define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP __MSABI_LONG(0x00000080) #define ACMFILTERDETAILS_FILTER_CHARS 128 #define ACM_FILTERDETAILSF_INDEX __MSABI_LONG(0x00000000) #define ACM_FILTERDETAILSF_FILTER __MSABI_LONG(0x00000001) #define ACM_FILTERDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F) #define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48 #define ACM_FILTERTAGDETAILSF_INDEX __MSABI_LONG(0x00000000) #define ACM_FILTERTAGDETAILSF_FILTERTAG __MSABI_LONG(0x00000001) #define ACM_FILTERTAGDETAILSF_LARGESTSIZE __MSABI_LONG(0x00000002) #define ACM_FILTERTAGDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F) #define ACM_FILTERENUMF_DWFILTERTAG __MSABI_LONG(0x00010000) #define ACMHELPMSGSTRINGA "acmchoose_help" #if defined(__GNUC__) # define ACMHELPMSGSTRINGW (const WCHAR []){ 'a','c','m', \ 'c','h','o','o','s','e','_','h','e','l','p',0 } #elif defined(_MSC_VER) # define ACMHELPMSGSTRINGW L"acmchoose_help" #else static const WCHAR ACMHELPMSGSTRINGW[] = { 'a','c','m', 'c','h','o','o','s','e','_','h','e','l','p',0 }; #endif #define ACMHELPMSGSTRING WINELIB_NAME_AW(ACMHELPMSGSTRING) #define ACMHELPMSGCONTEXTMENUA "acmchoose_contextmenu" #if defined(__GNUC__) # define ACMHELPMSGCONTEXTMENUW (const WCHAR []){ 'a','c','m', \ 'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 } #elif defined(_MSC_VER) # define ACMHELPMSGCONTEXTMENUW L"acmchoose_contextmenu" #else static const WCHAR ACMHELPMSGCONTEXTMENUW[] = { 'a','c','m', 'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 }; #endif #define ACMHELPMSGCONTEXTMENU WINELIB_NAME_AW(ACMHELPMSGCONTEXTMENU) #define ACMHELPMSGCONTEXTHELPA "acmchoose_contexthelp" #if defined(__GNUC__) # define ACMHELPMSGCONTEXTHELPW (const WCHAR []){ 'a','c','m', \ 'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 } #elif defined(_MSC_VER) # define ACMHELPMSGCONTEXTHELPW L"acmchoose_contexthelp" #else static const WCHAR ACMHELPMSGCONTEXTHELPW[] = { 'a','c','m', 'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 }; #endif #define ACMHELPMSGCONTEXTHELP WINELIB_NAME_AW(ACMHELPMSGCONTEXTHELP) #define MM_ACM_FORMATCHOOSE 0x8000 #define FORMATCHOOSE_MESSAGE 0 #define FORMATCHOOSE_FORMATTAG_VERIFY (FORMATCHOOSE_MESSAGE+0) #define FORMATCHOOSE_FORMAT_VERIFY (FORMATCHOOSE_MESSAGE+1) #define FORMATCHOOSE_CUSTOM_VERIFY (FORMATCHOOSE_MESSAGE+2) #define ACMFORMATCHOOSE_STYLEF_SHOWHELP __MSABI_LONG(0x00000004) #define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK __MSABI_LONG(0x00000008) #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE __MSABI_LONG(0x00000010) #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020) #define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT __MSABI_LONG(0x00000040) #define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP __MSABI_LONG(0x00000080) #define ACMFORMATDETAILS_FORMAT_CHARS 128 #define ACM_FORMATDETAILSF_INDEX __MSABI_LONG(0x00000000) #define ACM_FORMATDETAILSF_FORMAT __MSABI_LONG(0x00000001) #define ACM_FORMATDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F) #define ACM_FORMATENUMF_WFORMATTAG __MSABI_LONG(0x00010000) #define ACM_FORMATENUMF_NCHANNELS __MSABI_LONG(0x00020000) #define ACM_FORMATENUMF_NSAMPLESPERSEC __MSABI_LONG(0x00040000) #define ACM_FORMATENUMF_WBITSPERSAMPLE __MSABI_LONG(0x00080000) #define ACM_FORMATENUMF_CONVERT __MSABI_LONG(0x00100000) #define ACM_FORMATENUMF_SUGGEST __MSABI_LONG(0x00200000) #define ACM_FORMATENUMF_HARDWARE __MSABI_LONG(0x00400000) #define ACM_FORMATENUMF_INPUT __MSABI_LONG(0x00800000) #define ACM_FORMATENUMF_OUTPUT __MSABI_LONG(0x01000000) #define ACM_FORMATSUGGESTF_WFORMATTAG __MSABI_LONG(0x00010000) #define ACM_FORMATSUGGESTF_NCHANNELS __MSABI_LONG(0x00020000) #define ACM_FORMATSUGGESTF_NSAMPLESPERSEC __MSABI_LONG(0x00040000) #define ACM_FORMATSUGGESTF_WBITSPERSAMPLE __MSABI_LONG(0x00080000) #define ACM_FORMATSUGGESTF_TYPEMASK __MSABI_LONG(0x00FF0000) #define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48 #define ACM_FORMATTAGDETAILSF_INDEX __MSABI_LONG(0x00000000) #define ACM_FORMATTAGDETAILSF_FORMATTAG __MSABI_LONG(0x00000001) #define ACM_FORMATTAGDETAILSF_LARGESTSIZE __MSABI_LONG(0x00000002) #define ACM_FORMATTAGDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F) #define ACM_METRIC_COUNT_DRIVERS 1 #define ACM_METRIC_COUNT_CODECS 2 #define ACM_METRIC_COUNT_CONVERTERS 3 #define ACM_METRIC_COUNT_FILTERS 4 #define ACM_METRIC_COUNT_DISABLED 5 #define ACM_METRIC_COUNT_HARDWARE 6 #define ACM_METRIC_COUNT_LOCAL_DRIVERS 20 #define ACM_METRIC_COUNT_LOCAL_CODECS 21 #define ACM_METRIC_COUNT_LOCAL_CONVERTERS 22 #define ACM_METRIC_COUNT_LOCAL_FILTERS 23 #define ACM_METRIC_COUNT_LOCAL_DISABLED 24 #define ACM_METRIC_HARDWARE_WAVE_INPUT 30 #define ACM_METRIC_HARDWARE_WAVE_OUTPUT 31 #define ACM_METRIC_MAX_SIZE_FORMAT 50 #define ACM_METRIC_MAX_SIZE_FILTER 51 #define ACM_METRIC_DRIVER_SUPPORT 100 #define ACM_METRIC_DRIVER_PRIORITY 101 #define ACM_STREAMCONVERTF_BLOCKALIGN 0x00000004 #define ACM_STREAMCONVERTF_START 0x00000010 #define ACM_STREAMCONVERTF_END 0x00000020 #define ACMSTREAMHEADER_STATUSF_DONE __MSABI_LONG(0x00010000) #define ACMSTREAMHEADER_STATUSF_PREPARED __MSABI_LONG(0x00020000) #define ACMSTREAMHEADER_STATUSF_INQUEUE __MSABI_LONG(0x00100000) #define ACM_STREAMOPENF_QUERY 0x00000001 #define ACM_STREAMOPENF_ASYNC 0x00000002 #define ACM_STREAMOPENF_NONREALTIME 0x00000004 #define ACM_STREAMSIZEF_SOURCE __MSABI_LONG(0x00000000) #define ACM_STREAMSIZEF_DESTINATION __MSABI_LONG(0x00000001) #define ACM_STREAMSIZEF_QUERYMASK __MSABI_LONG(0x0000000F) #define ACMDM_USER (DRV_USER + 0x0000) #define ACMDM_RESERVED_LOW (DRV_USER + 0x2000) #define ACMDM_RESERVED_HIGH (DRV_USER + 0x2FFF) #define ACMDM_BASE ACMDM_RESERVED_LOW #define ACMDM_DRIVER_ABOUT (ACMDM_BASE + 11) /* handles */ DECLARE_HANDLE(HACMDRIVERID); DECLARE_HANDLE(HACMDRIVER); DECLARE_HANDLE(HACMSTREAM); DECLARE_HANDLE(HACMOBJ); typedef HACMDRIVERID *PHACMDRIVERID, *LPHACMDRIVERID; typedef HACMDRIVER *PHACMDRIVER, *LPHACMDRIVER; typedef HACMSTREAM *PHACMSTREAM, *LPHACMSTREAM; typedef HACMOBJ *PHACMOBJ, *LPHACMOBJ; /*********************************************************************** * Callbacks */ typedef BOOL (CALLBACK *ACMDRIVERENUMCB)( HACMDRIVERID hadid, DWORD_PTR dwInstance, DWORD fdwSupport ); typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); #define ACMFILTERCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFILTERCHOOSEHOOKPROC) typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); #define ACMFORMATCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFORMATCHOOSEHOOKPROC) /*********************************************************************** * Structures */ typedef struct _ACMDRIVERDETAILSA { DWORD cbStruct; FOURCC fccType; FOURCC fccComp; WORD wMid; WORD wPid; DWORD vdwACM; DWORD vdwDriver; DWORD fdwSupport; DWORD cFormatTags; DWORD cFilterTags; HICON hicon; CHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; CHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; CHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; CHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; CHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; } ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA, *LPACMDRIVERDETAILSA; typedef struct _ACMDRIVERDETAILSW { DWORD cbStruct; FOURCC fccType; FOURCC fccComp; WORD wMid; WORD wPid; DWORD vdwACM; DWORD vdwDriver; DWORD fdwSupport; DWORD cFormatTags; DWORD cFilterTags; HICON hicon; WCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; WCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; WCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; WCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; WCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; } ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW, *LPACMDRIVERDETAILSW; DECL_WINELIB_TYPE_AW(ACMDRIVERDETAILS) DECL_WINELIB_TYPE_AW(PACMDRIVERDETAILS) DECL_WINELIB_TYPE_AW(LPACMDRIVERDETAILS) typedef struct _ACMFILTERCHOOSEA { DWORD cbStruct; DWORD fdwStyle; HWND hwndOwner; PWAVEFILTER pwfltr; DWORD cbwfltr; LPCSTR pszTitle; CHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS]; CHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS]; LPSTR pszName; DWORD cchName; DWORD fdwEnum; PWAVEFILTER pwfltrEnum; HINSTANCE hInstance; LPCSTR pszTemplateName; LPARAM lCustData; ACMFILTERCHOOSEHOOKPROCA pfnHook; } ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA, *LPACMFILTERCHOOSEA; typedef struct _ACMFILTERCHOOSEW { DWORD cbStruct; DWORD fdwStyle; HWND hwndOwner; PWAVEFILTER pwfltr; DWORD cbwfltr; LPCWSTR pszTitle; WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS]; WCHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS]; LPWSTR pszName; DWORD cchName; DWORD fdwEnum; PWAVEFILTER pwfltrEnum; HINSTANCE hInstance; LPCWSTR pszTemplateName; LPARAM lCustData; ACMFILTERCHOOSEHOOKPROCW pfnHook; } ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW, *LPACMFILTERCHOOSEW; DECL_WINELIB_TYPE_AW(ACMFILTERCHOOSE) DECL_WINELIB_TYPE_AW(PACMFILTERCHOOSE) DECL_WINELIB_TYPE_AW(LPACMFILTERCHOOSE) typedef struct _ACMFILTERDETAILSA { DWORD cbStruct; DWORD dwFilterIndex; DWORD dwFilterTag; DWORD fdwSupport; PWAVEFILTER pwfltr; DWORD cbwfltr; CHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS]; } ACMFILTERDETAILSA, *PACMFILTERDETAILSA, *LPACMFILTERDETAILSA; typedef struct _ACMFILTERDETAILSW { DWORD cbStruct; DWORD dwFilterIndex; DWORD dwFilterTag; DWORD fdwSupport; PWAVEFILTER pwfltr; DWORD cbwfltr; WCHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS]; } ACMFILTERDETAILSW, *PACMFILTERDETAILSW, *LPACMFILTERDETAILSW; DECL_WINELIB_TYPE_AW(ACMFILTERDETAILS) DECL_WINELIB_TYPE_AW(PACMFILTERDETAILS) DECL_WINELIB_TYPE_AW(LPACMFILTERDETAILS) typedef struct _ACMFILTERTAGDETAILSA { DWORD cbStruct; DWORD dwFilterTagIndex; DWORD dwFilterTag; DWORD cbFilterSize; DWORD fdwSupport; DWORD cStandardFilters; CHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS]; } ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA, *LPACMFILTERTAGDETAILSA; typedef struct _ACMFILTERTAGDETAILSW { DWORD cbStruct; DWORD dwFilterTagIndex; DWORD dwFilterTag; DWORD cbFilterSize; DWORD fdwSupport; DWORD cStandardFilters; WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS]; } ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW, *LPACMFILTERTAGDETAILSW; DECL_WINELIB_TYPE_AW(ACMFILTERTAGDETAILS) DECL_WINELIB_TYPE_AW(PACMFILTERTAGDETAILS) DECL_WINELIB_TYPE_AW(LPACMFILTERTAGDETAILS) typedef struct _ACMFORMATCHOOSEA { DWORD cbStruct; DWORD fdwStyle; HWND hwndOwner; PWAVEFORMATEX pwfx; DWORD cbwfx; LPCSTR pszTitle; CHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; CHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; LPSTR pszName; DWORD cchName; DWORD fdwEnum; PWAVEFORMATEX pwfxEnum; HINSTANCE hInstance; LPCSTR pszTemplateName; LPARAM lCustData; ACMFORMATCHOOSEHOOKPROCA pfnHook; } ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA, *LPACMFORMATCHOOSEA; typedef struct _ACMFORMATCHOOSEW { DWORD cbStruct; DWORD fdwStyle; HWND hwndOwner; PWAVEFORMATEX pwfx; DWORD cbwfx; LPCWSTR pszTitle; WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; LPWSTR pszName; DWORD cchName; DWORD fdwEnum; LPWAVEFORMATEX pwfxEnum; HINSTANCE hInstance; LPCWSTR pszTemplateName; LPARAM lCustData; ACMFORMATCHOOSEHOOKPROCW pfnHook; } ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW, *LPACMFORMATCHOOSEW; DECL_WINELIB_TYPE_AW(ACMFORMATCHOOSE) DECL_WINELIB_TYPE_AW(PACMFORMATCHOOSE) DECL_WINELIB_TYPE_AW(LPACMFORMATCHOOSE) typedef struct _ACMFORMATDETAILSA { DWORD cbStruct; DWORD dwFormatIndex; DWORD dwFormatTag; DWORD fdwSupport; PWAVEFORMATEX pwfx; DWORD cbwfx; CHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; } ACMFORMATDETAILSA, *PACMFORMATDETAILSA, *LPACMFORMATDETAILSA; typedef struct _ACMFORMATDETAILSW { DWORD cbStruct; DWORD dwFormatIndex; DWORD dwFormatTag; DWORD fdwSupport; PWAVEFORMATEX pwfx; DWORD cbwfx; WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; } ACMFORMATDETAILSW, *PACMFORMATDETAILSW, *LPACMFORMATDETAILSW; DECL_WINELIB_TYPE_AW(ACMFORMATDETAILS) DECL_WINELIB_TYPE_AW(PACMFORMATDETAILS) DECL_WINELIB_TYPE_AW(LPACMFORMATDETAILS) typedef struct _ACMFORMATTAGDETAILSA { DWORD cbStruct; DWORD dwFormatTagIndex; DWORD dwFormatTag; DWORD cbFormatSize; DWORD fdwSupport; DWORD cStandardFormats; CHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; } ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA, *LPACMFORMATTAGDETAILSA; typedef struct _ACMFORMATTAGDETAILSW { DWORD cbStruct; DWORD dwFormatTagIndex; DWORD dwFormatTag; DWORD cbFormatSize; DWORD fdwSupport; DWORD cStandardFormats; WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; } ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW, *LPACMFORMATTAGDETAILSW; DECL_WINELIB_TYPE_AW(ACMFORMATTAGDETAILS) DECL_WINELIB_TYPE_AW(PACMFORMATTAGDETAILS) DECL_WINELIB_TYPE_AW(LPACMFORMATTAGDETAILS) #ifdef _WIN64 # define _ACMSTREAMHEADERRESERVE 15 #else # define _ACMSTREAMHEADERRESERVE 10 #endif typedef struct _ACMSTREAMHEADER { DWORD cbStruct; DWORD fdwStatus; DWORD_PTR dwUser; LPBYTE pbSrc; DWORD cbSrcLength; DWORD cbSrcLengthUsed; DWORD_PTR dwSrcUser; LPBYTE pbDst; DWORD cbDstLength; DWORD cbDstLengthUsed; DWORD_PTR dwDstUser; DWORD dwReservedDriver[_ACMSTREAMHEADERRESERVE]; } ACMSTREAMHEADER, *PACMSTREAMHEADER, *LPACMSTREAMHEADER; #undef _ACMSTREAMHEADERRESERVE /*********************************************************************** * Callbacks 2 */ typedef BOOL (CALLBACK *ACMFILTERENUMCBA)( HACMDRIVERID hadid, PACMFILTERDETAILSA pafd, DWORD_PTR dwInstance, DWORD fdwSupport ); typedef BOOL (CALLBACK *ACMFILTERENUMCBW)( HACMDRIVERID hadid, PACMFILTERDETAILSW pafd, DWORD_PTR dwInstance, DWORD fdwSupport ); #define ACMFILTERENUMCB WINELIB_NAME_AW(ACMFILTERENUMCB) typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)( HACMDRIVERID hadid, PACMFILTERTAGDETAILSA paftd, DWORD_PTR dwInstance, DWORD fdwSupport ); typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)( HACMDRIVERID hadid, PACMFILTERTAGDETAILSW paftd, DWORD_PTR dwInstance, DWORD fdwSupport ); #define ACMFILTERTAGENUMCB WINELIB_NAME_AW(ACMFILTERTAGENUMCB) typedef BOOL (CALLBACK *ACMFORMATENUMCBA)( HACMDRIVERID hadid, PACMFORMATDETAILSA pafd, DWORD_PTR dwInstance, DWORD fdwSupport ); typedef BOOL (CALLBACK *ACMFORMATENUMCBW)( HACMDRIVERID hadid, PACMFORMATDETAILSW pafd, DWORD_PTR dwInstance, DWORD fdwSupport ); #define ACMFORMATENUMCB WINELIB_NAME_AW(ACMFORMATENUMCB) typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)( HACMDRIVERID hadid, PACMFORMATTAGDETAILSA paftd, DWORD_PTR dwInstance, DWORD fdwSupport ); typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)( HACMDRIVERID hadid, PACMFORMATTAGDETAILSW paftd, DWORD_PTR dwInstance, DWORD fdwSupport ); #define ACMFORMATTAGENUMCB WINELIB_NAME_AW(ACMFORMATTAGENUMCB) /*********************************************************************** * Functions - Win32 */ MMRESULT WINAPI acmDriverAddA( PHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd ); MMRESULT WINAPI acmDriverAddW( PHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd ); #define acmDriverAdd WINELIB_NAME_AW(acmDriverAdd) MMRESULT WINAPI acmDriverClose( HACMDRIVER had, DWORD fdwClose ); MMRESULT WINAPI acmDriverDetailsA( HACMDRIVERID hadid, PACMDRIVERDETAILSA padd, DWORD fdwDetails ); MMRESULT WINAPI acmDriverDetailsW( HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails ); #define acmDriverDetails WINELIB_NAME_AW(acmDriverDetails) MMRESULT WINAPI acmDriverEnum( ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); MMRESULT WINAPI acmDriverID( HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID ); LRESULT WINAPI acmDriverMessage( HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2 ); MMRESULT WINAPI acmDriverOpen( PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen ); MMRESULT WINAPI acmDriverPriority( HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority ); MMRESULT WINAPI acmDriverRemove( HACMDRIVERID hadid, DWORD fdwRemove ); MMRESULT WINAPI acmFilterChooseA( PACMFILTERCHOOSEA pafltrc ); MMRESULT WINAPI acmFilterChooseW( PACMFILTERCHOOSEW pafltrc ); #define acmFilterChoose WINELIB_NAME_AW(acmFilterChoose) MMRESULT WINAPI acmFilterDetailsA( HACMDRIVER had, PACMFILTERDETAILSA pafd, DWORD fdwDetails ); MMRESULT WINAPI acmFilterDetailsW( HACMDRIVER had, PACMFILTERDETAILSW pafd, DWORD fdwDetails ); #define acmFilterDetails WINELIB_NAME_AW(acmFilterDetails) MMRESULT WINAPI acmFilterEnumA( HACMDRIVER had, PACMFILTERDETAILSA pafd, ACMFILTERENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); MMRESULT WINAPI acmFilterEnumW( HACMDRIVER had, PACMFILTERDETAILSW pafd, ACMFILTERENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); #define acmFilterEnum WINELIB_NAME_AW(acmFilterEnum) MMRESULT WINAPI acmFilterTagDetailsA( HACMDRIVER had, PACMFILTERTAGDETAILSA paftd, DWORD fdwDetails ); MMRESULT WINAPI acmFilterTagDetailsW( HACMDRIVER had, PACMFILTERTAGDETAILSW paftd, DWORD fdwDetails ); #define acmFilterTagDetails WINELIB_NAME_AW(acmFilterTagDetails) MMRESULT WINAPI acmFilterTagEnumA( HACMDRIVER had, PACMFILTERTAGDETAILSA paftd, ACMFILTERTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); MMRESULT WINAPI acmFilterTagEnumW( HACMDRIVER had, PACMFILTERTAGDETAILSW paftd, ACMFILTERTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); #define acmFilterTagEnum WINELIB_NAME_AW(acmFilterTagEnum) MMRESULT WINAPI acmFormatChooseA( PACMFORMATCHOOSEA pafmtc ); MMRESULT WINAPI acmFormatChooseW( PACMFORMATCHOOSEW pafmtc ); #define acmFormatChoose WINELIB_NAME_AW(acmFormatChoose) MMRESULT WINAPI acmFormatDetailsA( HACMDRIVER had, PACMFORMATDETAILSA pafd, DWORD fdwDetails ); MMRESULT WINAPI acmFormatDetailsW( HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD fdwDetails ); #define acmFormatDetails WINELIB_NAME_AW(acmFormatDetails) MMRESULT WINAPI acmFormatEnumA( HACMDRIVER had, PACMFORMATDETAILSA pafd, ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); MMRESULT WINAPI acmFormatEnumW( HACMDRIVER had, PACMFORMATDETAILSW pafd, ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); #define acmFormatEnum WINELIB_NAME_AW(acmFormatEnum) MMRESULT WINAPI acmFormatSuggest( HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst, DWORD cbwfxDst, DWORD fdwSuggest ); MMRESULT WINAPI acmFormatTagDetailsA( HACMDRIVER had, PACMFORMATTAGDETAILSA paftd, DWORD fdwDetails ); MMRESULT WINAPI acmFormatTagDetailsW( HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, DWORD fdwDetails ); #define acmFormatTagDetails WINELIB_NAME_AW(acmFormatTagDetails) MMRESULT WINAPI acmFormatTagEnumA( HACMDRIVER had, PACMFORMATTAGDETAILSA paftd, ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); MMRESULT WINAPI acmFormatTagEnumW( HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum ); #define acmFormatTagEnum WINELIB_NAME_AW(acmFormatTagEnum) DWORD WINAPI acmGetVersion(void ); MMRESULT WINAPI acmMetrics( HACMOBJ hao, UINT uMetric, LPVOID pMetric ); MMRESULT WINAPI acmStreamClose( HACMSTREAM has, DWORD fdwClose ); MMRESULT WINAPI acmStreamConvert( HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwConvert ); MMRESULT WINAPI acmStreamMessage( HACMSTREAM has, UINT uMsg, LPARAM lParam1, LPARAM lParam2 ); MMRESULT WINAPI acmStreamOpen( PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen ); MMRESULT WINAPI acmStreamPrepareHeader( HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwPrepare ); MMRESULT WINAPI acmStreamReset( HACMSTREAM has, DWORD fdwReset ); MMRESULT WINAPI acmStreamSize( HACMSTREAM has, DWORD cbInput, LPDWORD pdwOutputBytes, DWORD fdwSize ); MMRESULT WINAPI acmStreamUnprepareHeader( HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare ); #include #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_MSACM_H */ ================================================ FILE: wine/windows/msacmdlg.h ================================================ /* * definitions for MSACM dialog boxes * * Copyright (C) 2001 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define DLG_ACMFORMATCHOOSE_ID 70 #define IDD_ACMFORMATCHOOSE_BTN_HELP 9 #define IDD_ACMFORMATCHOOSE_CMB_CUSTOM 100 #define IDD_ACMFORMATCHOOSE_CMB_FORMATTAG 101 #define IDD_ACMFORMATCHOOSE_CMB_FORMAT 102 #define IDD_ACMFORMATCHOOSE_BTN_SETNAME 103 #define IDD_ACMFORMATCHOOSE_BTN_DELNAME 104 #define DLG_ACMFILTERCHOOSE_ID 71 #define IDD_ACMFILTERCHOOSE_BTN_HELP 9 #define IDD_ACMFILTERCHOOSE_CMB_CUSTOM 100 #define IDD_ACMFILTERCHOOSE_CMB_FILTERTAG 101 #define IDD_ACMFILTERCHOOSE_CMB_FILTER 102 #define IDD_ACMFILTERCHOOSE_BTN_SETNAME 103 #define IDD_ACMFILTERCHOOSE_BTN_DELNAME 104 ================================================ FILE: wine/windows/msacmdrv.h ================================================ /* * Declarations for MSACM driver * * Copyright 1998 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSACMDRV_H #define __WINE_MSACMDRV_H #include #include #include #include #include #include /*********************************************************************** * Types */ /*********************************************************************** * Defines/Enums */ #define MAKE_ACM_VERSION(mjr, mnr, bld) \ (((LONG)(mjr)<<24) | ((LONG)(mnr)<<16) | ((LONG)bld)) #define ACMDRVOPENDESC_SECTIONNAME_CHARS #define ACMDM_DRIVER_NOTIFY (ACMDM_BASE + 1) #define ACMDM_DRIVER_DETAILS (ACMDM_BASE + 10) #define ACMDM_DRIVER_ABOUT (ACMDM_BASE + 11) #define ACMDM_HARDWARE_WAVE_CAPS_INPUT (ACMDM_BASE + 20) #define ACMDM_HARDWARE_WAVE_CAPS_OUTPUT (ACMDM_BASE + 21) #define ACMDM_FORMATTAG_DETAILS (ACMDM_BASE + 25) #define ACMDM_FORMAT_DETAILS (ACMDM_BASE + 26) #define ACMDM_FORMAT_SUGGEST (ACMDM_BASE + 27) #define ACMDM_FILTERTAG_DETAILS (ACMDM_BASE + 50) #define ACMDM_FILTER_DETAILS (ACMDM_BASE + 51) #define ACMDM_STREAM_OPEN (ACMDM_BASE + 76) #define ACMDM_STREAM_CLOSE (ACMDM_BASE + 77) #define ACMDM_STREAM_SIZE (ACMDM_BASE + 78) #define ACMDM_STREAM_CONVERT (ACMDM_BASE + 79) #define ACMDM_STREAM_RESET (ACMDM_BASE + 80) #define ACMDM_STREAM_PREPARE (ACMDM_BASE + 81) #define ACMDM_STREAM_UNPREPARE (ACMDM_BASE + 82) #define ACMDM_STREAM_UPDATE (ACMDM_BASE + 83) /*********************************************************************** * Structures */ typedef struct _ACMDRVOPENDESCA { DWORD cbStruct; FOURCC fccType; FOURCC fccComp; DWORD dwVersion; DWORD dwFlags; DWORD dwError; LPCSTR pszSectionName; LPCSTR pszAliasName; DWORD dnDevNode; } ACMDRVOPENDESCA, *PACMDRVOPENDESCA; typedef struct _ACMDRVOPENDESCW { DWORD cbStruct; FOURCC fccType; FOURCC fccComp; DWORD dwVersion; DWORD dwFlags; DWORD dwError; LPCWSTR pszSectionName; LPCWSTR pszAliasName; DWORD dnDevNode; } ACMDRVOPENDESCW, *PACMDRVOPENDESCW; typedef struct _ACMDRVSTREAMINSTANCE { DWORD cbStruct; PWAVEFORMATEX pwfxSrc; PWAVEFORMATEX pwfxDst; PWAVEFILTER pwfltr; DWORD_PTR dwCallback; DWORD_PTR dwInstance; DWORD fdwOpen; DWORD fdwDriver; DWORD_PTR dwDriver; HACMSTREAM has; } ACMDRVSTREAMINSTANCE, *PACMDRVSTREAMINSTANCE; typedef struct _ACMDRVSTREAMHEADER *PACMDRVSTREAMHEADER; #include typedef struct _ACMDRVSTREAMHEADER { DWORD cbStruct; DWORD fdwStatus; DWORD_PTR dwUser; LPBYTE pbSrc; DWORD cbSrcLength; DWORD cbSrcLengthUsed; DWORD_PTR dwSrcUser; LPBYTE pbDst; DWORD cbDstLength; DWORD cbDstLengthUsed; DWORD_PTR dwDstUser; DWORD fdwConvert; PACMDRVSTREAMHEADER *padshNext; DWORD fdwDriver; DWORD_PTR dwDriver; /* Internal fields for ACM */ DWORD fdwPrepared; DWORD_PTR dwPrepared; LPBYTE pbPreparedSrc; DWORD cbPreparedSrcLength; LPBYTE pbPreparedDst; DWORD cbPreparedDstLength; } ACMDRVSTREAMHEADER; #include typedef struct _ACMDRVSTREAMSIZE { DWORD cbStruct; DWORD fdwSize; DWORD cbSrcLength; DWORD cbDstLength; } ACMDRVSTREAMSIZE, *PACMDRVSTREAMSIZE; typedef struct _ACMDRVFORMATSUGGEST { DWORD cbStruct; DWORD fdwSuggest; PWAVEFORMATEX pwfxSrc; DWORD cbwfxSrc; PWAVEFORMATEX pwfxDst; DWORD cbwfxDst; } ACMDRVFORMATSUGGEST, *PACMDRVFORMATSUGGEST; #endif /* __WINE_MSACMDRV_H */ ================================================ FILE: wine/windows/msasn1.h ================================================ /* * Copyright (C) 2015 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __MS_ASN1_H__ #define __MS_ASN1_H__ #ifdef __cplusplus extern "C" { #endif typedef char ASN1char_t; typedef signed char ASN1int8_t; typedef unsigned char ASN1uint8_t; typedef unsigned short ASN1uint16_t; typedef signed short ASN1int16_t; typedef ULONG ASN1uint32_t; typedef LONG ASN1int32_t; typedef ASN1uint16_t ASN1char16_t; typedef ASN1uint32_t ASN1char32_t; typedef ASN1char_t *ASN1ztcharstring_t; typedef ASN1char16_t *ASN1ztchar16string_t; typedef ASN1char32_t *ASN1ztchar32string_t; typedef ASN1int32_t ASN1enum_t; typedef ASN1uint8_t ASN1octet_t; typedef ASN1uint8_t ASN1bool_t; typedef ASN1uint16_t ASN1choice_t; typedef ASN1uint32_t ASN1magic_t; typedef ASN1ztcharstring_t ASN1objectdescriptor_t; typedef void (WINAPI *ASN1FreeFun_t)(void *data); typedef void (WINAPI *ASN1GenericFun_t)(void); typedef struct ASN1encoding_s *ASN1encoding_t; typedef struct ASN1decoding_s *ASN1decoding_t; typedef ASN1int32_t (WINAPI *ASN1PerEncFun_t)(ASN1encoding_t enc,void *data); typedef ASN1int32_t (WINAPI *ASN1PerDecFun_t)(ASN1decoding_t enc,void *data); typedef struct tagASN1PerFunArr_t { const ASN1PerEncFun_t *apfnEncoder; const ASN1PerDecFun_t *apfnDecoder; } ASN1PerFunArr_t; typedef ASN1int32_t (WINAPI *ASN1BerEncFun_t)(ASN1encoding_t enc,ASN1uint32_t tag,void *data); typedef ASN1int32_t (WINAPI *ASN1BerDecFun_t)(ASN1decoding_t enc,ASN1uint32_t tag,void *data); typedef struct tagASN1BerFunArr_t { const ASN1BerEncFun_t *apfnEncoder; const ASN1BerDecFun_t *apfnDecoder; } ASN1BerFunArr_t; typedef struct tagASN1bitstring_t { ASN1uint32_t length; ASN1octet_t *value; } ASN1bitstring_t; typedef enum tagASN1blocktype_e { ASN1_DER_SET_OF_BLOCK, } ASN1blocktype_e; typedef struct tagASN1charstring_t { ASN1uint32_t length; ASN1char_t *value; } ASN1charstring_t; typedef struct tagASN1char16string_t { ASN1uint32_t length; ASN1char16_t *value; } ASN1char16string_t; typedef struct tagASN1char32string_t { ASN1uint32_t length; ASN1char32_t *value; } ASN1char32string_t; typedef struct tagASN1encodedOID_t { ASN1uint16_t length; ASN1octet_t *value; } ASN1encodedOID_t; typedef enum { ASN1_PER_RULE_ALIGNED = 0x0001,ASN1_PER_RULE_UNALIGNED = 0x0002,ASN1_PER_RULE = ASN1_PER_RULE_ALIGNED | ASN1_PER_RULE_UNALIGNED, ASN1_BER_RULE_BER = 0x0100,ASN1_BER_RULE_CER = 0x0200,ASN1_BER_RULE_DER = 0x0400, ASN1_BER_RULE = ASN1_BER_RULE_BER | ASN1_BER_RULE_CER | ASN1_BER_RULE_DER } ASN1encodingrule_e; typedef enum tagASN1error_e { ASN1_SUCCESS = 0, ASN1_ERR_INTERNAL = -1001, ASN1_ERR_EOD = -1002, ASN1_ERR_CORRUPT = -1003, ASN1_ERR_LARGE = -1004, ASN1_ERR_CONSTRAINT = -1005, ASN1_ERR_MEMORY = -1006, ASN1_ERR_OVERFLOW = -1007, ASN1_ERR_BADPDU = -1008, ASN1_ERR_BADARGS = -1009, ASN1_ERR_BADREAL = -1010, ASN1_ERR_BADTAG = -1011, ASN1_ERR_CHOICE = -1012, ASN1_ERR_RULE = -1013, ASN1_ERR_UTF8 = -1014, ASN1_ERR_PDU_TYPE = -1051, ASN1_ERR_NYI = -1052, ASN1_WRN_EXTENDED = 1001, ASN1_WRN_NOEOD = 1002, } ASN1error_e; typedef struct tagASN1generalizedtime_t { ASN1uint16_t year; ASN1uint8_t month; ASN1uint8_t day; ASN1uint8_t hour; ASN1uint8_t minute; ASN1uint8_t second; ASN1uint16_t millisecond; ASN1bool_t universal; ASN1int16_t diff; } ASN1generalizedtime_t; typedef struct tagASN1intx_t { ASN1uint32_t length; ASN1octet_t *value; } ASN1intx_t; typedef struct tagASN1module_t { ASN1magic_t nModuleName; ASN1encodingrule_e eRule; ASN1uint32_t dwFlags; ASN1uint32_t cPDUs; const ASN1FreeFun_t *apfnFreeMemory; const ASN1uint32_t *acbStructSize; union { ASN1PerFunArr_t PER; ASN1BerFunArr_t BER; }; } *ASN1module_t; typedef struct ASN1objectidentifier_s { struct ASN1objectidentifier_s *next; ASN1uint32_t value; } *ASN1objectidentifier_t; typedef struct tagASN1objectidentifier2_t { ASN1uint16_t count; ASN1uint32_t value[16]; } ASN1objectidentifier2_t; typedef struct tagASN1octetstring_t { ASN1uint32_t length; ASN1octet_t *value; } ASN1octetstring_t; typedef struct tagASN1open_t { ASN1uint32_t length; union { void *encoded; void *value; }; } ASN1open_t; typedef enum tagASN1option_e { ASN1OPT_CHANGE_RULE = 0x101, ASN1OPT_GET_RULE = 0x201, ASN1OPT_NOT_REUSE_BUFFER = 0x301, ASN1OPT_REWIND_BUFFER = 0x302, ASN1OPT_SET_DECODED_BUFFER = 0x501, ASN1OPT_DEL_DECODED_BUFFER = 0x502, ASN1OPT_GET_DECODED_BUFFER_SIZE = 0x601, } ASN1option_e; typedef struct tagASN1optionparam_t { ASN1option_e eOption; union { ASN1encodingrule_e eRule; ASN1uint32_t cbRequiredDecodedBufSize; struct { ASN1octet_t* pbBuf; ASN1uint32_t cbBufSize; } Buffer; }; } ASN1optionparam_t, ASN1optionparam_s; typedef struct tagASN1utctime_t { ASN1uint8_t year; ASN1uint8_t month; ASN1uint8_t day; ASN1uint8_t hour; ASN1uint8_t minute; ASN1uint8_t second; ASN1bool_t universal; ASN1int16_t diff; } ASN1utctime_t; typedef struct tagASN1wstring_t { ASN1uint32_t length; WCHAR *value; } ASN1wstring_t; void WINAPI ASN1_CloseDecoder(ASN1decoding_t); void WINAPI ASN1_CloseEncoder(ASN1encoding_t); void WINAPI ASN1_CloseEncoder2(ASN1encoding_t); void WINAPI ASN1_CloseModule(ASN1module_t); ASN1error_e WINAPI ASN1_CreateDecoder(ASN1module_t, ASN1decoding_t*,ASN1octet_t*, ASN1uint32_t, ASN1decoding_t); ASN1error_e WINAPI ASN1_CreateEncoder(ASN1module_t, ASN1encoding_t*, ASN1octet_t*, ASN1uint32_t, ASN1encoding_t); ASN1module_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); ASN1error_e WINAPI ASN1_Decode(ASN1decoding_t, void** , ASN1uint32_t, ASN1uint32_t, ASN1octet_t*, ASN1uint32_t); ASN1error_e WINAPI ASN1_Encode(ASN1encoding_t, void*, ASN1uint32_t, ASN1uint32_t, ASN1octet_t*, ASN1uint32_t); void WINAPI ASN1_FreeDecoded(ASN1decoding_t, void*, ASN1uint32_t); void WINAPI ASN1_FreeEncoded(ASN1encoding_t, void*); ASN1error_e WINAPI ASN1_GetDecoderOption(ASN1decoding_t, ASN1optionparam_t*); ASN1error_e WINAPI ASN1_GetEncoderOption(ASN1encoding_t, ASN1optionparam_t*); ASN1error_e WINAPI ASN1_SetDecoderOption(ASN1decoding_t, ASN1optionparam_t*); ASN1error_e WINAPI ASN1_SetEncoderOption(ASN1encoding_t, ASN1optionparam_t*); int WINAPI ASN1bitstring_cmp(ASN1bitstring_t*,ASN1bitstring_t*); void WINAPI ASN1bitstring_free(ASN1bitstring_t*); int WINAPI ASN1char16string_cmp(ASN1char16string_t*,ASN1char16string_t*); void WINAPI ASN1char16string_free(ASN1char16string_t*); int WINAPI ASN1char32string_cmp(ASN1char32string_t*,ASN1char32string_t*); void WINAPI ASN1char32string_free(ASN1char32string_t*); int WINAPI ASN1charstring_cmp(ASN1charstring_t*,ASN1charstring_t*); void WINAPI ASN1charstring_free(ASN1charstring_t*); LPVOID WINAPI ASN1DecAlloc(ASN1decoding_t,ASN1uint32_t); LPVOID WINAPI ASN1DecRealloc(ASN1decoding_t,LPVOID,ASN1uint32_t); ASN1error_e WINAPI ASN1DecSetError(ASN1decoding_t,ASN1error_e); ASN1error_e WINAPI ASN1EncSetError(ASN1encoding_t,ASN1error_e); void WINAPI ASN1Free(LPVOID); int WINAPI ASN1generalizedtime_cmp(ASN1generalizedtime_t*,ASN1generalizedtime_t*); int WINAPI ASN1intx_cmp(ASN1intx_t*,ASN1intx_t*); void WINAPI ASN1intx_free(ASN1intx_t*); void WINAPI ASN1intx_setuint32(ASN1intx_t*,ASN1uint32_t); ASN1uint32_t WINAPI ASN1intx_uoctets(ASN1intx_t*); ASN1int32_t WINAPI ASN1intx2int32(ASN1intx_t*); ASN1uint32_t WINAPI ASN1intx2uint32(ASN1intx_t*); int WINAPI ASN1intxisuint32(ASN1intx_t*); int WINAPI ASN1objectidentifier_cmp(ASN1objectidentifier_t*,ASN1objectidentifier_t*); void WINAPI ASN1objectidentifier_free(ASN1objectidentifier_t*); int WINAPI ASN1objectidentifier2_cmp(ASN1objectidentifier2_t*,ASN1objectidentifier2_t*); int WINAPI ASN1octetstring_cmp(ASN1octetstring_t*,ASN1octetstring_t*); void WINAPI ASN1octetstring_free(ASN1octetstring_t*); int WINAPI ASN1open_cmp(ASN1open_t*,ASN1open_t*); void WINAPI ASN1open_free(ASN1open_t*); ASN1uint32_t WINAPI ASN1uint32_uoctets(ASN1uint32_t); void WINAPI ASN1utf8string_free(ASN1wstring_t*); int WINAPI ASN1utctime_cmp(ASN1utctime_t*,ASN1utctime_t*); int WINAPI ASN1ztchar16string_cmp(ASN1ztchar16string_t*,ASN1ztchar16string_t*); void WINAPI ASN1ztchar16string_free(ASN1ztchar16string_t*); void WINAPI ASN1ztchar32string_free(ASN1ztchar32string_t*); int WINAPI ASN1ztcharstring_cmp(ASN1ztcharstring_t*,ASN1ztcharstring_t*); void WINAPI ASN1ztcharstring_free(ASN1charstring_t*); #ifdef __cplusplus } #endif #endif /* __MS_ASN1_H__ */ ================================================ FILE: wine/windows/mscat.h ================================================ /* * Copyright (C) 2004 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSCAT_H #define __WINE_MSCAT_H #include typedef HANDLE HCATADMIN; typedef HANDLE HCATINFO; #ifdef __cplusplus extern "C" { #endif #define CRYPTCAT_OPEN_CREATENEW 0x00000001 #define CRYPTCAT_OPEN_ALWAYS 0x00000002 #define CRYPTCAT_OPEN_EXISTING 0x00000004 #define CRYPTCAT_OPEN_EXCLUDE_PAGE_HASHES 0x00010000 #define CRYPTCAT_OPEN_INCLUDE_PAGE_HASHES 0x00020000 #define CRYPTCAT_OPEN_VERIFYSIGHASH 0x10000000 #define CRYPTCAT_OPEN_NO_CONTENT_HCRYPTMSG 0x20000000 #define CRYPTCAT_OPEN_SORTED 0x40000000 #define CRYPTCAT_OPEN_FLAGS_MASK 0xffff0000 #define CRYPTCAT_E_AREA_HEADER 0x00000000 #define CRYPTCAT_E_AREA_MEMBER 0x00010000 #define CRYPTCAT_E_AREA_ATTRIBUTE 0x00020000 #define CRYPTCAT_E_CDF_UNSUPPORTED 0x00000001 #define CRYPTCAT_E_CDF_DUPLICATE 0x00000002 #define CRYPTCAT_E_CDF_TAGNOTFOUND 0x00000004 #define CRYPTCAT_E_CDF_MEMBER_FILE_PATH 0x00010001 #define CRYPTCAT_E_CDF_MEMBER_INDIRECTDATA 0x00010002 #define CRYPTCAT_E_CDF_MEMBER_FILENOTFOUND 0x00010004 #define CRYPTCAT_E_CDF_BAD_GUID_CONV 0x00020001 #define CRYPTCAT_E_CDF_ATTR_TOOFEWVALUES 0x00020002 #define CRYPTCAT_E_CDF_ATTR_TYPECOMBO 0x00020004 #include typedef struct CRYPTCATATTRIBUTE_ { DWORD cbStruct; LPWSTR pwszReferenceTag; DWORD dwAttrTypeAndAction; DWORD cbValue; BYTE *pbValue; DWORD dwReserved; } CRYPTCATATTRIBUTE; typedef struct CRYPTCATMEMBER_ { DWORD cbStruct; LPWSTR pwszReferenceTag; LPWSTR pwszFileName; GUID gSubjectType; DWORD fdwMemberFlags; struct SIP_INDIRECT_DATA_* pIndirectData; DWORD dwCertVersion; DWORD dwReserved; HANDLE hReserved; CRYPT_ATTR_BLOB sEncodedIndirectData; CRYPT_ATTR_BLOB sEncodedMemberInfo; } CRYPTCATMEMBER; typedef struct CATALOG_INFO_ { DWORD cbStruct; WCHAR wszCatalogFile[MAX_PATH]; } CATALOG_INFO; typedef struct CRYPTCATCDF_ { DWORD cbStruct; HANDLE hFile; DWORD dwCurFilePos; DWORD dwLastMemberOffset; BOOL fEOF; LPWSTR pwszResultDir; HANDLE hCATStore; } CRYPTCATCDF; #include typedef void (WINAPI *PFN_CDF_PARSE_ERROR_CALLBACK)(DWORD, DWORD, WCHAR *); BOOL WINAPI CryptCATAdminAcquireContext(HCATADMIN*,const GUID*,DWORD); BOOL WINAPI CryptCATAdminAcquireContext2(HCATADMIN*,const GUID*,const WCHAR*,const CERT_STRONG_SIGN_PARA*,DWORD); HCATINFO WINAPI CryptCATAdminAddCatalog(HCATADMIN,PWSTR,PWSTR,DWORD); BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(HANDLE,DWORD*,BYTE*,DWORD); BOOL WINAPI CryptCATAdminCalcHashFromFileHandle2(HCATADMIN,HANDLE,DWORD*,BYTE*,DWORD); HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN,BYTE*,DWORD,DWORD,HCATINFO*); BOOL WINAPI CryptCATAdminReleaseCatalogContext(HCATADMIN,HCATINFO,DWORD); BOOL WINAPI CryptCATAdminReleaseContext(HCATADMIN,DWORD); BOOL WINAPI CryptCATAdminRemoveCatalog(HCATADMIN,LPCWSTR,DWORD); BOOL WINAPI CryptCATAdminResolveCatalogPath(HCATADMIN, WCHAR *, CATALOG_INFO *, DWORD); BOOL WINAPI CryptCATCatalogInfoFromContext(HCATINFO, CATALOG_INFO *, DWORD); BOOL WINAPI CryptCATCDFClose(CRYPTCATCDF *); CRYPTCATATTRIBUTE * WINAPI CryptCATCDFEnumCatAttributes(CRYPTCATCDF *, CRYPTCATATTRIBUTE *, PFN_CDF_PARSE_ERROR_CALLBACK); LPWSTR WINAPI CryptCATCDFEnumMembersByCDFTagEx(CRYPTCATCDF *, LPWSTR, PFN_CDF_PARSE_ERROR_CALLBACK, CRYPTCATMEMBER **, BOOL, LPVOID); CRYPTCATCDF * WINAPI CryptCATCDFOpen(LPWSTR, PFN_CDF_PARSE_ERROR_CALLBACK); BOOL WINAPI CryptCATClose(HANDLE); CRYPTCATATTRIBUTE * WINAPI CryptCATEnumerateAttr(HANDLE, CRYPTCATMEMBER *, CRYPTCATATTRIBUTE *); CRYPTCATATTRIBUTE * WINAPI CryptCATEnumerateCatAttr(HANDLE, CRYPTCATATTRIBUTE *); CRYPTCATMEMBER * WINAPI CryptCATEnumerateMember(HANDLE,CRYPTCATMEMBER *); CRYPTCATATTRIBUTE * WINAPI CryptCATGetAttrInfo(HANDLE, CRYPTCATMEMBER *, LPWSTR); CRYPTCATATTRIBUTE * WINAPI CryptCATGetCatAttrInfo(HANDLE, LPWSTR); CRYPTCATMEMBER * WINAPI CryptCATGetMemberInfo(HANDLE, LPWSTR); HANDLE WINAPI CryptCATOpen(LPWSTR,DWORD,HCRYPTPROV,DWORD,DWORD); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/mscoree.idl ================================================ /* * Copyright (C) 2007 Francois Gouget * Copyright (C) 2008 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; cpp_quote("/* FIXME: #include */") cpp_quote("/* FIXME: #include */") cpp_quote("HRESULT WINAPI CorBindToRuntimeHost(LPCWSTR,LPCWSTR,LPCWSTR,VOID*,DWORD,REFCLSID,REFIID,LPVOID*);") cpp_quote("void WINAPI CorExitProcess(int);") cpp_quote("HRESULT WINAPI GetCORSystemDirectory(LPWSTR,DWORD,DWORD*);") cpp_quote("HRESULT WINAPI GetCORVersion(LPWSTR,DWORD,DWORD*);") cpp_quote("HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPWSTR,DWORD,DWORD*,LPWSTR,DWORD,DWORD*);") cpp_quote("HRESULT WINAPI LoadLibraryShim(LPCWSTR,LPCWSTR,LPVOID,HMODULE*);") cpp_quote("#ifdef WINE_STRICT_PROTOTYPES") cpp_quote("typedef HRESULT (__stdcall *FLockClrVersionCallback)(void);") cpp_quote("#else") cpp_quote("typedef HRESULT (__stdcall *FLockClrVersionCallback)();") cpp_quote("#endif") cpp_quote("HRESULT WINAPI LockClrVersion(FLockClrVersionCallback,FLockClrVersionCallback*,FLockClrVersionCallback*);") typedef void* HDOMAINENUM; typedef enum RUNTIME_INFO_FLAGS { RUNTIME_INFO_UPGRADE_VERSION = 0x1, RUNTIME_INFO_REQUEST_IA64 = 0x2, RUNTIME_INFO_REQUEST_AMD64 = 0x4, RUNTIME_INFO_REQUEST_X86 = 0x8, RUNTIME_INFO_DONT_RETURN_DIRECTORY = 0x10, RUNTIME_INFO_DONT_RETURN_VERSION = 0x20, RUNTIME_INFO_DONT_SHOW_ERROR_DIALOG = 0x40 } RUNTIME_INFO_FLAGS; typedef HRESULT (__stdcall *FExecuteInAppDomainCallback)([in] void* cookie); [ uuid(F31D1788-C397-4725-87A5-6AF3472C2791), version(1.0), object, local ] interface IGCThreadControl : IUnknown { HRESULT ThreadIsBlockingForSuspension(); HRESULT SuspensionStarting(); HRESULT SuspensionEnding(DWORD generation); } [ uuid(5513D564-8374-4cb9-AED9-0083F4160A1D), version(1.1), local, object ] interface IGCHostControl : IUnknown { HRESULT RequestVirtualMemLimit([in] SIZE_T nMaxVirtualMemMB, [in, out] SIZE_T* nNewMaxVirtualMemMB); } [ uuid(23D86786-0BB5-4774-8FB5-E3522ADD6246), version(1.0), local, object ] interface IDebuggerThreadControl : IUnknown { HRESULT ThreadIsBlockingForDebugger(); HRESULT ReleaseAllRuntimeThreads(); HRESULT StartBlockingForDebugger(DWORD dwUnused); } [ uuid(5C2B07A5-1E98-11d3-872F-00C04F79ED0D), version(1.0), local, object ] interface ICorConfiguration : IUnknown { HRESULT SetGCThreadControl([in] IGCThreadControl* GCThreadControl); HRESULT SetGCHostControl([in] IGCHostControl* GCHostControl); HRESULT SetDebuggerThreadControl([in] IDebuggerThreadControl* debuggerThreadControl); HRESULT AddDebuggerSpecialThread([in] DWORD specialThreadId); } [ uuid(9065597E-D1A1-4fb2-B6BA-7E1FCE230F61), version(1.0), local ] interface ICLRControl : IUnknown { HRESULT GetCLRManager([in] REFIID riid, [out] void **ppObject); HRESULT SetAppDomainManagerType([in] LPCWSTR appDomainManagerAssembly, [in] LPCWSTR appDomainManagerType); } [ uuid(02CA073C-7079-4860-880A-C2F7A449C991), version(1.0), local ] interface IHostControl : IUnknown { HRESULT GetHostManager( [in] REFIID riid, [out] void **ppObject); HRESULT SetAppDomainManager([in] DWORD appDomainID, [in] IUnknown* appDomainManager); } cpp_quote("DEFINE_GUID(CLSID_CorRuntimeHost, 0xcb2f6723,0xab3a,0x11d2,0x9c,0x40,0x00,0xc0,0x4f,0xa3,0x0a,0x3e);") [ uuid(CB2F6722-AB3A-11d2-9C40-00C04FA30A3E), version(1.0), local, object ] interface ICorRuntimeHost : IUnknown { HRESULT CreateLogicalThreadState(); HRESULT DeleteLogicalThreadState(); HRESULT SwitchInLogicalThreadState([in] DWORD *fiberCookie); HRESULT SwitchOutLogicalThreadState([out] DWORD **fiberCookie); HRESULT LocksHeldByLogicalThread( [out] DWORD *pCount ); HRESULT MapFile([in] HANDLE hFile, [out] HMODULE* mapAddress); HRESULT GetConfiguration([out] ICorConfiguration** pConfiguration); HRESULT Start(); HRESULT Stop(); HRESULT CreateDomain([in] LPCWSTR friendlyName, [in] IUnknown* identityArray, [out] IUnknown** appDomain); HRESULT GetDefaultDomain([out] IUnknown** pAppDomain); HRESULT EnumDomains([out] HDOMAINENUM *hEnum); HRESULT NextDomain([in] HDOMAINENUM hEnum, [out] IUnknown** appDomain); HRESULT CloseEnum([in] HDOMAINENUM hEnum); HRESULT CreateDomainEx([in] LPCWSTR friendlyName, [in] IUnknown* setup, [in] IUnknown* evidence, [out] IUnknown** appDomain); HRESULT CreateDomainSetup([out] IUnknown** appDomainSetup); HRESULT CreateEvidence([out] IUnknown** evidence); HRESULT UnloadDomain([in] IUnknown* appDomain); HRESULT CurrentDomain([out] IUnknown** appDomain); } cpp_quote("DEFINE_GUID(CLSID_CLRRuntimeHost, 0x90f1a06e,0x7712,0x4762,0x86,0xb5,0x7a,0x5e,0xba,0x6b,0xdb,0x02);") [ uuid(90f1a06c-7712-4762-86b5-7a5eba6bdb02), local, object ] interface ICLRRuntimeHost : IUnknown { HRESULT Start(); HRESULT Stop(); HRESULT SetHostControl([in] IHostControl *pHostControl); HRESULT GetCLRControl([out] ICLRControl **pCLRControl); HRESULT UnloadAppDomain([in] DWORD dwAppDomainId, [in] BOOL fWaitUntilDone); HRESULT ExecuteInAppDomain([in] DWORD dwAppDomainId, [in] FExecuteInAppDomainCallback pCallback, [in] void *cookie); HRESULT GetCurrentAppDomainId([out] DWORD *pdwAppDomainId); HRESULT ExecuteApplication([in] LPCWSTR pwzAppFullName, [in] DWORD dwManifestPaths, [in] LPCWSTR *ppwzManifestPaths, [in] DWORD dwActivationData, [in] LPCWSTR *ppwzActivationData, [out] int *pReturnValue); HRESULT ExecuteInDefaultAppDomain([in] LPCWSTR pwzAssemblyPath, [in] LPCWSTR pwzTypeName, [in] LPCWSTR pwzMethodName, [in] LPCWSTR pwzArgument, [out] DWORD *pReturnValue); } [ uuid(C3FCC19E-A970-11d2-8B5A-00A0C9B7C9C4), local, object ] interface IManagedObject : IUnknown { HRESULT GetSerializedBuffer([out] BSTR *pBSTR); HRESULT GetObjectIdentity([out] BSTR *pBSTRGUID, [out] int *AppDomainID, [out] int *pCCW); } ================================================ FILE: wine/windows/msctf.idl ================================================ /* * Copyright 2008 Aric Stewart, CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "oaidl.idl"; import "comcat.idl"; import "textstor.idl"; import "ctfutb.idl"; #endif cpp_quote("#define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)") cpp_quote("#define TF_E_DISCONNECTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0504)") cpp_quote("#define TF_E_ALREADY_EXISTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0506)") cpp_quote("#define TF_E_NOLOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)") cpp_quote("HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim);") cpp_quote("HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim);") cpp_quote("HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr);") cpp_quote("HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm);") cpp_quote("HRESULT WINAPI TF_CreateLangBarItemMgr(ITfLangBarItemMgr **pplbim);") cpp_quote("HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(void);") cpp_quote("EXTERN_C const GUID GUID_PROP_TEXTOWNER;") cpp_quote("DEFINE_GUID(GUID_PROP_ATTRIBUTE,0x34b45670,0x7526,0x11d2,0xa1,0x47,0x00,0x10,0x5a,0x27,0x99,0xb5);") cpp_quote("EXTERN_C const GUID GUID_PROP_LANGID;") cpp_quote("EXTERN_C const GUID GUID_PROP_READING;") cpp_quote("EXTERN_C const GUID GUID_PROP_COMPOSING;") cpp_quote("EXTERN_C const CLSID CLSID_TF_ThreadMgr;") cpp_quote("EXTERN_C const CLSID CLSID_TF_InputProcessorProfiles;") cpp_quote("EXTERN_C const CLSID CLSID_TF_LangBarMgr;") cpp_quote("EXTERN_C const CLSID CLSID_TF_CategoryMgr;") cpp_quote("EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr;") /* GUIDs for Compartments */ cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_DISABLED;") cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_OPENCLOSE;") cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_HANDWRITING_OPENCLOSE;") cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_DISABLED;") cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_OPENCLOSE;") cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_GLOBALSTATE;") cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_PERSISTMENUENABLED;") cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_EMPTYCONTEXT;") cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_TIPUISTATUS;") /* GUIDs for Categories */ cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD;") cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_SPEECH;") cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_HANDWRITING;") cpp_quote("EXTERN_C const GUID GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER;") typedef [uuid(7213778c-7bb0-4270-b050-6189ee594e97)] DWORD TfEditCookie; typedef [uuid(de403c21-89fd-4f85-8b87-64584d063fbc)] DWORD TfClientId; typedef [uuid(88a9c478-f3ec-4763-8345-cd9250443f8d)] DWORD TfGuidAtom; cpp_quote("#define TF_MOD_ALT 0x0001") cpp_quote("#define TF_MOD_CONTROL 0x0002") cpp_quote("#define TF_MOD_SHIFT 0x0004") cpp_quote("#define TF_MOD_RALT 0x0008") cpp_quote("#define TF_MOD_RCONTROL 0x0010") cpp_quote("#define TF_MOD_RSHIFT 0x0020") cpp_quote("#define TF_MOD_LALT 0x0040") cpp_quote("#define TF_MOD_LCONTROL 0x0080") cpp_quote("#define TF_MOD_LSHIFT 0x0100") cpp_quote("#define TF_MOD_ON_KEYUP 0x0200") cpp_quote("#define TF_MOD_IGNORE_ALL_MODIFIER 0x0400") cpp_quote("#define TF_PROFILETYPE_INPUTPROCESSOR 0x0001") cpp_quote("#define TF_PROFILETYPE_KEYBOARDLAYOUT 0x0002") cpp_quote("#define TF_IPSINK_FLAG_ACTIVE 0x0001") interface ITfDocumentMgr; interface ITfContext; interface IEnumTfDocumentMgrs; interface IEnumTfContexts; interface ITfCompartmentMgr; interface ITfEditSession; interface ITfRange; interface ITfProperty; interface ITfReadOnlyProperty; interface IEnumTfLanguageProfiles; interface ITfCompositionView; interface ITfKeyEventSink; interface ITfPersistentPropertyLoaderACP; interface ITfRangeACP; cpp_quote("#if 0") typedef [uuid(4f5d560f-5ab5-4dde-8c4d-404592857ab0)] UINT_PTR HKL; cpp_quote("#endif") typedef [uuid(e26d9e1d-691e-4f29-90d7-338dcf1f8cef)] struct TF_PERSISTENT_PROPERTY_HEADER_ACP { GUID guidType; LONG ichStart; LONG cch; ULONG cb; DWORD dwPrivate; CLSID clsidTIP; } TF_PERSISTENT_PROPERTY_HEADER_ACP; typedef [uuid(e1b5808d-1e46-4c19-84dc-68c5f5978cc8)] struct TF_LANGUAGEPROFILE { CLSID clsid; LANGID langid; GUID catid; BOOL fActive; GUID guidProfile; } TF_LANGUAGEPROFILE; typedef [uuid(77c12f95-b783-450d-879f-1cd2362c6521)] struct TF_PRESERVEDKEY { UINT uVKey; UINT uModifiers; } TF_PRESERVEDKEY; typedef [uuid(5a886226-ae9a-489b-b991-2b1e25ee59a9)] enum { TF_ANCHOR_START = 0, TF_ANCHOR_END = 1 } TfAnchor; [ object, uuid(101d6610-0990-11d3-8df0-00105a2799b5), pointer_default(unique) ] interface ITfFunctionProvider : IUnknown { HRESULT GetType( [out] GUID *guid); HRESULT GetDescription( [out] BSTR *desc); HRESULT GetFunction( [in] REFGUID guid, [in] REFIID riid, [out, iid_is(riid)] IUnknown **func); } [ object, uuid(e4b24db0-0990-11d3-8df0-00105a2799b5), pointer_default(unique) ] interface IEnumTfFunctionProviders : IUnknown { HRESULT Clone( [out] IEnumTfFunctionProviders **ret); HRESULT Next( [in] ULONG count, [out, size_is(count), length_is(*fetched)] ITfFunctionProvider **prov, [out] ULONG *fetched); HRESULT Reset(); HRESULT Skip( [in] ULONG count); } [ object, uuid(aa80e801-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfThreadMgr: IUnknown { HRESULT Activate( [out] TfClientId *ptid); HRESULT Deactivate(); HRESULT CreateDocumentMgr( [out] ITfDocumentMgr **ppdim); HRESULT EnumDocumentMgrs( [out] IEnumTfDocumentMgrs **ppEnum); HRESULT GetFocus( [out] ITfDocumentMgr **ppdimFocus); HRESULT SetFocus( [in] ITfDocumentMgr *pdimFocus); HRESULT AssociateFocus( [in] HWND hwnd, [in, unique] ITfDocumentMgr *pdimNew, [out] ITfDocumentMgr **ppdimPrev); HRESULT IsThreadFocus( [out] BOOL *pfThreadFocus); HRESULT GetFunctionProvider( [in] REFCLSID clsid, [out] ITfFunctionProvider **ppFuncProv); HRESULT EnumFunctionProviders( [out] IEnumTfFunctionProviders **ppEnum); HRESULT GetGlobalCompartment( [out] ITfCompartmentMgr **ppCompMgr); } [ object, uuid(3e90ade3-7594-4cb0-bb58-69628f5f458c), pointer_default(unique) ] interface ITfThreadMgrEx : ITfThreadMgr { HRESULT ActivateEx( [out] TfClientId *id, [in] DWORD flags); HRESULT GetActiveFlags( [out] DWORD *flags); } [ object, uuid(d7540241-f9a1-4364-befc-dbcd2c4395b7), pointer_default(unique) ] interface ITfCompositionView : IUnknown { HRESULT GetOwnerClsid([out] CLSID *pclsid); HRESULT GetRange([out] ITfRange **ppRange); } [ object, uuid(aa80e7f4-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfDocumentMgr: IUnknown { HRESULT CreateContext( [in] TfClientId tidOwner, [in] DWORD dwFlags, [in, unique] IUnknown *punk, [out] ITfContext **ppic, [out] TfEditCookie *pecTextStore); HRESULT Push( [in] ITfContext *pic); const DWORD TF_POPF_ALL = 0x0001; HRESULT Pop( [in] DWORD dwFlags); HRESULT GetTop( [out] ITfContext **ppic); HRESULT GetBase( [out] ITfContext **ppic); HRESULT EnumContexts( [out] IEnumTfContexts **ppEnum); } [ object, uuid(2433bf8e-0f9b-435c-ba2c-180611978c30), pointer_default(unique) ] interface ITfContextView : IUnknown { HRESULT GetRangeFromPoint( [in] TfEditCookie cookie, [in] const POINT *pt, [in] DWORD flags, [out] ITfRange **range); HRESULT GetTextExt( [in] TfEditCookie cookie, [in] ITfRange *range, [out] RECT *rect, [out] BOOL *clipped); HRESULT GetScreenExt( [out] RECT *rect); HRESULT GetWnd( [out] HWND *hwnd); } [ object, uuid(f0c0f8dd-cf38-44e1-bb0f-68cf0d551c78), pointer_default(unique) ] interface IEnumTfContextViews : IUnknown { HRESULT Clone( [out] IEnumTfContextViews **ret); HRESULT Next( [in] ULONG count, [out, size_is(count), length_is(*fetched)] ITfContextView **views, [out] ULONG *fetched); HRESULT Reset(); HRESULT Skip( [in] ULONG count); } [ object, uuid(19188cb0-aca9-11d2-afc5-00105a2799b5), pointer_default(unique) ] interface IEnumTfProperties : IUnknown { HRESULT Clone( [out] IEnumTfProperties **ret); HRESULT Next( [in] ULONG count, [out, size_is(count), length_is(*fetched)] ITfProperty **props, [out] ULONG *fetched); HRESULT Reset(); HRESULT Skip( [in] ULONG count); } [ object, uuid(463a506d-6992-49d2-9b88-93d55e70bb16), pointer_default(unique) ] interface ITfRangeBackup : IUnknown { HRESULT Restore( [in] TfEditCookie cookie, [in] ITfRange *range); } [ object, uuid(aa80e901-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITextStoreACPServices : IUnknown { HRESULT Serialize( [in] ITfProperty *prop, [in] ITfRange *range, [out] TF_PERSISTENT_PROPERTY_HEADER_ACP *header, [in] IStream *stream); HRESULT Unserialize( [in] ITfProperty *prop, [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *header, [in] IStream *stream, [in] ITfPersistentPropertyLoaderACP *loader); HRESULT ForceLoadProperty( [in] ITfProperty *prop); HRESULT CreateRange( [in] LONG start, [in] LONG end, [out] ITfRangeACP **range); } [ object, uuid(aa80e7fd-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfContext : IUnknown { const DWORD TF_ES_ASYNCDONTCARE = 0x0; const DWORD TF_ES_SYNC = 0x1; const DWORD TF_ES_READ = 0x2; const DWORD TF_ES_READWRITE = 0x6; const DWORD TF_ES_ASYNC = 0x8; HRESULT RequestEditSession( [in] TfClientId tid, [in] ITfEditSession *pes, [in] DWORD dwFlags, [out] HRESULT *phrSession); HRESULT InWriteSession( [in] TfClientId tid, [out] BOOL *pfWriteSession); typedef [uuid(1690be9b-d3e9-49f6-8d8b-51b905af4c43)] enum { TF_AE_NONE, TF_AE_START, TF_AE_END } TfActiveSelEnd; typedef [uuid(36ae42a4-6989-4bdc-b48a-6137b7bf2e42)] struct TF_SELECTIONSTYLE { TfActiveSelEnd ase; BOOL fInterimChar; } TF_SELECTIONSTYLE; typedef [uuid(75eb22f2-b0bf-46a8-8006-975a3b6efcf1)] struct TF_SELECTION { ITfRange *range; TF_SELECTIONSTYLE style; } TF_SELECTION; const ULONG TF_DEFAULT_SELECTION = TS_DEFAULT_SELECTION; HRESULT GetSelection( [in] TfEditCookie ec, [in] ULONG ulIndex, [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] TF_SELECTION *pSelection, [out] ULONG *pcFetched); HRESULT SetSelection( [in] TfEditCookie ec, [in] ULONG ulCount, [in, size_is(ulCount)] const TF_SELECTION *pSelection); HRESULT GetStart( [in] TfEditCookie ec, [out] ITfRange **ppStart); HRESULT GetEnd( [in] TfEditCookie ec, [out] ITfRange **ppEnd); typedef [uuid(bc7d979a-846a-444d-afef-0a9bfa82b961)] TS_STATUS TF_STATUS; const DWORD TF_SD_READONLY = TS_SD_READONLY; const DWORD TF_SD_LOADING = TS_SD_LOADING; const DWORD TF_SS_DISJOINTSEL = TS_SS_DISJOINTSEL; const DWORD TF_SS_REGIONS = TS_SS_REGIONS; const DWORD TF_SS_TRANSITORY = TS_SS_TRANSITORY; HRESULT GetActiveView( [out] ITfContextView **ppView); HRESULT EnumViews( [out] IEnumTfContextViews **ppEnum); HRESULT GetStatus( [out] TF_STATUS *pdcs); HRESULT GetProperty( [in] REFGUID guidProp, [out] ITfProperty **ppProp); HRESULT GetAppProperty( [in] REFGUID guidProp, [out] ITfReadOnlyProperty **ppProp); HRESULT TrackProperties( [in, size_is(cProp)] const GUID **prgProp, [in] ULONG cProp, [in, size_is(cAppProp)] const GUID **prgAppProp, [in] ULONG cAppProp, [out] ITfReadOnlyProperty **ppProperty); HRESULT EnumProperties( [out] IEnumTfProperties **ppEnum); HRESULT GetDocumentMgr( [out] ITfDocumentMgr **ppDm); HRESULT CreateRangeBackup( [in] TfEditCookie ec, [in] ITfRange *pRange, [out] ITfRangeBackup **ppBackup); } const DWORD TF_INVALID_COOKIE = 0xffffffff; [ object, uuid(4ea48a35-60ae-446f-8fd6-e6a8d82459f7), pointer_default(unique) ] interface ITfSource : IUnknown { HRESULT AdviseSink( [in] REFIID riid, [in, iid_is(riid)] IUnknown *punk, [out] DWORD *pdwCookie); HRESULT UnadviseSink( [in] DWORD dwCookie); } [ object, local, uuid(1F02B6C5-7842-4EE6-8A0B-9A24183A95CA), pointer_default(unique) ] interface ITfInputProcessorProfiles : IUnknown { HRESULT Register( [in] REFCLSID rclsid); HRESULT Unregister( [in] REFCLSID rclsid); HRESULT AddLanguageProfile( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile, [in, size_is(cchDesc)] const WCHAR *pchDesc, [in] ULONG cchDesc, [in, size_is(cchFile)] const WCHAR *pchIconFile, [in] ULONG cchFile, [in] ULONG uIconIndex); HRESULT RemoveLanguageProfile( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile); HRESULT EnumInputProcessorInfo( [out] IEnumGUID **ppEnum); HRESULT GetDefaultLanguageProfile( [in] LANGID langid, [in] REFGUID catid, [out] CLSID *pclsid, [out] GUID *pguidProfile); HRESULT SetDefaultLanguageProfile( [in] LANGID langid, [in] REFCLSID rclsid, [in] REFGUID guidProfiles); HRESULT ActivateLanguageProfile( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfiles); HRESULT GetActiveLanguageProfile( [in] REFCLSID rclsid, [out] LANGID *plangid, [out] GUID *pguidProfile); HRESULT GetLanguageProfileDescription( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile, [out] BSTR *pbstrProfile); HRESULT GetCurrentLanguage( [out] LANGID *plangid); HRESULT ChangeCurrentLanguage( [in] LANGID langid); HRESULT GetLanguageList( [out] LANGID **ppLangId, [out] ULONG *pulCount); HRESULT EnumLanguageProfiles( [in] LANGID langid, [out] IEnumTfLanguageProfiles **ppEnum); HRESULT EnableLanguageProfile( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile, [in] BOOL fEnable); HRESULT IsEnabledLanguageProfile( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile, [out] BOOL *pfEnable); HRESULT EnableLanguageProfileByDefault( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile, [in] BOOL fEnable); HRESULT SubstituteKeyboardLayout( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile, [in] HKL hKL); } typedef [uuid(44d2825a-10e5-43b2-877f-6cb2f43b7e7e)] struct TF_INPUTPROCESSORPROFILE { DWORD dwProfileType; LANGID langid; CLSID clsid; GUID guidProfile; GUID catid; HKL hklSubstitute; DWORD dwCaps; HKL hkl; DWORD dwFlags; } TF_INPUTPROCESSORPROFILE; [ object, uuid(71c6e74d-0f28-11d8-a82a-00065b84435c), pointer_default(unique) ] interface IEnumTfInputProcessorProfiles : IUnknown { HRESULT Clone( [out] IEnumTfInputProcessorProfiles **ppEnum); HRESULT Next( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetch)] TF_INPUTPROCESSORPROFILE *pProfile, [out] ULONG *pcFetch); HRESULT Reset(); HRESULT Skip( [in] ULONG ulCount); } [ object, uuid(71c6e74c-0f28-11d8-a82a-00065b84435c), pointer_default(unique) ] interface ITfInputProcessorProfileMgr : IUnknown { HRESULT ActivateProfile( [in] DWORD dwProfileType, [in] LANGID langid, [in] REFCLSID clsid, [in] REFGUID guidProfile, [in] HKL hkl, [in] DWORD dwFlags); HRESULT DeactivateProfile( [in] DWORD dwProfileType, [in] LANGID langid, [in] REFCLSID clsid, [in] REFGUID guidProfile, [in] HKL hkl, [in] DWORD dwFlags); HRESULT GetProfile( [in] DWORD dwProfileType, [in] LANGID langid, [in] REFCLSID clsid, [in] REFGUID guidProfile, [in] HKL hkl, [out] TF_INPUTPROCESSORPROFILE *pProfile); HRESULT EnumProfiles( [in] LANGID langid, [out] IEnumTfInputProcessorProfiles **ppEnum); HRESULT ReleaseInputProcessor( [in] REFCLSID rclsid, [in] DWORD dwFlags); HRESULT RegisterProfile( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile, [in, size_is(cchDesc)] const WCHAR *pchDesc, [in] ULONG cchDesc, [in, size_is(cchFile)] const WCHAR *pchIconFile, [in] ULONG cchFile, [in] ULONG uIconIndex, [in] HKL hklsubstitute, [in] DWORD dwPreferredLayout, [in] BOOL bEnabledByDefault, [in] DWORD dwFlags); HRESULT UnregisterProfile( [in] REFCLSID rclsid, [in] LANGID langid, [in] REFGUID guidProfile, [in] DWORD dwFlags); HRESULT GetActiveProfile( [in] REFGUID catid, [out] TF_INPUTPROCESSORPROFILE *pProfile); } typedef [uuid(c4cc07f1-80cc-4a7b-bc54-98512782cbe3)] enum { TF_LS_NONE = 0, TF_LS_SOLID = 1, TF_LS_DOT = 2, TF_LS_DASH = 3, TF_LS_SQUIGGLE = 4 } TF_DA_LINESTYLE; typedef [uuid(d9b92e21-084a-401b-9c64-1e6dad91a1ab)] enum { TF_CT_NONE = 0, TF_CT_SYSCOLOR = 1, TF_CT_COLORREF = 2 } TF_DA_COLORTYPE; typedef [uuid(90d0cb5e-6520-4a0f-b47c-c39bd955f0d6)] struct TF_DA_COLOR { TF_DA_COLORTYPE type; [switch_type(TF_DA_COLORTYPE), switch_is(type)] union { [case(TF_CT_SYSCOLOR)] int nIndex; [case(TF_CT_COLORREF)] COLORREF cr; }; } TF_DA_COLOR; typedef [uuid(33d2fe4b-6c24-4f67-8d75-3bc1819e4126)] enum { TF_ATTR_INPUT = 0, TF_ATTR_TARGET_CONVERTED = 1, TF_ATTR_CONVERTED = 2, TF_ATTR_TARGET_NOTCONVERTED = 3, TF_ATTR_INPUT_ERROR = 4, TF_ATTR_FIXEDCONVERTED = 5, TF_ATTR_OTHER = -1 } TF_DA_ATTR_INFO; typedef [uuid(1bf1c305-419b-4182-a4d2-9bfadc3f021f)] struct TF_DISPLAYATTRIBUTE { TF_DA_COLOR crText; TF_DA_COLOR crBk; TF_DA_LINESTYLE lsStyle; BOOL fBoldLine; TF_DA_COLOR crLine; TF_DA_ATTR_INFO bAttr; } TF_DISPLAYATTRIBUTE; [ object, uuid(70528852-2f26-4aea-8c96-215150578932), pointer_default(unique) ] interface ITfDisplayAttributeInfo : IUnknown { HRESULT GetGUID([out] GUID *pguid); HRESULT GetDescription([out] BSTR *pbstrDesc); HRESULT GetAttributeInfo([out] TF_DISPLAYATTRIBUTE *pda); HRESULT SetAttributeInfo([in] const TF_DISPLAYATTRIBUTE *pda); HRESULT Reset(); } [ object, uuid(7cef04d7-cb75-4e80-a7ab-5f5bc7d332de), pointer_default(unique) ] interface IEnumTfDisplayAttributeInfo : IUnknown { HRESULT Clone([out] IEnumTfDisplayAttributeInfo **ppEnum); HRESULT Next( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] ITfDisplayAttributeInfo **rgInfo, [out] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip([in] ULONG ulCount); } [ object, local, uuid(8ded7393-5db1-475c-9e71-a39111b0ff67), pointer_default(unique) ] interface ITfDisplayAttributeMgr : IUnknown { HRESULT OnUpdateInfo(); HRESULT EnumDisplayAttributeInfo([out] IEnumTfDisplayAttributeInfo **ppEnum); HRESULT GetDisplayAttributeInfo( [in] REFGUID guid, [out] ITfDisplayAttributeInfo **ppInfo, [out] CLSID *pclsidOwner); } [ object, local, uuid(c3acefb5-f69d-4905-938f-fcadcf4be830), pointer_default(unique) ] interface ITfCategoryMgr : IUnknown { HRESULT RegisterCategory([in] REFCLSID rclsid, [in] REFGUID rcatid, [in] REFGUID rguid); HRESULT UnregisterCategory([in] REFCLSID rclsid, [in] REFGUID rcatid, [in] REFGUID rguid); HRESULT EnumCategoriesInItem([in] REFGUID rguid, [out] IEnumGUID **ppEnum); HRESULT EnumItemsInCategory([in] REFGUID rcatid, [out] IEnumGUID **ppEnum); HRESULT FindClosestCategory([in] REFGUID rguid, [out] GUID *pcatid, [in, size_is(ulCount)] const GUID **ppcatidList, [in] ULONG ulCount); HRESULT RegisterGUIDDescription([in] REFCLSID rclsid, [in] REFGUID rguid, [in, size_is(cch)] const WCHAR *pchDesc, [in] ULONG cch); HRESULT UnregisterGUIDDescription([in] REFCLSID rclsid, [in] REFGUID rguid); HRESULT GetGUIDDescription([in] REFGUID rguid, [out] BSTR *pbstrDesc); HRESULT RegisterGUIDDWORD([in] REFCLSID rclsid, [in] REFGUID rguid, [in] DWORD dw); HRESULT UnregisterGUIDDWORD([in] REFCLSID rclsid, [in] REFGUID rguid); HRESULT GetGUIDDWORD([in] REFGUID rguid, [out] DWORD *pdw); HRESULT RegisterGUID([in] REFGUID rguid, [out] TfGuidAtom *pguidatom); HRESULT GetGUID([in] TfGuidAtom guidatom, [out] GUID *pguid); HRESULT IsEqualTfGuidAtom([in] TfGuidAtom guidatom, [in] REFGUID rguid, [out] BOOL *pfEqual); } [ object, uuid(f99d3f40-8e32-11d2-bf46-00105a2799b5), pointer_default(unique) ] interface IEnumTfRanges : IUnknown { HRESULT Clone([out] IEnumTfRanges **ppEnum); HRESULT Next( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] ITfRange **ppRange, [out] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip(ULONG ulCount); } [ object, uuid(42d4d099-7c1a-4a89-b836-6c6f22160df0), pointer_default(unique) ] interface ITfEditRecord : IUnknown { const DWORD TF_GTP_INCL_TEXT = 0x1; HRESULT GetSelectionStatus( [out] BOOL *changed); HRESULT GetTextAndPropertyUpdates( [in] DWORD flags, [in, size_is(count)] const GUID **props, [in] ULONG count, [out] IEnumTfRanges **ret); } [ object, uuid(8127d409-ccd3-4683-967a-b43d5b482bf7), pointer_default(unique) ] interface ITfTextEditSink : IUnknown { HRESULT OnEndEdit( [in] ITfContext *pic, [in] TfEditCookie ecReadOnly, [in] ITfEditRecord *pEditRecord); } [ object, uuid(5F20AA40-B57A-4F34-96AB-3576F377CC79), pointer_default(unique) ] interface ITfContextOwnerCompositionSink : IUnknown { HRESULT OnStartComposition( [in] ITfCompositionView *pComposition, [out] BOOL *pfOk); HRESULT OnUpdateComposition( [in] ITfCompositionView *pComposition, [in] ITfRange *pRangeNew); HRESULT OnEndComposition( [in] ITfCompositionView *pComposition); } [ object, uuid(b246cb75-a93e-4652-bf8c-b3fe0cfd7e57), pointer_default(unique) ] interface ITfActiveLanguageProfileNotifySink : IUnknown { HRESULT OnActivated( [in] REFCLSID clsid, [in] REFGUID guidProfile, [in] BOOL fActivated); } [ object, uuid(3d61bf11-ac5f-42c8-a4cb-931bcc28c744), pointer_default(unique) ] interface IEnumTfLanguageProfiles : IUnknown { HRESULT Clone( [out] IEnumTfLanguageProfiles **ppEnum); HRESULT Next( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetch)] TF_LANGUAGEPROFILE *pProfile, [out] ULONG *pcFetch); HRESULT Reset(); HRESULT Skip( [in] ULONG ulCount); } [ object, local, uuid(aa80e7f7-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfTextInputProcessor : IUnknown { HRESULT Activate( [in] ITfThreadMgr *ptim, [in] TfClientId tid); HRESULT Deactivate(); } [ object, uuid(aa80e80e-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfThreadMgrEventSink : IUnknown { HRESULT OnInitDocumentMgr( [in] ITfDocumentMgr *pdim); HRESULT OnUninitDocumentMgr( [in] ITfDocumentMgr *pdim); HRESULT OnSetFocus( [in] ITfDocumentMgr *pdimFocus, [in] ITfDocumentMgr *pdimPrevFocus); HRESULT OnPushContext( [in] ITfContext *pic); HRESULT OnPopContext( [in] ITfContext *pic); } [ object, local, uuid(aa80e7f0-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfKeystrokeMgr : IUnknown { HRESULT AdviseKeyEventSink( [in] TfClientId tid, [in] ITfKeyEventSink *pSink, [in] BOOL fForeground); HRESULT UnadviseKeyEventSink( [in] TfClientId tid); HRESULT GetForeground( [out] CLSID *pclsid); HRESULT TestKeyDown( [in] WPARAM wParam, [in] LPARAM lParam, [out] BOOL *pfEaten); HRESULT TestKeyUp( [in] WPARAM wParam, [in] LPARAM lParam, [out] BOOL *pfEaten); HRESULT KeyDown( [in] WPARAM wParam, [in] LPARAM lParam, [out] BOOL *pfEaten); HRESULT KeyUp( [in] WPARAM wParam, [in] LPARAM lParam, [out] BOOL *pfEaten); HRESULT GetPreservedKey( [in] ITfContext *pic, [in] const TF_PRESERVEDKEY *pprekey, [out] GUID *pguid); HRESULT IsPreservedKey( [in] REFGUID rguid, [in] const TF_PRESERVEDKEY *pprekey, [out] BOOL *pfRegistered); HRESULT PreserveKey( [in] TfClientId tid, [in] REFGUID rguid, [in] const TF_PRESERVEDKEY *prekey, [in, size_is(cchDesc)] const WCHAR *pchDesc, [in] ULONG cchDesc); HRESULT UnpreserveKey( [in] REFGUID rguid, [in] const TF_PRESERVEDKEY *pprekey); HRESULT SetPreservedKeyDescription( [in] REFGUID rguid, [in, size_is(cchDesc)] const WCHAR *pchDesc, [in] ULONG cchDesc); HRESULT GetPreservedKeyDescription( [in] REFGUID rguid, [out] BSTR *pbstrDesc); HRESULT SimulatePreservedKey( [in] ITfContext *pic, [in] REFGUID rguid, [out] BOOL *pfEaten); } [ object, local, uuid(aa80e7f5-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfKeyEventSink : IUnknown { HRESULT OnSetFocus( [in] BOOL fForeground); HRESULT OnTestKeyDown( [in] ITfContext *pic, [in] WPARAM wParam, [in] LPARAM lParam, [out] BOOL *pfEaten); HRESULT OnTestKeyUp( [in] ITfContext *pic, [in] WPARAM wParam, [in] LPARAM lParam, [out] BOOL *pfEaten); HRESULT OnKeyDown( [in] ITfContext *pic, [in] WPARAM wParam, [in] LPARAM lParam, [out] BOOL *pfEaten); HRESULT OnKeyUp( [in] ITfContext *pic, [in] WPARAM wParam, [in] LPARAM lParam, [out] BOOL *pfEaten); HRESULT OnPreservedKey( [in] ITfContext *pic, [in] REFGUID rguid, [out] BOOL *pfEaten); } [ object, local, uuid(1cd4c13b-1c36-4191-a70a-7f3e611f367d), pointer_default(unique) ] interface ITfKeyTraceEventSink : IUnknown { HRESULT OnKeyTraceDown( [in] WPARAM wParam, [in] LPARAM lParam); HRESULT OnKeyTraceUp( [in] WPARAM wParam, [in] LPARAM lParam); } [ object, local, uuid(8f1b8ad8-0b6b-4874-90c5-bd76011e8f7c), pointer_default(unique) ] interface ITfMessagePump : IUnknown { HRESULT PeekMessageA( [out] LPMSG pMsg, [in] HWND hwnd, [in] UINT wMsgFilterMin, [in] UINT wMsgFilterMax, [in] UINT wRemoveMsg, [out] BOOL *pfResult); HRESULT GetMessageA( [out] LPMSG pMsg, [in] HWND hwnd, [in] UINT wMsgFilterMin, [in] UINT wMsgFilterMax, [out] BOOL *pfResult); HRESULT PeekMessageW( [out] LPMSG pMsg, [in] HWND hwnd, [in] UINT wMsgFilterMin, [in] UINT wMsgFilterMax, [in] UINT wRemoveMsg, [out] BOOL *pfResult); HRESULT GetMessageW( [out] LPMSG pMsg, [in] HWND hwnd, [in] UINT wMsgFilterMin, [in] UINT wMsgFilterMax, [out] BOOL *pfResult); } [ object, local, uuid(d60a7b49-1b9f-4be2-b702-47e9dc05dec3), pointer_default(unique) ] interface ITfClientId : IUnknown { HRESULT GetClientId( [in] REFCLSID rclsid, [out] TfClientId *ptid); } [ object, uuid(43c9fe15-f494-4c17-9de2-b8a4ac350aa8), pointer_default(unique) ] interface ITfLanguageProfileNotifySink : IUnknown { HRESULT OnLanguageChange( [in] LANGID langid, [out] BOOL *pfAccept); HRESULT OnLanguageChanged(); } [ object, uuid(aa80e803-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfEditSession : IUnknown { HRESULT DoEditSession( [in] TfEditCookie ec); } [ object, uuid(aa80e7ff-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface ITfRange : IUnknown { const WCHAR TF_CHAR_EMBEDDED = TS_CHAR_EMBEDDED; typedef [uuid(cf610f06-2882-46f6-abe5-298568b664c4)] enum { TF_GRAVITY_BACKWARD = 0, TF_GRAVITY_FORWARD = 1 } TfGravity; typedef [uuid(1e512533-bbdc-4530-9a8e-a1dc0af67468)] enum { TF_SD_BACKWARD = 0, TF_SD_FORWARD = 1 } TfShiftDir; const DWORD TF_HF_OBJECT = 1; const DWORD TF_TF_MOVESTART = 1; const DWORD TF_TF_IGNOREEND = 2; const DWORD TF_ST_CORRECTION = 1; const DWORD TF_IE_CORRECTION = 1; typedef [uuid(49930d51-7d93-448c-a48c-fea5dac192b1)] struct TF_HALTCOND { ITfRange *pHaltRange; TfAnchor aHaltPos; DWORD dwFlags; } TF_HALTCOND; HRESULT GetText( [in] TfEditCookie ec, [in] DWORD dwFlags, [out, size_is(cchMax), length_is(*pcch)] WCHAR *pchText, [in] ULONG cchMax, [out] ULONG *pcch); HRESULT SetText( [in] TfEditCookie ec, [in] DWORD dwFlags, [in, size_is(cch), unique] const WCHAR *pchText, [in] LONG cch); HRESULT GetFormattedText( [in] TfEditCookie ec, [out] IDataObject **ppDataObject); HRESULT GetEmbedded( [in] TfEditCookie ec, [in] REFGUID rguidService, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppunk); HRESULT InsertEmbedded( [in] TfEditCookie ec, [in] DWORD dwFlags, [in] IDataObject *pDataObject); HRESULT ShiftStart( [in] TfEditCookie ec, [in] LONG cchReq, [out] LONG *pcch, [in, unique] const TF_HALTCOND *pHalt); HRESULT ShiftEnd( [in] TfEditCookie ec, [in] LONG cchReq, [out] LONG *pcch, [in, unique] const TF_HALTCOND *pHalt); HRESULT ShiftStartToRange( [in] TfEditCookie ec, [in] ITfRange *pRange, [in] TfAnchor aPos); HRESULT ShiftEndToRange( [in] TfEditCookie ec, [in] ITfRange *pRange, [in] TfAnchor aPos); HRESULT ShiftStartRegion( [in] TfEditCookie ec, [in] TfShiftDir dir, [out] BOOL *pfNoRegion); HRESULT ShiftEndRegion( [in] TfEditCookie ec, [in] TfShiftDir dir, [out] BOOL *pfNoRegion); HRESULT IsEmpty( [in] TfEditCookie ec, [out] BOOL *pfEmpty); HRESULT Collapse( [in] TfEditCookie ec, [in] TfAnchor aPos); HRESULT IsEqualStart( [in] TfEditCookie ec, [in] ITfRange *pWith, [in] TfAnchor aPos, [out] BOOL *pfEqual); HRESULT IsEqualEnd( [in] TfEditCookie ec, [in] ITfRange *pWith, [in] TfAnchor aPos, [out] BOOL *pfEqual); HRESULT CompareStart( [in] TfEditCookie ec, [in] ITfRange *pWith, [in] TfAnchor aPos, [out] LONG *plResult); HRESULT CompareEnd( [in] TfEditCookie ec, [in] ITfRange *pWith, [in] TfAnchor aPos, [out] LONG *plResult); HRESULT AdjustForInsert( [in] TfEditCookie ec, [in] ULONG cchInsert, [out] BOOL *pfInsertOk); HRESULT GetGravity( [out] TfGravity *pgStart, [out] TfGravity *pgEnd); HRESULT SetGravity( [in] TfEditCookie ec, [in] TfGravity gStart, [in] TfGravity gEnd); HRESULT Clone( [out] ITfRange **ppClone); HRESULT GetContext( [out] ITfContext **ppContext); } [ object, uuid(057a6296-029b-4154-b79a-0d461d4ea94c), pointer_default(unique) ] interface ITfRangeACP : ITfRange { HRESULT GetExtent([out] LONG *pacpAnchor, [out] LONG *pcch); HRESULT SetExtent([in] LONG acpAnchor, [in] LONG cch); } [ object, uuid(55ce16ba-3014-41c1-9ceb-fade1446ac6c), pointer_default(unique) ] interface ITfInsertAtSelection : IUnknown { const DWORD TF_IAS_NOQUERY = 0x1; const DWORD TF_IAS_QUERYONLY = 0x2; const DWORD TF_IAS_NO_DEFAULT_COMPOSITION = 0x80000000; HRESULT InsertTextAtSelection( [in] TfEditCookie ec, [in] DWORD dwFlags, [in, size_is(cch)] const WCHAR *pchText, [in] LONG cch, [out] ITfRange **ppRange); HRESULT InsertEmbeddedAtSelection( [in] TfEditCookie ec, [in] DWORD dwFlags, [in] IDataObject *pDataObject, [out] ITfRange **ppRange); } [ object, uuid(6834b120-88cb-11d2-bf45-00105a2799b5), pointer_default(unique) ] interface ITfPropertyStore : IUnknown { const DWORD TF_TU_CORRECTION = 0x1; HRESULT GetType([out] GUID *pguid); HRESULT GetDataType([out] DWORD *pdwReserved); HRESULT GetData([out] VARIANT *pvarValue); HRESULT OnTextUpdated( [in] DWORD dwFlags, [in] ITfRange *pRangeNew, [out] BOOL *pfAccept); HRESULT Shrink( [in] ITfRange *pRangeNew, [out] BOOL *pfFree); HRESULT Divide( [in] ITfRange *pRangeThis, [in] ITfRange *pRangeNew, [out] ITfPropertyStore **ppPropStore); HRESULT Clone( [out] ITfPropertyStore **pPropStore); HRESULT GetPropertyRangeCreator( [out] CLSID *pclsid); HRESULT Serialize( [in] IStream *pStream, [out] ULONG *pcb); } [ object, uuid(5efd22Ba-7838-46cb-88e2-cadb14124f8f), pointer_default(unique) ] interface IEnumITfCompositionView : IUnknown { HRESULT Clone([out] IEnumITfCompositionView **ppEnum); HRESULT Next( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] ITfCompositionView **rgCompositionView, [out] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip([in] ULONG ulCount); } [ object, uuid(20168d64-5a8f-4a5a-b7bd-cfa29f4D0fd9), pointer_default(unique) ] interface ITfComposition : IUnknown { HRESULT GetRange([out] ITfRange **ppRange); HRESULT ShiftStart( [in] TfEditCookie ecWrite, [in] ITfRange *pNewStart); HRESULT ShiftEnd( [in] TfEditCookie ecWrite, [in] ITfRange *pNewEnd); HRESULT EndComposition([in] TfEditCookie ecWrite); } [ object, uuid(a781718c-579a-4b15-a280-32b8577acc5e), pointer_default(unique) ] interface ITfCompositionSink : IUnknown { HRESULT OnCompositionTerminated( [in] TfEditCookie ecWrite, [in] ITfComposition *pComposition); } [ object, uuid(d40C8aae-aC92-4fc7-9a11-0ee0e23aa39b), pointer_default(unique) ] interface ITfContextComposition : IUnknown { HRESULT StartComposition( [in] TfEditCookie ecWrite, [in] ITfRange *pCompositionRange, [in] ITfCompositionSink *pSink, [out] ITfComposition **ppComposition); HRESULT EnumCompositions([out] IEnumITfCompositionView **ppEnum); HRESULT FindComposition( [in] TfEditCookie ecRead, [in] ITfRange *pTestRange, [out] IEnumITfCompositionView **ppEnum); HRESULT TakeOwnership( [in] TfEditCookie ecWrite, [in] ITfCompositionView *pComposition, [in] ITfCompositionSink *pSink, [out] ITfComposition **ppComposition); } [ object, uuid(86462810-593b-4916-9764-19c08e9ce110), pointer_default(unique) ] interface ITfContextOwnerCompositionServices : ITfContextComposition { HRESULT TerminateComposition([in] ITfCompositionView *pComposition); } [ object, uuid(4ef89150-0807-11d3-8df0-00105a2799b5), pointer_default(unique) ] interface ITfPersistentPropertyLoaderACP : IUnknown { HRESULT LoadProperty( [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr, [out] IStream **ppStream); } [ object, uuid(b23eb630-3e1c-11d3-a745-0050040ab407), pointer_default(unique) ] interface ITfContextOwnerServices : IUnknown { HRESULT OnLayoutChange(); HRESULT OnStatusChange([in] DWORD dwFlags); HRESULT OnAttributeChange([in] REFGUID rguidAttribute); HRESULT Serialize( [in] ITfProperty *pProp, [in] ITfRange *pRange, [out] TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr, [in] IStream *pStream); HRESULT Unserialize( [in] ITfProperty *pProp, [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr, [in] IStream *pStream, [in] ITfPersistentPropertyLoaderACP *pLoader); HRESULT ForceLoadProperty([in] ITfProperty *pProp); HRESULT CreateRange( [in] LONG acpStart, [in] LONG acpEnd, [out] ITfRangeACP **ppRange); } [ object, uuid(17d49a3d-f8b8-4b2f-b254-52319dd64c53), pointer_default(unique) ] interface ITfReadOnlyProperty : IUnknown { HRESULT GetType([out] GUID *pguid); HRESULT EnumRanges( [in] TfEditCookie ec, [out] IEnumTfRanges **ppEnum, [in] ITfRange *pTargetRange); HRESULT GetValue( [in] TfEditCookie ec, [in] ITfRange *pRange, [out] VARIANT *pvarValue); HRESULT GetContext([out] ITfContext **ppContext); } [ object, uuid(e2449660-9542-11d2-bf46-00105a2799b5), pointer_default(unique) ] interface ITfProperty : ITfReadOnlyProperty { HRESULT FindRange( [in] TfEditCookie ec, [in] ITfRange *pRange, [out] ITfRange **ppRange, [in] TfAnchor aPos); HRESULT SetValueStore( [in] TfEditCookie ec, [in] ITfRange *pRange, [in] ITfPropertyStore *pPropStore); HRESULT SetValue( [in] TfEditCookie ec, [in] ITfRange *pRange, [in] const VARIANT *pvarValue); HRESULT Clear( [in] TfEditCookie ec, [in] ITfRange *pRange); } [ object, uuid(bb08f7a9-607a-4384-8623-056892b64371), pointer_default(unique) ] interface ITfCompartment : IUnknown { HRESULT SetValue( [in] TfClientId tid, [in] const VARIANT *pvarValue); HRESULT GetValue( [out] VARIANT *pvarValue); } [ object, uuid(7dcf57ac-18ad-438b-824d-979bffb74b7c), pointer_default(unique) ] interface ITfCompartmentMgr : IUnknown { HRESULT GetCompartment( [in] REFGUID rguid, [out] ITfCompartment **ppcomp); HRESULT ClearCompartment( [in] TfClientId tid, [in] REFGUID rguid); HRESULT EnumCompartments( [out] IEnumGUID **ppEnum); } [ object, uuid(743abd5f-f26d-48df-8cc5-238492419b64), pointer_default(unique) ] interface ITfCompartmentEventSink : IUnknown { HRESULT OnChange( [in] REFGUID rguid); } [ object, uuid(8f1a7ea6-1654-4502-a86e-b2902344d507), pointer_default(unique) ] interface IEnumTfContexts : IUnknown { HRESULT Clone( [out] IEnumTfContexts **ppEnum); HRESULT Next( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] ITfContext **rgContext, [out] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG ulCount); } [ object, uuid(aa80e808-2021-11d2-93e0-0060b067b86e), pointer_default(unique) ] interface IEnumTfDocumentMgrs : IUnknown { HRESULT Clone( [out] IEnumTfDocumentMgrs **ppEnum); HRESULT Next( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] ITfDocumentMgr **rgDocumentMgr, [out] ULONG *pcFetched); HRESULT Reset(); HRESULT Skip( [in] ULONG ulCount); } [ object, local, uuid(ea1ea137-19df-11d7-a6d2-00065b84435c), pointer_default(unique) ] interface ITfUIElement : IUnknown { HRESULT GetDescription( [out] BSTR *description); HRESULT GetGUID( [out] GUID *guid); HRESULT Show( [in] BOOL show); HRESULT IsShown( [out] BOOL *show); } [ object, local, uuid(887aa91e-acba-4931-84da-3c5208cf543f), pointer_default(unique) ] interface IEnumTfUIElements : IUnknown { HRESULT Clone( [out] IEnumTfUIElements **enum_elements); HRESULT Next( [in] ULONG count, [out, size_is(count), length_is(fetched)] ITfUIElement **element, [out] ULONG fetched); HRESULT Reset(); HRESULT Skip( [in] ULONG count); } [ object, local, uuid(ea1ea135-19df-11d7-a6d2-00065b84435c), pointer_default(unique) ] interface ITfUIElementMgr : IUnknown { HRESULT BeginUIElement( [in] ITfUIElement *element, [in, out] BOOL *show, [out] DWORD *id); HRESULT UpdateUIElement( [in] DWORD id); HRESULT EndUIElement( [in] DWORD id); HRESULT GetUIElement( [in] DWORD id, [out] ITfUIElement **element); HRESULT EnumUIElements( [out] IEnumTfUIElements **enum_elements); } [ object, uuid(73131f9c-56a9-49dd-b0ee-d046633f7528), pointer_default(unique) ] interface ITfSourceSingle : IUnknown { HRESULT AdviseSingleSink( [in] TfClientId tid, [in] REFIID riid, [in, iid_is(riid)] IUnknown *punk); HRESULT UnadviseSingleSink( [in] TfClientId tid, [in] REFIID riid); } [ object, local, uuid(c0f1db0c-3a20-405c-a303-96b6010a885f), pointer_default(unique) ] interface ITfThreadFocusSink : IUnknown { HRESULT OnSetThreadFocus(); HRESULT OnKillThreadFocus(); } [ object, uuid(71c6e74e-0f28-11d8-a82a-00065b84435c), pointer_default(unique) ] interface ITfInputProcessorProfileActivationSink : IUnknown { HRESULT OnActivated( [in] DWORD dwProfileType, [in] LANGID langid, [in] REFCLSID clsid, [in] REFGUID catid, [in] REFGUID guidProfile, [in] HKL hkl, [in] DWORD dwFlags); } [ object, local, uuid(a1adaaa2-3a24-449d-ac96-5183e7f5c217), pointer_default(unique) ] interface ITfMouseSink : IUnknown { HRESULT OnMouseEvent( [in] ULONG uEdge, [in] ULONG uQuadrant, [in] DWORD dwBtnStatus, [out] BOOL *pfEaten); } [ object, uuid(09d146cd-a544-4132-925b-7afa8ef322d0), pointer_default(unique) ] interface ITfMouseTracker : IUnknown { HRESULT AdviseMouseSink( [in] ITfRange *range, [in] ITfMouseSink *pSink, [out] DWORD *pdwCookie); HRESULT UnadviseMouseSink([in] DWORD dwCookie); } [ object, uuid(3bdd78e2-c16e-47fd-b883-ce6facc1a208), pointer_default(unique) ] interface ITfMouseTrackerACP : IUnknown { HRESULT AdviseMouseSink( [in] ITfRangeACP *range, [in] ITfMouseSink *pSink, [out] DWORD *pdwCookie); HRESULT UnadviseMouseSink([in] DWORD dwCookie); } [ object, local, uuid(a615096f-1c57-4813-8a15-55ee6e5a839c), pointer_default(unique) ] interface ITfTransitoryExtensionSink : IUnknown { HRESULT OnTransitoryExtensionUpdated( [in] ITfContext *pic, [in] TfEditCookie ecReadOnly, [in] ITfRange *pResultRange, [in] ITfRange *pCompositionRange, [out] BOOL *pfDeleteResultRange); } ================================================ FILE: wine/windows/msdadc.idl ================================================ /* * Copyright 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "oledb.idl"; [ object, pointer_default(unique), uuid(0c733a8d-2a1c-11ce-ade5-00aa0044773d) ] interface IDataConvert : IUnknown { typedef DWORD DBDATACONVERT; enum DBDATACONVERTENUM { DBDATACONVERT_DEFAULT = 0, DBDATACONVERT_SETDATABEHAVIOR = 1, DBDATACONVERT_LENGTHFROMNTS = 2, DBDATACONVERT_DSTISFIXEDLENGTH = 4, DBDATACONVERT_DECIMALSCALE = 8 }; [local] HRESULT DataConvert([in] DBTYPE wSrcType, [in] DBTYPE wDstType, [in] DBLENGTH cbSrcLength, [in, out] DBLENGTH *pcbDstLength, [in] void *pSrc, [out] void *pDst, [in] DBLENGTH cbDstMaxLength, [in] DBSTATUS dbsSrcStatus, [out] DBSTATUS *pdbsDstStatus, [in] BYTE bPrecision, [in] BYTE bScale, [in] DBDATACONVERT dwFlags); HRESULT CanConvert([in] DBTYPE wSrcType, [in] DBTYPE wDstType); [local] HRESULT GetConversionSize([in] DBTYPE wSrcType, [in] DBTYPE wDstType, [in] DBLENGTH *pcbSrcLength, [out] DBLENGTH *pcbDstLength, [in, size_is(*pcbSrcLength)] void *pSrc); } [ object, pointer_default(unique), uuid(0c733a9c-2a1c-11ce-ade5-00aa0044773d) ] interface IDCInfo : IUnknown { typedef DWORD DCINFOTYPE; enum DCINFOTYPEENUM { DCINFOTYPE_VERSION = 1 }; typedef struct tagDCINFO { DCINFOTYPE eInfoType; VARIANT vData; } DCINFO; HRESULT GetInfo([in] ULONG cInfo, [in, size_is(cInfo)] DCINFOTYPE rgeInfoType[], [out, size_is(cInfo)] DCINFO **prgInfo); HRESULT SetInfo([in] ULONG cInfo, [in, size_is(cInfo)] DCINFO prgInfo[]); } ================================================ FILE: wine/windows/msdaguid.h ================================================ /* * Copyright 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSDAGUID_H #define __WINE_MSDAGUID_H DEFINE_GUID(CLSID_EXTENDEDERRORINFO, 0xc8b522cf, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d); DEFINE_GUID(CLSID_OLEDB_ENUMERATOR, 0xc8b522d0, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d); DEFINE_GUID(CLSID_OLEDB_CONVERSIONLIBRARY, 0xc8b522d1, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d); DEFINE_GUID(CLSID_OLEDB_ROWPOSITIONLIBRARY,0x2048eee6, 0x7fa2, 0x11d0, 0x9e, 0x6a, 0x00, 0xa0, 0xc9, 0x13, 0x8c, 0x29); #endif /*__WINE_MSDAGUID_H */ ================================================ FILE: wine/windows/msdasc.idl ================================================ /* * Copyright (C) 2012 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "oledb.idl"; #if !defined(progid) && !defined(__WIDL__) #define threading(model) #define progid(str) #define vi_progid(str) #endif typedef LONG_PTR COMPATIBLE_LONG; [ uuid(2206CEB0-19C1-11D1-89E0-00C04FD7A829), version(1.0) ] library MSDASC { importlib("stdole2.tlb"); typedef DWORD DBPROMPTOPTIONS; typedef enum tagDBPROMPTOPTIONSENUM { DBPROMPTOPTIONS_NONE = 0x00, DBPROMPTOPTIONS_WIZARDSHEET = 0x01, DBPROMPTOPTIONS_PROPERTYSHEET = 0x02, DBPROMPTOPTIONS_BROWSEONLY = 0x08, DBPROMPTOPTIONS_DISABLE_PROVIDER_SELECTION = 0x10, DBPROMPTOPTIONS_DISABLESAVEPASSWORD = 0x20 } DBPROMPTOPTIONSENUM; [ odl, uuid(2206CCB2-19C1-11D1-89E0-00C04FD7A829), helpstring("OLE DB Service Component Automation Interface"), dual, oleautomation ] interface IDataSourceLocator : IDispatch { [id(0x60020000), propget] HRESULT hWnd([out, retval] COMPATIBLE_LONG* phwndParent); [id(0x60020000), propput] HRESULT hWnd([in] COMPATIBLE_LONG hwndParent); [id(0x60020002), helpstring("PromptNew")] HRESULT PromptNew([out, retval] IDispatch** ppADOConnection); [id(0x60020003), helpstring("PromptEdit")] HRESULT PromptEdit([in, out] IDispatch** ppADOConnection, [out, retval] VARIANT_BOOL* pbSuccess); } [ odl, uuid(2206CCB0-19C1-11D1-89E0-00C04FD7A829), restricted ] interface IDBPromptInitialize : IUnknown { HRESULT _stdcall PromptDataSource([in] IUnknown* pUnkOuter, [in] HWND hWndParent, [in] DBPROMPTOPTIONS dwPromptOptions, [in] ULONG cSourceTypeFilter, [in] DBSOURCETYPE* rgSourceTypeFilter, [in] LPWSTR pwszszzProviderFilter, [in] GUID* riid, [in, out] IUnknown** ppDataSource); HRESULT _stdcall PromptFileName([in] HWND hWndParent, [in] ULONG dwPromptOptions, [in] LPWSTR pwszInitialDirectory, [in] LPWSTR pwszInitialFile, [out] LPWSTR* ppwszSelectedFile); } [ uuid(2206CCB1-19C1-11D1-89E0-00C04FD7A829), ] interface IDataInitialize : IUnknown { HRESULT GetDataSource([in] IUnknown* pUnkOuter, [in] DWORD dwClsCtx, [in] LPWSTR pwszInitializationString, [in] REFIID riid, [in, out] IUnknown** ppDataSource); HRESULT GetInitializationString([in] IUnknown* pDataSource, [in] boolean fIncludePassword, [out] LPWSTR* ppwszInitString); HRESULT CreateDBInstance([in] REFCLSID clsidProvider, [in] IUnknown* pUnkOuter, [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved, [in] REFIID riid, [out] IUnknown** ppDataSource); [local] HRESULT CreateDBInstanceEx([in] REFCLSID clsidProvider, [in] IUnknown* pUnkOuter, [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved, [in] COSERVERINFO* pServerInfo, [in] DWORD cmq, [in, out, size_is(cmq)] MULTI_QI *results); [call_as(CreateDBInstanceEx)] HRESULT RemoteCreateDBInstanceEx([in] REFCLSID clsidProvider, [in] IUnknown* pUnkOuter, [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved, [in] COSERVERINFO* pServerInfo, [in] DWORD cmq, [in, size_is(cmq)] const IID **iids, [out, size_is(cmq)] IUnknown **ifs, [out, size_is(cmq)] HRESULT *hr); HRESULT LoadStringFromStorage([in] LPWSTR pwszFileName, [out] LPWSTR* ppwszInitializationString); HRESULT WriteStringToStorage([in] LPWSTR pwszFileName, [in] LPWSTR pwszInitializationString, [in] DWORD dwCreationDisposition); } [ uuid(2206CDB0-19C1-11D1-89E0-00C04FD7A829), threading(both), progid("MSDASC.MSDAINITIALIZE.1"), vi_progid("MSDASC.MSDAINITIALIZE"), ] coclass MSDAINITIALIZE { [default] interface IDataInitialize; } [ uuid(2206CDB2-19C1-11D1-89E0-00C04FD7A829), threading(both), progid("DataLinks") ] coclass DataLinks { [default] interface IDataSourceLocator; interface IDBPromptInitialize; interface IDataInitialize; } } ================================================ FILE: wine/windows/mshtmcid.h ================================================ /* * Copyright 2006 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __mshtmcid_h__ #define __mshtmcid_h__ #define IDM_UNKNOWN 0 #define IDM_ALIGNBOTTOM 1 #define IDM_ALIGNHORIZONTALCENTERS 2 #define IDM_ALIGNLEFT 3 #define IDM_ALIGNRIGHT 4 #define IDM_ALIGNTOGRID 5 #define IDM_ALIGNTOP 6 #define IDM_ALIGNVERTICALCENTERS 7 #define IDM_ARRANGEBOTTOM 8 #define IDM_ARRANGERIGHT 9 #define IDM_BRINGFORWARD 10 #define IDM_BRINGTOFRONT 11 #define IDM_CENTERHORIZONTALLY 12 #define IDM_CENTERVERTICALLY 13 #define IDM_CODE 14 #define IDM_COPY 15 #define IDM_CUT 16 #define IDM_DELETE 17 #define IDM_FONTNAME 18 #define IDM_FONTSIZE 19 #define IDM_GROUP 20 #define IDM_HORIZSPACECONCATENATE 21 #define IDM_HORIZSPACEDECREASE 22 #define IDM_HORIZSPACEINCREASE 23 #define IDM_HORIZSPACEMAKEEQUAL 24 #define IDM_INSERTOBJECT 25 #define IDM_PASTE 26 #define IDM_PRINT 27 #define IDM_PROPERTIES 28 #define IDM_REDO 29 #define IDM_MULTILEVELREDO 30 #define IDM_SELECTALL 31 #define IDM_SENDBACKWARD 32 #define IDM_SENDTOBACK 33 #define IDM_SHOWTABLE 34 #define IDM_SIZETOCONTROL 35 #define IDM_SIZETOCONTROLHEIGHT 36 #define IDM_SIZETOCONTROLWIDTH 37 #define IDM_SIZETOFIT 38 #define IDM_SIZETOGRID 39 #define IDM_SNAPTOGRID 40 #define IDM_TABORDER 41 #define IDM_TOOLBOX 42 #define IDM_UNDO 43 #define IDM_MULTILEVELUNDO 44 #define IDM_UNGROUP 45 #define IDM_VERTSPACECONCATENATE 46 #define IDM_VERTSPACEDECREASE 47 #define IDM_VERTSPACEINCREASE 48 #define IDM_VERTSPACEMAKEEQUAL 49 #define IDM_JUSTIFYFULL 50 #define IDM_ZOOMPERCENT 50 #define IDM_BACKCOLOR 51 #define IDM_BOLD 52 #define IDM_BORDERCOLOR 53 #define IDM_FLAT 54 #define IDM_FORECOLOR 55 #define IDM_ITALIC 56 #define IDM_JUSTIFYCENTER 57 #define IDM_JUSTIFYGENERAL 58 #define IDM_JUSTIFYLEFT 59 #define IDM_JUSTIFYRIGHT 60 #define IDM_RAISED 61 #define IDM_SUNKEN 62 #define IDM_UNDERLINE 63 #define IDM_CHISELED 64 #define IDM_ETCHED 65 #define IDM_SHADOWED 66 #define IDM_FIND 67 #define IDM_GETZOOM 68 #define IDM_SHOWGRID 69 #define IDM_SAVE 70 #define IDM_SAVEAS 71 #define IDM_OBJECTVERBLIST0 72 #define IDM_OBJECTVERBLIST1 73 #define IDM_OBJECTVERBLIST2 74 #define IDM_OBJECTVERBLIST3 75 #define IDM_OBJECTVERBLIST4 76 #define IDM_OBJECTVERBLIST5 77 #define IDM_OBJECTVERBLIST6 78 #define IDM_OBJECTVERBLIST7 79 #define IDM_OBJECTVERBLIST8 80 #define IDM_OBJECTVERBLIST9 81 #define IDM_OBJECTVERBLISTLAST IDM_OBJECTVERBLIST9 #define IDM_CONVERTOBJECT 82 #define IDM_CUSTOMCONTROL 83 #define IDM_CUSTOMIZEITEM 84 #define IDM_RENAME 85 #define IDM_IMPORT 86 #define IDM_NEWPAGE 87 #define IDM_MOVE 88 #define IDM_CANCEL 89 #define IDM_FONT 90 #define IDM_STRIKETHROUGH 91 #define IDM_DELETEWORD 92 #define IDM_EXECPRINT 93 #define IDM_JUSTIFYNONE 94 #define IDM_TRISTATEBOLD 95 #define IDM_TRISTATEITALIC 96 #define IDM_TRISTATEUNDERLINE 97 #define IDM_OPEN 2000 #define IDM_NEW 2001 #define IDM_SAVECOPYAS 2002 #define IDM_PRINTPREVIEW 2003 #define IDM_PAGESETUP 2004 #define IDM_SPELL 2005 #define IDM_PASTESPECIAL 2006 #define IDM_CLEARSELECTION 2007 #define IDM_FOLLOW_ANCHOR 2008 #define IDM_SHOWPRINT 2010 #define IDM_SHOWPAGESETUP 2011 #define IDM_INSINPUTIMAGE 2114 #define IDM_INSINPUTBUTTON 2115 #define IDM_INSINPUTRESET 2116 #define IDM_INSINPUTSUBMIT 2117 #define IDM_INSINPUTUPLOAD 2118 #define IDM_INSFIELDSET 2119 #define IDM_PASTEINSERT 2120 #define IDM_REPLACE 2121 #define IDM_EDITSOURCE 2122 #define IDM_BOOKMARK 2123 #define IDM_HYPERLINK 2124 #define IDM_UNLINK 2125 #define IDM_BROWSEMODE 2126 #define IDM_EDITMODE 2127 #define IDM_UNBOOKMARK 2128 #define IDM_TOOLBARS 2130 #define IDM_STATUSBAR 2131 #define IDM_FORMATMARK 2132 #define IDM_TEXTONLY 2133 #define IDM_OPTIONS 2135 #define IDM_FOLLOWLINKC 2136 #define IDM_FOLLOWLINKN 2137 #define IDM_STOP 2138 #define IDM_VIEWSOURCE 2139 #define IDM_ZOOMPOPUP 2140 #define IDM_BASELINEFONT1 2141 #define IDM_BASELINEFONT2 2142 #define IDM_BASELINEFONT3 2143 #define IDM_BASELINEFONT4 2144 #define IDM_BASELINEFONT5 2145 #define IDM_HORIZONTALLINE 2150 #define IDM_LINEBREAKNORMAL 2151 #define IDM_LINEBREAKLEFT 2152 #define IDM_LINEBREAKRIGHT 2153 #define IDM_LINEBREAKBOTH 2154 #define IDM_NONBREAK 2155 #define IDM_SPECIALCHAR 2156 #define IDM_HTMLSOURCE 2157 #define IDM_IFRAME 2158 #define IDM_HTMLCONTAIN 2159 #define IDM_TEXTBOX 2161 #define IDM_TEXTAREA 2162 #define IDM_CHECKBOX 2163 #define IDM_RADIOBUTTON 2164 #define IDM_DROPDOWNBOX 2165 #define IDM_LISTBOX 2166 #define IDM_BUTTON 2167 #define IDM_IMAGE 2168 #define IDM_OBJECT 2169 #define IDM_1D 2170 #define IDM_IMAGEMAP 2171 #define IDM_FILE 2172 #define IDM_COMMENT 2173 #define IDM_SCRIPT 2174 #define IDM_JAVAAPPLET 2175 #define IDM_PLUGIN 2176 #define IDM_PAGEBREAK 2177 #define IDM_HTMLAREA 2178 #define IDM_PARAGRAPH 2180 #define IDM_FORM 2181 #define IDM_MARQUEE 2182 #define IDM_LIST 2183 #define IDM_ORDERLIST 2184 #define IDM_UNORDERLIST 2185 #define IDM_INDENT 2186 #define IDM_OUTDENT 2187 #define IDM_PREFORMATTED 2188 #define IDM_ADDRESS 2189 #define IDM_BLINK 2190 #define IDM_DIV 2191 #define IDM_TABLEINSERT 2200 #define IDM_RCINSERT 2201 #define IDM_CELLINSERT 2202 #define IDM_CAPTIONINSERT 2203 #define IDM_CELLMERGE 2204 #define IDM_CELLSPLIT 2205 #define IDM_CELLSELECT 2206 #define IDM_ROWSELECT 2207 #define IDM_COLUMNSELECT 2208 #define IDM_TABLESELECT 2209 #define IDM_TABLEPROPERTIES 2210 #define IDM_CELLPROPERTIES 2211 #define IDM_ROWINSERT 2212 #define IDM_COLUMNINSERT 2213 #define IDM_HELP_CONTENT 2220 #define IDM_HELP_ABOUT 2221 #define IDM_HELP_README 2222 #define IDM_REMOVEFORMAT 2230 #define IDM_PAGEINFO 2231 #define IDM_TELETYPE 2232 #define IDM_GETBLOCKFMTS 2233 #define IDM_BLOCKFMT 2234 #define IDM_SHOWHIDE_CODE 2235 #define IDM_TABLE 2236 #define IDM_COPYFORMAT 2237 #define IDM_PASTEFORMAT 2238 #define IDM_GOTO 2239 #define IDM_CHANGEFONT 2240 #define IDM_CHANGEFONTSIZE 2241 #define IDM_CHANGECASE 2246 #define IDM_SUBSCRIPT 2247 #define IDM_SUPERSCRIPT 2248 #define IDM_SHOWSPECIALCHAR 2249 #define IDM_CENTERALIGNPARA 2250 #define IDM_LEFTALIGNPARA 2251 #define IDM_RIGHTALIGNPARA 2252 #define IDM_REMOVEPARAFORMAT 2253 #define IDM_APPLYNORMAL 2254 #define IDM_APPLYHEADING1 2255 #define IDM_APPLYHEADING2 2256 #define IDM_APPLYHEADING3 2257 #define IDM_DOCPROPERTIES 2260 #define IDM_ADDFAVORITES 2261 #define IDM_COPYSHORTCUT 2262 #define IDM_SAVEBACKGROUND 2263 #define IDM_SETWALLPAPER 2264 #define IDM_COPYBACKGROUND 2265 #define IDM_CREATESHORTCUT 2266 #define IDM_PAGE 2267 #define IDM_SAVETARGET 2268 #define IDM_SHOWPICTURE 2269 #define IDM_SAVEPICTURE 2270 #define IDM_DYNSRCPLAY 2271 #define IDM_DYNSRCSTOP 2272 #define IDM_PRINTTARGET 2273 #define IDM_IMGARTPLAY 2274 #define IDM_IMGARTSTOP 2275 #define IDM_IMGARTREWIND 2276 #define IDM_PRINTQUERYJOBSPENDING 2277 #define IDM_SETDESKTOPITEM 2278 #define IDM_CONTEXTMENU 2280 #define IDM_GOBACKWARD 2282 #define IDM_GOFORWARD 2283 #define IDM_PRESTOP 2284 #define IDM_MP_MYPICS 2287 #define IDM_MP_EMAILPICTURE 2288 #define IDM_MP_PRINTPICTURE 2289 #define IDM_CREATELINK 2290 #define IDM_COPYCONTENT 2291 #define IDM_LANGUAGE 2292 #define IDM_GETPRINTTEMPLATE 2295 #define IDM_SETPRINTTEMPLATE 2296 #define IDM_TEMPLATE_PAGESETUP 2298 #define IDM_REFRESH 2300 #define IDM_STOPDOWNLOAD 2301 #define IDM_ENABLE_INTERACTION 2302 #define IDM_LAUNCHDEBUGGER 2310 #define IDM_BREAKATNEXT 2311 #define IDM_INSINPUTHIDDEN 2312 #define IDM_INSINPUTPASSWORD 2313 #define IDM_OVERWRITE 2314 #define IDM_PARSECOMPLETE 2315 #define IDM_HTMLEDITMODE 2316 #define IDM_REGISTRYREFRESH 2317 #define IDM_COMPOSESETTINGS 2318 #define IDM_SHOWMISCTAGS 2320 #define IDM_SHOWALIGNEDSITETAGS 2321 #define IDM_SHOWSCRIPTTAGS 2322 #define IDM_SHOWSTYLETAGS 2323 #define IDM_SHOWCOMMENTTAGS 2324 #define IDM_SHOWAREATAGS 2325 #define IDM_SHOWUNKNOWNTAGS 2326 #define IDM_SHOWALLTAGS 2327 #define IDM_SHOWZEROBORDERATDESIGNTIME 2328 #define IDM_AUTODETECT 2329 #define IDM_SCRIPTDEBUGGER 2330 #define IDM_GETBYTESDOWNLOADED 2331 #define IDM_NOACTIVATENORMALOLECONTROLS 2332 #define IDM_NOACTIVATEDESIGNTIMECONTROLS 2333 #define IDM_NOACTIVATEJAVAAPPLETS 2334 #define IDM_NOFIXUPURLSONPASTE 2335 #define IDM_EMPTYGLYPHTABLE 2336 #define IDM_ADDTOGLYPHTABLE 2337 #define IDM_REMOVEFROMGLYPHTABLE 2338 #define IDM_REPLACEGLYPHCONTENTS 2339 #define IDM_SHOWWBRTAGS 2340 #define IDM_PERSISTSTREAMSYNC 2341 #define IDM_SETDIRTY 2342 #define IDM_RUNURLSCRIPT 2343 #ifdef IE5_ZOOM #define IDM_ZOOMRATIO 2344 #define IDM_GETZOOMNUMERATOR 2345 #define IDM_GETZOOMDENOMINATOR 2346 #endif #define IDM_DIRLTR 2350 #define IDM_DIRRTL 2351 #define IDM_BLOCKDIRLTR 2352 #define IDM_BLOCKDIRRTL 2353 #define IDM_INLINEDIRLTR 2354 #define IDM_INLINEDIRRTL 2355 #define IDM_ISTRUSTEDDLG 2356 #define IDM_INSERTSPAN 2357 #define IDM_LOCALIZEEDITOR 2358 #define IDM_SAVEPRETRANSFORMSOURCE 2370 #define IDM_VIEWPRETRANSFORMSOURCE 2371 #define IDM_SCROLL_HERE 2380 #define IDM_SCROLL_TOP 2381 #define IDM_SCROLL_BOTTOM 2382 #define IDM_SCROLL_PAGEUP 2383 #define IDM_SCROLL_PAGEDOWN 2384 #define IDM_SCROLL_UP 2385 #define IDM_SCROLL_DOWN 2386 #define IDM_SCROLL_LEFTEDGE 2387 #define IDM_SCROLL_RIGHTEDGE 2388 #define IDM_SCROLL_PAGELEFT 2389 #define IDM_SCROLL_PAGERIGHT 2390 #define IDM_SCROLL_LEFT 2391 #define IDM_SCROLL_RIGHT 2392 #define IDM_MULTIPLESELECTION 2393 #define IDM_2D_POSITION 2394 #define IDM_2D_ELEMENT 2395 #define IDM_1D_ELEMENT 2396 #define IDM_ABSOLUTE_POSITION 2397 #define IDM_LIVERESIZE 2398 #define IDM_ATOMICSELECTION 2399 #define IDM_AUTOURLDETECT_MODE 2400 #define IDM_IE50_PASTE 2401 #define IDM_IE50_PASTE_MODE 2402 #define IDM_GETIPRINT 2403 #define IDM_DISABLE_EDITFOCUS_UI 2404 #define IDM_RESPECTVISIBILITY_INDESIGN 2405 #define IDM_CSSEDITING_LEVEL 2406 #define IDM_UI_OUTDENT 2407 #define IDM_UPDATEPAGESTATUS 2408 #define IDM_IME_ENABLE_RECONVERSION 2409 #define IDM_KEEPSELECTION 2410 #define IDM_UNLOADDOCUMENT 2411 #define IDM_OVERRIDE_CURSOR 2420 #define IDM_PEERHITTESTSAMEINEDIT 2423 #define IDM_TRUSTAPPCACHE 2425 #define IDM_BACKGROUNDIMAGECACHE 2430 #define IDM_MIMECSET__FIRST_ 3609 #define IDM_MIMECSET__LAST__ 3699 #define IDM_MENUEXT_FIRST__ 3700 #define IDM_MENUEXT_LAST__ 3732 #define IDM_MENUEXT_COUNT 3733 #define IDM_DEFAULTBLOCK 6046 #define IDM_NEW_TOPLEVELWINDOW 7050 #define IDM_PRESERVEUNDOALWAYS 6049 #define IDM_PERSISTDEFAULTVALUES 7100 #define IDM_PROTECTMETATAGS 7101 #define IDM_GETFRAMEZONE 6037 #define IDM_FIRE_PRINTTEMPLATEUP 15000 #define IDM_FIRE_PRINTTEMPLATEDOWN 15001 #define IDM_SETPRINTHANDLES 15002 #define CMD_ZOOM_PAGEWIDTH -1 #define CMD_ZOOM_ONEPAGE -2 #define CMD_ZOOM_TWOPAGES -3 #define CMD_ZOOM_SELECTION -4 #define CMD_ZOOM_FIT -5 #define IDM_CONTEXT 1 #define IDM_HWND 2 #endif ================================================ FILE: wine/windows/mshtmdid.h ================================================ /* * Copyright 2004,2006 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __MSHTMDID_H__ #define __MSHTMDID_H__ #define DISPID_NORMAL_FIRST 1000 #define DISPID_IE8_NORMAL_FIRST (DISPID_NORMAL_FIRST+150) #define DISPID_OMDOCUMENT DISPID_NORMAL_FIRST #define DISPID_DATATRANSFER DISPID_NORMAL_FIRST #define DISPID_ANCHOR DISPID_NORMAL_FIRST #define DISPID_BLOCK DISPID_NORMAL_FIRST #define DISPID_BR DISPID_NORMAL_FIRST #define DISPID_BGSOUND DISPID_NORMAL_FIRST #define DISPID_DD DISPID_NORMAL_FIRST #define DISPID_DIR DISPID_NORMAL_FIRST #define DISPID_DIV DISPID_NORMAL_FIRST #define DISPID_DL DISPID_NORMAL_FIRST #define DISPID_DT DISPID_NORMAL_FIRST #define DISPID_EFONT DISPID_NORMAL_FIRST #define DISPID_FORM DISPID_NORMAL_FIRST #define DISPID_HEADER DISPID_NORMAL_FIRST #define DISPID_HEDELEMS DISPID_NORMAL_FIRST #define DISPID_HR DISPID_NORMAL_FIRST #define DISPID_LABEL DISPID_NORMAL_FIRST #define DISPID_LI DISPID_NORMAL_FIRST #define DISPID_IMGBASE DISPID_NORMAL_FIRST #define DISPID_MENU DISPID_NORMAL_FIRST #define DISPID_OL DISPID_NORMAL_FIRST #define DISPID_PARA DISPID_NORMAL_FIRST #define DISPID_SELECT DISPID_NORMAL_FIRST #define DISPID_SELECTOBJ DISPID_NORMAL_FIRST #define DISPID_TABLE DISPID_NORMAL_FIRST #define DISPID_TEXTSITE DISPID_NORMAL_FIRST #define DISPID_UL DISPID_NORMAL_FIRST #define DISPID_PHRASE DISPID_NORMAL_FIRST #define DISPID_UNKNOWNPDL DISPID_NORMAL_FIRST #define DISPID_COMMENTPDL DISPID_NORMAL_FIRST #define DISPID_RANGE DISPID_NORMAL_FIRST #define DISPID_SELECTION DISPID_NORMAL_FIRST #define DISPID_OPTION DISPID_NORMAL_FIRST #define DISPID_RANGE DISPID_NORMAL_FIRST #define DISPID_SELECTION DISPID_NORMAL_FIRST #define DISPID_OPTION DISPID_NORMAL_FIRST #define DISPID_RANGE DISPID_NORMAL_FIRST #define DISPID_SELECTION DISPID_NORMAL_FIRST #define DISPID_OPTION DISPID_NORMAL_FIRST #define DISPID_RANGE DISPID_NORMAL_FIRST #define DISPID_SELECTION DISPID_NORMAL_FIRST #define DISPID_OPTION DISPID_NORMAL_FIRST #define DISPID_RANGE DISPID_NORMAL_FIRST #define DISPID_SELECTION DISPID_NORMAL_FIRST #define DISPID_OPTION DISPID_NORMAL_FIRST #define DISPID_MAP DISPID_NORMAL_FIRST #define DISPID_AREA DISPID_NORMAL_FIRST #define DISPID_PARAM DISPID_NORMAL_FIRST #define DISPID_TABLESECTION DISPID_NORMAL_FIRST #define DISPID_TABLEROW DISPID_NORMAL_FIRST #define DISPID_TABLECOL DISPID_NORMAL_FIRST #define DISPID_SCRIPT DISPID_NORMAL_FIRST #define DISPID_STYLESHEET DISPID_NORMAL_FIRST #define DISPID_STYLERULE DISPID_NORMAL_FIRST #define DISPID_STYLEPAGE DISPID_NORMAL_FIRST #define DISPID_STYLESHEETS_COL DISPID_NORMAL_FIRST #define DISPID_STYLERULES_COL DISPID_NORMAL_FIRST #define DISPID_STYLEPAGES_COL DISPID_NORMAL_FIRST #define DISPID_MIMETYPES_COL DISPID_NORMAL_FIRST #define DISPID_PLUGINS_COL DISPID_NORMAL_FIRST #define DISPID_2D DISPID_NORMAL_FIRST #define DISPID_OMWINDOW DISPID_NORMAL_FIRST #define DISPID_EVENTOBJ DISPID_NORMAL_FIRST #define DISPID_OLESITE DISPID_NORMAL_FIRST #define DISPID_FRAMESET DISPID_NORMAL_FIRST #define DISPID_LINK DISPID_NORMAL_FIRST #define DISPID_STYLEELEMENT DISPID_NORMAL_FIRST #define DISPID_FILTERS DISPID_NORMAL_FIRST #define DISPID_TABLESECTION DISPID_NORMAL_FIRST #define DISPID_OMRECT DISPID_NORMAL_FIRST #define DISPID_OMDOCUMENT DISPID_NORMAL_FIRST #define DISPID_SCREEN DISPID_NORMAL_FIRST #define DISPID_DOMATTRIBUTE DISPID_NORMAL_FIRST #define DISPID_DOMTEXTNODE DISPID_NORMAL_FIRST #define DISPID_GENERIC DISPID_NORMAL_FIRST #define DISPID_URN_COLL DISPID_NORMAL_FIRST #define DISPID_NAMESPACE_COLLECTION DISPID_NORMAL_FIRST #define DISPID_NAMESPACE DISPID_NORMAL_FIRST #define DISPID_TAGNAMES_COLLECTION DISPID_NORMAL_FIRST #define DISPID_XMLHTTPREQUEST DISPID_NORMAL_FIRST #define DISPID_DOCUMENTCOMPATIBLEINFO_COLLECTION DISPID_NORMAL_FIRST #define DISPID_DOCUMENTCOMPATIBLEINFO DISPID_NORMAL_FIRST #define DISPID_XDOMAINREQUEST DISPID_NORMAL_FIRST #define DISPID_DOMSTORAGEITEM DISPID_NORMAL_FIRST #define DISPID_DOMSTORAGE DISPID_NORMAL_FIRST #define DISPID_DOMSTORAGELIST DISPID_NORMAL_FIRST #define DISPID_RULESAPPLIED DISPID_NORMAL_FIRST #define DISPID_RULESAPPLIED_COLLECTION DISPID_NORMAL_FIRST #define DISPID_STYLESHEETRULESAPPLIED_COLLECTION DISPID_NORMAL_FIRST #define DISPID_PROCESSINGINSTRUCTION DISPID_NORMAL_FIRST #define DISPID_PERFORMANCE DISPID_NORMAL_FIRST #define DISPID_PERFORMANCENAVIGATION DISPID_NORMAL_FIRST #define DISPID_PERFORMANCETIMING DISPID_NORMAL_FIRST #define DISPID_HTMLSELECTION DISPID_NORMAL_FIRST #define DISPID_DOMRANGE DISPID_NORMAL_FIRST #define DISPID_MEDIA DISPID_NORMAL_FIRST #define DISPID_STYLEMEDIA DISPID_NORMAL_FIRST #define DISPID_DOMEVENT DISPID_NORMAL_FIRST #define DISPID_DOMUIEVENT (DISPID_DOMEVENT+25) #define DISPID_DOMMOUSEEVENT (DISPID_DOMUIEVENT+25) #define DISPID_DOMMOUSEWHEELEVENT (DISPID_DOMMOUSEEVENT+25) #define DISPID_DOMWHEELEVENT (DISPID_DOMMOUSEWHEELEVENT+25) #define DISPID_DOMTEXTEVENT (DISPID_DOMWHEELEVENT+25) #define DISPID_DOMKEYBOARDEVENT (DISPID_DOMTEXTEVENT+25) #define DISPID_DOMCOMPOSITIONEVENT (DISPID_DOMKEYBOARDEVENT+25) #define DISPID_DOMCUSTOMEVENT (DISPID_DOMCOMPOSITIONEVENT+25) #define DISPID_DOMMUTATIONEVENT (DISPID_DOMCUSTOMEVENT+25) #define DISPID_DOMFOCUSEVENT (DISPID_DOMMUTATIONEVENT+25) #define DISPID_SVGZOOMEVENT (DISPID_DOMFOCUSEVENT+25) #define DISPID_DOMSITEMODEEVENT (DISPID_SVGZOOMEVENT+25) #define DISPID_DOMMESSAGEEVENT (DISPID_DOMSITEMODEEVENT+25) #define DISPID_DOMSTORAGEEVENT (DISPID_DOMMESSAGEEVENT+25) #define DISPID_DOMBEFOREUNLOADEVENT (DISPID_DOMSTORAGEEVENT+25) #define DISPID_DOMDRAGEVENT (DISPID_DOMBEFOREUNLOADEVENT+25) #define DISPID_DOMIMPLEMENTATION DISPID_NORMAL_FIRST #define DISPID_DOCUMENTCOMPATIBLEINFO DISPID_NORMAL_FIRST #define DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION DISPID_NORMAL_FIRST #define DISPID_IE8_ANCHOR DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_AREA DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_BASE DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_BODY DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_FORM DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_HEAD DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_IMG DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_INPUT DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_LINK DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_MOD DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_SCRIPT DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_ATTR DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_NAMEDNODEMAP DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_COLLECTION DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_PARAM DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_EMBED DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_BLOCK DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_META DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_STYLE DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_SELECT DISPID_IE8_NORMAL_FIRST #define DISPID_IE8_ELEMENTBASE (DISPID_ELEMENT+200) #define DISPID_IE8_ELEMENTMAX (DISPID_SITE-1) #define DISPID_IE8_ELEMENT DISPID_IE8_ELEMENTBASE #define DISPID_IE8_FRAMESITEBASE (DISPID_FRAMESITE+1120) #define DISPID_IE8_FRAMEMAX (WEBOC_DISPIDBASE-1) #define DISPID_IE8_FRAME DISPID_IE8_FRAMESITEBASE #define DISPID_IE8_IFRAME DISPID_IE8_FRAMESITEBASE #define DISPID_IE8_OBJECTBASE (DISPID_OBJECT+30) #define DISPID_IE8_OBJECTMAX (DISPID_STYLE-1) #define DISPID_IE8_OBJECT DISPID_IE8_OBJECTBASE #define DISPID_IE9_ELEMENTBASE (DISPID_IE8_ELEMENTMAX + 10) #define DISPID_IE9_ELEMENTMAX (DISPID_IE9_ELEMENTBASE + 35) #define DISPID_IE9_ELEMENT DISPID_IE9_ELEMENTBASE #define DISPID_COLLECTION (DISPID_NORMAL_FIRST+500) #define DISPID_OPTIONS_COL (DISPID_NORMAL_FIRST+500) #define DISPID_IMG (DISPID_IMGBASE+1000) #define DISPID_INPUTIMAGE (DISPID_IMGBASE+1000) #define DISPID_INPUT (DISPID_TEXTSITE+1000) #define DISPID_TABLECELL (DISPID_TEXTSITE+1000) #define DISPID_1D (DISPID_TEXTSITE+1000) #define DISPID_BODY (DISPID_TEXTSITE+1000) #define DISPID_INPUTTEXTBASE (DISPID_INPUT+1000) #define DISPID_INPUTTEXT (DISPID_INPUTTEXTBASE+1000) #define DISPID_TEXTAREA (DISPID_INPUTTEXT+1000) #define DISPID_MARQUEE (DISPID_TEXTAREA+1000) #define DISPID_RICHTEXT (DISPID_MARQUEE+1000) #define DISPID_BUTTON (DISPID_RICHTEXT+1000) #define DISPID_XOBJ_MIN 0x80010000 #define DISPID_XOBJ_MAX 0x8001FFFF #define DISPID_XOBJ_BASE DISPID_XOBJ_MIN #define DISPID_HTMLOBJECT (DISPID_XOBJ_BASE+500) #define DISPID_ELEMENT (DISPID_HTMLOBJECT+500) #define DISPID_SITE (DISPID_ELEMENT+1000) #define DISPID_OBJECT (DISPID_SITE+1000) #define DISPID_STYLE (DISPID_OBJECT+1000) #define DISPID_BASE_STYLE (DISPID_STYLE+500) #define DISPID_ATTRS (DISPID_BASE_STYLE+500) #define DISPID_EVENTS (DISPID_ATTRS+1000) #define DISPID_XOBJ_EXPANDO (DISPID_EVENTS+1000) #define DISPID_XOBJ_ORDINAL (DISPID_XOBJ_EXPANDO+1000) #define DISPID_RADIO (DISPID_CHECKBOX+1000) #define DISPID_FRAMESITE (DISPID_SITE+1000) #define DISPID_FRAME (DISPID_FRAMESITE+1000) #define DISPID_IFRAME (DISPID_FRAMESITE+1000) #define DISPID_WINDOW 1 #define DISPID_HISTORY 1 #define DISPID_LOCATION 1 #define DISPID_NAVIGATOR 1 #define STDPROPID_XOBJ_NAME (DISPID_XOBJ_BASE+0) #define STDPROPID_XOBJ_INDEX (DISPID_XOBJ_BASE+1) #define STDPROPID_XOBJ_BASEHREF (DISPID_XOBJ_BASE+2) #define STDPROPID_XOBJ_LEFT (DISPID_XOBJ_BASE+3) #define STDPROPID_XOBJ_TOP (DISPID_XOBJ_BASE+4) #define STDPROPID_XOBJ_WIDTH (DISPID_XOBJ_BASE+5) #define STDPROPID_XOBJ_HEIGHT (DISPID_XOBJ_BASE+6) #define STDPROPID_XOBJ_VISIBLE (DISPID_XOBJ_BASE+7) #define STDPROPID_XOBJ_PARENT (DISPID_XOBJ_BASE+8) #define STDPROPID_XOBJ_DRAGMODE (DISPID_XOBJ_BASE+9) #define STDPROPID_XOBJ_DRAGICON (DISPID_XOBJ_BASE+10) #define STDPROPID_XOBJ_TAG (DISPID_XOBJ_BASE+11) #define STDPROPID_XOBJ_TABSTOP (DISPID_XOBJ_BASE+14) #define STDPROPID_XOBJ_TABINDEX (DISPID_XOBJ_BASE+15) #define STDPROPID_XOBJ_HELPCONTEXTID (DISPID_XOBJ_BASE+50) #define STDPROPID_XOBJ_DEFAULT (DISPID_XOBJ_BASE+55) #define STDPROPID_XOBJ_CANCEL (DISPID_XOBJ_BASE+56) #define STDPROPID_XOBJ_LEFTNORUN (DISPID_XOBJ_BASE+57) #define STDPROPID_XOBJ_TOPNORUN (DISPID_XOBJ_BASE+58) #define STDPROPID_XOBJ_ALIGNPERSIST (DISPID_XOBJ_BASE+60) #define STDPROPID_XOBJ_LINKTIMEOUT (DISPID_XOBJ_BASE+61) #define STDPROPID_XOBJ_LINKTOPIC (DISPID_XOBJ_BASE+62) #define STDPROPID_XOBJ_LINKITEM (DISPID_XOBJ_BASE+63) #define STDPROPID_XOBJ_LINKMODE (DISPID_XOBJ_BASE+64) #define STDPROPID_XOBJ_DATACHANGED (DISPID_XOBJ_BASE+65) #define STDPROPID_XOBJ_DATAFIELD (DISPID_XOBJ_BASE+66) #define STDPROPID_XOBJ_DATASOURCE (DISPID_XOBJ_BASE+67) #define STDPROPID_XOBJ_WHATSTHISHELPID (DISPID_XOBJ_BASE+68) #define STDPROPID_XOBJ_CONTROLTIPTEXT (DISPID_XOBJ_BASE+69) #define STDPROPID_XOBJ_STATUSBARTEXT (DISPID_XOBJ_BASE+70) #define STDPROPID_XOBJ_APPLICATION (DISPID_XOBJ_BASE+71) #define STDPROPID_XOBJ_BLOCKALIGN (DISPID_XOBJ_BASE+72) #define STDPROPID_XOBJ_CONTROLALIGN (DISPID_XOBJ_BASE+73) #define STDPROPID_XOBJ_STYLE (DISPID_XOBJ_BASE+74) #define STDPROPID_XOBJ_COUNT (DISPID_XOBJ_BASE+75) #define STDPROPID_XOBJ_DISABLED (DISPID_XOBJ_BASE+76) #define STDPROPID_XOBJ_RIGHT (DISPID_XOBJ_BASE+77) #define STDPROPID_XOBJ_BOTTOM (DISPID_XOBJ_BASE+78) #define STDDISPID_XOBJ_ONBLUR (DISPID_XOBJ_BASE+0) #define STDDISPID_XOBJ_ONFOCUS (DISPID_XOBJ_BASE+1) #define STDDISPID_XOBJ_BEFOREUPDATE (DISPID_XOBJ_BASE+4) #define STDDISPID_XOBJ_AFTERUPDATE (DISPID_XOBJ_BASE+5) #define STDDISPID_XOBJ_ONROWEXIT (DISPID_XOBJ_BASE+6) #define STDDISPID_XOBJ_ONROWENTER (DISPID_XOBJ_BASE+7) #define STDDISPID_XOBJ_ONMOUSEOVER (DISPID_XOBJ_BASE+8) #define STDDISPID_XOBJ_ONMOUSEOUT (DISPID_XOBJ_BASE+9) #define STDDISPID_XOBJ_ONHELP (DISPID_XOBJ_BASE+10) #define STDDISPID_XOBJ_ONDRAGSTART (DISPID_XOBJ_BASE+11) #define STDDISPID_XOBJ_ONSELECTSTART (DISPID_XOBJ_BASE+12) #define STDDISPID_XOBJ_ERRORUPDATE (DISPID_XOBJ_BASE+13) #define STDDISPID_XOBJ_ONDATASETCHANGED (DISPID_XOBJ_BASE+14) #define STDDISPID_XOBJ_ONDATAAVAILABLE (DISPID_XOBJ_BASE+15) #define STDDISPID_XOBJ_ONDATASETCOMPLETE (DISPID_XOBJ_BASE+16) #define STDDISPID_XOBJ_ONFILTER (DISPID_XOBJ_BASE+17) #define STDDISPID_XOBJ_ONLOSECAPTURE (DISPID_XOBJ_BASE+18) #define STDDISPID_XOBJ_ONPROPERTYCHANGE (DISPID_XOBJ_BASE+19) #define STDDISPID_XOBJ_ONDRAG (DISPID_XOBJ_BASE+20) #define STDDISPID_XOBJ_ONDRAGEND (DISPID_XOBJ_BASE+21) #define STDDISPID_XOBJ_ONDRAGENTER (DISPID_XOBJ_BASE+22) #define STDDISPID_XOBJ_ONDRAGOVER (DISPID_XOBJ_BASE+23) #define STDDISPID_XOBJ_ONDRAGLEAVE (DISPID_XOBJ_BASE+24) #define STDDISPID_XOBJ_ONDROP (DISPID_XOBJ_BASE+25) #define STDDISPID_XOBJ_ONCUT (DISPID_XOBJ_BASE+26) #define STDDISPID_XOBJ_ONCOPY (DISPID_XOBJ_BASE+27) #define STDDISPID_XOBJ_ONPASTE (DISPID_XOBJ_BASE+28) #define STDDISPID_XOBJ_ONBEFORECUT (DISPID_XOBJ_BASE+29) #define STDDISPID_XOBJ_ONBEFORECOPY (DISPID_XOBJ_BASE+30) #define STDDISPID_XOBJ_ONBEFOREPASTE (DISPID_XOBJ_BASE+31) #define STDDISPID_XOBJ_ONROWSDELETE (DISPID_XOBJ_BASE+32) #define STDDISPID_XOBJ_ONROWSINSERTED (DISPID_XOBJ_BASE+33) #define STDDISPID_XOBJ_ONCELLCHANGE (DISPID_XOBJ_BASE+34) #define DISPID_A_FIRST DISPID_ATTRS #define DISPID_A_BACKGROUNDIMAGE (DISPID_A_FIRST+1) #define DISPID_A_COLOR (DISPID_A_FIRST+2) #define DISPID_A_TEXTTRANSFORM (DISPID_A_FIRST+4) #define DISPID_A_NOWRAP (DISPID_A_FIRST+5) #define DISPID_A_LINEHEIGHT (DISPID_A_FIRST+6) #define DISPID_A_TEXTINDENT (DISPID_A_FIRST+7) #define DISPID_A_LETTERSPACING (DISPID_A_FIRST+8) #define DISPID_A_LANG (DISPID_A_FIRST+9) #define DISPID_A_OVERFLOW (DISPID_A_FIRST+10) #define DISPID_A_PADDING (DISPID_A_FIRST+11) #define DISPID_A_PADDINGTOP (DISPID_A_FIRST+12) #define DISPID_A_PADDINGRIGHT (DISPID_A_FIRST+13) #define DISPID_A_PADDINGBOTTOM (DISPID_A_FIRST+14) #define DISPID_A_PADDINGLEFT (DISPID_A_FIRST+15) #define DISPID_A_CLEAR (DISPID_A_FIRST+16) #define DISPID_A_LISTTYPE (DISPID_A_FIRST+17) #define DISPID_A_FONTFACE (DISPID_A_FIRST+18) #define DISPID_A_FONTSIZE (DISPID_A_FIRST+19) #define DISPID_A_TEXTDECORATIONLINETHROUGH (DISPID_A_FIRST+20) #define DISPID_A_TEXTDECORATIONUNDERLINE (DISPID_A_FIRST+21) #define DISPID_A_TEXTDECORATIONBLINK (DISPID_A_FIRST+22) #define DISPID_A_TEXTDECORATIONNONE (DISPID_A_FIRST+23) #define DISPID_A_FONTSTYLE (DISPID_A_FIRST+24) #define DISPID_A_FONTVARIANT (DISPID_A_FIRST+25) #define DISPID_A_BASEFONT (DISPID_A_FIRST+26) #define DISPID_A_FONTWEIGHT (DISPID_A_FIRST+27) #define DISPID_A_TABLEBORDERCOLOR (DISPID_A_FIRST+28) #define DISPID_A_TABLEBORDERCOLORLIGHT (DISPID_A_FIRST+29) #define DISPID_A_TABLEBORDERCOLORDARK (DISPID_A_FIRST+30) #define DISPID_A_TABLEVALIGN (DISPID_A_FIRST+31) #define DISPID_A_BACKGROUND (DISPID_A_FIRST+32) #define DISPID_A_BACKGROUNDPOSX (DISPID_A_FIRST+33) #define DISPID_A_BACKGROUNDPOSY (DISPID_A_FIRST+34) #define DISPID_A_TEXTDECORATION (DISPID_A_FIRST+35) #define DISPID_A_MARGIN (DISPID_A_FIRST+36) #define DISPID_A_MARGINTOP (DISPID_A_FIRST+37) #define DISPID_A_MARGINRIGHT (DISPID_A_FIRST+38) #define DISPID_A_MARGINBOTTOM (DISPID_A_FIRST+39) #define DISPID_A_MARGINLEFT (DISPID_A_FIRST+40) #define DISPID_A_FONT (DISPID_A_FIRST+41) #define DISPID_A_FONTSIZEKEYWORD (DISPID_A_FIRST+42) #define DISPID_A_FONTSIZECOMBINE (DISPID_A_FIRST+43) #define DISPID_A_BACKGROUNDREPEAT (DISPID_A_FIRST+44) #define DISPID_A_BACKGROUNDATTACHMENT (DISPID_A_FIRST+45) #define DISPID_A_BACKGROUNDPOSITION (DISPID_A_FIRST+46) #define DISPID_A_WORDSPACING (DISPID_A_FIRST+47) #define DISPID_A_VERTICALALIGN (DISPID_A_FIRST+48) #define DISPID_A_BORDER (DISPID_A_FIRST+49) #define DISPID_A_BORDERTOP (DISPID_A_FIRST+50) #define DISPID_A_BORDERRIGHT (DISPID_A_FIRST+51) #define DISPID_A_BORDERBOTTOM (DISPID_A_FIRST+52) #define DISPID_A_BORDERLEFT (DISPID_A_FIRST+53) #define DISPID_A_BORDERCOLOR (DISPID_A_FIRST+54) #define DISPID_A_BORDERTOPCOLOR (DISPID_A_FIRST+55) #define DISPID_A_BORDERRIGHTCOLOR (DISPID_A_FIRST+56) #define DISPID_A_BORDERBOTTOMCOLOR (DISPID_A_FIRST+57) #define DISPID_A_BORDERLEFTCOLOR (DISPID_A_FIRST+58) #define DISPID_A_BORDERWIDTH (DISPID_A_FIRST+59) #define DISPID_A_BORDERTOPWIDTH (DISPID_A_FIRST+60) #define DISPID_A_BORDERRIGHTWIDTH (DISPID_A_FIRST+61) #define DISPID_A_BORDERBOTTOMWIDTH (DISPID_A_FIRST+62) #define DISPID_A_BORDERLEFTWIDTH (DISPID_A_FIRST+63) #define DISPID_A_BORDERSTYLE (DISPID_A_FIRST+64) #define DISPID_A_BORDERTOPSTYLE (DISPID_A_FIRST+65) #define DISPID_A_BORDERRIGHTSTYLE (DISPID_A_FIRST+66) #define DISPID_A_BORDERBOTTOMSTYLE (DISPID_A_FIRST+67) #define DISPID_A_BORDERLEFTSTYLE (DISPID_A_FIRST+68) #define DISPID_A_TEXTDECORATIONOVERLINE (DISPID_A_FIRST+69) #define DISPID_A_FLOAT (DISPID_A_FIRST+70) #define DISPID_A_DISPLAY (DISPID_A_FIRST+71) #define DISPID_A_LISTSTYLETYPE (DISPID_A_FIRST+72) #define DISPID_A_LISTSTYLEPOSITION (DISPID_A_FIRST+73) #define DISPID_A_LISTSTYLEIMAGE (DISPID_A_FIRST+74) #define DISPID_A_LISTSTYLE (DISPID_A_FIRST+75) #define DISPID_A_WHITESPACE (DISPID_A_FIRST+76) #define DISPID_A_PAGEBREAKBEFORE (DISPID_A_FIRST+77) #define DISPID_A_PAGEBREAKAFTER (DISPID_A_FIRST+78) #define DISPID_A_SCROLL (DISPID_A_FIRST+79) #define DISPID_A_VISIBILITY (DISPID_A_FIRST+80) #define DISPID_A_HIDDEN (DISPID_A_FIRST+81) #define DISPID_A_FILTER (DISPID_A_FIRST+82) #define DISPID_DEFAULTVALUE (DISPID_A_FIRST+83) #define DISPID_A_BORDERCOLLAPSE (DISPID_A_FIRST+84) #define DISPID_A_POSITION (DISPID_A_FIRST+90) #define DISPID_A_ZINDEX (DISPID_A_FIRST+91) #define DISPID_A_CLIP (DISPID_A_FIRST+92) #define DISPID_A_CLIPRECTTOP (DISPID_A_FIRST+93) #define DISPID_A_CLIPRECTRIGHT (DISPID_A_FIRST+94) #define DISPID_A_CLIPRECTBOTTOM (DISPID_A_FIRST+95) #define DISPID_A_CLIPRECTLEFT (DISPID_A_FIRST+96) #define DISPID_A_FONTFACESRC (DISPID_A_FIRST+97) #define DISPID_A_TABLELAYOUT (DISPID_A_FIRST+98) #define DISPID_A_STYLETEXT (DISPID_A_FIRST+99) #define DISPID_A_LANGUAGE (DISPID_A_FIRST+100) #define DISPID_A_VALUE (DISPID_A_FIRST+101) #define DISPID_A_CURSOR (DISPID_A_FIRST+102) #define DISPID_A_EVENTSINK (DISPID_A_FIRST+103) #define DISPID_A_PROPNOTIFYSINK (DISPID_A_FIRST+104) #define DISPID_A_ROWSETNOTIFYSINK (DISPID_A_FIRST+105) #define DISPID_INTERNAL_INLINESTYLEAA (DISPID_A_FIRST+106) #define DISPID_INTERNAL_CSTYLEPTRCACHE (DISPID_A_FIRST+107) #define DISPID_INTERNAL_CRUNTIMESTYLEPTRCACHE (DISPID_A_FIRST+108) #define DISPID_INTERNAL_INVOKECONTEXT (DISPID_A_FIRST+109) #define DISPID_A_BGURLIMGCTXCACHEINDEX (DISPID_A_FIRST+110) #define DISPID_A_LIURLIMGCTXCACHEINDEX (DISPID_A_FIRST+111) #define DISPID_A_ROWSETASYNCHNOTIFYSINK (DISPID_A_FIRST+112) #define DISPID_INTERNAL_FILTERPTRCACHE (DISPID_A_FIRST+113) #define DISPID_A_ROWPOSITIONCHANGESINK (DISPID_A_FIRST+114) #define DISPID_A_BEHAVIOR (DISPID_A_FIRST+115) #define DISPID_A_READYSTATE (DISPID_A_FIRST+116) #define DISPID_A_DIR (DISPID_A_FIRST+117) #define DISPID_A_UNICODEBIDI (DISPID_A_FIRST+118) #define DISPID_A_DIRECTION (DISPID_A_FIRST+119) #define DISPID_A_IMEMODE (DISPID_A_FIRST+120) #define DISPID_A_RUBYALIGN (DISPID_A_FIRST+121) #define DISPID_A_RUBYPOSITION (DISPID_A_FIRST+122) #define DISPID_A_RUBYOVERHANG (DISPID_A_FIRST+123) #define DISPID_INTERNAL_ONBEHAVIOR_CONTENTREADY (DISPID_A_FIRST+124) #define DISPID_INTERNAL_ONBEHAVIOR_DOCUMENTREADY (DISPID_A_FIRST+125) #define DISPID_INTERNAL_CDOMCHILDRENPTRCACHE (DISPID_A_FIRST+126) #define DISPID_A_LAYOUTGRIDCHAR (DISPID_A_FIRST+127) #define DISPID_A_LAYOUTGRIDLINE (DISPID_A_FIRST+128) #define DISPID_A_LAYOUTGRIDMODE (DISPID_A_FIRST+129) #define DISPID_A_LAYOUTGRIDTYPE (DISPID_A_FIRST+130) #define DISPID_A_LAYOUTGRID (DISPID_A_FIRST+131) #define DISPID_A_TEXTAUTOSPACE (DISPID_A_FIRST+132) #define DISPID_A_LINEBREAK (DISPID_A_FIRST+133) #define DISPID_A_WORDBREAK (DISPID_A_FIRST+134) #define DISPID_A_TEXTJUSTIFY (DISPID_A_FIRST+135) #define DISPID_A_TEXTJUSTIFYTRIM (DISPID_A_FIRST+136) #define DISPID_A_TEXTKASHIDA (DISPID_A_FIRST+137) #define DISPID_A_OVERFLOWX (DISPID_A_FIRST+139) #define DISPID_A_OVERFLOWY (DISPID_A_FIRST+140) #define DISPID_A_HTCDISPATCHITEM_VALUE (DISPID_A_FIRST+141) #define DISPID_A_DOCFRAGMENT (DISPID_A_FIRST+142) #define DISPID_A_HTCDD_ELEMENT (DISPID_A_FIRST+143) #define DISPID_A_HTCDD_CREATEEVENTOBJECT (DISPID_A_FIRST+144) #define DISPID_A_URNATOM (DISPID_A_FIRST+145) #define DISPID_A_UNIQUEPEERNUMBER (DISPID_A_FIRST+146) #define DISPID_A_ACCELERATOR (DISPID_A_FIRST+147) #define DISPID_INTERNAL_ONBEHAVIOR_APPLYSTYLE (DISPID_A_FIRST+148) #define DISPID_INTERNAL_RUNTIMESTYLEAA (DISPID_A_FIRST+149) #define DISPID_A_HTCDISPATCHITEM_VALUE_SCRIPTSONLY (DISPID_A_FIRST+150) #define DISPID_A_EXTENDEDTAGDESC (DISPID_A_FIRST+151) #define DISPID_A_ROTATE (DISPID_A_FIRST+152) #define DISPID_A_ZOOM (DISPID_A_FIRST+153) #define DISPID_A_HTCDD_PROTECTEDELEMENT (DISPID_A_FIRST+154) #define DISPID_A_LAYOUTFLOW (DISPID_A_FIRST+155) #define DISPID_A_HTCDD_ISMARKUPSHARED (DISPID_A_FIRST+157) #define DISPID_A_WORDWRAP (DISPID_A_FIRST+158) #define DISPID_A_TEXTUNDERLINEPOSITION (DISPID_A_FIRST+159) #define DISPID_A_HASLAYOUT (DISPID_A_FIRST+160) #define DISPID_A_MEDIA (DISPID_A_FIRST+161) #define DISPID_A_EDITABLE (DISPID_A_FIRST+162) #define DISPID_A_HIDEFOCUS (DISPID_A_FIRST+163) #define DISPID_INTERNAL_LAYOUTRECTREGISTRYPTRCACHE (DISPID_A_FIRST+164) #define DISPID_A_HTCDD_DEFAULTS (DISPID_A_FIRST+165) #define DISPID_A_TEXTLINETHROUGHSTYLE (DISPID_A_FIRST+166) #define DISPID_A_TEXTUNDERLINESTYLE (DISPID_A_FIRST+167) #define DISPID_A_TEXTEFFECT (DISPID_A_FIRST+168) #define DISPID_A_TEXTBACKGROUNDCOLOR (DISPID_A_FIRST+169) #define DISPID_A_RENDERINGPRIORITY (DISPID_A_FIRST+170) #define DISPID_INTERNAL_DWNPOSTPTRCACHE (DISPID_A_FIRST+171) #define DISPID_INTERNAL_CODEPAGESETTINGSPTRCACHE (DISPID_A_FIRST+172) #define DISPID_INTERNAL_DWNDOCPTRCACHE (DISPID_A_FIRST+173) #define DISPID_INTERNAL_DATABINDTASKPTRCACHE (DISPID_A_FIRST+174) #define DISPID_INTERNAL_URLLOCATIONCACHE (DISPID_A_FIRST+175) #define DISPID_INTERNAL_ARYELEMENTRELEASENOTIFYPTRCACHE (DISPID_A_FIRST+176) #define DISPID_INTERNAL_PEERFACTORYURLMAPPTRCACHE (DISPID_A_FIRST+177) #define DISPID_INTERNAL_STMDIRTYPTRCACHE (DISPID_A_FIRST+178) #define DISPID_INTERNAL_COMPUTEFORMATSTATECACHE (DISPID_A_FIRST+179) #define DISPID_A_SCROLLBARBASECOLOR (DISPID_A_FIRST+180) #define DISPID_A_SCROLLBARFACECOLOR (DISPID_A_FIRST+181) #define DISPID_A_SCROLLBAR3DLIGHTCOLOR (DISPID_A_FIRST+182) #define DISPID_A_SCROLLBARSHADOWCOLOR (DISPID_A_FIRST+183) #define DISPID_A_SCROLLBARHIGHLIGHTCOLOR (DISPID_A_FIRST+184) #define DISPID_A_SCROLLBARDARKSHADOWCOLOR (DISPID_A_FIRST+185) #define DISPID_A_SCROLLBARARROWCOLOR (DISPID_A_FIRST+186) #define DISPID_INTERNAL_ONBEHAVIOR_CONTENTSAVE (DISPID_A_FIRST+187) #define DISPID_A_DEFAULTTEXTSELECTION (DISPID_A_FIRST+188) #define DISPID_A_TEXTDECORATIONCOLOR (DISPID_A_FIRST+189) #define DISPID_A_TEXTCOLOR (DISPID_A_FIRST+190) #define DISPID_A_STYLETEXTDECORATION (DISPID_A_FIRST+191) #define DISPID_A_WRITINGMODE (DISPID_A_FIRST+192) #define DISPID_INTERNAL_MEDIA_REFERENCE (DISPID_A_FIRST+193) #define DISPID_INTERNAL_GENERICCOMPLUSREF (DISPID_A_FIRST+194) #define DISPID_INTERNAL_FOCUSITEMS (DISPID_A_FIRST+195) #define DISPID_A_SCROLLBARTRACKCOLOR (DISPID_A_FIRST+196) #define DISPID_INTERNAL_DWNHEADERCACHE (DISPID_A_FIRST+197) #define DISPID_A_FROZEN (DISPID_A_FIRST+198) #define DISPID_A_VIEWINHERITSTYLE (DISPID_A_FIRST+199) #define DISPID_INTERNAL_FRAMESCOLLECTION (DISPID_A_FIRST+200) #define DISPID_A_BGURLIMGCTXCACHEINDEX_FLINE (DISPID_A_FIRST+201) #define DISPID_A_BGURLIMGCTXCACHEINDEX_FLETTER (DISPID_A_FIRST+202) #define DISPID_A_TEXTALIGNLAST (DISPID_A_FIRST+203) #define DISPID_A_TEXTKASHIDASPACE (DISPID_A_FIRST+204) #define DISPID_INTERNAL_FONTHISTORYINDEX (DISPID_A_FIRST+205) #define DISPID_A_ALLOWTRANSPARENCY (DISPID_A_FIRST+206) #define DISPID_INTERNAL_URLSEARCHCACHE (DISPID_A_FIRST+207) #define DISPID_A_ISBLOCK (DISPID_A_FIRST+208) #define DISPID_A_TEXTOVERFLOW (DISPID_A_FIRST+209) #define DISPID_INTERNAL_CATTRIBUTECOLLPTRCACHE (DISPID_A_FIRST+210) #define DISPID_A_MINHEIGHT (DISPID_A_FIRST+211) #define DISPID_INTERNAL_INVOKECONTEXTDOCUMENT (DISPID_A_FIRST+212) #define DISPID_A_INTERPOLATION (DISPID_A_FIRST+213) #define DISPID_A_MAXHEIGHT (DISPID_A_FIRST+214) #define DISPID_A_MINWIDTH (DISPID_A_FIRST+215) #define DISPID_A_MAXWIDTH (DISPID_A_FIRST+216) #define DISPID_INTERNAL_ARYOBJECTRELEASECLEANUPPTRCACHE (DISPID_A_FIRST+217) #define DISPID_A_CONTENT (DISPID_A_FIRST+218) #define DISPID_A_CAPTIONSIDE (DISPID_A_FIRST+219) #define DISPID_A_COUNTERINCREMENT (DISPID_A_FIRST+220) #define DISPID_A_COUNTERRESET (DISPID_A_FIRST+221) #define DISPID_A_OUTLINE (DISPID_A_FIRST+222) #define DISPID_A_OUTLINEWIDTH (DISPID_A_FIRST+223) #define DISPID_A_OUTLINESTYLE (DISPID_A_FIRST+224) #define DISPID_A_OUTLINECOLOR (DISPID_A_FIRST+225) #define DISPID_A_BOXSIZING (DISPID_A_FIRST+226) #define DISPID_A_BORDERSPACING (DISPID_A_FIRST+227) #define DISPID_A_ORPHANS (DISPID_A_FIRST+228) #define DISPID_A_WIDOWS (DISPID_A_FIRST+229) #define DISPID_A_PAGEBREAKINSIDE (DISPID_A_FIRST+230) #define DISPID_A_MS_BEHAVIOR (DISPID_A_FIRST+231) #define DISPID_A_MS_SCROLLBARBASECOLOR (DISPID_A_FIRST+232) #define DISPID_A_MS_SCROLLBARFACECOLOR (DISPID_A_FIRST+233) #define DISPID_A_MS_SCROLLBAR3DLIGHTCOLOR (DISPID_A_FIRST+234) #define DISPID_A_MS_SCROLLBARSHADOWCOLOR (DISPID_A_FIRST+235) #define DISPID_A_MS_SCROLLBARHIGHLIGHTCOLOR (DISPID_A_FIRST+236) #define DISPID_A_MS_SCROLLBARDARKSHADOWCOLOR (DISPID_A_FIRST+237) #define DISPID_A_MS_SCROLLBARARROWCOLOR (DISPID_A_FIRST+238) #define DISPID_A_MS_SCROLLBARTRACKCOLOR (DISPID_A_FIRST+239) #define DISPID_A_MS_TEXTALIGNLAST (DISPID_A_FIRST+240) #define DISPID_A_MS_TEXTOVERFLOW (DISPID_A_FIRST+241) #define DISPID_A_MS_TEXTUNDERLINEPOSITION (DISPID_A_FIRST+242) #define DISPID_A_MS_WRITINGMODE (DISPID_A_FIRST+243) #define DISPID_A_MS_IMEMODE (DISPID_A_FIRST+244) #define DISPID_A_MS_BACKGROUNDPOSX (DISPID_A_FIRST+245) #define DISPID_A_MS_BACKGROUNDPOSY (DISPID_A_FIRST+246) #define DISPID_A_MS_ACCELERATOR (DISPID_A_FIRST+247) #define DISPID_A_MS_LAYOUTFLOW (DISPID_A_FIRST+248) #define DISPID_A_MS_ZOOM (DISPID_A_FIRST+249) #define DISPID_A_EMPTYCELLS (DISPID_A_FIRST+250) #define DISPID_A_MS_BLOCKPROGRESSION (DISPID_A_FIRST+251) #define DISPID_A_QUOTES (DISPID_A_FIRST+252) #define DISPID_INTERNAL_BGURLIMGCTXCACHEINDEX_GCBEFORE (DISPID_A_FIRST+253) #define DISPID_INTERNAL_BGURLIMGCTXCACHEINDEX_GCAFTER (DISPID_A_FIRST+254) #define DISPID_INTERNAL_BGURLIMGCTXCACHEINDEX_URLBEFORE (DISPID_A_FIRST+255) #define DISPID_INTERNAL_BGURLIMGCTXCACHEINDEX_URLAFTER (DISPID_A_FIRST+256) #define DISPID_AAHEADER (DISPID_A_FIRST+257) #define DISPID_INTERNAL_GETTERSETTERCOLLECTION (DISPID_A_FIRST+258) #define DISPID_A_MS_LAYOUTGRIDCHAR (DISPID_A_FIRST+259) #define DISPID_A_MS_LAYOUTGRIDLINE (DISPID_A_FIRST+260) #define DISPID_A_MS_LAYOUTGRIDMODE (DISPID_A_FIRST+261) #define DISPID_A_MS_LAYOUTGRIDTYPE (DISPID_A_FIRST+262) #define DISPID_A_MS_LAYOUTGRID (DISPID_A_FIRST+263) #define DISPID_A_MS_LINEBREAK (DISPID_A_FIRST+264) #define DISPID_A_MS_FILTER (DISPID_A_FIRST+265) #define DISPID_A_MS_OVERFLOWX (DISPID_A_FIRST+266) #define DISPID_A_MS_OVERFLOWY (DISPID_A_FIRST+267) #define DISPID_A_MS_TEXTAUTOSPACE (DISPID_A_FIRST+268) #define DISPID_A_MS_TEXTJUSTIFY (DISPID_A_FIRST+269) #define DISPID_A_MS_TEXTKASHIDASPACE (DISPID_A_FIRST+270) #define DISPID_A_MS_WORDBREAK (DISPID_A_FIRST+271) #define DISPID_A_MS_WORDWRAP (DISPID_A_FIRST+272) #define DISPID_INTERNAL_URIBEFOREREDIRECT (DISPID_A_FIRST+273) #define DISPID_A_ALIGNMENTBASELINE (DISPID_A_FIRST+278) #define DISPID_A_BASELINESHIFT (DISPID_A_FIRST+279) #define DISPID_A_DOMINANTBASELINE (DISPID_A_FIRST+280) #define DISPID_A_FONTSIZEADJUST (DISPID_A_FIRST+281) #define DISPID_A_FONTSTRETCH (DISPID_A_FIRST+282) #define DISPID_A_OPACITY (DISPID_A_FIRST+283) #define DISPID_A_CLIPPATH (DISPID_A_FIRST+284) #define DISPID_A_CLIPRULE (DISPID_A_FIRST+285) #define DISPID_A_FILL (DISPID_A_FIRST+286) #define DISPID_A_FILLOPACITY (DISPID_A_FIRST+287) #define DISPID_A_FILLRULE (DISPID_A_FIRST+288) #define DISPID_A_KERNING (DISPID_A_FIRST+289) #define DISPID_A_MARKER (DISPID_A_FIRST+290) #define DISPID_A_MARKEREND (DISPID_A_FIRST+291) #define DISPID_A_MARKERMID (DISPID_A_FIRST+292) #define DISPID_A_MARKERSTART (DISPID_A_FIRST+293) #define DISPID_A_MASK (DISPID_A_FIRST+294) #define DISPID_A_POINTEREVENTS (DISPID_A_FIRST+295) #define DISPID_A_STOPCOLOR (DISPID_A_FIRST+296) #define DISPID_A_STOPOPACITY (DISPID_A_FIRST+297) #define DISPID_A_STROKE (DISPID_A_FIRST+298) #define DISPID_A_STROKEDASHARRAY (DISPID_A_FIRST+299) #define DISPID_A_STROKEDASHOFFSET (DISPID_A_FIRST+300) #define DISPID_A_STROKELINECAP (DISPID_A_FIRST+301) #define DISPID_A_STROKELINEJOIN (DISPID_A_FIRST+302) #define DISPID_A_STROKEMITERLIMIT (DISPID_A_FIRST+303) #define DISPID_A_STROKEOPACITY (DISPID_A_FIRST+304) #define DISPID_A_STROKEWIDTH (DISPID_A_FIRST+305) #define DISPID_A_TEXTANCHOR (DISPID_A_FIRST+306) #define DISPID_A_GLYPHORIENTATIONHORIZONTAL (DISPID_A_FIRST+307) #define DISPID_A_GLYPHORIENTATIONVERTICAL (DISPID_A_FIRST+308) #define DISPID_A_CSSFLOAT (DISPID_A_FIRST+309) #define DISPID_A_BORDERRADIUS (DISPID_A_FIRST+310) #define DISPID_A_BORDERTOPLEFTRADIUS (DISPID_A_FIRST+311) #define DISPID_A_BORDERTOPRIGHTRADIUS (DISPID_A_FIRST+312) #define DISPID_A_BORDERBOTTOMRIGHTRADIUS (DISPID_A_FIRST+313) #define DISPID_A_BORDERBOTTOMLEFTRADIUS (DISPID_A_FIRST+314) #define DISPID_A_MS_TRANSFORM (DISPID_A_FIRST+315) #define DISPID_A_IE9_BACKGROUNDCLIP (DISPID_A_FIRST+316) #define DISPID_A_IE9_BACKGROUNDORIGIN (DISPID_A_FIRST+317) #define DISPID_A_IE9_BACKGROUNDSIZE (DISPID_A_FIRST+318) #define DISPID_A_IE9_BOXSHADOW (DISPID_A_FIRST+319) #define DISPID_A_MS_TRANSFORMORIGIN (DISPID_A_FIRST+325) #define DISPID_A_MS_TRANSFORMORIGINX (DISPID_A_FIRST+326) #define DISPID_A_MS_TRANSFORMORIGINY (DISPID_A_FIRST+327) #define DISPID_A_MS_TEXTSIZEADJUST (DISPID_A_FIRST+328) #define DISPID_A_MS_TRANSITIONPROPERTY (DISPID_A_FIRST+330) #define DISPID_A_MS_TRANSITIONDURATION (DISPID_A_FIRST+331) #define DISPID_A_MS_TRANSITIONTIMINGFUNCTION (DISPID_A_FIRST+332) #define DISPID_A_MS_TRANSITIONDELAY (DISPID_A_FIRST+333) #define DISPID_A_MS_TRANSITION (DISPID_A_FIRST+334) #define DISPID_A_COLUMNS (DISPID_A_FIRST+335) #define DISPID_A_COLUMNCOUNT (DISPID_A_FIRST+336) #define DISPID_A_COLUMNWIDTH (DISPID_A_FIRST+337) #define DISPID_A_COLUMNGAP (DISPID_A_FIRST+338) #define DISPID_A_COLUMNFILL (DISPID_A_FIRST+339) #define DISPID_A_COLUMNSPAN (DISPID_A_FIRST+340) #define DISPID_A_COLUMNRULE (DISPID_A_FIRST+341) #define DISPID_A_COLUMNRULESTYLE (DISPID_A_FIRST+342) #define DISPID_A_COLUMNRULEWIDTH (DISPID_A_FIRST+343) #define DISPID_A_COLUMNRULECOLOR (DISPID_A_FIRST+344) #define DISPID_A_BREAKBEFORE (DISPID_A_FIRST+345) #define DISPID_A_BREAKAFTER (DISPID_A_FIRST+346) #define DISPID_A_BREAKINSIDE (DISPID_A_FIRST+347) #define DISPID_A_MS_TRANSFORMORIGINZ (DISPID_A_FIRST+348) #define DISPID_A_MS_PERSPECTIVE (DISPID_A_FIRST+349) #define DISPID_A_MS_PERSPECTIVEORIGIN (DISPID_A_FIRST+350) #define DISPID_A_MS_PERSPECTIVEORIGINX (DISPID_A_FIRST+351) #define DISPID_A_MS_PERSPECTIVEORIGINY (DISPID_A_FIRST+352) #define DISPID_A_MS_TRANSFORMSTYLE (DISPID_A_FIRST+353) #define DISPID_A_MS_BACKFACEVISIBILITY (DISPID_A_FIRST+354) #define DISPID_A_MS_SCROLLCHAINING (DISPID_A_FIRST+355) #define DISPID_A_MS_CONTENTZOOMING (DISPID_A_FIRST+356) #define DISPID_A_MS_CONTENTZOOMSNAPTYPE (DISPID_A_FIRST+357) #define DISPID_A_MS_SCROLLRAILS (DISPID_A_FIRST+358) #define DISPID_A_MS_CONTENTZOOMCHAINING (DISPID_A_FIRST+359) #define DISPID_A_MS_SCROLLSNAPTYPE (DISPID_A_FIRST+360) #define DISPID_A_MS_CONTENTZOOMLIMIT (DISPID_A_FIRST+361) #define DISPID_A_MS_CONTENTZOOMSNAP (DISPID_A_FIRST+362) #define DISPID_A_MS_CONTENTZOOMSNAPPOINTS (DISPID_A_FIRST+363) #define DISPID_A_MS_CONTENTZOOMFACTOR (DISPID_A_FIRST+364) #define DISPID_A_MS_CONTENTZOOMLIMITMIN (DISPID_A_FIRST+365) #define DISPID_A_MS_CONTENTZOOMLIMITMAX (DISPID_A_FIRST+366) #define DISPID_A_MS_SCROLLSNAPX (DISPID_A_FIRST+367) #define DISPID_A_MS_SCROLLSNAPY (DISPID_A_FIRST+368) #define DISPID_A_MS_SCROLLSNAPPOINTSX (DISPID_A_FIRST+369) #define DISPID_A_MS_SCROLLSNAPPOINTSY (DISPID_A_FIRST+370) #define DISPID_A_SPELLCHECK (DISPID_A_FIRST+371) #define DISPID_A_MS_GRIDCOLUMN (DISPID_A_FIRST+372) #define DISPID_A_MS_GRIDCOLUMNALIGN (DISPID_A_FIRST+373) #define DISPID_A_MS_GRIDCOLUMNS (DISPID_A_FIRST+374) #define DISPID_A_MS_GRIDCOLUMNSPAN (DISPID_A_FIRST+375) #define DISPID_A_MS_GRIDROW (DISPID_A_FIRST+377) #define DISPID_A_MS_GRIDROWALIGN (DISPID_A_FIRST+378) #define DISPID_A_MS_GRIDROWS (DISPID_A_FIRST+379) #define DISPID_A_MS_GRIDROWSPAN (DISPID_A_FIRST+380) #define DISPID_A_MS_ANIMATIONNAME (DISPID_A_FIRST+381) #define DISPID_A_MS_ANIMATIONDURATION (DISPID_A_FIRST+382) #define DISPID_A_MS_ANIMATIONTIMINGFUNCTION (DISPID_A_FIRST+383) #define DISPID_A_MS_ANIMATIONDELAY (DISPID_A_FIRST+384) #define DISPID_A_MS_ANIMATIONDIRECTION (DISPID_A_FIRST+385) #define DISPID_A_MS_ANIMATIONPLAYSTATE (DISPID_A_FIRST+386) #define DISPID_A_MS_ANIMATIONITERATIONCOUNT (DISPID_A_FIRST+387) #define DISPID_A_MS_ANIMATION (DISPID_A_FIRST+388) #define DISPID_A_MS_ANIMATIONFILLMODE (DISPID_A_FIRST+389) #define DISPID_A_FLOODCOLOR (DISPID_A_FIRST+390) #define DISPID_A_FLOODOPACITY (DISPID_A_FIRST+391) #define DISPID_A_COLORINTERPOLATIONFILTERS (DISPID_A_FIRST+392) #define DISPID_A_LIGHTINGCOLOR (DISPID_A_FIRST+393) #define DISPID_A_MS_SCROLLLIMITXMIN (DISPID_A_FIRST+394) #define DISPID_A_MS_SCROLLLIMITYMIN (DISPID_A_FIRST+395) #define DISPID_A_MS_SCROLLLIMITXMAX (DISPID_A_FIRST+396) #define DISPID_A_MS_SCROLLLIMITYMAX (DISPID_A_FIRST+397) #define DISPID_A_MS_SCROLLLIMIT (DISPID_A_FIRST+398) #define DISPID_A_MS_OVERFLOWSTYLE (DISPID_A_FIRST+399) #define DISPID_A_TEXTSHADOW (DISPID_A_FIRST+400) #define DISPID_A_MS_WRAPTHROUGH (DISPID_A_FIRST+401) #define DISPID_A_MS_FLOWFROM (DISPID_A_FIRST+402) #define DISPID_A_MS_FLOWINTO (DISPID_A_FIRST+403) #define DISPID_A_MS_HYPHENS (DISPID_A_FIRST+404) #define DISPID_A_MS_HYPHENATE_LIMIT_ZONE (DISPID_A_FIRST+405) #define DISPID_A_MS_HYPHENATE_LIMIT_CHARS (DISPID_A_FIRST+406) #define DISPID_A_MS_HYPHENATE_LIMIT_LINES (DISPID_A_FIRST+407) #define DISPID_A_DRAGGABLE (DISPID_A_FIRST+408) #define DISPID_A_MS_HIGHCONTRASTADJUST (DISPID_A_FIRST+409) #define DISPID_A_ENABLEBACKGROUND (DISPID_A_FIRST+410) #define DISPID_A_MS_WRAPMARGIN (DISPID_A_FIRST+411) #define DISPID_A_MS_WRAPFLOW (DISPID_A_FIRST+413) #define DISPID_A_MS_FONTFEATURESETTINGS (DISPID_A_FIRST+414) #define DISPID_A_MS_USERSELECT (DISPID_A_FIRST+415) #define DISPID_A_MS_TOUCHACTION (DISPID_A_FIRST+416) #define DISPID_A_CLASSLIST (DISPID_A_FIRST+417) #define DISPID_A_MS_SCROLLTRANSLATION (DISPID_A_FIRST+418) #define DISPID_A_MS_FLEX (DISPID_A_FIRST+419) #define DISPID_A_MS_FLEXPOSITIVE (DISPID_A_FIRST+420) #define DISPID_A_MS_FLEXNEGATIVE (DISPID_A_FIRST+421) #define DISPID_A_MS_FLEXPREFERREDSIZE (DISPID_A_FIRST+422) #define DISPID_A_MS_FLEXFLOW (DISPID_A_FIRST+423) #define DISPID_A_MS_FLEXDIRECTION (DISPID_A_FIRST+424) #define DISPID_A_MS_FLEXWRAP (DISPID_A_FIRST+425) #define DISPID_A_MS_FLEXALIGN (DISPID_A_FIRST+426) #define DISPID_A_MS_FLEXITEMALIGN (DISPID_A_FIRST+427) #define DISPID_A_MS_FLEXPACK (DISPID_A_FIRST+428) #define DISPID_A_MS_FLEXLINEPACK (DISPID_A_FIRST+429) #define DISPID_A_MS_FLEXORDER (DISPID_A_FIRST+430) #define DISPID_A_TRANSFORM (DISPID_A_FIRST+431) #define DISPID_A_TRANSFORMORIGIN (DISPID_A_FIRST+432) #define DISPID_A_TRANSITIONPROPERTY (DISPID_A_FIRST+433) #define DISPID_A_TRANSITIONDURATION (DISPID_A_FIRST+434) #define DISPID_A_TRANSITIONTIMINGFUNCTION (DISPID_A_FIRST+435) #define DISPID_A_TRANSITIONDELAY (DISPID_A_FIRST+436) #define DISPID_A_TRANSITION (DISPID_A_FIRST+437) #define DISPID_A_PERSPECTIVE (DISPID_A_FIRST+438) #define DISPID_A_PERSPECTIVEORIGIN (DISPID_A_FIRST+439) #define DISPID_A_TRANSFORMSTYLE (DISPID_A_FIRST+440) #define DISPID_A_BACKFACEVISIBILITY (DISPID_A_FIRST+441) #define DISPID_A_ANIMATIONNAME (DISPID_A_FIRST+442) #define DISPID_A_ANIMATIONDURATION (DISPID_A_FIRST+443) #define DISPID_A_ANIMATIONTIMINGFUNCTION (DISPID_A_FIRST+444) #define DISPID_A_ANIMATIONDELAY (DISPID_A_FIRST+445) #define DISPID_A_ANIMATIONDIRECTION (DISPID_A_FIRST+446) #define DISPID_A_ANIMATIONPLAYSTATE (DISPID_A_FIRST+447) #define DISPID_A_ANIMATIONITERATIONCOUNT (DISPID_A_FIRST+448) #define DISPID_A_ANIMATION (DISPID_A_FIRST+449) #define DISPID_A_ANIMATIONFILLMODE (DISPID_A_FIRST+450) #define DISPID_A_FONTFEATURESETTINGS (DISPID_A_FIRST+451) #define DISPID_A_TRANSFORMORIGINX (DISPID_A_FIRST+452) #define DISPID_A_TRANSFORMORIGINY (DISPID_A_FIRST+453) #define DISPID_A_TRANSFORMORIGINZ (DISPID_A_FIRST+454) #define DISPID_A_PERSPECTIVEORIGINX (DISPID_A_FIRST+456) #define DISPID_A_PERSPECTIVEORIGINY (DISPID_A_FIRST+457) #define DISPID_A_MS_TOUCHSELECT (DISPID_A_FIRST+458) #define DISPID_WINDOWOBJECT (-5500) #define DISPID_LOCATIONOBJECT (-5506) #define DISPID_HISTORYOBJECT (-5507) #define DISPID_NAVIGATOROBJECT (-5508) #define DISPID_SECURITYCTX (-5511) #define DISPID_AMBIENT_DLCONTROL (-5512) #define DISPID_AMBIENT_USERAGENT (-5513) #define DISPID_SECURITYDOMAIN (-5514) #define DLCTL_DLIMAGES 0x00000010 #define DLCTL_VIDEOS 0x00000020 #define DLCTL_BGSOUNDS 0x00000040 #define DLCTL_NO_SCRIPTS 0x00000080 #define DLCTL_NO_JAVA 0x00000100 #define DLCTL_NO_RUNACTIVEXCTLS 0x00000200 #define DLCTL_NO_DLACTIVEXCTLS 0x00000400 #define DLCTL_DOWNLOADONLY 0x00000800 #define DLCTL_NO_FRAMEDOWNLOAD 0x00001000 #define DLCTL_RESYNCHRONIZE 0x00002000 #define DLCTL_PRAGMA_NO_CACHE 0x00004000 #define DLCTL_FORCEOFFLINE 0x10000000 #define DLCTL_NO_CLIENTPULL 0x20000000 #define DLCTL_SILENT 0x40000000 #define DLCTL_OFFLINEIFNOTCONNECTED 0x80000000 #define DLCTL_OFFLINE DLCTL_OFFLINEIFNOTCONNECTED /* events */ #define DISPID_EVPROP_ONMOUSEOVER (DISPID_EVENTS+0) #define DISPID_EVPROP_ONMOUSEOUT (DISPID_EVENTS+1) #define DISPID_EVPROP_ONMOUSEDOWN (DISPID_EVENTS+2) #define DISPID_EVPROP_ONMOUSEUP (DISPID_EVENTS+3) #define DISPID_EVPROP_ONMOUSEMOVE (DISPID_EVENTS+4) #define DISPID_EVPROP_ONKEYDOWN (DISPID_EVENTS+5) #define DISPID_EVPROP_ONKEYUP (DISPID_EVENTS+6) #define DISPID_EVPROP_ONKEYPRESS (DISPID_EVENTS+7) #define DISPID_EVPROP_ONCLICK (DISPID_EVENTS+8) #define DISPID_EVPROP_ONDBLCLICK (DISPID_EVENTS+9) #define DISPID_EVPROP_ONSELECT (DISPID_EVENTS+10) #define DISPID_EVPROP_ONSUBMIT (DISPID_EVENTS+11) #define DISPID_EVPROP_ONRESET (DISPID_EVENTS+12) #define DISPID_EVPROP_ONHELP (DISPID_EVENTS+13) #define DISPID_EVPROP_ONFOCUS (DISPID_EVENTS+14) #define DISPID_EVPROP_ONBLUR (DISPID_EVENTS+15) #define DISPID_EVPROP_ONROWEXIT (DISPID_EVENTS+18) #define DISPID_EVPROP_ONROWENTER (DISPID_EVENTS+19) #define DISPID_EVPROP_ONBOUNCE (DISPID_EVENTS+20) #define DISPID_EVPROP_ONBEFOREUPDATE (DISPID_EVENTS+21) #define DISPID_EVPROP_ONAFTERUPDATE (DISPID_EVENTS+22) #define DISPID_EVPROP_ONBEFOREDRAGOVER (DISPID_EVENTS+23) #define DISPID_EVPROP_ONBEFOREDROPORPASTE (DISPID_EVENTS+24) #define DISPID_EVPROP_ONREADYSTATECHANGE (DISPID_EVENTS+25) #define DISPID_EVPROP_ONFINISH (DISPID_EVENTS+26) #define DISPID_EVPROP_ONSTART (DISPID_EVENTS+27) #define DISPID_EVPROP_ONABORT (DISPID_EVENTS+28) #define DISPID_EVPROP_ONERROR (DISPID_EVENTS+29) #define DISPID_EVPROP_ONCHANGE (DISPID_EVENTS+30) #define DISPID_EVPROP_ONSCROLL (DISPID_EVENTS+31) #define DISPID_EVPROP_ONLOAD (DISPID_EVENTS+32) #define DISPID_EVPROP_ONUNLOAD (DISPID_EVENTS+33) #define DISPID_EVPROP_ONLAYOUT (DISPID_EVENTS+34) #define DISPID_EVPROP_ONDRAGSTART (DISPID_EVENTS+35) #define DISPID_EVPROP_ONRESIZE (DISPID_EVENTS+36) #define DISPID_EVPROP_ONSELECTSTART (DISPID_EVENTS+37) #define DISPID_EVPROP_ONERRORUPDATE (DISPID_EVENTS+38) #define DISPID_EVPROP_ONBEFOREUNLOAD (DISPID_EVENTS+39) #define DISPID_EVPROP_ONDATASETCHANGED (DISPID_EVENTS+40) #define DISPID_EVPROP_ONDATAAVAILABLE (DISPID_EVENTS+41) #define DISPID_EVPROP_ONDATASETCOMPLETE (DISPID_EVENTS+42) #define DISPID_EVPROP_ONFILTER (DISPID_EVENTS+43) #define DISPID_EVPROP_ONCHANGEFOCUS (DISPID_EVENTS+44) #define DISPID_EVPROP_ONCHANGEBLUR (DISPID_EVENTS+45) #define DISPID_EVPROP_ONLOSECAPTURE (DISPID_EVENTS+46) #define DISPID_EVPROP_ONPROPERTYCHANGE (DISPID_EVENTS+47) #define DISPID_EVPROP_ONPERSISTSAVE (DISPID_EVENTS+48) #define DISPID_EVPROP_ONDRAG (DISPID_EVENTS+49) #define DISPID_EVPROP_ONDRAGEND (DISPID_EVENTS+50) #define DISPID_EVPROP_ONDRAGENTER (DISPID_EVENTS+51) #define DISPID_EVPROP_ONDRAGOVER (DISPID_EVENTS+52) #define DISPID_EVPROP_ONDRAGLEAVE (DISPID_EVENTS+53) #define DISPID_EVPROP_ONDROP (DISPID_EVENTS+54) #define DISPID_EVPROP_ONCUT (DISPID_EVENTS+55) #define DISPID_EVPROP_ONCOPY (DISPID_EVENTS+56) #define DISPID_EVPROP_ONPASTE (DISPID_EVENTS+57) #define DISPID_EVPROP_ONBEFORECUT (DISPID_EVENTS+58) #define DISPID_EVPROP_ONBEFORECOPY (DISPID_EVENTS+59) #define DISPID_EVPROP_ONBEFOREPASTE (DISPID_EVENTS+60) #define DISPID_EVPROP_ONPERSISTLOAD (DISPID_EVENTS+61) #define DISPID_EVPROP_ONROWSDELETE (DISPID_EVENTS+62) #define DISPID_EVPROP_ONROWSINSERTED (DISPID_EVENTS+63) #define DISPID_EVPROP_ONCELLCHANGE (DISPID_EVENTS+64) #define DISPID_EVPROP_ONCONTEXTMENU (DISPID_EVENTS+65) #define DISPID_EVPROP_ONBEFOREPRINT (DISPID_EVENTS+66) #define DISPID_EVPROP_ONAFTERPRINT (DISPID_EVENTS+67) #define DISPID_EVPROP_ONSTOP (DISPID_EVENTS+68) #define DISPID_EVPROP_ONBEFOREEDITFOCUS (DISPID_EVENTS+69) #define DISPID_EVPROP_ONATTACHEVENT (DISPID_EVENTS+70) #define DISPID_EVPROP_ONMOUSEHOVER (DISPID_EVENTS+71) #define DISPID_EVPROP_ONCONTENTREADY (DISPID_EVENTS+72) #define DISPID_EVPROP_ONLAYOUTCOMPLETE (DISPID_EVENTS+73) #define DISPID_EVPROP_ONPAGE (DISPID_EVENTS+74) #define DISPID_EVPROP_ONLINKEDOVERFLOW (DISPID_EVENTS+75) #define DISPID_EVPROP_ONMOUSEWHEEL (DISPID_EVENTS+76) #define DISPID_EVPROP_ONBEFOREDEACTIVATE (DISPID_EVENTS+77) #define DISPID_EVPROP_ONMOVE (DISPID_EVENTS+78) #define DISPID_EVPROP_ONCONTROLSELECT (DISPID_EVENTS+79) #define DISPID_EVPROP_ONSELECTIONCHANGE (DISPID_EVENTS+80) #define DISPID_EVPROP_ONMOVESTART (DISPID_EVENTS+81) #define DISPID_EVPROP_ONMOVEEND (DISPID_EVENTS+82) #define DISPID_EVPROP_ONRESIZESTART (DISPID_EVENTS+83) #define DISPID_EVPROP_ONRESIZEEND (DISPID_EVENTS+84) #define DISPID_EVPROP_ONMOUSEENTER (DISPID_EVENTS+85) #define DISPID_EVPROP_ONMOUSELEAVE (DISPID_EVENTS+86) #define DISPID_EVPROP_ONACTIVATE (DISPID_EVENTS+87) #define DISPID_EVPROP_ONDEACTIVATE (DISPID_EVENTS+88) #define DISPID_EVPROP_ONMULTILAYOUTCLEANUP (DISPID_EVENTS+89) #define DISPID_EVPROP_ONBEFOREACTIVATE (DISPID_EVENTS+90) #define DISPID_EVPROP_ONFOCUSIN (DISPID_EVENTS+91) #define DISPID_EVPROP_ONFOCUSOUT (DISPID_EVENTS+92) #define DISPID_EVPROP_ONVALUECHANGE (DISPID_EVENTS+93) #define DISPID_EVPROP_ONSELECTADD (DISPID_EVENTS+94) #define DISPID_EVPROP_ONSELECTREMOV (DISPID_EVENTS+95) #define DISPID_EVPROP_ONSELECTWITHI (DISPID_EVENTS+96) #define DISPID_EVPROP_ONSYSTEMSCROLLINGSTART (DISPID_EVENTS+97) #define DISPID_EVPROP_ONSYSTEMSCROLLINGEND (DISPID_EVENTS+98) #define DISPID_EVPROP_ONOBJECTCONTENTSCROLLED (DISPID_EVENTS+99) #define DISPID_EVPROP_ONSTORAGE (DISPID_EVENTS+100) #define DISPID_EVPROP_ONSTORAGECOMMIT (DISPID_EVENTS+101) #define DISPID_EVPROP_ONSHOW (DISPID_EVENTS+102) #define DISPID_EVPROP_ONHIDE (DISPID_EVENTS+103) #define DISPID_EVPROP_ONALERT (DISPID_EVENTS+104) #define DISPID_EVPROP_ONPOPUPMENUSTART (DISPID_EVENTS+105) #define DISPID_EVPROP_ONPOPUPMENUEND (DISPID_EVENTS+106) #define DISPID_EVPROP_ONONLINE (DISPID_EVENTS+107) #define DISPID_EVPROP_ONOFFLINE (DISPID_EVENTS+108) #define DISPID_EVPROP_ONHASHCHANGE (DISPID_EVENTS+109) #define DISPID_EVPROP_ONMESSAGE (DISPID_EVENTS+110) #define DISPID_EVPROP_ONDOMMUTATION (DISPID_EVENTS+111) #define DISPID_EVPROP_TIMEOUT (DISPID_EVENTS+112) #define DISPID_EVPROP_WHEEL (DISPID_EVENTS+113) #define DISPID_EVPROP_SVGLOAD (DISPID_EVENTS+114) #define DISPID_EVPROP_SVGUNLOAD (DISPID_EVENTS+115) #define DISPID_EVPROP_SVGABORT (DISPID_EVENTS+116) #define DISPID_EVPROP_SVGERROR (DISPID_EVENTS+117) #define DISPID_EVPROP_SVGRESIZE (DISPID_EVENTS+118) #define DISPID_EVPROP_SVGSCROLL (DISPID_EVENTS+119) #define DISPID_EVPROP_SVGZOOM (DISPID_EVENTS+120) #define DISPID_EVPROP_ONMSTHUMBNAILCLICK (DISPID_EVENTS+121) #define DISPID_EVPROP_COMPOSITIONSTART (DISPID_EVENTS+122) #define DISPID_EVPROP_COMPOSITIONUPDATE (DISPID_EVENTS+123) #define DISPID_EVPROP_COMPOSITIONEND (DISPID_EVENTS+124) #define DISPID_EVPROP_DOMATTRMODIFIED (DISPID_EVENTS+125) #define DISPID_EVPROP_DOMCONTENTLOADED (DISPID_EVENTS+126) #define DISPID_EVPROP_INPUT (DISPID_EVENTS+127) #define DISPID_EVPROP_DOMCHARDATAMODIFIE (DISPID_EVENTS+128) #define DISPID_EVPROP_TEXTINPUT (DISPID_EVENTS+129) #define DISPID_EVPROP_ONMSSITEMODEJUMPLISTITEMREMOVED (DISPID_EVENTS+130) #define DISPID_EVPROP_DOMNODEINSERTED (DISPID_EVENTS+131) #define DISPID_EVPROP_DOMNODEREMOVED (DISPID_EVENTS+132) #define DISPID_EVPROP_DOMSUBTREEMODIFIED (DISPID_EVENTS+133) #define DISPID_EVPROP_CANPLAY (DISPID_EVENTS+134) #define DISPID_EVPROP_CANPLAYTHROUGH (DISPID_EVENTS+135) #define DISPID_EVPROP_DURATIONCHANGE (DISPID_EVENTS+136) #define DISPID_EVPROP_EMPTIED (DISPID_EVENTS+137) #define DISPID_EVPROP_ENDED (DISPID_EVENTS+138) #define DISPID_EVPROP_LOADEDDATA (DISPID_EVENTS+139) #define DISPID_EVPROP_LOADEDMETADATA (DISPID_EVENTS+140) #define DISPID_EVPROP_LOADSTART (DISPID_EVENTS+141) #define DISPID_EVPROP_PAUSE (DISPID_EVENTS+142) #define DISPID_EVPROP_PLAY (DISPID_EVENTS+143) #define DISPID_EVPROP_PLAYING (DISPID_EVENTS+144) #define DISPID_EVPROP_PROGRESS (DISPID_EVENTS+145) #define DISPID_EVPROP_RATECHANGE (DISPID_EVENTS+146) #define DISPID_EVPROP_SEEKED (DISPID_EVENTS+147) #define DISPID_EVPROP_SEEKING (DISPID_EVENTS+148) #define DISPID_EVPROP_STALLED (DISPID_EVENTS+149) #define DISPID_EVPROP_SUSPEND (DISPID_EVENTS+150) #define DISPID_EVPROP_TIMEUPDATE (DISPID_EVENTS+151) #define DISPID_EVPROP_VOLUMECHANGE (DISPID_EVENTS+152) #define DISPID_EVPROP_WAITING (DISPID_EVENTS+153) #define DISPID_EVPROP_ONMSPOINTERDOWN (DISPID_EVENTS+154) #define DISPID_EVPROP_ONMSPOINTERMOVE (DISPID_EVENTS+155) #define DISPID_EVPROP_ONMSPOINTERUP (DISPID_EVENTS+156) #define DISPID_EVPROP_ONMSPOINTEROVER (DISPID_EVENTS+157) #define DISPID_EVPROP_ONMSPOINTEROUT (DISPID_EVENTS+158) #define DISPID_EVPROP_ONMSPOINTERCANCEL (DISPID_EVENTS+159) #define DISPID_EVPROP_ONMSPOINTERHOVER (DISPID_EVENTS+160) #define DISPID_EVPROP_MSCONNECT (DISPID_EVENTS+161) #define DISPID_EVPROP_MSDISCONNECT (DISPID_EVENTS+162) #define DISPID_EVPROP_ONMSGESTURESTART (DISPID_EVENTS+163) #define DISPID_EVPROP_ONMSGESTURECHANGE (DISPID_EVENTS+164) #define DISPID_EVPROP_ONMSGESTUREEND (DISPID_EVENTS+165) #define DISPID_EVPROP_ONMSGESTUREHOLD (DISPID_EVENTS+166) #define DISPID_EVPROP_ONMSGESTURETAP (DISPID_EVENTS+167) #define DISPID_EVPROP_ONMSGESTUREDOUBLETAP (DISPID_EVENTS+168) #define DISPID_EVPROP_ONMSINERTIASTART (DISPID_EVENTS+169) #define DISPID_EVPROP_ONMSLOSTPOINTERCAPTURE (DISPID_EVENTS+170) #define DISPID_EVPROP_ONMSGOTPOINTERCAPTURE (DISPID_EVENTS+171) #define DISPID_EVPROP_ONMSCONTENTZOOM (DISPID_EVENTS+172) #define DISPID_EVPROP_ONTRANSITIONSTART (DISPID_EVENTS+173) #define DISPID_EVPROP_ONTRANSITIONEND (DISPID_EVENTS+174) #define DISPID_EVPROP_ONANIMATIONSTART (DISPID_EVENTS+175) #define DISPID_EVPROP_ONANIMATIONEND (DISPID_EVENTS+176) #define DISPID_EVPROP_ONANIMATIONITERATION (DISPID_EVENTS+177) #define DISPID_EVPROP_ONMSMANIPULATIONSTATECHANGED (DISPID_EVENTS+178) #define DISPID_EVPROP_ONOPEN (DISPID_EVENTS+179) #define DISPID_EVPROP_ONCLOSE (DISPID_EVENTS+180) #define DISPID_EVPROP_CHECKING (DISPID_EVENTS+181) #define DISPID_EVPROP_NOUPDATE (DISPID_EVENTS+182) #define DISPID_EVPROP_DOWNLOADING (DISPID_EVENTS+183) #define DISPID_EVPROP_UPDATEREADY (DISPID_EVENTS+184) #define DISPID_EVPROP_CACHED (DISPID_EVENTS+185) #define DISPID_EVPROP_OBSOLETE (DISPID_EVENTS+186) #define DISPID_EVPROP_LOADEND (DISPID_EVENTS+187) #define DISPID_EVPROP_INVALID (DISPID_EVENTS+188) #define DISPID_EVPROP_ONSUCCESS (DISPID_EVENTS+189) #define DISPID_EVPROP_ONBLOCKED (DISPID_EVENTS+190) #define DISPID_EVPROP_ONCOMPLETE (DISPID_EVENTS+191) #define DISPID_EVPROP_ONPOPSTATE (DISPID_EVENTS+192) #define DISPID_EVPROP_ONCUECHANGE (DISPID_EVENTS+193) #define DISPID_EVPROP_ONENTER (DISPID_EVENTS+194) #define DISPID_EVPROP_ONEXIT (DISPID_EVENTS+195) #define DISPID_EVPROP_VISIBILITYCHANGE (DISPID_EVENTS+196) #define DISPID_EVPROP_ONMSREGIONUPDATE (DISPID_EVENTS+197) #define DISPID_EVPROP_ONUPGRADENEEDED (DISPID_EVENTS+198) #define DISPID_EVPROP_ONMSVIDEOFORMATCHANGED (DISPID_EVENTS+199) #define DISPID_EVPROP_ADDTRACK (DISPID_EVENTS+200) #define DISPID_EVPROP_ONMSVIDEOFRAMESTEPCOMPLETED (DISPID_EVENTS+201) #define DISPID_EVPROP_ONMSHOLDVISUAL (DISPID_EVENTS+202) #define DISPID_EVPROP_ONMSVIDEOOPTIMALLAYOUTCHANGED (DISPID_EVENTS+203) #define DISPID_EVPROP_ONMSFULLSCREENCHANGE (DISPID_EVENTS+204) #define DISPID_EVPROP_ONMSFULLSCREENERROR (DISPID_EVENTS+205) #define DISPID_EVPROP_MSELEMENTRESIZE (DISPID_EVENTS+206) #define DISPID_EVPROP_ONSOURCEOPEN (DISPID_EVENTS+207) #define DISPID_EVPROP_ONSOURCECLOSE (DISPID_EVENTS+208) #define DISPID_EVPROP_ONSOURCEENDED (DISPID_EVENTS+209) #define DISPID_EVPROP_ONADDSOURCEBUFFER (DISPID_EVENTS+210) #define DISPID_EVPROP_ONREMOVESOURCEBUFFER (DISPID_EVENTS+211) #define DISPID_EVPROP_ONMSNEEDKEY (DISPID_EVENTS+212) #define DISPID_EVPROP_ONMSKEYMESSAGE (DISPID_EVENTS+213) #define DISPID_EVPROP_ONMSKEYERROR (DISPID_EVENTS+214) #define DISPID_EVPROP_ONMSKEYADDED (DISPID_EVENTS+215) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONDOMCONTENTLOADED (DISPID_EVENTS+216) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONCONTENTLOADING (DISPID_EVENTS+217) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONNAVIGATIONSTARTING (DISPID_EVENTS+218) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONNAVIGATIONCOMPLETED (DISPID_EVENTS+219) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONFRAMEDOMCONTENTLOADED (DISPID_EVENTS+220) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONFRAMECONTENTLOADING (DISPID_EVENTS+221) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONFRAMENAVIGATIONSTARTING (DISPID_EVENTS+222) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONFRAMENAVIGATIONCOMPLETED (DISPID_EVENTS+223) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONSCRIPTNOTIFY (DISPID_EVENTS+224) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONUNVIEWABLECONTENT (DISPID_EVENTS+225) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONUNSAFECONTENTWARNINGDISPLAYING (DISPID_EVENTS+226) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONLONGRUNNINGSCRIPTDETECTED (DISPID_EVENTS+227) #define DISPID_EVPROP_WEBGLCONTEXTLOST (DISPID_EVENTS+228) #define DISPID_EVPROP_WEBGLCONTEXTRESTORED (DISPID_EVENTS+229) #define DISPID_EVPROP_ONUPDATESTART (DISPID_EVENTS+230) #define DISPID_EVPROP_ONUPDATE (DISPID_EVENTS+231) #define DISPID_EVPROP_ONUPDATEEND (DISPID_EVENTS+232) #define DISPID_EVPROP_ONMSPOINTERENTER (DISPID_EVENTS+233) #define DISPID_EVPROP_ONMSPOINTERLEAVE (DISPID_EVENTS+234) #define DISPID_EVPROP_ONMSSITEPINNED (DISPID_EVENTS+235) #define DISPID_EVPROP_MSORIENTATIONCHANGE (DISPID_EVENTS+236) #define DISPID_EVPROP_ONDEVICEORIENTATION (DISPID_EVENTS+237) #define DISPID_EVPROP_ONDEVICEMOTION (DISPID_EVENTS+238) #define DISPID_EVPROP_ONPAGESHOW (DISPID_EVENTS+239) #define DISPID_EVPROP_ONPAGEHIDE (DISPID_EVENTS+240) #define DISPID_EVPROP_ONMSCANDIDATEWINDOWSHOW (DISPID_EVENTS+241) #define DISPID_EVPROP_ONMSCANDIDATEWINDOWUPDATE (DISPID_EVENTS+242) #define DISPID_EVPROP_ONMSCANDIDATEWINDOWHIDE (DISPID_EVENTS+243) #define DISPID_EVPROP_HTML5ONREADYSTATECHANGE (DISPID_EVENTS+244) #define DISPID_EVPROP_REMOVETRACK (DISPID_EVENTS+245) #define DISPID_EVPROP_ONCOMPASSNEEDSCALIBRATION (DISPID_EVENTS+246) #define DISPID_EVPROP_MSHTMLWEBVIEW_ONCONTAINSFULLSCREENELEMENTCHANGED (DISPID_EVENTS+247) #define DISPID_EVPROP_ONTOUCHSTART (DISPID_EVENTS+248) #define DISPID_EVPROP_ONTOUCHEND (DISPID_EVENTS+249) #define DISPID_EVPROP_ONTOUCHMOVE (DISPID_EVENTS+250) #define DISPID_EVPROP_ONTOUCHCANCEL (DISPID_EVENTS+251) #define DISPID_EVPROP_ONWEBKITTRANSITIONEND (DISPID_EVENTS+252) #define DISPID_EVPROP_ONWEBKITANIMATIONSTART (DISPID_EVENTS+253) #define DISPID_EVPROP_ONWEBKITANIMATIONEND (DISPID_EVENTS+254) #define DISPID_EVPROP_ONWEBKITANIMATIONITERATION (DISPID_EVENTS+255) #define DISPID_EVPROP_WEBGLCONTEXTCREATIONERROR (DISPID_EVENTS+256) #define DISPID_EVPROP_ONDOMFOCUSIN (DISPID_EVENTS+257) #define DISPID_EVPROP_ONDOMFOCUSOUT (DISPID_EVENTS+258) #define DISPID_EVPROP_ORIENTATIONCHANGE (DISPID_EVENTS+259) #define DISPID_EVPROPS_COUNT 260 #define DISPID_EVMETH_ONMOUSEOVER STDDISPID_XOBJ_ONMOUSEOVER #define DISPID_EVMETH_ONMOUSEOUT STDDISPID_XOBJ_ONMOUSEOUT #define DISPID_EVMETH_ONMOUSEDOWN DISPID_MOUSEDOWN #define DISPID_EVMETH_ONMOUSEUP DISPID_MOUSEUP #define DISPID_EVMETH_ONMOUSEMOVE DISPID_MOUSEMOVE #define DISPID_EVMETH_ONKEYDOWN DISPID_KEYDOWN #define DISPID_EVMETH_ONKEYUP DISPID_KEYUP #define DISPID_EVMETH_ONKEYPRESS DISPID_KEYPRESS #define DISPID_EVMETH_ONCLICK DISPID_CLICK #define DISPID_EVMETH_ONDBLCLICK DISPID_DBLCLICK #define DISPID_EVMETH_ONSELECT DISPID_ONSELECT #define DISPID_EVMETH_ONSUBMIT DISPID_ONSUBMIT #define DISPID_EVMETH_ONRESET DISPID_ONRESET #define DISPID_EVMETH_ONHELP STDDISPID_XOBJ_ONHELP #define DISPID_EVMETH_ONFOCUS STDDISPID_XOBJ_ONFOCUS #define DISPID_EVMETH_ONBLUR STDDISPID_XOBJ_ONBLUR #define DISPID_EVMETH_ONROWEXIT STDDISPID_XOBJ_ONROWEXIT #define DISPID_EVMETH_ONROWENTER STDDISPID_XOBJ_ONROWENTER #define DISPID_EVMETH_ONBOUNCE DISPID_ONBOUNCE #define DISPID_EVMETH_ONBEFOREUPDATE STDDISPID_XOBJ_BEFOREUPDATE #define DISPID_EVMETH_ONAFTERUPDATE STDDISPID_XOBJ_AFTERUPDATE #define DISPID_EVMETH_ONBEFOREDRAGOVER EVENTID_CommonCtrlEvent_BeforeDragOver #define DISPID_EVMETH_ONBEFOREDROPORPASTE EVENTID_CommonCtrlEvent_BeforeDropOrPaste #define DISPID_EVMETH_ONREADYSTATECHANGE DISPID_READYSTATECHANGE #define DISPID_EVMETH_ONFINISH DISPID_ONFINISH #define DISPID_EVMETH_ONSTART DISPID_ONSTART #define DISPID_EVMETH_ONABORT DISPID_ONABORT #define DISPID_EVMETH_ONERROR DISPID_ONERROR #define DISPID_EVMETH_ONCHANGE DISPID_ONCHANGE #define DISPID_EVMETH_ONSCROLL DISPID_ONSCROLL #define DISPID_EVMETH_ONLOAD DISPID_ONLOAD #define DISPID_EVMETH_ONUNLOAD DISPID_ONUNLOAD #define DISPID_EVMETH_ONLAYOUT DISPID_ONLAYOUT #define DISPID_EVMETH_ONDRAGSTART STDDISPID_XOBJ_ONDRAGSTART #define DISPID_EVMETH_ONRESIZE DISPID_ONRESIZE #define DISPID_EVMETH_ONSELECTSTART STDDISPID_XOBJ_ONSELECTSTART #define DISPID_EVMETH_ONERRORUPDATE STDDISPID_XOBJ_ERRORUPDATE #define DISPID_EVMETH_ONBEFOREUNLOAD DISPID_ONBEFOREUNLOAD #define DISPID_EVMETH_ONDATASETCHANGED STDDISPID_XOBJ_ONDATASETCHANGED #define DISPID_EVMETH_ONDATAAVAILABLE STDDISPID_XOBJ_ONDATAAVAILABLE #define DISPID_EVMETH_ONDATASETCOMPLETE STDDISPID_XOBJ_ONDATASETCOMPLETE #define DISPID_EVMETH_ONFILTER STDDISPID_XOBJ_ONFILTER #define DISPID_EVMETH_ONCHANGEFOCUS DISPID_ONCHANGEFOCUS #define DISPID_EVMETH_ONCHANGEBLUR DISPID_ONCHANGEBLUR #define DISPID_EVMETH_ONLOSECAPTURE STDDISPID_XOBJ_ONLOSECAPTURE #define DISPID_EVMETH_ONPROPERTYCHANGE STDDISPID_XOBJ_ONPROPERTYCHANGE #define DISPID_EVMETH_ONPERSISTSAVE DISPID_ONPERSISTSAVE #define DISPID_EVMETH_ONDRAG STDDISPID_XOBJ_ONDRAG #define DISPID_EVMETH_ONDRAGEND STDDISPID_XOBJ_ONDRAGEND #define DISPID_EVMETH_ONDRAGENTER STDDISPID_XOBJ_ONDRAGENTER #define DISPID_EVMETH_ONDRAGOVER STDDISPID_XOBJ_ONDRAGOVER #define DISPID_EVMETH_ONDRAGLEAVE STDDISPID_XOBJ_ONDRAGLEAVE #define DISPID_EVMETH_ONDROP STDDISPID_XOBJ_ONDROP #define DISPID_EVMETH_ONCUT STDDISPID_XOBJ_ONCUT #define DISPID_EVMETH_ONCOPY STDDISPID_XOBJ_ONCOPY #define DISPID_EVMETH_ONPASTE STDDISPID_XOBJ_ONPASTE #define DISPID_EVMETH_ONBEFORECUT STDDISPID_XOBJ_ONBEFORECUT #define DISPID_EVMETH_ONBEFORECOPY STDDISPID_XOBJ_ONBEFORECOPY #define DISPID_EVMETH_ONBEFOREPASTE STDDISPID_XOBJ_ONBEFOREPASTE #define DISPID_EVMETH_ONPERSISTLOAD DISPID_ONPERSISTLOAD #define DISPID_EVMETH_ONROWSDELETE STDDISPID_XOBJ_ONROWSDELETE #define DISPID_EVMETH_ONROWSINSERTED STDDISPID_XOBJ_ONROWSINSERTED #define DISPID_EVMETH_ONCELLCHANGE STDDISPID_XOBJ_ONCELLCHANGE #define DISPID_EVMETH_ONCONTEXTMENU DISPID_ONCONTEXTMENU #define DISPID_EVMETH_ONBEFOREPRINT DISPID_ONBEFOREPRINT #define DISPID_EVMETH_ONAFTERPRINT DISPID_ONAFTERPRINT #define DISPID_EVMETH_ONSTOP DISPID_ONSTOP #define DISPID_EVMETH_ONBEFOREEDITFOCUS DISPID_ONBEFOREEDITFOCUS #define DISPID_EVMETH_ONMOUSEHOVER DISPID_ONMOUSEHOVER #define DISPID_EVMETH_ONCONTENTREADY DISPID_ONCONTENTREADY #define DISPID_EVMETH_ONLAYOUTCOMPLETE DISPID_ONLAYOUTCOMPLETE #define DISPID_EVMETH_ONPAGE DISPID_ONPAGE #define DISPID_EVMETH_ONLINKEDOVERFLOW DISPID_ONLINKEDOVERFLOW #define DISPID_EVMETH_ONMOUSEWHEEL DISPID_ONMOUSEWHEEL #define DISPID_EVMETH_ONBEFOREDEACTIVATE DISPID_ONBEFOREDEACTIVATE #define DISPID_EVMETH_ONMOVE DISPID_ONMOVE #define DISPID_EVMETH_ONCONTROLSELECT DISPID_ONCONTROLSELECT #define DISPID_EVMETH_ONSELECTIONCHANGE DISPID_ONSELECTIONCHANGE #define DISPID_EVMETH_ONMOVESTART DISPID_ONMOVESTART #define DISPID_EVMETH_ONMOVEEND DISPID_ONMOVEEND #define DISPID_EVMETH_ONRESIZESTART DISPID_ONRESIZESTART #define DISPID_EVMETH_ONRESIZEEND DISPID_ONRESIZEEND #define DISPID_EVMETH_ONMOUSEENTER DISPID_ONMOUSEENTER #define DISPID_EVMETH_ONMOUSELEAVE DISPID_ONMOUSELEAVE #define DISPID_EVMETH_ONACTIVATE DISPID_ONACTIVATE #define DISPID_EVMETH_ONDEACTIVATE DISPID_ONDEACTIVATE #define DISPID_EVMETH_ONMULTILAYOUTCLEANUP DISPID_ONMULTILAYOUTCLEANUP #define DISPID_EVMETH_ONBEFOREACTIVATE DISPID_ONBEFOREACTIVATE #define DISPID_EVMETH_ONFOCUSIN DISPID_ONFOCUSIN #define DISPID_EVMETH_ONFOCUSOUT DISPID_ONFOCUSOUT #define DISPID_EVMETH_ONSTORAGE DISPID_ONSTORAGE #define DISPID_EVMETH_ONSTORAGECOMMIT DISPID_ONSTORAGECOMMIT #define DISPID_EVMETH_ONMESSAGE DISPID_ONMESSAGE #define DISPID_ONABORT (DISPID_NORMAL_FIRST) #define DISPID_ONCHANGE (DISPID_NORMAL_FIRST+1) #define DISPID_ONERROR (DISPID_NORMAL_FIRST+2) #define DISPID_ONLOAD (DISPID_NORMAL_FIRST+3) #define DISPID_ONSELECT (DISPID_NORMAL_FIRST+6) #define DISPID_ONSUBMIT (DISPID_NORMAL_FIRST+7) #define DISPID_ONUNLOAD (DISPID_NORMAL_FIRST+8) #define DISPID_ONBOUNCE (DISPID_NORMAL_FIRST+9) #define DISPID_ONFINISH (DISPID_NORMAL_FIRST+10) #define DISPID_ONSTART (DISPID_NORMAL_FIRST+11) #define DISPID_ONLAYOUT (DISPID_NORMAL_FIRST+13) #define DISPID_ONSCROLL (DISPID_NORMAL_FIRST+14) #define DISPID_ONRESET (DISPID_NORMAL_FIRST+15) #define DISPID_ONRESIZE (DISPID_NORMAL_FIRST+16) #define DISPID_ONBEFOREUNLOAD (DISPID_NORMAL_FIRST+17) #define DISPID_ONCHANGEFOCUS (DISPID_NORMAL_FIRST+18) #define DISPID_ONCHANGEBLUR (DISPID_NORMAL_FIRST+19) #define DISPID_ONPERSIST (DISPID_NORMAL_FIRST+20) #define DISPID_ONPERSISTSAVE (DISPID_NORMAL_FIRST+21) #define DISPID_ONPERSISTLOAD (DISPID_NORMAL_FIRST+22) #define DISPID_ONCONTEXTMENU (DISPID_NORMAL_FIRST+23) #define DISPID_ONBEFOREPRINT (DISPID_NORMAL_FIRST+24) #define DISPID_ONAFTERPRINT (DISPID_NORMAL_FIRST+25) #define DISPID_ONSTOP (DISPID_NORMAL_FIRST+26) #define DISPID_ONBEFOREEDITFOCUS (DISPID_NORMAL_FIRST+27) #define DISPID_ONMOUSEHOVER (DISPID_NORMAL_FIRST+28) #define DISPID_ONCONTENTREADY (DISPID_NORMAL_FIRST+29) #define DISPID_ONLAYOUTCOMPLETE (DISPID_NORMAL_FIRST+30) #define DISPID_ONPAGE (DISPID_NORMAL_FIRST+31) #define DISPID_ONLINKEDOVERFLOW (DISPID_NORMAL_FIRST+32) #define DISPID_ONMOUSEWHEEL (DISPID_NORMAL_FIRST+33) #define DISPID_ONBEFOREDEACTIVATE (DISPID_NORMAL_FIRST+34) #define DISPID_ONMOVE (DISPID_NORMAL_FIRST+35) #define DISPID_ONCONTROLSELECT (DISPID_NORMAL_FIRST+36) #define DISPID_ONSELECTIONCHANGE (DISPID_NORMAL_FIRST+37) #define DISPID_ONMOVESTART (DISPID_NORMAL_FIRST+38) #define DISPID_ONMOVEEND (DISPID_NORMAL_FIRST+39) #define DISPID_ONRESIZESTART (DISPID_NORMAL_FIRST+40) #define DISPID_ONRESIZEEND (DISPID_NORMAL_FIRST+41) #define DISPID_ONMOUSEENTER (DISPID_NORMAL_FIRST+42) #define DISPID_ONMOUSELEAVE (DISPID_NORMAL_FIRST+43) #define DISPID_ONACTIVATE (DISPID_NORMAL_FIRST+44) #define DISPID_ONDEACTIVATE (DISPID_NORMAL_FIRST+45) #define DISPID_ONMULTILAYOUTCLEANUP (DISPID_NORMAL_FIRST+46) #define DISPID_ONBEFOREACTIVATE (DISPID_NORMAL_FIRST+47) #define DISPID_ONFOCUSIN (DISPID_NORMAL_FIRST+48) #define DISPID_ONFOCUSOUT (DISPID_NORMAL_FIRST+49) #define DISPID_ONVALUECHANGE (DISPID_NORMAL_FIRST+50) #define DISPID_ONSELECTADD (DISPID_NORMAL_FIRST+51) #define DISPID_ONSELECTREMOVE (DISPID_NORMAL_FIRST+52) #define DISPID_ONSELECTWITHIN (DISPID_NORMAL_FIRST+53) #define DISPID_ONSYSTEMSCROLLINGSTART (DISPID_NORMAL_FIRST+54) #define DISPID_ONSYSTEMSCROLLINGEND (DISPID_NORMAL_FIRST+55) #define DISPID_ONOBJECTCONTENTSCROLLED (DISPID_NORMAL_FIRST+56) #define DISPID_ONSTORAGE (DISPID_NORMAL_FIRST+57) #define DISPID_ONSTORAGECOMMIT (DISPID_NORMAL_FIRST+58) #define DISPID_ONSHOW (DISPID_NORMAL_FIRST+59) #define DISPID_ONHIDE (DISPID_NORMAL_FIRST+60) #define DISPID_ONALERT (DISPID_NORMAL_FIRST+61) #define DISPID_ONPOPUPMENUSTART (DISPID_NORMAL_FIRST+62) #define DISPID_ONPOPUPMENUEND (DISPID_NORMAL_FIRST+63) #define DISPID_ONONLINE (DISPID_NORMAL_FIRST+64) #define DISPID_ONOFFLINE (DISPID_NORMAL_FIRST+65) #define DISPID_ONHASHCHANGE (DISPID_NORMAL_FIRST+66) #define DISPID_ONMESSAGE (DISPID_NORMAL_FIRST+67) #define DISPID_ONDOMMUTATION (DISPID_NORMAL_FIRST+68) #define DISPID_SVGLOAD (DISPID_NORMAL_FIRST+69) #define DISPID_SVGUNLOAD (DISPID_NORMAL_FIRST+70) #define DISPID_SVGABORT (DISPID_NORMAL_FIRST+71) #define DISPID_SVGERROR (DISPID_NORMAL_FIRST+72) #define DISPID_SVGRESIZE (DISPID_NORMAL_FIRST+73) #define DISPID_SVGSCROLL (DISPID_NORMAL_FIRST+74) #define DISPID_SVGZOOM (DISPID_NORMAL_FIRST+75) #define DISPID_MSPOINTERDOWN (DISPID_NORMAL_FIRST+76) #define DISPID_MSPOINTERMOVE (DISPID_NORMAL_FIRST+77) #define DISPID_MSPOINTERUP (DISPID_NORMAL_FIRST+78) #define DISPID_MSPOINTEROVER (DISPID_NORMAL_FIRST+79) #define DISPID_MSPOINTEROUT (DISPID_NORMAL_FIRST+80) #define DISPID_MSPOINTERCANCEL (DISPID_NORMAL_FIRST+81) #define DISPID_MSPOINTERHOVER (DISPID_NORMAL_FIRST+82) #define DISPID_MSGESTURESTART (DISPID_NORMAL_FIRST+83) #define DISPID_MSGESTURECHANGE (DISPID_NORMAL_FIRST+84) #define DISPID_MSGESTUREEND (DISPID_NORMAL_FIRST+85) #define DISPID_MSGESTUREHOLD (DISPID_NORMAL_FIRST+86) #define DISPID_MSGESTURETAP (DISPID_NORMAL_FIRST+87) #define DISPID_MSGESTUREDOUBLETAP (DISPID_NORMAL_FIRST+88) #define DISPID_MSINERTIASTART (DISPID_NORMAL_FIRST+89) #define DISPID_MSLOSTPOINTERCAPTURE (DISPID_NORMAL_FIRST+90) #define DISPID_MSGOTPOINTERCAPTURE (DISPID_NORMAL_FIRST+91) #define DISPID_MSTRANSITIONSTART (DISPID_NORMAL_FIRST+92) #define DISPID_MSTRANSITIONEND (DISPID_NORMAL_FIRST+93) #define DISPID_MSANIMATIONSTART (DISPID_NORMAL_FIRST+94) #define DISPID_MSANIMATIONEND (DISPID_NORMAL_FIRST+95) #define DISPID_MSANIMATIONITERATION (DISPID_NORMAL_FIRST+96) #define DISPID_MSGESTUREINIT (DISPID_NORMAL_FIRST+97) #define DISPID_MSMANIPULATIONSTATECHANGED (DISPID_NORMAL_FIRST+98) #define DISPID_ONOPEN (DISPID_NORMAL_FIRST+99) #define DISPID_ONCLOSE (DISPID_NORMAL_FIRST+100) #define DISPID_MSPOINTERENTER (DISPID_NORMAL_FIRST+101) #define DISPID_MSPOINTERLEAVE (DISPID_NORMAL_FIRST+102) #define DISPID_MSORIENTATIONCHANGE (DISPID_NORMAL_FIRST+103) #define DISPID_ONDEVICEORIENTATION (DISPID_NORMAL_FIRST+104) #define DISPID_ONDEVICEMOTION (DISPID_NORMAL_FIRST+105) #define DISPID_ONPAGESHOW (DISPID_NORMAL_FIRST+106) #define DISPID_ONPAGEHIDE (DISPID_NORMAL_FIRST+107) #define DISPID_ONCOMPASSNEEDSCALIBRATION (DISPID_NORMAL_FIRST+108) /* HTMLDocumentEvents */ #define DISPID_HTMLDOCUMENTEVENTS_ONHELP DISPID_EVMETH_ONHELP #define DISPID_HTMLDOCUMENTEVENTS_ONCLICK DISPID_EVMETH_ONCLICK #define DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK DISPID_EVMETH_ONDBLCLICK #define DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN DISPID_EVMETH_ONKEYDOWN #define DISPID_HTMLDOCUMENTEVENTS_ONKEYUP DISPID_EVMETH_ONKEYUP #define DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS DISPID_EVMETH_ONKEYPRESS #define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN DISPID_EVMETH_ONMOUSEDOWN #define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE DISPID_EVMETH_ONMOUSEMOVE #define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP DISPID_EVMETH_ONMOUSEUP #define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT DISPID_EVMETH_ONMOUSEOUT #define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER DISPID_EVMETH_ONMOUSEOVER #define DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE #define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE DISPID_EVMETH_ONBEFOREUPDATE #define DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE DISPID_EVMETH_ONAFTERUPDATE #define DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT DISPID_EVMETH_ONROWEXIT #define DISPID_HTMLDOCUMENTEVENTS_ONROWENTER DISPID_EVMETH_ONROWENTER #define DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART DISPID_EVMETH_ONDRAGSTART #define DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART DISPID_EVMETH_ONSELECTSTART #define DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE DISPID_EVMETH_ONERRORUPDATE #define DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU DISPID_EVMETH_ONCONTEXTMENU #define DISPID_HTMLDOCUMENTEVENTS_ONSTOP DISPID_EVMETH_ONSTOP #define DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE DISPID_EVMETH_ONROWSDELETE #define DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED DISPID_EVMETH_ONROWSINSERTED #define DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE DISPID_EVMETH_ONCELLCHANGE #define DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE DISPID_EVMETH_ONPROPERTYCHANGE #define DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED DISPID_EVMETH_ONDATASETCHANGED #define DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE DISPID_EVMETH_ONDATAAVAILABLE #define DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE #define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS DISPID_EVMETH_ONBEFOREEDITFOCUS #define DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE DISPID_EVMETH_ONSELECTIONCHANGE #define DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT DISPID_EVMETH_ONCONTROLSELECT #define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL DISPID_EVMETH_ONMOUSEWHEEL #define DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN DISPID_EVMETH_ONFOCUSIN #define DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT DISPID_EVMETH_ONFOCUSOUT #define DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE DISPID_EVMETH_ONACTIVATE #define DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE DISPID_EVMETH_ONDEACTIVATE #define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE DISPID_EVMETH_ONBEFOREACTIVATE #define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE /* HTMLDocumentEvents2 */ #define DISPID_HTMLDOCUMENTEVENTS2_ONHELP DISPID_EVMETH_ONHELP #define DISPID_HTMLDOCUMENTEVENTS2_ONCLICK DISPID_EVMETH_ONCLICK #define DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK DISPID_EVMETH_ONDBLCLICK #define DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN DISPID_EVMETH_ONKEYDOWN #define DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP DISPID_EVMETH_ONKEYUP #define DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS DISPID_EVMETH_ONKEYPRESS #define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN DISPID_EVMETH_ONMOUSEDOWN #define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE DISPID_EVMETH_ONMOUSEMOVE #define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP DISPID_EVMETH_ONMOUSEUP #define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT DISPID_EVMETH_ONMOUSEOUT #define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER DISPID_EVMETH_ONMOUSEOVER #define DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE #define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE DISPID_EVMETH_ONBEFOREUPDATE #define DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE DISPID_EVMETH_ONAFTERUPDATE #define DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT DISPID_EVMETH_ONROWEXIT #define DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER DISPID_EVMETH_ONROWENTER #define DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART DISPID_EVMETH_ONDRAGSTART #define DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART DISPID_EVMETH_ONSELECTSTART #define DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE DISPID_EVMETH_ONERRORUPDATE #define DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU DISPID_EVMETH_ONCONTEXTMENU #define DISPID_HTMLDOCUMENTEVENTS2_ONSTOP DISPID_EVMETH_ONSTOP #define DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE DISPID_EVMETH_ONROWSDELETE #define DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED DISPID_EVMETH_ONROWSINSERTED #define DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE DISPID_EVMETH_ONCELLCHANGE #define DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE DISPID_EVMETH_ONPROPERTYCHANGE #define DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED DISPID_EVMETH_ONDATASETCHANGED #define DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE DISPID_EVMETH_ONDATAAVAILABLE #define DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE #define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS DISPID_EVMETH_ONBEFOREEDITFOCUS #define DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE DISPID_EVMETH_ONSELECTIONCHANGE #define DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT DISPID_EVMETH_ONCONTROLSELECT #define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL DISPID_EVMETH_ONMOUSEWHEEL #define DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN DISPID_EVMETH_ONFOCUSIN #define DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT DISPID_EVMETH_ONFOCUSOUT #define DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE DISPID_EVMETH_ONACTIVATE #define DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE DISPID_EVMETH_ONDEACTIVATE #define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE DISPID_EVMETH_ONBEFOREACTIVATE #define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE /* IHTMLDocument */ #define DISPID_IHTMLDOCUMENT_SCRIPT (DISPID_OMDOCUMENT+1) /* IHTMLDocument2 */ #define DISPID_IHTMLDOCUMENT2_ALL (DISPID_OMDOCUMENT+3) #define DISPID_IHTMLDOCUMENT2_BODY (DISPID_OMDOCUMENT+4) #define DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT (DISPID_OMDOCUMENT+5) #define DISPID_IHTMLDOCUMENT2_APPLETS (DISPID_OMDOCUMENT+8) #define DISPID_IHTMLDOCUMENT2_ANCHORS (DISPID_OMDOCUMENT+7) #define DISPID_IHTMLDOCUMENT2_LINKS (DISPID_OMDOCUMENT+9) #define DISPID_IHTMLDOCUMENT2_FORMS (DISPID_OMDOCUMENT+10) #define DISPID_IHTMLDOCUMENT2_IMAGES (DISPID_OMDOCUMENT+11) #define DISPID_IHTMLDOCUMENT2_TITLE (DISPID_OMDOCUMENT+12) #define DISPID_IHTMLDOCUMENT2_SCRIPTS (DISPID_OMDOCUMENT+13) #define DISPID_IHTMLDOCUMENT2_DESIGNMODE (DISPID_OMDOCUMENT+14) #define DISPID_IHTMLDOCUMENT2_EMBEDS (DISPID_OMDOCUMENT+15) #define DISPID_IHTMLDOCUMENT2_SELECTION (DISPID_OMDOCUMENT+17) #define DISPID_IHTMLDOCUMENT2_READYSTATE (DISPID_OMDOCUMENT+18) #define DISPID_IHTMLDOCUMENT2_FRAMES (DISPID_OMDOCUMENT+19) #define DISPID_IHTMLDOCUMENT2_PLUGINS (DISPID_OMDOCUMENT+21) #define DISPID_IHTMLDOCUMENT2_ALINKCOLOR (DISPID_OMDOCUMENT+22) #define DISPID_IHTMLDOCUMENT2_VLINKCOLOR (DISPID_OMDOCUMENT+23) #define DISPID_IHTMLDOCUMENT2_LINKCOLOR (DISPID_OMDOCUMENT+24) #define DISPID_IHTMLDOCUMENT2_URL (DISPID_OMDOCUMENT+25) #define DISPID_IHTMLDOCUMENT2_LOCATION (DISPID_OMDOCUMENT+26) #define DISPID_IHTMLDOCUMENT2_REFERRER (DISPID_OMDOCUMENT+27) #define DISPID_IHTMLDOCUMENT2_LASTMODIFIED (DISPID_OMDOCUMENT+28) #define DISPID_IHTMLDOCUMENT2_DOMAIN (DISPID_OMDOCUMENT+29) #define DISPID_IHTMLDOCUMENT2_COOKIE (DISPID_OMDOCUMENT+30) #define DISPID_IHTMLDOCUMENT2_EXPANDO (DISPID_OMDOCUMENT+31) #define DISPID_IHTMLDOCUMENT2_CHARSET (DISPID_OMDOCUMENT+32) #define DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET (DISPID_OMDOCUMENT+33) #define DISPID_IHTMLDOCUMENT2_PARENTWINDOW (DISPID_OMDOCUMENT+34) #define DISPID_IHTMLDOCUMENT2_MIMETYPE (DISPID_OMDOCUMENT+41) #define DISPID_IHTMLDOCUMENT2_FILESIZE (DISPID_OMDOCUMENT+42) #define DISPID_IHTMLDOCUMENT2_FILECREATEDDATE (DISPID_OMDOCUMENT+43) #define DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE (DISPID_OMDOCUMENT+44) #define DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE (DISPID_OMDOCUMENT+45) #define DISPID_IHTMLDOCUMENT2_SECURITY (DISPID_OMDOCUMENT+46) #define DISPID_IHTMLDOCUMENT2_PROTOCOL (DISPID_OMDOCUMENT+47) #define DISPID_IHTMLDOCUMENT2_NAMEPROP (DISPID_OMDOCUMENT+48) #define DISPID_IHTMLDOCUMENT2_WRITE (DISPID_OMDOCUMENT+54) #define DISPID_IHTMLDOCUMENT2_WRITELN (DISPID_OMDOCUMENT+55) #define DISPID_IHTMLDOCUMENT2_OPEN (DISPID_OMDOCUMENT+56) #define DISPID_IHTMLDOCUMENT2_CLOSE (DISPID_OMDOCUMENT+57) #define DISPID_IHTMLDOCUMENT2_CLEAR (DISPID_OMDOCUMENT+58) #define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED (DISPID_OMDOCUMENT+59) #define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED (DISPID_OMDOCUMENT+60) #define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE (DISPID_OMDOCUMENT+61) #define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM (DISPID_OMDOCUMENT+62) #define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT (DISPID_OMDOCUMENT+63) #define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE (DISPID_OMDOCUMENT+64) #define DISPID_IHTMLDOCUMENT2_EXECCOMMAND (DISPID_OMDOCUMENT+65) #define DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP (DISPID_OMDOCUMENT+66) #define DISPID_IHTMLDOCUMENT2_CREATEELEMENT (DISPID_OMDOCUMENT+67) #define DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT (DISPID_OMDOCUMENT+68) #define DISPID_IHTMLDOCUMENT2_STYLESHEETS (DISPID_OMDOCUMENT+69) #define DISPID_IHTMLDOCUMENT2_TOSTRING (DISPID_OMDOCUMENT+70) #define DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET (DISPID_OMDOCUMENT+71) #define DISPID_IHTMLDOCUMENT2_ONHELP DISPID_EVPROP_ONHELP #define DISPID_IHTMLDOCUMENT2_ONCLICK DISPID_EVPROP_ONCLICK #define DISPID_IHTMLDOCUMENT2_ONDBLCLICK DISPID_EVPROP_ONDBLCLICK #define DISPID_IHTMLDOCUMENT2_ONKEYUP DISPID_EVPROP_ONKEYUP #define DISPID_IHTMLDOCUMENT2_ONKEYDOWN DISPID_EVPROP_ONKEYDOWN #define DISPID_IHTMLDOCUMENT2_ONKEYPRESS DISPID_EVPROP_ONKEYPRESS #define DISPID_IHTMLDOCUMENT2_ONMOUSEUP DISPID_EVPROP_ONMOUSEUP #define DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN DISPID_EVPROP_ONMOUSEDOWN #define DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE DISPID_EVPROP_ONMOUSEMOVE #define DISPID_IHTMLDOCUMENT2_ONMOUSEOUT DISPID_EVPROP_ONMOUSEOUT #define DISPID_IHTMLDOCUMENT2_ONMOUSEOVER DISPID_EVPROP_ONMOUSEOVER #define DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE #define DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE DISPID_EVPROP_ONAFTERUPDATE #define DISPID_IHTMLDOCUMENT2_ONROWEXIT DISPID_EVPROP_ONROWEXIT #define DISPID_IHTMLDOCUMENT2_ONROWENTER DISPID_EVPROP_ONROWENTER #define DISPID_IHTMLDOCUMENT2_ONDRAGSTART DISPID_EVPROP_ONDRAGSTART #define DISPID_IHTMLDOCUMENT2_ONSELECTSTART DISPID_EVPROP_ONSELECTSTART #define DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE DISPID_EVPROP_ONBEFOREUPDATE #define DISPID_IHTMLDOCUMENT2_ONERRORUPDATE DISPID_EVPROP_ONERRORUPDATE #define DISPID_IHTMLDOCUMENT2_BGCOLOR DISPID_BACKCOLOR #define DISPID_IHTMLDOCUMENT2_FGCOLOR DISPID_A_COLOR /* IHTMLDocument3 */ #define DISPID_IHTMLDOCUMENT3_RELEASECAPTURE DISPID_OMDOCUMENT+72 #define DISPID_IHTMLDOCUMENT3_RECALC DISPID_OMDOCUMENT+73 #define DISPID_IHTMLDOCUMENT3_CREATETEXTNODE DISPID_OMDOCUMENT+74 #define DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT DISPID_OMDOCUMENT+75 #define DISPID_IHTMLDOCUMENT3_UNIQUEID DISPID_OMDOCUMENT+77 #define DISPID_IHTMLDOCUMENT3_ATTACHEVENT DISPID_HTMLOBJECT+7 #define DISPID_IHTMLDOCUMENT3_DETACHEVENT DISPID_HTMLOBJECT+8 #define DISPID_IHTMLDOCUMENT3_ONROWSDELETE DISPID_EVPROP_ONROWSDELETE #define DISPID_IHTMLDOCUMENT3_ONROWSINSERTED DISPID_EVPROP_ONROWSINSERTED #define DISPID_IHTMLDOCUMENT3_ONCELLCHANGE DISPID_EVPROP_ONCELLCHANGE #define DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED DISPID_EVPROP_ONDATASETCHANGED #define DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE DISPID_EVPROP_ONDATAAVAILABLE #define DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE DISPID_EVPROP_ONDATASETCOMPLETE #define DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE DISPID_EVPROP_ONPROPERTYCHANGE #define DISPID_IHTMLDOCUMENT3_DIR DISPID_A_DIR #define DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU DISPID_EVPROP_ONCONTEXTMENU #define DISPID_IHTMLDOCUMENT3_ONSTOP DISPID_EVPROP_ONSTOP #define DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT DISPID_OMDOCUMENT+76 #define DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT DISPID_OMDOCUMENT+78 #define DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD DISPID_OMDOCUMENT+79 #define DISPID_IHTMLDOCUMENT3_BASEURL DISPID_OMDOCUMENT+80 #define DISPID_IHTMLDOCUMENT3_CHILDNODES DISPID_ELEMENT+49 #define DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS DISPID_OMDOCUMENT+82 #define DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS DISPID_EVPROP_ONBEFOREEDITFOCUS #define DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME DISPID_OMDOCUMENT+86 #define DISPID_IHTMLDOCUMENT3_GETELEMENTBYID DISPID_OMDOCUMENT+88 #define DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME DISPID_OMDOCUMENT+87 /* IHTMLDocument4 */ #define DISPID_IHTMLDOCUMENT4_FOCUS DISPID_OMDOCUMENT+89 #define DISPID_IHTMLDOCUMENT4_HASFOCUS DISPID_OMDOCUMENT+90 #define DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE DISPID_EVPROP_ONSELECTIONCHANGE #define DISPID_IHTMLDOCUMENT4_NAMESPACES DISPID_OMDOCUMENT+91 #define DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL DISPID_OMDOCUMENT+92 #define DISPID_IHTMLDOCUMENT4_MEDIA DISPID_OMDOCUMENT+93 #define DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT DISPID_OMDOCUMENT+94 #define DISPID_IHTMLDOCUMENT4_FIREEVENT DISPID_OMDOCUMENT+95 #define DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE DISPID_OMDOCUMENT+96 #define DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT DISPID_EVPROP_ONCONTROLSELECT #define DISPID_IHTMLDOCUMENT4_URLUNENCODED DISPID_OMDOCUMENT+97 /* IHTMLDocument5 */ #define DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL DISPID_EVPROP_ONMOUSEWHEEL #define DISPID_IHTMLDOCUMENT5_DOCTYPE DISPID_OMDOCUMENT+98 #define DISPID_IHTMLDOCUMENT5_IMPLEMENTATION DISPID_OMDOCUMENT+99 #define DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE DISPID_OMDOCUMENT+100 #define DISPID_IHTMLDOCUMENT5_CREATECOMMENT DISPID_OMDOCUMENT+101 #define DISPID_IHTMLDOCUMENT5_ONFOCUSIN DISPID_EVPROP_ONFOCUSIN #define DISPID_IHTMLDOCUMENT5_ONFOCUSOUT DISPID_EVPROP_ONFOCUSOUT #define DISPID_IHTMLDOCUMENT5_ONACTIVATE DISPID_EVPROP_ONACTIVATE #define DISPID_IHTMLDOCUMENT5_ONDEACTIVATE DISPID_EVPROP_ONDEACTIVATE #define DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE DISPID_EVPROP_ONBEFOREACTIVATE #define DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE DISPID_EVPROP_ONBEFOREDEACTIVATE #define DISPID_IHTMLDOCUMENT5_COMPATMODE DISPID_OMDOCUMENT+102 /* IHTMLDocument6 */ #define DISPID_IHTMLDOCUMENT6_COMPATIBLE DISPID_OMDOCUMENT+103 #define DISPID_IHTMLDOCUMENT6_DOCUMENTMODE DISPID_OMDOCUMENT+104 #define DISPID_IHTMLDOCUMENT6_ONSTORAGE DISPID_EVPROP_ONSTORAGE #define DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT DISPID_EVPROP_ONSTORAGECOMMIT #define DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID DISPID_OMDOCUMENT+107 #define DISPID_IHTMLDOCUMENT6_UPDATESETTINGS DISPID_OMDOCUMENT+109 /* IHTMLDocument7 */ #define DISPID_IHTMLDOCUMENT7_DEFAULTVIEW DISPID_OMDOCUMENT+110 #define DISPID_IHTMLDOCUMENT7_CREATECDATASECTION DISPID_OMDOCUMENT+123 #define DISPID_IHTMLDOCUMENT7_GETSELECTION DISPID_OMDOCUMENT+112 #define DISPID_IHTMLDOCUMENT7_GETELEMENTSBYTAGNAMENS DISPID_OMDOCUMENT+113 #define DISPID_IHTMLDOCUMENT7_CREATEELEMENTNS DISPID_OMDOCUMENT+114 #define DISPID_IHTMLDOCUMENT7_CREATEATTRIBUTENS DISPID_OMDOCUMENT+115 #define DISPID_IHTMLDOCUMENT7_ONMSTHUMBNAILCLICK DISPID_EVPROP_ONMSTHUMBNAILCLICK #define DISPID_IHTMLDOCUMENT7_CHARACTERSET DISPID_OMDOCUMENT+117 #define DISPID_IHTMLDOCUMENT7_IE9_CREATEELEMENT DISPID_OMDOCUMENT+118 #define DISPID_IHTMLDOCUMENT7_IE9_CREATEATTRIBUTE DISPID_OMDOCUMENT+119 #define DISPID_IHTMLDOCUMENT7_GETELEMENTSBYCLASSNAME DISPID_OMDOCUMENT+120 #define DISPID_IHTMLDOCUMENT7_CREATEPROCESSINGINSTRUCTION DISPID_OMDOCUMENT+124 #define DISPID_IHTMLDOCUMENT7_ADOPTNODE DISPID_OMDOCUMENT+125 #define DISPID_IHTMLDOCUMENT7_ONMSSITEMODEJUMPLISTITEMREMOVED DISPID_EVPROP_ONMSSITEMODEJUMPLISTITEMREMOVED #define DISPID_IHTMLDOCUMENT7_IE9_ALL DISPID_OMDOCUMENT+126 #define DISPID_IHTMLDOCUMENT7_INPUTENCODING DISPID_OMDOCUMENT+127 #define DISPID_IHTMLDOCUMENT7_XMLENCODING DISPID_OMDOCUMENT+128 #define DISPID_IHTMLDOCUMENT7_XMLSTANDALONE DISPID_OMDOCUMENT+129 #define DISPID_IHTMLDOCUMENT7_XMLVERSION DISPID_OMDOCUMENT+130 #define DISPID_IHTMLDOCUMENT7_HASATTRIBUTES DISPID_OMDOCUMENT+132 #define DISPID_IHTMLDOCUMENT7_ONABORT DISPID_EVPROP_ONABORT #define DISPID_IHTMLDOCUMENT7_ONBLUR DISPID_EVPROP_ONBLUR #define DISPID_IHTMLDOCUMENT7_ONCANPLAY DISPID_EVPROP_CANPLAY #define DISPID_IHTMLDOCUMENT7_ONCANPLAYTHROUGH DISPID_EVPROP_CANPLAYTHROUGH #define DISPID_IHTMLDOCUMENT7_ONCHANGE DISPID_EVPROP_ONCHANGE #define DISPID_IHTMLDOCUMENT7_ONDRAG DISPID_EVPROP_ONDRAG #define DISPID_IHTMLDOCUMENT7_ONDRAGEND DISPID_EVPROP_ONDRAGEND #define DISPID_IHTMLDOCUMENT7_ONDRAGENTER DISPID_EVPROP_ONDRAGENTER #define DISPID_IHTMLDOCUMENT7_ONDRAGLEAVE DISPID_EVPROP_ONDRAGLEAVE #define DISPID_IHTMLDOCUMENT7_ONDRAGOVER DISPID_EVPROP_ONDRAGOVER #define DISPID_IHTMLDOCUMENT7_ONDROP DISPID_EVPROP_ONDROP #define DISPID_IHTMLDOCUMENT7_ONDURATIONCHANGE DISPID_EVPROP_DURATIONCHANGE #define DISPID_IHTMLDOCUMENT7_ONEMPTIED DISPID_EVPROP_EMPTIED #define DISPID_IHTMLDOCUMENT7_ONENDED DISPID_EVPROP_ENDED #define DISPID_IHTMLDOCUMENT7_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLDOCUMENT7_ONFOCUS DISPID_EVPROP_ONFOCUS #define DISPID_IHTMLDOCUMENT7_ONINPUT DISPID_EVPROP_INPUT #define DISPID_IHTMLDOCUMENT7_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLDOCUMENT7_ONLOADEDDATA DISPID_EVPROP_LOADEDDATA #define DISPID_IHTMLDOCUMENT7_ONLOADEDMETADATA DISPID_EVPROP_LOADEDMETADATA #define DISPID_IHTMLDOCUMENT7_ONLOADSTART DISPID_EVPROP_LOADSTART #define DISPID_IHTMLDOCUMENT7_ONPAUSE DISPID_EVPROP_PAUSE #define DISPID_IHTMLDOCUMENT7_ONPLAY DISPID_EVPROP_PLAY #define DISPID_IHTMLDOCUMENT7_ONPLAYING DISPID_EVPROP_PLAYING #define DISPID_IHTMLDOCUMENT7_ONPROGRESS DISPID_EVPROP_PROGRESS #define DISPID_IHTMLDOCUMENT7_ONRATECHANGE DISPID_EVPROP_RATECHANGE #define DISPID_IHTMLDOCUMENT7_ONRESET DISPID_EVPROP_ONRESET #define DISPID_IHTMLDOCUMENT7_ONSCROLL DISPID_EVPROP_ONSCROLL #define DISPID_IHTMLDOCUMENT7_ONSEEKED DISPID_EVPROP_SEEKED #define DISPID_IHTMLDOCUMENT7_ONSEEKING DISPID_EVPROP_SEEKING #define DISPID_IHTMLDOCUMENT7_ONSELECT DISPID_EVPROP_ONSELECT #define DISPID_IHTMLDOCUMENT7_ONSTALLED DISPID_EVPROP_STALLED #define DISPID_IHTMLDOCUMENT7_ONSUBMIT DISPID_EVPROP_ONSUBMIT #define DISPID_IHTMLDOCUMENT7_ONSUSPEND DISPID_EVPROP_SUSPEND #define DISPID_IHTMLDOCUMENT7_ONTIMEUPDATE DISPID_EVPROP_TIMEUPDATE #define DISPID_IHTMLDOCUMENT7_ONVOLUMECHANGE DISPID_EVPROP_VOLUMECHANGE #define DISPID_IHTMLDOCUMENT7_ONWAITING DISPID_EVPROP_WAITING #define DISPID_IHTMLDOCUMENT7_NORMALIZE DISPID_OMDOCUMENT+134 #define DISPID_IHTMLDOCUMENT7_IMPORTNODE DISPID_OMDOCUMENT+135 #define DISPID_IHTMLDOCUMENT7_IE9_PARENTWINDOW DISPID_OMDOCUMENT+136 #define DISPID_IHTMLDOCUMENT7_IE9_BODY DISPID_OMDOCUMENT+137 #define DISPID_IHTMLDOCUMENT7_HEAD DISPID_OMDOCUMENT+138 /* IHTMLDocument8 */ #define DISPID_IHTMLDOCUMENT8_ONMSCONTENTZOOM DISPID_EVPROP_ONMSCONTENTZOOM #define DISPID_IHTMLDOCUMENT8_ONMSPOINTERDOWN DISPID_EVPROP_ONMSPOINTERDOWN #define DISPID_IHTMLDOCUMENT8_ONMSPOINTERMOVE DISPID_EVPROP_ONMSPOINTERMOVE #define DISPID_IHTMLDOCUMENT8_ONMSPOINTERUP DISPID_EVPROP_ONMSPOINTERUP #define DISPID_IHTMLDOCUMENT8_ONMSPOINTEROVER DISPID_EVPROP_ONMSPOINTEROVER #define DISPID_IHTMLDOCUMENT8_ONMSPOINTEROUT DISPID_EVPROP_ONMSPOINTEROUT #define DISPID_IHTMLDOCUMENT8_ONMSPOINTERCANCEL DISPID_EVPROP_ONMSPOINTERCANCEL #define DISPID_IHTMLDOCUMENT8_ONMSPOINTERHOVER DISPID_EVPROP_ONMSPOINTERHOVER #define DISPID_IHTMLDOCUMENT8_ONMSGESTURESTART DISPID_EVPROP_ONMSGESTURESTART #define DISPID_IHTMLDOCUMENT8_ONMSGESTURECHANGE DISPID_EVPROP_ONMSGESTURECHANGE #define DISPID_IHTMLDOCUMENT8_ONMSGESTUREEND DISPID_EVPROP_ONMSGESTUREEND #define DISPID_IHTMLDOCUMENT8_ONMSGESTUREHOLD DISPID_EVPROP_ONMSGESTUREHOLD #define DISPID_IHTMLDOCUMENT8_ONMSGESTURETAP DISPID_EVPROP_ONMSGESTURETAP #define DISPID_IHTMLDOCUMENT8_ONMSGESTUREDOUBLETAP DISPID_EVPROP_ONMSGESTUREDOUBLETAP #define DISPID_IHTMLDOCUMENT8_ONMSINERTIASTART DISPID_EVPROP_ONMSINERTIASTART #define DISPID_IHTMLDOCUMENT8_ELEMENTSFROMPOINT DISPID_OMDOCUMENT+139 #define DISPID_IHTMLDOCUMENT8_ELEMENTSFROMRECT DISPID_OMDOCUMENT+140 #define DISPID_IHTMLDOCUMENT8_ONMSMANIPULATIONSTATECHANGED DISPID_EVPROP_ONMSMANIPULATIONSTATECHANGED #define DISPID_IHTMLDOCUMENT8_MSCAPSLOCKWARNINGOFF DISPID_OMDOCUMENT+141 /* DWebBridgeEvents */ #define DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT 1 #define DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE #define DISPID_DWEBBRIDGEEVENTS_ONCLICK DISPID_HTMLDOCUMENTEVENTS_ONCLICK #define DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK #define DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN #define DISPID_DWEBBRIDGEEVENTS_ONKEYUP DISPID_HTMLDOCUMENTEVENTS_ONKEYUP #define DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS #define DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN #define DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE #define DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP /* IWebBridge */ #define DISPID_IWEBBRIDGE_URL 1 #define DISPID_IWEBBRIDGE_SCROLLBAR 2 #define DISPID_IWEBBRIDGE_EMBED 3 #define DISPID_IWEBBRIDGE_EVENT DISPID_IHTMLWINDOW2_EVENT #define DISPID_IWEBBRIDGE_READYSTATE DISPID_READYSTATE #define DISPID_IWEBBRIDGE_ABOUTBOX DISPID_ABOUTBOX /* IHTMLEmbedElement */ #define DISPID_IHTMLEMBEDELEMENT_HIDDEN DISPID_OBJECT+10 #define DISPID_IHTMLEMBEDELEMENT_PALETTE DISPID_OBJECT+4 #define DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE DISPID_OBJECT+5 #define DISPID_IHTMLEMBEDELEMENT_SRC DISPID_OBJECT+6 #define DISPID_IHTMLEMBEDELEMENT_UNITS DISPID_OBJECT+8 #define DISPID_IHTMLEMBEDELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLEMBEDELEMENT_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLEMBEDELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT /* IHTMLEmbedElement2 */ #define DISPID_IHTMLEMBEDELEMENT2_IE8_SRC DISPID_IE8_EMBED #define DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE DISPID_IE8_EMBED+1 /* IHTMLElementCollection */ #define DISPID_IHTMLELEMENTCOLLECTION_LENGTH DISPID_COLLECTION #define DISPID_IHTMLELEMENTCOLLECTION_TOSTRING (DISPID_COLLECTION+1) #define DISPID_IHTMLELEMENTCOLLECTION_TAGS (DISPID_COLLECTION+2) #define DISPID_IHTMLELEMENTCOLLECTION__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLELEMENTCOLLECTION_ITEM DISPID_VALUE /* IHTMLElementCollection2 */ #define DISPID_IHTMLELEMENTCOLLECTION2_URNS DISPID_COLLECTION+5 /* IHTMLElementCollection3 */ #define DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM DISPID_COLLECTION+6 /* IHTMLAttributeCollection */ #define DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH DISPID_COLLECTION #define DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLATTRIBUTECOLLECTION_ITEM DISPID_VALUE /* IHTMLAttributeCollection2 */ #define DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM DISPID_COLLECTION+1 #define DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM DISPID_COLLECTION+2 #define DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM DISPID_COLLECTION+3 /* IHTMLAttributeCollection3 */ #define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM DISPID_IE8_NAMEDNODEMAP #define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM DISPID_IE8_NAMEDNODEMAP+1 #define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM DISPID_IE8_NAMEDNODEMAP+2 #define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM DISPID_IE8_NAMEDNODEMAP+4 #define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH DISPID_IE8_NAMEDNODEMAP+3 /* IHTMLDOMChildrenCollection */ #define DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH DISPID_COLLECTION #define DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM DISPID_VALUE /* HTMLElementEvents */ #define DISPID_HTMLELEMENTEVENTS_ONHELP DISPID_EVMETH_ONHELP #define DISPID_HTMLELEMENTEVENTS_ONCLICK DISPID_EVMETH_ONCLICK #define DISPID_HTMLELEMENTEVENTS_ONDBLCLICK DISPID_EVMETH_ONDBLCLICK #define DISPID_HTMLELEMENTEVENTS_ONKEYPRESS DISPID_EVMETH_ONKEYPRESS #define DISPID_HTMLELEMENTEVENTS_ONKEYDOWN DISPID_EVMETH_ONKEYDOWN #define DISPID_HTMLELEMENTEVENTS_ONKEYUP DISPID_EVMETH_ONKEYUP #define DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT DISPID_EVMETH_ONMOUSEOUT #define DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER DISPID_EVMETH_ONMOUSEOVER #define DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE DISPID_EVMETH_ONMOUSEMOVE #define DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN DISPID_EVMETH_ONMOUSEDOWN #define DISPID_HTMLELEMENTEVENTS_ONMOUSEUP DISPID_EVMETH_ONMOUSEUP #define DISPID_HTMLELEMENTEVENTS_ONSELECTSTART DISPID_EVMETH_ONSELECTSTART #define DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE DISPID_EVMETH_ONFILTER #define DISPID_HTMLELEMENTEVENTS_ONDRAGSTART DISPID_EVMETH_ONDRAGSTART #define DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE DISPID_EVMETH_ONBEFOREUPDATE #define DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE DISPID_EVMETH_ONAFTERUPDATE #define DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE DISPID_EVMETH_ONERRORUPDATE #define DISPID_HTMLELEMENTEVENTS_ONROWEXIT DISPID_EVMETH_ONROWEXIT #define DISPID_HTMLELEMENTEVENTS_ONROWENTER DISPID_EVMETH_ONROWENTER #define DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED DISPID_EVMETH_ONDATASETCHANGED #define DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE DISPID_EVMETH_ONDATAAVAILABLE #define DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE #define DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE DISPID_EVMETH_ONLOSECAPTURE #define DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE DISPID_EVMETH_ONPROPERTYCHANGE #define DISPID_HTMLELEMENTEVENTS_ONSCROLL DISPID_EVMETH_ONSCROLL #define DISPID_HTMLELEMENTEVENTS_ONFOCUS DISPID_EVMETH_ONFOCUS #define DISPID_HTMLELEMENTEVENTS_ONBLUR DISPID_EVMETH_ONBLUR #define DISPID_HTMLELEMENTEVENTS_ONRESIZE DISPID_EVMETH_ONRESIZE #define DISPID_HTMLELEMENTEVENTS_ONDRAG DISPID_EVMETH_ONDRAG #define DISPID_HTMLELEMENTEVENTS_ONDRAGEND DISPID_EVMETH_ONDRAGEND #define DISPID_HTMLELEMENTEVENTS_ONDRAGENTER DISPID_EVMETH_ONDRAGENTER #define DISPID_HTMLELEMENTEVENTS_ONDRAGOVER DISPID_EVMETH_ONDRAGOVER #define DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE DISPID_EVMETH_ONDRAGLEAVE #define DISPID_HTMLELEMENTEVENTS_ONDROP DISPID_EVMETH_ONDROP #define DISPID_HTMLELEMENTEVENTS_ONBEFORECUT DISPID_EVMETH_ONBEFORECUT #define DISPID_HTMLELEMENTEVENTS_ONCUT DISPID_EVMETH_ONCUT #define DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY DISPID_EVMETH_ONBEFORECOPY #define DISPID_HTMLELEMENTEVENTS_ONCOPY DISPID_EVMETH_ONCOPY #define DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE DISPID_EVMETH_ONBEFOREPASTE #define DISPID_HTMLELEMENTEVENTS_ONPASTE DISPID_EVMETH_ONPASTE #define DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU DISPID_EVMETH_ONCONTEXTMENU #define DISPID_HTMLELEMENTEVENTS_ONROWSDELETE DISPID_EVMETH_ONROWSDELETE #define DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED DISPID_EVMETH_ONROWSINSERTED #define DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE DISPID_EVMETH_ONCELLCHANGE #define DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE #define DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS DISPID_EVMETH_ONBEFOREEDITFOCUS #define DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE DISPID_EVMETH_ONLAYOUTCOMPLETE #define DISPID_HTMLELEMENTEVENTS_ONPAGE DISPID_EVMETH_ONPAGE #define DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE #define DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE DISPID_EVMETH_ONBEFOREACTIVATE #define DISPID_HTMLELEMENTEVENTS_ONMOVE DISPID_EVMETH_ONMOVE #define DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT DISPID_EVMETH_ONCONTROLSELECT #define DISPID_HTMLELEMENTEVENTS_ONMOVESTART DISPID_EVMETH_ONMOVESTART #define DISPID_HTMLELEMENTEVENTS_ONMOVEEND DISPID_EVMETH_ONMOVEEND #define DISPID_HTMLELEMENTEVENTS_ONRESIZESTART DISPID_EVMETH_ONRESIZESTART #define DISPID_HTMLELEMENTEVENTS_ONRESIZEEND DISPID_EVMETH_ONRESIZEEND #define DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER DISPID_EVMETH_ONMOUSEENTER #define DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE DISPID_EVMETH_ONMOUSELEAVE #define DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL DISPID_EVMETH_ONMOUSEWHEEL #define DISPID_HTMLELEMENTEVENTS_ONACTIVATE DISPID_EVMETH_ONACTIVATE #define DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE DISPID_EVMETH_ONDEACTIVATE #define DISPID_HTMLELEMENTEVENTS_ONFOCUSIN DISPID_EVMETH_ONFOCUSIN #define DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT DISPID_EVMETH_ONFOCUSOUT /* HTMLElementEvents2 */ #define DISPID_HTMLELEMENTEVENTS2_ONHELP DISPID_EVMETH_ONHELP #define DISPID_HTMLELEMENTEVENTS2_ONCLICK DISPID_EVMETH_ONCLICK #define DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK DISPID_EVMETH_ONDBLCLICK #define DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS DISPID_EVMETH_ONKEYPRESS #define DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN DISPID_EVMETH_ONKEYDOWN #define DISPID_HTMLELEMENTEVENTS2_ONKEYUP DISPID_EVMETH_ONKEYUP #define DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT DISPID_EVMETH_ONMOUSEOUT #define DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER DISPID_EVMETH_ONMOUSEOVER #define DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE DISPID_EVMETH_ONMOUSEMOVE #define DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN DISPID_EVMETH_ONMOUSEDOWN #define DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP DISPID_EVMETH_ONMOUSEUP #define DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART DISPID_EVMETH_ONSELECTSTART #define DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE DISPID_EVMETH_ONFILTER #define DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART DISPID_EVMETH_ONDRAGSTART #define DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE DISPID_EVMETH_ONBEFOREUPDATE #define DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE DISPID_EVMETH_ONAFTERUPDATE #define DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE DISPID_EVMETH_ONERRORUPDATE #define DISPID_HTMLELEMENTEVENTS2_ONROWEXIT DISPID_EVMETH_ONROWEXIT #define DISPID_HTMLELEMENTEVENTS2_ONROWENTER DISPID_EVMETH_ONROWENTER #define DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED DISPID_EVMETH_ONDATASETCHANGED #define DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE DISPID_EVMETH_ONDATAAVAILABLE #define DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE #define DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE DISPID_EVMETH_ONLOSECAPTURE #define DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE DISPID_EVMETH_ONPROPERTYCHANGE #define DISPID_HTMLELEMENTEVENTS2_ONSCROLL DISPID_EVMETH_ONSCROLL #define DISPID_HTMLELEMENTEVENTS2_ONFOCUS DISPID_EVMETH_ONFOCUS #define DISPID_HTMLELEMENTEVENTS2_ONBLUR DISPID_EVMETH_ONBLUR #define DISPID_HTMLELEMENTEVENTS2_ONRESIZE DISPID_EVMETH_ONRESIZE #define DISPID_HTMLELEMENTEVENTS2_ONDRAG DISPID_EVMETH_ONDRAG #define DISPID_HTMLELEMENTEVENTS2_ONDRAGEND DISPID_EVMETH_ONDRAGEND #define DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER DISPID_EVMETH_ONDRAGENTER #define DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER DISPID_EVMETH_ONDRAGOVER #define DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE DISPID_EVMETH_ONDRAGLEAVE #define DISPID_HTMLELEMENTEVENTS2_ONDROP DISPID_EVMETH_ONDROP #define DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT DISPID_EVMETH_ONBEFORECUT #define DISPID_HTMLELEMENTEVENTS2_ONCUT DISPID_EVMETH_ONCUT #define DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY DISPID_EVMETH_ONBEFORECOPY #define DISPID_HTMLELEMENTEVENTS2_ONCOPY DISPID_EVMETH_ONCOPY #define DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE DISPID_EVMETH_ONBEFOREPASTE #define DISPID_HTMLELEMENTEVENTS2_ONPASTE DISPID_EVMETH_ONPASTE #define DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU DISPID_EVMETH_ONCONTEXTMENU #define DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE DISPID_EVMETH_ONROWSDELETE #define DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED DISPID_EVMETH_ONROWSINSERTED #define DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE DISPID_EVMETH_ONCELLCHANGE #define DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE #define DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE DISPID_EVMETH_ONLAYOUTCOMPLETE #define DISPID_HTMLELEMENTEVENTS2_ONPAGE DISPID_EVMETH_ONPAGE #define DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER DISPID_EVMETH_ONMOUSEENTER #define DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE DISPID_EVMETH_ONMOUSELEAVE #define DISPID_HTMLELEMENTEVENTS2_ONACTIVATE DISPID_EVMETH_ONACTIVATE #define DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE DISPID_EVMETH_ONDEACTIVATE #define DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE #define DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE DISPID_EVMETH_ONBEFOREACTIVATE #define DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN DISPID_EVMETH_ONFOCUSIN #define DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT DISPID_EVMETH_ONFOCUSOUT #define DISPID_HTMLELEMENTEVENTS2_ONMOVE DISPID_EVMETH_ONMOVE #define DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT DISPID_EVMETH_ONCONTROLSELECT #define DISPID_HTMLELEMENTEVENTS2_ONMOVESTART DISPID_EVMETH_ONMOVESTART #define DISPID_HTMLELEMENTEVENTS2_ONMOVEEND DISPID_EVMETH_ONMOVEEND #define DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART DISPID_EVMETH_ONRESIZESTART #define DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND DISPID_EVMETH_ONRESIZEEND #define DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL DISPID_EVMETH_ONMOUSEWHEEL /* IHTMLElement */ #define DISPID_IHTMLELEMENT_SETATTRIBUTE (DISPID_HTMLOBJECT+1) #define DISPID_IHTMLELEMENT_GETATTRIBUTE (DISPID_HTMLOBJECT+2) #define DISPID_IHTMLELEMENT_REMOVEATTRIBUTE (DISPID_HTMLOBJECT+3) #define DISPID_IHTMLELEMENT_CLASSNAME (DISPID_ELEMENT+1) #define DISPID_IHTMLELEMENT_ID (DISPID_ELEMENT+2) #define DISPID_IHTMLELEMENT_TAGNAME (DISPID_ELEMENT+4) #define DISPID_IHTMLELEMENT_OFFSETLEFT (DISPID_ELEMENT+8) #define DISPID_IHTMLELEMENT_OFFSETTOP (DISPID_ELEMENT+9) #define DISPID_IHTMLELEMENT_OFFSETWIDTH (DISPID_ELEMENT+10) #define DISPID_IHTMLELEMENT_OFFSETHEIGHT (DISPID_ELEMENT+11) #define DISPID_IHTMLELEMENT_OFFSETPARENT (DISPID_ELEMENT+12) #define DISPID_IHTMLELEMENT_DOCUMENT (DISPID_ELEMENT+18) #define DISPID_IHTMLELEMENT_SCROLLINTOVIEW (DISPID_ELEMENT+19) #define DISPID_IHTMLELEMENT_CONTAINS (DISPID_ELEMENT+20) #define DISPID_IHTMLELEMENT_SOURCEINDEX (DISPID_ELEMENT+24) #define DISPID_IHTMLELEMENT_RECORDNUMBER (DISPID_ELEMENT+25) #define DISPID_IHTMLELEMENT_INNERHTML (DISPID_ELEMENT+26) #define DISPID_IHTMLELEMENT_INNERTEXT (DISPID_ELEMENT+27) #define DISPID_IHTMLELEMENT_OUTERHTML (DISPID_ELEMENT+28) #define DISPID_IHTMLELEMENT_OUTERTEXT (DISPID_ELEMENT+29) #define DISPID_IHTMLELEMENT_INSERTADJACENTHTML (DISPID_ELEMENT+30) #define DISPID_IHTMLELEMENT_INSERTADJACENTTEXT (DISPID_ELEMENT+31) #define DISPID_IHTMLELEMENT_PARENTTEXTEDIT (DISPID_ELEMENT+32) #define DISPID_IHTMLELEMENT_ISTEXTEDIT (DISPID_ELEMENT+34) #define DISPID_IHTMLELEMENT_CLICK (DISPID_ELEMENT+33) #define DISPID_IHTMLELEMENT_FILTERS (DISPID_ELEMENT+35) #define DISPID_IHTMLELEMENT_TOSTRING (DISPID_ELEMENT+36) #define DISPID_IHTMLELEMENT_CHILDREN (DISPID_ELEMENT+37) #define DISPID_IHTMLELEMENT_ALL (DISPID_ELEMENT+38) #define DISPID_IHTMLELEMENT_PARENTELEMENT STDPROPID_XOBJ_PARENT #define DISPID_IHTMLELEMENT_STYLE STDPROPID_XOBJ_STYLE #define DISPID_IHTMLELEMENT_ONHELP DISPID_EVPROP_ONHELP #define DISPID_IHTMLELEMENT_ONCLICK DISPID_EVPROP_ONCLICK #define DISPID_IHTMLELEMENT_ONDBLCLICK DISPID_EVPROP_ONDBLCLICK #define DISPID_IHTMLELEMENT_ONKEYDOWN DISPID_EVPROP_ONKEYDOWN #define DISPID_IHTMLELEMENT_ONKEYUP DISPID_EVPROP_ONKEYUP #define DISPID_IHTMLELEMENT_ONKEYPRESS DISPID_EVPROP_ONKEYPRESS #define DISPID_IHTMLELEMENT_ONMOUSEOUT DISPID_EVPROP_ONMOUSEOUT #define DISPID_IHTMLELEMENT_ONMOUSEOVER DISPID_EVPROP_ONMOUSEOVER #define DISPID_IHTMLELEMENT_ONMOUSEMOVE DISPID_EVPROP_ONMOUSEMOVE #define DISPID_IHTMLELEMENT_ONMOUSEDOWN DISPID_EVPROP_ONMOUSEDOWN #define DISPID_IHTMLELEMENT_ONMOUSEUP DISPID_EVPROP_ONMOUSEUP #define DISPID_IHTMLELEMENT_TITLE STDPROPID_XOBJ_CONTROLTIPTEXT #define DISPID_IHTMLELEMENT_LANGUAGE DISPID_A_LANGUAGE #define DISPID_IHTMLELEMENT_ONSELECTSTART DISPID_EVPROP_ONSELECTSTART #define DISPID_IHTMLELEMENT_LANG DISPID_A_LANG #define DISPID_IHTMLELEMENT_ONDRAGSTART DISPID_EVPROP_ONDRAGSTART #define DISPID_IHTMLELEMENT_ONBEFOREUPDATE DISPID_EVPROP_ONBEFOREUPDATE #define DISPID_IHTMLELEMENT_ONAFTERUPDATE DISPID_EVPROP_ONAFTERUPDATE #define DISPID_IHTMLELEMENT_ONERRORUPDATE DISPID_EVPROP_ONERRORUPDATE #define DISPID_IHTMLELEMENT_ONROWEXIT DISPID_EVPROP_ONROWEXIT #define DISPID_IHTMLELEMENT_ONROWENTER DISPID_EVPROP_ONROWENTER #define DISPID_IHTMLELEMENT_ONDATASETCHANGED DISPID_EVPROP_ONDATASETCHANGED #define DISPID_IHTMLELEMENT_ONDATAAVAILABLE DISPID_EVPROP_ONDATAAVAILABLE #define DISPID_IHTMLELEMENT_ONDATASETCOMPLETE DISPID_EVPROP_ONDATASETCOMPLETE #define DISPID_IHTMLELEMENT_ONFILTERCHANGE DISPID_EVPROP_ONFILTER /* IHTMLElement2 */ #define DISPID_IHTMLELEMENT2_SCOPENAME DISPID_ELEMENT+39 #define DISPID_IHTMLELEMENT2_SETCAPTURE DISPID_ELEMENT+40 #define DISPID_IHTMLELEMENT2_RELEASECAPTURE DISPID_ELEMENT+41 #define DISPID_IHTMLELEMENT2_ONLOSECAPTURE DISPID_EVPROP_ONLOSECAPTURE #define DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT DISPID_ELEMENT+42 #define DISPID_IHTMLELEMENT2_DOSCROLL DISPID_ELEMENT+43 #define DISPID_IHTMLELEMENT2_ONSCROLL DISPID_EVPROP_ONSCROLL #define DISPID_IHTMLELEMENT2_ONDRAG DISPID_EVPROP_ONDRAG #define DISPID_IHTMLELEMENT2_ONDRAGEND DISPID_EVPROP_ONDRAGEND #define DISPID_IHTMLELEMENT2_ONDRAGENTER DISPID_EVPROP_ONDRAGENTER #define DISPID_IHTMLELEMENT2_ONDRAGOVER DISPID_EVPROP_ONDRAGOVER #define DISPID_IHTMLELEMENT2_ONDRAGLEAVE DISPID_EVPROP_ONDRAGLEAVE #define DISPID_IHTMLELEMENT2_ONDROP DISPID_EVPROP_ONDROP #define DISPID_IHTMLELEMENT2_ONBEFORECUT DISPID_EVPROP_ONBEFORECUT #define DISPID_IHTMLELEMENT2_ONCUT DISPID_EVPROP_ONCUT #define DISPID_IHTMLELEMENT2_ONBEFORECOPY DISPID_EVPROP_ONBEFORECOPY #define DISPID_IHTMLELEMENT2_ONCOPY DISPID_EVPROP_ONCOPY #define DISPID_IHTMLELEMENT2_ONBEFOREPASTE DISPID_EVPROP_ONBEFOREPASTE #define DISPID_IHTMLELEMENT2_ONPASTE DISPID_EVPROP_ONPASTE #define DISPID_IHTMLELEMENT2_CURRENTSTYLE DISPID_ELEMENT+7 #define DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE DISPID_EVPROP_ONPROPERTYCHANGE #define DISPID_IHTMLELEMENT2_GETCLIENTRECTS DISPID_ELEMENT+44 #define DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT DISPID_ELEMENT+45 #define DISPID_IHTMLELEMENT2_SETEXPRESSION DISPID_HTMLOBJECT+4 #define DISPID_IHTMLELEMENT2_GETEXPRESSION DISPID_HTMLOBJECT+5 #define DISPID_IHTMLELEMENT2_REMOVEEXPRESSION DISPID_HTMLOBJECT+6 #define DISPID_IHTMLELEMENT2_TABINDEX STDPROPID_XOBJ_TABINDEX #define DISPID_IHTMLELEMENT2_FOCUS DISPID_SITE #define DISPID_IHTMLELEMENT2_ACCESSKEY DISPID_SITE+5 #define DISPID_IHTMLELEMENT2_ONBLUR DISPID_EVPROP_ONBLUR #define DISPID_IHTMLELEMENT2_ONFOCUS DISPID_EVPROP_ONFOCUS #define DISPID_IHTMLELEMENT2_ONRESIZE DISPID_EVPROP_ONRESIZE #define DISPID_IHTMLELEMENT2_BLUR DISPID_SITE+2 #define DISPID_IHTMLELEMENT2_ADDFILTER DISPID_SITE+17 #define DISPID_IHTMLELEMENT2_REMOVEFILTER DISPID_SITE+18 #define DISPID_IHTMLELEMENT2_CLIENTHEIGHT DISPID_SITE+19 #define DISPID_IHTMLELEMENT2_CLIENTWIDTH DISPID_SITE+20 #define DISPID_IHTMLELEMENT2_CLIENTTOP DISPID_SITE+21 #define DISPID_IHTMLELEMENT2_CLIENTLEFT DISPID_SITE+22 #define DISPID_IHTMLELEMENT2_ATTACHEVENT DISPID_HTMLOBJECT+7 #define DISPID_IHTMLELEMENT2_DETACHEVENT DISPID_HTMLOBJECT+8 #define DISPID_IHTMLELEMENT2_READYSTATE DISPID_A_READYSTATE #define DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE #define DISPID_IHTMLELEMENT2_ONROWSDELETE DISPID_EVPROP_ONROWSDELETE #define DISPID_IHTMLELEMENT2_ONROWSINSERTED DISPID_EVPROP_ONROWSINSERTED #define DISPID_IHTMLELEMENT2_ONCELLCHANGE DISPID_EVPROP_ONCELLCHANGE #define DISPID_IHTMLELEMENT2_DIR DISPID_A_DIR #define DISPID_IHTMLELEMENT2_CREATECONTROLRANGE DISPID_ELEMENT+56 #define DISPID_IHTMLELEMENT2_SCROLLHEIGHT DISPID_ELEMENT+57 #define DISPID_IHTMLELEMENT2_SCROLLWIDTH DISPID_ELEMENT+58 #define DISPID_IHTMLELEMENT2_SCROLLTOP DISPID_ELEMENT+59 #define DISPID_IHTMLELEMENT2_SCROLLLEFT DISPID_ELEMENT+60 #define DISPID_IHTMLELEMENT2_CLEARATTRIBUTES DISPID_ELEMENT+62 #define DISPID_IHTMLELEMENT2_MERGEATTRIBUTES DISPID_ELEMENT+63 #define DISPID_IHTMLELEMENT2_ONCONTEXTMENU DISPID_EVPROP_ONCONTEXTMENU #define DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT DISPID_ELEMENT+69 #define DISPID_IHTMLELEMENT2_APPLYELEMENT DISPID_ELEMENT+65 #define DISPID_IHTMLELEMENT2_GETADJACENTTEXT DISPID_ELEMENT+70 #define DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT DISPID_ELEMENT+71 #define DISPID_IHTMLELEMENT2_CANHAVECHILDREN DISPID_ELEMENT+72 #define DISPID_IHTMLELEMENT2_ADDBEHAVIOR DISPID_ELEMENT+80 #define DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR DISPID_ELEMENT+81 #define DISPID_IHTMLELEMENT2_RUNTIMESTYLE DISPID_ELEMENT+64 #define DISPID_IHTMLELEMENT2_BEHAVIORURNS DISPID_ELEMENT+82 #define DISPID_IHTMLELEMENT2_TAGURN DISPID_ELEMENT+83 #define DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS DISPID_EVPROP_ONBEFOREEDITFOCUS #define DISPID_IHTMLELEMENT2_READYSTATEVALUE DISPID_ELEMENT+84 #define DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME DISPID_ELEMENT+85 /* IHTMLElement3 */ #define DISPID_IHTMLELEMENT3_MERGEATTRIBUTES DISPID_ELEMENT+96 #define DISPID_IHTMLELEMENT3_ISMULTILINE DISPID_ELEMENT+97 #define DISPID_IHTMLELEMENT3_CANHAVEHTML DISPID_ELEMENT+98 #define DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE DISPID_EVPROP_ONLAYOUTCOMPLETE #define DISPID_IHTMLELEMENT3_ONPAGE DISPID_EVPROP_ONPAGE #define DISPID_IHTMLELEMENT3_INFLATEBLOCK DISPID_ELEMENT+100 #define DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE DISPID_EVPROP_ONBEFOREDEACTIVATE #define DISPID_IHTMLELEMENT3_SETACTIVE DISPID_ELEMENT+101 #define DISPID_IHTMLELEMENT3_CONTENTEDITABLE DISPID_A_EDITABLE #define DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE DISPID_ELEMENT+102 #define DISPID_IHTMLELEMENT3_HIDEFOCUS DISPID_A_HIDEFOCUS #define DISPID_IHTMLELEMENT3_DISABLED STDPROPID_XOBJ_DISABLED #define DISPID_IHTMLELEMENT3_ISDISABLED DISPID_ELEMENT+105 #define DISPID_IHTMLELEMENT3_ONMOVE DISPID_EVPROP_ONMOVE #define DISPID_IHTMLELEMENT3_ONCONTROLSELECT DISPID_EVPROP_ONCONTROLSELECT #define DISPID_IHTMLELEMENT3_FIREEVENT DISPID_ELEMENT+106 #define DISPID_IHTMLELEMENT3_ONRESIZESTART DISPID_EVPROP_ONRESIZESTART #define DISPID_IHTMLELEMENT3_ONRESIZEEND DISPID_EVPROP_ONRESIZEEND #define DISPID_IHTMLELEMENT3_ONMOVESTART DISPID_EVPROP_ONMOVESTART #define DISPID_IHTMLELEMENT3_ONMOVEEND DISPID_EVPROP_ONMOVEEND #define DISPID_IHTMLELEMENT3_ONMOUSEENTER DISPID_EVPROP_ONMOUSEENTER #define DISPID_IHTMLELEMENT3_ONMOUSELEAVE DISPID_EVPROP_ONMOUSELEAVE #define DISPID_IHTMLELEMENT3_ONACTIVATE DISPID_EVPROP_ONACTIVATE #define DISPID_IHTMLELEMENT3_ONDEACTIVATE DISPID_EVPROP_ONDEACTIVATE #define DISPID_IHTMLELEMENT3_DRAGDROP DISPID_ELEMENT+107 #define DISPID_IHTMLELEMENT3_GLYPHMODE DISPID_ELEMENT+108 /* IHTMLElement4 */ #define DISPID_IHTMLELEMENT4_ONMOUSEWHEEL DISPID_EVPROP_ONMOUSEWHEEL #define DISPID_IHTMLELEMENT4_NORMALIZE DISPID_ELEMENT+112 #define DISPID_IHTMLELEMENT4_GETATTRIBUTENODE DISPID_ELEMENT+109 #define DISPID_IHTMLELEMENT4_SETATTRIBUTENODE DISPID_ELEMENT+110 #define DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE DISPID_ELEMENT+111 #define DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE DISPID_EVPROP_ONBEFOREACTIVATE #define DISPID_IHTMLELEMENT4_ONFOCUSIN DISPID_EVPROP_ONFOCUSIN #define DISPID_IHTMLELEMENT4_ONFOCUSOUT DISPID_EVPROP_ONFOCUSOUT /* IElementSelector */ #define DISPID_IELEMENTSELECTOR_QUERYSELECTOR DISPID_ELEMENT+114 #define DISPID_IELEMENTSELECTOR_QUERYSELECTORALL DISPID_ELEMENT+115 /* IHTMLElement5 */ #define DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE DISPID_IE8_ELEMENT #define DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE DISPID_IE8_ELEMENT+1 #define DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE DISPID_IE8_ELEMENT+2 #define DISPID_IHTMLELEMENT5_HASATTRIBUTE DISPID_IE8_ELEMENT+3 #define DISPID_IHTMLELEMENT5_ROLE DISPID_IE8_ELEMENT+4 #define DISPID_IHTMLELEMENT5_ARIABUSY DISPID_IE8_ELEMENT+5 #define DISPID_IHTMLELEMENT5_ARIACHECKED DISPID_IE8_ELEMENT+6 #define DISPID_IHTMLELEMENT5_ARIADISABLED DISPID_IE8_ELEMENT+7 #define DISPID_IHTMLELEMENT5_ARIAEXPANDED DISPID_IE8_ELEMENT+8 #define DISPID_IHTMLELEMENT5_ARIAHASPOPUP DISPID_IE8_ELEMENT+9 #define DISPID_IHTMLELEMENT5_ARIAHIDDEN DISPID_IE8_ELEMENT+10 #define DISPID_IHTMLELEMENT5_ARIAINVALID DISPID_IE8_ELEMENT+11 #define DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE DISPID_IE8_ELEMENT+12 #define DISPID_IHTMLELEMENT5_ARIAPRESSED DISPID_IE8_ELEMENT+13 #define DISPID_IHTMLELEMENT5_ARIAREADONLY DISPID_IE8_ELEMENT+14 #define DISPID_IHTMLELEMENT5_ARIAREQUIRED DISPID_IE8_ELEMENT+15 #define DISPID_IHTMLELEMENT5_ARIASECRET DISPID_IE8_ELEMENT+16 #define DISPID_IHTMLELEMENT5_ARIASELECTED DISPID_IE8_ELEMENT+17 #define DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE DISPID_IE8_ELEMENT+18 #define DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE DISPID_IE8_ELEMENT+19 #define DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE DISPID_IE8_ELEMENT+20 #define DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES DISPID_IE8_ELEMENT+21 #define DISPID_IHTMLELEMENT5_ARIAVALUENOW DISPID_IE8_ELEMENT+22 #define DISPID_IHTMLELEMENT5_ARIAPOSINSET DISPID_IE8_ELEMENT+23 #define DISPID_IHTMLELEMENT5_ARIASETSIZE DISPID_IE8_ELEMENT+24 #define DISPID_IHTMLELEMENT5_ARIALEVEL DISPID_IE8_ELEMENT+25 #define DISPID_IHTMLELEMENT5_ARIAVALUEMIN DISPID_IE8_ELEMENT+26 #define DISPID_IHTMLELEMENT5_ARIAVALUEMAX DISPID_IE8_ELEMENT+27 #define DISPID_IHTMLELEMENT5_ARIACONTROLS DISPID_IE8_ELEMENT+28 #define DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY DISPID_IE8_ELEMENT+29 #define DISPID_IHTMLELEMENT5_ARIAFLOWTO DISPID_IE8_ELEMENT+30 #define DISPID_IHTMLELEMENT5_ARIALABELLEDBY DISPID_IE8_ELEMENT+31 #define DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT DISPID_IE8_ELEMENT+32 #define DISPID_IHTMLELEMENT5_ARIAOWNS DISPID_IE8_ELEMENT+33 #define DISPID_IHTMLELEMENT5_HASATTRIBUTES DISPID_IE8_ELEMENT+34 #define DISPID_IHTMLELEMENT5_ARIALIVE DISPID_IE8_ELEMENT+35 #define DISPID_IHTMLELEMENT5_ARIARELEVANT DISPID_IE8_ELEMENT+36 /* IHTMLElement6 */ #define DISPID_IHTMLELEMENT6_GETATTRIBUTENS DISPID_IE9_ELEMENT+3 #define DISPID_IHTMLELEMENT6_SETATTRIBUTENS DISPID_IE9_ELEMENT+4 #define DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS DISPID_IE9_ELEMENT+5 #define DISPID_IHTMLELEMENT6_GETATTRIBUTENODENS DISPID_IE9_ELEMENT #define DISPID_IHTMLELEMENT6_SETATTRIBUTENODENS DISPID_IE9_ELEMENT+1 #define DISPID_IHTMLELEMENT6_HASATTRIBUTENS DISPID_IE9_ELEMENT+2 #define DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTE DISPID_IE9_ELEMENT+10 #define DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE DISPID_IE9_ELEMENT+11 #define DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTE DISPID_IE9_ELEMENT+12 #define DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTENODE DISPID_IE9_ELEMENT+6 #define DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTENODE DISPID_IE9_ELEMENT+7 #define DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTENODE DISPID_IE9_ELEMENT+8 #define DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTE DISPID_IE9_ELEMENT+9 #define DISPID_IHTMLELEMENT6_GETELEMENTSBYTAGNAMENS DISPID_IE9_ELEMENT+13 #define DISPID_IHTMLELEMENT6_IE9_TAGNAME DISPID_IE9_ELEMENT+15 #define DISPID_IHTMLELEMENT6_IE9_NODENAME DISPID_IE9_ELEMENT+16 #define DISPID_IHTMLELEMENT6_GETELEMENTSBYCLASSNAME DISPID_IE9_ELEMENT+17 #define DISPID_IHTMLELEMENT6_MSMATCHESSELECTOR DISPID_IE9_ELEMENT+28 #define DISPID_IHTMLELEMENT6_ONABORT DISPID_EVPROP_ONABORT #define DISPID_IHTMLELEMENT6_ONCANPLAY DISPID_EVPROP_CANPLAY #define DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH DISPID_EVPROP_CANPLAYTHROUGH #define DISPID_IHTMLELEMENT6_ONCHANGE DISPID_EVPROP_ONCHANGE #define DISPID_IHTMLELEMENT6_ONDURATIONCHANGE DISPID_EVPROP_DURATIONCHANGE #define DISPID_IHTMLELEMENT6_ONEMPTIED DISPID_EVPROP_EMPTIED #define DISPID_IHTMLELEMENT6_ONENDED DISPID_EVPROP_ENDED #define DISPID_IHTMLELEMENT6_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLELEMENT6_ONINPUT DISPID_EVPROP_INPUT #define DISPID_IHTMLELEMENT6_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLELEMENT6_ONLOADEDDATA DISPID_EVPROP_LOADEDDATA #define DISPID_IHTMLELEMENT6_ONLOADEDMETADATA DISPID_EVPROP_LOADEDMETADATA #define DISPID_IHTMLELEMENT6_ONLOADSTART DISPID_EVPROP_LOADSTART #define DISPID_IHTMLELEMENT6_ONPAUSE DISPID_EVPROP_PAUSE #define DISPID_IHTMLELEMENT6_ONPLAY DISPID_EVPROP_PLAY #define DISPID_IHTMLELEMENT6_ONPLAYING DISPID_EVPROP_PLAYING #define DISPID_IHTMLELEMENT6_ONPROGRESS DISPID_EVPROP_PROGRESS #define DISPID_IHTMLELEMENT6_ONRATECHANGE DISPID_EVPROP_RATECHANGE #define DISPID_IHTMLELEMENT6_ONRESET DISPID_EVPROP_ONRESET #define DISPID_IHTMLELEMENT6_ONSEEKED DISPID_EVPROP_SEEKED #define DISPID_IHTMLELEMENT6_ONSEEKING DISPID_EVPROP_SEEKING #define DISPID_IHTMLELEMENT6_ONSELECT DISPID_EVPROP_ONSELECT #define DISPID_IHTMLELEMENT6_ONSTALLED DISPID_EVPROP_STALLED #define DISPID_IHTMLELEMENT6_ONSUBMIT DISPID_EVPROP_ONSUBMIT #define DISPID_IHTMLELEMENT6_ONSUSPEND DISPID_EVPROP_SUSPEND #define DISPID_IHTMLELEMENT6_ONTIMEUPDATE DISPID_EVPROP_TIMEUPDATE #define DISPID_IHTMLELEMENT6_ONVOLUMECHANGE DISPID_EVPROP_VOLUMECHANGE #define DISPID_IHTMLELEMENT6_ONWAITING DISPID_EVPROP_WAITING #define DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES DISPID_IE9_ELEMENT+29 /* IElementTraversal */ #define DISPID_IELEMENTTRAVERSAL_FIRSTELEMENTCHILD DISPID_IE9_ELEMENT+22 #define DISPID_IELEMENTTRAVERSAL_LASTELEMENTCHILD DISPID_IE9_ELEMENT+23 #define DISPID_IELEMENTTRAVERSAL_PREVIOUSELEMENTSIBLING DISPID_IE9_ELEMENT+24 #define DISPID_IELEMENTTRAVERSAL_NEXTELEMENTSIBLING DISPID_IE9_ELEMENT+25 #define DISPID_IELEMENTTRAVERSAL_CHILDELEMENTCOUNT DISPID_IE9_ELEMENT+26 /* IHTMLGenericElement */ #define DISPID_IHTMLGENERICELEMENT_RECORDSET DISPID_GENERIC+1 #define DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET DISPID_GENERIC+2 /* IHTMLUniqueName */ #define DISPID_IHTMLUNIQUENAME_UNIQUENUMBER DISPID_ELEMENT+54 #define DISPID_IHTMLUNIQUENAME_UNIQUEID DISPID_ELEMENT+55 /* IHTMLDatabinding */ #define DISPID_IHTMLDATABINDING_DATAFLD DISPID_ELEMENT+21 #define DISPID_IHTMLDATABINDING_DATASRC DISPID_ELEMENT+22 #define DISPID_IHTMLDATABINDING_DATAFORMATAS DISPID_ELEMENT+23 /* IHTMLDOMConstructor */ #define DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR DISPID_HTMLOBJECT+9 #define DISPID_IHTMLDOMCONSTRUCTOR_LOOKUPGETTER #define DISPID_IHTMLDOMCONSTRUCTOR_LOOKUPSETTER #define DISPID_IHTMLDOMCONSTRUCTOR_DEFINEGETTER #define DISPID_IHTMLDOMCONSTRUCTOR_DEFINESETTER /* IHTMLCSSStyleDeclaration */ #define DISPID_IHTMLCSSSTYLEDECLARATION_LENGTH DISPID_BASE_STYLE+1 #define DISPID_IHTMLCSSSTYLEDECLARATION_PARENTRULE DISPID_BASE_STYLE+2 #define DISPID_IHTMLCSSSTYLEDECLARATION_GETPROPERTYVALUE DISPID_BASE_STYLE+3 #define DISPID_IHTMLCSSSTYLEDECLARATION_GETPROPERTYPRIORITY DISPID_BASE_STYLE+4 #define DISPID_IHTMLCSSSTYLEDECLARATION_REMOVEPROPERTY DISPID_BASE_STYLE+5 #define DISPID_IHTMLCSSSTYLEDECLARATION_SETPROPERTY DISPID_BASE_STYLE+6 #define DISPID_IHTMLCSSSTYLEDECLARATION_ITEM DISPID_VALUE #define DISPID_IHTMLCSSSTYLEDECLARATION_FONTFAMILY DISPID_A_FONTFACE #define DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTYLE DISPID_A_FONTSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION_FONTVARIANT DISPID_A_FONTVARIANT #define DISPID_IHTMLCSSSTYLEDECLARATION_FONTWEIGHT DISPID_A_FONTWEIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZE DISPID_A_FONTSIZE #define DISPID_IHTMLCSSSTYLEDECLARATION_FONT DISPID_A_FONT #define DISPID_IHTMLCSSSTYLEDECLARATION_COLOR DISPID_A_COLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUND DISPID_A_BACKGROUND #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCOLOR DISPID_BACKCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDIMAGE DISPID_A_BACKGROUNDIMAGE #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDREPEAT DISPID_A_BACKGROUNDREPEAT #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDATTACHMENT DISPID_A_BACKGROUNDATTACHMENT #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITION DISPID_A_BACKGROUNDPOSITION #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONX DISPID_A_BACKGROUNDPOSX #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONY DISPID_A_BACKGROUNDPOSY #define DISPID_IHTMLCSSSTYLEDECLARATION_WORDSPACING DISPID_A_WORDSPACING #define DISPID_IHTMLCSSSTYLEDECLARATION_LETTERSPACING DISPID_A_LETTERSPACING #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTDECORATION DISPID_A_TEXTDECORATION #define DISPID_IHTMLCSSSTYLEDECLARATION_VERTICALALIGN DISPID_A_VERTICALALIGN #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTTRANSFORM DISPID_A_TEXTTRANSFORM #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTINDENT DISPID_A_TEXTINDENT #define DISPID_IHTMLCSSSTYLEDECLARATION_LINEHEIGHT DISPID_A_LINEHEIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_MARGINTOP DISPID_A_MARGINTOP #define DISPID_IHTMLCSSSTYLEDECLARATION_MARGINRIGHT DISPID_A_MARGINRIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_MARGINBOTTOM DISPID_A_MARGINBOTTOM #define DISPID_IHTMLCSSSTYLEDECLARATION_MARGINLEFT DISPID_A_MARGINLEFT #define DISPID_IHTMLCSSSTYLEDECLARATION_MARGIN DISPID_A_MARGIN #define DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGTOP DISPID_A_PADDINGTOP #define DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGRIGHT DISPID_A_PADDINGRIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGBOTTOM DISPID_A_PADDINGBOTTOM #define DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGLEFT DISPID_A_PADDINGLEFT #define DISPID_IHTMLCSSSTYLEDECLARATION_PADDING DISPID_A_PADDING #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDER DISPID_A_BORDER #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOP DISPID_A_BORDERTOP #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHT DISPID_A_BORDERRIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOM DISPID_A_BORDERBOTTOM #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFT DISPID_A_BORDERLEFT #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLOR DISPID_A_BORDERCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPCOLOR DISPID_A_BORDERTOPCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTCOLOR DISPID_A_BORDERRIGHTCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMCOLOR DISPID_A_BORDERBOTTOMCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTCOLOR DISPID_A_BORDERLEFTCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERWIDTH DISPID_A_BORDERWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPWIDTH DISPID_A_BORDERTOPWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTWIDTH DISPID_A_BORDERRIGHTWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMWIDTH DISPID_A_BORDERBOTTOMWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTWIDTH DISPID_A_BORDERLEFTWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSTYLE DISPID_A_BORDERSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPSTYLE DISPID_A_BORDERTOPSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTSTYLE DISPID_A_BORDERRIGHTSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMSTYLE DISPID_A_BORDERBOTTOMSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTSTYLE DISPID_A_BORDERLEFTSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_STYLEFLOAT DISPID_A_FLOAT #define DISPID_IHTMLCSSSTYLEDECLARATION_CLEAR DISPID_A_CLEAR #define DISPID_IHTMLCSSSTYLEDECLARATION_DISPLAY DISPID_A_DISPLAY #define DISPID_IHTMLCSSSTYLEDECLARATION_VISIBILITY DISPID_A_VISIBILITY #define DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLETYPE DISPID_A_LISTSTYLETYPE #define DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEPOSITION DISPID_A_LISTSTYLEPOSITION #define DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEIMAGE DISPID_A_LISTSTYLEIMAGE #define DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLE DISPID_A_LISTSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION_WHITESPACE DISPID_A_WHITESPACE #define DISPID_IHTMLCSSSTYLEDECLARATION_TOP STDPROPID_XOBJ_TOP #define DISPID_IHTMLCSSSTYLEDECLARATION_LEFT STDPROPID_XOBJ_LEFT #define DISPID_IHTMLCSSSTYLEDECLARATION_ZINDEX DISPID_A_ZINDEX #define DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOW DISPID_A_OVERFLOW #define DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKBEFORE DISPID_A_PAGEBREAKBEFORE #define DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKAFTER DISPID_A_PAGEBREAKAFTER #define DISPID_IHTMLCSSSTYLEDECLARATION_CSSTEXT DISPID_A_STYLETEXT #define DISPID_IHTMLCSSSTYLEDECLARATION_CURSOR DISPID_A_CURSOR #define DISPID_IHTMLCSSSTYLEDECLARATION_CLIP DISPID_A_CLIP #define DISPID_IHTMLCSSSTYLEDECLARATION_FILTER DISPID_A_FILTER #define DISPID_IHTMLCSSSTYLEDECLARATION_TABLELAYOUT DISPID_A_TABLELAYOUT #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLLAPSE DISPID_A_BORDERCOLLAPSE #define DISPID_IHTMLCSSSTYLEDECLARATION_DIRECTION DISPID_A_DIRECTION #define DISPID_IHTMLCSSSTYLEDECLARATION_BEHAVIOR DISPID_A_BEHAVIOR #define DISPID_IHTMLCSSSTYLEDECLARATION_POSITION DISPID_A_POSITION #define DISPID_IHTMLCSSSTYLEDECLARATION_UNICODEBIDI DISPID_A_UNICODEBIDI #define DISPID_IHTMLCSSSTYLEDECLARATION_BOTTOM STDPROPID_XOBJ_BOTTOM #define DISPID_IHTMLCSSSTYLEDECLARATION_RIGHT STDPROPID_XOBJ_RIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_IMEMODE DISPID_A_IMEMODE #define DISPID_IHTMLCSSSTYLEDECLARATION_RUBYALIGN DISPID_A_RUBYALIGN #define DISPID_IHTMLCSSSTYLEDECLARATION_RUBYPOSITION DISPID_A_RUBYPOSITION #define DISPID_IHTMLCSSSTYLEDECLARATION_RUBYOVERHANG DISPID_A_RUBYOVERHANG #define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDCHAR DISPID_A_LAYOUTGRIDCHAR #define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDLINE DISPID_A_LAYOUTGRIDLINE #define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDMODE DISPID_A_LAYOUTGRIDMODE #define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDTYPE DISPID_A_LAYOUTGRIDTYPE #define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRID DISPID_A_LAYOUTGRID #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTAUTOSPACE DISPID_A_TEXTAUTOSPACE #define DISPID_IHTMLCSSSTYLEDECLARATION_WORDBREAK DISPID_A_WORDBREAK #define DISPID_IHTMLCSSSTYLEDECLARATION_LINEBREAK DISPID_A_LINEBREAK #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFY DISPID_A_TEXTJUSTIFY #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFYTRIM DISPID_A_TEXTJUSTIFYTRIM #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDA DISPID_A_TEXTKASHIDA #define DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWX DISPID_A_OVERFLOWX #define DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWY DISPID_A_OVERFLOWY #define DISPID_IHTMLCSSSTYLEDECLARATION_ACCELERATOR DISPID_A_ACCELERATOR #define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTFLOW DISPID_A_LAYOUTFLOW #define DISPID_IHTMLCSSSTYLEDECLARATION_ZOOM DISPID_A_ZOOM #define DISPID_IHTMLCSSSTYLEDECLARATION_WORDWRAP DISPID_A_WORDWRAP #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTUNDERLINEPOSITION DISPID_A_TEXTUNDERLINEPOSITION #define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARBASECOLOR DISPID_A_SCROLLBARBASECOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARFACECOLOR DISPID_A_SCROLLBARFACECOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBAR3DLIGHTCOLOR DISPID_A_SCROLLBAR3DLIGHTCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARSHADOWCOLOR DISPID_A_SCROLLBARSHADOWCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARHIGHLIGHTCOLOR DISPID_A_SCROLLBARHIGHLIGHTCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARDARKSHADOWCOLOR DISPID_A_SCROLLBARDARKSHADOWCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARARROWCOLOR DISPID_A_SCROLLBARARROWCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARTRACKCOLOR DISPID_A_SCROLLBARTRACKCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_WRITINGMODE DISPID_A_WRITINGMODE #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGNLAST DISPID_A_TEXTALIGNLAST #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDASPACE DISPID_A_TEXTKASHIDASPACE #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTOVERFLOW DISPID_A_TEXTOVERFLOW #define DISPID_IHTMLCSSSTYLEDECLARATION_MINHEIGHT DISPID_A_MINHEIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_MSINTERPOLATIONMODE DISPID_A_INTERPOLATION #define DISPID_IHTMLCSSSTYLEDECLARATION_MAXHEIGHT DISPID_A_MAXHEIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_MINWIDTH DISPID_A_MINWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_MAXWIDTH DISPID_A_MAXWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_CONTENT DISPID_A_CONTENT #define DISPID_IHTMLCSSSTYLEDECLARATION_CAPTIONSIDE DISPID_A_CAPTIONSIDE #define DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERINCREMENT DISPID_A_COUNTERINCREMENT #define DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERRESET DISPID_A_COUNTERRESET #define DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINE DISPID_A_OUTLINE #define DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINEWIDTH DISPID_A_OUTLINEWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINESTYLE DISPID_A_OUTLINESTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINECOLOR DISPID_A_OUTLINECOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_BOXSIZING DISPID_A_BOXSIZING #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSPACING DISPID_A_BORDERSPACING #define DISPID_IHTMLCSSSTYLEDECLARATION_ORPHANS DISPID_A_ORPHANS #define DISPID_IHTMLCSSSTYLEDECLARATION_WIDOWS DISPID_A_WIDOWS #define DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKINSIDE DISPID_A_PAGEBREAKINSIDE #define DISPID_IHTMLCSSSTYLEDECLARATION_EMPTYCELLS DISPID_A_EMPTYCELLS #define DISPID_IHTMLCSSSTYLEDECLARATION_MSBLOCKPROGRESSION DISPID_A_MS_BLOCKPROGRESSION #define DISPID_IHTMLCSSSTYLEDECLARATION_QUOTES DISPID_A_QUOTES #define DISPID_IHTMLCSSSTYLEDECLARATION_ALIGNMENTBASELINE DISPID_A_ALIGNMENTBASELINE #define DISPID_IHTMLCSSSTYLEDECLARATION_BASELINESHIFT DISPID_A_BASELINESHIFT #define DISPID_IHTMLCSSSTYLEDECLARATION_DOMINANTBASELINE DISPID_A_DOMINANTBASELINE #define DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZEADJUST DISPID_A_FONTSIZEADJUST #define DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTRETCH DISPID_A_FONTSTRETCH #define DISPID_IHTMLCSSSTYLEDECLARATION_OPACITY DISPID_A_OPACITY #define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPPATH DISPID_A_CLIPPATH #define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRULE DISPID_A_CLIPRULE #define DISPID_IHTMLCSSSTYLEDECLARATION_FILL DISPID_A_FILL #define DISPID_IHTMLCSSSTYLEDECLARATION_FILLOPACITY DISPID_A_FILLOPACITY #define DISPID_IHTMLCSSSTYLEDECLARATION_FILLRULE DISPID_A_FILLRULE #define DISPID_IHTMLCSSSTYLEDECLARATION_KERNING DISPID_A_KERNING #define DISPID_IHTMLCSSSTYLEDECLARATION_MARKER DISPID_A_MARKER #define DISPID_IHTMLCSSSTYLEDECLARATION_MARKEREND DISPID_A_MARKEREND #define DISPID_IHTMLCSSSTYLEDECLARATION_MARKERMID DISPID_A_MARKERMID #define DISPID_IHTMLCSSSTYLEDECLARATION_MARKERSTART DISPID_A_MARKERSTART #define DISPID_IHTMLCSSSTYLEDECLARATION_MASK DISPID_A_MASK #define DISPID_IHTMLCSSSTYLEDECLARATION_POINTEREVENTS DISPID_A_POINTEREVENTS #define DISPID_IHTMLCSSSTYLEDECLARATION_STOPCOLOR DISPID_A_STOPCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION_STOPOPACITY DISPID_A_STOPOPACITY #define DISPID_IHTMLCSSSTYLEDECLARATION_STROKE DISPID_A_STROKE #define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHARRAY DISPID_A_STROKEDASHARRAY #define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHOFFSET DISPID_A_STROKEDASHOFFSET #define DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINECAP DISPID_A_STROKELINECAP #define DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINEJOIN DISPID_A_STROKELINEJOIN #define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEMITERLIMIT DISPID_A_STROKEMITERLIMIT #define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEOPACITY DISPID_A_STROKEOPACITY #define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEWIDTH DISPID_A_STROKEWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTANCHOR DISPID_A_TEXTANCHOR #define DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONHORIZONTAL DISPID_A_GLYPHORIENTATIONHORIZONTAL #define DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONVERTICAL DISPID_A_GLYPHORIENTATIONVERTICAL #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRADIUS DISPID_A_BORDERRADIUS #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPLEFTRADIUS DISPID_A_BORDERTOPLEFTRADIUS #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPRIGHTRADIUS DISPID_A_BORDERTOPRIGHTRADIUS #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMRIGHTRADIUS DISPID_A_BORDERBOTTOMRIGHTRADIUS #define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMLEFTRADIUS DISPID_A_BORDERBOTTOMLEFTRADIUS #define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPTOP DISPID_A_CLIPRECTTOP #define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRIGHT DISPID_A_CLIPRECTRIGHT #define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPBOTTOM DISPID_A_CLIPRECTBOTTOM #define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPLEFT DISPID_A_CLIPRECTLEFT #define DISPID_IHTMLCSSSTYLEDECLARATION_CSSFLOAT DISPID_A_CSSFLOAT #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCLIP DISPID_A_IE9_BACKGROUNDCLIP #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDORIGIN DISPID_A_IE9_BACKGROUNDORIGIN #define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDSIZE DISPID_A_IE9_BACKGROUNDSIZE #define DISPID_IHTMLCSSSTYLEDECLARATION_BOXSHADOW DISPID_A_IE9_BOXSHADOW #define DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORM DISPID_A_MS_TRANSFORM #define DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORMORIGIN DISPID_A_MS_TRANSFORMORIGIN /* IHTMLCSSStyleDeclaration2 */ #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLCHAINING DISPID_A_MS_SCROLLCHAINING #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMING DISPID_A_MS_CONTENTZOOMING #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPTYPE DISPID_A_MS_CONTENTZOOMSNAPTYPE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLRAILS DISPID_A_MS_SCROLLRAILS #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMCHAINING DISPID_A_MS_CONTENTZOOMCHAINING #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPTYPE DISPID_A_MS_SCROLLSNAPTYPE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMIT DISPID_A_MS_CONTENTZOOMLIMIT #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAP DISPID_A_MS_CONTENTZOOMSNAP #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPPOINTS DISPID_A_MS_CONTENTZOOMSNAPPOINTS #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMIN DISPID_A_MS_CONTENTZOOMLIMITMIN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMAX DISPID_A_MS_CONTENTZOOMLIMITMAX #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPX DISPID_A_MS_SCROLLSNAPX #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPY DISPID_A_MS_SCROLLSNAPY #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSX DISPID_A_MS_SCROLLSNAPPOINTSX #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSY DISPID_A_MS_SCROLLSNAPPOINTSY #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMN DISPID_A_MS_GRIDCOLUMN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNALIGN DISPID_A_MS_GRIDCOLUMNALIGN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNS DISPID_A_MS_GRIDCOLUMNS #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNSPAN DISPID_A_MS_GRIDCOLUMNSPAN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROW DISPID_A_MS_GRIDROW #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWALIGN DISPID_A_MS_GRIDROWALIGN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWS DISPID_A_MS_GRIDROWS #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWSPAN DISPID_A_MS_GRIDROWSPAN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPTHROUGH DISPID_A_MS_WRAPTHROUGH #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPMARGIN DISPID_A_MS_WRAPMARGIN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPFLOW DISPID_A_MS_WRAPFLOW #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONNAME DISPID_A_MS_ANIMATIONNAME #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDURATION DISPID_A_MS_ANIMATIONDURATION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONTIMINGFUNCTION DISPID_A_MS_ANIMATIONTIMINGFUNCTION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDELAY DISPID_A_MS_ANIMATIONDELAY #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDIRECTION DISPID_A_MS_ANIMATIONDIRECTION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONPLAYSTATE DISPID_A_MS_ANIMATIONPLAYSTATE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONITERATIONCOUNT DISPID_A_MS_ANIMATIONITERATIONCOUNT #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATION DISPID_A_MS_ANIMATION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONFILLMODE DISPID_A_MS_ANIMATIONFILLMODE #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLORINTERPOLATIONFILTERS DISPID_A_COLORINTERPOLATIONFILTERS #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNCOUNT DISPID_A_COLUMNCOUNT #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNWIDTH DISPID_A_COLUMNWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNGAP DISPID_A_COLUMNGAP #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNFILL DISPID_A_COLUMNFILL #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNSPAN DISPID_A_COLUMNSPAN #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNS DISPID_A_COLUMNS #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULE DISPID_A_COLUMNRULE #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULECOLOR DISPID_A_COLUMNRULECOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULESTYLE DISPID_A_COLUMNRULESTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULEWIDTH DISPID_A_COLUMNRULEWIDTH #define DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKBEFORE DISPID_A_BREAKBEFORE #define DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKAFTER DISPID_A_BREAKAFTER #define DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKINSIDE DISPID_A_BREAKINSIDE #define DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODCOLOR DISPID_A_FLOODCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODOPACITY DISPID_A_FLOODOPACITY #define DISPID_IHTMLCSSSTYLEDECLARATION2_LIGHTINGCOLOR DISPID_A_LIGHTINGCOLOR #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMIN DISPID_A_MS_SCROLLLIMITXMIN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMIN DISPID_A_MS_SCROLLLIMITYMIN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMAX DISPID_A_MS_SCROLLLIMITXMAX #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMAX DISPID_A_MS_SCROLLLIMITYMAX #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMIT DISPID_A_MS_SCROLLLIMIT #define DISPID_IHTMLCSSSTYLEDECLARATION2_TEXTSHADOW DISPID_A_TEXTSHADOW #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWFROM DISPID_A_MS_FLOWFROM #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWINTO DISPID_A_MS_FLOWINTO #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENS DISPID_A_MS_HYPHENS #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITZONE DISPID_A_MS_HYPHENATE_LIMIT_ZONE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITCHARS DISPID_A_MS_HYPHENATE_LIMIT_CHARS #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITLINES DISPID_A_MS_HYPHENATE_LIMIT_LINES #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHIGHCONTRASTADJUST DISPID_A_MS_HIGHCONTRASTADJUST #define DISPID_IHTMLCSSSTYLEDECLARATION2_ENABLEBACKGROUND DISPID_A_ENABLEBACKGROUND #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFONTFEATURESETTINGS DISPID_A_MS_FONTFEATURESETTINGS #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSUSERSELECT DISPID_A_MS_USERSELECT #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSOVERFLOWSTYLE DISPID_A_MS_OVERFLOWSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSFORMSTYLE DISPID_A_MS_TRANSFORMSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSBACKFACEVISIBILITY DISPID_A_MS_BACKFACEVISIBILITY #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVE DISPID_A_MS_PERSPECTIVE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVEORIGIN DISPID_A_MS_PERSPECTIVEORIGIN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONPROPERTY DISPID_A_MS_TRANSITIONPROPERTY #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDURATION DISPID_A_MS_TRANSITIONDURATION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONTIMINGFUNCTION DISPID_A_MS_TRANSITIONTIMINGFUNCTION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDELAY DISPID_A_MS_TRANSITIONDELAY #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITION DISPID_A_MS_TRANSITION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHACTION DISPID_A_MS_TOUCHACTION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLTRANSLATION DISPID_A_MS_SCROLLTRANSLATION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEX DISPID_A_MS_FLEX #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPOSITIVE DISPID_A_MS_FLEXPOSITIVE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXNEGATIVE DISPID_A_MS_FLEXNEGATIVE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPREFERREDSIZE DISPID_A_MS_FLEXPREFERREDSIZE #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXFLOW DISPID_A_MS_FLEXFLOW #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXDIRECTION DISPID_A_MS_FLEXDIRECTION #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXWRAP DISPID_A_MS_FLEXWRAP #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXALIGN DISPID_A_MS_FLEXALIGN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXITEMALIGN DISPID_A_MS_FLEXITEMALIGN #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPACK DISPID_A_MS_FLEXPACK #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXLINEPACK DISPID_A_MS_FLEXLINEPACK #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXORDER DISPID_A_MS_FLEXORDER #define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHSELECT DISPID_A_MS_TOUCHSELECT #define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORM DISPID_A_TRANSFORM #define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMORIGIN DISPID_A_TRANSFORMORIGIN #define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMSTYLE DISPID_A_TRANSFORMSTYLE #define DISPID_IHTMLCSSSTYLEDECLARATION2_BACKFACEVISIBILITY DISPID_A_BACKFACEVISIBILITY #define DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVE DISPID_A_PERSPECTIVE #define DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVEORIGIN DISPID_A_PERSPECTIVEORIGIN #define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONPROPERTY DISPID_A_TRANSITIONPROPERTY #define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDURATION DISPID_A_TRANSITIONDURATION #define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONTIMINGFUNCTION DISPID_A_TRANSITIONTIMINGFUNCTION #define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDELAY DISPID_A_TRANSITIONDELAY #define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITION DISPID_A_TRANSITION #define DISPID_IHTMLCSSSTYLEDECLARATION2_FONTFEATURESETTINGS DISPID_A_FONTFEATURESETTINGS #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONNAME DISPID_A_ANIMATIONNAME #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDURATION DISPID_A_ANIMATIONDURATION #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONTIMINGFUNCTION DISPID_A_ANIMATIONTIMINGFUNCTION #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDELAY DISPID_A_ANIMATIONDELAY #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDIRECTION DISPID_A_ANIMATIONDIRECTION #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONPLAYSTATE DISPID_A_ANIMATIONPLAYSTATE #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONITERATIONCOUNT DISPID_A_ANIMATIONITERATIONCOUNT #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATION DISPID_A_ANIMATION #define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONFILLMODE DISPID_A_ANIMATIONFILLMODE /* IHTMLStyle */ #define DISPID_IHTMLSTYLE_PIXELTOP DISPID_STYLE #define DISPID_IHTMLSTYLE_PIXELLEFT (DISPID_STYLE+1) #define DISPID_IHTMLSTYLE_PIXELWIDTH (DISPID_STYLE+2) #define DISPID_IHTMLSTYLE_PIXELHEIGHT (DISPID_STYLE+3) #define DISPID_IHTMLSTYLE_POSTOP (DISPID_STYLE+4) #define DISPID_IHTMLSTYLE_POSLEFT (DISPID_STYLE+5) #define DISPID_IHTMLSTYLE_POSWIDTH (DISPID_STYLE+6) #define DISPID_IHTMLSTYLE_POSHEIGHT (DISPID_STYLE+7) #define DISPID_IHTMLSTYLE_TOSTRING (DISPID_STYLE+8) #define DISPID_IHTMLSTYLE_SETATTRIBUTE (DISPID_HTMLOBJECT+1) #define DISPID_IHTMLSTYLE_GETATTRIBUTE (DISPID_HTMLOBJECT+2) #define DISPID_IHTMLSTYLE_REMOVEATTRIBUTE (DISPID_HTMLOBJECT+3) #define DISPID_IHTMLSTYLE_FONTFAMILY DISPID_A_FONTFACE #define DISPID_IHTMLSTYLE_FONTSTYLE DISPID_A_FONTSTYLE #define DISPID_IHTMLSTYLE_FONTVARIANT DISPID_A_FONTVARIANT #define DISPID_IHTMLSTYLE_FONTWEIGHT DISPID_A_FONTWEIGHT #define DISPID_IHTMLSTYLE_FONTSIZE DISPID_A_FONTSIZE #define DISPID_IHTMLSTYLE_FONT DISPID_A_FONT #define DISPID_IHTMLSTYLE_COLOR DISPID_A_COLOR #define DISPID_IHTMLSTYLE_BACKGROUND DISPID_A_BACKGROUND #define DISPID_IHTMLSTYLE_BACKGROUNDIMAGE DISPID_A_BACKGROUNDIMAGE #define DISPID_IHTMLSTYLE_BACKGROUNDREPEAT DISPID_A_BACKGROUNDREPEAT #define DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT DISPID_A_BACKGROUNDATTACHMENT #define DISPID_IHTMLSTYLE_BACKGROUNDPOSITION DISPID_A_BACKGROUNDPOSITION #define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX DISPID_A_BACKGROUNDPOSX #define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY DISPID_A_BACKGROUNDPOSY #define DISPID_IHTMLSTYLE_WORDSPACING DISPID_A_WORDSPACING #define DISPID_IHTMLSTYLE_LETTERSPACING DISPID_A_LETTERSPACING #define DISPID_IHTMLSTYLE_TEXTDECORATION DISPID_A_TEXTDECORATION #define DISPID_IHTMLSTYLE_TEXTDECORATIONNONE DISPID_A_TEXTDECORATIONNONE #define DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE DISPID_A_TEXTDECORATIONUNDERLINE #define DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE DISPID_A_TEXTDECORATIONOVERLINE #define DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH DISPID_A_TEXTDECORATIONLINETHROUGH #define DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK DISPID_A_TEXTDECORATIONBLINK #define DISPID_IHTMLSTYLE_VERTICALALIGN DISPID_A_VERTICALALIGN #define DISPID_IHTMLSTYLE_TEXTTRANSFORM DISPID_A_TEXTTRANSFORM #define DISPID_IHTMLSTYLE_TEXTINDENT DISPID_A_TEXTINDENT #define DISPID_IHTMLSTYLE_LINEHEIGHT DISPID_A_LINEHEIGHT #define DISPID_IHTMLSTYLE_MARGINTOP DISPID_A_MARGINTOP #define DISPID_IHTMLSTYLE_MARGINRIGHT DISPID_A_MARGINRIGHT #define DISPID_IHTMLSTYLE_MARGINBOTTOM DISPID_A_MARGINBOTTOM #define DISPID_IHTMLSTYLE_MARGINLEFT DISPID_A_MARGINLEFT #define DISPID_IHTMLSTYLE_MARGIN DISPID_A_MARGIN #define DISPID_IHTMLSTYLE_PADDINGTOP DISPID_A_PADDINGTOP #define DISPID_IHTMLSTYLE_PADDINGRIGHT DISPID_A_PADDINGRIGHT #define DISPID_IHTMLSTYLE_PADDINGBOTTOM DISPID_A_PADDINGBOTTOM #define DISPID_IHTMLSTYLE_PADDINGLEFT DISPID_A_PADDINGLEFT #define DISPID_IHTMLSTYLE_PADDING DISPID_A_PADDING #define DISPID_IHTMLSTYLE_BORDER DISPID_A_BORDER #define DISPID_IHTMLSTYLE_BORDERTOP DISPID_A_BORDERTOP #define DISPID_IHTMLSTYLE_BORDERRIGHT DISPID_A_BORDERRIGHT #define DISPID_IHTMLSTYLE_BORDERBOTTOM DISPID_A_BORDERBOTTOM #define DISPID_IHTMLSTYLE_BORDERLEFT DISPID_A_BORDERLEFT #define DISPID_IHTMLSTYLE_BORDERCOLOR DISPID_A_BORDERCOLOR #define DISPID_IHTMLSTYLE_BORDERTOPCOLOR DISPID_A_BORDERTOPCOLOR #define DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR DISPID_A_BORDERRIGHTCOLOR #define DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR DISPID_A_BORDERBOTTOMCOLOR #define DISPID_IHTMLSTYLE_BORDERLEFTCOLOR DISPID_A_BORDERLEFTCOLOR #define DISPID_IHTMLSTYLE_BORDERWIDTH DISPID_A_BORDERWIDTH #define DISPID_IHTMLSTYLE_BORDERTOPWIDTH DISPID_A_BORDERTOPWIDTH #define DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH DISPID_A_BORDERRIGHTWIDTH #define DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH DISPID_A_BORDERBOTTOMWIDTH #define DISPID_IHTMLSTYLE_BORDERLEFTWIDTH DISPID_A_BORDERLEFTWIDTH #define DISPID_IHTMLSTYLE_BORDERSTYLE DISPID_A_BORDERSTYLE #define DISPID_IHTMLSTYLE_BORDERTOPSTYLE DISPID_A_BORDERTOPSTYLE #define DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE DISPID_A_BORDERRIGHTSTYLE #define DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE DISPID_A_BORDERBOTTOMSTYLE #define DISPID_IHTMLSTYLE_BORDERLEFTSTYLE DISPID_A_BORDERLEFTSTYLE #define DISPID_IHTMLSTYLE_STYLEFLOAT DISPID_A_FLOAT #define DISPID_IHTMLSTYLE_CLEAR DISPID_A_CLEAR #define DISPID_IHTMLSTYLE_DISPLAY DISPID_A_DISPLAY #define DISPID_IHTMLSTYLE_VISIBILITY DISPID_A_VISIBILITY #define DISPID_IHTMLSTYLE_LISTSTYLETYPE DISPID_A_LISTSTYLETYPE #define DISPID_IHTMLSTYLE_LISTSTYLEPOSITION DISPID_A_LISTSTYLEPOSITION #define DISPID_IHTMLSTYLE_LISTSTYLEIMAGE DISPID_A_LISTSTYLEIMAGE #define DISPID_IHTMLSTYLE_LISTSTYLE DISPID_A_LISTSTYLE #define DISPID_IHTMLSTYLE_WHITESPACE DISPID_A_WHITESPACE #define DISPID_IHTMLSTYLE_POSITION DISPID_A_POSITION #define DISPID_IHTMLSTYLE_ZINDEX DISPID_A_ZINDEX #define DISPID_IHTMLSTYLE_OVERFLOW DISPID_A_OVERFLOW #define DISPID_IHTMLSTYLE_PAGEBREAKBEFORE DISPID_A_PAGEBREAKBEFORE #define DISPID_IHTMLSTYLE_PAGEBREAKAFTER DISPID_A_PAGEBREAKAFTER #define DISPID_IHTMLSTYLE_CSSTEXT DISPID_A_STYLETEXT #define DISPID_IHTMLSTYLE_CURSOR DISPID_A_CURSOR #define DISPID_IHTMLSTYLE_CLIP DISPID_A_CLIP #define DISPID_IHTMLSTYLE_FILTER DISPID_A_FILTER #define DISPID_IHTMLSTYLE_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLSTYLE_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLSTYLE_TOP STDPROPID_XOBJ_TOP #define DISPID_IHTMLSTYLE_LEFT STDPROPID_XOBJ_LEFT #define DISPID_IHTMLSTYLE_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLSTYLE_BACKGROUNDCOLOR DISPID_BACKCOLOR /* IHTMLStyle2 */ #define DISPID_IHTMLSTYLE2_TABLELAYOUT DISPID_A_TABLELAYOUT #define DISPID_IHTMLSTYLE2_BORDERCOLLAPSE DISPID_A_BORDERCOLLAPSE #define DISPID_IHTMLSTYLE2_DIRECTION DISPID_A_DIRECTION #define DISPID_IHTMLSTYLE2_BEHAVIOR DISPID_A_BEHAVIOR #define DISPID_IHTMLSTYLE2_SETEXPRESSION DISPID_HTMLOBJECT+4 #define DISPID_IHTMLSTYLE2_GETEXPRESSION DISPID_HTMLOBJECT+5 #define DISPID_IHTMLSTYLE2_REMOVEEXPRESSION DISPID_HTMLOBJECT+6 #define DISPID_IHTMLSTYLE2_POSITION DISPID_A_POSITION #define DISPID_IHTMLSTYLE2_UNICODEBIDI DISPID_A_UNICODEBIDI #define DISPID_IHTMLSTYLE2_BOTTOM STDPROPID_XOBJ_BOTTOM #define DISPID_IHTMLSTYLE2_RIGHT STDPROPID_XOBJ_RIGHT #define DISPID_IHTMLSTYLE2_PIXELBOTTOM DISPID_STYLE+9 #define DISPID_IHTMLSTYLE2_PIXELRIGHT DISPID_STYLE+10 #define DISPID_IHTMLSTYLE2_POSBOTTOM DISPID_STYLE+11 #define DISPID_IHTMLSTYLE2_POSRIGHT DISPID_STYLE+12 #define DISPID_IHTMLSTYLE2_IMEMODE DISPID_A_IMEMODE #define DISPID_IHTMLSTYLE2_RUBYALIGN DISPID_A_RUBYALIGN #define DISPID_IHTMLSTYLE2_RUBYPOSITION DISPID_A_RUBYPOSITION #define DISPID_IHTMLSTYLE2_RUBYOVERHANG DISPID_A_RUBYOVERHANG #define DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR DISPID_A_LAYOUTGRIDCHAR #define DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE DISPID_A_LAYOUTGRIDLINE #define DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE DISPID_A_LAYOUTGRIDMODE #define DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE DISPID_A_LAYOUTGRIDTYPE #define DISPID_IHTMLSTYLE2_LAYOUTGRID DISPID_A_LAYOUTGRID #define DISPID_IHTMLSTYLE2_WORDBREAK DISPID_A_WORDBREAK #define DISPID_IHTMLSTYLE2_LINEBREAK DISPID_A_LINEBREAK #define DISPID_IHTMLSTYLE2_TEXTJUSTIFY DISPID_A_TEXTJUSTIFY #define DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM DISPID_A_TEXTJUSTIFYTRIM #define DISPID_IHTMLSTYLE2_TEXTKASHIDA DISPID_A_TEXTKASHIDA #define DISPID_IHTMLSTYLE2_TEXTAUTOSPACE DISPID_A_TEXTAUTOSPACE #define DISPID_IHTMLSTYLE2_OVERFLOWX DISPID_A_OVERFLOWX #define DISPID_IHTMLSTYLE2_OVERFLOWY DISPID_A_OVERFLOWY #define DISPID_IHTMLSTYLE2_ACCELERATOR DISPID_A_ACCELERATOR /* IHTMLStyle3 */ #define DISPID_IHTMLSTYLE3_LAYOUTFLOW DISPID_A_LAYOUTFLOW #define DISPID_IHTMLSTYLE3_ZOOM DISPID_A_ZOOM #define DISPID_IHTMLSTYLE3_WORDWRAP DISPID_A_WORDWRAP #define DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION DISPID_A_TEXTUNDERLINEPOSITION #define DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR DISPID_A_SCROLLBARBASECOLOR #define DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR DISPID_A_SCROLLBARFACECOLOR #define DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR DISPID_A_SCROLLBAR3DLIGHTCOLOR #define DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR DISPID_A_SCROLLBARSHADOWCOLOR #define DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR DISPID_A_SCROLLBARHIGHLIGHTCOLOR #define DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR DISPID_A_SCROLLBARDARKSHADOWCOLOR #define DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR DISPID_A_SCROLLBARARROWCOLOR #define DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR DISPID_A_SCROLLBARTRACKCOLOR #define DISPID_IHTMLSTYLE3_WRITINGMODE DISPID_A_WRITINGMODE #define DISPID_IHTMLSTYLE3_TEXTALIGNLAST DISPID_A_TEXTALIGNLAST #define DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE DISPID_A_TEXTKASHIDASPACE /* IHTMLStyle4 */ #define DISPID_IHTMLSTYLE4_TEXTOVERFLOW DISPID_A_TEXTOVERFLOW #define DISPID_IHTMLSTYLE4_MINHEIGHT DISPID_A_MINHEIGHT /* IHTMLStyle5 */ #define DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE DISPID_A_INTERPOLATION #define DISPID_IHTMLSTYLE5_MAXHEIGHT DISPID_A_MAXHEIGHT #define DISPID_IHTMLSTYLE5_MINWIDTH DISPID_A_MINWIDTH #define DISPID_IHTMLSTYLE5_MAXWIDTH DISPID_A_MAXWIDTH /* IHTMLStyle6 */ #define DISPID_IHTMLSTYLE6_CONTENT DISPID_A_CONTENT #define DISPID_IHTMLSTYLE6_CAPTIONSIDE DISPID_A_CAPTIONSIDE #define DISPID_IHTMLSTYLE6_COUNTERINCREMENT DISPID_A_COUNTERINCREMENT #define DISPID_IHTMLSTYLE6_COUNTERRESET DISPID_A_COUNTERRESET #define DISPID_IHTMLSTYLE6_OUTLINE DISPID_A_OUTLINE #define DISPID_IHTMLSTYLE6_OUTLINEWIDTH DISPID_A_OUTLINEWIDTH #define DISPID_IHTMLSTYLE6_OUTLINESTYLE DISPID_A_OUTLINESTYLE #define DISPID_IHTMLSTYLE6_OUTLINECOLOR DISPID_A_OUTLINECOLOR #define DISPID_IHTMLSTYLE6_BOXSIZING DISPID_A_BOXSIZING #define DISPID_IHTMLSTYLE6_BORDERSPACING DISPID_A_BORDERSPACING #define DISPID_IHTMLSTYLE6_ORPHANS DISPID_A_ORPHANS #define DISPID_IHTMLSTYLE6_WIDOWS DISPID_A_WIDOWS #define DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE DISPID_A_PAGEBREAKINSIDE #define DISPID_IHTMLSTYLE6_EMPTYCELLS DISPID_A_EMPTYCELLS #define DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION DISPID_A_MS_BLOCKPROGRESSION #define DISPID_IHTMLSTYLE6_QUOTES DISPID_A_QUOTES /* IHTMLFiltersCollection */ #define DISPID_IHTMLFILTERSCOLLECTION_LENGTH (DISPID_FILTERS+1) #define DISPID_IHTMLFILTERSCOLLECTION__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLFILTERSCOLLECTION_ITEM DISPID_VALUE /* IHTMLSelectionObject */ #define DISPID_IHTMLSELECTIONOBJECT_CREATERANGE (DISPID_SELECTOBJ+1) #define DISPID_IHTMLSELECTIONOBJECT_EMPTY (DISPID_SELECTOBJ+2) #define DISPID_IHTMLSELECTIONOBJECT_CLEAR (DISPID_SELECTOBJ+3) #define DISPID_IHTMLSELECTIONOBJECT_TYPE (DISPID_SELECTOBJ+4) /* IHTMLSelectionObject2 */ #define DISPID_IHTMLSELECTIONOBJECT2_CREATERANGECOLLECTION DISPID_SELECTOBJ+5 #define DISPID_IHTMLSELECTIONOBJECT2_TYPEDETAIL DISPID_SELECTOBJ+6 /* IHTMLSelection */ #define DISPID_IHTMLSELECTION_ANCHORNODE DISPID_HTMLSELECTION+1 #define DISPID_IHTMLSELECTION_ANCHOROFFSET DISPID_HTMLSELECTION+2 #define DISPID_IHTMLSELECTION_FOCUSNODE DISPID_HTMLSELECTION+3 #define DISPID_IHTMLSELECTION_FOCUSOFFSET DISPID_HTMLSELECTION+4 #define DISPID_IHTMLSELECTION_ISCOLLAPSED DISPID_HTMLSELECTION+5 #define DISPID_IHTMLSELECTION_COLLAPSE DISPID_HTMLSELECTION+6 #define DISPID_IHTMLSELECTION_COLLAPSETOSTART DISPID_HTMLSELECTION+7 #define DISPID_IHTMLSELECTION_COLLAPSETOEND DISPID_HTMLSELECTION+8 #define DISPID_IHTMLSELECTION_SELECTALLCHILDREN DISPID_HTMLSELECTION+9 #define DISPID_IHTMLSELECTION_DELETEFROMDOCUMENT DISPID_HTMLSELECTION+10 #define DISPID_IHTMLSELECTION_RANGECOUNT DISPID_HTMLSELECTION+11 #define DISPID_IHTMLSELECTION_GETRANGEAT DISPID_HTMLSELECTION+12 #define DISPID_IHTMLSELECTION_ADDRANGE DISPID_HTMLSELECTION+13 #define DISPID_IHTMLSELECTION_REMOVERANGE DISPID_HTMLSELECTION+14 #define DISPID_IHTMLSELECTION_REMOVEALLRANGES DISPID_HTMLSELECTION+15 #define DISPID_IHTMLSELECTION_TOSTRING DISPID_HTMLSELECTION+16 /* IHTMLFramesCollection2 */ #define DISPID_IHTMLFRAMESCOLLECTION2_ITEM 0 #define DISPID_IHTMLFRAMESCOLLECTION2_LENGTH 1001 /* IHTMLLocation */ #define DISPID_IHTMLLOCATION_HOST (DISPID_LOCATION+1) #define DISPID_IHTMLLOCATION_HOSTNAME (DISPID_LOCATION+2) #define DISPID_IHTMLLOCATION_PORT (DISPID_LOCATION+3) #define DISPID_IHTMLLOCATION_PATHNAME (DISPID_LOCATION+4) #define DISPID_IHTMLLOCATION_SEARCH (DISPID_LOCATION+5) #define DISPID_IHTMLLOCATION_HASH (DISPID_LOCATION+6) #define DISPID_IHTMLLOCATION_RELOAD (DISPID_LOCATION+7) #define DISPID_IHTMLLOCATION_REPLACE (DISPID_LOCATION+8) #define DISPID_IHTMLLOCATION_ASSIGN (DISPID_LOCATION+9) #define DISPID_IHTMLLOCATION_TOSTRING (DISPID_LOCATION+10) #define DISPID_IHTMLLOCATION_HREF DISPID_VALUE #define DISPID_IHTMLLOCATION_PROTOCOL DISPID_LOCATION /* IHTMLBookmarkCollection */ #define DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH DISPID_OPTIONS_COL+1 #define DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLBOOKMARKCOLLECTION_ITEM DISPID_VALUE /* HTMLWindowEvents */ #define DISPID_HTMLWINDOWEVENTS_ONLOAD DISPID_EVMETH_ONLOAD #define DISPID_HTMLWINDOWEVENTS_ONUNLOAD DISPID_EVMETH_ONUNLOAD #define DISPID_HTMLWINDOWEVENTS_ONHELP DISPID_EVMETH_ONHELP #define DISPID_HTMLWINDOWEVENTS_ONFOCUS DISPID_EVMETH_ONFOCUS #define DISPID_HTMLWINDOWEVENTS_ONBLUR DISPID_EVMETH_ONBLUR #define DISPID_HTMLWINDOWEVENTS_ONERROR DISPID_EVMETH_ONERROR #define DISPID_HTMLWINDOWEVENTS_ONRESIZE DISPID_EVMETH_ONRESIZE #define DISPID_HTMLWINDOWEVENTS_ONSCROLL DISPID_EVMETH_ONSCROLL #define DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD DISPID_EVMETH_ONBEFOREUNLOAD #define DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT DISPID_EVMETH_ONBEFOREPRINT #define DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT DISPID_EVMETH_ONAFTERPRINT /* HTMLWindowEvents2 */ #define DISPID_HTMLWINDOWEVENTS2_ONLOAD DISPID_EVMETH_ONLOAD #define DISPID_HTMLWINDOWEVENTS2_ONUNLOAD DISPID_EVMETH_ONUNLOAD #define DISPID_HTMLWINDOWEVENTS2_ONHELP DISPID_EVMETH_ONHELP #define DISPID_HTMLWINDOWEVENTS2_ONFOCUS DISPID_EVMETH_ONFOCUS #define DISPID_HTMLWINDOWEVENTS2_ONBLUR DISPID_EVMETH_ONBLUR #define DISPID_HTMLWINDOWEVENTS2_ONERROR DISPID_EVMETH_ONERROR #define DISPID_HTMLWINDOWEVENTS2_ONRESIZE DISPID_EVMETH_ONRESIZE #define DISPID_HTMLWINDOWEVENTS2_ONSCROLL DISPID_EVMETH_ONSCROLL #define DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD DISPID_EVMETH_ONBEFOREUNLOAD #define DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT DISPID_EVMETH_ONBEFOREPRINT #define DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT DISPID_EVMETH_ONAFTERPRINT /* IHTMLWindow2 */ #define DISPID_IHTMLWINDOW2_HISTORY 2 #define DISPID_IHTMLWINDOW2_CLOSE 3 #define DISPID_IHTMLWINDOW2_OPENER 4 #define DISPID_IHTMLWINDOW2_NAVIGATOR 5 #define DISPID_IHTMLWINDOW2_MOVETO 6 #define DISPID_IHTMLWINDOW2_MOVEBY 7 #define DISPID_IHTMLWINDOW2_RESIZETO 9 #define DISPID_IHTMLWINDOW2_RESIZEBY 8 #define DISPID_IHTMLWINDOW2_NAME 11 #define DISPID_IHTMLWINDOW2_PARENT 12 #define DISPID_IHTMLWINDOW2_OPEN 13 #define DISPID_IHTMLWINDOW2_LOCATION 14 #define DISPID_IHTMLWINDOW2_SELF 20 #define DISPID_IHTMLWINDOW2_TOP 21 #define DISPID_IHTMLWINDOW2_WINDOW 22 #define DISPID_IHTMLWINDOW2_CLOSED 23 #define DISPID_IHTMLWINDOW2_NAVIGATE 25 #define DISPID_IHTMLWINDOW2_FRAMES 1100 #define DISPID_IHTMLWINDOW2_DEFAULTSTATUS 1101 #define DISPID_IHTMLWINDOW2_STATUS 1102 #define DISPID_IHTMLWINDOW2_SETTIMEOUT 1172 #define DISPID_IHTMLWINDOW2_CLEARTIMEOUT 1104 #define DISPID_IHTMLWINDOW2_ALERT 1105 #define DISPID_IHTMLWINDOW2_CONFIRM 1110 #define DISPID_IHTMLWINDOW2_PROMPT 1111 #define DISPID_IHTMLWINDOW2_IMAGE 1125 #define DISPID_IHTMLWINDOW2_DOCUMENT 1151 #define DISPID_IHTMLWINDOW2_EVENT 1152 #define DISPID_IHTMLWINDOW2__NEWENUM 1153 #define DISPID_IHTMLWINDOW2_SHOWMODALDIALOG 1154 #define DISPID_IHTMLWINDOW2_SHOWHELP 1155 #define DISPID_IHTMLWINDOW2_SCREEN 1156 #define DISPID_IHTMLWINDOW2_OPTION 1157 #define DISPID_IHTMLWINDOW2_FOCUS 1158 #define DISPID_IHTMLWINDOW2_BLUR 1159 #define DISPID_IHTMLWINDOW2_SCROLL 1160 #define DISPID_IHTMLWINDOW2_CLIENTINFORMATION 1161 #define DISPID_IHTMLWINDOW2_SETINTERVAL 1173 #define DISPID_IHTMLWINDOW2_CLEARINTERVAL 1163 #define DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING 1164 #define DISPID_IHTMLWINDOW2_EXECSCRIPT 1165 #define DISPID_IHTMLWINDOW2_TOSTRING 1166 #define DISPID_IHTMLWINDOW2_SCROLLBY 1167 #define DISPID_IHTMLWINDOW2_SCROLLTO 1168 #define DISPID_IHTMLWINDOW2_EXTERNAL 1169 #define DISPID_IHTMLWINDOW2_ONFOCUS DISPID_EVPROP_ONFOCUS #define DISPID_IHTMLWINDOW2_ONBLUR DISPID_EVPROP_ONBLUR #define DISPID_IHTMLWINDOW2_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD DISPID_EVPROP_ONBEFOREUNLOAD #define DISPID_IHTMLWINDOW2_ONUNLOAD DISPID_EVPROP_ONUNLOAD #define DISPID_IHTMLWINDOW2_ONHELP DISPID_EVPROP_ONHELP #define DISPID_IHTMLWINDOW2_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLWINDOW2_ONRESIZE DISPID_EVPROP_ONRESIZE #define DISPID_IHTMLWINDOW2_ONSCROLL DISPID_EVPROP_ONSCROLL /* IHTMLWindow3 */ #define DISPID_IHTMLWINDOW3_SCREENLEFT 1170 #define DISPID_IHTMLWINDOW3_SCREENTOP 1171 #define DISPID_IHTMLWINDOW3_ATTACHEVENT DISPID_HTMLOBJECT+7 #define DISPID_IHTMLWINDOW3_DETACHEVENT DISPID_HTMLOBJECT+8 #define DISPID_IHTMLWINDOW3_SETTIMEOUT 1103 #define DISPID_IHTMLWINDOW3_SETINTERVAL 1162 #define DISPID_IHTMLWINDOW3_PRINT 1174 #define DISPID_IHTMLWINDOW3_ONBEFOREPRINT DISPID_EVPROP_ONBEFOREPRINT #define DISPID_IHTMLWINDOW3_ONAFTERPRINT DISPID_EVPROP_ONAFTERPRINT #define DISPID_IHTMLWINDOW3_CLIPBOARDDATA 1175 #define DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG 1176 /* IHTMLWindow4 */ #define DISPID_IHTMLWINDOW4_CREATEPOPUP 1180 #define DISPID_IHTMLWINDOW4_FRAMEELEMENT 1181 /* IHTMLWindow5 */ #define DISPID_IHTMLWINDOW5_XMLHTTPREQUEST 1190 /* IHTMLWindow6 */ #define DISPID_IHTMLWINDOW6_XDOMAINREQUEST 1191 #define DISPID_IHTMLWINDOW6_SESSIONSTORAGE 1192 #define DISPID_IHTMLWINDOW6_LOCALSTORAGE 1193 #define DISPID_IHTMLWINDOW6_ONHASHCHANGE DISPID_EVPROP_ONHASHCHANGE #define DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER 1194 #define DISPID_IHTMLWINDOW6_POSTMESSAGE 1196 #define DISPID_IHTMLWINDOW6_TOSTATICHTML 1197 #define DISPID_IHTMLWINDOW6_ONMESSAGE DISPID_EVPROP_ONMESSAGE #define DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK 1198 /* IHTMLWindow7 */ #define DISPID_IHTMLWINDOW7_GETSELECTION 1199 #define DISPID_IHTMLWINDOW7_GETCOMPUTEDSTYLE 1200 #define DISPID_IHTMLWINDOW7_STYLEMEDIA 1202 #define DISPID_IHTMLWINDOW7_PERFORMANCE 1203 #define DISPID_IHTMLWINDOW7_INNERWIDTH 1204 #define DISPID_IHTMLWINDOW7_INNERHEIGHT 1205 #define DISPID_IHTMLWINDOW7_PAGEXOFFSET 1206 #define DISPID_IHTMLWINDOW7_PAGEYOFFSET 1207 #define DISPID_IHTMLWINDOW7_SCREENX 1208 #define DISPID_IHTMLWINDOW7_SCREENY 1209 #define DISPID_IHTMLWINDOW7_OUTERWIDTH 1210 #define DISPID_IHTMLWINDOW7_OUTERHEIGHT 1211 #define DISPID_IHTMLWINDOW7_ONABORT DISPID_EVPROP_ONABORT #define DISPID_IHTMLWINDOW7_ONCANPLAY DISPID_EVPROP_CANPLAY #define DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH DISPID_EVPROP_CANPLAYTHROUGH #define DISPID_IHTMLWINDOW7_ONCHANGE DISPID_EVPROP_ONCHANGE #define DISPID_IHTMLWINDOW7_ONCLICK DISPID_EVPROP_ONCLICK #define DISPID_IHTMLWINDOW7_ONCONTEXTMENU DISPID_EVPROP_ONCONTEXTMENU #define DISPID_IHTMLWINDOW7_ONDBLCLICK DISPID_EVPROP_ONDBLCLICK #define DISPID_IHTMLWINDOW7_ONDRAG DISPID_EVPROP_ONDRAG #define DISPID_IHTMLWINDOW7_ONDRAGEND DISPID_EVPROP_ONDRAGEND #define DISPID_IHTMLWINDOW7_ONDRAGENTER DISPID_EVPROP_ONDRAGENTER #define DISPID_IHTMLWINDOW7_ONDRAGLEAVE DISPID_EVPROP_ONDRAGLEAVE #define DISPID_IHTMLWINDOW7_ONDRAGOVER DISPID_EVPROP_ONDRAGOVER #define DISPID_IHTMLWINDOW7_ONDRAGSTART DISPID_EVPROP_ONDRAGSTART #define DISPID_IHTMLWINDOW7_ONDROP DISPID_EVPROP_ONDROP #define DISPID_IHTMLWINDOW7_ONDURATIONCHANGE DISPID_EVPROP_DURATIONCHANGE #define DISPID_IHTMLWINDOW7_ONFOCUSIN DISPID_EVPROP_ONFOCUSIN #define DISPID_IHTMLWINDOW7_ONFOCUSOUT DISPID_EVPROP_ONFOCUSOUT #define DISPID_IHTMLWINDOW7_ONINPUT DISPID_EVPROP_INPUT #define DISPID_IHTMLWINDOW7_ONEMPTIED DISPID_EVPROP_EMPTIED #define DISPID_IHTMLWINDOW7_ONENDED DISPID_EVPROP_ENDED #define DISPID_IHTMLWINDOW7_ONKEYDOWN DISPID_EVPROP_ONKEYDOWN #define DISPID_IHTMLWINDOW7_ONKEYPRESS DISPID_EVPROP_ONKEYPRESS #define DISPID_IHTMLWINDOW7_ONKEYUP DISPID_EVPROP_ONKEYUP #define DISPID_IHTMLWINDOW7_ONLOADEDDATA DISPID_EVPROP_LOADEDDATA #define DISPID_IHTMLWINDOW7_ONLOADEDMETADATA DISPID_EVPROP_LOADEDMETADATA #define DISPID_IHTMLWINDOW7_ONLOADSTART DISPID_EVPROP_LOADSTART #define DISPID_IHTMLWINDOW7_ONMOUSEDOWN DISPID_EVPROP_ONMOUSEDOWN #define DISPID_IHTMLWINDOW7_ONMOUSEENTER DISPID_EVPROP_ONMOUSEENTER #define DISPID_IHTMLWINDOW7_ONMOUSELEAVE DISPID_EVPROP_ONMOUSELEAVE #define DISPID_IHTMLWINDOW7_ONMOUSEMOVE DISPID_EVPROP_ONMOUSEMOVE #define DISPID_IHTMLWINDOW7_ONMOUSEOUT DISPID_EVPROP_ONMOUSEOUT #define DISPID_IHTMLWINDOW7_ONMOUSEOVER DISPID_EVPROP_ONMOUSEOVER #define DISPID_IHTMLWINDOW7_ONMOUSEUP DISPID_EVPROP_ONMOUSEUP #define DISPID_IHTMLWINDOW7_ONMOUSEWHEEL DISPID_EVPROP_ONMOUSEWHEEL #define DISPID_IHTMLWINDOW7_ONOFFLINE DISPID_EVPROP_ONOFFLINE #define DISPID_IHTMLWINDOW7_ONONLINE DISPID_EVPROP_ONONLINE #define DISPID_IHTMLWINDOW7_ONPROGRESS DISPID_EVPROP_PROGRESS #define DISPID_IHTMLWINDOW7_ONRATECHANGE DISPID_EVPROP_RATECHANGE #define DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE #define DISPID_IHTMLWINDOW7_ONRESET DISPID_EVPROP_ONRESET #define DISPID_IHTMLWINDOW7_ONSEEKED DISPID_EVPROP_SEEKED #define DISPID_IHTMLWINDOW7_ONSEEKING DISPID_EVPROP_SEEKING #define DISPID_IHTMLWINDOW7_ONSELECT DISPID_EVPROP_ONSELECT #define DISPID_IHTMLWINDOW7_ONSTALLED DISPID_EVPROP_STALLED #define DISPID_IHTMLWINDOW7_ONSTORAGE DISPID_EVPROP_ONSTORAGE #define DISPID_IHTMLWINDOW7_ONSUBMIT DISPID_EVPROP_ONSUBMIT #define DISPID_IHTMLWINDOW7_ONSUSPEND DISPID_EVPROP_SUSPEND #define DISPID_IHTMLWINDOW7_ONTIMEUPDATE DISPID_EVPROP_TIMEUPDATE #define DISPID_IHTMLWINDOW7_ONPAUSE DISPID_EVPROP_PAUSE #define DISPID_IHTMLWINDOW7_ONPLAY DISPID_EVPROP_PLAY #define DISPID_IHTMLWINDOW7_ONPLAYING DISPID_EVPROP_PLAYING #define DISPID_IHTMLWINDOW7_ONVOLUMECHANGE DISPID_EVPROP_VOLUMECHANGE #define DISPID_IHTMLWINDOW7_ONWAITING DISPID_EVPROP_WAITING /* IHTMLImageElementFactory */ #define DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE DISPID_VALUE /* IHTMLImgElement */ #define DISPID_IHTMLIMGELEMENT_BORDER (DISPID_IMGBASE+4) #define DISPID_IHTMLIMGELEMENT_VSPACE (DISPID_IMGBASE+5) #define DISPID_IHTMLIMGELEMENT_HSPACE (DISPID_IMGBASE+6) #define DISPID_IHTMLIMGELEMENT_ALT (DISPID_IMGBASE+2) #define DISPID_IHTMLIMGELEMENT_SRC (DISPID_IMGBASE+3) #define DISPID_IHTMLIMGELEMENT_LOWSRC (DISPID_IMGBASE+7) #define DISPID_IHTMLIMGELEMENT_VRML (DISPID_IMGBASE+8) #define DISPID_IHTMLIMGELEMENT_DYNSRC (DISPID_IMGBASE+9) #define DISPID_IHTMLIMGELEMENT_READYSTATE (DISPID_IMGBASE+12) #define DISPID_IHTMLIMGELEMENT_COMPLETE (DISPID_IMGBASE+10) #define DISPID_IHTMLIMGELEMENT_LOOP (DISPID_IMGBASE+11) #define DISPID_IHTMLIMGELEMENT_ISMAP (DISPID_IMG+2) #define DISPID_IHTMLIMGELEMENT_USEMAP (DISPID_IMG+8) #define DISPID_IHTMLIMGELEMENT_MIMETYPE (DISPID_IMG+10) #define DISPID_IHTMLIMGELEMENT_FILESIZE (DISPID_IMG+11) #define DISPID_IHTMLIMGELEMENT_FILECREATEDDATE (DISPID_IMG+12) #define DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE (DISPID_IMG+13) #define DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE (DISPID_IMG+14) #define DISPID_IHTMLIMGELEMENT_PROTOCOL (DISPID_IMG+15) #define DISPID_IHTMLIMGELEMENT_HREF (DISPID_IMG+16) #define DISPID_IHTMLIMGELEMENT_NAMEPROP (DISPID_IMG+17) #define DISPID_IHTMLIMGELEMENT_ALIGN STDPROPID_XOBJ_CONTROLALIGN #define DISPID_IHTMLIMGELEMENT_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLIMGELEMENT_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLIMGELEMENT_ONABORT DISPID_EVPROP_ONABORT #define DISPID_IHTMLIMGELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLIMGELEMENT_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLIMGELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLIMGELEMENT_START DISPID_IMGBASE+13 /* IHTMLImgElement2 */ #define DISPID_IHTMLIMGELEMENT2_LONGDESC DISPID_IMG+19 /* IHTMLXMLHttpRequest */ #define DISPID_IHTMLXMLHTTPREQUEST_READYSTATE DISPID_XMLHTTPREQUEST+2 #define DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY DISPID_XMLHTTPREQUEST+3 #define DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT DISPID_XMLHTTPREQUEST+4 #define DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML DISPID_XMLHTTPREQUEST+5 #define DISPID_IHTMLXMLHTTPREQUEST_STATUS DISPID_XMLHTTPREQUEST+6 #define DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT DISPID_XMLHTTPREQUEST+7 #define DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE #define DISPID_IHTMLXMLHTTPREQUEST_ABORT DISPID_XMLHTTPREQUEST+9 #define DISPID_IHTMLXMLHTTPREQUEST_OPEN DISPID_XMLHTTPREQUEST+10 #define DISPID_IHTMLXMLHTTPREQUEST_SEND DISPID_XMLHTTPREQUEST+11 #define DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS DISPID_XMLHTTPREQUEST+12 #define DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER DISPID_XMLHTTPREQUEST+13 #define DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER DISPID_XMLHTTPREQUEST+14 /* IHTMLXMLHttpRequest2 */ #define DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT DISPID_XMLHTTPREQUEST+15 #define DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT DISPID_EVPROP_TIMEOUT /* IHTMLXMLHttpRequestFactory */ #define DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE DISPID_VALUE /* HTMLXMLHttpRequestEvents */ #define DISPID_HTMLXMLHTTPREQUESTEVENTS_ONTIMEOUT DISPID_XMLHTTPREQUEST+16 #define DISPID_HTMLXMLHTTPREQUESTEVENTS_ONREADYSTATECHANGE DISPID_XMLHTTPREQUEST+8 /* IOmHistory */ #define DISPID_IOMHISTORY_LENGTH DISPID_HISTORY #define DISPID_IOMHISTORY_BACK (DISPID_HISTORY+1) #define DISPID_IOMHISTORY_FORWARD (DISPID_HISTORY+2) #define DISPID_IOMHISTORY_GO (DISPID_HISTORY+3) /* IOmNavigator */ #define DISPID_IOMNAVIGATOR_APPCODENAME DISPID_NAVIGATOR #define DISPID_IOMNAVIGATOR_APPNAME (DISPID_NAVIGATOR+1) #define DISPID_IOMNAVIGATOR_APPVERSION (DISPID_NAVIGATOR+2) #define DISPID_IOMNAVIGATOR_USERAGENT (DISPID_NAVIGATOR+3) #define DISPID_IOMNAVIGATOR_JAVAENABLED (DISPID_NAVIGATOR+4) #define DISPID_IOMNAVIGATOR_TAINTENABLED (DISPID_NAVIGATOR+5) #define DISPID_IOMNAVIGATOR_MIMETYPES (DISPID_NAVIGATOR+6) #define DISPID_IOMNAVIGATOR_PLUGINS (DISPID_NAVIGATOR+7) #define DISPID_IOMNAVIGATOR_COOKIEENABLED (DISPID_NAVIGATOR+8) #define DISPID_IOMNAVIGATOR_OPSPROFILE (DISPID_NAVIGATOR+9) #define DISPID_IOMNAVIGATOR_TOSTRING (DISPID_NAVIGATOR+10) #define DISPID_IOMNAVIGATOR_CPUCLASS (DISPID_NAVIGATOR+11) #define DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE (DISPID_NAVIGATOR+12) #define DISPID_IOMNAVIGATOR_BROWSERLANGUAGE (DISPID_NAVIGATOR+13) #define DISPID_IOMNAVIGATOR_USERLANGUAGE (DISPID_NAVIGATOR+14) #define DISPID_IOMNAVIGATOR_PLATFORM (DISPID_NAVIGATOR+15) #define DISPID_IOMNAVIGATOR_APPMINORVERSION (DISPID_NAVIGATOR+16) #define DISPID_IOMNAVIGATOR_CONNECTIONSPEED (DISPID_NAVIGATOR+17) #define DISPID_IOMNAVIGATOR_ONLINE (DISPID_NAVIGATOR+18) #define DISPID_IOMNAVIGATOR_USERPROFILE (DISPID_NAVIGATOR+19) /* IHTMLMimeTypesCollection */ #define DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH 1 /* IHTMLPluginsCollection */ #define DISPID_IHTMLPLUGINSCOLLECTION_LENGTH 1 #define DISPID_IHTMLPLUGINSCOLLECTION_REFRESH 2 /* IHTMLOpsProfile */ #define DISPID_IHTMLOPSPROFILE_ADDREQUEST 1 #define DISPID_IHTMLOPSPROFILE_CLEARREQUEST 2 #define DISPID_IHTMLOPSPROFILE_DOREQUEST 3 #define DISPID_IHTMLOPSPROFILE_GETATTRIBUTE 4 #define DISPID_IHTMLOPSPROFILE_SETATTRIBUTE 5 #define DISPID_IHTMLOPSPROFILE_COMMITCHANGES 6 #define DISPID_IHTMLOPSPROFILE_ADDREADREQUEST 7 #define DISPID_IHTMLOPSPROFILE_DOREADREQUEST 8 #define DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST 9 /* IHTMLDataTransfer */ #define DISPID_IHTMLDATATRANSFER_SETDATA DISPID_DATATRANSFER+1 #define DISPID_IHTMLDATATRANSFER_GETDATA DISPID_DATATRANSFER+2 #define DISPID_IHTMLDATATRANSFER_CLEARDATA DISPID_DATATRANSFER+3 #define DISPID_IHTMLDATATRANSFER_DROPEFFECT DISPID_DATATRANSFER+4 #define DISPID_IHTMLDATATRANSFER_EFFECTALLOWED DISPID_DATATRANSFER+5 /* IHTMLEventObj */ #define DISPID_IHTMLEVENTOBJ_SRCELEMENT (DISPID_EVENTOBJ+1) #define DISPID_IHTMLEVENTOBJ_ALTKEY (DISPID_EVENTOBJ+2) #define DISPID_IHTMLEVENTOBJ_CTRLKEY (DISPID_EVENTOBJ+3) #define DISPID_IHTMLEVENTOBJ_SHIFTKEY (DISPID_EVENTOBJ+4) #define DISPID_IHTMLEVENTOBJ_X (DISPID_EVENTOBJ+5) #define DISPID_IHTMLEVENTOBJ_Y (DISPID_EVENTOBJ+6) #define DISPID_IHTMLEVENTOBJ_RETURNVALUE (DISPID_EVENTOBJ+7) #define DISPID_IHTMLEVENTOBJ_CANCELBUBBLE (DISPID_EVENTOBJ+8) #define DISPID_IHTMLEVENTOBJ_FROMELEMENT (DISPID_EVENTOBJ+9) #define DISPID_IHTMLEVENTOBJ_TOELEMENT (DISPID_EVENTOBJ+10) #define DISPID_IHTMLEVENTOBJ_KEYCODE (DISPID_EVENTOBJ+11) #define DISPID_IHTMLEVENTOBJ_BUTTON (DISPID_EVENTOBJ+12) #define DISPID_IHTMLEVENTOBJ_TYPE (DISPID_EVENTOBJ+13) #define DISPID_IHTMLEVENTOBJ_QUALIFIER (DISPID_EVENTOBJ+14) #define DISPID_IHTMLEVENTOBJ_REASON (DISPID_EVENTOBJ+15) #define DISPID_IHTMLEVENTOBJ_CLIENTX (DISPID_EVENTOBJ+20) #define DISPID_IHTMLEVENTOBJ_CLIENTY (DISPID_EVENTOBJ+21) #define DISPID_IHTMLEVENTOBJ_OFFSETX (DISPID_EVENTOBJ+22) #define DISPID_IHTMLEVENTOBJ_OFFSETY (DISPID_EVENTOBJ+23) #define DISPID_IHTMLEVENTOBJ_SCREENX (DISPID_EVENTOBJ+24) #define DISPID_IHTMLEVENTOBJ_SCREENY (DISPID_EVENTOBJ+25) #define DISPID_IHTMLEVENTOBJ_SRCFILTER (DISPID_EVENTOBJ+26) /* IHTMLEventObj2 */ #define DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE DISPID_HTMLOBJECT+1 #define DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE DISPID_HTMLOBJECT+2 #define DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE DISPID_HTMLOBJECT+3 #define DISPID_IHTMLEVENTOBJ2_PROPERTYNAME DISPID_EVENTOBJ+27 #define DISPID_IHTMLEVENTOBJ2_BOOKMARKS DISPID_EVENTOBJ+31 #define DISPID_IHTMLEVENTOBJ2_RECORDSET DISPID_EVENTOBJ+32 #define DISPID_IHTMLEVENTOBJ2_DATAFLD DISPID_EVENTOBJ+33 #define DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS DISPID_EVENTOBJ+34 #define DISPID_IHTMLEVENTOBJ2_REPEAT DISPID_EVENTOBJ+35 #define DISPID_IHTMLEVENTOBJ2_SRCURN DISPID_EVENTOBJ+36 #define DISPID_IHTMLEVENTOBJ2_SRCELEMENT DISPID_EVENTOBJ+1 #define DISPID_IHTMLEVENTOBJ2_ALTKEY DISPID_EVENTOBJ+2 #define DISPID_IHTMLEVENTOBJ2_CTRLKEY DISPID_EVENTOBJ+3 #define DISPID_IHTMLEVENTOBJ2_SHIFTKEY DISPID_EVENTOBJ+4 #define DISPID_IHTMLEVENTOBJ2_FROMELEMENT DISPID_EVENTOBJ+9 #define DISPID_IHTMLEVENTOBJ2_TOELEMENT DISPID_EVENTOBJ+10 #define DISPID_IHTMLEVENTOBJ2_BUTTON DISPID_EVENTOBJ+12 #define DISPID_IHTMLEVENTOBJ2_TYPE DISPID_EVENTOBJ+13 #define DISPID_IHTMLEVENTOBJ2_QUALIFIER DISPID_EVENTOBJ+14 #define DISPID_IHTMLEVENTOBJ2_REASON DISPID_EVENTOBJ+15 #define DISPID_IHTMLEVENTOBJ2_X DISPID_EVENTOBJ+5 #define DISPID_IHTMLEVENTOBJ2_Y DISPID_EVENTOBJ+6 #define DISPID_IHTMLEVENTOBJ2_CLIENTX DISPID_EVENTOBJ+20 #define DISPID_IHTMLEVENTOBJ2_CLIENTY DISPID_EVENTOBJ+21 #define DISPID_IHTMLEVENTOBJ2_OFFSETX DISPID_EVENTOBJ+22 #define DISPID_IHTMLEVENTOBJ2_OFFSETY DISPID_EVENTOBJ+23 #define DISPID_IHTMLEVENTOBJ2_SCREENX DISPID_EVENTOBJ+24 #define DISPID_IHTMLEVENTOBJ2_SCREENY DISPID_EVENTOBJ+25 #define DISPID_IHTMLEVENTOBJ2_SRCFILTER DISPID_EVENTOBJ+26 #define DISPID_IHTMLEVENTOBJ2_DATATRANSFER DISPID_EVENTOBJ+37 /* IHTMLEventObj3 */ #define DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW DISPID_EVENTOBJ+38 #define DISPID_IHTMLEVENTOBJ3_SHIFTLEFT DISPID_EVENTOBJ+39 #define DISPID_IHTMLEVENTOBJ3_ALTLEFT DISPID_EVENTOBJ+40 #define DISPID_IHTMLEVENTOBJ3_CTRLLEFT DISPID_EVENTOBJ+41 #define DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE DISPID_EVENTOBJ+42 #define DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND DISPID_EVENTOBJ+43 #define DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA DISPID_EVENTOBJ+44 #define DISPID_IHTMLEVENTOBJ3_IMEREQUEST DISPID_EVENTOBJ+46 #define DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA DISPID_EVENTOBJ+47 #define DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT DISPID_EVENTOBJ+45 #define DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE DISPID_EVENTOBJ+48 #define DISPID_IHTMLEVENTOBJ3_BEHAVIORPART DISPID_EVENTOBJ+49 #define DISPID_IHTMLEVENTOBJ3_NEXTPAGE DISPID_EVENTOBJ+50 /* IHTMLEventObj4 */ #define DISPID_IHTMLEVENTOBJ4_WHEELDELTA DISPID_EVENTOBJ+51 /* IHTMLStyleMedia */ #define DISPID_IHTMLSTYLEMEDIA_TYPE DISPID_STYLEMEDIA+1 #define DISPID_IHTMLSTYLEMEDIA_MATCHMEDIUM DISPID_STYLEMEDIA+2 /* IHTMLScreen */ #define DISPID_IHTMLSCREEN_COLORDEPTH (DISPID_SCREEN+1) #define DISPID_IHTMLSCREEN_BUFFERDEPTH (DISPID_SCREEN+2) #define DISPID_IHTMLSCREEN_WIDTH (DISPID_SCREEN+3) #define DISPID_IHTMLSCREEN_HEIGHT (DISPID_SCREEN+4) #define DISPID_IHTMLSCREEN_UPDATEINTERVAL (DISPID_SCREEN+5) #define DISPID_IHTMLSCREEN_AVAILHEIGHT (DISPID_SCREEN+6) #define DISPID_IHTMLSCREEN_AVAILWIDTH (DISPID_SCREEN+7) #define DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED (DISPID_SCREEN+8) /* IHTMLScreen2 */ #define DISPID_IHTMLSCREEN2_LOGICALXDPI DISPID_SCREEN+9 #define DISPID_IHTMLSCREEN2_LOGICALYDPI DISPID_SCREEN+10 #define DISPID_IHTMLSCREEN2_DEVICEXDPI DISPID_SCREEN+11 #define DISPID_IHTMLSCREEN2_DEVICEYDPI DISPID_SCREEN+12 /* IHTMLScreen3 */ #define DISPID_IHTMLSCREEN3_SYSTEMXDPI DISPID_SCREEN+13 #define DISPID_IHTMLSCREEN3_SYSTEMYDPI DISPID_SCREEN+14 /* IHTMLOptionElementFactory */ #define DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE DISPID_VALUE /* IHTMLOptionElement */ #define DISPID_IHTMLOPTIONELEMENT_SELECTED (DISPID_OPTION+1) #define DISPID_IHTMLOPTIONELEMENT_VALUE (DISPID_OPTION+2) #define DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED (DISPID_OPTION+3) #define DISPID_IHTMLOPTIONELEMENT_INDEX (DISPID_OPTION+5) #define DISPID_IHTMLOPTIONELEMENT_TEXT (DISPID_OPTION+4) #define DISPID_IHTMLOPTIONELEMENT_FORM (DISPID_OPTION+6) /* IHTMLOptionElement3 */ #define DISPID_IHTMLOPTIONELEMENT3_LABEL DISPID_OPTION+7 /* IHTMLFormElement */ #define DISPID_IHTMLFORMELEMENT_ACTION (DISPID_FORM+1) #define DISPID_IHTMLFORMELEMENT_DIR (DISPID_FORM+2) #define DISPID_IHTMLFORMELEMENT_ENCODING (DISPID_FORM+3) #define DISPID_IHTMLFORMELEMENT_METHOD (DISPID_FORM+4) #define DISPID_IHTMLFORMELEMENT_ELEMENTS (DISPID_FORM+5) #define DISPID_IHTMLFORMELEMENT_TARGET (DISPID_FORM+6) #define DISPID_IHTMLFORMELEMENT_SUBMIT (DISPID_FORM+9) #define DISPID_IHTMLFORMELEMENT_RESET (DISPID_FORM+10) #define DISPID_IHTMLFORMELEMENT_TAGS (DISPID_COLLECTION+2) #define DISPID_IHTMLFORMELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLFORMELEMENT_ONSUBMIT DISPID_EVPROP_ONSUBMIT #define DISPID_IHTMLFORMELEMENT_ONRESET DISPID_EVPROP_ONRESET #define DISPID_IHTMLFORMELEMENT_LENGTH DISPID_COLLECTION #define DISPID_IHTMLFORMELEMENT__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLFORMELEMENT_ITEM DISPID_VALUE /* HTMLFormElementEvents */ #define DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT DISPID_EVMETH_ONSUBMIT #define DISPID_HTMLFORMELEMENTEVENTS_ONRESET DISPID_EVMETH_ONRESET /* HTMLFormElementEvents2 */ #define DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT DISPID_EVMETH_ONSUBMIT #define DISPID_HTMLFORMELEMENTEVENTS2_ONRESET DISPID_EVMETH_ONRESET /* IHTMLStyleSheetsCollection */ #define DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH (DISPID_STYLESHEETS_COL+1) #define DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM DISPID_VALUE /* IHTMLStyleSheet */ #define DISPID_IHTMLSTYLESHEET_TITLE (DISPID_STYLESHEET+1) #define DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET (DISPID_STYLESHEET+2) #define DISPID_IHTMLSTYLESHEET_OWNINGELEMENT (DISPID_STYLESHEET+3) #define DISPID_IHTMLSTYLESHEET_READONLY (DISPID_STYLESHEET+4) #define DISPID_IHTMLSTYLESHEET_IMPORTS (DISPID_STYLESHEET+5) #define DISPID_IHTMLSTYLESHEET_HREF (DISPID_STYLESHEET+6) #define DISPID_IHTMLSTYLESHEET_TYPE (DISPID_STYLESHEET+7) #define DISPID_IHTMLSTYLESHEET_ID (DISPID_STYLESHEET+8) #define DISPID_IHTMLSTYLESHEET_ADDIMPORT (DISPID_STYLESHEET+9) #define DISPID_IHTMLSTYLESHEET_ADDRULE (DISPID_STYLESHEET+10) #define DISPID_IHTMLSTYLESHEET_REMOVEIMPORT (DISPID_STYLESHEET+11) #define DISPID_IHTMLSTYLESHEET_REMOVERULE (DISPID_STYLESHEET+12) #define DISPID_IHTMLSTYLESHEET_MEDIA (DISPID_STYLESHEET+13) #define DISPID_IHTMLSTYLESHEET_CSSTEXT (DISPID_STYLESHEET+14) #define DISPID_IHTMLSTYLESHEET_RULES (DISPID_STYLESHEET+15) #define DISPID_IHTMLSTYLESHEET_DISABLED STDPROPID_XOBJ_DISABLED /* IHTMLStyleSheet2 */ #define DISPID_IHTMLSTYLESHEET2_PAGES (DISPID_STYLESHEET+16) #define DISPID_IHTMLSTYLESHEET2_ADDPAGERULE (DISPID_STYLESHEET+17) /* IHTMLStyleSheetRulesCollection */ #define DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH (DISPID_STYLERULES_COL+1) #define DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM DISPID_VALUE /* IHTMLStyleSheetPage */ #define DISPID_IHTMLSTYLESHEETPAGE_SELECTOR (DISPID_STYLEPAGE+1) #define DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS (DISPID_STYLEPAGE+2) /* IHTMLStyleSheetPagesCollection */ #define DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH (DISPID_STYLEPAGES_COL+1) #define DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM DISPID_VALUE /* IHTMLStyleSheetRule */ #define DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT (DISPID_STYLERULE+1) #define DISPID_IHTMLSTYLESHEETRULE_READONLY (DISPID_STYLERULE+2) #define DISPID_IHTMLSTYLESHEETRULE_STYLE STDPROPID_XOBJ_STYLE /* IHTMLRuleStyle */ #define DISPID_IHTMLRULESTYLE_SETATTRIBUTE (DISPID_HTMLOBJECT+1) #define DISPID_IHTMLRULESTYLE_GETATTRIBUTE (DISPID_HTMLOBJECT+2) #define DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE (DISPID_HTMLOBJECT+3) #define DISPID_IHTMLRULESTYLE_FONTFAMILY DISPID_A_FONTFACE #define DISPID_IHTMLRULESTYLE_FONTSTYLE DISPID_A_FONTSTYLE #define DISPID_IHTMLRULESTYLE_FONTVARIANT DISPID_A_FONTVARIANT #define DISPID_IHTMLRULESTYLE_FONTWEIGHT DISPID_A_FONTWEIGHT #define DISPID_IHTMLRULESTYLE_FONTSIZE DISPID_A_FONTSIZE #define DISPID_IHTMLRULESTYLE_FONT DISPID_A_FONT #define DISPID_IHTMLRULESTYLE_COLOR DISPID_A_COLOR #define DISPID_IHTMLRULESTYLE_BACKGROUND DISPID_A_BACKGROUND #define DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE DISPID_A_BACKGROUNDIMAGE #define DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT DISPID_A_BACKGROUNDREPEAT #define DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT DISPID_A_BACKGROUNDATTACHMENT #define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION DISPID_A_BACKGROUNDPOSITION #define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX DISPID_A_BACKGROUNDPOSX #define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY DISPID_A_BACKGROUNDPOSY #define DISPID_IHTMLRULESTYLE_WORDSPACING DISPID_A_WORDSPACING #define DISPID_IHTMLRULESTYLE_LETTERSPACING DISPID_A_LETTERSPACING #define DISPID_IHTMLRULESTYLE_TEXTDECORATION DISPID_A_TEXTDECORATION #define DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE DISPID_A_TEXTDECORATIONNONE #define DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE DISPID_A_TEXTDECORATIONUNDERLINE #define DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE DISPID_A_TEXTDECORATIONOVERLINE #define DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH DISPID_A_TEXTDECORATIONLINETHROUGH #define DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK DISPID_A_TEXTDECORATIONBLINK #define DISPID_IHTMLRULESTYLE_VERTICALALIGN DISPID_A_VERTICALALIGN #define DISPID_IHTMLRULESTYLE_TEXTTRANSFORM DISPID_A_TEXTTRANSFORM #define DISPID_IHTMLRULESTYLE_TEXTINDENT DISPID_A_TEXTINDENT #define DISPID_IHTMLRULESTYLE_LINEHEIGHT DISPID_A_LINEHEIGHT #define DISPID_IHTMLRULESTYLE_MARGINTOP DISPID_A_MARGINTOP #define DISPID_IHTMLRULESTYLE_MARGINRIGHT DISPID_A_MARGINRIGHT #define DISPID_IHTMLRULESTYLE_MARGINBOTTOM DISPID_A_MARGINBOTTOM #define DISPID_IHTMLRULESTYLE_MARGINLEFT DISPID_A_MARGINLEFT #define DISPID_IHTMLRULESTYLE_MARGIN DISPID_A_MARGIN #define DISPID_IHTMLRULESTYLE_PADDINGTOP DISPID_A_PADDINGTOP #define DISPID_IHTMLRULESTYLE_PADDINGRIGHT DISPID_A_PADDINGRIGHT #define DISPID_IHTMLRULESTYLE_PADDINGBOTTOM DISPID_A_PADDINGBOTTOM #define DISPID_IHTMLRULESTYLE_PADDINGLEFT DISPID_A_PADDINGLEFT #define DISPID_IHTMLRULESTYLE_PADDING DISPID_A_PADDING #define DISPID_IHTMLRULESTYLE_BORDER DISPID_A_BORDER #define DISPID_IHTMLRULESTYLE_BORDERTOP DISPID_A_BORDERTOP #define DISPID_IHTMLRULESTYLE_BORDERRIGHT DISPID_A_BORDERRIGHT #define DISPID_IHTMLRULESTYLE_BORDERBOTTOM DISPID_A_BORDERBOTTOM #define DISPID_IHTMLRULESTYLE_BORDERLEFT DISPID_A_BORDERLEFT #define DISPID_IHTMLRULESTYLE_BORDERCOLOR DISPID_A_BORDERCOLOR #define DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR DISPID_A_BORDERTOPCOLOR #define DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR DISPID_A_BORDERRIGHTCOLOR #define DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR DISPID_A_BORDERBOTTOMCOLOR #define DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR DISPID_A_BORDERLEFTCOLOR #define DISPID_IHTMLRULESTYLE_BORDERWIDTH DISPID_A_BORDERWIDTH #define DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH DISPID_A_BORDERTOPWIDTH #define DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH DISPID_A_BORDERRIGHTWIDTH #define DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH DISPID_A_BORDERBOTTOMWIDTH #define DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH DISPID_A_BORDERLEFTWIDTH #define DISPID_IHTMLRULESTYLE_BORDERSTYLE DISPID_A_BORDERSTYLE #define DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE DISPID_A_BORDERTOPSTYLE #define DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE DISPID_A_BORDERRIGHTSTYLE #define DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE DISPID_A_BORDERBOTTOMSTYLE #define DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE DISPID_A_BORDERLEFTSTYLE #define DISPID_IHTMLRULESTYLE_STYLEFLOAT DISPID_A_FLOAT #define DISPID_IHTMLRULESTYLE_CLEAR DISPID_A_CLEAR #define DISPID_IHTMLRULESTYLE_DISPLAY DISPID_A_DISPLAY #define DISPID_IHTMLRULESTYLE_VISIBILITY DISPID_A_VISIBILITY #define DISPID_IHTMLRULESTYLE_LISTSTYLETYPE DISPID_A_LISTSTYLETYPE #define DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION DISPID_A_LISTSTYLEPOSITION #define DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE DISPID_A_LISTSTYLEIMAGE #define DISPID_IHTMLRULESTYLE_LISTSTYLE DISPID_A_LISTSTYLE #define DISPID_IHTMLRULESTYLE_WHITESPACE DISPID_A_WHITESPACE #define DISPID_IHTMLRULESTYLE_POSITION DISPID_A_POSITION #define DISPID_IHTMLRULESTYLE_ZINDEX DISPID_A_ZINDEX #define DISPID_IHTMLRULESTYLE_OVERFLOW DISPID_A_OVERFLOW #define DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE DISPID_A_PAGEBREAKBEFORE #define DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER DISPID_A_PAGEBREAKAFTER #define DISPID_IHTMLRULESTYLE_CSSTEXT DISPID_A_STYLETEXT #define DISPID_IHTMLRULESTYLE_CURSOR DISPID_A_CURSOR #define DISPID_IHTMLRULESTYLE_CLIP DISPID_A_CLIP #define DISPID_IHTMLRULESTYLE_FILTER DISPID_A_FILTER #define DISPID_IHTMLRULESTYLE_TOP STDPROPID_XOBJ_TOP #define DISPID_IHTMLRULESTYLE_LEFT STDPROPID_XOBJ_LEFT #define DISPID_IHTMLRULESTYLE_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLRULESTYLE_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLRULESTYLE_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR DISPID_BACKCOLOR /* IHTMLDOMNode */ #define DISPID_IHTMLDOMNODE_NODETYPE DISPID_ELEMENT+46 #define DISPID_IHTMLDOMNODE_PARENTNODE DISPID_ELEMENT+47 #define DISPID_IHTMLDOMNODE_HASCHILDNODES DISPID_ELEMENT+48 #define DISPID_IHTMLDOMNODE_CHILDNODES DISPID_ELEMENT+49 #define DISPID_IHTMLDOMNODE_ATTRIBUTES DISPID_ELEMENT+50 #define DISPID_IHTMLDOMNODE_INSERTBEFORE DISPID_ELEMENT+51 #define DISPID_IHTMLDOMNODE_REMOVECHILD DISPID_ELEMENT+52 #define DISPID_IHTMLDOMNODE_REPLACECHILD DISPID_ELEMENT+53 #define DISPID_IHTMLDOMNODE_CLONENODE DISPID_ELEMENT+61 #define DISPID_IHTMLDOMNODE_REMOVENODE DISPID_ELEMENT+66 #define DISPID_IHTMLDOMNODE_SWAPNODE DISPID_ELEMENT+68 #define DISPID_IHTMLDOMNODE_REPLACENODE DISPID_ELEMENT+67 #define DISPID_IHTMLDOMNODE_APPENDCHILD DISPID_ELEMENT+73 #define DISPID_IHTMLDOMNODE_NODENAME DISPID_ELEMENT+74 #define DISPID_IHTMLDOMNODE_NODEVALUE DISPID_ELEMENT+75 #define DISPID_IHTMLDOMNODE_FIRSTCHILD DISPID_ELEMENT+76 #define DISPID_IHTMLDOMNODE_LASTCHILD DISPID_ELEMENT+77 #define DISPID_IHTMLDOMNODE_PREVIOUSSIBLING DISPID_ELEMENT+78 #define DISPID_IHTMLDOMNODE_NEXTSIBLING DISPID_ELEMENT+79 /* IHTMLDOMNode3 */ #define DISPID_IHTMLDOMNODE3_PREFIX DISPID_ELEMENT+120 #define DISPID_IHTMLDOMNODE3_LOCALNAME DISPID_ELEMENT+118 #define DISPID_IHTMLDOMNODE3_NAMESPACEURI DISPID_ELEMENT+119 #define DISPID_IHTMLDOMNODE3_TEXTCONTENT DISPID_ELEMENT+127 #define DISPID_IHTMLDOMNODE3_ISEQUALNODE DISPID_ELEMENT+121 #define DISPID_IHTMLDOMNODE3_LOOKUPNAMESPACEURI DISPID_ELEMENT+122 #define DISPID_IHTMLDOMNODE3_LOOKUPPREFIX DISPID_ELEMENT+123 #define DISPID_IHTMLDOMNODE3_ISDEFAULTNAMESPACE DISPID_ELEMENT+124 #define DISPID_IHTMLDOMNODE3_IE9_APPENDCHILD DISPID_IE9_ELEMENT+18 #define DISPID_IHTMLDOMNODE3_IE9_INSERTBEFORE DISPID_IE9_ELEMENT+19 #define DISPID_IHTMLDOMNODE3_IE9_REMOVECHILD DISPID_IE9_ELEMENT+20 #define DISPID_IHTMLDOMNODE3_IE9_REPLACECHILD DISPID_IE9_ELEMENT+21 #define DISPID_IHTMLDOMNODE3_ISSAMENODE DISPID_ELEMENT+125 #define DISPID_IHTMLDOMNODE3_COMPAREDOCUMENTPOSITION DISPID_ELEMENT+126 #define DISPID_IHTMLDOMNODE3_ISSUPPORTED DISPID_IE9_ELEMENT+27 /* IHTMLLinkElement */ #define DISPID_IHTMLLINKELEMENT_HREF DISPID_HEDELEMS+5 #define DISPID_IHTMLLINKELEMENT_REL DISPID_HEDELEMS+6 #define DISPID_IHTMLLINKELEMENT_REV DISPID_HEDELEMS+7 #define DISPID_IHTMLLINKELEMENT_TYPE DISPID_HEDELEMS+8 #define DISPID_IHTMLLINKELEMENT_READYSTATE DISPID_A_READYSTATE #define DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE #define DISPID_IHTMLLINKELEMENT_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLLINKELEMENT_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLLINKELEMENT_STYLESHEET DISPID_HEDELEMS+14 #define DISPID_IHTMLLINKELEMENT_DISABLED STDPROPID_XOBJ_DISABLED #define DISPID_IHTMLLINKELEMENT_MEDIA DISPID_HEDELEMS+16 /* IHTMLLinkElement2 */ #define DISPID_IHTMLLINKELEMENT2_TARGET DISPID_HEDELEMS+17 /* IHTMLLinkElement3 */ #define DISPID_IHTMLLINKELEMENT3_CHARSET DISPID_HEDELEMS+18 #define DISPID_IHTMLLINKELEMENT3_HREFLANG DISPID_HEDELEMS+19 /* IHTMLLinkElement4 */ #define DISPID_IHTMLLINKELEMENT4_IE8_HREF DISPID_IE8_LINK /* IHTMLDOMNode2 */ #define DISPID_IHTMLDOMNODE2_OWNERDOCUMENT DISPID_ELEMENT+113 /* IHTMLDOMTextNode */ #define DISPID_IHTMLDOMTEXTNODE_DATA DISPID_DOMTEXTNODE #define DISPID_IHTMLDOMTEXTNODE_TOSTRING DISPID_DOMTEXTNODE+1 #define DISPID_IHTMLDOMTEXTNODE_LENGTH DISPID_DOMTEXTNODE+2 #define DISPID_IHTMLDOMTEXTNODE_SPLITTEXT DISPID_DOMTEXTNODE+3 /* IHTMLDOMTextNode2 */ #define DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA DISPID_DOMTEXTNODE+4 #define DISPID_IHTMLDOMTEXTNODE2_APPENDDATA DISPID_DOMTEXTNODE+5 #define DISPID_IHTMLDOMTEXTNODE2_INSERTDATA DISPID_DOMTEXTNODE+6 #define DISPID_IHTMLDOMTEXTNODE2_DELETEDATA DISPID_DOMTEXTNODE+7 #define DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA DISPID_DOMTEXTNODE+8 /* IHTMLRenderStyle */ #define DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE DISPID_A_TEXTLINETHROUGHSTYLE #define DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE DISPID_A_TEXTUNDERLINESTYLE #define DISPID_IHTMLRENDERSTYLE_TEXTEFFECT DISPID_A_TEXTEFFECT #define DISPID_IHTMLRENDERSTYLE_TEXTCOLOR DISPID_A_TEXTCOLOR #define DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR DISPID_A_TEXTBACKGROUNDCOLOR #define DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR DISPID_A_TEXTDECORATIONCOLOR #define DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY DISPID_A_RENDERINGPRIORITY #define DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION DISPID_A_DEFAULTTEXTSELECTION #define DISPID_IHTMLRENDERSTYLE_TEXTDECORATION DISPID_A_STYLETEXTDECORATION /* IHTMLDOMImplementation */ #define DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE DISPID_DOMIMPLEMENTATION /* IHTMLDOMAttribute */ #define DISPID_IHTMLDOMATTRIBUTE_NODENAME DISPID_DOMATTRIBUTE #define DISPID_IHTMLDOMATTRIBUTE_NODEVALUE DISPID_DOMATTRIBUTE+2 #define DISPID_IHTMLDOMATTRIBUTE_SPECIFIED DISPID_DOMATTRIBUTE+1 /* IHTMLDOMAttribute2 */ #define DISPID_IHTMLDOMATTRIBUTE2_NAME DISPID_DOMATTRIBUTE+3 #define DISPID_IHTMLDOMATTRIBUTE2_VALUE DISPID_DOMATTRIBUTE+4 #define DISPID_IHTMLDOMATTRIBUTE2_EXPANDO DISPID_DOMATTRIBUTE+5 #define DISPID_IHTMLDOMATTRIBUTE2_NODETYPE DISPID_DOMATTRIBUTE+6 #define DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE DISPID_DOMATTRIBUTE+7 #define DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES DISPID_DOMATTRIBUTE+8 #define DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD DISPID_DOMATTRIBUTE+9 #define DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD DISPID_DOMATTRIBUTE+10 #define DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING DISPID_DOMATTRIBUTE+11 #define DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING DISPID_DOMATTRIBUTE+12 #define DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES DISPID_DOMATTRIBUTE+13 #define DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT DISPID_DOMATTRIBUTE+14 #define DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE DISPID_DOMATTRIBUTE+15 #define DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD DISPID_DOMATTRIBUTE+16 #define DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD DISPID_DOMATTRIBUTE+17 #define DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD DISPID_DOMATTRIBUTE+18 #define DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES DISPID_DOMATTRIBUTE+19 #define DISPID_IHTMLDOMATTRIBUTE2_CLONENODE DISPID_DOMATTRIBUTE+20 /* IHTMLDOMAttribute3 */ #define DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE DISPID_IE8_ATTR+3 #define DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE DISPID_IE8_ATTR+4 #define DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED DISPID_IE8_ATTR #define DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT DISPID_IE8_ATTR+1 /* IHTMLDocumentCompatibleInfo */ #define DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT DISPID_DOCUMENTCOMPATIBLEINFO #define DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION DISPID_DOCUMENTCOMPATIBLEINFO+1 /* IHTMLDocumentCompatibleInfoCollection */ #define DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION #define DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION+1 /* IHTMLBodyElement */ #define DISPID_IHTMLBODYELEMENT_BACKGROUND DISPID_A_BACKGROUNDIMAGE #define DISPID_IHTMLBODYELEMENT_BGPROPERTIES DISPID_A_BACKGROUNDATTACHMENT #define DISPID_IHTMLBODYELEMENT_LEFTMARGIN DISPID_A_MARGINLEFT #define DISPID_IHTMLBODYELEMENT_TOPMARGIN DISPID_A_MARGINTOP #define DISPID_IHTMLBODYELEMENT_RIGHTMARGIN DISPID_A_MARGINRIGHT #define DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN DISPID_A_MARGINBOTTOM #define DISPID_IHTMLBODYELEMENT_NOWRAP DISPID_A_NOWRAP #define DISPID_IHTMLBODYELEMENT_BGCOLOR DISPID_BACKCOLOR #define DISPID_IHTMLBODYELEMENT_TEXT DISPID_A_COLOR #define DISPID_IHTMLBODYELEMENT_LINK DISPID_BODY+10 #define DISPID_IHTMLBODYELEMENT_VLINK DISPID_BODY+12 #define DISPID_IHTMLBODYELEMENT_ALINK DISPID_BODY+11 #define DISPID_IHTMLBODYELEMENT_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLBODYELEMENT_ONUNLOAD DISPID_EVPROP_ONUNLOAD #define DISPID_IHTMLBODYELEMENT_SCROLL DISPID_A_SCROLL #define DISPID_IHTMLBODYELEMENT_ONSELECT DISPID_EVPROP_ONSELECT #define DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD DISPID_EVPROP_ONBEFOREUNLOAD #define DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE DISPID_BODY+13 /* IHTMLBodyElement2 */ #define DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT DISPID_EVPROP_ONBEFOREPRINT #define DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT DISPID_EVPROP_ONAFTERPRINT /* IHTMLAnchorElement */ #define DISPID_IHTMLANCHORELEMENT_HREF DISPID_VALUE #define DISPID_IHTMLANCHORELEMENT_TARGET DISPID_ANCHOR+3 #define DISPID_IHTMLANCHORELEMENT_REL DISPID_ANCHOR+5 #define DISPID_IHTMLANCHORELEMENT_REV DISPID_ANCHOR+6 #define DISPID_IHTMLANCHORELEMENT_URN DISPID_ANCHOR+7 #define DISPID_IHTMLANCHORELEMENT_METHODS DISPID_ANCHOR+8 #define DISPID_IHTMLANCHORELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLANCHORELEMENT_HOST DISPID_ANCHOR+12 #define DISPID_IHTMLANCHORELEMENT_HOSTNAME DISPID_ANCHOR+13 #define DISPID_IHTMLANCHORELEMENT_PATHNAME DISPID_ANCHOR+14 #define DISPID_IHTMLANCHORELEMENT_PORT DISPID_ANCHOR+15 #define DISPID_IHTMLANCHORELEMENT_PROTOCOL DISPID_ANCHOR+16 #define DISPID_IHTMLANCHORELEMENT_SEARCH DISPID_ANCHOR+17 #define DISPID_IHTMLANCHORELEMENT_HASH DISPID_ANCHOR+18 #define DISPID_IHTMLANCHORELEMENT_ONBLUR DISPID_EVPROP_ONBLUR #define DISPID_IHTMLANCHORELEMENT_ONFOCUS DISPID_EVPROP_ONFOCUS #define DISPID_IHTMLANCHORELEMENT_ACCESSKEY DISPID_SITE+5 #define DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG DISPID_ANCHOR+31 #define DISPID_IHTMLANCHORELEMENT_MIMETYPE DISPID_ANCHOR+30 #define DISPID_IHTMLANCHORELEMENT_NAMEPROP DISPID_ANCHOR+32 #define DISPID_IHTMLANCHORELEMENT_TABINDEX STDPROPID_XOBJ_TABINDEX #define DISPID_IHTMLANCHORELEMENT_FOCUS DISPID_SITE+0 #define DISPID_IHTMLANCHORELEMENT_BLUR DISPID_SITE+2 /* IHTMLAnchorElement2 */ #define DISPID_IHTMLANCHORELEMENT2_CHARSET DISPID_ANCHOR+23 #define DISPID_IHTMLANCHORELEMENT2_COORDS DISPID_ANCHOR+24 #define DISPID_IHTMLANCHORELEMENT2_HREFLANG DISPID_ANCHOR+25 #define DISPID_IHTMLANCHORELEMENT2_SHAPE DISPID_ANCHOR+26 #define DISPID_IHTMLANCHORELEMENT2_TYPE DISPID_ANCHOR+27 /* IHTMLAnchorElement3 */ #define DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE DISPID_IE8_ANCHOR+1 #define DISPID_IHTMLANCHORELEMENT3_IE8_COORDS DISPID_IE8_ANCHOR+2 #define DISPID_IHTMLANCHORELEMENT3_IE8_HREF DISPID_IE8_ANCHOR+3 /* IHTMLAreaElement */ #define DISPID_IHTMLAREAELEMENT_SHAPE DISPID_AREA+1 #define DISPID_IHTMLAREAELEMENT_COORDS DISPID_AREA+2 #define DISPID_IHTMLAREAELEMENT_HREF DISPID_VALUE #define DISPID_IHTMLAREAELEMENT_TARGET DISPID_AREA+4 #define DISPID_IHTMLAREAELEMENT_ALT DISPID_AREA+5 #define DISPID_IHTMLAREAELEMENT_NOHREF DISPID_AREA+6 #define DISPID_IHTMLAREAELEMENT_HOST DISPID_AREA+7 #define DISPID_IHTMLAREAELEMENT_HOSTNAME DISPID_AREA+8 #define DISPID_IHTMLAREAELEMENT_PATHNAME DISPID_AREA+9 #define DISPID_IHTMLAREAELEMENT_PORT DISPID_AREA+10 #define DISPID_IHTMLAREAELEMENT_PROTOCOL DISPID_AREA+11 #define DISPID_IHTMLAREAELEMENT_SEARCH DISPID_AREA+12 #define DISPID_IHTMLAREAELEMENT_HASH DISPID_AREA+13 #define DISPID_IHTMLAREAELEMENT_ONBLUR DISPID_EVPROP_ONBLUR #define DISPID_IHTMLAREAELEMENT_ONFOCUS DISPID_EVPROP_ONFOCUS #define DISPID_IHTMLAREAELEMENT_TABINDEX STDPROPID_XOBJ_TABINDEX #define DISPID_IHTMLAREAELEMENT_FOCUS DISPID_SITE+0 #define DISPID_IHTMLAREAELEMENT_BLUR DISPID_SITE+2 /* IHTMLAreaElement2 */ #define DISPID_IHTMLAREAELEMENT2_IE8_SHAPE DISPID_IE8_AREA+1 #define DISPID_IHTMLAREAELEMENT2_IE8_COORDS DISPID_IE8_AREA+2 #define DISPID_IHTMLAREAELEMENT2_IE8_HREF DISPID_IE8_AREA+3 /* IHTMLLabelElement */ #define DISPID_IHTMLLABELELEMENT_HTMLFOR DISPID_LABEL #define DISPID_IHTMLLABELELEMENT_ACCESSKEY DISPID_SITE+5 /* IHTMLLabelElement2 */ #define DISPID_IHTMLLABELELEMENT2_FORM DISPID_LABEL+2 /* IHTMLTxtRange */ #define DISPID_IHTMLTXTRANGE_HTMLTEXT DISPID_RANGE+3 #define DISPID_IHTMLTXTRANGE_TEXT DISPID_RANGE+4 #define DISPID_IHTMLTXTRANGE_PARENTELEMENT DISPID_RANGE+6 #define DISPID_IHTMLTXTRANGE_DUPLICATE DISPID_RANGE+8 #define DISPID_IHTMLTXTRANGE_INRANGE DISPID_RANGE+10 #define DISPID_IHTMLTXTRANGE_ISEQUAL DISPID_RANGE+11 #define DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW DISPID_RANGE+12 #define DISPID_IHTMLTXTRANGE_COLLAPSE DISPID_RANGE+13 #define DISPID_IHTMLTXTRANGE_EXPAND DISPID_RANGE+14 #define DISPID_IHTMLTXTRANGE_MOVE DISPID_RANGE+15 #define DISPID_IHTMLTXTRANGE_MOVESTART DISPID_RANGE+16 #define DISPID_IHTMLTXTRANGE_MOVEEND DISPID_RANGE+17 #define DISPID_IHTMLTXTRANGE_SELECT DISPID_RANGE+24 #define DISPID_IHTMLTXTRANGE_PASTEHTML DISPID_RANGE+26 #define DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT DISPID_RANGE+1 #define DISPID_IHTMLTXTRANGE_SETENDPOINT DISPID_RANGE+25 #define DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS DISPID_RANGE+18 #define DISPID_IHTMLTXTRANGE_FINDTEXT DISPID_RANGE+19 #define DISPID_IHTMLTXTRANGE_MOVETOPOINT DISPID_RANGE+20 #define DISPID_IHTMLTXTRANGE_GETBOOKMARK DISPID_RANGE+21 #define DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK DISPID_RANGE+9 #define DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED DISPID_RANGE+27 #define DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED DISPID_RANGE+28 #define DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE DISPID_RANGE+29 #define DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM DISPID_RANGE+30 #define DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT DISPID_RANGE+31 #define DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE DISPID_RANGE+32 #define DISPID_IHTMLTXTRANGE_EXECCOMMAND DISPID_RANGE+33 #define DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP DISPID_RANGE+34 /* IHTMLTextAreaElement */ #define DISPID_IHTMLTEXTAREAELEMENT_TYPE DISPID_INPUT #define DISPID_IHTMLTEXTAREAELEMENT_VALUE DISPID_A_VALUE #define DISPID_IHTMLTEXTAREAELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLTEXTAREAELEMENT_STATUS DISPID_INPUT+1 #define DISPID_IHTMLTEXTAREAELEMENT_DISABLED STDPROPID_XOBJ_DISABLED #define DISPID_IHTMLTEXTAREAELEMENT_FORM DISPID_SITE+4 #define DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE DISPID_DEFAULTVALUE #define DISPID_IHTMLTEXTAREAELEMENT_SELECT DISPID_RICHTEXT+5 #define DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE DISPID_EVPROP_ONCHANGE #define DISPID_IHTMLTEXTAREAELEMENT_ONSELECT DISPID_EVPROP_ONSELECT #define DISPID_IHTMLTEXTAREAELEMENT_READONLY DISPID_RICHTEXT+4 #define DISPID_IHTMLTEXTAREAELEMENT_ROWS DISPID_RICHTEXT+1 #define DISPID_IHTMLTEXTAREAELEMENT_COLS DISPID_RICHTEXT+2 #define DISPID_IHTMLTEXTAREAELEMENT_WRAP DISPID_RICHTEXT+3 #define DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE DISPID_RICHTEXT+6 /* IHTMLDOMRange */ #define DISPID_IHTMLDOMRANGE_STARTCONTAINER DISPID_DOMRANGE+1 #define DISPID_IHTMLDOMRANGE_STARTOFFSET DISPID_DOMRANGE+2 #define DISPID_IHTMLDOMRANGE_ENDCONTAINER DISPID_DOMRANGE+3 #define DISPID_IHTMLDOMRANGE_ENDOFFSET DISPID_DOMRANGE+4 #define DISPID_IHTMLDOMRANGE_COLLAPSED DISPID_DOMRANGE+5 #define DISPID_IHTMLDOMRANGE_COMMONANCESTORCONTAINER DISPID_DOMRANGE+6 #define DISPID_IHTMLDOMRANGE_SETSTART DISPID_DOMRANGE+7 #define DISPID_IHTMLDOMRANGE_SETEND DISPID_DOMRANGE+8 #define DISPID_IHTMLDOMRANGE_SETSTARTBEFORE DISPID_DOMRANGE+9 #define DISPID_IHTMLDOMRANGE_SETSTARTAFTER DISPID_DOMRANGE+10 #define DISPID_IHTMLDOMRANGE_SETENDBEFORE DISPID_DOMRANGE+11 #define DISPID_IHTMLDOMRANGE_SETENDAFTER DISPID_DOMRANGE+12 #define DISPID_IHTMLDOMRANGE_COLLAPSE DISPID_DOMRANGE+13 #define DISPID_IHTMLDOMRANGE_SELECTNODE DISPID_DOMRANGE+14 #define DISPID_IHTMLDOMRANGE_SELECTNODECONTENTS DISPID_DOMRANGE+15 #define DISPID_IHTMLDOMRANGE_COMPAREBOUNDARYPOINTS DISPID_DOMRANGE+16 #define DISPID_IHTMLDOMRANGE_DELETECONTENTS DISPID_DOMRANGE+17 #define DISPID_IHTMLDOMRANGE_EXTRACTCONTENTS DISPID_DOMRANGE+18 #define DISPID_IHTMLDOMRANGE_CLONECONTENTS DISPID_DOMRANGE+19 #define DISPID_IHTMLDOMRANGE_INSERTNODE DISPID_DOMRANGE+20 #define DISPID_IHTMLDOMRANGE_SURROUNDCONTENTS DISPID_DOMRANGE+21 #define DISPID_IHTMLDOMRANGE_CLONERANGE DISPID_DOMRANGE+22 #define DISPID_IHTMLDOMRANGE_TOSTRING DISPID_DOMRANGE+23 #define DISPID_IHTMLDOMRANGE_DETACH DISPID_DOMRANGE+24 #define DISPID_IHTMLDOMRANGE_GETCLIENTRECTS DISPID_DOMRANGE+25 #define DISPID_IHTMLDOMRANGE_GETBOUNDINGCLIENTRECT DISPID_DOMRANGE+26 /* IHTMLButtonElement */ #define DISPID_IHTMLBUTTONELEMENT_TYPE DISPID_INPUT #define DISPID_IHTMLBUTTONELEMENT_VALUE DISPID_A_VALUE #define DISPID_IHTMLBUTTONELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLBUTTONELEMENT_STATUS DISPID_BUTTON+1 #define DISPID_IHTMLBUTTONELEMENT_DISABLED STDPROPID_XOBJ_DISABLED #define DISPID_IHTMLBUTTONELEMENT_FORM DISPID_SITE+4 #define DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE DISPID_BUTTON+2 /* IHTMLInputElement */ #define DISPID_IHTMLINPUTELEMENT_TYPE DISPID_INPUT #define DISPID_IHTMLINPUTELEMENT_VALUE DISPID_A_VALUE #define DISPID_IHTMLINPUTELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLINPUTELEMENT_STATUS DISPID_INPUT+1 #define DISPID_IHTMLINPUTELEMENT_DISABLED STDPROPID_XOBJ_DISABLED #define DISPID_IHTMLINPUTELEMENT_FORM DISPID_SITE+4 #define DISPID_IHTMLINPUTELEMENT_SIZE DISPID_INPUT+2 #define DISPID_IHTMLINPUTELEMENT_MAXLENGTH DISPID_INPUT+3 #define DISPID_IHTMLINPUTELEMENT_SELECT DISPID_INPUT+4 #define DISPID_IHTMLINPUTELEMENT_ONCHANGE DISPID_EVPROP_ONCHANGE #define DISPID_IHTMLINPUTELEMENT_ONSELECT DISPID_EVPROP_ONSELECT #define DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE DISPID_DEFAULTVALUE #define DISPID_IHTMLINPUTELEMENT_READONLY DISPID_INPUT+5 #define DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE DISPID_INPUT+6 #define DISPID_IHTMLINPUTELEMENT_INDETERMINATE DISPID_INPUT+7 #define DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED DISPID_INPUT+8 #define DISPID_IHTMLINPUTELEMENT_CHECKED DISPID_INPUT+9 #define DISPID_IHTMLINPUTELEMENT_BORDER DISPID_INPUT+12 #define DISPID_IHTMLINPUTELEMENT_VSPACE DISPID_INPUT+13 #define DISPID_IHTMLINPUTELEMENT_HSPACE DISPID_INPUT+14 #define DISPID_IHTMLINPUTELEMENT_ALT DISPID_INPUT+10 #define DISPID_IHTMLINPUTELEMENT_SRC DISPID_INPUT+11 #define DISPID_IHTMLINPUTELEMENT_LOWSRC DISPID_INPUT+15 #define DISPID_IHTMLINPUTELEMENT_VRML DISPID_INPUT+16 #define DISPID_IHTMLINPUTELEMENT_DYNSRC DISPID_INPUT+17 #define DISPID_IHTMLINPUTELEMENT_READYSTATE DISPID_A_READYSTATE #define DISPID_IHTMLINPUTELEMENT_COMPLETE DISPID_INPUT+18 #define DISPID_IHTMLINPUTELEMENT_LOOP DISPID_INPUT+19 #define DISPID_IHTMLINPUTELEMENT_ALIGN STDPROPID_XOBJ_CONTROLALIGN #define DISPID_IHTMLINPUTELEMENT_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLINPUTELEMENT_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLINPUTELEMENT_ONABORT DISPID_EVPROP_ONABORT #define DISPID_IHTMLINPUTELEMENT_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLINPUTELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLINPUTELEMENT_START DISPID_INPUT+20 /* IHTMLInputElement2 */ #define DISPID_IHTMLINPUTELEMENT2_ACCEPT DISPID_INPUT+22 #define DISPID_IHTMLINPUTELEMENT2_USEMAP DISPID_INPUT+23 /* IHTMLInputTextElement */ #define DISPID_IHTMLINPUTTEXTELEMENT_TYPE DISPID_INPUT #define DISPID_IHTMLINPUTTEXTELEMENT_VALUE DISPID_A_VALUE #define DISPID_IHTMLINPUTTEXTELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLINPUTTEXTELEMENT_STATUS DISPID_INPUT+21 #define DISPID_IHTMLINPUTTEXTELEMENT_DISABLED STDPROPID_XOBJ_DISABLED #define DISPID_IHTMLINPUTTEXTELEMENT_FORM DISPID_SITE+4 #define DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE DISPID_DEFAULTVALUE #define DISPID_IHTMLINPUTTEXTELEMENT_SIZE DISPID_INPUT+2 #define DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH DISPID_INPUT+3 #define DISPID_IHTMLINPUTTEXTELEMENT_SELECT DISPID_INPUT+4 #define DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE DISPID_EVPROP_ONCHANGE #define DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT DISPID_EVPROP_ONSELECT #define DISPID_IHTMLINPUTTEXTELEMENT_READONLY DISPID_INPUT+5 #define DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE DISPID_INPUT+6 /* IHTMLInputTextElement2 */ #define DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART DISPID_INPUT+25 #define DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND DISPID_INPUT+26 #define DISPID_IHTMLINPUTTEXTELEMENT2_SETSELECTIONRANGE DISPID_INPUT+27 /* IHTMLSelectElement */ #define DISPID_IHTMLSELECTELEMENT_SIZE DISPID_SELECT+2 #define DISPID_IHTMLSELECTELEMENT_MULTIPLE DISPID_SELECT+3 #define DISPID_IHTMLSELECTELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLSELECTELEMENT_OPTIONS DISPID_SELECT+5 #define DISPID_IHTMLSELECTELEMENT_ONCHANGE DISPID_EVPROP_ONCHANGE #define DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX DISPID_SELECT+10 #define DISPID_IHTMLSELECTELEMENT_TYPE DISPID_SELECT+12 #define DISPID_IHTMLSELECTELEMENT_VALUE DISPID_SELECT+11 #define DISPID_IHTMLSELECTELEMENT_DISABLED STDPROPID_XOBJ_DISABLED #define DISPID_IHTMLSELECTELEMENT_FORM DISPID_SITE+4 #define DISPID_IHTMLSELECTELEMENT_ADD DISPID_COLLECTION+3 #define DISPID_IHTMLSELECTELEMENT_REMOVE DISPID_COLLECTION+4 #define DISPID_IHTMLSELECTELEMENT_LENGTH DISPID_COLLECTION #define DISPID_IHTMLSELECTELEMENT__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLSELECTELEMENT_ITEM DISPID_VALUE #define DISPID_IHTMLSELECTELEMENT_TAGS DISPID_COLLECTION+2 /* IHTMLSelectElement2 */ #define DISPID_IHTMLSELECTELEMENT2_URNS DISPID_COLLECTION+5 /* IHTMLSelectElement4 */ #define DISPID_IHTMLSELECTELEMENT4_NAMEDITEM DISPID_COLLECTION+6 /* IHTMLHtmlElement */ #define DISPID_IHTMLHTMLELEMENT_VERSION DISPID_HEDELEMS+1 /* IHTMLHeadElement */ #define DISPID_IHTMLHEADELEMENT_PROFILE DISPID_HEDELEMS+1 /* IHTMLHeadElement2 */ #define DISPID_IHTMLHEADELEMENT2_IE8_PROFILE DISPID_IE8_HEAD /* IHTMLTitleElement */ #define DISPID_IHTMLTITLEELEMENT_TEXT DISPID_A_VALUE /* IHTMLMetaElement */ #define DISPID_IHTMLMETAELEMENT_HTTPEQUIV DISPID_HEDELEMS+1 #define DISPID_IHTMLMETAELEMENT_CONTENT DISPID_HEDELEMS+2 #define DISPID_IHTMLMETAELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLMETAELEMENT_URL DISPID_HEDELEMS+3 #define DISPID_IHTMLMETAELEMENT_CHARSET DISPID_HEDELEMS+13 /* IHTMLMetaElement2 */ #define DISPID_IHTMLMETAELEMENT2_SCHEME DISPID_HEDELEMS+20 /* IHTMLMetaElement3 */ #define DISPID_IHTMLMETAELEMENT3_IE8_URL DISPID_IE8_META /* IHTMLRect */ #define DISPID_IHTMLRECT_LEFT DISPID_OMRECT+1 #define DISPID_IHTMLRECT_TOP DISPID_OMRECT+2 #define DISPID_IHTMLRECT_RIGHT DISPID_OMRECT+3 #define DISPID_IHTMLRECT_BOTTOM DISPID_OMRECT+4 /* IHTMLRectCollection */ #define DISPID_IHTMLRECTCOLLECTION_LENGTH DISPID_COLLECTION #define DISPID_IHTMLRECTCOLLECTION__NEWENUM DISPID_NEWENUM #define DISPID_IHTMLRECTCOLLECTION_ITEM DISPID_VALUE /* IHTMLCurrentStyle */ #define DISPID_IHTMLCURRENTSTYLE_POSITION DISPID_A_POSITION #define DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT DISPID_A_FLOAT #define DISPID_IHTMLCURRENTSTYLE_COLOR DISPID_A_COLOR #define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR DISPID_BACKCOLOR #define DISPID_IHTMLCURRENTSTYLE_FONTFAMILY DISPID_A_FONTFACE #define DISPID_IHTMLCURRENTSTYLE_FONTSTYLE DISPID_A_FONTSTYLE #define DISPID_IHTMLCURRENTSTYLE_FONTVARIANT DISPID_A_FONTVARIANT #define DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT DISPID_A_FONTWEIGHT #define DISPID_IHTMLCURRENTSTYLE_FONTSIZE DISPID_A_FONTSIZE #define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE DISPID_A_BACKGROUNDIMAGE #define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX DISPID_A_BACKGROUNDPOSX #define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY DISPID_A_BACKGROUNDPOSY #define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT DISPID_A_BACKGROUNDREPEAT #define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR DISPID_A_BORDERLEFTCOLOR #define DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR DISPID_A_BORDERTOPCOLOR #define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR DISPID_A_BORDERRIGHTCOLOR #define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR DISPID_A_BORDERBOTTOMCOLOR #define DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE DISPID_A_BORDERTOPSTYLE #define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE DISPID_A_BORDERRIGHTSTYLE #define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE DISPID_A_BORDERBOTTOMSTYLE #define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE DISPID_A_BORDERLEFTSTYLE #define DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH DISPID_A_BORDERTOPWIDTH #define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH DISPID_A_BORDERRIGHTWIDTH #define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH DISPID_A_BORDERBOTTOMWIDTH #define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH DISPID_A_BORDERLEFTWIDTH #define DISPID_IHTMLCURRENTSTYLE_LEFT STDPROPID_XOBJ_LEFT #define DISPID_IHTMLCURRENTSTYLE_TOP STDPROPID_XOBJ_TOP #define DISPID_IHTMLCURRENTSTYLE_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLCURRENTSTYLE_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT DISPID_A_PADDINGLEFT #define DISPID_IHTMLCURRENTSTYLE_PADDINGTOP DISPID_A_PADDINGTOP #define DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT DISPID_A_PADDINGRIGHT #define DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM DISPID_A_PADDINGBOTTOM #define DISPID_IHTMLCURRENTSTYLE_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION DISPID_A_TEXTDECORATION #define DISPID_IHTMLCURRENTSTYLE_DISPLAY DISPID_A_DISPLAY #define DISPID_IHTMLCURRENTSTYLE_VISIBILITY DISPID_A_VISIBILITY #define DISPID_IHTMLCURRENTSTYLE_ZINDEX DISPID_A_ZINDEX #define DISPID_IHTMLCURRENTSTYLE_LETTERSPACING DISPID_A_LETTERSPACING #define DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT DISPID_A_LINEHEIGHT #define DISPID_IHTMLCURRENTSTYLE_TEXTINDENT DISPID_A_TEXTINDENT #define DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN DISPID_A_VERTICALALIGN #define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT DISPID_A_BACKGROUNDATTACHMENT #define DISPID_IHTMLCURRENTSTYLE_MARGINTOP DISPID_A_MARGINTOP #define DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT DISPID_A_MARGINRIGHT #define DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM DISPID_A_MARGINBOTTOM #define DISPID_IHTMLCURRENTSTYLE_MARGINLEFT DISPID_A_MARGINLEFT #define DISPID_IHTMLCURRENTSTYLE_CLEAR DISPID_A_CLEAR #define DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE DISPID_A_LISTSTYLETYPE #define DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION DISPID_A_LISTSTYLEPOSITION #define DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE DISPID_A_LISTSTYLEIMAGE #define DISPID_IHTMLCURRENTSTYLE_CLIPTOP DISPID_A_CLIPRECTTOP #define DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT DISPID_A_CLIPRECTRIGHT #define DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM DISPID_A_CLIPRECTBOTTOM #define DISPID_IHTMLCURRENTSTYLE_CLIPLEFT DISPID_A_CLIPRECTLEFT #define DISPID_IHTMLCURRENTSTYLE_OVERFLOW DISPID_A_OVERFLOW #define DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE DISPID_A_PAGEBREAKBEFORE #define DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER DISPID_A_PAGEBREAKAFTER #define DISPID_IHTMLCURRENTSTYLE_CURSOR DISPID_A_CURSOR #define DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT DISPID_A_TABLELAYOUT #define DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE DISPID_A_BORDERCOLLAPSE #define DISPID_IHTMLCURRENTSTYLE_DIRECTION DISPID_A_DIRECTION #define DISPID_IHTMLCURRENTSTYLE_BEHAVIOR DISPID_A_BEHAVIOR #define DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE DISPID_HTMLOBJECT+2 #define DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI DISPID_A_UNICODEBIDI #define DISPID_IHTMLCURRENTSTYLE_RIGHT STDPROPID_XOBJ_RIGHT #define DISPID_IHTMLCURRENTSTYLE_BOTTOM STDPROPID_XOBJ_BOTTOM #define DISPID_IHTMLCURRENTSTYLE_IMEMODE DISPID_A_IMEMODE #define DISPID_IHTMLCURRENTSTYLE_RUBYALIGN DISPID_A_RUBYALIGN #define DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION DISPID_A_RUBYPOSITION #define DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG DISPID_A_RUBYOVERHANG #define DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE DISPID_A_TEXTAUTOSPACE #define DISPID_IHTMLCURRENTSTYLE_LINEBREAK DISPID_A_LINEBREAK #define DISPID_IHTMLCURRENTSTYLE_WORDBREAK DISPID_A_WORDBREAK #define DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY DISPID_A_TEXTJUSTIFY #define DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM DISPID_A_TEXTJUSTIFYTRIM #define DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA DISPID_A_TEXTKASHIDA #define DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION DISPID_A_DIR #define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR DISPID_A_LAYOUTGRIDCHAR #define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE DISPID_A_LAYOUTGRIDLINE #define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE DISPID_A_LAYOUTGRIDMODE #define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE DISPID_A_LAYOUTGRIDTYPE #define DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE DISPID_A_BORDERSTYLE #define DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR DISPID_A_BORDERCOLOR #define DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH DISPID_A_BORDERWIDTH #define DISPID_IHTMLCURRENTSTYLE_PADDING DISPID_A_PADDING #define DISPID_IHTMLCURRENTSTYLE_MARGIN DISPID_A_MARGIN #define DISPID_IHTMLCURRENTSTYLE_ACCELERATOR DISPID_A_ACCELERATOR #define DISPID_IHTMLCURRENTSTYLE_OVERFLOWX DISPID_A_OVERFLOWX #define DISPID_IHTMLCURRENTSTYLE_OVERFLOWY DISPID_A_OVERFLOWY #define DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM DISPID_A_TEXTTRANSFORM /* IHTMLCurrentStyle2 */ #define DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW DISPID_A_LAYOUTFLOW #define DISPID_IHTMLCURRENTSTYLE2_WORDWRAP DISPID_A_WORDWRAP #define DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION DISPID_A_TEXTUNDERLINEPOSITION #define DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT DISPID_A_HASLAYOUT #define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR DISPID_A_SCROLLBARBASECOLOR #define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR DISPID_A_SCROLLBARFACECOLOR #define DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR DISPID_A_SCROLLBAR3DLIGHTCOLOR #define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR DISPID_A_SCROLLBARSHADOWCOLOR #define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR DISPID_A_SCROLLBARHIGHLIGHTCOLOR #define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR DISPID_A_SCROLLBARDARKSHADOWCOLOR #define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR DISPID_A_SCROLLBARARROWCOLOR #define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR DISPID_A_SCROLLBARTRACKCOLOR #define DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE DISPID_A_WRITINGMODE #define DISPID_IHTMLCURRENTSTYLE2_ZOOM DISPID_A_ZOOM #define DISPID_IHTMLCURRENTSTYLE2_FILTER DISPID_A_FILTER #define DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST DISPID_A_TEXTALIGNLAST #define DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE DISPID_A_TEXTKASHIDASPACE #define DISPID_IHTMLCURRENTSTYLE2_ISBLOCK DISPID_A_ISBLOCK /* IHTMLCurrentStyle3 */ #define DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW DISPID_A_TEXTOVERFLOW #define DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT DISPID_A_MINHEIGHT #define DISPID_IHTMLCURRENTSTYLE3_WORDSPACING DISPID_A_WORDSPACING #define DISPID_IHTMLCURRENTSTYLE3_WHITESPACE DISPID_A_WHITESPACE /* IHTMLCurrentStyle4 */ #define DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE DISPID_A_INTERPOLATION #define DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT DISPID_A_MAXHEIGHT #define DISPID_IHTMLCURRENTSTYLE4_MINWIDTH DISPID_A_MINWIDTH #define DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH DISPID_A_MAXWIDTH /* HTMLTextContainerEvents2 */ #define DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE DISPID_EVMETH_ONCHANGE #define DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT DISPID_EVMETH_ONSELECT /* HTMLTextContainerEvents */ #define DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE DISPID_EVMETH_ONCHANGE #define DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT DISPID_EVMETH_ONSELECT /* IHTMLTextContainer */ #define DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE DISPID_TEXTSITE+1 #define DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT DISPID_TEXTSITE+2 #define DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH DISPID_TEXTSITE+3 #define DISPID_IHTMLTEXTCONTAINER_SCROLLTOP DISPID_TEXTSITE+4 #define DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT DISPID_TEXTSITE+5 #define DISPID_IHTMLTEXTCONTAINER_ONSCROLL DISPID_EVPROP_ONSCROLL /* IHTMLTableCaption */ #define DISPID_IHTMLTABLECAPTION_ALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLTABLECAPTION_VALIGN DISPID_A_TABLEVALIGN /* IHTMLCommentElement */ #define DISPID_IHTMLCOMMENTELEMENT_TEXT DISPID_COMMENTPDL+1 #define DISPID_IHTMLCOMMENTELEMENT_ATOMIC DISPID_COMMENTPDL+2 /* IHTMLCommentElement2 */ #define DISPID_IHTMLCOMMENTELEMENT2_DATA DISPID_COMMENTPDL+3 #define DISPID_IHTMLCOMMENTELEMENT2_LENGTH DISPID_COMMENTPDL+4 #define DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA DISPID_COMMENTPDL+5 #define DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA DISPID_COMMENTPDL+6 #define DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA DISPID_COMMENTPDL+7 #define DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA DISPID_COMMENTPDL+8 #define DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA DISPID_COMMENTPDL+9 /* IHTMLTable */ #define DISPID_IHTMLTABLE_COLS DISPID_TABLE+1 #define DISPID_IHTMLTABLE_BORDER DISPID_TABLE+2 #define DISPID_IHTMLTABLE_FRAME DISPID_TABLE+4 #define DISPID_IHTMLTABLE_RULES DISPID_TABLE+3 #define DISPID_IHTMLTABLE_CELLSPACING DISPID_TABLE+5 #define DISPID_IHTMLTABLE_CELLPADDING DISPID_TABLE+6 #define DISPID_IHTMLTABLE_BACKGROUND DISPID_A_BACKGROUNDIMAGE #define DISPID_IHTMLTABLE_BGCOLOR DISPID_BACKCOLOR #define DISPID_IHTMLTABLE_BORDERCOLOR DISPID_A_TABLEBORDERCOLOR #define DISPID_IHTMLTABLE_BORDERCOLORLIGHT DISPID_A_TABLEBORDERCOLORLIGHT #define DISPID_IHTMLTABLE_BORDERCOLORDARK DISPID_A_TABLEBORDERCOLORDARK #define DISPID_IHTMLTABLE_ALIGN STDPROPID_XOBJ_CONTROLALIGN #define DISPID_IHTMLTABLE_REFRESH DISPID_TABLE+15 #define DISPID_IHTMLTABLE_ROWS DISPID_TABLE+16 #define DISPID_IHTMLTABLE_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLTABLE_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLTABLE_DATAPAGESIZE DISPID_TABLE+17 #define DISPID_IHTMLTABLE_NEXTPAGE DISPID_TABLE+18 #define DISPID_IHTMLTABLE_PREVIOUSPAGE DISPID_TABLE+19 #define DISPID_IHTMLTABLE_THEAD DISPID_TABLE+20 #define DISPID_IHTMLTABLE_TFOOT DISPID_TABLE+21 #define DISPID_IHTMLTABLE_TBODIES DISPID_TABLE+24 #define DISPID_IHTMLTABLE_CAPTION DISPID_TABLE+25 #define DISPID_IHTMLTABLE_CREATETHEAD DISPID_TABLE+26 #define DISPID_IHTMLTABLE_DELETETHEAD DISPID_TABLE+27 #define DISPID_IHTMLTABLE_CREATETFOOT DISPID_TABLE+28 #define DISPID_IHTMLTABLE_DELETETFOOT DISPID_TABLE+29 #define DISPID_IHTMLTABLE_CREATECAPTION DISPID_TABLE+30 #define DISPID_IHTMLTABLE_DELETECAPTION DISPID_TABLE+31 #define DISPID_IHTMLTABLE_INSERTROW DISPID_TABLE+32 #define DISPID_IHTMLTABLE_DELETEROW DISPID_TABLE+33 #define DISPID_IHTMLTABLE_READYSTATE DISPID_A_READYSTATE #define DISPID_IHTMLTABLE_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE /* IHTMLTable2 */ #define DISPID_IHTMLTABLE2_FIRSTPAGE DISPID_TABLE+35 #define DISPID_IHTMLTABLE2_LASTPAGE DISPID_TABLE+36 #define DISPID_IHTMLTABLE2_CELLS DISPID_TABLE+37 #define DISPID_IHTMLTABLE2_MOVEROW DISPID_TABLE+38 /* IHTMLTable3 */ #define DISPID_IHTMLTABLE3_SUMMARY DISPID_TABLE+39 /* IHTMLTableSection */ #define DISPID_IHTMLTABLESECTION_ALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLTABLESECTION_VALIGN DISPID_A_TABLEVALIGN #define DISPID_IHTMLTABLESECTION_BGCOLOR DISPID_BACKCOLOR #define DISPID_IHTMLTABLESECTION_ROWS DISPID_TABLESECTION #define DISPID_IHTMLTABLESECTION_INSERTROW DISPID_TABLESECTION+1 #define DISPID_IHTMLTABLESECTION_DELETEROW DISPID_TABLESECTION+2 /* IHTMLTableRow */ #define DISPID_IHTMLTABLEROW_ALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLTABLEROW_VALIGN DISPID_A_TABLEVALIGN #define DISPID_IHTMLTABLEROW_BGCOLOR DISPID_BACKCOLOR #define DISPID_IHTMLTABLEROW_BORDERCOLOR DISPID_A_TABLEBORDERCOLOR #define DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT DISPID_A_TABLEBORDERCOLORLIGHT #define DISPID_IHTMLTABLEROW_BORDERCOLORDARK DISPID_A_TABLEBORDERCOLORDARK #define DISPID_IHTMLTABLEROW_ROWINDEX DISPID_TABLEROW #define DISPID_IHTMLTABLEROW_SECTIONROWINDEX DISPID_TABLEROW+1 #define DISPID_IHTMLTABLEROW_CELLS DISPID_TABLEROW+2 #define DISPID_IHTMLTABLEROW_INSERTCELL DISPID_TABLEROW+3 #define DISPID_IHTMLTABLEROW_DELETECELL DISPID_TABLEROW+4 /* IHTMLTableRow2 */ #define DISPID_IHTMLTABLEROW2_HEIGHT STDPROPID_XOBJ_HEIGHT /* IHTMLTableRow3 */ #define DISPID_IHTMLTABLEROW3_CH DISPID_TABLEROW+9 #define DISPID_IHTMLTABLEROW3_CHOFF DISPID_TABLEROW+10 /* IHTMLTableCell */ #define DISPID_IHTMLTABLECELL_ROWSPAN DISPID_TABLECELL+1 #define DISPID_IHTMLTABLECELL_COLSPAN DISPID_TABLECELL+2 #define DISPID_IHTMLTABLECELL_ALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLTABLECELL_VALIGN DISPID_A_TABLEVALIGN #define DISPID_IHTMLTABLECELL_BGCOLOR DISPID_BACKCOLOR #define DISPID_IHTMLTABLECELL_NOWRAP DISPID_A_NOWRAP #define DISPID_IHTMLTABLECELL_BACKGROUND DISPID_A_BACKGROUNDIMAGE #define DISPID_IHTMLTABLECELL_BORDERCOLOR DISPID_A_TABLEBORDERCOLOR #define DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT DISPID_A_TABLEBORDERCOLORLIGHT #define DISPID_IHTMLTABLECELL_BORDERCOLORDARK DISPID_A_TABLEBORDERCOLORDARK #define DISPID_IHTMLTABLECELL_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLTABLECELL_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLTABLECELL_CELLINDEX DISPID_TABLECELL+3 /* IHTMLTableCell2 */ #define DISPID_IHTMLTABLECELL2_ABBR DISPID_TABLECELL+4 #define DISPID_IHTMLTABLECELL2_AXIS DISPID_TABLECELL+5 #define DISPID_IHTMLTABLECELL2_CH DISPID_TABLECELL+6 #define DISPID_IHTMLTABLECELL2_CHOFF DISPID_TABLECELL+7 #define DISPID_IHTMLTABLECELL2_HEADERS DISPID_TABLECELL+8 #define DISPID_IHTMLTABLECELL2_SCOPE DISPID_TABLECELL+9 /* IHTMLTableCell3 */ #define DISPID_IHTMLTABLECELL3_IE9_CH DISPID_TABLECELL+10 #define DISPID_IHTMLTABLECELL3_IE9_CHOFF DISPID_TABLECELL+11 /* IHTMLScriptElement */ #define DISPID_IHTMLSCRIPTELEMENT_SRC DISPID_SCRIPT+1 #define DISPID_IHTMLSCRIPTELEMENT_HTMLFOR DISPID_SCRIPT+4 #define DISPID_IHTMLSCRIPTELEMENT_EVENT DISPID_SCRIPT+5 #define DISPID_IHTMLSCRIPTELEMENT_TEXT DISPID_SCRIPT+6 #define DISPID_IHTMLSCRIPTELEMENT_DEFER DISPID_SCRIPT+7 #define DISPID_IHTMLSCRIPTELEMENT_READYSTATE DISPID_A_READYSTATE #define DISPID_IHTMLSCRIPTELEMENT_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLSCRIPTELEMENT_TYPE DISPID_SCRIPT+9 /* IHTMLScriptElement2 */ #define DISPID_IHTMLSCRIPTELEMENT2_CHARSET DISPID_SCRIPT+10 /* IHTMLScriptElement3 */ #define DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC DISPID_IE8_SCRIPT /* IHTMLDivElement */ #define DISPID_IHTMLDIVELEMENT_ALIGN STDPROPID_XOBJ_BLOCKALIGN #define DISPID_IHTMLDIVELEMENT_NOWRAP DISPID_A_NOWRAP /* IHTMLObjectElement */ #define DISPID_IHTMLOBJECTELEMENT_OBJECT DISPID_OBJECT+1 #define DISPID_IHTMLOBJECTELEMENT_CLASSID DISPID_OBJECT+2 #define DISPID_IHTMLOBJECTELEMENT_DATA DISPID_OBJECT+3 #define DISPID_IHTMLOBJECTELEMENT_RECORDSET DISPID_OBJECT+5 #define DISPID_IHTMLOBJECTELEMENT_ALIGN STDPROPID_XOBJ_CONTROLALIGN #define DISPID_IHTMLOBJECTELEMENT_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLOBJECTELEMENT_CODEBASE DISPID_OBJECT+6 #define DISPID_IHTMLOBJECTELEMENT_CODETYPE DISPID_OBJECT+7 #define DISPID_IHTMLOBJECTELEMENT_CODE DISPID_OBJECT+8 #define DISPID_IHTMLOBJECTELEMENT_BASEHREF STDPROPID_XOBJ_BASEHREF #define DISPID_IHTMLOBJECTELEMENT_TYPE DISPID_OBJECT+9 #define DISPID_IHTMLOBJECTELEMENT_FORM DISPID_SITE+4 #define DISPID_IHTMLOBJECTELEMENT_WIDTH STDPROPID_XOBJ_WIDTH #define DISPID_IHTMLOBJECTELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLOBJECTELEMENT_READYSTATE DISPID_OBJECT+10 #define DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE #define DISPID_IHTMLOBJECTELEMENT_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLOBJECTELEMENT_ALTHTML DISPID_OBJECT+11 #define DISPID_IHTMLOBJECTELEMENT_VSPACE DISPID_OBJECT+12 #define DISPID_IHTMLOBJECTELEMENT_HSPACE DISPID_OBJECT+13 /* IHTMLObjectElement2 */ #define DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET DISPID_OBJECT+14 #define DISPID_IHTMLOBJECTELEMENT2_CLASSID DISPID_OBJECT+2 #define DISPID_IHTMLOBJECTELEMENT2_DATA DISPID_OBJECT+3 /* IHTMLObjectElement3 */ #define DISPID_IHTMLOBJECTELEMENT3_ARCHIVE DISPID_OBJECT+15 #define DISPID_IHTMLOBJECTELEMENT3_ALT DISPID_OBJECT+16 #define DISPID_IHTMLOBJECTELEMENT3_DECLARE DISPID_OBJECT+17 #define DISPID_IHTMLOBJECTELEMENT3_STANDBY DISPID_OBJECT+18 #define DISPID_IHTMLOBJECTELEMENT3_BORDER DISPID_OBJECT+19 #define DISPID_IHTMLOBJECTELEMENT3_USEMAP DISPID_OBJECT+20 /* IHTMLObjectElement4 */ #define DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT DISPID_IE8_OBJECT #define DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE DISPID_IE8_OBJECT+1 #define DISPID_IHTMLOBJECTELEMENT4_IE8_DATA DISPID_IE8_OBJECT+2 /* IHTMLParamElement */ #define DISPID_IHTMLPARAMELEMENT_NAME DISPID_PARAM+1 #define DISPID_IHTMLPARAMELEMENT_VALUE DISPID_PARAM+2 #define DISPID_IHTMLPARAMELEMENT_TYPE DISPID_PARAM+3 #define DISPID_IHTMLPARAMELEMENT_VALUETYPE DISPID_PARAM+4 /* IHTMLParamElement2 */ #define DISPID_IHTMLPARAMELEMENT2_NAME DISPID_PARAM+1 #define DISPID_IHTMLPARAMELEMENT2_TYPE DISPID_PARAM+3 #define DISPID_IHTMLPARAMELEMENT2_VALUE DISPID_PARAM+2 #define DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE DISPID_IE8_PARAM /* IHTMLFrameBase */ #define DISPID_IHTMLFRAMEBASE_SRC DISPID_FRAMESITE+0 #define DISPID_IHTMLFRAMEBASE_NAME STDPROPID_XOBJ_NAME #define DISPID_IHTMLFRAMEBASE_BORDER DISPID_FRAMESITE+2 #define DISPID_IHTMLFRAMEBASE_FRAMEBORDER DISPID_FRAMESITE+3 #define DISPID_IHTMLFRAMEBASE_FRAMESPACING DISPID_FRAMESITE+4 #define DISPID_IHTMLFRAMEBASE_MARGINWIDTH DISPID_FRAMESITE+5 #define DISPID_IHTMLFRAMEBASE_MARGINHEIGHT DISPID_FRAMESITE+6 #define DISPID_IHTMLFRAMEBASE_NORESIZE DISPID_FRAMESITE+7 #define DISPID_IHTMLFRAMEBASE_SCROLLING DISPID_FRAMESITE+8 /* IHTMLFrameBase2 */ #define DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW DISPID_FRAMESITE+9 #define DISPID_IHTMLFRAMEBASE2_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE #define DISPID_IHTMLFRAMEBASE2_READYSTATE DISPID_A_READYSTATE #define DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY DISPID_A_ALLOWTRANSPARENCY /* IHTMLFrameBase3 */ #define DISPID_IHTMLFRAMEBASE3_LONGDESC DISPID_FRAMESITE+10 /* IHTMLFrameElement */ #define DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR DISPID_FRAME+1 /* IHTMLFrameElement2 */ #define DISPID_IHTMLFRAMEELEMENT2_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLFRAMEELEMENT2_WIDTH STDPROPID_XOBJ_WIDTH /* IHTMLFrameElement3 */ #define DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT DISPID_IE8_FRAME #define DISPID_IHTMLFRAMEELEMENT3_IE8_SRC DISPID_IE8_FRAME+1 #define DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC DISPID_IE8_FRAME+2 #define DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER DISPID_IE8_FRAME+3 /* IHTMLIFrameElement */ #define DISPID_IHTMLIFRAMEELEMENT_VSPACE DISPID_IFRAME+1 #define DISPID_IHTMLIFRAMEELEMENT_HSPACE DISPID_IFRAME+2 #define DISPID_IHTMLIFRAMEELEMENT_ALIGN STDPROPID_XOBJ_CONTROLALIGN /* IHTMLIFrameElement2 */ #define DISPID_IHTMLIFRAMEELEMENT2_HEIGHT STDPROPID_XOBJ_HEIGHT #define DISPID_IHTMLIFRAMEELEMENT2_WIDTH STDPROPID_XOBJ_WIDTH /* IHTMLIFrameElement3 */ #define DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT DISPID_IE8_IFRAME #define DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC DISPID_IE8_IFRAME+1 #define DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC DISPID_IE8_IFRAME+2 #define DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER DISPID_IE8_IFRAME+3 /* IHTMLStyleElement */ #define DISPID_IHTMLSTYLEELEMENT_TYPE DISPID_STYLEELEMENT+2 #define DISPID_IHTMLSTYLEELEMENT_READYSTATE DISPID_A_READYSTATE #define DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE #define DISPID_IHTMLSTYLEELEMENT_ONLOAD DISPID_EVPROP_ONLOAD #define DISPID_IHTMLSTYLEELEMENT_ONERROR DISPID_EVPROP_ONERROR #define DISPID_IHTMLSTYLEELEMENT_STYLESHEET DISPID_STYLEELEMENT+4 #define DISPID_IHTMLSTYLEELEMENT_DISABLED STDPROPID_XOBJ_DISABLED #define DISPID_IHTMLSTYLEELEMENT_MEDIA DISPID_STYLEELEMENT+6 /* IHTMLStorage */ #define DISPID_IHTMLSTORAGE_LENGTH DISPID_DOMSTORAGE+1 #define DISPID_IHTMLSTORAGE_REMAININGSPACE DISPID_DOMSTORAGE+2 #define DISPID_IHTMLSTORAGE_KEY DISPID_DOMSTORAGE+6 #define DISPID_IHTMLSTORAGE_GETITEM DISPID_DOMSTORAGE+3 #define DISPID_IHTMLSTORAGE_SETITEM DISPID_DOMSTORAGE+4 #define DISPID_IHTMLSTORAGE_REMOVEITEM DISPID_DOMSTORAGE+5 #define DISPID_IHTMLSTORAGE_CLEAR DISPID_DOMSTORAGE+7 /* IHTMLDOMConstructorCollection */ #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR DISPID_WINDOW+8001+DomConstructorAttr #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION DISPID_WINDOW+8001+DomConstructorBehaviorUrnsCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION DISPID_WINDOW+8001+DomConstructorBookmarkCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO DISPID_WINDOW+8001+DomConstructorCompatibleInfo #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION DISPID_WINDOW+8001+DomConstructorCompatibleInfoCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION DISPID_WINDOW+8001+DomConstructorControlRangeCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION DISPID_WINDOW+8001+DomConstructorCSSCurrentStyleDeclaration #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST DISPID_WINDOW+8001+DomConstructorCSSRuleList #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION DISPID_WINDOW+8001+DomConstructorCSSRuleStyleDeclaration #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION DISPID_WINDOW+8001+DomConstructorCSSStyleDeclaration #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE DISPID_WINDOW+8001+DomConstructorCSSStyleRule #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET DISPID_WINDOW+8001+DomConstructorCSSStyleSheet #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER DISPID_WINDOW+8001+DomConstructorDataTransfer #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION DISPID_WINDOW+8001+DomConstructorDOMImplementation #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT DISPID_WINDOW+8001+DomConstructorElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT DISPID_WINDOW+8001+DomConstructorEvent #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY DISPID_WINDOW+8001+DomConstructorHistory #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS DISPID_WINDOW+8001+DomConstructorHTCElementBehaviorDefaults #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT DISPID_WINDOW+8001+DomConstructorHTMLAnchorElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT DISPID_WINDOW+8001+DomConstructorHTMLAreaElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLAreasCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBaseElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBaseFontElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBGSoundElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBlockElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBodyElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBRElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT DISPID_WINDOW+8001+DomConstructorHTMLButtonElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLCommentElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLDDElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT DISPID_WINDOW+8001+DomConstructorHTMLDivElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT DISPID_WINDOW+8001+DomConstructorHTMLDocument #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLDListElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLDTElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLEmbedElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFieldSetElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFontElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFormElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFrameElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFrameSetElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT DISPID_WINDOW+8001+DomConstructorHTMLGenericElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT DISPID_WINDOW+8001+DomConstructorHTMLHeadElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT DISPID_WINDOW+8001+DomConstructorHTMLHeadingElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT DISPID_WINDOW+8001+DomConstructorHTMLHRElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT DISPID_WINDOW+8001+DomConstructorHTMLHtmlElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLIFrameElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLImageElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLInputElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT DISPID_WINDOW+8001+DomConstructorHTMLIsIndexElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT DISPID_WINDOW+8001+DomConstructorHTMLLabelElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLLegendElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT DISPID_WINDOW+8001+DomConstructorHTMLLIElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT DISPID_WINDOW+8001+DomConstructorHTMLLinkElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT DISPID_WINDOW+8001+DomConstructorHTMLMapElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLMarqueeElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT DISPID_WINDOW+8001+DomConstructorHTMLMetaElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG DISPID_WINDOW+8001+DomConstructorHTMLModelessDialog #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO DISPID_WINDOW+8001+DomConstructorHTMLNamespaceInfo #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLNamespaceInfoCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLNextIdElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT DISPID_WINDOW+8001+DomConstructorHTMLNoShowElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLObjectElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLOListElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT DISPID_WINDOW+8001+DomConstructorHTMLOptionElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT DISPID_WINDOW+8001+DomConstructorHTMLParagraphElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT DISPID_WINDOW+8001+DomConstructorHTMLParamElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLPhraseElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLPluginsCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP DISPID_WINDOW+8001+DomConstructorHTMLPopup #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLScriptElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLSelectElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT DISPID_WINDOW+8001+DomConstructorHTMLSpanElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLStyleElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableCaptionElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableCellElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableColElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableRowElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableSectionElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTextAreaElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTextElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTitleElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLUListElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT DISPID_WINDOW+8001+DomConstructorHTMLUnknownElement #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE DISPID_WINDOW+8001+DomConstructorImage #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION DISPID_WINDOW+8001+DomConstructorLocation #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP DISPID_WINDOW+8001+DomConstructorNamedNodeMap #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR DISPID_WINDOW+8001+DomConstructorNavigator #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST DISPID_WINDOW+8001+DomConstructorNodeList #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION DISPID_WINDOW+8001+DomConstructorOption #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN DISPID_WINDOW+8001+DomConstructorScreen #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION DISPID_WINDOW+8001+DomConstructorSelection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST DISPID_WINDOW+8001+DomConstructorStaticNodeList #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE DISPID_WINDOW+8001+DomConstructorStorage #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST DISPID_WINDOW+8001+DomConstructorStyleSheetList #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE DISPID_WINDOW+8001+DomConstructorStyleSheetPage #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST DISPID_WINDOW+8001+DomConstructorStyleSheetPageList #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT DISPID_WINDOW+8001+DomConstructorText #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE DISPID_WINDOW+8001+DomConstructorTextRange #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION DISPID_WINDOW+8001+DomConstructorTextRangeCollection #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE DISPID_WINDOW+8001+DomConstructorTextRectangle #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST DISPID_WINDOW+8001+DomConstructorTextRectangleList #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW DISPID_WINDOW+8001+DomConstructorWindow #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST DISPID_WINDOW+8001+DomConstructorXDomainRequest #define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST DISPID_WINDOW+8001+DomConstructorXMLHttpRequest /* IEventTarget */ #define DISPID_IEVENTTARGET_ADDEVENTLISTENER DISPID_HTMLOBJECT+10 #define DISPID_IEVENTTARGET_REMOVEEVENTLISTENER DISPID_HTMLOBJECT+11 #define DISPID_IEVENTTARGET_DISPATCHEVENT DISPID_HTMLOBJECT+12 /* IDOMEvent */ #define DISPID_IDOMEVENT_BUBBLES DISPID_DOMEVENT+1 #define DISPID_IDOMEVENT_CANCELABLE DISPID_DOMEVENT+2 #define DISPID_IDOMEVENT_CURRENTTARGET DISPID_DOMEVENT+3 #define DISPID_IDOMEVENT_DEFAULTPREVENTED DISPID_DOMEVENT+4 #define DISPID_IDOMEVENT_EVENTPHASE DISPID_DOMEVENT+5 #define DISPID_IDOMEVENT_TARGET DISPID_DOMEVENT+6 #define DISPID_IDOMEVENT_TIMESTAMP DISPID_DOMEVENT+7 #define DISPID_IDOMEVENT_TYPE DISPID_DOMEVENT+8 #define DISPID_IDOMEVENT_INITEVENT DISPID_DOMEVENT+9 #define DISPID_IDOMEVENT_PREVENTDEFAULT DISPID_DOMEVENT+10 #define DISPID_IDOMEVENT_STOPPROPAGATION DISPID_DOMEVENT+11 #define DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION DISPID_DOMEVENT+12 #define DISPID_IDOMEVENT_ISTRUSTED DISPID_DOMEVENT+13 #define DISPID_IDOMEVENT_CANCELBUBBLE DISPID_DOMEVENT+14 #define DISPID_IDOMEVENT_SRCELEMENT DISPID_DOMEVENT+15 /* IDOMUIEvent */ #define DISPID_IDOMUIEVENT_VIEW DISPID_DOMUIEVENT+1 #define DISPID_IDOMUIEVENT_DETAIL DISPID_DOMUIEVENT+2 #define DISPID_IDOMUIEVENT_INITUIEVENT DISPID_DOMUIEVENT+3 /* IDOMMouseEvent */ #define DISPID_IDOMMOUSEEVENT_SCREENX DISPID_DOMMOUSEEVENT+1 #define DISPID_IDOMMOUSEEVENT_SCREENY DISPID_DOMMOUSEEVENT+2 #define DISPID_IDOMMOUSEEVENT_CLIENTX DISPID_DOMMOUSEEVENT+3 #define DISPID_IDOMMOUSEEVENT_CLIENTY DISPID_DOMMOUSEEVENT+4 #define DISPID_IDOMMOUSEEVENT_CTRLKEY DISPID_DOMMOUSEEVENT+5 #define DISPID_IDOMMOUSEEVENT_SHIFTKEY DISPID_DOMMOUSEEVENT+6 #define DISPID_IDOMMOUSEEVENT_ALTKEY DISPID_DOMMOUSEEVENT+7 #define DISPID_IDOMMOUSEEVENT_METAKEY DISPID_DOMMOUSEEVENT+8 #define DISPID_IDOMMOUSEEVENT_BUTTON DISPID_DOMMOUSEEVENT+9 #define DISPID_IDOMMOUSEEVENT_RELATEDTARGET DISPID_DOMMOUSEEVENT+10 #define DISPID_IDOMMOUSEEVENT_INITMOUSEEVENT DISPID_DOMMOUSEEVENT+11 #define DISPID_IDOMMOUSEEVENT_GETMODIFIERSTATE DISPID_DOMMOUSEEVENT+12 #define DISPID_IDOMMOUSEEVENT_BUTTONS DISPID_DOMMOUSEEVENT+13 #define DISPID_IDOMMOUSEEVENT_FROMELEMENT DISPID_DOMMOUSEEVENT+14 #define DISPID_IDOMMOUSEEVENT_TOELEMENT DISPID_DOMMOUSEEVENT+15 #define DISPID_IDOMMOUSEEVENT_X DISPID_DOMMOUSEEVENT+16 #define DISPID_IDOMMOUSEEVENT_Y DISPID_DOMMOUSEEVENT+17 #define DISPID_IDOMMOUSEEVENT_OFFSETX DISPID_DOMMOUSEEVENT+18 #define DISPID_IDOMMOUSEEVENT_OFFSETY DISPID_DOMMOUSEEVENT+19 #define DISPID_IDOMMOUSEEVENT_PAGEX DISPID_DOMMOUSEEVENT+20 #define DISPID_IDOMMOUSEEVENT_PAGEY DISPID_DOMMOUSEEVENT+21 #define DISPID_IDOMMOUSEEVENT_LAYERX DISPID_DOMMOUSEEVENT+22 #define DISPID_IDOMMOUSEEVENT_LAYERY DISPID_DOMMOUSEEVENT+23 #define DISPID_IDOMMOUSEEVENT_WHICH DISPID_DOMMOUSEEVENT+24 /* IDOMKeyboardEvent */ #define DISPID_IDOMKEYBOARDEVENT_KEY DISPID_DOMKEYBOARDEVENT+1 #define DISPID_IDOMKEYBOARDEVENT_LOCATION DISPID_DOMKEYBOARDEVENT+2 #define DISPID_IDOMKEYBOARDEVENT_CTRLKEY DISPID_DOMKEYBOARDEVENT+3 #define DISPID_IDOMKEYBOARDEVENT_SHIFTKEY DISPID_DOMKEYBOARDEVENT+4 #define DISPID_IDOMKEYBOARDEVENT_ALTKEY DISPID_DOMKEYBOARDEVENT+5 #define DISPID_IDOMKEYBOARDEVENT_METAKEY DISPID_DOMKEYBOARDEVENT+6 #define DISPID_IDOMKEYBOARDEVENT_REPEAT DISPID_DOMKEYBOARDEVENT+7 #define DISPID_IDOMKEYBOARDEVENT_GETMODIFIERSTATE DISPID_DOMKEYBOARDEVENT+8 #define DISPID_IDOMKEYBOARDEVENT_INITKEYBOARDEVENT DISPID_DOMKEYBOARDEVENT+9 #define DISPID_IDOMKEYBOARDEVENT_KEYCODE DISPID_DOMKEYBOARDEVENT+10 #define DISPID_IDOMKEYBOARDEVENT_CHARCODE DISPID_DOMKEYBOARDEVENT+11 #define DISPID_IDOMKEYBOARDEVENT_WHICH DISPID_DOMKEYBOARDEVENT+12 #define DISPID_IDOMKEYBOARDEVENT_IE9_CHAR DISPID_DOMKEYBOARDEVENT+13 #define DISPID_IDOMKEYBOARDEVENT_LOCALE DISPID_DOMKEYBOARDEVENT+14 /* IDOMMessageEvent */ #define DISPID_IDOMMESSAGEEVENT_DATA DISPID_DOMMESSAGEEVENT+1 #define DISPID_IDOMMESSAGEEVENT_ORIGIN DISPID_DOMMESSAGEEVENT+2 #define DISPID_IDOMMESSAGEEVENT_SOURCE DISPID_DOMMESSAGEEVENT+3 #define DISPID_IDOMMESSAGEEVENT_INITMESSAGEEVENT DISPID_DOMMESSAGEEVENT+4 /* IHTMLControlElement */ #define DISPID_IHTMLCONTROLELEMENT_TABINDEX STDPROPID_XOBJ_TABINDEX #define DISPID_IHTMLCONTROLELEMENT_FOCUS (DISPID_SITE+0) #define DISPID_IHTMLCONTROLELEMENT_ACCESSKEY (DISPID_SITE+5) #define DISPID_IHTMLCONTROLELEMENT_ONBLUR DISPID_EVPROP_ONBLUR #define DISPID_IHTMLCONTROLELEMENT_ONFOCUS DISPID_EVPROP_ONFOCUS #define DISPID_IHTMLCONTROLELEMENT_ONRESIZE DISPID_EVPROP_ONRESIZE #define DISPID_IHTMLCONTROLELEMENT_BLUR (DISPID_SITE+2) #define DISPID_IHTMLCONTROLELEMENT_ADDFILTER (DISPID_SITE+17) #define DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER (DISPID_SITE+18) #define DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT (DISPID_SITE+19) #define DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH (DISPID_SITE+20) #define DISPID_IHTMLCONTROLELEMENT_CLIENTTOP (DISPID_SITE+21) #define DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT (DISPID_SITE+22) /* IDOMProcessingInstruction */ #define DISPID_IDOMPROCESSINGINSTRUCTION_TARGET DISPID_PROCESSINGINSTRUCTION #define DISPID_IDOMPROCESSINGINSTRUCTION_DATA DISPID_PROCESSINGINSTRUCTION+1 /* IHTMLPerformanceNavigation */ #define DISPID_IHTMLPERFORMANCENAVIGATION_TYPE DISPID_PERFORMANCENAVIGATION #define DISPID_IHTMLPERFORMANCENAVIGATION_REDIRECTCOUNT DISPID_PERFORMANCENAVIGATION+1 #define DISPID_IHTMLPERFORMANCENAVIGATION_TOSTRING DISPID_PERFORMANCENAVIGATION+2 #define DISPID_IHTMLPERFORMANCENAVIGATION_TOJSON DISPID_PERFORMANCENAVIGATION+3 /* IHTMLPerformanceTiming */ #define DISPID_IHTMLPERFORMANCETIMING_NAVIGATIONSTART DISPID_PERFORMANCETIMING #define DISPID_IHTMLPERFORMANCETIMING_UNLOADEVENTSTART DISPID_PERFORMANCETIMING+1 #define DISPID_IHTMLPERFORMANCETIMING_UNLOADEVENTEND DISPID_PERFORMANCETIMING+2 #define DISPID_IHTMLPERFORMANCETIMING_REDIRECTSTART DISPID_PERFORMANCETIMING+3 #define DISPID_IHTMLPERFORMANCETIMING_REDIRECTEND DISPID_PERFORMANCETIMING+4 #define DISPID_IHTMLPERFORMANCETIMING_FETCHSTART DISPID_PERFORMANCETIMING+5 #define DISPID_IHTMLPERFORMANCETIMING_DOMAINLOOKUPSTART DISPID_PERFORMANCETIMING+6 #define DISPID_IHTMLPERFORMANCETIMING_DOMAINLOOKUPEND DISPID_PERFORMANCETIMING+7 #define DISPID_IHTMLPERFORMANCETIMING_CONNECTSTART DISPID_PERFORMANCETIMING+8 #define DISPID_IHTMLPERFORMANCETIMING_CONNECTEND DISPID_PERFORMANCETIMING+9 #define DISPID_IHTMLPERFORMANCETIMING_REQUESTSTART DISPID_PERFORMANCETIMING+10 #define DISPID_IHTMLPERFORMANCETIMING_RESPONSESTART DISPID_PERFORMANCETIMING+11 #define DISPID_IHTMLPERFORMANCETIMING_RESPONSEEND DISPID_PERFORMANCETIMING+12 #define DISPID_IHTMLPERFORMANCETIMING_DOMLOADING DISPID_PERFORMANCETIMING+13 #define DISPID_IHTMLPERFORMANCETIMING_DOMINTERACTIVE DISPID_PERFORMANCETIMING+14 #define DISPID_IHTMLPERFORMANCETIMING_DOMCONTENTLOADEDEVENTSTART DISPID_PERFORMANCETIMING+15 #define DISPID_IHTMLPERFORMANCETIMING_DOMCONTENTLOADEDEVENTEND DISPID_PERFORMANCETIMING+16 #define DISPID_IHTMLPERFORMANCETIMING_DOMCOMPLETE DISPID_PERFORMANCETIMING+17 #define DISPID_IHTMLPERFORMANCETIMING_LOADEVENTSTART DISPID_PERFORMANCETIMING+18 #define DISPID_IHTMLPERFORMANCETIMING_LOADEVENTEND DISPID_PERFORMANCETIMING+19 #define DISPID_IHTMLPERFORMANCETIMING_MSFIRSTPAINT DISPID_PERFORMANCETIMING+20 #define DISPID_IHTMLPERFORMANCETIMING_TOSTRING DISPID_PERFORMANCETIMING+21 #define DISPID_IHTMLPERFORMANCETIMING_TOJSON DISPID_PERFORMANCETIMING+22 /* IHTMLPerformance */ #define DISPID_IHTMLPERFORMANCE_NAVIGATION DISPID_PERFORMANCE #define DISPID_IHTMLPERFORMANCE_TIMING DISPID_PERFORMANCE+1 #define DISPID_IHTMLPERFORMANCE_TOSTRING DISPID_PERFORMANCE+2 #define DISPID_IHTMLPERFORMANCE_TOJSON DISPID_PERFORMANCE+3 /* IDocumentEvent */ #define DISPID_IDOCUMENTEVENT_CREATEEVENT DISPID_OMDOCUMENT+108 /* IDocumentSelector */ #define DISPID_IDOCUMENTSELECTOR_QUERYSELECTOR DISPID_OMDOCUMENT+105 #define DISPID_IDOCUMENTSELECTOR_QUERYSELECTORALL DISPID_OMDOCUMENT+106 #endif /* __MSHTMDID_H__ */ ================================================ FILE: wine/windows/mshtmhst.idl ================================================ /* * Copyright 2005 Jacek Caban * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "ocidl.idl"; import "objidl.idl"; import "oleidl.idl"; import "oaidl.idl"; import "docobj.idl"; cpp_quote("#define CONTEXT_MENU_DEFAULT 0") cpp_quote("#define CONTEXT_MENU_IMAGE 1") cpp_quote("#define CONTEXT_MENU_CONTROL 2") cpp_quote("#define CONTEXT_MENU_TABLE 3") cpp_quote("#define CONTEXT_MENU_TEXTSELECT 4") cpp_quote("#define CONTEXT_MENU_ANCHOR 5") cpp_quote("#define CONTEXT_MENU_UNKNOWN 6") cpp_quote("#define CONTEXT_MENU_IMGDYNSRC 7") cpp_quote("#define CONTEXT_MENU_IMGART 8") cpp_quote("#define CONTEXT_MENU_DEBUG 9") cpp_quote("#define CONTEXT_MENU_VSCROLL 10") cpp_quote("#define CONTEXT_MENU_HSCROLL 11") cpp_quote("#define MENUEXT_SHOWDIALOG 1") cpp_quote("#define DOCHOSTUIFLAG_BROWSER (DOCHOSTUIFLAG_DISABLE_HELP_MENU|DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE)") cpp_quote("#define HTMLDLG_NOUI 0x0010") cpp_quote("#define HTMLDLG_MODAL 0x0020") cpp_quote("#define HTMLDLG_MODELESS 0x0040") cpp_quote("#define HTMLDLG_PRINT_TEMPLATE 0x0080") cpp_quote("#define HTMLDLG_VERIFY 0x0100") cpp_quote("#define PRINT_DONTBOTHERUSER 0x0001") cpp_quote("#define PRINT_WAITFORCOMPLETION 0x0002") cpp_quote("DEFINE_GUID(CGID_MSHTML, 0xde4ba900,0x59ca,0x11cf,0x95,0x92,0x44,0x45,0x53,0x54,0x00,0x00);") cpp_quote("#define CMDSETID_Forms3 CGID_MSHTML") cpp_quote("#if defined(__GNUC__)") cpp_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}") cpp_quote("#elif defined(_MSC_VER)") cpp_quote("#define SZ_HTML_CLIENTSITE_OBJECTPARAM L\"{d4db6850-5385-11d0-89e9-00a0c90a90ac}\"") cpp_quote("#else") cpp_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};") cpp_quote("#endif") cpp_quote("#ifndef __IHTMLWindow2_FWD_DEFINED__") cpp_quote("#define __IHTMLWindow2_FWD_DEFINED__") cpp_quote("typedef interface IHTMLWindow2 IHTMLWindow2;") cpp_quote("#endif") /***************************************************************************** * IHostDialogHelper interface */ [ object, uuid(53DEC138-A51E-11d2-861E-00C04FA35C89), pointer_default(unique), local ] interface IHostDialogHelper : IUnknown { HRESULT ShowHTMLDialog( HWND hwndParent, IMoniker *pMk, VARIANT *pvarArgIn, WCHAR *pchOptions, VARIANT *pvarArgOut, IUnknown *punkHost); } /***************************************************************************** * HostDialogHelper coclass */ [ uuid(429AF92C-A51F-11d2-861E-00C04FA35C89) ] coclass HostDialogHelper { [default] interface IHostDialogHelper; } /***************************************************************************** * IDocHostUIHandler interface */ typedef enum tagDOCHOSTUITYPE { DOCHOSTUITYPE_BROWSE = 0, DOCHOSTUITYPE_AUTHOR = 1 } DOCHOSTUITYPE; typedef enum tagDOCHOSTUIDBLCLK { DOCHOSTUIDBLCLK_DEFAULT = 0, DOCHOSTUIDBLCLK_SHOWPROPERTIES = 1, DOCHOSTUIDBLCLK_SHOWCODE = 2 } DOCHOSTUIDBLCLK; typedef enum tagDOCHOSTUIFLAG { DOCHOSTUIFLAG_DIALOG = 0x00000001, DOCHOSTUIFLAG_DISABLE_HELP_MENU = 0x00000002, DOCHOSTUIFLAG_NO3DBORDER = 0x00000004, DOCHOSTUIFLAG_SCROLL_NO = 0x00000008, DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = 0x00000010, DOCHOSTUIFLAG_OPENNEWWIN = 0x00000020, DOCHOSTUIFLAG_DISABLE_OFFSCREEN = 0x00000040, DOCHOSTUIFLAG_FLAT_SCROLLBAR = 0x00000080, DOCHOSTUIFLAG_DIV_BLOCKDEFAULT = 0x00000100, DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY = 0x00000200, DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY = 0x00000400, DOCHOSTUIFLAG_CODEPAGELINKEDFONTS = 0x00000800, DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 = 0x00001000, DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8 = 0x00002000, DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE = 0x00004000, DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION = 0x00010000, DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION = 0x00020000, DOCHOSTUIFLAG_THEME = 0x00040000, DOCHOSTUIFLAG_NOTHEME = 0x00080000, DOCHOSTUIFLAG_NOPICS = 0x00100000, DOCHOSTUIFLAG_NO3DOUTERBORDER = 0x00200000, DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP = 0x00400000, DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK = 0x00800000, DOCHOSTUIFLAG_DISABLE_UNTRUSTEDPROTOCOL = 0x01000000, DOCHOSTUIFLAG_HOST_NAVIGATES = 0x02000000, DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION = 0x04000000, DOCHOSTUIFLAG_USE_WINDOWLESS_SELECTCONTROL = 0x08000000, DOCHOSTUIFLAG_USE_WINDOWED_SELECTCONTROL = 0x10000000, DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE = 0x20000000, DOCHOSTUIFLAG_DPI_AWARE = 0x40000000 } DOCHOSTUIFLAG; [ object, uuid(BD3F23C0-D43E-11CF-893B-00AA00BDCE1A), pointer_default(unique), local ] interface IDocHostUIHandler : IUnknown { typedef struct _DOCHOSTUIINFO { ULONG cbSize; DWORD dwFlags; DWORD dwDoubleClick; OLECHAR *pchHostCss; OLECHAR *pchHostNS; } DOCHOSTUIINFO; HRESULT ShowContextMenu( [in] DWORD dwID, [in] POINT *ppt, [in] IUnknown *pcmdtReserved, [in] IDispatch *pdispReserved); HRESULT GetHostInfo([in, out] DOCHOSTUIINFO *pInfo); HRESULT ShowUI( [in] DWORD dwID, [in] IOleInPlaceActiveObject *pActiveObject, [in] IOleCommandTarget *pCommandTarget, [in] IOleInPlaceFrame *pFrame, [in] IOleInPlaceUIWindow *pDoc); HRESULT HideUI(); HRESULT UpdateUI(); HRESULT EnableModeless([in] BOOL fEnable); HRESULT OnDocWindowActivate([in] BOOL fActivate); HRESULT OnFrameWindowActivate([in] BOOL fActivate); HRESULT ResizeBorder( [in] LPCRECT prcBorder, [in] IOleInPlaceUIWindow *pUIWindow, [in] BOOL fRameWindow); HRESULT TranslateAccelerator( [in] LPMSG lpMsg, [in] const GUID *pguidCmdGroup, [in] DWORD nCmdID); HRESULT GetOptionKeyPath( [out] LPOLESTR *pchKey, [in] DWORD dw); HRESULT GetDropTarget( [in] IDropTarget *pDropTarget, [out] IDropTarget **ppDropTarget); HRESULT GetExternal([out] IDispatch **ppDispatch); HRESULT TranslateUrl( [in] DWORD dwTranslate, [in] OLECHAR *pchURLIn, [out] OLECHAR **ppchURLOut); HRESULT FilterDataObject( [in] IDataObject *pDO, [out] IDataObject **ppDORet); } cpp_quote("DEFINE_GUID(CGID_DocHostCommandHandler,0xf38bc242,0xb950,0x11d1,0x89,0x18,0x00,0xc0,0x4f,0xc2,0xc8,0x36);") [ object, uuid(3050F6D0-98b5-11CF-BB82-00AA00BDCE0B), pointer_default(unique), local ] interface IDocHostUIHandler2 : IDocHostUIHandler { HRESULT GetOverrideKeyPath( [out] LPOLESTR *pchKey, [in] DWORD dw); } /***************************************************************************** * ICustomDoc interface */ [ object, uuid(3050f3f0-98b5-11cf-bb82-00aa00bdce0b), pointer_default(unique), local ] interface ICustomDoc : IUnknown { HRESULT SetUIHandler([in] IDocHostUIHandler *pUIHandler); } /***************************************************************************** * IDocHostShowUI interface */ [ object, uuid(c4d244b0-d43e-11cf-893b-00aa00bdce1a), pointer_default(unique), local ] interface IDocHostShowUI : IUnknown { HRESULT ShowMessage( [in] HWND hwnd, [in] LPOLESTR lpstrText, [in] LPOLESTR lpstrCaption, [in] DWORD dwType, [in] LPOLESTR lpstrHelpFile, [in] DWORD dwHelpContext, [out] LRESULT *plResult); HRESULT ShowHelp( [in] HWND hwnd, [in] LPOLESTR pszHelpFile, [in] UINT uCommand, [in] DWORD dwData, [in] POINT ptMouse, [out] IDispatch *pDispatchObjectHit); } /***************************************************************************** * IClassFactoryEx interface */ cpp_quote("#define IClassFactory3 IClassFactoryEx") cpp_quote("#define IID_IClassFactory3 IID_IClassFactoryEx") [ object, uuid(342D1EA0-AE25-11D1-89C5-006008C3FBFC), pointer_default(unique), local ] interface IClassFactoryEx : IClassFactory { HRESULT CreateInstanceWithContext( IUnknown *punkContext, IUnknown *punkOuter, REFIID riid, [out] void **ppv); } cpp_quote("typedef HRESULT WINAPI SHOWHTMLDIALOGFN(HWND,IMoniker*,VARIANT*,WCHAR*,VARIANT*);") cpp_quote("typedef HRESULT WINAPI SHOWHTMLDIALOGEXFN(HWND,IMoniker*,DWORD,VARIANT*,WCHAR*,VARIANT*);") cpp_quote("typedef HRESULT WINAPI SHOWMODELESSHTMLDIALOGFN(HWND,IMoniker*,VARIANT*,VARIANT*,IHTMLWindow2**);") cpp_quote("EXTERN_C HRESULT WINAPI ShowHTMLDialog(HWND,IMoniker*,VARIANT*,WCHAR*,VARIANT*);") cpp_quote("EXTERN_C HRESULT WINAPI ShowHTMLDialogEx(HWND,IMoniker*,DWORD,VARIANT*,WCHAR*,VARIANT*);") cpp_quote("EXTERN_C HRESULT WINAPI ShowModelessHTMLDialog(HWND,IMoniker*,VARIANT*,VARIANT*,IHTMLWindow2**);") cpp_quote("EXTERN_C HRESULT WINAPI RunHTMLApplication(HINSTANCE,HINSTANCE,LPSTR,int);") cpp_quote("EXTERN_C HRESULT WINAPI CreateHTMLPropertyPage(IMoniker*,IPropertyPage**);") ================================================ FILE: wine/windows/mshtml.idl ================================================ /* * Copyright 2004-2010 Jacek Caban for CodeWeavers * Copyright 2008 Konstantin Kondratyuk (Etersoft) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include import "ocidl.idl"; import "dimm.idl"; import "shtypes.idl"; import "dispex.idl"; #ifndef __WIDL__ #define progid(str) #define vi_progid(str) #endif cpp_quote("#include ") cpp_quote("DEFINE_GUID(CLSID_MHTMLDocument, 0x3050f3d9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);") cpp_quote("DEFINE_GUID(SID_SEditCommandTarget, 0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);") cpp_quote("DEFINE_GUID(SID_SHTMLEditHost, 0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);") cpp_quote("DEFINE_GUID(SID_SHTMLEditServices, 0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);") cpp_quote("#define SID_SHTMLWindow IID_IHTMLWindow2") cpp_quote("#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory") cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef FindText") cpp_quote("#endif") typedef enum { POINTER_GRAVITY_Left, POINTER_GRAVITY_Right, POINTER_GRAVITY_Max = 2147483647 } POINTER_GRAVITY; typedef enum { CONTEXT_TYPE_None, CONTEXT_TYPE_Text, CONTEXT_TYPE_EnterScope, CONTEXT_TYPE_ExitScope, CONTEXT_TYPE_NoScope, MARKUP_CONTEXT_TYPE_Max = 2147483647 } MARKUP_CONTEXT_TYPE; typedef enum { ELEM_ADJ_BeforeBegin, ELEM_ADJ_AfterBegin, ELEM_ADJ_BeforeEnd, ELEM_ADJ_AfterEnd, ELEMENT_ADJACENCY_Max = 2147483647 } ELEMENT_ADJACENCY; typedef enum { MOVEUNIT_PREVCHAR, MOVEUNIT_NEXTCHAR, MOVEUNIT_PREVCLUSTERBEG, MOVEUNIT_NEXTCLUSTERBEG, MOVEUNIT_PREVCLUSTEREND, MOVEUNIT_NEXTCLUSTEREND, MOVEUNIT_PREVWORDBEG, MOVEUNIT_NEXTWORDBEG, MOVEUNIT_PREVWORDEND, MOVEUNIT_NEXTWORDEND, MOVEUNIT_PREVPROOFWORD, MOVEUNIT_NEXTPROOFWORD, MOVEUNIT_NEXTURLBEG, MOVEUNIT_PREVURLBEG, MOVEUNIT_NEXTURLEND, MOVEUNIT_PREVURLEND, MOVEUNIT_PREVSENTENCE, MOVEUNIT_NEXTSENTENCE, MOVEUNIT_PREVBLOCK, MOVEUNIT_NEXTBLOCK, MOVEUNIT_ACTION_Max = 2147483647 } MOVEUNIT_ACTION; typedef enum _SELECTION_TYPE { SELECTION_TYPE_None, SELECTION_TYPE_Caret, SELECTION_TYPE_Text, SELECTION_TYPE_Control, SELECTION_TYPE_Max = 2147483647 } SELECTION_TYPE; [ version(4.0), uuid(3050F1C5-98B5-11CF-BB82-00AA00BDCE0B) ] library MSHTML { importlib("stdole2.tlb"); typedef enum _DomConstructor { DomConstructorObject = 0, DomConstructorAttr = 1, DomConstructorBehaviorUrnsCollection = 2, DomConstructorBookmarkCollection = 3, DomConstructorCompatibleInfo = 4, DomConstructorCompatibleInfoCollection = 5, DomConstructorControlRangeCollection = 6, DomConstructorCSSCurrentStyleDeclaration = 7, DomConstructorCSSRuleList = 8, DomConstructorCSSRuleStyleDeclaration = 9, DomConstructorCSSStyleDeclaration = 10, DomConstructorCSSStyleRule = 11, DomConstructorCSSStyleSheet = 12, DomConstructorDataTransfer = 13, DomConstructorDOMImplementation = 14, DomConstructorElement = 15, DomConstructorEvent = 16, DomConstructorHistory = 17, DomConstructorHTCElementBehaviorDefaults = 18, DomConstructorHTMLAnchorElement = 19, DomConstructorHTMLAreaElement = 20, DomConstructorHTMLAreasCollection = 21, DomConstructorHTMLBaseElement = 22, DomConstructorHTMLBaseFontElement = 23, DomConstructorHTMLBGSoundElement = 24, DomConstructorHTMLBlockElement = 25, DomConstructorHTMLBodyElement = 26, DomConstructorHTMLBRElement = 27, DomConstructorHTMLButtonElement = 28, DomConstructorHTMLCollection = 29, DomConstructorHTMLCommentElement = 30, DomConstructorHTMLDDElement = 31, DomConstructorHTMLDivElement = 32, DomConstructorHTMLDocument = 33, DomConstructorHTMLDListElement = 34, DomConstructorHTMLDTElement = 35, DomConstructorHTMLEmbedElement = 36, DomConstructorHTMLFieldSetElement = 37, DomConstructorHTMLFontElement = 38, DomConstructorHTMLFormElement = 39, DomConstructorHTMLFrameElement = 40, DomConstructorHTMLFrameSetElement = 41, DomConstructorHTMLGenericElement = 42, DomConstructorHTMLHeadElement = 43, DomConstructorHTMLHeadingElement = 44, DomConstructorHTMLHRElement = 45, DomConstructorHTMLHtmlElement = 46, DomConstructorHTMLIFrameElement = 47, DomConstructorHTMLImageElement = 48, DomConstructorHTMLInputElement = 49, DomConstructorHTMLIsIndexElement = 50, DomConstructorHTMLLabelElement = 51, DomConstructorHTMLLegendElement = 52, DomConstructorHTMLLIElement = 53, DomConstructorHTMLLinkElement = 54, DomConstructorHTMLMapElement = 55, DomConstructorHTMLMarqueeElement = 56, DomConstructorHTMLMetaElement = 57, DomConstructorHTMLModelessDialog = 58, DomConstructorHTMLNamespaceInfo = 59, DomConstructorHTMLNamespaceInfoCollection = 60, DomConstructorHTMLNextIdElement = 61, DomConstructorHTMLNoShowElement = 62, DomConstructorHTMLObjectElement = 63, DomConstructorHTMLOListElement = 64, DomConstructorHTMLOptionElement = 65, DomConstructorHTMLParagraphElement = 66, DomConstructorHTMLParamElement = 67, DomConstructorHTMLPhraseElement = 68, DomConstructorHTMLPluginsCollection = 69, DomConstructorHTMLPopup = 70, DomConstructorHTMLScriptElement = 71, DomConstructorHTMLSelectElement = 72, DomConstructorHTMLSpanElement = 73, DomConstructorHTMLStyleElement = 74, DomConstructorHTMLTableCaptionElement = 75, DomConstructorHTMLTableCellElement = 76, DomConstructorHTMLTableColElement = 77, DomConstructorHTMLTableElement = 78, DomConstructorHTMLTableRowElement = 79, DomConstructorHTMLTableSectionElement = 80, DomConstructorHTMLTextAreaElement = 81, DomConstructorHTMLTextElement = 82, DomConstructorHTMLTitleElement = 83, DomConstructorHTMLUListElement = 84, DomConstructorHTMLUnknownElement = 85, DomConstructorImage = 86, DomConstructorLocation = 87, DomConstructorNamedNodeMap = 88, DomConstructorNavigator = 89, DomConstructorNodeList = 90, DomConstructorOption = 91, DomConstructorScreen = 92, DomConstructorSelection = 93, DomConstructorStaticNodeList = 94, DomConstructorStorage = 95, DomConstructorStyleSheetList = 96, DomConstructorStyleSheetPage = 97, DomConstructorStyleSheetPageList = 98, DomConstructorText = 99, DomConstructorTextRange = 100, DomConstructorTextRangeCollection = 101, DomConstructorTextRectangle = 102, DomConstructorTextRectangleList = 103, DomConstructorWindow = 104, DomConstructorXDomainRequest = 105, DomConstructorXMLHttpRequest = 106, DomConstructorMax = 107, DomConstructor_Max = 2147483647L } DomConstructor; [ odl, oleautomation, dual, uuid(3051049b-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMConstructor : IDispatch { [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] HRESULT constructor([retval, out] IDispatch* * p); HRESULT LookupGetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler); HRESULT LookupSetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler); HRESULT DefineGetter([in] BSTR propname, [in] VARIANT* pdispHandler); HRESULT DefineSetter([in] BSTR propname, [in] VARIANT* pdispHandler); } #define WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL \ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] \ IDispatch *constructor() interface IHTMLDocument2; interface IHTMLElement2; interface IHTMLStyleSheetsCollection; interface IHTMLFrameBase; interface IHTMLStorage; interface IDOMEvent; /***************************************************************************** * IHTMLCSSStyleDeclaration interface */ [ odl, oleautomation, dual, uuid(30510740-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLCSSStyleDeclaration : IDispatch { [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LENGTH)] HRESULT length([out, retval] long *p); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PARENTRULE)] HRESULT parentRule([out, retval] VARIANT *p); [id(DISPID_IHTMLCSSSTYLEDECLARATION_GETPROPERTYVALUE)] HRESULT getPropertyValue( [in] BSTR bstrPropertyName, [out, retval] BSTR *pbstrPropertyValue); [id(DISPID_IHTMLCSSSTYLEDECLARATION_GETPROPERTYPRIORITY)] HRESULT getPropertyPriority( [in] BSTR bstrPropertyName, [out, retval] BSTR *pbstrPropertyPriority); [id(DISPID_IHTMLCSSSTYLEDECLARATION_REMOVEPROPERTY)] HRESULT removeProperty( [in] BSTR bstrPropertyName, [out, retval] BSTR *pbstrPropertyValue); [id(DISPID_IHTMLCSSSTYLEDECLARATION_SETPROPERTY)] HRESULT setProperty( [in] BSTR bstrPropertyName, [in] VARIANT *pvarPropertyValue, [in, defaultvalue(NULL)] VARIANT *pvarPropertyPriority); [id(DISPID_IHTMLCSSSTYLEDECLARATION_ITEM)] HRESULT item( [in] long index, [out, retval] BSTR *pbstrPropertyName); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTFAMILY), displaybind, bindable] HRESULT fontFamily([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTFAMILY), displaybind, bindable] HRESULT fontFamily([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTYLE), displaybind, bindable] HRESULT fontStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTYLE), displaybind, bindable] HRESULT fontStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTVARIANT), displaybind, bindable] HRESULT fontVariant([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTVARIANT), displaybind, bindable] HRESULT fontVariant([retval, out] BSTR * p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTWEIGHT), displaybind, bindable] HRESULT fontWeight([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTWEIGHT), displaybind, bindable] HRESULT fontWeight([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZE), displaybind, bindable] HRESULT fontSize([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZE), displaybind, bindable] HRESULT fontSize([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONT), displaybind, bindable, nonbrowsable] HRESULT font([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONT), displaybind, bindable, nonbrowsable] HRESULT font([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_COLOR), displaybind, bindable] HRESULT color([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_COLOR), displaybind, bindable] HRESULT color([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUND), displaybind, bindable, nonbrowsable] HRESULT background([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUND), displaybind, bindable, nonbrowsable] HRESULT background([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCOLOR), displaybind, bindable] HRESULT backgroundColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCOLOR), displaybind, bindable] HRESULT backgroundColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDIMAGE), displaybind, bindable] HRESULT backgroundImage([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDIMAGE), displaybind, bindable] HRESULT backgroundImage([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDREPEAT), displaybind, bindable] HRESULT backgroundRepeat([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDREPEAT), displaybind, bindable] HRESULT backgroundRepeat([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDATTACHMENT), displaybind, bindable] HRESULT backgroundAttachment([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDATTACHMENT), displaybind, bindable] HRESULT backgroundAttachment([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITION), displaybind, bindable] HRESULT backgroundPosition([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITION), displaybind, bindable] HRESULT backgroundPosition([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONX), displaybind, bindable] HRESULT backgroundPositionX([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONX), displaybind, bindable] HRESULT backgroundPositionX([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONY), displaybind, bindable] HRESULT backgroundPositionY([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONY), displaybind, bindable] HRESULT backgroundPositionY([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDSPACING), displaybind, bindable] HRESULT wordSpacing([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDSPACING), displaybind, bindable] HRESULT wordSpacing([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LETTERSPACING), displaybind, bindable] HRESULT letterSpacing([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LETTERSPACING), displaybind, bindable] HRESULT letterSpacing([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTDECORATION), displaybind, bindable] HRESULT textDecoration([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTDECORATION), displaybind, bindable] HRESULT textDecoration([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_VERTICALALIGN), displaybind, bindable] HRESULT verticalAlign([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_VERTICALALIGN), displaybind, bindable] HRESULT verticalAlign([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTTRANSFORM), displaybind, bindable] HRESULT textTransform([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTTRANSFORM), displaybind, bindable] HRESULT textTransform([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGN), displaybind, bindable] HRESULT textAlign([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGN), displaybind, bindable] HRESULT textAlign([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTINDENT), displaybind, bindable] HRESULT textIndent([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTINDENT), displaybind, bindable] HRESULT textIndent([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LINEHEIGHT), displaybind, bindable] HRESULT lineHeight([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LINEHEIGHT), displaybind, bindable] HRESULT lineHeight([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINTOP), displaybind, bindable] HRESULT marginTop([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINTOP), displaybind, bindable] HRESULT marginTop([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINRIGHT), displaybind, bindable] HRESULT marginRight([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINRIGHT), displaybind, bindable] HRESULT marginRight([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINBOTTOM), displaybind, bindable] HRESULT marginBottom([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINBOTTOM), displaybind, bindable] HRESULT marginBottom([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINLEFT), displaybind, bindable] HRESULT marginLeft([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINLEFT), displaybind, bindable] HRESULT marginLeft([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGIN), displaybind, bindable, nonbrowsable] HRESULT margin([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGIN), displaybind, bindable, nonbrowsable] HRESULT margin([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGTOP), displaybind, bindable] HRESULT paddingTop([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGTOP), displaybind, bindable] HRESULT paddingTop([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGRIGHT), displaybind, bindable] HRESULT paddingRight([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGRIGHT), displaybind, bindable] HRESULT paddingRight([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGBOTTOM), displaybind, bindable] HRESULT paddingBottom([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGBOTTOM), displaybind, bindable] HRESULT paddingBottom([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGLEFT), displaybind, bindable] HRESULT paddingLeft([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGLEFT), displaybind, bindable] HRESULT paddingLeft([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDING), displaybind, bindable, nonbrowsable] HRESULT padding([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDING), displaybind, bindable, nonbrowsable] HRESULT padding([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDER), displaybind, bindable, nonbrowsable] HRESULT border([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDER), displaybind, bindable, nonbrowsable] HRESULT border([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOP), displaybind, bindable] HRESULT borderTop([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOP), displaybind, bindable] HRESULT borderTop([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHT), displaybind, bindable] HRESULT borderRight([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHT), displaybind, bindable] HRESULT borderRight([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOM), displaybind, bindable] HRESULT borderBottom([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOM), displaybind, bindable] HRESULT borderBottom([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFT), displaybind, bindable] HRESULT borderLeft([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFT), displaybind, bindable] HRESULT borderLeft([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLOR), displaybind, bindable] HRESULT borderColor([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLOR), displaybind, bindable] HRESULT borderColor([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPCOLOR), displaybind, bindable] HRESULT borderTopColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPCOLOR), displaybind, bindable] HRESULT borderTopColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTCOLOR), displaybind, bindable] HRESULT borderRightColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTCOLOR), displaybind, bindable] HRESULT borderRightColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMCOLOR), displaybind, bindable] HRESULT borderBottomColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMCOLOR), displaybind, bindable] HRESULT borderBottomColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTCOLOR), displaybind, bindable] HRESULT borderLeftColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTCOLOR), displaybind, bindable] HRESULT borderLeftColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERWIDTH), displaybind, bindable] HRESULT borderWidth([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERWIDTH), displaybind, bindable] HRESULT borderWidth([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPWIDTH), displaybind, bindable] HRESULT borderTopWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPWIDTH), displaybind, bindable] HRESULT borderTopWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTWIDTH), displaybind, bindable] HRESULT borderRightWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTWIDTH), displaybind, bindable] HRESULT borderRightWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMWIDTH), displaybind, bindable] HRESULT borderBottomWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMWIDTH), displaybind, bindable] HRESULT borderBottomWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTWIDTH), displaybind, bindable] HRESULT borderLeftWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTWIDTH), displaybind, bindable] HRESULT borderLeftWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSTYLE), displaybind, bindable] HRESULT borderStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSTYLE), displaybind, bindable] HRESULT borderStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPSTYLE), displaybind, bindable] HRESULT borderTopStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPSTYLE), displaybind, bindable] HRESULT borderTopStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTSTYLE), displaybind, bindable] HRESULT borderRightStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTSTYLE), displaybind, bindable] HRESULT borderRightStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMSTYLE), displaybind, bindable] HRESULT borderBottomStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMSTYLE), displaybind, bindable] HRESULT borderBottomStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTSTYLE), displaybind, bindable] HRESULT borderLeftStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTSTYLE), displaybind, bindable] HRESULT borderLeftStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WIDTH), displaybind, bindable] HRESULT width([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WIDTH), displaybind, bindable] HRESULT width([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_HEIGHT), displaybind, bindable] HRESULT height([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_HEIGHT), displaybind, bindable] HRESULT height([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STYLEFLOAT), displaybind, bindable] HRESULT styleFloat([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STYLEFLOAT), displaybind, bindable] HRESULT styleFloat([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLEAR), displaybind, bindable] HRESULT clear([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLEAR), displaybind, bindable] HRESULT clear([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_DISPLAY), displaybind, bindable] HRESULT display([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_DISPLAY), displaybind, bindable] HRESULT display([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_VISIBILITY), displaybind, bindable] HRESULT visibility([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_VISIBILITY), displaybind, bindable] HRESULT visibility([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLETYPE), displaybind, bindable] HRESULT listStyleType([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLETYPE), displaybind, bindable] HRESULT listStyleType([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEPOSITION), displaybind, bindable] HRESULT listStylePosition([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEPOSITION), displaybind, bindable] HRESULT listStylePosition([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEIMAGE), displaybind, bindable] HRESULT listStyleImage([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEIMAGE), displaybind, bindable] HRESULT listStyleImage([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLE), displaybind, bindable, nonbrowsable] HRESULT listStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLE), displaybind, bindable, nonbrowsable] HRESULT listStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WHITESPACE), displaybind, bindable] HRESULT whiteSpace([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WHITESPACE), displaybind, bindable] HRESULT whiteSpace([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TOP), displaybind, bindable] HRESULT top([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TOP), displaybind, bindable] HRESULT top([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LEFT), displaybind, bindable] HRESULT left([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LEFT), displaybind, bindable] HRESULT left([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ZINDEX), displaybind, bindable] HRESULT zIndex([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ZINDEX), displaybind, bindable] HRESULT zIndex([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOW), displaybind, bindable] HRESULT overflow([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOW), displaybind, bindable] HRESULT overflow([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKBEFORE), displaybind, bindable] HRESULT pageBreakBefore([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKBEFORE), displaybind, bindable] HRESULT pageBreakBefore([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKAFTER), displaybind, bindable] HRESULT pageBreakAfter([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKAFTER), displaybind, bindable] HRESULT pageBreakAfter([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CSSTEXT), displaybind, bindable, nonbrowsable] HRESULT cssText([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CSSTEXT), displaybind, bindable, nonbrowsable] HRESULT cssText([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CURSOR), displaybind, bindable] HRESULT cursor([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CURSOR), displaybind, bindable] HRESULT cursor([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIP), displaybind, bindable] HRESULT clip([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIP), displaybind, bindable] HRESULT clip([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILTER), displaybind, bindable] HRESULT filter([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILTER), displaybind, bindable] HRESULT filter([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TABLELAYOUT), displaybind, bindable] HRESULT tableLayout([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TABLELAYOUT), displaybind, bindable] HRESULT tableLayout([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLLAPSE), displaybind, bindable] HRESULT borderCollapse([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLLAPSE), displaybind, bindable] HRESULT borderCollapse([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_DIRECTION), displaybind, bindable] HRESULT direction([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_DIRECTION), displaybind, bindable] HRESULT direction([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BEHAVIOR), displaybind, bindable] HRESULT behavior([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BEHAVIOR), displaybind, bindable] HRESULT behavior([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_POSITION), displaybind, bindable] HRESULT position([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_POSITION), displaybind, bindable] HRESULT position([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_UNICODEBIDI), displaybind, bindable] HRESULT unicodeBidi([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_UNICODEBIDI), displaybind, bindable] HRESULT unicodeBidi([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOTTOM), displaybind, bindable] HRESULT bottom([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOTTOM), displaybind, bindable] HRESULT bottom([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_RIGHT), displaybind, bindable] HRESULT right([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_RIGHT), displaybind, bindable] HRESULT right([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_IMEMODE), displaybind, bindable] HRESULT imeMode([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_IMEMODE), displaybind, bindable] HRESULT imeMode([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYALIGN), displaybind, bindable] HRESULT rubyAlign([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYALIGN), displaybind, bindable] HRESULT rubyAlign([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYPOSITION), displaybind, bindable] HRESULT rubyPosition([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYPOSITION), displaybind, bindable] HRESULT rubyPosition([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYOVERHANG), displaybind, bindable] HRESULT rubyOverhang([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYOVERHANG), displaybind, bindable] HRESULT rubyOverhang([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDCHAR), displaybind, bindable] HRESULT layoutGridChar([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDCHAR), displaybind, bindable] HRESULT layoutGridChar([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDLINE), displaybind, bindable] HRESULT layoutGridLine([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDLINE), displaybind, bindable] HRESULT layoutGridLine([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDMODE), displaybind, bindable] HRESULT layoutGridMode([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDMODE), displaybind, bindable] HRESULT layoutGridMode([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDTYPE), displaybind, bindable] HRESULT layoutGridType([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDTYPE), displaybind, bindable] HRESULT layoutGridType([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRID), displaybind, bindable, nonbrowsable] HRESULT layoutGrid([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRID), displaybind, bindable, nonbrowsable] HRESULT layoutGrid([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTAUTOSPACE), displaybind, bindable] HRESULT textAutospace([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTAUTOSPACE), displaybind, bindable] HRESULT textAutospace([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDBREAK), displaybind, bindable] HRESULT wordBreak([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDBREAK), displaybind, bindable] HRESULT wordBreak([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LINEBREAK), displaybind, bindable] HRESULT lineBreak([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LINEBREAK), displaybind, bindable] HRESULT lineBreak([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFY), displaybind, bindable] HRESULT textJustify([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFY), displaybind, bindable] HRESULT textJustify([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFYTRIM), displaybind, bindable] HRESULT textJustifyTrim([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFYTRIM), displaybind, bindable] HRESULT textJustifyTrim([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDA), displaybind, bindable] HRESULT textKashida([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDA), displaybind, bindable] HRESULT textKashida([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWX), displaybind, bindable] HRESULT overflowX([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWX), displaybind, bindable] HRESULT overflowX([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWY), displaybind, bindable] HRESULT overflowY([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWY), displaybind, bindable] HRESULT overflowY([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ACCELERATOR), displaybind, bindable] HRESULT accelerator([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ACCELERATOR), displaybind, bindable] HRESULT accelerator([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTFLOW), displaybind, bindable] HRESULT layoutFlow([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTFLOW), displaybind, bindable] HRESULT layoutFlow([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ZOOM), displaybind, bindable] HRESULT zoom([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ZOOM), displaybind, bindable] HRESULT zoom([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDWRAP), displaybind, bindable] HRESULT wordWrap([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDWRAP), displaybind, bindable] HRESULT wordWrap([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTUNDERLINEPOSITION), displaybind, bindable] HRESULT textUnderlinePosition([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTUNDERLINEPOSITION), displaybind, bindable] HRESULT textUnderlinePosition([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARBASECOLOR), displaybind, bindable] HRESULT scrollbarBaseColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARBASECOLOR), displaybind, bindable] HRESULT scrollbarBaseColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARFACECOLOR), displaybind, bindable] HRESULT scrollbarFaceColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARFACECOLOR), displaybind, bindable] HRESULT scrollbarFaceColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] HRESULT scrollbar3dLightColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] HRESULT scrollbar3dLightColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarShadowColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarShadowColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] HRESULT scrollbarHighlightColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] HRESULT scrollbarHighlightColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarDarkShadowColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarDarkShadowColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARARROWCOLOR), displaybind, bindable] HRESULT scrollbarArrowColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARARROWCOLOR), displaybind, bindable] HRESULT scrollbarArrowColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARTRACKCOLOR), displaybind, bindable] HRESULT scrollbarTrackColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARTRACKCOLOR), displaybind, bindable] HRESULT scrollbarTrackColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WRITINGMODE), displaybind, bindable] HRESULT writingMode([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WRITINGMODE), displaybind, bindable] HRESULT writingMode([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGNLAST), displaybind, bindable] HRESULT textAlignLast([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGNLAST), displaybind, bindable] HRESULT textAlignLast([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDASPACE), displaybind, bindable] HRESULT textKashidaSpace([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDASPACE), displaybind, bindable] HRESULT textKashidaSpace([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTOVERFLOW), displaybind, bindable] HRESULT textOverflow([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTOVERFLOW), displaybind, bindable] HRESULT textOverflow([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MINHEIGHT), displaybind, bindable] HRESULT minHeight([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MINHEIGHT), displaybind, bindable] HRESULT minHeight([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSINTERPOLATIONMODE), displaybind, bindable] HRESULT msInterpolationMode([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSINTERPOLATIONMODE), displaybind, bindable] HRESULT msInterpolationMode([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MAXHEIGHT), displaybind, bindable] HRESULT maxHeight([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MAXHEIGHT), displaybind, bindable] HRESULT maxHeight([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MINWIDTH), displaybind, bindable] HRESULT minWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MINWIDTH), displaybind, bindable] HRESULT minWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MAXWIDTH), displaybind, bindable] HRESULT maxWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MAXWIDTH), displaybind, bindable] HRESULT maxWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CONTENT), displaybind, bindable] HRESULT content([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CONTENT), displaybind, bindable] HRESULT content([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CAPTIONSIDE), displaybind, bindable] HRESULT captionSide([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CAPTIONSIDE), displaybind, bindable] HRESULT captionSide([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERINCREMENT), displaybind, bindable] HRESULT counterIncrement([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERINCREMENT), displaybind, bindable] HRESULT counterIncrement([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERRESET), displaybind, bindable] HRESULT counterReset([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERRESET), displaybind, bindable] HRESULT counterReset([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINE), displaybind, bindable] HRESULT outline([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINE), displaybind, bindable] HRESULT outline([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINEWIDTH), displaybind, bindable] HRESULT outlineWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINEWIDTH), displaybind, bindable] HRESULT outlineWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINESTYLE), displaybind, bindable] HRESULT outlineStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINESTYLE), displaybind, bindable] HRESULT outlineStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINECOLOR), displaybind, bindable] HRESULT outlineColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINECOLOR), displaybind, bindable] HRESULT outlineColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOXSIZING), displaybind, bindable] HRESULT boxSizing([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOXSIZING), displaybind, bindable] HRESULT boxSizing([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSPACING), displaybind, bindable] HRESULT borderSpacing([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSPACING), displaybind, bindable] HRESULT borderSpacing([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ORPHANS), displaybind, bindable] HRESULT orphans([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ORPHANS), displaybind, bindable] HRESULT orphans([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WIDOWS), displaybind, bindable] HRESULT widows([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WIDOWS), displaybind, bindable] HRESULT widows([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKINSIDE), displaybind, bindable] HRESULT pageBreakInside([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKINSIDE), displaybind, bindable] HRESULT pageBreakInside([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_EMPTYCELLS), displaybind, bindable] HRESULT emptyCells([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_EMPTYCELLS), displaybind, bindable] HRESULT emptyCells([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSBLOCKPROGRESSION), displaybind, bindable] HRESULT msBlockProgression([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSBLOCKPROGRESSION), displaybind, bindable] HRESULT msBlockProgression([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_QUOTES), displaybind, bindable] HRESULT quotes([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_QUOTES), displaybind, bindable] HRESULT quotes([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ALIGNMENTBASELINE), displaybind, bindable] HRESULT alignmentBaseline([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ALIGNMENTBASELINE), displaybind, bindable] HRESULT alignmentBaseline([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BASELINESHIFT), displaybind, bindable] HRESULT baselineShift([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BASELINESHIFT), displaybind, bindable] HRESULT baselineShift([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_DOMINANTBASELINE), displaybind, bindable] HRESULT dominantBaseline([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_DOMINANTBASELINE), displaybind, bindable] HRESULT dominantBaseline([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZEADJUST), displaybind, bindable] HRESULT fontSizeAdjust([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZEADJUST), displaybind, bindable] HRESULT fontSizeAdjust([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTRETCH), displaybind, bindable] HRESULT fontStretch([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTRETCH), displaybind, bindable] HRESULT fontStretch([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OPACITY), displaybind, bindable] HRESULT opacity([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OPACITY), displaybind, bindable] HRESULT opacity([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPPATH), displaybind, bindable] HRESULT clipPath([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPPATH), displaybind, bindable] HRESULT clipPath([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRULE), displaybind, bindable] HRESULT clipRule([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRULE), displaybind, bindable] HRESULT clipRule([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILL), displaybind, bindable] HRESULT fill([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILL), displaybind, bindable] HRESULT fill([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILLOPACITY), displaybind, bindable] HRESULT fillOpacity([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILLOPACITY), displaybind, bindable] HRESULT fillOpacity([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILLRULE), displaybind, bindable] HRESULT fillRule([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILLRULE), displaybind, bindable] HRESULT fillRule([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_KERNING), displaybind, bindable] HRESULT kerning([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_KERNING), displaybind, bindable] HRESULT kerning([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKER), displaybind, bindable] HRESULT marker([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKER), displaybind, bindable] HRESULT marker([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKEREND), displaybind, bindable] HRESULT markerEnd([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKEREND), displaybind, bindable] HRESULT markerEnd([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKERMID), displaybind, bindable] HRESULT markerMid([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKERMID), displaybind, bindable] HRESULT markerMid([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKERSTART), displaybind, bindable] HRESULT markerStart([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKERSTART), displaybind, bindable] HRESULT markerStart([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MASK), displaybind, bindable] HRESULT mask([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MASK), displaybind, bindable] HRESULT mask([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_POINTEREVENTS), displaybind, bindable] HRESULT pointerEvents([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_POINTEREVENTS), displaybind, bindable] HRESULT pointerEvents([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STOPCOLOR), displaybind, bindable] HRESULT stopColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STOPCOLOR), displaybind, bindable] HRESULT stopColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STOPOPACITY), displaybind, bindable] HRESULT stopOpacity([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STOPOPACITY), displaybind, bindable] HRESULT stopOpacity([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKE), displaybind, bindable] HRESULT stroke([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKE), displaybind, bindable] HRESULT stroke([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHARRAY), displaybind, bindable] HRESULT strokeDasharray([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHARRAY), displaybind, bindable] HRESULT strokeDasharray([out, retval] BSTR * p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHOFFSET), displaybind, bindable] HRESULT strokeDashoffset([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHOFFSET), displaybind, bindable] HRESULT strokeDashoffset([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINECAP), displaybind, bindable] HRESULT strokeLinecap([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINECAP), displaybind, bindable] HRESULT strokeLinecap([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINEJOIN), displaybind, bindable] HRESULT strokeLinejoin([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINEJOIN), displaybind, bindable] HRESULT strokeLinejoin([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEMITERLIMIT), displaybind, bindable] HRESULT strokeMiterlimit([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEMITERLIMIT), displaybind, bindable] HRESULT strokeMiterlimit([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEOPACITY), displaybind, bindable] HRESULT strokeOpacity([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEOPACITY), displaybind, bindable] HRESULT strokeOpacity([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEWIDTH), displaybind, bindable] HRESULT strokeWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEWIDTH), displaybind, bindable] HRESULT strokeWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTANCHOR), displaybind, bindable] HRESULT textAnchor([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTANCHOR), displaybind, bindable] HRESULT textAnchor([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONHORIZONTAL), displaybind, bindable] HRESULT glyphOrientationHorizontal([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONHORIZONTAL), displaybind, bindable] HRESULT glyphOrientationHorizontal([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONVERTICAL), displaybind, bindable] HRESULT glyphOrientationVertical([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONVERTICAL), displaybind, bindable] HRESULT glyphOrientationVertical([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRADIUS), displaybind, bindable] HRESULT borderRadius([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRADIUS), displaybind, bindable] HRESULT borderRadius([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPLEFTRADIUS), displaybind, bindable] HRESULT borderTopLeftRadius([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPLEFTRADIUS), displaybind, bindable] HRESULT borderTopLeftRadius([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPRIGHTRADIUS), displaybind, bindable] HRESULT borderTopRightRadius([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPRIGHTRADIUS), displaybind, bindable] HRESULT borderTopRightRadius([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMRIGHTRADIUS), displaybind, bindable] HRESULT borderBottomRightRadius([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMRIGHTRADIUS), displaybind, bindable] HRESULT borderBottomRightRadius([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMLEFTRADIUS), displaybind, bindable] HRESULT borderBottomLeftRadius([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMLEFTRADIUS), displaybind, bindable] HRESULT borderBottomLeftRadius([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPTOP), displaybind, bindable, hidden] HRESULT clipTop([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPTOP), displaybind, bindable, hidden] HRESULT clipTop([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRIGHT), displaybind, bindable, hidden] HRESULT clipRight([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRIGHT), displaybind, bindable, hidden] HRESULT clipRight([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPBOTTOM), displaybind, bindable, hidden] HRESULT clipBottom([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPLEFT), displaybind, bindable, hidden] HRESULT clipLeft([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPLEFT), displaybind, bindable, hidden] HRESULT clipLeft([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CSSFLOAT), displaybind, bindable] HRESULT cssFloat([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CSSFLOAT), displaybind, bindable] HRESULT cssFloat([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCLIP), displaybind, bindable] HRESULT backgroundClip([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCLIP), displaybind, bindable] HRESULT backgroundClip([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDORIGIN), displaybind, bindable] HRESULT backgroundOrigin([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDORIGIN), displaybind, bindable] HRESULT backgroundOrigin([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDSIZE), displaybind, bindable] HRESULT backgroundSize([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDSIZE), displaybind, bindable] HRESULT backgroundSize([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOXSHADOW), displaybind, bindable] HRESULT boxShadow([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOXSHADOW), displaybind, bindable] HRESULT boxShadow([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORM), displaybind, bindable] HRESULT msTransform([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORM), displaybind, bindable] HRESULT msTransform([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORMORIGIN), displaybind, bindable] HRESULT msTransformOrigin([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORMORIGIN), displaybind, bindable] HRESULT msTransformOrigin([out, retval] BSTR *p); } /***************************************************************************** * IHTMLCSSStyleDeclaration2 interface */ [ odl, oleautomation, dual, uuid(305107d1-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLCSSStyleDeclaration2 : IDispatch { [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLCHAINING), displaybind, bindable] HRESULT msScrollChaining([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLCHAINING), displaybind, bindable] HRESULT msScrollChaining([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMING), displaybind, bindable] HRESULT msContentZooming([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMING), displaybind, bindable] HRESULT msContentZooming([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPTYPE), displaybind, bindable] HRESULT msContentZoomSnapType([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPTYPE), displaybind, bindable] HRESULT msContentZoomSnapType([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLRAILS), displaybind, bindable] HRESULT msScrollRails([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLRAILS), displaybind, bindable] HRESULT msScrollRails([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMCHAINING), displaybind, bindable] HRESULT msContentZoomChaining([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMCHAINING), displaybind, bindable] HRESULT msContentZoomChaining([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPTYPE), displaybind, bindable] HRESULT msScrollSnapType([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPTYPE), displaybind, bindable] HRESULT msScrollSnapType([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMIT), displaybind, bindable] HRESULT msContentZoomLimit([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMIT), displaybind, bindable] HRESULT msContentZoomLimit([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAP), displaybind, bindable] HRESULT msContentZoomSnap([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAP), displaybind, bindable] HRESULT msContentZoomSnap([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPPOINTS), displaybind, bindable] HRESULT msContentZoomSnapPoints([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPPOINTS), displaybind, bindable] HRESULT msContentZoomSnapPoints([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMIN), displaybind, bindable] HRESULT msContentZoomLimitMin([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMIN), displaybind, bindable] HRESULT msContentZoomLimitMin([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMAX), displaybind, bindable] HRESULT msContentZoomLimitMax([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMAX), displaybind, bindable] HRESULT msContentZoomLimitMax([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPX), displaybind, bindable] HRESULT msScrollSnapX([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPX), displaybind, bindable] HRESULT msScrollSnapX([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPY), displaybind, bindable] HRESULT msScrollSnapY([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPY), displaybind, bindable] HRESULT msScrollSnapY([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSX), displaybind, bindable] HRESULT msScrollSnapPointsX([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSX), displaybind, bindable] HRESULT msScrollSnapPointsX([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSY), displaybind, bindable] HRESULT msScrollSnapPointsY([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSY), displaybind, bindable] HRESULT msScrollSnapPointsY([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMN), displaybind, bindable] HRESULT msGridColumn([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMN), displaybind, bindable] HRESULT msGridColumn([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNALIGN), displaybind, bindable] HRESULT msGridColumnAlign([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNALIGN), displaybind, bindable] HRESULT msGridColumnAlign([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNS), displaybind, bindable] HRESULT msGridColumns([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNS), displaybind, bindable] HRESULT msGridColumns([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNSPAN), displaybind, bindable] HRESULT msGridColumnSpan([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNSPAN), displaybind, bindable] HRESULT msGridColumnSpan([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROW), displaybind, bindable] HRESULT msGridRow([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROW), displaybind, bindable] HRESULT msGridRow([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWALIGN), displaybind, bindable] HRESULT msGridRowAlign([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWALIGN), displaybind, bindable] HRESULT msGridRowAlign([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWS), displaybind, bindable] HRESULT msGridRows([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWS), displaybind, bindable] HRESULT msGridRows([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWSPAN), displaybind, bindable] HRESULT msGridRowSpan([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWSPAN), displaybind, bindable] HRESULT msGridRowSpan([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPTHROUGH), displaybind, bindable] HRESULT msWrapThrough([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPTHROUGH), displaybind, bindable] HRESULT msWrapThrough([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPMARGIN), displaybind, bindable] HRESULT msWrapMargin([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPMARGIN), displaybind, bindable] HRESULT msWrapMargin([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPFLOW), displaybind, bindable] HRESULT msWrapFlow([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPFLOW), displaybind, bindable] HRESULT msWrapFlow([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONNAME), displaybind, bindable] HRESULT msAnimationName([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONNAME), displaybind, bindable] HRESULT msAnimationName([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDURATION), displaybind, bindable] HRESULT msAnimationDuration([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDURATION), displaybind, bindable] HRESULT msAnimationDuration([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONTIMINGFUNCTION), displaybind, bindable] HRESULT msAnimationTimingFunction([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONTIMINGFUNCTION), displaybind, bindable] HRESULT msAnimationTimingFunction([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDELAY), displaybind, bindable] HRESULT msAnimationDelay([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDELAY), displaybind, bindable] HRESULT msAnimationDelay([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDIRECTION), displaybind, bindable] HRESULT msAnimationDirection([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDIRECTION), displaybind, bindable] HRESULT msAnimationDirection([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONPLAYSTATE), displaybind, bindable] HRESULT msAnimationPlayState([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONPLAYSTATE), displaybind, bindable] HRESULT msAnimationPlayState([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONITERATIONCOUNT), displaybind, bindable] HRESULT msAnimationIterationCount([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONITERATIONCOUNT), displaybind, bindable] HRESULT msAnimationIterationCount([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATION), displaybind, bindable] HRESULT msAnimation([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATION), displaybind, bindable] HRESULT msAnimation([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONFILLMODE), displaybind, bindable] HRESULT msAnimationFillMode([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONFILLMODE), displaybind, bindable] HRESULT msAnimationFillMode([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLORINTERPOLATIONFILTERS), displaybind, bindable] HRESULT colorInterpolationFilters([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLORINTERPOLATIONFILTERS), displaybind, bindable] HRESULT colorInterpolationFilters([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNCOUNT), displaybind, bindable] HRESULT columnCount([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNCOUNT), displaybind, bindable] HRESULT columnCount([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNWIDTH), displaybind, bindable] HRESULT columnWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNWIDTH), displaybind, bindable] HRESULT columnWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNGAP), displaybind, bindable] HRESULT columnGap([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNGAP), displaybind, bindable] HRESULT columnGap([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNFILL), displaybind, bindable] HRESULT columnFill([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNFILL), displaybind, bindable] HRESULT columnFill([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNSPAN), displaybind, bindable] HRESULT columnSpan([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNSPAN), displaybind, bindable] HRESULT columnSpan([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNS), displaybind, bindable, nonbrowsable] HRESULT columns([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNS), displaybind, bindable, nonbrowsable] HRESULT columns([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULE), displaybind, bindable] HRESULT columnRule([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULE), displaybind, bindable] HRESULT columnRule([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULECOLOR), displaybind, bindable] HRESULT columnRuleColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULECOLOR), displaybind, bindable] HRESULT columnRuleColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULESTYLE), displaybind, bindable] HRESULT columnRuleStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULESTYLE), displaybind, bindable] HRESULT columnRuleStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULEWIDTH), displaybind, bindable] HRESULT columnRuleWidth([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULEWIDTH), displaybind, bindable] HRESULT columnRuleWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKBEFORE), displaybind, bindable] HRESULT breakBefore([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKBEFORE), displaybind, bindable] HRESULT breakBefore([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKAFTER), displaybind, bindable] HRESULT breakAfter([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKAFTER), displaybind, bindable] HRESULT breakAfter([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKINSIDE), displaybind, bindable] HRESULT breakInside([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKINSIDE), displaybind, bindable] HRESULT breakInside([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODCOLOR), displaybind, bindable] HRESULT floodColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODCOLOR), displaybind, bindable] HRESULT floodColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODOPACITY), displaybind, bindable] HRESULT floodOpacity([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODOPACITY), displaybind, bindable] HRESULT floodOpacity([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_LIGHTINGCOLOR), displaybind, bindable] HRESULT lightingColor([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_LIGHTINGCOLOR), displaybind, bindable] HRESULT lightingColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMIN), displaybind, bindable] HRESULT msScrollLimitXMin([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMIN), displaybind, bindable] HRESULT msScrollLimitXMin([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMIN), displaybind, bindable] HRESULT msScrollLimitYMin([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMIN), displaybind, bindable] HRESULT msScrollLimitYMin([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMAX), displaybind, bindable] HRESULT msScrollLimitXMax([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMAX), displaybind, bindable] HRESULT msScrollLimitXMax([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMAX), displaybind, bindable] HRESULT msScrollLimitYMax([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMAX), displaybind, bindable] HRESULT msScrollLimitYMax([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMIT), displaybind, bindable] HRESULT msScrollLimit([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMIT), displaybind, bindable] HRESULT msScrollLimit([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TEXTSHADOW), displaybind, bindable] HRESULT textShadow([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TEXTSHADOW), displaybind, bindable] HRESULT textShadow([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWFROM), displaybind, bindable] HRESULT msFlowFrom([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWFROM), displaybind, bindable] HRESULT msFlowFrom([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWINTO), displaybind, bindable] HRESULT msFlowInto([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWINTO), displaybind, bindable] HRESULT msFlowInto([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENS), displaybind, bindable] HRESULT msHyphens([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENS), displaybind, bindable] HRESULT msHyphens([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITZONE), displaybind, bindable] HRESULT msHyphenateLimitZone([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITZONE), displaybind, bindable] HRESULT msHyphenateLimitZone([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITCHARS), displaybind, bindable] HRESULT msHyphenateLimitChars([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITCHARS), displaybind, bindable] HRESULT msHyphenateLimitChars([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITLINES), displaybind, bindable] HRESULT msHyphenateLimitLines([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITLINES), displaybind, bindable] HRESULT msHyphenateLimitLines([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHIGHCONTRASTADJUST), displaybind, bindable] HRESULT msHighContrastAdjust([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHIGHCONTRASTADJUST), displaybind, bindable] HRESULT msHighContrastAdjust([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ENABLEBACKGROUND), displaybind, bindable] HRESULT enableBackground([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ENABLEBACKGROUND), displaybind, bindable] HRESULT enableBackground([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFONTFEATURESETTINGS), displaybind, bindable] HRESULT msFontFeatureSettings([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFONTFEATURESETTINGS), displaybind, bindable] HRESULT msFontFeatureSettings([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSUSERSELECT), displaybind, bindable] HRESULT msUserSelect([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSUSERSELECT), displaybind, bindable] HRESULT msUserSelect([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSOVERFLOWSTYLE), displaybind, bindable] HRESULT msOverflowStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSOVERFLOWSTYLE), displaybind, bindable] HRESULT msOverflowStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSFORMSTYLE), displaybind, bindable] HRESULT msTransformStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSFORMSTYLE), displaybind, bindable] HRESULT msTransformStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSBACKFACEVISIBILITY), displaybind, bindable] HRESULT msBackfaceVisibility([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSBACKFACEVISIBILITY), displaybind, bindable] HRESULT msBackfaceVisibility([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVE), displaybind, bindable] HRESULT msPerspective([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVE), displaybind, bindable] HRESULT msPerspective([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVEORIGIN), displaybind, bindable] HRESULT msPerspectiveOrigin([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVEORIGIN), displaybind, bindable] HRESULT msPerspectiveOrigin([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONPROPERTY), displaybind, bindable] HRESULT msTransitionProperty([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONPROPERTY), displaybind, bindable] HRESULT msTransitionProperty([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDURATION), displaybind, bindable] HRESULT msTransitionDuration([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDURATION), displaybind, bindable] HRESULT msTransitionDuration([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONTIMINGFUNCTION), displaybind, bindable] HRESULT msTransitionTimingFunction([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONTIMINGFUNCTION), displaybind, bindable] HRESULT msTransitionTimingFunction([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDELAY), displaybind, bindable] HRESULT msTransitionDelay([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDELAY), displaybind, bindable] HRESULT msTransitionDelay([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITION), displaybind, bindable] HRESULT msTransition([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITION), displaybind, bindable] HRESULT msTransition([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHACTION), displaybind, bindable] HRESULT msTouchAction([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHACTION), displaybind, bindable] HRESULT msTouchAction([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLTRANSLATION), displaybind, bindable] HRESULT msScrollTranslation([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLTRANSLATION), displaybind, bindable] HRESULT msScrollTranslation([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEX), displaybind, bindable] HRESULT msFlex([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEX), displaybind, bindable] HRESULT msFlex([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPOSITIVE), displaybind, bindable] HRESULT msFlexPositive([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPOSITIVE), displaybind, bindable] HRESULT msFlexPositive([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXNEGATIVE), displaybind, bindable] HRESULT msFlexNegative([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXNEGATIVE), displaybind, bindable] HRESULT msFlexNegative([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPREFERREDSIZE), displaybind, bindable] HRESULT msFlexPreferredSize([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPREFERREDSIZE), displaybind, bindable] HRESULT msFlexPreferredSize([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXFLOW), displaybind, bindable] HRESULT msFlexFlow([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXFLOW), displaybind, bindable] HRESULT msFlexFlow([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXDIRECTION), displaybind, bindable] HRESULT msFlexDirection([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXDIRECTION), displaybind, bindable] HRESULT msFlexDirection([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXWRAP), displaybind, bindable] HRESULT msFlexWrap([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXWRAP), displaybind, bindable] HRESULT msFlexWrap([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXALIGN), displaybind, bindable] HRESULT msFlexAlign([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXALIGN), displaybind, bindable] HRESULT msFlexAlign([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXITEMALIGN), displaybind, bindable] HRESULT msFlexItemAlign([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXITEMALIGN), displaybind, bindable] HRESULT msFlexItemAlign([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPACK), displaybind, bindable] HRESULT msFlexPack([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPACK), displaybind, bindable] HRESULT msFlexPack([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXLINEPACK), displaybind, bindable] HRESULT msFlexLinePack([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXLINEPACK), displaybind, bindable] HRESULT msFlexLinePack([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXORDER), displaybind, bindable] HRESULT msFlexOrder([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXORDER), displaybind, bindable] HRESULT msFlexOrder([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHSELECT), displaybind, bindable] HRESULT msTouchSelect([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHSELECT), displaybind, bindable] HRESULT msTouchSelect([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORM), displaybind, bindable] HRESULT transform([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORM), displaybind, bindable] HRESULT transform([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMORIGIN), displaybind, bindable] HRESULT transformOrigin([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMORIGIN), displaybind, bindable] HRESULT transformOrigin([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMSTYLE), displaybind, bindable] HRESULT transformStyle([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMSTYLE), displaybind, bindable] HRESULT transformStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BACKFACEVISIBILITY), displaybind, bindable] HRESULT backfaceVisibility([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BACKFACEVISIBILITY), displaybind, bindable] HRESULT backfaceVisibility([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVE), displaybind, bindable] HRESULT perspective([in] VARIANT v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVE), displaybind, bindable] HRESULT perspective([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVEORIGIN), displaybind, bindable] HRESULT perspectiveOrigin([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVEORIGIN), displaybind, bindable] HRESULT perspectiveOrigin([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONPROPERTY), displaybind, bindable] HRESULT transitionProperty([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONPROPERTY), displaybind, bindable] HRESULT transitionProperty([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDURATION), displaybind, bindable] HRESULT transitionDuration([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDURATION), displaybind, bindable] HRESULT transitionDuration([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONTIMINGFUNCTION), displaybind, bindable] HRESULT transitionTimingFunction([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONTIMINGFUNCTION), displaybind, bindable] HRESULT transitionTimingFunction([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDELAY), displaybind, bindable] HRESULT transitionDelay([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDELAY), displaybind, bindable] HRESULT transitionDelay([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITION), displaybind, bindable] HRESULT transition([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITION), displaybind, bindable] HRESULT transition([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FONTFEATURESETTINGS), displaybind, bindable] HRESULT fontFeatureSettings([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FONTFEATURESETTINGS), displaybind, bindable] HRESULT fontFeatureSettings([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONNAME), displaybind, bindable] HRESULT animationName([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONNAME), displaybind, bindable] HRESULT animationName([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDURATION), displaybind, bindable] HRESULT animationDuration([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDURATION), displaybind, bindable] HRESULT animationDuration([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONTIMINGFUNCTION), displaybind, bindable] HRESULT animationTimingFunction([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONTIMINGFUNCTION), displaybind, bindable] HRESULT animationTimingFunction([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDELAY), displaybind, bindable] HRESULT animationDelay([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDELAY), displaybind, bindable] HRESULT animationDelay([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDIRECTION), displaybind, bindable] HRESULT animationDirection([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDIRECTION), displaybind, bindable] HRESULT animationDirection([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONPLAYSTATE), displaybind, bindable] HRESULT animationPlayState([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONPLAYSTATE), displaybind, bindable] HRESULT animationPlayState([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONITERATIONCOUNT), displaybind, bindable] HRESULT animationIterationCount([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONITERATIONCOUNT), displaybind, bindable] HRESULT animationIterationCount([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATION), displaybind, bindable] HRESULT animation([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATION), displaybind, bindable] HRESULT animation([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONFILLMODE), displaybind, bindable] HRESULT animationFillMode([in] BSTR v); [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONFILLMODE), displaybind, bindable] HRESULT animationFillMode([out, retval] BSTR *p); } /***************************************************************************** * IHTMLFiltersCollection interface */ [ odl, oleautomation, dual, uuid(3050F3EE-98B5-11Cf-BB82-00AA00BDCE0B) ] interface IHTMLFiltersCollection : IDispatch { [propget, id(DISPID_IHTMLFILTERSCOLLECTION_LENGTH)] HRESULT length([retval, out] LONG *p); [propget, id(DISPID_IHTMLFILTERSCOLLECTION__NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **p); [id(DISPID_IHTMLFILTERSCOLLECTION_ITEM)] HRESULT item( [in] VARIANT *pvarIndex, [retval, out] VARIANT *pvarResult); } /***************************************************************************** * IHTMLStyle interface */ [ odl, oleautomation, dual, uuid(3050F25E-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLStyle : IDispatch { [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind] HRESULT fontFamily([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind] HRESULT fontFamily([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind] HRESULT fontStyle([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind] HRESULT fontStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind] HRESULT fontVariant([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind] HRESULT fontVariant([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind] HRESULT fontWeight([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind] HRESULT fontWeight([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind] HRESULT fontSize([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind] HRESULT fontSize([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind] HRESULT font([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind] HRESULT font([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind] HRESULT color([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind] HRESULT color([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind] HRESULT background([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind] HRESULT background([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind] HRESULT backgroundColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind] HRESULT backgroundColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind] HRESULT backgroundImage([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind] HRESULT backgroundImage([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind] HRESULT backgroundRepeat([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind] HRESULT backgroundRepeat([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind] HRESULT backgroundAttachment([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind] HRESULT backgroundAttachment([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind] HRESULT backgroundPosition([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind] HRESULT backgroundPosition([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind] HRESULT backgroundPositionX([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind] HRESULT backgroundPositionX([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind] HRESULT backgroundPositionY([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind] HRESULT backgroundPositionY([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind] HRESULT wordSpacing([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind] HRESULT wordSpacing([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind] HRESULT letterSpacing([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind] HRESULT letterSpacing([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind] HRESULT textDecoration([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind] HRESULT textDecoration([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind] HRESULT textDecorationNone([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind] HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind] HRESULT textDecorationUnderline([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind] HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind] HRESULT textDecorationOverline([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind] HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind] HRESULT textDecorationLineThrough([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind] HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind] HRESULT textDecorationBlink([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind] HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind] HRESULT verticalAlign([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind] HRESULT verticalAlign([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind] HRESULT textTransform([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind] HRESULT textTransform([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind] HRESULT textAlign([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind] HRESULT textAlign([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind] HRESULT textIndent([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind] HRESULT textIndent([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind] HRESULT lineHeight([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind] HRESULT lineHeight([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind] HRESULT marginTop([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind] HRESULT marginTop([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind] HRESULT marginRight([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind] HRESULT marginRight([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind] HRESULT marginBottom([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind] HRESULT marginBottom([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind] HRESULT marginLeft([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind] HRESULT marginLeft([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind] HRESULT margin([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind] HRESULT margin([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind] HRESULT paddingTop([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind] HRESULT paddingTop([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind] HRESULT paddingRight([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind] HRESULT paddingRight([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind] HRESULT paddingBottom([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind] HRESULT paddingBottom([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind] HRESULT paddingLeft([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind] HRESULT paddingLeft([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind] HRESULT padding([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind] HRESULT padding([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind] HRESULT border([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind] HRESULT border([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind] HRESULT borderTop([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind] HRESULT borderTop([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind] HRESULT borderRight([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind] HRESULT borderRight([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind] HRESULT borderBottom([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind] HRESULT borderBottom([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind] HRESULT borderLeft([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind] HRESULT borderLeft([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind] HRESULT borderColor([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind] HRESULT borderColor([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind] HRESULT borderTopColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind] HRESULT borderTopColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind] HRESULT borderRightColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind] HRESULT borderRightColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind] HRESULT borderBottomColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind] HRESULT borderBottomColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind] HRESULT borderLeftColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind] HRESULT borderLeftColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind] HRESULT borderWidth([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind] HRESULT borderWidth([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind] HRESULT borderTopWidth([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind] HRESULT borderTopWidth([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind] HRESULT borderRightWidth([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind] HRESULT borderRightWidth([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind] HRESULT borderBottomWidth([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind] HRESULT borderBottomWidth([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind] HRESULT borderLeftWidth([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind] HRESULT borderLeftWidth([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind] HRESULT borderStyle([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind] HRESULT borderStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind] HRESULT borderTopStyle([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind] HRESULT borderTopStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind] HRESULT borderRightStyle([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind] HRESULT borderRightStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind] HRESULT borderBottomStyle([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind] HRESULT borderBottomStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind] HRESULT borderLeftStyle([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind] HRESULT borderLeftStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind] HRESULT width([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind] HRESULT width([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind] HRESULT height([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind] HRESULT height([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind] HRESULT styleFloat([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind] HRESULT styleFloat([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind] HRESULT clear([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind] HRESULT clear([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind] HRESULT display([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind] HRESULT display([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind] HRESULT visibility([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind] HRESULT visibility([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind] HRESULT listStyleType([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind] HRESULT listStyleType([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind] HRESULT listStylePosition([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind] HRESULT listStylePosition([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind] HRESULT listStyleImage([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind] HRESULT listStyleImage([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind] HRESULT listStyle([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind] HRESULT listStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind] HRESULT whiteSpace([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind] HRESULT whiteSpace([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind] HRESULT top([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind] HRESULT top([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind] HRESULT left([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind] HRESULT left([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLSTYLE_POSITION), bindable, displaybind] HRESULT position([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind] HRESULT zIndex([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind] HRESULT zIndex([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind] HRESULT overflow([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind] HRESULT overflow([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind] HRESULT pageBreakBefore([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind] HRESULT pageBreakBefore([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind] HRESULT pageBreakAfter([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind] HRESULT pageBreakAfter([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind] HRESULT cssText([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind] HRESULT cssText([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden] HRESULT pixelTop([in] LONG v); [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden] HRESULT pixelTop([retval, out] LONG *p); [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden] HRESULT pixelLeft([in] LONG v); [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden] HRESULT pixelLeft([retval, out] LONG *p); [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden] HRESULT pixelWidth([in] LONG v); [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden] HRESULT pixelWidth([retval, out] LONG *p); [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden] HRESULT pixelHeight([in] LONG v); [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden] HRESULT pixelHeight([retval, out] LONG *p); [propput, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind] HRESULT posTop([in] float v); [propget, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind] HRESULT posTop([retval, out] float *p); [propput, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind] HRESULT posLeft([in] float v); [propget, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind] HRESULT posLeft([retval, out] float *p); [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind] HRESULT posWidth([in] float v); [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind] HRESULT posWidth([retval, out] float *p); [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind] HRESULT posHeight([in] float v); [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind] HRESULT posHeight([retval, out] float *p); [propput, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind] HRESULT cursor([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind] HRESULT cursor([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind] HRESULT clip([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind] HRESULT clip([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind] HRESULT filter([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind] HRESULT filter([retval, out] BSTR *p); [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR strAttributeName, [in] VARIANT AttributeValue, [defaultvalue(1), in] LONG lFlags); [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR strAttributeName, [defaultvalue(0), in] LONG lFlags, [retval, out] VARIANT *AttributeValue); [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR strAttributeName, [defaultvalue(1), in] LONG lFlags, [retval, out] VARIANT_BOOL *pfSuccess); [id(DISPID_IHTMLSTYLE_TOSTRING)] HRESULT toString([retval, out] BSTR *String); } /***************************************************************************** * IHTMLStyle2 interface */ [ odl, oleautomation, dual, uuid(3050f4a2-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyle2 : IDispatch { [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable] HRESULT tableLayout([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable] HRESULT tableLayout([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable] HRESULT borderCollapse([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable] HRESULT borderCollapse([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable] HRESULT direction([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable] HRESULT direction([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable] HRESULT behavior([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable] HRESULT behavior([out, retval] BSTR *p); [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)] HRESULT setExpression( [in] BSTR propname, [in] BSTR expression, [in, defaultvalue("")] BSTR language); [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)] HRESULT getExpression( [in] BSTR propname, [out, retval] VARIANT *expression); [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)] HRESULT removeExpression( [in] BSTR propname, [out, retval] VARIANT_BOOL *pfSuccess); [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable] HRESULT position([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable] HRESULT position([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable] HRESULT unicodeBidi([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable] HRESULT unicodeBidi([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable] HRESULT bottom([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable] HRESULT bottom([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable] HRESULT right([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable] HRESULT right([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden] HRESULT pixelBottom([in] LONG v); [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden] HRESULT pixelBottom([out, retval] LONG *p); [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden] HRESULT pixelRight([in] LONG v); [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden] HRESULT pixelRight([out, retval] LONG *p); [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable] HRESULT posBottom([in] float v); [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable] HRESULT posBottom([out, retval] float *p); [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable] HRESULT posRight([in] float v); [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable] HRESULT posRight([out, retval] float *p); [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable] HRESULT imeMode([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable] HRESULT imeMode([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable] HRESULT rubyAlign([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable] HRESULT rubyAlign([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable] HRESULT rubyPosition([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable] HRESULT rubyPosition([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable] HRESULT rubyOverhang([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable] HRESULT rubyOverhang([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable] HRESULT layoutGridChar([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable] HRESULT layoutGridChar([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable] HRESULT layoutGridLine([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable] HRESULT layoutGridLine([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable] HRESULT layoutGridMode([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable] HRESULT layoutGridMode([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable] HRESULT layoutGridType([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable] HRESULT layoutGridType([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable] HRESULT layoutGrid([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable] HRESULT layoutGrid([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable] HRESULT wordBreak([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable] HRESULT wordBreak([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable] HRESULT lineBreak([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable] HRESULT lineBreak([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable] HRESULT textJustify([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable] HRESULT textJustify([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable] HRESULT textJustifyTrim([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable] HRESULT textJustifyTrim([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable] HRESULT textKashida([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable] HRESULT textKashida([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable] HRESULT textAutospace([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable] HRESULT textAutospace([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable] HRESULT overflowX([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable] HRESULT overflowX([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable] HRESULT overflowY([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable] HRESULT overflowY([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable] HRESULT accelerator([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable] HRESULT accelerator([out, retval] BSTR *p); } /***************************************************************************** * IHTMLRuleStyle interface */ [ odl, oleautomation, dual, uuid(3050F3CF-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLRuleStyle : IDispatch { [propput, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind] HRESULT fontFamily([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind] HRESULT fontFamily([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind] HRESULT fontStyle([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind] HRESULT fontStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind] HRESULT fontVariant([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind] HRESULT fontVariant([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind] HRESULT fontWeight([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind] HRESULT fontWeight([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind] HRESULT fontSize([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind] HRESULT fontSize([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind] HRESULT font([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind] HRESULT font([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind] HRESULT color([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind] HRESULT color([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind] HRESULT background([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind] HRESULT background([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind] HRESULT backgroundColor([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind] HRESULT backgroundColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind] HRESULT backgroundImage([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind] HRESULT backgroundImage([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind] HRESULT backgroundRepeat([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind] HRESULT backgroundRepeat([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind] HRESULT backgroundAttachment([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind] HRESULT backgroundAttachment([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind] HRESULT backgroundPosition([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind] HRESULT backgroundPosition([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind] HRESULT backgroundPositionX([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind] HRESULT backgroundPositionX([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind] HRESULT backgroundPositionY([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind] HRESULT backgroundPositionY([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind] HRESULT wordSpacing([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind] HRESULT wordSpacing([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind] HRESULT letterSpacing([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind] HRESULT letterSpacing([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind] HRESULT textDecoration([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind] HRESULT textDecoration([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind] HRESULT textDecorationNone([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind] HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind] HRESULT textDecorationUnderline([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind] HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind] HRESULT textDecorationOverline([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind] HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind] HRESULT textDecorationLineThrough([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind] HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind] HRESULT textDecorationBlink([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind] HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind] HRESULT verticalAlign([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind] HRESULT verticalAlign([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind] HRESULT textTransform([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind] HRESULT textTransform([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind] HRESULT textAlign([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind] HRESULT textAlign([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind] HRESULT textIndent([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind] HRESULT textIndent([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind] HRESULT lineHeight([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind] HRESULT lineHeight([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind] HRESULT marginTop([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind] HRESULT marginTop([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind] HRESULT marginRight([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind] HRESULT marginRight([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind] HRESULT marginBottom([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind] HRESULT marginBottom([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind] HRESULT marginLeft([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind] HRESULT marginLeft([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind] HRESULT margin([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind] HRESULT margin([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind] HRESULT paddingTop([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind] HRESULT paddingTop([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind] HRESULT paddingRight([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind] HRESULT paddingRight([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind] HRESULT paddingBottom([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind] HRESULT paddingBottom([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind] HRESULT paddingLeft([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind] HRESULT paddingLeft([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind] HRESULT padding([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind] HRESULT padding([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind] HRESULT border([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind] HRESULT border([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind] HRESULT borderTop([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind] HRESULT borderTop([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind] HRESULT borderRight([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind] HRESULT borderRight([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind] HRESULT borderBottom([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind] HRESULT borderBottom([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind] HRESULT borderLeft([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind] HRESULT borderLeft([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind] HRESULT borderColor([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind] HRESULT borderColor([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind] HRESULT borderTopColor([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind] HRESULT borderTopColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind] HRESULT borderRightColor([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind] HRESULT borderRightColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind] HRESULT borderBottomColor([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind] HRESULT borderBottomColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind] HRESULT borderLeftColor([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind] HRESULT borderLeftColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind] HRESULT borderWidth([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind] HRESULT borderWidth([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind] HRESULT borderTopWidth([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind] HRESULT borderTopWidth([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind] HRESULT borderRightWidth([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind] HRESULT borderRightWidth([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind] HRESULT borderBottomWidth([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind] HRESULT borderBottomWidth([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind] HRESULT borderLeftWidth([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind] HRESULT borderLeftWidth([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind] HRESULT borderStyle([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind] HRESULT borderStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind] HRESULT borderTopStyle([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind] HRESULT borderTopStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind] HRESULT borderRightStyle([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind] HRESULT borderRightStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind] HRESULT borderBottomStyle([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind] HRESULT borderBottomStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind] HRESULT borderLeftStyle([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind] HRESULT borderLeftStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind] HRESULT width([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind] HRESULT width([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind] HRESULT height([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind] HRESULT height([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind] HRESULT styleFloat([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind] HRESULT styleFloat([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind] HRESULT clear([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind] HRESULT clear([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind] HRESULT display([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind] HRESULT display([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind] HRESULT visibility([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind] HRESULT visibility([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind] HRESULT listStyleType([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind] HRESULT listStyleType([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind] HRESULT listStylePosition([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind] HRESULT listStylePosition([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind] HRESULT listStyleImage([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind] HRESULT listStyleImage([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind] HRESULT listStyle([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind] HRESULT listStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind] HRESULT whiteSpace([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind] HRESULT whiteSpace([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind] HRESULT top([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind] HRESULT top([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind] HRESULT left([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind] HRESULT left([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLRULESTYLE_POSITION), bindable, displaybind] HRESULT position([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind] HRESULT zIndex([in] VARIANT v); [propget, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind] HRESULT zIndex([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind] HRESULT overflow([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind] HRESULT overflow([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind] HRESULT pageBreakBefore([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind] HRESULT pageBreakBefore([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind] HRESULT pageBreakAfter([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind] HRESULT pageBreakAfter([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind] HRESULT cssText([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind] HRESULT cssText([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind] HRESULT cursor([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind] HRESULT cursor([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind] HRESULT clip([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind] HRESULT clip([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind] HRESULT filter([in] BSTR v); [propget, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind] HRESULT filter([retval, out] BSTR *p); [id(DISPID_IHTMLRULESTYLE_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR strAttributeName, [in] VARIANT AttributeValue, [defaultvalue(1), in] LONG lFlags); [id(DISPID_IHTMLRULESTYLE_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR strAttributeName, [defaultvalue(0), in] LONG lFlags, [retval, out] VARIANT *AttributeValue); [id(DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR strAttributeName, [defaultvalue(1), in] LONG lFlags, [retval, out] VARIANT_BOOL *pfSuccess); } /***************************************************************************** * DispHTMLStyle dispinterface */ [ hidden, uuid(3050f55a-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLStyle { properties: methods: [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable] void fontFamily(BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable] BSTR fontFamily(); [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable] void fontStyle(BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable] BSTR fontStyle(); [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable] void fontVariant(BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable] BSTR fontVariant(); [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable] void fontWeight(BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable] BSTR fontWeight(); [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable] void fontSize(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable] VARIANT fontSize(); [propput, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable] void font(BSTR v); [propget, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable] BSTR font(); [propput, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable] void color(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable] VARIANT color(); [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable] void background(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable] BSTR background(); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable] void backgroundColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable] VARIANT backgroundColor(); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable] void backgroundImage(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable] BSTR backgroundImage(); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable] void backgroundRepeat(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable] BSTR backgroundRepeat(); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable] void backgroundAttachment(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable] BSTR backgroundAttachment(); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable] void backgroundPosition(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable] BSTR backgroundPosition(); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable] void backgroundPositionX(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable] VARIANT backgroundPositionX(); [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable] void backgroundPositionY(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable] VARIANT backgroundPositionY(); [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable] void wordSpacing(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable] VARIANT wordSpacing(); [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable] void letterSpacing(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable] VARIANT letterSpacing(); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable] void textDecoration(BSTR v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable] BSTR textDecoration(); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable] void textDecorationNone(VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable] VARIANT_BOOL textDecorationNone(); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable] void textDecorationUnderline(VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable] VARIANT_BOOL textDecorationUnderline(); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable] void textDecorationOverline(VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable] VARIANT_BOOL textDecorationOverline(); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable] void textDecorationLineThrough(VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable] VARIANT_BOOL textDecorationLineThrough(); [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable] void textDecorationBlink(VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable] VARIANT_BOOL textDecorationBlink(); [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable] void verticalAlign(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable] VARIANT verticalAlign(); [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable] void textTransform(BSTR v); [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable] BSTR textTransform(); [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable] void textAlign(BSTR v); [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable] BSTR textAlign(); [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable] void textIndent(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable] VARIANT textIndent(); [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable] void lineHeight(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable] VARIANT lineHeight(); [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable] void marginTop(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable] VARIANT marginTop(); [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable] void marginRight(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable] VARIANT marginRight(); [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable] void marginBottom(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable] VARIANT marginBottom(); [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable] void marginLeft(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable] VARIANT marginLeft(); [propput, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable] void margin(BSTR v); [propget, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable] BSTR margin(); [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable] void paddingTop(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable] VARIANT paddingTop(); [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable] void paddingRight(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable] VARIANT paddingRight(); [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable] void paddingBottom(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable] VARIANT paddingBottom(); [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable] void paddingLeft(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable] VARIANT paddingLeft(); [propput, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable] void padding(BSTR v); [propget, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable] BSTR padding(); [propput, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable] void border(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable] BSTR border(); [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable] void borderTop(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable] BSTR borderTop(); [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable] void borderRight(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable] BSTR borderRight(); [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable] void borderBottom(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable] BSTR borderBottom(); [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable] void borderLeft(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable] BSTR borderLeft(); [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable] void borderColor(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable] BSTR borderColor(); [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable] void borderTopColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable] VARIANT borderTopColor(); [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable] void borderRightColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable] VARIANT borderRightColor(); [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable] void borderBottomColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable] VARIANT borderBottomColor(); [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable] void borderLeftColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable] VARIANT borderLeftColor(); [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable] void borderWidth(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable] BSTR borderWidth(); [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable] void borderTopWidth(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable] VARIANT borderTopWidth(); [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable] void borderRightWidth(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable] VARIANT borderRightWidth(); [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable] void borderBottomWidth(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable] VARIANT borderBottomWidth(); [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable] void borderLeftWidth(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable] VARIANT borderLeftWidth(); [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable] void borderStyle(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable] BSTR borderStyle(); [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable] void borderTopStyle(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable] BSTR borderTopStyle(); [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable] void borderRightStyle(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable] BSTR borderRightStyle(); [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable] void borderBottomStyle(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable] BSTR borderBottomStyle(); [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable] void borderLeftStyle(BSTR v); [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable] BSTR borderLeftStyle(); [propput, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable] void width(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable] VARIANT width(); [propput, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable] void height(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable] VARIANT height(); [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable] void styleFloat(BSTR v); [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable] BSTR styleFloat(); [propput, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable] void clear(BSTR v); [propget, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable] BSTR clear(); [propput, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable] void display(BSTR v); [propget, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable] BSTR display(); [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable] void visibility(BSTR v); [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable] BSTR visibility(); [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable] void listStyleType(BSTR v); [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable] BSTR listStyleType(); [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable] void listStylePosition(BSTR v); [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable] BSTR listStylePosition(); [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable] void listStyleImage(BSTR v); [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable] BSTR listStyleImage(); [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable] void listStyle(BSTR v); [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable] BSTR listStyle(); [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable] void whiteSpace(BSTR v); [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable] BSTR whiteSpace(); [propput, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable] void top(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable] VARIANT top(); [propput, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable] void left(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable] VARIANT left(); [propput, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable] void zIndex(VARIANT v); [propget, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable] VARIANT zIndex(); [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable] void overflow(BSTR v); [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable] BSTR overflow(); [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable] void pageBreakBefore(BSTR v); [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable] BSTR pageBreakBefore(); [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable] void pageBreakAfter(BSTR v); [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable] BSTR pageBreakAfter(); [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable] void cssText(BSTR v); [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable] BSTR cssText(); [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden] void pixelTop(LONG v); [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden] LONG pixelTop(); [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden] void pixelLeft(LONG v); [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden] LONG pixelLeft(); [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden] void pixelWidth(LONG v); [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden] LONG pixelWidth(); [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden] void pixelHeight(LONG v); [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden] LONG pixelHeight(); [propput, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable] void posTop(float v); [propget, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable] float posTop(); [propput, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable] void posLeft(float v); [propget, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable] float posLeft(); [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable] void posWidth(float v); [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable] float posWidth(); [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable] void posHeight(float v); [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable] float posHeight(); [propput, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable] void cursor(BSTR v); [propget, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable] BSTR cursor(); [propput, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable] void clip(BSTR v); [propget, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable] BSTR clip(); [propput, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable] void filter(BSTR v); [propget, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable] BSTR filter(); [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)] void setAttribute( [in] BSTR strAttributeName, [in] VARIANT AttributeValue, [in, defaultvalue(1)] LONG lFlags); [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)] VARIANT getAttribute( [in] BSTR strAttributeName, [in, defaultvalue(0)] LONG lFlags); [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)] VARIANT_BOOL removeAttribute( [in] BSTR strAttributeName, [in, defaultvalue(1)] LONG lFlags); [id(DISPID_IHTMLSTYLE_TOSTRING)] BSTR toString(); [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable] void tableLayout(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable] BSTR tableLayout(); [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable] void borderCollapse(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable] BSTR borderCollapse(); [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable] void direction(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable] BSTR direction(); [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable] void behavior(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable] BSTR behavior(); [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)] void setExpression( [in] BSTR propname, [in] BSTR expression, [in, defaultvalue("")] BSTR language); [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)] VARIANT getExpression([in] BSTR propname); [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)] VARIANT_BOOL removeExpression([in] BSTR propname); [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable] void position(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable] BSTR position(); [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable] void unicodeBidi(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable] BSTR unicodeBidi(); [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable] void bottom(VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable] VARIANT bottom(); [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable] void right(VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable] VARIANT right(); [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden] void pixelBottom(LONG v); [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden] LONG pixelBottom(); [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden] void pixelRight(LONG v); [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden] LONG pixelRight(); [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable] void posBottom(float v); [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable] float posBottom(); [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable] void posRight(float v); [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable] float posRight(); [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable] void imeMode(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable] BSTR imeMode(); [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable] void rubyAlign(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable] BSTR rubyAlign(); [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable] void rubyPosition(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable] BSTR rubyPosition(); [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable] void rubyOverhang(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable] BSTR rubyOverhang(); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable] void layoutGridChar(VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable] VARIANT layoutGridChar(); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable] void layoutGridLine(VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable] VARIANT layoutGridLine(); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable] void layoutGridMode(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable] BSTR layoutGridMode(); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable] void layoutGridType(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable] BSTR layoutGridType(); [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable] void layoutGrid(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable] BSTR layoutGrid(); [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable] void wordBreak(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable] BSTR wordBreak(); [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable] void lineBreak(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable] BSTR lineBreak(); [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable] void textJustify(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable] BSTR textJustify(); [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable] void textJustifyTrim(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable] BSTR textJustifyTrim(); [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable] void textKashida(VARIANT v); [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable] VARIANT textKashida(); [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable] void textAutospace(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable] BSTR textAutospace(); [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable] void overflowX(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable] BSTR overflowX(); [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable] void overflowY(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable] BSTR overflowY(); [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable] void accelerator(BSTR v); [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable] BSTR accelerator(); [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable] void layoutFlow(BSTR v); [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable] BSTR layoutFlow(); [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable] void zoom(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable] VARIANT zoom(); [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable] void wordWrap(BSTR v); [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable] BSTR wordWrap(); [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable] void textUnderlinePosition(BSTR v); [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable] BSTR textUnderlinePosition(); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable] void scrollbarBaseColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable] VARIANT scrollbarBaseColor(); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable] void scrollbarFaceColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable] VARIANT scrollbarFaceColor(); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] void scrollbar3dLightColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] VARIANT scrollbar3dLightColor(); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable] void scrollbarShadowColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable] VARIANT scrollbarShadowColor(); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] void scrollbarHighlightColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] VARIANT scrollbarHighlightColor(); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] void scrollbarDarkShadowColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] VARIANT scrollbarDarkShadowColor(); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable] void scrollbarArrowColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable] VARIANT scrollbarArrowColor(); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable] void scrollbarTrackColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable] VARIANT scrollbarTrackColor(); [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable] void writingMode(BSTR v); [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable] BSTR writingMode(); [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable] void textAlignLast(BSTR v); [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable] BSTR textAlignLast(); [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable] void textKashidaSpace(VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable] VARIANT textKashidaSpace(); [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable] void textOverflow(BSTR v); [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable] BSTR textOverflow(); [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable] void minHeight(VARIANT v); [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable] VARIANT minHeight(); [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable] void msInterpolationMode(BSTR v); [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable] BSTR msInterpolationMode(); [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable] void maxHeight(VARIANT v); [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable] VARIANT maxHeight(); [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable] void minWidth(VARIANT v); [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable] VARIANT minWidth(); [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable] void maxWidth(VARIANT v); [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable] VARIANT maxWidth(); [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable] void content(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable] BSTR content(); [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable] void captionSide(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable] BSTR captionSide(); [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable] void counterIncrement(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable] BSTR counterIncrement(); [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable] void counterReset(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable] BSTR counterReset(); [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable] void outline(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable] BSTR outline(); [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable] void outlineWidth(VARIANT v); [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable] VARIANT outlineWidth(); [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable] void outlineStyle(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable] BSTR outlineStyle(); [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable] void outlineColor(VARIANT v); [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable] VARIANT outlineColor(); [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable] void boxSizing(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable] BSTR boxSizing(); [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable] void borderSpacing(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable] BSTR borderSpacing(); [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable] void orphans(VARIANT v); [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable] VARIANT orphans(); [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable] void widows(VARIANT v); [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable] VARIANT widows(); [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable] void pageBreakInside(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable] BSTR pageBreakInside(); [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable] void emptyCells(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable] BSTR emptyCells(); [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable] void msBlockProgression(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable] BSTR msBlockProgression(); [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable] void quotes(BSTR v); [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable] BSTR quotes(); [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] IDispatch *constructor(); } [ odl, oleautomation, dual, uuid(3050f656-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyle3 : IDispatch { [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable] HRESULT layoutFlow([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable] HRESULT layoutFlow([retval, out] BSTR * p); [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable] HRESULT zoom([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable] HRESULT zoom([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable] HRESULT wordWrap([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable] HRESULT wordWrap([retval, out] BSTR * p); [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable] HRESULT textUnderlinePosition([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable] HRESULT textUnderlinePosition([retval, out] BSTR * p); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable] HRESULT scrollbarBaseColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable] HRESULT scrollbarBaseColor([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable] HRESULT scrollbarFaceColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable] HRESULT scrollbarFaceColor([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] HRESULT scrollbar3dLightColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] HRESULT scrollbar3dLightColor([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarShadowColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarShadowColor([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] HRESULT scrollbarHighlightColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] HRESULT scrollbarHighlightColor([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarDarkShadowColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable] HRESULT scrollbarArrowColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable] HRESULT scrollbarArrowColor([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable] HRESULT scrollbarTrackColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable] HRESULT scrollbarTrackColor([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable] HRESULT writingMode([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable] HRESULT writingMode([retval, out] BSTR * p); [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable] HRESULT textAlignLast([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable] HRESULT textAlignLast([retval, out] BSTR * p); [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable] HRESULT textKashidaSpace([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable] HRESULT textKashidaSpace([retval, out] VARIANT * p); } /***************************************************************************** * IHTMLSytyle4 interface */ [ odl, oleautomation, dual, uuid(3050f816-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyle4 : IDispatch { [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable] HRESULT textOverflow([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable] HRESULT textOverflow([retval, out] BSTR * p); [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable] HRESULT minHeight([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable] HRESULT minHeight([retval, out] VARIANT * p); } /***************************************************************************** * IHTMLSytyle5 interface */ [ odl, oleautomation, dual, uuid(3050f33a-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyle5 : IDispatch { [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable] HRESULT msInterpolationMode([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable] HRESULT msInterpolationMode([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable] HRESULT maxHeight([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable] HRESULT maxHeight([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable] HRESULT minWidth([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable] HRESULT minWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable] HRESULT maxWidth([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable] HRESULT maxWidth([out, retval] VARIANT *p); } /***************************************************************************** * IHTMLSytyle6 interface */ [ odl, oleautomation, dual, uuid(30510480-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyle6 : IDispatch { [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable] HRESULT content([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable] HRESULT content([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable] HRESULT captionSide([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable] HRESULT captionSide([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable] HRESULT counterIncrement([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable] HRESULT counterIncrement([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable] HRESULT counterReset([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable] HRESULT counterReset([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable] HRESULT outline([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable] HRESULT outline([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable] HRESULT outlineWidth([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable] HRESULT outlineWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable] HRESULT outlineStyle([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable] HRESULT outlineStyle([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable] HRESULT outlineColor([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable] HRESULT outlineColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable] HRESULT boxSizing([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable] HRESULT boxSizing([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable] HRESULT borderSpacing([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable] HRESULT borderSpacing([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable] HRESULT orphans([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable] HRESULT orphans([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable] HRESULT widows([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable] HRESULT widows([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable] HRESULT pageBreakInside([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable] HRESULT pageBreakInside([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable] HRESULT emptyCells([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable] HRESULT emptyCells([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable] HRESULT msBlockProgression([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable] HRESULT msBlockProgression([out, retval] BSTR *p); [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable] HRESULT quotes([in] BSTR v); [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable] HRESULT quotes([out, retval] BSTR *p); } [ noncreatable, uuid(3050f285-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLStyle { [default] dispinterface DispHTMLStyle; interface IHTMLStyle; interface IHTMLStyle2; interface IHTMLStyle3; interface IHTMLStyle4; interface IHTMLStyle5; interface IHTMLStyle6; } /***************************************************************************** * IHTMLRenderStyle interface */ [ odl, oleautomation, dual, uuid(3050f6ae-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLRenderStyle : IDispatch { [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable] HRESULT textLineThroughStyle([in] BSTR v); [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable] HRESULT textLineThroughStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable] HRESULT textUnderlineStyle([in] BSTR v); [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable] HRESULT textUnderlineStyle([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable] HRESULT textEffect([in] BSTR v); [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable] HRESULT textEffect([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable] HRESULT textColor([in] VARIANT v); [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable] HRESULT textColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable] HRESULT textBackgroundColor([in] VARIANT v); [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable] HRESULT textBackgroundColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable] HRESULT textDecorationColor([in] VARIANT v); [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable] HRESULT textDecorationColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable] HRESULT renderingPriority([in] LONG v); [propget, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable] HRESULT renderingPriority([retval, out] LONG *p); [propput, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable] HRESULT defaultTextSelection([in] BSTR v); [propget, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable] HRESULT defaultTextSelection([retval, out] BSTR *p); [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable] HRESULT textDecoration([in] BSTR v); [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable] HRESULT textDecoration([retval, out] BSTR *p); } /***************************************************************************** * IHTMLCurrentStyle interface */ [ odl, oleautomation, dual, uuid(3050f3db-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLCurrentStyle : IDispatch { [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable] HRESULT position([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable] HRESULT styleFloat([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable] HRESULT color([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable] HRESULT backgroundColor([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable] HRESULT fontFamily([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable] HRESULT fontStyle([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden] HRESULT fontVariant([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable] HRESULT fontWeight([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable] HRESULT fontSize([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable] HRESULT backgroundImage([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable] HRESULT backgroundPositionX([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable] HRESULT backgroundPositionY([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable] HRESULT backgroundRepeat([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable] HRESULT borderLeftColor([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable] HRESULT borderTopColor([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable] HRESULT borderRightColor([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable] HRESULT borderBottomColor([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable] HRESULT borderTopStyle([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable] HRESULT borderRightStyle([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable] HRESULT borderBottomStyle([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable] HRESULT borderLeftStyle([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable] HRESULT borderTopWidth([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable] HRESULT borderRightWidth([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable] HRESULT borderBottomWidth([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable] HRESULT borderLeftWidth([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable] HRESULT left([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable] HRESULT top([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable] HRESULT width([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable] HRESULT height([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable] HRESULT paddingLeft([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable] HRESULT paddingTop([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable] HRESULT paddingRight([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable] HRESULT paddingBottom([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable] HRESULT textAlign([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable] HRESULT textDecoration([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable] HRESULT display([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable] HRESULT visibility([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable] HRESULT zIndex([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable] HRESULT letterSpacing([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable] HRESULT lineHeight([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable] HRESULT textIndent([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable] HRESULT verticalAlign([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable] HRESULT backgroundAttachment([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable] HRESULT marginTop([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable] HRESULT marginRight([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable] HRESULT marginBottom([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable] HRESULT marginLeft([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable] HRESULT clear([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable] HRESULT listStyleType([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable] HRESULT listStylePosition([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable] HRESULT listStyleImage([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable] HRESULT clipTop([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable] HRESULT clipRight([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable] HRESULT clipBottom([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable] HRESULT clipLeft([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable] HRESULT overflow([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable] HRESULT pageBreakBefore([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable] HRESULT pageBreakAfter([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable] HRESULT cursor([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable] HRESULT tableLayout([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable] HRESULT borderCollapse([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable] HRESULT direction([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable] HRESULT behavior([retval, out] BSTR *p); [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR strAttributeName, [defaultvalue(0), in] LONG lFlags, [retval, out] VARIANT *AttributeValue); [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable] HRESULT unicodeBidi([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable] HRESULT right([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable] HRESULT bottom([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable] HRESULT imeMode([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable] HRESULT rubyAlign([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable] HRESULT rubyPosition([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable] HRESULT rubyOverhang([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable] HRESULT textAutospace([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable] HRESULT lineBreak([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable] HRESULT wordBreak([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable] HRESULT textJustify([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable] HRESULT textJustifyTrim([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable] HRESULT textKashida([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable] HRESULT blockDirection([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable] HRESULT layoutGridChar([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable] HRESULT layoutGridLine([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable] HRESULT layoutGridMode([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable] HRESULT layoutGridType([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable] HRESULT borderStyle([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable] HRESULT borderColor([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable] HRESULT borderWidth([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable] HRESULT padding([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable] HRESULT margin([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable] HRESULT accelerator([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable] HRESULT overflowX([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable] HRESULT overflowY([retval, out] BSTR *p); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable] HRESULT textTransform([retval, out] BSTR *p); } /***************************************************************************** * IHTMLCurrentStyle2 interface */ [ odl, oleautomation, dual, uuid(3050f658-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLCurrentStyle2 : IDispatch { [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable] HRESULT layoutFlow([retval, out] BSTR * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable] HRESULT wordWrap([retval, out] BSTR * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable] HRESULT textUnderlinePosition([retval, out] BSTR * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable] HRESULT hasLayout([retval, out] VARIANT_BOOL * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable] HRESULT scrollbarBaseColor([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable] HRESULT scrollbarFaceColor([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] HRESULT scrollbar3dLightColor([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarShadowColor([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] HRESULT scrollbarHighlightColor([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable] HRESULT scrollbarArrowColor([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable] HRESULT scrollbarTrackColor([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable] HRESULT writingMode([retval, out] BSTR * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable] HRESULT zoom([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable] HRESULT filter([retval, out] BSTR * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable] HRESULT textAlignLast([retval, out] BSTR * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable] HRESULT textKashidaSpace([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable] HRESULT isBlock([retval, out] VARIANT_BOOL * p); } /***************************************************************************** * IHTMLCurrentStyle3 interface */ [ odl, oleautomation, dual, uuid(3050f818-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLCurrentStyle3 : IDispatch { [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable] HRESULT textOverflow([retval, out] BSTR * p); [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable] HRESULT minHeight([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable] HRESULT wordSpacing([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable] HRESULT whiteSpace([retval, out] BSTR * p); } /***************************************************************************** * IHTMLCurrentStyle4 interface */ [ odl, oleautomation, dual, uuid(3050f33b-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLCurrentStyle4 : IDispatch { [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable] HRESULT msInterpolationMode([retval, out] BSTR * p); [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable] HRESULT maxHeight([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable] HRESULT minWidth([retval, out] VARIANT * p); [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable] HRESULT maxWidth([retval, out] VARIANT * p); } /***************************************************************************** * DispHTMLCurrentStyle dispinterface */ [ hidden, uuid(3050f557-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLCurrentStyle { properties: methods: [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable] BSTR position(); [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable] BSTR styleFloat(); [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable] VARIANT color(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable] VARIANT backgroundColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable] BSTR fontFamily(); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable] BSTR fontStyle(); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden] BSTR fontVariant(); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable] VARIANT fontWeight(); [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable] VARIANT fontSize(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable] BSTR backgroundImage(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable] VARIANT backgroundPositionX(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable] VARIANT backgroundPositionY(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable] BSTR backgroundRepeat(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable] VARIANT borderLeftColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable] VARIANT borderTopColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable] VARIANT borderRightColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable] VARIANT borderBottomColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable] BSTR borderTopStyle(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable] BSTR borderRightStyle(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable] BSTR borderBottomStyle(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable] BSTR borderLeftStyle(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable] VARIANT borderTopWidth(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable] VARIANT borderRightWidth(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable] VARIANT borderBottomWidth(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable] VARIANT borderLeftWidth(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable] VARIANT left(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable] VARIANT top(); [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable] VARIANT width(); [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable] VARIANT height(); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable] VARIANT paddingLeft(); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable] VARIANT paddingTop(); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable] VARIANT paddingRight(); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable] VARIANT paddingBottom(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable] BSTR textAlign(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable] BSTR textDecoration(); [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable] BSTR display(); [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable] BSTR visibility(); [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable] VARIANT zIndex(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable] VARIANT letterSpacing(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable] VARIANT lineHeight(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable] VARIANT textIndent(); [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable] VARIANT verticalAlign(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable] BSTR backgroundAttachment(); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable] VARIANT marginTop(); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable] VARIANT marginRight(); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable] VARIANT marginBottom(); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable] VARIANT marginLeft(); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable] BSTR clear(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable] BSTR listStyleType(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable] BSTR listStylePosition(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable] BSTR listStyleImage(); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable] VARIANT clipTop(); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable] VARIANT clipRight(); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable] VARIANT clipBottom(); [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable] VARIANT clipLeft(); [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable] BSTR overflow(); [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable] BSTR pageBreakBefore(); [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable] BSTR pageBreakAfter(); [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable] BSTR cursor(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable] BSTR tableLayout(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable] BSTR borderCollapse(); [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable] BSTR direction(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable] BSTR behavior(); [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)] VARIANT getAttribute( [in] BSTR strAttributeName, [in, defaultvalue(0)] LONG lFlags); [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable] BSTR unicodeBidi(); [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable] VARIANT right(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable] VARIANT bottom(); [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable] BSTR imeMode(); [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable] BSTR rubyAlign(); [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable] BSTR rubyPosition(); [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable] BSTR rubyOverhang(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable] BSTR textAutospace(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable] BSTR lineBreak(); [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable] BSTR wordBreak(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable] BSTR textJustify(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable] BSTR textJustifyTrim(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable] VARIANT textKashida(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable] BSTR blockDirection(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable] VARIANT layoutGridChar(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable] VARIANT layoutGridLine(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable] BSTR layoutGridMode(); [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable] BSTR layoutGridType(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable] BSTR borderStyle(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable] BSTR borderColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable] BSTR borderWidth(); [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable] BSTR padding(); [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable] BSTR margin(); [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable] BSTR accelerator(); [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable] BSTR overflowX(); [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable] BSTR overflowY(); [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable] BSTR textTransform(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable] BSTR layoutFlow(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable] BSTR wordWrap(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable] BSTR textUnderlinePosition(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable] VARIANT_BOOL hasLayout(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable] VARIANT scrollbarBaseColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable] VARIANT scrollbarFaceColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable] VARIANT scrollbar3dLightColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable] VARIANT scrollbarShadowColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable] VARIANT scrollbarHighlightColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable] VARIANT scrollbarDarkShadowColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable] VARIANT scrollbarArrowColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable] VARIANT scrollbarTrackColor(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable] BSTR writingMode(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable] VARIANT zoom(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable] BSTR filter(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable] BSTR textAlignLast(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable] VARIANT textKashidaSpace(); [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable] VARIANT_BOOL isBlock(); [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable] BSTR textOverflow(); [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable] VARIANT minHeight(); [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable] VARIANT wordSpacing(); [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable] BSTR whiteSpace(); [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable] BSTR msInterpolationMode(); [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable] VARIANT maxHeight(); [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable] VARIANT minWidth(); [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable] VARIANT maxWidth(); } [ noncreatable, uuid(3050f3dc-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLCurrentStyle { [default] dispinterface DispHTMLCurrentStyle; interface IHTMLCurrentStyle; interface IHTMLCurrentStyle2; interface IHTMLCurrentStyle3; interface IHTMLCurrentStyle4; } /***************************************************************************** * IHTMLRect interface */ [ odl, oleautomation, dual, uuid(3050f4a3-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLRect : IDispatch { [propput, id(DISPID_IHTMLRECT_LEFT)] HRESULT left([in] LONG v); [propget, id(DISPID_IHTMLRECT_LEFT)] HRESULT left([retval, out] LONG *p); [propput, id(DISPID_IHTMLRECT_TOP)] HRESULT top([in] LONG v); [propget, id(DISPID_IHTMLRECT_TOP)] HRESULT top([retval, out] LONG *p); [propput, id(DISPID_IHTMLRECT_RIGHT)] HRESULT right([in] LONG v); [propget, id(DISPID_IHTMLRECT_RIGHT)] HRESULT right([retval, out] LONG *p); [propput, id(DISPID_IHTMLRECT_BOTTOM)] HRESULT bottom([in] LONG v); [propget, id(DISPID_IHTMLRECT_BOTTOM)] HRESULT bottom([retval, out] LONG *p); } /***************************************************************************** * IHTMLRectCollection interface */ [ odl, oleautomation, dual, uuid(3050f4a4-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLRectCollection : IDispatch { [propget, id(DISPID_IHTMLRECTCOLLECTION_LENGTH)] HRESULT length([retval, out] LONG *p); [propget, id(DISPID_IHTMLRECTCOLLECTION__NEWENUM), hidden, restricted] HRESULT _newEnum([retval, out] IUnknown **p); [id(DISPID_IHTMLRECTCOLLECTION_ITEM)] HRESULT item( [in] VARIANT *pvarIndex, [retval, out] VARIANT *pvarResult); } /***************************************************************************** * IHTMLDOMNode interface */ [ odl, oleautomation, dual, uuid(3050f5da-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMNode : IDispatch { [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] HRESULT nodeType([retval, out] LONG *p); [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] HRESULT parentNode([retval, out] IHTMLDOMNode **p); [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren); [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] HRESULT childNodes([retval, out] IDispatch **p); [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] HRESULT attributes([retval, out] IDispatch **p); [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] HRESULT insertBefore( [in] IHTMLDOMNode *newChild, [optional, in] VARIANT refChild, [retval, out] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] HRESULT removeChild( [in] IHTMLDOMNode *oldChild, [retval, out] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] HRESULT replaceChild( [in] IHTMLDOMNode *newChild, [in] IHTMLDOMNode *oldChild, [retval, out] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMNODE_CLONENODE)] HRESULT cloneNode( [in] VARIANT_BOOL fDeep, [retval, out] IHTMLDOMNode **clonedNode); [id(DISPID_IHTMLDOMNODE_REMOVENODE)] HRESULT removeNode( [defaultvalue(0), in] VARIANT_BOOL fDeep, [retval, out] IHTMLDOMNode **removed); [id(DISPID_IHTMLDOMNODE_SWAPNODE)] HRESULT swapNode( [in] IHTMLDOMNode *otherNode, [retval, out] IHTMLDOMNode **swappedNode); [id(DISPID_IHTMLDOMNODE_REPLACENODE)] HRESULT replaceNode( [in] IHTMLDOMNode *replacement, [retval, out] IHTMLDOMNode **replaced); [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] HRESULT appendChild( [in] IHTMLDOMNode *newChild, [retval, out] IHTMLDOMNode **node); [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] HRESULT nodeName([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] HRESULT nodeValue([in] VARIANT v); [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] HRESULT nodeValue([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] HRESULT firstChild([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] HRESULT lastChild([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] HRESULT previousSibling([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] HRESULT nextSibling([retval, out] IHTMLDOMNode **p); } #define WINE_IHTMLDOMNODE_DISPINTERFACE_DECL \ [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] \ LONG nodeType(); \ \ [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] \ IHTMLDOMNode* parentNode(); \ \ [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] \ VARIANT_BOOL hasChildNodes(); \ \ [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] \ IDispatch* childNodes(); \ \ [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] \ IDispatch* attributes(); \ \ [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] \ IHTMLDOMNode* insertBefore( \ [in] IHTMLDOMNode* newChild, \ [optional, in] VARIANT refChild); \ \ [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] \ IHTMLDOMNode* removeChild([in] IHTMLDOMNode* oldChild); \ \ [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] \ IHTMLDOMNode* replaceChild( \ [in] IHTMLDOMNode* newChild, \ [in] IHTMLDOMNode* oldChild); \ \ [id(DISPID_IHTMLDOMNODE_CLONENODE)] \ IHTMLDOMNode* cloneNode([in] VARIANT_BOOL fDeep); \ \ [id(DISPID_IHTMLDOMNODE_REMOVENODE)] \ IHTMLDOMNode* removeNode([defaultvalue(0), in] VARIANT_BOOL fDeep); \ \ [id(DISPID_IHTMLDOMNODE_SWAPNODE)] \ IHTMLDOMNode* swapNode([in] IHTMLDOMNode* otherNode); \ \ [id(DISPID_IHTMLDOMNODE_REPLACENODE)] \ IHTMLDOMNode* replaceNode([in] IHTMLDOMNode* replacement); \ \ [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] \ IHTMLDOMNode* appendChild([in] IHTMLDOMNode* newChild); \ \ [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] \ BSTR nodeName(); \ \ [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] \ void nodeValue(VARIANT v); \ \ [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] \ VARIANT nodeValue(); \ \ [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] \ IHTMLDOMNode* firstChild(); \ \ [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] \ IHTMLDOMNode* lastChild(); \ \ [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] \ IHTMLDOMNode* previousSibling(); \ \ [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] \ IHTMLDOMNode* nextSibling() /***************************************************************************** * IHTMLDOMNode2 interface */ [ odl, oleautomation, dual, uuid(3050f80b-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMNode2 : IDispatch { [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] HRESULT ownerDocument([retval, out] IDispatch **p); } #define WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL \ [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] \ IDispatch *ownerDocument() #define WINE_HTMLDOMNODE_DISPINTERFACE_DECL \ WINE_IHTMLDOMNODE_DISPINTERFACE_DECL; \ WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL /***************************************************************************** * IHTMLDOMNode3 interface */ [ odl, oleautomation, dual, uuid(305106e0-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMNode3 : IDispatch { [propput, id(DISPID_IHTMLDOMNODE3_PREFIX)] HRESULT prefix([in] VARIANT v); [propget, id(DISPID_IHTMLDOMNODE3_PREFIX)] HRESULT prefix([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLDOMNODE3_LOCALNAME)] HRESULT localName([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLDOMNODE3_NAMESPACEURI)] HRESULT namespaceURI([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOMNODE3_TEXTCONTENT)] HRESULT textContent([in] VARIANT v); [propget, id(DISPID_IHTMLDOMNODE3_TEXTCONTENT)] HRESULT textContent([out, retval] VARIANT *p); [id(DISPID_IHTMLDOMNODE3_ISEQUALNODE)] HRESULT isEqualNode( [in] IHTMLDOMNode3 *otherNode, [out, retval] VARIANT_BOOL *isEqual); [id(DISPID_IHTMLDOMNODE3_LOOKUPNAMESPACEURI)] HRESULT lookupNamespaceURI( [in] VARIANT *pvarPrefix, [out, retval] VARIANT *pvarNamespaceURI); [id(DISPID_IHTMLDOMNODE3_LOOKUPPREFIX)] HRESULT lookupPrefix( [in] VARIANT *pvarNamespaceURI, [out, retval] VARIANT *pvarPrefix); [id(DISPID_IHTMLDOMNODE3_ISDEFAULTNAMESPACE)] HRESULT isDefaultNamespace( [in] VARIANT *pvarNamespace, [out, retval] VARIANT_BOOL *pfDefaultNamespace); [id(DISPID_IHTMLDOMNODE3_IE9_APPENDCHILD)] HRESULT appendChild( [in] IHTMLDOMNode *newChild, [out, retval] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMNODE3_IE9_INSERTBEFORE)] HRESULT insertBefore( [in] IHTMLDOMNode *newChild, [in, optional] VARIANT refChild, [out, retval] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMNODE3_IE9_REMOVECHILD)] HRESULT removeChild( [in] IHTMLDOMNode *oldChild, [out, retval] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMNODE3_IE9_REPLACECHILD)] HRESULT replaceChild( [in] IHTMLDOMNode *newChild, [in] IHTMLDOMNode *oldChild, [out, retval] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMNODE3_ISSAMENODE)] HRESULT isSameNode( [in] IHTMLDOMNode3 *otherNode, [out, retval] VARIANT_BOOL *isSame); [id(DISPID_IHTMLDOMNODE3_COMPAREDOCUMENTPOSITION)] HRESULT compareDocumentPosition( [in] IHTMLDOMNode *otherNode, [out, retval] USHORT *flags); [id(DISPID_IHTMLDOMNODE3_ISSUPPORTED)] HRESULT isSupported( [in] BSTR feature, [in] VARIANT version, [out, retval] VARIANT_BOOL *pfisSupported); } /***************************************************************************** * IHTMLDOMAttribute interface */ [ odl, oleautomation, dual, uuid(3050f4b0-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMAttribute : IDispatch { [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)] HRESULT nodeName([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)] HRESULT nodeValue([in] VARIANT v); [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)] HRESULT nodeValue([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)] HRESULT specified([retval, out] VARIANT_BOOL *p); } /***************************************************************************** * IHTMLDOMAttribute2 interface */ [ odl, oleautomation, dual, uuid(3050f810-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMAttribute2 : IDispatch { [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)] HRESULT value([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)] HRESULT expando([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)] HRESULT nodeType([retval, out] long *p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)] HRESULT parentNode([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)] HRESULT childNodes([retval, out] IDispatch **p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)] HRESULT firstChild([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)] HRESULT lastChild([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)] HRESULT previousSibling([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)] HRESULT nextSibling([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)] HRESULT attributes([retval, out] IDispatch **p); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)] HRESULT ownerDocument([retval, out] IDispatch **p); [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)] HRESULT insertBefore( [in] IHTMLDOMNode *newChild, [optional, in] VARIANT refChild, [retval, out] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)] HRESULT replaceChild( [in] IHTMLDOMNode *newChild, [in] IHTMLDOMNode *oldChild, [retval, out] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)] HRESULT removeChild( [in] IHTMLDOMNode *oldChild, [retval, out] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)] HRESULT appendChild( [in] IHTMLDOMNode *newChild, [retval, out] IHTMLDOMNode **node); [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)] HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren); [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)] HRESULT cloneNode( [in] VARIANT_BOOL fDeep, [retval, out] IHTMLDOMAttribute **clonedNode); } /***************************************************************************** * IHTMLDOMTextNode interface */ [ odl, oleautomation, dual, uuid(3050f4b1-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMTextNode : IDispatch { [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)] HRESULT data([in] BSTR v); [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)] HRESULT data([out, retval] BSTR *p); [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)] HRESULT toString([out, retval] BSTR *String); [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)] HRESULT length([out, retval] LONG *p); [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)] HRESULT splitText( [in] LONG offset, [out, retval] IHTMLDOMNode **pRetNode); } /***************************************************************************** * IHTMLDOMTextNode2 interface */ [ odl, oleautomation, dual, uuid(3050f809-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMTextNode2 : IDispatch { [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)] HRESULT substringData([in] LONG offset,[in] LONG Count,[retval, out] BSTR* pbstrsubString); [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)] HRESULT appendData([in] BSTR bstrstring); [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)] HRESULT insertData([in] LONG offset,[in] BSTR bstrstring); [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)] HRESULT deleteData([in] LONG offset,[in] LONG Count); [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)] HRESULT replaceData([in] LONG offset,[in] LONG Count,[in] BSTR bstrstring); } [ noncreatable, uuid(3050f4ba-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLDOMTextNode { [default] dispinterface DispHTMLDOMTextNode; interface IHTMLDOMTextNode; interface IHTMLDOMTextNode2; interface IHTMLDOMNode; interface IHTMLDOMNode2; } /***************************************************************************** * IHTMLDOMImplementation interface */ [ odl, oleautomation, dual, uuid(3050f80d-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMImplementation : IDispatch { [id(DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE)] HRESULT hasFeature( [in] BSTR bstrfeature, [optional, in] VARIANT version, [retval, out] VARIANT_BOOL *pfHasFeature); } /***************************************************************************** * DispHTMLDOMAttribute dispinterface */ [ hidden, uuid(3050f564-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLDOMAttribute { properties: methods: [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)] BSTR nodeName(); [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)] void nodeValue(VARIANT v); [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)] VARIANT nodeValue(); [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)] VARIANT_BOOL specified(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)] BSTR name(); [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)] void value(BSTR v); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)] BSTR value(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)] VARIANT_BOOL expando(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)] long nodeType(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)] IHTMLDOMNode *parentNode(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)] IDispatch *childNodes(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)] IHTMLDOMNode *firstChild(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)] IHTMLDOMNode *lastChild(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)] IHTMLDOMNode *previousSibling(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)] IHTMLDOMNode *nextSibling(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)] IDispatch *attributes(); [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)] IDispatch *ownerDocument(); [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)] IHTMLDOMNode *insertBefore( [in] IHTMLDOMNode *newChild, [optional, in] VARIANT refChild); [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)] IHTMLDOMNode *replaceChild( [in] IHTMLDOMNode *newChild, [in] IHTMLDOMNode *oldChild); [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)] IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild); [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)] IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild); [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)] VARIANT_BOOL hasChildNodes(); [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)] IHTMLDOMAttribute *cloneNode([in] VARIANT_BOOL fDeep); [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)] void ie8_nodeValue(VARIANT v); [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)] VARIANT ie8_nodeValue(); [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)] void ie8_value(BSTR v); [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)] BSTR ie8_value(); [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED)] VARIANT_BOOL ie8_specified(); [propget, id(DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT)] IHTMLElement2 *ownerElement(); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } /***************************************************************************** * IHTMLDocumentCompatibleInfo interface */ [ odl, oleautomation, dual, uuid(3051041a-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDocumentCompatibleInfo : IDispatch { [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT)] HRESULT userAgent([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION)] HRESULT version([retval, out] BSTR *p); } /***************************************************************************** * IHTMLDocumentCompatibleInfoCollection interface */ [ odl, oleautomation, dual, uuid(30510418-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDocumentCompatibleInfoCollection : IDispatch { [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH)] HRESULT length([retval, out] long *p); [id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM)] HRESULT item([in] long i, [retval, out]IHTMLDocumentCompatibleInfo **p); } /***************************************************************************** * DispHTMLDOMTextNode dispinterface */ [ hidden, uuid(3050f565-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLDOMTextNode { properties: methods: [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)] void data(BSTR v); [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)] BSTR data(); [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)] BSTR toString(); [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)] LONG length(); [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)] IHTMLDOMNode *splitText([in] LONG offset); [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)] BSTR substringData( [in] LONG offset, [in] LONG Count); [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)] void appendData([in] BSTR bstrstring); [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)] void insertData( [in] LONG offset, [in] BSTR bstrstring); [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)] void deleteData( [in] LONG offset, [in] LONG Count); [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)] void replaceData( [in] LONG offset, [in] LONG Count, [in] BSTR bstrstring); WINE_HTMLDOMNODE_DISPINTERFACE_DECL; } /***************************************************************************** * IHTMLAttributeCollection interface */ [ odl, oleautomation, dual, uuid(3050f4c3-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLAttributeCollection : IDispatch { [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)] HRESULT length( [retval, out] long *p); [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted] HRESULT _newEnum( [retval, out] IUnknown **p); [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)] HRESULT item( [optional, in] VARIANT *name, [retval, out] IDispatch **pdisp); } /***************************************************************************** * IHTMLAttributeCollection2 interface */ [ odl, oleautomation, dual, uuid(3050f80a-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLAttributeCollection2 : IDispatch { [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)] HRESULT getNamedItem( [in] BSTR bstrName, [retval, out] IHTMLDOMAttribute **newretNode); [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)] HRESULT setNamedItem( [in] IHTMLDOMAttribute *ppNode, [retval, out] IHTMLDOMAttribute **newretNode); [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)] HRESULT removeNamedItem( [in] BSTR bstrName, [retval, out] IHTMLDOMAttribute **newretNode); } /***************************************************************************** * IHTMLAttributeCollection3 interface */ [ odl, oleautomation, dual, uuid(30510469-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLAttributeCollection3 : IDispatch { [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)] HRESULT getNamedItem( [in] BSTR bstrName, [retval, out] IHTMLDOMAttribute **ppNodeOut); [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)] HRESULT setNamedItem( [in] IHTMLDOMAttribute *pNodeIn, [retval, out] IHTMLDOMAttribute **ppNodeOut); [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)] HRESULT removeNamedItem( [in] BSTR bstrName, [retval, out] IHTMLDOMAttribute **ppNodeOut); [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)] HRESULT item( [in] long index, [retval, out] IHTMLDOMAttribute **ppNodeOut); [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)] HRESULT length([retval, out] long *p); } /***************************************************************************** * DispHTMLAttributeCollection dispinterface */ [ hidden, uuid(3050f56c-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLAttributeCollection { properties: methods: [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)] long length(); [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted] IUnknown *_newEnum(); [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)] IDispatch *item([optional, in] VARIANT *name); [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)] IHTMLDOMAttribute *getNamedItem([in] BSTR bstrName); [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)] IHTMLDOMAttribute *setNamedItem([in] IHTMLDOMAttribute *ppNode); [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)] IHTMLDOMAttribute *removeNamedItem([in] BSTR bstrName); [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)] IHTMLDOMAttribute *ie8_getNamedItem([in] BSTR bstrName); [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)] IHTMLDOMAttribute *ie8_setNamedItem([in] IHTMLDOMAttribute *pNodeIn); [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)] IHTMLDOMAttribute *ie8_removeNamedItem([in] BSTR bstrName); [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)] IHTMLDOMAttribute *ie8_item([in] long index); [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)] long ie8_length(); [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] IDispatch *constructor(); } /***************************************************************************** * IHTMLDOMChildrenCollection interface */ [ odl, oleautomation, dual, uuid(3050f5ab-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMChildrenCollection : IDispatch { [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)] HRESULT length([out, retval] LONG *p); [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted] HRESULT _newEnum([out, retval] IUnknown **p); [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)] HRESULT item( [in] LONG index, [out, retval] IDispatch **ppItem); } /***************************************************************************** * DispDOMChildrenCollection dispinterface */ [ hidden, uuid(3050f577-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispDOMChildrenCollection { properties: methods: [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)] LONG length(); [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted] IUnknown *_newEnum(); [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)] IDispatch *item([in] LONG index); } interface IHTMLElementCollection; /***************************************************************************** * IHTMLElement interface */ [ odl, dual, oleautomation, uuid(3050f1FF-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLElement : IDispatch { [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR strAttributeName, [in] VARIANT AttributeValue, [defaultvalue(1), in] LONG lFlags); [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR strAttributeName, [defaultvalue(0), in] LONG lFlags, [retval, out] VARIANT *AttributeValue); [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR strAttributeName, [defaultvalue(1), in] LONG lFlags, [retval, out] VARIANT_BOOL *pfSuccess); [propput, id(DISPID_IHTMLELEMENT_CLASSNAME)] HRESULT className([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_CLASSNAME)] HRESULT className([retval, out] BSTR *p); [propput, id(DISPID_IHTMLELEMENT_ID)] HRESULT id([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_ID)] HRESULT id([retval, out] BSTR *p); [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] HRESULT tagName([retval, out] BSTR *p); [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] HRESULT parentElement([retval, out] IHTMLElement **p); [propget, id(DISPID_IHTMLELEMENT_STYLE)] HRESULT style([retval, out] IHTMLStyle **p); [propput, id(DISPID_IHTMLELEMENT_ONHELP)] HRESULT onhelp([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONHELP)] HRESULT onhelp([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONCLICK)] HRESULT onclick([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONCLICK)] HRESULT onclick([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK)] HRESULT ondblclick([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK)] HRESULT ondblclick([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN)] HRESULT onkeydown([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN)] HRESULT onkeydown([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONKEYUP)] HRESULT onkeyup([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONKEYUP)] HRESULT onkeyup([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS)] HRESULT onkeypress([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS)] HRESULT onkeypress([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)] HRESULT onmouseout([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)] HRESULT onmouseout([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)] HRESULT onmouseover([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)] HRESULT onmouseover([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)] HRESULT onmousemove([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)] HRESULT onmousemove([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)] HRESULT onmousedown([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)] HRESULT onmousedown([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP)] HRESULT onmouseup([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP)] HRESULT onmouseup([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] HRESULT document([retval, out] IDispatch **p); [propput, id(DISPID_IHTMLELEMENT_TITLE)] HRESULT title([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_TITLE)] HRESULT title([retval, out] BSTR *p); [propput, id(DISPID_IHTMLELEMENT_LANGUAGE)] HRESULT language([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_LANGUAGE)] HRESULT language([retval, out] BSTR *p); [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART)] HRESULT onselectstart([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART)] HRESULT onselectstart([retval, out] VARIANT *p); [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] HRESULT scrollIntoView([optional, in] VARIANT varargStart); [id(DISPID_IHTMLELEMENT_CONTAINS)] HRESULT contains( [in] IHTMLElement *pChild, [retval, out] VARIANT_BOOL *pfResult); [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX)] HRESULT sourceIndex([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] HRESULT recordNumber([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_LANG)] HRESULT lang([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_LANG)] HRESULT lang([retval, out] BSTR *p); [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] HRESULT offsetLeft([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] HRESULT offsetTop([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] HRESULT offsetWidth([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] HRESULT offsetHeight([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] HRESULT offsetParent([retval, out] IHTMLElement **p); [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] HRESULT innerHTML([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] HRESULT innerHTML([retval, out] BSTR *p); [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] HRESULT innerText([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] HRESULT innerText([retval, out] BSTR *p); [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] HRESULT outerHTML([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] HRESULT outerHTML([retval, out] BSTR *p); [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] HRESULT outerText([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] HRESULT outerText([retval, out] BSTR *p); [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] HRESULT insertAdjacentHTML([in] BSTR where, [in] BSTR html); [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] HRESULT insertAdjacentText([in] BSTR where, [in] BSTR text); [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] HRESULT parentTextEdit([retval, out] IHTMLElement **p); [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] HRESULT isTextEdit([retval, out] VARIANT_BOOL *p); [id(DISPID_IHTMLELEMENT_CLICK)] HRESULT click(); [propget, id(DISPID_IHTMLELEMENT_FILTERS)] HRESULT filters([retval, out] IHTMLFiltersCollection **p); [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART)] HRESULT ondragstart([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART)] HRESULT ondragstart([retval, out] VARIANT *p); [id(DISPID_IHTMLELEMENT_TOSTRING)] HRESULT toString([retval, out] BSTR *String); [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)] HRESULT onbeforeupdate([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)] HRESULT onbeforeupdate([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)] HRESULT onafterupdate([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)] HRESULT onafterupdate([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)] HRESULT onerrorupdate([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)] HRESULT onerrorupdate([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT)] HRESULT onrowexit([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT)] HRESULT onrowexit([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONROWENTER)] HRESULT onrowenter([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONROWENTER)] HRESULT onrowenter([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)] HRESULT ondatasetchanged([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)] HRESULT ondatasetchanged([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)] HRESULT ondataavailable([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)] HRESULT ondataavailable([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)] HRESULT ondatasetcomplete([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)] HRESULT ondatasetcomplete([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)] HRESULT onfilterchange([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)] HRESULT onfilterchange([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] HRESULT children([retval, out] IDispatch **p); [propget, id(DISPID_IHTMLELEMENT_ALL)] HRESULT all([retval, out] IDispatch **p); } #define WINE_IHTMLELEMENT_DISPINTERFACE_DECL \ [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] \ void setAttribute( \ [in] BSTR strAttributeName, \ [in] VARIANT AttValue, \ [defaultvalue(1), in] LONG lFlags); \ \ [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] \ VARIANT getAttribute( \ [in] BSTR strAttributeName, \ [defaultvalue(0), in] LONG lFlags); \ \ [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] \ VARIANT_BOOL removeAttribute( \ [in] BSTR strAttributeName, \ [defaultvalue(1), in] LONG lFlags); \ \ [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] \ void className(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] \ BSTR className(); \ \ [propput, id(DISPID_IHTMLELEMENT_ID), bindable] \ void id(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_ID), bindable] \ BSTR id(); \ \ [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] \ BSTR tagName(); \ \ [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] \ IHTMLElement *parentElement(); \ \ [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] \ IHTMLStyle *style(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] \ void onhelp(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] \ VARIANT onhelp(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] \ void onclick(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] \ VARIANT onclick(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\ void ondblclick(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\ VARIANT ondblclick(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \ void onkeydown(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \ VARIANT onkeydown(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] \ void onkeyup(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] \ VARIANT onkeyup(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\ void onkeypress(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\ VARIANT onkeypress(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\ void onmouseout(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\ VARIANT onmouseout(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \ void onmouseover(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \ VARIANT onmouseover(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \ void onmousemove(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \ VARIANT onmousemove(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \ void onmousedown(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \ VARIANT onmousedown(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \ void onmouseup(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \ VARIANT onmouseup(); \ \ [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] IDispatch* document(); \ \ [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] \ void title(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] \ BSTR title(); \ \ [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] \ void language(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] \ BSTR language(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \ void onselectstart(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \ VARIANT onselectstart(); \ \ [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] \ void scrollIntoView([optional, in] VARIANT varargStart); \ \ [id(DISPID_IHTMLELEMENT_CONTAINS)] \ VARIANT_BOOL contains([in] IHTMLElement* pChild); \ \ [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] \ LONG sourceIndex(); \ \ [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] \ VARIANT recordNumber(); \ \ [propput, id(DISPID_IHTMLELEMENT_LANG)] \ void lang(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_LANG)] \ BSTR lang(); \ \ [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] \ LONG offsetLeft(); \ \ [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] \ LONG offsetTop(); \ \ [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] \ LONG offsetWidth(); \ \ [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] \ LONG offsetHeight(); \ \ [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] \ IHTMLElement* offsetParent(); \ \ [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] \ void innerHTML(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] \ BSTR innerHTML(); \ \ [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] \ void innerText(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] \ BSTR innerText(); \ \ [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] \ void outerHTML(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] \ BSTR outerHTML(); \ \ [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] \ void outerText(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] \ BSTR outerText(); \ \ [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] \ void insertAdjacentHTML( \ [in] BSTR where, \ [in] BSTR html); \ \ [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] \ void insertAdjacentText( \ [in] BSTR where, \ [in] BSTR text); \ \ [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] \ IHTMLElement* parentTextEdit(); \ \ [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] \ VARIANT_BOOL isTextEdit(); \ \ [id(DISPID_IHTMLELEMENT_CLICK)] \ void click(); \ \ [propget, id(DISPID_IHTMLELEMENT_FILTERS)] \ IHTMLFiltersCollection* filters(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \ void ondragstart(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \ VARIANT ondragstart(); \ \ [id(DISPID_IHTMLELEMENT_TOSTRING)] \ BSTR toString(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \ void onbeforeupdate(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \ VARIANT onbeforeupdate(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \ void onafterupdate(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \ VARIANT onafterupdate(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \ void onerrorupdate(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \ VARIANT onerrorupdate(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \ void onrowexit(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \ VARIANT onrowexit(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \ void onrowenter(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \ VARIANT onrowenter(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \ void ondatasetchanged(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \ VARIANT ondatasetchanged(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \ void ondataavailable(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \ VARIANT ondataavailable(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \ void ondatasetcomplete(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \ VARIANT ondatasetcomplete(); \ \ [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \ void onfilterchange(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \ VARIANT onfilterchange(); \ \ [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] \ IDispatch* children(); \ \ [propget, id(DISPID_IHTMLELEMENT_ALL)] \ IDispatch* all() /***************************************************************************** * IHTMLElement2 interface */ [ odl, oleautomation, dual, uuid(3050f434-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLElement2 : IDispatch { [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] HRESULT scopeName([retval, out] BSTR *p); [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] HRESULT setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture); [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] HRESULT releaseCapture(); [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] HRESULT onlosecapture([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] HRESULT onlosecapture([retval, out] VARIANT *p); [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] HRESULT componentFromPoint( [in] LONG x, [in] LONG y, [retval, out] BSTR *component); [id(DISPID_IHTMLELEMENT2_DOSCROLL)] HRESULT doScroll([optional, in] VARIANT component); [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] HRESULT onscroll([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] HRESULT onscroll([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] HRESULT ondrag([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] HRESULT ondrag([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] HRESULT ondragend([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] HRESULT ondragend([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] HRESULT ondragenter([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] HRESULT ondragenter([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] HRESULT ondragover([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] HRESULT ondragover([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] HRESULT ondragleave([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] HRESULT ondragleave([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] HRESULT ondrop([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] HRESULT ondrop([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] HRESULT onbeforecut([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] HRESULT onbeforecut([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] HRESULT oncut([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] HRESULT oncut([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] HRESULT onbeforecopy([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] HRESULT onbeforecopy([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] HRESULT oncopy([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] HRESULT oncopy([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] HRESULT onbeforepaste([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] HRESULT onbeforepaste([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] HRESULT onpaste([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] HRESULT onpaste([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] HRESULT currentStyle([retval, out] IHTMLCurrentStyle **p); [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] HRESULT onpropertychange([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] HRESULT onpropertychange([retval, out] VARIANT *p); [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] HRESULT getClientRects([retval, out] IHTMLRectCollection **pRectCol); [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] HRESULT getBoundingClientRect([retval, out] IHTMLRect **pRect); [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] HRESULT setExpression( [in] BSTR propname, [in] BSTR expression, [defaultvalue(""), in] BSTR language); [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] HRESULT getExpression( [in] BSTR propname, [retval, out] VARIANT *expression); [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] HRESULT removeExpression( [in] BSTR propname, [retval, out] VARIANT_BOOL *pfSuccess); [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] HRESULT tabIndex([in] short v); [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] HRESULT tabIndex([retval, out] short *p); [id(DISPID_IHTMLELEMENT2_FOCUS)] HRESULT focus(); [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] HRESULT accessKey([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable] HRESULT accessKey([retval, out] BSTR *p); [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] HRESULT onblur([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] HRESULT onblur([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] HRESULT onfocus([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] HRESULT onfocus([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] HRESULT onresize([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] HRESULT onresize([retval, out] VARIANT *p); [id(DISPID_IHTMLELEMENT2_BLUR)] HRESULT blur(); [id(DISPID_IHTMLELEMENT2_ADDFILTER)] HRESULT addFilter([in] IUnknown *pUnk); [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] HRESULT removeFilter([in] IUnknown *pUnk); [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] HRESULT clientHeight([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] HRESULT clientWidth([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] HRESULT clientTop([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] HRESULT clientLeft([retval, out] LONG *p); [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] HRESULT attachEvent( [in] BSTR event, [in] IDispatch *pDisp, [retval, out] VARIANT_BOOL *pfResult); [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] HRESULT detachEvent( [in] BSTR event, [in] IDispatch *pDisp); [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] HRESULT readyState([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] HRESULT onrowsdelete([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] HRESULT onrowsdelete([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] HRESULT onrowsinserted([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] HRESULT onrowsinserted([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] HRESULT oncellchange([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] HRESULT oncellchange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] HRESULT dir([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] HRESULT dir([retval, out] BSTR *p); [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] HRESULT createControlRange([retval, out] IDispatch **range); [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] HRESULT scrollHeight([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] HRESULT scrollWidth([retval, out] LONG *p); [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] HRESULT scrollTop([in] LONG v); [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable] HRESULT scrollTop([retval, out] LONG *p); [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] HRESULT scrollLeft([in] LONG v); [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] HRESULT scrollLeft([retval, out] LONG *p); [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] HRESULT clearAttributes(); [id(DISPID_IHTMLELEMENT2_MERGEATTRIBUTES)] HRESULT mergeAttributes([in] IHTMLElement *mergeThis); [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] HRESULT oncontextmenu([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] HRESULT oncontextmenu([retval, out] VARIANT *p); [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] HRESULT insertAdjacentElement( [in] BSTR where, [in] IHTMLElement *insertedElement, [retval, out] IHTMLElement **inserted); [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] HRESULT applyElement( [in] IHTMLElement *apply, [in] BSTR where, [retval, out] IHTMLElement **applied); [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] HRESULT getAdjacentText( [in] BSTR where, [retval, out] BSTR *text); [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] HRESULT replaceAdjacentText( [in] BSTR where, [in] BSTR newText, [retval, out] BSTR *oldText); [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] HRESULT canHaveChildren([retval, out] VARIANT_BOOL *p); [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] HRESULT addBehavior( [in] BSTR bstrUrl, [optional, in] VARIANT *pvarFactory, [retval, out] LONG *pCookie); [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] HRESULT removeBehavior( [in] LONG cookie, [retval, out] VARIANT_BOOL *pfResult); [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] HRESULT runtimeStyle([retval, out] IHTMLStyle **p); [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] HRESULT behaviorUrns([retval, out] IDispatch **p); [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] HRESULT tagUrn([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] HRESULT tagUrn([retval, out] BSTR *p); [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] HRESULT onbeforeeditfocus([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] HRESULT onbeforeeditfocus([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] HRESULT readyStateValue([retval, out] LONG *p); [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] HRESULT getElementsByTagName( [in] BSTR v, [retval, out] IHTMLElementCollection **pelColl); } #define WINE_IHTMLELEMENT2_DISPINTERFACE_DECL \ [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] \ BSTR scopeName(); \ \ [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] \ void setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture); \ \ [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] \ void releaseCapture(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \ void onlosecapture(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \ VARIANT onlosecapture(); \ \ [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] \ BSTR componentFromPoint([in] LONG x,[in] LONG y); \ \ [id(DISPID_IHTMLELEMENT2_DOSCROLL)] \ void doScroll([optional, in] VARIANT component); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \ void onscroll(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \ VARIANT onscroll(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] \ void ondrag(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] \ VARIANT ondrag(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \ void ondragend(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \ VARIANT ondragend(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \ void ondragenter(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \ VARIANT ondragenter(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \ void ondragover(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \ VARIANT ondragover(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \ void ondragleave(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \ VARIANT ondragleave(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] \ void ondrop(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] \ VARIANT ondrop(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \ void onbeforecut(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \ VARIANT onbeforecut(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] \ void oncut(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] \ VARIANT oncut(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \ void onbeforecopy(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \ VARIANT onbeforecopy(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] \ void oncopy(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] \ VARIANT oncopy(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \ void onbeforepaste(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \ VARIANT onbeforepaste(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] \ void onpaste(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] \ VARIANT onpaste(); \ \ [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] \ IHTMLCurrentStyle* currentStyle(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \ void onpropertychange(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \ VARIANT onpropertychange(); \ \ [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] \ IHTMLRectCollection* getClientRects(); \ \ [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] \ IHTMLRect* getBoundingClientRect(); \ \ [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] \ void setExpression( \ [in] BSTR propname, \ [in] BSTR expr, \ [defaultvalue(""), in] BSTR lang); \ \ [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] \ VARIANT getExpression([in] BSTR propname); \ \ [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] \ VARIANT_BOOL removeExpression([in] BSTR propname); \ \ [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \ void tabIndex(short v); \ \ [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \ short tabIndex(); \ \ [id(DISPID_IHTMLELEMENT2_FOCUS)] \ void focus(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\ void accessKey(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\ BSTR accessKey(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] \ void onblur(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] \ VARIANT onblur(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] \ void onfocus(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] \ VARIANT onfocus(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \ void onresize(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \ VARIANT onresize(); \ \ [id(DISPID_IHTMLELEMENT2_BLUR)] \ void blur(); \ \ [id(DISPID_IHTMLELEMENT2_ADDFILTER)] \ void addFilter([in] IUnknown* pUnk); \ \ [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] \ void removeFilter([in] IUnknown* pUnk); \ \ [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] \ LONG clientHeight(); \ \ [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] \ LONG clientWidth(); \ \ [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] \ LONG clientTop(); \ \ [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] \ LONG clientLeft(); \ \ [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] \ VARIANT_BOOL attachEvent( \ [in] BSTR event, \ [in] IDispatch* pDisp); \ \ [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] \ void detachEvent( \ [in] BSTR event, \ [in] IDispatch* pDisp); \ \ [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] VARIANT readyState(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \ void onreadystatechange(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \ VARIANT onreadystatechange(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \ void onrowsdelete(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \ VARIANT onrowsdelete(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \ void onrowsinserted(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \ VARIANT onrowsinserted(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \ void oncellchange(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \ VARIANT oncellchange(); \ \ [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] \ void dir(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] \ BSTR dir(); \ \ [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] \ IDispatch* createControlRange(); \ \ [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] \ LONG scrollHeight(); \ \ [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] \ LONG scrollWidth(); \ \ [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\ void scrollTop(LONG v); \ \ [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\ LONG scrollTop(); \ \ [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \ void scrollLeft(LONG v); \ \ [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \ LONG scrollLeft(); \ \ [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] \ void clearAttributes(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \ void oncontextmenu(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \ VARIANT oncontextmenu(); \ \ [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] \ IHTMLElement* insertAdjacentElement( \ [in] BSTR where, \ [in] IHTMLElement* insertedElement); \ \ [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] \ IHTMLElement* applyElement([in] IHTMLElement* apply,[in] BSTR where); \ \ [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] \ BSTR getAdjacentText([in] BSTR where); \ \ [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] \ BSTR replaceAdjacentText([in] BSTR where,[in] BSTR newText); \ \ [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] \ VARIANT_BOOL canHaveChildren(); \ \ [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] \ LONG addBehavior([in] BSTR bstrUrl,[optional, in] VARIANT* pvarFactory); \ \ [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] \ VARIANT_BOOL removeBehavior([in] LONG cookie); \ \ [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] \ IHTMLStyle* runtimeStyle(); \ \ [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] \ IDispatch* behaviorUrns(); \ \ [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] \ void tagUrn(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] \ BSTR tagUrn(); \ \ [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \ void onbeforeeditfocus(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \ VARIANT onbeforeeditfocus(); \ \ [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] \ LONG readyStateValue(); \ \ [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] \ IHTMLElementCollection* getElementsByTagName([in] BSTR v) /***************************************************************************** * IHTMLElement3 interface */ [ odl, oleautomation, dual, uuid(3050f673-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLElement3 : IDispatch { [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] HRESULT mergeAttributes([in] IHTMLElement* mergeThis,[optional, in] VARIANT* pvarFlags); [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] HRESULT isMultiLine([retval, out] VARIANT_BOOL * p); [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] HRESULT canHaveHTML([retval, out] VARIANT_BOOL * p); [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] HRESULT onlayoutcomplete([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] HRESULT onlayoutcomplete([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] HRESULT onpage([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] HRESULT onpage([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] HRESULT inflateBlock([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] HRESULT inflateBlock([retval, out] VARIANT_BOOL * p); [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] HRESULT onbeforedeactivate([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] HRESULT onbeforedeactivate([retval, out] VARIANT * p); [id(DISPID_IHTMLELEMENT3_SETACTIVE)] HRESULT setActive(); [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] HRESULT contentEditable([in] BSTR v); [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] HRESULT contentEditable([retval, out] BSTR * p); [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] HRESULT isContentEditable([retval, out] VARIANT_BOOL * p); [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] HRESULT hideFocus([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable] HRESULT hideFocus([retval, out] VARIANT_BOOL * p); [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] HRESULT disabled([retval, out] VARIANT_BOOL * p); [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] HRESULT isDisabled([retval, out] VARIANT_BOOL * p); [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] HRESULT onmove([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] HRESULT onmove([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] HRESULT oncontrolselect([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] HRESULT oncontrolselect([retval, out] VARIANT * p); [id(DISPID_IHTMLELEMENT3_FIREEVENT)] HRESULT fireEvent( [in] BSTR bstrEventName, [optional, in] VARIANT* pvarEventObject, [retval, out] VARIANT_BOOL* pfCancelled); [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] HRESULT onresizestart([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] HRESULT onresizestart([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] HRESULT onresizeend([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] HRESULT onresizeend([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] HRESULT onmovestart([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] HRESULT onmovestart([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] HRESULT onmoveend([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable] HRESULT onmoveend([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] HRESULT onmouseenter([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] HRESULT onmouseenter([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] HRESULT onmouseleave([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] HRESULT onmouseleave([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] HRESULT onactivate([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] HRESULT onactivate([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] HRESULT ondeactivate([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] HRESULT ondeactivate([retval, out] VARIANT * p); [id(DISPID_IHTMLELEMENT3_DRAGDROP)] HRESULT dragDrop([retval, out] VARIANT_BOOL* pfRet); [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] HRESULT glyphMode([retval, out] LONG * p); } #define WINE_IHTMLELEMENT3_DISPINTERFACE_DECL \ \ [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] \ void mergeAttributes( \ [in] IHTMLElement* mergeThis, \ [optional, in] VARIANT* pvarFlags); \ \ [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] \ VARIANT_BOOL isMultiLine(); \ \ [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] \ VARIANT_BOOL canHaveHTML(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \ void onlayoutcomplete(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \ VARIANT onlayoutcomplete(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] \ void onpage(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] \ VARIANT onpage(); \ \ [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \ void inflateBlock(VARIANT_BOOL v); \ \ [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \ VARIANT_BOOL inflateBlock(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \ void onbeforedeactivate(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \ VARIANT onbeforedeactivate(); \ \ [id(DISPID_IHTMLELEMENT3_SETACTIVE)] \ void setActive(); \ \ [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \ void contentEditable(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \ BSTR contentEditable(); \ \ [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] \ VARIANT_BOOL isContentEditable(); \ \ [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\ void hideFocus(VARIANT_BOOL v); \ \ [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\ VARIANT_BOOL hideFocus(); \ \ [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \ void disabled(VARIANT_BOOL v); \ \ [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \ VARIANT_BOOL disabled(); \ \ [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] \ VARIANT_BOOL isDisabled(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] \ void onmove(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] \ VARIANT onmove(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \ void oncontrolselect(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \ VARIANT oncontrolselect(); \ \ [id(DISPID_IHTMLELEMENT3_FIREEVENT)] \ VARIANT_BOOL fireEvent( \ [in] BSTR bstrEventName, \ [optional, in] VARIANT* pvarEventObject); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \ void onresizestart(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \ VARIANT onresizestart(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \ void onresizeend(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \ VARIANT onresizeend(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \ void onmovestart(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \ VARIANT onmovestart(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\ void onmoveend(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\ VARIANT onmoveend(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \ void onmouseenter(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \ VARIANT onmouseenter(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \ void onmouseleave(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \ VARIANT onmouseleave(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \ void onactivate(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \ VARIANT onactivate(); \ \ [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \ void ondeactivate(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \ VARIANT ondeactivate(); \ \ [id(DISPID_IHTMLELEMENT3_DRAGDROP)] \ VARIANT_BOOL dragDrop(); \ \ [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] \ LONG glyphMode() /***************************************************************************** * IHTMLElement4 interface */ [ odl, oleautomation, dual, uuid(3050f80f-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLElement4 : IDispatch { [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] HRESULT onmousewheel([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] HRESULT onmousewheel([retval, out] VARIANT * p); [id(DISPID_IHTMLELEMENT4_NORMALIZE)] HRESULT normalize(); [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] HRESULT getAttributeNode([in] BSTR bstrname, [retval, out] IHTMLDOMAttribute** ppAttribute); [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] HRESULT setAttributeNode( [in] IHTMLDOMAttribute* pattr, [retval, out] IHTMLDOMAttribute** ppretAttribute); [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] HRESULT removeAttributeNode( [in] IHTMLDOMAttribute* pattr, [retval, out] IHTMLDOMAttribute** ppretAttribute); [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] HRESULT onbeforeactivate([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] HRESULT onbeforeactivate([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] HRESULT onfocusin([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable] HRESULT onfocusin([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] HRESULT onfocusout([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] HRESULT onfocusout([retval, out] VARIANT * p); } #define WINE_IHTMLELEMENT4_DISPINTERFACE_DECL \ [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \ void onmousewheel(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \ VARIANT onmousewheel(); \ \ [id(DISPID_IHTMLELEMENT4_NORMALIZE)] \ void normalize(); \ \ [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] \ IHTMLDOMAttribute* getAttributeNode([in] BSTR bstrname); \ \ [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] \ IHTMLDOMAttribute* setAttributeNode([in] IHTMLDOMAttribute* pattr); \ \ [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] \ IHTMLDOMAttribute* removeAttributeNode([in] IHTMLDOMAttribute* pattr); \ \ [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \ void onbeforeactivate(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \ VARIANT onbeforeactivate(); \ \ [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\ void onfocusin(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\ VARIANT onfocusin(); \ \ [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \ void onfocusout(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \ VARIANT onfocusout() /***************************************************************************** * IHTMLElement6 interface */ [ odl, oleautomation, dual, uuid(305106f8-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLElement6 : IDispatch { [id(DISPID_IHTMLELEMENT6_GETATTRIBUTENS)] HRESULT getAttributeNS( [in] VARIANT *pvarNS, [in] BSTR strAttributeName, [out, retval] VARIANT *AttributeValue); [id(DISPID_IHTMLELEMENT6_SETATTRIBUTENS)] HRESULT setAttributeNS( [in] VARIANT *pvarNS, [in] BSTR strAttributeName, [in] VARIANT *pvarAttributeValue); [id(DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS)] HRESULT removeAttributeNS( [in] VARIANT *pvarNS, [in] BSTR strAttributeName); [id(DISPID_IHTMLELEMENT6_GETATTRIBUTENODENS)] HRESULT getAttributeNodeNS( [in] VARIANT *pvarNS, [in] BSTR bstrname, [out, retval] IHTMLDOMAttribute2 **ppretAttribute); [id(DISPID_IHTMLELEMENT6_SETATTRIBUTENODENS)] HRESULT setAttributeNodeNS( [in] IHTMLDOMAttribute2 *pattr, [out, retval] IHTMLDOMAttribute2 **ppretAttribute); [id(DISPID_IHTMLELEMENT6_HASATTRIBUTENS)] HRESULT hasAttributeNS( [in] VARIANT *pvarNS, [in] BSTR name, [out, retval] VARIANT_BOOL *pfHasAttribute); [id(DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR strAttributeName, [out, retval] VARIANT *AttributeValue); [id(DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR strAttributeName, [in] VARIANT *pvarAttributeValue); [id(DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR strAttributeName); [id(DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTENODE)] HRESULT getAttributeNode( [in] BSTR strAttributeName, [out, retval] IHTMLDOMAttribute2 **ppretAttribute); [id(DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTENODE)] HRESULT setAttributeNode( [in] IHTMLDOMAttribute2 *pattr, [out, retval] IHTMLDOMAttribute2 **ppretAttribute); [id(DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTENODE)] HRESULT removeAttributeNode( [in] IHTMLDOMAttribute2 *pattr, [out, retval] IHTMLDOMAttribute2 **ppretAttribute); [id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTE)] HRESULT hasAttribute( [in] BSTR name, [out, retval] VARIANT_BOOL *pfHasAttribute); [id(DISPID_IHTMLELEMENT6_GETELEMENTSBYTAGNAMENS)] HRESULT getElementsByTagNameNS( [in] VARIANT *varNS, [in] BSTR bstrLocalName, [out, retval] IHTMLElementCollection **pelColl); [propget, id(DISPID_IHTMLELEMENT6_IE9_TAGNAME)] HRESULT tagName([out, retval] BSTR *p); [propget, id(DISPID_IHTMLELEMENT6_IE9_NODENAME)] HRESULT nodeName([out, retval] BSTR *p); [id(DISPID_IHTMLELEMENT6_GETELEMENTSBYCLASSNAME)] HRESULT getElementsByClassName( [in] BSTR v, [out, retval] IHTMLElementCollection **pel); [id(DISPID_IHTMLELEMENT6_MSMATCHESSELECTOR)] HRESULT msMatchesSelector( [in] BSTR v, [out, retval] VARIANT_BOOL *pfMatches); [propput, id(DISPID_IHTMLELEMENT6_ONABORT), displaybind, bindable] HRESULT onabort([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONABORT), displaybind, bindable] HRESULT onabort([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONCANPLAY), displaybind, bindable, hidden] HRESULT oncanplay([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONCANPLAY), displaybind, bindable, hidden] HRESULT oncanplay([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH), displaybind, bindable, hidden] HRESULT oncanplaythrough([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH), displaybind, bindable, hidden] HRESULT oncanplaythrough([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONCHANGE), displaybind, bindable] HRESULT onchange([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONCHANGE), displaybind, bindable] HRESULT onchange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONDURATIONCHANGE), displaybind, bindable, hidden] HRESULT ondurationchange([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONDURATIONCHANGE), displaybind, bindable, hidden] HRESULT ondurationchange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONEMPTIED), displaybind, bindable, hidden] HRESULT onemptied([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONEMPTIED), displaybind, bindable, hidden] HRESULT onemptied([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONENDED), displaybind, bindable, hidden] HRESULT onended([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONENDED), displaybind, bindable, hidden] HRESULT onended([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONERROR), displaybind, bindable] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONERROR), displaybind, bindable] HRESULT onerror([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONINPUT), displaybind, bindable, hidden] HRESULT oninput([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONINPUT), displaybind, bindable, hidden] HRESULT oninput([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONLOAD), displaybind, bindable] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONLOAD), displaybind, bindable] HRESULT onload([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONLOADEDDATA), displaybind, bindable, hidden] HRESULT onloadeddata([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONLOADEDDATA), displaybind, bindable, hidden] HRESULT onloadeddata([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONLOADEDMETADATA), displaybind, bindable, hidden] HRESULT onloadedmetadata([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONLOADEDMETADATA), displaybind, bindable, hidden] HRESULT onloadedmetadata([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONLOADSTART), displaybind, bindable, hidden] HRESULT onloadstart([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONLOADSTART), displaybind, bindable, hidden] HRESULT onloadstart([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONPAUSE), displaybind, bindable, hidden] HRESULT onpause([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONPAUSE), displaybind, bindable, hidden] HRESULT onpause([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONPLAY), displaybind, bindable, hidden] HRESULT onplay([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONPLAY), displaybind, bindable, hidden] HRESULT onplay([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONPLAYING), displaybind, bindable, hidden] HRESULT onplaying([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONPLAYING), displaybind, bindable, hidden] HRESULT onplaying([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONPROGRESS), displaybind, bindable, hidden] HRESULT onprogress([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONPROGRESS), displaybind, bindable, hidden] HRESULT onprogress([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONRATECHANGE), displaybind, bindable, hidden] HRESULT onratechange([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONRATECHANGE), displaybind, bindable, hidden] HRESULT onratechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONRESET), displaybind, bindable] HRESULT onreset([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONRESET), displaybind, bindable] HRESULT onreset([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONSEEKED), displaybind, bindable, hidden] HRESULT onseeked([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONSEEKED), displaybind, bindable, hidden] HRESULT onseeked([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONSEEKING), displaybind, bindable, hidden] HRESULT onseeking([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONSEEKING), displaybind, bindable, hidden] HRESULT onseeking([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONSELECT), displaybind, bindable] HRESULT onselect([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONSELECT), displaybind, bindable] HRESULT onselect([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONSTALLED), displaybind, bindable, hidden] HRESULT onstalled([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONSTALLED), displaybind, bindable, hidden] HRESULT onstalled([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONSUBMIT), displaybind, bindable] HRESULT onsubmit([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONSUBMIT), displaybind, bindable] HRESULT onsubmit([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONSUSPEND), displaybind, bindable, hidden] HRESULT onsuspend([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONSUSPEND), displaybind, bindable, hidden] HRESULT onsuspend([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONTIMEUPDATE), displaybind, bindable, hidden] HRESULT ontimeupdate([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONTIMEUPDATE), displaybind, bindable, hidden] HRESULT ontimeupdate([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONVOLUMECHANGE), displaybind, bindable, hidden] HRESULT onvolumechange([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONVOLUMECHANGE), displaybind, bindable, hidden] HRESULT onvolumechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLELEMENT6_ONWAITING), displaybind, bindable, hidden] HRESULT onwaiting([in] VARIANT v); [propget, id(DISPID_IHTMLELEMENT6_ONWAITING), displaybind, bindable, hidden] HRESULT onwaiting([out, retval] VARIANT *p); [id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES)] HRESULT hasAttributes([out, retval] VARIANT_BOOL *pfHasAttributes); } #define WINE_IHTMLELEMENT6_DISPINTERFACE_DECL \ [id(DISPID_IHTMLELEMENT6_GETATTRIBUTENS)] \ VARIANT getAttributeNS( \ [in] VARIANT *pvarNS, \ [in] BSTR strAttributeName); \ \ [id(DISPID_IHTMLELEMENT6_SETATTRIBUTENS)] \ void setAttributeNS( \ [in] VARIANT *pvarNS, \ [in] BSTR strAttributeName, \ [in] VARIANT *pvarAttributeValue); \ \ [id(DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS)] \ void removeAttributeNS( \ [in] VARIANT *pvarNS, \ [in] BSTR strAttributeName); \ \ [id(DISPID_IHTMLELEMENT6_GETATTRIBUTENODENS)] \ IHTMLDOMAttribute2 *getAttributeNodeNS( \ [in] VARIANT *pvarNS, \ [in] BSTR bstrname); \ \ [id(DISPID_IHTMLELEMENT6_SETATTRIBUTENODENS)] \ IHTMLDOMAttribute2 *setAttributeNodeNS([in] IHTMLDOMAttribute2 *pattr); \ \ [id(DISPID_IHTMLELEMENT6_HASATTRIBUTENS)] \ VARIANT_BOOL hasAttributeNS( \ [in] VARIANT *pvarNS, \ [in] BSTR name); \ \ [id(DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTE)] \ VARIANT ie9_getAttribute([in] BSTR strAttributeName); \ \ [id(DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE)] \ void ie9_setAttribute( \ [in] BSTR strAttributeName, \ [in] VARIANT *pvarAttributeValue); \ \ [id(DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTE)] \ void ie9_removeAttribute([in] BSTR strAttributeName); \ \ [id(DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTENODE)] \ IHTMLDOMAttribute2 *ie9_getAttributeNode([in] BSTR strAttributeName); \ \ [id(DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTENODE)] \ IHTMLDOMAttribute2 *ie9_setAttributeNode([in] IHTMLDOMAttribute2 *pattr); \ \ [id(DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTENODE)] \ IHTMLDOMAttribute2 *ie9_removeAttributeNode([in] IHTMLDOMAttribute2 *pattr); \ \ [id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTE)] \ VARIANT_BOOL ie9_hasAttribute([in] BSTR name); \ \ [id(DISPID_IHTMLELEMENT6_GETELEMENTSBYTAGNAMENS)] \ IHTMLElementCollection *getElementsByTagNameNS( \ [in] VARIANT *varNS, \ [in] BSTR bstrLocalName); \ \ [propget, id(DISPID_IHTMLELEMENT6_IE9_TAGNAME)] \ BSTR ie9_tagName(); \ \ [propget, id(DISPID_IHTMLELEMENT6_IE9_NODENAME)] \ BSTR ie9_nodeName(); \ \ [id(DISPID_IHTMLELEMENT6_GETELEMENTSBYCLASSNAME)] \ IHTMLElementCollection *getElementsByClassName([in] BSTR v); \ \ [id(DISPID_IHTMLELEMENT6_MSMATCHESSELECTOR)] \ VARIANT_BOOL msMatchesSelector([in] BSTR v); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONABORT), displaybind, bindable] \ void onabort(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONABORT), displaybind, bindable] \ VARIANT onabort(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONCANPLAY), displaybind, bindable, hidden] \ void oncanplay(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONCANPLAY), displaybind, bindable, hidden] \ VARIANT oncanplay(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH), displaybind, bindable, hidden] \ void oncanplaythrough(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH), displaybind, bindable, hidden] \ VARIANT oncanplaythrough(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONCHANGE), displaybind, bindable] \ void onchange(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONCHANGE), displaybind, bindable] \ VARIANT onchange(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONDURATIONCHANGE), displaybind, bindable, hidden] \ void ondurationchange(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONDURATIONCHANGE), displaybind, bindable, hidden] \ VARIANT ondurationchange(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONEMPTIED), displaybind, bindable, hidden] \ void onemptied(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONEMPTIED), displaybind, bindable, hidden] \ VARIANT onemptied(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONENDED), displaybind, bindable, hidden] \ void onended(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONENDED), displaybind, bindable, hidden] \ VARIANT onended(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONERROR), displaybind, bindable] \ void onerror(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONERROR), displaybind, bindable] \ VARIANT onerror(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONINPUT), displaybind, bindable, hidden] \ void oninput(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONINPUT), displaybind, bindable, hidden] \ VARIANT oninput(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONLOAD), displaybind, bindable] \ void onload(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONLOAD), displaybind, bindable] \ VARIANT onload(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONLOADEDDATA), displaybind, bindable, hidden] \ void onloadeddata(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONLOADEDDATA), displaybind, bindable, hidden] \ VARIANT onloadeddata(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONLOADEDMETADATA), displaybind, bindable, hidden] \ void onloadedmetadata(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONLOADEDMETADATA), displaybind, bindable, hidden] \ VARIANT onloadedmetadata(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONLOADSTART), displaybind, bindable, hidden] \ void onloadstart(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONLOADSTART), displaybind, bindable, hidden] \ VARIANT onloadstart(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONPAUSE), displaybind, bindable, hidden] \ void onpause(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONPAUSE), displaybind, bindable, hidden] \ VARIANT onpause(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONPLAY), displaybind, bindable, hidden] \ void onplay(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONPLAY), displaybind, bindable, hidden] \ VARIANT onplay(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONPLAYING), displaybind, bindable, hidden] \ void onplaying(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONPLAYING), displaybind, bindable, hidden] \ VARIANT onplaying(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONPROGRESS), displaybind, bindable, hidden] \ void onprogress(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONPROGRESS), displaybind, bindable, hidden] \ VARIANT onprogress(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONRATECHANGE), displaybind, bindable, hidden] \ void onratechange(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONRATECHANGE), displaybind, bindable, hidden] \ VARIANT onratechange(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONRESET), displaybind, bindable] \ void onreset(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONRESET), displaybind, bindable] \ VARIANT onreset(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONSEEKED), displaybind, bindable, hidden] \ void onseeked(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONSEEKED), displaybind, bindable, hidden] \ VARIANT onseeked(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONSEEKING), displaybind, bindable, hidden] \ void onseeking(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONSEEKING), displaybind, bindable, hidden] \ VARIANT onseeking(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONSELECT), displaybind, bindable] \ void onselect(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONSELECT), displaybind, bindable] \ VARIANT onselect(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONSTALLED), displaybind, bindable, hidden] \ void onstalled(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONSTALLED), displaybind, bindable, hidden] \ VARIANT onstalled(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONSUBMIT), displaybind, bindable] \ void onsubmit(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONSUBMIT), displaybind, bindable] \ VARIANT onsubmit(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONSUSPEND), displaybind, bindable, hidden] \ void onsuspend(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONSUSPEND), displaybind, bindable, hidden] \ VARIANT onsuspend(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONTIMEUPDATE), displaybind, bindable, hidden] \ void ontimeupdate(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONTIMEUPDATE), displaybind, bindable, hidden] \ VARIANT ontimeupdate(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONVOLUMECHANGE), displaybind, bindable, hidden] \ void onvolumechange(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONVOLUMECHANGE), displaybind, bindable, hidden] \ VARIANT onvolumechange(); \ \ [propput, id(DISPID_IHTMLELEMENT6_ONWAITING), displaybind, bindable, hidden] \ void onwaiting(VARIANT v); \ \ [propget, id(DISPID_IHTMLELEMENT6_ONWAITING), displaybind, bindable, hidden] \ VARIANT onwaiting(); \ \ [id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES)] \ VARIANT_BOOL ie9_hasAttributes() /***************************************************************************** * IElementTraversal interface */ [ odl, oleautomation, dual, uuid(30510736-98b5-11cf-bb82-00aa00bdce0b) ] interface IElementTraversal : IDispatch { [propget, id(DISPID_IELEMENTTRAVERSAL_FIRSTELEMENTCHILD)] HRESULT firstElementChild([retval, out] IHTMLElement **p); [propget, id(DISPID_IELEMENTTRAVERSAL_LASTELEMENTCHILD)] HRESULT lastElementChild([retval, out] IHTMLElement **p); [propget, id(DISPID_IELEMENTTRAVERSAL_PREVIOUSELEMENTSIBLING)] HRESULT previousElementSibling([retval, out] IHTMLElement **p); [propget, id(DISPID_IELEMENTTRAVERSAL_NEXTELEMENTSIBLING)] HRESULT nextElementSibling([retval, out] IHTMLElement **p); [propget, id(DISPID_IELEMENTTRAVERSAL_CHILDELEMENTCOUNT)] HRESULT childElementCount([retval, out] long *p); } /***************************************************************************** * IElementSelector interface */ [ odl, oleautomation, dual, uuid(30510463-98b5-11cf-bb82-00aa00bdce0b) ] interface IElementSelector : IDispatch { [id(DISPID_IELEMENTSELECTOR_QUERYSELECTOR)] HRESULT querySelector( [in] BSTR v, [out, retval] IHTMLElement **pel); [id(DISPID_IELEMENTSELECTOR_QUERYSELECTORALL)] HRESULT querySelectorAll( [in] BSTR v, [out, retval] IHTMLDOMChildrenCollection **pel); } #define WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL \ [id(DISPID_IELEMENTSELECTOR_QUERYSELECTOR)] \ IHTMLElement *querySelector([in] BSTR v); \ \ [id(DISPID_IELEMENTSELECTOR_QUERYSELECTORALL)] \ IHTMLDOMChildrenCollection *querySelectorAll([in] BSTR v) /***************************************************************************** * IHTMLUniqueName interface */ [ odl, oleautomation, dual, uuid(3050f4d0-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLUniqueName : IDispatch { [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] HRESULT uniqueNumber([retval, out] LONG * p); [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] HRESULT uniqueID([retval, out] BSTR * p); } #define WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL \ [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] \ LONG uniqueNumber(); \ \ [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] \ BSTR uniqueID() #define WINE_IHTMLELEMENT5_DISPINTERFACE_DECL \ [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE)] \ IHTMLDOMAttribute2 *ie8_getAttributeNode([in] BSTR bstrname); \ \ [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE)] \ IHTMLDOMAttribute2 *ie8_setAttributeNode([in] IHTMLDOMAttribute2 *pattr); \ \ [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE)] \ IHTMLDOMAttribute2 *ie8_removeAttributeNode([in] IHTMLDOMAttribute2 *pattr); \ \ [id(DISPID_IHTMLELEMENT5_HASATTRIBUTE)] \ VARIANT_BOOL hasAttribute([in] BSTR name); \ \ [propput, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable] \ void role(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable] \ BSTR role(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \ void ariaBusy(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \ BSTR ariaBusy(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \ void ariaChecked(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \ BSTR ariaChecked(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \ void ariaDisabled(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \ BSTR ariaDisabled(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \ void ariaExpanded(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \ BSTR ariaExpanded(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable]\ void ariaHaspopup(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable] \ BSTR ariaHaspopup(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \ void ariaHidden(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \ BSTR ariaHidden(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \ void ariaInvalid(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \ BSTR ariaInvalid(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \ void ariaMultiselectable(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \ BSTR ariaMultiselectable(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \ void ariaPressed(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \ BSTR ariaPressed(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \ void ariaReadonly(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \ BSTR ariaReadonly(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \ void ariaRequired(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \ BSTR ariaRequired(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \ void ariaSecret(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \ BSTR ariaSecret(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \ void ariaSelected(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \ BSTR ariaSelected(); \ \ [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE)] \ VARIANT ie8_getAttribute([in] BSTR strAttributeName); \ \ [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE)] \ void ie8_setAttribute([in] BSTR strAttributeName,[in] VARIANT AttributeValue); \ \ [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE)] \ VARIANT_BOOL ie8_removeAttribute([in] BSTR strAttributeName); \ \ [propget, id(DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES)] \ IHTMLAttributeCollection3 *ie8_attributes(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \ void ariaValuenow(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \ BSTR ariaValuenow(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \ void ariaPosinset(short v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \ short ariaPosinset(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \ void ariaSetsize(short v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \ short ariaSetsize(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\ void ariaLevel(short v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\ short ariaLevel(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \ void ariaValuemin(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \ BSTR ariaValuemin(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \ void ariaValuemax(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \ BSTR ariaValuemax(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \ void ariaControls(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \ BSTR ariaControls(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \ void ariaDescribedby(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \ BSTR ariaDescribedby(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \ void ariaFlowto(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \ BSTR ariaFlowto(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \ void ariaLabelledby(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \ BSTR ariaLabelledby(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \ void ariaActivedescendant(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \ BSTR ariaActivedescendant(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \ void ariaOwns(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \ BSTR ariaOwns(); \ \ [id(DISPID_IHTMLELEMENT5_HASATTRIBUTES)] \ VARIANT_BOOL hasAttributes(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \ void ariaLive(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \ BSTR ariaLive(); \ \ [propput, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \ void ariaRelevant(BSTR v); \ \ [propget, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \ BSTR ariaRelevant() [ odl, oleautomation, dual, uuid(3050f3f2-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDatabinding : IDispatch { [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)] HRESULT dataFld([in] BSTR v); [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)] HRESULT dataFld([retval, out] BSTR * p); [propput, id(DISPID_IHTMLDATABINDING_DATASRC)] HRESULT dataSrc([in] BSTR v); [propget, id(DISPID_IHTMLDATABINDING_DATASRC)] HRESULT dataSrc([retval, out] BSTR * p); [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] HRESULT dataFormatAs([in] BSTR v); [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] HRESULT dataFormatAs([retval, out] BSTR * p); } #define WINE_IHTMLDATABINDING_DISPINTERFACE_DECL \ [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)] \ void dataFld(BSTR v); \ \ [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)] \ BSTR dataFld(); \ \ [propput, id(DISPID_IHTMLDATABINDING_DATASRC)] \ void dataSrc(BSTR v); \ \ [propget, id(DISPID_IHTMLDATABINDING_DATASRC)] \ BSTR dataSrc(); \ \ [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \ void dataFormatAs(BSTR v); \ \ [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \ BSTR dataFormatAs() #define WINE_HTMLELEMENT_INTERFACES \ interface IHTMLElement; \ interface IHTMLElement2; \ interface IHTMLElement3; \ interface IHTMLElement4; \ interface IHTMLUniqueName; \ interface IHTMLDOMNode; \ interface IHTMLDOMNode2; \ /* interface IHTMLElement5; */ \ interface IHTMLElement6; \ interface IHTMLDOMConstructor \ /* interface IHTMLElement7 */ #define WINE_HTMLELEMENT_DISPINTERFACE_DECL \ WINE_IHTMLELEMENT_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT2_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT3_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT4_DISPINTERFACE_DECL; \ WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL; \ WINE_HTMLDOMNODE_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT5_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT6_DISPINTERFACE_DECL; \ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL #define WINE_HTMLDATAELEMENT_INTERFACES \ interface IHTMLElement; \ interface IHTMLElement2; \ interface IHTMLElement3; \ interface IHTMLElement4; \ interface IHTMLUniqueName; \ interface IHTMLDOMNode; \ interface IHTMLDOMNode2; \ interface IHTMLDatabinding; \ /* interface IHTMLElement5; */ \ interface IHTMLElement6; \ interface IElementSelector; \ interface IHTMLDOMConstructor \ /* interface IHTMLElement7 */ #define WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL \ WINE_IHTMLELEMENT_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT2_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT3_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT4_DISPINTERFACE_DECL; \ WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL; \ WINE_HTMLDOMNODE_DISPINTERFACE_DECL; \ WINE_IHTMLDATABINDING_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT5_DISPINTERFACE_DECL; \ WINE_IHTMLELEMENT6_DISPINTERFACE_DECL; \ WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL; \ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL /***************************************************************************** * IHTMLGenericElement interface */ [ odl, oleautomation, dual, uuid(3050f4b7-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLGenericElement : IDispatch { [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden] HRESULT recordset([out, retval] IDispatch **p); [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)] HRESULT namedRecordset( [in] BSTR dataMember, [in, optional] VARIANT *hierarchy, [out, retval] IDispatch **ppRecordset); } /***************************************************************************** * DispHTMLGenericElement dispinterface */ [ hidden, uuid(3050f563-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLGenericElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden] IDispatch *recordset(); [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)] IDispatch *namedRecordset( [in] BSTR dataMember, [in, optional] VARIANT *hierarchy); } /***************************************************************************** * HTMLGenericElement coclass */ [ noncreatable, uuid(3050f4b8-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLGenericElement { [default] dispinterface DispHTMLGenericElement; [source, default] dispinterface HTMLElementEvents; [source] dispinterface HTMLElementEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLGenericElement; } /***************************************************************************** * IHTMLStyleSheetRule interface */ [ odl, oleautomation, dual, uuid(3050F357-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLStyleSheetRule : IDispatch { [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)] HRESULT selectorText([in] BSTR v); [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)] HRESULT selectorText([retval, out] BSTR *p); [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE)] HRESULT style([retval, out] IHTMLRuleStyle **p); [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)] HRESULT readOnly([retval, out] VARIANT_BOOL *p); } [ hidden, uuid(3050f50e-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLStyleSheetRule { properties: methods: [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)] void selectorText(BSTR v); [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)] BSTR selectorText(); [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE), nonbrowsable] IHTMLRuleStyle* style(); [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)] VARIANT_BOOL readOnly(); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } [ noncreatable, uuid(3050f3ce-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLStyleSheetRule { [default] dispinterface DispHTMLStyleSheetRule; interface IHTMLStyleSheetRule; interface IHTMLDOMConstructor; } /***************************************************************************** * IHTMLStyleSheetRulesCollection interface */ [ odl, oleautomation, dual, uuid(3050F2E5-98B5-11Cf-BB82-00AA00BDCE0B) ] interface IHTMLStyleSheetRulesCollection : IDispatch { [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)] HRESULT length([retval, out] LONG *p); [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)] HRESULT item( [in] LONG index, [retval, out] IHTMLStyleSheetRule **ppHTMLStyleSheetRule); } [ hidden, uuid(3050f52f-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLStyleSheetRulesCollection { properties: methods: [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)] long length(); [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)] IHTMLStyleSheetRule* item([in] long index); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } [ noncreatable, uuid(3050f3cd-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLStyleSheetRulesCollection { [default] dispinterface DispHTMLStyleSheetRulesCollection; interface IHTMLStyleSheetRulesCollection; interface IHTMLDOMConstructor; } [ odl, oleautomation, dual, uuid(3050f7ee-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyleSheetPage : IDispatch { [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)] HRESULT selector([retval, out] BSTR *p); [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)] HRESULT pseudoClass([retval, out] BSTR *p); } [ hidden, uuid(3050f540-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLStyleSheetPage { properties: methods: [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)] BSTR selector(); [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)] BSTR pseudoClass(); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } [ noncreatable, uuid(3050f7ef-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLStyleSheetPage { [default] dispinterface DispHTMLStyleSheetPage; interface IHTMLStyleSheetPage; interface IHTMLDOMConstructor; } [ odl, oleautomation, dual, uuid(3050f7f0-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyleSheetPagesCollection : IDispatch { [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)] HRESULT length([retval, out] LONG *p); [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)] HRESULT item( [in] LONG index, [retval, out] IHTMLStyleSheetPage **ppHTMLStyleSheetPage); } [ hidden, uuid(3050f543-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLStyleSheetPagesCollection { properties: methods: [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)] long length(); [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)] IHTMLStyleSheetPage* item([in] long index); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } [ noncreatable, uuid(3050f7f1-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLStyleSheetPagesCollection { [default] dispinterface DispHTMLStyleSheetPagesCollection; interface IHTMLStyleSheetPagesCollection; interface IHTMLDOMConstructor; } /***************************************************************************** * IHTMLStyleSheet interface */ [ odl, oleautomation, dual, uuid(3050F2E3-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLStyleSheet : IDispatch { [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)] HRESULT title([in] BSTR v); [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)] HRESULT title([retval, out] BSTR *p); [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)] HRESULT parentStyleSheet([retval, out] IHTMLStyleSheet **p); [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)] HRESULT owningElement([retval, out] IHTMLElement **p); [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)] HRESULT disabled([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)] HRESULT readOnly([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)] HRESULT imports([retval, out] IHTMLStyleSheetsCollection **p); [propput, id(DISPID_IHTMLSTYLESHEET_HREF)] HRESULT href([in] BSTR v); [propget, id(DISPID_IHTMLSTYLESHEET_HREF)] HRESULT href([retval, out] BSTR *p); [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)] HRESULT type([retval, out] BSTR *p); [propget, id(DISPID_IHTMLSTYLESHEET_ID)] HRESULT id([retval, out] BSTR *p); [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)] HRESULT addImport( [in] BSTR bstrURL, [defaultvalue(-1), in] LONG lIndex, [retval, out] LONG *plIndex); [id(DISPID_IHTMLSTYLESHEET_ADDRULE)] HRESULT addRule( [in] BSTR bstrSelector, [in] BSTR bstrStyle, [defaultvalue(-1), in] LONG lIndex, [retval, out] LONG *plNewIndex); [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)] HRESULT removeImport([in] LONG lIndex); [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)] HRESULT removeRule([in] LONG lIndex); [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)] HRESULT media([in] BSTR v); [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)] HRESULT media([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)] HRESULT cssText([in] BSTR v); [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)] HRESULT cssText([retval, out] BSTR *p); [propget, id(DISPID_IHTMLSTYLESHEET_RULES)] HRESULT rules([retval, out] IHTMLStyleSheetRulesCollection **p); } /***************************************************************************** * IHTMLStyleSheet2 interface */ [ odl, oleautomation, dual, uuid(3050f3d1-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyleSheet2 : IDispatch { [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)] HRESULT pages([retval, out] IHTMLStyleSheetPagesCollection **p); [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)] HRESULT addPageRule( [in] BSTR bstrSelector, [in] BSTR bstrStyle, [defaultvalue(-1), in] LONG lIndex, [retval, out] LONG *plNewIndex); } [ hidden, uuid(3050f58d-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLStyleSheet { properties: methods: [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)] void title(BSTR v); [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)] BSTR title(); [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)] IHTMLStyleSheet* parentStyleSheet(); [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)] IHTMLElement* owningElement(); [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)] void disabled(VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)] VARIANT_BOOL disabled(); [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)] VARIANT_BOOL readOnly(); [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)] IHTMLStyleSheetsCollection* imports(); [propput, id(DISPID_IHTMLSTYLESHEET_HREF)] void href(BSTR v); [propget, id(DISPID_IHTMLSTYLESHEET_HREF)] BSTR href(); [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)] BSTR type(); [propget, id(DISPID_IHTMLSTYLESHEET_ID)] BSTR id(); [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)] LONG addImport( [in] BSTR bstrURL, [defaultvalue(-1), in] LONG lIndex); [id(DISPID_IHTMLSTYLESHEET_ADDRULE)] LONG addRule( [in] BSTR bstrSelector, [in] BSTR bstrStyle, [defaultvalue(-1), in] LONG lIndex); [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)] void removeImport([in] LONG lIndex); [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)] void removeRule([in] LONG lIndex); [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)] void media(BSTR v); [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)] BSTR media(); [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)] void cssText(BSTR v); [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)] BSTR cssText(); [propget, id(DISPID_IHTMLSTYLESHEET_RULES)] IHTMLStyleSheetRulesCollection* rules(); [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)] IHTMLStyleSheetPagesCollection* pages(); [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)] LONG addPageRule( [in] BSTR bstrSelector, [in] BSTR bstrStyle, [defaultvalue(-1), in] LONG lIndex); } [ noncreatable, uuid(3050f2e4-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLStyleSheet { [default] dispinterface DispHTMLStyleSheet; interface IHTMLStyleSheet; interface IHTMLStyleSheet2; } /***************************************************************************** * IHTMLStyleSheetsCollection interface */ [ odl, oleautomation, dual, uuid(3050F37E-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLStyleSheetsCollection : IDispatch { [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)] HRESULT length([retval, out] LONG *p); [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **p); [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)] HRESULT item( [in] VARIANT *pvarIndex, [retval, out] VARIANT *pvarResult); } /***************************************************************************** * DispHTMLStyleSheetsCollection dispinterface */ [ hidden, uuid(3050f547-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLStyleSheetsCollection { properties: methods: [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)] long length(); [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM), hidden, restricted] IUnknown *_newEnum(); [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)] VARIANT item([in] VARIANT *pvarIndex); [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] IDispatch *constructor(); } /***************************************************************************** * IHTMLLinkElement interface */ [ odl, oleautomation, dual, uuid(3050f205-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLLinkElement : IDispatch { [propput, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable] HRESULT href([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable] HRESULT href([out, retval] BSTR *p); [propput, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable] HRESULT rel([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable] HRESULT rel([out, retval] BSTR *p); [propput, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable] HRESULT rev([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable] HRESULT rev([out, retval] BSTR *p); [propput, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable] HRESULT type([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable] HRESULT type([out, retval] BSTR *p); [propget, id(DISPID_IHTMLLINKELEMENT_READYSTATE)] HRESULT readyState([out, retval] BSTR *p); [propput, id(DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable] HRESULT onload([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLLINKELEMENT_STYLESHEET)] HRESULT styleSheet([out, retval] IHTMLStyleSheet **p); [propput, id(DISPID_IHTMLLINKELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLLINKELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([out, retval] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable] HRESULT media([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable] HRESULT media([out, retval] BSTR *p); } /***************************************************************************** * IHTMLLinkElement2 interface */ [ odl, oleautomation, dual, uuid(3050f4e5-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLLinkElement2 : IDispatch { [propput, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable] HRESULT target([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable] HRESULT target([out, retval] BSTR *p); } /***************************************************************************** * IHTMLLinkElement3 interface */ [ odl, oleautomation, dual, uuid(3050f81e-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLLinkElement3 : IDispatch { [propput, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable] HRESULT charset([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable] HRESULT charset([out, retval] BSTR *p); [propput, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable] HRESULT hreflang([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable] HRESULT hreflang([out, retval] BSTR *p); } /***************************************************************************** * IHTMLLinkElement4 interface */ [ odl, oleautomation, dual, uuid(3051043a-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLLinkElement4 : IDispatch { [propput, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)] HRESULT href([in] BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)] HRESULT href([retval, out] BSTR * p); } /***************************************************************************** * DispHTMLLinkElement dispinterface */ [ hidden, uuid(3050f524-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLLinkElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable] void href(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable] BSTR href(); [propput, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable] void rel(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable] BSTR rel(); [propput, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable] void rev(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable] BSTR rev(); [propput, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable] void type(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable] BSTR type(); [propput, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable] void onload(VARIANT v); [propget, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable] VARIANT onload(); [propput, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable] void onerror(VARIANT v); [propget, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable] VARIANT onerror(); [propget, id(DISPID_IHTMLLINKELEMENT_STYLESHEET)] IHTMLStyleSheet *styleSheet(); [propput, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable] void media(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable] BSTR media(); [propput, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable] void target(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable] BSTR target(); [propput, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable] void charset(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable] BSTR charset(); [propput, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable] void hreflang(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable] BSTR hreflang(); [propput, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)] void ie8_href(BSTR v); [propget, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)] BSTR ie8_href(); } /***************************************************************************** * HTMLLinkElement coclass */ [ noncreatable, uuid(3050f277-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLLinkElement { [default] dispinterface DispHTMLLinkElement; /* [source, default] dispinterface HTMLLinkElementEvents; */ /* [source] dispinterface HTMLLinkElementEvents2; */ WINE_HTMLELEMENT_INTERFACES; interface IHTMLLinkElement; interface IHTMLLinkElement2; interface IHTMLLinkElement3; interface IHTMLLinkElement4; /* interface IHTMLLinkElement5; */ } /***************************************************************************** * IHTMLTxtRange interface */ [ odl, oleautomation, dual, uuid(3050f220-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTxtRange : IDispatch { [propget, id(DISPID_IHTMLTXTRANGE_HTMLTEXT)] HRESULT htmlText([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTXTRANGE_TEXT)] HRESULT text([in] BSTR v); [propget, id(DISPID_IHTMLTXTRANGE_TEXT)] HRESULT text([retval, out] BSTR *p); [id(DISPID_IHTMLTXTRANGE_PARENTELEMENT)] HRESULT parentElement([retval, out] IHTMLElement **parent); [id(DISPID_IHTMLTXTRANGE_DUPLICATE)] HRESULT duplicate([retval, out] IHTMLTxtRange **Duplicate); [id(DISPID_IHTMLTXTRANGE_INRANGE)] HRESULT inRange( [in] IHTMLTxtRange *Range, [retval, out] VARIANT_BOOL *InRange); [id(DISPID_IHTMLTXTRANGE_ISEQUAL)] HRESULT isEqual( [in] IHTMLTxtRange *Range, [retval, out] VARIANT_BOOL *IsEqual); [id(DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW)] HRESULT scrollIntoView([defaultvalue(-1), in] VARIANT_BOOL fStart); [id(DISPID_IHTMLTXTRANGE_COLLAPSE)] HRESULT collapse([defaultvalue(-1), in] VARIANT_BOOL Start); [id(DISPID_IHTMLTXTRANGE_EXPAND)] HRESULT expand( [in] BSTR Unit, [retval, out] VARIANT_BOOL *Success); [id(DISPID_IHTMLTXTRANGE_MOVE)] HRESULT move( [in] BSTR Unit, [defaultvalue(1), in] LONG Count, [retval, out] LONG *ActualCount); [id(DISPID_IHTMLTXTRANGE_MOVESTART)] HRESULT moveStart( [in] BSTR Unit, [defaultvalue(1), in] LONG Count, [retval, out] LONG *ActualCount); [id(DISPID_IHTMLTXTRANGE_MOVEEND)] HRESULT moveEnd( [in] BSTR Unit, [defaultvalue(1), in] LONG Count, [retval, out] LONG *ActualCount); [id(DISPID_IHTMLTXTRANGE_SELECT)] HRESULT select(); [id(DISPID_IHTMLTXTRANGE_PASTEHTML)] HRESULT pasteHTML([in] BSTR html); [id(DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT)] HRESULT moveToElementText([in] IHTMLElement *element); [id(DISPID_IHTMLTXTRANGE_SETENDPOINT)] HRESULT setEndPoint( [in] BSTR how, [in] IHTMLTxtRange *SourceRange); [id(DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS)] HRESULT compareEndPoints( [in] BSTR how, [in] IHTMLTxtRange *SourceRange, [retval, out] LONG *ret); [id(DISPID_IHTMLTXTRANGE_FINDTEXT)] HRESULT findText( [in] BSTR String, [defaultvalue(1073741823), in] LONG count, [defaultvalue(0), in] LONG Flags, [retval, out] VARIANT_BOOL *Success); [id(DISPID_IHTMLTXTRANGE_MOVETOPOINT)] HRESULT moveToPoint( [in] LONG x, [in] LONG y); [id(DISPID_IHTMLTXTRANGE_GETBOOKMARK)] HRESULT getBookmark([retval, out] BSTR *Boolmark); [id(DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK)] HRESULT moveToBookmark( [in] BSTR Bookmark, [retval, out] VARIANT_BOOL *Success); [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED)] HRESULT queryCommandSupported( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED)] HRESULT queryCommandEnabled( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE)] HRESULT queryCommandState( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM)] HRESULT queryCommandIndeterm( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT)] HRESULT queryCommandText( [in] BSTR cmdID, [retval, out] BSTR *pcmdText); [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE)] HRESULT queryCommandValue( [in] BSTR cmdID, [retval, out] VARIANT *pcmdValue); [id(DISPID_IHTMLTXTRANGE_EXECCOMMAND)] HRESULT execCommand( [in] BSTR cmdID, [defaultvalue(0), in] VARIANT_BOOL showUI, [optional, in] VARIANT value, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP)] HRESULT execCommandShowHelp( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); } /***************************************************************************** * IHTMLDOMRange interface */ [ odl, oleautomation, dual, uuid(305104ae-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMRange : IDispatch { [propget, id(DISPID_IHTMLDOMRANGE_STARTCONTAINER)] HRESULT startContainer([out, retval] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMRANGE_STARTOFFSET)] HRESULT startOffset([out, retval] long *p); [propget, id(DISPID_IHTMLDOMRANGE_ENDCONTAINER)] HRESULT endContainer([out, retval] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOMRANGE_ENDOFFSET)] HRESULT endOffset([out, retval] long *p); [propget, id(DISPID_IHTMLDOMRANGE_COLLAPSED)] HRESULT collapsed([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLDOMRANGE_COMMONANCESTORCONTAINER)] HRESULT commonAncestorContainer([out, retval] IHTMLDOMNode **p); [id(DISPID_IHTMLDOMRANGE_SETSTART)] HRESULT setStart( [in] IDispatch *refNode, [in] long offset); [id(DISPID_IHTMLDOMRANGE_SETEND)] HRESULT setEnd( [in] IDispatch *refNode, [in] long offset); [id(DISPID_IHTMLDOMRANGE_SETSTARTBEFORE)] HRESULT setStartBefore([in] IDispatch* refNode); [id(DISPID_IHTMLDOMRANGE_SETSTARTAFTER)] HRESULT setStartAfter([in] IDispatch *refNode); [id(DISPID_IHTMLDOMRANGE_SETENDBEFORE)] HRESULT setEndBefore([in] IDispatch *refNode); [id(DISPID_IHTMLDOMRANGE_SETENDAFTER)] HRESULT setEndAfter([in] IDispatch *refNode); [id(DISPID_IHTMLDOMRANGE_COLLAPSE)] HRESULT collapse([in] VARIANT_BOOL toStart); [id(DISPID_IHTMLDOMRANGE_SELECTNODE)] HRESULT selectNode([in] IDispatch *refNode); [id(DISPID_IHTMLDOMRANGE_SELECTNODECONTENTS)] HRESULT selectNodeContents([in] IDispatch *refNode); [id(DISPID_IHTMLDOMRANGE_COMPAREBOUNDARYPOINTS)] HRESULT compareBoundaryPoints( [in] short how, [in] IDispatch *sourceRange, [out, retval] long *compareResult); [id(DISPID_IHTMLDOMRANGE_DELETECONTENTS)] HRESULT deleteContents(); [id(DISPID_IHTMLDOMRANGE_EXTRACTCONTENTS)] HRESULT extractContents([out, retval] IDispatch **ppDocumentFragment); [id(DISPID_IHTMLDOMRANGE_CLONECONTENTS)] HRESULT cloneContents([out, retval] IDispatch **ppDocumentFragment); [id(DISPID_IHTMLDOMRANGE_INSERTNODE)] HRESULT insertNode([in] IDispatch *newNode); [id(DISPID_IHTMLDOMRANGE_SURROUNDCONTENTS)] HRESULT surroundContents([in] IDispatch *newParent); [id(DISPID_IHTMLDOMRANGE_CLONERANGE)] HRESULT cloneRange([out, retval] IHTMLDOMRange **ppClonedRange); [id(DISPID_IHTMLDOMRANGE_TOSTRING)] HRESULT toString([out, retval] BSTR *pRangeString); [id(DISPID_IHTMLDOMRANGE_DETACH)] HRESULT detach(); [id(DISPID_IHTMLDOMRANGE_GETCLIENTRECTS)] HRESULT getClientRects([out, retval] IHTMLRectCollection **ppRectCol); [id(DISPID_IHTMLDOMRANGE_GETBOUNDINGCLIENTRECT)] HRESULT getBoundingClientRect([out, retval] IHTMLRect **ppRect); } [ noncreatable, uuid(3050f37f-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLStyleSheetsCollection { [default] interface IHTMLStyleSheetsCollection; } /***************************************************************************** * IHTMLFormElement interface */ [ odl, oleautomation, dual, uuid(3050F1F7-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLFormElement : IDispatch { [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)] HRESULT action([in] BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)] HRESULT action([retval, out] BSTR *p); [propput, id(DISPID_IHTMLFORMELEMENT_DIR)] HRESULT dir([in] BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_DIR)] HRESULT dir([retval, out] BSTR *p); [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)] HRESULT encoding([in] BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)] HRESULT encoding([retval, out] BSTR *p); [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)] HRESULT method([in] BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)] HRESULT method([retval, out] BSTR *p); [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)] HRESULT elements([retval, out] IDispatch **p); [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)] HRESULT target([in] BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)] HRESULT target([retval, out] BSTR *p); [propput, id(DISPID_IHTMLFORMELEMENT_NAME)] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_NAME)] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)] HRESULT onsubmit([in] VARIANT v); [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)] HRESULT onsubmit([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)] HRESULT onreset([in] VARIANT v); [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)] HRESULT onreset([retval, out] VARIANT *p); [id(DISPID_IHTMLFORMELEMENT_SUBMIT)] HRESULT submit(); [id(DISPID_IHTMLFORMELEMENT_RESET)] HRESULT reset(); [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)] HRESULT length([in] LONG v); [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)] HRESULT length([retval, out] LONG *p); [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **p); [id(DISPID_IHTMLFORMELEMENT_ITEM)] HRESULT item( [optional, in] VARIANT name, [optional, in] VARIANT index, [retval, out] IDispatch **pdisp); [id(DISPID_IHTMLFORMELEMENT_TAGS)] HRESULT tags( [in] VARIANT tagName, [retval, out] IDispatch **pdisp); } /***************************************************************************** * DispHTMLFormElement dispinterface */ [ hidden, uuid(3050F510-98B5-11CF-BB82-00AA00BDCE0B) ] dispinterface DispHTMLFormElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)] void action(BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)] BSTR action(); [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)] void encoding(BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)] BSTR encoding(); [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)] void method(BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)] BSTR method(); [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)] IDispatch *elements(); [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)] void target(BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)] BSTR target(); [propput, id(DISPID_IHTMLFORMELEMENT_NAME)] void name(BSTR v); [propget, id(DISPID_IHTMLFORMELEMENT_NAME)] BSTR name(); [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)] void onsubmit(VARIANT v); [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)] VARIANT onsubmit(); [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)] void onreset(VARIANT v); [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)] VARIANT onreset(); [id(DISPID_IHTMLFORMELEMENT_SUBMIT)] void submit(); [id(DISPID_IHTMLFORMELEMENT_RESET)] void reset(); [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)] void length(long v); [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)] long length(); [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM), hidden, restricted] IUnknown *_newEnum(); [id(DISPID_IHTMLFORMELEMENT_ITEM)] IDispatch *item(VARIANT name, VARIANT index); [id(DISPID_IHTMLFORMELEMENT_TAGS)] IDispatch *tags(VARIANT tagName); } [ hidden, uuid(3050F364-98B5-11CF-BB82-00AA00BDCE0B) ] dispinterface HTMLFormElementEvents { properties: methods: [id(DISPID_HTMLELEMENTEVENTS_ONHELP)] VARIANT_BOOL onhelp(); [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)] VARIANT_BOOL onclick(); [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)] VARIANT_BOOL ondblclick(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)] VARIANT_BOOL onkeypress(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)] void onkeydown(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)] void onkeyup(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)] void onmouseout(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)] void onmouseover(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)] void onmousemove(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)] void onmousedown(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)] void onmouseup(); [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)] VARIANT_BOOL onselectstart(); [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)] void onfilterchange(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)] VARIANT_BOOL ondragstart(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)] void onafterupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)] VARIANT_BOOL onrowexit(); [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)] void onrowenter(); [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)] void ondatasetchanged(); [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)] void ondataavailable(); [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)] void ondatasetcomplete(); [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)] void onlosecapture(); [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)] void onpropertychange(); [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)] void onscroll(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)] void onfocus(); [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)] void onblur(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)] void onresize(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)] VARIANT_BOOL ondrag(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)] void ondragend(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)] VARIANT_BOOL ondragenter(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)] VARIANT_BOOL ondragover(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)] void ondragleave(); [id(DISPID_HTMLELEMENTEVENTS_ONDROP)] VARIANT_BOOL ondrop(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)] VARIANT_BOOL onbeforecut(); [id(DISPID_HTMLELEMENTEVENTS_ONCUT)] VARIANT_BOOL oncut(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)] VARIANT_BOOL onbeforecopy(); [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)] VARIANT_BOOL oncopy(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)] VARIANT_BOOL onbeforepaste(); [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)] VARIANT_BOOL onpaste(); [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu(); [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)] void onrowsdelete(); [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)] void onrowsinserted(); [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)] void oncellchange(); [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)] void onreadystatechange(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)] void onbeforeeditfocus(); [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)] void onlayoutcomplete(); [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)] void onpage(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)] void onmove(); [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)] VARIANT_BOOL onmovestart(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)] void onmoveend(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)] VARIANT_BOOL onresizestart(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)] void onresizeend(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)] void onmouseenter(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)] void onmouseleave(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel(); [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)] void onactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)] void ondeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)] void onfocusin(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)] void onfocusout(); [id(DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT)] VARIANT_BOOL onsubmit(); [id(DISPID_HTMLFORMELEMENTEVENTS_ONRESET)] VARIANT_BOOL onreset(); } interface IHTMLEventObj; [ hidden, uuid(3050F614-98B5-11CF-BB82-00AA00BDCE0B) ] dispinterface HTMLFormElementEvents2 { properties: methods: [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)] VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)] VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)] VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)] VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)] void onkeydown([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)] void onkeyup([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)] void onmouseout([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)] void onmouseover([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)] void onmousemove([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)] void onmousedown([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)] void onmouseup([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)] VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)] void onfilterchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)] VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)] void onafterupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)] VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)] void onrowenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)] void ondatasetchanged([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)] void ondataavailable([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)] void ondatasetcomplete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)] void onlosecapture([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)] void onpropertychange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)] void onscroll([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)] void onfocus([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)] void onblur([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)] void onresize([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)] VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)] void ondragend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)] VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)] VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)] void ondragleave([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)] VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)] VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)] VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)] VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)] VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)] VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)] VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)] void onrowsdelete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)] void onrowsinserted([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)] void oncellchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)] void onreadystatechange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)] void onlayoutcomplete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)] void onpage([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)] void onmouseenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)] void onmouseleave([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)] void onactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)] void ondeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)] void onfocusin([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)] void onfocusout([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)] void onmove([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)] VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)] void onmoveend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)] VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)] void onresizeend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT)] VARIANT_BOOL onsubmit([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLFORMELEMENTEVENTS2_ONRESET)] VARIANT_BOOL onreset([in] IHTMLEventObj* pEvtObj); } [ noncreatable, uuid(3050F251-98B5-11CF-BB82-00AA00BDCE0B) ] coclass HTMLFormElement { [default] dispinterface DispHTMLFormElement; [source, default] dispinterface HTMLFormElementEvents; [source] dispinterface HTMLFormElementEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLFormElement; /* interface IHTMLFormElement2; */ /* interface IHTMLFormElement3; */ /* interface IHTMLSubmitData; */ /* interface IHTMLFormElement4; */ } /***************************************************************************** * IHTMLTextContainer interface */ [ odl, oleautomation, dual, uuid(3050f230-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTextContainer : IDispatch { [id(DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE)] HRESULT createControlRange([retval, out] IDispatch **range); [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT), displaybind, bindable] HRESULT scrollHeight([retval, out] LONG *p); [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH), displaybind, bindable] HRESULT scrollWidth([retval, out] LONG *p); [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable] HRESULT scrollTop([in] LONG v); [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable] HRESULT scrollTop([retval, out] LONG *p); [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable] HRESULT scrollLeft([in] LONG v); [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable] HRESULT scrollLeft([retval, out] LONG *p); [propput, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable] HRESULT onscroll([in] VARIANT v); [propget, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable] HRESULT onscroll([retval, out] VARIANT *p); } /***************************************************************************** * IHTMLImgElement interface */ [ odl, oleautomation, dual, uuid(3050F240-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLImgElement : IDispatch { [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP)] HRESULT isMap([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP)] HRESULT isMap([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP)] HRESULT useMap([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP)] HRESULT useMap([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)] HRESULT mimeType([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)] HRESULT fileSize([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)] HRESULT fileCreatedDate([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)] HRESULT fileModifiedDate([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)] HRESULT fileUpdatedDate([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)] HRESULT protocol([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_HREF)] HRESULT href([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)] HRESULT nameProp([retval, out] BSTR *p); [propput, id(DISPID_IHTMLIMGELEMENT_BORDER)] HRESULT border([in] VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_BORDER)] HRESULT border([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE)] HRESULT vspace([in] LONG v); [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE)] HRESULT vspace([retval, out] LONG *p); [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE)] HRESULT hspace([in] LONG v); [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE)] HRESULT hspace([retval, out] LONG *p); [propput, id(DISPID_IHTMLIMGELEMENT_ALT)] HRESULT alt([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_ALT)] HRESULT alt([retval, out] BSTR *p); [propput, id(DISPID_IHTMLIMGELEMENT_SRC)] HRESULT src([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_SRC)] HRESULT src([retval, out] BSTR *p); [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC)] HRESULT lowsrc([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC)] HRESULT lowsrc([retval, out] BSTR *p); [propput, id(DISPID_IHTMLIMGELEMENT_VRML)] HRESULT vrml([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_VRML)] HRESULT vrml([retval, out] BSTR *p); [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC)] HRESULT dynsrc([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC)] HRESULT dynsrc([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_READYSTATE)] HRESULT readyState([retval, out] BSTR *p); [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)] HRESULT complete([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLIMGELEMENT_LOOP)] HRESULT loop([in] VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_LOOP)] HRESULT loop([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN)] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN)] HRESULT align([retval, out] BSTR *p); [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD)] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD)] HRESULT onload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR)] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR)] HRESULT onerror([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT)] HRESULT onabort([in] VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT)] HRESULT onabort([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLIMGELEMENT_NAME)] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_NAME)] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)] HRESULT width([in] LONG v); [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)] HRESULT width([retval, out] LONG *p); [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)] HRESULT height([in] LONG v); [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)] HRESULT height([retval, out] LONG *p); [propput, id(DISPID_IHTMLIMGELEMENT_START)] HRESULT start([in] BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_START)] HRESULT start([retval, out] BSTR *p); } /***************************************************************************** * IHTMLImageElementFactory interface */ [ odl, oleautomation, dual, uuid(3050F38E-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLImageElementFactory : IDispatch { [id(DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE)] HRESULT create( [optional, in] VARIANT width, [optional, in] VARIANT height, [retval, out] IHTMLImgElement **elem); } /***************************************************************************** * DispHTMLImg interface */ [ hidden, uuid(3050f51c-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLImg { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable] void isMap(VARIANT_BOOL v); [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable] VARIANT_BOOL isMap(); [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable] void useMap(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable] BSTR useMap(); [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)] BSTR mimeType(); [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)] BSTR fileSize(); [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)] BSTR fileCreatedDate(); [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)] BSTR fileModifiedDate(); [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)] BSTR fileUpdatedDate(); [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)] BSTR protocol(); [propget, id(DISPID_IHTMLIMGELEMENT_HREF)] BSTR href(); [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)] BSTR nameProp(); [propput, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable] void border(VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable] VARIANT border(); [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable] void vspace(LONG v); [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable] LONG vspace(); [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable] void hspace(LONG v); [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable] LONG hspace(); [propput, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable] void alt(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable] BSTR alt(); [propput, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable] void src(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable] BSTR src(); [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable] void lowsrc(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable] BSTR lowsrc(); [propput, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable] void vrml(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable] BSTR vrml(); [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable] void dynsrc(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable] BSTR dynsrc(); [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)] VARIANT_BOOL complete(); [propput, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable] void loop(VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable] VARIANT loop(); [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable] void align(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable] BSTR align(); [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable] void onload(VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable] VARIANT onload(); [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable] void onerror(VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable] VARIANT onerror(); [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable] void onabort(VARIANT v); [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable] VARIANT onabort(); [propput, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)] void width(LONG v); [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)] LONG width(); [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)] void height(LONG v); [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)] LONG height(); [propput, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable] void start(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable] BSTR start(); [propput, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable] void longDesc(BSTR v); [propget, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable] BSTR longDesc(); } /***************************************************************************** * HTMLImg coclass */ [ noncreatable, uuid(3050f241-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLImg { [default] dispinterface DispHTMLImg; /* [source, default] dispinterface HTMLImgEvents; */ /* [source] dispinterface HTMLImgEvents2; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLImgElement; /* interface IHTMLImgElement2; */ /* interface IHTMLImgElement3; */ /* interface IHTMLImgElement4; */ /* interface IHTMLMSImgElement; */ } /***************************************************************************** * IHTMLXMLHttpRequest interface */ [ odl, oleautomation, dual, uuid(3051040a-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLXMLHttpRequest : IDispatch { [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)] HRESULT readyState([out, retval] long *p); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)] HRESULT responseBody([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)] HRESULT responseText([out, retval] BSTR *p); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)] HRESULT responseXML([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)] HRESULT status([out, retval] long *p); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)] HRESULT statusText([out, retval] BSTR *p); [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([out, retval] VARIANT *p); [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)] HRESULT abort(); [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)] HRESULT open( [in] BSTR bstrMethod, [in] BSTR bstrUrl, [in] VARIANT varAsync, [in, optional] VARIANT varUser, [in, optional] VARIANT varPassword); [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)] HRESULT send([in, optional] VARIANT varBody); [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)] HRESULT getAllResponseHeaders([out, retval] BSTR *p); [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)] HRESULT getResponseHeader( [in] BSTR bstrHeader, [out, retval] BSTR *p); [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)] HRESULT setRequestHeader( [in] BSTR bstrHeader, [in] BSTR bstrValue); } /***************************************************************************** * IHTMLXMLHttpRequest2 interface */ [ odl, oleautomation, dual, uuid(30510482-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLXMLHttpRequest2 : IDispatch { [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)] HRESULT timeout([in] long v); [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)] HRESULT timeout([out, retval] long *p); [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable] HRESULT ontimeout([in] VARIANT v); [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable] HRESULT ontimeout([out, retval] VARIANT *p); } /***************************************************************************** * IHTMLXMLHttpRequestFactory interface */ [ odl, oleautomation, dual, uuid(3051040c-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLXMLHttpRequestFactory : IDispatch { [id(DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE)] HRESULT create([out, retval] IHTMLXMLHttpRequest **p); } /***************************************************************************** * DispHTMLXMLHttpRequest dispinterface */ [ hidden, uuid(3050f596-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLXMLHttpRequest { properties: methods: [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)] long readyState(); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)] VARIANT responseBody(); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)] BSTR responseText(); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)] IDispatch *responseXML(); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)] long status(); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)] BSTR statusText(); [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable] void onreadystatechange(VARIANT v); [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable] VARIANT onreadystatechange(); [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)] void abort(); [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)] void open( [in] BSTR bstrMethod, [in] BSTR bstrUrl, [in] VARIANT varAsync, [in, optional] VARIANT varUser, [in, optional] VARIANT varPassword); [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)] void send([in, optional] VARIANT varBody); [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)] BSTR getAllResponseHeaders(); [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)] BSTR getResponseHeader([in] BSTR bstrHeader); [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)] void setRequestHeader( [in] BSTR bstrHeader, [in] BSTR bstrValue); [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)] void timeout(long v); [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)] long timeout(); [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable] void ontimeout(VARIANT v); [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable] VARIANT ontimeout(); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)] void addEventListener( [in] BSTR type, [in] IDispatch *listener, [in] VARIANT_BOOL useCapture); [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)] void removeEventListener( [in] BSTR type, [in] IDispatch *listener, [in] VARIANT_BOOL useCapture); [id(DISPID_IEVENTTARGET_DISPATCHEVENT)] VARIANT_BOOL dispatchEvent([in] IDOMEvent *evt); } /***************************************************************************** * HTMLXMLHttpRequest */ [ noncreatable, uuid(3051040b-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLXMLHttpRequest { [default] dispinterface DispHTMLXMLHttpRequest; /* [source, default] dispinterface HTMLXMLHttpRequestEvents; */ interface IHTMLXMLHttpRequest; interface IHTMLXMLHttpRequest2; interface IHTMLDOMConstructor; interface IEventTarget; } /***************************************************************************** * IHTMLControlElement interface */ [ odl, oleautomation, dual, uuid(3050f4e9-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLControlElement : IDispatch { [propput, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable] HRESULT tabIndex([in] short v); [propget, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable] HRESULT tabIndex([retval, out] short * p); [id(DISPID_IHTMLCONTROLELEMENT_FOCUS)] HRESULT focus(); [propput, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable] HRESULT accessKey([in] BSTR v); [propget, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable] HRESULT accessKey([retval, out] BSTR * p); [propput, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable] HRESULT onblur([in] VARIANT v); [propget, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable] HRESULT onblur([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable] HRESULT onfocus([in] VARIANT v); [propget, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable] HRESULT onfocus([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable] HRESULT onresize([in] VARIANT v); [propget, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable] HRESULT onresize([retval, out] VARIANT * p); [id(DISPID_IHTMLCONTROLELEMENT_BLUR)] HRESULT blur(); [id(DISPID_IHTMLCONTROLELEMENT_ADDFILTER)] HRESULT addFilter([in] IUnknown* pUnk); [id(DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER)] HRESULT removeFilter([in] IUnknown* pUnk); [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT), displaybind, bindable] HRESULT clientHeight([retval, out] LONG * p); [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH), displaybind, bindable] HRESULT clientWidth([retval, out] LONG * p); [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTTOP), displaybind, bindable] HRESULT clientTop([retval, out] LONG * p); [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT), displaybind, bindable] HRESULT clientLeft([retval, out] LONG * p); } /***************************************************************************** * IHTMLBodyElement interface */ [ odl, oleautomation, dual, uuid(3050f1d8-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLBodyElement : IDispatch { [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable] HRESULT background([in] BSTR v); [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable] HRESULT background([retval, out] BSTR *p); [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable] HRESULT bgProperties([in] BSTR v); [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable] HRESULT bgProperties([retval, out] BSTR *p); [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable] HRESULT leftMargin([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable] HRESULT leftMargin([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable] HRESULT topMargin([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable] HRESULT topMargin([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable] HRESULT rightMargin([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable] HRESULT rightMargin([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable] HRESULT bottomMargin([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable] HRESULT bottomMargin([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable] HRESULT noWrap([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable] HRESULT noWrap([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable] HRESULT bgColor([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable] HRESULT bgColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable] HRESULT text([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable] HRESULT text([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable] HRESULT link([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable] HRESULT link([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable] HRESULT vLink([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable] HRESULT vLink([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable] HRESULT aLink([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable] HRESULT aLink([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable] HRESULT onload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable] HRESULT onunload([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable] HRESULT onunload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable] HRESULT scroll([in] BSTR v); [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable] HRESULT scroll([retval, out] BSTR *p); [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable] HRESULT onselect([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable] HRESULT onselect([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable] HRESULT onbeforeunload([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable] HRESULT onbeforeunload([retval, out] VARIANT *p); [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)] HRESULT createTextRange([retval, out] IHTMLTxtRange **range); } /***************************************************************************** * IHTMLBodyElement2 interface */ [ odl, oleautomation, dual, uuid(3050f5c5-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLBodyElement2 : IDispatch { [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable] HRESULT onbeforeprint([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable] HRESULT onbeforeprint([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable] HRESULT onafterprint([in] VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable] HRESULT onafterprint([retval, out] VARIANT *p); } [ hidden, uuid(3050f507-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLBody { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable] void background(BSTR v); [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable] BSTR background(); [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable] void bgProperties(BSTR v); [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable] BSTR bgProperties(); [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable] void leftMargin(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable] VARIANT leftMargin(); [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable] void topMargin(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable] VARIANT topMargin(); [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable] void rightMargin(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable] VARIANT rightMargin(); [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable] void bottomMargin(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable] VARIANT bottomMargin(); [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable] void noWrap(VARIANT_BOOL v); [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable] VARIANT_BOOL noWrap(); [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable] void bgColor(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable] VARIANT bgColor(); [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable] void text(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable] VARIANT text(); [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable] void link(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable] VARIANT link(); [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable] void vLink(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable] VARIANT vLink(); [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable] void aLink(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable] VARIANT aLink(); [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable] void onload(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable] VARIANT onload(); [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable] void onunload(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable] VARIANT onunload(); [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable] void scroll(BSTR v); [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable] BSTR scroll(); [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable] void onselect(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable] VARIANT onselect(); [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable] void onbeforeunload(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable] VARIANT onbeforeunload(); [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)] IHTMLTxtRange* createTextRange(); [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable] void onbeforeprint(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable] VARIANT onbeforeprint(); [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable] void onafterprint(VARIANT v); [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable] VARIANT onafterprint(); } [ uuid(3050f24a-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLBody { [default] dispinterface DispHTMLBody; [source, default] dispinterface HTMLTextContainerEvents; [source] dispinterface HTMLTextContainerEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLTextContainer; interface IHTMLBodyElement; interface IHTMLBodyElement2; /* interface IHTMLBodyElement3; */ /* interface IHTMLBodyElement4; */ /* interface IHTMLBodyElement5; */ } /***************************************************************************** * IHTMLAnchorElement interface */ [ odl, oleautomation, dual, uuid(3050f1da-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLAnchorElement : IDispatch { [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable] HRESULT href([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable] HRESULT href([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable] HRESULT target([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable] HRESULT target([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable] HRESULT rel([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable] HRESULT rel([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable] HRESULT rev([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable] HRESULT rev([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable] HRESULT urn([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable] HRESULT urn([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable] HRESULT Methods([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable] HRESULT Methods([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)] HRESULT host([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)] HRESULT host([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)] HRESULT hostname([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)] HRESULT hostname([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)] HRESULT pathname([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)] HRESULT pathname([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)] HRESULT port([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)] HRESULT port([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)] HRESULT protocol([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)] HRESULT protocol([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)] HRESULT search([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)] HRESULT search([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)] HRESULT hash([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)] HRESULT hash([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable] HRESULT onblur([in] VARIANT v); [propget, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable] HRESULT onblur([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable] HRESULT onfocus([in] VARIANT v); [propget, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable] HRESULT onfocus([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable] HRESULT accessKey([in] BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable] HRESULT accessKey([retval, out] BSTR *p); [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)] HRESULT protocolLong([retval, out] BSTR *p); [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)] HRESULT mimeType([retval, out] BSTR *p); [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)] HRESULT nameProp([retval, out] BSTR *p); [propput, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable] HRESULT tabIndex([in] short v); [propget, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable] HRESULT tabIndex([retval, out] short *p); [id(DISPID_IHTMLANCHORELEMENT_FOCUS)] HRESULT focus(); [id(DISPID_IHTMLANCHORELEMENT_BLUR)] HRESULT blur(); } /***************************************************************************** * DispHTMLAnchorElement dispinterface */ [ hidden, uuid(3050f502-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLAnchorElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable] void href(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable] BSTR href(); [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable] void target(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable] BSTR target(); [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable] void rel(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable] BSTR rel(); [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable] void rev(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable] BSTR rev(); [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable] void urn(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable] BSTR urn(); [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable] void Methods(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable] BSTR Methods(); [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)] void host(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)] BSTR host(); [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)] void hostname(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)] BSTR hostname(); [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)] void pathname(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)] BSTR pathname(); [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)] void port(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)] BSTR port(); [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)] void protocol(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)] BSTR protocol(); [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)] void search(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)] BSTR search(); [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)] void hash(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)] BSTR hash(); [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)] BSTR protocolLong(); [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)] BSTR mimeType(); [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)] BSTR nameProp(); [propput, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable] void charset(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable] BSTR charset(); [propput, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable] void coords(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable] BSTR coords(); [propput, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable] void hreflang(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable] BSTR hreflang(); [propput, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable] void shape(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable] BSTR shape(); [propput, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable] void type(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable] BSTR type(); [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)] void ie8_shape(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)] BSTR ie8_shape(); [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)] void ie8_coords(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)] BSTR ie8_coords(); [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)] void ie8_href(BSTR v); [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)] BSTR ie8_href(); } /***************************************************************************** * HTMLAnchorElement coclass */ [ noncreatable, uuid(3050f248-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLAnchorElement { [default] dispinterface DispHTMLAnchorElement; /* [source, default] dispinterface HTMLAnchorEvents; */ /* [source] dispinterface HTMLAnchorEvents2; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLAnchorElement; /* interface IHTMLAnchorElement2; */ /* interface IHTMLAnchorElement3; */ } /***************************************************************************** * IHTMLAreaElement interface */ [ odl, oleautomation, dual, uuid(3050f265-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLAreaElement : IDispatch { [propput, id(DISPID_IHTMLAREAELEMENT_SHAPE)] HRESULT shape([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_SHAPE)] HRESULT shape([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_COORDS)] HRESULT coords([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_COORDS)] HRESULT coords([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_HREF)] HRESULT href([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_HREF)] HRESULT href([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_TARGET)] HRESULT target([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_TARGET)] HRESULT target([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_ALT)] HRESULT alt([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_ALT)] HRESULT alt([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_NOHREF)] HRESULT noHref([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLAREAELEMENT_NOHREF)] HRESULT noHref([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLAREAELEMENT_HOST)] HRESULT host([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_HOST)] HRESULT host([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_HOSTNAME)] HRESULT hostname([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_HOSTNAME)] HRESULT hostname([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_PATHNAME)] HRESULT pathname([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_PATHNAME)] HRESULT pathname([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_PORT)] HRESULT port([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_PORT)] HRESULT port([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_PROTOCOL)] HRESULT protocol([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_PROTOCOL)] HRESULT protocol([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_SEARCH)] HRESULT search([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_SEARCH)] HRESULT search([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_HASH)] HRESULT hash([in] BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_HASH)] HRESULT hash([retval, out] BSTR *p); [propput, id(DISPID_IHTMLAREAELEMENT_ONBLUR), displaybind, bindable] HRESULT onblur([in] VARIANT v); [propget, id(DISPID_IHTMLAREAELEMENT_ONBLUR), displaybind, bindable] HRESULT onblur([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLAREAELEMENT_ONFOCUS), displaybind, bindable] HRESULT onfocus([in] VARIANT v); [propget, id(DISPID_IHTMLAREAELEMENT_ONFOCUS), displaybind, bindable] HRESULT onfocus([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLAREAELEMENT_TABINDEX), displaybind, bindable] HRESULT tabIndex([in] short v); [propget, id(DISPID_IHTMLAREAELEMENT_TABINDEX), displaybind, bindable] HRESULT tabIndex([retval, out] short *p); [id(DISPID_IHTMLAREAELEMENT_FOCUS)] HRESULT focus(); [id(DISPID_IHTMLAREAELEMENT_BLUR)] HRESULT blur(); } /***************************************************************************** * DispHTMLAreaElement dispinterface */ [ hidden, uuid(3050f503-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLAreaElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] IDispatch* constructor(); [propput, id(DISPID_IHTMLAREAELEMENT_SHAPE)] void shape(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_SHAPE)] BSTR shape(); [propput, id(DISPID_IHTMLAREAELEMENT_COORDS)] void coords(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_COORDS)] BSTR coords(); [propput, id(DISPID_IHTMLAREAELEMENT_HREF)] void href(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_HREF)] BSTR href(); [propput, id(DISPID_IHTMLAREAELEMENT_TARGET)] void target(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_TARGET)] BSTR target(); [propput, id(DISPID_IHTMLAREAELEMENT_ALT)] void alt(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_ALT)] BSTR alt(); [propput, id(DISPID_IHTMLAREAELEMENT_NOHREF)] void noHref(VARIANT_BOOL v); [propget, id(DISPID_IHTMLAREAELEMENT_NOHREF)] VARIANT_BOOL noHref(); [propput, id(DISPID_IHTMLAREAELEMENT_HOST)] void host(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_HOST)] BSTR host(); [propput, id(DISPID_IHTMLAREAELEMENT_HOSTNAME)] void hostname(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_HOSTNAME)] BSTR hostname(); [propput, id(DISPID_IHTMLAREAELEMENT_PATHNAME)] void pathname(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_PATHNAME)] BSTR pathname(); [propput, id(DISPID_IHTMLAREAELEMENT_PORT)] void port(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_PORT)] BSTR port(); [propput, id(DISPID_IHTMLAREAELEMENT_PROTOCOL)] void protocol(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_PROTOCOL)] BSTR protocol(); [propput, id(DISPID_IHTMLAREAELEMENT_SEARCH)] void search(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_SEARCH)] BSTR search(); [propput, id(DISPID_IHTMLAREAELEMENT_HASH)] void hash(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT_HASH)] BSTR hash(); [propput, id(DISPID_IHTMLAREAELEMENT2_IE8_SHAPE)] void ie8_shape(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT2_IE8_SHAPE)] BSTR ie8_shape(); [propput, id(DISPID_IHTMLAREAELEMENT2_IE8_COORDS)] void ie8_coords(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT2_IE8_COORDS)] BSTR ie8_coords(); [propput, id(DISPID_IHTMLAREAELEMENT2_IE8_HREF)] void ie8_href(BSTR v); [propget, id(DISPID_IHTMLAREAELEMENT2_IE8_HREF)] BSTR ie8_href(); } /***************************************************************************** * HTMLAreaElement coclass */ [ noncreatable, uuid(3050f283-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLAreaElement { [default] dispinterface DispHTMLAreaElement; /* [source, default] dispinterface HTMLAreaEvents; */ /* [source] dispinterface HTMLAreaEvents2; */ WINE_HTMLELEMENT_INTERFACES; interface IHTMLAreaElement; /* interface IHTMLAreaElement2; */ } /***************************************************************************** * IHTMLLabelElement interface */ [ odl, oleautomation, dual, uuid(3050f32a-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLLabelElement : IDispatch { [propput, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable] HRESULT htmlFor([in] BSTR v); [propget, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable] HRESULT htmlFor([out, retval] BSTR *p); [propput, id(DISPID_IHTMLLABELELEMENT_ACCESSKEY), displaybind, bindable] HRESULT accessKey([in] BSTR v); [propget, id(DISPID_IHTMLLABELELEMENT_ACCESSKEY), displaybind, bindable] HRESULT accessKey([out, retval] BSTR *p); } /***************************************************************************** * IHTMLLabelElement2 interface */ [ odl, oleautomation, dual, uuid(3050f832-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLLabelElement2 : IDispatch { [propget, id(DISPID_IHTMLLABELELEMENT2_FORM)] HRESULT form([out, retval] IHTMLFormElement **p); } /***************************************************************************** * DispHTMLLabelElement dispinterface */ [ hidden, uuid(3050f522-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLLabelElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable] void htmlFor(BSTR v); [propget, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable] BSTR htmlFor(); [propget, id(DISPID_IHTMLLABELELEMENT2_FORM)] IHTMLFormElement *form(); } /***************************************************************************** * HTMLLabelElement coclass */ [ noncreatable, uuid(3050f32b-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLLabelElement { [default] dispinterface DispHTMLLabelElement; /* [source, default] dispinterface HTMLLabelEvents; */ /* [source] dispinterface HTMLLabelEvents2; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLLabelElement; interface IHTMLLabelElement2; } /***************************************************************************** * IHTMLElementCollection interface */ [ odl, oleautomation, dual, uuid(3050F21F-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLElementCollection : IDispatch { [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)] HRESULT toString([retval, out] BSTR *String); [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)] HRESULT length([in] LONG v); [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)] HRESULT length([retval, out] LONG *p); [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **p); [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)] HRESULT item( [optional, in] VARIANT name, [optional, in] VARIANT index, [retval, out] IDispatch **pdisp); [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)] HRESULT tags( [in] VARIANT tagName, [retval, out] IDispatch **pdisp); } /***************************************************************************** * DispHTMLElementCollection dispinterface */ [ hidden, uuid(3050f56b-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLElementCollection { properties: methods: [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)] BSTR toString(); [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)] void length(LONG v); [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)] LONG length(); [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM), hidden, restricted] IUnknown *_newEnum(); [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)] IDispatch *item( [in, optional] VARIANT name, [in, optional] VARIANT index); [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)] IDispatch *tags( [in] VARIANT tagName); [id(DISPID_IHTMLELEMENTCOLLECTION2_URNS)] IDispatch *urns([in] VARIANT urn); [id(DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM)] IDispatch *namedItem([in] BSTR name); } /***************************************************************************** * IHTMLSelectElement interface */ [ odl, oleautomation, dual, uuid(3050f244-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLSelectElement : IDispatch { [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable] HRESULT size([in] LONG v); [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable] HRESULT size([retval, out] LONG *p); [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable] HRESULT multiple([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable] HRESULT multiple([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)] HRESULT options([retval, out] IDispatch **p); [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable] HRESULT onchange([in] VARIANT v); [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable] HRESULT onchange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)] HRESULT selectedIndex([in] LONG v); [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)] HRESULT selectedIndex([retval, out] LONG *p); [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable] HRESULT type([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable] HRESULT value([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)] HRESULT form([retval, out] IHTMLFormElement **p); [id(DISPID_IHTMLSELECTELEMENT_ADD)] HRESULT add( [in] IHTMLElement *element, [optional, in] VARIANT before); [id(DISPID_IHTMLSELECTELEMENT_REMOVE)] HRESULT remove([defaultvalue(-1), in] LONG index); [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)] HRESULT length([in] LONG v); [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)] HRESULT length([retval, out] LONG *p); [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted] HRESULT _newEnum([retval, out] IUnknown **p); [id(DISPID_IHTMLSELECTELEMENT_ITEM)] HRESULT item( [optional, in] VARIANT name, [optional, in] VARIANT index, [retval, out] IDispatch **pdisp); [id(DISPID_IHTMLSELECTELEMENT_TAGS)] HRESULT tags( [in] VARIANT tagName, [retval, out] IDispatch **pdisp); } /***************************************************************************** * DispHTMLSelectElement dispinterface */ [ hidden, uuid(3050f531-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLSelectElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable] void size(LONG v); [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable] LONG size(); [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable] void multiple(VARIANT_BOOL v); [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable] VARIANT_BOOL multiple(); [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable] BSTR name(); [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)] IDispatch *options(); [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable] void onchange(VARIANT v); [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable] VARIANT onchange(); [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)] void selectedIndex(LONG v); [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)] LONG selectedIndex(); [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable] BSTR type(); [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable] void value(BSTR v); [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable] BSTR value(); [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)] IHTMLFormElement *form(); [id(DISPID_IHTMLSELECTELEMENT_ADD)] void add( [in] IHTMLElement *element, [in, optional] VARIANT before); [id(DISPID_IHTMLSELECTELEMENT_REMOVE)] void remove([in, defaultvalue(-1)] LONG index); [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)] void length(LONG v); [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)] LONG length(); [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted] IUnknown *_newEnum(); [id(DISPID_IHTMLSELECTELEMENT_ITEM)] IDispatch *item( [in, optional] VARIANT name, [in, optional] VARIANT index); [id(DISPID_IHTMLSELECTELEMENT_TAGS)] IDispatch *tags([in] VARIANT tagName); [id(DISPID_IHTMLSELECTELEMENT2_URNS)] IDispatch *urns([in] VARIANT urn); [id(DISPID_IHTMLSELECTELEMENT4_NAMEDITEM)] IDispatch *namedItem([in] BSTR name); } /***************************************************************************** * HTMLSelectElement coclass */ [ noncreatable, uuid(3050f245-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLSelectElement { [default] dispinterface DispHTMLSelectElement; /* [source, default] dispinterface HTMLSelectElementEvents; */ /* [source] dispinterface HTMLSelectElementEvents2; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLSelectElement; /* interface IHTMLSelectElement2; */ /* interface IHTMLSelectElement4; */ /* interface IHTMLSelectElement5; */ /* interface IHTMLSelectElement6; */ } /***************************************************************************** * IHTMLSelectionObject interface */ [ odl, oleautomation, dual, uuid(3050F25A-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLSelectionObject : IDispatch { [id(DISPID_IHTMLSELECTIONOBJECT_CREATERANGE)] HRESULT createRange([retval, out] IDispatch **range); [id(DISPID_IHTMLSELECTIONOBJECT_EMPTY)] HRESULT empty(); [id(DISPID_IHTMLSELECTIONOBJECT_CLEAR)] HRESULT clear(); [propget, id(DISPID_IHTMLSELECTIONOBJECT_TYPE)] HRESULT type([retval, out] BSTR *p); } /***************************************************************************** * IHTMLSelectionObject2 interface */ [ odl, oleautomation, dual, uuid(3050f7ec-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLSelectionObject2 : IDispatch { [id(DISPID_IHTMLSELECTIONOBJECT2_CREATERANGECOLLECTION)] HRESULT createRangeCollection([out, retval] IDispatch **rangeCollection); [propget, id(DISPID_IHTMLSELECTIONOBJECT2_TYPEDETAIL)] HRESULT typeDetail([out, retval] BSTR *p); } /***************************************************************************** * IHTMLSelection interface */ [ odl, oleautomation, dual, uuid(305104b6-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLSelection : IDispatch { [propget, id(DISPID_IHTMLSELECTION_ANCHORNODE)] HRESULT anchorNode([out, retval] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLSELECTION_ANCHOROFFSET)] HRESULT anchorOffset([out, retval] long *p); [propget, id(DISPID_IHTMLSELECTION_FOCUSNODE)] HRESULT focusNode([out, retval] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLSELECTION_FOCUSOFFSET)] HRESULT focusOffset([out, retval] long *p); [propget, id(DISPID_IHTMLSELECTION_ISCOLLAPSED)] HRESULT isCollapsed([out, retval] VARIANT_BOOL *p); [id(DISPID_IHTMLSELECTION_COLLAPSE)] HRESULT collapse( [in] IDispatch *parentNode, [in] long offset); [id(DISPID_IHTMLSELECTION_COLLAPSETOSTART)] HRESULT collapseToStart(); [id(DISPID_IHTMLSELECTION_COLLAPSETOEND)] HRESULT collapseToEnd(); [id(DISPID_IHTMLSELECTION_SELECTALLCHILDREN)] HRESULT selectAllChildren([in] IDispatch *parentNode); [id(DISPID_IHTMLSELECTION_DELETEFROMDOCUMENT)] HRESULT deleteFromDocument(); [propget, id(DISPID_IHTMLSELECTION_RANGECOUNT)] HRESULT rangeCount([out, retval] long *p); [id(DISPID_IHTMLSELECTION_GETRANGEAT)] HRESULT getRangeAt( [in] long index, [out, retval] IHTMLDOMRange **ppRange); [id(DISPID_IHTMLSELECTION_ADDRANGE)] HRESULT addRange([in] IDispatch *range); [id(DISPID_IHTMLSELECTION_REMOVERANGE)] HRESULT removeRange([in] IDispatch *range); [id(DISPID_IHTMLSELECTION_REMOVEALLRANGES)] HRESULT removeAllRanges(); [id(DISPID_IHTMLSELECTION_TOSTRING)] HRESULT toString([out, retval] BSTR *pSelectionString); } /***************************************************************************** * IHTMLOptionElement interface */ [ odl, oleautomation, dual, uuid(3050F211-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLOptionElement : IDispatch { [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)] HRESULT selected([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)] HRESULT selected([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)] HRESULT value([retval, out] BSTR *p); [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)] HRESULT defaultSelected([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)] HRESULT defaultSelected([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)] HRESULT index([in] LONG v); [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)] HRESULT index([retval, out] LONG *p); [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)] HRESULT text([in] BSTR v); [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)] HRESULT text([retval, out] BSTR *p); [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)] HRESULT form([retval, out] IHTMLFormElement **p); } [ odl, oleautomation, dual, uuid(3050f820-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLOptionElement3 : IDispatch { [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable] HRESULT label([in] BSTR v); [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable] HRESULT label([retval, out] BSTR * p); } /***************************************************************************** * IHTMLOptionElementFactory interface */ [ odl, oleautomation, dual, uuid(3050F38C-98B5-11Cf-BB82-00AA00BDCE0B) ] interface IHTMLOptionElementFactory : IDispatch { [id(DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE)] HRESULT create( [optional, in] VARIANT text, [optional, in] VARIANT value, [optional, in] VARIANT defaultselected, [optional, in] VARIANT selected, [retval, out] IHTMLOptionElement **optelem); } /***************************************************************************** * DispHTMLOptionElement dispinterface */ [ hidden, uuid(3050f52b-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLOptionElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)] void selected(VARIANT_BOOL v); [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)] VARIANT_BOOL selected(); [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)] void value(BSTR v); [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)] BSTR value(); [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)] void defaultSelected(VARIANT_BOOL v); [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)] VARIANT_BOOL defaultSelected(); [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)] void index(LONG v); [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)] LONG index(); [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)] void text(BSTR v); [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)] BSTR text(); [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)] IHTMLFormElement *form(); [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable] void label(BSTR v); [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable] BSTR label(); } [ noncreatable, uuid(3050f24d-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLOptionElement { [default] dispinterface DispHTMLOptionElement; [source, default] dispinterface HTMLElementEvents; [source] dispinterface HTMLElementEvents2; WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLOptionElement; interface IHTMLOptionElement3; /* interface IHTMLOptionElement4; */ } /***************************************************************************** * IHTMLInputElement interface */ [ odl, oleautomation, dual, uuid(3050f5d2-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLInputElement : IDispatch { [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)] HRESULT type([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)] HRESULT type([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable] HRESULT value([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)] HRESULT status([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)] HRESULT status([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)] HRESULT form([retval, out] IHTMLFormElement **p); [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable] HRESULT size([in] LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable] HRESULT size([retval, out] LONG *p); [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable] HRESULT maxLength([in] LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable] HRESULT maxLength([retval, out] LONG *p); [id(DISPID_IHTMLINPUTELEMENT_SELECT)] HRESULT select(); [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable] HRESULT onchange([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable] HRESULT onchange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable] HRESULT onselect([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable] HRESULT onselect([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] HRESULT defaultValue([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] HRESULT defaultValue([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable] HRESULT readOnly([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable] HRESULT readOnly([retval, out] VARIANT_BOOL *p); [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)] HRESULT createTextRange([retval, out] IHTMLTxtRange **range); [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable] HRESULT indeterminate([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable] HRESULT indeterminate([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable] HRESULT defaultChecked([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable] HRESULT defaultChecked([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable] HRESULT checked([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable] HRESULT checked([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable] HRESULT border([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable] HRESULT border([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable] HRESULT vspace([in] LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable] HRESULT vspace([retval, out] LONG *p); [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable] HRESULT hspace([in] LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable] HRESULT hspace([retval, out] LONG *p); [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable] HRESULT alt([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable] HRESULT alt([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable] HRESULT src([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable] HRESULT src([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable] HRESULT lowsrc([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable] HRESULT lowsrc([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable] HRESULT vrml([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable] HRESULT vrml([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable] HRESULT dynsrc([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable] HRESULT dynsrc([retval, out] BSTR *p); [propget, id(DISPID_IHTMLINPUTELEMENT_READYSTATE)] HRESULT readyState([retval, out] BSTR *p); [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)] HRESULT complete([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable] HRESULT loop([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable] HRESULT loop([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable] HRESULT align([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable] HRESULT onload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable] HRESULT onabort([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable] HRESULT onabort([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)] HRESULT width([in] LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)] HRESULT width([retval, out] LONG *p); [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)] HRESULT height([in] LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)] HRESULT height([retval, out] LONG *p); [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable] HRESULT start([in] BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable] HRESULT start([retval, out] BSTR *p); } /***************************************************************************** * IHTMLInputTextElement interface */ [ odl, oleautomation, dual, uuid(3050f2a6-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLInputTextElement : IDispatch { [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_TYPE)] HRESULT type([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable] HRESULT value([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)] HRESULT status([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)] HRESULT status([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_FORM)] HRESULT form([retval, out] IHTMLFormElement **p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] HRESULT defaultValue([in] BSTR v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] HRESULT defaultValue([retval, out] BSTR *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable] HRESULT size([in] LONG v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable] HRESULT size([retval, out] LONG *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable] HRESULT maxLength([in] LONG v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable] HRESULT maxLength([retval, out] LONG *p); [id(DISPID_IHTMLINPUTTEXTELEMENT_SELECT)] HRESULT select(); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable] HRESULT onchange([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable] HRESULT onchange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable] HRESULT onselect([in] VARIANT v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable] HRESULT onselect([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable] HRESULT readOnly([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable] HRESULT readOnly([retval, out] VARIANT_BOOL *p); [id(DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE)] HRESULT createTextRange([retval, out] IHTMLTxtRange **range); } /***************************************************************************** * IHTMLInputTextElement2 interface */ [ odl, oleautomation, dual, uuid(3050f2d2-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLInputTextElement2 : IDispatch { [propput, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART)] HRESULT selectionStart([in] long v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART)] HRESULT selectionStart([out, retval] long *p); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND)] HRESULT selectionEnd([in] long v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND)] HRESULT selectionEnd([out, retval] long *p); [id(DISPID_IHTMLINPUTTEXTELEMENT2_SETSELECTIONRANGE)] HRESULT setSelectionRange([in] long start, [in] long end); } [ hidden, uuid(3050f57d-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLInputElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)] void type(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)] BSTR type(); [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable] void value(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable] BSTR value(); [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)] void status(VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)] VARIANT_BOOL status(); [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)] IHTMLFormElement *form(); [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable] void size(LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable] LONG size(); [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable] void maxLength(LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable] LONG maxLength(); [id(DISPID_IHTMLINPUTELEMENT_SELECT)] void select(); [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable] void onchange(VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable] VARIANT onchange(); [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable] void onselect(VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable] VARIANT onselect(); [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] void defaultValue(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] BSTR defaultValue(); [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable] void readOnly(VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable] VARIANT_BOOL readOnly(); [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)] IHTMLTxtRange *createTextRange(); [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable] void indeterminate(VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable] VARIANT_BOOL indeterminate(); [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable] void defaultChecked(VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable] VARIANT_BOOL defaultChecked(); [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable] void checked(VARIANT_BOOL v); [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable] VARIANT_BOOL checked(); [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable] void border(VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable] VARIANT border(); [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable] void vspace(LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable] LONG vspace(); [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable] void hspace(LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable] LONG hspace(); [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable] void alt(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable] BSTR alt(); [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable] void src(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable] BSTR src(); [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable] void lowsrc(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable] BSTR lowsrc(); [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable] void vrml(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable] BSTR vrml(); [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable] void dynsrc(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable] BSTR dynsrc(); [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)] VARIANT_BOOL complete(); [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable] void loop(VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable] VARIANT loop(); [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable] void align(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable] BSTR align(); [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable] void onload(VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable] VARIANT onload(); [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable] void onerror(VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable] VARIANT onerror(); [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable] void onabort(VARIANT v); [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable] VARIANT onabort(); [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)] void width(LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)] LONG width(); [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)] void height(LONG v); [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)] LONG height(); [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable] void start(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable] BSTR start(); [propput, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable] void accept(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable] BSTR accept(); [propput, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable] void useMap(BSTR v); [propget, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable] BSTR useMap(); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART)] void selectionStart(long v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART)] long selectionStart(); [propput, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND)] void selectionEnd(long v); [propget, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND)] long selectionEnd(); [id(DISPID_IHTMLINPUTTEXTELEMENT2_SETSELECTIONRANGE)] void setSelectionRange([in] long start, [in] long end); } /***************************************************************************** * HTMLInputElement coclass */ [ noncreatable, uuid(3050f5d8-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLInputElement { [default] dispinterface DispHTMLInputElement; /* [source, default] dispinterface HTMLInputTextElementEvents; */ /* [source] dispinterface HTMLInputTextElementEvents2; */ /* [source] dispinterface HTMLOptionButtonElementEvents; */ /* [source] dispinterface HTMLButtonElementEvents; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLInputElement; /* interface IHTMLInputElement2; */ interface IHTMLInputTextElement; interface IHTMLInputTextElement2; /* interface IHTMLInputHiddenElement; */ /* interface IHTMLInputButtonElement; */ /* interface IHTMLInputFileElement; */ /* interface IHTMLOptionButtonElement; */ /* interface IHTMLInputImage; */ /* interface IHTMLInputElement3; */ /* interface IHTMLInputRangeElement; */ } /***************************************************************************** * IHTMLTextAreaElement interface */ [ odl, oleautomation, dual, uuid(3050f2aa-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTextAreaElement : IDispatch { [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)] HRESULT type([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable] HRESULT value([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)] HRESULT status([in] VARIANT v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)] HRESULT status([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)] HRESULT form([retval, out] IHTMLFormElement **p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] HRESULT defaultValue([in] BSTR v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] HRESULT defaultValue([retval, out] BSTR *p); [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)] HRESULT select(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable] HRESULT onchange([in] VARIANT v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable] HRESULT onchange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable] HRESULT onselect([in] VARIANT v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable] HRESULT onselect([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable] HRESULT readOnly([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable] HRESULT readOnly([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable] HRESULT rows([in] LONG v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable] HRESULT rows([retval, out] LONG *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable] HRESULT cols([in] LONG v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable] HRESULT cols([retval, out] LONG *p); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable] HRESULT wrap([in] BSTR v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable] HRESULT wrap([retval, out] BSTR *p); [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)] HRESULT createTextRange([retval, out] IHTMLTxtRange **range); } /***************************************************************************** * DispHTMLTextAreaElement dispinterface */ [ hidden, uuid(3050f521-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLTextAreaElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)] BSTR type(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable] void value(BSTR v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable] BSTR value(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)] void status(VARIANT v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)] VARIANT status(); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)] IHTMLFormElement *form(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] void defaultValue(BSTR v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden] BSTR defaultValue(); [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)] void select(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable] void onchange(VARIANT v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable] VARIANT onchange(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable] void onselect(VARIANT v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable] VARIANT onselect(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable] void readOnly(VARIANT_BOOL v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable] VARIANT_BOOL readOnly(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable] void rows(LONG v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable] LONG rows(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable] void cols(LONG v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable] LONG cols(); [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable] void wrap(BSTR v); [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable] BSTR wrap(); [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)] IHTMLTxtRange *createTextRange(); } /***************************************************************************** * HTMLTextAreaElement coclass */ [ noncreatable, uuid(3050f2ac-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLTextAreaElement { [default] dispinterface DispHTMLTextAreaElement; /* [source, default] dispinterface HTMLInputTextElementEvents; */ /* [source] dispinterface HTMLInputTextElementEvents2; */ [source] dispinterface HTMLTextContainerEvents; [source] dispinterface HTMLTextContainerEvents2; WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLTextContainer; interface IHTMLTextAreaElement; /* interface IHTMLTextAreaElement2; */ } /***************************************************************************** * IHTMLButtonElement interface */ [ odl, oleautomation, dual, uuid(3050f2bb-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLButtonElement : IDispatch { [propget, id(DISPID_IHTMLBUTTONELEMENT_TYPE)] HRESULT type([out, retval] BSTR *p); [propput, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable] HRESULT value([out, retval] BSTR *p); [propput, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable] HRESULT name([out, retval] BSTR *p); [propput, id(DISPID_IHTMLBUTTONELEMENT_STATUS)] HRESULT status([in] VARIANT v); [propget, id(DISPID_IHTMLBUTTONELEMENT_STATUS)] HRESULT status([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLBUTTONELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLBUTTONELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLBUTTONELEMENT_FORM)] HRESULT form([out, retval] IHTMLFormElement **p); [id(DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE)] HRESULT createTextRange([out, retval] IHTMLTxtRange **range); } /***************************************************************************** * DispHTMLButtonElement dispinterface */ [ hidden, uuid(3050f51f-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLButtonElement { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propget, id(DISPID_IHTMLBUTTONELEMENT_TYPE)] BSTR type(); [propput, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable] void value(BSTR v); [propget, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable] BSTR value(); [propput, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLBUTTONELEMENT_STATUS)] void status(VARIANT v); [propget, id(DISPID_IHTMLBUTTONELEMENT_STATUS)] VARIANT status(); [propget, id(DISPID_IHTMLBUTTONELEMENT_FORM)] IHTMLFormElement *form(); [id(DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE)] IHTMLTxtRange *createTextRange(); } /***************************************************************************** * HTMLButtonElement coclass */ [ noncreatable, uuid(3050f2c6-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLButtonElement { [default] dispinterface DispHTMLButtonElement; /* [source, default] dispinterface HTMLButtonElementEvents; */ /* [source] dispinterface HTMLButtonElementEvents2; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLTextContainer; interface IHTMLButtonElement; /* interface IHTMLButtonElement2; */ } /***************************************************************************** * IHTMLHtmlElement interface */ [ odl, oleautomation, dual, uuid(3050f81c-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLHtmlElement : IDispatch { [propput, id(DISPID_IHTMLHTMLELEMENT_VERSION), displaybind, bindable] HRESULT version([in] BSTR v); [propget, id(DISPID_IHTMLHTMLELEMENT_VERSION), displaybind, bindable] HRESULT version([out, retval] BSTR *p); } /***************************************************************************** * IHTMLHeadElement interface */ [ odl, oleautomation, dual, uuid(3050f81d-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLHeadElement : IDispatch { [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable] HRESULT profile([in] BSTR v); [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable] HRESULT profile([retval, out] BSTR *p); } /***************************************************************************** * IHTMLHeadElement2 interface */ [ odl, oleautomation, dual, uuid(3051042f-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLHeadElement2 : IDispatch { [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable] HRESULT profile([in] BSTR v); [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable] HRESULT profile([retval, out] BSTR *p); } /***************************************************************************** * IHTMLTitleElement interface */ [ odl, oleautomation, dual, uuid(3050f322-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTitleElement : IDispatch { [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable] HRESULT text([in] BSTR v); [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable] HRESULT text([retval, out] BSTR *p); } /***************************************************************************** * IHTMLMetaElement interface */ [ odl, oleautomation, dual, uuid(3050f203-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLMetaElement : IDispatch { [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable] HRESULT httpEquiv([in] BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable] HRESULT httpEquiv([out, retval] BSTR *p); [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable] HRESULT content([in] BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable] HRESULT content([out, retval] BSTR *p); [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable] HRESULT name([out, retval] BSTR *p); [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable] HRESULT url([in] BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable] HRESULT url([out, retval] BSTR *p); [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable] HRESULT charset([in] BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable] HRESULT charset([out, retval] BSTR *p); } /***************************************************************************** * IHTMLMetaElement2 interface */ [ odl, oleautomation, dual, uuid(3050f81f-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLMetaElement2 : IDispatch { [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable] HRESULT scheme([in] BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable] HRESULT scheme([out, retval] BSTR *p); } /***************************************************************************** * IHTMLMetaElement3 interface */ [ odl, oleautomation, dual, uuid(30510495-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLMetaElement3 : IDispatch { [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)] HRESULT url([in] BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)] HRESULT url([out, retval] BSTR *p); } /***************************************************************************** * DispHTMLHtmlElement interface */ [ hidden, uuid(3050f560-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLHtmlElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLHTMLELEMENT_VERSION), displaybind, bindable] void version(BSTR v); [propget, id(DISPID_IHTMLHTMLELEMENT_VERSION), displaybind, bindable] BSTR version(); } /***************************************************************************** * HTMLHtmlElement coclass */ [ noncreatable, uuid(3050f491-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLHtmlElement { [default] dispinterface DispHTMLHtmlElement; [source, default] dispinterface HTMLElementEvents; [source] dispinterface HTMLElementEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLHtmlElement; } /***************************************************************************** * DispHTMLHeadElement interface */ [ hidden, uuid(3050f561-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLHeadElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable] void profile(BSTR v); [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable] BSTR profile(); [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable] void ie8_profile(BSTR v); [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable] BSTR ie8_profile(); } /***************************************************************************** * HTMLHeadElement coclass */ [ noncreatable, uuid(3050f493-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLHeadElement { [default] dispinterface DispHTMLHeadElement; [source, default] dispinterface HTMLElementEvents; [source] dispinterface HTMLElementEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLHeadElement; interface IHTMLHeadElement2; } /***************************************************************************** * DispHTMLTitleElement interface */ [ hidden, uuid(3050f516-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLTitleElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable] void text(BSTR v); [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable] BSTR text(); } /***************************************************************************** * HTMLTitleElement coclass */ [ noncreatable, uuid(3050f284-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLTitleElement { [default] dispinterface DispHTMLTitleElement; [source, default] dispinterface HTMLElementEvents; [source] dispinterface HTMLElementEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLTitleElement; } /***************************************************************************** * DispHTMLMetaElement dispinterface */ [ hidden, uuid(3050f517-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLMetaElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable] void httpEquiv(BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable] BSTR httpEquiv(); [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable] void content(BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable] BSTR content(); [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable] void url(BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable] BSTR url(); [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable] void charset(BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable] BSTR charset(); [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable] void scheme(BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable] BSTR scheme(); [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)] void ie8_url(BSTR v); [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)] BSTR ie8_url(); } /***************************************************************************** * HTMLMetaElement coclass */ [ noncreatable, uuid(3050f275-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLMetaElement { [default] dispinterface DispHTMLMetaElement; [source, default] dispinterface HTMLElementEvents; [source] dispinterface HTMLElementEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLMetaElement; interface IHTMLMetaElement2; interface IHTMLMetaElement3; } /***************************************************************************** * DispHTMLUnknownElement dispinterface */ [ hidden, uuid(3050f539-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLUnknownElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; } /***************************************************************************** * HTMLUnknownElement coclass */ [ noncreatable, uuid(3050f268-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLUnknownElement { [default] dispinterface DispHTMLUnknownElement; [source, default] dispinterface HTMLElementEvents; [source] dispinterface HTMLElementEvents2; WINE_HTMLELEMENT_INTERFACES; /* interface IHTMLUnknownElement; */ } /***************************************************************************** * IOmHistory interface */ [ odl, oleautomation, dual, uuid(FECEAAA2-8405-11CF-8BA1-00AA00476DA6) ] interface IOmHistory : IDispatch { [propget, id(DISPID_IOMHISTORY_LENGTH)] HRESULT length([retval, out] short *p); [id(DISPID_IOMHISTORY_BACK)] HRESULT back([optional, in] VARIANT *pvargdistance); [id(DISPID_IOMHISTORY_FORWARD)] HRESULT forward([optional, in] VARIANT *pvargdistance); [id(DISPID_IOMHISTORY_GO)] HRESULT go([optional, in] VARIANT *pvargdistance); } [ noncreatable, uuid(FECEAAA3-8405-11cf-8BA1-00AA00476DA6) ] coclass HTMLHistory { [default] interface IOmHistory; } /***************************************************************************** * IHTMLMimeTypesCollection interface */ [ odl, oleautomation, dual, uuid(3050F3FC-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLMimeTypesCollection : IDispatch { [propget, id(DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH)] HRESULT length([retval, out] LONG *p); } [ noncreatable, uuid(3050f3fe-98b5-11cf-bb82-00aa00bdce0b) ] coclass CMimeTypes { [default] interface IHTMLMimeTypesCollection; } /***************************************************************************** * IHTMLPluginsCollection interface */ [ odl, oleautomation, dual, uuid(3050F3FD-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLPluginsCollection : IDispatch { [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)] HRESULT length([retval, out] LONG *p); [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)] HRESULT refresh([defaultvalue(0), in] VARIANT_BOOL reload); } [ hidden, uuid(3050f54a-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispCPlugins { properties: methods: [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)] long length(); [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)] void refresh([defaultvalue(0), in] VARIANT_BOOL reload); [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] IDispatch *constructor(); } [ noncreatable, uuid(3050f3ff-98b5-11cf-bb82-00aa00bdce0b) ] coclass CPlugins { [default] dispinterface DispCPlugins; interface IHTMLPluginsCollection; interface IHTMLDOMConstructor; } /***************************************************************************** * IHTMLOpsProfile interface */ [ odl, oleautomation, dual, uuid(3050F401-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLOpsProfile : IDispatch { [id(DISPID_IHTMLOPSPROFILE_ADDREQUEST)] HRESULT addRequest( [in] BSTR name, [optional, in] VARIANT reserved, [retval, out] VARIANT_BOOL *success); [id(DISPID_IHTMLOPSPROFILE_CLEARREQUEST)] HRESULT clearRequest(); [id(DISPID_IHTMLOPSPROFILE_DOREQUEST)] HRESULT doRequest( [in] VARIANT usage, [optional, in] VARIANT fname, [optional, in] VARIANT domain, [optional, in] VARIANT path, [optional, in] VARIANT expire, [optional, in] VARIANT reserved); [id(DISPID_IHTMLOPSPROFILE_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR name, [retval, out] BSTR *value); [id(DISPID_IHTMLOPSPROFILE_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR name, [in] BSTR value, [optional, in] VARIANT prefs, [retval, out] VARIANT_BOOL *success); [id(DISPID_IHTMLOPSPROFILE_COMMITCHANGES)] HRESULT commitChanges([retval, out] VARIANT_BOOL *success); [id(DISPID_IHTMLOPSPROFILE_ADDREADREQUEST)] HRESULT addReadRequest( [in] BSTR name, [optional, in] VARIANT reserved, [retval, out] VARIANT_BOOL *success); [id(DISPID_IHTMLOPSPROFILE_DOREADREQUEST)] HRESULT doReadRequest( [in] VARIANT usage, [optional, in] VARIANT fname, [optional, in] VARIANT domain, [optional, in] VARIANT path, [optional, in] VARIANT expire, [optional, in] VARIANT reserved); [id(DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST)] HRESULT doWriteRequest([retval, out] VARIANT_BOOL *success); } [ noncreatable, uuid(3050f402-98b5-11cf-bb82-00aa00bdce0b) ] coclass COpsProfile { [default] interface IHTMLOpsProfile; } /***************************************************************************** * IOmNavigator interface */ [ odl, oleautomation, dual, uuid(FECEAAA5-8405-11CF-8BA1-00AA00476DA6) ] interface IOmNavigator : IDispatch { [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)] HRESULT appCodeName([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_APPNAME)] HRESULT appName([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)] HRESULT appVersion([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)] HRESULT userAgent([retval, out] BSTR *p); [id(DISPID_IOMNAVIGATOR_JAVAENABLED)] HRESULT javaEnabled([retval, out] VARIANT_BOOL *enabled); [id(DISPID_IOMNAVIGATOR_TAINTENABLED)] HRESULT taintEnabled([retval, out] VARIANT_BOOL *enabled); [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)] HRESULT mimeTypes([retval, out] IHTMLMimeTypesCollection **p); [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)] HRESULT plugins([retval, out] IHTMLPluginsCollection **p); [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)] HRESULT cookieEnabled([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)] HRESULT opsProfile([retval, out] IHTMLOpsProfile **p); [id(DISPID_IOMNAVIGATOR_TOSTRING)] HRESULT toString([retval, out] BSTR *String); [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)] HRESULT cpuClass([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)] HRESULT systemLanguage([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden] HRESULT browserLanguage([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)] HRESULT userLanguage([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)] HRESULT platform([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)] HRESULT appMinorVersion([retval, out] BSTR *p); [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden] HRESULT connectionSpeed([retval, out] LONG *p); [propget, id(DISPID_IOMNAVIGATOR_ONLINE)] HRESULT onLine([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)] HRESULT userProfile([retval, out] IHTMLOpsProfile **p); } /***************************************************************************** * DispHTMLNavigator dispinterface */ [ hidden, uuid(3050f54c-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLNavigator { properties: methods: [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)] BSTR appCodeName(); [propget, id(DISPID_IOMNAVIGATOR_APPNAME)] BSTR appName(); [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)] BSTR appVersion(); [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)] BSTR userAgent(); [id(DISPID_IOMNAVIGATOR_JAVAENABLED)] VARIANT_BOOL javaEnabled(); [id(DISPID_IOMNAVIGATOR_TAINTENABLED)] VARIANT_BOOL taintEnabled(); [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)] IHTMLMimeTypesCollection *mimeTypes(); [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)] IHTMLPluginsCollection *plugins(); [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)] VARIANT_BOOL cookieEnabled(); [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)] IHTMLOpsProfile *opsProfile(); [id(DISPID_IOMNAVIGATOR_TOSTRING)] BSTR toString(); [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)] BSTR cpuClass(); [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)] BSTR systemLanguage(); [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden] BSTR browserLanguage(); [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)] BSTR userLanguage(); [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)] BSTR platform(); [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)] BSTR appMinorVersion(); [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden] LONG connectionSpeed(); [propget, id(DISPID_IOMNAVIGATOR_ONLINE)] VARIANT_BOOL onLine(); [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)] IHTMLOpsProfile *userProfile(); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } [ noncreatable, uuid(FECEAAA6-8405-11cf-8BA1-00AA00476DA6) ] coclass HTMLNavigator { [default] dispinterface DispHTMLNavigator; interface IOmNavigator; } /***************************************************************************** * IHTMLLocation interface */ [ odl, oleautomation, dual, uuid(163BB1E0-6E00-11cf-837A-48DC04C10000) ] interface IHTMLLocation : IDispatch { [propput, id(DISPID_IHTMLLOCATION_HREF)] HRESULT href([in] BSTR v); [propget, id(DISPID_IHTMLLOCATION_HREF)] HRESULT href([retval, out] BSTR *p); [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)] HRESULT protocol([in] BSTR v); [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)] HRESULT protocol([retval, out] BSTR *p); [propput, id(DISPID_IHTMLLOCATION_HOST)] HRESULT host([in] BSTR v); [propget, id(DISPID_IHTMLLOCATION_HOST)] HRESULT host([retval, out] BSTR *p); [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)] HRESULT hostname([in] BSTR v); [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)] HRESULT hostname([retval, out] BSTR *p); [propput, id(DISPID_IHTMLLOCATION_PORT)] HRESULT port([in] BSTR v); [propget, id(DISPID_IHTMLLOCATION_PORT)] HRESULT port([retval, out] BSTR *p); [propput, id(DISPID_IHTMLLOCATION_PATHNAME)] HRESULT pathname([in] BSTR v); [propget, id(DISPID_IHTMLLOCATION_PATHNAME)] HRESULT pathname([retval, out] BSTR *p); [propput, id(DISPID_IHTMLLOCATION_SEARCH)] HRESULT search([in] BSTR v); [propget, id(DISPID_IHTMLLOCATION_SEARCH)] HRESULT search([retval, out] BSTR *p); [propput, id(DISPID_IHTMLLOCATION_HASH)] HRESULT hash([in] BSTR v); [propget, id(DISPID_IHTMLLOCATION_HASH)] HRESULT hash([retval, out] BSTR *p); [id(DISPID_IHTMLLOCATION_RELOAD)] HRESULT reload([defaultvalue(0), in] VARIANT_BOOL flag); [id(DISPID_IHTMLLOCATION_REPLACE)] HRESULT replace([in] BSTR bstr); [id(DISPID_IHTMLLOCATION_ASSIGN)] HRESULT assign([in] BSTR bstr); [id(DISPID_IHTMLLOCATION_TOSTRING)] HRESULT toString([retval, out] BSTR *String); } /***************************************************************************** * DispHTMLHistory dispinterface */ [ hidden, uuid(3050f549-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLHistory { properties: methods: [propget, id(DISPID_IOMHISTORY_LENGTH)] short length(); [id(DISPID_IOMHISTORY_BACK)] void back([optional, in] VARIANT *pvargdistance); [id(DISPID_IOMHISTORY_FORWARD)] void forward([optional, in] VARIANT *pvargdistance); [id(DISPID_IOMHISTORY_GO)] void go([optional, in] VARIANT *pvargdistance); [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] IDispatch *constructor(); } /***************************************************************************** * DispHTMLLocation dispinterface */ [ hidden, uuid(3050f54e-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLLocation { properties: methods: [propput, id(DISPID_IHTMLLOCATION_HREF)] void href(BSTR v); [propget, id(DISPID_IHTMLLOCATION_HREF)] BSTR href(); [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)] void protocol(BSTR v); [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)] BSTR protocol(); [propput, id(DISPID_IHTMLLOCATION_HOST)] void host(BSTR v); [propget, id(DISPID_IHTMLLOCATION_HOST)] BSTR host(); [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)] void hostname(BSTR v); [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)] BSTR hostname(); [propput, id(DISPID_IHTMLLOCATION_PORT)] void port(BSTR v); [propget, id(DISPID_IHTMLLOCATION_PORT)] BSTR port(); [propput, id(DISPID_IHTMLLOCATION_PATHNAME)] void pathname(BSTR v); [propget, id(DISPID_IHTMLLOCATION_PATHNAME)] BSTR pathname(); [propput, id(DISPID_IHTMLLOCATION_SEARCH)] void search(BSTR v); [propget, id(DISPID_IHTMLLOCATION_SEARCH)] BSTR search(); [propput, id(DISPID_IHTMLLOCATION_HASH)] void hash(BSTR v); [propget, id(DISPID_IHTMLLOCATION_HASH)] BSTR hash(); [id(DISPID_IHTMLLOCATION_RELOAD)] void reload([in, defaultvalue(0)] VARIANT_BOOL flag); [id(DISPID_IHTMLLOCATION_REPLACE)] void replace([in] BSTR bstr); [id(DISPID_IHTMLLOCATION_ASSIGN)] void assign([in] BSTR bstr); [id(DISPID_IHTMLLOCATION_TOSTRING)] BSTR toString(); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } [ noncreatable, uuid(163BB1E1-6E00-11cf-837A-48DC04C10000) ] coclass HTMLLocation { [default] dispinterface DispHTMLLocation; interface IHTMLLocation; } [ odl, oleautomation, dual, uuid(3050f4ce-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLBookmarkCollection : IDispatch { [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH), hidden] HRESULT length([out, retval] LONG *p); [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM), hidden, restricted] HRESULT _newEnum([out, retval] IUnknown **p); [id(DISPID_IHTMLBOOKMARKCOLLECTION_ITEM)] HRESULT item( [in] LONG index, [out, retval] VARIANT *pVarBookmark); } /***************************************************************************** * IHTMLDataTransfer interface */ [ odl, oleautomation, dual, uuid(3050f4b3-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDataTransfer : IDispatch { [id(DISPID_IHTMLDATATRANSFER_SETDATA)] HRESULT setData( [in] BSTR format, [in] VARIANT *data, [out, retval] VARIANT_BOOL *pret); [id(DISPID_IHTMLDATATRANSFER_GETDATA)] HRESULT getData( [in] BSTR format, [out, retval] VARIANT *pvarRet); [id(DISPID_IHTMLDATATRANSFER_CLEARDATA)] HRESULT clearData( [in] BSTR format, [out, retval] VARIANT_BOOL *pret); [propput, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)] HRESULT dropEffect([in] BSTR v); [propget, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)] HRESULT dropEffect([out, retval] BSTR *p); [propput, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)] HRESULT effectAllowed([in] BSTR v); [propget, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)] HRESULT effectAllowed([out, retval] BSTR *p); } /***************************************************************************** * IHTMLEventObj interface */ [ odl, oleautomation, dual, uuid(3050F32D-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLEventObj : IDispatch { [propget, id(DISPID_IHTMLEVENTOBJ_SRCELEMENT)] HRESULT srcElement([retval, out] IHTMLElement **p); [propget, id(DISPID_IHTMLEVENTOBJ_ALTKEY)] HRESULT altKey([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLEVENTOBJ_CTRLKEY)] HRESULT ctrlKey([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLEVENTOBJ_SHIFTKEY)] HRESULT shiftKey([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)] HRESULT returnValue([in] VARIANT v); [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)] HRESULT returnValue([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)] HRESULT cancelBubble([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)] HRESULT cancelBubble([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLEVENTOBJ_FROMELEMENT)] HRESULT fromElement([retval, out] IHTMLElement **p); [propget, id(DISPID_IHTMLEVENTOBJ_TOELEMENT)] HRESULT toElement([retval, out] IHTMLElement **p); [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)] HRESULT keyCode([in] LONG v); [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)] HRESULT keyCode([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_BUTTON)] HRESULT button([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_TYPE)] HRESULT type([retval, out] BSTR *p); [propget, id(DISPID_IHTMLEVENTOBJ_QUALIFIER)] HRESULT qualifier([retval, out] BSTR *p); [propget, id(DISPID_IHTMLEVENTOBJ_REASON)] HRESULT reason([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_X)] HRESULT x([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_Y)] HRESULT y([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTX)] HRESULT clientX([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTY)] HRESULT clientY([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETX)] HRESULT offsetX([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETY)] HRESULT offsetY([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_SCREENX)] HRESULT screenX([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_SCREENY)] HRESULT screenY([retval, out] LONG *p); [propget, id(DISPID_IHTMLEVENTOBJ_SRCFILTER)] HRESULT srcFilter([retval, out] IDispatch **p); } /***************************************************************************** * DispCEventObj dispinterface */ [ hidden, uuid(3050f558-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispCEventObj { properties: methods: [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)] void returnValue(VARIANT v); [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)] VARIANT returnValue(); [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)] void cancelBubble(VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)] VARIANT_BOOL cancelBubble(); [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)] void keyCode(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)] LONG keyCode(); [id(DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE)] void setAttribute( [in] BSTR strAttributeName, [in] VARIANT AttributeValue, [in, defaultvalue(1)] LONG lFlags); [id(DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE)] VARIANT getAttribute( [in] BSTR strAttributeName, [in, defaultvalue(0)] LONG lFlags); [id(DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE)] VARIANT_BOOL removeAttribute( [in] BSTR strAttributeName, [in, defaultvalue(1)] LONG lFlags); [propput, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)] void propertyName(BSTR v); [propget, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)] BSTR propertyName(); [propputref, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)] void bookmarks(IHTMLBookmarkCollection *v); [propget, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)] IHTMLBookmarkCollection *bookmarks(); [propputref, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)] void recordset(IDispatch *v); [propget, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)] IDispatch *recordset(); [propput, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)] void dataFld(BSTR v); [propget, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)] BSTR dataFld(); [propputref, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)] void boundElements(IHTMLElementCollection *v); [propget, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)] IHTMLElementCollection *boundElements(); [propput, id(DISPID_IHTMLEVENTOBJ2_REPEAT)] void repeat(VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ2_REPEAT)] VARIANT_BOOL repeat(); [propput, id(DISPID_IHTMLEVENTOBJ2_SRCURN)] void srcUrn(BSTR v); [propget, id(DISPID_IHTMLEVENTOBJ2_SRCURN)] BSTR srcUrn(); [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)] void srcElement(IHTMLElement *v); [propget, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)] IHTMLElement *srcElement(); [propput, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)] void altKey(VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)] VARIANT_BOOL altKey(); [propput, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)] void ctrlKey(VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)] VARIANT_BOOL ctrlKey(); [propput, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)] void shiftKey(VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)] VARIANT_BOOL shiftKey(); [propputref, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)] void fromElement(IHTMLElement *v); [propget, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)] IHTMLElement *fromElement(); [propputref, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)] void toElement(IHTMLElement *v); [propget, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)] IHTMLElement *toElement(); [propput, id(DISPID_IHTMLEVENTOBJ2_BUTTON)] void button(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_BUTTON)] LONG button(); [propput, id(DISPID_IHTMLEVENTOBJ2_TYPE)] void type(BSTR v); [propget, id(DISPID_IHTMLEVENTOBJ2_TYPE)] BSTR type(); [propput, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)] void qualifier(BSTR v); [propget, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)] BSTR qualifier(); [propput, id(DISPID_IHTMLEVENTOBJ2_REASON)] void reason(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_REASON)] LONG reason(); [propput, id(DISPID_IHTMLEVENTOBJ2_X)] void x(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_X)] LONG x(); [propput, id(DISPID_IHTMLEVENTOBJ2_Y)] void y(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_Y)] LONG y(); [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)] void clientX(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)] LONG clientX(); [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)] void clientY(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)] LONG clientY(); [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)] void offsetX(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)] LONG offsetX(); [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)] void offsetY(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)] LONG offsetY(); [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENX)] void screenX(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENX)] LONG screenX(); [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENY)] void screenY(LONG v); [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENY)] LONG screenY(); [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)] void srcFilter(IDispatch *v); [propget, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)] IDispatch *srcFilter(); [propget, id(DISPID_IHTMLEVENTOBJ2_DATATRANSFER)] IHTMLDataTransfer *dataTransfer(); [propget, id(DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW)] VARIANT_BOOL contentOverflow(); [propput, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)] void shiftLeft(VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)] VARIANT_BOOL shiftLeft(); [propput, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)] void altLeft(VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)] VARIANT_BOOL altLeft(); [propput, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)] void ctrlLeft(VARIANT_BOOL v); [propget, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)] VARIANT_BOOL ctrlLeft(); [propget, id(DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE), hidden, restricted, nonbrowsable] LONG_PTR imeCompositionChange(); [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND), hidden, restricted, nonbrowsable] LONG_PTR imeNotifyCommand(); [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA), hidden, restricted, nonbrowsable] LONG_PTR imeNotifyData(); [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUEST), hidden, restricted, nonbrowsable] LONG_PTR imeRequest(); [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA), hidden, restricted, nonbrowsable] LONG_PTR imeRequestData(); [propget, id(DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT), hidden, restricted, nonbrowsable] LONG_PTR keyboardLayout(); [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE)] LONG behaviorCookie(); [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORPART)] LONG behaviorPart(); [propget, id(DISPID_IHTMLEVENTOBJ3_NEXTPAGE)] BSTR nextPage(); [propget, id(DISPID_IHTMLEVENTOBJ4_WHEELDELTA)] LONG wheelDelta(); } /***************************************************************************** * IHTMLStyleMedia interface */ [ odl, oleautomation, dual, uuid(3051074b-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyleMedia : IDispatch { [propget, id(DISPID_IHTMLSTYLEMEDIA_TYPE)] HRESULT type([out, retval] BSTR *p); [id(DISPID_IHTMLSTYLEMEDIA_MATCHMEDIUM)] HRESULT matchMedium( [in] BSTR mediaQuery, [out, retval] VARIANT_BOOL *matches); } /***************************************************************************** * IHTMLFramesCollection2 interface */ [ odl, oleautomation, dual, uuid(332C4426-26CB-11D0-B483-00C04FD90119) ] interface IHTMLFramesCollection2 : IDispatch { [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)] HRESULT item( [in] VARIANT *pvarIndex, [retval, out] VARIANT *pvarResult); [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)] HRESULT length([retval, out] LONG *p); } /***************************************************************************** * IHTMLScreen interface */ [ odl, oleautomation, dual, uuid(3050f35C-98B5-11CF-BB82-00AA00BDCE0B) ] interface IHTMLScreen : IDispatch { [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)] HRESULT colorDepth([retval, out] LONG *p); [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)] HRESULT bufferDepth([in] LONG v); [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)] HRESULT bufferDepth([retval, out] LONG *p); [propget, id(DISPID_IHTMLSCREEN_WIDTH)] HRESULT width([retval, out] LONG *p); [propget, id(DISPID_IHTMLSCREEN_HEIGHT)] HRESULT height([retval, out] LONG *p); [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)] HRESULT updateInterval([in] LONG v); [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)] HRESULT updateInterval([retval, out] LONG *p); [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)] HRESULT availHeight([retval, out] LONG *p); [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)] HRESULT availWidth([retval, out] LONG *p); [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)] HRESULT fontSmoothingEnabled([retval, out] VARIANT_BOOL *p); } /***************************************************************************** * IHTMLWindow2 interface */ [ odl, oleautomation, dual, uuid(332C4427-26CB-11D0-B483-00C04FD90119) ] interface IHTMLWindow2 : IHTMLFramesCollection2 { [propget, id(DISPID_IHTMLWINDOW2_FRAMES)] HRESULT frames([retval, out] IHTMLFramesCollection2 **p); [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)] HRESULT defaultStatus([in] BSTR v); [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)] HRESULT defaultStatus([retval, out] BSTR *p); [propput, id(DISPID_IHTMLWINDOW2_STATUS)] HRESULT status([in] BSTR v); [propget, id(DISPID_IHTMLWINDOW2_STATUS)] HRESULT status([retval, out] BSTR *p); [id(DISPID_IHTMLWINDOW2_SETTIMEOUT)] HRESULT setTimeout( [in] BSTR expression, [in] LONG msec, [optional, in] VARIANT *language, [retval, out] LONG *timerID); [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)] HRESULT clearTimeout([in] LONG timerID); [id(DISPID_IHTMLWINDOW2_ALERT)] HRESULT alert([defaultvalue(""), in] BSTR message); [id(DISPID_IHTMLWINDOW2_CONFIRM)] HRESULT confirm( [defaultvalue(""), in] BSTR message, [retval, out] VARIANT_BOOL *confirmed); [id(DISPID_IHTMLWINDOW2_PROMPT)] HRESULT prompt( [defaultvalue(""), in] BSTR message, [defaultvalue("undefined"), in] BSTR defstr, [retval, out] VARIANT *textdata); [propget, id(DISPID_IHTMLWINDOW2_IMAGE)] HRESULT Image([retval, out] IHTMLImageElementFactory **p); [propget, id(DISPID_IHTMLWINDOW2_LOCATION)] HRESULT location([retval, out] IHTMLLocation **p); [propget, id(DISPID_IHTMLWINDOW2_HISTORY)] HRESULT history([retval, out] IOmHistory **p); [id(DISPID_IHTMLWINDOW2_CLOSE)] HRESULT close(); [propput, id(DISPID_IHTMLWINDOW2_OPENER)] HRESULT opener([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_OPENER)] HRESULT opener([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)] HRESULT navigator([retval, out] IOmNavigator **p); [propput, id(DISPID_IHTMLWINDOW2_NAME)] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLWINDOW2_NAME)] HRESULT name([retval, out] BSTR *p); [propget, id(DISPID_IHTMLWINDOW2_PARENT)] HRESULT parent([retval, out] IHTMLWindow2 **p); [id(DISPID_IHTMLWINDOW2_OPEN)] HRESULT open( [defaultvalue(""), in] BSTR url, [defaultvalue(""), in] BSTR name, [defaultvalue(""), in] BSTR features, [defaultvalue(0), in] VARIANT_BOOL replace, [retval, out] IHTMLWindow2 **pomWindowResult); [propget, id(DISPID_IHTMLWINDOW2_SELF)] HRESULT self([retval, out] IHTMLWindow2 **p); [propget, id(DISPID_IHTMLWINDOW2_TOP)] HRESULT top([retval, out] IHTMLWindow2 **p); [propget, id(DISPID_IHTMLWINDOW2_WINDOW)] HRESULT window([retval, out] IHTMLWindow2 **p); [id(DISPID_IHTMLWINDOW2_NAVIGATE)] HRESULT navigate([in] BSTR url); [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS)] HRESULT onfocus([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS)] HRESULT onfocus([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW2_ONBLUR)] HRESULT onblur([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONBLUR)] HRESULT onblur([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW2_ONLOAD)] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONLOAD)] HRESULT onload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)] HRESULT onbeforeunload([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)] HRESULT onbeforeunload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD)] HRESULT onunload([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD)] HRESULT onunload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW2_ONHELP)] HRESULT onhelp([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONHELP)] HRESULT onhelp([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW2_ONERROR)] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONERROR)] HRESULT onerror([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE)] HRESULT onresize([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE)] HRESULT onresize([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL)] HRESULT onscroll([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL)] HRESULT onscroll([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT)] HRESULT document([retval, out] IHTMLDocument2 **p); [propget, id(DISPID_IHTMLWINDOW2_EVENT)] HRESULT event([retval, out] IHTMLEventObj **p); [propget, id(DISPID_IHTMLWINDOW2__NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **p); [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)] HRESULT showModalDialog( [in] BSTR dialog, [optional, in] VARIANT *varArgIn, [optional, in] VARIANT *varOptions, [retval, out] VARIANT *varArgOut); [id(DISPID_IHTMLWINDOW2_SHOWHELP)] HRESULT showHelp( [in] BSTR helpURL, [optional, in] VARIANT helpArg, [defaultvalue(""), in] BSTR features); [propget, id(DISPID_IHTMLWINDOW2_SCREEN)] HRESULT screen([retval, out] IHTMLScreen **p); [propget, id(DISPID_IHTMLWINDOW2_OPTION)] HRESULT Option([retval, out] IHTMLOptionElementFactory **p); [id(DISPID_IHTMLWINDOW2_FOCUS)] HRESULT focus(); [propget, id(DISPID_IHTMLWINDOW2_CLOSED)] HRESULT closed([retval, out] VARIANT_BOOL *p); [id(DISPID_IHTMLWINDOW2_BLUR)] HRESULT blur(); [id(DISPID_IHTMLWINDOW2_SCROLL)] HRESULT scroll([in] LONG x, [in] LONG y); [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)] HRESULT clientInformation([retval, out] IOmNavigator **p); [id(DISPID_IHTMLWINDOW2_SETINTERVAL)] HRESULT setInterval([ in] BSTR expression, [in] LONG msec, [optional, in] VARIANT *language, [retval, out] LONG *timerID); [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)] HRESULT clearInterval([in] LONG timerID); [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)] HRESULT offscreenBuffering([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)] HRESULT offscreenBuffering([retval, out] VARIANT *p); [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)] HRESULT execScript( [in] BSTR scode, [defaultvalue("JScript"), in] BSTR language, [retval, out] VARIANT *pvarRet); [id(DISPID_IHTMLWINDOW2_TOSTRING)] HRESULT toString([retval, out] BSTR *String); [id(DISPID_IHTMLWINDOW2_SCROLLBY)] HRESULT scrollBy([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_SCROLLTO)] HRESULT scrollTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_MOVETO)] HRESULT moveTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_MOVEBY)] HRESULT moveBy([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_RESIZETO)] HRESULT resizeTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_RESIZEBY)] HRESULT resizeBy([in] LONG x, [in] LONG y); [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)] HRESULT external([retval, out] IDispatch **p); } /***************************************************************************** * IHTMLWindow3 interface */ [ odl, oleautomation, dual, uuid(3050f4ae-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLWindow3 : IDispatch { [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)] HRESULT screenLeft([out, retval] LONG *p); [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)] HRESULT screenTop([out, retval] LONG *p); [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)] HRESULT attachEvent( [in] BSTR event, [in] IDispatch *pDisp, [out, retval] VARIANT_BOOL *pfResult); [id(DISPID_IHTMLWINDOW3_DETACHEVENT)] HRESULT detachEvent( [in] BSTR event, [in] IDispatch *pDisp); [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)] HRESULT setTimeout( [in] VARIANT *expression, [in] LONG msec, [in, optional] VARIANT *language, [out, retval] LONG *timerID); [id(DISPID_IHTMLWINDOW3_SETINTERVAL)] HRESULT setInterval( [in] VARIANT *expression, [in] LONG msec, [in, optional] VARIANT *language, [out, retval] LONG *timerID); [id(DISPID_IHTMLWINDOW3_PRINT)] HRESULT print(); [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] HRESULT onbeforeprint([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] HRESULT onbeforeprint([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] HRESULT onafterprint([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] HRESULT onafterprint([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)] HRESULT clipboardData([out, retval] IHTMLDataTransfer **p); [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)] HRESULT showModelessDialog( [in, defaultvalue("")] BSTR url, [in, optional] VARIANT *varArgIn, [in, optional] VARIANT *options, [out, retval] IHTMLWindow2 **pDialog); } /***************************************************************************** * IHTMLWindow4 interface */ [ odl, oleautomation, dual, uuid(3050f6cf-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLWindow4 : IDispatch { [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)] HRESULT createPopup([optional, in] VARIANT* varArgIn, [retval, out] IDispatch** ppPopup); [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)] HRESULT frameElement([retval, out] IHTMLFrameBase* * p); } /***************************************************************************** * IHTMLWindow5 interface */ [ odl, oleautomation, dual, uuid(3051040e-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLWindow5 : IDispatch { [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)] HRESULT XMLHttpRequest([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)] HRESULT XMLHttpRequest([retval, out] VARIANT * p); } /***************************************************************************** * IHTMLWindow6 interface */ [ odl, oleautomation, dual, uuid(30510453-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLWindow6 : IDispatch { [propput, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)] HRESULT XDomainRequest([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)] HRESULT XDomainRequest([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)] HRESULT sessionStorage([out, retval] IHTMLStorage **p); [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)] HRESULT localStorage([out, retval] IHTMLStorage **p); [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable] HRESULT onhashchange([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable] HRESULT onhashchange([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)] HRESULT maxConnectionsPerServer([out, retval] long *p); [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)] HRESULT postMessage( [in] BSTR msg, [in, optional] VARIANT targetOrigin); [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)] HRESULT toStaticHTML( [in] BSTR bstrHTML, [out, retval] BSTR *pbstrStaticHTML); [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable] HRESULT onmessage([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable] HRESULT onmessage([out, retval] VARIANT *p); [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)] HRESULT msWriteProfilerMark([in] BSTR bstrProfilerMarkName); } /***************************************************************************** * IHTMLWindow7 interface */ [ odl, oleautomation, dual, uuid(305104b7-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLWindow7 : IDispatch { [id(DISPID_IHTMLWINDOW7_GETSELECTION)] HRESULT getSelection([out, retval] IHTMLSelection **ppIHTMLSelection); [id(DISPID_IHTMLWINDOW7_GETCOMPUTEDSTYLE)] HRESULT getComputedStyle( [in] IHTMLDOMNode* varArgIn, [in, defaultvalue("")] BSTR bstrPseudoElt, [out, retval] IHTMLCSSStyleDeclaration **ppComputedStyle); [propget, id(DISPID_IHTMLWINDOW7_STYLEMEDIA)] HRESULT styleMedia([out, retval] IHTMLStyleMedia **p); [propput, id(DISPID_IHTMLWINDOW7_PERFORMANCE)] HRESULT performance([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_PERFORMANCE)] HRESULT performance([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLWINDOW7_INNERWIDTH)] HRESULT innerWidth([out, retval] long *p); [propget, id(DISPID_IHTMLWINDOW7_INNERHEIGHT)] HRESULT innerHeight([out, retval] long *p); [propget, id(DISPID_IHTMLWINDOW7_PAGEXOFFSET)] HRESULT pageXOffset([out, retval] long *p); [propget, id(DISPID_IHTMLWINDOW7_PAGEYOFFSET)] HRESULT pageYOffset([out, retval] long *p); [propget, id(DISPID_IHTMLWINDOW7_SCREENX)] HRESULT screenX([out, retval] long *p); [propget, id(DISPID_IHTMLWINDOW7_SCREENY)] HRESULT screenY([out, retval] long *p); [propget, id(DISPID_IHTMLWINDOW7_OUTERWIDTH)] HRESULT outerWidth([out, retval] long *p); [propget, id(DISPID_IHTMLWINDOW7_OUTERHEIGHT)] HRESULT outerHeight([out, retval] long *p); [propput, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable] HRESULT onabort([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable] HRESULT onabort([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable] HRESULT oncanplay([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable] HRESULT oncanplay([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable] HRESULT oncanplaythrough([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable] HRESULT oncanplaythrough([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable] HRESULT onchange([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable] HRESULT onchange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable] HRESULT onclick([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable] HRESULT onclick([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable] HRESULT oncontextmenu([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable] HRESULT oncontextmenu([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable] HRESULT ondblclick([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable] HRESULT ondblclick([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable] HRESULT ondrag([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable] HRESULT ondrag([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable] HRESULT ondragend([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable] HRESULT ondragend([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable] HRESULT ondragenter([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable] HRESULT ondragenter([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable] HRESULT ondragleave([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable] HRESULT ondragleave([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable] HRESULT ondragover([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable] HRESULT ondragover([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable] HRESULT ondragstart([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable] HRESULT ondragstart([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable] HRESULT ondrop([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable] HRESULT ondrop([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable] HRESULT ondurationchange([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable] HRESULT ondurationchange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable] HRESULT onfocusin([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable] HRESULT onfocusin([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable] HRESULT onfocusout([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable] HRESULT onfocusout([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable] HRESULT oninput([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable] HRESULT oninput([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable] HRESULT onemptied([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable] HRESULT onemptied([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable] HRESULT onended([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable] HRESULT onended([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable] HRESULT onkeydown([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable] HRESULT onkeydown([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable] HRESULT onkeypress([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable] HRESULT onkeypress([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable] HRESULT onkeyup([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable] HRESULT onkeyup([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable] HRESULT onloadeddata([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable] HRESULT onloadeddata([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable] HRESULT onloadedmetadata([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable] HRESULT onloadedmetadata([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable] HRESULT onloadstart([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable] HRESULT onloadstart([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable] HRESULT onmousedown([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable] HRESULT onmousedown([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable] HRESULT onmouseenter([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable] HRESULT onmouseenter([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable] HRESULT onmouseleave([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable] HRESULT onmouseleave([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable] HRESULT onmousemove([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable] HRESULT onmousemove([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable] HRESULT onmouseout([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable] HRESULT onmouseout([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable] HRESULT onmouseover([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable] HRESULT onmouseover([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable] HRESULT onmouseup([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable] HRESULT onmouseup([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable] HRESULT onmousewheel([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable] HRESULT onmousewheel([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable] HRESULT onoffline([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable] HRESULT onoffline([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable] HRESULT ononline([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable] HRESULT ononline([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable] HRESULT onprogress([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable] HRESULT onprogress([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable] HRESULT onratechange([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable] HRESULT onratechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable] HRESULT onreset([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable] HRESULT onreset([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable] HRESULT onseeked([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable] HRESULT onseeked([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable] HRESULT onseeking([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable] HRESULT onseeking([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable] HRESULT onselect([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable] HRESULT onselect([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable] HRESULT onstalled([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable] HRESULT onstalled([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable] HRESULT onstorage([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable] HRESULT onstorage([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable] HRESULT onsubmit([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable] HRESULT onsubmit([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable] HRESULT onsuspend([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable] HRESULT onsuspend([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable] HRESULT ontimeupdate([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable] HRESULT ontimeupdate([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable] HRESULT onpause([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable] HRESULT onpause([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable] HRESULT onplay([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable] HRESULT onplay([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable] HRESULT onplaying([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable] HRESULT onplaying([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable] HRESULT onvolumechange([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable] HRESULT onvolumechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable] HRESULT onwaiting([in] VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable] HRESULT onwaiting([out, retval] VARIANT *p); } /***************************************************************************** * DispHTMLScreen dispinterface */ [ hidden, uuid(3050f591-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLScreen { properties: methods: [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)] long colorDepth(); [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)] void bufferDepth(long v); [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)] long bufferDepth(); [propget, id(DISPID_IHTMLSCREEN_WIDTH)] long width(); [propget, id(DISPID_IHTMLSCREEN_HEIGHT)] long height(); [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)] void updateInterval(long v); [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)] long updateInterval(); [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)] long availHeight(); [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)] long availWidth(); [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)] VARIANT_BOOL fontSmoothingEnabled(); [propget, id(DISPID_IHTMLSCREEN2_LOGICALXDPI)] long logicalXDPI(); [propget, id(DISPID_IHTMLSCREEN2_LOGICALYDPI)] long logicalYDPI(); [propget, id(DISPID_IHTMLSCREEN2_DEVICEXDPI)] long deviceXDPI(); [propget, id(DISPID_IHTMLSCREEN2_DEVICEYDPI)] long deviceYDPI(); [propget, id(DISPID_IHTMLSCREEN3_SYSTEMXDPI)] long systemXDPI(); [propget, id(DISPID_IHTMLSCREEN3_SYSTEMYDPI)] long systemYDPI(); [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] IDispatch *constructor(); } /***************************************************************************** * DispHTMLWindow2 dispinterface */ [ hidden, uuid(3050f55d-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLWindow2 { properties: methods: [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)] VARIANT item([in] VARIANT *pvarIndex); [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)] LONG length(); [propget, id(DISPID_IHTMLWINDOW2_FRAMES)] IHTMLFramesCollection2 *frames(); [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)] void defaultStatus(BSTR v); [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)] BSTR defaultStatus(); [propput, id(DISPID_IHTMLWINDOW2_STATUS)] void status(BSTR v); [propget, id(DISPID_IHTMLWINDOW2_STATUS)] BSTR status(); [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)] void clearTimeout([in] LONG timerID); [id(DISPID_IHTMLWINDOW2_ALERT)] void alert([in, defaultvalue("")] BSTR message); [id(DISPID_IHTMLWINDOW2_CONFIRM)] VARIANT_BOOL confirm([in, defaultvalue("")] BSTR message); [id(DISPID_IHTMLWINDOW2_PROMPT)] VARIANT prompt( [in, defaultvalue("")] BSTR message, [in, defaultvalue("undefined")] BSTR defstr); [propget, id(DISPID_IHTMLWINDOW2_IMAGE)] IHTMLImageElementFactory *Image(); [propget, id(DISPID_IHTMLWINDOW2_LOCATION)] IHTMLLocation *location(); [propget, id(DISPID_IHTMLWINDOW2_HISTORY)] IOmHistory *history(); [id(DISPID_IHTMLWINDOW2_CLOSE)] void close(); [propput, id(DISPID_IHTMLWINDOW2_OPENER)] void opener(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_OPENER)] VARIANT opener(); [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)] IOmNavigator *navigator(); [propput, id(DISPID_IHTMLWINDOW2_NAME)] void name(BSTR v); [propget, id(DISPID_IHTMLWINDOW2_NAME)] BSTR name(); [propget, id(DISPID_IHTMLWINDOW2_PARENT)] IHTMLWindow2 *parent(); [id(DISPID_IHTMLWINDOW2_OPEN)] IHTMLWindow2 *open( [in, defaultvalue("")] BSTR url, [in, defaultvalue("")] BSTR name, [in, defaultvalue("")] BSTR features, [in, defaultvalue(0)] VARIANT_BOOL replace); [propget, id(DISPID_IHTMLWINDOW2_SELF)] IHTMLWindow2 *self(); [propget, id(DISPID_IHTMLWINDOW2_TOP)] IHTMLWindow2 *top(); [propget, id(DISPID_IHTMLWINDOW2_WINDOW)] IHTMLWindow2 *window(); [id(DISPID_IHTMLWINDOW2_NAVIGATE)] void navigate([in] BSTR url); [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable] void onfocus(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable] VARIANT onfocus(); [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable] void onblur(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable] VARIANT onblur(); [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable] VARIANT onload(); [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable] void onbeforeunload(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable] VARIANT onbeforeunload(); [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable] void onunload(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable] VARIANT onunload(); [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable] void onhelp(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable] VARIANT onhelp(); [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable] void onerror(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable] VARIANT onerror(); [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable] void onresize(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable] VARIANT onresize(); [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable] void onscroll(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable] VARIANT onscroll(); [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source] IHTMLDocument2 *document(); [propget, id(DISPID_IHTMLWINDOW2_EVENT)] IHTMLEventObj *event(); [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted] IUnknown *_newEnum(); [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)] VARIANT showModalDialog( [in] BSTR dialog, [in, optional] VARIANT *varArgIn, [in, optional] VARIANT *varOptions); [id(DISPID_IHTMLWINDOW2_SHOWHELP)] void showHelp( [in] BSTR helpURL, [in, optional] VARIANT helpArg, [in, defaultvalue("")] BSTR features); [propget, id(DISPID_IHTMLWINDOW2_SCREEN)] IHTMLScreen *screen(); [propget, id(DISPID_IHTMLWINDOW2_OPTION)] IHTMLOptionElementFactory *Option(); [id(DISPID_IHTMLWINDOW2_FOCUS)] void focus(); [propget, id(DISPID_IHTMLWINDOW2_CLOSED)] VARIANT_BOOL closed(); [id(DISPID_IHTMLWINDOW2_BLUR)] void blur(); [id(DISPID_IHTMLWINDOW2_SCROLL)] void scroll([in] LONG x, [in] LONG y); [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)] IOmNavigator *clientInformation(); [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)] void clearInterval([in] LONG timerID); [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)] void offscreenBuffering(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)] VARIANT offscreenBuffering(); [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)] VARIANT execScript( [in] BSTR _code, [in, defaultvalue("JScript")] BSTR language); [id(DISPID_IHTMLWINDOW2_TOSTRING)] BSTR toString(); [id(DISPID_IHTMLWINDOW2_SCROLLBY)] void scrollBy([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_SCROLLTO)] void scrollTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_MOVETO)] void moveTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_MOVEBY)] void moveBy([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_RESIZETO)] void resizeTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_RESIZEBY)] void resizeBy([in] LONG x, [in] LONG y); [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)] IDispatch *external(); [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)] LONG screenLeft(); [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)] LONG screenTop(); [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)] VARIANT_BOOL attachEvent( [in] BSTR event, [in] IDispatch *pDisp); [id(DISPID_IHTMLWINDOW3_DETACHEVENT)] void detachEvent( [in] BSTR event, [in] IDispatch *pDisp); [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)] LONG setTimeout( [in] VARIANT *expression, [in] LONG msec, [in, optional] VARIANT *language); [id(DISPID_IHTMLWINDOW3_SETINTERVAL)] LONG setInterval( [in] VARIANT *expression, [in] LONG msec, [in, optional] VARIANT *language); [id(DISPID_IHTMLWINDOW3_PRINT)] void print(); [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] void onbeforeprint(VARIANT v); [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] VARIANT onbeforeprint(); [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] void onafterprint(VARIANT v); [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] VARIANT onafterprint(); [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)] IHTMLDataTransfer *clipboardData(); [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)] IHTMLWindow2 *showModelessDialog( [in, defaultvalue("")] BSTR url, [in, optional] VARIANT *varArgIn, [in, optional] VARIANT *options); [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)] IDispatch *createPopup([in, optional] VARIANT *varArgIn); [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)] IHTMLFrameBase *frameElement(); [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)] IHTMLStorage *sessionStorage(); [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)] IHTMLStorage *localStorage(); [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable] void onhashchange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable] VARIANT onhashchange(); [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)] long maxConnectionsPerServer(); [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)] void postMessage( [in] BSTR msg, [in, optional] VARIANT targetOrigin); [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)] BSTR toStaticHTML([in] BSTR bstrHTML); [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable] void onmessage(VARIANT v); [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable] VARIANT onmessage(); [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)] void msWriteProfilerMark([in] BSTR bstrProfilerMarkName); [id(DISPID_IHTMLWINDOW7_GETSELECTION)] IHTMLSelection *getSelection(); [id(DISPID_IHTMLWINDOW7_GETCOMPUTEDSTYLE)] IHTMLCSSStyleDeclaration *getComputedStyle( [in] IHTMLDOMNode *varArgIn, [in, defaultvalue("")] BSTR bstrPseudoElt); [propget, id(DISPID_IHTMLWINDOW7_STYLEMEDIA)] IHTMLStyleMedia *styleMedia(); [propput, id(DISPID_IHTMLWINDOW7_PERFORMANCE)] void performance(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_PERFORMANCE)] VARIANT performance(); [propget, id(DISPID_IHTMLWINDOW7_INNERWIDTH)] long innerWidth(); [propget, id(DISPID_IHTMLWINDOW7_INNERHEIGHT)] long innerHeight(); [propget, id(DISPID_IHTMLWINDOW7_PAGEXOFFSET)] long pageXOffset(); [propget, id(DISPID_IHTMLWINDOW7_PAGEYOFFSET)] long pageYOffset(); [propget, id(DISPID_IHTMLWINDOW7_SCREENX)] long screenX(); [propget, id(DISPID_IHTMLWINDOW7_SCREENY)] long screenY(); [propget, id(DISPID_IHTMLWINDOW7_OUTERWIDTH)] long outerWidth(); [propget, id(DISPID_IHTMLWINDOW7_OUTERHEIGHT)] long outerHeight(); [propput, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable] void onabort(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable] VARIANT onabort(); [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable] void oncanplay(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable] VARIANT oncanplay(); [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable] void oncanplaythrough(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable] VARIANT oncanplaythrough(); [propput, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable] void onchange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable] VARIANT onchange(); [propput, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable] void onclick(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable] VARIANT onclick(); [propput, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable] void oncontextmenu(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable] VARIANT oncontextmenu(); [propput, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable] void ondblclick(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable] VARIANT ondblclick(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable] void ondrag(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable] VARIANT ondrag(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable] void ondragend(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable] VARIANT ondragend(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable] void ondragenter(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable] VARIANT ondragenter(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable] void ondragleave(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable] VARIANT ondragleave(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable] void ondragover(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable] VARIANT ondragover(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable] void ondragstart(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable] VARIANT ondragstart(); [propput, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable] void ondrop(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable] VARIANT ondrop(); [propput, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable] void ondurationchange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable] VARIANT ondurationchange(); [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable] void onfocusin(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable] VARIANT onfocusin(); [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable] void onfocusout(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable] VARIANT onfocusout(); [propput, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable] void oninput(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable] VARIANT oninput(); [propput, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable] void onemptied(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable] VARIANT onemptied(); [propput, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable] void onended(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable] VARIANT onended(); [propput, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable] void onkeydown(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable] VARIANT onkeydown(); [propput, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable] void onkeypress(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable] VARIANT onkeypress(); [propput, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable] void onkeyup(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable] VARIANT onkeyup(); [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable] void onloadeddata(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable] VARIANT onloadeddata(); [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable] void onloadedmetadata(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable] VARIANT onloadedmetadata(); [propput, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable] void onloadstart(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable] VARIANT onloadstart(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable] void onmousedown(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable] VARIANT onmousedown(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable] void onmouseenter(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable] VARIANT onmouseenter(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable] void onmouseleave(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable] VARIANT onmouseleave(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable] void onmousemove(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable] VARIANT onmousemove(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable] void onmouseout(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable] VARIANT onmouseout(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable] void onmouseover(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable] VARIANT onmouseover(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable] void onmouseup(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable] VARIANT onmouseup(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable] void onmousewheel(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable] VARIANT onmousewheel(); [propput, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable] void onoffline(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable] VARIANT onoffline(); [propput, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable] void ononline(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable] VARIANT ononline(); [propput, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable] void onprogress(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable] VARIANT onprogress(); [propput, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable] void onratechange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable] VARIANT onratechange(); [propput, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable] void onreadystatechange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable] VARIANT onreadystatechange(); [propput, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable] void onreset(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable] VARIANT onreset(); [propput, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable] void onseeked(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable] VARIANT onseeked(); [propput, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable] void onseeking(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable] VARIANT onseeking(); [propput, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable] void onselect(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable] VARIANT onselect(); [propput, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable] void onstalled(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable] VARIANT onstalled(); [propput, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable] void onstorage(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable] VARIANT onstorage(); [propput, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable] void onsubmit(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable] VARIANT onsubmit(); [propput, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable] void onsuspend(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable] VARIANT onsuspend(); [propput, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable] void ontimeupdate(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable] VARIANT ontimeupdate(); [propput, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable] void onpause(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable] VARIANT onpause(); [propput, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable] void onplay(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable] VARIANT onplay(); [propput, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable] void onplaying(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable] VARIANT onplaying(); [propput, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable] void onvolumechange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable] VARIANT onvolumechange(); [propput, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable] void onwaiting(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable] VARIANT onwaiting(); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } /***************************************************************************** * HTMLWindow2 coclass */ [ noncreatable, uuid(d48a6ec6-6a4a-11cf-94a7-444553540000) ] coclass HTMLWindow2 { [default] dispinterface DispHTMLWindow2; [source, default] dispinterface HTMLWindowEvents; [source] dispinterface HTMLWindowEvents2; /* [source] dispinterface HTMLWindowEvents3; */ interface IHTMLWindow2; interface IHTMLWindow3; interface IHTMLWindow4; interface IHTMLWindow5; interface IHTMLWindow6; interface IHTMLWindow7; /* interface IHTMLWindow8; */ interface IHTMLDOMConstructor; interface IEventTarget; } /***************************************************************************** * DispHTMLWindowProxy dispinterface */ [ hidden, uuid(3050f55e-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLWindowProxy { properties: methods: [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)] VARIANT item([in] VARIANT* pvarIndex); [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)] LONG length(); [propget, id(DISPID_IHTMLWINDOW2_FRAMES)] IHTMLFramesCollection2* frames(); [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)] void defaultStatus(BSTR v); [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)] BSTR defaultStatus(); [propput, id(DISPID_IHTMLWINDOW2_STATUS)] void status(BSTR v); [propget, id(DISPID_IHTMLWINDOW2_STATUS)] BSTR status(); [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)] void clearTimeout([in] LONG timerID); [id(DISPID_IHTMLWINDOW2_ALERT)] void alert([defaultvalue(""), in] BSTR message); [id(DISPID_IHTMLWINDOW2_CONFIRM)] VARIANT_BOOL confirm([defaultvalue(""), in] BSTR message); [id(DISPID_IHTMLWINDOW2_PROMPT)] VARIANT prompt([defaultvalue(""), in] BSTR message, [defaultvalue("undefined"), in] BSTR defstr); [propget, id(DISPID_IHTMLWINDOW2_IMAGE)] IHTMLImageElementFactory* Image(); [propget, id(DISPID_IHTMLWINDOW2_LOCATION)] IHTMLLocation* location(); [propget, id(DISPID_IHTMLWINDOW2_HISTORY)] IOmHistory* history(); [id(DISPID_IHTMLWINDOW2_CLOSE)] void close(); [propput, id(DISPID_IHTMLWINDOW2_OPENER)] void opener(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_OPENER)] VARIANT opener(); [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)] IOmNavigator* navigator(); [propput, id(DISPID_IHTMLWINDOW2_NAME)] void name(BSTR v); [propget, id(DISPID_IHTMLWINDOW2_NAME)] BSTR name(); [propget, id(DISPID_IHTMLWINDOW2_PARENT)] IHTMLWindow2* parent(); [id(DISPID_IHTMLWINDOW2_OPEN)] IHTMLWindow2* open([defaultvalue(""), in] BSTR url, [defaultvalue(""), in] BSTR name, [defaultvalue(""), in] BSTR features, [defaultvalue(0), in] VARIANT_BOOL replace); [propget, id(DISPID_IHTMLWINDOW2_SELF)] IHTMLWindow2* self(); [propget, id(DISPID_IHTMLWINDOW2_TOP)] IHTMLWindow2* top(); [propget, id(DISPID_IHTMLWINDOW2_WINDOW)] IHTMLWindow2* window(); [id(DISPID_IHTMLWINDOW2_NAVIGATE)] void navigate([in] BSTR url); [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable] void onfocus(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable] VARIANT onfocus(); [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable] void onblur(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable] VARIANT onblur(); [propput, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable] void onload(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable] VARIANT onload(); [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable] void onbeforeunload(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable] VARIANT onbeforeunload(); [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable] void onunload(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable] VARIANT onunload(); [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable] void onhelp(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable] VARIANT onhelp(); [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable] void onerror(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable] VARIANT onerror(); [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable] void onresize(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable] VARIANT onresize(); [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable] void onscroll(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable] VARIANT onscroll(); [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source] IHTMLDocument2* document(); [propget, id(DISPID_IHTMLWINDOW2_EVENT)] IHTMLEventObj* event(); [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted] IUnknown* _newEnum(); [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)] VARIANT showModalDialog([in] BSTR dialog, [optional, in] VARIANT* varArgIn, [optional, in] VARIANT* varOptions); [id(DISPID_IHTMLWINDOW2_SHOWHELP)] void showHelp([in] BSTR helpURL, [optional, in] VARIANT helpArg, [defaultvalue(""), in] BSTR features); [propget, id(DISPID_IHTMLWINDOW2_SCREEN)] IHTMLScreen* screen(); [propget, id(DISPID_IHTMLWINDOW2_OPTION)] IHTMLOptionElementFactory* Option(); [id(DISPID_IHTMLWINDOW2_FOCUS)] void focus(); [propget, id(DISPID_IHTMLWINDOW2_CLOSED)] VARIANT_BOOL closed(); [id(DISPID_IHTMLWINDOW2_BLUR)] void blur(); [id(DISPID_IHTMLWINDOW2_SCROLL)] void scroll([in] LONG x, [in] LONG y); [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)] IOmNavigator* clientInformation(); [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)] void clearInterval([in] LONG timerID); [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)] void offscreenBuffering(VARIANT v); [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)] VARIANT offscreenBuffering(); [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)] VARIANT execScript([in] BSTR code, [defaultvalue("JScript"), in] BSTR language); [id(DISPID_IHTMLWINDOW2_TOSTRING)] BSTR toString(); [id(DISPID_IHTMLWINDOW2_SCROLLBY)] void scrollBy([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_SCROLLTO)] void scrollTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_MOVETO)] void moveTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_MOVEBY)] void moveBy([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_RESIZETO)] void resizeTo([in] LONG x, [in] LONG y); [id(DISPID_IHTMLWINDOW2_RESIZEBY)] void resizeBy([in] LONG x, [in] LONG y); [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)] IDispatch* external(); [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)] LONG screenLeft(); [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)] LONG screenTop(); [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)] VARIANT_BOOL attachEvent([in] BSTR event, [in] IDispatch* pDisp); [id(DISPID_IHTMLWINDOW3_DETACHEVENT)] void detachEvent([in] BSTR event, [in] IDispatch* pDisp); [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)] LONG setTimeout([in] VARIANT* expression, [in] LONG msec, [optional, in] VARIANT* language); [id(DISPID_IHTMLWINDOW3_SETINTERVAL)] LONG setInterval([in] VARIANT* expression, [in] LONG msec, [optional, in] VARIANT* language); [id(DISPID_IHTMLWINDOW3_PRINT)] void print(); [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] void onbeforeprint(VARIANT v); [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable] VARIANT onbeforeprint(); [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] void onafterprint(VARIANT v); [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable] VARIANT onafterprint(); [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)] IHTMLDataTransfer* clipboardData(); [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)] IHTMLWindow2* showModelessDialog([defaultvalue(""), in] BSTR url, [optional, in] VARIANT* varArgIn, [optional, in] VARIANT* options); [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)] IDispatch* createPopup([optional, in] VARIANT* varArgIn); [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)] IHTMLFrameBase* frameElement(); [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)] void XMLHttpRequest(VARIANT v); [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)] VARIANT XMLHttpRequest(); [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)] IHTMLStorage *sessionStorage(); [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)] IHTMLStorage *localStorage(); [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable] void onhashchange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable] VARIANT onhashchange(); [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)] long maxConnectionsPerServer(); [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)] void postMessage( [in] BSTR msg, [in, optional] VARIANT targetOrigin); [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)] BSTR toStaticHTML([in] BSTR bstrHTML); [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable] void onmessage(VARIANT v); [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable] VARIANT onmessage(); [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)] void msWriteProfilerMark([in] BSTR bstrProfilerMarkName); [id(DISPID_IHTMLWINDOW7_GETSELECTION)] IHTMLSelection *getSelection(); [id(DISPID_IHTMLWINDOW7_GETCOMPUTEDSTYLE)] IHTMLCSSStyleDeclaration *getComputedStyle( [in] IHTMLDOMNode *varArgIn, [in, defaultvalue("")] BSTR bstrPseudoElt); [propget, id(DISPID_IHTMLWINDOW7_STYLEMEDIA)] IHTMLStyleMedia *styleMedia(); [propput, id(DISPID_IHTMLWINDOW7_PERFORMANCE)] void performance(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_PERFORMANCE)] VARIANT performance(); [propget, id(DISPID_IHTMLWINDOW7_INNERWIDTH)] long innerWidth(); [propget, id(DISPID_IHTMLWINDOW7_INNERHEIGHT)] long innerHeight(); [propget, id(DISPID_IHTMLWINDOW7_PAGEXOFFSET)] long pageXOffset(); [propget, id(DISPID_IHTMLWINDOW7_PAGEYOFFSET)] long pageYOffset(); [propget, id(DISPID_IHTMLWINDOW7_SCREENX)] long screenX(); [propget, id(DISPID_IHTMLWINDOW7_SCREENY)] long screenY(); [propget, id(DISPID_IHTMLWINDOW7_OUTERWIDTH)] long outerWidth(); [propget, id(DISPID_IHTMLWINDOW7_OUTERHEIGHT)] long outerHeight(); [propput, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable] void onabort(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable] VARIANT onabort(); [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable] void oncanplay(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable] VARIANT oncanplay(); [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable] void oncanplaythrough(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable] VARIANT oncanplaythrough(); [propput, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable] void onchange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable] VARIANT onchange(); [propput, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable] void onclick(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable] VARIANT onclick(); [propput, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable] void oncontextmenu(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable] VARIANT oncontextmenu(); [propput, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable] void ondblclick(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable] VARIANT ondblclick(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable] void ondrag(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable] VARIANT ondrag(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable] void ondragend(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable] VARIANT ondragend(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable] void ondragenter(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable] VARIANT ondragenter(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable] void ondragleave(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable] VARIANT ondragleave(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable] void ondragover(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable] VARIANT ondragover(); [propput, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable] void ondragstart(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable] VARIANT ondragstart(); [propput, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable] void ondrop(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable] VARIANT ondrop(); [propput, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable] void ondurationchange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable] VARIANT ondurationchange(); [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable] void onfocusin(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable] VARIANT onfocusin(); [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable] void onfocusout(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable] VARIANT onfocusout(); [propput, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable] void oninput(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable] VARIANT oninput(); [propput, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable] void onemptied(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable] VARIANT onemptied(); [propput, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable] void onended(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable] VARIANT onended(); [propput, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable] void onkeydown(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable] VARIANT onkeydown(); [propput, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable] void onkeypress(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable] VARIANT onkeypress(); [propput, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable] void onkeyup(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable] VARIANT onkeyup(); [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable] void onloadeddata(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable] VARIANT onloadeddata(); [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable] void onloadedmetadata(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable] VARIANT onloadedmetadata(); [propput, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable] void onloadstart(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable] VARIANT onloadstart(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable] void onmousedown(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable] VARIANT onmousedown(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable] void onmouseenter(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable] VARIANT onmouseenter(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable] void onmouseleave(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable] VARIANT onmouseleave(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable] void onmousemove(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable] VARIANT onmousemove(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable] void onmouseout(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable] VARIANT onmouseout(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable] void onmouseover(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable] VARIANT onmouseover(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable] void onmouseup(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable] VARIANT onmouseup(); [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable] void onmousewheel(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable] VARIANT onmousewheel(); [propput, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable] void onoffline(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable] VARIANT onoffline(); [propput, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable] void ononline(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable] VARIANT ononline(); [propput, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable] void onprogress(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable] VARIANT onprogress(); [propput, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable] void onratechange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable] VARIANT onratechange(); [propput, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable] void onreadystatechange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable] VARIANT onreadystatechange(); [propput, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable] void onreset(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable] VARIANT onreset(); [propput, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable] void onseeked(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable] VARIANT onseeked(); [propput, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable] void onseeking(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable] VARIANT onseeking(); [propput, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable] void onselect(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable] VARIANT onselect(); [propput, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable] void onstalled(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable] VARIANT onstalled(); [propput, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable] void onstorage(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable] VARIANT onstorage(); [propput, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable] void onsubmit(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable] VARIANT onsubmit(); [propput, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable] void onsuspend(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable] VARIANT onsuspend(); [propput, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable] void ontimeupdate(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable] VARIANT ontimeupdate(); [propput, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable] void onpause(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable] VARIANT onpause(); [propput, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable] void onplay(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable] VARIANT onplay(); [propput, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable] void onplaying(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable] VARIANT onplaying(); [propput, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable] void onvolumechange(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable] VARIANT onvolumechange(); [propput, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable] void onwaiting(VARIANT v); [propget, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable] VARIANT onwaiting(); WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL; } /***************************************************************************** * HTMLWindowEvents interface */ [ hidden, uuid(96A0A4E0-D062-11cf-94B6-00AA0060275C) ] dispinterface HTMLWindowEvents { properties: methods: [id(DISPID_HTMLWINDOWEVENTS_ONLOAD)] void onload(); [id(DISPID_HTMLWINDOWEVENTS_ONUNLOAD)] void onunload(); [id(DISPID_HTMLWINDOWEVENTS_ONHELP)] VARIANT_BOOL onhelp(); [id(DISPID_HTMLWINDOWEVENTS_ONFOCUS)] void onfocus(); [id(DISPID_HTMLWINDOWEVENTS_ONBLUR)] void onblur(); [id(DISPID_HTMLWINDOWEVENTS_ONERROR)] void onerror([in] BSTR description, [in] BSTR url, [in] LONG line); [id(DISPID_HTMLWINDOWEVENTS_ONRESIZE)] void onresize(); [id(DISPID_HTMLWINDOWEVENTS_ONSCROLL)] void onscroll(); [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD)] void onbeforeunload(); [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT)] void onbeforeprint(); [id(DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT)] void onafterprint(); } /***************************************************************************** * HTMLWindowEvents2 interface */ [ hidden, uuid(3050f625-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface HTMLWindowEvents2 { properties: methods: [id(DISPID_HTMLWINDOWEVENTS2_ONLOAD)] void onload([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONUNLOAD)] void onunload([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONHELP)] VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONFOCUS)] void onfocus([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONBLUR)] void onblur([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONERROR)] void onerror([in] BSTR description, [in] BSTR url, [in] LONG line); [id(DISPID_HTMLWINDOWEVENTS2_ONRESIZE)] void onresize([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONSCROLL)] void onscroll([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD)] void onbeforeunload([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT)] void onbeforeprint([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT)] void onafterprint([in] IHTMLEventObj* pEvtObj); } /***************************************************************************** * HTMLWindowProxy class */ [ uuid(3050f391-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLWindowProxy { [default] dispinterface DispHTMLWindowProxy; [source, default] dispinterface HTMLWindowEvents; [source] dispinterface HTMLWindowEvents2; interface IHTMLWindow2; interface IHTMLWindow3; interface IHTMLWindow4; interface IHTMLWindow5; } /***************************************************************************** * HTMLDocumentEvents2 interface */ [ hidden, uuid(3050f613-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface HTMLDocumentEvents2 { properties: methods: [id(DISPID_HTMLDOCUMENTEVENTS2_ONHELP)] VARIANT_BOOL onhelp([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONCLICK)] VARIANT_BOOL onclick([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK)] VARIANT_BOOL ondblclick([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN)] void onkeydown([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP)] void onkeyup([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS)] VARIANT_BOOL onkeypress([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN)] void onmousedown([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE)] void onmousemove([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP)] void onmouseup([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT)] void onmouseout([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER)] void onmouseover([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE)] void onreadystatechange([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE)] void onafterupdate([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT)] VARIANT_BOOL onrowexit([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER)] void onrowenter([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART)] VARIANT_BOOL ondragstart([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART)] VARIANT_BOOL onselectstart([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONSTOP)] VARIANT_BOOL onstop([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE)] void onrowsdelete([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED)] void onrowsinserted([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE)] void oncellchange([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE)] void onpropertychange([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED)] void ondatasetchanged([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE)] void ondataavailable([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE)] void ondatasetcomplete([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS)] void onbeforeeditfocus([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE)] void onselectionchange([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN)] void onfocusin([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT)] void onfocusout([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE)] void onactivate([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE)] void ondeactivate([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj *pEvtObj); [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj *pEvtObj); } /***************************************************************************** * HTMLDocumentEvents interface */ [ hidden, uuid(3050f260-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface HTMLDocumentEvents { properties: methods: [id(DISPID_HTMLDOCUMENTEVENTS_ONHELP)] VARIANT_BOOL onhelp(); [id(DISPID_HTMLDOCUMENTEVENTS_ONCLICK)] VARIANT_BOOL onclick(); [id(DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK)] VARIANT_BOOL ondblclick(); [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN)] void onkeydown(); [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYUP)] void onkeyup(); [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS)] VARIANT_BOOL onkeypress(); [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN)] void onmousedown(); [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE)] void onmousemove(); [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP)] void onmouseup(); [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT)] void onmouseout(); [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER)] void onmouseover(); [id(DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE)] void onreadystatechange(); [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate(); [id(DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE)] void onafterupdate(); [id(DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT)] VARIANT_BOOL onrowexit(); [id(DISPID_HTMLDOCUMENTEVENTS_ONROWENTER)] void onrowenter(); [id(DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART)] VARIANT_BOOL ondragstart(); [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART)] VARIANT_BOOL onselectstart(); [id(DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate(); [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu(); [id(DISPID_HTMLDOCUMENTEVENTS_ONSTOP)] VARIANT_BOOL onstop(); [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE)] void onrowsdelete(); [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED)] void onrowsinserted(); [id(DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE)] void oncellchange(); [id(DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE)] void onpropertychange(); [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED)] void ondatasetchanged(); [id(DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE)] void ondataavailable(); [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE)] void ondatasetcomplete(); [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS)] void onbeforeeditfocus(); [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE)] void onselectionchange(); [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect(); [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel(); [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN)] void onfocusin(); [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT)] void onfocusout(); [id(DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE)] void onactivate(); [id(DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE)] void ondeactivate(); [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate(); [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate(); } /***************************************************************************** * HTMLTextContainerEvents interface */ [ hidden, uuid(1ff6aa72-5842-11cf-a707-00aa00c0098d) ] dispinterface HTMLTextContainerEvents { properties: methods: [id(DISPID_HTMLELEMENTEVENTS_ONHELP)] VARIANT_BOOL onhelp(); [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)] VARIANT_BOOL onclick(); [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)] VARIANT_BOOL ondblclick(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)] VARIANT_BOOL onkeypress(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)] void onkeydown(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)] void onkeyup(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)] void onmouseout(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)] void onmouseover(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)] void onmousemove(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)] void onmousedown(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)] void onmouseup(); [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)] VARIANT_BOOL onselectstart(); [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)] void onfilterchange(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)] VARIANT_BOOL ondragstart(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)] void onafterupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)] VARIANT_BOOL onrowexit(); [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)] void onrowenter(); [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)] void ondatasetchanged(); [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)] void ondataavailable(); [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)] void ondatasetcomplete(); [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)] void onlosecapture(); [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)] void onpropertychange(); [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)] void onscroll(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)] void onfocus(); [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)] void onblur(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)] void onresize(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)] VARIANT_BOOL ondrag(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)] void ondragend(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)] VARIANT_BOOL ondragenter(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)] VARIANT_BOOL ondragover(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)] void ondragleave(); [id(DISPID_HTMLELEMENTEVENTS_ONDROP)] VARIANT_BOOL ondrop(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)] VARIANT_BOOL onbeforecut(); [id(DISPID_HTMLELEMENTEVENTS_ONCUT)] VARIANT_BOOL oncut(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)] VARIANT_BOOL onbeforecopy(); [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)] VARIANT_BOOL oncopy(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)] VARIANT_BOOL onbeforepaste(); [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)] VARIANT_BOOL onpaste(); [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu(); [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)] void onrowsdelete(); [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)] void onrowsinserted(); [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)] void oncellchange(); [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)] void onreadystatechange(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)] void onbeforeeditfocus(); [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)] void onlayoutcomplete(); [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)] void onpage(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)] void onmove(); [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)] VARIANT_BOOL onmovestart(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)] void onmoveend(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)] VARIANT_BOOL onresizestart(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)] void onresizeend(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)] void onmouseenter(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)] void onmouseleave(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel(); [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)] void onactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)] void ondeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)] void onfocusin(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)] void onfocusout(); [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE)] void onchange(); [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT)] void onselect(); } /***************************************************************************** * HTMLTextContainerEvents2 interface */ [ hidden, uuid(3050f624-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface HTMLTextContainerEvents2 { properties: methods: [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)] VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)] VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)] VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)] VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)] void onkeydown([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)] void onkeyup([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)] void onmouseout([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)] void onmouseover([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)] void onmousemove([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)] void onmousedown([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)] void onmouseup([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)] VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)] void onfilterchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)] VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)] void onafterupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)] VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)] void onrowenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)] void ondatasetchanged([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)] void ondataavailable([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)] void ondatasetcomplete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)] void onlosecapture([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)] void onpropertychange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)] void onscroll([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)] void onfocus([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)] void onblur([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)] void onresize([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)] VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)] void ondragend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)] VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)] VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)] void ondragleave([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)] VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)] VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)] VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)] VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)] VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)] VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)] VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)] void onrowsdelete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)] void onrowsinserted([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)] void oncellchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)] void onreadystatechange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)] void onlayoutcomplete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)] void onpage([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)] void onmouseenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)] void onmouseleave([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)] void onactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)] void ondeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)] void onfocusin([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)] void onfocusout([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)] void onmove([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)] VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)] void onmoveend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)] VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)] void onresizeend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE)] void onchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT)] void onselect([in] IHTMLEventObj* pEvtObj); } /***************************************************************************** * IDOMProcessingInstruction interface */ [ odl, oleautomation, dual, uuid(30510742-98b5-11cf-bb82-00aa00bdce0b) ] interface IDOMProcessingInstruction : IDispatch { [propget, id(DISPID_IDOMPROCESSINGINSTRUCTION_TARGET)] HRESULT target([out, retval] BSTR *p); [propput, id(DISPID_IDOMPROCESSINGINSTRUCTION_DATA)] HRESULT data([in] BSTR v); [propget, id(DISPID_IDOMPROCESSINGINSTRUCTION_DATA)] HRESULT data([out, retval] BSTR *p); } /***************************************************************************** * IHTMLPerformanceNavigation interface */ [ odl, oleautomation, dual, uuid(30510750-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLPerformanceNavigation : IDispatch { [propget, id(DISPID_IHTMLPERFORMANCENAVIGATION_TYPE)] HRESULT type([out, retval] ULONG *p); [propget, id(DISPID_IHTMLPERFORMANCENAVIGATION_REDIRECTCOUNT)] HRESULT redirectCount([out, retval] ULONG *p); [id(DISPID_IHTMLPERFORMANCENAVIGATION_TOSTRING)] HRESULT toString([out, retval] BSTR *string); [id(DISPID_IHTMLPERFORMANCENAVIGATION_TOJSON)] HRESULT toJSON([out, retval] VARIANT *pVar); } /***************************************************************************** * IHTMLPerformanceTiming interface */ [ odl, oleautomation, dual, uuid(30510752-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLPerformanceTiming : IDispatch { [propget, id(DISPID_IHTMLPERFORMANCETIMING_NAVIGATIONSTART)] HRESULT navigationStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_UNLOADEVENTSTART)] HRESULT unloadEventStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_UNLOADEVENTEND)] HRESULT unloadEventEnd([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_REDIRECTSTART)] HRESULT redirectStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_REDIRECTEND)] HRESULT redirectEnd([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_FETCHSTART)] HRESULT fetchStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMAINLOOKUPSTART)] HRESULT domainLookupStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMAINLOOKUPEND)] HRESULT domainLookupEnd([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_CONNECTSTART)] HRESULT connectStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_CONNECTEND)] HRESULT connectEnd([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_REQUESTSTART)] HRESULT requestStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_RESPONSESTART)] HRESULT responseStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_RESPONSEEND)] HRESULT responseEnd([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMLOADING)] HRESULT domLoading([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMINTERACTIVE)] HRESULT domInteractive([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMCONTENTLOADEDEVENTSTART)] HRESULT domContentLoadedEventStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMCONTENTLOADEDEVENTEND)] HRESULT domContentLoadedEventEnd([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMCOMPLETE)] HRESULT domComplete([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_LOADEVENTSTART)] HRESULT loadEventStart([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_LOADEVENTEND)] HRESULT loadEventEnd([out, retval] ULONGLONG *p); [propget, id(DISPID_IHTMLPERFORMANCETIMING_MSFIRSTPAINT)] HRESULT msFirstPaint([out, retval] ULONGLONG *p); [id(DISPID_IHTMLPERFORMANCETIMING_TOSTRING)] HRESULT toString([out, retval] BSTR *string); [id(DISPID_IHTMLPERFORMANCETIMING_TOJSON)] HRESULT toJSON([out, retval] VARIANT *pVar); } /***************************************************************************** * IHTMLPerformance interface */ [ odl, oleautomation, dual, uuid(3051074e-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLPerformance : IDispatch { [propget, id(DISPID_IHTMLPERFORMANCE_NAVIGATION)] HRESULT navigation([out, retval] IHTMLPerformanceNavigation **p); [propget, id(DISPID_IHTMLPERFORMANCE_TIMING)] HRESULT timing([out, retval] IHTMLPerformanceTiming **p); [id(DISPID_IHTMLPERFORMANCE_TOSTRING)] HRESULT toString([out, retval] BSTR *string); [id(DISPID_IHTMLPERFORMANCE_TOJSON)] HRESULT toJSON([out, retval] VARIANT *pVar); } /***************************************************************************** * IHTMLDocument interface */ [ odl, oleautomation, dual, uuid(626FC520-A41E-11CF-A731-00A0C9082637) ] interface IHTMLDocument : IDispatch { [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT)] HRESULT Script([retval, out] IDispatch **p); } /***************************************************************************** * IHTMLDocument2 interface */ [ odl, oleautomation, dual, uuid(332C4425-26CB-11D0-B483-00C04FD90119) ] interface IHTMLDocument2 : IHTMLDocument { [propget, id(DISPID_IHTMLDOCUMENT2_ALL)] HRESULT all([retval, out] IHTMLElementCollection **p); [propget, id(DISPID_IHTMLDOCUMENT2_BODY)] HRESULT body([retval, out] IHTMLElement **p); [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)] HRESULT activeElement([retval, out] IHTMLElement **p); [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)] HRESULT images([retval, out] IHTMLElementCollection **p); [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)] HRESULT applets([retval, out] IHTMLElementCollection **p); [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)] HRESULT links([retval, out] IHTMLElementCollection **p); [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)] HRESULT forms([retval, out] IHTMLElementCollection **p); [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)] HRESULT anchors([retval, out] IHTMLElementCollection **p); [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)] HRESULT title([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)] HRESULT title([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)] HRESULT scripts([retval, out] IHTMLElementCollection **p); [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)] HRESULT designMode([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)] HRESULT designMode([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)] HRESULT selection([retval, out] IHTMLSelectionObject **p); [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE)] HRESULT readyState([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)] HRESULT frames([retval, out] IHTMLFramesCollection2 **p); [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)] HRESULT embeds([retval, out] IHTMLElementCollection **p); [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)] HRESULT plugins([retval, out] IHTMLElementCollection **p); [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)] HRESULT alinkColor([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)] HRESULT alinkColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)] HRESULT bgColor([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)] HRESULT bgColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)] HRESULT fgColor([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)] HRESULT fgColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)] HRESULT linkColor([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)] HRESULT linkColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)] HRESULT vlinkColor([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)] HRESULT vlinkColor([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)] HRESULT referrer([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)] HRESULT location([retval, out] IHTMLLocation **p); [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)] HRESULT lastModified([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOCUMENT2_URL)] HRESULT URL([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_URL)] HRESULT URL([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)] HRESULT domain([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)] HRESULT domain([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)] HRESULT cookie([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)] HRESULT cookie([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO)] HRESULT expando([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO)] HRESULT expando([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET)] HRESULT charset([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET)] HRESULT charset([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)] HRESULT defaultCharset([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)] HRESULT defaultCharset([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)] HRESULT mimeType([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)] HRESULT fileSize([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)] HRESULT fileCreatedDate([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)] HRESULT fileModifiedDate([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)] HRESULT fileUpdatedDate([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)] HRESULT security([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)] HRESULT protocol([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)] HRESULT nameProp([retval, out] BSTR *p); [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)] HRESULT write([in] SAFEARRAY(VARIANT) psarray); [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)] HRESULT writeln([in] SAFEARRAY(VARIANT) psarray); [id(DISPID_IHTMLDOCUMENT2_OPEN)] HRESULT open( [defaultvalue("text/html"), in] BSTR url, [optional, in] VARIANT name, [optional, in] VARIANT features, [optional, in] VARIANT replace, [retval, out] IDispatch **pomWindowResult); [id(DISPID_IHTMLDOCUMENT2_CLOSE)] HRESULT close(); [id(DISPID_IHTMLDOCUMENT2_CLEAR)] HRESULT clear(); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)] HRESULT queryCommandSupported( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)] HRESULT queryCommandEnabled( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)] HRESULT queryCommandState( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)] HRESULT queryCommandIndeterm( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)] HRESULT queryCommandText( [in] BSTR cmdID, [retval, out] BSTR *pcmdText); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)] HRESULT queryCommandValue( [in] BSTR cmdID, [retval, out] VARIANT *pcmdValue); [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)] HRESULT execCommand( [in] BSTR cmdID, [defaultvalue(0), in] VARIANT_BOOL showUI, [optional, in] VARIANT value, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)] HRESULT execCommandShowHelp( [in] BSTR cmdID, [retval, out] VARIANT_BOOL *pfRet); [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)] HRESULT createElement( [in] BSTR eTag, [retval, out] IHTMLElement **newElem); [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP)] HRESULT onhelp([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP)] HRESULT onhelp([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK)] HRESULT onclick([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK)] HRESULT onclick([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)] HRESULT ondblclick([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)] HRESULT ondblclick([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)] HRESULT onkeyup([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)] HRESULT onkeyup([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)] HRESULT onkeydown([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)] HRESULT onkeydown([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)] HRESULT onkeypress([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)] HRESULT onkeypress([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)] HRESULT onmouseup([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)] HRESULT onmouseup([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)] HRESULT onmousedown([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)] HRESULT onmousedown([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)] HRESULT onmousemove([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)] HRESULT onmousemove([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)] HRESULT onmouseout([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)] HRESULT onmouseout([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)] HRESULT onmouseover([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)] HRESULT onmouseover([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)] HRESULT onreadystatechange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)] HRESULT onafterupdate([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)] HRESULT onafterupdate([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)] HRESULT onrowexit([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)] HRESULT onrowexit([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)] HRESULT onrowenter([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)] HRESULT onrowenter([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)] HRESULT ondragstart([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)] HRESULT ondragstart([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)] HRESULT onselectstart([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)] HRESULT onselectstart([retval, out] VARIANT *p); [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)] HRESULT elementFromPoint( [in] LONG x, [in] LONG y, [retval, out] IHTMLElement **elementHit); [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)] HRESULT parentWindow([retval, out] IHTMLWindow2 **p); [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)] HRESULT styleSheets([retval, out] IHTMLStyleSheetsCollection **p); [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)] HRESULT onbeforeupdate([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)] HRESULT onbeforeupdate([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)] HRESULT onerrorupdate([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)] HRESULT onerrorupdate([retval, out] VARIANT *p); [id(DISPID_IHTMLDOCUMENT2_TOSTRING)] HRESULT toString([retval, out] BSTR *String); [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)] HRESULT createStyleSheet( [defaultvalue(""), in] BSTR bstrHref, [defaultvalue(-1), in] LONG lIndex, [retval, out] IHTMLStyleSheet **ppnewStyleSheet); } /***************************************************************************** * IHTMLDocument3 interface */ [ odl, oleautomation, dual, uuid(3050f485-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDocument3 : IDispatch { [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)] HRESULT releaseCapture(); [id(DISPID_IHTMLDOCUMENT3_RECALC)] HRESULT recalc([defaultvalue(0), in] VARIANT_BOOL fForce); [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)] HRESULT createTextNode( [in] BSTR text, [retval, out] IHTMLDOMNode **newTextNode); [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)] HRESULT documentElement([retval, out] IHTMLElement **p); [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden] HRESULT uniqueID([retval, out] BSTR *p); [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)] HRESULT attachEvent( [in] BSTR event, [in] IDispatch* pDisp, [retval, out] VARIANT_BOOL *pfResult); [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)] HRESULT detachEvent( [in] BSTR event, [in] IDispatch *pDisp); [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable] HRESULT onrowsdelete([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable] HRESULT onrowsdelete([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable] HRESULT onrowsinserted([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable] HRESULT onrowsinserted([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable] HRESULT oncellchange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable] HRESULT oncellchange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable] HRESULT ondatasetchanged([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable] HRESULT ondatasetchanged([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable] HRESULT ondataavailable([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable] HRESULT ondataavailable([retval, out] VARIANT * p); [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable] HRESULT ondatasetcomplete([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable] HRESULT ondatasetcomplete([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable] HRESULT onpropertychange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable] HRESULT onpropertychange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT3_DIR)] HRESULT dir([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT3_DIR)] HRESULT dir([retval, out] BSTR *p); [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable] HRESULT oncontextmenu([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable] HRESULT oncontextmenu([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable] HRESULT onstop([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable] HRESULT onstop([retval, out] VARIANT *p); [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)] HRESULT createDocumentFragment([retval, out] IHTMLDocument2 **pNewDoc); [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted] HRESULT parentDocument([retval, out] IHTMLDocument2 **p); [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted] HRESULT enableDownload([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted] HRESULT enableDownload([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted] HRESULT baseUrl([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted] HRESULT baseUrl([retval, out] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT3_CHILDNODES)] HRESULT childNodes([retval, out] IDispatch **p); [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted] HRESULT inheritStyleSheets([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted] HRESULT inheritStyleSheets([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable] HRESULT onbeforeeditfocus([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable] HRESULT onbeforeeditfocus([retval, out] VARIANT *p); [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)] HRESULT getElementsByName( [in] BSTR v, [retval, out] IHTMLElementCollection **pelColl); [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)] HRESULT getElementById( [in] BSTR v, [retval, out] IHTMLElement **pel); [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)] HRESULT getElementsByTagName( [in] BSTR v, [retval, out] IHTMLElementCollection **pelColl); } /***************************************************************************** * IHTMLDocument4 interface */ [ odl, oleautomation, dual, uuid(3050f69a-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDocument4 : IDispatch { [id(DISPID_IHTMLDOCUMENT4_FOCUS)] HRESULT focus(); [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)] HRESULT hasFocus([retval, out] VARIANT_BOOL *pfFocus); [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable] HRESULT onselectionchange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable] HRESULT onselectionchange([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)] HRESULT namespaces([retval, out] IDispatch **p); [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)] HRESULT createDocumentFromUrl( [in] BSTR bstrUrl, [in] BSTR bstrOptions, [retval, out] IHTMLDocument2 **newDoc); [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)] HRESULT media([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)] HRESULT media([retval, out] BSTR *p); [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)] HRESULT createEventObject( [optional, in] VARIANT *pvarEventObject, [retval, out] IHTMLEventObj **ppEventObj); [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)] HRESULT fireEvent( [in] BSTR bstrEventName, [optional, in] VARIANT *pvarEventObject, [retval, out] VARIANT_BOOL *pfCancelled); [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)] HRESULT createRenderStyle( [in] BSTR v, [retval, out] IHTMLRenderStyle **ppIHTMLRenderStyle); [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable] HRESULT oncontrolselect([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable] HRESULT oncontrolselect([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)] HRESULT URLUnencoded([retval, out] BSTR *p); } /***************************************************************************** * IHTMLDocument5 interface */ [ odl, oleautomation, dual, uuid(3050f80c-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDocument5 : IDispatch { [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable] HRESULT onmousewheel([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable] HRESULT onmousewheel([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)] HRESULT doctype([retval, out] IHTMLDOMNode **p); [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)] HRESULT implementation([retval, out] IHTMLDOMImplementation **p); [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)] HRESULT createAttribute( [in] BSTR bstrattrName, [retval, out] IHTMLDOMAttribute **ppattribute); [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)] HRESULT createComment( [in] BSTR bstrdata, [retval, out] IHTMLDOMNode **ppRetNode); [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable] HRESULT onfocusin([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable] HRESULT onfocusin([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable] HRESULT onfocusout([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable] HRESULT onfocusout([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable] HRESULT onactivate([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable] HRESULT onactivate([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable] HRESULT ondeactivate([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable] HRESULT ondeactivate([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable] HRESULT onbeforeactivate([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable] HRESULT onbeforeactivate([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable] HRESULT onbeforedeactivate([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable] HRESULT onbeforedeactivate([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)] HRESULT compatMode([retval, out] BSTR *p); } /***************************************************************************** * IHTMLDocument6 interface */ [ odl, oleautomation, dual, uuid(30510417-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDocument6 : IDispatch { [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)] HRESULT compatible([retval, out] IHTMLDocumentCompatibleInfoCollection **p); [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)] HRESULT documentMode([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable] HRESULT onstorage([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable] HRESULT onstorage([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable] HRESULT onstoragecommit([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable] HRESULT onstoragecommit([retval, out] VARIANT *p); [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)] HRESULT getElementById( [in] BSTR bstrId, [retval, out] IHTMLElement2 **p); [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)] HRESULT updateSettings(); } /***************************************************************************** * IHTMLDocument7 interface */ [ odl, oleautomation, dual, uuid(305104b8-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDocument7 : IDispatch { [propget, id(DISPID_IHTMLDOCUMENT7_DEFAULTVIEW)] HRESULT defaultView([out, retval] IHTMLWindow2 **p); [id(DISPID_IHTMLDOCUMENT7_CREATECDATASECTION)] HRESULT createCDATASection( [in] BSTR text, [out, retval] IHTMLDOMNode **newCDATASectionNode); [id(DISPID_IHTMLDOCUMENT7_GETSELECTION)] HRESULT getSelection([out, retval] IHTMLSelection **ppIHTMLSelection); [id(DISPID_IHTMLDOCUMENT7_GETELEMENTSBYTAGNAMENS)] HRESULT getElementsByTagNameNS( [in] VARIANT *pvarNS, [in] BSTR bstrLocalName, [out, retval] IHTMLElementCollection **pelColl); [id(DISPID_IHTMLDOCUMENT7_CREATEELEMENTNS)] HRESULT createElementNS( [in] VARIANT *pvarNS, [in] BSTR bstrTag, [out, retval] IHTMLElement **newElem); [id(DISPID_IHTMLDOCUMENT7_CREATEATTRIBUTENS)] HRESULT createAttributeNS( [in] VARIANT *pvarNS, [in] BSTR bstrAttrName, [out, retval] IHTMLDOMAttribute **ppAttribute); [propput, id(DISPID_IHTMLDOCUMENT7_ONMSTHUMBNAILCLICK), displaybind, bindable] HRESULT onmsthumbnailclick([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONMSTHUMBNAILCLICK), displaybind, bindable] HRESULT onmsthumbnailclick([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLDOCUMENT7_CHARACTERSET)] HRESULT characterSet([out, retval] BSTR *p); [id(DISPID_IHTMLDOCUMENT7_IE9_CREATEELEMENT)] HRESULT createElement( [in] BSTR bstrTag, [out, retval] IHTMLElement **newElem); [id(DISPID_IHTMLDOCUMENT7_IE9_CREATEATTRIBUTE)] HRESULT createAttribute( [in] BSTR bstrAttrName, [out, retval] IHTMLDOMAttribute **ppAttribute); [id(DISPID_IHTMLDOCUMENT7_GETELEMENTSBYCLASSNAME)] HRESULT getElementsByClassName( [in] BSTR v, [out, retval] IHTMLElementCollection **pel); [id(DISPID_IHTMLDOCUMENT7_CREATEPROCESSINGINSTRUCTION)] HRESULT createProcessingInstruction( [in] BSTR bstrTarget, [in] BSTR bstrData, [out, retval] IDOMProcessingInstruction **newProcessingInstruction); [id(DISPID_IHTMLDOCUMENT7_ADOPTNODE)] HRESULT adoptNode( [in] IHTMLDOMNode *pNodeSource, [out, retval] IHTMLDOMNode3 **ppNodeDest); [propput, id(DISPID_IHTMLDOCUMENT7_ONMSSITEMODEJUMPLISTITEMREMOVED), displaybind, bindable] HRESULT onmssitemodejumplistitemremoved([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONMSSITEMODEJUMPLISTITEMREMOVED), displaybind, bindable] HRESULT onmssitemodejumplistitemremoved([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLDOCUMENT7_IE9_ALL)] HRESULT all([out, retval] IHTMLElementCollection **p); [propget, id(DISPID_IHTMLDOCUMENT7_INPUTENCODING)] HRESULT inputEncoding([out, retval] BSTR *p); [propget, id(DISPID_IHTMLDOCUMENT7_XMLENCODING)] HRESULT xmlEncoding([out, retval] BSTR *p); [propput, id(DISPID_IHTMLDOCUMENT7_XMLSTANDALONE)] HRESULT xmlStandalone([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLDOCUMENT7_XMLSTANDALONE)] HRESULT xmlStandalone([out, retval] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLDOCUMENT7_XMLVERSION)] HRESULT xmlVersion([in] BSTR v); [propget, id(DISPID_IHTMLDOCUMENT7_XMLVERSION)] HRESULT xmlVersion([out, retval] BSTR *p); [id(DISPID_IHTMLDOCUMENT7_HASATTRIBUTES)] HRESULT hasAttributes([out, retval] VARIANT_BOOL *pfHasAttributes); [propput, id(DISPID_IHTMLDOCUMENT7_ONABORT), displaybind, bindable] HRESULT onabort([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONABORT), displaybind, bindable] HRESULT onabort([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONBLUR), displaybind, bindable] HRESULT onblur([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONBLUR), displaybind, bindable] HRESULT onblur([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONCANPLAY), displaybind, bindable] HRESULT oncanplay([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONCANPLAY), displaybind, bindable] HRESULT oncanplay([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONCANPLAYTHROUGH), displaybind, bindable] HRESULT oncanplaythrough([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONCANPLAYTHROUGH), displaybind, bindable] HRESULT oncanplaythrough([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONCHANGE), displaybind, bindable] HRESULT onchange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONCHANGE), displaybind, bindable] HRESULT onchange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAG), displaybind, bindable] HRESULT ondrag([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAG), displaybind, bindable] HRESULT ondrag([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAGEND), displaybind, bindable] HRESULT ondragend([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAGEND), displaybind, bindable] HRESULT ondragend([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAGENTER), displaybind, bindable] HRESULT ondragenter([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAGENTER), displaybind, bindable] HRESULT ondragenter([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAGLEAVE), displaybind, bindable] HRESULT ondragleave([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAGLEAVE), displaybind, bindable] HRESULT ondragleave([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAGOVER), displaybind, bindable] HRESULT ondragover([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAGOVER), displaybind, bindable] HRESULT ondragover([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONDROP), displaybind, bindable] HRESULT ondrop([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONDROP), displaybind, bindable] HRESULT ondrop([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONDURATIONCHANGE), displaybind, bindable] HRESULT ondurationchange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONDURATIONCHANGE), displaybind, bindable] HRESULT ondurationchange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONEMPTIED), displaybind, bindable] HRESULT onemptied([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONEMPTIED), displaybind, bindable] HRESULT onemptied([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONENDED), displaybind, bindable] HRESULT onended([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONENDED), displaybind, bindable] HRESULT onended([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONERROR), displaybind, bindable] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONERROR), displaybind, bindable] HRESULT onerror([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONFOCUS), displaybind, bindable] HRESULT onfocus([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONFOCUS), displaybind, bindable] HRESULT onfocus([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONINPUT), displaybind, bindable] HRESULT oninput([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONINPUT), displaybind, bindable] HRESULT oninput([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONLOAD), displaybind, bindable] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONLOAD), displaybind, bindable] HRESULT onload([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONLOADEDDATA), displaybind, bindable] HRESULT onloadeddata([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONLOADEDDATA), displaybind, bindable] HRESULT onloadeddata([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONLOADEDMETADATA), displaybind, bindable] HRESULT onloadedmetadata([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONLOADEDMETADATA), displaybind, bindable] HRESULT onloadedmetadata([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONLOADSTART), displaybind, bindable] HRESULT onloadstart([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONLOADSTART), displaybind, bindable] HRESULT onloadstart([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONPAUSE), displaybind, bindable] HRESULT onpause([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONPAUSE), displaybind, bindable] HRESULT onpause([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONPLAY), displaybind, bindable] HRESULT onplay([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONPLAY), displaybind, bindable] HRESULT onplay([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONPLAYING), displaybind, bindable] HRESULT onplaying([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONPLAYING), displaybind, bindable] HRESULT onplaying([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONPROGRESS), displaybind, bindable] HRESULT onprogress([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONPROGRESS), displaybind, bindable] HRESULT onprogress([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONRATECHANGE), displaybind, bindable] HRESULT onratechange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONRATECHANGE), displaybind, bindable] HRESULT onratechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONRESET), displaybind, bindable] HRESULT onreset([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONRESET), displaybind, bindable] HRESULT onreset([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONSCROLL), displaybind, bindable] HRESULT onscroll([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONSCROLL), displaybind, bindable] HRESULT onscroll([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONSEEKED), displaybind, bindable] HRESULT onseeked([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONSEEKED), displaybind, bindable] HRESULT onseeked([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONSEEKING), displaybind, bindable] HRESULT onseeking([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONSEEKING), displaybind, bindable] HRESULT onseeking([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONSELECT), displaybind, bindable] HRESULT onselect([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONSELECT), displaybind, bindable] HRESULT onselect([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONSTALLED), displaybind, bindable] HRESULT onstalled([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONSTALLED), displaybind, bindable] HRESULT onstalled([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONSUBMIT), displaybind, bindable] HRESULT onsubmit([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONSUBMIT), displaybind, bindable] HRESULT onsubmit([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONSUSPEND), displaybind, bindable] HRESULT onsuspend([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONSUSPEND), displaybind, bindable] HRESULT onsuspend([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONTIMEUPDATE), displaybind, bindable] HRESULT ontimeupdate([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONTIMEUPDATE), displaybind, bindable] HRESULT ontimeupdate([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONVOLUMECHANGE), displaybind, bindable] HRESULT onvolumechange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONVOLUMECHANGE), displaybind, bindable] HRESULT onvolumechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT7_ONWAITING), displaybind, bindable] HRESULT onwaiting([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT7_ONWAITING), displaybind, bindable] HRESULT onwaiting([out, retval] VARIANT *p); [id(DISPID_IHTMLDOCUMENT7_NORMALIZE)] HRESULT normalize(); [id(DISPID_IHTMLDOCUMENT7_IMPORTNODE)] HRESULT importNode( [in] IHTMLDOMNode *pNodeSource, [in] VARIANT_BOOL fDeep, [out, retval] IHTMLDOMNode3 **ppNodeDest); [propget, id(DISPID_IHTMLDOCUMENT7_IE9_PARENTWINDOW)] HRESULT parentWindow([out, retval] IHTMLWindow2 **p); [propputref, id(DISPID_IHTMLDOCUMENT7_IE9_BODY)] HRESULT body([in] IHTMLElement *v); [propget, id(DISPID_IHTMLDOCUMENT7_IE9_BODY)] HRESULT body([out, retval] IHTMLElement **p); [propget, id(DISPID_IHTMLDOCUMENT7_HEAD)] HRESULT head([out, retval] IHTMLElement **p); } /***************************************************************************** * IHTMLDocument8 interface */ [ odl, oleautomation, dual, uuid(305107d0-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDocument8 : IDispatch { [propput, id(DISPID_IHTMLDOCUMENT8_ONMSCONTENTZOOM), displaybind, bindable] HRESULT onmscontentzoom([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSCONTENTZOOM), displaybind, bindable] HRESULT onmscontentzoom([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERDOWN), displaybind, bindable] HRESULT onmspointerdown([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERDOWN), displaybind, bindable] HRESULT onmspointerdown([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERMOVE), displaybind, bindable] HRESULT onmspointermove([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERMOVE), displaybind, bindable] HRESULT onmspointermove([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERUP), displaybind, bindable] HRESULT onmspointerup([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERUP), displaybind, bindable] HRESULT onmspointerup([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTEROVER), displaybind, bindable] HRESULT onmspointerover([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTEROVER), displaybind, bindable] HRESULT onmspointerover([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTEROUT), displaybind, bindable] HRESULT onmspointerout([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTEROUT), displaybind, bindable] HRESULT onmspointerout([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERCANCEL), displaybind, bindable] HRESULT onmspointercancel([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERCANCEL), displaybind, bindable] HRESULT onmspointercancel([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERHOVER), displaybind, bindable] HRESULT onmspointerhover([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERHOVER), displaybind, bindable] HRESULT onmspointerhover([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURESTART), displaybind, bindable] HRESULT onmsgesturestart([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURESTART), displaybind, bindable] HRESULT onmsgesturestart([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURECHANGE), displaybind, bindable] HRESULT onmsgesturechange([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURECHANGE), displaybind, bindable] HRESULT onmsgesturechange([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREEND), displaybind, bindable] HRESULT onmsgestureend([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREEND), displaybind, bindable] HRESULT onmsgestureend([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREHOLD), displaybind, bindable] HRESULT onmsgesturehold([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREHOLD), displaybind, bindable] HRESULT onmsgesturehold([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURETAP), displaybind, bindable] HRESULT onmsgesturetap([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURETAP), displaybind, bindable] HRESULT onmsgesturetap([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREDOUBLETAP), displaybind, bindable] HRESULT onmsgesturedoubletap([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREDOUBLETAP), displaybind, bindable] HRESULT onmsgesturedoubletap([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSINERTIASTART), displaybind, bindable] HRESULT onmsinertiastart([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSINERTIASTART), displaybind, bindable] HRESULT onmsinertiastart([out, retval] VARIANT *p); [id(DISPID_IHTMLDOCUMENT8_ELEMENTSFROMPOINT)] HRESULT elementsFromPoint( [in] float x, [in] float y, [out, retval] IHTMLDOMChildrenCollection **elementsHit); [id(DISPID_IHTMLDOCUMENT8_ELEMENTSFROMRECT)] HRESULT elementsFromRect( [in] float left, [in] float top, [in] float width, [in] float height, [out, retval] IHTMLDOMChildrenCollection **elementsHit); [propput, id(DISPID_IHTMLDOCUMENT8_ONMSMANIPULATIONSTATECHANGED), displaybind, bindable] HRESULT onmsmanipulationstatechanged([in] VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT8_ONMSMANIPULATIONSTATECHANGED), displaybind, bindable] HRESULT onmsmanipulationstatechanged([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLDOCUMENT8_MSCAPSLOCKWARNINGOFF)] HRESULT msCapsLockWarningOff([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLDOCUMENT8_MSCAPSLOCKWARNINGOFF)] HRESULT msCapsLockWarningOff([out, retval] VARIANT_BOOL *p); } /***************************************************************************** * IDocumentEvent interface */ [ odl, oleautomation, dual, uuid(305104bc-98b5-11cf-bb82-00aa00bdce0b) ] interface IDocumentEvent : IDispatch { [id(DISPID_IDOCUMENTEVENT_CREATEEVENT)] HRESULT createEvent([in] BSTR eventType, [out, retval] IDOMEvent **ppEvent); } /***************************************************************************** * IDocumentSelector interface */ [ odl, oleautomation, dual, uuid(30510462-98b5-11cf-bb82-00aa00bdce0b) ] interface IDocumentSelector : IDispatch { [id(DISPID_IDOCUMENTSELECTOR_QUERYSELECTOR)] HRESULT querySelector( [in] BSTR v, [out, retval] IHTMLElement **pel); [id(DISPID_IDOCUMENTSELECTOR_QUERYSELECTORALL)] HRESULT querySelectorAll( [in] BSTR v, [out, retval] IHTMLDOMChildrenCollection **pel); } /***************************************************************************** * DispHTMLDocument dispinterface */ [ hidden, uuid(3050f55f-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLDocument { properties: methods: [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT), hidden, nonbrowsable] IDispatch *Script(); [propget, id(DISPID_IHTMLDOCUMENT2_ALL)] IHTMLElementCollection *all(); [propget, id(DISPID_IHTMLDOCUMENT2_BODY)] IHTMLElement *body(); [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)] IHTMLElement *activeElement(); [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)] IHTMLElementCollection *images(); [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)] IHTMLElementCollection *applets(); [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)] IHTMLElementCollection *links(); [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)] IHTMLElementCollection *forms(); [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)] IHTMLElementCollection *anchors(); [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)] void title(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)] BSTR title(); [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)] IHTMLElementCollection *scripts(); [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden] void designMode(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden] BSTR designMode(); [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)] IHTMLSelectionObject *selection(); [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE), bindable] BSTR readyState(); [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)] IHTMLFramesCollection2 *frames(); [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)] IHTMLElementCollection *embeds(); [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)] IHTMLElementCollection *plugins(); [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)] void alinkColor(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)] VARIANT alinkColor(); [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)] void bgColor(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)] VARIANT bgColor(); [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)] void fgColor(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)] VARIANT fgColor(); [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)] void linkColor(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)] VARIANT linkColor(); [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)] void vlinkColor(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)] VARIANT vlinkColor(); [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)] BSTR referrer(); [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)] IHTMLLocation *location(); [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)] BSTR lastModified(); [propput, id(DISPID_IHTMLDOCUMENT2_URL)] void URL(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_URL)] BSTR URL(); [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)] void domain(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)] BSTR domain(); [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)] void cookie(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)] BSTR cookie(); [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden] void expando(VARIANT_BOOL v); [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden] VARIANT_BOOL expando(); [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden] void charset(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden] BSTR charset(); [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)] void defaultCharset(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)] BSTR defaultCharset(); [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)] BSTR mimeType(); [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)] BSTR fileSize(); [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)] BSTR fileCreatedDate(); [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)] BSTR fileModifiedDate(); [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)] BSTR fileUpdatedDate(); [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)] BSTR security(); [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)] BSTR protocol(); [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)] BSTR nameProp(); [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)] void write([in] SAFEARRAY(VARIANT) psarray); [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)] void writeln([in] SAFEARRAY(VARIANT) psarray); [id(DISPID_IHTMLDOCUMENT2_OPEN)] IDispatch *open( [defaultvalue("text/html"), in] BSTR url, [optional, in] VARIANT name, [optional, in] VARIANT features, [optional, in] VARIANT replace); [id(DISPID_IHTMLDOCUMENT2_CLOSE)] void close(); [id(DISPID_IHTMLDOCUMENT2_CLEAR)] void clear(); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)] VARIANT_BOOL queryCommandSupported([in] BSTR cmdID); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)] VARIANT_BOOL queryCommandEnabled([in] BSTR cmdID); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)] VARIANT_BOOL queryCommandState([in] BSTR cmdID); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)] VARIANT_BOOL queryCommandIndeterm([in] BSTR cmdID); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)] BSTR queryCommandText([in] BSTR cmdID); [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)] VARIANT queryCommandValue([in] BSTR cmdID); [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)] VARIANT_BOOL execCommand( [in] BSTR cmdID, [defaultvalue(0), in] VARIANT_BOOL showUI, [optional, in] VARIANT value); [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)] VARIANT_BOOL execCommandShowHelp([in] BSTR cmdID); [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)] IHTMLElement *createElement([in] BSTR eTag); [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable] void onhelp(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable] VARIANT onhelp(); [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable] void onclick(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable] VARIANT onclick(); [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable] void ondblclick(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable] VARIANT ondblclick(); [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable] void onkeyup(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable] VARIANT onkeyup(); [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable] void onkeydown(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable] VARIANT onkeydown(); [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable] void onkeypress(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable] VARIANT onkeypress(); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable] void onmouseup(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable] VARIANT onmouseup(); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable] void onmousedown(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable] VARIANT onmousedown(); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable] void onmousemove(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable] VARIANT onmousemove(); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable] void onmouseout(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable] VARIANT onmouseout(); [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable] void onmouseover(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable] VARIANT onmouseover(); [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable] void onreadystatechange(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable] VARIANT onreadystatechange(); [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable] void onafterupdate(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable] VARIANT onafterupdate(); [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable] void onrowexit(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable] VARIANT onrowexit(); [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable] void onrowenter(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable] VARIANT onrowenter(); [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable] void ondragstart(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable] VARIANT ondragstart(); [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable] void onselectstart(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable] VARIANT onselectstart(); [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)] IHTMLElement *elementFromPoint( [in] LONG x, [in] LONG y); [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)] IHTMLWindow2 *parentWindow(); [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)] IHTMLStyleSheetsCollection *styleSheets(); [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable] void onbeforeupdate(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable] VARIANT onbeforeupdate(); [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable] void onerrorupdate(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable] VARIANT onerrorupdate(); [id(DISPID_IHTMLDOCUMENT2_TOSTRING)] BSTR toString(); [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)] IHTMLStyleSheet *createStyleSheet( [defaultvalue(""), in] BSTR bstrHref, [defaultvalue(-1), in] LONG lIndex); [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)] void releaseCapture(); [id(DISPID_IHTMLDOCUMENT3_RECALC)] void recalc([defaultvalue(0), in] VARIANT_BOOL fForce); [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)] IHTMLDOMNode *createTextNode([in] BSTR text); [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)] IHTMLElement *documentElement(); [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden] BSTR uniqueID(); [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)] VARIANT_BOOL attachEvent( [in] BSTR event, [in] IDispatch *pDisp); [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)] void detachEvent( [in] BSTR event, [in] IDispatch *pDisp); [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable] void onrowsdelete(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable] VARIANT onrowsdelete(); [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable] void onrowsinserted(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable] VARIANT onrowsinserted(); [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable] void oncellchange(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable] VARIANT oncellchange(); [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable] void ondatasetchanged(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable] VARIANT ondatasetchanged(); [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable] void ondataavailable(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable] VARIANT ondataavailable(); [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable] void ondatasetcomplete(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable] VARIANT ondatasetcomplete(); [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable] void onpropertychange(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable] VARIANT onpropertychange(); [propput, id(DISPID_IHTMLDOCUMENT3_DIR)] void dir(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT3_DIR)] BSTR dir(); [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable] void oncontextmenu(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable] VARIANT oncontextmenu(); [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable] void onstop(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable] VARIANT onstop(); [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)] IHTMLDocument2 *createDocumentFragment(); [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted] IHTMLDocument2 *parentDocument(); [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted] void enableDownload(VARIANT_BOOL v); [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted] VARIANT_BOOL enableDownload(); [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted] void baseUrl(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted] BSTR baseUrl(); [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted] void inheritStyleSheets(VARIANT_BOOL v); [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted] VARIANT_BOOL inheritStyleSheets(); [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable] void onbeforeeditfocus(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable] VARIANT onbeforeeditfocus(); [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)] IHTMLElementCollection *getElementsByName([in] BSTR v); [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)] IHTMLElement *getElementById([in] BSTR v); [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)] IHTMLElementCollection *getElementsByTagName([in] BSTR v); [id(DISPID_IHTMLDOCUMENT4_FOCUS)] void focus(); [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)] VARIANT_BOOL hasFocus(); [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable] void onselectionchange(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable] VARIANT onselectionchange(); [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)] IDispatch *namespaces(); [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)] IHTMLDocument2 *createDocumentFromUrl( [in] BSTR bstrUrl, [in] BSTR bstrOptions); [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)] void media(BSTR v); [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)] BSTR media(); [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)] IHTMLEventObj *createEventObject([optional, in] VARIANT *pvarEventObject); [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)] VARIANT_BOOL fireEvent( [in] BSTR bstrEventName, [optional, in] VARIANT *pvarEventObject); [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)] IHTMLRenderStyle *createRenderStyle([in] BSTR v); [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable] void oncontrolselect(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable] VARIANT oncontrolselect(); [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)] BSTR URLUnencoded(); [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable] void onmousewheel(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable] VARIANT onmousewheel(); [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)] IHTMLDOMNode *doctype(); [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)] IHTMLDOMImplementation *implementation(); [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)] IHTMLDOMAttribute *createAttribute([in] BSTR bstrattrName); [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)] IHTMLDOMNode *createComment([in] BSTR bstrdata); [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable] void onfocusin(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable] VARIANT onfocusin(); [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable] void onfocusout(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable] VARIANT onfocusout(); [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable] void onactivate(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable] VARIANT onactivate(); [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable] void ondeactivate(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable] VARIANT ondeactivate(); [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable] void onbeforeactivate(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable] VARIANT onbeforeactivate(); [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable] void onbeforedeactivate(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable] VARIANT onbeforedeactivate(); [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)] BSTR compatMode(); [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)] IHTMLDocumentCompatibleInfoCollection *compatible(); [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)] VARIANT documentMode(); [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable] void onstorage(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable] VARIANT onstorage(); [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable] void onstoragecommit(VARIANT v); [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable] VARIANT onstoragecommit(); [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)] IHTMLElement2 *ie8_getElementById([in] BSTR bstrId); [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)] void updateSettings(); WINE_HTMLDOMNODE_DISPINTERFACE_DECL; [id(DISPID_IDOCUMENTSELECTOR_QUERYSELECTOR)] IHTMLElement *querySelector([in] BSTR v); [id(DISPID_IDOCUMENTSELECTOR_QUERYSELECTORALL)] IHTMLDOMChildrenCollection *querySelectorAll([in] BSTR v); } /***************************************************************************** * HTMLDocument coclass */ [ uuid(25336920-03F9-11cf-8FD0-00AA00686F13) ] coclass HTMLDocument { [default] dispinterface DispHTMLDocument; [source, default] dispinterface HTMLDocumentEvents; [source] dispinterface HTMLDocumentEvents2; interface IHTMLDocument2; interface IHTMLDocument3; interface IHTMLDocument4; interface IHTMLDocument5; interface IHTMLDocument6; interface IHTMLDOMNode; interface IHTMLDOMNode2; interface IDocumentEvent; } /***************************************************************************** * DWebBridgeEvents dispinterface */ [ hidden, uuid(a6d897ff-0a95-11d1-b0ba-006008166e11) ] dispinterface DWebBridgeEvents { properties: methods: [id(DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT)] void onscriptletevent([in] BSTR name,[in] VARIANT eventData); [id(DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE)] void onreadystatechange(); [id(DISPID_DWEBBRIDGEEVENTS_ONCLICK)] VARIANT_BOOL onclick(); [id(DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK)] VARIANT_BOOL ondblclick(); [id(DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN)] void onkeydown(); [id(DISPID_DWEBBRIDGEEVENTS_ONKEYUP)] void onkeyup(); [id(DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS)] VARIANT_BOOL onkeypress(); [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN)] void onmousedown(); [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE)] void onmousemove(); [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP)] void onmouseup(); } /***************************************************************************** * IWebBridge interface */ [ odl, oleautomation, dual, uuid(ae24fdad-03c6-11d1-8b76-0080c744f389) ] interface IWebBridge : IDispatch { [propput, id(DISPID_IWEBBRIDGE_URL)] HRESULT URL([in] BSTR v); [propget, id(DISPID_IWEBBRIDGE_URL)] HRESULT URL([retval, out] BSTR * p); [propput, id(DISPID_IWEBBRIDGE_SCROLLBAR)] HRESULT Scrollbar([in] VARIANT_BOOL v); [propget, id(DISPID_IWEBBRIDGE_SCROLLBAR)] HRESULT Scrollbar([retval, out] VARIANT_BOOL * p); [propput, id(DISPID_IWEBBRIDGE_EMBED)] HRESULT embed([in] VARIANT_BOOL v); [propget, id(DISPID_IWEBBRIDGE_EMBED)] HRESULT embed([retval, out] VARIANT_BOOL * p); [propget, id(DISPID_IWEBBRIDGE_EVENT)] HRESULT event([retval, out] IDispatch* * p); [propget, id(DISPID_IWEBBRIDGE_READYSTATE)] HRESULT readyState([retval, out] long * p); [id(DISPID_IWEBBRIDGE_ABOUTBOX)] HRESULT AboutBox(); } /***************************************************************************** * Scriptlet coclass */ [ control, helpstring("Microsoft Scriptlet Component"), progid("ScriptBridge.ScriptBridge.1"), vi_progid("ScriptBridge.ScriptBridge"), uuid(ae24fdae-03c6-11d1-8b76-0080c744f389) ] coclass Scriptlet { [default] interface IWebBridge; [source, default] dispinterface DWebBridgeEvents; } /***************************************************************************** * IHTMLEmbedElement interface */ [ odl, oleautomation, dual, uuid(3050f25f-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLEmbedElement : IDispatch { [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)] HRESULT hidden([in] BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)] HRESULT hidden([retval, out] BSTR *p); [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)] HRESULT palette([retval, out] BSTR *p); [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)] HRESULT pluginspage([retval, out] BSTR *p); [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)] HRESULT src([in] BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)] HRESULT src([retval, out] BSTR *p); [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)] HRESULT units([in] BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)] HRESULT units([retval, out] BSTR *p); [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)] HRESULT width([in] VARIANT v); [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)] HRESULT width([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)] HRESULT height([in] VARIANT v); [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)] HRESULT height([retval, out] VARIANT *p); } /***************************************************************************** * DispHTMLEmbedElement dispinterface */ [ hidden, uuid(3050f52e-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLEmbed { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)] void hidden(BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)] BSTR hidden(); [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)] BSTR palette(); [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)] BSTR pluginspage(); [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)] void src(BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)] BSTR src(); [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)] void units(BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)] BSTR units(); [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)] void width(VARIANT v); [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)] VARIANT width(); [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)] void height(VARIANT v); [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)] VARIANT height(); [propput, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)] void ie8_src(BSTR v); [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)] BSTR ie8_src(); [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE)] BSTR ie8_pluginspage(); } /***************************************************************************** * HTMLEmbed coclass */ [ noncreatable, uuid(3050f25d-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLEmbed { [default] dispinterface DispHTMLEmbed; /* [source, default] dispinterface HTMLControlElementEvents; */ /* [source] dispinterface HTMLControlElementEvents2; */ WINE_HTMLELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLEmbedElement; /* interface IHTMLEmbedElement2; */ /* interface IGetSVGDocument; */ } /***************************************************************************** * IHTMLCommentElement interface */ [ odl, oleautomation, dual, uuid(3050f20c-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLCommentElement : IDispatch { [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable] HRESULT text([in] BSTR v); [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable] HRESULT text([out, retval] BSTR *p); [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable] HRESULT atomic([in] LONG v); [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable] HRESULT atomic([out, retval] LONG *p); } /***************************************************************************** * IHTMLCommentElement2 interface */ [ odl, oleautomation, dual, uuid(3050f813-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLCommentElement2 : IDispatch { [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)] HRESULT data([in] BSTR v); [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)] HRESULT data([out, retval] BSTR *p); [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)] HRESULT length([out, retval] LONG *p); [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)] HRESULT substringData( [in] LONG offset, [in] LONG Count, [out, retval] BSTR *pbstrsubString); [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)] HRESULT appendData([in] BSTR bstrstring); [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)] HRESULT insertData( [in] LONG offset, [in] BSTR bstrstring); [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)] HRESULT deleteData( [in] LONG offset, [in] LONG Count); [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)] HRESULT replaceData( [in] LONG offset, [in] LONG Count, [in] BSTR bstrstring); } /***************************************************************************** * DispHTMLCommentElement dispinterface */ [ hidden, uuid(3050f50a-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLCommentElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable] void text(BSTR v); [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable] BSTR text(); [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable] void atomic(LONG v); [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable] LONG atomic(); [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)] void data(BSTR v); [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)] BSTR data(); [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)] LONG length(); [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)] BSTR substringData( [in] LONG offset, [in] LONG Count); [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)] void appendData([in] BSTR bstrstring); [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)] void insertData( [in] LONG offset, [in] BSTR bstrstring); [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)] void deleteData( [in] LONG offset, [in] LONG Count); [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)] void replaceData( [in] LONG offset, [in] LONG Count, [in] BSTR bstrstring); } [ hidden, uuid(3050f60f-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface HTMLElementEvents2 { properties: methods: [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)] VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)] VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)] VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)] VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)] void onkeydown([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)] void onkeyup([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)] void onmouseout([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)] void onmouseover([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)] void onmousemove([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)] void onmousedown([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)] void onmouseup([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)] VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)] void onfilterchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)] VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)] void onafterupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)] VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)] void onrowenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)] void ondatasetchanged([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)] void ondataavailable([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)] void ondatasetcomplete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)] void onlosecapture([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)] void onpropertychange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)] void onscroll([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)] void onfocus([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)] void onblur([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)] void onresize([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)] VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)] void ondragend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)] VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)] VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)] void ondragleave([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)] VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)] VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)] VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)] VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)] VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)] VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)] VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)] void onrowsdelete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)] void onrowsinserted([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)] void oncellchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)] void onreadystatechange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)] void onlayoutcomplete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)] void onpage([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)] void onmouseenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)] void onmouseleave([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)] void onactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)] void ondeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)] void onfocusin([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)] void onfocusout([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)] void onmove([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)] VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)] void onmoveend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)] VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)] void onresizeend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj); } [ hidden, uuid(3050f33c-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface HTMLElementEvents { properties: methods: [id(DISPID_HTMLELEMENTEVENTS_ONHELP)] VARIANT_BOOL onhelp(); [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)] VARIANT_BOOL onclick(); [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)] VARIANT_BOOL ondblclick(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)] VARIANT_BOOL onkeypress(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)] void onkeydown(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)] void onkeyup(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)] void onmouseout(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)] void onmouseover(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)] void onmousemove(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)] void onmousedown(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)] void onmouseup(); [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)] VARIANT_BOOL onselectstart(); [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)] void onfilterchange(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)] VARIANT_BOOL ondragstart(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)] void onafterupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)] VARIANT_BOOL onrowexit(); [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)] void onrowenter(); [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)] void ondatasetchanged(); [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)] void ondataavailable(); [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)] void ondatasetcomplete(); [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)] void onlosecapture(); [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)] void onpropertychange(); [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)] void onscroll(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)] void onfocus(); [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)] void onblur(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)] void onresize(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)] VARIANT_BOOL ondrag(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)] void ondragend(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)] VARIANT_BOOL ondragenter(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)] VARIANT_BOOL ondragover(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)] void ondragleave(); [id(DISPID_HTMLELEMENTEVENTS_ONDROP)] VARIANT_BOOL ondrop(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)] VARIANT_BOOL onbeforecut(); [id(DISPID_HTMLELEMENTEVENTS_ONCUT)] VARIANT_BOOL oncut(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)] VARIANT_BOOL onbeforecopy(); [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)] VARIANT_BOOL oncopy(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)] VARIANT_BOOL onbeforepaste(); [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)] VARIANT_BOOL onpaste(); [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu(); [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)] void onrowsdelete(); [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)] void onrowsinserted(); [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)] void oncellchange(); [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)] void onreadystatechange(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)] void onbeforeeditfocus(); [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)] void onlayoutcomplete(); [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)] void onpage(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)] void onmove(); [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)] VARIANT_BOOL onmovestart(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)] void onmoveend(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)] VARIANT_BOOL onresizestart(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)] void onresizeend(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)] void onmouseenter(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)] void onmouseleave(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel(); [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)] void onactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)] void ondeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)] void onfocusin(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)] void onfocusout(); } [ noncreatable, uuid(3050f317-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLCommentElement { [default] dispinterface DispHTMLCommentElement; [source, default] dispinterface HTMLElementEvents; [source] dispinterface HTMLElementEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLCommentElement; interface IHTMLCommentElement2; /* interface IHTMLCommentElement3; */ } /***************************************************************************** * HTMLTableEvents dispinterface */ [ hidden, uuid(3050f407-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface HTMLTableEvents { properties: methods: [id(DISPID_HTMLELEMENTEVENTS_ONHELP)] VARIANT_BOOL onhelp(); [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)] VARIANT_BOOL onclick(); [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)] VARIANT_BOOL ondblclick(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)] VARIANT_BOOL onkeypress(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)] void onkeydown(); [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)] void onkeyup(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)] void onmouseout(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)] void onmouseover(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)] void onmousemove(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)] void onmousedown(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)] void onmouseup(); [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)] VARIANT_BOOL onselectstart(); [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)] void onfilterchange(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)] VARIANT_BOOL ondragstart(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)] void onafterupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate(); [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)] VARIANT_BOOL onrowexit(); [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)] void onrowenter(); [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)] void ondatasetchanged(); [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)] void ondataavailable(); [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)] void ondatasetcomplete(); [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)] void onlosecapture(); [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)] void onpropertychange(); [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)] void onscroll(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)] void onfocus(); [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)] void onblur(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)] void onresize(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)] VARIANT_BOOL ondrag(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)] void ondragend(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)] VARIANT_BOOL ondragenter(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)] VARIANT_BOOL ondragover(); [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)] void ondragleave(); [id(DISPID_HTMLELEMENTEVENTS_ONDROP)] VARIANT_BOOL ondrop(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)] VARIANT_BOOL onbeforecut(); [id(DISPID_HTMLELEMENTEVENTS_ONCUT)] VARIANT_BOOL oncut(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)] VARIANT_BOOL onbeforecopy(); [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)] VARIANT_BOOL oncopy(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)] VARIANT_BOOL onbeforepaste(); [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)] VARIANT_BOOL onpaste(); [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu(); [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)] void onrowsdelete(); [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)] void onrowsinserted(); [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)] void oncellchange(); [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)] void onreadystatechange(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)] void onbeforeeditfocus(); [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)] void onlayoutcomplete(); [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)] void onpage(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)] void onmove(); [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)] VARIANT_BOOL onmovestart(); [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)] void onmoveend(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)] VARIANT_BOOL onresizestart(); [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)] void onresizeend(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)] void onmouseenter(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)] void onmouseleave(); [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel(); [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)] void onactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)] void ondeactivate(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)] void onfocusin(); [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)] void onfocusout(); } [ hidden, uuid(3050f623-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface HTMLTableEvents2 { properties: methods: [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)] VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)] VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)] VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)] VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)] void onkeydown([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)] void onkeyup([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)] void onmouseout([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)] void onmouseover([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)] void onmousemove([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)] void onmousedown([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)] void onmouseup([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)] VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)] void onfilterchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)] VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)] VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)] void onafterupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)] VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)] VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)] void onrowenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)] void ondatasetchanged([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)] void ondataavailable([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)] void ondatasetcomplete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)] void onlosecapture([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)] void onpropertychange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)] void onscroll([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)] void onfocus([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)] void onblur([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)] void onresize([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)] VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)] void ondragend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)] VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)] VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)] void ondragleave([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)] VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)] VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)] VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)] VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)] VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)] VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)] VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)] VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)] void onrowsdelete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)] void onrowsinserted([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)] void oncellchange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)] void onreadystatechange([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)] void onlayoutcomplete([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)] void onpage([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)] void onmouseenter([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)] void onmouseleave([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)] void onactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)] void ondeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)] VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)] VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)] void onfocusin([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)] void onfocusout([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)] void onmove([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)] VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)] VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)] void onmoveend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)] VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)] void onresizeend([in] IHTMLEventObj* pEvtObj); [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)] VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj); } /***************************************************************************** * IHTMLTableCaption interface */ [ odl, oleautomation, dual, uuid(3050f2eb-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTableCaption : IDispatch { [propput, id(DISPID_IHTMLTABLECAPTION_ALIGN)] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLTABLECAPTION_ALIGN)] HRESULT align([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLECAPTION_VALIGN)] HRESULT vAlign([in] BSTR v); [propget, id(DISPID_IHTMLTABLECAPTION_VALIGN)] HRESULT vAlign([retval, out] BSTR *p); } interface IHTMLTableSection; /***************************************************************************** * IHTMLTable interface */ [ odl, oleautomation, dual, uuid(3050f21e-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTable : IDispatch { [propput, id(DISPID_IHTMLTABLE_COLS)] HRESULT cols([in] LONG v); [propget, id(DISPID_IHTMLTABLE_COLS)] HRESULT cols([retval, out] LONG *p); [propput, id(DISPID_IHTMLTABLE_BORDER)] HRESULT border([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_BORDER)] HRESULT border([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_FRAME)] HRESULT frame([in] BSTR v); [propget, id(DISPID_IHTMLTABLE_FRAME)] HRESULT frame([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLE_RULES)] HRESULT rules([in] BSTR v); [propget, id(DISPID_IHTMLTABLE_RULES)] HRESULT rules([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLE_CELLSPACING)] HRESULT cellSpacing([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_CELLSPACING)] HRESULT cellSpacing([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_CELLPADDING)] HRESULT cellPadding([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_CELLPADDING)] HRESULT cellPadding([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_BACKGROUND)] HRESULT background([in] BSTR v); [propget, id(DISPID_IHTMLTABLE_BACKGROUND)] HRESULT background([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLE_BGCOLOR)] HRESULT bgColor([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_BGCOLOR)] HRESULT bgColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)] HRESULT borderColor([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)] HRESULT borderColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)] HRESULT borderColorLight([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)] HRESULT borderColorLight([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)] HRESULT borderColorDark([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)] HRESULT borderColorDark([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_ALIGN)] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLTABLE_ALIGN)] HRESULT align([retval, out] BSTR * p); [id(DISPID_IHTMLTABLE_REFRESH)] HRESULT refresh(); [propget, id(DISPID_IHTMLTABLE_ROWS)] HRESULT rows([retval, out] IHTMLElementCollection **p); [propput, id(DISPID_IHTMLTABLE_WIDTH)] HRESULT width([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_WIDTH)] HRESULT width([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_HEIGHT)] HRESULT height([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_HEIGHT)] HRESULT height([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)] HRESULT dataPageSize([in] LONG v); [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)] HRESULT dataPageSize([retval, out] LONG *p); [id(DISPID_IHTMLTABLE_NEXTPAGE)] HRESULT nextPage(); [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)] HRESULT previousPage(); [propget, id(DISPID_IHTMLTABLE_THEAD)] HRESULT tHead([retval, out] IHTMLTableSection **p); [propget, id(DISPID_IHTMLTABLE_TFOOT)] HRESULT tFoot([retval, out] IHTMLTableSection **p); [propget, id(DISPID_IHTMLTABLE_TBODIES)] HRESULT tBodies([retval, out] IHTMLElementCollection **p); [propget, id(DISPID_IHTMLTABLE_CAPTION)] HRESULT caption([retval, out] IHTMLTableCaption **p); [id(DISPID_IHTMLTABLE_CREATETHEAD)] HRESULT createTHead([retval, out] IDispatch **head); [id(DISPID_IHTMLTABLE_DELETETHEAD)] HRESULT deleteTHead(); [id(DISPID_IHTMLTABLE_CREATETFOOT)] HRESULT createTFoot([retval, out] IDispatch **foot); [id(DISPID_IHTMLTABLE_DELETETFOOT)] HRESULT deleteTFoot(); [id(DISPID_IHTMLTABLE_CREATECAPTION)] HRESULT createCaption([retval, out] IHTMLTableCaption **caption); [id(DISPID_IHTMLTABLE_DELETECAPTION)] HRESULT deleteCaption(); [id(DISPID_IHTMLTABLE_INSERTROW)] HRESULT insertRow( [defaultvalue(-1), in] LONG index, [retval, out] IDispatch **row); [id(DISPID_IHTMLTABLE_DELETEROW)] HRESULT deleteRow([defaultvalue(-1), in] LONG index); [propget, id(DISPID_IHTMLTABLE_READYSTATE)] HRESULT readyState([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([retval, out] VARIANT *p); } [ odl, oleautomation, dual, uuid(3050f4ad-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTable2 : IDispatch { [id(DISPID_IHTMLTABLE2_FIRSTPAGE)] HRESULT firstPage(); [id(DISPID_IHTMLTABLE2_LASTPAGE)] HRESULT lastPage(); [propget, id(DISPID_IHTMLTABLE2_CELLS)] HRESULT cells([retval, out] IHTMLElementCollection* * p); [id(DISPID_IHTMLTABLE2_MOVEROW)] HRESULT moveRow([defaultvalue(-1), in] LONG indexFrom, [defaultvalue(-1), in] LONG indexTo, [retval, out] IDispatch** row); } [ odl, oleautomation, dual, uuid(3050f829-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTable3 : IDispatch { [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable] HRESULT summary([in] BSTR v); [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable] HRESULT summary([retval, out] BSTR * p); } [ noncreatable, uuid(3050f26b-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLTable { [default] dispinterface DispHTMLTable; [source, default] dispinterface HTMLTableEvents; [source] dispinterface HTMLTableEvents2; WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLTable; interface IHTMLTable2; interface IHTMLTable3; /* interface IHTMLTable4; */ } [ odl, oleautomation, dual, uuid(3050f23b-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTableSection : IDispatch { [propput, id(DISPID_IHTMLTABLESECTION_ALIGN)] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLTABLESECTION_ALIGN)] HRESULT align([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLESECTION_VALIGN)] HRESULT vAlign([in] BSTR v); [propget, id(DISPID_IHTMLTABLESECTION_VALIGN)] HRESULT vAlign([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLESECTION_BGCOLOR)] HRESULT bgColor([in] VARIANT v); [propget, id(DISPID_IHTMLTABLESECTION_BGCOLOR)] HRESULT bgColor([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLTABLESECTION_ROWS)] HRESULT rows([retval, out] IHTMLElementCollection **p); [id(DISPID_IHTMLTABLESECTION_INSERTROW)] HRESULT insertRow( [defaultvalue(-1), in] LONG index, [retval, out] IDispatch **row); [id(DISPID_IHTMLTABLESECTION_DELETEROW)] HRESULT deleteRow([defaultvalue(-1), in] LONG index); } /***************************************************************************** * IHTMLTableRow interface */ [ odl, oleautomation, dual, uuid(3050f23c-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTableRow : IDispatch { [propput, id(DISPID_IHTMLTABLEROW_ALIGN)] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLTABLEROW_ALIGN)] HRESULT align([out, retval] BSTR *p); [propput, id(DISPID_IHTMLTABLEROW_VALIGN)] HRESULT vAlign([in] BSTR v); [propget, id(DISPID_IHTMLTABLEROW_VALIGN)] HRESULT vAlign([out, retval] BSTR *p); [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)] HRESULT bgColor([in] VARIANT v); [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)] HRESULT bgColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)] HRESULT borderColor([in] VARIANT v); [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)] HRESULT borderColor([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)] HRESULT borderColorLight([in] VARIANT v); [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)] HRESULT borderColorLight([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)] HRESULT borderColorDark([in] VARIANT v); [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)] HRESULT borderColorDark([out, retval] VARIANT *p); [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)] HRESULT rowIndex([out, retval] LONG *p); [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)] HRESULT sectionRowIndex([out, retval] LONG *p); [propget, id(DISPID_IHTMLTABLEROW_CELLS)] HRESULT cells([out, retval] IHTMLElementCollection **p); [id(DISPID_IHTMLTABLEROW_INSERTCELL)] HRESULT insertCell( [in, defaultvalue(-1)] LONG index, [out, retval] IDispatch **row); [id(DISPID_IHTMLTABLEROW_DELETECELL)] HRESULT deleteCell([in, defaultvalue(-1)] LONG index); } /***************************************************************************** * IHTMLTableCell interface */ [ odl, oleautomation, dual, uuid(3050f23d-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLTableCell : IDispatch { [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)] HRESULT rowSpan([in] long v); [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)] HRESULT rowSpan([retval, out] long *p); [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)] HRESULT colSpan([in] long v); [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)] HRESULT colSpan([retval, out] long *p); [propput, id(DISPID_IHTMLTABLECELL_ALIGN)] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLTABLECELL_ALIGN)] HRESULT align([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLECELL_VALIGN)] HRESULT vAlign([in] BSTR v); [propget, id(DISPID_IHTMLTABLECELL_VALIGN)] HRESULT vAlign([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)] HRESULT bgColor([in] VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)] HRESULT bgColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)] HRESULT noWrap([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)] HRESULT noWrap([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)] HRESULT background([in] BSTR v); [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)] HRESULT background([retval, out] BSTR *p); [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)] HRESULT borderColor([in] VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)] HRESULT borderColor([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)] HRESULT borderColorLight([in] VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)] HRESULT borderColorLight([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)] HRESULT borderColorDark([in] VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)] HRESULT borderColorDark([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLECELL_WIDTH)] HRESULT width([in] VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_WIDTH)] HRESULT width([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)] HRESULT height([in] VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)] HRESULT height([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)] HRESULT cellIndex([retval, out] long *p); } /***************************************************************************** * DispHTMLTable dispinterface */ [ hidden, uuid(3050f532-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLTable { properties: methods: WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLTABLE_COLS)] void cols(LONG v); [propget, id(DISPID_IHTMLTABLE_COLS)] LONG cols(); [propput, id(DISPID_IHTMLTABLE_BORDER)] void border(VARIANT v); [propget, id(DISPID_IHTMLTABLE_BORDER)] VARIANT border(); [propput, id(DISPID_IHTMLTABLE_FRAME)] void frame(BSTR v); [propget, id(DISPID_IHTMLTABLE_FRAME)] BSTR frame(); [propput, id(DISPID_IHTMLTABLE_RULES)] void rules(BSTR v); [propget, id(DISPID_IHTMLTABLE_RULES)] BSTR rules(); [propput, id(DISPID_IHTMLTABLE_CELLSPACING)] void cellSpacing(VARIANT v); [propget, id(DISPID_IHTMLTABLE_CELLSPACING)] VARIANT cellSpacing(); [propput, id(DISPID_IHTMLTABLE_CELLPADDING)] void cellPadding(VARIANT v); [propget, id(DISPID_IHTMLTABLE_CELLPADDING)] VARIANT cellPadding(); [propput, id(DISPID_IHTMLTABLE_BACKGROUND)] void background(BSTR v); [propget, id(DISPID_IHTMLTABLE_BACKGROUND)] BSTR background(); [propput, id(DISPID_IHTMLTABLE_BGCOLOR)] void bgColor(VARIANT v); [propget, id(DISPID_IHTMLTABLE_BGCOLOR)] VARIANT bgColor(); [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)] void borderColor(VARIANT v); [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)] VARIANT borderColor(); [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)] void borderColorLight(VARIANT v); [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)] VARIANT borderColorLight(); [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)] void borderColorDark(VARIANT v); [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)] VARIANT borderColorDark(); [propput, id(DISPID_IHTMLTABLE_ALIGN)] void align(BSTR v); [propget, id(DISPID_IHTMLTABLE_ALIGN)] BSTR align(); [id(DISPID_IHTMLTABLE_REFRESH)] void refresh(); [propget, id(DISPID_IHTMLTABLE_ROWS)] IHTMLElementCollection *rows(); [propput, id(DISPID_IHTMLTABLE_WIDTH)] void width(VARIANT v); [propget, id(DISPID_IHTMLTABLE_WIDTH)] VARIANT width(); [propput, id(DISPID_IHTMLTABLE_HEIGHT)] void height(VARIANT v); [propget, id(DISPID_IHTMLTABLE_HEIGHT)] VARIANT height(); [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)] void dataPageSize(LONG v); [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)] LONG dataPageSize(); [id(DISPID_IHTMLTABLE_NEXTPAGE)] void nextPage(); [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)] void previousPage(); [propget, id(DISPID_IHTMLTABLE_THEAD)] IHTMLTableSection *tHead(); [propget, id(DISPID_IHTMLTABLE_TFOOT)] IHTMLTableSection *tFoot(); [propget, id(DISPID_IHTMLTABLE_TBODIES)] IHTMLElementCollection *tBodies(); [propget, id(DISPID_IHTMLTABLE_CAPTION)] IHTMLTableCaption *caption(); [id(DISPID_IHTMLTABLE_CREATETHEAD)] IDispatch *createTHead(); [id(DISPID_IHTMLTABLE_DELETETHEAD)] void deleteTHead(); [id(DISPID_IHTMLTABLE_CREATETFOOT)] IDispatch *createTFoot(); [id(DISPID_IHTMLTABLE_DELETETFOOT)] void deleteTFoot(); [id(DISPID_IHTMLTABLE_CREATECAPTION)] IHTMLTableCaption *createCaption(); [id(DISPID_IHTMLTABLE_DELETECAPTION)] void deleteCaption(); [id(DISPID_IHTMLTABLE_INSERTROW)] IDispatch *insertRow([in, defaultvalue(-1)] LONG index); [id(DISPID_IHTMLTABLE_DELETEROW)] void deleteRow([in, defaultvalue(-1)] LONG index); [id(DISPID_IHTMLTABLE2_FIRSTPAGE)] void firstPage(); [id(DISPID_IHTMLTABLE2_LASTPAGE)] void lastPage(); [propget, id(DISPID_IHTMLTABLE2_CELLS)] IHTMLElementCollection *cells(); [id(DISPID_IHTMLTABLE2_MOVEROW)] IDispatch *moveRow( [in, defaultvalue(-1)] LONG indexFrom, [in, defaultvalue(-1)] LONG indexTo); [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable] void summary(BSTR v); [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable] BSTR summary(); } /***************************************************************************** * DispHTMLTableRow dispinterface */ [ hidden, uuid(3050f535-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLTableRow { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLTABLEROW_ALIGN)] void align(BSTR v); [propget, id(DISPID_IHTMLTABLEROW_ALIGN)] BSTR align(); [propput, id(DISPID_IHTMLTABLEROW_VALIGN)] void vAlign(BSTR v); [propget, id(DISPID_IHTMLTABLEROW_VALIGN)] BSTR vAlign(); [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)] void bgColor(VARIANT v); [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)] VARIANT bgColor(); [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)] void borderColor(VARIANT v); [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)] VARIANT borderColor(); [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)] void borderColorLight(VARIANT v); [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)] VARIANT borderColorLight(); [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)] void borderColorDark(VARIANT v); [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)] VARIANT borderColorDark(); [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)] LONG rowIndex(); [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)] LONG sectionRowIndex(); [propget, id(DISPID_IHTMLTABLEROW_CELLS)] IHTMLElementCollection *cells(); [id(DISPID_IHTMLTABLEROW_INSERTCELL)] IDispatch *insertCell([in, defaultvalue(-1)] LONG index); [id(DISPID_IHTMLTABLEROW_DELETECELL)] void deleteCell([in, defaultvalue(-1)] LONG index); [propput, id(DISPID_IHTMLTABLEROW2_HEIGHT)] void height(VARIANT v); [propget, id(DISPID_IHTMLTABLEROW2_HEIGHT)] VARIANT height(); [propput, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable] void ch(BSTR v); [propget, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable] BSTR ch(); [propput, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable] void chOff(BSTR v); [propget, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable] BSTR chOff(); } /***************************************************************************** * HTMLTableRow coclass */ [ noncreatable, uuid(3050f26d-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLTableRow { [default] dispinterface DispHTMLTableRow; /* [source, default] dispinterface HTMLControlElementEvents; */ /* [source] dispinterface HTMLControlElementEvents2; */ WINE_HTMLELEMENT_INTERFACES; interface IHTMLTableRow; /* interface IHTMLTableRowMetrics; */ /* interface IHTMLTableRow2; */ /* interface IHTMLTableRow3; */ /* interface IHTMLTableRow4; */ } /***************************************************************************** * DispHTMLTableCell dispinterface */ [ hidden, uuid(3050f536-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLTableCell { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)] void rowSpan(long v); [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)] long rowSpan(); [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)] void colSpan(long v); [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)] long colSpan(); [propput, id(DISPID_IHTMLTABLECELL_ALIGN)] void align(BSTR v); [propget, id(DISPID_IHTMLTABLECELL_ALIGN)] BSTR align(); [propput, id(DISPID_IHTMLTABLECELL_VALIGN)] void vAlign(BSTR v); [propget, id(DISPID_IHTMLTABLECELL_VALIGN)] BSTR vAlign(); [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)] void bgColor(VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)] VARIANT bgColor(); [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)] void noWrap(VARIANT_BOOL v); [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)] VARIANT_BOOL noWrap(); [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)] void background(BSTR v); [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)] BSTR background(); [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)] void borderColor(VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)] VARIANT borderColor(); [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)] void borderColorLight(VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)] VARIANT borderColorLight(); [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)] void borderColorDark(VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)] VARIANT borderColorDark(); [propput, id(DISPID_IHTMLTABLECELL_WIDTH)] void width(VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_WIDTH)] VARIANT width(); [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)] void height(VARIANT v); [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)] VARIANT height(); [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)] long cellIndex(); [propput, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable] void abbr(BSTR v); [propget, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable] BSTR abbr(); [propput, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable] void axis(BSTR v); [propget, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable] BSTR axis(); [propput, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable] void ch(BSTR v); [propget, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable] BSTR ch(); [propput, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable] void chOff(BSTR v); [propget, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable] BSTR chOff(); [propput, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable] void headers(BSTR v); [propget, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable] BSTR headers(); [propput, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable] void scope(BSTR v); [propget, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable] BSTR scope(); [propput, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable] void ie9_ch(BSTR v); [propget, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable] BSTR ie9_ch(); [propput, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable] void ie9_chOff(BSTR v); [propget, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable] BSTR ie9_chOff(); } /***************************************************************************** * HTMLTableCell coclass */ [ noncreatable, uuid(3050f246-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLTableCell { [default] dispinterface DispHTMLTableCell; [source, default] dispinterface HTMLTextContainerEvents; [source] dispinterface HTMLTextContainerEvents2; WINE_HTMLELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLTextContainer; interface IHTMLTableCell; /* interface IHTMLTableCell2; */ /* interface IHTMLTableCell3; */ } /***************************************************************************** * IHTMLScriptElement interface */ [ odl, oleautomation, dual, uuid(3050f28b-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLScriptElement : IDispatch { [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable] HRESULT src([in] BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable] HRESULT src([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable] HRESULT htmlFor([in] BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable] HRESULT htmlFor([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable] HRESULT event([in] BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable] HRESULT event([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable] HRESULT text([in] BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable] HRESULT text([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable] HRESULT defer([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable] HRESULT defer([retval, out] VARIANT_BOOL *p); [propget, id(DISPID_IHTMLSCRIPTELEMENT_READYSTATE)] HRESULT readyState([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable] HRESULT type([in] BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable] HRESULT type([retval, out] BSTR *p); } /***************************************************************************** * IHTMLScriptElement2 interface */ [ odl, oleautomation, dual, uuid(3050f828-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLScriptElement2 : IDispatch { [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable] HRESULT charset([in] BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable] HRESULT charset([retval, out] BSTR *p); } /***************************************************************************** * DispHTMLScriptElement dispinterface */ [ hidden, uuid(3050f530-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLScriptElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable] void src(BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable] BSTR src(); [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable] void htmlFor(BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable] BSTR htmlFor(); [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable] void event(BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable] BSTR event(); [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable] void text(BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable] BSTR text(); [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable] void defer(VARIANT_BOOL v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable] VARIANT_BOOL defer(); [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable] void onerror(VARIANT v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable] VARIANT onerror(); [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable] void type(BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable] BSTR type(); [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable] void charset(BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable] BSTR charset(); [propput, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)] void ie8_src(BSTR v); [propget, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)] BSTR ie8_src(); } /***************************************************************************** * HTMLScriptElement coclass */ [ noncreatable, uuid(3050f28c-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLScriptElement { [default] dispinterface DispHTMLScriptElement; /* [source, default] dispinterface HTMLScriptEvents; */ /* [source] dispinterface HTMLScriptEvents2; */ WINE_HTMLELEMENT_INTERFACES; interface IHTMLScriptElement; interface IHTMLScriptElement2; /* interface IHTMLScriptElement3; */ /* interface IHTMLScriptElement4; */ } /***************************************************************************** * IHTMLObjectElement interface */ [ odl, oleautomation, dual, uuid(3050f24f-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLObjectElement : IDispatch { [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden] HRESULT object([retval, out] IDispatch **p); [propget, id(DISPID_IHTMLOBJECTELEMENT_CLASSID), hidden] HRESULT classid([retval, out] BSTR *p); [propget, id(DISPID_IHTMLOBJECTELEMENT_DATA), hidden] HRESULT data([retval, out] BSTR *p); [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden] HRESULT recordset([in] IDispatch *v); [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden] HRESULT recordset([retval, out] IDispatch **p); [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable] HRESULT align([retval, out] BSTR *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable] HRESULT codeBase([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable] HRESULT codeBase([retval, out] BSTR *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable] HRESULT codeType([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable] HRESULT codeType([retval, out] BSTR *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable] HRESULT code([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable] HRESULT code([retval, out] BSTR *p); [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)] HRESULT BaseHref([retval, out] BSTR *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable] HRESULT type([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable] HRESULT type([retval, out] BSTR *p); [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)] HRESULT form([retval, out] IHTMLFormElement **p); [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)] HRESULT width([in] VARIANT v); [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)] HRESULT width([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)] HRESULT height([in] VARIANT v); [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)] HRESULT height([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLOBJECTELEMENT_READYSTATE), hidden] HRESULT readyState([retval, out] long *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)] HRESULT altHtml([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)] HRESULT altHtml([retval, out] BSTR *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)] HRESULT vspace([in] long v); [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)] HRESULT vspace([retval, out] long *p); [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)] HRESULT hspace([in] long v); [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)] HRESULT hspace([retval, out] long *p); } /***************************************************************************** * IHTMLObjectElement2 interface */ [ odl, oleautomation, dual, uuid(3050f4cd-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLObjectElement2 : IDispatch { [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)] HRESULT namedRecordset( [in] BSTR dataMember, [in, optional] VARIANT *hierarchy, [out, retval] IDispatch **ppRecordset); [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden] HRESULT classid([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden] HRESULT classid([out, retval] BSTR *p); [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden] HRESULT data([in] BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden] HRESULT data([out, retval] BSTR *p); } /***************************************************************************** * IHTMLDivElement interface */ [ odl, oleautomation, dual, uuid(3050f200-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDivElement : IDispatch { [propput, id(DISPID_IHTMLDIVELEMENT_ALIGN), displaybind, bindable] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLDIVELEMENT_ALIGN), displaybind, bindable] HRESULT align([out, retval] BSTR *p); [propput, id(DISPID_IHTMLDIVELEMENT_NOWRAP), displaybind, bindable] HRESULT noWrap([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLDIVELEMENT_NOWRAP), displaybind, bindable] HRESULT noWrap([out, retval] VARIANT_BOOL *p); } /***************************************************************************** * DispHTMLDivElement dispinterface */ [ hidden, uuid(3050f50c-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLDivElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLDIVELEMENT_ALIGN), displaybind, bindable] void align(BSTR v); [propget, id(DISPID_IHTMLDIVELEMENT_ALIGN), displaybind, bindable] BSTR align(); [propput, id(DISPID_IHTMLDIVELEMENT_NOWRAP), displaybind, bindable] void noWrap(VARIANT_BOOL v); [propget, id(DISPID_IHTMLDIVELEMENT_NOWRAP), displaybind, bindable] VARIANT_BOOL noWrap(); } /***************************************************************************** * IHTMLParamElement interface */ [ odl, oleautomation, dual, uuid(3050f83d-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLParamElement : IDispatch { [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable] HRESULT value([retval, out] BSTR *p); [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable] HRESULT type([in] BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable] HRESULT type([retval, out] BSTR *p); [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable] HRESULT valueType([in] BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable] HRESULT valueType([retval, out] BSTR *p); } /***************************************************************************** * IHTMLParamElement2 interface */ [ odl, oleautomation, dual, uuid(30510444-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLParamElement2 : IDispatch { [propput, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable] HRESULT name([retval, out] BSTR *p); [propput, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable] HRESULT type([in] BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable] HRESULT type([retval, out] BSTR *p); [propput, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable] HRESULT value([in] BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable] HRESULT value([retval, out] BSTR *p); [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)] HRESULT valueType([in] BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)] HRESULT valueType([retval, out] BSTR *p); } /***************************************************************************** * DispHTMLObjectElement dispinterface */ [ hidden, uuid(3050f529-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLObjectElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden] IDispatch *object(); [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden] void recordset(IDispatch *v); [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden] IDispatch *recordset(); [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable] void align(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable] BSTR align(); [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable] void codeBase(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable] BSTR codeBase(); [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable] void codeType(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable] BSTR codeType(); [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable] void code(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable] BSTR code(); [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)] BSTR BaseHref(); [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable] void type(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable] BSTR type(); [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)] IHTMLFormElement *form(); [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)] void width(VARIANT v); [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)] VARIANT width(); [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)] void height(VARIANT v); [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)] VARIANT height(); [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable] void onerror(VARIANT v); [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable] VARIANT onerror(); [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)] void altHtml(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)] BSTR altHtml(); [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)] void vspace(long v); [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)] long vspace(); [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)] void hspace(long v); [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)] long hspace(); [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)] IDispatch *namedRecordset( [in] BSTR dataMember, [optional, in] VARIANT *hierarchy); [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden] void classid(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden] BSTR classid(); [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden] void data(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden] BSTR data(); [propput, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable] void archive(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable] BSTR archive(); [propput, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable] void alt(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable] BSTR alt(); [propput, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable] void declare(VARIANT_BOOL v); [propget, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable] VARIANT_BOOL declare(); [propput, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable] void standby(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable] BSTR standby(); [propput, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)] void border(VARIANT v); [propget, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)] VARIANT border(); [propput, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable] void useMap(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable] BSTR useMap(); [propget, id(DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT)] IDispatch *contentDocument(); [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)] void ie8_codeBase(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)] BSTR ie8_codeBase(); [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)] void ie8_data(BSTR v); [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)] BSTR ie8_data(); } /***************************************************************************** * HTMLObjectElement coclass */ [ noncreatable, uuid(3050f24e-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLObjectElement { [default] dispinterface DispHTMLObjectElement; /* [source, default] dispinterface HTMLObjectElementEvents; */ /* [source] dispinterface HTMLObjectElementEvents2; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLObjectElement; interface IHTMLObjectElement2; /* interface IHTMLObjectElement3; */ /* interface IHTMLObjectElement4; */ /* interface IGetSVGDocument; */ /* interface IHTMLObjectElement5; */ } /***************************************************************************** * DispHTMLParamElement dispinterface */ [ hidden, uuid(3050f590-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLParamElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable] void name(BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable] BSTR name(); [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable] void value(BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable] BSTR value(); [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable] void type(BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable] BSTR type(); [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable] void valueType(BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable] BSTR valueType(); [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)] void ie8_valueType(BSTR v); [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)] BSTR ie8_valueType(); } /***************************************************************************** * IHTMLFrameBase interface */ [ odl, oleautomation, dual, uuid(3050f311-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLFrameBase : IDispatch { [propput, id(DISPID_IHTMLFRAMEBASE_SRC)] HRESULT src([in] BSTR v); [propget, id(DISPID_IHTMLFRAMEBASE_SRC)] HRESULT src([out, retval] BSTR *p); [propput, id(DISPID_IHTMLFRAMEBASE_NAME)] HRESULT name([in] BSTR v); [propget, id(DISPID_IHTMLFRAMEBASE_NAME)] HRESULT name([out, retval] BSTR *p); [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)] HRESULT border([in] VARIANT v); [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)] HRESULT border([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)] HRESULT frameBorder([in] BSTR v); [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)] HRESULT frameBorder([out, retval] BSTR *p); [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)] HRESULT frameSpacing([in] VARIANT v); [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)] HRESULT frameSpacing([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)] HRESULT marginWidth([in] VARIANT v); [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)] HRESULT marginWidth([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)] HRESULT marginHeight([in] VARIANT v); [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)] HRESULT marginHeight([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)] HRESULT noResize([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)] HRESULT noResize([out, retval] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)] HRESULT scrolling([in] BSTR v); [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)] HRESULT scrolling([out, retval] BSTR *p); } #define WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL \ [propput, id(DISPID_IHTMLFRAMEBASE_SRC)] \ void src(BSTR v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_SRC)] \ BSTR src(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE_NAME)] \ void name(BSTR v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_NAME)] \ BSTR name(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)] \ void border(VARIANT v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)] \ VARIANT border(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)] \ void frameBorder(BSTR v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)] \ BSTR frameBorder(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)] \ void frameSpacing(VARIANT v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)] \ VARIANT frameSpacing(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)] \ void marginWidth(VARIANT v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)] \ VARIANT marginWidth(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)] \ void marginHeight(VARIANT v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)] \ VARIANT marginHeight(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)] \ void noResize(VARIANT_BOOL v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)] \ VARIANT_BOOL noResize(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)] \ void scrolling(BSTR v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)] \ BSTR scrolling() /***************************************************************************** * IHTMLFrameBase2 interface */ [ odl, oleautomation, dual, uuid(3050f6db-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLFrameBase2 : IDispatch { [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)] HRESULT contentWindow([retval, out] IHTMLWindow2 **p); [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] HRESULT onload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLFRAMEBASE2_READYSTATE)] HRESULT readyState([retval, out] BSTR *p); [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)] HRESULT allowTransparency([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)] HRESULT allowTransparency([retval, out] VARIANT_BOOL *p); } #define WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL \ [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)] \ IHTMLWindow2 *contentWindow(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \ void onload(VARIANT v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \ VARIANT onload(); \ \ [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)] \ void allowTransparency(VARIANT_BOOL v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)] \ VARIANT_BOOL allowTransparency() #define WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL \ [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \ void longDesc(BSTR v); \ \ [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \ BSTR longDesc() #define WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL \ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; \ WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL; \ WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL; \ WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL /***************************************************************************** * IHTMLFrameElement3 interface */ [ odl, oleautomation, dual, uuid(3051042d-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLFrameElement3 : IDispatch { [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)] HRESULT contentDocument([out, retval] IDispatch **p); [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)] HRESULT src([in] BSTR v); [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)] HRESULT src([out, retval] BSTR *p); [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)] HRESULT longDesc([in] BSTR v); [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)] HRESULT longDesc([out, retval] BSTR *p); [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)] HRESULT frameBorder([in] BSTR v); [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)] HRESULT frameBorder([out, retval] BSTR * p); } /***************************************************************************** * DispHTMLFrameElement dispinterface */ [ hidden, uuid(3050f513-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLFrameElement { properties: methods: WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)] void borderColor(VARIANT v); [propget, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)] VARIANT borderColor(); [propput, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)] void height(VARIANT v); [propget, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)] VARIANT height(); [propput, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)] void width(VARIANT v); [propget, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)] VARIANT width(); [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)] IDispatch *contentDocument(); [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)] void ie8_src(BSTR v); [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)] BSTR ie8_src(); [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)] void ie8_longDesc(BSTR v); [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)] BSTR ie8_longDesc(); [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)] void ie8_frameBorder(BSTR v); [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)] BSTR ie8_frameBorder(); } /***************************************************************************** * HTMLFrameElement coclass */ [ noncreatable, uuid(3050f314-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLFrameElement { [default] dispinterface DispHTMLFrameElement; /* [source, default] dispinterface HTMLControlElementEvents; */ /* [source] dispinterface HTMLControlElementEvents2; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLFrameBase; interface IHTMLFrameBase2; /* interface IHTMLFrameBase3; */ /* interface IHTMLFrameElement; */ /* interface IHTMLFrameElement2; */ interface IHTMLFrameElement3; /* interface IGetSVGDocument; */ } /***************************************************************************** * IHTMLIFrameElement interface */ [ odl, oleautomation, dual, uuid(3050f315-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLIFrameElement : IDispatch { [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)] HRESULT vspace([in] LONG v); [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)] HRESULT vspace([retval, out] LONG *p); [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)] HRESULT hspace([in] LONG v); [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)] HRESULT hspace([retval, out] LONG *p); [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable] HRESULT align([in] BSTR v); [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable] HRESULT align([retval, out] BSTR *p); } /***************************************************************************** * IHTMLIFrameElement2 interface */ [ odl, oleautomation, dual, uuid(3050f4e6-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLIFrameElement2 : IDispatch { [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)] HRESULT height([in] VARIANT v); [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)] HRESULT height([out, retval] VARIANT *p); [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)] HRESULT width([in] VARIANT v); [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)] HRESULT width([out, retval] VARIANT *p); } /***************************************************************************** * IHTMLIFrameElement3 interface */ [ odl, oleautomation, dual, uuid(30510433-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLIFrameElement3 : IDispatch { [propget, id(DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT)] HRESULT contentDocument([out, retval] IDispatch **p); [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)] HRESULT src([in] BSTR v); [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)] HRESULT src([out, retval] BSTR *p); [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)] HRESULT longDesc([in] BSTR v); [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)] HRESULT longDesc([out, retval] BSTR *p); [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)] HRESULT frameBorder([in] BSTR v); [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)] HRESULT frameBorder([out, retval] BSTR *p); } /***************************************************************************** * DispHTMLIFrame dispinterface */ [ hidden, uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLIFrame { properties: methods: WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)] void vspace(LONG v); [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)] LONG vspace(); [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)] void hspace(LONG v); [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)] LONG hspace(); [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable] void align(BSTR v); [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable] BSTR align(); [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)] void height(VARIANT v); [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)] VARIANT height(); [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)] void width(VARIANT v); [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)] VARIANT width(); [propget, id(DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT)] IDispatch *contentDocument(); [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)] void ie8_src(BSTR v); [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)] BSTR ie8_src(); [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)] void ie8_longDesc(BSTR v); [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)] BSTR ie8_longDesc(); [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)] void ie8_frameBorder(BSTR v); [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)] BSTR ie8_frameBorder(); } /***************************************************************************** * HTMLIFrame coclass */ [ noncreatable, uuid(3050f316-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLIFrame { [default] dispinterface DispHTMLIFrame; /* [source, default] dispinterface HTMLControlElementEvents; */ /* [source] dispinterface HTMLControlElementEvents2; */ WINE_HTMLDATAELEMENT_INTERFACES; interface IHTMLControlElement; interface IHTMLFrameBase; interface IHTMLFrameBase2; /* interface IHTMLFrameBase3; */ interface IHTMLIFrameElement; interface IHTMLIFrameElement2; interface IHTMLIFrameElement3; /* interface IGetSVGDocument; */ } /***************************************************************************** * IHTMLStyleElement interface */ [ odl, oleautomation, dual, uuid(3050f375-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStyleElement : IDispatch { [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable] HRESULT type([in] BSTR v); [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable] HRESULT type([retval, out] BSTR *p); [propget, id(DISPID_IHTMLSTYLEELEMENT_READYSTATE)] HRESULT readyState([retval, out] BSTR *p); [propput, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable] HRESULT onreadystatechange([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable] HRESULT onload([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable] HRESULT onload([retval, out] VARIANT *p); [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([in] VARIANT v); [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable] HRESULT onerror([retval, out] VARIANT *p); [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)] HRESULT styleSheet([retval, out] IHTMLStyleSheet **p); [propput, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([in] VARIANT_BOOL v); [propget, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable] HRESULT disabled([retval, out] VARIANT_BOOL *p); [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable] HRESULT media([in] BSTR v); [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable] HRESULT media([retval, out] BSTR *p); } /***************************************************************************** * DispHTMLStyleElement dispinterface */ [ hidden, uuid(3050f511-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispHTMLStyleElement { properties: methods: WINE_HTMLELEMENT_DISPINTERFACE_DECL; [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable] void type(BSTR v); [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable] BSTR type(); [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable] void onload(VARIANT v); [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable] VARIANT onload(); [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable] void onerror(VARIANT v); [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable] VARIANT onerror(); [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)] IHTMLStyleSheet *styleSheet(); [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable] void media(BSTR v); [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable] BSTR media(); } /***************************************************************************** * HTMLStyleElement coclass */ [ noncreatable, uuid(3050f37d-98b5-11cf-bb82-00aa00bdce0b) ] coclass HTMLStyleElement { [default] dispinterface DispHTMLStyleElement; /* [source, default] dispinterface HTMLStyleElementEvents; */ /* [source] dispinterface HTMLStyleElementEvents2; */ WINE_HTMLELEMENT_INTERFACES; interface IHTMLStyleElement; /* interface IHTMLStyleElement2; */ } /***************************************************************************** * IHTMLStorage interface */ [ odl, oleautomation, dual, uuid(30510474-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLStorage : IDispatch { [propget, id(DISPID_IHTMLSTORAGE_LENGTH), hidden] HRESULT length([out, retval] long *p); [propget, id(DISPID_IHTMLSTORAGE_REMAININGSPACE), hidden] HRESULT remainingSpace([out, retval] long *p); [id(DISPID_IHTMLSTORAGE_KEY)] HRESULT key( [in] long lIndex, [out, retval] BSTR *); [id(DISPID_IHTMLSTORAGE_GETITEM)] HRESULT getItem( [in] BSTR bstrKey, [out, retval] VARIANT *); [id(DISPID_IHTMLSTORAGE_SETITEM)] HRESULT setItem( [in] BSTR bstrKey, [in] BSTR bstrValue); [id(DISPID_IHTMLSTORAGE_REMOVEITEM)] HRESULT removeItem([in] BSTR bstrKey); [id(DISPID_IHTMLSTORAGE_CLEAR)] HRESULT clear(); } /***************************************************************************** * IDOMEventTarget interface */ [ odl, oleautomation, dual, uuid(305104b9-98b5-11cf-bb82-00aa00bdce0b) ] interface IEventTarget : IDispatch { [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)] HRESULT addEventListener( [in] BSTR type, [in] IDispatch *listener, [in] VARIANT_BOOL useCapture); [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)] HRESULT removeEventListener( [in] BSTR type, [in] IDispatch *listener, [in] VARIANT_BOOL useCapture); [id(DISPID_IEVENTTARGET_DISPATCHEVENT)] HRESULT dispatchEvent( [in] IDOMEvent *evt, [out, retval] VARIANT_BOOL *pfResult); } typedef enum _DOM_EVENT_PHASE { DEP_CAPTURING_PHASE = 1, DEP_AT_TARGET = 2, DEP_BUBBLING_PHASE = 3, DOM_EVENT_PHASE_Max = 0x7fffffff } DOM_EVENT_PHASE; /***************************************************************************** * IDOMEvent interface */ [ odl, oleautomation, dual, uuid(305104ba-98b5-11cf-bb82-00aa00bdce0b) ] interface IDOMEvent : IDispatch { [propget, id(DISPID_IDOMEVENT_BUBBLES)] HRESULT bubbles([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMEVENT_CANCELABLE)] HRESULT cancelable([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMEVENT_CURRENTTARGET)] HRESULT currentTarget([out, retval] IEventTarget **p); [propget, id(DISPID_IDOMEVENT_DEFAULTPREVENTED)] HRESULT defaultPrevented([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMEVENT_EVENTPHASE)] HRESULT eventPhase([out, retval] USHORT *p); [propget, id(DISPID_IDOMEVENT_TARGET)] HRESULT target([out, retval] IEventTarget **p); [propget, id(DISPID_IDOMEVENT_TIMESTAMP)] HRESULT timeStamp([out, retval] ULONGLONG *p); [propget, id(DISPID_IDOMEVENT_TYPE)] HRESULT type([out, retval] BSTR *p); [id(DISPID_IDOMEVENT_INITEVENT)] HRESULT initEvent( [in] BSTR eventType, [in] VARIANT_BOOL canBubble, [in] VARIANT_BOOL cancelable); [id(DISPID_IDOMEVENT_PREVENTDEFAULT)] HRESULT preventDefault(); [id(DISPID_IDOMEVENT_STOPPROPAGATION)] HRESULT stopPropagation(); [id(DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION)] HRESULT stopImmediatePropagation(); [propget, id(DISPID_IDOMEVENT_ISTRUSTED)] HRESULT isTrusted([out, retval] VARIANT_BOOL *p); [propput, id(DISPID_IDOMEVENT_CANCELBUBBLE)] HRESULT cancelBubble([in] VARIANT_BOOL v); [propget, id(DISPID_IDOMEVENT_CANCELBUBBLE)] HRESULT cancelBubble([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMEVENT_SRCELEMENT)] HRESULT srcElement([out, retval] IHTMLElement **p); } /***************************************************************************** * DispDOMEvent dispinterface */ [ hidden, uuid(3050f5a2-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispDOMEvent { properties: methods: #define WINE_IDOMEVENT_DISPINTERFACE_DECL \ [propget, id(DISPID_IDOMEVENT_BUBBLES)] \ VARIANT_BOOL bubbles(); \ \ [propget, id(DISPID_IDOMEVENT_CANCELABLE)] \ VARIANT_BOOL cancelable(); \ \ [propget, id(DISPID_IDOMEVENT_CURRENTTARGET)] \ IEventTarget *currentTarget(); \ \ [propget, id(DISPID_IDOMEVENT_DEFAULTPREVENTED)] \ VARIANT_BOOL defaultPrevented(); \ \ [propget, id(DISPID_IDOMEVENT_EVENTPHASE)] \ USHORT eventPhase(); \ \ [propget, id(DISPID_IDOMEVENT_TARGET)] \ IEventTarget *target(); \ \ [propget, id(DISPID_IDOMEVENT_TIMESTAMP)] \ ULONGLONG timeStamp(); \ \ [propget, id(DISPID_IDOMEVENT_TYPE)] \ BSTR type(); \ \ [id(DISPID_IDOMEVENT_INITEVENT)] \ void initEvent( \ [in] BSTR eventType, \ [in] VARIANT_BOOL canBubble, \ [in] VARIANT_BOOL cancelable); \ \ [id(DISPID_IDOMEVENT_PREVENTDEFAULT)] \ void preventDefault(); \ \ [id(DISPID_IDOMEVENT_STOPPROPAGATION)] \ void stopPropagation(); \ \ [id(DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION)] \ void stopImmediatePropagation(); \ \ [propget, id(DISPID_IDOMEVENT_ISTRUSTED)] \ VARIANT_BOOL isTrusted(); \ \ [propput, id(DISPID_IDOMEVENT_CANCELBUBBLE)] \ void cancelBubble(VARIANT_BOOL v); \ \ [propget, id(DISPID_IDOMEVENT_CANCELBUBBLE)] \ VARIANT_BOOL cancelBubble(); \ \ [propget, id(DISPID_IDOMEVENT_SRCELEMENT)] \ IHTMLElement *srcElement() WINE_IDOMEVENT_DISPINTERFACE_DECL; } /***************************************************************************** * IDOMUIEvent interface */ [ odl, oleautomation, dual, uuid(305106ca-98b5-11cf-bb82-00aa00bdce0b) ] interface IDOMUIEvent : IDispatch { [propget, id(DISPID_IDOMUIEVENT_VIEW)] HRESULT view([out, retval] IHTMLWindow2 **p); [propget, id(DISPID_IDOMUIEVENT_DETAIL)] HRESULT detail([out, retval] long *p); [id(DISPID_IDOMUIEVENT_INITUIEVENT)] HRESULT initUIEvent( [in] BSTR eventType, [in] VARIANT_BOOL canBubble, [in] VARIANT_BOOL cancelable, [in] IHTMLWindow2 *view, [in] long detail); } /***************************************************************************** * DispDOMUIEvent dispinterface */ [ hidden, uuid(30590072-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispDOMUIEvent { properties: methods: #define WINE_IDOMUIEVENT_DISPINTERFACE_DECL \ [propget, id(DISPID_IDOMUIEVENT_VIEW)] \ IHTMLWindow2 *view(); \ \ [propget, id(DISPID_IDOMUIEVENT_DETAIL)] \ long detail(); \ \ [id(DISPID_IDOMUIEVENT_INITUIEVENT)] \ void initUIEvent( \ [in] BSTR eventType, \ [in] VARIANT_BOOL canBubble, \ [in] VARIANT_BOOL cancelable, \ [in] IHTMLWindow2 *view, \ [in] long detail) WINE_IDOMEVENT_DISPINTERFACE_DECL; WINE_IDOMUIEVENT_DISPINTERFACE_DECL; } /***************************************************************************** * IDOMMouseEvent interface */ [ odl, oleautomation, dual, uuid(305106ce-98b5-11cf-bb82-00aa00bdce0b) ] interface IDOMMouseEvent : IDispatch { [propget, id(DISPID_IDOMMOUSEEVENT_SCREENX)] HRESULT screenX([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_SCREENY)] HRESULT screenY([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_CLIENTX)] HRESULT clientX([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_CLIENTY)] HRESULT clientY([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_CTRLKEY)] HRESULT ctrlKey([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMMOUSEEVENT_SHIFTKEY)] HRESULT shiftKey([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMMOUSEEVENT_ALTKEY)] HRESULT altKey([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMMOUSEEVENT_METAKEY)] HRESULT metaKey([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMMOUSEEVENT_BUTTON)] HRESULT button([out, retval] USHORT *p); [propget, id(DISPID_IDOMMOUSEEVENT_RELATEDTARGET)] HRESULT relatedTarget([out, retval] IEventTarget **p); [id(DISPID_IDOMMOUSEEVENT_INITMOUSEEVENT)] HRESULT initMouseEvent( [in] BSTR eventType, [in] VARIANT_BOOL canBubble, [in] VARIANT_BOOL cancelable, [in] IHTMLWindow2 *viewArg, [in] long detailArg, [in] long screenXArg, [in] long screenYArg, [in] long clientXArg, [in] long clientYArg, [in] VARIANT_BOOL ctrlKeyArg, [in] VARIANT_BOOL altKeyArg, [in] VARIANT_BOOL shiftKeyArg, [in] VARIANT_BOOL metaKeyArg, [in] USHORT buttonArg, [in] IEventTarget *relatedTargetArg); [id(DISPID_IDOMMOUSEEVENT_GETMODIFIERSTATE)] HRESULT getModifierState( [in] BSTR keyArg, [out, retval] VARIANT_BOOL *activated); [propget, id(DISPID_IDOMMOUSEEVENT_BUTTONS)] HRESULT buttons([out, retval] USHORT *p); [propget, id(DISPID_IDOMMOUSEEVENT_FROMELEMENT)] HRESULT fromElement([out, retval] IHTMLElement **p); [propget, id(DISPID_IDOMMOUSEEVENT_TOELEMENT)] HRESULT toElement([out, retval] IHTMLElement **p); [propget, id(DISPID_IDOMMOUSEEVENT_X)] HRESULT x([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_Y)] HRESULT y([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_OFFSETX)] HRESULT offsetX([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_OFFSETY)] HRESULT offsetY([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_PAGEX)] HRESULT pageX([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_PAGEY)] HRESULT pageY([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_LAYERX)] HRESULT layerX([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_LAYERY)] HRESULT layerY([out, retval] long *p); [propget, id(DISPID_IDOMMOUSEEVENT_WHICH)] HRESULT which([out, retval] USHORT *p); } /***************************************************************************** * DispDOMMouseEvent dispinterface */ [ hidden, uuid(30590073-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispDOMMouseEvent { properties: methods: #define WINE_IDOMMOUSEEVENT_DISPINTERFACE_DECL \ [propget, id(DISPID_IDOMMOUSEEVENT_SCREENX)] \ long screenX(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_SCREENY)] \ long screenY(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_CLIENTX)] \ long clientX(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_CLIENTY)] \ long clientY(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_CTRLKEY)] \ VARIANT_BOOL ctrlKey(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_SHIFTKEY)] \ VARIANT_BOOL shiftKey(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_ALTKEY)] \ VARIANT_BOOL altKey(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_METAKEY)] \ VARIANT_BOOL metaKey(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_BUTTON)] \ USHORT button(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_RELATEDTARGET)] \ IEventTarget *relatedTarget(); \ \ [id(DISPID_IDOMMOUSEEVENT_INITMOUSEEVENT)] \ void initMouseEvent( \ [in] BSTR eventType, \ [in] VARIANT_BOOL canBubble, \ [in] VARIANT_BOOL cancelable, \ [in] IHTMLWindow2 *viewArg, \ [in] long detailArg, \ [in] long screenXArg, \ [in] long screenYArg, \ [in] long clientXArg, \ [in] long clientYArg, \ [in] VARIANT_BOOL ctrlKeyArg, \ [in] VARIANT_BOOL altKeyArg, \ [in] VARIANT_BOOL shiftKeyArg, \ [in] VARIANT_BOOL metaKeyArg, \ [in] USHORT buttonArg, \ [in] IEventTarget *relatedTargetArg); \ \ [id(DISPID_IDOMMOUSEEVENT_GETMODIFIERSTATE)] \ VARIANT_BOOL getModifierState([in] BSTR keyArg); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_BUTTONS)] \ USHORT buttons(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_FROMELEMENT)] \ IHTMLElement *fromElement(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_TOELEMENT)] \ IHTMLElement *toElement(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_X)] \ long x(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_Y)] \ long y(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_OFFSETX)] \ long offsetX(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_OFFSETY)] \ long offsetY(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_PAGEX)] \ long pageX(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_PAGEY)] \ long pageY(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_LAYERX)] \ long layerX(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_LAYERY)] \ long layerY(); \ \ [propget, id(DISPID_IDOMMOUSEEVENT_WHICH)] \ USHORT which() WINE_IDOMEVENT_DISPINTERFACE_DECL; WINE_IDOMUIEVENT_DISPINTERFACE_DECL; WINE_IDOMMOUSEEVENT_DISPINTERFACE_DECL; } /***************************************************************************** * IDOMKeyboardEvent interface */ [ odl, oleautomation, dual, uuid(305106d6-98b5-11cf-bb82-00aa00bdce0b) ] interface IDOMKeyboardEvent : IDispatch { [propget, id(DISPID_IDOMKEYBOARDEVENT_KEY)] HRESULT key([retval, out] BSTR *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_LOCATION)] HRESULT location([out, retval] ULONG *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_CTRLKEY)] HRESULT ctrlKey([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_SHIFTKEY)] HRESULT shiftKey([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_ALTKEY)] HRESULT altKey([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_METAKEY)] HRESULT metaKey([out, retval] VARIANT_BOOL *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_REPEAT)] HRESULT repeat([out, retval] VARIANT_BOOL *p); [id(DISPID_IDOMKEYBOARDEVENT_GETMODIFIERSTATE)] HRESULT getModifierState( [in] BSTR keyArg, [out, retval] VARIANT_BOOL *state); [id(DISPID_IDOMKEYBOARDEVENT_INITKEYBOARDEVENT)] HRESULT initKeyboardEvent( [in] BSTR eventType, [in] VARIANT_BOOL canBubble, [in] VARIANT_BOOL cancelable, [in] IHTMLWindow2 *viewArg, [in] BSTR keyArg, [in] ULONG locationArg, [in] BSTR modifiersListArg, [in] VARIANT_BOOL repeat, [in] BSTR locale); [propget, id(DISPID_IDOMKEYBOARDEVENT_KEYCODE)] HRESULT keyCode([out, retval] long *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_CHARCODE)] HRESULT charCode([out, retval] long *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_WHICH)] HRESULT which([out, retval] long *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_IE9_CHAR)] HRESULT ie9_char([out, retval] VARIANT *p); [propget, id(DISPID_IDOMKEYBOARDEVENT_LOCALE)] HRESULT locale([out, retval] BSTR *p); } /***************************************************************************** * DispDOMKeyboardEvent dispinterface */ [ hidden, uuid(30590077-98b5-11cf-bb82-00aa00bdce0b) ] dispinterface DispDOMKeyboardEvent { properties: methods: WINE_IDOMEVENT_DISPINTERFACE_DECL; WINE_IDOMUIEVENT_DISPINTERFACE_DECL; [propget, id(DISPID_IDOMKEYBOARDEVENT_KEY)] BSTR key(); [propget, id(DISPID_IDOMKEYBOARDEVENT_LOCATION)] ULONG location(); [propget, id(DISPID_IDOMKEYBOARDEVENT_CTRLKEY)] VARIANT_BOOL ctrlKey(); [propget, id(DISPID_IDOMKEYBOARDEVENT_SHIFTKEY)] VARIANT_BOOL shiftKey(); [propget, id(DISPID_IDOMKEYBOARDEVENT_ALTKEY)] VARIANT_BOOL altKey(); [propget, id(DISPID_IDOMKEYBOARDEVENT_METAKEY)] VARIANT_BOOL metaKey(); [propget, id(DISPID_IDOMKEYBOARDEVENT_REPEAT)] VARIANT_BOOL repeat(); [id(DISPID_IDOMKEYBOARDEVENT_GETMODIFIERSTATE)] VARIANT_BOOL getModifierState([in] BSTR keyArg); [id(DISPID_IDOMKEYBOARDEVENT_INITKEYBOARDEVENT)] void initKeyboardEvent( [in] BSTR eventType, [in] VARIANT_BOOL canBubble, [in] VARIANT_BOOL cancelable, [in] IHTMLWindow2 *viewArg, [in] BSTR keyArg, [in] ULONG locationArg, [in] BSTR modifiersListArg, [in] VARIANT_BOOL repeat, [in] BSTR locale); [propget, id(DISPID_IDOMKEYBOARDEVENT_KEYCODE)] long keyCode(); [propget, id(DISPID_IDOMKEYBOARDEVENT_CHARCODE)] long charCode(); [propget, id(DISPID_IDOMKEYBOARDEVENT_WHICH)] long which(); [propget, id(DISPID_IDOMKEYBOARDEVENT_IE9_CHAR)] VARIANT ie9_char(); [propget, id(DISPID_IDOMKEYBOARDEVENT_LOCALE)] BSTR locale(); } /***************************************************************************** * IDOMMessageEvent interface */ [ odl, oleautomation, dual, uuid(30510720-98b5-11cf-bb82-00aa00bdce0b) ] interface IDOMMessageEvent : IDispatch { [propget, id(DISPID_IDOMMESSAGEEVENT_DATA)] HRESULT data([out, retval] BSTR *p); [propget, id(DISPID_IDOMMESSAGEEVENT_ORIGIN)] HRESULT origin([out, retval] BSTR *p); [propget, id(DISPID_IDOMMESSAGEEVENT_SOURCE)] HRESULT source([out, retval] IHTMLWindow2 **p); [id(DISPID_IDOMMESSAGEEVENT_INITMESSAGEEVENT)] HRESULT initMessageEvent( [in] BSTR eventType, [in] VARIANT_BOOL canBubble, [in] VARIANT_BOOL cancelable, [in] BSTR data, [in] BSTR origin, [in] BSTR lastEventId, [in] IHTMLWindow2 *source); } /***************************************************************************** * IMarkupContainer interface */ [ object, pointer_default(unique), uuid(3050f5f9-98b5-11cf-bb82-00aa00bdce0B) ] interface IMarkupContainer : IUnknown { HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc); } /***************************************************************************** * IMarkupPointer interface */ [ object, pointer_default(unique), uuid(3050f49f-98b5-11cf-bb82-00aa00bdce0b) ] interface IMarkupPointer : IUnknown { HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc); HRESULT Gravity([out] POINTER_GRAVITY *pGravity); HRESULT SetGravity([in] POINTER_GRAVITY Gravity); HRESULT Cling([out] BOOL *pfCling); HRESULT SetCling([in] BOOL fCLing); HRESULT UnPosition(); HRESULT IsPositioned([out] BOOL *pfPositioned); HRESULT GetContainer([out] IMarkupContainer **ppContainer); HRESULT MoveAdjacentToElement( [in] IHTMLElement *pElement, [in] ELEMENT_ADJACENCY eAdj); HRESULT MoveToPointer([in] IMarkupPointer *pPointer); HRESULT MoveToContainer( [in] IMarkupContainer *pContainer, [in] BOOL fAtStart); HRESULT Left( [in] BOOL fMove, [out] MARKUP_CONTEXT_TYPE *pContext, [out] IHTMLElement **ppElement, [in, out] LONG *pcch, [out, size_is(*pcch)] OLECHAR *pchText); HRESULT Right( [in] BOOL fMove, [out] MARKUP_CONTEXT_TYPE *pContext, [out] IHTMLElement **ppElement, [in, out] LONG *pcch, [out, size_is(*pcch)] OLECHAR *pchText); HRESULT CurrentScope([out] IHTMLElement **ppElemCurrent); HRESULT IsLeftOf( [in] IMarkupPointer *pPointerThat, [out] BOOL *pfResult); HRESULT IsLeftOfOrEqualTo( [in] IMarkupPointer *pPointerThat, [out] BOOL *pfResult); HRESULT IsRightOf( [in] IMarkupPointer *pPointerThat, [out] BOOL *pfResult); HRESULT IsRightOfOrEqualTo( [in] IMarkupPointer *pPointerThat, [out] BOOL *pfResult); HRESULT IsEqualTo( [in] IMarkupPointer *pPointerThat, [out] BOOL *pfAreEqual); HRESULT MoveUnit([in] MOVEUNIT_ACTION muAction); HRESULT FindText( [in] OLECHAR *pchFindText, [in] DWORD dwFlags, [in] IMarkupPointer *pIEndMatch, [in] IMarkupPointer *pIEndSearch); } /***************************************************************************** * IHTMLDOMConstructorCollection interface */ [ odl, oleautomation, dual, uuid(3051049c-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLDOMConstructorCollection : IDispatch { [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR)] HRESULT Attr([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION)] HRESULT BehaviorUrnsCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION)] HRESULT BookmarkCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO)] HRESULT CompatibleInfo([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION)] HRESULT CompatibleInfoCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION)] HRESULT ControlRangeCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION)] HRESULT CSSCurrentStyleDeclaration([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST)] HRESULT CSSRuleList([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION)] HRESULT CSSRuleStyleDeclaration([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION)] HRESULT CSSStyleDeclaration([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE)] HRESULT CSSStyleRule([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET)] HRESULT CSSStyleSheet([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER)] HRESULT DataTransfer([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION)] HRESULT DOMImplementation([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT)] HRESULT Element([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT)] HRESULT Event([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY)] HRESULT History([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS)] HRESULT HTCElementBehaviorDefaults([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT)] HRESULT HTMLAnchorElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT)] HRESULT HTMLAreaElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION)] HRESULT HTMLAreasCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT)] HRESULT HTMLBaseElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT)] HRESULT HTMLBaseFontElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT)] HRESULT HTMLBGSoundElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT)] HRESULT HTMLBlockElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT)] HRESULT HTMLBodyElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT)] HRESULT HTMLBRElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT)] HRESULT HTMLButtonElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION)] HRESULT HTMLCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT)] HRESULT HTMLCommentElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT)] HRESULT HTMLDDElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT)] HRESULT HTMLDivElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT)] HRESULT HTMLDocument([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT)] HRESULT HTMLDListElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT)] HRESULT HTMLDTElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT)] HRESULT HTMLEmbedElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT)] HRESULT HTMLFieldSetElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT)] HRESULT HTMLFontElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT)] HRESULT HTMLFormElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT)] HRESULT HTMLFrameElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT)] HRESULT HTMLFrameSetElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT)] HRESULT HTMLGenericElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT)] HRESULT HTMLHeadElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT)] HRESULT HTMLHeadingElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT)] HRESULT HTMLHRElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT)] HRESULT HTMLHtmlElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT)] HRESULT HTMLIFrameElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT)] HRESULT HTMLImageElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT)] HRESULT HTMLInputElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT)] HRESULT HTMLIsIndexElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT)] HRESULT HTMLLabelElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT)] HRESULT HTMLLegendElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT)] HRESULT HTMLLIElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT)] HRESULT HTMLLinkElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT)] HRESULT HTMLMapElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT)] HRESULT HTMLMarqueeElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT)] HRESULT HTMLMetaElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG)] HRESULT HTMLModelessDialog([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO)] HRESULT HTMLNamespaceInfo([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION)] HRESULT HTMLNamespaceInfoCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT)] HRESULT HTMLNextIdElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT)] HRESULT HTMLNoShowElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT)] HRESULT HTMLObjectElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT)] HRESULT HTMLOListElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT)] HRESULT HTMLOptionElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT)] HRESULT HTMLParagraphElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT)] HRESULT HTMLParamElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT)] HRESULT HTMLPhraseElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION)] HRESULT HTMLPluginsCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP)] HRESULT HTMLPopup([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT)] HRESULT HTMLScriptElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT)] HRESULT HTMLSelectElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT)] HRESULT HTMLSpanElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT)] HRESULT HTMLStyleElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT)] HRESULT HTMLTableCaptionElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT)] HRESULT HTMLTableCellElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT)] HRESULT HTMLTableColElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT)] HRESULT HTMLTableElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT)] HRESULT HTMLTableRowElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT)] HRESULT HTMLTableSectionElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT)] HRESULT HTMLTextAreaElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT)] HRESULT HTMLTextElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT)] HRESULT HTMLTitleElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT)] HRESULT HTMLUListElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT)] HRESULT HTMLUnknownElement([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE)] HRESULT Image([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION)] HRESULT Location([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP)] HRESULT NamedNodeMap([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR)] HRESULT Navigator([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST)] HRESULT NodeList([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION)] HRESULT Option([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN)] HRESULT Screen([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION)] HRESULT Selection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST)] HRESULT StaticNodeList([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE)] HRESULT Storage([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST)] HRESULT StyleSheetList([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE)] HRESULT StyleSheetPage([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST)] HRESULT StyleSheetPageList([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT)] HRESULT Text([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE)] HRESULT TextRange([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION)] HRESULT TextRangeCollection([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE)] HRESULT TextRectangle([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST)] HRESULT TextRectangleList([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW)] HRESULT Window([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST)] HRESULT XDomainRequest([out, retval] IDispatch **p); [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST)] HRESULT XMLHttpRequest([out, retval] IDispatch **p); } /***************************************************************************** * IXMLGenericParse interface */ [ object, pointer_default(unique), uuid(E4E23071-4D07-11d2-AE76-0080C73BC199) ] interface IXMLGenericParse : IUnknown { HRESULT SetGenericParse( [in] VARIANT_BOOL fDoGeneric); } /***************************************************************************** * ISegment interface */ [ object, pointer_default(unique), uuid(3050f683-98b5-11cf-bb82-00aa00bdce0b) ] interface ISegment : IUnknown { HRESULT GetPointers( [in] IMarkupPointer *pIStart, [in] IMarkupPointer *pIEnd); } /***************************************************************************** * IElementSegment interface */ [ object, pointer_default(unique), uuid(3050f68f-98b5-11cf-bb82-00aa00bdce0b) ] interface IElementSegment : ISegment { HRESULT GetElement([out] IHTMLElement **ppIElement); HRESULT SetPrimary([in] BOOL fPrimary); HRESULT IsPrimary([out] BOOL *pfPrimary); } /***************************************************************************** * ISelectionServicesListener interface */ [ object, pointer_default(unique), uuid(3050f699-98b5-11cf-bb82-00aa00bdce0b) ] interface ISelectionServicesListener : IUnknown { HRESULT BeginSelectionUndo(); HRESULT EndSelectionUndo(); HRESULT OnSelectedElementExit( [in] IMarkupPointer *pIElementStart, [in] IMarkupPointer *pIElementEnd, [in] IMarkupPointer *pIElementContentStart, [in] IMarkupPointer *pIElementContentEnd); HRESULT OnChangeType( [in] SELECTION_TYPE eType, [in] ISelectionServicesListener *pIListener); HRESULT GetTypeDetail([out] BSTR *pTypeDetail); } /***************************************************************************** * ISelectionServices interface */ [ object, pointer_default(unique), uuid(3050f684-98b5-11cf-bb82-00aa00bdce0b) ] interface ISelectionServices : IUnknown { HRESULT SetSelectionType( [in] SELECTION_TYPE eType, [in] ISelectionServicesListener *pIListener); HRESULT GetMarkupContainer([out] IMarkupContainer **ppIContainer); HRESULT AddSegment( [in] IMarkupPointer *pIStart, [in] IMarkupPointer *pIEnd, [out] ISegment **ppISegmentAdded); HRESULT AddElementSegment( [in] IHTMLElement *pIElement, [out] IElementSegment **ppISegmentAdded); HRESULT RemoveSegment([in] ISegment *pISegment); HRESULT GetSelectionServicesListener([out] ISelectionServicesListener **ppISelectionServicesListener); } /***************************************************************************** * IHTMLEditDesigner interface */ [ object, pointer_default(unique), uuid(3050f662-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLEditDesigner : IUnknown { HRESULT PreHandleEvent( [in] DISPID inEvtDispId, [in] IHTMLEventObj *pIEventObj); HRESULT PostHandleEvent( [in] DISPID inEvtDispId, [in] IHTMLEventObj *pIEventObj); HRESULT TranslateAccelerator( [in] DISPID inEvtDispId, [in] IHTMLEventObj *pIEventObj); HRESULT PostEditorEventNotify( [in] DISPID inEvtDispId, [in] IHTMLEventObj *pIEventObj); } /***************************************************************************** * IHTMLEditServices interface */ [ object, pointer_default(unique), uuid(3050f663-98b5-11cf-bb82-00aa00bdce0b) ] interface IHTMLEditServices : IUnknown { HRESULT AddDesigner([in] IHTMLEditDesigner *pIDesigner); HRESULT RemoveDesigner([in] IHTMLEditDesigner *pIDesigner); HRESULT GetSelectionServices( [in] IMarkupContainer *pIContainer, [out] ISelectionServices **ppSelSvc); HRESULT MoveToSelectionAnchor([in] IMarkupPointer *pIStartAnchor); HRESULT MoveToSelectionEnd([in] IMarkupPointer *pIEndAnchor); HRESULT SelectRange( [in] IMarkupPointer* pStart, [in] IMarkupPointer* pEnd, [in] SELECTION_TYPE eType); } /***************************************************************************** * IElementBehaviorSite interface */ [ odl, uuid(3050F427-98B5-11CF-BB82-00AA00BDCE0B) ] interface IElementBehaviorSite : IUnknown { HRESULT GetElement([out, retval] IHTMLElement **ppElement); HRESULT RegisterNotification([in] long lEvent); } /***************************************************************************** * IElementBehavior interface */ [ odl, uuid(3050F425-98B5-11CF-BB82-00AA00BDCE0B) ] interface IElementBehavior : IUnknown { HRESULT Init([in] IElementBehaviorSite *pBehaviorSite); HRESULT Notify([in] long lEvent, [in, out] VARIANT *pVar); HRESULT Detach(); } /***************************************************************************** * IElementBehaviorFactory interface */ [ odl, uuid(3050f429-98b5-11cf-bb82-00aa00bdce0b) ] interface IElementBehaviorFactory : IUnknown { HRESULT FindBehavior( [in] BSTR bstrBehavior, [in] BSTR bstrBehaviorUrl, [in] IElementBehaviorSite *pSite, [out] IElementBehavior **ppBehavior); } } /* library MSHTML */ interface IOleCommandTarget; /***************************************************************************** * IHTMLPrivateWindow interface */ [ object, uuid(3050f6dc-98b5-11cf-bb82-00aa00bdce0b), local ] interface IHTMLPrivateWindow : IUnknown { HRESULT SuperNavigate(BSTR url, BSTR arg2, BSTR arg3, BSTR arg4, VARIANT *post_data, VARIANT *headers, ULONG flags); HRESULT GetPendingUrl(BSTR *url); HRESULT SetPICSTarget(IOleCommandTarget *cmdtrg); HRESULT PICSComplete(int arg); HRESULT FindWindowByName(LPCWSTR name, IHTMLWindow2 **ret); HRESULT GetAddressBarUrl(BSTR *url); } /***************************************************************************** * IWebBrowserPriv interface */ [ object, uuid(3050f804-98b5-11cf-bb82-00aa00bdce0b), local ] interface IWebBrowserPriv : IUnknown { HRESULT NavigateWithBindCtx(VARIANT *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data, VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment); HRESULT OnClose(); } /***************************************************************************** * IWebBrowserPriv2IE8 interface */ [ object, uuid(3ed72303-6ffc-4214-ba90-faf1862dec8a), local ] interface IWebBrowserPriv2IE8 : IUnknown { HRESULT NavigateWithBindCtx2(IUri *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data, VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment); HRESULT SetBrowserFrameOptions(DWORD opt1, DWORD opt2); HRESULT DetachConnectionPoints(); HRESULT GetProcessId(DWORD *pid); HRESULT CompatAttachEditEvents(); HRESULT HandleOpenOptions(IUnknown *obj, BSTR bstr, int options); HRESULT SetSearchTerm(BSTR term); HRESULT GetSearchTerm(BSTR *term); HRESULT GetCurrentDocument(IDispatch** doc); } /***************************************************************************** * IWebBrowserPriv2IE9 interface */ [ object, uuid(3ed72303-6ffc-4214-ba90-faf1862dec8a), local ] interface IWebBrowserPriv2IE9 : IUnknown { HRESULT NavigateWithBindCtx2(IUri *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data, VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment, DWORD unused); /* Probably more */ } ================================================ FILE: wine/windows/msi.h ================================================ /* * Copyright (C) 2002,2003 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSI_H #define __WINE_MSI_H #ifndef _MSI_NO_CRYPTO #include #endif #ifdef __cplusplus extern "C" { #endif typedef ULONG MSIHANDLE; typedef enum tagINSTALLSTATE { INSTALLSTATE_NOTUSED = -7, INSTALLSTATE_BADCONFIG = -6, INSTALLSTATE_INCOMPLETE = -5, INSTALLSTATE_SOURCEABSENT = -4, INSTALLSTATE_MOREDATA = -3, INSTALLSTATE_INVALIDARG = -2, INSTALLSTATE_UNKNOWN = -1, INSTALLSTATE_BROKEN = 0, INSTALLSTATE_ADVERTISED = 1, INSTALLSTATE_ABSENT = 2, INSTALLSTATE_LOCAL = 3, INSTALLSTATE_SOURCE = 4, INSTALLSTATE_DEFAULT = 5 } INSTALLSTATE; typedef enum tagMSIPATCHSTATE { MSIPATCHSTATE_INVALID = 0, MSIPATCHSTATE_APPLIED = 1, MSIPATCHSTATE_SUPERSEDED = 2, MSIPATCHSTATE_OBSOLETED = 4, MSIPATCHSTATE_REGISTERED = 8, MSIPATCHSTATE_ALL = (MSIPATCHSTATE_APPLIED | MSIPATCHSTATE_SUPERSEDED | MSIPATCHSTATE_OBSOLETED | MSIPATCHSTATE_REGISTERED) } MSIPATCHSTATE; typedef enum tagINSTALLUILEVEL { INSTALLUILEVEL_NOCHANGE = 0, INSTALLUILEVEL_DEFAULT = 1, INSTALLUILEVEL_NONE = 2, INSTALLUILEVEL_BASIC = 3, INSTALLUILEVEL_REDUCED = 4, INSTALLUILEVEL_FULL = 5, INSTALLUILEVEL_HIDECANCEL = 0x20, INSTALLUILEVEL_PROGRESSONLY = 0x40, INSTALLUILEVEL_ENDDIALOG = 0x80, INSTALLUILEVEL_SOURCERESONLY = 0x100 } INSTALLUILEVEL; typedef enum tagUSERINFOSTATE { USERINFOSTATE_MOREDATA = -3, USERINFOSTATE_INVALIDARG = -2, USERINFOSTATE_UNKNOWN = -1, USERINFOSTATE_ABSENT = 0, USERINFOSTATE_PRESENT = 1, } USERINFOSTATE; typedef enum tagINSTALLLEVEL { INSTALLLEVEL_DEFAULT = 0, INSTALLLEVEL_MINIMUM = 1, INSTALLLEVEL_MAXIMUM = 0xFFFF } INSTALLLEVEL; typedef enum tagINSTALLMESSAGE { INSTALLMESSAGE_FATALEXIT = 0, INSTALLMESSAGE_ERROR = 0x01000000, INSTALLMESSAGE_WARNING = 0x02000000, INSTALLMESSAGE_USER = 0x03000000, INSTALLMESSAGE_INFO = 0x04000000, INSTALLMESSAGE_FILESINUSE = 0x05000000, INSTALLMESSAGE_RESOLVESOURCE = 0x06000000, INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000, INSTALLMESSAGE_ACTIONSTART = 0x08000000, INSTALLMESSAGE_ACTIONDATA = 0x09000000, INSTALLMESSAGE_PROGRESS = 0x0a000000, INSTALLMESSAGE_COMMONDATA = 0x0b000000, INSTALLMESSAGE_INITIALIZE = 0x0c000000, INSTALLMESSAGE_TERMINATE = 0x0d000000, INSTALLMESSAGE_SHOWDIALOG = 0x0e000000, INSTALLMESSAGE_RMFILESINUSE = 0x19000000, INSTALLMESSAGE_INSTALLSTART = 0x1A000000, INSTALLMESSAGE_INSTALLEND = 0x1B000000, } INSTALLMESSAGE; typedef enum tagREINSTALLMODE { REINSTALLMODE_REPAIR = 0x00000001, REINSTALLMODE_FILEMISSING = 0x00000002, REINSTALLMODE_FILEOLDERVERSION = 0x00000004, REINSTALLMODE_FILEEQUALVERSION = 0x00000008, REINSTALLMODE_FILEEXACT = 0x00000010, REINSTALLMODE_FILEVERIFY = 0x00000020, REINSTALLMODE_FILEREPLACE = 0x00000040, REINSTALLMODE_MACHINEDATA = 0x00000080, REINSTALLMODE_USERDATA = 0x00000100, REINSTALLMODE_SHORTCUT = 0x00000200, REINSTALLMODE_PACKAGE = 0x00000400 } REINSTALLMODE; typedef enum tagINSTALLLOGMODE { INSTALLLOGMODE_FATALEXIT = (1 << (INSTALLMESSAGE_FATALEXIT >> 24)), INSTALLLOGMODE_ERROR = (1 << (INSTALLMESSAGE_ERROR >> 24)), INSTALLLOGMODE_WARNING = (1 << (INSTALLMESSAGE_WARNING >> 24)), INSTALLLOGMODE_USER = (1 << (INSTALLMESSAGE_USER >> 24)), INSTALLLOGMODE_INFO = (1 << (INSTALLMESSAGE_INFO >> 24)), INSTALLLOGMODE_FILESINUSE = (1 << (INSTALLMESSAGE_FILESINUSE >> 24)), INSTALLLOGMODE_RESOLVESOURCE = (1 << (INSTALLMESSAGE_RESOLVESOURCE >> 24)), INSTALLLOGMODE_OUTOFDISKSPACE = (1 << (INSTALLMESSAGE_OUTOFDISKSPACE >> 24)), INSTALLLOGMODE_ACTIONSTART = (1 << (INSTALLMESSAGE_ACTIONSTART >> 24)), INSTALLLOGMODE_ACTIONDATA = (1 << (INSTALLMESSAGE_ACTIONDATA >> 24)), INSTALLLOGMODE_PROGRESS = (1 << (INSTALLMESSAGE_PROGRESS >> 24)), INSTALLLOGMODE_PROPERTYDUMP = (1 << (INSTALLMESSAGE_PROGRESS >> 24)), INSTALLLOGMODE_COMMONDATA = (1 << (INSTALLMESSAGE_COMMONDATA >> 24)), INSTALLLOGMODE_INITIALIZE = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)), INSTALLLOGMODE_VERBOSE = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)), INSTALLLOGMODE_TERMINATE = (1 << (INSTALLMESSAGE_TERMINATE >> 24)), INSTALLLOGMODE_EXTRADEBUG = (1 << (INSTALLMESSAGE_TERMINATE >> 24)), INSTALLLOGMODE_SHOWDIALOG = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 24)), INSTALLLOGMODE_RMFILESINUSE = (1 << (INSTALLMESSAGE_RMFILESINUSE >> 24)), INSTALLLOGMODE_INSTALLSTART = (1 << (INSTALLMESSAGE_INSTALLSTART >> 24)), INSTALLLOGMODE_INSTALLEND = (1 << (INSTALLMESSAGE_INSTALLEND >> 24)), } INSTALLLOGMODE; typedef enum tagINSTALLLOGATTRIBUTES { INSTALLLOGATTRIBUTES_APPEND = 0x00000001, INSTALLLOGATTRIBUTES_FLUSHEACHLINE = 0x00000002 } INSTALLLOGATTRIBUTES; typedef enum tagINSTALLMODE { INSTALLMODE_NODETECTION_ANY = -4, INSTALLMODE_NOSOURCERESOLUTION = -3, INSTALLMODE_NODETECTION = -2, INSTALLMODE_EXISTING = -1, INSTALLMODE_DEFAULT = 0 } INSTALLMODE; typedef enum tagADVERTISEFLAGS { ADVERTISEFLAGS_MACHINEASSIGN = 0, ADVERTISEFLAGS_USERASSIGN = 1 } ADVERTISEFLAGS; typedef enum tagSCRIPTFLAGS { SCRIPTFLAGS_CACHEINFO = 1, SCRIPTFLAGS_SHORTCUTS = 4, SCRIPTFLAGS_MACHINEASSIGN = 8, SCRIPTFLAGS_REGDATA_APPINFO = 0x10, SCRIPTFLAGS_REGDATA_CNFGINFO = 0x20, SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST = 0x40, SCRIPTFLAGS_REGDATA_CLASSINFO = 0x80, SCRIPTFLAGS_REGDATA_EXTENSIONINFO = 0x100, } SCRIPTFLAGS; typedef enum tagINSTALLTYPE { INSTALLTYPE_DEFAULT = 0, INSTALLTYPE_NETWORK_IMAGE = 1, INSTALLTYPE_SINGLE_INSTANCE = 2, } INSTALLTYPE; typedef enum tagMSIINSTALLCONTEXT { MSIINSTALLCONTEXT_FIRSTVISIBLE = 0, MSIINSTALLCONTEXT_NONE = 0, MSIINSTALLCONTEXT_USERMANAGED = 1, MSIINSTALLCONTEXT_USERUNMANAGED = 2, MSIINSTALLCONTEXT_MACHINE = 4, MSIINSTALLCONTEXT_ALL = (MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED | MSIINSTALLCONTEXT_MACHINE), MSIINSTALLCONTEXT_ALLUSERMANAGED= 8, } MSIINSTALLCONTEXT; typedef enum tagMSISOURCETYPE { MSISOURCETYPE_UNKNOWN = __MSABI_LONG(0x00000000), MSISOURCETYPE_NETWORK = __MSABI_LONG(0x00000001), MSISOURCETYPE_URL = __MSABI_LONG(0x00000002), MSISOURCETYPE_MEDIA = __MSABI_LONG(0x00000004) } MSISOURCETYPE; typedef enum tagMSICODE { MSICODE_PRODUCT = __MSABI_LONG(0x00000000), MSICODE_PATCH = __MSABI_LONG(0x40000000) } MSICODE; typedef enum tagINSTALLFEATUREATTRIBUTE { INSTALLFEATUREATTRIBUTE_FAVORLOCAL = 1 << 0, INSTALLFEATUREATTRIBUTE_FAVORSOURCE = 1 << 1, INSTALLFEATUREATTRIBUTE_FOLLOWPARENT = 1 << 2, INSTALLFEATUREATTRIBUTE_FAVORADVERTISE = 1 << 3, INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE = 1 << 4, INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE = 1 << 5 } INSTALLFEATUREATTRIBUTE; typedef struct _MSIFILEHASHINFO { ULONG dwFileHashInfoSize; ULONG dwData[4]; } MSIFILEHASHINFO, *PMSIFILEHASHINFO; typedef enum tagMSIPATCHDATATYPE { MSIPATCH_DATATYPE_PATCHFILE = 0, MSIPATCH_DATATYPE_XMLPATH = 1, MSIPATCH_DATATYPE_XMLBLOB = 2, } MSIPATCHDATATYPE, *PMSIPATCHDATATYPE; typedef struct tagMSIPATCHSEQUENCEINFOA { LPCSTR szPatchData; MSIPATCHDATATYPE ePatchDataType; DWORD dwOrder; UINT uStatus; } MSIPATCHSEQUENCEINFOA, *PMSIPATCHSEQUENCEINFOA; typedef struct tagMSIPATCHSEQUENCEINFOW { LPCWSTR szPatchData; MSIPATCHDATATYPE ePatchDataType; DWORD dwOrder; UINT uStatus; } MSIPATCHSEQUENCEINFOW, *PMSIPATCHSEQUENCEINFOW; #define MAX_FEATURE_CHARS 38 #define ERROR_PATCH_TARGET_NOT_FOUND 1642 /* Strings defined in msi.h */ /* Advertised Information */ #define INSTALLPROPERTY_PACKAGENAMEA "PackageName" static const WCHAR INSTALLPROPERTY_PACKAGENAMEW[] = {'P','a','c','k','a','g','e','N','a','m','e',0}; #define INSTALLPROPERTY_PACKAGENAME WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGENAME) #define INSTALLPROPERTY_TRANSFORMSA "Transforms" static const WCHAR INSTALLPROPERTY_TRANSFORMSW[] = {'T','r','a','n','s','f','o','r','m','s',0}; #define INSTALLPROPERTY_TRANSFORMS WINELIB_NAME_AW(INSTALLPROPERTY_TRANSFORMS) #define INSTALLPROPERTY_LANGUAGEA "Language" static const WCHAR INSTALLPROPERTY_LANGUAGEW[] = {'L','a','n','g','u','a','g','e',0}; #define INSTALLPROPERTY_LANGUAGE WINELIB_NAME_AW(INSTALLPROPERTY_LANGUAGE) #define INSTALLPROPERTY_PRODUCTNAMEA "ProductName" static const WCHAR INSTALLPROPERTY_PRODUCTNAMEW[] = {'P','r','o','d','u','c','t','N','a','m','e',0}; #define INSTALLPROPERTY_PRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTNAME) #define INSTALLPROPERTY_ASSIGNMENTTYPEA "AssignmentType" static const WCHAR INSTALLPROPERTY_ASSIGNMENTTYPEW[] = {'A','s','s','i','g','n','m','e','n','t','T','y','p','e',0}; #define INSTALLPROPERTY_ASSIGNMENTTYPE WINELIB_NAME_AW(INSTALLPROPERTY_ASSIGNMENTTYPE) #define INSTALLPROPERTY_PACKAGECODEA "PackageCode" static const WCHAR INSTALLPROPERTY_PACKAGECODEW[] = {'P','a','c','k','a','g','e','C','o','d','e',0}; #define INSTALLPROPERTY_PACKAGECODE WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGECODE) #define INSTALLPROPERTY_VERSIONA "Version" static const WCHAR INSTALLPROPERTY_VERSIONW[]= {'V','e','r','s','i','o','n',0}; #define INSTALLPROPERTY_VERSION WINELIB_NAME_AW(INSTALLPROPERTY_VERSION) /* MSI version 1.1 and above */ #define INSTALLPROPERTY_PRODUCTICONA "ProductIcon" static const WCHAR INSTALLPROPERTY_PRODUCTICONW[] = {'P','r','o','d','u','c','t','I','c','o','n',0}; #define INSTALLPROPERTY_PRODUCTICON WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTICON) /* MSI version 1.5 and above */ #define INSTALLPROPERTY_INSTANCETYPEA "InstanceType" static const WCHAR INSTALLPROPERTY_INSTANCETYPEW[] = {'I','n','s','t','a','n','c','e','T','y','p','e',0}; #define INSTALLPROPERTY_INSTANCETYPE WINELIB_NAME_AW(INSTALLPROPERTY_INSTANCETYPE) /* MSI version 3 and above */ #define INSTALLPROPERTY_AUTHORIZED_LUA_APPA "AuthorizedLUAApp" static const WCHAR INSTALLPROPERTY_AUTHORIZED_LUA_APPW[] = {'A','u','t','h','o','r','i','z','e','d','L','U','A','A','p','p',0}; #define INSTALLPROPERTY_AUTHORIZED_LUA_APP WINELIB_NAME_AW(INSTALLPROPERTY_AUTHORIZED_LUA_APP) /* Installed Information */ #define INSTALLPROPERTY_INSTALLEDPRODUCTNAMEA "InstalledProductName" static 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}; #define INSTALLPROPERTY_INSTALLEDPRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLEDPRODUCTNAME) #define INSTALLPROPERTY_VERSIONSTRINGA "VersionString" static const WCHAR INSTALLPROPERTY_VERSIONSTRINGW[] = {'V','e','r','s','i','o','n','S','t','r','i','n','g',0}; #define INSTALLPROPERTY_VERSIONSTRING WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONSTRING) #define INSTALLPROPERTY_HELPLINKA "HelpLink" static const WCHAR INSTALLPROPERTY_HELPLINKW[] = {'H','e','l','p','L','i','n','k',0}; #define INSTALLPROPERTY_HELPLINK WINELIB_NAME_AW(INSTALLPROPERTY_HELPLINK) #define INSTALLPROPERTY_HELPTELEPHONEA "HelpTelephone" static const WCHAR INSTALLPROPERTY_HELPTELEPHONEW[] = {'H','e','l','p','T','e','l','e','p','h','o','n','e',0}; #define INSTALLPROPERTY_HELPTELEPHONE WINELIB_NAME_AW(INSTALLPROPERTY_HELPTELEPHONE) #define INSTALLPROPERTY_INSTALLLOCATIONA "InstallLocation" static const WCHAR INSTALLPROPERTY_INSTALLLOCATIONW[] = {'I','n','s','t','a','l','l','L','o','c','a','t','i','o','n',0}; #define INSTALLPROPERTY_INSTALLLOCATION WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLLOCATION) #define INSTALLPROPERTY_INSTALLSOURCEA "InstallSource" static const WCHAR INSTALLPROPERTY_INSTALLSOURCEW[] = {'I','n','s','t','a','l','l','S','o','u','r','c','e',0}; #define INSTALLPROPERTY_INSTALLSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLSOURCE) #define INSTALLPROPERTY_INSTALLDATEA "InstallDate" static const WCHAR INSTALLPROPERTY_INSTALLDATEW[] = {'I','n','s','t','a','l','l','D','a','t','e',0}; #define INSTALLPROPERTY_INSTALLDATE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLDATE) #define INSTALLPROPERTY_PUBLISHERA "Publisher" static const WCHAR INSTALLPROPERTY_PUBLISHERW[] ={'P','u','b','l','i','s','h','e','r',0}; #define INSTALLPROPERTY_PUBLISHER WINELIB_NAME_AW(INSTALLPROPERTY_PUBLISHER) #define INSTALLPROPERTY_LOCALPACKAGEA "LocalPackage" static const WCHAR INSTALLPROPERTY_LOCALPACKAGEW[] = {'L','o','c','a','l','P','a','c','k','a','g','e',0}; #define INSTALLPROPERTY_LOCALPACKAGE WINELIB_NAME_AW(INSTALLPROPERTY_LOCALPACKAGE) #define INSTALLPROPERTY_URLINFOABOUTA "URLInfoAbout" static const WCHAR INSTALLPROPERTY_URLINFOABOUTW[] = {'U','R','L','I','n','f','o','A','b','o','u','t',0}; #define INSTALLPROPERTY_URLINFOABOUT WINELIB_NAME_AW(INSTALLPROPERTY_URLINFOABOUT) #define INSTALLPROPERTY_URLUPDATEINFOA "URLUpdateInfo" static const WCHAR INSTALLPROPERTY_URLUPDATEINFOW[] = {'U','R','L','U','p','d','a','t','e','I','n','f','o',0}; #define INSTALLPROPERTY_URLUPDATEINFO WINELIB_NAME_AW(INSTALLPROPERTY_URLUPDATEINFO) #define INSTALLPROPERTY_VERSIONMINORA "VersionMinor" static const WCHAR INSTALLPROPERTY_VERSIONMINORW[] = {'V','e','r','s','i','o','n','M','i','n','o','r',0}; #define INSTALLPROPERTY_VERSIONMINOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMINOR) #define INSTALLPROPERTY_VERSIONMAJORA "VersionMajor" static const WCHAR INSTALLPROPERTY_VERSIONMAJORW[] = {'V','e','r','s','i','o','n','M','a','j','o','r',0}; #define INSTALLPROPERTY_VERSIONMAJOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMAJOR) #define INSTALLPROPERTY_PRODUCTIDA "ProductID" static const WCHAR INSTALLPROPERTY_PRODUCTIDW[] = {'P','r','o','d','u','c','t','I','D',0}; #define INSTALLPROPERTY_PRODUCTID WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTID) #define INSTALLPROPERTY_REGCOMPANYA "RegCompany" static const WCHAR INSTALLPROPERTY_REGCOMPANYW[] = {'R','e','g','C','o','m','p','a','n','y',0}; #define INSTALLPROPERTY_REGCOMPANY WINELIB_NAME_AW(INSTALLPROPERTY_REGCOMPANY) #define INSTALLPROPERTY_REGOWNERA "RegOwner" static const WCHAR INSTALLPROPERTY_REGOWNERW[] = {'R','e','g','O','w','n','e','r',0}; #define INSTALLPROPERTY_REGOWNER WINELIB_NAME_AW(INSTALLPROPERTY_REGOWNER) /* MSI Version 3.0 and greater */ #define INSTALLPROPERTY_UNINSTALLABLEA "Uninstallable" static const WCHAR INSTALLPROPERTY_UNINSTALLABLEW[] = {'U','n','i','n','s','t','a','l','l','a','b','l','e',0}; #define INSTALLPROPERTY_UNINSTALLABLE WINELIB_NAME_AW(INSTALLPROPERTY_UNINSTALLABLE) #define INSTALLPROPERTY_PRODUCTSTATEA "State" static const WCHAR INSTALLPROPERTY_PRODUCTSTATEW[] = {'S','t','a','t','e',0}; #define INSTALLPROPERTY_PRODUCTSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTSTATE) #define INSTALLPROPERTY_PATCHSTATEA "State" static const WCHAR INSTALLPROPERTY_PATCHSTATEW[] ={'S','t','a','t','e',0}; #define INSTALLPROPERTY_PATCHSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHSTATE) #define INSTALLPROPERTY_PATCHTYPEA "PatchType" static const WCHAR INSTALLPROPERTY_PATCHTYPEW[] = {'P','a','t','c','h','T','y','p','e',0}; #define INSTALLPROPERTY_PATCHTYPE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHTYPE) #define INSTALLPROPERTY_LUAENABLEDA "LUAEnabled" static const WCHAR INSTALLPROPERTY_LUAENABLEDW[] = {'L','U','A','E','n','a','b','l','e','d',0}; #define INSTALLPROPERTY_LUAENABLED WINELIB_NAME_AW(INSTALLPROPERTY_LUAENABLED) #define INSTALLPROPERTY_DISPLAYNAMEA "DisplayName" static const WCHAR INSTALLPROPERTY_DISPLAYNAMEW[] = {'D','i','s','p','l','a','y','N','a','m','e',0}; #define INSTALLPROPERTY_DISPLAYNAME WINELIB_NAME_AW(INSTALLPROPERTY_DISPLAYNAME) #define INSTALLPROPERTY_MOREINFOURLA "MoreInfoURL" static const WCHAR INSTALLPROPERTY_MOREINFOURLW[] = {'M','o','r','e','I','n','f','o','U','R','L',0}; #define INSTALLPROPERTY_MOREINFOURL WINELIB_NAME_AW(INSTALLPROPERTY_MOREINFOURL) /* Source List Info */ #define INSTALLPROPERTY_LASTUSEDSOURCEA "LastUsedSource" static const WCHAR INSTALLPROPERTY_LASTUSEDSOURCEW[] = {'L','a','s','t','U','s','e','d','S','o','u','r','c','e',0}; #define INSTALLPROPERTY_LASTUSEDSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDSOURCE) #define INSTALLPROPERTY_LASTUSEDTYPEA "LastUsedType" static const WCHAR INSTALLPROPERTY_LASTUSEDTYPEW[] = {'L','a','s','t','U','s','e','d','T','y','p','e',0}; #define INSTALLPROPERTY_LASTUSEDTYPE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDTYPE) #define INSTALLPROPERTY_MEDIAPACKAGEPATHA "MediaPackagePath" static const WCHAR INSTALLPROPERTY_MEDIAPACKAGEPATHW[] = {'M','e','d','i','a','P','a','c','k','a','g','e','P','a','t','h',0}; #define INSTALLPROPERTY_MEDIAPACKAGEPATH WINELIB_NAME_AW(INSTALLPROPERTY_MEDIAPACKAGEPATH) #define INSTALLPROPERTY_DISKPROMPTA "DiskPrompt" static const WCHAR INSTALLPROPERTY_DISKPROMPTW[] = {'D','i','s','k','P','r','o','m','p','t',0}; #define INSTALLPROPERTY_DISKPROMPT WINELIB_NAME_AW(INSTALLPROPERTY_DISKPROMPT) typedef INT (CALLBACK *INSTALLUI_HANDLERA)(LPVOID, UINT, LPCSTR); typedef INT (CALLBACK *INSTALLUI_HANDLERW)(LPVOID, UINT, LPCWSTR); typedef INT (CALLBACK *INSTALLUI_HANDLER_RECORD)(LPVOID, UINT, MSIHANDLE); typedef INSTALLUI_HANDLER_RECORD* PINSTALLUI_HANDLER_RECORD; UINT WINAPI MsiAdvertiseProductA(LPCSTR, LPCSTR, LPCSTR, LANGID); UINT WINAPI MsiAdvertiseProductW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID); #define MsiAdvertiseProduct WINELIB_NAME_AW(MsiAdvertiseProduct) UINT WINAPI MsiAdvertiseProductExA(LPCSTR, LPCSTR, LPCSTR, LANGID, DWORD, DWORD); UINT WINAPI MsiAdvertiseProductExW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID, DWORD, DWORD); #define MsiAdvertiseProductEx WINELIB_NAME_AW(MsiAdvertiseProductEx) UINT WINAPI MsiInstallProductA(LPCSTR, LPCSTR); UINT WINAPI MsiInstallProductW(LPCWSTR, LPCWSTR); #define MsiInstallProduct WINELIB_NAME_AW(MsiInstallProduct) UINT WINAPI MsiReinstallProductA(LPCSTR, DWORD); UINT WINAPI MsiReinstallProductW(LPCWSTR, DWORD); #define MsiReinstallProduct WINELIB_NAME_AW(MsiReinstallProduct) UINT WINAPI MsiApplyPatchA(LPCSTR, LPCSTR, INSTALLTYPE, LPCSTR); UINT WINAPI MsiApplyPatchW(LPCWSTR, LPCWSTR, INSTALLTYPE, LPCWSTR); #define MsiApplyPatch WINELIB_NAME_AW(MsiApplyPatch) UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE, LPCSTR, DWORD, INSTALLSTATE, LPSTR, LPDWORD, LPINT, LPINT); UINT WINAPI MsiEnumComponentCostsW(MSIHANDLE, LPCWSTR, DWORD, INSTALLSTATE, LPWSTR, LPDWORD, LPINT, LPINT); #define MsiEnumComponentCosts WINELIB_NAME_AW(MsiEnumComponentCosts) UINT WINAPI MsiEnumProductsA(DWORD, LPSTR); UINT WINAPI MsiEnumProductsW(DWORD, LPWSTR); #define MsiEnumProducts WINELIB_NAME_AW(MsiEnumProducts) UINT WINAPI MsiEnumProductsExA(LPCSTR, LPCSTR, DWORD, DWORD, CHAR[39], MSIINSTALLCONTEXT*, LPSTR, LPDWORD); UINT WINAPI MsiEnumProductsExW(LPCWSTR, LPCWSTR, DWORD, DWORD, WCHAR[39], MSIINSTALLCONTEXT*, LPWSTR, LPDWORD); #define MsiEnumProductsEx WINELIB_NAME_AW(MsiEnumProductsEx) UINT WINAPI MsiEnumFeaturesA(LPCSTR, DWORD, LPSTR, LPSTR); UINT WINAPI MsiEnumFeaturesW(LPCWSTR, DWORD, LPWSTR, LPWSTR); #define MsiEnumFeatures WINELIB_NAME_AW(MsiEnumFeatures) UINT WINAPI MsiEnumComponentsA(DWORD, LPSTR); UINT WINAPI MsiEnumComponentsW(DWORD, LPWSTR); #define MsiEnumComponents WINELIB_NAME_AW(MsiEnumComponents) UINT WINAPI MsiEnumComponentsExA(LPCSTR, DWORD, DWORD, CHAR[39], MSIINSTALLCONTEXT *, LPSTR, LPDWORD); UINT WINAPI MsiEnumComponentsExW(LPCWSTR, DWORD, DWORD, WCHAR[39], MSIINSTALLCONTEXT *, LPWSTR, LPDWORD); #define MsiEnumComponentsEx WINELIB_NAME_AW(MsiEnumComponentsEx) UINT WINAPI MsiEnumClientsA(LPCSTR, DWORD, LPSTR); UINT WINAPI MsiEnumClientsW(LPCWSTR, DWORD, LPWSTR); #define MsiEnumClients WINELIB_NAME_AW(MsiEnumClients) UINT WINAPI MsiEnumClientsExA(LPCSTR, LPCSTR, DWORD, DWORD, CHAR*, MSIINSTALLCONTEXT*, LPSTR, LPDWORD); UINT WINAPI MsiEnumClientsExW(LPCWSTR, LPCWSTR, DWORD, DWORD, WCHAR*, MSIINSTALLCONTEXT*, LPWSTR, LPDWORD); #define MsiEnumClientsEx WINELIB_NAME_AW(MsiEnumClientsEx) UINT WINAPI MsiOpenPackageA(LPCSTR, MSIHANDLE*); UINT WINAPI MsiOpenPackageW(LPCWSTR, MSIHANDLE*); #define MsiOpenPackage WINELIB_NAME_AW(MsiOpenPackage) UINT WINAPI MsiOpenPackageExA(LPCSTR, DWORD, MSIHANDLE*); UINT WINAPI MsiOpenPackageExW(LPCWSTR, DWORD, MSIHANDLE*); #define MsiOpenPackageEx WINELIB_NAME_AW(MsiOpenPackageEx) UINT WINAPI MsiOpenProductA(LPCSTR, MSIHANDLE*); UINT WINAPI MsiOpenProductW(LPCWSTR, MSIHANDLE*); #define MsiOpenProduct WINELIB_NAME_AW(MsiOpenProduct) UINT WINAPI MsiGetProductPropertyA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD); UINT WINAPI MsiGetProductPropertyW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD); #define MsiGetProductProperty WINELIB_NAME_AW(MsiGetProductProperty) UINT WINAPI MsiVerifyPackageA(LPCSTR); UINT WINAPI MsiVerifyPackageW(LPCWSTR); #define MsiVerifyPackage WINELIB_NAME_AW(MsiVerifyPackage) UINT WINAPI MsiQueryComponentStateA(LPCSTR,LPCSTR,MSIINSTALLCONTEXT,LPCSTR,INSTALLSTATE*); UINT WINAPI MsiQueryComponentStateW(LPCWSTR,LPCWSTR,MSIINSTALLCONTEXT,LPCWSTR,INSTALLSTATE*); #define MsiQueryComponentState WINELIB_NAME_AW(MsiQueryComponentState) INSTALLSTATE WINAPI MsiQueryProductStateA(LPCSTR); INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR); #define MsiQueryProductState WINELIB_NAME_AW(MsiQueryProductState) UINT WINAPI MsiConfigureProductA(LPCSTR, int, INSTALLSTATE); UINT WINAPI MsiConfigureProductW(LPCWSTR, int, INSTALLSTATE); #define MsiConfigureProduct WINELIB_NAME_AW(MsiConfigureProduct) UINT WINAPI MsiConfigureProductExA(LPCSTR, int, INSTALLSTATE, LPCSTR); UINT WINAPI MsiConfigureProductExW(LPCWSTR, int, INSTALLSTATE, LPCWSTR); #define MsiConfigureProductEx WINELIB_NAME_AW(MsiConfigureProductEx) UINT WINAPI MsiConfigureFeatureA(LPCSTR, LPCSTR, INSTALLSTATE); UINT WINAPI MsiConfigureFeatureW(LPCWSTR, LPCWSTR, INSTALLSTATE); #define MsiConfigureFeature WINELIB_NAME_AW(MsiConfigureFeature) UINT WINAPI MsiGetProductCodeA(LPCSTR, LPSTR); UINT WINAPI MsiGetProductCodeW(LPCWSTR, LPWSTR); #define MsiGetProductCode WINELIB_NAME_AW(MsiGetProductCode) UINT WINAPI MsiGetProductInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD); UINT WINAPI MsiGetProductInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD); #define MsiGetProductInfo WINELIB_NAME_AW(MsiGetProductInfo) UINT WINAPI MsiGetProductInfoExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD); UINT WINAPI MsiGetProductInfoExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD); #define MsiGetProductInfoEx WINELIB_NAME_AW(MsiGetProductInfoEx) UINT WINAPI MsiGetPatchFileListA(LPCSTR, LPCSTR, LPDWORD, MSIHANDLE**); UINT WINAPI MsiGetPatchFileListW(LPCWSTR, LPCWSTR, LPDWORD, MSIHANDLE**); #define MsiGetPatchFileList WINELIB_NAME_AW(MsiGetPatchFileList) UINT WINAPI MsiGetPatchInfoExA(LPCSTR, LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD); UINT WINAPI MsiGetPatchInfoExW(LPCWSTR, LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD); #define MsiGetPatchInfoEx WINELIB_NAME_AW(MsiGetPatchInfoEx) UINT WINAPI MsiGetPatchInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD); UINT WINAPI MsiGetPatchInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD); #define MsiGetPatchInfo WINELIB_NAME_AW(MsiGetPatchInfo) UINT WINAPI MsiEnableLogA(DWORD, LPCSTR, DWORD); UINT WINAPI MsiEnableLogW(DWORD, LPCWSTR, DWORD); #define MsiEnableLog WINELIB_NAME_AW(MsiEnableLog) INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(INSTALLUI_HANDLERA, DWORD, LPVOID); INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(INSTALLUI_HANDLERW, DWORD, LPVOID); #define MsiSetExternalUI WINELIB_NAME_AW(MsiSetExternalUI) INSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR, LPCSTR, LPSTR, LPDWORD); INSTALLSTATE WINAPI MsiGetComponentPathW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD); #define MsiGetComponentPath WINELIB_NAME_AW(MsiGetComponentPath) INSTALLSTATE WINAPI MsiGetComponentPathExA(LPCSTR, LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPSTR, LPDWORD); INSTALLSTATE WINAPI MsiGetComponentPathExW(LPCWSTR, LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPWSTR, LPDWORD); #define MsiGetComponentPathEx WINELIB_NAME_AW(MsiGetComponentPathEx) INSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR, LPCSTR); INSTALLSTATE WINAPI MsiQueryFeatureStateW(LPCWSTR, LPCWSTR); #define MsiQueryFeatureState WINELIB_NAME_AW(MsiQueryFeatureState) UINT WINAPI MsiQueryFeatureStateExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE*); UINT WINAPI MsiQueryFeatureStateExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, INSTALLSTATE*); #define MsiQueryFeatureStateEx WINELIB_NAME_AW(MsiQueryFeatureStateEx) UINT WINAPI MsiGetFeatureInfoA(MSIHANDLE, LPCSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD); UINT WINAPI MsiGetFeatureInfoW(MSIHANDLE, LPCWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD); #define MsiGetFeatureInfo WINELIB_NAME_AW(MsiGetFeatureInfo) UINT WINAPI MsiGetFeatureUsageA(LPCSTR, LPCSTR, LPDWORD, LPWORD); UINT WINAPI MsiGetFeatureUsageW(LPCWSTR, LPCWSTR, LPDWORD, LPWORD); #define MsiGetFeatureUsage WINELIB_NAME_AW(MsiGetFeatureUsage) UINT WINAPI MsiEnumRelatedProductsA(LPCSTR, DWORD, DWORD, LPSTR); UINT WINAPI MsiEnumRelatedProductsW(LPCWSTR, DWORD, DWORD, LPWSTR); #define MsiEnumRelatedProducts WINELIB_NAME_AW(MsiEnumRelatedProducts) UINT WINAPI MsiProvideAssemblyA(LPCSTR, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD); UINT WINAPI MsiProvideAssemblyW(LPCWSTR, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD); #define MsiProvideAssembly WINELIB_NAME_AW(MsiProvideAssembly) UINT WINAPI MsiEnumComponentQualifiersA(LPCSTR, DWORD, LPSTR, LPDWORD, LPSTR, LPDWORD); UINT WINAPI MsiEnumComponentQualifiersW(LPCWSTR, DWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD); #define MsiEnumComponentQualifiers WINELIB_NAME_AW(MsiEnumComponentQualifiers) UINT WINAPI MsiGetFileVersionA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD); UINT WINAPI MsiGetFileVersionW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD); #define MsiGetFileVersion WINELIB_NAME_AW(MsiGetFileVersion) UINT WINAPI MsiMessageBoxA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD); UINT WINAPI MsiMessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD); #define MsiMessageBox WINELIB_NAME_AW(MsiMessageBox) UINT WINAPI MsiProvideQualifiedComponentExA(LPCSTR, LPCSTR, DWORD, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD); UINT WINAPI MsiProvideQualifiedComponentExW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD); #define MsiProvideQualifiedComponentEx WINELIB_NAME_AW(MsiProvideQualifiedComponentEx) UINT WINAPI MsiProvideQualifiedComponentA(LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD); UINT WINAPI MsiProvideQualifiedComponentW(LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD); #define MsiProvideQualifiedComponent WINELIB_NAME_AW(MsiProvideQualifiedComponent) USERINFOSTATE WINAPI MsiGetUserInfoA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD); USERINFOSTATE WINAPI MsiGetUserInfoW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD); #define MsiGetUserInfo WINELIB_NAME_AW(MsiGetUserInfo) UINT WINAPI MsiProvidedComponentA(LPCSTR, LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD); UINT WINAPI MsiProvideComponentW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD); #define MsiProvideComponent WINELIB_NAME_AW(MsiProvideComponent) UINT WINAPI MsiCollectUserInfoA(LPCSTR); UINT WINAPI MsiCollectUserInfoW(LPCWSTR); #define MsiCollectUserInfo WINELIB_NAME_AW(MsiCollectUserInfo) UINT WINAPI MsiReinstallFeatureA(LPCSTR, LPCSTR, DWORD); UINT WINAPI MsiReinstallFeatureW(LPCWSTR, LPCWSTR, DWORD); #define MsiReinstallFeature WINELIB_NAME_AW(MsiReinstallFeature) UINT WINAPI MsiGetShortcutTargetA(LPCSTR, LPSTR, LPSTR, LPSTR); UINT WINAPI MsiGetShortcutTargetW(LPCWSTR, LPWSTR, LPWSTR, LPWSTR); #define MsiGetShortcutTarget WINELIB_NAME_AW(MsiGetShortcutTarget) INSTALLSTATE WINAPI MsiUseFeatureW(LPCWSTR, LPCWSTR); INSTALLSTATE WINAPI MsiUseFeatureA(LPCSTR, LPCSTR); #define MsiUseFeature WINELIB_NAME_AW(MsiUseFeature) INSTALLSTATE WINAPI MsiUseFeatureExW(LPCWSTR, LPCWSTR, DWORD, DWORD); INSTALLSTATE WINAPI MsiUseFeatureExA(LPCSTR, LPCSTR, DWORD, DWORD); #define MsiUseFeatureEx WINELIB_NAME_AW(MsiUseFeatureEx) HRESULT WINAPI MsiGetFileSignatureInformationA(LPCSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD); HRESULT WINAPI MsiGetFileSignatureInformationW(LPCWSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD); #define MsiGetFileSignatureInformation WINELIB_NAME_AW(MsiGetFileSignatureInformation) INSTALLSTATE WINAPI MsiLocateComponentA(LPCSTR, LPSTR, LPDWORD); INSTALLSTATE WINAPI MsiLocateComponentW(LPCWSTR, LPWSTR, LPDWORD); #define MsiLocateComponent WINELIB_NAME_AW(MsiLocateComponent) UINT WINAPI MsiSourceListAddSourceA(LPCSTR, LPCSTR, DWORD, LPCSTR); UINT WINAPI MsiSourceListAddSourceW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR); #define MsiSourceListAddSource WINELIB_NAME_AW(MsiSourceListAddSource) UINT WINAPI MsiSourceListEnumMediaDisksA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD); UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD); #define MsiSourceListEnumMediaDisks WINELIB_NAME_AW(MsiSourceListEnumMediaDisks) UINT WINAPI MsiSourceListEnumSourcesA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPSTR, LPDWORD); UINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPWSTR, LPDWORD); #define MsiSourceListEnumSources WINELIB_NAME_AW(MsiSourceListEnumSources) UINT WINAPI MsiSourceListClearSourceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR); UINT WINAPI MsiSourceListClearSourceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR); #define MsiSourceListClearSource WINELIB_NAME_AW(MsiSourceListClearSource) UINT WINAPI MsiSourceListClearAllA(LPCSTR, LPCSTR, DWORD); UINT WINAPI MsiSourceListClearAllW(LPCWSTR, LPCWSTR, DWORD); #define MsiSourceListClearAll WINELIB_NAME_AW(MsiSourceListClearAll) UINT WINAPI MsiSourceListGetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD); UINT WINAPI MsiSourceListGetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPWSTR, LPDWORD); #define MsiSourceListGetInfo WINELIB_NAME_AW(MsiSourceListGetInfo) UINT WINAPI MsiSourceListSetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPCSTR); UINT WINAPI MsiSourceListSetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPCWSTR); #define MsiSourceListSetInfo WINELIB_NAME_AW(MsiSourceListSetInfo) UINT WINAPI MsiSourceListAddSourceExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, DWORD); UINT WINAPI MsiSourceListAddSourceExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, DWORD); #define MsiSourceListAddSourceEx WINELIB_NAME_AW(MsiSourceListAddSourceEx) UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCSTR, LPCSTR); UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCWSTR, LPCWSTR); #define MsiSourceListAddMediaDisk WINELIB_NAME_AW(MsiSourceListAddMediaDisk) UINT WINAPI MsiEnumPatchesA(LPCSTR, DWORD, LPSTR, LPSTR, LPDWORD); UINT WINAPI MsiEnumPatchesW(LPCWSTR, DWORD, LPWSTR, LPWSTR, LPDWORD); #define MsiEnumPatches WINELIB_NAME_AW(MsiEnumPatches) UINT WINAPI MsiEnumPatchesExA(LPCSTR, LPCSTR, DWORD, DWORD, DWORD, LPSTR, LPSTR, MSIINSTALLCONTEXT*, LPSTR, LPDWORD); UINT WINAPI MsiEnumPatchesExW(LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, LPWSTR, LPWSTR, MSIINSTALLCONTEXT*, LPWSTR, LPDWORD); #define MsiEnumPatchesEx WINELIB_NAME_AW(MsiEnumPatchesEx) UINT WINAPI MsiGetFileHashA(LPCSTR, DWORD, PMSIFILEHASHINFO); UINT WINAPI MsiGetFileHashW(LPCWSTR, DWORD, PMSIFILEHASHINFO); #define MsiGetFileHash WINELIB_NAME_AW(MsiGetFileHash) UINT WINAPI MsiAdvertiseScriptA(LPCSTR, DWORD, PHKEY, BOOL); UINT WINAPI MsiAdvertiseScriptW(LPCWSTR, DWORD, PHKEY, BOOL); #define MsiAdvertiseScript WINELIB_NAME_AW(MsiAdvertiseScript) UINT WINAPI MsiIsProductElevatedA(LPCSTR, BOOL *); UINT WINAPI MsiIsProductElevatedW(LPCWSTR, BOOL *); #define MsiIsProductElevated WINELIB_NAME_AW(MsiIsProductElevated) UINT WINAPI MsiDatabaseMergeA(MSIHANDLE, MSIHANDLE, LPCSTR); UINT WINAPI MsiDatabaseMergeW(MSIHANDLE, MSIHANDLE, LPCWSTR); #define MsiDatabaseMerge WINELIB_NAME_AW(MsiDatabaseMerge) UINT WINAPI MsiInstallMissingComponentA(LPCSTR, LPCSTR, INSTALLSTATE); UINT WINAPI MsiInstallMissingComponentW(LPCWSTR, LPCWSTR, INSTALLSTATE); #define MsiInstallMissingComponent WINELIB_NAME_AW(MsiInstallMissingComponent) UINT WINAPI MsiDetermineApplicablePatchesA(LPCSTR, DWORD, PMSIPATCHSEQUENCEINFOA); UINT WINAPI MsiDetermineApplicablePatchesW(LPCWSTR, DWORD, PMSIPATCHSEQUENCEINFOW); #define MsiDetermineApplicablePatches WINELIB_NAME_AW(MsiDetermineApplicablePatches) UINT WINAPI MsiDeterminePatchSequenceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOA); UINT WINAPI MsiDeterminePatchSequenceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOW); #define MsiDeterminePatchSequence WINELIB_NAME_AW(MsiDeterminePatchSequence) UINT WINAPI MsiApplyMultiplePatchesA(LPCSTR, LPCSTR, LPCSTR); UINT WINAPI MsiApplyMultiplePatchesW(LPCWSTR, LPCWSTR, LPCWSTR); #define MsiApplyMultiplePatches WINELIB_NAME_AW(MsiApplyMultiplePatches) UINT WINAPI MsiBeginTransactionA(LPCSTR, DWORD, MSIHANDLE *, HANDLE *); UINT WINAPI MsiBeginTransactionW(LPCWSTR, DWORD, MSIHANDLE *, HANDLE *); #define MsiBeginTransaction WINELIB_NAME_AW(MsiBeginTransaction) UINT WINAPI MsiJoinTransaction(MSIHANDLE, DWORD, HANDLE *); UINT WINAPI MsiEndTransaction(DWORD); /* Non Unicode */ UINT WINAPI MsiCloseHandle(MSIHANDLE); UINT WINAPI MsiCloseAllHandles(void); INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL, HWND*); UINT WINAPI MsiSetExternalUIRecord(INSTALLUI_HANDLER_RECORD, DWORD, LPVOID, PINSTALLUI_HANDLER_RECORD); #ifdef __cplusplus } #endif #endif /* __WINE_MSI_H */ ================================================ FILE: wine/windows/msidefs.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSIDEFS_H #define __WINE_MSIDEFS_H enum msidbUpgradeAttributes { msidbUpgradeAttributesMigrateFeatures = 0x0000001, msidbUpgradeAttributesOnlyDetect = 0x00000002, msidbUpgradeAttributesIgnoreRemoveFailure = 0x00000004, msidbUpgradeAttributesVersionMinInclusive = 0x00000100, msidbUpgradeAttributesVersionMaxInclusive = 0x00000200, msidbUpgradeAttributesLanguagesExclusive = 0x00000400 }; enum msidbFileAttributes { msidbFileAttributesReadOnly = 0x00000001, msidbFileAttributesHidden = 0x00000002, msidbFileAttributesSystem = 0x00000004, msidbFileAttributesVital = 0x00000200, msidbFileAttributesChecksum = 0x00000400, msidbFileAttributesPatchAdded = 0x00001000, msidbFileAttributesNoncompressed = 0x00002000, msidbFileAttributesCompressed = 0x00004000 }; enum msidbPatchAttributes { msidbPatchAttributesNonVital = 0x00000001 }; enum msidbDialogAttributes { msidbDialogAttributesVisible = 0x00000001, msidbDialogAttributesModal = 0x00000002, msidbDialogAttributesMinimize = 0x00000004, msidbDialogAttributesSysModal = 0x00000008, msidbDialogAttributesKeepModeless = 0x00000010, msidbDialogAttributesTrackDiskSpace = 0x00000020, msidbDialogAttributesUseCustomPalette = 0x00000040, msidbDialogAttributesRTLRO = 0x00000080, msidbDialogAttributesRightAligned = 0x00000100, msidbDialogAttributesLeftScroll = 0x00000200, msidbDialogAttributesBidi = 0x00000380, msidbDialogAttributesError = 0x00010000 }; enum msidbControlAttributes { msidbControlAttributesVisible = 0x00000001, msidbControlAttributesEnabled = 0x00000002, msidbControlAttributesSunken = 0x00000004, msidbControlAttributesIndirect = 0x00000008, msidbControlAttributesInteger = 0x00000010, msidbControlAttributesRTLRO = 0x00000020, msidbControlAttributesRightAligned = 0x00000040, msidbControlAttributesLeftScroll = 0x00000080, msidbControlAttributesBiDi = 0x000000c0, msidbControlAttributesTransparent = 0x00010000, msidbControlAttributesNoPrefix = 0x00020000, msidbControlAttributesNoWrap = 0x00040000, msidbControlAttributesFormatSize = 0x00080000, msidbControlAttributesUsersLanguage = 0x00100000, msidbControlAttributesMultiline = 0x00010000, msidbControlAttributesPasswordInput = 0x00200000, msidbControlAttributesProgress95 = 0x00010000, msidbControlAttributesRemovableVolume = 0x00010000, msidbControlAttributesFixedVolume = 0x00020000, msidbControlAttributesRemoteVolume = 0x00040000, msidbControlAttributesCDROMVolume = 0x00080000, msidbControlAttributesRAMdiskVolume = 0x00100000, msidbControlAttributesFloppyVolume = 0x00200000, msidbControlShowRollbackCost = 0x00400000, msidbControlAttributesSorted = 0x00010000, msidbControlAttributesComboList = 0x00020000, msidbControlAttributesImageHandle = 0x00010000, msidbControlAttributesPushLike = 0x00020000, msidbControlAttributesBitmap = 0x00040000, msidbControlAttributesIcon = 0x00080000, msidbControlAttributesFixedSize = 0x00100000, msidbControlAttributesIconSize16 = 0x00200000, msidbControlAttributesIconSize32 = 0x00400000, msidbControlAttributesIconSize48 = 0x00600000, msidbControlAttributesHasBorder = 0x01000000, }; enum msidbTextStyleStyleBits { msidbTextStyleStyleBitsBold = 0x00000001, msidbTextStyleStyleBitsItalic = 0x00000002, msidbTextStyleStyleBitsUnderline = 0x00000004, msidbTextStyleStyleBitsStrike = 0x00000008, }; enum msidbCustomActionType { msidbCustomActionTypeDll = 0x00000001, msidbCustomActionTypeExe = 0x00000002, msidbCustomActionTypeTextData = 0x00000003, msidbCustomActionTypeJScript = 0x00000005, msidbCustomActionTypeVBScript = 0x00000006, msidbCustomActionTypeInstall = 0x00000007, msidbCustomActionTypeBinaryData = 0x00000000, msidbCustomActionTypeSourceFile = 0x00000010, msidbCustomActionTypeDirectory = 0x00000020, msidbCustomActionTypeProperty = 0x00000030, msidbCustomActionTypeContinue = 0x00000040, msidbCustomActionTypeAsync = 0x00000080, msidbCustomActionTypeFirstSequence = 0x00000100, msidbCustomActionTypeOncePerProcess = 0x00000200, msidbCustomActionTypeClientRepeat = 0x00000300, msidbCustomActionTypeInScript = 0x00000400, msidbCustomActionTypeRollback = 0x00000100, msidbCustomActionTypeCommit = 0x00000200, msidbCustomActionTypeNoImpersonate = 0x00000800, msidbCustomActionTypeTSAware = 0x00004000, msidbCustomActionType64BitScript = 0x00001000, msidbCustomActionTypeHideTarget = 0x00002000 }; enum msidbFeatureAttributes { msidbFeatureAttributesFavorLocal = 0x00000000, msidbFeatureAttributesFavorSource = 0x00000001, msidbFeatureAttributesFollowParent = 0x00000002, msidbFeatureAttributesFavorAdvertise = 0x00000004, msidbFeatureAttributesDisallowAdvertise = 0x00000008, msidbFeatureAttributesUIDisallowAbsent = 0x00000010, msidbFeatureAttributesNoUnsupportedAdvertise = 0x00000020 }; enum msidbComponentAttributes { msidbComponentAttributesLocalOnly = 0x00000000, msidbComponentAttributesSourceOnly = 0x00000001, msidbComponentAttributesOptional = 0x00000002, msidbComponentAttributesRegistryKeyPath = 0x00000004, msidbComponentAttributesSharedDllRefCount = 0x00000008, msidbComponentAttributesPermanent = 0x00000010, msidbComponentAttributesODBCDataSource = 0x00000020, msidbComponentAttributesTransitive = 0x00000040, msidbComponentAttributesNeverOverwrite = 0x00000080, msidbComponentAttributes64bit = 0x00000100 }; enum msidbODBCDataSourceRegistration { msidbODBCDataSourceRegistrationPerMachine = 0x00000000, msidbODBCDataSourceRegistrationPerUser = 0x00000001 }; enum msidbRegistryRoot { msidbRegistryRootClassesRoot = 0, msidbRegistryRootCurrentUser = 1, msidbRegistryRootLocalMachine = 2, msidbRegistryRootUsers = 3, }; enum msidbLocatorType { msidbLocatorTypeDirectory = 0x000, msidbLocatorTypeFileName = 0x001, msidbLocatorTypeRawValue = 0x002, msidbLocatorType64bit = 0x010, }; enum msidbServiceControlEvent { msidbServiceControlEventStart = 0x00000001, msidbServiceControlEventStop = 0x00000002, msidbServiceControlEventDelete = 0x00000008, msidbServiceControlEventUninstallStart = 0x00000010, msidbServiceControlEventUninstallStop = 0x00000020, msidbServiceControlEventUninstallDelete = 0x00000080, }; enum msidbServiceInstallErrorControl { msidbServiceInstallErrorControlVital = 0x00008000 }; enum msidbMoveFileOptions { msidbMoveFileOptionsMove = 0x00000001, }; enum msidbAssemblyAttributes { msidbAssemblyAttributesURT = 0x00000000, msidbAssemblyAttributesWin32 = 0x00000001, }; enum msidbSumInfoSourceType { msidbSumInfoSourceTypeSFN = 0x00000001, msidbSumInfoSourceTypeCompressed = 0x00000002, msidbSumInfoSourceTypeAdminImage = 0x00000004, msidbSumInfoSourceTypeLUAPackage = 0x00000008, }; enum msidbRemoveFileInstallMode { msidbRemoveFileInstallModeOnInstall = 0x00000001, msidbRemoveFileInstallModeOnRemove = 0x00000002, msidbRemoveFileInstallModeOnBoth = 0x00000003, }; enum { msidbIniFileActionAddLine = 0x00000000, msidbIniFileActionCreateLine = 0x00000001, msidbIniFileActionRemoveLine = 0x00000002, msidbIniFileActionAddTag = 0x00000003, msidbIniFileActionRemoveTag = 0x00000004 }; /* * Windows SDK braindamage alert * * PID_DICTIONARY and PID_CODEPAGE are defined by propidl.h too * PID_SECURITY is defined in propidl.h with a different value! * So these need to be undefined first. */ #ifdef PID_DICTIONARY #undef PID_DICTIONARY #endif #ifdef PID_CODEPAGE #undef PID_CODEPAGE #endif #ifdef PID_SECURITY #undef PID_SECURITY #endif #define PID_DICTIONARY 0 #define PID_CODEPAGE 1 #define PID_TITLE 2 #define PID_SUBJECT 3 #define PID_AUTHOR 4 #define PID_KEYWORDS 5 #define PID_COMMENTS 6 #define PID_TEMPLATE 7 #define PID_LASTAUTHOR 8 #define PID_REVNUMBER 9 #define PID_EDITTIME 10 #define PID_LASTPRINTED 11 #define PID_CREATE_DTM 12 #define PID_LASTSAVE_DTM 13 #define PID_PAGECOUNT 14 #define PID_WORDCOUNT 15 #define PID_CHARCOUNT 16 #define PID_THUMBNAIL 17 #define PID_APPNAME 18 #define PID_SECURITY 19 #define PID_MSIVERSION PID_PAGECOUNT #define PID_MSISOURCE PID_WORDCOUNT #define PID_MSIRESTRICT PID_CHARCOUNT #endif /* __WINE_MSIDEFS_H */ ================================================ FILE: wine/windows/msident.idl ================================================ /* * Copyright 2012 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; import "ocidl.idl"; import "oleidl.idl"; import "oaidl.idl"; #endif cpp_quote("#define E_IDENTITIES_DISABLED _HRESULT_TYPEDEF_(0x80007110)") cpp_quote("#define S_IDENTITIES_DISABLED _HRESULT_TYPEDEF_(0x00007110)") cpp_quote("#define E_NO_CURRENT_IDENTITY _HRESULT_TYPEDEF_(0x80007111)") cpp_quote("#define E_USER_CANCELLED _HRESULT_TYPEDEF_(0x80007112)") cpp_quote("#define E_PROCESS_CANCELLED_SWITCH _HRESULT_TYPEDEF_(0x80007113)") cpp_quote("#define E_IDENTITY_NOT_FOUND _HRESULT_TYPEDEF_(0x80007114)") cpp_quote("#define E_IDENTITY_EXISTS _HRESULT_TYPEDEF_(0x80007115)") cpp_quote("#define E_IDENTITY_CHANGING _HRESULT_TYPEDEF_(0x80007116)") [ uuid(a9ae6c8e-1d1b-11d2-b21a-00c04fa357fa), ] interface IUserIdentity : IUnknown { HRESULT GetCookie([out] GUID *puidCookie); HRESULT GetName( [in] WCHAR *pszName, [in] ULONG ulBuffSize); [local] HRESULT OpenIdentityRegKey( [in]DWORD dwDesiredAccess, [out] HKEY *phKey); HRESULT GetIdentityFolder( [in] DWORD dwFlags, [in] WCHAR *pszPath, [in] ULONG ulBuffSize); cpp_quote("#define GIF_ROAMING_FOLDER 0x0001") cpp_quote("#define GIF_NON_ROAMING_FOLDER 0x0002") } [ uuid(a9ae6c8f-1d1b-11d2-b21a-00c04fa357fa), odl ] interface IEnumUserIdentity : IUnknown { HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IUnknown **rgelt, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumUserIdentity **ppenum); HRESULT GetCount([out] ULONG *pnCount); } [ uuid(a9ae6c90-1d1b-11d2-b21a-00c04fa357fa) ] interface IUserIdentityManager : IUnknown { HRESULT EnumIdentities([out] IEnumUserIdentity **ppEnumUser); HRESULT ManageIdentities([in] HWND hwndParent, [in] DWORD dwFlags); cpp_quote("#define UIMI_CREATE_NEW_IDENTITY 0x0001") HRESULT Logon([in] HWND hwndParent, [in] DWORD dwFlags, [out] IUserIdentity **ppIdentity); cpp_quote("#define UIL_FORCE_UI 0x80000001") HRESULT Logoff([in] HWND hwndParent); HRESULT GetIdentityByCookie([in] GUID *uidCookie, [out] IUserIdentity **ppIdentity); } cpp_quote("DEFINE_GUID(CLSID_UserIdentityManager, 0xa9ae6c91,0x1d1b,0x11d2,0xb2,0x1a,0x00,0xc0,0x4f,0xa3,0x57,0xfa);") ================================================ FILE: wine/windows/msinkaut.idl ================================================ /* Copyright (C) 2007 C John Klehm * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; [ uuid(7D868ACD-1A5D-4A47-A247-F39741353012), version(1.0) ] library MSINKAUTLib { importlib("stdole2.tlb"); typedef float single; typedef enum InkBoundingBoxMode { IBBM_Default = 0, IBBM_NoCurveFit = 1, IBBM_CurveFit = 2, IBBM_PointsOnly = 3, IBBM_Union = 4 } InkBoundingBoxMode; typedef enum InkExtractFlags { IEF_CopyFromOriginal = 0x0, IEF_RemoveFromOriginal = 0x1, IEF_Default = IEF_RemoveFromOriginal } InkExtractFlags; typedef enum InkPersistenceFormat { IPF_InkSerializeFormat = 0, IPF_Base64InkSerializedFormat = 1, IPF_GIF = 2, IPF_Base64GIF = 3 } InkPersistenceFormat; typedef enum InkPersistenceCompressionMode { IPCM_Default = 0, IPCM_MaximumCompression = 1, IPCM_NoCompression = 2 } InkPersistenceCompressionMode; typedef enum InkPenTip { IPT_Ball = 0, IPT_Rectangle = 1 } InkPenTip; typedef enum InkRasterOperation { IRO_Black = 1, IRO_NotMergePen, IRO_MaskNotPen, IRO_NotCopyPen, IRO_MaskPenNot, IRO_Not, IRO_XOrPen, IRO_NotMaskPen, IRO_MaskPen, IRO_NotXOrPen, IRO_NoOperation, IRO_MergeNotPen, IRO_CopyPen, IRO_MergePenNot, IRO_MergePen, IRO_White } InkRasterOperation; typedef enum InkClipboardModes { ICB_Copy = 0, ICB_Cut = 0x1, ICB_DelayedCopy = 0x20, ICB_ExtractOnly = 0x30, ICB_Default = ICB_Copy } InkClipboardModes; typedef enum InkClipboardFormats { ICF_None = 0, ICF_InkSerializedFormat = 0x1, ICF_SketchInk = 0x2, ICF_TextInk = 0x6, ICF_EnhancedMetafile = 0x8, ICF_Metafile = 0x20, ICF_Bitmap = 0x40, ICF_PasteMask = 0x7, ICF_CopyMask = 0x7f, ICF_Default = ICF_CopyMask } InkClipboardFormats; typedef enum InkRecognitionConfidence { IRC_Strong = 0, IRC_Intermediate = 1, IRC_Poor = 2 } InkRecognitionConfidence; [ odl, uuid(DB489209-B7C3-411D-90F6-1548CFFF271E), dual, oleautomation ] interface IInkExtendedProperty : IDispatch { [id(0x00000001), propget] HRESULT Guid([out, retval] BSTR* Guid); [id(0x00000002), propget] HRESULT Data([out, retval] VARIANT* Data); [id(0x00000002), propput] HRESULT Data([in] VARIANT Data); } [ odl, uuid(89F2A8BE-95A9-4530-8B8F-88E971E3E25F), dual, oleautomation ] interface IInkExtendedProperties : IDispatch { HRESULT Count([out, retval] long* Count); HRESULT _NewEnum([out, retval] IUnknown** _NewEnum); HRESULT Item( [in] VARIANT Identifier, [out, retval] IInkExtendedProperty** Item); HRESULT Add( [in] BSTR Guid, [in] VARIANT Data, [out, retval] IInkExtendedProperty** InkExtendedProperty); HRESULT Remove([in] VARIANT Identifier); HRESULT Clear(); HRESULT DoesPropertyExist( [in] BSTR Guid, [out, retval] VARIANT_BOOL* DoesPropertyExist); } [ odl, uuid(BF519B75-0A15-4623-ADC9-C00D436A8092), dual, oleautomation ] interface IInkDrawingAttributes : IDispatch { [id(0x00000002), propget] HRESULT Color( [out, retval] long* CurrentColor); [id(0x00000002), propput] HRESULT Color([in] long CurrentColor); [id(0x00000003), propget] HRESULT Width( [out, retval] single* CurrentWidth); [id(0x00000003), propput] HRESULT Width([in] single CurrentWidth); [id(0x00000001), propget] HRESULT Height( [out, retval] single* CurrentHeight); [id(0x00000001), propput] HRESULT Height([in] single CurrentHeight); [id(0x00000004), propget] HRESULT FitToCurve( [out, retval] VARIANT_BOOL* Flag); [id(0x00000004), propput] HRESULT FitToCurve([in] VARIANT_BOOL Flag); [id(0x00000005), propget] HRESULT IgnorePressure( [out, retval] VARIANT_BOOL* Flag); [id(0x00000005), propput] HRESULT IgnorePressure( [in] VARIANT_BOOL Flag); [id(0x00000006), propget] HRESULT AntiAliased( [out, retval] VARIANT_BOOL* Flag); [id(0x00000006), propput] HRESULT AntiAliased([in] VARIANT_BOOL Flag); [id(0x00000007), propget] HRESULT Transparency( [out, retval] long* CurrentTransparency); [id(0x00000007), propput] HRESULT Transparency( [in] long CurrentTransparency); [id(0x00000008), propget] HRESULT RasterOperation( [out, retval] InkRasterOperation* CurrentRasterOperation); [id(0x00000008), propput] HRESULT RasterOperation( [in] InkRasterOperation CurrentRasterOperation); [id(0x00000009), propget] HRESULT PenTip( [out, retval] InkPenTip* CurrentPenTip); [id(0x00000009), propput] HRESULT PenTip([in] InkPenTip CurrentPenTip); [id(0x0000000b), propget] HRESULT ExtendedProperties( [out, retval] IInkExtendedProperties** Properties); [id(0x0000000a)] HRESULT Clone( [out, retval] IInkDrawingAttributes** DrawingAttributes); } cpp_quote("#ifndef _WINGDI_") /* already defined in wingdi.h but needed for WIDL */ typedef struct tagXFORM { single eM11; single eM12; single eM21; single eM22; single eDx; single eDy; } XFORM; cpp_quote("#endif /* _WINGDI_ */") [ odl, uuid(615F1D43-8703-4565-88E2-8201D2ECD7B7), dual, oleautomation ] interface IInkTransform : IDispatch { [id(0x00000001)] HRESULT Reset(); [id(0x00000002)] HRESULT Translate( [in] single HorizontalComponent, [in] single VerticalComponent); [id(0x00000003)] HRESULT Rotate( [in] single Degrees, [in, defaultvalue(0)] single x, [in, defaultvalue(0)] single y); [id(0x00000004)] HRESULT Reflect( [in] VARIANT_BOOL Horizontally, [in] VARIANT_BOOL Vertically); [id(0x00000005)] HRESULT Shear( [in] single HorizontalComponent, [in] single VerticalComponent); [id(0x00000006)] HRESULT ScaleTransform( [in] single HorizontalMultiplier, [in] single VerticalMultiplier); [id(0x0000000d)] HRESULT GetTransform( [out] single* eM11, [out] single* eM12, [out] single* eM21, [out] single* eM22, [out] single* eDx, [out] single* eDy); [id(0x0000000e)] HRESULT SetTransform( [in] single eM11, [in] single eM12, [in] single eM21, [in] single eM22, [in] single eDx, [in] single eDy); [id(0x00000007), propget, hidden] HRESULT eM11( [out, retval] single* Value); [id(0x00000007), propput, hidden] HRESULT eM11([in] single Value); [id(0x00000008), propget, hidden] HRESULT eM12( [out, retval] single* Value); [id(0x00000008), propput, hidden] HRESULT eM12([in] single Value); [id(0x00000009), propget, hidden] HRESULT eM21( [out, retval] single* Value); [id(0x00000009), propput, hidden] HRESULT eM21([in] single Value); [id(0x0000000a), propget, hidden] HRESULT eM22( [out, retval] single* Value); [id(0x0000000a), propput, hidden] HRESULT eM22([in] single Value); [id(0x0000000b), propget, hidden] HRESULT eDx( [out, retval] single* Value); [id(0x0000000b), propput, hidden] HRESULT eDx([in] single Value); [id(0x0000000c), propget, hidden] HRESULT eDy( [out, retval] single* Value); [id(0x0000000c), propput, hidden] HRESULT eDy([in] single Value); [id(0x0000000f), propget, hidden] HRESULT Data( [out, retval] XFORM* XFORM); [id(0x0000000f), propput, hidden] HRESULT Data([in] XFORM XFORM); } interface IInkDisp; [ odl, uuid(9794FF82-6071-4717-8A8B-6AC7C64A686E), dual, oleautomation ] interface IInkRectangle { [id(1), propget] HRESULT Top([out, retval] long* Units); [id(1), propput] HRESULT Top([in] long Units); [id(2), propget] HRESULT Left([out, retval] long* Units); [id(2), propput] HRESULT Left([in] long Units); [id(3), propget] HRESULT Bottom([out, retval] long* Units); [id(3), propput] HRESULT Bottom([in] long Units); [id(4), propget] HRESULT Right([out, retval] long* Units); [id(4), propput] HRESULT Right([in] long Units); [id(7), propget] HRESULT Data([out, retval] RECT* Rect); [id(7), propput] HRESULT Data([in] RECT Rect); [id(5)] HRESULT GetRectangle( [out] long* Top, [out] long* Left, [out] long* Bottom, [out] long* Right); [id(6)] HRESULT SetRectangle( [in] long Top, [in] long Left, [in] long Bottom, [in] long Right); } interface IInkStrokes; typedef enum { TPMU_Default, TPMU_Inches, TPMU_Centimeters, TPMU_Degrees, TPMU_Radians, TPMU_Seconds, TPMU_Pounds, TPMU_Grams } TabletPropertyMetricUnit; [ odl, uuid(43242FEA-91D1-4A72-963E-FBB91829CFA2), dual, oleautomation ] interface IInkStrokeDisp : IDispatch { [id(0x00000002), propget] HRESULT Id([out, retval] long* Id); [id(0x0000000d), propget] HRESULT BezierPoints( [out, retval] VARIANT* Points); [id(0x00000004), propget] HRESULT DrawingAttributes( [out, retval] IInkDrawingAttributes** DrawAttrs); [id(0x00000004), propputref] HRESULT DrawingAttributes( [in] IInkDrawingAttributes* DrawAttrs); [id(0x0000000c), propget] HRESULT Ink([out, retval] IInkDisp** Ink); [id(0x0000000b), propget] HRESULT ExtendedProperties( [out, retval] IInkExtendedProperties** Properties); [id(0x0000000e), propget] HRESULT PolylineCusps( [out, retval] VARIANT* Cusps); [id(0x0000000f), propget] HRESULT BezierCusps( [out, retval] VARIANT* Cusps); [id(0x00000010), propget] HRESULT SelfIntersections( [out, retval] VARIANT* Intersections); [id(0x00000011), propget] HRESULT PacketCount( [out, retval] long* plCount); [id(0x00000012), propget] HRESULT PacketSize( [out, retval] long* plSize); [id(0x00000013), propget] HRESULT PacketDescription( [out, retval] VARIANT* PacketDescription); [id(0x00000014), propget] HRESULT Deleted( [out, retval] VARIANT_BOOL* Deleted); [id(0x00000003)] HRESULT GetBoundingBox( [in, defaultvalue(0)] InkBoundingBoxMode BoundingBoxMode, [out, retval] IInkRectangle** Rectangle); [id(0x00000005)] HRESULT FindIntersections( [in] IInkStrokes* Strokes, [out, retval] VARIANT* Intersections); [id(0x00000006)] HRESULT GetRectangleIntersections( [in] IInkRectangle* Rectangle, [out, retval] VARIANT* Intersections); [id(0x00000007)] HRESULT Clip( [in] IInkRectangle* Rectangle); [id(0x00000008)] HRESULT HitTestCircle( [in] long x, [in] long y, [in] single radius, [out, retval] VARIANT_BOOL* Intersects); [id(0x00000009)] HRESULT NearestPoint( [in] long x, [in] long y, [in, out, defaultvalue(0)] single* Distance, [out, retval] single* Point); [id(0x0000000a)] HRESULT Split( [in] single SplitAt, [out, retval] IInkStrokeDisp** NewStroke); [id(0x00000015)] HRESULT GetPacketDescriptionPropertyMetrics( [in] BSTR propertyName, [out] long* Minimum, [out] long* Maximum, [out] TabletPropertyMetricUnit* Units, [out] single* Resolution); [id(0x00000016)] HRESULT GetPoints( [in, defaultvalue(0)] long Index, [in, defaultvalue(-1)] long Count, [out, retval] VARIANT* Points); [id(0x00000017)] HRESULT SetPoints( [in] VARIANT Points, [in, defaultvalue(0)] long Index, [in, defaultvalue(-1)] long Count, [out, retval] long* NumberOfPointsSet); [id(0x00000018)] HRESULT GetPacketData( [in, defaultvalue(0)] long Index, [in, defaultvalue(-1)] long Count, [out, retval] VARIANT* PacketData); [id(0x00000019)] HRESULT GetPacketValuesByProperty( [in] BSTR propertyName, [in, defaultvalue(0)] long Index, [in, defaultvalue(-1)] long Count, [out, retval] VARIANT* PacketValues); [id(0x0000001a)] HRESULT SetPacketValuesByProperty( [in] BSTR bstrPropertyName, [in] VARIANT PacketValues, [in, defaultvalue(0)] long Index, [in, defaultvalue(-1)] long Count, [out, retval] long* NumberOfPacketsSet); [id(0x0000001b)] HRESULT GetFlattenedBezierPoints( [in, defaultvalue(0)] long FittingError, [out, retval] VARIANT* FlattenedBezierPoints); [id(0x0000001d)] HRESULT Transform( [in] IInkTransform* Transform, [in, defaultvalue(0)] VARIANT_BOOL ApplyOnPenWidth); [id(0x0000001c)] HRESULT ScaleToRectangle( [in] IInkRectangle* Rectangle); [id(0x0000001e)] HRESULT Move( [in] single HorizontalComponent, [in] single VerticalComponent); [id(0x0000001f)] HRESULT Rotate( [in] single Degrees, [in, defaultvalue(0)] single x, [in, defaultvalue(0)] single y); [id(0x00000020)] HRESULT Shear( [in] single HorizontalMultiplier, [in] single VerticalMultiplier); [id(0x00000021)] HRESULT ScaleTransform( [in] single HorizontalMultiplier, [in] single VerticalMultiplier); } interface IInkRecognitionResult; [ odl, uuid(F1F4C9D8-590A-4963-B3AE-1935671BB6F3), dual, oleautomation ] interface IInkStrokes : IDispatch { [propget] HRESULT Count( [out, retval] long *Count); [propget, restricted] HRESULT _NewEnum( [out, retval] IUnknown **_NewEnum); [propget] HRESULT Ink( [out, retval] IInkDisp **Ink); [propget] HRESULT RecognitionResult( [out, retval] IInkRecognitionResult **RecognitionResult); HRESULT ToString( [out, retval] BSTR *ToString); HRESULT Item( [in] long Index, [out, retval] IInkStrokeDisp **Stroke); HRESULT Add( [in] IInkStrokeDisp *InkStroke); HRESULT AddStrokes( [in] IInkStrokes *InkStrokes); HRESULT Remove( [in] IInkStrokeDisp *InkStroke); HRESULT RemoveStrokes( [in] IInkStrokes *InkStrokes); HRESULT ModifyDrawingAttributes( [in] IInkDrawingAttributes *DrawAttrs); HRESULT GetBoundingBox( [in] InkBoundingBoxMode BoundingBoxMode, [out, retval] IInkRectangle **BoundingBox); HRESULT Transform( [in] IInkTransform *Transform, [in] VARIANT_BOOL ApplyOnPenWidth); HRESULT ScaleToRectangle( [in] IInkRectangle *Rectangle); HRESULT Move( [in] float HorizontalComponent, [in] float VerticalComponent); HRESULT Rotate( [in] float Degrees, [in] float x, [in] float y); HRESULT Shear( [in] float HorizontalMultiplier, [in] float VerticalMultiplier); HRESULT ScaleTransform( [in] float HorizontalMultiplier, [in] float VerticalMultiplier); HRESULT Clip( [in] IInkRectangle *Rectangle); HRESULT RemoveRecognitionResult(); } [ odl, uuid(7E23A88F-C30E-420f-9BDB-28902543F0C1), dual, oleautomation ] interface IInkCustomStrokes : IDispatch { [propget] HRESULT Count( [out, retval] long *Count); [propget] HRESULT _NewEnum( [out, retval] IUnknown **_NewEnum); HRESULT Item( [in] VARIANT Identifier, [out, retval] IInkStrokes **Strokes); HRESULT Add( [in] BSTR Name, [in] IInkStrokes *Strokes); HRESULT Remove( [in] VARIANT Identifier); HRESULT Clear(); } interface IInkRecognitionAlternate; interface IInkRecognitionAlternates; [ odl, uuid(3BC129A8-86CD-45ad-BDE8-E0D32D61C16D), dual, oleautomation ] interface IInkRecognitionResult : IDispatch { [propget] HRESULT TopString( [out, retval] BSTR *TopString); [propget] HRESULT TopAlternate( [out, retval] IInkRecognitionAlternate **TopAlternate); [propget] HRESULT TopConfidence( [out, retval] InkRecognitionConfidence *TopConfidence); [propget] HRESULT Strokes( [out, retval] IInkStrokes **Strokes); HRESULT AlternatesFromSelection( [in] long selectionStart, [in] long selectionLength, [in] long maximumAlternates, [out, retval] IInkRecognitionAlternates **AlternatesFromSelection); HRESULT ModifyTopAlternate( [in] IInkRecognitionAlternate *Alternate); HRESULT SetResultOnStrokes(); } [ odl, uuid(B7E660AD-77E4-429b-ADDA-873780D1FC4A), dual, oleautomation ] interface IInkRecognitionAlternate : IDispatch { [propget] HRESULT String( [out, retval] BSTR *RecoString); [propget] HRESULT Confidence( [out, retval] InkRecognitionConfidence *Confidence); [propget] HRESULT Baseline( [out, retval] VARIANT *Baseline); [propget] HRESULT Midline( [out, retval] VARIANT *Midline); [propget] HRESULT Ascender( [out, retval] VARIANT *Ascender); [propget] HRESULT Descender( [out, retval] VARIANT *Descender); [propget] HRESULT LineNumber( [out, retval] long *LineNumber); [propget] HRESULT Strokes( [out, retval] IInkStrokes **Strokes); [propget] HRESULT LineAlternates( [out, retval] IInkRecognitionAlternates **LineAlternates); [propget] HRESULT ConfidenceAlternates( [out, retval] IInkRecognitionAlternates **ConfidenceAlternates); HRESULT GetStrokesFromStrokeRanges( [in] IInkStrokes *Stroke, [out, retval] IInkStrokes **GetStrokesFromTextRange); HRESULT GetStrokesFromTextRange( [in, out] long *selectionStart, [in, out] long *selectionLength, [out, retval] IInkStrokes **GetStrokesFromTextRange); HRESULT GetTextRangeFromStrokes( [in] IInkStrokes *Strokes, [in, out] long *selectionStart, [in, out] long *selectionLength); HRESULT AlternatesWithConstantPropertyValues( [in] BSTR PropertyType, [out, retval] IInkRecognitionAlternates **AlternatesWithConstantPropertyValues); HRESULT GetPropertyValue( [in] BSTR PropertyType, [out, retval] VARIANT *PropertyValue); } [ odl, uuid(286A167F-9F19-4c61-9D53-4F07BE622B84), dual, oleautomation ] interface IInkRecognitionAlternates : IDispatch { [propget] HRESULT Count( [out, retval] long *Count); [propget, restricted] HRESULT _NewEnum( [out, retval] IUnknown **_NewEnum); [propget] HRESULT Strokes( [out, retval] IInkStrokes **Strokes); HRESULT Item( [in] long Index, [out, retval] IInkRecognitionAlternate **InkRecoAlternate); } [ odl, uuid(9D398FA0-C4E2-4fcd-9973-975CAAF47EA6), dual, oleautomation ] interface IInkDisp : IDispatch { [propget] HRESULT Strokes( [out, retval] IInkStrokes **Strokes); [propget] HRESULT ExtendedProperties( [out, retval] IInkExtendedProperties **Properties); [propget] HRESULT Dirty( [out, retval] VARIANT_BOOL *Dirty); [propput] HRESULT Dirty( [in] VARIANT_BOOL Dirty); [propget] HRESULT CustomStrokes( [out, retval] IInkCustomStrokes **CustomStrokes); HRESULT GetBoundingBox( [in] InkBoundingBoxMode BoundingBoxMode, [out] IInkRectangle **Rectangle); HRESULT DeleteStrokes( [in, unique] IInkStrokes *Strokes); HRESULT DeleteStroke( [in] IInkStrokeDisp *Stroke); HRESULT ExtractStrokes( [in] IInkStrokes *Strokes, [in] InkExtractFlags ExtractFlags, [out, retval] IInkDisp **ExtractedInk); HRESULT ExtractWithRectangle( [in] IInkRectangle *Rectangle, [in] InkExtractFlags ExtractFlags, [out, retval] IInkDisp **ExtractedInk); HRESULT Clip( [in] IInkRectangle *Rectangle); HRESULT Clone( [out, retval] IInkDisp **NewInk); HRESULT HitTestCircle( [in] long X, [in] long Y, [in] float radius, [out, retval] IInkStrokes **Strokes); HRESULT HitTestWithRectangle( [in] IInkRectangle *SelectionRectangle, [in] float IntersectPercent, [out, retval] IInkStrokes **Strokes); HRESULT HitTestWithLasso( [in] VARIANT Points, [in] float IntersectPercent, [in, out, unique] VARIANT *LassoPoints, [out, retval] IInkStrokes **Strokes); HRESULT NearestPoint( [in] long X, [in] long Y, [in, out] float *PointOnStroke, [in, out] float *DistanceFromPacket, [out, retval] IInkStrokeDisp **Stroke); HRESULT CreateStrokes( [in] VARIANT StrokeIds, [out, retval] IInkStrokes **Strokes); HRESULT AddStrokesAtRectangle( [in] IInkStrokes *SourceStrokes, [in] IInkRectangle *TargetRectangle); HRESULT Save( [in] InkPersistenceFormat PersistenceFormat, [in] InkPersistenceCompressionMode CompressionMode, [out, retval] VARIANT *Data); HRESULT Load( [in] VARIANT Data); HRESULT CreateStroke( [in] VARIANT PacketData, [in] VARIANT PacketDescription, [out, retval] IInkStrokeDisp **Stroke); HRESULT ClipboardCopyWithRectangle( [in] IInkRectangle *Rectangle, [in] InkClipboardFormats ClipboardFormats, [in] InkClipboardModes ClipboardModes, [out, retval] IDataObject **DataObject); HRESULT ClipboardCopy( [in] IInkStrokes *strokes, [in] InkClipboardFormats ClipboardFormats, [in] InkClipboardModes ClipboardModes, [out, retval] IDataObject **DataObject); HRESULT CanPaste( [in] IDataObject *DataObject, [out, retval] VARIANT_BOOL *CanPaste); HRESULT ClipboardPaste( [in] long x, [in] long y, [in, unique] IDataObject *DataObject, [out, retval] IInkStrokes **Strokes); } [ odl, uuid(E6257A9C-B511-4F4C-A8B0-A7DBC9506B83), dual, oleautomation ] interface IInkRenderer : IDispatch { HRESULT GetViewTransform([in] IInkTransform* ViewTransform); HRESULT SetViewTransform([in] IInkTransform* ViewTransform); HRESULT GetObjectTransform([in] IInkTransform* ObjectTransform); HRESULT SetObjectTransform([in] IInkTransform* ObjectTransform); HRESULT Draw( [in] long hDC, [in] IInkStrokes* Strokes); HRESULT DrawStroke( [in] long hDC, [in] IInkStrokeDisp* Stroke, [in, defaultvalue(0)] IInkDrawingAttributes* DrawingAttributes); HRESULT PixelToInkSpace( [in] long hDC, [in, out] long* x, [in, out] long* y); HRESULT InkSpaceToPixel( [in] long hdcDisplay, [in, out] long* x, [in, out] long* y); HRESULT PixelToInkSpaceFromPoints( [in] long hDC, [in, out] VARIANT* Points); HRESULT InkSpaceToPixelFromPoints( [in] long hDC, [in, out] VARIANT* Points); HRESULT Measure( [in] IInkStrokes* Strokes, [out, retval] IInkRectangle** Rectangle); HRESULT MeasureStroke( [in] IInkStrokeDisp* Stroke, [in, defaultvalue(0)] IInkDrawingAttributes* DrawingAttributes, [out, retval] IInkRectangle** Rectangle); HRESULT Move( [in] single HorizontalComponent, [in] single VerticalComponent); HRESULT Rotate( [in] single Degrees, [in, defaultvalue(0)] single x, [in, defaultvalue(0)] single y); HRESULT ScaleTransform( [in] single HorizontalMultiplier, [in] single VerticalMultiplier, [in, defaultvalue(-1)] VARIANT_BOOL ApplyOnPenWidth); } typedef enum { ICM_InkOnly, ICM_GestureOnly, ICM_InkAndGesture } InkCollectionMode; typedef enum { IMP_Default, IMP_Arrow, IMP_Crosshair, IMP_Ibeam, IMP_SizeNESW, IMP_SizeNS, IMP_SizeNWSE, IMP_SizeWE, IMP_UpArrow, IMP_Hourglass, IMP_NoDrop, IMP_ArrowHourglass, IMP_ArrowQuestion, IMP_SizeAll, IMP_Hand, IMP_Custom = 99 } InkMousePointer; typedef enum { THWC_Integrated = 1, THWC_CursorMustTouch = 2, THWC_HardProximity = 4, THWC_CursorsHavePhysicalIds = 8 } TabletHardwareCapabilities; [ odl, uuid(2DE25EAA-6EF8-42D5-AEE9-185BC81B912D), dual, oleautomation ] interface IInkTablet : IDispatch { [propget] HRESULT Name([out, retval] BSTR* Name); [propget] HRESULT PlugAndPlayId([out, retval] BSTR* Id); [propget] HRESULT MaximumInputRectangle([out, retval] IInkRectangle** Rectangle); [propget] HRESULT HardwareCapabilities( [out, retval] TabletHardwareCapabilities* Capabilities); HRESULT IsPacketPropertySupported( [in] BSTR packetPropertyName, [out, retval] VARIANT_BOOL* Supported); HRESULT GetPropertyMetrics( [in] BSTR propertyName, [out] long* Minimum, [out] long* Maximum, [out] TabletPropertyMetricUnit* Units, [out] single* Resolution); } typedef enum { ICBS_Unavailable, ICBS_Up, ICBS_Down } InkCursorButtonState; [ odl, uuid(85EF9417-1D59-49B2-A13C-702C85430894), dual, oleautomation ] interface IInkCursorButton : IDispatch { [propget] HRESULT Name([out, retval] BSTR* Name); [propget] HRESULT Id([out, retval] BSTR* Id); [propget] HRESULT State([out, retval] InkCursorButtonState* CurrentState); } [ odl, uuid(3671CC40-B624-4671-9FA0-DB119D952D54), dual, oleautomation ] interface IInkCursorButtons : IDispatch { [propget] HRESULT Count([out, retval] long* Count); [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum); HRESULT Item( [in] VARIANT Identifier, [out, retval] IInkCursorButton** Button); } [ odl, uuid(AD30C630-40C5-4350-8405-9C71012FC558), dual, oleautomation ] interface IInkCursor : IDispatch { [id(0x00000000), propget] HRESULT Name([out, retval] BSTR* Name); [id(0x00000001), propget] HRESULT Id([out, retval] long* Id); [id(0x00000004), propget] HRESULT Inverted( [out, retval] VARIANT_BOOL* Status); [id(0x00000002), propget] HRESULT DrawingAttributes( [out, retval] IInkDrawingAttributes** Attributes); [id(0x00000002), propputref] HRESULT DrawingAttributes( [in] IInkDrawingAttributes* Attributes); [id(0x00000005), propget] HRESULT Tablet( [out, retval] IInkTablet** Tablet); [id(0x00000003), propget] HRESULT Buttons( [out, retval] IInkCursorButtons** Buttons); } [ odl, uuid(A248C1AC-C698-4E06-9E5C-D57F77C7E647), dual, oleautomation ] interface IInkCursors : IDispatch { [propget] HRESULT Count([out, retval] long* Count); [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum); HRESULT Item( [in] long Index, [out, retval] IInkCursor** Cursor); } typedef enum { IAG_AllGestures = 0, IAG_NoGesture = 61440, IAG_Scratchout = 61441, IAG_Triangle = 61442, IAG_Square = 61443, IAG_Star = 61444, IAG_Check = 61445, IAG_Curlicue = 61456, IAG_DoubleCurlicue = 61457, IAG_Circle = 61472, IAG_DoubleCircle = 61473, IAG_SemiCircleLeft = 61480, IAG_SemiCircleRight = 61481, IAG_ChevronUp = 61488, IAG_ChevronDown = 61489, IAG_ChevronLeft = 61490, IAG_ChevronRight = 61491, IAG_ArrowUp = 61496, IAG_ArrowDown = 61497, IAG_ArrowLeft = 61498, IAG_ArrowRight = 61499, IAG_Up = 61528, IAG_Down = 61529, IAG_Left = 61530, IAG_Right = 61531, IAG_UpDown = 61536, IAG_DownUp = 61537, IAG_LeftRight = 61538, IAG_RightLeft = 61539, IAG_UpLeftLong = 61540, IAG_UpRightLong = 61541, IAG_DownLeftLong = 61542, IAG_DownRightLong = 61543, IAG_UpLeft = 61544, IAG_UpRight = 61545, IAG_DownLeft = 61546, IAG_DownRight = 61547, IAG_LeftUp = 61548, IAG_LeftDown = 61549, IAG_RightUp = 61550, IAG_RightDown = 61551, IAG_Exclamation = 61604, IAG_Tap = 61680, IAG_DoubleTap = 61681 } InkApplicationGesture; typedef enum { ICEI_DefaultEvents = -1, ICEI_CursorDown = 0, ICEI_Stroke, ICEI_NewPackets, ICEI_NewInAirPackets, ICEI_CursorButtonDown, ICEI_CursorButtonUp, ICEI_CursorInRange, ICEI_CursorOutOfRange, ICEI_SystemGesture, ICEI_TabletAdded, ICEI_TabletRemoved, ICEI_MouseDown, ICEI_MouseMove, ICEI_MouseUp, ICEI_MouseWheel, ICEI_DblClick, ICEI_AllEvents } InkCollectorEventInterest; [ odl, uuid(F0F060B5-8B1F-4A7C-89EC-880692588A4F), dual, oleautomation ] interface IInkCollector : IDispatch { [id(0x00000002), propget] HRESULT hWnd( [out, retval] long* CurrentWindow); [id(0x00000002), propput] HRESULT hWnd([in] long CurrentWindow); [id(0x00000001), propget] HRESULT Enabled( [out, retval] VARIANT_BOOL* Collecting); [id(0x00000001), propput] HRESULT Enabled( [in] VARIANT_BOOL Collecting); [id(0x00000005), propget] HRESULT DefaultDrawingAttributes( [out, retval] IInkDrawingAttributes** CurrentAttributes); [id(0x00000005), propputref] HRESULT DefaultDrawingAttributes( [in] IInkDrawingAttributes* CurrentAttributes); [id(0x00000006), propget] HRESULT Renderer( [out, retval] IInkRenderer** CurrentInkRenderer); [id(0x00000006), propputref] HRESULT Renderer( [in] IInkRenderer* CurrentInkRenderer); [id(0x00000007), propget] HRESULT Ink([out, retval] IInkDisp** Ink); [id(0x00000007), propputref] HRESULT Ink([in] IInkDisp* Ink); [id(0x00000008), propget] HRESULT AutoRedraw( [out, retval] VARIANT_BOOL* AutoRedraw); [id(0x00000008), propput] HRESULT AutoRedraw( [in] VARIANT_BOOL AutoRedraw); [id(0x00000009), propget] HRESULT CollectingInk( [out, retval] VARIANT_BOOL* Collecting); [id(0x0000001c), propget] HRESULT CollectionMode( [out, retval] InkCollectionMode* Mode); [id(0x0000001c), propput] HRESULT CollectionMode( [in] InkCollectionMode Mode); [id(0x0000001f), propget] HRESULT DynamicRendering( [out, retval] VARIANT_BOOL* Enabled); [id(0x0000001f), propput] HRESULT DynamicRendering( [in] VARIANT_BOOL Enabled); [id(0x00000020), propget] HRESULT DesiredPacketDescription( [out, retval] VARIANT* PacketGuids); [id(0x00000020), propput] HRESULT DesiredPacketDescription( [in] VARIANT PacketGuids); [id(0x00000023), propget] HRESULT MouseIcon( [out, retval] IPictureDisp** MouseIcon); [id(0x00000023), propput] HRESULT MouseIcon( [in] IPictureDisp* MouseIcon); [id(0x00000023), propputref] HRESULT MouseIcon( [in] IPictureDisp* MouseIcon); [id(0x00000024), propget] HRESULT MousePointer( [out, retval] InkMousePointer* MousePointer); [id(0x00000024), propput] HRESULT MousePointer( [in] InkMousePointer MousePointer); [id(0x00000014), propget] HRESULT Cursors( [out, retval] IInkCursors** Cursors); [id(0x00000015), propget] HRESULT MarginX( [out, retval] long* MarginX); [id(0x00000015), propput] HRESULT MarginX([in] long MarginX); [id(0x00000016), propget] HRESULT MarginY( [out, retval] long* MarginY); [id(0x00000016), propput] HRESULT MarginY([in] long MarginY); [id(0x00000019), propget] HRESULT Tablet( [out, retval] IInkTablet** SingleTablet); [id(0x00000026), propget] HRESULT SupportHighContrastInk( [out, retval] VARIANT_BOOL* Support); [id(0x00000026), propput] HRESULT SupportHighContrastInk( [in] VARIANT_BOOL Support); [id(0x0000001d)] HRESULT SetGestureStatus( [in] InkApplicationGesture Gesture, [in] VARIANT_BOOL Listen); [id(0x0000001e)] HRESULT GetGestureStatus( [in] InkApplicationGesture Gesture, [out, retval] VARIANT_BOOL* Listening); [id(0x00000018)] HRESULT GetWindowInputRectangle( [in, out] IInkRectangle** WindowInputRectangle); [id(0x00000017)] HRESULT SetWindowInputRectangle( [in] IInkRectangle* WindowInputRectangle); [id(0x0000001a)] HRESULT SetAllTabletsMode( [in, defaultvalue(-1)] VARIANT_BOOL UseMouseForInput); [id(0x0000001b)] HRESULT SetSingleTabletIntegratedMode( [in] IInkTablet* Tablet); [id(0x0000000b)] HRESULT GetEventInterest( [in] InkCollectorEventInterest EventId, [out, retval] VARIANT_BOOL* Listen); [id(0x0000000a)] HRESULT SetEventInterest( [in] InkCollectorEventInterest EventId, [in] VARIANT_BOOL Listen); } } ================================================ FILE: wine/windows/msiquery.h ================================================ /* * Copyright (C) 2002,2003 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSIQUERY_H #define __WINE_MSIQUERY_H #include typedef enum tagMSICONDITION { MSICONDITION_FALSE = 0, MSICONDITION_TRUE = 1, MSICONDITION_NONE = 2, MSICONDITION_ERROR = 3, } MSICONDITION; #define MSI_NULL_INTEGER 0x80000000 typedef enum tagMSICOLINFO { MSICOLINFO_NAMES = 0, MSICOLINFO_TYPES = 1 } MSICOLINFO; typedef enum tagMSICOSTTREE { MSICOSTTREE_SELFONLY = 0, MSICOSTTREE_CHILDREN = 1, MSICOSTTREE_PARENTS = 2, MSICOSTTREE_PRODUCT = 3, } MSICOSTTREE; typedef enum tagMSIMODIFY { MSIMODIFY_SEEK = -1, MSIMODIFY_REFRESH = 0, MSIMODIFY_INSERT = 1, MSIMODIFY_UPDATE = 2, MSIMODIFY_ASSIGN = 3, MSIMODIFY_REPLACE = 4, MSIMODIFY_MERGE = 5, MSIMODIFY_DELETE = 6, MSIMODIFY_INSERT_TEMPORARY = 7, MSIMODIFY_VALIDATE = 8, MSIMODIFY_VALIDATE_NEW = 9, MSIMODIFY_VALIDATE_FIELD = 10, MSIMODIFY_VALIDATE_DELETE = 11 } MSIMODIFY; #ifndef WINE_NO_UNICODE_MACROS #define MSIDBOPEN_READONLY (LPCTSTR)0 #define MSIDBOPEN_TRANSACT (LPCTSTR)1 #define MSIDBOPEN_DIRECT (LPCTSTR)2 #define MSIDBOPEN_CREATE (LPCTSTR)3 #define MSIDBOPEN_CREATEDIRECT (LPCTSTR)4 #else #define MSIDBOPEN_READONLY (LPCWSTR)0 #define MSIDBOPEN_TRANSACT (LPCWSTR)1 #define MSIDBOPEN_DIRECT (LPCWSTR)2 #define MSIDBOPEN_CREATE (LPCWSTR)3 #define MSIDBOPEN_CREATEDIRECT (LPCWSTR)4 #endif #define MSIDBOPEN_PATCHFILE 32 / sizeof(*MSIDBOPEN_READONLY) typedef enum tagMSIRUNMODE { MSIRUNMODE_ADMIN = 0, MSIRUNMODE_ADVERTISE = 1, MSIRUNMODE_MAINTENANCE = 2, MSIRUNMODE_ROLLBACKENABLED = 3, MSIRUNMODE_LOGENABLED = 4, MSIRUNMODE_OPERATIONS = 5, MSIRUNMODE_REBOOTATEND = 6, MSIRUNMODE_REBOOTNOW = 7, MSIRUNMODE_CABINET = 8, MSIRUNMODE_SOURCESHORTNAMES = 9, MSIRUNMODE_TARGETSHORTNAMES = 10, MSIRUNMODE_RESERVED11 = 11, MSIRUNMODE_WINDOWS9X = 12, MSIRUNMODE_ZAWENABLED = 13, MSIRUNMODE_RESERVED14 = 14, MSIRUNMODE_RESERVED15 = 15, MSIRUNMODE_SCHEDULED = 16, MSIRUNMODE_ROLLBACK = 17, MSIRUNMODE_COMMIT = 18 } MSIRUNMODE; typedef enum tagMSIDBERROR { MSIDBERROR_INVALIDARG = -3, MSIDBERROR_MOREDATA = -2, MSIDBERROR_FUNCTIONERROR = -1, MSIDBERROR_NOERROR = 0, MSIDBERROR_DUPLICATEKEY = 1, MSIDBERROR_REQUIRED = 2, MSIDBERROR_BADLINK = 3, MSIDBERROR_OVERFLOW = 4, MSIDBERROR_UNDERFLOW = 5, MSIDBERROR_NOTINSET = 6, MSIDBERROR_BADVERSION = 7, MSIDBERROR_BADCASE = 8, MSIDBERROR_BADGUID = 9, MSIDBERROR_BADWILDCARD = 10, MSIDBERROR_BADIDENTIFIER = 11, MSIDBERROR_BADLANGUAGE = 12, MSIDBERROR_BADFILENAME = 13, MSIDBERROR_BADPATH = 14, MSIDBERROR_BADCONDITION = 15, MSIDBERROR_BADFORMATTED = 16, MSIDBERROR_BADTEMPLATE = 17, MSIDBERROR_BADDEFAULTDIR = 18, MSIDBERROR_BADREGPATH = 19, MSIDBERROR_BADCUSTOMSOURCE = 20, MSIDBERROR_BADPROPERTY = 21, MSIDBERROR_MISSINGDATA = 22, MSIDBERROR_BADCATEGORY = 23, MSIDBERROR_BADKEYTABLE = 24, MSIDBERROR_BADMAXMINVALUES = 25, MSIDBERROR_BADCABINET = 26, MSIDBERROR_BADSHORTCUT= 27, MSIDBERROR_STRINGOVERFLOW = 28, MSIDBERROR_BADLOCALIZEATTRIB = 29 } MSIDBERROR; typedef enum tagMSIDBSTATE { MSIDBSTATE_ERROR = -1, MSIDBSTATE_READ = 0, MSIDBSTATE_WRITE = 1 } MSIDBSTATE; typedef enum tagMSITRANSFORM_VALIDATE { MSITRANSFORM_VALIDATE_LANGUAGE = 0x00000001, MSITRANSFORM_VALIDATE_PRODUCT = 0x00000002, MSITRANSFORM_VALIDATE_PLATFORM = 0x00000004, MSITRANSFORM_VALIDATE_MAJORVERSION = 0x00000008, MSITRANSFORM_VALIDATE_MINORVERSION = 0x00000010, MSITRANSFORM_VALIDATE_UPDATEVERSION = 0x00000020, MSITRANSFORM_VALIDATE_NEWLESSBASEVERSION = 0x00000040, MSITRANSFORM_VALIDATE_NEWLESSEQUALBASEVERSION = 0x00000080, MSITRANSFORM_VALIDATE_NEWEQUALBASEVERSION = 0x00000100, MSITRANSFORM_VALIDATE_NEWGREATEREQUALBASEVERSION = 0x00000200, MSITRANSFORM_VALIDATE_NEWGREATERBASEVERSION = 0x00000400, MSITRANSFORM_VALIDATE_UPGRADECODE = 0x00000800 } MSITRANSFORM_VALIDATE; #ifdef __cplusplus extern "C" { #endif /* view manipulation */ UINT WINAPI MsiViewFetch(MSIHANDLE,MSIHANDLE*); UINT WINAPI MsiViewExecute(MSIHANDLE,MSIHANDLE); UINT WINAPI MsiViewClose(MSIHANDLE); UINT WINAPI MsiDatabaseOpenViewA(MSIHANDLE,LPCSTR,MSIHANDLE*); UINT WINAPI MsiDatabaseOpenViewW(MSIHANDLE,LPCWSTR,MSIHANDLE*); #define MsiDatabaseOpenView WINELIB_NAME_AW(MsiDatabaseOpenView) MSIDBERROR WINAPI MsiViewGetErrorA(MSIHANDLE,LPSTR,LPDWORD); MSIDBERROR WINAPI MsiViewGetErrorW(MSIHANDLE,LPWSTR,LPDWORD); #define MsiViewGetError WINELIB_NAME_AW(MsiViewGetError) MSIDBSTATE WINAPI MsiGetDatabaseState(MSIHANDLE); /* record manipulation */ MSIHANDLE WINAPI MsiCreateRecord(UINT); UINT WINAPI MsiRecordClearData(MSIHANDLE); UINT WINAPI MsiRecordSetInteger(MSIHANDLE,UINT,int); UINT WINAPI MsiRecordSetStringA(MSIHANDLE,UINT,LPCSTR); UINT WINAPI MsiRecordSetStringW(MSIHANDLE,UINT,LPCWSTR); #define MsiRecordSetString WINELIB_NAME_AW(MsiRecordSetString) UINT WINAPI MsiRecordGetStringA(MSIHANDLE,UINT,LPSTR,LPDWORD); UINT WINAPI MsiRecordGetStringW(MSIHANDLE,UINT,LPWSTR,LPDWORD); #define MsiRecordGetString WINELIB_NAME_AW(MsiRecordGetString) UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE); int WINAPI MsiRecordGetInteger(MSIHANDLE,UINT); UINT WINAPI MsiRecordDataSize(MSIHANDLE,UINT); BOOL WINAPI MsiRecordIsNull(MSIHANDLE,UINT); UINT WINAPI MsiFormatRecordA(MSIHANDLE,MSIHANDLE,LPSTR,LPDWORD); UINT WINAPI MsiFormatRecordW(MSIHANDLE,MSIHANDLE,LPWSTR,LPDWORD); #define MsiFormatRecord WINELIB_NAME_AW(MsiFormatRecord) UINT WINAPI MsiRecordSetStreamA(MSIHANDLE,UINT,LPCSTR); UINT WINAPI MsiRecordSetStreamW(MSIHANDLE,UINT,LPCWSTR); #define MsiRecordSetStream WINELIB_NAME_AW(MsiRecordSetStream) UINT WINAPI MsiRecordReadStream(MSIHANDLE,UINT,char*,LPDWORD); UINT WINAPI MsiDatabaseGetPrimaryKeysA(MSIHANDLE,LPCSTR,MSIHANDLE*); UINT WINAPI MsiDatabaseGetPrimaryKeysW(MSIHANDLE,LPCWSTR,MSIHANDLE*); #define MsiDatabaseGetPrimaryKeys WINELIB_NAME_AW(MsiDatabaseGetPrimaryKeys) /* installing */ UINT WINAPI MsiDoActionA(MSIHANDLE,LPCSTR ); UINT WINAPI MsiDoActionW(MSIHANDLE,LPCWSTR ); #define MsiDoAction WINELIB_NAME_AW(MsiDoAction) /* database transforms */ UINT WINAPI MsiDatabaseApplyTransformA(MSIHANDLE,LPCSTR,int); UINT WINAPI MsiDatabaseApplyTransformW(MSIHANDLE,LPCWSTR,int); #define MsiDatabaseApplyTransform WINELIB_NAME_AW(MsiDatabaseApplyTransform) UINT WINAPI MsiDatabaseGenerateTransformA(MSIHANDLE,MSIHANDLE,LPCSTR,int,int); UINT WINAPI MsiDatabaseGenerateTransformW(MSIHANDLE,MSIHANDLE,LPCWSTR,int,int); #define MsiDatabaseGenerateTransform WINELIB_NAME_AW(MsiDatabaseGenerateTransform) UINT WINAPI MsiDatabaseCommit(MSIHANDLE); /* install state */ UINT WINAPI MsiGetFeatureStateA(MSIHANDLE,LPCSTR,INSTALLSTATE*,INSTALLSTATE*); UINT WINAPI MsiGetFeatureStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE*,INSTALLSTATE*); #define MsiGetFeatureState WINELIB_NAME_AW(MsiGetFeatureState) UINT WINAPI MsiGetFeatureValidStatesA(MSIHANDLE,LPCSTR,LPDWORD); UINT WINAPI MsiGetFeatureValidStatesW(MSIHANDLE,LPCWSTR,LPDWORD); #define MsiGetFeatureValidStates WINELIB_NAME_AW(MsiGetFeatureValidStates) UINT WINAPI MsiSetComponentStateA(MSIHANDLE,LPCSTR,INSTALLSTATE); UINT WINAPI MsiSetComponentStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE); #define MsiSetComponentState WINELIB_NAME_AW(MsiSetComponentState) UINT WINAPI MsiGetComponentStateA(MSIHANDLE,LPCSTR,INSTALLSTATE*,INSTALLSTATE*); UINT WINAPI MsiGetComponentStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE*,INSTALLSTATE*); #define MsiGetComponentState WINELIB_NAME_AW(MsiGetComponentState) MSICONDITION WINAPI MsiEvaluateConditionA(MSIHANDLE,LPCSTR); MSICONDITION WINAPI MsiEvaluateConditionW(MSIHANDLE,LPCWSTR); #define MsiEvaluateCondition WINELIB_NAME_AW(MsiEvaluateCondition) /* property functions */ UINT WINAPI MsiGetPropertyA(MSIHANDLE, LPCSTR, LPSTR, LPDWORD); UINT WINAPI MsiGetPropertyW(MSIHANDLE, LPCWSTR, LPWSTR, LPDWORD); #define MsiGetProperty WINELIB_NAME_AW(MsiGetProperty) UINT WINAPI MsiSetPropertyA(MSIHANDLE, LPCSTR, LPCSTR); UINT WINAPI MsiSetPropertyW(MSIHANDLE, LPCWSTR, LPCWSTR); #define MsiSetProperty WINELIB_NAME_AW(MsiSetProperty) UINT WINAPI MsiGetTargetPathA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD); UINT WINAPI MsiGetTargetPathW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD); #define MsiGetTargetPath WINELIB_NAME_AW(MsiGetTargetPath) UINT WINAPI MsiSetTargetPathA(MSIHANDLE, LPCSTR, LPCSTR); UINT WINAPI MsiSetTargetPathW(MSIHANDLE, LPCWSTR, LPCWSTR); #define MsiSetTargetPath WINELIB_NAME_AW(MsiSetTargetPath) UINT WINAPI MsiGetSourcePathA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD); UINT WINAPI MsiGetSourcePathW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD); #define MsiGetSourcePath WINELIB_NAME_AW(MsiGetSourcePath) MSIHANDLE WINAPI MsiGetActiveDatabase(MSIHANDLE); UINT WINAPI MsiViewGetColumnInfo(MSIHANDLE, MSICOLINFO, MSIHANDLE*); INT WINAPI MsiProcessMessage(MSIHANDLE, INSTALLMESSAGE, MSIHANDLE); UINT WINAPI MsiSetFeatureAttributesA(MSIHANDLE, LPCSTR, DWORD); UINT WINAPI MsiSetFeatureAttributesW(MSIHANDLE, LPCWSTR, DWORD); #define MsiSetFeatureAttributes WINELIB_NAME_AW(MsiSetFeatureAttributes) UINT WINAPI MsiSetFeatureStateA(MSIHANDLE, LPCSTR, INSTALLSTATE); UINT WINAPI MsiSetFeatureStateW(MSIHANDLE, LPCWSTR, INSTALLSTATE); #define MsiSetFeatureState WINELIB_NAME_AW(MsiSetFeatureState) UINT WINAPI MsiPreviewDialogA(MSIHANDLE, LPCSTR); UINT WINAPI MsiPreviewDialogW(MSIHANDLE, LPCWSTR); #define MsiPreviewDialog WINELIB_NAME_AW(MsiPreviewDialog) UINT WINAPI MsiPreviewBillboardA(MSIHANDLE, LPCSTR, LPCSTR); UINT WINAPI MsiPreviewBillboardW(MSIHANDLE, LPCWSTR, LPCWSTR); #define MsiPreviewBillboard WINELIB_NAME_AW(MsiPreviewBillboard) UINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE, MSIHANDLE, LPCSTR, int, int); UINT WINAPI MsiCreateTransformSummaryInfoW(MSIHANDLE, MSIHANDLE, LPCWSTR, int, int); #define MsiCreateTransformSummaryInfo WINELIB_NAME_AW(MsiCreateTransformSummaryInfo) UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE, LPCSTR, UINT, MSIHANDLE *); UINT WINAPI MsiGetSummaryInformationW(MSIHANDLE, LPCWSTR, UINT, MSIHANDLE *); #define MsiGetSummaryInformation WINELIB_NAME_AW(MsiGetSummaryInformation) UINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE,UINT,PUINT,LPINT,FILETIME*,LPSTR,LPDWORD); UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE,UINT,PUINT,LPINT,FILETIME*,LPWSTR,LPDWORD); #define MsiSummaryInfoGetProperty WINELIB_NAME_AW(MsiSummaryInfoGetProperty) UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE, UINT, UINT, INT, FILETIME*, LPCSTR); UINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE, UINT, UINT, INT, FILETIME*, LPCWSTR); #define MsiSummaryInfoSetProperty WINELIB_NAME_AW(MsiSummaryInfoSetProperty) UINT WINAPI MsiDatabaseExportA(MSIHANDLE, LPCSTR, LPCSTR, LPCSTR); UINT WINAPI MsiDatabaseExportW(MSIHANDLE, LPCWSTR, LPCWSTR, LPCWSTR); #define MsiDatabaseExport WINELIB_NAME_AW(MsiDatabaseExport) UINT WINAPI MsiDatabaseImportA(MSIHANDLE, LPCSTR, LPCSTR); UINT WINAPI MsiDatabaseImportW(MSIHANDLE, LPCWSTR, LPCWSTR); #define MsiDatabaseImport WINELIB_NAME_AW(MsiDatabaseImport) UINT WINAPI MsiOpenDatabaseW(LPCWSTR, LPCWSTR, MSIHANDLE*); UINT WINAPI MsiOpenDatabaseA(LPCSTR, LPCSTR, MSIHANDLE*); #define MsiOpenDatabase WINELIB_NAME_AW(MsiOpenDatabase) MSICONDITION WINAPI MsiDatabaseIsTablePersistentA(MSIHANDLE, LPCSTR); MSICONDITION WINAPI MsiDatabaseIsTablePersistentW(MSIHANDLE, LPCWSTR); #define MsiDatabaseIsTablePersistent WINELIB_NAME_AW(MsiDatabaseIsTablePersistent) UINT WINAPI MsiSequenceA(MSIHANDLE, LPCSTR, INT); UINT WINAPI MsiSequenceW(MSIHANDLE, LPCWSTR, INT); #define MsiSequence WINELIB_NAME_AW(MsiSequence) UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE); UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE,PUINT); UINT WINAPI MsiEnableUIPreview(MSIHANDLE, MSIHANDLE*); BOOL WINAPI MsiGetMode(MSIHANDLE, MSIRUNMODE); UINT WINAPI MsiSetMode(MSIHANDLE, MSIRUNMODE, BOOL); UINT WINAPI MsiViewModify(MSIHANDLE, MSIMODIFY, MSIHANDLE); UINT WINAPI MsiGetFeatureCostA(MSIHANDLE, LPCSTR, MSICOSTTREE, INSTALLSTATE, LPINT); UINT WINAPI MsiGetFeatureCostW(MSIHANDLE, LPCWSTR, MSICOSTTREE, INSTALLSTATE, LPINT); #define MsiGetFeatureCost WINELIB_NAME_AW(MsiGetFeatureCost) LANGID WINAPI MsiGetLanguage(MSIHANDLE); UINT WINAPI MsiSetInstallLevel(MSIHANDLE, int); MSIHANDLE WINAPI MsiGetLastErrorRecord(void); #ifdef __cplusplus } #endif #endif /* __WINE_MSIQUERY_H */ ================================================ FILE: wine/windows/msopc.idl ================================================ /* * Copyright 2018 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "ocidl.idl"; #include "opcbase.idl" #include "opcobjectmodel.idl" #include "opcparturi.idl" #ifndef __WIDL__ #define threading(model) #endif interface IOpcUri; interface IOpcPartUri; interface IOpcPackage; interface IOpcDigitalSignatureManager; [ object, uuid(6d0b4446-cd73-4ab3-94f4-8ccdf6116154), pointer_default(ref) ] interface IOpcFactory : IUnknown { HRESULT CreatePackageRootUri( [out, retval] IOpcUri **uri ); HRESULT CreatePartUri( [in, string] LPCWSTR uri, [out, retval] IOpcPartUri **part_uri ); [local] HRESULT CreateStreamOnFile( [in, string] LPCWSTR filename, [in] OPC_STREAM_IO_MODE io_mode, [in, unique] SECURITY_ATTRIBUTES *sa, [in] DWORD flags, [out, retval] IStream **stream ); HRESULT CreatePackage( [out, retval] IOpcPackage **package ); HRESULT ReadPackageFromStream( [in] IStream *stream, [in] OPC_READ_FLAGS flags, [out, retval] IOpcPackage **package ); HRESULT WritePackageToStream( [in] IOpcPackage *package, [in] OPC_WRITE_FLAGS flags, [in] IStream *stream ); HRESULT CreateDigitalSignatureManager( [in] IOpcPackage *package, [out, retval] IOpcDigitalSignatureManager **signature_manager ); } [ threading(both), uuid(6b2d6Ba0-9f3e-4f27-920b-313cc426a39e) ] coclass OpcFactory { interface IOpcFactory; }; ================================================ FILE: wine/windows/mssip.h ================================================ /* * Copyright (C) 2002 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSSIP_H #define __WINE_MSSIP_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /**********************************************************************/ typedef CRYPT_HASH_BLOB CRYPT_DIGEST_DATA; /**********************************************************************/ #define MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE 0x00010000 #define MSSIP_FLAGS_USE_CATALOG 0x00020000 #define SPC_INC_PE_RESOURCES_FLAG 0x80 #define SPC_INC_PE_DEBUG_INFO_FLAG 0x40 #define SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG 0x20 #define MSSIP_ADDINFO_NONE 0 #define MSSIP_ADDINFO_FLAT 1 #define MSSIP_ADDINFO_CATMEMBER 2 #define MSSIP_ADDINFO_BLOB 3 #define MSSIP_ADDINFO_NONMSSIP 500 #define SIP_MAX_MAGIC_NUMBER 4 /**********************************************************************/ #include typedef struct SIP_SUBJECTINFO_ { DWORD cbSize; GUID *pgSubjectType; HANDLE hFile; LPCWSTR pwsFileName; LPCWSTR pwsDisplayName; DWORD dwReserved1; DWORD dwIntVersion; HCRYPTPROV hProv; CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm; DWORD dwFlags; DWORD dwEncodingType; DWORD dwReserved2; DWORD fdwCAPISettings; DWORD fdwSecuritySettings; DWORD dwIndex; DWORD dwUnionChoice; union { struct MS_ADDINFO_FLAT_ *psFlat; struct MS_ADDINFO_CATALOGMEMBER_ *psCatMember; struct MS_ADDINFO_BLOB_ *psBlob; } DUMMYUNIONNAME; LPVOID pClientData; } SIP_SUBJECTINFO, *LPSIP_SUBJECTINFO; #include #include typedef struct MS_ADDINFO_FLAT_ { DWORD cbStruct; struct SIP_INDIRECT_DATA_ *pIndirectData; } MS_ADDINFO_FLAT, *PMS_ADDINFO_FLAT; #include #include typedef struct MS_ADDINFO_CATALOGMEMBER_ { DWORD cbStruct; struct CRYPTCATSTORE_ *pStore; struct CRYPTCATMEMBER_ *pMember; } MS_ADDINFO_CATALOGMEMBER, *PMS_ADDINFO_CATALOGMEMBER; #include #include typedef struct MS_ADDINFO_BLOB_ { DWORD cbStruct; DWORD cbMemObject; BYTE *pbMemObject; DWORD cbMemSignedMsg; BYTE *pbMemSignedMsg; } MS_ADDINFO_BLOB, *PMS_ADDINFO_BLOB; #include #include typedef struct SIP_INDIRECT_DATA_ { CRYPT_ATTRIBUTE_TYPE_VALUE Data; CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm; CRYPT_HASH_BLOB Digest; } SIP_INDIRECT_DATA, *PSIP_INDIRECT_DATA; #include typedef BOOL (WINAPI * pCryptSIPGetSignedDataMsg)(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD *,BYTE *); typedef BOOL (WINAPI * pCryptSIPPutSignedDataMsg)(SIP_SUBJECTINFO *,DWORD,DWORD *,DWORD,BYTE *); typedef BOOL (WINAPI * pCryptSIPCreateIndirectData)(SIP_SUBJECTINFO *,DWORD *,SIP_INDIRECT_DATA *); typedef BOOL (WINAPI * pCryptSIPVerifyIndirectData)(SIP_SUBJECTINFO *,SIP_INDIRECT_DATA *); typedef BOOL (WINAPI * pCryptSIPRemoveSignedDataMsg)(SIP_SUBJECTINFO *,DWORD); #include typedef struct SIP_DISPATCH_INFO_ { DWORD cbSize; HANDLE hSIP; pCryptSIPGetSignedDataMsg pfGet; pCryptSIPPutSignedDataMsg pfPut; pCryptSIPCreateIndirectData pfCreate; pCryptSIPVerifyIndirectData pfVerify; pCryptSIPRemoveSignedDataMsg pfRemove; } SIP_DISPATCH_INFO, *LPSIP_DISPATCH_INFO; #include typedef BOOL (WINAPI *pfnIsFileSupported)(HANDLE,GUID *); typedef BOOL (WINAPI *pfnIsFileSupportedName)(WCHAR *,GUID *); #include typedef struct SIP_ADD_NEWPROVIDER_ { DWORD cbStruct; GUID *pgSubject; WCHAR *pwszDLLFileName; WCHAR *pwszMagicNumber; WCHAR *pwszIsFunctionName; WCHAR *pwszGetFuncName; WCHAR *pwszPutFuncName; WCHAR *pwszCreateFuncName; WCHAR *pwszVerifyFuncName; WCHAR *pwszRemoveFuncName; WCHAR *pwszIsFunctionNameFmt2; /* NTDDI_VERSION >= NTDDI_WIN8 */ WCHAR *pwszGetCapFuncName; } SIP_ADD_NEWPROVIDER, *PSIP_ADD_NEWPROVIDER; #include /**********************************************************************/ BOOL WINAPI CryptSIPGetSignedDataMsg(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD *,BYTE *); BOOL WINAPI CryptSIPPutSignedDataMsg(SIP_SUBJECTINFO *,DWORD,DWORD *,DWORD,BYTE *); BOOL WINAPI CryptSIPCreateIndirectData(SIP_SUBJECTINFO *,DWORD *,SIP_INDIRECT_DATA *); BOOL WINAPI CryptSIPVerifyIndirectData(SIP_SUBJECTINFO *,SIP_INDIRECT_DATA *); BOOL WINAPI CryptSIPRemoveSignedDataMsg(SIP_SUBJECTINFO *,DWORD); BOOL WINAPI CryptSIPLoad(const GUID *,DWORD,SIP_DISPATCH_INFO *); BOOL WINAPI CryptSIPRetrieveSubjectGuid(LPCWSTR,HANDLE,GUID *); BOOL WINAPI CryptSIPRetrieveSubjectGuidForCatalogFile(LPCWSTR,HANDLE,GUID *); BOOL WINAPI CryptSIPAddProvider(SIP_ADD_NEWPROVIDER *); BOOL WINAPI CryptSIPRemoveProvider(GUID *); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_MSSIP_H */ ================================================ FILE: wine/windows/msstkppg.h ================================================ /* * Copyright (C) 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _MS_STOCK_PROP_PAGES_H_ #define _MS_STOCK_PROP_PAGES_H_ DEFINE_GUID(CLSID_StockColorPage, 0x7ebdaae1, 0x8120, 0x11cf, 0x89, 0x9f, 0x0, 0xaa, 0x0, 0x68, 0x8b, 0x10); DEFINE_GUID(CLSID_StockFontPage, 0x7ebdaae0, 0x8120, 0x11cf, 0x89, 0x9f, 0x0, 0xaa, 0x0, 0x68, 0x8b, 0x10); DEFINE_GUID(CLSID_StockPicturePage, 0x7ebdaae2, 0x8120, 0x11cf, 0x89, 0x9f, 0x0, 0xaa, 0x0, 0x68, 0x8b, 0x10); #endif ================================================ FILE: wine/windows/mstask.idl ================================================ /* * Task Scheduler Service interface * * Copyright (C) 2008 Google (Roy Shea) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ import "oaidl.idl"; import "oleidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif cpp_quote("#define TASK_SUNDAY 0x1") cpp_quote("#define TASK_MONDAY 0x2") cpp_quote("#define TASK_TUESDAY 0x4") cpp_quote("#define TASK_WEDNESDAY 0x8") cpp_quote("#define TASK_THURSDAY 0x10") cpp_quote("#define TASK_FRIDAY 0x20") cpp_quote("#define TASK_SATURDAY 0x40") cpp_quote("#define TASK_FIRST_WEEK 1") cpp_quote("#define TASK_SECOND_WEEK 2") cpp_quote("#define TASK_THIRD_WEEK 3") cpp_quote("#define TASK_FOURTH_WEEK 4") cpp_quote("#define TASK_LAST_WEEK 5") cpp_quote("#define TASK_JANUARY 0x1") cpp_quote("#define TASK_FEBRUARY 0x2") cpp_quote("#define TASK_MARCH 0x4") cpp_quote("#define TASK_APRIL 0x8") cpp_quote("#define TASK_MAY 0x10") cpp_quote("#define TASK_JUNE 0x20") cpp_quote("#define TASK_JULY 0x40") cpp_quote("#define TASK_AUGUST 0x80") cpp_quote("#define TASK_SEPTEMBER 0x100") cpp_quote("#define TASK_OCTOBER 0x200") cpp_quote("#define TASK_NOVEMBER 0x400") cpp_quote("#define TASK_DECEMBER 0x800") cpp_quote("#define TASK_FLAG_INTERACTIVE 0x0001") cpp_quote("#define TASK_FLAG_DELETE_WHEN_DONE 0x0002") cpp_quote("#define TASK_FLAG_DISABLED 0x0004") cpp_quote("#define TASK_FLAG_START_ONLY_IF_IDLE 0x0010") cpp_quote("#define TASK_FLAG_KILL_ON_IDLE_END 0x0020") cpp_quote("#define TASK_FLAG_DONT_START_IF_ON_BATTERIES 0x0040") cpp_quote("#define TASK_FLAG_KILL_IF_GOING_ON_BATTERIES 0x0080") cpp_quote("#define TASK_FLAG_RUN_ONLY_IF_DOCKED 0x0100") cpp_quote("#define TASK_FLAG_HIDDEN 0x0200") cpp_quote("#define TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET 0x0400") cpp_quote("#define TASK_FLAG_RESTART_ON_IDLE_RESUME 0x0800") cpp_quote("#define TASK_FLAG_SYSTEM_REQUIRED 0x1000") cpp_quote("#define TASK_FLAG_RUN_ONLY_IF_LOGGED_ON 0x2000") cpp_quote("#define TASK_TRIGGER_FLAG_HAS_END_DATE 0x1") cpp_quote("#define TASK_TRIGGER_FLAG_KILL_AT_DURATION_END 0x2") cpp_quote("#define TASK_TRIGGER_FLAG_DISABLED 0x4") [ local, object, uuid(148BD528-A2AB-11CE-B11F-00AA00530503), pointer_default(unique) ] interface IEnumWorkItems : IUnknown { HRESULT Next( [in] ULONG celt, [out] LPWSTR **rgpwszNames, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumWorkItems **ppEnumWorkItems); } cpp_quote("#ifndef _HPROPSHEETPAGE_DEFINED") typedef struct _PSP *HPROPSHEETPAGE; cpp_quote("#define _HPROPSHEETPAGE_DEFINED") cpp_quote("#endif") [ local, object, uuid(4086658a-cbbb-11cf-b604-00c04fd8d565), pointer_default(unique) ] interface IProvideTaskPage : IUnknown { typedef enum _TASKPAGE { TASKPAGE_TASK = 0, TASKPAGE_SCHEDULE = 1, TASKPAGE_SETTINGS = 2 } TASKPAGE; HRESULT GetPage( [in] TASKPAGE tpType, [in] BOOL fPersistChanges, [out] HPROPSHEETPAGE *phPage); } [ local, object, uuid(148BD52B-A2AB-11CE-B11F-00AA00530503), pointer_default(unique) ] interface ITaskTrigger : IUnknown { typedef enum _TASK_TRIGGER_TYPE { TASK_TIME_TRIGGER_ONCE = 0, TASK_TIME_TRIGGER_DAILY = 1, TASK_TIME_TRIGGER_WEEKLY = 2, TASK_TIME_TRIGGER_MONTHLYDATE = 3, TASK_TIME_TRIGGER_MONTHLYDOW = 4, TASK_EVENT_TRIGGER_ON_IDLE = 5, TASK_EVENT_TRIGGER_AT_SYSTEMSTART = 6, TASK_EVENT_TRIGGER_AT_LOGON = 7 } TASK_TRIGGER_TYPE, *PTASK_TRIGGER_TYPE; typedef struct _DAILY { WORD DaysInterval; } DAILY; typedef struct _WEEKLY { WORD WeeksInterval; WORD rgfDaysOfTheWeek; } WEEKLY; typedef struct _MONTHLYDATE { DWORD rgfDays; WORD rgfMonths; } MONTHLYDATE; typedef struct _MONTHLYDOW { WORD wWhichWeek; WORD rgfDaysOfTheWeek; WORD rgfMonths; } MONTHLYDOW; typedef union _TRIGGER_TYPE_UNION { DAILY Daily; WEEKLY Weekly; MONTHLYDATE MonthlyDate; MONTHLYDOW MonthlyDOW; } TRIGGER_TYPE_UNION; typedef struct _TASK_TRIGGER { WORD cbTriggerSize; WORD Reserved1; WORD wBeginYear; WORD wBeginMonth; WORD wBeginDay; WORD wEndYear; WORD wEndMonth; WORD wEndDay; WORD wStartHour; WORD wStartMinute; DWORD MinutesDuration; DWORD MinutesInterval; DWORD rgFlags; TASK_TRIGGER_TYPE TriggerType; TRIGGER_TYPE_UNION Type; WORD Reserved2; WORD wRandomMinutesInterval; } TASK_TRIGGER, *PTASK_TRIGGER; HRESULT SetTrigger( [in] const PTASK_TRIGGER pTrigger); HRESULT GetTrigger( [out] PTASK_TRIGGER pTrigger); HRESULT GetTriggerString( [out] LPWSTR *ppwszTrigger); } [ local, object, uuid(a6b952f0-a4b1-11d0-997d-00aa006887ec), pointer_default(unique) ] interface IScheduledWorkItem : IUnknown { HRESULT CreateTrigger( [out] WORD *piNewTrigger, [out] ITaskTrigger **ppTrigger); HRESULT DeleteTrigger( [in] WORD iTrigger); HRESULT GetTriggerCount( [out] WORD *plCount); HRESULT GetTrigger( [in] WORD iTrigger, [out] ITaskTrigger **ppTrigger); HRESULT GetTriggerString( [in] WORD iTrigger, [out] LPWSTR *ppwszTrigger); HRESULT GetRunTimes( [in] const LPSYSTEMTIME pstBegin, [in] const LPSYSTEMTIME pstEnd, [in, out] WORD *pCount, [out] LPSYSTEMTIME *rgstTaskTimes); HRESULT GetNextRunTime( [out] SYSTEMTIME *pstNextRun); HRESULT SetIdleWait( [in] WORD wIdleMinutes, [in] WORD wDeadlineMinutes); HRESULT GetIdleWait( [out] WORD *pwIdleMinutes, [out] WORD *pwDeadlineMinutes); HRESULT Run(); HRESULT Terminate(); HRESULT EditWorkItem( [in] HWND hParent, [in] DWORD dwReserved); HRESULT GetMostRecentRunTime( [out] SYSTEMTIME *pstLastRun); HRESULT GetStatus( [out] HRESULT *phrStatus); HRESULT GetExitCode( [out] DWORD *pdwExitCode); HRESULT SetComment( [in] LPCWSTR pwszComment); HRESULT GetComment( [out] LPWSTR *ppwszComment); HRESULT SetCreator( LPCWSTR pwszCreator); HRESULT GetCreator( [out] LPWSTR *ppwszCreator); HRESULT SetWorkItemData( [in] WORD cBytes, [in] BYTE rgbData[]); HRESULT GetWorkItemData( [out] WORD *pcBytes, [out] BYTE **ppBytes); HRESULT SetErrorRetryCount( WORD wRetryCount); HRESULT GetErrorRetryCount( [out] WORD *pwRetryCount); HRESULT SetErrorRetryInterval( WORD wRetryInterval); HRESULT GetErrorRetryInterval( [out] WORD *pwRetryInterval); HRESULT SetFlags( DWORD dwFlags); HRESULT GetFlags( [out] DWORD *pdwFlags); HRESULT SetAccountInformation( [in] LPCWSTR pwszAccountName, [in] LPCWSTR pwszPassword); HRESULT GetAccountInformation( [out] LPWSTR *ppwszAccountName); } [ local, object, uuid(148BD524-A2AB-11CE-B11F-00AA00530503), pointer_default(unique) ] interface ITask : IScheduledWorkItem { HRESULT SetApplicationName( [in] LPCWSTR pwszApplicationName); HRESULT GetApplicationName( [out] LPWSTR *ppwszApplicationName); HRESULT SetParameters( [in] LPCWSTR pwszParameters); HRESULT GetParameters( [out] LPWSTR *ppwszParameters); HRESULT SetWorkingDirectory( [in] LPCWSTR pwszWorkingDirectory); HRESULT GetWorkingDirectory( [in] LPWSTR *ppwszWorkingDirectory); HRESULT SetPriority( [in] DWORD dwPriority); HRESULT GetPriority( [out] DWORD *pdwPriority); HRESULT SetTaskFlags( [in] DWORD dwFlags); HRESULT GetTaskFlags( [out] DWORD *pdwFlags); HRESULT SetMaxRunTime( [in] DWORD dwMaxRunTime); HRESULT GetMaxRunTime( [out] DWORD *pdwMaxRunTime); } [ local, object, uuid(148BD527-A2AB-11CE-B11F-00AA00530503), pointer_default(unique) ] interface ITaskScheduler : IUnknown { HRESULT SetTargetComputer( [in] LPCWSTR pwszComputer); HRESULT GetTargetComputer( [out] LPWSTR *ppwszComputer); HRESULT Enum( [out] IEnumWorkItems **ppEnumTasks); HRESULT Activate( [in] LPCWSTR pwszName, [in] REFIID riid, [out] IUnknown **ppunk); HRESULT Delete( [in] LPCWSTR pwszName); HRESULT NewWorkItem( [in] LPCWSTR pwszTaskName, [in] REFCLSID rclsid, [in] REFIID riid, [out] IUnknown **ppunk); HRESULT AddWorkItem( [in] LPCWSTR pwszTaskName, [in] IScheduledWorkItem *pWorkItem); HRESULT IsOfType( [in] LPCWSTR pwszName, [in] REFIID riid); } [ threading(both), uuid(148BD52A-A2AB-11CE-B11F-00AA00530503) ] coclass CTaskScheduler { [default] interface ITaskScheduler; } [ threading(both), uuid(148BD520-A2AB-11CE-B11F-00AA00530503) ] coclass CTask { [default] interface ITask; } ================================================ FILE: wine/windows/mstcpip.h ================================================ /* * Copyright 2008 Hans Leidekker for CodeWeavers. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_MSTCPIP_H #define __WINE_MSTCPIP_H #include struct tcp_keepalive { ULONG onoff; ULONG keepalivetime; ULONG keepaliveinterval; }; #ifndef USE_WS_PREFIX #define SIO_RCVALL _WSAIOW(IOC_VENDOR, 1) #define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR, 2) #define SIO_RCVALL_IGMPMCAST _WSAIOW(IOC_VENDOR, 3) #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR, 4) #define SIO_ABSORB_RTRALERT _WSAIOW(IOC_VENDOR, 5) #define SIO_UCAST_IF _WSAIOW(IOC_VENDOR, 6) #define SIO_LIMIT_BROADCASTS _WSAIOW(IOC_VENDOR, 7) #define SIO_INDEX_BIND _WSAIOW(IOC_VENDOR, 8) #define SIO_INDEX_MCASTIF _WSAIOW(IOC_VENDOR, 9) #define SIO_INDEX_ADD_MCAST _WSAIOW(IOC_VENDOR, 10) #define SIO_INDEX_DEL_MCAST _WSAIOW(IOC_VENDOR, 11) #define RCVALL_OFF 0 #define RCVALL_ON 1 #define RCVALL_SOCKETLEVELONLY 2 #else #define WS_SIO_RCVALL _WSAIOW(WS_IOC_VENDOR, 1) #define WS_SIO_RCVALL_MCAST _WSAIOW(WS_IOC_VENDOR, 2) #define WS_SIO_RCVALL_IGMPMCAST _WSAIOW(WS_IOC_VENDOR, 3) #define WS_SIO_KEEPALIVE_VALS _WSAIOW(WS_IOC_VENDOR, 4) #define WS_SIO_ABSORB_RTRALERT _WSAIOW(WS_IOC_VENDOR, 5) #define WS_SIO_UCAST_IF _WSAIOW(WS_IOC_VENDOR, 6) #define WS_SIO_LIMIT_BROADCASTS _WSAIOW(WS_IOC_VENDOR, 7) #define WS_SIO_INDEX_BIND _WSAIOW(WS_IOC_VENDOR, 8) #define WS_SIO_INDEX_MCASTIF _WSAIOW(WS_IOC_VENDOR, 9) #define WS_SIO_INDEX_ADD_MCAST _WSAIOW(WS_IOC_VENDOR, 10) #define WS_SIO_INDEX_DEL_MCAST _WSAIOW(WS_IOC_VENDOR, 11) #define WS_RCVALL_OFF 0 #define WS_RCVALL_ON 1 #define WS_RCVALL_SOCKETLEVELONLY 2 #endif /* USE_WS_PREFIX */ #endif /* __WINE_MSTCPIP_H */ ================================================ FILE: wine/windows/mswsock.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _MSWSOCK_ #define _MSWSOCK_ #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifdef USE_WS_PREFIX #define WS(x) WS_##x #else #define WS(x) x #endif #ifndef USE_WS_PREFIX #define SO_CONNDATA 0x7000 #define SO_CONNOPT 0x7001 #define SO_DISCDATA 0x7002 #define SO_DISCOPT 0x7003 #define SO_CONNDATALEN 0x7004 #define SO_CONNOPTLEN 0x7005 #define SO_DISCDATALEN 0x7006 #define SO_DISCOPTLEN 0x7007 #else #define WS_SO_CONNDATA 0x7000 #define WS_SO_CONNOPT 0x7001 #define WS_SO_DISCDATA 0x7002 #define WS_SO_DISCOPT 0x7003 #define WS_SO_CONNDATALEN 0x7004 #define WS_SO_CONNOPTLEN 0x7005 #define WS_SO_DISCDATALEN 0x7006 #define WS_SO_DISCOPTLEN 0x7007 #endif #ifndef USE_WS_PREFIX #define SO_OPENTYPE 0x7008 #else #define WS_SO_OPENTYPE 0x7008 #endif #ifndef USE_WS_PREFIX #define SO_SYNCHRONOUS_ALERT 0x10 #define SO_SYNCHRONOUS_NONALERT 0x20 #else #define WS_SO_SYNCHRONOUS_ALERT 0x10 #define WS_SO_SYNCHRONOUS_NONALERT 0x20 #endif #ifndef USE_WS_PREFIX #define SO_MAXDG 0x7009 #define SO_MAXPATHDG 0x700A #define SO_UPDATE_ACCEPT_CONTEXT 0x700B #define SO_CONNECT_TIME 0x700C #define SO_UPDATE_CONNECT_CONTEXT 0x7010 #else #define WS_SO_MAXDG 0x7009 #define WS_SO_MAXPATHDG 0x700A #define WS_SO_UPDATE_ACCEPT_CONTEXT 0x700B #define WS_SO_CONNECT_TIME 0x700C #define WS_SO_UPDATE_CONNECT_CONTEXT 0x7010 #endif #ifndef USE_WS_PREFIX #define TCP_BSDURGENT 0x7000 #else #define WS_TCP_BSDURGENT 0x7000 #endif #ifndef USE_WS_PREFIX #define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12) #define SIO_SET_COMPATIBILITY_MODE _WSAIOW(IOC_VENDOR,300) #else #define WS_SIO_UDP_CONNRESET _WSAIOW(WS_IOC_VENDOR,12) #define WS_SIO_SET_COMPATIBILITY_MODE _WSAIOW(WS_IOC_VENDOR,300) #endif #define DE_REUSE_SOCKET TF_REUSE_SOCKET #ifndef USE_WS_PREFIX #define MSG_TRUNC 0x0100 #define MSG_CTRUNC 0x0200 #define MSG_BCAST 0x0400 #define MSG_MCAST 0x0800 #else #define WS_MSG_TRUNC 0x0100 #define WS_MSG_CTRUNC 0x0200 #define WS_MSG_BCAST 0x0400 #define WS_MSG_MCAST 0x0800 #endif #define TF_DISCONNECT 0x01 #define TF_REUSE_SOCKET 0x02 #define TF_WRITE_BEHIND 0x04 #define TF_USE_DEFAULT_WORKER 0x00 #define TF_USE_SYSTEM_THREAD 0x10 #define TF_USE_KERNEL_APC 0x20 #define TP_DISCONNECT TF_DISCONNECT #define TP_REUSE_SOCKET TF_REUSE_SOCKET #define TP_USE_DEFAULT_WORKER TF_USE_DEFAULT_WORKER #define TP_USE_SYSTEM_THREAD TF_USE_SYSTEM_THREAD #define TP_USE_KERNEL_APC TF_USE_KERNEL_APC #define TP_ELEMENT_MEMORY 1 #define TP_ELEMENT_FILE 2 #define TP_ELEMENT_EOP 4 #define WSAID_ACCEPTEX \ {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}} #define WSAID_CONNECTEX \ {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}} #define WSAID_DISCONNECTEX \ {0x7fda2e11,0x8630,0x436f,{0xa0,0x31,0xf5,0x36,0xa6,0xee,0xc1,0x57}} #define WSAID_GETACCEPTEXSOCKADDRS \ {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}} #define WSAID_TRANSMITFILE \ {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}} #define WSAID_TRANSMITPACKETS \ {0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}} #define WSAID_WSARECVMSG \ {0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}} #define WSAID_WSASENDMSG \ {0xa441e712,0x754f,0x43ca,{0x84,0xa7,0x0d,0xee,0x44,0xcf,0x60,0x6d}} typedef struct _TRANSMIT_FILE_BUFFERS { LPVOID Head; DWORD HeadLength; LPVOID Tail; DWORD TailLength; } TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS; typedef struct _TRANSMIT_PACKETS_ELEMENT { ULONG dwElFlags; ULONG cLength; union { struct { LARGE_INTEGER nFileOffset; HANDLE hFile; } DUMMYSTRUCTNAME; PVOID pBuffer; } DUMMYUNIONNAME; } TRANSMIT_PACKETS_ELEMENT, *PTRANSMIT_PACKETS_ELEMENT, *LPTRANSMIT_PACKETS_ELEMENT; typedef struct _WSACMSGHDR { SIZE_T cmsg_len; INT cmsg_level; INT cmsg_type; /* followed by UCHAR cmsg_data[] */ } WSACMSGHDR, *PWSACMSGHDR, *LPWSACMSGHDR; typedef enum _NLA_BLOB_DATA_TYPE { NLA_RAW_DATA, NLA_INTERFACE, /* interface name, type and speed */ NLA_802_1X_LOCATION, /* wireless network info */ NLA_CONNECTIVITY, /* status on network connectivity */ NLA_ICS /* internet connection sharing */ } NLA_BLOB_DATA_TYPE; typedef enum _NLA_CONNECTIVITY_TYPE { NLA_NETWORK_AD_HOC, /* private network */ NLA_NETWORK_MANAGED, /* network managed by domain */ NLA_NETWORK_UNMANAGED, NLA_NETWORK_UNKNOWN } NLA_CONNECTIVITY_TYPE; typedef enum _NLA_INTERNET { NLA_INTERNET_UNKNOWN, /* can't determine if connected or not */ NLA_INTERNET_NO, /* not connected to internet */ NLA_INTERNET_YES /* connected to internet */ } NLA_INTERNET; /* this structure is returned in the lpBlob field during calls to WSALookupServiceNext */ typedef struct _NLA_BLOB { /* the header defines the size of the current record and if there is a next record */ struct { NLA_BLOB_DATA_TYPE type; DWORD dwSize; DWORD nextOffset; /* if it's zero there are no more blobs */ } header; /* the following union interpretation depends on the header.type value * from the struct above. * the header.dwSize will be the size of all data, specially useful when * the last struct field is size [1] */ union { /* NLA_RAW_DATA */ CHAR rawData[1]; /* NLA_INTERFACE */ struct { DWORD dwType; DWORD dwSpeed; CHAR adapterName[1]; } interfaceData; /* NLA_802_1X_LOCATION */ struct { CHAR information[1]; } locationData; /* NLA_CONNECTIVITY */ struct { NLA_CONNECTIVITY_TYPE type; NLA_INTERNET internet; } connectivity; /* NLA_ICS */ struct { struct { DWORD speed; DWORD type; DWORD state; WCHAR machineName[256]; WCHAR sharedAdapterName[256]; } remote; } ICS; } data; } NLA_BLOB, *PNLA_BLOB; typedef BOOL (WINAPI * LPFN_ACCEPTEX)(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED); typedef BOOL (WINAPI * LPFN_CONNECTEX)(SOCKET, const struct WS(sockaddr) *, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED); typedef BOOL (WINAPI * LPFN_DISCONNECTEX)(SOCKET, LPOVERLAPPED, DWORD, DWORD); typedef VOID (WINAPI * LPFN_GETACCEPTEXSOCKADDRS)(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) **, LPINT, struct WS(sockaddr) **, LPINT); typedef BOOL (WINAPI * LPFN_TRANSMITFILE)(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD); typedef BOOL (WINAPI * LPFN_TRANSMITPACKETS)(SOCKET, LPTRANSMIT_PACKETS_ELEMENT, DWORD, DWORD, LPOVERLAPPED, DWORD); typedef INT (WINAPI * LPFN_WSARECVMSG)(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); typedef INT (WINAPI * LPFN_WSASENDMSG)(SOCKET, LPWSAMSG, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); BOOL WINAPI AcceptEx(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED); VOID WINAPI GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) **, LPINT, struct WS(sockaddr) **, LPINT); BOOL WINAPI TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD); INT WINAPI WSARecvEx(SOCKET, char *, INT, INT *); #ifdef __cplusplus } #endif #undef WS #endif /* _MSWSOCK_ */ ================================================ FILE: wine/windows/msxml.idl ================================================ /* * Copyright (C) 2005 Mike McCormack * Copyright (C) 2005 Vijay Kiran Kamuju * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #ifndef DO_NO_IMPORTS import "unknwn.idl"; import "wtypes.idl"; import "objidl.idl"; import "oaidl.idl"; #endif [ uuid(d63e0ce2-a0a2-11d0-9c02-00c04fc99c8e), version(2.0), helpstring("Microsoft XML, v2.0") ] library MSXML { importlib("stdole2.tlb"); #include #include [ local, object, odl, dual, oleautomation, uuid(65725580-9b5d-11d0-9bfe-00c04fc99c8e) ] interface IXMLElementCollection : IDispatch { [propput, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)] HRESULT length( [in] LONG v ); [propget, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)] HRESULT length( [retval, out] LONG *p ); [propget, id(DISPID_XMLELEMENTCOLLECTION_NEWENUM)] HRESULT _newEnum( [retval, out] IUnknown ** ppUnk ); [id(DISPID_XMLELEMENTCOLLECTION_ITEM)] HRESULT item( [optional, in] VARIANT var1, [optional, in] VARIANT var2, [retval, out] IDispatch ** ppDisp ); } [ local, object, uuid(3f7f31ac-e15f-11d0-9c25-00c04fc99c8e) ] interface IXMLElement : IDispatch { [propget, id(DISPID_XMLELEMENT_TAGNAME)] HRESULT tagName( [retval, out] BSTR *p); [propput, id(DISPID_XMLELEMENT_TAGNAME)] HRESULT tagName( [in] BSTR p ); [propget, id(DISPID_XMLELEMENT_PARENT)] HRESULT parent( [retval, out] IXMLElement **parent ); [id(DISPID_XMLELEMENT_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR strPropertyName, [in] VARIANT PropertyValue ); [id(DISPID_XMLELEMENT_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR strPropertyName, [retval, out] VARIANT *PropertyValue ); [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR strPropertyName ); [propget, id(DISPID_XMLELEMENT_CHILDREN)] HRESULT children( [retval, out] IXMLElementCollection **p ); [propget, id(DISPID_XMLELEMENT_TYPE)] HRESULT type( [retval, out] LONG *p ); [propget, id(DISPID_XMLELEMENT_TEXT)] HRESULT text( [retval, out] BSTR *p ); [propput, id(DISPID_XMLELEMENT_TEXT)] HRESULT text( [in] BSTR p ); [id(DISPID_XMLELEMENT_ADDCHILD)] HRESULT addChild( [in] IXMLElement *pChildElem, [in] LONG lIndex, [in] LONG lreserved ); [id(DISPID_XMLELEMENT_REMOVECHILD)] HRESULT removeChild( [in] IXMLElement *pChildElem ); } [ local, object, uuid(f52e2b61-18a1-11d1-b105-00805f49916b) ] interface IXMLDocument : IDispatch { [propget, id(DISPID_XMLDOCUMENT_ROOT)] HRESULT root( [retval, out] IXMLElement **p ); [propget, id(DISPID_XMLDOCUMENT_FILESIZE)] HRESULT fileSize( [retval, out] BSTR *p ); [propget, id(DISPID_XMLDOCUMENT_FILEMODIFIEDDATE)] HRESULT fileModifiedDate( [retval, out] BSTR *p ); [propget, id(DISPID_XMLDOCUMENT_FILEUPDATEDDATE)] HRESULT fileUpdatedDate( [retval, out] BSTR *p ); [propget, id(DISPID_XMLDOCUMENT_URL)] HRESULT URL( [retval, out] BSTR *p ); [propput, id(DISPID_XMLDOCUMENT_URL)] HRESULT URL( [in] BSTR p ); [propget, id(DISPID_XMLDOCUMENT_MIMETYPE)] HRESULT mimeType( [retval, out] BSTR *p ); [propget, id(DISPID_XMLDOCUMENT_READYSTATE)] HRESULT readyState( [retval, out] LONG *p ); [propget, id(DISPID_XMLDOCUMENT_CHARSET)] HRESULT charset( [retval, out] BSTR *p ); [propput, id(DISPID_XMLDOCUMENT_CHARSET)] HRESULT charset( [in] BSTR p ); [propget, id(DISPID_XMLDOCUMENT_VERSION)] HRESULT version( [retval, out] BSTR *p ); [propget, id(DISPID_XMLDOCUMENT_DOCTYPE)] HRESULT doctype( [retval, out] BSTR *p ); [propget, id(DISPID_XMLDOCUMENT_DTDURL)] HRESULT dtdURl( [retval, out] BSTR *p ); [id(DISPID_XMLDOCUMENT_CREATEELEMENT)] HRESULT createElement( [in] VARIANT vType, [optional, in] VARIANT var1, [retval, out] IXMLElement **ppElem ); } [ local, object, uuid(2B8DE2FF-8D2D-11d1-B2FC-00C04FD915A9) ] interface IXMLElement2 : IDispatch { [propget, id(DISPID_XMLELEMENT_TAGNAME)] HRESULT tagName([retval, out] BSTR *p); [propput, id(DISPID_XMLELEMENT_TAGNAME)] HRESULT tagName([in] BSTR p); [propget, id(DISPID_XMLELEMENT_PARENT)] HRESULT parent([retval, out]IXMLElement2 **ppParent); [id(DISPID_XMLELEMENT_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR strPropertyName, [in] VARIANT PropertyValue); [id(DISPID_XMLELEMENT_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR strPropertyName, [retval, out] VARIANT *PropertyValue); [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)] HRESULT removeAttribute([in] BSTR strPropertyName); [propget, id(DISPID_XMLELEMENT_CHILDREN)] HRESULT children([retval, out] IXMLElementCollection **pp); [propget, id(DISPID_XMLELEMENT_TYPE)] HRESULT type([retval, out] LONG *plType); [propget, id(DISPID_XMLELEMENT_TEXT)] HRESULT text([retval, out] BSTR *p); [propput, id(DISPID_XMLELEMENT_TEXT)] HRESULT text([in] BSTR p); [id(DISPID_XMLELEMENT_ADDCHILD)] HRESULT addChild( [in] IXMLElement2 *pChildElem, [in] LONG lIndex, [in] LONG lReserved); [id(DISPID_XMLELEMENT_REMOVECHILD)] HRESULT removeChild([in]IXMLElement2 *pChildElem); [propget, id(DISPID_XMLELEMENT_ATTRIBUTES)] HRESULT attributes([retval, out] IXMLElementCollection **pp); } [ local, object, uuid(2B8DE2FE-8D2D-11d1-B2FC-00C04FD915A9) ] interface IXMLDocument2 : IDispatch { [propget, id(DISPID_XMLDOCUMENT_ROOT)] HRESULT root([retval, out] IXMLElement2 **p); [propget, id(DISPID_XMLDOCUMENT_FILESIZE)] HRESULT fileSize([retval, out] BSTR *p); [propget, id(DISPID_XMLDOCUMENT_FILEMODIFIEDDATE)] HRESULT fileModifiedDate([retval, out] BSTR *p); [propget, id(DISPID_XMLDOCUMENT_FILEUPDATEDDATE)] HRESULT fileUpdatedDate([retval, out] BSTR *p); [propget, id(DISPID_XMLDOCUMENT_URL)] HRESULT URL([retval, out] BSTR *p); [propput, id(DISPID_XMLDOCUMENT_URL)] HRESULT URL([in] BSTR p); [propget, id(DISPID_XMLDOCUMENT_MIMETYPE)] HRESULT mimeType([retval, out] BSTR *p); [propget, id(DISPID_XMLDOCUMENT_READYSTATE)] HRESULT readyState([retval, out]LONG *pl); [propget, id(DISPID_XMLDOCUMENT_CHARSET)] HRESULT charset([retval, out]BSTR *p); [propput, id(DISPID_XMLDOCUMENT_CHARSET)] HRESULT charset([in]BSTR p); [propget, id(DISPID_XMLDOCUMENT_VERSION)] HRESULT version([retval, out]BSTR *p); [propget, id(DISPID_XMLDOCUMENT_DOCTYPE)] HRESULT doctype([retval, out]BSTR *p); [propget, restricted, id(DISPID_XMLDOCUMENT_DTDURL)] HRESULT dtdURL([retval, out]BSTR *p); [id(DISPID_XMLDOCUMENT_CREATEELEMENT)] HRESULT createElement( [in] VARIANT vType, [optional, in] VARIANT var, [retval, out] IXMLElement2 **ppElem); [propget, id(DISPID_XMLDOCUMENT_ASYNC)] HRESULT async([retval, out] VARIANT_BOOL *pf); [propput, id(DISPID_XMLDOCUMENT_ASYNC)] HRESULT async([in] VARIANT_BOOL f); } typedef enum tagXMLEMEM_TYPE { XMLELEMTYPE_ELEMENT = 0, XMLELEMTYPE_TEXT = 1, XMLELEMTYPE_COMMENT = 2, XMLELEMTYPE_DOCUMENT = 3, XMLELEMTYPE_DTD = 4, XMLELEMTYPE_PI = 5, XMLELEMTYPE_OTHER = 6 } XMLELEM_TYPE; typedef struct _xml_error { UINT _nLine; BSTR _pchBuf; BSTR _cchBuf; UINT _ich; BSTR _pszFound; BSTR _pszExpected; DWORD _reserved1; DWORD _reserved2; } XML_ERROR; [ local, object, uuid(d4d4a0fc-3b73-11d1-b2b4-00c04fb92596) ] interface IXMLAttribute : IDispatch { [propget, id(DISPID_XMLATTRIBUTE_NAME)] HRESULT name( [retval, out] BSTR *p ); [propget, id(DISPID_XMLATTRIBUTE_VALUE)] HRESULT value( [retval, out] BSTR *p ); } [ local, object, uuid(948c5ad3-c58d-11d0-9c0b-00c04fc99c8e) ] interface IXMLError : IUnknown { HRESULT GetErrorInfo([out]XML_ERROR *pErrorReturn); } [ object, local, uuid(D9F1E15A-CCDB-11d0-9C0C-00C04FC99C8E) ] interface IXMLElementNotificationSink : IDispatch { [id(DISPID_XMLNOTIFSINK_CHILDADDED)] HRESULT ChildAdded([in]IDispatch *pChildElem); } [ helpstring("Msxml"), progid("Msxml"), threading(both), version(1.0), uuid(cfc399af-d876-11d0-9c10-00c04fc99c8e) ] coclass XMLDocument { [default] interface IXMLDocument; } } /* Library MSXML */ ================================================ FILE: wine/windows/msxml2.idl ================================================ /* * Copyright (C) 2005 Vijay Kiran Kamuju * Copyright (C) 2008 Alistair Leslie-Hughes * Copyright (C) 2010 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include import "unknwn.idl"; import "objidl.idl"; import "oaidl.idl"; #if !defined(progid) && !defined(__WIDL__) #define threading(model) #define progid(str) #define vi_progid(str) #endif [ uuid(f5078f18-c551-11d3-89b9-0000f81fe221), version(3.0), helpstring("Microsoft XML, v3.0") ] library MSXML2 { importlib("stdole2.tlb"); interface IXMLDOMImplementation; interface IXMLDOMNode; interface IXMLDOMDocumentFragment; interface IXMLDOMDocument; interface IXMLDOMSchemaCollection; interface IXMLDOMDocument2; interface IXMLDOMNodeList; interface IXMLDOMNamedNodeMap; interface IXMLDOMCharacterData; interface IXMLDOMAttribute; interface IXMLDOMElement; interface IXMLDOMText; interface IXMLDOMComment; interface IXMLDOMProcessingInstruction; interface IXMLDOMCDATASection; interface IXMLDOMDocumentType; interface IXMLDOMNotation; interface IXMLDOMEntity; interface IXMLDOMEntityReference; interface IXMLDOMParseError; interface IXMLDOMParseErrorCollection; interface IXTLRuntime; interface IXSLTemplate; interface IXSLProcessor; /* SAX Interfaces */ interface ISAXAttributes; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXEntityResolver; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface ISAXLocator; interface ISAXXMLFilter; interface ISAXXMLReader; interface IVBSAXAttributes; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXEntityResolver; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; interface IVBSAXLocator; interface IVBSAXXMLFilter; interface IVBSAXXMLReader; interface IMXAttributes; interface IMXReaderControl; interface IMXWriter; interface IXMLDOMSchemaCollection2; interface ISchemaStringCollection; interface ISchemaItemCollection; interface ISchemaItem; interface ISchema; interface ISchemaParticle; interface ISchemaAttribute; interface ISchemaElement; interface ISchemaType; interface ISchemaComplexType; interface ISchemaAttributeGroup; interface ISchemaModelGroup; interface ISchemaAny; interface ISchemaIdentityConstraint; interface ISchemaNotation; cpp_quote("#define DOMDocument DOMDocument2") cpp_quote("#define CLSID_DOMDocument CLSID_DOMDocument2") cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED") cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED") typedef enum tagDOMNodeType { NODE_INVALID = 0, NODE_ELEMENT = 1, NODE_ATTRIBUTE = 2, NODE_TEXT = 3, NODE_CDATA_SECTION = 4, NODE_ENTITY_REFERENCE = 5, NODE_ENTITY = 6, NODE_PROCESSING_INSTRUCTION = 7, NODE_COMMENT = 8, NODE_DOCUMENT = 9, NODE_DOCUMENT_TYPE = 10, NODE_DOCUMENT_FRAGMENT = 11, NODE_NOTATION = 12 } DOMNodeType; cpp_quote("#endif") typedef enum _SOMITEMTYPE { SOMITEM_SCHEMA = 0x1000, SOMITEM_ATTRIBUTE = 0x1001, SOMITEM_ATTRIBUTEGROUP = 0x1002, SOMITEM_NOTATION = 0x1003, SOMITEM_IDENTITYCONSTRAINT = 0x1100, SOMITEM_KEY = 0x1101, SOMITEM_KEYREF = 0x1102, SOMITEM_UNIQUE = 0x1103, SOMITEM_ANYTYPE = 0x2000, SOMITEM_DATATYPE = 0x2100, SOMITEM_DATATYPE_ANYTYPE = 0x2101, SOMITEM_DATATYPE_ANYURI = 0x2102, SOMITEM_DATATYPE_BASE64BINARY = 0x2103, SOMITEM_DATATYPE_BOOLEAN = 0x2104, SOMITEM_DATATYPE_BYTE = 0x2105, SOMITEM_DATATYPE_DATE = 0x2106, SOMITEM_DATATYPE_DATETIME = 0x2107, SOMITEM_DATATYPE_DAY = 0x2108, SOMITEM_DATATYPE_DECIMAL = 0x2109, SOMITEM_DATATYPE_DOUBLE = 0x210A, SOMITEM_DATATYPE_DURATION = 0x210B, SOMITEM_DATATYPE_ENTITIES = 0x210C, SOMITEM_DATATYPE_ENTITY = 0x210D, SOMITEM_DATATYPE_FLOAT = 0x210E, SOMITEM_DATATYPE_HEXBINARY = 0x210F, SOMITEM_DATATYPE_ID = 0x2110, SOMITEM_DATATYPE_IDREF = 0x2111, SOMITEM_DATATYPE_IDREFS = 0x2112, SOMITEM_DATATYPE_INT = 0x2113, SOMITEM_DATATYPE_INTEGER = 0x2114, SOMITEM_DATATYPE_LANGUAGE = 0x2115, SOMITEM_DATATYPE_LONG = 0x2116, SOMITEM_DATATYPE_MONTH = 0x2117, SOMITEM_DATATYPE_MONTHDAY = 0x2118, SOMITEM_DATATYPE_NAME = 0x2119, SOMITEM_DATATYPE_NCNAME = 0x211A, SOMITEM_DATATYPE_NEGATIVEINTEGER = 0x211B, SOMITEM_DATATYPE_NMTOKEN = 0x211C, SOMITEM_DATATYPE_NMTOKENS = 0x211D, SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E, SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F, SOMITEM_DATATYPE_NORMALIZEDSTRING = 0x2120, SOMITEM_DATATYPE_NOTATION = 0x2121, SOMITEM_DATATYPE_POSITIVEINTEGER = 0x2122, SOMITEM_DATATYPE_QNAME = 0x2123, SOMITEM_DATATYPE_SHORT = 0x2124, SOMITEM_DATATYPE_STRING = 0x2125, SOMITEM_DATATYPE_TIME = 0x2126, SOMITEM_DATATYPE_TOKEN = 0x2127, SOMITEM_DATATYPE_UNSIGNEDBYTE = 0x2128, SOMITEM_DATATYPE_UNSIGNEDINT = 0x2129, SOMITEM_DATATYPE_UNSIGNEDLONG = 0x212A, SOMITEM_DATATYPE_UNSIGNEDSHORT = 0x212B, SOMITEM_DATATYPE_YEAR = 0x212C, SOMITEM_DATATYPE_YEARMONTH = 0x212D, SOMITEM_DATATYPE_ANYSIMPLETYPE = 0x21FF, SOMITEM_SIMPLETYPE = 0x2200, SOMITEM_COMPLEXTYPE = 0x2400, SOMITEM_PARTICLE = 0x4000, SOMITEM_ANY = 0x4001, SOMITEM_ANYATTRIBUTE = 0x4002, SOMITEM_ELEMENT = 0x4003, SOMITEM_GROUP = 0x4100, SOMITEM_ALL = 0x4101, SOMITEM_CHOICE = 0x4102, SOMITEM_SEQUENCE = 0x4103, SOMITEM_EMPTYPARTICLE = 0x4104, SOMITEM_NULL = 0x0800, SOMITEM_NULL_TYPE = 0x2800, SOMITEM_NULL_ANY = 0x4801, SOMITEM_NULL_ANYATTRIBUTE = 0x4802, SOMITEM_NULL_ELEMENT = 0x4803, } SOMITEMTYPE; typedef enum _SCHEMAUSE { SCHEMAUSE_OPTIONAL, SCHEMAUSE_PROHIBITED, SCHEMAUSE_REQUIRED, } SCHEMAUSE; typedef enum _SCHEMADERIVATIONMETHOD { SCHEMADERIVATIONMETHOD_EMPTY = 0x0000, SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001, SCHEMADERIVATIONMETHOD_EXTENSION = 0x0002, SCHEMADERIVATIONMETHOD_RESTRICTION = 0x0004, SCHEMADERIVATIONMETHOD_LIST = 0x0008, SCHEMADERIVATIONMETHOD_UNION = 0x0010, SCHEMADERIVATIONMETHOD_ALL = 0x00FF, SCHEMADERIVATIONMETHOD_NONE = 0x0100, } SCHEMADERIVATIONMETHOD; typedef enum _SCHEMACONTENTTYPE { SCHEMACONTENTTYPE_EMPTY, SCHEMACONTENTTYPE_TEXTONLY, SCHEMACONTENTTYPE_ELEMENTONLY, SCHEMACONTENTTYPE_MIXED, } SCHEMACONTENTTYPE; typedef enum _SCHEMAPROCESSCONTENTS { SCHEMAPROCESSCONTENTS_NONE, SCHEMAPROCESSCONTENTS_SKIP, SCHEMAPROCESSCONTENTS_LAX, SCHEMAPROCESSCONTENTS_STRICT, } SCHEMAPROCESSCONTENTS; typedef enum _SCHEMAWHITESPACE { SCHEMAWHITESPACE_NONE = -1, SCHEMAWHITESPACE_PRESERVE = 0, SCHEMAWHITESPACE_REPLACE = 1, SCHEMAWHITESPACE_COLLAPSE = 2, } SCHEMAWHITESPACE; typedef enum _SCHEMATYPEVARIETY { SCHEMATYPEVARIETY_NONE = -1, SCHEMATYPEVARIETY_ATOMIC = 0, SCHEMATYPEVARIETY_LIST = 1, SCHEMATYPEVARIETY_UNION = 2, } SCHEMATYPEVARIETY; [ local, object, odl, dual, oleautomation, uuid(65725580-9b5d-11d0-9bfe-00c04fc99c8e) ] interface IXMLElementCollection : IDispatch { [propput, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)] HRESULT length( [in] LONG v ); [propget, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)] HRESULT length( [retval, out] LONG *p ); [propget, id(DISPID_XMLELEMENTCOLLECTION_NEWENUM)] HRESULT _newEnum( [retval, out] IUnknown ** ppUnk ); [id(DISPID_XMLELEMENTCOLLECTION_ITEM)] HRESULT item( [optional, in] VARIANT var1, [optional, in] VARIANT var2, [retval, out] IDispatch ** ppDisp ); } [ local, object, uuid(3f7f31ac-e15f-11d0-9c25-00c04fc99c8e) ] interface IXMLElement : IDispatch { [propget, id(DISPID_XMLELEMENT_TAGNAME)] HRESULT tagName( [retval, out] BSTR *p); [propput, id(DISPID_XMLELEMENT_TAGNAME)] HRESULT tagName( [in] BSTR p ); [propget, id(DISPID_XMLELEMENT_PARENT)] HRESULT parent( [retval, out] IXMLElement **parent ); [id(DISPID_XMLELEMENT_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR strPropertyName, [in] VARIANT PropertyValue ); [id(DISPID_XMLELEMENT_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR strPropertyName, [retval, out] VARIANT *PropertyValue ); [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR strPropertyName ); [propget, id(DISPID_XMLELEMENT_CHILDREN)] HRESULT children( [retval, out] IXMLElementCollection **p ); [propget, id(DISPID_XMLELEMENT_TYPE)] HRESULT type( [retval, out] LONG *p ); [propget, id(DISPID_XMLELEMENT_TEXT)] HRESULT text( [retval, out] BSTR *p ); [propput, id(DISPID_XMLELEMENT_TEXT)] HRESULT text( [in] BSTR p ); [id(DISPID_XMLELEMENT_ADDCHILD)] HRESULT addChild( [in] IXMLElement *pChildElem, [in] LONG lIndex, [in] LONG lreserved ); [id(DISPID_XMLELEMENT_REMOVECHILD)] HRESULT removeChild( [in] IXMLElement *pChildElem ); } [ local, object, dual, oleautomation, uuid (2933BF80-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMNode : IDispatch { [propget, id(DISPID_DOM_NODE_NODENAME)] HRESULT nodeName([retval, out] BSTR *p); [propget, id(DISPID_DOM_NODE_NODEVALUE)] HRESULT nodeValue([retval, out] VARIANT *var1); [propput, id(DISPID_DOM_NODE_NODEVALUE)] HRESULT nodeValue([in] VARIANT var1); [propget, id(DISPID_DOM_NODE_NODETYPE)] HRESULT nodeType([retval, out] DOMNodeType *domNodeType); [propget, id(DISPID_DOM_NODE_PARENTNODE)] HRESULT parentNode([retval, out] IXMLDOMNode **parent); [propget, id(DISPID_DOM_NODE_CHILDNODES)] HRESULT childNodes([retval, out] IXMLDOMNodeList **outList); [propget, id(DISPID_DOM_NODE_FIRSTCHILD)] HRESULT firstChild([retval, out] IXMLDOMNode **domNode); [propget, id(DISPID_DOM_NODE_LASTCHILD)] HRESULT lastChild([retval, out] IXMLDOMNode **domNode); [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)] HRESULT previousSibling([retval, out] IXMLDOMNode **domNode); [propget, id(DISPID_DOM_NODE_NEXTSIBLING)] HRESULT nextSibling([retval, out] IXMLDOMNode **domNode); [propget, id(DISPID_DOM_NODE_ATTRIBUTES)] HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap); [id(DISPID_DOM_NODE_INSERTBEFORE)] HRESULT insertBefore( [in] IXMLDOMNode *newNode, [in] VARIANT var1, [retval, out] IXMLDOMNode **outOldNode); [id(DISPID_DOM_NODE_REPLACECHILD)] HRESULT replaceChild( [in] IXMLDOMNode *newNode, [in] IXMLDOMNode *oldNode, [retval, out] IXMLDOMNode **outOldNode); [id(DISPID_DOM_NODE_REMOVECHILD)] HRESULT removeChild( [in] IXMLDOMNode *domNode, [retval, out] IXMLDOMNode **oldNode); [id(DISPID_DOM_NODE_APPENDCHILD)] HRESULT appendChild( [in] IXMLDOMNode *newNode, [retval, out] IXMLDOMNode **outNewNode); [id(DISPID_DOM_NODE_HASCHILDNODES)] HRESULT hasChildNodes( [retval, out] VARIANT_BOOL *pbool); [propget, id(DISPID_DOM_NODE_OWNERDOC)] HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument); [id(DISPID_DOM_NODE_CLONENODE)] HRESULT cloneNode( [in] VARIANT_BOOL pbool, [retval, out] IXMLDOMNode **outNode); [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)] HRESULT nodeTypeString([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_NODE_TEXT)] HRESULT text([retval, out] BSTR *p); [propput, id(DISPID_XMLDOM_NODE_TEXT)] HRESULT text([in] BSTR p); [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)] HRESULT specified([retval, out] VARIANT_BOOL *pbool); [propget, id(DISPID_XMLDOM_NODE_DEFINITION)] HRESULT definition([retval,out] IXMLDOMNode **domNode); [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)] HRESULT nodeTypedValue([retval, out] VARIANT *var1); [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)] HRESULT nodeTypedValue([in] VARIANT var1); [propget, id(DISPID_XMLDOM_NODE_DATATYPE)] HRESULT dataType([retval, out] VARIANT *var1); [propput, id(DISPID_XMLDOM_NODE_DATATYPE)] HRESULT dataType([in] BSTR p); [propget, id(DISPID_XMLDOM_NODE_XML)] HRESULT xml([retval, out] BSTR *p); [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)] HRESULT transformNode( [in] IXMLDOMNode *domNode, [retval, out] BSTR *p); [id(DISPID_XMLDOM_NODE_SELECTNODES)] HRESULT selectNodes( [in] BSTR p, [retval, out] IXMLDOMNodeList **outList); [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)] HRESULT selectSingleNode( [in] BSTR p, [retval, out] IXMLDOMNode **outNode); [propget,id(DISPID_XMLDOM_NODE_PARSED)] HRESULT parsed([retval, out] VARIANT_BOOL *pbool); [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)] HRESULT namespaceURI([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_NODE_PREFIX)] HRESULT prefix([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_NODE_BASENAME)] HRESULT baseName([retval, out] BSTR *p); [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)] HRESULT transformNodeToObject( [in] IXMLDOMNode *domNode, [in] VARIANT var1); } [ local, object, dual, oleautomation, uuid (2933BF81-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMDocument : IXMLDOMNode { [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)] HRESULT doctype([retval, out] IXMLDOMDocumentType **docType); [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)] HRESULT implementation([retval, out] IXMLDOMImplementation **impl); [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)] HRESULT documentElement([retval, out] IXMLDOMElement **domElement); [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)] HRESULT documentElement([in] IXMLDOMElement *domElement); [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)] HRESULT createElement( [in] BSTR p, [retval, out] IXMLDOMElement **domElement); [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)] HRESULT createDocumentFragment( [retval, out] IXMLDOMDocumentFragment **docFrag); [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)] HRESULT createTextNode( [in] BSTR p, [retval, out] IXMLDOMText **text); [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)] HRESULT createComment( [in] BSTR p, [retval, out] IXMLDOMComment **comment); [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)] HRESULT createCDATASection( [in] BSTR p, [retval, out] IXMLDOMCDATASection **cdata); [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)] HRESULT createProcessingInstruction( [in] BSTR target, [in] BSTR data, [retval, out] IXMLDOMProcessingInstruction **pi); [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)] HRESULT createAttribute( [in] BSTR p, [retval, out] IXMLDOMAttribute **attribute); [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)] HRESULT createEntityReference( [in] BSTR p, [retval, out] IXMLDOMEntityReference **entityRef); [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)] HRESULT getElementsByTagName( [in] BSTR p, [retval, out] IXMLDOMNodeList **resultList); [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)] HRESULT createNode( [in] VARIANT var, [in] BSTR name, [in] BSTR uri, [retval, out] IXMLDOMNode **node); [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)] HRESULT nodeFromID( [in] BSTR id, [retval, out] IXMLDOMNode **node); [id(DISPID_XMLDOM_DOCUMENT_LOAD)] HRESULT load( [in] VARIANT var1, [retval, out] VARIANT_BOOL *pbool); [propget, id(DISPID_READYSTATE)] HRESULT readyState([retval, out] LONG *value); [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)] HRESULT parseError([retval, out] IXMLDOMParseError **err); [propget, id(DISPID_XMLDOM_DOCUMENT_URL)] HRESULT url([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)] HRESULT async([retval, out] VARIANT_BOOL *pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)] HRESULT async([in] VARIANT_BOOL pbool); [id(DISPID_XMLDOM_DOCUMENT_ABORT)] HRESULT abort(); [id(DISPID_XMLDOM_DOCUMENT_LOADXML)] HRESULT loadXML( [in] BSTR p, [out, retval] VARIANT_BOOL *pbool); [id(DISPID_XMLDOM_DOCUMENT_SAVE)] HRESULT save( [in] VARIANT var1); [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)] HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)] HRESULT validateOnParse([in] VARIANT_BOOL pbool); [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)] HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)] HRESULT resolveExternals([in] VARIANT_BOOL pbool); [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)] HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)] HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)] HRESULT onreadystatechange([in] VARIANT var1); [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)] HRESULT ondataavailable([in] VARIANT var1); [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)] HRESULT ontransformnode([in] VARIANT var1); } [ local, object, dual, oleautomation, uuid (373984c8-b845-449b-91e7-45ac83036ade) ] interface IXMLDOMSchemaCollection : IDispatch { [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)] HRESULT add( [in] BSTR uri, [in] VARIANT var); [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)] HRESULT get( [in] BSTR uri, [retval, out] IXMLDOMNode **node); [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)] HRESULT remove( [in] BSTR uri); [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)] HRESULT length( [retval, out] LONG *length); [propget, id(DISPID_VALUE)] HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len); [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)] HRESULT addCollection( [in] IXMLDOMSchemaCollection *otherCollection); [propget, id(DISPID_NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **ppUnk); } [ local, object, dual, oleautomation, uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a), ] interface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection { [id(DISPID_SOM_VALIDATE)] HRESULT validate(); [propput, id(DISPID_SOM_VALIDATEONLOAD)] HRESULT validateOnLoad( [in] VARIANT_BOOL validateOnLoad); [propget, id(DISPID_SOM_VALIDATEONLOAD)] HRESULT validateOnLoad( [out,retval] VARIANT_BOOL* validateOnLoad); [id(DISPID_SOM_GETSCHEMA)] HRESULT getSchema( [in] BSTR namespaceURI, [out,retval] ISchema** schema); [id(DISPID_SOM_GETDECLARATION)] HRESULT getDeclaration( [in] IXMLDOMNode* node, [out,retval]ISchemaItem** item); } [ local, object, dual, oleautomation, uuid (2933BF95-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMDocument2 : IXMLDOMDocument { [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)] HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection); [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)] HRESULT schemas([retval, out] VARIANT *var1); [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)] HRESULT schemas([in] VARIANT var1); [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)] HRESULT validate( [retval, out] IXMLDOMParseError **err); [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)] HRESULT setProperty( [in] BSTR p, [in] VARIANT var); [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)] HRESULT getProperty( [in] BSTR p, [retval, out] VARIANT *var); } [ local, object, dual, uuid(2933bf96-7b36-11d2-b20e-00c04f983e60), oleautomation, ] interface IXMLDOMDocument3 : IXMLDOMDocument2 { [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)] HRESULT validateNode( [in] IXMLDOMNode *node, [out, retval] IXMLDOMParseError **error); [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)] HRESULT importNode( [in] IXMLDOMNode *node, [in] VARIANT_BOOL deep, [out, retval] IXMLDOMNode **clone); } [ local, object, dual, oleautomation, uuid (2933BF82-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMNodeList : IDispatch { [propget, id(DISPID_VALUE)] HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode); [propget, id(DISPID_DOM_NODELIST_LENGTH)] HRESULT length([retval, out] LONG *lLength); [id(DISPID_XMLDOM_NODELIST_NEXTNODE)] HRESULT nextNode( [retval, out] IXMLDOMNode **outNode); [id(DISPID_XMLDOM_NODELIST_RESET)] HRESULT reset(); [propget, id(DISPID_NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **ppUnk); } [ local, object, dual, oleautomation, uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E) ] interface IXMLDOMSelection : IXMLDOMNodeList { [propget, id(DISPID_XMLDOM_SELECTION_EXPR)] HRESULT expr([retval, out] BSTR *p); [propput, id(DISPID_XMLDOM_SELECTION_EXPR)] HRESULT expr([in] BSTR p); [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)] HRESULT context([retval, out] IXMLDOMNode **ppNode); [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)] HRESULT context([in] IXMLDOMNode * pNode); [id(DISPID_XMLDOM_SELECTION_PEEKNODE)] HRESULT peekNode( [retval, out] IXMLDOMNode **ppNode); [id(DISPID_XMLDOM_SELECTION_MATCHES)] HRESULT matches( [in] IXMLDOMNode *pNode, [retval, out] IXMLDOMNode **ppNode); [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)] HRESULT removeNext( [retval, out] IXMLDOMNode **ppNode); [id(DISPID_XMLDOM_SELECTION_REMOVEALL)] HRESULT removeAll(); [id(DISPID_XMLDOM_SELECTION_CLONE)] HRESULT clone( [retval, out] IXMLDOMSelection **ppNode); [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)] HRESULT getProperty( [in] BSTR p, [retval, out] VARIANT * var); [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)] HRESULT setProperty( [in] BSTR p, [in] VARIANT var); } [ local, object, dual, oleautomation, uuid (2933BF83-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMNamedNodeMap : IDispatch { [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)] HRESULT getNamedItem( [in] BSTR p, [retval, out] IXMLDOMNode **outNode); [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)] HRESULT setNamedItem( [in] IXMLDOMNode *newNode, [retval, out] IXMLDOMNode **outNode); [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)] HRESULT removeNamedItem( [in] BSTR p, [retval, out] IXMLDOMNode **outNode); [propget, id(DISPID_VALUE)] HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode); [propget, id(DISPID_DOM_NODELIST_LENGTH)] HRESULT length([retval, out] LONG *lLength); [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)] HRESULT getQualifiedItem( [in] BSTR name, [in] BSTR uri, [retval, out] IXMLDOMNode **outNode); [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)] HRESULT removeQualifiedItem( [in] BSTR name, [in] BSTR uri, [retval, out] IXMLDOMNode **outNode); [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)] HRESULT nextNode( [retval, out] IXMLDOMNode **outNode); [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)] HRESULT reset(); [propget, id(DISPID_NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **ppUnk); } [ local, object, dual, oleautomation, uuid (3efaa413-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMDocumentFragment : IXMLDOMNode { } [ local, object, dual, oleautomation, uuid (2933BF84-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMCharacterData : IXMLDOMNode { [propget, id(DISPID_DOM_DATA_DATA)] HRESULT data([retval, out] BSTR *p); [propput, id(DISPID_DOM_DATA_DATA)] HRESULT data([in] BSTR data); [propget, id(DISPID_DOM_DATA_LENGTH)] HRESULT length([retval, out] LONG *len); [id(DISPID_DOM_DATA_SUBSTRING)] HRESULT substringData( [in] LONG offset, [in] LONG count, [retval, out] BSTR *p); [id(DISPID_DOM_DATA_APPEND)] HRESULT appendData( [in] BSTR p); [id(DISPID_DOM_DATA_INSERT)] HRESULT insertData( [in] LONG offset, [in] BSTR p); [id(DISPID_DOM_DATA_DELETE)] HRESULT deleteData( [in] LONG offset, [in] LONG count); [id(DISPID_DOM_DATA_REPLACE)] HRESULT replaceData( [in] LONG offset, [in] LONG count, [in] BSTR p); } [ local, object, dual, oleautomation, uuid (2933BF85-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMAttribute : IXMLDOMNode { [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)] HRESULT name([retval, out] BSTR *p); [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)] HRESULT value([retval, out] VARIANT *var1); [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)] HRESULT value([in] VARIANT var1); } [ local, object, dual, oleautomation, uuid (2933BF86-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMElement : IXMLDOMNode { [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)] HRESULT tagName([retval, out] BSTR *p); [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR p, [retval, out] VARIANT *var); [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR p, [in] VARIANT var); [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR p); [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)] HRESULT getAttributeNode( [in] BSTR p, [retval, out] IXMLDOMAttribute **attributeNode); [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)] HRESULT setAttributeNode( [in] IXMLDOMAttribute *domAttribute, [retval, out] IXMLDOMAttribute **attributeNode); [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)] HRESULT removeAttributeNode( [in] IXMLDOMAttribute *domAttribute, [retval, out] IXMLDOMAttribute **attributeNode); [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)] HRESULT getElementsByTagName( [in] BSTR p, [retval, out] IXMLDOMNodeList **resultList); [id(DISPID_DOM_ELEMENT_NORMALIZE)] HRESULT normalize(); } [ local, object, dual, oleautomation, uuid (2933BF87-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMText : IXMLDOMCharacterData { [id(DISPID_DOM_TEXT_SPLITTEXT)] HRESULT splitText( [in] LONG offset, [retval, out] IXMLDOMText **txtNode); } [ local, object, dual, oleautomation, uuid (2933BF88-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMComment : IXMLDOMCharacterData { } [ local, object, dual, oleautomation, uuid (2933BF89-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMProcessingInstruction : IXMLDOMNode { [propget, id(DISPID_DOM_PI_TARGET)] HRESULT target([retval, out] BSTR *p); [propget, id(DISPID_DOM_PI_DATA)] HRESULT data([retval, out] BSTR *p); [propput, id(DISPID_DOM_PI_DATA)] HRESULT data([in] BSTR p); } [ local, object, dual, oleautomation, uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMCDATASection : IXMLDOMText { } [ local, object, dual, oleautomation, uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMDocumentType : IXMLDOMNode { [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)] HRESULT name([retval, out] BSTR *p); [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)] HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap); [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)] HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap); } [ local, object, dual, oleautomation, uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMNotation : IXMLDOMNode { [propget, id(DISPID_DOM_NOTATION_PUBLICID)] HRESULT publicId([retval, out] VARIANT *id); [propget, id(DISPID_DOM_NOTATION_SYSTEMID)] HRESULT systemId([retval, out] VARIANT *id); } [ local, object, dual, oleautomation, uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMEntity : IXMLDOMNode { [propget, id(DISPID_DOM_ENTITY_PUBLICID)] HRESULT publicId([retval, out] VARIANT *id1); [propget, id(DISPID_DOM_ENTITY_SYSTEMID)] HRESULT systemId([retval, out] VARIANT *id1); [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)] HRESULT notationName([retval, out] BSTR *p); } [ local, object, dual, oleautomation, uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMEntityReference : IXMLDOMNode { } [ local, object, dual, oleautomation, uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMImplementation : IDispatch { [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)] HRESULT hasFeature( [in] BSTR feature, [in] BSTR version, [retval, out] VARIANT_BOOL *pbool); } [ local, object, dual, oleautomation, uuid (3efaa425-272f-11d2-836f-0000f87a7782) ] interface IXTLRuntime : IXMLDOMNode { [id(DISPID_XTLRUNTIME_UNIQUEID)] HRESULT uniqueID( [in]IXMLDOMNode *pNode, [retval, out]LONG *pID); [id(DISPID_XTLRUNTIME_DEPTH)] HRESULT depth( [in] IXMLDOMNode *pNode, [retval, out]LONG * pDepth); [id(DISPID_XTLRUNTIME_CHILDNUMBER)] HRESULT childNumber( [in]IXMLDOMNode *pNode, [retval, out] LONG *pNumber); [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)] HRESULT ancestorChildNumber( [in]BSTR bstr, [in]IXMLDOMNode *pNode, [retval, out]LONG *pNumber); [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)] HRESULT absoluteChildNumber( [in]IXMLDOMNode *pNode, [retval, out]LONG *pNumber); [id(DISPID_XTLRUNTIME_FORMATINDEX)] HRESULT formatIndex( [in] LONG lIndex, [in] BSTR bstr, [retval, out]BSTR *pbstr); [id(DISPID_XTLRUNTIME_FORMATNUMBER)] HRESULT formatNumber( [in] double dblNumber, [in] BSTR bstr, [retval, out]BSTR *pbstr); [id(DISPID_XTLRUNTIME_FORMATDATE)] HRESULT formatDate( [in] VARIANT var1, [in] BSTR bstr, [optional, in] VARIANT var2, [retval, out]BSTR *pbstr); [id(DISPID_XTLRUNTIME_FORMATTIME)] HRESULT formatTime( [in] VARIANT var1, [in] BSTR bstr, [optional, in] VARIANT var2, [retval, out]BSTR *pbstr); } [ local, object, odl, dual, oleautomation, uuid(310afa62-0575-11d2-9ca9-0060b0ec3d39), pointer_default(unique) ] interface IDSOControl : IDispatch { [propget,id(DISPID_XMLDSO_DOCUMENT)] HRESULT XMLDocument([out, retval] IXMLDOMDocument** ppDoc); [propput,id(DISPID_XMLDSO_DOCUMENT)] HRESULT XMLDocument([in] IXMLDOMDocument* ppDoc); [propget,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)] HRESULT JavaDSOCompatible([out, retval] BOOL* fJavaDSOCompatible); [propput,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)] HRESULT JavaDSOCompatible([in] BOOL fJavaDSOCompatible); [propget, id(DISPID_READYSTATE)] HRESULT readyState([out, retval] long *state); } [ uuid(3efaa427-272f-11d2-836f-0000f87a7782) ] dispinterface XMLDOMDocumentEvents { properties: methods: [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)] HRESULT ondataavailable(); [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)] HRESULT onreadystatechange(); } [ local, object, dual, oleautomation, uuid (2933BF92-7B36-11d2-B20E-00C04F983E60) ] interface IXSLProcessor : IDispatch { [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)] HRESULT input([in] VARIANT var); [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)] HRESULT input([retval, out] VARIANT *var); [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)] HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate); [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)] HRESULT setStartMode( [in] BSTR p, [in, defaultvalue("")] BSTR uri); [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)] HRESULT startMode([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)] HRESULT startModeURI([retval, out] BSTR *uri); [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)] HRESULT output([in] VARIANT var); [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)] HRESULT output([retval, out] VARIANT *var); [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)] HRESULT transform( [retval, out] VARIANT_BOOL *pbool); [id(DISPID_XMLDOM_PROCESSOR_RESET)] HRESULT reset(); [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)] HRESULT readyState([retval, out] LONG *pstate); [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)] HRESULT addParameter( [in] BSTR p, [in] VARIANT var, [in, defaultvalue("")] BSTR uri); [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)] HRESULT addObject( [in] IDispatch* obj, [in] BSTR uri); [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)] HRESULT stylesheet([retval, out] IXMLDOMNode **node); } [ local, object, dual, oleautomation, uuid (2933BF93-7B36-11d2-B20E-00C04F983E60) ] interface IXSLTemplate : IDispatch { [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)] HRESULT stylesheet([in] IXMLDOMNode *node); [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)] HRESULT stylesheet([retval, out] IXMLDOMNode **node); [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)] HRESULT createProcessor( [retval, out] IXSLProcessor **ppProcessor); } [ object, uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8), odl, dual, oleautomation, pointer_default(unique) ] interface IXMLHTTPRequest : IDispatch { [id(1)] HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync, [in,optional] VARIANT username, [in,optional] VARIANT password); [id(2)] HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue); [id(3)] HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value); [id(4)] HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders); [id(5)] HRESULT send([in, optional] VARIANT body); [id(6)] HRESULT abort(); [propget, id(7)] HRESULT status([out, retval] LONG *pStatus); [propget, id(8)] HRESULT statusText([out, retval] BSTR *pStatus); [propget, id(9)] HRESULT responseXML([out, retval] IDispatch **pBody); [propget, id(10)] HRESULT responseText([out, retval] BSTR *pBody); [propget, id(11)] HRESULT responseBody([out, retval] VARIANT *pBody); [propget, id(12)] HRESULT responseStream([out, retval] VARIANT *pBody); [propget, id(13)] HRESULT readyState([out, retval] LONG *pState); [propput, id(14)] HRESULT onreadystatechange([in] IDispatch *pReadyStateSink); } [ object, dual, oleautomation, uuid(2e9196bf-13ba-4dd4-91ca-6c571f281495) ] interface IServerXMLHTTPRequest : IXMLHTTPRequest { typedef enum _SERVERXMLHTTP_OPTION { SXH_OPTION_URL = -1, SXH_OPTION_URL_CODEPAGE, SXH_OPTION_ESCAPE_PERCENT_IN_URL, SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS, SXH_OPTION_SELECT_CLIENT_SSL_CERT } SERVERXMLHTTP_OPTION; [id(15)] HRESULT setTimeouts( [in] long resolveTimeout, [in] long connectTimeout, [in] long sendTimeout, [in] long receiveTimeout); [id(16)] HRESULT waitForResponse( [in, optional] VARIANT timeoutInSeconds, [out, retval] VARIANT_BOOL * isSuccessful); [id(17)] HRESULT getOption( [in] SERVERXMLHTTP_OPTION option, [out, retval] VARIANT * value); [id(18)] HRESULT setOption( [in] SERVERXMLHTTP_OPTION option, [in] VARIANT value); } [ object, dual, oleautomation, uuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7) ] interface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest { typedef enum _SXH_PROXY_SETTING { SXH_PROXY_SET_DEFAULT = 0, SXH_PROXY_SET_PRECONFIG = 0, SXH_PROXY_SET_DIRECT, SXH_PROXY_SET_PROXY } SXH_PROXY_SETTING; [id(19)] HRESULT setProxy( [in] SXH_PROXY_SETTING proxySetting, [in, optional] VARIANT varProxyServer, [in, optional] VARIANT varBypassList); [id(20)] HRESULT setProxyCredentials( [in] BSTR bstrUserName, [in] BSTR bstrPassword); } [ local, object, dual, oleautomation, uuid (3efaa426-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMParseError : IDispatch { [propget, id(DISPID_VALUE)] HRESULT errorCode([retval, out] LONG *errCode); [propget, id(DISPID_DOM_ERROR_URL)] HRESULT url([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_REASON)] HRESULT reason([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_SRCTEXT)] HRESULT srcText([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_LINE)] HRESULT line([retval, out] LONG *lineNo); [propget, id(DISPID_DOM_ERROR_LINEPOS)] HRESULT linepos([retval, out] LONG * linePos); [propget, id(DISPID_DOM_ERROR_FILEPOS)] HRESULT filepos([retval, out] LONG * filePos); } [ local, object, dual, oleautomation, uuid (3efaa428-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMParseError2 : IXMLDOMParseError { [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)] HRESULT errorXPath([retval, out] BSTR *xpathexpr); [propget, id(DISPID_DOM_ERROR2_ALLERRORS)] HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors); [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)] HRESULT errorParameters( [in] long index, [retval, out] BSTR *param); [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)] HRESULT errorParametersCount([retval, out] long *count); } [ local, object, dual, oleautomation, uuid (3efaa429-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMParseErrorCollection : IDispatch { [propget, id(DISPID_VALUE)] HRESULT item( [in] long index, [retval, out] IXMLDOMParseError2 **error); [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)] HRESULT length( [retval, out] long *length); [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)] HRESULT next( [retval, out] IXMLDOMParseError2 **error); [id(DISPID_DOM_ERRORCOLLECTION_RESET)] HRESULT reset(); [propget, hidden, restricted, id(DISPID_NEWENUM)] HRESULT _newEnum( [retval, out] IUnknown **ppunk); } [ uuid(f5078f1b-c551-11d3-89b9-0000f81fe221) ] coclass DOMDocument26 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ helpstring("XML DOM Document 3.0"), progid("Msxml2.DOMDocument.3.0"), vi_progid("Msxml2.DOMDocument"), threading(both), uuid(f5078f32-c551-11d3-89b9-0000f81fe221) ] coclass DOMDocument30 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(88d969c0-f192-11d4-a65f-0040963251e5) ] coclass DOMDocument40 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(88d96a05-f192-11d4-a65f-0040963251e5) ] coclass DOMDocument60 { [default] interface IXMLDOMDocument3; [default, source] dispinterface XMLDOMDocumentEvents; } [ helpstring("XML DOM Document"), progid("Msxml2.DOMDocument"), vi_progid("Msxml2.DOMDocument"), threading(both), uuid(f6d90f11-9c73-11d3-b32e-00c04f990bb4) ] coclass DOMDocument { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(f5078f1c-c551-11d3-89b9-0000f81fe221) ] coclass FreeThreadedDOMDocument26 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ helpstring("Free threaded XML DOM Document 3.0"), progid("Msxml2.FreeThreadedDOMDocument.3.0"), vi_progid("Msxml2.FreeThreadedDOMDocument"), threading(both), uuid(f5078f33-c551-11d3-89b9-0000f81fe221) ] coclass FreeThreadedDOMDocument30 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(88d969c1-f192-11d4-a65f-0040963251e5) ] coclass FreeThreadedDOMDocument40 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(88d96a06-f192-11d4-a65f-0040963251e5), ] coclass FreeThreadedDOMDocument60 { [default] interface IXMLDOMDocument3; [default, source] dispinterface XMLDOMDocumentEvents; } [ helpstring("Free threaded XML DOM Document"), progid("Msxml2.FreeThreadedDOMDocument"), vi_progid("Msxml2.FreeThreadedDOMDocument"), threading(both), uuid(f6d90f12-9c73-11d3-b32e-00c04f990bb4) ] coclass FreeThreadedDOMDocument { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(f5078f1e-c551-11d3-89b9-0000f81fe221) ] coclass XMLHTTP26 { [default] interface IXMLHTTPRequest; } [ helpstring("XML HTTP 3.0"), progid("Msxml2.XMLHTTP.3.0"), vi_progid("Msxml2.XMLHTTP"), threading(apartment), uuid(f5078f35-c551-11d3-89b9-0000f81fe221) ] coclass XMLHTTP30 { [default] interface IXMLHTTPRequest; } [ uuid(88d969c5-f192-11d4-a65f-0040963251e5) ] coclass XMLHTTP40 { [default] interface IXMLHTTPRequest; } [ uuid(88d96a0a-f192-11d4-a65f-0040963251e5) ] coclass XMLHTTP60 { [default] interface IXMLHTTPRequest; } [ helpstring("XML HTTP"), progid("Msxml2.XMLHTTP"), vi_progid("Msxml2.XMLHTTP"), threading(apartment), uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4) ] coclass XMLHTTP { [default] interface IXMLHTTPRequest; } [ helpstring("Server XML HTTP 3.0"), progid("Msxml2.ServerXMLHTTP.3.0"), vi_progid("Msxml2.ServerXMLHTTP"), threading(apartment), uuid(afb40ffd-b609-40a3-9828-f88bbe11e4e3) ] coclass ServerXMLHTTP30 { [default] interface IServerXMLHTTPRequest; } [ uuid(88d969c6-f192-11d4-a65f-0040963251e5) ] coclass ServerXMLHTTP40 { [default] interface IServerXMLHTTPRequest2; } [ uuid(88d96a0b-f192-11d4-a65f-0040963251e5) ] coclass ServerXMLHTTP60 { [default] interface IServerXMLHTTPRequest2; } [ helpstring("Server XML HTTP"), progid("Msxml2.ServerXMLHTTP"), vi_progid("Msxml2.ServerXMLHTTP"), threading(apartment), uuid(afba6b42-5692-48ea-8141-dc517dcf0ef1) ] coclass ServerXMLHTTP { [default] interface IServerXMLHTTPRequest; } [ uuid(f5078f1d-c551-11d3-89b9-0000f81fe221) ] coclass XMLSchemaCache26 { [default] interface IXMLDOMSchemaCollection; } [ helpstring("XML Schema Cache 3.0"), progid("Msxml2.XMLSchemaCache.3.0"), vi_progid("Msxml2.XMLSchemaCache"), threading(both), uuid(f5078f34-c551-11d3-89b9-0000f81fe221) ] coclass XMLSchemaCache30 { [default] interface IXMLDOMSchemaCollection; } [ uuid(88d969c2-f192-11d4-a65f-0040963251e5) ] coclass XMLSchemaCache40 { [default] interface IXMLDOMSchemaCollection2; } [ uuid(88d96a07-f192-11d4-a65f-0040963251e5) ] coclass XMLSchemaCache60 { [default] interface IXMLDOMSchemaCollection2; } [ helpstring("XML Schema Cache"), progid("Msxml2.XMLSchemaCache"), vi_progid("Msxml2.XMLSchemaCache"), threading(both), uuid(373984c9-b845-449b-91e7-45ac83036ade) ] coclass XMLSchemaCache { [default] interface IXMLDOMSchemaCollection; } [ uuid(f5078f21-c551-11d3-89b9-0000f81fe221) ] coclass XSLTemplate26 { [default] interface IXSLTemplate; } [ helpstring("XSL Template 3.0"), progid("Msxml2.XSLTemplate.3.0"), vi_progid("Msxml2.XSLTemplate"), threading(both), uuid(f5078f36-c551-11d3-89b9-0000f81fe221) ] coclass XSLTemplate30 { [default] interface IXSLTemplate; } [ uuid(88d969c3-f192-11d4-a65f-0040963251e5) ] coclass XSLTemplate40 { [default] interface IXSLTemplate; } [ uuid(88d96a08-f192-11d4-a65f-0040963251e5) ] coclass XSLTemplate60 { [default] interface IXSLTemplate; } [ helpstring("XSL Template"), progid("Msxml2.XSLTemplate"), vi_progid("Msxml2.XSLTemplate"), threading(both), uuid(2933BF94-7B36-11d2-B20E-00C04F983E60) ] coclass XSLTemplate { [default] interface IXSLTemplate; } /* * Sax Interfaces */ [ object, local, uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9) ] interface ISAXAttributes : IUnknown { HRESULT getLength( [out, retval] int *length); HRESULT getURI( [in] int nIndex, [out] const WCHAR **pUrl, [out] int *pUriSize); HRESULT getLocalName( [in] int nIndex, [out] const WCHAR **pLocalName, [out] int *pLocalNameLength); HRESULT getQName( [in] int nIndex, [out] const WCHAR **pQName, [out] int *pQNameLength); HRESULT getName( [in] int nIndex, [out] const WCHAR **pUri, [out] int * pUriLength, [out] const WCHAR ** pLocalName, [out] int * pLocalNameSize, [out] const WCHAR ** pQName, [out] int * pQNameLength); HRESULT getIndexFromName( [in] const WCHAR * pUri, [in] int cUriLength, [in] const WCHAR * pLocalName, [in] int cocalNameLength, [out, retval] int * index); HRESULT getIndexFromQName( [in] const WCHAR * pQName, [in] int nQNameLength, [out, retval] int * index); HRESULT getType( [in] int nIndex, [out] const WCHAR ** pType, [out] int * pTypeLength); HRESULT getTypeFromName( [in] const WCHAR * pUri, [in] int nUri, [in] const WCHAR * pLocalName, [in] int nLocalName, [out] const WCHAR ** pType, [out] int * nType); HRESULT getTypeFromQName( [in] const WCHAR * pQName, [in] int nQName, [out] const WCHAR ** pType, [out] int * nType); HRESULT getValue( [in] int nIndex, [out] const WCHAR ** pValue, [out] int * nValue); HRESULT getValueFromName( [in] const WCHAR * pUri, [in] int nUri, [in] const WCHAR * pLocalName, [in] int nLocalName, [out] const WCHAR ** pValue, [out] int * nValue); HRESULT getValueFromQName( [in] const WCHAR * pQName, [in] int nQName, [out] const WCHAR ** pValue, [out] int * nValue); } [ object, local, uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44) ] interface ISAXContentHandler : IUnknown { HRESULT putDocumentLocator( [in] ISAXLocator * pLocator); HRESULT startDocument(); HRESULT endDocument(); HRESULT startPrefixMapping( [in] const WCHAR * pPrefix, [in] int nPrefix, [in] const WCHAR * pUri, [in] int nUri); HRESULT endPrefixMapping( [in] const WCHAR * pPrefix, [in] int nPrefix); HRESULT startElement( [in] const WCHAR * pNamespaceUri, [in] int nNamespaceUri, [in] const WCHAR * pLocalName, [in] int nLocalName, [in] const WCHAR * pQName, [in] int nQName, [in] ISAXAttributes * pAttr); HRESULT endElement( [in] const WCHAR * pNamespaceUri, [in] int nNamespaceUri, [in] const WCHAR * pLocalName, [in] int nLocalName, [in] const WCHAR * pQName, [in] int nQName); HRESULT characters( [in] const WCHAR * pChars, [in] int nChars); HRESULT ignorableWhitespace( [in] const WCHAR * pChars, [in] int nChars); HRESULT processingInstruction( [in] const WCHAR * pTarget, [in] int nTarget, [in] const WCHAR * pData, [in] int nData); HRESULT skippedEntity( [in] const WCHAR * pName, [in] int nName); } [ object, local, uuid(862629ac-771a-47b2-8337-4e6843c1be90) ] interface ISAXDeclHandler : IUnknown { HRESULT elementDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pModel, [in] int nModel); HRESULT attributeDecl( [in] const WCHAR * pElementName, [in] int nElementName, [in] const WCHAR * pAttributeName, [in] int nAttributeName, [in] const WCHAR * pType, [in] int nType, [in] const WCHAR * pValueDefault, [in] int nValueDefault, [in] const WCHAR * pValue, [in] int nValue); HRESULT internalEntityDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pValue, [in] int nValue); HRESULT externalEntityDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pPublicId, [in] int nPublicId, [in] const WCHAR * pSystemId, [in] int nSystemId); } [ object, local, uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed) ] interface ISAXDTDHandler : IUnknown { HRESULT notationDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pPublicId, [in] int nPublicId, [in] const WCHAR * pSystemId, [in] int nSystemId); HRESULT unparsedEntityDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pPublicId, [in] int nPublicId, [in] const WCHAR * pSystemId, [in] int nSystemId, [in] const WCHAR * pNotationName, [in] int nNotationName); } [ object, local, uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07), ] interface ISAXEntityResolver : IUnknown { HRESULT resolveEntity( [in] const WCHAR * pPublicId, [in] const WCHAR * pSystemId, [out, retval] VARIANT * ret); } [ object, local, uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0) ] interface ISAXErrorHandler : IUnknown { HRESULT error( [in] ISAXLocator * pLocator, [in] const WCHAR * pErrorMessage, [in] HRESULT hrErrorCode); HRESULT fatalError( [in] ISAXLocator * pLocator, [in] const WCHAR * pErrorMessage, [in] HRESULT hrErrorCode); HRESULT ignorableWarning( [in] ISAXLocator * pLocator, [in] const WCHAR * pErrorMessage, [in] HRESULT hrErrorCode); } [ object, local, uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6) ] interface ISAXLexicalHandler : IUnknown { HRESULT startDTD( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pPublicId, [in] int nPublicId, [in] const WCHAR * pSystemId, [in] int nSystemId); HRESULT endDTD(); HRESULT startEntity( [in] const WCHAR * pName, [in] int nName); HRESULT endEntity( [in] const WCHAR * pName, [in] int nName); HRESULT startCDATA(); HRESULT endCDATA(); HRESULT comment( [in] const WCHAR * pChars, [in] int nChars); } [ object, local, uuid(9b7e472a-0de4-4640-bff3-84d38a051c31) ] interface ISAXLocator : IUnknown { HRESULT getColumnNumber( [out, retval] int * nColumn); HRESULT getLineNumber( [out, retval] int * nLine); HRESULT getPublicId( [out, retval] const WCHAR ** publicId); HRESULT getSystemId( [out, retval] const WCHAR ** systemId); } [ local, object, uuid(70409222-ca09-4475-acb8-40312fe8d145) ] interface ISAXXMLFilter : ISAXXMLReader { HRESULT getParent( [out, retval] ISAXXMLReader ** pReader); HRESULT putParent( [in] ISAXXMLReader * reader); } [ local, object, uuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802) ] interface ISAXXMLReader : IUnknown { HRESULT getFeature( [in] const WCHAR * pFeature, [out, retval] VARIANT_BOOL * pValue); HRESULT putFeature( [in] const WCHAR * pFeature, [in] VARIANT_BOOL vfValue); HRESULT getProperty( [in] const WCHAR * pProp, [out, retval] VARIANT * pValue); HRESULT putProperty( [in] const WCHAR * pProp, [in] VARIANT value); HRESULT getEntityResolver( [out, retval] ISAXEntityResolver ** ppEntityResolver); HRESULT putEntityResolver( [in] ISAXEntityResolver * pEntityResolver); HRESULT getContentHandler( [out, retval] ISAXContentHandler ** pContentHandler); HRESULT putContentHandler( [in] ISAXContentHandler * contentHandler); HRESULT getDTDHandler( [out, retval] ISAXDTDHandler ** pDTDHandler); HRESULT putDTDHandler( [in] ISAXDTDHandler * pDTDHandler); HRESULT getErrorHandler( [out, retval] ISAXErrorHandler ** pErrorHandler); HRESULT putErrorHandler( [in] ISAXErrorHandler * errorHandler); HRESULT getBaseURL( [out, retval] const WCHAR ** pBaseUrl); HRESULT putBaseURL( [in] const WCHAR * pBaseUrl); HRESULT getSecureBaseURL( [out, retval] const WCHAR ** pSecureBaseUrl); HRESULT putSecureBaseURL( [in] const WCHAR * secureBaseUrl); HRESULT parse( [in] VARIANT varInput); HRESULT parseURL( [in] const WCHAR * url); } [ object, dual, oleautomation, uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0) ] interface IVBSAXAttributes : IDispatch { [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)] HRESULT length( [out, retval] int * nLength); [id(DISPID_SAX_ATTRIBUTES_GETURI)] HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri); [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)] HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName); [id(DISPID_SAX_ATTRIBUTES_GETQNAME)] HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName); [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)] HRESULT getIndexFromName( [in] BSTR uri, [in] BSTR localName, [out, retval] int * nIndex); [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)] HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex); [id(DISPID_SAX_ATTRIBUTES_GETTYPE)] HRESULT getType( [in] int nIndex, [out, retval] BSTR * type); [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)] HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName, [out, retval] BSTR * type); [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)] HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type); [id(DISPID_SAX_ATTRIBUTES_GETVALUE)] HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value); [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)] HRESULT getValueFromName( [in] BSTR uri, [in] BSTR localName, [out, retval] BSTR * value); [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)] HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value); } [ object, dual, oleautomation, uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa) ] interface IVBSAXContentHandler : IDispatch { [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)] HRESULT documentLocator( [in] IVBSAXLocator * oLocator); [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)] HRESULT startDocument(); [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)] HRESULT endDocument(); [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)] HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri); [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)] HRESULT endPrefixMapping( [in, out] BSTR * prefix); [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)] HRESULT startElement( [in, out] BSTR * namespaceURI, [in, out] BSTR * localName, [in, out] BSTR * QName, [in] IVBSAXAttributes * oAttributes); [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)] HRESULT endElement( [in, out] BSTR * namespaceURI, [in, out] BSTR * localName, [in, out] BSTR * strQName); [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)] HRESULT characters( [in, out] BSTR * chars); [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)] HRESULT ignorableWhitespace( [in, out] BSTR * chars); [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)] HRESULT processingInstruction( [in, out] BSTR * target, [in, out] BSTR * data); [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)] HRESULT skippedEntity( [in, out] BSTR * name); } [ object, dual, oleautomation, uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b) ] interface IVBSAXDeclHandler : IDispatch { [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)] HRESULT elementDecl( [in, out] BSTR * name, [in, out] BSTR * model); [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)] HRESULT attributeDecl( [in, out] BSTR * elementName, [in, out] BSTR * attributeName, [in, out] BSTR * type, [in, out] BSTR * valueDefault, [in, out] BSTR * value); [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)] HRESULT internalEntityDecl( [in, out] BSTR * name, [in, out] BSTR * value); [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)] HRESULT externalEntityDecl( [in, out] BSTR * name, [in, out] BSTR * publicId, [in, out] BSTR * systemId); } [ object, dual, oleautomation, uuid(24fb3297-302d-4620-ba39-3a732d850558) ] interface IVBSAXDTDHandler : IDispatch { [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)] HRESULT notationDecl( [in, out] BSTR * name, [in, out] BSTR * publicId, [in, out] BSTR * systemId); [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)] HRESULT unparsedEntityDecl( [in, out] BSTR * name, [in, out] BSTR * publicId, [in, out] BSTR * systemId, [in, out] BSTR * notationName); } [ object, dual, oleautomation, uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc) ] interface IVBSAXEntityResolver : IDispatch { [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)] HRESULT resolveEntity( [in, out] BSTR * publicId, [in, out] BSTR * systemId, [out, retval] VARIANT * ret); } [ object, dual, oleautomation, uuid(d963d3fe-173c-4862-9095-b92f66995f52) ] interface IVBSAXErrorHandler : IDispatch { [id(DISPID_SAX_ERRORHANDLER_ERROR)] HRESULT error( [in] IVBSAXLocator * locator, [in, out] BSTR * errorMessage, [in] LONG errorCode); [id(DISPID_SAX_ERRORHANDLER_FATALERROR)] HRESULT fatalError( [in] IVBSAXLocator * locator, [in, out] BSTR * errorMessage, [in] LONG errorCode); [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)] HRESULT ignorableWarning( [in] IVBSAXLocator * locator, [in, out] BSTR * errorMessage, [in] LONG errorCode); } [ object, dual, oleautomation, uuid(032aac35-8c0e-4d9d-979f-e3b702935576) ] interface IVBSAXLexicalHandler : IDispatch { [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)] HRESULT startDTD( [in, out] BSTR * name, [in, out] BSTR * publicId, [in, out] BSTR * systemId); [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)] HRESULT endDTD(); [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)] HRESULT startEntity([in, out] BSTR * name); [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)] HRESULT endEntity([in, out] BSTR * name); [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)] HRESULT startCDATA(); [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)] HRESULT endCDATA(); [id(DISPID_SAX_LEXICALHANDLER_COMMENT)] HRESULT comment( [in, out] BSTR * chars); } [ object, dual, oleautomation, uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288) ] interface IVBSAXLocator : IDispatch { [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)] HRESULT columnNumber( [out, retval] int * column); [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)] HRESULT lineNumber( [out, retval] int * line); [propget, id(DISPID_SAX_LOCATOR_PUBLICID)] HRESULT publicId( [out, retval] BSTR * publicId); [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)] HRESULT systemId( [out, retval] BSTR * systemId); } [ object, dual, oleautomation, uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04) ] interface IVBSAXXMLFilter : IDispatch { [propget, id(DISPID_SAX_XMLFILTER_PARENT)] HRESULT parent( [out, retval] IVBSAXXMLReader ** reader); [propputref, id(DISPID_SAX_XMLFILTER_PARENT)] HRESULT parent( [in] IVBSAXXMLReader * reader); } [ dual, oleautomation, object, uuid (8c033caa-6cd6-4f73-b728-4531af74945f) ] interface IVBSAXXMLReader : IDispatch { [id(DISPID_SAX_XMLREADER_GETFEATURE)] HRESULT getFeature( [in] BSTR pFeature, [out, retval] VARIANT_BOOL * pValue); [id(DISPID_SAX_XMLREADER_PUTFEATURE)] HRESULT putFeature( [in] BSTR pFeature, [in] VARIANT_BOOL vfValue); [id(DISPID_SAX_XMLREADER_GETPROPERTY)] HRESULT getProperty( [in] BSTR pProp, [out, retval] VARIANT * pValue); [id(DISPID_SAX_XMLREADER_PUTPROPERTY)] HRESULT putProperty( [in] BSTR pProp, [in] VARIANT value); [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)] HRESULT entityResolver( [out, retval] IVBSAXEntityResolver ** ppEntityResolver); [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)] HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver); [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)] HRESULT contentHandler( [out, retval] IVBSAXContentHandler ** pContentHandler); [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)] HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler); [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)] HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler); [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)] HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler); [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)] HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler); [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)] HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler); [propget, id(DISPID_SAX_XMLREADER_BASEURL)] HRESULT baseURL([out, retval] BSTR *pBaseUrl); [propput, id(DISPID_SAX_XMLREADER_BASEURL)] HRESULT baseURL([in] BSTR pBaseUrl); [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)] HRESULT secureBaseURL([out, retval] BSTR *pSecureBaseUrl); [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)] HRESULT secureBaseURL([in] BSTR secureBaseUrl); [id(DISPID_SAX_XMLREADER_PARSE)] HRESULT parse( [in] VARIANT varInput); [id(DISPID_SAX_XMLREADER_PARSEURL)] HRESULT parseURL([in] BSTR url); } [ object, dual, oleautomation, uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262) ] interface IMXAttributes : IDispatch { [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)] HRESULT addAttribute( [in] BSTR uri, [in] BSTR localName, [in] BSTR QName, [in] BSTR type, [in] BSTR value); [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)] HRESULT addAttributeFromIndex( [in] VARIANT atts, [in] int index); [id(DISPID_MX_ATTRIBUTES_CLEAR)] HRESULT clear(); [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] int index); [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)] HRESULT setAttribute( [in] int index, [in] BSTR uri, [in] BSTR localName, [in] BSTR QName, [in] BSTR type, [in] BSTR value); [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)] HRESULT setAttributes( [in] VARIANT atts); [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)] HRESULT setLocalName( [in] int index, [in] BSTR localName); [id(DISPID_MX_ATTRIBUTES_SETQNAME)] HRESULT setQName( [in] int index, [in] BSTR QName); [id(DISPID_MX_ATTRIBUTES_SETTYPE)] HRESULT setType( [in] int index, [in] BSTR type); [id(DISPID_MX_ATTRIBUTES_SETURI)] HRESULT setURI( [in] int index, [in] BSTR uri); [id(DISPID_MX_ATTRIBUTES_SETVALUE)] HRESULT setValue([in] int index, [in] BSTR value); } [ local, object, dual, oleautomation, uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db) ] interface IMXSchemaDeclHandler : IDispatch { [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)] HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement ); } [ object, dual, oleautomation, uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30) ] interface IMXReaderControl : IDispatch { [id(DISPID_MX_READER_CONTROL_ABORT)] HRESULT abort(); [id(DISPID_MX_READER_CONTROL_RESUME)] HRESULT resume(); [id(DISPID_MX_READER_CONTROL_SUSPEND)] HRESULT suspend(); } [ object, dual, oleautomation, uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d) ] interface IMXWriter : IDispatch { [propput, id(DISPID_MX_WRITER_OUTPUT)] HRESULT output ( [in] VARIANT Destination); [propget, id(DISPID_MX_WRITER_OUTPUT)] HRESULT output ( [out, retval] VARIANT * Destination); [propput, id(DISPID_MX_WRITER_ENCODING)] HRESULT encoding ([in] BSTR encoding); [propget, id(DISPID_MX_WRITER_ENCODING)] HRESULT encoding ([out, retval] BSTR * encoding); [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)] HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark); [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)] HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark); [propput, id(DISPID_MX_WRITER_INDENT)] HRESULT indent ([in] VARIANT_BOOL indentMode); [propget, id(DISPID_MX_WRITER_INDENT)] HRESULT indent ([out, retval] VARIANT_BOOL * indentMode); [propput, id(DISPID_MX_WRITER_STANDALONE)] HRESULT standalone ([in] VARIANT_BOOL value); [propget, id(DISPID_MX_WRITER_STANDALONE)] HRESULT standalone ([out, retval] VARIANT_BOOL * value); [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)] HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value); [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)] HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value); [propput, id(DISPID_MX_WRITER_VERSION)] HRESULT version ([in] BSTR version); [propget, id(DISPID_MX_WRITER_VERSION)] HRESULT version ([out, retval] BSTR * version); [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)] HRESULT disableOutputEscaping([in] VARIANT_BOOL value); [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)] HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value); [id(DISPID_MX_WRITER_FLUSH)] HRESULT flush(); } [ local, object, dual, oleautomation, uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd) ] interface IMXNamespacePrefixes : IDispatch { [propget, id(DISPID_VALUE)] HRESULT item( [in] long index, [out, retval] BSTR *prefix); [propget, id(DISPID_MX_NSMGR_LENGTH)] HRESULT length( [out,retval] long *length ); [propget, restricted, hidden, id(DISPID_NEWENUM)] HRESULT _newEnum( [out, retval] IUnknown **ppUnk ); } [ local, object, hidden, uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd) ] interface IMXNamespaceManager : IUnknown { HRESULT putAllowOverride([in] VARIANT_BOOL fOverride); HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride); HRESULT reset(); HRESULT pushContext(); HRESULT pushNodeContext( [in] IXMLDOMNode *contextNode, [in] VARIANT_BOOL fDeep); HRESULT popContext(); HRESULT declarePrefix( [in] const WCHAR *prefix, [in] const WCHAR *namespaceURI); HRESULT getDeclaredPrefix( [in] long nIndex, [in, out] WCHAR *pwchPrefix, [in, out] int *pcchPrefix); HRESULT getPrefix( [in] const WCHAR *pwszNamespaceURI, [in] long nIndex, [in, out] WCHAR *pwchPrefix, [in, out] int *pcchPrefix); HRESULT getURI( [in] const WCHAR *pwchPrefix, [in] IXMLDOMNode* pContextNode, [in, out] WCHAR *pwchUri, [in, out] int *pcchUri); } [ local, object, dual, oleautomation, uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd) ] interface IVBMXNamespaceManager : IDispatch { [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)] HRESULT allowOverride([in] VARIANT_BOOL fOverride); [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)] HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride); [id(DISPID_MX_NSMGR_RESET)] HRESULT reset(); [id(DISPID_MX_NSMGR_PUSHCONTEXT)] HRESULT pushContext(); [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)] HRESULT pushNodeContext( [in] IXMLDOMNode* contextNode, [in, defaultvalue(-1)] VARIANT_BOOL fDeep); [id(DISPID_MX_NSMGR_POPCONTEXT)] HRESULT popContext(); [id(DISPID_MX_NSMGR_DECLAREPREFIX)] HRESULT declarePrefix( [in] BSTR prefix, [in] BSTR namespaceURI); [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)] HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes); [id(DISPID_MX_NSMGR_GETPREFIXES)] HRESULT getPrefixes( [in] BSTR namespaceURI, [out, retval] IMXNamespacePrefixes** prefixes); [id(DISPID_MX_NSMGR_GETURI)] HRESULT getURI( [in] BSTR prefix, [out, retval] VARIANT* uri); [id(DISPID_MX_NSMGR_GETURIFROMNODE)] HRESULT getURIFromNode( [in] BSTR strPrefix, [in] IXMLDOMNode* contextNode, [out, retval] VARIANT* uri); } [ local, object, dual, oleautomation, uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd) ] interface IMXXMLFilter : IDispatch { [id(DISPID_MXXML_FILTER_GETFEATURE)] HRESULT getFeature( [in] BSTR strName, [out, retval] VARIANT_BOOL * fValue); [id(DISPID_MXXML_FILTER_PUTFEATURE)] HRESULT putFeature( [in] BSTR strName, [in] VARIANT_BOOL fValue); [id(DISPID_MXXML_FILTER_GETPROPERTY)] HRESULT getProperty( [in] BSTR strName, [out, retval] VARIANT * varValue); [id(DISPID_MXXML_FILTER_PUTPROPERTY)] HRESULT putProperty( [in] BSTR strName, [in] VARIANT varValue); [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget] HRESULT entityResolver( [out, retval] IUnknown **oResolver ); [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref] HRESULT entityResolver( [in] IUnknown *oResolver ); [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget] HRESULT contentHandler( [out, retval] IUnknown **oHandler ); [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref] HRESULT contentHandler( [in] IUnknown *oHandler ); [id(DISPID_MXXML_FILTER_DTDHANDLER), propget] HRESULT dtdHandler( [out, retval] IUnknown **oHandler ); [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref] HRESULT dtdHandler( [in] IUnknown *oHandler ); [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget] HRESULT errorHandler( [out, retval] IUnknown **oHandler ); [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref] HRESULT errorHandler( [in] IUnknown *oHandler ); } [ local, object, uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaStringCollection : IDispatch { [id(DISPID_VALUE), propget] HRESULT item( [in] long index, [out,retval] BSTR* bstr); [id(DISPID_SOM_LENGTH), propget] HRESULT length( [out,retval] long* length); [id(DISPID_NEWENUM), hidden, restricted, propget] HRESULT _newEnum( [out,retval] IUnknown** ppunk); } [ local, object, uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaItemCollection : IDispatch { [id(DISPID_VALUE), propget] HRESULT item( [in] long index, [out,retval]ISchemaItem** item); [id(DISPID_SOM_ITEMBYNAME)] HRESULT itemByName( [in] BSTR name, [out,retval] ISchemaItem** item); [id(DISPID_SOM_ITEMBYQNAME)] HRESULT itemByQName( [in] BSTR name, [in] BSTR namespaceURI, [out,retval] ISchemaItem** item); [id(DISPID_SOM_LENGTH), propget] HRESULT length( [out,retval]long* length); [id(DISPID_NEWENUM), hidden, restricted, propget] HRESULT _newEnum( [out,retval]IUnknown** ppunk); } [ local, object, uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaItem : IDispatch { [id(DISPID_SOM_NAME), propget] HRESULT name( [out,retval] BSTR* name); [id(DISPID_SOM_NAMESPACEURI), propget] HRESULT namespaceURI( [out,retval] BSTR* namespaceURI); [id(DISPID_SOM_SCHEMA), propget] HRESULT schema( [out,retval] ISchema** schema); [id(DISPID_SOM_ID), propget] HRESULT id( [out,retval] BSTR* id); [id(DISPID_SOM_ITEMTYPE), propget] HRESULT itemType( [out,retval] SOMITEMTYPE* itemType); [id(DISPID_SOM_UNHANDLEDATTRS), propget] HRESULT unhandledAttributes( [out,retval] IVBSAXAttributes** attributes); [id(DISPID_SOM_WRITEANNOTATION)] HRESULT writeAnnotation( [in] IUnknown* annotationSink, [out,retval] VARIANT_BOOL* isWritten); } [ local, object, uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchema : ISchemaItem { [id(DISPID_SOM_TARGETNAMESPACE), propget] HRESULT targetNamespace( [out,retval] BSTR* targetNamespace); [id(DISPID_SOM_VERSION), propget] HRESULT version( [out,retval] BSTR* version); [id(DISPID_SOM_TYPES), propget] HRESULT types( [out,retval] ISchemaItemCollection** types); [id(DISPID_SOM_ELEMENTS), propget] HRESULT elements( [out,retval] ISchemaItemCollection** elements); [id(DISPID_SOM_ATTRIBUTES), propget] HRESULT attributes( [out,retval] ISchemaItemCollection** attributes); [id(DISPID_SOM_ATTRIBUTEGROUPS), propget] HRESULT attributeGroups( [out,retval] ISchemaItemCollection** attributeGroups); [id(DISPID_SOM_MODELGROUPS), propget] HRESULT modelGroups( [out,retval] ISchemaItemCollection** modelGroups); [id(DISPID_SOM_NOTATIONS), propget] HRESULT notations( [out,retval] ISchemaItemCollection** notations); [id(DISPID_SOM_SCHEMALOCATIONS), propget] HRESULT schemaLocations( [out,retval] ISchemaStringCollection** schemaLocations); } [ local, object, uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaParticle : ISchemaItem { [id(DISPID_SOM_MINOCCURS), propget] HRESULT minOccurs( [out,retval] VARIANT* minOccurs); [id(DISPID_SOM_MAXOCCURS), propget] HRESULT maxOccurs( [out,retval] VARIANT* maxOccurs); } [ object, uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual, ] interface ISchemaAttribute : ISchemaItem { [id(DISPID_SOM_TYPE), propget] HRESULT type( [out,retval] ISchemaType** type); [id(DISPID_SOM_SCOPE), propget] HRESULT scope( [out,retval] ISchemaComplexType** scope); [id(DISPID_SOM_DEFAULTVALUE), propget] HRESULT defaultValue( [out,retval]BSTR* defaultValue); [id(DISPID_SOM_FIXEDVALUE), propget] HRESULT fixedValue( [out,retval] BSTR* fixedValue); [id(DISPID_SOM_USE), propget] HRESULT use( [out,retval] SCHEMAUSE* use); [id(DISPID_SOM_ISREFERENCE), propget] HRESULT isReference( [out,retval] VARIANT_BOOL* reference); } [ local, object, uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaElement : ISchemaParticle { [id(DISPID_SOM_TYPE), propget] HRESULT type( [out,retval] ISchemaType** type); [id(DISPID_SOM_SCOPE), propget] HRESULT scope( [out,retval] ISchemaComplexType** scope); [id(DISPID_SOM_DEFAULTVALUE), propget] HRESULT defaultValue( [out,retval] BSTR* defaultValue); [id(DISPID_SOM_FIXEDVALUE), propget] HRESULT fixedValue( [out,retval] BSTR* fixedValue); [id(DISPID_SOM_ISNILLABLE), propget] HRESULT isNillable( [out,retval] VARIANT_BOOL* nillable); [id(DISPID_SOM_IDCONSTRAINTS), propget] HRESULT identityConstraints( [out,retval] ISchemaItemCollection** constraints); [id(DISPID_SOM_SUBSTITUTIONGROUP), propget] HRESULT substitutionGroup( [out,retval] ISchemaElement** element); [id(DISPID_SOM_EXCLUSIONS), propget] HRESULT substitutionGroupExclusions( [out,retval] SCHEMADERIVATIONMETHOD* exclusions); [id(DISPID_SOM_DISALLOWED), propget] HRESULT disallowedSubstitutions( [out,retval] SCHEMADERIVATIONMETHOD* disallowed); [id(DISPID_SOM_ISABSTRACT), propget] HRESULT isAbstract( [out,retval] VARIANT_BOOL* abstract); [id(DISPID_SOM_ISREFERENCE), propget] HRESULT isReference( [out,retval] VARIANT_BOOL* reference); } [ local, object, uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaType : ISchemaItem { [id(DISPID_SOM_BASETYPES), propget] HRESULT baseTypes( [out,retval] ISchemaItemCollection** baseTypes); [id(DISPID_SOM_FINAL), propget] HRESULT final( [out,retval] SCHEMADERIVATIONMETHOD* final); [id(DISPID_SOM_VARIETY), propget] HRESULT variety( [out,retval] SCHEMATYPEVARIETY* variety); [id(DISPID_SOM_DERIVEDBY), propget] HRESULT derivedBy( [out,retval] SCHEMADERIVATIONMETHOD* derivedBy); [id(DISPID_SOM_ISVALID)] HRESULT isValid( [in] BSTR data, [out,retval] VARIANT_BOOL* valid); [id(DISPID_SOM_MINEXCLUSIVE), propget] HRESULT minExclusive( [out,retval]BSTR* minExclusive); [id(DISPID_SOM_MININCLUSIVE), propget] HRESULT minInclusive( [out,retval] BSTR* minInclusive); [id(DISPID_SOM_MAXEXCLUSIVE), propget] HRESULT maxExclusive( [out,retval] BSTR* maxExclusive); [id(DISPID_SOM_MAXINCLUSIVE), propget] HRESULT maxInclusive( [out,retval] BSTR* maxInclusive); [id(DISPID_SOM_TOTALDIGITS), propget] HRESULT totalDigits( [out,retval] VARIANT* totalDigits); [id(DISPID_SOM_FRACTIONDIGITS), propget] HRESULT fractionDigits( [out,retval] VARIANT* fractionDigits); [id(DISPID_SOM_LENGTH), propget] HRESULT length( [out,retval] VARIANT* length); [id(DISPID_SOM_MINLENGTH), propget] HRESULT minLength( [out,retval]VARIANT* minLength); [id(DISPID_SOM_MAXLENGTH), propget] HRESULT maxLength( [out,retval]VARIANT* maxLength); [id(DISPID_SOM_ENUMERATION), propget] HRESULT enumeration( [out,retval] ISchemaStringCollection** enumeration); [id(DISPID_SOM_WHITESPACE), propget] HRESULT whitespace( [out,retval]SCHEMAWHITESPACE* whitespace); [id(DISPID_SOM_PATTERNS), propget] HRESULT patterns( [out,retval] ISchemaStringCollection** patterns); } [ local, object, uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual, ] interface ISchemaComplexType : ISchemaType { [id(DISPID_SOM_ISABSTRACT), propget] HRESULT isAbstract( [out,retval] VARIANT_BOOL* abstract); [id(DISPID_SOM_ANYATTRIBUTE), propget] HRESULT anyAttribute( [out,retval] ISchemaAny** anyAttribute); [id(DISPID_SOM_ATTRIBUTES), propget] HRESULT attributes( [out,retval] ISchemaItemCollection** attributes); [id(DISPID_SOM_CONTENTTYPE), propget] HRESULT contentType( [out,retval] SCHEMACONTENTTYPE* contentType); [id(DISPID_SOM_CONTENTMODEL), propget] HRESULT contentModel( [out,retval] ISchemaModelGroup** contentModel); [id(DISPID_SOM_PROHIBITED), propget] HRESULT prohibitedSubstitutions( [out,retval] SCHEMADERIVATIONMETHOD* prohibited); } [ local, object, uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual, ] interface ISchemaAttributeGroup : ISchemaItem { [id(DISPID_SOM_ANYATTRIBUTE), propget] HRESULT anyAttribute( [out,retval] ISchemaAny** anyAttribute); [id(DISPID_SOM_ATTRIBUTES), propget] HRESULT attributes( [out,retval] ISchemaItemCollection** attributes); } [ local, object, uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual, ] interface ISchemaModelGroup : ISchemaParticle { [id(DISPID_SOM_PARTICLES), propget] HRESULT particles( [out,retval] ISchemaItemCollection** particles); } [ local, object, uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaAny : ISchemaParticle { [id(DISPID_SOM_NAMESPACES), propget] HRESULT namespaces( [out,retval] ISchemaStringCollection** namespaces); [id(DISPID_SOM_PROCESSCONTENTS), propget] HRESULT processContents( [out,retval] SCHEMAPROCESSCONTENTS* processContents); } [ local, object, uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaIdentityConstraint : ISchemaItem { [id(DISPID_SOM_SELECTOR), propget] HRESULT selector( [out,retval] BSTR* selector); [id(DISPID_SOM_FIELDS), propget] HRESULT fields( [out,retval] ISchemaStringCollection** fields); [id(DISPID_SOM_REFERENCEDKEY), propget] HRESULT referencedKey( [out,retval] ISchemaIdentityConstraint** key); } [ local, object, uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaNotation : ISchemaItem { [id(DISPID_SOM_SYSTEMIDENTIFIER), propget] HRESULT systemIdentifier( [out,retval] BSTR* uri); [id(DISPID_SOM_PUBLICIDENTIFIER), propget] HRESULT publicIdentifier( [out,retval] BSTR* uri); } [ helpstring("SAX XML Reader 3.0"), progid("Msxml2.SAXXMLReader.3.0"), vi_progid("Msxml2.SAXXMLReader"), threading(both), uuid(3124c396-fb13-4836-a6ad-1317f1713688) ] coclass SAXXMLReader30 { [default] interface IVBSAXXMLReader; interface ISAXXMLReader; interface IMXReaderControl; } [ uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f) ] coclass SAXXMLReader40 { [default] interface IVBSAXXMLReader; interface ISAXXMLReader; } [ uuid(88d96a0c-f192-11d4-a65f-0040963251e5) ] coclass SAXXMLReader60 { [default] interface IVBSAXXMLReader; interface ISAXXMLReader; } [ helpstring("SAX XML Reader"), progid("Msxml2.SAXXMLReader"), vi_progid("Msxml2.SAXXMLReader"), threading(both), uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9) ] coclass SAXXMLReader { [default] interface IVBSAXXMLReader; interface ISAXXMLReader; interface IMXReaderControl; } [ uuid(a4c23ec3-6b70-4466-9127-550077239978) ] coclass MXHTMLWriter { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXErrorHandler; interface ISAXDTDHandler; interface ISAXLexicalHandler; interface ISAXDeclHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(853d1540-c1a7-4aa9-a226-4d3bd301146d) ] coclass MXHTMLWriter30 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(88d969c9-f192-11d4-a65f-0040963251e5) ] coclass MXHTMLWriter40 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(88d96a10-f192-11d4-a65f-0040963251e5) ] coclass MXHTMLWriter60 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ helpstring("MXXMLWriter 3.0"), progid("Msxml2.MXXMLWriter.3.0"), vi_progid("Msxml2.MXXMLWriter"), threading(both), uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c) ] coclass MXXMLWriter30 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(88d969c8-f192-11d4-a65f-0040963251e5), ] coclass MXXMLWriter40 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(88d96a0f-f192-11d4-a65f-0040963251e5) ] coclass MXXMLWriter60 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ helpstring("MXXMLWriter"), progid("Msxml2.MXXMLWriter"), vi_progid("Msxml2.MXXMLWriter"), threading(both), uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020) ] coclass MXXMLWriter { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXErrorHandler; interface ISAXDTDHandler; interface ISAXLexicalHandler; interface ISAXDeclHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(88d969d5-f192-11d4-a65f-0040963251e5) ] coclass MXNamespaceManager { [default] interface IVBMXNamespaceManager; interface IMXNamespaceManager; } [ uuid(88d969d6-f192-11d4-a65f-0040963251e5) ] coclass MXNamespaceManager40 { [default] interface IVBMXNamespaceManager; interface IMXNamespaceManager; } [ uuid(88d96a11-f192-11d4-a65f-0040963251e5) ] coclass MXNamespaceManager60 { [default] interface IVBMXNamespaceManager; interface IMXNamespaceManager; } [ helpstring("SAXAttributes 3.0"), progid("Msxml2.SAXAttributes.3.0"), vi_progid("Msxml2.SAXAttributes"), threading(both), uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba) ] coclass SAXAttributes30 { [default] interface IMXAttributes; interface IVBSAXAttributes; interface ISAXAttributes; } [ uuid(88d969ca-f192-11d4-a65f-0040963251e5), ] coclass SAXAttributes40 { [default] interface IMXAttributes; interface IVBSAXAttributes; interface ISAXAttributes; } [ uuid(88d96a0e-f192-11d4-a65f-0040963251e5) ] coclass SAXAttributes60 { [default] interface IMXAttributes; interface IVBSAXAttributes; interface ISAXAttributes; } [ helpstring("SAXAttributes"), progid("Msxml2.SAXAttributes"), vi_progid("Msxml2.SAXAttributes"), threading(both), uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0) ] coclass SAXAttributes { [default] interface IMXAttributes; interface IVBSAXAttributes; interface ISAXAttributes; } /* * Error Codes */ cpp_quote("#define E_XML_NOTWF 0xC00CE223") cpp_quote("#define E_XML_NODTD 0xC00CE224") cpp_quote("#define E_XML_INVALID 0xC00CE225") cpp_quote("#define E_XML_BUFFERTOOSMALL 0xC00CE226") } /* Library MSXML */ ================================================ FILE: wine/windows/msxml2did.h ================================================ /* * Copyright (C) 2005 Vijay Kiran Kamuju * Copyright (C) 2008 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __MSXML2DID_H__ #define __MSXML2DID_H__ #define DISPID_XOBJ_MIN 0x10000 #define DISPID_XOBJ_MAX 0x1FFFF #define DISPID_XOBJ_BASE 0x10000 #define DISPID_XMLELEMENTCOLLECTION 0x10000 #define DISPID_XMLELEMENTCOLLECTION_LENGTH 0x10001 #define DISPID_XMLELEMENTCOLLECTION_NEWENUM DISPID_NEWENUM #define DISPID_XMLELEMENTCOLLECTION_ITEM 0x10003 #define DISPID_XMLDOCUMENT 0x10064 #define DISPID_XMLDOCUMENT_ROOT 0x10065 #define DISPID_XMLDOCUMENT_FILESIZE 0x10066 #define DISPID_XMLDOCUMENT_FILEMODIFIEDDATE 0x10067 #define DISPID_XMLDOCUMENT_FILEUPDATEDDATE 0x10068 #define DISPID_XMLDOCUMENT_URL 0x10069 #define DISPID_XMLDOCUMENT_MIMETYPE 0x1006a #define DISPID_XMLDOCUMENT_READYSTATE 0x1006b #define DISPID_XMLDOCUMENT_CREATEELEMENT 0x1006c #define DISPID_XMLDOCUMENT_CHARSET 0x1006d #define DISPID_XMLDOCUMENT_VERSION 0x1006e #define DISPID_XMLDOCUMENT_DOCTYPE 0x1006f #define DISPID_XMLDOCUMENT_DTDURL 0x10070 #define DISPID_XMLDOCUMENT_ASYNC 0x10071 #define DISPID_XMLDOCUMENT_CASEINSENSITIVE 0x10072 #define DISPID_XMLELEMENT 0x100c8 #define DISPID_XMLELEMENT_TAGNAME 0x100c9 #define DISPID_XMLELEMENT_PARENT 0x100ca #define DISPID_XMLELEMENT_SETATTRIBUTE 0x100cb #define DISPID_XMLELEMENT_GETATTRIBUTE 0x100cc #define DISPID_XMLELEMENT_REMOVEATTRIBUTE 0x100cd #define DISPID_XMLELEMENT_CHILDREN 0x100ce #define DISPID_XMLELEMENT_TYPE 0x100cf #define DISPID_XMLELEMENT_TEXT 0x100d0 #define DISPID_XMLELEMENT_ADDCHILD 0x100d1 #define DISPID_XMLELEMENT_REMOVECHILD 0x100d2 #define DISPID_XMLELEMENT_ATTRIBUTES 0x100d3 #define DISPID_XMLNOTIFSINK 0x1012c #define DISPID_XMLNOTIFSINK_CHILDADDED 0x1012d #define DISPID_XMLATTRIBUTE 0x10190 #define DISPID_XMLATTRIBUTE_NAME 0x10191 #define DISPID_XMLATTRIBUTE_VALUE 0x10192 #define DISPID_DOM_BASE 0x00000001 #define DISPID_DOM_COLLECTION_BASE 0x000f4240 #define DISPID_DOM_COLLECTION_MAX 0x002dc6bf #define DISPID_DOM_NODE 0x00000001 #define DISPID_DOM_NODE_NODENAME 0x00000002 #define DISPID_DOM_NODE_NODEVALUE 0x00000003 #define DISPID_DOM_NODE_NODETYPE 0x00000004 #define DISPID_DOM_NODE_NODETYPEENUM 0x00000005 #define DISPID_DOM_NODE_PARENTNODE 0x00000006 #define DISPID_DOM_NODE_CHILDNODES 0x00000007 #define DISPID_DOM_NODE_FIRSTCHILD 0x00000008 #define DISPID_DOM_NODE_LASTCHILD 0x00000009 #define DISPID_DOM_NODE_PREVIOUSSIBLING 0x0000000a #define DISPID_DOM_NODE_NEXTSIBLING 0x0000000b #define DISPID_DOM_NODE_ATTRIBUTES 0x0000000c #define DISPID_DOM_NODE_INSERTBEFORE 0x0000000d #define DISPID_DOM_NODE_REPLACECHILD 0x0000000e #define DISPID_DOM_NODE_REMOVECHILD 0x0000000f #define DISPID_DOM_NODE_APPENDCHILD 0x00000010 #define DISPID_DOM_NODE_HASCHILDNODES 0x00000011 #define DISPID_DOM_NODE_OWNERDOC 0x00000012 #define DISPID_DOM_NODE_CLONENODE 0x00000013 #define DISPID_XMLDOM_NODE 0x00000014 #define DISPID_XMLDOM_NODE_STRINGTYPE 0x00000015 #define DISPID_XMLDOM_NODE_SPECIFIED 0x00000016 #define DISPID_XMLDOM_NODE_DEFINITION 0x00000017 #define DISPID_XMLDOM_NODE_TEXT 0x00000018 #define DISPID_XMLDOM_NODE_NODETYPEDVALUE 0x00000019 #define DISPID_XMLDOM_NODE_DATATYPE 0x0000001a #define DISPID_XMLDOM_NODE_XML 0x0000001b #define DISPID_XMLDOM_NODE_TRANSFORMNODE 0x0000001c #define DISPID_XMLDOM_NODE_SELECTNODES 0x0000001d #define DISPID_XMLDOM_NODE_SELECTSINGLENODE 0x0000001e #define DISPID_XMLDOM_NODE_PARSED 0x0000001f #define DISPID_XMLDOM_NODE_NAMESPACE 0x00000020 #define DISPID_XMLDOM_NODE_PREFIX 0x00000021 #define DISPID_XMLDOM_NODE_BASENAME 0x00000022 #define DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT 0x00000023 #define DISPID_XMLDOM_NODE__TOP 0x00000024 #define DISPID_DOM_DOCUMENT 0x00000025 #define DISPID_DOM_DOCUMENT_DOCTYPE 0x00000026 #define DISPID_DOM_DOCUMENT_IMPLEMENTATION 0x00000027 #define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT 0x00000028 #define DISPID_DOM_DOCUMENT_CREATEELEMENT 0x00000029 #define DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT 0x0000002a #define DISPID_DOM_DOCUMENT_CREATETEXTNODE 0x0000002b #define DISPID_DOM_DOCUMENT_CREATECOMMENT 0x0000002c #define DISPID_DOM_DOCUMENT_CREATECDATASECTION 0x0000002d #define DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION 0x0000002e #define DISPID_DOM_DOCUMENT_CREATEATTRIBUTE 0x0000002f #define DISPID_DOM_DOCUMENT_CREATEENTITY 0x00000030 #define DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE 0x00000031 #define DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME 0x00000032 #define DISPID_DOM_DOCUMENT_TOP 0x00000033 #define DISPID_XMLDOM_DOCUMENT 0x00000034 #define DISPID_XMLDOM_DOCUMENT_DOCUMENTNODE 0x00000035 #define DISPID_XMLDOM_DOCUMENT_CREATENODE 0x00000036 #define DISPID_XMLDOM_DOCUMENT_CREATENODEEX 0x00000037 #define DISPID_XMLDOM_DOCUMENT_NODEFROMID 0x00000038 #define DISPID_XMLDOM_DOCUMENT_DOCUMENTNAMESPACES 0x00000039 #define DISPID_XMLDOM_DOCUMENT_LOAD 0x0000003a #define DISPID_XMLDOM_DOCUMENT_PARSEERROR 0x0000003b #define DISPID_XMLDOM_DOCUMENT_URL 0x0000003c #define DISPID_XMLDOM_DOCUMENT_ASYNC 0x0000003d #define DISPID_XMLDOM_DOCUMENT_ABORT 0x0000003e #define DISPID_XMLDOM_DOCUMENT_LOADXML 0x0000003f #define DISPID_XMLDOM_DOCUMENT_SAVE 0x00000040 #define DISPID_XMLDOM_DOCUMENT_VALIDATE 0x00000041 #define DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE 0x00000042 #define DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE 0x00000043 #define DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE 0x00000044 #define DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE 0x00000045 #define DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE 0x00000046 #define DISPID_XMLDOM_DOCUMENT__TOP 0x00000047 #define DISPID_DOM_NODELIST 0x00000048 #define DISPID_DOM_NODELIST_ITEM 0x00000049 #define DISPID_DOM_NODELIST_LENGTH 0x0000004a #define DISPID_XMLDOM_NODELIST 0x0000004b #define DISPID_XMLDOM_NODELIST_NEXTNODE 0x0000004c #define DISPID_XMLDOM_NODELIST_RESET 0x0000004d #define DISPID_XMLDOM_NODELIST_NEWENUM 0x0000004e #define DISPID_XMLDOM_NODELIST__TOP 0x0000004f #define DISPID_DOM_NAMEDNODEMAP 0x00000050 #define DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM 0x00000053 #define DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM 0x00000054 #define DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM 0x00000055 #define DISPID_XMLDOM_NAMEDNODEMAP 0x00000056 #define DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM 0x00000057 #define DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM 0x00000058 #define DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE 0x00000059 #define DISPID_XMLDOM_NAMEDNODEMAP_RESET 0x0000005a #define DISPID_XMLDOM_NAMEDNODEMAP_NEWENUM 0x0000005b #define DISPID_XMLDOM_NAMEDNODEMAP__TOP 0x0000005c #define DISPID_DOM_W3CWRAPPERS 0x0000005d #define DISPID_DOM_DOCUMENTFRAGMENT 0x0000005e #define DISPID_DOM_DOCUMENTFRAGMENT__TOP 0x0000005f #define DISPID_DOM_ELEMENT 0x00000060 #define DISPID_DOM_ELEMENT_GETTAGNAME 0x00000061 #define DISPID_DOM_ELEMENT_GETATTRIBUTES 0x00000062 #define DISPID_DOM_ELEMENT_GETATTRIBUTE 0x00000063 #define DISPID_DOM_ELEMENT_SETATTRIBUTE 0x00000064 #define DISPID_DOM_ELEMENT_REMOVEATTRIBUTE 0x00000065 #define DISPID_DOM_ELEMENT_GETATTRIBUTENODE 0x00000066 #define DISPID_DOM_ELEMENT_SETATTRIBUTENODE 0x00000067 #define DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE 0x00000068 #define DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME 0x00000069 #define DISPID_DOM_ELEMENT_NORMALIZE 0x0000006a #define DISPID_DOM_ELEMENT__TOP 0x0000006b #define DISPID_DOM_DATA 0x0000006c #define DISPID_DOM_DATA_DATA 0x0000006d #define DISPID_DOM_DATA_LENGTH 0x0000006e #define DISPID_DOM_DATA_SUBSTRING 0x0000006f #define DISPID_DOM_DATA_APPEND 0x00000070 #define DISPID_DOM_DATA_INSERT 0x00000071 #define DISPID_DOM_DATA_DELETE 0x00000072 #define DISPID_DOM_DATA_REPLACE 0x00000073 #define DISPID_DOM_DATA__TOP 0x00000074 #define DISPID_DOM_ATTRIBUTE 0x00000075 #define DISPID_DOM_ATTRIBUTE_GETNAME 0x00000076 #define DISPID_DOM_ATTRIBUTE_SPECIFIED 0x00000077 #define DISPID_DOM_ATTRIBUTE_VALUE 0x00000078 #define DISPID_DOM_ATTRIBUTE__TOP 0x00000079 #define DISPID_DOM_TEXT 0x0000007a #define DISPID_DOM_TEXT_SPLITTEXT 0x0000007b #define DISPID_DOM_TEXT_JOINTEXT 0x0000007c #define DISPID_DOM_TEXT__TOP 0x0000007d #define DISPID_DOM_PI 0x0000007e #define DISPID_DOM_PI_TARGET 0x0000007f #define DISPID_DOM_PI_DATA 0x00000080 #define DISPID_DOM_PI__TOP 0x00000081 #define DISPID_DOM_DOCUMENTTYPE 0x00000082 #define DISPID_DOM_DOCUMENTTYPE_NAME 0x00000083 #define DISPID_DOM_DOCUMENTTYPE_ENTITIES 0x00000084 #define DISPID_DOM_DOCUMENTTYPE_NOTATIONS 0x00000085 #define DISPID_DOM_DOCUMENTTYPE__TOP 0x00000086 #define DISPID_DOM_NOTATION 0x00000087 #define DISPID_DOM_NOTATION_PUBLICID 0x00000088 #define DISPID_DOM_NOTATION_SYSTEMID 0x00000089 #define DISPID_DOM_NOTATION__TOP 0x0000008a #define DISPID_DOM_ENTITY 0x0000008b #define DISPID_DOM_ENTITY_PUBLICID 0x0000008c #define DISPID_DOM_ENTITY_SYSTEMID 0x0000008d #define DISPID_DOM_ENTITY_NOTATIONNAME 0x0000008e #define DISPID_DOM_ENTITY__TOP 0x0000008f #define DISPID_DOM_W3CWRAPPERS_TOP 0x0000008f #define DISPID_DOM_IMPLEMENTATION 0x00000090 #define DISPID_DOM_IMPLEMENTATION_HASFEATURE 0x00000091 #define DISPID_DOM_IMPLEMENTATION__TOP 0x00000092 #define DISPID_DOM__TOP 0x000000af #define DISPID_DOM_ERROR 0x000000b0 #define DISPID_DOM_ERROR_ERRORCODE 0x000000b1 #define DISPID_DOM_ERROR_URL 0x000000b2 #define DISPID_DOM_ERROR_REASON 0x000000b3 #define DISPID_DOM_ERROR_SRCTEXT 0x000000b4 #define DISPID_DOM_ERROR_LINE 0x000000b5 #define DISPID_DOM_ERROR_LINEPOS 0x000000b6 #define DISPID_DOM_ERROR_FILEPOS 0x000000b7 #define DISPID_DOM_ERROR__TOP 0x000000b8 #define DISPID_DOM_ERROR2 0x000000b9 #define DISPID_DOM_ERROR2_ALLERRORS 0x000000ba #define DISPID_DOM_ERROR2_ERRORPARAMETERS 0x000000bb #define DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT 0x000000bc #define DISPID_DOM_ERROR2_ERRORXPATH 0x000000bd #define DISPID_DOM_ERROR2__TOP 0x000000be #define DISPID_DOM_ERRORCOLLECTION 0x000000bf #define DISPID_DOM_ERRORCOLLECTION_LENGTH 0x000000c0 #define DISPID_DOM_ERRORCOLLECTION_NEXT 0x000000c1 #define DISPID_DOM_ERRORCOLLECTION_RESET 0x000000c2 #define DISPID_DOM_ERRORCOLLECTION__TOP 0x000000c3 #define DISPID_XTLRUNTIME 0x000000b9 #define DISPID_XTLRUNTIME_UNIQUEID 0x000000ba #define DISPID_XTLRUNTIME_DEPTH 0x000000bb #define DISPID_XTLRUNTIME_CHILDNUMBER 0x000000bc #define DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER 0x000000bd #define DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER 0x000000be #define DISPID_XTLRUNTIME_FORMATINDEX 0x000000bf #define DISPID_XTLRUNTIME_FORMATNUMBER 0x000000c0 #define DISPID_XTLRUNTIME_FORMATDATE 0x000000c1 #define DISPID_XTLRUNTIME_FORMATTIME 0x000000c2 #define DISPID_XTLRUNTIME__TOP 0x000000c3 #define DISPID_XMLDOMEVENT 0x000000c4 #define DISPID_XMLDOMEVENT_ONREADYSTATECHANGE DISPID_READYSTATECHANGE #define DISPID_XMLDOMEVENT_ONDATAAVAILABLE 0x000000c5 #define DISPID_XMLDOMEVENT__TOP 0x000000c6 #define DISPID_XMLDOM_DOCUMENT2 0x000000c7 #define DISPID_XMLDOM_DOCUMENT2_NAMESPACES 0x000000c8 #define DISPID_XMLDOM_DOCUMENT2_SCHEMAS 0x000000c9 #define DISPID_XMLDOM_DOCUMENT2_VALIDATE 0x000000ca #define DISPID_XMLDOM_DOCUMENT2_SETPROPERTY 0x000000cb #define DISPID_XMLDOM_DOCUMENT2_GETPROPERTY 0x000000cc #define DISPID_XMLDOM_DOCUMENT2__TOP 0x000000cd #define DISPID_XMLDOM_DOCUMENT3 0x000000ce #define DISPID_XMLDOM_DOCUMENT3_VALIDATENODE 0x000000cf #define DISPID_XMLDOM_DOCUMENT3_IMPORTNODE 0x000000d0 #define DISPID_XMLDOM_DOCUMENT3__TOP 0x000000d1 #define DISPID_XMLDOM_SCHEMACOLLECTION 0x00000002 #define DISPID_XMLDOM_SCHEMACOLLECTION_ADD 0x00000003 #define DISPID_XMLDOM_SCHEMACOLLECTION_GET 0x00000004 #define DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE 0x00000005 #define DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH 0x00000006 #define DISPID_XMLDOM_SCHEMACOLLECTION_NAMESPACEURI 0x00000007 #define DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION 0x00000008 #define DISPID_XMLDOM_SCHEMACOLLECTION__TOP 0x00000009 #define DISPID_XMLDOM_SELECTION 0x0000000a #define DISPID_XMLDOM_SELECTION_EXPR 0x0000000b #define DISPID_XMLDOM_SELECTION_CONTEXT 0x0000000c #define DISPID_XMLDOM_SELECTION_PEEKNODE 0x0000000d #define DISPID_XMLDOM_SELECTION_MATCHES 0x0000000e #define DISPID_XMLDOM_SELECTION_REMOVENEXT 0x0000000f #define DISPID_XMLDOM_SELECTION_REMOVEALL 0x00000010 #define DISPID_XMLDOM_SELECTION_CLONE 0x00000011 #define DISPID_XMLDOM_SELECTION_GETPROPERTY 0x00000012 #define DISPID_XMLDOM_SELECTION_SETPROPERTY 0x00000013 #define DISPID_XMLDOM_SELECTION__TOP 0x00000014 #define DISPID_XMLDOM_TEMPLATE 0x00000001 #define DISPID_XMLDOM_TEMPLATE_STYLESHEET 0x00000002 #define DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR 0x00000003 #define DISPID_XMLDOM_TEMPLATE__TOP 0x00000004 #define DISPID_XMLDOM_PROCESSOR 0x00000001 #define DISPID_XMLDOM_PROCESSOR_INPUT 0x00000002 #define DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE 0x00000003 #define DISPID_XMLDOM_PROCESSOR_SETSTARTMODE 0x00000004 #define DISPID_XMLDOM_PROCESSOR_STARTMODE 0x00000005 #define DISPID_XMLDOM_PROCESSOR_STARTMODEURI 0x00000006 #define DISPID_XMLDOM_PROCESSOR_OUTPUT 0x00000007 #define DISPID_XMLDOM_PROCESSOR_TRANSFORM 0x00000008 #define DISPID_XMLDOM_PROCESSOR_RESET 0x00000009 #define DISPID_XMLDOM_PROCESSOR_READYSTATE 0x0000000a #define DISPID_XMLDOM_PROCESSOR_ADDPARAMETER 0x0000000b #define DISPID_XMLDOM_PROCESSOR_ADDOBJECT 0x0000000c #define DISPID_XMLDOM_PROCESSOR_STYLESHEET 0x0000000d #define DISPID_XMLDOM_PROCESSOR__TOP 0x0000000e #define DISPID_XMLDSO 0x10000 #define DISPID_XMLDSO_DOCUMENT 0x10001 #define DISPID_XMLDSO_JAVADSOCOMPATIBLE 0x10002 /* SAX Defines */ #define DISPID_SAX_XMLREADER__MIN 0x00000501 #define DISPID_SAX_XMLREADER__MAX 0x00010000 #define DISPID_SAX_XMLREADER__BASE DISPID_SAX_XMLREADER__MIN #define DISPID_SAX_XMLREADER 0x00000501 #define DISPID_SAX_XMLREADER_GETFEATURE 0x00000502 #define DISPID_SAX_XMLREADER_PUTFEATURE 0x00000503 #define DISPID_SAX_XMLREADER_GETPROPERTY 0x00000504 #define DISPID_SAX_XMLREADER_PUTPROPERTY 0x00000505 #define DISPID_SAX_XMLREADER_ENTITYRESOLVER 0x00000506 #define DISPID_SAX_XMLREADER_CONTENTHANDLER 0x00000507 #define DISPID_SAX_XMLREADER_DTDHANDLER 0x00000508 #define DISPID_SAX_XMLREADER_ERRORHANDLER 0x00000509 #define DISPID_SAX_XMLREADER_BASEURL 0x0000050A #define DISPID_SAX_XMLREADER_SECUREBASEURL 0x0000050B #define DISPID_SAX_XMLREADER_PARSE 0x0000050C #define DISPID_SAX_XMLREADER_PARSEURL 0x0000050D #define DISPID_SAX_XMLREADER_PARENT 0x0000050E #define DISPID_SAX_XMLFILTER 0x00000510 #define DISPID_SAX_XMLFILTER_GETFEATURE 0x00000511 #define DISPID_SAX_XMLFILTER_PUTFEATURE 0x00000512 #define DISPID_SAX_XMLFILTER_GETPROPERTY 0x00000513 #define DISPID_SAX_XMLFILTER_PUTPROPERTY 0x00000514 #define DISPID_SAX_XMLFILTER_ENTITYRESOLVER 0x00000515 #define DISPID_SAX_XMLFILTER_CONTENTHANDLER 0x00000516 #define DISPID_SAX_XMLFILTER_DTDHANDLER 0x00000517 #define DISPID_SAX_XMLFILTER_ERRORHANDLER 0x00000518 #define DISPID_SAX_XMLFILTER_BASEURL 0x00000519 #define DISPID_SAX_XMLFILTER_SECUREBASEURL 0x0000051A #define DISPID_SAX_XMLFILTER_PARSE 0x0000051B #define DISPID_SAX_XMLFILTER_PARSEURL 0x0000051C #define DISPID_SAX_XMLFILTER_PARENT 0x0000051D #define DISPID_SAX_LOCATOR 0x00000520 #define DISPID_SAX_LOCATOR_COLUMNNUMBER 0x00000521 #define DISPID_SAX_LOCATOR_LINENUMBER 0x00000522 #define DISPID_SAX_LOCATOR_PUBLICID 0x00000523 #define DISPID_SAX_LOCATOR_SYSTEMID 0x00000524 #define DISPID_SAX_ENTITYRESOLVER 0x00000526 #define DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY 0x00000527 #define DISPID_SAX_CONTENTHANDLER 0x00000529 #define DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR 0x0000052A #define DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT 0x0000052B #define DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT 0x0000052C #define DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING 0x0000052D #define DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING 0x0000052E #define DISPID_SAX_CONTENTHANDLER_STARTELEMENT 0x0000052F #define DISPID_SAX_CONTENTHANDLER_ENDELEMENT 0x00000530 #define DISPID_SAX_CONTENTHANDLER_CHARACTERS 0x00000531 #define DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE 0x00000532 #define DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION 0x00000533 #define DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY 0x00000534 #define DISPID_SAX_DTDHANDLER 0x00000536 #define DISPID_SAX_DTDHANDLER_NOTATIONDECL 0x00000537 #define DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL 0x00000538 #define DISPID_SAX_ERRORHANDLER 0x0000053A #define DISPID_SAX_ERRORHANDLER_ERROR 0x0000053B #define DISPID_SAX_ERRORHANDLER_FATALERROR 0x0000053C #define DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING 0x0000053D #define DISPID_SAX_ATTRIBUTES 0x0000053F #define DISPID_SAX_ATTRIBUTES_LENGTH 0x00000540 #define DISPID_SAX_ATTRIBUTES_GETURI 0x00000541 #define DISPID_SAX_ATTRIBUTES_GETLOCALNAME 0x00000542 #define DISPID_SAX_ATTRIBUTES_GETQNAME 0x00000543 #define DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME 0x00000544 #define DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME 0x00000545 #define DISPID_SAX_ATTRIBUTES_GETTYPE 0x00000546 #define DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME 0x00000547 #define DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME 0x00000548 #define DISPID_SAX_ATTRIBUTES_GETVALUE 0x00000549 #define DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME 0x0000054A #define DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME 0x0000054B #define DISPID_SAX_LEXICALHANDLER 0x0000054D #define DISPID_SAX_LEXICALHANDLER_STARTDTD 0x0000054E #define DISPID_SAX_LEXICALHANDLER_ENDDTD 0x0000054F #define DISPID_SAX_LEXICALHANDLER_STARTENTITY 0x00000550 #define DISPID_SAX_LEXICALHANDLER_ENDENTITY 0x00000551 #define DISPID_SAX_LEXICALHANDLER_STARTCDATA 0x00000552 #define DISPID_SAX_LEXICALHANDLER_ENDCDATA 0x00000553 #define DISPID_SAX_LEXICALHANDLER_COMMENT 0x00000554 #define DISPID_SAX_DECLHANDLER 0x00000556 #define DISPID_SAX_DECLHANDLER_ELEMENTDECL 0x00000557 #define DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL 0x00000558 #define DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL 0x00000559 #define DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL 0x0000055A #define DISPID_MX_ATTRIBUTES_ADDATTRIBUTE 0x0000055D #define DISPID_MX_ATTRIBUTES_CLEAR 0x0000055E #define DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE 0x0000055F #define DISPID_MX_ATTRIBUTES_SETATTRIBUTE 0x00000560 #define DISPID_MX_ATTRIBUTES_SETATTRIBUTES 0x00000561 #define DISPID_MX_ATTRIBUTES_SETLOCALNAME 0x00000562 #define DISPID_MX_ATTRIBUTES_SETQNAME 0x00000563 #define DISPID_MX_ATTRIBUTES_SETTYPE 0x00000564 #define DISPID_MX_ATTRIBUTES_SETURI 0x00000565 #define DISPID_MX_ATTRIBUTES_SETVALUE 0x00000566 #define DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX 0x00000567 #define DISPID_MX_WRITER 0x00000568 #define DISPID_MX_WRITER_OUTPUT 0x00000569 #define DISPID_MX_WRITER_DESTINATION 0x0000056A #define DISPID_MX_WRITER_ENCODING 0x0000056B #define DISPID_MX_WRITER_BYTEORDERMARK 0x0000056C #define DISPID_MX_WRITER_INDENT 0x0000056D #define DISPID_MX_WRITER_STANDALONE 0x0000056E #define DISPID_MX_WRITER_OMITXMLDECLARATION 0x0000056F #define DISPID_MX_WRITER_VERSION 0x00000570 #define DISPID_MX_WRITER_DISABLEOUTPUTESCAPING 0x00000571 #define DISPID_MX_WRITER_FLUSH 0x00000572 #define DISPID_MX_WRITER_RESET 0x00000573 #define DISPID_MX_READER_CONTROL 0x00000575 #define DISPID_MX_READER_CONTROL_ABORT 0x00000576 #define DISPID_MX_READER_CONTROL_RESUME 0x00000577 #define DISPID_MX_READER_CONTROL_SUSPEND 0x00000578 #define DISPID_MX_SCHEMADECLHANDLER 0x0000057a #define DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL 0x0000057b #define DISPID_MX_NSMGR 0x0000057d #define DISPID_MX_NSMGR_ALLOWOVERRIDE 0x0000057e #define DISPID_MX_NSMGR_RESET 0x0000057f #define DISPID_MX_NSMGR_PUSHCONTEXT 0x00000580 #define DISPID_MX_NSMGR_PUSHNODECONTEXT 0x00000581 #define DISPID_MX_NSMGR_POPCONTEXT 0x00000582 #define DISPID_MX_NSMGR_DECLAREPREFIX 0x00000583 #define DISPID_MX_NSMGR_GETDECLAREDPREFIXES 0x00000584 #define DISPID_MX_NSMGR_GETPREFIXES 0x00000585 #define DISPID_MX_NSMGR_GETURI 0x00000586 #define DISPID_MX_NSMGR_GETURIFROMNODE 0x00000587 #define DISPID_MX_NSMGR_LENGTH 0x00000588 #define DISPID_MXXML_FILTER 0x0000058a #define DISPID_MXXML_FILTER_CONTENTHANDLER 0x0000058b #define DISPID_MXXML_FILTER_DTDHANDLER 0x0000058c #define DISPID_MXXML_FILTER_ENTITYRESOLVER 0x0000058d #define DISPID_MXXML_FILTER_ERRORHANDLER 0x0000058e #define DISPID_MXXML_FILTER_GETFEATURE 0x0000058f #define DISPID_MXXML_FILTER_GETPROPERTY 0x00000590 #define DISPID_MXXML_FILTER_PUTFEATURE 0x00000591 #define DISPID_MXXML_FILTER_PUTPROPERTY 0x00000592 #define DISPID_SOM_VALIDATE 0x0000058b #define DISPID_SOM_VALIDATEONLOAD 0x0000058c #define DISPID_SOM_GETSCHEMA 0x0000058d #define DISPID_SOM_GETDECLARATION 0x0000058e #define DISPID_SOM_ITEMBYNAME 0x0000058f #define DISPID_SOM_ITEMBYQNAME 0x00000590 #define DISPID_SOM_ANYATTRIBUTE 0x00000591 #define DISPID_SOM_ATTRIBUTEGROUPS 0x00000592 #define DISPID_SOM_ATTRIBUTES 0x00000593 #define DISPID_SOM_BASETYPES 0x00000594 #define DISPID_SOM_CONTENTMODEL 0x00000595 #define DISPID_SOM_CONTENTTYPE 0x00000596 #define DISPID_SOM_DEFAULTVALUE 0x00000597 #define DISPID_SOM_DERIVEDBY 0x00000598 #define DISPID_SOM_DISALLOWED 0x00000599 #define DISPID_SOM_ELEMENTS 0x0000059a #define DISPID_SOM_ENUMERATION 0x0000059b #define DISPID_SOM_FIELDS 0x0000059c #define DISPID_SOM_FINAL 0x0000059d #define DISPID_SOM_FIXEDVALUE 0x0000059e #define DISPID_SOM_FRACTIONDIGITS 0x0000059f #define DISPID_SOM_ID 0x000005a0 #define DISPID_SOM_IDCONSTRAINTS 0x000005a1 #define DISPID_SOM_ISABSTRACT 0x000005a2 #define DISPID_SOM_ISNILLABLE 0x000005a3 #define DISPID_SOM_ISREFERENCE 0x000005a4 #define DISPID_SOM_ISVALID 0x000005a5 #define DISPID_SOM_ITEMTYPE 0x000005a6 #define DISPID_SOM_LENGTH 0x000005a7 #define DISPID_SOM_MAXEXCLUSIVE 0x000005a8 #define DISPID_SOM_MAXINCLUSIVE 0x000005a9 #define DISPID_SOM_MAXLENGTH 0x000005aa #define DISPID_SOM_MAXOCCURS 0x000005ab #define DISPID_SOM_MINEXCLUSIVE 0x000005ac #define DISPID_SOM_MININCLUSIVE 0x000005ad #define DISPID_SOM_MINLENGTH 0x000005ae #define DISPID_SOM_MINOCCURS 0x000005af #define DISPID_SOM_MODELGROUPS 0x000005b0 #define DISPID_SOM_NAME 0x000005b1 #define DISPID_SOM_NAMESPACES 0x000005b2 #define DISPID_SOM_NAMESPACEURI 0x000005b3 #define DISPID_SOM_NOTATIONS 0x000005b4 #define DISPID_SOM_PARTICLES 0x000005b5 #define DISPID_SOM_PATTERNS 0x000005b6 #define DISPID_SOM_PROCESSCONTENTS 0x000005b7 #define DISPID_SOM_PROHIBITED 0x000005b8 #define DISPID_SOM_PUBLICIDENTIFIER 0x000005b9 #define DISPID_SOM_REFERENCEDKEY 0x000005ba #define DISPID_SOM_SCHEMA 0x000005bb #define DISPID_SOM_SCHEMALOCATIONS 0x000005bc #define DISPID_SOM_SCOPE 0x000005bd #define DISPID_SOM_SELECTOR 0x000005be #define DISPID_SOM_SUBSTITUTIONGROUP 0x000005bf #define DISPID_SOM_EXCLUSIONS 0x000005c0 #define DISPID_SOM_SYSTEMIDENTIFIER 0x000005c1 #define DISPID_SOM_TARGETNAMESPACE 0x000005c2 #define DISPID_SOM_TOTALDIGITS 0x000005c3 #define DISPID_SOM_TYPE 0x000005c4 #define DISPID_SOM_TYPES 0x000005c5 #define DISPID_SOM_UNHANDLEDATTRS 0x000005c6 #define DISPID_SOM_USE 0x000005c7 #define DISPID_SOM_VARIETY 0x000005c8 #define DISPID_SOM_VERSION 0x000005c9 #define DISPID_SOM_WHITESPACE 0x000005ca #define DISPID_SOM_WRITEANNOTATION 0x000005cb #endif /* __MSXML2DID_H__ */ ================================================ FILE: wine/windows/msxml6.idl ================================================ /* * Copyright (C) 2005 Vijay Kiran Kamuju * Copyright (C) 2008 Alistair Leslie-Hughes * Copyright (C) 2010 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include import "unknwn.idl"; import "objidl.idl"; import "oaidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ uuid(f5078f18-c551-11d3-89b9-0000f81fe221), version(6.0), helpstring("Microsoft XML, v6.0") ] library MSXML2 { importlib("stdole2.tlb"); interface IXMLDOMImplementation; interface IXMLDOMNode; interface IXMLDOMDocumentFragment; interface IXMLDOMDocument; interface IXMLDOMSchemaCollection; interface IXMLDOMDocument2; interface IXMLDOMNodeList; interface IXMLDOMNamedNodeMap; interface IXMLDOMCharacterData; interface IXMLDOMAttribute; interface IXMLDOMElement; interface IXMLDOMText; interface IXMLDOMComment; interface IXMLDOMProcessingInstruction; interface IXMLDOMCDATASection; interface IXMLDOMDocumentType; interface IXMLDOMNotation; interface IXMLDOMEntity; interface IXMLDOMEntityReference; interface IXMLDOMParseError; interface IXMLDOMParseErrorCollection; interface IXTLRuntime; interface IXSLTemplate; interface IXSLProcessor; /* SAX Interfaces */ interface ISAXAttributes; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXEntityResolver; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface ISAXLocator; interface ISAXXMLFilter; interface ISAXXMLReader; interface IVBSAXAttributes; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXEntityResolver; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; interface IVBSAXLocator; interface IVBSAXXMLFilter; interface IVBSAXXMLReader; interface IMXAttributes; interface IMXReaderControl; interface IMXWriter; interface IXMLDOMSchemaCollection2; interface ISchemaStringCollection; interface ISchemaItemCollection; interface ISchemaItem; interface ISchema; interface ISchemaParticle; interface ISchemaAttribute; interface ISchemaElement; interface ISchemaType; interface ISchemaComplexType; interface ISchemaAttributeGroup; interface ISchemaModelGroup; interface ISchemaAny; interface ISchemaIdentityConstraint; interface ISchemaNotation; cpp_quote("#define DOMDocument DOMDocument2") cpp_quote("#define CLSID_DOMDocument CLSID_DOMDocument2") cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED") cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED") typedef enum tagDOMNodeType { NODE_INVALID = 0, NODE_ELEMENT = 1, NODE_ATTRIBUTE = 2, NODE_TEXT = 3, NODE_CDATA_SECTION = 4, NODE_ENTITY_REFERENCE = 5, NODE_ENTITY = 6, NODE_PROCESSING_INSTRUCTION = 7, NODE_COMMENT = 8, NODE_DOCUMENT = 9, NODE_DOCUMENT_TYPE = 10, NODE_DOCUMENT_FRAGMENT = 11, NODE_NOTATION = 12 } DOMNodeType; cpp_quote("#endif") typedef enum _SOMITEMTYPE { SOMITEM_SCHEMA = 0x1000, SOMITEM_ATTRIBUTE = 0x1001, SOMITEM_ATTRIBUTEGROUP = 0x1002, SOMITEM_NOTATION = 0x1003, SOMITEM_IDENTITYCONSTRAINT = 0x1100, SOMITEM_KEY = 0x1101, SOMITEM_KEYREF = 0x1102, SOMITEM_UNIQUE = 0x1103, SOMITEM_ANYTYPE = 0x2000, SOMITEM_DATATYPE = 0x2100, SOMITEM_DATATYPE_ANYTYPE = 0x2101, SOMITEM_DATATYPE_ANYURI = 0x2102, SOMITEM_DATATYPE_BASE64BINARY = 0x2103, SOMITEM_DATATYPE_BOOLEAN = 0x2104, SOMITEM_DATATYPE_BYTE = 0x2105, SOMITEM_DATATYPE_DATE = 0x2106, SOMITEM_DATATYPE_DATETIME = 0x2107, SOMITEM_DATATYPE_DAY = 0x2108, SOMITEM_DATATYPE_DECIMAL = 0x2109, SOMITEM_DATATYPE_DOUBLE = 0x210A, SOMITEM_DATATYPE_DURATION = 0x210B, SOMITEM_DATATYPE_ENTITIES = 0x210C, SOMITEM_DATATYPE_ENTITY = 0x210D, SOMITEM_DATATYPE_FLOAT = 0x210E, SOMITEM_DATATYPE_HEXBINARY = 0x210F, SOMITEM_DATATYPE_ID = 0x2110, SOMITEM_DATATYPE_IDREF = 0x2111, SOMITEM_DATATYPE_IDREFS = 0x2112, SOMITEM_DATATYPE_INT = 0x2113, SOMITEM_DATATYPE_INTEGER = 0x2114, SOMITEM_DATATYPE_LANGUAGE = 0x2115, SOMITEM_DATATYPE_LONG = 0x2116, SOMITEM_DATATYPE_MONTH = 0x2117, SOMITEM_DATATYPE_MONTHDAY = 0x2118, SOMITEM_DATATYPE_NAME = 0x2119, SOMITEM_DATATYPE_NCNAME = 0x211A, SOMITEM_DATATYPE_NEGATIVEINTEGER = 0x211B, SOMITEM_DATATYPE_NMTOKEN = 0x211C, SOMITEM_DATATYPE_NMTOKENS = 0x211D, SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E, SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F, SOMITEM_DATATYPE_NORMALIZEDSTRING = 0x2120, SOMITEM_DATATYPE_NOTATION = 0x2121, SOMITEM_DATATYPE_POSITIVEINTEGER = 0x2122, SOMITEM_DATATYPE_QNAME = 0x2123, SOMITEM_DATATYPE_SHORT = 0x2124, SOMITEM_DATATYPE_STRING = 0x2125, SOMITEM_DATATYPE_TIME = 0x2126, SOMITEM_DATATYPE_TOKEN = 0x2127, SOMITEM_DATATYPE_UNSIGNEDBYTE = 0x2128, SOMITEM_DATATYPE_UNSIGNEDINT = 0x2129, SOMITEM_DATATYPE_UNSIGNEDLONG = 0x212A, SOMITEM_DATATYPE_UNSIGNEDSHORT = 0x212B, SOMITEM_DATATYPE_YEAR = 0x212C, SOMITEM_DATATYPE_YEARMONTH = 0x212D, SOMITEM_DATATYPE_ANYSIMPLETYPE = 0x21FF, SOMITEM_SIMPLETYPE = 0x2200, SOMITEM_COMPLEXTYPE = 0x2400, SOMITEM_PARTICLE = 0x4000, SOMITEM_ANY = 0x4001, SOMITEM_ANYATTRIBUTE = 0x4002, SOMITEM_ELEMENT = 0x4003, SOMITEM_GROUP = 0x4100, SOMITEM_ALL = 0x4101, SOMITEM_CHOICE = 0x4102, SOMITEM_SEQUENCE = 0x4103, SOMITEM_EMPTYPARTICLE = 0x4104, SOMITEM_NULL = 0x0800, SOMITEM_NULL_TYPE = 0x2800, SOMITEM_NULL_ANY = 0x4801, SOMITEM_NULL_ANYATTRIBUTE = 0x4802, SOMITEM_NULL_ELEMENT = 0x4803, } SOMITEMTYPE; typedef enum _SCHEMAUSE { SCHEMAUSE_OPTIONAL, SCHEMAUSE_PROHIBITED, SCHEMAUSE_REQUIRED, } SCHEMAUSE; typedef enum _SCHEMADERIVATIONMETHOD { SCHEMADERIVATIONMETHOD_EMPTY = 0x0000, SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001, SCHEMADERIVATIONMETHOD_EXTENSION = 0x0002, SCHEMADERIVATIONMETHOD_RESTRICTION = 0x0004, SCHEMADERIVATIONMETHOD_LIST = 0x0008, SCHEMADERIVATIONMETHOD_UNION = 0x0010, SCHEMADERIVATIONMETHOD_ALL = 0x00FF, SCHEMADERIVATIONMETHOD_NONE = 0x0100, } SCHEMADERIVATIONMETHOD; typedef enum _SCHEMACONTENTTYPE { SCHEMACONTENTTYPE_EMPTY, SCHEMACONTENTTYPE_TEXTONLY, SCHEMACONTENTTYPE_ELEMENTONLY, SCHEMACONTENTTYPE_MIXED, } SCHEMACONTENTTYPE; typedef enum _SCHEMAPROCESSCONTENTS { SCHEMAPROCESSCONTENTS_NONE, SCHEMAPROCESSCONTENTS_SKIP, SCHEMAPROCESSCONTENTS_LAX, SCHEMAPROCESSCONTENTS_STRICT, } SCHEMAPROCESSCONTENTS; typedef enum _SCHEMAWHITESPACE { SCHEMAWHITESPACE_NONE = -1, SCHEMAWHITESPACE_PRESERVE = 0, SCHEMAWHITESPACE_REPLACE = 1, SCHEMAWHITESPACE_COLLAPSE = 2, } SCHEMAWHITESPACE; typedef enum _SCHEMATYPEVARIETY { SCHEMATYPEVARIETY_NONE = -1, SCHEMATYPEVARIETY_ATOMIC = 0, SCHEMATYPEVARIETY_LIST = 1, SCHEMATYPEVARIETY_UNION = 2, } SCHEMATYPEVARIETY; [ local, object, dual, oleautomation, uuid (2933BF80-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMNode : IDispatch { [propget, id(DISPID_DOM_NODE_NODENAME)] HRESULT nodeName([retval, out] BSTR *p); [propget, id(DISPID_DOM_NODE_NODEVALUE)] HRESULT nodeValue([retval, out] VARIANT *var1); [propput, id(DISPID_DOM_NODE_NODEVALUE)] HRESULT nodeValue([in] VARIANT var1); [propget, id(DISPID_DOM_NODE_NODETYPE)] HRESULT nodeType([retval, out] DOMNodeType *domNodeType); [propget, id(DISPID_DOM_NODE_PARENTNODE)] HRESULT parentNode([retval, out] IXMLDOMNode **parent); [propget, id(DISPID_DOM_NODE_CHILDNODES)] HRESULT childNodes([retval, out] IXMLDOMNodeList **outList); [propget, id(DISPID_DOM_NODE_FIRSTCHILD)] HRESULT firstChild([retval, out] IXMLDOMNode **domNode); [propget, id(DISPID_DOM_NODE_LASTCHILD)] HRESULT lastChild([retval, out] IXMLDOMNode **domNode); [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)] HRESULT previousSibling([retval, out] IXMLDOMNode **domNode); [propget, id(DISPID_DOM_NODE_NEXTSIBLING)] HRESULT nextSibling([retval, out] IXMLDOMNode **domNode); [propget, id(DISPID_DOM_NODE_ATTRIBUTES)] HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap); [id(DISPID_DOM_NODE_INSERTBEFORE)] HRESULT insertBefore( [in] IXMLDOMNode *newNode, [in] VARIANT var1, [retval, out] IXMLDOMNode **outOldNode); [id(DISPID_DOM_NODE_REPLACECHILD)] HRESULT replaceChild( [in] IXMLDOMNode *newNode, [in] IXMLDOMNode *oldNode, [retval, out] IXMLDOMNode **outOldNode); [id(DISPID_DOM_NODE_REMOVECHILD)] HRESULT removeChild( [in] IXMLDOMNode *domNode, [retval, out] IXMLDOMNode **oldNode); [id(DISPID_DOM_NODE_APPENDCHILD)] HRESULT appendChild( [in] IXMLDOMNode *newNode, [retval, out] IXMLDOMNode **outNewNode); [id(DISPID_DOM_NODE_HASCHILDNODES)] HRESULT hasChildNodes( [retval, out] VARIANT_BOOL *pbool); [propget, id(DISPID_DOM_NODE_OWNERDOC)] HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument); [id(DISPID_DOM_NODE_CLONENODE)] HRESULT cloneNode( [in] VARIANT_BOOL pbool, [retval, out] IXMLDOMNode **outNode); [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)] HRESULT nodeTypeString([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_NODE_TEXT)] HRESULT text([retval, out] BSTR *p); [propput, id(DISPID_XMLDOM_NODE_TEXT)] HRESULT text([in] BSTR p); [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)] HRESULT specified([retval, out] VARIANT_BOOL *pbool); [propget, id(DISPID_XMLDOM_NODE_DEFINITION)] HRESULT definition([retval,out] IXMLDOMNode **domNode); [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)] HRESULT nodeTypedValue([retval, out] VARIANT *var1); [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)] HRESULT nodeTypedValue([in] VARIANT var1); [propget, id(DISPID_XMLDOM_NODE_DATATYPE)] HRESULT dataType([retval, out] VARIANT *var1); [propput, id(DISPID_XMLDOM_NODE_DATATYPE)] HRESULT dataType([in] BSTR p); [propget, id(DISPID_XMLDOM_NODE_XML)] HRESULT xml([retval, out] BSTR *p); [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)] HRESULT transformNode( [in] IXMLDOMNode *domNode, [retval, out] BSTR *p); [id(DISPID_XMLDOM_NODE_SELECTNODES)] HRESULT selectNodes( [in] BSTR p, [retval, out] IXMLDOMNodeList **outList); [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)] HRESULT selectSingleNode( [in] BSTR p, [retval, out] IXMLDOMNode **outNode); [propget,id(DISPID_XMLDOM_NODE_PARSED)] HRESULT parsed([retval, out] VARIANT_BOOL *pbool); [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)] HRESULT namespaceURI([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_NODE_PREFIX)] HRESULT prefix([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_NODE_BASENAME)] HRESULT baseName([retval, out] BSTR *p); [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)] HRESULT transformNodeToObject( [in] IXMLDOMNode *domNode, [in] VARIANT var1); } [ local, object, dual, oleautomation, uuid (2933BF81-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMDocument : IXMLDOMNode { [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)] HRESULT doctype([retval, out] IXMLDOMDocumentType **docType); [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)] HRESULT implementation([retval, out] IXMLDOMImplementation **impl); [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)] HRESULT documentElement([retval, out] IXMLDOMElement **domElement); [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)] HRESULT documentElement([in] IXMLDOMElement *domElement); [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)] HRESULT createElement( [in] BSTR p, [retval, out] IXMLDOMElement **domElement); [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)] HRESULT createDocumentFragment( [retval, out] IXMLDOMDocumentFragment **docFrag); [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)] HRESULT createTextNode( [in] BSTR p, [retval, out] IXMLDOMText **text); [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)] HRESULT createComment( [in] BSTR p, [retval, out] IXMLDOMComment **comment); [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)] HRESULT createCDATASection( [in] BSTR p, [retval, out] IXMLDOMCDATASection **cdata); [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)] HRESULT createProcessingInstruction( [in] BSTR target, [in] BSTR data, [retval, out] IXMLDOMProcessingInstruction **pi); [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)] HRESULT createAttribute( [in] BSTR p, [retval, out] IXMLDOMAttribute **attribute); [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)] HRESULT createEntityReference( [in] BSTR p, [retval, out] IXMLDOMEntityReference **entityRef); [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)] HRESULT getElementsByTagName( [in] BSTR p, [retval, out] IXMLDOMNodeList **resultList); [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)] HRESULT createNode( [in] VARIANT var, [in] BSTR name, [in] BSTR uri, [retval, out] IXMLDOMNode **node); [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)] HRESULT nodeFromID( [in] BSTR id, [retval, out] IXMLDOMNode **node); [id(DISPID_XMLDOM_DOCUMENT_LOAD)] HRESULT load( [in] VARIANT var1, [retval, out] VARIANT_BOOL *pbool); [propget, id(DISPID_READYSTATE)] HRESULT readyState([retval, out] LONG *value); [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)] HRESULT parseError([retval, out] IXMLDOMParseError **err); [propget, id(DISPID_XMLDOM_DOCUMENT_URL)] HRESULT url([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)] HRESULT async([retval, out] VARIANT_BOOL *pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)] HRESULT async([in] VARIANT_BOOL pbool); [id(DISPID_XMLDOM_DOCUMENT_ABORT)] HRESULT abort(); [id(DISPID_XMLDOM_DOCUMENT_LOADXML)] HRESULT loadXML( [in] BSTR p, [out, retval] VARIANT_BOOL *pbool); [id(DISPID_XMLDOM_DOCUMENT_SAVE)] HRESULT save( [in] VARIANT var1); [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)] HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)] HRESULT validateOnParse([in] VARIANT_BOOL pbool); [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)] HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)] HRESULT resolveExternals([in] VARIANT_BOOL pbool); [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)] HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)] HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool); [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)] HRESULT onreadystatechange([in] VARIANT var1); [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)] HRESULT ondataavailable([in] VARIANT var1); [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)] HRESULT ontransformnode([in] VARIANT var1); } [ local, object, dual, oleautomation, uuid (373984c8-b845-449b-91e7-45ac83036ade) ] interface IXMLDOMSchemaCollection : IDispatch { [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)] HRESULT add( [in] BSTR uri, [in] VARIANT var); [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)] HRESULT get( [in] BSTR uri, [retval, out] IXMLDOMNode **node); [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)] HRESULT remove( [in] BSTR uri); [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)] HRESULT length( [retval, out] LONG *length); [propget, id(DISPID_VALUE)] HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len); [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)] HRESULT addCollection( [in] IXMLDOMSchemaCollection *otherCollection); [propget, id(DISPID_NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **ppUnk); } [ local, object, dual, oleautomation, uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a), ] interface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection { [id(DISPID_SOM_VALIDATE)] HRESULT validate(); [propput, id(DISPID_SOM_VALIDATEONLOAD)] HRESULT validateOnLoad( [in] VARIANT_BOOL validateOnLoad); [propget, id(DISPID_SOM_VALIDATEONLOAD)] HRESULT validateOnLoad( [out,retval] VARIANT_BOOL* validateOnLoad); [id(DISPID_SOM_GETSCHEMA)] HRESULT getSchema( [in] BSTR namespaceURI, [out,retval] ISchema** schema); [id(DISPID_SOM_GETDECLARATION)] HRESULT getDeclaration( [in] IXMLDOMNode* node, [out,retval]ISchemaItem** item); } [ local, object, dual, oleautomation, uuid (2933BF95-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMDocument2 : IXMLDOMDocument { [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)] HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection); [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)] HRESULT schemas([retval, out] VARIANT *var1); [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)] HRESULT schemas([in] VARIANT var1); [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)] HRESULT validate( [retval, out] IXMLDOMParseError **err); [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)] HRESULT setProperty( [in] BSTR p, [in] VARIANT var); [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)] HRESULT getProperty( [in] BSTR p, [retval, out] VARIANT *var); } [ local, object, dual, uuid(2933bf96-7b36-11d2-b20e-00c04f983e60), oleautomation, ] interface IXMLDOMDocument3 : IXMLDOMDocument2 { [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)] HRESULT validateNode( [in] IXMLDOMNode *node, [out, retval] IXMLDOMParseError **error); [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)] HRESULT importNode( [in] IXMLDOMNode *node, [in] VARIANT_BOOL deep, [out, retval] IXMLDOMNode **clone); } [ local, object, dual, oleautomation, uuid (2933BF82-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMNodeList : IDispatch { [propget, id(DISPID_VALUE)] HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode); [propget, id(DISPID_DOM_NODELIST_LENGTH)] HRESULT length([retval, out] LONG *lLength); [id(DISPID_XMLDOM_NODELIST_NEXTNODE)] HRESULT nextNode( [retval, out] IXMLDOMNode **outNode); [id(DISPID_XMLDOM_NODELIST_RESET)] HRESULT reset(); [propget, id(DISPID_NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **ppUnk); } [ local, object, dual, oleautomation, uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E) ] interface IXMLDOMSelection : IXMLDOMNodeList { [propget, id(DISPID_XMLDOM_SELECTION_EXPR)] HRESULT expr([retval, out] BSTR *p); [propput, id(DISPID_XMLDOM_SELECTION_EXPR)] HRESULT expr([in] BSTR p); [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)] HRESULT context([retval, out] IXMLDOMNode **ppNode); [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)] HRESULT context([in] IXMLDOMNode * pNode); [id(DISPID_XMLDOM_SELECTION_PEEKNODE)] HRESULT peekNode( [retval, out] IXMLDOMNode **ppNode); [id(DISPID_XMLDOM_SELECTION_MATCHES)] HRESULT matches( [in] IXMLDOMNode *pNode, [retval, out] IXMLDOMNode **ppNode); [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)] HRESULT removeNext( [retval, out] IXMLDOMNode **ppNode); [id(DISPID_XMLDOM_SELECTION_REMOVEALL)] HRESULT removeAll(); [id(DISPID_XMLDOM_SELECTION_CLONE)] HRESULT clone( [retval, out] IXMLDOMSelection **ppNode); [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)] HRESULT getProperty( [in] BSTR p, [retval, out] VARIANT * var); [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)] HRESULT setProperty( [in] BSTR p, [in] VARIANT var); } [ local, object, dual, oleautomation, uuid (2933BF83-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMNamedNodeMap : IDispatch { [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)] HRESULT getNamedItem( [in] BSTR p, [retval, out] IXMLDOMNode **outNode); [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)] HRESULT setNamedItem( [in] IXMLDOMNode *newNode, [retval, out] IXMLDOMNode **outNode); [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)] HRESULT removeNamedItem( [in] BSTR p, [retval, out] IXMLDOMNode **outNode); [propget, id(DISPID_VALUE)] HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode); [propget, id(DISPID_DOM_NODELIST_LENGTH)] HRESULT length([retval, out] LONG *lLength); [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)] HRESULT getQualifiedItem( [in] BSTR name, [in] BSTR uri, [retval, out] IXMLDOMNode **outNode); [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)] HRESULT removeQualifiedItem( [in] BSTR name, [in] BSTR uri, [retval, out] IXMLDOMNode **outNode); [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)] HRESULT nextNode( [retval, out] IXMLDOMNode **outNode); [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)] HRESULT reset(); [propget, id(DISPID_NEWENUM)] HRESULT _newEnum([retval, out] IUnknown **ppUnk); } [ local, object, dual, oleautomation, uuid (3efaa413-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMDocumentFragment : IXMLDOMNode { } [ local, object, dual, oleautomation, uuid (2933BF84-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMCharacterData : IXMLDOMNode { [propget, id(DISPID_DOM_DATA_DATA)] HRESULT data([retval, out] BSTR *p); [propput, id(DISPID_DOM_DATA_DATA)] HRESULT data([in] BSTR data); [propget, id(DISPID_DOM_DATA_LENGTH)] HRESULT length([retval, out] LONG *len); [id(DISPID_DOM_DATA_SUBSTRING)] HRESULT substringData( [in] LONG offset, [in] LONG count, [retval, out] BSTR *p); [id(DISPID_DOM_DATA_APPEND)] HRESULT appendData( [in] BSTR p); [id(DISPID_DOM_DATA_INSERT)] HRESULT insertData( [in] LONG offset, [in] BSTR p); [id(DISPID_DOM_DATA_DELETE)] HRESULT deleteData( [in] LONG offset, [in] LONG count); [id(DISPID_DOM_DATA_REPLACE)] HRESULT replaceData( [in] LONG offset, [in] LONG count, [in] BSTR p); } [ local, object, dual, oleautomation, uuid (2933BF85-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMAttribute : IXMLDOMNode { [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)] HRESULT name([retval, out] BSTR *p); [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)] HRESULT value([retval, out] VARIANT *var1); [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)] HRESULT value([in] VARIANT var1); } [ local, object, dual, oleautomation, uuid (2933BF86-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMElement : IXMLDOMNode { [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)] HRESULT tagName([retval, out] BSTR *p); [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR p, [retval, out] VARIANT *var); [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR p, [in] VARIANT var); [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR p); [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)] HRESULT getAttributeNode( [in] BSTR p, [retval, out] IXMLDOMAttribute **attributeNode); [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)] HRESULT setAttributeNode( [in] IXMLDOMAttribute *domAttribute, [retval, out] IXMLDOMAttribute **attributeNode); [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)] HRESULT removeAttributeNode( [in] IXMLDOMAttribute *domAttribute, [retval, out] IXMLDOMAttribute **attributeNode); [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)] HRESULT getElementsByTagName( [in] BSTR p, [retval, out] IXMLDOMNodeList **resultList); [id(DISPID_DOM_ELEMENT_NORMALIZE)] HRESULT normalize(); } [ local, object, dual, oleautomation, uuid (2933BF87-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMText : IXMLDOMCharacterData { [id(DISPID_DOM_TEXT_SPLITTEXT)] HRESULT splitText( [in] LONG offset, [retval, out] IXMLDOMText **txtNode); } [ local, object, dual, oleautomation, uuid (2933BF88-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMComment : IXMLDOMCharacterData { } [ local, object, dual, oleautomation, uuid (2933BF89-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMProcessingInstruction : IXMLDOMNode { [propget, id(DISPID_DOM_PI_TARGET)] HRESULT target([retval, out] BSTR *p); [propget, id(DISPID_DOM_PI_DATA)] HRESULT data([retval, out] BSTR *p); [propput, id(DISPID_DOM_PI_DATA)] HRESULT data([in] BSTR p); } [ local, object, dual, oleautomation, uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMCDATASection : IXMLDOMText { } [ local, object, dual, oleautomation, uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMDocumentType : IXMLDOMNode { [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)] HRESULT name([retval, out] BSTR *p); [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)] HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap); [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)] HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap); } [ local, object, dual, oleautomation, uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMNotation : IXMLDOMNode { [propget, id(DISPID_DOM_NOTATION_PUBLICID)] HRESULT publicId([retval, out] VARIANT *id); [propget, id(DISPID_DOM_NOTATION_SYSTEMID)] HRESULT systemId([retval, out] VARIANT *id); } [ local, object, dual, oleautomation, uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMEntity : IXMLDOMNode { [propget, id(DISPID_DOM_ENTITY_PUBLICID)] HRESULT publicId([retval, out] VARIANT *id1); [propget, id(DISPID_DOM_ENTITY_SYSTEMID)] HRESULT systemId([retval, out] VARIANT *id1); [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)] HRESULT notationName([retval, out] BSTR *p); } [ local, object, dual, oleautomation, uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMEntityReference : IXMLDOMNode { } [ local, object, dual, oleautomation, uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60) ] interface IXMLDOMImplementation : IDispatch { [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)] HRESULT hasFeature( [in] BSTR feature, [in] BSTR version, [retval, out] VARIANT_BOOL *pbool); } [ local, object, dual, oleautomation, uuid (3efaa425-272f-11d2-836f-0000f87a7782) ] interface IXTLRuntime : IXMLDOMNode { [id(DISPID_XTLRUNTIME_UNIQUEID)] HRESULT uniqueID( [in]IXMLDOMNode *pNode, [retval, out]LONG *pID); [id(DISPID_XTLRUNTIME_DEPTH)] HRESULT depth( [in] IXMLDOMNode *pNode, [retval, out]LONG * pDepth); [id(DISPID_XTLRUNTIME_CHILDNUMBER)] HRESULT childNumber( [in]IXMLDOMNode *pNode, [retval, out] LONG *pNumber); [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)] HRESULT ancestorChildNumber( [in]BSTR bstr, [in]IXMLDOMNode *pNode, [retval, out]LONG *pNumber); [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)] HRESULT absoluteChildNumber( [in]IXMLDOMNode *pNode, [retval, out]LONG *pNumber); [id(DISPID_XTLRUNTIME_FORMATINDEX)] HRESULT formatIndex( [in] LONG lIndex, [in] BSTR bstr, [retval, out]BSTR *pbstr); [id(DISPID_XTLRUNTIME_FORMATNUMBER)] HRESULT formatNumber( [in] double dblNumber, [in] BSTR bstr, [retval, out]BSTR *pbstr); [id(DISPID_XTLRUNTIME_FORMATDATE)] HRESULT formatDate( [in] VARIANT var1, [in] BSTR bstr, [optional, in] VARIANT var2, [retval, out]BSTR *pbstr); [id(DISPID_XTLRUNTIME_FORMATTIME)] HRESULT formatTime( [in] VARIANT var1, [in] BSTR bstr, [optional, in] VARIANT var2, [retval, out]BSTR *pbstr); } [ uuid(3efaa427-272f-11d2-836f-0000f87a7782) ] dispinterface XMLDOMDocumentEvents { properties: methods: [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)] HRESULT ondataavailable(); [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)] HRESULT onreadystatechange(); } [ local, object, dual, oleautomation, uuid (2933BF92-7B36-11d2-B20E-00C04F983E60) ] interface IXSLProcessor : IDispatch { [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)] HRESULT input([in] VARIANT var); [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)] HRESULT input([retval, out] VARIANT *var); [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)] HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate); [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)] HRESULT setStartMode( [in] BSTR p, [in, defaultvalue("")] BSTR uri); [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)] HRESULT startMode([retval, out] BSTR *p); [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)] HRESULT startModeURI([retval, out] BSTR *uri); [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)] HRESULT output([in] VARIANT var); [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)] HRESULT output([retval, out] VARIANT *var); [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)] HRESULT transform( [retval, out] VARIANT_BOOL *pbool); [id(DISPID_XMLDOM_PROCESSOR_RESET)] HRESULT reset(); [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)] HRESULT readyState([retval, out] LONG *pstate); [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)] HRESULT addParameter( [in] BSTR p, [in] VARIANT var, [in, defaultvalue("")] BSTR uri); [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)] HRESULT addObject( [in] IDispatch* obj, [in] BSTR uri); [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)] HRESULT stylesheet([retval, out] IXMLDOMNode **node); } [ local, object, dual, oleautomation, uuid (2933BF93-7B36-11d2-B20E-00C04F983E60) ] interface IXSLTemplate : IDispatch { [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)] HRESULT stylesheet([in] IXMLDOMNode *node); [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)] HRESULT stylesheet([retval, out] IXMLDOMNode **node); [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)] HRESULT createProcessor( [retval, out] IXSLProcessor **ppProcessor); } [ object, uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8), odl, dual, oleautomation, pointer_default(unique) ] interface IXMLHTTPRequest : IDispatch { [id(1)] HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync, [in,optional] VARIANT username, [in,optional] VARIANT password); [id(2)] HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue); [id(3)] HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value); [id(4)] HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders); [id(5)] HRESULT send([in, optional] VARIANT body); [id(6)] HRESULT abort(); [propget, id(7)] HRESULT status([out, retval] LONG *pStatus); [propget, id(8)] HRESULT statusText([out, retval] BSTR *pStatus); [propget, id(9)] HRESULT responseXML([out, retval] IDispatch **pBody); [propget, id(10)] HRESULT responseText([out, retval] BSTR *pBody); [propget, id(11)] HRESULT responseBody([out, retval] VARIANT *pBody); [propget, id(12)] HRESULT responseStream([out, retval] VARIANT *pBody); [propget, id(13)] HRESULT readyState([out, retval] LONG *pState); [propput, id(14)] HRESULT onreadystatechange([in] IDispatch *pReadyStateSink); } [ object, dual, oleautomation, uuid(2e9196bf-13ba-4dd4-91ca-6c571f281495) ] interface IServerXMLHTTPRequest : IXMLHTTPRequest { typedef enum _SERVERXMLHTTP_OPTION { SXH_OPTION_URL = -1, SXH_OPTION_URL_CODEPAGE, SXH_OPTION_ESCAPE_PERCENT_IN_URL, SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS, SXH_OPTION_SELECT_CLIENT_SSL_CERT } SERVERXMLHTTP_OPTION; [id(15)] HRESULT setTimeouts( [in] long resolveTimeout, [in] long connectTimeout, [in] long sendTimeout, [in] long receiveTimeout); [id(16)] HRESULT waitForResponse( [in, optional] VARIANT timeoutInSeconds, [out, retval] VARIANT_BOOL * isSuccessful); [id(17)] HRESULT getOption( [in] SERVERXMLHTTP_OPTION option, [out, retval] VARIANT * value); [id(18)] HRESULT setOption( [in] SERVERXMLHTTP_OPTION option, [in] VARIANT value); } [ object, dual, oleautomation, uuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7) ] interface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest { typedef enum _SXH_PROXY_SETTING { SXH_PROXY_SET_DEFAULT = 0, SXH_PROXY_SET_PRECONFIG = 0, SXH_PROXY_SET_DIRECT, SXH_PROXY_SET_PROXY } SXH_PROXY_SETTING; [id(19)] HRESULT setProxy( [in] SXH_PROXY_SETTING proxySetting, [in, optional] VARIANT varProxyServer, [in, optional] VARIANT varBypassList); [id(20)] HRESULT setProxyCredentials( [in] BSTR bstrUserName, [in] BSTR bstrPassword); } [ local, object, dual, oleautomation, uuid (3efaa426-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMParseError : IDispatch { [propget, id(DISPID_VALUE)] HRESULT errorCode([retval, out] LONG *errCode); [propget, id(DISPID_DOM_ERROR_URL)] HRESULT url([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_REASON)] HRESULT reason([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_SRCTEXT)] HRESULT srcText([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_LINE)] HRESULT line([retval, out] LONG *lineNo); [propget, id(DISPID_DOM_ERROR_LINEPOS)] HRESULT linepos([retval, out] LONG * linePos); [propget, id(DISPID_DOM_ERROR_FILEPOS)] HRESULT filepos([retval, out] LONG * filePos); } [ local, object, dual, oleautomation, uuid (3efaa428-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMParseError2 : IXMLDOMParseError { [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)] HRESULT errorXPath([retval, out] BSTR *xpathexpr); [propget, id(DISPID_DOM_ERROR2_ALLERRORS)] HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors); [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)] HRESULT errorParameters( [in] long index, [retval, out] BSTR *param); [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)] HRESULT errorParametersCount([retval, out] long *count); } [ local, object, dual, oleautomation, uuid (3efaa429-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMParseErrorCollection : IDispatch { [propget, id(DISPID_VALUE)] HRESULT item( [in] long index, [retval, out] IXMLDOMParseError2 **error); [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)] HRESULT length( [retval, out] long *length); [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)] HRESULT next( [retval, out] IXMLDOMParseError2 **error); [id(DISPID_DOM_ERRORCOLLECTION_RESET)] HRESULT reset(); [propget, hidden, restricted, id(DISPID_NEWENUM)] HRESULT _newEnum( [retval, out] IUnknown **ppunk); } [ uuid(F6D90F11-9C73-11D3-B32E-00C04F990BB4) ] coclass DOMDocument { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(f5078f1b-c551-11d3-89b9-0000f81fe221) ] coclass DOMDocument26 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(f5078f32-c551-11d3-89b9-0000f81fe221) ] coclass DOMDocument30 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(88d969c0-f192-11d4-a65f-0040963251e5) ] coclass DOMDocument40 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ helpstring("XML DOM Document 6.0"), progid("Msxml2.DOMDocument.6.0"), threading(both), uuid(88d96a05-f192-11d4-a65f-0040963251e5) ] coclass DOMDocument60 { [default] interface IXMLDOMDocument3; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(F6D90F12-9C73-11D3-B32E-00C04F990BB4) ] coclass FreeThreadedDOMDocument { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(f5078f1c-c551-11d3-89b9-0000f81fe221) ] coclass FreeThreadedDOMDocument26 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(f5078f33-c551-11d3-89b9-0000f81fe221) ] coclass FreeThreadedDOMDocument30 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(88d969c1-f192-11d4-a65f-0040963251e5) ] coclass FreeThreadedDOMDocument40 { [default] interface IXMLDOMDocument2; [default, source] dispinterface XMLDOMDocumentEvents; } [ helpstring("Free threaded XML DOM Document 6.0"), progid("Msxml2.FreeThreadedDOMDocument.6.0"), threading(both), uuid(88d96a06-f192-11d4-a65f-0040963251e5), ] coclass FreeThreadedDOMDocument60 { [default] interface IXMLDOMDocument3; [default, source] dispinterface XMLDOMDocumentEvents; } [ uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4) ] coclass XMLHTTP { [default] interface IXMLHTTPRequest; } [ uuid(f5078f1e-c551-11d3-89b9-0000f81fe221) ] coclass XMLHTTP26 { [default] interface IXMLHTTPRequest; } [ uuid(f5078f35-c551-11d3-89b9-0000f81fe221) ] coclass XMLHTTP30 { [default] interface IXMLHTTPRequest; } [ uuid(88d969c5-f192-11d4-a65f-0040963251e5) ] coclass XMLHTTP40 { [default] interface IXMLHTTPRequest; } [ helpstring("XML HTTP 6.0"), progid("Msxml2.XMLHTTP.6.0"), threading(apartment), uuid(88d96a0a-f192-11d4-a65f-0040963251e5) ] coclass XMLHTTP60 { [default] interface IXMLHTTPRequest; } [ uuid(afba6b42-5692-48ea-8141-dc517dcf0ef1) ] coclass ServerXMLHTTP { [default] interface IServerXMLHTTPRequest; } [ uuid(afb40ffd-b609-40a3-9828-f88bbe11e4e3) ] coclass ServerXMLHTTP30 { [default] interface IServerXMLHTTPRequest; } [ uuid(88d969c6-f192-11d4-a65f-0040963251e5) ] coclass ServerXMLHTTP40 { [default] interface IServerXMLHTTPRequest2; } [ helpstring("Server XML HTTP 6.0"), progid("Msxml2.ServerXMLHTTP.6.0"), threading(apartment), uuid(88d96a0b-f192-11d4-a65f-0040963251e5) ] coclass ServerXMLHTTP60 { [default] interface IServerXMLHTTPRequest2; } [ uuid(373984c9-b845-449b-91e7-45ac83036ade) ] coclass XMLSchemaCache { [default] interface IXMLDOMSchemaCollection; } [ uuid(f5078f1d-c551-11d3-89b9-0000f81fe221) ] coclass XMLSchemaCache26 { [default] interface IXMLDOMSchemaCollection; } [ uuid(f5078f34-c551-11d3-89b9-0000f81fe221) ] coclass XMLSchemaCache30 { [default] interface IXMLDOMSchemaCollection; } [ uuid(88d969c2-f192-11d4-a65f-0040963251e5) ] coclass XMLSchemaCache40 { [default] interface IXMLDOMSchemaCollection2; } [ helpstring("XML Schema Cache 6.0"), progid("Msxml2.XMLSchemaCache.6.0"), threading(both), uuid(88d96a07-f192-11d4-a65f-0040963251e5) ] coclass XMLSchemaCache60 { [default] interface IXMLDOMSchemaCollection2; } [ uuid(2933BF94-7B36-11d2-B20E-00C04F983E60) ] coclass XSLTemplate { [default] interface IXSLTemplate; } [ uuid(f5078f21-c551-11d3-89b9-0000f81fe221) ] coclass XSLTemplate26 { [default] interface IXSLTemplate; } [ uuid(f5078f36-c551-11d3-89b9-0000f81fe221) ] coclass XSLTemplate30 { [default] interface IXSLTemplate; } [ uuid(88d969c3-f192-11d4-a65f-0040963251e5) ] coclass XSLTemplate40 { [default] interface IXSLTemplate; } [ helpstring("XSL Template 6.0"), progid("Msxml2.XSLTemplate.6.0"), threading(both), uuid(88d96a08-f192-11d4-a65f-0040963251e5) ] coclass XSLTemplate60 { [default] interface IXSLTemplate; } /* * Sax Interfaces */ [ object, local, uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9) ] interface ISAXAttributes : IUnknown { HRESULT getLength( [out, retval] int *length); HRESULT getURI( [in] int nIndex, [out] const WCHAR **pUrl, [out] int *pUriSize); HRESULT getLocalName( [in] int nIndex, [out] const WCHAR **pLocalName, [out] int *pLocalNameLength); HRESULT getQName( [in] int nIndex, [out] const WCHAR **pQName, [out] int *pQNameLength); HRESULT getName( [in] int nIndex, [out] const WCHAR **pUri, [out] int * pUriLength, [out] const WCHAR ** pLocalName, [out] int * pLocalNameSize, [out] const WCHAR ** pQName, [out] int * pQNameLength); HRESULT getIndexFromName( [in] const WCHAR * pUri, [in] int cUriLength, [in] const WCHAR * pLocalName, [in] int cocalNameLength, [out, retval] int * index); HRESULT getIndexFromQName( [in] const WCHAR * pQName, [in] int nQNameLength, [out, retval] int * index); HRESULT getType( [in] int nIndex, [out] const WCHAR ** pType, [out] int * pTypeLength); HRESULT getTypeFromName( [in] const WCHAR * pUri, [in] int nUri, [in] const WCHAR * pLocalName, [in] int nLocalName, [out] const WCHAR ** pType, [out] int * nType); HRESULT getTypeFromQName( [in] const WCHAR * pQName, [in] int nQName, [out] const WCHAR ** pType, [out] int * nType); HRESULT getValue( [in] int nIndex, [out] const WCHAR ** pValue, [out] int * nValue); HRESULT getValueFromName( [in] const WCHAR * pUri, [in] int nUri, [in] const WCHAR * pLocalName, [in] int nLocalName, [out] const WCHAR ** pValue, [out] int * nValue); HRESULT getValueFromQName( [in] const WCHAR * pQName, [in] int nQName, [out] const WCHAR ** pValue, [out] int * nValue); } [ object, local, uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44) ] interface ISAXContentHandler : IUnknown { HRESULT putDocumentLocator( [in] ISAXLocator * pLocator); HRESULT startDocument(); HRESULT endDocument(); HRESULT startPrefixMapping( [in] const WCHAR * pPrefix, [in] int nPrefix, [in] const WCHAR * pUri, [in] int nUri); HRESULT endPrefixMapping( [in] const WCHAR * pPrefix, [in] int nPrefix); HRESULT startElement( [in] const WCHAR * pNamespaceUri, [in] int nNamespaceUri, [in] const WCHAR * pLocalName, [in] int nLocalName, [in] const WCHAR * pQName, [in] int nQName, [in] ISAXAttributes * pAttr); HRESULT endElement( [in] const WCHAR * pNamespaceUri, [in] int nNamespaceUri, [in] const WCHAR * pLocalName, [in] int nLocalName, [in] const WCHAR * pQName, [in] int nQName); HRESULT characters( [in] const WCHAR * pChars, [in] int nChars); HRESULT ignorableWhitespace( [in] const WCHAR * pChars, [in] int nChars); HRESULT processingInstruction( [in] const WCHAR * pTarget, [in] int nTarget, [in] const WCHAR * pData, [in] int nData); HRESULT skippedEntity( [in] const WCHAR * pName, [in] int nName); } [ object, local, uuid(862629ac-771a-47b2-8337-4e6843c1be90) ] interface ISAXDeclHandler : IUnknown { HRESULT elementDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pModel, [in] int nModel); HRESULT attributeDecl( [in] const WCHAR * pElementName, [in] int nElementName, [in] const WCHAR * pAttributeName, [in] int nAttributeName, [in] const WCHAR * pType, [in] int nType, [in] const WCHAR * pValueDefault, [in] int nValueDefault, [in] const WCHAR * pValue, [in] int nValue); HRESULT internalEntityDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pValue, [in] int nValue); HRESULT externalEntityDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pPublicId, [in] int nPublicId, [in] const WCHAR * pSystemId, [in] int nSystemId); } [ object, local, uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed) ] interface ISAXDTDHandler : IUnknown { HRESULT notationDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pPublicId, [in] int nPublicId, [in] const WCHAR * pSystemId, [in] int nSystemId); HRESULT unparsedEntityDecl( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pPublicId, [in] int nPublicId, [in] const WCHAR * pSystemId, [in] int nSystemId, [in] const WCHAR * pNotationName, [in] int nNotationName); } [ object, local, uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07), ] interface ISAXEntityResolver : IUnknown { HRESULT resolveEntity( [in] const WCHAR * pPublicId, [in] const WCHAR * pSystemId, [out, retval] VARIANT * ret); } [ object, local, uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0) ] interface ISAXErrorHandler : IUnknown { HRESULT error( [in] ISAXLocator * pLocator, [in] const WCHAR * pErrorMessage, [in] HRESULT hrErrorCode); HRESULT fatalError( [in] ISAXLocator * pLocator, [in] const WCHAR * pErrorMessage, [in] HRESULT hrErrorCode); HRESULT ignorableWarning( [in] ISAXLocator * pLocator, [in] const WCHAR * pErrorMessage, [in] HRESULT hrErrorCode); } [ object, local, uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6) ] interface ISAXLexicalHandler : IUnknown { HRESULT startDTD( [in] const WCHAR * pName, [in] int nName, [in] const WCHAR * pPublicId, [in] int nPublicId, [in] const WCHAR * pSystemId, [in] int nSystemId); HRESULT endDTD(); HRESULT startEntity( [in] const WCHAR * pName, [in] int nName); HRESULT endEntity( [in] const WCHAR * pName, [in] int nName); HRESULT startCDATA(); HRESULT endCDATA(); HRESULT comment( [in] const WCHAR * pChars, [in] int nChars); } [ object, local, uuid(9b7e472a-0de4-4640-bff3-84d38a051c31) ] interface ISAXLocator : IUnknown { HRESULT getColumnNumber( [out, retval] int * nColumn); HRESULT getLineNumber( [out, retval] int * nLine); HRESULT getPublicId( [out, retval] const WCHAR ** publicId); HRESULT getSystemId( [out, retval] const WCHAR ** systemId); } [ local, object, uuid(70409222-ca09-4475-acb8-40312fe8d145) ] interface ISAXXMLFilter : ISAXXMLReader { HRESULT getParent( [out, retval] ISAXXMLReader ** pReader); HRESULT putParent( [in] ISAXXMLReader * reader); } [ local, object, uuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802) ] interface ISAXXMLReader : IUnknown { HRESULT getFeature( [in] const WCHAR * pFeature, [out, retval] VARIANT_BOOL * pValue); HRESULT putFeature( [in] const WCHAR * pFeature, [in] VARIANT_BOOL vfValue); HRESULT getProperty( [in] const WCHAR * pProp, [out, retval] VARIANT * pValue); HRESULT putProperty( [in] const WCHAR * pProp, [in] VARIANT value); HRESULT getEntityResolver( [out, retval] ISAXEntityResolver ** ppEntityResolver); HRESULT putEntityResolver( [in] ISAXEntityResolver * pEntityResolver); HRESULT getContentHandler( [out, retval] ISAXContentHandler ** pContentHandler); HRESULT putContentHandler( [in] ISAXContentHandler * contentHandler); HRESULT getDTDHandler( [out, retval] ISAXDTDHandler ** pDTDHandler); HRESULT putDTDHandler( [in] ISAXDTDHandler * pDTDHandler); HRESULT getErrorHandler( [out, retval] ISAXErrorHandler ** pErrorHandler); HRESULT putErrorHandler( [in] ISAXErrorHandler * errorHandler); HRESULT getBaseURL( [out, retval] const WCHAR ** pBaseUrl); HRESULT putBaseURL( [in] const WCHAR * pBaseUrl); HRESULT getSecureBaseURL( [out, retval] const WCHAR ** pSecureBaseUrl); HRESULT putSecureBaseURL( [in] const WCHAR * secureBaseUrl); HRESULT parse( [in] VARIANT varInput); HRESULT parseURL( [in] const WCHAR * url); } [ object, dual, oleautomation, uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0) ] interface IVBSAXAttributes : IDispatch { [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)] HRESULT length( [out, retval] int * nLength); [id(DISPID_SAX_ATTRIBUTES_GETURI)] HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri); [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)] HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName); [id(DISPID_SAX_ATTRIBUTES_GETQNAME)] HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName); [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)] HRESULT getIndexFromName( [in] BSTR uri, [in] BSTR localName, [out, retval] int * nIndex); [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)] HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex); [id(DISPID_SAX_ATTRIBUTES_GETTYPE)] HRESULT getType( [in] int nIndex, [out, retval] BSTR * type); [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)] HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName, [out, retval] BSTR * type); [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)] HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type); [id(DISPID_SAX_ATTRIBUTES_GETVALUE)] HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value); [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)] HRESULT getValueFromName( [in] BSTR uri, [in] BSTR localName, [out, retval] BSTR * value); [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)] HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value); } [ object, dual, oleautomation, uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa) ] interface IVBSAXContentHandler : IDispatch { [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)] HRESULT documentLocator( [in] IVBSAXLocator * oLocator); [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)] HRESULT startDocument(); [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)] HRESULT endDocument(); [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)] HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri); [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)] HRESULT endPrefixMapping( [in, out] BSTR * prefix); [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)] HRESULT startElement( [in, out] BSTR * namespaceURI, [in, out] BSTR * localName, [in, out] BSTR * QName, [in] IVBSAXAttributes * oAttributes); [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)] HRESULT endElement( [in, out] BSTR * namespaceURI, [in, out] BSTR * localName, [in, out] BSTR * strQName); [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)] HRESULT characters( [in, out] BSTR * chars); [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)] HRESULT ignorableWhitespace( [in, out] BSTR * chars); [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)] HRESULT processingInstruction( [in, out] BSTR * target, [in, out] BSTR * data); [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)] HRESULT skippedEntity( [in, out] BSTR * name); } [ object, dual, oleautomation, uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b) ] interface IVBSAXDeclHandler : IDispatch { [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)] HRESULT elementDecl( [in, out] BSTR * name, [in, out] BSTR * model); [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)] HRESULT attributeDecl( [in, out] BSTR * elementName, [in, out] BSTR * attributeName, [in, out] BSTR * type, [in, out] BSTR * valueDefault, [in, out] BSTR * value); [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)] HRESULT internalEntityDecl( [in, out] BSTR * name, [in, out] BSTR * value); [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)] HRESULT externalEntityDecl( [in, out] BSTR * name, [in, out] BSTR * publicId, [in, out] BSTR * systemId); } [ object, dual, oleautomation, uuid(24fb3297-302d-4620-ba39-3a732d850558) ] interface IVBSAXDTDHandler : IDispatch { [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)] HRESULT notationDecl( [in, out] BSTR * name, [in, out] BSTR * publicId, [in, out] BSTR * systemId); [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)] HRESULT unparsedEntityDecl( [in, out] BSTR * name, [in, out] BSTR * publicId, [in, out] BSTR * systemId, [in, out] BSTR * notationName); } [ object, dual, oleautomation, uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc) ] interface IVBSAXEntityResolver : IDispatch { [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)] HRESULT resolveEntity( [in, out] BSTR * publicId, [in, out] BSTR * systemId, [out, retval] VARIANT * ret); } [ object, dual, oleautomation, uuid(d963d3fe-173c-4862-9095-b92f66995f52) ] interface IVBSAXErrorHandler : IDispatch { [id(DISPID_SAX_ERRORHANDLER_ERROR)] HRESULT error( [in] IVBSAXLocator * locator, [in, out] BSTR * errorMessage, [in] LONG errorCode); [id(DISPID_SAX_ERRORHANDLER_FATALERROR)] HRESULT fatalError( [in] IVBSAXLocator * locator, [in, out] BSTR * errorMessage, [in] LONG errorCode); [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)] HRESULT ignorableWarning( [in] IVBSAXLocator * locator, [in, out] BSTR * errorMessage, [in] LONG errorCode); } [ object, dual, oleautomation, uuid(032aac35-8c0e-4d9d-979f-e3b702935576) ] interface IVBSAXLexicalHandler : IDispatch { [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)] HRESULT startDTD( [in, out] BSTR * name, [in, out] BSTR * publicId, [in, out] BSTR * systemId); [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)] HRESULT endDTD(); [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)] HRESULT startEntity([in, out] BSTR * name); [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)] HRESULT endEntity([in, out] BSTR * name); [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)] HRESULT startCDATA(); [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)] HRESULT endCDATA(); [id(DISPID_SAX_LEXICALHANDLER_COMMENT)] HRESULT comment( [in, out] BSTR * chars); } [ object, dual, oleautomation, uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288) ] interface IVBSAXLocator : IDispatch { [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)] HRESULT columnNumber( [out, retval] int * column); [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)] HRESULT lineNumber( [out, retval] int * line); [propget, id(DISPID_SAX_LOCATOR_PUBLICID)] HRESULT publicId( [out, retval] BSTR * publicId); [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)] HRESULT systemId( [out, retval] BSTR * systemId); } [ object, dual, oleautomation, uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04) ] interface IVBSAXXMLFilter : IDispatch { [propget, id(DISPID_SAX_XMLFILTER_PARENT)] HRESULT parent( [out, retval] IVBSAXXMLReader ** reader); [propputref, id(DISPID_SAX_XMLFILTER_PARENT)] HRESULT parent( [in] IVBSAXXMLReader * reader); } [ dual, oleautomation, object, uuid (8c033caa-6cd6-4f73-b728-4531af74945f) ] interface IVBSAXXMLReader : IDispatch { [id(DISPID_SAX_XMLREADER_GETFEATURE)] HRESULT getFeature( [in] BSTR pFeature, [out, retval] VARIANT_BOOL * pValue); [id(DISPID_SAX_XMLREADER_PUTFEATURE)] HRESULT putFeature( [in] BSTR pFeature, [in] VARIANT_BOOL vfValue); [id(DISPID_SAX_XMLREADER_GETPROPERTY)] HRESULT getProperty( [in] BSTR pProp, [out, retval] VARIANT * pValue); [id(DISPID_SAX_XMLREADER_PUTPROPERTY)] HRESULT putProperty( [in] BSTR pProp, [in] VARIANT value); [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)] HRESULT entityResolver( [out, retval] IVBSAXEntityResolver ** ppEntityResolver); [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)] HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver); [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)] HRESULT contentHandler( [out, retval] IVBSAXContentHandler ** pContentHandler); [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)] HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler); [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)] HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler); [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)] HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler); [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)] HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler); [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)] HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler); [propget, id(DISPID_SAX_XMLREADER_BASEURL)] HRESULT baseURL([out, retval] BSTR *pBaseUrl); [propput, id(DISPID_SAX_XMLREADER_BASEURL)] HRESULT baseURL([in] BSTR pBaseUrl); [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)] HRESULT secureBaseURL([out, retval] BSTR *pSecureBaseUrl); [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)] HRESULT secureBaseURL([in] BSTR secureBaseUrl); [id(DISPID_SAX_XMLREADER_PARSE)] HRESULT parse( [in] VARIANT varInput); [id(DISPID_SAX_XMLREADER_PARSEURL)] HRESULT parseURL([in] BSTR url); } [ object, dual, oleautomation, uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262) ] interface IMXAttributes : IDispatch { [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)] HRESULT addAttribute( [in] BSTR uri, [in] BSTR localName, [in] BSTR QName, [in] BSTR type, [in] BSTR value); [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)] HRESULT addAttributeFromIndex( [in] VARIANT atts, [in] int index); [id(DISPID_MX_ATTRIBUTES_CLEAR)] HRESULT clear(); [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] int index); [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)] HRESULT setAttribute( [in] int index, [in] BSTR uri, [in] BSTR localName, [in] BSTR QName, [in] BSTR type, [in] BSTR value); [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)] HRESULT setAttributes( [in] VARIANT atts); [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)] HRESULT setLocalName( [in] int index, [in] BSTR localName); [id(DISPID_MX_ATTRIBUTES_SETQNAME)] HRESULT setQName( [in] int index, [in] BSTR QName); [id(DISPID_MX_ATTRIBUTES_SETTYPE)] HRESULT setType( [in] int index, [in] BSTR type); [id(DISPID_MX_ATTRIBUTES_SETURI)] HRESULT setURI( [in] int index, [in] BSTR uri); [id(DISPID_MX_ATTRIBUTES_SETVALUE)] HRESULT setValue([in] int index, [in] BSTR value); } [ local, object, dual, oleautomation, uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db) ] interface IMXSchemaDeclHandler : IDispatch { [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)] HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement ); } [ object, dual, oleautomation, uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30) ] interface IMXReaderControl : IDispatch { [id(DISPID_MX_READER_CONTROL_ABORT)] HRESULT abort(); [id(DISPID_MX_READER_CONTROL_RESUME)] HRESULT resume(); [id(DISPID_MX_READER_CONTROL_SUSPEND)] HRESULT suspend(); } [ object, dual, oleautomation, uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d) ] interface IMXWriter : IDispatch { [propput, id(DISPID_MX_WRITER_OUTPUT)] HRESULT output ( [in] VARIANT Destination); [propget, id(DISPID_MX_WRITER_OUTPUT)] HRESULT output ( [out, retval] VARIANT * Destination); [propput, id(DISPID_MX_WRITER_ENCODING)] HRESULT encoding ([in] BSTR encoding); [propget, id(DISPID_MX_WRITER_ENCODING)] HRESULT encoding ([out, retval] BSTR * encoding); [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)] HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark); [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)] HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark); [propput, id(DISPID_MX_WRITER_INDENT)] HRESULT indent ([in] VARIANT_BOOL indentMode); [propget, id(DISPID_MX_WRITER_INDENT)] HRESULT indent ([out, retval] VARIANT_BOOL * indentMode); [propput, id(DISPID_MX_WRITER_STANDALONE)] HRESULT standalone ([in] VARIANT_BOOL value); [propget, id(DISPID_MX_WRITER_STANDALONE)] HRESULT standalone ([out, retval] VARIANT_BOOL * value); [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)] HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value); [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)] HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value); [propput, id(DISPID_MX_WRITER_VERSION)] HRESULT version ([in] BSTR version); [propget, id(DISPID_MX_WRITER_VERSION)] HRESULT version ([out, retval] BSTR * version); [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)] HRESULT disableOutputEscaping([in] VARIANT_BOOL value); [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)] HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value); [id(DISPID_MX_WRITER_FLUSH)] HRESULT flush(); } [ local, object, dual, oleautomation, uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd) ] interface IMXNamespacePrefixes : IDispatch { [propget, id(DISPID_VALUE)] HRESULT item( [in] long index, [out, retval] BSTR *prefix); [propget, id(DISPID_MX_NSMGR_LENGTH)] HRESULT length( [out,retval] long *length ); [propget, restricted, hidden, id(DISPID_NEWENUM)] HRESULT _newEnum( [out, retval] IUnknown **ppUnk ); } [ local, object, hidden, uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd) ] interface IMXNamespaceManager : IUnknown { HRESULT putAllowOverride([in] VARIANT_BOOL fOverride); HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride); HRESULT reset(); HRESULT pushContext(); HRESULT pushNodeContext( [in] IXMLDOMNode *contextNode, [in] VARIANT_BOOL fDeep); HRESULT popContext(); HRESULT declarePrefix( [in] const WCHAR *prefix, [in] const WCHAR *namespaceURI); HRESULT getDeclaredPrefix( [in] long nIndex, [in, out] WCHAR *pwchPrefix, [in, out] int *pcchPrefix); HRESULT getPrefix( [in] const WCHAR *pwszNamespaceURI, [in] long nIndex, [in, out] WCHAR *pwchPrefix, [in, out] int *pcchPrefix); HRESULT getURI( [in] const WCHAR *pwchPrefix, [in] IXMLDOMNode* pContextNode, [in, out] WCHAR *pwchUri, [in, out] int *pcchUri); } [ local, object, dual, oleautomation, uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd) ] interface IVBMXNamespaceManager : IDispatch { [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)] HRESULT allowOverride([in] VARIANT_BOOL fOverride); [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)] HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride); [id(DISPID_MX_NSMGR_RESET)] HRESULT reset(); [id(DISPID_MX_NSMGR_PUSHCONTEXT)] HRESULT pushContext(); [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)] HRESULT pushNodeContext( [in] IXMLDOMNode* contextNode, [in, defaultvalue(-1)] VARIANT_BOOL fDeep); [id(DISPID_MX_NSMGR_POPCONTEXT)] HRESULT popContext(); [id(DISPID_MX_NSMGR_DECLAREPREFIX)] HRESULT declarePrefix( [in] BSTR prefix, [in] BSTR namespaceURI); [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)] HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes); [id(DISPID_MX_NSMGR_GETPREFIXES)] HRESULT getPrefixes( [in] BSTR namespaceURI, [out, retval] IMXNamespacePrefixes** prefixes); [id(DISPID_MX_NSMGR_GETURI)] HRESULT getURI( [in] BSTR prefix, [out, retval] VARIANT* uri); [id(DISPID_MX_NSMGR_GETURIFROMNODE)] HRESULT getURIFromNode( [in] BSTR strPrefix, [in] IXMLDOMNode* contextNode, [out, retval] VARIANT* uri); } [ local, object, dual, oleautomation, uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd) ] interface IMXXMLFilter : IDispatch { [id(DISPID_MXXML_FILTER_GETFEATURE)] HRESULT getFeature( [in] BSTR strName, [out, retval] VARIANT_BOOL * fValue); [id(DISPID_MXXML_FILTER_PUTFEATURE)] HRESULT putFeature( [in] BSTR strName, [in] VARIANT_BOOL fValue); [id(DISPID_MXXML_FILTER_GETPROPERTY)] HRESULT getProperty( [in] BSTR strName, [out, retval] VARIANT * varValue); [id(DISPID_MXXML_FILTER_PUTPROPERTY)] HRESULT putProperty( [in] BSTR strName, [in] VARIANT varValue); [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget] HRESULT entityResolver( [out, retval] IUnknown **oResolver ); [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref] HRESULT entityResolver( [in] IUnknown *oResolver ); [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget] HRESULT contentHandler( [out, retval] IUnknown **oHandler ); [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref] HRESULT contentHandler( [in] IUnknown *oHandler ); [id(DISPID_MXXML_FILTER_DTDHANDLER), propget] HRESULT dtdHandler( [out, retval] IUnknown **oHandler ); [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref] HRESULT dtdHandler( [in] IUnknown *oHandler ); [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget] HRESULT errorHandler( [out, retval] IUnknown **oHandler ); [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref] HRESULT errorHandler( [in] IUnknown *oHandler ); } [ local, object, uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaStringCollection : IDispatch { [id(DISPID_VALUE), propget] HRESULT item( [in] long index, [out,retval] BSTR* bstr); [id(DISPID_SOM_LENGTH), propget] HRESULT length( [out,retval] long* length); [id(DISPID_NEWENUM), hidden, restricted, propget] HRESULT _newEnum( [out,retval] IUnknown** ppunk); } [ local, object, uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaItemCollection : IDispatch { [id(DISPID_VALUE), propget] HRESULT item( [in] long index, [out,retval]ISchemaItem** item); [id(DISPID_SOM_ITEMBYNAME)] HRESULT itemByName( [in] BSTR name, [out,retval] ISchemaItem** item); [id(DISPID_SOM_ITEMBYQNAME)] HRESULT itemByQName( [in] BSTR name, [in] BSTR namespaceURI, [out,retval] ISchemaItem** item); [id(DISPID_SOM_LENGTH), propget] HRESULT length( [out,retval]long* length); [id(DISPID_NEWENUM), hidden, restricted, propget] HRESULT _newEnum( [out,retval]IUnknown** ppunk); } [ local, object, uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaItem : IDispatch { [id(DISPID_SOM_NAME), propget] HRESULT name( [out,retval] BSTR* name); [id(DISPID_SOM_NAMESPACEURI), propget] HRESULT namespaceURI( [out,retval] BSTR* namespaceURI); [id(DISPID_SOM_SCHEMA), propget] HRESULT schema( [out,retval] ISchema** schema); [id(DISPID_SOM_ID), propget] HRESULT id( [out,retval] BSTR* id); [id(DISPID_SOM_ITEMTYPE), propget] HRESULT itemType( [out,retval] SOMITEMTYPE* itemType); [id(DISPID_SOM_UNHANDLEDATTRS), propget] HRESULT unhandledAttributes( [out,retval] IVBSAXAttributes** attributes); [id(DISPID_SOM_WRITEANNOTATION)] HRESULT writeAnnotation( [in] IUnknown* annotationSink, [out,retval] VARIANT_BOOL* isWritten); } [ local, object, uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchema : ISchemaItem { [id(DISPID_SOM_TARGETNAMESPACE), propget] HRESULT targetNamespace( [out,retval] BSTR* targetNamespace); [id(DISPID_SOM_VERSION), propget] HRESULT version( [out,retval] BSTR* version); [id(DISPID_SOM_TYPES), propget] HRESULT types( [out,retval] ISchemaItemCollection** types); [id(DISPID_SOM_ELEMENTS), propget] HRESULT elements( [out,retval] ISchemaItemCollection** elements); [id(DISPID_SOM_ATTRIBUTES), propget] HRESULT attributes( [out,retval] ISchemaItemCollection** attributes); [id(DISPID_SOM_ATTRIBUTEGROUPS), propget] HRESULT attributeGroups( [out,retval] ISchemaItemCollection** attributeGroups); [id(DISPID_SOM_MODELGROUPS), propget] HRESULT modelGroups( [out,retval] ISchemaItemCollection** modelGroups); [id(DISPID_SOM_NOTATIONS), propget] HRESULT notations( [out,retval] ISchemaItemCollection** notations); [id(DISPID_SOM_SCHEMALOCATIONS), propget] HRESULT schemaLocations( [out,retval] ISchemaStringCollection** schemaLocations); } [ local, object, uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaParticle : ISchemaItem { [id(DISPID_SOM_MINOCCURS), propget] HRESULT minOccurs( [out,retval] VARIANT* minOccurs); [id(DISPID_SOM_MAXOCCURS), propget] HRESULT maxOccurs( [out,retval] VARIANT* maxOccurs); } [ object, uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual, ] interface ISchemaAttribute : ISchemaItem { [id(DISPID_SOM_TYPE), propget] HRESULT type( [out,retval] ISchemaType** type); [id(DISPID_SOM_SCOPE), propget] HRESULT scope( [out,retval] ISchemaComplexType** scope); [id(DISPID_SOM_DEFAULTVALUE), propget] HRESULT defaultValue( [out,retval]BSTR* defaultValue); [id(DISPID_SOM_FIXEDVALUE), propget] HRESULT fixedValue( [out,retval] BSTR* fixedValue); [id(DISPID_SOM_USE), propget] HRESULT use( [out,retval] SCHEMAUSE* use); [id(DISPID_SOM_ISREFERENCE), propget] HRESULT isReference( [out,retval] VARIANT_BOOL* reference); } [ local, object, uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaElement : ISchemaParticle { [id(DISPID_SOM_TYPE), propget] HRESULT type( [out,retval] ISchemaType** type); [id(DISPID_SOM_SCOPE), propget] HRESULT scope( [out,retval] ISchemaComplexType** scope); [id(DISPID_SOM_DEFAULTVALUE), propget] HRESULT defaultValue( [out,retval] BSTR* defaultValue); [id(DISPID_SOM_FIXEDVALUE), propget] HRESULT fixedValue( [out,retval] BSTR* fixedValue); [id(DISPID_SOM_ISNILLABLE), propget] HRESULT isNillable( [out,retval] VARIANT_BOOL* nillable); [id(DISPID_SOM_IDCONSTRAINTS), propget] HRESULT identityConstraints( [out,retval] ISchemaItemCollection** constraints); [id(DISPID_SOM_SUBSTITUTIONGROUP), propget] HRESULT substitutionGroup( [out,retval] ISchemaElement** element); [id(DISPID_SOM_EXCLUSIONS), propget] HRESULT substitutionGroupExclusions( [out,retval] SCHEMADERIVATIONMETHOD* exclusions); [id(DISPID_SOM_DISALLOWED), propget] HRESULT disallowedSubstitutions( [out,retval] SCHEMADERIVATIONMETHOD* disallowed); [id(DISPID_SOM_ISABSTRACT), propget] HRESULT isAbstract( [out,retval] VARIANT_BOOL* abstract); [id(DISPID_SOM_ISREFERENCE), propget] HRESULT isReference( [out,retval] VARIANT_BOOL* reference); } [ local, object, uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaType : ISchemaItem { [id(DISPID_SOM_BASETYPES), propget] HRESULT baseTypes( [out,retval] ISchemaItemCollection** baseTypes); [id(DISPID_SOM_FINAL), propget] HRESULT final( [out,retval] SCHEMADERIVATIONMETHOD* final); [id(DISPID_SOM_VARIETY), propget] HRESULT variety( [out,retval] SCHEMATYPEVARIETY* variety); [id(DISPID_SOM_DERIVEDBY), propget] HRESULT derivedBy( [out,retval] SCHEMADERIVATIONMETHOD* derivedBy); [id(DISPID_SOM_ISVALID)] HRESULT isValid( [in] BSTR data, [out,retval] VARIANT_BOOL* valid); [id(DISPID_SOM_MINEXCLUSIVE), propget] HRESULT minExclusive( [out,retval]BSTR* minExclusive); [id(DISPID_SOM_MININCLUSIVE), propget] HRESULT minInclusive( [out,retval] BSTR* minInclusive); [id(DISPID_SOM_MAXEXCLUSIVE), propget] HRESULT maxExclusive( [out,retval] BSTR* maxExclusive); [id(DISPID_SOM_MAXINCLUSIVE), propget] HRESULT maxInclusive( [out,retval] BSTR* maxInclusive); [id(DISPID_SOM_TOTALDIGITS), propget] HRESULT totalDigits( [out,retval] VARIANT* totalDigits); [id(DISPID_SOM_FRACTIONDIGITS), propget] HRESULT fractionDigits( [out,retval] VARIANT* fractionDigits); [id(DISPID_SOM_LENGTH), propget] HRESULT length( [out,retval] VARIANT* length); [id(DISPID_SOM_MINLENGTH), propget] HRESULT minLength( [out,retval]VARIANT* minLength); [id(DISPID_SOM_MAXLENGTH), propget] HRESULT maxLength( [out,retval]VARIANT* maxLength); [id(DISPID_SOM_ENUMERATION), propget] HRESULT enumeration( [out,retval] ISchemaStringCollection** enumeration); [id(DISPID_SOM_WHITESPACE), propget] HRESULT whitespace( [out,retval]SCHEMAWHITESPACE* whitespace); [id(DISPID_SOM_PATTERNS), propget] HRESULT patterns( [out,retval] ISchemaStringCollection** patterns); } [ local, object, uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual, ] interface ISchemaComplexType : ISchemaType { [id(DISPID_SOM_ISABSTRACT), propget] HRESULT isAbstract( [out,retval] VARIANT_BOOL* abstract); [id(DISPID_SOM_ANYATTRIBUTE), propget] HRESULT anyAttribute( [out,retval] ISchemaAny** anyAttribute); [id(DISPID_SOM_ATTRIBUTES), propget] HRESULT attributes( [out,retval] ISchemaItemCollection** attributes); [id(DISPID_SOM_CONTENTTYPE), propget] HRESULT contentType( [out,retval] SCHEMACONTENTTYPE* contentType); [id(DISPID_SOM_CONTENTMODEL), propget] HRESULT contentModel( [out,retval] ISchemaModelGroup** contentModel); [id(DISPID_SOM_PROHIBITED), propget] HRESULT prohibitedSubstitutions( [out,retval] SCHEMADERIVATIONMETHOD* prohibited); } [ local, object, uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual, ] interface ISchemaAttributeGroup : ISchemaItem { [id(DISPID_SOM_ANYATTRIBUTE), propget] HRESULT anyAttribute( [out,retval] ISchemaAny** anyAttribute); [id(DISPID_SOM_ATTRIBUTES), propget] HRESULT attributes( [out,retval] ISchemaItemCollection** attributes); } [ local, object, uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual, ] interface ISchemaModelGroup : ISchemaParticle { [id(DISPID_SOM_PARTICLES), propget] HRESULT particles( [out,retval] ISchemaItemCollection** particles); } [ local, object, uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaAny : ISchemaParticle { [id(DISPID_SOM_NAMESPACES), propget] HRESULT namespaces( [out,retval] ISchemaStringCollection** namespaces); [id(DISPID_SOM_PROCESSCONTENTS), propget] HRESULT processContents( [out,retval] SCHEMAPROCESSCONTENTS* processContents); } [ local, object, uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaIdentityConstraint : ISchemaItem { [id(DISPID_SOM_SELECTOR), propget] HRESULT selector( [out,retval] BSTR* selector); [id(DISPID_SOM_FIELDS), propget] HRESULT fields( [out,retval] ISchemaStringCollection** fields); [id(DISPID_SOM_REFERENCEDKEY), propget] HRESULT referencedKey( [out,retval] ISchemaIdentityConstraint** key); } [ local, object, uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a), oleautomation, dual ] interface ISchemaNotation : ISchemaItem { [id(DISPID_SOM_SYSTEMIDENTIFIER), propget] HRESULT systemIdentifier( [out,retval] BSTR* uri); [id(DISPID_SOM_PUBLICIDENTIFIER), propget] HRESULT publicIdentifier( [out,retval] BSTR* uri); } [ uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9) ] coclass SAXXMLReader { [default] interface IVBSAXXMLReader; interface ISAXXMLReader; interface IMXReaderControl; } [ uuid(3124c396-fb13-4836-a6ad-1317f1713688) ] coclass SAXXMLReader30 { [default] interface IVBSAXXMLReader; interface ISAXXMLReader; interface IMXReaderControl; } [ uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f) ] coclass SAXXMLReader40 { [default] interface IVBSAXXMLReader; interface ISAXXMLReader; } [ helpstring("SAX XML Reader 6.0"), progid("Msxml2.SAXXMLReader.6.0"), threading(both), uuid(88d96a0c-f192-11d4-a65f-0040963251e5) ] coclass SAXXMLReader60 { [default] interface IVBSAXXMLReader; interface ISAXXMLReader; } [ uuid(a4c23ec3-6b70-4466-9127-550077239978) ] coclass MXHTMLWriter { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXErrorHandler; interface ISAXDTDHandler; interface ISAXLexicalHandler; interface ISAXDeclHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(853d1540-c1a7-4aa9-a226-4d3bd301146d) ] coclass MXHTMLWriter30 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(88d969c9-f192-11d4-a65f-0040963251e5) ] coclass MXHTMLWriter40 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ helpstring("MXHTMLWriter 6.0"), progid("Msxml2.MXHTMLWriter.6.0"), threading(both), uuid(88d96a10-f192-11d4-a65f-0040963251e5) ] coclass MXHTMLWriter60 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020) ] coclass MXXMLWriter { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXErrorHandler; interface ISAXDTDHandler; interface ISAXLexicalHandler; interface ISAXDeclHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c) ] coclass MXXMLWriter30 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(88d969c8-f192-11d4-a65f-0040963251e5), ] coclass MXXMLWriter40 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ helpstring("MXXMLWriter 6.0"), progid("Msxml2.MXXMLWriter.6.0"), threading(both), uuid(88d96a0f-f192-11d4-a65f-0040963251e5) ] coclass MXXMLWriter60 { [default] interface IMXWriter; interface ISAXContentHandler; interface ISAXDeclHandler; interface ISAXDTDHandler; interface ISAXErrorHandler; interface ISAXLexicalHandler; interface IVBSAXContentHandler; interface IVBSAXDeclHandler; interface IVBSAXDTDHandler; interface IVBSAXErrorHandler; interface IVBSAXLexicalHandler; } [ uuid(88d969d5-f192-11d4-a65f-0040963251e5) ] coclass MXNamespaceManager { [default] interface IVBMXNamespaceManager; interface IMXNamespaceManager; } [ uuid(88d969d6-f192-11d4-a65f-0040963251e5) ] coclass MXNamespaceManager40 { [default] interface IVBMXNamespaceManager; interface IMXNamespaceManager; } [ helpstring("MXNamespaceManager 6.0"), progid("Msxml2.MXNamespaceManager.6.0"), threading(both), uuid(88d96a11-f192-11d4-a65f-0040963251e5) ] coclass MXNamespaceManager60 { [default] interface IVBMXNamespaceManager; interface IMXNamespaceManager; } [ uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0) ] coclass SAXAttributes { [default] interface IMXAttributes; interface IVBSAXAttributes; interface ISAXAttributes; } [ uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba) ] coclass SAXAttributes30 { [default] interface IMXAttributes; interface IVBSAXAttributes; interface ISAXAttributes; } [ uuid(88d969ca-f192-11d4-a65f-0040963251e5), ] coclass SAXAttributes40 { [default] interface IMXAttributes; interface IVBSAXAttributes; interface ISAXAttributes; } [ helpstring("SAXAttributes 6.0"), progid("Msxml2.SAXAttributes.6.0"), threading(both), uuid(88d96a0e-f192-11d4-a65f-0040963251e5) ] coclass SAXAttributes60 { [default] interface IMXAttributes; interface IVBSAXAttributes; interface ISAXAttributes; } /* * Error Codes */ cpp_quote("#define E_XML_NOTWF 0xC00CE223") cpp_quote("#define E_XML_NODTD 0xC00CE224") cpp_quote("#define E_XML_INVALID 0xC00CE225") cpp_quote("#define E_XML_BUFFERTOOSMALL 0xC00CE226") } /* Library MSXML */ ================================================ FILE: wine/windows/msxml6did.h ================================================ /* * Copyright (C) 2010 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __MSXML6DID_H__ #define __MSXML6DID_H__ #include #endif /* __MSXML6DID_H__ */ ================================================ FILE: wine/windows/msxmldid.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __MSXMLDID_H__ #define __MSXMLDID_H__ #define DISPID_XOBJ_MIN 0x10000 #define DISPID_XOBJ_MAX 0x1FFFF #define DISPID_XOBJ_BASE 0x10000 #define DISPID_XMLELEMENTCOLLECTION 0x10000 #define DISPID_XMLELEMENTCOLLECTION_LENGTH 0x10001 #define DISPID_XMLELEMENTCOLLECTION_NEWENUM DISPID_NEWENUM #define DISPID_XMLELEMENTCOLLECTION_ITEM 0x10003 #define DISPID_XMLDOCUMENT 0x10064 #define DISPID_XMLDOCUMENT_ROOT 0x10065 #define DISPID_XMLDOCUMENT_FILESIZE 0x10066 #define DISPID_XMLDOCUMENT_FILEMODIFIEDDATE 0x10067 #define DISPID_XMLDOCUMENT_FILEUPDATEDDATE 0x10068 #define DISPID_XMLDOCUMENT_URL 0x10069 #define DISPID_XMLDOCUMENT_MIMETYPE 0x1006a #define DISPID_XMLDOCUMENT_READYSTATE 0x1006b #define DISPID_XMLDOCUMENT_CREATEELEMENT 0x1006c #define DISPID_XMLDOCUMENT_CHARSET 0x1006d #define DISPID_XMLDOCUMENT_VERSION 0x1006e #define DISPID_XMLDOCUMENT_DOCTYPE 0x1006f #define DISPID_XMLDOCUMENT_DTDURL 0x10070 #define DISPID_XMLDOCUMENT_ASYNC 0x10071 #define DISPID_XMLDOCUMENT_CASEINSENSITIVE 0x10072 #define DISPID_XMLELEMENT 0x100c8 #define DISPID_XMLELEMENT_TAGNAME 0x100c9 #define DISPID_XMLELEMENT_PARENT 0x100ca #define DISPID_XMLELEMENT_SETATTRIBUTE 0x100cb #define DISPID_XMLELEMENT_GETATTRIBUTE 0x100cc #define DISPID_XMLELEMENT_REMOVEATTRIBUTE 0x100cd #define DISPID_XMLELEMENT_CHILDREN 0x100ce #define DISPID_XMLELEMENT_TYPE 0x100cf #define DISPID_XMLELEMENT_TEXT 0x100d0 #define DISPID_XMLELEMENT_ADDCHILD 0x100d1 #define DISPID_XMLELEMENT_REMOVECHILD 0x100d2 #define DISPID_XMLELEMENT_ATTRIBUTES 0x100d3 #define DISPID_XMLNOTIFSINK 0x1012c #define DISPID_XMLNOTIFSINK_CHILDADDED 0x1012d #define DISPID_XMLATTRIBUTE 0x10190 #define DISPID_XMLATTRIBUTE_NAME 0x10191 #define DISPID_XMLATTRIBUTE_VALUE 0x10192 #endif /* __MSXMLDID_H__ */ ================================================ FILE: wine/windows/mtxdm.h ================================================ /* * Copyright (C) 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __MTXDM_H__ #define __MTXDM_H__ #include "comsvcs.h" #ifdef __cplusplus extern "C" { #endif HRESULT CDECL GetDispenserManager(IDispenserManager**); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/multimon.h ================================================ /* * Copyright (C) 2017 Alex Henrie * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* This file intentionally left blank */ ================================================ FILE: wine/windows/nb30.h ================================================ /* * Copyright (C) 2001 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef NCB_INCLUDED #define NCB_INCLUDED #ifdef __cplusplus extern "C" { #endif #define NCBNAMSZ 16 #define MAX_LANA 0xfe #define NCBCALL 0x10 #define NCBLISTEN 0x11 #define NCBHANGUP 0x12 #define NCBSEND 0x14 #define NCBRECV 0x15 #define NCBRECVANY 0x16 #define NCBCHAINSEND 0x17 #define NCBDGSEND 0x20 #define NCBDGRECV 0x21 #define NCBDGSENDBC 0x22 #define NCBDGRECVBC 0x23 #define NCBADDNAME 0x30 #define NCBDELNAME 0x31 #define NCBRESET 0x32 #define NCBASTAT 0x33 #define NCBSSTAT 0x34 #define NCBCANCEL 0x35 #define NCBADDGRNAME 0x36 #define NCBENUM 0x37 #define NCBUNLINK 0x70 #define NCBSENDNA 0x71 #define NCBCHAINSENDNA 0x72 #define NCBLANSTALERT 0x73 #define NCBACTION 0x77 #define NCBFINDNAME 0x78 #define NCBTRACE 0x79 #define ASYNCH 0x80 typedef struct _NCB { UCHAR ncb_command; UCHAR ncb_retcode; UCHAR ncb_lsn; UCHAR ncb_num; PUCHAR ncb_buffer; WORD ncb_length; UCHAR ncb_callname[NCBNAMSZ]; UCHAR ncb_name[NCBNAMSZ]; UCHAR ncb_rto; UCHAR ncb_sto; VOID (CALLBACK *ncb_post)(struct _NCB *); UCHAR ncb_lana_num; UCHAR ncb_cmd_cplt; #ifdef _WIN64 UCHAR ncb_reserve[18]; #else UCHAR ncb_reserve[10]; #endif HANDLE ncb_event; } NCB, *PNCB; typedef struct _ADAPTER_STATUS { UCHAR adapter_address[6]; UCHAR rev_major; UCHAR reserved0; UCHAR adapter_type; UCHAR rev_minor; WORD duration; WORD frmr_recv; WORD frmr_xmit; WORD iframe_recv_error; WORD xmit_aborts; DWORD xmit_success; DWORD recv_success; WORD iframe_xmit_error; WORD recv_buffer_unavail; WORD t1_timeouts; WORD ti_timeouts; DWORD reserved1; WORD free_ncbs; WORD max_cfg_ncbs; WORD max_ncbs; WORD xmit_buf_unavail; WORD max_dgram_size; WORD pending_sess; WORD max_cfg_sess; WORD max_sess; WORD max_sess_pkt_size; WORD name_count; } ADAPTER_STATUS, *PADAPTER_STATUS; typedef struct _NAME_BUFFER { UCHAR name[NCBNAMSZ]; UCHAR name_num; UCHAR name_flags; } NAME_BUFFER, *PNAME_BUFFER; #define NAME_FLAGS_MASK 0x87 #define GROUP_NAME 0x80 #define UNIQUE_NAME 0x00 #define REGISTERING 0x00 #define REGISTERED 0x04 #define DEREGISTERED 0x05 #define DUPLICATE 0x06 #define DUPLICATE_DEREG 0x07 typedef struct _LANA_ENUM { UCHAR length; UCHAR lana[MAX_LANA+1]; } LANA_ENUM, *PLANA_ENUM; typedef struct _FIND_NAME_HEADER { WORD node_count; UCHAR reserved; UCHAR unique_group; } FIND_NAME_HEADER, *PFIND_NAME_HEADER; typedef struct _FIND_NAME_BUFFER { UCHAR length; UCHAR access_control; UCHAR frame_control; UCHAR destination_addr[6]; UCHAR source_addr[6]; UCHAR routing_info[6]; } FIND_NAME_BUFFER, *PFIND_NAME_BUFFER; typedef struct _SESSION_HEADER { UCHAR sess_name; UCHAR num_sess; UCHAR rcv_dg_outstanding; UCHAR rcv_any_outstanding; } SESSION_HEADER, *PSESSION_HEADER; typedef struct _SESSION_BUFFER { UCHAR lsn; UCHAR state; UCHAR local_name[NCBNAMSZ]; UCHAR remote_name[NCBNAMSZ]; UCHAR rcvs_outstanding; UCHAR sends_outstanding; } SESSION_BUFFER, *PSESSION_BUFFER; #define LISTEN_OUTSTANDING 0x01 #define CALL_PENDING 0x02 #define SESSION_ESTABLISHED 0x03 #define HANGUP_PENDING 0x04 #define HANGUP_COMPLETE 0x05 #define SESSION_ABORTED 0x06 #define ALL_TRANSPORTS "M\0\0\0" #define NRC_GOODRET 0x00 #define NRC_BUFLEN 0x01 #define NRC_ILLCMD 0x03 #define NRC_CMDTMO 0x05 #define NRC_INCOMP 0x06 #define NRC_BADDR 0x07 #define NRC_SNUMOUT 0x08 #define NRC_NORES 0x09 #define NRC_SCLOSED 0x0a #define NRC_CMDCAN 0x0b #define NRC_DUPNAME 0x0d #define NRC_NAMTFUL 0x0e #define NRC_ACTSES 0x0f #define NRC_LOCTFUL 0x11 #define NRC_REMTFUL 0x12 #define NRC_ILLNN 0x13 #define NRC_NOCALL 0x14 #define NRC_NOWILD 0x15 #define NRC_INUSE 0x16 #define NRC_NAMERR 0x17 #define NRC_SABORT 0x18 #define NRC_NAMCONF 0x19 #define NRC_IFBUSY 0x21 #define NRC_TOOMANY 0x22 #define NRC_BRIDGE 0x23 #define NRC_CANOCCR 0x24 #define NRC_CANCEL 0x26 #define NRC_DUPENV 0x30 #define NRC_ENVNOTDEF 0x34 #define NRC_OSRESNOTAV 0x35 #define NRC_MAXAPPS 0x36 #define NRC_NOSAPS 0x37 #define NRC_NORESOURCES 0x38 #define NRC_INVADDRESS 0x39 #define NRC_INVDDID 0x3b #define NRC_LOCKFAIL 0x3c #define NRC_OPENERROR 0x3f #define NRC_SYSTEM 0x40 #define NRC_PENDING 0xff UCHAR WINAPI Netbios(PNCB pncb); #ifdef __cplusplus } #endif #endif /* NCB_INCLUDED */ ================================================ FILE: wine/windows/ncrypt.h ================================================ /* * Copyright (c) 2016 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __NCRYPT_H__ #define __NCRYPT_H__ #ifdef __cplusplus extern "C" { #endif #ifndef WINAPI #define WINAPI __stdcall #endif #ifndef __SECSTATUS_DEFINED__ typedef LONG SECURITY_STATUS; #define __SECSTATUS_DEFINED__ #endif typedef ULONG_PTR NCRYPT_HANDLE; typedef ULONG_PTR NCRYPT_PROV_HANDLE; typedef ULONG_PTR NCRYPT_KEY_HANDLE; typedef ULONG_PTR NCRYPT_HASH_HANDLE; typedef ULONG_PTR NCRYPT_SECRET_HANDLE; SECURITY_STATUS WINAPI NCryptCreatePersistedKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, const WCHAR *, DWORD, DWORD); SECURITY_STATUS WINAPI NCryptDecrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD); SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD); SECURITY_STATUS WINAPI NCryptFinalizeKey(NCRYPT_KEY_HANDLE, DWORD); SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE); SECURITY_STATUS WINAPI NCryptOpenKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, DWORD, DWORD); SECURITY_STATUS WINAPI NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE *, const WCHAR *, DWORD); #ifdef __cplusplus } #endif #endif /* __NCRYPT_H__ */ ================================================ FILE: wine/windows/ndrtypes.h ================================================ /* * NDR Types * * Copyright 2006 Robert Shearman (for CodeWeavers) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __NDRTYPES_H__ #define __NDRTYPES_H__ #include typedef struct { unsigned short MustSize : 1; /* 0x0001 - client interpreter MUST size this * parameter, other parameters may be skipped, using the value in * NDR_PROC_PARTIAL_OIF_HEADER::constant_client_buffer_size instead. */ unsigned short MustFree : 1; /* 0x0002 - server interpreter MUST size this * parameter, other parameters may be skipped, using the value in * NDR_PROC_PARTIAL_OIF_HEADER::constant_server_buffer_size instead. */ unsigned short IsPipe : 1; /* 0x0004 - The parameter is a pipe handle */ unsigned short IsIn : 1; /* 0x0008 - The parameter is an input */ unsigned short IsOut : 1; /* 0x0010 - The parameter is an output */ unsigned short IsReturn : 1; /* 0x0020 - The parameter is to be returned */ unsigned short IsBasetype : 1; /* 0x0040 - The parameter is simple and has the * format defined by NDR_PARAM_OIF_BASETYPE rather than by * NDR_PARAM_OIF_OTHER. */ unsigned short IsByValue : 1; /* 0x0080 - Set for compound types being sent by * value. Can be of type: structure, union, transmit_as, represent_as, * wire_marshal and SAFEARRAY. */ unsigned short IsSimpleRef : 1; /* 0x0100 - parameter that is a reference * pointer to anything other than another pointer, and which has no * allocate attributes. */ unsigned short IsDontCallFreeInst : 1; /* 0x0200 - Used for some represent_as types * for when the free instance routine should not be called. */ unsigned short SaveForAsyncFinish : 1; /* 0x0400 - Unknown */ unsigned short Unused : 2; unsigned short ServerAllocSize : 3; /* 0xe000 - If non-zero * specifies the size of the object in numbers of 8byte blocks needed. * It will be stored on the server's stack rather than using an allocate * call. */ } PARAM_ATTRIBUTES; typedef struct { unsigned char ServerMustSize : 1; /* 0x01 - the server must perform a * sizing pass. */ unsigned char ClientMustSize : 1; /* 0x02 - the client must perform a * sizing pass. */ unsigned char HasReturn : 1; /* 0x04 - procedure has a return value. */ unsigned char HasPipes : 1; /* 0x08 - the pipe package should be used. */ unsigned char Unused : 1; /* 0x10 - not used */ unsigned char HasAsyncUuid : 1; /* 0x20 - indicates an asynchronous DCOM * procedure. */ unsigned char HasExtensions : 1; /* 0x40 - indicates that Win2000 * extensions are in use. */ unsigned char HasAsyncHandle : 1; /* 0x80 - indicates an asynchronous RPC * procedure. */ } INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS; typedef struct { unsigned char HasNewCorrDesc : 1; /* 0x01 - indicates new correlation * descriptors in use. */ unsigned char ClientCorrCheck : 1; /* 0x02 - client needs correlation * check. */ unsigned char ServerCorrCheck : 1; /* 0x04 - server needs correlation * check. */ unsigned char HasNotify : 1; /* 0x08 - should call MIDL [notify] * routine @ NotifyIndex. */ unsigned char HasNotify2 : 1; /* 0x10 - should call MIDL [notify_flag] routine @ * NotifyIndex. */ /* The following bits are in fact used by midl but haven't yet been named in the SDK. */ unsigned char Unused : 3; /* 0x20 - has complex return */ /* 0x40 - has range on conformance */ } INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2; /* Win2000 extensions */ typedef struct { /* size in bytes of all following extensions */ unsigned char Size; INTERPRETER_OPT_FLAGS2 Flags2; /* client cache size hint */ unsigned short ClientCorrHint; /* server cache size hint */ unsigned short ServerCorrHint; /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if * HasNotify or HasNotify2 flag set */ unsigned short NotifyIndex; } NDR_PROC_HEADER_EXTS; typedef struct { /* size in bytes of all following extensions */ unsigned char Size; INTERPRETER_OPT_FLAGS2 Flags2; /* client cache size hint */ unsigned short ClientCorrHint; /* server cache size hint */ unsigned short ServerCorrHint; /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if * HasNotify or HasNotify2 flag set */ unsigned short NotifyIndex; /* needed only on IA64 to cope with float/register loading */ unsigned short FloatArgMask; } NDR_PROC_HEADER_EXTS64; typedef enum { FC_BYTE = 0x01, /* 0x01 */ FC_CHAR, /* 0x02 */ FC_SMALL, /* 0x03 */ FC_USMALL, /* 0x04 */ FC_WCHAR, /* 0x05 */ FC_SHORT, /* 0x06 */ FC_USHORT, /* 0x07 */ FC_LONG, /* 0x08 */ FC_ULONG, /* 0x09 */ FC_FLOAT, /* 0x0a */ FC_HYPER, /* 0x0b */ FC_DOUBLE, /* 0x0c */ FC_ENUM16, /* 0x0d */ FC_ENUM32, /* 0x0e */ FC_IGNORE, /* 0x0f */ FC_ERROR_STATUS_T, /* 0x10 */ FC_RP, /* 0x11 */ /* reference pointer */ FC_UP, /* 0x12 */ /* unique pointer */ FC_OP, /* 0x13 */ /* object pointer */ FC_FP, /* 0x14 */ /* full pointer */ FC_STRUCT, /* 0x15 */ /* simple structure */ FC_PSTRUCT, /* 0x16 */ /* simple structure w/ pointers */ FC_CSTRUCT, /* 0x17 */ /* conformant structure */ FC_CPSTRUCT, /* 0x18 */ /* conformant structure w/ pointers */ FC_CVSTRUCT, /* 0x19 */ /* conformant varying struct */ FC_BOGUS_STRUCT, /* 0x1a */ /* complex structure */ FC_CARRAY, /* 0x1b */ /* conformant array */ FC_CVARRAY, /* 0x1c */ /* conformant varying array */ FC_SMFARRAY, /* 0x1d */ /* small (<64K) fixed array */ FC_LGFARRAY, /* 0x1e */ /* large (>= 64k) fixed array */ FC_SMVARRAY, /* 0x1f */ /* small (<64k) varying array */ FC_LGVARRAY, /* 0x20 */ /* large (>= 64k) varying array */ FC_BOGUS_ARRAY, /* 0x21 */ /* complex array */ FC_C_CSTRING, /* 0x22 */ /* conformant char string */ FC_C_BSTRING, /* 0x23 */ FC_C_SSTRING, /* 0x24 */ FC_C_WSTRING, /* 0x25 */ /* conformant wchar string */ FC_CSTRING, /* 0x26 */ /* non-conformant char string */ FC_BSTRING, /* 0x27 */ FC_SSTRING, /* 0x28 */ FC_WSTRING, /* 0x29 */ /* non-conformant wchar string */ FC_ENCAPSULATED_UNION, /* 0x2a */ FC_NON_ENCAPSULATED_UNION, /* 0x2b */ FC_BYTE_COUNT_POINTER, /* 0x2c */ /* [byte_count] ACF attribute */ FC_TRANSMIT_AS, /* 0x2d */ FC_REPRESENT_AS, /* 0x2e */ FC_IP, /* 0x2f */ /* interface pointer */ FC_BIND_CONTEXT, /* 0x30 */ FC_BIND_GENERIC, /* 0x31 */ FC_BIND_PRIMITIVE, /* 0x32 */ FC_AUTO_HANDLE, /* 0x33 */ FC_CALLBACK_HANDLE, /* 0x34 */ FC_UNUSED1, /* 0x35 */ FC_POINTER, /* 0x36 */ FC_ALIGNM2, /* 0x37 */ FC_ALIGNM4, /* 0x38 */ FC_ALIGNM8, /* 0x39 */ FC_UNUSED2, /* 0x3a */ FC_UNUSED3, /* 0x3b */ FC_UNUSED4, /* 0x3c */ FC_STRUCTPAD1, /* 0x3d */ FC_STRUCTPAD2, /* 0x3e */ FC_STRUCTPAD3, /* 0x3f */ FC_STRUCTPAD4, /* 0x40 */ FC_STRUCTPAD5, /* 0x41 */ FC_STRUCTPAD6, /* 0x42 */ FC_STRUCTPAD7, /* 0x43 */ FC_STRING_SIZED, /* 0x44 */ FC_UNUSED5, /* 0x45 */ FC_NO_REPEAT, /* 0x46 */ FC_FIXED_REPEAT, /* 0x47 */ FC_VARIABLE_REPEAT, /* 0x48 */ FC_FIXED_OFFSET, /* 0x49 */ FC_VARIABLE_OFFSET, /* 0x4a */ FC_PP, /* 0x4b */ /* pointer layout */ /* FC_PP: FC_PAD layouts */ /* layouts: FC_NO_REPEAT FC_PAD instance */ /* instance: NdrFcShort(memofs), NdrFcShort(bufofs), desc */ FC_EMBEDDED_COMPLEX, /* 0x4c */ FC_IN_PARAM, /* 0x4d */ FC_IN_PARAM_BASETYPE, /* 0x4e */ FC_IN_PARAM_NO_FREE_INST, /* 0x4f */ FC_IN_OUT_PARAM, /* 0x50 */ FC_OUT_PARAM, /* 0x51 */ FC_RETURN_PARAM, /* 0x52 */ FC_RETURN_PARAM_BASETYPE, /* 0x53 */ FC_DEREFERENCE, /* 0x54 */ FC_DIV_2, /* 0x55 */ FC_MULT_2, /* 0x56 */ FC_ADD_1, /* 0x57 */ FC_SUB_1, /* 0x58 */ FC_CALLBACK, /* 0x59 */ FC_CONSTANT_IID, /* 0x5a */ FC_END, /* 0x5b */ FC_PAD, /* 0x5c */ FC_HARD_STRUCT = 0xb1, FC_TRANSMIT_AS_PTR, /* 0xb2 */ FC_REPRESENT_AS_PTR, /* 0xb3 */ FC_USER_MARSHAL, /* 0xb4 */ FC_PIPE, /* 0xb5 */ FC_BLKHOLE, /* 0xb6 */ FC_RANGE, /* 0xb7 */ FC_INT3264, /* 0xb8 */ FC_UINT3264, /* 0xb9 */ } FORMAT_CHARACTER; #define FC_ALLOCATE_ALL_NODES 0x01 #define FC_DONT_FREE 0x02 #define FC_ALLOCED_ON_STACK 0x04 #define FC_SIMPLE_POINTER 0x08 #define FC_POINTER_DEREF 0x10 /* flags for all handle types */ #define HANDLE_PARAM_IS_VIA_PTR 0x80 #define HANDLE_PARAM_IS_IN 0x40 #define HANDLE_PARAM_IS_OUT 0x20 #define HANDLE_PARAM_IS_RETURN 0x10 /* flags for context handles */ #define NDR_STRICT_CONTEXT_HANDLE 0x08 #define NDR_CONTEXT_HANDLE_NOSERIALIZE 0x04 #define NDR_CONTEXT_HANDLE_SERIALIZE 0x02 #define NDR_CONTEXT_HANDLE_CANNOT_BE_NULL 0x01 #define Oi_FULL_PTR_USED 0x01 #define Oi_RPCSS_ALLOC_USED 0x02 #define Oi_OBJECT_PROC 0x04 #define Oi_HAS_RPCFLAGS 0x08 #define Oi_OBJ_USE_V2_INTERPRETER 0x20 #define Oi_HAS_COMM_OR_FAULT 0x20 #define Oi_USE_NEW_INIT_ROUTINES 0x40 #define FC_NORMAL_CONFORMANCE (unsigned char) 0x00 #define FC_POINTER_CONFORMANCE (unsigned char) 0x10 #define FC_TOP_LEVEL_CONFORMANCE (unsigned char) 0x20 #define FC_CONSTANT_CONFORMANCE (unsigned char) 0x40 #define FC_TOP_LEVEL_MULTID_CONFORMANCE (unsigned char) 0x80 #define USER_MARSHAL_UNIQUE 0x80 #define USER_MARSHAL_REF 0x40 #define USER_MARSHAL_POINTER 0xc0 #define USER_MARSHAL_IID 0x20 #endif ================================================ FILE: wine/windows/netcfgx.idl ================================================ /* * * Copyright 2014 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "wtypes.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif cpp_quote("#define NETCFG_E_ALREADY_INITIALIZED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA020)") cpp_quote("#define NETCFG_E_NO_WRITE_LOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA024)") [ local, object, uuid(c0e8ae99-306e-11d1-aacf-00805fc1270e), pointer_default(unique) ] interface INetCfgComponent : IUnknown { typedef enum tagCOMPONENT_CHARACTERISTICS { NCF_VIRTUAL = 0x00000001, NCF_SOFTWARE_ENUMERATED = 0x00000002, NCF_PHYSICAL = 0x00000004, NCF_HIDDEN = 0x00000008, NCF_NO_SERVICE = 0x00000010, NCF_NOT_USER_REMOVABLE = 0x00000020, NCF_MULTIPORT_INSTANCED_ADAPTER = 0x00000040, NCF_HAS_UI = 0x00000080, NCF_SINGLE_INSTANCE = 0x00000100, NCF_FILTER = 0x00000400, NCF_DONTEXPOSELOWER = 0x00001000, NCF_HIDE_BINDING = 0x00002000, NCF_NDIS_PROTOCOL = 0x00004000, NCF_FIXED_BINDING = 0x00020000, NCF_LW_FILTER = 0x00040000 } COMPONENT_CHARACTERISTICS; typedef enum tagNCRP_FLAGS { NCRP_QUERY_PROPERTY_UI = 0x00000001, NCRP_SHOW_PROPERTY_UI = 0x00000002 } NCRP_FLAGS; HRESULT GetDisplayName ([out] LPWSTR* ppszwDisplayName); HRESULT SetDisplayName ([in] LPCWSTR pszwDisplayName); HRESULT GetHelpText ([out] LPWSTR* pszwHelpText); HRESULT GetId ([out] LPWSTR* ppszwId); HRESULT GetCharacteristics ([out] LPDWORD pdwCharacteristics); HRESULT GetInstanceGuid ([out] GUID* pGuid); HRESULT GetPnpDevNodeId ([out] LPWSTR* ppszwDevNodeId); HRESULT GetClassGuid ([out] GUID* pGuid); HRESULT GetBindName ([out] LPWSTR* ppszwBindName); HRESULT GetDeviceStatus ([out] ULONG* pulStatus); HRESULT OpenParamKey ([out] HKEY* phkey); HRESULT RaisePropertyUi ([in] HWND hwndParent, [in] DWORD dwFlags, [in] IUnknown* punkContext); } [ local, object, uuid(c0e8ae92-306e-11d1-aacf-00805fc1270e), pointer_default(unique) ] interface IEnumNetCfgComponent : IUnknown { HRESULT Next ([in] ULONG celt, [out] INetCfgComponent** rgelt, [out] ULONG *pceltFetched); HRESULT Skip ([in] ULONG celt); HRESULT Reset (); HRESULT Clone ([out] IEnumNetCfgComponent** ppenum); } [ local, object, uuid(c0e8ae9f-306e-11d1-aacf-00805fc1270e), pointer_default(unique) ] interface INetCfgLock : IUnknown { HRESULT AcquireWriteLock ([in] DWORD cmsTimeout, [in] LPCWSTR pszwClientDescription, [out] LPWSTR* ppszwClientDescription); HRESULT ReleaseWriteLock (); HRESULT IsWriteLocked ([out] LPWSTR* ppszwClientDescription); } [ local, object, uuid(c0e8ae93-306e-11d1-aacf-00805fc1270e), pointer_default(unique) ] interface INetCfg : IUnknown { HRESULT Initialize ([in] PVOID pvReserved); HRESULT Uninitialize (); HRESULT Apply (); HRESULT Cancel (); HRESULT EnumComponents ([in] const GUID* pguidClass, [out] IEnumNetCfgComponent** ppenumComponent); HRESULT FindComponent ([in] LPCWSTR pszwInfId, [out] INetCfgComponent** pComponent); HRESULT QueryNetCfgClass ([in] const GUID* pguidClass, [in] REFIID riid,[out] void** ppvObject); } [ helpstring("Network Configuration Component Object"), threading(both), uuid(5b035261-40f9-11d1-aaec-00805fc1270e) ] coclass CNetCfg { [default] interface INetCfg; } ================================================ FILE: wine/windows/netcon.idl ================================================ /* * Copyright 2009 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "oaidl.idl"; import "unknwn.idl"; import "wtypes.idl"; /* import "prsht.idl"; */ #endif cpp_quote("DEFINE_GUID(CLSID_NetSharingManager,0x5c63c1ad,0x3956,0x4ff8,0x84,0x86,0x40,0x03,0x47,0x58,0x31,0x5b);") [ object, uuid(c08956a1-1cd3-11d1-b1c5-00805fc1270e), pointer_default(unique) ] interface INetConnection : IUnknown { typedef enum tagNETCON_CHARACTERISTIC_FLAGS { NCCF_NONE = 0x0000, NCCF_ALL_USERS = 0x0001, NCCF_ALLOW_DUPLICATION = 0x0002, NCCF_ALLOW_REMOVAL = 0x0004, NCCF_ALLOW_RENAME = 0x0008, NCCF_INCOMING_ONLY = 0x0020, NCCF_OUTGOING_ONLY = 0x0040, NCCF_BRANDED = 0x0080, NCCF_SHARED = 0x0100, NCCF_BRIDGED = 0x0200, NCCF_FIREWALLED = 0x0400, NCCF_DEFAULT = 0x0800, NCCF_HOMENET_CAPABLE = 0x1000, NCCF_SHARED_PRIVATE = 0x2000, NCCF_QUARANTINED = 0x4000, NCCF_RESERVED = 0x8000, NCCF_BLUETOOTH_MASK = 0x000F0000, NCCF_LAN_MASK = 0x00F00000 } NETCON_CHARACTERISTIC_FLAGS; typedef enum tagNETCON_STATUS { NCS_DISCONNECTED, NCS_CONNECTING, NCS_CONNECTED, NCS_DISCONNECTING, NCS_HARDWARE_NOT_PRESENT, NCS_HARDWARE_DISABLED, NCS_HARDWARE_MALFUNCTION, NCS_MEDIA_DISCONNECTED, NCS_AUTHENTICATING, NCS_AUTHENTICATION_SUCCEEDED, NCS_AUTHENTICATION_FAILED, NCS_INVALID_ADDRESS, NCS_CREDENTIALS_REQUIRED } NETCON_STATUS; typedef enum tagNETCON_TYPE { NCT_DIRECT_CONNECT, NCT_INBOUND, NCT_INTERNET, NCT_LAN, NCT_PHONE, NCT_TUNNEL, NCT_BRIDGE } NETCON_TYPE; typedef enum tagNETCON_MEDIATYPE { NCM_NONE, NCM_DIRECT, NCM_ISDN, NCM_LAN, NCM_PHONE, NCM_TUNNEL, NCM_PPPOE, NCM_BRIDGE, NCM_SHAREDACCESSHOST_LAN, NCM_SHAREDACCESSHOST_RAS } NETCON_MEDIATYPE; typedef struct tagNETCON_PROPERTIES { GUID guidId; [string] LPWSTR pszwName; [string] LPWSTR pszwDeviceName; NETCON_STATUS Status; NETCON_MEDIATYPE MediaType; DWORD dwCharacter; CLSID clsidThisObject; CLSID clsidUiObject; } NETCON_PROPERTIES; HRESULT Connect(); HRESULT Disconnect(); HRESULT Delete(); HRESULT Duplicate( [in, string] LPCWSTR pszwDuplicateName, [out] INetConnection **ppCon); HRESULT GetProperties([out] NETCON_PROPERTIES **ppProps); HRESULT GetUiObjectClassId([out, ref] CLSID *pclsid); HRESULT Rename([in, string] LPCWSTR pszwNewName); } [ object, uuid(24b7e9b5-e38f-4685-851b-00892cf5f940), oleautomation, dual, pointer_default(unique) ] interface INetSharingPortMappingProps : IDispatch { [propget, id(1)] HRESULT Name([out, retval] BSTR *pbstrName); [propget, id(2)] HRESULT IPProtocol([out, retval] UCHAR *pucIPProt); [propget, id(3)] HRESULT ExternalPort([out, retval] long *pusPort); [propget, id(4)] HRESULT InternalPort([out, retval] long *pusPort); [propget, id(5)] HRESULT Options([out, retval] long *pdwOptions); [propget, id(6)] HRESULT TargetName([out, retval] BSTR *pbstrTargetName); [propget, id(7)] HRESULT TargetIPAddress([out, retval] BSTR *pbstrTargetIPAddress); [propget, id(8)] HRESULT Enabled([out, retval] VARIANT_BOOL *pbool); } [ object, uuid(c08956b1-1cd3-11d1-b1c5-00805fc1270e), oleautomation, dual, pointer_default(unique) ] interface INetSharingPortMapping : IDispatch { [id(1)] HRESULT Disable(); [id(2)] HRESULT Enable(); [propget, id(3)] HRESULT Properties([out, retval] INetSharingPortMappingProps **ppNSPMP); [id(4)] HRESULT Delete(); } [ object, uuid(02e4a2de-da20-4e34-89c8-ac22275a010b), oleautomation, dual, pointer_default(unique) ] interface INetSharingPortMappingCollection : IDispatch { [propget, id(DISPID_NEWENUM), restricted] HRESULT _NewEnum([out, retval] IUnknown **pVal); [propget, id(1)] HRESULT Count([out, retval] long *pVal); } [ object, uuid(c08956b6-1cd3-11d1-b1c5-00805fc1270e), oleautomation, dual, pointer_default(unique) ] interface INetSharingConfiguration : IDispatch { typedef enum tagSHARINGCONNECTIONTYPE { ICSSHARINGTYPE_PUBLIC, ICSSHARINGTYPE_PRIVATE } SHARINGCONNECTIONTYPE, *LPSHARINGCONNECTIONTYPE; typedef enum tagSHARINGCONNECTION_ENUM_FLAGS { ICSSC_DEFAULT, ICSSC_ENABLED } SHARINGCONNECTION_ENUM_FLAGS; typedef enum tagICS_TARGETTYPE { ICSTT_NAME, ICSTT_IPADDRESS }ICS_TARGETTYPE; [propget, id(1)] HRESULT SharingEnabled([out, retval] VARIANT_BOOL *pbEnabled); [propget, id(2)] HRESULT SharingConnectionType([out, retval] SHARINGCONNECTIONTYPE *pType); [id(3)] HRESULT DisableSharing(); [id(4)] HRESULT EnableSharing([in] SHARINGCONNECTIONTYPE Type); [propget, id(5)] HRESULT InternetFirewallEnabled([out, retval] VARIANT_BOOL *pbEnabled); [id(6)] HRESULT DisableInternetFirewall(); [id(7)] HRESULT EnableInternetFirewall(); [propget, id(8)] HRESULT EnumPortMappings( [in] SHARINGCONNECTION_ENUM_FLAGS Flags, [out, retval] INetSharingPortMappingCollection **ppColl); [id(9)] HRESULT AddPortMapping( [in] BSTR bstrName, [in] UCHAR ucIPProtocol, [in] USHORT usExternalPort, [in] USHORT usInternalPort, [in] DWORD dwOptions, [in] BSTR bstrTargetNameOrIPAddress, [in] ICS_TARGETTYPE eTargetType, [out, retval] INetSharingPortMapping **ppMapping ); [id(10)] HRESULT RemovePortMapping([in] INetSharingPortMapping *pMapping); } [ object, uuid(c08956b4-1cd3-11d1-b1c5-00805fc1270e), pointer_default(unique) ] interface IEnumNetSharingPublicConnection : IUnknown { HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] VARIANT *rgVar, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumNetSharingPublicConnection **ppenum); } [ object, uuid(c08956b5-1cd3-11d1-b1c5-00805fc1270e), pointer_default(unique) ] interface IEnumNetSharingPrivateConnection : IUnknown { HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pCeltFetched)] VARIANT *rgVar, [out] ULONG *pCeltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumNetSharingPrivateConnection **ppenum); } [ object, uuid(f4277c95-ce5b-463d-8167-5662d9bcaa72), oleautomation, dual, pointer_default(unique) ] interface INetConnectionProps : IDispatch { [propget, id(1)] HRESULT Guid([out, retval] BSTR *pbstrGuid); [propget, id(2)] HRESULT Name([out, retval] BSTR *pbstrName); [propget, id(3)] HRESULT DeviceName([out, retval] BSTR *pbstrDeviceName); [propget, id(4)] HRESULT Status([out, retval] NETCON_STATUS *pStatus); [propget, id(5)] HRESULT MediaType([out, retval] NETCON_MEDIATYPE *pMediaType); [propget, id(6)] HRESULT Characteristics([out, retval] DWORD *pdwFlags); } [ object, uuid(7d7a6355-f372-4971-a149-bfc927be762a), oleautomation, dual, pointer_default(unique) ] interface INetSharingPublicConnectionCollection : IDispatch { [propget, id(DISPID_NEWENUM), restricted] HRESULT _NewEnum([out, retval] IUnknown **pVal); [propget, id(1)] HRESULT Count([out, retval] long *pVal); } [ object, uuid(33c4643c-7811-46fa-a89a-768597bd7223), oleautomation, dual, pointer_default(unique) ] interface INetSharingEveryConnectionCollection : IDispatch { [propget, id(DISPID_NEWENUM), restricted] HRESULT _NewEnum([out, retval] IUnknown **pVal); [propget, id(1)] HRESULT Count([out, retval] long *pVal); } [ object, uuid(38ae69e0-4409-402a-a2cb-e965c727f840), oleautomation, dual, pointer_default(unique) ] interface INetSharingPrivateConnectionCollection : IDispatch { [propget, id(DISPID_NEWENUM), restricted] HRESULT _NewEnum([out, retval] IUnknown **pVal); [propget, id(1)] HRESULT Count([out, retval] long *pVal); } [ object, uuid(c08956b7-1cd3-11d1-b1c5-00805fc1270e), oleautomation, dual, pointer_default(unique) ] interface INetSharingManager : IDispatch { [propget, id(1)] HRESULT SharingInstalled([out, retval] VARIANT_BOOL *pbInstalled); [propget, id(2)] HRESULT EnumPublicConnections( [in] SHARINGCONNECTION_ENUM_FLAGS Flags, [out, retval] INetSharingPublicConnectionCollection **ppColl); [propget, id(3)] HRESULT EnumPrivateConnections( [in] SHARINGCONNECTION_ENUM_FLAGS Flags, [out, retval] INetSharingPrivateConnectionCollection **ppColl); [propget, id(6)] HRESULT INetSharingConfigurationForINetConnection( [in] INetConnection *pNetConnection, [out, retval] INetSharingConfiguration **ppNetSharingConfiguration); [propget, id(7)] HRESULT EnumEveryConnection([out, retval] INetSharingEveryConnectionCollection **ppColl); [propget, id(8)] HRESULT NetConnectionProps( [in] INetConnection *pNetConnection, [out, retval] INetConnectionProps **ppProps); } ================================================ FILE: wine/windows/netfw.idl ================================================ /* * Copyright 2007 Jeff Latimer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * ***************************************************************************** * * The firewall management interface * */ import "icftypes.idl"; import "oaidl.idl"; [ object, uuid(A6207B2E-7CDD-426A-951E-5E1CBC5AFEAD), dual ] interface INetFwIcmpSettings : IDispatch { [id(1), propget] HRESULT AllowOutboundDestinationUnreachable([out, retval] VARIANT_BOOL* allow); [id(1), propput] HRESULT AllowOutboundDestinationUnreachable( [in] VARIANT_BOOL allow ); [id(2), propget] HRESULT AllowRedirect( [out, retval] VARIANT_BOOL* allow ); [id(2), propput] HRESULT AllowRedirect( [in] VARIANT_BOOL allow ); [id(3), propget] HRESULT AllowInboundEchoRequest( [out, retval] VARIANT_BOOL* allow ); [id(3), propput] HRESULT AllowInboundEchoRequest( [in] VARIANT_BOOL allow ); [id(4), propget] HRESULT AllowOutboundTimeExceeded( [out, retval] VARIANT_BOOL* allow ); [id(4), propput] HRESULT AllowOutboundTimeExceeded( [in] VARIANT_BOOL allow ); [id(5), propget] HRESULT AllowOutboundParameterProblem( [out, retval] VARIANT_BOOL* allow ); [id(5), propput] HRESULT AllowOutboundParameterProblem( [in] VARIANT_BOOL allow ); [id(6), propget] HRESULT AllowOutboundSourceQuench( [out, retval] VARIANT_BOOL* allow ); [id(6), propput] HRESULT AllowOutboundSourceQuench( [in] VARIANT_BOOL allow ); [id(7), propget] HRESULT AllowInboundRouterRequest( [out, retval] VARIANT_BOOL* allow ); [id(7), propput] HRESULT AllowInboundRouterRequest( [in] VARIANT_BOOL allow ); [id(8), propget] HRESULT AllowInboundTimestampRequest( [out, retval] VARIANT_BOOL* allow ); [id(8), propput] HRESULT AllowInboundTimestampRequest( [in] VARIANT_BOOL allow ); [id(9), propget] HRESULT AllowInboundMaskRequest( [out, retval] VARIANT_BOOL* allow ); [id(9), propput] HRESULT AllowInboundMaskRequest( [in] VARIANT_BOOL allow ); [id(10), propget] HRESULT AllowOutboundPacketTooBig( [out, retval] VARIANT_BOOL* allow ); [id(10), propput] HRESULT AllowOutboundPacketTooBig( [in] VARIANT_BOOL allow ); } [ object, uuid(E0483BA0-47FF-4D9C-A6D6-7741D0B195F7), dual ] interface INetFwOpenPort : IDispatch { [id(1), propget] HRESULT Name( [out, retval] BSTR* name ); [id(1), propput] HRESULT Name( [in] BSTR name ); [id(2), propget] HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion ); [id(2), propput] HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion ); [id(3), propget] HRESULT Protocol( [out, retval] NET_FW_IP_PROTOCOL* ipProtocol ); [id(3), propput] HRESULT Protocol( [in] NET_FW_IP_PROTOCOL ipProtocol ); [id(4), propget] HRESULT Port( [out, retval] LONG* portNumber ); [id(4), propput] HRESULT Port( [in] LONG portNumber ); [id(5), propget] HRESULT Scope( [out, retval] NET_FW_SCOPE* scope ); [id(5), propput] HRESULT Scope( [in] NET_FW_SCOPE scope ); [id(6), propget] HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs ); [id(6), propput] HRESULT RemoteAddresses( [in] BSTR remoteAddrs ); [id(7), propget] HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); [id(7), propput] HRESULT Enabled( [in] VARIANT_BOOL enabled ); [id(8), propget] HRESULT BuiltIn( [out, retval] VARIANT_BOOL* builtIn ); } [ object, uuid(C0E9D7FA-E07E-430A-B19A-090CE82D92E2), dual ] interface INetFwOpenPorts : IDispatch { [id(1), propget] HRESULT Count( [out, retval] long* count ); [id(2)] HRESULT Add( [in] INetFwOpenPort* port ); [id(3)] HRESULT Remove( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol ); [id(4)] HRESULT Item( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol, [out, retval] INetFwOpenPort** openPort ); [id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum( [out, retval] IUnknown** newEnum ); } [ object, uuid(79FD57C8-908E-4A36-9888-D5B3F0A444CF), dual ] interface INetFwService : IDispatch { [id(1), propget] HRESULT Name( [out, retval] BSTR* name ); [id(2), propget] HRESULT Type( [out, retval] NET_FW_SERVICE_TYPE* type ); [id(3), propget] HRESULT Customized( [out, retval] VARIANT_BOOL* customized ); [id(4), propget] HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion ); [id(4), propput] HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion ); [id(5), propget] HRESULT Scope( [out, retval] NET_FW_SCOPE* scope ); [id(5), propput] HRESULT Scope( [in] NET_FW_SCOPE scope ); [id(6), propget] HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs ); [id(6), propput] HRESULT RemoteAddresses( [in] BSTR remoteAddrs ); [id(7), propget] HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); [id(7), propput] HRESULT Enabled( [in] VARIANT_BOOL enabled ); [id(8), propget] HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts ); } [ object, uuid(79649BB4-903E-421B-94C9-79848E79F6EE), dual ] interface INetFwServices : IDispatch { [id(1), propget] HRESULT Count( [out, retval] long* count ); [id(2)] HRESULT Item( [in] NET_FW_SERVICE_TYPE svcType, [out, retval] INetFwService** service ); [id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum( [out, retval] IUnknown** newEnum ); } [ object, uuid(B5E64FFA-C2C5-444E-A301-FB5E00018050), dual ] interface INetFwAuthorizedApplication : IDispatch { [id(1), propget] HRESULT Name( [out, retval] BSTR* name ); [id(1), propput] HRESULT Name( [in] BSTR name ); [id(2), propget] HRESULT ProcessImageFileName( [out, retval] BSTR* imageFileName ); [id(2), propput] HRESULT ProcessImageFileName( [in] BSTR imageFileName ); [id(3), propget] HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion ); [id(3), propput] HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion ); [id(4), propget] HRESULT Scope( [out, retval] NET_FW_SCOPE* scope ); [id(4), propput] HRESULT Scope( [in] NET_FW_SCOPE scope ); [id(5), propget] HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs ); [id(5), propput] HRESULT RemoteAddresses( [in] BSTR remoteAddrs ); [id(6), propget] HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); [id(6), propput] HRESULT Enabled( [in] VARIANT_BOOL enabled ); } [ object, uuid(D4BECDDF-6F73-4A83-B832-9C66874CD20E), dual ] interface INetFwRemoteAdminSettings : IDispatch { [id(1), propget] HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion ); [id(1), propput] HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion ); [id(2), propget] HRESULT Scope( [out, retval] NET_FW_SCOPE* scope ); [id(2), propput] HRESULT Scope( [in] NET_FW_SCOPE scope ); [id(3), propget] HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs ); [id(3), propput] HRESULT RemoteAddresses( [in] BSTR remoteAddrs ); [id(4), propget] HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); [id(4), propput] HRESULT Enabled( [in] VARIANT_BOOL enabled ); } [ object, uuid(644EFD52-CCF9-486C-97A2-39F352570B30), dual ] interface INetFwAuthorizedApplications : IDispatch { [id(1), propget] HRESULT Count( [out, retval] long* count ); [id(2)] HRESULT Add( [in] INetFwAuthorizedApplication* app ); [id(3)] HRESULT Remove( [in] BSTR imageFileName ); [id(4)] HRESULT Item( [in] BSTR imageFileName, [out, retval] INetFwAuthorizedApplication** app ); [id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum( [out, retval] IUnknown** newEnum ); } [ local, object, uuid(af230d27-baba-4e42-aced-f524f22cfce2), dual ] interface INetFwRule : IDispatch { [id(1), propget] HRESULT Name( [out, retval] BSTR *name ); [id(1), propput] HRESULT Name( [in] BSTR name ); [id(2), propget] HRESULT Description( [out, retval] BSTR* desc ); [id(2), propput] HRESULT Description( [in] BSTR desc ); [id(3), propget] HRESULT ApplicationName( [out, retval] BSTR *imagename ); [id(3), propput] HRESULT ApplicationName( [in] BSTR imagename ); [id(4), propget] HRESULT ServiceName( [out, retval] BSTR *service ); [id(4), propput] HRESULT ServiceName( [in] BSTR service ); [id(5), propget] HRESULT Protocol( [out, retval] long* protocol ); [id(5), propput] HRESULT Protocol( [in] long protocol ); [id(6), propget] HRESULT LocalPorts( [out, retval] BSTR* ports ); [id(6), propput] HRESULT LocalPorts( [in] BSTR ports ); [id(7), propget] HRESULT RemotePorts( [out, retval] BSTR *ports ); [id(7), propput] HRESULT RemotePorts( [in] BSTR ports ); [id(8), propget] HRESULT LocalAddresses([out, retval] BSTR* address ); [id(8), propput] HRESULT LocalAddresses([in] BSTR address); [id(9), propget] HRESULT RemoteAddresses( [out, retval] BSTR* address ); [id(9), propput] HRESULT RemoteAddresses( [in] BSTR address ); [id(10), propget] HRESULT IcmpTypesAndCodes( [out, retval] BSTR *codes ); [id(10), propput] HRESULT IcmpTypesAndCodes( [in] BSTR codes ); [id(11), propget] HRESULT Direction( [out, retval] NET_FW_RULE_DIRECTION* dir ); [id(11), propput] HRESULT Direction( [in] NET_FW_RULE_DIRECTION dir ); [id(12), propget] HRESULT Interfaces( [out, retval] VARIANT* interfaces ); [id(12), propput] HRESULT Interfaces( [in] VARIANT interfaces ); [id(13), propget] HRESULT InterfaceTypes( [out, retval] BSTR* types ); [id(13), propput] HRESULT InterfaceTypes( [in] BSTR types ); [id(14), propget] HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled ); [id(14), propput] HRESULT Enabled( [in] VARIANT_BOOL enabled ); [id(15), propget] HRESULT Grouping( [out, retval] BSTR* context ); [id(15), propput] HRESULT Grouping( [in] BSTR context ); [id(16), propget] HRESULT Profiles( [out, retval] long* profiles ); [id(16), propput] HRESULT Profiles( [in] long profiles ); [id(17), propget] HRESULT EdgeTraversal( [out, retval] VARIANT_BOOL* enabled ); [id(17), propput] HRESULT EdgeTraversal( [in] VARIANT_BOOL enabled ); [id(18), propget] HRESULT Action( [out, retval] NET_FW_ACTION* action ); [id(18), propput] HRESULT Action( [in] NET_FW_ACTION action ); } [ local, object, uuid(9c4c6277-5027-441e-afae-ca1f542da009), dual ] interface INetFwRules : IDispatch { [id(1), propget] HRESULT Count( [out, retval] long* count ); [id(2)] HRESULT Add( [in] INetFwRule* rule ); [id(3)] HRESULT Remove( [in] BSTR name ); [id(4)] HRESULT Item( [in] BSTR name, [out, retval] INetFwRule** rule ); [id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum( [out, retval] IUnknown** newEnum ); } [ local, object, uuid(8267bbe3-f890-491c-b7b6-2db1ef0e5d2b), dual ] interface INetFwServiceRestriction : IDispatch { [id(1)] HRESULT RestrictService( [in] BSTR serviceName, [in] BSTR appName, [in] VARIANT_BOOL restrictService, [in] VARIANT_BOOL serviceSidRestricted ); [id(2)] HRESULT ServiceRestricted( [in] BSTR serviceName, [in] BSTR appName, [out, retval] VARIANT_BOOL* serviceRestricted ); [id(3), propget] HRESULT Rules( [out, retval] INetFwRules** rules ); } [ object, uuid(174A0DDA-E9F9-449D-993B-21AB667CA456), dual ] interface INetFwProfile : IDispatch { [id(1), propget] HRESULT Type( [out, retval] NET_FW_PROFILE_TYPE* type ); [id(2), propget] HRESULT FirewallEnabled( [out, retval] VARIANT_BOOL* enabled ); [id(2), propput] HRESULT FirewallEnabled( [in] VARIANT_BOOL enabled ); [id(3), propget] HRESULT ExceptionsNotAllowed( [out, retval] VARIANT_BOOL* notAllowed ); [id(3), propput] HRESULT ExceptionsNotAllowed( [in] VARIANT_BOOL notAllowed ); [id(4), propget] HRESULT NotificationsDisabled( [out, retval] VARIANT_BOOL* disabled ); [id(4), propput] HRESULT NotificationsDisabled( [in] VARIANT_BOOL disabled ); [id(5), propget] HRESULT UnicastResponsesToMulticastBroadcastDisabled( [out, retval] VARIANT_BOOL* disabled ); [id(5), propput] HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] VARIANT_BOOL disabled ); [id(6), propget] HRESULT RemoteAdminSettings( [out, retval] INetFwRemoteAdminSettings** remoteAdminSettings ); [id(7), propget] HRESULT IcmpSettings( [out, retval] INetFwIcmpSettings** icmpSettings ); [id(8), propget] HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts ); [id(9), propget] HRESULT Services( [out, retval] INetFwServices** services ); [id(10), propget] HRESULT AuthorizedApplications( [out, retval] INetFwAuthorizedApplications** apps ); } [ object, uuid(D46D2478-9AC9-4008-9DC7-5563CE5536CC), dual ] interface INetFwPolicy : IDispatch { [id(1), propget] HRESULT CurrentProfile( [out, retval] INetFwProfile** profile ); [id(2)] HRESULT GetProfileByType( [in] NET_FW_PROFILE_TYPE profileType, [out, retval] INetFwProfile** profile ); } [ local, object, uuid(98325047-c671-4174-8d81-defcd3f03186), dual ] interface INetFwPolicy2 : IDispatch { [id(1), propget] HRESULT CurrentProfileTypes( [out, retval] long *profile ); [id(2), propget] HRESULT FirewallEnabled( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT_BOOL* enabled ); [id(2), propput] HRESULT FirewallEnabled( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT_BOOL enabled ); [id(3), propget] HRESULT ExcludedInterfaces( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT *interfaces ); [id(3), propput] HRESULT ExcludedInterfaces( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT interfaces ); [id(4), propget] HRESULT BlockAllInboundTraffic( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT_BOOL* block ); [id(4), propput] HRESULT BlockAllInboundTraffic( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT_BOOL block ); [id(5), propget] HRESULT NotificationsDisabled( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT_BOOL* disabled ); [id(5), propput] HRESULT NotificationsDisabled( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT_BOOL disabled ); [id(6), propget] HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT_BOOL* disabled ); [id(6), propput] HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT_BOOL disabled ); [id(7), propget] HRESULT Rules( [out, retval] INetFwRules** rules ); [id(8), propget] HRESULT ServiceRestriction( [out, retval] INetFwServiceRestriction **ServiceRestriction ); [id(9)] HRESULT EnableRuleGroup( [in] long profileTypesBitmask, [in] BSTR group, [in] VARIANT_BOOL enable ); [id(10)] HRESULT IsRuleGroupEnabled( [in] long profileTypesBitmask, [in] BSTR group, [out, retval] VARIANT_BOOL *enabled ); [id(11)] HRESULT RestoreLocalFirewallDefaults(); [id(12), propget] HRESULT DefaultInboundAction( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] NET_FW_ACTION* action ); [id(12), propput] HRESULT DefaultInboundAction( [in] NET_FW_PROFILE_TYPE2 profileType, [in] NET_FW_ACTION action ); [id(13), propget] HRESULT DefaultOutboundAction( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] NET_FW_ACTION* action ); [id(13), propput] HRESULT DefaultOutboundAction( [in] NET_FW_PROFILE_TYPE2 profileType, [in] NET_FW_ACTION action ); [id(14), propget] HRESULT IsRuleGroupCurrentlyEnabled( [in] BSTR group, [out, retval] VARIANT_BOOL* enabled ); [id(15), propget] HRESULT LocalPolicyModifyState( [out, retval] NET_FW_MODIFY_STATE* modifyState ); } [ object, uuid(F7898AF5-CAC4-4632-A2EC-DA06E5111AF2), dual ] interface INetFwMgr : IDispatch { [id(1), propget] HRESULT LocalPolicy( [out, retval] INetFwPolicy** localPolicy ); [id(2), propget] HRESULT CurrentProfileType( [out, retval] NET_FW_PROFILE_TYPE* profileType ); [id(3)] HRESULT RestoreDefaults(); [id(4)] HRESULT IsPortAllowed( [in] BSTR imageFileName, [in] NET_FW_IP_VERSION ipVersion, [in] LONG portNumber, [in] BSTR localAddress, [in] NET_FW_IP_PROTOCOL ipProtocol, [out] VARIANT* allowed, [out] VARIANT* restricted ); [id(5)] HRESULT IsIcmpTypeAllowed( [in] NET_FW_IP_VERSION ipVersion, [in] BSTR localAddress, [in] BYTE type, [out] VARIANT* allowed, [out] VARIANT* restricted ); } [ local, object, uuid(71881699-18f4-458b-b892-3ffce5e07f75), dual ] interface INetFwProduct : IDispatch { [id(1), propget] HRESULT RuleCategories([out, retval] VARIANT *ruleCategories); [id(1), propput] HRESULT RuleCategories([in] VARIANT ruleCategories); [id(2), propget] HRESULT DisplayName([out, retval] BSTR *displayName); [id(2), propput] HRESULT DisplayName([in] BSTR displayName); [id(3), propget] HRESULT PathToSignedProductExe([out, retval] BSTR *path); } [ local, object, uuid(39eb36e0-2097-40bd-8af2-63a13b525362), dual ] interface INetFwProducts : IDispatch { [id(1), propget] HRESULT Count([out, retval] LONG *count); [id(2)] HRESULT Register([in] INetFwProduct *product, [out, retval] IUnknown **registration); [id(3)] HRESULT Item([in] LONG index, [out, retval] INetFwProduct **product); [id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum([out, retval] IUnknown **newEnum); } [ uuid(DB4F3345-3EF8-45ED-B976-25A6D3B81B71), version(1.0) ] library NetFwPublicTypeLib { importlib("stdole2.tlb"); interface INetFwRemoteAdminSettings; interface INetFwIcmpSettings; interface INetFwOpenPort; interface INetFwOpenPorts; interface INetFwService; interface INetFwServices; interface INetFwAuthorizedApplication; interface INetFwAuthorizedApplications; interface INetFwProfile; interface INetFwPolicy; interface INetFwPolicy2; interface INetFwMgr; [ uuid(0CA545C6-37AD-4A6C-BF92-9F7610067EF5) ] coclass NetFwOpenPort { [default] interface INetFwOpenPort; } [ uuid(EC9846B3-2762-4A6B-A214-6ACB603462D2) ] coclass NetFwAuthorizedApplication { [default] interface INetFwAuthorizedApplication; } [ uuid(304CE942-6E39-40D8-943A-B913C40C9CD4) ] coclass NetFwMgr { [default] interface INetFwMgr; } [ uuid(e2b3c97f-6ae1-41ac-817a-f6f92166d7dd) ] coclass NetFwPolicy2 { [default] interface INetFwPolicy2; } [ uuid(2c5bc43e-3369-4c33-ab0c-be9469677af4) ] coclass NetFwRule { [default] interface INetFwRule; } [ uuid(9d745ed8-c514-4d1d-bf42-751fed2d5ac7) ] coclass NetFwProduct { [default] interface INetFwProduct; } [ uuid(cc19079b-8272-4d73-bb70-cdb533527b61) ] coclass NetFwProducts { [default] interface INetFwProducts; } } ================================================ FILE: wine/windows/netioapi.h ================================================ /* * Copyright 2015 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_NETIOAPI_H #define __WINE_NETIOAPI_H #include #ifndef ANY_SIZE #define ANY_SIZE 1 #endif typedef enum _MIB_IF_TABLE_LEVEL { MibIfTableNormal, MibIfTableRaw, MibIfTableNormalWithoutStatistics, } MIB_IF_TABLE_LEVEL, *PMIB_IF_TABLE_LEVEL; typedef enum _MIB_NOTIFICATION_TYPE { MibParameterNotification, MibAddInstance, MibDeleteInstance, MibInitialNotification, } MIB_NOTIFICATION_TYPE, *PMIB_NOTIFICATION_TYPE; typedef struct _MIB_IF_ROW2 { NET_LUID InterfaceLuid; NET_IFINDEX InterfaceIndex; GUID InterfaceGuid; WCHAR Alias[IF_MAX_STRING_SIZE + 1]; WCHAR Description[IF_MAX_STRING_SIZE + 1]; ULONG PhysicalAddressLength; UCHAR PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH]; UCHAR PermanentPhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH]; ULONG Mtu; IFTYPE Type; TUNNEL_TYPE TunnelType; NDIS_MEDIUM MediaType; NDIS_PHYSICAL_MEDIUM PhysicalMediumType; NET_IF_ACCESS_TYPE AccessType; NET_IF_DIRECTION_TYPE DirectionType; struct { BOOLEAN HardwareInterface : 1; BOOLEAN FilterInterface : 1; BOOLEAN ConnectorPresent : 1; BOOLEAN NotAuthenticated : 1; BOOLEAN NotMediaConnected : 1; BOOLEAN Paused : 1; BOOLEAN LowPower : 1; BOOLEAN EndPointInterface : 1; } InterfaceAndOperStatusFlags; IF_OPER_STATUS OperStatus; NET_IF_ADMIN_STATUS AdminStatus; NET_IF_MEDIA_CONNECT_STATE MediaConnectState; NET_IF_NETWORK_GUID NetworkGuid; NET_IF_CONNECTION_TYPE ConnectionType; ULONG64 TransmitLinkSpeed; ULONG64 ReceiveLinkSpeed; ULONG64 InOctets; ULONG64 InUcastPkts; ULONG64 InNUcastPkts; ULONG64 InDiscards; ULONG64 InErrors; ULONG64 InUnknownProtos; ULONG64 InUcastOctets; ULONG64 InMulticastOctets; ULONG64 InBroadcastOctets; ULONG64 OutOctets; ULONG64 OutUcastPkts; ULONG64 OutNUcastPkts; ULONG64 OutDiscards; ULONG64 OutErrors; ULONG64 OutUcastOctets; ULONG64 OutMulticastOctets; ULONG64 OutBroadcastOctets; ULONG64 OutQLen; } MIB_IF_ROW2, *PMIB_IF_ROW2; typedef struct _MIB_IF_TABLE2 { ULONG NumEntries; MIB_IF_ROW2 Table[1]; } MIB_IF_TABLE2, *PMIB_IF_TABLE2; typedef struct _MIB_IPINTERFACE_ROW { ADDRESS_FAMILY Family; NET_LUID InterfaceLuid; NET_IFINDEX InterfaceIndex; ULONG MaxReassemblySize; ULONG64 InterfaceIdentifier; ULONG MinRouterAdvertisementInterval; ULONG MaxRouterAdvertisementInterval; BOOLEAN AdvertisingEnabled; BOOLEAN ForwardingEnabled; BOOLEAN WeakHostSend; BOOLEAN WeakHostReceive; BOOLEAN UseAutomaticMetric; BOOLEAN UseNeighborUnreachabilityDetection; BOOLEAN ManagedAddressConfigurationSupported; BOOLEAN OtherStatefulConfigurationSupported; BOOLEAN AdvertiseDefaultRoute; NL_ROUTER_DISCOVERY_BEHAVIOR RouterDiscoveryBehavior; ULONG DadTransmits; ULONG BaseReachableTime; ULONG RetransmitTime; ULONG PathMtuDiscoveryTimeout; NL_LINK_LOCAL_ADDRESS_BEHAVIOR LinkLocalAddressBehavior; ULONG LinkLocalAddressTimeout; ULONG ZoneIndices[ScopeLevelCount]; ULONG SitePrefixLength; ULONG Metric; ULONG NlMtu; BOOLEAN Connected; BOOLEAN SupportsWakeUpPatterns; BOOLEAN SupportsNeighborDiscovery; BOOLEAN SupportsRouterDiscovery; ULONG ReachableTime; NL_INTERFACE_OFFLOAD_ROD TransmitOffload; NL_INTERFACE_OFFLOAD_ROD ReceiveOffload; BOOLEAN DisableDefaultRoutes; } MIB_IPINTERFACE_ROW, *PMIB_IPINTERFACE_ROW; typedef struct _MIB_UNICASTIPADDRESS_ROW { SOCKADDR_INET Address; NET_LUID InterfaceLuid; NET_IFINDEX InterfaceIndex; NL_PREFIX_ORIGIN PrefixOrigin; NL_SUFFIX_ORIGIN SuffixOrigin; ULONG ValidLifetime; ULONG PreferredLifetime; UINT8 OnLinkPrefixLength; BOOLEAN SkipAsSource; NL_DAD_STATE DadState; SCOPE_ID ScopeId; LARGE_INTEGER CreationTimeStamp; } MIB_UNICASTIPADDRESS_ROW, *PMIB_UNICASTIPADDRESS_ROW; typedef struct _MIB_UNICASTIPADDRESS_TABLE { ULONG NumEntries; MIB_UNICASTIPADDRESS_ROW Table[1]; } MIB_UNICASTIPADDRESS_TABLE, *PMIB_UNICASTIPADDRESS_TABLE; typedef struct _IP_ADDRESS_PREFIX { SOCKADDR_INET Prefix; UINT8 PrefixLength; } IP_ADDRESS_PREFIX, *PIP_ADDRESS_PREFIX; typedef struct _MIB_IPFORWARD_ROW2 { NET_LUID InterfaceLuid; NET_IFINDEX InterfaceIndex; IP_ADDRESS_PREFIX DestinationPrefix; SOCKADDR_INET NextHop; UCHAR SitePrefixLength; ULONG ValidLifetime; ULONG PreferredLifetime; ULONG Metric; NL_ROUTE_PROTOCOL Protocol; BOOLEAN Loopback; BOOLEAN AutoconfigureAddress; BOOLEAN Publish; BOOLEAN Immortal; ULONG Age; NL_ROUTE_ORIGIN Origin; } MIB_IPFORWARD_ROW2, *PMIB_IPFORWARD_ROW2; typedef struct _MIB_IPFORWARD_TABLE2 { ULONG NumEntries; MIB_IPFORWARD_ROW2 Table[ANY_SIZE]; } MIB_IPFORWARD_TABLE2, *PMIB_IPFORWARD_TABLE2; typedef VOID (WINAPI *PIPINTERFACE_CHANGE_CALLBACK)(PVOID, PMIB_IPINTERFACE_ROW, MIB_NOTIFICATION_TYPE); typedef VOID (WINAPI *PUNICAST_IPADDRESS_CHANGE_CALLBACK)(PVOID, PMIB_UNICASTIPADDRESS_ROW, MIB_NOTIFICATION_TYPE); DWORD WINAPI ConvertInterfaceGuidToLuid(const GUID*,NET_LUID*); DWORD WINAPI ConvertInterfaceIndexToLuid(NET_IFINDEX,NET_LUID*); DWORD WINAPI ConvertInterfaceLuidToGuid(const NET_LUID*,GUID*); DWORD WINAPI ConvertInterfaceLuidToIndex(const NET_LUID*,NET_IFINDEX*); DWORD WINAPI ConvertInterfaceLuidToNameA(const NET_LUID*,char*,SIZE_T); DWORD WINAPI ConvertInterfaceLuidToNameW(const NET_LUID*,WCHAR*,SIZE_T); DWORD WINAPI ConvertInterfaceNameToLuidA(const char*,NET_LUID*); DWORD WINAPI ConvertInterfaceNameToLuidW(const WCHAR*,NET_LUID*); DWORD WINAPI ConvertLengthToIpv4Mask(ULONG,ULONG*); void WINAPI FreeMibTable(void*); DWORD WINAPI GetIfEntry2(MIB_IF_ROW2*); DWORD WINAPI GetIfTable2(MIB_IF_TABLE2**); DWORD WINAPI GetUnicastIpAddressEntry(MIB_UNICASTIPADDRESS_ROW*); PCHAR WINAPI if_indextoname(NET_IFINDEX,PCHAR); NET_IFINDEX WINAPI if_nametoindex(PCSTR); #endif /* __WINE_NETIOAPI_H */ ================================================ FILE: wine/windows/netlistmgr.idl ================================================ /* * Copyright 2014 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "objidl.idl"; #ifndef __WIDL__ #define threading(model) #endif interface IEnumNetworks; interface IEnumNetworkConnections; interface INetwork; interface INetworkConnection; interface INetworkCostManager; interface INetworkListManager; interface INetworkListManagerEvents; typedef [v1_enum] enum NLM_CONNECTIVITY { NLM_CONNECTIVITY_DISCONNECTED = 0x0000, NLM_CONNECTIVITY_IPV4_NOTRAFFIC = 0x0001, NLM_CONNECTIVITY_IPV6_NOTRAFFIC = 0x0002, NLM_CONNECTIVITY_IPV4_SUBNET = 0x0010, NLM_CONNECTIVITY_IPV4_LOCALNETWORK = 0x0020, NLM_CONNECTIVITY_IPV4_INTERNET = 0x0040, NLM_CONNECTIVITY_IPV6_SUBNET = 0x0100, NLM_CONNECTIVITY_IPV6_LOCALNETWORK = 0x0200, NLM_CONNECTIVITY_IPV6_INTERNET = 0x0400 } NLM_CONNECTIVITY; typedef [v1_enum] enum NLM_DOMAIN_TYPE { NLM_DOMAIN_TYPE_NON_DOMAIN_NETWORK = 0x00, NLM_DOMAIN_TYPE_DOMAIN_NETWORK = 0x01, NLM_DOMAIN_TYPE_DOMAIN_AUTHENTICATED = 0x02 } NLM_DOMAIN_TYPE; typedef [v1_enum] enum NLM_ENUM_NETWORK { NLM_ENUM_NETWORK_CONNECTED = 0x01, NLM_ENUM_NETWORK_DISCONNECTED = 0x02, NLM_ENUM_NETWORK_ALL = 0x03 } NLM_ENUM_NETWORK; typedef [v1_enum] enum NLM_CONNECTION_COST { NLM_CONNECTION_COST_UNKNOWN = 0x0, NLM_CONNECTION_COST_UNRESTRICTED = 0x1, NLM_CONNECTION_COST_FIXED = 0x2, NLM_CONNECTION_COST_VARIABLE = 0x4, NLM_CONNECTION_COST_OVERDATALIMIT = 0x10000, NLM_CONNECTION_COST_CONGESTED = 0x20000, NLM_CONNECTION_COST_ROAMING = 0x40000, NLM_CONNECTION_COST_APPROACHINGDATALIMIT = 0x80000 } NLM_CONNECTION_COST; typedef struct NLM_SOCKADDR { BYTE data[128]; } NLM_SOCKADDR; const UINT32 NLM_UNKNOWN_DATAPLAN_STATUS = 0xffffffff; typedef struct NLM_USAGE_DATA { DWORD UsageInMegabytes; FILETIME LastSyncTime; } NLM_USAGE_DATA; typedef struct NLM_DATAPLAN_STATUS { GUID InterfaceGuid; NLM_USAGE_DATA UsageData; DWORD DataLimitInMegabytes; DWORD InboundBandwidthInKbps; DWORD OutboundBandwidthInKbps; FILETIME NextBillingCycle; DWORD MaxTransferSizeInMegabytes; DWORD Reserved; } NLM_DATAPLAN_STATUS; [ object, pointer_default(unique), uuid(dcb00008-570f-4a9b-8d69-199fdba5723b) ] interface INetworkCostManager : IUnknown { HRESULT GetCost( [out] DWORD *pCost, [in, unique] NLM_SOCKADDR *pDestIPAddr); HRESULT GetDataPlanStatus( [out] NLM_DATAPLAN_STATUS *pDataPlanStatus, [in, unique] NLM_SOCKADDR *pDestIPAddr); HRESULT SetDestinationAddresses( [in] UINT32 length, [in, unique, size_is(length)] NLM_SOCKADDR *pDestIPAddrList, [in] VARIANT_BOOL bAppend); } [ object, pointer_default(unique), uuid(dcb0000a-570f-4a9b-8d69-199fdba5723b) ] interface INetworkConnectionCost : IUnknown { HRESULT GetCost( [out] DWORD *pCost); HRESULT GetDataPlanStatus( [out] NLM_DATAPLAN_STATUS *pDataPlanStatus); } [ object, pointer_default(unique), uuid(dcb00009-570f-4a9b-8d69-199fdba5723b) ] interface INetworkCostManagerEvents : IUnknown { HRESULT CostChanged( [in] DWORD newCost, [in, unique] NLM_SOCKADDR *pDestAddr); HRESULT DataPlanStatusChanged( [in, unique] NLM_SOCKADDR *pDestAddr); } [ object, oleautomation, pointer_default(unique), dual, uuid(dcb00003-570f-4a9b-8d69-199fdba5723b) ] interface IEnumNetworks : IDispatch { [id(DISPID_NEWENUM), propget, hidden, restricted] HRESULT _NewEnum( [out, retval] IEnumVARIANT **ppEnumVar); [id(1)] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] INetwork **rgelt, [in, out] ULONG *pceltFetched); [id(2)] HRESULT Skip( [in] ULONG celt); [id(3)] HRESULT Reset(); [id(4)] HRESULT Clone( [out, retval] IEnumNetworks **ppEnumNetwork); } [ object, oleautomation, pointer_default(unique), dual, uuid(dcb00006-570f-4a9b-8d69-199fdba5723b) ] interface IEnumNetworkConnections : IDispatch { [id(DISPID_NEWENUM), propget, hidden, restricted] HRESULT _NewEnum( [out, retval] IEnumVARIANT **ppEnumVar); [id(1)] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] INetworkConnection **rgelt, [in, out] ULONG *pceltFetched); [id(2)] HRESULT Skip( [in] ULONG celt); [id(3)] HRESULT Reset(); [id(4)] HRESULT Clone( [out, retval] IEnumNetworkConnections **ppEnumNetwork); } [ dual, object, oleautomation, pointer_default(unique), uuid(dcb00000-570f-4a9b-8d69-199fdba5723b) ] interface INetworkListManager : IDispatch { HRESULT GetNetworks( [in] NLM_ENUM_NETWORK Flags, [out, retval] IEnumNetworks **ppEnumNetwork); HRESULT GetNetwork( [in] GUID gdNetworkId, [out, retval] INetwork **ppNetwork); HRESULT GetNetworkConnections( [out, retval] IEnumNetworkConnections **ppEnum); HRESULT GetNetworkConnection( [in] GUID gdNetworkConnectionId, [out, retval] INetworkConnection **ppNetworkConnection); HRESULT IsConnectedToInternet( [out, retval] VARIANT_BOOL *pbIsConnected); HRESULT IsConnected( [out, retval] VARIANT_BOOL *pbIsConnected); HRESULT GetConnectivity( [out, retval] NLM_CONNECTIVITY *pConnectivity); } [ threading(both), uuid(dcb00c01-570f-4a9b-8d69-199fdba5723b) ] coclass NetworkListManager { interface INetworkListManager; } [ object, oleautomation, pointer_default(unique), uuid(DCB00001-570F-4A9B-8D69-199FDBA5723B) ] interface INetworkListManagerEvents : IUnknown { HRESULT ConnectivityChanged( [in] NLM_CONNECTIVITY newConnectivity); } [ object, oleautomation, pointer_default(unique), uuid(dcb00007-570f-4a9b-8d69-199fdba5723b) ] interface INetworkConnectionEvents : IUnknown { typedef enum NLM_CONNECTION_PROPERTY_CHANGE { NLM_CONNECTION_PROPERTY_CHANGE_AUTHENTICATION = 1 } NLM_CONNECTION_PROPERTY_CHANGE; HRESULT NetworkConnectionConnectivityChanged( [in] GUID connectionId, [in] NLM_CONNECTIVITY newConnectivity); HRESULT NetworkConnectionPropertyChanged( [in] GUID connectionId, [in] NLM_CONNECTION_PROPERTY_CHANGE flags); } [ object, oleautomation, pointer_default(unique), dual, uuid(dcb00005-570f-4a9b-8d69-199fdba5723b) ] interface INetworkConnection : IDispatch { [id(1)] HRESULT GetNetwork( [out, retval] INetwork **ppNetwork); [propget, id(2)] HRESULT IsConnectedToInternet( [out, retval] VARIANT_BOOL *pbIsConnected); [propget, id(3)] HRESULT IsConnected( [out, retval] VARIANT_BOOL *pbIsConnected); [id(4)] HRESULT GetConnectivity( [out, retval] NLM_CONNECTIVITY *pConnectivity); [id(5)] HRESULT GetConnectionId( [out, retval] GUID *pgdConnectionId); [id(6)] HRESULT GetAdapterId( [out, retval] GUID *pgdAdapterId); [id(7)] HRESULT GetDomainType( [out, retval] NLM_DOMAIN_TYPE *pDomainType); } [ object, oleautomation, pointer_default(unique), dual, uuid(dcb00002-570f-4a9b-8d69-199fdba5723b) ] interface INetwork : IDispatch { typedef enum NLM_NETWORK_CATEGORY { NLM_NETWORK_CATEGORY_PUBLIC = 0x00, NLM_NETWORK_CATEGORY_PRIVATE = 0x01, NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED = 0x02 } NLM_NETWORK_CATEGORY; [id(1)] HRESULT GetName( [out, string, retval] BSTR *pszNetworkName); [id(2)] HRESULT SetName( [in, string] BSTR szNetworkNewName); [id(3)] HRESULT GetDescription( [out, string, retval] BSTR *pszDescription); [id(4)] HRESULT SetDescription( [in, string] BSTR szDescription); [id(5)] HRESULT GetNetworkId( [out, retval] GUID *pgdGuidNetworkId); [id(6)] HRESULT GetDomainType( [out, retval] NLM_DOMAIN_TYPE *pNetworkType); [id(7)] HRESULT GetNetworkConnections( [out, retval] IEnumNetworkConnections **ppEnumNetworkConnection); [id(8)] HRESULT GetTimeCreatedAndConnected( [out] DWORD *pdwLowDateTimeCreated, [out] DWORD *pdwHighDateTimeCreated, [out] DWORD *pdwLowDateTimeConnected, [out] DWORD *pdwHighDateTimeConnected); [propget, id(9)] HRESULT IsConnectedToInternet( [out, retval] VARIANT_BOOL *pbIsConnected); [propget, id(10)] HRESULT IsConnected( [out, retval] VARIANT_BOOL *pbIsConnected); [id(11)] HRESULT GetConnectivity( [out, retval] NLM_CONNECTIVITY *pConnectivity); [id(12)] HRESULT GetCategory( [out, retval] NLM_NETWORK_CATEGORY *pCategory); [id(13)] HRESULT SetCategory( [in] NLM_NETWORK_CATEGORY NewCategory); } ================================================ FILE: wine/windows/nldef.h ================================================ /* * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_NLDEF_H #define __WINE_NLDEF_H typedef enum { IpPrefixOriginOther = 0, IpPrefixOriginManual, IpPrefixOriginWellKnown, IpPrefixOriginDhcp, IpPrefixOriginRouterAdvertisement, IpPrefixOriginUnchanged = 16, } NL_PREFIX_ORIGIN; typedef enum _NL_ROUTE_ORIGIN { NlroManual, NlroWellKnown, NlroDHCP, NlroRouterAdvertisement, Nlro6to4, } NL_ROUTE_ORIGIN, *PNL_ROUTE_ORIGIN; typedef enum { IpSuffixOriginOther = 0, IpSuffixOriginManual, IpSuffixOriginWellKnown, IpSuffixOriginDhcp, IpSuffixOriginLinkLayerAddress, IpSuffixOriginRandom, IpSuffixOriginUnchanged = 16, } NL_SUFFIX_ORIGIN; typedef enum { IpDadStateInvalid = 0, IpDadStateTentative, IpDadStateDuplicate, IpDadStateDeprecated, IpDadStatePreferred, } NL_DAD_STATE; typedef enum _NL_LINK_LOCAL_ADDRESS_BEHAVIOR { LinkLocalAlwaysOff = 0, LinkLocalDelayed, LinkLocalAlwaysOn, LinkLocalUnchanged = -1, } NL_LINK_LOCAL_ADDRESS_BEHAVIOR; typedef enum _NL_ROUTER_DISCOVERY_BEHAVIOR { RouterDiscoveryDisabled = 0, RouterDiscoveryEnabled, RouterDiscoveryDhcp, RouterDiscoveryUnchanged = -1, } NL_ROUTER_DISCOVERY_BEHAVIOR; typedef enum { #define MAKE_ROUTE_PROTOCOL(name, value) \ MIB_IPPROTO_ ## name = value, \ PROTO_IP_ ## name = value MAKE_ROUTE_PROTOCOL(OTHER, 1), MAKE_ROUTE_PROTOCOL(LOCAL, 2), MAKE_ROUTE_PROTOCOL(NETMGMT, 3), MAKE_ROUTE_PROTOCOL(ICMP, 4), MAKE_ROUTE_PROTOCOL(EGP, 5), MAKE_ROUTE_PROTOCOL(GGP, 6), MAKE_ROUTE_PROTOCOL(HELLO, 7), MAKE_ROUTE_PROTOCOL(RIP, 8), MAKE_ROUTE_PROTOCOL(IS_IS, 9), MAKE_ROUTE_PROTOCOL(ES_IS, 10), MAKE_ROUTE_PROTOCOL(CISCO, 11), MAKE_ROUTE_PROTOCOL(BBN, 12), MAKE_ROUTE_PROTOCOL(OSPF, 13), MAKE_ROUTE_PROTOCOL(BGP, 14), MAKE_ROUTE_PROTOCOL(NT_AUTOSTATIC, 10002), MAKE_ROUTE_PROTOCOL(NT_STATIC, 10006), MAKE_ROUTE_PROTOCOL(NT_STATIC_NON_DOD, 10007), } NL_ROUTE_PROTOCOL, *PNL_ROUTE_PROTOCOL; typedef struct _NL_INTERFACE_OFFLOAD_ROD { BOOLEAN NlChecksumSupported : 1; BOOLEAN NlOptionsSupported : 1; BOOLEAN TlDatagramChecksumSupported : 1; BOOLEAN TlStreamChecksumSupported : 1; BOOLEAN TlStreamOptionsSupported : 1; BOOLEAN FastPathCompatible : 1; BOOLEAN TlLargeSendOffloadSupported : 1; BOOLEAN TlGiantSendOffloadSupported : 1; } NL_INTERFACE_OFFLOAD_ROD, *PNL_INTERFACE_OFFLOAD_ROD; #endif /* __WINE_NLDEF_H */ ================================================ FILE: wine/windows/npapi.h ================================================ /* * Copyright (C) 2004 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_NPAPI_H__ #define __WINE_NPAPI_H__ #ifdef __cplusplus extern "C" { #endif /* capabilities */ #define WNNC_SPEC_VERSION 0x00000001 #define WNNC_SPEC_VERSION51 0x00050001 #define WNNC_NET_TYPE 0x00000002 #define WNNC_NET_NONE 0x00000000 #define WNNC_DRIVER_VERSION 0x00000003 #define WNNC_USER 0x00000004 #define WNNC_USR_GETUSER 0x00000001 #define WNNC_CONNECTION 0x00000006 #define WNNC_CON_ADDCONNECTION 0x00000001 #define WNNC_CON_CANCELCONNECTION 0x00000002 #define WNNC_CON_GETCONNECTIONS 0x00000004 #define WNNC_CON_ADDCONNECTION3 0x00000008 #define WNNC_CON_GETPERFORMANCE 0x00000040 #define WNNC_CON_DEFER 0x00000080 #define WNNC_DIALOG 0x00000008 #define WNNC_DLG_DEVICEMODE 0x00000001 #define WNNC_DLG_PROPERTYDIALOG 0x00000020 #define WNNC_DLG_SEARCHDIALOG 0x00000040 #define WNNC_DLG_FORMATNETWORKNAME 0x00000080 #define WNNC_DLG_PERMISSIONEDITOR 0x00000100 #define WNNC_DLG_GETRESOURCEPARENT 0x00000200 #define WNNC_DLG_GETRESOURCEINFORMATION 0x00000800 #define WNNC_ADMIN 0x00000009 #define WNNC_ADM_GETDIRECTORYTYPE 0x00000001 #define WNNC_ADM_DIRECTORYNOTIFY 0x00000002 #define WNNC_ENUMERATION 0x0000000b #define WNNC_ENUM_GLOBAL 0x00000001 #define WNNC_ENUM_LOCAL 0x00000002 #define WNNC_ENUM_CONTEXT 0x00000004 #define WNNC_START 0x0000000c #define WNNC_WAIT_FOR_START 0x00000001 typedef DWORD (APIENTRY *PF_NPGetCaps)(DWORD ndex); /* get user */ typedef DWORD (APIENTRY *PF_NPGetUser)(LPWSTR lpName, LPWSTR lpUserName, LPDWORD lpnBufferLen); /* enumeration-related */ typedef DWORD (APIENTRY *PF_NPOpenEnum)(DWORD dwScope, DWORD dwType, DWORD dwUsage, LPNETRESOURCEW lpNetResource, LPHANDLE lphEnum); typedef DWORD (APIENTRY *PF_NPEnumResource)(HANDLE hEnum, LPDWORD lpcCount, LPVOID lpBuffer, LPDWORD lpBufferSize); typedef DWORD (APIENTRY *PF_NPCloseEnum)(HANDLE hEnum); typedef DWORD (APIENTRY *PF_NPGetResourceInformation)(LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, LPDWORD lpcbBuffer, LPWSTR* lplpSystem); /* connection-related */ typedef DWORD (APIENTRY *PF_NPAddConnection)(LPNETRESOURCEW lpNetResource, LPWSTR lpPassword, LPWSTR lpUserName); typedef DWORD (APIENTRY *PF_NPAddConnection3)(HWND hwndOwner, LPNETRESOURCEW lpNetResource, LPWSTR lpPassword, LPWSTR lpUserName, DWORD dwFlags); typedef DWORD (APIENTRY *PF_NPCancelConnection)(LPWSTR lpName, BOOL fForce); typedef DWORD (APIENTRY *PF_NPGetConnection)(LPWSTR lpLocalName, LPWSTR lpRemoteName, LPDWORD lpnBufferLen); /* network name manipulation */ typedef DWORD (APIENTRY *PF_NPGetUniversalName)(LPWSTR lpLocalPath, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpnBufferSize); typedef DWORD (APIENTRY *PF_NPFormatNetworkName)(LPWSTR lpRemoteName, LPWSTR lpFormattedName, LPDWORD lpnLength, DWORD dwFlags, DWORD dwAveCharPerLine); /* dialogs */ typedef DWORD (APIENTRY *PF_NPDeviceMode)(HWND hParent); /* search dialog */ #define WNSRCH_REFRESH_FIRST_LEVEL 0x00000001 typedef DWORD (APIENTRY *PF_NPSearchDialog)(HWND hwndParent, LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, DWORD cbBuffer, LPDWORD lpnFlags); /* property dialog */ #define WNTYPE_DRIVE 1 #define WNTYPE_FILE 2 #define WNTYPE_PRINTER 3 #define WNTYPE_COMM 4 #define WNPS_FILE 0 #define WNPS_DIR 1 #define WNPS_MULT 2 typedef DWORD (APIENTRY *PF_NPGetPropertyText)(DWORD iButton, DWORD nPropSel, LPWSTR lpName, LPWSTR lpButtonName, DWORD nButtonNameLen, DWORD nType); typedef DWORD (APIENTRY *PF_NPPropertyDialog)(HWND hwndParent, DWORD iButtonDlg, DWORD nPropSel, LPWSTR lpFileName, DWORD nType); /* admin */ #define WNDT_NORMAL 0 #define WNDT_NETWORK 1 #define WNDN_MKDIR 1 #define WNDN_RMDIR 2 #define WNDN_MVDIR 3 typedef DWORD (APIENTRY *PF_NPGetDirectoryType)(LPWSTR lpName, LPINT lpType, BOOL bFlushCache); typedef DWORD (APIENTRY *PF_NPDirectoryNotify)(HWND hwnd, LPWSTR lpDir, DWORD dwOper); /* permission editor dialogs */ #define WNPERMC_PERM 0x00000001 #define WNPERMC_AUDIT 0x00000002 #define WNPERMC_OWNER 0x00000004 typedef DWORD (APIENTRY *PF_NPFMXGetPermCaps)(LPWSTR lpDriveName); #define WNPERM_DLG_PERM 0 #define WNPERM_DLG_AUDIT 1 #define WNPERM_DLG_OWNER 2 typedef DWORD (APIENTRY *PF_NPFMXEditPerm)(LPWSTR lpDriveName, HWND hwndFMX, DWORD nDialogType); typedef DWORD (APIENTRY *PF_NPFMXGetPermHelp)(LPWSTR lpDriveName, DWORD nDialogType, BOOL fDirectory, LPVOID lpFileNameBuffer, LPDWORD lpBufferSize, LPDWORD lpnHelpContext); VOID WINAPI WNetSetLastErrorA(DWORD err, LPSTR lpError, LPSTR lpProviders); VOID WINAPI WNetSetLastErrorW(DWORD err, LPWSTR lpError, LPWSTR lpProviders); #define WNetSetLastError WINELIB_NAME_AW(WNetSetLastError) /* provider classes */ #define WN_NETWORK_CLASS 0x00000001 #define WN_CREDENTIAL_CLASS 0x00000002 #define WN_PRIMARY_AUTHENT_CLASS 0x00000004 #define WN_SERVICE_CLASS 0x00000008 #define WN_VALID_LOGON_ACCOUNT 0x00000001 #define WN_NT_PASSWORD_CHANGED 0x00000002 /* notifications */ typedef DWORD (APIENTRY *PF_NPLogonNotify)(PLUID lpLogonId, LPCWSTR lpAuthentInfoType, LPVOID lpAuthentInfo, LPCWSTR lpPreviousAuthentInfoType, LPVOID lpPreviousAuthentInfo, LPWSTR lpStationName, LPVOID StationHandle, LPWSTR *lpLogonScript); typedef DWORD (APIENTRY *PF_NPPasswordChangeNotify)(LPCWSTR lpAuthentInfoType, LPVOID lpAuthentInfo, LPCWSTR lpPreviousAuthentInfoType, LPVOID lpPreviousAuthentInfo, LPWSTR lpStationName, LPVOID StationHandle, DWORD dwChangeInfo); #define NOTIFY_PRE 0x00000001 #define NOTIFY_POST 0x00000002 typedef struct _NOTIFYINFO { DWORD dwNotifyStatus; DWORD dwOperationStatus; LPVOID lpContext; } NOTIFYINFO, *LPNOTIFYINFO; /* FIXME: NetResource is declared as a NETRESOURCE in psdk, not a NETRESOURCEW, * but how can the type change in a service provider? Defaulting to wide-char * for consistency with the rest of the api. */ typedef struct _NOTIFYADD { HWND hwndOwner; NETRESOURCEW NetResource; DWORD dwAddFlags; } NOTIFYADD, *LPNOTIFYADD; /* FIXME: lpName and lpProvider are declared as LPTSTRs in psdk, but again * for consistency with rest of api defaulting to LPWSTRs. */ typedef struct _NOTIFYCANCEL { LPWSTR lpName; LPWSTR lpProvider; DWORD dwFlags; BOOL fForce; } NOTIFYCANCEL, *LPNOTIFYCANCEL; typedef DWORD (APIENTRY *PF_AddConnectNotify)(LPNOTIFYINFO lpNotifyInfo, LPNOTIFYADD lpAddInfo); typedef DWORD (APIENTRY *PF_CancelConnectNotify)(LPNOTIFYINFO lpNotifyInfo, LPNOTIFYADD lpAddInfo); #ifdef __cplusplus } #endif #endif /* ndef __WINE_NPAPI_H__ */ ================================================ FILE: wine/windows/nserror.h ================================================ /* * Copyright (C) 2017 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _NSERROR_H #define _NSERROR_H /* Facility codes */ #define FACILITY_NS_WIN32 0x7 #define FACILITY_NS 0xD /* Severity codes */ #define STATUS_SEVERITY_WARNING 0x2 #define STATUS_SEVERITY_SUCCESS 0x0 #define STATUS_SEVERITY_INFORMATIONAL 0x1 #define STATUS_SEVERITY_ERROR 0x3 /* Success events */ #define NS_S_CALLPENDING _HRESULT_TYPEDEF_(0x000d0000) #define NS_S_CALLABORTED _HRESULT_TYPEDEF_(0x000d0001) #define NS_S_STREAM_TRUNCATED _HRESULT_TYPEDEF_(0x000d0002) /* Warning events */ #define NS_W_SERVER_BANDWIDTH_LIMIT _HRESULT_TYPEDEF_(0x800d0003) #define NS_W_FILE_BANDWIDTH_LIMIT _HRESULT_TYPEDEF_(0x800d0004) /* Error events */ #define NS_E_NOCONNECTION _HRESULT_TYPEDEF_(0xc00d0005) #define NS_E_CANNOTCONNECT _HRESULT_TYPEDEF_(0xc00d0006) #define NS_E_CANNOTDESTROYTITLE _HRESULT_TYPEDEF_(0xc00d0007) #define NS_E_CANNOTRENAMETITLE _HRESULT_TYPEDEF_(0xc00d0008) #define NS_E_CANNOTOFFLINEDISK _HRESULT_TYPEDEF_(0xc00d0009) #define NS_E_CANNOTONLINEDISK _HRESULT_TYPEDEF_(0xc00d000a) #define NS_E_NOREGISTEREDWALKER _HRESULT_TYPEDEF_(0xc00d000b) #define NS_E_NOFUNNEL _HRESULT_TYPEDEF_(0xc00d000c) #define NS_E_NO_LOCALPLAY _HRESULT_TYPEDEF_(0xc00d000d) #define NS_E_NETWORK_BUSY _HRESULT_TYPEDEF_(0xc00d000e) #define NS_E_TOO_MANY_SESS _HRESULT_TYPEDEF_(0xc00d000f) #define NS_E_ALREADY_CONNECTED _HRESULT_TYPEDEF_(0xc00d0010) #define NS_E_INVALID_INDEX _HRESULT_TYPEDEF_(0xc00d0011) #define NS_E_PROTOCOL_MISMATCH _HRESULT_TYPEDEF_(0xc00d0012) #define NS_E_TIMEOUT _HRESULT_TYPEDEF_(0xc00d0013) #define NS_E_NET_WRITE _HRESULT_TYPEDEF_(0xc00d0014) #define NS_E_NET_READ _HRESULT_TYPEDEF_(0xc00d0015) #define NS_E_DISK_WRITE _HRESULT_TYPEDEF_(0xc00d0016) #define NS_E_DISK_READ _HRESULT_TYPEDEF_(0xc00d0017) #define NS_E_FILE_WRITE _HRESULT_TYPEDEF_(0xc00d0018) #define NS_E_FILE_READ _HRESULT_TYPEDEF_(0xc00d0019) #define NS_E_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d001a) #define NS_E_FILE_EXISTS _HRESULT_TYPEDEF_(0xc00d001b) #define NS_E_INVALID_NAME _HRESULT_TYPEDEF_(0xc00d001c) #define NS_E_FILE_OPEN_FAILED _HRESULT_TYPEDEF_(0xc00d001d) #define NS_E_FILE_ALLOCATION_FAILED _HRESULT_TYPEDEF_(0xc00d001e) #define NS_E_FILE_INIT_FAILED _HRESULT_TYPEDEF_(0xc00d001f) #define NS_E_FILE_PLAY_FAILED _HRESULT_TYPEDEF_(0xc00d0020) #define NS_E_SET_DISK_UID_FAILED _HRESULT_TYPEDEF_(0xc00d0021) #define NS_E_INDUCED _HRESULT_TYPEDEF_(0xc00d0022) #define NS_E_CCLINK_DOWN _HRESULT_TYPEDEF_(0xc00d0023) #define NS_E_INTERNAL _HRESULT_TYPEDEF_(0xc00d0024) #define NS_E_BUSY _HRESULT_TYPEDEF_(0xc00d0025) #define NS_E_UNRECOGNIZED_STREAM_TYPE _HRESULT_TYPEDEF_(0xc00d0026) #define NS_E_NETWORK_SERVICE_FAILURE _HRESULT_TYPEDEF_(0xc00d0027) #define NS_E_NETWORK_RESOURCE_FAILURE _HRESULT_TYPEDEF_(0xc00d0028) #define NS_E_CONNECTION_FAILURE _HRESULT_TYPEDEF_(0xc00d0029) #define NS_E_SHUTDOWN _HRESULT_TYPEDEF_(0xc00d002a) #define NS_E_INVALID_REQUEST _HRESULT_TYPEDEF_(0xc00d002b) #define NS_E_INSUFFICIENT_BANDWIDTH _HRESULT_TYPEDEF_(0xc00d002c) #define NS_E_NOT_REBUILDING _HRESULT_TYPEDEF_(0xc00d002d) #define NS_E_LATE_OPERATION _HRESULT_TYPEDEF_(0xc00d002e) #define NS_E_INVALID_DATA _HRESULT_TYPEDEF_(0xc00d002f) #define NS_E_FILE_BANDWIDTH_LIMIT _HRESULT_TYPEDEF_(0xc00d0030) #define NS_E_OPEN_FILE_LIMIT _HRESULT_TYPEDEF_(0xc00d0031) #define NS_E_BAD_CONTROL_DATA _HRESULT_TYPEDEF_(0xc00d0032) #define NS_E_NO_STREAM _HRESULT_TYPEDEF_(0xc00d0033) #define NS_E_STREAM_END _HRESULT_TYPEDEF_(0xc00d0034) #define NS_E_SERVER_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d0035) #define NS_E_DUPLICATE_NAME _HRESULT_TYPEDEF_(0xc00d0036) #define NS_E_DUPLICATE_ADDRESS _HRESULT_TYPEDEF_(0xc00d0037) #define NS_E_BAD_MULTICAST_ADDRESS _HRESULT_TYPEDEF_(0xc00d0038) #define NS_E_BAD_ADAPTER_ADDRESS _HRESULT_TYPEDEF_(0xc00d0039) #define NS_E_BAD_DELIVERY_MODE _HRESULT_TYPEDEF_(0xc00d003a) #define NS_E_INVALID_CHANNEL _HRESULT_TYPEDEF_(0xc00d003b) #define NS_E_INVALID_STREAM _HRESULT_TYPEDEF_(0xc00d003c) #define NS_E_INVALID_ARCHIVE _HRESULT_TYPEDEF_(0xc00d003d) #define NS_E_NOTITLES _HRESULT_TYPEDEF_(0xc00d003e) #define NS_E_INVALID_CLIENT _HRESULT_TYPEDEF_(0xc00d003f) #define NS_E_INVALID_BLACKHOLE_ADDRESS _HRESULT_TYPEDEF_(0xc00d0040) #define NS_E_INCOMPATIBLE_FORMAT _HRESULT_TYPEDEF_(0xc00d0041) #define NS_E_INVALID_KEY _HRESULT_TYPEDEF_(0xc00d0042) #define NS_E_INVALID_PORT _HRESULT_TYPEDEF_(0xc00d0043) #define NS_E_INVALID_TTL _HRESULT_TYPEDEF_(0xc00d0044) #define NS_E_STRIDE_REFUSED _HRESULT_TYPEDEF_(0xc00d0045) #define NS_E_MMSAUTOSERVER_CANTFINDWALKER _HRESULT_TYPEDEF_(0xc00d0046) #define NS_E_MAX_BITRATE _HRESULT_TYPEDEF_(0xc00d0047) #define NS_E_LOGFILEPERIOD _HRESULT_TYPEDEF_(0xc00d0048) #define NS_E_MAX_CLIENTS _HRESULT_TYPEDEF_(0xc00d0049) #define NS_E_LOG_FILE_SIZE _HRESULT_TYPEDEF_(0xc00d004a) #define NS_E_MAX_FILERATE _HRESULT_TYPEDEF_(0xc00d004b) #define NS_E_WALKER_UNKNOWN _HRESULT_TYPEDEF_(0xc00d004c) #define NS_E_WALKER_SERVER _HRESULT_TYPEDEF_(0xc00d004d) #define NS_E_WALKER_USAGE _HRESULT_TYPEDEF_(0xc00d004e) /* Monitor events */ #define NS_I_TIGER_START _HRESULT_TYPEDEF_(0x400d004f) #define NS_E_TIGER_FAIL _HRESULT_TYPEDEF_(0xc00d0050) #define NS_I_CUB_START _HRESULT_TYPEDEF_(0x400d0051) #define NS_I_CUB_RUNNING _HRESULT_TYPEDEF_(0x400d0052) #define NS_E_CUB_FAIL _HRESULT_TYPEDEF_(0xc00d0053) #define NS_I_DISK_START _HRESULT_TYPEDEF_(0x400d0054) #define NS_E_DISK_FAIL _HRESULT_TYPEDEF_(0xc00d0055) #define NS_I_DISK_REBUILD_STARTED _HRESULT_TYPEDEF_(0x400d0056) #define NS_I_DISK_REBUILD_FINISHED _HRESULT_TYPEDEF_(0x400d0057) #define NS_I_DISK_REBUILD_ABORTED _HRESULT_TYPEDEF_(0x400d0058) #define NS_I_LIMIT_FUNNELS _HRESULT_TYPEDEF_(0x400d0059) #define NS_I_START_DISK _HRESULT_TYPEDEF_(0x400d005a) #define NS_I_STOP_DISK _HRESULT_TYPEDEF_(0x400d005b) #define NS_I_STOP_CUB _HRESULT_TYPEDEF_(0x400d005c) #define NS_I_KILL_USERSESSION _HRESULT_TYPEDEF_(0x400d005d) #define NS_I_KILL_CONNECTION _HRESULT_TYPEDEF_(0x400d005e) #define NS_I_REBUILD_DISK _HRESULT_TYPEDEF_(0x400d005f) #define NS_W_UNKNOWN_EVENT _HRESULT_TYPEDEF_(0x800d0060) #define NS_E_MAX_FUNNELS_ALERT _HRESULT_TYPEDEF_(0xc00d0060) #define NS_E_ALLOCATE_FILE_FAIL _HRESULT_TYPEDEF_(0xc00d0061) #define NS_E_PAGING_ERROR _HRESULT_TYPEDEF_(0xc00d0062) #define NS_E_BAD_BLOCK0_VERSION _HRESULT_TYPEDEF_(0xc00d0063) #define NS_E_BAD_DISK_UID _HRESULT_TYPEDEF_(0xc00d0064) #define NS_E_BAD_FSMAJOR_VERSION _HRESULT_TYPEDEF_(0xc00d0065) #define NS_E_BAD_STAMPNUMBER _HRESULT_TYPEDEF_(0xc00d0066) #define NS_E_PARTIALLY_REBUILT_DISK _HRESULT_TYPEDEF_(0xc00d0067) #define NS_E_ENACTPLAN_GIVEUP _HRESULT_TYPEDEF_(0xc00d0068) #define MCMADM_I_NO_EVENTS _HRESULT_TYPEDEF_(0x400d0069) #define MCMADM_E_REGKEY_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d006a) #define NS_E_NO_FORMATS _HRESULT_TYPEDEF_(0xc00d006b) #define NS_E_NO_REFERENCES _HRESULT_TYPEDEF_(0xc00d006c) #define NS_E_WAVE_OPEN _HRESULT_TYPEDEF_(0xc00d006d) #define NS_I_LOGGING_FAILED _HRESULT_TYPEDEF_(0x400d006e) #define NS_E_CANNOTCONNECTEVENTS _HRESULT_TYPEDEF_(0xc00d006f) #define NS_I_LIMIT_BANDWIDTH _HRESULT_TYPEDEF_(0x400d0070) #define NS_E_NO_DEVICE _HRESULT_TYPEDEF_(0xc00d0071) #define NS_E_NO_SPECIFIED_DEVICE _HRESULT_TYPEDEF_(0xc00d0072) #define NS_E_NOTHING_TO_DO _HRESULT_TYPEDEF_(0xc00d07f1) #define NS_E_NO_MULTICAST _HRESULT_TYPEDEF_(0xc00d07f2) /* Error events */ #define NS_E_MONITOR_GIVEUP _HRESULT_TYPEDEF_(0xc00d00c8) #define NS_E_REMIRRORED_DISK _HRESULT_TYPEDEF_(0xc00d00c9) #define NS_E_INSUFFICIENT_DATA _HRESULT_TYPEDEF_(0xc00d00ca) #define NS_E_ASSERT _HRESULT_TYPEDEF_(0xc00d00cb) #define NS_E_BAD_ADAPTER_NAME _HRESULT_TYPEDEF_(0xc00d00cc) #define NS_E_NOT_LICENSED _HRESULT_TYPEDEF_(0xc00d00cd) #define NS_E_NO_SERVER_CONTACT _HRESULT_TYPEDEF_(0xc00d00ce) #define NS_E_TOO_MANY_TITLES _HRESULT_TYPEDEF_(0xc00d00cf) #define NS_E_TITLE_SIZE_EXCEEDED _HRESULT_TYPEDEF_(0xc00d00d0) #define NS_E_UDP_DISABLED _HRESULT_TYPEDEF_(0xc00d00d1) #define NS_E_TCP_DISABLED _HRESULT_TYPEDEF_(0xc00d00d2) #define NS_E_HTTP_DISABLED _HRESULT_TYPEDEF_(0xc00d00d3) #define NS_E_LICENSE_EXPIRED _HRESULT_TYPEDEF_(0xc00d00d4) #define NS_E_TITLE_BITRATE _HRESULT_TYPEDEF_(0xc00d00d5) #define NS_E_EMPTY_PROGRAM_NAME _HRESULT_TYPEDEF_(0xc00d00d6) #define NS_E_MISSING_CHANNEL _HRESULT_TYPEDEF_(0xc00d00d7) #define NS_E_NO_CHANNELS _HRESULT_TYPEDEF_(0xc00d00d8) #define NS_E_INVALID_INDEX2 _HRESULT_TYPEDEF_(0xc00d00d9) /* (More) error events */ #define NS_E_CUB_FAIL_LINK _HRESULT_TYPEDEF_(0xc00d0190) #define NS_I_CUB_UNFAIL_LINK _HRESULT_TYPEDEF_(0x400d0191) #define NS_E_BAD_CUB_UID _HRESULT_TYPEDEF_(0xc00d0192) #define NS_I_RESTRIPE_START _HRESULT_TYPEDEF_(0x400d0193) #define NS_I_RESTRIPE_DONE _HRESULT_TYPEDEF_(0x400d0194) #define NS_E_GLITCH_MODE _HRESULT_TYPEDEF_(0xc00d0195) #define NS_I_RESTRIPE_DISK_OUT _HRESULT_TYPEDEF_(0x400d0196) #define NS_I_RESTRIPE_CUB_OUT _HRESULT_TYPEDEF_(0x400d0197) #define NS_I_DISK_STOP _HRESULT_TYPEDEF_(0x400d0198) #define NS_I_CATATONIC_FAILURE _HRESULT_TYPEDEF_(0x800d0199) #define NS_I_CATATONIC_AUTO_UNFAIL _HRESULT_TYPEDEF_(0x800d019a) #define NS_E_NO_MEDIA_PROTOCOL _HRESULT_TYPEDEF_(0xc00d019b) /* WMSDK errors */ #define NS_E_INVALID_INPUT_FORMAT _HRESULT_TYPEDEF_(0xc00d0bb8) #define NS_E_MSAUDIO_NOT_INSTALLED _HRESULT_TYPEDEF_(0xc00d0bb9) #define NS_E_UNEXPECTED_MSAUDIO_ERROR _HRESULT_TYPEDEF_(0xc00d0bba) #define NS_E_INVALID_OUTPUT_FORMAT _HRESULT_TYPEDEF_(0xc00d0bbb) #define NS_E_NOT_CONFIGURED _HRESULT_TYPEDEF_(0xc00d0bbc) #define NS_E_PROTECTED_CONTENT _HRESULT_TYPEDEF_(0xc00d0bbd) #define NS_E_LICENSE_REQUIRED _HRESULT_TYPEDEF_(0xc00d0bbe) #define NS_E_TAMPERED_CONTENT _HRESULT_TYPEDEF_(0xc00d0bbf) #define NS_E_LICENSE_OUTOFDATE _HRESULT_TYPEDEF_(0xc00d0bc0) #define NS_E_LICENSE_INCORRECT_RIGHTS _HRESULT_TYPEDEF_(0xc00d0bc1) #define NS_E_AUDIO_CODEC_NOT_INSTALLED _HRESULT_TYPEDEF_(0xc00d0bc2) #define NS_E_AUDIO_CODEC_ERROR _HRESULT_TYPEDEF_(0xc00d0bc3) #define NS_E_VIDEO_CODEC_NOT_INSTALLED _HRESULT_TYPEDEF_(0xc00d0bc4) #define NS_E_VIDEO_CODEC_ERROR _HRESULT_TYPEDEF_(0xc00d0bc5) #define NS_E_INVALIDPROFILE _HRESULT_TYPEDEF_(0xc00d0bc6) #define NS_E_INCOMPATIBLE_VERSION _HRESULT_TYPEDEF_(0xc00d0bc7) #define NS_S_REBUFFERING _HRESULT_TYPEDEF_(0x000d0bc8) #define NS_S_DEGRADING_QUALITY _HRESULT_TYPEDEF_(0x000d0bc9) #define NS_E_OFFLINE_MODE _HRESULT_TYPEDEF_(0xc00d0bca) #define NS_E_NOT_CONNECTED _HRESULT_TYPEDEF_(0xc00d0bcb) #define NS_E_TOO_MUCH_DATA _HRESULT_TYPEDEF_(0xc00d0bcc) #define NS_E_UNSUPPORTED_PROPERTY _HRESULT_TYPEDEF_(0xc00d0bcd) #define NS_E_8BIT_WAVE_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d0bce) #define NS_E_NO_MORE_SAMPLES _HRESULT_TYPEDEF_(0xc00d0bcf) #define NS_E_INVALID_SAMPLING_RATE _HRESULT_TYPEDEF_(0xc00d0bd0) #define NS_E_MAX_PACKET_SIZE_TOO_SMALL _HRESULT_TYPEDEF_(0xc00d0bd1) #define NS_E_LATE_PACKET _HRESULT_TYPEDEF_(0xc00d0bd2) #define NS_E_DUPLICATE_PACKET _HRESULT_TYPEDEF_(0xc00d0bd3) #define NS_E_SDK_BUFFERTOOSMALL _HRESULT_TYPEDEF_(0xc00d0bd4) #define NS_E_INVALID_NUM_PASSES _HRESULT_TYPEDEF_(0xc00d0bd5) #define NS_E_ATTRIBUTE_READ_ONLY _HRESULT_TYPEDEF_(0xc00d0bd6) #define NS_E_ATTRIBUTE_NOT_ALLOWED _HRESULT_TYPEDEF_(0xc00d0bd7) #define NS_E_INVALID_EDL _HRESULT_TYPEDEF_(0xc00d0bd8) #define NS_E_DATA_UNIT_EXTENSION_TOO_LARGE _HRESULT_TYPEDEF_(0xc00d0bd9) #define NS_E_CODEC_DMO_ERROR _HRESULT_TYPEDEF_(0xc00d0bda) #define NS_S_TRANSCRYPTOR_EOF _HRESULT_TYPEDEF_(0x000d0bdb) #define NS_E_FEATURE_DISABLED_BY_GROUP_POLICY _HRESULT_TYPEDEF_(0xc00d0bdc) #define NS_E_FEATURE_DISABLED_IN_SKU _HRESULT_TYPEDEF_(0xc00d0bdd) /* WMP errors */ #define NS_E_NO_CD _HRESULT_TYPEDEF_(0xc00d0fa0) #define NS_E_CANT_READ_DIGITAL _HRESULT_TYPEDEF_(0xc00d0fa1) #define NS_E_DEVICE_DISCONNECTED _HRESULT_TYPEDEF_(0xc00d0fa2) #define NS_E_DEVICE_NOT_SUPPORT_FORMAT _HRESULT_TYPEDEF_(0xc00d0fa3) #define NS_E_SLOW_READ_DIGITAL _HRESULT_TYPEDEF_(0xc00d0fa4) #define NS_E_MIXER_INVALID_LINE _HRESULT_TYPEDEF_(0xc00d0fa5) #define NS_E_MIXER_INVALID_CONTROL _HRESULT_TYPEDEF_(0xc00d0fa6) #define NS_E_MIXER_INVALID_VALUE _HRESULT_TYPEDEF_(0xc00d0fa7) #define NS_E_MIXER_UNKNOWN_MMRESULT _HRESULT_TYPEDEF_(0xc00d0fa8) #define NS_E_USER_STOP _HRESULT_TYPEDEF_(0xc00d0fa9) #define NS_E_MP3_FORMAT_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d0faa) #define NS_E_CD_READ_ERROR_NO_CORRECTION _HRESULT_TYPEDEF_(0xc00d0fab) #define NS_E_CD_READ_ERROR _HRESULT_TYPEDEF_(0xc00d0fac) #define NS_E_CD_SLOW_COPY _HRESULT_TYPEDEF_(0xc00d0fad) #define NS_E_CD_COPYTO_CD _HRESULT_TYPEDEF_(0xc00d0fae) #define NS_E_MIXER_NODRIVER _HRESULT_TYPEDEF_(0xc00d0faf) #define NS_E_REDBOOK_ENABLED_WHILE_COPYING _HRESULT_TYPEDEF_(0xc00d0fb0) #define NS_E_CD_REFRESH _HRESULT_TYPEDEF_(0xc00d0fb1) #define NS_E_CD_DRIVER_PROBLEM _HRESULT_TYPEDEF_(0xc00d0fb2) #define NS_E_WONT_DO_DIGITAL _HRESULT_TYPEDEF_(0xc00d0fb3) #define NS_E_WMPXML_NOERROR _HRESULT_TYPEDEF_(0xc00d0fb4) #define NS_E_WMPXML_ENDOFDATA _HRESULT_TYPEDEF_(0xc00d0fb5) #define NS_E_WMPXML_PARSEERROR _HRESULT_TYPEDEF_(0xc00d0fb6) #define NS_E_WMPXML_ATTRIBUTENOTFOUND _HRESULT_TYPEDEF_(0xc00d0fb7) #define NS_E_WMPXML_PINOTFOUND _HRESULT_TYPEDEF_(0xc00d0fb8) #define NS_E_WMPXML_EMPTYDOC _HRESULT_TYPEDEF_(0xc00d0fb9) #define NS_E_WMP_PATH_ALREADY_IN_LIBRARY _HRESULT_TYPEDEF_(0xc00d0fba) #define NS_E_WMP_FILESCANALREADYSTARTED _HRESULT_TYPEDEF_(0xc00d0fbe) #define NS_E_WMP_HME_INVALIDOBJECTID _HRESULT_TYPEDEF_(0xc00d0fbf) #define NS_E_WMP_MF_CODE_EXPIRED _HRESULT_TYPEDEF_(0xc00d0fc0) #define NS_E_WMP_HME_NOTSEARCHABLEFORITEMS _HRESULT_TYPEDEF_(0xc00d0fc1) #define NS_E_WMP_HME_STALEREQUEST _HRESULT_TYPEDEF_(0xc00d0fc2) #define NS_E_WMP_ADDTOLIBRARY_FAILED _HRESULT_TYPEDEF_(0xc00d0fc7) #define NS_E_WMP_WINDOWSAPIFAILURE _HRESULT_TYPEDEF_(0xc00d0fc8) #define NS_E_WMP_RECORDING_NOT_ALLOWED _HRESULT_TYPEDEF_(0xc00d0fc9) #define NS_E_DEVICE_NOT_READY _HRESULT_TYPEDEF_(0xc00d0fca) #define NS_E_DAMAGED_FILE _HRESULT_TYPEDEF_(0xc00d0fcb) #define NS_E_MPDB_GENERIC _HRESULT_TYPEDEF_(0xc00d0fcc) #define NS_E_FILE_FAILED_CHECKS _HRESULT_TYPEDEF_(0xc00d0fcd) #define NS_E_MEDIA_LIBRARY_FAILED _HRESULT_TYPEDEF_(0xc00d0fce) #define NS_E_SHARING_VIOLATION _HRESULT_TYPEDEF_(0xc00d0fcf) #define NS_E_NO_ERROR_STRING_FOUND _HRESULT_TYPEDEF_(0xc00d0fd0) #define NS_E_WMPOCX_NO_REMOTE_CORE _HRESULT_TYPEDEF_(0xc00d0fd1) #define NS_E_WMPOCX_NO_ACTIVE_CORE _HRESULT_TYPEDEF_(0xc00d0fd2) #define NS_E_WMPOCX_NOT_RUNNING_REMOTELY _HRESULT_TYPEDEF_(0xc00d0fd3) #define NS_E_WMPOCX_NO_REMOTE_WINDOW _HRESULT_TYPEDEF_(0xc00d0fd4) #define NS_E_WMPOCX_ERRORMANAGERNOTAVAILABLE _HRESULT_TYPEDEF_(0xc00d0fd5) #define NS_E_PLUGIN_NOTSHUTDOWN _HRESULT_TYPEDEF_(0xc00d0fd6) #define NS_E_WMP_CANNOT_FIND_FOLDER _HRESULT_TYPEDEF_(0xc00d0fd7) #define NS_E_WMP_STREAMING_RECORDING_NOT_ALLOWED _HRESULT_TYPEDEF_(0xc00d0fd8) #define NS_E_WMP_PLUGINDLL_NOTFOUND _HRESULT_TYPEDEF_(0xc00d0fd9) #define NS_E_NEED_TO_ASK_USER _HRESULT_TYPEDEF_(0xc00d0fda) #define NS_E_WMPOCX_PLAYER_NOT_DOCKED _HRESULT_TYPEDEF_(0xc00d0fdb) #define NS_E_WMP_EXTERNAL_NOTREADY _HRESULT_TYPEDEF_(0xc00d0fdc) #define NS_E_WMP_MLS_STALE_DATA _HRESULT_TYPEDEF_(0xc00d0fdd) #define NS_E_WMP_UI_SUBCONTROLSNOTSUPPORTED _HRESULT_TYPEDEF_(0xc00d0fde) #define NS_E_WMP_UI_VERSIONMISMATCH _HRESULT_TYPEDEF_(0xc00d0fdf) #define NS_E_WMP_UI_NOTATHEMEFILE _HRESULT_TYPEDEF_(0xc00d0fe0) #define NS_E_WMP_UI_SUBELEMENTNOTFOUND _HRESULT_TYPEDEF_(0xc00d0fe1) #define NS_E_WMP_UI_VERSIONPARSE _HRESULT_TYPEDEF_(0xc00d0fe2) #define NS_E_WMP_UI_VIEWIDNOTFOUND _HRESULT_TYPEDEF_(0xc00d0fe3) #define NS_E_WMP_UI_PASSTHROUGH _HRESULT_TYPEDEF_(0xc00d0fe4) #define NS_E_WMP_UI_OBJECTNOTFOUND _HRESULT_TYPEDEF_(0xc00d0fe5) #define NS_E_WMP_UI_SECONDHANDLER _HRESULT_TYPEDEF_(0xc00d0fe6) #define NS_E_WMP_UI_NOSKININZIP _HRESULT_TYPEDEF_(0xc00d0fe7) #define NS_S_WMP_UI_VERSIONMISMATCH _HRESULT_TYPEDEF_(0x000d0fe8) #define NS_S_WMP_EXCEPTION _HRESULT_TYPEDEF_(0x000d0fe9) #define NS_E_WMP_URLDOWNLOADFAILED _HRESULT_TYPEDEF_(0xc00d0fea) #define NS_E_WMPOCX_UNABLE_TO_LOAD_SKIN _HRESULT_TYPEDEF_(0xc00d0feb) #define NS_E_WMP_INVALID_SKIN _HRESULT_TYPEDEF_(0xc00d0fec) #define NS_E_WMP_SENDMAILFAILED _HRESULT_TYPEDEF_(0xc00d0fed) #define NS_E_WMP_LOCKEDINSKINMODE _HRESULT_TYPEDEF_(0xc00d0fee) #define NS_E_WMP_FAILED_TO_SAVE_FILE _HRESULT_TYPEDEF_(0xc00d0fef) #define NS_E_WMP_SAVEAS_READONLY _HRESULT_TYPEDEF_(0xc00d0ff0) #define NS_E_WMP_FAILED_TO_SAVE_PLAYLIST _HRESULT_TYPEDEF_(0xc00d0ff1) #define NS_E_WMP_FAILED_TO_OPEN_WMD _HRESULT_TYPEDEF_(0xc00d0ff2) #define NS_E_WMP_CANT_PLAY_PROTECTED _HRESULT_TYPEDEF_(0xc00d0ff3) #define NS_E_SHARING_STATE_OUT_OF_SYNC _HRESULT_TYPEDEF_(0xc00d0ff4) #define NS_E_WMPOCX_REMOTE_PLAYER_ALREADY_RUNNING _HRESULT_TYPEDEF_(0xc00d0ffa) #define NS_E_WMP_RBC_JPGMAPPINGIMAGE _HRESULT_TYPEDEF_(0xc00d1004) #define NS_E_WMP_JPGTRANSPARENCY _HRESULT_TYPEDEF_(0xc00d1005) #define NS_E_WMP_INVALID_MAX_VAL _HRESULT_TYPEDEF_(0xc00d1009) #define NS_E_WMP_INVALID_MIN_VAL _HRESULT_TYPEDEF_(0xc00d100a) #define NS_E_WMP_CS_JPGPOSITIONIMAGE _HRESULT_TYPEDEF_(0xc00d100e) #define NS_E_WMP_CS_NOTEVENLYDIVISIBLE _HRESULT_TYPEDEF_(0xc00d100f) #define NS_E_WMPZIP_NOTAZIPFILE _HRESULT_TYPEDEF_(0xc00d1018) #define NS_E_WMPZIP_CORRUPT _HRESULT_TYPEDEF_(0xc00d1019) #define NS_E_WMPZIP_FILENOTFOUND _HRESULT_TYPEDEF_(0xc00d101a) #define NS_E_WMP_IMAGE_FILETYPE_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d1022) #define NS_E_WMP_IMAGE_INVALID_FORMAT _HRESULT_TYPEDEF_(0xc00d1023) #define NS_E_WMP_GIF_UNEXPECTED_ENDOFFILE _HRESULT_TYPEDEF_(0xc00d1024) #define NS_E_WMP_GIF_INVALID_FORMAT _HRESULT_TYPEDEF_(0xc00d1025) #define NS_E_WMP_GIF_BAD_VERSION_NUMBER _HRESULT_TYPEDEF_(0xc00d1026) #define NS_E_WMP_GIF_NO_IMAGE_IN_FILE _HRESULT_TYPEDEF_(0xc00d1027) #define NS_E_WMP_PNG_INVALIDFORMAT _HRESULT_TYPEDEF_(0xc00d1028) #define NS_E_WMP_PNG_UNSUPPORTED_BITDEPTH _HRESULT_TYPEDEF_(0xc00d1029) #define NS_E_WMP_PNG_UNSUPPORTED_COMPRESSION _HRESULT_TYPEDEF_(0xc00d102a) #define NS_E_WMP_PNG_UNSUPPORTED_FILTER _HRESULT_TYPEDEF_(0xc00d102b) #define NS_E_WMP_PNG_UNSUPPORTED_INTERLACE _HRESULT_TYPEDEF_(0xc00d102c) #define NS_E_WMP_PNG_UNSUPPORTED_BAD_CRC _HRESULT_TYPEDEF_(0xc00d102d) #define NS_E_WMP_BMP_INVALID_BITMASK _HRESULT_TYPEDEF_(0xc00d102e) #define NS_E_WMP_BMP_TOPDOWN_DIB_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d102f) #define NS_E_WMP_BMP_BITMAP_NOT_CREATED _HRESULT_TYPEDEF_(0xc00d1030) #define NS_E_WMP_BMP_COMPRESSION_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d1031) #define NS_E_WMP_BMP_INVALID_FORMAT _HRESULT_TYPEDEF_(0xc00d1032) #define NS_E_WMP_JPG_JERR_ARITHCODING_NOTIMPL _HRESULT_TYPEDEF_(0xc00d1033) #define NS_E_WMP_JPG_INVALID_FORMAT _HRESULT_TYPEDEF_(0xc00d1034) #define NS_E_WMP_JPG_BAD_DCTSIZE _HRESULT_TYPEDEF_(0xc00d1035) #define NS_E_WMP_JPG_BAD_VERSION_NUMBER _HRESULT_TYPEDEF_(0xc00d1036) #define NS_E_WMP_JPG_BAD_PRECISION _HRESULT_TYPEDEF_(0xc00d1037) #define NS_E_WMP_JPG_CCIR601_NOTIMPL _HRESULT_TYPEDEF_(0xc00d1038) #define NS_E_WMP_JPG_NO_IMAGE_IN_FILE _HRESULT_TYPEDEF_(0xc00d1039) #define NS_E_WMP_JPG_READ_ERROR _HRESULT_TYPEDEF_(0xc00d103a) #define NS_E_WMP_JPG_FRACT_SAMPLE_NOTIMPL _HRESULT_TYPEDEF_(0xc00d103b) #define NS_E_WMP_JPG_IMAGE_TOO_BIG _HRESULT_TYPEDEF_(0xc00d103c) #define NS_E_WMP_JPG_UNEXPECTED_ENDOFFILE _HRESULT_TYPEDEF_(0xc00d103d) #define NS_E_WMP_JPG_SOF_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d103e) #define NS_E_WMP_JPG_UNKNOWN_MARKER _HRESULT_TYPEDEF_(0xc00d103f) #define NS_S_WMP_LOADED_GIF_IMAGE _HRESULT_TYPEDEF_(0x000d1040) #define NS_S_WMP_LOADED_PNG_IMAGE _HRESULT_TYPEDEF_(0x000d1041) #define NS_S_WMP_LOADED_BMP_IMAGE _HRESULT_TYPEDEF_(0x000d1042) #define NS_S_WMP_LOADED_JPG_IMAGE _HRESULT_TYPEDEF_(0x000d1043) #define NS_E_WMP_FAILED_TO_OPEN_IMAGE _HRESULT_TYPEDEF_(0xc00d1044) #define NS_E_WMP_DAI_SONGTOOSHORT _HRESULT_TYPEDEF_(0xc00d1049) #define NS_E_WMG_RATEUNAVAILABLE _HRESULT_TYPEDEF_(0xc00d104a) #define NS_E_WMG_PLUGINUNAVAILABLE _HRESULT_TYPEDEF_(0xc00d104b) #define NS_E_WMG_CANNOTQUEUE _HRESULT_TYPEDEF_(0xc00d104c) #define NS_E_WMG_PREROLLLICENSEACQUISITIONNOTALLOWED _HRESULT_TYPEDEF_(0xc00d104d) #define NS_E_WMG_UNEXPECTEDPREROLLSTATUS _HRESULT_TYPEDEF_(0xc00d104e) #define NS_S_WMG_FORCE_DROP_FRAME _HRESULT_TYPEDEF_(0x000d104f) #define NS_E_WMG_INVALID_COPP_CERTIFICATE _HRESULT_TYPEDEF_(0xc00d1051) #define NS_E_WMG_COPP_SECURITY_INVALID _HRESULT_TYPEDEF_(0xc00d1052) #define NS_E_WMG_COPP_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d1053) #define NS_E_WMG_INVALIDSTATE _HRESULT_TYPEDEF_(0xc00d1054) #define NS_E_WMG_SINKALREADYEXISTS _HRESULT_TYPEDEF_(0xc00d1055) #define NS_E_WMG_NOSDKINTERFACE _HRESULT_TYPEDEF_(0xc00d1056) #define NS_E_WMG_NOTALLOUTPUTSRENDERED _HRESULT_TYPEDEF_(0xc00d1057) #define NS_E_WMG_FILETRANSFERNOTALLOWED _HRESULT_TYPEDEF_(0xc00d1058) #define NS_E_WMR_UNSUPPORTEDSTREAM _HRESULT_TYPEDEF_(0xc00d1059) #define NS_E_WMR_PINNOTFOUND _HRESULT_TYPEDEF_(0xc00d105a) #define NS_E_WMR_WAITINGONFORMATSWITCH _HRESULT_TYPEDEF_(0xc00d105b) #define NS_E_WMR_NOSOURCEFILTER _HRESULT_TYPEDEF_(0xc00d105c) #define NS_E_WMR_PINTYPENOMATCH _HRESULT_TYPEDEF_(0xc00d105d) #define NS_E_WMR_NOCALLBACKAVAILABLE _HRESULT_TYPEDEF_(0xc00d105e) #define NS_S_WMR_ALREADYRENDERED _HRESULT_TYPEDEF_(0x000d105f) #define NS_S_WMR_PINTYPEPARTIALMATCH _HRESULT_TYPEDEF_(0x000d1060) #define NS_S_WMR_PINTYPEFULLMATCH _HRESULT_TYPEDEF_(0x000d1061) #define NS_E_WMR_SAMPLEPROPERTYNOTSET _HRESULT_TYPEDEF_(0xc00d1062) #define NS_E_WMR_CANNOT_RENDER_BINARY_STREAM _HRESULT_TYPEDEF_(0xc00d1063) #define NS_E_WMG_LICENSE_TAMPERED _HRESULT_TYPEDEF_(0xc00d1064) #define NS_E_WMR_WILLNOT_RENDER_BINARY_STREAM _HRESULT_TYPEDEF_(0xc00d1065) #define NS_S_WMG_ADVISE_DROP_FRAME _HRESULT_TYPEDEF_(0x000d1066) #define NS_S_WMG_ADVISE_DROP_TO_KEYFRAME _HRESULT_TYPEDEF_(0x000d1067) #define NS_E_WMX_UNRECOGNIZED_PLAYLIST_FORMAT _HRESULT_TYPEDEF_(0xc00d1068) #define NS_E_ASX_INVALIDFORMAT _HRESULT_TYPEDEF_(0xc00d1069) #define NS_E_ASX_INVALIDVERSION _HRESULT_TYPEDEF_(0xc00d106a) #define NS_E_ASX_INVALID_REPEAT_BLOCK _HRESULT_TYPEDEF_(0xc00d106b) #define NS_E_ASX_NOTHING_TO_WRITE _HRESULT_TYPEDEF_(0xc00d106c) #define NS_E_URLLIST_INVALIDFORMAT _HRESULT_TYPEDEF_(0xc00d106d) #define NS_E_WMX_ATTRIBUTE_DOES_NOT_EXIST _HRESULT_TYPEDEF_(0xc00d106e) #define NS_E_WMX_ATTRIBUTE_ALREADY_EXISTS _HRESULT_TYPEDEF_(0xc00d106f) #define NS_E_WMX_ATTRIBUTE_UNRETRIEVABLE _HRESULT_TYPEDEF_(0xc00d1070) #define NS_E_WMX_ITEM_DOES_NOT_EXIST _HRESULT_TYPEDEF_(0xc00d1071) #define NS_E_WMX_ITEM_TYPE_ILLEGAL _HRESULT_TYPEDEF_(0xc00d1072) #define NS_E_WMX_ITEM_UNSETTABLE _HRESULT_TYPEDEF_(0xc00d1073) #define NS_E_WMX_PLAYLIST_EMPTY _HRESULT_TYPEDEF_(0xc00d1074) #define NS_E_MLS_SMARTPLAYLIST_FILTER_NOT_REGISTERED _HRESULT_TYPEDEF_(0xc00d1075) #define NS_E_WMX_INVALID_FORMAT_OVER_NESTING _HRESULT_TYPEDEF_(0xc00d1076) #define NS_E_WMPCORE_NOSOURCEURLSTRING _HRESULT_TYPEDEF_(0xc00d107c) #define NS_E_WMPCORE_COCREATEFAILEDFORGITOBJECT _HRESULT_TYPEDEF_(0xc00d107d) #define NS_E_WMPCORE_FAILEDTOGETMARSHALLEDEVENTHANDLERINTERFACE _HRESULT_TYPEDEF_(0xc00d107e) #define NS_E_WMPCORE_BUFFERTOOSMALL _HRESULT_TYPEDEF_(0xc00d107f) #define NS_E_WMPCORE_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d1080) #define NS_E_WMPCORE_INVALIDPLAYLISTMODE _HRESULT_TYPEDEF_(0xc00d1081) #define NS_E_WMPCORE_ITEMNOTINPLAYLIST _HRESULT_TYPEDEF_(0xc00d1086) #define NS_E_WMPCORE_PLAYLISTEMPTY _HRESULT_TYPEDEF_(0xc00d1087) #define NS_E_WMPCORE_NOBROWSER _HRESULT_TYPEDEF_(0xc00d1088) #define NS_E_WMPCORE_UNRECOGNIZED_MEDIA_URL _HRESULT_TYPEDEF_(0xc00d1089) #define NS_E_WMPCORE_GRAPH_NOT_IN_LIST _HRESULT_TYPEDEF_(0xc00d108a) #define NS_E_WMPCORE_PLAYLIST_EMPTY_OR_SINGLE_MEDIA _HRESULT_TYPEDEF_(0xc00d108b) #define NS_E_WMPCORE_ERRORSINKNOTREGISTERED _HRESULT_TYPEDEF_(0xc00d108c) #define NS_E_WMPCORE_ERRORMANAGERNOTAVAILABLE _HRESULT_TYPEDEF_(0xc00d108d) #define NS_E_WMPCORE_WEBHELPFAILED _HRESULT_TYPEDEF_(0xc00d108e) #define NS_E_WMPCORE_MEDIA_ERROR_RESUME_FAILED _HRESULT_TYPEDEF_(0xc00d108f) #define NS_E_WMPCORE_NO_REF_IN_ENTRY _HRESULT_TYPEDEF_(0xc00d1090) #define NS_E_WMPCORE_WMX_LIST_ATTRIBUTE_NAME_EMPTY _HRESULT_TYPEDEF_(0xc00d1091) #define NS_E_WMPCORE_WMX_LIST_ATTRIBUTE_NAME_ILLEGAL _HRESULT_TYPEDEF_(0xc00d1092) #define NS_E_WMPCORE_WMX_LIST_ATTRIBUTE_VALUE_EMPTY _HRESULT_TYPEDEF_(0xc00d1093) #define NS_E_WMPCORE_WMX_LIST_ATTRIBUTE_VALUE_ILLEGAL _HRESULT_TYPEDEF_(0xc00d1094) #define NS_E_WMPCORE_WMX_LIST_ITEM_ATTRIBUTE_NAME_EMPTY _HRESULT_TYPEDEF_(0xc00d1095) #define NS_E_WMPCORE_WMX_LIST_ITEM_ATTRIBUTE_NAME_ILLEGAL _HRESULT_TYPEDEF_(0xc00d1096) #define NS_E_WMPCORE_WMX_LIST_ITEM_ATTRIBUTE_VALUE_EMPTY _HRESULT_TYPEDEF_(0xc00d1097) #define NS_E_WMPCORE_LIST_ENTRY_NO_REF _HRESULT_TYPEDEF_(0xc00d1098) #define NS_E_WMPCORE_MISNAMED_FILE _HRESULT_TYPEDEF_(0xc00d1099) #define NS_E_WMPCORE_CODEC_NOT_TRUSTED _HRESULT_TYPEDEF_(0xc00d109a) #define NS_E_WMPCORE_CODEC_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d109b) #define NS_E_WMPCORE_CODEC_DOWNLOAD_NOT_ALLOWED _HRESULT_TYPEDEF_(0xc00d109c) #define NS_E_WMPCORE_ERROR_DOWNLOADING_PLAYLIST _HRESULT_TYPEDEF_(0xc00d109d) #define NS_E_WMPCORE_FAILED_TO_BUILD_PLAYLIST _HRESULT_TYPEDEF_(0xc00d109e) #define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_NONE _HRESULT_TYPEDEF_(0xc00d109f) #define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_EXHAUSTED _HRESULT_TYPEDEF_(0xc00d10a0) #define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_NAME_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d10a1) #define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_MORPH_FAILED _HRESULT_TYPEDEF_(0xc00d10a2) #define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_INIT_FAILED _HRESULT_TYPEDEF_(0xc00d10a3) #define NS_E_WMPCORE_MEDIA_ALTERNATE_REF_EMPTY _HRESULT_TYPEDEF_(0xc00d10a4) #define NS_E_WMPCORE_PLAYLIST_NO_EVENT_NAME _HRESULT_TYPEDEF_(0xc00d10a5) #define NS_E_WMPCORE_PLAYLIST_EVENT_ATTRIBUTE_ABSENT _HRESULT_TYPEDEF_(0xc00d10a6) #define NS_E_WMPCORE_PLAYLIST_EVENT_EMPTY _HRESULT_TYPEDEF_(0xc00d10a7) #define NS_E_WMPCORE_PLAYLIST_STACK_EMPTY _HRESULT_TYPEDEF_(0xc00d10a8) #define NS_E_WMPCORE_CURRENT_MEDIA_NOT_ACTIVE _HRESULT_TYPEDEF_(0xc00d10a9) #define NS_E_WMPCORE_USER_CANCEL _HRESULT_TYPEDEF_(0xc00d10ab) #define NS_E_WMPCORE_PLAYLIST_REPEAT_EMPTY _HRESULT_TYPEDEF_(0xc00d10ac) #define NS_E_WMPCORE_PLAYLIST_REPEAT_START_MEDIA_NONE _HRESULT_TYPEDEF_(0xc00d10ad) #define NS_E_WMPCORE_PLAYLIST_REPEAT_END_MEDIA_NONE _HRESULT_TYPEDEF_(0xc00d10ae) #define NS_E_WMPCORE_INVALID_PLAYLIST_URL _HRESULT_TYPEDEF_(0xc00d10af) #define NS_E_WMPCORE_MISMATCHED_RUNTIME _HRESULT_TYPEDEF_(0xc00d10b0) #define NS_E_WMPCORE_PLAYLIST_IMPORT_FAILED_NO_ITEMS _HRESULT_TYPEDEF_(0xc00d10b1) #define NS_E_WMPCORE_VIDEO_TRANSFORM_FILTER_INSERTION _HRESULT_TYPEDEF_(0xc00d10b2) #define NS_E_WMPCORE_MEDIA_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d10b3) #define NS_E_WMPCORE_WMX_ENTRYREF_NO_REF _HRESULT_TYPEDEF_(0xc00d10b4) #define NS_E_WMPCORE_NO_PLAYABLE_MEDIA_IN_PLAYLIST _HRESULT_TYPEDEF_(0xc00d10b5) #define NS_E_WMPCORE_PLAYLIST_EMPTY_NESTED_PLAYLIST_SKIPPED_ITEMS _HRESULT_TYPEDEF_(0xc00d10b6) #define NS_E_WMPCORE_BUSY _HRESULT_TYPEDEF_(0xc00d10b7) #define NS_E_WMPCORE_MEDIA_CHILD_PLAYLIST_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d10b8) #define NS_E_WMPCORE_MEDIA_NO_CHILD_PLAYLIST _HRESULT_TYPEDEF_(0xc00d10b9) #define NS_E_WMPCORE_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d10ba) #define NS_E_WMPCORE_TEMP_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d10bb) #define NS_E_WMDM_REVOKED _HRESULT_TYPEDEF_(0xc00d10bc) #define NS_E_DDRAW_GENERIC _HRESULT_TYPEDEF_(0xc00d10bd) #define NS_E_DISPLAY_MODE_CHANGE_FAILED _HRESULT_TYPEDEF_(0xc00d10be) #define NS_E_PLAYLIST_CONTAINS_ERRORS _HRESULT_TYPEDEF_(0xc00d10bf) #define NS_E_CHANGING_PROXY_NAME _HRESULT_TYPEDEF_(0xc00d10c0) #define NS_E_CHANGING_PROXY_PORT _HRESULT_TYPEDEF_(0xc00d10c1) #define NS_E_CHANGING_PROXY_EXCEPTIONLIST _HRESULT_TYPEDEF_(0xc00d10c2) #define NS_E_CHANGING_PROXYBYPASS _HRESULT_TYPEDEF_(0xc00d10c3) #define NS_E_CHANGING_PROXY_PROTOCOL_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d10c4) #define NS_E_GRAPH_NOAUDIOLANGUAGE _HRESULT_TYPEDEF_(0xc00d10c5) #define NS_E_GRAPH_NOAUDIOLANGUAGESELECTED _HRESULT_TYPEDEF_(0xc00d10c6) #define NS_E_CORECD_NOTAMEDIACD _HRESULT_TYPEDEF_(0xc00d10c7) #define NS_E_WMPCORE_MEDIA_URL_TOO_LONG _HRESULT_TYPEDEF_(0xc00d10c8) #define NS_E_WMPFLASH_CANT_FIND_COM_SERVER _HRESULT_TYPEDEF_(0xc00d10c9) #define NS_E_WMPFLASH_INCOMPATIBLEVERSION _HRESULT_TYPEDEF_(0xc00d10ca) #define NS_E_WMPOCXGRAPH_IE_DISALLOWS_ACTIVEX_CONTROLS _HRESULT_TYPEDEF_(0xc00d10cb) #define NS_E_NEED_CORE_REFERENCE _HRESULT_TYPEDEF_(0xc00d10cc) #define NS_E_MEDIACD_READ_ERROR _HRESULT_TYPEDEF_(0xc00d10cd) #define NS_E_IE_DISALLOWS_ACTIVEX_CONTROLS _HRESULT_TYPEDEF_(0xc00d10ce) #define NS_E_FLASH_PLAYBACK_NOT_ALLOWED _HRESULT_TYPEDEF_(0xc00d10cf) #define NS_E_UNABLE_TO_CREATE_RIP_LOCATION _HRESULT_TYPEDEF_(0xc00d10d0) #define NS_E_WMPCORE_SOME_CODECS_MISSING _HRESULT_TYPEDEF_(0xc00d10d1) #define NS_E_WMP_RIP_FAILED _HRESULT_TYPEDEF_(0xc00d10d2) #define NS_E_WMP_FAILED_TO_RIP_TRACK _HRESULT_TYPEDEF_(0xc00d10d3) #define NS_E_WMP_ERASE_FAILED _HRESULT_TYPEDEF_(0xc00d10d4) #define NS_E_WMP_FORMAT_FAILED _HRESULT_TYPEDEF_(0xc00d10d5) #define NS_E_WMP_CANNOT_BURN_NON_LOCAL_FILE _HRESULT_TYPEDEF_(0xc00d10d6) #define NS_E_WMP_FILE_TYPE_CANNOT_BURN_TO_AUDIO_CD _HRESULT_TYPEDEF_(0xc00d10d7) #define NS_E_WMP_FILE_DOES_NOT_FIT_ON_CD _HRESULT_TYPEDEF_(0xc00d10d8) #define NS_E_WMP_FILE_NO_DURATION _HRESULT_TYPEDEF_(0xc00d10d9) #define NS_E_PDA_FAILED_TO_BURN _HRESULT_TYPEDEF_(0xc00d10da) #define NS_S_NEED_TO_BUY_BURN_RIGHTS _HRESULT_TYPEDEF_(0x000d10db) #define NS_E_FAILED_DOWNLOAD_ABORT_BURN _HRESULT_TYPEDEF_(0xc00d10dc) #define NS_E_WMPCORE_DEVICE_DRIVERS_MISSING _HRESULT_TYPEDEF_(0xc00d10dd) #define NS_S_WMPCORE_PLAYLISTCLEARABORT _HRESULT_TYPEDEF_(0x000d10fe) #define NS_S_WMPCORE_PLAYLISTREMOVEITEMABORT _HRESULT_TYPEDEF_(0x000d10ff) #define NS_S_WMPCORE_PLAYLIST_CREATION_PENDING _HRESULT_TYPEDEF_(0x000d1102) #define NS_S_WMPCORE_MEDIA_VALIDATION_PENDING _HRESULT_TYPEDEF_(0x000d1103) #define NS_S_WMPCORE_PLAYLIST_REPEAT_SECONDARY_SEGMENTS_IGNORED _HRESULT_TYPEDEF_(0x000d1104) #define NS_S_WMPCORE_COMMAND_NOT_AVAILABLE _HRESULT_TYPEDEF_(0x000d1105) #define NS_S_WMPCORE_PLAYLIST_NAME_AUTO_GENERATED _HRESULT_TYPEDEF_(0x000d1106) #define NS_S_WMPCORE_PLAYLIST_IMPORT_MISSING_ITEMS _HRESULT_TYPEDEF_(0x000d1107) #define NS_S_WMPCORE_PLAYLIST_COLLAPSED_TO_SINGLE_MEDIA _HRESULT_TYPEDEF_(0x000d1108) #define NS_S_WMPCORE_MEDIA_CHILD_PLAYLIST_OPEN_PENDING _HRESULT_TYPEDEF_(0x000d1109) #define NS_S_WMPCORE_MORE_NODES_AVAIABLE _HRESULT_TYPEDEF_(0x000d110a) #define NS_E_WMPIM_USEROFFLINE _HRESULT_TYPEDEF_(0xc00d1126) #define NS_E_WMPIM_USERCANCELED _HRESULT_TYPEDEF_(0xc00d1127) #define NS_E_WMPIM_DIALUPFAILED _HRESULT_TYPEDEF_(0xc00d1128) #define NS_E_WINSOCK_ERROR_STRING _HRESULT_TYPEDEF_(0xc00d1129) #define NS_E_WMPBR_NOLISTENER _HRESULT_TYPEDEF_(0xc00d1130) #define NS_E_WMPBR_BACKUPCANCEL _HRESULT_TYPEDEF_(0xc00d1131) #define NS_E_WMPBR_RESTORECANCEL _HRESULT_TYPEDEF_(0xc00d1132) #define NS_E_WMPBR_ERRORWITHURL _HRESULT_TYPEDEF_(0xc00d1133) #define NS_E_WMPBR_NAMECOLLISION _HRESULT_TYPEDEF_(0xc00d1134) #define NS_S_WMPBR_SUCCESS _HRESULT_TYPEDEF_(0x000d1135) #define NS_S_WMPBR_PARTIALSUCCESS _HRESULT_TYPEDEF_(0x000d1136) #define NS_E_WMPBR_DRIVE_INVALID _HRESULT_TYPEDEF_(0xc00d1137) #define NS_E_WMPBR_BACKUPRESTOREFAILED _HRESULT_TYPEDEF_(0xc00d1138) #define NS_S_WMPEFFECT_TRANSPARENT _HRESULT_TYPEDEF_(0x000d1144) #define NS_S_WMPEFFECT_OPAQUE _HRESULT_TYPEDEF_(0x000d1145) #define NS_S_OPERATION_PENDING _HRESULT_TYPEDEF_(0x000d114e) #define NS_E_WMP_CONVERT_FILE_FAILED _HRESULT_TYPEDEF_(0xc00d1158) #define NS_E_WMP_CONVERT_NO_RIGHTS_ERRORURL _HRESULT_TYPEDEF_(0xc00d1159) #define NS_E_WMP_CONVERT_NO_RIGHTS_NOERRORURL _HRESULT_TYPEDEF_(0xc00d115a) #define NS_E_WMP_CONVERT_FILE_CORRUPT _HRESULT_TYPEDEF_(0xc00d115b) #define NS_E_WMP_CONVERT_PLUGIN_UNAVAILABLE_ERRORURL _HRESULT_TYPEDEF_(0xc00d115c) #define NS_E_WMP_CONVERT_PLUGIN_UNAVAILABLE_NOERRORURL _HRESULT_TYPEDEF_(0xc00d115d) #define NS_E_WMP_CONVERT_PLUGIN_UNKNOWN_FILE_OWNER _HRESULT_TYPEDEF_(0xc00d115e) #define NS_E_DVD_DISC_COPY_PROTECT_OUTPUT_NS _HRESULT_TYPEDEF_(0xc00d1160) #define NS_E_DVD_DISC_COPY_PROTECT_OUTPUT_FAILED _HRESULT_TYPEDEF_(0xc00d1161) #define NS_E_DVD_NO_SUBPICTURE_STREAM _HRESULT_TYPEDEF_(0xc00d1162) #define NS_E_DVD_COPY_PROTECT _HRESULT_TYPEDEF_(0xc00d1163) #define NS_E_DVD_AUTHORING_PROBLEM _HRESULT_TYPEDEF_(0xc00d1164) #define NS_E_DVD_INVALID_DISC_REGION _HRESULT_TYPEDEF_(0xc00d1165) #define NS_E_DVD_COMPATIBLE_VIDEO_CARD _HRESULT_TYPEDEF_(0xc00d1166) #define NS_E_DVD_MACROVISION _HRESULT_TYPEDEF_(0xc00d1167) #define NS_E_DVD_SYSTEM_DECODER_REGION _HRESULT_TYPEDEF_(0xc00d1168) #define NS_E_DVD_DISC_DECODER_REGION _HRESULT_TYPEDEF_(0xc00d1169) #define NS_E_DVD_NO_VIDEO_STREAM _HRESULT_TYPEDEF_(0xc00d116a) #define NS_E_DVD_NO_AUDIO_STREAM _HRESULT_TYPEDEF_(0xc00d116b) #define NS_E_DVD_GRAPH_BUILDING _HRESULT_TYPEDEF_(0xc00d116c) #define NS_E_DVD_NO_DECODER _HRESULT_TYPEDEF_(0xc00d116d) #define NS_E_DVD_PARENTAL _HRESULT_TYPEDEF_(0xc00d116e) #define NS_E_DVD_CANNOT_JUMP _HRESULT_TYPEDEF_(0xc00d116f) #define NS_E_DVD_DEVICE_CONTENTION _HRESULT_TYPEDEF_(0xc00d1170) #define NS_E_DVD_NO_VIDEO_MEMORY _HRESULT_TYPEDEF_(0xc00d1171) #define NS_E_DVD_CANNOT_COPY_PROTECTED _HRESULT_TYPEDEF_(0xc00d1172) #define NS_E_DVD_REQUIRED_PROPERTY_NOT_SET _HRESULT_TYPEDEF_(0xc00d1173) #define NS_E_DVD_INVALID_TITLE_CHAPTER _HRESULT_TYPEDEF_(0xc00d1174) #define NS_E_NO_CD_BURNER _HRESULT_TYPEDEF_(0xc00d1176) #define NS_E_DEVICE_IS_NOT_READY _HRESULT_TYPEDEF_(0xc00d1177) #define NS_E_PDA_UNSUPPORTED_FORMAT _HRESULT_TYPEDEF_(0xc00d1178) #define NS_E_NO_PDA _HRESULT_TYPEDEF_(0xc00d1179) #define NS_E_PDA_UNSPECIFIED_ERROR _HRESULT_TYPEDEF_(0xc00d117a) #define NS_E_MEMSTORAGE_BAD_DATA _HRESULT_TYPEDEF_(0xc00d117b) #define NS_E_PDA_FAIL_SELECT_DEVICE _HRESULT_TYPEDEF_(0xc00d117c) #define NS_E_PDA_FAIL_READ_WAVE_FILE _HRESULT_TYPEDEF_(0xc00d117d) #define NS_E_IMAPI_LOSSOFSTREAMING _HRESULT_TYPEDEF_(0xc00d117e) #define NS_E_PDA_DEVICE_FULL _HRESULT_TYPEDEF_(0xc00d117f) #define NS_E_FAIL_LAUNCH_ROXIO_PLUGIN _HRESULT_TYPEDEF_(0xc00d1180) #define NS_E_PDA_DEVICE_FULL_IN_SESSION _HRESULT_TYPEDEF_(0xc00d1181) #define NS_E_IMAPI_MEDIUM_INVALIDTYPE _HRESULT_TYPEDEF_(0xc00d1182) #define NS_E_PDA_MANUALDEVICE _HRESULT_TYPEDEF_(0xc00d1183) #define NS_E_PDA_PARTNERSHIPNOTEXIST _HRESULT_TYPEDEF_(0xc00d1184) #define NS_E_PDA_CANNOT_CREATE_ADDITIONAL_SYNC_RELATIONSHIP _HRESULT_TYPEDEF_(0xc00d1185) #define NS_E_PDA_NO_TRANSCODE_OF_DRM _HRESULT_TYPEDEF_(0xc00d1186) #define NS_E_PDA_TRANSCODECACHEFULL _HRESULT_TYPEDEF_(0xc00d1187) #define NS_E_PDA_TOO_MANY_FILE_COLLISIONS _HRESULT_TYPEDEF_(0xc00d1188) #define NS_E_PDA_CANNOT_TRANSCODE _HRESULT_TYPEDEF_(0xc00d1189) #define NS_E_PDA_TOO_MANY_FILES_IN_DIRECTORY _HRESULT_TYPEDEF_(0xc00d118a) #define NS_E_PROCESSINGSHOWSYNCWIZARD _HRESULT_TYPEDEF_(0xc00d118b) #define NS_E_PDA_TRANSCODE_NOT_PERMITTED _HRESULT_TYPEDEF_(0xc00d118c) #define NS_E_PDA_INITIALIZINGDEVICES _HRESULT_TYPEDEF_(0xc00d118d) #define NS_E_PDA_OBSOLETE_SP _HRESULT_TYPEDEF_(0xc00d118e) #define NS_E_PDA_TITLE_COLLISION _HRESULT_TYPEDEF_(0xc00d118f) #define NS_E_PDA_DEVICESUPPORTDISABLED _HRESULT_TYPEDEF_(0xc00d1190) #define NS_E_PDA_NO_LONGER_AVAILABLE _HRESULT_TYPEDEF_(0xc00d1191) #define NS_E_PDA_ENCODER_NOT_RESPONDING _HRESULT_TYPEDEF_(0xc00d1192) #define NS_E_PDA_CANNOT_SYNC_FROM_LOCATION _HRESULT_TYPEDEF_(0xc00d1193) #define NS_E_WMP_PROTOCOL_PROBLEM _HRESULT_TYPEDEF_(0xc00d1194) #define NS_E_WMP_NO_DISK_SPACE _HRESULT_TYPEDEF_(0xc00d1195) #define NS_E_WMP_LOGON_FAILURE _HRESULT_TYPEDEF_(0xc00d1196) #define NS_E_WMP_CANNOT_FIND_FILE _HRESULT_TYPEDEF_(0xc00d1197) #define NS_E_WMP_SERVER_INACCESSIBLE _HRESULT_TYPEDEF_(0xc00d1198) #define NS_E_WMP_UNSUPPORTED_FORMAT _HRESULT_TYPEDEF_(0xc00d1199) #define NS_E_WMP_DSHOW_UNSUPPORTED_FORMAT _HRESULT_TYPEDEF_(0xc00d119a) #define NS_E_WMP_PLAYLIST_EXISTS _HRESULT_TYPEDEF_(0xc00d119b) #define NS_E_WMP_NONMEDIA_FILES _HRESULT_TYPEDEF_(0xc00d119c) #define NS_E_WMP_INVALID_ASX _HRESULT_TYPEDEF_(0xc00d119d) #define NS_E_WMP_ALREADY_IN_USE _HRESULT_TYPEDEF_(0xc00d119e) #define NS_E_WMP_IMAPI_FAILURE _HRESULT_TYPEDEF_(0xc00d119f) #define NS_E_WMP_WMDM_FAILURE _HRESULT_TYPEDEF_(0xc00d11a0) #define NS_E_WMP_CODEC_NEEDED_WITH_4CC _HRESULT_TYPEDEF_(0xc00d11a1) #define NS_E_WMP_CODEC_NEEDED_WITH_FORMATTAG _HRESULT_TYPEDEF_(0xc00d11a2) #define NS_E_WMP_MSSAP_NOT_AVAILABLE _HRESULT_TYPEDEF_(0xc00d11a3) #define NS_E_WMP_WMDM_INTERFACEDEAD _HRESULT_TYPEDEF_(0xc00d11a4) #define NS_E_WMP_WMDM_NOTCERTIFIED _HRESULT_TYPEDEF_(0xc00d11a5) #define NS_E_WMP_WMDM_LICENSE_NOTEXIST _HRESULT_TYPEDEF_(0xc00d11a6) #define NS_E_WMP_WMDM_LICENSE_EXPIRED _HRESULT_TYPEDEF_(0xc00d11a7) #define NS_E_WMP_WMDM_BUSY _HRESULT_TYPEDEF_(0xc00d11a8) #define NS_E_WMP_WMDM_NORIGHTS _HRESULT_TYPEDEF_(0xc00d11a9) #define NS_E_WMP_WMDM_INCORRECT_RIGHTS _HRESULT_TYPEDEF_(0xc00d11aa) #define NS_E_WMP_IMAPI_GENERIC _HRESULT_TYPEDEF_(0xc00d11ab) #define NS_E_WMP_IMAPI_DEVICE_NOTPRESENT _HRESULT_TYPEDEF_(0xc00d11ad) #define NS_E_WMP_IMAPI_DEVICE_BUSY _HRESULT_TYPEDEF_(0xc00d11ae) #define NS_E_WMP_IMAPI_LOSS_OF_STREAMING _HRESULT_TYPEDEF_(0xc00d11af) #define NS_E_WMP_SERVER_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d11b0) #define NS_E_WMP_FILE_OPEN_FAILED _HRESULT_TYPEDEF_(0xc00d11b1) #define NS_E_WMP_VERIFY_ONLINE _HRESULT_TYPEDEF_(0xc00d11b2) #define NS_E_WMP_SERVER_NOT_RESPONDING _HRESULT_TYPEDEF_(0xc00d11b3) #define NS_E_WMP_DRM_CORRUPT_BACKUP _HRESULT_TYPEDEF_(0xc00d11b4) #define NS_E_WMP_DRM_LICENSE_SERVER_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d11b5) #define NS_E_WMP_NETWORK_FIREWALL _HRESULT_TYPEDEF_(0xc00d11b6) #define NS_E_WMP_NO_REMOVABLE_MEDIA _HRESULT_TYPEDEF_(0xc00d11b7) #define NS_E_WMP_PROXY_CONNECT_TIMEOUT _HRESULT_TYPEDEF_(0xc00d11b8) #define NS_E_WMP_NEED_UPGRADE _HRESULT_TYPEDEF_(0xc00d11b9) #define NS_E_WMP_AUDIO_HW_PROBLEM _HRESULT_TYPEDEF_(0xc00d11ba) #define NS_E_WMP_INVALID_PROTOCOL _HRESULT_TYPEDEF_(0xc00d11bb) #define NS_E_WMP_INVALID_LIBRARY_ADD _HRESULT_TYPEDEF_(0xc00d11bc) #define NS_E_WMP_MMS_NOT_SUPPORTED _HRESULT_TYPEDEF_(0xc00d11bd) #define NS_E_WMP_NO_PROTOCOLS_SELECTED _HRESULT_TYPEDEF_(0xc00d11be) #define NS_E_WMP_GOFULLSCREEN_FAILED _HRESULT_TYPEDEF_(0xc00d11bf) #define NS_E_WMP_NETWORK_ERROR _HRESULT_TYPEDEF_(0xc00d11c0) #define NS_E_WMP_CONNECT_TIMEOUT _HRESULT_TYPEDEF_(0xc00d11c1) #define NS_E_WMP_MULTICAST_DISABLED _HRESULT_TYPEDEF_(0xc00d11c2) #define NS_E_WMP_SERVER_DNS_TIMEOUT _HRESULT_TYPEDEF_(0xc00d11c3) #define NS_E_WMP_PROXY_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d11c4) #define NS_E_WMP_TAMPERED_CONTENT _HRESULT_TYPEDEF_(0xc00d11c5) #define NS_E_WMP_OUTOFMEMORY _HRESULT_TYPEDEF_(0xc00d11c6) #define NS_E_WMP_AUDIO_CODEC_NOT_INSTALLED _HRESULT_TYPEDEF_(0xc00d11c7) #define NS_E_WMP_VIDEO_CODEC_NOT_INSTALLED _HRESULT_TYPEDEF_(0xc00d11c8) #define NS_E_WMP_IMAPI_DEVICE_INVALIDTYPE _HRESULT_TYPEDEF_(0xc00d11c9) #define NS_E_WMP_DRM_DRIVER_AUTH_FAILURE _HRESULT_TYPEDEF_(0xc00d11ca) #define NS_E_WMP_NETWORK_RESOURCE_FAILURE _HRESULT_TYPEDEF_(0xc00d11cb) #define NS_E_WMP_UPGRADE_APPLICATION _HRESULT_TYPEDEF_(0xc00d11cc) #define NS_E_WMP_UNKNOWN_ERROR _HRESULT_TYPEDEF_(0xc00d11cd) #define NS_E_WMP_INVALID_KEY _HRESULT_TYPEDEF_(0xc00d11ce) #define NS_E_WMP_CD_ANOTHER_USER _HRESULT_TYPEDEF_(0xc00d11cf) #define NS_E_WMP_DRM_NEEDS_AUTHORIZATION _HRESULT_TYPEDEF_(0xc00d11d0) #define NS_E_WMP_BAD_DRIVER _HRESULT_TYPEDEF_(0xc00d11d1) #define NS_E_WMP_ACCESS_DENIED _HRESULT_TYPEDEF_(0xc00d11d2) #define NS_E_WMP_LICENSE_RESTRICTS _HRESULT_TYPEDEF_(0xc00d11d3) #define NS_E_WMP_INVALID_REQUEST _HRESULT_TYPEDEF_(0xc00d11d4) #define NS_E_WMP_CD_STASH_NO_SPACE _HRESULT_TYPEDEF_(0xc00d11d5) #define NS_E_WMP_DRM_NEW_HARDWARE _HRESULT_TYPEDEF_(0xc00d11d6) #define NS_E_WMP_DRM_INVALID_SIG _HRESULT_TYPEDEF_(0xc00d11d7) #define NS_E_WMP_DRM_CANNOT_RESTORE _HRESULT_TYPEDEF_(0xc00d11d8) #define NS_E_WMP_BURN_DISC_OVERFLOW _HRESULT_TYPEDEF_(0xc00d11d9) #define NS_E_WMP_DRM_GENERIC_LICENSE_FAILURE _HRESULT_TYPEDEF_(0xc00d11da) #define NS_E_WMP_DRM_NO_SECURE_CLOCK _HRESULT_TYPEDEF_(0xc00d11db) #define NS_E_WMP_DRM_NO_RIGHTS _HRESULT_TYPEDEF_(0xc00d11dc) #define NS_E_WMP_DRM_INDIV_FAILED _HRESULT_TYPEDEF_(0xc00d11dd) #define NS_E_WMP_SERVER_NONEWCONNECTIONS _HRESULT_TYPEDEF_(0xc00d11de) #define NS_E_WMP_MULTIPLE_ERROR_IN_PLAYLIST _HRESULT_TYPEDEF_(0xc00d11df) #define NS_E_WMP_IMAPI2_ERASE_FAIL _HRESULT_TYPEDEF_(0xc00d11e0) #define NS_E_WMP_IMAPI2_ERASE_DEVICE_BUSY _HRESULT_TYPEDEF_(0xc00d11e1) #define NS_E_WMP_DRM_COMPONENT_FAILURE _HRESULT_TYPEDEF_(0xc00d11e2) #define NS_E_WMP_DRM_NO_DEVICE_CERT _HRESULT_TYPEDEF_(0xc00d11e3) #define NS_E_WMP_SERVER_SECURITY_ERROR _HRESULT_TYPEDEF_(0xc00d11e4) #define NS_E_WMP_AUDIO_DEVICE_LOST _HRESULT_TYPEDEF_(0xc00d11e5) #define NS_E_WMP_IMAPI_MEDIA_INCOMPATIBLE _HRESULT_TYPEDEF_(0xc00d11e6) #define NS_E_SYNCWIZ_DEVICE_FULL _HRESULT_TYPEDEF_(0xc00d11ee) #define NS_E_SYNCWIZ_CANNOT_CHANGE_SETTINGS _HRESULT_TYPEDEF_(0xc00d11ef) #define NS_E_TRANSCODE_DELETECACHEERROR _HRESULT_TYPEDEF_(0xc00d11f0) #define NS_E_CD_NO_BUFFERS_READ _HRESULT_TYPEDEF_(0xc00d11f8) #define NS_E_CD_EMPTY_TRACK_QUEUE _HRESULT_TYPEDEF_(0xc00d11f9) #define NS_E_CD_NO_READER _HRESULT_TYPEDEF_(0xc00d11fa) #define NS_E_CD_ISRC_INVALID _HRESULT_TYPEDEF_(0xc00d11fb) #define NS_E_CD_MEDIA_CATALOG_NUMBER_INVALID _HRESULT_TYPEDEF_(0xc00d11fc) #define NS_E_SLOW_READ_DIGITAL_WITH_ERRORCORRECTION _HRESULT_TYPEDEF_(0xc00d11fd) #define NS_E_CD_SPEEDDETECT_NOT_ENOUGH_READS _HRESULT_TYPEDEF_(0xc00d11fe) #define NS_E_CD_QUEUEING_DISABLED _HRESULT_TYPEDEF_(0xc00d11ff) #define NS_E_WMP_DRM_ACQUIRING_LICENSE _HRESULT_TYPEDEF_(0xc00d1202) #define NS_E_WMP_DRM_LICENSE_EXPIRED _HRESULT_TYPEDEF_(0xc00d1203) #define NS_E_WMP_DRM_LICENSE_NOTACQUIRED _HRESULT_TYPEDEF_(0xc00d1204) #define NS_E_WMP_DRM_LICENSE_NOTENABLED _HRESULT_TYPEDEF_(0xc00d1205) #define NS_E_WMP_DRM_LICENSE_UNUSABLE _HRESULT_TYPEDEF_(0xc00d1206) #define NS_E_WMP_DRM_LICENSE_CONTENT_REVOKED _HRESULT_TYPEDEF_(0xc00d1207) #define NS_E_WMP_DRM_LICENSE_NOSAP _HRESULT_TYPEDEF_(0xc00d1208) #define NS_E_WMP_DRM_UNABLE_TO_ACQUIRE_LICENSE _HRESULT_TYPEDEF_(0xc00d1209) #define NS_E_WMP_LICENSE_REQUIRED _HRESULT_TYPEDEF_(0xc00d120a) #define NS_E_WMP_PROTECTED_CONTENT _HRESULT_TYPEDEF_(0xc00d120b) #define NS_E_WMP_POLICY_VALUE_NOT_CONFIGURED _HRESULT_TYPEDEF_(0xc00d122a) #define NS_E_PDA_CANNOT_SYNC_FROM_INTERNET _HRESULT_TYPEDEF_(0xc00d1234) #define NS_E_PDA_CANNOT_SYNC_INVALID_PLAYLIST _HRESULT_TYPEDEF_(0xc00d1235) #define NS_E_PDA_FAILED_TO_SYNCHRONIZE_FILE _HRESULT_TYPEDEF_(0xc00d1236) #define NS_E_PDA_SYNC_FAILED _HRESULT_TYPEDEF_(0xc00d1237) #define NS_E_PDA_DELETE_FAILED _HRESULT_TYPEDEF_(0xc00d1238) #define NS_E_PDA_FAILED_TO_RETRIEVE_FILE _HRESULT_TYPEDEF_(0xc00d1239) #define NS_E_PDA_DEVICE_NOT_RESPONDING _HRESULT_TYPEDEF_(0xc00d123a) #define NS_E_PDA_FAILED_TO_TRANSCODE_PHOTO _HRESULT_TYPEDEF_(0xc00d123b) #define NS_E_PDA_FAILED_TO_ENCRYPT_TRANSCODED_FILE _HRESULT_TYPEDEF_(0xc00d123c) #define NS_E_PDA_CANNOT_TRANSCODE_TO_AUDIO _HRESULT_TYPEDEF_(0xc00d123d) #define NS_E_PDA_CANNOT_TRANSCODE_TO_VIDEO _HRESULT_TYPEDEF_(0xc00d123e) #define NS_E_PDA_CANNOT_TRANSCODE_TO_IMAGE _HRESULT_TYPEDEF_(0xc00d123f) #define NS_E_PDA_RETRIEVED_FILE_FILENAME_TOO_LONG _HRESULT_TYPEDEF_(0xc00d1240) #define NS_E_PDA_CEWMDM_DRM_ERROR _HRESULT_TYPEDEF_(0xc00d1241) #define NS_E_INCOMPLETE_PLAYLIST _HRESULT_TYPEDEF_(0xc00d1242) #define NS_E_PDA_SYNC_RUNNING _HRESULT_TYPEDEF_(0xc00d1243) #define NS_E_PDA_SYNC_LOGIN_ERROR _HRESULT_TYPEDEF_(0xc00d1244) #define NS_E_PDA_TRANSCODE_CODEC_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d1245) #define NS_E_CANNOT_SYNC_DRM_TO_NON_JANUS_DEVICE _HRESULT_TYPEDEF_(0xc00d1246) #define NS_E_CANNOT_SYNC_PREVIOUS_SYNC_RUNNING _HRESULT_TYPEDEF_(0xc00d1247) #define NS_E_WMP_HWND_NOTFOUND _HRESULT_TYPEDEF_(0xc00d125c) #define NS_E_BKGDOWNLOAD_WRONG_NO_FILES _HRESULT_TYPEDEF_(0xc00d125d) #define NS_E_BKGDOWNLOAD_COMPLETECANCELLEDJOB _HRESULT_TYPEDEF_(0xc00d125e) #define NS_E_BKGDOWNLOAD_CANCELCOMPLETEDJOB _HRESULT_TYPEDEF_(0xc00d125f) #define NS_E_BKGDOWNLOAD_NOJOBPOINTER _HRESULT_TYPEDEF_(0xc00d1260) #define NS_E_BKGDOWNLOAD_INVALIDJOBSIGNATURE _HRESULT_TYPEDEF_(0xc00d1261) #define NS_E_BKGDOWNLOAD_FAILED_TO_CREATE_TEMPFILE _HRESULT_TYPEDEF_(0xc00d1262) #define NS_E_BKGDOWNLOAD_PLUGIN_FAILEDINITIALIZE _HRESULT_TYPEDEF_(0xc00d1263) #define NS_E_BKGDOWNLOAD_PLUGIN_FAILEDTOMOVEFILE _HRESULT_TYPEDEF_(0xc00d1264) #define NS_E_BKGDOWNLOAD_CALLFUNCFAILED _HRESULT_TYPEDEF_(0xc00d1265) #define NS_E_BKGDOWNLOAD_CALLFUNCTIMEOUT _HRESULT_TYPEDEF_(0xc00d1266) #define NS_E_BKGDOWNLOAD_CALLFUNCENDED _HRESULT_TYPEDEF_(0xc00d1267) #define NS_E_BKGDOWNLOAD_WMDUNPACKFAILED _HRESULT_TYPEDEF_(0xc00d1268) #define NS_E_BKGDOWNLOAD_FAILEDINITIALIZE _HRESULT_TYPEDEF_(0xc00d1269) #define NS_E_INTERFACE_NOT_REGISTERED_IN_GIT _HRESULT_TYPEDEF_(0xc00d126a) #define NS_E_BKGDOWNLOAD_INVALID_FILE_NAME _HRESULT_TYPEDEF_(0xc00d126b) #define NS_E_IMAGE_DOWNLOAD_FAILED _HRESULT_TYPEDEF_(0xc00d128e) #define NS_E_WMP_UDRM_NOUSERLIST _HRESULT_TYPEDEF_(0xc00d12c0) #define NS_E_WMP_DRM_NOT_ACQUIRING _HRESULT_TYPEDEF_(0xc00d12c1) #define NS_E_WMP_BSTR_TOO_LONG _HRESULT_TYPEDEF_(0xc00d12f2) #define NS_E_WMP_AUTOPLAY_INVALID_STATE _HRESULT_TYPEDEF_(0xc00d12fc) #define NS_E_WMP_COMPONENT_REVOKED _HRESULT_TYPEDEF_(0xc00d1306) #define NS_E_CURL_NOTSAFE _HRESULT_TYPEDEF_(0xc00d1324) #define NS_E_CURL_INVALIDCHAR _HRESULT_TYPEDEF_(0xc00d1325) #define NS_E_CURL_INVALIDHOSTNAME _HRESULT_TYPEDEF_(0xc00d1326) #define NS_E_CURL_INVALIDPATH _HRESULT_TYPEDEF_(0xc00d1327) #define NS_E_CURL_INVALIDSCHEME _HRESULT_TYPEDEF_(0xc00d1328) #define NS_E_CURL_INVALIDURL _HRESULT_TYPEDEF_(0xc00d1329) #define NS_E_CURL_CANTWALK _HRESULT_TYPEDEF_(0xc00d132b) #define NS_E_CURL_INVALIDPORT _HRESULT_TYPEDEF_(0xc00d132c) #define NS_E_CURLHELPER_NOTADIRECTORY _HRESULT_TYPEDEF_(0xc00d132d) #define NS_E_CURLHELPER_NOTAFILE _HRESULT_TYPEDEF_(0xc00d132e) #define NS_E_CURL_CANTDECODE _HRESULT_TYPEDEF_(0xc00d132f) #define NS_E_CURLHELPER_NOTRELATIVE _HRESULT_TYPEDEF_(0xc00d1330) #define NS_E_CURL_INVALIDBUFFERSIZE _HRESULT_TYPEDEF_(0xc00d1331) #define NS_E_SUBSCRIPTIONSERVICE_PLAYBACK_DISALLOWED _HRESULT_TYPEDEF_(0xc00d1356) #define NS_E_CANNOT_BUY_OR_DOWNLOAD_FROM_MULTIPLE_SERVICES _HRESULT_TYPEDEF_(0xc00d1357) #define NS_E_CANNOT_BUY_OR_DOWNLOAD_CONTENT _HRESULT_TYPEDEF_(0xc00d1358) #define NS_S_TRACK_BUY_REQUIRES_ALBUM_PURCHASE _HRESULT_TYPEDEF_(0x000d1359) #define NS_E_NOT_CONTENT_PARTNER_TRACK _HRESULT_TYPEDEF_(0xc00d135a) #define NS_E_TRACK_DOWNLOAD_REQUIRES_ALBUM_PURCHASE _HRESULT_TYPEDEF_(0xc00d135b) #define NS_E_TRACK_DOWNLOAD_REQUIRES_PURCHASE _HRESULT_TYPEDEF_(0xc00d135c) #define NS_E_TRACK_PURCHASE_MAXIMUM_EXCEEDED _HRESULT_TYPEDEF_(0xc00d135d) #define NS_S_NAVIGATION_COMPLETE_WITH_ERRORS _HRESULT_TYPEDEF_(0x000d135e) #define NS_E_SUBSCRIPTIONSERVICE_LOGIN_FAILED _HRESULT_TYPEDEF_(0xc00d135f) #define NS_E_SUBSCRIPTIONSERVICE_DOWNLOAD_TIMEOUT _HRESULT_TYPEDEF_(0xc00d1360) #define NS_S_TRACK_ALREADY_DOWNLOADED _HRESULT_TYPEDEF_(0x000d1361) #define NS_E_CONTENT_PARTNER_STILL_INITIALIZING _HRESULT_TYPEDEF_(0xc00d1362) #define NS_E_OPEN_CONTAINING_FOLDER_FAILED _HRESULT_TYPEDEF_(0xc00d1363) #define NS_E_ADVANCEDEDIT_TOO_MANY_PICTURES _HRESULT_TYPEDEF_(0xc00d136a) /* Windows Media Server errors */ #define NS_E_REDIRECT _HRESULT_TYPEDEF_(0xc00d1388) #define NS_E_STALE_PRESENTATION _HRESULT_TYPEDEF_(0xc00d1389) #define NS_E_NAMESPACE_WRONG_PERSIST _HRESULT_TYPEDEF_(0xc00d138a) #define NS_E_NAMESPACE_WRONG_TYPE _HRESULT_TYPEDEF_(0xc00d138b) #define NS_E_NAMESPACE_NODE_CONFLICT _HRESULT_TYPEDEF_(0xc00d138c) #define NS_E_NAMESPACE_NODE_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d138d) #define NS_E_NAMESPACE_BUFFER_TOO_SMALL _HRESULT_TYPEDEF_(0xc00d138e) #define NS_E_NAMESPACE_TOO_MANY_CALLBACKS _HRESULT_TYPEDEF_(0xc00d138f) #define NS_E_NAMESPACE_DUPLICATE_CALLBACK _HRESULT_TYPEDEF_(0xc00d1390) #define NS_E_NAMESPACE_CALLBACK_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d1391) #define NS_E_NAMESPACE_NAME_TOO_LONG _HRESULT_TYPEDEF_(0xc00d1392) #define NS_E_NAMESPACE_DUPLICATE_NAME _HRESULT_TYPEDEF_(0xc00d1393) #define NS_E_NAMESPACE_EMPTY_NAME _HRESULT_TYPEDEF_(0xc00d1394) #define NS_E_NAMESPACE_INDEX_TOO_LARGE _HRESULT_TYPEDEF_(0xc00d1395) #define NS_E_NAMESPACE_BAD_NAME _HRESULT_TYPEDEF_(0xc00d1396) #define NS_E_NAMESPACE_WRONG_SECURITY _HRESULT_TYPEDEF_(0xc00d1397) #define NS_E_CACHE_ARCHIVE_CONFLICT _HRESULT_TYPEDEF_(0xc00d13ec) #define NS_E_CACHE_ORIGIN_SERVER_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d13ed) #define NS_E_CACHE_ORIGIN_SERVER_TIMEOUT _HRESULT_TYPEDEF_(0xc00d13ee) #define NS_E_CACHE_NOT_BROADCAST _HRESULT_TYPEDEF_(0xc00d13ef) #define NS_E_CACHE_CANNOT_BE_CACHED _HRESULT_TYPEDEF_(0xc00d13f0) #define NS_E_CACHE_NOT_MODIFIED _HRESULT_TYPEDEF_(0xc00d13f1) #define NS_E_CANNOT_REMOVE_PUBLISHING_POINT _HRESULT_TYPEDEF_(0xc00d1450) #define NS_E_CANNOT_REMOVE_PLUGIN _HRESULT_TYPEDEF_(0xc00d1451) #define NS_E_WRONG_PUBLISHING_POINT_TYPE _HRESULT_TYPEDEF_(0xc00d1452) #define NS_E_UNSUPPORTED_LOAD_TYPE _HRESULT_TYPEDEF_(0xc00d1453) #define NS_E_INVALID_PLUGIN_LOAD_TYPE_CONFIGURATION _HRESULT_TYPEDEF_(0xc00d1454) #define NS_E_INVALID_PUBLISHING_POINT_NAME _HRESULT_TYPEDEF_(0xc00d1455) #define NS_E_TOO_MANY_MULTICAST_SINKS _HRESULT_TYPEDEF_(0xc00d1456) #define NS_E_PUBLISHING_POINT_INVALID_REQUEST_WHILE_STARTED _HRESULT_TYPEDEF_(0xc00d1457) #define NS_E_MULTICAST_PLUGIN_NOT_ENABLED _HRESULT_TYPEDEF_(0xc00d1458) #define NS_E_INVALID_OPERATING_SYSTEM_VERSION _HRESULT_TYPEDEF_(0xc00d1459) #define NS_E_PUBLISHING_POINT_REMOVED _HRESULT_TYPEDEF_(0xc00d145a) #define NS_E_INVALID_PUSH_PUBLISHING_POINT_START_REQUEST _HRESULT_TYPEDEF_(0xc00d145b) #define NS_E_UNSUPPORTED_LANGUAGE _HRESULT_TYPEDEF_(0xc00d145c) #define NS_E_WRONG_OS_VERSION _HRESULT_TYPEDEF_(0xc00d145d) #define NS_E_PUBLISHING_POINT_STOPPED _HRESULT_TYPEDEF_(0xc00d145e) #define NS_E_PLAYLIST_ENTRY_ALREADY_PLAYING _HRESULT_TYPEDEF_(0xc00d14b4) #define NS_E_EMPTY_PLAYLIST _HRESULT_TYPEDEF_(0xc00d14b5) #define NS_E_PLAYLIST_PARSE_FAILURE _HRESULT_TYPEDEF_(0xc00d14b6) #define NS_E_PLAYLIST_UNSUPPORTED_ENTRY _HRESULT_TYPEDEF_(0xc00d14b7) #define NS_E_PLAYLIST_ENTRY_NOT_IN_PLAYLIST _HRESULT_TYPEDEF_(0xc00d14b8) #define NS_E_PLAYLIST_ENTRY_SEEK _HRESULT_TYPEDEF_(0xc00d14b9) #define NS_E_PLAYLIST_RECURSIVE_PLAYLISTS _HRESULT_TYPEDEF_(0xc00d14ba) #define NS_E_PLAYLIST_TOO_MANY_NESTED_PLAYLISTS _HRESULT_TYPEDEF_(0xc00d14bb) #define NS_E_PLAYLIST_SHUTDOWN _HRESULT_TYPEDEF_(0xc00d14bc) #define NS_E_PLAYLIST_END_RECEDING _HRESULT_TYPEDEF_(0xc00d14bd) #define NS_I_PLAYLIST_CHANGE_RECEDING _HRESULT_TYPEDEF_(0x400d14be) #define NS_E_DATAPATH_NO_SINK _HRESULT_TYPEDEF_(0xc00d1518) #define NS_S_PUBLISHING_POINT_STARTED_WITH_FAILED_SINKS _HRESULT_TYPEDEF_(0x000d1519) #define NS_E_INVALID_PUSH_TEMPLATE _HRESULT_TYPEDEF_(0xc00d151a) #define NS_E_INVALID_PUSH_PUBLISHING_POINT _HRESULT_TYPEDEF_(0xc00d151b) #define NS_E_CRITICAL_ERROR _HRESULT_TYPEDEF_(0xc00d151c) #define NS_E_NO_NEW_CONNECTIONS _HRESULT_TYPEDEF_(0xc00d151d) #define NS_E_WSX_INVALID_VERSION _HRESULT_TYPEDEF_(0xc00d151e) #define NS_E_HEADER_MISMATCH _HRESULT_TYPEDEF_(0xc00d151f) #define NS_E_PUSH_DUPLICATE_PUBLISHING_POINT_NAME _HRESULT_TYPEDEF_(0xc00d1520) #define NS_E_NO_SCRIPT_ENGINE _HRESULT_TYPEDEF_(0xc00d157c) #define NS_E_PLUGIN_ERROR_REPORTED _HRESULT_TYPEDEF_(0xc00d157d) #define NS_E_SOURCE_PLUGIN_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d157e) #define NS_E_PLAYLIST_PLUGIN_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d157f) #define NS_E_DATA_SOURCE_ENUMERATION_NOT_SUPPORTED _HRESULT_TYPEDEF_(0xc00d1580) #define NS_E_MEDIA_PARSER_INVALID_FORMAT _HRESULT_TYPEDEF_(0xc00d1581) #define NS_E_SCRIPT_DEBUGGER_NOT_INSTALLED _HRESULT_TYPEDEF_(0xc00d1582) #define NS_E_FEATURE_REQUIRES_ENTERPRISE_SERVER _HRESULT_TYPEDEF_(0xc00d1583) #define NS_E_WIZARD_RUNNING _HRESULT_TYPEDEF_(0xc00d1584) #define NS_E_INVALID_LOG_URL _HRESULT_TYPEDEF_(0xc00d1585) #define NS_E_INVALID_MTU_RANGE _HRESULT_TYPEDEF_(0xc00d1586) #define NS_E_INVALID_PLAY_STATISTICS _HRESULT_TYPEDEF_(0xc00d1587) #define NS_E_LOG_NEED_TO_BE_SKIPPED _HRESULT_TYPEDEF_(0xc00d1588) #define NS_E_HTTP_TEXT_DATACONTAINER_SIZE_LIMIT_EXCEEDED _HRESULT_TYPEDEF_(0xc00d1589) #define NS_E_PORT_IN_USE _HRESULT_TYPEDEF_(0xc00d158a) #define NS_E_PORT_IN_USE_HTTP _HRESULT_TYPEDEF_(0xc00d158b) #define NS_E_HTTP_TEXT_DATACONTAINER_INVALID_SERVER_RESPONSE _HRESULT_TYPEDEF_(0xc00d158c) #define NS_E_ARCHIVE_REACH_QUOTA _HRESULT_TYPEDEF_(0xc00d158d) #define NS_E_ARCHIVE_ABORT_DUE_TO_BCAST _HRESULT_TYPEDEF_(0xc00d158e) #define NS_E_ARCHIVE_GAP_DETECTED _HRESULT_TYPEDEF_(0xc00d158f) #define NS_E_AUTHORIZATION_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d1590) /* Windows Media Tools errors */ #define NS_E_BAD_MARKIN _HRESULT_TYPEDEF_(0xc00d1b58) #define NS_E_BAD_MARKOUT _HRESULT_TYPEDEF_(0xc00d1b59) #define NS_E_NOMATCHING_MEDIASOURCE _HRESULT_TYPEDEF_(0xc00d1b5a) #define NS_E_UNSUPPORTED_SOURCETYPE _HRESULT_TYPEDEF_(0xc00d1b5b) #define NS_E_TOO_MANY_AUDIO _HRESULT_TYPEDEF_(0xc00d1b5c) #define NS_E_TOO_MANY_VIDEO _HRESULT_TYPEDEF_(0xc00d1b5d) #define NS_E_NOMATCHING_ELEMENT _HRESULT_TYPEDEF_(0xc00d1b5e) #define NS_E_MISMATCHED_MEDIACONTENT _HRESULT_TYPEDEF_(0xc00d1b5f) #define NS_E_CANNOT_DELETE_ACTIVE_SOURCEGROUP _HRESULT_TYPEDEF_(0xc00d1b60) #define NS_E_AUDIODEVICE_BUSY _HRESULT_TYPEDEF_(0xc00d1b61) #define NS_E_AUDIODEVICE_UNEXPECTED _HRESULT_TYPEDEF_(0xc00d1b62) #define NS_E_AUDIODEVICE_BADFORMAT _HRESULT_TYPEDEF_(0xc00d1b63) #define NS_E_VIDEODEVICE_BUSY _HRESULT_TYPEDEF_(0xc00d1b64) #define NS_E_VIDEODEVICE_UNEXPECTED _HRESULT_TYPEDEF_(0xc00d1b65) #define NS_E_INVALIDCALL_WHILE_ENCODER_RUNNING _HRESULT_TYPEDEF_(0xc00d1b66) #define NS_E_NO_PROFILE_IN_SOURCEGROUP _HRESULT_TYPEDEF_(0xc00d1b67) #define NS_E_VIDEODRIVER_UNSTABLE _HRESULT_TYPEDEF_(0xc00d1b68) #define NS_E_VIDCAPSTARTFAILED _HRESULT_TYPEDEF_(0xc00d1b69) #define NS_E_VIDSOURCECOMPRESSION _HRESULT_TYPEDEF_(0xc00d1b6a) #define NS_E_VIDSOURCESIZE _HRESULT_TYPEDEF_(0xc00d1b6b) #define NS_E_ICMQUERYFORMAT _HRESULT_TYPEDEF_(0xc00d1b6c) #define NS_E_VIDCAPCREATEWINDOW _HRESULT_TYPEDEF_(0xc00d1b6d) #define NS_E_VIDCAPDRVINUSE _HRESULT_TYPEDEF_(0xc00d1b6e) #define NS_E_NO_MEDIAFORMAT_IN_SOURCE _HRESULT_TYPEDEF_(0xc00d1b6f) #define NS_E_NO_VALID_OUTPUT_STREAM _HRESULT_TYPEDEF_(0xc00d1b70) #define NS_E_NO_VALID_SOURCE_PLUGIN _HRESULT_TYPEDEF_(0xc00d1b71) #define NS_E_NO_ACTIVE_SOURCEGROUP _HRESULT_TYPEDEF_(0xc00d1b72) #define NS_E_NO_SCRIPT_STREAM _HRESULT_TYPEDEF_(0xc00d1b73) #define NS_E_INVALIDCALL_WHILE_ARCHIVAL_RUNNING _HRESULT_TYPEDEF_(0xc00d1b74) #define NS_E_INVALIDPACKETSIZE _HRESULT_TYPEDEF_(0xc00d1b75) #define NS_E_PLUGIN_CLSID_INVALID _HRESULT_TYPEDEF_(0xc00d1b76) #define NS_E_UNSUPPORTED_ARCHIVETYPE _HRESULT_TYPEDEF_(0xc00d1b77) #define NS_E_UNSUPPORTED_ARCHIVEOPERATION _HRESULT_TYPEDEF_(0xc00d1b78) #define NS_E_ARCHIVE_FILENAME_NOTSET _HRESULT_TYPEDEF_(0xc00d1b79) #define NS_E_SOURCEGROUP_NOTPREPARED _HRESULT_TYPEDEF_(0xc00d1b7a) #define NS_E_PROFILE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1b7b) #define NS_E_INCORRECTCLIPSETTINGS _HRESULT_TYPEDEF_(0xc00d1b7c) #define NS_E_NOSTATSAVAILABLE _HRESULT_TYPEDEF_(0xc00d1b7d) #define NS_E_NOTARCHIVING _HRESULT_TYPEDEF_(0xc00d1b7e) #define NS_E_INVALIDCALL_WHILE_ENCODER_STOPPED _HRESULT_TYPEDEF_(0xc00d1b7f) #define NS_E_NOSOURCEGROUPS _HRESULT_TYPEDEF_(0xc00d1b80) #define NS_E_INVALIDINPUTFPS _HRESULT_TYPEDEF_(0xc00d1b81) #define NS_E_NO_DATAVIEW_SUPPORT _HRESULT_TYPEDEF_(0xc00d1b82) #define NS_E_CODEC_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d1b83) #define NS_E_ARCHIVE_SAME_AS_INPUT _HRESULT_TYPEDEF_(0xc00d1b84) #define NS_E_SOURCE_NOTSPECIFIED _HRESULT_TYPEDEF_(0xc00d1b85) #define NS_E_NO_REALTIME_TIMECOMPRESSION _HRESULT_TYPEDEF_(0xc00d1b86) #define NS_E_UNSUPPORTED_ENCODER_DEVICE _HRESULT_TYPEDEF_(0xc00d1b87) #define NS_E_UNEXPECTED_DISPLAY_SETTINGS _HRESULT_TYPEDEF_(0xc00d1b88) #define NS_E_NO_AUDIODATA _HRESULT_TYPEDEF_(0xc00d1b89) #define NS_E_INPUTSOURCE_PROBLEM _HRESULT_TYPEDEF_(0xc00d1b8a) #define NS_E_WME_VERSION_MISMATCH _HRESULT_TYPEDEF_(0xc00d1b8b) #define NS_E_NO_REALTIME_PREPROCESS _HRESULT_TYPEDEF_(0xc00d1b8c) #define NS_E_NO_REPEAT_PREPROCESS _HRESULT_TYPEDEF_(0xc00d1b8d) #define NS_E_CANNOT_PAUSE_LIVEBROADCAST _HRESULT_TYPEDEF_(0xc00d1b8e) #define NS_E_DRM_PROFILE_NOT_SET _HRESULT_TYPEDEF_(0xc00d1b8f) #define NS_E_DUPLICATE_DRMPROFILE _HRESULT_TYPEDEF_(0xc00d1b90) #define NS_E_INVALID_DEVICE _HRESULT_TYPEDEF_(0xc00d1b91) #define NS_E_SPEECHEDL_ON_NON_MIXEDMODE _HRESULT_TYPEDEF_(0xc00d1b92) #define NS_E_DRM_PASSWORD_TOO_LONG _HRESULT_TYPEDEF_(0xc00d1b93) #define NS_E_DEVCONTROL_FAILED_SEEK _HRESULT_TYPEDEF_(0xc00d1b94) #define NS_E_INTERLACE_REQUIRE_SAMESIZE _HRESULT_TYPEDEF_(0xc00d1b95) #define NS_E_TOO_MANY_DEVICECONTROL _HRESULT_TYPEDEF_(0xc00d1b96) #define NS_E_NO_MULTIPASS_FOR_LIVEDEVICE _HRESULT_TYPEDEF_(0xc00d1b97) #define NS_E_MISSING_AUDIENCE _HRESULT_TYPEDEF_(0xc00d1b98) #define NS_E_AUDIENCE_CONTENTTYPE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1b99) #define NS_E_MISSING_SOURCE_INDEX _HRESULT_TYPEDEF_(0xc00d1b9a) #define NS_E_NUM_LANGUAGE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1b9b) #define NS_E_LANGUAGE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1b9c) #define NS_E_VBRMODE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1b9d) #define NS_E_INVALID_INPUT_AUDIENCE_INDEX _HRESULT_TYPEDEF_(0xc00d1b9e) #define NS_E_INVALID_INPUT_LANGUAGE _HRESULT_TYPEDEF_(0xc00d1b9f) #define NS_E_INVALID_INPUT_STREAM _HRESULT_TYPEDEF_(0xc00d1ba0) #define NS_E_EXPECT_MONO_WAV_INPUT _HRESULT_TYPEDEF_(0xc00d1ba1) #define NS_E_INPUT_WAVFORMAT_MISMATCH _HRESULT_TYPEDEF_(0xc00d1ba2) #define NS_E_RECORDQ_DISK_FULL _HRESULT_TYPEDEF_(0xc00d1ba3) #define NS_E_NO_PAL_INVERSE_TELECINE _HRESULT_TYPEDEF_(0xc00d1ba4) #define NS_E_ACTIVE_SG_DEVICE_DISCONNECTED _HRESULT_TYPEDEF_(0xc00d1ba5) #define NS_E_ACTIVE_SG_DEVICE_CONTROL_DISCONNECTED _HRESULT_TYPEDEF_(0xc00d1ba6) #define NS_E_NO_FRAMES_SUBMITTED_TO_ANALYZER _HRESULT_TYPEDEF_(0xc00d1ba7) #define NS_E_INPUT_DOESNOT_SUPPORT_SMPTE _HRESULT_TYPEDEF_(0xc00d1ba8) #define NS_E_NO_SMPTE_WITH_MULTIPLE_SOURCEGROUPS _HRESULT_TYPEDEF_(0xc00d1ba9) #define NS_E_BAD_CONTENTEDL _HRESULT_TYPEDEF_(0xc00d1baa) #define NS_E_INTERLACEMODE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1bab) #define NS_E_NONSQUAREPIXELMODE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1bac) #define NS_E_SMPTEMODE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1bad) #define NS_E_END_OF_TAPE _HRESULT_TYPEDEF_(0xc00d1bae) #define NS_E_NO_MEDIA_IN_AUDIENCE _HRESULT_TYPEDEF_(0xc00d1baf) #define NS_E_NO_AUDIENCES _HRESULT_TYPEDEF_(0xc00d1bb0) #define NS_E_NO_AUDIO_COMPAT _HRESULT_TYPEDEF_(0xc00d1bb1) #define NS_E_INVALID_VBR_COMPAT _HRESULT_TYPEDEF_(0xc00d1bb2) #define NS_E_NO_PROFILE_NAME _HRESULT_TYPEDEF_(0xc00d1bb3) #define NS_E_INVALID_VBR_WITH_UNCOMP _HRESULT_TYPEDEF_(0xc00d1bb4) #define NS_E_MULTIPLE_VBR_AUDIENCES _HRESULT_TYPEDEF_(0xc00d1bb5) #define NS_E_UNCOMP_COMP_COMBINATION _HRESULT_TYPEDEF_(0xc00d1bb6) #define NS_E_MULTIPLE_AUDIO_CODECS _HRESULT_TYPEDEF_(0xc00d1bb7) #define NS_E_MULTIPLE_AUDIO_FORMATS _HRESULT_TYPEDEF_(0xc00d1bb8) #define NS_E_AUDIO_BITRATE_STEPDOWN _HRESULT_TYPEDEF_(0xc00d1bb9) #define NS_E_INVALID_AUDIO_PEAKRATE _HRESULT_TYPEDEF_(0xc00d1bba) #define NS_E_INVALID_AUDIO_PEAKRATE_2 _HRESULT_TYPEDEF_(0xc00d1bbb) #define NS_E_INVALID_AUDIO_BUFFERMAX _HRESULT_TYPEDEF_(0xc00d1bbc) #define NS_E_MULTIPLE_VIDEO_CODECS _HRESULT_TYPEDEF_(0xc00d1bbd) #define NS_E_MULTIPLE_VIDEO_SIZES _HRESULT_TYPEDEF_(0xc00d1bbe) #define NS_E_INVALID_VIDEO_BITRATE _HRESULT_TYPEDEF_(0xc00d1bbf) #define NS_E_VIDEO_BITRATE_STEPDOWN _HRESULT_TYPEDEF_(0xc00d1bc0) #define NS_E_INVALID_VIDEO_PEAKRATE _HRESULT_TYPEDEF_(0xc00d1bc1) #define NS_E_INVALID_VIDEO_PEAKRATE_2 _HRESULT_TYPEDEF_(0xc00d1bc2) #define NS_E_INVALID_VIDEO_WIDTH _HRESULT_TYPEDEF_(0xc00d1bc3) #define NS_E_INVALID_VIDEO_HEIGHT _HRESULT_TYPEDEF_(0xc00d1bc4) #define NS_E_INVALID_VIDEO_FPS _HRESULT_TYPEDEF_(0xc00d1bc5) #define NS_E_INVALID_VIDEO_KEYFRAME _HRESULT_TYPEDEF_(0xc00d1bc6) #define NS_E_INVALID_VIDEO_IQUALITY _HRESULT_TYPEDEF_(0xc00d1bc7) #define NS_E_INVALID_VIDEO_CQUALITY _HRESULT_TYPEDEF_(0xc00d1bc8) #define NS_E_INVALID_VIDEO_BUFFER _HRESULT_TYPEDEF_(0xc00d1bc9) #define NS_E_INVALID_VIDEO_BUFFERMAX _HRESULT_TYPEDEF_(0xc00d1bca) #define NS_E_INVALID_VIDEO_BUFFERMAX_2 _HRESULT_TYPEDEF_(0xc00d1bcb) #define NS_E_INVALID_VIDEO_WIDTH_ALIGN _HRESULT_TYPEDEF_(0xc00d1bcc) #define NS_E_INVALID_VIDEO_HEIGHT_ALIGN _HRESULT_TYPEDEF_(0xc00d1bcd) #define NS_E_MULTIPLE_SCRIPT_BITRATES _HRESULT_TYPEDEF_(0xc00d1bce) #define NS_E_INVALID_SCRIPT_BITRATE _HRESULT_TYPEDEF_(0xc00d1bcf) #define NS_E_MULTIPLE_FILE_BITRATES _HRESULT_TYPEDEF_(0xc00d1bd0) #define NS_E_INVALID_FILE_BITRATE _HRESULT_TYPEDEF_(0xc00d1bd1) #define NS_E_SAME_AS_INPUT_COMBINATION _HRESULT_TYPEDEF_(0xc00d1bd2) #define NS_E_SOURCE_CANNOT_LOOP _HRESULT_TYPEDEF_(0xc00d1bd3) #define NS_E_INVALID_FOLDDOWN_COEFFICIENTS _HRESULT_TYPEDEF_(0xc00d1bd4) #define NS_E_DRMPROFILE_NOTFOUND _HRESULT_TYPEDEF_(0xc00d1bd5) #define NS_E_INVALID_TIMECODE _HRESULT_TYPEDEF_(0xc00d1bd6) #define NS_E_NO_AUDIO_TIMECOMPRESSION _HRESULT_TYPEDEF_(0xc00d1bd7) #define NS_E_NO_TWOPASS_TIMECOMPRESSION _HRESULT_TYPEDEF_(0xc00d1bd8) #define NS_E_TIMECODE_REQUIRES_VIDEOSTREAM _HRESULT_TYPEDEF_(0xc00d1bd9) #define NS_E_NO_MBR_WITH_TIMECODE _HRESULT_TYPEDEF_(0xc00d1bda) #define NS_E_INVALID_INTERLACEMODE _HRESULT_TYPEDEF_(0xc00d1bdb) #define NS_E_INVALID_INTERLACE_COMPAT _HRESULT_TYPEDEF_(0xc00d1bdc) #define NS_E_INVALID_NONSQUAREPIXEL_COMPAT _HRESULT_TYPEDEF_(0xc00d1bdd) #define NS_E_INVALID_SOURCE_WITH_DEVICE_CONTROL _HRESULT_TYPEDEF_(0xc00d1bde) #define NS_E_CANNOT_GENERATE_BROADCAST_INFO_FOR_QUALITYVBR _HRESULT_TYPEDEF_(0xc00d1bdf) #define NS_E_EXCEED_MAX_DRM_PROFILE_LIMIT _HRESULT_TYPEDEF_(0xc00d1be0) #define NS_E_DEVICECONTROL_UNSTABLE _HRESULT_TYPEDEF_(0xc00d1be1) #define NS_E_INVALID_PIXEL_ASPECT_RATIO _HRESULT_TYPEDEF_(0xc00d1be2) #define NS_E_AUDIENCE__LANGUAGE_CONTENTTYPE_MISMATCH _HRESULT_TYPEDEF_(0xc00d1be3) #define NS_E_INVALID_PROFILE_CONTENTTYPE _HRESULT_TYPEDEF_(0xc00d1be4) #define NS_E_TRANSFORM_PLUGIN_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d1be5) #define NS_E_TRANSFORM_PLUGIN_INVALID _HRESULT_TYPEDEF_(0xc00d1be6) #define NS_E_EDL_REQUIRED_FOR_DEVICE_MULTIPASS _HRESULT_TYPEDEF_(0xc00d1be7) #define NS_E_INVALID_VIDEO_WIDTH_FOR_INTERLACED_ENCODING _HRESULT_TYPEDEF_(0xc00d1be8) #define NS_E_MARKIN_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d1be9) /* DRM errors */ #define NS_E_DRM_INVALID_APPLICATION _HRESULT_TYPEDEF_(0xc00d2711) #define NS_E_DRM_LICENSE_STORE_ERROR _HRESULT_TYPEDEF_(0xc00d2712) #define NS_E_DRM_SECURE_STORE_ERROR _HRESULT_TYPEDEF_(0xc00d2713) #define NS_E_DRM_LICENSE_STORE_SAVE_ERROR _HRESULT_TYPEDEF_(0xc00d2714) #define NS_E_DRM_SECURE_STORE_UNLOCK_ERROR _HRESULT_TYPEDEF_(0xc00d2715) #define NS_E_DRM_INVALID_CONTENT _HRESULT_TYPEDEF_(0xc00d2716) #define NS_E_DRM_UNABLE_TO_OPEN_LICENSE _HRESULT_TYPEDEF_(0xc00d2717) #define NS_E_DRM_INVALID_LICENSE _HRESULT_TYPEDEF_(0xc00d2718) #define NS_E_DRM_INVALID_MACHINE _HRESULT_TYPEDEF_(0xc00d2719) #define NS_E_DRM_ENUM_LICENSE_FAILED _HRESULT_TYPEDEF_(0xc00d271b) #define NS_E_DRM_INVALID_LICENSE_REQUEST _HRESULT_TYPEDEF_(0xc00d271c) #define NS_E_DRM_UNABLE_TO_INITIALIZE _HRESULT_TYPEDEF_(0xc00d271d) #define NS_E_DRM_UNABLE_TO_ACQUIRE_LICENSE _HRESULT_TYPEDEF_(0xc00d271e) #define NS_E_DRM_INVALID_LICENSE_ACQUIRED _HRESULT_TYPEDEF_(0xc00d271f) #define NS_E_DRM_NO_RIGHTS _HRESULT_TYPEDEF_(0xc00d2720) #define NS_E_DRM_KEY_ERROR _HRESULT_TYPEDEF_(0xc00d2721) #define NS_E_DRM_ENCRYPT_ERROR _HRESULT_TYPEDEF_(0xc00d2722) #define NS_E_DRM_DECRYPT_ERROR _HRESULT_TYPEDEF_(0xc00d2723) #define NS_E_DRM_LICENSE_INVALID_XML _HRESULT_TYPEDEF_(0xc00d2725) #define NS_S_DRM_LICENSE_ACQUIRED _HRESULT_TYPEDEF_(0x000d2726) #define NS_S_DRM_INDIVIDUALIZED _HRESULT_TYPEDEF_(0x000d2727) #define NS_E_DRM_NEEDS_INDIVIDUALIZATION _HRESULT_TYPEDEF_(0xc00d2728) #define NS_E_DRM_ALREADY_INDIVIDUALIZED _HRESULT_TYPEDEF_(0xc00d2729) #define NS_E_DRM_ACTION_NOT_QUERIED _HRESULT_TYPEDEF_(0xc00d272a) #define NS_E_DRM_ACQUIRING_LICENSE _HRESULT_TYPEDEF_(0xc00d272b) #define NS_E_DRM_INDIVIDUALIZING _HRESULT_TYPEDEF_(0xc00d272c) #define NS_E_BACKUP_RESTORE_FAILURE _HRESULT_TYPEDEF_(0xc00d272d) #define NS_E_BACKUP_RESTORE_BAD_REQUEST_ID _HRESULT_TYPEDEF_(0xc00d272e) #define NS_E_DRM_PARAMETERS_MISMATCHED _HRESULT_TYPEDEF_(0xc00d272f) #define NS_E_DRM_UNABLE_TO_CREATE_LICENSE_OBJECT _HRESULT_TYPEDEF_(0xc00d2730) #define NS_E_DRM_UNABLE_TO_CREATE_INDI_OBJECT _HRESULT_TYPEDEF_(0xc00d2731) #define NS_E_DRM_UNABLE_TO_CREATE_ENCRYPT_OBJECT _HRESULT_TYPEDEF_(0xc00d2732) #define NS_E_DRM_UNABLE_TO_CREATE_DECRYPT_OBJECT _HRESULT_TYPEDEF_(0xc00d2733) #define NS_E_DRM_UNABLE_TO_CREATE_PROPERTIES_OBJECT _HRESULT_TYPEDEF_(0xc00d2734) #define NS_E_DRM_UNABLE_TO_CREATE_BACKUP_OBJECT _HRESULT_TYPEDEF_(0xc00d2735) #define NS_E_DRM_INDIVIDUALIZE_ERROR _HRESULT_TYPEDEF_(0xc00d2736) #define NS_E_DRM_LICENSE_OPEN_ERROR _HRESULT_TYPEDEF_(0xc00d2737) #define NS_E_DRM_LICENSE_CLOSE_ERROR _HRESULT_TYPEDEF_(0xc00d2738) #define NS_E_DRM_GET_LICENSE_ERROR _HRESULT_TYPEDEF_(0xc00d2739) #define NS_E_DRM_QUERY_ERROR _HRESULT_TYPEDEF_(0xc00d273a) #define NS_E_DRM_REPORT_ERROR _HRESULT_TYPEDEF_(0xc00d273b) #define NS_E_DRM_GET_LICENSESTRING_ERROR _HRESULT_TYPEDEF_(0xc00d273c) #define NS_E_DRM_GET_CONTENTSTRING_ERROR _HRESULT_TYPEDEF_(0xc00d273d) #define NS_E_DRM_MONITOR_ERROR _HRESULT_TYPEDEF_(0xc00d273e) #define NS_E_DRM_UNABLE_TO_SET_PARAMETER _HRESULT_TYPEDEF_(0xc00d273f) #define NS_E_DRM_INVALID_APPDATA _HRESULT_TYPEDEF_(0xc00d2740) #define NS_E_DRM_INVALID_APPDATA_VERSION _HRESULT_TYPEDEF_(0xc00d2741) #define NS_E_DRM_BACKUP_EXISTS _HRESULT_TYPEDEF_(0xc00d2742) #define NS_E_DRM_BACKUP_CORRUPT _HRESULT_TYPEDEF_(0xc00d2743) #define NS_E_DRM_BACKUPRESTORE_BUSY _HRESULT_TYPEDEF_(0xc00d2744) #define NS_E_BACKUP_RESTORE_BAD_DATA _HRESULT_TYPEDEF_(0xc00d2745) #define NS_S_DRM_MONITOR_CANCELLED _HRESULT_TYPEDEF_(0x000d2746) #define NS_S_DRM_ACQUIRE_CANCELLED _HRESULT_TYPEDEF_(0x000d2747) #define NS_E_DRM_LICENSE_UNUSABLE _HRESULT_TYPEDEF_(0xc00d2748) #define NS_E_DRM_INVALID_PROPERTY _HRESULT_TYPEDEF_(0xc00d2749) #define NS_E_DRM_SECURE_STORE_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d274a) #define NS_E_DRM_CACHED_CONTENT_ERROR _HRESULT_TYPEDEF_(0xc00d274b) #define NS_E_DRM_INDIVIDUALIZATION_INCOMPLETE _HRESULT_TYPEDEF_(0xc00d274c) #define NS_E_DRM_DRIVER_AUTH_FAILURE _HRESULT_TYPEDEF_(0xc00d274d) #define NS_E_DRM_NEED_UPGRADE_MSSAP _HRESULT_TYPEDEF_(0xc00d274e) #define NS_E_DRM_REOPEN_CONTENT _HRESULT_TYPEDEF_(0xc00d274f) #define NS_E_DRM_DRIVER_DIGIOUT_FAILURE _HRESULT_TYPEDEF_(0xc00d2750) #define NS_E_DRM_INVALID_SECURESTORE_PASSWORD _HRESULT_TYPEDEF_(0xc00d2751) #define NS_E_DRM_APPCERT_REVOKED _HRESULT_TYPEDEF_(0xc00d2752) #define NS_E_DRM_RESTORE_FRAUD _HRESULT_TYPEDEF_(0xc00d2753) #define NS_E_DRM_HARDWARE_INCONSISTENT _HRESULT_TYPEDEF_(0xc00d2754) #define NS_E_DRM_SDMI_TRIGGER _HRESULT_TYPEDEF_(0xc00d2755) #define NS_E_DRM_SDMI_NOMORECOPIES _HRESULT_TYPEDEF_(0xc00d2756) #define NS_E_DRM_UNABLE_TO_CREATE_HEADER_OBJECT _HRESULT_TYPEDEF_(0xc00d2757) #define NS_E_DRM_UNABLE_TO_CREATE_KEYS_OBJECT _HRESULT_TYPEDEF_(0xc00d2758) #define NS_E_DRM_LICENSE_NOTACQUIRED _HRESULT_TYPEDEF_(0xc00d2759) #define NS_E_DRM_UNABLE_TO_CREATE_CODING_OBJECT _HRESULT_TYPEDEF_(0xc00d275a) #define NS_E_DRM_UNABLE_TO_CREATE_STATE_DATA_OBJECT _HRESULT_TYPEDEF_(0xc00d275b) #define NS_E_DRM_BUFFER_TOO_SMALL _HRESULT_TYPEDEF_(0xc00d275c) #define NS_E_DRM_UNSUPPORTED_PROPERTY _HRESULT_TYPEDEF_(0xc00d275d) #define NS_E_DRM_ERROR_BAD_NET_RESP _HRESULT_TYPEDEF_(0xc00d275e) #define NS_E_DRM_STORE_NOTALLSTORED _HRESULT_TYPEDEF_(0xc00d275f) #define NS_E_DRM_SECURITY_COMPONENT_SIGNATURE_INVALID _HRESULT_TYPEDEF_(0xc00d2760) #define NS_E_DRM_INVALID_DATA _HRESULT_TYPEDEF_(0xc00d2761) #define NS_E_DRM_POLICY_DISABLE_ONLINE _HRESULT_TYPEDEF_(0xc00d2762) #define NS_E_DRM_UNABLE_TO_CREATE_AUTHENTICATION_OBJECT _HRESULT_TYPEDEF_(0xc00d2763) #define NS_E_DRM_NOT_CONFIGURED _HRESULT_TYPEDEF_(0xc00d2764) #define NS_E_DRM_DEVICE_ACTIVATION_CANCELED _HRESULT_TYPEDEF_(0xc00d2765) #define NS_E_BACKUP_RESTORE_TOO_MANY_RESETS _HRESULT_TYPEDEF_(0xc00d2766) #define NS_E_DRM_DEBUGGING_NOT_ALLOWED _HRESULT_TYPEDEF_(0xc00d2767) #define NS_E_DRM_OPERATION_CANCELED _HRESULT_TYPEDEF_(0xc00d2768) #define NS_E_DRM_RESTRICTIONS_NOT_RETRIEVED _HRESULT_TYPEDEF_(0xc00d2769) #define NS_E_DRM_UNABLE_TO_CREATE_PLAYLIST_OBJECT _HRESULT_TYPEDEF_(0xc00d276a) #define NS_E_DRM_UNABLE_TO_CREATE_PLAYLIST_BURN_OBJECT _HRESULT_TYPEDEF_(0xc00d276b) #define NS_E_DRM_UNABLE_TO_CREATE_DEVICE_REGISTRATION_OBJECT _HRESULT_TYPEDEF_(0xc00d276c) #define NS_E_DRM_UNABLE_TO_CREATE_METERING_OBJECT _HRESULT_TYPEDEF_(0xc00d276d) #define NS_S_DRM_BURNABLE_TRACK _HRESULT_TYPEDEF_(0x000d276e) #define NS_S_DRM_BURNABLE_TRACK_WITH_PLAYLIST_RESTRICTION _HRESULT_TYPEDEF_(0x000d276f) #define NS_E_DRM_TRACK_EXCEEDED_PLAYLIST_RESTICTION _HRESULT_TYPEDEF_(0xc00d2770) #define NS_E_DRM_TRACK_EXCEEDED_TRACKBURN_RESTRICTION _HRESULT_TYPEDEF_(0xc00d2771) #define NS_E_DRM_UNABLE_TO_GET_DEVICE_CERT _HRESULT_TYPEDEF_(0xc00d2772) #define NS_E_DRM_UNABLE_TO_GET_SECURE_CLOCK _HRESULT_TYPEDEF_(0xc00d2773) #define NS_E_DRM_UNABLE_TO_SET_SECURE_CLOCK _HRESULT_TYPEDEF_(0xc00d2774) #define NS_E_DRM_UNABLE_TO_GET_SECURE_CLOCK_FROM_SERVER _HRESULT_TYPEDEF_(0xc00d2775) #define NS_E_DRM_POLICY_METERING_DISABLED _HRESULT_TYPEDEF_(0xc00d2776) #define NS_E_DRM_TRANSFER_CHAINED_LICENSES_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d2777) #define NS_E_DRM_SDK_VERSIONMISMATCH _HRESULT_TYPEDEF_(0xc00d2778) #define NS_E_DRM_LIC_NEEDS_DEVICE_CLOCK_SET _HRESULT_TYPEDEF_(0xc00d2779) #define NS_E_LICENSE_HEADER_MISSING_URL _HRESULT_TYPEDEF_(0xc00d277a) #define NS_E_DEVICE_NOT_WMDRM_DEVICE _HRESULT_TYPEDEF_(0xc00d277b) #define NS_E_DRM_INVALID_APPCERT _HRESULT_TYPEDEF_(0xc00d277c) #define NS_E_DRM_PROTOCOL_FORCEFUL_TERMINATION_ON_PETITION _HRESULT_TYPEDEF_(0xc00d277d) #define NS_E_DRM_PROTOCOL_FORCEFUL_TERMINATION_ON_CHALLENGE _HRESULT_TYPEDEF_(0xc00d277e) #define NS_E_DRM_CHECKPOINT_FAILED _HRESULT_TYPEDEF_(0xc00d277f) #define NS_E_DRM_BB_UNABLE_TO_INITIALIZE _HRESULT_TYPEDEF_(0xc00d2780) #define NS_E_DRM_UNABLE_TO_LOAD_HARDWARE_ID _HRESULT_TYPEDEF_(0xc00d2781) #define NS_E_DRM_UNABLE_TO_OPEN_DATA_STORE _HRESULT_TYPEDEF_(0xc00d2782) #define NS_E_DRM_DATASTORE_CORRUPT _HRESULT_TYPEDEF_(0xc00d2783) #define NS_E_DRM_UNABLE_TO_CREATE_INMEMORYSTORE_OBJECT _HRESULT_TYPEDEF_(0xc00d2784) #define NS_E_DRM_STUBLIB_REQUIRED _HRESULT_TYPEDEF_(0xc00d2785) #define NS_E_DRM_UNABLE_TO_CREATE_CERTIFICATE_OBJECT _HRESULT_TYPEDEF_(0xc00d2786) #define NS_E_DRM_MIGRATION_TARGET_NOT_ONLINE _HRESULT_TYPEDEF_(0xc00d2787) #define NS_E_DRM_INVALID_MIGRATION_IMAGE _HRESULT_TYPEDEF_(0xc00d2788) #define NS_E_DRM_MIGRATION_TARGET_STATES_CORRUPTED _HRESULT_TYPEDEF_(0xc00d2789) #define NS_E_DRM_MIGRATION_IMPORTER_NOT_AVAILABLE _HRESULT_TYPEDEF_(0xc00d278a) #define NS_DRM_E_MIGRATION_UPGRADE_WITH_DIFF_SID _HRESULT_TYPEDEF_(0xc00d278b) #define NS_DRM_E_MIGRATION_SOURCE_MACHINE_IN_USE _HRESULT_TYPEDEF_(0xc00d278c) #define NS_DRM_E_MIGRATION_TARGET_MACHINE_LESS_THAN_LH _HRESULT_TYPEDEF_(0xc00d278d) #define NS_DRM_E_MIGRATION_IMAGE_ALREADY_EXISTS _HRESULT_TYPEDEF_(0xc00d278e) #define NS_E_DRM_HARDWAREID_MISMATCH _HRESULT_TYPEDEF_(0xc00d278f) #define NS_E_INVALID_DRMV2CLT_STUBLIB _HRESULT_TYPEDEF_(0xc00d2790) #define NS_E_DRM_MIGRATION_INVALID_LEGACYV2_DATA _HRESULT_TYPEDEF_(0xc00d2791) #define NS_E_DRM_MIGRATION_LICENSE_ALREADY_EXISTS _HRESULT_TYPEDEF_(0xc00d2792) #define NS_E_DRM_MIGRATION_INVALID_LEGACYV2_SST_PASSWORD _HRESULT_TYPEDEF_(0xc00d2793) #define NS_E_DRM_MIGRATION_NOT_SUPPORTED _HRESULT_TYPEDEF_(0xc00d2794) #define NS_E_DRM_UNABLE_TO_CREATE_MIGRATION_IMPORTER_OBJECT _HRESULT_TYPEDEF_(0xc00d2795) #define NS_E_DRM_CHECKPOINT_MISMATCH _HRESULT_TYPEDEF_(0xc00d2796) #define NS_E_DRM_CHECKPOINT_CORRUPT _HRESULT_TYPEDEF_(0xc00d2797) #define NS_E_REG_FLUSH_FAILURE _HRESULT_TYPEDEF_(0xc00d2798) #define NS_E_HDS_KEY_MISMATCH _HRESULT_TYPEDEF_(0xc00d2799) #define NS_E_DRM_MIGRATION_OPERATION_CANCELLED _HRESULT_TYPEDEF_(0xc00d279a) #define NS_E_DRM_MIGRATION_OBJECT_IN_USE _HRESULT_TYPEDEF_(0xc00d279b) #define NS_E_DRM_MALFORMED_CONTENT_HEADER _HRESULT_TYPEDEF_(0xc00d279c) #define NS_E_DRM_LICENSE_EXPIRED _HRESULT_TYPEDEF_(0xc00d27d8) #define NS_E_DRM_LICENSE_NOTENABLED _HRESULT_TYPEDEF_(0xc00d27d9) #define NS_E_DRM_LICENSE_APPSECLOW _HRESULT_TYPEDEF_(0xc00d27da) #define NS_E_DRM_STORE_NEEDINDI _HRESULT_TYPEDEF_(0xc00d27db) #define NS_E_DRM_STORE_NOTALLOWED _HRESULT_TYPEDEF_(0xc00d27dc) #define NS_E_DRM_LICENSE_APP_NOTALLOWED _HRESULT_TYPEDEF_(0xc00d27dd) #define NS_S_DRM_NEEDS_INDIVIDUALIZATION _HRESULT_TYPEDEF_(0x000d27de) #define NS_E_DRM_LICENSE_CERT_EXPIRED _HRESULT_TYPEDEF_(0xc00d27df) #define NS_E_DRM_LICENSE_SECLOW _HRESULT_TYPEDEF_(0xc00d27e0) #define NS_E_DRM_LICENSE_CONTENT_REVOKED _HRESULT_TYPEDEF_(0xc00d27e1) #define NS_E_DRM_DEVICE_NOT_REGISTERED _HRESULT_TYPEDEF_(0xc00d27e2) #define NS_E_DRM_LICENSE_NOSAP _HRESULT_TYPEDEF_(0xc00d280a) #define NS_E_DRM_LICENSE_NOSVP _HRESULT_TYPEDEF_(0xc00d280b) #define NS_E_DRM_LICENSE_NOWDM _HRESULT_TYPEDEF_(0xc00d280c) #define NS_E_DRM_LICENSE_NOTRUSTEDCODEC _HRESULT_TYPEDEF_(0xc00d280d) #define NS_E_DRM_SOURCEID_NOT_SUPPORTED _HRESULT_TYPEDEF_(0xc00d280e) #define NS_E_DRM_NEEDS_UPGRADE_TEMPFILE _HRESULT_TYPEDEF_(0xc00d283d) #define NS_E_DRM_NEED_UPGRADE_PD _HRESULT_TYPEDEF_(0xc00d283e) #define NS_E_DRM_SIGNATURE_FAILURE _HRESULT_TYPEDEF_(0xc00d283f) #define NS_E_DRM_LICENSE_SERVER_INFO_MISSING _HRESULT_TYPEDEF_(0xc00d2840) #define NS_E_DRM_BUSY _HRESULT_TYPEDEF_(0xc00d2841) #define NS_E_DRM_PD_TOO_MANY_DEVICES _HRESULT_TYPEDEF_(0xc00d2842) #define NS_E_DRM_INDIV_FRAUD _HRESULT_TYPEDEF_(0xc00d2843) #define NS_E_DRM_INDIV_NO_CABS _HRESULT_TYPEDEF_(0xc00d2844) #define NS_E_DRM_INDIV_SERVICE_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d2845) #define NS_E_DRM_RESTORE_SERVICE_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d2846) #define NS_E_DRM_CLIENT_CODE_EXPIRED _HRESULT_TYPEDEF_(0xc00d2847) #define NS_E_DRM_NO_UPLINK_LICENSE _HRESULT_TYPEDEF_(0xc00d2848) #define NS_E_DRM_INVALID_KID _HRESULT_TYPEDEF_(0xc00d2849) #define NS_E_DRM_LICENSE_INITIALIZATION_ERROR _HRESULT_TYPEDEF_(0xc00d284a) #define NS_E_DRM_CHAIN_TOO_LONG _HRESULT_TYPEDEF_(0xc00d284c) #define NS_E_DRM_UNSUPPORTED_ALGORITHM _HRESULT_TYPEDEF_(0xc00d284d) #define NS_E_DRM_LICENSE_DELETION_ERROR _HRESULT_TYPEDEF_(0xc00d284e) #define NS_E_DRM_INVALID_CERTIFICATE _HRESULT_TYPEDEF_(0xc00d28a0) #define NS_E_DRM_CERTIFICATE_REVOKED _HRESULT_TYPEDEF_(0xc00d28a1) #define NS_E_DRM_LICENSE_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d28a2) #define NS_E_DRM_DEVICE_LIMIT_REACHED _HRESULT_TYPEDEF_(0xc00d28a3) #define NS_E_DRM_UNABLE_TO_VERIFY_PROXIMITY _HRESULT_TYPEDEF_(0xc00d28a4) #define NS_E_DRM_MUST_REGISTER _HRESULT_TYPEDEF_(0xc00d28a5) #define NS_E_DRM_MUST_APPROVE _HRESULT_TYPEDEF_(0xc00d28a6) #define NS_E_DRM_MUST_REVALIDATE _HRESULT_TYPEDEF_(0xc00d28a7) #define NS_E_DRM_INVALID_PROXIMITY_RESPONSE _HRESULT_TYPEDEF_(0xc00d28a8) #define NS_E_DRM_INVALID_SESSION _HRESULT_TYPEDEF_(0xc00d28a9) #define NS_E_DRM_DEVICE_NOT_OPEN _HRESULT_TYPEDEF_(0xc00d28aa) #define NS_E_DRM_DEVICE_ALREADY_REGISTERED _HRESULT_TYPEDEF_(0xc00d28ab) #define NS_E_DRM_UNSUPPORTED_PROTOCOL_VERSION _HRESULT_TYPEDEF_(0xc00d28ac) #define NS_E_DRM_UNSUPPORTED_ACTION _HRESULT_TYPEDEF_(0xc00d28ad) #define NS_E_DRM_CERTIFICATE_SECURITY_LEVEL_INADEQUATE _HRESULT_TYPEDEF_(0xc00d28ae) #define NS_E_DRM_UNABLE_TO_OPEN_PORT _HRESULT_TYPEDEF_(0xc00d28af) #define NS_E_DRM_BAD_REQUEST _HRESULT_TYPEDEF_(0xc00d28b0) #define NS_E_DRM_INVALID_CRL _HRESULT_TYPEDEF_(0xc00d28b1) #define NS_E_DRM_ATTRIBUTE_TOO_LONG _HRESULT_TYPEDEF_(0xc00d28b2) #define NS_E_DRM_EXPIRED_LICENSEBLOB _HRESULT_TYPEDEF_(0xc00d28b3) #define NS_E_DRM_INVALID_LICENSEBLOB _HRESULT_TYPEDEF_(0xc00d28b4) #define NS_E_DRM_INCLUSION_LIST_REQUIRED _HRESULT_TYPEDEF_(0xc00d28b5) #define NS_E_DRM_DRMV2CLT_REVOKED _HRESULT_TYPEDEF_(0xc00d28b6) #define NS_E_DRM_RIV_TOO_SMALL _HRESULT_TYPEDEF_(0xc00d28b7) #define NS_E_OUTPUT_PROTECTION_LEVEL_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d2904) #define NS_E_COMPRESSED_DIGITAL_VIDEO_PROTECTION_LEVEL_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d2905) #define NS_E_UNCOMPRESSED_DIGITAL_VIDEO_PROTECTION_LEVEL_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d2906) #define NS_E_ANALOG_VIDEO_PROTECTION_LEVEL_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d2907) #define NS_E_COMPRESSED_DIGITAL_AUDIO_PROTECTION_LEVEL_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d2908) #define NS_E_UNCOMPRESSED_DIGITAL_AUDIO_PROTECTION_LEVEL_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d2909) #define NS_E_OUTPUT_PROTECTION_SCHEME_UNSUPPORTED _HRESULT_TYPEDEF_(0xc00d290a) /* Setup errors */ #define NS_S_REBOOT_RECOMMENDED _HRESULT_TYPEDEF_(0x000d2af8) #define NS_S_REBOOT_REQUIRED _HRESULT_TYPEDEF_(0x000d2af9) #define NS_E_REBOOT_RECOMMENDED _HRESULT_TYPEDEF_(0xc00d2afa) #define NS_E_REBOOT_REQUIRED _HRESULT_TYPEDEF_(0xc00d2afb) #define NS_E_SETUP_INCOMPLETE _HRESULT_TYPEDEF_(0xc00d2afc) #define NS_E_SETUP_DRM_MIGRATION_FAILED _HRESULT_TYPEDEF_(0xc00d2afd) #define NS_E_SETUP_IGNORABLE_FAILURE _HRESULT_TYPEDEF_(0xc00d2afe) #define NS_E_SETUP_DRM_MIGRATION_FAILED_AND_IGNORABLE_FAILURE _HRESULT_TYPEDEF_(0xc00d2aff) #define NS_E_SETUP_BLOCKED _HRESULT_TYPEDEF_(0xc00d2b00) /* Networking errors */ #define NS_E_UNKNOWN_PROTOCOL _HRESULT_TYPEDEF_(0xc00d2ee0) #define NS_E_REDIRECT_TO_PROXY _HRESULT_TYPEDEF_(0xc00d2ee1) #define NS_E_INTERNAL_SERVER_ERROR _HRESULT_TYPEDEF_(0xc00d2ee2) #define NS_E_BAD_REQUEST _HRESULT_TYPEDEF_(0xc00d2ee3) #define NS_E_ERROR_FROM_PROXY _HRESULT_TYPEDEF_(0xc00d2ee4) #define NS_E_PROXY_TIMEOUT _HRESULT_TYPEDEF_(0xc00d2ee5) #define NS_E_SERVER_UNAVAILABLE _HRESULT_TYPEDEF_(0xc00d2ee6) #define NS_E_REFUSED_BY_SERVER _HRESULT_TYPEDEF_(0xc00d2ee7) #define NS_E_INCOMPATIBLE_SERVER _HRESULT_TYPEDEF_(0xc00d2ee8) #define NS_E_MULTICAST_DISABLED _HRESULT_TYPEDEF_(0xc00d2ee9) #define NS_E_INVALID_REDIRECT _HRESULT_TYPEDEF_(0xc00d2eea) #define NS_E_ALL_PROTOCOLS_DISABLED _HRESULT_TYPEDEF_(0xc00d2eeb) #define NS_E_MSBD_NO_LONGER_SUPPORTED _HRESULT_TYPEDEF_(0xc00d2eec) #define NS_E_PROXY_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d2eed) #define NS_E_CANNOT_CONNECT_TO_PROXY _HRESULT_TYPEDEF_(0xc00d2eee) #define NS_E_SERVER_DNS_TIMEOUT _HRESULT_TYPEDEF_(0xc00d2eef) #define NS_E_PROXY_DNS_TIMEOUT _HRESULT_TYPEDEF_(0xc00d2ef0) #define NS_E_CLOSED_ON_SUSPEND _HRESULT_TYPEDEF_(0xc00d2ef1) #define NS_E_CANNOT_READ_PLAYLIST_FROM_MEDIASERVER _HRESULT_TYPEDEF_(0xc00d2ef2) #define NS_E_SESSION_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d2ef3) #define NS_E_REQUIRE_STREAMING_CLIENT _HRESULT_TYPEDEF_(0xc00d2ef4) #define NS_E_PLAYLIST_ENTRY_HAS_CHANGED _HRESULT_TYPEDEF_(0xc00d2ef5) #define NS_E_PROXY_ACCESSDENIED _HRESULT_TYPEDEF_(0xc00d2ef6) #define NS_E_PROXY_SOURCE_ACCESSDENIED _HRESULT_TYPEDEF_(0xc00d2ef7) #define NS_E_NETWORK_SINK_WRITE _HRESULT_TYPEDEF_(0xc00d2ef8) #define NS_E_FIREWALL _HRESULT_TYPEDEF_(0xc00d2ef9) #define NS_E_MMS_NOT_SUPPORTED _HRESULT_TYPEDEF_(0xc00d2efa) #define NS_E_SERVER_ACCESSDENIED _HRESULT_TYPEDEF_(0xc00d2efb) #define NS_E_RESOURCE_GONE _HRESULT_TYPEDEF_(0xc00d2efc) #define NS_E_NO_EXISTING_PACKETIZER _HRESULT_TYPEDEF_(0xc00d2efd) #define NS_E_BAD_SYNTAX_IN_SERVER_RESPONSE _HRESULT_TYPEDEF_(0xc00d2efe) #define NS_I_RECONNECTED _HRESULT_TYPEDEF_(0x400d2eff) #define NS_E_RESET_SOCKET_CONNECTION _HRESULT_TYPEDEF_(0xc00d2f00) #define NS_I_NOLOG_STOP _HRESULT_TYPEDEF_(0x400d2f01) #define NS_E_TOO_MANY_HOPS _HRESULT_TYPEDEF_(0xc00d2f02) #define NS_I_EXISTING_PACKETIZER _HRESULT_TYPEDEF_(0x400d2f03) #define NS_I_MANUAL_PROXY _HRESULT_TYPEDEF_(0x400d2f04) #define NS_E_TOO_MUCH_DATA_FROM_SERVER _HRESULT_TYPEDEF_(0xc00d2f05) #define NS_E_CONNECT_TIMEOUT _HRESULT_TYPEDEF_(0xc00d2f06) #define NS_E_PROXY_CONNECT_TIMEOUT _HRESULT_TYPEDEF_(0xc00d2f07) #define NS_E_SESSION_INVALID _HRESULT_TYPEDEF_(0xc00d2f08) #define NS_S_EOSRECEDING _HRESULT_TYPEDEF_(0x000d2f09) #define NS_E_PACKETSINK_UNKNOWN_FEC_STREAM _HRESULT_TYPEDEF_(0xc00d2f0a) #define NS_E_PUSH_CANNOTCONNECT _HRESULT_TYPEDEF_(0xc00d2f0b) #define NS_E_INCOMPATIBLE_PUSH_SERVER _HRESULT_TYPEDEF_(0xc00d2f0c) #define NS_S_CHANGENOTICE _HRESULT_TYPEDEF_(0x000d2f0d) /* Client media service errors */ #define NS_E_END_OF_PLAYLIST _HRESULT_TYPEDEF_(0xc00d32c8) #define NS_E_USE_FILE_SOURCE _HRESULT_TYPEDEF_(0xc00d32c9) #define NS_E_PROPERTY_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d32ca) #define NS_E_PROPERTY_READ_ONLY _HRESULT_TYPEDEF_(0xc00d32cc) #define NS_E_TABLE_KEY_NOT_FOUND _HRESULT_TYPEDEF_(0xc00d32cd) #define NS_E_INVALID_QUERY_OPERATOR _HRESULT_TYPEDEF_(0xc00d32cf) #define NS_E_INVALID_QUERY_PROPERTY _HRESULT_TYPEDEF_(0xc00d32d0) #define NS_E_PROPERTY_NOT_SUPPORTED _HRESULT_TYPEDEF_(0xc00d32d2) #define NS_E_SCHEMA_CLASSIFY_FAILURE _HRESULT_TYPEDEF_(0xc00d32d4) #define NS_E_METADATA_FORMAT_NOT_SUPPORTED _HRESULT_TYPEDEF_(0xc00d32d5) #define NS_E_METADATA_NO_EDITING_CAPABILITY _HRESULT_TYPEDEF_(0xc00d32d6) #define NS_E_METADATA_CANNOT_SET_LOCALE _HRESULT_TYPEDEF_(0xc00d32d7) #define NS_E_METADATA_LANGUAGE_NOT_SUPORTED _HRESULT_TYPEDEF_(0xc00d32d8) #define NS_E_METADATA_NO_RFC1766_NAME_FOR_LOCALE _HRESULT_TYPEDEF_(0xc00d32d9) #define NS_E_METADATA_NOT_AVAILABLE _HRESULT_TYPEDEF_(0xc00d32da) #define NS_E_METADATA_CACHE_DATA_NOT_AVAILABLE _HRESULT_TYPEDEF_(0xc00d32db) #define NS_E_METADATA_INVALID_DOCUMENT_TYPE _HRESULT_TYPEDEF_(0xc00d32dc) #define NS_E_METADATA_IDENTIFIER_NOT_AVAILABLE _HRESULT_TYPEDEF_(0xc00d32dd) #define NS_E_METADATA_CANNOT_RETRIEVE_FROM_OFFLINE_CACHE _HRESULT_TYPEDEF_(0xc00d32de) #endif /* _NSERROR_H */ ================================================ FILE: wine/windows/nspapi.h ================================================ /* NSPAPI.H -- winsock 1.1 * not supported on win95 * * Copyright (C) 2001 Stefan Leichter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINE_NSPAPI_ #define _WINE_NSPAPI_ #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /* * constants */ #define XP_CONNECTIONLESS 0x00000001 #define XP_GUARANTEED_DELIVERY 0x00000002 #define XP_GUARANTEED_ORDER 0x00000004 #define XP_MESSAGE_ORIENTED 0x00000008 #define XP_PSEUDO_STREAM 0x00000010 #define XP_GRACEFUL_CLOSE 0x00000020 #define XP_EXPEDITED_DATA 0x00000040 #define XP_CONNECT_DATA 0x00000080 #define XP_DISCONNECT_DATA 0x00000100 #define XP_SUPPORTS_BROADCAST 0x00000200 #define XP_SUPPORTS_MULTICAST 0x00000400 #define XP_BANDWIDTH_ALLOCATION 0x00000800 #define XP_FRAGMENTATION 0x00001000 #define XP_ENCRYPTS 0x00002000 /* * structures */ typedef struct _PROTOCOL_INFOA { DWORD dwServiceFlags; INT iAddressFamily; INT iMaxSockAddr; INT iMinSockAddr; INT iSocketType; INT iProtocol; DWORD dwMessageSize; LPSTR lpProtocol; } PROTOCOL_INFOA, *PPROTOCOL_INFOA, *LPPROTOCOL_INFOA; typedef struct _PROTOCOL_INFOW { DWORD dwServiceFlags; INT iAddressFamily; INT iMaxSockAddr; INT iMinSockAddr; INT iSocketType; INT iProtocol; DWORD dwMessageSize; LPWSTR lpProtocol; } PROTOCOL_INFOW, *PPROTOCOL_INFOW, *LPPROTOCOL_INFOW; DECL_WINELIB_TYPE_AW(PROTOCOL_INFO) DECL_WINELIB_TYPE_AW(PPROTOCOL_INFO) DECL_WINELIB_TYPE_AW(LPPROTOCOL_INFO) typedef struct _SERVICE_ADDRESS { DWORD dwAddressType; DWORD dwAddressFlags; DWORD dwAddressLength; DWORD dwPrincipalLength; BYTE* lpAddress; BYTE* lpPrincipal; } SERVICE_ADDRESS, *PSERVICE_ADDRESS, *LPSERVICE_ADDRESS; typedef struct _SERVICE_ADDRESSES { DWORD dwAddressCount; SERVICE_ADDRESS Addresses[1]; } SERVICE_ADDRESSES, *PSERVICE_ADDRESSES, *LPSERVICE_ADDRESSES; typedef struct _SERVICE_INFOA { LPGUID lpServiceType; LPSTR lpServiceName; LPSTR lpComment; LPSTR lpLocale; DWORD dwDisplayHint; DWORD dwVersion; DWORD dwTime; LPSTR lpMachineName; LPSERVICE_ADDRESSES lpServiceAddress; BLOB ServiceSpecificInfo; } SERVICE_INFOA, *PSERVICE_INFOA, *LPSERVICE_INFOA; typedef struct _SERVICE_INFOW { LPGUID lpServiceType; LPWSTR lpServiceName; LPWSTR lpComment; LPWSTR lpLocale; DWORD dwDisplayHint; DWORD dwVersion; DWORD dwTime; LPSTR lpMachineName; LPSERVICE_ADDRESSES lpServiceAddress; BLOB ServiceSpecificInfo; /* May point to SERVICE_TYPE_INFO_ABS */ } SERVICE_INFOW, *PSERVICE_INFOW, *LPSERVICE_INFOW; DECL_WINELIB_TYPE_AW(SERVICE_INFO) DECL_WINELIB_TYPE_AW(PSERVICE_INFO) DECL_WINELIB_TYPE_AW(LPSERVICE_INFO) typedef struct _SERVICE_TYPE_VALUE_ABSA { DWORD dwNameSpace; /* Name space or set of name spaces */ DWORD dwValueType; /* Type of the value data */ DWORD dwValueSize; /* Size of the value data */ LPSTR lpValueName; /* Name of the value */ PVOID lpValue; /* Pointer to the value data */ } SERVICE_TYPE_VALUE_ABSA, *PSERVICE_TYPE_VALUE_ABSA, *LPSERVICE_TYPE_VALUE_ABSA; typedef struct _SERVICE_TYPE_VALUE_ABSW { DWORD dwNameSpace; /* Name space or set of name spaces */ DWORD dwValueType; /* Type of the value data */ DWORD dwValueSize; /* Size of the value data */ LPWSTR lpValueName; /* Name of the value */ PVOID lpValue; /* Pointer to the value data */ } SERVICE_TYPE_VALUE_ABSW, *PSERVICE_TYPE_VALUE_ABSW, *LPSERVICE_TYPE_VALUE_ABSW; DECL_WINELIB_TYPE_AW(SERVICE_TYPE_VALUE_ABS) DECL_WINELIB_TYPE_AW(PSERVICE_TYPE_VALUE_ABS) DECL_WINELIB_TYPE_AW(LPSERVICE_TYPE_VALUE_ABS) typedef struct _SERVICE_TYPE_INFO_ABSA { LPSTR lpTypeName; /* Name of the network service type */ DWORD dwValueCount; /* Number of SERVICE_TYPE_VALUE_ABS structures */ SERVICE_TYPE_VALUE_ABSA Values[1]; /* Array of SERVICE_TYPE_VALUE_ABS structures */ } SERVICE_TYPE_INFO_ABSA, *PSERVICE_TYPE_INFO_ABSA, *LPSERVICE_TYPE_INFO_ABSA; typedef struct _SERVICE_TYPE_INFO_ABSW { LPWSTR lpTypeName; /* Name of the network service type */ DWORD dwValueCount; /* Number of SERVICE_TYPE_VALUE_ABS structures */ SERVICE_TYPE_VALUE_ABSW Values[1]; /* Array of SERVICE_TYPE_VALUE_ABS structures */ } SERVICE_TYPE_INFO_ABSW, *PSERVICE_TYPE_INFO_ABSW, *LPSERVICE_TYPE_INFO_ABSW; DECL_WINELIB_TYPE_AW(SERVICE_TYPE_INFO_ABS) DECL_WINELIB_TYPE_AW(PSERVICE_TYPE_INFO_ABS) DECL_WINELIB_TYPE_AW(LPSERVICE_TYPE_INFO_ABS) typedef void (*LPSERVICE_CALLBACK_PROC)(LPARAM lParam, HANDLE hAsyncTaskHandle); typedef struct _SERVICE_ASYNC_INFO { LPSERVICE_CALLBACK_PROC lpServiceCallbackProc; LPARAM lParam; HANDLE hAsyncTaskHandle; } SERVICE_ASYNC_INFO, *PSERVICE_ASYNC_INFO, *LPSERVICE_ASYNC_INFO; /* * function prototypes */ INT WINAPI GetAddressByNameA(DWORD dwNameSpace, LPGUID lpServiceType, LPSTR lpServiceName, LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPSTR lpAliasBuffer, LPDWORD lpdwAliasBufferLength); INT WINAPI GetAddressByNameW(DWORD dwNameSpace, LPGUID lpServiceType, LPWSTR lpServiceName, LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPWSTR lpAliasBuffer, LPDWORD lpdwAliasBufferLength); #define GetAddressByName WINELIB_NAME_AW(GetAddressByName) INT WINAPI GetTypeByNameA(LPSTR lpServiceName, LPGUID lpServiceType); INT WINAPI GetTypeByNameW(LPWSTR lpServiceName, LPGUID lpServiceType); #define GetTypeByName WINELIB_NAME_AW(GetTypeByName) INT WINAPI SetServiceA(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOA lpServiceInfo, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags); INT WINAPI SetServiceW(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOW lpServiceInfo, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags); #define SetService WINELIB_NAME_AW(SetService) INT WINAPI GetServiceA(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName, DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo); INT WINAPI GetServiceW(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName, DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo); #define GetService WINELIB_NAME_AW(GetService) #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* _WINE_NSPAPI_ */ ================================================ FILE: wine/windows/ntddcdrm.h ================================================ /* * DDK information for CD ROM * * Copyright (C) 2002 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __NTDDCDRM_H #define __NTDDCDRM_H #define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM #define IOCTL_CDROM_UNLOAD_DRIVER CTL_CODE(IOCTL_CDROM_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_READ_TOC CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_GET_CONTROL CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_PLAY_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_SEEK_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_STOP_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_PAUSE_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_RESUME_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_GET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_SET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_READ_Q_CHANNEL CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_GET_LAST_SESSION CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_RAW_READ CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT, FILE_READ_ACCESS) #define IOCTL_CDROM_DISK_TYPE CTL_CODE(IOCTL_CDROM_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_CHECK_VERIFY CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_EJECT_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_LOAD_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_RESERVE CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_RELEASE CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_CDROM_FIND_NEW_DEVICES CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) #include #define MAXIMUM_NUMBER_TRACKS 100 #define MAXIMUM_CDROM_SIZE 804 typedef struct _TRACK_DATA { UCHAR Reserved; UCHAR Control : 4; UCHAR Adr : 4; UCHAR TrackNumber; UCHAR Reserved1; UCHAR Address[4]; } TRACK_DATA, *PTRACK_DATA; typedef struct _CDROM_TOC { UCHAR Length[2]; UCHAR FirstTrack; UCHAR LastTrack; TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS]; } CDROM_TOC, *PCDROM_TOC; #define CDROM_TOC_SIZE sizeof(CDROM_TOC) typedef struct _CDROM_PLAY_AUDIO_MSF { UCHAR StartingM; UCHAR StartingS; UCHAR StartingF; UCHAR EndingM; UCHAR EndingS; UCHAR EndingF; } CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF; typedef struct _CDROM_SEEK_AUDIO_MSF { UCHAR M; UCHAR S; UCHAR F; } CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF; typedef struct _CDROM_DISK_DATA { ULONG DiskData; } CDROM_DISK_DATA, *PCDROM_DISK_DATA; #define CDROM_DISK_AUDIO_TRACK (0x00000001) #define CDROM_DISK_DATA_TRACK (0x00000002) #define IOCTL_CDROM_SUB_Q_CHANNEL 0x00 #define IOCTL_CDROM_CURRENT_POSITION 0x01 #define IOCTL_CDROM_MEDIA_CATALOG 0x02 #define IOCTL_CDROM_TRACK_ISRC 0x03 typedef struct _CDROM_SUB_Q_DATA_FORMAT { UCHAR Format; UCHAR Track; } CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT; typedef struct _SUB_Q_HEADER { UCHAR Reserved; UCHAR AudioStatus; UCHAR DataLength[2]; } SUB_Q_HEADER, *PSUB_Q_HEADER; typedef struct _SUB_Q_CURRENT_POSITION { SUB_Q_HEADER Header; UCHAR FormatCode; UCHAR Control : 4; UCHAR ADR : 4; UCHAR TrackNumber; UCHAR IndexNumber; UCHAR AbsoluteAddress[4]; UCHAR TrackRelativeAddress[4]; } SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION; typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER { SUB_Q_HEADER Header; UCHAR FormatCode; UCHAR Reserved[3]; UCHAR Reserved1 : 7; UCHAR Mcval : 1; UCHAR MediaCatalog[15]; } SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER; typedef struct _SUB_Q_TRACK_ISRC { SUB_Q_HEADER Header; UCHAR FormatCode; UCHAR Reserved0; UCHAR Track; UCHAR Reserved1; UCHAR Reserved2 : 7; UCHAR Tcval : 1; UCHAR TrackIsrc[15]; } SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC; typedef union _SUB_Q_CHANNEL_DATA { SUB_Q_CURRENT_POSITION CurrentPosition; SUB_Q_MEDIA_CATALOG_NUMBER MediaCatalog; SUB_Q_TRACK_ISRC TrackIsrc; } SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA; #define AUDIO_STATUS_NOT_SUPPORTED 0x00 #define AUDIO_STATUS_IN_PROGRESS 0x11 #define AUDIO_STATUS_PAUSED 0x12 #define AUDIO_STATUS_PLAY_COMPLETE 0x13 #define AUDIO_STATUS_PLAY_ERROR 0x14 #define AUDIO_STATUS_NO_STATUS 0x15 #define ADR_NO_MODE_INFORMATION 0x0 #define ADR_ENCODES_CURRENT_POSITION 0x1 #define ADR_ENCODES_MEDIA_CATALOG 0x2 #define ADR_ENCODES_ISRC 0x3 #define AUDIO_WITH_PREEMPHASIS 0x0 #define DIGITAL_COPY_PERMITTED 0x2 #define AUDIO_DATA_TRACK 0x4 #define TWO_FOUR_CHANNEL_AUDIO 0x8 typedef struct _CDROM_AUDIO_CONTROL { UCHAR LbaFormat; USHORT LogicalBlocksPerSecond; } CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL; typedef struct _VOLUME_CONTROL { UCHAR PortVolume[4]; } VOLUME_CONTROL, *PVOLUME_CONTROL; typedef enum _TRACK_MODE_TYPE { YellowMode2, XAForm2, CDDA } TRACK_MODE_TYPE, *PTRACK_MODE_TYPE; typedef struct __RAW_READ_INFO { LARGE_INTEGER DiskOffset; ULONG SectorCount; TRACK_MODE_TYPE TrackMode; } RAW_READ_INFO, *PRAW_READ_INFO; #endif /* __NTDDCDRM_H */ ================================================ FILE: wine/windows/ntddndis.h ================================================ /* * Copyright 2009 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _NTDDNDIS_ #define _NTDDNDIS_ #include #include /* #include */ #ifndef GUID_DEFINED # include #endif #ifdef __cplusplus extern "C" { #endif #define _NDIS_CONTROL_CODE(request, method) \ CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, request, method, FILE_ANY_ACCESS) #define IOCTL_NDIS_QUERY_GLOBAL_STATS _NDIS_CONTROL_CODE(0, METHOD_OUT_DIRECT) #define IOCTL_NDIS_QUERY_ALL_STATS _NDIS_CONTROL_CODE(1, METHOD_OUT_DIRECT) #define IOCTL_NDIS_DO_PNP_OPERATION _NDIS_CONTROL_CODE(2, METHOD_BUFFERED) #define IOCTL_NDIS_QUERY_SELECTED_STATS _NDIS_CONTROL_CODE(3, METHOD_OUT_DIRECT) #define IOCTL_NDIS_ENUMERATE_INTERFACES _NDIS_CONTROL_CODE(4, METHOD_BUFFERED) #define IOCTL_NDIS_ADD_TDI_DEVICE _NDIS_CONTROL_CODE(5, METHOD_BUFFERED) #define IOCTL_NDIS_GET_LOG_DATA _NDIS_CONTROL_CODE(7, METHOD_OUT_DIRECT) #define IOCTL_NDIS_GET_VERSION _NDIS_CONTROL_CODE(8, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED1 _NDIS_CONTROL_CODE(0x09, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED2 _NDIS_CONTROL_CODE(0x0a, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED3 _NDIS_CONTROL_CODE(0x0b, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED4 _NDIS_CONTROL_CODE(0x0c, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED5 CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0x0d, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_NDIS_RESERVED6 CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0x0e, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_NDIS_RESERVED7 _NDIS_CONTROL_CODE(0x0f, METHOD_OUT_DIRECT) #define IOCTL_NDIS_RESERVED8 _NDIS_CONTROL_CODE(0x10, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED9 _NDIS_CONTROL_CODE(0x11, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED10 _NDIS_CONTROL_CODE(0x12, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED11 _NDIS_CONTROL_CODE(0x13, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED12 _NDIS_CONTROL_CODE(0x14, METHOD_BUFFERED) #define IOCTL_NDIS_RESERVED13 _NDIS_CONTROL_CODE(0x15, METHOD_BUFFERED) #define OID_GEN_SUPPORTED_LIST 0x00010101 #define OID_GEN_HARDWARE_STATUS 0x00010102 #define OID_GEN_MEDIA_SUPPORTED 0x00010103 #define OID_GEN_MEDIA_IN_USE 0x00010104 #define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105 #define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106 #define OID_GEN_LINK_SPEED 0x00010107 #define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108 #define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109 #define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010a #define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010b #define OID_GEN_VENDOR_ID 0x0001010c #define OID_GEN_VENDOR_DESCRIPTION 0x0001010d #define OID_GEN_CURRENT_PACKET_FILTER 0x0001010e #define OID_GEN_CURRENT_LOOKAHEAD 0x0001010f #define OID_GEN_DRIVER_VERSION 0x00010110 #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111 #define OID_GEN_PROTOCOL_OPTIONS 0x00010112 #define OID_GEN_MAC_OPTIONS 0x00010113 #define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114 #define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115 #define OID_802_3_PERMANENT_ADDRESS 0x01010101 #define OID_802_3_CURRENT_ADDRESS 0x01010102 #define OID_802_3_MULTICAST_LIST 0x01010103 #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104 #define OID_802_3_MAC_OPTIONS 0x01010105 #define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101 #define OID_802_3_XMIT_ONE_COLLISION 0x01020102 #define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103 #define OID_802_3_XMIT_DEFERRED 0x01020201 #define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202 #define OID_802_3_RCV_OVERRUN 0x01020203 #define OID_802_3_XMIT_UNDERRUN 0x01020204 #define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205 #define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206 #define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207 #define OID_802_3_ADD_MULTICAST_ADDRESS 0x01010208 #define OID_802_3_DELETE_MULTICAST_ADDRESS 0x01010209 #define OID_802_5_PERMANENT_ADDRESS 0x02010101 #define OID_802_5_CURRENT_ADDRESS 0x02010102 #define OID_802_5_CURRENT_FUNCTIONAL 0x02010103 #define OID_802_5_CURRENT_GROUP 0x02010104 #define OID_802_5_LAST_OPEN_STATUS 0x02010105 #define OID_802_5_CURRENT_RING_STATUS 0x02010106 #define OID_802_5_CURRENT_RING_STATE 0x02010107 #define OID_802_5_LINE_ERRORS 0x02020101 #define OID_802_5_LOST_FRAMES 0x02020102 #define OID_802_5_BURST_ERRORS 0x02020201 #define OID_802_5_AC_ERRORS 0x02020202 #define OID_802_5_ABORT_DELIMETERS 0x02020203 #define OID_802_5_FRAME_COPIED_ERRORS 0x02020204 #define OID_802_5_FREQUENCY_ERRORS 0x02020205 #define OID_802_5_TOKEN_ERRORS 0x02020206 #define OID_802_5_INTERNAL_ERRORS 0x02020207 #define OID_802_11_BSSID 0x0d010101 #define OID_802_11_SSID 0x0d010102 #define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0d010203 #define OID_802_11_NETWORK_TYPE_IN_USE 0x0d010204 #define OID_802_11_TX_POWER_LEVEL 0x0d010205 #define OID_802_11_RSSI 0x0d010206 #define OID_802_11_RSSI_TRIGGER 0x0d010207 #define OID_802_11_INFRASTRUCTURE_MODE 0x0d010108 #define OID_802_11_FRAGMENTATION_THRESHOLD 0x0d010209 #define OID_802_11_RTS_THRESHOLD 0x0d01020a #define OID_802_11_NUMBER_OF_ANTENNAS 0x0d01020b #define OID_802_11_RX_ANTENNA_SELECTED 0x0d01020c #define OID_802_11_TX_ANTENNA_SELECTED 0x0d01020d #define OID_802_11_SUPPORTED_RATES 0x0d01020e #define OID_802_11_DESIRED_RATES 0x0d010210 #define OID_802_11_CONFIGURATION 0x0d010211 #define OID_802_11_STATISTICS 0x0d020212 #define OID_802_11_ADD_WEP 0x0d010113 #define OID_802_11_REMOVE_WEP 0x0d010114 #define OID_802_11_DISASSOCIATE 0x0d010115 #define OID_802_11_POWER_MODE 0x0d010216 #define OID_802_11_BSSID_LIST 0x0d010217 #define OID_802_11_AUTHENTICATION_MODE 0x0d010118 #define OID_802_11_PRIVACY_FILTER 0x0d010119 #define OID_802_11_BSSID_LIST_SCAN 0x0d01011a #define OID_802_11_WEP_STATUS 0x0d01011b #define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS #define OID_802_11_RELOAD_DEFAULTS 0x0d01011c #define OID_802_11_ADD_KEY 0x0d01011d #define OID_802_11_REMOVE_KEY 0x0d01011e #define OID_802_11_ASSOCIATION_INFORMATION 0x0d01011f #define OID_802_11_TEST 0x0d010120 #define OID_802_11_MEDIA_STREAM_MODE 0x0d010121 #define OID_802_11_CAPABILITY 0x0d010122 #define OID_802_11_PMKID 0x0d010123 #define OID_802_11_NON_BCAST_SSID_LIST 0x0d010124 #define OID_802_11_RADIO_STATUS 0x0d010125 #define NDIS_802_11_LENGTH_SSID 32 #define NDIS_802_11_LENGTH_RATES 8 #define NDIS_802_11_LENGTH_RATES_EX 16 typedef LONG NDIS_802_11_RSSI; typedef struct _NDIS_802_11_CONFIGURATION_FH { ULONG Length; ULONG HopPattern; ULONG HopSet; ULONG DwellTime; } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; typedef struct _NDIS_802_11_CONFIGURATION { ULONG Length; ULONG BeaconPeriod; ULONG ATIMWindow; ULONG DSConfig; NDIS_802_11_CONFIGURATION_FH FHConfig; } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE { Ndis802_11IBSS, Ndis802_11Infrastructure, Ndis802_11AutoUnknown, Ndis802_11InfrastructureMax } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE; typedef enum _NDIS_802_11_NETWORK_TYPE { Ndis802_11FH, Ndis802_11DS, Ndis802_11OFDM5, Ndis802_11OFDM24, Ndis802_11Automode, Ndis802_11NetworkTypeMax } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; typedef struct _NDIS_802_11_SSID { ULONG SsidLength; UCHAR Ssid[NDIS_802_11_LENGTH_SSID]; } NDIS_802_11_SSID, *PNDIS_802_11_SSID; typedef struct _NDIS_WLAN_BSSID { ULONG Length; NDIS_802_11_MAC_ADDRESS MacAddress; UCHAR Reserved[2]; NDIS_802_11_SSID Ssid; ULONG Privacy; NDIS_802_11_RSSI Rssi; NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; NDIS_802_11_CONFIGURATION Configuration; NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; NDIS_802_11_RATES SupportedRates; } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID; typedef struct _NDIS_802_11_BSSID_LIST { ULONG NumberOfItems; NDIS_WLAN_BSSID Bssid[1]; } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST; #ifndef _NDIS_ typedef int NDIS_STATUS, *PNDIS_STATUS; #endif typedef enum _NDIS_MEDIUM { NdisMedium802_3, NdisMedium802_5, NdisMediumFddi, NdisMediumWan, NdisMediumLocalTalk, NdisMediumDix, NdisMediumArcnetRaw, NdisMediumArcnet878_2, NdisMediumAtm, NdisMediumWirelessWan, NdisMediumIrda, NdisMediumBpc, NdisMediumCoWan, NdisMedium1394, NdisMediumInfiniBand, NdisMediumTunnel, NdisMediumNative802_11, NdisMediumLoopback, NdisMediumWiMAX, NdisMediumIP, NdisMediumMax } NDIS_MEDIUM, *PNDIS_MEDIUM; typedef enum _NDIS_PHYSICAL_MEDIUM { NdisPhysicalMediumUnspecified, NdisPhysicalMediumWirelessLan, NdisPhysicalMediumCableModem, NdisPhysicalMediumPhoneLine, NdisPhysicalMediumPowerLine, NdisPhysicalMediumDSL, NdisPhysicalMediumFibreChannel, NdisPhysicalMedium1394, NdisPhysicalMediumWirelessWan, NdisPhysicalMediumNative802_11, NdisPhysicalMediumBluetooth, NdisPhysicalMediumInfiniband, NdisPhysicalMediumWiMax, NdisPhysicalMediumUWB, NdisPhysicalMedium802_3, NdisPhysicalMedium802_5, NdisPhysicalMediumIrda, NdisPhysicalMediumWiredWAN, NdisPhysicalMediumWiredCoWan, NdisPhysicalMediumOther, NdisPhysicalMediumMax } NDIS_PHYSICAL_MEDIUM, *PNDIS_PHYSICAL_MEDIUM; #ifdef __cplusplus } #endif #endif /* _NTDDNDIS_ */ ================================================ FILE: wine/windows/ntddscsi.h ================================================ /* * Definitions for scsi media access * * Copyright (C) 2002 Laurent Pinchart * Copyright 2005 Ivan Leo Puoti * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _NTDDSCSI_H_ #define _NTDDSCSI_H_ #ifdef __cplusplus extern "C" { #endif #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER #define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_SCSI_RESCAN_BUS CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_SCSI_GET_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_SCSI_FREE_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE, 0x0409, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_IDE_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x040a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x040b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_ATA_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x040c, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define SCSI_IOCTL_DATA_OUT 0 #define SCSI_IOCTL_DATA_IN 1 #define SCSI_IOCTL_DATA_UNSPECIFIED 2 typedef struct _SCSI_PASS_THROUGH { USHORT Length; UCHAR ScsiStatus; UCHAR PathId; UCHAR TargetId; UCHAR Lun; UCHAR CdbLength; UCHAR SenseInfoLength; UCHAR DataIn; ULONG DataTransferLength; ULONG TimeOutValue; ULONG_PTR DataBufferOffset; ULONG SenseInfoOffset; UCHAR Cdb[16]; } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH; typedef struct _SCSI_PASS_THROUGH_DIRECT { USHORT Length; UCHAR ScsiStatus; UCHAR PathId; UCHAR TargetId; UCHAR Lun; UCHAR CdbLength; UCHAR SenseInfoLength; UCHAR DataIn; ULONG DataTransferLength; ULONG TimeOutValue; PVOID DataBuffer; ULONG SenseInfoOffset; UCHAR Cdb[16]; } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT; typedef struct _SCSI_ADDRESS { ULONG Length; UCHAR PortNumber; UCHAR PathId; UCHAR TargetId; UCHAR Lun; } SCSI_ADDRESS, *PSCSI_ADDRESS; typedef struct _IO_SCSI_CAPABILITIES { ULONG Length; ULONG MaximumTransferLength; ULONG MaximumPhysicalPages; ULONG SupportedAsynchronousEvents; ULONG AlignmentMask; BOOLEAN TaggedQueuing; BOOLEAN AdapterScansDown; BOOLEAN AdapterUsesPio; } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES; typedef struct _SCSI_BUS_DATA { UCHAR NumberOfLogicalUnits; UCHAR InitiatorBusId; ULONG InquiryDataOffset; } SCSI_BUS_DATA, *PSCSI_BUS_DATA; typedef struct _SCSI_ADAPTER_BUS_INFO { UCHAR NumberOfBuses; SCSI_BUS_DATA BusData[1]; } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO; typedef struct _SCSI_INQUIRY_DATA { UCHAR PathId; UCHAR TargetId; UCHAR Lun; BOOLEAN DeviceClaimed; ULONG InquiryDataLength; ULONG NextInquiryDataOffset; UCHAR InquiryData[1]; } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA; #ifdef __cplusplus } #endif #endif /* _NTDDSCSI_H_ */ ================================================ FILE: wine/windows/ntddstor.h ================================================ /* * DDK definitions for storage media access * * Copyright (C) 2002 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _NTDDSTOR_H_ #define _NTDDSTOR_H_ #ifdef __cplusplus extern "C" { #endif #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_SET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_PREDICT_FAILURE CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) DEFINE_GUID(DiskClassGuid, 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(CdRomClassGuid, 0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(PartitionClassGuid, 0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(TapeClassGuid, 0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(WriteOnceDiskClassGuid, 0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(VolumeClassGuid, 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(MediumChangerClassGuid, 0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(FloppyClassGuid, 0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(CdChangerClassGuid, 0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(StroagePortClassGuid, 0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); typedef struct _STORAGE_DEVICE_NUMBER { DEVICE_TYPE DeviceType; ULONG DeviceNumber; ULONG PartitionNumber; } STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER; typedef struct _STORAGE_BUS_RESET_REQUEST { UCHAR PathId; } STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST; typedef struct _PREVENT_MEDIA_REMOVAL { BOOLEAN PreventMediaRemoval; } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL; typedef struct _TAPE_STATISTICS { ULONG Version; ULONG Flags; LARGE_INTEGER RecoveredWrites; LARGE_INTEGER UnrecoveredWrites; LARGE_INTEGER RecoveredReads; LARGE_INTEGER UnrecoveredReads; UCHAR CompressionRatioReads; UCHAR CompressionRatioWrites; } TAPE_STATISTICS, *PTAPE_STATISTICS; #define RECOVERED_WRITES_VALID 0x00000001 #define UNRECOVERED_WRITES_VALID 0x00000002 #define RECOVERED_READS_VALID 0x00000004 #define UNRECOVERED_READS_VALID 0x00000008 #define WRITE_COMPRESSION_INFO_VALID 0x00000010 #define READ_COMPRESSION_INFO_VALID 0x00000020 typedef struct _TAPE_GET_STATISTICS { ULONG Operation; } TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS; #define TAPE_RETURN_STATISTICS __MSABI_LONG(0) #define TAPE_RETURN_ENV_INFO __MSABI_LONG(1) #define TAPE_RESET_STATISTICS __MSABI_LONG(2) typedef enum _STORAGE_MEDIA_TYPE { /* see also defines in ntdddisk.h */ DDS_4mm = 0x20, MiniQic, Travan, QIC, MP_8mm, AME_8mm, AIT1_8mm, DLT, NCTP, IBM_3480, IBM_3490E, IBM_Magstar_3590, IBM_Magstar_MP, STK_DATA_D3, SONY_DTF, DV_6mm, DMI, SONY_D2, CLEANER_CARTRIDGE, CD_ROM, CD_R, CD_RW, DVD_ROM, DVD_R, DVD_RW, MO_3_RW, MO_5_WO, MO_5_RW, MO_5_LIMDOW, PC_5_WO, PC_5_RW, PD_5_RW, ABL_5_WO, PINNACLE_APEX_5_RW, SONY_12_WO, PHILIPS_12_WO, HITACHI_12_WO, CYGNET_12_WO, KODAK_14_WO, MO_NFR_525, NIKON_12_RW, IOMEGA_ZIP, IOMEGA_JAZ, SYQUEST_EZ135, SYQUEST_EZFLYER, SYQUEST_SYJET, AVATAR_F2, MP2_8mm } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE; #define MEDIA_ERASEABLE 0x00000001 #define MEDIA_WRITE_ONCE 0x00000002 #define MEDIA_READ_ONLY 0x00000004 #define MEDIA_READ_WRITE 0x00000008 #define MEDIA_WRITE_PROTECTED 0x00000100 #define MEDIA_CURRENTLY_MOUNTED 0x80000000 typedef struct _DEVICE_MEDIA_INFO { union { struct { LARGE_INTEGER Cylinders; STORAGE_MEDIA_TYPE MediaType; ULONG TracksPerCylinder; ULONG SectorsPerTrack; ULONG BytesPerSector; ULONG NumberMediaSides; ULONG MediaCharacteristics; } DiskInfo; struct { LARGE_INTEGER Cylinders; STORAGE_MEDIA_TYPE MediaType; ULONG TracksPerCylinder; ULONG SectorsPerTrack; ULONG BytesPerSector; ULONG NumberMediaSides; ULONG MediaCharacteristics; } RemovableDiskInfo; struct { STORAGE_MEDIA_TYPE MediaType; ULONG MediaCharacteristics; ULONG CurrentBlockSize; } TapeInfo; } DeviceSpecific; } DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO; typedef struct _GET_MEDIA_TYPES { ULONG DeviceType; ULONG MediaInfoCount; DEVICE_MEDIA_INFO MediaInfo[1]; } GET_MEDIA_TYPES, *PGET_MEDIA_TYPES; typedef enum _STORAGE_QUERY_TYPE { PropertyStandardQuery = 0, PropertyExistsQuery, PropertyMaskQuery, PropertyQueryMaxDefined } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE; typedef enum _STORAGE_PROPERTY_ID { StorageDeviceProperty = 0, StorageAdapterProperty } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID; typedef struct _STORAGE_PROPERTY_QUERY { STORAGE_PROPERTY_ID PropertyId; STORAGE_QUERY_TYPE QueryType; UCHAR AdditionalParameters[1]; } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; typedef struct _STORAGE_DESCRIPTOR_HEADER { ULONG Version; ULONG Size; } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER; typedef enum _STORAGE_BUS_TYPE { BusTypeUnknown = 0x00, BusTypeScsi, BusTypeAtapi, BusTypeAta, BusType1394, BusTypeSsa, BusTypeFibre, BusTypeUsb, BusTypeRAID, BusTypeMaxReserved = 0x7F } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE; typedef struct _STORAGE_DEVICE_DESCRIPTOR { ULONG Version; ULONG Size; UCHAR DeviceType; UCHAR DeviceTypeModifier; BOOLEAN RemovableMedia; BOOLEAN CommandQueueing; ULONG VendorIdOffset; ULONG ProductIdOffset; ULONG ProductRevisionOffset; ULONG SerialNumberOffset; STORAGE_BUS_TYPE BusType; ULONG RawPropertiesLength; UCHAR RawDeviceProperties[1]; } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR; typedef struct _STORAGE_ADAPTER_DESCRIPTOR { ULONG Version; ULONG Size; ULONG MaximumTransferLength; ULONG MaximumPhysicalPages; ULONG AlignmentMask; BOOLEAN AdapterUsesPio; BOOLEAN AdapterScansDown; BOOLEAN CommandQueueing; BOOLEAN AcceleratedTransfer; BOOLEAN BusType; USHORT BusMajorVersion; USHORT BusMinorVersion; } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR; #ifdef __cplusplus } #endif #endif /* _NTDDSTOR_H_ */ ================================================ FILE: wine/windows/ntdef.h ================================================ /* * Copyright (C) 2015 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _NTDEF_ #define _NTDEF_ #ifdef __cplusplus extern "C" { #endif typedef enum _EVENT_TYPE { NotificationEvent, SynchronizationEvent } EVENT_TYPE; typedef enum _TIMER_TYPE { NotificationTimer, SynchronizationTimer } TIMER_TYPE; typedef enum _WAIT_TYPE { WaitAll, WaitAny, WaitNotification } WAIT_TYPE; #ifdef __cplusplus } #endif #endif /* _NTDEF_ */ ================================================ FILE: wine/windows/ntdsapi.h ================================================ /* * Copyright (C) 2006 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_NTDSAPI_H #define __WINE_NTDSAPI_H /* FIXME: #include */ #ifdef __cplusplus extern "C" { #endif DWORD WINAPI DsClientMakeSpnForTargetServerA(LPCSTR, LPCSTR, DWORD*, LPSTR); DWORD WINAPI DsClientMakeSpnForTargetServerW(LPCWSTR, LPCWSTR, DWORD*, LPWSTR); #define DsClientMakeSpnForTargetServer WINELIB_NAME_AW(DsClientMakeSpnForTargetServer) DWORD WINAPI DsMakeSpnA(LPCSTR, LPCSTR, LPCSTR, USHORT, LPCSTR, DWORD*, LPSTR); DWORD WINAPI DsMakeSpnW(LPCWSTR, LPCWSTR, LPCWSTR, USHORT, LPCWSTR, DWORD*, LPWSTR); #define DsMakeSpn WINELIB_NAME_AW(DsMakeSpn) typedef enum { DS_NAME_NO_FLAGS = 0x0, DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1, DS_NAME_FLAG_EVAL_AT_DC = 0x2, DS_NAME_FLAG_GCVERIFY = 0x4, DS_NAME_FLAG_TRUST_REFERRAL = 0x8 } DS_NAME_FLAGS; typedef enum { DS_UNKNOWN_NAME = 0, DS_FQDN_1779_NAME = 1, DS_NT4_ACCOUNT_NAME = 2, DS_DISPLAY_NAME = 3, DS_UNIQUE_ID_NAME = 6, DS_CANONICAL_NAME = 7, DS_USER_PRINCIPAL_NAME = 8, DS_CANONICAL_NAME_EX = 9, DS_SERVICE_PRINCIPAL_NAME = 10, DS_SID_OR_SID_HISTORY_NAME = 11, DS_DNS_DOMAIN_NAME = 12 } DS_NAME_FORMAT; typedef enum { DS_SPN_DNS_HOST = 0, DS_SPN_DN_HOST = 1, DS_SPN_NB_HOST = 2, DS_SPN_DOMAIN = 3, DS_SPN_NB_DOMAIN = 4, DS_SPN_SERVICE = 5 } DS_SPN_NAME_TYPE; typedef enum { DS_SPN_ADD_SPN_OP = 0, DS_SPN_REPLACE_SPN_OP = 1, DS_SPN_DELETE_SPN_OP = 2 } DS_SPN_WRITE_OP; typedef struct { DWORD status; LPSTR pDomain; LPSTR pName; } DS_NAME_RESULT_ITEMA, *PDS_NAME_RESULT_ITEMA; typedef struct { DWORD status; LPWSTR pDomain; LPWSTR pName; } DS_NAME_RESULT_ITEMW, *PDS_NAME_RESULT_ITEMW; DECL_WINELIB_TYPE_AW(DS_NAME_RESULT_ITEM) DECL_WINELIB_TYPE_AW(PDS_NAME_RESULT_ITEM) typedef struct { DWORD cItems; PDS_NAME_RESULT_ITEMA rItems; } DS_NAME_RESULTA, *PDS_NAME_RESULTA; typedef struct { DWORD cItems; PDS_NAME_RESULT_ITEMW rItems; } DS_NAME_RESULTW, *PDS_NAME_RESULTW; DECL_WINELIB_TYPE_AW(DS_NAME_RESULT) DECL_WINELIB_TYPE_AW(PDS_NAME_RESULT) DWORD 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); DWORD 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); #define DsCrackNames WINELIB_NAME_AW(DsCrackNames) DWORD WINAPI DsServerRegisterSpnA(DS_SPN_WRITE_OP operation, LPCSTR ServiceClass, LPCSTR UserObjectDN); DWORD WINAPI DsServerRegisterSpnW(DS_SPN_WRITE_OP operation, LPCWSTR ServiceClass, LPCWSTR UserObjectDN); #define DsServerRegisterSpn WINELIB_NAME_AW(DsServerRegisterSpn) #ifdef __cplusplus } #endif #endif /* __WINE_NTDSAPI_H */ ================================================ FILE: wine/windows/ntlsa.h ================================================ /* * Copyright 2017 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ NTSTATUS WINAPI LsaLookupPrivilegeDisplayName(LSA_HANDLE policy, LSA_UNICODE_STRING *name, LSA_UNICODE_STRING **display_name, SHORT *language); NTSTATUS WINAPI LsaLookupPrivilegeName(LSA_HANDLE policy, LUID *value, LSA_UNICODE_STRING **name); ================================================ FILE: wine/windows/ntquery.h ================================================ /* * Copyright 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_NTQUERY_H__ #define __WINE_NTQUERY_H__ #include "stgprop.h" #include typedef struct _CI_STATE { DWORD cbStruct; DWORD cWordList; DWORD cPersistentIndex; DWORD cQueries; DWORD cDocuments; DWORD cFreshTest; DWORD dwMergeProgress; DWORD eState; DWORD cFilteredDocuments; DWORD cTotalDocuments; DWORD cPendingScans; DWORD dwIndexSize; DWORD cUniqueKeys; DWORD cSeqQDocuments; DWORD dwPropCacheSize; } CI_STATE; #include #ifdef __cplusplus extern "C" { #endif STDAPI CIState(WCHAR const *, WCHAR const *, CI_STATE *); STDAPI LocateCatalogsA(CHAR const *, ULONG, CHAR *, ULONG *, CHAR *, ULONG *); STDAPI LocateCatalogsW(WCHAR const *, ULONG, WCHAR *, ULONG *, WCHAR *, ULONG *); #define LocateCatalogs WINELIB_NAME_AW(LocateCatalogs) STDAPI LoadIFilter(WCHAR const *, IUnknown *, void **); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/ntsecapi.h ================================================ /* * Copyright (C) 1999 Juergen Schmied * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_NTSECAPI_H #define __WINE_NTSECAPI_H #ifndef GUID_DEFINED # include #endif #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /* Policy access rights */ #define POLICY_VIEW_LOCAL_INFORMATION __MSABI_LONG(0x00000001) #define POLICY_VIEW_AUDIT_INFORMATION __MSABI_LONG(0x00000002) #define POLICY_GET_PRIVATE_INFORMATION __MSABI_LONG(0x00000004) #define POLICY_TRUST_ADMIN __MSABI_LONG(0x00000008) #define POLICY_CREATE_ACCOUNT __MSABI_LONG(0x00000010) #define POLICY_CREATE_SECRET __MSABI_LONG(0x00000020) #define POLICY_CREATE_PRIVILEGE __MSABI_LONG(0x00000040) #define POLICY_SET_DEFAULT_QUOTA_LIMITS __MSABI_LONG(0x00000080) #define POLICY_SET_AUDIT_REQUIREMENTS __MSABI_LONG(0x00000100) #define POLICY_AUDIT_LOG_ADMIN __MSABI_LONG(0x00000200) #define POLICY_SERVER_ADMIN __MSABI_LONG(0x00000400) #define POLICY_LOOKUP_NAMES __MSABI_LONG(0x00000800) #define POLICY_NOTIFICATION __MSABI_LONG(0x00001000) #define POLICY_ALL_ACCESS ( \ STANDARD_RIGHTS_REQUIRED | \ POLICY_VIEW_LOCAL_INFORMATION | \ POLICY_VIEW_AUDIT_INFORMATION | \ POLICY_GET_PRIVATE_INFORMATION | \ POLICY_TRUST_ADMIN | \ POLICY_CREATE_ACCOUNT | \ POLICY_CREATE_SECRET | \ POLICY_CREATE_PRIVILEGE | \ POLICY_SET_DEFAULT_QUOTA_LIMITS | \ POLICY_SET_AUDIT_REQUIREMENTS | \ POLICY_AUDIT_LOG_ADMIN | \ POLICY_SERVER_ADMIN | \ POLICY_LOOKUP_NAMES) #define POLICY_READ ( \ STANDARD_RIGHTS_READ | \ POLICY_VIEW_AUDIT_INFORMATION | \ POLICY_GET_PRIVATE_INFORMATION) #define POLICY_WRITE ( \ STANDARD_RIGHTS_WRITE | \ POLICY_TRUST_ADMIN | \ POLICY_CREATE_ACCOUNT | \ POLICY_CREATE_SECRET | \ POLICY_CREATE_PRIVILEGE | \ POLICY_SET_DEFAULT_QUOTA_LIMITS | \ POLICY_SET_AUDIT_REQUIREMENTS | \ POLICY_AUDIT_LOG_ADMIN | \ POLICY_SERVER_ADMIN) #define POLICY_EXECUTE ( \ STANDARD_RIGHTS_EXECUTE | \ POLICY_VIEW_LOCAL_INFORMATION | \ POLICY_LOOKUP_NAMES) #define POLICY_AUDIT_EVENT_UNCHANGED __MSABI_LONG(0x00000000) #define POLICY_AUDIT_EVENT_SUCCESS __MSABI_LONG(0x00000001) #define POLICY_AUDIT_EVENT_FAILURE __MSABI_LONG(0x00000002) #define POLICY_AUDIT_EVENT_NONE __MSABI_LONG(0x00000004) #define POLICY_AUDIT_EVENT_MASK (POLICY_AUDIT_EVENT_SUCCESS | \ POLICY_AUDIT_EVENT_FAILURE | \ POLICY_AUDIT_EVENT_NONE) /* logon rights names */ #define SE_BATCH_LOGON_NAME \ TEXT("SeBatchLogonRight") #define SE_INTERACTIVE_LOGON_NAME \ TEXT("SeInteractiveLogonRight") #define SE_NETWORK_LOGON_NAME \ TEXT("SeNetworkLogonRight") #define SE_REMOTE_INTERACTIVE_LOGON_NAME \ TEXT("SeRemoteInteractiveLogonRight") #define SE_SERVICE_LOGON_NAME \ TEXT("SeServiceLogonRight") #define SE_DENY_BATCH_LOGON_NAME \ TEXT("SeDenyBatchLogonRight") #define SE_DENY_INTERACTIVE_LOGON_NAME \ TEXT("SeDenyInteractiveLogonRight") #define SE_DENY_NETWORK_LOGON_NAME \ TEXT("SeDenyNetworkLogonRight") #define SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME \ TEXT("SeDenyRemoteInteractiveLogonRight") #define SE_DENY_SERVICE_LOGON_NAME \ TEXT("SeDenyServiceLogonRight") #ifndef WINE_NTSTATUS_DECLARED #define WINE_NTSTATUS_DECLARED typedef LONG NTSTATUS; #endif #ifndef WINE_PNTSTATUS_DECLARED #define WINE_PNTSTATUS_DECLARED typedef NTSTATUS *PNTSTATUS; #endif typedef enum _SECURITY_LOGON_TYPE { Interactive = 2, Network, Batch, Service, Proxy } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE; typedef enum _POLICY_AUDIT_EVENT_TYPE { AuditCategorySystem, AuditCategoryLogon, AuditCategoryObjectAccess, AuditCategoryPrivilegeUse, AuditCategoryDetailedTracking, AuditCategoryPolicyChange, AuditCategoryAccountManagement } POLICY_AUDIT_EVENT_TYPE, *PPOLICY_AUDIT_EVENT_TYPE; #ifndef __STRING_DEFINED__ #define __STRING_DEFINED__ typedef struct _STRING { USHORT Length; USHORT MaximumLength; PCHAR Buffer; } STRING, *PSTRING; #endif #ifndef __UNICODE_STRING_DEFINED__ #define __UNICODE_STRING_DEFINED__ typedef struct _UNICODE_STRING { USHORT Length; /* bytes */ USHORT MaximumLength; /* bytes */ PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; #endif #ifndef __OBJECT_ATTRIBUTES_DEFINED__ #define __OBJECT_ATTRIBUTES_DEFINED__ typedef struct _OBJECT_ATTRIBUTES { ULONG Length; HANDLE RootDirectory; PUNICODE_STRING ObjectName; ULONG Attributes; PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */ PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */ } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; #endif #ifndef __SECHANDLE_DEFINED__ #define __SECHANDLE_DEFINED__ typedef struct _SecHandle { ULONG_PTR dwLower; ULONG_PTR dwUpper; } SecHandle, *PSecHandle; #endif typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; typedef STRING LSA_STRING, *PLSA_STRING; typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES; typedef PVOID LSA_HANDLE, *PLSA_HANDLE; typedef ULONG LSA_ENUMERATION_HANDLE, *PLSA_ENUMERATION_HANDLE; typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE; typedef enum { PolicyAuditLogInformation = 1, PolicyAuditEventsInformation, PolicyPrimaryDomainInformation, PolicyPdAccountInformation, PolicyAccountDomainInformation, PolicyLsaServerRoleInformation, PolicyReplicaSourceInformation, PolicyDefaultQuotaInformation, PolicyModificationInformation, PolicyAuditFullSetInformation, PolicyAuditFullQueryInformation, PolicyDnsDomainInformation } POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS; typedef ULONG POLICY_AUDIT_EVENT_OPTIONS, *PPOLICY_AUDIT_EVENT_OPTIONS; typedef struct _POLICY_AUDIT_EVENTS_INFO { BOOLEAN AuditingMode; PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions; ULONG MaximumAuditEventCount; } POLICY_AUDIT_EVENTS_INFO, *PPOLICY_AUDIT_EVENTS_INFO; typedef struct _POLICY_PRIMARY_DOMAIN_INFO { LSA_UNICODE_STRING Name; PSID Sid; } POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO; typedef struct _POLICY_ACCOUNT_DOMAIN_INFO { LSA_UNICODE_STRING DomainName; PSID DomainSid; } POLICY_ACCOUNT_DOMAIN_INFO, *PPOLICY_ACCOUNT_DOMAIN_INFO; typedef struct _POLICY_DNS_DOMAIN_INFO { LSA_UNICODE_STRING Name; LSA_UNICODE_STRING DnsDomainName; LSA_UNICODE_STRING DnsForestName; GUID DomainGuid; PSID Sid; } POLICY_DNS_DOMAIN_INFO, *PPOLICY_DNS_DOMAIN_INFO; typedef enum _POLICY_LSA_SERVER_ROLE { PolicyServerRoleBackup = 2, PolicyServerRolePrimary } POLICY_LSA_SERVER_ROLE, *PPOLICY_LSA_SERVER_ROLE; typedef struct _POLICY_LSA_SERVER_ROLE_INFO { POLICY_LSA_SERVER_ROLE LsaServerRole; } POLICY_LSA_SERVER_ROLE_INFO, *PPOLICY_LSA_SERVER_ROLE_INFO; typedef struct _POLICY_MODIFICATION_INFO { LARGE_INTEGER ModifiedId; LARGE_INTEGER DatabaseCreationTime; } POLICY_MODIFICATION_INFO, *PPOLICY_MODIFICATION_INFO; typedef struct _SECURITY_LOGON_SESSION_DATA { ULONG Size; LUID LogonId; LSA_UNICODE_STRING UserName; LSA_UNICODE_STRING LogonDomain; LSA_UNICODE_STRING AuthenticationPackage; ULONG LogonType; ULONG Session; PSID Sid; LARGE_INTEGER LogonTime; LSA_UNICODE_STRING LogonServer; LSA_UNICODE_STRING DnsDomainName; LSA_UNICODE_STRING Upn; } SECURITY_LOGON_SESSION_DATA, *PSECURITY_LOGON_SESSION_DATA; typedef struct { SID_NAME_USE Use; LSA_UNICODE_STRING Name; LONG DomainIndex; } LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME; typedef struct { LSA_UNICODE_STRING Name; PSID Sid; } LSA_TRUST_INFORMATION, *PLSA_TRUST_INFORMATION; typedef struct { ULONG Entries; PLSA_TRUST_INFORMATION Domains; } LSA_REFERENCED_DOMAIN_LIST, *PLSA_REFERENCED_DOMAIN_LIST; typedef struct _LSA_TRANSLATED_SID { SID_NAME_USE Use; ULONG RelativeId; LONG DomainIndex; } LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID; typedef struct _TRUSTED_DOMAIN_INFORMATION_EX { LSA_UNICODE_STRING Name; LSA_UNICODE_STRING FlatName; PSID Sid; ULONG TrustDirection; ULONG TrustType; ULONG TrustAttributes; } TRUSTED_DOMAIN_INFORMATION_EX, *PTRUSTED_DOMAIN_INFORMATION_EX; typedef struct _LSA_AUTH_INFORMATION { LARGE_INTEGER LastUpdateTime; ULONG AuthType; ULONG AuthInfoLength; PUCHAR AuthInfo; } LSA_AUTH_INFORMATION, *PLSA_AUTH_INFORMATION; typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION { ULONG IncomingAuthInfos; PLSA_AUTH_INFORMATION IncomingAuthenticationInformation; PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation; ULONG OutgoingAuthInfos; PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation; PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation; } TRUSTED_DOMAIN_AUTH_INFORMATION, *PTRUSTED_DOMAIN_AUTH_INFORMATION; typedef struct _LSA_TRANSLATED_SID2 { SID_NAME_USE Use; PSID Sid; LONG DomainIndex; ULONG Flags; } LSA_TRANSLATED_SID2, *PLSA_TRANSLATED_SID2; typedef enum _TRUSTED_INFORMATION_CLASS { TrustedDomainNameInformation = 1, TrustedControllersInformation, TrustedPosixOffsetInformation, TrustedPasswordInformation, TrustedDomainInformationBasic, TrustedDomainInformationEx, TrustedDomainAuthInformation, TrustedDomainFullInformation } TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS; typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS { PolicyNotifyAuditEventsInformation = 1, PolicyNotifyAccountDomainInformation, PolicyNotifyServerRoleInformation, PolicyNotifyDnsDomainInformation, PolicyNotifyDomainEfsInformation, PolicyNotifyDomainKerberosTicketInformation, PolicyNotifyMachineAccountPasswordInformation } POLICY_NOTIFICATION_INFORMATION_CLASS, *PPOLICY_NOTIFICATION_INFORMATION_CLASS; #define MICROSOFT_KERBEROS_NAME_A "Kerberos" #if defined(_MSC_VER) #define MICROSOFT_KERBEROS_NAME_W L"Kerberos" #elif defined(__GNUC__) #define MICROSOFT_KERBEROS_NAME_W (const WCHAR []){ 'K','e','r','b','e','r','o','s',0 } #else /* _MSC_VER/__GNUC__ */ static const WCHAR MICROSOFT_KERBEROS_NAME_W[] = { 'K','e','r','b','e','r','o','s',0 }; #endif #define KERB_TICKET_FLAGS_reserved 0x80000000 #define KERB_TICKET_FLAGS_forwardable 0x40000000 #define KERB_TICKET_FLAGS_forwarded 0x20000000 #define KERB_TICKET_FLAGS_proxiable 0x10000000 #define KERB_TICKET_FLAGS_proxy 0x08000000 #define KERB_TICKET_FLAGS_may_postdate 0x04000000 #define KERB_TICKET_FLAGS_postdated 0x02000000 #define KERB_TICKET_FLAGS_invalid 0x01000000 #define KERB_TICKET_FLAGS_renewable 0x00800000 #define KERB_TICKET_FLAGS_initial 0x00400000 #define KERB_TICKET_FLAGS_pre_authent 0x00200000 #define KERB_TICKET_FLAGS_hw_authent 0x00100000 #define KERB_TICKET_FLAGS_ok_as_delegate 0x00040000 #define KERB_TICKET_FLAGS_name_canonicalize 0x00010000 #define KERB_TICKET_FLAGS_cname_in_pa_data 0x00040000 #define KERB_TICKET_FLAGS_reserved1 0x00000001 typedef enum _KERB_PROTOCOL_MESSAGE_TYPE { KerbDebugRequestMessage = 0, KerbQueryTicketCacheMessage, KerbChangeMachinePasswordMessage, KerbVerifyPacMessage, KerbRetrieveTicketMessage, KerbUpdateAddressesMessage, KerbPurgeTicketCacheMessage, KerbChangePasswordMessage, KerbRetrieveEncodedTicketMessage, KerbDecryptDataMessage, KerbAddBindingCacheEntryMessage, KerbSetPasswordMessage, KerbSetPasswordExMessage, KerbVerifyCredentialsMessage, KerbQueryTicketCacheExMessage, KerbPurgeTicketCacheExMessage, KerbRefreshSmartcardCredentialsMessage, KerbAddExtraCredentialsMessage, KerbQuerySupplementalCredentialsMessage, KerbTransferCredentialsMessage, KerbQueryTicketCacheEx2Message, KerbSubmitTicketMessage, KerbAddExtraCredentialsExMessage, KerbQueryKdcProxyCacheMessage, KerbPurgeKdcProxyCacheMessage, KerbQueryTicketCacheEx3Message, KerbCleanupMachinePkinitCredsMessage, KerbAddBindingCacheEntryExMessage, KerbQueryBindingCacheMessage, KerbPurgeBindingCacheMessage, KerbQueryDomainExtendedPoliciesMessage, KerbQueryS4U2ProxyCacheMessage } KERB_PROTOCOL_MESSAGE_TYPE, *PKERB_PROTOCOL_MESSAGE_TYPE; typedef struct _KERB_TICKET_CACHE_INFO { UNICODE_STRING ServerName; UNICODE_STRING RealmName; LARGE_INTEGER StartTime; LARGE_INTEGER EndTime; LARGE_INTEGER RenewTime; LONG EncryptionType; ULONG TicketFlags; } KERB_TICKET_CACHE_INFO, *PKERB_TICKET_CACHE_INFO; typedef struct _KERB_QUERY_TKT_CACHE_REQUEST { KERB_PROTOCOL_MESSAGE_TYPE MessageType; LUID LogonId; } KERB_QUERY_TKT_CACHE_REQUEST, *PKERB_QUERY_TKT_CACHE_REQUEST; typedef struct _KERB_QUERY_TKT_CACHE_RESPONSE { KERB_PROTOCOL_MESSAGE_TYPE MessageType; ULONG CountOfTickets; KERB_TICKET_CACHE_INFO Tickets[ANYSIZE_ARRAY]; } KERB_QUERY_TKT_CACHE_RESPONSE, *PKERB_QUERY_TKT_CACHE_RESPONSE; typedef struct _KERB_RETRIEVE_TKT_REQUEST { KERB_PROTOCOL_MESSAGE_TYPE MessageType; LUID LogonId; UNICODE_STRING TargetName; ULONG TicketFlags; ULONG CacheOptions; LONG EncryptionType; SecHandle CredentialsHandle; } KERB_RETRIEVE_TKT_REQUEST, *PKERB_RETRIEVE_TKT_REQUEST; typedef struct _KERB_PURGE_TKT_CACHE_REQUEST { KERB_PROTOCOL_MESSAGE_TYPE MessageType; LUID LogonId; UNICODE_STRING ServerName; UNICODE_STRING RealmName; } KERB_PURGE_TKT_CACHE_REQUEST, *PKERB_PURGE_TKT_CACHE_REQUEST; #define RtlGenRandom SystemFunction036 #define RtlEncryptMemory SystemFunction040 #define RtlDecryptMemory SystemFunction041 BOOLEAN WINAPI RtlGenRandom(PVOID,ULONG); NTSTATUS WINAPI RtlEncryptMemory(PVOID,ULONG,ULONG); NTSTATUS WINAPI RtlDecryptMemory(PVOID,ULONG,ULONG); NTSTATUS WINAPI LsaAddAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING,ULONG); NTSTATUS WINAPI LsaCallAuthenticationPackage(HANDLE,ULONG,PVOID,ULONG,PVOID*,PULONG,PNTSTATUS); NTSTATUS WINAPI LsaClose(LSA_HANDLE); NTSTATUS WINAPI LsaConnectUntrusted(PHANDLE); NTSTATUS WINAPI LsaCreateTrustedDomainEx(LSA_HANDLE,PTRUSTED_DOMAIN_INFORMATION_EX, PTRUSTED_DOMAIN_AUTH_INFORMATION,ACCESS_MASK,PLSA_HANDLE); NTSTATUS WINAPI LsaDeleteTrustedDomain(LSA_HANDLE,PSID); NTSTATUS WINAPI LsaDeregisterLogonProcess(HANDLE); NTSTATUS WINAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG); NTSTATUS WINAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE,PLSA_UNICODE_STRING,PVOID*,PULONG); NTSTATUS WINAPI LsaEnumerateLogonSessions(PULONG,PLUID*); NTSTATUS WINAPI LsaEnumerateTrustedDomains(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG); NTSTATUS WINAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG); NTSTATUS WINAPI LsaFreeMemory(PVOID); NTSTATUS WINAPI LsaFreeReturnBuffer(PVOID); NTSTATUS WINAPI LsaGetLogonSessionData(PLUID,PSECURITY_LOGON_SESSION_DATA*); NTSTATUS WINAPI LsaLogonUser(HANDLE,PLSA_STRING,SECURITY_LOGON_TYPE,ULONG,PVOID,ULONG,PTOKEN_GROUPS,PTOKEN_SOURCE,PVOID*,PULONG,PLUID,PHANDLE,PQUOTA_LIMITS,PNTSTATUS); NTSTATUS WINAPI LsaLookupAuthenticationPackage(HANDLE,PLSA_STRING,PULONG); NTSTATUS WINAPI LsaLookupNames(LSA_HANDLE,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_SID*); NTSTATUS WINAPI LsaLookupNames2(LSA_HANDLE,ULONG,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_SID2*); NTSTATUS WINAPI LsaLookupSids(LSA_HANDLE,ULONG,PSID *,PLSA_REFERENCED_DOMAIN_LIST *,PLSA_TRANSLATED_NAME *); ULONG WINAPI LsaNtStatusToWinError(NTSTATUS); NTSTATUS WINAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE); NTSTATUS WINAPI LsaOpenTrustedDomainByName(LSA_HANDLE,PLSA_UNICODE_STRING,ACCESS_MASK,PLSA_HANDLE); NTSTATUS WINAPI LsaQueryInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*); NTSTATUS WINAPI LsaQueryTrustedDomainInfo(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID*); NTSTATUS WINAPI LsaQueryTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID*); NTSTATUS WINAPI LsaRegisterLogonProcess(PLSA_STRING,PHANDLE,PLSA_OPERATIONAL_MODE); NTSTATUS WINAPI LsaRegisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE); NTSTATUS WINAPI LsaRemoveAccountRights(LSA_HANDLE,PSID,BOOLEAN,PLSA_UNICODE_STRING,ULONG); NTSTATUS WINAPI LsaRetrievePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING*); NTSTATUS WINAPI LsaSetInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID); NTSTATUS WINAPI LsaSetTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID); NTSTATUS WINAPI LsaSetTrustedDomainInformation(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID); NTSTATUS WINAPI LsaStorePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING); NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* !defined(__WINE_NTSECAPI_H) */ ================================================ FILE: wine/windows/ntsecpkg.h ================================================ /* * Copyright (C) 2007 Yuval Fledel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _NTSECPKG_H #define _NTSECPKG_H #ifdef __cplusplus extern "C" { #endif /* Flags for the MachineState field in SECPKG_PARAMETERS */ #define SECPKG_STATE_ENCRYPTION_PERMITTED 0x01 #define SECPKG_STATE_STRONG_ENCRYPTION_PERMITTED 0x02 #define SECPKG_STATE_DOMAIN_CONTROLLER 0x04 #define SECPKG_STATE_WORKSTATION 0x08 #define SECPKG_STATE_STANDALONE 0x10 /* Version magics as passed to or returned from Sp[Lsa,Mode]ModeInitialize */ #define SECPKG_INTERFACE_VERSION 0x10000 #define SECPKG_INTERFACE_VERSION_2 0x20000 #define SECPKG_INTERFACE_VERSION_3 0x40000 #define SECPKG_INTERFACE_VERSION_4 0x80000 #define SECPKG_INTERFACE_VERSION_5 0x100000 #define SECPKG_INTERFACE_VERSION_6 0x200000 #define SECPKG_INTERFACE_VERSION_7 0x400000 /* enum definitions for Secure Service Provider/Authentication Packages */ typedef enum _LSA_TOKEN_INFORMATION_TYPE { LsaTokenInformationNull, LsaTokenInformationV1 } LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE; typedef enum _SECPKG_EXTENDED_INFORMATION_CLASS { SecpkgGssInfo = 1, SecpkgContextThunks, SecpkgMutualAuthLevel, SecpkgMaxInfo } SECPKG_EXTENDED_INFORMATION_CLASS; typedef enum _SECPKG_NAME_TYPE { SecNameSamCompatible, SecNameAlternateId, SecNameFlat, SecNameDN } SECPKG_NAME_TYPE; /* struct definitions for SSP/AP */ typedef struct _SECPKG_PRIMARY_CRED { LUID LogonId; UNICODE_STRING DownlevelName; UNICODE_STRING DomainName; UNICODE_STRING Password; UNICODE_STRING OldPassword; PSID UserSid; ULONG Flags; UNICODE_STRING DnsDomainName; UNICODE_STRING Upn; UNICODE_STRING LogonServer; UNICODE_STRING Spare1; UNICODE_STRING Spare2; UNICODE_STRING Spare3; UNICODE_STRING Spare4; } SECPKG_PRIMARY_CRED, *PSECPKG_PRIMARY_CRED; typedef struct _SECPKG_SUPPLEMENTAL_CRED { UNICODE_STRING PackageName; ULONG CredentialSize; PUCHAR Credentials; } SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED; typedef struct _SECPKG_SUPPLEMENTAL_CRED_ARRAY { ULONG CredentialCount; SECPKG_SUPPLEMENTAL_CRED Credentials[1]; } SECPKG_SUPPLEMENTAL_CRED_ARRAY, *PSECPKG_SUPPLEMENTAL_CRED_ARRAY; typedef struct _SECPKG_PARAMETERS { ULONG Version; ULONG MachineState; ULONG SetupMode; PSID DomainSid; UNICODE_STRING DomainName; UNICODE_STRING DnsDomainName; GUID DomainGuid; } SECPKG_PARAMETERS, *PSECPKG_PARAMETERS, SECPKG_EVENT_DOMAIN_CHANGE, *PSECPKG_EVENT_DOMAIN_CHANGE; typedef struct _SECPKG_CLIENT_INFO { LUID LogonId; ULONG ProcessID; ULONG ThreadID; BOOLEAN HasTcbPrivilege; BOOLEAN Impersonating; BOOLEAN Restricted; } SECPKG_CLIENT_INFO, *PSECPKG_CLIENT_INFO; typedef struct _SECURITY_USER_DATA { UNICODE_STRING UserName; UNICODE_STRING LogonDomainName; UNICODE_STRING LogonServer; PSID pSid; } SECURITY_USER_DATA, *PSECURITY_USER_DATA, SecurityUserData, *PSecurityUserData; typedef struct _SECPKG_GSS_INFO { ULONG EncodedIdLength; UCHAR EncodedId[4]; } SECPKG_GSS_INFO, *PSECPKG_GSS_INFO; typedef struct _SECPKG_CONTEXT_THUNKS { ULONG InfoLevelCount; ULONG Levels[1]; } SECPKG_CONTEXT_THUNKS, *PSECPKG_CONTEXT_THUNKS; typedef struct _SECPKG_MUTUAL_AUTH_LEVEL { ULONG MutualAuthLevel; } SECPKG_MUTUAL_AUTH_LEVEL, *PSECPKG_MUTUAL_AUTH_LEVEL; typedef struct _SECPKG_CALL_INFO { ULONG ProcessId; ULONG ThreadId; ULONG Attributes; ULONG CallCount; } SECPKG_CALL_INFO, *PSECPKG_CALL_INFO; typedef struct _SECPKG_EXTENDED_INFORMATION { SECPKG_EXTENDED_INFORMATION_CLASS Class; union { SECPKG_GSS_INFO GssInfo; SECPKG_CONTEXT_THUNKS ContextThunks; SECPKG_MUTUAL_AUTH_LEVEL MutualAuthLevel; } Info; } SECPKG_EXTENDED_INFORMATION, *PSECPKG_EXTENDED_INFORMATION; typedef struct _SECPKG_TARGETINFO { PSID DomainSid; PCWSTR ComputerName; } SECPKG_TARGETINFO, *PSECPKG_TARGETINFO; typedef struct _SECPKG_POST_LOGON_USER_INFO { ULONG Flags; LUID LogonId; LUID LinkedLogonId; } SECPKG_POST_LOGON_USER_INFO, *PSECPKG_POST_LOGON_USER_INFO; /* callbacks implemented by SSP/AP dlls and called by the LSA */ typedef VOID (NTAPI *PLSA_CALLBACK_FUNCTION)(ULONG_PTR, ULONG_PTR, PSecBuffer, PSecBuffer); /* misc typedefs used in the below prototypes */ typedef PVOID *PLSA_CLIENT_REQUEST; typedef ULONG_PTR LSA_SEC_HANDLE, *PLSA_SEC_HANDLE; typedef LPTHREAD_START_ROUTINE SEC_THREAD_START; typedef PSECURITY_ATTRIBUTES SEC_ATTRS; /* functions used by SSP/AP obtainable by dispatch tables */ typedef NTSTATUS (NTAPI *PLSA_REGISTER_CALLBACK)(ULONG, PLSA_CALLBACK_FUNCTION); typedef NTSTATUS (NTAPI *PLSA_CREATE_LOGON_SESSION)(PLUID); typedef NTSTATUS (NTAPI *PLSA_DELETE_LOGON_SESSION)(PLUID); typedef NTSTATUS (NTAPI *PLSA_ADD_CREDENTIAL)(PLUID, ULONG, PLSA_STRING, PLSA_STRING); typedef NTSTATUS (NTAPI *PLSA_GET_CREDENTIALS)(PLUID, ULONG, PULONG, BOOLEAN, PLSA_STRING, PULONG, PLSA_STRING); typedef NTSTATUS (NTAPI *PLSA_DELETE_CREDENTIAL)(PLUID, ULONG, PLSA_STRING); typedef PVOID (NTAPI *PLSA_ALLOCATE_LSA_HEAP)(ULONG); typedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID); typedef NTSTATUS (NTAPI *PLSA_ALLOCATE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG, PVOID*); typedef NTSTATUS (NTAPI *PLSA_FREE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, PVOID); typedef NTSTATUS (NTAPI *PLSA_COPY_TO_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG, PVOID, PVOID); typedef NTSTATUS (NTAPI *PLSA_COPY_FROM_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG, PVOID, PVOID); typedef NTSTATUS (NTAPI *PLSA_IMPERSONATE_CLIENT)(void); typedef NTSTATUS (NTAPI *PLSA_UNLOAD_PACKAGE)(void); typedef NTSTATUS (NTAPI *PLSA_DUPLICATE_HANDLE)(HANDLE, PHANDLE); typedef NTSTATUS (NTAPI *PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS)(PLUID, ULONG, PVOID, BOOLEAN); typedef HANDLE (NTAPI *PLSA_CREATE_THREAD)(SEC_ATTRS, ULONG, SEC_THREAD_START, PVOID, ULONG, PULONG); typedef NTSTATUS (NTAPI *PLSA_GET_CLIENT_INFO)(PSECPKG_CLIENT_INFO); typedef HANDLE (NTAPI *PLSA_REGISTER_NOTIFICATION)(SEC_THREAD_START, PVOID, ULONG, ULONG, ULONG, ULONG, HANDLE); typedef NTSTATUS (NTAPI *PLSA_CANCEL_NOTIFICATION)(HANDLE); typedef NTSTATUS (NTAPI *PLSA_MAP_BUFFER)(PSecBuffer, PSecBuffer); typedef NTSTATUS (NTAPI *PLSA_CREATE_TOKEN)(PLUID, PTOKEN_SOURCE, SECURITY_LOGON_TYPE, SECURITY_IMPERSONATION_LEVEL, LSA_TOKEN_INFORMATION_TYPE, PVOID, PTOKEN_GROUPS, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, PHANDLE, PNTSTATUS); typedef VOID (NTAPI *PLSA_AUDIT_LOGON)(NTSTATUS, NTSTATUS, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, OPTIONAL PSID, SECURITY_LOGON_TYPE, PTOKEN_SOURCE, PLUID); typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG, PVOID*, PULONG, PNTSTATUS); typedef BOOLEAN (NTAPI *PLSA_GET_CALL_INFO)(PSECPKG_CALL_INFO); typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGEEX)(PUNICODE_STRING, PVOID, PVOID, ULONG, PVOID*, PULONG, PNTSTATUS); typedef PVOID (NTAPI *PLSA_CREATE_SHARED_MEMORY)(ULONG, ULONG); typedef PVOID (NTAPI *PLSA_ALLOCATE_SHARED_MEMORY)(PVOID, ULONG); typedef VOID (NTAPI *PLSA_FREE_SHARED_MEMORY)(PVOID, PVOID); typedef BOOLEAN (NTAPI *PLSA_DELETE_SHARED_MEMORY)(PVOID); typedef NTSTATUS (NTAPI *PLSA_OPEN_SAM_USER)(PUNICODE_STRING, SECPKG_NAME_TYPE, PUNICODE_STRING, BOOLEAN, ULONG, PVOID*); typedef NTSTATUS (NTAPI *PLSA_GET_USER_CREDENTIALS)(PVOID, PVOID *, PULONG, PVOID *, PULONG); typedef NTSTATUS (NTAPI *PLSA_GET_USER_AUTH_DATA)(PVOID, PUCHAR *, PULONG); typedef NTSTATUS (NTAPI *PLSA_CLOSE_SAM_USER)(PVOID); typedef NTSTATUS (NTAPI *PLSA_CONVERT_AUTH_DATA_TO_TOKEN)(PVOID, ULONG, SECURITY_IMPERSONATION_LEVEL, PTOKEN_SOURCE, SECURITY_LOGON_TYPE, PUNICODE_STRING, PHANDLE, PLUID, PUNICODE_STRING, PNTSTATUS); typedef NTSTATUS (NTAPI *PLSA_CLIENT_CALLBACK)(PCHAR, ULONG_PTR, ULONG_PTR, PSecBuffer, PSecBuffer); typedef NTSTATUS (NTAPI *PLSA_UPDATE_PRIMARY_CREDENTIALS)(PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY); typedef NTSTATUS (NTAPI *PLSA_GET_AUTH_DATA_FOR_USER)(PUNICODE_STRING, SECPKG_NAME_TYPE, PUNICODE_STRING, PUCHAR *, PULONG, PUNICODE_STRING); typedef NTSTATUS (NTAPI *PLSA_CRACK_SINGLE_NAME)(ULONG, BOOLEAN, PUNICODE_STRING, PUNICODE_STRING, ULONG, PUNICODE_STRING, PUNICODE_STRING, PULONG); typedef NTSTATUS (NTAPI *PLSA_AUDIT_ACCOUNT_LOGON)(ULONG, BOOLEAN, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, NTSTATUS); typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING, PVOID, PVOID, ULONG, PVOID*, PULONG, PNTSTATUS); /* Dispatch tables of functions used by SSP/AP */ typedef struct SECPKG_DLL_FUNCTIONS { PLSA_ALLOCATE_LSA_HEAP AllocateHeap; PLSA_FREE_LSA_HEAP FreeHeap; PLSA_REGISTER_CALLBACK RegisterCallback; } SECPKG_DLL_FUNCTIONS, *PSECPKG_DLL_FUNCTIONS; typedef struct LSA_DISPATCH_TABLE { PLSA_CREATE_LOGON_SESSION CreateLogonSession; PLSA_DELETE_LOGON_SESSION DeleteLogonSession; PLSA_ADD_CREDENTIAL AddCredential; PLSA_GET_CREDENTIALS GetCredentials; PLSA_DELETE_CREDENTIAL DeleteCredential; PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap; PLSA_FREE_LSA_HEAP FreeLsaHeap; PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer; PLSA_FREE_CLIENT_BUFFER FreeClientBuffer; PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer; PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer; } LSA_DISPATCH_TABLE, *PLSA_DISPATCH_TABLE; typedef struct _LSA_SECPKG_FUNCTION_TABLE { PLSA_CREATE_LOGON_SESSION CreateLogonSession; PLSA_DELETE_LOGON_SESSION DeleteLogonSession; PLSA_ADD_CREDENTIAL AddCredential; PLSA_GET_CREDENTIALS GetCredentials; PLSA_DELETE_CREDENTIAL DeleteCredential; PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap; PLSA_FREE_LSA_HEAP FreeLsaHeap; PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer; PLSA_FREE_CLIENT_BUFFER FreeClientBuffer; PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer; PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer; PLSA_IMPERSONATE_CLIENT ImpersonateClient; PLSA_UNLOAD_PACKAGE UnloadPackage; PLSA_DUPLICATE_HANDLE DuplicateHandle; PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS SaveSupplementalCredentials; PLSA_CREATE_THREAD CreateThread; PLSA_GET_CLIENT_INFO GetClientInfo; PLSA_REGISTER_NOTIFICATION RegisterNotification; PLSA_CANCEL_NOTIFICATION CancelNotification; PLSA_MAP_BUFFER MapBuffer; PLSA_CREATE_TOKEN CreateToken; PLSA_AUDIT_LOGON AuditLogon; PLSA_CALL_PACKAGE CallPackage; PLSA_FREE_LSA_HEAP FreeReturnBuffer; PLSA_GET_CALL_INFO GetCallInfo; PLSA_CALL_PACKAGEEX CallPackageEx; PLSA_CREATE_SHARED_MEMORY CreateSharedMemory; PLSA_ALLOCATE_SHARED_MEMORY AllocateSharedMemory; PLSA_FREE_SHARED_MEMORY FreeSharedMemory; PLSA_DELETE_SHARED_MEMORY DeleteSharedMemory; PLSA_OPEN_SAM_USER OpenSamUser; PLSA_GET_USER_CREDENTIALS GetUserCredentials; PLSA_GET_USER_AUTH_DATA GetUserAuthData; PLSA_CLOSE_SAM_USER CloseSamUser; PLSA_CONVERT_AUTH_DATA_TO_TOKEN ConvertAuthDataToToken; PLSA_CLIENT_CALLBACK ClientCallback; PLSA_UPDATE_PRIMARY_CREDENTIALS UpdateCredentials; PLSA_GET_AUTH_DATA_FOR_USER GetAuthDataForUser; PLSA_CRACK_SINGLE_NAME CrackSingleName; PLSA_AUDIT_ACCOUNT_LOGON AuditAccountLogon; PLSA_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough; } LSA_SECPKG_FUNCTION_TABLE, *PLSA_SECPKG_FUNCTION_TABLE; /* LSA-mode functions implemented by SSP/AP obtainable by a dispatch table */ typedef NTSTATUS (NTAPI *PLSA_AP_INITIALIZE_PACKAGE)(ULONG, PLSA_DISPATCH_TABLE, PLSA_STRING, PLSA_STRING, PLSA_STRING *); typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER)(PLSA_CLIENT_REQUEST, SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID LogonId, PNTSTATUS, PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PLSA_UNICODE_STRING *, PLSA_UNICODE_STRING *); typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE)(PLSA_CLIENT_REQUEST, PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS); typedef VOID (NTAPI *PLSA_AP_LOGON_TERMINATED)(PLUID); typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_UNTRUSTED)(PLSA_CLIENT_REQUEST, PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS); typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_PASSTHROUGH)(PLSA_CLIENT_REQUEST, PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS); typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX)(PLSA_CLIENT_REQUEST, SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS, PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *, PUNICODE_STRING *); typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX2)(PLSA_CLIENT_REQUEST, SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS, PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *, PUNICODE_STRING *, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY *); typedef NTSTATUS (NTAPI SpInitializeFn)(ULONG_PTR, PSECPKG_PARAMETERS, PLSA_SECPKG_FUNCTION_TABLE); typedef NTSTATUS (NTAPI SpShutdownFn)(void); typedef NTSTATUS (NTAPI SpGetInfoFn)(PSecPkgInfoW); typedef NTSTATUS (NTAPI SpAcceptCredentialsFn)(SECURITY_LOGON_TYPE, PUNICODE_STRING, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED); typedef NTSTATUS (NTAPI SpAcquireCredentialsHandleFn)(PUNICODE_STRING, ULONG, PLUID, PVOID, PVOID, PVOID, PLSA_SEC_HANDLE, PTimeStamp); typedef NTSTATUS (NTAPI SpQueryCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG, PVOID); typedef NTSTATUS (NTAPI SpFreeCredentialsHandleFn)(LSA_SEC_HANDLE); typedef NTSTATUS (NTAPI SpSaveCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer); typedef NTSTATUS (NTAPI SpGetCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer); typedef NTSTATUS (NTAPI SpDeleteCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer); typedef NTSTATUS (NTAPI SpInitLsaModeContextFn)(LSA_SEC_HANDLE, LSA_SEC_HANDLE, PUNICODE_STRING, ULONG, ULONG, PSecBufferDesc, PLSA_SEC_HANDLE, PSecBufferDesc, PULONG, PTimeStamp, PBOOLEAN, PSecBuffer); typedef NTSTATUS (NTAPI SpAcceptLsaModeContextFn)(LSA_SEC_HANDLE, LSA_SEC_HANDLE, PSecBufferDesc, ULONG, ULONG, PLSA_SEC_HANDLE, PSecBufferDesc, PULONG, PTimeStamp, PBOOLEAN, PSecBuffer); typedef NTSTATUS (NTAPI SpDeleteContextFn)(LSA_SEC_HANDLE); typedef NTSTATUS (NTAPI SpApplyControlTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc); typedef NTSTATUS (NTAPI SpGetUserInfoFn)(PLUID, ULONG, PSecurityUserData *); typedef NTSTATUS (NTAPI SpGetExtendedInformationFn)( SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION *); typedef NTSTATUS (NTAPI SpQueryContextAttributesFn)(LSA_SEC_HANDLE, ULONG, PVOID); typedef NTSTATUS (NTAPI SpAddCredentialsFn)(LSA_SEC_HANDLE, PUNICODE_STRING, PUNICODE_STRING, ULONG, PVOID, PVOID, PVOID, PTimeStamp); typedef NTSTATUS (NTAPI SpSetExtendedInformationFn)( SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION); typedef NTSTATUS (NTAPI SpSetContextAttributesFn)(LSA_SEC_HANDLE, ULONG, PVOID, ULONG); typedef NTSTATUS (NTAPI SpSetCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG, PVOID, ULONG); typedef NTSTATUS (NTAPI SpChangeAccountPasswordFn)(PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, BOOLEAN, PSecBufferDesc); typedef NTSTATUS (NTAPI SpQueryMetaDataFn)(LSA_SEC_HANDLE, PUNICODE_STRING, ULONG, PULONG, PUCHAR *, PLSA_SEC_HANDLE); typedef NTSTATUS (NTAPI SpExchangeMetaDataFn)(LSA_SEC_HANDLE, PUNICODE_STRING, ULONG, ULONG, PUCHAR, PLSA_SEC_HANDLE); typedef NTSTATUS (NTAPI SpGetCredUIContextFn)(LSA_SEC_HANDLE, GUID *, PULONG, PUCHAR *); typedef NTSTATUS (NTAPI SpUpdateCredentialsFn)(LSA_SEC_HANDLE, GUID *, ULONG, PUCHAR); typedef NTSTATUS (NTAPI SpValidateTargetInfoFn)(PLSA_CLIENT_REQUEST, PVOID, PVOID, ULONG, PSECPKG_TARGETINFO); typedef NTSTATUS (NTAPI LSA_AP_POST_LOGON_USER)(PSECPKG_POST_LOGON_USER_INFO); /* User-mode functions implemented by SSP/AP obtainable by a dispatch table */ typedef NTSTATUS (NTAPI SpInstanceInitFn)(ULONG, PSECPKG_DLL_FUNCTIONS, PVOID *); typedef NTSTATUS (NTAPI SpInitUserModeContextFn)(LSA_SEC_HANDLE, PSecBuffer); typedef NTSTATUS (NTAPI SpMakeSignatureFn)(LSA_SEC_HANDLE, ULONG, PSecBufferDesc, ULONG); typedef NTSTATUS (NTAPI SpVerifySignatureFn)(LSA_SEC_HANDLE, PSecBufferDesc, ULONG, PULONG); typedef NTSTATUS (NTAPI SpSealMessageFn)(LSA_SEC_HANDLE, ULONG, PSecBufferDesc, ULONG); typedef NTSTATUS (NTAPI SpUnsealMessageFn)(LSA_SEC_HANDLE, PSecBufferDesc, ULONG, PULONG); typedef NTSTATUS (NTAPI SpGetContextTokenFn)(LSA_SEC_HANDLE, PHANDLE); typedef NTSTATUS (NTAPI SpCompleteAuthTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc); typedef NTSTATUS (NTAPI SpFormatCredentialsFn)(PSecBuffer, PSecBuffer); typedef NTSTATUS (NTAPI SpMarshallSupplementalCredsFn)(ULONG, PUCHAR, PULONG, PVOID *); typedef NTSTATUS (NTAPI SpExportSecurityContextFn)(LSA_SEC_HANDLE, ULONG, PSecBuffer, PHANDLE); typedef NTSTATUS (NTAPI SpImportSecurityContextFn)(PSecBuffer, HANDLE, PLSA_SEC_HANDLE); #ifdef WINE_NO_UNICODE_MACROS #undef SetContextAttributes #endif /* dispatch tables of LSA-mode functions implemented by SSP/AP */ typedef struct SECPKG_FUNCTION_TABLE { PLSA_AP_INITIALIZE_PACKAGE InitializePackage; PLSA_AP_LOGON_USER LsaLogonUser; PLSA_AP_CALL_PACKAGE CallPackage; PLSA_AP_LOGON_TERMINATED LogonTerminated; PLSA_AP_CALL_PACKAGE_UNTRUSTED CallPackageUntrusted; PLSA_AP_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough; PLSA_AP_LOGON_USER_EX LogonUserEx; PLSA_AP_LOGON_USER_EX2 LogonUserEx2; SpInitializeFn *Initialize; SpShutdownFn *Shutdown; SpGetInfoFn *GetInfo; SpAcceptCredentialsFn *AcceptCredentials; SpAcquireCredentialsHandleFn *SpAcquireCredentialsHandle; SpQueryCredentialsAttributesFn *SpQueryCredentialsAttributes; SpFreeCredentialsHandleFn *FreeCredentialsHandle; SpSaveCredentialsFn *SaveCredentials; SpGetCredentialsFn *GetCredentials; SpDeleteCredentialsFn *DeleteCredentials; SpInitLsaModeContextFn *InitLsaModeContext; SpAcceptLsaModeContextFn *AcceptLsaModeContext; SpDeleteContextFn *DeleteContext; SpApplyControlTokenFn *ApplyControlToken; SpGetUserInfoFn *GetUserInfo; SpGetExtendedInformationFn *GetExtendedInformation; SpQueryContextAttributesFn *SpQueryContextAttributes; SpAddCredentialsFn *SpAddCredentials; SpSetExtendedInformationFn *SetExtendedInformation; /* Packages with version SECPKG_INTERFACE_VERSION end here */ SpSetContextAttributesFn *SetContextAttributes; /* Packages with version SECPKG_INTERFACE_VERSION_2 end here */ SpSetCredentialsAttributesFn *SetCredentialsAttributes; /* Packages with version SECPKG_INTERFACE_VERSION_3 end here */ SpChangeAccountPasswordFn *ChangeAccountPassword; /* Packages with version SECPKG_INTERFACE_VERSION_4 end here */ SpQueryMetaDataFn *QueryMetaData; SpExchangeMetaDataFn *ExchangeMetaData; SpGetCredUIContextFn *GetCredUIContext; SpUpdateCredentialsFn *UpdateCredentials; /* Packages with version SECPKG_INTERFACE_VERSION_5 end here */ SpValidateTargetInfoFn *ValidateTargetInfo; /* Packages with version SECPKG_INTERFACE_VERSION_6 end here */ LSA_AP_POST_LOGON_USER* PostLogonUser; /* Packages with version SECPKG_INTERFACE_VERSION_7 end here */ } SECPKG_FUNCTION_TABLE, *PSECPKG_FUNCTION_TABLE; /* dispatch tables of user-mode functions implemented by SSP/AP */ typedef struct SECPKG_USER_FUNCTION_TABLE { SpInstanceInitFn *InstanceInit; SpInitUserModeContextFn *InitUserModeContext; SpMakeSignatureFn *MakeSignature; SpVerifySignatureFn *VerifySignature; SpSealMessageFn *SealMessage; SpUnsealMessageFn *UnsealMessage; SpGetContextTokenFn *GetContextToken; SpQueryContextAttributesFn *SpQueryContextAttributes; SpCompleteAuthTokenFn *CompleteAuthToken; SpDeleteContextFn *DeleteUserModeContext; SpFormatCredentialsFn *FormatCredentials; SpMarshallSupplementalCredsFn *MarshallSupplementalCreds; SpExportSecurityContextFn *ExportContext; SpImportSecurityContextFn *ImportContext; } SECPKG_USER_FUNCTION_TABLE, *PSECPKG_USER_FUNCTION_TABLE; /* LSA-mode entry point to SSP/APs */ typedef NTSTATUS (NTAPI *SpLsaModeInitializeFn)(ULONG, PULONG, PSECPKG_FUNCTION_TABLE *, PULONG); /* User-mode entry point to SSP/APs */ typedef NTSTATUS (WINAPI *SpUserModeInitializeFn)(ULONG, PULONG, PSECPKG_USER_FUNCTION_TABLE *, PULONG); #ifdef __cplusplus } #endif #endif /* _NTSECPKG_H */ ================================================ FILE: wine/windows/ntstatus.h ================================================ /* * Win32 definitions for Windows NT * * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_NTSTATUS_H #define __WINE_NTSTATUS_H #ifndef WIN32_NO_STATUS /* * Exception codes */ #define STATUS_SUCCESS ((NTSTATUS) 0x00000000) #define STATUS_SEVERITY_SUCCESS ((NTSTATUS) 0x00000000) #define STATUS_SEVERITY_INFORMATIONAL ((NTSTATUS) 0x00000001) #define STATUS_SEVERITY_WARNING ((NTSTATUS) 0x00000002) #define STATUS_SEVERITY_ERROR ((NTSTATUS) 0x00000003) #define STATUS_WAIT_0 ((NTSTATUS) 0x00000000) #define STATUS_WAIT_1 ((NTSTATUS) 0x00000001) #define STATUS_WAIT_2 ((NTSTATUS) 0x00000002) #define STATUS_WAIT_3 ((NTSTATUS) 0x00000003) #define STATUS_WAIT_63 ((NTSTATUS) 0x0000003f) #define STATUS_ABANDONED ((NTSTATUS) 0x00000080) #define STATUS_ABANDONED_WAIT_0 ((NTSTATUS) 0x00000080) #define STATUS_ABANDONED_WAIT_63 ((NTSTATUS) 0x000000BF) #define STATUS_USER_APC ((NTSTATUS) 0x000000C0) #define STATUS_KERNEL_APC ((NTSTATUS) 0x00000100) #define STATUS_ALERTED ((NTSTATUS) 0x00000101) #define STATUS_TIMEOUT ((NTSTATUS) 0x00000102) #define STATUS_PENDING ((NTSTATUS) 0x00000103) #define STATUS_REPARSE ((NTSTATUS) 0x00000104) #define STATUS_MORE_ENTRIES ((NTSTATUS) 0x00000105) #define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106) #define STATUS_SOME_NOT_MAPPED ((NTSTATUS) 0x00000107) #define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS) 0x00000108) #define STATUS_VOLUME_MOUNTED ((NTSTATUS) 0x00000109) #define STATUS_RXACT_COMMITTED ((NTSTATUS) 0x0000010A) #define STATUS_NOTIFY_CLEANUP ((NTSTATUS) 0x0000010B) #define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS) 0x0000010C) #define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS) 0x0000010D) #define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS) 0x0000010E) #define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS) 0x00000110) #define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS) 0x00000111) #define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS) 0x00000112) #define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS) 0x00000113) #define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS) 0x00000114) #define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS) 0x00000115) #define STATUS_CRASH_DUMP ((NTSTATUS) 0x00000116) #define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS) 0x00000117) #define STATUS_REPARSE_OBJECT ((NTSTATUS) 0x00000118) #define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS) 0x00000119) #define STATUS_TRANSLATION_COMPLETE ((NTSTATUS) 0x00000120) #define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS) 0x00000121) #define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS) 0x00000122) #define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS) 0x00000123) #define STATUS_PROCESS_IN_JOB ((NTSTATUS) 0x00000124) #define STATUS_VOLSNAP_HIBERNATE_READY ((NTSTATUS) 0x00000125) #define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ((NTSTATUS) 0x00000126) #define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS) 0x40000000) #define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS) 0x40000001) #define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS) 0x40000002) #define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS) 0x40000003) #define STATUS_RXACT_STATE_CREATED ((NTSTATUS) 0x40000004) #define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS) 0x40000005) #define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS) 0x40000006) #define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS) 0x40000007) #define STATUS_SERIAL_MORE_WRITES ((NTSTATUS) 0x40000008) #define STATUS_REGISTRY_RECOVERED ((NTSTATUS) 0x40000009) #define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS) 0x4000000A) #define STATUS_FT_WRITE_RECOVERY ((NTSTATUS) 0x4000000B) #define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS) 0x4000000C) #define STATUS_NULL_LM_PASSWORD ((NTSTATUS) 0x4000000D) #define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS) 0x4000000E) #define STATUS_RECEIVE_PARTIAL ((NTSTATUS) 0x4000000F) #define STATUS_RECEIVE_EXPEDITED ((NTSTATUS) 0x40000010) #define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS) 0x40000011) #define STATUS_EVENT_DONE ((NTSTATUS) 0x40000012) #define STATUS_EVENT_PENDING ((NTSTATUS) 0x40000013) #define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS) 0x40000014) #define STATUS_FATAL_APP_EXIT ((NTSTATUS) 0x40000015) #define STATUS_PREDEFINED_HANDLE ((NTSTATUS) 0x40000016) #define STATUS_WAS_UNLOCKED ((NTSTATUS) 0x40000017) #define STATUS_SERVICE_NOTIFICATION ((NTSTATUS) 0x40000018) #define STATUS_WAS_LOCKED ((NTSTATUS) 0x40000019) #define STATUS_LOG_HARD_ERROR ((NTSTATUS) 0x4000001A) #define STATUS_ALREADY_WIN32 ((NTSTATUS) 0x4000001B) #define STATUS_WX86_UNSIMULATE ((NTSTATUS) 0x4000001C) #define STATUS_WX86_CONTINUE ((NTSTATUS) 0x4000001D) #define STATUS_WX86_SINGLE_STEP ((NTSTATUS) 0x4000001E) #define STATUS_WX86_BREAKPOINT ((NTSTATUS) 0x4000001F) #define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS) 0x40000020) #define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS) 0x40000021) #define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS) 0x40000022) #define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS) 0x40000023) #define STATUS_NO_YIELD_PERFORMED ((NTSTATUS) 0x40000024) #define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS) 0x40000025) #define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS) 0x40000026) #define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS) 0x40000027) #define STATUS_WX86_CREATEWX86TIB ((NTSTATUS) 0x40000028) #define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS) 0x40000029) #define STATUS_HIBERNATED ((NTSTATUS) 0x4000002A) #define STATUS_RESUME_HIBERNATION ((NTSTATUS) 0x4000002B) #define STATUS_FIRMWARE_UPDATED ((NTSTATUS) 0x4000002C) #define STATUS_WAKE_SYSTEM ((NTSTATUS) 0x40000294) #define STATUS_DS_SHUTTING_DOWN ((NTSTATUS) 0x40000370) #define RPC_NT_UUID_LOCAL_ONLY ((NTSTATUS) 0x40020056) #define RPC_NT_SEND_INCOMPLETE ((NTSTATUS) 0x400200AF) #define STATUS_CTX_CDM_CONNECT ((NTSTATUS) 0x400A0004) #define STATUS_CTX_CDM_DISCONNECT ((NTSTATUS) 0x400A0005) #define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS) 0x4015000D) #define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS) 0x80000001) #define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS) 0x80000002) #define STATUS_BREAKPOINT ((NTSTATUS) 0x80000003) #define STATUS_SINGLE_STEP ((NTSTATUS) 0x80000004) #define STATUS_BUFFER_OVERFLOW ((NTSTATUS) 0x80000005) #define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006) #define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS) 0x80000007) #define STATUS_HANDLES_CLOSED ((NTSTATUS) 0x8000000A) #define STATUS_NO_INHERITANCE ((NTSTATUS) 0x8000000B) #define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS) 0x8000000C) #define STATUS_PARTIAL_COPY ((NTSTATUS) 0x8000000D) #define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS) 0x8000000E) #define STATUS_DEVICE_POWERED_OFF ((NTSTATUS) 0x8000000F) #define STATUS_DEVICE_OFF_LINE ((NTSTATUS) 0x80000010) #define STATUS_DEVICE_BUSY ((NTSTATUS) 0x80000011) #define STATUS_NO_MORE_EAS ((NTSTATUS) 0x80000012) #define STATUS_INVALID_EA_NAME ((NTSTATUS) 0x80000013) #define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS) 0x80000014) #define STATUS_INVALID_EA_FLAG ((NTSTATUS) 0x80000015) #define STATUS_VERIFY_REQUIRED ((NTSTATUS) 0x80000016) #define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS) 0x80000017) #define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS) 0x80000018) #define STATUS_NO_MORE_ENTRIES ((NTSTATUS) 0x8000001A) #define STATUS_FILEMARK_DETECTED ((NTSTATUS) 0x8000001B) #define STATUS_MEDIA_CHANGED ((NTSTATUS) 0x8000001C) #define STATUS_BUS_RESET ((NTSTATUS) 0x8000001D) #define STATUS_END_OF_MEDIA ((NTSTATUS) 0x8000001E) #define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS) 0x8000001F) #define STATUS_MEDIA_CHECK ((NTSTATUS) 0x80000020) #define STATUS_SETMARK_DETECTED ((NTSTATUS) 0x80000021) #define STATUS_NO_DATA_DETECTED ((NTSTATUS) 0x80000022) #define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000023) #define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000024) #define STATUS_ALREADY_DISCONNECTED ((NTSTATUS) 0x80000025) #define STATUS_LONGJUMP ((NTSTATUS) 0x80000026) #define STATUS_CLEANER_CARTRIDGE_INSTALLED ((NTSTATUS) 0x80000027) #define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS) 0x80000028) #define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS) 0x80000029) #define STATUS_REGISTRY_HIVE_RECOVERED ((NTSTATUS) 0x8000002A) #define STATUS_DLL_MIGHT_BE_INSECURE ((NTSTATUS) 0x8000002B) #define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS) 0x8000002C) #define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS) 0x80000288) #define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS) 0x80000289) #define STATUS_CLUSTER_NODE_ALREADY_UP ((NTSTATUS) 0x80130001) #define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS) 0x80130002) #define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE ((NTSTATUS) 0x80130003) #define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE ((NTSTATUS) 0x80130004) #define STATUS_CLUSTER_NODE_ALREADY_MEMBER ((NTSTATUS) 0x80130005) #define STATUS_UNSUCCESSFUL ((NTSTATUS) 0xC0000001) #define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xC0000002) #define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xC0000003) #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xC0000004) #define STATUS_ACCESS_VIOLATION ((NTSTATUS) 0xC0000005) #define STATUS_IN_PAGE_ERROR ((NTSTATUS) 0xC0000006) #define STATUS_PAGEFILE_QUOTA ((NTSTATUS) 0xC0000007) #define STATUS_INVALID_HANDLE ((NTSTATUS) 0xC0000008) #define STATUS_BAD_INITIAL_STACK ((NTSTATUS) 0xC0000009) #define STATUS_BAD_INITIAL_PC ((NTSTATUS) 0xC000000A) #define STATUS_INVALID_CID ((NTSTATUS) 0xC000000B) #define STATUS_TIMER_NOT_CANCELED ((NTSTATUS) 0xC000000C) #define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xC000000D) #define STATUS_NO_SUCH_DEVICE ((NTSTATUS) 0xC000000E) #define STATUS_NO_SUCH_FILE ((NTSTATUS) 0xC000000F) #define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xC0000010) #define STATUS_END_OF_FILE ((NTSTATUS) 0xC0000011) #define STATUS_WRONG_VOLUME ((NTSTATUS) 0xC0000012) #define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xC0000013) #define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS) 0xC0000014) #define STATUS_NONEXISTENT_SECTOR ((NTSTATUS) 0xC0000015) #define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS) 0xC0000016) #define STATUS_NO_MEMORY ((NTSTATUS) 0xC0000017) #define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS) 0xC0000018) #define STATUS_NOT_MAPPED_VIEW ((NTSTATUS) 0xC0000019) #define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS) 0xC000001A) #define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS) 0xC000001B) #define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS) 0xC000001C) #define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS) 0xC000001D) #define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS) 0xC000001E) #define STATUS_INVALID_VIEW_SIZE ((NTSTATUS) 0xC000001F) #define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS) 0xC0000020) #define STATUS_ALREADY_COMMITTED ((NTSTATUS) 0xC0000021) #define STATUS_ACCESS_DENIED ((NTSTATUS) 0xC0000022) #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xC0000023) #define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS) 0xC0000024) #define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS) 0xC0000025) #define STATUS_INVALID_DISPOSITION ((NTSTATUS) 0xC0000026) #define STATUS_UNWIND ((NTSTATUS) 0xC0000027) #define STATUS_BAD_STACK ((NTSTATUS) 0xC0000028) #define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS) 0xC0000029) #define STATUS_NOT_LOCKED ((NTSTATUS) 0xC000002A) #define STATUS_PARITY_ERROR ((NTSTATUS) 0xC000002B) #define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS) 0xC000002C) #define STATUS_NOT_COMMITTED ((NTSTATUS) 0xC000002D) #define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS) 0xC000002E) #define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS) 0xC000002F) #define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS) 0xC0000030) #define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS) 0xC0000031) #define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS) 0xC0000032) #define STATUS_OBJECT_NAME_INVALID ((NTSTATUS) 0xC0000033) #define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xC0000034) #define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS) 0xC0000035) #define STATUS_PORT_DISCONNECTED ((NTSTATUS) 0xC0000037) #define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS) 0xC0000038) #define STATUS_OBJECT_PATH_INVALID ((NTSTATUS) 0xC0000039) #define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS) 0xC000003A) #define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS) 0xC000003B) #define STATUS_DATA_OVERRUN ((NTSTATUS) 0xC000003C) #define STATUS_DATA_LATE_ERROR ((NTSTATUS) 0xC000003D) #define STATUS_DATA_ERROR ((NTSTATUS) 0xC000003E) #define STATUS_CRC_ERROR ((NTSTATUS) 0xC000003F) #define STATUS_SECTION_TOO_BIG ((NTSTATUS) 0xC0000040) #define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS) 0xC0000041) #define STATUS_INVALID_PORT_HANDLE ((NTSTATUS) 0xC0000042) #define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xC0000043) #define STATUS_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000044) #define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS) 0xC0000045) #define STATUS_MUTANT_NOT_OWNED ((NTSTATUS) 0xC0000046) #define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS) 0xC0000047) #define STATUS_PORT_ALREADY_SET ((NTSTATUS) 0xC0000048) #define STATUS_SECTION_NOT_IMAGE ((NTSTATUS) 0xC0000049) #define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS) 0xC000004A) #define STATUS_THREAD_IS_TERMINATING ((NTSTATUS) 0xC000004B) #define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS) 0xC000004C) #define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS) 0xC000004D) #define STATUS_SECTION_PROTECTION ((NTSTATUS) 0xC000004E) #define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS) 0xC000004F) #define STATUS_EA_TOO_LARGE ((NTSTATUS) 0xC0000050) #define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS) 0xC0000051) #define STATUS_NO_EAS_ON_FILE ((NTSTATUS) 0xC0000052) #define STATUS_EA_CORRUPT_ERROR ((NTSTATUS) 0xC0000053) #define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS) 0xC0000054) #define STATUS_LOCK_NOT_GRANTED ((NTSTATUS) 0xC0000055) #define STATUS_DELETE_PENDING ((NTSTATUS) 0xC0000056) #define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS) 0xC0000057) #define STATUS_UNKNOWN_REVISION ((NTSTATUS) 0xC0000058) #define STATUS_REVISION_MISMATCH ((NTSTATUS) 0xC0000059) #define STATUS_INVALID_OWNER ((NTSTATUS) 0xC000005A) #define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS) 0xC000005B) #define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS) 0xC000005C) #define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS) 0xC000005D) #define STATUS_NO_LOGON_SERVERS ((NTSTATUS) 0xC000005E) #define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS) 0xC000005F) #define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS) 0xC0000060) #define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS) 0xC0000061) #define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS) 0xC0000062) #define STATUS_USER_EXISTS ((NTSTATUS) 0xC0000063) #define STATUS_NO_SUCH_USER ((NTSTATUS) 0xC0000064) #define STATUS_GROUP_EXISTS ((NTSTATUS) 0xC0000065) #define STATUS_NO_SUCH_GROUP ((NTSTATUS) 0xC0000066) #define STATUS_MEMBER_IN_GROUP ((NTSTATUS) 0xC0000067) #define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS) 0xC0000068) #define STATUS_LAST_ADMIN ((NTSTATUS) 0xC0000069) #define STATUS_WRONG_PASSWORD ((NTSTATUS) 0xC000006A) #define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS) 0xC000006B) #define STATUS_PASSWORD_RESTRICTION ((NTSTATUS) 0xC000006C) #define STATUS_LOGON_FAILURE ((NTSTATUS) 0xC000006D) #define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS) 0xC000006E) #define STATUS_INVALID_LOGON_HOURS ((NTSTATUS) 0xC000006F) #define STATUS_INVALID_WORKSTATION ((NTSTATUS) 0xC0000070) #define STATUS_PASSWORD_EXPIRED ((NTSTATUS) 0xC0000071) #define STATUS_ACCOUNT_DISABLED ((NTSTATUS) 0xC0000072) #define STATUS_NONE_MAPPED ((NTSTATUS) 0xC0000073) #define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS) 0xC0000074) #define STATUS_LUIDS_EXHAUSTED ((NTSTATUS) 0xC0000075) #define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS) 0xC0000076) #define STATUS_INVALID_ACL ((NTSTATUS) 0xC0000077) #define STATUS_INVALID_SID ((NTSTATUS) 0xC0000078) #define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS) 0xC0000079) #define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS) 0xC000007A) #define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS) 0xC000007B) #define STATUS_NO_TOKEN ((NTSTATUS) 0xC000007C) #define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS) 0xC000007D) #define STATUS_RANGE_NOT_LOCKED ((NTSTATUS) 0xC000007E) #define STATUS_DISK_FULL ((NTSTATUS) 0xC000007F) #define STATUS_SERVER_DISABLED ((NTSTATUS) 0xC0000080) #define STATUS_SERVER_NOT_DISABLED ((NTSTATUS) 0xC0000081) #define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS) 0xC0000082) #define STATUS_GUIDS_EXHAUSTED ((NTSTATUS) 0xC0000083) #define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS) 0xC0000084) #define STATUS_AGENTS_EXHAUSTED ((NTSTATUS) 0xC0000085) #define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS) 0xC0000086) #define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS) 0xC0000087) #define STATUS_NOT_MAPPED_DATA ((NTSTATUS) 0xC0000088) #define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS) 0xC0000089) #define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS) 0xC000008A) #define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS) 0xC000008B) #define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS) 0xC000008C) #define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS) 0xC000008D) #define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS) 0xC000008E) #define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS) 0xC000008F) #define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS) 0xC0000090) #define STATUS_FLOAT_OVERFLOW ((NTSTATUS) 0xC0000091) #define STATUS_FLOAT_STACK_CHECK ((NTSTATUS) 0xC0000092) #define STATUS_FLOAT_UNDERFLOW ((NTSTATUS) 0xC0000093) #define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS) 0xC0000094) #define STATUS_INTEGER_OVERFLOW ((NTSTATUS) 0xC0000095) #define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS) 0xC0000096) #define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS) 0xC0000097) #define STATUS_FILE_INVALID ((NTSTATUS) 0xC0000098) #define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS) 0xC0000099) #define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS) 0xC000009A) #define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS) 0xC000009B) #define STATUS_DEVICE_DATA_ERROR ((NTSTATUS) 0xC000009C) #define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS) 0xC000009D) #define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS) 0xC000009E) #define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS) 0xC000009F) #define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS) 0xC00000A0) #define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xC00000A1) #define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS) 0xC00000A2) #define STATUS_DEVICE_NOT_READY ((NTSTATUS) 0xC00000A3) #define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS) 0xC00000A4) #define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS) 0xC00000A5) #define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS) 0xC00000A6) #define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS) 0xC00000A7) #define STATUS_BAD_TOKEN_TYPE ((NTSTATUS) 0xC00000A8) #define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS) 0xC00000A9) #define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS) 0xC00000AA) #define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xC00000AB) #define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xC00000AC) #define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xC00000AD) #define STATUS_PIPE_BUSY ((NTSTATUS) 0xC00000AE) #define STATUS_ILLEGAL_FUNCTION ((NTSTATUS) 0xC00000AF) #define STATUS_PIPE_DISCONNECTED ((NTSTATUS) 0xC00000B0) #define STATUS_PIPE_CLOSING ((NTSTATUS) 0xC00000B1) #define STATUS_PIPE_CONNECTED ((NTSTATUS) 0xC00000B2) #define STATUS_PIPE_LISTENING ((NTSTATUS) 0xC00000B3) #define STATUS_INVALID_READ_MODE ((NTSTATUS) 0xC00000B4) #define STATUS_IO_TIMEOUT ((NTSTATUS) 0xC00000B5) #define STATUS_FILE_FORCED_CLOSED ((NTSTATUS) 0xC00000B6) #define STATUS_PROFILING_NOT_STARTED ((NTSTATUS) 0xC00000B7) #define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS) 0xC00000B8) #define STATUS_COULD_NOT_INTERPRET ((NTSTATUS) 0xC00000B9) #define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS) 0xC00000BA) #define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xC00000BB) #define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS) 0xC00000BC) #define STATUS_DUPLICATE_NAME ((NTSTATUS) 0xC00000BD) #define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xC00000BE) #define STATUS_NETWORK_BUSY ((NTSTATUS) 0xC00000BF) #define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS) 0xC00000C0) #define STATUS_TOO_MANY_COMMANDS ((NTSTATUS) 0xC00000C1) #define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS) 0xC00000C2) #define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xC00000C3) #define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS) 0xC00000C4) #define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS) 0xC00000C5) #define STATUS_PRINT_QUEUE_FULL ((NTSTATUS) 0xC00000C6) #define STATUS_NO_SPOOL_SPACE ((NTSTATUS) 0xC00000C7) #define STATUS_PRINT_CANCELLED ((NTSTATUS) 0xC00000C8) #define STATUS_NETWORK_NAME_DELETED ((NTSTATUS) 0xC00000C9) #define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS) 0xC00000CA) #define STATUS_BAD_DEVICE_TYPE ((NTSTATUS) 0xC00000CB) #define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xC00000CC) #define STATUS_TOO_MANY_NAMES ((NTSTATUS) 0xC00000CD) #define STATUS_TOO_MANY_SESSIONS ((NTSTATUS) 0xC00000CE) #define STATUS_SHARING_PAUSED ((NTSTATUS) 0xC00000CF) #define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS) 0xC00000D0) #define STATUS_REDIRECTOR_PAUSED ((NTSTATUS) 0xC00000D1) #define STATUS_NET_WRITE_FAULT ((NTSTATUS) 0xC00000D2) #define STATUS_PROFILING_AT_LIMIT ((NTSTATUS) 0xC00000D3) #define STATUS_NOT_SAME_DEVICE ((NTSTATUS) 0xC00000D4) #define STATUS_FILE_RENAMED ((NTSTATUS) 0xC00000D5) #define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS) 0xC00000D6) #define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS) 0xC00000D7) #define STATUS_CANT_WAIT ((NTSTATUS) 0xC00000D8) #define STATUS_PIPE_EMPTY ((NTSTATUS) 0xC00000D9) #define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS) 0xC00000DA) #define STATUS_CANT_TERMINATE_SELF ((NTSTATUS) 0xC00000DB) #define STATUS_INVALID_SERVER_STATE ((NTSTATUS) 0xC00000DC) #define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS) 0xC00000DD) #define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS) 0xC00000DE) #define STATUS_NO_SUCH_DOMAIN ((NTSTATUS) 0xC00000DF) #define STATUS_DOMAIN_EXISTS ((NTSTATUS) 0xC00000E0) #define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS) 0xC00000E1) #define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS) 0xC00000E2) #define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS) 0xC00000E3) #define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS) 0xC00000E4) #define STATUS_INTERNAL_ERROR ((NTSTATUS) 0xC00000E5) #define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS) 0xC00000E6) #define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS) 0xC00000E7) #define STATUS_INVALID_USER_BUFFER ((NTSTATUS) 0xC00000E8) #define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS) 0xC00000E9) #define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS) 0xC00000EA) #define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS) 0xC00000EB) #define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS) 0xC00000EC) #define STATUS_NOT_LOGON_PROCESS ((NTSTATUS) 0xC00000ED) #define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS) 0xC00000EE) #define STATUS_INVALID_PARAMETER_1 ((NTSTATUS) 0xC00000EF) #define STATUS_INVALID_PARAMETER_2 ((NTSTATUS) 0xC00000F0) #define STATUS_INVALID_PARAMETER_3 ((NTSTATUS) 0xC00000F1) #define STATUS_INVALID_PARAMETER_4 ((NTSTATUS) 0xC00000F2) #define STATUS_INVALID_PARAMETER_5 ((NTSTATUS) 0xC00000F3) #define STATUS_INVALID_PARAMETER_6 ((NTSTATUS) 0xC00000F4) #define STATUS_INVALID_PARAMETER_7 ((NTSTATUS) 0xC00000F5) #define STATUS_INVALID_PARAMETER_8 ((NTSTATUS) 0xC00000F6) #define STATUS_INVALID_PARAMETER_9 ((NTSTATUS) 0xC00000F7) #define STATUS_INVALID_PARAMETER_10 ((NTSTATUS) 0xC00000F8) #define STATUS_INVALID_PARAMETER_11 ((NTSTATUS) 0xC00000F9) #define STATUS_INVALID_PARAMETER_12 ((NTSTATUS) 0xC00000FA) #define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS) 0xC00000FB) #define STATUS_REDIRECTOR_STARTED ((NTSTATUS) 0xC00000FC) #define STATUS_STACK_OVERFLOW ((NTSTATUS) 0xC00000FD) #define STATUS_NO_SUCH_PACKAGE ((NTSTATUS) 0xC00000FE) #define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS) 0xC00000FF) #define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS) 0xC0000100) #define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xC0000101) #define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS) 0xC0000102) #define STATUS_NOT_A_DIRECTORY ((NTSTATUS) 0xC0000103) #define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS) 0xC0000104) #define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS) 0xC0000105) #define STATUS_NAME_TOO_LONG ((NTSTATUS) 0xC0000106) #define STATUS_FILES_OPEN ((NTSTATUS) 0xC0000107) #define STATUS_CONNECTION_IN_USE ((NTSTATUS) 0xC0000108) #define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS) 0xC0000109) #define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS) 0xC000010A) #define STATUS_INVALID_LOGON_TYPE ((NTSTATUS) 0xC000010B) #define STATUS_NO_GUID_TRANSLATION ((NTSTATUS) 0xC000010C) #define STATUS_CANNOT_IMPERSONATE ((NTSTATUS) 0xC000010D) #define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS) 0xC000010E) #define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS) 0xC000010F) #define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS) 0xC0000110) #define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS) 0xC0000111) #define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS) 0xC0000112) #define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS) 0xC0000113) #define STATUS_ABIOS_INVALID_LID ((NTSTATUS) 0xC0000114) #define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS) 0xC0000115) #define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS) 0xC0000116) #define STATUS_NO_LDT ((NTSTATUS) 0xC0000117) #define STATUS_INVALID_LDT_SIZE ((NTSTATUS) 0xC0000118) #define STATUS_INVALID_LDT_OFFSET ((NTSTATUS) 0xC0000119) #define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS) 0xC000011A) #define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS) 0xC000011B) #define STATUS_RXACT_INVALID_STATE ((NTSTATUS) 0xC000011C) #define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS) 0xC000011D) #define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS) 0xC000011E) #define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS) 0xC000011F) #define STATUS_CANCELLED ((NTSTATUS) 0xC0000120) #define STATUS_CANNOT_DELETE ((NTSTATUS) 0xC0000121) #define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS) 0xC0000122) #define STATUS_FILE_DELETED ((NTSTATUS) 0xC0000123) #define STATUS_SPECIAL_ACCOUNT ((NTSTATUS) 0xC0000124) #define STATUS_SPECIAL_GROUP ((NTSTATUS) 0xC0000125) #define STATUS_SPECIAL_USER ((NTSTATUS) 0xC0000126) #define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS) 0xC0000127) #define STATUS_FILE_CLOSED ((NTSTATUS) 0xC0000128) #define STATUS_TOO_MANY_THREADS ((NTSTATUS) 0xC0000129) #define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS) 0xC000012A) #define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS) 0xC000012B) #define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS) 0xC000012C) #define STATUS_COMMITMENT_LIMIT ((NTSTATUS) 0xC000012D) #define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS) 0xC000012E) #define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS) 0xC000012F) #define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS) 0xC0000130) #define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS) 0xC0000131) #define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS) 0xC0000132) #define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS) 0xC0000133) #define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS) 0xC0000134) #define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xC0000135) #define STATUS_OPEN_FAILED ((NTSTATUS) 0xC0000136) #define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS) 0xC0000137) #define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS) 0xC0000138) #define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000139) #define STATUS_CONTROL_C_EXIT ((NTSTATUS) 0xC000013A) #define STATUS_LOCAL_DISCONNECT ((NTSTATUS) 0xC000013B) #define STATUS_REMOTE_DISCONNECT ((NTSTATUS) 0xC000013C) #define STATUS_REMOTE_RESOURCES ((NTSTATUS) 0xC000013D) #define STATUS_LINK_FAILED ((NTSTATUS) 0xC000013E) #define STATUS_LINK_TIMEOUT ((NTSTATUS) 0xC000013F) #define STATUS_INVALID_CONNECTION ((NTSTATUS) 0xC0000140) #define STATUS_INVALID_ADDRESS ((NTSTATUS) 0xC0000141) #define STATUS_DLL_INIT_FAILED ((NTSTATUS) 0xC0000142) #define STATUS_MISSING_SYSTEMFILE ((NTSTATUS) 0xC0000143) #define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS) 0xC0000144) #define STATUS_APP_INIT_FAILURE ((NTSTATUS) 0xC0000145) #define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS) 0xC0000146) #define STATUS_NO_PAGEFILE ((NTSTATUS) 0xC0000147) #define STATUS_INVALID_LEVEL ((NTSTATUS) 0xC0000148) #define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS) 0xC0000149) #define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS) 0xC000014A) #define STATUS_PIPE_BROKEN ((NTSTATUS) 0xC000014B) #define STATUS_REGISTRY_CORRUPT ((NTSTATUS) 0xC000014C) #define STATUS_REGISTRY_IO_FAILED ((NTSTATUS) 0xC000014D) #define STATUS_NO_EVENT_PAIR ((NTSTATUS) 0xC000014E) #define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS) 0xC000014F) #define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS) 0xC0000150) #define STATUS_NO_SUCH_ALIAS ((NTSTATUS) 0xC0000151) #define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS) 0xC0000152) #define STATUS_MEMBER_IN_ALIAS ((NTSTATUS) 0xC0000153) #define STATUS_ALIAS_EXISTS ((NTSTATUS) 0xC0000154) #define STATUS_LOGON_NOT_GRANTED ((NTSTATUS) 0xC0000155) #define STATUS_TOO_MANY_SECRETS ((NTSTATUS) 0xC0000156) #define STATUS_SECRET_TOO_LONG ((NTSTATUS) 0xC0000157) #define STATUS_INTERNAL_DB_ERROR ((NTSTATUS) 0xC0000158) #define STATUS_FULLSCREEN_MODE ((NTSTATUS) 0xC0000159) #define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS) 0xC000015A) #define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS) 0xC000015B) #define STATUS_NOT_REGISTRY_FILE ((NTSTATUS) 0xC000015C) #define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000015D) #define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS) 0xC000015E) #define STATUS_FT_MISSING_MEMBER ((NTSTATUS) 0xC000015F) #define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS) 0xC0000160) #define STATUS_ILLEGAL_CHARACTER ((NTSTATUS) 0xC0000161) #define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS) 0xC0000162) #define STATUS_UNDEFINED_CHARACTER ((NTSTATUS) 0xC0000163) #define STATUS_FLOPPY_VOLUME ((NTSTATUS) 0xC0000164) #define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS) 0xC0000165) #define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS) 0xC0000166) #define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS) 0xC0000167) #define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS) 0xC0000168) #define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS) 0xC0000169) #define STATUS_DISK_OPERATION_FAILED ((NTSTATUS) 0xC000016A) #define STATUS_DISK_RESET_FAILED ((NTSTATUS) 0xC000016B) #define STATUS_SHARED_IRQ_BUSY ((NTSTATUS) 0xC000016C) #define STATUS_FT_ORPHANING ((NTSTATUS) 0xC000016D) #define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS) 0xC000016E) #define STATUS_PARTITION_FAILURE ((NTSTATUS) 0xC0000172) #define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS) 0xC0000173) #define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS) 0xC0000174) #define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS) 0xC0000175) #define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS) 0xC0000176) #define STATUS_EOM_OVERFLOW ((NTSTATUS) 0xC0000177) #define STATUS_NO_MEDIA ((NTSTATUS) 0xC0000178) #define STATUS_NO_SUCH_MEMBER ((NTSTATUS) 0xC000017A) #define STATUS_INVALID_MEMBER ((NTSTATUS) 0xC000017B) #define STATUS_KEY_DELETED ((NTSTATUS) 0xC000017C) #define STATUS_NO_LOG_SPACE ((NTSTATUS) 0xC000017D) #define STATUS_TOO_MANY_SIDS ((NTSTATUS) 0xC000017E) #define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000017F) #define STATUS_KEY_HAS_CHILDREN ((NTSTATUS) 0xC0000180) #define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS) 0xC0000181) #define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS) 0xC0000182) #define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS) 0xC0000183) #define STATUS_INVALID_DEVICE_STATE ((NTSTATUS) 0xC0000184) #define STATUS_IO_DEVICE_ERROR ((NTSTATUS) 0xC0000185) #define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS) 0xC0000186) #define STATUS_BACKUP_CONTROLLER ((NTSTATUS) 0xC0000187) #define STATUS_LOG_FILE_FULL ((NTSTATUS) 0xC0000188) #define STATUS_TOO_LATE ((NTSTATUS) 0xC0000189) #define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS) 0xC000018A) #define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS) 0xC000018B) #define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS) 0xC000018C) #define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS) 0xC000018D) #define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS) 0xC000018E) #define STATUS_EVENTLOG_CANT_START ((NTSTATUS) 0xC000018F) #define STATUS_TRUST_FAILURE ((NTSTATUS) 0xC0000190) #define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS) 0xC0000191) #define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS) 0xC0000192) #define STATUS_ACCOUNT_EXPIRED ((NTSTATUS) 0xC0000193) #define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS) 0xC0000194) #define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS) 0xC0000195) #define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS) 0xC0000196) #define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS) 0xC0000197) #define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS) 0xC0000198) #define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS) 0xC0000199) #define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS) 0xC000019A) #define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS) 0xC000019B) #define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS) 0xC000019C) #define STATUS_NO_USER_SESSION_KEY ((NTSTATUS) 0xC0000202) #define STATUS_USER_SESSION_DELETED ((NTSTATUS) 0xC0000203) #define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS) 0xC0000204) #define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS) 0xC0000205) #define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS) 0xC0000206) #define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS) 0xC0000207) #define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS) 0xC0000208) #define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS) 0xC0000209) #define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS) 0xC000020A) #define STATUS_ADDRESS_CLOSED ((NTSTATUS) 0xC000020B) #define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS) 0xC000020C) #define STATUS_CONNECTION_RESET ((NTSTATUS) 0xC000020D) #define STATUS_TOO_MANY_NODES ((NTSTATUS) 0xC000020E) #define STATUS_TRANSACTION_ABORTED ((NTSTATUS) 0xC000020F) #define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS) 0xC0000210) #define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS) 0xC0000211) #define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS) 0xC0000212) #define STATUS_TRANSACTION_RESPONDED ((NTSTATUS) 0xC0000213) #define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS) 0xC0000214) #define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS) 0xC0000215) #define STATUS_NOT_SERVER_SESSION ((NTSTATUS) 0xC0000216) #define STATUS_NOT_CLIENT_SESSION ((NTSTATUS) 0xC0000217) #define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS) 0xC0000218) #define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS) 0xC0000219) #define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS) 0xC000021A) #define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS) 0xC000021B) #define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS) 0xC000021C) #define STATUS_VDM_HARD_ERROR ((NTSTATUS) 0xC000021D) #define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS) 0xC000021E) #define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS) 0xC000021F) #define STATUS_MAPPED_ALIGNMENT ((NTSTATUS) 0xC0000220) #define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS) 0xC0000221) #define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS) 0xC0000222) #define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS) 0xC0000223) #define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS) 0xC0000224) #define STATUS_NOT_FOUND ((NTSTATUS) 0xC0000225) #define STATUS_NOT_TINY_STREAM ((NTSTATUS) 0xC0000226) #define STATUS_RECOVERY_FAILURE ((NTSTATUS) 0xC0000227) #define STATUS_STACK_OVERFLOW_READ ((NTSTATUS) 0xC0000228) #define STATUS_FAIL_CHECK ((NTSTATUS) 0xC0000229) #define STATUS_DUPLICATE_OBJECTID ((NTSTATUS) 0xC000022A) #define STATUS_OBJECTID_EXISTS ((NTSTATUS) 0xC000022B) #define STATUS_CONVERT_TO_LARGE ((NTSTATUS) 0xC000022C) #define STATUS_RETRY ((NTSTATUS) 0xC000022D) #define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS) 0xC000022E) #define STATUS_ALLOCATE_BUCKET ((NTSTATUS) 0xC000022F) #define STATUS_PROPSET_NOT_FOUND ((NTSTATUS) 0xC0000230) #define STATUS_MARSHALL_OVERFLOW ((NTSTATUS) 0xC0000231) #define STATUS_INVALID_VARIANT ((NTSTATUS) 0xC0000232) #define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS) 0xC0000233) #define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS) 0xC0000234) #define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS) 0xC0000235) #define STATUS_CONNECTION_REFUSED ((NTSTATUS) 0xC0000236) #define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS) 0xC0000237) #define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS) 0xC0000238) #define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS) 0xC0000239) #define STATUS_CONNECTION_INVALID ((NTSTATUS) 0xC000023A) #define STATUS_CONNECTION_ACTIVE ((NTSTATUS) 0xC000023B) #define STATUS_NETWORK_UNREACHABLE ((NTSTATUS) 0xC000023C) #define STATUS_HOST_UNREACHABLE ((NTSTATUS) 0xC000023D) #define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS) 0xC000023E) #define STATUS_PORT_UNREACHABLE ((NTSTATUS) 0xC000023F) #define STATUS_REQUEST_ABORTED ((NTSTATUS) 0xC0000240) #define STATUS_CONNECTION_ABORTED ((NTSTATUS) 0xC0000241) #define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS) 0xC0000242) #define STATUS_USER_MAPPED_FILE ((NTSTATUS) 0xC0000243) #define STATUS_AUDIT_FAILED ((NTSTATUS) 0xC0000244) #define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS) 0xC0000245) #define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS) 0xC0000246) #define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS) 0xC0000247) #define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS) 0xC0000248) #define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS) 0xC0000249) #define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS) 0xC0000250) #define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xC0000251) #define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS) 0xC0000252) #define STATUS_LPC_REPLY_LOST ((NTSTATUS) 0xC0000253) #define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS) 0xC0000254) #define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS) 0xC0000255) #define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS) 0xC0000256) #define STATUS_PATH_NOT_COVERED ((NTSTATUS) 0xC0000257) #define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS) 0xC0000258) #define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000259) #define STATUS_PWD_TOO_SHORT ((NTSTATUS) 0xC000025A) #define STATUS_PWD_TOO_RECENT ((NTSTATUS) 0xC000025B) #define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS) 0xC000025C) #define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS) 0xC000025E) #define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS) 0xC000025F) #define STATUS_INVALID_HW_PROFILE ((NTSTATUS) 0xC0000260) #define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS) 0xC0000261) #define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS) 0xC0000262) #define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000263) #define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS) 0xC0000264) #define STATUS_TOO_MANY_LINKS ((NTSTATUS) 0xC0000265) #define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS) 0xC0000266) #define STATUS_FILE_IS_OFFLINE ((NTSTATUS) 0xC0000267) #define STATUS_EVALUATION_EXPIRATION ((NTSTATUS) 0xC0000268) #define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xC0000269) #define STATUS_LICENSE_VIOLATION ((NTSTATUS) 0xC000026A) #define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS) 0xC000026B) #define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS) 0xC000026C) #define STATUS_DFS_UNAVAILABLE ((NTSTATUS) 0xC000026D) #define STATUS_VOLUME_DISMOUNTED ((NTSTATUS) 0xC000026E) #define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS) 0xC000026F) #define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS) 0xC0000270) #define STATUS_VALIDATE_CONTINUE ((NTSTATUS) 0xC0000271) #define STATUS_NO_MATCH ((NTSTATUS) 0xC0000272) #define STATUS_NO_MORE_MATCHES ((NTSTATUS) 0xC0000273) #define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS) 0xC0000275) #define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS) 0xC0000276) #define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS) 0xC0000277) #define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS) 0xC0000278) #define STATUS_IO_REPARSE_TAG_NOT_HANDLED ((NTSTATUS) 0xC0000279) #define STATUS_REPARSE_POINT_NOT_RESOLVED ((NTSTATUS) 0xC0000280) #define STATUS_DIRECTORY_IS_A_REPARSE_POINT ((NTSTATUS) 0xC0000281) #define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS) 0xC0000282) #define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS) 0xC0000283) #define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS) 0xC0000284) #define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS) 0xC0000285) #define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS) 0xC0000286) #define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS) 0xC0000287) #define STATUS_ENCRYPTION_FAILED ((NTSTATUS) 0xC000028A) #define STATUS_DECRYPTION_FAILED ((NTSTATUS) 0xC000028B) #define STATUS_RANGE_NOT_FOUND ((NTSTATUS) 0xC000028C) #define STATUS_NO_RECOVERY_POLICY ((NTSTATUS) 0xC000028D) #define STATUS_NO_EFS ((NTSTATUS) 0xC000028E) #define STATUS_WRONG_EFS ((NTSTATUS) 0xC000028F) #define STATUS_NO_USER_KEYS ((NTSTATUS) 0xC0000290) #define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS) 0xC0000291) #define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS) 0xC0000292) #define STATUS_FILE_ENCRYPTED ((NTSTATUS) 0xC0000293) #define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS) 0xC0000295) #define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS) 0xC0000296) #define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS) 0xC0000297) #define STATUS_WMI_TRY_AGAIN ((NTSTATUS) 0xC0000298) #define STATUS_SHARED_POLICY ((NTSTATUS) 0xC0000299) #define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS) 0xC000029A) #define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS) 0xC000029B) #define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS) 0xC000029C) #define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS) 0xC000029D) #define STATUS_REMOTE_STORAGE_MEDIA_ERROR ((NTSTATUS) 0xC000029E) #define STATUS_NO_TRACKING_SERVICE ((NTSTATUS) 0xC000029F) #define STATUS_SERVER_SID_MISMATCH ((NTSTATUS) 0xC00002A0) #define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS) 0xC00002A1) #define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX ((NTSTATUS) 0xC00002A2) #define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED ((NTSTATUS) 0xC00002A3) #define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS ((NTSTATUS) 0xC00002A4) #define STATUS_DS_BUSY ((NTSTATUS) 0xC00002A5) #define STATUS_DS_UNAVAILABLE ((NTSTATUS) 0xC00002A6) #define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS) 0xC00002A7) #define STATUS_DS_NO_MORE_RIDS ((NTSTATUS) 0xC00002A8) #define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS) 0xC00002A9) #define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS) 0xC00002AA) #define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS) 0xC00002AB) #define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS) 0xC00002AC) #define STATUS_DS_CANT_ON_RDN ((NTSTATUS) 0xC00002AD) #define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS) 0xC00002AE) #define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS) 0xC00002AF) #define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS) 0xC00002B0) #define STATUS_DIRECTORY_SERVICE_REQUIRED ((NTSTATUS) 0xC00002B1) #define STATUS_REPARSE_ATTRIBUTE_CONFLICT ((NTSTATUS) 0xC00002B2) #define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS) 0xC00002B3) #define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS) 0xC00002B4) #define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS) 0xC00002B5) #define STATUS_DEVICE_REMOVED ((NTSTATUS) 0xC00002B6) #define STATUS_JOURNAL_DELETE_IN_PROGRESS ((NTSTATUS) 0xC00002B7) #define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS) 0xC00002B8) #define STATUS_NOINTERFACE ((NTSTATUS) 0xC00002B9) #define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS) 0xC00002C1) #define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS) 0xC00002C2) #define STATUS_MUTUAL_AUTHENTICATION_FAILED ((NTSTATUS) 0xC00002C3) #define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS) 0xC00002C4) #define STATUS_DATATYPE_MISALIGNMENT_ERROR ((NTSTATUS) 0xC00002C5) #define STATUS_WMI_READ_ONLY ((NTSTATUS) 0xC00002C6) #define STATUS_WMI_SET_FAILURE ((NTSTATUS) 0xC00002C7) #define STATUS_COMMITMENT_MINIMUM ((NTSTATUS) 0xC00002C8) #define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS) 0xC00002C9) #define STATUS_TRANSPORT_FULL ((NTSTATUS) 0xC00002CA) #define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS) 0xC00002CB) #define STATUS_ONLY_IF_CONNECTED ((NTSTATUS) 0xC00002CC) #define STATUS_DS_SENSITIVE_GROUP_VIOLATION ((NTSTATUS) 0xC00002CD) #define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS) 0xC00002CE) #define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS) 0xC00002CF) #define STATUS_DS_CANT_MOD_PRIMARYGROUPID ((NTSTATUS) 0xC00002D0) #define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS) 0xC00002D1) #define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS) 0xC00002D2) #define STATUS_POWER_STATE_INVALID ((NTSTATUS) 0xC00002D3) #define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS) 0xC00002D4) #define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS) 0xC00002D5) #define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS) 0xC00002D6) #define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D7) #define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC00002D8) #define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D9) #define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS) 0xC00002DA) #define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER ((NTSTATUS) 0xC00002DB) #define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS) 0xC00002DC) #define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS) 0xC00002DD) #define STATUS_INSUFFICIENT_POWER ((NTSTATUS) 0xC00002DE) #define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS) 0xC00002DF) #define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS) 0xC00002E0) #define STATUS_DS_CANT_START ((NTSTATUS) 0xC00002E1) #define STATUS_DS_INIT_FAILURE ((NTSTATUS) 0xC00002E2) #define STATUS_SAM_INIT_FAILURE ((NTSTATUS) 0xC00002E3) #define STATUS_DS_GC_REQUIRED ((NTSTATUS) 0xC00002E4) #define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS) 0xC00002E5) #define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS) 0xC00002E6) #define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED ((NTSTATUS) 0xC00002E7) #define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS) 0xC00002E8) #define STATUS_CURRENT_DOMAIN_NOT_ALLOWED ((NTSTATUS) 0xC00002E9) #define STATUS_CANNOT_MAKE ((NTSTATUS) 0xC00002EA) #define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS) 0xC00002EB) #define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS) 0xC00002EC) #define STATUS_DS_SAM_INIT_FAILURE_CONSOLE ((NTSTATUS) 0xC00002ED) #define STATUS_UNFINISHED_CONTEXT_DELETED ((NTSTATUS) 0xC00002EE) #define STATUS_NO_TGT_REPLY ((NTSTATUS) 0xC00002EF) #define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS) 0xC00002F0) #define STATUS_NO_IP_ADDRESSES ((NTSTATUS) 0xC00002F1) #define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS) 0xC00002F2) #define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS) 0xC00002F3) #define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS) 0xC00002F4) #define STATUS_MUST_BE_KDC ((NTSTATUS) 0xC00002F5) #define STATUS_STRONG_CRYPTO_NOT_SUPPORTED ((NTSTATUS) 0xC00002F6) #define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS) 0xC00002F7) #define STATUS_NO_PA_DATA ((NTSTATUS) 0xC00002F8) #define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS) 0xC00002F9) #define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS) 0xC00002FA) #define STATUS_KDC_INVALID_REQUEST ((NTSTATUS) 0xC00002FB) #define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS) 0xC00002FC) #define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS) 0xC00002FD) #define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS) 0xC00002FE) #define STATUS_SERVER_SHUTDOWN_IN_PROGRESS ((NTSTATUS) 0xC00002FF) #define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS) 0xC0000300) #define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS) 0xC0000301) #define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS) 0xC0000302) #define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS) 0xC0000303) #define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS) 0xC0000304) #define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS) 0xC0000305) #define STATUS_CSS_AUTHENTICATION_FAILURE ((NTSTATUS) 0xC0000306) #define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS) 0xC0000307) #define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS) 0xC0000308) #define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS) 0xC0000309) #define STATUS_CSS_REGION_MISMATCH ((NTSTATUS) 0xC000030A) #define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS) 0xC000030B) #define STATUS_PKINIT_FAILURE ((NTSTATUS) 0xC0000320) #define STATUS_SMARTCARD_SUBSYSTEM_FAILURE ((NTSTATUS) 0xC0000321) #define STATUS_NO_KERB_KEY ((NTSTATUS) 0xC0000322) #define STATUS_HOST_DOWN ((NTSTATUS) 0xC0000350) #define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS) 0xC0000351) #define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS) 0xC0000352) #define STATUS_PORT_NOT_SET ((NTSTATUS) 0xC0000353) #define STATUS_DEBUGGER_INACTIVE ((NTSTATUS) 0xC0000354) #define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS) 0xC0000355) #define STATUS_AUDITING_DISABLED ((NTSTATUS) 0xC0000356) #define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS) 0xC0000357) #define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC0000358) #define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS) 0xC0000359) #define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS) 0xC000035A) #define STATUS_BAD_BINDINGS ((NTSTATUS) 0xC000035B) #define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS) 0xC000035C) #define STATUS_APPHELP_BLOCK ((NTSTATUS) 0xC000035D) #define STATUS_ALL_SIDS_FILTERED ((NTSTATUS) 0xC000035E) #define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS) 0xC000035F) #define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT ((NTSTATUS) 0xC0000361) #define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS) 0xC0000362) #define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER ((NTSTATUS) 0xC0000363) #define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS) 0xC0000364) #define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS) 0xC0000365) #define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS) 0xC0000366) #define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS) 0x00000367) #define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS) 0xC0000368) #define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS) 0xC0000369) /* STATUS_MCA_OCCURED is not a typo, as per Microsoft's headers */ #define STATUS_MCA_OCCURED ((NTSTATUS) 0xC000036A) #define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS) 0xC000036B) #define STATUS_DRIVER_BLOCKED ((NTSTATUS) 0xC000036C) #define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS) 0xC000036D) #define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS) 0xC000036E) #define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS) 0xC000036F) #define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS) 0xC0000380) #define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS) 0xC0000381) #define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS) 0xC0000382) #define STATUS_SMARTCARD_NO_CARD ((NTSTATUS) 0xC0000383) #define STATUS_SMARTCARD_NO_KEY_CONTAINER ((NTSTATUS) 0xC0000384) #define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS) 0xC0000385) #define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS) 0xC0000386) #define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS) 0xC0000387) #define STATUS_DOWNGRADE_DETECTED ((NTSTATUS) 0xC0000388) #define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS) 0xC0000389) #define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS) 0xC000038A) #define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS) 0xC000038B) #define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS) 0xC000038C) #define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS) 0xC000038D) #define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS) 0xC000038E) #define STATUS_SMARTCARD_SILENT_CONTEXT ((NTSTATUS) 0xC000038F) #define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000401) #define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000402) #define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000403) #define STATUS_DS_NAME_NOT_UNIQUE ((NTSTATUS) 0xC0000404) #define STATUS_DS_DUPLICATE_ID_FOUND ((NTSTATUS) 0xC0000405) #define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS) 0xC0000406) #define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS) 0xC0000407) #define STATUS_USER2USER_REQUIRED ((NTSTATUS) 0xC0000408) #define STATUS_STACK_BUFFER_OVERRUN ((NTSTATUS) 0xC0000409) #define STATUS_NO_S4U_PROT_SUPPORT ((NTSTATUS) 0xC000040A) #define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS) 0xC000040B) #define STATUS_REVOCATION_OFFLINE_KDC ((NTSTATUS) 0xC000040C) #define STATUS_ISSUING_CA_UNTRUSTED_KDC ((NTSTATUS) 0xC000040D) #define STATUS_KDC_CERT_EXPIRED ((NTSTATUS) 0xC000040E) #define STATUS_KDC_CERT_REVOKED ((NTSTATUS) 0xC000040F) #define STATUS_PARAMETER_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000410) #define STATUS_HIBERNATION_FAILURE ((NTSTATUS) 0xC0000411) #define STATUS_DELAY_LOAD_FAILED ((NTSTATUS) 0xC0000412) #define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS) 0xC0000413) #define STATUS_VDM_DISALLOWED ((NTSTATUS) 0xC0000414) #define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS) 0xC0000415) #define STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE ((NTSTATUS) 0xC0000416) #define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS) 0xC0000417) #define STATUS_NTLM_BLOCKED ((NTSTATUS) 0xC0000418) #define STATUS_ASSERTION_FAILURE ((NTSTATUS) 0xC0000420) #define STATUS_VERIFIER_STOP ((NTSTATUS) 0xC0000421) #define STATUS_CALLBACK_POP_STACK ((NTSTATUS) 0xC0000423) #define STATUS_INCOMPATIBLE_DRIVER_BLOCKED ((NTSTATUS) 0xC0000424) #define STATUS_HIVE_UNLOADED ((NTSTATUS) 0xC0000425) #define STATUS_COMPRESSION_DISABLED ((NTSTATUS) 0xC0000426) #define STATUS_FILE_SYSTEM_LIMITATION ((NTSTATUS) 0xC0000427) #define STATUS_INVALID_IMAGE_HASH ((NTSTATUS) 0xC0000428) #define STATUS_NOT_CAPABLE ((NTSTATUS) 0xC0000429) #define STATUS_REQUEST_OUT_OF_SEQUENCE ((NTSTATUS) 0xC000042A) #define STATUS_IMPLEMENTATION_LIMIT ((NTSTATUS) 0xC000042B) #define STATUS_ELEVATION_REQUIRED ((NTSTATUS) 0xC000042C) #define STATUS_BEYOND_VDL ((NTSTATUS) 0xC0000432) #define STATUS_ENCOUNTERED_WRITE_IN_PROGRESS ((NTSTATUS) 0xC0000433) #define STATUS_PTE_CHANGED ((NTSTATUS) 0xC0000434) #define STATUS_PURGE_FAILED ((NTSTATUS) 0xC0000435) #define STATUS_CRED_REQUIRES_CONFIRMATION ((NTSTATUS) 0xC0000440) #define STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE ((NTSTATUS) 0xC0000441) #define STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER ((NTSTATUS) 0xC0000442) #define STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE ((NTSTATUS) 0xC0000443) #define STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE ((NTSTATUS) 0xC0000444) #define STATUS_CS_ENCRYPTION_FILE_NOT_CSE ((NTSTATUS) 0xC0000445) #define STATUS_INVALID_LABEL ((NTSTATUS) 0xC0000446) #define STATUS_DRIVER_PROCESS_TERMINATED ((NTSTATUS) 0xC0000450) #define STATUS_AMBIGUOUS_SYSTEM_DEVICE ((NTSTATUS) 0xC0000451) #define STATUS_SYSTEM_DEVICE_NOT_FOUND ((NTSTATUS) 0xC0000452) #define STATUS_RESTART_BOOT_APPLICATION ((NTSTATUS) 0xC0000453) #define STATUS_INVALID_TASK_NAME ((NTSTATUS) 0xC0000500) #define STATUS_INVALID_TASK_INDEX ((NTSTATUS) 0xC0000501) #define STATUS_THREAD_ALREADY_IN_TASK ((NTSTATUS) 0xC0000502) #define STATUS_CALLBACK_BYPASS ((NTSTATUS) 0xC0000503) #define STATUS_PORT_CLOSED ((NTSTATUS) 0xC0000700) #define STATUS_MESSAGE_LOST ((NTSTATUS) 0xC0000701) #define STATUS_INVALID_MESSAGE ((NTSTATUS) 0xC0000702) #define STATUS_REQUEST_CANCELED ((NTSTATUS) 0xC0000703) #define STATUS_RECURSIVE_DISPATCH ((NTSTATUS) 0xC0000704) #define STATUS_LPC_RECEIVE_BUFFER_EXPECTED ((NTSTATUS) 0xC0000705) #define STATUS_LPC_INVALID_CONNECTION_USAGE ((NTSTATUS) 0xC0000706) #define STATUS_LPC_REQUESTS_NOT_ALLOWED ((NTSTATUS) 0xC0000707) #define STATUS_RESOURCE_IN_USE ((NTSTATUS) 0xC0000708) #define STATUS_HARDWARE_MEMORY_ERROR ((NTSTATUS) 0xC0000709) #define STATUS_THREADPOOL_HANDLE_EXCEPTION ((NTSTATUS) 0xC000070A) #define STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070B) #define STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070C) #define STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070D) #define STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070E) #define STATUS_THREADPOOL_RELEASED_DURING_OPERATION ((NTSTATUS) 0xC000070F) #define STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000710) #define STATUS_APC_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000711) #define STATUS_PROCESS_IS_PROTECTED ((NTSTATUS) 0xC0000712) #define STATUS_MCA_EXCEPTION ((NTSTATUS) 0xC0000713) #define STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE ((NTSTATUS) 0xC0000714) #define STATUS_SYMLINK_CLASS_DISABLED ((NTSTATUS) 0xC0000715) #define STATUS_INVALID_IDN_NORMALIZATION ((NTSTATUS) 0xC0000716) #define STATUS_NO_UNICODE_TRANSLATION ((NTSTATUS) 0xC0000717) #define STATUS_ALREADY_REGISTERED ((NTSTATUS) 0xC0000718) #define STATUS_CONTEXT_MISMATCH ((NTSTATUS) 0xC0000719) #define STATUS_PORT_ALREADY_HAS_COMPLETION_LIST ((NTSTATUS) 0xC000071A) #define STATUS_CALLBACK_RETURNED_THREAD_PRIORITY ((NTSTATUS) 0xC000071B) #define STATUS_INVALID_THREAD ((NTSTATUS) 0xC000071C) #define STATUS_CALLBACK_RETURNED_TRANSACTION ((NTSTATUS) 0xC000071D) #define STATUS_CALLBACK_RETURNED_LDR_LOCK ((NTSTATUS) 0xC000071E) #define STATUS_CALLBACK_RETURNED_LANG ((NTSTATUS) 0xC000071F) #define STATUS_CALLBACK_RETURNED_PRI_BACK ((NTSTATUS) 0xC0000720) #define STATUS_CALLBACK_RETURNED_THREAD_AFFINITY ((NTSTATUS) 0xC0000721) #define STATUS_DISK_REPAIR_DISABLED ((NTSTATUS) 0xC0000800) #define STATUS_DS_DOMAIN_RENAME_IN_PROGRESS ((NTSTATUS) 0xC0000801) #define STATUS_DISK_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000802) #define STATUS_CONTENT_BLOCKED ((NTSTATUS) 0xC0000804) #define STATUS_BAD_CLUSTERS ((NTSTATUS) 0xC0000805) #define STATUS_VOLUME_DIRTY ((NTSTATUS) 0xC0000806) #define STATUS_FILE_CHECKED_OUT ((NTSTATUS) 0xC0000901) #define STATUS_CHECKOUT_REQUIRED ((NTSTATUS) 0xC0000902) #define STATUS_BAD_FILE_TYPE ((NTSTATUS) 0xC0000903) #define STATUS_FILE_TOO_LARGE ((NTSTATUS) 0xC0000904) #define STATUS_FORMS_AUTH_REQUIRED ((NTSTATUS) 0xC0000905) #define STATUS_VIRUS_INFECTED ((NTSTATUS) 0xC0000906) #define STATUS_VIRUS_DELETED ((NTSTATUS) 0xC0000907) #define STATUS_BAD_MCFG_TABLE ((NTSTATUS) 0xC0000908) #define STATUS_WOW_ASSERTION ((NTSTATUS) 0xC0009898) #define STATUS_INVALID_SIGNATURE ((NTSTATUS) 0xC000A000) #define STATUS_HMAC_NOT_SUPPORTED ((NTSTATUS) 0xC000A001) #define STATUS_AUTH_TAG_MISMATCH ((NTSTATUS) 0xC000A002) #define RPC_NT_INVALID_STRING_BINDING ((NTSTATUS) 0xC0020001) #define RPC_NT_WRONG_KIND_OF_BINDING ((NTSTATUS) 0xC0020002) #define RPC_NT_INVALID_BINDING ((NTSTATUS) 0xC0020003) #define RPC_NT_PROTSEQ_NOT_SUPPORTED ((NTSTATUS) 0xC0020004) #define RPC_NT_INVALID_RPC_PROTSEQ ((NTSTATUS) 0xC0020005) #define RPC_NT_INVALID_STRING_UUID ((NTSTATUS) 0xC0020006) #define RPC_NT_INVALID_ENDPOINT_FORMAT ((NTSTATUS) 0xC0020007) #define RPC_NT_INVALID_NET_ADDR ((NTSTATUS) 0xC0020008) #define RPC_NT_NO_ENDPOINT_FOUND ((NTSTATUS) 0xC0020009) #define RPC_NT_INVALID_TIMEOUT ((NTSTATUS) 0xC002000A) #define RPC_NT_OBJECT_NOT_FOUND ((NTSTATUS) 0xC002000B) #define RPC_NT_ALREADY_REGISTERED ((NTSTATUS) 0xC002000C) #define RPC_NT_TYPE_ALREADY_REGISTERED ((NTSTATUS) 0xC002000D) #define RPC_NT_ALREADY_LISTENING ((NTSTATUS) 0xC002000E) #define RPC_NT_NO_PROTSEQS_REGISTERED ((NTSTATUS) 0xC002000F) #define RPC_NT_NOT_LISTENING ((NTSTATUS) 0xC0020010) #define RPC_NT_UNKNOWN_MGR_TYPE ((NTSTATUS) 0xC0020011) #define RPC_NT_UNKNOWN_IF ((NTSTATUS) 0xC0020012) #define RPC_NT_NO_BINDINGS ((NTSTATUS) 0xC0020013) #define RPC_NT_NO_PROTSEQS ((NTSTATUS) 0xC0020014) #define RPC_NT_CANT_CREATE_ENDPOINT ((NTSTATUS) 0xC0020015) #define RPC_NT_OUT_OF_RESOURCES ((NTSTATUS) 0xC0020016) #define RPC_NT_SERVER_UNAVAILABLE ((NTSTATUS) 0xC0020017) #define RPC_NT_SERVER_TOO_BUSY ((NTSTATUS) 0xC0020018) #define RPC_NT_INVALID_NETWORK_OPTIONS ((NTSTATUS) 0xC0020019) #define RPC_NT_NO_CALL_ACTIVE ((NTSTATUS) 0xC002001A) #define RPC_NT_CALL_FAILED ((NTSTATUS) 0xC002001B) #define RPC_NT_CALL_FAILED_DNE ((NTSTATUS) 0xC002001C) #define RPC_NT_PROTOCOL_ERROR ((NTSTATUS) 0xC002001D) #define RPC_NT_UNSUPPORTED_TRANS_SYN ((NTSTATUS) 0xC002001F) #define RPC_NT_UNSUPPORTED_TYPE ((NTSTATUS) 0xC0020021) #define RPC_NT_INVALID_TAG ((NTSTATUS) 0xC0020022) #define RPC_NT_INVALID_BOUND ((NTSTATUS) 0xC0020023) #define RPC_NT_NO_ENTRY_NAME ((NTSTATUS) 0xC0020024) #define RPC_NT_INVALID_NAME_SYNTAX ((NTSTATUS) 0xC0020025) #define RPC_NT_UNSUPPORTED_NAME_SYNTAX ((NTSTATUS) 0xC0020026) #define RPC_NT_UUID_NO_ADDRESS ((NTSTATUS) 0xC0020028) #define RPC_NT_DUPLICATE_ENDPOINT ((NTSTATUS) 0xC0020029) #define RPC_NT_UNKNOWN_AUTHN_TYPE ((NTSTATUS) 0xC002002A) #define RPC_NT_MAX_CALLS_TOO_SMALL ((NTSTATUS) 0xC002002B) #define RPC_NT_STRING_TOO_LONG ((NTSTATUS) 0xC002002C) #define RPC_NT_PROTSEQ_NOT_FOUND ((NTSTATUS) 0xC002002D) #define RPC_NT_PROCNUM_OUT_OF_RANGE ((NTSTATUS) 0xC002002E) #define RPC_NT_BINDING_HAS_NO_AUTH ((NTSTATUS) 0xC002002F) #define RPC_NT_UNKNOWN_AUTHN_SERVICE ((NTSTATUS) 0xC0020030) #define RPC_NT_UNKNOWN_AUTHN_LEVEL ((NTSTATUS) 0xC0020031) #define RPC_NT_INVALID_AUTH_IDENTITY ((NTSTATUS) 0xC0020032) #define RPC_NT_UNKNOWN_AUTHZ_SERVICE ((NTSTATUS) 0xC0020033) #define EPT_NT_INVALID_ENTRY ((NTSTATUS) 0xC0020034) #define EPT_NT_CANT_PERFORM_OP ((NTSTATUS) 0xC0020035) #define EPT_NT_NOT_REGISTERED ((NTSTATUS) 0xC0020036) #define RPC_NT_NOTHING_TO_EXPORT ((NTSTATUS) 0xC0020037) #define RPC_NT_INCOMPLETE_NAME ((NTSTATUS) 0xC0020038) #define RPC_NT_INVALID_VERS_OPTION ((NTSTATUS) 0xC0020039) #define RPC_NT_NO_MORE_MEMBERS ((NTSTATUS) 0xC002003A) #define RPC_NT_NOT_ALL_OBJS_UNEXPORTED ((NTSTATUS) 0xC002003B) #define RPC_NT_INTERFACE_NOT_FOUND ((NTSTATUS) 0xC002003C) #define RPC_NT_ENTRY_ALREADY_EXISTS ((NTSTATUS) 0xC002003D) #define RPC_NT_ENTRY_NOT_FOUND ((NTSTATUS) 0xC002003E) #define RPC_NT_NAME_SERVICE_UNAVAILABLE ((NTSTATUS) 0xC002003F) #define RPC_NT_INVALID_NAF_ID ((NTSTATUS) 0xC0020040) #define RPC_NT_CANNOT_SUPPORT ((NTSTATUS) 0xC0020041) #define RPC_NT_NO_CONTEXT_AVAILABLE ((NTSTATUS) 0xC0020042) #define RPC_NT_INTERNAL_ERROR ((NTSTATUS) 0xC0020043) #define RPC_NT_ZERO_DIVIDE ((NTSTATUS) 0xC0020044) #define RPC_NT_ADDRESS_ERROR ((NTSTATUS) 0xC0020045) #define RPC_NT_FP_DIV_ZERO ((NTSTATUS) 0xC0020046) #define RPC_NT_FP_UNDERFLOW ((NTSTATUS) 0xC0020047) #define RPC_NT_FP_OVERFLOW ((NTSTATUS) 0xC0020048) #define RPC_NT_CALL_IN_PROGRESS ((NTSTATUS) 0xC0020049) #define RPC_NT_NO_MORE_BINDINGS ((NTSTATUS) 0xC002004A) #define RPC_NT_GROUP_MEMBER_NOT_FOUND ((NTSTATUS) 0xC002004B) #define EPT_NT_CANT_CREATE ((NTSTATUS) 0xC002004C) #define RPC_NT_INVALID_OBJECT ((NTSTATUS) 0xC002004D) #define RPC_NT_NO_INTERFACES ((NTSTATUS) 0xC002004F) #define RPC_NT_CALL_CANCELLED ((NTSTATUS) 0xC0020050) #define RPC_NT_BINDING_INCOMPLETE ((NTSTATUS) 0xC0020051) #define RPC_NT_COMM_FAILURE ((NTSTATUS) 0xC0020052) #define RPC_NT_UNSUPPORTED_AUTHN_LEVEL ((NTSTATUS) 0xC0020053) #define RPC_NT_NO_PRINC_NAME ((NTSTATUS) 0xC0020054) #define RPC_NT_NOT_RPC_ERROR ((NTSTATUS) 0xC0020055) #define RPC_NT_SEC_PKG_ERROR ((NTSTATUS) 0xC0020057) #define RPC_NT_NOT_CANCELLED ((NTSTATUS) 0xC0020058) #define RPC_NT_INVALID_ASYNC_HANDLE ((NTSTATUS) 0xC0020062) #define RPC_NT_INVALID_ASYNC_CALL ((NTSTATUS) 0xC0020063) #define RPC_NT_NO_MORE_ENTRIES ((NTSTATUS) 0xC0030001) #define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL ((NTSTATUS) 0xC0030002) #define RPC_NT_SS_CHAR_TRANS_SHORT_FILE ((NTSTATUS) 0xC0030003) #define RPC_NT_SS_IN_NULL_CONTEXT ((NTSTATUS) 0xC0030004) #define RPC_NT_SS_CONTEXT_MISMATCH ((NTSTATUS) 0xC0030005) #define RPC_NT_SS_CONTEXT_DAMAGED ((NTSTATUS) 0xC0030006) #define RPC_NT_SS_HANDLES_MISMATCH ((NTSTATUS) 0xC0030007) #define RPC_NT_SS_CANNOT_GET_CALL_HANDLE ((NTSTATUS) 0xC0030008) #define RPC_NT_NULL_REF_POINTER ((NTSTATUS) 0xC0030009) #define RPC_NT_ENUM_VALUE_OUT_OF_RANGE ((NTSTATUS) 0xC003000A) #define RPC_NT_BYTE_COUNT_TOO_SMALL ((NTSTATUS) 0xC003000B) #define RPC_NT_BAD_STUB_DATA ((NTSTATUS) 0xC003000C) #define RPC_NT_INVALID_ES_ACTION ((NTSTATUS) 0xC0030059) #define RPC_NT_WRONG_ES_VERSION ((NTSTATUS) 0xC003005A) #define RPC_NT_WRONG_STUB_VERSION ((NTSTATUS) 0xC003005B) #define RPC_NT_INVALID_PIPE_OBJECT ((NTSTATUS) 0xC003005C) #define RPC_NT_INVALID_PIPE_OPERATION ((NTSTATUS) 0xC003005D) #define RPC_NT_WRONG_PIPE_VERSION ((NTSTATUS) 0xC003005E) #define RPC_NT_PIPE_CLOSED ((NTSTATUS) 0xC003005F) #define RPC_NT_PIPE_DISCIPLINE_ERROR ((NTSTATUS) 0xC0030060) #define RPC_NT_PIPE_EMPTY ((NTSTATUS) 0xC0030061) #define STATUS_PNP_BAD_MPS_TABLE ((NTSTATUS) 0xC0040035) #define STATUS_PNP_TRANSLATION_FAILED ((NTSTATUS) 0xC0040036) #define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS) 0xC0040037) #define STATUS_PNP_INVALID_ID ((NTSTATUS) 0xC0040038) #define STATUS_CTX_WINSTATION_NAME_INVALID ((NTSTATUS) 0xC00A0001) #define STATUS_CTX_INVALID_PD ((NTSTATUS) 0xC00A0002) #define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS) 0xC00A0003) #define STATUS_CTX_CLOSE_PENDING ((NTSTATUS) 0xC00A0006) #define STATUS_CTX_NO_OUTBUF ((NTSTATUS) 0xC00A0007) #define STATUS_CTX_MODEM_INF_NOT_FOUND ((NTSTATUS) 0xC00A0008) #define STATUS_CTX_INVALID_MODEMNAME ((NTSTATUS) 0xC00A0009) #define STATUS_CTX_RESPONSE_ERROR ((NTSTATUS) 0xC00A000A) #define STATUS_CTX_MODEM_RESPONSE_TIMEOUT ((NTSTATUS) 0xC00A000B) #define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER ((NTSTATUS) 0xC00A000C) #define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE ((NTSTATUS) 0xC00A000D) #define STATUS_CTX_MODEM_RESPONSE_BUSY ((NTSTATUS) 0xC00A000E) #define STATUS_CTX_MODEM_RESPONSE_VOICE ((NTSTATUS) 0xC00A000F) #define STATUS_CTX_TD_ERROR ((NTSTATUS) 0xC00A0010) #define STATUS_CTX_LICENSE_CLIENT_INVALID ((NTSTATUS) 0xC00A0012) #define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS) 0xC00A0013) #define STATUS_CTX_LICENSE_EXPIRED ((NTSTATUS) 0xC00A0014) #define STATUS_CTX_WINSTATION_NOT_FOUND ((NTSTATUS) 0xC00A0015) #define STATUS_CTX_WINSTATION_NAME_COLLISION ((NTSTATUS) 0xC00A0016) #define STATUS_CTX_WINSTATION_BUSY ((NTSTATUS) 0xC00A0017) #define STATUS_CTX_BAD_VIDEO_MODE ((NTSTATUS) 0xC00A0018) #define STATUS_CTX_GRAPHICS_INVALID ((NTSTATUS) 0xC00A0022) #define STATUS_CTX_NOT_CONSOLE ((NTSTATUS) 0xC00A0024) #define STATUS_CTX_CLIENT_QUERY_TIMEOUT ((NTSTATUS) 0xC00A0026) #define STATUS_CTX_CONSOLE_DISCONNECT ((NTSTATUS) 0xC00A0027) #define STATUS_CTX_CONSOLE_CONNECT ((NTSTATUS) 0xC00A0028) #define STATUS_CTX_SHADOW_DENIED ((NTSTATUS) 0xC00A002A) #define STATUS_CTX_WINSTATION_ACCESS_DENIED ((NTSTATUS) 0xC00A002B) #define STATUS_CTX_INVALID_WD ((NTSTATUS) 0xC00A002E) #define STATUS_CTX_WD_NOT_FOUND ((NTSTATUS) 0xC00A002F) #define STATUS_CTX_SHADOW_INVALID ((NTSTATUS) 0xC00A0030) #define STATUS_CTX_SHADOW_DISABLED ((NTSTATUS) 0xC00A0031) #define STATUS_RDP_PROTOCOL_ERROR ((NTSTATUS) 0xC00A0032) #define STATUS_CTX_CLIENT_LICENSE_NOT_SET ((NTSTATUS) 0xC00A0033) #define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS) 0xC00A0034) #define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE ((NTSTATUS) 0xC00A0035) #define STATUS_CTX_SHADOW_NOT_RUNNING ((NTSTATUS) 0xC00A0036) #define STATUS_CTX_LOGON_DISABLED ((NTSTATUS) 0xC00A0037) #define STATUS_CTX_SECURITY_LAYER_ERROR ((NTSTATUS) 0xC00A0038) #define STATUS_CLUSTER_INVALID_NODE ((NTSTATUS) 0xC0130001) #define STATUS_CLUSTER_NODE_EXISTS ((NTSTATUS) 0xC0130002) #define STATUS_CLUSTER_JOIN_IN_PROGRESS ((NTSTATUS) 0xC0130003) #define STATUS_CLUSTER_NODE_NOT_FOUND ((NTSTATUS) 0xC0130004) #define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND ((NTSTATUS) 0xC0130005) #define STATUS_CLUSTER_NETWORK_EXISTS ((NTSTATUS) 0xC0130006) #define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS) 0xC0130007) #define STATUS_CLUSTER_NETINTERFACE_EXISTS ((NTSTATUS) 0xC0130008) #define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND ((NTSTATUS) 0xC0130009) #define STATUS_CLUSTER_INVALID_REQUEST ((NTSTATUS) 0xC013000A) #define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS) 0xC013000B) #define STATUS_CLUSTER_NODE_DOWN ((NTSTATUS) 0xC013000C) #define STATUS_CLUSTER_NODE_UNREACHABLE ((NTSTATUS) 0xC013000D) #define STATUS_CLUSTER_NODE_NOT_MEMBER ((NTSTATUS) 0xC013000E) #define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS ((NTSTATUS) 0xC013000F) #define STATUS_CLUSTER_INVALID_NETWORK ((NTSTATUS) 0xC0130010) #define STATUS_CLUSTER_NO_NET_ADAPTERS ((NTSTATUS) 0xC0130011) #define STATUS_CLUSTER_NODE_UP ((NTSTATUS) 0xC0130012) #define STATUS_CLUSTER_NODE_PAUSED ((NTSTATUS) 0xC0130013) #define STATUS_CLUSTER_NODE_NOT_PAUSED ((NTSTATUS) 0xC0130014) #define STATUS_CLUSTER_NO_SECURITY_CONTEXT ((NTSTATUS) 0xC0130015) #define STATUS_CLUSTER_NETWORK_NOT_INTERNAL ((NTSTATUS) 0xC0130016) #define STATUS_CLUSTER_POISONED ((NTSTATUS) 0xC0130017) #define STATUS_SXS_SECTION_NOT_FOUND ((NTSTATUS) 0xC0150001) #define STATUS_SXS_CANT_GEN_ACTCTX ((NTSTATUS) 0xC0150002) #define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT ((NTSTATUS) 0xC0150003) #define STATUS_SXS_ASSEMBLY_NOT_FOUND ((NTSTATUS) 0xC0150004) #define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS) 0xC0150005) #define STATUS_SXS_MANIFEST_PARSE_ERROR ((NTSTATUS) 0xC0150006) #define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED ((NTSTATUS) 0xC0150007) #define STATUS_SXS_KEY_NOT_FOUND ((NTSTATUS) 0xC0150008) #define STATUS_SXS_VERSION_CONFLICT ((NTSTATUS) 0xC0150009) #define STATUS_SXS_WRONG_SECTION_TYPE ((NTSTATUS) 0xC015000A) #define STATUS_SXS_THREAD_QUERIES_DISABLED ((NTSTATUS) 0xC015000B) #define STATUS_SXS_ASSEMBLY_MISSING ((NTSTATUS) 0xC015000C) #define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET ((NTSTATUS) 0xC015000E) #define STATUS_SXS_EARLY_DEACTIVATION ((NTSTATUS) 0xC015000F) #define STATUS_SXS_INVALID_DEACTIVATION ((NTSTATUS) 0xC0150010) #define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS) 0xC0150011) #define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS) 0xC0150012) #define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS) 0xC0150013) #define STATUS_SXS_CORRUPT_ACTIVATION_STACK ((NTSTATUS) 0xC0150014) #define STATUS_SXS_CORRUPTION ((NTSTATUS) 0xC0150015) #define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE ((NTSTATUS) 0xC0150016) #define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME ((NTSTATUS) 0xC0150017) #define STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE ((NTSTATUS) 0xC0150018) #define STATUS_SXS_IDENTITY_PARSE_ERROR ((NTSTATUS) 0xC0150019) #define STATUS_SXS_COMPONENT_STORE_CORRUPT ((NTSTATUS) 0xC015001A) #define STATUS_SXS_FILE_HASH_MISMATCH ((NTSTATUS) 0xC015001B) #define STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT ((NTSTATUS) 0xC015001C) #define STATUS_SXS_IDENTITIES_DIFFERENT ((NTSTATUS) 0xC015001D) #define STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT ((NTSTATUS) 0xC015001E) #define STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY ((NTSTATUS) 0xC015001F) #define STATUS_ADVANCED_INSTALLER_FAILED ((NTSTATUS) 0xC0150020) #define STATUS_XML_ENCODING_MISMATCH ((NTSTATUS) 0xC0150021) #define STATUS_SXS_MANIFEST_TOO_BIG ((NTSTATUS) 0xC0150022) #define STATUS_SXS_SETTING_NOT_REGISTERED ((NTSTATUS) 0xC0150023) #define STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE ((NTSTATUS) 0xC0150024) #define STATUS_SMI_PRIMITIVE_INSTALLER_FAILED ((NTSTATUS) 0xC0150025) #define STATUS_GENERIC_COMMAND_FAILED ((NTSTATUS) 0xC0150026) #define STATUS_SXS_FILE_HASH_MISSING ((NTSTATUS) 0xC0150027) #define DBG_EXCEPTION_HANDLED ((NTSTATUS) 0x00010001) #define DBG_CONTINUE ((NTSTATUS) 0x00010002) #define DBG_TERMINATE_THREAD ((NTSTATUS) 0x40010003) #define DBG_TERMINATE_PROCESS ((NTSTATUS) 0x40010004) #define DBG_CONTROL_C ((NTSTATUS) 0x40010005) #define DBG_PRINTEXCEPTION_C ((NTSTATUS) 0x40010006) #define DBG_RIPEXCEPTION ((NTSTATUS) 0x40010007) #define DBG_CONTROL_BREAK ((NTSTATUS) 0x40010008) #define DBG_COMMAND_EXCEPTION ((NTSTATUS) 0x40010009) #define DBG_EXCEPTION_NOT_HANDLED ((NTSTATUS) 0x80010001) #endif /* WIN32_NO_STATUS */ #endif /* __WINE_NTSTATUS_H */ ================================================ FILE: wine/windows/oaidl.idl ================================================ /* * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "objidl.idl"; #endif interface IDispatch; interface ITypeInfo; interface ITypeLib; interface IRecordInfo; [ version(1.0), pointer_default(unique) ] interface IOleAutomationTypes { typedef CY CURRENCY; /* Safe Array */ typedef struct tagSAFEARRAYBOUND { ULONG cElements; LONG lLbound; } SAFEARRAYBOUND, *LPSAFEARRAYBOUND; typedef [unique] struct _wireVARIANT *wireVARIANT; typedef [unique] struct _wireBRECORD *wireBRECORD; typedef struct _wireSAFEARR_BSTR { ULONG Size; [size_is(Size), ref] wireBSTR *aBstr; } SAFEARR_BSTR; typedef struct _wireSAFEARR_UNKNOWN { ULONG Size; [size_is(Size), ref] IUnknown **apUnknown; } SAFEARR_UNKNOWN; typedef struct _wireSAFEARR_DISPATCH { ULONG Size; [size_is(Size), ref] IDispatch **apDispatch; } SAFEARR_DISPATCH; typedef struct _wireSAFEARR_VARIANT { ULONG Size; [size_is(Size), ref] wireVARIANT *aVariant; } SAFEARR_VARIANT; typedef struct _wireSAFEARR_BRECORD { ULONG Size; [size_is(Size), ref] wireBRECORD *aRecord; } SAFEARR_BRECORD; typedef struct _wireSAFEARR_HAVEIID { ULONG Size; [size_is(Size), ref] IUnknown **apUnknown; IID iid; } SAFEARR_HAVEIID; typedef [v1_enum] enum tagSF_TYPE { SF_ERROR = VT_ERROR, SF_I1 = VT_I1, SF_I2 = VT_I2, SF_I4 = VT_I4, SF_I8 = VT_I8, SF_BSTR = VT_BSTR, SF_UNKNOWN = VT_UNKNOWN, SF_DISPATCH = VT_DISPATCH, SF_VARIANT = VT_VARIANT, SF_RECORD = VT_RECORD, SF_HAVEIID = VT_UNKNOWN|VT_RESERVED, } SF_TYPE; typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u { case SF_BSTR: SAFEARR_BSTR BstrStr; case SF_UNKNOWN: SAFEARR_UNKNOWN UnknownStr; case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr; case SF_VARIANT: SAFEARR_VARIANT VariantStr; case SF_RECORD: SAFEARR_BRECORD RecordStr; case SF_HAVEIID: SAFEARR_HAVEIID HaveIidStr; case SF_I1: BYTE_SIZEDARR ByteStr; case SF_I2: WORD_SIZEDARR WordStr; case SF_I4: DWORD_SIZEDARR LongStr; case SF_I8: HYPER_SIZEDARR HyperStr; } SAFEARRAYUNION; typedef [unique] struct _wireSAFEARRAY { USHORT cDims; USHORT fFeatures; ULONG cbElements; ULONG cLocks; SAFEARRAYUNION uArrayStructs; [size_is(cDims)] SAFEARRAYBOUND rgsabound[]; } *wireSAFEARRAY; typedef [unique] wireSAFEARRAY *wirePSAFEARRAY; typedef struct tagSAFEARRAY { USHORT cDims; USHORT fFeatures; ULONG cbElements; ULONG cLocks; PVOID pvData; SAFEARRAYBOUND rgsabound[]; } SAFEARRAY; typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY; const USHORT FADF_AUTO = 0x0001; const USHORT FADF_STATIC = 0x0002; const USHORT FADF_EMBEDDED = 0x0004; const USHORT FADF_FIXEDSIZE = 0x0010; const USHORT FADF_RECORD = 0x0020; const USHORT FADF_HAVEIID = 0x0040; const USHORT FADF_HAVEVARTYPE = 0x0080; const USHORT FADF_BSTR = 0x0100; const USHORT FADF_UNKNOWN = 0x0200; const USHORT FADF_DISPATCH = 0x0400; const USHORT FADF_VARIANT = 0x0800; const USHORT FADF_RESERVED = 0xF008; /* Undocumented flags */ const USHORT FADF_DATADELETED = 0x1000; /* Data in a vector has been deleted */ const USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */ /* Variant */ cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)") cpp_quote("#define __VARIANT_NAME_1 n1") cpp_quote("#define __VARIANT_NAME_2 n2") cpp_quote("#define __VARIANT_NAME_3 n3") cpp_quote("#define __VARIANT_NAME_4 brecVal") cpp_quote("#else") cpp_quote("#define __tagVARIANT") cpp_quote("#define __VARIANT_NAME_1") cpp_quote("#define __VARIANT_NAME_2") cpp_quote("#define __VARIANT_NAME_3") cpp_quote("#define __tagBRECORD") cpp_quote("#define __VARIANT_NAME_4") cpp_quote("#endif") typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT; struct tagVARIANT { union { struct __tagVARIANT { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; union { signed char cVal; USHORT uiVal; ULONG ulVal; INT intVal; UINT uintVal; BYTE bVal; SHORT iVal; LONG lVal; FLOAT fltVal; DOUBLE dblVal; VARIANT_BOOL boolVal; #if 0 /* illegal in C++ */ _VARIANT_BOOL bool; #endif SCODE scode; DATE date; BSTR bstrVal; CY cyVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY *parray; LONGLONG llVal; ULONGLONG ullVal; signed char *pcVal; USHORT *puiVal; ULONG *pulVal; INT *pintVal; UINT *puintVal; BYTE *pbVal; SHORT *piVal; LONG *plVal; FLOAT *pfltVal; DOUBLE *pdblVal; VARIANT_BOOL *pboolVal; #if 0 _VARIANT_BOOL *pbool; #endif SCODE *pscode; DATE *pdate; BSTR *pbstrVal; VARIANT *pvarVal; PVOID byref; CY *pcyVal; DECIMAL *pdecVal; IUnknown **ppunkVal; IDispatch **ppdispVal; SAFEARRAY **pparray; LONGLONG *pllVal; ULONGLONG *pullVal; struct __tagBRECORD { PVOID pvRecord; IRecordInfo *pRecInfo; } __VARIANT_NAME_4; } __VARIANT_NAME_3; } __VARIANT_NAME_2; DECIMAL decVal; } __VARIANT_NAME_1; }; typedef VARIANT *LPVARIANT; typedef VARIANT VARIANTARG; typedef VARIANTARG *LPVARIANTARG; cpp_quote("#if 0") typedef const VARIANT *REFVARIANT; cpp_quote("#elif !defined(_REFVARIANT_DEFINED)") cpp_quote("#define _REFVARIANT_DEFINED") cpp_quote("#ifdef __cplusplus") cpp_quote("#define REFVARIANT const VARIANT &") cpp_quote("#else") cpp_quote("#define REFVARIANT const VARIANT *__MIDL_CONST") cpp_quote("#endif") cpp_quote("#endif") struct _wireBRECORD { ULONG fFlags; ULONG clSize; IRecordInfo *pRecInfo; [size_is(clSize)] byte *pRecord; }; struct _wireVARIANT { DWORD clSize; DWORD rpcReserved; USHORT vt; USHORT wReserved1; USHORT wReserved2; USHORT wReserved3; [switch_is(vt)] union { [case(VT_EMPTY, VT_NULL)] ; [case(VT_I1)] signed char cVal; [case(VT_UI2)] USHORT uiVal; [case(VT_UI4)] ULONG ulVal; [case(VT_INT)] INT intVal; [case(VT_UINT)] UINT uintVal; [case(VT_UI1)] BYTE bVal; [case(VT_I2)] SHORT iVal; [case(VT_I4)] LONG lVal; [case(VT_R4)] FLOAT fltVal; [case(VT_R8)] DOUBLE dblVal; [case(VT_BOOL)] VARIANT_BOOL boolVal; [case(VT_ERROR)] SCODE scode; [case(VT_DATE)] DATE date; [case(VT_BSTR)] wireBSTR bstrVal; [case(VT_CY)] CY cyVal; [case(VT_DECIMAL)] DECIMAL decVal; [case(VT_UNKNOWN)] IUnknown *punkVal; [case(VT_DISPATCH)] IDispatch *pdispVal; [case(VT_ARRAY)] wireSAFEARRAY parray; [case(VT_I1|VT_BYREF)] signed char *pcVal; [case(VT_UI2|VT_BYREF)] USHORT *puiVal; [case(VT_UI4|VT_BYREF)] ULONG *pulVal; [case(VT_INT|VT_BYREF)] INT *pintVal; [case(VT_UINT|VT_BYREF)] UINT *puintVal; [case(VT_UI1|VT_BYREF)] BYTE *pbVal; [case(VT_I2|VT_BYREF)] SHORT *piVal; [case(VT_I4|VT_BYREF)] LONG *plVal; [case(VT_R4|VT_BYREF)] FLOAT *pfltVal; [case(VT_R8|VT_BYREF)] DOUBLE *pdblVal; [case(VT_BOOL|VT_BYREF)] VARIANT_BOOL *pboolVal; [case(VT_ERROR|VT_BYREF)] SCODE *pscode; [case(VT_DATE|VT_BYREF)] DATE *pdate; [case(VT_BSTR|VT_BYREF)] wireBSTR *pbstrVal; [case(VT_VARIANT|VT_BYREF)] wireVARIANT *pvarVal; [case(VT_CY|VT_BYREF)] CY *pcyVal; [case(VT_DECIMAL|VT_BYREF)] DECIMAL *pdecVal; [case(VT_UNKNOWN|VT_BYREF)] IUnknown **ppunkVal; [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal; [case(VT_ARRAY|VT_BYREF)] wireSAFEARRAY *pparray; [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal; } DUMMYUNIONNAME; }; /* Dispatch */ typedef LONG DISPID; typedef DWORD HREFTYPE; typedef DISPID MEMBERID; typedef [v1_enum] enum tagTYPEKIND { TKIND_ENUM = 0, TKIND_RECORD, TKIND_MODULE, TKIND_INTERFACE, TKIND_DISPATCH, TKIND_COCLASS, TKIND_ALIAS, TKIND_UNION, TKIND_MAX } TYPEKIND; typedef struct tagTYPEDESC { [switch_is(vt)] union { [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc; [case(VT_CARRAY)] struct tagARRAYDESC *lpadesc; [case(VT_USERDEFINED)] HREFTYPE hreftype; [default] ; } DUMMYUNIONNAME; VARTYPE vt; } TYPEDESC; typedef struct tagARRAYDESC { TYPEDESC tdescElem; USHORT cDims; [size_is(cDims)] SAFEARRAYBOUND rgbounds[]; } ARRAYDESC; typedef struct tagPARAMDESCEX { ULONG cBytes; VARIANTARG varDefaultValue; } PARAMDESCEX, *LPPARAMDESCEX; typedef struct tagPARAMDESC { LPPARAMDESCEX pparamdescex; USHORT wParamFlags; } PARAMDESC, *LPPARAMDESC; const USHORT PARAMFLAG_NONE = 0x00; const USHORT PARAMFLAG_FIN = 0x01; const USHORT PARAMFLAG_FOUT = 0x02; const USHORT PARAMFLAG_FLCID = 0x04; const USHORT PARAMFLAG_FRETVAL = 0x08; const USHORT PARAMFLAG_FOPT = 0x10; const USHORT PARAMFLAG_FHASDEFAULT = 0x20; const USHORT PARAMFLAG_FHASCUSTDATA = 0x40; typedef struct tagIDLDESC { ULONG_PTR dwReserved; USHORT wIDLFlags; } IDLDESC, *LPIDLDESC; const USHORT IDLFLAG_NONE = PARAMFLAG_NONE; const USHORT IDLFLAG_FIN = PARAMFLAG_FIN; const USHORT IDLFLAG_FOUT = PARAMFLAG_FOUT; const USHORT IDLFLAG_FLCID = PARAMFLAG_FLCID; const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL; cpp_quote("#if 0") /* for IDL only */ typedef struct tagELEMDESC { TYPEDESC tdesc; PARAMDESC paramdesc; } ELEMDESC; cpp_quote("#else") /* C/C++ defs */ cpp_quote("typedef struct tagELEMDESC {") cpp_quote(" TYPEDESC tdesc;") cpp_quote(" union {") cpp_quote(" IDLDESC idldesc;") cpp_quote(" PARAMDESC paramdesc;") cpp_quote(" } DUMMYUNIONNAME;") cpp_quote("} ELEMDESC, *LPELEMDESC;") cpp_quote("#endif") typedef struct tagTYPEATTR { GUID guid; LCID lcid; DWORD dwReserved; MEMBERID memidConstructor; MEMBERID memidDestructor; LPOLESTR lpstrSchema; ULONG cbSizeInstance; TYPEKIND typekind; WORD cFuncs; WORD cVars; WORD cImplTypes; WORD cbSizeVft; WORD cbAlignment; WORD wTypeFlags; WORD wMajorVerNum; WORD wMinorVerNum; TYPEDESC tdescAlias; IDLDESC idldescType; } TYPEATTR, *LPTYPEATTR; typedef struct tagDISPPARAMS { [size_is(cArgs)] VARIANTARG *rgvarg; [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs; UINT cArgs; UINT cNamedArgs; } DISPPARAMS; cpp_quote("#if 0") /* for IDL only */ typedef struct tagEXCEPINFO { WORD wCode; WORD wReserved; BSTR bstrSource; BSTR bstrDescription; BSTR bstrHelpFile; DWORD dwHelpContext; ULONG_PTR pvReserved; ULONG_PTR pfnDeferredFillIn; SCODE scode; } EXCEPINFO; cpp_quote("#else") cpp_quote("typedef struct tagEXCEPINFO {") cpp_quote(" WORD wCode;") cpp_quote(" WORD wReserved;") cpp_quote(" BSTR bstrSource;") cpp_quote(" BSTR bstrDescription;") cpp_quote(" BSTR bstrHelpFile;") cpp_quote(" DWORD dwHelpContext;") cpp_quote(" PVOID pvReserved;") cpp_quote(" HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);") cpp_quote(" SCODE scode;") cpp_quote("} EXCEPINFO, *LPEXCEPINFO;") cpp_quote("#endif") typedef [v1_enum] enum tagCALLCONV { CC_FASTCALL = 0, CC_CDECL = 1, CC_MSCPASCAL, CC_PASCAL = CC_MSCPASCAL, CC_MACPASCAL, CC_STDCALL, CC_FPFASTCALL, CC_SYSCALL, CC_MPWCDECL, CC_MPWPASCAL, CC_MAX } CALLCONV; typedef [v1_enum] enum tagFUNCKIND { FUNC_VIRTUAL, FUNC_PUREVIRTUAL, FUNC_NONVIRTUAL, FUNC_STATIC, FUNC_DISPATCH } FUNCKIND; typedef [v1_enum] enum tagINVOKEKIND { INVOKE_FUNC = 1, INVOKE_PROPERTYGET = 2, INVOKE_PROPERTYPUT = 4, INVOKE_PROPERTYPUTREF = 8 } INVOKEKIND; typedef struct tagFUNCDESC { MEMBERID memid; [size_is(cScodes)] SCODE *lprgscode; [size_is(cParams)] ELEMDESC *lprgelemdescParam; FUNCKIND funckind; INVOKEKIND invkind; CALLCONV callconv; SHORT cParams; SHORT cParamsOpt; SHORT oVft; SHORT cScodes; ELEMDESC elemdescFunc; WORD wFuncFlags; } FUNCDESC, *LPFUNCDESC; typedef [v1_enum] enum tagVARKIND { VAR_PERINSTANCE, VAR_STATIC, VAR_CONST, VAR_DISPATCH } VARKIND; const USHORT IMPLTYPEFLAG_FDEFAULT = 0x1; const USHORT IMPLTYPEFLAG_FSOURCE = 0x2; const USHORT IMPLTYPEFLAG_FRESTRICTED = 0x4; const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8; typedef struct tagVARDESC { MEMBERID memid; LPOLESTR lpstrSchema; [switch_is(varkind)] union { [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst; [case(VAR_CONST)] VARIANT *lpvarValue; } DUMMYUNIONNAME; ELEMDESC elemdescVar; WORD wVarFlags; VARKIND varkind; } VARDESC, *LPVARDESC; typedef enum tagTYPEFLAGS { TYPEFLAG_FAPPOBJECT = 0x0001, TYPEFLAG_FCANCREATE = 0x0002, TYPEFLAG_FLICENSED = 0x0004, TYPEFLAG_FPREDECLID = 0x0008, TYPEFLAG_FHIDDEN = 0x0010, TYPEFLAG_FCONTROL = 0x0020, TYPEFLAG_FDUAL = 0x0040, TYPEFLAG_FNONEXTENSIBLE = 0x0080, TYPEFLAG_FOLEAUTOMATION = 0x0100, TYPEFLAG_FRESTRICTED = 0x0200, TYPEFLAG_FAGGREGATABLE = 0x0400, TYPEFLAG_FREPLACEABLE = 0x0800, TYPEFLAG_FDISPATCHABLE = 0x1000, TYPEFLAG_FREVERSEBIND = 0x2000, TYPEFLAG_FPROXY = 0x4000 } TYPEFLAGS; typedef enum tagFUNCFLAGS { FUNCFLAG_FRESTRICTED = 0x0001, FUNCFLAG_FSOURCE = 0x0002, FUNCFLAG_FBINDABLE = 0x0004, FUNCFLAG_FREQUESTEDIT = 0x0008, FUNCFLAG_FDISPLAYBIND = 0x0010, FUNCFLAG_FDEFAULTBIND = 0x0020, FUNCFLAG_FHIDDEN = 0x0040, FUNCFLAG_FUSESGETLASTERROR = 0x0080, FUNCFLAG_FDEFAULTCOLLELEM = 0x0100, FUNCFLAG_FUIDEFAULT = 0x0200, FUNCFLAG_FNONBROWSABLE = 0x0400, FUNCFLAG_FREPLACEABLE = 0x0800, FUNCFLAG_FIMMEDIATEBIND = 0x1000 } FUNCFLAGS; typedef enum tagVARFLAGS { VARFLAG_FREADONLY = 0x0001, VARFLAG_FSOURCE = 0x0002, VARFLAG_FBINDABLE = 0x0004, VARFLAG_FREQUESTEDIT = 0x0008, VARFLAG_FDISPLAYBIND = 0x0010, VARFLAG_FDEFAULTBIND = 0x0020, VARFLAG_FHIDDEN = 0x0040, VARFLAG_FRESTRICTED = 0x0080, VARFLAG_FDEFAULTCOLLELEM = 0x0100, VARFLAG_FUIDEFAULT = 0x0200, VARFLAG_FNONBROWSABLE = 0x0400, VARFLAG_FREPLACEABLE = 0x0800, VARFLAG_FIMMEDIATEBIND = 0x1000 } VARFLAGS; typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE { IUnknown *pInterface; PVOID pStorage; DWORD flags; } CLEANLOCALSTORAGE; typedef struct tagCUSTDATAITEM { GUID guid; VARIANTARG varValue; } CUSTDATAITEM, *LPCUSTDATAITEM; typedef struct tagCUSTDATA { DWORD cCustData; [size_is(cCustData)] LPCUSTDATAITEM prgCustData; } CUSTDATA, *LPCUSTDATA; } /* interface IOleAutomationTypes */ /******************** INTERFACES ********************/ [ object, uuid(00020400-0000-0000-C000-000000000046), pointer_default(unique) ] interface IDispatch : IUnknown { typedef [unique] IDispatch *LPDISPATCH; const DISPID DISPID_UNKNOWN = -1; const DISPID DISPID_VALUE = 0; const DISPID DISPID_PROPERTYPUT = -3; const DISPID DISPID_NEWENUM = -4; const DISPID DISPID_EVALUATE = -5; const DISPID DISPID_CONSTRUCTOR = -6; const DISPID DISPID_DESTRUCTOR = -7; const DISPID DISPID_COLLECT = -8; HRESULT GetTypeInfoCount( [out] UINT *pctinfo); HRESULT GetTypeInfo( [in] UINT iTInfo, [in] LCID lcid, [out] ITypeInfo **ppTInfo); HRESULT GetIDsOfNames( [in] REFIID riid, [in, size_is(cNames)] LPOLESTR *rgszNames, [in] UINT cNames, [in] LCID lcid, [out, size_is(cNames)] DISPID *rgDispId); [local] HRESULT Invoke( [in] DISPID dispIdMember, [in] REFIID riid, [in] LCID lcid, [in] WORD wFlags, [in, out] DISPPARAMS *pDispParams, [out] VARIANT *pVarResult, [out] EXCEPINFO *pExcepInfo, [out] UINT *puArgErr); [call_as(Invoke)] HRESULT RemoteInvoke( [in] DISPID dispIdMember, [in] REFIID riid, [in] LCID lcid, [in] DWORD dwFlags, [in] DISPPARAMS *pDispParams, [out] VARIANT *pVarResult, [out] EXCEPINFO *pExcepInfo, [out] UINT *pArgErr, [in] UINT cVarRef, [in, size_is(cVarRef)] UINT *rgVarRefIdx, [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef); } [ object, uuid(00020404-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumVARIANT : IUnknown { typedef [unique] IEnumVARIANT *LPENUMVARIANT; [local] HRESULT Next( [in] ULONG celt, [out] VARIANT *rgVar, [out] ULONG *pCeltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pCeltFetched)] VARIANT *rgVar, [out] ULONG *pCeltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumVARIANT **ppEnum); } [ object, uuid(00020403-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeComp : IUnknown { typedef [unique] ITypeComp *LPTYPECOMP; typedef [v1_enum] enum tagDESCKIND { DESCKIND_NONE = 0, DESCKIND_FUNCDESC, DESCKIND_VARDESC, DESCKIND_TYPECOMP, DESCKIND_IMPLICITAPPOBJ, DESCKIND_MAX } DESCKIND; typedef union tagBINDPTR { FUNCDESC *lpfuncdesc; VARDESC *lpvardesc; ITypeComp *lptcomp; } BINDPTR, *LPBINDPTR; [local] HRESULT Bind( [in] LPOLESTR szName, [in] ULONG lHashVal, [in] WORD wFlags, [out] ITypeInfo **ppTInfo, [out] DESCKIND *pDescKind, [out] BINDPTR *pBindPtr); [call_as(Bind)] HRESULT RemoteBind( [in] LPOLESTR szName, [in] ULONG lHashVal, [in] WORD wFlags, [out] ITypeInfo **ppTInfo, [out] DESCKIND *pDescKind, [out] LPFUNCDESC *ppFuncDesc, [out] LPVARDESC *ppVarDesc, [out] ITypeComp **ppTypeComp, [out] CLEANLOCALSTORAGE *pDummy); [local] HRESULT BindType( [in] LPOLESTR szName, [in] ULONG lHashVal, [out] ITypeInfo **ppTInfo, [out] ITypeComp **ppTComp); [call_as(BindType)] HRESULT RemoteBindType( [in] LPOLESTR szName, [in] ULONG lHashVal, [out] ITypeInfo **ppTInfo); } [ object, uuid(00020401-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeInfo : IUnknown { typedef [unique] ITypeInfo *LPTYPEINFO; [local] HRESULT GetTypeAttr( [out] TYPEATTR **ppTypeAttr); [call_as(GetTypeAttr)] HRESULT RemoteGetTypeAttr( [out] LPTYPEATTR *ppTypeAttr, [out] CLEANLOCALSTORAGE *pDummy); HRESULT GetTypeComp( [out] ITypeComp **ppTComp); [local] HRESULT GetFuncDesc( [in] UINT index, [out] FUNCDESC **ppFuncDesc); [call_as(GetFuncDesc)] HRESULT RemoteGetFuncDesc( [in] UINT index, [out] LPFUNCDESC *ppFuncDesc, [out] CLEANLOCALSTORAGE *pDummy); [local] HRESULT GetVarDesc( [in] UINT index, [out] VARDESC **ppVarDesc); [call_as(GetVarDesc)] HRESULT RemoteGetVarDesc( [in] UINT index, [out] LPVARDESC *ppVarDesc, [out] CLEANLOCALSTORAGE *pDummy); [local] HRESULT GetNames( [in] MEMBERID memid, [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames, [in] UINT cMaxNames, [out] UINT *pcNames); [call_as(GetNames)] HRESULT RemoteGetNames( [in] MEMBERID memid, [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames, [in] UINT cMaxNames, [out] UINT *pcNames); HRESULT GetRefTypeOfImplType( [in] UINT index, [out] HREFTYPE *pRefType); HRESULT GetImplTypeFlags( [in] UINT index, [out] INT *pImplTypeFlags); [local] HRESULT GetIDsOfNames( [in, size_is(cNames)] LPOLESTR *rgszNames, [in] UINT cNames, [out, size_is(cNames)] MEMBERID *pMemId); [call_as(GetIDsOfNames)] HRESULT LocalGetIDsOfNames(); [local] HRESULT Invoke( [in] PVOID pvInstance, [in] MEMBERID memid, [in] WORD wFlags, [in, out] DISPPARAMS *pDispParams, [out] VARIANT *pVarResult, [out] EXCEPINFO *pExcepInfo, [out] UINT *puArgErr); [call_as(Invoke)] HRESULT LocalInvoke(); [local] HRESULT GetDocumentation( [in] MEMBERID memid, [out] BSTR *pBstrName, [out] BSTR *pBstrDocString, [out] DWORD *pdwHelpContext, [out] BSTR *pBstrHelpFile); [call_as(GetDocumentation)] HRESULT RemoteGetDocumentation( [in] MEMBERID memid, [in] DWORD refPtrFlags, [out] BSTR *pBstrName, [out] BSTR *pBstrDocString, [out] DWORD *pdwHelpContext, [out] BSTR *pBstrHelpFile); [local] HRESULT GetDllEntry( [in] MEMBERID memid, [in] INVOKEKIND invKind, [out] BSTR *pBstrDllName, [out] BSTR *pBstrName, [out] WORD *pwOrdinal); [call_as(GetDllEntry)] HRESULT RemoteGetDllEntry( [in] MEMBERID memid, [in] INVOKEKIND invKind, [in] DWORD refPtrFlags, [out] BSTR *pBstrDllName, [out] BSTR *pBstrName, [out] WORD *pwOrdinal); HRESULT GetRefTypeInfo( [in] HREFTYPE hRefType, [out] ITypeInfo **ppTInfo); [local] HRESULT AddressOfMember( [in] MEMBERID memid, [in] INVOKEKIND invKind, [out] PVOID *ppv); [call_as(AddressOfMember)] HRESULT LocalAddressOfMember(); [local] HRESULT CreateInstance( [in] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] PVOID *ppvObj); [call_as(CreateInstance)] HRESULT RemoteCreateInstance( [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObj); HRESULT GetMops( [in] MEMBERID memid, [out] BSTR *pBstrMops); [local] HRESULT GetContainingTypeLib( [out] ITypeLib **ppTLib, [out] UINT *pIndex); [call_as(GetContainingTypeLib)] HRESULT RemoteGetContainingTypeLib( [out] ITypeLib **ppTLib, [out] UINT *pIndex); [local] void ReleaseTypeAttr( [in] TYPEATTR *pTypeAttr); [call_as(ReleaseTypeAttr)] HRESULT LocalReleaseTypeAttr(); [local] void ReleaseFuncDesc( [in] FUNCDESC *pFuncDesc); [call_as(ReleaseFuncDesc)] HRESULT LocalReleaseFuncDesc(); [local] void ReleaseVarDesc( [in] VARDESC *pVarDesc); [call_as(ReleaseVarDesc)] HRESULT LocalReleaseVarDesc(); } [ object, uuid(00020412-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeInfo2 : ITypeInfo { typedef [unique] ITypeInfo2 *LPTYPEINFO2; HRESULT GetTypeKind( [out] TYPEKIND *pTypeKind); HRESULT GetTypeFlags( [out] ULONG *pTypeFlags); HRESULT GetFuncIndexOfMemId( [in] MEMBERID memid, [in] INVOKEKIND invKind, [out] UINT *pFuncIndex); HRESULT GetVarIndexOfMemId( [in] MEMBERID memid, [out] UINT *pVarIndex); HRESULT GetCustData( [in] REFGUID guid, [out] VARIANT *pVarVal); HRESULT GetFuncCustData( [in] UINT index, [in] REFGUID guid, [out] VARIANT *pVarVal); HRESULT GetParamCustData( [in] UINT indexFunc, [in] UINT indexParam, [in] REFGUID guid, [out] VARIANT *pVarVal); HRESULT GetVarCustData( [in] UINT index, [in] REFGUID guid, [out] VARIANT *pVarVal); HRESULT GetImplTypeCustData( [in] UINT index, [in] REFGUID guid, [out] VARIANT *pVarVal); [local] HRESULT GetDocumentation2( [in] MEMBERID memid, [in] LCID lcid, [out] BSTR *pbstrHelpString, [out] DWORD *pdwHelpStringContext, [out] BSTR *pbstrHelpStringDll); [call_as(GetDocumentation2)] HRESULT RemoteGetDocumentation2( [in] MEMBERID memid, [in] LCID lcid, [in] DWORD refPtrFlags, [out] BSTR *pbstrHelpString, [out] DWORD *pdwHelpStringContext, [out] BSTR *pbstrHelpStringDll); HRESULT GetAllCustData( [out] CUSTDATA *pCustData); HRESULT GetAllFuncCustData( [in] UINT index, [out] CUSTDATA *pCustData); HRESULT GetAllParamCustData( [in] UINT indexFunc, [in] UINT indexParam, [out] CUSTDATA *pCustData); HRESULT GetAllVarCustData( [in] UINT index, [out] CUSTDATA *pCustData); HRESULT GetAllImplTypeCustData( [in] UINT index, [out] CUSTDATA *pCustData); } [ object, uuid(00020402-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeLib : IUnknown { typedef [unique] ITypeLib *LPTYPELIB; typedef [v1_enum] enum tagSYSKIND { SYS_WIN16 = 0, SYS_WIN32, SYS_MAC, SYS_WIN64 } SYSKIND; typedef [v1_enum] enum tagLIBFLAGS { LIBFLAG_FRESTRICTED = 0x01, LIBFLAG_FCONTROL = 0x02, LIBFLAG_FHIDDEN = 0x04, LIBFLAG_FHASDISKIMAGE = 0x08 } LIBFLAGS; typedef struct tagTLIBATTR { GUID guid; LCID lcid; SYSKIND syskind; WORD wMajorVerNum; WORD wMinorVerNum; WORD wLibFlags; } TLIBATTR, *LPTLIBATTR; [local] UINT GetTypeInfoCount(); [call_as(GetTypeInfoCount)] HRESULT RemoteGetTypeInfoCount( [out] UINT *pcTInfo); HRESULT GetTypeInfo( [in] UINT index, [out] ITypeInfo **ppTInfo); HRESULT GetTypeInfoType( [in] UINT index, [out] TYPEKIND *pTKind); HRESULT GetTypeInfoOfGuid( [in] REFGUID guid, [out] ITypeInfo **ppTinfo); [local] HRESULT GetLibAttr( [out] TLIBATTR **ppTLibAttr); [call_as(GetLibAttr)] HRESULT RemoteGetLibAttr( [out] LPTLIBATTR *ppTLibAttr, [out] CLEANLOCALSTORAGE *pDummy); HRESULT GetTypeComp( [out] ITypeComp **ppTComp); [local] HRESULT GetDocumentation( [in] INT index, [out] BSTR *pBstrName, [out] BSTR *pBstrDocString, [out] DWORD *pdwHelpContext, [out] BSTR *pBstrHelpFile); [call_as(GetDocumentation)] HRESULT RemoteGetDocumentation( [in] INT index, [in] DWORD refPtrFlags, [out] BSTR *pBstrName, [out] BSTR *pBstrDocString, [out] DWORD *pdwHelpContext, [out] BSTR *pBstrHelpFile); [local] HRESULT IsName( [in, out] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out] BOOL *pfName); [call_as(IsName)] HRESULT RemoteIsName( [in] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out] BOOL *pfName, [out] BSTR *pBstrLibName); [local] HRESULT FindName( [in, out] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo, [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId, [in, out] USHORT *pcFound); [call_as(FindName)] HRESULT RemoteFindName( [in] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo, [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId, [in, out] USHORT *pcFound, [out] BSTR *pBstrLibName); [local] void ReleaseTLibAttr( [in] TLIBATTR *pTLibAttr); [call_as(ReleaseTLibAttr)] HRESULT LocalReleaseTLibAttr(); } [ object, uuid(00020411-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeLib2 : ITypeLib { typedef [unique] ITypeLib2 *LPTYPELIB2; HRESULT GetCustData( [in] REFGUID guid, [out] VARIANT *pVarVal); [local] HRESULT GetLibStatistics( [out] ULONG *pcUniqueNames, [out] ULONG *pcchUniqueNames); [call_as(GetLibStatistics)] HRESULT RemoteGetLibStatistics( [out] ULONG *pcUniqueNames, [out] ULONG *pcchUniqueNames); [local] HRESULT GetDocumentation2( [in] INT index, [in] LCID lcid, [out] BSTR *pbstrHelpString, [out] DWORD *pdwHelpStringContext, [out] BSTR *pbstrHelpStringDll); [call_as(GetDocumentation2)] HRESULT RemoteGetDocumentation2( [in] INT index, [in] LCID lcid, [in] DWORD refPtrFlags, [out] BSTR *pbstrHelpString, [out] DWORD *pdwHelpStringContext, [out] BSTR *pbstrHelpStringDll); HRESULT GetAllCustData( [out] CUSTDATA *pCustData); } [ local, object, uuid(00020410-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeChangeEvents : IUnknown { typedef [unique] ITypeChangeEvents *LPTYPECHANGEEVENTS; typedef enum tagCHANGEKIND { CHANGEKIND_ADDMEMBER, CHANGEKIND_DELETEMEMBER, CHANGEKIND_SETNAMES, CHANGEKIND_SETDOCUMENTATION, CHANGEKIND_GENERAL, CHANGEKIND_INVALIDATE, CHANGEKIND_CHANGEFAILED, CHANGEKIND_MAX } CHANGEKIND; HRESULT RequestTypeChange( [in] CHANGEKIND changeKind, [in] ITypeInfo *pTInfoBefore, [in] LPOLESTR pStrName, [out] INT *pfCancel); HRESULT AfterTypeChange( [in] CHANGEKIND changeKind, [in] ITypeInfo *pTInfoAfter, [in] LPOLESTR pStrName); } [ object, uuid(1CF2B120-547D-101B-8E65-08002B2BD119), pointer_default(unique) ] interface IErrorInfo : IUnknown { typedef [unique] IErrorInfo *LPERRORINFO; HRESULT GetGUID( [out] GUID *pGUID); HRESULT GetSource( [out] BSTR *pBstrSource); HRESULT GetDescription( [out] BSTR *pBstrDescription); HRESULT GetHelpFile( [out] BSTR *pBstrHelpFile); HRESULT GetHelpContext( [out] DWORD *pdwHelpContext); } [ object, uuid(22F03340-547D-101B-8E65-08002B2BD119), pointer_default(unique) ] interface ICreateErrorInfo : IUnknown { typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO; HRESULT SetGUID( [in] REFGUID rguid); HRESULT SetSource( [in] LPOLESTR szSource); HRESULT SetDescription( [in] LPOLESTR szDescription); HRESULT SetHelpFile( [in] LPOLESTR szHelpFile); HRESULT SetHelpContext( [in] DWORD dwHelpContext); } [ object, uuid(DF0B3D60-548F-101B-8E65-08002B2BD119), pointer_default(unique) ] interface ISupportErrorInfo : IUnknown { typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO; HRESULT InterfaceSupportsErrorInfo( [in] REFIID riid); } [ object, uuid(0000002E-0000-0000-C000-000000000046) ] interface ITypeFactory : IUnknown { HRESULT CreateFromTypeInfo( [in] ITypeInfo *pTypeInfo, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppv); } [ local, object, uuid(0000002D-0000-0000-C000-000000000046) ] interface ITypeMarshal : IUnknown { HRESULT Size( [in] PVOID pvType, [in] DWORD dwDestContext, [in] PVOID pvDestContext, [out] ULONG *pSize); HRESULT Marshal( [in] PVOID pvType, [in] DWORD dwDestContext, [in] PVOID pvDestContext, [in] ULONG cbBufferLength, [out] BYTE *pBuffer, [out] ULONG *pcbWritten); HRESULT Unmarshal( [out] PVOID pvType, [in] DWORD dwFlags, [in] ULONG cbBufferLength, [in] BYTE *pBuffer, [out] ULONG *pcbRead); HRESULT Free( [in] PVOID pvType); } [ local, object, uuid(0000002F-0000-0000-C000-000000000046) ] interface IRecordInfo : IUnknown { typedef [unique] IRecordInfo *LPRECORDINFO; HRESULT RecordInit( [out] PVOID pvNew); HRESULT RecordClear( [in] PVOID pvExisting); HRESULT RecordCopy( [in] PVOID pvExisting, [out] PVOID pvNew); HRESULT GetGuid( [out] GUID *pguid); HRESULT GetName( [out] BSTR *pbstrName); HRESULT GetSize( [out] ULONG *pcbSize); HRESULT GetTypeInfo( [out] ITypeInfo **ppTypeInfo); HRESULT GetField( [in] PVOID pvData, [in] LPCOLESTR szFieldName, [out] VARIANT *pvarField); HRESULT GetFieldNoCopy( [in] PVOID pvData, [in] LPCOLESTR szFieldName, [out] VARIANT *pvarField, [out] PVOID *ppvDataCArray); HRESULT PutField( [in] ULONG wFlags, [in, out] PVOID pvData, [in] LPCOLESTR szFieldName, [in] VARIANT *pvarField); HRESULT PutFieldNoCopy( [in] ULONG wFlags, [in, out] PVOID pvData, [in] LPCOLESTR szFieldName, [in] VARIANT *pvarField); HRESULT GetFieldNames( [in, out] ULONG *pcNames, [out, size_is(*pcNames), length_is(*pcNames)] BSTR *rgBstrNames); BOOL IsMatchingType( [in] IRecordInfo *pRecordInfo); PVOID RecordCreate(); HRESULT RecordCreateCopy( [in] PVOID pvSource, [out] PVOID *ppvDest); HRESULT RecordDestroy( [in] PVOID pvRecord); } [ local, object, uuid(00020405-0000-0000-C000-000000000046), pointer_default(unique) ] interface ICreateTypeInfo : IUnknown { typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO; HRESULT SetGuid( [in] REFGUID guid); HRESULT SetTypeFlags( [in] UINT uTypeFlags); HRESULT SetDocString( [in] LPOLESTR pStrDoc); HRESULT SetHelpContext( [in] DWORD dwHelpContext); HRESULT SetVersion( [in] WORD wMajorVerNum, [in] WORD wMinorVerNum); HRESULT AddRefTypeInfo( [in] ITypeInfo *pTInfo, [in] HREFTYPE *phRefType); HRESULT AddFuncDesc( [in] UINT index, [in] FUNCDESC *pFuncDesc); HRESULT AddImplType( [in] UINT index, [in] HREFTYPE hRefType); HRESULT SetImplTypeFlags( [in] UINT index, [in] INT implTypeFlags); HRESULT SetAlignment( [in] WORD cbAlignment); HRESULT SetSchema( [in] LPOLESTR pStrSchema); HRESULT AddVarDesc( [in] UINT index, [in] VARDESC *pVarDesc); HRESULT SetFuncAndParamNames( [in] UINT index, [in, size_is(cNames)] LPOLESTR *rgszNames, [in] UINT cNames); HRESULT SetVarName( [in] UINT index, [in] LPOLESTR szName); HRESULT SetTypeDescAlias( [in] TYPEDESC *pTDescAlias); HRESULT DefineFuncAsDllEntry( [in] UINT index, [in] LPOLESTR szDllName, [in] LPOLESTR szProcName); HRESULT SetFuncDocString( [in] UINT index, [in] LPOLESTR szDocString); HRESULT SetVarDocString( [in] UINT index, [in] LPOLESTR szDocString); HRESULT SetFuncHelpContext( [in] UINT index, [in] DWORD dwHelpContext); HRESULT SetVarHelpContext( [in] UINT index, [in] DWORD dwHelpContext); HRESULT SetMops( [in] UINT index, [in] BSTR bstrMops); HRESULT SetTypeIdldesc( [in] IDLDESC * pIdlDesc); HRESULT LayOut(); } [ local, object, uuid(0002040E-0000-0000-C000-000000000046), pointer_default(unique) ] interface ICreateTypeInfo2 : ICreateTypeInfo { typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2; HRESULT DeleteFuncDesc( [in] UINT index); HRESULT DeleteFuncDescByMemId( [in] MEMBERID memid, [in] INVOKEKIND invKind); HRESULT DeleteVarDesc( [in] UINT index); HRESULT DeleteVarDescByMemId( [in] MEMBERID memid); HRESULT DeleteImplType( [in] UINT index); HRESULT SetCustData( [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetFuncCustData( [in] UINT index, [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetParamCustData( [in] UINT indexFunc, [in] UINT indexParam, [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetVarCustData( [in] UINT index, [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetImplTypeCustData( [in] UINT index, [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetHelpStringContext( [in] ULONG dwHelpStringContext); HRESULT SetFuncHelpStringContext( [in] UINT index, [in] ULONG dwHelpStringContext); HRESULT SetVarHelpStringContext( [in] UINT index, [in] ULONG dwHelpStringContext); HRESULT Invalidate(); HRESULT SetName( [in] LPOLESTR szName); } [ local, object, uuid(00020406-0000-0000-C000-000000000046), pointer_default(unique) ] interface ICreateTypeLib : IUnknown { typedef [unique] ICreateTypeLib *LPCREATETYPELIB; HRESULT CreateTypeInfo( [in] LPOLESTR szName, [in] TYPEKIND tkind, [out] ICreateTypeInfo **ppCTInfo); HRESULT SetName( [in] LPOLESTR szName); HRESULT SetVersion( [in] WORD wMajorVerNum, [in] WORD wMinorVerNum); HRESULT SetGuid( [in] REFGUID guid); HRESULT SetDocString( [in] LPOLESTR szDoc); HRESULT SetHelpFileName( [in] LPOLESTR szHelpFileName); HRESULT SetHelpContext( [in] DWORD dwHelpContext); HRESULT SetLcid( [in] LCID lcid); HRESULT SetLibFlags( [in] UINT uLibFlags); HRESULT SaveAllChanges(); } [ local, object, uuid(0002040F-0000-0000-C000-000000000046), pointer_default(unique) ] interface ICreateTypeLib2 : ICreateTypeLib { typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2; HRESULT DeleteTypeInfo( [in] LPOLESTR szName); HRESULT SetCustData( [in] REFGUID guid, [in] VARIANT *pVarVal); HRESULT SetHelpStringContext( [in] ULONG dwHelpStringContext); HRESULT SetHelpStringDll( [in] LPOLESTR szFileName); } /***************************************************************************** * IErrorLog interface */ [ object, uuid(3127ca40-446e-11ce-8135-00aa004bb851), pointer_default(unique) ] interface IErrorLog : IUnknown { typedef IErrorLog *LPERRORLOG; HRESULT AddError( [in] LPCOLESTR pszPropName, [in] EXCEPINFO *pExcepInfo); } /***************************************************************************** * IPropertyBag interface */ [ object, uuid(55272a00-42cb-11ce-8135-00aa004bb851), pointer_default(unique) ] interface IPropertyBag : IUnknown { typedef IPropertyBag *LPPROPERTYBAG; [local] HRESULT Read( [in] LPCOLESTR pszPropName, [in, out] VARIANT *pVar, [in] IErrorLog *pErrorLog); [call_as(Read)] HRESULT RemoteRead( [in] LPCOLESTR pszPropName, [out] VARIANT *pVar, [in] IErrorLog *pErrorLog, [in] DWORD varType, [in] IUnknown *pUnkObj); HRESULT Write( [in] LPCOLESTR pszPropName, [in] VARIANT *pVar); } ================================================ FILE: wine/windows/objbase.h ================================================ /* * Copyright (C) 1998-1999 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #ifndef _OBJBASE_H_ #define _OBJBASE_H_ /***************************************************************************** * Macros to define a COM interface */ /* * The goal of the following set of definitions is to provide a way to use the same * header file definitions to provide both a C interface and a C++ object oriented * interface to COM interfaces. The type of interface is selected automatically * depending on the language but it is always possible to get the C interface in C++ * by defining CINTERFACE. * * It is based on the following assumptions: * - all COM interfaces derive from IUnknown, this should not be a problem. * - the header file only defines the interface, the actual fields are defined * separately in the C file implementing the interface. * * The natural approach to this problem would be to make sure we get a C++ class and * virtual methods in C++ and a structure with a table of pointer to functions in C. * Unfortunately the layout of the virtual table is compiler specific, the layout of * g++ virtual tables is not the same as that of an egcs virtual table which is not the * same as that generated by Visual C++. There are workarounds to make the virtual tables * compatible via padding but unfortunately the one which is imposed to the WINE emulator * by the Windows binaries, i.e. the Visual C++ one, is the most compact of all. * * So the solution I finally adopted does not use virtual tables. Instead I use inline * non virtual methods that dereference the method pointer themselves and perform the call. * * Let's take Direct3D as an example: * * #define INTERFACE IDirect3D * DECLARE_INTERFACE_(IDirect3D,IUnknown) * { * // *** IUnknown methods *** // * STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID, void**) PURE; * STDMETHOD_(ULONG,AddRef)(THIS) PURE; * STDMETHOD_(ULONG,Release)(THIS) PURE; * // *** IDirect3D methods *** // * STDMETHOD(Initialize)(THIS_ REFIID) PURE; * STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID) PURE; * STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT *, IUnknown *) PURE; * STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL *, IUnknown *) PURE; * STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT *, IUnknown *) PURE; * STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT) PURE; * }; * #undef INTERFACE * * #ifdef COBJMACROS * // *** IUnknown methods *** // * #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) * #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p) * #define IDirect3D_Release(p) (p)->lpVtbl->Release(p) * // *** IDirect3D methods *** // * #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) * #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevice(p,a,b) * #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) * #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) * #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) * #define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) * #endif * * Comments: * - The INTERFACE macro is used in the STDMETHOD macros to define the type of the 'this' * pointer. Defining this macro here saves us the trouble of having to repeat the interface * name everywhere. Note however that because of the way macros work, a macro like STDMETHOD * cannot use 'INTERFACE##_VTABLE' because this would give 'INTERFACE_VTABLE' and not * 'IDirect3D_VTABLE'. * - The DECLARE_INTERFACE declares all the structures necessary for the interface. We have to * explicitly use the interface name for macro expansion reasons again. It defines the list of * methods that are inheritable from this interface. It must be written manually (rather than * using a macro to generate the equivalent code) to avoid macro recursion (which compilers * don't like). It must start with the methods definition of the parent interface so that * method inheritance works properly. * - The 'undef INTERFACE' is here to remind you that using INTERFACE in the following macros * will not work. * - Finally the set of 'IDirect3D_Xxx' macros is a standard set of macros defined to ease access * to the interface methods in C. Unfortunately I don't see any way to avoid having to duplicate * the inherited method definitions there. This time I could have used a trick to use only one * macro whatever the number of parameters but I preferred to have it work the same way as above. * - You probably have noticed that we don't define the fields we need to actually implement this * interface: reference count, pointer to other resources and miscellaneous fields. That's * because these interfaces are just that: interfaces. They may be implemented more than once, in * different contexts and sometimes not even in Wine. Thus it would not make sense to impose * that the interface contains some specific fields. * * * In C this gives: * typedef struct IDirect3DVtbl IDirect3DVtbl; * struct IDirect3D { * IDirect3DVtbl* lpVtbl; * }; * struct IDirect3DVtbl { * HRESULT (*QueryInterface)(IDirect3D* me, REFIID riid, LPVOID* ppvObj); * ULONG (*AddRef)(IDirect3D* me); * ULONG (*Release)(IDirect3D* me); * HRESULT (*Initialize)(IDirect3D* me, REFIID a); * HRESULT (*EnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b); * HRESULT (*CreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b); * HRESULT (*CreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b); * HRESULT (*CreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b); * HRESULT (*FindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b); * }; * * #ifdef COBJMACROS * // *** IUnknown methods *** // * #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) * #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p) * #define IDirect3D_Release(p) (p)->lpVtbl->Release(p) * // *** IDirect3D methods *** // * #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) * #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevice(p,a,b) * #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) * #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) * #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) * #define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) * #endif * * Comments: * - IDirect3D only contains a pointer to the IDirect3D virtual/jump table. This is the only thing * the user needs to know to use the interface. Of course the structure we will define to * implement this interface will have more fields but the first one will match this pointer. * - The code generated by DECLARE_INTERFACE defines both the structure representing the interface and * the structure for the jump table. * - Each method is declared as a pointer to function field in the jump table. The implementation * will fill this jump table with appropriate values, probably using a static variable, and * initialize the lpVtbl field to point to this variable. * - The IDirect3D_Xxx macros then just derefence the lpVtbl pointer and use the function pointer * corresponding to the macro name. This emulates the behavior of a virtual table and should be * just as fast. * - This C code should be quite compatible with the Windows headers both for code that uses COM * interfaces and for code implementing a COM interface. * * * And in C++ (with gcc's g++): * * typedef struct IDirect3D: public IUnknown { * virtual HRESULT Initialize(REFIID a) = 0; * virtual HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK a, LPVOID b) = 0; * virtual HRESULT CreateLight(LPDIRECT3DLIGHT* a, IUnknown* b) = 0; * virtual HRESULT CreateMaterial(LPDIRECT3DMATERIAL* a, IUnknown* b) = 0; * virtual HRESULT CreateViewport(LPDIRECT3DVIEWPORT* a, IUnknown* b) = 0; * virtual HRESULT FindDevice(LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b) = 0; * }; * * Comments: * - Of course in C++ we use inheritance so that we don't have to duplicate the method definitions. * - Finally there is no IDirect3D_Xxx macro. These are not needed in C++ unless the CINTERFACE * macro is defined in which case we would not be here. */ #if defined(__cplusplus) && !defined(CINTERFACE) /* C++ interface */ #define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method #define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method #define STDMETHODV(method) virtual HRESULT STDMETHODVCALLTYPE method #define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method #define PURE = 0 #define THIS_ #define THIS void #define interface struct #define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface #define DECLARE_INTERFACE_(iface,ibase) interface DECLSPEC_NOVTABLE iface : public ibase #define DECLARE_INTERFACE_IID_(iface, ibase, iid) interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface : public ibase #define BEGIN_INTERFACE #define END_INTERFACE #else /* __cplusplus && !CINTERFACE */ /* C interface */ #define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE *method) #define STDMETHOD_(type,method) type (STDMETHODCALLTYPE *method) #define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE *method) #define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE *method) #define PURE #define THIS_ INTERFACE *This, #define THIS INTERFACE *This #define interface struct #ifdef __WINESRC__ #define CONST_VTABLE #endif #ifdef CONST_VTABLE #undef CONST_VTBL #define CONST_VTBL const #define DECLARE_INTERFACE(iface) \ typedef interface iface { const struct iface##Vtbl *lpVtbl; } iface; \ typedef struct iface##Vtbl iface##Vtbl; \ struct iface##Vtbl #else #undef CONST_VTBL #define CONST_VTBL #define DECLARE_INTERFACE(iface) \ typedef interface iface { struct iface##Vtbl *lpVtbl; } iface; \ typedef struct iface##Vtbl iface##Vtbl; \ struct iface##Vtbl #endif #define DECLARE_INTERFACE_(iface,ibase) DECLARE_INTERFACE(iface) #define DECLARE_INTERFACE_IID_(iface, ibase, iid) DECLARE_INTERFACE_(iface, ibase) #define BEGIN_INTERFACE #define END_INTERFACE #endif /* __cplusplus && !CINTERFACE */ #ifndef __IRpcStubBuffer_FWD_DEFINED__ #define __IRpcStubBuffer_FWD_DEFINED__ typedef interface IRpcStubBuffer IRpcStubBuffer; #endif #ifndef __IRpcChannelBuffer_FWD_DEFINED__ #define __IRpcChannelBuffer_FWD_DEFINED__ typedef interface IRpcChannelBuffer IRpcChannelBuffer; #endif #ifndef RC_INVOKED /* For compatibility only, at least for now */ #include #endif #include #include #include #include #ifndef INITGUID #include #endif #ifdef __cplusplus extern "C" { #endif #ifndef NONAMELESSSTRUCT #define LISet32(li, v) ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v)) #define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v)) #else #define LISet32(li, v) ((li).u.HighPart = (v) < 0 ? -1 : 0, (li).u.LowPart = (v)) #define ULISet32(li, v) ((li).u.HighPart = 0, (li).u.LowPart = (v)) #endif /***************************************************************************** * Standard API */ DWORD WINAPI CoBuildVersion(void); typedef enum tagCOINIT { COINIT_APARTMENTTHREADED = 0x2, /* Apartment model */ COINIT_MULTITHREADED = 0x0, /* OLE calls objects on any thread */ COINIT_DISABLE_OLE1DDE = 0x4, /* Don't use DDE for Ole1 support */ COINIT_SPEED_OVER_MEMORY = 0x8 /* Trade memory for speed */ } COINIT; HRESULT WINAPI CoInitialize(LPVOID lpReserved); HRESULT WINAPI CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit); void WINAPI CoUninitialize(void); DWORD WINAPI CoGetCurrentProcess(void); HRESULT WINAPI CoGetCurrentLogicalThreadId(GUID *id); HRESULT WINAPI CoGetApartmentType(APTTYPE *type, APTTYPEQUALIFIER *qualifier); HINSTANCE WINAPI CoLoadLibrary(LPOLESTR lpszLibName, BOOL bAutoFree); void WINAPI CoFreeAllLibraries(void); void WINAPI CoFreeLibrary(HINSTANCE hLibrary); void WINAPI CoFreeUnusedLibraries(void); void WINAPI CoFreeUnusedLibrariesEx(DWORD dwUnloadDelay, DWORD dwReserved); HRESULT WINAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv); HRESULT WINAPI CoCreateInstanceEx(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, COSERVERINFO* pServerInfo, ULONG cmq, MULTI_QI* pResults); HRESULT WINAPI CoGetInstanceFromFile(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, DWORD grfMode, OLECHAR* pwszName, DWORD dwCount, MULTI_QI* pResults); HRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, IStorage* pstg, DWORD dwCount, MULTI_QI* pResults); HRESULT WINAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC* lpMalloc); LPVOID WINAPI CoTaskMemAlloc(SIZE_T size) __WINE_ALLOC_SIZE(1); void WINAPI CoTaskMemFree(LPVOID ptr); LPVOID WINAPI CoTaskMemRealloc(LPVOID ptr, SIZE_T size); HRESULT WINAPI CoRegisterMallocSpy(LPMALLOCSPY pMallocSpy); HRESULT WINAPI CoRevokeMallocSpy(void); HRESULT WINAPI CoGetContextToken( ULONG_PTR *token ); /* class registration flags; passed to CoRegisterClassObject */ typedef enum tagREGCLS { REGCLS_SINGLEUSE = 0, REGCLS_MULTIPLEUSE = 1, REGCLS_MULTI_SEPARATE = 2, REGCLS_SUSPENDED = 4, REGCLS_SURROGATE = 8 } REGCLS; HRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv); HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister); HRESULT WINAPI CoRevokeClassObject(DWORD dwRegister); HRESULT WINAPI CoGetPSClsid(REFIID riid,CLSID *pclsid); HRESULT WINAPI CoRegisterPSClsid(REFIID riid, REFCLSID rclsid); HRESULT WINAPI CoRegisterSurrogate(LPSURROGATE pSurrogate); HRESULT WINAPI CoSuspendClassObjects(void); HRESULT WINAPI CoResumeClassObjects(void); ULONG WINAPI CoAddRefServerProcess(void); ULONG WINAPI CoReleaseServerProcess(void); /* marshalling */ HRESULT WINAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter, LPUNKNOWN* ppunkMarshal); HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID iid, LPVOID* ppv); HRESULT WINAPI CoGetMarshalSizeMax(ULONG* pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags); HRESULT WINAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL* ppMarshal); HRESULT WINAPI CoMarshalHresult(LPSTREAM pstm, HRESULT hresult); HRESULT WINAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags); HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM* ppStm); HRESULT WINAPI CoReleaseMarshalData(LPSTREAM pStm); HRESULT WINAPI CoDisconnectObject(LPUNKNOWN lpUnk, DWORD reserved); HRESULT WINAPI CoUnmarshalHresult(LPSTREAM pstm, HRESULT* phresult); HRESULT WINAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID* ppv); HRESULT WINAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases); BOOL WINAPI CoIsHandlerConnected(LPUNKNOWN pUnk); /* security */ HRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE* asAuthSvc, void* pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pReserved2, DWORD dwCapabilities, void* pReserved3); HRESULT WINAPI CoGetCallContext(REFIID riid, void** ppInterface); HRESULT WINAPI CoSwitchCallContext(IUnknown *pContext, IUnknown **ppOldContext); HRESULT WINAPI CoQueryAuthenticationServices(DWORD* pcAuthSvc, SOLE_AUTHENTICATION_SERVICE** asAuthSvc); HRESULT WINAPI CoQueryProxyBlanket(IUnknown* pProxy, DWORD* pwAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTH_IDENTITY_HANDLE* pAuthInfo, DWORD* pCapabilities); HRESULT WINAPI CoSetProxyBlanket(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities); HRESULT WINAPI CoCopyProxy(IUnknown* pProxy, IUnknown** ppCopy); HRESULT WINAPI CoImpersonateClient(void); HRESULT WINAPI CoQueryClientBlanket(DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTHZ_HANDLE* pPrivs, DWORD* pCapabilities); HRESULT WINAPI CoRevertToSelf(void); /* misc */ HRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID pClsidNew); HRESULT WINAPI CoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew); HRESULT WINAPI CoAllowSetForegroundWindow(IUnknown *pUnk, LPVOID lpvReserved); HRESULT WINAPI CoGetObjectContext(REFIID riid, LPVOID *ppv); HRESULT WINAPI CoRegisterInitializeSpy(IInitializeSpy *spy, ULARGE_INTEGER *cookie); HRESULT WINAPI CoRevokeInitializeSpy(ULARGE_INTEGER cookie); HRESULT WINAPI CoCreateGuid(GUID* pguid); BOOL WINAPI CoIsOle1Class(REFCLSID rclsid); BOOL WINAPI CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime, FILETIME* lpFileTime); BOOL WINAPI CoFileTimeToDosDateTime(FILETIME* lpFileTime, WORD* lpDosDate, WORD* lpDosTime); HRESULT WINAPI CoFileTimeNow(FILETIME* lpFileTime); HRESULT WINAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter); HRESULT WINAPI CoRegisterChannelHook(REFGUID ExtensionGuid, IChannelHook *pChannelHook); typedef enum tagCOWAIT_FLAGS { COWAIT_WAITALL = 0x00000001, COWAIT_ALERTABLE = 0x00000002, COWAIT_INPUTAVAILABLE = 0x00000004 } COWAIT_FLAGS; HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags,DWORD dwTimeout,ULONG cHandles,LPHANDLE pHandles,LPDWORD lpdwindex); /***************************************************************************** * GUID API */ HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR*); HRESULT WINAPI CLSIDFromString(LPCOLESTR, LPCLSID); HRESULT WINAPI CLSIDFromProgID(LPCOLESTR progid, LPCLSID riid); HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID); INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax); HRESULT WINAPI IIDFromString(LPCOLESTR str, IID *iid); HRESULT WINAPI StringFromIID(REFIID riid, LPOLESTR str); /***************************************************************************** * COM Server dll - exports */ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv) DECLSPEC_HIDDEN; HRESULT WINAPI DllCanUnloadNow(void) DECLSPEC_HIDDEN; /* shouldn't be here, but is nice for type checking */ #ifdef __WINESRC__ HRESULT WINAPI DllRegisterServer(void) DECLSPEC_HIDDEN; HRESULT WINAPI DllUnregisterServer(void) DECLSPEC_HIDDEN; #endif /***************************************************************************** * Data Object */ HRESULT WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder); HRESULT WINAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid, REFIID iid, LPVOID* ppv); /***************************************************************************** * Moniker API */ HRESULT WINAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID iidResult, LPVOID* ppvResult); HRESULT WINAPI CoGetObject(LPCWSTR pszName, BIND_OPTS *pBindOptions, REFIID riid, void **ppv); HRESULT WINAPI CreateAntiMoniker(LPMONIKER * ppmk); HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC* ppbc); HRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, LPMONIKER* ppmk); HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER* ppmk); HRESULT WINAPI CreateGenericComposite(LPMONIKER pmkFirst, LPMONIKER pmkRest, LPMONIKER* ppmkComposite); HRESULT WINAPI CreateItemMoniker(LPCOLESTR lpszDelim, LPCOLESTR lpszItem, LPMONIKER* ppmk); HRESULT WINAPI CreateObjrefMoniker(LPUNKNOWN punk, LPMONIKER * ppmk); HRESULT WINAPI CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER * ppmk); HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid); HRESULT WINAPI GetRunningObjectTable(DWORD reserved, LPRUNNINGOBJECTTABLE *pprot); HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szUserName, ULONG * pchEaten, LPMONIKER * ppmk); HRESULT WINAPI MonikerCommonPrefixWith(IMoniker* pmkThis,IMoniker* pmkOther,IMoniker** ppmkCommon); HRESULT WINAPI MonikerRelativePathTo(LPMONIKER pmkSrc, LPMONIKER pmkDest, LPMONIKER * ppmkRelPath, BOOL dwReserved); /***************************************************************************** * Storage API */ #define STGM_DIRECT 0x00000000 #define STGM_TRANSACTED 0x00010000 #define STGM_SIMPLE 0x08000000 #define STGM_READ 0x00000000 #define STGM_WRITE 0x00000001 #define STGM_READWRITE 0x00000002 #define STGM_SHARE_DENY_NONE 0x00000040 #define STGM_SHARE_DENY_READ 0x00000030 #define STGM_SHARE_DENY_WRITE 0x00000020 #define STGM_SHARE_EXCLUSIVE 0x00000010 #define STGM_PRIORITY 0x00040000 #define STGM_DELETEONRELEASE 0x04000000 #define STGM_CREATE 0x00001000 #define STGM_CONVERT 0x00020000 #define STGM_FAILIFTHERE 0x00000000 #define STGM_NOSCRATCH 0x00100000 #define STGM_NOSNAPSHOT 0x00200000 #define STGM_DIRECT_SWMR 0x00400000 #define STGFMT_STORAGE 0 #define STGFMT_FILE 3 #define STGFMT_ANY 4 #define STGFMT_DOCFILE 5 typedef struct tagSTGOPTIONS { USHORT usVersion; USHORT reserved; ULONG ulSectorSize; const WCHAR* pwcsTemplateFile; } STGOPTIONS; HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen); HRESULT WINAPI StgCreateStorageEx(const WCHAR*,DWORD,DWORD,DWORD,STGOPTIONS*,void*,REFIID,void**); HRESULT WINAPI StgIsStorageFile(LPCOLESTR fn); HRESULT WINAPI StgIsStorageILockBytes(ILockBytes *plkbyt); HRESULT WINAPI StgOpenStorage(const OLECHAR* pwcsName,IStorage* pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage**ppstgOpen); HRESULT WINAPI StgOpenStorageEx(const WCHAR* pwcwName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,STGOPTIONS *pStgOptions, void *reserved, REFIID riid, void **ppObjectOpen); HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt,DWORD grfMode, DWORD reserved, IStorage** ppstgOpen); HRESULT WINAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen); HRESULT WINAPI StgSetTimes( OLECHAR const *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime); #ifdef __cplusplus } #endif #ifndef __WINESRC__ # include #endif #include #ifndef __WINESRC__ #define FARSTRUCT #define HUGEP #define WINOLEAPI STDAPI #define WINOLEAPI_(type) STDAPI_(type) #endif /* __WINESRC__ */ #endif /* _OBJBASE_H_ */ ================================================ FILE: wine/windows/objectarray.idl ================================================ /* * Copyright 2011 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; [ uuid(92ca9dcd-5622-4bba-a805-5e9f541bd8c9), object, pointer_default(unique) ] interface IObjectArray : IUnknown { HRESULT GetCount([out] UINT *pcObjects); HRESULT GetAt( [in] UINT uiIndex, [in] REFIID riid, [out, iid_is(riid)] void **ppv); } [ uuid(5632b1a4-e38a-400a-928a-d4cd63230295), object, pointer_default(unique) ] interface IObjectCollection : IObjectArray { HRESULT AddObject([in] IUnknown *punk); HRESULT AddFromArray([in] IObjectArray *poaSource); HRESULT RemoveObjectAt([in] UINT uiIndex); HRESULT Clear(); } ================================================ FILE: wine/windows/objidl.idl ================================================ /* * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; #endif interface IStream; interface IEnumString; interface IRunningObjectTable; interface IMoniker; interface IAdviseSink; interface IAsyncManager; interface ISynchronize; typedef struct _COSERVERINFO { DWORD dwReserved1; LPWSTR pwszName; COAUTHINFO *pAuthInfo; DWORD dwReserved2; } COSERVERINFO; /******************** Fundamentals ********************/ [ local, object, uuid(00000003-0000-0000-C000-000000000046) ] interface IMarshal : IUnknown { typedef [unique] IMarshal *LPMARSHAL; HRESULT GetUnmarshalClass( [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags, [out] CLSID *pCid); HRESULT GetMarshalSizeMax( [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags, [out] DWORD *pSize); HRESULT MarshalInterface( [in, unique] IStream *pStm, [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags); HRESULT UnmarshalInterface( [in, unique] IStream *pStm, [in] REFIID riid, [out] void **ppv); HRESULT ReleaseMarshalData( [in, unique] IStream *pStm); HRESULT DisconnectObject( [in] DWORD dwReserved); } [ local, object, uuid(000001cf-0000-0000-C000-000000000046) ] interface IMarshal2 : IMarshal { typedef [unique] IMarshal2 *LPMARSHAL2; } [ local, object, uuid(00000018-0000-0000-C000-000000000046) ] interface IStdMarshalInfo : IUnknown { typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO; HRESULT GetClassForHandler( [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [out] CLSID *pClsid); } [ local, object, uuid(00000019-0000-0000-C000-000000000046) ] interface IExternalConnection : IUnknown { typedef [unique] IExternalConnection *LPEXTERNALCONNECTION; typedef enum tagEXTCONN { EXTCONN_STRONG = 0x0001, EXTCONN_WEAK = 0x0002, EXTCONN_CALLABLE = 0x0004 } EXTCONN; DWORD AddConnection( [in] DWORD extconn, [in] DWORD reserved); DWORD ReleaseConnection( [in] DWORD extconn, [in] DWORD reserved, [in] BOOL fLastReleaseCloses); } [ local, object, uuid(00000020-0000-0000-C000-000000000046) ] interface IMultiQI : IUnknown { typedef [unique] IMultiQI *LPMULTIQI; typedef struct tagMULTI_QI { const IID *pIID; IUnknown *pItf; HRESULT hr; } MULTI_QI; HRESULT QueryMultipleInterfaces( [in] ULONG cMQIs, [in, out] MULTI_QI *pMQIs); } [ local, object, uuid(00000002-0000-0000-C000-000000000046) ] interface IMalloc : IUnknown { typedef [unique] IMalloc *LPMALLOC; LPVOID Alloc( [in] SIZE_T cb); LPVOID Realloc( [in] LPVOID pv, [in] SIZE_T cb); void Free( [in] LPVOID pv); SIZE_T GetSize( [in] LPVOID pv); int DidAlloc(LPVOID pv); void HeapMinimize(); } [ local, object, uuid(0000001d-0000-0000-C000-000000000046) ] interface IMallocSpy : IUnknown { typedef [unique] IMallocSpy *LPMALLOCSPY; SIZE_T PreAlloc( [in] SIZE_T cbRequest); LPVOID PostAlloc( [in] LPVOID pActual); LPVOID PreFree( [in] LPVOID pRequest, [in] BOOL fSpyed); void PostFree( [in] BOOL fSpyed); SIZE_T PreRealloc( [in] LPVOID pRequest, [in] SIZE_T cbRequest, [out] LPVOID *ppNewRequest, [in] BOOL fSpyed); LPVOID PostRealloc( [in] LPVOID pActual, [in] BOOL fSpyed); LPVOID PreGetSize( [in] LPVOID pRequest, [in] BOOL fSpyed); SIZE_T PostGetSize( [in] SIZE_T cbActual, [in] BOOL fSpyed); LPVOID PreDidAlloc( [in] LPVOID pRequest, [in] BOOL fSpyed); int PostDidAlloc( [in] LPVOID pRequest, [in] BOOL fSpyed, [in] int fActual); void PreHeapMinimize(); void PostHeapMinimize(); } [ local, object, uuid(00000021-0000-0000-C000-000000000046) ] interface IInternalUnknown : IUnknown { HRESULT QueryInternalInterface( [in] REFIID riid, [out] void **ppv); } [ object, uuid(00000100-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumUnknown : IUnknown { typedef [unique] IEnumUnknown *LPENUMUNKNOWN; [local] HRESULT Next( [in] ULONG celt, [out] IUnknown **rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IUnknown **rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumUnknown **ppenum); } [ object, uuid(00000022-0000-0000-C000-000000000046), version(1.0), pointer_default(unique) ] interface ISurrogate : IUnknown { typedef [unique] ISurrogate *LPSURROGATE; HRESULT LoadDllServer( [in] REFCLSID Clsid); HRESULT FreeSurrogate(); } [ local, object, uuid(00000146-0000-0000-C000-000000000046) ] interface IGlobalInterfaceTable : IUnknown { typedef [unique] IGlobalInterfaceTable *LPGLOBALINTERFACETABLE; HRESULT RegisterInterfaceInGlobal( [in] IUnknown *pUnk, [in] REFIID riid, [out] DWORD *pdwCookie); HRESULT RevokeInterfaceFromGlobal( [in] DWORD dwCookie); HRESULT GetInterfaceFromGlobal( [in] DWORD dwCookie, [in] REFIID riid, [out, iid_is(riid)] void **ppv); } /******************** Monikers ********************/ [ object, uuid(0000000e-0000-0000-C000-000000000046), pointer_default(unique) ] interface IBindCtx : IUnknown { typedef [unique] IBindCtx *LPBINDCTX; typedef [unique] IBindCtx *LPBC; typedef struct tagBIND_OPTS { DWORD cbStruct; DWORD grfFlags; DWORD grfMode; DWORD dwTickCountDeadline; } BIND_OPTS, *LPBIND_OPTS; /* FIXME: C++ crap */ typedef struct tagBIND_OPTS2 { DWORD cbStruct; DWORD grfFlags; DWORD grfMode; DWORD dwTickCountDeadline; DWORD dwTrackFlags; DWORD dwClassContext; LCID locale; COSERVERINFO *pServerInfo; } BIND_OPTS2, *LPBIND_OPTS2; typedef struct tagBIND_OPTS3 { DWORD cbStruct; DWORD grfFlags; DWORD grfMode; DWORD dwTickCountDeadline; DWORD dwTrackFlags; DWORD dwClassContext; LCID locale; COSERVERINFO *pServerInfo; HWND hwnd; } BIND_OPTS3, *LPBIND_OPTS3; typedef enum tagBIND_FLAGS { BIND_MAYBOTHERUSER = 1, BIND_JUSTTESTEXISTENCE = 2 } BIND_FLAGS; HRESULT RegisterObjectBound( [in, unique] IUnknown *punk); HRESULT RevokeObjectBound( [in, unique] IUnknown *punk); HRESULT ReleaseBoundObjects(); [local] HRESULT SetBindOptions( [in] BIND_OPTS *pbindopts); [call_as(SetBindOptions)] HRESULT RemoteSetBindOptions( [in] BIND_OPTS2 *pbindopts); [local] HRESULT GetBindOptions( [in, out] BIND_OPTS *pbindopts); [call_as(GetBindOptions)] HRESULT RemoteGetBindOptions( [in, out] BIND_OPTS2 *pbindopts); HRESULT GetRunningObjectTable( [out] IRunningObjectTable **pprot); HRESULT RegisterObjectParam( [in] LPOLESTR pszKey, [in, unique] IUnknown *punk); HRESULT GetObjectParam( [in] LPOLESTR pszKey, [out] IUnknown **ppunk); HRESULT EnumObjectParam( [out] IEnumString **ppenum); HRESULT RevokeObjectParam( [in] LPOLESTR pszKey); } [ object, uuid(00000102-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumMoniker : IUnknown { typedef [unique] IEnumMoniker *LPENUMMONIKER; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IMoniker **rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IMoniker **rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumMoniker **ppenum); } [ object, uuid(00000126-0000-0000-C000-000000000046) ] interface IRunnableObject : IUnknown { typedef [unique] IRunnableObject *LPRUNNABLEOBJECT; HRESULT GetRunningClass( [out] LPCLSID lpClsid); HRESULT Run( [in] LPBINDCTX pbc); [local] BOOL IsRunning(); [call_as(IsRunning)] HRESULT RemoteIsRunning(); HRESULT LockRunning( [in] BOOL fLock, [in] BOOL fLastUnlockCloses); HRESULT SetContainedObject( [in] BOOL fContained); } /* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject), * which resolves to a compilation failure if WINE_NO_UNICODE_MACROS is defined, * but GetObject is used as a valid method name below, so we have * to undefine it in that case */ cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetObject") cpp_quote("#endif") [ object, uuid(00000010-0000-0000-C000-000000000046) ] interface IRunningObjectTable : IUnknown { typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE; HRESULT Register( [in] DWORD grfFlags, [in, unique] IUnknown *punkObject, [in, unique] IMoniker *pmkObjectName, [out] DWORD *pdwRegister); HRESULT Revoke( [in] DWORD dwRegister); HRESULT IsRunning( [in, unique] IMoniker *pmkObjectName); HRESULT GetObject( [in, unique] IMoniker *pmkObjectName, [out] IUnknown **ppunkObject); HRESULT NoteChangeTime( [in] DWORD dwRegister, [in] FILETIME *pfiletime); HRESULT GetTimeOfLastChange( [in, unique] IMoniker *pmkObjectName, [out] FILETIME *pfiletime); HRESULT EnumRunning( [out] IEnumMoniker **ppenumMoniker); } [ object, uuid(0000010c-0000-0000-C000-000000000046) ] interface IPersist : IUnknown { typedef [unique] IPersist *LPPERSIST; HRESULT GetClassID( [out] CLSID *pClassID); } [ object, uuid(00000109-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPersistStream : IPersist { typedef [unique] IPersistStream *LPPERSISTSTREAM; HRESULT IsDirty(); HRESULT Load( [in, unique] IStream *pStm); HRESULT Save( [in, unique] IStream *pStm, [in] BOOL fClearDirty); HRESULT GetSizeMax( [out] ULARGE_INTEGER *pcbSize); } [ object, uuid(0000000f-0000-0000-C000-000000000046), pointer_default(unique) ] interface IMoniker : IPersistStream { typedef [unique] IMoniker *LPMONIKER; typedef enum tagMKSYS { MKSYS_NONE = 0, MKSYS_GENERICCOMPOSITE = 1, MKSYS_FILEMONIKER = 2, MKSYS_ANTIMONIKER = 3, MKSYS_ITEMMONIKER = 4, MKSYS_POINTERMONIKER = 5, /* MKSYS_URLMONIKER = 6, */ /* defined in urlmon.idl */ MKSYS_CLASSMONIKER = 7 } MKSYS; typedef [v1_enum] enum tagMKREDUCE { MKRREDUCE_ONE = 3 << 16, MKRREDUCE_TOUSER = 2 << 16, MKRREDUCE_THROUGHUSER = 1 << 16, MKRREDUCE_ALL = 0 } MKRREDUCE; [local] HRESULT BindToObject( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riidResult, [out, iid_is(riidResult)] void **ppvResult); [call_as(BindToObject)] HRESULT RemoteBindToObject( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riidResult, [out, iid_is(riidResult)] IUnknown **ppvResult); [local] HRESULT BindToStorage( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj); [call_as(BindToStorage)] HRESULT RemoteBindToStorage( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObj); HRESULT Reduce( [in, unique] IBindCtx *pbc, [in] DWORD dwReduceHowFar, [in, out, unique] IMoniker **ppmkToLeft, [out] IMoniker **ppmkReduced); HRESULT ComposeWith( [in, unique] IMoniker *pmkRight, [in] BOOL fOnlyIfNotGeneric, [out] IMoniker **ppmkComposite); HRESULT Enum( [in] BOOL fForward, [out] IEnumMoniker **ppenumMoniker); HRESULT IsEqual( [in, unique] IMoniker *pmkOtherMoniker); HRESULT Hash( [out] DWORD *pdwHash); HRESULT IsRunning( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in, unique] IMoniker *pmkNewlyRunning); HRESULT GetTimeOfLastChange( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [out] FILETIME *pFileTime); HRESULT Inverse( [out] IMoniker **ppmk); HRESULT CommonPrefixWith( [in, unique] IMoniker *pmkOther, [out] IMoniker **ppmkPrefix); HRESULT RelativePathTo( [in, unique] IMoniker *pmkOther, [out] IMoniker **ppmkRelPath); HRESULT GetDisplayName( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [out] LPOLESTR *ppszDisplayName); HRESULT ParseDisplayName( [in, unique] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] LPOLESTR pszDisplayName, [out] ULONG *pchEaten, [out] IMoniker **ppmkOut); HRESULT IsSystemMoniker( [out] DWORD *pdwMksys); } [ object, uuid(f29f6bc0-5021-11ce-aa15-00006901293f), pointer_default(unique) ] interface IROTData : IUnknown { HRESULT GetComparisonData( [out, size_is(cbMax)] byte *pbData, [in] ULONG cbMax, [out] ULONG *pcbData); } [ object, uuid(00000101-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumString : IUnknown { typedef [unique] IEnumString *LPENUMSTRING; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLESTR *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLESTR *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumString **ppenum); } [ object, uuid(00000140-0000-0000-C000-000000000046) ] interface IClassActivator : IUnknown { HRESULT GetClassObject( [in] REFCLSID rclsid, [in] DWORD dwClassContext, [in] LCID locale, [in] REFIID riid, [out, iid_is(riid)] void **ppv); } /******************** Storage ********************/ [ object, uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ISequentialStream : IUnknown { [local] HRESULT Read( [out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead); [call_as(Read)] HRESULT RemoteRead( [out, size_is(cb), length_is(*pcbRead)] byte *pv, [in] ULONG cb, [out] ULONG *pcbRead); [local] HRESULT Write( [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(Write)] HRESULT RemoteWrite( [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); } [ object, uuid(0000000c-0000-0000-C000-000000000046), pointer_default(unique) ] interface IStream : ISequentialStream { typedef [unique] IStream *LPSTREAM; typedef struct tagSTATSTG { LPOLESTR pwcsName; DWORD type; ULARGE_INTEGER cbSize; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD grfMode; DWORD grfLocksSupported; CLSID clsid; DWORD grfStateBits; DWORD reserved; } STATSTG; typedef enum tagSTGTY { STGTY_STORAGE = 1, STGTY_STREAM = 2, STGTY_LOCKBYTES = 3, STGTY_PROPERTY = 4 } STGTY; typedef enum tagSTREAM_SEEK { STREAM_SEEK_SET = 0, STREAM_SEEK_CUR = 1, STREAM_SEEK_END = 2 } STREAM_SEEK; /* these are defined in Linux's fcntl.h, * undefine them to avoid conflicts */ cpp_quote("#undef LOCK_MAND") cpp_quote("#undef LOCK_READ") cpp_quote("#undef LOCK_WRITE") cpp_quote("#undef LOCK_RW") typedef enum tagLOCKTYPE { LOCK_WRITE = 1, LOCK_EXCLUSIVE = 2, LOCK_ONLYONCE = 4 } LOCKTYPE; [local] HRESULT Seek( [in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] ULARGE_INTEGER *plibNewPosition); [call_as(Seek)] HRESULT RemoteSeek( [in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] ULARGE_INTEGER *plibNewPosition); HRESULT SetSize( [in] ULARGE_INTEGER libNewSize); [local] HRESULT CopyTo( [in, unique] IStream *pstm, [in] ULARGE_INTEGER cb, [out] ULARGE_INTEGER *pcbRead, [out] ULARGE_INTEGER *pcbWritten); [call_as(CopyTo)] HRESULT RemoteCopyTo( [in, unique] IStream *pstm, [in] ULARGE_INTEGER cb, [out] ULARGE_INTEGER *pcbRead, [out] ULARGE_INTEGER *pcbWritten); HRESULT Commit( [in] DWORD grfCommitFlags); HRESULT Revert(); HRESULT LockRegion( [in] ULARGE_INTEGER libOffset, [in] ULARGE_INTEGER cb, [in] DWORD dwLockType); HRESULT UnlockRegion( [in] ULARGE_INTEGER libOffset, [in] ULARGE_INTEGER cb, [in] DWORD dwLockType); HRESULT Stat( [out] STATSTG *pstatstg, [in] DWORD grfStatFlag); HRESULT Clone( [out] IStream **ppstm); } [ object, uuid(0000000d-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATSTG : IUnknown { typedef [unique] IEnumSTATSTG *LPENUMSTATSTG; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATSTG *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATSTG *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATSTG **ppenum); } [ object, uuid(0000000b-0000-0000-C000-000000000046), pointer_default(unique) ] interface IStorage : IUnknown { typedef [unique] IStorage *LPSTORAGE; typedef struct tagRemSNB { unsigned long ulCntStr; unsigned long ulCntChar; [size_is(ulCntChar)] OLECHAR rgString[]; } RemSNB; typedef [unique] RemSNB *wireSNB; typedef [wire_marshal(wireSNB)] OLECHAR **SNB; HRESULT CreateStream( [in] LPCOLESTR pwcsName, [in] DWORD grfMode, [in] DWORD reserved1, [in] DWORD reserved2, [out] IStream **ppstm); [local] HRESULT OpenStream( [in] LPCOLESTR pwcsName, [in, unique] void *reserved1, [in] DWORD grfMode, [in] DWORD reserved2, [out] IStream **ppstm); [call_as(OpenStream)] HRESULT RemoteOpenStream( [in] LPCOLESTR pwcsName, [in] unsigned long cbReserved1, [in, unique, size_is(cbReserved1)] byte *reserved1, [in] DWORD grfMode, [in] DWORD reserved2, [out] IStream **ppstm); HRESULT CreateStorage( [in] LPCOLESTR pwcsName, [in] DWORD grfMode, [in] DWORD dwStgFmt, [in] DWORD reserved2, [out] IStorage **ppstg); HRESULT OpenStorage( [in, unique] LPCOLESTR pwcsName, [in, unique] IStorage *pstgPriority, [in] DWORD grfMode, [in, unique] SNB snbExclude, [in] DWORD reserved, [out] IStorage **ppstg); HRESULT CopyTo( [in] DWORD ciidExclude, [in, unique, size_is(ciidExclude)] const IID *rgiidExclude, [in, unique] SNB snbExclude, [in, unique] IStorage *pstgDest); HRESULT MoveElementTo( [in] LPCOLESTR pwcsName, [in, unique] IStorage *pstgDest, [in] LPCOLESTR pwcsNewName, [in] DWORD grfFlags); HRESULT Commit( [in] DWORD grfCommitFlags); HRESULT Revert(); [local] HRESULT EnumElements( [in] DWORD reserved1, [in, unique, size_is(1)] void *reserved2, [in] DWORD reserved3, [out] IEnumSTATSTG **ppenum); [call_as(EnumElements)] HRESULT RemoteEnumElements( [in] DWORD reserved1, [in] unsigned long cbReserved2, [in, unique, size_is(cbReserved2)] byte *reserved2, [in] DWORD reserved3, [out] IEnumSTATSTG **ppenum); HRESULT DestroyElement( [in] LPCOLESTR pwcsName); HRESULT RenameElement( [in] LPCOLESTR pwcsOldName, [in] LPCOLESTR pwcsNewName); HRESULT SetElementTimes( [in, unique] LPCOLESTR pwcsName, [in, unique] const FILETIME *pctime, [in, unique] const FILETIME *patime, [in, unique] const FILETIME *pmtime); HRESULT SetClass( [in] REFCLSID clsid); HRESULT SetStateBits( [in] DWORD grfStateBits, [in] DWORD grfMask); HRESULT Stat( [out] STATSTG *pstatstg, [in] DWORD grfStatFlag); } [ object, uuid(0000010b-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPersistFile : IPersist { typedef [unique] IPersistFile *LPPERSISTFILE; HRESULT IsDirty(); HRESULT Load( [in] LPCOLESTR pszFileName, [in] DWORD dwMode); HRESULT Save( [in, unique] LPCOLESTR pszFileName, [in] BOOL fRemember); HRESULT SaveCompleted( [in, unique] LPCOLESTR pszFileName); HRESULT GetCurFile( [out] LPOLESTR *ppszFileName); } [ object, uuid(0000010a-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPersistStorage : IPersist { typedef [unique] IPersistStorage *LPPERSISTSTORAGE; HRESULT IsDirty(); HRESULT InitNew( [in, unique] IStorage *pStg); HRESULT Load( [in, unique] IStorage *pStg); HRESULT Save( [in, unique] IStorage *pStgSave, [in] BOOL fSameAsLoad); HRESULT SaveCompleted( [in, unique] IStorage *pStgNew); HRESULT HandsOffStorage(); } [ object, uuid(00000012-0000-0000-C000-000000000046), pointer_default(unique) ] interface IRootStorage : IUnknown { typedef [unique] IRootStorage *LPROOTSTORAGE; HRESULT SwitchToFile( [in] LPOLESTR pszFile); } [ object, uuid(0000000a-0000-0000-C000-000000000046), pointer_default(unique) ] interface ILockBytes : IUnknown { typedef [unique] ILockBytes *LPLOCKBYTES; [local] HRESULT ReadAt( [in] ULARGE_INTEGER ulOffset, [out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead); [call_as(ReadAt)] HRESULT RemoteReadAt( [in] ULARGE_INTEGER ulOffset, [out, size_is(cb), length_is(*pcbRead)] byte *pv, [in] ULONG cb, [out] ULONG *pcbRead); [local] HRESULT WriteAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(WriteAt)] HRESULT RemoteWriteAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); HRESULT Flush(); HRESULT SetSize( [in] ULARGE_INTEGER cb); HRESULT LockRegion( [in] ULARGE_INTEGER libOffset, [in] ULARGE_INTEGER cb, [in] DWORD dwLockType); HRESULT UnlockRegion( [in] ULARGE_INTEGER libOffset, [in] ULARGE_INTEGER cb, [in] DWORD dwLockType); HRESULT Stat( [out] STATSTG *pstatstg, [in] DWORD grfStatFlag); } [ object, uuid(99caf010-415e-11cf-8814-00aa00b569f5), pointer_default(unique) ] interface IFillLockBytes : IUnknown { [local] HRESULT FillAppend( [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(FillAppend)] HRESULT RemoteFillAppend( [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [local] HRESULT FillAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(FillAt)] HRESULT RemoteFillAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); HRESULT SetFillSize( [in] ULARGE_INTEGER ulSize); HRESULT Terminate( [in] BOOL bCanceled); } [ object, uuid(a9d758a0-4617-11cf-95fc-00aa00680db4), pointer_default(unique) ] interface IProgressNotify : IUnknown { HRESULT OnProgress( [in] DWORD dwProgressCurrent, [in] DWORD dwProgressMaximum, [in] BOOL fAccurate, [in] BOOL fOwner); } [ local, object, uuid(0e6d4d90-6738-11cf-9608-00aa00680db4), pointer_default(unique) ] interface ILayoutStorage : IUnknown { typedef struct tagStorageLayout { DWORD LayoutType; OLECHAR *pwcsElementName; LARGE_INTEGER cOffset; LARGE_INTEGER cBytes; } StorageLayout; HRESULT LayoutScript( [in] StorageLayout *pStorageLayout, [in] DWORD nEntries, [in] DWORD glfInterleavedFlag); HRESULT BeginMonitor(); HRESULT EndMonitor(); HRESULT ReLayoutDocfile( [in] OLECHAR *pwcsNewDfName); HRESULT ReLayoutDocfileOnILockBytes( [in] ILockBytes *pILockBytes); } [ object, uuid(30f3d47a-6447-11d1-8e3c-00c04fb9386d) ] interface IBlockingLock : IUnknown { HRESULT Lock( [in] DWORD dwTimeout); HRESULT Unlock(); } [ object, uuid(bc0bf6ae-8878-11d1-83e9-00c04fc2c6d4) ] interface ITimeAndNoticeControl : IUnknown { HRESULT SuppressChanges( [in] DWORD res1, [in] DWORD res2); } [ object, uuid(8d19c834-8879-11d1-83e9-00c04fc2c6d4) ] interface IOplockStorage: IUnknown { HRESULT CreateStorageEx( [in] LPCWSTR pwcsName, [in] DWORD grfMode, [in] DWORD stgfmt, [in] DWORD grfAttrs, [in] REFIID riid, [out, iid_is(riid)] void **ppstgOpen); HRESULT OpenStorageEx( [in] LPCWSTR pwcsName, [in] DWORD grfMode, [in] DWORD stgfmt, [in] DWORD grfAttrs, [in] REFIID riid, [out, iid_is(riid)] void **ppstgOpen); } /******************** Data Object ********************/ [ object, uuid(00000103-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumFORMATETC : IUnknown { typedef [unique] IEnumFORMATETC *LPENUMFORMATETC; typedef struct tagDVTARGETDEVICE { DWORD tdSize; WORD tdDriverNameOffset; WORD tdDeviceNameOffset; WORD tdPortNameOffset; WORD tdExtDevmodeOffset; [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))] BYTE tdData[]; } DVTARGETDEVICE; typedef CLIPFORMAT *LPCLIPFORMAT; typedef struct tagFORMATETC { CLIPFORMAT cfFormat; [unique] DVTARGETDEVICE *ptd; DWORD dwAspect; LONG lindex; DWORD tymed; } FORMATETC, *LPFORMATETC; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] FORMATETC *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] FORMATETC *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumFORMATETC **ppenum); } [ object, uuid(00000105-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATDATA : IUnknown { typedef [unique] IEnumSTATDATA *LPENUMSTATDATA; typedef enum tagADVF { ADVF_NODATA = 1, ADVF_PRIMEFIRST = 2, ADVF_ONLYONCE = 4, ADVF_DATAONSTOP = 64, ADVFCACHE_NOHANDLER = 8, ADVFCACHE_FORCEBUILTIN = 16, ADVFCACHE_ONSAVE = 32 } ADVF; typedef struct tagSTATDATA { FORMATETC formatetc; DWORD advf; [unique] IAdviseSink *pAdvSink; DWORD dwConnection; } STATDATA, *LPSTATDATA; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATDATA *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATDATA *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATDATA **ppenum); } [ object, uuid(0000010f-0000-0000-C000-000000000046), pointer_default(unique) ] interface IAdviseSink : IUnknown { typedef IAdviseSink *LPADVISESINK; typedef [v1_enum] enum tagTYMED { TYMED_HGLOBAL = 1, TYMED_FILE = 2, TYMED_ISTREAM = 4, TYMED_ISTORAGE = 8, TYMED_GDI = 16, TYMED_MFPICT = 32, TYMED_ENHMF = 64, TYMED_NULL = 0 } TYMED; typedef struct tagRemSTGMEDIUM { DWORD tymed; DWORD dwHandleType; unsigned long pData; unsigned long pUnkForRelease; unsigned long cbData; [size_is(cbData)] byte data[]; } RemSTGMEDIUM; typedef struct tagSTGMEDIUM { DWORD tymed; [switch_is(tymed)] union { [case(TYMED_GDI)] HBITMAP hBitmap; [case(TYMED_MFPICT)] HMETAFILEPICT hMetaFilePict; [case(TYMED_ENHMF)] HENHMETAFILE hEnhMetaFile; [case(TYMED_HGLOBAL)] HGLOBAL hGlobal; [case(TYMED_FILE)] LPOLESTR lpszFileName; [case(TYMED_ISTREAM)] IStream *pstm; [case(TYMED_ISTORAGE)] IStorage *pstg; [default] ; } DUMMYUNIONNAME; [unique] IUnknown *pUnkForRelease; } uSTGMEDIUM; /* copied from wingdi.h */ #define OBJ_PEN 1 #define OBJ_BRUSH 2 #define OBJ_DC 3 #define OBJ_METADC 4 #define OBJ_PAL 5 #define OBJ_FONT 6 #define OBJ_BITMAP 7 #define OBJ_REGION 8 #define OBJ_METAFILE 9 #define OBJ_MEMDC 10 #define OBJ_EXTPEN 11 #define OBJ_ENHMETADC 12 #define OBJ_ENHMETAFILE 13 typedef union _GDI_OBJECT switch(DWORD ObjectType) u { case OBJ_BITMAP: wireHBITMAP hBitmap; case OBJ_PAL: wireHPALETTE hPalette; default: wireHGLOBAL hGeneric; } GDI_OBJECT; typedef struct _userSTGMEDIUM { union switch(DWORD tymed) u { case TYMED_NULL: ; case TYMED_MFPICT: wireHMETAFILEPICT hMetaFilePict; case TYMED_ENHMF: wireHENHMETAFILE hHEnhMetaFile; case TYMED_GDI: GDI_OBJECT *hGdiHandle; case TYMED_HGLOBAL: wireHGLOBAL hGlobal; case TYMED_FILE: LPOLESTR lpszFileName; case TYMED_ISTREAM: BYTE_BLOB *pstm; case TYMED_ISTORAGE: BYTE_BLOB *pstg; } DUMMYUNIONNAME; IUnknown *pUnkForRelease; } userSTGMEDIUM; typedef [unique] userSTGMEDIUM *wireSTGMEDIUM; typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM; typedef [unique] userSTGMEDIUM *wireASYNC_STGMEDIUM; typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM; typedef STGMEDIUM *LPSTGMEDIUM; typedef struct _userFLAG_STGMEDIUM { long ContextFlags; long fPassOwnership; userSTGMEDIUM Stgmed; } userFLAG_STGMEDIUM; typedef [unique] userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM; typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM { long ContextFlags; long fPassOwnership; STGMEDIUM Stgmed; } FLAG_STGMEDIUM; [local] void OnDataChange( [in, unique] FORMATETC *pFormatetc, [in, unique] STGMEDIUM *pStgmed); [call_as(OnDataChange)] HRESULT RemoteOnDataChange( [in, unique] FORMATETC *pFormatetc, [in, unique] ASYNC_STGMEDIUM *pStgmed); [local] void OnViewChange( [in] DWORD dwAspect, [in] LONG lindex); [call_as(OnViewChange)] HRESULT RemoteOnViewChange( [in] DWORD dwAspect, [in] LONG lindex); [local] void OnRename( [in] IMoniker *pmk); [call_as(OnRename)] HRESULT RemoteOnRename( [in] IMoniker *pmk); [local] void OnSave(); [call_as(OnSave)] HRESULT RemoteOnSave(); [local] void OnClose(); [call_as(OnClose)] HRESULT RemoteOnClose(); } [ object, uuid(00000125-0000-0000-C000-000000000046), pointer_default(unique) ] interface IAdviseSink2 : IAdviseSink { typedef [unique] IAdviseSink2 *LPADVISESINK2; [local] void OnLinkSrcChange( [in, unique] IMoniker *pmk); [call_as(OnLinkSrcChange)] HRESULT RemoteOnLinkSrcChange( [in, unique] IMoniker *pmk); } [ object, uuid(0000010e-0000-0000-C000-000000000046), pointer_default(unique) ] interface IDataObject : IUnknown { typedef [unique] IDataObject *LPDATAOBJECT; typedef enum tagDATADIR { DATADIR_GET = 1, DATADIR_SET = 2 } DATADIR; [local] HRESULT GetData( [in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium); [call_as(GetData)] HRESULT RemoteGetData( [in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pRemoteMedium); [local] HRESULT GetDataHere( [in, unique] FORMATETC *pformatetc, [in, out] STGMEDIUM *pmedium); [call_as(GetDataHere)] HRESULT RemoteGetDataHere( [in, unique] FORMATETC *pformatetc, [in, out] STGMEDIUM *pRemoteMedium); HRESULT QueryGetData( [in, unique] FORMATETC *pformatetc); HRESULT GetCanonicalFormatEtc( [in, unique] FORMATETC *pformatectIn, [out] FORMATETC *pformatetcOut); [local] HRESULT SetData( [in, unique] FORMATETC *pformatetc, [in, unique] STGMEDIUM *pmedium, [in] BOOL fRelease); [call_as(SetData)] HRESULT RemoteSetData( [in, unique] FORMATETC *pformatetc, [in, unique] FLAG_STGMEDIUM *pmedium, [in] BOOL fRelease); HRESULT EnumFormatEtc( [in] DWORD dwDirection, [out] IEnumFORMATETC **ppenumFormatEtc); HRESULT DAdvise( [in] FORMATETC *pformatetc, [in] DWORD advf, [in, unique] IAdviseSink *pAdvSink, [out] DWORD *pdwConnection); HRESULT DUnadvise( [in] DWORD dwConnection); HRESULT EnumDAdvise( [out] IEnumSTATDATA **ppenumAdvise); } [ local, object, uuid(00000110-0000-0000-C000-000000000046) ] interface IDataAdviseHolder : IUnknown { typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER; HRESULT Advise( [in, unique] IDataObject *pDataObject, [in, unique] FORMATETC *pFetc, [in] DWORD advf, [in, unique] IAdviseSink *pAdvise, [out] DWORD *pdwConnection); HRESULT Unadvise( [in] DWORD dwConnection); HRESULT EnumAdvise( [out] IEnumSTATDATA **ppenumAdvise); HRESULT SendOnDataChange( [in, unique] IDataObject *pDataObject, [in] DWORD dwReserved, [in] DWORD advf); } /******************** Remoting ********************/ [ local, object, uuid(00000016-0000-0000-C000-000000000046) ] interface IMessageFilter : IUnknown { typedef [unique] IMessageFilter *LPMESSAGEFILTER; typedef enum tagCALLTYPE { CALLTYPE_TOPLEVEL = 1, CALLTYPE_NESTED = 2, CALLTYPE_ASYNC = 3, CALLTYPE_TOPLEVEL_CALLPENDING = 4, CALLTYPE_ASYNC_CALLPENDING = 5 } CALLTYPE; typedef enum tagSERVERCALL { SERVERCALL_ISHANDLED = 0, SERVERCALL_REJECTED = 1, SERVERCALL_RETRYLATER = 2 } SERVERCALL; typedef enum tagPENDINGTYPE { PENDINGTYPE_TOPLEVEL = 1, PENDINGTYPE_NESTED = 2 } PENDINGTYPE; typedef enum tagPENDINGMSG { PENDINGMSG_CANCELCALL = 0, PENDINGMSG_WAITNOPROCESS = 1, PENDINGMSG_WAITDEFPROCESS = 2 } PENDINGMSG; typedef struct tagINTERFACEINFO { IUnknown *pUnk; IID iid; WORD wMethod; } INTERFACEINFO, *LPINTERFACEINFO; DWORD HandleInComingCall( [in] DWORD dwCallType, [in] HTASK htaskCaller, [in] DWORD dwTickCount, [in] LPINTERFACEINFO lpInterfaceInfo); DWORD RetryRejectedCall( [in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] DWORD dwRejectType); DWORD MessagePending( [in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] DWORD dwPendingType); } [ local, object, uuid(D5F56B60-593B-101A-B569-08002B2DBF7A) ] interface IRpcChannelBuffer : IUnknown { typedef [unique] IRpcChannelBuffer *LPRPCCHANNELBUFFER; typedef unsigned long RPCOLEDATAREP; typedef struct tagRPCOLEMESSAGE { void *reserved1; RPCOLEDATAREP dataRepresentation; void *Buffer; ULONG cbBuffer; ULONG iMethod; void *reserved2[5]; ULONG rpcFlags; } RPCOLEMESSAGE; typedef RPCOLEMESSAGE *PRPCOLEMESSAGE; HRESULT GetBuffer( [in] RPCOLEMESSAGE *pMessage, [in] REFIID riid); HRESULT SendReceive( [in,out] RPCOLEMESSAGE *pMessage, [out] ULONG *pStatus); HRESULT FreeBuffer( [in] RPCOLEMESSAGE *pMessage); HRESULT GetDestCtx( [out] DWORD *pdwDestContext, [out] void **ppvDestContext); HRESULT IsConnected(); } [ local, object, uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf) ] interface IRpcChannelBuffer2 : IRpcChannelBuffer { typedef [unique] IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2; HRESULT GetProtocolVersion( [in,out] DWORD *pdwVersion); } [ local, object, uuid(25B15600-0115-11d0-BF0D-00AA00B8DFD2) ] interface IRpcChannelBuffer3 : IRpcChannelBuffer2 { typedef [unique] IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3; HRESULT Send( [in,out] RPCOLEMESSAGE *pMsg, [out] ULONG *pulStatus); HRESULT Receive( [in,out] RPCOLEMESSAGE *pMsg, [in] ULONG ulSize, [out] ULONG *pulStatus); HRESULT Cancel( [in] RPCOLEMESSAGE *pMsg); HRESULT GetCallContext( [in] RPCOLEMESSAGE *pMsg, [in] REFIID riid, [out] void **pInterface); HRESULT GetDestCtxEx( [in] RPCOLEMESSAGE *pMsg, [out] DWORD *pdwDestContext, [out] void **ppvDestContext); HRESULT GetState( [in] RPCOLEMESSAGE *pMsg, [out] DWORD *pState); HRESULT RegisterAsync( [in] RPCOLEMESSAGE *pMsg, [in] IAsyncManager *pAsyncMgr); } [ local, object, uuid(a5029fb6-3c34-11d1-9c99-00c04fb998aa), pointer_default(unique) ] interface IAsyncRpcChannelBuffer : IRpcChannelBuffer2 { HRESULT Send( [in, out] RPCOLEMESSAGE *pMsg, [in] ISynchronize *pSync, [out] ULONG *pulStatus); HRESULT Receive( [in, out] RPCOLEMESSAGE *pMsg, [out] ULONG *pulStatus); HRESULT GetDestCtxEx( [in] RPCOLEMESSAGE *pMsg, [out] DWORD *pdwDestContext, [out] void **ppvDestContext); } [ local, object, uuid(58a08519-24c8-4935-b482-3fd823333a4f) ] interface IRpcSyntaxNegotiate : IUnknown { HRESULT NegotiateSyntax( [in, out] RPCOLEMESSAGE *pMsg); } [ local, object, uuid(D5F56A34-593B-101A-B569-08002B2DBF7A) ] interface IRpcProxyBuffer : IUnknown { typedef [unique] IRpcProxyBuffer *LPRPCPROXYBUFFER; HRESULT Connect( [in, unique] IRpcChannelBuffer *pRpcChannelBuffer); void Disconnect(); } [ local, object, uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A) ] interface IRpcStubBuffer : IUnknown { typedef [unique] IRpcStubBuffer *LPRPCSTUBBUFFER; HRESULT Connect( [in] IUnknown *pUnkServer); void Disconnect(); HRESULT Invoke( [in] RPCOLEMESSAGE *_prpcmsg, [in] IRpcChannelBuffer *_pRpcChannelBuffer); IRpcStubBuffer *IsIIDSupported( [in] REFIID riid); ULONG CountRefs(); HRESULT DebugServerQueryInterface( void **ppv); void DebugServerRelease( void *pv); } [ local, object, uuid(D5F569D0-593B-101A-B569-08002B2DBF7A) ] interface IPSFactoryBuffer : IUnknown { typedef [unique] IPSFactoryBuffer *LPPSFACTORYBUFFER; HRESULT CreateProxy( [in] IUnknown *pUnkOuter, [in] REFIID riid, [out] IRpcProxyBuffer **ppProxy, [out] void **ppv); HRESULT CreateStub( [in] REFIID riid, [in, unique] IUnknown *pUnkServer, [out] IRpcStubBuffer **ppStub); } [ local, object, uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4) ] interface IChannelHook : IUnknown { typedef [unique] IChannelHook *LPCHANNELHOOK; typedef struct SChannelHookCallInfo { IID iid; DWORD cbSize; GUID uCausality; DWORD dwServerPid; DWORD iMethod; void *pObject; } SChannelHookCallInfo; void ClientGetSize( [in] REFGUID uExtent, [in] REFIID riid, [out] ULONG *pDataSize); void ClientFillBuffer( [in] REFGUID uExtent, [in] REFIID riid, [in, out] ULONG *pDataSize, [in] void *pDataBuffer); void ClientNotify( [in] REFGUID uExtent, [in] REFIID riid, [in] ULONG cbDataSize, [in] void *pDataBuffer, [in] DWORD lDataRep, [in] HRESULT hrFault); void ServerNotify( [in] REFGUID uExtent, [in] REFIID riid, [in] ULONG cbDataSize, [in] void *pDataBuffer, [in] DWORD lDataRep); void ServerGetSize( [in] REFGUID uExtent, [in] REFIID riid, [in] HRESULT hrFault, [out] ULONG *pDataSize); void ServerFillBuffer( [in] REFGUID uExtent, [in] REFIID riid, [in, out] ULONG *pDataSize, [in] void *pDataBuffer, [in] HRESULT hrFault ); } extern const FMTID FMTID_SummaryInformation; extern const FMTID FMTID_DocSummaryInformation; extern const FMTID FMTID_UserDefinedProperties; /******************** Connection Points ********************/ /* FIXME */ /******************** DCOM ********************/ [ local, object, uuid(0000013D-0000-0000-C000-000000000046) ] interface IClientSecurity : IUnknown { typedef struct tagSOLE_AUTHENTICATION_SERVICE { DWORD dwAuthnSvc; DWORD dwAuthzSvc; OLECHAR *pPrincipalName; HRESULT hr; } SOLE_AUTHENTICATION_SERVICE; typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE; typedef struct tagSOLE_AUTHENTICATION_INFO { DWORD dwAuthnSvc; DWORD dwAuthzSvc; void *pAuthInfo; } SOLE_AUTHENTICATION_INFO; const OLECHAR *COLE_DEFAULT_PRINCIPAL = (OLECHAR*) -1; const void *COLE_DEFAULT_AUTHINFO = (void*) -1; typedef struct tagSOLE_AUTHENTICATION_LIST { DWORD cAuthInfo; SOLE_AUTHENTICATION_INFO *aAuthInfo; } SOLE_AUTHENTICATION_LIST; typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES { EOAC_NONE = 0x0, EOAC_MUTUAL_AUTH = 0x1, EOAC_SECURE_REFS = 0x2, /* CoInitializeSecurity only */ EOAC_ACCESS_CONTROL = 0x4, /* CoInitializeSecurity only */ EOAC_APPID = 0x8, /* CoInitializeSecurity only */ EOAC_DYNAMIC = 0x10, /* CoInitializeSecurity only */ EOAC_STATIC_CLOAKING = 0x20, EOAC_DYNAMIC_CLOAKING = 0x40, EOAC_ANY_AUTHORITY = 0x80, EOAC_MAKE_FULLSIC = 0x100, EOAC_REQUIRE_FULLSIC = 0x200, /* CoInitializeSecurity only */ EOAC_AUTO_IMPERSONATE = 0x400, /* CoInitializeSecurity only */ EOAC_DEFAULT = 0x800, EOAC_DISABLE_AAA = 0x1000, /* CoInitializeSecurity only */ EOAC_NO_CUSTOM_MARSHAL = 0x2000, /* CoInitializeSecurity only */ } EOLE_AUTHENTICATION_CAPABILITIES; HRESULT QueryBlanket( [in] IUnknown *pProxy, [out] DWORD *pAuthnSvc, [out] DWORD *pAuthzSvc, [out] OLECHAR **pServerPrincName, [out] DWORD *pAuthnLevel, [out] DWORD *pImpLevel, [out] void **pAuthInfo, [out] DWORD *pCapabilities); HRESULT SetBlanket( [in] IUnknown *pProxy, [in] DWORD AuthnSvc, [in] DWORD AuthzSvc, [in] OLECHAR *pServerPrincName, [in] DWORD AuthnLevel, [in] DWORD ImpLevel, [in] void *pAuthInfo, [in] DWORD Capabilities); HRESULT CopyProxy( [in] IUnknown *pProxy, [out] IUnknown **ppCopy); } [ local, object, uuid(0000013E-0000-0000-C000-000000000046) ] interface IServerSecurity : IUnknown { HRESULT QueryBlanket( [out] DWORD *pAuthnSvc, [out] DWORD *pAuthzSvc, [out] OLECHAR **pServerPrincName, [out] DWORD *pAuthnLevel, [out] DWORD *pImpLevel, [out] void **pPrivs, [out] DWORD *pCapabilities); HRESULT ImpersonateClient(); HRESULT RevertToSelf(); BOOL IsImpersonating(); } [ local, object, uuid(00000024-0000-0000-C000-000000000046) ] interface IAsyncSetup : IUnknown { HRESULT GetAsyncManager( [in] REFIID riid, [in] IUnknown *pOuter, [in] DWORD dwFlags, [out] IUnknown **ppInner, [out] IAsyncManager **ppAsyncMgr); } [ object, uuid(0e6d4d92-6738-11cf-9608-00aa00680db4) ] interface IDirectWriterLock : IUnknown { HRESULT WaitForWriteAccess( [in] DWORD dwTimeout); HRESULT ReleaseWriteAccess(); HRESULT HaveWriteAccess(); } [ object, uuid(00000030-0000-0000-C000-000000000046) ] interface ISynchronize : IUnknown { HRESULT Wait( [in] DWORD dwFlags, [in] DWORD dwMilliseconds); HRESULT Signal(); HRESULT Reset(); } [ local, object, uuid(00000031-0000-0000-C000-000000000046) ] interface ISynchronizeHandle : IUnknown { HRESULT GetHandle( [out] HANDLE *ph); } [ local, object, uuid(00000032-0000-0000-C000-000000000046) ] interface ISynchronizeEvent : ISynchronizeHandle { HRESULT SetEventHandle( [in] HANDLE *ph); } [ local, object, uuid(00000033-0000-0000-C000-000000000046) ] interface ISynchronizeContainer : IUnknown { HRESULT AddSynchronize( [in] ISynchronize *pSync); HRESULT WaitMultiple( [in] DWORD dwFlags, [in] DWORD dwTimeOut, [out] ISynchronize **ppSync); } [ local, object, uuid(00000025-0000-0000-C000-000000000046) ] interface ISynchronizeMutex : ISynchronize { HRESULT ReleaseMutex(); } [ local, object, uuid(00000029-0000-0000-C000-000000000046) ] interface ICancelMethodCalls : IUnknown { typedef [unique] ICancelMethodCalls *LPCANCELMETHODCALLS; HRESULT Cancel( [in] ULONG ulSeconds); HRESULT TestCancel(); } [ local, object, uuid(0000002A-0000-0000-C000-000000000046) ] interface IAsyncManager : IUnknown { typedef enum tagDCOM_CALL_STATE { DCOM_NONE = 0, DCOM_CALL_COMPLETE = 1, DCOM_CALL_CANCELED = 2 } DCOM_CALL_STATE; HRESULT CompleteCall( [in] HRESULT Result); HRESULT GetCallContext( [in] REFIID riid, [out] void **pInterface); HRESULT GetState( [out] ULONG *pulStateFlags); } [ local, object, uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ICallFactory : IUnknown { HRESULT CreateCall( [in] REFIID riid, [in] IUnknown *pCtrlUnk, [in] REFIID riid2, [out, iid_is(riid2)] IUnknown **ppv); } [ local, object, uuid(00000144-0000-0000-C000-000000000046) ] interface IRpcOptions : IUnknown { HRESULT Set( [in] IUnknown *pPrx, [in] DWORD dwProperty, [in] ULONG_PTR dwValue); HRESULT Query( [in] IUnknown *pPrx, [in] DWORD dwProperty, [out] ULONG_PTR *pdwValue); } enum { COMBND_RPCTIMEOUT = 1, COMBND_SERVER_LOCALITY = 2 }; enum { SERVER_LOCALITY_PROCESS_LOCAL = 0, SERVER_LOCALITY_MACHINE_LOCAL = 1, SERVER_LOCALITY_REMOTE = 2 }; [ local, object, uuid(00000149-0000-0000-C000-000000000046), pointer_default(unique) ] interface IRpcHelper : IUnknown { HRESULT GetDCOMProtocolVersion( [out] DWORD *pComVersion); HRESULT GetIIDFromOBJREF( [in] void *pObjRef, [out] IID **piid); } [ local, object, uuid(eb0cb9e8-7996-11d2-872e-0000f8080859) ] interface IReleaseMarshalBuffers : IUnknown { HRESULT ReleaseMarshalBuffer( [in] RPCOLEMESSAGE *pMsg, [in] DWORD dwFlags, [in, unique] IUnknown *pChnl); } [ local, object, uuid(0000002B-0000-0000-C000-000000000046) ] interface IWaitMultiple : IUnknown { HRESULT WaitMultiple( [in] DWORD timeout, [out] ISynchronize **pSync); HRESULT AddSynchronize( [in] ISynchronize *pSync); } [ object, uuid(00000026-0000-0000-C000-000000000046) ] interface IUrlMon : IUnknown { HRESULT AsyncGetClassBits( [in] REFCLSID rclsid, [in, unique] LPCWSTR pszTYPE, [in, unique] LPCWSTR pszExt, [in] DWORD dwFileVersionMS, [in] DWORD dwFileVersionLS, [in, unique] LPCWSTR pszCodeBase, [in] IBindCtx *pbc, [in] DWORD dwClassContext, [in] REFIID riid, [in] DWORD flags); } [ local, object, uuid(00000145-0000-0000-C000-000000000046) ] interface IForegroundTransfer : IUnknown { HRESULT AllowForegroundTransfer( [in] void *lpvReserved); } [ local, object, uuid(00000147-0000-0000-C000-000000000046) ] interface IAddrTrackingControl : IUnknown { typedef [unique] IAddrTrackingControl *LPADDRTRACKINGCONTROL; HRESULT EnableCOMDynamicAddrTracking(); HRESULT DisableCOMDynamicAddrTracking(); } [ local, object, uuid(00000148-0000-0000-C000-000000000046) ] interface IAddrExclusionControl : IUnknown { typedef [unique] IAddrExclusionControl *LPADDREXCLUSIONCONTROL; HRESULT GetCurrentAddrExclusionList( [in] REFIID riid, [out, iid_is(riid)] void **ppEnumerator); HRESULT UpdateAddrExclusionList( [in] IUnknown *pEnumerator); } typedef enum _APTTYPE { APTTYPE_CURRENT = -1, APTTYPE_STA = 0, APTTYPE_MTA = 1, APTTYPE_NA = 2, APTTYPE_MAINSTA = 3 } APTTYPE; typedef enum _APTTYPEQUALIFIER { APTTYPEQUALIFIER_NONE, APTTYPEQUALIFIER_IMPLICIT_MTA, APTTYPEQUALIFIER_NA_ON_MTA, APTTYPEQUALIFIER_NA_ON_STA, APTTYPEQUALIFIER_NA_ON_IMPLICIT_MTA, APTTYPEQUALIFIER_NA_ON_MAINSTA } APTTYPEQUALIFIER; typedef enum _THDTYPE { THDTYPE_BLOCKMESSAGES = 0, THDTYPE_PROCESSMESSAGES = 1 } THDTYPE; [ local, object, uuid(000001ce-0000-0000-C000-000000000046), pointer_default(unique) ] interface IComThreadingInfo : IUnknown { HRESULT GetCurrentApartmentType( [out] APTTYPE *pAptType); HRESULT GetCurrentThreadType( [out] THDTYPE *pThreadType); HRESULT GetCurrentLogicalThreadId( [out] GUID *pguidLogicalThreadId); HRESULT SetCurrentLogicalThreadId( [in] REFGUID rguid); } [ object, pointer_default(unique), uuid(72380d55-8d2b-43a3-8513-2b6ef31434e9) ] interface IProcessInitControl : IUnknown { HRESULT ResetInitializerTimeout( [in] DWORD dwSecondsRemaining); } [ local, object, uuid(00000034-0000-0000-C000-000000000046), pointer_default(unique) ] interface IInitializeSpy : IUnknown { typedef [unique] IInitializeSpy *LPINITIALIZESPY; HRESULT PreInitialize( [in] DWORD dwCoInit, [in] DWORD dwCurThreadAptRefs); HRESULT PostInitialize( [in] HRESULT hrCoInit, [in] DWORD dwCoInit, [in] DWORD dwNewThreadAptRefs); HRESULT PreUninitialize( [in] DWORD dwCurThreadAptRefs); HRESULT PostUninitialize( [in] DWORD dwNewThreadAptRefs); } [ object, uuid(969dc708-5c76-11d1-8d86-0000f804b057) ] interface IThumbnailExtractor : IUnknown { HRESULT ExtractThumbnail( [in] IStorage *pStg, [in] ULONG ulLength, [in] ULONG ulHeight, [out] ULONG *pulOutputLength, [out] ULONG *pulOutputHeight, [out] HBITMAP *phOutputBitmap); HRESULT OnFileUpdated( [in] IStorage *pStg); } typedef enum tagGLOBALOPT_PROPERTIES { COMGLB_EXCEPTION_HANDLING = 1, COMGLB_APPID = 2, COMGLB_RPC_THREADPOOL_SETTING = 3 } GLOBALOPT_PROPERTIES; typedef enum tagGLOBALOPT_EH_VALUES { COMGLB_EXCEPTION_HANDLE = 0, COMGLB_EXCEPTION_DONOT_HANDLE_FATAL = 1, COMGLB_EXCEPTION_DONOT_HANDLE = COMGLB_EXCEPTION_DONOT_HANDLE_FATAL, COMGLB_EXCEPTION_DONOT_HANDLE_ANY = 2 } GLOBALOPT_EH_VALUES; typedef enum tagGLOBALOPT_RPCTP_VALUES { COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL = 0, COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL = 1 } GLOBALOPT_RPCTP_VALUES; [ object, local, pointer_default(unique), uuid(0000015B-0000-0000-C000-000000000046) ] interface IGlobalOptions : IUnknown { HRESULT Set([in] GLOBALOPT_PROPERTIES property, [in] ULONG_PTR value); HRESULT Query([in] GLOBALOPT_PROPERTIES property, [out ] ULONG_PTR *value); } [ object, pointer_default(unique), uuid(947990de-cc28-11d2-a0f7-00805f858fb1) ] interface IDummyHICONIncluder : IUnknown { HRESULT Dummy([in] HICON hIcon, [in] HDC hdc); } [ object, local, pointer_default(unique), uuid(a2f05a09-27a2-42b5-bc0e-ac163ef49d9b) ] interface IApartmentShutdown : IUnknown { void OnUninitialize([in] UINT64 identifier); } cpp_quote("#ifdef USE_COM_CONTEXT_DEF") typedef DWORD CPFLAGS; typedef struct tagContextProperty { GUID policyId; CPFLAGS flags; [unique] IUnknown *pUnk; } ContextProperty; [ local, object, uuid(000001c1-0000-0000-C000-000000000046) ] interface IEnumContextProps : IUnknown { typedef [unique] IEnumContextProps *LPENUMCONTEXTPROPS; HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] ContextProperty *pContextProperties, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumContextProps **ppEnumContextProps); HRESULT Count( [out] ULONG *pcelt); } [ local, object, uuid(000001c0-0000-0000-C000-000000000046) ] interface IContext : IUnknown { HRESULT SetProperty( [in] REFGUID policyId, [in] CPFLAGS flags, [in] IUnknown *pUnk); HRESULT RemoveProperty( [in] REFGUID policyId); HRESULT GetProperty( [in] REFGUID guid, [out] CPFLAGS *pFlags, [out] IUnknown **ppUnk); HRESULT EnumContextProps( [out] IEnumContextProps **ppEnumContextProps); } [ local, object, uuid(000001c6-0000-0000-c000-000000000046), pointer_default(unique) ] interface IObjContext : IContext { void Reserved1(); void Reserved2(); void Reserved3(); void Reserved4(); void Reserved5(); void Reserved6(); void Reserved7(); } cpp_quote("#endif /* defined USE_COM_CONTEXT_DEF */") ================================================ FILE: wine/windows/objsafe.idl ================================================ /* * Copyright (C) 2005 CorVu Corporation * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "unknwn.idl"; #endif cpp_quote("#define INTERFACESAFE_FOR_UNTRUSTED_CALLER 1") cpp_quote("#define INTERFACESAFE_FOR_UNTRUSTED_DATA 2") cpp_quote("#define INTERFACE_USES_DISPEX 4") cpp_quote("#define INTERFACE_USES_SECURITY_MANAGER 8") cpp_quote("DEFINE_GUID(CATID_SafeForScripting, 0x7dd95801,0x9882,0x11cf,0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4);") cpp_quote("DEFINE_GUID(CATID_SafeForInitializing, 0x7dd95802,0x9882,0x11cf,0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4);") [ object, uuid(cb5bdc81-93c1-11cf-8f20-00805f2cd064), pointer_default(unique) ] interface IObjectSafety : IUnknown { HRESULT GetInterfaceSafetyOptions([in] REFIID riid, [out] DWORD *pdwSupportedOptions, [out] DWORD *pdwEnabledOptions); HRESULT SetInterfaceSafetyOptions([in] REFIID riid, [in] DWORD dwOptionSetMask, [in] DWORD dwEnabledOptions); } ================================================ FILE: wine/windows/objsel.h ================================================ /* * objsel.h * * Object Picker Dialog * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef __OBJSEL_H_ #define __OBJSEL_H_ #ifdef __cplusplus extern "C" { #endif DEFINE_GUID(CLSID_DsObjectPicker, 0x17d6ccd8, 0x3b7b, 0x11d2, 0xb9,0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7); DEFINE_GUID(IID_IDsObjectPicker, 0x0c87e64e, 0x3b7a, 0x11d2, 0xb9,0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7); #define CFSTR_DSOP_DS_SELECTION_LIST TEXT("CFSTR_DSOP_DS_SELECTION_LIST") /* up-level scope filters in the DSOP_UPLEVEL_FILTER_FLAGS structure */ #define DSOP_FILTER_INCLUDE_ADVANCED_VIEW (0x1) #define DSOP_FILTER_USERS (0x2) #define DSOP_FILTER_BUILTIN_GROUPS (0x4) #define DSOP_FILTER_WELL_KNOWN_PRINCIPALS (0x8) #define DSOP_FILTER_UNIVERSAL_GROUPS_DL (0x10) #define DSOP_FILTER_UNIVERSAL_GROUPS_SE (0x20) #define DSOP_FILTER_GLOBAL_GROUPS_DL (0x40) #define DSOP_FILTER_GLOBAL_GROUPS_SE (0x80) #define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_DL (0x100) #define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE (0x200) #define DSOP_FILTER_CONTACTS (0x400) #define DSOP_FILTER_COMPUTERS (0x800) #define DSOP_FILTER_SERVICE_ACCOUNTS (0x1000) #define DSOP_FILTER_PASSWORDSETTINGS_OBJECTS (0x2000) typedef struct _DSOP_UPLEVEL_FILTER_FLAGS { ULONG flBothModes; ULONG flMixedModeOnly; ULONG flNativeModeOnly; } DSOP_UPLEVEL_FILTER_FLAGS, *PDSOP_UPLEVEL_FILTER_FLAGS; /* down-level scope filters in the DSOP_FILTER_FLAGS structure */ #define DSOP_DOWNLEVEL_FILTER_USERS (0x80000001) #define DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS (0x80000002) #define DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS (0x80000004) #define DSOP_DOWNLEVEL_FILTER_COMPUTERS (0x80000008) #define DSOP_DOWNLEVEL_FILTER_WORLD (0x80000010) #define DSOP_DOWNLEVEL_FILTER_AUTHENTICATED_USER (0x80000020) #define DSOP_DOWNLEVEL_FILTER_ANONYMOUS (0x80000040) #define DSOP_DOWNLEVEL_FILTER_BATCH (0x80000080) #define DSOP_DOWNLEVEL_FILTER_CREATOR_OWNER (0x80000100) #define DSOP_DOWNLEVEL_FILTER_CREATOR_GROUP (0x80000200) #define DSOP_DOWNLEVEL_FILTER_DIALUP (0x80000400) #define DSOP_DOWNLEVEL_FILTER_INTERACTIVE (0x80000800) #define DSOP_DOWNLEVEL_FILTER_NETWORK (0x80001000) #define DSOP_DOWNLEVEL_FILTER_SERVICE (0x80002000) #define DSOP_DOWNLEVEL_FILTER_SYSTEM (0x80004000) #define DSOP_DOWNLEVEL_FILTER_EXCLUDE_BUILTIN_GROUPS (0x80008000) #define DSOP_DOWNLEVEL_FILTER_TERMINAL_SERVER (0x80010000) #define DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS (0x80020000) #define DSOP_DOWNLEVEL_FILTER_LOCAL_SERVICE (0x80040000) #define DSOP_DOWNLEVEL_FILTER_NETWORK_SERVICE (0x80080000) #define DSOP_DOWNLEVEL_FILTER_REMOTE_LOGON (0x80100000) typedef struct _DSOP_FILTER_FLAGS { DSOP_UPLEVEL_FILTER_FLAGS Uplevel; ULONG flDownlevel; } DSOP_FILTER_FLAGS, *PDSOP_FILTER_FLAGS; /* ADsPath format flags in the DSOP_SCOPE_INIT_INFO structure */ #define DSOP_SCOPE_FLAG_STARTING_SCOPE (0x1) #define DSOP_SCOPE_FLAG_WANT_PROVIDER_WINNT (0x2) #define DSOP_SCOPE_FLAG_WANT_PROVIDER_LDAP (0x4) #define DSOP_SCOPE_FLAG_WANT_PROVIDER_GC (0x8) #define DSOP_SCOPE_FLAG_WANT_SID_PATH (0x10) #define DSOP_SCOPE_FLAG_WANT_DOWNLEVEL_BUILTIN_PATH (0x20) #define DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS (0x40) #define DSOP_SCOPE_FLAG_DEFAULT_FILTER_GROUPS (0x80) #define DSOP_SCOPE_FLAG_DEFAULT_FILTER_COMPUTERS (0x100) #define DSOP_SCOPE_FLAG_DEFAULT_FILTER_CONTACTS (0x200) #define DSOP_SCOPE_FLAG_DEFAULT_FILTER_SERVICE_ACCOUNTS (0x400) #define DSOP_SCOPE_FLAG_DEFAULT_FILTER_PASSWORDSETTINGS_OBJECTS (0x800) typedef struct _DSOP_SCOPE_INIT_INFO { ULONG cbSize; ULONG flType; ULONG flScope; DSOP_FILTER_FLAGS FilterFlags; PCWSTR pwzDcName; PCWSTR pwzADsPath; HRESULT hr; } DSOP_SCOPE_INIT_INFO, *PDSOP_SCOPE_INIT_INFO; typedef const DSOP_SCOPE_INIT_INFO *PCDSOP_SCOPE_INIT_INFO; /* object picker options in the DSOP_INIT_INFO structure */ #define DSOP_FLAG_MULTISELECT (0x1) #define DSOP_FLAG_SKIP_TARGET_COMPUTER_DC_CHECK (0x2) typedef struct _DSOP_INIT_INFO { ULONG cbSize; PCWSTR pwzTargetComputer; ULONG cDsScopeInfos; PDSOP_SCOPE_INIT_INFO aDsScopeInfos; ULONG flOptions; ULONG cAttributesToFetch; PCWSTR *apwzAttributeNames; } DSOP_INIT_INFO, *PDSOP_INIT_INFO; typedef const DSOP_INIT_INFO *PCDSOP_INIT_INFO; /* selection scope types in the DS_SELECTION structure */ #define DSOP_SCOPE_TYPE_TARGET_COMPUTER (0x1) #define DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN (0x2) #define DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN (0x4) #define DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN (0x8) #define DSOP_SCOPE_TYPE_GLOBAL_CATALOG (0x10) #define DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN (0x20) #define DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN (0x40) #define DSOP_SCOPE_TYPE_WORKGROUP (0x80) #define DSOP_SCOPE_TYPE_USER_ENTERED_UPLEVEL_SCOPE (0x100) #define DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE (0x200) typedef struct _DS_SELECTION { PWSTR pwzName; PWSTR pwzADsPath; PWSTR pwzClass; PWSTR pwzUPN; VARIANT *pvarFetchedAttributes; ULONG flScopeType; } DS_SELECTION, *PDS_SELECTION; typedef struct _DS_SELECTION_LIST { ULONG cItems; ULONG cFetchedAttributes; DS_SELECTION aDsSelection[ANYSIZE_ARRAY]; } DS_SELECTION_LIST, *PDS_SELECTION_LIST; /***************************************************************************** * IDsObjectPicker interface */ #define INTERFACE IDsObjectPicker DECLARE_INTERFACE_(IDsObjectPicker,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDsObjectPicker methods ***/ STDMETHOD(Initialize)(THIS_ PDSOP_INIT_INFO pInitInfo) PURE; STDMETHOD(InvokeDialog)(THIS_ HWND hwndParent, IDataObject** ppdoSelections) PURE; }; #undef INTERFACE #ifdef __cplusplus } #endif #endif /* __OBJSEL_H_ */ ================================================ FILE: wine/windows/ocidl.idl ================================================ /* * Copyright (C) 1999 Paul Quinn * Copyright (C) 1999 Francis Beaudet * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "oleidl.idl"; import "oaidl.idl"; import "servprov.idl"; import "urlmon.idl"; #endif /***************************************************************************** * IOleControlTypes interface */ [ pointer_default(unique) ] interface IOleControlTypes { typedef [v1_enum] enum tagUASFLAGS { UAS_NORMAL = 0x0, UAS_BLOCKED = 0x1, UAS_NOPARENTABLE = 0x2, UAS_MASK = 0x3 } UASFLAGS; typedef enum tagREADYSTATE { READYSTATE_UNINITIALIZED = 0, READYSTATE_LOADING = 1, READYSTATE_LOADED = 2, READYSTATE_INTERACTIVE = 3, READYSTATE_COMPLETE = 4 } READYSTATE; typedef struct tagVARIANT_BLOB { DWORD clSize; DWORD rpcReserved; [size_is(clSize-1)] ULONGLONG ahData[]; } wireVARIANT_BLOB; typedef struct tagUserVARIANT { wireVARIANT_BLOB pVarBlob; } UserVARIANT; } /***************************************************************************** * IFont interface */ [ object, uuid(bef6e002-a874-101a-8bba-00aa00300cab), pointer_default(unique) ] interface IFont : IUnknown { typedef IFont *LPFONT; typedef TEXTMETRICW TEXTMETRICOLE, *LPTEXTMETRICOLE; [propget] HRESULT Name( [out] BSTR *pname); [propput] HRESULT Name( [in] BSTR name ); [propget] HRESULT Size( [out] CY *psize ); [propput] HRESULT Size( [in] CY size ); [propget] HRESULT Bold( [out] BOOL *pbold ); [propput] HRESULT Bold( [in] BOOL bold ); [propget] HRESULT Italic( [out] BOOL *pitalic ); [propput] HRESULT Italic( [in] BOOL italic ); [propget] HRESULT Underline( [out] BOOL *punderline ); [propput] HRESULT Underline( [in] BOOL underline ); [propget] HRESULT Strikethrough( [out] BOOL *pstrikethrough ); [propput] HRESULT Strikethrough( [in] BOOL strikethrough ); [propget] HRESULT Weight( [out] SHORT *pweight ); [propput] HRESULT Weight( [in] SHORT weight ); [propget] HRESULT Charset( [out] SHORT *pcharset ); [propput] HRESULT Charset( [in] SHORT charset ); [propget] HRESULT hFont( [out] HFONT *phfont ); HRESULT Clone( [out] IFont **ppfont ); HRESULT IsEqual( [in] IFont *pFontOther ); HRESULT SetRatio( [in] LONG cyLogical, [in] LONG cyHimetric ); HRESULT QueryTextMetrics( [out] TEXTMETRICOLE * ptm ); HRESULT AddRefHfont( [in] HFONT hfont ); HRESULT ReleaseHfont( [in] HFONT hfont ); HRESULT SetHdc( [in] HDC hdc ); } /***************************************************************************** * IFontDisp interface */ [ object, uuid(bef6e003-a874-101a-8bba-00aa00300cab), pointer_default(unique) ] interface IFontDisp : IDispatch { typedef IFontDisp *LPFONTDISP; } /***************************************************************************** * IFontEventsDisp interface */ [ object, uuid(4ef6100a-af88-11d0-9846-00c04fc29993), pointer_default(unique) ] interface IFontEventsDisp : IDispatch { typedef IFontEventsDisp *LPFONTEVENTS; } /***************************************************************************** * IPicture interface */ [ object, uuid(7bf80980-bf32-101a-8bbb-00aa00300cab), pointer_default(unique) ] interface IPicture : IUnknown { typedef IPicture *LPPICTURE; typedef enum tagPicture { PICTURE_SCALABLE = 0x1, PICTURE_TRANSPARENT = 0x2 } PICTUREATTRIBUTES; typedef UINT OLE_HANDLE; typedef LONG OLE_XPOS_HIMETRIC; typedef LONG OLE_YPOS_HIMETRIC; typedef LONG OLE_XSIZE_HIMETRIC; typedef LONG OLE_YSIZE_HIMETRIC; [propget] HRESULT Handle( [out] OLE_HANDLE *pHandle ); [propget] HRESULT hPal( [out] OLE_HANDLE *phPal ); [propget] HRESULT Type( [out] SHORT *pType ); [propget] HRESULT Width( [out] OLE_XSIZE_HIMETRIC *pWidth ); [propget] HRESULT Height( [out] OLE_YSIZE_HIMETRIC *pHeight ); HRESULT Render( [in] HDC hdc, [in] LONG x, [in] LONG y, [in] LONG cx, [in] LONG cy, [in] OLE_XPOS_HIMETRIC xSrc, [in] OLE_YPOS_HIMETRIC ySrc, [in] OLE_XSIZE_HIMETRIC cxSrc, [in] OLE_YSIZE_HIMETRIC cySrc, [in] LPCRECT pRcWBounds); HRESULT set_hPal( [in] OLE_HANDLE hPal ); [propget] HRESULT CurDC( [out] HDC *phDC ); HRESULT SelectPicture( [in] HDC hDCIn, [out] HDC * phDCOut, [out] OLE_HANDLE * phBmpOut); [propget] HRESULT KeepOriginalFormat( [out] BOOL *pKeep ); [propput] HRESULT KeepOriginalFormat( [in] BOOL keep ); HRESULT PictureChanged(); HRESULT SaveAsFile( [in] LPSTREAM pStream, [in] BOOL fSaveMemCopy, [out] LONG *pCbSize); [propget] HRESULT Attributes( [out] DWORD *pDwAttr ); } /***************************************************************************** * IPictureDisp interface */ [ object, uuid(7bf80981-bf32-101a-8bbb-00aa00300cab), pointer_default(unique) ] interface IPictureDisp : IDispatch { typedef IPictureDisp *LPPICTUREDISP; } /***************************************************************************** * IOleControl interface */ [ object, uuid(b196b288-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IOleControl : IUnknown { typedef IOleControl *LPOLECONTROL; typedef struct tagCONTROLINFO { ULONG cb; HACCEL hAccel; USHORT cAccel; DWORD dwFlags; } CONTROLINFO, *LPCONTROLINFO; typedef enum tagCTRLINFO { CTRLINFO_EATS_RETURN = 1, CTRLINFO_EATS_ESCAPE = 2 } CTRLINFO; HRESULT GetControlInfo( [out] CONTROLINFO *pCI ); HRESULT OnMnemonic( [in] MSG *pMsg ); HRESULT OnAmbientPropertyChange( [in] DISPID dispID ); HRESULT FreezeEvents( [in] BOOL bFreeze ); } /***************************************************************************** * IOleControlSite interface */ [ object, uuid(b196b289-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IOleControlSite : IUnknown { typedef IOleControlSite *LPOLECONTROLSITE; typedef struct tagPOINTF { FLOAT x; FLOAT y; } POINTF, *LPPOINTF; typedef enum tagXFORMCOORDS { XFORMCOORDS_POSITION = 0x1, XFORMCOORDS_SIZE = 0x2, XFORMCOORDS_HIMETRICTOCONTAINER = 0x4, XFORMCOORDS_CONTAINERTOHIMETRIC = 0x8, XFORMCOORDS_EVENTCOMPAT = 0x10 } XFORMCOORDS; HRESULT OnControlInfoChanged(); HRESULT LockInPlaceActive( [in] BOOL fLock ); HRESULT GetExtendedControl( [out] IDispatch ** ppDisp ); HRESULT TransformCoords( [in, out] POINTL *pPtlHimetric, [in, out] POINTF *pPtfContainer, [in] DWORD dwFlags); HRESULT TranslateAccelerator( [in] MSG *pMsg, [in] DWORD grfModifiers ); HRESULT OnFocus( [in] BOOL fGotFocus ); HRESULT ShowPropertyFrame(); } /***************************************************************************** * IOleInPlaceSiteEx interface */ [ object, uuid(9c2cad80-3424-11cf-b670-00aa004cd6d8), pointer_default(unique) ] interface IOleInPlaceSiteEx : IOleInPlaceSite { typedef IOleInPlaceSiteEx *LPOLEINPLACESITEEX; typedef enum tagACTIVATEFLAGS { ACTIVATE_WINDOWLESS = 1 } ACTIVATE_FLAGS; HRESULT OnInPlaceActivateEx( [out] BOOL * pfNoRedraw, [in] DWORD dwFlags ); HRESULT OnInPlaceDeactivateEx( [in] BOOL fNoRedraw ); HRESULT RequestUIActivate(); } /***************************************************************************** * IOleInPlaceSiteWindowless interface */ [ local, object, uuid(922eada0-3424-11cf-b670-00aa004cd6d8), pointer_default(unique) ] interface IOleInPlaceSiteWindowless : IOleInPlaceSiteEx { typedef IOleInPlaceSiteWindowless *LPOLEINPLACESITEWINDOWLESS; typedef enum tagOLEDCFLAGS { OLEDC_NODRAW = 0x1, OLEDC_PAINTBKGND = 0x2, OLEDC_OFFSCREEN = 0x4 } OLEDCFLAGS; HRESULT CanWindowlessActivate(); HRESULT GetCapture(); HRESULT SetCapture( [in] BOOL fCapture ); HRESULT GetFocus(); HRESULT SetFocus( [in] BOOL fFocus ); HRESULT GetDC( [in] LPCRECT pRect, [in] DWORD grfFlags, [out] HDC *phDC); HRESULT ReleaseDC( [in] HDC hDC ); HRESULT InvalidateRect( [in] LPCRECT pRect, [in] BOOL fErase); HRESULT InvalidateRgn( [in] HRGN hRGN, [in] BOOL fErase); HRESULT ScrollRect( [in] INT dx, [in] INT dy, [in] LPCRECT pRectScroll, [in] LPCRECT pRectClip); HRESULT AdjustRect( [in, out] LPRECT prc ); HRESULT OnDefWindowMessage( [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult); } /***************************************************************************** * IOleInPlaceObjectWindowless interface */ [ local, object, uuid(1c2056cc-5ef4-101b-8bc8-00aa003e3b29), pointer_default(unique) ] interface IOleInPlaceObjectWindowless : IOleInPlaceObject { typedef IOleInPlaceObjectWindowless *LPOLEINPLACEOBJECTWINDOWLESS; HRESULT OnWindowMessage( [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult); HRESULT GetDropTarget( [out] IDropTarget **ppDropTarget ); } /***************************************************************************** * IClassFactory2 interface */ [ object, uuid(b196b28f-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IClassFactory2 : IClassFactory { typedef IClassFactory2 *LPCLASSFACTORY2; typedef struct tagLICINFO { LONG cbLicInfo; BOOL fRuntimeKeyAvail; BOOL fLicVerified; } LICINFO, *LPLICINFO; HRESULT GetLicInfo( [out] LICINFO *pLicInfo ); HRESULT RequestLicKey( [in] DWORD dwReserved, [out] BSTR *pBstrKey); [local] HRESULT CreateInstanceLic( [in] IUnknown *pUnkOuter, [in] IUnknown *pUnkReserved, [in] REFIID riid, [in] BSTR bstrKey, [out, iid_is(riid)] PVOID *ppvObj); [call_as(CreateInstanceLic)] HRESULT RemoteCreateInstanceLic( [in] REFIID riid, [in] BSTR bstrKey, [out, iid_is(riid)] IUnknown **ppvObj); } /***************************************************************************** * IViewObject interface */ [ local, object, uuid(3af24292-0c96-11ce-a0cf-00aa00600ab8), pointer_default(unique) ] interface IViewObjectEx : IViewObject2 { typedef IViewObjectEx *LPVIEWOBJECTEX; typedef enum tagVIEWSTATUS { VIEWSTATUS_OPAQUE = 1, VIEWSTATUS_SOLIDBKGND = 2, VIEWSTATUS_DVASPECTOPAQUE = 4, VIEWSTATUS_DVASPECTTRANSPARENT = 8, VIEWSTATUS_SURFACE = 16, VIEWSTATUS_3DSURFACE = 32 } VIEWSTATUS; typedef enum tagHITRESULT { HITRESULT_OUTSIDE = 0, HITRESULT_TRANSPARENT = 1, HITRESULT_CLOSE = 2, HITRESULT_HIT = 3 } HITRESULT; typedef enum tagDVASPECT2 { DVASPECT_OPAQUE = 16, DVASPECT_TRANSPARENT = 32 } DVASPECT2; typedef struct tagExtentInfo { ULONG cb; DWORD dwExtentMode; SIZEL sizelProposed; } DVEXTENTINFO; typedef enum tagAspectInfoFlag { DVASPECTINFOFLAG_CANOPTIMIZE = 1 } DVASPECTINFOFLAG; typedef struct tagAspectInfo { ULONG cb; DWORD dwFlags; } DVASPECTINFO; HRESULT GetRect( [in] DWORD dwAspect, [out] LPRECTL pRect); HRESULT GetViewStatus( [out] DWORD *pdwStatus ); HRESULT QueryHitPoint( [in] DWORD dwAspect, [in] LPCRECT pRectBounds, [in] POINT ptlLoc, [in] LONG lCloseHint, [out] DWORD *pHitResult); HRESULT QueryHitRect( [in] DWORD dwAspect, [in] LPCRECT pRectBounds, [in] LPCRECT pRectLoc, [in] LONG lCloseHint, [out] DWORD *pHitResult); HRESULT GetNaturalExtent ( [in] DWORD dwAspect, [in] LONG lindex, [in] DVTARGETDEVICE *ptd, [in] HDC hicTargetDev, [in] DVEXTENTINFO *pExtentInfo, [out] LPSIZEL pSizel); } /***************************************************************************** * IProvideClassInfo interface */ [ object, uuid(b196b283-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IProvideClassInfo : IUnknown { typedef IProvideClassInfo *LPPROVIDECLASSINFO; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetClassInfo") cpp_quote("#endif") HRESULT GetClassInfo( [out] ITypeInfo ** ppTI ); } /***************************************************************************** * IProvideClassInfo2 interface */ [ object, uuid(a6bc3ac0-dbaa-11ce-9de3-00aa004bb851), pointer_default(unique) ] interface IProvideClassInfo2 : IProvideClassInfo { typedef IProvideClassInfo2 *LPPROVIDECLASSINFO2; typedef enum tagGUIDKIND { GUIDKIND_DEFAULT_SOURCE_DISP_IID = 1 } GUIDKIND; HRESULT GetGUID( [in] DWORD dwGuidKind, [out] GUID *pGUID ); } [ object, uuid(a7aba9c1-8983-11cf-8f20-00805f2cd064), pointer_default(unique) ] interface IProvideMultipleClassInfo : IProvideClassInfo2 { cpp_quote("#define MULTICLASSINFO_GETTYPEINFO 0x00000001") cpp_quote("#define MULTICLASSINFO_GETNUMRESERVEDDISPIDS 0x00000002") cpp_quote("#define MULTICLASSINFO_GETIIDPRIMARY 0x00000004") cpp_quote("#define MULTICLASSINFO_GETIIDSOURCE 0x00000008") cpp_quote("#define TIFLAGS_EXTENDDISPATCHONLY 0x00000001") typedef IProvideMultipleClassInfo *LPPROVIDEMULTIPLECLASSINFO; HRESULT GetMultiTypeInfoCount( [out] ULONG *pcti); HRESULT GetInfoOfIndex( [in] ULONG iti, [in] DWORD dwFlags, [out] ITypeInfo **pptiCoClass, [out] DWORD *pdwTIFlags, [out] ULONG *pcdispidReserved, [out] IID *piidPrimary, [out] IID *piidSource); } /***************************************************************************** * IConnectionPoint interface */ interface IConnectionPointContainer; /* forward declarations */ interface IEnumConnections; [ object, uuid(b196b286-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IConnectionPoint : IUnknown { typedef IConnectionPoint *PCONNECTIONPOINT, *LPCONNECTIONPOINT; HRESULT GetConnectionInterface( [out] IID *pIID ); HRESULT GetConnectionPointContainer( [out] IConnectionPointContainer **ppCPC ); HRESULT Advise( [in] IUnknown *pUnkSink, [out] DWORD *pdwCookie ); HRESULT Unadvise( [in] DWORD dwCookie ); HRESULT EnumConnections( [out] IEnumConnections **ppEnum ); } /***************************************************************************** * IConnectionPointContainer interface */ interface IEnumConnectionPoints; /* forward declaration */ [ object, uuid(b196b284-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IConnectionPointContainer : IUnknown { typedef IConnectionPointContainer *PCONNECTIONPOINTCONTAINER, *LPCONNECTIONPOINTCONTAINER; HRESULT EnumConnectionPoints( [out] IEnumConnectionPoints **ppEnum ); HRESULT FindConnectionPoint( [in] REFIID riid, [out] IConnectionPoint **ppCP ); } /***************************************************************************** * IEnumConnections interface */ [ object, uuid(b196b287-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IEnumConnections : IUnknown { typedef IEnumConnections *PENUMCONNECTIONS, *LPENUMCONNECTIONS; typedef struct tagCONNECTDATA { IUnknown *pUnk; DWORD dwCookie; } CONNECTDATA, *PCONNECTDATA, *LPCONNECTDATA; [local] HRESULT Next( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd, [out] ULONG *pcFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd, [out] ULONG *pcFetched); HRESULT Skip( [in] ULONG cConnections ); HRESULT Reset(); HRESULT Clone( [out] IEnumConnections **ppEnum ); } /***************************************************************************** * IEnumConnectionPoints interface */ [ object, uuid(b196b285-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IEnumConnectionPoints : IUnknown { typedef IEnumConnectionPoints *PENUMCONNECTIONPOINTS, *LPENUMCONNECTIONPOINTS; [local] HRESULT Next( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP, [out] ULONG *pcFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG cConnections, [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP, [out] ULONG *pcFetched); HRESULT Skip( [in] ULONG cConnections ); HRESULT Reset(); HRESULT Clone( [out] IEnumConnectionPoints **ppEnum ); } /***************************************************************************** * IPropertyPage interface */ interface IPropertyPageSite; /* forward declaration */ [ object, uuid(b196b28d-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IPropertyPage : IUnknown { typedef IPropertyPage *LPPROPERTYPAGE; typedef struct tagPROPPAGEINFO { ULONG cb; LPOLESTR pszTitle; SIZE size; LPOLESTR pszDocString; LPOLESTR pszHelpFile; DWORD dwHelpContext; } PROPPAGEINFO, *LPPROPPAGEINFO; HRESULT SetPageSite( [in] IPropertyPageSite *pPageSite ); HRESULT Activate( [in] HWND hWndParent, [in] LPCRECT pRect, [in] BOOL bModal); HRESULT Deactivate(); HRESULT GetPageInfo( [out] PROPPAGEINFO *pPageInfo ); HRESULT SetObjects( [in] ULONG cObjects, [in, size_is(cObjects)] IUnknown **ppUnk); HRESULT Show( [in] UINT nCmdShow ); HRESULT Move( [in] LPCRECT pRect ); HRESULT IsPageDirty(); HRESULT Apply(); HRESULT Help( [in] LPCOLESTR pszHelpDir ); HRESULT TranslateAccelerator( [in] MSG *pMsg ); } /***************************************************************************** * IPropertyPage2 interface */ [ object, uuid(01e44665-24ac-101b-84ed-08002b2ec713), pointer_default(unique) ] interface IPropertyPage2 : IPropertyPage { typedef IPropertyPage2 *LPPROPERTYPAGE2; HRESULT EditProperty( [in] DISPID dispID ); } /***************************************************************************** * IPropertyPageSite interface */ [ object, uuid(b196b28c-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface IPropertyPageSite : IUnknown { typedef IPropertyPageSite *LPPROPERTYPAGESITE; typedef enum tagPROPPAGESTATUS { PROPPAGESTATUS_DIRTY = 0x1, PROPPAGESTATUS_VALIDATE = 0x2, PROPPAGESTATUS_CLEAN = 0x4 } PROPPAGESTATUS; HRESULT OnStatusChange( [in] DWORD dwFlags ); HRESULT GetLocaleID( [out] LCID *pLocaleID ); HRESULT GetPageContainer( [out] IUnknown **ppUnk ); HRESULT TranslateAccelerator( [in] MSG *pMsg ); } /***************************************************************************** * IPropertyNotifySink interface */ [ object, uuid(9bfbbc02-eff1-101a-84ed-00aa00341d07), pointer_default(unique) ] interface IPropertyNotifySink : IUnknown { typedef IPropertyNotifySink *LPPROPERTYNOTIFYSINK; HRESULT OnChanged( [in] DISPID dispID ); HRESULT OnRequestEdit( [in] DISPID dispID ); } /***************************************************************************** * ISimpleFrameSite interface */ [ object, uuid(742b0e01-14e6-101b-914e-00aa00300cab), pointer_default(unique) ] interface ISimpleFrameSite : IUnknown { typedef ISimpleFrameSite *LPSIMPLEFRAMESITE; HRESULT PreMessageFilter( [in] HWND hWnd, [in] UINT msg, [in] WPARAM wp, [in] LPARAM lp, [out] LRESULT *plResult, [out] DWORD *pdwCookie); HRESULT PostMessageFilter( [in] HWND hWnd, [in] UINT msg, [in] WPARAM wp, [in] LPARAM lp, [out] LRESULT *plResult, [in] DWORD dwCookie); } /***************************************************************************** * IPersistStreamInit interface */ [ object, uuid(7fd52380-4e07-101b-ae2d-08002b2ec713), pointer_default(unique) ] interface IPersistStreamInit : IPersist { typedef IPersistStreamInit *LPPERSISTSTREAMINIT; HRESULT IsDirty(); HRESULT Load( [in] LPSTREAM pStm ); HRESULT Save( [in] LPSTREAM pStm, [in] BOOL fClearDirty ); HRESULT GetSizeMax( [out] ULARGE_INTEGER *pcbSize ); HRESULT InitNew(); } /***************************************************************************** * IPersistMemory interface */ [ object, uuid(bd1ae5e0-a6ae-11ce-bd37-504200c10000), pointer_default(unique) ] interface IPersistMemory : IPersist { typedef IPersistMemory *LPPERSISTMEMORY; HRESULT IsDirty(); [local] HRESULT Load( [in, size_is(cbSize)] LPVOID pMem, [in] ULONG cbSize); [call_as(Load)] HRESULT RemoteLoad( [in, size_is(cbSize)] BYTE *pMem, [in] ULONG cbSize); [local] HRESULT Save( [out, size_is(cbSize)] LPVOID pMem, [in] BOOL fClearDirty, [in] ULONG cbSize); [call_as(Save)] HRESULT RemoteSave( [out, size_is(cbSize)] BYTE *pMem, [in] BOOL fClearDirty, [in] ULONG cbSize); HRESULT GetSizeMax( [out] ULONG *pCbSize ); HRESULT InitNew(); } /***************************************************************************** * IPersistPropertyBag interface */ [ object, uuid(37d84f60-42cb-11ce-8135-00aa004bb851), pointer_default(unique) ] interface IPersistPropertyBag : IPersist { typedef IPersistPropertyBag *LPPERSISTPROPERTYBAG; HRESULT InitNew(); HRESULT Load( [in] IPropertyBag *pPropBag, [in] IErrorLog *pErrorLog); HRESULT Save( [in] IPropertyBag *pPropBag, [in] BOOL fClearDirty, [in] BOOL fSaveAllProperties); } /***************************************************************************** * IPropertyBag2 interface */ [ object, uuid(22f55882-280b-11d0-a8a9-00a0c90c2004), pointer_default(unique) ] interface IPropertyBag2 : IUnknown { typedef IPropertyBag2 *LPPROPERTYBAG2; typedef enum tagPROPBAG2_TYPE { PROPBAG2_TYPE_UNDEFINED = 0, PROPBAG2_TYPE_DATA = 1, PROPBAG2_TYPE_URL = 2, PROPBAG2_TYPE_OBJECT = 3, PROPBAG2_TYPE_STREAM = 4, PROPBAG2_TYPE_STORAGE = 5, PROPBAG2_TYPE_MONIKER = 6 } PROPBAG2_TYPE; typedef struct tagPROPBAG2 { DWORD dwType; VARTYPE vt; CLIPFORMAT cfType; DWORD dwHint; LPOLESTR pstrName; CLSID clsid; } PROPBAG2; HRESULT Read( [in] ULONG cProperties, [in] PROPBAG2 *pPropBag, [in] IErrorLog *pErrLog, [out] VARIANT *pvarValue, [out] HRESULT *phrError); HRESULT Write( [in] ULONG cProperties, [in] PROPBAG2 *pPropBag, [in] VARIANT *pvarValue); HRESULT CountProperties( [out] ULONG *pcProperties ); HRESULT GetPropertyInfo( [in] ULONG iProperty, [in] ULONG cProperties, [out] PROPBAG2 *pPropBag, [out] ULONG *pcProperties); HRESULT LoadObject( [in] LPCOLESTR pstrName, [in] DWORD dwHint, [in] IUnknown *pUnkObject, [in] IErrorLog *pErrLog); } /***************************************************************************** * IPersistPropertyBag2 interface */ [ object, uuid(22f55881-280b-11d0-a8a9-00a0c90c2004), pointer_default(unique) ] interface IPersistPropertyBag2 : IPersist { typedef IPersistPropertyBag2 *LPPERSISTPROPERTYBAG2; HRESULT InitNew(); HRESULT Load( [in] IPropertyBag2 *pPropBag, [in] IErrorLog *pErrorLog); HRESULT Save( [in] IPropertyBag2 *pPropBag, [in] BOOL fClearDirty, [in] BOOL fSaveAllProperties); HRESULT IsDirty(); } /***************************************************************************** * ISpecifyPropertyPages interface */ [ object, uuid(b196b28b-bab4-101a-b69c-00aa00341d07), pointer_default(unique) ] interface ISpecifyPropertyPages : IUnknown { typedef ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES; typedef struct tagCAUUID { ULONG cElems; [size_is(cElems)] GUID *pElems; } CAUUID, *LPCAUUID; HRESULT GetPages( [out] CAUUID *pPages ); } /***************************************************************************** * IPerPropertyBrowsing interface */ [ object, uuid(376bd3aa-3845-101b-84ed-08002b2ec713), pointer_default(unique) ] interface IPerPropertyBrowsing : IUnknown { typedef IPerPropertyBrowsing *LPPERPROPERTYBROWSING; typedef struct tagCALPOLESTR { ULONG cElems; [size_is(cElems)] LPOLESTR *pElems; } CALPOLESTR, *LPCALPOLESTR; typedef struct tagCADWORD { ULONG cElems; [size_is(cElems)] DWORD *pElems; } CADWORD, *LPCADWORD; HRESULT GetDisplayString( [in] DISPID dispID, [out] BSTR *pBstr); HRESULT MapPropertyToPage( [in] DISPID dispID, [out] CLSID *pClsid); HRESULT GetPredefinedStrings( [in] DISPID dispID, [out] CALPOLESTR *pCaStringsOut, [out] CADWORD *pCaCookiesOut); HRESULT GetPredefinedValue( [in] DISPID dispID, [in] DWORD dwCookie, [out] VARIANT *pVarOut); } /***************************************************************************** * IAdviseSinkEx interface */ [ object, uuid(3af24290-0c96-11ce-a0cf-00aa00600ab8), pointer_default(unique) ] interface IAdviseSinkEx : IAdviseSink { typedef IAdviseSinkEx *LPADVISESINKEX; [local] void OnViewStatusChange( [in] DWORD dwViewStatus ); [call_as(OnViewStatusChange)] HRESULT RemoteOnViewStatusChange( [in] DWORD dwViewStatus ); } /***************************************************************************** * IPointerInactive interface */ [ object, uuid(55980ba0-35aa-11cf-b671-00aa004cd6d8), pointer_default(unique) ] interface IPointerInactive : IUnknown { typedef IPointerInactive *LPPOINTERINACTIVE; HRESULT GetActivationPolicy( [out] DWORD *pdwPolicy); HRESULT OnInactiveMouseMove( [in] LPCRECT pRectBounds, [in] LONG x, [in] LONG y, [in] DWORD grfKeyState); HRESULT OnInactiveSetCursor( [in] LPCRECT pRectBounds, [in] LONG x, [in] LONG y, [in] DWORD dwMouseMsg, [in] BOOL fSetAlways); } /***************************************************************************** * IObjectWithSite interface */ [ object, uuid(fc4801a3-2ba9-11cf-a229-00aa003d7352), pointer_default(unique) ] interface IObjectWithSite : IUnknown { typedef IObjectWithSite *LPOBJECTWITHSITE; HRESULT SetSite( [in] IUnknown * pUnkSite); HRESULT GetSite( [in] REFIID riid, [out, iid_is(riid)] PVOID *ppvSite); } /***************************************************************************** * IOleUndoUnit interface */ interface IOleUndoManager; /* forward declaration */ [ object, uuid(894ad3b0-ef97-11ce-9bc9-00aa00608e01), pointer_default(unique) ] interface IOleUndoUnit : IUnknown { typedef IOleUndoUnit *LPOLEUNDOUNIT; HRESULT Do( [in] IOleUndoManager *pUndoManager ); HRESULT GetDescription( [out] BSTR *pBstr ); HRESULT GetUnitType( [out] CLSID *pClsid, [out] LONG *plID ); HRESULT OnNextAdd(); } /***************************************************************************** * IOleParentUndoUnit interface */ [ object, uuid(a1faf330-ef97-11ce-9bc9-00aa00608e01), pointer_default(unique) ] interface IOleParentUndoUnit : IOleUndoUnit { typedef IOleParentUndoUnit *LPOLEPARENTUNDOUNIT; HRESULT Open( [in] IOleParentUndoUnit *pPUU ); HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit ); HRESULT Add( [in] IOleUndoUnit *pUU ); HRESULT FindUnit( [in] IOleUndoUnit *pUU ); HRESULT GetParentState( [out] DWORD *pdwState ); } /***************************************************************************** * IEnumOleUndoUnits interface */ [ object, uuid(b3e7c340-ef97-11ce-9bc9-00aa00608e01), pointer_default(unique) ] interface IEnumOleUndoUnits : IUnknown { typedef IEnumOleUndoUnits *LPENUMOLEUNDOUNITS; [local] HRESULT Next( [in] ULONG cElt, [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt, [out] ULONG *pcEltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG cElt, [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt, [out] ULONG *pcEltFetched); HRESULT Skip( [in] ULONG cElt ); HRESULT Reset(); HRESULT Clone( [out] IEnumOleUndoUnits **ppEnum ); } /***************************************************************************** * IOleUndoManager interface */ [ object, uuid(d001f200-ef97-11ce-9bc9-00aa00608e01), pointer_default(unique) ] interface IOleUndoManager : IUnknown { cpp_quote("#define SID_SOleUndoManager IID_IOleUndoManager") typedef IOleUndoManager *LPOLEUNDOMANAGER; HRESULT Open( [in] IOleParentUndoUnit *pPUU ); HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit ); HRESULT Add( [in] IOleUndoUnit *pUU ); HRESULT GetOpenParentState( [out] DWORD *pdwState ); HRESULT DiscardFrom( [in] IOleUndoUnit *pUU ); HRESULT UndoTo( [in] IOleUndoUnit *pUU ); HRESULT RedoTo( [in] IOleUndoUnit *pUU ); HRESULT EnumUndoable( [out] IEnumOleUndoUnits **ppEnum ); HRESULT EnumRedoable( [out] IEnumOleUndoUnits **ppEnum ); HRESULT GetLastUndoDescription( [out] BSTR *pBstr ); HRESULT GetLastRedoDescription( [out] BSTR *pBstr ); HRESULT Enable( [in] BOOL fEnable ); } /***************************************************************************** * IQuickActivate interface */ [ object, uuid(cf51ed10-62fe-11cf-bf86-00a0c9034836), pointer_default(unique) ] interface IQuickActivate : IUnknown { typedef IQuickActivate *LPQUICKACTIVATE; typedef enum tagQACONTAINERFLAGS { QACONTAINER_SHOWHATCHING = 0x1, QACONTAINER_SHOWGRABHANDLES = 0x2, QACONTAINER_USERMODE = 0x4, QACONTAINER_DISPLAYASDEFAULT = 0x8, QACONTAINER_UIDEAD = 0x10, QACONTAINER_AUTOCLIP = 0x20, QACONTAINER_MESSAGEREFLECT = 0x40, QACONTAINER_SUPPORTSMNEMONICS = 0x80 } QACONTAINERFLAGS; typedef DWORD OLE_COLOR; typedef struct tagQACONTAINER { ULONG cbSize; IOleClientSite *pClientSite; IAdviseSinkEx *pAdviseSink; IPropertyNotifySink *pPropertyNotifySink; IUnknown *pUnkEventSink; DWORD dwAmbientFlags; OLE_COLOR colorFore; OLE_COLOR colorBack; IFont *pFont; IOleUndoManager *pUndoMgr; DWORD dwAppearance; LONG lcid; HPALETTE hpal; IBindHost *pBindHost; IOleControlSite *pOleControlSite; IServiceProvider *pServiceProvider; } QACONTAINER; typedef struct tagQACONTROL { ULONG cbSize; DWORD dwMiscStatus; DWORD dwViewStatus; DWORD dwEventCookie; DWORD dwPropNotifyCookie; DWORD dwPointerActivationPolicy; } QACONTROL; [local] HRESULT QuickActivate( [in] QACONTAINER *pQaContainer, [in,out] QACONTROL *pQaControl); [call_as(QuickActivate)] HRESULT RemoteQuickActivate( [in] QACONTAINER *pQaContainer, [out] QACONTROL *pQaControl); HRESULT SetContentExtent( [in] LPSIZEL pSizel ); HRESULT GetContentExtent( [out] LPSIZEL pSizel ); } ================================================ FILE: wine/windows/ocmm.idl ================================================ /* * Copyright 2006 Matthew Kehrer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "oleidl.idl"; cpp_quote("EXTERN_C const GUID NAMEDTIMER_DRAW;") [ object, uuid(3050F361-98B5-11CF-BB82-00AA00BDCE0B), pointer_default(unique) ] interface ITimerSink : IUnknown { HRESULT OnTimer([in] VARIANT vtimeAdvise); } [ object, uuid(3050F360-98B5-11CF-BB82-00AA00BDCE0B), pointer_default(unique) ] interface ITimer : IUnknown { HRESULT Advise([in] VARIANT vtimeMin, [in] VARIANT vtimeMax, [in] VARIANT vtimeInterval, [in] DWORD dwFlags, [in] ITimerSink *pTimerSink, [out] DWORD *pdwCookie); HRESULT Unadvise([in] DWORD dwCookie); HRESULT Freeze([in] BOOL fFreeze); HRESULT GetTime([out] VARIANT *pvtime); } [ object, uuid(3050F35F-98B5-11CF-BB82-00AA00BDCE0B), pointer_default(unique) ] interface ITimerService : IUnknown { HRESULT CreateTimer([in] ITimer *pReferenceTimer, [out] ITimer **ppNewTimer); HRESULT GetNamedTimer([in] REFGUID rguidName, [out] ITimer **ppTimer); HRESULT SetNamedTimerReference([in] REFGUID rguidName, [in] ITimer *pReferenceTimer); } cpp_quote("#define SID_STimerService IID_ITimerService") ================================================ FILE: wine/windows/odbcinst.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ODBCINST_H #define __WINE_ODBCINST_H #ifdef __cplusplus extern "C" { #endif #include /* flags for Installer function requests */ #define ODBC_INSTALL_INQUIRY 1 #define ODBC_INSTALL_COMPLETE 2 #define ODBC_INSTALL_DRIVER 1 #define ODBC_REMOVE_DRIVER 2 #define ODBC_CONFIG_DRIVER 3 #define ODBC_CONFIG_DRIVER_MAX 100 #define ODBC_ADD_DSN 1 #define ODBC_CONFIG_DSN 2 #define ODBC_REMOVE_DSN 3 #define ODBC_ADD_SYS_DSN 4 #define ODBC_CONFIG_SYS_DSN 5 #define ODBC_REMOVE_SYS_DSN 6 #define ODBC_REMOVE_DEFAULT_DSN 7 /* Mode values for SQLSetConfigMode/SQLGetConfigMode */ #define ODBC_BOTH_DSN 0 #define ODBC_USER_DSN 1 #define ODBC_SYSTEM_DSN 2 /* error values */ #define ODBC_ERROR_GENERAL_ERR 1 #define ODBC_ERROR_INVALID_BUFF_LEN 2 #define ODBC_ERROR_INVALID_HWND 3 #define ODBC_ERROR_INVALID_STR 4 #define ODBC_ERROR_INVALID_REQUEST_TYPE 5 #define ODBC_ERROR_COMPONENT_NOT_FOUND 6 #define ODBC_ERROR_INVALID_NAME 7 #define ODBC_ERROR_INVALID_KEYWORD_VALUE 8 #define ODBC_ERROR_INVALID_DSN 9 #define ODBC_ERROR_INVALID_INF 10 #define ODBC_ERROR_REQUEST_FAILED 11 #define ODBC_ERROR_INVALID_PATH 12 #define ODBC_ERROR_LOAD_LIB_FAILED 13 #define ODBC_ERROR_INVALID_PARAM_SEQUENCE 14 #define ODBC_ERROR_INVALID_LOG_FILE 15 #define ODBC_ERROR_USER_CANCELED 16 #define ODBC_ERROR_USAGE_UPDATE_FAILED 17 #define ODBC_ERROR_CREATE_DSN_FAILED 18 #define ODBC_ERROR_WRITING_SYSINFO_FAILED 19 #define ODBC_ERROR_REMOVE_DSN_FAILED 20 #define ODBC_ERROR_OUT_OF_MEM 21 #define ODBC_ERROR_OUTPUT_STRING_TRUNCATED 22 BOOL WINAPI ODBCCPlApplet(LONG,LONG,LONG*,LONG*); BOOL WINAPI SQLConfigDataSource(HWND,WORD,LPCSTR,LPCSTR); BOOL WINAPI SQLConfigDataSourceW(HWND,WORD,LPCWSTR,LPCWSTR); BOOL WINAPI SQLConfigDriver(HWND,WORD,LPCSTR,LPCSTR,LPSTR,WORD,WORD*); BOOL WINAPI SQLConfigDriverW(HWND,WORD,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*); BOOL WINAPI SQLCreateDataSource(HWND,LPCSTR); BOOL WINAPI SQLCreateDataSourceW(HWND,LPCWSTR); BOOL WINAPI SQLGetAvailableDrivers(LPCSTR,LPSTR,WORD,WORD*); BOOL WINAPI SQLGetAvailableDriversW(LPCWSTR,LPWSTR,WORD,WORD*); BOOL WINAPI SQLGetConfigMode(UWORD*); BOOL WINAPI SQLGetInstalledDrivers(LPSTR,WORD,WORD*); BOOL WINAPI SQLGetInstalledDriversW(LPWSTR,WORD,WORD*); int WINAPI SQLGetPrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPSTR,int,LPCSTR); int WINAPI SQLGetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,int,LPCWSTR); BOOL WINAPI SQLGetTranslator(HWND,LPSTR,WORD,WORD*,LPSTR,WORD,WORD*,DWORD*); BOOL WINAPI SQLGetTranslatorW(HWND,LPWSTR,WORD,WORD*,LPWSTR,WORD,WORD*,DWORD*); BOOL WINAPI SQLInstallDriver(LPCSTR,LPCSTR,LPSTR,WORD,WORD*); BOOL WINAPI SQLInstallDriverW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*); BOOL WINAPI SQLInstallDriverEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD); BOOL WINAPI SQLInstallDriverExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD); BOOL WINAPI SQLInstallDriverManager(LPSTR,WORD,WORD*); BOOL WINAPI SQLInstallDriverManagerW(LPWSTR,WORD,WORD*); SQLRETURN WINAPI SQLInstallerError(WORD,DWORD*,LPSTR,WORD,WORD*); SQLRETURN WINAPI SQLInstallerErrorW(WORD,DWORD*,LPWSTR,WORD,WORD*); BOOL WINAPI SQLInstallODBC(HWND,LPCSTR,LPCSTR,LPCSTR); BOOL WINAPI SQLInstallODBCW(HWND,LPCWSTR,LPCWSTR,LPCWSTR); BOOL WINAPI SQLInstallTranslatorEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD); BOOL WINAPI SQLInstallTranslatorExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD); BOOL WINAPI SQLInstallTranslator(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD); BOOL WINAPI SQLInstallTranslatorW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD); BOOL WINAPI SQLManageDataSources(HWND hwnd); SQLRETURN WINAPI SQLPostInstallerError(DWORD,LPCSTR); SQLRETURN WINAPI SQLPostInstallerErrorW(DWORD,LPCWSTR); BOOL WINAPI SQLReadFileDSN(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*); BOOL WINAPI SQLReadFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*); BOOL WINAPI SQLRemoveDefaultDataSource(void); BOOL WINAPI SQLRemoveDriver(LPCSTR,BOOL,LPDWORD); BOOL WINAPI SQLRemoveDriverW(LPCWSTR,BOOL,LPDWORD); BOOL WINAPI SQLRemoveDriverManager(LPDWORD); BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR); BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR); BOOL WINAPI SQLRemoveTranslator(LPCSTR,LPDWORD); BOOL WINAPI SQLRemoveTranslatorW(LPCWSTR,LPDWORD); BOOL WINAPI SQLSetConfigMode(UWORD); BOOL WINAPI SQLValidDSN(LPCSTR); BOOL WINAPI SQLValidDSNW(LPCWSTR); BOOL WINAPI SQLWriteDSNToIni(LPCSTR,LPCSTR); BOOL WINAPI SQLWriteDSNToIniW(LPCWSTR,LPCWSTR); BOOL WINAPI SQLWriteFileDSN(LPCSTR,LPCSTR,LPCSTR,LPCSTR); BOOL WINAPI SQLWriteFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); BOOL WINAPI SQLWritePrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR); BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); #ifdef __cplusplus } #endif #endif /*__WINE_ODBCINST_H*/ ================================================ FILE: wine/windows/ole2.h ================================================ /* * Declarations for OLE2 * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLE2_H #define __WINE_OLE2_H #include #include #include #include struct tagMSG; #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #define E_DRAW VIEW_E_DRAW #define DATA_E_FORMATETC DV_E_FORMATETC #define OLEIVERB_PRIMARY (__MSABI_LONG(0)) #define OLEIVERB_SHOW (__MSABI_LONG(-1)) #define OLEIVERB_OPEN (__MSABI_LONG(-2)) #define OLEIVERB_HIDE (__MSABI_LONG(-3)) #define OLEIVERB_UIACTIVATE (__MSABI_LONG(-4)) #define OLEIVERB_INPLACEACTIVATE (__MSABI_LONG(-5)) #define OLEIVERB_DISCARDUNDOSTATE (__MSABI_LONG(-6)) #define OLEIVERB_PROPERTIES (__MSABI_LONG(-7)) #define EMBDHLP_INPROC_HANDLER 0x00000000 #define EMBDHLP_INPROC_SERVER 0x00000001 #define EMBDHLP_CREATENOW 0x00000000 #define EMBDHLP_DELAYCREATE 0x00010000 /* * API declarations */ HRESULT WINAPI RegisterDragDrop(HWND,LPDROPTARGET); HRESULT WINAPI RevokeDragDrop(HWND); HRESULT WINAPI DoDragDrop(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*); HRESULT WINAPI OleLoadFromStream(IStream *pStm,REFIID iidInterface,void** ppvObj); HRESULT WINAPI OleSaveToStream(IPersistStream *pPStm,IStream *pStm); HOLEMENU WINAPI OleCreateMenuDescriptor(HMENU hmenuCombined,LPOLEMENUGROUPWIDTHS lpMenuWidths); HRESULT WINAPI OleDestroyMenuDescriptor(HOLEMENU hmenuDescriptor); HRESULT WINAPI OleSetMenuDescriptor(HOLEMENU hmenuDescriptor,HWND hwndFrame,HWND hwndActiveObject,LPOLEINPLACEFRAME lpFrame,LPOLEINPLACEACTIVEOBJECT lpActiveObject); HRESULT WINAPI WriteClassStg(IStorage *pstg, REFCLSID rclsid); HRESULT WINAPI ReadClassStg(IStorage *pstg,CLSID *pclsid); HRESULT WINAPI WriteClassStm(IStream *pStm,REFCLSID rclsid); HRESULT WINAPI ReadClassStm(IStream *pStm,CLSID *pclsid); HRESULT WINAPI OleSave(LPPERSISTSTORAGE pPS, LPSTORAGE pStg, BOOL fSameAsLoad); HRESULT WINAPI OleRegGetUserType(REFCLSID clsid, DWORD dwFormOfType, LPOLESTR* pszUserType); HRESULT WINAPI OleRegGetMiscStatus (REFCLSID clsid, DWORD dwAspect, DWORD* pdwStatus); HRESULT WINAPI OleRegEnumFormatEtc (REFCLSID clsid, DWORD dwDirection, LPENUMFORMATETC* ppenumFormatetc); HRESULT WINAPI CreateStreamOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM* ppstm); HRESULT WINAPI GetHGlobalFromStream(LPSTREAM pstm, HGLOBAL* phglobal); HRESULT WINAPI OleRegEnumVerbs (REFCLSID clsid, LPENUMOLEVERB* ppenum); BOOL WINAPI OleIsRunning(LPOLEOBJECT pObject); HRESULT WINAPI OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI OleSetContainedObject(LPUNKNOWN pUnknown, BOOL fContained); HRESULT WINAPI OleNoteObjectVisible(LPUNKNOWN pUnknown, BOOL fVisible); HRESULT WINAPI OleQueryLinkFromData(IDataObject* pSrcDataObject); HRESULT WINAPI OleQueryCreateFromData(LPDATAOBJECT pSrcDataObject); HRESULT WINAPI OleRun(LPUNKNOWN pUnknown); HRESULT WINAPI OleDraw(LPUNKNOWN pUnknown, DWORD dwAspect, HDC hdcDraw, LPCRECT lprcBounds); VOID WINAPI ReleaseStgMedium(LPSTGMEDIUM); HRESULT WINAPI OleGetClipboard(IDataObject** ppDataObj); HRESULT WINAPI OleIsCurrentClipboard(LPDATAOBJECT); HRESULT WINAPI OleSetClipboard(LPDATAOBJECT); HRESULT WINAPI OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj, REFIID iid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI ReadFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT* pcf, LPOLESTR* lplpszUserType); HRESULT WINAPI OleLoad(LPSTORAGE pStg, REFIID riid, LPOLECLIENTSITE pClientSite, LPVOID* ppvObj); HRESULT WINAPI GetHGlobalFromILockBytes(LPLOCKBYTES plkbyt, HGLOBAL* phglobal); HRESULT WINAPI CreateILockBytesOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPLOCKBYTES* pplkbyt); HRESULT WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder); HGLOBAL WINAPI OleGetIconOfClass(REFCLSID rclsid, LPOLESTR lpszLabel, BOOL fUseTypeAsLabel); HGLOBAL WINAPI OleGetIconOfFile(LPOLESTR lpszPath, BOOL fUseFileAsLabel); HGLOBAL WINAPI OleMetafilePictFromIconAndLabel(HICON hIcon, LPOLESTR lpszLabel, LPOLESTR lpszSourceFile, UINT iIconIndex); HRESULT WINAPI OleLockRunning(LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCloses); HRESULT WINAPI OleCreateFromFile(REFCLSID rclsid, LPCOLESTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI OleCreateFromFileEx(REFCLSID clsid, LPCOLESTR filename, REFIID iid, DWORD flags, DWORD renderopt, ULONG num_fmts, DWORD *adv_flags, LPFORMATETC fmts, IAdviseSink *sink, DWORD *conns, LPOLECLIENTSITE client_site, LPSTORAGE storage, LPVOID* obj); HRESULT WINAPI OleCreateLink(LPMONIKER pmkLinkSrc, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI OleCreate(REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI OleFlushClipboard(void); HRESULT WINAPI GetConvertStg(LPSTORAGE pStg); HRESULT WINAPI SetConvertStg(LPSTORAGE pStg, BOOL fConvert); BOOL WINAPI IsAccelerator(HACCEL hAccel, int cAccelEntries, struct tagMSG* lpMsg, WORD* lpwCmd); HRESULT WINAPI OleCreateLinkToFile(LPCOLESTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HANDLE WINAPI OleDuplicateData(HANDLE hSrc, CLIPFORMAT cfFormat, UINT uiFlags); HRESULT WINAPI WriteFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType); HRESULT WINAPI OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame, LPOLEINPLACEFRAMEINFO lpFrameInfo, struct tagMSG* lpmsg); HRESULT WINAPI OleCreateFromData(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI OleCreateFromDataEx(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD dwFlags, DWORD renderopt, ULONG num_formats, DWORD *adv_flags, LPFORMATETC fmts, IAdviseSink *sink, DWORD *conns, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj); HRESULT WINAPI OleCreateDefaultHandler(REFCLSID clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppvObj); HRESULT WINAPI OleCreateEmbeddingHelper(REFCLSID clsid, LPUNKNOWN pUnkOuter, DWORD flags, IClassFactory *pCF, REFIID riid, LPVOID* ppvObj); HRESULT WINAPI CreateOleAdviseHolder (LPOLEADVISEHOLDER *ppOAHolder); HRESULT WINAPI OleInitialize(LPVOID pvReserved); void WINAPI OleUninitialize(void); BOOL WINAPI IsValidInterface(LPUNKNOWN punk); DWORD WINAPI OleBuildVersion(VOID); /* * OLE version conversion declarations */ typedef struct _OLESTREAM* LPOLESTREAM; typedef struct _OLESTREAMVTBL { DWORD (CALLBACK *Get)(LPOLESTREAM,LPSTR,DWORD); DWORD (CALLBACK *Put)(LPOLESTREAM,LPSTR,DWORD); } OLESTREAMVTBL; typedef OLESTREAMVTBL* LPOLESTREAMVTBL; typedef struct _OLESTREAM { LPOLESTREAMVTBL lpstbl; } OLESTREAM; HRESULT WINAPI OleConvertOLESTREAMToIStorage( LPOLESTREAM lpolestream, LPSTORAGE pstg, const DVTARGETDEVICE* ptd); HRESULT WINAPI OleConvertIStorageToOLESTREAM( LPSTORAGE pstg, LPOLESTREAM lpolestream); HRESULT WINAPI OleDoAutoConvert( LPSTORAGE pStg, LPCLSID pClsidNew ); HRESULT WINAPI OleGetAutoConvert( REFCLSID clsidOld, LPCLSID pClsidNew ); HRESULT WINAPI OleSetAutoConvert( REFCLSID clsidOld, REFCLSID clsidNew ); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_OLE2_H */ ================================================ FILE: wine/windows/ole2ver.h ================================================ /* * Version number info * * Copyright (C) 1999 Paul Quinn * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLE2VER_H #define __WINE_OLE2VER_H /* * other versions rmm/rup: * 23/639 * 23/700 * 23/730 * 23/824 * * Win98 SE original files: * COMPOBJ: CoBuildVersion 23/700 * OLE2: OleBuildVersion -> COMPOBJ.CoBuildVersion * OLE32: CoBuildVersion and Ole~ 23/824 * * We probably should reorganize the OLE version stuff, i.e. * use different values for every *BuildVersion function and Win version. */ /* bad: we shouldn't make use of it that globally ! */ #define rmm 23 #define rup 824 #endif /* __WINE_OLE2VER_H */ ================================================ FILE: wine/windows/oleacc.idl ================================================ /* * Copyright (C) 2005 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; #ifndef __WIDL__ #define threading(model) #endif cpp_quote("#define NAVDIR_MIN 0") cpp_quote("#define NAVDIR_UP 1") cpp_quote("#define NAVDIR_DOWN 2") cpp_quote("#define NAVDIR_LEFT 3") cpp_quote("#define NAVDIR_RIGHT 4") cpp_quote("#define NAVDIR_NEXT 5") cpp_quote("#define NAVDIR_PREVIOUS 6") cpp_quote("#define NAVDIR_FIRSTCHILD 7") cpp_quote("#define NAVDIR_LASTCHILD 8") cpp_quote("#define NAVDIR_MAX 9") cpp_quote("#define ROLE_SYSTEM_TITLEBAR 1") cpp_quote("#define ROLE_SYSTEM_MENUBAR 2") cpp_quote("#define ROLE_SYSTEM_SCROLLBAR 3") cpp_quote("#define ROLE_SYSTEM_GRIP 4") cpp_quote("#define ROLE_SYSTEM_SOUND 5") cpp_quote("#define ROLE_SYSTEM_CURSOR 6") cpp_quote("#define ROLE_SYSTEM_CARET 7") cpp_quote("#define ROLE_SYSTEM_ALERT 8") cpp_quote("#define ROLE_SYSTEM_WINDOW 9") cpp_quote("#define ROLE_SYSTEM_CLIENT 10") cpp_quote("#define ROLE_SYSTEM_MENUPOPUP 11") cpp_quote("#define ROLE_SYSTEM_MENUITEM 12") cpp_quote("#define ROLE_SYSTEM_TOOLTIP 13") cpp_quote("#define ROLE_SYSTEM_APPLICATION 14") cpp_quote("#define ROLE_SYSTEM_DOCUMENT 15") cpp_quote("#define ROLE_SYSTEM_PANE 16") cpp_quote("#define ROLE_SYSTEM_CHART 17") cpp_quote("#define ROLE_SYSTEM_DIALOG 18") cpp_quote("#define ROLE_SYSTEM_BORDER 19") cpp_quote("#define ROLE_SYSTEM_GROUPING 20") cpp_quote("#define ROLE_SYSTEM_SEPARATOR 21") cpp_quote("#define ROLE_SYSTEM_TOOLBAR 22") cpp_quote("#define ROLE_SYSTEM_STATUSBAR 23") cpp_quote("#define ROLE_SYSTEM_TABLE 24") cpp_quote("#define ROLE_SYSTEM_COLUMNHEADER 25") cpp_quote("#define ROLE_SYSTEM_ROWHEADER 26") cpp_quote("#define ROLE_SYSTEM_COLUMN 27") cpp_quote("#define ROLE_SYSTEM_ROW 28") cpp_quote("#define ROLE_SYSTEM_CELL 29") cpp_quote("#define ROLE_SYSTEM_LINK 30") cpp_quote("#define ROLE_SYSTEM_HELPBALLOON 31") cpp_quote("#define ROLE_SYSTEM_CHARACTER 32") cpp_quote("#define ROLE_SYSTEM_LIST 33") cpp_quote("#define ROLE_SYSTEM_LISTITEM 34") cpp_quote("#define ROLE_SYSTEM_OUTLINE 35") cpp_quote("#define ROLE_SYSTEM_OUTLINEITEM 36") cpp_quote("#define ROLE_SYSTEM_PAGETAB 37") cpp_quote("#define ROLE_SYSTEM_PROPERTYPAGE 38") cpp_quote("#define ROLE_SYSTEM_INDICATOR 39") cpp_quote("#define ROLE_SYSTEM_GRAPHIC 40") cpp_quote("#define ROLE_SYSTEM_STATICTEXT 41") cpp_quote("#define ROLE_SYSTEM_TEXT 42") cpp_quote("#define ROLE_SYSTEM_PUSHBUTTON 43") cpp_quote("#define ROLE_SYSTEM_CHECKBUTTON 44") cpp_quote("#define ROLE_SYSTEM_RADIOBUTTON 45") cpp_quote("#define ROLE_SYSTEM_COMBOBOX 46") cpp_quote("#define ROLE_SYSTEM_DROPLIST 47") cpp_quote("#define ROLE_SYSTEM_PROGRESSBAR 48") cpp_quote("#define ROLE_SYSTEM_DIAL 49") cpp_quote("#define ROLE_SYSTEM_HOTKEYFIELD 50") cpp_quote("#define ROLE_SYSTEM_SLIDER 51") cpp_quote("#define ROLE_SYSTEM_SPINBUTTON 52") cpp_quote("#define ROLE_SYSTEM_DIAGRAM 53") cpp_quote("#define ROLE_SYSTEM_ANIMATION 54") cpp_quote("#define ROLE_SYSTEM_EQUATION 55") cpp_quote("#define ROLE_SYSTEM_BUTTONDROPDOWN 56") cpp_quote("#define ROLE_SYSTEM_BUTTONMENU 57") cpp_quote("#define ROLE_SYSTEM_BUTTONDROPDOWNGRID 58") cpp_quote("#define ROLE_SYSTEM_WHITESPACE 59") cpp_quote("#define ROLE_SYSTEM_PAGETABLIST 60") cpp_quote("#define ROLE_SYSTEM_CLOCK 61") cpp_quote("#define ROLE_SYSTEM_SPLITBUTTON 62") cpp_quote("#define ROLE_SYSTEM_IPADDRESS 63") cpp_quote("#define ROLE_SYSTEM_OUTLINEBUTTON 64") cpp_quote("#define SELFLAG_NONE 0x00") cpp_quote("#define SELFLAG_TAKEFOCUS 0x01") cpp_quote("#define SELFLAG_TAKESELECTION 0x02") cpp_quote("#define SELFLAG_EXTENDSELECTION 0x04") cpp_quote("#define SELFLAG_ADDSELECTION 0x08") cpp_quote("#define SELFLAG_REMOVESELECTION 0x10") cpp_quote("#define SELFLAG_VALID 0x1f") cpp_quote("#ifndef STATE_SYSTEM_UNAVAILABLE") cpp_quote("#define STATE_SYSTEM_NORMAL 0x00000000") cpp_quote("#define STATE_SYSTEM_UNAVAILABLE 0x00000001") cpp_quote("#define STATE_SYSTEM_SELECTED 0x00000002") cpp_quote("#define STATE_SYSTEM_FOCUSED 0x00000004") cpp_quote("#define STATE_SYSTEM_PRESSED 0x00000008") cpp_quote("#define STATE_SYSTEM_CHECKED 0x00000010") cpp_quote("#define STATE_SYSTEM_MIXED 0x00000020") cpp_quote("#define STATE_SYSTEM_INDETERMINATE STATE_SYSTEM_MIXED") cpp_quote("#define STATE_SYSTEM_READONLY 0x00000040") cpp_quote("#define STATE_SYSTEM_HOTTRACKED 0x00000080") cpp_quote("#define STATE_SYSTEM_DEFAULT 0x00000100") cpp_quote("#define STATE_SYSTEM_EXPANDED 0x00000200") cpp_quote("#define STATE_SYSTEM_COLLAPSED 0x00000400") cpp_quote("#define STATE_SYSTEM_BUSY 0x00000800") cpp_quote("#define STATE_SYSTEM_FLOATING 0x00001000") cpp_quote("#define STATE_SYSTEM_MARQUEED 0x00002000") cpp_quote("#define STATE_SYSTEM_ANIMATED 0x00004000") cpp_quote("#define STATE_SYSTEM_INVISIBLE 0x00008000") cpp_quote("#define STATE_SYSTEM_OFFSCREEN 0x00010000") cpp_quote("#define STATE_SYSTEM_SIZEABLE 0x00020000") cpp_quote("#define STATE_SYSTEM_MOVEABLE 0x00040000") cpp_quote("#define STATE_SYSTEM_SELFVOICING 0x00080000") cpp_quote("#define STATE_SYSTEM_FOCUSABLE 0x00100000") cpp_quote("#define STATE_SYSTEM_SELECTABLE 0x00200000") cpp_quote("#define STATE_SYSTEM_LINKED 0x00400000") cpp_quote("#define STATE_SYSTEM_TRAVERSED 0x00800000") cpp_quote("#define STATE_SYSTEM_MULTISELECTABLE 0x01000000") cpp_quote("#define STATE_SYSTEM_EXTSELECTABLE 0x02000000") cpp_quote("#define STATE_SYSTEM_ALERT_LOW 0x04000000") cpp_quote("#define STATE_SYSTEM_ALERT_MEDIUM 0x08000000") cpp_quote("#define STATE_SYSTEM_ALERT_HIGH 0x10000000") cpp_quote("#define STATE_SYSTEM_PROTECTED 0x20000000") cpp_quote("#define STATE_SYSTEM_VALID 0x7FFFFFFF") cpp_quote("#endif") cpp_quote("#ifndef STATE_SYSTEM_HASPOPUP") cpp_quote("#define STATE_SYSTEM_HASPOPUP 0x40000000") cpp_quote("#endif") typedef GUID MSAAPROPID; typedef enum AnnoScope { ANNO_THIS, ANNO_CONTAINER } AnnoScope; [ object, hidden, dual, uuid(618736e0-3c3d-11cf-810c-00aa00389b71), pointer_default(unique) ] interface IAccessible : IDispatch { typedef [unique] IAccessible *LPACCESSIBLE; const long DISPID_ACC_PARENT = -5000; const long DISPID_ACC_CHILDCOUNT = -5001; const long DISPID_ACC_CHILD = -5002; const long DISPID_ACC_NAME = -5003; const long DISPID_ACC_VALUE = -5004; const long DISPID_ACC_DESCRIPTION= -5005; const long DISPID_ACC_ROLE = -5006; const long DISPID_ACC_STATE = -5007; const long DISPID_ACC_HELP = -5008; const long DISPID_ACC_HELPTOPIC = -5009; const long DISPID_ACC_KEYBOARDSHORTCUT = -5010; const long DISPID_ACC_FOCUS = -5011; const long DISPID_ACC_SELECTION = -5012; const long DISPID_ACC_DEFAULTACTION = -5013; const long DISPID_ACC_SELECT = -5014; const long DISPID_ACC_LOCATION = -5015; const long DISPID_ACC_NAVIGATE = -5016; const long DISPID_ACC_HITTEST = -5017; const long DISPID_ACC_DODEFAULTACTION = -5018; [hidden, propget, id(DISPID_ACC_PARENT)] HRESULT accParent([out, retval]IDispatch** ppdispParent); [hidden, propget, id(DISPID_ACC_CHILDCOUNT)] HRESULT accChildCount([out, retval] long* pcountChildren); [hidden, propget, id(DISPID_ACC_CHILD)] HRESULT accChild([in] VARIANT varChildID, [out, retval]IDispatch **ppdispChild); [hidden, propget, id(DISPID_ACC_NAME)] HRESULT accName([in, optional] VARIANT varID, [out, retval] BSTR* pszName); [hidden, propget, id(DISPID_ACC_VALUE)] HRESULT accValue([in, optional] VARIANT varID, [out, retval] BSTR* pszValue); [hidden, propget, id(DISPID_ACC_DESCRIPTION)] HRESULT accDescription([in, optional] VARIANT varID, [out, retval] BSTR *description); [hidden, propget, id(DISPID_ACC_ROLE)] HRESULT accRole([in, optional] VARIANT varID, [out, retval] VARIANT *role); [hidden, propget, id(DISPID_ACC_STATE)] HRESULT accState([in, optional] VARIANT varID, [out, retval] VARIANT *state); [hidden, propget, id(DISPID_ACC_HELP)] HRESULT accHelp([in, optional] VARIANT varID, [out, retval] BSTR *help); [hidden, propget, id(DISPID_ACC_HELPTOPIC)] HRESULT accHelpTopic([out] BSTR *helpfile, [in, optional] VARIANT varID, [out, retval] long* pidTopic); [hidden, propget, id(DISPID_ACC_KEYBOARDSHORTCUT)] HRESULT accKeyboardShortcut([in, optional] VARIANT varID, [out, retval] BSTR *shortcut); [hidden, propget, id(DISPID_ACC_FOCUS)] HRESULT accFocus([out, retval] VARIANT* pvarID); [hidden, propget, id(DISPID_ACC_SELECTION)] HRESULT accSelection([out, retval] VARIANT* pvarID); [hidden, propget, id(DISPID_ACC_DEFAULTACTION)] HRESULT accDefaultAction([in, optional] VARIANT varID, [out, retval] BSTR *action); [hidden, id(DISPID_ACC_SELECT)] HRESULT accSelect([in] long flagsSelect, [in, optional] VARIANT varID); [hidden, id(DISPID_ACC_LOCATION)] HRESULT accLocation([out] long *left, [out] long *top, [out] long *width, [out] long *height, [in, optional] VARIANT varID); [hidden, id(DISPID_ACC_NAVIGATE)] HRESULT accNavigate([in] long dir, [in, optional] VARIANT varStart, [out, retval] VARIANT *pvarEnd); [hidden, id(DISPID_ACC_HITTEST)] HRESULT accHitTest([in] long left, [in] long top, [out, retval] VARIANT *pvarID); [hidden, id(DISPID_ACC_DODEFAULTACTION)] HRESULT accDoDefaultAction([in, optional] VARIANT varID); [hidden, propput, id(DISPID_ACC_NAME)] HRESULT accName([in, optional] VARIANT varID, [in] BSTR name); [hidden, propput, id(DISPID_ACC_VALUE)] HRESULT accValue([in, optional] VARIANT varID, [in] BSTR value); } [ object, uuid(03022430-ABC4-11d0-BDE2-00AA001A1953), hidden, oleautomation, pointer_default(unique) ] interface IAccessibleHandler : IUnknown { typedef [unique] IAccessibleHandler *LPACCESSIBLEHANDLER; HRESULT AccessibleObjectFromID( [in] long hwnd, [in] long lObjectID, [out] LPACCESSIBLE *pIAccessible ); } [ object, uuid(7852b78d-1cfd-41c1-a615-9c0c85960b5f), pointer_default(unique) ] interface IAccIdentity : IUnknown { HRESULT GetIdentityString([in] DWORD idchild, [out, size_is(,*string_len)] BYTE **str, [out] DWORD *string_len); } [ object, uuid(76c0dbbb-15e0-4e7b-b61b-20eeea2001e0), pointer_default(unique) ] interface IAccPropServer: IUnknown { HRESULT GetPropValue([in, size_is(string_len)] const BYTE *str, [in] DWORD string_len, [in] MSAAPROPID idProp, [out] VARIANT *value, [out] BOOL *has_prop); } [ object, uuid(6e26e776-04f0-495d-80e4-3330352e3169), pointer_default(unique) ] interface IAccPropServices : IUnknown { HRESULT SetPropValue([in, size_is(string_len)] const BYTE *str, [in] DWORD string_len, [in] MSAAPROPID idProp, [in] VARIANT var); HRESULT SetPropServer([in, size_is(string_len)] const BYTE *str, [in] DWORD string_len, [in, size_is(cProps)] const MSAAPROPID *props, [in] int cProps, [in] IAccPropServer* pServer, [in] AnnoScope AnnoScope); HRESULT ClearProps([in, size_is(string_len)] const BYTE *str, [in] DWORD string_len, [in, size_is(cProps)] const MSAAPROPID *props, [in] int cProps); HRESULT SetHwndProp([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild, [in] MSAAPROPID idProp, [in] VARIANT var); HRESULT SetHwndPropStr([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild, [in] MSAAPROPID idProp, [in, string] LPWSTR str); HRESULT SetHwndPropServer([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild, [in, size_is(cProps)] const MSAAPROPID *props, [in] int cProps, [in] IAccPropServer *server, [in] AnnoScope scope); HRESULT ClearHwndProps([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild, [in, size_is(cProps)] const MSAAPROPID *props, [in] int cProps); HRESULT ComposeHwndIdentityString([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild, [out, size_is(,*string_len)] BYTE **str, [out] DWORD *string_len); HRESULT DecomposeHwndIdentityString([in, size_is(string_len)] const BYTE *str, [in] DWORD string_len, [out] HWND *phwnd, [out] DWORD *pidObject, [out] DWORD *pidChild); HRESULT SetHmenuProp([in] HMENU hmenu, [in] DWORD idChild, [in] MSAAPROPID idProp, [in] VARIANT var); HRESULT SetHmenuPropStr([in] HMENU hmenu, [in] DWORD idChild, [in] MSAAPROPID idProp, [in, string] LPWSTR str); HRESULT SetHmenuPropServer([in] HMENU hmenu, [in] DWORD idChild, [in, size_is(cProps)] const MSAAPROPID *props, [in] int cProps, [in] IAccPropServer *server, [in] AnnoScope scope); HRESULT ClearHmenuProps([in] HMENU hmenu, [in] DWORD idChild, [in, size_is(cProps)] const MSAAPROPID *props, [in] int cProps); HRESULT ComposeHmenuIdentityString([in] HMENU hmenu, [in] DWORD idChild, [out, size_is(,*string_len)] BYTE **str, [out] DWORD *string_len); HRESULT DecomposeHmenuIdentityString([in, size_is(string_len)] const BYTE *str, [in] DWORD string_len, [out] HMENU *phmenu, [out] DWORD *pidChild); } [ uuid(1ea4dbf0-3c3b-11cf-810c-00aa00389b71), lcid(0), version(1.1), hidden ] library Accessibility { importlib ("stdole2.tlb"); interface IAccessible; interface IAccessibleHandler; interface IAccIdentity; interface IAccPropServer; interface IAccPropServices; [ uuid(b5f8350b-0548-48b1-a6ee-88bd00b4a5e7), threading(apartment) ] coclass CAccPropServices { interface IAccPropServices; } } cpp_quote("DEFINE_GUID(CLSID_AccPropServices, 0xb5f8350b, 0x0548, 0x48b1, 0xa6, 0xee, 0x88, 0xbd, 0x00, 0xb4, 0xa5, 0xe7);") cpp_quote("DEFINE_GUID(IIS_IsOleaccProxy, 0x902697fa, 0x80e4, 0x4560, 0x80, 0x2a, 0xa1, 0x3f, 0x22, 0xa6, 0x47, 0x09);") cpp_quote("LRESULT WINAPI LresultFromObject(REFIID,WPARAM,LPUNKNOWN);") cpp_quote("HRESULT WINAPI ObjectFromLresult(LRESULT,REFIID,WPARAM,void **);") cpp_quote("HRESULT WINAPI WindowFromAccessibleObject(IAccessible *,HWND *);") cpp_quote("HRESULT WINAPI AccessibleObjectFromWindow(HWND,DWORD,REFIID,void **);") cpp_quote("HRESULT WINAPI AccessibleObjectFromEvent(HWND,DWORD,DWORD,IAccessible **,VARIANT *);") cpp_quote("HRESULT WINAPI AccessibleObjectFromPoint(POINT,IAccessible **,VARIANT *);") cpp_quote("HRESULT WINAPI AccessibleChildren(IAccessible *,LONG,LONG,VARIANT *,LONG *);") cpp_quote("void WINAPI GetOleaccVersionInfo(DWORD *,DWORD *);") cpp_quote("HRESULT WINAPI CreateStdAccessibleObject(HWND,LONG,REFIID,void **);") cpp_quote("HRESULT WINAPI CreateStdAccessibleProxyA(HWND,LPCSTR,LONG,REFIID,void **);") cpp_quote("HRESULT WINAPI CreateStdAccessibleProxyW(HWND,LPCWSTR,LONG,REFIID,void **);") cpp_quote("#define CreateStdAccessibleProxy WINELIB_NAME_AW(CreateStdAccessibleProxy)") cpp_quote("UINT WINAPI GetRoleTextA(DWORD,LPSTR,UINT);") cpp_quote("UINT WINAPI GetRoleTextW(DWORD,LPWSTR,UINT);") cpp_quote("#define GetRoleText WINELIB_NAME_AW(GetRoleText)") cpp_quote("UINT WINAPI GetStateTextA(DWORD,LPSTR,UINT);") cpp_quote("UINT WINAPI GetStateTextW(DWORD,LPWSTR,UINT);") cpp_quote("#define GetStateText WINELIB_NAME_AW(GetStateText)") ================================================ FILE: wine/windows/oleauto.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLEAUTO_H #define __WINE_OLEAUTO_H #include #ifdef __cplusplus extern "C" { #endif DEFINE_OLEGUID(IID_StdOle, 0x00020430,0,0); #define STDOLE_MAJORVERNUM 1 #define STDOLE_MINORVERNUM 0 #define STDOLE_LCID 0 #define STDOLE2_MAJORVERNUM 2 #define STDOLE2_MINORVERNUM 0 #define STDOLE2_LCID 0 ULONG WINAPI OaBuildVersion(void); /* BSTR functions */ BSTR WINAPI SysAllocString(const OLECHAR*); BSTR WINAPI SysAllocStringByteLen(LPCSTR,UINT); BSTR WINAPI SysAllocStringLen(const OLECHAR*,UINT); void WINAPI SysFreeString(BSTR); INT WINAPI SysReAllocString(LPBSTR,const OLECHAR*); int WINAPI SysReAllocStringLen(BSTR*,const OLECHAR*,UINT); UINT WINAPI SysStringByteLen(BSTR); UINT WINAPI SysStringLen(BSTR); /* IErrorInfo helpers */ HRESULT WINAPI SetErrorInfo(ULONG,IErrorInfo*); HRESULT WINAPI GetErrorInfo(ULONG,IErrorInfo**); HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo**); /* SafeArray functions */ SAFEARRAY* WINAPI SafeArrayCreate(VARTYPE,UINT,SAFEARRAYBOUND*); SAFEARRAY* WINAPI SafeArrayCreateEx(VARTYPE,UINT,SAFEARRAYBOUND*,LPVOID); SAFEARRAY* WINAPI SafeArrayCreateVector(VARTYPE,LONG,ULONG); SAFEARRAY* WINAPI SafeArrayCreateVectorEx(VARTYPE,LONG,ULONG,LPVOID); HRESULT WINAPI SafeArrayAllocDescriptor(UINT,SAFEARRAY**); HRESULT WINAPI SafeArrayAllocDescriptorEx(VARTYPE,UINT,SAFEARRAY**); HRESULT WINAPI SafeArrayAllocData(SAFEARRAY*); HRESULT WINAPI SafeArrayDestroyDescriptor(SAFEARRAY*); HRESULT WINAPI SafeArrayPutElement(SAFEARRAY*,LONG*,void*); HRESULT WINAPI SafeArrayGetElement(SAFEARRAY*,LONG*,void*); HRESULT WINAPI SafeArrayLock(SAFEARRAY*); HRESULT WINAPI SafeArrayUnlock(SAFEARRAY*); HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY*,UINT,LONG*); HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY*,UINT,LONG*); UINT WINAPI SafeArrayGetDim(SAFEARRAY*); UINT WINAPI SafeArrayGetElemsize(SAFEARRAY*); HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY*,VARTYPE*); HRESULT WINAPI SafeArrayAccessData(SAFEARRAY*,void**); HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY*); HRESULT WINAPI SafeArrayPtrOfIndex(SAFEARRAY*,LONG*,void **); HRESULT WINAPI SafeArrayCopyData(SAFEARRAY*,SAFEARRAY*); HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY*); HRESULT WINAPI SafeArrayDestroy(SAFEARRAY*); HRESULT WINAPI SafeArrayCopy(SAFEARRAY*,SAFEARRAY**); HRESULT WINAPI SafeArrayRedim(SAFEARRAY*,SAFEARRAYBOUND*); HRESULT WINAPI SafeArraySetRecordInfo(SAFEARRAY*,IRecordInfo*); HRESULT WINAPI SafeArrayGetRecordInfo(SAFEARRAY*,IRecordInfo**); HRESULT WINAPI SafeArraySetIID(SAFEARRAY*,REFGUID); HRESULT WINAPI SafeArrayGetIID(SAFEARRAY*,GUID*); HRESULT WINAPI VectorFromBstr(BSTR,SAFEARRAY**); HRESULT WINAPI BstrFromVector(SAFEARRAY*,BSTR*); /* Object registration helpers */ #define ACTIVEOBJECT_STRONG 0 #define ACTIVEOBJECT_WEAK 1 HRESULT WINAPI RegisterActiveObject(LPUNKNOWN,REFCLSID,DWORD,LPDWORD); HRESULT WINAPI RevokeActiveObject(DWORD,LPVOID); HRESULT WINAPI GetActiveObject(REFCLSID,LPVOID,LPUNKNOWN*); /* IRecordInfo helpers */ HRESULT WINAPI GetRecordInfoFromTypeInfo(ITypeInfo*,IRecordInfo**); HRESULT WINAPI GetRecordInfoFromGuids(REFGUID,ULONG,ULONG,LCID,REFGUID,IRecordInfo**); /* * Variants */ /* Macros for accessing the fields of the VARIANT type */ #if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION) #define V_VT(A) ((A)->n1.n2.vt) #define V_UNION(A,B) ((A)->n1.n2.n3.B) #define V_RECORD(A) (V_UNION(A,brecVal).pvRecord) #define V_RECORDINFO(A) (V_UNION(A,brecVal).pRecInfo) #else #define V_VT(A) ((A)->vt) #define V_UNION(A,B) ((A)->B) #define V_RECORD(A) ((A)->pvRecord) #define V_RECORDINFO(A) ((A)->pRecInfo) #endif #define V_ISBYREF(A) (V_VT(A) & VT_BYREF) #define V_ISARRAY(A) (V_VT(A) & VT_ARRAY) #define V_ISVECTOR(A) (V_VT(A) & VT_VECTOR) #define V_NONE(A) V_I2(A) #define V_ARRAY(A) V_UNION(A,parray) #define V_ARRAYREF(A) V_UNION(A,pparray) #define V_BOOL(A) V_UNION(A,boolVal) #define V_BOOLREF(A) V_UNION(A,pboolVal) #define V_BSTR(A) V_UNION(A,bstrVal) #define V_BSTRREF(A) V_UNION(A,pbstrVal) #define V_BYREF(A) V_UNION(A,byref) #define V_CY(A) V_UNION(A,cyVal) #define V_CYREF(A) V_UNION(A,pcyVal) #define V_DATE(A) V_UNION(A,date) #define V_DATEREF(A) V_UNION(A,pdate) #if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION) #define V_DECIMAL(A) ((A)->n1.decVal) #else #define V_DECIMAL(A) ((A)->decVal) #endif #define V_DECIMALREF(A) V_UNION(A,pdecVal) #define V_DISPATCH(A) V_UNION(A,pdispVal) #define V_DISPATCHREF(A) V_UNION(A,ppdispVal) #define V_ERROR(A) V_UNION(A,scode) #define V_ERRORREF(A) V_UNION(A,pscode) #define V_I1(A) V_UNION(A,cVal) #define V_I1REF(A) V_UNION(A,pcVal) #define V_I2(A) V_UNION(A,iVal) #define V_I2REF(A) V_UNION(A,piVal) #define V_I4(A) V_UNION(A,lVal) #define V_I4REF(A) V_UNION(A,plVal) #define V_I8(A) V_UNION(A,llVal) #define V_I8REF(A) V_UNION(A,pllVal) #define V_INT(A) V_UNION(A,intVal) #define V_INTREF(A) V_UNION(A,pintVal) #ifdef _WIN64 #define V_INT_PTR(A) V_I8(A) #define V_INT_PTRREF(A) V_I8REF(A) #else #define V_INT_PTR(A) V_I4(A) #define V_INT_PTRREF(A) V_I4REF(A) #endif #define V_R4(A) V_UNION(A,fltVal) #define V_R4REF(A) V_UNION(A,pfltVal) #define V_R8(A) V_UNION(A,dblVal) #define V_R8REF(A) V_UNION(A,pdblVal) #define V_UINT(A) V_UNION(A,uintVal) #define V_UINTREF(A) V_UNION(A,puintVal) #define V_UI1(A) V_UNION(A,bVal) #define V_UI1REF(A) V_UNION(A,pbVal) #define V_UI2(A) V_UNION(A,uiVal) #define V_UI2REF(A) V_UNION(A,puiVal) #define V_UI4(A) V_UNION(A,ulVal) #define V_UI4REF(A) V_UNION(A,pulVal) #define V_UI8(A) V_UNION(A,ullVal) #define V_UI8REF(A) V_UNION(A,pullVal) #ifdef _WIN64 #define V_UINT_PTR(A) V_UI8(A) #define V_UINT_PTRREF(A) V_UI8REF(A) #else #define V_UINT_PTR(A) V_UI4(A) #define V_UINT_PTRREF(A) V_UI4REF(A) #endif #define V_UNKNOWN(A) V_UNION(A,punkVal) #define V_UNKNOWNREF(A) V_UNION(A,ppunkVal) #define V_VARIANTREF(A) V_UNION(A,pvarVal) void WINAPI VariantInit(VARIANT*); HRESULT WINAPI VariantClear(VARIANT*); HRESULT WINAPI VariantCopy(VARIANT*,VARIANT*); HRESULT WINAPI VariantCopyInd(VARIANT*,VARIANT*); HRESULT WINAPI VariantChangeType(VARIANT*,VARIANT*,USHORT,VARTYPE); HRESULT WINAPI VariantChangeTypeEx(VARIANT*,VARIANT*,LCID,USHORT,VARTYPE); /* VariantChangeType/VariantChangeTypeEx flags */ #define VARIANT_NOVALUEPROP 0x01 /* Don't get the default value property from IDispatch */ #define VARIANT_ALPHABOOL 0x02 /* Coerce to "True"|"False" instead of "-1"|"0" */ #define VARIANT_NOUSEROVERRIDE 0x04 /* Pass LOCALE_NOUSEROVERRIDE to low level conversions */ #define VARIANT_CALENDAR_HIJRI 0x08 /* Use the Hijri calendar */ #define VARIANT_LOCALBOOL 0x10 /* Like VARIANT_ALPHABOOL, but use localised text */ #define VARIANT_CALENDAR_THAI 0x20 /* Use the Thai buddhist calendar */ #define VARIANT_CALENDAR_GREGORIAN 0x40 /* Use the Gregorian calendar */ #define VARIANT_USE_NLS 0x80 /* Format result using NLS calls */ /* * Low level Variant coercion functions */ #define VT_HARDTYPE VT_RESERVED /* Don't coerce this variant when comparing it to others */ /* Flags for low level coercions. LOCALE_ flags can also be passed */ #define VAR_TIMEVALUEONLY 0x001 /* Ignore date portion of VT_DATE */ #define VAR_DATEVALUEONLY 0x002 /* Ignore time portion of VT_DATE */ #define VAR_VALIDDATE 0x004 #define VAR_CALENDAR_HIJRI 0x008 /* Use the Hijri calendar */ #define VAR_LOCALBOOL 0x010 /* VT_BOOL<->VT_BSTR: Use localised boolean text */ #define VAR_FORMAT_NOSUBSTITUTE 0x020 /* Don't change format strings for un-coercable types */ #define VAR_FOURDIGITYEARS 0x040 /* Always print years with 4 digits */ #define VAR_CALENDAR_THAI 0x080 /* Use the Thai buddhist calendar */ #define VAR_CALENDAR_GREGORIAN 0x100 /* Use the Gregorian calendar */ #ifndef LOCALE_USE_NLS /* This is missing from native winnls.h, but may be added at some point */ #define LOCALE_USE_NLS 0x10000000 #endif #define VTDATEGRE_MIN -657434 /* Minimum possible Gregorian date: 1/1/100 */ #define VTDATEGRE_MAX 2958465 /* Maximum possible Gregorian date: 31/12/9999 */ HRESULT WINAPI VarUI1FromI2(SHORT,BYTE*); HRESULT WINAPI VarUI1FromI4(LONG,BYTE*); HRESULT WINAPI VarUI1FromI8(LONG64,BYTE*); HRESULT WINAPI VarUI1FromR4(FLOAT,BYTE*); HRESULT WINAPI VarUI1FromR8(DOUBLE,BYTE*); HRESULT WINAPI VarUI1FromDate(DATE,BYTE*); HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL,BYTE*); HRESULT WINAPI VarUI1FromI1(signed char,BYTE*); HRESULT WINAPI VarUI1FromUI2(USHORT,BYTE*); HRESULT WINAPI VarUI1FromUI4(ULONG,BYTE*); HRESULT WINAPI VarUI1FromUI8(ULONG64,BYTE*); HRESULT WINAPI VarUI1FromStr(OLECHAR*,LCID,ULONG,BYTE*); HRESULT WINAPI VarUI1FromCy(CY,BYTE*); HRESULT WINAPI VarUI1FromDec(DECIMAL*,BYTE*); HRESULT WINAPI VarUI1FromDisp(IDispatch*,LCID,BYTE*); HRESULT WINAPI VarI2FromUI1(BYTE,SHORT*); HRESULT WINAPI VarI2FromI4(LONG,SHORT*); HRESULT WINAPI VarI2FromI8(LONG64,SHORT*); HRESULT WINAPI VarI2FromR4(FLOAT,SHORT*); HRESULT WINAPI VarI2FromR8(DOUBLE,SHORT*); HRESULT WINAPI VarI2FromDate(DATE,SHORT*); HRESULT WINAPI VarI2FromBool(VARIANT_BOOL,SHORT*); HRESULT WINAPI VarI2FromI1(signed char,SHORT*); HRESULT WINAPI VarI2FromUI2(USHORT,SHORT*); HRESULT WINAPI VarI2FromUI4(ULONG,SHORT*); HRESULT WINAPI VarI2FromUI8(ULONG64,SHORT*); HRESULT WINAPI VarI2FromStr(OLECHAR*,LCID,ULONG,SHORT*); HRESULT WINAPI VarI2FromCy(CY,SHORT*); HRESULT WINAPI VarI2FromDec(DECIMAL*,SHORT*); HRESULT WINAPI VarI2FromDisp(IDispatch*,LCID,SHORT*); HRESULT WINAPI VarI4FromUI1(BYTE,LONG*); HRESULT WINAPI VarI4FromI2(SHORT,LONG*); HRESULT WINAPI VarI4FromI8(LONG64,LONG*); HRESULT WINAPI VarI4FromR4(FLOAT,LONG*); HRESULT WINAPI VarI4FromR8(DOUBLE,LONG*); HRESULT WINAPI VarI4FromDate(DATE,LONG*); HRESULT WINAPI VarI4FromBool(VARIANT_BOOL,LONG*); HRESULT WINAPI VarI4FromI1(signed char,LONG*); HRESULT WINAPI VarI4FromUI2(USHORT,LONG*); HRESULT WINAPI VarI4FromUI4(ULONG,LONG*); HRESULT WINAPI VarI4FromUI8(ULONG64,LONG*); HRESULT WINAPI VarI4FromStr(OLECHAR*,LCID,ULONG,LONG*); HRESULT WINAPI VarI4FromCy(CY,LONG*); HRESULT WINAPI VarI4FromDec(DECIMAL*,LONG*); HRESULT WINAPI VarI4FromDisp(IDispatch*,LCID,LONG*); HRESULT WINAPI VarI8FromUI1(BYTE,LONG64*); HRESULT WINAPI VarI8FromI2(SHORT,LONG64*); HRESULT WINAPI VarI8FromI4(LONG,LONG64*); HRESULT WINAPI VarI8FromR4(FLOAT,LONG64*); HRESULT WINAPI VarI8FromR8(DOUBLE,LONG64*); HRESULT WINAPI VarI8FromDate(DATE,LONG64*); HRESULT WINAPI VarI8FromStr(OLECHAR*,LCID,ULONG,LONG64*); HRESULT WINAPI VarI8FromBool(VARIANT_BOOL,LONG64*); HRESULT WINAPI VarI8FromI1(signed char,LONG64*); HRESULT WINAPI VarI8FromUI2(USHORT,LONG64*); HRESULT WINAPI VarI8FromUI4(ULONG,LONG64*); HRESULT WINAPI VarI8FromUI8(ULONG64,LONG64*); HRESULT WINAPI VarI8FromDec(DECIMAL *pdecIn,LONG64*); HRESULT WINAPI VarI8FromInt(INT intIn,LONG64*); HRESULT WINAPI VarI8FromCy(CY,LONG64*); HRESULT WINAPI VarI8FromDisp(IDispatch*,LCID,LONG64*); HRESULT WINAPI VarR4FromUI1(BYTE,FLOAT*); HRESULT WINAPI VarR4FromI2(SHORT,FLOAT*); HRESULT WINAPI VarR4FromI4(LONG,FLOAT*); HRESULT WINAPI VarR4FromI8(LONG64,FLOAT*); HRESULT WINAPI VarR4FromR8(DOUBLE,FLOAT*); HRESULT WINAPI VarR4FromDate(DATE,FLOAT*); HRESULT WINAPI VarR4FromBool(VARIANT_BOOL,FLOAT*); HRESULT WINAPI VarR4FromI1(signed char,FLOAT*); HRESULT WINAPI VarR4FromUI2(USHORT,FLOAT*); HRESULT WINAPI VarR4FromUI4(ULONG,FLOAT*); HRESULT WINAPI VarR4FromUI8(ULONG64,FLOAT*); HRESULT WINAPI VarR4FromStr(OLECHAR*,LCID,ULONG,FLOAT*); HRESULT WINAPI VarR4FromCy(CY,FLOAT*); HRESULT WINAPI VarR4FromDec(DECIMAL*,FLOAT*); HRESULT WINAPI VarR4FromDisp(IDispatch*,LCID,FLOAT*); HRESULT WINAPI VarR8FromUI1(BYTE,double*); HRESULT WINAPI VarR8FromI2(SHORT,double*); HRESULT WINAPI VarR8FromI4(LONG,double*); HRESULT WINAPI VarR8FromI8(LONG64,double*); HRESULT WINAPI VarR8FromR4(FLOAT,double*); HRESULT WINAPI VarR8FromDate(DATE,double*); HRESULT WINAPI VarR8FromBool(VARIANT_BOOL,double*); HRESULT WINAPI VarR8FromI1(signed char,double*); HRESULT WINAPI VarR8FromUI2(USHORT,double*); HRESULT WINAPI VarR8FromUI4(ULONG,double*); HRESULT WINAPI VarR8FromUI8(ULONG64,double*); HRESULT WINAPI VarR8FromStr(OLECHAR*,LCID,ULONG,double*); HRESULT WINAPI VarR8FromCy(CY,double*); HRESULT WINAPI VarR8FromDec(const DECIMAL*,double*); HRESULT WINAPI VarR8FromDisp(IDispatch*,LCID,double*); HRESULT WINAPI VarDateFromUI1(BYTE,DATE*); HRESULT WINAPI VarDateFromI2(SHORT,DATE*); HRESULT WINAPI VarDateFromI4(LONG,DATE*); HRESULT WINAPI VarDateFromI8(LONG64,DATE*); HRESULT WINAPI VarDateFromR4(FLOAT,DATE*); HRESULT WINAPI VarDateFromR8(DOUBLE,DATE*); HRESULT WINAPI VarDateFromStr(OLECHAR*,LCID,ULONG,DATE*); HRESULT WINAPI VarDateFromI1(signed char,DATE*); HRESULT WINAPI VarDateFromUI2(USHORT,DATE*); HRESULT WINAPI VarDateFromUI4(ULONG,DATE*); HRESULT WINAPI VarDateFromUI8(ULONG64,DATE*); HRESULT WINAPI VarDateFromBool(VARIANT_BOOL,DATE*); HRESULT WINAPI VarDateFromCy(CY,DATE*); HRESULT WINAPI VarDateFromDec(DECIMAL*,DATE*); HRESULT WINAPI VarDateFromDisp(IDispatch*,LCID,DATE*); HRESULT WINAPI VarCyFromUI1(BYTE,CY*); HRESULT WINAPI VarCyFromI2(SHORT sIn,CY*); HRESULT WINAPI VarCyFromI4(LONG,CY*); HRESULT WINAPI VarCyFromI8(LONG64,CY*); HRESULT WINAPI VarCyFromR4(FLOAT,CY*); HRESULT WINAPI VarCyFromR8(DOUBLE,CY*); HRESULT WINAPI VarCyFromDate(DATE,CY*); HRESULT WINAPI VarCyFromStr(OLECHAR*,LCID,ULONG,CY*); HRESULT WINAPI VarCyFromBool(VARIANT_BOOL,CY*); HRESULT WINAPI VarCyFromI1(signed char,CY*); HRESULT WINAPI VarCyFromUI2(USHORT,CY*); HRESULT WINAPI VarCyFromUI4(ULONG,CY*); HRESULT WINAPI VarCyFromUI8(ULONG64,CY*); HRESULT WINAPI VarCyFromDec(DECIMAL*,CY*); HRESULT WINAPI VarCyFromDisp(IDispatch*,LCID,CY*); HRESULT WINAPI VarBstrFromUI1(BYTE,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromI2(SHORT,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromI4(LONG,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromI8(LONG64,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromR4(FLOAT,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromR8(DOUBLE,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromDate(DATE,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromI1(signed char,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromUI2(USHORT,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromUI8(ULONG64,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromUI4(ULONG,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromCy(CY,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromDec(DECIMAL*,LCID,ULONG,BSTR*); HRESULT WINAPI VarBstrFromDisp(IDispatch*,LCID,ULONG,BSTR*); HRESULT WINAPI VarBoolFromUI1(BYTE,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromI2(SHORT,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromI4(LONG,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromI8(LONG64,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromR4(FLOAT,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromR8(DOUBLE,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromDate(DATE,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromStr(OLECHAR*,LCID,ULONG,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromI1(signed char,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromUI2(USHORT,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromUI4(ULONG,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromUI8(ULONG64,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromCy(CY,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromDec(DECIMAL*,VARIANT_BOOL*); HRESULT WINAPI VarBoolFromDisp(IDispatch*,LCID,VARIANT_BOOL*); HRESULT WINAPI VarI1FromUI1(BYTE,signed char*); HRESULT WINAPI VarI1FromI2(SHORT,signed char*); HRESULT WINAPI VarI1FromI4(LONG,signed char*); HRESULT WINAPI VarI1FromI8(LONG64,signed char*); HRESULT WINAPI VarI1FromR4(FLOAT,signed char*); HRESULT WINAPI VarI1FromR8(DOUBLE,signed char*); HRESULT WINAPI VarI1FromDate(DATE,signed char*); HRESULT WINAPI VarI1FromStr(OLECHAR*,LCID,ULONG,signed char*); HRESULT WINAPI VarI1FromBool(VARIANT_BOOL,signed char*); HRESULT WINAPI VarI1FromUI2(USHORT,signed char*); HRESULT WINAPI VarI1FromUI4(ULONG,signed char*); HRESULT WINAPI VarI1FromUI8(ULONG64,signed char*); HRESULT WINAPI VarI1FromCy(CY,signed char*); HRESULT WINAPI VarI1FromDec(DECIMAL*,signed char*); HRESULT WINAPI VarI1FromDisp(IDispatch*,LCID,signed char*); HRESULT WINAPI VarUI2FromUI1(BYTE,USHORT*); HRESULT WINAPI VarUI2FromI2(SHORT,USHORT*); HRESULT WINAPI VarUI2FromI4(LONG,USHORT*); HRESULT WINAPI VarUI2FromI8(LONG64,USHORT*); HRESULT WINAPI VarUI2FromR4(FLOAT,USHORT*); HRESULT WINAPI VarUI2FromR8(DOUBLE,USHORT*); HRESULT WINAPI VarUI2FromDate(DATE,USHORT*); HRESULT WINAPI VarUI2FromStr(OLECHAR*,LCID,ULONG,USHORT*); HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL,USHORT*); HRESULT WINAPI VarUI2FromI1(signed char,USHORT*); HRESULT WINAPI VarUI2FromUI4(ULONG,USHORT*); HRESULT WINAPI VarUI2FromUI8(ULONG64,USHORT*); HRESULT WINAPI VarUI2FromCy(CY,USHORT*); HRESULT WINAPI VarUI2FromDec(DECIMAL*,USHORT*); HRESULT WINAPI VarUI2FromDisp(IDispatch*,LCID,USHORT*); HRESULT WINAPI VarUI4FromStr(OLECHAR*,LCID,ULONG,ULONG*); HRESULT WINAPI VarUI4FromUI1(BYTE,ULONG*); HRESULT WINAPI VarUI4FromI2(SHORT,ULONG*); HRESULT WINAPI VarUI4FromI4(LONG,ULONG*); HRESULT WINAPI VarUI4FromI8(LONG64,ULONG*); HRESULT WINAPI VarUI4FromR4(FLOAT,ULONG*); HRESULT WINAPI VarUI4FromR8(DOUBLE,ULONG*); HRESULT WINAPI VarUI4FromDate(DATE,ULONG*); HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL,ULONG*); HRESULT WINAPI VarUI4FromI1(signed char,ULONG*); HRESULT WINAPI VarUI4FromUI2(USHORT,ULONG*); HRESULT WINAPI VarUI4FromUI8(ULONG64,ULONG*); HRESULT WINAPI VarUI4FromCy(CY,ULONG*); HRESULT WINAPI VarUI4FromDec(DECIMAL*,ULONG*); HRESULT WINAPI VarUI4FromDisp(IDispatch*,LCID,ULONG*); HRESULT WINAPI VarUI8FromUI1(BYTE,ULONG64*); HRESULT WINAPI VarUI8FromI2(SHORT,ULONG64*); HRESULT WINAPI VarUI8FromI4(LONG,ULONG64*); HRESULT WINAPI VarUI8FromI8(LONG64,ULONG64*); HRESULT WINAPI VarUI8FromR4(FLOAT,ULONG64*); HRESULT WINAPI VarUI8FromR8(DOUBLE,ULONG64*); HRESULT WINAPI VarUI8FromDate(DATE,ULONG64*); HRESULT WINAPI VarUI8FromStr(OLECHAR*,LCID,ULONG,ULONG64*); HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL,ULONG64*); HRESULT WINAPI VarUI8FromI1(signed char,ULONG64*); HRESULT WINAPI VarUI8FromUI2(USHORT,ULONG64*); HRESULT WINAPI VarUI8FromUI4(ULONG,ULONG64*); HRESULT WINAPI VarUI8FromDec(DECIMAL*,ULONG64*); HRESULT WINAPI VarUI8FromInt(INT,ULONG64*); HRESULT WINAPI VarUI8FromCy(CY,ULONG64*); HRESULT WINAPI VarUI8FromDisp(IDispatch*,LCID,ULONG64*); HRESULT WINAPI VarDecFromUI1(BYTE,DECIMAL*); HRESULT WINAPI VarDecFromI2(SHORT,DECIMAL*); HRESULT WINAPI VarDecFromI4(LONG,DECIMAL*); HRESULT WINAPI VarDecFromI8(LONG64,DECIMAL*); HRESULT WINAPI VarDecFromR4(FLOAT,DECIMAL*); HRESULT WINAPI VarDecFromR8(DOUBLE,DECIMAL*); HRESULT WINAPI VarDecFromDate(DATE,DECIMAL*); HRESULT WINAPI VarDecFromStr(OLECHAR*,LCID,ULONG,DECIMAL*); HRESULT WINAPI VarDecFromBool(VARIANT_BOOL,DECIMAL*); HRESULT WINAPI VarDecFromI1(signed char,DECIMAL*); HRESULT WINAPI VarDecFromUI2(USHORT,DECIMAL*); HRESULT WINAPI VarDecFromUI4(ULONG,DECIMAL*); HRESULT WINAPI VarDecFromUI8(ULONG64,DECIMAL*); HRESULT WINAPI VarDecFromCy(CY,DECIMAL*); HRESULT WINAPI VarDecFromDisp(IDispatch*,LCID,DECIMAL*); #define VarUI4FromUI4( in,pOut ) ( *(pOut) = (in) ) #define VarI4FromI4( in,pOut ) ( *(pOut) = (in) ) #define VarUI1FromInt VarUI1FromI4 #define VarUI1FromUint VarUI1FromUI4 #define VarI2FromInt VarI2FromI4 #define VarI2FromUint VarI2FromUI4 #define VarI4FromInt VarI4FromI4 #define VarI4FromUint VarI4FromUI4 #define VarI8FromInt VarI8FromI4 #define VarI8FromUint VarI8FromUI4 #define VarR4FromInt VarR4FromI4 #define VarR4FromUint VarR4FromUI4 #define VarR8FromInt VarR8FromI4 #define VarR8FromUint VarR8FromUI4 #define VarDateFromInt VarDateFromI4 #define VarDateFromUint VarDateFromUI4 #define VarCyFromInt VarCyFromI4 #define VarCyFromUint VarCyFromUI4 #define VarBstrFromInt VarBstrFromI4 #define VarBstrFromUint VarBstrFromUI4 #define VarBoolFromInt VarBoolFromI4 #define VarBoolFromUint VarBoolFromUI4 #define VarI1FromInt VarI1FromI4 #define VarI1FromUint VarI1FromUI4 #define VarUI2FromInt VarUI2FromI4 #define VarUI2FromUint VarUI2FromUI4 #define VarUI4FromInt VarUI4FromI4 #define VarUI4FromUint VarUI4FromUI4 #define VarUI8FromInt VarUI8FromI4 #define VarUI8FromUint VarUI8FromUI4 #define VarDecFromInt VarDecFromI4 #define VarDecFromUint VarDecFromUI4 #define VarIntFromUI1 VarI4FromUI1 #define VarIntFromI2 VarI4FromI2 #define VarIntFromI4 VarI4FromI4 #define VarIntFromI8 VarI4FromI8 #define VarIntFromR4 VarI4FromR4 #define VarIntFromR8 VarI4FromR8 #define VarIntFromDate VarI4FromDate #define VarIntFromCy VarI4FromCy #define VarIntFromStr VarI4FromStr #define VarIntFromDisp VarI4FromDisp #define VarIntFromBool VarI4FromBool #define VarIntFromI1 VarI4FromI1 #define VarIntFromUI2 VarI4FromUI2 #define VarIntFromUI4 VarI4FromUI4 #define VarIntFromUI8 VarI4FromUI8 #define VarIntFromDec VarI4FromDec #define VarIntFromUint VarI4FromUI4 #define VarUintFromUI1 VarUI4FromUI1 #define VarUintFromI2 VarUI4FromI2 #define VarUintFromI4 VarUI4FromI4 #define VarUintFromI8 VarUI4FromI8 #define VarUintFromR4 VarUI4FromR4 #define VarUintFromR8 VarUI4FromR8 #define VarUintFromDate VarUI4FromDate #define VarUintFromCy VarUI4FromCy #define VarUintFromStr VarUI4FromStr #define VarUintFromDisp VarUI4FromDisp #define VarUintFromBool VarUI4FromBool #define VarUintFromI1 VarUI4FromI1 #define VarUintFromUI2 VarUI4FromUI2 #define VarUintFromUI4 VarUI4FromUI4 #define VarUintFromUI8 VarUI4FromUI8 #define VarUintFromDec VarUI4FromDec #define VarUintFromInt VarUI4FromI4 /* * Variant Math operations */ #define VARCMP_LT 0 #define VARCMP_EQ 1 #define VARCMP_GT 2 #define VARCMP_NULL 3 HRESULT WINAPI VarR4CmpR8(float,double); HRESULT WINAPI VarR8Pow(double,double,double*); HRESULT WINAPI VarR8Round(double,int,double*); HRESULT WINAPI VarDecAbs(const DECIMAL*,DECIMAL*); HRESULT WINAPI VarDecAdd(const DECIMAL*,const DECIMAL*,DECIMAL*); HRESULT WINAPI VarDecCmp(const DECIMAL*,const DECIMAL*); HRESULT WINAPI VarDecCmpR8(const DECIMAL*,DOUBLE); HRESULT WINAPI VarDecDiv(const DECIMAL*,const DECIMAL*,DECIMAL*); HRESULT WINAPI VarDecFix(const DECIMAL*,DECIMAL*); HRESULT WINAPI VarDecInt(const DECIMAL*,DECIMAL*); HRESULT WINAPI VarDecMul(const DECIMAL*,const DECIMAL*,DECIMAL*); HRESULT WINAPI VarDecNeg(const DECIMAL*,DECIMAL*); HRESULT WINAPI VarDecRound(const DECIMAL*,int,DECIMAL*); HRESULT WINAPI VarDecSub(const DECIMAL*,const DECIMAL*,DECIMAL*); HRESULT WINAPI VarCyAbs(CY,CY*); HRESULT WINAPI VarCyAdd(CY,CY,CY*); HRESULT WINAPI VarCyCmp(CY,CY); HRESULT WINAPI VarCyCmpR8(CY,DOUBLE); HRESULT WINAPI VarCyFix(CY,CY*); HRESULT WINAPI VarCyInt(CY,CY*); HRESULT WINAPI VarCyMul(CY,CY,CY*); HRESULT WINAPI VarCyMulI4(CY,LONG,CY*); HRESULT WINAPI VarCyMulI8(CY,LONG64,CY*); HRESULT WINAPI VarCyNeg(CY,CY*); HRESULT WINAPI VarCyRound(CY,INT,CY*); HRESULT WINAPI VarCySub(CY,CY,CY*); HRESULT WINAPI VarAdd(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarAnd(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarCat(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarDiv(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarEqv(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarIdiv(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarImp(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarMod(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarMul(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarOr(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarPow(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarSub(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarXor(LPVARIANT,LPVARIANT,LPVARIANT); HRESULT WINAPI VarAbs(LPVARIANT,LPVARIANT); HRESULT WINAPI VarFix(LPVARIANT,LPVARIANT); HRESULT WINAPI VarInt(LPVARIANT,LPVARIANT); HRESULT WINAPI VarNeg(LPVARIANT,LPVARIANT); HRESULT WINAPI VarNot(LPVARIANT,LPVARIANT); HRESULT WINAPI VarRound(LPVARIANT,int,LPVARIANT); HRESULT WINAPI VarCmp(LPVARIANT,LPVARIANT,LCID,ULONG); HRESULT WINAPI VarBstrCmp(BSTR,BSTR,LCID,ULONG); HRESULT WINAPI VarBstrCat(BSTR,BSTR,BSTR*); typedef struct { SYSTEMTIME st; USHORT wDayOfYear; } UDATE; typedef struct { INT cDig; /* Number of parsed digits */ ULONG dwInFlags; /* Acceptable state of the input string (NUMPRS_ flags) */ ULONG dwOutFlags; /* Parsed state of the output string (NUMPRS_ flags) */ INT cchUsed; /* Number of characters parsed from input string */ INT nBaseShift; /* Base of the number (but apparently unused) */ INT nPwr10; /* Scale of the number in powers of 10 */ } NUMPARSE; #define NUMPRS_LEADING_WHITE 0x00001 /* Leading whitespace */ #define NUMPRS_TRAILING_WHITE 0x00002 /* Trailing whitespace */ #define NUMPRS_LEADING_PLUS 0x00004 /* Leading '+' sign */ #define NUMPRS_TRAILING_PLUS 0x00008 /* Trailing '+' sign */ #define NUMPRS_LEADING_MINUS 0x00010 /* Leading '-' sign */ #define NUMPRS_TRAILING_MINUS 0x00020 /* Trailing '-' sign */ #define NUMPRS_HEX_OCT 0x00040 /* Octal number (with a leading 0) */ #define NUMPRS_PARENS 0x00080 /* Parentheses for negative numbers */ #define NUMPRS_DECIMAL 0x00100 /* Decimal separator */ #define NUMPRS_THOUSANDS 0x00200 /* Thousands separator */ #define NUMPRS_CURRENCY 0x00400 /* Currency symbol */ #define NUMPRS_EXPONENT 0x00800 /* Exponent (e.g. "e-14") */ #define NUMPRS_USE_ALL 0x01000 /* Parse the entire string */ #define NUMPRS_STD 0x01FFF /* Standard flags for internal coercions (All of the above) */ #define NUMPRS_NEG 0x10000 /* Number is negative (dwOutFlags only) */ #define NUMPRS_INEXACT 0x20000 /* Number is represented inexactly (dwOutFlags only) */ #define VTBIT_I1 (1 << VT_I1) #define VTBIT_UI1 (1 << VT_UI1) #define VTBIT_I2 (1 << VT_I2) #define VTBIT_UI2 (1 << VT_UI2) #define VTBIT_I4 (1 << VT_I4) #define VTBIT_UI4 (1 << VT_UI4) #define VTBIT_I8 (1 << VT_I8) #define VTBIT_UI8 (1 << VT_UI8) #define VTBIT_R4 (1 << VT_R4) #define VTBIT_R8 (1 << VT_R8) #define VTBIT_CY (1 << VT_CY) #define VTBIT_DECIMAL (1 << VT_DECIMAL) HRESULT WINAPI VarParseNumFromStr(OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*); HRESULT WINAPI VarNumFromParseNum(NUMPARSE*,BYTE*,ULONG,VARIANT*); INT WINAPI DosDateTimeToVariantTime(USHORT,USHORT,double*); INT WINAPI VariantTimeToDosDateTime(double,USHORT*,USHORT*); INT WINAPI VariantTimeToSystemTime(DOUBLE,LPSYSTEMTIME); INT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME,double*); HRESULT WINAPI VarDateFromUdate(UDATE*,ULONG,DATE*); HRESULT WINAPI VarDateFromUdateEx(UDATE*,LCID,ULONG,DATE*); HRESULT WINAPI VarUdateFromDate(DATE,ULONG,UDATE*); /* Variant formatting */ HRESULT WINAPI VarWeekdayName(int,int,int,ULONG,BSTR*); HRESULT WINAPI VarMonthName(int,int,ULONG,BSTR*); HRESULT WINAPI GetAltMonthNames(LCID,LPOLESTR**); HRESULT WINAPI VarFormat(LPVARIANT,LPOLESTR,int,int,ULONG,BSTR*); HRESULT WINAPI VarFormatCurrency(LPVARIANT,int,int,int,int,ULONG,BSTR*); HRESULT WINAPI VarFormatDateTime(LPVARIANT,int,ULONG,BSTR*); HRESULT WINAPI VarFormatNumber(LPVARIANT,int,int,int,int,ULONG,BSTR*); HRESULT WINAPI VarFormatPercent(LPVARIANT,int,int,int,int,ULONG,BSTR*); HRESULT WINAPI VarFormatFromTokens(LPVARIANT,LPOLESTR,LPBYTE,ULONG,BSTR*,LCID); HRESULT WINAPI VarTokenizeFormatString(LPOLESTR,LPBYTE,int,int,int,LCID,int*); /* * IDispatch types and helper functions */ /* A structure describing a single parameter to a com object method. */ typedef struct tagPARAMDATA { OLECHAR *szName; /* Name of Parameter */ VARTYPE vt; /* Type of Parameter */ } PARAMDATA, *LPPARAMDATA; /* A structure describing a single method of a com object. */ typedef struct tagMETHODDATA { OLECHAR *szName; /* Name of method */ PARAMDATA *ppdata; /* Parameters of the method */ DISPID dispid; /* Id of the method */ UINT iMeth; /* Vtable index of the method */ CALLCONV cc; /* Calling convention of the method */ UINT cArgs; /* Number of parameters in the method */ WORD wFlags; /* Type of the method (DISPATCH_ flags) */ VARTYPE vtReturn; /* Type of the return value */ } METHODDATA, *LPMETHODDATA; /* Structure describing a single com object */ typedef struct tagINTERFACEDATA { METHODDATA *pmethdata; /* Methods of the object */ UINT cMembers; /* Number of methods in the object */ } INTERFACEDATA, *LPINTERFACEDATA; typedef enum tagREGKIND { REGKIND_DEFAULT, REGKIND_REGISTER, REGKIND_NONE } REGKIND; HRESULT WINAPI DispGetParam(DISPPARAMS*,UINT,VARTYPE,VARIANT*,UINT*); HRESULT WINAPI DispGetIDsOfNames(ITypeInfo*,OLECHAR**,UINT,DISPID*); HRESULT WINAPI DispInvoke(void*,ITypeInfo*,DISPID,WORD,DISPPARAMS*,VARIANT*, EXCEPINFO*,UINT*); HRESULT WINAPI CreateDispTypeInfo(INTERFACEDATA*,LCID,ITypeInfo**); HRESULT WINAPI CreateStdDispatch(IUnknown*,void*,ITypeInfo*,IUnknown**); HRESULT WINAPI DispCallFunc(void*,ULONG_PTR,CALLCONV,VARTYPE,UINT,VARTYPE*, VARIANTARG**,VARIANT*); /* * TypeLib API */ ULONG WINAPI LHashValOfNameSysA(SYSKIND,LCID,LPCSTR); ULONG WINAPI LHashValOfNameSys(SYSKIND,LCID,LPCOLESTR); #define LHashValOfName(lcid,name) LHashValOfNameSys(SYS_WIN32,lcid,name) #define WHashValOfLHashVal(hash) ((USHORT)((hash) & 0xffff)) #define IsHashValCompatible(hash1,hash2) ((hash1) & 0xff0000 == (hash2) & 0xff0000) #define MEMBERID_NIL DISPID_UNKNOWN #define ID_DEFAULTINST -2 #define DISPATCH_METHOD 0x1 #define DISPATCH_PROPERTYGET 0x2 #define DISPATCH_PROPERTYPUT 0x4 #define DISPATCH_PROPERTYPUTREF 0x8 #define LOAD_TLB_AS_32BIT 0x20 #define LOAD_TLB_AS_64BIT 0x40 #define MASK_TO_RESET_TLB_BITS ~(LOAD_TLB_AS_32BIT|LOAD_TLB_AS_64BIT) HRESULT WINAPI CreateTypeLib(SYSKIND,const OLECHAR*,ICreateTypeLib**); HRESULT WINAPI CreateTypeLib2(SYSKIND,LPCOLESTR,ICreateTypeLib2**); HRESULT WINAPI LoadRegTypeLib(REFGUID,WORD,WORD,LCID,ITypeLib**); HRESULT WINAPI LoadTypeLib(const OLECHAR*,ITypeLib**); HRESULT WINAPI LoadTypeLibEx(LPCOLESTR,REGKIND,ITypeLib**); HRESULT WINAPI QueryPathOfRegTypeLib(REFGUID,WORD,WORD,LCID,LPBSTR); HRESULT WINAPI RegisterTypeLib(ITypeLib*,OLECHAR*,OLECHAR*); HRESULT WINAPI UnRegisterTypeLib(REFGUID,WORD,WORD,LCID,SYSKIND); HRESULT WINAPI RegisterTypeLibForUser(ITypeLib*,OLECHAR*,OLECHAR*); HRESULT WINAPI UnRegisterTypeLibForUser(REFGUID,WORD,WORD,LCID,SYSKIND); VOID WINAPI ClearCustData(LPCUSTDATA); #ifdef __cplusplus } /* extern "C" */ #endif #endif /*__WINE_OLEAUTO_H*/ ================================================ FILE: wine/windows/olectl.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLECTL_H #define __WINE_OLECTL_H #if !defined(__midl) && !defined(__WIDL__) #include #ifdef __cplusplus extern "C" { #endif /* * Ole Control Interfaces */ DEFINE_GUID(CLSID_ConvertVBX, 0xfb8f0822,0x0164,0x101b,0x84,0xed,0x08,0x00,0x2b,0x2e,0xc7,0x13); DEFINE_GUID(CLSID_PersistPropset, 0xfb8f0821,0x0164,0x101b,0x84,0xed,0x08,0x00,0x2b,0x2e,0xc7,0x13); DEFINE_GUID(CLSID_StdFont, 0x0be35203,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51); DEFINE_GUID(CLSID_StdPicture, 0x0be35204,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51); DEFINE_GUID(IID_IPropertyFrame, 0xb196b28a,0xbab4,0x101a,0xb6,0x9c,0x00,0xaa,0x00,0x34,0x1d,0x07); DEFINE_GUID(CLSID_CFontPropPage, 0x0be35200,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51); DEFINE_GUID(CLSID_CColorPropPage, 0x0be35201,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51); DEFINE_GUID(CLSID_CPicturePropPage, 0x0be35202,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51); DEFINE_GUID(GUID_HIMETRIC, 0x66504300,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_COLOR, 0x66504301,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_XPOSPIXEL, 0x66504302,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_YPOSPIXEL, 0x66504303,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_XSIZEPIXEL, 0x66504304,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_YSIZEPIXEL, 0x66504305,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_XPOS, 0x66504306,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_YPOS, 0x66504307,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_XSIZE, 0x66504308,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); DEFINE_GUID(GUID_YSIZE, 0x66504309,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB); #ifndef __CGUID_H__ DEFINE_GUID(GUID_TRISTATE, 0x6650430a,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); #endif DEFINE_GUID(GUID_OPTIONVALUEEXCLUSIVE, 0x6650430b,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); DEFINE_GUID(GUID_CHECKVALUEEXCLUSIVE, 0x6650430c,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); DEFINE_GUID(GUID_FONTNAME, 0x6650430d,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); DEFINE_GUID(GUID_FONTSIZE, 0x6650430e,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); DEFINE_GUID(GUID_FONTBOLD, 0x6650430f,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); DEFINE_GUID(GUID_FONTITALIC, 0x66504310,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); DEFINE_GUID(GUID_FONTUNDERSCORE, 0x66504311,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); DEFINE_GUID(GUID_FONTSTRIKETHROUGH, 0x66504312,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); DEFINE_GUID(GUID_HANDLE, 0x66504313,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab); typedef struct tagOCPFIPARAMS { ULONG cbStructSize; HWND hWndOwner; int x; int y; LPCOLESTR lpszCaption; ULONG cObjects; LPUNKNOWN *lplpUnk; ULONG cPages; CLSID *lpPages; LCID lcid; DISPID dispidInitialProperty; } OCPFIPARAMS, *LPOCPFIPARAMS; /* * FONTDESC is used as an OLE encapsulation of the GDI fonts */ typedef struct tagFONTDESC { UINT cbSizeofstruct; LPOLESTR lpstrName; CY cySize; SHORT sWeight; SHORT sCharset; BOOL fItalic; BOOL fUnderline; BOOL fStrikethrough; } FONTDESC, *LPFONTDESC; #define FONTSIZE(n) { n##0000, 0 } #define PICTYPE_UNINITIALIZED (-1) #define PICTYPE_NONE 0 #define PICTYPE_BITMAP 1 #define PICTYPE_METAFILE 2 #define PICTYPE_ICON 3 #define PICTYPE_ENHMETAFILE 4 typedef struct tagPICTDESC { UINT cbSizeofstruct; UINT picType; union { struct { HBITMAP hbitmap; HPALETTE hpal; } bmp; struct { HMETAFILE hmeta; int xExt; int yExt; } wmf; struct { HICON hicon; } icon; struct { HENHMETAFILE hemf; } emf; } DUMMYUNIONNAME; } PICTDESC, *LPPICTDESC; typedef LONG OLE_XPOS_PIXELS; typedef LONG OLE_YPOS_PIXELS; typedef LONG OLE_XSIZE_PIXELS; typedef LONG OLE_YSIZE_PIXELS; typedef float OLE_XPOS_CONTAINER; typedef float OLE_YPOS_CONTAINER; typedef float OLE_XSIZE_CONTAINER; typedef float OLE_YSIZE_CONTAINER; typedef enum { triUnchecked = 0, triChecked = 1, triGray = 2 } OLE_TRISTATE; typedef VARIANT_BOOL OLE_OPTEXCLUSIVE; typedef VARIANT_BOOL OLE_CANCELBOOL; typedef VARIANT_BOOL OLE_ENABLEDEFAULTBOOL; /* flags for OleLoadPictureEx and OleLoadPictureFileEx */ #define LP_DEFAULT 0x0 #define LP_MONOCHROME 0x1 #define LP_VGACOLOR 0x2 #define LP_COLOR 0x4 HRESULT WINAPI DllRegisterServer(void); HRESULT WINAPI DllUnregisterServer(void); HCURSOR WINAPI OleIconToCursor( HINSTANCE hinstExe, HICON hicon); HRESULT WINAPI OleCreatePropertyFrameIndirect( LPOCPFIPARAMS lpParams); HRESULT WINAPI OleCreatePropertyFrame( HWND hwndOwner, UINT x, UINT y, LPCOLESTR lpszCaption, ULONG cObjects, LPUNKNOWN* ppUnk, ULONG cPages, LPCLSID pPageClsID, LCID lcid, DWORD dwReserved, LPVOID pvReserved ); HRESULT WINAPI OleLoadPicture( LPSTREAM lpstream, LONG lSize, BOOL fRunmode, REFIID riid, LPVOID *lplpvObj ); HRESULT WINAPI OleLoadPictureEx( LPSTREAM lpstream, LONG lSize, BOOL fRunMode, REFIID riid, DWORD xSizeDesired, DWORD ySizeDesired, DWORD dwFlags, LPVOID *lplpvObj ); HRESULT WINAPI OleLoadPictureFile( VARIANT varFilename, IDispatch **ppdispPicture ); HRESULT WINAPI OleLoadPictureFileEx( VARIANT varFilename, DWORD xSizeDesired, DWORD ySizeDesired, DWORD dwFlags, IDispatch **ppdispPicture ); HRESULT WINAPI OleSavePictureFile( IDispatch *pdispPicture, BSTR bstrFilename ); HRESULT WINAPI OleLoadPicturePath( LPOLESTR szURLorPath, LPUNKNOWN punkCaller, DWORD dwReserved, OLE_COLOR clrReserved, REFIID riid, LPVOID *ppvRet ); HRESULT WINAPI OleCreatePictureIndirect(LPPICTDESC lpPictDesc, REFIID riid, BOOL fOwn, LPVOID * lplpvObj ); HRESULT WINAPI OleCreateFontIndirect(LPFONTDESC lpFontDesc, REFIID riid, LPVOID* lplpvObj); HRESULT WINAPI OleTranslateColor( OLE_COLOR clr, HPALETTE hpal, COLORREF* lpcolorref); /* Reflected Window Message IDs */ #define OCM__BASE (WM_USER+0x1c00) #define OCM_COMMAND (OCM__BASE + WM_COMMAND) #define OCM_CTLCOLORBTN (OCM__BASE + WM_CTLCOLORBTN) #define OCM_CTLCOLOREDIT (OCM__BASE + WM_CTLCOLOREDIT) #define OCM_CTLCOLORDLG (OCM__BASE + WM_CTLCOLORDLG) #define OCM_CTLCOLORLISTBOX (OCM__BASE + WM_CTLCOLORLISTBOX) #define OCM_CTLCOLORMSGBOX (OCM__BASE + WM_CTLCOLORMSGBOX) #define OCM_CTLCOLORSCROLLBAR (OCM__BASE + WM_CTLCOLORSCROLLBAR) #define OCM_CTLCOLORSTATIC (OCM__BASE + WM_CTLCOLORSTATIC) #define OCM_DRAWITEM (OCM__BASE + WM_DRAWITEM) #define OCM_MEASUREITEM (OCM__BASE + WM_MEASUREITEM) #define OCM_DELETEITEM (OCM__BASE + WM_DELETEITEM) #define OCM_VKEYTOITEM (OCM__BASE + WM_VKEYTOITEM) #define OCM_CHARTOITEM (OCM__BASE + WM_CHARTOITEM) #define OCM_COMPAREITEM (OCM__BASE + WM_COMPAREITEM) #define OCM_HSCROLL (OCM__BASE + WM_HSCROLL) #define OCM_VSCROLL (OCM__BASE + WM_VSCROLL) #define OCM_PARENTNOTIFY (OCM__BASE + WM_PARENTNOTIFY) #define OCM_NOTIFY (OCM__BASE + WM_NOTIFY) #define CONNECT_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0200) #define CONNECT_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x020F) #define CONNECT_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200) #define CONNECT_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F) #define CONNECT_E_NOCONNECTION (CONNECT_E_FIRST+0) #define CONNECT_E_ADVISELIMIT (CONNECT_E_FIRST+1) #define CONNECT_E_CANNOTCONNECT (CONNECT_E_FIRST+2) #define CONNECT_E_OVERRIDDEN (CONNECT_E_FIRST+3) #define SELFREG_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0200) #define SELFREG_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x020F) #define SELFREG_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200) #define SELFREG_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F) #define SELFREG_E_TYPELIB (SELFREG_E_FIRST+0) #define SELFREG_E_CLASS (SELFREG_E_FIRST+1) #ifndef FACILITY_CONTROL #define FACILITY_CONTROL 0xa #endif #define STD_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n) #define CTL_E_ILLEGALFUNCTIONCALL STD_CTL_SCODE(5) #define CTL_E_OVERFLOW STD_CTL_SCODE(6) #define CTL_E_OUTOFMEMORY STD_CTL_SCODE(7) #define CTL_E_DIVISIONBYZERO STD_CTL_SCODE(11) #define CTL_E_OUTOFSTRINGSPACE STD_CTL_SCODE(14) #define CTL_E_OUTOFSTACKSPACE STD_CTL_SCODE(28) #define CTL_E_BADFILENAMEORNUMBER STD_CTL_SCODE(52) #define CTL_E_FILENOTFOUND STD_CTL_SCODE(53) #define CTL_E_BADFILEMODE STD_CTL_SCODE(54) #define CTL_E_FILEALREADYOPEN STD_CTL_SCODE(55) #define CTL_E_DEVICEIOERROR STD_CTL_SCODE(57) #define CTL_E_FILEALREADYEXISTS STD_CTL_SCODE(58) #define CTL_E_BADRECORDLENGTH STD_CTL_SCODE(59) #define CTL_E_DISKFULL STD_CTL_SCODE(61) #define CTL_E_BADRECORDNUMBER STD_CTL_SCODE(63) #define CTL_E_BADFILENAME STD_CTL_SCODE(64) #define CTL_E_TOOMANYFILES STD_CTL_SCODE(67) #define CTL_E_DEVICEUNAVAILABLE STD_CTL_SCODE(68) #define CTL_E_PERMISSIONDENIED STD_CTL_SCODE(70) #define CTL_E_DISKNOTREADY STD_CTL_SCODE(71) #define CTL_E_PATHFILEACCESSERROR STD_CTL_SCODE(75) #define CTL_E_PATHNOTFOUND STD_CTL_SCODE(76) #define CTL_E_INVALIDPATTERNSTRING STD_CTL_SCODE(93) #define CTL_E_INVALIDUSEOFNULL STD_CTL_SCODE(94) #define CTL_E_INVALIDFILEFORMAT STD_CTL_SCODE(321) #define CTL_E_INVALIDPROPERTYVALUE STD_CTL_SCODE(380) #define CTL_E_INVALIDPROPERTYARRAYINDEX STD_CTL_SCODE(381) #define CTL_E_SETNOTSUPPORTEDATRUNTIME STD_CTL_SCODE(382) #define CTL_E_SETNOTSUPPORTED STD_CTL_SCODE(383) #define CTL_E_NEEDPROPERTYARRAYINDEX STD_CTL_SCODE(385) #define CTL_E_SETNOTPERMITTED STD_CTL_SCODE(387) #define CTL_E_GETNOTSUPPORTEDATRUNTIME STD_CTL_SCODE(393) #define CTL_E_GETNOTSUPPORTED STD_CTL_SCODE(394) #define CTL_E_PROPERTYNOTFOUND STD_CTL_SCODE(422) #define CTL_E_INVALIDCLIPBOARDFORMAT STD_CTL_SCODE(460) #define CTL_E_INVALIDPICTURE STD_CTL_SCODE(481) #define CTL_E_PRINTERERROR STD_CTL_SCODE(482) #define CTL_E_CANTSAVEFILETOTEMP STD_CTL_SCODE(735) #define CTL_E_SEARCHTEXTNOTFOUND STD_CTL_SCODE(744) #define CTL_E_REPLACEMENTSTOOLONG STD_CTL_SCODE(746) #define CUSTOM_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n) #define CTL_E_CUSTOM_FIRST CUSTOM_CTL_SCODE(600) #define VT_COLOR VT_I4 #define VT_XPOS_PIXELS VT_I4 #define VT_YPOS_PIXELS VT_I4 #define VT_XSIZE_PIXELS VT_I4 #define VT_YSIZE_PIXELS VT_I4 #define VT_XPOS_HIMETRIC VT_I4 #define VT_YPOS_HIMETRIC VT_I4 #define VT_XSIZE_HIMETRIC VT_I4 #define VT_YSIZE_HIMETRIC VT_I4 #define VT_TRISTATE VT_I2 #define VT_OPTEXCLUSIVE VT_BOOL #define VT_FONT VT_DISPATCH #define VT_PICTURE VT_DISPATCH #define VT_STREAMED_PROPSET 73 #define VT_STORED_PROPSET 74 #define VT_BLOB_PROPSET 75 #define VT_VERBOSE_ENUM 76 #ifndef OLEIVERB_PROPERTIES #define OLEIVERB_PROPERTIES (__MSABI_LONG(-7)) #endif #define PERPROP_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0200) #define PERPROP_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x020F) #define PERPROP_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200) #define PERPROP_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F) #define PERPROP_E_NOPAGEAVAILABLE (PERPROP_E_FIRST+0) #ifdef __cplusplus } #endif #endif /* !__midl && !__WIDL__ */ /* standard dispatch ID's */ #define DISPID_AUTOSIZE (-500) #define DISPID_BACKCOLOR (-501) #define DISPID_BACKSTYLE (-502) #define DISPID_BORDERCOLOR (-503) #define DISPID_BORDERSTYLE (-504) #define DISPID_BORDERWIDTH (-505) #define DISPID_DRAWMODE (-507) #define DISPID_DRAWSTYLE (-508) #define DISPID_DRAWWIDTH (-509) #define DISPID_FILLCOLOR (-510) #define DISPID_FILLSTYLE (-511) #define DISPID_FONT (-512) #define DISPID_FORECOLOR (-513) #define DISPID_ENABLED (-514) #define DISPID_HWND (-515) #define DISPID_TABSTOP (-516) #define DISPID_TEXT (-517) #define DISPID_CAPTION (-518) #define DISPID_BORDERVISIBLE (-519) #define DISPID_APPEARANCE (-520) #define DISPID_MOUSEPOINTER (-521) #define DISPID_MOUSEICON (-522) #define DISPID_PICTURE (-523) #define DISPID_VALID (-524) #define DISPID_READYSTATE (-525) #define DISPID_REFRESH (-550) #define DISPID_DOCLICK (-551) #define DISPID_ABOUTBOX (-552) #define DISPID_ADDITEM (-553) #define DISPID_CLEAR (-554) #define DISPID_REMOVEITEM (-555) #define DISPID_CLICK (-600) #define DISPID_DBLCLICK (-601) #define DISPID_KEYDOWN (-602) #define DISPID_KEYPRESS (-603) #define DISPID_KEYUP (-604) #define DISPID_MOUSEDOWN (-605) #define DISPID_MOUSEMOVE (-606) #define DISPID_MOUSEUP (-607) #define DISPID_ERROREVENT (-608) #define DISPID_READYSTATECHANGE (-609) #define DISPID_CLICK_VALUE (-610) #define DISPID_RIGHTTOLEFT (-611) #define DISPID_TOPTOBOTTOM (-612) #define DISPID_THIS (-613) #define DISPID_AMBIENT_BACKCOLOR (-701) #define DISPID_AMBIENT_DISPLAYNAME (-702) #define DISPID_AMBIENT_FONT (-703) #define DISPID_AMBIENT_FORECOLOR (-704) #define DISPID_AMBIENT_LOCALEID (-705) #define DISPID_AMBIENT_MESSAGEREFLECT (-706) #define DISPID_AMBIENT_SCALEUNITS (-707) #define DISPID_AMBIENT_TEXTALIGN (-708) #define DISPID_AMBIENT_USERMODE (-709) #define DISPID_AMBIENT_UIDEAD (-710) #define DISPID_AMBIENT_SHOWGRABHANDLES (-711) #define DISPID_AMBIENT_SHOWHATCHING (-712) #define DISPID_AMBIENT_DISPLAYASDEFAULT (-713) #define DISPID_AMBIENT_SUPPORTSMNEMONICS (-714) #define DISPID_AMBIENT_AUTOCLIP (-715) #define DISPID_AMBIENT_APPEARANCE (-716) #define DISPID_AMBIENT_CODEPAGE (-725) #define DISPID_AMBIENT_PALETTE (-726) #define DISPID_AMBIENT_CHARSET (-727) #define DISPID_AMBIENT_TRANSFERPRIORITY (-728) #define DISPID_AMBIENT_RIGHTTOLEFT (-732) #define DISPID_AMBIENT_TOPTOBOTTOM (-733) #define DISPID_Name (-800) #define DISPID_Delete (-801) #define DISPID_Object (-802) #define DISPID_Parent (-803) #define DISPID_FONT_NAME 0 #define DISPID_FONT_SIZE 2 #define DISPID_FONT_BOLD 3 #define DISPID_FONT_ITALIC 4 #define DISPID_FONT_UNDER 5 #define DISPID_FONT_STRIKE 6 #define DISPID_FONT_WEIGHT 7 #define DISPID_FONT_CHARSET 8 #define DISPID_FONT_CHANGED 9 /* IPicture */ #define DISPID_PICT_HANDLE 0 #define DISPID_PICT_HPAL 2 #define DISPID_PICT_TYPE 3 #define DISPID_PICT_WIDTH 4 #define DISPID_PICT_HEIGHT 5 #define DISPID_PICT_RENDER 6 #endif /* __WINE_OLECTL_H */ ================================================ FILE: wine/windows/oledb.idl ================================================ /* * Copyright (C) 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ cpp_quote("#ifdef _WIN64") cpp_quote("#include ") cpp_quote("#else") cpp_quote("#include ") cpp_quote("#endif") cpp_quote("") import "wtypes.idl"; import "oaidl.idl"; import "ocidl.idl"; import "propidl.idl"; import "urlmon.idl"; typedef ULONG_PTR DBBYTEOFFSET; typedef LONG_PTR DBROWOFFSET; typedef LONG_PTR DBROWCOUNT; typedef ULONG_PTR DBCOUNTITEM; typedef ULONG_PTR DBLENGTH; typedef ULONG_PTR DBORDINAL; typedef ULONG_PTR DBBKMARK; typedef DWORD_PTR DB_DWRESERVE; typedef ULONG_PTR DBREFCOUNT; typedef ULONG_PTR DB_UPARAMS; typedef LONG_PTR DB_LPARAMS; typedef DWORD_PTR DBHASHVALUE; #include "dbs.idl" #include "access.idl" #include "rstbas.idl" #include "rstinf.idl" #include "rstloc.idl" #include "chprst.idl" #include "cmdbas.idl" #include "cmdtxt.idl" #include "colinf.idl" #include "dbccmd.idl" #include "dbcses.idl" #include "srcrst.idl" #include "dbprop.idl" #include "dbinit.idl" #include "dbdsad.idl" #include "asynot.idl" #include "asysta.idl" #include "sesprp.idl" #include "rstnot.idl" #include "opnrst.idl" #include "row.idl" #include "rowchg.idl" #include "rowpos.idl" #include "rowpsc.idl" #include "binres.idl" #include "crtrow.idl" #include "errrec.idl" cpp_quote("#include ") cpp_quote("#include ") cpp_quote("") ================================================ FILE: wine/windows/oledberr.h ================================================ /* OLE DB error codes. * * Copyright 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLEDBERR_H #define __WINE_OLEDBERR_H #define DB_E_BADBINDINFO 0x80040e08 #define DB_E_ERRORSINCOMMAND 0x80040e14 #define DB_E_CANTCANCEL 0x80040e15 #define DB_E_DIALECTNOTSUPPORTED 0x80040e16 #define DB_E_DUPLICATEDATASOURCE 0x80040e17 #define DB_E_CANNOTRESTART 0x80040e18 #define DB_E_NOTFOUND 0x80040e19 #define DB_E_UNSUPPORTEDCONVERSION 0x80040e1d #define DB_E_ERRORSOCCURRED 0x80040e21 #define DB_E_BADSTORAGEFLAG 0x80040e26 #define DB_E_BADCOMPAREOP 0x80040e27 #define DB_E_BADSTATUSVALUE 0x80040e28 #define DB_E_CANTSCROLLBACKWARDS 0x80040e29 #define DB_E_BADREGIONHANDLE 0x80040e2a #define DB_E_NONCONTIGUOUSRANGE 0x80040e2b #define DB_E_INVALIDTRANSITION 0x80040e2c #define DB_E_NOTASUBREGION 0x80040e2d #define DB_E_MULTIPLESTATEMENTS 0x80040e2e #define DB_E_INTEGRITYVIOLATION 0x80040e2f #define DB_E_BADTYPENAME 0x80040e30 #define DB_E_ABORTLIMITREACHED 0x80040e31 #define DB_E_ROWSETINCOMMAND 0x80040e32 #define DB_E_CANTTRANSLATE 0x80040e33 #define DB_E_DUPLICATEINDEXID 0x80040e34 #define DB_E_NOINDEX 0x80040e35 #define DB_E_INDEXINUSE 0x80040e36 #define DB_E_NOTABLE 0x80040e37 #define DB_E_CONCURRENCYVIOLATION 0x80040e38 #define DB_E_TABLEINUSE 0x80040e40 #define DB_E_NOLOCALE 0x80040e41 #define DB_E_BADRECORDNUM 0x80040e42 #define DB_E_BOOKMARKSKIPPED 0x80040e43 #define DB_E_BADPROPERTYVALUE 0x80040e44 #define DB_E_INVALID 0x80040e45 #define DB_E_BADACCESSORFLAGS 0x80040e46 #define DB_E_BADSTORAGEFLAGS 0x80040e47 #define DB_E_BYREFACCESSORNOTSUPPORTED 0x80040e48 #define DB_E_NULLACCESSORNOTSUPPORTED 0x80040e49 #define DB_E_NOTPREPARED 0x80040e4a #define DB_E_BADACCESSORTYPE 0x80040e4b #define DB_E_WRITEONLYACCESSOR 0x80040e4c #define DB_SEC_E_AUTH_FAILED 0x80040e4d #define DB_E_CANCELED 0x80040e4e #define DB_E_ALREADYINITIALIZED 0x80040e52 #define DB_E_DATAOVERFLOW 0x80040e57 #define DB_E_MISMATCHEDPROVIDER 0x80040e75 #define DB_S_ERRORSOCCURRED 0x00040eda #endif /* __WINE_OLEDBERR_H */ ================================================ FILE: wine/windows/oledlg.h ================================================ /* * Declarations for OLEDLG * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_OLEDLG_H #define __WINE_OLEDLG_H #include #include #include #include #ifndef __WINESRC__ # include # include #endif #include #include #ifdef __cplusplus extern "C" { #endif typedef struct IOleUILinkContainerA *POLEUILINKCONTAINERA, *LPOLEUILINKCONTAINERA; typedef struct IOleUILinkContainerW *POLEUILINKCONTAINERW, *LPOLEUILINKCONTAINERW; typedef struct IOleUILinkInfoA *POLEUILINKINFOA, *LPOLEUILINKINFOA; typedef struct IOleUILinkInfoW *POLEUILINKINFOW, *LPOLEUILINKINFOW; typedef struct IOleUIObjInfoA *POLEUIOBJINFOA, *LPOLEUIOBJINFOA; typedef struct IOleUIObjInfoW *POLEUIOBJINFOW, *LPOLEUIOBJINFOW; #define IDC_OLEUIHELP 99 #define OLEUI_ERR_STANDARDMAX 116 #define OLEUI_BZERR_HTASKINVALID (OLEUI_ERR_STANDARDMAX+0) #define OLEUI_BZ_SWITCHTOSELECTED (OLEUI_ERR_STANDARDMAX+1) #define OLEUI_BZ_RETRYSELECTED (OLEUI_ERR_STANDARDMAX+2) #define OLEUI_BZ_CALLUNBLOCKED (OLEUI_ERR_STANDARDMAX+3) #define OLEUI_FALSE 0 #define OLEUI_SUCCESS 1 /* Same as OLEUI_OK */ #define OLEUI_OK 1 /* OK button pressed */ #define OLEUI_CANCEL 2 /* Cancel button pressed */ #define OLEUI_ERR_STANDARDMIN 100 #define OLEUI_ERR_OLEMEMALLOC 100 #define OLEUI_ERR_STRUCTURENULL 101 #define OLEUI_ERR_STRUCTUREINVALID 102 #define OLEUI_ERR_CBSTRUCTINCORRECT 103 #define OLEUI_ERR_HWNDOWNERINVALID 104 #define OLEUI_ERR_LPSZCAPTIONINVALID 105 #define OLEUI_ERR_LPFNHOOKINVALID 106 #define OLEUI_ERR_HINSTANCEINVALID 107 #define OLEUI_ERR_LPSZTEMPLATEINVALID 108 #define OLEUI_ERR_HRESOURCEINVALID 109 #define OLEUI_ERR_FINDTEMPLATEFAILURE 110 #define OLEUI_ERR_LOADTEMPLATEFAILURE 111 #define OLEUI_ERR_DIALOGFAILURE 112 #define OLEUI_ERR_LOCALMEMALLOC 113 #define OLEUI_ERR_GLOBALMEMALLOC 114 #define OLEUI_ERR_LOADSTRING 115 #define OLEUI_ERR_STANDARDMAX 116 typedef UINT (CALLBACK *LPFNOLEUIHOOK)(HWND, UINT, WPARAM, LPARAM); /***************************************************************************** * Registered Message Names */ #define SZOLEUI_MSG_HELPA "OLEUI_MSG_HELP" #define SZOLEUI_MSG_ENDDIALOGA "OLEUI_MSG_ENDDIALOG" #define SZOLEUI_MSG_BROWSEA "OLEUI_MSG_BROWSE" #define SZOLEUI_MSG_CHANGEICONA "OLEUI_MSG_CHANGEICON" #define SZOLEUI_MSG_CLOSEBUSYDIALOGA "OLEUI_MSG_CLOSEBUSYDIALOG" #define SZOLEUI_MSG_CONVERTA "OLEUI_MSG_CONVERT" #define SZOLEUI_MSG_CHANGESOURCEA "OLEUI_MSG_CHANGESOURCE" #define SZOLEUI_MSG_ADDCONTROLA "OLEUI_MSG_ADDCONTROL" #define SZOLEUI_MSG_BROWSE_OFNA "OLEUI_MSG_BROWSE_OFN" #if defined(__GNUC__) # define SZOLEUI_MSG_HELPW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 } # define SZOLEUI_MSG_ENDDIALOGW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 } # define SZOLEUI_MSG_BROWSEW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 } # 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 } # 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 } # define SZOLEUI_MSG_CONVERTW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 } # 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 } # 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 } # 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 } #elif defined(_MSC_VER) # define SZOLEUI_MSG_HELPW L"OLEUI_MSG_HELP" # define SZOLEUI_MSG_ENDDIALOGW L"OLEUI_MSG_ENDDIALOG" # define SZOLEUI_MSG_BROWSEW L"OLEUI_MSG_BROWSE" # define SZOLEUI_MSG_CHANGEICONW L"OLEUI_MSG_CHANGEICON" # define SZOLEUI_MSG_CLOSEBUSYDIALOGW L"OLEUI_MSG_CLOSEBUSYDIALOG" # define SZOLEUI_MSG_CONVERTW L"OLEUI_MSG_CONVERT" # define SZOLEUI_MSG_CHANGESOURCEW L"OLEUI_MSG_CHANGESOURCE" # define SZOLEUI_MSG_ADDCONTROLW L"OLEUI_MSG_ADDCONTROL" # define SZOLEUI_MSG_BROWSE_OFNW L"OLEUI_MSG_BROWSE_OFN" #else static const WCHAR SZOLEUI_MSG_HELPW[] = { 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 }; static const WCHAR SZOLEUI_MSG_ENDDIALOGW[] = { 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 }; static const WCHAR SZOLEUI_MSG_BROWSEW[] = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 }; static const WCHAR SZOLEUI_MSG_CHANGEICONW[] = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 }; static 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 }; static const WCHAR SZOLEUI_MSG_CONVERTW[] = { 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 }; static 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 }; static const WCHAR SZOLEUI_MSG_ADDCONTROLW[] = { 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 }; static const WCHAR SZOLEUI_MSG_BROWSE_OFNW[] = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 }; #endif #define SZOLEUI_MSG_HELP WINELIB_NAME_AW(SZOLEUI_MSG_HELP) #define SZOLEUI_MSG_ENDDIALOG WINELIB_NAME_AW(SZOLEUI_MSG_ENDDIALOG) #define SZOLEUI_MSG_BROWSE WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE) #define SZOLEUI_MSG_CHANGEICON WINELIB_NAME_AW(SZOLEUI_MSG_CHANGEICON) #define SZOLEUI_MSG_CLOSEBUSYDIALOG WINELIB_NAME_AW(SZOLEUI_MSG_CLOSEBUSYDIALOG) #define SZOLEUI_MSG_CONVERT WINELIB_NAME_AW(SZOLEUI_MSG_CONVERT) #define SZOLEUI_MSG_CHANGESOURCE WINELIB_NAME_AW(SZOLEUI_MSG_CHANGESOURCE) #define SZOLEUI_MSG_ADDCONTROL WINELIB_NAME_AW(SZOLEUI_MSG_ADDCONTROL) #define SZOLEUI_MSG_BROWSE_OFN WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE_OFN) /***************************************************************************** * INSERT OBJECT DIALOG */ typedef struct tagOLEUIINSERTOBJECTA { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCSTR lpszTemplate; HRSRC hResource; CLSID clsid; LPSTR lpszFile; UINT cchFile; UINT cClsidExclude; LPCLSID lpClsidExclude; IID iid; DWORD oleRender; LPFORMATETC lpFormatEtc; LPOLECLIENTSITE lpIOleClientSite; LPSTORAGE lpIStorage; LPVOID *ppvObj; SCODE sc; HGLOBAL hMetaPict; } OLEUIINSERTOBJECTA, *POLEUIINSERTOBJECTA, *LPOLEUIINSERTOBJECTA; typedef struct tagOLEUIINSERTOBJECTW { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCWSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCWSTR lpszTemplate; HRSRC hResource; CLSID clsid; LPWSTR lpszFile; UINT cchFile; UINT cClsidExclude; LPCLSID lpClsidExclude; IID iid; DWORD oleRender; LPFORMATETC lpFormatEtc; LPOLECLIENTSITE lpIOleClientSite; LPSTORAGE lpIStorage; LPVOID *ppvObj; SCODE sc; HGLOBAL hMetaPict; } OLEUIINSERTOBJECTW, *POLEUIINSERTOBJECTW, *LPOLEUIINSERTOBJECTW; DECL_WINELIB_TYPE_AW(OLEUIINSERTOBJECT) DECL_WINELIB_TYPE_AW(POLEUIINSERTOBJECT) DECL_WINELIB_TYPE_AW(LPOLEUIINSERTOBJECT) #define IOF_SHOWHELP __MSABI_LONG(0x00000001) #define IOF_SELECTCREATENEW __MSABI_LONG(0x00000002) #define IOF_SELECTCREATEFROMFILE __MSABI_LONG(0x00000004) #define IOF_CHECKLINK __MSABI_LONG(0x00000008) #define IOF_CHECKDISPLAYASICON __MSABI_LONG(0x00000010) #define IOF_CREATENEWOBJECT __MSABI_LONG(0x00000020) #define IOF_CREATEFILEOBJECT __MSABI_LONG(0x00000040) #define IOF_CREATELINKOBJECT __MSABI_LONG(0x00000080) #define IOF_DISABLELINK __MSABI_LONG(0x00000100) #define IOF_VERIFYSERVERSEXIST __MSABI_LONG(0x00000200) #define IOF_DISABLEDISPLAYASICON __MSABI_LONG(0x00000400) #define IOF_HIDECHANGEICON __MSABI_LONG(0x00000800) #define IOF_SHOWINSERTCONTROL __MSABI_LONG(0x00001000) #define IOF_SELECTCREATECONTROL __MSABI_LONG(0x00002000) /***************************************************************************** * CONVERT DIALOG */ typedef struct tagOLEUICONVERTA { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCSTR lpszTemplate; HRSRC hResource; CLSID clsid; CLSID clsidConvertDefault; CLSID clsidActivateDefault; CLSID clsidNew; DWORD dvAspect; WORD wFormat; BOOL fIsLinkedObject; HGLOBAL hMetaPict; LPSTR lpszUserType; BOOL fObjectsIconChanged; LPSTR lpszDefLabel; UINT cClsidExclude; LPCLSID lpClsidExclude; } OLEUICONVERTA, *POLEUICONVERTA, *LPOLEUICONVERTA; typedef struct tagOLEUICONVERTW { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCWSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCWSTR lpszTemplate; HRSRC hResource; CLSID clsid; CLSID clsidConvertDefault; CLSID clsidActivateDefault; CLSID clsidNew; DWORD dvAspect; WORD wFormat; BOOL fIsLinkedObject; HGLOBAL hMetaPict; LPWSTR lpszUserType; BOOL fObjectsIconChanged; LPWSTR lpszDefLabel; UINT cClsidExclude; LPCLSID lpClsidExclude; } OLEUICONVERTW, *POLEUICONVERTW, *LPOLEUICONVERTW; DECL_WINELIB_TYPE_AW(OLEUICONVERT) DECL_WINELIB_TYPE_AW(POLEUICONVERT) DECL_WINELIB_TYPE_AW(LPOLEUICONVERT) #define CF_SHOWHELPBUTTON __MSABI_LONG(0x00000001) #define CF_SETCONVERTDEFAULT __MSABI_LONG(0x00000002) #define CF_SETACTIVATEDEFAULT __MSABI_LONG(0x00000004) #define CF_SELECTCONVERTTO __MSABI_LONG(0x00000008) #define CF_SELECTACTIVATEAS __MSABI_LONG(0x00000010) #define CF_DISABLEDISPLAYASICON __MSABI_LONG(0x00000020) #define CF_DISABLEACTIVATEAS __MSABI_LONG(0x00000040) #define CF_HIDECHANGEICON __MSABI_LONG(0x00000080) #define CF_CONVERTONLY __MSABI_LONG(0x00000100) /***************************************************************************** * CHANGE ICON DIALOG */ typedef struct tagOLEUICHANGEICONA { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCSTR lpszTemplate; HRSRC hResource; HGLOBAL hMetaPict; CLSID clsid; CHAR szIconExe[MAX_PATH]; INT cchIconExe; } OLEUICHANGEICONA, *POLEUICHANGEICONA, *LPOLEUICHANGEICONA; typedef struct tagOLEUICHANGEICONW { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCWSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCWSTR lpszTemplate; HRSRC hResource; HGLOBAL hMetaPict; CLSID clsid; WCHAR szIconExe[MAX_PATH]; INT cchIconExe; } OLEUICHANGEICONW, *POLEUICHANGEICONW, *LPOLEUICHANGEICONW; DECL_WINELIB_TYPE_AW(OLEUICHANGEICON) DECL_WINELIB_TYPE_AW(POLEUICHANGEICON) DECL_WINELIB_TYPE_AW(LPOLEUICHANGEICON) #define CIF_SHOWHELP __MSABI_LONG(0x00000001) #define CIF_SELECTCURRENT __MSABI_LONG(0x00000002) #define CIF_SELECTDEFAULT __MSABI_LONG(0x00000004) #define CIF_SELECTFROMFILE __MSABI_LONG(0x00000008) #define CIF_USEICONEXE __MSABI_LONG(0x00000010) /***************************************************************************** * PASTE SPECIAL DIALOG */ typedef enum tagOLEUIPASTEFLAG { OLEUIPASTE_ENABLEICON = 2048, OLEUIPASTE_PASTEONLY = 0, OLEUIPASTE_PASTE = 512, OLEUIPASTE_LINKANYTYPE = 1024, OLEUIPASTE_LINKTYPE1 = 1, OLEUIPASTE_LINKTYPE2 = 2, OLEUIPASTE_LINKTYPE3 = 4, OLEUIPASTE_LINKTYPE4 = 8, OLEUIPASTE_LINKTYPE5 = 16, OLEUIPASTE_LINKTYPE6 = 32, OLEUIPASTE_LINKTYPE7 = 64, OLEUIPASTE_LINKTYPE8 = 128 } OLEUIPASTEFLAG; typedef struct tagOLEUIPASTEENTRYA { FORMATETC fmtetc; LPCSTR lpstrFormatName; LPCSTR lpstrResultText; DWORD dwFlags; DWORD dwScratchSpace; } OLEUIPASTEENTRYA, *POLEUIPASTEENTRYA, *LPOLEUIPASTEENTRYA; typedef struct tagOLEUIPASTEENTRYW { FORMATETC fmtetc; LPCWSTR lpstrFormatName; LPCWSTR lpstrResultText; DWORD dwFlags; DWORD dwScratchSpace; } OLEUIPASTEENTRYW, *POLEUIPASTEENTRYW, *LPOLEUIPASTEENTRYW; DECL_WINELIB_TYPE_AW(OLEUIPASTEENTRY) DECL_WINELIB_TYPE_AW(POLEUIPASTEENTRY) DECL_WINELIB_TYPE_AW(LPOLEUIPASTEENTRY) typedef struct tagOLEUIPASTESPECIALA { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCSTR lpszTemplate; HRSRC hResource; LPDATAOBJECT lpSrcDataObj; LPOLEUIPASTEENTRYA arrPasteEntries; INT cPasteEntries; UINT* arrLinkTypes; INT cLinkTypes; UINT cClsidExclude; LPCLSID lpClsidExclude; INT nSelectedIndex; BOOL fLink; HGLOBAL hMetaPict; SIZEL sizel; } OLEUIPASTESPECIALA, *POLEUIPASTESPECIALA, *LPOLEUIPASTESPECIALA; typedef struct tagOLEUIPASTESPECIALW { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCWSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCWSTR lpszTemplate; HRSRC hResource; LPDATAOBJECT lpSrcDataObj; LPOLEUIPASTEENTRYW arrPasteEntries; INT cPasteEntries; UINT* arrLinkTypes; INT cLinkTypes; UINT cClsidExclude; LPCLSID lpClsidExclude; INT nSelectedIndex; BOOL fLink; HGLOBAL hMetaPict; SIZEL sizel; } OLEUIPASTESPECIALW, *POLEUIPASTESPECIALW, *LPOLEUIPASTESPECIALW; DECL_WINELIB_TYPE_AW(OLEUIPASTESPECIAL) DECL_WINELIB_TYPE_AW(POLEUIPASTESPECIAL) DECL_WINELIB_TYPE_AW(LPOLEUIPASTESPECIAL) #define PS_MAXLINKTYPES 8 #define PSF_SHOWHELP __MSABI_LONG(0x00000001) #define PSF_SELECTPASTE __MSABI_LONG(0x00000002) #define PSF_SELECTPASTELINK __MSABI_LONG(0x00000004) #define PSF_CHECKDISPLAYASICON __MSABI_LONG(0x00000008) #define PSF_DISABLEDISPLAYASICON __MSABI_LONG(0x00000010) #define PSF_HIDECHANGEICON __MSABI_LONG(0x00000020) #define PSF_STAYONCLIPBOARDCHANGE __MSABI_LONG(0x00000040) #define PSF_NOREFRESHDATAOBJECT __MSABI_LONG(0x00000080) #define OLEUI_IOERR_SRCDATAOBJECTINVALID (OLEUI_ERR_STANDARDMAX+0) #define OLEUI_IOERR_ARRPASTEENTRIESINVALID (OLEUI_ERR_STANDARDMAX+1) #define OLEUI_IOERR_ARRLINKTYPESINVALID (OLEUI_ERR_STANDARDMAX+2) #define OLEUI_PSERR_CLIPBOARDCHANGED (OLEUI_ERR_STANDARDMAX+3) #define OLEUI_PSERR_GETCLIPBOARDFAILED (OLEUI_ERR_STANDARDMAX+4) /* Paste Special dialog resource ids */ #define IDD_PASTESPECIAL 1003 #define IDD_PASTESPECIAL4 1108 /* Paste Special dialog control ids */ #define IDC_PS_PASTE 500 #define IDC_PS_PASTELINK 501 #define IDC_PS_SOURCETEXT 502 #define IDC_PS_PASTELIST 503 #define IDC_PS_PASTELINKLIST 504 #define IDC_PS_DISPLAYLIST 505 #define IDC_PS_DISPLAYASICON 506 #define IDC_PS_ICONDISPLAY 507 #define IDC_PS_CHANGEICON 508 #define IDC_PS_RESULTIMAGE 509 #define IDC_PS_RESULTTEXT 510 /***************************************************************************** * EDIT LINKS DIALOG */ #define ELF_SHOWHELP __MSABI_LONG(0x00000001) #define ELF_DISABLEUPDATENOW __MSABI_LONG(0x00000002) #define ELF_DISABLEOPENSOURCE __MSABI_LONG(0x00000004) #define ELF_DISABLECHANGESOURCE __MSABI_LONG(0x00000008) #define ELF_DISABLECANCELLINK __MSABI_LONG(0x00000010) typedef struct tagOLEUIEDITLINKSW { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCWSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCWSTR lpszTemplate; HRSRC hResource; LPOLEUILINKCONTAINERW lpOleUILinkContainer; } OLEUIEDITLINKSW, *POLEUIEDITLINKSW, *LPOLEUIEDITLINKSW; typedef struct tagOLEUIEDITLINKSA { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCSTR lpszTemplate; HRSRC hResource; LPOLEUILINKCONTAINERA lpOleUILinkContainer; } OLEUIEDITLINKSA, *POLEUIEDITLINKSA, *LPOLEUIEDITLINKSA; DECL_WINELIB_TYPE_AW(OLEUIEDITLINKS) DECL_WINELIB_TYPE_AW(POLEUIEDITLINKS) DECL_WINELIB_TYPE_AW(LPOLEUIEDITLINKS) /*********************************************************************************** * BUSY DIALOG */ typedef struct tagOLEUIBUSYA { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCSTR lpszTemplate; HRSRC hResource; HTASK hTask; HWND* lphWndDialog; } OLEUIBUSYA, *POLEUIBUSYA, *LPOLEUIBUSYA; typedef struct tagOLEUIBUSYW { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCWSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCWSTR lpszTemplate; HRSRC hResource; HTASK hTask; HWND* lphWndDialog; } OLEUIBUSYW, *POLEUIBUSYW, *LPOLEUIBUSYW; DECL_WINELIB_TYPE_AW(OLEUIBUSY) DECL_WINELIB_TYPE_AW(POLEUIBUSY) DECL_WINELIB_TYPE_AW(LPOLEUIBUSY) #define BZ_DISABLECANCELBUTTON __MSABI_LONG(0x00000001) #define BZ_DISABLESWITCHTOBUTTON __MSABI_LONG(0x00000002) #define BZ_DISABLERETRYBUTTON __MSABI_LONG(0x00000004) #define BZ_NOTRESPONDINGDIALOG __MSABI_LONG(0x00000008) /*********************************************************************************** * OBJECT PROPERTIES DIALOG */ struct tagOLEUIOBJECTPROPSW; struct tagOLEUIOBJECTPROPSA; typedef struct tagOLEUIGNRLPROPSA { DWORD cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct tagOLEUIOBJECTPROPSA* lpOP; } OLEUIGNRLPROPSA, *POLEUIGNRLPROPSA, *LPOLEUIGNRLPROPSA; typedef struct tagOLEUIGNRLPROPSW { DWORD cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct tagOLEUIOBJECTPROPSW* lpOP; } OLEUIGNRLPROPSW, *POLEUIGNRLPROPSW, *LPOLEUIGNRLPROPSW; DECL_WINELIB_TYPE_AW(OLEUIGNRLPROPS) DECL_WINELIB_TYPE_AW(POLEUIGNRLPROPS) DECL_WINELIB_TYPE_AW(LPOLEUIGNRLPROPS) typedef struct tagOLEUIVIEWPROPSA { DWORD cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct tagOLEUIOBJECTPROPSA* lpOP; INT nScaleMin; INT nScaleMax; } OLEUIVIEWPROPSA, *POLEUIVIEWPROPSA, *LPOLEUIVIEWPROPSA; typedef struct tagOLEUIVIEWPROPSW { DWORD cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct tagOLEUIOBJECTPROPSW* lpOP; INT nScaleMin; INT nScaleMax; } OLEUIVIEWPROPSW, *POLEUIVIEWPROPSW, *LPOLEUIVIEWPROPSW; DECL_WINELIB_TYPE_AW(OLEUIVIEWPROPS) DECL_WINELIB_TYPE_AW(POLEUIVIEWPROPS) DECL_WINELIB_TYPE_AW(LPOLEUIVIEWPROPS) #define VPF_SELECTRELATIVE __MSABI_LONG(0x00000001) #define VPF_DISABLERELATIVE __MSABI_LONG(0x00000002) #define VPF_DISABLESCALE __MSABI_LONG(0x00000004) typedef struct tagOLEUILINKPROPSA { DWORD cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct tagOLEUIOBJECTPROPSA* lpOP; } OLEUILINKPROPSA, *POLEUILINKPROPSA, *LPOLEUILINKPROPSA; typedef struct tagOLEUILINKPROPSW { DWORD cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct tagOLEUIOBJECTPROPSW* lpOP; } OLEUILINKPROPSW, *POLEUILINKPROPSW, *LPOLEUILINKPROPSW; DECL_WINELIB_TYPE_AW(OLEUILINKPROPS) DECL_WINELIB_TYPE_AW(POLEUILINKPROPS) DECL_WINELIB_TYPE_AW(LPOLEUILINKPROPS) typedef struct tagOLEUIOBJECTPROPSA { DWORD cbStruct; DWORD dwFlags; LPPROPSHEETHEADERA lpPS; DWORD dwObject; LPOLEUIOBJINFOA lpObjInfo; DWORD dwLink; LPOLEUILINKINFOA lpLinkInfo; LPOLEUIGNRLPROPSA lpGP; LPOLEUIVIEWPROPSA lpVP; LPOLEUILINKPROPSA lpLP; } OLEUIOBJECTPROPSA, *POLEUIOBJECTPROPSA, *LPOLEUIOBJECTPROPSA; typedef struct tagOLEUIOBJECTPROPSW { DWORD cbStruct; DWORD dwFlags; LPPROPSHEETHEADERW lpPS; DWORD dwObject; LPOLEUIOBJINFOW lpObjInfo; DWORD dwLink; LPOLEUILINKINFOW lpLinkInfo; LPOLEUIGNRLPROPSW lpGP; LPOLEUIVIEWPROPSW lpVP; LPOLEUILINKPROPSW lpLP; } OLEUIOBJECTPROPSW, *POLEUIOBJECTPROPSW, *LPOLEUIOBJECTPROPSW; DECL_WINELIB_TYPE_AW(OLEUIOBJECTPROPS) DECL_WINELIB_TYPE_AW(POLEUIOBJECTPROPS) DECL_WINELIB_TYPE_AW(LPOLEUIOBJECTPROPS) #define OPF_OBJECTISLINK __MSABI_LONG(0x00000001) #define OPF_NOFILLDEFAULT __MSABI_LONG(0x00000002) #define OPF_SHOWHELP __MSABI_LONG(0x00000004) #define OPF_DISABLECONVERT __MSABI_LONG(0x00000008) /************************************************************************************ * CHANGE SOURCE DIALOG */ typedef struct tagOLEUICHANGESOURCEW { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCWSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCWSTR lpszTemplate; HRSRC hResource; OPENFILENAMEW*lpOFN; DWORD dwReserved1[4]; LPOLEUILINKCONTAINERW lpOleUILinkContainer; DWORD dwLink; LPWSTR lpszDisplayName; ULONG nFileLength; LPWSTR lpszFrom; LPWSTR lpszTo; } OLEUICHANGESOURCEW, *POLEUICHANGESOURCEW, *LPOLEUICHANGESOURCEW; typedef struct tagOLEUICHANGESOURCEA { DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCSTR lpszTemplate; HRSRC hResource; OPENFILENAMEA* lpOFN; DWORD dwReserved1[4]; LPOLEUILINKCONTAINERA lpOleUILinkContainer; DWORD dwLink; LPSTR lpszDisplayName; ULONG nFileLength; LPSTR lpszFrom; LPSTR lpszTo; } OLEUICHANGESOURCEA, *POLEUICHANGESOURCEA, *LPOLEUICHANGESOURCEA; DECL_WINELIB_TYPE_AW(OLEUICHANGESOURCE) DECL_WINELIB_TYPE_AW(POLEUICHANGESOURCE) DECL_WINELIB_TYPE_AW(LPOLEUICHANGESOURCE) /* Change Source Dialog flags */ #define CSF_SHOWHELP __MSABI_LONG(0x00000001) #define CSF_VALIDSOURCE __MSABI_LONG(0x00000002) #define CSF_ONLYGETSOURCE __MSABI_LONG(0x00000004) #define CSF_EXPLORER __MSABI_LONG(0x00000008) /***************************************************************************** * IOleUILinkContainer interface */ #define INTERFACE IOleUILinkContainerA DECLARE_INTERFACE_(IOleUILinkContainerA,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IOleUILinkContainerA methods ***/ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE; STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE; STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE; STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName, ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE; STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName, LPSTR *lplpszFullLinkType, LPSTR *lplpszShortLinkType, BOOL *lpfSourceAvailable, BOOL *lpfIsSelected) PURE; STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE; STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE; STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE; }; #undef INTERFACE #define INTERFACE IOleUILinkContainerW DECLARE_INTERFACE_(IOleUILinkContainerW,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IOleUILinkContainerW methods ***/ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE; STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE; STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE; STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPWSTR lpszDisplayName, ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE; STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName, LPWSTR *lplpszFullLinkType, LPWSTR *lplpszShortLinkType, BOOL *lpfSourceAvailable, BOOL *lpfIsSelected) PURE; STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE; STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE; STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE; }; #undef INTERFACE DECL_WINELIB_TYPE_AW(IOleUILinkContainer) DECL_WINELIB_TYPE_AW(POLEUILINKCONTAINER) DECL_WINELIB_TYPE_AW(LPOLEUILINKCONTAINER) #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IOleUILinkContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IOleUILinkContainer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IOleUILinkContainer_Release(p) (p)->lpVtbl->Release(p) /*** IOleUILinkContainer methods ***/ #define IOleUILinkContainer_GetNextLink(p,a) (p)->lpVtbl->GetNextLink(p,a) #define IOleUILinkContainer_SetLinkUpdateOptions(p,a,b) (p)->lpVtbl->SetLinkUpdateOptions(p,a,b) #define IOleUILinkContainer_GetLinkUpdateOptions(p,a,b) (p)->lpVtbl->GetLinkUpdateOptions(p,a,b) #define IOleUILinkContainer_SetLinkSource(p,a,b,c,d,e) (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e) #define IOleUILinkContainer_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g) #define IOleUILinkContainer_OpenLinkSource(p,a) (p)->lpVtbl->OpenLinkSource(p,a) #define IOleUILinkContainer_UpdateLink(p,a,b,c) (p)->lpVtbl->UpdateLink(p,a,b,c) #define IOleUILinkContainer_CancelLink(p,a) (p)->lpVtbl->CancelLink(p,a) #endif /***************************************************************************** * IOleUILinkInfo interface */ #define INTERFACE IOleUILinkInfoA DECLARE_INTERFACE_(IOleUILinkInfoA,IOleUILinkContainerA) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IOleUILinkContainerA methods ***/ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE; STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE; STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE; STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName, ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE; STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName, LPSTR *lplpszFullLinkType, LPSTR *lplpszShortLinkType, BOOL *lpfSourceAvailable, BOOL *lpfIsSelected) PURE; STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE; STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE; STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE; /*** IOleUILinkInfoA methods ***/ STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink, FILETIME *lpLastUpdate) PURE; }; #undef INTERFACE #define INTERFACE IOleUILinkInfoW DECLARE_INTERFACE_(IOleUILinkInfoW,IOleUILinkContainerW) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IOleUILinkContainerW methods ***/ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE; STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE; STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE; STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPWSTR lpszDisplayName, ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE; STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName, LPWSTR *lplpszFullLinkType, LPWSTR *lplpszShortLinkType, BOOL *lpfSourceAvailable, BOOL *lpfIsSelected) PURE; STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE; STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE; STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE; /*** IOleUILinkInfoW methods ***/ STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink, FILETIME *lpLastUpdate) PURE; }; #undef INTERFACE DECL_WINELIB_TYPE_AW(IOleUILinkInfo) DECL_WINELIB_TYPE_AW(POLEUILINKINFO) DECL_WINELIB_TYPE_AW(LPOLEUILINKINFO) #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IOleUILinkInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IOleUILinkInfo_AddRef(p) (p)->lpVtbl->AddRef(p) #define IOleUILinkInfo_Release(p) (p)->lpVtbl->Release(p) /*** IOleUILinkContainer methods ***/ #define IOleUILinkInfo_GetNextLink(p,a) (p)->lpVtbl->GetNextLink(p,a) #define IOleUILinkInfo_SetLinkUpdateOptions(p,a,b) (p)->lpVtbl->SetLinkUpdateOptions(p,a,b) #define IOleUILinkInfo_GetLinkUpdateOptions(p,a,b) (p)->lpVtbl->GetLinkUpdateOptions(p,a,b) #define IOleUILinkInfo_SetLinkSource(p,a,b,c,d,e) (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e) #define IOleUILinkInfo_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g) #define IOleUILinkInfo_OpenLinkSource(p,a) (p)->lpVtbl->OpenLinkSource(p,a) #define IOleUILinkInfo_UpdateLink(p,a,b,c) (p)->lpVtbl->UpdateLink(p,a,b,c) #define IOleUILinkInfo_CancelLink(p,a) (p)->lpVtbl->CancelLink(p,a) /*** IOleUILinkInfo methods ***/ #define IOleUILinkInfo_GetLastUpdate(p,a,b) (p)->lpVtbl->GetLastUpdate(p,a,b) #endif /***************************************************************************** * IOleUIObjInfo interface */ #define INTERFACE IOleUIObjInfoA DECLARE_INTERFACE_(IOleUIObjInfoA,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IOleUIObjInfoA methods ***/ STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPSTR *lplpszLabel, LPSTR *lplpszType, LPSTR *lplpszShortType, LPSTR *lplpszLocation) PURE; STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat, CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE; STDMETHOD(ConvertObject)(THIS_ DWORD dwObject, REFCLSID clsidNew) PURE; STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE; STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect, INT nCurrentScale, BOOL bRelativeToOrig) PURE; }; #undef INTERFACE #define INTERFACE IOleUIObjInfoW DECLARE_INTERFACE_(IOleUIObjInfoW,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IOleUIObjInfoW methods ***/ STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPWSTR *lplpszLabel, LPWSTR *lplpszType, LPWSTR *lplpszShortType, LPWSTR *lplpszLocation) PURE; STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat, CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE; STDMETHOD(ConvertObject)(THIS_ DWORD dwObject, REFCLSID clsidNew) PURE; STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE; STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect, INT nCurrentScale, BOOL bRelativeToOrig) PURE; }; #undef INTERFACE DECL_WINELIB_TYPE_AW(IOleUIObjInfo) DECL_WINELIB_TYPE_AW(POLEUIOBJINFO) DECL_WINELIB_TYPE_AW(LPOLEUIOBJINFO) #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IOleUIObjInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IOleUIObjInfo_AddRef(p) (p)->lpVtbl->AddRef(p) #define IOleUIObjInfo_Release(p) (p)->lpVtbl->Release(p) /*** IOleUIObjInfo methods ***/ #define IOleUIObjInfo_GetObjectInfo(p,a,b,c,d,e,f) (p)->lpVtbl->GetObjectInfo(p,a,b,c,d,e,f) #define IOleUIObjInfo_GetConvertInfo(p,a,b,c,d,e,f) (p)->lpVtbl->GetConvertInfo(p,a,b,c,d,e,f) #define IOleUIObjInfo_ConvertObject(p,a,b) (p)->lpVtbl->ConvertObject(p,a,b) #define IOleUIObjInfo_GetViewInfo(p,a,b,c,d) (p)->lpVtbl->GetViewInfo(p,a,b,c,d) #define IOleUIObjInfo_SetViewInfo(p,a,b,c,d,e) (p)->lpVtbl->SetViewInfo(p,a,b,c,d,e) #endif UINT WINAPI OleUIInsertObjectW(LPOLEUIINSERTOBJECTW); UINT WINAPI OleUIInsertObjectA(LPOLEUIINSERTOBJECTA); #define OleUIInsertObject WINELIB_NAME_AW(OleUIInsertObject) UINT WINAPI OleUIConvertA(LPOLEUICONVERTA); UINT WINAPI OleUIConvertW(LPOLEUICONVERTW); #define OleUIConvert WINELIB_NAME_AW(OleUIConvert) UINT WINAPI OleUIChangeIconA(LPOLEUICHANGEICONA); UINT WINAPI OleUIChangeIconW(LPOLEUICHANGEICONW); #define OleUIChangeIcon WINELIB_NAME_AW(OleUIChangeIcon) UINT WINAPI OleUIBusyA(LPOLEUIBUSYA); UINT WINAPI OleUIBusyW(LPOLEUIBUSYW); #define OleUIBusy WINELIB_NAME_AW(OleUIBusy) UINT WINAPI OleUIObjectPropertiesA(LPOLEUIOBJECTPROPSA); UINT WINAPI OleUIObjectPropertiesW(LPOLEUIOBJECTPROPSW); #define OleUIObjectProperties WINELIB_NAME_AW(OleUIObjectProperties) UINT WINAPI OleUIChangeSourceW(LPOLEUICHANGESOURCEW); UINT WINAPI OleUIChangeSourceA(LPOLEUICHANGESOURCEA); #define OleUIChangeSource WINELIB_NAME_AW(OleUIChangeSource) UINT WINAPI OleUIEditLinksA(LPOLEUIEDITLINKSA lpOleUIEditLinks); UINT WINAPI OleUIEditLinksW(LPOLEUIEDITLINKSW lpOleUIEditLinks); #define OleUIEditLinks WINELIB_NAME_AW(OleUIEditLinks) BOOL WINAPI OleUIUpdateLinksA(LPOLEUILINKCONTAINERA lpOleUILinkCntr, HWND hwndParent, LPSTR lpszTitle, INT cLinks); BOOL WINAPI OleUIUpdateLinksW(LPOLEUILINKCONTAINERW lpOleUILinkCntr, HWND hwndParent, LPWSTR lpszTitle, INT cLinks); #define OleUIUpdateLinks WINELIB_NAME_AW(OleUIUpdateLinks) BOOL WINAPI OleUIAddVerbMenuA(LPOLEOBJECT lpOleObj, LPCSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax, BOOL bAddConvert, UINT idConvert, HMENU *lphMenu); BOOL WINAPI OleUIAddVerbMenuW(LPOLEOBJECT lpOleObj, LPCWSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax, BOOL bAddConvert, UINT idConvert, HMENU *lphMenu); #define OleUIAddVerbMenu WINELIB_NAME_AW(OleUIAddVerbMenu) UINT WINAPI OleUIPasteSpecialA(LPOLEUIPASTESPECIALA lpOleUIPasteSpecial); UINT WINAPI OleUIPasteSpecialW(LPOLEUIPASTESPECIALW lpOleUIPasteSpecial); #define OleUIPasteSpecial WINELIB_NAME_AW(OleUIPasteSpecial) INT WINAPIV OleUIPromptUserA(INT,HWND, ...); INT WINAPIV OleUIPromptUserW(INT,HWND, ...); #define OleUIPromptUser WINELIB_NAME_AW(OleUIPromptUser) #ifdef __cplusplus } /* Extern "C" */ #endif #endif /* __WINE_OLEDLG_H */ ================================================ FILE: wine/windows/oleidl.idl ================================================ /* * Copyright (C) 1999 Paul Quinn * Copyright (C) 1999 Francis Beaudet * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "objidl.idl"; #endif interface IOleInPlaceActiveObject; cpp_quote("#include ") /***************************************************************************** * IOleTypes interface */ [ uuid(b0916c84-7416-101a-bcea-08002b2b79ef) ] interface IOLETypes { typedef enum tagOLERENDER { OLERENDER_NONE = 0, OLERENDER_DRAW = 1, OLERENDER_FORMAT = 2, OLERENDER_ASIS = 3 } OLERENDER, *LPOLERENDER; typedef struct tagOBJECTDESCRIPTOR { ULONG cbSize; CLSID clsid; DWORD dwDrawAspect; SIZEL sizel; POINTL pointl; DWORD dwStatus; DWORD dwFullUserTypeName; DWORD dwSrcOfCopy; } OBJECTDESCRIPTOR, *POBJECTDESCRIPTOR, *LPOBJECTDESCRIPTOR, LINKSRCDESCRIPTOR, *PLINKSRCDESCRIPTOR, *LPLINKSRCDESCRIPTOR; } /***************************************************************************** * IOleWindow interface */ [ object, uuid(00000114-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleWindow : IUnknown { typedef [unique] IOleWindow *LPOLEWINDOW; HRESULT GetWindow( [out] HWND *phwnd); HRESULT ContextSensitiveHelp( [in] BOOL fEnterMode); } /***************************************************************************** * IOleInPlaceObject interface */ [ object, uuid(00000113-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleInPlaceObject : IOleWindow { typedef [unique] IOleInPlaceObject *LPOLEINPLACEOBJECT; HRESULT InPlaceDeactivate(); HRESULT UIDeactivate(); HRESULT SetObjectRects( [in] LPCRECT lprcPosRect, [in] LPCRECT lprcClipRect); HRESULT ReactivateAndUndo(); } /***************************************************************************** * IOleInPlaceUIWindow interface */ [ object, uuid(00000115-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleInPlaceUIWindow : IOleWindow { typedef [unique] IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW; typedef RECT BORDERWIDTHS; typedef LPRECT LPBORDERWIDTHS; typedef LPCRECT LPCBORDERWIDTHS; HRESULT GetBorder( [out] LPRECT lprectBorder); HRESULT RequestBorderSpace( [in, unique] LPCBORDERWIDTHS pborderwidths); HRESULT SetBorderSpace( [in, unique] LPCBORDERWIDTHS pborderwidths); HRESULT SetActiveObject( [in, unique] IOleInPlaceActiveObject *pActiveObject, [in, string, unique] LPCOLESTR pszObjName); } /* avoid conflict with Wine Unicode macros */ cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef TranslateAccelerator") cpp_quote("#endif") /***************************************************************************** * IOleInPlaceFrame interface */ [ object, uuid(00000116-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleInPlaceFrame : IOleInPlaceUIWindow { typedef [unique] IOleInPlaceFrame *LPOLEINPLACEFRAME; typedef struct tagOleInPlaceFrameInfo { UINT cb; BOOL fMDIApp; HWND hwndFrame; HACCEL haccel; UINT cAccelEntries; } OLEINPLACEFRAMEINFO, *LPOLEINPLACEFRAMEINFO; typedef struct tagOleMenuGroupWidths { LONG width[ 6 ]; } OLEMENUGROUPWIDTHS, *LPOLEMENUGROUPWIDTHS; typedef HGLOBAL HOLEMENU; HRESULT InsertMenus( [in] HMENU hmenuShared, [in,out] LPOLEMENUGROUPWIDTHS lpMenuWidths); HRESULT SetMenu( [in] HMENU hmenuShared, [in] HOLEMENU holemenu, [in] HWND hwndActiveObject); HRESULT RemoveMenus( [in] HMENU hmenuShared); HRESULT SetStatusText( [in, unique] LPCOLESTR pszStatusText); HRESULT EnableModeless( [in] BOOL fEnable); HRESULT TranslateAccelerator( [in] LPMSG lpmsg, [in] WORD wID); } /***************************************************************************** * IOleInPlaceActiveObject interface */ [ object, uuid(00000117-0000-0000-c000-000000000046) ] interface IOleInPlaceActiveObject : IOleWindow { typedef [unique] IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT; [local] HRESULT TranslateAccelerator( [in] LPMSG lpmsg); [call_as(TranslateAccelerator)] HRESULT RemoteTranslateAccelerator(); HRESULT OnFrameWindowActivate( [in] BOOL fActivate); HRESULT OnDocWindowActivate( [in] BOOL fActivate); [local] HRESULT ResizeBorder( [in] LPCRECT prcBorder, [in, unique] IOleInPlaceUIWindow *pUIWindow, [in] BOOL fFrameWindow); [call_as(ResizeBorder)] HRESULT RemoteResizeBorder( [in] LPCRECT prcBorder, [in] REFIID riid, [in, unique, iid_is(riid)] IOleInPlaceUIWindow *pUIWindow, [in] BOOL fFrameWindow); HRESULT EnableModeless( [in] BOOL fEnable); } /***************************************************************************** * IOleInPlaceSite interface */ [ object, uuid(00000119-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleInPlaceSite : IOleWindow { typedef [unique] IOleInPlaceSite *LPOLEINPLACESITE; HRESULT CanInPlaceActivate(); HRESULT OnInPlaceActivate(); HRESULT OnUIActivate(); HRESULT GetWindowContext( [out] IOleInPlaceFrame **ppFrame, [out] IOleInPlaceUIWindow **ppDoc, [out] LPRECT lprcPosRect, [out] LPRECT lprcClipRect, [in, out] LPOLEINPLACEFRAMEINFO lpFrameInfo); HRESULT Scroll( [in] SIZE scrollExtent); HRESULT OnUIDeactivate( [in] BOOL fUndoable); HRESULT OnInPlaceDeactivate(); HRESULT DiscardUndoState(); HRESULT DeactivateAndUndo(); HRESULT OnPosRectChange( [in] LPCRECT lprcPosRect); } /***************************************************************************** * IParseDisplayName interface */ [ object, uuid(0000011a-0000-0000-c000-000000000046), pointer_default(unique) ] interface IParseDisplayName : IUnknown { typedef [unique] IParseDisplayName *LPPARSEDISPLAYNAME; HRESULT ParseDisplayName( [in, unique] IBindCtx *pbc, [in] LPOLESTR pszDisplayName, [out] ULONG *pchEaten, [out] IMoniker **ppmkOut); } /***************************************************************************** * IOleContainer interface */ [ object, uuid(0000011b-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleContainer : IParseDisplayName { typedef [unique] IOleContainer *LPOLECONTAINER; HRESULT EnumObjects( [in] DWORD grfFlags, [out] IEnumUnknown **ppenum); HRESULT LockContainer( [in] BOOL fLock); } /***************************************************************************** * IOleItemContainer interface */ [ object, uuid(0000011c-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleItemContainer : IOleContainer { typedef [unique] IOleItemContainer *LPOLEITEMCONTAINER; typedef enum tagBINDSPEED { BINDSPEED_INDEFINITE = 1, BINDSPEED_MODERATE = 2, BINDSPEED_IMMEDIATE = 3 } BINDSPEED; typedef enum tagOLECONTF { OLECONTF_EMBEDDINGS = 1, OLECONTF_LINKS = 2, OLECONTF_OTHERS = 4, OLECONTF_ONLYUSER = 8, OLECONTF_ONLYIFRUNNING = 16 } OLECONTF; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetObject") cpp_quote("#endif") HRESULT GetObject( [in] LPOLESTR pszItem, [in] DWORD dwSpeedNeeded, [in, unique] IBindCtx *pbc, [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); HRESULT GetObjectStorage( [in] LPOLESTR pszItem, [in, unique] IBindCtx *pbc, [in] REFIID riid, [out, iid_is(riid)] void **ppvStorage); HRESULT IsRunning( [in] LPOLESTR pszItem); } /***************************************************************************** * IOleLink interface */ [ object, uuid(0000011d-0000-0000-c000-000000000046) ] interface IOleLink : IUnknown { typedef [unique] IOleLink *LPOLELINK; typedef enum tagOLEUPDATE { OLEUPDATE_ALWAYS = 1, OLEUPDATE_ONCALL = 3 } OLEUPDATE, *POLEUPDATE, *LPOLEUPDATE; typedef enum tagOLELINKBIND { OLELINKBIND_EVENIFCLASSDIFF = 1 } OLELINKBIND; HRESULT SetUpdateOptions( [in] DWORD dwUpdateOpt); HRESULT GetUpdateOptions( [out] DWORD *pdwUpdateOpt); HRESULT SetSourceMoniker( [in, unique] IMoniker *pmk, [in] REFCLSID rclsid); HRESULT GetSourceMoniker( [out] IMoniker **ppmk); HRESULT SetSourceDisplayName( [in]LPCOLESTR pszStatusText); HRESULT GetSourceDisplayName( [out] LPOLESTR *ppszDisplayName); HRESULT BindToSource( [in] DWORD bindflags, [in, unique] IBindCtx *pbc); HRESULT BindIfRunning(); HRESULT GetBoundSource( [out] IUnknown **ppunk); HRESULT UnbindSource(); HRESULT Update( [in, unique] IBindCtx *pbc); } /***************************************************************************** * IOleClientSite interface */ [ object, uuid(00000118-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleClientSite : IUnknown { typedef [unique] IOleClientSite * LPOLECLIENTSITE; HRESULT SaveObject(); HRESULT GetMoniker( [in] DWORD dwAssign, [in] DWORD dwWhichMoniker, [out] IMoniker **ppmk); HRESULT GetContainer( [out] IOleContainer **ppContainer); HRESULT ShowObject(); HRESULT OnShowWindow( [in] BOOL fShow); HRESULT RequestNewObjectLayout(); } /***************************************************************************** * IOleCache interface */ [ object, uuid(0000011e-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleCache : IUnknown { typedef [unique] IOleCache *LPOLECACHE; HRESULT Cache( [in, unique] FORMATETC *pformatetc, [in] DWORD advf, [out] DWORD *pdwConnection); HRESULT Uncache( [in] DWORD dwConnection); HRESULT EnumCache( [out] IEnumSTATDATA **ppenumSTATDATA); HRESULT InitCache( [in, unique] IDataObject *pDataObject); HRESULT SetData( [in, unique] FORMATETC *pformatetc, [in, unique] STGMEDIUM *pmedium, [in] BOOL fRelease); } /***************************************************************************** * IOleCache2 interface */ [ object, uuid(00000128-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleCache2 : IOleCache { typedef [unique] IOleCache2 *LPOLECACHE2; const DWORD UPDFCACHE_NODATACACHE = 0x00000001; const DWORD UPDFCACHE_ONSAVECACHE = 0x00000002; const DWORD UPDFCACHE_ONSTOPCACHE = 0x00000004; const DWORD UPDFCACHE_NORMALCACHE = 0x00000008; const DWORD UPDFCACHE_IFBLANK = 0x00000010; const DWORD UPDFCACHE_ONLYIFBLANK = 0x80000000; const DWORD UPDFCACHE_IFBLANKORONSAVECACHE = (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE); const DWORD UPDFCACHE_ALL = ((DWORD)(~(UPDFCACHE_ONLYIFBLANK))); const DWORD UPDFCACHE_ALLBUTNODATACACHE = (UPDFCACHE_ALL & ((DWORD)(~UPDFCACHE_NODATACACHE))); typedef enum tagDISCARDCACHE { DISCARDCACHE_SAVEIFDIRTY = 0, DISCARDCACHE_NOSAVE = 1 } DISCARDCACHE; [local] HRESULT UpdateCache( [in] LPDATAOBJECT pDataObject, [in] DWORD grfUpdf, [in] LPVOID pReserved); [call_as(UpdateCache)] HRESULT RemoteUpdateCache( [in] LPDATAOBJECT pDataObject, [in] DWORD grfUpdf, [in] LONG_PTR pReserved); HRESULT DiscardCache( [in] DWORD dwDiscardOptions); } /***************************************************************************** * IOleCacheControl interface */ [ object, uuid(00000129-0000-0000-c000-000000000046) ] interface IOleCacheControl : IUnknown { typedef [unique] IOleCacheControl *LPOLECACHECONTROL; HRESULT OnRun( LPDATAOBJECT pDataObject); HRESULT OnStop(); } /***************************************************************************** * IEnumOLEVERB interface */ [ object, uuid(00000104-0000-0000-c000-000000000046), pointer_default(unique) ] interface IEnumOLEVERB : IUnknown { typedef [unique] IEnumOLEVERB *LPENUMOLEVERB; typedef struct tagOLEVERB { LONG lVerb; LPOLESTR lpszVerbName; DWORD fuFlags; DWORD grfAttribs; } OLEVERB, *LPOLEVERB; typedef enum tagOLEVERBATTRIB { OLEVERBATTRIB_NEVERDIRTIES = 1, OLEVERBATTRIB_ONCONTAINERMENU = 2 } OLEVERBATTRIB; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumOLEVERB **ppenum); } /***************************************************************************** * IOleObject interface */ [ object, uuid(00000112-0000-0000-c000-000000000046), pointer_default(unique) ] interface IOleObject : IUnknown { typedef [unique] IOleObject *LPOLEOBJECT; typedef enum tagOLEGETMONIKER { OLEGETMONIKER_ONLYIFTHERE = 1, OLEGETMONIKER_FORCEASSIGN = 2, OLEGETMONIKER_UNASSIGN = 3, OLEGETMONIKER_TEMPFORUSER = 4 } OLEGETMONIKER; typedef enum tagOLEWHICHMK { OLEWHICHMK_CONTAINER = 1, OLEWHICHMK_OBJREL = 2, OLEWHICHMK_OBJFULL = 3 } OLEWHICHMK; typedef enum tagUSERCLASSTYPE { USERCLASSTYPE_FULL = 1, USERCLASSTYPE_SHORT = 2, USERCLASSTYPE_APPNAME = 3 } USERCLASSTYPE; typedef enum tagOLEMISC { OLEMISC_RECOMPOSEONRESIZE = 0x1, OLEMISC_ONLYICONIC = 0x2, OLEMISC_INSERTNOTREPLACE = 0x4, OLEMISC_STATIC = 0x8, OLEMISC_CANTLINKINSIDE = 0x10, OLEMISC_CANLINKBYOLE1 = 0x20, OLEMISC_ISLINKOBJECT = 0x40, OLEMISC_INSIDEOUT = 0x80, OLEMISC_ACTIVATEWHENVISIBLE = 0x100, OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200, OLEMISC_INVISIBLEATRUNTIME = 0x400, OLEMISC_ALWAYSRUN = 0x800, OLEMISC_ACTSLIKEBUTTON = 0x1000, OLEMISC_ACTSLIKELABEL = 0x2000, OLEMISC_NOUIACTIVATE = 0x4000, OLEMISC_ALIGNABLE = 0x8000, OLEMISC_SIMPLEFRAME = 0x10000, OLEMISC_SETCLIENTSITEFIRST = 0x20000, OLEMISC_IMEMODE = 0x40000, OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000, OLEMISC_WANTSTOMENUMERGE = 0x100000, OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000 } OLEMISC; typedef enum tagOLECLOSE { OLECLOSE_SAVEIFDIRTY = 0, OLECLOSE_NOSAVE = 1, OLECLOSE_PROMPTSAVE = 2 } OLECLOSE; HRESULT SetClientSite( [in, unique] IOleClientSite *pClientSite); HRESULT GetClientSite( [out] IOleClientSite **ppClientSite); HRESULT SetHostNames( [in] LPCOLESTR szContainerApp, [in, unique] LPCOLESTR szContainerObj); HRESULT Close( [in] DWORD dwSaveOption); HRESULT SetMoniker( [in] DWORD dwWhichMoniker, [in, unique] IMoniker *pmk); HRESULT GetMoniker( [in] DWORD dwAssign, [in] DWORD dwWhichMoniker, [out] IMoniker **ppmk); HRESULT InitFromData( [in, unique] IDataObject *pDataObject, [in] BOOL fCreation, [in] DWORD dwReserved); HRESULT GetClipboardData( [in] DWORD dwReserved, [out] IDataObject **ppDataObject); HRESULT DoVerb( [in] LONG iVerb, [in, unique] LPMSG lpmsg, [in, unique] IOleClientSite *pActiveSite, [in] LONG lindex, [in] HWND hwndParent, [in, unique] LPCRECT lprcPosRect); HRESULT EnumVerbs( [out] IEnumOLEVERB **ppEnumOleVerb); HRESULT Update(); HRESULT IsUpToDate(); HRESULT GetUserClassID( [out] CLSID *pClsid); HRESULT GetUserType( [in] DWORD dwFormOfType, [out] LPOLESTR *pszUserType); HRESULT SetExtent( [in] DWORD dwDrawAspect, [in] SIZEL *psizel); HRESULT GetExtent( [in] DWORD dwDrawAspect, [out] SIZEL *psizel); HRESULT Advise( [in, unique] IAdviseSink *pAdvSink, [out] DWORD *pdwConnection); HRESULT Unadvise( [in] DWORD dwConnection); HRESULT EnumAdvise( [out] IEnumSTATDATA **ppenumAdvise); HRESULT GetMiscStatus( [in] DWORD dwAspect, [out] DWORD *pdwStatus); HRESULT SetColorScheme( [in] LOGPALETTE *pLogpal); } /***************************************************************************** * IOleAdviseHolder interface */ [ local, object, uuid(00000111-0000-0000-c000-000000000046) ] interface IOleAdviseHolder : IUnknown { typedef [unique] IOleAdviseHolder * LPOLEADVISEHOLDER; HRESULT Advise( [in, unique] IAdviseSink *pAdvise, [out] DWORD *pdwConnection); HRESULT Unadvise( [in] DWORD dwConnection); HRESULT EnumAdvise( [out] IEnumSTATDATA **ppenumAdvise); HRESULT SendOnRename( [in, unique] IMoniker *pmk); HRESULT SendOnSave(); HRESULT SendOnClose(); } /***************************************************************************** * IContinue interface */ [ object, uuid(0000012a-0000-0000-c000-000000000046) ] interface IContinue : IUnknown { HRESULT FContinue(); } /***************************************************************************** * IViewObject interface */ [ object, uuid(0000010d-0000-0000-c000-000000000046) ] interface IViewObject : IUnknown { typedef [unique] IViewObject *LPVIEWOBJECT; [local] HRESULT Draw( [in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void * pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] HDC hdcTargetDev, [in] HDC hdcDraw, [in] LPCRECTL lprcBounds, [in, unique] LPCRECTL lprcWBounds, [in] BOOL (*pfnContinue)(ULONG_PTR dwContinue), [in] ULONG_PTR dwContinue); [call_as(Draw)] HRESULT RemoteDraw( [in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] ULONG_PTR hdcTargetDev, [in] ULONG_PTR hdcDraw, [in] LPCRECTL lprcBounds, [in, unique] LPCRECTL lprcWBounds, [in] IContinue *pContinue); [local] HRESULT GetColorSet( [in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void *pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] HDC hicTargetDev, [out] LOGPALETTE **ppColorSet); [call_as(GetColorSet)] HRESULT RemoteGetColorSet( [in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] ULONG_PTR hicTargetDev, [out] LOGPALETTE **ppColorSet); [local] HRESULT Freeze( [in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void *pvAspect, [out] DWORD *pdwFreeze); [call_as(Freeze)] HRESULT RemoteFreeze( [in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [out] DWORD *pdwFreeze); HRESULT Unfreeze( [in] DWORD dwFreeze); HRESULT SetAdvise( [in] DWORD aspects, [in] DWORD advf, [in, unique] IAdviseSink *pAdvSink); [local] HRESULT GetAdvise( [out, unique] DWORD *pAspects, [out, unique] DWORD *pAdvf, [out] IAdviseSink **ppAdvSink); [call_as(GetAdvise)] HRESULT RemoteGetAdvise( [out] DWORD *pAspects, [out] DWORD *pAdvf, [out] IAdviseSink **ppAdvSink); } /***************************************************************************** * IViewObject2 interface */ [ object, uuid(00000127-0000-0000-c000-000000000046) ] interface IViewObject2 : IViewObject { typedef [unique] IViewObject2 *LPVIEWOBJECT2; HRESULT GetExtent( [in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] DVTARGETDEVICE* ptd, [out] LPSIZEL lpsizel); } /***************************************************************************** * IDropSource interface */ [ local, object, uuid(00000121-0000-0000-c000-000000000046) ] interface IDropSource : IUnknown { typedef [unique] IDropSource *LPDROPSOURCE; HRESULT QueryContinueDrag( [in] BOOL fEscapePressed, [in] DWORD grfKeyState); HRESULT GiveFeedback( [in] DWORD dwEffect); } /***************************************************************************** * IDropTarget interface */ [ object, uuid(00000122-0000-0000-c000-000000000046), pointer_default(unique) ] interface IDropTarget : IUnknown { typedef [unique] IDropTarget *LPDROPTARGET; const DWORD MK_ALT = 0x20; const DWORD DROPEFFECT_NONE = 0; const DWORD DROPEFFECT_COPY = 1; const DWORD DROPEFFECT_MOVE = 2; const DWORD DROPEFFECT_LINK = 4; const DWORD DROPEFFECT_SCROLL = 0x80000000; const DWORD DD_DEFSCROLLINSET = 11; const DWORD DD_DEFSCROLLDELAY = 50; const DWORD DD_DEFSCROLLINTERVAL = 50; const DWORD DD_DEFDRAGDELAY = 200; const DWORD DD_DEFDRAGMINDIST = 2; HRESULT DragEnter( [in, unique] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); HRESULT DragOver( [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); HRESULT DragLeave(); HRESULT Drop( [in, unique] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect); } /***************************************************************************** * IDropSourceNotify interface */ [ object, uuid(0000012b-0000-0000-c000-000000000046), pointer_default(unique), local ] interface IDropSourceNotify : IUnknown { HRESULT DragTargetEnter( [in] HWND hwnd ); HRESULT DragTargetLeave( void ); } ================================================ FILE: wine/windows/opcbase.idl ================================================ /* * Copyright 2018 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif typedef [v1_enum] enum { OPC_STREAM_IO_READ = 1, OPC_STREAM_IO_WRITE = 2, } OPC_STREAM_IO_MODE; typedef [v1_enum] enum { OPC_COMPRESSION_NONE = -1, OPC_COMPRESSION_NORMAL = 0, OPC_COMPRESSION_MAXIMUM = 1, OPC_COMPRESSION_FAST = 2, OPC_COMPRESSION_SUPERFAST = 3, } OPC_COMPRESSION_OPTIONS; typedef [v1_enum] enum { OPC_URI_TARGET_MODE_INTERNAL = 0, OPC_URI_TARGET_MODE_EXTERNAL = 1, } OPC_URI_TARGET_MODE; cpp_quote("#define OPC_E_NONCONFORMING_URI MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x1)") cpp_quote("#define OPC_E_RELATIONSHIP_URI_REQUIRED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x3)") cpp_quote("#define OPC_E_INVALID_RELATIONSHIP_TARGET MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x12)") cpp_quote("#define OPC_E_NO_SUCH_RELATIONSHIP MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x48)") cpp_quote("#define OPC_E_ENUM_COLLECTION_CHANGED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x50)") cpp_quote("#define OPC_E_ENUM_INVALID_POSITION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x53)") ================================================ FILE: wine/windows/opcobjectmodel.idl ================================================ /* * Copyright 2018 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif interface IOpcPartUri; interface IOpcUri; interface IOpcRelationship; interface IOpcRelationshipSet; typedef [v1_enum] enum { OPC_READ_DEFAULT = 0, OPC_VALIDATE_ON_LOAD = 1, OPC_CACHE_ON_ACCESS = 2, } OPC_READ_FLAGS; typedef [v1_enum] enum { OPC_WRITE_DEFAULT = 0, OPC_WRITE_FORCE_ZIP32 = 1, } OPC_WRITE_FLAGS; [ object, uuid(42195949-3b79-4fc8-89c6-fc7fb979ee71), pointer_default(ref) ] interface IOpcPart : IUnknown { HRESULT GetRelationshipSet( [out, retval] IOpcRelationshipSet **relationship_set ); HRESULT GetContentStream( [out, retval] IStream **stream ); HRESULT GetName( [out, retval] IOpcPartUri **name ); HRESULT GetContentType( [out, string, retval] LPWSTR *type ); HRESULT GetCompressionOptions( [out, retval] OPC_COMPRESSION_OPTIONS *options ); } [ object, uuid(42195949-3b79-4fc8-89c6-fc7fb979ee75), pointer_default(ref) ] interface IOpcPartEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL *has_next ); HRESULT MovePrevious( [out, retval] BOOL *has_previous ); HRESULT GetCurrent( [out, retval] IOpcPart **part ); HRESULT Clone( [out, retval] IOpcPartEnumerator **enumerator ); } [ object, uuid(42195949-3b79-4fc8-89c6-fc7fb979ee76), pointer_default(ref) ] interface IOpcRelationshipEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL *has_next ); HRESULT MovePrevious( [out, retval] BOOL *has_previous ); HRESULT GetCurrent( [out, retval] IOpcRelationship **relationship ); HRESULT Clone( [out, retval] IOpcRelationshipEnumerator **enumerator ); } [ object, uuid(42195949-3b79-4fc8-89c6-fc7fb979ee73), pointer_default(ref) ] interface IOpcPartSet : IUnknown { HRESULT GetPart( [in] IOpcPartUri *name, [out, retval] IOpcPart **part ); HRESULT CreatePart( [in] IOpcPartUri *name, [in, string] LPCWSTR content_type, [in] OPC_COMPRESSION_OPTIONS compression_options, [out, retval] IOpcPart **part ); HRESULT DeletePart( [in] IOpcPartUri *name ); HRESULT PartExists( [in] IOpcPartUri *name, [out, retval] BOOL *exists ); HRESULT GetEnumerator( [out, retval] IOpcPartEnumerator **enumerator ); } [ object, uuid(42195949-3b79-4fc8-89c6-fc7fb979ee72), pointer_default(ref) ] interface IOpcRelationship : IUnknown { HRESULT GetId( [out, string, retval] LPWSTR *id ); HRESULT GetRelationshipType( [out, string, retval] LPWSTR *type ); HRESULT GetSourceUri( [out, retval] IOpcUri **uri ); HRESULT GetTargetUri( [out, retval] IUri **target ); HRESULT GetTargetMode( [out, retval] OPC_URI_TARGET_MODE *target_mode ); } [ object, uuid(42195949-3b79-4fc8-89c6-fc7fb979ee74), pointer_default(ref) ] interface IOpcRelationshipSet : IUnknown { HRESULT GetRelationship( [in, string] LPCWSTR id, [out, retval] IOpcRelationship **relationship ); HRESULT CreateRelationship( [in, string, unique] LPCWSTR id, [in, string] LPCWSTR type, [in] IUri *target_uri, [in] OPC_URI_TARGET_MODE target_mode, [out, retval] IOpcRelationship **relationship ); HRESULT DeleteRelationship( [in, string] LPCWSTR id ); HRESULT RelationshipExists( [in, string] LPCWSTR id, [out, retval] BOOL *exists ); HRESULT GetEnumerator( [out, retval] IOpcRelationshipEnumerator **enumerator ); HRESULT GetEnumeratorForType( [in, string] LPCWSTR type, [out, retval] IOpcRelationshipEnumerator **enumerator ); HRESULT GetRelationshipsContentStream( [out, retval] IStream **stream ); } [ object, uuid(42195949-3b79-4fc8-89c6-fc7fb979ee70), pointer_default(ref) ] interface IOpcPackage : IUnknown { HRESULT GetPartSet( [out, retval] IOpcPartSet **part_set ); HRESULT GetRelationshipSet( [out, retval] IOpcRelationshipSet **relationship_set ); } ================================================ FILE: wine/windows/opcparturi.idl ================================================ /* * Copyright 2018 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "ocidl.idl"; #if 0 #pragma makedep install #endif interface IOpcPartUri; [ object, uuid(bc9c1b9b-d62c-49eb-aef0-3b4e0b28ebed), nonextensible, pointer_default(ref) ] interface IOpcUri : IUri { HRESULT GetRelationshipsPartUri( [out, retval] IOpcPartUri **part_uri ); HRESULT GetRelativeUri( [in] IOpcPartUri *part_uri, [out, retval] IUri **relative_uri ); HRESULT CombinePartUri( [in] IUri *relative_uri, [out, retval] IOpcPartUri **combined ); } [ object, uuid(7d3babe7-88b2-46ba-85cb-4203cb016c87), nonextensible, pointer_default(ref) ] interface IOpcPartUri : IOpcUri { HRESULT ComparePartUri( [in] IOpcPartUri *part_uri, [out, retval] INT32 *result ); HRESULT GetSourceUri( [out, retval] IOpcUri **source_uri ); HRESULT IsRelationshipsPartUri( [out, retval] BOOL *result ); } ================================================ FILE: wine/windows/opnrst.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a69-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IOpenRowset : IUnknown { [local] HRESULT OpenRowset([in] IUnknown *pUnkOuter, [in, unique] DBID *pTableID, [in, unique] DBID *pIndexID, [in] REFIID riid, [in] ULONG cPropertySets, [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[], [out, iid_is(riid)] IUnknown **ppRowset); [call_as(OpenRowset)] HRESULT RemoteOpenRowset([in] IUnknown *pUnkOuter, [in, unique] DBID *pTableID, [in, unique] DBID *pIndexID, [in] REFIID riid, [in] ULONG cPropertySets, [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets, [in, out, unique, iid_is(riid)] IUnknown **ppRowset, [in] ULONG cTotalProps, [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/optary.idl ================================================ /* * Copyright 2006 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; /***************************************************************************** * IOptionArray interface */ [ local, object, uuid(22b6d492-0f88-11d1-ba19-00c04fd912d0), pointer_default(unique) ] interface IOptionArray : IUnknown { typedef [unique] IOptionArray *LPOPTIONARRAY; HRESULT QueryOption( [in] DWORD dwOption, [out, size_is(*pcbBuf)] LPVOID pBuffer, [in, out] ULONG *pcbBuf); HRESULT SetOption( [in] DWORD dwOption, [in, size_is(cbBuf)] LPVOID pBuffer, [in] ULONG cbBuf); } /***************************************************************************** * IHtmlLoadOptions interface */ [ local, object, uuid(a71a0808-0f88-11d1-ba19-00c04fd912d0), pointer_default(unique) ] interface IHtmlLoadOptions : IOptionArray { typedef enum { HTMLLOADOPTION_CODEPAGE, HTMLLOADOPTION_INETSHORTCUTPATH, HTMLLOADOPTION_HYPERLINK, HTMLLOADOPTION_FRAMELOAD } HTMLLOADOPTION; } cpp_quote("DEFINE_GUID(CLSID_HTMLLoadOptions, 0x18845040, 0x0FA5, 0x11D1, 0xBA,0x19, 0x00,0xC0,0x4F,0xD9,0x12,0xD0);") ================================================ FILE: wine/windows/patchapi.h ================================================ /* * Copyright 2011 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _PATCHAPI_H_ #define _PATCHAPI_H_ #ifdef __cplusplus extern "C" { #endif #define APPLY_OPTION_FAIL_IF_EXACT 0x00000001 #define APPLY_OPTION_FAIL_IF_CLOSE 0x00000002 #define APPLY_OPTION_TEST_ONLY 0x00000004 #define APPLY_OPTION_VALID_FLAGS 0x00000007 typedef struct _PATCH_IGNORE_RANGE { ULONG OffsetInOldFile; ULONG LengthInBytes; } PATCH_IGNORE_RANGE, *PPATCH_IGNORE_RANGE; typedef struct _PATCH_RETAIN_RANGE { ULONG OffsetInOldFile; ULONG LengthInBytes; ULONG OffsetInNewFile; } PATCH_RETAIN_RANGE, *PPATCH_RETAIN_RANGE; BOOL WINAPI ApplyPatchToFileA(LPCSTR,LPCSTR,LPCSTR,ULONG); BOOL WINAPI ApplyPatchToFileW(LPCWSTR,LPCWSTR,LPCWSTR,ULONG); #define ApplyPatchToFile WINELIB_NAME_AW(ApplyPatchToFile) #ifdef __cplusplus } #endif #endif /* _PATCHAPI_H_ */ ================================================ FILE: wine/windows/pathcch.h ================================================ /* * Copyright 2017 Michael Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define PATHCCH_NONE 0x00 #define PATHCCH_ALLOW_LONG_PATHS 0x01 #define PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESS 0x02 #define PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESS 0x04 #define PATHCCH_DO_NOT_NORMALIZE_SEGMENTS 0x08 #define PATHCCH_ENSURE_IS_EXTENDED_LENGTH_PATH 0x10 HRESULT WINAPI PathCchAddBackslash(WCHAR *path, SIZE_T size); HRESULT WINAPI PathCchAddBackslashEx(WCHAR *path, SIZE_T size, WCHAR **end, SIZE_T *remaining); HRESULT WINAPI PathCchCombineEx(WCHAR *out, SIZE_T size, const WCHAR *path1, const WCHAR *path2, DWORD flags); ================================================ FILE: wine/windows/pdh.h ================================================ /* * Performance Data Helper * * Copyright 2007 Hans Leidekker * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _PDH_H_ #define _PDH_H_ #include #include #ifdef __cplusplus extern "C" { #endif typedef LONG PDH_STATUS; typedef HANDLE PDH_HQUERY; typedef HANDLE PDH_HCOUNTER; typedef HANDLE PDH_HLOG; typedef PDH_HCOUNTER HCOUNTER; typedef PDH_HQUERY HQUERY; typedef PDH_HLOG HLOG; #define PDH_CVERSION_WIN40 0x0400 #define PDH_CVERSION_WIN50 0x0500 #define PDH_VERSION 0x0503 #define PDH_MAX_SCALE 7 #define PDH_MIN_SCALE (-7) #define PDH_MAX_COUNTER_NAME 1024 #define PDH_FMT_LONG 0x00000100 #define PDH_FMT_DOUBLE 0x00000200 #define PDH_FMT_LARGE 0x00000400 #define PDH_FMT_NOSCALE 0x00001000 #define PDH_FMT_1000 0x00002000 #define PDH_FMT_NOCAP100 0x00008000 #define DATA_SOURCE_REGISTRY 0x00000001 #define DATA_SOURCE_LOGFILE 0x00000002 #define DATA_SOURCE_WBEM 0x00000004 #ifdef WINE_NO_UNICODE_MACROS # define DECL_PDH_TYPE_AW(name) /* nothing */ #else /* WINE_NO_UNICODE_MACROS */ # ifdef UNICODE # define DECL_PDH_TYPE_AW(name) typedef name##_W name; # else # define DECL_PDH_TYPE_AW(name) typedef name##_A name; # endif #endif /* WINE_NO_UNICODE_MACROS */ typedef struct _PDH_FMT_COUNTERVALUE { DWORD CStatus; union { LONG longValue; double doubleValue; LONGLONG largeValue; LPCSTR AnsiStringValue; LPCWSTR WideStringValue; } DUMMYUNIONNAME; } PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE; typedef struct _PDH_RAW_COUNTER { DWORD CStatus; FILETIME TimeStamp; LONGLONG FirstValue; LONGLONG SecondValue; DWORD MultiCount; } PDH_RAW_COUNTER, *PPDH_RAW_COUNTER; typedef struct _PDH_COUNTER_PATH_ELEMENTS_A { LPSTR szMachineName; LPSTR szObjectName; LPSTR szInstanceName; LPSTR szParentInstance; DWORD dwInstanceIndex; LPSTR szCounterName; } PDH_COUNTER_PATH_ELEMENTS_A, *PPDH_COUNTER_PATH_ELEMENTS_A; typedef struct _PDH_COUNTER_PATH_ELEMENTS_W { LPWSTR szMachineName; LPWSTR szObjectName; LPWSTR szInstanceName; LPWSTR szParentInstance; DWORD dwInstanceIndex; LPWSTR szCounterName; } PDH_COUNTER_PATH_ELEMENTS_W, *PPDH_COUNTER_PATH_ELEMENTS_W; DECL_PDH_TYPE_AW(PDH_COUNTER_PATH_ELEMENTS) DECL_PDH_TYPE_AW(PPDH_COUNTER_PATH_ELEMENTS) typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A { LPSTR szMachineName; GUID ObjectGUID; DWORD dwItemId; LPSTR szInstanceName; } PDH_DATA_ITEM_PATH_ELEMENTS_A, *PPDH_DATA_ITEM_PATH_ELEMENTS_A; typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W { LPWSTR szMachineName; GUID ObjectGUID; DWORD dwItemId; LPWSTR szInstanceName; } PDH_DATA_ITEM_PATH_ELEMENTS_W, *PPDH_DATA_ITEM_PATH_ELEMENTS_W; DECL_PDH_TYPE_AW(PDH_DATA_ITEM_PATH_ELEMENTS) DECL_PDH_TYPE_AW(PPDH_DATA_ITEM_PATH_ELEMENTS) typedef struct _PDH_COUNTER_INFO_A { DWORD dwLength; DWORD dwType; DWORD CVersion; DWORD CStatus; LONG lScale; LONG lDefaultScale; DWORD_PTR dwUserData; DWORD_PTR dwQueryUserData; LPSTR szFullPath; union { PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath; PDH_COUNTER_PATH_ELEMENTS_A CounterPath; struct { LPSTR szMachineName; LPSTR szObjectName; LPSTR szInstanceName; LPSTR szParentInstance; DWORD dwInstanceIndex; LPSTR szCounterName; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; LPSTR szExplainText; DWORD DataBuffer[1]; } PDH_COUNTER_INFO_A, *PPDH_COUNTER_INFO_A; typedef struct _PDH_COUNTER_INFO_W { DWORD dwLength; DWORD dwType; DWORD CVersion; DWORD CStatus; LONG lScale; LONG lDefaultScale; DWORD_PTR dwUserData; DWORD_PTR dwQueryUserData; LPWSTR szFullPath; union { PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath; PDH_COUNTER_PATH_ELEMENTS_W CounterPath; struct { LPWSTR szMachineName; LPWSTR szObjectName; LPWSTR szInstanceName; LPWSTR szParentInstance; DWORD dwInstanceIndex; LPWSTR szCounterName; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; LPWSTR szExplainText; DWORD DataBuffer[1]; } PDH_COUNTER_INFO_W, *PPDH_COUNTER_INFO_W; DECL_PDH_TYPE_AW(PDH_COUNTER_INFO) DECL_PDH_TYPE_AW(PPDH_COUNTER_INFO) #undef DECL_PDH_TYPE_AW PDH_STATUS WINAPI PdhAddCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *); PDH_STATUS WINAPI PdhAddCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *); #define PdhAddCounter WINELIB_NAME_AW(PdhAddCounter) PDH_STATUS WINAPI PdhAddEnglishCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *); PDH_STATUS WINAPI PdhAddEnglishCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *); #define PdhAddEnglishCounter WINELIB_NAME_AW(PdhAddEnglishCounter) PDH_STATUS WINAPI PdhBindInputDataSourceA(PDH_HLOG *, const char *); PDH_STATUS WINAPI PdhBindInputDataSourceW(PDH_HLOG *, const WCHAR *); #define PdhBindInputDataSource WINELIB_NAME_AW(PdhBindInputDataSource) PDH_STATUS WINAPI PdhCloseQuery(PDH_HQUERY); PDH_STATUS WINAPI PdhCollectQueryData(PDH_HQUERY); PDH_STATUS WINAPI PdhCollectQueryDataEx(PDH_HQUERY, DWORD, HANDLE); PDH_STATUS WINAPI PdhCollectQueryDataWithTime(PDH_HQUERY,LONGLONG *); PDH_STATUS WINAPI PdhEnumObjectsA(LPCSTR,LPCSTR,PZZSTR,LPDWORD,DWORD,BOOL); PDH_STATUS WINAPI PdhEnumObjectsW(LPCWSTR,LPCWSTR,PZZWSTR,LPDWORD,DWORD,BOOL); #define PdhEnumObjects WINELIB_NAME_AW(PdhEnumObjects) PDH_STATUS WINAPI PdhEnumObjectItemsA(LPCSTR, LPCSTR, LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, DWORD, DWORD); PDH_STATUS WINAPI PdhEnumObjectItemsW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, DWORD, DWORD); #define PdhEnumObjectItems WINELIB_NAME_AW(PdhEnumObjectItems) PDH_STATUS WINAPI PdhGetCounterInfoA(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_A); PDH_STATUS WINAPI PdhGetCounterInfoW(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_W); #define PdhGetCounterInfo WINELIB_NAME_AW(PdhGetCounterInfo) PDH_STATUS WINAPI PdhGetCounterTimeBase(PDH_HCOUNTER, LONGLONG *); PDH_STATUS WINAPI PdhGetDllVersion(LPDWORD); PDH_STATUS WINAPI PdhGetFormattedCounterValue(PDH_HCOUNTER, DWORD, LPDWORD, PPDH_FMT_COUNTERVALUE); PDH_STATUS WINAPI PdhGetRawCounterValue(PDH_HCOUNTER, LPDWORD, PPDH_RAW_COUNTER); PDH_STATUS WINAPI PdhLookupPerfIndexByNameA(LPCSTR, LPCSTR, LPDWORD); PDH_STATUS WINAPI PdhLookupPerfIndexByNameW(LPCWSTR, LPCWSTR, LPDWORD); #define PdhLookupPerfIndexByName WINELIB_NAME_AW(PdhLookupPerfIndexByName) PDH_STATUS WINAPI PdhLookupPerfNameByIndexA(LPCSTR, DWORD, LPSTR, LPDWORD); PDH_STATUS WINAPI PdhLookupPerfNameByIndexW(LPCWSTR, DWORD, LPWSTR, LPDWORD); #define PdhLookupPerfNameByIndex WINELIB_NAME_AW(PdhLookupPerfNameByIndex) PDH_STATUS WINAPI PdhMakeCounterPathA(PDH_COUNTER_PATH_ELEMENTS_A *, LPSTR, LPDWORD, DWORD); PDH_STATUS WINAPI PdhMakeCounterPathW(PDH_COUNTER_PATH_ELEMENTS_W *, LPWSTR, LPDWORD, DWORD); #define PdhMakeCounterPath WINELIB_NAME_AW(PdhMakeCounterPath) PDH_STATUS WINAPI PdhOpenQueryA(LPCSTR, DWORD_PTR, PDH_HQUERY *); PDH_STATUS WINAPI PdhOpenQueryW(LPCWSTR, DWORD_PTR, PDH_HQUERY *); #define PdhOpenQuery WINELIB_NAME_AW(PdhOpenQuery) PDH_STATUS WINAPI PdhRemoveCounter(PDH_HCOUNTER); PDH_STATUS WINAPI PdhSetCounterScaleFactor(PDH_HCOUNTER, LONG); PDH_STATUS WINAPI PdhSetDefaultRealTimeDataSource(DWORD); PDH_STATUS WINAPI PdhValidatePathA(LPCSTR); PDH_STATUS WINAPI PdhValidatePathW(LPCWSTR); #define PdhValidatePath WINELIB_NAME_AW(PdhValidatePath) PDH_STATUS WINAPI PdhValidatePathExA(PDH_HLOG, LPCSTR); PDH_STATUS WINAPI PdhValidatePathExW(PDH_HLOG, LPCWSTR); #define PdhValidatePathEx WINELIB_NAME_AW(PdhValidatePathEx) #ifdef __cplusplus } #endif #endif /* _PDH_H_ */ ================================================ FILE: wine/windows/pdhmsg.h ================================================ /* * Performance Data Helper * * Copyright 2007 Hans Leidekker * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _PDH_MSG_H_ #define _PDH_MSG_H_ #define PDH_CSTATUS_VALID_DATA 0x00000000 #define PDH_CSTATUS_NEW_DATA 0x00000001 #define PDH_CSTATUS_NO_MACHINE 0x800007d0 #define PDH_CSTATUS_NO_INSTANCE 0x800007d1 #define PDH_MORE_DATA 0x800007d2 #define PDH_CSTATUS_ITEM_NOT_VALIDATED 0x800007d3 #define PDH_RETRY 0x800007d4 #define PDH_NO_DATA 0x800007d5 #define PDH_CALC_NEGATIVE_DENOMINATOR 0x800007d6 #define PDH_CALC_NEGATIVE_TIMEBASE 0x800007d7 #define PDH_CALC_NEGATIVE_VALUE 0x800007d8 #define PDH_DIALOG_CANCELLED 0x800007d9 #define PDH_END_OF_LOG_FILE 0x800007da #define PDH_ASYNC_QUERY_TIMEOUT 0x800007db #define PDH_CANNOT_SET_DEFAULT_REALTIME_DATASOURCE 0x800007dc #define PDH_UNABLE_MAP_NAME_FILES 0x80000bd5 #define PDH_PLA_VALIDATION_WARNING 0x80000bf3 #define PDH_CSTATUS_NO_OBJECT 0xc0000bb8 #define PDH_CSTATUS_NO_COUNTER 0xc0000bb9 #define PDH_CSTATUS_INVALID_DATA 0xc0000bba #define PDH_MEMORY_ALLOCATION_FAILURE 0xc0000bbb #define PDH_INVALID_HANDLE 0xc0000bbc #define PDH_INVALID_ARGUMENT 0xc0000bbd #define PDH_FUNCTION_NOT_FOUND 0xc0000bbe #define PDH_CSTATUS_NO_COUNTERNAME 0xc0000bbf #define PDH_CSTATUS_BAD_COUNTERNAME 0xc0000bc0 #define PDH_INVALID_BUFFER 0xc0000bc1 #define PDH_INSUFFICIENT_BUFFER 0xc0000bc2 #define PDH_CANNOT_CONNECT_MACHINE 0xc0000bc3 #define PDH_INVALID_PATH 0xc0000bc4 #define PDH_INVALID_INSTANCE 0xc0000bc5 #define PDH_INVALID_DATA 0xc0000bc6 #define PDH_NO_DIALOG_DATA 0xc0000bc7 #define PDH_CANNOT_READ_NAME_STRINGS 0xc0000bc8 #define PDH_LOG_FILE_CREATE_ERROR 0xc0000bc9 #define PDH_LOG_FILE_OPEN_ERROR 0xc0000bca #define PDH_LOG_TYPE_NOT_FOUND 0xc0000bcb #define PDH_NO_MORE_DATA 0xc0000bcc #define PDH_ENTRY_NOT_IN_LOG_FILE 0xc0000bcd #define PDH_DATA_SOURCE_IS_LOG_FILE 0xc0000bce #define PDH_DATA_SOURCE_IS_REAL_TIME 0xc0000bcf #define PDH_UNABLE_READ_LOG_HEADER 0xc0000bd0 #define PDH_FILE_NOT_FOUND 0xc0000bd1 #define PDH_FILE_ALREADY_EXISTS 0xc0000bd2 #define PDH_NOT_IMPLEMENTED 0xc0000bd3 #define PDH_STRING_NOT_FOUND 0xc0000bd4 #define PDH_UNKNOWN_LOG_FORMAT 0xc0000bd6 #define PDH_UNKNOWN_LOGSVC_COMMAND 0xc0000bd7 #define PDH_LOGSVC_QUERY_NOT_FOUND 0xc0000bd8 #define PDH_LOGSVC_NOT_OPENED 0xc0000bd9 #define PDH_WBEM_ERROR 0xc0000bda #define PDH_ACCESS_DENIED 0xc0000bdb #define PDH_LOG_FILE_TOO_SMALL 0xc0000bdc #define PDH_INVALID_DATASOURCE 0xc0000bdd #define PDH_INVALID_SQLDB 0xc0000bde #define PDH_NO_COUNTERS 0xc0000bdf #define PDH_SQL_ALLOC_FAILED 0xc0000be0 #define PDH_SQL_ALLOCCON_FAILED 0xc0000be1 #define PDH_SQL_EXEC_DIRECT_FAILED 0xc0000be2 #define PDH_SQL_FETCH_FAILED 0xc0000be3 #define PDH_SQL_ROWCOUNT_FAILED 0xc0000be4 #define PDH_SQL_MORE_RESULTS_FAILED 0xc0000be5 #define PDH_SQL_CONNECT_FAILED 0xc0000be6 #define PDH_SQL_BIND_FAILED 0xc0000be7 #define PDH_CANNOT_CONNECT_WMI_SERVER 0xc0000be8 #define PDH_PLA_COLLECTION_ALREADY_RUNNING 0xc0000be9 #define PDH_PLA_ERROR_SCHEDULE_OVERLAP 0xc0000bea #define PDH_PLA_COLLECTION_NOT_FOUND 0xc0000beb #define PDH_PLA_ERROR_SCHEDULE_ELAPSED 0xc0000bec #define PDH_PLA_ERROR_NOSTART 0xc0000bed #define PDH_PLA_ERROR_ALREADY_EXISTS 0xc0000bee #define PDH_PLA_ERROR_TYPE_MISMATCH 0xc0000bef #define PDH_PLA_ERROR_FILEPATH 0xc0000bf0 #define PDH_PLA_SERVICE_ERROR 0xc0000bf1 #define PDH_PLA_VALIDATION_ERROR 0xc0000bf2 #define PDH_PLA_ERROR_NAME_TOO_LONG 0xc0000bf4 #define PDH_INVALID_SQL_LOG_FORMAT 0xc0000bf5 #define PDH_COUNTER_ALREADY_IN_QUERY 0xc0000bf6 #define PDH_BINARY_LOG_CORRUPT 0xc0000bf7 #define PDH_LOG_SAMPLE_TOO_SMALL 0xc0000bf8 #define PDH_OS_LATER_VERSION 0xc0000bf9 #define PDH_OS_EARLIER_VERSION 0xc0000bfa #define PDH_INCORRECT_APPEND_TIME 0xc0000bfb #define PDH_UNMATCHED_APPEND_COUNTER 0xc0000bfc #define PDH_SQL_ALTER_DETAIL_FAILED 0xc0000bfd #define PDH_QUERY_PERF_DATA_TIMEOUT 0xc0000bfe #endif /* _PDH_MSG_H_ */ ================================================ FILE: wine/windows/perflib.h ================================================ /* * Copyright (C) 2017 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _PERFLIB_H_ #define _PERFLIB_H_ #ifdef __cplusplus extern "C" { #endif typedef LPVOID (CDECL * PERF_MEM_ALLOC)(SIZE_T,LPVOID); typedef void (CDECL * PERF_MEM_FREE)(LPVOID,LPVOID); typedef ULONG (WINAPI * PERFLIBREQUEST)(ULONG,PVOID,ULONG); typedef struct _PERF_COUNTERSET_INFO { GUID CounterSetGuid; GUID ProviderGuid; ULONG NumCounters; ULONG InstanceType; } PERF_COUNTERSET_INFO, * PPERF_COUNTERSET_INFO; typedef struct _PERF_COUNTERSET_INSTANCE { GUID CounterSetGuid; ULONG dwSize; ULONG InstanceId; ULONG InstanceNameOffset; ULONG InstanceNameSize; } PERF_COUNTERSET_INSTANCE, * PPERF_COUNTERSET_INSTANCE; typedef struct _PROVIDER_CONTEXT { DWORD ContextSize; DWORD Reserved; PERFLIBREQUEST ControlCallback; PERF_MEM_ALLOC MemAllocRoutine; PERF_MEM_FREE MemFreeRoutine; LPVOID pMemContext; } PERF_PROVIDER_CONTEXT, * PPERF_PROVIDER_CONTEXT; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _PERFLIB_H_ */ ================================================ FILE: wine/windows/perhist.idl ================================================ /* * Copyright 2009 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; [ object, uuid(91A565C1-E38F-11d0-94BF-00A0C9055CBF), pointer_default(unique) ] interface IPersistHistory : IPersist { typedef [unique] IPersistHistory *LPPERSISTHISTORY; HRESULT LoadHistory([in] IStream *pStream, [in] IBindCtx *pbc); HRESULT SaveHistory([in] IStream *pStream); HRESULT SetPositionCookie([in] DWORD dwPositioncookie); HRESULT GetPositionCookie([out] DWORD *pdwPositioncookie); } ================================================ FILE: wine/windows/physicalmonitorenumerationapi.h ================================================ /* * Copyright 2014 Michael Müller for Pipelight * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_PHYSICALMONITORENUMERATIONAPI_H #define __WINE_PHYSICALMONITORENUMERATIONAPI_H #include #ifdef __cplusplus extern "C" { #endif #define PHYSICAL_MONITOR_DESCRIPTION_SIZE 128 typedef struct _PHYSICAL_MONITOR { HANDLE hPhysicalMonitor; WCHAR szPhysicalMonitorDescription[PHYSICAL_MONITOR_DESCRIPTION_SIZE]; } PHYSICAL_MONITOR, *LPPHYSICAL_MONITOR; #ifdef __cplusplus } #endif #endif /* __WINE_PHYSICALMONITORENUMERATIONAPI_H */ ================================================ FILE: wine/windows/pktdef.h ================================================ /* * Copyright (C) 1991-1998 by LCS/Telegraphics * Copyright (C) 2002 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_PKTDEF_H #define __WINE_PKTDEF_H /*********************************************************************** * How to use pktdef.h: * * 1. Include wintab.h * 2. if using just one packet format: * a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits * (use the PK_* identifiers). * b. Include pktdef.h. * c. The generated structure typedef will be called PACKET. Use PACKETDATA * and PACKETMODE to fill in the LOGCONTEXT structure. * 3. If using multiple packet formats, for each one: * a. Define PACKETNAME. Its text value will be a prefix for this packet's * parameters and names. * b. Define PACKETDATA and PACKETMODE similar to * 2.a. above. * c. Include pktdef.h. * d. The generated structure typedef will be called * PACKET. Compare with 2.c. above and example #2 below. * 4. If using extension packet data, do the following additional steps * for each extension: * a. Before including pktdef.h, define PACKET * as either PKEXT_ABSOLUTE or PKEXT_RELATIVE. * b. The generated structure typedef will contain a field for the * extension data. * c. Scan the WTI_EXTENSION categories to find the extension's * packet mask bit. * d. OR the packet mask bit with PACKETDATA and use the * result in the lcPktData field of the LOGCONTEXT structure. * e. If PACKET was PKEXT_RELATIVE, OR the * packet mask bit with PACKETMODE and use the result * in the lcPktMode field of the LOGCONTEXT structure. * * * Example #1. -- single packet format * * #include * #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/ * #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/ * #include * ... * lc.lcPktData = PACKETDATA; * lc.lcPktMode = PACKETMODE; * * Example #2. -- multiple formats * * #include * #define PACKETNAME MOE * #define MOEPACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/ * #define MOEPACKETMODE PK_BUTTONS /@ buttons relative mode @/ * #include * #define PACKETNAME LARRY * #define LARRYPACKETDATA PK_Y | PK_Z | PK_BUTTONS /@ y, z, buttons @/ * #define LARRYPACKETMODE PK_BUTTONS /@ buttons relative mode @/ * #include * #define PACKETNAME CURLY * #define CURLYPACKETDATA PK_X | PK_Z | PK_BUTTONS /@ x, z, buttons @/ * #define CURLYPACKETMODE PK_BUTTONS /@ buttons relative mode @/ * #include * ... * lcMOE.lcPktData = MOEPACKETDATA; * lcMOE.lcPktMode = MOEPACKETMODE; * ... * lcLARRY.lcPktData = LARRYPACKETDATA; * lcLARRY.lcPktMode = LARRYPACKETMODE; * ... * lcCURLY.lcPktData = CURLYPACKETDATA; * lcCURLY.lcPktMode = CURLYPACKETMODE; * * Example #3. -- extension packet data "XFOO". * * #include * #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/ * #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/ * #define PACKETXFOO PKEXT_ABSOLUTE /@ XFOO absolute mode @/ * #include * ... * UINT ScanExts(UINT wTag) * { * UINT i; * UINT wScanTag; * * /@ scan for wTag's info category. @/ * for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) { * if (wTag == wScanTag) { * /@ return category offset from WTI_EXTENSIONS. @/ * return i; * } * } * /@ return error code. @/ * return 0xFFFF; * } * ... * lc.lcPktData = PACKETDATA; * lc.lcPktMode = PACKETMODE; * #ifdef PACKETXFOO * categoryXFOO = ScanExts(WTX_XFOO); * WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO); * lc.lcPktData |= maskXFOO; * #if PACKETXFOO == PKEXT_RELATIVE * lc.lcPktMode |= maskXFOO; * #endif * #endif * WTOpen(hWnd, &lc, TRUE); */ #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifndef PACKETNAME /* if no packet name prefix */ # define __PFX(x) x # define __IFX(x,y) x ## y #else /* add prefixes and infixes to packet format names */ # define __PFX(x) __PFX2(PACKETNAME,x) # define __PFX2(p,x) __PFX3(p,x) # define __PFX3(p,x) p ## x # define __IFX(x,y) __IFX2(x,PACKETNAME,y) # define __IFX2(x,i,y) __IFX3(x,i,y) # define __IFX3(x,i,y) x ## i ## y #endif #define __SFX2(x,s) __SFX3(x,s) #define __SFX3(x,s) x ## s #define __TAG __IFX(tag,PACKET) #define __TYPES \ __PFX(PACKET), * __IFX(P,PACKET), \ * __IFX(NP,PACKET), * __IFX(LP,PACKET) #define __DATA (__PFX(PACKETDATA)) #define __MODE (__PFX(PACKETMODE)) #define __EXT(x) __SFX2(__PFX(PACKET),x) typedef struct __TAG { #if (__DATA & PK_CONTEXT) HCTX pkContext; #endif #if (__DATA & PK_STATUS) UINT pkStatus; #endif #if (__DATA & PK_TIME) DWORD pkTime; #endif #if (__DATA & PK_CHANGED) WTPKT pkChanged; #endif #if (__DATA & PK_SERIAL_NUMBER) UINT pkSerialNumber; #endif #if (__DATA & PK_CURSOR) UINT pkCursor; #endif #if (__DATA & PK_BUTTONS) DWORD pkButtons; #endif #if (__DATA & PK_X) LONG pkX; #endif #if (__DATA & PK_Y) LONG pkY; #endif #if (__DATA & PK_Z) LONG pkZ; #endif #if (__DATA & PK_NORMAL_PRESSURE) # if (__MODE & PK_NORMAL_PRESSURE) /* relative */ int pkNormalPressure; # else /* absolute */ UINT pkNormalPressure; # endif #endif #if (__DATA & PK_TANGENT_PRESSURE) # if (__MODE & PK_TANGENT_PRESSURE) /* relative */ int pkTangentPressure; # else /* absolute */ UINT pkTangentPressure; # endif #endif #if (__DATA & PK_ORIENTATION) ORIENTATION pkOrientation; #endif #if (__DATA & PK_ROTATION) ROTATION pkRotation; /* 1.1 */ #endif #ifndef NOWTEXTENSIONS /* extensions begin here. */ #if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE) UINT pkFKeys; #endif #if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE) TILT pkTilt; #endif #endif } __TYPES; #undef PACKETNAME #undef __TAG #undef __TAG2 #undef __TYPES #undef __TYPES2 #undef __DATA #undef __MODE #undef __PFX #undef __PFX2 #undef __PFX3 #undef __IFX #undef __IFX2 #undef __IFX3 #undef __SFX2 #undef __SFX3 #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* defined(__WINE_PKTDEF_H */ ================================================ FILE: wine/windows/poppack.h ================================================ /* * Copyright (C) 1999 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if defined(__WINE_PSHPACK_H15) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H15 # endif /* Depth == 15 */ # if __WINE_PSHPACK_H14 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H14 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H14 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H14) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H14 # endif /* Depth == 14 */ # if __WINE_PSHPACK_H13 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H13 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H13 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H13) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H13 # endif /* Depth == 13 */ # if __WINE_PSHPACK_H12 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H12 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H12 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H12) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H12 # endif /* Depth == 12 */ # if __WINE_PSHPACK_H11 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H11 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H11 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H11) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H11 # endif /* Depth == 11 */ # if __WINE_PSHPACK_H10 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H10 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H10 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H10) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H10 # endif /* Depth == 10 */ # if __WINE_PSHPACK_H9 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H9 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H9 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H9) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H9 # endif /* Depth == 9 */ # if __WINE_PSHPACK_H8 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H8 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H8 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H8) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H8 # endif /* Depth == 8 */ # if __WINE_PSHPACK_H7 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H7 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H7 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H7) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H7 # endif /* Depth == 7 */ # if __WINE_PSHPACK_H6 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H6 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H6 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H6) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H6 # endif /* Depth == 6 */ # if __WINE_PSHPACK_H5 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H5 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H5 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H5) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H5 # endif /* Depth == 5 */ # if __WINE_PSHPACK_H4 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H4 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H4 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H4) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H4 # endif /* Depth == 4 */ # if __WINE_PSHPACK_H3 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H3 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H3 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H3) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H3 # endif /* Depth == 3 */ # if __WINE_PSHPACK_H2 == 1 # pragma pack(1) # elif __WINE_PSHPACK_H2 == 2 # pragma pack(2) # elif __WINE_PSHPACK_H2 == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H2) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H2 # endif /* Depth == 2 */ # if __WINE_PSHPACK_H == 1 # pragma pack(1) # elif __WINE_PSHPACK_H == 2 # pragma pack(2) # elif __WINE_PSHPACK_H == 8 # pragma pack(8) # else # pragma pack(4) # endif #elif defined(__WINE_PSHPACK_H) # ifndef __WINE_INTERNAL_POPPACK # undef __WINE_PSHPACK_H # endif /* Depth == 1 */ # if defined(__SUNPRO_CC) # warning "Assuming a default alignment of 4" # pragma pack(4) # else # pragma pack() # endif #else /* Depth == 0 ! */ #error "Popping alignment isn't possible since no alignment has been pushed" #endif #undef __WINE_INTERNAL_POPPACK ================================================ FILE: wine/windows/powrprof.h ================================================ /* * Copyright (C) 2005 Benjamin Cutler * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_POWRPROF_H #define __WINE_POWRPROF_H 1 #define EnableSysTrayBatteryMeter 0x01 #define EnableMultiBatteryDisplay 0x02 #define EnablePasswordLogon 0x04 #define EnableWakeOnRing 0x08 #define EnableVideoDimDisplay 0x10 typedef struct _GLOBAL_MACHINE_POWER_POLICY { ULONG Revision; SYSTEM_POWER_STATE LidOpenWakeAc; SYSTEM_POWER_STATE LidOpenWakeDc; ULONG BroadcastCapacityResolution; } GLOBAL_MACHINE_POWER_POLICY, *PGLOBAL_MACHINE_POWER_POLICY; typedef struct _GLOBAL_USER_POWER_POLICY { ULONG Revision; POWER_ACTION_POLICY PowerButtonAc; POWER_ACTION_POLICY PowerButtonDc; POWER_ACTION_POLICY SleepButtonAc; POWER_ACTION_POLICY SleepButtonDc; POWER_ACTION_POLICY LidCloseAc; POWER_ACTION_POLICY LidCloseDc; SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES]; ULONG GlobalFlags; } GLOBAL_USER_POWER_POLICY, *PGLOBAL_USER_POWER_POLICY; typedef struct _GLOBAL_POWER_POLICY { GLOBAL_USER_POWER_POLICY user; GLOBAL_MACHINE_POWER_POLICY mach; } GLOBAL_POWER_POLICY, *PGLOBAL_POWER_POLICY; typedef struct _MACHINE_POWER_POLICY { ULONG Revision; SYSTEM_POWER_STATE MinSleepAc; SYSTEM_POWER_STATE MinSleepDc; SYSTEM_POWER_STATE ReducedLatencySleepAc; SYSTEM_POWER_STATE ReducedLatencySleepDc; ULONG DozeTimeoutAc; ULONG DozeTimeoutDc; ULONG DozeS4TimeoutAc; ULONG DozeS4TimeoutDc; UCHAR MinThrottleAc; UCHAR MinThrottleDc; UCHAR pad1[2]; POWER_ACTION_POLICY OverThrottledAc; POWER_ACTION_POLICY OverThrottledDc; } MACHINE_POWER_POLICY, *PMACHINE_POWER_POLICY; typedef struct _MACHINE_PROCESSOR_POWER_POLICY { ULONG Revision; PROCESSOR_POWER_POLICY ProcessorPolicyAc; PROCESSOR_POWER_POLICY ProcessorPolicyDc; } MACHINE_PROCESSOR_POWER_POLICY, *PMACHINE_PROCESSOR_POWER_POLICY; typedef struct _USER_POWER_POLICY { ULONG Revision; POWER_ACTION_POLICY IdleAc; POWER_ACTION_POLICY IdleDc; ULONG IdleTimeoutAc; ULONG IdleTimeoutDc; UCHAR IdleSensitivityAc; UCHAR IdleSensitivityDc; UCHAR ThrottlePolicyAc; UCHAR ThrottlePolicyDc; SYSTEM_POWER_STATE MaxSleepAc; SYSTEM_POWER_STATE MaxSleepDc; ULONG Reserved[2]; ULONG VideoTimeoutAc; ULONG VideoTimeoutDc; ULONG SpindownTimeoutAc; ULONG SpindownTimeoutDc; BOOLEAN OptimizeForPowerAc; BOOLEAN OptimizeForPowerDc; UCHAR FanThrottleToleranceAc; UCHAR FanThrottleToleranceDc; UCHAR ForcedThrottleAc; UCHAR ForcedThrottleDc; } USER_POWER_POLICY, *PUSER_POWER_POLICY; typedef struct _POWER_POLICY { USER_POWER_POLICY user; MACHINE_POWER_POLICY mach; } POWER_POLICY, *PPOWER_POLICY; typedef enum _POWER_DATA_ACCESSOR { ACCESS_AC_POWER_SETTING_INDEX, ACCESS_DC_POWER_SETTING_INDEX, ACCESS_FRIENDLY_NAME, ACCESS_DESCRIPTION, ACCESS_POSSIBLE_POWER_SETTING, ACCESS_POSSIBLE_POWER_SETTING_FRIENDLY_NAME, ACCESS_POSSIBLE_POWER_SETTING_DESCRIPTION, ACCESS_DEFAULT_AC_POWER_SETTING, ACCESS_DEFAULT_DC_POWER_SETTING, ACCESS_POSSIBLE_VALUE_MIN, ACCESS_POSSIBLE_VALUE_MAX, ACCESS_POSSIBLE_VALUE_INCREMENT, ACCESS_POSSIBLE_VALUE_UNITS, ACCESS_ICON_RESOURCE, ACCESS_DEFAULT_SECURITY_DESCRIPTOR, ACCESS_ATTRIBUTES, ACCESS_SCHEME, ACCESS_SUBGROUP, ACCESS_INDIVIDUAL_SETTING, ACCESS_ACTIVE_SCHEME, ACCESS_CREATE_SCHEME, ACCESS_AC_POWER_SETTING_MAX, ACCESS_DC_POWER_SETTING_MAX, ACCESS_AC_POWER_SETTING_MIN, ACCESS_DC_POWER_SETTING_MIN, ACCESS_PROFILE, ACCESS_OVERLAY_SCHEME, ACCESS_ACTIVE_OVERLAY_SCHEME, } POWER_DATA_ACCESSOR, *PPOWER_DATA_ACCESSOR; #ifdef __cplusplus extern "C" { #endif typedef BOOLEAN (CALLBACK* PWRSCHEMESENUMPROC)(UINT, DWORD, LPWSTR, DWORD, LPWSTR, PPOWER_POLICY, LPARAM); NTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG); BOOLEAN WINAPI CanUserWritePwrScheme(VOID); BOOLEAN WINAPI DeletePwrScheme(UINT); BOOLEAN WINAPI EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM); BOOLEAN WINAPI GetActivePwrScheme(PUINT); BOOLEAN WINAPI GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY); BOOLEAN WINAPI GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES); BOOLEAN WINAPI GetPwrDiskSpindownRange(PUINT, PUINT); BOOLEAN WINAPI IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY); BOOLEAN WINAPI IsPwrHibernateAllowed(VOID); BOOLEAN WINAPI IsPwrShutdownAllowed(VOID); BOOLEAN WINAPI IsPwrSuspendAllowed(VOID); DWORD WINAPI PowerEnumerate(HKEY, const GUID *, const GUID *, POWER_DATA_ACCESSOR, ULONG, UCHAR *, DWORD *); BOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY); BOOLEAN WINAPI ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY); BOOLEAN WINAPI ReadPwrScheme(UINT, PPOWER_POLICY); BOOLEAN WINAPI SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY); BOOLEAN WINAPI SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN); BOOLEAN WINAPI WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY); BOOLEAN WINAPI WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY); BOOLEAN WINAPI WritePwrScheme(PUINT, LPWSTR, LPWSTR, PPOWER_POLICY); /* Power scheme */ POWER_PLATFORM_ROLE WINAPI PowerDeterminePlatformRole(void); #ifdef __cplusplus } #endif #endif /* _POWRPROF_H */ ================================================ FILE: wine/windows/prntvpt.h ================================================ /* * Copyright (C) 2015 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _PRNPTNTV_H_ #define _PRNPTNTV_H_ #ifdef __cplusplus extern "C" { #endif DECLARE_HANDLE(HPTPROVIDER); HRESULT WINAPI PTOpenProvider(const WCHAR *printer, DWORD version, HPTPROVIDER *provider); #ifdef __cplusplus } #endif #endif /* _PRNPTNTV_H_ */ ================================================ FILE: wine/windows/profinfo.h ================================================ /* * Copyright (C) 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_PROFINFO_H #define __WINE_PROFINFO_H typedef struct _PROFILEINFOA { DWORD dwSize; DWORD dwFlags; LPSTR lpUserName; LPSTR lpProfilePath; LPSTR lpDefaultPath; LPSTR lpServerName; LPSTR lpPolicyPath; HANDLE hProfile; } PROFILEINFOA, *LPPROFILEINFOA; typedef struct _PROFILEINFOW { DWORD dwSize; DWORD dwFlags; LPWSTR lpUserName; LPWSTR lpProfilePath; LPWSTR lpDefaultPath; LPWSTR lpServerName; LPWSTR lpPolicyPath; HANDLE hProfile; } PROFILEINFOW, *LPPROFILEINFOW; DECL_WINELIB_TYPE_AW(PROFILEINFO) DECL_WINELIB_TYPE_AW(LPPROFILEINFO) #endif /* __WINE_PROFINFO_H */ ================================================ FILE: wine/windows/propidl.idl ================================================ /* * Copyright 2002 Ove Kaaven * Copyright 2004 Francois Gouget * Copyright 2005 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "objidl.idl"; import "oaidl.idl"; #endif /* * Windows SDK braindamage alert * * PID_DICTIONARY and PID_CODEPAGE are defined by msidefs.h too * PID_SECURITY is defined in msidefs.h with a different value! * So these need to be undefined first. */ cpp_quote("#ifdef PID_DICTIONARY") cpp_quote("#undef PID_DICTIONARY") cpp_quote("#endif") cpp_quote("#ifdef PID_CODEPAGE") cpp_quote("#undef PID_CODEPAGE") cpp_quote("#endif") cpp_quote("#ifdef PID_SECURITY") cpp_quote("#undef PID_SECURITY") cpp_quote("#endif") /******************** Property Storage ********************/ interface IEnumSTATPROPSTG; interface IEnumSTATPROPSETSTG; [ object, uuid(00000138-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPropertyStorage : IUnknown { typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE; const DWORD PROPSETFLAG_DEFAULT = 0; const DWORD PROPSETFLAG_NONSIMPLE = 1; const DWORD PROPSETFLAG_ANSI = 2; const DWORD PROPSETFLAG_UNBUFFERED = 4; const DWORD PROPSETFLAG_CASE_SENSITIVE = 8; const DWORD PROPSET_BEHAVIOR_CASE_SENSITIVE = 1; const PROPID PID_DICTIONARY = 0x00000000; const PROPID PID_CODEPAGE = 0x00000001; const PROPID PID_FIRST_USABLE = 0x00000002; const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff; const PROPID PID_LOCALE = 0x80000000; const PROPID PID_MODIFY_TIME = 0x80000001; const PROPID PID_SECURITY = 0x80000002; const PROPID PID_BEHAVIOR = 0x80000003; const PROPID PID_ILLEGAL = 0xffffffff; const PROPID PID_MIN_READONLY = 0x80000000; const PROPID PID_MAX_READONLY = 0xbfffffff; typedef struct tagPROPVARIANT PROPVARIANT; #define TYPEDEF_CA(type, name) \ typedef struct tag##name { \ ULONG cElems; \ [size_is(cElems)] \ type *pElems; \ } name TYPEDEF_CA(unsigned char, CAUB); TYPEDEF_CA(short, CAI); TYPEDEF_CA(USHORT, CAUI); TYPEDEF_CA(long, CAL); TYPEDEF_CA(ULONG, CAUL); TYPEDEF_CA(float, CAFLT); TYPEDEF_CA(double, CADBL); TYPEDEF_CA(CY, CACY); TYPEDEF_CA(DATE, CADATE); TYPEDEF_CA(BSTR, CABSTR); TYPEDEF_CA(BSTRBLOB, CABSTRBLOB); TYPEDEF_CA(VARIANT_BOOL, CABOOL); TYPEDEF_CA(SCODE, CASCODE); TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT); TYPEDEF_CA(LARGE_INTEGER, CAH); TYPEDEF_CA(ULARGE_INTEGER, CAUH); TYPEDEF_CA(LPSTR, CALPSTR); TYPEDEF_CA(LPWSTR, CALPWSTR); TYPEDEF_CA(FILETIME, CAFILETIME); TYPEDEF_CA(CLIPDATA, CACLIPDATA); TYPEDEF_CA(CLSID, CACLSID); struct tagPROPVARIANT { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; [switch_is(vt & 0x1fff)] union { [case(VT_EMPTY, VT_NULL)] ; [case(VT_I1)] char cVal; [case(VT_UI1)] UCHAR bVal; [case(VT_I2)] short iVal; [case(VT_UI2)] USHORT uiVal; [case(VT_BOOL)] VARIANT_BOOL boolVal; #if 0 /* illegal in C++ */ [case(VT_ILLEGAL)] _VARIANT_BOOL bool; #endif [case(VT_I4)] long lVal; [case(VT_UI4)] ULONG ulVal; [case(VT_R4)] float fltVal; [case(VT_ERROR)] SCODE scode; [case(VT_I8)] LARGE_INTEGER hVal; [case(VT_UI8)] ULARGE_INTEGER uhVal; [case(VT_R8)] double dblVal; [case(VT_CY)] CY cyVal; [case(VT_DATE)] DATE date; [case(VT_FILETIME)] FILETIME filetime; [case(VT_CLSID)] CLSID *puuid; [case(VT_BLOB, VT_BLOB_OBJECT)] BLOB blob; [case(VT_CF)] CLIPDATA *pclipdata; [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream; [case(VT_STORAGE, VT_STORED_OBJECT)] IStorage *pStorage; [case(VT_BSTR)] BSTR bstrVal; [case(VT_BSTR_BLOB)] BSTRBLOB bstrblobVal; [case(VT_LPSTR)] LPSTR pszVal; [case(VT_LPWSTR)] LPWSTR pwszVal; [case(VT_UNKNOWN)] IUnknown *punkVal; [case(VT_DISPATCH)] IDispatch *pdispVal; [case(VT_UI1|VT_VECTOR)] CAUB caub; [case(VT_I2|VT_VECTOR)] CAI cai; [case(VT_UI2|VT_VECTOR)] CAUI caui; [case(VT_BOOL|VT_VECTOR)] CABOOL cabool; [case(VT_I4|VT_VECTOR)] CAL cal; [case(VT_UI4|VT_VECTOR)] CAUL caul; [case(VT_R4|VT_VECTOR)] CAFLT caflt; [case(VT_ERROR|VT_VECTOR)] CASCODE cascode; [case(VT_I8|VT_VECTOR)] CAH cah; [case(VT_UI8|VT_VECTOR)] CAUH cauh; [case(VT_R8|VT_VECTOR)] CADBL cadbl; [case(VT_CY|VT_VECTOR)] CACY cacy; [case(VT_DATE|VT_VECTOR)] CADATE cadate; [case(VT_FILETIME|VT_VECTOR)] CAFILETIME cafiletime; [case(VT_CLSID|VT_VECTOR)] CACLSID cauuid; [case(VT_CF|VT_VECTOR)] CACLIPDATA caclipdata; [case(VT_BSTR|VT_VECTOR)] CABSTR cabstr; [case(VT_BSTR_BLOB|VT_VECTOR)] CABSTRBLOB cabstrblob; [case(VT_LPSTR|VT_VECTOR)] CALPSTR calpstr; [case(VT_LPWSTR|VT_VECTOR)] CALPWSTR calpwstr; [case(VT_VARIANT|VT_VECTOR)] CAPROPVARIANT capropvar; [case(VT_ARRAY|VT_I1, VT_ARRAY|VT_UI1, VT_ARRAY|VT_I2, VT_ARRAY|VT_UI2, VT_ARRAY|VT_I4, VT_ARRAY|VT_UI4, VT_ARRAY|VT_INT, VT_ARRAY|VT_UINT, VT_ARRAY|VT_R4, VT_ARRAY|VT_R8, VT_ARRAY|VT_CY, VT_ARRAY|VT_DATE, VT_ARRAY|VT_BSTR, VT_ARRAY|VT_BOOL, VT_ARRAY|VT_DECIMAL, VT_ARRAY|VT_DISPATCH, VT_ARRAY|VT_UNKNOWN, VT_ARRAY|VT_ERROR, VT_ARRAY|VT_VARIANT)] LPSAFEARRAY parray; [case(VT_BYREF|VT_I1)] CHAR *pcVal; [case(VT_BYREF|VT_UI1)] UCHAR *pbVal; [case(VT_BYREF|VT_I2)] SHORT *piVal; [case(VT_BYREF|VT_UI2)] USHORT *puiVal; [case(VT_BYREF|VT_I4)] LONG *plVal; [case(VT_BYREF|VT_UI4)] ULONG *pulVal; [case(VT_BYREF|VT_INT)] INT *pintVal; [case(VT_BYREF|VT_UINT)] UINT *puintVal; [case(VT_BYREF|VT_R4)] FLOAT *pfltVal; [case(VT_BYREF|VT_R8)] DOUBLE *pdblVal; [case(VT_BYREF|VT_BOOL)] VARIANT_BOOL *pboolVal; [case(VT_BYREF|VT_DECIMAL)] DECIMAL *pdecVal; [case(VT_BYREF|VT_ERROR)] SCODE *pscode; [case(VT_BYREF|VT_CY)] CY *pcyVal; [case(VT_BYREF|VT_DATE)] DATE *pdate; [case(VT_BYREF|VT_BSTR)] BSTR *pbstrVal; [case(VT_BYREF|VT_UNKNOWN)] IUnknown **ppunkVal; [case(VT_BYREF|VT_DISPATCH)] IDispatch **ppdispVal; [case(VT_BYREF|VT_ARRAY)] LPSAFEARRAY *pparray; [case(VT_BYREF|VT_VARIANT)] PROPVARIANT *pvarVal; }; }; typedef struct tagPROPVARIANT *LPPROPVARIANT; cpp_quote("#if 0") typedef const PROPVARIANT * REFPROPVARIANT; cpp_quote("#endif") cpp_quote("#ifndef _REFPROPVARIANT_DEFINED") cpp_quote("#define _REFPROPVARIANT_DEFINED") cpp_quote("#ifdef __cplusplus") cpp_quote("#define REFPROPVARIANT const PROPVARIANT &") cpp_quote("#else") cpp_quote("#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST") cpp_quote("#endif") cpp_quote("#endif") cpp_quote("#define PIDDI_THUMBNAIL 0x00000002L /* VT_BLOB */") cpp_quote("") cpp_quote("#define PIDSI_TITLE 0x00000002L /* VT_LPSTR */") cpp_quote("#define PIDSI_SUBJECT 0x00000003L /* VT_LPSTR */") cpp_quote("#define PIDSI_AUTHOR 0x00000004L /* VT_LPSTR */") cpp_quote("#define PIDSI_KEYWORDS 0x00000005L /* VT_LPSTR */") cpp_quote("#define PIDSI_COMMENTS 0x00000006L /* VT_LPSTR */") cpp_quote("#define PIDSI_TEMPLATE 0x00000007L /* VT_LPSTR */") cpp_quote("#define PIDSI_LASTAUTHOR 0x00000008L /* VT_LPSTR */") cpp_quote("#define PIDSI_REVNUMBER 0x00000009L /* VT_LPSTR */") cpp_quote("#define PIDSI_EDITTIME 0x0000000AL /* VT_FILETIME (UTC) */") cpp_quote("#define PIDSI_LASTPRINTED 0x0000000BL /* VT_FILETIME (UTC) */") cpp_quote("#define PIDSI_CREATE_DTM 0x0000000CL /* VT_FILETIME (UTC) */") cpp_quote("#define PIDSI_LASTSAVE_DTM 0x0000000DL /* VT_FILETIME (UTC) */") cpp_quote("#define PIDSI_PAGECOUNT 0x0000000EL /* VT_I4 */") cpp_quote("#define PIDSI_WORDCOUNT 0x0000000FL /* VT_I4 */") cpp_quote("#define PIDSI_CHARCOUNT 0x00000010L /* VT_I4 */") cpp_quote("#define PIDSI_THUMBNAIL 0x00000011L /* VT_CF */") cpp_quote("#define PIDSI_APPNAME 0x00000012L /* VT_LPSTR */") cpp_quote("#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */") cpp_quote("") cpp_quote("#define PIDDSI_CATEGORY 0x00000002L /* VT_LPSTR */") cpp_quote("#define PIDDSI_PRESFORMAT 0x00000003L /* VT_LPSTR */") cpp_quote("#define PIDDSI_BYTECOUNT 0x00000004L /* VT_I4 */") cpp_quote("#define PIDDSI_LINECOUNT 0x00000005L /* VT_I4 */") cpp_quote("#define PIDDSI_PARCOUNT 0x00000006L /* VT_I4 */") cpp_quote("#define PIDDSI_SLIDECOUNT 0x00000007L /* VT_I4 */") cpp_quote("#define PIDDSI_NOTECOUNT 0x00000008L /* VT_I4 */") cpp_quote("#define PIDDSI_HIDDENCOUNT 0x00000009L /* VT_I4 */") cpp_quote("#define PIDDSI_MMCLIPCOUNT 0x0000000AL /* VT_I4 */") cpp_quote("#define PIDDSI_SCALE 0x0000000BL /* VT_BOOL */") cpp_quote("#define PIDDSI_HEADINGPAIR 0x0000000CL /* VT_VARIANT|VT_VECTOR */") cpp_quote("#define PIDDSI_DOCPARTS 0x0000000DL /* VT_LPSTR|VT_VECTOR */") cpp_quote("#define PIDDSI_MANAGER 0x0000000EL /* VT_LPSTR */") cpp_quote("#define PIDDSI_COMPANY 0x0000000FL /* VT_LPSTR */") cpp_quote("#define PIDDSI_LINKSDIRTY 0x00000010L /* VT_B0OL */") const ULONG PRSPEC_INVALID = 0xffffffff; const ULONG PRSPEC_LPWSTR = 0; const ULONG PRSPEC_PROPID = 1; typedef struct tagPROPSPEC { ULONG ulKind; [switch_is(ulKind)] union { [case(PRSPEC_PROPID)] PROPID propid; [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr; [default] ; } DUMMYUNIONNAME; } PROPSPEC; typedef struct tagSTATPROPSTG { LPOLESTR lpwstrName; PROPID propid; VARTYPE vt; } STATPROPSTG; cpp_quote("/* Macros for dwOSVersion member of STATPROPSETSTG */") cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD((dwOSVer))") cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD((dwOSVer)))") cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD((dwOSVer)))") cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN 0xffffffff") typedef struct tagSTATPROPSETSTG { FMTID fmtid; CLSID clsid; DWORD grfFlags; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD dwOSVersion; } STATPROPSETSTG; HRESULT ReadMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[], [out, size_is(cpspec)] PROPVARIANT rgpropvar[]); HRESULT WriteMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[], [in, size_is(cpspec)] const PROPVARIANT rgpropvar[], [in] PROPID propidNameFirst); HRESULT DeleteMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[]); HRESULT ReadPropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[], [out, size_is(cpropid)] LPOLESTR rglpwstrName[]); HRESULT WritePropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[], [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]); HRESULT DeletePropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[]); HRESULT Commit( [in] DWORD grfCommitFlags); HRESULT Revert(); HRESULT Enum( [out] IEnumSTATPROPSTG **ppenum); HRESULT SetTimes( [in] const FILETIME *pctime, [in] const FILETIME *patime, [in] const FILETIME *pmtime); HRESULT SetClass( [in] REFCLSID clsid); HRESULT Stat( [out] STATPROPSETSTG *statpsstg); } [ object, uuid(0000013A-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPropertySetStorage : IUnknown { typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE; HRESULT Create( [in] REFFMTID rfmtid, [in, unique] const CLSID *pclsid, [in] DWORD grfFlags, [in] DWORD grfMode, [out] IPropertyStorage **ppprstg); HRESULT Open( [in] REFFMTID rfmtid, [in] DWORD grfMode, [out] IPropertyStorage **ppprstg); HRESULT Delete( [in] REFFMTID rfmtid); HRESULT Enum( [out] IEnumSTATPROPSETSTG **ppenum); } [ object, uuid(00000139-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATPROPSTG : IUnknown { typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSTG *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSTG *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATPROPSTG **ppenum); } [ object, uuid(0000013B-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATPROPSETSTG : IUnknown { typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATPROPSETSTG **ppenum); } typedef struct SERIALIZEDPROPERTYVALUE { DWORD dwType; BYTE rgb[1]; } SERIALIZEDPROPERTYVALUE; cpp_quote("HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);") cpp_quote("HRESULT WINAPI PropVariantClear(PROPVARIANT*);") cpp_quote("HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);") cpp_quote("") cpp_quote("#define _PROPVARIANT_INIT_DEFINED_") cpp_quote("#define PropVariantInit(p) memset((p), 0, sizeof(PROPVARIANT))") cpp_quote("") cpp_quote("#ifndef _STGCREATEPROPSTG_DEFINED_") cpp_quote("#define _STGCREATEPROPSTG_DEFINED_") cpp_quote("HRESULT WINAPI StgCreatePropStg(IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **);") cpp_quote("HRESULT WINAPI StgOpenPropStg(IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **);") cpp_quote("HRESULT WINAPI StgCreatePropSetStg(IStorage *, DWORD, IPropertySetStorage **);") cpp_quote("#define CCH_MAX_PROPSTG_NAME 31") cpp_quote("HRESULT WINAPI FmtIdToPropStgName(const FMTID *, LPOLESTR);") cpp_quote("HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR, FMTID *);") cpp_quote("#endif /* _STGCREATEPROPSTG_DEFINED_ */") cpp_quote("") ================================================ FILE: wine/windows/propkey.h ================================================ /* * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _INC_PROPKEY #define _INC_PROPKEY #include DEFINE_PROPERTYKEY(PKEY_Audio_ChannelCount, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 7); DEFINE_PROPERTYKEY(PKEY_Audio_Compression, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 10); DEFINE_PROPERTYKEY(PKEY_Audio_Format, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 2); DEFINE_PROPERTYKEY(PKEY_Audio_IsVariableBitRate, 0xe6822fee, 0x8c17, 0x4d62, 0x82, 0x3c, 0x8e, 0x9c, 0xfc, 0xbd, 0x1d, 0x5c, 100); DEFINE_PROPERTYKEY(PKEY_Audio_PeakValue, 0x2579e5d0, 0x1116, 0x4084, 0xbd, 0x9a, 0x9b, 0x4f, 0x7c, 0xb4, 0xdf, 0x5e, 100); DEFINE_PROPERTYKEY(PKEY_Audio_SampleRate, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 5); DEFINE_PROPERTYKEY(PKEY_Audio_SampleSize, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 6); DEFINE_PROPERTYKEY(PKEY_Audio_StreamName, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 9); DEFINE_PROPERTYKEY(PKEY_Audio_StreamNumber, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 8); DEFINE_PROPERTYKEY(PKEY_Title, 0xf29f85e0,0x4ff9,0x1068,0xab,0x91,0x08,0x00,0x2b,0x27,0xb3,0xd9,2); DEFINE_PROPERTYKEY(PKEY_ItemName, 0x6b8da074,0x3b5c,0x43bc,0x88,0x6f,0x0a,0x2c,0xdc,0xe0,0x0b,0x6f,100); DEFINE_PROPERTYKEY(PKEY_AppUserModel_ExcludeFromShowInNewInstall, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,8); DEFINE_PROPERTYKEY(PKEY_AppUserModel_ID, 0x9f4c2855,0x9f79,0x4B39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,5); DEFINE_PROPERTYKEY(PKEY_AppUserModel_IsDestListSeparator, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,6); DEFINE_PROPERTYKEY(PKEY_AppUserModel_PreventPinning, 0x9f4c2855,0x9F79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,9); DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchCommand, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,2); DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchDisplayNameResource, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,4); DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchIconResource, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,3); #endif /*_INC_PROPKEY*/ ================================================ FILE: wine/windows/propkeydef.h ================================================ /* * Copyright (C) 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef PID_FIRST_USABLE #define PID_FIRST_USABLE 2 #endif #ifndef REFPROPERTYKEY #ifdef __cplusplus #define REFPROPERTYKEY const PROPERTYKEY & #else /*!__cplusplus*/ #define REFPROPERTYKEY const PROPERTYKEY * __MIDL_CONST #endif #endif #undef DEFINE_PROPERTYKEY #ifdef INITGUID #ifdef __cplusplus #define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \ EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name DECLSPEC_HIDDEN = \ { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } #else #define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \ const PROPERTYKEY DECLSPEC_SELECTANY name DECLSPEC_HIDDEN = \ { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } #endif #else #define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \ EXTERN_C const PROPERTYKEY name DECLSPEC_HIDDEN #endif #ifndef IsEqualPropertyKey #ifdef __cplusplus #define IsEqualPropertyKey(a,b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid,(b).fmtid)) #else #define IsEqualPropertyKey(a,b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid,&(b).fmtid)) #endif #endif #ifndef _PROPERTYKEY_EQUALITY_OPERATORS_ #define _PROPERTYKEY_EQUALITY_OPERATORS_ #ifdef __cplusplus extern "C++" { inline bool operator==(REFPROPERTYKEY guidOne, REFPROPERTYKEY guidOther) { return IsEqualPropertyKey(guidOne, guidOther); } inline bool operator!=(REFPROPERTYKEY guidOne, REFPROPERTYKEY guidOther) { return !(guidOne == guidOther); } } #endif #endif ================================================ FILE: wine/windows/propsys.idl ================================================ /* * system property interfaces * * Copyright 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ import "objidl.idl"; import "oleidl.idl"; import "ocidl.idl"; import "shtypes.idl"; import "structuredquerycondition.idl"; cpp_quote("#ifndef PSSTDAPI") cpp_quote("#define PSSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE") cpp_quote("#endif") cpp_quote("#if 0") typedef PROPERTYKEY *REFPROPERTYKEY; cpp_quote("#endif") cpp_quote("#include ") [ uuid(b7d14566-0509-4cce-a71f-0a554233bd9b), object, pointer_default(unique) ] interface IInitializeWithFile : IUnknown { HRESULT Initialize( [in,string] LPCWSTR pszFilePath, [in] DWORD grfMode ); } [ uuid(b824b49d-22ac-4161-ac8a-9916e8fa3f7f), object, pointer_default(unique) ] interface IInitializeWithStream : IUnknown { [local] HRESULT Initialize( [in] IStream *pstream, [in] DWORD grfMode ); } [ uuid(886d8eeb-8cf2-4446-8d02-cdba1dbdcf99), object, pointer_default(unique) ] interface IPropertyStore : IUnknown { HRESULT GetCount( [out] DWORD *cProps ); HRESULT GetAt( [in] DWORD iProp, [out] PROPERTYKEY *pkey ); HRESULT GetValue( [in] REFPROPERTYKEY key, [out] PROPVARIANT *pv ); HRESULT SetValue( [in] REFPROPERTYKEY key, [in] REFPROPVARIANT propvar ); HRESULT Commit(void); } typedef IPropertyStore *LPPROPERTYSTORE; [ uuid(71604b0f-97b0-4764-8577-2f13e98a1422), object, pointer_default(unique) ] interface INamedPropertyStore : IUnknown { HRESULT GetNamedValue( [in,string] LPCWSTR pszName, [out] PROPVARIANT *ppropvar ); HRESULT SetNamedValue( [in,string] LPCWSTR pszName, [in] REFPROPVARIANT propvar ); HRESULT GetNameCount( [out] DWORD *pdwCount ); HRESULT GetNameAt( [in] DWORD iProp, [out] BSTR *pbstrName ); } typedef [v1_enum] enum GETPROPERTYSTOREFLAGS { GPS_DEFAULT = 0x00, GPS_HANDLERPROPERTIESONLY = 0x01, GPS_READWRITE = 0x02, GPS_TEMPORARY = 0x04, GPS_FASTPROPERTIESONLY = 0x08, GPS_OPENSLOWITEM = 0x10, GPS_DELAYCREATION = 0x20, GPS_BESTEFFORT = 0x40, GPS_NO_OPLOCK = 0x80, GPS_MASK_VALID = 0xff } GETPROPERTYSTOREFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(GETPROPERTYSTOREFLAGS)") [ uuid(fc0ca0a7-c316-4fd2-9031-3e628e6d4f23), object ] interface IObjectWithPropertyKey : IUnknown { HRESULT SetPropertyKey( [in] REFPROPERTYKEY key ); HRESULT GetPropertyKey( [out] PROPERTYKEY *key ); } typedef [v1_enum] enum PKA_FLAGS { PKA_SET, PKA_APPEND, PKA_DELETE } PKA_FLAGS; [ uuid(f917bc8a-1bba-4478-a245-1bde03eb9431), object, pointer_default(unique) ] interface IPropertyChange : IObjectWithPropertyKey { HRESULT ApplyToPropVariant([in] REFPROPVARIANT propvarin, [out] PROPVARIANT *propvarout); } [ uuid(380f5cad-1b5e-42f2-805d-637fd392d31e), object, pointer_default(unique) ] interface IPropertyChangeArray : IUnknown { HRESULT GetCount( [out] UINT *pcOperations ); HRESULT GetAt( [in] UINT iIndex, [in] REFIID riid, [out, iid_is(riid)] void **ppv ); HRESULT InsertAt( [in] UINT iIndex, [in] IPropertyChange *ppropChange ); HRESULT Append( [in] IPropertyChange *ppropChange ); HRESULT AppendOrReplace( [in] IPropertyChange *ppropChange ); HRESULT RemoveAt( [in] UINT iIndex ); HRESULT IsKeyInArray( [in] REFPROPERTYKEY key ); } [ uuid(c8e2d566-186e-4d49-bf41-6909ead56acc), object, pointer_default(unique) ] interface IPropertyStoreCapabilities : IUnknown { HRESULT IsPropertyWritable( [in] REFPROPERTYKEY key ); } [ uuid(3017056d-9a91-4e90-937d-746c72abbf4f), object, pointer_default(unique) ] interface IPropertyStoreCache : IPropertyStore { typedef [v1_enum] enum PSC_STATE { PSC_NORMAL = 0, PSC_NOTINSOURCE, PSC_DIRTY, PSC_READONLY } PSC_STATE; HRESULT GetState( [in] REFPROPERTYKEY key, [out] PSC_STATE *pstate ); HRESULT GetValueAndState( [in] REFPROPERTYKEY key, [out] PROPVARIANT *ppropvar, [out] PSC_STATE *pstate ); HRESULT SetState( [in] REFPROPERTYKEY key, [in] PSC_STATE pstate ); HRESULT SetValueAndState( [in] REFPROPERTYKEY key, [in, unique] const PROPVARIANT *ppropvar, [in] PSC_STATE state ); } [ uuid(11e1fbf9-2d56-4a6b-8db3-7cd193a471f2), object, pointer_default(unique) ] interface IPropertyEnumType : IUnknown { typedef [v1_enum] enum PROPENUMTYPE { PET_DISCRETEVALUE = 0, PET_RANGEDVALUE, PET_DEFAULTVALUE, PET_ENDRANGE } PROPENUMTYPE; HRESULT GetEnumType( [out] PROPENUMTYPE *penumtype ); HRESULT GetValue( [out] PROPVARIANT *ppropvar ); HRESULT GetRangeMinValue( [out] PROPVARIANT *ppropvar ); HRESULT GetRangeSetValue( [out] PROPVARIANT *ppropvar ); HRESULT GetDisplayText( [out] LPWSTR *ppszDisplay ); } [ uuid(9b6e051c-5ddd-4321-9070-fe2acb55e974), object, pointer_default(unique) ] interface IPropertyEnumType2 : IPropertyEnumType { HRESULT GetImageReference( [out] LPWSTR *ppszImageRes ); } [ uuid(a99400f4-3d84-4557-94ba-1242fb2cc9a6), object, pointer_default(unique) ] interface IPropertyEnumTypeList : IUnknown { HRESULT GetCount( [out] UINT *pctypes ); HRESULT GetAt( [in] UINT itype, [in] REFIID riid, [out, iid_is(riid)] void **ppv ); HRESULT GetConditionAt( [in] UINT nIndex, [in] REFIID riid, [out, iid_is(riid)] void **ppv ); HRESULT FindMatchingIndex( [in] REFPROPVARIANT propvarCmp, [out] UINT *pnIndex ); } [ uuid(6f79d558-3e96-4549-a1d1-7d75d2288814), object, pointer_default(unique) ] interface IPropertyDescription : IUnknown { typedef [v1_enum] enum PROPDESC_TYPE_FLAGS { PDTF_DEFAULT = 0, PDTF_MULTIPLEVALUES = 0x001, PDTF_ISINNATE = 0x002, PDTF_ISGROUP = 0x004, PDTF_CANGROUPBY = 0x008, PDTF_CANSTACKBY = 0x010, PDTF_ISTREEPROPERTY = 0x020, PDTF_INCLUDEINFULLTEXTQUERY = 0x040, PDTF_ISVIEWABLE = 0x080, PDTF_ISQUERYABLE = 0x100, PDTF_CANBEPURGED = 0x200, PDTF_SEARCHRAWVALUE = 0x400, PDTF_ISSYSTEMPROPERTY = 0x80000000, PDTF_MASK_ALL = 0x800007ff } PROPDESC_TYPE_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_TYPE_FLAGS)") typedef [v1_enum] enum PROPDESC_VIEW_FLAGS { PDVF_DEFAULT = 0x0000, PDVF_CENTERALIGN = 0x0001, PDVF_RIGHTALIGN = 0x0002, PDVF_BEGINNEWGROUP = 0x0004, PDVF_FILLAREA = 0x0008, PDVF_SORTDESCENDING = 0x0010, PDVF_SHOWONLYIFPRESENT = 0x0020, PDVF_SHOWBYDEFAULT = 0x0040, PDVF_SHOWINPRIMARYLIST = 0x0080, PDVF_SHOWINSECONDARYLIST = 0x0100, PDVF_HIDELABEL = 0x0200, PDVF_HIDDEN = 0x0800, PDVF_CANWRAP = 0x1000, PDVF_MASK_ALL = 0x1bff } PROPDESC_VIEW_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_VIEW_FLAGS)") typedef [v1_enum] enum PROPDESC_DISPLAYTYPE { PDDT_STRING = 0, PDDT_NUMBER, PDDT_BOOLEAN, PDDT_DATETIME, PDDT_ENUMERATED } PROPDESC_DISPLAYTYPE; typedef [v1_enum] enum PROPDESC_GROUPING_RANGE { PDGR_DISCRETE = 0, PDGR_ALPHANUMERIC, PDGR_SIZE, PDGR_DYNAMIC, PDGR_DATE, PDGR_PERCENT, PDGR_ENUMERATED } PROPDESC_GROUPING_RANGE; typedef [v1_enum] enum PROPDESC_FORMAT_FLAGS { PDFF_DEFAULT = 0x0000, PDFF_PREFIXNAME = 0x0001, PDFF_FILENAME = 0x0002, PDFF_ALWAYSKB = 0x0004, PDFF_RESERVED_RIGHTTOLEFT = 0x0008, PDFF_SHORTTIME = 0x0010, PDFF_LONGTIME = 0x0020, PDFF_HIDETIME = 0x0040, PDFF_SHORTDATE = 0x0080, PDFF_LONGDATE = 0x0100, PDFF_HIDEDATE = 0x0200, PDFF_RELATIVEDATE = 0x0400, PDFF_USEEDITINVITATION = 0x0800, PDFF_READONLY = 0x1000, PDFF_NOAUTOREADINGORDER = 0x2000 } PROPDESC_FORMAT_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_FORMAT_FLAGS)") typedef [v1_enum] enum PROPDESC_SORTDESCRIPTION { PDSD_GENERAL = 0, PDSD_A_Z, PDSD_LOWEST_HIGHEST, PDSD_SMALLEST_BIGGEST, PDSD_OLDEST_NEWEST } PROPDESC_SORTDESCRIPTION; typedef [v1_enum] enum PROPDESC_RELATIVEDESCRIPTION_TYPE { PDRDT_GENERAL = 0, PDRDT_DATE, PDRDT_SIZE, PDRDT_COUNT, PDRDT_REVISION, PDRDT_LENGTH, PDRDT_DURATION, PDRDT_SPEED, PDRDT_RATE, PDRDT_RATING, PDRDT_PRIORITY } PROPDESC_RELATIVEDESCRIPTION_TYPE; typedef [v1_enum] enum PROPDESC_AGGREGATION_TYPE { PDAT_DEFAULT = 0, PDAT_FIRST, PDAT_SUM, PDAT_AVERAGE, PDAT_DATERANGE, PDAT_UNION, PDAT_MAX, PDAT_MIN } PROPDESC_AGGREGATION_TYPE; typedef [v1_enum] enum PROPDESC_CONDITION_TYPE { PDCOT_NONE = 0, PDCOT_STRING, PDCOT_SIZE, PDCOT_DATETIME, PDCOT_BOOLEAN, PDCOT_NUMBER } PROPDESC_CONDITION_TYPE; HRESULT GetPropertyKey( [out] PROPERTYKEY *pkey ); HRESULT GetCanonicalName( [out, string] LPWSTR *ppszName ); HRESULT GetPropertyType( [out] VARTYPE *pvartype ); HRESULT GetDisplayName( [out, string] LPWSTR *ppszName ); HRESULT GetEditInvitation( [out, string] LPWSTR *ppszName ); HRESULT GetTypeFlags( [in] PROPDESC_TYPE_FLAGS mask, [out] PROPDESC_TYPE_FLAGS *ppdtFlags ); HRESULT GetViewFlags( [out] PROPDESC_VIEW_FLAGS *ppdvFlags ); HRESULT GetDefaultColumnWidth( [out] UINT *pcxChars ); HRESULT GetDisplayType( [out] PROPDESC_DISPLAYTYPE *pdisplaytype ); HRESULT GetColumnState( [out] SHCOLSTATEF *pcsFlags ); HRESULT GetGroupingRange( [out] PROPDESC_GROUPING_RANGE *psd ); HRESULT GetRelativeDescriptionType( [out] PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt ); HRESULT GetRelativeDescription( [in] REFPROPVARIANT propvar1, [in] REFPROPVARIANT propvar2, [out,string] LPWSTR *ppszDesc1, [out,string] LPWSTR *ppszDesc2 ); HRESULT GetSortDescription( [out] PROPDESC_SORTDESCRIPTION *psd ); HRESULT GetSortDescriptionLabel( [in] BOOL fDescending, [out,string] LPWSTR *ppszDescription ); HRESULT GetAggregationType( [out] PROPDESC_AGGREGATION_TYPE *paggtype ); HRESULT GetConditionType( [out] PROPDESC_CONDITION_TYPE *pcontype, [out] CONDITION_OPERATION *popDefault ); HRESULT GetEnumTypeList( [in] REFIID riid, [out,iid_is(riid)] void **ppv ); [local] HRESULT CoerceToCanonicalValue( [in,out] PROPVARIANT *propvar ); [call_as(CoerceToCanonicalValue)] HRESULT RemoteCoerceToCanonicalValue( [in] REFPROPVARIANT propvar, [out] PROPVARIANT *ppropvar ); HRESULT FormatForDisplay( [in] REFPROPVARIANT propvar, [in] PROPDESC_FORMAT_FLAGS flags, [out,string] LPWSTR *ppszDisplay ); HRESULT IsValueCanonical( [in] REFPROPVARIANT propvar ); } [ uuid(57d2eded-5062-400e-b107-5dae79fe57a6), object, pointer_default(unique) ] interface IPropertyDescription2 : IPropertyDescription { HRESULT GetImageReferenceForValue( [in] REFPROPVARIANT propvar, [out,string] LPWSTR *ppszImageRes ); } [ uuid(f67104fc-2af9-46fd-b32d-243c1404f3d1), object, pointer_default(unique) ] interface IPropertyDescriptionAliasInfo : IPropertyDescription { HRESULT GetSortByAlias( [in] REFIID riid, [out,iid_is(riid)] void **ppv ); HRESULT GetAdditionalSortByAliases( [in] REFIID riid, [out,iid_is(riid)] void **ppv ); } [ uuid(078f91bd-29a2-440f-924e-46a291524520), object, pointer_default(unique) ] interface IPropertyDescriptionSearchInfo : IPropertyDescription { typedef [v1_enum] enum PROPDESC_SEARCHINFO_FLAGS { PDSIF_DEFAULT = 0x0, PDSIF_ININVERTEDINDEX = 0x1, PDSIF_ISCOLUMN = 0x2, PDSIF_ISCOLUMNSPARSE = 0x4, PDSIF_ALWAYSINCLUDE = 0x8, } PROPDESC_SEARCHINFO_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_SEARCHINFO_FLAGS)") typedef [v1_enum] enum PROPDESC_COLUMNINDEX_TYPE { PDCIT_NONE = 0, PDCIT_ONDISK, PDCIT_INMEMORY, PDCIT_ONDEMAND, PDCIT_ONDISKALL, PDCIT_ONDISKVECTOR } PROPDESC_COLUMNINDEX_TYPE; HRESULT GetSearchInfoFlags( [out] PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags ); HRESULT GetColumnIndexType( [out] PROPDESC_COLUMNINDEX_TYPE *ppdciType ); HRESULT GetProjectionString( [out] LPWSTR *ppszProjection ); HRESULT GetMaxSize( [out] UINT *pcbMaxSize ); } [ uuid(507393f4-2a3d-4a60-b59e-d9c75716c2dd), object, pointer_default(unique) ] interface IPropertyDescriptionRelatedPropertyInfo : IPropertyDescription { HRESULT GetRelatedProperty( [in] LPCWSTR ppszRelationshipName, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); } typedef [v1_enum] enum PROPDESC_ENUMFILTER { PDEF_ALL = 0, PDEF_SYSTEM, PDEF_NONSYSTEM, PDEF_VIEWABLE, PDEF_QUERYABLE, PDEF_INFULLTEXTQUERY, PDEF_COLUMN } PROPDESC_ENUMFILTER; [ uuid(ca724e8a-c3e6-442b-88a4-6fb0db8035a3), object, pointer_default(unique) ] interface IPropertySystem : IUnknown { HRESULT GetPropertyDescription( [in] REFPROPERTYKEY propkey, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); HRESULT GetPropertyDescriptionByName( [in,string] LPCWSTR pszCanonicalName, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); HRESULT GetPropertyDescriptionListFromString( [in,string] LPCWSTR pszPropList, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); HRESULT EnumeratePropertyDescriptions( [in] PROPDESC_ENUMFILTER filterOn, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); HRESULT FormatForDisplay( [in] REFPROPERTYKEY key, [in] REFPROPVARIANT propvar, [in] PROPDESC_FORMAT_FLAGS pdff, [out,string,size_is(cchText)] LPWSTR pszText, [in] DWORD cchText ); HRESULT FormatForDisplayAlloc( [in] REFPROPERTYKEY key, [in] REFPROPVARIANT propvar, [in] PROPDESC_FORMAT_FLAGS pdff, [out,string] LPWSTR *pszText ); HRESULT RegisterPropertySchema( [in,string] LPCWSTR pszPath ); HRESULT UnregisterPropertySchema( [in,string] LPCWSTR pszPath ); HRESULT RefreshPropertySchema(void); } [ uuid(1f9fc1d0-c39b-4b26-817f-011967d3440e), object, pointer_default(unique) ] interface IPropertyDescriptionList : IUnknown { HRESULT GetCount( [out] UINT *pcelem ); HRESULT GetAt( [in] UINT iElem, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); } [ uuid(bc110b6d-57e8-4148-a9c6-91015ab2f3a5), object, pointer_default(unique) ] interface IPropertyStoreFactory : IUnknown { HRESULT GetPropertyStore( [in] GETPROPERTYSTOREFLAGS flags, [in,unique] IUnknown *pUnkFactory, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); HRESULT GetPropertyStoreForKeys( [in,unique] const PROPERTYKEY *rgKeys, [in] UINT cKeys, [in] GETPROPERTYSTOREFLAGS flags, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); } [ uuid(40d4577f-e237-4bdb-bd69-58f089431b6a), object, pointer_default(unique) ] interface IDelayedPropertyStoreFactory : IPropertyStoreFactory { HRESULT GetDelayedPropertyStore( [in] GETPROPERTYSTOREFLAGS flags, [in] DWORD dwStoreId, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); } [v1_enum] enum _PERSIST_SPROPSTORE_FLAGS { FPSPS_DEFAULT = 0, FPSPS_READONLY = 1 }; typedef int PERSIST_SPROPSTORE_FLAGS; typedef struct tagSERIALIZEDROPSTORAGE SERIALIZEDPROPSTORAGE; cpp_quote("#if 0") /* Wine doesn't have __unaligned builtin, hack */ typedef SERIALIZEDPROPSTORAGE *PUSERIALIZEDPROPSTORAGE; typedef const SERIALIZEDPROPSTORAGE *PCUSERIALIZEDPROPSTORAGE; cpp_quote("#endif") cpp_quote("typedef SERIALIZEDPROPSTORAGE UNALIGNED *PUSERIALIZEDPROPSTORAGE;") cpp_quote("typedef const SERIALIZEDPROPSTORAGE UNALIGNED *PCUSERIALIZEDPROPSTORAGE;") [ uuid(e318ad57-0aa0-450f-aca5-6fab7103d917), pointer_default(unique), local ] interface IPersistSerializedPropStorage : IUnknown { HRESULT SetFlags( [in] PERSIST_SPROPSTORE_FLAGS flags ); HRESULT SetPropertyStorage( [in] PCUSERIALIZEDPROPSTORAGE psps, [in] DWORD cb ); HRESULT GetPropertyStorage( [out] SERIALIZEDPROPSTORAGE **psps, [out] DWORD *pcb ); } [ uuid(77effa68-4f98-4366-ba72-573b3d880571), pointer_default(unique), local ] interface IPersistSerializedPropStorage2 : IPersistSerializedPropStorage { HRESULT GetpropertyStorageSize( [out] DWORD *pcb ); HRESULT GetPropertyStorageBuffer( [out] SERIALIZEDPROPSTORAGE *psps, [in] DWORD cb, [out] DWORD *pcbWritten ); } [ uuid(fa955fd9-38be-4879-a6ce-824cf52d609f), object, pointer_default(unique) ] interface IPropertySystemChangeNotify : IUnknown { HRESULT SchemaRefreshed(void); } /* Interface for CoCreateInstance? */ [ uuid(75121952-e0d0-43e5-9380-1d80483acf72), pointer_default(unique) ] interface ICreateObject : IUnknown { HRESULT CreateObject( [in] REFCLSID clsid, [in,unique] IUnknown *pUnkOuter, [in] REFIID riid, [out,iid_is(riid)] void **ppv ); } cpp_quote("#define PKEY_PIDSTR_MAX 10") cpp_quote("#define GUIDSTRING_MAX 39") cpp_quote("#define PKEYSTR_MAX (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)") cpp_quote("HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY,LPWSTR,UINT);") cpp_quote("HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR,PROPERTYKEY*);") cpp_quote("HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY,REFIID,void **);") cpp_quote("HRESULT WINAPI PSGetPropertyDescriptionListFromString(LPCWSTR,REFIID,void **);") cpp_quote("HRESULT WINAPI PSRefreshPropertySchema(void);") cpp_quote("HRESULT WINAPI PSRegisterPropertySchema(LPCWSTR);") cpp_quote("HRESULT WINAPI PSUnregisterPropertySchema(LPCWSTR);") /* TODO: Add remainder of the C api here */ [ uuid(2cda3294-6c4f-4020-b161-27c530c81fa6), lcid(0x0000), version(1.0) ] library PropSysObjects { [uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)] coclass InMemoryPropertyStore { interface IPropertyStore; } [uuid(b8967f86-58ae-4f96-9fb2-5d7904798f4b)] coclass PropertySystem { interface IPropertySystem; } } ================================================ FILE: wine/windows/propvarutil.h ================================================ /* * Copyright 2008 James Hawkins for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_PROPVARUTIL_H #define __WINE_PROPVARUTIL_H #include #include enum tagPROPVAR_CHANGE_FLAGS { PVCHF_DEFAULT = 0x00000000, PVCHF_NOVALUEPROP = 0x00000001, PVCHF_ALPHABOOL = 0x00000002, PVCHF_NOUSEROVERRIDE = 0x00000004, PVCHF_LOCALBOOL = 0x00000008, PVCHF_NOHEXSTRING = 0x00000010, }; typedef int PROPVAR_CHANGE_FLAGS; enum tagPROPVAR_COMPARE_UNIT { PVCU_DEFAULT = 0x00000000, PVCU_SECOND = 0x00000001, PVCU_MINUTE = 0x00000002, PVCU_HOUR = 0x00000003, PVCU_DAY = 0x00000004, PVCU_MONTH = 0x00000005, PVCU_YEAR = 0x00000006, }; typedef int PROPVAR_COMPARE_UNIT; enum tagPROPVAR_COMPARE_FLAGS { PVCF_DEFAULT = 0x00000000, PVCF_TREATEMPTYASGREATERTHAN = 0x00000001, PVCF_USESTRCMP = 0x00000002, PVCF_USESTRCMPC = 0x00000004, PVCF_USESTRCMPI = 0x00000008, PVCF_USESTRCMPIC = 0x00000010, }; typedef int PROPVAR_COMPARE_FLAGS; HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc, PROPVAR_CHANGE_FLAGS flags, VARTYPE vt); HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar); HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar); HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar); HRESULT WINAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar); HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar); HRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid); HRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid); INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2, PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags); HRESULT WINAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret); HRESULT WINAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret); HRESULT WINAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret); HRESULT WINAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret); HRESULT WINAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret); HRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret); HRESULT WINAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, BOOL *ret); PCWSTR WINAPI PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault); HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret); #ifdef __cplusplus HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar); HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar); HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar); #ifndef NO_PROPVAR_INLINES inline HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar) { ppropvar->vt = VT_BOOL; ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar) { HRESULT hres; hres = SHStrDupW(psz, &ppropvar->pwszVal); if(SUCCEEDED(hres)) ppropvar->vt = VT_LPWSTR; else PropVariantInit(ppropvar); return hres; } inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar) { ppropvar->vt = VT_I8; ppropvar->hVal.QuadPart = llVal; return S_OK; } #endif #endif #endif /* __WINE_PROPVARUTIL_H */ ================================================ FILE: wine/windows/prsht.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_PRSHT_H #define __WINE_PRSHT_H #ifdef __cplusplus extern "C" { #endif /* * Property sheet support (callback procs) */ #define WC_PROPSHEETA "SysPropertySheet" #if defined(__GNUC__) # define WC_PROPSHEETW (const WCHAR []){ 'S','y','s', \ 'P','r','o','p','e','r','t','y','S','h','e','e','t',0 } #elif defined(_MSC_VER) # define WC_PROPSHEETW L"SysPropertySheet" #else static const WCHAR WC_PROPSHEETW[] = { 'S','y','s', 'P','r','o','p','e','r','t','y','S','h','e','e','t',0 }; #endif #define WC_PROPSHEET WINELIB_NAME_AW(WC_PROPSHEET) struct _PROPSHEETPAGEA; /** need to forward declare those structs **/ struct _PROPSHEETPAGEW; struct _PSP; #ifndef _HPROPSHEETPAGE_DEFINED #define _HPROPSHEETPAGE_DEFINED typedef struct _PSP *HPROPSHEETPAGE; #endif /* _HPROPSHEETPAGE_DEFINED */ typedef UINT (CALLBACK *LPFNPSPCALLBACKA)(HWND, UINT, struct _PROPSHEETPAGEA*); typedef UINT (CALLBACK *LPFNPSPCALLBACKW)(HWND, UINT, struct _PROPSHEETPAGEW*); typedef INT (CALLBACK *PFNPROPSHEETCALLBACK)(HWND, UINT, LPARAM); typedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM); typedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM); /* * Property sheet support (structures) */ typedef LPCDLGTEMPLATEA PROPSHEETPAGE_RESOURCEA; typedef LPCDLGTEMPLATEW PROPSHEETPAGE_RESOURCEW; DECL_WINELIB_TYPE_AW(PROPSHEETPAGE_RESOURCE) typedef struct _PROPSHEETPAGEA { DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCSTR pszTemplate; PROPSHEETPAGE_RESOURCEA pResource; } DUMMYUNIONNAME; union { HICON hIcon; LPCSTR pszIcon; } DUMMYUNIONNAME2; LPCSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKA pfnCallback; UINT* pcRefParent; LPCSTR pszHeaderTitle; LPCSTR pszHeaderSubTitle; HANDLE hActCtx; union { HBITMAP hbmHeader; LPCSTR pszbmHeader; } DUMMYUNIONNAME3; } PROPSHEETPAGEA, *LPPROPSHEETPAGEA, PROPSHEETPAGEA_LATEST, *LPPROPSHEETPAGEA_LATEST; typedef const PROPSHEETPAGEA *LPCPROPSHEETPAGEA, *LPCPROPSHEETPAGEA_LATEST; #define PROPSHEETPAGEA_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, pcRefParent) #define PROPSHEETPAGEA_V2_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, pszHeaderSubTitle) #define PROPSHEETPAGEA_V3_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, hActCtx) #define PROPSHEETPAGEA_V4_SIZE sizeof(PROPSHEETPAGEA) typedef struct _PROPSHEETPAGEW { DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { LPCWSTR pszTemplate; PROPSHEETPAGE_RESOURCEW pResource; } DUMMYUNIONNAME; union { HICON hIcon; LPCWSTR pszIcon; } DUMMYUNIONNAME2; LPCWSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACKW pfnCallback; UINT* pcRefParent; LPCWSTR pszHeaderTitle; LPCWSTR pszHeaderSubTitle; HANDLE hActCtx; union { HBITMAP hbmHeader; LPCWSTR pszbmHeader; } DUMMYUNIONNAME3; } PROPSHEETPAGEW, *LPPROPSHEETPAGEW, PROPSHEETPAGEW_LATEST, *LPPROPSHEETPAGEW_LATEST; typedef const PROPSHEETPAGEW *LPCPROPSHEETPAGEW, *LPCPROPSHEETPAGEW_LATEST; #define PROPSHEETPAGEW_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, pcRefParent) #define PROPSHEETPAGEW_V2_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, pszHeaderSubTitle) #define PROPSHEETPAGEW_V3_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, hActCtx) #define PROPSHEETPAGEW_V4_SIZE sizeof(PROPSHEETPAGEW) typedef struct _PROPSHEETHEADERA { DWORD dwSize; DWORD dwFlags; HWND hwndParent; HINSTANCE hInstance; union { HICON hIcon; LPCSTR pszIcon; }DUMMYUNIONNAME; LPCSTR pszCaption; UINT nPages; union { UINT nStartPage; LPCSTR pStartPage; }DUMMYUNIONNAME2; union { LPCPROPSHEETPAGEA ppsp; HPROPSHEETPAGE* phpage; }DUMMYUNIONNAME3; PFNPROPSHEETCALLBACK pfnCallback; union { HBITMAP hbmWatermark; LPCSTR pszbmWatermark; }DUMMYUNIONNAME4; HPALETTE hplWatermark; union { HBITMAP hbmHeader; LPCSTR pszbmHeader; }DUMMYUNIONNAME5; } PROPSHEETHEADERA, *LPPROPSHEETHEADERA; typedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA; #define PROPSHEETHEADERA_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETHEADERA, pfnCallback) #define PROPSHEETHEADERA_V2_SIZE sizeof(PROPSHEETHEADERA) typedef struct _PROPSHEETHEADERW { DWORD dwSize; DWORD dwFlags; HWND hwndParent; HINSTANCE hInstance; union { HICON hIcon; LPCWSTR pszIcon; }DUMMYUNIONNAME; LPCWSTR pszCaption; UINT nPages; union { UINT nStartPage; LPCWSTR pStartPage; }DUMMYUNIONNAME2; union { LPCPROPSHEETPAGEW ppsp; HPROPSHEETPAGE* phpage; }DUMMYUNIONNAME3; PFNPROPSHEETCALLBACK pfnCallback; union { HBITMAP hbmWatermark; LPCWSTR pszbmWatermark; }DUMMYUNIONNAME4; HPALETTE hplWatermark; union { HBITMAP hbmHeader; LPCWSTR pszbmHeader; }DUMMYUNIONNAME5; } PROPSHEETHEADERW, *LPPROPSHEETHEADERW; typedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW; #define PROPSHEETHEADERW_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETHEADERW, pfnCallback) #define PROPSHEETHEADERW_V2_SIZE sizeof(PROPSHEETHEADERW) /* * Property sheet support (methods) */ INT_PTR WINAPI PropertySheetA(LPCPROPSHEETHEADERA); INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW); #define PropertySheet WINELIB_NAME_AW(PropertySheet) HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(LPCPROPSHEETPAGEA); HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW); #define CreatePropertySheetPage WINELIB_NAME_AW(CreatePropertySheetPage) BOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE hPropPage); /* * Property sheet support (UNICODE-Winelib) */ DECL_WINELIB_TYPE_AW(PROPSHEETPAGE) DECL_WINELIB_TYPE_AW(LPPROPSHEETPAGE) DECL_WINELIB_TYPE_AW(LPCPROPSHEETPAGE) DECL_WINELIB_TYPE_AW(PROPSHEETHEADER) DECL_WINELIB_TYPE_AW(LPPROPSHEETHEADER) DECL_WINELIB_TYPE_AW(LPCPROPSHEETHEADER) DECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK) #ifdef WINE_NO_UNICODE_MACROS # define PRSHT_NAME_AW(base, suffix) \ base##_##suffix##_must_use_W_or_A_in_this_context \ base##_##suffix##_must_use_W_or_A_in_this_context # define DECL_PRSHT_TYPE_AW(base, suffix) /* nothing */ #else /* WINE_NO_UNICODE_MACROS */ # ifdef UNICODE # define PRSHT_NAME_AW(base, suffix) base##W_##suffix # else # define PRSHT_NAME_AW(base, suffix) base##A_##suffix # endif # define DECL_PRSHT_TYPE_AW(base, suffix) typedef PRSHT_NAME_AW(base, suffix) base##_##suffix; #endif /* WINE_NO_UNICODE_MACROS */ DECL_PRSHT_TYPE_AW(PROPSHEETPAGE, LATEST) DECL_PRSHT_TYPE_AW(LPPROPSHEETPAGE, LATEST) DECL_PRSHT_TYPE_AW(LPCPROPSHEETPAGE, LATEST) #define PROPSHEETPAGE_V1_SIZE PRSHT_NAME_AW(PROPSHEETPAGE, V1_SIZE) #define PROPSHEETPAGE_V2_SIZE PRSHT_NAME_AW(PROPSHEETPAGE, V2_SIZE) #define PROPSHEETPAGE_V3_SIZE PRSHT_NAME_AW(PROPSHEETPAGE, V3_SIZE) #define PROPSHEETPAGE_V4_SIZE PRSHT_NAME_AW(PROPSHEETPAGE, V4_SIZE) #define PROPSHEETHEADER_V1_SIZE PRSHT_NAME_AW(PROPSHEETHEADER, V1_SIZE) #define PROPSHEETHEADER_V2_SIZE PRSHT_NAME_AW(PROPSHEETHEADER, V2_SIZE) #undef PRSHT_NAME_AW #undef DECL_PRSHT_TYPE_AW /* * Property sheet support (defines) */ #define PSP_DEFAULT 0x0000 #define PSP_DLGINDIRECT 0x0001 #define PSP_USEHICON 0x0002 #define PSP_USEICONID 0x0004 #define PSP_USETITLE 0x0008 #define PSP_RTLREADING 0x0010 #define PSP_HASHELP 0x0020 #define PSP_USEREFPARENT 0x0040 #define PSP_USECALLBACK 0x0080 #define PSP_PREMATURE 0x0400 #define PSP_HIDEHEADER 0x00000800 #define PSP_USEHEADERTITLE 0x00001000 #define PSP_USEHEADERSUBTITLE 0x00002000 #define PSP_USEFUSIONCONTEXT 0x00004000 #define PSP_COMMANDLINKS 0x00040000 #define PSPCB_ADDREF 0 #define PSPCB_RELEASE 1 #define PSPCB_CREATE 2 #define PSH_DEFAULT 0x0000 #define PSH_PROPTITLE 0x0001 #define PSH_USEHICON 0x0002 #define PSH_USEICONID 0x0004 #define PSH_PROPSHEETPAGE 0x0008 #define PSH_WIZARDHASFINISH 0x0010 #define PSH_WIZARD 0x0020 #define PSH_USEPSTARTPAGE 0x0040 #define PSH_NOAPPLYNOW 0x0080 #define PSH_USECALLBACK 0x0100 #define PSH_HASHELP 0x0200 #define PSH_MODELESS 0x0400 #define PSH_RTLREADING 0x0800 #define PSH_WIZARDCONTEXTHELP 0x00001000 #define PSH_WIZARD97_OLD 0x00002000 /* for IE < 5 */ #define PSH_AEROWIZARD 0x00004000 #define PSH_WATERMARK 0x00008000 #define PSH_USEHBMWATERMARK 0x00010000 #define PSH_USEHPLWATERMARK 0x00020000 #define PSH_STRETCHWATERMARK 0x00040000 #define PSH_HEADER 0x00080000 #define PSH_USEHBMHEADER 0x00100000 #define PSH_USEPAGELANG 0x00200000 #define PSH_WIZARD_LITE 0x00400000 #define PSH_WIZARD97_NEW 0x01000000 /* for IE >= 5 */ #define PSH_NOCONTEXTHELP 0x02000000 #define PSH_RESIZABLE 0x04000000 #define PSH_HEADERBITMAP 0x08000000 #define PSH_NOMARGIN 0x10000000 #ifndef __WINESRC__ # if defined(_WIN32_IE) && (_WIN32_IE < 0x0500) # define PSH_WIZARD97 PSH_WIZARD97_OLD # else # define PSH_WIZARD97 PSH_WIZARD97_NEW # endif #endif #define PSCB_INITIALIZED 1 #define PSCB_PRECREATE 2 typedef struct _PSHNOTIFY { NMHDR hdr; LPARAM lParam; } PSHNOTIFY, *LPPSHNOTIFY; #define PSN_FIRST (0U-200U) #define PSN_LAST (0U-299U) #define PSN_SETACTIVE (PSN_FIRST-0) #define PSN_KILLACTIVE (PSN_FIRST-1) /* #define PSN_VALIDATE (PSN_FIRST-1) */ #define PSN_APPLY (PSN_FIRST-2) #define PSN_RESET (PSN_FIRST-3) /* #define PSN_CANCEL (PSN_FIRST-3) */ #define PSN_HELP (PSN_FIRST-5) #define PSN_WIZBACK (PSN_FIRST-6) #define PSN_WIZNEXT (PSN_FIRST-7) #define PSN_WIZFINISH (PSN_FIRST-8) #define PSN_QUERYCANCEL (PSN_FIRST-9) #define PSN_GETOBJECT (PSN_FIRST-10) #define PSN_TRANSLATEACCELERATOR (PSN_FIRST-12) #define PSN_QUERYINITIALFOCUS (PSN_FIRST-13) #define PSNRET_NOERROR 0 #define PSNRET_INVALID 1 #define PSNRET_INVALID_NOCHANGEPAGE 2 #define PSM_SETCURSEL (WM_USER + 101) #define PSM_REMOVEPAGE (WM_USER + 102) #define PSM_ADDPAGE (WM_USER + 103) #define PSM_CHANGED (WM_USER + 104) #define PSM_RESTARTWINDOWS (WM_USER + 105) #define PSM_REBOOTSYSTEM (WM_USER + 106) #define PSM_CANCELTOCLOSE (WM_USER + 107) #define PSM_QUERYSIBLINGS (WM_USER + 108) #define PSM_UNCHANGED (WM_USER + 109) #define PSM_APPLY (WM_USER + 110) #define PSM_SETTITLEA (WM_USER + 111) #define PSM_SETTITLEW (WM_USER + 120) #define PSM_SETTITLE WINELIB_NAME_AW(PSM_SETTITLE) #define PSM_SETWIZBUTTONS (WM_USER + 112) #define PSM_PRESSBUTTON (WM_USER + 113) #define PSM_SETCURSELID (WM_USER + 114) #define PSM_SETFINISHTEXTA (WM_USER + 115) #define PSM_SETFINISHTEXTW (WM_USER + 121) #define PSM_SETFINISHTEXT WINELIB_NAME_AW(PSM_SETFINISHTEXT) #define PSM_GETTABCONTROL (WM_USER + 116) #define PSM_ISDIALOGMESSAGE (WM_USER + 117) #define PSM_GETCURRENTPAGEHWND (WM_USER + 118) #define PSM_INSERTPAGE (WM_USER + 119) #define PSM_SETHEADERTITLEA (WM_USER + 125) #define PSM_SETHEADERTITLEW (WM_USER + 126) #define PSM_SETHEADERTITLE WINELIB_NAME_AW(PSM_SETHEADERTITLE) #define PSM_SETHEADERSUBTITLEA (WM_USER + 127) #define PSM_SETHEADERSUBTITLEW (WM_USER + 128) #define PSM_SETHEADERSUBTITLE WINELIB_NAME_AW(PSM_SETHEADERSUBTITLE) #define PSM_HWNDTOINDEX (WM_USER + 129) #define PSM_INDEXTOHWND (WM_USER + 130) #define PSM_PAGETOINDEX (WM_USER + 131) #define PSM_INDEXTOPAGE (WM_USER + 132) #define PSM_IDTOINDEX (WM_USER + 133) #define PSM_INDEXTOID (WM_USER + 134) #define PSM_GETRESULT (WM_USER + 135) #define PSM_RECALCPAGESIZES (WM_USER + 136) #define PSWIZB_BACK 0x00000001 #define PSWIZB_NEXT 0x00000002 #define PSWIZB_FINISH 0x00000004 #define PSWIZB_DISABLEDFINISH 0x00000008 #define PSBTN_BACK 0 #define PSBTN_NEXT 1 #define PSBTN_FINISH 2 #define PSBTN_OK 3 #define PSBTN_APPLYNOW 4 #define PSBTN_CANCEL 5 #define PSBTN_HELP 6 #define PSBTN_MAX 6 #define ID_PSRESTARTWINDOWS 0x2 #define ID_PSREBOOTSYSTEM (ID_PSRESTARTWINDOWS | 0x1) #define WIZ_CXDLG 276 #define WIZ_CYDLG 140 #define WIZ_CXBMP 80 #define WIZ_BODYX 92 #define WIZ_BODYCX 184 #define PROP_SM_CXDLG 212 #define PROP_SM_CYDLG 188 #define PROP_MED_CXDLG 227 #define PROP_MED_CYDLG 215 #define PROP_LG_CXDLG 252 #define PROP_LG_CYDLG 218 /* * Property sheet support (macros) */ #define PropSheet_SetCurSel(hDlg, hpage, index) \ SendMessageA(hDlg, PSM_SETCURSEL, (WPARAM)index, (LPARAM)hpage) #define PropSheet_RemovePage(hDlg, index, hpage) \ SNDMSG(hDlg, PSM_REMOVEPAGE, index, (LPARAM)hpage) #define PropSheet_AddPage(hDlg, hpage) \ SNDMSG(hDlg, PSM_ADDPAGE, 0, (LPARAM)hpage) #define PropSheet_Changed(hDlg, hwnd) \ SNDMSG(hDlg, PSM_CHANGED, (WPARAM)hwnd, 0) #define PropSheet_RestartWindows(hDlg) \ SNDMSG(hDlg, PSM_RESTARTWINDOWS, 0, 0) #define PropSheet_RebootSystem(hDlg) \ SNDMSG(hDlg, PSM_REBOOTSYSTEM, 0, 0) #define PropSheet_CancelToClose(hDlg) \ PostMessage(hDlg, PSM_CANCELTOCLOSE, 0, 0) #define PropSheet_QuerySiblings(hDlg, wParam, lParam) \ SNDMSG(hDlg, PSM_QUERYSIBLINGS, wParam, lParam) #define PropSheet_UnChanged(hDlg, hwnd) \ SNDMSG(hDlg, PSM_UNCHANGED, (WPARAM)hwnd, 0) #define PropSheet_Apply(hDlg) \ SNDMSG(hDlg, PSM_APPLY, 0, 0) #define PropSheet_SetTitle(hDlg, wStyle, lpszText)\ SNDMSG(hDlg, PSM_SETTITLE, wStyle, (LPARAM)(LPCTSTR)lpszText) #define PropSheet_SetWizButtons(hDlg, dwFlags) \ PostMessage(hDlg, PSM_SETWIZBUTTONS, 0, (LPARAM)dwFlags) #define PropSheet_PressButton(hDlg, iButton) \ PostMessage(hDlg, PSM_PRESSBUTTON, (WPARAM)iButton, 0) #define PropSheet_SetCurSelByID(hDlg, id) \ SNDMSG(hDlg, PSM_SETCURSELID, 0, (LPARAM)id) #define PropSheet_SetFinishText(hDlg, lpszText) \ SNDMSG(hDlg, PSM_SETFINISHTEXT, 0, (LPARAM)lpszText) #define PropSheet_GetTabControl(hDlg) \ (HWND)SNDMSG(hDlg, PSM_GETTABCONTROL, 0, 0) #define PropSheet_IsDialogMessage(hDlg, pMsg) \ (BOOL)SNDMSG(hDlg, PSM_ISDIALOGMESSAGE, 0, (LPARAM)pMsg) #define PropSheet_GetCurrentPageHwnd(hDlg) \ (HWND)SNDMSG(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0) #define PropSheet_InsertPage(hDlg, index, hpage) \ SNDMSG(hDlg, PSM_INSERTPAGE, (WPARAM)(index), (LPARAM)(hpage)) #define PropSheet_SetHeaderTitle(hDlg, index, lpszText) \ SNDMSG(hDlg, PSM_SETHEADERTITLE, (WPARAM)(index), (LPARAM)(lpszText)) #define PropSheet_SetHeaderSubTitle(hDlg, index, lpszText) \ SNDMSG(hDlg, PSM_SETHEADERSUBTITLE, (WPARAM)(index), (LPARAM)(lpszText)) #define PropSheet_HwndToIndex(hDlg, hwnd) \ (int)SNDMSG(hDlg, PSM_HWNDTOINDEX, (WPARAM)(hwnd), 0) #define PropSheet_IndexToHwnd(hDlg, i) \ (HWND)SNDMSG(hDlg, PSM_INDEXTOHWND, (WPARAM)(i), 0) #define PropSheet_PageToIndex(hDlg, hpage) \ (int)SNDMSG(hDlg, PSM_PAGETOINDEX, 0, (LPARAM)(hpage)) #define PropSheet_IndexToPage(hDlg, i) \ (HPROPSHEETPAGE)SNDMSG(hDlg, PSM_INDEXTOPAGE, (WPARAM)(i), 0) #define PropSheet_IdToIndex(hDlg, id) \ (int)SNDMSG(hDlg, PSM_IDTOINDEX, 0, (LPARAM)(id)) #define PropSheet_IndexToId(hDlg, i) \ SNDMSG(hDlg, PSM_INDEXTOID, (WPARAM)(i), 0) #define PropSheet_GetResult(hDlg) \ SNDMSG(hDlg, PSM_GETRESULT, 0, 0) #define PropSheet_RecalcPageSizes(hDlg) \ SNDMSG(hDlg, PSM_RECALCPAGESIZES, 0, 0) #ifdef __cplusplus } #endif #endif /* __WINE_PRSHT_H */ ================================================ FILE: wine/windows/psapi.h ================================================ /* * Declarations for PSAPI * * Copyright (C) 1998 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_PSAPI_H #define __WINE_PSAPI_H #ifndef PSAPI_VERSION #define PSAPI_VERSION 2 #endif typedef struct _MODULEINFO { LPVOID lpBaseOfDll; DWORD SizeOfImage; LPVOID EntryPoint; } MODULEINFO, *LPMODULEINFO; typedef struct _PROCESS_MEMORY_COUNTERS { DWORD cb; DWORD PageFaultCount; SIZE_T PeakWorkingSetSize; SIZE_T WorkingSetSize; SIZE_T QuotaPeakPagedPoolUsage; SIZE_T QuotaPagedPoolUsage; SIZE_T QuotaPeakNonPagedPoolUsage; SIZE_T QuotaNonPagedPoolUsage; SIZE_T PagefileUsage; SIZE_T PeakPagefileUsage; } PROCESS_MEMORY_COUNTERS; typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS; typedef struct _PSAPI_WS_WATCH_INFORMATION { LPVOID FaultingPc; LPVOID FaultingVa; } PSAPI_WS_WATCH_INFORMATION, *PPSAPI_WS_WATCH_INFORMATION; typedef struct _PERFORMANCE_INFORMATION { DWORD cb; SIZE_T CommitTotal; SIZE_T CommitLimit; SIZE_T CommitPeak; SIZE_T PhysicalTotal; SIZE_T PhysicalAvailable; SIZE_T SystemCache; SIZE_T KernelTotal; SIZE_T KernelPaged; SIZE_T KernelNonpaged; SIZE_T PageSize; DWORD HandleCount; DWORD ProcessCount; DWORD ThreadCount; } PERFORMANCE_INFORMATION, *PPERFORMANCE_INFORMATION; typedef struct _ENUM_PAGE_FILE_INFORMATION { DWORD cb; DWORD Reserved; SIZE_T TotalSize; SIZE_T TotalInUse; SIZE_T PeakUsage; } ENUM_PAGE_FILE_INFORMATION, *PENUM_PAGE_FILE_INFORMATION; typedef BOOL (*PENUM_PAGE_FILE_CALLBACKA) (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR); typedef BOOL (*PENUM_PAGE_FILE_CALLBACKW) (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR); #define PENUM_PAGE_FILE_CALLBACK WINELIB_NAME_AW(PENUM_PAGE_FILE_CALLBACK) #ifdef __cplusplus extern "C" { #endif #if PSAPI_VERSION > 1 #define EnumProcesses K32EnumProcesses #define EnumProcessModules K32EnumProcessModules #define EnumProcessModulesEx K32EnumProcessModulesEx #define GetModuleBaseNameA K32GetModuleBaseNameA #define GetModuleBaseNameW K32GetModuleBaseNameW #define GetModuleFileNameExA K32GetModuleFileNameExA #define GetModuleFileNameExW K32GetModuleFileNameExW #define GetModuleInformation K32GetModuleInformation #define EmptyWorkingSet K32EmptyWorkingSet #define QueryWorkingSet K32QueryWorkingSet #define QueryWorkingSetEx K32QueryWorkingSetEx #define InitializeProcessForWsWatch K32InitializeProcessForWsWatch #define GetWsChanges K32GetWsChanges #define GetWsChangesEx K32GetWsChangesEx #define GetMappedFileNameW K32GetMappedFileNameW #define GetMappedFileNameA K32GetMappedFileNameA #define EnumDeviceDrivers K32EnumDeviceDrivers #define GetDeviceDriverBaseNameA K32GetDeviceDriverBaseNameA #define GetDeviceDriverBaseNameW K32GetDeviceDriverBaseNameW #define GetDeviceDriverFileNameA K32GetDeviceDriverFileNameA #define GetDeviceDriverFileNameW K32GetDeviceDriverFileNameW #define GetProcessMemoryInfo K32GetProcessMemoryInfo #define GetPerformanceInfo K32GetPerformanceInfo #define EnumPageFilesW K32EnumPageFilesW #define EnumPageFilesA K32EnumPageFilesA #define GetProcessImageFileNameA K32GetProcessImageFileNameA #define GetProcessImageFileNameW K32GetProcessImageFileNameW #endif BOOL WINAPI EnumProcesses(DWORD*, DWORD, DWORD*); BOOL WINAPI EnumProcessModules(HANDLE, HMODULE*, DWORD, LPDWORD); BOOL WINAPI EnumProcessModulesEx(HANDLE, HMODULE*, DWORD, LPDWORD, DWORD); DWORD WINAPI GetModuleBaseNameA(HANDLE, HMODULE, LPSTR, DWORD); DWORD WINAPI GetModuleBaseNameW(HANDLE, HMODULE, LPWSTR, DWORD); #define GetModuleBaseName WINELIB_NAME_AW(GetModuleBaseName) DWORD WINAPI GetModuleFileNameExA(HANDLE, HMODULE, LPSTR, DWORD); DWORD WINAPI GetModuleFileNameExW(HANDLE, HMODULE, LPWSTR, DWORD); #define GetModuleFileNameEx WINELIB_NAME_AW(GetModuleFileNameEx) BOOL WINAPI GetModuleInformation(HANDLE, HMODULE, LPMODULEINFO, DWORD); BOOL WINAPI EmptyWorkingSet(HANDLE); BOOL WINAPI QueryWorkingSet(HANDLE, PVOID, DWORD); BOOL WINAPI QueryWorkingSetEx(HANDLE, PVOID, DWORD); BOOL WINAPI InitializeProcessForWsWatch(HANDLE); BOOL WINAPI GetWsChanges(HANDLE, PPSAPI_WS_WATCH_INFORMATION, DWORD); DWORD WINAPI GetMappedFileNameW(HANDLE, LPVOID, LPWSTR, DWORD); DWORD WINAPI GetMappedFileNameA(HANDLE, LPVOID, LPSTR, DWORD); #define GetMappedFileName WINELIB_NAME_AW(GetMappedFileName) BOOL WINAPI EnumDeviceDrivers(LPVOID*, DWORD, LPDWORD); DWORD WINAPI GetDeviceDriverBaseNameA(LPVOID, LPSTR, DWORD); DWORD WINAPI GetDeviceDriverBaseNameW(LPVOID, LPWSTR, DWORD); #define GetDeviceDriverBaseName WINELIB_NAME_AW(GetDeviceDriverBaseName) DWORD WINAPI GetDeviceDriverFileNameA(LPVOID, LPSTR, DWORD); DWORD WINAPI GetDeviceDriverFileNameW(LPVOID, LPWSTR, DWORD); #define GetDeviceDriverFileName WINELIB_NAME_AW(GetDeviceDriverFileName) BOOL WINAPI GetProcessMemoryInfo(HANDLE, PPROCESS_MEMORY_COUNTERS, DWORD); BOOL WINAPI GetPerformanceInfo(PPERFORMANCE_INFORMATION, DWORD); BOOL WINAPI EnumPageFilesA(PENUM_PAGE_FILE_CALLBACKA, LPVOID); BOOL WINAPI EnumPageFilesW(PENUM_PAGE_FILE_CALLBACKW, LPVOID); #define EnumPageFiles WINELIB_NAME_AW(EnumPageFiles) DWORD WINAPI GetProcessImageFileNameA(HANDLE, LPSTR, DWORD); DWORD WINAPI GetProcessImageFileNameW(HANDLE, LPWSTR, DWORD); #define GetProcessImageFileName WINELIB_NAME_AW(GetProcessImageFileName) #ifdef __cplusplus } #endif #endif /* __WINE_PSAPI_H */ ================================================ FILE: wine/windows/pshpack1.h ================================================ /* * Copyright (C) 1999 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if defined(__WINE_PSHPACK_H15) /* Depth > 15 */ # error "Alignment nesting > 15 is not supported" #else # if !defined(__WINE_PSHPACK_H) # define __WINE_PSHPACK_H 1 /* Depth == 1 */ # elif !defined(__WINE_PSHPACK_H2) # define __WINE_PSHPACK_H2 1 /* Depth == 2 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H3) # define __WINE_PSHPACK_H3 1 /* Depth == 3 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H4) # define __WINE_PSHPACK_H4 1 /* Depth == 4 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H5) # define __WINE_PSHPACK_H5 1 /* Depth == 5 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H6) # define __WINE_PSHPACK_H6 1 /* Depth == 6 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H7) # define __WINE_PSHPACK_H7 1 /* Depth == 7 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H8) # define __WINE_PSHPACK_H8 1 /* Depth == 8 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H9) # define __WINE_PSHPACK_H9 1 /* Depth == 9 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H10) # define __WINE_PSHPACK_H10 1 /* Depth == 10 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H11) # define __WINE_PSHPACK_H11 1 /* Depth == 11 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H12) # define __WINE_PSHPACK_H12 1 /* Depth == 12 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H13) # define __WINE_PSHPACK_H13 1 /* Depth == 13 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H14) # define __WINE_PSHPACK_H14 1 /* Depth == 14 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H15) # define __WINE_PSHPACK_H15 1 /* Depth == 15 */ # define __WINE_INTERNAL_POPPACK # include # endif # if defined(_MSC_VER) && (_MSC_VER >= 800) # pragma warning(disable:4103) # endif # pragma pack(1) #endif ================================================ FILE: wine/windows/pshpack2.h ================================================ /* * Copyright (C) 1999 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if defined(__WINE_PSHPACK_H15) /* Depth > 15 */ # error "Alignment nesting > 15 is not supported" #else # if !defined(__WINE_PSHPACK_H) # define __WINE_PSHPACK_H 2 /* Depth == 1 */ # elif !defined(__WINE_PSHPACK_H2) # define __WINE_PSHPACK_H2 2 /* Depth == 2 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H3) # define __WINE_PSHPACK_H3 2 /* Depth == 3 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H4) # define __WINE_PSHPACK_H4 2 /* Depth == 4 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H5) # define __WINE_PSHPACK_H5 2 /* Depth == 5 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H6) # define __WINE_PSHPACK_H6 2 /* Depth == 6 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H7) # define __WINE_PSHPACK_H7 2 /* Depth == 7 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H8) # define __WINE_PSHPACK_H8 2 /* Depth == 8 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H9) # define __WINE_PSHPACK_H9 2 /* Depth == 9 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H10) # define __WINE_PSHPACK_H10 2 /* Depth == 10 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H11) # define __WINE_PSHPACK_H11 2 /* Depth == 11 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H12) # define __WINE_PSHPACK_H12 2 /* Depth == 12 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H13) # define __WINE_PSHPACK_H13 2 /* Depth == 13 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H14) # define __WINE_PSHPACK_H14 2 /* Depth == 14 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H15) # define __WINE_PSHPACK_H15 2 /* Depth == 15 */ # define __WINE_INTERNAL_POPPACK # include # endif # if defined(_MSC_VER) && (_MSC_VER >= 800) # pragma warning(disable:4103) # endif # pragma pack(2) #endif ================================================ FILE: wine/windows/pshpack4.h ================================================ /* * Copyright (C) 1999 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if defined(__WINE_PSHPACK_H15) /* Depth > 15 */ # error "Alignment nesting > 15 is not supported" #else # if !defined(__WINE_PSHPACK_H) # define __WINE_PSHPACK_H 4 /* Depth == 1 */ # elif !defined(__WINE_PSHPACK_H2) # define __WINE_PSHPACK_H2 4 /* Depth == 2 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H3) # define __WINE_PSHPACK_H3 4 /* Depth == 3 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H4) # define __WINE_PSHPACK_H4 4 /* Depth == 4 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H5) # define __WINE_PSHPACK_H5 4 /* Depth == 5 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H6) # define __WINE_PSHPACK_H6 4 /* Depth == 6 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H7) # define __WINE_PSHPACK_H7 4 /* Depth == 7 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H8) # define __WINE_PSHPACK_H8 4 /* Depth == 8 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H9) # define __WINE_PSHPACK_H9 4 /* Depth == 9 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H10) # define __WINE_PSHPACK_H10 4 /* Depth == 10 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H11) # define __WINE_PSHPACK_H11 4 /* Depth == 11 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H12) # define __WINE_PSHPACK_H12 4 /* Depth == 12 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H13) # define __WINE_PSHPACK_H13 4 /* Depth == 13 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H14) # define __WINE_PSHPACK_H14 4 /* Depth == 14 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H15) # define __WINE_PSHPACK_H15 4 /* Depth == 15 */ # define __WINE_INTERNAL_POPPACK # include # endif # if defined(_MSC_VER) && (_MSC_VER >= 800) # pragma warning(disable:4103) # endif # pragma pack(4) #endif ================================================ FILE: wine/windows/pshpack8.h ================================================ /* * Copyright (C) 1999 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if defined(__WINE_PSHPACK_H15) /* Depth > 15 */ # error "Alignment nesting > 15 is not supported" #else # if !defined(__WINE_PSHPACK_H) # define __WINE_PSHPACK_H 8 /* Depth == 1 */ # elif !defined(__WINE_PSHPACK_H2) # define __WINE_PSHPACK_H2 8 /* Depth == 2 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H3) # define __WINE_PSHPACK_H3 8 /* Depth == 3 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H4) # define __WINE_PSHPACK_H4 8 /* Depth == 4 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H5) # define __WINE_PSHPACK_H5 8 /* Depth == 5 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H6) # define __WINE_PSHPACK_H6 8 /* Depth == 6 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H7) # define __WINE_PSHPACK_H7 8 /* Depth == 7 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H8) # define __WINE_PSHPACK_H8 8 /* Depth == 8 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H9) # define __WINE_PSHPACK_H9 8 /* Depth == 9 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H10) # define __WINE_PSHPACK_H10 8 /* Depth == 10 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H11) # define __WINE_PSHPACK_H11 8 /* Depth == 11 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H12) # define __WINE_PSHPACK_H12 8 /* Depth == 12 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H13) # define __WINE_PSHPACK_H13 8 /* Depth == 13 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H14) # define __WINE_PSHPACK_H14 8 /* Depth == 14 */ # define __WINE_INTERNAL_POPPACK # include # elif !defined(__WINE_PSHPACK_H15) # define __WINE_PSHPACK_H15 8 /* Depth == 15 */ # define __WINE_INTERNAL_POPPACK # include # endif # if defined(_MSC_VER) && (_MSC_VER >= 800) # pragma warning(disable:4103) # endif # pragma pack(8) #endif ================================================ FILE: wine/windows/pstore.idl ================================================ /* * Copyright (C) 2004 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; import "oaidl.idl"; cpp_quote("#define PST_KEY_CURRENT_USER 0") cpp_quote("#define PST_KEY_LOCAL_MACHINE 1") cpp_quote("#define PST_E_OK 0x00000000L") cpp_quote("#define PST_E_TYPE_EXISTS 0x800C0004L") cpp_quote("#define PST_AUTHENTICODE 1") cpp_quote("#define PST_BINARY_CHECK 2") cpp_quote("#define PST_SECURITY_DESCRIPTOR 4") typedef DWORD PST_ACCESSMODE; typedef DWORD PST_ACCESSCLAUSETYPE; typedef DWORD PST_KEY; typedef DWORD PST_PROVIDERCAPABILITIES; typedef GUID PST_PROVIDERID, *PPST_PROVIDERID; /***************************************************************************** * PSTOREC library */ [ uuid(5a6f1ebd-2db1-11d0-8c39-00c04fd9126b), version(1.0), helpstring("PStore 1.0 Type Library") ] library PSTORECLib { importlib("stdole2.tlb"); typedef struct _PST_PROVIDERINFO { DWORD cbSize; PST_PROVIDERID ID; PST_PROVIDERCAPABILITIES Capabilities; LPWSTR szProviderName; } PST_PROVIDERINFO, *PPST_PROVIDERINFO; typedef struct _PST_PROMPTINFO { DWORD cbSize; DWORD dwPromptFlags; HWND hwndApp; LPCWSTR szPrompt; } PST_PROMPTINFO, *PPST_PROMPTINFO; typedef struct _PST_ACCESSCLAUSE { DWORD cbSize; PST_ACCESSCLAUSETYPE ClauseType; DWORD cbClauseData; BYTE* pbClauseData; } PST_ACCESSCLAUSE, *PPST_ACCESSCLAUSE; typedef struct _PST_ACCESSRULE { DWORD cbSize; PST_ACCESSMODE AccessModeFlags; DWORD cClauses; PST_ACCESSCLAUSE* rgClauses; } PST_ACCESSRULE, *PPST_ACCESSRULE; typedef struct _PST_ACCESSRULESET { DWORD cbSize; DWORD cClause; PST_ACCESSRULE* rgRules; } PST_ACCESSRULESET, *PPST_ACCESSRULESET; typedef struct _PST_TYPEINFO { DWORD cbSize; LPWSTR szDisplayName; } PST_TYPEINFO, *PPST_TYPEINFO; [ object, uuid(5a6f1ec1-2db1-11d0-8c39-00c04fd9126b), pointer_default(unique) ] interface IEnumPStoreItems : IUnknown { HRESULT Clone( [in] IEnumPStoreItems** ppenum ); HRESULT Next( [in] DWORD celt, [in] LPWSTR* rgelt, [in] DWORD* pceltFetched ); HRESULT Reset(); HRESULT Skip( [in] DWORD celt ); } [ object, uuid(789c1cbf-31ee-11d0-8c39-00c04fd9126b), pointer_default(unique) ] interface IEnumPStoreTypes : IUnknown { HRESULT Clone( [in] IEnumPStoreTypes** ppenum ); HRESULT Next( [in] DWORD celt, [in] LPWSTR* rgelt, [in] DWORD* pceltFetched ); HRESULT Reset(); HRESULT Skip( [in] DWORD celt ); } /***************************************************************************** * IPStore interface */ [ object, uuid(5a6f1ec0-2db1-11d0-8c39-00c04fd9126b), pointer_default(unique) ] interface IPStore : IUnknown { HRESULT GetInfo( [in] PPST_PROVIDERINFO* ppProperties ); HRESULT GetProvParam( [in] DWORD dwParam, [out] DWORD* pcbData, [out] BYTE** ppbData, [in] DWORD dwFlags ); HRESULT SetProvParam( [in] DWORD dwParam, [in] DWORD cbData, [in] BYTE* pbData, [in] DWORD* dwFlags ); HRESULT CreateType( [in] PST_KEY Key, [in] const GUID* pType, [in] PPST_TYPEINFO pInfo, [in] DWORD dwFlags ); HRESULT GetTypeInfo( [in] PST_KEY Key, [in] const GUID* pType, [in] PPST_TYPEINFO** ppInfo, [in] DWORD dwFlags ); HRESULT DeleteType( [in] PST_KEY Key, [in] const GUID* pType, [in] DWORD dwFlags ); HRESULT CreateSubtype( [in] PST_KEY Key, [in] const GUID* pType, [in] const GUID* pSubtype, [in] PPST_TYPEINFO pInfo, [in] PPST_ACCESSRULESET pRules, [in] DWORD dwFlags ); HRESULT GetSubtypeInfo( [in] PST_KEY Key, [in] const GUID* pType, [in] const GUID* pSubtype, [in] PPST_TYPEINFO** ppInfo, [in] DWORD dwFlags ); HRESULT DeleteSubtype( [in] PST_KEY Key, [in] const GUID* pType, [in] const GUID* pSubtype, [in] DWORD dwFlags ); HRESULT ReadAccessRuleset( [in] PST_KEY Key, [in] const GUID* pType, [in] const GUID* pSubtype, [in] PPST_TYPEINFO pInfo, [in] PPST_ACCESSRULESET** ppRules, [in] DWORD dwFlags ); HRESULT WriteAccessRuleset( [in] PST_KEY Key, [in] const GUID* pType, [in] const GUID* pSubtype, [in] PPST_TYPEINFO pInfo, [in] PPST_ACCESSRULESET pRules, [in] DWORD dwFlags ); HRESULT EnumTypes( [in] PST_KEY Key, [in] DWORD dwFlags, [in] IEnumPStoreTypes** ppenum ); HRESULT EnumSubtypes( [in] PST_KEY Key, [in] const GUID* pType, [in] DWORD dwFlags, [in] IEnumPStoreTypes** ppenum ); HRESULT DeleteItem( [in] PST_KEY Key, [in] const GUID* pItemType, [in] const GUID* pItemSubType, [in] LPCWSTR szItemName, [in] PPST_PROMPTINFO pPromptInfo, [in] DWORD dwFlags ); HRESULT ReadItem( [in] PST_KEY Key, [in] const GUID* pItemType, [in] const GUID* pItemSubtype, [in] LPCWSTR szItemName, [in] DWORD *cbData, [in] BYTE** pbData, [in] PPST_PROMPTINFO pPromptInfo, [in] DWORD dwFlags ); HRESULT WriteItem( [in] PST_KEY Key, [in] const GUID* pItemType, [in] const GUID* pItemSubtype, [in] LPCWSTR szItemName, [in] DWORD cbData, [in,size_is(cbData)] BYTE *ppbData, [in] PPST_PROMPTINFO pPromptInfo, [in] DWORD dwDefaultConfirmationStyle, [in] DWORD dwFlags); HRESULT OpenItem( [in] PST_KEY Key, [in] const GUID* pItemType, [in] const GUID* pItemSubtype, [in] LPCWSTR szItemName, [in] PST_ACCESSMODE ModeFlags, [in] PPST_PROMPTINFO pPromptInfo, [in] DWORD dwFlags ); HRESULT CloseItem( [in] PST_KEY Key, [in] const GUID* pItemType, [in] const GUID* pItemSubtype, [in] LPCWSTR* szItemName, [in] DWORD dwFlags ); HRESULT EnumItems( [in] PST_KEY Key, [in] const GUID* pItemType, [in] const GUID* pItemSubtype, [in] DWORD dwFlags, [in] IEnumPStoreItems** ppenum ); } } ================================================ FILE: wine/windows/qedit.idl ================================================ /* * Copyright (C) 2008 Google (Lei Zhang) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; /* import "dxtrans.idl"; */ import "amstream.idl"; import "msxml.idl"; [ object, uuid(0579154A-2B53-4994-B0D0-E773148EFF85), local, pointer_default(unique) ] interface ISampleGrabberCB : IUnknown { HRESULT SampleCB( double SampleTime, IMediaSample * pSample ); HRESULT BufferCB( double SampleTime, BYTE * pBuffer, LONG BufferLen ); } [ object, uuid(6B652FFF-11FE-4fce-92AD-0266B5D7C78F), local, pointer_default(unique) ] interface ISampleGrabber: IUnknown { HRESULT SetOneShot( BOOL OneShot ); HRESULT SetMediaType( const AM_MEDIA_TYPE * pType ); HRESULT GetConnectedMediaType( AM_MEDIA_TYPE * pType ); HRESULT SetBufferSamples( BOOL BufferThem ); HRESULT GetCurrentBuffer( [in,out] LONG * pBufferSize, [out] LONG * pBuffer ); HRESULT GetCurrentSample( [out] IMediaSample ** ppSample ); HRESULT SetCallback( ISampleGrabberCB * pCallback, LONG WhichMethodToCallback ); } [ object, uuid(65bd0710-24d2-4FF7-9324-ed2e5d3abafa), pointer_default(unique) ] interface IMediaDet : IUnknown { HRESULT get_Filter( [out] IUnknown* *pVal ); HRESULT put_Filter( IUnknown* newVal ); HRESULT get_OutputStreams( [out] LONG *pVal ); HRESULT get_CurrentStream( [out] LONG *pVal ); HRESULT put_CurrentStream( LONG newVal ); HRESULT get_StreamType( [out] GUID *pVal ); HRESULT get_StreamTypeB( [out] BSTR *pVal ); HRESULT get_StreamLength( [out] double *pVal ); HRESULT get_Filename( [out] BSTR *pVal ); HRESULT put_Filename( BSTR newVal ); HRESULT GetBitmapBits( double StreamTime, LONG * pBufferSize, char * pBuffer, LONG Width, LONG Height ); HRESULT WriteBitmapBits( double StreamTime, LONG Width, LONG Height, BSTR Filename ); HRESULT get_StreamMediaType( [out] AM_MEDIA_TYPE * pVal ); HRESULT GetSampleGrabber( [out] ISampleGrabber ** ppVal ); HRESULT get_FrameRate( [out] double *pVal ); HRESULT EnterBitmapGrabMode( double SeekTime ); } [ uuid(65BD0711-24D2-4ff7-9324-ED2E5D3ABAFA), ] coclass MediaDet { [default] interface IMediaDet; } [ object, uuid(288581E0-66CE-11d2-918F-00C0DF10D434), odl, pointer_default(unique) ] interface IMediaLocator : IUnknown { HRESULT FindMediaFile( BSTR input, BSTR filter, BSTR * output, long flags ); HRESULT AddFoundLocation( BSTR dir ); } typedef struct { BSTR name; DISPID dispID; LONG nValues; } DEXTER_PARAM; typedef struct { VARIANT v; REFERENCE_TIME rt; DWORD dwInterp; } DEXTER_VALUE; [ object, uuid(AE9472BD-B0C3-11D2-8D24-00A0C9441E20), pointer_default(unique) ] interface IPropertySetter : IUnknown { HRESULT LoadXML( [in] IUnknown * pxml ); HRESULT PrintXML( [out] char * xml, [in] int size, [out] int * printed, [in] int indent ); HRESULT CloneProps( [out] IPropertySetter ** setter, [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop ); HRESULT AddProp( [in] DEXTER_PARAM param, [in] DEXTER_VALUE * value ); HRESULT GetProps( [out] LONG * params, [out] DEXTER_PARAM ** param, [out] DEXTER_VALUE ** value ); HRESULT FreeProps( [in] LONG params, [in] DEXTER_PARAM * param, [in] DEXTER_VALUE * value ); HRESULT ClearProps(); HRESULT SaveToBlob( [out] LONG * size, [out] BYTE ** blob ); HRESULT LoadFromBlob( [in] LONG size, [in] BYTE * blob ); HRESULT SetProps( [in] IUnknown * target, [in] REFERENCE_TIME now ); } [ object, uuid(E43E73A2-0EFA-11d3-9601-00A0C9441E20), odl, pointer_default(unique) ] interface IAMErrorLog : IUnknown { HRESULT LogError( long severity, BSTR error_str, long error_code, long hresult, [in] VARIANT * extra ); } [ object, uuid(963566DA-BE21-4eaf-88E9-35704F8F52A1), odl, pointer_default(unique) ] interface IAMSetErrorLog : IUnknown { [propget] HRESULT ErrorLog( [out, retval] IAMErrorLog ** log ); [propput] HRESULT ErrorLog( [in] IAMErrorLog * log ); } interface IAMTimeline; interface IAMTimelineGroup; interface IAMTimelineObj; interface IAMTimelineSrc; typedef enum { TIMELINE_MAJOR_TYPE_COMPOSITE = 1, TIMELINE_MAJOR_TYPE_TRACK = 2, TIMELINE_MAJOR_TYPE_SOURCE = 4, TIMELINE_MAJOR_TYPE_TRANSITION = 8, TIMELINE_MAJOR_TYPE_EFFECT = 16, TIMELINE_MAJOR_TYPE_GROUP = 128 } TIMELINE_MAJOR_TYPE; [ object, uuid(78530B74-61F9-11D2-8CAD-00A024580902), odl, pointer_default(unique) ] interface IAMTimeline : IUnknown { HRESULT CreateEmptyNode( [out] IAMTimelineObj ** obj, TIMELINE_MAJOR_TYPE type ); HRESULT AddGroup( IAMTimelineObj * group ); HRESULT RemGroupFromList( IAMTimelineObj * group ); HRESULT GetGroup( [out] IAMTimelineObj ** group, long index ); HRESULT GetGroupCount( long * count ); HRESULT ClearAllGroups(); HRESULT GetInsertMode( long * mode ); HRESULT SetInsertMode( long mode ); HRESULT EnableTransitions( BOOL enabled ); HRESULT TransitionsEnabled( BOOL * enabled ); HRESULT EnableEffects( BOOL enabled ); HRESULT EffectsEnabled( BOOL * enabled ); HRESULT SetInterestRange( REFERENCE_TIME start, REFERENCE_TIME stop ); HRESULT GetDuration( REFERENCE_TIME * duration ); HRESULT GetDuration2( double * duration ); HRESULT SetDefaultFPS( double fps ); HRESULT GetDefaultFPS( double * fps ); HRESULT IsDirty( BOOL * dirty ); HRESULT GetDirtyRange( REFERENCE_TIME * start, REFERENCE_TIME * stop ); HRESULT GetCountOfType( long group, long * value, long * value_with_comps, TIMELINE_MAJOR_TYPE type ); HRESULT ValidateSourceNames( long flags, IMediaLocator * override, LONG_PTR notify_event ); HRESULT SetDefaultTransition( GUID * guid ); HRESULT GetDefaultTransition( GUID * guid ); HRESULT SetDefaultEffect( GUID * guid ); HRESULT GetDefaultEffect( GUID * guid ); HRESULT SetDefaultTransitionB( BSTR guidb ); HRESULT GetDefaultTransitionB( [out,retval] BSTR * guidb ); HRESULT SetDefaultEffectB( BSTR guidb ); HRESULT GetDefaultEffectB( [out,retval] BSTR * guidb ); } [ uuid(78530B75-61F9-11D2-8CAD-00A024580902) ] coclass AMTimeline { [default] interface IAMTimeline; interface IPersistStream; interface IAMSetErrorLog; } [ object, uuid(9EED4F00-B8A6-11d2-8023-00C0DF10D434), odl, pointer_default(unique) ] interface IAMTimelineGroup : IUnknown { HRESULT SetTimeline( IAMTimeline * timeline ); HRESULT GetTimeline( [out] IAMTimeline ** timeline ); HRESULT GetPriority( long * priority ); HRESULT GetMediaType( [out] AM_MEDIA_TYPE * ); HRESULT SetMediaType( [in] AM_MEDIA_TYPE * ); HRESULT SetOutputFPS( double fps ); HRESULT GetOutputFPS( double * fps ); HRESULT SetGroupName( BSTR name ); HRESULT GetGroupName( [out,retval] BSTR * name ); HRESULT SetPreviewMode( BOOL preview ); HRESULT GetPreviewMode( BOOL * preview ); HRESULT SetMediaTypeForVB( [in] long type ); HRESULT GetOutputBuffering( [out] int * buffer ); HRESULT SetOutputBuffering( [in] int buffer ); HRESULT SetSmartRecompressFormat( long * format ); HRESULT GetSmartRecompressFormat( long ** format ); HRESULT IsSmartRecompressFormatSet( BOOL * set ); HRESULT IsRecompressFormatDirty( BOOL * dirty ); HRESULT ClearRecompressFormatDirty(); HRESULT SetRecompFormatFromSource( IAMTimelineSrc * source ); } [ object, local, uuid(78530B77-61F9-11D2-8CAD-00A024580902), odl, pointer_default(unique) ] interface IAMTimelineObj : IUnknown { HRESULT GetStartStop( REFERENCE_TIME * start, REFERENCE_TIME * stop ); HRESULT GetStartStop2( REFTIME * start, REFTIME * stop ); HRESULT FixTimes( REFERENCE_TIME * start, REFERENCE_TIME * stop ); HRESULT FixTimes2( REFTIME * start, REFTIME * stop ); HRESULT SetStartStop( REFERENCE_TIME start, REFERENCE_TIME stop ); HRESULT SetStartStop2( REFTIME start, REFTIME stop ); HRESULT GetPropertySetter( [out,retval] IPropertySetter ** setter ); HRESULT SetPropertySetter( IPropertySetter * setter ); HRESULT GetSubObject( [out,retval] IUnknown ** obj ); HRESULT SetSubObject( IUnknown * obj ); HRESULT SetSubObjectGUID( GUID guid ); HRESULT SetSubObjectGUIDB( BSTR guidb ); HRESULT GetSubObjectGUID( GUID * guid ); HRESULT GetSubObjectGUIDB( [out,retval] BSTR * guidb ); HRESULT GetSubObjectLoaded( BOOL * loaded ); HRESULT GetTimelineType( TIMELINE_MAJOR_TYPE * type ); HRESULT SetTimelineType( TIMELINE_MAJOR_TYPE type ); HRESULT GetUserID( long * id ); HRESULT SetUserID( long id ); HRESULT GetGenID( long * id ); HRESULT GetUserName( [out,retval] BSTR * name ); HRESULT SetUserName( BSTR name ); HRESULT GetUserData( BYTE * data, long * size ); HRESULT SetUserData( BYTE * data, long size ); HRESULT GetMuted( BOOL * muted ); HRESULT SetMuted( BOOL muted ); HRESULT GetLocked( BOOL * locked ); HRESULT SetLocked( BOOL locked ); HRESULT GetDirtyRange( REFERENCE_TIME * start, REFERENCE_TIME * stop ); HRESULT GetDirtyRange2( REFTIME * start, REFTIME * stop ); HRESULT SetDirtyRange( REFERENCE_TIME start, REFERENCE_TIME stop ); HRESULT SetDirtyRange2( REFTIME start, REFTIME stop ); HRESULT ClearDirty(); HRESULT Remove(); HRESULT RemoveAll(); HRESULT GetTimelineNoRef( IAMTimeline ** timeline ); HRESULT GetGroupIBelongTo( [out] IAMTimelineGroup ** group ); HRESULT GetEmbedDepth( long * depth ); } [ object, uuid(78530B79-61F9-11D2-8CAD-00A024580902), odl, pointer_default(unique) ] interface IAMTimelineSrc : IUnknown { HRESULT GetMediaTimes( REFERENCE_TIME * start, REFERENCE_TIME * stop ); HRESULT GetMediaTimes2( REFTIME * start, REFTIME * stop ); HRESULT ModifyStopTime( REFERENCE_TIME stop ); HRESULT ModifyStopTime2( REFTIME stop ); HRESULT FixMediaTimes( REFERENCE_TIME * start, REFERENCE_TIME * stop ); HRESULT FixMediaTimes2( REFTIME * start, REFTIME * stop ); HRESULT SetMediaTimes( REFERENCE_TIME Start, REFERENCE_TIME Stop ); HRESULT SetMediaTimes2( REFTIME Start, REFTIME Stop ); HRESULT SetMediaLength( REFERENCE_TIME length ); HRESULT SetMediaLength2( REFTIME length ); HRESULT GetMediaLength( REFERENCE_TIME * length ); HRESULT GetMediaLength2( REFTIME * length ); HRESULT GetMediaName( [out,retval] BSTR * name ); HRESULT SetMediaName( BSTR name ); HRESULT SpliceWithNext( IAMTimelineObj * next ); HRESULT GetStreamNumber( long * num ); HRESULT SetStreamNumber( long num ); HRESULT IsNormalRate( BOOL * normal ); HRESULT GetDefaultFPS( double * fps ); HRESULT SetDefaultFPS( double fps ); HRESULT GetStretchMode( int * mode ); HRESULT SetStretchMode( int mode ); } enum { E_NOTINTREE = 0x80040400, E_RENDER_ENGINE_IS_BROKEN = 0x80040401, E_MUST_INIT_RENDERER = 0x80040402, E_NOTDETERMINED = 0x80040403, E_NO_TIMELINE = 0x80040404, S_WARN_OUTPUTRESET = 40404 }; ================================================ FILE: wine/windows/ras.h ================================================ /* * Copyright (C) 1998 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_RAS_H #define __WINE_RAS_H #include #ifdef __cplusplus extern "C" { #endif #include #include #include #define RAS_MaxCallbackNumber RAS_MaxPhoneNumber #define RAS_MaxDeviceName 128 #define RAS_MaxDeviceType 16 #define RAS_MaxEntryName 256 #define RAS_MaxPhoneNumber 128 #define RAS_MaxAreaCode 10 #define RAS_MaxPadType 32 #define RAS_MaxX25Address 200 #define RAS_MaxFacilities 200 #define RAS_MaxUserData 200 #define RAS_MaxDnsSuffix 256 /* szDeviceType strings for RASDEVINFO */ #define RASDT_Direct "direct" #define RASDT_Modem "modem" #define RASDT_Isdn "isdn" #define RASDT_X25 "x25" #define RASDT_Vpn "vpn" #define RASDT_Pad "pad" #define RASDT_Generic "GENERIC" #define RASDT_Serial "SERIAL" #define RASDT_FrameRelay "FRAMERELAY" #define RASDT_Atm "ATM" #define RASDT_Sonet "SONET" #define RASDT_SW56 "SW56" #define RASDT_Irda "IRDA" #define RASDT_Parallel "PARALLEL" #define RASDT_PPPoE "PPPoE" typedef struct tagRASDEVINFOA { DWORD dwSize; CHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; CHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; } RASDEVINFOA, *LPRASDEVINFOA; typedef struct tagRASDEVINFOW { DWORD dwSize; WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; } RASDEVINFOW, *LPRASDEVINFOW; DECL_WINELIB_TYPE_AW(RASDEVINFO) DECL_WINELIB_TYPE_AW(LPRASDEVINFO) DECLARE_HANDLE(HRASCONN); typedef HRASCONN* LPHRASCONN; typedef struct tagRASCONNA { DWORD dwSize; HRASCONN hRasConn; CHAR szEntryName[ RAS_MaxEntryName + 1 ]; CHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; CHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; CHAR szPhonebook[ MAX_PATH ]; DWORD dwSubEntry; GUID guidEntry; DWORD dwFlags; LUID luid; GUID guidCorrelationId; } RASCONNA,*LPRASCONNA; typedef struct tagRASCONNW { DWORD dwSize; HRASCONN hRasConn; WCHAR szEntryName[ RAS_MaxEntryName + 1 ]; WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; WCHAR szPhonebook[ MAX_PATH ]; DWORD dwSubEntry; GUID guidEntry; DWORD dwFlags; LUID luid; GUID guidCorrelationId; } RASCONNW,*LPRASCONNW; DECL_WINELIB_TYPE_AW(RASCONN) DECL_WINELIB_TYPE_AW(LPRASCONN) typedef struct tagRASENTRYNAMEA { DWORD dwSize; CHAR szEntryName[ RAS_MaxEntryName + 1 ]; } RASENTRYNAMEA, *LPRASENTRYNAMEA; typedef struct tagRASENTRYNAMEW { DWORD dwSize; WCHAR szEntryName[ RAS_MaxEntryName + 1 ]; } RASENTRYNAMEW, *LPRASENTRYNAMEW; DECL_WINELIB_TYPE_AW(RASENTRYNAME) DECL_WINELIB_TYPE_AW(LPRASENTRYNAME) typedef struct tagRASDIALPARAMSA { DWORD dwSize; CHAR szEntryName[ RAS_MaxEntryName + 1 ]; CHAR szPhoneNumber[ RAS_MaxPhoneNumber + 1 ]; CHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ]; CHAR szUserName[ UNLEN + 1 ]; CHAR szPassword[ PWLEN + 1 ]; CHAR szDomain[ DNLEN + 1 ]; DWORD dwSubEntry; DWORD dwCallbackId; } RASDIALPARAMSA, *LPRASDIALPARAMSA; typedef struct tagRASDIALPARAMSW { DWORD dwSize; WCHAR szEntryName[ RAS_MaxEntryName + 1 ]; WCHAR szPhoneNumber[ RAS_MaxPhoneNumber + 1 ]; WCHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ]; WCHAR szUserName[ UNLEN + 1 ]; WCHAR szPassword[ PWLEN + 1 ]; WCHAR szDomain[ DNLEN + 1 ]; DWORD dwSubEntry; DWORD dwCallbackId; } RASDIALPARAMSW, *LPRASDIALPARAMSW; DECL_WINELIB_TYPE_AW(RASDIALPARAMS) DECL_WINELIB_TYPE_AW(LPRASDIALPARAMS) typedef struct tagRASIPADDR { BYTE classA,classB,classC,classD; } RASIPADDR; #define RASEO_UseCountryAndAreaCodes 0x0001 #define RASEO_SpecificIpAddr 0x0002 #define RASEO_SpecificNameServers 0x0004 #define RASEO_IpHeaderCompression 0x0008 #define RASEO_RemoteDefaultGateway 0x0010 #define RASEO_DisableLcpExtensions 0x0020 #define RASEO_TerminalBeforeDial 0x0040 #define RASEO_TerminalAfterDial 0x0080 #define RASEO_ModemLights 0x0100 #define RASEO_SwCompression 0x0200 #define RASEO_RequireEncryptedPw 0x0400 #define RASEO_RequireMsEncryptedPw 0x0800 #define RASEO_RequireDataEncryption 0x1000 #define RASEO_NetworkLogon 0x2000 #define RASEO_UseLogonCredentials 0x4000 #define RASEO_PromoteAlternates 0x8000 typedef struct tagRASENTRYA { DWORD dwSize; DWORD dwfOptions; /* Location */ DWORD dwCountryID; DWORD dwCountryCode; CHAR szAreaCode[ RAS_MaxAreaCode + 1 ]; CHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ]; DWORD dwAlternateOffset; /* IP related stuff */ RASIPADDR ipaddr; RASIPADDR ipaddrDns; RASIPADDR ipaddrDnsAlt; RASIPADDR ipaddrWins; RASIPADDR ipaddrWinsAlt; /* Framing (for ppp/isdn etc...) */ DWORD dwFrameSize; DWORD dwfNetProtocols; DWORD dwFramingProtocol; CHAR szScript[ MAX_PATH ]; CHAR szAutodialDll[ MAX_PATH ]; CHAR szAutodialFunc[ MAX_PATH ]; CHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; CHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; /* x25 only */ CHAR szX25PadType[ RAS_MaxPadType + 1 ]; CHAR szX25Address[ RAS_MaxX25Address + 1 ]; CHAR szX25Facilities[ RAS_MaxFacilities + 1 ]; CHAR szX25UserData[ RAS_MaxUserData + 1 ]; DWORD dwChannels; DWORD dwReserved1; DWORD dwReserved2; /* Multilink and BAP */ DWORD dwSubEntries; DWORD dwDialMode; DWORD dwDialExtraPercent; DWORD dwDialExtraSampleSeconds; DWORD dwHangUpExtraPercent; DWORD dwHangUpExtraSampleSeconds; /* Idle time out */ DWORD dwIdleDisconnectSeconds; DWORD dwType; /* entry type */ DWORD dwEncryptionType; /* type of encryption to use */ DWORD dwCustomAuthKey; /* authentication key for EAP */ GUID guidId; /* guid that represents the phone-book entry */ CHAR szCustomDialDll[MAX_PATH]; /* DLL for custom dialing */ DWORD dwVpnStrategy; /* specifies type of VPN protocol */ DWORD dwfOptions2; DWORD dwfOptions3; CHAR szDnsSuffix[RAS_MaxDnsSuffix]; DWORD dwTcpWindowSize; CHAR szPrerequisitePbk[MAX_PATH]; CHAR szPrerequisiteEntry[RAS_MaxEntryName + 1]; DWORD dwRedialCount; DWORD dwRedialPause; } RASENTRYA, *LPRASENTRYA; typedef struct tagRASENTRYW { DWORD dwSize; DWORD dwfOptions; /* Location */ DWORD dwCountryID; DWORD dwCountryCode; WCHAR szAreaCode[ RAS_MaxAreaCode + 1 ]; WCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ]; DWORD dwAlternateOffset; /* IP related stuff */ RASIPADDR ipaddr; RASIPADDR ipaddrDns; RASIPADDR ipaddrDnsAlt; RASIPADDR ipaddrWins; RASIPADDR ipaddrWinsAlt; /* Framing (for ppp/isdn etc...) */ DWORD dwFrameSize; DWORD dwfNetProtocols; DWORD dwFramingProtocol; WCHAR szScript[ MAX_PATH ]; WCHAR szAutodialDll[ MAX_PATH ]; WCHAR szAutodialFunc[ MAX_PATH ]; WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; /* x25 only */ WCHAR szX25PadType[ RAS_MaxPadType + 1 ]; WCHAR szX25Address[ RAS_MaxX25Address + 1 ]; WCHAR szX25Facilities[ RAS_MaxFacilities + 1 ]; WCHAR szX25UserData[ RAS_MaxUserData + 1 ]; DWORD dwChannels; DWORD dwReserved1; DWORD dwReserved2; /* Multilink and BAP */ DWORD dwSubEntries; DWORD dwDialMode; DWORD dwDialExtraPercent; DWORD dwDialExtraSampleSeconds; DWORD dwHangUpExtraPercent; DWORD dwHangUpExtraSampleSeconds; /* Idle time out */ DWORD dwIdleDisconnectSeconds; DWORD dwType; /* entry type */ DWORD dwEncryptionType; /* type of encryption to use */ DWORD dwCustomAuthKey; /* authentication key for EAP */ GUID guidId; /* guid that represents the phone-book entry */ WCHAR szCustomDialDll[MAX_PATH]; /* DLL for custom dialing */ DWORD dwVpnStrategy; /* specifies type of VPN protocol */ DWORD dwfOptions2; DWORD dwfOptions3; WCHAR szDnsSuffix[RAS_MaxDnsSuffix]; DWORD dwTcpWindowSize; WCHAR szPrerequisitePbk[MAX_PATH]; WCHAR szPrerequisiteEntry[RAS_MaxEntryName + 1]; DWORD dwRedialCount; DWORD dwRedialPause; } RASENTRYW, *LPRASENTRYW; DECL_WINELIB_TYPE_AW(RASENTRY) #define RASCS_PAUSED 0x1000 #define RASCS_DONE 0x2000 typedef enum tagRASCONNSTATE { RASCS_OpenPort = 0, RASCS_PortOpened, RASCS_ConnectDevice, RASCS_DeviceConnected, RASCS_AllDevicesConnected, RASCS_Authenticate, RASCS_AuthNotify, RASCS_AuthRetry, RASCS_AuthCallback, RASCS_AuthChangePassword, RASCS_AuthProject, RASCS_AuthLinkSpeed, RASCS_AuthAck, RASCS_ReAuthenticate, RASCS_Authenticated, RASCS_PrepareForCallback, RASCS_WaitForModemReset, RASCS_WaitForCallback, RASCS_Projected, RASCS_StartAuthentication, RASCS_CallbackComplete, RASCS_LogonNetwork, RASCS_SubEntryConnected, RASCS_SubEntryDisconnected, RASCS_Interactive = RASCS_PAUSED, RASCS_RetryAuthentication, RASCS_CallbackSetByCaller, RASCS_PasswordExpired, RASCS_Connected = RASCS_DONE, RASCS_Disconnected } RASCONNSTATE, *LPRASCONNSTATE; typedef struct tagRASCONNSTATUSA { DWORD dwSize; RASCONNSTATE rasconnstate; DWORD dwError; CHAR szDeviceType[RAS_MaxDeviceType + 1]; CHAR szDeviceName[RAS_MaxDeviceName + 1]; } RASCONNSTATUSA, *LPRASCONNSTATUSA; typedef struct tagRASCONNSTATUSW { DWORD dwSize; RASCONNSTATE rasconnstate; DWORD dwError; WCHAR szDeviceType[RAS_MaxDeviceType + 1]; WCHAR szDeviceName[RAS_MaxDeviceName + 1]; } RASCONNSTATUSW, *LPRASCONNSTATUSW; DECL_WINELIB_TYPE_AW(RASCONNSTATUS) typedef enum tagRASPROJECTION { RASP_Amb = 0x10000, RASP_PppNbf = 0x803F, RASP_PppIpx = 0x802B, RASP_PppIp = 0x8021, RASP_PppLcp = 0xC021, RASP_Slip = 0x20000 } RASPROJECTION, *LPRASPROJECTION; typedef struct tagRASSUBENTRYA { DWORD dwSize; DWORD dwfFlags; CHAR szDeviceType[RAS_MaxDeviceType + 1]; CHAR szDeviceName[RAS_MaxDeviceName + 1]; CHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1]; DWORD dwAlternateOffset; } RASSUBENTRYA, *LPRASSUBENTRYA; typedef struct tagRASSUBENTRYW { DWORD dwSize; DWORD dwfFlags; WCHAR szDeviceType[RAS_MaxDeviceType + 1]; WCHAR szDeviceName[RAS_MaxDeviceName + 1]; WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1]; DWORD dwAlternateOffset; } RASSUBENTRYW, *LPRASSUBENTRYW; typedef struct tagRASDIALEXTENSIONS { DWORD dwSize; DWORD dwfOptions; HWND hwndParent; ULONG_PTR reserved; } RASDIALEXTENSIONS, *LPRASDIALEXTENSIONS; typedef struct tagRASAUTODIALENTRYA { DWORD dwSize; DWORD dwFlags; DWORD dwDialingLocation; CHAR szEntry[ RAS_MaxEntryName + 1 ]; } RASAUTODIALENTRYA, *LPRASAUTODIALENTRYA; typedef struct tagRASAUTODIALENTRYW { DWORD dwSize; DWORD dwFlags; DWORD dwDialingLocation; WCHAR szEntry[ RAS_MaxEntryName + 1 ]; } RASAUTODIALENTRYW, *LPRASAUTODIALENTRYW; typedef struct _RAS_STATS { DWORD dwSize; DWORD dwBytesXmited; DWORD dwBytesRcved; DWORD dwFramesXmited; DWORD dwFramesRcved; DWORD dwCrcErr; DWORD dwTimeoutErr; DWORD dwAlignmentErr; DWORD dwHardwareOverrunErr; DWORD dwFramingErr; DWORD dwBufferOverrunErr; DWORD dwCompressionRatioIn; DWORD dwCompressionRatioOut; DWORD dwBps; DWORD dwConnectDuration; } RAS_STATS, *PRAS_STATS; DWORD WINAPI RasConnectionNotificationA(HRASCONN,HANDLE,DWORD); DWORD WINAPI RasConnectionNotificationW(HRASCONN,HANDLE,DWORD); #define RasConnectionNotification WINELIB_NAME_AW(RasConnectionNotification) DWORD WINAPI RasCreatePhonebookEntryA(HWND,LPCSTR); DWORD WINAPI RasCreatePhonebookEntryW(HWND,LPCWSTR); #define RasCreatePhonebookEntry WINELIB_NAME_AW(RasCreatePhonebookEntry) DWORD WINAPI RasDeleteEntryA(LPCSTR,LPCSTR); DWORD WINAPI RasDeleteEntryW(LPCWSTR,LPCWSTR); #define RasDeleteEntry WINELIB_NAME_AW(RasDeleteEntry) DWORD WINAPI RasDeleteSubEntryA(LPCSTR,LPCSTR,DWORD); DWORD WINAPI RasDeleteSubEntryW(LPCWSTR,LPCWSTR,DWORD); #define RasDeleteSubEntry WINELIB_NAME_AW(RasDeleteSubEntry) DWORD WINAPI RasDialA(LPRASDIALEXTENSIONS,LPCSTR,LPRASDIALPARAMSA,DWORD,LPVOID,LPHRASCONN); DWORD WINAPI RasDialW(LPRASDIALEXTENSIONS,LPCWSTR,LPRASDIALPARAMSW,DWORD,LPVOID,LPHRASCONN); #define RasDial WINELIB_NAME_AW(RasDial) DWORD WINAPI RasEditPhonebookEntryA(HWND,LPCSTR,LPCSTR); DWORD WINAPI RasEditPhonebookEntryW(HWND,LPCWSTR,LPCWSTR); #define RasEditPhonebookEntry WINELIB_NAME_AW(RasEditPhonebookEntry) DWORD WINAPI RasEnumAutodialAddressesA(LPSTR*,LPDWORD,LPDWORD); DWORD WINAPI RasEnumAutodialAddressesW(LPWSTR*,LPDWORD,LPDWORD); #define RasEnumAutodialAddresses WINELIB_NAME_AW(RasEnumAutodialAddresses) DWORD WINAPI RasEnumConnectionsA(LPRASCONNA,LPDWORD,LPDWORD); DWORD WINAPI RasEnumConnectionsW(LPRASCONNW,LPDWORD,LPDWORD); #define RasEnumConnections WINELIB_NAME_AW(RasEnumConnections) DWORD WINAPI RasEnumDevicesA(LPRASDEVINFOA,LPDWORD,LPDWORD); DWORD WINAPI RasEnumDevicesW(LPRASDEVINFOW,LPDWORD,LPDWORD); #define RasEnumDevices WINELIB_NAME_AW(RasEnumDevices) DWORD WINAPI RasEnumEntriesA(LPCSTR,LPCSTR,LPRASENTRYNAMEA,LPDWORD,LPDWORD); DWORD WINAPI RasEnumEntriesW(LPCWSTR,LPCWSTR,LPRASENTRYNAMEW,LPDWORD,LPDWORD); #define RasEnumEntries WINELIB_NAME_AW(RasEnumEntries) DWORD WINAPI RasGetAutodialAddressA(LPCSTR,LPDWORD,LPRASAUTODIALENTRYA,LPDWORD,LPDWORD); DWORD WINAPI RasGetAutodialAddressW(LPCWSTR,LPDWORD,LPRASAUTODIALENTRYW,LPDWORD,LPDWORD); #define RasGetAutodialAddresses WINELIB_NAME_AW(RasGetAutodialAddresses) DWORD WINAPI RasGetAutodialEnableA(DWORD,LPBOOL); DWORD WINAPI RasGetAutodialEnableW(DWORD,LPBOOL); #define RasGetAutodialEnable WINELIB_NAME_AW(RasGetAutodialEnable) DWORD WINAPI RasGetAutodialParamA(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue); DWORD WINAPI RasGetAutodialParamW(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue); #define RasGetAutodialParam WINELIB_NAME_AW(RasGetAutodialParam) DWORD WINAPI RasGetConnectStatusA(HRASCONN,LPRASCONNSTATUSA); DWORD WINAPI RasGetConnectStatusW(HRASCONN,LPRASCONNSTATUSW); #define RasGetConnectStatus WINELIB_NAME_AW(RasGetConnectStatus) DWORD WINAPI RasGetEntryDialParamsA(LPCSTR,LPRASDIALPARAMSA,LPBOOL); DWORD WINAPI RasGetEntryDialParamsW(LPCWSTR,LPRASDIALPARAMSW,LPBOOL); #define RasGetEntryDialParams WINELIB_NAME_AW(RasGetEntryDialParams) DWORD WINAPI RasGetEntryPropertiesA(LPCSTR,LPCSTR,LPRASENTRYA,LPDWORD,LPBYTE,LPDWORD); DWORD WINAPI RasGetEntryPropertiesW(LPCWSTR,LPCWSTR,LPRASENTRYW,LPDWORD,LPBYTE,LPDWORD); #define RasGetEntryProperties WINELIB_NAME_AW(RasGetEntryProperties) DWORD WINAPI RasGetErrorStringA(UINT,LPSTR,DWORD); DWORD WINAPI RasGetErrorStringW(UINT,LPWSTR,DWORD); #define RasGetErrorString WINELIB_NAME_AW(RasGetErrorString) DWORD WINAPI RasGetProjectionInfoA(HRASCONN,RASPROJECTION,LPVOID,LPDWORD); DWORD WINAPI RasGetProjectionInfoW(HRASCONN,RASPROJECTION,LPVOID,LPDWORD); #define RasGetProjectionInfo WINELIB_NAME_AW(RasGetProjectionInfo) DWORD WINAPI RasHangUpA(HRASCONN); DWORD WINAPI RasHangUpW(HRASCONN); #define RasHangUp WINELIB_NAME_AW(RasHangUp) DWORD WINAPI RasRenameEntryA(LPCSTR,LPCSTR,LPCSTR); DWORD WINAPI RasRenameEntryW(LPCWSTR,LPCWSTR,LPCWSTR); #define RasRenameEntry WINELIB_NAME_AW(RasRenameEntry) DWORD WINAPI RasSetAutodialAddressA(LPCSTR,DWORD,LPRASAUTODIALENTRYA,DWORD,DWORD); DWORD WINAPI RasSetAutodialAddressW(LPCWSTR,DWORD,LPRASAUTODIALENTRYW,DWORD,DWORD); #define RasSetAutodialAddress WINELIB_NAME_AW(RasSetAutodialAddress) DWORD WINAPI RasSetAutodialParamA(DWORD,LPVOID,DWORD); DWORD WINAPI RasSetAutodialParamW(DWORD,LPVOID,DWORD); #define RasSetAutodialParam WINELIB_NAME_AW(RasSetAutodialParam) DWORD WINAPI RasSetCustomAuthDataA(const CHAR *,const CHAR *,BYTE *,DWORD); DWORD WINAPI RasSetCustomAuthDataW(const WCHAR *,const WCHAR *,BYTE *,DWORD); #define RasSetCustomAuthData WINELIB_NAME_AW(RasSetCustomAuthData) DWORD WINAPI RasSetEntryDialParamsA(LPCSTR,LPRASDIALPARAMSA,BOOL); DWORD WINAPI RasSetEntryDialParamsW(LPCWSTR,LPRASDIALPARAMSW,BOOL); #define RasSetEntryDialParams WINELIB_NAME_AW(RasSetEntryDialParams) DWORD WINAPI RasSetSubEntryPropertiesA(LPCSTR,LPCSTR,DWORD,LPRASSUBENTRYA,DWORD,LPBYTE,DWORD); DWORD WINAPI RasSetSubEntryPropertiesW(LPCWSTR,LPCWSTR,DWORD,LPRASSUBENTRYW,DWORD,LPBYTE,DWORD); #define RasSetSubEntryProperties WINELIB_NAME_AW(RasSetSubEntryProperties) DWORD WINAPI RasValidateEntryNameA(LPCSTR lpszPhonebook, LPCSTR lpszEntry); DWORD WINAPI RasValidateEntryNameW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry); #define RasValidateEntryName WINELIB_NAME_AW(RasValidateEntryName) DWORD WINAPI RasSetEntryPropertiesA(LPCSTR,LPCSTR,LPRASENTRYA,DWORD,LPBYTE,DWORD); DWORD WINAPI RasSetEntryPropertiesW(LPCWSTR,LPCWSTR,LPRASENTRYW,DWORD,LPBYTE,DWORD); #define RasSetEntryProperties WINELIB_NAME_AW(RasSetEntryProperties) DWORD WINAPI RasSetAutodialEnableA(DWORD dwDialingLocation, BOOL fEnabled); DWORD WINAPI RasSetAutodialEnableW(DWORD dwDialingLocation, BOOL fEnabled); #define RasSetAutodialEnable WINELIB_NAME_AW(RasSetAutodialEnable) #include #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/rasdlg.h ================================================ /* * Copyright (C) 2010 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _RASDLG_H_ #define _RASDLG_H_ #include typedef struct tagRASENTRYDLGW { DWORD dwSize; HWND hwndOwner; DWORD dwFlags; LONG xDlg; LONG yDlg; WCHAR szEntry[ RAS_MaxEntryName + 1 ]; DWORD dwError; ULONG_PTR reserved; ULONG_PTR reserved2; } RASENTRYDLGW; #endif /* _RASDLG_H_ */ ================================================ FILE: wine/windows/raserror.h ================================================ /* * Copyright (C) 2008 Stefan Leichter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_RASERROR_H #define __WINE_RASERROR_H #define RASBASE 600 #define ERROR_BUFFER_TOO_SMALL (RASBASE+3) #define ERROR_BUFFER_INVALID (RASBASE+10) #define ERROR_INVALID_SIZE (RASBASE+32) #define ERROR_UNKNOWN (RASBASE+35) #define ERROR_STATE_MACHINES_NOT_STARTED (RASBASE+95) #define ERROR_RASMAN_CANNOT_INITIALIZE (RASBASE+111) #endif ================================================ FILE: wine/windows/reason.h ================================================ /* * ExitWindowsEx() reason codes * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_REASON_H #define __WINE_REASON_H #define SHTDN_REASON_FLAG_USER_DEFINED 0x40000000 #define SHTDN_REASON_FLAG_PLANNED 0x80000000 #define SHTDN_REASON_MAJOR_OTHER 0x00000000 #define SHTDN_REASON_MAJOR_NONE 0x00000000 #define SHTDN_REASON_MAJOR_HARDWARE 0x00010000 #define SHTDN_REASON_MAJOR_OPERATINGSYSTEM 0x00020000 #define SHTDN_REASON_MAJOR_SOFTWARE 0x00030000 #define SHTDN_REASON_MAJOR_APPLICATION 0x00040000 #define SHTDN_REASON_MAJOR_SYSTEM 0x00050000 #define SHTDN_REASON_MAJOR_POWER 0x00060000 #define SHTDN_REASON_MAJOR_LEGACY_API 0x00070000 #define SHTDN_REASON_MINOR_OTHER 0x00000000 #define SHTDN_REASON_MINOR_MAINTENANCE 0x00000001 #define SHTDN_REASON_MINOR_INSTALLATION 0x00000002 #define SHTDN_REASON_MINOR_UPGRADE 0x00000003 #define SHTDN_REASON_MINOR_RECONFIG 0x00000004 #define SHTDN_REASON_MINOR_HUNG 0x00000005 #define SHTDN_REASON_MINOR_UNSTABLE 0x00000006 #define SHTDN_REASON_MINOR_DISK 0x00000007 #define SHTDN_REASON_MINOR_PROCESSOR 0x00000008 #define SHTDN_REASON_MINOR_NETWORKCARD 0x00000009 #define SHTDN_REASON_MINOR_POWER_SUPPLY 0x0000000a #define SHTDN_REASON_MINOR_CORDUNPLUGGED 0x0000000b #define SHTDN_REASON_MINOR_ENVIRONMENT 0x0000000c #define SHTDN_REASON_MINOR_HARDWARE_DRIVER 0x0000000d #define SHTDN_REASON_MINOR_OTHERDRIVER 0x0000000e #define SHTDN_REASON_MINOR_BLUESCREEN 0x0000000f #define SHTDN_REASON_MINOR_SERVICEPACK 0x00000010 #define SHTDN_REASON_MINOR_HOTFIX 0x00000011 #define SHTDN_REASON_MINOR_SECURITYFIX 0x00000012 #define SHTDN_REASON_MINOR_SECURITY 0x00000013 #define SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY 0x00000014 #define SHTDN_REASON_MINOR_WMI 0x00000015 #define SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL 0x00000016 #define SHTDN_REASON_MINOR_HOTFIX_UNINSTALL 0x00000017 #define SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL 0x00000018 #define SHTDN_REASON_MINOR_MMC 0x00000019 #define SHTDN_REASON_MINOR_SYSTEMRESTORE 0x0000001a #define SHTDN_REASON_MINOR_TERMSRV 0x00000020 #define SHTDN_REASON_MINOR_DC_PROMOTION 0x00000021 #define SHTDN_REASON_MINOR_DC_DEMOTION 0x00000022 #define SHTDN_REASON_MINOR_NONE 0x000000ff #define SHTDN_REASON_VALID_BIT_MASK 0xc0ffffff #define SHTDN_REASON_UNKNOWN SHTDN_REASON_MINOR_NONE #define SHTDN_REASON_LEGACY_API (SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED) #endif ================================================ FILE: wine/windows/regstr.h ================================================ /* * Win32 registry string defines (see also winnt.h) * * Copyright (C) 2000 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _INC_REGSTR #define _INC_REGSTR #define REGSTR_PATH_UNINSTALL TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall") #define REGSTR_VAL_MAX_HCID_LEN 1024 /* DisplayName <= 32 chars in Windows (otherwise not displayed for uninstall) */ #define REGSTR_VAL_UNINSTALLER_DISPLAYNAME TEXT("DisplayName") /* UninstallString <= 63 chars in Windows (otherwise problems) */ #define REGSTR_VAL_UNINSTALLER_COMMANDLINE TEXT("UninstallString") #endif /* _INC_REGSTR_H */ ================================================ FILE: wine/windows/restartmanager.h ================================================ /* * Copyright (C) 2010 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef RESTARTMANAGER_H #define RESTARTMANAGER_H #ifdef __cplusplus extern "C" { #endif #define RM_SESSION_KEY_LEN sizeof(GUID) #define CCH_RM_SESSION_KEY RM_SESSION_KEY_LEN*2 #define CCH_RM_MAX_APP_NAME 255 #define CH_RM_MAX_SVC_NAME 63 #define RM_INVALID_TS_SESSION -1 #define RM_INVALID_PROCESS -1 typedef enum { RmUnknownApp = 0, RmMainWindow = 1, RmOtherWindow = 2, RmService = 3, RmExplorer = 4, RmConsole = 5, RmCritical = 1000 } RM_APP_TYPE; typedef enum _RM_REBOOT_REASON { RmRebootReasonNone = 0x0000, RmRebootReasonPermissionDenied = 0x0001, RmRebootReasonSessionMismatch = 0x0002, RmRebootReasonCriticalProcess = 0x0004, RmRebootReasonCriticalService = 0x0008, RmRebootReasonDetectedSelf = 0x0010 } RM_REBOOT_REASON; typedef struct { DWORD dwProcessId; FILETIME ProcessStartTime; } RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS; typedef struct { RM_UNIQUE_PROCESS Process; WCHAR strAppName[CCH_RM_MAX_APP_NAME+1]; WCHAR strServiceShortName[CH_RM_MAX_SVC_NAME+1]; RM_APP_TYPE ApplicationType; ULONG AppStatus; DWORD TSSessionID; BOOL bRestartable; } RM_PROCESS_INFO, *PRM_PROCESS_INFO; typedef void (CDECL *RM_WRITE_STATUS_CALLBACK)(UINT); #ifdef __cplusplus } #endif #endif /* RESTARTMANAGER_H */ ================================================ FILE: wine/windows/richedit.h ================================================ /* * Copyright (C) 2000 Jean-Claude Batista * Copyright (C) 2002 Andriy Palamarchuk * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_RICHEDIT_H #define __WINE_RICHEDIT_H #include #ifdef __cplusplus extern "C" { #endif #ifndef _RICHEDIT_VER #define _RICHEDIT_VER 0x0210 #endif /* _RICHEDIT_VER */ #define cchTextLimitDefault 0x7fff #if defined(__GNUC__) # define MSFTEDIT_CLASS (const WCHAR []){ 'R','i','c','h','E','d','i','t','5','0','W',0 } #elif defined(_MSC_VER) # define MSFTEDIT_CLASS L"RichEdit50W" #else static const WCHAR MSFTEDIT_CLASS[] = { 'R','i','c','h','E','d','i','t','5','0','W',0 }; #endif #define RICHEDIT_CLASS20A "RichEdit20A" #if defined(__GNUC__) # define RICHEDIT_CLASS20W (const WCHAR []){ 'R','i','c','h','E','d','i','t','2','0','W',0 } #elif defined(_MSC_VER) # define RICHEDIT_CLASS20W L"RichEdit20W" #else static const WCHAR RICHEDIT_CLASS20W[] = { 'R','i','c','h','E','d','i','t','2','0','W',0 }; #endif #define RICHEDIT_CLASS10A "RICHEDIT" #if (_RICHEDIT_VER >= 0x0200 ) #define RICHEDIT_CLASS WINELIB_NAME_AW(RICHEDIT_CLASS20) #else #define RICHEDIT_CLASS RICHEDIT_CLASS10A #endif #ifndef WM_NOTIFY #define WM_NOTIFY 0x004e #endif #ifndef WM_CONTEXTMENU #define WM_CONTEXTMENU 0x007b #endif #ifndef WM_UNICHAR #define WM_UNICHAR 0x0109 #endif #ifndef WM_PRINTCLIENT #define WM_PRINTCLIENT 0x0318 #endif #ifndef EM_GETLIMITTEXT #define EM_GETLIMITTEXT (WM_USER + 37) #endif #ifndef EM_POSFROMCHAR #define EM_POSFROMCHAR (WM_USER + 38) #define EM_CHARFROMPOS (WM_USER + 39) #endif #ifndef EM_SCROLLCARET #define EM_SCROLLCARET (WM_USER + 49) #endif #define EM_CANPASTE (WM_USER + 50) #define EM_DISPLAYBAND (WM_USER + 51) #define EM_EXGETSEL (WM_USER + 52) #define EM_EXLIMITTEXT (WM_USER + 53) #define EM_EXLINEFROMCHAR (WM_USER + 54) #define EM_EXSETSEL (WM_USER + 55) #define EM_FINDTEXT (WM_USER + 56) #define EM_FORMATRANGE (WM_USER + 57) #define EM_GETCHARFORMAT (WM_USER + 58) #define EM_GETEVENTMASK (WM_USER + 59) #define EM_GETOLEINTERFACE (WM_USER + 60) #define EM_GETPARAFORMAT (WM_USER + 61) #define EM_GETSELTEXT (WM_USER + 62) #define EM_HIDESELECTION (WM_USER + 63) #define EM_PASTESPECIAL (WM_USER + 64) #define EM_REQUESTRESIZE (WM_USER + 65) #define EM_SELECTIONTYPE (WM_USER + 66) #define EM_SETBKGNDCOLOR (WM_USER + 67) #define EM_SETCHARFORMAT (WM_USER + 68) #define EM_SETEVENTMASK (WM_USER + 69) #define EM_SETOLECALLBACK (WM_USER + 70) #define EM_SETPARAFORMAT (WM_USER + 71) #define EM_SETTARGETDEVICE (WM_USER + 72) #define EM_STREAMIN (WM_USER + 73) #define EM_STREAMOUT (WM_USER + 74) #define EM_GETTEXTRANGE (WM_USER + 75) #define EM_FINDWORDBREAK (WM_USER + 76) #define EM_SETOPTIONS (WM_USER + 77) #define EM_GETOPTIONS (WM_USER + 78) #define EM_FINDTEXTEX (WM_USER + 79) #define EM_GETWORDBREAKPROCEX (WM_USER + 80) #define EM_SETWORDBREAKPROCEX (WM_USER + 81) #define EM_SETUNDOLIMIT (WM_USER + 82) #define EM_REDO (WM_USER + 84) #define EM_CANREDO (WM_USER + 85) #define EM_GETUNDONAME (WM_USER + 86) #define EM_GETREDONAME (WM_USER + 87) #define EM_STOPGROUPTYPING (WM_USER + 88) #define EM_SETTEXTMODE (WM_USER + 89) #define EM_GETTEXTMODE (WM_USER + 90) #define EM_AUTOURLDETECT (WM_USER + 91) #define EM_GETAUTOURLDETECT (WM_USER + 92) #define EM_SETPALETTE (WM_USER + 93) #define EM_GETTEXTEX (WM_USER + 94) #define EM_GETTEXTLENGTHEX (WM_USER + 95) #define EM_SHOWSCROLLBAR (WM_USER + 96) #define EM_SETTEXTEX (WM_USER + 97) #define EM_SETPUNCTUATION (WM_USER + 100) #define EM_GETPUNCTUATION (WM_USER + 101) #define EM_SETWORDWRAPMODE (WM_USER + 102) #define EM_GETWORDWRAPMODE (WM_USER + 103) #define EM_SETIMECOLOR (WM_USER + 104) #define EM_GETIMECOLOR (WM_USER + 105) #define EM_SETIMEOPTIONS (WM_USER + 106) #define EM_GETIMEOPTIONS (WM_USER + 107) #define EM_CONVPOSITION (WM_USER + 108) #define EM_SETLANGOPTIONS (WM_USER + 120) #define EM_GETLANGOPTIONS (WM_USER + 121) #define EM_GETIMECOMPMODE (WM_USER + 122) #define EM_FINDTEXTW (WM_USER + 123) #define EM_FINDTEXTEXW (WM_USER + 124) #define EM_RECONVERSION (WM_USER + 125) #define EM_SETIMEMODEBIAS (WM_USER + 126) #define EM_GETIMEMODEBIAS (WM_USER + 127) #define EM_SETBIDIOPTIONS (WM_USER + 200) #define EM_GETBIDIOPTIONS (WM_USER + 201) #define EM_SETTYPOGRAPHYOPTIONS (WM_USER + 202) #define EM_GETTYPOGRAPHYOPTIONS (WM_USER + 203) #define EM_SETEDITSTYLE (WM_USER + 204) #define EM_GETEDITSTYLE (WM_USER + 205) #define EM_OUTLINE (WM_USER + 220) #define EM_GETSCROLLPOS (WM_USER + 221) #define EM_SETSCROLLPOS (WM_USER + 222) #define EM_SETFONTSIZE (WM_USER + 223) #define EM_GETZOOM (WM_USER + 224) #define EM_SETZOOM (WM_USER + 225) #define EM_GETVIEWKIND (WM_USER + 226) #define EM_SETVIEWKIND (WM_USER + 227) #define EM_GETPAGE (WM_USER + 228) #define EM_SETPAGE (WM_USER + 229) #define EM_GETHYPHENATEINFO (WM_USER + 230) #define EM_SETHYPHENATEINFO (WM_USER + 231) #define EM_GETPAGEROTATE (WM_USER + 235) #define EM_SETPAGEROTATE (WM_USER + 236) #define EM_GETCTFMODEBIAS (WM_USER + 237) #define EM_SETCTFMODEBIAS (WM_USER + 238) #define EM_GETCTFOPENSTATUS (WM_USER + 240) #define EM_SETCTFOPENSTATUS (WM_USER + 241) #define EM_GETIMECOMPTEXT (WM_USER + 242) #define EM_ISIME (WM_USER + 243) #define EM_GETIMEPROPERTY (WM_USER + 244) #define EM_GETQUERYRTFOBJ (WM_USER + 269) #define EM_SETQUERYRTFOBJ (WM_USER + 270) /* New notifications */ #define EN_MSGFILTER 0x0700 #define EN_REQUESTRESIZE 0x0701 #define EN_SELCHANGE 0x0702 #define EN_DROPFILES 0x0703 #define EN_PROTECTED 0x0704 #define EN_CORRECTTEXT 0x0705 #define EN_STOPNOUNDO 0x0706 #define EN_IMECHANGE 0x0707 #define EN_SAVECLIPBOARD 0x0708 #define EN_OLEOPFAILED 0x0709 #define EN_OBJECTPOSITIONS 0x070a #define EN_LINK 0x070b #define EN_DRAGDROPDONE 0x070c #define EN_PARAGRAPHEXPANDED 0x070d #define EN_PAGECHANGE 0x070e #define EN_LOWFIRTF 0x070f #define EN_ALIGNLTR 0x0710 #define EN_ALIGNRTL 0x0711 #define EN_CLIPFORMAT 0x0712 #define EN_STARTCOMPOSITION 0x0713 #define EN_ENDCOMPOSITION 0x0714 typedef DWORD (CALLBACK * EDITSTREAMCALLBACK)( DWORD_PTR, LPBYTE, LONG, LONG * ); #define yHeightCharPtsMost 1638 #define lDefaultTab 720 /* tab stops number limit */ #define MAX_TAB_STOPS 0x00000020 #define MAX_TABLE_CELLS 63 /* Rich edit control styles */ #define ES_NOOLEDRAGDROP 0x00000008 #define ES_DISABLENOSCROLL 0x00002000 #define ES_SUNKEN 0x00004000 #define ES_SAVESEL 0x00008000 #define ES_SELFIME 0x00040000 #define ES_NOIME 0x00080000 #define ES_VERTICAL 0x00400000 #define ES_SELECTIONBAR 0x01000000 #define ES_EX_NOCALLOLEINIT 0x01000000 /* the character formatting options */ #define SCF_DEFAULT 0x00000000 #define SCF_SELECTION 0x00000001 #define SCF_WORD 0x00000002 #define SCF_ALL 0x00000004 #define SCF_USEUIRULES 0x00000008 #define SCF_ASSOCIATEFONT 0x00000010 #define SCF_NOKBUPDATE 0x00000020 #define SCF_ASSOCIATEFONT2 0x00000040 #ifndef WM_NOTIFY typedef struct _nmhdr { HWND hwndFrom; UINT idFrom; UINT code; } NMHDR; #endif /* CHARFORMAT structure */ typedef struct _charformat { UINT cbSize; DWORD dwMask; DWORD dwEffects; LONG yHeight; LONG yOffset; COLORREF crTextColor; BYTE bCharSet; BYTE bPitchAndFamily; char szFaceName[LF_FACESIZE]; } CHARFORMATA; typedef struct _charformatw { UINT cbSize; DWORD dwMask; DWORD dwEffects; LONG yHeight; LONG yOffset; COLORREF crTextColor; BYTE bCharSet; BYTE bPitchAndFamily; WCHAR szFaceName[LF_FACESIZE]; } CHARFORMATW; DECL_WINELIB_TYPE_AW(CHARFORMAT) typedef struct _charformat2a { UINT cbSize; DWORD dwMask; DWORD dwEffects; LONG yHeight; LONG yOffset; COLORREF crTextColor; BYTE bCharSet; BYTE bPitchAndFamily; char szFaceName[LF_FACESIZE]; WORD pad; /* Not in MS's C version, but needed to ensure that wWeight is at the correct offset to match the C++ version */ WORD wWeight; SHORT sSpacing; COLORREF crBackColor; LCID lcid; DWORD dwReserved; SHORT sStyle; WORD wKerning; BYTE bUnderlineType; BYTE bAnimation; BYTE bRevAuthor; } CHARFORMAT2A; typedef struct _charformat2w { UINT cbSize; DWORD dwMask; DWORD dwEffects; LONG yHeight; LONG yOffset; COLORREF crTextColor; BYTE bCharSet; BYTE bPitchAndFamily; WCHAR szFaceName[LF_FACESIZE]; WORD pad; /* Not in MS's C version, but needed to ensure that wWeight is at the correct offset to match the C++ version */ WORD wWeight; SHORT sSpacing; COLORREF crBackColor; LCID lcid; DWORD dwReserved; SHORT sStyle; WORD wKerning; BYTE bUnderlineType; BYTE bAnimation; BYTE bRevAuthor; } CHARFORMAT2W; DECL_WINELIB_TYPE_AW(CHARFORMAT2) #define CHARFORMATDELTA (sizeof(CHARFORMAT2) - sizeof(CHARFORMAT)) /* CHARFORMAT masks */ #define CFM_BOLD 0x00000001 #define CFM_ITALIC 0x00000002 #define CFM_UNDERLINE 0x00000004 #define CFM_STRIKEOUT 0x00000008 #define CFM_PROTECTED 0x00000010 #define CFM_LINK 0x00000020 #define CFM_SMALLCAPS 0x00000040 #define CFM_ALLCAPS 0x00000080 #define CFM_HIDDEN 0x00000100 #define CFM_OUTLINE 0x00000200 #define CFM_SHADOW 0x00000400 #define CFM_EMBOSS 0x00000800 #define CFM_IMPRINT 0x00001000 #define CFM_DISABLED 0x00002000 #define CFM_REVISED 0x00004000 #define CFM_REVAUTHOR 0x00008000 #define CFM_SUBSCRIPT 0x00030000 #define CFM_SUPERSCRIPT 0x00030000 #define CFM_ANIMATION 0x00040000 #define CFM_STYLE 0x00080000 #define CFM_KERNING 0x00100000 #define CFM_SPACING 0x00200000 #define CFM_WEIGHT 0x00400000 #define CFM_UNDERLINETYPE 0x00800000 #define CFM_LCID 0x02000000 #define CFM_BACKCOLOR 0x04000000 #define CFM_CHARSET 0x08000000 #define CFM_OFFSET 0x10000000 #define CFM_FACE 0x20000000 #define CFM_COLOR 0x40000000 #define CFM_SIZE 0x80000000 #define CFM_EFFECTS (CFM_BOLD | \ CFM_ITALIC | \ CFM_UNDERLINE | \ CFM_COLOR | \ CFM_STRIKEOUT | \ CFE_PROTECTED | \ CFM_LINK) #define CFM_EFFECTS2 (CFM_EFFECTS | \ CFM_DISABLED | \ CFM_SMALLCAPS | \ CFM_ALLCAPS | \ CFM_HIDDEN | \ CFM_OUTLINE | \ CFM_SHADOW | \ CFM_EMBOSS | \ CFM_IMPRINT | \ CFM_DISABLED | \ CFM_REVISED | \ CFM_SUBSCRIPT | \ CFM_SUPERSCRIPT | \ CFM_BACKCOLOR) #define CFM_ALL (CFM_EFFECTS | \ CFM_SIZE | \ CFM_FACE | \ CFM_OFFSET | \ CFM_CHARSET) #define CFM_ALL2 (CFM_ALL | \ CFM_EFFECTS2 | \ CFM_BACKCOLOR | \ CFM_LCID | \ CFM_UNDERLINETYPE | \ CFM_WEIGHT | \ CFM_REVAUTHOR | \ CFM_SPACING | \ CFM_KERNING | \ CFM_STYLE | \ CFM_ANIMATION) /* CHARFORMAT effects */ #define CFE_BOLD 0x00000001 #define CFE_ITALIC 0x00000002 #define CFE_UNDERLINE 0x00000004 #define CFE_STRIKEOUT 0x00000008 #define CFE_PROTECTED 0x00000010 #define CFE_LINK 0x00000020 #define CFE_SUBSCRIPT 0x00010000 #define CFE_SUPERSCRIPT 0x00020000 #define CFE_AUTOCOLOR 0x40000000 #define CFE_SMALLCAPS CFM_SMALLCAPS #define CFE_ALLCAPS CFM_ALLCAPS #define CFE_HIDDEN CFM_HIDDEN #define CFE_OUTLINE CFM_OUTLINE #define CFE_SHADOW CFM_SHADOW #define CFE_EMBOSS CFM_EMBOSS #define CFE_IMPRINT CFM_IMPRINT #define CFE_DISABLED CFM_DISABLED #define CFE_REVISED CFM_REVISED #define CFE_AUTOBACKCOLOR CFM_BACKCOLOR #define CFU_UNDERLINENONE 0x00 #define CFU_UNDERLINE 0x01 #define CFU_UNDERLINEWORD 0x02 #define CFU_UNDERLINEDOUBLE 0x03 #define CFU_UNDERLINEDOTTED 0x04 #define CFU_UNDERLINEDASH 0x05 #define CFU_UNDERLINEDASHDOT 0x06 #define CFU_UNDERLINEDASHDOTDOT 0x07 #define CFU_UNDERLINEWAVE 0x08 #define CFU_UNDERLINETHICK 0x09 #define CFU_UNDERLINEHAIRLINE 0x0a #define CFU_UNDERLINEDOUBLEWAVE 0x0b #define CFU_UNDERLINEHEAVYWAVE 0x0c #define CFU_UNDERLINELONGDASH 0x0d #define CFU_UNDERLINETHICKDASH 0x0e #define CFU_UNDERLINETHICKDASHDOT 0x0f #define CFU_UNDERLINETHICKDASHDOTDOT 0x10 #define CFU_UNDERLINETHICKDOTTED 0x11 #define CFU_UNDERLINETHICKLONGDASH 0x12 #define CFU_INVERT 0xFE #define CFU_CF1UNDERLINE 0xFF /* ECO operations */ #define ECOOP_SET 0x0001 #define ECOOP_OR 0x0002 #define ECOOP_AND 0x0003 #define ECOOP_XOR 0x0004 /* edit control options */ #define ECO_AUTOWORDSELECTION 0x00000001 #define ECO_AUTOVSCROLL 0x00000040 #define ECO_AUTOHSCROLL 0x00000080 #define ECO_NOHIDESEL 0x00000100 #define ECO_READONLY 0x00000800 #define ECO_WANTRETURN 0x00001000 #define ECO_SAVESEL 0x00008000 #define ECO_SELECTIONBAR 0x01000000 #define ECO_VERTICAL 0x00400000 /* Event notification masks */ #define ENM_NONE 0x00000000 #define ENM_CHANGE 0x00000001 #define ENM_UPDATE 0x00000002 #define ENM_SCROLL 0x00000004 #define ENM_SCROLLEVENTS 0x00000008 #define ENM_DRAGDROPDONE 0x00000010 #define ENM_PARAGRAPHEXPANDED 0x00000020 #define ENM_PAGECHANGE 0x00000040 #define ENM_KEYEVENTS 0x00010000 #define ENM_MOUSEEVENTS 0x00020000 #define ENM_REQUESTRESIZE 0x00040000 #define ENM_SELCHANGE 0x00080000 #define ENM_DROPFILES 0x00100000 #define ENM_PROTECTED 0x00200000 #define ENM_CORRECTTEXT 0x00400000 #define ENM_IMECHANGE 0x00800000 #define ENM_LANGCHANGE 0x01000000 #define ENM_OBJECTPOSITIONS 0x02000000 #define ENM_LINK 0x04000000 #define ENM_LOWFIRTF 0x08000000 typedef struct _bidioptions { UINT cbSize; WORD wMask; WORD wEffects; } BIDIOPTIONS; #ifndef __RICHEDIT_CHARRANGE_DEFINED #define __RICHEDIT_CHARRANGE_DEFINED typedef struct _charrange { LONG cpMin; LONG cpMax; } CHARRANGE; #endif /* __RICHEDIT_CHARRANGE_DEFINED */ typedef struct _textrange { CHARRANGE chrg; LPSTR lpstrText; } TEXTRANGEA; typedef struct _textrangew { CHARRANGE chrg; LPWSTR lpstrText; } TEXTRANGEW; DECL_WINELIB_TYPE_AW(TEXTRANGE) typedef struct _editstream { DWORD_PTR dwCookie; DWORD dwError; EDITSTREAMCALLBACK pfnCallback; } EDITSTREAM; typedef struct _compcolor { COLORREF crText; COLORREF crBackground; DWORD dwEffects; } COMPCOLOR; typedef struct _encorrecttext { NMHDR nmhdr; CHARRANGE chrg; WORD seltyp; } ENCORRECTTEXT; typedef struct _endropfiles { NMHDR nmhdr; HANDLE hDrop; LONG cp; BOOL fProtected; } ENDROPFILES; typedef struct _enlink { NMHDR nmhdr; UINT msg; WPARAM wParam; LPARAM lParam; CHARRANGE chrg; } ENLINK; typedef struct _enlowfirtf { NMHDR nmhdr; char *szControl; } ENLOWFIRTF; typedef struct { NMHDR nmhdr; LONG iob; LONG lOper; HRESULT hr; } ENOLEOPFAILED; typedef struct _enprotected { NMHDR nmhdr; UINT msg; WPARAM wParam; LPARAM lParam; CHARRANGE chrg; } ENPROTECTED, *LPENPROTECTED; typedef struct _ensaveclipboard { NMHDR nmhdr; LONG cObjectCount; LONG cch; } ENSAVECLIPBOARD; typedef struct _findtextA { CHARRANGE chrg; LPCSTR lpstrText; } FINDTEXTA; typedef struct _findtextW { CHARRANGE chrg; LPCWSTR lpstrText; } FINDTEXTW; DECL_WINELIB_TYPE_AW(FINDTEXT) typedef struct _findtextexA { CHARRANGE chrg; LPCSTR lpstrText; CHARRANGE chrgText; } FINDTEXTEXA; typedef struct _findtextexW { CHARRANGE chrg; LPCWSTR lpstrText; CHARRANGE chrgText; } FINDTEXTEXW; DECL_WINELIB_TYPE_AW(FINDTEXTEX) typedef struct _formatrange { HDC hdc; HDC hdcTarget; RECT rc; RECT rcPage; CHARRANGE chrg; } FORMATRANGE; typedef enum tagKHYPH { khyphNil = 0, khyphNormal = 1, khyphAddBefore = 2, khyphChangeBefore = 3, khyphDeleteBefore = 4, khyphChangeAfter = 5, khyphDelAndChange = 6 } KHYPH; typedef struct hyphresult { KHYPH khyph; LONG ichHyph; WCHAR chHyph; } HYPHRESULT; typedef struct tagHyphenateInfo { SHORT cbSize; SHORT dxHyphenateZone; void (WINAPI* pfnHyphenate)(WCHAR*, LANGID, LONG, HYPHRESULT*); } HYPHENATEINFO; typedef struct _msgfilter { NMHDR nmhdr; UINT msg; WPARAM wParam; LPARAM lParam; } MSGFILTER; typedef struct _objectpositions { NMHDR nmhdr; LONG cObjectCount; LONG *pcpPositions; } OBJECTPOSITIONS; typedef struct _paraformat { UINT cbSize; DWORD dwMask; WORD wNumbering; WORD wReserved; LONG dxStartIndent; LONG dxRightIndent; LONG dxOffset; WORD wAlignment; SHORT cTabCount; LONG rgxTabs[MAX_TAB_STOPS]; } PARAFORMAT; typedef struct _paraformat2 { UINT cbSize; DWORD dwMask; WORD wNumbering; WORD wEffects; LONG dxStartIndent; LONG dxRightIndent; LONG dxOffset; WORD wAlignment; SHORT cTabCount; LONG rgxTabs[MAX_TAB_STOPS]; LONG dySpaceBefore, dySpaceAfter, dyLineSpacing; SHORT sStyle; BYTE bLineSpacingRule, bOutlineLevel; WORD wShadingWeight, wShadingStyle; WORD wNumberingStart, wNumberingStyle, wNumberingTab; WORD wBorderSpace, wBorderWidth, wBorders; } PARAFORMAT2; typedef struct _selchange { NMHDR nmhdr; CHARRANGE chrg; WORD seltyp; } SELCHANGE; typedef struct _reqresize { NMHDR nmhdr; RECT rc; } REQRESIZE; typedef struct _repastespecial { DWORD dwAspect; DWORD_PTR dwParam; } REPASTESPECIAL; typedef struct _punctuation { UINT iSize; LPSTR szPunctuation; } PUNCTUATION; typedef struct _gettextex { DWORD cb; DWORD flags; UINT codepage; LPCSTR lpDefaultChar; LPBOOL lpUsedDefChar; } GETTEXTEX; typedef struct _imecomptext { LONG cb; DWORD flags; } IMECOMPTEXT; void WINAPI HyphenateProc(WCHAR*, LANGID, LONG, HYPHRESULT*); #define SF_TEXT 0x00000001 #define SF_RTF 0x00000002 #define SF_RTFNOOBJS 0x00000003 #define SF_TEXTIZED 0x00000004 #define SF_UNICODE 0x00000010 #define SF_USECODEPAGE 0x00000020 #define SF_NCRFORNONASCII 0x00000040 #define SF_RTFVAL 0x00000700 /* BIDIOPTIONS.wMask flag values */ #define BOM_DEFPARADIR 0x00000001 #define BOM_PLAINTEXT 0x00000002 #define BOM_NEUTRALOVERRIDE 0x00000004 #define BOM_CONTEXTREADING 0x00000008 #define BOM_CONTEXTALIGNMENT 0x00000010 #define BOM_LEGACYBIDICLASS 0x00000040 /* BIDIOPTIONS.wEffects flag values */ #define BOE_RTLDIR 0x00000001 #define BOE_PLAINTEXT 0x00000002 #define BOE_NEUTRALOVERRIDE 0x00000004 #define BOE_CONTEXTREADING 0x00000008 #define BOE_CONTEXTALIGNMENT 0x00000010 #define BOE_LEGACYBIDICLASS 0x00000040 /* Clipboard formats */ #define CF_RTF TEXT("Rich Text Format") #define CF_RTFNOOBJS TEXT("Rich Text Format Without Objects") #define CF_RETEXTOBJ TEXT("RichEdit Text and Objects") /* Mode bias wParam values for EM_SETCTFMODEBIAS message */ #define CTFMODEBIAS_DEFAULT 0x00000000 #define CTFMODEBIAS_FILENAME 0x00000001 #define CTFMODEBIAS_NAME 0x00000002 #define CTFMODEBIAS_READING 0x00000003 #define CTFMODEBIAS_DATETIME 0x00000004 #define CTFMODEBIAS_CONVERSATION 0x00000005 #define CTFMODEBIAS_NUMERIC 0x00000006 #define CTFMODEBIAS_HIRAGANA 0x00000007 #define CTFMODEBIAS_KATAKANA 0x00000008 #define CTFMODEBIAS_HANGUL 0x00000009 #define CTFMODEBIAS_HALFWIDTHKATAKANA 0x0000000a #define CTFMODEBIAS_FULLWIDTHALPHANUMERIC 0x0000000b #define CTFMODEBIAS_HALFWIDTHALPHANUMERIC 0x0000000c #define EMO_EXIT 0x00000000 #define EMO_ENTER 0x00000001 #define EMO_PROMOTE 0x00000002 #define EMO_EXPAND 0x00000003 #define EMO_MOVESELECTION 0x00000004 #define EMO_GETVIEWMODE 0x00000005 #define EMO_EXPANDSELECTION 0x00000000 #define EMO_EXPANDDOCUMENT 0x00000001 /* Page Rotate values used in wParam of EM_SETPAGEROTATE message */ #define EPR_0 0x00000000 #define EPR_270 0x00000001 #define EPR_180 0x00000002 #define EPR_90 0x00000003 /* Find flags for wParam of EM_FINDTEXT message */ #define FR_MATCHDIAC 0x20000000 #define FR_MATCHKASHIDA 0x40000000 #define FR_MATCHALEFHAMZA 0x80000000 /* IME Compatibility Mode return values for EM_GETIMECOMPMODE message */ #define ICM_NOTOPEN 0x00000000 #define ICM_LEVEL3 0x00000001 #define ICM_LEVEL2 0x00000002 #define ICM_LEVEL2_5 0x00000003 #define ICM_LEVEL2_SUI 0x00000004 #define ICM_CTF 0x00000005 /* Flags value for IMECOMPTEXT structure */ #define ICT_RESULTREADSTR 0x00000001 /* Input Method Flags used in EM_SETLANGOPTIONS message */ #define IMF_AUTOKEYBOARD 0x00000001 #define IMF_AUTOFONT 0x00000002 #define IMF_IMECANCELCOMPLETE 0x00000004 #define IMF_IMEALWAYSSENDNOTIFY 0x00000008 #define IMF_AUTOFONTSIZEADJUST 0x00000010 #define IMF_UIFONTS 0x00000020 #define IMF_DUALFONT 0x00000080 /* Parameters values for the EM_SETIMEMODEBIAS message */ #define IMF_SMODE_PLAURALCLAUSE 0x00000001 #define IMF_SMODE_NONE 0x00000002 /* Parameters of the EM_SETIMEOPTIONS message */ #define IMF_FORCENONE 0x00000001 #define IMF_FORCEENABLE 0x00000002 #define IMF_FORCEDISABLE 0x00000004 #define IMF_CLOSESTATUSWINDOW 0x00000008 #define IMF_VERTICAL 0x00000020 #define IMF_FORCEACTIVE 0x00000040 #define IMF_FORCEINACTIVE 0x00000080 #define IMF_FORCEREMEMBER 0x00000100 #define IMF_MULTIPLEEDIT 0x00000400 /* return values of the EM_SELECTION_TYPE message */ #define SEL_EMPTY 0x00000000 #define SEL_TEXT 0x00000001 #define SEL_OBJECT 0x00000002 #define SEL_MULTICHAR 0x00000004 #define SEL_MULTIOBJECT 0x00000008 /* ENOLEOPFAILED.lOper value that indicates operation failure */ #define OLEOP_DOVERB 0x00000001 /* punctionation type values for wParam of EM_SETPUNCTUATION message */ #define PC_FOLLOWING 0x00000001 #define PC_LEADING 0x00000002 #define PC_OVERFLOW 0x00000003 #define PC_DELIMITER 0x00000004 /* mask values in the PARAFORMAT structure */ #define PFM_STARTINDENT 0x00000001 #define PFM_RIGHTINDENT 0x00000002 #define PFM_OFFSET 0x00000004 #define PFM_ALIGNMENT 0x00000008 #define PFM_TABSTOPS 0x00000010 #define PFM_NUMBERING 0x00000020 #define PFM_OFFSETINDENT 0x80000000 /* mask values in the PARAFORMAT2 structure */ #define PFM_SPACEBEFORE 0x00000040 #define PFM_SPACEAFTER 0x00000080 #define PFM_LINESPACING 0x00000100 #define PFM_STYLE 0x00000400 #define PFM_BORDER 0x00000800 #define PFM_SHADING 0x00001000 #define PFM_NUMBERINGSTYLE 0x00002000 #define PFM_NUMBERINGTAB 0x00004000 #define PFM_NUMBERINGSTART 0x00008000 #define PFM_RTLPARA 0x00010000 #define PFM_KEEP 0x00020000 #define PFM_KEEPNEXT 0x00040000 #define PFM_PAGEBREAKBEFORE 0x00080000 #define PFM_NOLINENUMBER 0x00100000 #define PFM_NOWIDOWCONTROL 0x00200000 #define PFM_DONOTHYPHEN 0x00400000 #define PFM_SIDEBYSIDE 0x00800000 #define PFM_COLLAPSED 0x01000000 #define PFM_OUTLINELEVEL 0x02000000 #define PFM_BOX 0x04000000 #define PFM_RESERVED2 0x08000000 #define PFM_TABLEROWDELIMITER 0x10000000 #define PFM_TEXTWRAPPINGBREAK 0x20000000 #define PFM_TABLE 0x40000000 #define PFM_ALL (PFM_STARTINDENT | \ PFM_RIGHTINDENT | \ PFM_OFFSET | \ PFM_ALIGNMENT | \ PFM_TABSTOPS | \ PFM_NUMBERING | \ PFM_OFFSETINDENT | \ PFM_RTLPARA) #define PFM_EFFECTS (PFM_RTLPARA | \ PFM_KEEP | \ PFM_KEEPNEXT | \ PFM_PAGEBREAKBEFORE | \ PFM_NOLINENUMBER | \ PFM_NOWIDOWCONTROL | \ PFM_DONOTHYPHEN | \ PFM_SIDEBYSIDE | \ PFM_TABLEROWDELIMITER | \ PFM_TABLE) #define PFM_ALL2 (PFM_ALL | \ PFM_EFFECTS | \ PFM_SPACEBEFORE | \ PFM_SPACEAFTER | \ PFM_LINESPACING | \ PFM_STYLE | \ PFM_BORDER | \ PFM_SHADING | \ PFM_NUMBERINGSTYLE | \ PFM_NUMBERINGTAB | \ PFM_NUMBERINGSTART) /* numbering option */ #define PFN_BULLET 0x00000001 #define PFN_ARABIC 0x00000002 #define PFN_LCLETTER 0x00000003 #define PFN_UCLETTER 0x00000004 #define PFN_LCROMAN 0x00000005 #define PFN_UCROMAN 0x00000006 /* paragraph format numbering styles */ #define PFNS_PAREN 0x00000000 #define PFNS_PARENS 0x00000100 #define PFNS_PERIOD 0x00000200 #define PFNS_PLAIN 0x00000300 #define PFNS_NONUMBER 0x00000400 #define PFNS_NEWNUMBER 0x00008000 /* paragraph alignment */ #define PFA_LEFT 0x00000001 #define PFA_RIGHT 0x00000002 #define PFA_CENTER 0x00000003 #define PFA_JUSTIFY 0x00000004 #define PFA_FULL_INTERWORD 0x00000004 #define PFA_FULL_INTERLETTER 0x00000005 #define PFA_FULL_SCALED 0x00000006 #define PFA_FULL_GLYPHS 0x00000007 #define PFA_SNAP_GRID 0x00000008 /* paragraph effects */ #define PFE_RTLPARA 0x00000001 #define PFE_KEEP 0x00000002 #define PFE_KEEPNEXT 0x00000004 #define PFE_PAGEBREAKBEFORE 0x00000008 #define PFE_NOLINENUMBER 0x00000010 #define PFE_NOWIDOWCONTROL 0x00000020 #define PFE_DONOTHYPHEN 0x00000040 #define PFE_SIDEBYSIDE 0x00000080 #define PFE_COLLAPSED 0x00000100 #define PFE_BOX 0x00000400 #define PFE_TABLEROWDELIMITER 0x00001000 #define PFE_TEXTWRAPPINGBREAK 0x00002000 #define PFE_TABLE 0x00004000 /* Set Edit Style flags for EM_SETEDITSTYLE message */ #define SES_EMULATESYSEDIT 0x00000001 #define SES_BEEPONMAXTEXT 0x00000002 #define SES_EXTENDBACKCOLOR 0x00000004 #define SES_MAPCPS 0x00000008 #define SES_EMULATE10 0x00000010 #define SES_USECRLF 0x00000020 #define SES_NOXLTSYMBOLRANGE 0x00000020 #define SES_USEAIMM 0x00000040 #define SES_NOIME 0x00000080 #define SES_ALLOWBEEPS 0x00000100 #define SES_UPPERCASE 0x00000200 #define SES_LOWERCASE 0x00000400 #define SES_NOINPUTSEQUENCECHK 0x00000800 #define SES_BIDI 0x00001000 #define SES_SCROLLONKILLFOCUS 0x00002000 #define SES_XLTCRCRLFTOCR 0x00004000 #define SES_DRAFTMODE 0x00008000 #define SES_USECTF 0x00010000 #define SES_HIDEGRIDLINES 0x00020000 #define SES_USEATFONT 0x00040000 #define SES_CUSTOMLOOK 0x00080000 #define SES_LBSCROLLNOTIFY 0x00100000 #define SES_CTFALLOWEMBED 0x00200000 #define SES_CTFALLOWSMARTTAG 0x00400000 #define SES_CTFALLOWPROOFING 0x00800000 /* streaming flags */ #define SFF_WRITEXTRAPAR 0x00000080 #define SFF_PWD 0x00000800 #define SFF_KEEPDOCINFO 0x00001000 #define SFF_PERSISTVIEWSCALE 0x00002000 #define SFF_PLAINRTF 0x00004000 #define SFF_SELECTION 0x00008000 typedef enum _undonameid { UID_UNKNOWN = 0, UID_TYPING = 1, UID_DELETE = 2, UID_DRAGDROP = 3, UID_CUT = 4, UID_PASTE = 5, UID_AUTOCORRECT = 6 } UNDONAMEID; typedef LONG (*EDITWORDBREAKPROCEX)(char*,LONG,BYTE,INT); #define VM_OUTLINE 0x00000002 #define VM_NORMAL 0x00000004 #define VM_PAGE 0x00000009 /* options of the EM_FINDWORDBREAK message */ #define WB_CLASSIFY 0x00000003 #define WB_MOVEWORDLEFT 0x00000004 #define WB_MOVEWORDPREV 0x00000004 #define WB_MOVEWORDRIGHT 0x00000005 #define WB_MOVEWORDNEXT 0x00000005 #define WB_LEFTBREAK 0x00000006 #define WB_PREVBREAK 0x00000006 #define WB_RIGHTBREAK 0x00000007 #define WB_NEXTBREAK 0x00000007 /* options of the EM_SETWORDWRAPMODE message */ #define WBF_WORDWRAP 0x00000010 #define WBF_WORDBREAK 0x00000020 #define WBF_OVERFLOW 0x00000040 #define WBF_LEVEL1 0x00000080 #define WBF_LEVEL2 0x00000100 #define WBF_CUSTOM 0x00000200 #define WBF_CLASS ((BYTE) 0x0F) #define WBF_ISWHITE ((BYTE) 0x10) #define WBF_BREAKLINE ((BYTE) 0x20) #define WBF_BREAKAFTER ((BYTE) 0x40) /* Placeholder unicode character for an embedded object */ #ifndef WCH_EMBEDDING #define WCH_EMBEDDING (WCHAR)0xFFFC #endif /* options of the EM_SETTEXTMODE message */ #define TM_PLAINTEXT 0x00000001 #define TM_RICHTEXT 0x00000002 #define TM_SINGLELEVELUNDO 0x00000004 #define TM_MULTILEVELUNDO 0x00000008 #define TM_SINGLECODEPAGE 0x00000010 #define TM_MULTICODEPAGE 0x00000020 /* GETTEXTEX structure flags */ #define GT_DEFAULT 0x00000000 #define GT_USECRLF 0x00000001 #define GT_SELECTION 0x00000002 #define GT_RAWTEXT 0x00000004 #define GT_NOHIDDENTEXT 0x00000008 /* Options of the EM_SETTYPOGRAPHYOPTIONS message */ #define TO_ADVANCEDTYPOGRAPHY 0x00000001 #define TO_SIMPLELINEBREAK 0x00000002 #define TO_DISABLECUSTOMTEXTOUT 0x00000004 #define TO_ADVANCEDLAYOUT 0x00000008 typedef struct _gettextlengthex { DWORD flags; UINT codepage; } GETTEXTLENGTHEX; /* Flags of the GETTEXTLENGTHEX structure */ #define GTL_DEFAULT 0x00000000 #define GTL_USECRLF 0x00000001 #define GTL_PRECISE 0x00000002 #define GTL_CLOSE 0x00000004 #define GTL_NUMCHARS 0x00000008 #define GTL_NUMBYTES 0x00000010 #define GCM_RIGHTMOUSEDROP 0x8000 /* Options of the EM_SETTEXTEX message */ typedef struct _settextex { DWORD flags; UINT codepage; } SETTEXTEX; /* Flags of the EM_SETTEXTEX message */ #define ST_DEFAULT 0x00000000 #define ST_KEEPUNDO 0x00000001 #define ST_SELECTION 0x00000002 #define ST_NEWCHARS 0x00000004 #define ST_UNICODE 0x00000008 /* Flags for EM_AUTOURLDETECT message */ #define AURL_ENABLEURL 0x00000001 #define AURL_ENABLEMAILADDR 0x00000002 #define AURL_ENABLETELNO 0x00000004 #define AURL_ENABLEEAURLS 0x00000008 #define AURL_ENABLEDRIVELETTERS 0x00000010 #define AURL_DISABLEMIXEDLGC 0x00000020 #ifdef __cplusplus } #endif #include #endif /* __WINE_RICHEDIT_H */ ================================================ FILE: wine/windows/richole.idl ================================================ /* * Copyright (C) 2002 Andriy Palamarchuk * Copyright (C) 2004 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ cpp_quote("#if 0") /* not included on Windows */ import "oleidl.idl"; cpp_quote("#endif") /* REOBJECT structure flags */ cpp_quote("#define REO_GETOBJ_NO_INTERFACES 0x00000000") cpp_quote("#define REO_GETOBJ_POLEOBJ 0x00000001") cpp_quote("#define REO_GETOBJ_PSTG 0x00000002") cpp_quote("#define REO_GETOBJ_POLESITE 0x00000004") cpp_quote("#define REO_GETOBJ_ALL_INTERFACES 0x00000007") cpp_quote("#define REO_CP_SELECTION 0xFFFFFFFF") cpp_quote("#define REO_IOB_SELECTION 0xFFFFFFFF") cpp_quote("#define REO_IOB_USE_CP 0xFFFFFFFE") cpp_quote("#define REO_NULL 0x00000000") cpp_quote("#define REO_READWRITEMASK 0x0000003F") cpp_quote("#define REO_DONTNEEDPALETTE 0x00000020") cpp_quote("#define REO_BLANK 0x00000010") cpp_quote("#define REO_DYNAMICSIZE 0x00000008") cpp_quote("#define REO_INVERTEDSELECT 0x00000004") cpp_quote("#define REO_BELOWBASELINE 0x00000002") cpp_quote("#define REO_RESIZABLE 0x00000001") cpp_quote("#define REO_LINK 0x80000000") cpp_quote("#define REO_STATIC 0x40000000") cpp_quote("#define REO_SELECTED 0x08000000") cpp_quote("#define REO_OPEN 0x04000000") cpp_quote("#define REO_INPLACEACTIVE 0x02000000") cpp_quote("#define REO_HILITED 0x01000000") cpp_quote("#define REO_LINKAVAILABLE 0x00800000") cpp_quote("#define REO_GETMETAFILE 0x00400000") /* clipboard operation flags */ cpp_quote("#define RECO_PASTE 0x00000000") cpp_quote("#define RECO_DROP 0x00000001") cpp_quote("#define RECO_COPY 0x00000002") cpp_quote("#define RECO_CUT 0x00000003") cpp_quote("#define RECO_DRAG 0x00000004") typedef struct _reobject { DWORD cbStruct; LONG cp; CLSID clsid; LPOLEOBJECT poleobj; LPSTORAGE pstg; LPOLECLIENTSITE polesite; SIZEL sizel; DWORD dvaspect; DWORD dwFlags; DWORD dwUser; } REOBJECT; cpp_quote("#ifndef __RICHEDIT_CHARRANGE_DEFINED") cpp_quote("#define __RICHEDIT_CHARRANGE_DEFINED") typedef struct _charrange { LONG cpMin; LONG cpMax; } CHARRANGE; cpp_quote("#endif /* __RICHEDIT_CHARRANGE_DEFINED */") /***************************************************************************** * IRichEditOle */ [ object, uuid(00020d00-0000-0000-c000-000000000046), pointer_default(unique) ] interface IRichEditOle : IUnknown { typedef [unique] IRichEditOle *LPRICHEDITOLE; HRESULT GetClientSite(LPOLECLIENTSITE *lplpolesite); HRESULT GetObjectCount(); HRESULT GetLinkCount(); HRESULT GetObject(LONG iob, REOBJECT *lpreobject, DWORD dwFlags); HRESULT InsertObject(REOBJECT *lpreobject); HRESULT ConvertObject(LONG iob, REFCLSID rclsidNew, LPCSTR lpstrUserTypeNew); HRESULT ActivateAs(REFCLSID rclsid, REFCLSID rclsidAs); HRESULT SetHostNames(LPCSTR lpstrContainerApp, LPCSTR lpstrContainerObj); HRESULT SetLinkAvailable(LONG iob, BOOL fAvailable); HRESULT SetDvaspect(LONG iob, DWORD dvaspect); HRESULT HandsOffStorage(LONG iob); HRESULT SaveCompleted(LONG iob, LPSTORAGE lpstg); HRESULT InPlaceDeactivate(); HRESULT ContextSensitiveHelp(BOOL fEnterMode); HRESULT GetClipboardData(CHARRANGE* lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj); HRESULT ImportDataObject(LPDATAOBJECT lpdataobj, CLIPFORMAT cf, HGLOBAL hMetaPict); } /***************************************************************************** * IRichEditOleCallback */ [ object, uuid(00020d03-0000-0000-c000-000000000046), pointer_default(unique) ] interface IRichEditOleCallback : IUnknown { typedef [unique] IRichEditOleCallback *LPRICHEDITOLECALLBACK; HRESULT GetNewStorage(LPSTORAGE *lplpstg); HRESULT GetInPlaceContext(LPOLEINPLACEFRAME *lplpFrame, LPOLEINPLACEUIWINDOW *lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo); HRESULT ShowContainerUI(BOOL fShow); HRESULT QueryInsertObject(LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp); HRESULT DeleteObject(LPOLEOBJECT lpoleobj); HRESULT QueryAcceptData(LPDATAOBJECT lpdataobj, CLIPFORMAT *lpcfFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict); HRESULT ContextSensitiveHelp(BOOL fEnterMode); HRESULT GetClipboardData(CHARRANGE *lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj); HRESULT GetDragDropEffect(BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect); HRESULT GetContextMenu(WORD seltype, LPOLEOBJECT lpoleobj, CHARRANGE *lpchrg, HMENU *lphmenu); } ================================================ FILE: wine/windows/rmxfguid.h ================================================ /* * Copyright (C) 2007 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_RMXFGUID_H #define __WINE_RMXFGUID_H /***************************************************************************** * Define GUIDs */ DEFINE_GUID(TID_D3DRMAnimation, 0x3d82ab4f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMAnimationKey, 0x10dd46a8, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMAnimationOptions, 0xe2bf56c0, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMAnimationSet, 0x3d82ab50, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMAppData, 0xe5745280, 0xb24f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f); DEFINE_GUID(TID_D3DRMBoolean, 0x537da6a0, 0xca37, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b); DEFINE_GUID(TID_D3DRMBoolean2d, 0x4885ae63, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMCamera, 0x3d82ab51, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMColorRGB, 0xd3e16e81, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMColorRGBA, 0x35ff44e0, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMCoords2d, 0xf6f23f44, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMExternalVisual, 0x98116aa0, 0xbdba, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71); DEFINE_GUID(TID_D3DRMFloatKeys, 0x10dd46a9, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMFrame, 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMFramePosition, 0xe2bf56c1, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMFrameRotation, 0xe2bf56c3, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMFrameTransformMatrix, 0xf6f23f41, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMFrameVelocity, 0xe2bf56c2, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMGuid, 0xa42790e0, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMIndexedColor, 0x1630b820, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMInfo, 0x2b957100, 0x9e9a, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMInlineData, 0x3a23eea0, 0x94b1, 0x11d0, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMLight, 0x3d82ab4a, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMLightAttenuation, 0xa8a98ba0, 0xc5e5, 0x11cf, 0xb9, 0x41, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b); DEFINE_GUID(TID_D3DRMLightPenumbra, 0xaed22741, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f); DEFINE_GUID(TID_D3DRMLightRange, 0xaed22742, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f); DEFINE_GUID(TID_D3DRMLightUmbra, 0xaed22740, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f); DEFINE_GUID(TID_D3DRMMaterial, 0x3d82ab4d, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMMaterialAmbientColor, 0x01411840, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMaterialArray, 0x35ff44e1, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMaterialDiffuseColor, 0x01411841, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMaterialEmissiveColor, 0xd3e16e80, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMaterialPower, 0x01411843, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMaterialSpecularColor, 0x01411842, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMaterialWrap, 0x4885ae60, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMatrix4x4, 0xf6f23f45, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMesh, 0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMMeshFace, 0x3d82ab5f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMMeshFaceWraps, 0xed1ec5c0, 0xc0a8, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b); DEFINE_GUID(TID_D3DRMMeshMaterialList, 0xf6f23f42, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMeshNormals, 0xf6f23f43, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMeshTextureCoords, 0xf6f23f40, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMMeshVertexColors, 0x1630b821, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMProgressiveMesh, 0x8a63c360, 0x997d, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b); DEFINE_GUID(TID_D3DRMPropertyBag, 0x7f0f21e1, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71); DEFINE_GUID(TID_D3DRMRightHanded, 0x7f5d5ea0, 0xd53a, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71); DEFINE_GUID(TID_D3DRMStringProperty, 0x7f0f21e0, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71); DEFINE_GUID(TID_D3DRMTextureFilename, 0xa42790e1, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMTextureReference, 0xa42790e2, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMTimedFloatKeys, 0xf406b180, 0x7b3b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3); DEFINE_GUID(TID_D3DRMUrl, 0x3a23eea1, 0x94b1, 0x11d0, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); DEFINE_GUID(TID_D3DRMVector, 0x3d82ab5e, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); #endif /* __WINE_RMXFGUID_H */ ================================================ FILE: wine/windows/rmxftmpl.x ================================================ xof 0302txt 0064 // Copyright (C) 2011 Dylan Smith // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA #pragma xftmpl name D3DRM_XTEMPLATES #pragma xftmpl size D3DRM_XTEMPLATE_BYTES #pragma makedep install template Header { <3D82AB43-62DA-11CF-AB39-0020AF71E433> WORD major; WORD minor; DWORD flags; } template Vector { <3D82AB5E-62DA-11CF-AB39-0020AF71E433> FLOAT x; FLOAT y; FLOAT z; } template Coords2d { FLOAT u; FLOAT v; } template Matrix4x4 { array FLOAT matrix[16]; } template ColorRGBA { <35FF44E0-6C7C-11CF-8F52-0040333594A3> FLOAT red; FLOAT green; FLOAT blue; FLOAT alpha; } template ColorRGB { FLOAT red; FLOAT green; FLOAT blue; } template IndexedColor { <1630B820-7842-11CF-8F52-0040333594A3> DWORD index; ColorRGBA indexColor; } template Boolean { <537DA6A0-CA37-11D0-941C-0080C80CFA7B> DWORD truefalse; } template Boolean2d { <4885AE63-78E8-11CF-8F52-0040333594A3> Boolean u; Boolean v; } template MaterialWrap { <4885AE60-78E8-11CF-8F52-0040333594A3> Boolean u; Boolean v; } template TextureFilename { STRING filename; } template Material { <3D82AB4D-62DA-11CF-AB39-0020AF71E433> ColorRGBA faceColor; FLOAT power; ColorRGB specularColor; ColorRGB emissiveColor; [ ... ] } template MeshFace { <3D82AB5F-62DA-11CF-AB39-0020AF71E433> DWORD nFaceVertexIndices; array DWORD faceVertexIndices[nFaceVertexIndices]; } template MeshFaceWraps { DWORD nFaceWrapValues; array Boolean2d faceWrapValues[nFaceWrapValues]; } template MeshTextureCoords { DWORD nTextureCoords; array Coords2d textureCoords[nTextureCoords]; } template MeshMaterialList { DWORD nMaterials; DWORD nFaceIndexes; array DWORD faceIndexes[nFaceIndexes]; [ Material ] } template MeshNormals { DWORD nNormals; array Vector normals[nNormals]; DWORD nFaceNormals; array MeshFace faceNormals[nFaceNormals]; } template MeshVertexColors { <1630B821-7842-11CF-8F52-0040333594A3> DWORD nVertexColors; array IndexedColor vertexColors[nVertexColors]; } template Mesh { <3D82AB44-62DA-11CF-AB39-0020AF71E433> DWORD nVertices; array Vector vertices[nVertices]; DWORD nFaces; array MeshFace faces[nFaces]; [ ... ] } template FrameTransformMatrix { Matrix4x4 frameMatrix; } template Frame { <3D82AB46-62DA-11CF-AB39-0020AF71E433> [ ... ] } template FloatKeys { <10DD46A9-775B-11CF-8F52-0040333594A3> DWORD nValues; array FLOAT values[nValues]; } template TimedFloatKeys { DWORD time; FloatKeys tfkeys; } template AnimationKey { <10DD46A8-775B-11CF-8F52-0040333594A3> DWORD keyType; DWORD nKeys; array TimedFloatKeys keys[nKeys]; } template AnimationOptions { DWORD openclosed; DWORD positionquality; } template Animation { <3D82AB4F-62DA-11CF-AB39-0020AF71E433> [ ... ] } template AnimationSet { <3D82AB50-62DA-11CF-AB39-0020AF71E433> [ Animation ] } template InlineData { <3A23EEA0-94B1-11D0-AB39-0020AF71E433> [ BINARY ] } template Url { <3A23EEA1-94B1-11D0-AB39-0020AF71E433> DWORD nUrls; array STRING urls[nUrls]; } template ProgressiveMesh { <8A63C360-997D-11D0-941C-0080C80CFA7B> [ Url, InlineData ] } template Guid { DWORD data1; WORD data2; WORD data3; array UCHAR data4[8]; } template StringProperty { <7F0F21E0-BFE1-11D1-82C0-00A0C9697271> STRING key; STRING value; } template PropertyBag { <7F0F21E1-BFE1-11D1-82C0-00A0C9697271> [ StringProperty ] } template ExternalVisual { <98116AA0-BDBA-11D1-82C0-00A0C9697271> Guid guidExternalVisual; [ ... ] } template RightHanded { <7F5D5EA0-D53A-11D1-82C0-00A0C9697271> DWORD bRightHanded; } ================================================ FILE: wine/windows/roapi.h ================================================ /* * Copyright (C) 2014 Martin Storsjo * Copyright (C) 2016 Michael Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ROAPI_H #define __WINE_ROAPI_H #include #include typedef enum { RO_INIT_SINGLETHREADED = 0, RO_INIT_MULTITHREADED = 1, } RO_INIT_TYPE; DECLARE_HANDLE(APARTMENT_SHUTDOWN_REGISTRATION_COOKIE); #ifdef __cplusplus typedef struct {} *RO_REGISTRATION_COOKIE; #else typedef struct _RO_REGISTRATION_COOKIE *RO_REGISTRATION_COOKIE; #endif typedef HRESULT (WINAPI *PFNGETACTIVATIONFACTORY)(HSTRING, IActivationFactory **); #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI RoInitialize(RO_INIT_TYPE type); void WINAPI RoUninitialize(void); #ifdef __cplusplus } #endif #endif /* __WINE_ROAPI_H */ ================================================ FILE: wine/windows/roparameterizediid.idl ================================================ /* * Copyright 2017 Alex Henrie * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifdef __WIDL__ #pragma winrt #endif import "wtypes.idl"; typedef void *ROPARAMIIDHANDLE; [ object ] interface IRoSimpleMetaDataBuilder { HRESULT SetWinRtInterface( GUID iid ); HRESULT SetDelegate( GUID iid ); HRESULT SetInterfaceGroupSimpleDefault( const WCHAR *typename, const WCHAR *default_name, const GUID *default_iid ); HRESULT SetInterfaceGroupParameterizedDefault( const WCHAR *typename, UINT32 name_element_count, const WCHAR **name_elements ); HRESULT SetRuntimeClassSimpleDefault( const WCHAR *typename, const WCHAR *default_name, const GUID *default_iid ); HRESULT SetRuntimeClassParameterizedDefault( const WCHAR *typename, UINT32 name_element_count, const WCHAR **name_elements ); HRESULT SetStruct( const WCHAR *typename, UINT32 field_count, const WCHAR **field_typenames ); HRESULT SetEnum( const WCHAR *typename, const WCHAR *base_type ); HRESULT SetParameterizedInterface( GUID iid, UINT32 arg_count ); HRESULT SetParameterizedDelegate( GUID iid, UINT32 arg_count ); } [ object ] interface IRoMetaDataLocator { HRESULT Locate( const WCHAR *typename, IRoSimpleMetaDataBuilder *out ); } ================================================ FILE: wine/windows/row.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ local, object, uuid(0c733ab4-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IRow : IUnknown { [local] HRESULT GetColumns([in] DBORDINAL cColumns, [in, out, size_is(cColumns), annotation("__inout_ecount(cColumns)")] DBCOLUMNACCESS rgColumns[]); HRESULT GetSourceRowset([in, annotation("__in")] REFIID riid, [out, iid_is(riid), annotation("__deref_opt_out_opt")] IUnknown **ppRowset, [out, annotation("__out_opt")] HROW *phRow); HRESULT Open([in, unique, annotation("__in_opt")] IUnknown *pUnkOuter, [in, annotation("__in")] DBID *pColumnID, [in, annotation("__in")] REFGUID rguidColumnType, [in] DWORD dwBindFlags, [in, annotation("__in")] REFIID riid, [out, iid_is(riid), annotation("__deref_opt_out")] IUnknown **ppUnk); } ================================================ FILE: wine/windows/rowchg.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ local, object, uuid(0c733ab5-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IRowChange : IUnknown { [local] HRESULT SetColumns([in] DBORDINAL cColumns, [in, out, size_is(cColumns), annotation("__in_ecount(cColumns)")] DBCOLUMNACCESS rgColumns[]); } ================================================ FILE: wine/windows/rowpos.idl ================================================ /* * Copyright (C) 2013 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a94-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IRowPosition : IUnknown { typedef DWORD DBPOSITIONFLAGS; enum DBPOSITIONFLAGSENUM { DBPOSITION_OK, DBPOSITION_NOROW, DBPOSITION_BOF, DBPOSITION_EOF }; [local] HRESULT ClearRowPosition(); [call_as(ClearRowPosition)] HRESULT RemoteClearRowPosition([out] IErrorInfo **errorinfo); [local] HRESULT GetRowPosition([out] HCHAPTER *chapter, [out] HROW *row, [out] DBPOSITIONFLAGS *position_flags); [call_as(GetRowPosition)] HRESULT RemoteGetRowPosition([out] HCHAPTER *chapter, [out] HROW *row, [out] DBPOSITIONFLAGS *position_flags, [out] IErrorInfo **errorinfo); [local] HRESULT GetRowset([in] REFIID riid, [out, iid_is(riid)] IUnknown **rowset); [call_as(GetRowset)] HRESULT RemoteGetRowset([in] REFIID riid, [out, iid_is(riid)] IUnknown **rowset, [out] IErrorInfo **errorinfo); [local] HRESULT Initialize([in] IUnknown *rowset); [call_as(Initialize)] HRESULT RemoteInitialize([in] IUnknown *rowset, [out] IErrorInfo **errorinfo); [local] HRESULT SetRowPosition([in] HCHAPTER chapter, [in] HROW row, [in] DBPOSITIONFLAGS flags); [call_as(SetRowPosition)] HRESULT RemoteSetRowPosition([in] HCHAPTER chapter, [in] HROW row, [in] DBPOSITIONFLAGS flags, [out] IErrorInfo **errorinfo); } ================================================ FILE: wine/windows/rowpsc.idl ================================================ /* * Copyright (C) 2013 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0997a571-126e-11d0-9f8a-00a0c9a0631e), pointer_default(unique) ] interface IRowPositionChange : IUnknown { [local] HRESULT OnRowPositionChange([in] DBREASON reason, [in] DBEVENTPHASE phase, [in] BOOL cant_deny); [call_as(OnRowPositionChange)] HRESULT RemoteOnRowPositionChange([in] DBREASON reason, [in] DBEVENTPHASE phase, [in] BOOL cant_deny, [out] IErrorInfo **errorinfo); } ================================================ FILE: wine/windows/rpc.h ================================================ /* * RPC interface * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef RPC_NO_WINDOWS_H # include #endif #ifndef __WINE_RPC_H #define __WINE_RPC_H #if defined(__powerpc__) || defined(_MAC) /* ? */ # define __RPC_MAC__ /* Also define __RPC_WIN32__ to ensure compatibility */ # define __RPC_WIN32__ #elif defined(_WIN64) # define __RPC_WIN64__ #else # define __RPC_WIN32__ #endif #include #define __RPC_FAR #define __RPC_API __stdcall #define __RPC_USER __stdcall #define __RPC_STUB __stdcall #define RPC_ENTRY __stdcall #define RPCRTAPI typedef LONG RPC_STATUS; typedef void* I_RPC_HANDLE; #include /* #include */ #include #include #include #ifndef RPC_NO_WINDOWS_H #include #endif #ifdef USE_COMPILER_EXCEPTIONS #define RpcTryExcept __try { #define RpcExcept(expr) } __except (expr) { #define RpcEndExcept } #define RpcTryFinally __try { #define RpcFinally } __finally { #define RpcEndFinally } #define RpcExceptionCode() GetExceptionCode() #define RpcAbnormalTermination() AbnormalTermination() #else /* USE_COMPILER_EXCEPTIONS */ /* ignore exception handling for now */ #define RpcTryExcept if (1) { #define RpcExcept(expr) } else { #define RpcEndExcept } #define RpcTryFinally #define RpcFinally #define RpcEndFinally #define RpcExceptionCode() 0 /* #define RpcAbnormalTermination() abort() */ #endif /* USE_COMPILER_EXCEPTIONS */ #endif /*__WINE_RPC_H */ ================================================ FILE: wine/windows/rpcasync.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_RPCASYNC_H #define __WINE_RPCASYNC_H #ifdef RPC_NO_WINDOWS_H # include #endif #ifdef __RPC_WIN64__ # include #endif typedef struct tagRPC_ERROR_ENUM_HANDLE { ULONG Signature; void* CurrentPos; void* Head; } RPC_ERROR_ENUM_HANDLE; typedef enum tagExtendedErrorParamTypes { eeptAnsiString = 1, eeptUnicodeString, eeptLongVal, eeptShortVal, eeptPointerVal, eeptNone, eeptBinary } ExtendedErrorParamTypes; #define MaxNumberOfEEInfoParams 4 #define RPC_EEINFO_VERSION 1 typedef struct tagBinaryParam { void *Buffer; short Size; } BinaryParam; typedef struct tagRPC_EE_INFO_PARAM { ExtendedErrorParamTypes ParameterType; union { LPSTR AnsiString; LPWSTR UnicodeString; LONG LVal; short SVal; ULONGLONG PVal; BinaryParam BVal; } u; } RPC_EE_INFO_PARAM; #define EEInfoPreviousRecordsMissing 0x1 #define EEInfoNextRecordsMissing 0x2 #define EEInfoUseFileTime 0x4 #define EEInfoGCCOM 11 #define EEInfoGCFRS 12 typedef struct tagRPC_EXTENDED_ERROR_INFO { ULONG Version; LPWSTR ComputerName; ULONG ProcessID; union { SYSTEMTIME SystemTime; FILETIME FileTime; } u; ULONG GeneratingComponent; ULONG Status; USHORT DetectionLocation; USHORT Flags; int NumberOfParameters; RPC_EE_INFO_PARAM Parameters[MaxNumberOfEEInfoParams]; } RPC_EXTENDED_ERROR_INFO; #define RPC_ASYNC_VERSION_1_0 sizeof(RPC_ASYNC_STATE) typedef enum _RPC_NOTIFICATION_TYPES { RpcNotificationTypeNone, RpcNotificationTypeEvent, RpcNotificationTypeApc, RpcNotificationTypeIoc, RpcNotificationTypeHwnd, RpcNotificationTypeCallback, } RPC_NOTIFICATION_TYPES; typedef enum _RPC_ASYNC_EVENT { RpcCallComplete, RpcSendComplete, RpcReceiveComplete, RpcClientDisconnect, RpcClientCancel, } RPC_ASYNC_EVENT; struct _RPC_ASYNC_STATE; typedef void RPC_ENTRY RPCNOTIFICATION_ROUTINE(struct _RPC_ASYNC_STATE *,void *,RPC_ASYNC_EVENT); typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE; typedef union _RPC_ASYNC_NOTIFICATION_INFO { struct { PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine; HANDLE hThread; } APC; struct { HANDLE hIOPort; DWORD dwNumberOfBytesTransferred; DWORD_PTR dwCompletionKey; LPOVERLAPPED lpOverlapped; } IOC; struct { HWND hWnd; UINT Msg; } HWND; HANDLE hEvent; PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine; } RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO; #define RPC_C_NOTIFY_ON_SEND_COMPLETE 0x1 #define RPC_C_INFINITE_TIMEOUT INFINITE typedef struct _RPC_ASYNC_STATE { unsigned int Size; ULONG Signature; LONG Lock; ULONG Flags; void *StubInfo; void *UserInfo; void *RuntimeInfo; RPC_ASYNC_EVENT Event; RPC_NOTIFICATION_TYPES NotificationType; RPC_ASYNC_NOTIFICATION_INFO u; LONG_PTR Reserved[4]; } RPC_ASYNC_STATE, *PRPC_ASYNC_STATE; #define RpcAsyncGetCallHandle(async) (((PRPC_ASYNC_STATE)async)->RuntimeInfo) #ifdef __RPC_WIN64__ # include #endif #ifdef __cplusplus extern "C" { #endif RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncInitializeHandle(PRPC_ASYNC_STATE,unsigned int); RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo(PRPC_ASYNC_STATE); RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus(PRPC_ASYNC_STATE); RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCompleteCall(PRPC_ASYNC_STATE,void *); RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG); RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCancelCall(PRPC_ASYNC_STATE,BOOL); RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCleanupThread(DWORD); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorStartEnumeration(RPC_ERROR_ENUM_HANDLE*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNextRecord(RPC_ERROR_ENUM_HANDLE*,BOOL,RPC_EXTENDED_ERROR_INFO*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorEndEnumeration(RPC_ERROR_ENUM_HANDLE*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorResetEnumeration(RPC_ERROR_ENUM_HANDLE*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNumberOfRecords(RPC_ERROR_ENUM_HANDLE*,int*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorSaveErrorInfo(RPC_ERROR_ENUM_HANDLE*,PVOID*,SIZE_T*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorLoadErrorInfo(PVOID,SIZE_T,RPC_ERROR_ENUM_HANDLE*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorAddRecord(RPC_EXTENDED_ERROR_INFO*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorClearInformation(void); RPCRTAPI RPC_STATUS RPC_ENTRY RpcGetAuthorizationContextForClient(RPC_BINDING_HANDLE,BOOL,LPVOID,PLARGE_INTEGER,LUID,DWORD,PVOID,PVOID*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcFreeAuthorizationContext(PVOID*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockExclusive(RPC_BINDING_HANDLE,PVOID); RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockShared(RPC_BINDING_HANDLE,PVOID); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncSetHandle(PRPC_MESSAGE,PRPC_ASYNC_STATE); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG); RPCRTAPI int RPC_ENTRY I_RpcExceptionFilter(ULONG); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/rpcdce.h ================================================ /* * Copyright (C) 2000 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_RPCDCE_H #define __WINE_RPCDCE_H #ifdef __cplusplus extern "C" { #endif #ifndef IN #define IN #endif #ifndef OUT #define OUT #endif #ifndef OPTIONAL #define OPTIONAL #endif #ifndef GUID_DEFINED #include #endif #ifndef UUID_DEFINED #define UUID_DEFINED typedef GUID UUID; #endif typedef unsigned char* RPC_CSTR; typedef unsigned short* RPC_WSTR; typedef void* RPC_AUTH_IDENTITY_HANDLE; typedef void* RPC_AUTHZ_HANDLE; typedef void* RPC_IF_HANDLE; typedef I_RPC_HANDLE RPC_BINDING_HANDLE; typedef RPC_BINDING_HANDLE handle_t; #define rpc_binding_handle_t RPC_BINDING_HANDLE #define RPC_MGR_EPV void typedef struct _RPC_BINDING_VECTOR { ULONG Count; RPC_BINDING_HANDLE BindingH[1]; } RPC_BINDING_VECTOR; #define rpc_binding_vector_t RPC_BINDING_VECTOR typedef struct _UUID_VECTOR { ULONG Count; UUID *Uuid[1]; } UUID_VECTOR; #define uuid_vector_t UUID_VECTOR typedef struct _RPC_IF_ID { UUID Uuid; unsigned short VersMajor; unsigned short VersMinor; } RPC_IF_ID; typedef struct { ULONG Count; RPC_IF_ID *IfId[1]; } RPC_IF_ID_VECTOR; typedef struct { unsigned int Count; ULONG Stats[1]; } RPC_STATS_VECTOR; typedef struct _RPC_PROTSEQ_VECTORA { unsigned int Count; unsigned char *Protseq[1]; } RPC_PROTSEQ_VECTORA; typedef struct _RPC_PROTSEQ_VECTORW { unsigned int Count; unsigned short *Protseq[1]; } RPC_PROTSEQ_VECTORW; DECL_WINELIB_TYPE_AW(RPC_PROTSEQ_VECTOR) typedef I_RPC_HANDLE *RPC_EP_INQ_HANDLE; #define RPC_C_EP_ALL_ELTS 0 #define RPC_C_EP_MATCH_BY_IF 1 #define RPC_C_EP_MATCH_BY_OBJ 2 #define RPC_C_EP_MATCH_BY_BOTH 3 #define RPC_C_VERS_ALL 1 #define RPC_C_VERS_COMPATIBLE 2 #define RPC_C_VERS_EXACT 3 #define RPC_C_VERS_MAJOR_ONLY 4 #define RPC_C_VERS_UPTO 5 #define RPC_C_BINDING_INFINITE_TIMEOUT 10 #define RPC_C_BINDING_MIN_TIMEOUT 0 #define RPC_C_BINDING_DEFAULT_TIMEOUT 5 #define RPC_C_BINDING_MAX_TIMEOUT 9 #define RPC_C_CANCEL_INFINITE_TIMEOUT -1 #define RPC_C_LISTEN_MAX_CALLS_DEFAULT 1234 #define RPC_C_PROTSEQ_MAX_REQS_DEFAULT 10 #define RPC_PROTSEQ_TCP 0x1 #define RPC_PROTSEQ_NMP 0x2 #define RPC_PROTSEQ_LRPC 0x3 #define RPC_PROTSEQ_HTTP 0x4 /* RPC_POLICY EndpointFlags */ #define RPC_C_BIND_TO_ALL_NICS 0x1 #define RPC_C_USE_INTERNET_PORT 0x1 #define RPC_C_USE_INTRANET_PORT 0x2 #define RPC_C_DONT_FAIL 0x4 /* RPC_POLICY EndpointFlags specific to the Falcon/RPC transport */ #define RPC_C_MQ_TEMPORARY 0x0000 #define RPC_C_MQ_PERMANENT 0x0001 #define RPC_C_MQ_CLEAR_ON_OPEN 0x0002 #define RPC_C_MQ_USE_EXISTING_SECURITY 0x0004 #define RPC_C_MQ_AUTHN_LEVEL_NONE 0x0000 #define RPC_C_MQ_AUTHN_LEVEL_PKT_INTEGRITY 0x0008 #define RPC_C_MQ_AUTHN_LEVEL_PKT_PRIVACY 0x0010 #define RPC_C_AUTHN_LEVEL_DEFAULT 0 #define RPC_C_AUTHN_LEVEL_NONE 1 #define RPC_C_AUTHN_LEVEL_CONNECT 2 #define RPC_C_AUTHN_LEVEL_CALL 3 #define RPC_C_AUTHN_LEVEL_PKT 4 #define RPC_C_AUTHN_LEVEL_PKT_INTEGRITY 5 #define RPC_C_AUTHN_LEVEL_PKT_PRIVACY 6 #define RPC_C_AUTHN_NONE 0 #define RPC_C_AUTHN_DCE_PRIVATE 1 #define RPC_C_AUTHN_DCE_PUBLIC 2 #define RPC_C_AUTHN_DEC_PUBLIC 4 #define RPC_C_AUTHN_GSS_NEGOTIATE 9 #define RPC_C_AUTHN_WINNT 10 #define RPC_C_AUTHN_GSS_SCHANNEL 14 #define RPC_C_AUTHN_GSS_KERBEROS 16 #define RPC_C_AUTHN_DPA 17 #define RPC_C_AUTHN_MSN 18 #define RPC_C_AUTHN_DIGEST 21 #define RPC_C_AUTHN_MQ 100 #define RPC_C_AUTHN_DEFAULT 0xffffffff #define RPC_C_AUTHZ_NONE 0 #define RPC_C_AUTHZ_NAME 1 #define RPC_C_AUTHZ_DCE 2 #define RPC_C_AUTHZ_DEFAULT 0xffffffff /* values for RPC_SECURITY_QOS*::ImpersonationType */ #define RPC_C_IMP_LEVEL_DEFAULT 0 #define RPC_C_IMP_LEVEL_ANONYMOUS 1 #define RPC_C_IMP_LEVEL_IDENTIFY 2 #define RPC_C_IMP_LEVEL_IMPERSONATE 3 #define RPC_C_IMP_LEVEL_DELEGATE 4 /* values for RPC_SECURITY_QOS*::IdentityTracking */ #define RPC_C_QOS_IDENTITY_STATIC 0 #define RPC_C_QOS_IDENTITY_DYNAMIC 1 /* flags for RPC_SECURITY_QOS*::Capabilities */ #define RPC_C_QOS_CAPABILITIES_DEFAULT 0x0 #define RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH 0x1 #define RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC 0x2 #define RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY 0x4 /* values for RPC_SECURITY_QOS*::Version */ #define RPC_C_SECURITY_QOS_VERSION 1 #define RPC_C_SECURITY_QOS_VERSION_1 1 #define RPC_C_SECURITY_QOS_VERSION_2 2 /* flags for RPC_SECURITY_QOS_V2::AdditionalSecurityInfoType */ #define RPC_C_AUTHN_INFO_TYPE_HTTP 1 /* flags for RPC_HTTP_TRANSPORT_CREDENTIALS::Flags */ #define RPC_C_HTTP_FLAG_USE_SSL 0x1 #define RPC_C_HTTP_FLAG_USE_FIRST_AUTH_SCHEME 0x2 /* values for RPC_HTTP_TRANSPORT_CREDENTIALS::AuthenticationTarget */ #define RPC_C_HTTP_AUTHN_TARGET_SERVER 1 #define RPC_C_HTTP_AUTHN_TARGET_PROXY 2 #define RPC_C_HTTP_AUTHN_SCHEME_BASIC 0x01 #define RPC_C_HTTP_AUTHN_SCHEME_NTLM 0x02 #define RPC_C_HTTP_AUTHN_SCHEME_PASSPORT 0x04 #define RPC_C_HTTP_AUTHN_SCHEME_DIGEST 0x08 #define RPC_C_HTTP_AUTHN_SCHEME_NEGOTIATE 0x10 typedef RPC_STATUS RPC_ENTRY RPC_IF_CALLBACK_FN( RPC_IF_HANDLE InterfaceUuid, void *Context ); typedef void (__RPC_USER *RPC_AUTH_KEY_RETRIEVAL_FN)(void *, RPC_WSTR, ULONG, void **, RPC_STATUS *); typedef struct _RPC_POLICY { unsigned int Length; ULONG EndpointFlags; ULONG NICFlags; } RPC_POLICY, *PRPC_POLICY; typedef struct _SEC_WINNT_AUTH_IDENTITY_W { unsigned short* User; ULONG UserLength; unsigned short* Domain; ULONG DomainLength; unsigned short* Password; ULONG PasswordLength; ULONG Flags; } SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W; typedef struct _SEC_WINNT_AUTH_IDENTITY_A { unsigned char* User; ULONG UserLength; unsigned char* Domain; ULONG DomainLength; unsigned char* Password; ULONG PasswordLength; ULONG Flags; } SEC_WINNT_AUTH_IDENTITY_A, *PSEC_WINNT_AUTH_IDENTITY_A; typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_W { SEC_WINNT_AUTH_IDENTITY_W *TransportCredentials; ULONG Flags; ULONG AuthenticationTarget; ULONG NumberOfAuthnSchemes; ULONG *AuthnSchemes; unsigned short *ServerCertificateSubject; } RPC_HTTP_TRANSPORT_CREDENTIALS_W, *PRPC_HTTP_TRANSPORT_CREDENTIALS_W; typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_A { SEC_WINNT_AUTH_IDENTITY_A *TransportCredentials; ULONG Flags; ULONG AuthenticationTarget; ULONG NumberOfAuthnSchemes; ULONG *AuthnSchemes; unsigned char *ServerCertificateSubject; } RPC_HTTP_TRANSPORT_CREDENTIALS_A, *PRPC_HTTP_TRANSPORT_CREDENTIALS_A; typedef struct _RPC_SECURITY_QOS { ULONG Version; ULONG Capabilities; ULONG IdentityTracking; ULONG ImpersonationType; } RPC_SECURITY_QOS, *PRPC_SECURITY_QOS; typedef struct _RPC_SECURITY_QOS_V2_W { ULONG Version; ULONG Capabilities; ULONG IdentityTracking; ULONG ImpersonationType; ULONG AdditionalSecurityInfoType; union { RPC_HTTP_TRANSPORT_CREDENTIALS_W *HttpCredentials; } u; } RPC_SECURITY_QOS_V2_W, *PRPC_SECURITY_QOS_V2_W; typedef struct _RPC_SECURITY_QOS_V2_A { ULONG Version; ULONG Capabilities; ULONG IdentityTracking; ULONG ImpersonationType; ULONG AdditionalSecurityInfoType; union { RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials; } u; } RPC_SECURITY_QOS_V2_A, *PRPC_SECURITY_QOS_V2_A; #define _SEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(_SEC_WINNT_AUTH_IDENTITY_) #define SEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(SEC_WINNT_AUTH_IDENTITY_) #define PSEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(PSEC_WINNT_AUTH_IDENTITY_) #define RPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(RPC_HTTP_TRANSPORT_CREDENTIALS_) #define PRPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(PRPC_HTTP_TRANSPORT_CREDENTIALS_) #define _RPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(_RPC_HTTP_TRANSPORT_CREDENTIALS_) #define RPC_SECURITY_QOS_V2 WINELIB_NAME_AW(RPC_SECURITY_QOS_V2_) #define PRPC_SECURITY_QOS_V2 WINELIB_NAME_AW(PRPC_SECURITY_QOS_V2_) #define _RPC_SECURITY_QOS_V2 WINELIB_NAME_AW(_RPC_SECURITY_QOS_V2_) /* SEC_WINNT_AUTH Flags */ #define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1 #define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2 /* RpcServerRegisterIfEx Flags */ #define RPC_IF_AUTOLISTEN 0x01 #define RPC_IF_OLE 0x02 #define RPC_IF_ALLOW_UNKNOWN_AUTHORITY 0x04 #define RPC_IF_ALLOW_SECURE_ONLY 0x08 #define RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 0x10 #define RPC_IF_ALLOW_LOCAL_ONLY 0x20 #define RPC_IF_SEC_NO_CACHE 0x40 RPC_STATUS RPC_ENTRY DceErrorInqTextA(RPC_STATUS e, RPC_CSTR buffer); RPC_STATUS RPC_ENTRY DceErrorInqTextW(RPC_STATUS e, RPC_WSTR buffer); #define DceErrorInqText WINELIB_NAME_AW(DceErrorInqText) RPCRTAPI DECLSPEC_NORETURN void RPC_ENTRY RpcRaiseException( RPC_STATUS exception ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingCopy( RPC_BINDING_HANDLE SourceBinding, RPC_BINDING_HANDLE* DestinationBinding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingFree( RPC_BINDING_HANDLE* Binding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqObject( RPC_BINDING_HANDLE Binding, UUID* ObjectUuid ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqOption( RPC_BINDING_HANDLE Binding, ULONG Option, ULONG_PTR *OptionValue ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingReset( RPC_BINDING_HANDLE Binding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingServerFromClient( RPC_BINDING_HANDLE ClientBinding, RPC_BINDING_HANDLE* ServerBinding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingSetObject( RPC_BINDING_HANDLE Binding, UUID* ObjectUuid ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingSetOption( RPC_BINDING_HANDLE Binding, ULONG Option, ULONG_PTR OptionValue ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcObjectSetType( UUID* ObjUuid, UUID* TypeUuid ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingFromStringBindingA( RPC_CSTR StringBinding, RPC_BINDING_HANDLE* Binding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingFromStringBindingW( RPC_WSTR StringBinding, RPC_BINDING_HANDLE* Binding ); #define RpcBindingFromStringBinding WINELIB_NAME_AW(RpcBindingFromStringBinding) RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingToStringBindingA( RPC_BINDING_HANDLE Binding, RPC_CSTR *StringBinding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingToStringBindingW( RPC_BINDING_HANDLE Binding, RPC_WSTR *StringBinding ); #define RpcBindingToStringBinding WINELIB_NAME_AW(RpcBindingToStringBinding) RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingVectorFree( RPC_BINDING_VECTOR** BindingVector ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcStringBindingComposeA( RPC_CSTR ObjUuid, RPC_CSTR Protseq, RPC_CSTR NetworkAddr, RPC_CSTR Endpoint, RPC_CSTR Options, RPC_CSTR *StringBinding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcStringBindingComposeW( RPC_WSTR ObjUuid, RPC_WSTR Protseq, RPC_WSTR NetworkAddr, RPC_WSTR Endpoint, RPC_WSTR Options, RPC_WSTR *StringBinding ); #define RpcStringBindingCompose WINELIB_NAME_AW(RpcStringBindingCompose) RPCRTAPI RPC_STATUS RPC_ENTRY RpcStringBindingParseA( RPC_CSTR StringBinding, RPC_CSTR *ObjUuid, RPC_CSTR *Protseq, RPC_CSTR *NetworkAddr, RPC_CSTR *Endpoint, RPC_CSTR *NetworkOptions ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcStringBindingParseW( RPC_WSTR StringBinding, RPC_WSTR *ObjUuid, RPC_WSTR *Protseq, RPC_WSTR *NetworkAddr, RPC_WSTR *Endpoint, RPC_WSTR *NetworkOptions ); #define RpcStringBindingParse WINELIB_NAME_AW(RpcStringBindingParse) RPCRTAPI RPC_STATUS RPC_ENTRY RpcEpResolveBinding( RPC_BINDING_HANDLE Binding, RPC_IF_HANDLE IfSpec ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcEpRegisterA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector, UUID_VECTOR* UuidVector, RPC_CSTR Annotation ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcEpRegisterW( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector, UUID_VECTOR* UuidVector, RPC_WSTR Annotation ); #define RpcEpRegister WINELIB_NAME_AW(RpcEpRegister) RPCRTAPI RPC_STATUS RPC_ENTRY RpcEpRegisterNoReplaceA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector, UUID_VECTOR* UuidVector, RPC_CSTR Annotation ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcEpRegisterNoReplaceW( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector, UUID_VECTOR* UuidVector, RPC_WSTR Annotation ); #define RpcEpRegisterNoReplace WINELIB_NAME_AW(RpcEpRegisterNoReplace) RPCRTAPI RPC_STATUS RPC_ENTRY RpcEpUnregister( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector, UUID_VECTOR* UuidVector ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerListen( unsigned int MinimumCallThreads, unsigned int MaxCalls, unsigned int DontWait ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtEnableIdleCleanup( void ); typedef int (__RPC_API *RPC_MGMT_AUTHORIZATION_FN)( RPC_BINDING_HANDLE, ULONG, RPC_STATUS * ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetAuthorizationFn( RPC_MGMT_AUTHORIZATION_FN ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetCancelTimeout(LONG); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtWaitServerListen( void ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtInqStats( RPC_BINDING_HANDLE Binding, RPC_STATS_VECTOR **Statistics ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtStopServerListening( RPC_BINDING_HANDLE Binding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtIsServerListening(RPC_BINDING_HANDLE Binding); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtInqIfIds( RPC_BINDING_HANDLE Binding, RPC_IF_ID_VECTOR** IfIdVector ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqBegin( RPC_BINDING_HANDLE EpBinding, ULONG InquiryType, RPC_IF_ID *IfId, ULONG VersOption, UUID *ObjectUuid, RPC_EP_INQ_HANDLE *InquiryContext); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetComTimeout( RPC_BINDING_HANDLE Binding, unsigned int Timeout ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetServerStackSize( ULONG ThreadStackSize ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtStatsVectorFree( RPC_STATS_VECTOR **StatsVector ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerRegisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerRegisterIfEx( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv, unsigned int Flags, unsigned int MaxCalls, RPC_IF_CALLBACK_FN* IfCallbackFn ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerRegisterIf2( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv, unsigned int Flags, unsigned int MaxCalls, unsigned int MaxRpcSize, RPC_IF_CALLBACK_FN* IfCallbackFn ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerRegisterIf3( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv, unsigned int Flags, unsigned int MaxCalls, unsigned int MaxRpcSize, RPC_IF_CALLBACK_FN* IfCallbackFn, void* SecurityDescriptor ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUnregisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, unsigned int WaitForCallsToComplete ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUnregisterIfEx( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, int RundownContextHandles ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUseProtseqA(RPC_CSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUseProtseqW(RPC_WSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor); #define RpcServerUseProtseq WINELIB_NAME_AW(RpcServerUseProtseq) RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpA( RPC_CSTR Protseq, unsigned int MaxCalls, RPC_CSTR Endpoint, void *SecurityDescriptor ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpW( RPC_WSTR Protseq, unsigned int MaxCalls, RPC_WSTR Endpoint, void *SecurityDescriptor ); #define RpcServerUseProtseqEp WINELIB_NAME_AW(RpcServerUseProtseqEp) RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpExA( RPC_CSTR Protseq, unsigned int MaxCalls, RPC_CSTR Endpoint, void *SecurityDescriptor, PRPC_POLICY Policy ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpExW( RPC_WSTR Protseq, unsigned int MaxCalls, RPC_WSTR Endpoint, void *SecurityDescriptor, PRPC_POLICY Policy ); #define RpcServerUseProtseqEpEx WINELIB_NAME_AW(RpcServerUseProtseqEpEx) RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerRegisterAuthInfoA( RPC_CSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn, void *Arg ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerRegisterAuthInfoW( RPC_WSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn, void *Arg ); #define RpcServerRegisterAuthInfo WINELIB_NAME_AW(RpcServerRegisterAuthInfo) RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoExA( RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel, ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr, RPC_SECURITY_QOS *SecurityQos ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoExW( RPC_BINDING_HANDLE Binding, RPC_WSTR ServerPrincName, ULONG AuthnLevel, ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr, RPC_SECURITY_QOS *SecurityQos ); #define RpcBindingSetAuthInfoEx WINELIB_NAME_AW(RpcBindingSetAuthInfoEx) RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoA( RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel, ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoW( RPC_BINDING_HANDLE Binding, RPC_WSTR ServerPrincName, ULONG AuthnLevel, ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr ); #define RpcBindingSetAuthInfo WINELIB_NAME_AW(RpcBindingSetAuthInfo) RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoExA( RPC_BINDING_HANDLE Binding, RPC_CSTR * ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc, ULONG RpcQosVersion, RPC_SECURITY_QOS *SecurityQOS ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoExW( RPC_BINDING_HANDLE Binding, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc, ULONG RpcQosVersion, RPC_SECURITY_QOS *SecurityQOS ); #define RpcBindingInqAuthInfoEx WINELIB_NAME_AW(RpcBindingInqAuthInfoEx) RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoA( RPC_BINDING_HANDLE Binding, RPC_CSTR * ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoW( RPC_BINDING_HANDLE Binding, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc ); #define RpcBindingInqAuthInfo WINELIB_NAME_AW(RpcBindingInqAuthInfo) RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthClientA( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs, RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, ULONG *AuthzSvc ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthClientW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, ULONG *AuthzSvc ); #define RpcBindingInqAuthClient WINELIB_NAME_AW(RpcBindingInqAuthClient) RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthClientExA( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs, RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, ULONG *AuthzSvc, ULONG Flags ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthClientExW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, ULONG *AuthzSvc, ULONG Flags ); #define RpcBindingInqAuthClientEx WINELIB_NAME_AW(RpcBindingInqAuthClientEx) RPCRTAPI RPC_STATUS RPC_ENTRY RpcCancelThread(void*); RPCRTAPI RPC_STATUS RPC_ENTRY RpcCancelThreadEx(void*,LONG); RPCRTAPI RPC_STATUS RPC_ENTRY RpcImpersonateClient( RPC_BINDING_HANDLE Binding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcNetworkIsProtseqValidA( RPC_CSTR protseq ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcNetworkIsProtseqValidW( RPC_WSTR protseq ); #define RpcNetworkIsProtseqValid WINELIB_NAME_AW(RpcNetworkIsProtseqValid) RPCRTAPI RPC_STATUS RPC_ENTRY RpcNetworkInqProtseqsA( RPC_PROTSEQ_VECTORA** protseqs ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW** protseqs ); #define RpcNetworkInqProtseqs WINELIB_NAME_AW(RpcNetworkInqProtseqs) RPCRTAPI RPC_STATUS RPC_ENTRY RpcProtseqVectorFreeA( RPC_PROTSEQ_VECTORA** protseqs ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcProtseqVectorFreeW( RPC_PROTSEQ_VECTORW** protseqs ); #define RpcProtseqVectorFree WINELIB_NAME_AW(RpcProtseqVectorFree) RPCRTAPI RPC_STATUS RPC_ENTRY RpcRevertToSelf( void ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcRevertToSelfEx( RPC_BINDING_HANDLE Binding ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcStringFreeA(RPC_CSTR* String); RPCRTAPI RPC_STATUS RPC_ENTRY RpcStringFreeW(RPC_WSTR* String); #define RpcStringFree WINELIB_NAME_AW(RpcStringFree) RPCRTAPI RPC_STATUS RPC_ENTRY UuidToStringA( UUID* Uuid, RPC_CSTR* StringUuid ); RPCRTAPI RPC_STATUS RPC_ENTRY UuidToStringW( UUID* Uuid, RPC_WSTR* StringUuid ); #define UuidToString WINELIB_NAME_AW(UuidToString) RPCRTAPI RPC_STATUS RPC_ENTRY UuidFromStringA( RPC_CSTR StringUuid, UUID* Uuid ); RPCRTAPI RPC_STATUS RPC_ENTRY UuidFromStringW( RPC_WSTR StringUuid, UUID* Uuid ); #define UuidFromString WINELIB_NAME_AW(UuidFromString) RPCRTAPI RPC_STATUS RPC_ENTRY UuidCreate( UUID* Uuid ); RPCRTAPI RPC_STATUS RPC_ENTRY UuidCreateSequential( UUID* Uuid ); RPCRTAPI RPC_STATUS RPC_ENTRY UuidCreateNil( UUID* Uuid ); RPCRTAPI signed int RPC_ENTRY UuidCompare( UUID* Uuid1, UUID* Uuid2, RPC_STATUS* Status_ ); RPCRTAPI int RPC_ENTRY UuidEqual( UUID* Uuid1, UUID* Uuid2, RPC_STATUS* Status_ ); RPCRTAPI unsigned short RPC_ENTRY UuidHash(UUID* Uuid, RPC_STATUS* Status_ ); RPCRTAPI int RPC_ENTRY UuidIsNil( UUID* Uuid, RPC_STATUS* Status_ ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqDefaultPrincNameA( ULONG AuthnSvc, RPC_CSTR *PrincName ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqDefaultPrincNameW( ULONG AuthnSvc, RPC_WSTR *PrincName ); #define RpcServerInqDefaultPrincName WINELIB_NAME_AW(RpcServerInqDefaultPrincName) #ifdef __cplusplus } #endif #include #endif /*__WINE_RPCDCE_H */ ================================================ FILE: wine/windows/rpcdcep.h ================================================ /* * Copyright (C) 2000 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_RPCDCEP_H #define __WINE_RPCDCEP_H #ifdef __cplusplus extern "C" { #endif typedef struct _RPC_VERSION { unsigned short MajorVersion; unsigned short MinorVersion; } RPC_VERSION; typedef struct _RPC_SYNTAX_IDENTIFIER { GUID SyntaxGUID; RPC_VERSION SyntaxVersion; } RPC_SYNTAX_IDENTIFIER, *PRPC_SYNTAX_IDENTIFIER; typedef struct _RPC_MESSAGE { RPC_BINDING_HANDLE Handle; ULONG DataRepresentation; void* Buffer; unsigned int BufferLength; unsigned int ProcNum; PRPC_SYNTAX_IDENTIFIER TransferSyntax; void* RpcInterfaceInformation; void* ReservedForRuntime; RPC_MGR_EPV* ManagerEpv; void* ImportContext; ULONG RpcFlags; } RPC_MESSAGE, *PRPC_MESSAGE; /* or'ed with ProcNum */ #define RPC_FLAGS_VALID_BIT 0x00008000 #define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *)0xfffff00d) #define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS 0x00000000 #define RPC_CONTEXT_HANDLE_FLAGS 0x30000000 #define RPC_CONTEXT_HANDLE_SERIALIZE 0x10000000 #define RPC_CONTEXT_HANDLE_DONT_SERIALIZE 0x20000000 #define RPC_TYPE_STRICT_CONTEXT_HANDLE 0x40000000 #define RPC_NCA_FLAGS_DEFAULT 0x00000000 #define RPC_NCA_FLAGS_IDEMPOTENT 0x00000001 #define RPC_NCA_FLAGS_BROADCAST 0x00000002 #define RPC_NCA_FLAGS_MAYBE 0x00000004 #define RPC_BUFFER_COMPLETE 0x00001000 #define RPC_BUFFER_PARTIAL 0x00002000 #define RPC_BUFFER_EXTRA 0x00004000 #define RPC_BUFFER_ASYNC 0x00008000 #define RPC_BUFFER_NONOTIFY 0x00010000 #define RPCFLG_MESSAGE 0x01000000 #define RPCFLG_HAS_MULTI_SYNTAXES 0x02000000 #define RPCFLG_HAS_CALLBACK 0x04000000 #define RPCFLG_AUTO_COMPLETE 0x08000000 #define RPCFLG_LOCAL_CALL 0x10000000 #define RPCFLG_INPUT_SYNCHRONOUS 0x20000000 #define RPCFLG_ASYNCHRONOUS 0x40000000 #define RPCFLG_NON_NDR 0x80000000 typedef void (__RPC_STUB *RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message); typedef RPC_STATUS (RPC_ENTRY *RPC_FORWARD_FUNCTION)(UUID *InterfaceId, RPC_VERSION *InterfaceVersion, UUID *ObjectId, unsigned char *Rpcpro, void **ppDestEndpoint); typedef struct { unsigned int DispatchTableCount; RPC_DISPATCH_FUNCTION* DispatchTable; LONG_PTR Reserved; } RPC_DISPATCH_TABLE, *PRPC_DISPATCH_TABLE; typedef struct _RPC_PROTSEQ_ENDPOINT { unsigned char* RpcProtocolSequence; unsigned char* Endpoint; } RPC_PROTSEQ_ENDPOINT, *PRPC_PROTSEQ_ENDPOINT; #define NT351_INTERFACE_SIZE 0x40 #define RPC_INTERFACE_HAS_PIPES 0x0001 typedef struct _RPC_SERVER_INTERFACE { unsigned int Length; RPC_SYNTAX_IDENTIFIER InterfaceId; RPC_SYNTAX_IDENTIFIER TransferSyntax; PRPC_DISPATCH_TABLE DispatchTable; unsigned int RpcProtseqEndpointCount; PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint; RPC_MGR_EPV* DefaultManagerEpv; void const* InterpreterInfo; unsigned int Flags; } RPC_SERVER_INTERFACE, *PRPC_SERVER_INTERFACE; typedef struct _RPC_CLIENT_INTERFACE { unsigned int Length; RPC_SYNTAX_IDENTIFIER InterfaceId; RPC_SYNTAX_IDENTIFIER TransferSyntax; PRPC_DISPATCH_TABLE DispatchTable; unsigned int RpcProtseqEndpointCount; PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint; ULONG_PTR Reserved; void const* InterpreterInfo; unsigned int Flags; } RPC_CLIENT_INTERFACE, *PRPC_CLIENT_INTERFACE; #define RPC_C_OPT_COOKIE_AUTH 7 typedef struct _RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR { ULONG BufferSize; char *Buffer; } RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR; #define TRANSPORT_TYPE_CN 0x01 #define TRANSPORT_TYPE_DG 0x02 #define TRANSPORT_TYPE_LPC 0x04 #define TRANSPORT_TYPE_WMSG 0x08 RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNegotiateTransferSyntax( RPC_MESSAGE* Message ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetBuffer( RPC_MESSAGE* Message ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetBufferWithObject( RPC_MESSAGE* Message, UUID* ObjectUuid ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcSendReceive( RPC_MESSAGE* Message ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcFreeBuffer( RPC_MESSAGE* Message ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcSend( RPC_MESSAGE* Message ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcReceive( RPC_MESSAGE* Message ); RPCRTAPI void* RPC_ENTRY I_RpcAllocate( unsigned int Size ); RPCRTAPI void RPC_ENTRY I_RpcFree( void* Object ); RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY I_RpcGetCurrentCallHandle( void ); /* * The platform SDK headers don't define these functions at all if WINNT is defined * The MSVC6 headers define two different sets of functions : * If WINNT and MSWMSG are defined, the NT versions are defined * If WINNT is not defined, the windows 9x versions are defined. * Note that the prototypes for I_RpcBindingSetAsync are different for each case. * * Wine defaults to the WinNT case and only defines these function is MSWMSG is * defined. Defining the NT functions by default causes MIDL generated proxies * to not compile. */ #if 1 /* WINNT */ #ifdef MSWMSG RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerStartListening( HWND hWnd ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerStopListening( void ); /* WINNT */ RPCRTAPI RPC_STATUS RPC_ENTRY I_GetThreadWindowHandle( HWND* hWnd ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncSendReceive( RPC_MESSAGE* Message, void* Context, HWND hWnd ); typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, HANDLE hSyncEvent); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn ); RPCRTAPI UINT RPC_ENTRY I_RpcWindowProc( void* hWnd, UINT Message, UINT wParam, ULONG lParam ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcSetWMsgEndpoint( WCHAR* Endpoint ); #endif #else /* WIN9x */ RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerStartListening( void* hWnd ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerStopListening( void ); typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, void* hSyncEvent); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn, ULONG ServerTid ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcSetThreadParams( int fClientFree, void* Context, void* hWndClient ); RPCRTAPI UINT RPC_ENTRY I_RpcWindowProc( void* hWnd, unsigned int Message, unsigned int wParam, ULONG lParam ); #endif RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqLocalClientPID (RPC_BINDING_HANDLE Binding, ULONG *Pid ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqTransportType( RPC_BINDING_HANDLE Binding, unsigned int* Type ); RPCRTAPI LONG RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS); #ifdef __cplusplus } #endif #endif /*__WINE_RPCDCEP_H */ ================================================ FILE: wine/windows/rpcndr.h ================================================ /* * Copyright (C) 2000 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __RPCNDR_H_VERSION__ #define __RPCNDR_H_VERSION__ ( 500 ) #endif #ifndef __WINE_RPCNDR_H #define __WINE_RPCNDR_H #include #include #ifdef __cplusplus extern "C" { #endif #undef CONST_VTBL #ifdef CONST_VTABLE # define CONST_VTBL const #else # define CONST_VTBL #endif #ifndef EXTERN_GUID #ifdef __cplusplus #define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ EXTERN_C const GUID DECLSPEC_SELECTANY name DECLSPEC_HIDDEN; \ EXTERN_C const GUID DECLSPEC_SELECTANY name = \ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } #else #define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ EXTERN_C const GUID name #endif #endif /* stupid #if can't handle casts... this __stupidity is just a workaround for that limitation */ #define __NDR_CHAR_REP_MASK 0x000f #define __NDR_INT_REP_MASK 0x00f0 #define __NDR_FLOAT_REP_MASK 0xff00 #define __NDR_IEEE_FLOAT 0x0000 #define __NDR_VAX_FLOAT 0x0100 #define __NDR_IBM_FLOAT 0x0300 #define __NDR_ASCII_CHAR 0x0000 #define __NDR_EBCDIC_CHAR 0x0001 #define __NDR_LITTLE_ENDIAN 0x0010 #define __NDR_BIG_ENDIAN 0x0000 /* Mac's are special */ #if defined(__RPC_MAC__) # define __NDR_LOCAL_DATA_REPRESENTATION \ (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_BIG_ENDIAN) #else # define __NDR_LOCAL_DATA_REPRESENTATION \ (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_LITTLE_ENDIAN) #endif #define __NDR_LOCAL_ENDIAN \ (__NDR_LOCAL_DATA_REPRESENTATION & __NDR_INT_REP_MASK) /* for convenience, define NDR_LOCAL_IS_BIG_ENDIAN iff it is */ #if __NDR_LOCAL_ENDIAN == __NDR_BIG_ENDIAN # define NDR_LOCAL_IS_BIG_ENDIAN #elif __NDR_LOCAL_ENDIAN == __NDR_LITTLE_ENDIAN # undef NDR_LOCAL_IS_BIG_ENDIAN #else # error alien NDR_LOCAL_ENDIAN - Greg botched the defines again, please report #endif /* finally, do the casts like Microsoft */ #define NDR_CHAR_REP_MASK ((ULONG) __NDR_CHAR_REP_MASK) #define NDR_INT_REP_MASK ((ULONG) __NDR_INT_REP_MASK) #define NDR_FLOAT_REP_MASK ((ULONG) __NDR_FLOAT_REP_MASK) #define NDR_IEEE_FLOAT ((ULONG) __NDR_IEEE_FLOAT) #define NDR_VAX_FLOAT ((ULONG) __NDR_VAX_FLOAT) #define NDR_IBM_FLOAT ((ULONG) __NDR_IBM_FLOAT) #define NDR_ASCII_CHAR ((ULONG) __NDR_ASCII_CHAR) #define NDR_EBCDIC_CHAR ((ULONG) __NDR_EBCDIC_CHAR) #define NDR_LITTLE_ENDIAN ((ULONG) __NDR_LITTLE_ENDIAN) #define NDR_BIG_ENDIAN ((ULONG) __NDR_BIG_ENDIAN) #define NDR_LOCAL_DATA_REPRESENTATION ((ULONG) __NDR_LOCAL_DATA_REPRESENTATION) #define NDR_LOCAL_ENDIAN ((ULONG) __NDR_LOCAL_ENDIAN) #define TARGET_IS_NT50_OR_LATER 1 #define TARGET_IS_NT40_OR_LATER 1 #define TARGET_IS_NT351_OR_WIN95_OR_LATER 1 #define small char typedef unsigned char byte; typedef INT64 hyper; typedef UINT64 MIDL_uhyper; typedef unsigned char boolean; #define __RPC_CALLEE WINAPI #define RPC_VAR_ENTRY WINAPIV #define NDR_SHAREABLE static #define MIDL_ascii_strlen(s) strlen(s) #define MIDL_ascii_strcpy(d,s) strcpy(d,s) #define MIDL_memset(d,v,n) memset(d,v,n) #define midl_user_free MIDL_user_free #define midl_user_allocate MIDL_user_allocate void * __RPC_USER MIDL_user_allocate(SIZE_T); void __RPC_USER MIDL_user_free(void *); #define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8) #define NdrFcLong(s) (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), \ (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24) #define RPC_BAD_STUB_DATA_EXCEPTION_FILTER \ ((RpcExceptionCode() == STATUS_ACCESS_VIOLATION) || \ (RpcExceptionCode() == STATUS_DATATYPE_MISALIGNMENT) || \ (RpcExceptionCode() == RPC_X_BAD_STUB_DATA) || \ (RpcExceptionCode() == RPC_S_INVALID_BOUND)) typedef struct { void *pad[2]; void *userContext; } *NDR_SCONTEXT; #define NDRSContextValue(hContext) (&(hContext)->userContext) #define cbNDRContext 20 typedef void (__RPC_USER *NDR_RUNDOWN)(void *context); typedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void); typedef void (__RPC_USER *NDR_NOTIFY2_ROUTINE)(boolean flag); #define DECLSPEC_UUID(x) #define MIDL_INTERFACE(x) struct struct _MIDL_STUB_MESSAGE; struct _MIDL_STUB_DESC; struct _FULL_PTR_XLAT_TABLES; struct NDR_ALLOC_ALL_NODES_CONTEXT; struct NDR_POINTER_QUEUE_STATE; typedef unsigned char *RPC_BUFPTR; typedef ULONG RPC_LENGTH; typedef void (__RPC_USER *EXPR_EVAL)(struct _MIDL_STUB_MESSAGE *); typedef const unsigned char *PFORMAT_STRING; typedef struct { LONG Dimension; ULONG *BufferConformanceMark; ULONG *BufferVarianceMark; ULONG *MaxCountArray; ULONG *OffsetArray; ULONG *ActualCountArray; } ARRAY_INFO, *PARRAY_INFO; typedef struct { ULONG WireCodeset; ULONG DesiredReceivingCodeset; void *CSArrayInfo; } CS_STUB_INFO; typedef struct _NDR_PIPE_DESC *PNDR_PIPE_DESC; typedef struct _NDR_PIPE_MESSAGE *PNDR_PIPE_MESSAGE; typedef struct _NDR_ASYNC_MESSAGE *PNDR_ASYNC_MESSAGE; typedef struct _NDR_CORRELATION_INFO *PNDR_CORRELATION_INFO; typedef struct _MIDL_STUB_MESSAGE { PRPC_MESSAGE RpcMsg; unsigned char *Buffer; unsigned char *BufferStart; unsigned char *BufferEnd; unsigned char *BufferMark; ULONG BufferLength; ULONG MemorySize; unsigned char *Memory; unsigned char IsClient; unsigned char Pad; unsigned short uFlags2; int ReuseBuffer; struct NDR_ALLOC_ALL_NODES_CONTEXT *pAllocAllNodesContext; struct NDR_POINTER_QUEUE_STATE *pPointerQueueState; int IgnoreEmbeddedPointers; unsigned char *PointerBufferMark; unsigned char CorrDespIncrement; unsigned char uFlags; unsigned short UniquePtrCount; ULONG_PTR MaxCount; ULONG Offset; ULONG ActualCount; void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T); void (__RPC_API *pfnFree)(void *); unsigned char *StackTop; unsigned char *pPresentedType; unsigned char *pTransmitType; handle_t SavedHandle; const struct _MIDL_STUB_DESC *StubDesc; struct _FULL_PTR_XLAT_TABLES *FullPtrXlatTables; ULONG FullPtrRefId; ULONG PointerLength; unsigned int fInDontFree:1; unsigned int fDontCallFreeInst:1; unsigned int fInOnlyParam:1; unsigned int fHasReturn:1; unsigned int fHasExtensions:1; unsigned int fHasNewCorrDesc:1; unsigned int fIsIn:1; unsigned int fIsOut:1; unsigned int fIsOicf:1; unsigned int fBufferValid:1; unsigned int fHasMemoryValidateCallback:1; unsigned int fInFree:1; unsigned int fNeedMCCP:1; int fUnused:3; int fUnused2:16; DWORD dwDestContext; void *pvDestContext; NDR_SCONTEXT *SavedContextHandles; LONG ParamNumber; struct IRpcChannelBuffer *pRpcChannelBuffer; PARRAY_INFO pArrayInfo; ULONG *SizePtrCountArray; ULONG *SizePtrOffsetArray; ULONG *SizePtrLengthArray; void *pArgQueue; DWORD dwStubPhase; void *LowStackMark; PNDR_ASYNC_MESSAGE pAsyncMsg; PNDR_CORRELATION_INFO pCorrInfo; unsigned char *pCorrMemory; void *pMemoryList; CS_STUB_INFO *pCSInfo; unsigned char *ConformanceMark; unsigned char *VarianceMark; INT_PTR Unused; /* BackingStoreLowMark on IA64 */ struct _NDR_PROC_CONTEXT *pContext; void* ContextHandleHash; void* pUserMarshalList; INT_PTR Reserved51_3; INT_PTR Reserved51_4; INT_PTR Reserved51_5; } MIDL_STUB_MESSAGE, *PMIDL_STUB_MESSAGE; typedef void * (__RPC_API * GENERIC_BINDING_ROUTINE)(void *); typedef void (__RPC_API * GENERIC_UNBIND_ROUTINE)(void *, unsigned char *); typedef struct _GENERIC_BINDING_ROUTINE_PAIR { GENERIC_BINDING_ROUTINE pfnBind; GENERIC_UNBIND_ROUTINE pfnUnbind; } GENERIC_BINDING_ROUTINE_PAIR, *PGENERIC_BINDING_ROUTINE_PAIR; typedef struct __GENERIC_BINDING_INFO { void *pObj; unsigned int Size; GENERIC_BINDING_ROUTINE pfnBind; GENERIC_UNBIND_ROUTINE pfnUnbind; } GENERIC_BINDING_INFO, *PGENERIC_BINDING_INFO; typedef void (__RPC_USER *XMIT_HELPER_ROUTINE)(PMIDL_STUB_MESSAGE); typedef struct _XMIT_ROUTINE_QUINTUPLE { XMIT_HELPER_ROUTINE pfnTranslateToXmit; XMIT_HELPER_ROUTINE pfnTranslateFromXmit; XMIT_HELPER_ROUTINE pfnFreeXmit; XMIT_HELPER_ROUTINE pfnFreeInst; } XMIT_ROUTINE_QUINTUPLE, *PXMIT_ROUTINE_QUINTUPLE; typedef ULONG (__RPC_USER *USER_MARSHAL_SIZING_ROUTINE)(ULONG *, ULONG, void *); typedef unsigned char * (__RPC_USER *USER_MARSHAL_MARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *); typedef unsigned char * (__RPC_USER *USER_MARSHAL_UNMARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *); typedef void (__RPC_USER *USER_MARSHAL_FREEING_ROUTINE)(ULONG *, void *); typedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE { USER_MARSHAL_SIZING_ROUTINE pfnBufferSize; USER_MARSHAL_MARSHALLING_ROUTINE pfnMarshall; USER_MARSHAL_UNMARSHALLING_ROUTINE pfnUnmarshall; USER_MARSHAL_FREEING_ROUTINE pfnFree; } USER_MARSHAL_ROUTINE_QUADRUPLE; /* 'USRC' */ #define USER_MARSHAL_CB_SIGNATURE \ ( ( (DWORD)'U' << 24 ) | ( (DWORD)'S' << 16 ) | \ ( (DWORD)'R' << 8 ) | ( (DWORD)'C' ) ) typedef enum { USER_MARSHAL_CB_BUFFER_SIZE, USER_MARSHAL_CB_MARSHALL, USER_MARSHAL_CB_UNMARSHALL, USER_MARSHAL_CB_FREE } USER_MARSHAL_CB_TYPE; typedef struct _USER_MARSHAL_CB { ULONG Flags; PMIDL_STUB_MESSAGE pStubMsg; PFORMAT_STRING pReserve; ULONG Signature; USER_MARSHAL_CB_TYPE CBType; PFORMAT_STRING pFormat; PFORMAT_STRING pTypeFormat; } USER_MARSHAL_CB; #define USER_CALL_CTXT_MASK(f) ((f) & 0x00ff) #define USER_CALL_AUX_MASK(f) ((f) & 0xff00) #define GET_USER_DATA_REP(f) HIWORD(f) #define USER_CALL_IS_ASYNC 0x0100 #define USER_CALL_NEW_CORRELATION_DESC 0x0200 typedef struct _MALLOC_FREE_STRUCT { void * (__WINE_ALLOC_SIZE(1) __RPC_USER *pfnAllocate)(SIZE_T); void (__RPC_USER *pfnFree)(void *); } MALLOC_FREE_STRUCT; typedef struct _COMM_FAULT_OFFSETS { short CommOffset; short FaultOffset; } COMM_FAULT_OFFSETS; typedef struct _MIDL_STUB_DESC { void *RpcInterfaceInformation; void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T); void (__RPC_API *pfnFree)(void *); union { handle_t *pAutoHandle; handle_t *pPrimitiveHandle; PGENERIC_BINDING_INFO pGenericBindingInfo; } IMPLICIT_HANDLE_INFO; const NDR_RUNDOWN *apfnNdrRundownRoutines; const GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs; const EXPR_EVAL *apfnExprEval; const XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple; const unsigned char *pFormatTypes; int fCheckBounds; ULONG Version; MALLOC_FREE_STRUCT *pMallocFreeStruct; LONG MIDLVersion; const COMM_FAULT_OFFSETS *CommFaultOffsets; const USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple; const NDR_NOTIFY_ROUTINE *NotifyRoutineTable; ULONG_PTR mFlags; ULONG_PTR Reserved3; ULONG_PTR Reserved4; ULONG_PTR Reserved5; } MIDL_STUB_DESC; typedef const MIDL_STUB_DESC *PMIDL_STUB_DESC; typedef struct _MIDL_FORMAT_STRING { short Pad; #if defined(__GNUC__) unsigned char Format[0]; #else unsigned char Format[1]; #endif } MIDL_FORMAT_STRING; typedef struct _MIDL_SYNTAX_INFO { RPC_SYNTAX_IDENTIFIER TransferSyntax; RPC_DISPATCH_TABLE* DispatchTable; PFORMAT_STRING ProcString; const unsigned short* FmtStringOffset; PFORMAT_STRING TypeString; const void* aUserMarshalQuadruple; ULONG_PTR pReserved1; ULONG_PTR pReserved2; } MIDL_SYNTAX_INFO, *PMIDL_SYNTAX_INFO; typedef void (__RPC_API *STUB_THUNK)( PMIDL_STUB_MESSAGE ); #ifdef WINE_STRICT_PROTOTYPES typedef LONG (__RPC_API *SERVER_ROUTINE)(void); #else typedef LONG (__RPC_API *SERVER_ROUTINE)(); #endif typedef struct _MIDL_SERVER_INFO_ { PMIDL_STUB_DESC pStubDesc; const SERVER_ROUTINE *DispatchTable; PFORMAT_STRING ProcString; const unsigned short *FmtStringOffset; const STUB_THUNK *ThunkTable; PRPC_SYNTAX_IDENTIFIER pTransferSyntax; ULONG_PTR nCount; PMIDL_SYNTAX_INFO pSyntaxInfo; } MIDL_SERVER_INFO, *PMIDL_SERVER_INFO; typedef struct _MIDL_STUBLESS_PROXY_INFO { PMIDL_STUB_DESC pStubDesc; PFORMAT_STRING ProcFormatString; const unsigned short *FormatStringOffset; PRPC_SYNTAX_IDENTIFIER pTransferSyntax; ULONG_PTR nCount; PMIDL_SYNTAX_INFO pSyntaxInfo; } MIDL_STUBLESS_PROXY_INFO, *PMIDL_STUBLESS_PROXY_INFO; #if defined(__i386__) && !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__CYGWIN__) /* Calling convention for returning structures/unions is different between Windows and gcc on i386 */ typedef LONG_PTR CLIENT_CALL_RETURN; #else typedef union _CLIENT_CALL_RETURN { void *Pointer; LONG_PTR Simple; } CLIENT_CALL_RETURN; #endif typedef enum { STUB_UNMARSHAL, STUB_CALL_SERVER, STUB_MARSHAL, STUB_CALL_SERVER_NO_HRESULT } STUB_PHASE; typedef enum { PROXY_CALCSIZE, PROXY_GETBUFFER, PROXY_MARSHAL, PROXY_SENDRECEIVE, PROXY_UNMARSHAL } PROXY_PHASE; typedef enum { XLAT_SERVER = 1, XLAT_CLIENT } XLAT_SIDE; typedef struct _FULL_PTR_TO_REFID_ELEMENT { struct _FULL_PTR_TO_REFID_ELEMENT *Next; void *Pointer; ULONG RefId; unsigned char State; } FULL_PTR_TO_REFID_ELEMENT, *PFULL_PTR_TO_REFID_ELEMENT; /* Full pointer translation tables */ typedef struct _FULL_PTR_XLAT_TABLES { struct { void **XlatTable; unsigned char *StateTable; ULONG NumberOfEntries; } RefIdToPointer; struct { PFULL_PTR_TO_REFID_ELEMENT *XlatTable; ULONG NumberOfBuckets; ULONG HashMask; } PointerToRefId; ULONG NextRefId; XLAT_SIDE XlatSide; } FULL_PTR_XLAT_TABLES, *PFULL_PTR_XLAT_TABLES; struct IRpcStubBuffer; typedef ULONG error_status_t; typedef void * NDR_CCONTEXT; typedef struct _SCONTEXT_QUEUE { ULONG NumberOfObjects; NDR_SCONTEXT *ArrayOfObjects; } SCONTEXT_QUEUE, *PSCONTEXT_QUEUE; typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1 { void *Buffer; ULONG BufferSize; void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T); void (__RPC_API *pfnFree)(void *); struct IRpcChannelBuffer *pRpcChannelBuffer; ULONG_PTR Reserved[5]; } NDR_USER_MARSHAL_INFO_LEVEL1; typedef struct _NDR_USER_MARSHAL_INFO { ULONG InformationLevel; union { NDR_USER_MARSHAL_INFO_LEVEL1 Level1; } DUMMYUNIONNAME1; } NDR_USER_MARSHAL_INFO; /* Context Handles */ RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY NDRCContextBinding( NDR_CCONTEXT CContext ); RPCRTAPI void RPC_ENTRY NDRCContextMarshall( NDR_CCONTEXT CContext, void *pBuff ); RPCRTAPI void RPC_ENTRY NDRCContextUnmarshall( NDR_CCONTEXT *pCContext, RPC_BINDING_HANDLE hBinding, void *pBuff, ULONG DataRepresentation ); RPCRTAPI void RPC_ENTRY NDRSContextMarshall( NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn ); RPCRTAPI NDR_SCONTEXT RPC_ENTRY NDRSContextUnmarshall( void *pBuff, ULONG DataRepresentation ); RPCRTAPI void RPC_ENTRY NDRSContextMarshallEx( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn ); RPCRTAPI void RPC_ENTRY NDRSContextMarshall2( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn, void * CtxGuard, ULONG Flags ); RPCRTAPI NDR_SCONTEXT RPC_ENTRY NDRSContextUnmarshallEx( RPC_BINDING_HANDLE BindingHandle, void *pBuff, ULONG DataRepresentation ); RPCRTAPI NDR_SCONTEXT RPC_ENTRY NDRSContextUnmarshall2( RPC_BINDING_HANDLE BindingHandle, void *pBuff, ULONG DataRepresentation, void *CtxGuard, ULONG Flags ); RPCRTAPI void RPC_ENTRY NdrClientContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck ); RPCRTAPI void RPC_ENTRY NdrClientContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT* pContextHandle, RPC_BINDING_HANDLE BindHandle ); RPCRTAPI void RPC_ENTRY NdrServerContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine ); RPCRTAPI NDR_SCONTEXT RPC_ENTRY NdrServerContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI void RPC_ENTRY NdrContextHandleSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); RPCRTAPI NDR_SCONTEXT RPC_ENTRY NdrContextHandleInitialize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ); RPCRTAPI void RPC_ENTRY NdrServerContextNewMarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine, PFORMAT_STRING pFormat ); RPCRTAPI NDR_SCONTEXT RPC_ENTRY NdrServerContextNewUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcSmDestroyClientContext( void **ContextHandle ); RPCRTAPI void RPC_ENTRY RpcSsDestroyClientContext( void **ContextHandle ); RPCRTAPI void RPC_ENTRY NdrSimpleTypeMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar ); RPCRTAPI void RPC_ENTRY NdrSimpleTypeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar ); RPCRTAPI unsigned char* RPC_ENTRY NdrByteCountPointerMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); RPCRTAPI unsigned char* RPC_ENTRY NdrByteCountPointerUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ); RPCRTAPI void RPC_ENTRY NdrByteCountPointerBufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); RPCRTAPI void RPC_ENTRY NdrByteCountPointerFree( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); RPCRTAPI unsigned char* RPC_ENTRY NdrRangeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ); /* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */ #define SIMPLE_TYPE_MARSHAL(type) \ RPCRTAPI unsigned char* RPC_ENTRY \ Ndr##type##Marshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \ RPCRTAPI unsigned char* RPC_ENTRY \ Ndr##type##Unmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ); \ RPCRTAPI void RPC_ENTRY \ Ndr##type##BufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \ RPCRTAPI ULONG RPC_ENTRY \ Ndr##type##MemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ); #define TYPE_MARSHAL(type) \ SIMPLE_TYPE_MARSHAL(type) \ RPCRTAPI void RPC_ENTRY \ Ndr##type##Free( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); TYPE_MARSHAL(Pointer) TYPE_MARSHAL(SimpleStruct) TYPE_MARSHAL(ConformantStruct) TYPE_MARSHAL(ConformantVaryingStruct) TYPE_MARSHAL(ComplexStruct) TYPE_MARSHAL(FixedArray) TYPE_MARSHAL(ConformantArray) TYPE_MARSHAL(ConformantVaryingArray) TYPE_MARSHAL(VaryingArray) TYPE_MARSHAL(ComplexArray) TYPE_MARSHAL(EncapsulatedUnion) TYPE_MARSHAL(NonEncapsulatedUnion) TYPE_MARSHAL(XmitOrRepAs) TYPE_MARSHAL(UserMarshal) TYPE_MARSHAL(InterfacePointer) SIMPLE_TYPE_MARSHAL(ConformantString) SIMPLE_TYPE_MARSHAL(NonConformantString) #undef TYPE_MARSHAL #undef SIMPLE_TYPE_MARSHAL RPCRTAPI void RPC_ENTRY NdrCorrelationInitialize( PMIDL_STUB_MESSAGE pStubMsg, void *pMemory, ULONG CacheSize, ULONG flags ); RPCRTAPI void RPC_ENTRY NdrCorrelationPass( PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI void RPC_ENTRY NdrCorrelationFree( PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI void RPC_ENTRY NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, LONG NumberParams ); RPCRTAPI void RPC_ENTRY NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ); #define USER_MARSHAL_FC_BYTE 1 #define USER_MARSHAL_FC_CHAR 2 #define USER_MARSHAL_FC_SMALL 3 #define USER_MARSHAL_FC_USMALL 4 #define USER_MARSHAL_FC_WCHAR 5 #define USER_MARSHAL_FC_SHORT 6 #define USER_MARSHAL_FC_USHORT 7 #define USER_MARSHAL_FC_LONG 8 #define USER_MARSHAL_FC_ULONG 9 #define USER_MARSHAL_FC_FLOAT 10 #define USER_MARSHAL_FC_HYPER 11 #define USER_MARSHAL_FC_DOUBLE 12 RPCRTAPI unsigned char* RPC_ENTRY NdrUserMarshalSimpleTypeConvert( ULONG *pFlags, unsigned char *pBuffer, unsigned char FormatChar ); CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); RPCRTAPI void RPC_ENTRY NdrServerCall2( PRPC_MESSAGE pRpcMsg ); RPCRTAPI void RPC_ENTRY NdrServerCall( PRPC_MESSAGE pRpcMsg ); RPCRTAPI void RPC_ENTRY NdrAsyncServerCall( PRPC_MESSAGE pRpcMsg ); RPCRTAPI LONG RPC_ENTRY NdrStubCall2( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase ); RPCRTAPI LONG RPC_ENTRY NdrStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase ); RPCRTAPI LONG RPC_ENTRY NdrAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase ); RPCRTAPI LONG RPC_ENTRY NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase ); RPCRTAPI void* RPC_ENTRY NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2); RPCRTAPI void RPC_ENTRY NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr ); RPCRTAPI RPC_STATUS RPC_ENTRY NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg, ULONG *pCommStatus, ULONG *pFaultStatus, RPC_STATUS Status_ ); RPCRTAPI void* RPC_ENTRY NdrOleAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1); RPCRTAPI void RPC_ENTRY NdrOleFree( void* NodeToFree ); RPCRTAPI void RPC_ENTRY NdrClientInitialize( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum ); RPCRTAPI void RPC_ENTRY NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum ); RPCRTAPI unsigned char* RPC_ENTRY NdrServerInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc ); RPCRTAPI unsigned char* RPC_ENTRY NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc ); RPCRTAPI unsigned char* RPC_ENTRY NdrServerInitializeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, PRPC_MESSAGE pRpcMsg ); RPCRTAPI void RPC_ENTRY NdrServerInitializeMarshall( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI void RPC_ENTRY NdrServerMarshall( struct IRpcStubBuffer *pThis, struct IRpcChannelBuffer *pChannel, PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ); RPCRTAPI void RPC_ENTRY NdrServerUnmarshall( struct IRpcChannelBuffer *pChannel, PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, void *pParamList ); RPCRTAPI unsigned char* RPC_ENTRY NdrGetBuffer( PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle ); RPCRTAPI void RPC_ENTRY NdrFreeBuffer( PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI unsigned char* RPC_ENTRY NdrSendReceive( PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer ); RPCRTAPI unsigned char * RPC_ENTRY NdrNsGetBuffer( PMIDL_STUB_MESSAGE pStubMsg, ULONG BufferLength, RPC_BINDING_HANDLE Handle ); RPCRTAPI unsigned char * RPC_ENTRY NdrNsSendReceive( PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pBufferEnd, RPC_BINDING_HANDLE *pAutoHandle ); RPCRTAPI RPC_STATUS RPC_ENTRY NdrGetDcomProtocolVersion( PMIDL_STUB_MESSAGE pStubMsg, RPC_VERSION *pVersion ); RPCRTAPI PFULL_PTR_XLAT_TABLES RPC_ENTRY NdrFullPointerXlatInit( ULONG NumberOfPointers, XLAT_SIDE XlatSide ); RPCRTAPI void RPC_ENTRY NdrFullPointerXlatFree( PFULL_PTR_XLAT_TABLES pXlatTables ); RPCRTAPI int RPC_ENTRY NdrFullPointerQueryPointer( PFULL_PTR_XLAT_TABLES pXlatTables, void *pPointer, unsigned char QueryType, ULONG *pRefId ); RPCRTAPI int RPC_ENTRY NdrFullPointerQueryRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, unsigned char QueryType, void **ppPointer ); RPCRTAPI void RPC_ENTRY NdrFullPointerInsertRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, void *pPointer ); RPCRTAPI int RPC_ENTRY NdrFullPointerFree( PFULL_PTR_XLAT_TABLES pXlatTables, void *Pointer ); RPCRTAPI void RPC_ENTRY NdrRpcSsEnableAllocate( PMIDL_STUB_MESSAGE pMessage ); RPCRTAPI void RPC_ENTRY NdrRpcSsDisableAllocate( PMIDL_STUB_MESSAGE pMessage ); RPCRTAPI void RPC_ENTRY NdrRpcSmSetClientToOsf( PMIDL_STUB_MESSAGE pMessage ); RPCRTAPI void * RPC_ENTRY NdrRpcSmClientAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1); RPCRTAPI void RPC_ENTRY NdrRpcSmClientFree( void *NodeToFree ); RPCRTAPI void * RPC_ENTRY NdrRpcSsDefaultAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1); RPCRTAPI void RPC_ENTRY NdrRpcSsDefaultFree( void *NodeToFree ); RPCRTAPI RPC_STATUS RPC_ENTRY NdrGetUserMarshalInfo( ULONG *pFlags, ULONG InformationLevel, NDR_USER_MARSHAL_INFO *pMarshalInfo ); #ifdef __cplusplus } #endif #endif /*__WINE_RPCNDR_H */ ================================================ FILE: wine/windows/rpcnterr.h ================================================ /* * Copyright (C) 2001 Peter Hunnisett * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __RPCNTERR_H__ #define __RPCNTERR_H__ #define RPC_S_OK ERROR_SUCCESS #define RPC_S_INVALID_ARG ERROR_INVALID_PARAMETER #define RPC_S_OUT_OF_MEMORY ERROR_OUTOFMEMORY #define RPC_S_OUT_OF_THREADS ERROR_MAX_THRDS_REACHED #define RPC_S_INVALID_LEVEL ERROR_INVALID_PARAMETER #define RPC_S_BUFFER_TOO_SMALL ERROR_INSUFFICIENT_BUFFER #define RPC_S_INVALID_SECURITY_DESC ERROR_INVALID_SECURITY_DESCR #define RPC_S_ACCESS_DENIED ERROR_ACCESS_DENIED #define RPC_S_SERVER_OUT_OF_MEMORY ERROR_NOT_ENOUGH_SERVER_MEMORY #define RPC_S_ASYNC_CALL_PENDING ERROR_IO_PENDING #define RPC_S_UNKNOWN_PRINCIPAL ERROR_NONE_MAPPED #define RPC_S_TIMEOUT ERROR_TIMEOUT #define RPC_X_NO_MEMORY RPC_S_OUT_OF_MEMORY #define RPC_X_INVALID_BOUND RPC_S_INVALID_BOUND #define RPC_X_INVALID_TAG RPC_S_INVALID_TAG #define RPC_X_ENUM_VALUE_TOO_LARGE RPC_X_ENUM_VALUE_OUT_OF_RANGE #define RPC_X_SS_CONTEXT_MISMATCH ERROR_INVALID_HANDLE #define RPC_X_INVALID_BUFFER ERROR_INVALID_USER_BUFFER #define RPC_X_PIPE_APP_MEMORY ERROR_OUTOFMEMORY #define RPC_X_INVALID_PIPE_OPERATION RPC_X_WRONG_PIPE_ORDER #endif /* __RPCNTERR_H__ */ ================================================ FILE: wine/windows/rpcproxy.h ================================================ /* * Copyright (C) 2001 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __RPCPROXY_H_VERSION__ /* FIXME: Find an appropriate version number. I guess something is better than nothing */ #define __RPCPROXY_H_VERSION__ ( 399 ) #endif #ifndef __WINE_RPCPROXY_H #define __WINE_RPCPROXY_H #define __midl_proxy #include #ifndef GUID_DEFINED #include #endif #include #include #ifdef __cplusplus extern "C" { #endif typedef struct tagCInterfaceStubVtbl *PCInterfaceStubVtblList; typedef struct tagCInterfaceProxyVtbl *PCInterfaceProxyVtblList; typedef const char *PCInterfaceName; typedef int __stdcall IIDLookupRtn( const IID *pIID, int *pIndex ); typedef IIDLookupRtn *PIIDLookup; typedef struct tagProxyFileInfo { const PCInterfaceProxyVtblList *pProxyVtblList; const PCInterfaceStubVtblList *pStubVtblList; const PCInterfaceName *pNamesArray; const IID **pDelegatedIIDs; const PIIDLookup pIIDLookupRtn; unsigned short TableSize; unsigned short TableVersion; const IID **pAsyncIIDLookup; LONG_PTR Filler2; LONG_PTR Filler3; LONG_PTR Filler4; } ProxyFileInfo; typedef ProxyFileInfo ExtendedProxyFileInfo; typedef struct tagCInterfaceProxyHeader { #ifdef USE_STUBLESS_PROXY const void *pStublessProxyInfo; #endif const IID *piid; } CInterfaceProxyHeader; #define CINTERFACE_PROXY_VTABLE(n) \ struct \ { \ CInterfaceProxyHeader header; \ void *Vtbl[n]; \ } typedef struct tagCInterfaceProxyVtbl { CInterfaceProxyHeader header; #if defined(__GNUC__) void *Vtbl[0]; #else void *Vtbl[1]; #endif } CInterfaceProxyVtbl; typedef void (__RPC_STUB *PRPC_STUB_FUNCTION)( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *pdwStubPhase); typedef struct tagCInterfaceStubHeader { const IID *piid; const MIDL_SERVER_INFO *pServerInfo; ULONG DispatchTableCount; const PRPC_STUB_FUNCTION *pDispatchTable; } CInterfaceStubHeader; typedef struct tagCInterfaceStubVtbl { CInterfaceStubHeader header; IRpcStubBufferVtbl Vtbl; } CInterfaceStubVtbl; typedef struct tagCStdStubBuffer { const IRpcStubBufferVtbl *lpVtbl; LONG RefCount; struct IUnknown *pvServerObject; const struct ICallFactoryVtbl *pCallFactoryVtbl; const IID *pAsyncIID; struct IPSFactoryBuffer *pPSFactory; } CStdStubBuffer; typedef struct tagCStdPSFactoryBuffer { const IPSFactoryBufferVtbl *lpVtbl; LONG RefCount; const ProxyFileInfo **pProxyFileList; LONG Filler1; } CStdPSFactoryBuffer; #define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) DECLSPEC_HIDDEN; ULONG STDMETHODCALLTYPE NdrCStdStubBuffer2_Release(IRpcStubBuffer *This, IPSFactoryBuffer *pPSF); #define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0 HRESULT WINAPI CStdStubBuffer_QueryInterface( IRpcStubBuffer *This, REFIID riid, void **ppvObject ); ULONG WINAPI CStdStubBuffer_AddRef( IRpcStubBuffer *This ); ULONG WINAPI CStdStubBuffer_Release( IRpcStubBuffer *This ) DECLSPEC_HIDDEN; ULONG WINAPI NdrCStdStubBuffer_Release( IRpcStubBuffer *This, IPSFactoryBuffer *pPSF ); HRESULT WINAPI CStdStubBuffer_Connect( IRpcStubBuffer *This, IUnknown *pUnkServer ); void WINAPI CStdStubBuffer_Disconnect( IRpcStubBuffer *This ); HRESULT WINAPI CStdStubBuffer_Invoke( IRpcStubBuffer *This, RPCOLEMESSAGE *pRpcMsg, IRpcChannelBuffer *pRpcChannelBuffer ); IRpcStubBuffer * WINAPI CStdStubBuffer_IsIIDSupported( IRpcStubBuffer *This, REFIID riid ); ULONG WINAPI CStdStubBuffer_CountRefs( IRpcStubBuffer *This ); HRESULT WINAPI CStdStubBuffer_DebugServerQueryInterface( IRpcStubBuffer *This, void **ppv ); void WINAPI CStdStubBuffer_DebugServerRelease( IRpcStubBuffer *This, void *pv ); #define CStdStubBuffer_METHODS \ CStdStubBuffer_QueryInterface, \ CStdStubBuffer_AddRef, \ CStdStubBuffer_Release, \ CStdStubBuffer_Connect, \ CStdStubBuffer_Disconnect, \ CStdStubBuffer_Invoke, \ CStdStubBuffer_IsIIDSupported, \ CStdStubBuffer_CountRefs, \ CStdStubBuffer_DebugServerQueryInterface, \ CStdStubBuffer_DebugServerRelease RPCRTAPI void RPC_ENTRY NdrProxyInitialize( void *This, PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDescriptor, unsigned int ProcNum ); RPCRTAPI void RPC_ENTRY NdrProxyGetBuffer( void *This, PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI void RPC_ENTRY NdrProxySendReceive( void *This, PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI void RPC_ENTRY NdrProxyFreeBuffer( void *This, PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI HRESULT RPC_ENTRY NdrProxyErrorHandler( DWORD dwExceptionCode ); RPCRTAPI void RPC_ENTRY NdrStubInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer ); RPCRTAPI void RPC_ENTRY NdrStubInitializePartial( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer, ULONG RequestedBufferSize ); void __RPC_STUB NdrStubForwardingFunction( IRpcStubBuffer *This, IRpcChannelBuffer *pChannel, PRPC_MESSAGE pMsg, DWORD *pdwStubPhase ); RPCRTAPI void RPC_ENTRY NdrStubGetBuffer( IRpcStubBuffer *This, IRpcChannelBuffer *pRpcChannelBuffer, PMIDL_STUB_MESSAGE pStubMsg ); RPCRTAPI HRESULT RPC_ENTRY NdrStubErrorHandler( DWORD dwExceptionCode ); RPCRTAPI HRESULT RPC_ENTRY NdrDllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid, CStdPSFactoryBuffer *pPSFactoryBuffer ); RPCRTAPI HRESULT RPC_ENTRY NdrDllCanUnloadNow( CStdPSFactoryBuffer *pPSFactoryBuffer ); RPCRTAPI HRESULT RPC_ENTRY NdrDllRegisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid ); RPCRTAPI HRESULT RPC_ENTRY NdrDllUnregisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid ); HRESULT __wine_register_resources( HMODULE module ) DECLSPEC_HIDDEN; HRESULT __wine_unregister_resources( HMODULE module ) DECLSPEC_HIDDEN; #define CSTDSTUBBUFFERRELEASE(pFactory) \ ULONG WINAPI CStdStubBuffer_Release(IRpcStubBuffer *This) \ { return NdrCStdStubBuffer_Release(This, (IPSFactoryBuffer *)pFactory); } #ifdef PROXY_DELEGATION #define CSTDSTUBBUFFER2RELEASE(pFactory) \ ULONG WINAPI CStdStubBuffer2_Release(IRpcStubBuffer *This) \ { return NdrCStdStubBuffer2_Release(This, (IPSFactoryBuffer *)pFactory); } #else #define CSTDSTUBBUFFER2RELEASE(pFactory) #endif #define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID, name##_ProxyVtblList[index]->header.piid, sizeof(IID)) /* * In these macros, BS stands for Binary Search. MIDL uses these to * "unroll" a binary search into the module's IID_Lookup function. * However, I haven't bothered to reimplement that stuff yet; * I've just implemented a linear search for now. */ #define IID_BS_LOOKUP_SETUP \ int c; #define IID_BS_LOOKUP_INITIAL_TEST(name, sz, split) #define IID_BS_LOOKUP_NEXT_TEST(name, split) #define IID_BS_LOOKUP_RETURN_RESULT(name, sz, index) \ for (c=0; cpStubVtblList[0] ? \ aProxyFileList[0]->pStubVtblList[0]->header.piid : NULL) #else # define GET_DLL_CLSID &PROXY_CLSID #endif #ifdef ENTRY_PREFIX # define __rpc_macro_expand2(a, b) a##b # define __rpc_macro_expand(a, b) __rpc_macro_expand2(a, b) # define DLLREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllRegisterServer) # define DLLUNREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllUnregisterServer) # define DLLMAIN_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllMain) # define DLLGETCLASSOBJECT_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllGetClassObject) # define DLLCANUNLOADNOW_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllCanUnloadNow) #else # define DLLREGISTERSERVER_ENTRY DllRegisterServer # define DLLUNREGISTERSERVER_ENTRY DllUnregisterServer # define DLLMAIN_ENTRY DllMain # define DLLGETCLASSOBJECT_ENTRY DllGetClassObject # define DLLCANUNLOADNOW_ENTRY DllCanUnloadNow #endif #ifdef WINE_REGISTER_DLL # define WINE_DO_REGISTER_DLL(pfl, clsid) return __wine_register_resources( hProxyDll ) # define WINE_DO_UNREGISTER_DLL(pfl, clsid) return __wine_unregister_resources( hProxyDll ) #else # define WINE_DO_REGISTER_DLL(pfl, clsid) return NdrDllRegisterProxy( hProxyDll, (pfl), (clsid) ) # define WINE_DO_UNREGISTER_DLL(pfl, clsid) return NdrDllUnregisterProxy( hProxyDll, (pfl), (clsid) ) #endif #define DLLDATA_GETPROXYDLLINFO(pfl, rclsid) \ void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \ const CLSID **ppClsid) DECLSPEC_HIDDEN; \ void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \ const CLSID **ppClsid) \ { \ *ppProxyFileInfo = (pfl); \ *ppClsid = (rclsid); \ } #define DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, factory) \ HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, void **ppv) DECLSPEC_HIDDEN; \ HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, \ void **ppv) \ { \ return NdrDllGetClassObject(rclsid, riid, ppv, (pfl), \ (factory_clsid), factory); \ } #define DLLCANUNLOADNOW(factory) \ HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) DECLSPEC_HIDDEN; \ HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) \ { \ return NdrDllCanUnloadNow((factory)); \ } #define REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid) \ HINSTANCE hProxyDll DECLSPEC_HIDDEN = NULL; \ \ BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) DECLSPEC_HIDDEN; \ BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, \ LPVOID lpvReserved) \ { \ if (fdwReason == DLL_PROCESS_ATTACH) \ { \ DisableThreadLibraryCalls(hinstDLL); \ hProxyDll = hinstDLL; \ } \ return TRUE; \ } \ \ HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) DECLSPEC_HIDDEN; \ HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) \ { \ WINE_DO_REGISTER_DLL( (pfl), (factory_clsid) ); \ } \ \ HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) DECLSPEC_HIDDEN; \ HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) \ { \ WINE_DO_UNREGISTER_DLL( (pfl), (factory_clsid) ); \ } #if defined(REGISTER_PROXY_DLL) || defined(WINE_REGISTER_DLL) # define DLLREGISTRY_ROUTINES(pfl, factory_clsid) \ REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid) #else # define DLLREGISTRY_ROUTINES(pfl, factory_clsid) #endif #define DLLDATA_ROUTINES(pfl, factory_clsid) \ CLSID_PSFACTORYBUFFER \ CStdPSFactoryBuffer DECLSPEC_HIDDEN gPFactory = { NULL, 0, NULL, 0 }; \ DLLDATA_GETPROXYDLLINFO(pfl, factory_clsid) \ DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, &gPFactory) \ DLLCANUNLOADNOW(&gPFactory) \ CSTDSTUBBUFFERRELEASE(&gPFactory) \ CSTDSTUBBUFFER2RELEASE(&gPFactory) \ DLLREGISTRY_ROUTINES(pfl, factory_clsid) #if 0 RPCRTAPI HRESULT RPC_ENTRY CreateProxyFromTypeInfo( LPTYPEINFO pTypeInfo, LPUNKNOWN pUnkOuter, REFIID riid, LPRPCPROXYBUFFER *ppProxy, LPVOID *ppv ); RPCRTAPI HRESULT RPC_ENTRY CreateStubFromTypeInfo( LPTYPEINFO pTypeInfo, REFIID riid, LPUNKNOWN pUnkServer, LPRPCSTUBBUFFER *ppStub ); #endif #ifdef __cplusplus } #endif #endif /*__WINE_RPCPROXY_H */ ================================================ FILE: wine/windows/rpcsal.h ================================================ /* * Copyright (C) 2011 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __RPCSAL_H_VERSION__ # define __RPCSAL_H_VERSION__ 100 #endif #define __RPC__deref_in #define __RPC__deref_in_opt #define __RPC__deref_in_string #define __RPC__deref_in_opt_string #define __RPC__deref_in_ecount(size) #define __RPC__deref_in_ecount_opt(size) #define __RPC__deref_in_ecount_opt_string(size) #define __RPC__deref_in_ecount_full(size) #define __RPC__deref_in_ecount_full_opt(size) #define __RPC__deref_in_ecount_full_string(size) #define __RPC__deref_in_ecount_full_opt_string(size) #define __RPC__deref_in_ecount_part(size, length) #define __RPC__deref_in_ecount_part_opt(size, length) #define __RPC__deref_in_xcount(size) #define __RPC__deref_in_xcount_opt(size) #define __RPC__deref_in_xcount_opt_string(size) #define __RPC__deref_in_xcount_full(size) #define __RPC__deref_in_xcount_full_opt(size) #define __RPC__deref_in_xcount_full_string(size) #define __RPC__deref_in_xcount_full_opt_string(size) #define __RPC__deref_in_xcount_part(size, length) #define __RPC__deref_in_xcount_part_opt(size, length) #define __RPC__deref_inout #define __RPC__deref_inout_opt #define __RPC__deref_inout_string #define __RPC__deref_inout_opt_string #define __RPC__deref_inout_ecount_opt(size) #define __RPC__deref_inout_ecount_full(size) #define __RPC__deref_inout_ecount_full_opt(size) #define __RPC__deref_inout_ecount_full_string(size) #define __RPC__deref_inout_ecount_full_opt_string(size) #define __RPC__deref_inout_ecount_part_opt(size, length) #define __RPC__deref_inout_xcount_opt(size) #define __RPC__deref_inout_xcount_full(size) #define __RPC__deref_inout_xcount_full_opt(size) #define __RPC__deref_inout_xcount_full_string(size) #define __RPC__deref_inout_xcount_full_opt_string(size) #define __RPC__deref_inout_xcount_part_opt(size, length) #define __RPC__deref_out #define __RPC__deref_out_opt #define __RPC__deref_out_string #define __RPC__deref_out_opt_string #define __RPC__deref_out_ecount(size) #define __RPC__deref_out_ecount_opt(size) #define __RPC__deref_out_ecount_full(size) #define __RPC__deref_out_ecount_full_opt(size) #define __RPC__deref_out_ecount_full_string(size) #define __RPC__deref_out_ecount_full_opt_string(size) #define __RPC__deref_out_ecount_part(size, length) #define __RPC__deref_out_ecount_part_opt(size, length) #define __RPC__deref_out_xcount(size) #define __RPC__deref_out_xcount_opt(size) #define __RPC__deref_out_xcount_full(size) #define __RPC__deref_out_xcount_full_opt(size) #define __RPC__deref_out_xcount_full_string(size) #define __RPC__deref_out_xcount_full_opt_string(size) #define __RPC__deref_out_xcount_part(size, length) #define __RPC__deref_out_xcount_part_opt(size, length) #define __RPC__deref_opt_in #define __RPC__deref_opt_in_opt #define __RPC__deref_opt_in_string #define __RPC__deref_opt_in_opt_string #define __RPC__deref_opt_inout #define __RPC__deref_opt_inout_opt #define __RPC__deref_opt_inout_string #define __RPC__deref_opt_inout_opt_string #define __RPC__deref_opt_inout_ecount(size) #define __RPC__deref_opt_inout_ecount_opt(size) #define __RPC__deref_opt_inout_ecount_full(size) #define __RPC__deref_opt_inout_ecount_full_opt(size) #define __RPC__deref_opt_inout_ecount_full_string(size) #define __RPC__deref_opt_inout_ecount_full_opt_string(size) #define __RPC__deref_opt_inout_ecount_part(size, length) #define __RPC__deref_opt_inout_ecount_part_opt(size, length) #define __RPC__deref_opt_inout_xcount(size) #define __RPC__deref_opt_inout_xcount_opt(size) #define __RPC__deref_opt_inout_xcount_full(size) #define __RPC__deref_opt_inout_xcount_full_opt(size) #define __RPC__deref_opt_inout_xcount_full_string(size) #define __RPC__deref_opt_inout_xcount_full_opt_string(size) #define __RPC__deref_opt_inout_xcount_part(size, length) #define __RPC__deref_opt_inout_xcount_part_opt(size, length) #define __RPC__in #define __RPC__in_opt #define __RPC__in_string #define __RPC__in_opt_string #define __RPC__in_ecount(size) #define __RPC__in_ecount_opt(size) #define __RPC__in_ecount_full(size) #define __RPC__in_ecount_full_opt(size) #define __RPC__in_ecount_full_string(size) #define __RPC__in_ecount_full_opt_string(size) #define __RPC__in_ecount_part(size, length) #define __RPC__in_ecount_part_opt(size, length) #define __RPC__in_xcount(size) #define __RPC__in_xcount_opt(size) #define __RPC__in_xcount_full(size) #define __RPC__in_xcount_full_opt(size) #define __RPC__in_xcount_full_string(size) #define __RPC__in_xcount_full_opt_string(size) #define __RPC__in_xcount_part(size, length) #define __RPC__in_xcount_part_opt(size, length) #define __RPC__inout #define __RPC__inout_opt #define __RPC__inout_string #define __RPC__inout_opt_string #define __RPC__opt_inout #define __RPC__inout_ecount(size) #define __RPC__inout_ecount_opt(size) #define __RPC__inout_ecount_full(size) #define __RPC__inout_ecount_full_opt(size) #define __RPC__inout_ecount_full_string(size) #define __RPC__inout_ecount_full_opt_string(size) #define __RPC__inout_ecount_part(size, length) #define __RPC__inout_ecount_part_opt(size, length) #define __RPC__inout_xcount(size) #define __RPC__inout_xcount_opt(size) #define __RPC__inout_xcount_full(size) #define __RPC__inout_xcount_full_opt(size) #define __RPC__inout_xcount_full_string(size) #define __RPC__inout_xcount_full_opt_string(size) #define __RPC__inout_xcount_part(size, length) #define __RPC__inout_xcount_part_opt(size, length) #define __RPC__out #define __RPC__out_ecount(size) #define __RPC__out_ecount_full(size) #define __RPC__out_ecount_full_string(size) #define __RPC__out_ecount_part(size, length) #define __RPC__out_xcount(size) #define __RPC__out_xcount_full(size) #define __RPC__out_xcount_full_string(size) #define __RPC__out_xcount_part(size, length) #define __RPC_full_pointer #define __RPC_ref_pointer #define __RPC_string #define __RPC_unique_pointer #define __RPC__range(min,max) #define __RPC__in_range(min,max) ================================================ FILE: wine/windows/rstbas.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ local, object, uuid(0c733a7c-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IRowset : IUnknown { typedef DWORD DBROWOPTIONS; HRESULT AddRefRows([in] DBCOUNTITEM cRows, [in, size_is(cRows)] const HROW rghRows[], [out, size_is(cRows)] DBREFCOUNT rgRefCounts[], [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]); HRESULT GetData([in] HROW hRow, [in] HACCESSOR hAccessor, [out] void *pData); HRESULT GetNextRows([in] HCHAPTER hReserved, [in] DBROWOFFSET lRowsOffset, [in] DBROWCOUNT cRows, [out] DBCOUNTITEM *pcRowObtained, [out, size_is(,cRows)] HROW **prghRows); HRESULT ReleaseRows([in] DBCOUNTITEM cRows, [in, size_is(cRows)] const HROW rghRows[], [in, size_is(cRows)] DBROWOPTIONS rgRowOptions[], [out, size_is(cRows)] DBREFCOUNT rgRefCounts[], [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]); HRESULT RestartPosition([in] HCHAPTER hReserved); } ================================================ FILE: wine/windows/rstinf.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a55-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IRowsetInfo : IUnknown { [local] HRESULT GetProperties([in] const ULONG cPropertyIDSets, [in, size_is(cPropertyIDSets), annotation("__in_ecount_opt(cPropertyIDSets)")] const DBPROPIDSET rgPropertyIDSets[], [in, out, annotation("__out")] ULONG *pcPropertySets, [out, size_is(,*pcPropertySets), annotation("__deref_out_ecount_opt(*pcPropertySets)")] DBPROPSET **prgPropertySets); [call_as(GetProperties)] HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets, [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, [in, out] ULONG *pcPropertySets, [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetReferencedRowset([in] DBORDINAL iOrdinal, [in, annotation("__in")] REFIID riid, [out, iid_is(riid), annotation("deref_out_opt")] IUnknown **ppReferencedRowset); [call_as(GetReferencedRowset)] HRESULT RemoteGetReferencedRowset([in] DBORDINAL iOrdinal, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppReferencedRowset, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT GetSpecification([in, annotation("__in")] REFIID riid, [out, iid_is(riid), annotation("__deref_out_opt")] IUnknown **ppSpecification); [call_as(GetSpecification)] HRESULT RemoteGetSpecification([in] REFIID riid, [out, iid_is(riid)] IUnknown **ppSpecification, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/rstloc.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ local, object, uuid(0c733a7d-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IRowsetLocate : IRowset { typedef DWORD DBCOMPARE; enum DBCOMPAREENUM { DBCOMPARE_LT, DBCOMPARE_EQ, DBCOMPARE_GT, DBCOMPARE_NE, DBCOMPARE_NOTCOMPARABLE }; HRESULT Compare([in] HCHAPTER hReserved, [in] DBBKMARK cbBookmark1, [in, size_is(cbBookmark1)] const BYTE *pBookmark1, [in] DBBKMARK cbBookmark2, [in, size_is(cbBookmark2)] const BYTE *pBookmark2, [out] DBCOMPARE *pComparison); HRESULT GetRowsAt([in] HWATCHREGION hReserved1, [in] HCHAPTER hReserved2, [in] DBBKMARK cbBookmark, [in, size_is(cbBookmark)] const BYTE *pBookmark, [in] DBROWOFFSET lRowsOffset, [in] DBROWCOUNT cRows, [out] DBCOUNTITEM *pcRowsObtained, [out, size_is(,cRows)] HROW **prghRows); HRESULT GetRowsByBookmark([in] HCHAPTER hReserved, [in] DBCOUNTITEM cRows, [in, size_is(cRows)] const DBBKMARK rgcbBookmarks[], [in, size_is(cRows)] const BYTE *rgpBookmarks[], [out, size_is(cRows)] HROW rghRows[], [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]); HRESULT Hash([in] HCHAPTER hReserved, [in] DBBKMARK cBookmarks, [in, size_is(cBookmarks)] const DBBKMARK rgcbBookmarks[], [in, size_is(cBookmarks)] const BYTE *rgpBookmarks[], [out, size_is(cBookmarks)] DBHASHVALUE rgHashedValues[], [out, size_is(cBookmarks)] DBROWSTATUS rgBookmarkStatus[]); } ================================================ FILE: wine/windows/rstnot.idl ================================================ /* * Copyright (C) 2013 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a83-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface IRowsetNotify : IUnknown { [local] HRESULT OnFieldChange([in] IRowset *rowset, [in] HROW row, [in] DBORDINAL ccols, [in, size_is((ULONG)ccols)] DBORDINAL *columns, [in] DBREASON reason, [in] DBEVENTPHASE phase, [in] BOOL cantdeny); [call_as(OnFieldChange)] HRESULT RemoteOnFieldChange( [in] IRowset *rowset, [in] HROW row, [in] DBORDINAL ccols, [in, size_is((ULONG)ccols)] DBORDINAL *columns, [in] DBREASON reason, [in] DBEVENTPHASE phase, [in] BOOL cantdeny); [local] HRESULT OnRowChange([in] IRowset *rowset, [in] DBCOUNTITEM rows, [in, size_is((ULONG)rows)] HROW *hrows, [in] DBREASON reason, [in] DBEVENTPHASE phase, [in] BOOL cantdeny); [call_as(OnRowChange)] HRESULT RemoteOnRowChange( [in] IRowset *rowset, [in] DBCOUNTITEM rows, [in, size_is((ULONG)rows)] HROW *hrows, [in] DBREASON reason, [in] DBEVENTPHASE phase, [in] BOOL cantdeny); [local] HRESULT OnRowsetChange([in] IRowset *rowset, [in] DBREASON reason, [in] DBEVENTPHASE phase, [in] BOOL cantdeny); [call_as(OnRowsetChange)] HRESULT RemoteOnRowsetChange( [in] IRowset *rowset, [in] DBREASON reason, [in] DBEVENTPHASE phase, [in] BOOL cantdeny); } ================================================ FILE: wine/windows/rtutils.h ================================================ /* * Rtutils.h - Routing utilities / RRAS tracing * * Copyright (C) 2009 Alexander Scott-Johns * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _RTUTILS_H_ #define _RTUTILS_H_ #include #ifdef __cplusplus extern "C" { #endif DWORD WINAPI TraceRegisterExW(LPCWSTR name, DWORD flags); DWORD WINAPI TraceRegisterExA(LPCSTR name, DWORD flags); #define TraceRegisterEx WINELIB_NAME_AW(TraceRegisterEx) #define TraceRegisterW(name) TraceRegisterExW((name), 0) #define TraceRegisterA(name) TraceRegisterExA((name), 0) #define TraceRegister WINELIB_NAME_AW(TraceRegister) /* Flags for TraceRegisterEx(W|A) */ #define TRACE_USE_FILE 1 #define TRACE_USE_CONSOLE 2 /* Return value of TraceRegisterEx(W|A) */ #define INVALID_TRACEID 0xFFFFFFFF #ifdef __cplusplus } #endif #endif /* _RTUTILS_H_ */ ================================================ FILE: wine/windows/sal.h ================================================ /* * Copyright (C) 2018 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SAL_H__ #define __WINE_SAL_H__ #define _Check_return_ #define _Deref_out_ #define _Deref_out_opt_ #define _Deref_out_opt_z_ #define _Deref_post_opt_cap_(count) #define _Deref_post_opt_valid_ #define _In_ #define _In_bytecount_(count) #define _In_count_(count) #define _In_opt_ #define _In_opt_count_(count) #define _In_opt_z_ #define _In_reads_(count) #define _In_reads_bytes_(count) #define _In_reads_opt_z_(count) #define _In_reads_z_(count) #define _In_z_ #define _Inout_ #define _Inout_cap_(count) #define _Inout_opt_ #define _Inout_updates_z_(count) #define _Inout_z_ #define _Inout_z_bytecap_(count) #define _Inout_z_cap_(count) #define _Inout_z_cap_c_(count) #define _Null_terminated_ #define _Out_ #define _Out_bytecap_(count) #define _Out_bytecapcount_(count) #define _Out_bytecap_post_bytecount_(count1, count2) #define _Out_cap_(count) #define _Out_cap_post_count_(count1, count2) #define _Out_opt_ #define _Out_opt_z_cap_(count) #define _Out_opt_z_cap_post_count_(count1, count2) #define _Out_writes_(count) #define _Out_writes_bytes_to_(count1, count2) #define _Out_writes_opt_(count) #define _Out_writes_opt_z_(count) #define _Out_writes_to_(count1, count2) #define _Out_writes_z_(count) #define _Out_z_cap_(count) #define _Out_z_cap_c_(count) #define _Out_z_cap_post_count_(count1, count2) #define _Outptr_result_buffer_(count) #define _Outptr_result_maybenull_z_ #define _Post_invalid_ #define _Post_writable_byte_size_(count) #define _Post_z_ #define _Pre_maybenull_ #define _Pre_notnull_ #define _Pre_writable_size_(count) #define _Printf_format_string_ #define _Ret_maybenull_ #define _Ret_maybenull_z_ #define _Ret_opt_ #define _Ret_opt_z_cap_(count) #define _Ret_writes_bytes_maybenull_(count) #define _Ret_z_ #define _Success_(exp) #endif ================================================ FILE: wine/windows/sapi.idl ================================================ /* * Speech API (SAPI) IDL file. * * Copyright (C) 2017 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif typedef [hidden] enum SPDATAKEYLOCATION { SPDKL_DefaultLocation = 0, SPDKL_CurrentUser = 1, SPDKL_LocalMachine = 2, SPDKL_CurrentConfig = 5 } SPDATAKEYLOCATION; cpp_quote("#if defined(__GNUC__)") cpp_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 }") cpp_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 }") cpp_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 }") cpp_quote("#elif defined(_MSC_VER)") cpp_quote("#define SPCAT_AUDIOOUT L\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Speech\\\\AudioOutput\"") cpp_quote("#define SPCAT_AUDIOIN L\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Speech\\\\AudioInput\"") cpp_quote("#define SPCAT_VOICES L\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Speech\\\\Voices\"") cpp_quote("#else") cpp_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};") cpp_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};") cpp_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};") cpp_quote("#endif") interface IEnumSpObjectTokens; [ object, uuid(14056581-e16c-11d2-bb90-00c04f8ee6c0), helpstring("ISpDataKey"), pointer_default(unique), local, restricted ] interface ISpDataKey : IUnknown { HRESULT SetData([in] LPCWSTR pszValueName, [in] ULONG cbData, [in] const BYTE *pData); HRESULT GetData([in] LPCWSTR pszValueName, [in] ULONG *pcbData, [out] BYTE *pData); HRESULT SetStringValue([in] LPCWSTR pszValueName, [in] LPCWSTR pszValue); HRESULT GetStringValue([in] LPCWSTR pszValueName, [out] LPWSTR *ppszValue); HRESULT SetDWORD([in] LPCWSTR pszValueName, [in] DWORD dwValue); HRESULT GetDWORD([in] LPCWSTR pszValueName, [out] DWORD *pdwValue); HRESULT OpenKey([in] LPCWSTR pszSubKeyName, [out] ISpDataKey **ppSubKey); HRESULT CreateKey([in] LPCWSTR pszSubKey, [out] ISpDataKey **ppSubKey); HRESULT DeleteKey([in] LPCWSTR pszSubKey); HRESULT DeleteValue([in] LPCWSTR pszValueName); HRESULT EnumKeys([in] ULONG Index, [out] LPWSTR *ppszSubKeyName); HRESULT EnumValues([in] ULONG Index, [out] LPWSTR *ppszValueName); } [ object, uuid(92a66e2b-c830-4149-83df-6fc2ba1e7a5b), helpstring("ISpRegDataKey"), pointer_default(unique), restricted ] interface ISpRegDataKey : ISpDataKey { [local] HRESULT SetKey([in] HKEY hkey, [in] BOOL fReadOnly); } [ object, uuid(2d3d3845-39af-4850-bbf9-40b49780011d), helpstring("ISpObjectTokenCategory"), pointer_default(unique), local, restricted ] interface ISpObjectTokenCategory : ISpDataKey { HRESULT SetId([in] LPCWSTR pszCategoryId, [in] BOOL fCreateIfNotExist); HRESULT GetId([out] LPWSTR *ppszCoMemCategoryId); HRESULT GetDataKey([in] SPDATAKEYLOCATION spdkl, [out] ISpDataKey **ppDataKey); HRESULT EnumTokens([in, string] LPCWSTR pszReqAttribs, [in, string] LPCWSTR pszOptAttribs, [out] IEnumSpObjectTokens **ppEnum); HRESULT SetDefaultTokenId([in] LPCWSTR pszTokenId); HRESULT GetDefaultTokenId([out] LPWSTR *ppszCoMemTokenId); } [ object, uuid(14056589-e16c-11d2-bb90-00c04f8ee6c0), helpstring("ISpObjectToken"), pointer_default(unique), local, restricted ] interface ISpObjectToken : ISpDataKey { HRESULT SetId(/*[in]*/ LPCWSTR pszCategoryId, [in] LPCWSTR pszTokenId, [in] BOOL fCreateIfNotExist); HRESULT GetId([out] LPWSTR *ppszCoMemTokenId); HRESULT GetCategory([out] ISpObjectTokenCategory **ppTokenCategory); HRESULT CreateInstance([in] IUnknown *pUnkOuter, [in] DWORD dwClsContext, [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); HRESULT GetStorageFileName([in] REFCLSID clsidCaller, [in] LPCWSTR pszValueName, [in, string] LPCWSTR pszFileNameSpecifier, [in] ULONG nFolder, [out] LPWSTR *ppszFilePath); HRESULT RemoveStorageFileName([in] REFCLSID clsidCaller, [in] LPCWSTR pszKeyName, [in] BOOL fDeleteFile); HRESULT Remove(/*[in]*/ const CLSID *pclsidCaller); [local] HRESULT IsUISupported([in] LPCWSTR pszTypeOfUI, [in] void *pvExtraData, [in] ULONG cbExtraData, [in] IUnknown *punkObject, [out] BOOL *pfSupported); [local] HRESULT DisplayUI([in] HWND hwndParent, [in] LPCWSTR pszTitle, [in] LPCWSTR pszTypeOfUI, [in] void *pvExtraData, [in] ULONG cbExtraData, [in] IUnknown *punkObject); HRESULT MatchesAttributes([in] LPCWSTR pszAttributes, [out] BOOL *pfMatches); } [ object, uuid(06b64f9e-7fda-11d2-b4f2-00c04f797396), helpstring("IEnumSpObjectTokens"), pointer_default(unique), local, restricted ] interface IEnumSpObjectTokens : IUnknown { HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] ISpObjectToken **pelt, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(void); HRESULT Clone([out] IEnumSpObjectTokens **ppEnum); HRESULT Item([in] ULONG Index, [out] ISpObjectToken **ppToken); HRESULT GetCount([out] ULONG *pCount); } [ helpstring("Speech Object Library"), uuid(c866ca3a-32f7-11d2-9602-00c04f8ee628), version(5.4) ] library SpeechLib { importlib("stdole2.tlb"); [ uuid(a910187f-0c7a-45ac-92cc-59edafb77b53), helpstring("SpObjectTokenCategory Class"), progid("SAPI.SpObjectTokenCategory.1"), vi_progid("SAPI.SpObjectTokenCategory"), threading(both) ] coclass SpObjectTokenCategory { interface ISpObjectTokenCategory; } } ================================================ FILE: wine/windows/sapiddk.idl ================================================ /* * Speech API (SAPI) DDK IDL file. * * Copyright (C) 2017 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "sapi.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ object, uuid(06b64f9f-7fda-11d2-b4f2-00c04f797396), helpstring("ISpObjectTokenEnumBuilder"), pointer_default(unique), local, restricted ] interface ISpObjectTokenEnumBuilder : IEnumSpObjectTokens { HRESULT SetAttribs([in] LPCWSTR pszReqAttribs, [in] LPCWSTR pszOptAttribs); HRESULT AddTokens([in] ULONG cTokens, [in] ISpObjectToken **pToken); HRESULT AddTokensFromDataKey([in] ISpDataKey *pDataKey, [in] LPCWSTR pszSubKey, [in] LPCWSTR pszCategoryId); HRESULT AddTokensFromTokenEnum([in] IEnumSpObjectTokens *pTokenEnum); HRESULT Sort([in] LPCWSTR pszTokenIdToListFirst); } [ helpstring("Speech Object DDK Library"), uuid(9903f14c-12ce-4c99-9986-2ee3d7d588a8), version(5.4) ] library SpeechDDKLib { importlib("stdole2.tlb"); [ uuid(d9f6ee60-58c9-458b-88e1-2f908fd7f87c), helpstring("Data Key"), progid("SAPI.SpDataKey.1"), vi_progid("SAPI.SpDataKey"), threading(both) ] coclass SpDataKey { interface ISpRegDataKey; [default] interface ISpDataKey; } [ uuid(3918d75f-0acb-41f2-b733-92aa15bcecf6), helpstring("Object Token Enumerator"), progid("SAPI.SpObjectTokenEnum.1"), vi_progid("SAPI.SpObjectTokenEnum"), threading(both) ] coclass SpObjectTokenEnum { interface ISpObjectTokenEnumBuilder; [default] interface IEnumSpObjectTokens; } } ================================================ FILE: wine/windows/scarderr.h ================================================ /* * Winscard definitions * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* Note that if you included winerror.h directly or indirectly, * none of these definitions will be used! */ #ifndef SCARD_S_SUCCESS #define FACILITY_SYSTEM 0 #define FACILITY_SCARD 16 #define STATUS_SEVERITY_INFORMATIONAL ((NTSTATUS) 0x00000001) #define STATUS_SEVERITY_WARNING ((NTSTATUS) 0x00000002) #define STATUS_SEVERITY_ERROR ((NTSTATUS) 0x00000003) #define SCARD_S_SUCCESS NO_ERROR #define SCARD_F_INTERNAL_ERROR ((DWORD)0x80100001) #define SCARD_E_CANCELLED ((DWORD)0x80100002) #define SCARD_E_INVALID_HANDLE ((DWORD)0x80100003) #define SCARD_E_INVALID_PARAMETER ((DWORD)0x80100004) #define SCARD_E_INVALID_TARGET ((DWORD)0x80100005) #define SCARD_E_NO_MEMORY ((DWORD)0x80100006) #define SCARD_F_WAITED_TOO_LONG ((DWORD)0x80100007) #define SCARD_E_INSUFFICIENT_BUFFER ((DWORD)0x80100008) #define SCARD_E_UNKNOWN_READER ((DWORD)0x80100009) #define SCARD_E_TIMEOUT ((DWORD)0x8010000A) #define SCARD_E_SHARING_VIOLATION ((DWORD)0x8010000B) #define SCARD_E_NO_SMARTCARD ((DWORD)0x8010000C) #define SCARD_E_UNKNOWN_CARD ((DWORD)0x8010000D) #define SCARD_E_CANT_DISPOSE ((DWORD)0x8010000E) #define SCARD_E_PROTO_MISMATCH ((DWORD)0x8010000F) #define SCARD_E_NOT_READY ((DWORD)0x80100010) #define SCARD_E_INVALID_VALUE ((DWORD)0x80100011) #define SCARD_E_SYSTEM_CANCELLED ((DWORD)0x80100012) #define SCARD_F_COMM_ERROR ((DWORD)0x80100013) #define SCARD_F_UNKNOWN_ERROR ((DWORD)0x80100014) #define SCARD_E_INVALID_ATR ((DWORD)0x80100015) #define SCARD_E_NOT_TRANSACTED ((DWORD)0x80100016) #define SCARD_E_READER_UNAVAILABLE ((DWORD)0x80100017) #define SCARD_P_SHUTDOWN ((DWORD)0x80100018) #define SCARD_E_PCI_TOO_SMALL ((DWORD)0x80100019) #define SCARD_E_READER_UNSUPPORTED ((DWORD)0x8010001A) #define SCARD_E_DUPLICATE_READER ((DWORD)0x8010001B) #define SCARD_E_CARD_UNSUPPORTED ((DWORD)0x8010001C) #define SCARD_E_NO_SERVICE ((DWORD)0x8010001D) #define SCARD_E_SERVICE_STOPPED ((DWORD)0x8010001E) #define SCARD_E_UNEXPECTED ((DWORD)0x8010001F) #define SCARD_E_ICC_INSTALLATION ((DWORD)0x80100020) #define SCARD_E_ICC_CREATEORDER ((DWORD)0x80100021) #define SCARD_E_UNSUPPORTED_FEATURE ((DWORD)0x80100022) #define SCARD_E_DIR_NOT_FOUND ((DWORD)0x80100023) #define SCARD_E_FILE_NOT_FOUND ((DWORD)0x80100024) #define SCARD_E_NO_DIR ((DWORD)0x80100025) #define SCARD_E_NO_FILE ((DWORD)0x80100026) #define SCARD_E_NO_ACCESS ((DWORD)0x80100027) #define SCARD_E_WRITE_TOO_MANY ((DWORD)0x80100028) #define SCARD_E_BAD_SEEK ((DWORD)0x80100029) #define SCARD_E_INVALID_CHV ((DWORD)0x8010002A) #define SCARD_E_UNKNOWN_RES_MNG ((DWORD)0x8010002B) #define SCARD_E_NO_SUCH_CERTIFICATE ((DWORD)0x8010002C) #define SCARD_E_CERTIFICATE_UNAVAILABLE ((DWORD)0x8010002D) #define SCARD_E_NO_READERS_AVAILABLE ((DWORD)0x8010002E) #define SCARD_E_COMM_DATA_LOST ((DWORD)0x8010002F) #define SCARD_E_NO_KEY_CONTAINER ((DWORD)0x80100030) #define SCARD_E_SERVER_TOO_BUSY ((DWORD)0x80100031) #define SCARD_W_UNSUPPORTED_CARD ((DWORD)0x80100065) #define SCARD_W_UNRESPONSIVE_CARD ((DWORD)0x80100066) #define SCARD_W_UNPOWERED_CARD ((DWORD)0x80100067) #define SCARD_W_RESET_CARD ((DWORD)0x80100068) #define SCARD_W_REMOVED_CARD ((DWORD)0x80100069) #define SCARD_W_SECURITY_VIOLATION ((DWORD)0x8010006A) #define SCARD_W_WRONG_CHV ((DWORD)0x8010006B) #define SCARD_W_CHV_BLOCKED ((DWORD)0x8010006C) #define SCARD_W_EOF ((DWORD)0x8010006D) #define SCARD_W_CANCELLED_BY_USER ((DWORD)0x8010006E) #define SCARD_W_CARD_NOT_AUTHENTICATED ((DWORD)0x8010006F) #define SCARD_W_CACHE_ITEM_NOT_FOUND ((DWORD)0x80100070) #define SCARD_W_CACHE_ITEM_STALE ((DWORD)0x80100071) #define SCARD_W_CACHE_ITEM_TOO_BIG ((DWORD)0x80100072) #endif /* SCARD_S_SUCCESS */ ================================================ FILE: wine/windows/schannel.h ================================================ /* * Copyright (C) 2005 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SCHANNEL_H__ #define __WINE_SCHANNEL_H__ #include /* Package names */ #define UNISP_NAME_A "Microsoft Unified Security Protocol Provider" #if defined(__GNUC__) #define UNISP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\ ' ','U','n','i','f','i','e','d',' ','S','e','c','u','r','i','t','y',' ',\ 'P','r','o','t','o','c','o','l',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) #define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider" #else static const WCHAR UNISP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t', ' ','U','n','i','f','i','e','d',' ','S','e','c','u','r','i','t','y',' ', 'P','r','o','t','o','c','o','l',' ','P','r','o','v','i','d','e','r',0 }; #endif #define UNISP_NAME WINELIB_NAME_AW(UNISP_NAME_) #define SSL2SP_NAME_A "Microsoft SSL 2.0" #if defined(__GNUC__) #define SSL2SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\ ' ','S','S','L',' ','2','.','0',0 } #elif defined(_MSC_VER) #define SSL2SP_NAME_W L"Microsoft SSL 2.0" #else static const WCHAR SSL2SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t', ' ','S','S','L',' ','2','.','0',0 }; #endif #define SSL2SP_NAME WINELIB_NAME_AW(SSL2SP_NAME_) #define SSL3SP_NAME_A "Microsoft SSL 3.0" #if defined(__GNUC__) #define SSL3SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\ ' ','S','S','L',' ','3','.','0',0 } #elif defined(_MSC_VER) #define SSL3SP_NAME_W L"Microsoft SSL 3.0" #else static const WCHAR SSL3SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t', ' ','S','S','L',' ','3','.','0',0 }; #endif #define SSL3SP_NAME WINELIB_NAME_AW(SSL3SP_NAME_) #define TLS1SP_NAME_A "Microsoft TLS 1.0" #if defined(__GNUC__) #define TLS1SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\ ' ','T','L','S',' ','1','.','0',0 } #elif defined(_MSC_VER) #define TLS1SP_NAME_W L"Microsoft TLS 1.0" #else static const WCHAR TLS1SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t', ' ','T','L','S',' ','1','.','0',0 }; #endif #define TLS1SP_NAME WINELIB_NAME_AW(TLS1SP_NAME_) #define PCT1SP_NAME_A "Microsoft PCT 1.0" #if defined(__GNUC__) #define PCT1SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\ ' ','P','C','T',' ','1','.','0',0 } #elif defined(_MSC_VER) #define PCT1SP_NAME_W L"Microsoft PCT 1.0" #else static const WCHAR PCT1SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t', ' ','P','C','T',' ','1','.','0',0 }; #endif #define PCT1SP_NAME WINELIB_NAME_AW(PCT1SP_NAME_) #define SCHANNEL_NAME_A "Schannel" #if defined(__GNUC__) #define SCHANNEL_NAME_W (const WCHAR []){ 'S','c','h','a','n','n','e','l',0 } #elif defined(_MSC_VER) #define SCHANNEL_NAME_W L"Schannel" #else static const WCHAR SCHANNEL_NAME_W[] = { 'S','c','h','a','n','n','e','l',0 }; #endif #define SCHANNEL_NAME WINELIB_NAME_AW(SCHANNEL_NAME_) #define SCH_CRED_V1 1 #define SCH_CRED_V2 2 #define SCH_CRED_VERSION 2 #define SCH_CRED_V3 3 #define SCHANNEL_CRED_VERSION 4 #define SCHANNEL_RENEGOTIATE 0 #define SCHANNEL_SHUTDOWN 1 #define SCHANNEL_ALERT 2 #define SCHANNEL_SESSION 3 #define SP_PROT_ALL 0xffffffff #define SP_PROT_UNI_CLIENT 0x80000000 #define SP_PROT_UNI_SERVER 0x40000000 #define SP_PROT_TLS1_2_CLIENT 0x00000800 #define SP_PROT_TLS1_2_SERVER 0x00000400 #define SP_PROT_TLS1_1_CLIENT 0x00000200 #define SP_PROT_TLS1_1_SERVER 0x00000100 #define SP_PROT_TLS1_0_CLIENT SP_PROT_TLS1_CLIENT #define SP_PROT_TLS1_0_SERVER SP_PROT_TLS1_SERVER #define SP_PROT_TLS1_CLIENT 0x00000080 #define SP_PROT_TLS1_SERVER 0x00000040 #define SP_PROT_SSL3_CLIENT 0x00000020 #define SP_PROT_SSL3_SERVER 0x00000010 #define SP_PROT_SSL2_CLIENT 0x00000008 #define SP_PROT_SSL2_SERVER 0x00000004 #define SP_PROT_PCT1_CLIENT 0x00000002 #define SP_PROT_PCT1_SERVER 0x00000001 #define SP_PROT_NONE 0x00000000 #define SP_PROT_UNI (SP_PROT_UNI_CLIENT | SP_PROT_UNI_SERVER) #define SP_PROT_TLS1_2 (SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_2_SERVER) #define SP_PROT_TLS1_1 (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_1_SERVER) #define SP_PROT_TLS1_0 (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_0_SERVER) #define SP_PROT_TLS1 (SP_PROT_TLS1_CLIENT | SP_PROT_TLS1_SERVER) #define SP_PROT_SSL3 (SP_PROT_SSL3_CLIENT | SP_PROT_SSL3_SERVER) #define SP_PROT_SSL2 (SP_PROT_SSL2_CLIENT | SP_PROT_SSL2_SERVER) #define SP_PROT_PCT1 (SP_PROT_PCT1_CLIENT | SP_PROT_PCT1_SERVER) #define SP_PROT_SSL3TLS1_CLIENTS (SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_CLIENT) #define SP_PROT_SSL3TLS1_SERVERS (SP_PROT_SSL3_SERVER | SP_PROT_TLS1_SERVER) #define SP_PROT_SSL3TLS1_X_CLIENTS (SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_X_CLIENT) #define SP_PROT_SSL3TLS1_X_SERVERS (SP_PROT_SSL3_SERVER | SP_PROT_TLS1_X_SERVER) #define SP_PROT_TLS1_X_CLIENT (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT) #define SP_PROT_TLS1_X_SERVER (SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER) #define SP_PROT_TLS1_1PLUS_CLIENT (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT) #define SP_PROT_TLS1_1PLUS_SERVER (SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER) #define SP_PROT_CLIENTS (SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT | SP_PROT_SSL3_CLIENT \ | SP_PROT_TLS1_CLIENT | SP_PROT_UNI_CLIENT) #define SP_PROT_SERVERS (SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER | SP_PROT_SSL3_SERVER \ | SP_PROT_TLS1_SERVER | SP_PROT_UNI_SERVER) #define SP_PROT_X_CLIENTS (SP_PROT_CLIENTS | SP_PROT_TLS1_X_CLIENT) #define SP_PROT_X_SERVERS (SP_PROT_SERVERS | SP_PROT_TLS1_X_SERVER) #define SP_PROT_SSL3TLS1 (SP_PROT_SSL3 | SP_PROT_TLS1) #define SP_PROT_SSL3TLS1_X (SP_PROT_SSL3 | SP_PROT_TLS1_X) #define SP_PROT_TLS1_X (SP_PROT_TLS1_X_CLIENT | SP_PROT_TLS1_X_SERVER) #define SP_PROT_TLS1_1PLUS (SP_PROT_TLS1_1PLUS_CLIENT | SP_PROT_TLS1_1PLUS_SERVER) #define SCH_CRED_NO_SYSTEM_MAPPER 2 #define SCH_CRED_NO_SERVERNAME_CHECK 4 #define SCH_CRED_MANUAL_CRED_VALIDATION 8 #define SCH_CRED_NO_DEFAULT_CREDS 16 #define SCH_CRED_AUTO_CRED_VALIDATION 32 #define SCH_CRED_USE_DEFAULT_CREDS 64 #define SCH_CRED_REVOCATION_CHECK_CHAIN_END_CERT 256 #define SCH_CRED_REVOCATION_CHECK_CHAIN 512 #define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 1024 #define SCH_CRED_IGNORE_NO_REVOCATION_CHECK 2048 #define SCH_CRED_IGNORE_REVOCATION_OFFLINE 4096 #define SECPKG_ATTR_ISSUER_LIST 0x50 #define SECPKG_ATTR_REMOTE_CRED 0x51 #define SECPKG_ATTR_LOCAL_CRED 0x52 #define SECPKG_ATTR_REMOTE_CERT_CONTEXT 0x53 #define SECPKG_ATTR_LOCAL_CERT_CONTEXT 0x54 #define SECPKG_ATTR_ROOT_STORE 0x55 #define SECPKG_ATTR_SUPPORTED_ALGS 0x56 #define SECPKG_ATTR_CIPHER_STRENGTHS 0x57 #define SECPKG_ATTR_SUPPORTED_PROTOCOLS 0x58 #define SECPKG_ATTR_ISSUER_LIST_EX 0x59 #define SECPKG_ATTR_CONNECTION_INFO 0x5a #define SECPKG_ATTR_EAP_KEY_BLOCK 0x5b #define SECPKG_ATTR_MAPPED_CRED_ATTR 0x5c #define SECPKG_ATTR_SESSION_INFO 0x5d #define SECPKG_ATTR_APP_DATA 0x5e #define UNISP_RPC_ID 14 struct _HMAPPER; typedef struct _SCHANNEL_CRED { DWORD dwVersion; DWORD cCreds; PCCERT_CONTEXT *paCred; HCERTSTORE hRootStore; DWORD cMappers; struct _HMAPPER **aphMappers; DWORD cSupportedAlgs; ALG_ID *palgSupportedAlgs; DWORD grbitEnabledProtocols; DWORD dwMinimumCipherStrength; DWORD dwMaximumCipherStrength; DWORD dwSessionLifespan; DWORD dwFlags; DWORD dwCredFormat; } SCHANNEL_CRED, *PSCHANNEL_CRED; typedef struct _SecPkgCred_SupportedAlgs { DWORD cSupportedAlgs; ALG_ID *palgSupportedAlgs; } SecPkgCred_SupportedAlgs, *PSecPkgCred_SupportedAlgs; typedef struct _SecPkgCred_CipherStrengths { DWORD dwMinimumCipherStrength; DWORD dwMaximumCipherStrength; } SecPkgCred_CipherStrengths, *PSecPkgCred_CipherStrengths; typedef struct _SecPkgCred_SupportedProtocols { DWORD grbitProtocol; } SecPkgCred_SupportedProtocols, *PSecPkgCred_SupportedProtocols; typedef struct _SecPkgContext_IssuerListInfoEx { PCERT_NAME_BLOB aIssuers; DWORD cIssuers; } SecPkgContext_IssuerListInfoEx, *PSecPkgContext_IssuerListInfoEx; typedef struct _SecPkgContext_ConnectionInfo { DWORD dwProtocol; ALG_ID aiCipher; DWORD dwCipherStrength; ALG_ID aiHash; DWORD dwHashStrength; ALG_ID aiExch; DWORD dwExchStrength; } SecPkgContext_ConnectionInfo, *PSecPkgContext_ConnectionInfo; #endif /* __WINE_SCHANNEL_H__ */ ================================================ FILE: wine/windows/schemadef.h ================================================ /* * Copyright (C) 2003 Kevin Koltzau * Copyright (C) 2004 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SCHEMADEF_H #define __WINE_SCHEMADEF_H #define BEGIN_TM_SCHEMA(name) #define END_TM_SCHEMA(name) #define BEGIN_TM_ENUM(name) enum name { #define TM_ENUM(value, prefix, name) prefix##_##name = (value), #define END_TM_ENUM() }; #define BEGIN_TM_PROPS() enum PropValues { \ DummyProp = 49, #define TM_PROP(value, prefix, name, type) prefix##_##name = (value), #define END_TM_PROPS() }; #define BEGIN_TM_CLASS_PARTS(name) enum name##PARTS { \ name##PartFiller0, #define TM_PART(value, prefix, name) prefix##_##name = (value), #define END_TM_CLASS_PARTS() }; #define BEGIN_TM_PART_STATES(name) enum name##STATES { \ name##StateFiller0, #define TM_STATE(value, prefix, name) prefix##_##name = (value), #define END_TM_PART_STATES() }; #endif ================================================ FILE: wine/windows/schnlsp.h ================================================ /* * Copyright (C) 2005 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SHNLSP_H__ #define __WINE_SHNLSP_H__ #include #endif /* __WINE_SHNLSP_H__ */ ================================================ FILE: wine/windows/sddl.h ================================================ /* * Copyright (C) 2003 Ulrich Czekalla for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __SDDL_H__ #define __SDDL_H__ #ifdef __cplusplus extern "C" { #endif /* Versioning */ #define SDDL_REVISION_1 1 #define SDDL_REVISION SDDL_REVISION_1 #ifndef WINE_NO_UNICODE_MACROS /* Component tags */ #ifndef UNICODE # define SDDL_OWNER "O" # define SDDL_GROUP "G" # define SDDL_DACL "D" # define SDDL_SACL "S" #else # if defined(__GNUC__) # define SDDL_OWNER (const WCHAR[]){ 'O',0 } # define SDDL_GROUP (const WCHAR[]){ 'G',0 } # define SDDL_DACL (const WCHAR[]){ 'D',0 } # define SDDL_SACL (const WCHAR[]){ 'S',0 } # elif defined(_MSC_VER) # define SDDL_OWNER L"O" # define SDDL_GROUP L"G" # define SDDL_DACL L"D" # define SDDL_SACL L"S" # else static const WCHAR SDDL_OWNER[] = { 'O',0 }; static const WCHAR SDDL_GROUP[] = { 'G',0 }; static const WCHAR SDDL_DACL[] = { 'D',0 }; static const WCHAR SDDL_SACL[] = { 'S',0 }; # endif #endif /* UNICODE */ /* Separators as characters */ /* SDDL_SEPERATORC is not a typo, as per Microsoft's headers */ #ifndef UNICODE # define SDDL_SEPERATORC ';' # define SDDL_DELIMINATORC ':' # define SDDL_ACE_BEGINC '(' # define SDDL_ACE_ENDC ')' #else # define SDDL_SEPERATORC ((WCHAR)';') # define SDDL_DELIMINATORC ((WCHAR)':') # define SDDL_ACE_BEGINC ((WCHAR)'(') # define SDDL_ACE_ENDC ((WCHAR)')') #endif /* UNICODE */ /* Separators as strings */ /* SDDL_SEPERATOR is not a typo, as per Microsoft's headers */ #ifndef UNICODE # define SDDL_SEPERATOR ";" # define SDDL_DELIMINATOR ":" # define SDDL_ACE_BEGIN "(" # define SDDL_ACE_END ")" #else # if defined(__GNUC__) # define SDDL_SEPERATOR (const WCHAR[]){ ';',0 } # define SDDL_DELIMINATOR (const WCHAR[]){ ':',0 } # define SDDL_ACE_BEGIN (const WCHAR[]){ '(',0 } # define SDDL_ACE_END (const WCHAR[]){ ')',0 } # elif defined(_MSC_VER) # define SDDL_SEPERATOR L";" # define SDDL_DELIMINATOR L":" # define SDDL_ACE_BEGIN L"(" # define SDDL_ACE_END L")" # else static const WCHAR SDDL_SEPERATOR[] = { ';',0 }; static const WCHAR SDDL_DELIMINATOR[] = { ':',0 }; static const WCHAR SDDL_ACE_BEGIN[] = { '(',0 }; static const WCHAR SDDL_ACE_END[] = { ')',0 }; # endif #endif /* UNICODE */ #endif /* WINE_NO_UNICODE_MACROS */ BOOL WINAPI ConvertSidToStringSidA( PSID, LPSTR* ); BOOL WINAPI ConvertSidToStringSidW( PSID, LPWSTR* ); #define ConvertSidToStringSid WINELIB_NAME_AW(ConvertSidToStringSid) BOOL WINAPI ConvertStringSidToSidA( LPCSTR, PSID* ); BOOL WINAPI ConvertStringSidToSidW( LPCWSTR, PSID* ); #define ConvertStringSidToSid WINELIB_NAME_AW(ConvertStringSidToSid) BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorA( LPCSTR, DWORD, PSECURITY_DESCRIPTOR*, PULONG ); BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorW( LPCWSTR, DWORD, PSECURITY_DESCRIPTOR*, PULONG ); #define ConvertStringSecurityDescriptorToSecurityDescriptor WINELIB_NAME_AW(ConvertStringSecurityDescriptorToSecurityDescriptor) BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorA( PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPSTR*, PULONG ); BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorW( PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPWSTR*, PULONG ); #define ConvertSecurityDescriptorToStringSecurityDescriptor WINELIB_NAME_AW(ConvertSecurityDescriptorToStringSecurityDescriptor) #ifdef __cplusplus } #endif #endif /* __SDDL_H__ */ ================================================ FILE: wine/windows/secext.h ================================================ /* * Copyright (C) 2004 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __SECEXT_H__ #define __SECEXT_H__ #ifdef __cplusplus extern "C" { #endif typedef enum { NameUnknown = 0, NameFullyQualifiedDN = 1, NameSamCompatible = 2, NameDisplay = 3, NameUniqueId = 6, NameCanonical = 7, NameUserPrincipal = 8, NameCanonicalEx = 9, NameServicePrincipal = 10, NameDnsDomain = 12, NameGivenName = 13, NameSurname = 14, } EXTENDED_NAME_FORMAT, *PEXTENDED_NAME_FORMAT; BOOLEAN WINAPI GetComputerObjectNameA( EXTENDED_NAME_FORMAT, LPSTR, PULONG ); BOOLEAN WINAPI GetComputerObjectNameW( EXTENDED_NAME_FORMAT, LPWSTR, PULONG ); #define GetComputerObjectName WINELIB_NAME_AW(GetComputerObjectName) BOOLEAN WINAPI GetUserNameExA( EXTENDED_NAME_FORMAT, LPSTR, PULONG ); BOOLEAN WINAPI GetUserNameExW( EXTENDED_NAME_FORMAT, LPWSTR, PULONG ); #define GetUserNameEx WINELIB_NAME_AW(GetUserNameEx) BOOLEAN WINAPI TranslateNameA( LPCSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPSTR, PULONG); BOOLEAN WINAPI TranslateNameW( LPCWSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPWSTR, PULONG); #define TranslateName WINELIB_NAME_AW(TranslateName) #ifdef __cplusplus } #endif #endif /* __SECEXT_H__ */ ================================================ FILE: wine/windows/security.h ================================================ /* * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _SECURITY_H #define _SECURITY_H #include #if defined(SECURITY_WIN32) || defined(SECURITY_KERNEL) #include #endif #endif /* _SECURITY_H */ ================================================ FILE: wine/windows/sensapi.h ================================================ /* * Copyright (C) 2005 Steven Edwards * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __SENSAPI_H__ #define __SENSAPI_H__ #ifdef __cplusplus extern "C" { #endif #define NETWORK_ALIVE_LAN 1 #define NETWORK_ALIVE_WAN 2 #define NETWORK_ALIVE_AOL 4 typedef struct tagQOCINFO { DWORD dwSize; DWORD dwFlags; DWORD dwInSpeed; DWORD dwOutSpeed; } QOCINFO, *LPQOCINFO; BOOL WINAPI IsDestinationReachableA(LPCSTR lpszDestination, LPQOCINFO lpQOCInfo); BOOL WINAPI IsDestinationReachableW(LPCWSTR lpszDestination, LPQOCINFO lpQOCInfo); #define IsDestinationReachable WINELIB_NAME_AW(IsDestinationReachable) BOOL WINAPI IsNetworkAlive(LPDWORD lpdwFlags); #ifdef __cplusplus } #endif #endif /* __SENSAPI_H__ */ ================================================ FILE: wine/windows/sensevts.idl ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; import "oaidl.idl"; [ version(2.0), uuid(d597deed-5b9f-11d1-8dd2-00aa004abd5e) ] library SensEvents { importlib("stdole2.tlb"); typedef struct SENS_QOCINFO { DWORD dwSize; DWORD dwFlags; DWORD dwOutSpeed; DWORD dwInSpeed; } SENS_QOCINFO, *LPSENS_QOCINFO; [ object, uuid(d597bab1-5b9f-11d1-8dd2-00aa004abd5e), pointer_default(unique) ] interface ISensNetwork : IDispatch { HRESULT ConnectionMade( [in] BSTR bstrConnection, [in] ULONG ulType, [in] LPSENS_QOCINFO lpQOCInfo ); HRESULT ConnectionMadeNoQOCInfo( [in] BSTR bstrConnection, [in] ULONG ulType ); HRESULT ConnectionLost( [in] BSTR bstrConnection, [in] ULONG ulType ); HRESULT DestinationReachable( [in] BSTR bstrDestination, [in] BSTR bstrConnection, [in] ULONG ulType, [in] LPSENS_QOCINFO lpQOCInfo ); HRESULT DestinationReachableNoQOCInfo( [in] BSTR bstrDestination, [in] BSTR bstrConnection, [in] ULONG ulType ); } [ object, uuid(d597bab2-5b9f-11d1-8dd2-00aa004abd5e), pointer_default(unique) ] interface ISensOnNow : IDispatch { HRESULT OnAcPower( void ); HRESULT OnBatteryPower( [in] DWORD dwBatteryLifePercent ); HRESULT BatteryLow( [in] DWORD dwBatteryLifePercent ); } [ object, uuid(d597bab3-5b9f-11d1-8dd2-00aa004abd5e), pointer_default(unique) ] interface ISensLogon : IDispatch { HRESULT Logon( [in] BSTR bstrUserName ); HRESULT Logoff( [in] BSTR bstrUserName ); HRESULT StartShell( [in] BSTR bstrUserName ); HRESULT DisplayLock( [in] BSTR bstrUserName ); HRESULT DisplayUnlock( [in] BSTR bstrUserName ); HRESULT StartScreenSaver( [in] BSTR bstrUserName ); HRESULT StopScreenSaver( [in] BSTR bstrUserName ); } [ object, uuid(d597bab4-5b9f-11d1-8dd2-00aa004abd5e), pointer_default(unique) ] interface ISensLogon2 : IDispatch { HRESULT Logon( [in] BSTR bstrUserName, [in] DWORD dwSessionId ); HRESULT Logoff( [in] BSTR bstrUserName, [in] DWORD dwSessionId ); HRESULT SessionDisconnect( [in] BSTR bstrUserName, [in] DWORD dwSessionId ); HRESULT SessionReconnect( [in] BSTR bstrUserName, [in] DWORD dwSessionId ); HRESULT PostShell( [in] BSTR bstrUserName, [in] DWORD dwSessionId ); } } /* library SensEvents */ ================================================ FILE: wine/windows/servprov.idl ================================================ /* * Copyright (C) 1999 Francois Gouget * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; /***************************************************************************** * IServiceProvider interface */ [ object, uuid(6d5140c1-7436-11ce-8034-00aa006009fa), pointer_default(unique) ] interface IServiceProvider : IUnknown { typedef [unique] IServiceProvider *LPSERVICEPROVIDER; [local] HRESULT QueryService( [in] REFGUID guidService, [in] REFIID riid, [out] void ** ppvObject); [call_as(QueryService)] HRESULT RemoteQueryService( [in] REFGUID guidService, [in] REFIID riid, [out, iid_is(riid)] IUnknown ** ppvObject); } ================================================ FILE: wine/windows/sesprp.idl ================================================ /* * Copyright (C) 2009 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a85-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ISessionProperties : IUnknown { [local] HRESULT GetProperties([in] ULONG cPropertyIDSets, [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[], [in, out] ULONG *pcPropertySets, [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets); [call_as(GetProperties)] HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets, [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets, [in, out] ULONG *pcPropertySets, [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets, [out] IErrorInfo **ppErrorInfoRem); [local] HRESULT SetProperties([in] ULONG cPropertySets, [in, out, unique, size_is(cPropertySets)] DBPROPSET rgPropertySets[]); [call_as(SetProperties)] HRESULT RemoteSetProperties([in] ULONG cPropertySets, [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets, [in] ULONG cTotalProps, [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/setupapi.h ================================================ /* * Copyright (C) 2000 James Hatheway * Copyright (C) 2007 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _INC_SETUPAPI #define _INC_SETUPAPI #include #include #ifdef _WIN64 #include #else #include #endif /* setupapi doesn't use the normal convention, it adds an underscore before A/W */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_SETUPAPI_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_SETUPAPI_TYPE_AW(type) typedef WINELIB_NAME_AW(type##_) type; #endif #ifdef __cplusplus extern "C" { #endif /* Define type for handle to a loaded inf file */ typedef PVOID HINF; /* Define type for handle to a device information set */ typedef PVOID HDEVINFO; /* Define type for handle to a setup log file */ typedef PVOID HSPFILELOG; /* Define type for setup file queue */ typedef PVOID HSPFILEQ; typedef PVOID HDSKSPC; /* inf structure. */ typedef struct _INFCONTEXT { PVOID Inf; PVOID CurrentInf; UINT Section; UINT Line; } INFCONTEXT, *PINFCONTEXT; typedef struct _SP_ALTPLATFORM_INFO_V2 { DWORD cbSize; DWORD Platform; DWORD MajorVersion; DWORD MinorVersion; WORD ProcessorArchitecture; union { WORD Reserved; WORD Flags; } DUMMYUNIONNAME; DWORD FirstValidatedMajorVersion; DWORD FirstValidatedMinorVersion; } SP_ALTPLATFORM_INFO_V2, *PSP_ALTPLATFORM_INFO_V2; #define SP_ALTPLATFORM_FLAGS_VERSION_RANGE 0x0001 typedef struct _SP_ALTPLATFORM_INFO_V1 { DWORD cbSize; DWORD Platform; DWORD MajorVersion; DWORD MinorVersion; WORD ProcessorArchitecture; WORD Reserved; } SP_ALTPLATFORM_INFO_V1, *PSP_ALTPLATFORM_INFO_V1; typedef SP_ALTPLATFORM_INFO_V2 SP_ALTPLATFORM_INFO; typedef PSP_ALTPLATFORM_INFO_V2 PSP_ALTPLATFORM_INFO; typedef struct _SP_FILE_COPY_PARAMS_A { DWORD cbSize; HSPFILEQ QueueHandle; PCSTR SourceRootPath; PCSTR SourcePath; PCSTR SourceFilename; PCSTR SourceDescription; PCSTR SourceTagfile; PCSTR TargetDirectory; PCSTR TargetFilename; DWORD CopyStyle; HINF LayoutInf; PCSTR SecurityDescriptor; } SP_FILE_COPY_PARAMS_A, *PSP_FILE_COPY_PARAMS_A; typedef struct _SP_FILE_COPY_PARAMS_W { DWORD cbSize; HSPFILEQ QueueHandle; PCWSTR SourceRootPath; PCWSTR SourcePath; PCWSTR SourceFilename; PCWSTR SourceDescription; PCWSTR SourceTagfile; PCWSTR TargetDirectory; PCWSTR TargetFilename; DWORD CopyStyle; HINF LayoutInf; PCWSTR SecurityDescriptor; } SP_FILE_COPY_PARAMS_W, *PSP_FILE_COPY_PARAMS_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_FILE_COPY_PARAMS) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_FILE_COPY_PARAMS) typedef struct _SP_REGISTER_CONTROL_STATUSA { DWORD cbSize; PCSTR FileName; DWORD Win32Error; DWORD FailureCode; } SP_REGISTER_CONTROL_STATUSA, *PSP_REGISTER_CONTROL_STATUSA; typedef struct _SP_REGISTER_CONTROL_STATUSW { DWORD cbSize; PCWSTR FileName; DWORD Win32Error; DWORD FailureCode; } SP_REGISTER_CONTROL_STATUSW, *PSP_REGISTER_CONTROL_STATUSW; DECL_WINELIB_TYPE_AW(SP_REGISTER_CONTROL_STATUS) DECL_WINELIB_TYPE_AW(PSP_REGISTER_CONTROL_STATUS) #define SPREG_SUCCESS 0x00000000 #define SPREG_LOADLIBRARY 0x00000001 #define SPREG_GETPROCADDR 0x00000002 #define SPREG_REGSVR 0x00000003 #define SPREG_DLLINSTALL 0x00000004 #define SPREG_TIMEOUT 0x00000005 #define SPREG_UNKNOWN 0xffffffff typedef UINT (CALLBACK *PSP_FILE_CALLBACK_A)( PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2 ); typedef UINT (CALLBACK *PSP_FILE_CALLBACK_W)( PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2 ); DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_FILE_CALLBACK) #define LINE_LEN 256 #define MAX_INF_STRING_LENGTH 4096 #define MAX_TITLE_LEN 60 #define MAX_INSTRUCTION_LEN 256 #define MAX_LABEL_LEN 30 #define MAX_SERVICE_NAME_LEN 256 #define MAX_SUBTITLE_LEN 256 #define SP_MAX_MACHINENAME_LENGTH (MAX_PATH + 3) typedef UINT DI_FUNCTION; typedef struct _SP_CLASSINSTALL_HEADER { DWORD cbSize; DI_FUNCTION InstallFunction; } SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER; typedef struct _SP_ENABLECLASS_PARAMS { SP_CLASSINSTALL_HEADER ClassInstallHeader; GUID ClassGuid; DWORD EnableMessage; } SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS; /* SP_ENABLECLASS_PARAMS EnableMessage values */ #define ENABLECLASS_QUERY 0 #define ENABLECLASS_SUCCESS 1 #define ENABLECLASS_FAILURE 2 typedef struct _SP_PROPCHANGE_PARAMS { SP_CLASSINSTALL_HEADER ClassInstallHeader; DWORD StateChange; DWORD Scope; DWORD HwProfile; } SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS; /* SP_PROPCHANGE_PARAMS StateChange values */ #define DICS_ENABLE 0x00000001 #define DICS_DISABLE 0x00000002 #define DICS_PROPCHANGE 0x00000003 #define DICS_START 0x00000004 #define DICS_STOP 0x00000005 /* SP_PROPCHANGE_PARAMS Scope values */ #define DICS_FLAG_GLOBAL 0x00000001 #define DICS_FLAG_CONFIGSPECIFIC 0x00000002 #define DICS_FLAG_CONFIGGENERAL 0x00000004 typedef struct _SP_DEVINSTALL_PARAMS_A { DWORD cbSize; DWORD Flags; DWORD FlagsEx; HWND hwndParent; PSP_FILE_CALLBACK_A InstallMsgHandler; PVOID InstallMsgHandlerContext; HSPFILEQ FileQueue; ULONG_PTR ClassInstallReserved; DWORD Reserved; CHAR DriverPath[MAX_PATH]; } SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A; typedef struct _SP_DEVINSTALL_PARAMS_W { DWORD cbSize; DWORD Flags; DWORD FlagsEx; HWND hwndParent; PSP_FILE_CALLBACK_W InstallMsgHandler; PVOID InstallMsgHandlerContext; HSPFILEQ FileQueue; ULONG_PTR ClassInstallReserved; DWORD Reserved; WCHAR DriverPath[MAX_PATH]; } SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVINSTALL_PARAMS) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVINSTALL_PARAMS) /* SP_DEVINSTALL_PARAMS Flags values */ #define DI_SHOWOEM 0x00000001 #define DI_SHOWCOMPAT 0x00000002 #define DI_SHOWCLASS 0x00000004 #define DI_SHOWALL 0x00000007 #define DI_NOVCP 0x00000008 #define DI_DIDCOMPAT 0x00000010 #define DI_DIDCLASS 0x00000020 #define DI_AUTOASSIGNRES 0x00000040 #define DI_NEEDRESTART 0x00000080 #define DI_NEEDREBOOT 0x00000100 #define DI_NOBROWSE 0x00000200 #define DI_MULTMFGS 0x00000400 #define DI_DISABLED 0x00000800 #define DI_GENERALPAGE_ADDED 0x00001000 #define DI_RESOURCEPAGE_ADDED 0x00002000 #define DI_PROPERTIES_CHANGE 0x00004000 #define DI_INF_IS_SORTED 0x00080000 #define DI_ENUMSINGLEINF 0x00010000 #define DI_DONOTCALLCONFIGMG 0x00020000 #define DI_INSTALLDISABLED 0x00040000 #define DI_COMPAT_FROM_CLASS 0x00080000 #define DI_CLASSINSTALLPARAMS 0x00100000 #define DI_NODI_DEFAULTACTION 0x00200000 #define DI_QUIETINSTALL 0x00800000 #define DI_NOFILECOPY 0x01000000 #define DI_FORCECOPY 0x02000000 #define DI_DRIVERPAGE_ADDED 0x04000000 #define DI_USECI_SELECTSTRINGS 0x08000000 #define DI_OVERRIDE_INFFLAGS 0x10000000 #define DI_PROPS_NOCHANGEUSAGE 0x20000000 #define DI_NOSELECTICONS 0x40000000 #define DI_NOWRITE_IDS 0x80000000 /* SP_DEVINSTALL_PARAMS FlagsEx values */ #define DI_FLAGSEX_USEOLDINFSEARCH 0x00000001 #define DI_FLAGSEX_RESERVED2 0x00000002 #define DI_FLAGSEX_CI_FAILED 0x00000004 #define DI_FLAGSEX_FINISHINSTALL_ACTION 0x00000008 #define DI_FLAGSEX_DIDINFOLIST 0x00000010 #define DI_FLAGSEX_DIDCOMPATINFO 0x00000020 #define DI_FLAGSEX_FILTERCLASSES 0x00000040 #define DI_FLAGSEX_SETFAILEDINSTALL 0x00000080 #define DI_FLAGSEX_DEVICECHANGE 0x00000100 #define DI_FLAGSEX_ALWAYSWRITEIDS 0x00000200 #define DI_FLAGSEX_PROPCHANGE_PENDING 0x00000400 #define DI_FLAGSEX_ALLOWEXCLUDEDDRVS 0x00000800 #define DI_FLAGSEX_NOUIONQUERYREMOVE 0x00001000 #define DI_FLAGSEX_USECLASSFORCOMPAT 0x00002000 #define DI_FLAGSEX_RESERVED3 0x00004000 #define DI_FLAGSEX_NO_DRVREG_MODIFY 0x00008000 #define DI_FLAGSEX_IN_SYSTEM_SETUP 0x00010000 #define DI_FLAGSEX_INET_DRIVER 0x00020000 #define DI_FLAGSEX_APPENDDRIVERLIST 0x00040000 #define DI_FLAGSEX_PREINSTALLBACKUP 0x00080000 #define DI_FLAGSEX_BACKUPONREPLACE 0x00100000 #define DI_FLAGSEX_DRIVERLIST_FROM_URL 0x00200000 #define DI_FLAGSEX_RESERVED1 0x00400000 #define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS 0x00800000 #define DI_FLAGSEX_POWERPAGE_ADDED 0x01000000 #define DI_FLAGSEX_FILTERSIMILARDRIVERS 0x02000000 #define DI_FLAGSEX_INSTALLEDDRIVER 0x04000000 #define DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE 0x08000000 #define DI_FLAGSEX_ALTPLATFORM_DRVSEARCH 0x10000000 #define DI_FLAGSEX_RESTART_DEVICE_ONLY 0x20000000 #define DI_FLAGSEX_RECURSIVESEARCH 0x40000000 #define DI_FLAGSEX_SEARCH_PUBLISHED_INFS 0x80000000 typedef struct _SP_REMOVEDEVICE_PARAMS { SP_CLASSINSTALL_HEADER ClassInstallHeader; DWORD Scope; DWORD HwProfile; } SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS; /* SP_REMOVEDEVICE_PARAMS Scope values */ #define DI_REMOVEDEVICE_GLOBAL 0x00000001 #define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002 typedef struct _SP_UNREMOVEDEVICE_PARAMS { SP_CLASSINSTALL_HEADER ClassInstallHeader; DWORD Scope; DWORD HwProfile; } SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS; /* SP_UNREMOVEDEVICE_PARAMS Scope values */ #define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002 typedef struct _SP_SELECTDEVICE_PARAMS_A { SP_CLASSINSTALL_HEADER ClassInstallHeader; CHAR Title[MAX_TITLE_LEN]; CHAR Instructions[MAX_INSTRUCTION_LEN]; CHAR ListLabel[MAX_LABEL_LEN]; CHAR SubTitle[MAX_SUBTITLE_LEN]; BYTE Reserved[2]; } SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A; typedef struct _SP_SELECTDEVICE_PARAMS_W { SP_CLASSINSTALL_HEADER ClassInstallHeader; WCHAR Title[MAX_TITLE_LEN]; WCHAR Instructions[MAX_INSTRUCTION_LEN]; WCHAR ListLabel[MAX_LABEL_LEN]; WCHAR SubTitle[MAX_SUBTITLE_LEN]; } SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W; typedef BOOL (CALLBACK *PDETECT_PROGRESS_NOTIFY)(PVOID ProgressNotifyParam, DWORD DetectComplete); typedef struct _SP_DETECTDEVICE_PARAMS { SP_CLASSINSTALL_HEADER ClassInstallHeader; PDETECT_PROGRESS_NOTIFY DetectProgressNotify; PVOID ProgressNotifyParam; } SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS; #define MAX_INSTALLWIZARD_DYNAPAGES 20 typedef struct _SP_INSTALLWIZARD_DATA { SP_CLASSINSTALL_HEADER ClassInstallHeader; DWORD Flags; HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES]; DWORD NumDynamicPages; DWORD DynamicPageFlags; DWORD PrivateFlags; LPARAM PrivateData; HWND hwndWizardDlg; } SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA; /* SP_INSTALLWIZARD_DATA Flags values */ #define NDW_INSTALLFLAG_DIDFACTDEFS 0x00000001 #define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002 #define NDW_INSTALLFLAG_NEEDRESTART DI_NEEDRESTART #define NDW_INSTALLFLAG_NEEDREBOOT DI_NEEDREBOOT #define NDW_INSTALLFLAG_NEEDSHUTDOWN 0x00000200 #define NDW_INSTALLFLAG_EXPRESSINTRO 0x00000400 #define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800 #define NDW_INSTALLFLAG_NODETECTEDDEVS 0x00001000 #define NDW_INSTALLFLAG_INSTALLSPECIFIC 0x00002000 #define NDW_INSTALLFLAG_SKIPCLASSLIST 0x00004000 #define NDW_INSTALLFLAG_CI_PICKED_OEM 0x00008000 #define NDW_INSTALLFLAG_PCMCIAMODE 0x00010000 #define NDW_INSTALLFLAG_PCMCIADEVICE 0x00020000 #define NDW_INSTALLFLAG_USERCANCEL 0x00040000 #define NDW_INSTALLFLAG_KNOWNCLASS 0x00080000 /* SP_INSTALLWIZARD_DATA DynamicPageFlags values */ #define DYNAWIZ_FLAG_PAGESADDED 0x00000001 #define DYNAWIZ_FLAG_INSTALLDET_NEXT 0x00000002 #define DYNAWIZ_FLAG_INSTALLDET_PREV 0x00000004 #define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008 /* Resource IDs */ #define MIN_IDD_DYNAWIZ_RESOURCE_ID 10000 #define MAX_IDD_DYNAWIZ_RESOURCE_ID 11000 #define IDD_DYNAWIZ_FIRSTPAGE 10000 #define IDD_DYNAWIZ_SELECT_PREVPAGE 10001 #define IDD_DYNAWIZ_SELECT_NEXTPAGE 10002 #define IDD_DYNAWIZ_ANALYZE_PREVPAGE 10003 #define IDD_DYNAWIZ_ANALYZE_NEXTPAGE 10004 #define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006 #define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007 #define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS 10008 #define IDD_DYNAWIZ_SELECTDEV_PAGE 10009 #define IDD_DYNAWIZ_ANALYZEDEV_PAGE 10010 #define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011 #define IDD_DYNAWIZ_SELECTCLASS_PAGE 10012 #define IDI_RESOURCEFIRST 159 #define IDI_RESOURCE IDI_RESOURCEFIRST #define IDI_RESOURCELAST 161 #define IDI_RESOURCEOVERLAYFIRST 161 #define IDI_RESOURCEOVERLAYLAST 161 #define IDI_CLASSICON_OVERLAYFIRST 500 #define IDI_CLASSICON_OVERLAYLAST 502 #define IDI_PROBLEM_OVL 500 #define IDI_DISABLED_OVL 501 #define IDI_FORCED_OVL 502 typedef struct _SP_NEWDEVICEWIZARD_DATA { SP_CLASSINSTALL_HEADER ClassInstallHeader; DWORD Flags; HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES]; DWORD NumDynamicPages; HWND hwndWizardDlg; } SP_NEWDEVICEWIZARD_DATA, *PSP_NEWDEVICEWIZARD_DATA; typedef SP_NEWDEVICEWIZARD_DATA SP_ADDPROPERTYPAGE_DATA; typedef PSP_NEWDEVICEWIZARD_DATA PSP_ADDPROPERTYPAGE_DATA; typedef struct _SP_TROUBLESHOOTER_PARAMS_A { SP_CLASSINSTALL_HEADER ClassInstallHeader; CHAR ChmFile[MAX_PATH]; CHAR HtmlTroubleShooter[MAX_PATH]; } SP_TROUBLESHOOTER_PARAMS_A, *PSP_TROUBLESHOOTER_PARAMS_A; typedef struct _SP_TROUBLESHOOTER_PARAMS_W { SP_CLASSINSTALL_HEADER ClassInstallHeader; WCHAR ChmFile[MAX_PATH]; WCHAR HtmlTroubleShooter[MAX_PATH]; } SP_TROUBLESHOOTER_PARAMS_W, *PSP_TROUBLESHOOTER_PARAMS_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_TROUBLESHOOTER_PARAMS) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_TROUBLESHOOTER_PARAMS) typedef struct _SP_POWERMESSAGEWAKE_PARAMS_A { SP_CLASSINSTALL_HEADER ClassInstallHeader; CHAR PowerMessageWake[LINE_LEN * 2]; } SP_POWERMESSAGEWAKE_PARAMS_A, *PSP_POWERMESSAGEWAKE_PARAMS_A; typedef struct _SP_POWERMESSAGEWAKE_PARAMS_W { SP_CLASSINSTALL_HEADER ClassInstallHeader; WCHAR PowerMessageWake[LINE_LEN * 2]; } SP_POWERMESSAGEWAKE_PARAMS_W, *PSP_POWERMESSAGEWAKE_PARAMS_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_POWERMESSAGEWAKE_PARAMS) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_POWERMESSAGEWAKE_PARAMS) typedef struct _SP_DRVINFO_DATA_V1_A { DWORD cbSize; DWORD DriverType; ULONG_PTR Reserved; CHAR Description[LINE_LEN]; CHAR MfgName[LINE_LEN]; CHAR ProviderName[LINE_LEN]; } SP_DRVINFO_DATA_V1_A, *PSP_DRVINFO_DATA_V1_A; typedef struct _SP_DRVINFO_DATA_V1_W { DWORD cbSize; DWORD DriverType; ULONG_PTR Reserved; WCHAR Description[LINE_LEN]; WCHAR MfgName[LINE_LEN]; WCHAR ProviderName[LINE_LEN]; } SP_DRVINFO_DATA_V1_W, *PSP_DRVINFO_DATA_V1_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA_V1) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA_V1) typedef struct _SP_DRVINFO_DATA_V2_A { DWORD cbSize; DWORD DriverType; ULONG_PTR Reserved; CHAR Description[LINE_LEN]; CHAR MfgName[LINE_LEN]; CHAR ProviderName[LINE_LEN]; FILETIME DriverDate; DWORDLONG DriverVersion; } SP_DRVINFO_DATA_V2_A, *PSP_DRVINFO_DATA_V2_A; typedef struct _SP_DRVINFO_DATA_V2_W { DWORD cbSize; DWORD DriverType; ULONG_PTR Reserved; WCHAR Description[LINE_LEN]; WCHAR MfgName[LINE_LEN]; WCHAR ProviderName[LINE_LEN]; FILETIME DriverDate; DWORDLONG DriverVersion; } SP_DRVINFO_DATA_V2_W, *PSP_DRVINFO_DATA_V2_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA_V2) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA_V2) typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A; typedef PSP_DRVINFO_DATA_V2_A PSP_DRVINFO_DATA_A; typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W; typedef PSP_DRVINFO_DATA_V2_W PSP_DRVINFO_DATA_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA) typedef struct _SP_DRVINFO_DETAIL_DATA_A { DWORD cbSize; FILETIME InfDate; DWORD CompatIDsOffset; DWORD CompatIDsLength; ULONG_PTR Reserved; CHAR SectionName[LINE_LEN]; CHAR InfFileName[MAX_PATH]; CHAR DrvDescription[LINE_LEN]; CHAR HardwareID[ANYSIZE_ARRAY]; } SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A; typedef struct _SP_DRVINFO_DETAIL_DATA_W { DWORD cbSize; FILETIME InfDate; DWORD CompatIDsOffset; DWORD CompatIDsLength; ULONG_PTR Reserved; WCHAR SectionName[LINE_LEN]; WCHAR InfFileName[MAX_PATH]; WCHAR DrvDescription[LINE_LEN]; WCHAR HardwareID[ANYSIZE_ARRAY]; } SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DETAIL_DATA) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DETAIL_DATA) typedef struct _SP_DRVINSTALL_PARAMS { DWORD cbSize; DWORD Rank; DWORD Flags; DWORD_PTR PrivateData; DWORD Reserved; } SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS; /* SP_DRVINSTALL_PARAMS Flags values */ #define DNF_DUPDESC 0x00000001 #define DNF_OLDDRIVER 0x00000002 #define DNF_EXCLUDEFROMLIST 0x00000004 #define DNF_NODRIVER 0x00000008 #define DNF_LEGACYINF 0x00000010 #define DNF_CLASS_DRIVER 0x00000020 #define DNF_COMPATIBLE_DRIVER 0x00000040 #define DNF_INET_DRIVER 0x00000080 #define DNF_UNUSED1 0x00000100 #define DNF_INDEXED_DRIVER 0x00000200 #define DNF_OLD_INET_DRIVER 0x00000400 #define DNF_BAD_DRIVER 0x00000800 #define DNF_DUPPROVIDER 0x00001000 #define DNF_INF_IS_SIGNED 0x00002000 #define DNF_OEM_F6_INF 0x00004000 #define DNF_DUPDRIVERVER 0x00008000 #define DNF_BASIC_DRIVER 0x00010000 #define DNF_AUTHENTICODE_SIGNED 0x00020000 #define DNF_INSTALLEDDRIVER 0x00040000 #define DNF_ALWAYSEXCLUDEFROMLIST 0x00080000 /* SP_DRVINSTALL_PARAMS Rank values */ #define DRIVER_HARDWAREID_RANK 0x00000fff #define DRIVER_COMPATID_RANK 0x00003fff #define DRIVER_UNTRUSTED_RANK 0x00008000 #define DRIVER_UNTRUSTED_HARDWAREID_RANK 0x00008fff #define DRIVER_UNTRUSTED_COMPATID_RANK 0x0000bfff #define DRIVER_W9X_SUSPECT_RANK 0x0000c000 #define DRIVER_W9X_SUSPECT_HARDWAREID_RANK 0x0000cfff /* Device Information structure (references a device instance that is a member of a device information set) */ typedef struct _SP_DEVINFO_DATA { DWORD cbSize; GUID ClassGuid; DWORD DevInst; /* DEVINST handle */ ULONG_PTR Reserved; } SP_DEVINFO_DATA, *PSP_DEVINFO_DATA; typedef struct _SP_DEVICE_INTERFACE_DATA { DWORD cbSize; GUID InterfaceClassGuid; DWORD Flags; ULONG_PTR Reserved; } SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA; #define SPINT_ACTIVE 0x00000001 #define SPINT_DEFAULT 0x00000002 #define SPINT_REMOVED 0x00000004 typedef SP_DEVICE_INTERFACE_DATA SP_INTERFACE_DEVICE_DATA; typedef PSP_DEVICE_INTERFACE_DATA PSP_INTERFACE_DEVICE_DATA; #define SPID_ACTIVE SPINT_ACTIVE #define SPID_DEFAULT SPINT_DEFAULT #define SPID_REMOVED SPINT_REMOVED typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A { DWORD cbSize; CHAR DevicePath[ANYSIZE_ARRAY]; } SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A; typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W { DWORD cbSize; WCHAR DevicePath[ANYSIZE_ARRAY]; } SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVICE_INTERFACE_DETAIL_DATA) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVICE_INTERFACE_DETAIL_DATA) typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A { DWORD cbSize; GUID ClassGuid; HANDLE RemoteMachineHandle; CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]; } SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A; typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W { DWORD cbSize; GUID ClassGuid; HANDLE RemoteMachineHandle; WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]; } SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVINFO_LIST_DETAIL_DATA) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVINFO_LIST_DETAIL_DATA) typedef DWORD (CALLBACK *PSP_DETSIG_CMPPROC)(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINFO_DATA, PVOID); typedef struct _COINSTALLER_CONTEXT_DATA { BOOL PostProcessing; DWORD InstallResult; PVOID PrivateData; } COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA; typedef struct _SP_CLASSIMAGELIST_DATA { DWORD cbSize; HIMAGELIST ImageList; ULONG_PTR Reserved; } SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA; typedef struct _SP_PROPSHEETPAGE_REQUEST { DWORD cbSize; DWORD PageRequested; HDEVINFO DeviceInfoSet; PSP_DEVINFO_DATA DeviceInfoData; } SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST; /* SP_PROPSHEETPAGE_REQUEST PageRequested values */ #define SPPSR_SELECT_DEVICE_RESOURCES 1 #define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2 #define SPPSR_ENUM_ADV_DEVICE_PROPERTIES 3 typedef struct _SP_BACKUP_QUEUE_PARAMS_V1_A { DWORD cbSize; CHAR FullInfPath[MAX_PATH]; INT FilenameOffset; } SP_BACKUP_QUEUE_PARAMS_V1_A, *PSP_BACKUP_QUEUE_PARAMS_V1_A; typedef struct _SP_BACKUP_QUEUE_PARAMS_V1_W { DWORD cbSize; WCHAR FullInfPath[MAX_PATH]; INT FilenameOffset; } SP_BACKUP_QUEUE_PARAMS_V1_W, *PSP_BACKUP_QUEUE_PARAMS_V1_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS_V1) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS_V1) typedef struct _SP_BACKUP_QUEUE_PARAMS_V2_A { DWORD cbSize; CHAR FullInfPath[MAX_PATH]; INT FilenameOffset; CHAR ReinstallInstance[MAX_PATH]; } SP_BACKUP_QUEUE_PARAMS_V2_A, *PSP_BACKUP_QUEUE_PARAMS_V2_A; typedef struct _SP_BACKUP_QUEUE_PARAMS_V2_W { DWORD cbSize; WCHAR FullInfPath[MAX_PATH]; INT FilenameOffset; WCHAR ReinstallInstance[MAX_PATH]; } SP_BACKUP_QUEUE_PARAMS_V2_W, *PSP_BACKUP_QUEUE_PARAMS_V2_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS_V2) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS_V2) typedef SP_BACKUP_QUEUE_PARAMS_V2_A SP_BACKUP_QUEUE_PARAMS_A; typedef PSP_BACKUP_QUEUE_PARAMS_V2_A PSP_BACKUP_QUEUE_PARAMS_A; typedef SP_BACKUP_QUEUE_PARAMS_V2_W SP_BACKUP_QUEUE_PARAMS_W; typedef PSP_BACKUP_QUEUE_PARAMS_V2_W PSP_BACKUP_QUEUE_PARAMS_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS) typedef struct _FILE_IN_CABINET_INFO_A { LPCSTR NameInCabinet; DWORD FileSize; DWORD Win32Error; WORD DosDate; WORD DosTime; WORD DosAttribs; CHAR FullTargetName[MAX_PATH]; } FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A; typedef struct _FILE_IN_CABINET_INFO_W { LPCWSTR NameInCabinet; DWORD FileSize; DWORD Win32Error; WORD DosDate; WORD DosTime; WORD DosAttribs; WCHAR FullTargetName[MAX_PATH]; } FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W; DECL_WINELIB_SETUPAPI_TYPE_AW(FILE_IN_CABINET_INFO) DECL_WINELIB_SETUPAPI_TYPE_AW(PFILE_IN_CABINET_INFO) typedef struct _CABINET_INFO_A { PCSTR CabinetPath; PCSTR CabinetFile; PCSTR DiskName; USHORT SetId; USHORT CabinetNumber; } CABINET_INFO_A, *PCABINET_INFO_A; typedef struct _CABINET_INFO_W { PCWSTR CabinetPath; PCWSTR CabinetFile; PCWSTR DiskName; USHORT SetId; USHORT CabinetNumber; } CABINET_INFO_W, *PCABINET_INFO_W; DECL_WINELIB_SETUPAPI_TYPE_AW(CABINET_INFO) DECL_WINELIB_SETUPAPI_TYPE_AW(PCABINET_INFO) typedef struct _SP_INF_INFORMATION { DWORD InfStyle; DWORD InfCount; BYTE VersionData[ANYSIZE_ARRAY]; } SP_INF_INFORMATION, *PSP_INF_INFORMATION; #define INF_STYLE_NONE 0x00 #define INF_STYLE_OLDNT 0x01 #define INF_STYLE_WIN4 0x02 #define INF_STYLE_CACHE_ENABLE 0x10 #define INF_STYLE_CACHE_DISABLE 0x20 #define FILEOP_COPY 0 #define FILEOP_RENAME 1 #define FILEOP_DELETE 2 #define FILEOP_BACKUP 3 #define FILEOP_ABORT 0 #define FILEOP_DOIT 1 #define FILEOP_SKIP 2 #define FILEOP_RETRY FILEOP_DOIT #define FILEOP_NEWPATH 4 #define COPYFLG_WARN_IF_SKIP 0x00000001 #define COPYFLG_NOSKIP 0x00000002 #define COPYFLG_NOVERSIONCHECK 0x00000004 #define COPYFLG_FORCE_FILE_IN_USE 0x00000008 #define COPYFLG_NO_OVERWRITE 0x00000010 #define COPYFLG_NO_VERSION_DIALOG 0x00000020 #define COPYFLG_OVERWRITE_OLDER_ONLY 0x00000040 #define COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE 0x00000100 #define COPYFLG_REPLACEONLY 0x00000400 #define COPYFLG_NODECOMP 0x00000800 #define COPYFLG_REPLACE_BOOT_FILE 0x00001000 #define COPYFLG_NOPRUNE 0x00002000 #define COPYFLG_IN_USE_TRY_RENAME 0x00004000 #define DELFLG_IN_USE 0x00000001 #define DELFLG_IN_USE1 0x00010000 typedef struct _FILEPATHS_A { PCSTR Target; PCSTR Source; UINT Win32Error; DWORD Flags; } FILEPATHS_A, *PFILEPATHS_A; typedef struct _FILEPATHS_W { PCWSTR Target; PCWSTR Source; UINT Win32Error; DWORD Flags; } FILEPATHS_W, *PFILEPATHS_W; DECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS) DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS) typedef struct _FILEPATHS_SIGNERINFO_A { PCSTR Target; PCSTR Source; UINT Win32Error; DWORD Flags; PCSTR DigitalSigner; PCSTR Version; PCSTR CatalogFile; } FILEPATHS_SIGNERINFO_A, *PFILEPATHS_SIGNERINFO_A; typedef struct _FILEPATHS_SIGNERINFO_W { PCWSTR Target; PCWSTR Source; UINT Win32Error; DWORD Flags; PCWSTR DigitalSigner; PCWSTR Version; PCWSTR CatalogFile; } FILEPATHS_SIGNERINFO_W, *PFILEPATHS_SIGNERINFO_W; DECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS_SIGNERINFO) typedef struct _SOURCE_MEDIA_A { PCSTR Reserved; PCSTR Tagfile; PCSTR Description; PCSTR SourcePath; PCSTR SourceFile; DWORD Flags; } SOURCE_MEDIA_A, *PSOURCE_MEDIA_A; typedef struct _SOURCE_MEDIA_W { PCWSTR Reserved; PCWSTR Tagfile; PCWSTR Description; PCWSTR SourcePath; PCWSTR SourceFile; DWORD Flags; } SOURCE_MEDIA_W, *PSOURCE_MEDIA_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SOURCE_MEDIA) typedef struct _SP_ORIGINAL_FILE_INFO_A { DWORD cbSize; CHAR OriginalInfName[MAX_PATH]; CHAR OriginalCatalogName[MAX_PATH]; } SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A; typedef struct _SP_ORIGINAL_FILE_INFO_W { DWORD cbSize; WCHAR OriginalInfName[MAX_PATH]; WCHAR OriginalCatalogName[MAX_PATH]; } SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_ORIGINAL_FILE_INFO) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_ORIGINAL_FILE_INFO) typedef struct _SP_INF_SIGNER_INFO_A { DWORD cbSize; CHAR CatalogFile[MAX_PATH]; CHAR DigitalSigner[MAX_PATH]; CHAR DigitalSignerVersion[MAX_PATH]; } SP_INF_SIGNER_INFO_A, *PSP_INF_SIGNER_INFO_A; typedef struct _SP_INF_SIGNER_INFO_W { DWORD cbSize; WCHAR CatalogFile[MAX_PATH]; WCHAR DigitalSigner[MAX_PATH]; WCHAR DigitalSignerVersion[MAX_PATH]; } SP_INF_SIGNER_INFO_W, *PSP_INF_SIGNER_INFO_W; DECL_WINELIB_SETUPAPI_TYPE_AW(SP_INF_SIGNER_INFO) DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_INF_SIGNER_INFO) #define SPFILENOTIFY_STARTQUEUE 0x0001 #define SPFILENOTIFY_ENDQUEUE 0x0002 #define SPFILENOTIFY_STARTSUBQUEUE 0x0003 #define SPFILENOTIFY_ENDSUBQUEUE 0x0004 #define SPFILENOTIFY_STARTDELETE 0x0005 #define SPFILENOTIFY_ENDDELETE 0x0006 #define SPFILENOTIFY_DELETEERROR 0x0007 #define SPFILENOTIFY_STARTRENAME 0x0008 #define SPFILENOTIFY_ENDRENAME 0x0009 #define SPFILENOTIFY_RENAMEERROR 0x000a #define SPFILENOTIFY_STARTCOPY 0x000b #define SPFILENOTIFY_ENDCOPY 0x000c #define SPFILENOTIFY_COPYERROR 0x000d #define SPFILENOTIFY_NEEDMEDIA 0x000e #define SPFILENOTIFY_QUEUESCAN 0x000f #define SPFILENOTIFY_CABINETINFO 0x0010 #define SPFILENOTIFY_FILEINCABINET 0x0011 #define SPFILENOTIFY_NEEDNEWCABINET 0x0012 #define SPFILENOTIFY_FILEEXTRACTED 0x0013 #define SPFILENOTIFY_FILEOPDELAYED 0x0014 #define SPFILENOTIFY_STARTBACKUP 0x0015 #define SPFILENOTIFY_BACKUPERROR 0x0016 #define SPFILENOTIFY_ENDBACKUP 0x0017 #define SPFILENOTIFY_QUEUESCAN_EX 0x0018 #define SPFILENOTIFY_STARTREGISTRATION 0x0019 #define SPFILENOTIFY_ENDREGISTRATION 0x0020 #define SPFILENOTIFY_QUEUESCAN_SIGNERINFO 0x0040 #define SPFILENOTIFY_LANGMISMATCH 0x00010000 #define SPFILENOTIFY_TARGETEXISTS 0x00020000 #define SPFILENOTIFY_TARGETNEWER 0x00040000 #define SPINST_LOGCONFIG 0x00000001 #define SPINST_INIFILES 0x00000002 #define SPINST_REGISTRY 0x00000004 #define SPINST_INI2REG 0x00000008 #define SPINST_FILES 0x00000010 #define SPINST_BITREG 0x00000020 #define SPINST_REGSVR 0x00000040 #define SPINST_UNREGSVR 0x00000080 #define SPINST_PROFILEITEMS 0x00000100 #define SPINST_COPYINF 0x00000200 #define SPINST_ALL 0x000003ff #define SPINST_SINGLESECTION 0x00010000 #define SPINST_LOGCONFIG_IS_FORCED 0x00020000 #define SPINST_LOGCONFIGS_ARE_OVERRIDES 0x00040000 #define SPINST_REGISTERCALLBACKAWARE 0x00080000 #define SPSVCINST_TAGTOFRONT 0x00000001 #define SPSVCINST_ASSOCSERVICE 0x00000002 #define SPSVCINST_DELETEEVENTLOGENTRY 0x00000004 #define SPSVCINST_NOCLOBBER_DISPLAYNAME 0x00000008 #define SPSVCINST_NOCLOBBER_STARTTYPE 0x00000010 #define SPSVCINST_NOCLOBBER_ERRORCONTROL 0x00000020 #define SPSVCINST_NOCLOBBER_LOADORDERGROUP 0x00000040 #define SPSVCINST_NOCLOBBER_DEPENDENCIES 0x00000080 #define SPSVCINST_NOCLOBBER_DESCRIPTION 0x00000100 #define SPSVCINST_STOPSERVICE 0x00000200 #define SPSVCINST_CLOBBER_SECURITY 0x00000400 #define SPSVCINST_STARTSERVICE 0x00000800 #define SP_COPY_DELETESOURCE 0x00000001 #define SP_COPY_REPLACEONLY 0x00000002 #define SP_COPY_NEWER 0x00000004 #define SP_COPY_NEWER_OR_SAME SP_COPY_NEWER #define SP_COPY_NOOVERWRITE 0x00000008 #define SP_COPY_NODECOMP 0x00000010 #define SP_COPY_LANGUAGEAWARE 0x00000020 #define SP_COPY_SOURCE_ABSOLUTE 0x00000040 #define SP_COPY_SOURCEPATH_ABSOLUTE 0x00000080 #define SP_COPY_IN_USE_NEEDS_REBOOT 0x00000100 #define SP_COPY_FORCE_IN_USE 0x00000200 #define SP_COPY_NOSKIP 0x00000400 #define SP_FLAG_CABINETCONTINUATION 0x00000800 #define SP_COPY_FORCE_NOOVERWRITE 0x00001000 #define SP_COPY_FORCE_NEWER 0x00002000 #define SP_COPY_WARNIFSKIP 0x00004000 #define SP_COPY_NOBROWSE 0x00008000 #define SP_COPY_NEWER_ONLY 0x00010000 #define SP_COPY_SOURCE_SIS_MASTER 0x00020000 #define SP_COPY_OEMINF_CATALOG_ONLY 0x00040000 #define SP_COPY_REPLACE_BOOT_FILE 0x00080000 #define SP_COPY_NOPRUNE 0x00100000 #define SP_COPY_OEM_F6_INF 0x00200000 #define SP_BACKUP_BACKUPPASS 0x00000001 #define SP_BACKUP_DEMANDPASS 0x00000002 #define SP_BACKUP_SPECIAL 0x00000004 #define SP_BACKUP_BOOTFILE 0x00000008 #define SPOST_NONE 0 #define SPOST_PATH 1 #define SPOST_URL 2 #define SPOST_MAX 3 #define SPQ_SCAN_FILE_PRESENCE 0x00000001 #define SPQ_SCAN_FILE_VALIDITY 0x00000002 #define SPQ_SCAN_USE_CALLBACK 0x00000004 #define SPQ_SCAN_USE_CALLBACKEX 0x00000008 #define SPQ_SCAN_INFORM_USER 0x00000010 #define SPQ_SCAN_PRUNE_COPY_QUEUE 0x00000020 #define SPQ_SCAN_USE_CALLBACK_SIGNERINFO 0x00000040 #define SPQ_SCAN_PRUNE_DELREN 0x00000080 #define SPQ_DELAYED_COPY 0x00000001 #define SPQ_FLAG_BACKUP_AWARE 0x00000001 #define SPQ_FLAG_ABORT_IF_UNSIGNED 0x00000002 #define SPQ_FLAG_FILES_MODIFIED 0x00000004 #define SPQ_FLAG_VALID 0x00000007 #define FLG_ADDREG_DELREG_BIT 0x00008000 #define FLG_ADDREG_BINVALUETYPE 0x00000001 #define FLG_ADDREG_NOCLOBBER 0x00000002 #define FLG_ADDREG_DELVAL 0x00000004 #define FLG_ADDREG_APPEND 0x00000008 #define FLG_ADDREG_KEYONLY 0x00000010 #define FLG_ADDREG_OVERWRITEONLY 0x00000020 #define FLG_ADDREG_64BITKEY 0x00001000 #define FLG_ADDREG_KEYONLY_COMMON 0x00002000 #define FLG_ADDREG_32BITKEY 0x00004000 #define FLG_ADDREG_TYPE_SZ 0x00000000 #define FLG_ADDREG_TYPE_MULTI_SZ 0x00010000 #define FLG_ADDREG_TYPE_EXPAND_SZ 0x00020000 #define FLG_ADDREG_TYPE_BINARY (0x00000000 | FLG_ADDREG_BINVALUETYPE) #define FLG_ADDREG_TYPE_DWORD (0x00010000 | FLG_ADDREG_BINVALUETYPE) #define FLG_ADDREG_TYPE_NONE (0x00020000 | FLG_ADDREG_BINVALUETYPE) #define FLG_ADDREG_TYPE_MASK (0xFFFF0000 | FLG_ADDREG_BINVALUETYPE) #define FLG_DELREG_VALUE (0x00000000) #define FLG_DELREG_TYPE_MASK FLG_ADDREG_TYPE_MASK #define FLG_DELREG_TYPE_SZ FLG_ADDREG_TYPE_SZ #define FLG_DELREG_TYPE_MULTI_SZ FLG_ADDREG_TYPE_MULTI_SZ #define FLG_DELREG_TYPE_EXPAND_SZ FLG_ADDREG_TYPE_EXPAND_SZ #define FLG_DELREG_TYPE_BINARY FLG_ADDREG_TYPE_BINARY #define FLG_DELREG_TYPE_DWORD FLG_ADDREG_TYPE_DWORD #define FLG_DELREG_TYPE_NONE FLG_ADDREG_TYPE_NONE #define FLG_DELREG_64BITKEY FLG_ADDREG_64BITKEY #define FLG_DELREG_KEYONLY_COMMON FLG_ADDREG_KEYONLY_COMMON #define FLG_DELREG_32BITKEY FLG_ADDREG_32BITKEY #define FLG_DELREG_OPERATION_MASK (0x000000FE) #define FLG_DELREG_MULTI_SZ_DELSTRING (FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT | 0x00000002) #define FLG_REGSVR_DLLREGISTER 0x00000001 #define FLG_REGSVR_DLLINSTALL 0x00000002 #define FLG_PROFITEM_CURRENTUSER 0x00000001 #define FLG_PROFITEM_DELETE 0x00000002 #define FLG_PROFITEM_GROUP 0x00000004 #define FLG_PROFITEM_CSIDL 0x00000008 #define DI_NOVCP 0x00000008 /* Class installer function codes */ #define DIF_SELECTDEVICE 0x01 #define DIF_INSTALLDEVICE 0x02 #define DIF_ASSIGNRESOURCES 0x03 #define DIF_PROPERTIES 0x04 #define DIF_REMOVE 0x05 #define DIF_FIRSTTIMESETUP 0x06 #define DIF_FOUNDDEVICE 0x07 #define DIF_SELECTCLASSDRIVERS 0x08 #define DIF_VALIDATECLASSDRIVERS 0x09 #define DIF_INSTALLCLASSDRIVERS 0x0a #define DIF_CALCDISKSPACE 0x0b #define DIF_DESTROYPRIVATEDATA 0x0c #define DIF_VALIDATEDRIVER 0x0d #define DIF_MOVEDEVICE 0x0e #define DIF_DETECT 0x0f #define DIF_INSTALLWIZARD 0x10 #define DIF_DESTROYWIZARDDATA 0x11 #define DIF_PROPERTYCHANGE 0x12 #define DIF_ENABLECLASS 0x13 #define DIF_DETECTVERIFY 0x14 #define DIF_INSTALLDEVICEFILES 0x15 #define DIF_UNREMOVE 0x16 #define DIF_SELECTBESTCOMPATDRV 0x17 #define DIF_ALLOW_INSTALL 0x18 #define DIF_REGISTERDEVICE 0x19 #define DIF_NEWDEVICEWIZARD_PRESELECT 0x1a #define DIF_NEWDEVICEWIZARD_SELECT 0x1b #define DIF_NEWDEVICEWIZARD_PREANALYZE 0x1c #define DIF_NEWDEVICEWIZARD_POSTANALYZE 0x1d #define DIF_NEWDEVICEWIZARD_FINISHINSTALL 0x1e #define DIF_UNUSED1 0x1f #define DIF_INSTALLINTERFACES 0x20 #define DIF_DETECTCANCEL 0x21 #define DIF_REGISTER_COINSTALLERS 0x22 #define DIF_ADDPROPERTYPAGE_ADVANCED 0x23 #define DIF_ADDPROPERTYPAGE_BASIC 0x24 #define DIF_RESERVED1 0x25 #define DIF_TROUBLESHOOTER 0x26 #define DIF_POWERMESSAGEWAKE 0x27 #define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED 0x28 #define DIF_UPDATEDRIVER_UI 0x29 #define DIF_RESERVED2 0x30 /* Directory ids */ #define DIRID_ABSOLUTE (-1) #define DIRID_ABSOLUTE_16BIT 0xffff #define DIRID_NULL 0 #define DIRID_SRCPATH 1 #define DIRID_WINDOWS 10 #define DIRID_SYSTEM 11 #define DIRID_DRIVERS 12 #define DIRID_IOSUBSYS DIRID_DRIVERS #define DIRID_INF 17 #define DIRID_HELP 18 #define DIRID_FONTS 20 #define DIRID_VIEWERS 21 #define DIRID_COLOR 23 #define DIRID_APPS 24 #define DIRID_SHARED 25 #define DIRID_BOOT 30 #define DIRID_SYSTEM16 50 #define DIRID_SPOOL 51 #define DIRID_SPOOLDRIVERS 52 #define DIRID_USERPROFILE 53 #define DIRID_LOADER 54 #define DIRID_PRINTPROCESSOR 55 #define DIRID_DEFAULT DIRID_SYSTEM #define DIRID_COMMON_STARTMENU 16406 #define DIRID_COMMON_PROGRAMS 16407 #define DIRID_COMMON_STARTUP 16408 #define DIRID_COMMON_DESKTOPDIRECTORY 16409 #define DIRID_COMMON_FAVORITES 16415 #define DIRID_COMMON_APPDATA 16419 #define DIRID_PROGRAM_FILES 16422 #define DIRID_SYSTEM_X86 16425 #define DIRID_PROGRAM_FILES_X86 16426 #define DIRID_PROGRAM_FILES_COMMON 16427 #define DIRID_PROGRAM_FILES_COMMONX86 16428 #define DIRID_COMMON_TEMPLATES 16429 #define DIRID_COMMON_DOCUMENTS 16430 #define DIRID_USER 0x8000 /* Error code */ #define ERROR_EXPECTED_SECTION_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0) #define ERROR_BAD_SECTION_NAME_LINE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1) #define ERROR_SECTION_NAME_TOO_LONG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2) #define ERROR_GENERAL_SYNTAX (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3) #define ERROR_WRONG_INF_STYLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100) #define ERROR_SECTION_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101) #define ERROR_LINE_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102) #define ERROR_NO_BACKUP (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x103) #define ERROR_NO_ASSOCIATED_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200) #define ERROR_CLASS_MISMATCH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201) #define ERROR_DUPLICATE_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202) #define ERROR_NO_DRIVER_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203) #define ERROR_KEY_DOES_NOT_EXIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204) #define ERROR_INVALID_DEVINST_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205) #define ERROR_INVALID_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206) #define ERROR_DEVINST_ALREADY_EXISTS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207) #define ERROR_DEVINFO_NOT_REGISTERED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208) #define ERROR_INVALID_REG_PROPERTY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209) #define ERROR_NO_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A) #define ERROR_NO_SUCH_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B) #define ERROR_CANT_LOAD_CLASS_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C) #define ERROR_INVALID_CLASS_INSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D) #define ERROR_DI_DO_DEFAULT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E) #define ERROR_DI_NOFILECOPY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F) #define ERROR_INVALID_HWPROFILE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210) #define ERROR_NO_DEVICE_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211) #define ERROR_DEVINFO_LIST_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212) #define ERROR_DEVINFO_DATA_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213) #define ERROR_DI_BAD_PATH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214) #define ERROR_NO_CLASSINSTALL_PARAMS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215) #define ERROR_FILEQUEUE_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216) #define ERROR_BAD_SERVICE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217) #define ERROR_NO_CLASS_DRIVER_LIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218) #define ERROR_NO_ASSOCIATED_SERVICE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219) #define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A) #define ERROR_DEVICE_INTERFACE_ACTIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B) #define ERROR_DEVICE_INTERFACE_REMOVED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C) #define ERROR_BAD_INTERFACE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D) #define ERROR_NO_SUCH_INTERFACE_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E) #define ERROR_INVALID_REFERENCE_STRING (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F) #define ERROR_INVALID_MACHINENAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220) #define ERROR_REMOTE_COMM_FAILURE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221) #define ERROR_MACHINE_UNAVAILABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222) #define ERROR_NO_CONFIGMGR_SERVICES (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223) #define ERROR_INVALID_PROPPAGE_PROVIDER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224) #define ERROR_NO_SUCH_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225) #define ERROR_DI_POSTPROCESSING_REQUIRED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226) #define ERROR_INVALID_COINSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227) #define ERROR_NO_COMPAT_DRIVERS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228) #define ERROR_NO_DEVICE_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229) #define ERROR_INVALID_INF_LOGCONFIG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A) #define ERROR_DI_DONT_INSTALL (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B) #define ERROR_INVALID_FILTER_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C) #define ERROR_NON_WINDOWS_NT_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22D) #define ERROR_NON_WINDOWS_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22E) #define ERROR_NO_CATALOG_FOR_OEM_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22F) #define ERROR_DEVINSTALL_QUEUE_NONNATIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x230) #define ERROR_NOT_DISABLEABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x231) #define ERROR_CANT_REMOVE_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x232) #define ERROR_INVALID_TARGET (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x233) #define ERROR_DRIVER_NONNATIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x234) #define ERROR_IN_WOW64 (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x235) #define ERROR_SET_SYSTEM_RESTORE_POINT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x236) #define ERROR_INCORRECTLY_COPIED_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x237) #define ERROR_SCE_DISABLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x238) #define ERROR_WRONG_INF_TYPE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x24A) #define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE #define ERROR_INTERFACE_DEVICE_ACTIVE ERROR_DEVICE_INTERFACE_ACTIVE #define ERROR_INTERFACE_DEVICE_REMOVED ERROR_DEVICE_INTERFACE_REMOVED #define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE #define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000) /* flags for SetupDiGetClassDevs */ #define DIGCF_DEFAULT 0x00000001 #define DIGCF_PRESENT 0x00000002 #define DIGCF_ALLCLASSES 0x00000004 #define DIGCF_PROFILE 0x00000008 #define DIGCF_DEVICEINTERFACE 0x00000010 /* Flags for SetupDiOpenClassRegKeyEx */ #define DIOCR_INSTALLER 0x00000001 #define DIOCR_INTERFACE 0x00000002 /* Flags for SetupDiBuildClassInfoList(Ex) */ #define DIBCI_NOINSTALLCLASS 0x00000001 #define DIBCI_NODISPLAYCLASS 0x00000002 /* Flags for SetupDiCreateDeviceInfo */ #define DICD_GENERATE_ID 0x00000001 #define DICD_INHERIT_CLASSDRVS 0x00000002 /* Flags for SetupDiOpenDeviceInfo */ #define DIOD_INHERIT_CLASSDRVS 0x00000002 #define DIOD_CANCEL_REMOVE 0x00000004 /* Flags for SetupDiOpenDeviceInterface */ #define DIODI_NO_ADD 0x00000001 /* Flags for SetupDiRegisterDeviceInfo */ #define SPRDI_FIND_DUPS 0x00000001 /* Values for SetupDi*Info* DriverType */ #define SPDIT_NODRIVER 0x00000000 #define SPDIT_CLASSDRIVER 0x00000001 #define SPDIT_COMPATDRIVER 0x00000002 /* setup device registry property codes */ #define SPDRP_DEVICEDESC 0x00000000 #define SPDRP_HARDWAREID 0x00000001 #define SPDRP_COMPATIBLEIDS 0x00000002 #define SPDRP_UNUSED0 0x00000003 #define SPDRP_SERVICE 0x00000004 #define SPDRP_UNUSED1 0x00000005 #define SPDRP_UNUSED2 0x00000006 #define SPDRP_CLASS 0x00000007 #define SPDRP_CLASSGUID 0x00000008 #define SPDRP_DRIVER 0x00000009 #define SPDRP_CONFIGFLAGS 0x0000000a #define SPDRP_MFG 0x0000000b #define SPDRP_FRIENDLYNAME 0x0000000c #define SPDRP_LOCATION_INFORMATION 0x0000000d #define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000e #define SPDRP_CAPABILITIES 0x0000000f #define SPDRP_UI_NUMBER 0x00000010 #define SPDRP_UPPERFILTERS 0x00000011 #define SPDRP_LOWERFILTERS 0x00000012 #define SPDRP_BUSTYPEGUID 0x00000013 #define SPDRP_LEGACYBUSTYPE 0x00000014 #define SPDRP_BUSNUMBER 0x00000015 #define SPDRP_ENUMERATOR_NAME 0x00000016 #define SPDRP_SECURITY 0x00000017 #define SPDRP_SECURITY_SDS 0x00000018 #define SPDRP_DEVTYPE 0x00000019 #define SPDRP_EXCLUSIVE 0x0000001a #define SPDRP_CHARACTERISTICS 0x0000001b #define SPDRP_ADDRESS 0x0000001c #define SPDRP_UI_NUMBER_DESC_FORMAT 0x0000001d #define SPDRP_DEVICE_POWER_DATA 0x0000001e #define SPDRP_REMOVAL_POLICY 0x0000001f #define SPDRP_REMOVAL_POLICY_HW_DEFAULT 0x00000020 #define SPDRP_REMOVAL_POLICY_OVERRIDE 0x00000021 #define SPDRP_INSTALL_STATE 0x00000022 #define SPDRP_MAXIMUM_PROPERTY 0x00000023 #define DPROMPT_SUCCESS 0 #define DPROMPT_CANCEL 1 #define DPROMPT_SKIPFILE 2 #define DPROMPT_BUFFERTOOSMALL 3 #define DPROMPT_OUTOFMEMORY 4 #define SETDIRID_NOT_FULL_PATH 0x00000001 #define IDF_NOBROWSE 0x00000001 #define IDF_NOSKIP 0x00000002 #define IDF_NODETAILS 0x00000004 #define IDF_NOCOMPRESSED 0x00000008 #define IDF_CHECKFIRST 0x00000100 #define IDF_NOBEEP 0x00000200 #define IDF_NOFOREGROUND 0x00000400 #define IDF_WARNIFSKIP 0x00000800 #define IDF_NOREMOVABLEMEDIAPROMPT 0x00001000 #define IDF_USEDISKNAMEASPROMPT 0x00002000 #define IDF_OEMDISK 0x80000000 #define INFINFO_INF_SPEC_IS_HINF 1 #define INFINFO_INF_NAME_IS_ABSOLUTE 2 #define INFINFO_DEFAULT_SEARCH 3 #define INFINFO_REVERSE_DEFAULT_SEARCH 4 #define INFINFO_INF_PATH_LIST_SEARCH 5 #define LogSeverity DWORD #define LogSevInformation 0x00000000 #define LogSevWarning 0x00000001 #define LogSevError 0x00000002 #define LogSevFatalError 0x00000003 #define LogSevMaximum 0x00000004 #define SRCINFO_PATH 1 #define SRCINFO_TAGFILE 2 #define SRCINFO_DESCRIPTION 3 #define SRCINFO_FLAGS 4 #define SRCINFO_TAGFILE2 5 #define SRC_FLAGS_CABFILE (0x0010) #define FILE_COMPRESSION_NONE 0 #define FILE_COMPRESSION_WINLZA 1 #define FILE_COMPRESSION_MSZIP 2 #define FILE_COMPRESSION_NTCAB 3 #define SPDSL_IGNORE_DISK 0x00000001 #define SPDSL_DISALLOW_NEGATIVE_ADJUST 0x00000002 /* SetupInitializeFileLog Flags values */ #define SPFILELOG_SYSTEMLOG 0x00000001 #define SPFILELOG_FORCENEW 0x00000002 #define SPFILELOG_QUERYONLY 0x00000004 /* SetupLogFile Flags values */ #define SPFILELOG_OEMFILE 0x00000001 /* SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey * KeyType values */ #define DIREG_DEV 0x00000001 #define DIREG_DRV 0x00000002 #define DIREG_BOTH 0x00000004 /* SetupDiDrawMiniIcon Flags values */ #define DMI_MASK 0x00000001 #define DMI_BKCOLOR 0x00000002 #define DMI_USERECT 0x00000004 /* SetupDiGetClassDevPropertySheets PropertySheetType values */ #define DIGCDP_FLAG_BASIC 0x00000001 #define DIGCDP_FLAG_ADVANCED 0x00000002 #define DIGCDP_FLAG_REMOTE_BASIC 0x00000003 #define DIGCDP_FLAG_REMOTE_ADVANCED 0x00000004 typedef enum { SetupFileLogSourceFilename, SetupFileLogChecksum, SetupFileLogDiskTagfile, SetupFileLogDiskDescription, SetupFileLogOtherInfo, SetupFileLogMax } SetupFileLogInfo; /* SetupDiGetWizardPage PageType values */ #define SPWPT_SELECTDEVICE 0x00000001 /* SetupDiGetWizardPage Flags values */ #define SPWP_USE_DEVINFO_DATA 0x00000001 /* SetupDiGetCustomDeviceProperty Flags values */ #define DICUSTOMDEVPROP_MERGE_MULTISZ 0x00000001 /* SetupConfigureWmiFromInfSection Flags values */ #define SCWMI_CLOBBER_SECURITY 0x00000001 /* SetupUninstallOEMInf Flags values */ #define SUOI_FORCEDELETE 0x00000001 LONG WINAPI AddTagToGroupOrderList(PCWSTR lpGroupName, DWORD dwUnknown2, DWORD dwUnknown3); DWORD WINAPI CaptureAndConvertAnsiArg(PCSTR lpSrc, PWSTR *lpDst); DWORD WINAPI CaptureStringArg(PCWSTR lpSrc, PWSTR *lpDst); BOOL WINAPI DelayedMove(PCWSTR lpExistingFileName, PCWSTR lpNewFileName); BOOL WINAPI DoesUserHavePrivilege(PCWSTR lpPrivilegeName); PWSTR WINAPI DuplicateString(PCWSTR lpSrc); BOOL WINAPI EnablePrivilege(PCWSTR lpPrivilegeName, BOOL bEnable); BOOL WINAPI FileExists(PCWSTR lpFileName, PWIN32_FIND_DATAW lpFileFindData); void WINAPI InstallHinfSectionA( HWND hwnd, HINSTANCE handle, PCSTR cmdline, INT show ); void WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, PCWSTR cmdline, INT show ); #define InstallHinfSection WINELIB_NAME_AW(InstallHinfSection) BOOL WINAPI IsUserAdmin(VOID); PWSTR WINAPI MultiByteToUnicode(PCSTR lpMultiByteStr, UINT uCodePage); VOID WINAPI MyFree(PVOID lpMem); PVOID WINAPI MyMalloc(DWORD dwSize); PVOID WINAPI MyRealloc(PVOID lpSrc, DWORD dwSize); DWORD WINAPI OpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID *); LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE *, PDWORD, PDWORD); /* RetreiveFileSecurity is not a typo, as per Microsoft's dlls */ DWORD WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR *); BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT); BOOL WINAPI SetupAddSectionToDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT); #define SetupAddSectionToDiskSpaceList WINELIB_NAME_AW(SetupAddSectionToDiskSpaceList) BOOL WINAPI SetupAddToDiskSpaceListA(HDSKSPC, PCSTR, LONGLONG, UINT, PVOID, UINT); BOOL WINAPI SetupAddToDiskSpaceListW(HDSKSPC, PCWSTR, LONGLONG, UINT, PVOID, UINT); #define SetupAddToDiskSpaceList WINELIB_NAME_AW(SetupAddToDiskSpaceList) BOOL WINAPI SetupAddToSourceListA(DWORD, PCSTR); BOOL WINAPI SetupAddToSourceListW(DWORD, PCWSTR); #define SetupAddToSourceList WINELIB_NAME_AW(SetupAddToSourceList) BOOL WINAPI SetupAdjustDiskSpaceListA(HDSKSPC, LPCSTR, LONGLONG, PVOID, UINT); BOOL WINAPI SetupAdjustDiskSpaceListW(HDSKSPC, LPCWSTR, LONGLONG, PVOID, UINT); #define SetupAdjustDiskSpaceList WINELIB_NAME_AW(SetupAdjustDiskSpaceList) BOOL WINAPI SetupCancelTemporarySourceList(void); BOOL WINAPI SetupConfigureWmiFromInfSectionA(HINF, PCSTR, DWORD); BOOL WINAPI SetupConfigureWmiFromInfSectionW(HINF, PCWSTR, DWORD); #define SetupConfigureWmiFromInfSection WINELIB_NAME_AW(SetupConfigureWmiFromInfSection) UINT WINAPI SetupBackupErrorA(HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD); UINT WINAPI SetupBackupErrorW(HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD); #define SetupBackupError WINELIB_NAME_AW(SetupBackupError) BOOL WINAPI SetupCloseFileQueue( HSPFILEQ ); void WINAPI SetupCloseInfFile( HINF hinf ); void WINAPI SetupCloseLog(void); BOOL WINAPI SetupCommitFileQueueA( HWND, HSPFILEQ, PSP_FILE_CALLBACK_A, PVOID ); BOOL WINAPI SetupCommitFileQueueW( HWND, HSPFILEQ, PSP_FILE_CALLBACK_W, PVOID ); #define SetupCommitFileQueue WINELIB_NAME_AW(SetupCommitFileQueue) UINT WINAPI SetupCopyErrorA( HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, UINT, DWORD, PSTR, DWORD, PDWORD ); UINT WINAPI SetupCopyErrorW( HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD, PWSTR, DWORD, PDWORD ); #define SetupCopyError WINELIB_NAME_AW(SetupCopyError) BOOL WINAPI SetupCopyOEMInfA( PCSTR, PCSTR, DWORD, DWORD, PSTR, DWORD, PDWORD, PSTR * ); BOOL WINAPI SetupCopyOEMInfW( PCWSTR, PCWSTR, DWORD, DWORD, PWSTR, DWORD, PDWORD, PWSTR * ); #define SetupCopyOEMInf WINELIB_NAME_AW(SetupCopyOEMInf) HDSKSPC WINAPI SetupCreateDiskSpaceListA(PVOID, DWORD, UINT); HDSKSPC WINAPI SetupCreateDiskSpaceListW(PVOID, DWORD, UINT); #define SetupCreateDiskSpaceList WINELIB_NAME_AW(SetupCreateDiskSpaceList) DWORD WINAPI SetupDecompressOrCopyFileA( PCSTR, PCSTR, PUINT ); DWORD WINAPI SetupDecompressOrCopyFileW( PCWSTR, PCWSTR, PUINT ); #define SetupDecompressOrCopyFile WINELIB_NAME_AW(SetupDecompressOrCopyFile) UINT WINAPI SetupDefaultQueueCallbackA( PVOID, UINT, UINT_PTR, UINT_PTR ); UINT WINAPI SetupDefaultQueueCallbackW( PVOID, UINT, UINT_PTR, UINT_PTR ); #define SetupDefaultQueueCallback WINELIB_NAME_AW(SetupDefaultQueueCallback) UINT WINAPI SetupDeleteErrorA( HWND, PCSTR, PCSTR, UINT, DWORD ); UINT WINAPI SetupDeleteErrorW( HWND, PCWSTR, PCWSTR, UINT, DWORD ); #define SetupDeleteError WINELIB_NAME_AW(SetupDeleteError) BOOL WINAPI SetupDestroyDiskSpaceList(HDSKSPC); BOOL WINAPI SetupDiAskForOEMDisk(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiBuildClassInfoList(DWORD, LPGUID, DWORD, PDWORD); BOOL WINAPI SetupDiBuildClassInfoListExA(DWORD, LPGUID, DWORD, PDWORD, PCSTR, PVOID); BOOL WINAPI SetupDiBuildClassInfoListExW(DWORD, LPGUID, DWORD, PDWORD, PCWSTR, PVOID); #define SetupDiBuildClassInfoListEx WINELIB_NAME_AW(SetupDiBuildClassInfoListEx) BOOL WINAPI SetupDiBuildDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD); BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION, HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiCancelDriverInfoSearch(HDEVINFO); BOOL WINAPI SetupDiChangeState(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiClassGuidsFromNameA(LPCSTR, LPGUID, DWORD, PDWORD); BOOL WINAPI SetupDiClassGuidsFromNameW(LPCWSTR, LPGUID, DWORD, PDWORD); #define SetupDiClassGuidsFromName WINELIB_NAME_AW(SetupDiClassGuidsFromName) BOOL WINAPI SetupDiClassGuidsFromNameExA(LPCSTR, LPGUID, DWORD, PDWORD, LPCSTR, PVOID); BOOL WINAPI SetupDiClassGuidsFromNameExW(LPCWSTR, LPGUID, DWORD, PDWORD, LPCWSTR, PVOID); #define SetupDiClassGuidsFromNameEx WINELIB_NAME_AW(SetupDiClassGuidsFromNameEx) BOOL WINAPI SetupDiClassNameFromGuidA(const GUID*, PSTR, DWORD, PDWORD); BOOL WINAPI SetupDiClassNameFromGuidW(const GUID*, PWSTR, DWORD, PDWORD); #define SetupDiClassNameFromGuid WINELIB_NAME_AW(SetupDiClassNameFromGuid) BOOL WINAPI SetupDiClassNameFromGuidExA(const GUID*, PSTR, DWORD, PDWORD, PCSTR, PVOID); BOOL WINAPI SetupDiClassNameFromGuidExW(const GUID*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID); #define SetupDiClassNameFromGuidEx WINELIB_NAME_AW(SetupDiClassNameFromGuidEx) HDEVINFO WINAPI SetupDiCreateDeviceInfoList(const GUID *, HWND); HDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(const GUID *, HWND, PCSTR, PVOID); HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(const GUID *, HWND, PCWSTR, PVOID); #define SetupDiCreateDeviceInfoListEx WINELIB_NAME_AW(SetupDiCreateDeviceInfoListEx) BOOL WINAPI SetupDiCreateDeviceInfoA(HDEVINFO, PCSTR, const GUID*, PCSTR, HWND, DWORD,PSP_DEVINFO_DATA); BOOL WINAPI SetupDiCreateDeviceInfoW(HDEVINFO, PCWSTR, const GUID*, PCWSTR, HWND, DWORD,PSP_DEVINFO_DATA); #define SetupDiCreateDeviceInfo WINELIB_NAME_AW(SetupDiCreateDeviceInfo) BOOL WINAPI SetupDiCreateDeviceInterfaceA(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA); BOOL WINAPI SetupDiCreateDeviceInterfaceW(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA); #define SetupDiCreateDeviceInterface WINELIB_NAME_AW(SetupDiCreateDeviceInterface) HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCSTR); HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCWSTR); #define SetupDiCreateDeviceInterfaceRegKey WINELIB_NAME_AW(SetupDiCreateDeviceInterfaceRegKey) HKEY WINAPI SetupDiCreateDevRegKeyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCSTR); HKEY WINAPI SetupDiCreateDevRegKeyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCWSTR); #define SetupDiCreateDevRegKey WINELIB_NAME_AW(SetupDiCreateDevRegKey) BOOL WINAPI SetupDiDeleteDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiDeleteDeviceInterfaceData(HDEVINFO, PSP_DEVICE_INTERFACE_DATA); BOOL WINAPI SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD); BOOL WINAPI SetupDiDeleteDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD); BOOL WINAPI SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA); BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO); BOOL WINAPI SetupDiDestroyDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD); INT WINAPI SetupDiDrawMiniIcon(HDC, RECT, INT, DWORD); BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO, DWORD, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, DWORD, PSP_DEVICE_INTERFACE_DATA); BOOL WINAPI SetupDiEnumDriverInfoA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_A); BOOL WINAPI SetupDiEnumDriverInfoW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_W); #define SetupDiEnumDriverInfo WINELIB_NAME_AW(SetupDiEnumDriverInfo) BOOL WINAPI SetupDiGetActualModelsSectionA(PINFCONTEXT, PSP_ALTPLATFORM_INFO, PSTR, DWORD, PDWORD, PVOID); BOOL WINAPI SetupDiGetActualModelsSectionW(PINFCONTEXT, PSP_ALTPLATFORM_INFO, PWSTR, DWORD, PDWORD, PVOID); #define SetupDiGetActualModelsSection WINELIB_NAME_AW(SetupDiGetActualModelsSection) BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR *); BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR *); #define SetupDiGetActualSectionToInstall WINELIB_NAME_AW(SetupDiGetActualSectionToInstall) BOOL WINAPI SetupDiGetActualSectionToInstallExA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR *, PVOID); BOOL WINAPI SetupDiGetActualSectionToInstallExW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR *, PVOID); #define SetupDiGetActualSectionToInstallEx WINELIB_NAME_AW(SetupDiGetActualSectionToInstallEx) BOOL WINAPI SetupDiGetClassBitmapIndex(const GUID *, PINT); BOOL WINAPI SetupDiGetClassDescriptionA(const GUID*, PSTR, DWORD, PDWORD); BOOL WINAPI SetupDiGetClassDescriptionW(const GUID*, PWSTR, DWORD, PDWORD); #define SetupDiGetClassDescription WINELIB_NAME_AW(SetupDiGetClassDescription) BOOL WINAPI SetupDiGetClassDescriptionExA(const GUID*, PSTR, DWORD, PDWORD, PCSTR, PVOID); BOOL WINAPI SetupDiGetClassDescriptionExW(const GUID*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID); #define SetupDiGetClassDescriptionEx WINELIB_NAME_AW(SetupDiGetClassDescriptionEx) BOOL WINAPI SetupDiGetClassDevPropertySheetsA(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERA, DWORD, PDWORD, DWORD); BOOL WINAPI SetupDiGetClassDevPropertySheetsW(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERW, DWORD, PDWORD, DWORD); #define SetupDiGetClassDevPropertySheets WINELIB_NAME_AW(SetupDiGetClassDevPropertySheets) HDEVINFO WINAPI SetupDiGetClassDevsA(const GUID *,LPCSTR,HWND,DWORD); HDEVINFO WINAPI SetupDiGetClassDevsW(const GUID *,LPCWSTR,HWND,DWORD); #define SetupDiGetClassDevs WINELIB_NAME_AW(SetupDiGetClassDevs) HDEVINFO WINAPI SetupDiGetClassDevsExA(const GUID *, PCSTR, HWND, DWORD, HDEVINFO, PCSTR, PVOID); HDEVINFO WINAPI SetupDiGetClassDevsExW(const GUID *, PCWSTR, HWND, DWORD, HDEVINFO, PCWSTR, PVOID); #define SetupDiGetClassDevsEx WINELIB_NAME_AW(SetupDiGetClassDevsEx) BOOL WINAPI SetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA, const GUID *, PINT); BOOL WINAPI SetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA); BOOL WINAPI SetupDiGetClassImageListExA(PSP_CLASSIMAGELIST_DATA, PCSTR, PVOID); BOOL WINAPI SetupDiGetClassImageListExW(PSP_CLASSIMAGELIST_DATA, PCWSTR, PVOID); #define SetupDiGetClassImageListEx WINELIB_NAME_AW(SetupDiGetClassImageListEx) BOOL WINAPI SetupDiGetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD); BOOL WINAPI SetupDiGetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD); #define SetupDiGetClassInstallParams WINELIB_NAME_AW(SetupDiGetClassInstallParams) BOOL WINAPI SetupDiGetClassRegistryPropertyA(const GUID *, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCSTR, PVOID); BOOL WINAPI SetupDiGetClassRegistryPropertyW(const GUID *, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCWSTR, PVOID); #define SetupDiGetClassRegistryProperty WINELIB_NAME_AW(SetupDiGetClassRegistryProperty) BOOL WINAPI SetupDiGetCustomDevicePropertyA(HDEVINFO, PSP_DEVINFO_DATA, PCSTR, DWORD, PDWORD, PBYTE, DWORD, PDWORD); BOOL WINAPI SetupDiGetCustomDevicePropertyW(HDEVINFO, PSP_DEVINFO_DATA, PCWSTR, DWORD, PDWORD, PBYTE, DWORD, PDWORD); #define SetupDiGetCustomDeviceProperty WINELIB_NAME_AW(SetupDiGetCustomDeviceProperty) BOOL WINAPI SetupDiGetDeviceInfoListClass(HDEVINFO, LPGUID); BOOL WINAPI SetupDiGetDeviceInfoListDetailA(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_A); BOOL WINAPI SetupDiGetDeviceInfoListDetailW(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_W); #define SetupDiGetDeviceInfoListDetail WINELIB_NAME_AW(SetupDiGetDeviceInfoListDetail) BOOL WINAPI SetupDiGetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A); BOOL WINAPI SetupDiGetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W); #define SetupDiGetDeviceInstallParams WINELIB_NAME_AW(SetupDiGetDeviceInstallParams) BOOL WINAPI SetupDiGetDeviceInstanceIdA(HDEVINFO, PSP_DEVINFO_DATA, PSTR, DWORD, PDWORD); BOOL WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO, PSP_DEVINFO_DATA, PWSTR, DWORD, PDWORD); #define SetupDiGetDeviceInstanceId WINELIB_NAME_AW(SetupDiGetDeviceInstanceId) BOOL WINAPI SetupDiGetDeviceInterfaceAlias(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, const GUID *, PSP_DEVICE_INTERFACE_DATA); BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DWORD, PDWORD, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W, DWORD, PDWORD, PSP_DEVINFO_DATA); #define SetupDiGetDeviceInterfaceDetail WINELIB_NAME_AW(SetupDiGetDeviceInterfaceDetail) BOOL WINAPI SetupDiGetDevicePropertyW(HDEVINFO, PSP_DEVINFO_DATA, const DEVPROPKEY *, DEVPROPTYPE *, BYTE *, DWORD, DWORD *, DWORD); #define SetupDiGetDeviceProperty WINELIB_NAME_AW(SetupDiGetDeviceProperty) /* note: A function doesn't exist */ BOOL WINAPI SetupDiGetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD); BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD); #define SetupDiGetDeviceRegistryProperty WINELIB_NAME_AW(SetupDiGetDeviceRegistryProperty) BOOL WINAPI SetupDiGetDriverInfoDetailA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINFO_DETAIL_DATA_A, DWORD, PDWORD); BOOL WINAPI SetupDiGetDriverInfoDetailW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINFO_DETAIL_DATA_W, DWORD, PDWORD); #define SetupDiGetDriverInfoDetail WINELIB_NAME_AW(SetupDiGetDriverInfoDetail) BOOL WINAPI SetupDiGetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS); BOOL WINAPI SetupDiGetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS); #define SetupDiGetDriverInstallParams WINELIB_NAME_AW(SetupDiGetDriverInstallParams) BOOL WINAPI SetupDiGetHwProfileFriendlyNameA(DWORD, PSTR, DWORD, PDWORD); BOOL WINAPI SetupDiGetHwProfileFriendlyNameW(DWORD, PWSTR, DWORD, PDWORD); #define SetupDiGetHwProfileFriendlyName WINELIB_NAME_AW(SetupDiGetHwProfileFriendlyName) BOOL WINAPI SetupDiGetHwProfileFriendlyNameExA(DWORD, PSTR, DWORD, PDWORD, PCSTR, PVOID); BOOL WINAPI SetupDiGetHwProfileFriendlyNameExW(DWORD, PWSTR, DWORD, PDWORD, PCWSTR, PVOID); #define SetupDiGetHwProfileFriendlyNameEx WINELIB_NAME_AW(SetupDiGetHwProfileFriendlyNameEx) BOOL WINAPI SetupDiGetHwProfileList(PDWORD, DWORD, PDWORD, PDWORD); BOOL WINAPI SetupDiGetHwProfileListExA(PDWORD, DWORD, PDWORD, PDWORD, PCSTR, PVOID); BOOL WINAPI SetupDiGetHwProfileListExW(PDWORD, DWORD, PDWORD, PDWORD, PCWSTR, PVOID); #define SetupDiGetHwProfileListEx WINELIB_NAME_AW(SetupDiGetHwProfileListEx) BOOL WINAPI SetupDiGetINFClassA(PCSTR, LPGUID, PSTR, DWORD, PDWORD); BOOL WINAPI SetupDiGetINFClassW(PCWSTR, LPGUID, PWSTR, DWORD, PDWORD); #define SetupDiGetINFClass WINELIB_NAME_AW(SetupDiGetINFClass) BOOL WINAPI SetupDiGetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiGetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A); BOOL WINAPI SetupDiGetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W); #define SetupDiGetSelectedDriver WINELIB_NAME_AW(SetupDiGetSelectedDriver) HPROPSHEETPAGE WINAPI SetupDiGetWizardPage(HDEVINFO, PSP_DEVINFO_DATA, PSP_INSTALLWIZARD_DATA, DWORD, DWORD); BOOL WINAPI SetupDiInstallClassA(HWND, PCSTR, DWORD, HSPFILEQ); BOOL WINAPI SetupDiInstallClassW(HWND, PCWSTR, DWORD, HSPFILEQ); #define SetupDiInstallClass WINELIB_NAME_AW(SetupDiInstallClass) BOOL WINAPI SetupDiInstallClassExA(HWND, PCSTR, DWORD, HSPFILEQ, const GUID *, PVOID, PVOID); BOOL WINAPI SetupDiInstallClassExW(HWND, PCWSTR, DWORD, HSPFILEQ, const GUID *, PVOID, PVOID); #define SetupDiInstallClassEx WINELIB_NAME_AW(SetupDiInstallClassEx) BOOL WINAPI SetupDiInstallDevice(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiInstallDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiInstallDriverFiles(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiLoadClassIcon(const GUID *, HICON *, PINT); HKEY WINAPI SetupDiOpenClassRegKey(const GUID*, REGSAM); HKEY WINAPI SetupDiOpenClassRegKeyExA(const GUID*, REGSAM, DWORD, PCSTR, PVOID); HKEY WINAPI SetupDiOpenClassRegKeyExW(const GUID*, REGSAM, DWORD, PCWSTR, PVOID); #define SetupDiOpenClassRegKeyEx WINELIB_NAME_AW(SetupDiOpenClassRegKeyEx) BOOL WINAPI SetupDiOpenDeviceInfoA(HDEVINFO, PCSTR, HWND, DWORD, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiOpenDeviceInfoW(HDEVINFO, PCWSTR, HWND, DWORD, PSP_DEVINFO_DATA); #define SetupDiOpenDeviceInfo WINELIB_NAME_AW(SetupDiOpenDeviceInfo) BOOL WINAPI SetupDiOpenDeviceInterfaceA(HDEVINFO, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA); BOOL WINAPI SetupDiOpenDeviceInterfaceW(HDEVINFO, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA); #define SetupDiOpenDeviceInterface WINELIB_NAME_AW(SetupDiOpenDeviceInterface) BOOL WINAPI SetupDiOpenDeviceInterfaceRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, REGSAM); HKEY WINAPI SetupDiOpenDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM); BOOL WINAPI SetupDiRegisterCoDeviceInstallers(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiRegisterDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PSP_DETSIG_CMPPROC, PVOID, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiRemoveDevice(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiRemoveDeviceInterface(HDEVINFO, PSP_DEVICE_INTERFACE_DATA); BOOL WINAPI SetupDiRestartDevices(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiSelectBestCompatDrv(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiSelectDevice(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiSelectOEMDrv(HWND, HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiSetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD); BOOL WINAPI SetupDiSetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD); #define SetupDiSetClassInstallParams WINELIB_NAME_AW(SetupDiSetClassInstallParams) BOOL WINAPI SetupDiSetClassRegistryPropertyA(const GUID *, DWORD, const BYTE *, DWORD, PCSTR, PVOID); BOOL WINAPI SetupDiSetClassRegistryPropertyW(const GUID *, DWORD, const BYTE *, DWORD, PCWSTR, PVOID); #define SetupDiSetClassRegistryProperty WINELIB_NAME_AW(SetupDiSetClassRegistryProperty) BOOL WINAPI SetupDiSetDeviceInterfaceDefault(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, PVOID); BOOL WINAPI SetupDiSetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A); BOOL WINAPI SetupDiSetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W); #define SetupDiSetDeviceInstallParams WINELIB_NAME_AW(SetupDiSetDeviceInstallParams) BOOL WINAPI SetupDiSetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD); BOOL WINAPI SetupDiSetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD); #define SetupDiSetDeviceRegistryProperty WINELIB_NAME_AW(SetupDiSetDeviceRegistryProperty) BOOL WINAPI SetupDiSetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS); BOOL WINAPI SetupDiSetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS); #define SetupDiSetDriverInstallParams WINELIB_NAME_AW(SetupDiSetDriverInstallParams) BOOL WINAPI SetupDiSetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA); BOOL WINAPI SetupDiSetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A); BOOL WINAPI SetupDiSetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W); #define SetupDiSetSelectedDriver WINELIB_NAME_AW(SetupDiSetSelectedDriver) BOOL WINAPI SetupDiUnremoveDevice(HDEVINFO, PSP_DEVINFO_DATA); HDSKSPC WINAPI SetupDuplicateDiskSpaceListA(HDSKSPC, PVOID, DWORD, UINT); HDSKSPC WINAPI SetupDuplicateDiskSpaceListW(HDSKSPC, PVOID, DWORD, UINT); #define SetupDuplicateDiskSpaceList WINELIB_NAME_AW(SetupDuplicateDiskSpaceList) BOOL WINAPI SetupEnumInfSectionsA(HINF, UINT, PSTR, DWORD, DWORD *); BOOL WINAPI SetupEnumInfSectionsW(HINF, UINT, PWSTR, DWORD, DWORD *); #define SetupEnumInfSections WINELIB_NAME_AW(SetupEnumInfSections) BOOL WINAPI SetupFindFirstLineA( HINF hinf, PCSTR section, PCSTR key, INFCONTEXT *context ); BOOL WINAPI SetupFindFirstLineW( HINF hinf, PCWSTR section, PCWSTR key, INFCONTEXT *context ); #define SetupFindFirstLine WINELIB_NAME_AW(SetupFindFirstLine) BOOL WINAPI SetupFindNextLine( PINFCONTEXT context_in, PINFCONTEXT context_out ); BOOL WINAPI SetupFindNextMatchLineA( PINFCONTEXT context_in, PCSTR key, PINFCONTEXT context_out ); BOOL WINAPI SetupFindNextMatchLineW( PINFCONTEXT context_in, PCWSTR key, PINFCONTEXT context_out ); #define SetupFindNextMatchLine WINELIB_NAME_AW(SetupFindNextMatchLine) BOOL WINAPI SetupFreeSourceListA(PCSTR **, UINT); BOOL WINAPI SetupFreeSourceListW(PCWSTR **, UINT); #define SetupFreeSourceList WINELIB_NAME_AW(SetupFreeSourceList) BOOL WINAPI SetupGetBackupInformationA(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_A BackupParams); BOOL WINAPI SetupGetBackupInformationW(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_W BackupParams); #define SetupGetBackupInformation WINELIB_NAME_AW(SetupGetBackupInformation) BOOL WINAPI SetupGetBinaryField( PINFCONTEXT context, DWORD index, BYTE *buffer, DWORD size, LPDWORD required ); DWORD WINAPI SetupGetFieldCount( PINFCONTEXT context ); DWORD WINAPI SetupGetFileCompressionInfoA(PCSTR, PSTR *, PDWORD, PDWORD, PUINT); DWORD WINAPI SetupGetFileCompressionInfoW(PCWSTR, PWSTR *, PDWORD, PDWORD, PUINT); #define SetupGetFileCompressionInfo WINELIB_NAME_AW(SetupGetFileCompressionInfo) BOOL WINAPI SetupGetFileCompressionInfoExA(PCSTR, PSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT); BOOL WINAPI SetupGetFileCompressionInfoExW(PCWSTR, PWSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT); #define SetupGetFileCompressionInfoEx WINELIB_NAME_AW(SetupGetFileCompressionInfoEx) BOOL WINAPI SetupGetFileQueueCount( HSPFILEQ, UINT, PUINT ); BOOL WINAPI SetupGetFileQueueFlags( HSPFILEQ, PDWORD ); BOOL WINAPI SetupGetInfFileListA(PCSTR, DWORD, PSTR, DWORD, PDWORD); BOOL WINAPI SetupGetInfFileListW(PCWSTR, DWORD, PWSTR, DWORD, PDWORD); #define SetupGetInfFileList WINELIB_NAME_AW(SetupGetFileList) BOOL WINAPI SetupGetInfInformationA( LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD); BOOL WINAPI SetupGetInfInformationW( LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD); #define SetupGetInfInformation WINELIB_NAME_AW(SetupGetInfInformation) BOOL WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result ); BOOL WINAPI SetupGetLineByIndexA( HINF, PCSTR, DWORD, INFCONTEXT * ); BOOL WINAPI SetupGetLineByIndexW( HINF, PCWSTR, DWORD, INFCONTEXT * ); #define SetupGetLineByIndex WINELIB_NAME_AW(SetupGetLineByIndex) LONG WINAPI SetupGetLineCountA( HINF hinf, PCSTR section ); LONG WINAPI SetupGetLineCountW( HINF hinf, PCWSTR section ); #define SetupGetLineCount WINELIB_NAME_AW(SetupGetLineCount) BOOL WINAPI SetupGetLineTextA( PINFCONTEXT context, HINF hinf, PCSTR section_name,PCSTR key_name, PSTR buffer, DWORD size, PDWORD required ); BOOL WINAPI SetupGetLineTextW( PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required ); #define SetupGetLineText WINELIB_NAME_AW(SetupGetLineText) BOOL WINAPI SetupGetMultiSzFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, LPDWORD required ); BOOL WINAPI SetupGetMultiSzFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, LPDWORD required ); #define SetupGetMultiSzField WINELIB_NAME_AW(SetupGetMultiSzField) BOOL WINAPI SetupGetNonInteractiveMode(void); BOOL WINAPI SetupGetSourceFileLocationA( HINF hinf, PINFCONTEXT context, PCSTR filename, PUINT source_id, PSTR buffer, DWORD buffer_size, PDWORD required_size ); BOOL WINAPI SetupGetSourceFileLocationW( HINF hinf, PINFCONTEXT context, PCWSTR filename, PUINT source_id, PWSTR buffer, DWORD buffer_size, PDWORD required_size ); #define SetupGetSourceFileLocation WINELIB_NAME_AW(SetupGetSourceFileLocation) BOOL WINAPI SetupGetSourceFileSizeA(HINF, PINFCONTEXT, PCSTR, PCSTR, PDWORD, UINT); BOOL WINAPI SetupGetSourceFileSizeW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PDWORD, UINT); #define SetupGetSourceFileSize WINELIB_NAME_AW(SetupGetSourceFileSize) BOOL WINAPI SetupGetSourceInfoA( HINF hinf, UINT source_id, UINT info, PSTR buffer, DWORD buffer_size, LPDWORD required_size ); BOOL WINAPI SetupGetSourceInfoW( HINF hinf, UINT source_id, UINT info, PWSTR buffer, DWORD buffer_size, LPDWORD required_size ); #define SetupGetSourceInfo WINELIB_NAME_AW(SetupGetSourceInfo) BOOL WINAPI SetupGetStringFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, PDWORD required ); BOOL WINAPI SetupGetStringFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, PDWORD required ); #define SetupGetStringField WINELIB_NAME_AW(SetupGetStringField) BOOL WINAPI SetupGetTargetPathA( HINF hinf, PINFCONTEXT context, PCSTR section, PSTR buffer, DWORD buffer_size, PDWORD required_size ); BOOL WINAPI SetupGetTargetPathW( HINF hinf, PINFCONTEXT context, PCWSTR section, PWSTR buffer, DWORD buffer_size, PDWORD required_size ); #define SetupGetTargetPath WINELIB_NAME_AW(SetupGetTargetPath) PVOID WINAPI SetupInitDefaultQueueCallback( HWND ); PVOID WINAPI SetupInitDefaultQueueCallbackEx( HWND, HWND, UINT, DWORD, PVOID ); HSPFILELOG WINAPI SetupInitializeFileLogA(PCSTR, DWORD); HSPFILELOG WINAPI SetupInitializeFileLogW(PCWSTR, DWORD); #define SetupInitializeFileLog WINELIB_NAME_AW(SetupInitializeFileLog) BOOL WINAPI SetupInstallFileA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID); BOOL WINAPI SetupInstallFileW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID); #define SetupInstallFile WINELIB_NAME_AW(SetupInstallFile) BOOL WINAPI SetupInstallFileExA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID, PBOOL); BOOL WINAPI SetupInstallFileExW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID, PBOOL); #define SetupInstallFileEx WINELIB_NAME_AW(SetupInstallFileEx) BOOL WINAPI SetupInstallFilesFromInfSectionA( HINF, HINF, HSPFILEQ, PCSTR, PCSTR, UINT ); BOOL WINAPI SetupInstallFilesFromInfSectionW( HINF, HINF, HSPFILEQ, PCWSTR, PCWSTR, UINT ); #define SetupInstallFilesFromInfSection WINELIB_NAME_AW(SetupInstallFilesFromInfSection) BOOL WINAPI SetupInstallFromInfSectionA(HWND,HINF,PCSTR,UINT,HKEY,PCSTR,UINT, PSP_FILE_CALLBACK_A,PVOID,HDEVINFO,PSP_DEVINFO_DATA); BOOL WINAPI SetupInstallFromInfSectionW(HWND,HINF,PCWSTR,UINT,HKEY,PCWSTR,UINT, PSP_FILE_CALLBACK_W,PVOID,HDEVINFO,PSP_DEVINFO_DATA); #define SetupInstallFromInfSection WINELIB_NAME_AW(SetupInstallFromInfSection) BOOL WINAPI SetupInstallServicesFromInfSectionA(HINF, PCSTR, DWORD); BOOL WINAPI SetupInstallServicesFromInfSectionW(HINF, PCWSTR, DWORD); #define SetupInstallServicesFromInfSection WINELIB_NAME_AW(SetupInstallServicesFromInfSection) BOOL WINAPI SetupInstallServicesFromInfSectionExA(HINF, PCSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID); BOOL WINAPI SetupInstallServicesFromInfSectionExW(HINF, PCWSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID); #define SetupInstallServicesFromInfSectionEx WINELIB_NAME_AW(SetupInstallServicesFromInfSectionEx) BOOL WINAPI SetupIterateCabinetA(PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID); BOOL WINAPI SetupIterateCabinetW(PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID); #define SetupIterateCabinet WINELIB_NAME_AW(SetupIterateCabinet) BOOL WINAPI SetupLogErrorA(LPCSTR,LogSeverity); BOOL WINAPI SetupLogErrorW(LPCWSTR,LogSeverity); #define SetupLogError WINELIB_NAME_AW(SetupLogError) BOOL WINAPI SetupLogFileA(HSPFILELOG, PCSTR, PCSTR, PCSTR, DWORD, PCSTR, PCSTR, PCSTR, DWORD); BOOL WINAPI SetupLogFileW(HSPFILELOG, PCWSTR, PCWSTR, PCWSTR, DWORD, PCWSTR, PCWSTR, PCWSTR, DWORD); #define SetupLogFile WINELIB_NAME_AW(SetupLogFile) BOOL WINAPI SetupOpenAppendInfFileA( PCSTR, HINF, UINT * ); BOOL WINAPI SetupOpenAppendInfFileW( PCWSTR, HINF, UINT * ); #define SetupOpenAppendInfFile WINELIB_NAME_AW(SetupOpenAppendInfFile) HSPFILEQ WINAPI SetupOpenFileQueue(void); HINF WINAPI SetupOpenInfFileA( PCSTR name, PCSTR pszclass, DWORD style, UINT *error ); HINF WINAPI SetupOpenInfFileW( PCWSTR name, PCWSTR pszclass, DWORD style, UINT *error ); #define SetupOpenInfFile WINELIB_NAME_AW(SetupOpenInfFile) BOOL WINAPI SetupOpenLog(BOOL); HINF WINAPI SetupOpenMasterInf( VOID ); BOOL WINAPI SetupPrepareQueueForRestoreA(HSPFILEQ, PCSTR, DWORD); BOOL WINAPI SetupPrepareQueueForRestoreW(HSPFILEQ, PCWSTR, DWORD); #define SetupPrepareQueueForRestore WINELIB_NAME_AW(SetupPrepareQueueForRestore) UINT WINAPI SetupPromptForDiskA(HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, DWORD, PSTR, DWORD, PDWORD); UINT WINAPI SetupPromptForDiskW(HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, DWORD, PWSTR, DWORD, PDWORD); #define SetupPromptForDisk WINELIB_NAME_AW(SetupPromptForDisk) INT WINAPI SetupPromptReboot( HSPFILEQ, HWND, BOOL); BOOL WINAPI SetupQueryDrivesInDiskSpaceListA(HDSKSPC, PSTR, DWORD, PDWORD); BOOL WINAPI SetupQueryDrivesInDiskSpaceListW(HDSKSPC, PWSTR, DWORD, PDWORD); #define SetupQueryDrivesInDiskSpaceList WINELIB_NAME_AW(SetupQueryDrivesInDiskSpaceList) BOOL WINAPI SetupQueryFileLogA(HSPFILELOG, PCSTR, PCSTR, SetupFileLogInfo, PSTR, DWORD, PDWORD); BOOL WINAPI SetupQueryFileLogW(HSPFILELOG, PCWSTR, PCWSTR, SetupFileLogInfo, PWSTR, DWORD, PDWORD); #define SetupQueryFileLog WINELIB_NAME_AW(SetupQueryFileLog) BOOL WINAPI SetupQueryInfFileInformationA(PSP_INF_INFORMATION, UINT, PSTR, DWORD, PDWORD); BOOL WINAPI SetupQueryInfFileInformationW(PSP_INF_INFORMATION, UINT, PWSTR, DWORD, PDWORD); #define SetupQueryInfFileInformation WINELIB_NAME_AW(SetupQueryInFileInformation) BOOL WINAPI SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_A); BOOL WINAPI SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_W); #define SetupQueryInfOriginalFileInformation WINELIB_NAME_AW(SetupQueryInfOriginalFileInformation) BOOL WINAPI SetupQueryInfVersionInformationA(PSP_INF_INFORMATION, UINT, PCSTR, PSTR, DWORD, PDWORD); BOOL WINAPI SetupQueryInfVersionInformationW(PSP_INF_INFORMATION, UINT, PCWSTR, PWSTR, DWORD, PDWORD); #define SetupQueryInfVersionInformation WINELIB_NAME_AW(SetupQueryInfVersionInformation) BOOL WINAPI SetupQuerySourceListA(DWORD, PCSTR **, PUINT); BOOL WINAPI SetupQuerySourceListW(DWORD, PCWSTR **, PUINT); #define SetupQuerySourceList WINELIB_NAME_AW(SetupQuerySourceList) BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC, PCSTR, LONGLONG *, PVOID, UINT); BOOL WINAPI SetupQuerySpaceRequiredOnDriveW(HDSKSPC, PCWSTR, LONGLONG *, PVOID, UINT); #define SetupQuerySpaceRequiredOnDrive WINELIB_NAME_AW(SetupQuerySpaceRequiredOnDrive) BOOL WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD); BOOL WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD); #define SetupQueueCopy WINELIB_NAME_AW(SetupQueueCopy) BOOL WINAPI SetupQueueCopyIndirectA( PSP_FILE_COPY_PARAMS_A ); BOOL WINAPI SetupQueueCopyIndirectW( PSP_FILE_COPY_PARAMS_W ); #define SetupQueueCopyIndirect WINELIB_NAME_AW(SetupQueueCopyIndirect) BOOL WINAPI SetupQueueCopySectionA( HSPFILEQ, PCSTR, HINF, HINF, PCSTR, DWORD ); BOOL WINAPI SetupQueueCopySectionW( HSPFILEQ, PCWSTR, HINF, HINF, PCWSTR, DWORD ); #define SetupQueueCopySection WINELIB_NAME_AW(SetupQueueCopySection) BOOL WINAPI SetupQueueDefaultCopyA( HSPFILEQ, HINF, PCSTR, PCSTR, PCSTR, DWORD ); BOOL WINAPI SetupQueueDefaultCopyW( HSPFILEQ, HINF, PCWSTR, PCWSTR, PCWSTR, DWORD ); #define SetupQueueDefaultCopy WINELIB_NAME_AW(SetupQueueDefaultCopy) BOOL WINAPI SetupQueueDeleteA( HSPFILEQ, PCSTR, PCSTR ); BOOL WINAPI SetupQueueDeleteW( HSPFILEQ, PCWSTR, PCWSTR ); #define SetupQueueDelete WINELIB_NAME_AW(SetupQueueDelete) BOOL WINAPI SetupQueueDeleteSectionA( HSPFILEQ, HINF, HINF, PCSTR ); BOOL WINAPI SetupQueueDeleteSectionW( HSPFILEQ, HINF, HINF, PCWSTR ); #define SetupQueueDeleteSection WINELIB_NAME_AW(SetupQueueDeleteSection) BOOL WINAPI SetupQueueRenameA( HSPFILEQ, PCSTR, PCSTR, PCSTR, PCSTR ); BOOL WINAPI SetupQueueRenameW( HSPFILEQ, PCWSTR, PCWSTR, PCWSTR, PCWSTR ); #define SetupQueueRename WINELIB_NAME_AW(SetupQueueRename) BOOL WINAPI SetupQueueRenameSectionA( HSPFILEQ, HINF, HINF, PCSTR ); BOOL WINAPI SetupQueueRenameSectionW( HSPFILEQ, HINF, HINF, PCWSTR ); #define SetupQueueRenameSection WINELIB_NAME_AW(SetupQueueRenameSection) BOOL WINAPI SetupRemoveFileLogEntryA(HSPFILELOG, PCSTR, PCSTR); BOOL WINAPI SetupRemoveFileLogEntryW(HSPFILELOG, PCWSTR, PCWSTR); #define SetupRemoveFileLogEntry WINELIB_NAME_AW(SetupRemoveFileLogEntry) BOOL WINAPI SetupRemoveFromDiskSpaceListA(HDSKSPC, PCSTR, UINT, PVOID, UINT); BOOL WINAPI SetupRemoveFromDiskSpaceListW(HDSKSPC, PCWSTR, UINT, PVOID, UINT); #define SetupRemoveFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveFromDiskSpaceList) BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, PVOID, UINT); BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, PVOID, UINT); #define SetupRemoveInstallSectionFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveInstallSectionFromDiskSpaceList) BOOL WINAPI SetupRemoveSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT); BOOL WINAPI SetupRemoveSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT); #define SetupRemoveSectionFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveSectionFromDiskSpaceList) BOOL WINAPI SetupRemoveFromSourceListA(DWORD, PCSTR); BOOL WINAPI SetupRemoveFromSourceListW(DWORD, PCWSTR); #define SetupRemoveFromSourceList WINELIB_NAME_AW(SetupRemoveFromSourceList) UINT WINAPI SetupRenameErrorA( HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD ); UINT WINAPI SetupRenameErrorW( HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD ); #define SetupRenameError WINELIB_NAME_AW(SetupRenameError) BOOL WINAPI SetupScanFileQueueA( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_A, PVOID, PDWORD ); BOOL WINAPI SetupScanFileQueueW( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_W, PVOID, PDWORD ); #define SetupScanFileQueue WINELIB_NAME_AW(SetupScanFileQueue) BOOL WINAPI SetupSetDirectoryIdA( HINF, DWORD, PCSTR ); BOOL WINAPI SetupSetDirectoryIdW( HINF, DWORD, PCWSTR ); #define SetupSetDirectoryId WINELIB_NAME_AW(SetupSetDirectoryId) BOOL WINAPI SetupSetDirectoryIdExA( HINF, DWORD, PCSTR, DWORD, DWORD, PVOID ); BOOL WINAPI SetupSetDirectoryIdExW( HINF, DWORD, PCWSTR, DWORD, DWORD, PVOID ); #define SetupSetDirectoryIdEx WINELIB_NAME_AW(SetupSetDirectoryIdEx) BOOL WINAPI SetupSetFileQueueAlternatePlatformA( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCSTR ); BOOL WINAPI SetupSetFileQueueAlternatePlatformW( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCWSTR ); #define SetupSetFileQueueAlternatePlatform WINELIB_NAME_AW(SetupSetFileQueueAlternatePlatform) BOOL WINAPI SetupSetFileQueueFlags( HSPFILEQ, DWORD, DWORD ); BOOL WINAPI SetupSetNonInteractiveMode(BOOL); BOOL WINAPI SetupSetPlatformPathOverrideA(PCSTR); BOOL WINAPI SetupSetPlatformPathOverrideW(PCWSTR); #define SetupSetPlatformPathOverride WINELIB_NAME_AW(SetupSetPlatformPathOverride) BOOL WINAPI SetupSetSourceListA(DWORD, PCSTR *, UINT); BOOL WINAPI SetupSetSourceListW(DWORD, PCWSTR *, UINT); #define SetupSetSourceList WINELIB_NAME_AW(SetupSetSourceList) void WINAPI SetupTermDefaultQueueCallback( PVOID ); BOOL WINAPI SetupTerminateFileLog(HSPFILELOG); BOOL WINAPI SetupUninstallOEMInfA(PCSTR, DWORD, PVOID); BOOL WINAPI SetupUninstallOEMInfW(PCWSTR, DWORD, PVOID); #define SetupUninstallOEMInf WINELIB_NAME_AW(SetupUninstallOEMInf) BOOL WINAPI SetupUninstallNewlyCopiedInfs(HSPFILEQ, DWORD, PVOID); BOOL WINAPI SetupVerifyInfFileA(PCSTR, PSP_ALTPLATFORM_INFO, PSP_INF_SIGNER_INFO_A); BOOL WINAPI SetupVerifyInfFileW(PCWSTR, PSP_ALTPLATFORM_INFO, PSP_INF_SIGNER_INFO_W); #define SetupVerifyInfFile WINELIB_NAME_AW(SetupVerifyInfFile) DWORD WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR); DWORD WINAPI TakeOwnershipOfFile(PCWSTR); PSTR WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage); BOOL WINAPI UnmapAndCloseFile(HANDLE, HANDLE, PVOID); #ifdef __cplusplus } #endif #undef DECL_WINELIB_SETUPAPI_TYPE_AW #include #endif /* _INC_SETUPAPI */ ================================================ FILE: wine/windows/sfc.h ================================================ /* * Definitions for the System File Checker (Windows File Protection) * * Copyright 2006 Detlef Riekenberg * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SFC_H #define __WINE_SFC_H #ifdef __cplusplus extern "C" { #endif /* Types */ typedef struct _PROTECTED_FILE_DATA { WCHAR FileName[MAX_PATH]; DWORD FileNumber; } PROTECTED_FILE_DATA, *PPROTECTED_FILE_DATA; /* Functions */ BOOL WINAPI SfcGetNextProtectedFile(HANDLE, PPROTECTED_FILE_DATA); BOOL WINAPI SfcIsFileProtected(HANDLE, LPCWSTR); BOOL WINAPI SfcIsKeyProtected(HKEY, LPCWSTR, REGSAM); BOOL WINAPI SfpVerifyFile(LPCSTR, LPSTR, DWORD); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/shdeprecated.idl ================================================ /* * Deprecated shell interfaces * * Copyright (C) 2010 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "ocidl.idl"; import "shtypes.idl"; import "shobjidl.idl"; import "hlink.idl"; import "exdisp.idl"; cpp_quote("#define TLOG_BACK -1") cpp_quote("#define TLOG_FORE 1") cpp_quote("#define TLMENUF_INCLUDECURRENT 0x00000001") cpp_quote("#define TLMENUF_CHECKCURRENT (TLMENUF_INCLUDECURRENT | 0x00000002)") cpp_quote("#define TLMENUF_BACK 0x00000010") cpp_quote("#define TLMENUF_FORE 0x00000020") cpp_quote("#define TLMENUF_BACKANDFORTH (TLMENUF_BACK | TLMENUF_FORE | TLMENUF_INCLUDECURRENT)") [ hidden, local, object, uuid(F46EDB3B-BC2F-11d0-9412-00AA00A3EBD3) ] interface ITravelEntry : IUnknown { HRESULT Invoke( [in] IUnknown *punk); HRESULT Update( [in] IUnknown *punk, [in] BOOL fIsLocalAnchor); HRESULT GetPidl( [out] LPITEMIDLIST *ppidl); } [ hidden, local, object, uuid(66A9CB08-4802-11d2-A561-00A0C92DBFE8) ] interface ITravelLog : IUnknown { HRESULT AddEntry( [in] IUnknown *punk, [in] BOOL fIsLocalAnchor); HRESULT UpdateEntry( [in] IUnknown *punk, [in] BOOL fIsLocalAnchor); HRESULT UpdateExternal( [in] IUnknown *punk, [in] IUnknown *punkHLBrowseContext); HRESULT Travel( [in] IUnknown *punk, [in] int iOffset); HRESULT GetTravelEntry( [in] IUnknown *punk, [in] int iOffset, [optional, out] ITravelEntry **ppte); HRESULT FindTravelEntry( [in] IUnknown *punk, [in] LPCITEMIDLIST pidl, [out] ITravelEntry **ppte); HRESULT GetToolTipText( [in] IUnknown *punk, [in] int iOffset, [in] int idsTemplate, [out, size_is(cchText)] LPWSTR pwzText, [in] DWORD cchText); HRESULT InsertMenuEntries( [in] IUnknown *punk, [in] HMENU hmenu, [in] int nPos, [in] int idFirst, [in] int idLast, [in] DWORD dwFlags); HRESULT Clone( [out] ITravelLog **pptl); DWORD CountEntries( [in] IUnknown *punk); HRESULT Revert(); } typedef void *CIE4ConnectionPoint; [ local, object, uuid(0D7D1D00-6FC0-11D0-A974-00C04FD705A2) ] interface IExpDispSupport : IUnknown { HRESULT FindCIE4ConnectionPoint( REFIID riid, CIE4ConnectionPoint **ppccp); HRESULT OnTranslateAccelerator( MSG *pMsg, DWORD grfModifiers); HRESULT OnInvoke( DISPID dispidMember, REFIID iid, LCID lcid, WORD wFlags, DISPPARAMS *pdispparams, VARIANT *pVarResult, EXCEPINFO *pexcepinfo, UINT *puArgErr); } typedef enum tagBNSTATE { BNS_NORMAL = 0, BNS_BEGIN_NAVIGATE = 1, BNS_NAVIGATE = 2 } BNSTATE; enum { SBSC_HIDE = 0, SBSC_SHOW = 1, SBSC_TOGGLE = 2, SBSC_QUERY = 3 }; cpp_quote("#define BSF_REGISTERASDROPTARGET 0x00000001") cpp_quote("#define BSF_THEATERMODE 0x00000002") cpp_quote("#define BSF_NOLOCALFILEWARNING 0x00000010") cpp_quote("#define BSF_UISETBYAUTOMATION 0x00000100") cpp_quote("#define BSF_RESIZABLE 0x00000200") cpp_quote("#define BSF_CANMAXIMIZE 0x00000400") cpp_quote("#define BSF_TOPBROWSER 0x00000800") cpp_quote("#define BSF_NAVNOHISTORY 0x00001000") cpp_quote("#define BSF_HTMLNAVCANCELED 0x00002000") cpp_quote("#define BSF_DONTSHOWNAVCANCELPAGE 0x00004000") cpp_quote("#define BSF_SETNAVIGATABLECODEPAGE 0x00008000") cpp_quote("#define BSF_DELEGATEDNAVIGATION 0x00010000") cpp_quote("#define BSF_TRUSTEDFORACTIVEX 0x00020000") cpp_quote("#define HLNF_CALLERUNTRUSTED 0x00200000") cpp_quote("#define HLNF_TRUSTEDFORACTIVEX 0x00400000") cpp_quote("#define HLNF_DISABLEWINDOWRESTRICTIONS 0x00800000") cpp_quote("#define HLNF_TRUSTFIRSTDOWNLOAD 0x01000000") cpp_quote("#define HLNF_UNTRUSTEDFORDOWNLOAD 0x02000000") cpp_quote("#define SHHLNF_NOAUTOSELECT 0x04000000") cpp_quote("#define SHHLNF_WRITENOHISTORY 0x08000000") cpp_quote("#define HLNF_EXTERNALNAVIGATE 0x10000000") cpp_quote("#define HLNF_ALLOW_AUTONAVIGATE 0x20000000") cpp_quote("#define HLNF_NEWWINDOWSMANAGED 0x80000000") [ local, object, uuid(02ba3b52-0547-11d1-b833-00c04fc9b31f) ] interface IBrowserService : IUnknown { HRESULT GetParentSite( [out] IOleInPlaceSite **ppipsite); HRESULT SetTitle( [in] IShellView *psv, [in] LPCWSTR pszName); HRESULT GetTitle( [in] IShellView *psv, [out, size_is(cchName)] LPWSTR pszName, [in] DWORD cchName); HRESULT GetOleObject( [out] IOleObject **ppobjv); HRESULT GetTravelLog( [out, optional] ITravelLog **pptl); HRESULT ShowControlWindow( [in] UINT id, [in] BOOL fShow); HRESULT IsControlWindowShown( [in] UINT id, [out] BOOL *pfShown); HRESULT IEGetDisplayName( [in] PCIDLIST_ABSOLUTE pidl, [out] LPWSTR pwszName, [in] UINT uFlags); HRESULT IEParseDisplayName( [in] UINT uiCP, [in] LPCWSTR pwszPath, [out] PIDLIST_ABSOLUTE *ppidlOut); HRESULT DisplayParseError( [in] HRESULT hres, [in] LPCWSTR pwszPath); HRESULT NavigateToPidl( [in] PCIDLIST_ABSOLUTE pidl, [in] DWORD grfHLNF); HRESULT SetNavigateState( [in] BNSTATE bnstate); HRESULT GetNavigateState( [out] BNSTATE *pbnstate); HRESULT NotifyRedirect( [in] IShellView *psv, [in] PCIDLIST_ABSOLUTE pidl, [out] BOOL *pfDidBrowse); HRESULT UpdateWindowList(); HRESULT UpdateBackForwardState(); HRESULT SetFlags( [in] DWORD dwFlags, [in] DWORD dwFlagMask); HRESULT GetFlags( [out] DWORD *pdwFlags); HRESULT CanNavigateNow(); HRESULT GetPidl( [out] PIDLIST_ABSOLUTE *ppidl); HRESULT SetReferrer( [in] PCIDLIST_ABSOLUTE pidl); DWORD GetBrowserIndex(); HRESULT GetBrowserByIndex( [in] DWORD dwID, [out] IUnknown **ppunk); HRESULT GetHistoryObject( [out] IOleObject **ppole, [out] IStream **pstm, [out] IBindCtx **ppbc); HRESULT SetHistoryObject( [in] IOleObject *pole, [in] BOOL fIsLocalAnchor); HRESULT CacheOLEServer( [in] IOleObject *pole); HRESULT GetSetCodePage( [in] VARIANT *pvarIn, [out] VARIANT *pvarOut); HRESULT OnHttpEquiv( [in] IShellView *psv, [in] BOOL fDone, [in] VARIANT *pvarargIn, [out] VARIANT *pvarargOut); HRESULT GetPalette( [out] HPALETTE *hpal); HRESULT RegisterWindow( [in] BOOL fForceRegister, [in] int swc); } [ object, local, uuid(5836fb00-8187-11cf-a12b-00aa004ae837) ] interface IShellService : IUnknown { HRESULT SetOwner( [in] IUnknown *pUnk ); } cpp_quote("#if 0") typedef HANDLE HMONITOR; cpp_quote("#endif") enum { SECURELOCK_NOCHANGE = -1, SECURELOCK_SET_UNSECURE = 0, SECURELOCK_SET_MIXED = 1, SECURELOCK_SET_SECUREUNKNOWNBIT = 2, SECURELOCK_SET_SECURE40BIT = 3, SECURELOCK_SET_SECURE56BIT = 4, SECURELOCK_SET_FORTEZZA = 5, SECURELOCK_SET_SECURE128BIT = 6, SECURELOCK_FIRSTSUGGEST = 7, SECURELOCK_SUGGEST_UNSECURE = SECURELOCK_FIRSTSUGGEST, SECURELOCK_SUGGEST_MIXED = 8, SECURELOCK_SUGGEST_SECUREUNKNOWNBIT = 9, SECURELOCK_SUGGEST_SECURE40BIT = 10, SECURELOCK_SUGGEST_SECURE56BIT = 11, SECURELOCK_SUGGEST_FORTEZZA = 12, SECURELOCK_SUGGEST_SECURE128BIT = 13, }; typedef struct { HWND _hwnd; ITravelLog *_ptl; IHlinkFrame *_phlf; IWebBrowser2 *_pautoWB2; IExpDispSupport *_pautoEDS; IShellService *_pautoSS; int _eSecureLockIcon; DWORD _fCreatingViewWindow; UINT _uActivateState; LPCITEMIDLIST _pidlNewShellView; IOleCommandTarget *_pctView; LPITEMIDLIST _pidlCur; IShellView *_psv; IShellFolder *_psf; HWND _hwndView; LPWSTR _pszTitleCur; LPITEMIDLIST _pidlPending; IShellView *_psvPending; IShellFolder *_psfPending; HWND _hwndViewPending; LPWSTR _pszTitlePending; BOOL _fIsViewMSHTML; BOOL _fPrivacyImpacted; } BASEBROWSERDATA, *LPBASEBROWSERDATA; typedef const BASEBROWSERDATA *LPCBASEBROWSERDATA; cpp_quote("#define VIEW_PRIORITY_RESTRICTED 0x00000070") cpp_quote("#define VIEW_PRIORITY_CACHEHIT 0x00000050") cpp_quote("#define VIEW_PRIORITY_STALECACHEHIT 0x00000045") cpp_quote("#define VIEW_PRIORITY_USEASDEFAULT 0x00000043") cpp_quote("#define VIEW_PRIORITY_SHELLEXT 0x00000040") cpp_quote("#define VIEW_PRIORITY_CACHEMISS 0x00000030") cpp_quote("#define VIEW_PRIORITY_INHERIT 0x00000020") cpp_quote("#define VIEW_PRIORITY_SHELLEXT_ASBACKUP 0x0015") cpp_quote("#define VIEW_PRIORITY_DESPERATE 0x00000010") cpp_quote("#define VIEW_PRIORITY_NONE 0x00000000") typedef struct tagFolderSetData { FOLDERSETTINGS _fs; SHELLVIEWID _vidRestore; DWORD _dwViewPriority; } FOLDERSETDATA, *LPFOLDERSETDATA; typedef struct SToolbarItem { IDockingWindow *ptbar; BORDERWIDTHS rcBorderTool; LPWSTR pwszItem; BOOL fShow; HMONITOR hMon; } TOOLBARITEM, *LPTOOLBARITEM; cpp_quote("#define ITB_VIEW ((UINT)-1)") [ local, object, uuid(68BD21CC-438B-11d2-A560-00A0C92DBFE8) ] interface IBrowserService2 : IBrowserService { LRESULT WndProcBS( [in] HWND hwnd, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam); HRESULT SetAsDefFolderSettings(); HRESULT GetViewRect( [in, out] RECT *prc); HRESULT OnSize( [in] WPARAM wParam); HRESULT OnCreate( [in] struct tagCREATESTRUCTW *pcs); LRESULT OnCommand( [in] WPARAM wParam, [in] LPARAM lParam); HRESULT OnDestroy(); LRESULT OnNotify( [in, out] struct tagNMHDR *pnm); HRESULT OnSetFocus(); HRESULT OnFrameWindowActivateBS( [in] BOOL fActive); HRESULT ReleaseShellView(); HRESULT ActivatePendingView(); HRESULT CreateViewWindow( [in] IShellView *psvNew, [in] IShellView *psvOld, [out] LPRECT prcView, [out] HWND *phwnd); HRESULT CreateBrowserPropSheetExt( [in] REFIID riid, [out] void **ppv); HRESULT GetViewWindow( [out] HWND *phwndView); HRESULT GetBaseBrowserData( [in, out] LPCBASEBROWSERDATA *pbbd); LPBASEBROWSERDATA PutBaseBrowserData(); HRESULT InitializeTravelLog( [in] ITravelLog *ptl, [in] DWORD dw); HRESULT SetTopBrowser(); HRESULT Offline( [in] int iCmd); HRESULT AllowViewResize( [in] BOOL f); HRESULT SetActivateState( [in] UINT u); HRESULT UpdateSecureLockIcon( [in] int eSecureLock); HRESULT InitializeDownloadManager(); HRESULT InitializeTransitionSite(); HRESULT _Initialize( [in] HWND hwnd, [in] IUnknown *pauto); HRESULT _CancelPendingNavigationAsync(); HRESULT _CancelPendingView(); HRESULT _MaySaveChanges(); HRESULT _PauseOrResumeView( [in] BOOL fPaused); HRESULT _DisableModeless(); HRESULT _NavigateToPidl( [in] LPCITEMIDLIST pidl, [in] DWORD grfHLNF, [in] DWORD dwFlags); HRESULT _TryShell2Rename( [in] IShellView *psv, [in] LPCITEMIDLIST pidlNew); HRESULT _SwitchActivationNow(); HRESULT _ExecChildren( [in] IUnknown *punkBar, [in] BOOL fBroadcast, [in] const GUID *pguidCmdGroup, [in] DWORD nCmdID, [in] DWORD nCmdexecopt, [in] VARIANTARG *pvarargIn, [in, out] VARIANTARG *pvarargOut); HRESULT _SendChildren( [in] HWND hwndBar, [in] BOOL fBroadcast, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam); HRESULT GetFolderSetData( [in, out] struct tagFolderSetData *pfsd); HRESULT _OnFocusChange( [in] UINT itb); HRESULT v_ShowHideChildWindows( [in] BOOL fChildOnly); UINT _get_itbLastFocus(); HRESULT _put_itbLastFocus( [in] UINT itbLastFocus); HRESULT _UIActivateView( [in] UINT uState); HRESULT _GetViewBorderRect( [in, out] RECT* prc); HRESULT _UpdateViewRectSize(); HRESULT _ResizeNextBorder( [in] UINT itb); HRESULT _ResizeView(); HRESULT _GetEffectiveClientArea( [in, out] LPRECT lprectBorder, [in] HMONITOR hmon); IStream* v_GetViewStream( [in] LPCITEMIDLIST pidl, [in] DWORD grfMode, [in] LPCWSTR pwszName); LRESULT ForwardViewMsg( [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam); HRESULT SetAcceleratorMenu( [in] HACCEL hacc); int _GetToolbarCount(); LPTOOLBARITEM _GetToolbarItem( [in] int itb); HRESULT _SaveToolbars( [in] IStream *pstm); HRESULT _LoadToolbars( [in] IStream *pstm); HRESULT _CloseAndReleaseToolbars( [in] BOOL fClose); HRESULT v_MayGetNextToolbarFocus( [in] LPMSG lpMsg, [in] UINT itbNext, [in] int citb, [out] LPTOOLBARITEM *pptbi, [out] HWND *phwnd); HRESULT _ResizeNextBorderHelper( [in] UINT itb, [in] BOOL bUseHmonitor); UINT _FindTBar( [in] IUnknown *punkSrc); HRESULT _SetFocus( [in] LPTOOLBARITEM ptbi, [in] HWND hwnd, [in] LPMSG lpMsg); HRESULT v_MayTranslateAccelerator( [in] MSG* pmsg); HRESULT _GetBorderDWHelper( [in] IUnknown *punkSrc, [in] LPRECT lprectBorder, [in] BOOL bUseHmonitor); HRESULT v_CheckZoneCrossing( [in, out] LPCITEMIDLIST pidl); } ================================================ FILE: wine/windows/shdispid.h ================================================ /* * DispIds for Shell Interfaces * * Copyright (C) 2008 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _SHDISPID_H_ #define _SHDISPID_H_ #define DISPID_SELECTIONCHANGED 200 #define DISPID_FILELISTENUMDONE 201 #define DISPID_VERBINVOKED 202 #define DISPID_DEFAULTVERBINVOKED 203 #define DISPID_BEGINDRAG 204 #endif /* defined _SHDISPID_H_ */ ================================================ FILE: wine/windows/shellapi.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SHELLAPI_H #define __WINE_SHELLAPI_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifndef _WIN64 #include #endif DECLARE_HANDLE(HDROP); /****************************************** * DragObject */ typedef struct _DRAGINFOA { UINT uSize; POINT pt; BOOL fNC; LPSTR lpFileList; DWORD grfKeyState; } DRAGINFOA, *LPDRAGINFOA; typedef struct _DRAGINFOW { UINT uSize; POINT pt; BOOL fNC; LPWSTR lpFileList; DWORD grfKeyState; } DRAGINFOW, *LPDRAGINFOW; DECL_WINELIB_TYPE_AW(DRAGINFO) DECL_WINELIB_TYPE_AW(LPDRAGINFO) void WINAPI DragAcceptFiles(HWND hWnd, BOOL b); UINT WINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength); UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lLength); #define DragQueryFile WINELIB_NAME_AW(DragQueryFile) void WINAPI DragFinish(HDROP h); BOOL WINAPI DragQueryPoint(HDROP hDrop, POINT *p); /****************************************** * Application Bar */ #define ABM_NEW 0x00000000 #define ABM_REMOVE 0x00000001 #define ABM_QUERYPOS 0x00000002 #define ABM_SETPOS 0x00000003 #define ABM_GETSTATE 0x00000004 #define ABM_GETTASKBARPOS 0x00000005 #define ABM_ACTIVATE 0x00000006 #define ABM_GETAUTOHIDEBAR 0x00000007 #define ABM_SETAUTOHIDEBAR 0x00000008 #define ABM_WINDOWPOSCHANGED 0x00000009 #define ABN_STATECHANGE 0x00000000 #define ABN_POSCHANGED 0x00000001 #define ABN_FULLSCREENAPP 0x00000002 #define ABN_WINDOWARRANGE 0x00000003 #define ABS_AUTOHIDE 0x00000001 #define ABS_ALWAYSONTOP 0x00000002 #define ABE_LEFT 0 #define ABE_TOP 1 #define ABE_RIGHT 2 #define ABE_BOTTOM 3 typedef struct _AppBarData { DWORD cbSize; HWND hWnd; UINT uCallbackMessage; UINT uEdge; RECT rc; LPARAM lParam; } APPBARDATA, *PAPPBARDATA; UINT_PTR WINAPI SHAppBarMessage(DWORD,PAPPBARDATA); /****************************************** * SHGetFileInfo */ #define SHGFI_LARGEICON 0x000000000 /* get large icon */ #define SHGFI_SMALLICON 0x000000001 /* get small icon */ #define SHGFI_OPENICON 0x000000002 /* get open icon */ #define SHGFI_SHELLICONSIZE 0x000000004 /* get shell size icon */ #define SHGFI_PIDL 0x000000008 /* pszPath is a pidl */ #define SHGFI_USEFILEATTRIBUTES 0x000000010 /* use passed dwFileAttribute */ #define SHGFI_ADDOVERLAYS 0x000000020 #define SHGFI_OVERLAYINDEX 0x000000040 #define SHGFI_ICON 0x000000100 /* get icon */ #define SHGFI_DISPLAYNAME 0x000000200 /* get display name */ #define SHGFI_TYPENAME 0x000000400 /* get type name */ #define SHGFI_ATTRIBUTES 0x000000800 /* get attributes */ #define SHGFI_ICONLOCATION 0x000001000 /* get icon location */ #define SHGFI_EXETYPE 0x000002000 /* return exe type */ #define SHGFI_SYSICONINDEX 0x000004000 /* get system icon index */ #define SHGFI_LINKOVERLAY 0x000008000 /* put a link overlay on icon */ #define SHGFI_SELECTED 0x000010000 /* show icon in selected state */ #define SHGFI_ATTR_SPECIFIED 0x000020000 /* get only specified attributes */ typedef struct tagSHFILEINFOA { HICON hIcon; /* icon */ int iIcon; /* icon index */ DWORD dwAttributes; /* SFGAO_ flags */ CHAR szDisplayName[MAX_PATH];/* display name (or path) */ CHAR szTypeName[80]; /* type name */ } SHFILEINFOA; typedef struct tagSHFILEINFOW { HICON hIcon; /* icon */ int iIcon; /* icon index */ DWORD dwAttributes; /* SFGAO_ flags */ WCHAR szDisplayName[MAX_PATH];/* display name (or path) */ WCHAR szTypeName[80]; /* type name */ } SHFILEINFOW; DECL_WINELIB_TYPE_AW(SHFILEINFO) DWORD_PTR WINAPI SHGetFileInfoA(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT); DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT); #define SHGetFileInfo WINELIB_NAME_AW(SHGetFileInfo) /****************************************** * SHGetImageList */ HRESULT WINAPI SHGetImageList(INT, REFIID, void **); #define SHIL_LARGE 0x0 #define SHIL_SMALL 0x1 #define SHIL_EXTRALARGE 0x2 #define SHIL_SYSSMALL 0x3 #define SHIL_JUMBO 0x4 #define SHIL_LAST SHIL_JUMBO /****************************************** * SHSetFileInfo */ /****************************************** * SHFileOperation */ #define FO_MOVE 0x0001 #define FO_COPY 0x0002 #define FO_DELETE 0x0003 #define FO_RENAME 0x0004 #define FOF_MULTIDESTFILES 0x0001 #define FOF_CONFIRMMOUSE 0x0002 #define FOF_SILENT 0x0004 #define FOF_RENAMEONCOLLISION 0x0008 #define FOF_NOCONFIRMATION 0x0010 #define FOF_WANTMAPPINGHANDLE 0x0020 #define FOF_ALLOWUNDO 0x0040 #define FOF_FILESONLY 0x0080 #define FOF_SIMPLEPROGRESS 0x0100 #define FOF_NOCONFIRMMKDIR 0x0200 #define FOF_NOERRORUI 0x0400 #define FOF_NOCOPYSECURITYATTRIBS 0x0800 #define FOF_NORECURSION 0x1000 /* don't do recursion into directories */ #define FOF_NO_CONNECTED_ELEMENTS 0x2000 /* don't do connected files */ #define FOF_WANTNUKEWARNING 0x4000 /* during delete operation, warn if delete instead of recycling (even if FOF_NOCONFIRMATION) */ #define FOF_NORECURSEREPARSE 0x8000 /* don't do recursion into reparse points */ #define FOF_NO_UI (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR) typedef WORD FILEOP_FLAGS; #define PO_DELETE 0x0013 #define PO_RENAME 0x0014 #define PO_PORTCHANGE 0x0020 #define PO_REN_PORT (PO_RENAME | PO_PORTCHANGE) typedef WORD PRINTEROP_FLAGS; typedef struct _SHFILEOPSTRUCTA { HWND hwnd; UINT wFunc; LPCSTR pFrom; LPCSTR pTo; FILEOP_FLAGS fFlags; BOOL fAnyOperationsAborted; LPVOID hNameMappings; LPCSTR lpszProgressTitle; } SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA; typedef struct _SHFILEOPSTRUCTW { HWND hwnd; UINT wFunc; LPCWSTR pFrom; LPCWSTR pTo; FILEOP_FLAGS fFlags; BOOL fAnyOperationsAborted; LPVOID hNameMappings; LPCWSTR lpszProgressTitle; } SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW; #define SHFILEOPSTRUCT WINELIB_NAME_AW(SHFILEOPSTRUCT) #define LPSHFILEOPSTRUCT WINELIB_NAME_AW(LPSHFILEOPSTRUCT) int WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp); int WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp); #define SHFileOperation WINELIB_NAME_AW(SHFileOperation) typedef struct _SHNAMEMAPPINGA { LPSTR pszOldPath; LPSTR pszNewPath; int cchOldPath; int cchNewPath; } SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA; typedef struct _SHNAMEMAPPINGW { LPWSTR pszOldPath; LPWSTR pszNewPath; int cchOldPath; int cchNewPath; } SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW; DECL_WINELIB_TYPE_AW(SHNAMEMAPPING) DECL_WINELIB_TYPE_AW(LPSHNAMEMAPPING) void WINAPI SHFreeNameMappings(HANDLE hNameMappings); /****************************************** * ShellExecute */ HINSTANCE WINAPI ShellExecuteA(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT); HINSTANCE WINAPI ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT); #define ShellExecute WINELIB_NAME_AW(ShellExecute) #define SE_ERR_FNF 2 /* file not found */ #define SE_ERR_PNF 3 /* path not found */ #define SE_ERR_ACCESSDENIED 5 /* access denied */ #define SE_ERR_OOM 8 /* out of memory */ #define SE_ERR_DLLNOTFOUND 32 #define SE_ERR_SHARE 26 #define SE_ERR_ASSOCINCOMPLETE 27 #define SE_ERR_DDETIMEOUT 28 #define SE_ERR_DDEFAIL 29 #define SE_ERR_DDEBUSY 30 #define SE_ERR_NOASSOC 31 #define SEE_MASK_DEFAULT 0x00000000 #define SEE_MASK_CLASSNAME 0x00000001 #define SEE_MASK_CLASSKEY 0x00000003 #define SEE_MASK_IDLIST 0x00000004 #define SEE_MASK_INVOKEIDLIST 0x0000000c #define SEE_MASK_ICON 0x00000010 #define SEE_MASK_HOTKEY 0x00000020 #define SEE_MASK_NOCLOSEPROCESS 0x00000040 #define SEE_MASK_CONNECTNETDRV 0x00000080 #define SEE_MASK_NOASYNC 0x00000100 #define SEE_MASK_FLAG_DDEWAIT SEE_MASK_NOASYNC #define SEE_MASK_DOENVSUBST 0x00000200 #define SEE_MASK_FLAG_NO_UI 0x00000400 #define SEE_MASK_UNICODE 0x00004000 #define SEE_MASK_NO_CONSOLE 0x00008000 #define SEE_MASK_ASYNCOK 0x00100000 #define SEE_MASK_HMONITOR 0x00200000 #define SEE_MASK_NOZONECHECKS 0x00800000 #define SEE_MASK_NOQUERYCLASSSTORE 0x01000000 #define SEE_MASK_WAITFORINPUTIDLE 0x02000000 #define SEE_MASK_FLAG_LOG_USAGE 0x04000000 typedef struct _SHELLEXECUTEINFOA { DWORD cbSize; ULONG fMask; HWND hwnd; LPCSTR lpVerb; LPCSTR lpFile; LPCSTR lpParameters; LPCSTR lpDirectory; INT nShow; HINSTANCE hInstApp; /* Optional fields */ LPVOID lpIDList; LPCSTR lpClass; HKEY hkeyClass; DWORD dwHotKey; union { HANDLE hIcon; HANDLE hMonitor; } DUMMYUNIONNAME; HANDLE hProcess; } SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA; typedef struct _SHELLEXECUTEINFOW { DWORD cbSize; ULONG fMask; HWND hwnd; LPCWSTR lpVerb; LPCWSTR lpFile; LPCWSTR lpParameters; LPCWSTR lpDirectory; INT nShow; HINSTANCE hInstApp; /* Optional fields*/ LPVOID lpIDList; LPCWSTR lpClass; HKEY hkeyClass; DWORD dwHotKey; union { HANDLE hIcon; HANDLE hMonitor; } DUMMYUNIONNAME; HANDLE hProcess; } SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW; #define SHELLEXECUTEINFO WINELIB_NAME_AW(SHELLEXECUTEINFO) #define LPSHELLEXECUTEINFO WINELIB_NAME_AW(LPSHELLEXECUTEINFO) BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo); BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo); #define ShellExecuteEx WINELIB_NAME_AW(ShellExecuteEx) void WINAPI WinExecErrorA(HWND hwnd,INT error, LPCSTR lpstrFileName, LPCSTR lpstrTitle); void WINAPI WinExecErrorW(HWND hwnd,INT error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle); #define WinExecError WINELIB_NAME_AW(WinExecError) /****************************************** * Tray Notification */ /* notifyicondata.uFlags values*/ #define NIF_MESSAGE 0x00000001 #define NIF_ICON 0x00000002 #define NIF_TIP 0x00000004 #define NIF_STATE 0x00000008 #define NIF_INFO 0x00000010 #define NIF_GUID 0x00000020 #define NIF_REALTIME 0x00000040 #define NIF_SHOWTIP 0x00000080 /* notifyicondata.dwState values */ #define NIS_HIDDEN 0x00000001 #define NIS_SHAREDICON 0x00000002 /* notifyicondata.dwInfoFlags values */ #define NIIF_NONE 0x00000000 #define NIIF_INFO 0x00000001 #define NIIF_WARNING 0x00000002 #define NIIF_ERROR 0x00000003 #define NIIF_USER 0x00000004 #define NIIF_ICONMASK 0x0000000f #define NIIF_NOSOUND 0x00000010 #define NIIF_LARGEICON 0x00000020 /* dwMessage values */ #define NIM_ADD 0x00000000 #define NIM_MODIFY 0x00000001 #define NIM_DELETE 0x00000002 #define NIM_SETFOCUS 0x00000003 #define NIM_SETVERSION 0x00000004 #define NOTIFY_VERSION 3 /* supported by Windows 2000 and later */ #define NOTIFY_VERSION_4 4 /* supported by Windows Vista */ /* callback message lParam values */ #define NIN_SELECT (WM_USER+0) #define NINF_KEY 1 #define NIN_KEYSELECT (NIN_SELECT|NINF_KEY) /* WM_USER+1 */ #define NIN_BALOONSHOW (WM_USER+2) #define NIN_BALOONHIDE (WM_USER+3) #define NIN_BALOONTIMEOUT (WM_USER+4) #define NIN_BALOONCLICK (WM_USER+5) #define NIN_POPUPOPEN (WM_USER+6) #define NIN_POPUPCLOSE (WM_USER+7) typedef struct _NOTIFYICONDATAA { DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; HICON hIcon; CHAR szTip[128]; DWORD dwState; DWORD dwStateMask; CHAR szInfo[256]; union { UINT uTimeout; UINT uVersion; } DUMMYUNIONNAME; CHAR szInfoTitle[64]; DWORD dwInfoFlags; GUID guidItem; HICON hBalloonIcon; } NOTIFYICONDATAA, *PNOTIFYICONDATAA; typedef struct _NOTIFYICONDATAW { DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; HICON hIcon; WCHAR szTip[128]; DWORD dwState; DWORD dwStateMask; WCHAR szInfo[256]; union { UINT uTimeout; UINT uVersion; } DUMMYUNIONNAME; WCHAR szInfoTitle[64]; DWORD dwInfoFlags; GUID guidItem; HICON hBalloonIcon; } NOTIFYICONDATAW, *PNOTIFYICONDATAW; typedef struct _NOTIFYICONIDENTIFIER { DWORD cbSize; HWND hWnd; UINT uID; GUID guidItem; } NOTIFYICONIDENTIFIER, *PNOTIFYICONIDENTIFIER; DECL_WINELIB_TYPE_AW(NOTIFYICONDATA) DECL_WINELIB_TYPE_AW(PNOTIFYICONDATA) BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData); BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData); #define Shell_NotifyIcon WINELIB_NAME_AW(Shell_NotifyIcon) HRESULT WINAPI Shell_NotifyIconGetRect(const NOTIFYICONIDENTIFIER* identifier, RECT* iconLocation); /* pre IE 5.0 */ #define NOTIFYICONDATAA_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAA, szTip[64]) #define NOTIFYICONDATAW_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAW, szTip[64]) /* pre Window XP */ #define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem) #define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem) /* pre Window Vista */ #define NOTIFYICONDATAA_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon) #define NOTIFYICONDATAW_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon) /****************************************** * Links */ #define SHGNLI_PIDL 0x01 #define SHGNLI_PREFIXNAME 0x02 #define SHGNLI_NOUNIQUE 0x04 #define SHGNLI_NOLNK 0x08 BOOL WINAPI SHGetNewLinkInfoA(LPCSTR,LPCSTR,LPSTR,BOOL*,UINT); BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR,LPCWSTR,LPWSTR,BOOL*,UINT); #define SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo) /****************************************** * Recycle bin */ typedef struct _SHQUERYRBINFO { DWORD cbSize; DWORDLONG i64Size; DWORDLONG i64NumItems; } SHQUERYRBINFO, *LPSHQUERYRBINFO; HRESULT WINAPI SHEmptyRecycleBinA(HWND,LPCSTR,DWORD); HRESULT WINAPI SHEmptyRecycleBinW(HWND,LPCWSTR,DWORD); #define SHEmptyRecycleBin WINELIB_NAME_AW(SHEmptyRecycleBin) HRESULT WINAPI SHQueryRecycleBinA(LPCSTR,LPSHQUERYRBINFO); HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR,LPSHQUERYRBINFO); #define SHQueryRecycleBin WINELIB_NAME_AW(SHQueryRecycleBin) /****************************************** * Misc */ typedef enum { QUNS_NOT_PRESENT = 1, QUNS_BUSY = 2, QUNS_RUNNING_D3D_FULL_SCREEN = 3, QUNS_PRESENTATION_MODE = 4, QUNS_ACCEPTS_NOTIFICATIONS = 5, QUNS_QUIET_TIME = 6, QUNS_APP = 7 } QUERY_USER_NOTIFICATION_STATE; HRESULT WINAPI SHQueryUserNotificationState(QUERY_USER_NOTIFICATION_STATE*); typedef enum SHSTOCKICONID { SIID_INVALID=-1, SIID_DOCNOASSOC, SIID_DOCASSOC, SIID_APPLICATION, SIID_FOLDER, SIID_FOLDEROPEN, SIID_DRIVE525, SIID_DRIVE35, SIID_DRIVERREMOVE, SIID_DRIVERFIXED, SIID_DRIVERNET, SIID_DRIVERNETDISABLE, SIID_DRIVERCD, SIID_DRIVERRAM, SIID_WORLD, /* Missing: 14 */ SIID_SERVER = 15, SIID_PRINTER, SIID_MYNETWORK, /* Missing: 18 - 21 */ SIID_FIND = 22, SIID_HELP, /* Missing: 24 - 27 */ SIID_SHARE = 28, SIID_LINK, SIID_SLOWFILE, SIID_RECYCLER, SIID_RECYCLERFULL, /* Missing: 33 - 39 */ SIID_MEDIACDAUDIO = 40, /* Missing: 41 - 46 */ SIID_LOCK = 47, /* Missing: 48 */ SIID_AUTOLIST = 49, SIID_PRINTERNET, SIID_SERVERSHARE, SIID_PRINTERFAX, SIID_PRINTERFAXNET, SIID_PRINTERFILE, SIID_STACK, SIID_MEDIASVCD, SIID_STUFFEDFOLDER, SIID_DRIVEUNKNOWN, SIID_DRIVEDVD, SIID_MEDIADVD, SIID_MEDIADVDRAM, SIID_MEDIADVDRW, SIID_MEDIADVDR, SIID_MEDIADVDROM, SIID_MEDIACDAUDIOPLUS, SIID_MEDIACDRW, SIID_MEDIACDR, SIID_MEDIACDBURN, SIID_MEDIABLANKCD, SIID_MEDIACDROM, SIID_AUDIOFILES, SIID_IMAGEFILES, SIID_VIDEOFILES, SIID_MIXEDFILES, SIID_FOLDERBACK, SIID_FOLDERFRONT, SIID_SHIELD, SIID_WARNING, SIID_INFO, SIID_ERROR, SIID_KEY, SIID_SOFTWARE, SIID_RENAME, SIID_DELETE, SIID_MEDIAAUDIODVD, SIID_MEDIAMOVIEDVD, SIID_MEDIAENHANCEDCD, SIID_MEDIAENHANCEDDVD, SIID_MEDIAHDDVD, SIID_MEDIABLUERAY, SIID_MEDIAVCD, SIID_MEDIADVDPLUSR, SIID_MEDIADVDPLUSRW, SIID_DESKTOPPC, SIID_MOBILEPC, SIID_USERS, SIID_MEDIASMARTMEDIA, SIID_MEDIACOMPACTFLASH, SIID_DEVICECELLPHONE, SIID_DEVICECAMERA, SIID_DEVICEVIDEOCAMERA, SIID_DEVICEAUDIOPLAYER, SIID_NETWORKCONNECT, SIID_INTERNET, SIID_ZIPFILE, SIID_SETTINGS, /* Missing: 107 - 131 */ SIID_DRIVEHDDVD = 132, SIID_DRIVEBD, SIID_MEDIAHDDVDROM, SIID_MEDIAHDDVDR, SIID_MEDIAHDDVDRAM, SIID_MEDIABDROM, SIID_MEDIABDR, SIID_MEDIABDRE, SIID_CLUSTEREDDRIVE, /* Missing: 141 - 180 */ SIID_MAX_ICONS = 181 }SHSTOCKICONID; typedef struct _SHSTOCKICONINFO { DWORD cbSize; HICON hIcon; INT iSysImageIndex; INT iIcon; WCHAR szPath[MAX_PATH]; } SHSTOCKICONINFO; /* flags for SHGetStockIconInfo */ #define SHGSI_ICONLOCATION 0 #define SHGSI_ICON SHGFI_ICON #define SHGSI_SYSICONINDEX SHGFI_SYSICONINDEX #define SHGSI_LINKOVERLAY SHGFI_LINKOVERLAY #define SHGSI_SELECTED SHGFI_SELECTED #define SHGSI_LARGEICON SHGFI_LARGEICON #define SHGSI_SMALLICON SHGFI_SMALLICON #define SHGSI_SHELLICONSIZE SHGFI_SHELLICONSIZE HRESULT WINAPI SHGetStockIconInfo(SHSTOCKICONID, UINT, SHSTOCKICONINFO*); LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR,int*); HICON WINAPI ExtractIconA(HINSTANCE,LPCSTR,UINT); HICON WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT); #define ExtractIcon WINELIB_NAME_AW(ExtractIcon) HICON WINAPI ExtractAssociatedIconA(HINSTANCE,LPSTR,LPWORD); HICON WINAPI ExtractAssociatedIconW(HINSTANCE,LPWSTR,LPWORD); #define ExtractAssociatedIcon WINELIB_NAME_AW(ExtractAssociatedIcon) HICON WINAPI ExtractAssociatedIconExA(HINSTANCE,LPSTR,LPWORD,LPWORD); HICON WINAPI ExtractAssociatedIconExW(HINSTANCE,LPWSTR,LPWORD,LPWORD); #define ExtractAssociatedIconEx WINELIB_NAME_AW(ExtractAssociatedIconEx) UINT WINAPI ExtractIconExA(LPCSTR,INT,HICON*,HICON*,UINT); UINT WINAPI ExtractIconExW(LPCWSTR,INT,HICON*,HICON*,UINT); #define ExtractIconEx WINELIB_NAME_AW(ExtractIconEx) HINSTANCE WINAPI FindExecutableA(LPCSTR,LPCSTR,LPSTR); HINSTANCE WINAPI FindExecutableW(LPCWSTR,LPCWSTR,LPWSTR); #define FindExecutable WINELIB_NAME_AW(FindExecutable) BOOL WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON); BOOL WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON); #define ShellAbout WINELIB_NAME_AW(ShellAbout) int WINAPIV ShellMessageBoxA(HINSTANCE,HWND,LPCSTR,LPCSTR,UINT,...); int WINAPIV ShellMessageBoxW(HINSTANCE,HWND,LPCWSTR,LPCWSTR,UINT,...); #define ShellMessageBox WINELIB_NAME_AW(ShellMessageBox) DWORD WINAPI DoEnvironmentSubstA(LPSTR, UINT); DWORD WINAPI DoEnvironmentSubstW(LPWSTR, UINT); #define DoEnvironmentSubst WINELIB_NAME_AW(DoEnvironmentSubst) HRESULT WINAPI SHEnumerateUnreadMailAccountsA(HKEY,DWORD,LPSTR,INT); HRESULT WINAPI SHEnumerateUnreadMailAccountsW(HKEY,DWORD,LPWSTR,INT); #define SHEnumerateUnreadMailAccounts WINELIB_NAME_AW(SHEnumerateUnreadMailAccounts) HRESULT WINAPI SHGetPropertyStoreForWindow(HWND,REFIID,void **); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #ifndef _WIN64 #include #endif #endif /* __WINE_SHELLAPI_H */ ================================================ FILE: wine/windows/shellscalingapi.h ================================================ /* * Copyright 2016 Sebastian Lackner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SHELLSCALINGAPI_H #define __WINE_SHELLSCALINGAPI_H typedef enum MONITOR_DPI_TYPE { MDT_EFFECTIVE_DPI = 0, MDT_ANGULAR_DPI = 1, MDT_RAW_DPI = 2, MDT_DEFAULT = MDT_EFFECTIVE_DPI, } MONITOR_DPI_TYPE; typedef enum PROCESS_DPI_AWARENESS { PROCESS_DPI_UNAWARE, PROCESS_SYSTEM_DPI_AWARE, PROCESS_PER_MONITOR_DPI_AWARE } PROCESS_DPI_AWARENESS; HRESULT WINAPI GetDpiForMonitor(HMONITOR,MONITOR_DPI_TYPE,UINT*,UINT*); HRESULT WINAPI GetProcessDpiAwareness(HANDLE,PROCESS_DPI_AWARENESS*); HRESULT WINAPI SetProcessDpiAwareness(PROCESS_DPI_AWARENESS); #endif /* __WINE_SHELLSCALINGAPI_H */ ================================================ FILE: wine/windows/shimgdata.idl ================================================ /* * Copyright 2016 Nikolay Sivov For CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "propidl.idl"; cpp_quote("#ifndef _GDIPLUSPIXELFORMATS_H") typedef DWORD PixelFormat; cpp_quote("#endif") cpp_quote("#ifndef _GDIPLUSENUMS_H") typedef DWORD InterpolationMode; cpp_quote("#endif") cpp_quote("#ifndef _GDIPLUSIMAGING_H") typedef BYTE EncoderParameters; cpp_quote("#endif") cpp_quote("#ifndef _GDIPLUSHEADERS_H") typedef BYTE Image; cpp_quote("#endif") cpp_quote("#define SHIMGDEC_DEFAULT 0x0") cpp_quote("#define SHIMGDEC_THUMBNAIL 0x1") cpp_quote("#define SHIMGDEC_LOADFULL 0x2") [ object, uuid(53fb8e58-50c0-4003-b4aa-0c8df28e7f3a) ] interface IShellImageDataAbort : IUnknown { HRESULT QueryAbort(); } [ object, local, uuid(bfdeec12-8040-4403-a5ea-9e07dafcf530) ] interface IShellImageData : IUnknown { HRESULT Decode([in] DWORD flags, [in] ULONG cx_desired, [in] ULONG cy_desired); HRESULT Draw([in] HDC hdc, [in] RECT *dest, [in] RECT *src); HRESULT NextFrame(); HRESULT NextPage(); HRESULT PrevPage(); HRESULT IsTransparent(); HRESULT IsAnimated(); HRESULT IsVector(); HRESULT IsMultipage(); HRESULT IsEditable(); HRESULT IsPrintable(); HRESULT IsDecoded(); HRESULT GetCurrentPage([out] ULONG *page); HRESULT GetPageCount([out] ULONG *count); HRESULT SelectPage([in] ULONG page); HRESULT GetSize([out] SIZE *size); HRESULT GetRawDataFormat([out] GUID *format); HRESULT GetPixelFormat([out] PixelFormat *format); HRESULT GetDelay([out] DWORD *delay); HRESULT GetProperties([in] DWORD mode, [out] IPropertySetStorage **props); HRESULT Rotate([in] DWORD angle); HRESULT Scale([in] ULONG cx, [in] ULONG cy, [in] InterpolationMode mode); HRESULT DiscardEdit(); HRESULT SetEncoderParams([in] IPropertyBag *params); HRESULT DisplayName([size_is(count), in, out] LPWSTR name, UINT count); HRESULT GetResolution([out] ULONG *res_x, [out] ULONG *res_y); HRESULT GetEncoderParams([in] GUID *format, [out] EncoderParameters **params); HRESULT RegisterAbort([in] IShellImageDataAbort *abort, [out] IShellImageDataAbort **prev); HRESULT CloneFrame([out] Image **frame); HRESULT ReplaceFrame([in] Image *frame); } [ object, uuid(9be8ed5c-edab-4d75-90f3-bd5bdbb21c82) ] interface IShellImageDataFactory : IUnknown { HRESULT CreateIShellImageData([out] IShellImageData **data); HRESULT CreateImageFromFile([in] LPCWSTR path, [out] IShellImageData **data); HRESULT CreateImageFromStream([in] IStream *stream, [out] IShellImageData **data); HRESULT GetDataFormatFromPath([in] LPCWSTR path, [out] GUID *format); } ================================================ FILE: wine/windows/shldisp.idl ================================================ /* * COM interfaces for shell objects * * Copyright (C) 2004 Maxime Bellengé * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "ocidl.idl"; #include cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef ShellExecute") cpp_quote("#endif") /***************************************************************************** * IEnumACString interface */ [ local, object, uuid(8e74c210-cf9d-4eaf-a403-7356428f0a5a), pointer_default(unique) ] interface IEnumACString : IEnumString { typedef IEnumACString *PENUMACSTRING, *LPENUMACSTRING; typedef enum _tagACENUMOPTION { ACEO_NONE = 0x00000000, ACEO_MOSTRECENTFIRST = 0x00000001, ACEO_FIRSTUNUSED = 0x00010000, } ACENUMOPTION; HRESULT NextItem( [out] LPWSTR pszUrl, [in] ULONG cchMax, [out] ULONG *pulSortIndex); HRESULT SetEnumOptions( [in] DWORD dwOptions ); HRESULT GetEnumOptions( [out] DWORD *pdwOptions ); } /***************************************************************************** * IAutoComplete interface */ [ local, object, uuid(00bb2762-6a77-11d0-a535-00c04fd7d062), pointer_default(unique) ] interface IAutoComplete : IUnknown { typedef IAutoComplete *LPAUTOCOMPLETE; HRESULT Init( [in] HWND hwndEdit, [in] IUnknown *punkACL, [in] LPCOLESTR pwszRegKeyPath, [in] LPCOLESTR pwszQuickComplete); HRESULT Enable( [in] BOOL fEnable ); } /***************************************************************************** * IAutoComplete2 interface */ [ local, object, uuid(eac04bc0-3791-11d2-bb95-0060977b464c), pointer_default(unique) ] interface IAutoComplete2 : IAutoComplete { typedef IAutoComplete2 *LPAUTOCOMPLETE2; typedef enum _tagAUTOCOMPLETEOPTIONS { ACO_NONE = 0x00, /* No AutoComplete */ ACO_AUTOSUGGEST = 0x01, /* enable autosuggest dropdown */ ACO_AUTOAPPEND = 0x02, /* enable autoappend */ ACO_SEARCH = 0x04, /* add search entry to completion list */ ACO_FILTERPREFIXES = 0x08, /* don't match common prefixes (www., http://, etc) */ ACO_USETAB = 0x10, /* use tab to select autosuggest entries */ ACO_UPDOWNKEYDROPSLIST = 0x20, /* up/down arrow key invokes autosuggest dropdown (if enabled) */ ACO_RTLREADING = 0x40, /* enable RTL reading order for dropdown */ } AUTOCOMPLETEOPTIONS; HRESULT SetOptions( [in] DWORD dwFlag); HRESULT GetOptions( [out] DWORD *pdwFlag); } [ uuid(50a7e9b0-70ef-11d1-b75a-00a0c90564fe), version(1.0) ] library Shell32 { importlib("stdole2.tlb"); [ object, oleautomation, uuid(9ba05970-f6a8-11cf-a442-00a0c90a8f39), pointer_default(unique) ] interface IFolderViewOC : IDispatch { HRESULT SetFolderView( [in] IDispatch *pdisp ); } [ uuid(62112aa2-ebe4-11cf-a5fb-0020afe7292d) ] dispinterface DShellFolderViewEvents { properties: methods: [id(DISPID_SELECTIONCHANGED)] void SelectionChanged(); [id(DISPID_FILELISTENUMDONE)] void EnumDone(); [id(DISPID_VERBINVOKED)] VARIANT_BOOL VerbInvoked(); [id(DISPID_DEFAULTVERBINVOKED)] VARIANT_BOOL DefaultVerbInvoked(); [id(DISPID_BEGINDRAG)] VARIANT_BOOL BeginDrag(); } [ uuid(9ba05971-f6a8-11cf-a442-00a0c90a8f39), hidden ] coclass ShellFolderViewOC { [default] interface IFolderViewOC; [default, source] dispinterface DShellFolderViewEvents; } interface FolderItem; interface FolderItems; interface FolderItemVerb; interface FolderItemVerbs; /***************************************************************************** * Folder interface */ [ object, uuid(bbcbde60-c3ff-11ce-8350-444553540000), oleautomation, dual ] interface Folder : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Title( [out, retval] BSTR *pbs ); [propget] HRESULT Application( [out, retval] IDispatch **ppid ); [propget] HRESULT Parent( [out, retval] IDispatch **ppid ); [propget] HRESULT ParentFolder( [out, retval] Folder **ppsf ); HRESULT Items( [out, retval] FolderItems **ppid ); HRESULT ParseName( [in] BSTR bName, [out, retval] FolderItem **ppid ); HRESULT NewFolder( [in] BSTR bName, [in, optional] VARIANT vOptions ); HRESULT MoveHere( [in] VARIANT vItem, [in, optional] VARIANT vOptions ); HRESULT CopyHere( [in] VARIANT vItem, [in, optional] VARIANT vOptions ); HRESULT GetDetailsOf( [in] VARIANT vItem, [in] int iColumn, [out, retval] BSTR *pbs ); } /***************************************************************************** * Folder2 interface */ [ object, uuid(f0d2d8ef-3890-11d2-bf8b-00c04fb93661), oleautomation, dual ] interface Folder2 : Folder { [propget] HRESULT Self( [out, retval] FolderItem **ppfi ); [propget] HRESULT OfflineStatus( [out, retval] LONG *pul ); HRESULT Synchronize(); [propget, id(1)] HRESULT HaveToShowWebViewBarricade( [out, retval] VARIANT_BOOL *pbHaveToShowWebViewBarricade ); HRESULT DismissedWebViewBarricade(); } /***************************************************************************** * Folder3 interface */ [ object, uuid(a7ae5f64-c4d7-4d7f-9307-4d24ee54b841), oleautomation, dual ] interface Folder3 : Folder2 { [propget, id(2)] HRESULT ShowWebViewBarricade( [out, retval] VARIANT_BOOL *pbShowWebViewBarricade ); [propput, id(2)] HRESULT ShowWebViewBarricade( [in] VARIANT_BOOL bShowWebViewBarricade ); } /***************************************************************************** * FolderItem interface */ [ object, uuid(fac32c80-cbe4-11ce-8350-444553540000), oleautomation, dual ] interface FolderItem : IDispatch { typedef FolderItem *LPFOLDERITEM; [propget] HRESULT Application( [out, retval] IDispatch **ppid ); [propget] HRESULT Parent( [out, retval] IDispatch **ppid ); [propget, id(DISPID_VALUE)] HRESULT Name( [out, retval] BSTR *pbs ); [propput, id(DISPID_VALUE)] HRESULT Name( [in] BSTR bs ); [propget] HRESULT Path( [out, retval] BSTR *pbs ); [propget] HRESULT GetLink( [out, retval] IDispatch **ppid ); [propget] HRESULT GetFolder( [out, retval] IDispatch **ppid ); [propget] HRESULT IsLink( [out, retval] VARIANT_BOOL *pb ); [propget] HRESULT IsFolder( [out, retval] VARIANT_BOOL *pb ); [propget] HRESULT IsFileSystem( [out, retval] VARIANT_BOOL *pb ); [propget] HRESULT IsBrowsable( [out, retval] VARIANT_BOOL *pb ); [propget] HRESULT ModifyDate( [out, retval] DATE *pdt ); [propput] HRESULT ModifyDate( [in] DATE dt ); [propget] HRESULT Size( [out, retval] LONG *pul ); [propget] HRESULT Type( [out, retval] BSTR *pbs ); HRESULT Verbs( [out, retval] FolderItemVerbs **ppfic ); HRESULT InvokeVerb( [in, optional] VARIANT vVerb ); } [ object, uuid(edc817aa-92b8-11d1-b075-00c04fc33aa5), oleautomation, dual ] interface FolderItem2 : FolderItem { HRESULT InvokeVerbEx([in, optional] VARIANT verb, [in, optional] VARIANT args); HRESULT ExtendedProperty([in] BSTR propname, [out, retval] VARIANT *ret); } /***************************************************************************** * FolderItems interface */ [ object, uuid(744129e0-cbe5-11ce-8350-444553540000), oleautomation, dual ] interface FolderItems : IDispatch { [propget] HRESULT Count( [out, retval] long *plCount ); [propget] HRESULT Application( [out, retval] IDispatch **ppid ); [propget] HRESULT Parent( [out, retval] IDispatch **ppid ); HRESULT Item( [in, optional] VARIANT index, [out, retval] FolderItem **ppid ); [id(DISPID_NEWENUM)] HRESULT _NewEnum( [out, retval] IUnknown **ppunk ); } /***************************************************************************** * FolderItems2 interface */ [ uuid(c94f0ad0-f363-11d2-a327-00c04f8eec7f), oleautomation, dual ] interface FolderItems2 : FolderItems { HRESULT InvokeVerbEx( [in, optional] VARIANT verb, [in, optional] VARIANT args ); } /***************************************************************************** * FolderItems3 interface */ [ uuid(eaa7c309-bbec-49d5-821d-64d966cb667f), oleautomation, dual ] interface FolderItems3 : FolderItems2 { HRESULT Filter( [in] long flags, [in] BSTR spec ); [id(0), propget] HRESULT Verbs( [out, retval] FolderItemVerbs **ppfic ); } /***************************************************************************** * FolderItemVerb interface */ [ object, uuid(08ec3e00-50b0-11cf-960c-0080c7f4ee85), oleautomation, dual ] interface FolderItemVerb : IDispatch { [propget] HRESULT Application( [out, retval] IDispatch **ppid ); [propget] HRESULT Parent( [out, retval] IDispatch **ppid ); [propget, id(DISPID_VALUE)] HRESULT Name( [out, retval] BSTR *pbs ); HRESULT DoIt(); } /***************************************************************************** * FolderItemVerbs interface */ [ object, uuid(1f8352c0-50b0-11cf-960c-0080c7f4ee85), oleautomation, dual ] interface FolderItemVerbs : IDispatch { [propget] HRESULT Count( [out, retval] long *plCount ); [propget] HRESULT Application( [out, retval] IDispatch **ppid ); [propget] HRESULT Parent( [out, retval] IDispatch **ppid ); HRESULT Item( [in, optional] VARIANT index, [out, retval] FolderItemVerb **ppid ); [id(DISPID_NEWENUM)] HRESULT _NewEnum( [out, retval] IUnknown **ppunk ); } /***************************************************************************** * IShellDispatch interface */ [ uuid(d8f015c0-c278-11ce-a49e-444553540000), oleautomation, hidden, dual ] interface IShellDispatch : IDispatch { [propget] HRESULT Application( [out, retval] IDispatch **ppid ); [propget] HRESULT Parent( [out, retval] IDispatch **ppid ); HRESULT NameSpace( [in] VARIANT vDir, [out, retval] Folder **ppsdf ); HRESULT BrowseForFolder( [in] long Hwnd, [in] BSTR Title, [in] long Options, [in, optional] VARIANT RootFolder, [out, retval] Folder **ppsdf ); HRESULT Windows( [out, retval] IDispatch **ppid ); HRESULT Open( [in] VARIANT vDir ); HRESULT Explore( [in] VARIANT vDir ); HRESULT MinimizeAll(); HRESULT UndoMinimizeALL(); HRESULT FileRun(); HRESULT CascadeWindows(); HRESULT TileVertically(); HRESULT TileHorizontally(); HRESULT ShutdownWindows(); HRESULT Suspend(); HRESULT EjectPC(); HRESULT SetTime(); HRESULT TrayProperties(); HRESULT Help(); HRESULT FindFiles(); HRESULT FindComputer(); HRESULT RefreshMenu(); HRESULT ControlPanelItem( [in] BSTR szDir ); } [ uuid(a4c6892c-3ba9-11d2-9dea-00c04fb16162), oleautomation, hidden, dual ] interface IShellDispatch2 : IShellDispatch { HRESULT IsRestricted([in] BSTR group, [in] BSTR restriction, [out, retval] long *value); HRESULT ShellExecute([in] BSTR file, [in, optional] VARIANT args, [in, optional] VARIANT dir, [in, optional] VARIANT op, [in, optional] VARIANT show); HRESULT FindPrinter([in, optional] BSTR name, [in, optional] BSTR location, [in, optional] BSTR model); HRESULT GetSystemInformation([in] BSTR name, [out, retval] VARIANT *ret); HRESULT ServiceStart([in] BSTR service, [in] VARIANT persistent, [out, retval] VARIANT *ret); HRESULT ServiceStop([in] BSTR service, [in] VARIANT persistent, [out, retval] VARIANT *ret); HRESULT IsServiceRunning([in] BSTR service, [out, retval] VARIANT *running); HRESULT CanStartStopService([in] BSTR service, [out, retval] VARIANT *ret); HRESULT ShowBrowserBar([in] BSTR clsid, [in] VARIANT show, [out, retval] VARIANT *ret); } [ uuid(177160ca-bb5a-411c-841d-bd38facdeaa0), oleautomation, hidden, dual ] interface IShellDispatch3 : IShellDispatch2 { HRESULT AddToRecent([in] VARIANT file, [in, optional] BSTR category); } [ uuid(efd84b2d-4bcf-4298-be25-eb542a59fbda), oleautomation, hidden, dual ] interface IShellDispatch4 : IShellDispatch3 { HRESULT WindowsSecurity(); HRESULT ToggleDesktop(); HRESULT ExplorerPolicy([in] BSTR policy, [out, retval] VARIANT *value); HRESULT GetSetting([in] long setting, [out,retval] VARIANT_BOOL *result); } [ uuid(866738b9-6cf2-4de8-8767-f794ebe74f4e), oleautomation, hidden, dual ] interface IShellDispatch5 : IShellDispatch4 { HRESULT WindowSwitcher(); } [ uuid(286e6f1b-7113-4355-9562-96b7e9d64c54), oleautomation, hidden, dual, ] interface IShellDispatch6 : IShellDispatch5 { HRESULT SearchCommand(void); } [ uuid(13709620-c279-11ce-a49e-444553540000) ] coclass Shell { [default] interface IShellDispatch6; } [ uuid(0a89a860-d7b1-11ce-8350-444553540000), hidden ] coclass ShellDispatchInproc { interface IUnknown; } typedef [ uuid(ca31ea20-48d0-11cf-8350-444553540000) ] enum ShellSpecialFolderConstants { ssfDESKTOP = 0x00, ssfPROGRAMS = 0x02, ssfCONTROLS = 0x03, ssfPRINTERS = 0x04, ssfPERSONAL = 0x05, ssfFAVORITES = 0x06, ssfSTARTUP = 0x07, ssfRECENT = 0x08, ssfSENDTO = 0x09, ssfBITBUCKET = 0x0a, ssfSTARTMENU = 0x0b, ssfDESKTOPDIRECTORY = 0x10, ssfDRIVES = 0x11, ssfNETWORK = 0x12, ssfNETHOOD = 0x13, ssfFONTS = 0x14, ssfTEMPLATES = 0x15, ssfCOMMONSTARTMENU = 0x16, ssfCOMMONPROGRAMS = 0x17, ssfCOMMONSTARTUP = 0x18, ssfCOMMONDESKTOPDIR = 0x19, ssfAPPDATA = 0x1a, ssfPRINTHOOD = 0x1b, ssfLOCALAPPDATA = 0x1c, ssfALTSTARTUP = 0x1d, ssfCOMMONALTSTARTUP = 0x1e, ssfCOMMONFAVORITES = 0x1f, ssfINTERNETCACHE = 0x20, ssfCOOKIES = 0x21, ssfHISTORY = 0x22, ssfCOMMONAPPDATA = 0x23, ssfWINDOWS = 0x24, ssfSYSTEM = 0x25, ssfPROGRAMFILES = 0x26, ssfMYPICTURES = 0x27, ssfPROFILE = 0x28, ssfSYSTEMx86 = 0x29, ssfPROGRAMFILESx86 = 0x30 } ShellSpecialFolderConstants; /***************************************************************************** * IShellFolderViewDual interface */ typedef [ uuid(742a99a0-c77e-11d0-a32c-00a0c91eedba) ] enum ShellFolderViewOptions { SFVVO_SHOWALLOBJECTS = 0x00000001, SFVVO_SHOWEXTENSIONS = 0x00000002, SFVVO_SHOWCOMPCOLOR = 0x00000008, SFVVO_SHOWSYSFILES = 0x00000020, SFVVO_WIN95CLASSIC = 0x00000040, SFVVO_DOUBLECLICKINWEBVIEW = 0x00000080, SFVVO_DESKTOPHTML = 0x00000200 } ShellFolderViewOptions; [ uuid(e7a1af80-4d96-11cf-960c-0080c7f4ee85), oleautomation, hidden, dual ] interface IShellFolderViewDual : IDispatch { [propget] HRESULT Application([out, retval] IDispatch **app); [propget] HRESULT Parent([out, retval] IDispatch **parent); [propget] HRESULT Folder([out, retval] Folder **folder); HRESULT SelectedItems([out, retval] FolderItems **items); [propget] HRESULT FocusedItem([out, retval] FolderItem **item); HRESULT SelectItem([in] VARIANT *item, [in] int flags); HRESULT PopupItemMenu([in] FolderItem *item, [in, optional] VARIANT vx, [in, optional] VARIANT vy, [out, retval] BSTR *command); [propget] HRESULT Script([out, retval] IDispatch **script); [propget] HRESULT ViewOptions([out, retval] long *options); } [ uuid(31c147b6-0ade-4a3c-b514-ddf932ef6d17), oleautomation, hidden, dual ] interface IShellFolderViewDual2 : IShellFolderViewDual { [propget] HRESULT CurrentViewMode([out, retval] UINT *mode); [propput] HRESULT CurrentViewMode([in] UINT mode); HRESULT SelectItemRelative([in] int relative); } [ uuid(29ec8e6c-46d3-411f-baaa-611a6c9cac66), oleautomation, hidden, dual ] interface IShellFolderViewDual3 : IShellFolderViewDual2 { [propget] HRESULT GroupBy([out, retval] BSTR *groupby); [propput] HRESULT GroupBy([in] BSTR groupby); [propget] HRESULT FolderFlags([out, retval] DWORD *flags); [propput] HRESULT FolderFlags([in] DWORD flags); [propget] HRESULT SortColumns([out, retval] BSTR *sortcolumns); [propput] HRESULT SortColumns([in] BSTR sortcolumns); [propput] HRESULT IconSize([in] int icon_size); [propget] HRESULT IconSize([out, retval] int *icon_size); HRESULT FilterView([in, unique] BSTR filter_text); } [ uuid(62112aa1-ebe4-11cf-a5fb-0020afe7292d) ] coclass ShellFolderView { [default] interface IShellFolderViewDual3; [default, source] dispinterface DShellFolderViewEvents; } } /* library Shell32 */ /***************************************************************************** * IAsyncOperation interface */ [ uuid(3d8b0590-f691-11d2-8ea9-006097df5bd4), object, ] interface IAsyncOperation : IUnknown { typedef [unique] IAsyncOperation *LPASYNCOPERATION; HRESULT SetAsyncMode([in] BOOL fDoOpAsync); HRESULT GetAsyncMode([out] BOOL *pfIsOpAsync); HRESULT StartOperation([in, unique, optional] IBindCtx *pbcReserved); HRESULT InOperation([out] BOOL *pfInAsyncOp); HRESULT EndOperation( [in] HRESULT hResult, [in, unique] IBindCtx *pbcReserved, [in] DWORD dwEffects); } ================================================ FILE: wine/windows/shlguid.h ================================================ /* * Copyright (C) 1999 Juergen Schmied * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SHLGUID_H #define __WINE_SHLGUID_H DEFINE_OLEGUID(CLSID_ShellDesktop, 0x00021400, 0, 0); DEFINE_OLEGUID(CATID_BrowsableShellExt, 0x00021490, 0, 0); DEFINE_OLEGUID(CATID_BrowseInPlace, 0x00021491, 0, 0); DEFINE_OLEGUID(CATID_DeskBand, 0x00021492, 0, 0); DEFINE_OLEGUID(CATID_InfoBand, 0x00021493, 0, 0); DEFINE_OLEGUID(CATID_CommBand, 0x00021494, 0, 0); /* shell32 formatids */ DEFINE_OLEGUID(FMTID_Intshcut, 0x000214A0, 0, 0); DEFINE_OLEGUID(FMTID_InternetSite, 0x000214A1, 0, 0); /* command group ids */ DEFINE_OLEGUID(CGID_Explorer, 0x000214D0, 0, 0); DEFINE_OLEGUID(CGID_ShellDocView, 0x000214D1, 0, 0); DEFINE_OLEGUID(CGID_ShellServiceObject, 0x000214D2, 0, 0); DEFINE_OLEGUID(CGID_ExplorerBarDoc, 0x000214D3, 0, 0); DEFINE_OLEGUID(IID_IShellDetails, 0x000214EC, 0, 0); DEFINE_OLEGUID(IID_IDelayedRelease, 0x000214ED, 0, 0); DEFINE_OLEGUID(IID_IShellCopyHookA, 0x000214EF, 0, 0); DEFINE_OLEGUID(IID_IFileViewerA, 0x000214F0, 0, 0); DEFINE_OLEGUID(IID_IFileViewerSite, 0x000214F3, 0, 0); DEFINE_OLEGUID(IID_IPropSheetPage, 0x000214F6, 0, 0); DEFINE_OLEGUID(IID_IFileViewerW, 0x000214F8, 0, 0); DEFINE_OLEGUID(IID_IShellCopyHookW, 0x000214FC, 0, 0); DEFINE_OLEGUID(IID_IRemoteComputer, 0x000214FE, 0, 0); DEFINE_OLEGUID(IID_IQueryInfo, 0x00021500, 0, 0); /* avoid duplicate definitions with shobjidl.h (FIXME) */ /* DEFINE_OLEGUID(IID_IShellPropSheetExt, 0x000214E9, 0, 0); */ /* DEFINE_OLEGUID(IID_IExtractIconA, 0x000214EB, 0, 0); */ /* DEFINE_OLEGUID(IID_IExtractIconW, 0x000214FA, 0, 0); */ /* DEFINE_OLEGUID(IID_IContextMenu, 0x000214E4, 0, 0); */ /* DEFINE_OLEGUID(IID_IContextMenu2, 0x000214F4, 0, 0); */ /* DEFINE_OLEGUID(IID_ICommDlgBrowser, 0x000214F1, 0, 0); */ /* DEFINE_OLEGUID(IID_IShellBrowser, 0x000214E2, 0, 0); */ /* DEFINE_OLEGUID(IID_IShellView, 0x000214E3, 0, 0); */ /* DEFINE_OLEGUID(IID_IShellFolder, 0x000214E6, 0, 0); */ /* DEFINE_OLEGUID(IID_IShellExtInit, 0x000214E8, 0, 0); */ /* DEFINE_OLEGUID(IID_IPersistFolder, 0x000214EA, 0, 0); */ /* DEFINE_OLEGUID(IID_IShellLinkA, 0x000214EE, 0, 0); */ /* DEFINE_OLEGUID(IID_IEnumIDList, 0x000214F2, 0, 0); */ /* DEFINE_OLEGUID(IID_IShellLinkW, 0x000214F9, 0, 0); */ /* DEFINE_OLEGUID(IID_IShellExecuteHookA, 0x000214F5, 0, 0); */ /* DEFINE_OLEGUID(IID_IShellExecuteHookW, 0x000214FB, 0, 0); */ /* DEFINE_OLEGUID(IID_INewShortcutHookA, 0x000214E1, 0, 0); */ /* DEFINE_OLEGUID(IID_INewShortcutHookW, 0x000214F7, 0, 0); */ #ifndef NO_INTSHCUT_GUIDS #include #endif #ifndef NO_SHDOCVW_GUIDS # ifndef GUID_DEFS_ONLY # include # include # endif DEFINE_GUID(IID_IACList, 0x77A130B0,0x94FD,0x11D0,0xA5,0x44,0x00,0xC0,0x4F,0xD7,0xD0,0x62); DEFINE_GUID(IID_IACList2, 0x470141A0,0x5186,0x11D2,0xBB,0xB6,0x00,0x60,0x97,0x7B,0x46,0x4C); DEFINE_GUID(IID_IObjMgr, 0x00BB2761,0x6A77,0x11D0,0xA5,0x35,0x00,0xC0,0x4F,0xD7,0xD0,0x62); DEFINE_GUID(IID_CDefView, 0x4434ff80,0xef4c,0x11ce,0xae,0x65,0x08,0x00,0x2b,0x2e,0x12,0x62); DEFINE_GUID(IID_IProgressDialog, 0xEBBC7C04,0x315E,0x11D2,0xB6,0x2F,0x00,0x60,0x97,0xDF,0x5B,0xD4); #define SID_SProgressUI CLSID_ProgressDialog DEFINE_GUID(CLSID_CUrlHistory, 0x3c374a40, 0xbae4, 0x11cf, 0xbf, 0x7d, 0x00, 0xaa, 0x00, 0x69, 0x46, 0xee); #define SID_SUrlHistory CLSID_CUrlHistory DEFINE_GUID(CLSID_CURLSearchHook, 0xcfbfae00, 0x17a6, 0x11d0, 0x99, 0xcb, 0x00, 0xc0, 0x4f, 0xd6, 0x44, 0x97); DEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37); DEFINE_GUID(CLSID_AutoComplete, 0x00bb2763, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62); DEFINE_GUID(CLSID_ACLMulti, 0x00bb2765, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62); DEFINE_GUID(CLSID_ACListISF, 0x03c036f1, 0xa186, 0x11d0, 0x82, 0x4a, 0x00, 0xaa, 0x00, 0x5b, 0x043, 0x83); #define SID_SInternetExplorer IID_IWebBrowserApp #define SID_SWebBrowserApp IID_IWebBrowserApp #define SID_SWebBrowserEventsService IID_IWebBrowserEventsService #endif /* NO_SHDOCVW_GUIDS */ DEFINE_GUID(SID_STopWindow, 0x49e1b500, 0x4636, 0x11d3, 0x97, 0xf7, 0x00, 0xc0, 0x4f, 0x45, 0xd0, 0xb3); DEFINE_GUID(SID_SCommDlgBrowser, 0x80f30233, 0xb7df, 0x11d2, 0xa3, 0x3b, 0x00, 0x60, 0x97, 0xdf, 0x5b, 0xd4); #define SID_LinkSite IID_IShellLinkW #define SID_SShellBrowser IID_IShellBrowser #define SID_SShellDesktop CLSID_ShellDesktop #define IID_IFileViewer WINELIB_NAME_AW(IID_IFileViewer) #define IID_IShellLink WINELIB_NAME_AW(IID_IShellLink) #define IID_IExtractIcon WINELIB_NAME_AW(IID_IExtractIcon) #define IID_IShellCopyHook WINELIB_NAME_AW(IID_IShellCopyHook) #define IID_IShellExecuteHook WINELIB_NAME_AW(IID_IShellExecuteHook) #define IID_INewShortcutHook WINELIB_NAME_AW(IID_INewShortcutHook) DEFINE_GUID(IID_IDockingWindowSite, 0x2A342FC2, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8); DEFINE_GUID(IID_IInputObject, 0x68284FAA, 0x6A48, 0x11D0, 0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4); DEFINE_GUID(IID_IInputObjectSite, 0xF1DB8392, 0x7331, 0x11D0, 0x8C, 0x99, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8); /**************************************************************************** * the next IID's are the namespace elements of the pidls */ DEFINE_GUID(CLSID_NetworkPlaces, 0x208D2C60, 0x3AEA, 0x1069, 0xA2, 0xD7, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); DEFINE_GUID(CLSID_NetworkDomain, 0x46e06680, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49); DEFINE_GUID(CLSID_NetworkServer, 0xc0542a90, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49); DEFINE_GUID(CLSID_NetworkShare, 0x54a754c0, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49); DEFINE_GUID(CLSID_MyComputer, 0x20D04FE0, 0x3AEA, 0x1069, 0xA2, 0xD8, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); DEFINE_GUID(CLSID_Internet, 0x871C5380, 0x42A0, 0x1069, 0xA2, 0xEA, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); DEFINE_GUID(CLSID_ShellFSFolder, 0xF3364BA0, 0x65B9, 0x11CE, 0xA9, 0xBA, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37); DEFINE_GUID(CLSID_RecycleBin, 0x645FF040, 0x5081, 0x101B, 0x9F, 0x08, 0x00, 0xAA, 0x00, 0x2F, 0x95, 0x4E); DEFINE_GUID(CLSID_ControlPanel, 0x21EC2020, 0x3AEA, 0x1069, 0xA2, 0xDD, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); DEFINE_GUID(CLSID_Printers, 0x2227A280, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); DEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03); DEFINE_GUID(CLSID_FolderShortcut, 0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); DEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57); DEFINE_GUID(CLSID_QueryAssociations, 0xa07034fd, 0x6caa, 0x4954, 0xac, 0x3f, 0x97, 0xa2, 0x72, 0x16, 0xf9, 0x8a); DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0xd0); DEFINE_GUID(CLSID_ProgressDialog, 0xf8383852, 0xfcd3, 0x11d1, 0xa6, 0xb9, 0x0, 0x60, 0x97, 0xdf, 0x5b, 0xd4); DEFINE_GUID(CLSID_ShellItem, 0x2fe352ea, 0xfd1f, 0x11d2, 0xb1, 0xf4, 0x00, 0xc0, 0x4f, 0x8e, 0xeb, 0x3e); DEFINE_GUID(CLSID_NewMenu, 0xd969a300, 0xe7ff, 0x11d0, 0xa9, 0x3b, 0x0, 0xa0, 0xc9, 0xf, 0x27, 0x19); #define PSGUID_SHELLDETAILS {0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0} DEFINE_GUID(FMTID_ShellDetails, 0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0); #define PID_FINDDATA 0 #define PID_NETRESOURCE 1 #define PID_DESCRIPTIONID 2 #define PID_WHICHFOLDER 3 #define PID_NETWORKLOCATION 4 #define PID_COMPUTERNAME 5 /* Note: PSGUID_STORAGE defined in ntquery.h */ DEFINE_GUID(FMTID_Storage, 0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac); /* PID_* for FMTID_Storage defined in ntquery.h*/ #define PSGUID_DISPLACED {0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71} DEFINE_GUID(FMTID_Displaced, 0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71); #define PID_DISPLACED_FROM 2 #define PID_DISPLACED_DATE 3 DEFINE_GUID(CLSID_CAnchorBrowsePropertyPage, 0x3050F3BB, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); DEFINE_GUID(CLSID_CDocBrowsePropertyPage, 0x3050F3B4, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); DEFINE_GUID(CLSID_CImageBrowsePropertyPage, 0x3050F3B3, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); DEFINE_GUID(VID_LargeIcons, 0x0057d0e0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62); DEFINE_GUID(VID_SmallIcons, 0x089000c0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62); DEFINE_GUID(VID_List, 0x0e1fa5e0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62); DEFINE_GUID(VID_Details, 0x137e7700, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62); DEFINE_GUID(VID_Thumbnails, 0x8bebb290, 0x52d0, 0x11d0, 0xb7, 0xf4, 0x00, 0xc0, 0x4f, 0xd7, 0x06, 0xec); DEFINE_GUID(VID_Tile, 0x65f125e5, 0x7be1, 0x4810, 0xba, 0x9d, 0xd2, 0x71, 0xc8, 0x43, 0x2c, 0xe3); DEFINE_GUID(VID_ThumbStrip, 0x8eefa624, 0xd1e9, 0x445b, 0x94, 0xb7, 0x74, 0xfb, 0xce, 0x2e, 0xa1, 0x1a); #include /* FOLDERTYPEID */ DEFINE_GUID(FOLDERTYPEID_Communications, 0x91475fe5, 0x586b, 0x4eba, 0x8d, 0x75, 0xd1, 0x74, 0x34, 0xb8, 0xcd, 0xf6); DEFINE_GUID(FOLDERTYPEID_CompressedFolder, 0x80213e82, 0xbcfd, 0x4c4f, 0x88, 0x17, 0xbb, 0x27, 0x60, 0x12, 0x67, 0xa9); DEFINE_GUID(FOLDERTYPEID_Contacts, 0xde2b70ec, 0x9bf7, 0x4a93, 0xbd, 0x3d, 0x24, 0x3f, 0x78, 0x81, 0xd4, 0x92); DEFINE_GUID(FOLDERTYPEID_ControlPanelCategory, 0xde4f0660, 0xfa10, 0x4b8f, 0xa4, 0x94, 0x06, 0x8b, 0x20, 0xb2, 0x23, 0x07); DEFINE_GUID(FOLDERTYPEID_ControlPanelClassic, 0x0c3794f3, 0xb545, 0x43aa, 0xa3, 0x29, 0xc3, 0x74, 0x30, 0xc5, 0x8d, 0x2a); DEFINE_GUID(FOLDERTYPEID_Documents, 0x7d49d726, 0x3c21, 0x4f05, 0x99, 0xaa, 0xfd, 0xc2, 0xc9, 0x47, 0x46, 0x56); DEFINE_GUID(FOLDERTYPEID_Games, 0xb689b0d0, 0x76d3, 0x4cbb, 0x87, 0xf7, 0x58, 0x5d, 0x0e, 0x0c, 0xe0, 0x70); DEFINE_GUID(FOLDERTYPEID_Generic, 0x5c4f28b5, 0xf869, 0x4e84, 0x8e, 0x60, 0xf1, 0x1d, 0xb9, 0x7c, 0x5c, 0xc7); DEFINE_GUID(FOLDERTYPEID_GenericLibrary, 0x5f4eab9a, 0x6833, 0x4f61, 0x89, 0x9d, 0x31, 0xcf, 0x46, 0x97, 0x9d, 0x49); DEFINE_GUID(FOLDERTYPEID_GenericSearchResults, 0x7fde1a1e, 0x8b31, 0x49a5, 0x93, 0xb8, 0x6b, 0xe1, 0x4c, 0xfa, 0x49, 0x43); DEFINE_GUID(FOLDERTYPEID_Invalid, 0x57807898, 0x8c4f, 0x4462, 0xbb, 0x63, 0x71, 0x04, 0x23, 0x80, 0xb1, 0x09); DEFINE_GUID(FOLDERTYPEID_Music, 0x94d6ddcc, 0x4a68, 0x4175, 0xa3, 0x74, 0xbd, 0x58, 0x4a, 0x51, 0x0b, 0x78); DEFINE_GUID(FOLDERTYPEID_NetworkExplorer, 0x25cc242b, 0x9a7c, 0x4f51, 0x80, 0xe0, 0x7a, 0x29, 0x28, 0xfe, 0xbe, 0x42); DEFINE_GUID(FOLDERTYPEID_OpenSearch, 0x8faf9629, 0x1980, 0x46ff, 0x80, 0x23, 0x9d, 0xce, 0xab, 0x9c, 0x3e, 0xe3); DEFINE_GUID(FOLDERTYPEID_OtherUsers, 0xb337fd00, 0x9dd5, 0x4635, 0xa6, 0xd4, 0xda, 0x33, 0xfd, 0x10, 0x2b, 0x7a); DEFINE_GUID(FOLDERTYPEID_Pictures, 0xb3690e58, 0xe961, 0x423b, 0xb6, 0x87, 0x38, 0x6e, 0xbf, 0xd8, 0x32, 0x39); DEFINE_GUID(FOLDERTYPEID_Printers, 0x2c7bbec6, 0xc844, 0x4a0a, 0x91, 0xfa, 0xce, 0xf6, 0xf5, 0x9c, 0xfd, 0xa1); DEFINE_GUID(FOLDERTYPEID_PublishedItems, 0x7f2f5b96, 0xff74, 0x41da, 0xaf, 0xd8, 0x1c, 0x78, 0xa5, 0xf3, 0xae, 0xa2); DEFINE_GUID(FOLDERTYPEID_RecordedTV, 0x5557a28f, 0x5da6, 0x4f83, 0x88, 0x09, 0xc2, 0xc9, 0x8a, 0x11, 0xa6, 0xfa); DEFINE_GUID(FOLDERTYPEID_RecycleBin, 0xd6d9e004, 0xcd87, 0x442b, 0x9d, 0x57, 0x5e, 0x0a, 0xeb, 0x4f, 0x6f, 0x72); DEFINE_GUID(FOLDERTYPEID_SavedGames, 0xd0363307, 0x28cb, 0x4106, 0x9f, 0x23, 0x29, 0x56, 0xe3, 0xe5, 0xe0, 0xe7); DEFINE_GUID(FOLDERTYPEID_SearchConnector, 0x982725ee, 0x6f47, 0x479e, 0xb4, 0x47, 0x81, 0x2b, 0xfa, 0x7d, 0x2e, 0x8f); DEFINE_GUID(FOLDERTYPEID_Searches, 0x0b0ba2e3, 0x405f, 0x415e, 0xa6, 0xee, 0xca, 0xd6, 0x25, 0x20, 0x78, 0x53); DEFINE_GUID(FOLDERTYPEID_SearchHome, 0x834d8a44, 0x0974, 0x4ed6, 0x86, 0x6e, 0xf2, 0x03, 0xd8, 0x0b, 0x38, 0x10); DEFINE_GUID(FOLDERTYPEID_SoftwareExplorer, 0xd674391b, 0x52d9, 0x4e07, 0x83, 0x4e, 0x67, 0xc9, 0x86, 0x10, 0xf3, 0x9d); DEFINE_GUID(FOLDERTYPEID_StartMenu, 0xef87b4cb, 0xf2ce, 0x4785, 0x86, 0x58, 0x4c, 0xa6, 0xc6, 0x3e, 0x38, 0xc6); DEFINE_GUID(FOLDERTYPEID_UserFiles, 0xcd0fc69b, 0x71e2, 0x46e5, 0x96, 0x90, 0x5b, 0xcd, 0x9f, 0x57, 0xaa, 0xb3); DEFINE_GUID(FOLDERTYPEID_UsersLibraries, 0xc4d98f09, 0x6124, 0x4fe0, 0x99, 0x42, 0x82, 0x64, 0x16, 0x08, 0x2d, 0xa9); DEFINE_GUID(FOLDERTYPEID_Videos, 0x5fa96407, 0x7e77, 0x483c, 0xac, 0x93, 0x69, 0x1d, 0x05, 0x85, 0x0d, 0xe8); /* IExplorerBrowser */ DEFINE_GUID(EP_NavPane, 0xCB316B22, 0x25F7, 0x42B8, 0x8A, 0x09, 0x54, 0x0D, 0x23, 0xA4, 0x3C, 0x2F); DEFINE_GUID(EP_Commands,0xD9745868, 0xCA5F, 0x4A76, 0x91, 0xCD, 0xF5, 0xA1, 0x29, 0xFB, 0xB0, 0x76); DEFINE_GUID(EP_Commands_Organize, 0x72E81700, 0xE3EC, 0x4660, 0xBF, 0x24, 0x3C, 0x3B, 0x7B, 0x64, 0x88, 0x06); DEFINE_GUID(EP_Commands_View, 0x21F7C32D, 0xEEAA, 0x439B, 0xBB, 0x51, 0x37, 0xB9, 0x6F, 0xD6, 0xA9, 0x43); DEFINE_GUID(EP_DetailsPane, 0x43ABF98B, 0x89B8, 0x472D, 0xB9, 0xCE, 0xE6, 0x9B, 0x82, 0x29, 0xF0, 0x19); DEFINE_GUID(EP_PreviewPane, 0x893C63D1, 0x45C8, 0x4D17, 0xBE, 0x19, 0x22, 0x3B, 0xE7, 0x1B, 0xE3, 0x65); DEFINE_GUID(EP_QueryPane, 0x65BCDE4F, 0x4F07, 0x4F27, 0x83, 0xA7, 0x1A, 0xFC, 0xA4, 0xDF, 0x7D, 0xDD); DEFINE_GUID(EP_AdvQueryPane, 0xB4E9DB8B, 0x34BA, 0x4C39, 0xB5, 0xCC, 0x16, 0xA1, 0xBD, 0x2C, 0x41, 0x1C); /* IShellItem/IShellItemArray BindToHandler */ DEFINE_GUID(BHID_SFObject, 0x3981E224, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5); DEFINE_GUID(BHID_SFUIObject, 0x3981E225, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5); DEFINE_GUID(BHID_SFViewObject,0x3981E226, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5); DEFINE_GUID(BHID_Storage, 0x3981E227, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5); DEFINE_GUID(BHID_Stream, 0x1CEBB3AB, 0x7C10, 0x499A, 0xA4,0x17, 0x92,0xCA,0x16,0xC4,0xCB,0x83); DEFINE_GUID(BHID_StorageEnum, 0x4621A4E3, 0xF0D6, 0x4773, 0x8A,0x9C, 0x46,0xE7,0x7B,0x17,0x48,0x40); DEFINE_GUID(BHID_Transfer, 0xD5E346A1, 0xF753, 0x4932, 0xB4,0x03, 0x45,0x74,0x80,0x0E,0x24,0x98); DEFINE_GUID(BHID_EnumItems, 0x94F60519, 0x2850, 0x4924, 0xAA,0x5A, 0xD1,0x5E,0x84,0x86,0x80,0x39); DEFINE_GUID(BHID_DataObject, 0xB8C0BD9F, 0xED24, 0x455C, 0x83,0xE6, 0xD5,0x39,0x0C,0x4F,0xE8,0xC4); DEFINE_GUID(BHID_Filter, 0x38D08778, 0xF557, 0x4690, 0x9E,0xBF, 0xBA,0x54,0x70,0x6A,0xD8,0xF7); DEFINE_GUID(BHID_LinkTargetItem, 0x3981E228, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5); DEFINE_GUID(BHID_PropertyStore, 0x0384E1A4, 0x1523, 0x439C, 0xA4,0xC8, 0xAB,0x91,0x10,0x52,0xF5,0x86); DEFINE_GUID(BHID_ThumbnailHandler, 0x7B2E650A, 0x8E20, 0x4F4A, 0xB0,0x9E, 0x65,0x97,0xAF,0xC7,0x2F,0xB0); DEFINE_GUID(BHID_AssociationArray, 0xBEA9EF17, 0x82F1, 0x4F60, 0x92,0x84, 0x4F,0x8D,0xB7,0x5C,0x3B,0xE9); DEFINE_GUID(BHID_EnumAssocHandlers,0xB8AB0B9C, 0xC2EC, 0x4F7A, 0x91,0x8D, 0x31,0x49,0x00,0xE6,0x28,0x0A); #endif /* __WINE_SHLGUID_H */ ================================================ FILE: wine/windows/shlobj.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SHLOBJ_H #define __WINE_SHLOBJ_H #include #include #include #include #include #include #ifdef WINE_NO_UNICODE_MACROS #undef GetObject #endif #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /* Except for specific structs, this header is byte packed */ #include #ifndef HPSXA_DEFINED #define HPSXA_DEFINED DECLARE_HANDLE(HPSXA); #endif typedef enum { KF_FLAG_DEFAULT = 0x00000000, KF_FLAG_SIMPLE_IDLIST = 0x00000100, KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200, KF_FLAG_DEFAULT_PATH = 0x00000400, KF_FLAG_INIT = 0x00000800, KF_FLAG_NO_ALIAS = 0x00001000, KF_FLAG_DONT_UNEXPAND = 0x00002000, KF_FLAG_DONT_VERIFY = 0x00004000, KF_FLAG_CREATE = 0x00008000, KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000, KF_FLAG_ALIAS_ONLY = 0x80000000 } KNOWN_FOLDER_FLAG; enum { GPFIDL_DEFAULT = 0x00, GPFIDL_ALTNAME = 0x01, GPFIDL_UNCPRINTER = 0x02 }; typedef int GPFIDL_FLAGS; UINT WINAPI SHAddFromPropSheetExtArray(HPSXA,LPFNADDPROPSHEETPAGE,LPARAM); LPVOID WINAPI SHAlloc(ULONG) __WINE_ALLOC_SIZE(1); HRESULT WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,IUnknown*,REFIID,LPVOID*); HPSXA WINAPI SHCreatePropSheetExtArray(HKEY,LPCWSTR,UINT); HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*); HRESULT WINAPI SHCreateQueryCancelAutoPlayMoniker(IMoniker**); HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**); DWORD WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*); DWORD WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*); #define SHCLSIDFromString WINELIB_NAME_AW(SHCLSIDFromString) HRESULT WINAPI SHCreateStdEnumFmtEtc(DWORD,const FORMATETC *,IEnumFORMATETC**); void WINAPI SHDestroyPropSheetExtArray(HPSXA); BOOL WINAPI SHFindFiles(LPCITEMIDLIST,LPCITEMIDLIST); DWORD WINAPI SHFormatDrive(HWND,UINT,UINT,UINT); void WINAPI SHFree(LPVOID); BOOL WINAPI GetFileNameFromBrowse(HWND,LPWSTR,DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); HRESULT WINAPI SHGetInstanceExplorer(IUnknown**); HRESULT WINAPI SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR); HRESULT WINAPI SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR); #define SHGetFolderPathAndSubDir WINELIB_NAME_AW(SHGetFolderPathAndSubDir) HRESULT WINAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID,DWORD,HANDLE,PIDLIST_ABSOLUTE*); HRESULT WINAPI SHGetKnownFolderItem(REFKNOWNFOLDERID,KNOWN_FOLDER_FLAG,HANDLE,REFIID,void**); HRESULT WINAPI SHGetKnownFolderPath(REFKNOWNFOLDERID,DWORD,HANDLE,PWSTR*); BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR); BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR); #define SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList) BOOL WINAPI SHGetPathFromIDListEx(PCIDLIST_ABSOLUTE,WCHAR*,DWORD,GPFIDL_FLAGS); INT WINAPI SHHandleUpdateImage(LPCITEMIDLIST); HRESULT WINAPI SHILCreateFromPath(LPCWSTR,LPITEMIDLIST*,DWORD*); HRESULT WINAPI SHLoadOLE(LPARAM); HRESULT WINAPI SHParseDisplayName(LPCWSTR,IBindCtx*,LPITEMIDLIST*,SFGAOF,SFGAOF*); HRESULT WINAPI SHPathPrepareForWriteA(HWND,IUnknown*,LPCSTR,DWORD); HRESULT WINAPI SHPathPrepareForWriteW(HWND,IUnknown*,LPCWSTR,DWORD); #define SHPathPrepareForWrite WINELIB_NAME_AW(SHPathPrepareForWrite) UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA,UINT,LPFNADDPROPSHEETPAGE,LPARAM); LPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCWSTR); BOOL WINAPI SHRunControlPanel(LPCWSTR, HWND); int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder*,LPCITEMIDLIST,int*); HRESULT WINAPI SHStartNetConnectionDialog(HWND,LPCSTR,DWORD); VOID WINAPI SHUpdateImageA(LPCSTR,INT,UINT,INT); VOID WINAPI SHUpdateImageW(LPCWSTR,INT,UINT,INT); #define SHUpdateImage WINELIB_NAME_AW(SHUpdateImage) int WINAPI RestartDialog(HWND,LPCWSTR,DWORD); int WINAPI RestartDialogEx(HWND,LPCWSTR,DWORD,DWORD); int WINAPI DriveType(int); int WINAPI RealDriveType(int, BOOL); int WINAPI IsNetDrive(int); BOOL WINAPI IsUserAnAdmin(void); UINT WINAPI Shell_MergeMenus(HMENU,HMENU,UINT,UINT,UINT,ULONG); BOOL WINAPI Shell_GetImageLists(HIMAGELIST*,HIMAGELIST*); BOOL WINAPI SignalFileOpen(PCIDLIST_ABSOLUTE); BOOL WINAPI ImportPrivacySettings(LPCWSTR, BOOL*, BOOL*); #define SHFMT_ERROR __MSABI_LONG(0xFFFFFFFF) /* Error on last format, drive may be formattable */ #define SHFMT_CANCEL __MSABI_LONG(0xFFFFFFFE) /* Last format was cancelled */ #define SHFMT_NOFORMAT __MSABI_LONG(0xFFFFFFFD) /* Drive is not formattable */ /* SHFormatDrive flags */ #define SHFMT_ID_DEFAULT 0xFFFF #define SHFMT_OPT_FULL 1 #define SHFMT_OPT_SYSONLY 2 /* SHPathPrepareForWrite flags */ #define SHPPFW_NONE 0x00000000 #define SHPPFW_DIRCREATE 0x00000001 #define SHPPFW_DEFAULT SHPPFW_DIRCREATE #define SHPPFW_ASKDIRCREATE 0x00000002 #define SHPPFW_IGNOREFILENAME 0x00000004 #define SHPPFW_NOWRITECHECK 0x00000008 #define SHPPFW_MEDIACHECKONLY 0x00000010 /* SHObjectProperties flags */ #define SHOP_PRINTERNAME 0x01 #define SHOP_FILEPATH 0x02 #define SHOP_VOLUMEGUID 0x04 BOOL WINAPI SHObjectProperties(HWND,DWORD,LPCWSTR,LPCWSTR); #define PCS_FATAL 0x80000000 #define PCS_REPLACEDCHAR 0x00000001 #define PCS_REMOVEDCHAR 0x00000002 #define PCS_TRUNCATED 0x00000004 #define PCS_PATHTOOLONG 0x00000008 int WINAPI PathCleanupSpec(LPCWSTR,LPWSTR); /* SHOpenWithDialog API */ typedef enum { OAIF_ALLOW_REGISTRATION = 0x00000001, OAIF_REGISTER_EXT = 0x00000002, OAIF_EXEC = 0x00000004, OAIF_FORCE_REGISTRATION = 0x00000008, OAIF_HIDE_REGISTRATION = 0x00000020, OAIF_URL_PROTOCOL = 0x00000040, OAIF_FILE_IS_URI = 0x00000080 } OPEN_AS_INFO_FLAGS; #include typedef struct { LPCWSTR pcszFile; LPCWSTR pcszClass; OPEN_AS_INFO_FLAGS oaifInFlags; } OPENASINFO; #include HRESULT WINAPI SHOpenWithDialog(HWND,const OPENASINFO*); /* Shell_MergeMenus flags */ #define MM_ADDSEPARATOR 0x00000001 #define MM_SUBMENUSHAVEIDS 0x00000002 #define MM_DONTREMOVESEPS 0x00000004 /***************************************************************************** * IContextMenu interface */ /* DATAOBJECT_InitShellIDList*/ #define CFSTR_SHELLIDLISTA "Shell IDList Array" /* CF_IDLIST */ #define CFSTR_SHELLIDLISTOFFSETA "Shell Object Offsets" /* CF_OBJECTPOSITIONS */ #define CFSTR_NETRESOURCESA "Net Resource" /* CF_NETRESOURCE */ /* DATAOBJECT_InitFileGroupDesc */ #define CFSTR_FILEDESCRIPTORA "FileGroupDescriptor" /* CF_FILEGROUPDESCRIPTORA */ /* DATAOBJECT_InitFileContents*/ #define CFSTR_FILECONTENTSA "FileContents" /* CF_FILECONTENTS */ #define CFSTR_FILENAMEA "FileName" /* CF_FILENAMEA */ #define CFSTR_FILENAMEMAPA "FileNameMap" /* CF_FILENAMEMAPA */ #define CFSTR_PRINTERGROUPA "PrinterFriendlyName" /* CF_PRINTERS */ #define CFSTR_SHELLURLA "UniformResourceLocator" #define CFSTR_INETURLA CFSTR_SHELLURLA #define CFSTR_PREFERREDDROPEFFECTA "Preferred DropEffect" #define CFSTR_PERFORMEDDROPEFFECTA "Performed DropEffect" #define CFSTR_PASTESUCCEEDEDA "Paste Succeeded" #define CFSTR_INDRAGLOOPA "InShellDragLoop" #define CFSTR_DRAGCONTEXTA "DragContext" #define CFSTR_MOUNTEDVOLUMEA "MountedVolume" #define CFSTR_PERSISTEDDATAOBJECTA "PersistedDataObject" #define CFSTR_TARGETCLSIDA "TargetCLSID" #define CFSTR_AUTOPLAY_SHELLIDLISTSA "Autoplay Enumerated IDList Array" #define CFSTR_LOGICALPERFORMEDDROPEFFECTA "Logical Performed DropEffect" #if defined(__GNUC__) # define CFSTR_SHELLIDLISTW \ (const WCHAR []){ 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 } # define CFSTR_SHELLIDLISTOFFSETW \ (const WCHAR []){ 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 } # define CFSTR_NETRESOURCESW \ (const WCHAR []){ 'N','e','t',' ','R','e','s','o','u','r','c','e',0 } # define CFSTR_FILEDESCRIPTORW \ (const WCHAR []){ 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 } # define CFSTR_FILECONTENTSW \ (const WCHAR []){ 'F','i','l','e','C','o','n','t','e','n','t','s',0 } # define CFSTR_FILENAMEW \ (const WCHAR []){ 'F','i','l','e','N','a','m','e','W',0 } # define CFSTR_FILENAMEMAPW \ (const WCHAR []){ 'F','i','l','e','N','a','m','e','M','a','p','W',0 } # define CFSTR_PRINTERGROUPW \ (const WCHAR []){ 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 } # define CFSTR_SHELLURLW \ (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 } # define CFSTR_INETURLW \ (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 } # define CFSTR_PREFERREDDROPEFFECTW \ (const WCHAR []){ 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 } # define CFSTR_PERFORMEDDROPEFFECTW \ (const WCHAR []){ 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 } # define CFSTR_PASTESUCCEEDEDW \ (const WCHAR []){ 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 } # define CFSTR_INDRAGLOOPW \ (const WCHAR []){ 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 } # define CFSTR_DRAGCONTEXTW \ (const WCHAR []){ 'D','r','a','g','C','o','n','t','e','x','t',0 } # define CFSTR_MOUNTEDVOLUMEW \ (const WCHAR []){ 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 } # define CFSTR_PERSISTEDDATAOBJECTW \ (const WCHAR []){ 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 } # define CFSTR_TARGETCLSIDW \ (const WCHAR []){ 'T','a','r','g','e','t','C','L','S','I','D',0 } # define CFSTR_AUTOPLAY_SHELLIDLISTSW \ (const WCHAR []){ 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',\ ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 } # define CFSTR_LOGICALPERFORMEDDROPEFFECTW \ (const WCHAR []){ 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',\ ' ','D','r','o','p','E','f','f','e','c','t',0 } #elif defined(_MSC_VER) # define CFSTR_SHELLIDLISTW L"Shell IDList Array" # define CFSTR_SHELLIDLISTOFFSETW L"Shell Object Offsets" # define CFSTR_NETRESOURCESW L"Net Resource" # define CFSTR_FILEDESCRIPTORW L"FileGroupDescriptorW" # define CFSTR_FILECONTENTSW L"FileContents" # define CFSTR_FILENAMEW L"FileNameW" # define CFSTR_FILENAMEMAPW L"FileNameMapW" # define CFSTR_PRINTERGROUPW L"PrinterFriendlyName" # define CFSTR_SHELLURLW L"UniformResourceLocator" # define CFSTR_INETURLW L"UniformResourceLocatorW" # define CFSTR_PREFERREDDROPEFFECTW L"Preferred DropEffect" # define CFSTR_PERFORMEDDROPEFFECTW L"Performed DropEffect" # define CFSTR_PASTESUCCEEDEDW L"Paste Succeeded" # define CFSTR_INDRAGLOOPW L"InShellDragLoop" # define CFSTR_DRAGCONTEXTW L"DragContext" # define CFSTR_MOUNTEDVOLUMEW L"MountedVolume" # define CFSTR_PERSISTEDDATAOBJECTW L"PersistedDataObject" # define CFSTR_TARGETCLSIDW L"TargetCLSID" # define CFSTR_AUTOPLAY_SHELLIDLISTSW L"Autoplay Enumerated IDList Array" # define CFSTR_LOGICALPERFORMEDDROPEFFECTW L"Logical Performed DropEffect" #else static const WCHAR CFSTR_SHELLIDLISTW[] = { 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }; static const WCHAR CFSTR_SHELLIDLISTOFFSETW[] = { 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 }; static const WCHAR CFSTR_NETRESOURCESW[] = { 'N','e','t',' ','R','e','s','o','u','r','c','e',0 }; static const WCHAR CFSTR_FILEDESCRIPTORW[] = { 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 }; static const WCHAR CFSTR_FILECONTENTSW[] = { 'F','i','l','e','C','o','n','t','e','n','t','s',0 }; static const WCHAR CFSTR_FILENAMEW[] = { 'F','i','l','e','N','a','m','e','W',0 }; static const WCHAR CFSTR_FILENAMEMAPW[] = { 'F','i','l','e','N','a','m','e','M','a','p','W',0 }; static const WCHAR CFSTR_PRINTERGROUPW[] = { 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 }; static const WCHAR CFSTR_SHELLURLW[] = { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 }; static const WCHAR CFSTR_INETURLW[] = { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 }; static const WCHAR CFSTR_PREFERREDDROPEFFECTW[] = { 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }; static const WCHAR CFSTR_PERFORMEDDROPEFFECTW[] = { 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }; static const WCHAR CFSTR_PASTESUCCEEDEDW[] = { 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 }; static const WCHAR CFSTR_INDRAGLOOPW[] = { 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 }; static const WCHAR CFSTR_DRAGCONTEXTW[] = { 'D','r','a','g','C','o','n','t','e','x','t',0 }; static const WCHAR CFSTR_MOUNTEDVOLUMEW[] = { 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 }; static const WCHAR CFSTR_PERSISTEDDATAOBJECTW[] = { 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 }; static const WCHAR CFSTR_TARGETCLSIDW[] = { 'T','a','r','g','e','t','C','L','S','I','D',0 }; static const WCHAR CFSTR_AUTOPLAY_SHELLIDLISTSW[] = { 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d', ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }; static const WCHAR CFSTR_LOGICALPERFORMEDDROPEFFECTW[] = { 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d', ' ','D','r','o','p','E','f','f','e','c','t',0 }; #endif #define CFSTR_SHELLIDLIST WINELIB_NAME_AW(CFSTR_SHELLIDLIST) #define CFSTR_SHELLIDLISTOFFSET WINELIB_NAME_AW(CFSTR_SHELLIDLISTOFFSET) #define CFSTR_NETRESOURCES WINELIB_NAME_AW(CFSTR_NETRESOURCES) #define CFSTR_FILEDESCRIPTOR WINELIB_NAME_AW(CFSTR_FILEDESCRIPTOR) #define CFSTR_FILECONTENTS WINELIB_NAME_AW(CFSTR_FILECONTENTS) #define CFSTR_FILENAME WINELIB_NAME_AW(CFSTR_FILENAME) #define CFSTR_FILENAMEMAP WINELIB_NAME_AW(CFSTR_FILENAMEMAP) #define CFSTR_PRINTERGROUP WINELIB_NAME_AW(CFSTR_PRINTERGROUP) #define CFSTR_SHELLURL WINELIB_NAME_AW(CFSTR_SHELLURL) #define CFSTR_INETURL WINELIB_NAME_AW(CFSTR_INETURL) #define CFSTR_PREFERREDDROPEFFECT WINELIB_NAME_AW(CFSTR_PREFERREDDROPEFFECT) #define CFSTR_PERFORMEDDROPEFFECT WINELIB_NAME_AW(CFSTR_PERFORMEDDROPEFFECT) #define CFSTR_PASTESUCCEEDED WINELIB_NAME_AW(CFSTR_PASTESUCCEEDED) #define CFSTR_INDRAGLOOP WINELIB_NAME_AW(CFSTR_INDRAGLOOP) #define CFSTR_DRAGCONTEXT WINELIB_NAME_AW(CFSTR_DRAGCONTEXT) #define CFSTR_MOUNTEDVOLUME WINELIB_NAME_AW(CFSTR_MOUNTEDVOLUME) #define CFSTR_PERSISTEDDATAOBJECT WINELIB_NAME_AW(CFSTR_PERSISTEDDATAOBJECT) #define CFSTR_TARGETCLSID WINELIB_NAME_AW(CFSTR_TARGETCLSID) #define CFSTR_AUTOPLAY_SHELLIDLISTS WINELIB_NAME_AW(CFSTR_AUTOPLAY_SHELLIDLISTS) #define CFSTR_LOGICALPERFORMEDDROPEFFECT WINELIB_NAME_AW(CFSTR_LOGICALPERFORMEDDROPEFFECT) typedef struct { UINT cidl; UINT aoffset[1]; } CIDA, *LPIDA; /************************************************************************ * IShellView interface */ #define FCIDM_SHVIEWFIRST 0x0000 /* undocumented */ #define FCIDM_SHVIEW_ARRANGE 0x7001 #define FCIDM_SHVIEW_DELETE 0x7011 #define FCIDM_SHVIEW_PROPERTIES 0x7013 #define FCIDM_SHVIEW_CUT 0x7018 #define FCIDM_SHVIEW_COPY 0x7019 #define FCIDM_SHVIEW_INSERT 0x701A #define FCIDM_SHVIEW_UNDO 0x701B #define FCIDM_SHVIEW_INSERTLINK 0x701C #define FCIDM_SHVIEW_SELECTALL 0x7021 #define FCIDM_SHVIEW_INVERTSELECTION 0x7022 #define FCIDM_SHVIEW_BIGICON 0x7029 #define FCIDM_SHVIEW_SMALLICON 0x702A #define FCIDM_SHVIEW_LISTVIEW 0x702B #define FCIDM_SHVIEW_REPORTVIEW 0x702C /* 0x7030-0x703f are used by the shellbrowser */ #define FCIDM_SHVIEW_AUTOARRANGE 0x7031 #define FCIDM_SHVIEW_SNAPTOGRID 0x7032 #define FCIDM_SHVIEW_HELP 0x7041 #define FCIDM_SHVIEW_RENAME 0x7050 #define FCIDM_SHVIEW_CREATELINK 0x7051 #define FCIDM_SHVIEW_NEWLINK 0x7052 #define FCIDM_SHVIEW_NEWFOLDER 0x7053 #define FCIDM_SHVIEW_REFRESH 0x7100 /* FIXME */ #define FCIDM_SHVIEW_EXPLORE 0x7101 /* FIXME */ #define FCIDM_SHVIEW_OPEN 0x7102 /* FIXME */ #define FCIDM_SHVIEWLAST 0x7fff #define FCIDM_BROWSERFIRST 0xA000 /* undocumented toolbar items from stddlg's*/ #define FCIDM_TB_UPFOLDER 0xA001 #define FCIDM_TB_NEWFOLDER 0xA002 #define FCIDM_TB_SMALLICON 0xA003 #define FCIDM_TB_REPORTVIEW 0xA004 #define FCIDM_TB_DESKTOP 0xA005 /* FIXME */ #define FCIDM_BROWSERLAST 0xbf00 #define FCIDM_GLOBALFIRST 0x8000 #define FCIDM_GLOBALLAST 0x9fff /* * Global submenu IDs and separator IDs */ #define FCIDM_MENU_FILE (FCIDM_GLOBALFIRST+0x0000) #define FCIDM_MENU_EDIT (FCIDM_GLOBALFIRST+0x0040) #define FCIDM_MENU_VIEW (FCIDM_GLOBALFIRST+0x0080) #define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081) #define FCIDM_MENU_TOOLS (FCIDM_GLOBALFIRST+0x00c0) #define FCIDM_MENU_TOOLS_SEP_GOTO (FCIDM_GLOBALFIRST+0x00c1) #define FCIDM_MENU_HELP (FCIDM_GLOBALFIRST+0x0100) #define FCIDM_MENU_FIND (FCIDM_GLOBALFIRST+0x0140) #define FCIDM_MENU_EXPLORE (FCIDM_GLOBALFIRST+0x0150) #define FCIDM_MENU_FAVORITES (FCIDM_GLOBALFIRST+0x0170) /* control IDs known to the view */ #define FCIDM_TOOLBAR (FCIDM_BROWSERFIRST + 0) #define FCIDM_STATUS (FCIDM_BROWSERFIRST + 1) #define INTERFACE IShellDetails DECLARE_INTERFACE_(IShellDetails, IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IShellDetails methods ***/ STDMETHOD(GetDetailsOf)(THIS_ PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE; STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IShellDetails_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IShellDetails_AddRef(p) (p)->lpVtbl->AddRef(p) #define IShellDetails_Release(p) (p)->lpVtbl->Release(p) /*** IShellDetails methods ***/ #define IShellDetails_GetDetailsOf(p,a,b,c) (p)->lpVtbl->GetDetailsOf(p,a,b,c) #define IShellDetails_ColumnClick(p,a) (p)->lpVtbl->ColumnClick(p,a) #endif /* IQueryInfo interface */ #define INTERFACE IQueryInfo DECLARE_INTERFACE_(IQueryInfo,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IQueryInfo methods ***/ STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR** lppTips) PURE; STDMETHOD(GetInfoFlags)(THIS_ DWORD* lpFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IQueryInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IQueryInfo_AddRef(p) (p)->lpVtbl->AddRef(p) #define IQueryInfo_Release(p) (p)->lpVtbl->Release(p) /*** IQueryInfo methods ***/ #define IQueryInfo_GetInfoTip(p,a,b) (p)->lpVtbl->GetInfoTip(p,a,b) #define IQueryInfo_GetInfoFlags(p,a) (p)->lpVtbl->GetInfoFlags(p,a) #endif /* IInputObject interface */ #define INTERFACE IInputObject DECLARE_INTERFACE_(IInputObject,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IInputObject methods ***/ STDMETHOD(UIActivateIO)(THIS_ BOOL bActivating, LPMSG lpMsg) PURE; STDMETHOD(HasFocusIO)(THIS) PURE; STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IInputObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IInputObject_AddRef(p) (p)->lpVtbl->AddRef(p) #define IInputObject_Release(p) (p)->lpVtbl->Release(p) /*** IInputObject methods ***/ #define IInputObject_UIActivateIO(p,a,b) (p)->lpVtbl->UIActivateIO(p,a,b) #define IInputObject_HasFocusIO(p) (p)->lpVtbl->HasFocusIO(p) #define IInputObject_TranslateAcceleratorIO(p,a) (p)->lpVtbl->TranslateAcceleratorIO(p,a) #endif /* IInputObjectSite interface */ #define INTERFACE IInputObjectSite DECLARE_INTERFACE_(IInputObjectSite,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IInputObjectSite methods ***/ STDMETHOD(OnFocusChangeIS)(THIS_ LPUNKNOWN lpUnknown, BOOL bFocus) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IInputObjectSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IInputObjectSite_AddRef(p) (p)->lpVtbl->AddRef(p) #define IInputObjectSite_Release(p) (p)->lpVtbl->Release(p) /*** IInputObject methods ***/ #define IInputObjectSite_OnFocusChangeIS(p,a,b) (p)->lpVtbl->OnFocusChangeIS(p,a,b) #endif /* IObjMgr interface */ #define INTERFACE IObjMgr DECLARE_INTERFACE_(IObjMgr,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IObjMgr methods ***/ STDMETHOD(Append)(THIS_ LPUNKNOWN punk) PURE; STDMETHOD(Remove)(THIS_ LPUNKNOWN punk) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IObjMgr_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IObjMgr_AddRef(p) (p)->lpVtbl->AddRef(p) #define IObjMgr_Release(p) (p)->lpVtbl->Release(p) /*** IObjMgr methods ***/ #define IObjMgr_Append(p,a) (p)->lpVtbl->Append(p,a) #define IObjMgr_Remove(p,a) (p)->lpVtbl->Remove(p,a) #endif /* IACList interface */ #define INTERFACE IACList DECLARE_INTERFACE_(IACList,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IACList methods ***/ STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IACList_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IACList_AddRef(p) (p)->lpVtbl->AddRef(p) #define IACList_Release(p) (p)->lpVtbl->Release(p) /*** IACList methods ***/ #define IACList_Expand(p,a) (p)->lpVtbl->Expand(p,a) #endif /* IACList2 interface */ #define INTERFACE IACList2 DECLARE_INTERFACE_(IACList2,IACList) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IACList methods ***/ STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE; /*** IACList2 methods ***/ STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE; STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IACList2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IACList2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IACList2_Release(p) (p)->lpVtbl->Release(p) /*** IACList2 methods ***/ #define IACList2_GetOptions(p,a) (p)->lpVtbl->GetOptions(p,a) #define IACList2_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a) #endif /**************************************************************************** * IShellFolderViewCB interface */ #define INTERFACE IShellFolderViewCB DECLARE_INTERFACE_(IShellFolderViewCB,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IShellFolderViewCB methods ***/ STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IShellFolderViewCB_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IShellFolderViewCB_AddRef(p) (p)->lpVtbl->AddRef(p) #define IShellFolderViewCB_Release(p) (p)->lpVtbl->Release(p) /*** IShellFolderViewCB methods ***/ #define IShellFolderViewCB_MessageSFVCB(p,a,b,c) (p)->lpVtbl->MessageSFVCB(p,a,b,c) #endif /**************************************************************************** * IShellFolderView interface */ #include typedef struct _ITEMSPACING { int cxSmall; int cySmall; int cxLarge; int cyLarge; } ITEMSPACING; #include #define INTERFACE IShellFolderView DEFINE_GUID(IID_IShellFolderView,0x37a378c0,0xf82d,0x11ce,0xae,0x65,0x08,0x00,0x2b,0x2e,0x12,0x62); DECLARE_INTERFACE_(IShellFolderView, IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IShellFolderView methods ***/ STDMETHOD(Rearrange) (THIS_ LPARAM lParamSort) PURE; STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE; STDMETHOD(ArrangeGrid) (THIS) PURE; STDMETHOD(AutoArrange) (THIS) PURE; STDMETHOD(GetAutoArrange) (THIS) PURE; STDMETHOD(AddObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE; STDMETHOD(GetObject) (THIS_ PITEMID_CHILD *ppidl, UINT uItem) PURE; STDMETHOD(RemoveObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE; STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE; STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE; STDMETHOD(UpdateObject) (THIS_ PITEMID_CHILD pidlOld, PITEMID_CHILD pidlNew, UINT *puItem) PURE; STDMETHOD(RefreshObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE; STDMETHOD(SetRedraw) (THIS_ BOOL bRedraw) PURE; STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE; STDMETHOD(GetSelectedObjects) (THIS_ PCITEMID_CHILD **pppidl, UINT *puItems) PURE; STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE; STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE; STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE; STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE; STDMETHOD(SetItemPos) (THIS_ PCUITEMID_CHILD pidl, POINT *ppt) PURE; STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE; STDMETHOD(SetClipboard) (THIS_ BOOL bMove) PURE; STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE; STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE; STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB* pNewCB, IShellFolderViewCB** ppOldCB) PURE; STDMETHOD(Select) ( THIS_ UINT dwFlags ) PURE; STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE; STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IShellFolderView_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IShellFolderView_AddRef(p) (p)->lpVtbl->AddRef(p) #define IShellFolderView_Release(p) (p)->lpVtbl->Release(p) /*** IShellFolderView methods ***/ #define IShellFolderView_Rearrange(p,a) (p)->lpVtbl->Rearrange(p,a) #define IShellFolderView_GetArrangeParam(p,a) (p)->lpVtbl->GetArrangeParam(p,a) #define IShellFolderView_ArrangeGrid(p) (p)->lpVtbl->ArrangeGrid(p) #define IShellFolderView_AutoArrange(p) (p)->lpVtbl->AutoArrange(p) #define IShellFolderView_GetAutoArrange(p) (p)->lpVtbl->GetAutoArrange(p) #define IShellFolderView_AddObject(p,a,b) (p)->lpVtbl->AddObject(p,a,b) #define IShellFolderView_GetObject(p,a,b) (p)->lpVtbl->GetObject(p,a,b) #define IShellFolderView_RemoveObject(p,a,b) (p)->lpVtbl->RemoveObject(p,a,b) #define IShellFolderView_GetObjectCount(p,a) (p)->lpVtbl->GetObjectCount(p,a) #define IShellFolderView_SetObjectCount(p,a,b) (p)->lpVtbl->SetObjectCount(p,a,b) #define IShellFolderView_UpdateObject(p,a,b,c) (p)->lpVtbl->UpdateObject(p,a,b,c) #define IShellFolderView_RefreshObject(p,a,b) (p)->lpVtbl->RefreshObject(p,a,b) #define IShellFolderView_SetRedraw(p,a) (p)->lpVtbl->SetRedraw(p,a) #define IShellFolderView_GetSelectedCount(p,a) (p)->lpVtbl->GetSelectedCount(p,a) #define IShellFolderView_GetSelectedObjects(p,a,b) (p)->lpVtbl->GetSelectedObjects(p,a,b) #define IShellFolderView_IsDropOnSource(p,a) (p)->lpVtbl->IsDropOnSource(p,a) #define IShellFolderView_GetDragPoint(p,a) (p)->lpVtbl->GetDragPoint(p,a) #define IShellFolderView_GetDropPoint(p,a) (p)->lpVtbl->GetDropPoint(p,a) #define IShellFolderView_MoveIcons(p,a) (p)->lpVtbl->MoveIcons(p,a) #define IShellFolderView_SetItemPos(p,a,b) (p)->lpVtbl->SetItemPos(p,a,b) #define IShellFolderView_IsBkDropTarget(p,a) (p)->lpVtbl->IsBkDropTarget(p,a) #define IShellFolderView_SetClipboard(p,a) (p)->lpVtbl->SetClipboard(p,a) #define IShellFolderView_SetPoints(p,a) (p)->lpVtbl->SetPoints(p,a) #define IShellFolderView_GetItemSpacing(p,a) (p)->lpVtbl->GetItemSpacing(p,a) #define IShellFolderView_SetCallback(p,a,b) (p)->lpVtbl->SetCallback(p,a,b) #define IShellFolderView_Select(p,a) (p)->lpVtbl->Select(p,a) #define IShellFolderView_QuerySupport(p,a) (p)->lpVtbl->QuerySupport(p,a) #define IShellFolderView_SetAutomationObject(p,a) (p)->lpVtbl->SetAutomationObject(p,a) #endif /* IProgressDialog interface */ #define PROGDLG_NORMAL 0x00000000 #define PROGDLG_MODAL 0x00000001 #define PROGDLG_AUTOTIME 0x00000002 #define PROGDLG_NOTIME 0x00000004 #define PROGDLG_NOMINIMIZE 0x00000008 #define PROGDLG_NOPROGRESSBAR 0x00000010 #define PROGDLG_MARQUEEPROGRESS 0x00000020 #define PROGDLG_NOCANCEL 0x00000040 #define PDTIMER_RESET 0x00000001 #define PDTIMER_PAUSE 0x00000002 #define PDTIMER_RESUME 0x00000003 #define INTERFACE IProgressDialog DECLARE_INTERFACE_(IProgressDialog,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IProgressDialog methods ***/ STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown *punkEnableModeless, DWORD dwFlags, LPCVOID reserved) PURE; STDMETHOD(StopProgressDialog)(THIS) PURE; STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE; STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstance, UINT uiResourceId) PURE; STDMETHOD_(BOOL,HasUserCancelled)(THIS) PURE; STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE; STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE; STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL bPath, LPCVOID reserved) PURE; STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID reserved) PURE; STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID reserved) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IProgressDialog_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IProgressDialog_AddRef(p) (p)->lpVtbl->AddRef(p) #define IProgressDialog_Release(p) (p)->lpVtbl->Release(p) /*** IProgressDialog methods ***/ #define IProgressDialog_StartProgressDialog(p,a,b,c,d) (p)->lpVtbl->StartProgressDialog(p,a,b,c,d) #define IProgressDialog_StopProgressDialog(p) (p)->lpVtbl->StopProgressDialog(p) #define IProgressDialog_SetTitle(p,a) (p)->lpVtbl->SetTitle(p,a) #define IProgressDialog_SetAnimation(p,a,b) (p)->lpVtbl->SetAnimation(p,a,b) #define IProgressDialog_HasUserCancelled(p) (p)->lpVtbl->HasUserCancelled(p) #define IProgressDialog_SetProgress(p,a,b) (p)->lpVtbl->SetProgress(p,a,b) #define IProgressDialog_SetProgress64(p,a,b) (p)->lpVtbl->SetProgress64(p,a,b) #define IProgressDialog_SetLine(p,a,b,c,d) (p)->lpVtbl->SetLine(p,a,b,c,d) #define IProgressDialog_SetCancelMsg(p,a,b) (p)->lpVtbl->SetCancelMsg(p,a,b) #define IProgressDialog_Timer(p,a,b) (p)->lpVtbl->Timer(p,a,b) #endif /**************************************************************************** * SHAddToRecentDocs API */ #define SHARD_PIDL __MSABI_LONG(0x00000001) #define SHARD_PATHA __MSABI_LONG(0x00000002) #define SHARD_PATHW __MSABI_LONG(0x00000003) #define SHARD_PATH WINELIB_NAME_AW(SHARD_PATH) void WINAPI SHAddToRecentDocs(UINT,LPCVOID); /**************************************************************************** * SHBrowseForFolder API */ typedef INT (CALLBACK *BFFCALLBACK)(HWND,UINT,LPARAM,LPARAM); #include typedef struct tagBROWSEINFOA { HWND hwndOwner; LPCITEMIDLIST pidlRoot; LPSTR pszDisplayName; LPCSTR lpszTitle; UINT ulFlags; BFFCALLBACK lpfn; LPARAM lParam; INT iImage; } BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA; typedef struct tagBROWSEINFOW { HWND hwndOwner; LPCITEMIDLIST pidlRoot; LPWSTR pszDisplayName; LPCWSTR lpszTitle; UINT ulFlags; BFFCALLBACK lpfn; LPARAM lParam; INT iImage; } BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW; #define BROWSEINFO WINELIB_NAME_AW(BROWSEINFO) #define PBROWSEINFO WINELIB_NAME_AW(PBROWSEINFO) #define LPBROWSEINFO WINELIB_NAME_AW(LPBROWSEINFO) #include /* Browsing for directory. */ #define BIF_RETURNONLYFSDIRS 0x0001 #define BIF_DONTGOBELOWDOMAIN 0x0002 #define BIF_STATUSTEXT 0x0004 #define BIF_RETURNFSANCESTORS 0x0008 #define BIF_EDITBOX 0x0010 #define BIF_VALIDATE 0x0020 #define BIF_NEWDIALOGSTYLE 0x0040 #define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX) #define BIF_BROWSEINCLUDEURLS 0x0080 #define BIF_UAHINT 0x0100 #define BIF_NONEWFOLDERBUTTON 0x0200 #define BIF_NOTRANSLATETARGETS 0x0400 #define BIF_BROWSEFORCOMPUTER 0x1000 #define BIF_BROWSEFORPRINTER 0x2000 #define BIF_BROWSEINCLUDEFILES 0x4000 /* message from browser */ #define BFFM_INITIALIZED 1 #define BFFM_SELCHANGED 2 #define BFFM_VALIDATEFAILEDA 3 #define BFFM_VALIDATEFAILEDW 4 #define BFFM_IUNKNOWN 5 /* messages to browser */ #define BFFM_SETSTATUSTEXTA (WM_USER+100) #define BFFM_ENABLEOK (WM_USER+101) #define BFFM_SETSELECTIONA (WM_USER+102) #define BFFM_SETSELECTIONW (WM_USER+103) #define BFFM_SETSTATUSTEXTW (WM_USER+104) #define BFFM_SETOKTEXT (WM_USER+105) #define BFFM_SETEXPANDED (WM_USER+106) LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi); LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi); #define SHBrowseForFolder WINELIB_NAME_AW(SHBrowseForFolder) #define BFFM_SETSTATUSTEXT WINELIB_NAME_AW(BFFM_SETSTATUSTEXT) #define BFFM_SETSELECTION WINELIB_NAME_AW(BFFM_SETSELECTION) #define BFFM_VALIDATEFAILED WINELIB_NAME_AW(BFFM_VALIDATEFAILED) /********************************************************************** * SHCreateShellFolderViewEx API */ typedef HRESULT (CALLBACK *LPFNVIEWCALLBACK)( IShellView* dwUser, IShellFolder* pshf, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); #include typedef struct _CSFV { UINT cbSize; IShellFolder* pshf; IShellView* psvOuter; LPCITEMIDLIST pidl; LONG lEvents; LPFNVIEWCALLBACK pfnCallback; FOLDERVIEWMODE fvm; } CSFV, *LPCSFV; #include HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pshfvi, IShellView **ppshv); /* SHCreateShellFolderViewEx callback messages */ #define SFVM_MERGEMENU 1 #define SFVM_INVOKECOMMAND 2 #define SFVM_GETHELPTEXT 3 #define SFVM_GETTOOLTIPTEXT 4 #define SFVM_GETBUTTONINFO 5 #define SFVM_GETBUTTONS 6 #define SFVM_INITMENUPOPUP 7 #define SFVM_SELECTIONCHANGED 8 /* undocumented */ #define SFVM_DRAWMENUITEM 9 /* undocumented */ #define SFVM_MEASUREMENUITEM 10 /* undocumented */ #define SFVM_EXITMENULOOP 11 /* undocumented */ #define SFVM_VIEWRELEASE 12 /* undocumented */ #define SFVM_GETNAMELENGTH 13 /* undocumented */ #define SFVM_FSNOTIFY 14 #define SFVM_WINDOWCREATED 15 #define SFVM_WINDOWCLOSING 16 /* undocumented */ #define SFVM_LISTREFRESHED 17 /* undocumented */ #define SFVM_WINDOWFOCUSED 18 /* undocumented */ #define SFVM_REGISTERCOPYHOOK 20 /* undocumented */ #define SFVM_COPYHOOKCALLBACK 21 /* undocumented */ #define SFVM_GETDETAILSOF 23 #define SFVM_COLUMNCLICK 24 #define SFVM_QUERYFSNOTIFY 25 #define SFVM_DEFITEMCOUNT 26 #define SFVM_DEFVIEWMODE 27 #define SFVM_UNMERGEFROMMENU 28 #define SFVM_ADDINGOBJECT 29 /* undocumented */ #define SFVM_REMOVINGOBJECT 30 /* undocumented */ #define SFVM_UPDATESTATUSBAR 31 #define SFVM_BACKGROUNDENUM 32 #define SFVM_GETCOMMANDDIR 33 /* undocumented */ #define SFVM_GETCOLUMNSTREAM 34 /* undocumented */ #define SFVM_CANSELECTALL 35 /* undocumented */ #define SFVM_DIDDRAGDROP 36 #define SFVM_ISSTRICTREFRESH 37 /* undocumented */ #define SFVM_ISCHILDOBJECT 38 /* undocumented */ #define SFVM_SETISFV 39 #define SFVM_GETEXTVIEWS 40 /* undocumented */ #define SFVM_THISIDLIST 41 #define SFVM_ADDPROPERTYPAGES 47 #define SFVM_BACKGROUNDENUMDONE 48 #define SFVM_GETNOTIFY 49 #define SFVM_GETSORTDEFAULTS 53 #define SFVM_SIZE 57 #define SFVM_GETZONE 58 #define SFVM_GETPANE 59 #define SFVM_GETHELPTOPIC 63 #define SFVM_GETANIMATION 68 #define SFVM_GET_CUSTOMVIEWINFO 77 /* undocumented */ #define SFVM_ENUMERATEDITEMS 79 /* undocumented */ #define SFVM_GET_VIEW_DATA 80 /* undocumented */ #define SFVM_GET_WEBVIEW_LAYOUT 82 /* undocumented */ #define SFVM_GET_WEBVIEW_CONTENT 83 /* undocumented */ #define SFVM_GET_WEBVIEW_TASKS 84 /* undocumented */ #define SFVM_GET_WEBVIEW_THEME 86 /* undocumented */ #define SFVM_GETDEFERREDVIEWSETTINGS 92 /* undocumented */ #include typedef struct _SFV_CREATE { UINT cbSize; IShellFolder *pshf; IShellView *psvOuter; IShellFolderViewCB *psfvcb; } SFV_CREATE; #include HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pscfv, IShellView **ppsv); /* Types and definitions for the SFM_* parameters */ #include #define QCMINFO_PLACE_BEFORE 0 #define QCMINFO_PLACE_AFTER 1 typedef struct _QCMINFO_IDMAP_PLACEMENT { UINT id; UINT fFlags; } QCMINFO_IDMAP_PLACEMENT; typedef struct _QCMINFO_IDMAP { UINT nMaxIds; QCMINFO_IDMAP_PLACEMENT pIdList[1]; } QCMINFO_IDMAP; typedef struct _QCMINFO { HMENU hmenu; UINT indexMenu; UINT idCmdFirst; UINT idCmdLast; QCMINFO_IDMAP const* pIdMap; } QCMINFO, *LPQCMINFO; #define TBIF_DEFAULT 0x00000000 #define TBIF_APPEND 0x00000000 #define TBIF_PREPEND 0x00000001 #define TBIF_REPLACE 0x00000002 #define TBIF_INTERNETBAR 0x00010000 #define TBIF_STANDARDTOOLBAR 0x00020000 #define TBIF_NOTOOLBAR 0x00030000 typedef struct _TBINFO { UINT cbuttons; UINT uFlags; } TBINFO, *LPTBINFO; #include /**************************************************************************** * SHShellFolderView_Message API */ LRESULT WINAPI SHShellFolderView_Message( HWND hwndCabinet, UINT uMessage, LPARAM lParam); /* SHShellFolderView_Message messages */ #define SFVM_REARRANGE 0x0001 #define SFVM_GETARRANGECOLUMN 0x0002 /* undocumented */ #define SFVM_ADDOBJECT 0x0003 #define SFVM_GETITEMCOUNT 0x0004 /* undocumented */ #define SFVM_GETITEMPIDL 0x0005 /* undocumented */ #define SFVM_REMOVEOBJECT 0x0006 #define SFVM_UPDATEOBJECT 0x0007 #define SFVM_SETREDRAW 0x0008 /* undocumented */ #define SFVM_GETSELECTEDOBJECTS 0x0009 #define SFVM_ISDROPONSOURCE 0x000A /* undocumented */ #define SFVM_MOVEICONS 0x000B /* undocumented */ #define SFVM_GETDRAGPOINT 0x000C /* undocumented */ #define SFVM_GETDROPPOINT 0x000D /* undocumented */ #define SFVM_SETITEMPOS 0x000E #define SFVM_ISDROPONBACKGROUND 0x000F /* undocumented */ #define SFVM_SETCLIPBOARD 0x0010 #define SFVM_TOGGLEAUTOARRANGE 0x0011 /* undocumented */ #define SFVM_LINEUPICONS 0x0012 /* undocumented */ #define SFVM_GETAUTOARRANGE 0x0013 /* undocumented */ #define SFVM_GETSELECTEDCOUNT 0x0014 /* undocumented */ #define SFVM_GETITEMSPACING 0x0015 /* undocumented */ #define SFVM_REFRESHOBJECT 0x0016 /* undocumented */ #define SFVM_SETPOINTS 0x0017 /**************************************************************************** * SHGetDataFromIDList API */ #define SHGDFIL_FINDDATA 1 #define SHGDFIL_NETRESOURCE 2 #define SHGDFIL_DESCRIPTIONID 3 #define SHDID_ROOT_REGITEM 1 #define SHDID_FS_FILE 2 #define SHDID_FS_DIRECTORY 3 #define SHDID_FS_OTHER 4 #define SHDID_COMPUTER_DRIVE35 5 #define SHDID_COMPUTER_DRIVE525 6 #define SHDID_COMPUTER_REMOVABLE 7 #define SHDID_COMPUTER_FIXED 8 #define SHDID_COMPUTER_NETDRIVE 9 #define SHDID_COMPUTER_CDROM 10 #define SHDID_COMPUTER_RAMDISK 11 #define SHDID_COMPUTER_OTHER 12 #define SHDID_NET_DOMAIN 13 #define SHDID_NET_SERVER 14 #define SHDID_NET_SHARE 15 #define SHDID_NET_RESTOFNET 16 #define SHDID_NET_OTHER 17 #define SHDID_COMPUTER_IMAGING 18 #define SHDID_COMPUTER_AUDIO 19 #define SHDID_COMPUTER_SHAREDDOCS 20 #include typedef struct _SHDESCRIPTIONID { DWORD dwDescriptionId; CLSID clsid; } SHDESCRIPTIONID, *LPSHDESCRIPTIONID; #include HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb); HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb); #define SHGetDataFromIDList WINELIB_NAME_AW(SHGetDataFromIDList) BOOL WINAPI SHGetSpecialFolderPathA (HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate); BOOL WINAPI SHGetSpecialFolderPathW (HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate); #define SHGetSpecialFolderPath WINELIB_NAME_AW(SHGetSpecialFolderPath) HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) ; /********************************************************************** * SHGetSetSettings () */ typedef struct { BOOL fShowAllObjects : 1; BOOL fShowExtensions : 1; BOOL fNoConfirmRecycle : 1; BOOL fShowSysFiles : 1; BOOL fShowCompColor : 1; BOOL fDoubleClickInWebView : 1; BOOL fDesktopHTML : 1; BOOL fWin95Classic : 1; BOOL fDontPrettyPath : 1; BOOL fShowAttribCol : 1; BOOL fMapNetDrvBtn : 1; BOOL fShowInfoTip : 1; BOOL fHideIcons : 1; BOOL fWebView : 1; BOOL fFilter : 1; BOOL fShowSuperHidden : 1; BOOL fNoNetCrawling : 1; UINT :15; /* Required for proper binary layout with gcc */ DWORD dwWin95Unused; UINT uWin95Unused; LONG lParamSort; int iSortDirection; UINT version; UINT uNotUsed; BOOL fSepProcess: 1; BOOL fStartPanelOn: 1; BOOL fShowStartPage: 1; UINT fSpareFlags : 13; UINT :15; /* Required for proper binary layout with gcc */ } SHELLSTATE, *LPSHELLSTATE; /********************************************************************** * SHGetSettings () */ typedef struct { BOOL fShowAllObjects : 1; BOOL fShowExtensions : 1; BOOL fNoConfirmRecycle : 1; BOOL fShowSysFiles : 1; BOOL fShowCompColor : 1; BOOL fDoubleClickInWebView : 1; BOOL fDesktopHTML : 1; BOOL fWin95Classic : 1; BOOL fDontPrettyPath : 1; BOOL fShowAttribCol : 1; BOOL fMapNetDrvBtn : 1; BOOL fShowInfoTip : 1; BOOL fHideIcons : 1; UINT fRestFlags : 3; UINT :15; /* Required for proper binary layout with gcc */ } SHELLFLAGSTATE, * LPSHELLFLAGSTATE; VOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask); #define SSF_SHOWALLOBJECTS 0x0001 #define SSF_SHOWEXTENSIONS 0x0002 #define SSF_SHOWCOMPCOLOR 0x0008 #define SSF_SHOWSYSFILES 0x0020 #define SSF_DOUBLECLICKINWEBVIEW 0x0080 #define SSF_SHOWATTRIBCOL 0x0100 #define SSF_DESKTOPHTML 0x0200 #define SSF_WIN95CLASSIC 0x0400 #define SSF_DONTPRETTYPATH 0x0800 #define SSF_SHOWINFOTIP 0x2000 #define SSF_MAPNETDRVBUTTON 0x1000 #define SSF_NOCONFIRMRECYCLE 0x8000 #define SSF_HIDEICONS 0x4000 /**************************************************************************** * SHRestricted API */ typedef enum RESTRICTIONS { REST_NONE = 0x00000000, REST_NORUN = 0x00000001, REST_NOCLOSE = 0x00000002, REST_NOSAVESET = 0x00000004, REST_NOFILEMENU = 0x00000008, REST_NOSETFOLDERS = 0x00000010, REST_NOSETTASKBAR = 0x00000020, REST_NODESKTOP = 0x00000040, REST_NOFIND = 0x00000080, REST_NODRIVES = 0x00000100, REST_NODRIVEAUTORUN = 0x00000200, REST_NODRIVETYPEAUTORUN = 0x00000400, REST_NONETHOOD = 0x00000800, REST_STARTBANNER = 0x00001000, REST_RESTRICTRUN = 0x00002000, REST_NOPRINTERTABS = 0x00004000, REST_NOPRINTERDELETE = 0x00008000, REST_NOPRINTERADD = 0x00010000, REST_NOSTARTMENUSUBFOLDERS = 0x00020000, REST_MYDOCSONNET = 0x00040000, REST_NOEXITTODOS = 0x00080000, REST_ENFORCESHELLEXTSECURITY = 0x00100000, REST_LINKRESOLVEIGNORELINKINFO = 0x00200000, REST_NOCOMMONGROUPS = 0x00400000, REST_SEPARATEDESKTOPPROCESS = 0x00800000, REST_NOWEB = 0x01000000, REST_NOTRAYCONTEXTMENU = 0x02000000, REST_NOVIEWCONTEXTMENU = 0x04000000, REST_NONETCONNECTDISCONNECT = 0x08000000, REST_STARTMENULOGOFF = 0x10000000, REST_NOSETTINGSASSIST = 0x20000000, REST_NOINTERNETICON = 0x40000001, REST_NORECENTDOCSHISTORY, REST_NORECENTDOCSMENU, REST_NOACTIVEDESKTOP, REST_NOACTIVEDESKTOPCHANGES, REST_NOFAVORITESMENU, REST_CLEARRECENTDOCSONEXIT, REST_CLASSICSHELL, REST_NOCUSTOMIZEWEBVIEW, REST_NOHTMLWALLPAPER = 0x40000010, REST_NOCHANGINGWALLPAPER, REST_NODESKCOMP, REST_NOADDDESKCOMP, REST_NODELDESKCOMP, REST_NOCLOSEDESKCOMP, REST_NOCLOSE_DRAGDROPBAND, REST_NOMOVINGBAND, REST_NOEDITDESKCOMP, REST_NORESOLVESEARCH, REST_NORESOLVETRACK, REST_FORCECOPYACLWITHFILE, REST_NOLOGO3CHANNELNOTIFY, REST_NOFORGETSOFTWAREUPDATE, REST_NOSETACTIVEDESKTOP, REST_NOUPDATEWINDOWS, REST_NOCHANGESTARMENU, /* 0x40000020 */ REST_NOFOLDEROPTIONS, REST_HASFINDCOMPUTERS, REST_INTELLIMENUS, REST_RUNDLGMEMCHECKBOX, REST_ARP_ShowPostSetup, REST_NOCSC, REST_NOCONTROLPANEL, REST_ENUMWORKGROUP, REST_ARP_NOARP, REST_ARP_NOREMOVEPAGE, REST_ARP_NOADDPAGE, REST_ARP_NOWINSETUPPAGE, REST_GREYMSIADS, REST_NOCHANGEMAPPEDDRIVELABEL, REST_NOCHANGEMAPPEDDRIVECOMMENT, REST_MaxRecentDocs, /* 0x40000030 */ REST_NONETWORKCONNECTIONS, REST_FORCESTARTMENULOGOFF, REST_NOWEBVIEW, REST_NOCUSTOMIZETHISFOLDER, REST_NOENCRYPTION, REST_ALLOWFRENCHENCRYPTION, /* not documented */ REST_DONTSHOWSUPERHIDDEN, REST_NOSHELLSEARCHBUTTON, REST_NOHARDWARETAB, REST_NORUNASINSTALLPROMPT, REST_PROMPTRUNASINSTALLNETPATH, REST_NOMANAGEMYCOMPUTERVERB, REST_NORECENTDOCSNETHOOD, REST_DISALLOWRUN, REST_NOWELCOMESCREEN, REST_RESTRICTCPL, /* 0x40000040 */ REST_DISALLOWCPL, REST_NOSMBALLOONTIP, REST_NOSMHELP, REST_NOWINKEYS, REST_NOENCRYPTONMOVE, REST_NOLOCALMACHINERUN, REST_NOCURRENTUSERRUN, REST_NOLOCALMACHINERUNONCE, REST_NOCURRENTUSERRUNONCE, REST_FORCEACTIVEDESKTOPON, REST_NOCOMPUTERSNEARME, REST_NOVIEWONDRIVE, REST_NONETCRAWL, REST_NOSHAREDDOCUMENTS, REST_NOSMMYDOCS, REST_NOSMMYPICS, /* 0x40000050 */ REST_ALLOWBITBUCKDRIVES, REST_NONLEGACYSHELLMODE, REST_NOCONTROLPANELBARRICADE, REST_NOSTARTPAGE, REST_NOAUTOTRAYNOTIFY, REST_NOTASKGROUPING, REST_NOCDBURNING, REST_MYCOMPNOPROP, REST_MYDOCSNOPROP, REST_NOSTARTPANEL, REST_NODISPLAYAPPEARANCEPAGE, REST_NOTHEMESTAB, REST_NOVISUALSTYLECHOICE, REST_NOSIZECHOICE, REST_NOCOLORCHOICE, REST_SETVISUALSTYLE, /* 0x40000060 */ REST_STARTRUNNOHOMEPATH, REST_NOUSERNAMEINSTARTPANEL, REST_NOMYCOMPUTERICON, REST_NOSMNETWORKPLACES, REST_NOSMPINNEDLIST, REST_NOSMMYMUSIC, REST_NOSMEJECTPC, REST_NOSMMOREPROGRAMS, REST_NOSMMFUPROGRAMS, REST_NOTRAYITEMSDISPLAY, REST_NOTOOLBARSONTASKBAR, /* 0x4000006C 0x4000006D 0x4000006E */ REST_NOSMCONFIGUREPROGRAMS = 0x4000006F, REST_HIDECLOCK, /* 0x40000070 */ REST_NOLOWDISKSPACECHECKS, REST_NOENTIRENETWORK, REST_NODESKTOPCLEANUP, REST_BITBUCKNUKEONDELETE, REST_BITBUCKCONFIRMDELETE, REST_BITBUCKNOPROP, REST_NODISPBACKGROUND, REST_NODISPSCREENSAVEPG, REST_NODISPSETTINGSPG, REST_NODISPSCREENSAVEPREVIEW, REST_NODISPLAYCPL, REST_HIDERUNASVERB, REST_NOTHUMBNAILCACHE, REST_NOSTRCMPLOGICAL, REST_NOPUBLISHWIZARD, REST_NOONLINEPRINTSWIZARD, /* 0x40000080 */ REST_NOWEBSERVICES, REST_ALLOWUNHASHEDWEBVIEW, REST_ALLOWLEGACYWEBVIEW, REST_REVERTWEBVIEWSECURITY, REST_INHERITCONSOLEHANDLES = 0x40000086, REST_NODISCONNECT = 0x41000001, REST_NOSECURITY, REST_NOFILEASSOCIATE, /* 0x41000003 */ } RESTRICTIONS; DWORD WINAPI SHRestricted(RESTRICTIONS rest); /**************************************************************************** * SHChangeNotify API */ typedef struct _SHChangeNotifyEntry { LPCITEMIDLIST pidl; BOOL fRecursive; } SHChangeNotifyEntry; #define SHCNE_RENAMEITEM 0x00000001 #define SHCNE_CREATE 0x00000002 #define SHCNE_DELETE 0x00000004 #define SHCNE_MKDIR 0x00000008 #define SHCNE_RMDIR 0x00000010 #define SHCNE_MEDIAINSERTED 0x00000020 #define SHCNE_MEDIAREMOVED 0x00000040 #define SHCNE_DRIVEREMOVED 0x00000080 #define SHCNE_DRIVEADD 0x00000100 #define SHCNE_NETSHARE 0x00000200 #define SHCNE_NETUNSHARE 0x00000400 #define SHCNE_ATTRIBUTES 0x00000800 #define SHCNE_UPDATEDIR 0x00001000 #define SHCNE_UPDATEITEM 0x00002000 #define SHCNE_SERVERDISCONNECT 0x00004000 #define SHCNE_UPDATEIMAGE 0x00008000 #define SHCNE_DRIVEADDGUI 0x00010000 #define SHCNE_RENAMEFOLDER 0x00020000 #define SHCNE_FREESPACE 0x00040000 #define SHCNE_EXTENDED_EVENT 0x04000000 #define SHCNE_ASSOCCHANGED 0x08000000 #define SHCNE_DISKEVENTS 0x0002381F #define SHCNE_GLOBALEVENTS 0x0C0581E0 #define SHCNE_ALLEVENTS 0x7FFFFFFF #define SHCNE_INTERRUPT 0x80000000 #define SHCNEE_ORDERCHANGED __MSABI_LONG(0x0002) #define SHCNEE_MSI_CHANGE __MSABI_LONG(0x0004) #define SHCNEE_MSI_UNINSTALL __MSABI_LONG(0x0005) #define SHCNF_IDLIST 0x0000 #define SHCNF_PATHA 0x0001 #define SHCNF_PRINTERA 0x0002 #define SHCNF_DWORD 0x0003 #define SHCNF_PATHW 0x0005 #define SHCNF_PRINTERW 0x0006 #define SHCNF_TYPE 0x00FF #define SHCNF_FLUSH 0x1000 #define SHCNF_FLUSHNOWAIT 0x3000 #define SHCNF_NOTIFYRECURSIVE 0x10000 #define SHCNF_PATH WINELIB_NAME_AW(SHCNF_PATH) #define SHCNF_PRINTER WINELIB_NAME_AW(SHCNF_PRINTER) #define SHCNRF_InterruptLevel 0x0001 #define SHCNRF_ShellLevel 0x0002 #define SHCNRF_RecursiveInterrupt 0x1000 #define SHCNRF_NewDelivery 0x8000 void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2); typedef enum { SLDF_HAS_ID_LIST = 0x00000001, SLDF_HAS_LINK_INFO = 0x00000002, SLDF_HAS_NAME = 0x00000004, SLDF_HAS_RELPATH = 0x00000008, SLDF_HAS_WORKINGDIR = 0x00000010, SLDF_HAS_ARGS = 0x00000020, SLDF_HAS_ICONLOCATION = 0x00000040, SLDF_UNICODE = 0x00000080, SLDF_FORCE_NO_LINKINFO = 0x00000100, SLDF_HAS_EXP_SZ = 0x00000200, SLDF_RUN_IN_SEPARATE = 0x00000400, SLDF_HAS_LOGO3ID = 0x00000800, SLDF_HAS_DARWINID = 0x00001000, SLDF_RUNAS_USER = 0x00002000, SLDF_HAS_EXP_ICON_SZ = 0x00004000, SLDF_NO_PIDL_ALIAS = 0x00008000, SLDF_FORCE_UNCNAME = 0x00010000, SLDF_RUN_WITH_SHIMLAYER = 0x00020000, SLDF_FORCE_NO_LINKTRACK = 0x00040000, SLDF_ENABLE_TARGET_METADATA = 0x00080000, SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING = 0x00200000, SLDF_VALID = 0x003ff7ff, SLDF_RESERVED = 0x80000000, } SHELL_LINK_DATA_FLAGS; typedef struct tagDATABLOCKHEADER { DWORD cbSize; DWORD dwSignature; } DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST; typedef struct { DATABLOCK_HEADER dbh; CHAR szDarwinID[MAX_PATH]; WCHAR szwDarwinID[MAX_PATH]; } EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK; typedef struct { DWORD cbSize; DWORD cbSignature; CHAR szTarget[MAX_PATH]; WCHAR szwTarget[MAX_PATH]; } EXP_SZ_LINK, *LPEXP_SZ_LINK; typedef struct { DWORD cbSize; DWORD dwSignature; DWORD idSpecialFolder; DWORD cbOffset; } EXP_SPECIAL_FOLDER, *LPEXP_SPECIAL_FOLDER; typedef struct { DWORD cbSize; DWORD dwSignature; BYTE abPropertyStorage[1]; } EXP_PROPERTYSTORAGE; #define EXP_SZ_LINK_SIG 0xa0000001 #define NT_CONSOLE_PROPS_SIG 0xa0000002 #define NT_FE_CONSOLE_PROPS_SIG 0xa0000004 #define EXP_SPECIAL_FOLDER_SIG 0xa0000005 #define EXP_DARWIN_ID_SIG 0xa0000006 #define EXP_SZ_ICON_SIG 0xa0000007 #define EXP_LOGO3_ID_SIG EXP_SZ_ICON_SIG /* Old SDKs only */ #define EXP_PROPERTYSTORAGE_SIG 0xa0000009 typedef struct _SHChangeDWORDAsIDList { USHORT cb; DWORD dwItem1; DWORD dwItem2; USHORT cbZero; } SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList; typedef struct _SHChangeProductKeyAsIDList { USHORT cb; WCHAR wszProductKey[39]; USHORT cbZero; } SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList; ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg, int cEntries, SHChangeNotifyEntry *pshcne); BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID); HANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId, LPITEMIDLIST **pppidl, LONG *plEvent); BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock); HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal); /**************************************************************************** * SHCreateDirectory API */ DWORD WINAPI SHCreateDirectory(HWND, LPCVOID); int WINAPI SHCreateDirectoryExA(HWND, LPCSTR, LPSECURITY_ATTRIBUTES); int WINAPI SHCreateDirectoryExW(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES); #define SHCreateDirectoryEx WINELIB_NAME_AW(SHCreateDirectoryEx) /**************************************************************************** * SHGetSetFolderCustomSettings API */ #define FCS_READ 0x00000001 #define FCS_FORCEWRITE 0x00000002 #define FCS_WRITE (FCS_READ | FCS_FORCEWRITE) #define FCS_FLAG_DRAGDROP 0x00000002 #define FCSM_VIEWID 0x00000001 #define FCSM_WEBVIEWTEMPLATE 0x00000002 #define FCSM_INFOTIP 0x00000004 #define FCSM_CLSID 0x00000008 #define FCSM_ICONFILE 0x00000010 #define FCSM_LOGO 0x00000020 #define FCSM_FLAGS 0x00000040 #include typedef struct { DWORD dwSize; DWORD dwMask; SHELLVIEWID *pvid; LPWSTR pszWebViewTemplate; DWORD cchWebViewTemplate; LPWSTR pszWebViewTemplateVersion; LPWSTR pszInfoTip; DWORD cchInfoTip; CLSID *pclsid; DWORD dwFlags; LPWSTR pszIconFile; DWORD cchIconFile; int iIconIndex; LPWSTR pszLogo; DWORD cchLogo; } SHFOLDERCUSTOMSETTINGS, *LPSHFOLDERCUSTOMSETTINGS; #include HRESULT WINAPI SHGetSetFolderCustomSettings(LPSHFOLDERCUSTOMSETTINGS pfcs, PCWSTR pszPath, DWORD dwReadWrite); /**************************************************************************** * SHGetSpecialFolderLocation API */ HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, LPITEMIDLIST * ppidl); HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl); /**************************************************************************** * SHGetFolderPath API */ typedef enum { SHGFP_TYPE_CURRENT = 0, SHGFP_TYPE_DEFAULT = 1 } SHGFP_TYPE; HRESULT WINAPI SHGetFolderPathA(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath); HRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath); #define SHGetFolderPath WINELIB_NAME_AW(SHGetFolderPath) #define CSIDL_DESKTOP 0x0000 #define CSIDL_INTERNET 0x0001 #define CSIDL_PROGRAMS 0x0002 #define CSIDL_CONTROLS 0x0003 #define CSIDL_PRINTERS 0x0004 #define CSIDL_PERSONAL 0x0005 #define CSIDL_FAVORITES 0x0006 #define CSIDL_STARTUP 0x0007 #define CSIDL_RECENT 0x0008 #define CSIDL_SENDTO 0x0009 #define CSIDL_BITBUCKET 0x000a #define CSIDL_STARTMENU 0x000b #define CSIDL_MYDOCUMENTS CSIDL_PERSONAL #define CSIDL_MYMUSIC 0x000d #define CSIDL_MYVIDEO 0x000e #define CSIDL_DESKTOPDIRECTORY 0x0010 #define CSIDL_DRIVES 0x0011 #define CSIDL_NETWORK 0x0012 #define CSIDL_NETHOOD 0x0013 #define CSIDL_FONTS 0x0014 #define CSIDL_TEMPLATES 0x0015 #define CSIDL_COMMON_STARTMENU 0x0016 #define CSIDL_COMMON_PROGRAMS 0X0017 #define CSIDL_COMMON_STARTUP 0x0018 #define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019 #define CSIDL_APPDATA 0x001a #define CSIDL_PRINTHOOD 0x001b #define CSIDL_LOCAL_APPDATA 0x001c #define CSIDL_ALTSTARTUP 0x001d #define CSIDL_COMMON_ALTSTARTUP 0x001e #define CSIDL_COMMON_FAVORITES 0x001f #define CSIDL_INTERNET_CACHE 0x0020 #define CSIDL_COOKIES 0x0021 #define CSIDL_HISTORY 0x0022 #define CSIDL_COMMON_APPDATA 0x0023 #define CSIDL_WINDOWS 0x0024 #define CSIDL_SYSTEM 0x0025 #define CSIDL_PROGRAM_FILES 0x0026 #define CSIDL_MYPICTURES 0x0027 #define CSIDL_PROFILE 0x0028 #define CSIDL_SYSTEMX86 0x0029 #define CSIDL_PROGRAM_FILESX86 0x002a #define CSIDL_PROGRAM_FILES_COMMON 0x002b #define CSIDL_PROGRAM_FILES_COMMONX86 0x002c #define CSIDL_COMMON_TEMPLATES 0x002d #define CSIDL_COMMON_DOCUMENTS 0x002e #define CSIDL_COMMON_ADMINTOOLS 0x002f #define CSIDL_ADMINTOOLS 0x0030 #define CSIDL_CONNECTIONS 0x0031 #define CSIDL_COMMON_MUSIC 0x0035 #define CSIDL_COMMON_PICTURES 0x0036 #define CSIDL_COMMON_VIDEO 0x0037 #define CSIDL_RESOURCES 0x0038 #define CSIDL_RESOURCES_LOCALIZED 0x0039 #define CSIDL_COMMON_OEM_LINKS 0x003a #define CSIDL_CDBURN_AREA 0x003b #define CSIDL_COMPUTERSNEARME 0x003d #define CSIDL_PROFILES 0x003e #define CSIDL_FOLDER_MASK 0x00ff #define CSIDL_FLAG_PER_USER_INIT 0x0800 #define CSIDL_FLAG_NO_ALIAS 0x1000 #define CSIDL_FLAG_DONT_VERIFY 0x4000 #define CSIDL_FLAG_CREATE 0x8000 #define CSIDL_FLAG_MASK 0xff00 /**************************************************************************** * SHGetDesktopFolder API */ HRESULT WINAPI SHGetDesktopFolder(IShellFolder * *); /**************************************************************************** * SHBindToParent API */ HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast); /**************************************************************************** * SHDefExtractIcon API */ HRESULT WINAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize); HRESULT WINAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize); #define SHDefExtractIcon WINELIB_NAME_AW(SHDefExtractIcon) /* * DROPFILES for CF_HDROP and CF_PRINTERS */ typedef struct _DROPFILES { DWORD pFiles; POINT pt; BOOL fNC; BOOL fWide; } DROPFILES, *LPDROPFILES; /* * Properties of a file in the clipboard */ typedef struct _FILEDESCRIPTORA { DWORD dwFlags; CLSID clsid; SIZEL sizel; POINTL pointl; DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; CHAR cFileName[MAX_PATH]; } FILEDESCRIPTORA, *LPFILEDESCRIPTORA; typedef struct _FILEDESCRIPTORW { DWORD dwFlags; CLSID clsid; SIZEL sizel; POINTL pointl; DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; WCHAR cFileName[MAX_PATH]; } FILEDESCRIPTORW, *LPFILEDESCRIPTORW; DECL_WINELIB_TYPE_AW(FILEDESCRIPTOR) DECL_WINELIB_TYPE_AW(LPFILEDESCRIPTOR) /* * CF_FILEGROUPDESCRIPTOR clipboard format */ typedef struct _FILEGROUPDESCRIPTORA { UINT cItems; FILEDESCRIPTORA fgd[1]; } FILEGROUPDESCRIPTORA, *LPFILEGROUPDESCRIPTORA; typedef struct _FILEGROUPDESCRIPTORW { UINT cItems; FILEDESCRIPTORW fgd[1]; } FILEGROUPDESCRIPTORW, *LPFILEGROUPDESCRIPTORW; DECL_WINELIB_TYPE_AW(FILEGROUPDESCRIPTOR) DECL_WINELIB_TYPE_AW(LPFILEGROUPDESCRIPTOR) /**************************************************************************** * Cabinet functions */ typedef struct { WORD cLength; WORD nVersion; BOOL fFullPathTitle:1; BOOL fSaveLocalView:1; BOOL fNotShell:1; BOOL fSimpleDefault:1; BOOL fDontShowDescBar:1; BOOL fNewWindowMode:1; BOOL fShowCompColor:1; BOOL fDontPrettyNames:1; BOOL fAdminsCreateCommonGroups:1; UINT fUnusedFlags:7; UINT :15; /* Required for proper binary layout with gcc */ UINT fMenuEnumFilter; } CABINETSTATE, *LPCABINETSTATE; #define CABINETSTATE_VERSION 2 BOOL WINAPI ReadCabinetState(CABINETSTATE *, int); BOOL WINAPI WriteCabinetState(CABINETSTATE *); /**************************************************************************** * Path Manipulation Routines */ /* PathProcessCommand flags */ #define PPCF_ADDQUOTES 0x01 #define PPCF_INCLUDEARGS 0x02 #define PPCF_ADDARGUMENTS 0x03 #define PPCF_NODIRECTORIES 0x10 #define PPCF_DONTRESOLVE 0x20 #define PPCF_FORCEQUALIFY 0x40 #define PPCF_LONGESTPOSSIBLE 0x80 /* PathResolve flags */ #define PRF_VERIFYEXISTS 0x01 #define PRF_EXECUTABLE 0x02 #define PRF_TRYPROGRAMEXTENSIONS 0x03 #define PRF_FIRSTDIRDEF 0x04 #define PRF_DONTFINDLINK 0x08 #define PRF_REQUIREABSOLUTE 0x10 VOID WINAPI PathGetShortPath(LPWSTR pszPath); LONG WINAPI PathProcessCommand(LPCWSTR, LPWSTR, int, DWORD); int WINAPI PathResolve(LPWSTR, PZPCWSTR, UINT); BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR, LPCWSTR, LPCWSTR, LPCWSTR); BOOL WINAPI Win32DeleteFile(LPCWSTR); /**************************************************************************** * Drag And Drop Routines */ /* DAD_AutoScroll sample structure */ #define NUM_POINTS 3 typedef struct { int iNextSample; DWORD dwLastScroll; BOOL bFull; POINT pts[NUM_POINTS]; DWORD dwTimes[NUM_POINTS]; } AUTO_SCROLL_DATA; BOOL WINAPI DAD_SetDragImage(HIMAGELIST,LPPOINT); BOOL WINAPI DAD_DragEnterEx(HWND,POINT); BOOL WINAPI DAD_DragEnterEx2(HWND,POINT,IDataObject*); BOOL WINAPI DAD_DragMove(POINT); BOOL WINAPI DAD_DragLeave(void); BOOL WINAPI DAD_AutoScroll(HWND,AUTO_SCROLL_DATA*,LPPOINT); HRESULT WINAPI SHDoDragDrop(HWND,IDataObject*,IDropSource*,DWORD,LPDWORD); /**************************************************************************** * Internet shortcut properties */ #define PID_IS_URL 2 #define PID_IS_NAME 4 #define PID_IS_WORKINGDIR 5 #define PID_IS_HOTKEY 6 #define PID_IS_SHOWCMD 7 #define PID_IS_ICONINDEX 8 #define PID_IS_ICONFILE 9 #define PID_IS_WHATSNEW 10 #define PID_IS_AUTHOR 11 #define PID_IS_DESCRIPTION 12 #define PID_IS_COMMENT 13 LPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST,LPCSHITEMID,BOOL); LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST); LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST); LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR); LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR); #define ILCreateFromPath WINELIB_NAME_AW(ILCreateFromPath) LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST,LPCITEMIDLIST); LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST,LPCITEMIDLIST); LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST); void WINAPI ILFree(LPITEMIDLIST); LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST); UINT WINAPI ILGetSize(LPCITEMIDLIST); BOOL WINAPI ILIsEqual(LPCITEMIDLIST,LPCITEMIDLIST); BOOL WINAPI ILIsParent(LPCITEMIDLIST,LPCITEMIDLIST,BOOL); HRESULT WINAPI ILLoadFromStream(LPSTREAM,LPITEMIDLIST*); BOOL WINAPI ILRemoveLastID(LPITEMIDLIST); HRESULT WINAPI ILSaveToStream(LPSTREAM,LPCITEMIDLIST); static inline BOOL ILIsEmpty(LPCITEMIDLIST pidl) { return !(pidl && pidl->mkid.cb); } #include typedef struct { HWND hwnd; IContextMenuCB *pcmcb; PCIDLIST_ABSOLUTE pidlFolder; IShellFolder *psf; UINT cidl; PCUITEMID_CHILD_ARRAY apidl; IUnknown *punkAssociationInfo; UINT cKeys; const HKEY *aKeys; } DEFCONTEXTMENU; #include HRESULT WINAPI SHCreateDefaultContextMenu(const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv); typedef HRESULT (CALLBACK *LPFNDFMCALLBACK)(IShellFolder*,HWND,IDataObject*,UINT,WPARAM,LPARAM); HRESULT WINAPI CDefFolderMenu_Create2(LPCITEMIDLIST pidlFolder, HWND hwnd, UINT cidl, LPCITEMIDLIST *apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeys, IContextMenu **ppcm); int WINAPI PickIconDlg(HWND owner, WCHAR *path, UINT path_len, int *index); HRESULT WINAPI SHLimitInputEdit(HWND hwnd, IShellFolder *folder); #include #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_SHLOBJ_H */ ================================================ FILE: wine/windows/shlwapi.h ================================================ /* * SHLWAPI.DLL functions * * Copyright (C) 2000 Juergen Schmied * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SHLWAPI_H #define __WINE_SHLWAPI_H /* FIXME: #include */ #include #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #include #ifndef NO_SHLWAPI_REG /* Registry functions */ DWORD WINAPI SHDeleteEmptyKeyA(HKEY,LPCSTR); DWORD WINAPI SHDeleteEmptyKeyW(HKEY,LPCWSTR); #define SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey) DWORD WINAPI SHDeleteKeyA(HKEY,LPCSTR); DWORD WINAPI SHDeleteKeyW(HKEY,LPCWSTR); #define SHDeleteKey WINELIB_NAME_AW(SHDeleteKey) DWORD WINAPI SHDeleteValueA(HKEY,LPCSTR,LPCSTR); DWORD WINAPI SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR); #define SHDeleteValue WINELIB_NAME_AW(SHDeleteValue) DWORD WINAPI SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD); DWORD WINAPI SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD); #define SHGetValue WINELIB_NAME_AW(SHGetValue) DWORD WINAPI SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD); DWORD WINAPI SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD); #define SHSetValue WINELIB_NAME_AW(SHSetValue) DWORD WINAPI SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); DWORD WINAPI SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); #define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx) LONG WINAPI SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD); LONG WINAPI SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD); #define SHEnumKeyEx WINELIB_NAME_AW(SHEnumKeyEx) LONG WINAPI SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); LONG WINAPI SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); #define SHEnumValue WINELIB_NAME_AW(SHEnumValue) LONG WINAPI SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD); LONG WINAPI SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD); #define SHQueryInfoKey WINELIB_NAME_AW(SHQueryInfoKey) DWORD WINAPI SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD); DWORD WINAPI SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD); #define SHRegGetPath WINELIB_NAME_AW(SHRegGetPath) DWORD WINAPI SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD); DWORD WINAPI SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD); #define SHRegSetPath WINELIB_NAME_AW(SHRegSetPath) DWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD); DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD); #define SHCopyKey WINELIB_NAME_AW(SHCopyKey) HKEY WINAPI SHRegDuplicateHKey(HKEY); /* SHRegGetValue flags */ typedef INT SRRF; #define SRRF_RT_REG_NONE 0x1 #define SRRF_RT_REG_SZ 0x2 #define SRRF_RT_REG_EXPAND_SZ 0x4 #define SRRF_RT_REG_BINARY 0x8 #define SRRF_RT_REG_DWORD 0x10 #define SRRF_RT_REG_MULTI_SZ 0x20 #define SRRF_RT_REG_QWORD 0x40 #define SRRF_RT_DWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_DWORD) #define SRRF_RT_QWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_QWORD) #define SRRF_RT_ANY 0xffff #define SRRF_RM_ANY 0 #define SRRF_RM_NORMAL 0x10000 #define SRRF_RM_SAFE 0x20000 #define SRRF_RM_SAFENETWORK 0x40000 #define SRRF_NOEXPAND 0x10000000 #define SRRF_ZEROONFAILURE 0x20000000 #define SRRF_NOVIRT 0x40000000 LSTATUS WINAPI SHRegGetValueA(HKEY,LPCSTR,LPCSTR,SRRF,LPDWORD,LPVOID,LPDWORD); LSTATUS WINAPI SHRegGetValueW(HKEY,LPCWSTR,LPCWSTR,SRRF,LPDWORD,LPVOID,LPDWORD); #define SHRegGetValue WINELIB_NAME_AW(SHRegGetValue) /* Undocumented registry functions */ DWORD WINAPI SHDeleteOrphanKeyA(HKEY,LPCSTR); DWORD WINAPI SHDeleteOrphanKeyW(HKEY,LPCWSTR); #define SHDeleteOrphanKey WINELIB_NAME_AW(SHDeleteOrphanKey) /* User registry functions */ typedef enum { SHREGDEL_DEFAULT = 0, SHREGDEL_HKCU = 0x1, SHREGDEL_HKLM = 0x10, SHREGDEL_BOTH = SHREGDEL_HKLM | SHREGDEL_HKCU } SHREGDEL_FLAGS; typedef enum { SHREGENUM_DEFAULT = 0, SHREGENUM_HKCU = 0x1, SHREGENUM_HKLM = 0x10, SHREGENUM_BOTH = SHREGENUM_HKLM | SHREGENUM_HKCU } SHREGENUM_FLAGS; #define SHREGSET_HKCU 0x1 /* Apply to HKCU if empty */ #define SHREGSET_FORCE_HKCU 0x2 /* Always apply to HKCU */ #define SHREGSET_HKLM 0x4 /* Apply to HKLM if empty */ #define SHREGSET_FORCE_HKLM 0x8 /* Always apply to HKLM */ #define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM) typedef HANDLE HUSKEY; typedef HUSKEY *PHUSKEY; LONG WINAPI SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD); LONG WINAPI SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD); #define SHRegCreateUSKey WINELIB_NAME_AW(SHRegCreateUSKey) LONG WINAPI SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL); LONG WINAPI SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL); #define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey) LONG WINAPI SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD, BOOL,LPVOID,DWORD); LONG WINAPI SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD, BOOL,LPVOID,DWORD); #define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue) LONG WINAPI SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD); LONG WINAPI SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD); #define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue) LONG WINAPI SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS); LONG WINAPI SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS); #define SHRegDeleteUSValue WINELIB_NAME_AW(SHRegDeleteUSValue) LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS); LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS); #define SHRegDeleteEmptyUSKey WINELIB_NAME_AW(SHRegDeleteEmptyUSKey) LONG WINAPI SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS); LONG WINAPI SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS); #define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey) LONG WINAPI SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD, LPVOID,LPDWORD,SHREGENUM_FLAGS); LONG WINAPI SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD, LPVOID,LPDWORD,SHREGENUM_FLAGS); #define SHRegEnumUSValue WINELIB_NAME_AW(SHRegEnumUSValue) LONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD, LPDWORD,SHREGENUM_FLAGS); LONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD, LPDWORD,SHREGENUM_FLAGS); #define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey) LONG WINAPI SHRegCloseUSKey(HUSKEY); LONG WINAPI SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD, BOOL,LPVOID,DWORD); LONG WINAPI SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD, BOOL,LPVOID,DWORD); #define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue) LONG WINAPI SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD); LONG WINAPI SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD); #define SHRegSetUSValue WINELIB_NAME_AW(SHRegSetUSValue) BOOL WINAPI SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL); BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL); #define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue) int WINAPI SHRegGetIntW(HKEY,LPCWSTR,int); /* IQueryAssociation and helpers */ enum { ASSOCF_NONE = 0x0000, ASSOCF_INIT_NOREMAPCLSID = 0x0001, /* Don't map clsid->progid */ ASSOCF_INIT_BYEXENAME = 0x0002, /* .exe name given */ ASSOCF_OPEN_BYEXENAME = 0x0002, /* Synonym */ ASSOCF_INIT_DEFAULTTOSTAR = 0x0004, /* Use * as base */ ASSOCF_INIT_DEFAULTTOFOLDER = 0x0008, /* Use folder as base */ ASSOCF_NOUSERSETTINGS = 0x0010, /* No HKCU reads */ ASSOCF_NOTRUNCATE = 0x0020, /* Don't truncate return */ ASSOCF_VERIFY = 0x0040, /* Verify data */ ASSOCF_REMAPRUNDLL = 0x0080, /* Get rundll args */ ASSOCF_NOFIXUPS = 0x0100, /* Don't fixup errors */ ASSOCF_IGNOREBASECLASS = 0x0200, /* Don't read baseclass */ ASSOCF_INIT_IGNOREUNKNOWN = 0x0400, /* Fail for unknown progid */ ASSOCF_INIT_FIXED_PROGID = 0x0800, /* Used passed string as progid, don't try to map it */ ASSOCF_IS_PROTOCOL = 0x1000, /* Treat as protocol, that should be mapped */ ASSOCF_INIT_FOR_FILE = 0x2000, /* progid is for file extension association */ }; typedef DWORD ASSOCF; typedef enum { ASSOCSTR_COMMAND = 1, /* Verb command */ ASSOCSTR_EXECUTABLE, /* .exe from command string */ ASSOCSTR_FRIENDLYDOCNAME, /* Friendly doc type name */ ASSOCSTR_FRIENDLYAPPNAME, /* Friendly .exe name */ ASSOCSTR_NOOPEN, /* noopen value */ ASSOCSTR_SHELLNEWVALUE, /* Use shellnew key */ ASSOCSTR_DDECOMMAND, /* DDE command template */ ASSOCSTR_DDEIFEXEC, /* DDE command for process create */ ASSOCSTR_DDEAPPLICATION, /* DDE app name */ ASSOCSTR_DDETOPIC, /* DDE topic */ ASSOCSTR_INFOTIP, /* Infotip */ ASSOCSTR_QUICKTIP, /* Quick infotip */ ASSOCSTR_TILEINFO, /* Properties for tileview */ ASSOCSTR_CONTENTTYPE, /* Mimetype */ ASSOCSTR_DEFAULTICON, /* Icon */ ASSOCSTR_SHELLEXTENSION, /* GUID for shell extension handler */ ASSOCSTR_MAX } ASSOCSTR; typedef enum { ASSOCKEY_SHELLEXECCLASS = 1, /* Key for ShellExec */ ASSOCKEY_APP, /* Application */ ASSOCKEY_CLASS, /* Progid or class */ ASSOCKEY_BASECLASS, /* Base class */ ASSOCKEY_MAX } ASSOCKEY; typedef enum { ASSOCDATA_MSIDESCRIPTOR = 1, /* Component descriptor */ ASSOCDATA_NOACTIVATEHANDLER, /* Don't activate */ ASSOCDATA_QUERYCLASSSTORE, /* Look in Class Store */ ASSOCDATA_HASPERUSERASSOC, /* Use user association */ ASSOCDATA_EDITFLAGS, /* Edit flags */ ASSOCDATA_VALUE, /* pszExtra is value */ ASSOCDATA_MAX } ASSOCDATA; typedef enum { ASSOCENUM_NONE } ASSOCENUM; typedef struct IQueryAssociations *LPQUERYASSOCIATIONS; #define INTERFACE IQueryAssociations DECLARE_INTERFACE_(IQueryAssociations,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IQueryAssociations methods ***/ STDMETHOD(Init)(THIS_ ASSOCF flags, LPCWSTR pszAssoc, HKEY hkProgid, HWND hwnd) PURE; STDMETHOD(GetString)(THIS_ ASSOCF flags, ASSOCSTR str, LPCWSTR pszExtra, LPWSTR pszOut, DWORD * pcchOut) PURE; STDMETHOD(GetKey)(THIS_ ASSOCF flags, ASSOCKEY key, LPCWSTR pszExtra, HKEY * phkeyOut) PURE; STDMETHOD(GetData)(THIS_ ASSOCF flags, ASSOCDATA data, LPCWSTR pszExtra, LPVOID pvOut, DWORD * pcbOut) PURE; STDMETHOD(GetEnum)(THIS_ ASSOCF flags, ASSOCENUM assocenum, LPCWSTR pszExtra, REFIID riid, LPVOID * ppvOut) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) #define IQueryAssociations_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IQueryAssociations_AddRef(p) (p)->lpVtbl->AddRef(p) #define IQueryAssociations_Release(p) (p)->lpVtbl->Release(p) #define IQueryAssociations_Init(p,a,b,c,d) (p)->lpVtbl->Init(p,a,b,c,d) #define IQueryAssociations_GetString(p,a,b,c,d,e) (p)->lpVtbl->GetString(p,a,b,c,d,e) #define IQueryAssociations_GetKey(p,a,b,c,d) (p)->lpVtbl->GetKey(p,a,b,c,d) #define IQueryAssociations_GetData(p,a,b,c,d,e) (p)->lpVtbl->GetData(p,a,b,c,d,e) #define IQueryAssociations_GetEnum(p,a,b,c,d,e) (p)->lpVtbl->GetEnum(p,a,b,c,d,e) #endif HRESULT WINAPI AssocCreate(CLSID,REFIID,LPVOID*); HRESULT WINAPI AssocQueryStringA(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,LPDWORD); HRESULT WINAPI AssocQueryStringW(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,LPDWORD); #define AssocQueryString WINELIB_NAME_AW(AssocQueryString) HRESULT WINAPI AssocQueryStringByKeyA(ASSOCF,ASSOCSTR,HKEY,LPCSTR,LPSTR,LPDWORD); HRESULT WINAPI AssocQueryStringByKeyW(ASSOCF,ASSOCSTR,HKEY,LPCWSTR,LPWSTR,LPDWORD); #define AssocQueryStringByKey WINELIB_NAME_AW(AssocQueryStringByKey) HRESULT WINAPI AssocQueryKeyA(ASSOCF,ASSOCKEY,LPCSTR,LPCSTR,PHKEY); HRESULT WINAPI AssocQueryKeyW(ASSOCF,ASSOCKEY,LPCWSTR,LPCWSTR,PHKEY); #define AssocQueryKey WINELIB_NAME_AW(AssocQueryKey) BOOL WINAPI AssocIsDangerous(LPCWSTR); #endif /* NO_SHLWAPI_REG */ void WINAPI IUnknown_Set(IUnknown **ppunk, IUnknown *punk); void WINAPI IUnknown_AtomicRelease(IUnknown **punk); HRESULT WINAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd); HRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite); HRESULT WINAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv); HRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut); /* Path functions */ #ifndef NO_SHLWAPI_PATH /* GetPathCharType return flags */ #define GCT_INVALID 0x0 #define GCT_LFNCHAR 0x1 #define GCT_SHORTCHAR 0x2 #define GCT_WILD 0x4 #define GCT_SEPARATOR 0x8 LPSTR WINAPI PathAddBackslashA(LPSTR); LPWSTR WINAPI PathAddBackslashW(LPWSTR); #define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash) BOOL WINAPI PathAddExtensionA(LPSTR,LPCSTR); BOOL WINAPI PathAddExtensionW(LPWSTR,LPCWSTR); #define PathAddExtension WINELIB_NAME_AW(PathAddExtension) BOOL WINAPI PathAppendA(LPSTR,LPCSTR); BOOL WINAPI PathAppendW(LPWSTR,LPCWSTR); #define PathAppend WINELIB_NAME_AW(PathAppend) LPSTR WINAPI PathBuildRootA(LPSTR,int); LPWSTR WINAPI PathBuildRootW(LPWSTR,int); #define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot) BOOL WINAPI PathCanonicalizeA(LPSTR,LPCSTR); BOOL WINAPI PathCanonicalizeW(LPWSTR,LPCWSTR); #define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize) LPSTR WINAPI PathCombineA(LPSTR,LPCSTR,LPCSTR); LPWSTR WINAPI PathCombineW(LPWSTR,LPCWSTR,LPCWSTR); #define PathCombine WINELIB_NAME_AW(PathCombine) BOOL WINAPI PathCompactPathA(HDC,LPSTR,UINT); BOOL WINAPI PathCompactPathW(HDC,LPWSTR,UINT); #define PathCompactPath WINELIB_NAME_AW(PathCompactPath) BOOL WINAPI PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD); BOOL WINAPI PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD); #define PathCompactPathEx WINELIB_NAME_AW(PathCompactPathEx) int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR); int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR); #define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix) HRESULT WINAPI PathCreateFromUrlA(LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD); #define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl) HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR,LPWSTR*,DWORD); BOOL WINAPI PathFileExistsA(LPCSTR); BOOL WINAPI PathFileExistsW(LPCWSTR); #define PathFileExists WINELIB_NAME_AW(PathFileExists) BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR,DWORD*); BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR,DWORD*); #define PathFileExistsAndAttributes WINELIB_NAME_AW(PathFileExistsAndAttributes) LPSTR WINAPI PathFindExtensionA(LPCSTR); LPWSTR WINAPI PathFindExtensionW(LPCWSTR); #define PathFindExtension WINELIB_NAME_AW(PathFindExtension) LPSTR WINAPI PathFindFileNameA(LPCSTR); LPWSTR WINAPI PathFindFileNameW(LPCWSTR); #define PathFindFileName WINELIB_NAME_AW(PathFindFileName) LPSTR WINAPI PathFindNextComponentA(LPCSTR); LPWSTR WINAPI PathFindNextComponentW(LPCWSTR); #define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent) BOOL WINAPI PathFindOnPathA(LPSTR,LPCSTR*); BOOL WINAPI PathFindOnPathW(LPWSTR,LPCWSTR*); #define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath) LPSTR WINAPI PathGetArgsA(LPCSTR); LPWSTR WINAPI PathGetArgsW(LPCWSTR); #define PathGetArgs WINELIB_NAME_AW(PathGetArgs) UINT WINAPI PathGetCharTypeA(UCHAR); UINT WINAPI PathGetCharTypeW(WCHAR); #define PathGetCharType WINELIB_NAME_AW(PathGetCharType) int WINAPI PathGetDriveNumberA(LPCSTR); int WINAPI PathGetDriveNumberW(LPCWSTR); #define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber) BOOL WINAPI PathIsDirectoryA(LPCSTR); BOOL WINAPI PathIsDirectoryW(LPCWSTR); #define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory) BOOL WINAPI PathIsDirectoryEmptyA(LPCSTR); BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR); #define PathIsDirectoryEmpty WINELIB_NAME_AW(PathIsDirectoryEmpty) BOOL WINAPI PathIsFileSpecA(LPCSTR); BOOL WINAPI PathIsFileSpecW(LPCWSTR); #define PathIsFileSpec WINELIB_NAME_AW(PathIsFileSpec) BOOL WINAPI PathIsPrefixA(LPCSTR,LPCSTR); BOOL WINAPI PathIsPrefixW(LPCWSTR,LPCWSTR); #define PathIsPrefix WINELIB_NAME_AW(PathIsPrefix) BOOL WINAPI PathIsRelativeA(LPCSTR); BOOL WINAPI PathIsRelativeW(LPCWSTR); #define PathIsRelative WINELIB_NAME_AW(PathIsRelative) BOOL WINAPI PathIsRootA(LPCSTR); BOOL WINAPI PathIsRootW(LPCWSTR); #define PathIsRoot WINELIB_NAME_AW(PathIsRoot) BOOL WINAPI PathIsSameRootA(LPCSTR,LPCSTR); BOOL WINAPI PathIsSameRootW(LPCWSTR,LPCWSTR); #define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot) BOOL WINAPI PathIsUNCA(LPCSTR); BOOL WINAPI PathIsUNCW(LPCWSTR); #define PathIsUNC WINELIB_NAME_AW(PathIsUNC) BOOL WINAPI PathIsUNCServerA(LPCSTR); BOOL WINAPI PathIsUNCServerW(LPCWSTR); #define PathIsUNCServer WINELIB_NAME_AW(PathIsUNCServer) BOOL WINAPI PathIsUNCServerShareA(LPCSTR); BOOL WINAPI PathIsUNCServerShareW(LPCWSTR); #define PathIsUNCServerShare WINELIB_NAME_AW(PathIsUNCServerShare) BOOL WINAPI PathIsContentTypeA(LPCSTR,LPCSTR); BOOL WINAPI PathIsContentTypeW(LPCWSTR,LPCWSTR); #define PathIsContentType WINELIB_NAME_AW(PathIsContentType) BOOL WINAPI PathIsURLA(LPCSTR); BOOL WINAPI PathIsURLW(LPCWSTR); #define PathIsURL WINELIB_NAME_AW(PathIsURL) BOOL WINAPI PathMakePrettyA(LPSTR); BOOL WINAPI PathMakePrettyW(LPWSTR); #define PathMakePretty WINELIB_NAME_AW(PathMakePretty) BOOL WINAPI PathMatchSpecA(LPCSTR,LPCSTR); BOOL WINAPI PathMatchSpecW(LPCWSTR,LPCWSTR); #define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec) int WINAPI PathParseIconLocationA(LPSTR); int WINAPI PathParseIconLocationW(LPWSTR); #define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation) VOID WINAPI PathQuoteSpacesA(LPSTR); VOID WINAPI PathQuoteSpacesW(LPWSTR); #define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces) BOOL WINAPI PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD); BOOL WINAPI PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD); #define PathRelativePathTo WINELIB_NAME_AW(PathRelativePathTo) VOID WINAPI PathRemoveArgsA(LPSTR); VOID WINAPI PathRemoveArgsW(LPWSTR); #define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs) LPSTR WINAPI PathRemoveBackslashA(LPSTR); LPWSTR WINAPI PathRemoveBackslashW(LPWSTR); #define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash) VOID WINAPI PathRemoveBlanksA(LPSTR); VOID WINAPI PathRemoveBlanksW(LPWSTR); #define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks) VOID WINAPI PathRemoveExtensionA(LPSTR); VOID WINAPI PathRemoveExtensionW(LPWSTR); #define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension) BOOL WINAPI PathRemoveFileSpecA(LPSTR); BOOL WINAPI PathRemoveFileSpecW(LPWSTR); #define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec) BOOL WINAPI PathRenameExtensionA(LPSTR,LPCSTR); BOOL WINAPI PathRenameExtensionW(LPWSTR,LPCWSTR); #define PathRenameExtension WINELIB_NAME_AW(PathRenameExtension) BOOL WINAPI PathSearchAndQualifyA(LPCSTR,LPSTR,UINT); BOOL WINAPI PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT); #define PathSearchAndQualify WINELIB_NAME_AW(PathSearchAndQualify) VOID WINAPI PathSetDlgItemPathA(HWND,int,LPCSTR); VOID WINAPI PathSetDlgItemPathW(HWND,int,LPCWSTR); #define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath) LPSTR WINAPI PathSkipRootA(LPCSTR); LPWSTR WINAPI PathSkipRootW(LPCWSTR); #define PathSkipRoot WINELIB_NAME_AW(PathSkipRoot) VOID WINAPI PathStripPathA(LPSTR); VOID WINAPI PathStripPathW(LPWSTR); #define PathStripPath WINELIB_NAME_AW(PathStripPath) BOOL WINAPI PathStripToRootA(LPSTR); BOOL WINAPI PathStripToRootW(LPWSTR); #define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot) VOID WINAPI PathUnquoteSpacesA(LPSTR); VOID WINAPI PathUnquoteSpacesW(LPWSTR); #define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces) BOOL WINAPI PathMakeSystemFolderA(LPCSTR); BOOL WINAPI PathMakeSystemFolderW(LPCWSTR); #define PathMakeSystemFolder WINELIB_NAME_AW(PathMakeSystemFolder) BOOL WINAPI PathUnmakeSystemFolderA(LPCSTR); BOOL WINAPI PathUnmakeSystemFolderW(LPCWSTR); #define PathUnmakeSystemFolder WINELIB_NAME_AW(PathUnmakeSystemFolder) BOOL WINAPI PathIsSystemFolderA(LPCSTR,DWORD); BOOL WINAPI PathIsSystemFolderW(LPCWSTR,DWORD); #define PathIsSystemFolder WINELIB_NAME_AW(PathIsSystemFolder) BOOL WINAPI PathIsNetworkPathA(LPCSTR); BOOL WINAPI PathIsNetworkPathW(LPCWSTR); #define PathIsNetworkPath WINELIB_NAME_AW(PathIsNetworkPath) BOOL WINAPI PathIsLFNFileSpecA(LPCSTR); BOOL WINAPI PathIsLFNFileSpecW(LPCWSTR); #define PathIsLFNFileSpec WINELIB_NAME_AW(PathIsLFNFileSpec) LPCSTR WINAPI PathFindSuffixArrayA(LPCSTR,LPCSTR *,int); LPCWSTR WINAPI PathFindSuffixArrayW(LPCWSTR,LPCWSTR *,int); #define PathFindSuffixArray WINELIB_NAME_AW(PathFindSuffixArray) VOID WINAPI PathUndecorateA(LPSTR); VOID WINAPI PathUndecorateW(LPWSTR); #define PathUndecorate WINELIB_NAME_AW(PathUndecorate) BOOL WINAPI PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT); BOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT); #define PathUnExpandEnvStrings WINELIB_NAME_AW(PathUnExpandEnvStrings) /* Url functions */ typedef enum { URL_SCHEME_INVALID = -1, URL_SCHEME_UNKNOWN = 0, URL_SCHEME_FTP, URL_SCHEME_HTTP, URL_SCHEME_GOPHER, URL_SCHEME_MAILTO, URL_SCHEME_NEWS, URL_SCHEME_NNTP, URL_SCHEME_TELNET, URL_SCHEME_WAIS, URL_SCHEME_FILE, URL_SCHEME_MK, URL_SCHEME_HTTPS, URL_SCHEME_SHELL, URL_SCHEME_SNEWS, URL_SCHEME_LOCAL, URL_SCHEME_JAVASCRIPT, URL_SCHEME_VBSCRIPT, URL_SCHEME_ABOUT, URL_SCHEME_RES, URL_SCHEME_MSSHELLROOTED, URL_SCHEME_MSSHELLIDLIST, URL_SCHEME_MSHELP, URL_SCHEME_MSSHELLDEVICE, URL_SCHEME_WILDCARD, URL_SCHEME_SEARCH_MS, URL_SCHEME_SEARCH, URL_SCHEME_KNOWNFOLDER, URL_SCHEME_MAXVALUE } URL_SCHEME; /* These are used by UrlGetPart routine */ typedef enum { URL_PART_NONE = 0, URL_PART_SCHEME = 1, URL_PART_HOSTNAME, URL_PART_USERNAME, URL_PART_PASSWORD, URL_PART_PORT, URL_PART_QUERY } URL_PART; #define URL_PARTFLAG_KEEPSCHEME 0x00000001 /* These are used by the UrlIs... routines */ typedef enum { URLIS_URL, URLIS_OPAQUE, URLIS_NOHISTORY, URLIS_FILEURL, URLIS_APPLIABLE, URLIS_DIRECTORY, URLIS_HASQUERY } URLIS; /* This is used by the UrlApplyScheme... routines */ #define URL_APPLY_FORCEAPPLY 0x00000008 #define URL_APPLY_GUESSFILE 0x00000004 #define URL_APPLY_GUESSSCHEME 0x00000002 #define URL_APPLY_DEFAULT 0x00000001 /* The following are used by UrlEscape..., UrlUnEscape..., * UrlCanonicalize..., and UrlCombine... routines */ #define URL_WININET_COMPATIBILITY 0x80000000 #define URL_PLUGGABLE_PROTOCOL 0x40000000 #define URL_ESCAPE_UNSAFE 0x20000000 #define URL_UNESCAPE 0x10000000 #define URL_DONT_SIMPLIFY 0x08000000 #define URL_NO_META URL_DONT_SIMPLIFY #define URL_ESCAPE_SPACES_ONLY 0x04000000 #define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000 #define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO #define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO #define URL_INTERNAL_PATH 0x00800000 /* Will escape #'s in paths */ #define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000 #define URL_CONVERT_IF_DOSPATH 0x00200000 #define URL_UNESCAPE_INPLACE 0x00100000 #define URL_FILE_USE_PATHURL 0x00010000 #define URL_ESCAPE_AS_UTF8 0x00040000 #define URL_ESCAPE_SEGMENT_ONLY 0x00002000 #define URL_ESCAPE_PERCENT 0x00001000 HRESULT WINAPI UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); #define UrlApplyScheme WINELIB_NAME_AW(UrlApplyScheme) HRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); #define UrlCanonicalize WINELIB_NAME_AW(UrlCanonicalize) HRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD); #define UrlCombine WINELIB_NAME_AW(UrlCombine) INT WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL); INT WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL); #define UrlCompare WINELIB_NAME_AW(UrlCompare) HRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); #define UrlEscape WINELIB_NAME_AW(UrlEscape) #define UrlEscapeSpacesA(x,y,z) UrlCanonicalizeA(x, y, z, \ URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY) #define UrlEscapeSpacesW(x,y,z) UrlCanonicalizeW(x, y, z, \ URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY) #define UrlEscapeSpaces WINELIB_NAME_AW(UrlEscapeSpaces) LPCSTR WINAPI UrlGetLocationA(LPCSTR); LPCWSTR WINAPI UrlGetLocationW(LPCWSTR); #define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation) HRESULT WINAPI UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD); HRESULT WINAPI UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD); #define UrlGetPart WINELIB_NAME_AW(UrlGetPart) HRESULT WINAPI HashData(const unsigned char *,DWORD,unsigned char *lpDest,DWORD); HRESULT WINAPI UrlHashA(LPCSTR,unsigned char *,DWORD); HRESULT WINAPI UrlHashW(LPCWSTR,unsigned char *,DWORD); #define UrlHash WINELIB_NAME_AW(UrlHash) BOOL WINAPI UrlIsA(LPCSTR,URLIS); BOOL WINAPI UrlIsW(LPCWSTR,URLIS); #define UrlIs WINELIB_NAME_AW(UrlIs) BOOL WINAPI UrlIsNoHistoryA(LPCSTR); BOOL WINAPI UrlIsNoHistoryW(LPCWSTR); #define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory) BOOL WINAPI UrlIsOpaqueA(LPCSTR); BOOL WINAPI UrlIsOpaqueW(LPCWSTR); #define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque) #define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL) #define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL) #define UrlIsFileUrl WINELIB_NAME_AW(UrlIsFileUrl) HRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD); #define UrlUnescape WINELIB_NAME_AW(UrlUnescape) #define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \ y | URL_UNESCAPE_INPLACE) #define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \ y | URL_UNESCAPE_INPLACE) #define UrlUnescapeInPlace WINELIB_NAME_AW(UrlUnescapeInPlace) HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD); #define UrlCreateFromPath WINELIB_NAME_AW(UrlCreateFromPath) typedef struct tagPARSEDURLA { DWORD cbSize; LPCSTR pszProtocol; UINT cchProtocol; LPCSTR pszSuffix; UINT cchSuffix; UINT nScheme; } PARSEDURLA, *PPARSEDURLA; typedef struct tagPARSEDURLW { DWORD cbSize; LPCWSTR pszProtocol; UINT cchProtocol; LPCWSTR pszSuffix; UINT cchSuffix; UINT nScheme; } PARSEDURLW, *PPARSEDURLW; HRESULT WINAPI ParseURLA(LPCSTR pszUrl, PARSEDURLA *ppu); HRESULT WINAPI ParseURLW(LPCWSTR pszUrl, PARSEDURLW *ppu); #define ParseURL WINELIB_NAME_AW(ParseUrl) #endif /* NO_SHLWAPI_PATH */ /* String functions */ #ifndef NO_SHLWAPI_STRFCNS /* StrToIntEx flags */ #define STIF_DEFAULT __MSABI_LONG(0x0) #define STIF_SUPPORT_HEX __MSABI_LONG(0x1) BOOL WINAPI ChrCmpIA (WORD,WORD); BOOL WINAPI ChrCmpIW (WCHAR,WCHAR); #define ChrCmpI WINELIB_NAME_AW(ChrCmpI) INT WINAPI StrCSpnA(LPCSTR,LPCSTR); INT WINAPI StrCSpnW(LPCWSTR,LPCWSTR); #define StrCSpn WINELIB_NAME_AW(StrCSpn) INT WINAPI StrCSpnIA(LPCSTR,LPCSTR); INT WINAPI StrCSpnIW(LPCWSTR,LPCWSTR); #define StrCSpnI WINELIB_NAME_AW(StrCSpnI) #define StrCatA lstrcatA LPWSTR WINAPI StrCatW(LPWSTR,LPCWSTR); #define StrCat WINELIB_NAME_AW(StrCat) LPSTR WINAPI StrCatBuffA(LPSTR,LPCSTR,INT); LPWSTR WINAPI StrCatBuffW(LPWSTR,LPCWSTR,INT); #define StrCatBuff WINELIB_NAME_AW(StrCatBuff) DWORD WINAPI StrCatChainW(LPWSTR,DWORD,DWORD,LPCWSTR); LPSTR WINAPI StrChrA(LPCSTR,WORD); LPWSTR WINAPI StrChrW(LPCWSTR,WCHAR); #define StrChr WINELIB_NAME_AW(StrChr) LPSTR WINAPI StrChrIA(LPCSTR,WORD); LPWSTR WINAPI StrChrIW(LPCWSTR,WCHAR); #define StrChrI WINELIB_NAME_AW(StrChrI) #define StrCmpA lstrcmpA int WINAPI StrCmpW(LPCWSTR,LPCWSTR); #define StrCmp WINELIB_NAME_AW(StrCmp) #define StrCmpIA lstrcmpiA int WINAPI StrCmpIW(LPCWSTR,LPCWSTR); #define StrCmpI WINELIB_NAME_AW(StrCmpI) #define StrCpyA lstrcpyA LPWSTR WINAPI StrCpyW(LPWSTR,LPCWSTR); #define StrCpy WINELIB_NAME_AW(StrCpy) #define StrCpyNA lstrcpynA LPWSTR WINAPI StrCpyNW(LPWSTR,LPCWSTR,int); #define StrCpyN WINELIB_NAME_AW(StrCpyN) #define StrNCpy WINELIB_NAME_AW(StrCpyN) INT WINAPI StrCmpLogicalW(LPCWSTR,LPCWSTR); INT WINAPI StrCmpNA(LPCSTR,LPCSTR,INT); INT WINAPI StrCmpNW(LPCWSTR,LPCWSTR,INT); #define StrCmpN WINELIB_NAME_AW(StrCmpN) #define StrNCmp WINELIB_NAME_AW(StrCmpN) INT WINAPI StrCmpNIA(LPCSTR,LPCSTR,INT); INT WINAPI StrCmpNIW(LPCWSTR,LPCWSTR,INT); #define StrCmpNI WINELIB_NAME_AW(StrCmpNI) #define StrNCmpI WINELIB_NAME_AW(StrCmpNI) LPSTR WINAPI StrDupA(LPCSTR); LPWSTR WINAPI StrDupW(LPCWSTR); #define StrDup WINELIB_NAME_AW(StrDup) HRESULT WINAPI SHStrDupA(LPCSTR,WCHAR**); HRESULT WINAPI SHStrDupW(LPCWSTR,WCHAR**); #define SHStrDup WINELIB_NAME_AW(SHStrDup) LPSTR WINAPI StrFormatByteSizeA (DWORD,LPSTR,UINT); /* A/W Pairing is broken for this function */ LPSTR WINAPI StrFormatByteSize64A (LONGLONG,LPSTR,UINT); LPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT); #ifndef WINE_NO_UNICODE_MACROS #ifdef UNICODE #define StrFormatByteSize StrFormatByteSizeW #else #define StrFormatByteSize StrFormatByteSize64A #endif #endif LPSTR WINAPI StrFormatKBSizeA(LONGLONG,LPSTR,UINT); LPWSTR WINAPI StrFormatKBSizeW(LONGLONG,LPWSTR,UINT); #define StrFormatKBSize WINELIB_NAME_AW(StrFormatKBSize) int WINAPI StrFromTimeIntervalA(LPSTR,UINT,DWORD,int); int WINAPI StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int); #define StrFromTimeInterval WINELIB_NAME_AW(StrFromTimeInterval) BOOL WINAPI StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int); BOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int); #define StrIsIntlEqual WINELIB_NAME_AW(StrIsIntlEqual) #define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c) #define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c) #define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c) #define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c) LPSTR WINAPI StrNCatA(LPSTR,LPCSTR,int); LPWSTR WINAPI StrNCatW(LPWSTR,LPCWSTR,int); #define StrNCat WINELIB_NAME_AW(StrNCat) #define StrCatN WINELIB_NAME_AW(StrNCat) LPSTR WINAPI StrPBrkA(LPCSTR,LPCSTR); LPWSTR WINAPI StrPBrkW(LPCWSTR,LPCWSTR); #define StrPBrk WINELIB_NAME_AW(StrPBrk) LPSTR WINAPI StrRChrA(LPCSTR,LPCSTR,WORD); LPWSTR WINAPI StrRChrW(LPCWSTR,LPCWSTR,WORD); #define StrRChr WINELIB_NAME_AW(StrRChr) LPSTR WINAPI StrRChrIA(LPCSTR,LPCSTR,WORD); LPWSTR WINAPI StrRChrIW(LPCWSTR,LPCWSTR,WORD); #define StrRChrI WINELIB_NAME_AW(StrRChrI) LPSTR WINAPI StrRStrIA(LPCSTR,LPCSTR,LPCSTR); LPWSTR WINAPI StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR); #define StrRStrI WINELIB_NAME_AW(StrRStrI) int WINAPI StrSpnA(LPCSTR,LPCSTR); int WINAPI StrSpnW(LPCWSTR,LPCWSTR); #define StrSpn WINELIB_NAME_AW(StrSpn) LPSTR WINAPI StrStrA(LPCSTR,LPCSTR); LPWSTR WINAPI StrStrW(LPCWSTR,LPCWSTR); #define StrStr WINELIB_NAME_AW(StrStr) LPSTR WINAPI StrStrIA(LPCSTR,LPCSTR); LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR); #define StrStrI WINELIB_NAME_AW(StrStrI) LPWSTR WINAPI StrStrNW(LPCWSTR,LPCWSTR,UINT); LPWSTR WINAPI StrStrNIW(LPCWSTR,LPCWSTR,UINT); int WINAPI StrToIntA(LPCSTR); int WINAPI StrToIntW(LPCWSTR); #define StrToInt WINELIB_NAME_AW(StrToInt) #define StrToLong WINELIB_NAME_AW(StrToInt) BOOL WINAPI StrToIntExA(LPCSTR,DWORD,int*); BOOL WINAPI StrToIntExW(LPCWSTR,DWORD,int*); #define StrToIntEx WINELIB_NAME_AW(StrToIntEx) BOOL WINAPI StrToInt64ExA(LPCSTR,DWORD,LONGLONG*); BOOL WINAPI StrToInt64ExW(LPCWSTR,DWORD,LONGLONG*); #define StrToIntEx64 WINELIB_NAME_AW(StrToIntEx64) BOOL WINAPI StrTrimA(LPSTR,LPCSTR); BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR); #define StrTrim WINELIB_NAME_AW(StrTrim) INT WINAPI wvnsprintfA(LPSTR,INT,LPCSTR,__ms_va_list); INT WINAPI wvnsprintfW(LPWSTR,INT,LPCWSTR,__ms_va_list); #define wvnsprintf WINELIB_NAME_AW(wvnsprintf) INT WINAPIV wnsprintfA(LPSTR,INT,LPCSTR, ...); INT WINAPIV wnsprintfW(LPWSTR,INT,LPCWSTR, ...); #define wnsprintf WINELIB_NAME_AW(wnsprintf) HRESULT WINAPI SHLoadIndirectString(LPCWSTR,LPWSTR,UINT,PVOID*); BOOL WINAPI IntlStrEqWorkerA(BOOL,LPCSTR,LPCSTR,int); BOOL WINAPI IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int); #define IntlStrEqWorker WINELIB_NAME_AW(IntlStrEqWorker) #define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n) #define IntlStrEqNW(s1,s2,n) IntlStrEqWorkerW(TRUE,s1,s2,n) #define IntlStrEqN WINELIB_NAME_AW(IntlStrEqN) #define IntlStrEqNIA(s1,s2,n) IntlStrEqWorkerA(FALSE,s1,s2,n) #define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n) #define IntlStrEqNI WINELIB_NAME_AW(IntlStrEqNI) HRESULT WINAPI StrRetToStrA(STRRET*,LPCITEMIDLIST,LPSTR*); HRESULT WINAPI StrRetToStrW(STRRET*,LPCITEMIDLIST,LPWSTR*); #define StrRetToStr WINELIB_NAME_AW(StrRetToStr) HRESULT WINAPI StrRetToBufA(STRRET*,LPCITEMIDLIST,LPSTR,UINT); HRESULT WINAPI StrRetToBufW(STRRET*,LPCITEMIDLIST,LPWSTR,UINT); #define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf) HRESULT WINAPI StrRetToBSTR(STRRET*,LPCITEMIDLIST,BSTR*); BOOL WINAPI IsCharSpaceA(CHAR); BOOL WINAPI IsCharSpaceW(WCHAR); #define IsCharSpace WINELIB_NAME_AW(IsCharSpace) #endif /* NO_SHLWAPI_STRFCNS */ /* GDI functions */ #ifndef NO_SHLWAPI_GDI HPALETTE WINAPI SHCreateShellPalette(HDC); COLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD); COLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL); VOID WINAPI ColorRGBToHLS(COLORREF,LPWORD,LPWORD,LPWORD); #endif /* NO_SHLWAPI_GDI */ /* Security functions */ BOOL WINAPI IsInternetESCEnabled(void); /* Stream functions */ #ifndef NO_SHLWAPI_STREAM struct IStream * WINAPI SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD); struct IStream * WINAPI SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD); #define SHOpenRegStream WINELIB_NAME_AW(SHOpenRegStream2) /* Uses version 2 */ struct IStream * WINAPI SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD); struct IStream * WINAPI SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD); #define SHOpenRegStream2 WINELIB_NAME_AW(SHOpenRegStream2) HRESULT WINAPI SHCreateStreamOnFileA(LPCSTR,DWORD,struct IStream**); HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR,DWORD,struct IStream**); #define SHCreateStreamOnFile WINELIB_NAME_AW(SHCreateStreamOnFile) struct IStream * WINAPI SHCreateMemStream(const BYTE*,UINT); HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR,DWORD,DWORD,BOOL,struct IStream*,struct IStream**); HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**); #endif /* NO_SHLWAPI_STREAM */ HRESULT WINAPI IStream_Reset(IStream*); HRESULT WINAPI IStream_Size(IStream*,ULARGE_INTEGER*); /* SHAutoComplete flags */ #define SHACF_DEFAULT 0x00000000 #define SHACF_FILESYSTEM 0x00000001 #define SHACF_URLHISTORY 0x00000002 #define SHACF_URLMRU 0x00000004 #define SHACF_URLALL (SHACF_URLHISTORY|SHACF_URLMRU) #define SHACF_USETAB 0x00000008 #define SHACF_FILESYS_ONLY 0x00000010 #define SHACF_FILESYS_DIRS 0x00000020 #define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000 #define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000 #define SHACF_AUTOAPPEND_FORCE_ON 0x40000000 #define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000 HRESULT WINAPI SHAutoComplete(HWND,DWORD); /* Threads */ HRESULT WINAPI SHCreateThreadRef(LONG*, IUnknown**); HRESULT WINAPI SHGetThreadRef(IUnknown**); HRESULT WINAPI SHSetThreadRef(IUnknown*); HRESULT WINAPI SHReleaseThreadRef(void); /* SHCreateThread flags */ #define CTF_INSIST 0x01 /* Always call */ #define CTF_THREAD_REF 0x02 /* Hold thread ref */ #define CTF_PROCESS_REF 0x04 /* Hold process ref */ #define CTF_COINIT 0x08 /* Startup COM first */ #define CTF_FREELIBANDEXIT 0x10 /* Hold DLL ref */ #define CTF_REF_COUNTED 0x20 /* Thread is ref counted */ #define CTF_WAIT_ALLOWCOM 0x40 /* Allow marshalling */ BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE,void*,DWORD,LPTHREAD_START_ROUTINE); BOOL WINAPI SHSkipJunction(struct IBindCtx*,const CLSID*); /* Version Information */ typedef struct _DllVersionInfo { DWORD cbSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformID; } DLLVERSIONINFO; #define DLLVER_PLATFORM_WINDOWS 0x01 /* Win9x */ #define DLLVER_PLATFORM_NT 0x02 /* WinNT */ typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *); #ifdef __WINESRC__ /* shouldn't be here, but is nice for type checking */ HRESULT WINAPI DllGetVersion(DLLVERSIONINFO *) DECLSPEC_HIDDEN; #endif typedef struct _DLLVERSIONINFO2 { DLLVERSIONINFO info1; DWORD dwFlags; /* Reserved */ ULONGLONG DECLSPEC_ALIGN(8) ullVersion; /* 16 bits each for Major, Minor, Build, QFE */ } DLLVERSIONINFO2; #define DLLVER_MAJOR_MASK 0xFFFF000000000000 #define DLLVER_MINOR_MASK 0x0000FFFF00000000 #define DLLVER_BUILD_MASK 0x00000000FFFF0000 #define DLLVER_QFE_MASK 0x000000000000FFFF #define MAKEDLLVERULL(mjr, mnr, bld, qfe) (((ULONGLONG)(mjr)<< 48)| \ ((ULONGLONG)(mnr)<< 32) | ((ULONGLONG)(bld)<< 16) | (ULONGLONG)(qfe)) HRESULT WINAPI DllInstall(BOOL,LPCWSTR) DECLSPEC_HIDDEN; /* IsOS definitions */ #define OS_WIN32SORGREATER 0x00 #define OS_NT 0x01 #define OS_WIN95ORGREATER 0x02 #define OS_NT4ORGREATER 0x03 #define OS_WIN2000ORGREATER_ALT 0x04 #define OS_WIN98ORGREATER 0x05 #define OS_WIN98_GOLD 0x06 #define OS_WIN2000ORGREATER 0x07 #define OS_WIN2000PRO 0x08 #define OS_WIN2000SERVER 0x09 #define OS_WIN2000ADVSERVER 0x0A #define OS_WIN2000DATACENTER 0x0B #define OS_WIN2000TERMINAL 0x0C #define OS_EMBEDDED 0x0D #define OS_TERMINALCLIENT 0x0E #define OS_TERMINALREMOTEADMIN 0x0F #define OS_WIN95_GOLD 0x10 #define OS_MEORGREATER 0x11 #define OS_XPORGREATER 0x12 #define OS_HOME 0x13 #define OS_PROFESSIONAL 0x14 #define OS_DATACENTER 0x15 #define OS_ADVSERVER 0x16 #define OS_SERVER 0x17 #define OS_TERMINALSERVER 0x18 #define OS_PERSONALTERMINALSERVER 0x19 #define OS_FASTUSERSWITCHING 0x1A #define OS_WELCOMELOGONUI 0x1B #define OS_DOMAINMEMBER 0x1C #define OS_ANYSERVER 0x1D #define OS_WOW6432 0x1E #define OS_WEBSERVER 0x1F #define OS_SMALLBUSINESSSERVER 0x20 #define OS_TABLETPC 0x21 #define OS_SERVERADMINUI 0x22 #define OS_MEDIACENTER 0x23 #define OS_APPLIANCE 0x24 BOOL WINAPI IsOS(DWORD); /* SHSetTimerQueueTimer definitions */ #define TPS_EXECUTEIO 0x00000001 #define TPS_LONGEXECTIME 0x00000008 /* SHFormatDateTimeA/SHFormatDateTimeW flags */ #define FDTF_SHORTTIME 0x00000001 #define FDTF_SHORTDATE 0x00000002 #define FDTF_DEFAULT (FDTF_SHORTDATE | FDTF_SHORTTIME) #define FDTF_LONGDATE 0x00000004 #define FDTF_LONGTIME 0x00000008 #define FDTF_RELATIVE 0x00000010 #define FDTF_LTRDATE 0x00000100 #define FDTF_RTLDATE 0x00000200 #define FDTF_NOAUTOREADINGORDER 0x00000400 typedef struct { const IID *piid; int dwOffset; } QITAB, *LPQITAB; HRESULT WINAPI QISearch(void* base, const QITAB *pqit, REFIID riid, void **ppv); #include #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_SHLWAPI_H */ ================================================ FILE: wine/windows/shobjidl.idl ================================================ /* * COM interfaces for shell objects * * Copyright (C) 1999 Juergen Schmied * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; import "oaidl.idl"; import "docobj.idl"; import "shtypes.idl"; import "servprov.idl"; import "comcat.idl"; import "propidl.idl"; /* FIXME: import "prsht.idl";*/ import "msxml.idl"; import "wtypes.idl"; import "propsys.idl"; import "objectarray.idl"; /* FIXME: import "structuredquery.idl"; */ cpp_quote("/* FIXME: #include */") /***************************************************************************** * IPersistFolder interface */ [ object, uuid(000214ea-0000-0000-c000-000000000046), pointer_default(unique) ] interface IPersistFolder : IPersist { typedef IPersistFolder *LPPERSISTFOLDER; HRESULT Initialize( [in] LPCITEMIDLIST pidl ); } /***************************************************************************** * IPersistFolder2 interface */ [ object, uuid(1ac3d9f0-175c-11d1-95be-00609797ea4f), pointer_default(unique) ] interface IPersistFolder2 : IPersistFolder { typedef IPersistFolder2 *LPPERSISTFOLDER2; HRESULT GetCurFolder( [out] LPITEMIDLIST *ppidl ); } /***************************************************************************** * IPersistIDList interface */ [ object, uuid(1079acfc-29bd-11d3-8e0d-00c04f6837d5), pointer_default(unique) ] interface IPersistIDList : IPersist { HRESULT SetIDList( [in] LPCITEMIDLIST pidl ); HRESULT GetIDList( [out] LPITEMIDLIST *ppidl ); } /***************************************************************************** * IEnumIDList interface */ [ object, uuid(000214f2-0000-0000-c000-000000000046), pointer_default(unique) ] interface IEnumIDList : IUnknown { typedef IEnumIDList *LPENUMIDLIST; HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPITEMIDLIST *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt ); HRESULT Reset(); HRESULT Clone( [out] IEnumIDList **ppenum ); } /***************************************************************************** * IShellPropSheetExt interface */ cpp_quote("#if 0") typedef LPARAM LPFNSVADDPROPSHEETPAGE; cpp_quote("#else") cpp_quote("#include ") cpp_quote("typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;") cpp_quote("#endif") [ object, uuid(000214E9-0000-0000-C000-000000000046), pointer_default(unique), local ] interface IShellPropSheetExt : IUnknown { enum tagSHELLPROPSHEETEXTPAGEID { EXPPS_FILETYPES = 0x1 }; typedef UINT EXPPS; HRESULT AddPages( [in] LPFNSVADDPROPSHEETPAGE pfnAddPage, [in] LPARAM lParam); HRESULT ReplacePage( [in] EXPPS uPageID, [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith, [in] LPARAM lParam); } typedef IShellPropSheetExt *LPSHELLPROPSHEETEXT; /***************************************************************************** * IShellFolder interface */ [ object, uuid(000214e6-0000-0000-c000-000000000046), pointer_default(unique) ] interface IShellFolder : IUnknown { typedef IShellFolder * LPSHELLFOLDER; typedef enum tagSHGDN { SHGDN_NORMAL = 0, SHGDN_INFOLDER = 1, SHGDN_FOREDITING = 0x1000, SHGDN_INCLUDE_NONFILESYS = 0x2000, SHGDN_FORADDRESSBAR = 0x4000, SHGDN_FORPARSING = 0x8000 } SHGNO; typedef DWORD SHGDNF; enum tagSHCONTF { SHCONTF_CHECKING_FOR_CHILDREN = 0x00000010, SHCONTF_FOLDERS = 0x00000020, SHCONTF_NONFOLDERS = 0x00000040, SHCONTF_INCLUDEHIDDEN = 0x00000080, SHCONTF_INIT_ON_FIRST_NEXT = 0x00000100, SHCONTF_NETPRINTERSRCH = 0x00000200, SHCONTF_SHAREABLE = 0x00000400, SHCONTF_STORAGE = 0x00000800, SHCONTF_NAVIGATION_ENUM = 0x00001000, SHCONTF_FASTITEMS = 0x00002000, SHCONTF_FLATLIST = 0x00004000, SHCONTF_ENABLE_ASYNC = 0x00008000, SHCONTF_INCLUDESUPERHIDDEN = 0x00010000 }; typedef DWORD SHCONTF; cpp_quote("#define SFGAO_CANCOPY DROPEFFECT_COPY") cpp_quote("#define SFGAO_CANMOVE DROPEFFECT_MOVE") cpp_quote("#define SFGAO_CANLINK DROPEFFECT_LINK") cpp_quote("#define SFGAO_STORAGE 0x00000008L") cpp_quote("#define SFGAO_CANRENAME 0x00000010L") cpp_quote("#define SFGAO_CANDELETE 0x00000020L") cpp_quote("#define SFGAO_HASPROPSHEET 0x00000040L") cpp_quote("#define SFGAO_DROPTARGET 0x00000100L") cpp_quote("#define SFGAO_CAPABILITYMASK 0x00000177L") cpp_quote("#define SFGAO_SYSTEM 0x00001000L") cpp_quote("#define SFGAO_ENCRYPTED 0x00002000L") cpp_quote("#define SFGAO_ISSLOW 0x00004000L") cpp_quote("#define SFGAO_GHOSTED 0x00008000L") cpp_quote("#define SFGAO_LINK 0x00010000L") cpp_quote("#define SFGAO_SHARE 0x00020000L") cpp_quote("#define SFGAO_READONLY 0x00040000L") cpp_quote("#define SFGAO_HIDDEN 0x00080000L") cpp_quote("#define SFGAO_DISPLAYATTRMASK 0x000FC000L") cpp_quote("#define SFGAO_FILESYSANCESTOR 0x10000000L") cpp_quote("#define SFGAO_FOLDER 0x20000000L") cpp_quote("#define SFGAO_FILESYSTEM 0x40000000L") cpp_quote("#define SFGAO_HASSUBFOLDER 0x80000000L") cpp_quote("#define SFGAO_CONTENTSMASK 0x80000000L") cpp_quote("#define SFGAO_VALIDATE 0x01000000L") cpp_quote("#define SFGAO_REMOVABLE 0x02000000L") cpp_quote("#define SFGAO_COMPRESSED 0x04000000L") cpp_quote("#define SFGAO_BROWSABLE 0x08000000L") cpp_quote("#define SFGAO_NONENUMERATED 0x00100000L") cpp_quote("#define SFGAO_NEWCONTENT 0x00200000L") cpp_quote("#define SFGAO_CANMONIKER 0x00400000L") cpp_quote("#define SFGAO_HASSTORAGE 0x00400000L") cpp_quote("#define SFGAO_STREAM 0x00400000L") cpp_quote("#define SFGAO_STORAGEANCESTOR 0x00800000L") cpp_quote("#define SFGAO_STORAGEGAPMASK 0x70C50008L") cpp_quote("#define SFGAO_PKEYSFGAOMASK 0x81044000L") typedef ULONG SFGAOF; HRESULT ParseDisplayName( [in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] LPITEMIDLIST *ppidl, [in, out, unique] ULONG *pdwAttributes); HRESULT EnumObjects( [in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList); HRESULT BindToObject( [in] LPCITEMIDLIST pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut); HRESULT BindToStorage( [in] LPCITEMIDLIST pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj); HRESULT CompareIDs( [in] LPARAM lParam, [in] LPCITEMIDLIST pidl1, [in] LPCITEMIDLIST pidl2); HRESULT CreateViewObject( [in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut); HRESULT GetAttributesOf( [in] UINT cidl, [in, size_is(cidl)] LPCITEMIDLIST *apidl, [in, out] SFGAOF *rgfInOut); HRESULT GetUIObjectOf( [in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] LPCITEMIDLIST *apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut); HRESULT GetDisplayNameOf( [in] LPCITEMIDLIST pidl, [in] SHGDNF uFlags, [out] STRRET *lpName); HRESULT SetNameOf( [in] HWND hwnd, [in] LPCITEMIDLIST pidl, [in, string] LPCOLESTR lpszName, [in] SHGDNF uFlags, [out] LPITEMIDLIST *ppidlOut); } /***************************************************************************** * IEnumExtraSearch interface */ [ object, uuid(0e700be1-9db6-11d1-a1ce-00c04fd75d13), pointer_default(unique) ] interface IEnumExtraSearch : IUnknown { typedef IEnumExtraSearch *LPENUMEXTRASEARCH; typedef struct { GUID guidSearch; WCHAR wszFriendlyName[80]; /* *WCHAR wszMenuText[80]; *WCHAR wszHelpText[MAX_PATH]; */ WCHAR wszUrl[2084]; /* *WCHAR wszIcon[MAX_PATH+10]; *WCHAR wszGreyIcon[MAX_PATH+10]; *WCHAR wszClrIcon[MAX_PATH+10]; */ } EXTRASEARCH, *LPEXTRASEARCH; HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] EXTRASEARCH *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt ); HRESULT Reset(); HRESULT Clone( [out] IEnumExtraSearch **ppenum ); } /***************************************************************************** * IShellFolder2 interface */ [ object, uuid(93f2f68c-1d1b-11d3-a30e-00c04f79abd1), pointer_default(unique) ] interface IShellFolder2 : IShellFolder { typedef struct { GUID fmtid; DWORD pid; } SHCOLUMNID, *LPSHCOLUMNID; typedef const SHCOLUMNID *LPCSHCOLUMNID; HRESULT GetDefaultSearchGUID( [out] GUID *lpguid ); HRESULT EnumSearches( [out] IEnumExtraSearch **ppenum ); HRESULT GetDefaultColumn( [in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay ); HRESULT GetDefaultColumnState( [in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags ); HRESULT GetDetailsEx( [in] LPCITEMIDLIST pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv); HRESULT GetDetailsOf( [in] LPCITEMIDLIST pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd); HRESULT MapColumnToSCID( [in] UINT iColumn, [in] SHCOLUMNID *pscid ); } /***************************************************************************** * IShellItem interface */ [ object, uuid(43826d1e-e718-42ee-bc55-a1e261c37bfe), pointer_default(unique) ] interface IShellItem : IUnknown { typedef [v1_enum] enum { SIGDN_NORMALDISPLAY = 0, SIGDN_PARENTRELATIVEPARSING = 0x80018001, SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000, SIGDN_PARENTRELATIVEEDITING = 0x80031001, SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000, SIGDN_FILESYSPATH = 0x80058000, SIGDN_URL = 0x80068000, SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8007c001, SIGDN_PARENTRELATIVE = 0x80080001, SIGDN_PARENTRELATIVEFORUI = 0x80094001, } SIGDN; /* & 0xFFFF => SHGDN */ [v1_enum] enum _SICHINTF { SICHINT_DISPLAY = 0x00000000, SICHINT_CANONICAL = 0x10000000, SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000, SICHINT_ALLFIELDS = 0x80000000 }; typedef DWORD SICHINTF; HRESULT BindToHandler( [in] IBindCtx *pbc, [in] REFGUID rbhid, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut); HRESULT GetParent( [out] IShellItem **ppsi ); HRESULT GetDisplayName( [in] SIGDN sigdnName, [out] LPWSTR *ppszName); HRESULT GetAttributes( [in] SFGAOF sfgaoMask, [out] SFGAOF *psfgaoAttribs); HRESULT Compare( [in] IShellItem *psi, [in] SICHINTF hint, [out] int *piOrder); } /***************************************************************************** * IShellItem2 interface */ [ object, uuid(7E9FB0D3-919F-4307-AB2E-9B1860310C93), pointer_default(unique) ] interface IShellItem2 : IShellItem { HRESULT GetPropertyStore( [in] GETPROPERTYSTOREFLAGS flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPropertyStoreWithCreateObject( [in] GETPROPERTYSTOREFLAGS flags, [in] IUnknown *punkCreateObject, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPropertyStoreForKeys( [in, size_is(cKeys)] const PROPERTYKEY *rgKeys, [in] UINT cKeys, [in] GETPROPERTYSTOREFLAGS flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPropertyDescriptionList( [in] REFPROPERTYKEY keyType, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT Update( [in, unique] IBindCtx *pbc); HRESULT GetProperty( [in] REFPROPERTYKEY key, [out] PROPVARIANT *ppropvar); HRESULT GetCLSID( [in] REFPROPERTYKEY key, [out] CLSID *pclsid); HRESULT GetFileTime ( [in] REFPROPERTYKEY key, [out] FILETIME *pft); HRESULT GetInt32( [in] REFPROPERTYKEY key, [out] int *pi); HRESULT GetString( [in] REFPROPERTYKEY key, [out, string] LPWSTR *ppsz); HRESULT GetUInt32( [in] REFPROPERTYKEY key, [out] ULONG *pui); HRESULT GetUInt64( [in] REFPROPERTYKEY key, [out] ULONGLONG *pull); HRESULT GetBool( [in] REFPROPERTYKEY key, [out] BOOL *pf); } typedef [v1_enum] enum tagNWMF { NWMF_UNLOADING = 0x00000001, NWMF_USERINITED = 0x00000002, NWMF_FIRST = 0x00000004, NWMF_OVERRIDEKEY = 0x00000008, NWMF_SHOWHELP = 0x00000010, NWMF_HTMLDIALOG = 0x00000020, NWMF_FROMDIALOGCHILD = 0x00000040, NWMF_USERREQUESTED = 0x00000080, NWMF_USERALLOWED = 0x00000100, NWMF_FORCEWINDOW = 0x00010000, NWMF_FORCETAB = 0x00020000, NWMF_SUGGESTWINDOW = 0x00040000, NWMF_SUGGESTTAB = 0x00080000, NWMF_INACTIVETAB = 0x00100000, } NWMF; [ uuid(d2bc4c84-3f72-4a52-a604-7bcbf3982cbb), object, pointer_default(unique) ] interface INewWindowManager : IUnknown { HRESULT EvaluateNewWindow( [in, string] LPCWSTR pszUrl, [in, string] LPCWSTR pszName, [in, string] LPCWSTR pszUrlContext, [in, string] LPCWSTR pszFeatures, [in] BOOL fReplace, [in] DWORD dwFlags, [in] DWORD dwUserActionTime); } cpp_quote("#define SID_SNewWindowManager IID_INewWindowManager") /***************************************************************************** * IEnumShellItems interface */ [ object, uuid(70629033-E363-4A28-A567-0DB78006E6D7), pointer_default(unique) ] interface IEnumShellItems : IUnknown { [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumShellItems **ppenum); } /***************************************************************************** * IShellItemArray interface */ [ object, uuid(B63EA76D-1F85-456F-A19C-48159EFA858B), pointer_default(unique) ] interface IShellItemArray : IUnknown { typedef [v1_enum] enum SIATTRIBFLAGS { SIATTRIBFLAGS_AND = 0x0001, SIATTRIBFLAGS_OR = 0x0002, SIATTRIBFLAGS_APPCOMPAT = 0x0003, SIATTRIBFLAGS_MASK = 0x0003, SIATTRIBFLAGS_ALLITEMS = 0x4000 } SIATTRIBFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(SIATTRIBFLAGS)") HRESULT BindToHandler( [in, unique] IBindCtx *pbc, [in] REFGUID bhid, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut); HRESULT GetPropertyStore( [in] GETPROPERTYSTOREFLAGS flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPropertyDescriptionList( [in] REFPROPERTYKEY keyType, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetAttributes( [in] SIATTRIBFLAGS AttribFlags, [in] SFGAOF sfgaoMask, [out] SFGAOF *psfgaoAttribs); HRESULT GetCount( [out] DWORD *pdwNumItems); HRESULT GetItemAt( [in] DWORD dwIndex, [out] IShellItem **ppsi); HRESULT EnumItems( [out] IEnumShellItems **ppenumShellItems); } typedef [v1_enum] enum DATAOBJ_GET_ITEM_FLAGS { DOGIF_DEFAULT = 0x0, DOGIF_TRAVERSE_LINK = 0x1, DOGIF_NO_HDROP = 0x2, DOGIF_NO_URL = 0x4, DOGIF_ONLY_IF_ONE = 0x8 } DATAOBJ_GET_ITEM_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DATAOBJ_GET_ITEM_FLAGS)") cpp_quote("HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName);") cpp_quote("HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv);") cpp_quote("HRESULT WINAPI SHCreateItemFromIDList(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv);") cpp_quote("HRESULT WINAPI SHCreateItemFromRelativeName(IShellItem *parent, PCWSTR name, IBindCtx *pbc, REFIID riid, void **ppv);") cpp_quote("HRESULT WINAPI SHGetItemFromDataObject(IDataObject *pdtobj, DATAOBJ_GET_ITEM_FLAGS dwFlags, REFIID riid, void **ppv);") cpp_quote("HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl);") cpp_quote("HRESULT WINAPI SHGetItemFromObject(IUnknown *punk, REFIID riid, void **ppv);") cpp_quote("HRESULT WINAPI SHCreateShellItemArray(PCIDLIST_ABSOLUTE pidlParent, IShellFolder* psf, UINT cidl, PCUITEMID_CHILD_ARRAY ppidl, IShellItemArray **ppsiItemArray);") cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromShellItem(IShellItem *psi, REFIID riid, void **ppv);") cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromIDLists(UINT cidl, PCIDLIST_ABSOLUTE_ARRAY pidl_array, IShellItemArray **psia);") cpp_quote("HRESULT WINAPI SHCreateItemInKnownFolder(REFKNOWNFOLDERID rfid, DWORD flags, PCWSTR filename, REFIID riid, void **ppv);") cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromDataObject(IDataObject *pdo, REFIID riid, void **ppv);") /***************************************************************************** * IShellItemFilter interface */ [ object, uuid(2659B475-EEB8-48B7-8F07-B378810F48CF), pointer_default(unique) ] interface IShellItemFilter : IUnknown { HRESULT IncludeItem( [in] IShellItem *psi); HRESULT GetEnumFlagsForItem( [in] IShellItem *psi, [out] SHCONTF *pgrfFlags); } /***************************************************************************** * FOLDERSETTINGS */ typedef char *LPVIEWSETTINGS; typedef [v1_enum] enum FOLDERFLAGS { FWF_AUTOARRANGE = 0x00000001, FWF_ABBREVIATEDNAMES = 0x00000002, FWF_SNAPTOGRID = 0x00000004, FWF_OWNERDATA = 0x00000008, FWF_BESTFITWINDOW = 0x00000010, FWF_DESKTOP = 0x00000020, FWF_SINGLESEL = 0x00000040, FWF_NOSUBFOLDERS = 0x00000080, FWF_TRANSPARENT = 0x00000100, FWF_NOCLIENTEDGE = 0x00000200, FWF_NOSCROLL = 0x00000400, FWF_ALIGNLEFT = 0x00000800, FWF_NOICONS = 0x00001000, FWF_SHOWSELALWAYS = 0x00002000, FWF_NOVISIBLE = 0x00004000, FWF_SINGLECLICKACTIVATE = 0x00008000, FWF_NOWEBVIEW = 0x00010000, FWF_HIDEFILENAMES = 0x00020000, FWF_CHECKSELECT = 0x00040000, FWF_NOENUMREFRESH = 0x00080000, FWF_NOGROUPING = 0x00100000, FWF_FULLROWSELECT = 0x00200000, FWF_NOFILTERS = 0x00400000, FWF_NOCOLUMNHEADER = 0x00800000, FWF_NOHEADERINALLVIEWS = 0x01000000, FWF_EXTENDEDTILES = 0x02000000, FWF_TRICHECKSELECT = 0x04000000, FWF_AUTOCHECKSELECT = 0x08000000, FWF_NOBROWSERVIEWSTATE = 0x10000000, FWF_SUBSETGROUPS = 0x20000000, FWF_USESEARCHFOLDER = 0x40000000, FWF_ALLOWRTLREADING = 0x80000000 } FOLDERFLAGS; typedef [v1_enum] enum FOLDERVIEWMODE { FVM_AUTO =-1, FVM_ICON = 1, FVM_FIRST = FVM_ICON, FVM_SMALLICON = 2, FVM_LIST = 3, FVM_DETAILS = 4, FVM_THUMBNAIL = 5, FVM_TILE = 6, FVM_THUMBSTRIP = 7, FVM_CONTENT = 8, FVM_LAST = FVM_CONTENT } FOLDERVIEWMODE; typedef struct { UINT ViewMode; UINT fFlags; } FOLDERSETTINGS, *PFOLDERSETTINGS, *LPFOLDERSETTINGS; typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS; /***************************************************************************** * IShellIcon interface */ [ uuid(000214e5-0000-0000-c000-000000000046), object, pointer_default(unique) ] interface IShellIcon : IUnknown { HRESULT GetIconOf( [in] PCUITEMID_CHILD pidl, [in] UINT flags, [out] int *pIconIndex); } /***************************************************************************** * IShellView interface */ interface IShellBrowser; /* forward declaration */ [ object, uuid(000214e3-0000-0000-c000-000000000046), pointer_default(unique) ] interface IShellView : IOleWindow { typedef IShellView *LPSHELLVIEW; typedef [v1_enum] enum _SVSIF { SVSI_DESELECT = 0x00000000, SVSI_SELECT = 0x00000001, SVSI_EDIT = 0x00000003, SVSI_DESELECTOTHERS = 0x00000004, SVSI_ENSUREVISIBLE = 0x00000008, SVSI_FOCUSED = 0x00000010, SVSI_TRANSLATEPT = 0x00000020, SVSI_SELECTIONMARK = 0x00000040, SVSI_POSITIONITEM = 0x00000080, SVSI_CHECK = 0x00000100, SVSI_CHECK2 = 0x00000200, SVSI_KEYBOARDSELECT = 0x00000401, SVSI_NOTAKEFOCUS = 0x40000000, } _SVSIF; cpp_quote("#define SVSI_NOSTATECHANGE 0x80000000") typedef UINT SVSIF; typedef [v1_enum] enum _SVGIO { SVGIO_BACKGROUND = 0x00000000, SVGIO_SELECTION = 0x00000001, SVGIO_ALLVIEW = 0x00000002, SVGIO_CHECKED = 0x00000003, SVGIO_TYPE_MASK = 0x0000000f, SVGIO_FLAG_VIEWORDER = 0x80000000, } _SVGIO; typedef INT SVGIO; typedef [v1_enum] enum SVUIA_STATUS { SVUIA_DEACTIVATE = 0, SVUIA_ACTIVATE_NOFOCUS = 1, SVUIA_ACTIVATE_FOCUS = 2, SVUIA_INPLACEACTIVATE = 3 } SVUIA_STATUS; HRESULT TranslateAccelerator( [in] MSG *pmsg ); HRESULT EnableModeless( [in] BOOL fEnable ); HRESULT UIActivate( [in] UINT uState ); HRESULT Refresh(); HRESULT CreateViewWindow( [in] IShellView *psvPrevious, [in] LPCFOLDERSETTINGS lpfs, [in] IShellBrowser *psb, [out] RECT *prcView, [out] HWND *phWnd); HRESULT DestroyViewWindow(); HRESULT GetCurrentInfo( [out] LPFOLDERSETTINGS lpfs ); [local] HRESULT AddPropertySheetPages( [in] DWORD dwReserved, [in] LPFNSVADDPROPSHEETPAGE pfn, [in] LPARAM lparam); HRESULT SaveViewState(); HRESULT SelectItem( [in] LPCITEMIDLIST pidlItem, [in] SVSIF uFlags); HRESULT GetItemObject( [in] UINT uItem, [in] REFIID riid, [out, iid_is(riid)] void **ppv); } [ object, uuid(88e39e80-3578-11cf-ae69-08002b2e1262), pointer_default(unique) ] interface IShellView2 : IShellView { typedef GUID SHELLVIEWID; cpp_quote("#include ") typedef struct _SV2CVW2_PARAMS { DWORD cbSize; IShellView *psvPrev; LPCFOLDERSETTINGS pfs; IShellBrowser *psbOwner; RECT *prcView; SHELLVIEWID const *pvid; HWND hwndView; } SV2CVW2_PARAMS, *LPSV2CVW2_PARAMS; cpp_quote("#include ") HRESULT GetView( [in, out] SHELLVIEWID *view_guid, [in] ULONG view_type ); HRESULT CreateViewWindow2( [in] LPSV2CVW2_PARAMS view_params ); HRESULT HandleRename( [in] LPCITEMIDLIST new_pidl ); HRESULT SelectAndPositionItem( [in] LPCITEMIDLIST item, [in] UINT flags, [in] POINT *point ); } [ object, uuid(ec39fa88-f8af-41c5-8421-38bed28f4673), pointer_default(unique) ] interface IShellView3 : IShellView2 { [v1_enum] enum _SV3CVW3_FLAGS { SV3CVW3_DEFAULT = 0x00000000, SV3CVW3_NONINTERACTIVE = 0x00000001, SV3CVW3_FORCEVIEWMODE = 0x00000002, SV3CVW3_FORCEFOLDERFLAGS = 0x00000004 }; typedef DWORD SV3CVW3_FLAGS; HRESULT CreateViewWindow3( [in] IShellBrowser *owner, [in, unique] IShellView *prev_view, [in] SV3CVW3_FLAGS view_flags, [in] FOLDERFLAGS mask, [in] FOLDERFLAGS flags, [in] FOLDERVIEWMODE mode, [in, unique] const SHELLVIEWID *view_id, [in] const RECT *rect, [out] HWND *hwnd); } /***************************************************************************** * IFolderView interface */ [ uuid(cde725b0-ccc9-4519-917e-325d72fab4ce), object, pointer_default(unique) ] interface IFolderView : IUnknown { HRESULT GetCurrentViewMode( [out] UINT *mode ); HRESULT SetCurrentViewMode( [in] UINT mode ); HRESULT GetFolder( [in] REFIID riid, [out, iid_is(riid)] void **ppv ); HRESULT Item( [in] int index, [out] PITEMID_CHILD *ppidl ); HRESULT ItemCount( [in] UINT flags, [out] int *items ); HRESULT Items( [in] UINT flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv ); HRESULT GetSelectionMarkedItem( [out] int *item ); HRESULT GetFocusedItem( [out] int *item ); HRESULT GetItemPosition( [in] PCUITEMID_CHILD pidl, [out] POINT* ppt ); HRESULT GetSpacing( [in, out, unique] POINT* pt ); HRESULT GetDefaultSpacing( [out] POINT* pt ); HRESULT GetAutoArrange(); HRESULT SelectItem( [in] int item, [in] DWORD flags ); HRESULT SelectAndPositionItems( [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, unique, size_is(cidl)] POINT* apt, [in] DWORD flags ); } [v1_enum] enum tagSORTDIRECTION { SORT_DESCENDING = -1, SORT_ASCENDING = 1 }; typedef int SORTDIRECTION; typedef struct SORTCOLUMN { PROPERTYKEY propkey; SORTDIRECTION direction; } SORTCOLUMN; typedef [v1_enum] enum FVTEXTTYPE { FVST_EMPTYTEXT = 0 } FVTEXTTYPE; [ uuid(1af3a467-214f-4298-908e-06b03e0b39f9), object, pointer_default(unique) ] interface IFolderView2 : IFolderView { HRESULT SetGroupBy( [in] REFPROPERTYKEY key, [in] BOOL ascending); [local] HRESULT GetGroupBy( [out] PROPERTYKEY *pkey, [out] BOOL *ascending); [call_as(GetGroupBy)] HRESULT RemoteGetGroupBy( [out] PROPERTYKEY *pkey, [out] BOOL *ascending); HRESULT SetViewProperty( [in] PCUITEMID_CHILD pidl, [in] REFPROPERTYKEY propkey, [in] REFPROPVARIANT propvar); HRESULT GetViewProperty( [in] PCUITEMID_CHILD pidl, [in] REFPROPERTYKEY propkey, [out] PROPVARIANT *propvar); HRESULT SetTileViewProperties( [in] PCUITEMID_CHILD pidl, [in, string] LPCWSTR prop_list); HRESULT SetExtendedTileViewProperties( [in] PCUITEMID_CHILD pidl, [in, string] LPCWSTR prop_list); HRESULT SetText( [in] FVTEXTTYPE type, [in] LPCWSTR text); HRESULT SetCurrentFolderFlags( [in] DWORD mask, [in] DWORD flags); HRESULT GetCurrentFolderFlags([out] DWORD *flags); HRESULT GetSortColumnCount([out] int *columns); HRESULT SetSortColumns( [in, size_is(count)] const SORTCOLUMN *columns, [in] int count); HRESULT GetSortColumns( [out, size_is(count)] SORTCOLUMN *columns, [in] int count); HRESULT GetItem( [in] int ittem, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetVisibleItem( [in] int start, [in] BOOL previous, [out] int *item); HRESULT GetSelectedItem( [in] int start, [out] int *item); HRESULT GetSelection( [in] BOOL none_implies_folder, [out] IShellItemArray **array); HRESULT GetSelectionState( [in] PCUITEMID_CHILD pidl, [out] DWORD *flags); HRESULT InvokeVerbOnSelection([in, unique, string] LPCSTR verb); HRESULT SetViewModeAndIconSize( [in] FOLDERVIEWMODE mode, [in] int size); HRESULT GetViewModeAndIconSize( [out] FOLDERVIEWMODE *mode, [out] int *size); HRESULT SetGroupSubsetCount([in] UINT visible_rows); HRESULT GetGroupSubsetCount([out] UINT *visible_rows); HRESULT SetRedraw([in] BOOL redraw); HRESULT IsMoveInSameFolder(); HRESULT DoRename(); } /***************************************************************************** * IShellBrowser interface */ [ object, uuid(000214e2-0000-0000-c000-000000000046), pointer_default(unique) ] interface IShellBrowser : IOleWindow { typedef IShellBrowser *LPSHELLBROWSER; cpp_quote("#define SBSP_DEFBROWSER 0x00000000") cpp_quote("#define SBSP_SAMEBROWSER 0x00000001") cpp_quote("#define SBSP_NEWBROWSER 0x00000002") cpp_quote("#define SBSP_DEFMODE 0x00000000") cpp_quote("#define SBSP_OPENMODE 0x00000010") cpp_quote("#define SBSP_EXPLOREMODE 0x00000020") cpp_quote("#define SBSP_HELPMODE 0x00000040") cpp_quote("#define SBSP_NOTRANSFERHIST 0x00000080") cpp_quote("#define SBSP_ABSOLUTE 0x00000000") cpp_quote("#define SBSP_RELATIVE 0x00001000") cpp_quote("#define SBSP_PARENT 0x00002000") cpp_quote("#define SBSP_NAVIGATEBACK 0x00004000") cpp_quote("#define SBSP_NAVIGATEFORWARD 0x00008000") cpp_quote("#define SBSP_ALLOW_AUTONAVIGATE 0x00010000") cpp_quote("#define SBSP_KEEPSAMETEMPLATE 0x00020000") cpp_quote("#define SBSP_KEEPWORDWHEELTEXT 0x00040000") cpp_quote("#define SBSP_ACTIVATE_NOFOCUS 0x00080000") cpp_quote("#define SBSP_CREATENOHISTORY 0x00100000") cpp_quote("#define SBSP_PLAYNOSOUND 0x00200000") cpp_quote("#define SBSP_CALLERUNTURUSTED 0x00800000") cpp_quote("#define SBSP_TRUSTFIRSTDOWNLOAD 0x01000000") cpp_quote("#define SBSP_UNTRUSTEDFORDOWNLOAD 0x02000000") cpp_quote("#define SBSP_NOAUTOSELECT 0x04000000") cpp_quote("#define SBSP_WRITENOHISTORY 0x08000000") cpp_quote("#define SBSP_TRUSTEDFORACTIVEX 0x10000000") cpp_quote("#define SBSP_FEEDNAVIGATION 0x20000000") cpp_quote("#define SBSP_REDIRECT 0x40000000") cpp_quote("#define SBSP_INITIATEDBYHLINKFRAME 0x80000000") cpp_quote("#define FCW_STATUS 0x0001") cpp_quote("#define FCW_TOOLBAR 0x0002") cpp_quote("#define FCW_TREE 0x0003") cpp_quote("#define FCW_INTERNETBAR 0x0006") cpp_quote("#define FCW_PROGRESS 0x0008") cpp_quote("#define FCT_MERGE 0x0001") cpp_quote("#define FCT_CONFIGABLE 0x0002") cpp_quote("#define FCT_ADDTOEND 0x0004") cpp_quote("#if 0") typedef LPARAM LPTBBUTTONSB; cpp_quote("#else") cpp_quote("#include ") cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;") cpp_quote("#endif") HRESULT InsertMenusSB( [in] HMENU hmenuShared, [in, out] LPOLEMENUGROUPWIDTHS lpMenuWidths); HRESULT SetMenuSB( [in] HMENU hmenuShared, [in] HOLEMENU holemenuReserved, [in] HWND hwndActiveObject); HRESULT RemoveMenusSB( [in] HMENU hmenuShared ); HRESULT SetStatusTextSB( [in, unique] LPCOLESTR pszStatusText ); HRESULT EnableModelessSB( [in] BOOL fEnable ); HRESULT TranslateAcceleratorSB( [in] MSG *pmsg, [in] WORD wID ); HRESULT BrowseObject( [in] LPCITEMIDLIST pidl, [in] UINT wFlags); HRESULT GetViewStateStream( [in] DWORD grfMode, [out] IStream **ppStrm); HRESULT GetControlWindow( [in] UINT id, [out] HWND *phwnd); [local] HRESULT SendControlMsg( [in] UINT id, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam, [in] LRESULT *pret); HRESULT QueryActiveShellView( [out] IShellView **ppshv ); HRESULT OnViewWindowActive( [in] IShellView *pshv ); [local] HRESULT SetToolbarItems( [in] LPTBBUTTONSB lpButtons, [in] UINT nButtons, [in] UINT uFlags); } /***************************************************************************** * IShellLinkA interface */ [ object, uuid(000214ee-0000-0000-c000-000000000046), pointer_default(unique) ] interface IShellLinkA : IUnknown { typedef [v1_enum] enum SLR_FLAGS { SLR_NO_UI = 0x0001, SLR_ANY_MATCH = 0x0002, SLR_UPDATE = 0x0004, SLR_NOUPDATE = 0x0008, SLR_NOSEARCH = 0x0010, SLR_NOTRACK = 0x0020, SLR_NOLINKINFO = 0x0040, SLR_INVOKE_MSI = 0x0080, SLR_NO_UI_WITH_MSG_PUMP = 0x0101, SLR_OFFER_DELETE_WITHOUT_FILE = 0x0200, SLR_KNOWNFOLDER = 0x0400, SLR_MACHINE_IN_LOCAL_TARGET = 0x0800, SLR_UPDATE_MACHINE_AND_SID = 0x1000, SLR_NO_OBJECT_ID = 0x2000 } SLR_FLAGS; typedef [v1_enum] enum SLGP_FLAGS { SLGP_SHORTPATH = 0x0001, SLGP_UNCPRIORITY = 0x0002, SLGP_RAWPATH = 0x0004, SLGP_RELATIVEPRIORITY = 0x0008 } SLGP_FLAGS; HRESULT GetPath( [out, size_is(cch)] LPSTR pszFile, [in] int cch, [in, out, unique] WIN32_FIND_DATAA *pfd, [in] DWORD fFlags); HRESULT GetIDList( [out] LPITEMIDLIST * ppidl ); HRESULT SetIDList( [in] LPCITEMIDLIST pidl ); HRESULT GetDescription( [out, size_is(cch)] LPSTR pszName, [in] int cch); HRESULT SetDescription( [in] LPCSTR pszName ); HRESULT GetWorkingDirectory( [out, size_is(cch)] LPSTR pszDir, [in] int cch); HRESULT SetWorkingDirectory( [in] LPCSTR pszDir ); HRESULT GetArguments( [out, size_is(cch)] LPSTR pszArgs, [in] int cch); HRESULT SetArguments( [in] LPCSTR pszArgs ); HRESULT GetHotkey( [out] WORD *pwHotkey ); HRESULT SetHotkey( [in] WORD wHotkey ); HRESULT GetShowCmd( [out] int *piShowCmd ); HRESULT SetShowCmd( [in] int iShowCmd ); HRESULT GetIconLocation( [out, size_is(cch)] LPSTR pszIconPath, [in] int cch, [out] int *piIcon); HRESULT SetIconLocation( [in] LPCSTR pszIconPath, [in] int iIcon); HRESULT SetRelativePath( [in] LPCSTR pszPathRel, [in] DWORD dwReserved); HRESULT Resolve( [in] HWND hwnd, [in] DWORD fFlags); HRESULT SetPath( [in] LPCSTR pszFile ); } /***************************************************************************** * IShellLinkW interface */ [ object, uuid(000214f9-0000-0000-c000-000000000046), pointer_default(unique) ] interface IShellLinkW : IUnknown { HRESULT GetPath( [out, size_is(cch)] LPWSTR pszFile, [in] int cch, [in, out] WIN32_FIND_DATAW *pfd, [in] DWORD fFlags); HRESULT GetIDList( [out] LPITEMIDLIST * ppidl ); HRESULT SetIDList( [in] LPCITEMIDLIST pidl ); HRESULT GetDescription( [out, size_is(cch)] LPWSTR pszName, [in] int cch); HRESULT SetDescription( [in] LPCWSTR pszName ); HRESULT GetWorkingDirectory( [out, size_is(cch)] LPWSTR pszDir, [in] int cch); HRESULT SetWorkingDirectory( [in] LPCWSTR pszDir ); HRESULT GetArguments( [out, size_is(cch)] LPWSTR pszArgs, [in] int cch); HRESULT SetArguments( [in] LPCWSTR pszArgs ); HRESULT GetHotkey( [out] WORD *pwHotkey ); HRESULT SetHotkey( [in] WORD wHotkey ); HRESULT GetShowCmd( [out] int *piShowCmd ); HRESULT SetShowCmd( [in] int iShowCmd ); HRESULT GetIconLocation( [out, size_is(cch)] LPWSTR pszIconPath, [in] int cch, [out] int *piIcon); HRESULT SetIconLocation( [in] LPCWSTR pszIconPath, [in] int iIcon); HRESULT SetRelativePath( [in] LPCWSTR pszPathRel, [in] DWORD dwReserved); HRESULT Resolve( [in] HWND hwnd, [in] DWORD fFlags); HRESULT SetPath( [in] LPCWSTR pszFile ); } cpp_quote("#define IShellLink WINELIB_NAME_AW(IShellLink)") /***************************************************************************** * IShellExtInit interface */ [ object, uuid(000214e8-0000-0000-c000-000000000046), pointer_default(unique), local ] interface IShellExtInit : IUnknown { typedef IShellExtInit *LPSHELLEXTINIT; HRESULT Initialize( [in] LPCITEMIDLIST pidlFolder, [in] IDataObject *pdtobj, [in] HKEY hkeyProgID); } /*******************************************************************************/ /* Note: the following interfaces are not in shobjidl.idl under Windows, they */ /* are declared directly in shlobj.h. It hopefully won't break anything to put */ /* them here anyway. */ /*******************************************************************************/ #ifndef MAX_PATH #define MAX_PATH 260 #endif /***************************************************************************** * IPersistFolder3 interface */ [ object, uuid(cef04fdf-fe72-11d2-87a5-00c04f6837cf), pointer_default(unique) ] interface IPersistFolder3 : IPersistFolder2 { typedef struct { LPITEMIDLIST pidlTargetFolder; WCHAR szTargetParsingName[MAX_PATH]; WCHAR szNetworkProvider[MAX_PATH]; DWORD dwAttributes; int csidl; } PERSIST_FOLDER_TARGET_INFO; HRESULT InitializeEx( [in] IBindCtx *pbc, [in] LPCITEMIDLIST pidlRoot, [in] const PERSIST_FOLDER_TARGET_INFO *ppfti); HRESULT GetFolderTargetInfo( [out] PERSIST_FOLDER_TARGET_INFO *ppfti ); } /***************************************************************************** * IExtractIconA interface */ [ object, uuid(000214eb-0000-0000-c000-000000000046), pointer_default(unique), local ] interface IExtractIconA : IUnknown { cpp_quote("#define GIL_OPENICON 0x0001") cpp_quote("#define GIL_FORSHELL 0x0002") cpp_quote("#define GIL_ASYNC 0x0020") cpp_quote("#define GIL_DEFAULTICON 0x0040") cpp_quote("#define GIL_FORSHORTCUT 0x0080") cpp_quote("#define GIL_SIMULATEDOC 0x0001") cpp_quote("#define GIL_PERINSTANCE 0x0002") cpp_quote("#define GIL_PERCLASS 0x0004") cpp_quote("#define GIL_NOTFILENAME 0x0008") cpp_quote("#define GIL_DONTCACHE 0x0010") typedef IExtractIconA *LPEXTRACTICONA; HRESULT GetIconLocation( [in] UINT uFlags, [out, size_is(cchMax)] LPSTR szIconFile, [in] UINT cchMax, [out] INT *piIndex, [out] UINT *pwFlags); HRESULT Extract( [in] LPCSTR pszFile, [in] UINT nIconIndex, [out] HICON *phiconLarge, [out] HICON *phiconSmall, [in] UINT nIconSize ); } /***************************************************************************** * IExtractIconW interface */ [ object, uuid(000214fa-0000-0000-c000-000000000046), pointer_default(unique), local ] interface IExtractIconW : IUnknown { typedef IExtractIconW *LPEXTRACTICONW; HRESULT GetIconLocation( [in] UINT uFlags, [out, size_is(cchMax)] LPWSTR szIconFile, [in] UINT cchMax, [out] INT *piIndex, [out] UINT *pwFlags); HRESULT Extract( [in] LPCWSTR pszFile, [in] UINT nIconIndex, [out] HICON *phiconLarge, [out] HICON *phiconSmall, [in] UINT nIconSize ); } cpp_quote("#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)") cpp_quote("#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)") /***************************************************************************** * ICommDlgBrowser interface */ [ object, uuid(000214f1-0000-0000-c000-000000000046), pointer_default(unique) ] interface ICommDlgBrowser : IUnknown { cpp_quote("#define CDBOSC_SETFOCUS 0x00000000") cpp_quote("#define CDBOSC_KILLFOCUS 0x00000001") cpp_quote("#define CDBOSC_SELCHANGE 0x00000002") cpp_quote("#define CDBOSC_RENAME 0x00000003") cpp_quote("#define CDBOSC_STATECHANGE 0x00000004") typedef ICommDlgBrowser *LPCOMMDLGBROWSER; HRESULT OnDefaultCommand( [in] IShellView *shv ); HRESULT OnStateChange( [in] IShellView *shv, [in] ULONG uChange ); HRESULT IncludeObject( [in] IShellView *shv, [in] LPCITEMIDLIST pidl ); } /***************************************************************************** * ICommDlgBrowser2 interface */ [ object, uuid(10339516-2894-11D2-9039-00C04F8EEB3E), pointer_default(unique) ] interface ICommDlgBrowser2 : ICommDlgBrowser { HRESULT Notify( [in] IShellView *ppshv, [in] DWORD dwNotifyType); HRESULT GetDefaultMenuText( [in] IShellView *ppshv, [out, string, size_is(cchMax)] LPWSTR pszText, [in] int cchMax); HRESULT GetViewFlags( [out] DWORD *pdwFlags); } /***************************************************************************** * ICommDlgBrowser3 interface */ [ object, uuid(C8AD25A1-3294-41EE-8165-71174BD01C57), pointer_default(unique) ] interface ICommDlgBrowser3 : ICommDlgBrowser2 { HRESULT OnColumnClicked( [in] IShellView *ppshv, [in] int iColumn); HRESULT GetCurrentFilter( [out, string, size_is(cchFileSpec)] LPWSTR pszFileSpec, [in] int cchFileSpec); HRESULT OnPreViewCreated( [in] IShellView *ppshv); } /***************************************************************************** * IDockingWindow interface */ [ object, uuid(012dd920-7b26-11d0-8ca9-00a0c92dbfe8) ] interface IDockingWindow : IOleWindow { HRESULT ShowDW( [in] BOOL fShow); HRESULT CloseDW( [in] DWORD dwReserved); HRESULT ResizeBorderDW( [in] LPCRECT prcBorder, [in] IUnknown *punkToolbarSite, [in] BOOL fReserved); } /***************************************************************************** * IDockingWindowFrame interface */ [ object, uuid(47d2657a-7b27-11d0-8ca9-00a0c92dbfe8), pointer_default(unique), local ] interface IDockingWindowFrame : IOleWindow { cpp_quote("#define DWFRF_NORMAL 0x0000") cpp_quote("#define DWFRF_DELETECONFIGDATA 0x0001") cpp_quote("#define DWFAF_HIDDEN 0x0001") HRESULT AddToolbar( [in] IUnknown *punkSrc, [in] LPCWSTR pwszItem, [in] DWORD dwAddFlags); HRESULT RemoveToolbar( [in] IUnknown *punkSrc, [in] DWORD dwRemoveFlags); HRESULT FindToolbar( [in] LPCWSTR pwszItem, [in] REFIID riid, [out] LPVOID *ppvObj); } /***************************************************************************** * IDragSourceHelper interface */ [ object, uuid(de5bf786-477a-11d2-839d-00c04fd918d0), pointer_default(unique), local ] interface IDragSourceHelper : IUnknown { typedef struct { SIZE sizeDragImage; POINT ptOffset; HBITMAP hbmpDragImage; COLORREF crColorKey; } SHDRAGIMAGE, *LPSHDRAGIMAGE; HRESULT InitializeFromBitmap( [in] LPSHDRAGIMAGE pshdi, [in] IDataObject *pDataObject); HRESULT InitializeFromWindow( [in] HWND hwnd, [in] POINT *ppt, [in] IDataObject *pDataObject); } /***************************************************************************** * IDropTargetHelper interface */ [ object, uuid(4657278b-411b-11d2-839a-00c04fd918d0), pointer_default(unique), local ] interface IDropTargetHelper : IUnknown { HRESULT DragEnter( [in] HWND hwndTarget, [in] IDataObject *pDataObject, [in] POINT *ppt, [in] DWORD dwEffect); HRESULT DragLeave(); HRESULT DragOver( [in] POINT *ppt, [in] DWORD dwEffect); HRESULT Drop( [in] IDataObject *pDataObject, [in] POINT *ppt, [in] DWORD dwEffect); HRESULT Show( [in] BOOL fShow ); } /***************************************************************************** * IContextMenu interface */ [ object, uuid(000214e4-0000-0000-c000-000000000046), pointer_default(unique), local ] interface IContextMenu : IUnknown { cpp_quote("#define CMF_NORMAL 0x00000000") cpp_quote("#define CMF_DEFAULTONLY 0x00000001") cpp_quote("#define CMF_VERBSONLY 0x00000002") cpp_quote("#define CMF_EXPLORE 0x00000004") cpp_quote("#define CMF_NOVERBS 0x00000008") cpp_quote("#define CMF_CANRENAME 0x00000010") cpp_quote("#define CMF_NODEFAULT 0x00000020") cpp_quote("#define CMF_INCLUDESTATIC 0x00000040") cpp_quote("#define CMF_ITEMMENU 0x00000080") cpp_quote("#define CMF_EXTENDEDVERBS 0x00000100") cpp_quote("#define CMF_DISABLEDVERBS 0x00000200") cpp_quote("#define CMF_ASYNCVERBSTATE 0x00000400") cpp_quote("#define CMF_OPTIMIZEFORINVOKE 0x00000800") cpp_quote("#define CMF_SYNCCASCADEMENU 0x00001000") cpp_quote("#define CMF_DONOTPICKDEFAULT 0x00002000") cpp_quote("#define CMF_RESERVED 0xffff0000") cpp_quote("#define GCS_VERBA 0x00000000") cpp_quote("#define GCS_HELPTEXTA 0x00000001") cpp_quote("#define GCS_VALIDATEA 0x00000002") cpp_quote("#define GCS_VERBW 0x00000004") cpp_quote("#define GCS_HELPTEXTW 0x00000005") cpp_quote("#define GCS_VALIDATEW 0x00000006") cpp_quote("#define GCS_UNICODE 0x00000004") cpp_quote("#define GCS_VERB WINELIB_NAME_AW(GCS_VERB)") cpp_quote("#define GCS_HELPTEXT WINELIB_NAME_AW(GCS_HELPTEXT)") cpp_quote("#define GCS_VALIDATE WINELIB_NAME_AW(GCS_VALIDATE)") cpp_quote("#define CMDSTR_NEWFOLDERA \"NewFolder\"") cpp_quote("#define CMDSTR_VIEWLISTA \"ViewList\"") cpp_quote("#define CMDSTR_VIEWDETAILSA \"ViewDetails\"") cpp_quote("#if defined(__GNUC__)") cpp_quote("# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }") cpp_quote("# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }") cpp_quote("# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }") cpp_quote("#elif defined(_MSC_VER)") cpp_quote("# define CMDSTR_NEWFOLDERW L\"NewFolder\"") cpp_quote("# define CMDSTR_VIEWLISTW L\"ViewList\"") cpp_quote("# define CMDSTR_VIEWDETAILSW L\"ViewDetails\"") cpp_quote("#else") cpp_quote("static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};") cpp_quote("static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};") cpp_quote("static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};") cpp_quote("#endif") cpp_quote("#define CMDSTR_NEWFOLDER WINELIB_NAME_AW(CMDSTR_NEWFOLDER)") cpp_quote("#define CMDSTR_VIEWLIST WINELIB_NAME_AW(CMDSTR_VIEWLIST)") cpp_quote("#define CMDSTR_VIEWDETAILS WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)") cpp_quote("#define CMIC_MASK_HOTKEY SEE_MASK_HOTKEY") cpp_quote("#define CMIC_MASK_ICON SEE_MASK_ICON") cpp_quote("#define CMIC_MASK_FLAG_NO_UI SEE_MASK_FLAG_NO_UI") cpp_quote("#define CMIC_MASK_UNICODE SEE_MASK_UNICODE") cpp_quote("#define CMIC_MASK_NO_CONSOLE SEE_MASK_NO_CONSOLE") cpp_quote("#define CMIC_MASK_HASLINKNAME SEE_MASK_HASLINKNAME") cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM SEE_MASK_FLAG_SEPVDM") cpp_quote("#define CMIC_MASK_HASTITLE SEE_MASK_HASTITLE") cpp_quote("#define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK") cpp_quote("#define CMIC_MASK_NOASYNC SEE_MASK_NOASYNC") cpp_quote("#define CMIC_MASK_SHIFT_DOWN 0x10000000") cpp_quote("#define CMIC_MASK_PTINVOKE 0x20000000") cpp_quote("#define CMIC_MASK_CONTROL_DOWN 0x40000000") cpp_quote("#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE") cpp_quote("#define CMIC_MASK_NOZONECHECKS SEE_MASK_NOZONECHECKS") typedef IContextMenu *LPCONTEXTMENU; typedef struct tagCMINVOKECOMMANDINFO { DWORD cbSize; DWORD fMask; HWND hwnd; LPCSTR lpVerb; LPCSTR lpParameters; LPCSTR lpDirectory; INT nShow; DWORD dwHotKey; HANDLE hIcon; } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO; typedef struct tagCMInvokeCommandInfoEx { DWORD cbSize; DWORD fMask; HWND hwnd; LPCSTR lpVerb; LPCSTR lpParameters; LPCSTR lpDirectory; INT nShow; DWORD dwHotKey; HANDLE hIcon; LPCSTR lpTitle; LPCWSTR lpVerbW; LPCWSTR lpParametersW; LPCWSTR lpDirectoryW; LPCWSTR lpTitleW; POINT ptInvoke; } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX; HRESULT QueryContextMenu( [in] HMENU hmenu, [in] UINT indexMenu, [in] UINT idCmdFirst, [in] UINT idCmdLast, [in] UINT uFlags); HRESULT InvokeCommand( [in] LPCMINVOKECOMMANDINFO lpici ); HRESULT GetCommandString( [in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax); } /***************************************************************************** * IContextMenu2 interface */ [ object, uuid(000214f4-0000-0000-c000-000000000046), pointer_default(unique), local ] interface IContextMenu2 : IContextMenu { typedef IContextMenu2 *LPCONTEXTMENU2; HRESULT HandleMenuMsg( [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam); } /***************************************************************************** * IContextMenu3 interface */ [ object, uuid(bcfce0a0-ec17-11d0-8d10-00a0c90f2719), pointer_default(unique), local ] interface IContextMenu3 : IContextMenu2 { typedef IContextMenu3 *LPCONTEXTMENU3; HRESULT HandleMenuMsg2( [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult); } [ object, uuid(3409e930-5a39-11d1-83fa-00a0c90dc849), pointer_default(unique), local ] interface IContextMenuCB : IUnknown { HRESULT CallBack( [in] IShellFolder *psf, [in] HWND hwndOwner, [in] IDataObject *pdtobj, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam); } /***************************************************************************** * IShellExecuteHookA interface */ [ object, uuid(000214f5-0000-0000-c000-000000000046), pointer_default(unique), local ] interface IShellExecuteHookA : IUnknown { cpp_quote("struct _SHELLEXECUTEINFOA;") HRESULT Execute( [in, out] struct _SHELLEXECUTEINFOA* pei); } /***************************************************************************** * IShellExecuteHookW interface */ [ object, uuid(000214fb-0000-0000-c000-000000000046), pointer_default(unique), local ] interface IShellExecuteHookW : IUnknown { cpp_quote("struct _SHELLEXECUTEINFOW;") HRESULT Execute( [in, out] struct _SHELLEXECUTEINFOW* pei); } /***************************************************************************** * IShellLinkDataList interface */ [ object, uuid(45e2b4ae-b1c3-11d0-b92f-00a0c90312e1), pointer_default(unique) ] interface IShellLinkDataList : IUnknown { [local] HRESULT AddDataBlock( [in] void *pDataBlock); [local] HRESULT CopyDataBlock( [in] DWORD dwSig, [out] void **ppDataBlock); HRESULT RemoveDataBlock( [in] DWORD dwSig); HRESULT GetFlags( [out] DWORD *pdwFlags); HRESULT SetFlags( [in] DWORD dwFlags); } /***************************************************************************** * IResolveShellLink interface */ [ object, uuid(5cd52983-9449-11d2-963a-00c04f79adf0), pointer_default(unique) ] interface IResolveShellLink : IUnknown { HRESULT ResolveShellLink( [in] IUnknown *punk, [in] HWND hwnd, [in] DWORD fFlags); } /***************************************************************************** * IURLSearchHook interface */ [ object, uuid(ac60f6a0-0fd9-11d0-99cb-00c04fd64497), pointer_default(unique), local ] interface IURLSearchHook : IUnknown { HRESULT Translate( [in, out] LPWSTR lpwszSearchURL, [in] DWORD cchBufferSize); } /***************************************************************************** * ISearchContext interface */ [ object, uuid(09f656a2-41af-480c-88f7-16cc0d164615), pointer_default(unique), local ] interface ISearchContext : IUnknown { HRESULT GetSearchUrl( [in] BSTR *pbstrSearchUrl); HRESULT GetSearchText( [in] BSTR *pbstrSearchText); HRESULT GetSearchStyle( [in] DWORD *pdwSearchStyle); } /***************************************************************************** * IURLSearchHook2 interface */ [ object, uuid(5ee44da4-6d32-46e3-86bc-07540dedd0e0), pointer_default(unique), local ] interface IURLSearchHook2 : IURLSearchHook { HRESULT TranslateWithSearchContext( [in, out] LPWSTR lpwszSearchURL, [in] DWORD cchBufferSize, [in] ISearchContext *pSearchContext); } cpp_quote("#define INewShortcutHook WINELIB_NAME_AW(INewShortcutHook)") /***************************************************************************** * INewShortcutHookA interface */ [ object, uuid(000214e1-0000-0000-c000-000000000046), pointer_default(unique), local ] interface INewShortcutHookA : IUnknown { HRESULT SetReferent( [in] LPCSTR pcszReferent, [in] HWND hwnd); HRESULT GetReferent( [out] LPSTR pcszReferent, [in] int cchReferent); HRESULT SetFolder( [in] LPCSTR pcszReferent); HRESULT GetFolder( [out] LPSTR pcszReferent, [in] int cchFolder); HRESULT GetName( [out] LPSTR pszName, [in] int cchName); HRESULT GetExtension( [out] LPSTR pszExtension, [in] int cchExtension); } /***************************************************************************** * INewShortcutHookW interface */ [ object, uuid(000214f7-0000-0000-c000-000000000046), pointer_default(unique), local ] interface INewShortcutHookW : IUnknown { HRESULT SetReferent( [in] LPCWSTR pcszReferent, [in] HWND hwnd); HRESULT GetReferent( [out] LPWSTR pcszReferent, [in] int cchReferent); HRESULT SetFolder( [in] LPCWSTR pcszReferent); HRESULT GetFolder( [out] LPWSTR pcszReferent, [in] int cchFolder); HRESULT GetName( [out] LPWSTR pszName, [in] int cchName); HRESULT GetExtension( [out] LPWSTR pszExtension, [in] int cchExtension); } /***************************************************************************** * IRunnableTask interface */ [ object, uuid(85788d00-6807-11d0-b810-00c04fd706ec), pointer_default(unique), local ] interface IRunnableTask : IUnknown { HRESULT Run(); HRESULT Kill([in] BOOL fWait); HRESULT Suspend(); HRESULT Resume(); ULONG IsRunning(); } /***************************************************************************** * IShellChangeNotify interface */ [ object, uuid(d82be2b1-5764-11d0-a96e-00c04fd705a2), pointer_default(unique), local ] interface IShellChangeNotify : IUnknown { HRESULT OnChange( [in] LONG lEvent, [in] LPCITEMIDLIST pidl1, [in] LPCITEMIDLIST pidl2); } /***************************************************************************** * IFileSystemBindData interface */ [ object, uuid(01e18d10-4d8b-11d2-855d-006008059367), pointer_default(unique), local ] interface IFileSystemBindData : IUnknown { HRESULT SetFindData( [in] const WIN32_FIND_DATAW *pfd); HRESULT GetFindData( [out] WIN32_FIND_DATAW *pfd); } /***************************************************************************** * ITaskbarList interface */ [ object, uuid(56FDF342-FD6D-11d0-958A-006097C9A090), pointer_default(unique) ] interface ITaskbarList : IUnknown { HRESULT HrInit(); HRESULT AddTab( [in] HWND hwnd); HRESULT DeleteTab( [in] HWND hwnd); HRESULT ActivateTab( [in] HWND hwnd); HRESULT SetActiveAlt( [in] HWND hwnd); } /***************************************************************************** * ITaskbarList2 interface */ [ object, uuid(602D4995-B13A-429B-A66E-1935E44F4317), pointer_default(unique) ] interface ITaskbarList2 : ITaskbarList { HRESULT MarkFullscreenWindow( [in] HWND hwnd, [in] BOOL fullscreen); } cpp_quote("#ifdef MIDL_PASS") typedef IUnknown* HIMAGELIST; cpp_quote("#endif") typedef [v1_enum] enum THUMBBUTTONFLAGS { THBF_ENABLED = 0x0000, THBF_DISABLED = 0x0001, THBF_DISMISSONCLICK = 0x0002, THBF_NOBACKGROUND = 0x0004, THBF_HIDDEN = 0x0008, THBF_NONINTERACTIVE = 0x0010 } THUMBBUTTONFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONFLAGS)") typedef [v1_enum] enum THUMBBUTTONMASK { THB_BITMAP = 0x0001, THB_ICON = 0x0002, THB_TOOLTIP = 0x0004, THB_FLAGS = 0x0008 } THUMBBUTTONMASK; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONMASK)") cpp_quote("#include ") typedef struct THUMBBUTTON { THUMBBUTTONMASK dwMask; UINT iId; UINT iBitmap; HICON hIcon; WCHAR szTip[260]; THUMBBUTTONFLAGS dwFlags; } THUMBBUTTON, *LPTHUMBBUTTON; cpp_quote("#include ") [ uuid(ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf), object ] interface ITaskbarList3 : ITaskbarList2 { typedef [v1_enum] enum TBPFLAG { TBPF_NOPROGRESS = 0x0000, TBPF_INDETERMINATE = 0x0001, TBPF_NORMAL = 0x0002, TBPF_ERROR = 0x0004, TBPF_PAUSED = 0x0008 } TBPFLAG; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(TBPFLAG)") HRESULT SetProgressValue( [in] HWND hwnd, [in] ULONGLONG ullCompleted, [in] ULONGLONG ullTotal); HRESULT SetProgressState( [in] HWND hwnd, [in] TBPFLAG tbpFlags); HRESULT RegisterTab( [in] HWND hwndTab, [in] HWND hwndMDI); HRESULT UnregisterTab([in] HWND hwndTab); HRESULT SetTabOrder( [in] HWND hwndTab, [in] HWND hwndInsertBefore); HRESULT SetTabActive( [in] HWND hwndTab, [in] HWND hwndMDI, [in] DWORD dwReserved); HRESULT ThumbBarAddButtons( [in] HWND hwnd, [in] UINT cButtons, [in, size_is(cButtons)] LPTHUMBBUTTON pButton); HRESULT ThumbBarUpdateButtons( [in] HWND hwnd, [in] UINT cButtons, [in, size_is(cButtons)] LPTHUMBBUTTON pButton); HRESULT ThumbBarSetImageList( [in] HWND hwnd, [in] HIMAGELIST himl); HRESULT SetOverlayIcon( [in] HWND hwnd, [in] HICON hIcon, [in, unique, string] LPCWSTR pszDescription); HRESULT SetThumbnailTooltip( [in] HWND hwnd, [in, unique, string] LPCWSTR pszTip); HRESULT SetThumbnailClip( [in] HWND hwnd, [in] RECT *prcClip); } [ uuid(c43dc798-95d1-4bea-9030-bb99e2983a1a), object ] interface ITaskbarList4 : ITaskbarList3 { typedef [v1_enum] enum STPFLAG { STPF_NONE = 0x0000, STPF_USEAPPTHUMBNAILALWAYS = 0x0001, STPF_USEAPPTHUMBNAILWHENACTIVE = 0x0002, STPF_USEAPPPEEKALWAYS = 0x0004, STPF_USEAPPPEEKWHENACTIVE = 0x0008 } STPFLAG; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(STPFLAG)") HRESULT SetTabProperties( [in] HWND hwndTab, [in] STPFLAG stpFlags); } /***************************************************************************** * IAutoCompleteDropDown interface */ [ object, uuid(3CD141F4-3C6A-11d2-BCAA-00C04FD929DB), pointer_default(unique) ] interface IAutoCompleteDropDown : IUnknown { cpp_quote("#define ACDD_VISIBLE 0x0001") HRESULT GetDropDownStatus( [out] DWORD *pdwFlags, [out, string] LPWSTR *ppwszString); HRESULT ResetEnumerator(); } [ object, uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0), pointer_default(unique) ] interface IProfferService : IUnknown { HRESULT ProfferService( [in] REFGUID service, [in] IServiceProvider *pService, [out] DWORD *pCookie); HRESULT RevokeService([in] DWORD cookie); } /***************************************************************************** * IExplorerBrowserEvents interface */ [ object, uuid(361BBDC7-E6EE-4E13-BE58-58E2240C810F) ] interface IExplorerBrowserEvents : IUnknown { HRESULT OnNavigationPending( [in] PCIDLIST_ABSOLUTE pidlFolder); HRESULT OnViewCreated( [in] IShellView *psv); HRESULT OnNavigationComplete( [in] PCIDLIST_ABSOLUTE pidlFolder); HRESULT OnNavigationFailed( [in] PCIDLIST_ABSOLUTE pidlFolder); } typedef GUID EXPLORERPANE; typedef EXPLORERPANE *REFEXPLORERPANE; cpp_quote("#define SID_ExplorerPaneVisibility IID_IExplorerPaneVisibility") /***************************************************************************** * IExplorerPaneVisibility interface */ [ object, uuid(E07010EC-BC17-44C0-97B0-46C7C95B9EDC) ] interface IExplorerPaneVisibility : IUnknown { [v1_enum] enum _EXPLORERPANESTATE { EPS_DONTCARE = 0x0, EPS_DEFAULT_ON = 0x1, EPS_DEFAULT_OFF = 0x2, EPS_STATE_MASK = 0xffff, EPS_INITIALSTATE = 0x10000, EPS_FORCE = 0x20000 }; typedef DWORD EXPLORERPANESTATE; HRESULT GetPaneState( [in] REFEXPLORERPANE ep, [out] EXPLORERPANESTATE *peps); } typedef [v1_enum] enum tagEXPLORER_BROWSER_FILL_FLAGS { EBF_NONE = 0, EBF_SELECTFROMDATAOBJECT = 0x100, EBF_NODROPTARGET = 0x200 } EXPLORER_BROWSER_FILL_FLAGS; typedef [v1_enum] enum tagEXPLORER_BROWSER_OPTIONS { EBO_NONE = 0x00, EBO_NAVIGATEONCE = 0x01, EBO_SHOWFRAMES = 0x02, EBO_ALWAYSNAVIGATE = 0x04, EBO_NOTRAVELLOG = 0x08, EBO_NOWRAPPERWINDOW = 0x10, EBO_HTMLSHAREPOINTVIEW = 0x20, EBO_NOBORDER = 0x40, EBO_NOPERSISTVIEWSTATE = 0x80, } EXPLORER_BROWSER_OPTIONS; cpp_quote("#define SID_SExplorerBrowserFrame IID_ICommDlgBrowser") /***************************************************************************** * IExplorerBrowser interface */ [ object, uuid(DFD3B6B5-C10C-4BE9-85F6-A66969F402F6), pointer_default(unique) ] interface IExplorerBrowser : IUnknown { [local] HRESULT Initialize( [in] HWND hwndParent, [in] const RECT *prc, [in, unique] const FOLDERSETTINGS *pfs); HRESULT Destroy(); [local] HRESULT SetRect( [in,out,unique] HDWP *phdwp, [in] RECT rcBrowser); HRESULT SetPropertyBag( [in, string] LPCWSTR pszPropertyBag); HRESULT SetEmptyText( [in, string] LPCWSTR pszEmptyText); HRESULT SetFolderSettings( [in] const FOLDERSETTINGS *pfs); HRESULT Advise( [in] IExplorerBrowserEvents *psbe, [out] DWORD *pdwCookie); HRESULT Unadvise( [in] DWORD dwCookie); HRESULT SetOptions( [in] EXPLORER_BROWSER_OPTIONS dwFlag); HRESULT GetOptions( [out] EXPLORER_BROWSER_OPTIONS *pdwFlag); HRESULT BrowseToIDList( [in] PCUIDLIST_RELATIVE pidl, [in] UINT uFlags); HRESULT BrowseToObject( [in] IUnknown *punk, [in] UINT uFlags); HRESULT FillFromObject( [in] IUnknown *punk, [in] EXPLORER_BROWSER_FILL_FLAGS dwFlags); HRESULT RemoveAll(); HRESULT GetCurrentView( [in] REFIID riid, [out, iid_is(riid)] void **ppv); } /***************************************************************************** * INameSpaceTreeControl interface */ [ object, uuid(028212A3-B627-47E9-8856-C14265554E4F) ] interface INameSpaceTreeControl : IUnknown { [v1_enum] enum _NSTCSTYLE { NSTCS_HASEXPANDOS = 0x00000001, NSTCS_HASLINES = 0x00000002, NSTCS_SINGLECLICKEXPAND = 0x00000004, NSTCS_FULLROWSELECT = 0x00000008, NSTCS_SPRINGEXPAND = 0x00000010, NSTCS_HORIZONTALSCROLL = 0x00000020, NSTCS_ROOTHASEXPANDO = 0x00000040, NSTCS_SHOWSELECTIONALWAYS = 0x00000080, NSTCS_NOINFOTIP = 0x00000200, NSTCS_EVENHEIGHT = 0x00000400, NSTCS_NOREPLACEOPEN = 0x00000800, NSTCS_DISABLEDRAGDROP = 0x00001000, NSTCS_NOORDERSTREAM = 0x00002000, NSTCS_RICHTOOLTIP = 0x00004000, NSTCS_BORDER = 0x00008000, NSTCS_NOEDITLABELS = 0x00010000, NSTCS_TABSTOP = 0x00020000, NSTCS_FAVORITESMODE = 0x00080000, NSTCS_AUTOHSCROLL = 0x00100000, NSTCS_FADEINOUTEXPANDOS = 0x00200000, NSTCS_EMPTYTEXT = 0x00400000, NSTCS_CHECKBOXES = 0x00800000, NSTCS_PARTIALCHECKBOXES = 0x01000000, NSTCS_EXCLUSIONCHECKBOXES = 0x02000000, NSTCS_DIMMEDCHECKBOXES = 0x04000000, NSTCS_NOINDENTCHECKS = 0x08000000, NSTCS_ALLOWJUNCTIONS = 0x10000000, NSTCS_SHOWTABSBUTTON = 0x20000000, NSTCS_SHOWDELETEBUTTON = 0x40000000, NSTCS_SHOWREFRESHBUTTON = (int)0x80000000 }; typedef DWORD NSTCSTYLE; [v1_enum] enum _NSTCROOTSTYLE { NSTCRS_VISIBLE = 0x0000, NSTCRS_HIDDEN = 0x0001, NSTCRS_EXPANDED = 0x0002 }; typedef DWORD NSTCROOTSTYLE; [v1_enum] enum _NSTCITEMSTATE { NSTCIS_NONE = 0x0000, NSTCIS_SELECTED = 0x0001, NSTCIS_EXPANDED = 0x0002, NSTCIS_BOLD = 0x0004, NSTCIS_DISABLED = 0x0008, NSTCIS_SELECTEDNOEXPAND = 0x0010 }; typedef DWORD NSTCITEMSTATE; typedef [v1_enum] enum NSTCGNI { NSTCGNI_NEXT = 0, NSTCGNI_NEXTVISIBLE = 1, NSTCGNI_PREV = 2, NSTCGNI_PREVVISIBLE = 3, NSTCGNI_PARENT = 4, NSTCGNI_CHILD = 5, NSTCGNI_FIRSTVISIBLE = 6, NSTCGNI_LASTVISIBLE = 7 } NSTCGNI; HRESULT Initialize( [in] HWND hwndParent, [in, unique] RECT *prc, [in] NSTCSTYLE nstcsFlags); HRESULT TreeAdvise( [in] IUnknown *punk, [out] DWORD *pdwCookie); HRESULT TreeUnadvise( [in] DWORD dwCookie); HRESULT AppendRoot( [in] IShellItem *psiRoot, [in] SHCONTF grfEnumFlags, [in] NSTCROOTSTYLE grfRootStyle, [in, unique] IShellItemFilter *pif); HRESULT InsertRoot( [in] int iIndex, [in] IShellItem *psiRoot, [in] SHCONTF grfEnumFlags, [in] NSTCROOTSTYLE grfRootStyle, [in, unique] IShellItemFilter *pif); HRESULT RemoveRoot( [in] IShellItem *psiRoot); HRESULT RemoveAllRoots(); HRESULT GetRootItems( [out] IShellItemArray **ppsiaRootItems); HRESULT SetItemState( [in] IShellItem *psi, [in] NSTCITEMSTATE nstcisMask, [in] NSTCITEMSTATE nstcisFlags); HRESULT GetItemState( [in] IShellItem *psi, [in] NSTCITEMSTATE nstcismask, [out] NSTCITEMSTATE *pnstcisFlags); HRESULT GetSelectedItems( [out] IShellItemArray **psiaItems); HRESULT GetItemCustomState( [in] IShellItem *psi, [out] int *piStateNumber); HRESULT SetItemCustomState( [in] IShellItem *psi, [in] int iStateNumber); HRESULT EnsureItemVisible( [in] IShellItem *psi); HRESULT SetTheme( [in, string] LPCWSTR pszTheme); HRESULT GetNextItem( [in, unique] IShellItem *psi, [in] NSTCGNI nstcgi, [out] IShellItem **ppsiNext); HRESULT HitTest( [in] POINT *ppt, [out] IShellItem **ppsiOut); HRESULT GetItemRect( [in] IShellItem *psi, [out] RECT *prect); HRESULT CollapseAll(); } /***************************************************************************** * INameSpaceTreeControl2 interface */ [ object, uuid(7CC7AED8-290E-49BC-8945-C1401CC9306C) ] interface INameSpaceTreeControl2 : INameSpaceTreeControl { typedef [v1_enum] enum NSTCSTYLE2 { NSTCS2_DEFAULT = 0x00, NSTCS2_INTERRUPTNOTIFICATIONS = 0x01, NSTCS2_SHOWNULLSPACEMENU = 0x02, NSTCS2_DISPLAYPADDING = 0x04, NSTCS2_DISPLAYPINNEDONLY = 0x08, NTSCS2_NOSINGLETONAUTOEXPAND = 0x10, /* The apparent typo here is */ NTSCS2_NEVERINSERTNONENUMERATED = 0x20 /* present also in the Win SDK */ } NSTCSTYLE2; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NSTCSTYLE2)") HRESULT SetControlStyle( [in] NSTCSTYLE nstcsMask, [in] NSTCSTYLE nstcsStyle); HRESULT GetControlStyle( [in] NSTCSTYLE nstcsMask, [out] NSTCSTYLE *pnstcsStyle); HRESULT SetControlStyle2( [in] NSTCSTYLE2 nstcsMask, [in] NSTCSTYLE2 nstcsStyle); HRESULT GetControlStyle2( [in] NSTCSTYLE2 nstcsMask, [out] NSTCSTYLE2 *pnstcsStyle); } /***************************************************************************** * INameSpaceTreeControlEvents interface */ [ object, uuid(93D77985-B3D8-4484-8318-672CDDA002CE), local ] interface INameSpaceTreeControlEvents : IUnknown { [v1_enum] enum _NSTCEHITTEST { NSTCEHT_NOWHERE = 0x0001, NSTCEHT_ONITEMICON = 0x0002, NSTCEHT_ONITEMLABEL = 0x0004, NSTCEHT_ONITEMIDENT = 0x0008, NSTCEHT_ONITEMBUTTON = 0x0010, NSTCEHT_ONITEMRIGHT = 0x0020, NSTCEHT_ONITEMSTATEICON = 0x0040, NSTCEHT_ONITEM = 0x0046, NSTCEHT_ONITEMTABBUTTON = 0x1000 }; typedef DWORD NSTCEHITTEST; [v1_enum] enum _NSTCECLICKTYPE { NSTCECT_LBUTTON = 0x1, NSTCECT_MBUTTON = 0x2, NSTCECT_RBUTTON = 0x3, NSTCECT_BUTTON = 0x3, NSTCECT_DBLCLICK = 0x4 }; typedef DWORD NSTCECLICKTYPE; HRESULT OnItemClick( [in] IShellItem *psi, [in] NSTCEHITTEST nstceHitTest, [in] NSTCECLICKTYPE nstceClickType); HRESULT OnPropertyItemCommit( [in] IShellItem *psi); HRESULT OnItemStateChanging( [in] IShellItem *psi, [in] NSTCITEMSTATE nstcisMask, [in] NSTCITEMSTATE nstcisState); HRESULT OnItemStateChanged( [in] IShellItem *psi, [in] NSTCITEMSTATE nstcisMask, [in] NSTCITEMSTATE nstcisState); HRESULT OnSelectionChanged( [in] IShellItemArray *psiaSelection); HRESULT OnKeyboardInput( [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam); HRESULT OnBeforeExpand( [in] IShellItem *psi); HRESULT OnAfterExpand( [in] IShellItem *psi); HRESULT OnBeginLabelEdit( [in] IShellItem *psi); HRESULT OnEndLabelEdit( [in] IShellItem *psi); HRESULT OnGetToolTip( [in] IShellItem *psi, [out, string, size_is(cchTip)] LPWSTR pszTip, [in] int cchTip); HRESULT OnBeforeItemDelete( [in] IShellItem *psi); HRESULT OnItemAdded( [in] IShellItem *psi, [in] BOOL fIsRoot); HRESULT OnItemDeleted( [in] IShellItem *psi, [in] BOOL fIsRoot); HRESULT OnBeforeContextMenu( [in, unique] IShellItem *psi, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT OnAfterContextMenu( [in] IShellItem *psi, [in] IContextMenu *pcmIn, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT OnBeforeStateImageChange( [in] IShellItem *psi); HRESULT OnGetDefaultIconIndex( [in] IShellItem *psi, [out] int *piDefaultIcon, [out] int *piOpenIcon); } /***************************************************************************** * INameSpaceTreeControlCustomDraw interface */ [ object, uuid(2D3BA758-33EE-42D5-BB7B-5F3431D86C78), local ] interface INameSpaceTreeControlCustomDraw : IUnknown { typedef struct NSTCCUSTOMDRAW { IShellItem *psi; UINT uItemState; NSTCITEMSTATE nstcis; LPCWSTR pszText; int iImage; HIMAGELIST himl; int iLevel; int iIndent; } NSTCCUSTOMDRAW; HRESULT PrePaint( [in] HDC hdc, [in] RECT *prc, [out] LRESULT *plres); HRESULT PostPaint( [in] HDC hdc, [in] RECT *prc); HRESULT ItemPrePaint( [in] HDC hdc, [in] RECT *prc, [in] NSTCCUSTOMDRAW *pnstccdItem, [in, out] COLORREF *pclrText, [in, out] COLORREF *pclrTextBk, [out] LRESULT *plres); HRESULT ItemPostPaint( [in] HDC hdc, [in] RECT *prc, [in] NSTCCUSTOMDRAW *pnstccdItem); } /***************************************************************************** * INameSpaceTreeControlDropHandler interface */ [ object, uuid(F9C665D6-C2F2-4C19-BF33-8322D7352F51), local ] interface INameSpaceTreeControlDropHandler : IUnknown { HRESULT OnDragEnter( [in, unique] IShellItem *psiOver, [in] IShellItemArray *psiaData, [in] BOOL fOutsideSource, [in] DWORD grfKeyState, [in, out] DWORD *pdwEffect); HRESULT OnDragOver( [in, unique] IShellItem *psiOver, [in] IShellItemArray *psiaData, [in] DWORD grfKeyState, [in, out] DWORD *pdwEffect); HRESULT OnDragPosition( [in, unique] IShellItem *psiOver, [in] IShellItemArray *psiaData, [in] int iNewPosition, [in] int iOldPosition); HRESULT OnDrop( [in, unique] IShellItem *psiOver, [in] IShellItemArray *psiaData, [in] int iPosition, [in] DWORD grfKeyState, [in, out] DWORD *pdwEffect); HRESULT OnDropPosition( [in, unique] IShellItem *psiOver, [in] IShellItemArray *psiaData, [in] int iNewPosition, [in] int iOldPosition); HRESULT OnDragLeave( [in, unique] IShellItem *psiOver); } cpp_quote("#define NSTCDHPOS_ONTOP -1") interface IFileDialog; typedef [v1_enum] enum FDE_OVERWRITE_RESPONSE { FDEOR_DEFAULT = 0, FDEOR_ACCEPT = 1, FDEOR_REFUSE = 2 } FDE_OVERWRITE_RESPONSE; typedef [v1_enum] enum FDE_SHAREVIOLATION_RESPONSE { FDESVR_DEFAULT = 0, FDESVR_ACCEPT = 1, FDESVR_REFUSE = 2 } FDE_SHAREVIOLATION_RESPONSE; /***************************************************************************** * IFileDialogEvents interface */ [ object, uuid(973510DB-7D7F-452B-8975-74A85828D354), pointer_default(unique) ] interface IFileDialogEvents : IUnknown { HRESULT OnFileOk( [in] IFileDialog *pfd); HRESULT OnFolderChanging( [in] IFileDialog *pfd, [in] IShellItem *psiFolder); HRESULT OnFolderChange( [in] IFileDialog *pfd); HRESULT OnSelectionChange( [in] IFileDialog *pfd); HRESULT OnShareViolation( [in] IFileDialog *pfd, [in] IShellItem *psi, [out] FDE_SHAREVIOLATION_RESPONSE *pResponse); HRESULT OnTypeChange( [in] IFileDialog *pfd); HRESULT OnOverwrite( [in] IFileDialog *pfd, [in] IShellItem *psi, [out] FDE_OVERWRITE_RESPONSE *pResponse); } /***************************************************************************** * IModalWindow interface */ [ object, uuid(B4DB1657-70D7-485E-8E3E-6FCB5A5C1802), pointer_default(unique) ] interface IModalWindow : IUnknown { [local] HRESULT Show( [in, unique, annotation("__in_opt")] HWND hwndOwner); [call_as(Show)] HRESULT RemoteShow( [in, unique] HWND hwndOwner); } typedef [v1_enum] enum FDAP { FDAP_BOTTOM = 0, FDAP_TOP = 1 } FDAP; /***************************************************************************** * IFileDialog interface */ [ object, uuid(42F85136-DB7E-439C-85F1-E4075D135FC8), pointer_default(unique) ] interface IFileDialog : IModalWindow { [v1_enum] enum _FILEOPENDIALOGOPTIONS { FOS_OVERWRITEPROMPT = 0x00000002, FOS_STRICTFILETYPES = 0x00000004, FOS_NOCHANGEDIR = 0x00000008, FOS_PICKFOLDERS = 0x00000020, FOS_FORCEFILESYSTEM = 0x00000040, FOS_ALLNONSTORAGEITEMS = 0x00000080, FOS_NOVALIDATE = 0x00000100, FOS_ALLOWMULTISELECT = 0x00000200, FOS_PATHMUSTEXIST = 0x00000800, FOS_FILEMUSTEXIST = 0x00001000, FOS_CREATEPROMPT = 0x00002000, FOS_SHAREAWARE = 0x00004000, FOS_NOREADONLYRETURN = 0x00008000, FOS_NOTESTFILECREATE = 0x00010000, FOS_HIDEMRUPLACES = 0x00020000, FOS_HIDEPINNEDPLACES = 0x00040000, FOS_NODEREFERENCELINKS = 0x00100000, FOS_DONTADDTORECENT = 0x02000000, FOS_FORCESHOWHIDDEN = 0x10000000, FOS_DEFAULTNOMINIMODE = 0x20000000, FOS_FORCEPREVIEWPANEON = 0x40000000, FOS_SUPPORTSTREAMABLEITEMS = 0x80000000 }; typedef DWORD FILEOPENDIALOGOPTIONS; HRESULT SetFileTypes( [in] UINT cFileTypes, [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFilterSpec); HRESULT SetFileTypeIndex( [in] UINT iFileType); HRESULT GetFileTypeIndex( [out] UINT *piFileType); HRESULT Advise( [in] IFileDialogEvents *pfde, [out] DWORD *pdwCookie); HRESULT Unadvise( [in] DWORD dwCookie); HRESULT SetOptions( [in] FILEOPENDIALOGOPTIONS fos); HRESULT GetOptions( [in] FILEOPENDIALOGOPTIONS *pfos); HRESULT SetDefaultFolder( [in] IShellItem *psi); HRESULT SetFolder( [in] IShellItem *psi); HRESULT GetFolder( [out] IShellItem **ppsi); HRESULT GetCurrentSelection( [out] IShellItem **ppsi); HRESULT SetFileName( [in, string] LPCWSTR pszName); HRESULT GetFileName( [out, string] LPWSTR *pszName); HRESULT SetTitle( [in, string] LPCWSTR pszTitle); HRESULT SetOkButtonLabel( [in, string] LPCWSTR pszText); HRESULT SetFileNameLabel( [in, string] LPCWSTR pszLabel); HRESULT GetResult( [out] IShellItem **ppsi); HRESULT AddPlace( [in] IShellItem *psi, [in] FDAP fdap); HRESULT SetDefaultExtension( [in, string] LPCWSTR pszDefaultExtension); HRESULT Close( [in] HRESULT hr); HRESULT SetClientGuid( [in] REFGUID guid); HRESULT ClearClientData(); HRESULT SetFilter( [in] IShellItemFilter *pFilter); } /***************************************************************************** * IFileDialog2 interface */ [ object, uuid(61744FC7-85B5-4791-A9B0-272276309B13), pointer_default(unique) ] interface IFileDialog2 : IFileDialog { HRESULT SetCancelButtonLabel( [in] LPCWSTR pszLabel); HRESULT SetNavigationRoot( [in] IShellItem *psi); } /***************************************************************************** * IFileOperationProgressSink interface */ [ object, uuid(04B0F1A7-9490-44BC-96E1-4296A31252E2), pointer_default(unique) ] interface IFileOperationProgressSink : IUnknown { HRESULT StartOperations(); HRESULT FinishOperations( [in] HRESULT hrResult); HRESULT PreRenameItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in, unique, string] LPCWSTR pszNewName); HRESULT PostRenameItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in, string] LPCWSTR pszNewName, [in] HRESULT hrRename, [in] IShellItem *psiNewlyCreated); HRESULT PreMoveItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName); HRESULT PostMoveItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName, [in] HRESULT hrMove, [in] IShellItem *psiNewlyCreated); HRESULT PreCopyItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName); HRESULT PostCopyItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName, [in] HRESULT hrCopy, [in] IShellItem *psiNewlyCreated); HRESULT PreDeleteItem( [in] DWORD dwFlags, [in] IShellItem *psiItem); HRESULT PostDeleteItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] HRESULT hrDelete, [in] IShellItem *psiNewlyCreated); HRESULT PreNewItem( [in] DWORD dwFlags, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName); HRESULT PostNewItem( [in] DWORD dwFlags, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName, [in, unique, string] LPCWSTR pszTemplateName, [in] DWORD dwFileAttributes, [in] HRESULT hrNew, [in] IShellItem *psiNewItem); HRESULT UpdateProgress( [in] UINT iWorkTotal, [in] UINT iWorkSoFar); HRESULT ResetTimer(); HRESULT PauseTimer(); HRESULT ResumeTimer(); } /***************************************************************************** * IFileSaveDialog interface */ [ object, uuid(84BCCD23-5FDE-4CDB-AEA4-AF64B83D78AB), pointer_default(unique) ] interface IFileSaveDialog : IFileDialog { HRESULT SetSaveAsItem( [in] IShellItem *psi); HRESULT SetProperties( [in] IPropertyStore *pStore); HRESULT SetCollectedProperties( [in] IPropertyDescriptionList *pList, [in] BOOL fAppendDefault); HRESULT GetProperties( [in] IPropertyStore **ppStore); HRESULT ApplyProperties( [in] IShellItem *psi, [in] IPropertyStore *pStore, [in, unique] HWND hwnd, [in, unique] IFileOperationProgressSink *pSink); } /***************************************************************************** * IFileOpenDialog interface */ [ object, uuid(D57C7288-D4AD-4768-BE02-9D969532D960), pointer_default(unique) ] interface IFileOpenDialog : IFileDialog { HRESULT GetResults( [out] IShellItemArray **ppenum); HRESULT GetSelectedItems( [out] IShellItemArray **ppsai); } typedef [v1_enum] enum CDCONTROLSTATEF { CDCS_INACTIVE = 0x0, CDCS_ENABLED = 0x1, CDCS_VISIBLE = 0x2, CDCS_ENABLEDVISIBLE = 0x3 } CDCONTROLSTATEF; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CDCONTROLSTATEF)") /***************************************************************************** * IFileDialogCustomize interface */ [ object, uuid(E6FDD21A-163F-4975-9C8C-A69F1BA37034), pointer_default(unique) ] interface IFileDialogCustomize : IUnknown { HRESULT EnableOpenDropDown( [in] DWORD dwIDCtl); HRESULT AddMenu( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel); HRESULT AddPushButton( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel); HRESULT AddComboBox( [in] DWORD dwIDCtl); HRESULT AddRadioButtonList( [in] DWORD dwIDCtl); HRESULT AddCheckButton( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel, [in] BOOL bChecked); HRESULT AddEditBox( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszText); HRESULT AddSeparator( [in] DWORD dwIDCtl); HRESULT AddText( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszText); HRESULT SetControlLabel( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel); HRESULT GetControlState( [in] DWORD dwIDCtl, [out] CDCONTROLSTATEF *pdwState); HRESULT SetControlState( [in] DWORD dwIDCtl, [in] CDCONTROLSTATEF dwState); HRESULT GetEditBoxText( [in] DWORD dwIDCtl, [out, string] WCHAR **ppszText); HRESULT SetEditBoxText( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszText); HRESULT GetCheckButtonState( [in] DWORD dwIDCtl, [out] BOOL *pbChecked); HRESULT SetCheckButtonState( [in] DWORD dwIDCtl, [in] BOOL bChecked); HRESULT AddControlItem( [in] DWORD dwIDCtl, [in] DWORD dwIDItem, [in] LPCWSTR pszLabel); HRESULT RemoveControlItem( [in] DWORD dwIDCtl, [in] DWORD dwIDItem); HRESULT RemoveAllControlItems( [in] DWORD dwIDCtl); HRESULT GetControlItemState( [in] DWORD dwIDCtl, [in] DWORD dwIDItem, [out] CDCONTROLSTATEF *pdwState); HRESULT SetControlItemState( [in] DWORD dwIDCtl, [in] DWORD dwIDItem, [in] CDCONTROLSTATEF dwState); HRESULT GetSelectedControlItem( [in] DWORD dwIDCtl, [out] DWORD *pdwIDItem); HRESULT SetSelectedControlItem( [in] DWORD dwIDCtl, [in] DWORD dwIDItem); HRESULT StartVisualGroup( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel); HRESULT EndVisualGroup(); HRESULT MakeProminent( [in] DWORD dwIDCtl); HRESULT SetControlItemText( [in] DWORD dwIDCtl, [in] DWORD dwIDItem, [in, string] LPCWSTR pszLabel); } /***************************************************************************** * IFileDialogControlEvents interface */ [ object, uuid(36116642-D713-4B97-9B83-7484A9D00433), pointer_default(unique) ] interface IFileDialogControlEvents : IUnknown { HRESULT OnItemSelected( [in] IFileDialogCustomize *pfdc, [in] DWORD dwIDCtl, [in] DWORD dwIDItem); HRESULT OnButtonClicked( [in] IFileDialogCustomize *pfdc, [in] DWORD dwIDCtl); HRESULT OnCheckButtonToggled( [in] IFileDialogCustomize *pfdc, [in] DWORD dwIDCtl, [in] BOOL bChecked); HRESULT OnControlActivating( [in] IFileDialogCustomize *pfdc, [in] DWORD dwIDCtl); } typedef [v1_enum] enum tagKF_CATEGORY { KF_CATEGORY_VIRTUAL = 0x00000001, KF_CATEGORY_FIXED = 0x00000002, KF_CATEGORY_COMMON = 0x00000003, KF_CATEGORY_PERUSER = 0x00000004 } KF_CATEGORY; typedef [v1_enum] enum tagKF_REDIRECTION_CAPABILITIES { KF_REDIRECTION_CAPABILITIES_ALLOW_ALL = 0x000000ff, KF_REDIRECTION_CAPABILITIES_REDIRECTABLE = 0x00000001, KF_REDIRECTION_CAPABILITIES_DENY_ALL = 0x000fff00, KF_REDIRECTION_CAPABILITIES_DENY_POLICY_REDIRECTED = 0x00000100, KF_REDIRECTION_CAPABILITIES_DENY_POLICY = 0x00000200, KF_REDIRECTION_CAPABILITIES_DENY_PERMISSIONS = 0x00000400 } KF_REDIRECTION_CAPABILITIES; typedef [v1_enum] enum tagKF_DEFINITION_FLAGS { KFDF_LOCAL_REDIRECT_ONLY = 0x00000002, KFDF_ROAMABLE = 0x00000004, KFDF_PRECREATE = 0x00000008, KFDF_STREAM = 0x00000010, KFDF_PUBLISHEXPANDEDPATH = 0x00000020, KFDF_NO_REDIRECT_UI = 0x00000040 } KF_DEFINITION_FLAGS; typedef struct tagKNOWNFOLDER_DEFINITION { KF_CATEGORY category; LPWSTR pszName; LPWSTR pszDescription; KNOWNFOLDERID fidParent; LPWSTR pszRelativePath; LPWSTR pszParsingName; LPWSTR pszTooltip; LPWSTR pszLocalizedName; LPWSTR pszIcon; LPWSTR pszSecurity; DWORD dwAttributes; KF_DEFINITION_FLAGS kfdFlags; FOLDERTYPEID ftidType; } KNOWNFOLDER_DEFINITION; [ object, uuid(3aa7af7e-9b36-420C-a8e3-f77d4674a488), pointer_default(ref) ] interface IKnownFolder : IUnknown { HRESULT GetId( [out] KNOWNFOLDERID *pkfid); HRESULT GetCategory( [out] KF_CATEGORY *pCategory); HRESULT GetShellItem( [in] DWORD dwFlags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPath( [in] DWORD dwFlags, [out, string] LPWSTR *ppszPath); HRESULT SetPath( [in] DWORD dwFlags, [in, string] LPCWSTR pszPath); HRESULT GetIDList( [in] DWORD dwFlags, [out] PIDLIST_ABSOLUTE *ppidl); HRESULT GetFolderType( [out] FOLDERTYPEID *pftid); HRESULT GetRedirectionCapabilities( [out] KF_REDIRECTION_CAPABILITIES *pCapabilities); HRESULT GetFolderDefinition( [out] KNOWNFOLDER_DEFINITION *pKFD); } typedef [v1_enum] enum tagKF_REDIRECT_FLAGS { KF_REDIRECT_USER_EXCLUSIVE = 0x00000001, KF_REDIRECT_COPY_SOURCE_DACL = 0x00000002, KF_REDIRECT_OWNER_USER = 0x00000004, KF_REDIRECT_SET_OWNER_EXPLICIT = 0x00000008, KF_REDIRECT_CHECK_ONLY = 0x00000010, KF_REDIRECT_WITH_UI = 0x00000020, KF_REDIRECT_UNPIN = 0x00000040, KF_REDIRECT_PIN = 0x00000080, KF_REDIRECT_COPY_CONTENTS = 0x00000200, KF_REDIRECT_DEL_SOURCE_CONTENTS = 0x00000400, KF_REDIRECT_EXCLUDE_ALL_KNOWN_SUBFOLDERS = 0x00000800 } KF_REDIRECT_FLAGS; [ object, uuid(8BE2D872-86AA-4d47-B776-32CCA40C7018), pointer_default(ref) ] interface IKnownFolderManager : IUnknown { typedef [v1_enum] enum tagFFFP_MODE { FFFP_EXACTMATCH, FFFP_NEARESTPARENTMATCH } FFFP_MODE; HRESULT FolderIdFromCsidl( [in] int nCsidl, [out] KNOWNFOLDERID *pfid); HRESULT FolderIdToCsidl( [in] REFKNOWNFOLDERID rfid, [out] int *pnCsidl); HRESULT GetFolderIds( [out, size_is(, *pCount)] KNOWNFOLDERID **ppKFId, [in, out] UINT *pCount); HRESULT GetFolder( [in] REFKNOWNFOLDERID rfid, [out] IKnownFolder **ppkf); HRESULT GetFolderByName( [in, string] LPCWSTR pszCanonicalName, [out] IKnownFolder **ppkf); HRESULT RegisterFolder( [in] REFKNOWNFOLDERID rfid, [in] KNOWNFOLDER_DEFINITION const *pKFD); HRESULT UnregisterFolder( [in] REFKNOWNFOLDERID rfid); HRESULT FindFolderFromPath( [in, string] LPCWSTR pszPath, [in] FFFP_MODE mode, [out] IKnownFolder **ppkf); HRESULT FindFolderFromIDList( [in] PCIDLIST_ABSOLUTE pidl, [out] IKnownFolder **ppkf); HRESULT Redirect( [in] REFKNOWNFOLDERID rfid, [in, unique] HWND hwnd, [in] KF_REDIRECT_FLAGS flags, [in, unique, string] LPCWSTR pszTargetPath, [in] UINT cFolders, [in, size_is(cFolders), unique] KNOWNFOLDERID const *pExclusion, [out, string] LPWSTR *ppszError); } /* function for releasing structure returned from IKnownFolder::GetFolderDefinition */ cpp_quote("static inline void FreeKnownFolderDefinitionFields(KNOWNFOLDER_DEFINITION *pKFD)") cpp_quote("{") cpp_quote(" CoTaskMemFree(pKFD->pszName);") cpp_quote(" CoTaskMemFree(pKFD->pszDescription);") cpp_quote(" CoTaskMemFree(pKFD->pszRelativePath);") cpp_quote(" CoTaskMemFree(pKFD->pszParsingName);") cpp_quote(" CoTaskMemFree(pKFD->pszTooltip);") cpp_quote(" CoTaskMemFree(pKFD->pszLocalizedName);") cpp_quote(" CoTaskMemFree(pKFD->pszIcon);") cpp_quote(" CoTaskMemFree(pKFD->pszSecurity);") cpp_quote("}") typedef [v1_enum] enum ASSOCIATIONLEVEL { AL_MACHINE, AL_EFFECTIVE, AL_USER } ASSOCIATIONLEVEL; typedef [v1_enum] enum ASSOCIATIONTYPE { AT_FILEEXTENSION, AT_URLPROTOCOL, AT_STARTMENUCLIENT, AT_MIMETYPE } ASSOCIATIONTYPE; [ object, uuid(4e530b0a-e611-4c77-a3ac-9031d022281b), pointer_default(unique) ] interface IApplicationAssociationRegistration : IUnknown { HRESULT QueryCurrentDefault( [in, string] LPCWSTR pszQuery, [in] ASSOCIATIONTYPE atQueryType, [in] ASSOCIATIONLEVEL alQueryLevel, [out, string] LPWSTR *ppszAssociation); HRESULT QueryAppIsDefault( [in, string] LPCWSTR pszQuery, [in] ASSOCIATIONTYPE atQueryType, [in] ASSOCIATIONLEVEL alQueryLevel, [in, string] LPCWSTR pszAppRegistryName, [out] BOOL *pfDefault); HRESULT QueryAppIsDefaultAll( [in] ASSOCIATIONLEVEL alQueryLevel, [in, string] LPCWSTR pszAppRegistryName, [out] BOOL* pfDefault); HRESULT SetAppAsDefault( [in, string] LPCWSTR pszAppRegistryName, [in, string] LPCWSTR pszSet, [in] ASSOCIATIONTYPE atSetType); HRESULT SetAppAsDefaultAll( [in, string] LPCWSTR pszAppRegistryName); HRESULT ClearUserAssociations(); } [ object, uuid(12337d35-94c6-48a0-bce7-6a9c69d4d600), pointer_default(unique) ] interface IApplicationDestinations : IUnknown { HRESULT SetAppID( [in] LPCWSTR pszAppID); HRESULT RemoveDestination( [in] IUnknown *punk); HRESULT RemoveAllDestinations(); } [ uuid(6332debf-87b5-4670-90c0-5e57b408a49e), object, pointer_default(unique) ] interface ICustomDestinationList : IUnknown { typedef [v1_enum] enum KNOWNDESTCATEGORY { KDC_FREQUENT = 1, KDC_RECENT } KNOWNDESTCATEGORY; HRESULT SetAppID([in, string] LPCWSTR pszAppID); HRESULT BeginList( [out] UINT *pcMinSlots, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT AppendCategory( [in, string] LPCWSTR pszCategory, [in] IObjectArray *poa); HRESULT AppendKnownCategory([in] KNOWNDESTCATEGORY category); HRESULT AddUserTasks([in] IObjectArray *poa); HRESULT CommitList(); HRESULT GetRemovedDestinations( [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT DeleteList([in, unique, string] LPCWSTR pszAppID); HRESULT AbortList(); } [ uuid(ddefe873-6997-4e68-be26-39b633adbe12), object, pointer_default(unique) ] interface IQueryCancelAutoPlay : IUnknown { HRESULT AllowAutoPlay([in, string] LPCWSTR path, [in] DWORD content_type, [in, string] LPCWSTR label, [in] DWORD serial_number); } [ uuid(d594d0d8-8da7-457b-b3b4-ce5dbaac0b88), pointer_default(unique) ] interface ITransferAdviseSink : IUnknown { [v1_enum] enum _TRANSFER_ADVISE_STATE { TS_NONE = 0, TS_PERFORMING = 1, TS_PREPARING = 2, TS_INDETERMINATE = 4 }; typedef DWORD TRANSFER_ADVISE_STATE; HRESULT UpdateProgress([in] ULONGLONG size_current, [in] ULONGLONG size_total, [in] INT files_current, [in] INT files_total, [in] INT folders_current, [in] INT folders_total); HRESULT UpdateTransferState([in] TRANSFER_ADVISE_STATE state); HRESULT ConfirmOverwrite([in] IShellItem *source, [in] IShellItem *dest_parent, [in, string] LPCWSTR name); HRESULT ConfirmEncryptionLoss([in] IShellItem *source); HRESULT FileFailure([in] IShellItem *item, [in, unique, string] LPCWSTR itemname, [in] HRESULT hr, [in, out, unique, size_is(crename)] LPWSTR rename, [in] ULONG crename); HRESULT SubStreamFailure([in] IShellItem *item, [in, string] LPCWSTR stream, [in] HRESULT hr); HRESULT PropertyFailure([in] IShellItem *item, [in, unique] const PROPERTYKEY *key, [in] HRESULT hr); } [v1_enum] enum _TRANSFER_SOURCE_FLAGS { TSF_NORMAL = 0, TSF_FAIL_EXIST = 0, TSF_RENAME_EXIST = 0x1, TSF_OVERWRITE_EXIST = 0x2, TSF_ALLOW_DECRYPTION = 0x4, TSF_NO_SECURITY = 0x8, TSF_COPY_CREATION_TIME = 0x10, TSF_COPY_WRITE_TIME = 0x20, TSF_USE_FULL_ACCESS = 0x40, TSF_DELETE_RECYCLE_IF_POSSIBLE = 0x80, TSF_COPY_HARD_LINK = 0x100, TSF_COPY_LOCALIZED_NAME = 0x200, TSF_MOVE_AS_COPY_DELETE = 0x400, TSF_SUSPEND_SHELLEVENTS = 0x800 }; typedef DWORD TRANSFER_SOURCE_FLAGS; [ uuid(00adb003-bde9-45c6-8e29-d09f9353e108), object, pointer_default(unique) ] interface ITransferSource : IUnknown { HRESULT Advise([in] ITransferAdviseSink *sink, [out] DWORD *cookie); HRESULT Unadvise([in] DWORD cookie); HRESULT SetProperties([in] IPropertyChangeArray *array); HRESULT OpenItem([in] IShellItem *item, [in] TRANSFER_SOURCE_FLAGS flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT MoveItem([in] IShellItem *item, [in] IShellItem *parent_dest, [in, string] LPCWSTR name_dest, [in] TRANSFER_SOURCE_FLAGS flags, [out] IShellItem **newitem); HRESULT RecycleItem([in] IShellItem *source, [in] IShellItem *parent_dest, [in] TRANSFER_SOURCE_FLAGS flags, [out] IShellItem **new_dest); HRESULT RemoveItem([in] IShellItem *source, [in] TRANSFER_SOURCE_FLAGS flags); HRESULT RenameItem([in] IShellItem *source, [in, string] LPCWSTR newname, [in] TRANSFER_SOURCE_FLAGS flags, [out] IShellItem **new_dest); HRESULT LinkItem([in] IShellItem *source, [in] IShellItem *parent_dest, [in, unique, string] LPCWSTR new_name, [in] TRANSFER_SOURCE_FLAGS flags, [out] IShellItem **new_dest); HRESULT ApplyPropertiesToItem([in] IShellItem *source, [out] IShellItem **newitem); HRESULT GetDefaultDestinationName([in] IShellItem *source, [in] IShellItem *parent_dest, [out, string] LPWSTR *dest_name); HRESULT EnterFolder([in] IShellItem *child_folder); HRESULT LeaveFolder([in] IShellItem *child_folder); } [ uuid(48addd32-3ca5-4124-abe3-b5a72531b207), object, pointer_default(unique) ] interface ITransferDestination : IUnknown { HRESULT Advise([in] ITransferAdviseSink *sink, [out] DWORD *cookie); HRESULT Unadvise([in] DWORD cookie); HRESULT CreateItem([in, string] LPCWSTR name, [in] DWORD attr, [in] ULONGLONG size, [in] TRANSFER_SOURCE_FLAGS flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv, [in] REFIID resources, [out, iid_is(riid)] void **presources); } [ uuid(92218cab-ecaa-4335-8133-807fd234c2ee), object, pointer_default(unique) ] interface IAssocHandlerInvoker : IUnknown { HRESULT SupportsSelection(); HRESULT Invoke(); } [ uuid(f04061ac-1659-4a3f-a954-775aa57fc083), object, pointer_default(unique) ] interface IAssocHandler : IUnknown { HRESULT GetName([out, string] LPWSTR *name); HRESULT GetUIName([out, string] LPWSTR *uiname); HRESULT GetIconLocation([out, string] LPWSTR *path, [out] int *index); HRESULT IsRecommended(); HRESULT MakeDefault([in, string] LPCWSTR description); HRESULT Invoke([in] IDataObject *object); HRESULT CreateInvoker([in] IDataObject *object, [out] IAssocHandlerInvoker **invoker); } [ uuid(973810ae-9599-4b88-9e4d-6ee98c9552da), object, pointer_default(unique) ] interface IEnumAssocHandlers : IUnknown { HRESULT Next([in] ULONG count, [out, size_is(count), length_is(*fetched)] IAssocHandler **handlers, [out] ULONG *fetched); } typedef enum ASSOC_FILTER { ASSOC_FILTER_NONE = 0, ASSOC_FILTER_RECOMMENDED } ASSOC_FILTER; cpp_quote("HRESULT WINAPI SHAssocEnumHandlers(PCWSTR extra, ASSOC_FILTER filter, IEnumAssocHandlers **handlersenum);") [ uuid(1df0d7f1-b267-4d28-8b10-12e23202a5c4), ] interface IItemNameLimits : IUnknown { HRESULT GetValidCharacters( [out, string] LPWSTR *validchars, [out, string] LPWSTR *invalidchars); HRESULT GetMaxLength( [in, string] LPCWSTR name, [out] int *max_length); } typedef [v1_enum] enum ACTIVATEOPTIONS { AO_NONE = 0x00000000, AO_DESIGNMODE = 0x00000001, AO_NOERRORUI = 0x00000002, AO_NOSPLASHSCREEN = 0x00000004, AO_PRELAUNCH = 0x02000000 } ACTIVATEOPTIONS; [ uuid(2e941141-7f97-4756-ba1d-9decde894a3d), object, pointer_default(unique) ] interface IApplicationActivationManager : IUnknown { HRESULT ActivateApplication([in] LPCWSTR appusermodelid, [in, unique] LPCWSTR arguments, [in] ACTIVATEOPTIONS options, [out] DWORD *processid); HRESULT ActivateForFile([in] LPCWSTR appusermodelid, [in] IShellItemArray *itemarray, [in, unique] LPCWSTR verb, [out] DWORD *processid); HRESULT ActivateForProtocol([in] LPCWSTR appusermodelid, [in] IShellItemArray *itemarray, [out] DWORD *processid); } /***************************************************************************** * ShellObjects typelibrary */ [ uuid(50A7E9B1-70EF-11D1-B75A-00A0C90564FE), lcid(0x0000), version(1.0) ] library ShellObjects { [ uuid(71F96385-DDD6-48D3-A0C1-AE06E8B055FB) ] coclass ExplorerBrowser { interface IExplorerBrowser; } [ uuid(DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7) ] coclass FileOpenDialog { interface IFileOpenDialog; } [ uuid(C0B4E2F3-BA21-4773-8DBA-335EC946EB8B) ] coclass FileSaveDialog { interface IFileSaveDialog; } [ uuid(AE054212-3535-4430-83ED-D501AA6680E6) ] coclass NamespaceTreeControl { interface INameSpaceTreeControl2; } [ uuid(4df0c730-df9d-4ae3-9153-aa6b82e9795a) ] coclass KnownFolderManager { interface IKnownFolderManager; } [ uuid(591209c7-767b-42b2-9fba-44ee4615f2c7) ] coclass ApplicationAssociationRegistration { interface IApplicationAssociationRegistration; } [ uuid(86c14003-4d6b-4ef3-a7b4-0506663b2e68) ] coclass ApplicationDestinations { interface IApplicationDestinations; } [ uuid(00021401-0000-0000-c000-000000000046) ] coclass ShellLink { interface IShellLinkW; } [ uuid(56fdf344-fd6d-11d0-958a-006097c9a090) ] coclass TaskbarList { interface ITaskbarList4; } [ uuid(77f10cf0-3db5-4966-b520-b7c54fd35ed6) ] coclass DestinationList { interface ICustomDestinationList; } [ uuid(2d3468c1-36a7-43b6-ac24-d3f02fd9607a) ] coclass EnumerableObjectCollection { interface IEnumObjects; } [ uuid(331f1768-05a9-4ddd-b86e-dae34ddc998a) ] coclass QueryCancelAutoPlay { interface IQueryCancelAutoPlay; } [ uuid(45ba127d-10a8-46ea-8ab7-56ea9078943c) ] coclass ApplicationActivationManager { interface IApplicationActivationManager; } } ================================================ FILE: wine/windows/shtypes.idl ================================================ /* * Type definitions for shell objects * * Copyright (C) 1999 Juergen Schmied * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; cpp_quote("#include ") typedef struct { WORD cb; /* nr of bytes in this item */ BYTE abID[1]; /* first byte in this item */ } SHITEMID, *LPSHITEMID; typedef const SHITEMID *LPCSHITEMID; typedef struct _ITEMIDLIST { SHITEMID mkid; /* first itemid in list */ } ITEMIDLIST,*LPITEMIDLIST; typedef const ITEMIDLIST *LPCITEMIDLIST; typedef LPITEMIDLIST PITEMID_CHILD; typedef const PITEMID_CHILD PCITEMID_CHILD; typedef LPCITEMIDLIST PCUITEMID_CHILD; typedef LPCITEMIDLIST *PCUITEMID_CHILD_ARRAY; typedef LPCITEMIDLIST PCUIDLIST_RELATIVE; typedef LPITEMIDLIST PIDLIST_ABSOLUTE; typedef LPCITEMIDLIST PCIDLIST_ABSOLUTE; typedef LPCITEMIDLIST *PCIDLIST_ABSOLUTE_ARRAY; cpp_quote("#include ") #ifndef MAX_PATH #define MAX_PATH 260 #endif cpp_quote("#if 0") typedef struct { int dummy; } WIN32_FIND_DATAA, WIN32_FIND_DATAW; cpp_quote("#endif") typedef enum tagSTRRET_TYPE { STRRET_WSTR = 0, STRRET_OFFSET = 1, STRRET_CSTR = 2 } STRRET_TYPE; cpp_quote("#include ") typedef struct _STRRET { UINT uType; /* STRRET_xxx */ [switch_type(UINT), switch_is(uType)] union { [case(STRRET_WSTR)][string] LPWSTR pOleStr; /* OLESTR that will be freed */ [case(STRRET_OFFSET)] UINT uOffset; /* Offset into SHITEMID (ANSI) */ [case(STRRET_CSTR)] char cStr[MAX_PATH]; /* ANSI Buffer */ } DUMMYUNIONNAME; } STRRET, *LPSTRRET; cpp_quote("#include ") cpp_quote("#include ") typedef struct { int fmt; int cxChar; STRRET str; } SHELLDETAILS, *LPSHELLDETAILS; cpp_quote("#include ") typedef struct _COMDLG_FILTERSPEC { [string] LPCWSTR pszName; [string] LPCWSTR pszSpec; } COMDLG_FILTERSPEC; typedef [v1_enum] enum tagSHCOLSTATE { SHCOLSTATE_DEFAULT = 0, SHCOLSTATE_TYPE_STR, SHCOLSTATE_TYPE_INT, SHCOLSTATE_TYPE_DATE, SHCOLSTATE_TYPEMASK = 0xf, SHCOLSTATE_ONBYDEFAULT = 0x10, SHCOLSTATE_SLOW = 0x20, SHCOLSTATE_EXTENDED = 0x40, SHCOLSTATE_SECONDARYUI = 0x80, SHCOLSTATE_HIDDEN = 0x100, SHCOLSTATE_PREFER_VARCMP = 0x200, SHCOLSTATE_PREFER_FMTCMP = 0x400, SHCOLSTATE_NOSORTBYFOLDERNESS = 0x800, SHCOLSTATE_VIEWONLY = 0x10000, SHCOLSTATE_BATCHREAD = 0x20000, SHCOLSTATE_NO_GROUPBY = 0x40000, SHCOLSTATE_FIXED_WIDTH = 0x1000, SHCOLSTATE_NODPISCALE = 0x2000, SHCOLSTATE_FIXED_RATIO = 0x4000, SHCOLSTATE_DISPLAYMASK = 0xf000 } SHCOLSTATE; typedef DWORD SHCOLSTATEF; typedef GUID KNOWNFOLDERID; cpp_quote("#if 0") typedef KNOWNFOLDERID *REFKNOWNFOLDERID; cpp_quote("#endif") cpp_quote("#ifdef __cplusplus") cpp_quote("#define REFKNOWNFOLDERID const KNOWNFOLDERID &") cpp_quote("#else") cpp_quote("#define REFKNOWNFOLDERID const KNOWNFOLDERID * __MIDL_CONST") cpp_quote("#endif") typedef GUID FOLDERTYPEID; cpp_quote("#if 0") typedef FOLDERTYPEID *REFFOLDERTYPEID; cpp_quote("#endif") cpp_quote("#ifdef __cplusplus") cpp_quote("#define REFFOLDERTYPEID const FOLDERTYPEID &") cpp_quote("#else") cpp_quote("#define REFFOLDERTYPEID const FOLDERTYPEID * __MIDL_CONST") cpp_quote("#endif") typedef [v1_enum] enum tagPERCEIVED { PERCEIVED_TYPE_CUSTOM = -3, PERCEIVED_TYPE_UNSPECIFIED = -2, PERCEIVED_TYPE_FOLDER = -1, PERCEIVED_TYPE_UNKNOWN = 0, PERCEIVED_TYPE_TEXT = 1, PERCEIVED_TYPE_IMAGE = 2, PERCEIVED_TYPE_AUDIO = 3, PERCEIVED_TYPE_VIDEO = 4, PERCEIVED_TYPE_COMPRESSED = 5, PERCEIVED_TYPE_DOCUMENT = 6, PERCEIVED_TYPE_SYSTEM = 7, PERCEIVED_TYPE_APPLICATION = 8, PERCEIVED_TYPE_GAMEMEDIA = 9, PERCEIVED_TYPE_CONTACTS = 10 } PERCEIVED; cpp_quote("#define PERCEIVEDFLAG_UNDEFINED 0x0000") cpp_quote("#define PERCEIVEDFLAG_SOFTCODED 0x0001") cpp_quote("#define PERCEIVEDFLAG_HARDCODED 0x0002") cpp_quote("#define PERCEIVEDFLAG_NATIVESUPPORT 0x0004") cpp_quote("#define PERCEIVEDFLAG_GDIPLUS 0x0010") cpp_quote("#define PERCEIVEDFLAG_WMSDK 0x0020") cpp_quote("#define PERCEIVEDFLAG_ZIPFOLDER 0x0040") ================================================ FILE: wine/windows/sipbase.h ================================================ /* * Copyright (C) 2002 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SIPBASE_H #define __WINE_SIPBASE_H #include #endif /* __WINE_SIPBASE_H */ ================================================ FILE: wine/windows/slerror.h ================================================ /* * * Copyright 2008 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SLERROR_H #define __WINE_SLERROR_H #define SL_E_VALUE_NOT_FOUND 0xC004F012 #define SL_E_RIGHT_NOT_GRANTED 0xC004F013 #define SL_E_DATATYPE_MISMATCHED 0xC004F01E #endif /* __WINE_SLERROR_H */ ================================================ FILE: wine/windows/slpublic.h ================================================ /* * * Copyright 2008 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SLPUBLIC_H #define __WINE_SLPUBLIC_H #ifdef __cplusplus extern "C" { #endif #ifdef _SLC_ #define SLCAPI #else #define SLCAPI DECLSPEC_IMPORT #endif typedef enum _tagSLDATATYPE { SL_DATA_NONE = REG_NONE, SL_DATA_SZ = REG_SZ, SL_DATA_DWORD = REG_DWORD, SL_DATA_BINARY = REG_BINARY, SL_DATA_MULTI_SZ = REG_MULTI_SZ, SL_DATA_SUM = 100, } SLDATATYPE; SLCAPI HRESULT WINAPI SLGetWindowsInformation(LPCWSTR, SLDATATYPE*, UINT*, LPBYTE*); SLCAPI HRESULT WINAPI SLGetWindowsInformationDWORD(LPCWSTR, LPDWORD); #ifdef __cplusplus } #endif #endif /* __WINE_SLPUBLIC_H */ ================================================ FILE: wine/windows/snmp.h ================================================ /* * Copyright (C) 2005 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINE_SNMP_H #define _WINE_SNMP_H #include #include typedef struct { BYTE *stream; UINT length; BOOL dynamic; } AsnOctetString; typedef struct { UINT idLength; UINT *ids; } AsnObjectIdentifier; typedef LONG AsnInteger32; typedef ULONG AsnUnsigned32; typedef ULARGE_INTEGER AsnCounter64; typedef AsnUnsigned32 AsnCounter32; typedef AsnUnsigned32 AsnGauge32; typedef AsnUnsigned32 AsnTimeticks; typedef AsnOctetString AsnBits; typedef AsnOctetString AsnSequence; typedef AsnOctetString AsnImplicitSequence; typedef AsnOctetString AsnIPAddress; typedef AsnOctetString AsnNetworkAddress; typedef AsnOctetString AsnDisplayString; typedef AsnOctetString AsnOpaque; typedef struct { BYTE asnType; union { AsnInteger32 number; AsnUnsigned32 unsigned32; AsnCounter64 counter64; AsnOctetString string; AsnBits bits; AsnObjectIdentifier object; AsnSequence sequence; AsnIPAddress address; AsnCounter32 counter; AsnGauge32 gauge; AsnTimeticks ticks; AsnOpaque arbitrary; } asnValue; } AsnAny; typedef AsnObjectIdentifier AsnObjectName; typedef AsnAny AsnObjectSyntax; typedef struct { AsnObjectName name; AsnObjectSyntax value; } SnmpVarBind; typedef struct { SnmpVarBind *list; UINT len; } SnmpVarBindList; #include #define ASN_UNIVERSAL 0x00 #define ASN_APPLICATION 0x40 #define ASN_CONTEXT 0x80 #define ASN_PRIVATE 0xc0 #define ASN_PRIMITIVE 0x00 #define ASN_CONSTRUCTOR 0x20 #define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x00) #define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x01) #define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x02) #define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x03) #define SNMP_PDU_V1TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x04) #define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x05) #define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x06) #define SNMP_PDU_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x07) #define ASN_INTEGER (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x02) #define ASN_BITS (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03) #define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x04) #define ASN_NULL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x05) #define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x06) #define ASN_INTEGER32 ASN_INTEGER #define ASN_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10) #define ASN_SEQUENCEOF ASN_SEQUENCE #define ASN_IPADDRESS (ASN_APPLICATION | ASN_PRIMITIVE | 0x00) #define ASN_COUNTER32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x01) #define ASN_GAUGE32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x02) #define ASN_TIMETICKS (ASN_APPLICATION | ASN_PRIMITIVE | 0x03) #define ASN_OPAQUE (ASN_APPLICATION | ASN_PRIMITIVE | 0x04) #define ASN_COUNTER64 (ASN_APPLICATION | ASN_PRIMITIVE | 0x06) #define ASN_UNSIGNED32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x07) #define SNMP_EXCEPTION_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x00) #define SNMP_EXCEPTION_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01) #define SNMP_EXCEPTION_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x02) #define SNMP_EXTENSION_GET SNMP_PDU_GET #define SNMP_EXTENSION_GET_NEXT SNMP_PDU_GETNEXT #define SNMP_EXTENSION_GET_BULK SNMP_PDU_GETBULK #define SNMP_EXTENSION_SET_TEST (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x0) #define SNMP_EXTENSION_SET_COMMIT SNMP_PDU_SET #define SNMP_EXTENSION_SET_UNDO (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x1) #define SNMP_EXTENSION_SET_CLEANUP (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x2) #define SNMP_ERRORSTATUS_NOERROR 0 #define SNMP_ERRORSTATUS_TOOBIG 1 #define SNMP_ERRORSTATUS_NOSUCHNAME 2 #define SNMP_ERRORSTATUS_BADVALUE 3 #define SNMP_ERRORSTATUS_READONLY 4 #define SNMP_ERRORSTATUS_GENERR 5 #define SNMP_ERRORSTATUS_NOACCESS 6 #define SNMP_ERRORSTATUS_WRONGTYPE 7 #define SNMP_ERRORSTATUS_WRONGLENGTH 8 #define SNMP_ERRORSTATUS_WRONGENCODING 9 #define SNMP_ERRORSTATUS_WRONGVALUE 10 #define SNMP_ERRORSTATUS_NOCREATION 11 #define SNMP_ERRORSTATUS_INCONSISTENTVALUE 12 #define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE 13 #define SNMP_ERRORSTATUS_COMMITFAILED 14 #define SNMP_ERRORSTATUS_UNDOFAILED 15 #define SNMP_ERRORSTATUS_AUTHORIZATIONERROR 16 #define SNMP_ERRORSTATUS_NOTWRITABLE 17 #define SNMP_ERRORSTATUS_INCONSISTENTNAME 18 #define SNMP_GENERICTRAP_COLDSTART 0 #define SNMP_GENERICTRAP_WARMSTART 1 #define SNMP_GENERICTRAP_LINKDOWN 2 #define SNMP_GENERICTRAP_LINKUP 3 #define SNMP_GENERICTRAP_AUTHFAILURE 4 #define SNMP_GENERICTRAP_EGPNEIGHLOSS 5 #define SNMP_GENERICTRAP_ENTERSPECIFIC 6 #define SNMP_ACCESS_NONE 0 #define SNMP_ACCESS_NOTIFY 1 #define SNMP_ACCESS_READ_ONLY 2 #define SNMP_ACCESS_READ_WRITE 3 #define SNMP_ACCESS_READ_CREATE 4 #define SNMP_LOG_SILENT 0 #define SNMP_LOG_FATAL 1 #define SNMP_LOG_ERROR 2 #define SNMP_LOG_WARNING 3 #define SNMP_LOG_TRACE 4 #define SNMP_LOG_VERBOSE 5 #define SNMP_OUTPUT_TO_CONSOLE 1 #define SNMP_OUTPUT_TO_LOGFILE 2 #define SNMP_OUTPUT_TO_EVENTLOG 4 #define SNMP_OUTPUT_TO_DEBUGGER 8 #define DEFINE_SIZEOF(x) (sizeof(x)/sizeof((x)[0])) #define DEFINE_OID(x) { DEFINE_SIZEOF(x),(x) } #define DEFINE_NULLOID() { 0, NULL } #define DEFINE_NULLOCTENTS() { NULL, 0, FALSE } #define DEFAULT_SNMP_PORT_UDP 161 #define DEFAULT_SNMP_PORT_IPX 36879 #define DEFAULT_SNMPTRAP_PORT_UDP 162 #define DEFAULT_SNMPTRAP_PORT_IPX 36880 #define SNMP_MAX_OID_LEN 128 #define SNMP_MEM_ALLOC_ERROR 0 #define SNMP_BERAPI_INVALID_LENGTH 10 #define SNMP_BERAPI_INVALID_TAG 11 #define SNMP_BERAPI_OVERFLOW 12 #define SNMP_BERAPI_SHORT_BUFFER 13 #define SNMP_BERAPI_INVALID_OBJELEM 14 #define SNMP_PDUAPI_UNRECOGNIZED_PDU 20 #define SNMP_PDUAPI_INVALID_ES 21 #define SNMP_PDUAPI_INVALID_GT 22 #define SNMP_AUTHAPI_INVALID_VERSION 30 #define SNMP_AUTHAPI_INVALID_MSG_TYPE 31 #define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32 #define SNMPAPI_NOERROR TRUE #define SNMPAPI_ERROR FALSE #ifdef __cplusplus extern "C" { #endif BOOL WINAPI SnmpExtensionInit(DWORD dwUptimeReference, HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion); BOOL WINAPI SnmpExtensionInitEx(AsnObjectIdentifier *pNextSupportedRegion); BOOL WINAPI SnmpExtensionMonitor(LPVOID pAgentMgmtData); BOOL WINAPI SnmpExtensionQuery(BYTE bPduType, SnmpVarBindList *pVarBindList, AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex); BOOL WINAPI SnmpExtensionQueryEx(UINT nRequestType, UINT nTransactionId, SnmpVarBindList *pVarBindList, AsnOctetString *pContextInfo, AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex); BOOL WINAPI SnmpExtensionTrap(AsnObjectIdentifier *pEnterpriseOid, AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId, AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList); VOID WINAPI SnmpExtensionClose(VOID); typedef BOOL (WINAPI *PFNSNMPEXTENSIONINIT)(DWORD dwUptimeReference, HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion); typedef BOOL (WINAPI *PFNSNMPEXTENSIONINITEX)( AsnObjectIdentifier *pNextSupportedRegion); typedef BOOL (WINAPI *PFNSNMPEXTENSIONMONITOR)(LPVOID pAgentMgmtData); typedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERY)(BYTE bPduType, SnmpVarBindList *pVarBindList, AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex); typedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERYEX)(UINT nRequestType, UINT nTransactionId, SnmpVarBindList *pVarBindList, AsnOctetString *pContextInfo, AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex); typedef BOOL (WINAPI *PFNSNMPEXTENSIONTRAP)(AsnObjectIdentifier *pEnterpriseOid, AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId, AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList); typedef VOID (WINAPI *PFNSNMPEXTENSIONCLOSE)(VOID); INT WINAPI SnmpUtilOidCpy(AsnObjectIdentifier *pOidDst, AsnObjectIdentifier *pOidSrc); INT WINAPI SnmpUtilOidAppend(AsnObjectIdentifier *pOidDst, AsnObjectIdentifier *pOidSrc); INT WINAPI SnmpUtilOidCmp(AsnObjectIdentifier *pOid1, AsnObjectIdentifier *pOid2); INT WINAPI SnmpUtilOidNCmp(AsnObjectIdentifier *pOid1, AsnObjectIdentifier *pOid2, UINT nSubIds); VOID WINAPI SnmpUtilOidFree(AsnObjectIdentifier *pOid); INT WINAPI SnmpUtilOctetsCmp(AsnOctetString *pOctets1, AsnOctetString *pOctets2); INT WINAPI SnmpUtilOctetsNCmp(AsnOctetString *pOctets1, AsnOctetString *pOctets2, UINT nChars); INT WINAPI SnmpUtilOctetsCpy(AsnOctetString *pOctetsDst, AsnOctetString *pOctetsSrc); VOID WINAPI SnmpUtilOctetsFree(AsnOctetString *pOctets); INT WINAPI SnmpUtilAsnAnyCpy(AsnAny *pAnyDst, AsnAny *pAnySrc); VOID WINAPI SnmpUtilAsnAnyFree(AsnAny *pAny); INT WINAPI SnmpUtilVarBindCpy(SnmpVarBind *pVbDst, SnmpVarBind *pVbSrc); VOID WINAPI SnmpUtilVarBindFree(SnmpVarBind *pVb); INT WINAPI SnmpUtilVarBindListCpy(SnmpVarBindList *pVblDst, SnmpVarBindList *pVblSrc); VOID WINAPI SnmpUtilVarBindListFree(SnmpVarBindList *pVbl); LPVOID WINAPI SnmpUtilMemAlloc(UINT nBytes) __WINE_ALLOC_SIZE(1); LPVOID WINAPI SnmpUtilMemReAlloc(LPVOID pMem, UINT nBytes) __WINE_ALLOC_SIZE(2); VOID WINAPI SnmpUtilMemFree(LPVOID pMem); LPSTR WINAPI SnmpUtilOidToA(AsnObjectIdentifier *Oid); LPSTR WINAPI SnmpUtilIdsToA(UINT *Ids, UINT IdLength); VOID WINAPI SnmpUtilPrintOid(AsnObjectIdentifier *Oid); VOID WINAPI SnmpUtilPrintAsnAny(AsnAny *pAny); DWORD WINAPI SnmpSvcGetUptime(VOID); VOID WINAPI SnmpSvcSetLogLevel(INT nLogLevel); VOID WINAPI SnmpSvcSetLogType(INT nLogType); VOID WINAPIV SnmpUtilDbgPrint(INT nLogLevel, LPSTR szFormat, ...); #ifdef __cplusplus } #endif #endif /* _WINE_SNMP_H */ ================================================ FILE: wine/windows/softpub.h ================================================ /* * Copyright (C) 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SOFTPUB_H #define __WINE_SOFTPUB_H #include #define WINTRUST_ACTION_GENERIC_CERT_VERIFY \ { 0x189a3842, 0x3041, 0x11d1, { 0x85,0xe1,0x00,0xc0,0x4f,0xc2,0x95,0xee }} #if defined(__GNUC__) #define SP_GENERIC_CERT_INIT_FUNCTION (const WCHAR []) \ {'S','o','f','t','p','u','b','D','e','f','C','e','r','t','I','n','i','t', 0} #elif defined(_MSC_VER) #define SP_GENERIC_CERT_INIT_FUNCTION L"SoftpubDefCertInit" #else static const WCHAR SP_GENERIC_CERT_INIT_FUNCTION[] = {'S','o','f','t','p','u','b','D','e','f','C','e','r','t','I','n','i','t', 0}; #endif #define WINTRUST_ACTION_GENERIC_CHAIN_VERIFY \ { 0xfc451c16, 0xac75, 0x11d1, { 0xb4,0xb8,0x00,0xc0,0x4f,0xb6,0x6e,0xa0 }} #if defined(__GNUC__) #define GENERIC_CHAIN_FINALPOLICY_FUNCTION (const WCHAR []) \ {'G','e','n','e','r','i','c','C','h','a','i','n','F','i','n','a','l','P','r','o','v', 0} #define GENERIC_CHAIN_CERTTRUST_FUNCTION (const WCHAR []) \ {'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} #elif defined(_MSC_VER) #define GENERIC_CHAIN_FINALPOLICY_FUNCTION L"GenericChainFinalProv" #define GENERIC_CHAIN_CERTTRUST_FUNCTION L"GenericChainCertificateTrust" #else static const WCHAR GENERIC_CHAIN_FINALPOLICY_FUNCTION[] = {'G','e','n','e','r','i','c','C','h','a','i','n','F','i','n','a','l','P','r','o','v', 0}; static const WCHAR GENERIC_CHAIN_CERTTRUST_FUNCTION[] = {'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}; #endif typedef struct _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO { union { DWORD cbStruct; DWORD cbSize; } DUMMYUNIONNAME; PCCERT_CHAIN_CONTEXT pChainContext; DWORD dwSignerType; PCMSG_SIGNER_INFO pMsgSignerInfo; DWORD dwError; DWORD cCounterSigner; struct _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO *rgpCounterSigner; } WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO, *PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO; typedef HRESULT (WINAPI *PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK)( PCRYPT_PROVIDER_DATA pProvData, DWORD dwStepError, DWORD dwRegPolicySettings, DWORD cSigner, PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO rgpSigner, void *pvPolicyArg); typedef struct _WTD_GENERIC_CHAIN_POLICY_CREATE_INFO { union { DWORD cbStruct; DWORD cbSize; } DUMMYUNIONNAME; HCERTCHAINENGINE hChainEngine; PCERT_CHAIN_PARA pChainPara; DWORD dwFlags; void *pvReserved; } WTD_GENERIC_CHAIN_POLICY_CREATE_INFO, *PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO; typedef struct _WTD_GENERIC_CHAIN_POLICY_DATA { union { DWORD cbStruct; DWORD cbSize; } DUMMYUNIONNAME; PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO pSignerChainInfo; PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO pCounterSignerChainInfo; PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK pfnPolicyCallback; void *pvPolicyArg; } WTD_GENERIC_CHAIN_POLICY_DATA, *PWTD_GENERIC_CHAIN_POLICY_DATA; #if defined(__GNUC__) #define SP_POLICY_PROVIDER_DLL_NAME (const WCHAR []) \ {'W','I','N','T','R','U','S','T','.','D','L','L' ,0} #elif defined(_MSC_VER) #define SP_POLICY_PROVIDER_DLL_NAME L"WINTRUST.DLL" #else static const WCHAR SP_POLICY_PROVIDER_DLL_NAME[] = {'W','I','N','T','R','U','S','T','.','D','L','L', 0}; #endif #define WINTRUST_ACTION_GENERIC_VERIFY_V2 \ { 0xaac56b, 0xcd44, 0x11d0, { 0x8c,0xc2,0x00,0xc0,0x4f,0xc2,0x95,0xee }} #if defined(__GNUC__) #define SP_INIT_FUNCTION (const WCHAR []) \ {'S','o','f','t','p','u','b','I','n','i','t','i','a','l','i','z','e', 0} #define SP_OBJTRUST_FUNCTION (const WCHAR []) \ {'S','o','f','t','p','u','b','L','o','a','d','M','e','s','s','a','g','e', 0} #define SP_SIGTRUST_FUNCTION (const WCHAR []) \ {'S','o','f','t','p','u','b','L','o','a','d','S','i','g','n','a','t','u','r','e', 0} #define SP_CHKCERT_FUNCTION (const WCHAR []) \ {'S','o','f','t','p','u','b','C','h','e','c','k','C','e','r','t', 0} #define SP_FINALPOLICY_FUNCTION (const WCHAR []) \ {'S','o','f','t','p','u','b','A','u','t','h','e','n','t','i','c','o','d','e', 0} #define SP_CLEANUPPOLICY_FUNCTION (const WCHAR []) \ {'S','o','f','t','p','u','b','C','l','e','a','n','u','p', 0} #elif defined(_MSC_VER) #define SP_INIT_FUNCTION L"SoftpubInitialize" #define SP_OBJTRUST_FUNCTION L"SoftpubLoadMessage" #define SP_SIGTRUST_FUNCTION L"SoftpubLoadSignature" #define SP_CHKCERT_FUNCTION L"SoftpubCheckCert" #define SP_FINALPOLICY_FUNCTION L"SoftpubAuthenticode" #define SP_CLEANUPPOLICY_FUNCTION L"SoftpubCleanup" #else static const WCHAR SP_INIT_FUNCTION[] = {'S','o','f','t','p','u','b','I','n','i','t','i','a','l','i','z','e', 0}; static const WCHAR SP_OBJTRUST_FUNCTION[] = {'S','o','f','t','p','u','b','L','o','a','d','M','e','s','s','a','g','e', 0}; static const WCHAR SP_SIGTRUST_FUNCTION[] = {'S','o','f','t','p','u','b','L','o','a','d','S','i','g','n','a','t','u','r','e', 0}; static const WCHAR SP_CHKCERT_FUNCTION[] = {'S','o','f','t','p','u','b','C','h','e','c','k','C','e','r','t', 0}; static const WCHAR SP_FINALPOLICY_FUNCTION[] = {'S','o','f','t','p','u','b','A','u','t','h','e','n','t','i','c','o','d','e', 0}; static const WCHAR SP_CLEANUPPOLICY_FUNCTION[] = {'S','o','f','t','p','u','b','C','l','e','a','n','u','p', 0}; #endif #define WINTRUST_ACTION_TRUSTPROVIDER_TEST \ { 0x573e31f8, 0xddba, 0x11d0, { 0x8c,0xcb,0x00,0xc0,0x4f,0xc2,0x95,0xee }} #if defined(__GNUC__) #define SP_TESTDUMPPOLICY_FUNCTION_TEST (const WCHAR []) \ {'S','o','f','t','p','u','b','D','u','m','p','S','t','r','u','c','t','u','r','e', 0} #elif defined(_MSC_VER) #define SP_TESTDUMPPOLICY_FUNCTION_TEST L"SoftpubDumpStructure" #else static const WCHAR SP_TESTDUMPPOLICY_FUNCTION_TEST[] = {'S','o','f','t','p','u','b','D','u','m','p','S','t','r','u','c','t','u','r','e', 0}; #endif #define HTTPSPROV_ACTION \ { 0x573e31f8, 0xaaba, 0x11d0, { 0x8c,0xcb,0x00,0xc0,0x4f,0xc2,0x95,0xee }} #if defined(__GNUC__) #define HTTPS_CERTTRUST_FUNCTION (const WCHAR []) \ {'H','T','T','P','S','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0} #define HTTPS_FINALPOLICY_FUNCTION (const WCHAR []) \ {'H','T','T','P','S','F','i','n','a','l','P','r','o','v', 0} #elif defined(_MSC_VER) #define HTTPS_FINALPOLICY_FUNCTION L"HTTPSFinalProv" #define HTTPS_CERTTRUST_FUNCTION L"HTTPSCertificateTrust" #else static const WCHAR HTTPS_CERTTRUST_FUNCTION[] = {'H','T','T','P','S','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}; static const WCHAR HTTPS_FINALPOLICY_FUNCTION[] = {'H','T','T','P','S','F','i','n','a','l','P','r','o','v', 0}; #endif #define OFFICESIGN_ACTION_VERIFY \ { 0x5555c2cd, 0x17fb, 0x11d1, { 0x85,0xc4,0x00,0xc0,0x4f,0xc2,0x95,0xee }} #if defined(__GNUC__) #define OFFICE_POLICY_PROVIDER_DLL_NAME (const WCHAR []) \ {'W','I','N','T','R','U','S','T','.','D','L','L' ,0} #define OFFICE_INITPROV_FUNCTION (const WCHAR []) \ {'O','f','f','i','c','e','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0} #define OFFICE_CLEANUPPOLICY_FUNCTION (const WCHAR []) \ {'O','f','f','i','c','e','C','l','e','a','n','u','p','P','o','l','i','c','y', 0} #elif defined(_MSC_VER) #define OFFICE_POLICY_PROVIDER_DLL_NAME SP_POLICY_PROVIDER_DLL_NAME #define OFFICE_INITPROV_FUNCTION L"OfficeInitializePolicy" #define OFFICE_CLEANUPPOLICY_FUNCTION L"OfficeCleanupPolicy" #else static const WCHAR OFFICE_POLICY_PROVIDER_DLL_NAME[] = {'W','I','N','T','R','U','S','T','.','D','L','L', 0}; static const WCHAR OFFICE_INITPROV_FUNCTION[] = {'O','f','f','i','c','e','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0}; static const WCHAR OFFICE_CLEANUPPOLICY_FUNCTION[] = {'O','f','f','i','c','e','C','l','e','a','n','u','p','P','o','l','i','c','y', 0}; #endif #define DRIVER_ACTION_VERIFY \ { 0xf750e6c3, 0x38ee, 0x11d1, { 0x85,0xe5,0x00,0xc0,0x4f,0xc2,0x95,0xee }} #if defined(__GNUC__) #define DRIVER_INITPROV_FUNCTION (const WCHAR []) \ {'D','r','i','v','e','r','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0} #define DRIVER_FINALPOLPROV_FUNCTION (const WCHAR []) \ {'D','r','i','v','e','r','F','i','n','a','l','P','o','l','i','c','y', 0} #define DRIVER_CLEANUPPOLICY_FUNCTION (const WCHAR []) \ {'D','r','i','v','e','r','C','l','e','a','n','u','p','P','o','l','i','c','y', 0} #elif defined(_MSC_VER) #define DRIVER_INITPROV_FUNCTION L"DriverInitializePolicy" #define DRIVER_FINALPOLPROV_FUNCTION L"DriverFinalPolicy" #define DRIVER_CLEANUPPOLICY_FUNCTION L"DriverCleanupPolicy" #else static const WCHAR DRIVER_INITPROV_FUNCTION[] = {'D','r','i','v','e','r','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0}; static const WCHAR DRIVER_FINALPOLPROV_FUNCTION[] = {'D','r','i','v','e','r','F','i','n','a','l','P','o','l','i','c','y', 0}; static const WCHAR DRIVER_CLEANUPPOLICY_FUNCTION[] = {'D','r','i','v','e','r','C','l','e','a','n','u','p','P','o','l','i','c','y', 0}; #endif typedef struct DRIVER_VER_MAJORMINOR_ { DWORD dwMajor; DWORD dwMinor; } DRIVER_VER_MAJORMINOR; typedef struct DRIVER_VER_INFO_ { DWORD cbStruct; ULONG_PTR dwReserved1; ULONG_PTR dwReserved2; DWORD dwPlatform; DWORD dwVersion; WCHAR wszVersion[MAX_PATH]; WCHAR wszSignedBy[MAX_PATH]; PCCERT_CONTEXT pcSignerCertContext; DRIVER_VER_MAJORMINOR sOSVersionLow; DRIVER_VER_MAJORMINOR sOSVersionHigh; DWORD dwBuildNumberLow; DWORD dwBuildNumberHigh; } DRIVER_VER_INFO, *PDRIVER_VER_INFO; #endif /* __WINE_SOFTPUB_H */ ================================================ FILE: wine/windows/sperror.h ================================================ /* * Speech API (SAPI) Errors. * * Copyright (C) 2017 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef SPError_h #define SPError_h #include #define SPERR_UNINITIALIZED 0x80045001 #define SPERR_ALREADY_INITIALIZED 0x80045002 #define SPERR_NOT_FOUND 0x8004503a #define SPERR_INVALID_REGISTRY_KEY 0x80045040 #endif /* SPError_h */ ================================================ FILE: wine/windows/sql.h ================================================ /* * ODBC definitions * * Copyright (C) 1999 Xiang Li * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __SQL_H #define __SQL_H #ifndef ODBCVER #define ODBCVER 0x0351 #endif #include #ifdef __cplusplus extern "C" { #endif #define SQL_NULL_DATA (-1) #define SQL_DATA_AT_EXEC (-2) #define SQL_SUCCESS 0 #define SQL_SUCCESS_WITH_INFO 1 #if (ODBCVER >= 0x0300) #define SQL_NO_DATA 100 #endif #define SQL_ERROR (-1) #define SQL_INVALID_HANDLE (-2) #define SQL_STILL_EXECUTING 2 #define SQL_NEED_DATA 99 #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0) #define SQL_NTS (-3) #define SQL_NTSL (__MSABI_LONG(-3)) #define SQL_MAX_MESSAGE_LENGTH 512 #if (ODBCVER >= 0x0300) #define SQL_DATE_LEN 10 #define SQL_TIME_LEN 8 #define SQL_TIMESTAMP_LEN 19 #endif #if (ODBCVER >= 0x0300) #define SQL_HANDLE_ENV 1 #define SQL_HANDLE_DBC 2 #define SQL_HANDLE_STMT 3 #define SQL_HANDLE_DESC 4 #endif #if (ODBCVER >= 0x0300) #define SQL_ATTR_OUTPUT_NTS 10001 #endif #if (ODBCVER >= 0x0300) #define SQL_ATTR_AUTO_IPD 10001 #define SQL_ATTR_METADATA_ID 10014 #endif #if (ODBCVER >= 0x0300) #define SQL_ATTR_APP_ROW_DESC 10010 #define SQL_ATTR_APP_PARAM_DESC 10011 #define SQL_ATTR_IMP_ROW_DESC 10012 #define SQL_ATTR_IMP_PARAM_DESC 10013 #define SQL_ATTR_CURSOR_SCROLLABLE (-1) #define SQL_ATTR_CURSOR_SENSITIVITY (-2) #endif #if (ODBCVER >= 0x0300) #define SQL_NONSCROLLABLE 0 #define SQL_SCROLLABLE 1 #endif #if (ODBCVER >= 0x0300) #define SQL_DESC_COUNT 1001 #define SQL_DESC_TYPE 1002 #define SQL_DESC_LENGTH 1003 #define SQL_DESC_OCTET_LENGTH_PTR 1004 #define SQL_DESC_PRECISION 1005 #define SQL_DESC_SCALE 1006 #define SQL_DESC_DATETIME_INTERVAL_CODE 1007 #define SQL_DESC_NULLABLE 1008 #define SQL_DESC_INDICATOR_PTR 1009 #define SQL_DESC_DATA_PTR 1010 #define SQL_DESC_NAME 1011 #define SQL_DESC_UNNAMED 1012 #define SQL_DESC_OCTET_LENGTH 1013 #define SQL_DESC_ALLOC_TYPE 1099 #endif #if (ODBCVER >= 0x0300) #define SQL_DIAG_RETURNCODE 1 #define SQL_DIAG_NUMBER 2 #define SQL_DIAG_ROW_COUNT 3 #define SQL_DIAG_SQLSTATE 4 #define SQL_DIAG_NATIVE 5 #define SQL_DIAG_MESSAGE_TEXT 6 #define SQL_DIAG_DYNAMIC_FUNCTION 7 #define SQL_DIAG_CLASS_ORIGIN 8 #define SQL_DIAG_SUBCLASS_ORIGIN 9 #define SQL_DIAG_CONNECTION_NAME 10 #define SQL_DIAG_SERVER_NAME 11 #define SQL_DIAG_DYNAMIC_FUNCTION_CODE 12 #endif #if (ODBCVER >= 0x0300) #define SQL_DIAG_ALTER_DOMAIN 3 #define SQL_DIAG_ALTER_TABLE 4 #define SQL_DIAG_CALL 7 #define SQL_DIAG_CREATE_ASSERTION 6 #define SQL_DIAG_CREATE_CHARACTER_SET 8 #define SQL_DIAG_CREATE_COLLATION 10 #define SQL_DIAG_CREATE_DOMAIN 23 #define SQL_DIAG_CREATE_INDEX (-1) #define SQL_DIAG_CREATE_SCHEMA 64 #define SQL_DIAG_CREATE_TABLE 77 #define SQL_DIAG_CREATE_TRANSLATION 79 #define SQL_DIAG_CREATE_VIEW 84 #define SQL_DIAG_DELETE_WHERE 19 #define SQL_DIAG_DROP_ASSERTION 24 #define SQL_DIAG_DROP_CHARACTER_SET 25 #define SQL_DIAG_DROP_COLLATION 26 #define SQL_DIAG_DROP_DOMAIN 27 #define SQL_DIAG_DROP_INDEX (-2) #define SQL_DIAG_DROP_SCHEMA 31 #define SQL_DIAG_DROP_TABLE 32 #define SQL_DIAG_DROP_TRANSLATION 33 #define SQL_DIAG_DROP_VIEW 36 #define SQL_DIAG_DYNAMIC_DELETE_CURSOR 38 #define SQL_DIAG_DYNAMIC_UPDATE_CURSOR 81 #define SQL_DIAG_GRANT 48 #define SQL_DIAG_INSERT 50 #define SQL_DIAG_REVOKE 59 #define SQL_DIAG_SELECT_CURSOR 85 #define SQL_DIAG_UNKNOWN_STATEMENT 0 #define SQL_DIAG_UPDATE_WHERE 82 #endif #define SQL_UNKNOWN_TYPE 0 #define SQL_CHAR 1 #define SQL_NUMERIC 2 #define SQL_DECIMAL 3 #define SQL_INTEGER 4 #define SQL_SMALLINT 5 #define SQL_FLOAT 6 #define SQL_REAL 7 #define SQL_DOUBLE 8 #if (ODBCVER >= 0x0300) #define SQL_DATETIME 9 #endif #define SQL_VARCHAR 12 #if (ODBCVER >= 0x0300) #define SQL_TYPE_DATE 91 #define SQL_TYPE_TIME 92 #define SQL_TYPE_TIMESTAMP 93 #endif #if (ODBCVER >= 0x0300) #define SQL_UNSPECIFIED 0 #define SQL_INSENSITIVE 1 #define SQL_SENSITIVE 2 #endif #define SQL_ALL_TYPES 0 #if (ODBCVER >= 0x0300) #define SQL_DEFAULT 99 #endif #if (ODBCVER >= 0x0300) #define SQL_ARD_TYPE (-99) #endif #if (ODBCVER >= 0x0300) #define SQL_CODE_DATE 1 #define SQL_CODE_TIME 2 #define SQL_CODE_TIMESTAMP 3 #endif #if (ODBCVER >= 0x0300) #define SQL_FALSE 0 #define SQL_TRUE 1 #endif #define SQL_NO_NULLS 0 #define SQL_NULLABLE 1 #define SQL_NULLABLE_UNKNOWN 2 #if (ODBCVER >= 0x0300) #define SQL_PRED_NONE 0 #define SQL_PRED_CHAR 1 #define SQL_PRED_BASIC 2 #endif #if (ODBCVER >= 0x0300) #define SQL_NAMED 0 #define SQL_UNNAMED 1 #endif #if (ODBCVER >= 0x0300) #define SQL_DESC_ALLOC_AUTO 1 #define SQL_DESC_ALLOC_USER 2 #endif #define SQL_CLOSE 0 #define SQL_DROP 1 #define SQL_UNBIND 2 #define SQL_RESET_PARAMS 3 #define SQL_FETCH_NEXT 1 #define SQL_FETCH_FIRST 2 #define SQL_FETCH_LAST 3 #define SQL_FETCH_PRIOR 4 #define SQL_FETCH_ABSOLUTE 5 #define SQL_FETCH_RELATIVE 6 #define SQL_COMMIT 0 #define SQL_ROLLBACK 1 #define SQL_NULL_HENV 0 #define SQL_NULL_HDBC 0 #define SQL_NULL_HSTMT 0 #if (ODBCVER >= 0x0300) #define SQL_NULL_HDESC 0 #endif #if (ODBCVER >= 0x0300) #define SQL_NULL_HANDLE __MSABI_LONG(0) #endif #define SQL_SCOPE_CURROW 0 #define SQL_SCOPE_TRANSACTION 1 #define SQL_SCOPE_SESSION 2 #define SQL_PC_UNKNOWN 0 #if (ODBCVER >= 0x0300) #define SQL_PC_NON_PSEUDO 1 #endif #define SQL_PC_PSEUDO 2 #if (ODBCVER >= 0x0300) #define SQL_ROW_IDENTIFIER 1 #endif #define SQL_INDEX_UNIQUE 0 #define SQL_INDEX_ALL 1 #define SQL_INDEX_CLUSTERED 1 #define SQL_INDEX_HASHED 2 #define SQL_INDEX_OTHER 3 #define SQL_API_SQLALLOCCONNECT 1 #define SQL_API_SQLALLOCENV 2 #if (ODBCVER >= 0x0300) #define SQL_API_SQLALLOCHANDLE 1001 #endif #define SQL_API_SQLALLOCSTMT 3 #define SQL_API_SQLBINDCOL 4 #if (ODBCVER >= 0x0300) #define SQL_API_SQLBINDPARAM 1002 #endif #define SQL_API_SQLCANCEL 5 #if (ODBCVER >= 0x0300) #define SQL_API_SQLCLOSECURSOR 1003 #define SQL_API_SQLCOLATTRIBUTE 6 #endif #define SQL_API_SQLCOLUMNS 40 #define SQL_API_SQLCONNECT 7 #if (ODBCVER >= 0x0300) #define SQL_API_SQLCOPYDESC 1004 #endif #define SQL_API_SQLDATASOURCES 57 #define SQL_API_SQLDESCRIBECOL 8 #define SQL_API_SQLDISCONNECT 9 #if (ODBCVER >= 0x0300) #define SQL_API_SQLENDTRAN 1005 #endif #define SQL_API_SQLERROR 10 #define SQL_API_SQLEXECDIRECT 11 #define SQL_API_SQLEXECUTE 12 #define SQL_API_SQLFETCH 13 #if (ODBCVER >= 0x0300) #define SQL_API_SQLFETCHSCROLL 1021 #endif #define SQL_API_SQLFREECONNECT 14 #define SQL_API_SQLFREEENV 15 #if (ODBCVER >= 0x0300) #define SQL_API_SQLFREEHANDLE 1006 #endif #define SQL_API_SQLFREESTMT 16 #if (ODBCVER >= 0x0300) #define SQL_API_SQLGETCONNECTATTR 1007 #endif #define SQL_API_SQLGETCONNECTOPTION 42 #define SQL_API_SQLGETCURSORNAME 17 #define SQL_API_SQLGETDATA 43 #if (ODBCVER >= 0x0300) #define SQL_API_SQLGETDESCFIELD 1008 #define SQL_API_SQLGETDESCREC 1009 #define SQL_API_SQLGETDIAGFIELD 1010 #define SQL_API_SQLGETDIAGREC 1011 #define SQL_API_SQLGETENVATTR 1012 #endif #define SQL_API_SQLGETFUNCTIONS 44 #define SQL_API_SQLGETINFO 45 #if (ODBCVER >= 0x0300) #define SQL_API_SQLGETSTMTATTR 1014 #endif #define SQL_API_SQLGETSTMTOPTION 46 #define SQL_API_SQLGETTYPEINFO 47 #define SQL_API_SQLNUMRESULTCOLS 18 #define SQL_API_SQLPARAMDATA 48 #define SQL_API_SQLPREPARE 19 #define SQL_API_SQLPUTDATA 49 #define SQL_API_SQLROWCOUNT 20 #if (ODBCVER >= 0x0300) #define SQL_API_SQLSETCONNECTATTR 1016 #endif #define SQL_API_SQLSETCONNECTOPTION 50 #define SQL_API_SQLSETCURSORNAME 21 #if (ODBCVER >= 0x0300) #define SQL_API_SQLSETDESCFIELD 1017 #define SQL_API_SQLSETDESCREC 1018 #define SQL_API_SQLSETENVATTR 1019 #endif #define SQL_API_SQLSETPARAM 22 #if (ODBCVER >= 0x0300) #define SQL_API_SQLSETSTMTATTR 1020 #endif #define SQL_API_SQLSETSTMTOPTION 51 #define SQL_API_SQLSPECIALCOLUMNS 52 #define SQL_API_SQLSTATISTICS 53 #define SQL_API_SQLTABLES 54 #define SQL_API_SQLTRANSACT 23 #if (ODBCVER >= 0x0300) #define SQL_MAX_DRIVER_CONNECTIONS 0 #define SQL_MAXIMUM_DRIVER_CONNECTIONS SQL_MAX_DRIVER_CONNECTIONS #define SQL_MAX_CONCURRENT_ACTIVITIES 1 #define SQL_MAXIMUM_CONCURRENT_ACTIVITIES SQL_MAX_CONCURRENT_ACTIVITIES #endif #define SQL_DATA_SOURCE_NAME 2 #define SQL_FETCH_DIRECTION 8 #define SQL_SERVER_NAME 13 #define SQL_SEARCH_PATTERN_ESCAPE 14 #define SQL_DBMS_NAME 17 #define SQL_DBMS_VER 18 #define SQL_ACCESSIBLE_TABLES 19 #define SQL_ACCESSIBLE_PROCEDURES 20 #define SQL_CURSOR_COMMIT_BEHAVIOR 23 #define SQL_DATA_SOURCE_READ_ONLY 25 #define SQL_DEFAULT_TXN_ISOLATION 26 #define SQL_IDENTIFIER_CASE 28 #define SQL_IDENTIFIER_QUOTE_CHAR 29 #define SQL_MAX_COLUMN_NAME_LEN 30 #define SQL_MAXIMUM_COLUMN_NAME_LENGTH SQL_MAX_COLUMN_NAME_LEN #define SQL_MAX_CURSOR_NAME_LEN 31 #define SQL_MAXIMUM_CURSOR_NAME_LENGTH SQL_MAX_CURSOR_NAME_LEN #define SQL_MAX_SCHEMA_NAME_LEN 32 #define SQL_MAXIMUM_SCHEMA_NAME_LENGTH SQL_MAX_SCHEMA_NAME_LEN #define SQL_MAX_CATALOG_NAME_LEN 34 #define SQL_MAXIMUM_CATALOG_NAME_LENGTH SQL_MAX_CATALOG_NAME_LEN #define SQL_MAX_TABLE_NAME_LEN 35 #define SQL_SCROLL_CONCURRENCY 43 #define SQL_TXN_CAPABLE 46 #define SQL_TRANSACTION_CAPABLE SQL_TXN_CAPABLE #define SQL_USER_NAME 47 #define SQL_TXN_ISOLATION_OPTION 72 #define SQL_TRANSACTION_ISOLATION_OPTION SQL_TXN_ISOLATION_OPTION #define SQL_INTEGRITY 73 #define SQL_GETDATA_EXTENSIONS 81 #define SQL_NULL_COLLATION 85 #define SQL_ALTER_TABLE 86 #define SQL_ORDER_BY_COLUMNS_IN_SELECT 90 #define SQL_SPECIAL_CHARACTERS 94 #define SQL_MAX_COLUMNS_IN_GROUP_BY 97 #define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY SQL_MAX_COLUMNS_IN_GROUP_BY #define SQL_MAX_COLUMNS_IN_INDEX 98 #define SQL_MAXIMUM_COLUMNS_IN_INDEX SQL_MAX_COLUMNS_IN_INDEX #define SQL_MAX_COLUMNS_IN_ORDER_BY 99 #define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY SQL_MAX_COLUMNS_IN_ORDER_BY #define SQL_MAX_COLUMNS_IN_SELECT 100 #define SQL_MAXIMUM_COLUMNS_IN_SELECT SQL_MAX_COLUMNS_IN_SELECT #define SQL_MAX_COLUMNS_IN_TABLE 101 #define SQL_MAX_INDEX_SIZE 102 #define SQL_MAXIMUM_INDEX_SIZE SQL_MAX_INDEX_SIZE #define SQL_MAX_ROW_SIZE 104 #define SQL_MAXIMUM_ROW_SIZE SQL_MAX_ROW_SIZE #define SQL_MAX_STATEMENT_LEN 105 #define SQL_MAXIMUM_STATEMENT_LENGTH SQL_MAX_STATEMENT_LEN #define SQL_MAX_TABLES_IN_SELECT 106 #define SQL_MAXIMUM_TABLES_IN_SELECT SQL_MAX_TABLES_IN_SELECT #define SQL_MAX_USER_NAME_LEN 107 #define SQL_MAXIMUM_USER_NAME_LENGTH SQL_MAX_USER_NAME_LEN #if (ODBCVER >= 0x0300) #define SQL_OJ_CAPABILITIES 115 #define SQL_OUTER_JOIN_CAPABILITIES SQL_OJ_CAPABILITIES #endif #if (ODBCVER >= 0x0300) #define SQL_XOPEN_CLI_YEAR 10000 #define SQL_CURSOR_SENSITIVITY 10001 #define SQL_DESCRIBE_PARAMETER 10002 #define SQL_CATALOG_NAME 10003 #define SQL_COLLATION_SEQ 10004 #define SQL_MAX_IDENTIFIER_LEN 10005 #define SQL_MAXIMUM_IDENTIFIER_LENGTH SQL_MAX_IDENTIFIER_LEN #endif #if (ODBCVER >= 0x0200) #define SQL_AT_ADD_COLUMN __MSABI_LONG(0x00000001) #define SQL_AT_DROP_COLUMN __MSABI_LONG(0x00000002) #endif #if (ODBCVER >= 0x0300) #define SQL_AT_ADD_CONSTRAINT __MSABI_LONG(0x00000008) #endif /* ODBCVER >= 0x0300 */ #if (ODBCVER >= 0x0300) #define SQL_AM_NONE 0 #define SQL_AM_CONNECTION 1 #define SQL_AM_STATEMENT 2 #endif #define SQL_CB_DELETE 0 #define SQL_CB_CLOSE 1 #define SQL_CB_PRESERVE 2 #define SQL_FD_FETCH_NEXT __MSABI_LONG(0x00000001) #define SQL_FD_FETCH_FIRST __MSABI_LONG(0x00000002) #define SQL_FD_FETCH_LAST __MSABI_LONG(0x00000004) #define SQL_FD_FETCH_PRIOR __MSABI_LONG(0x00000008) #define SQL_FD_FETCH_ABSOLUTE __MSABI_LONG(0x00000010) #define SQL_FD_FETCH_RELATIVE __MSABI_LONG(0x00000020) #define SQL_GD_ANY_COLUMN __MSABI_LONG(0x00000001) #define SQL_GD_ANY_ORDER __MSABI_LONG(0x00000002) #define SQL_IC_UPPER 1 #define SQL_IC_LOWER 2 #define SQL_IC_SENSITIVE 3 #define SQL_IC_MIXED 4 #if (ODBCVER >= 0x0201) #define SQL_OJ_LEFT __MSABI_LONG(0x00000001) #define SQL_OJ_RIGHT __MSABI_LONG(0x00000002) #define SQL_OJ_FULL __MSABI_LONG(0x00000004) #define SQL_OJ_NESTED __MSABI_LONG(0x00000008) #define SQL_OJ_NOT_ORDERED __MSABI_LONG(0x00000010) #define SQL_OJ_INNER __MSABI_LONG(0x00000020) #define SQL_OJ_ALL_COMPARISON_OPS __MSABI_LONG(0x00000040) #endif #define SQL_SCCO_READ_ONLY __MSABI_LONG(0x00000001) #define SQL_SCCO_LOCK __MSABI_LONG(0x00000002) #define SQL_SCCO_OPT_ROWVER __MSABI_LONG(0x00000004) #define SQL_SCCO_OPT_VALUES __MSABI_LONG(0x00000008) #define SQL_TC_NONE 0 #define SQL_TC_DML 1 #define SQL_TC_ALL 2 #define SQL_TC_DDL_COMMIT 3 #define SQL_TC_DDL_IGNORE 4 #define SQL_TXN_READ_UNCOMMITTED __MSABI_LONG(0x00000001) #define SQL_TRANSACTION_READ_UNCOMMITTED SQL_TXN_READ_UNCOMMITTED #define SQL_TXN_READ_COMMITTED __MSABI_LONG(0x00000002) #define SQL_TRANSACTION_READ_COMMITTED SQL_TXN_READ_COMMITTED #define SQL_TXN_REPEATABLE_READ __MSABI_LONG(0x00000004) #define SQL_TRANSACTION_REPEATABLE_READ SQL_TXN_REPEATABLE_READ #define SQL_TXN_SERIALIZABLE __MSABI_LONG(0x00000008) #define SQL_TRANSACTION_SERIALIZABLE SQL_TXN_SERIALIZABLE #define SQL_NC_HIGH 0 #define SQL_NC_LOW 1 SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle, SQLHDBC *ConnectionHandle); SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandle); #endif SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle, SQLHSTMT *StatementHandle); SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLLEN BufferLength, SQLLEN *StrLen_or_Ind); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLULEN LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLLEN *StrLen_or_Ind); #endif SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle); SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength, SQLLEN *NumericAttribute); #endif SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle, SQLCHAR *CatalogName, SQLSMALLINT NameLength1, SQLCHAR *SchemaName, SQLSMALLINT NameLength2, SQLCHAR *TableName, SQLSMALLINT NameLength3, SQLCHAR *ColumnName, SQLSMALLINT NameLength4); SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle, SQLCHAR *ServerName, SQLSMALLINT NameLength1, SQLCHAR *UserName, SQLSMALLINT NameLength2, SQLCHAR *Authentication, SQLSMALLINT NameLength3); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle, SQLHDESC TargetDescHandle); #endif SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR *ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1, SQLCHAR *Description, SQLSMALLINT BufferLength2, SQLSMALLINT *NameLength2); SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT *NameLength, SQLSMALLINT *DataType, SQLULEN *ColumnSize, SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable); SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType); #endif SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle, SQLCHAR *Sqlstate, SQLINTEGER *NativeError, SQLCHAR *MessageText, SQLSMALLINT BufferLength, SQLSMALLINT *TextLength); SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength); SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle); SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLLEN FetchOffset); #endif SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle); SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle); #endif SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER *StringLength); #endif SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLPOINTER Value); SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT BufferLength, SQLSMALLINT *NameLength); SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLLEN BufferLength, SQLLEN *StrLen_or_Ind); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER *StringLength); SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLCHAR *Name, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength, SQLSMALLINT *Type, SQLSMALLINT *SubType, SQLLEN *Length, SQLSMALLINT *Precision, SQLSMALLINT *Scale, SQLSMALLINT *Nullable); SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, SQLPOINTER DiagInfo, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength); SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR *Sqlstate, SQLINTEGER *NativeError, SQLCHAR *MessageText, SQLSMALLINT BufferLength, SQLSMALLINT *TextLength); SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER *StringLength); #endif SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported); SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER *StringLength); #endif SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLPOINTER Value); SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType); SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCount); SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle, SQLPOINTER *Value); SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength); SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle, SQLPOINTER Data, SQLLEN StrLen_or_Ind); SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle, SQLLEN *RowCount); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); #endif SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle, SQLUSMALLINT Option, SQLULEN Value); SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle, SQLCHAR *CursorName, SQLSMALLINT NameLength); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLSetDescField(SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength); SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLLEN Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLLEN *StringLength, SQLLEN *Indicator); SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); #endif SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLULEN LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLLEN *StrLen_or_Ind); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); #endif SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle, SQLUSMALLINT Option, SQLULEN Value); SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle, SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName, SQLSMALLINT NameLength1, SQLCHAR *SchemaName, SQLSMALLINT NameLength2, SQLCHAR *TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Scope, SQLUSMALLINT Nullable); SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle, SQLCHAR *CatalogName, SQLSMALLINT NameLength1, SQLCHAR *SchemaName, SQLSMALLINT NameLength2, SQLCHAR *TableName, SQLSMALLINT NameLength3, SQLUSMALLINT Unique, SQLUSMALLINT Reserved); SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle, SQLCHAR *CatalogName, SQLSMALLINT NameLength1, SQLCHAR *SchemaName, SQLSMALLINT NameLength2, SQLCHAR *TableName, SQLSMALLINT NameLength3, SQLCHAR *TableType, SQLSMALLINT NameLength4); SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle, SQLHDBC ConnectionHandle, SQLUSMALLINT CompletionType); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/sqlext.h ================================================ /* * MS SQL Extension definitions * * Copyright (C) 1999 Xiang Li * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __SQLEXT_H #define __SQLEXT_H #include #ifdef __cplusplus extern "C" { #endif #define SQL_SPEC_MAJOR 3 #define SQL_SPEC_MINOR 51 #define SQL_SPEC_STRING "03.51" #define SQL_SQLSTATE_SIZE 5 #define SQL_MAX_DSN_LENGTH 32 #define SQL_MAX_OPTION_STRING_LENGTH 256 #if (ODBCVER < 0x0300) #define SQL_NO_DATA_FOUND 100 #else #define SQL_NO_DATA_FOUND SQL_NO_DATA #endif #if (ODBCVER >= 0x0300) #define SQL_HANDLE_SENV 5 #endif #if (ODBCVER >= 0x0300) #define SQL_ATTR_ODBC_VERSION 200 #define SQL_ATTR_CONNECTION_POOLING 201 #define SQL_ATTR_CP_MATCH 202 #endif #if (ODBCVER >= 0x0300) #define SQL_CP_OFF __MSABI_LONG(0U) #define SQL_CP_ONE_PER_DRIVER __MSABI_LONG(1U) #define SQL_CP_ONE_PER_HENV __MSABI_LONG(2U) #define SQL_CP_DEFAULT SQL_CP_OFF #define SQL_CP_STRICT_MATCH __MSABI_LONG(0U) #define SQL_CP_RELAXED_MATCH __MSABI_LONG(1U) #define SQL_CP_MATCH_DEFAULT SQL_CP_STRICT_MATCH #define SQL_OV_ODBC2 __MSABI_LONG(2U) #define SQL_OV_ODBC3 __MSABI_LONG(3U) #endif #define SQL_ACCESS_MODE 101 #define SQL_AUTOCOMMIT 102 #define SQL_LOGIN_TIMEOUT 103 #define SQL_OPT_TRACE 104 #define SQL_OPT_TRACEFILE 105 #define SQL_TRANSLATE_DLL 106 #define SQL_TRANSLATE_OPTION 107 #define SQL_TXN_ISOLATION 108 #define SQL_CURRENT_QUALIFIER 109 #define SQL_ODBC_CURSORS 110 #define SQL_QUIET_MODE 111 #define SQL_PACKET_SIZE 112 #if (ODBCVER >= 0x0300) #define SQL_ATTR_ACCESS_MODE SQL_ACCESS_MODE #define SQL_ATTR_AUTOCOMMIT SQL_AUTOCOMMIT #define SQL_ATTR_CONNECTION_TIMEOUT 113 #define SQL_ATTR_CURRENT_CATALOG SQL_CURRENT_QUALIFIER #define SQL_ATTR_DISCONNECT_BEHAVIOR 114 #define SQL_ATTR_ENLIST_IN_DTC 1207 #define SQL_ATTR_ENLIST_IN_XA 1208 #define SQL_ATTR_LOGIN_TIMEOUT SQL_LOGIN_TIMEOUT #define SQL_ATTR_ODBC_CURSORS SQL_ODBC_CURSORS #define SQL_ATTR_PACKET_SIZE SQL_PACKET_SIZE #define SQL_ATTR_QUIET_MODE SQL_QUIET_MODE #define SQL_ATTR_TRACE SQL_OPT_TRACE #define SQL_ATTR_TRACEFILE SQL_OPT_TRACEFILE #define SQL_ATTR_TRANSLATE_LIB SQL_TRANSLATE_DLL #define SQL_ATTR_TRANSLATE_OPTION SQL_TRANSLATE_OPTION #define SQL_ATTR_TXN_ISOLATION SQL_TXN_ISOLATION #endif #define SQL_ATTR_CONNECTION_DEAD 1209 #if (ODBCVER >= 0x0351) #define SQL_ATTR_ANSI_APP 115 #endif #if (ODBCVER < 0x0300) #define SQL_CONNECT_OPT_DRVR_START 1000 #endif #if (ODBCVER < 0x0300) #define SQL_CONN_OPT_MAX SQL_PACKET_SIZE #define SQL_CONN_OPT_MIN SQL_ACCESS_MODE #endif #define SQL_MODE_READ_WRITE __MSABI_LONG(0U) #define SQL_MODE_READ_ONLY __MSABI_LONG(1U) #define SQL_MODE_DEFAULT SQL_MODE_READ_WRITE #define SQL_AUTOCOMMIT_OFF __MSABI_LONG(0U) #define SQL_AUTOCOMMIT_ON __MSABI_LONG(1U) #define SQL_AUTOCOMMIT_DEFAULT SQL_AUTOCOMMIT_ON #define SQL_LOGIN_TIMEOUT_DEFAULT __MSABI_LONG(15U) #define SQL_OPT_TRACE_OFF __MSABI_LONG(0U) #define SQL_OPT_TRACE_ON __MSABI_LONG(1U) #define SQL_OPT_TRACE_DEFAULT SQL_OPT_TRACE_OFF #define SQL_OPT_TRACE_FILE_DEFAULT "\\SQL.LOG" #define SQL_CUR_USE_IF_NEEDED __MSABI_LONG(0U) #define SQL_CUR_USE_ODBC __MSABI_LONG(1U) #define SQL_CUR_USE_DRIVER __MSABI_LONG(2U) #define SQL_CUR_DEFAULT SQL_CUR_USE_DRIVER #if (ODBCVER >= 0x0300) #define SQL_DB_RETURN_TO_POOL __MSABI_LONG(0U) #define SQL_DB_DISCONNECT __MSABI_LONG(1U) #define SQL_DB_DEFAULT SQL_DB_RETURN_TO_POOL #define SQL_DTC_DONE __MSABI_LONG(0) #endif #define SQL_CD_TRUE __MSABI_LONG(1) #define SQL_CD_FALSE __MSABI_LONG(0) #if (ODBCVER >= 0x0351) #define SQL_AA_TRUE __MSABI_LONG(1) #define SQL_AA_FALSE __MSABI_LONG(0) #endif #define SQL_QUERY_TIMEOUT 0 #define SQL_MAX_ROWS 1 #define SQL_NOSCAN 2 #define SQL_MAX_LENGTH 3 #define SQL_ASYNC_ENABLE 4 #define SQL_BIND_TYPE 5 #define SQL_CURSOR_TYPE 6 #define SQL_CONCURRENCY 7 #define SQL_KEYSET_SIZE 8 #define SQL_ROWSET_SIZE 9 #define SQL_SIMULATE_CURSOR 10 #define SQL_RETRIEVE_DATA 11 #define SQL_USE_BOOKMARKS 12 #define SQL_GET_BOOKMARK 13 #define SQL_ROW_NUMBER 14 #if (ODBCVER >= 0x0300) #define SQL_ATTR_ASYNC_ENABLE 4 #define SQL_ATTR_CONCURRENCY SQL_CONCURRENCY #define SQL_ATTR_CURSOR_TYPE SQL_CURSOR_TYPE #define SQL_ATTR_ENABLE_AUTO_IPD 15 #define SQL_ATTR_FETCH_BOOKMARK_PTR 16 #define SQL_ATTR_KEYSET_SIZE SQL_KEYSET_SIZE #define SQL_ATTR_MAX_LENGTH SQL_MAX_LENGTH #define SQL_ATTR_MAX_ROWS SQL_MAX_ROWS #define SQL_ATTR_NOSCAN SQL_NOSCAN #define SQL_ATTR_PARAM_BIND_OFFSET_PTR 17 #define SQL_ATTR_PARAM_BIND_TYPE 18 #define SQL_ATTR_PARAM_OPERATION_PTR 19 #define SQL_ATTR_PARAM_STATUS_PTR 20 #define SQL_ATTR_PARAMS_PROCESSED_PTR 21 #define SQL_ATTR_RETRIEVE_DATA SQL_RETRIEVE_DATA #define SQL_ATTR_ROW_BIND_OFFSET_PTR 23 #define SQL_ATTR_ROW_BIND_TYPE SQL_BIND_TYPE #define SQL_ATTR_ROW_NUMBER SQL_ROW_NUMBER #define SQL_ATTR_ROW_OPERATION_PTR 24 #define SQL_ATTR_ROW_STATUS_PTR 25 #define SQL_ATTR_ROWS_FETCHED_PTR 26 #define SQL_ATTR_ROW_ARRAY_SIZE 27 #define SQL_ATTR_SIMULATE_CURSOR SQL_SIMULATE_CURSOR #define SQL_ATTR_USE_BOOKMARKS SQL_USE_BOOKMARKS #endif #if (ODBCVER < 0x0300) #define SQL_STMT_OPT_MAX SQL_ROW_NUMBER #define SQL_STMT_OPT_MIN SQL_QUERY_TIMEOUT #endif #if (ODBCVER >= 0x0300) #define SQL_COL_PRED_CHAR SQL_LIKE_ONLY #define SQL_COL_PRED_BASIC SQL_ALL_EXCEPT_LIKE #endif #if (ODBCVER >= 0x0300) #define SQL_IS_POINTER (-4) #define SQL_IS_UINTEGER (-5) #define SQL_IS_INTEGER (-6) #define SQL_IS_USMALLINT (-7) #define SQL_IS_SMALLINT (-8) #endif #if (ODBCVER >= 0x0300) #define SQL_PARAM_BIND_BY_COLUMN __MSABI_LONG(0U) #define SQL_PARAM_BIND_TYPE_DEFAULT SQL_PARAM_BIND_BY_COLUMN #endif #define SQL_QUERY_TIMEOUT_DEFAULT __MSABI_LONG(0U) #define SQL_MAX_ROWS_DEFAULT __MSABI_LONG(0U) #define SQL_NOSCAN_OFF __MSABI_LONG(0U) #define SQL_NOSCAN_ON __MSABI_LONG(1U) #define SQL_NOSCAN_DEFAULT SQL_NOSCAN_OFF #define SQL_MAX_LENGTH_DEFAULT __MSABI_LONG(0U) #define SQL_ASYNC_ENABLE_OFF __MSABI_LONG(0U) #define SQL_ASYNC_ENABLE_ON __MSABI_LONG(1U) #define SQL_ASYNC_ENABLE_DEFAULT SQL_ASYNC_ENABLE_OFF #define SQL_BIND_BY_COLUMN __MSABI_LONG(0U) #define SQL_BIND_TYPE_DEFAULT SQL_BIND_BY_COLUMN #define SQL_CONCUR_READ_ONLY 1 #define SQL_CONCUR_LOCK 2 #define SQL_CONCUR_ROWVER 3 #define SQL_CONCUR_VALUES 4 #define SQL_CONCUR_DEFAULT SQL_CONCUR_READ_ONLY #define SQL_CURSOR_FORWARD_ONLY __MSABI_LONG(0U) #define SQL_CURSOR_KEYSET_DRIVEN __MSABI_LONG(1U) #define SQL_CURSOR_DYNAMIC __MSABI_LONG(2U) #define SQL_CURSOR_STATIC __MSABI_LONG(3U) #define SQL_CURSOR_TYPE_DEFAULT SQL_CURSOR_FORWARD_ONLY #define SQL_ROWSET_SIZE_DEFAULT __MSABI_LONG(1U) #define SQL_KEYSET_SIZE_DEFAULT __MSABI_LONG(0U) #define SQL_SC_NON_UNIQUE __MSABI_LONG(0U) #define SQL_SC_TRY_UNIQUE __MSABI_LONG(1U) #define SQL_SC_UNIQUE __MSABI_LONG(2U) #define SQL_RD_OFF __MSABI_LONG(0U) #define SQL_RD_ON __MSABI_LONG(1U) #define SQL_RD_DEFAULT SQL_RD_ON #define SQL_UB_OFF __MSABI_LONG(0U) #define SQL_UB_ON __MSABI_LONG(1U) #define SQL_UB_DEFAULT SQL_UB_OFF #if (ODBCVER >= 0x0300) #define SQL_UB_FIXED SQL_UB_ON #define SQL_UB_VARIABLE __MSABI_LONG(2U) #endif #if (ODBCVER >= 0x0300) #define SQL_DESC_ARRAY_SIZE 20 #define SQL_DESC_ARRAY_STATUS_PTR 21 #define SQL_DESC_AUTO_UNIQUE_VALUE SQL_COLUMN_AUTO_INCREMENT #define SQL_DESC_BASE_COLUMN_NAME 22 #define SQL_DESC_BASE_TABLE_NAME 23 #define SQL_DESC_BIND_OFFSET_PTR 24 #define SQL_DESC_BIND_TYPE 25 #define SQL_DESC_CASE_SENSITIVE SQL_COLUMN_CASE_SENSITIVE #define SQL_DESC_CATALOG_NAME SQL_COLUMN_QUALIFIER_NAME #define SQL_DESC_CONCISE_TYPE SQL_COLUMN_TYPE #define SQL_DESC_DATETIME_INTERVAL_PRECISION 26 #define SQL_DESC_DISPLAY_SIZE SQL_COLUMN_DISPLAY_SIZE #define SQL_DESC_FIXED_PREC_SCALE SQL_COLUMN_MONEY #define SQL_DESC_LABEL SQL_COLUMN_LABEL #define SQL_DESC_LITERAL_PREFIX 27 #define SQL_DESC_LITERAL_SUFFIX 28 #define SQL_DESC_LOCAL_TYPE_NAME 29 #define SQL_DESC_MAXIMUM_SCALE 30 #define SQL_DESC_MINIMUM_SCALE 31 #define SQL_DESC_NUM_PREC_RADIX 32 #define SQL_DESC_PARAMETER_TYPE 33 #define SQL_DESC_ROWS_PROCESSED_PTR 34 #if (ODBCVER >= 0x0350) #define SQL_DESC_ROWVER 35 #endif #define SQL_DESC_SCHEMA_NAME SQL_COLUMN_OWNER_NAME #define SQL_DESC_SEARCHABLE SQL_COLUMN_SEARCHABLE #define SQL_DESC_TYPE_NAME SQL_COLUMN_TYPE_NAME #define SQL_DESC_TABLE_NAME SQL_COLUMN_TABLE_NAME #define SQL_DESC_UNSIGNED SQL_COLUMN_UNSIGNED #define SQL_DESC_UPDATABLE SQL_COLUMN_UPDATABLE #endif #if (ODBCVER >= 0x0300) #define SQL_DIAG_CURSOR_ROW_COUNT (-1249) #define SQL_DIAG_ROW_NUMBER (-1248) #define SQL_DIAG_COLUMN_NUMBER (-1247) #endif #define SQL_DATE 9 #if (ODBCVER >= 0x0300) #define SQL_INTERVAL 10 #endif #define SQL_TIME 10 #define SQL_TIMESTAMP 11 #define SQL_LONGVARCHAR (-1) #define SQL_BINARY (-2) #define SQL_VARBINARY (-3) #define SQL_LONGVARBINARY (-4) #define SQL_BIGINT (-5) #define SQL_TINYINT (-6) #define SQL_BIT (-7) #if (ODBCVER >= 0x0350) #define SQL_GUID (-11) #endif #if (ODBCVER >= 0x0300) #define SQL_CODE_YEAR 1 #define SQL_CODE_MONTH 2 #define SQL_CODE_DAY 3 #define SQL_CODE_HOUR 4 #define SQL_CODE_MINUTE 5 #define SQL_CODE_SECOND 6 #define SQL_CODE_YEAR_TO_MONTH 7 #define SQL_CODE_DAY_TO_HOUR 8 #define SQL_CODE_DAY_TO_MINUTE 9 #define SQL_CODE_DAY_TO_SECOND 10 #define SQL_CODE_HOUR_TO_MINUTE 11 #define SQL_CODE_HOUR_TO_SECOND 12 #define SQL_CODE_MINUTE_TO_SECOND 13 #define SQL_INTERVAL_YEAR (100 + SQL_CODE_YEAR) #define SQL_INTERVAL_MONTH (100 + SQL_CODE_MONTH) #define SQL_INTERVAL_DAY (100 + SQL_CODE_DAY) #define SQL_INTERVAL_HOUR (100 + SQL_CODE_HOUR) #define SQL_INTERVAL_MINUTE (100 + SQL_CODE_MINUTE) #define SQL_INTERVAL_SECOND (100 + SQL_CODE_SECOND) #define SQL_INTERVAL_YEAR_TO_MONTH (100 + SQL_CODE_YEAR_TO_MONTH) #define SQL_INTERVAL_DAY_TO_HOUR (100 + SQL_CODE_DAY_TO_HOUR) #define SQL_INTERVAL_DAY_TO_MINUTE (100 + SQL_CODE_DAY_TO_MINUTE) #define SQL_INTERVAL_DAY_TO_SECOND (100 + SQL_CODE_DAY_TO_SECOND) #define SQL_INTERVAL_HOUR_TO_MINUTE (100 + SQL_CODE_HOUR_TO_MINUTE) #define SQL_INTERVAL_HOUR_TO_SECOND (100 + SQL_CODE_HOUR_TO_SECOND) #define SQL_INTERVAL_MINUTE_TO_SECOND (100 + SQL_CODE_MINUTE_TO_SECOND) #else #define SQL_INTERVAL_YEAR (-80) #define SQL_INTERVAL_MONTH (-81) #define SQL_INTERVAL_YEAR_TO_MONTH (-82) #define SQL_INTERVAL_DAY (-83) #define SQL_INTERVAL_HOUR (-84) #define SQL_INTERVAL_MINUTE (-85) #define SQL_INTERVAL_SECOND (-86) #define SQL_INTERVAL_DAY_TO_HOUR (-87) #define SQL_INTERVAL_DAY_TO_MINUTE (-88) #define SQL_INTERVAL_DAY_TO_SECOND (-89) #define SQL_INTERVAL_HOUR_TO_MINUTE (-90) #define SQL_INTERVAL_HOUR_TO_SECOND (-91) #define SQL_INTERVAL_MINUTE_TO_SECOND (-92) #endif #if (ODBCVER <= 0x0300) #define SQL_UNICODE (-95) #define SQL_UNICODE_VARCHAR (-96) #define SQL_UNICODE_LONGVARCHAR (-97) #define SQL_UNICODE_CHAR SQL_UNICODE #else #define SQL_UNICODE SQL_WCHAR #define SQL_UNICODE_VARCHAR SQL_WVARCHAR #define SQL_UNICODE_LONGVARCHAR SQL_WLONGVARCHAR #define SQL_UNICODE_CHAR SQL_WCHAR #endif #if (ODBCVER < 0x0300) #define SQL_TYPE_DRIVER_START SQL_INTERVAL_YEAR #define SQL_TYPE_DRIVER_END SQL_UNICODE_LONGVARCHAR #endif #define SQL_C_CHAR SQL_CHAR #define SQL_C_LONG SQL_INTEGER #define SQL_C_SHORT SQL_SMALLINT #define SQL_C_FLOAT SQL_REAL #define SQL_C_DOUBLE SQL_DOUBLE #if (ODBCVER >= 0x0300) #define SQL_C_NUMERIC SQL_NUMERIC #endif #define SQL_C_DEFAULT 99 #define SQL_SIGNED_OFFSET (-20) #define SQL_UNSIGNED_OFFSET (-22) #define SQL_C_DATE SQL_DATE #define SQL_C_TIME SQL_TIME #define SQL_C_TIMESTAMP SQL_TIMESTAMP #if (ODBCVER >= 0x0300) #define SQL_C_TYPE_DATE SQL_TYPE_DATE #define SQL_C_TYPE_TIME SQL_TYPE_TIME #define SQL_C_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP #define SQL_C_INTERVAL_YEAR SQL_INTERVAL_YEAR #define SQL_C_INTERVAL_MONTH SQL_INTERVAL_MONTH #define SQL_C_INTERVAL_DAY SQL_INTERVAL_DAY #define SQL_C_INTERVAL_HOUR SQL_INTERVAL_HOUR #define SQL_C_INTERVAL_MINUTE SQL_INTERVAL_MINUTE #define SQL_C_INTERVAL_SECOND SQL_INTERVAL_SECOND #define SQL_C_INTERVAL_YEAR_TO_MONTH SQL_INTERVAL_YEAR_TO_MONTH #define SQL_C_INTERVAL_DAY_TO_HOUR SQL_INTERVAL_DAY_TO_HOUR #define SQL_C_INTERVAL_DAY_TO_MINUTE SQL_INTERVAL_DAY_TO_MINUTE #define SQL_C_INTERVAL_DAY_TO_SECOND SQL_INTERVAL_DAY_TO_SECOND #define SQL_C_INTERVAL_HOUR_TO_MINUTE SQL_INTERVAL_HOUR_TO_MINUTE #define SQL_C_INTERVAL_HOUR_TO_SECOND SQL_INTERVAL_HOUR_TO_SECOND #define SQL_C_INTERVAL_MINUTE_TO_SECOND SQL_INTERVAL_MINUTE_TO_SECOND #endif #define SQL_C_BINARY SQL_BINARY #define SQL_C_BIT SQL_BIT #if (ODBCVER >= 0x0300) #define SQL_C_SBIGINT (SQL_BIGINT+SQL_SIGNED_OFFSET) #define SQL_C_UBIGINT (SQL_BIGINT+SQL_UNSIGNED_OFFSET) #endif #define SQL_C_TINYINT SQL_TINYINT #define SQL_C_SLONG (SQL_C_LONG+SQL_SIGNED_OFFSET) #define SQL_C_SSHORT (SQL_C_SHORT+SQL_SIGNED_OFFSET) #define SQL_C_STINYINT (SQL_TINYINT+SQL_SIGNED_OFFSET) #define SQL_C_ULONG (SQL_C_LONG+SQL_UNSIGNED_OFFSET) #define SQL_C_USHORT (SQL_C_SHORT+SQL_UNSIGNED_OFFSET) #define SQL_C_UTINYINT (SQL_TINYINT+SQL_UNSIGNED_OFFSET) #define SQL_C_BOOKMARK SQL_C_ULONG #if (ODBCVER >= 0x0350) #define SQL_C_GUID SQL_GUID #endif #define SQL_TYPE_NULL 0 #if (ODBCVER < 0x0300) #define SQL_TYPE_MIN SQL_BIT #define SQL_TYPE_MAX SQL_VARCHAR #endif #if (ODBCVER >= 0x0300) #define SQL_C_VARBOOKMARK SQL_C_BINARY #endif #if (ODBCVER >= 0x0300) #define SQL_NO_ROW_NUMBER (-1) #define SQL_NO_COLUMN_NUMBER (-1) #define SQL_ROW_NUMBER_UNKNOWN (-2) #define SQL_COLUMN_NUMBER_UNKNOWN (-2) #endif #define SQL_DEFAULT_PARAM (-5) #define SQL_IGNORE (-6) #if (ODBCVER >= 0x0300) #define SQL_COLUMN_IGNORE SQL_IGNORE #endif #define SQL_LEN_DATA_AT_EXEC_OFFSET (-100) #define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET) #define SQL_LEN_BINARY_ATTR_OFFSET (-100) #define SQL_LEN_BINARY_ATTR(length) (-(length)+SQL_LEN_BINARY_ATTR_OFFSET) #define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT #define SQL_SETPARAM_VALUE_MAX (__MSABI_LONG(-1)) #define SQL_COLUMN_COUNT 0 #define SQL_COLUMN_NAME 1 #define SQL_COLUMN_TYPE 2 #define SQL_COLUMN_LENGTH 3 #define SQL_COLUMN_PRECISION 4 #define SQL_COLUMN_SCALE 5 #define SQL_COLUMN_DISPLAY_SIZE 6 #define SQL_COLUMN_NULLABLE 7 #define SQL_COLUMN_UNSIGNED 8 #define SQL_COLUMN_MONEY 9 #define SQL_COLUMN_UPDATABLE 10 #define SQL_COLUMN_AUTO_INCREMENT 11 #define SQL_COLUMN_CASE_SENSITIVE 12 #define SQL_COLUMN_SEARCHABLE 13 #define SQL_COLUMN_TYPE_NAME 14 #define SQL_COLUMN_TABLE_NAME 15 #define SQL_COLUMN_OWNER_NAME 16 #define SQL_COLUMN_QUALIFIER_NAME 17 #define SQL_COLUMN_LABEL 18 #define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL #if (ODBCVER < 0x0300) #define SQL_COLUMN_DRIVER_START 1000 #endif #define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT #define SQL_ATTR_READONLY 0 #define SQL_ATTR_WRITE 1 #define SQL_ATTR_READWRITE_UNKNOWN 2 #define SQL_UNSEARCHABLE 0 #define SQL_LIKE_ONLY 1 #define SQL_ALL_EXCEPT_LIKE 2 #define SQL_SEARCHABLE 3 #define SQL_PRED_SEARCHABLE SQL_SEARCHABLE #define SQL_NO_TOTAL (-4) #if (ODBCVER >= 0x0300) #define SQL_API_SQLALLOCHANDLESTD 73 #define SQL_API_SQLBULKOPERATIONS 24 #endif #define SQL_API_SQLBINDPARAMETER 72 #define SQL_API_SQLBROWSECONNECT 55 #define SQL_API_SQLCOLATTRIBUTES 6 #define SQL_API_SQLCOLUMNPRIVILEGES 56 #define SQL_API_SQLDESCRIBEPARAM 58 #define SQL_API_SQLDRIVERCONNECT 41 #define SQL_API_SQLDRIVERS 71 #define SQL_API_SQLEXTENDEDFETCH 59 #define SQL_API_SQLFOREIGNKEYS 60 #define SQL_API_SQLMORERESULTS 61 #define SQL_API_SQLNATIVESQL 62 #define SQL_API_SQLNUMPARAMS 63 #define SQL_API_SQLPARAMOPTIONS 64 #define SQL_API_SQLPRIMARYKEYS 65 #define SQL_API_SQLPROCEDURECOLUMNS 66 #define SQL_API_SQLPROCEDURES 67 #define SQL_API_SQLSETPOS 68 #define SQL_API_SQLSETSCROLLOPTIONS 69 #define SQL_API_SQLTABLEPRIVILEGES 70 #if (ODBCVER < 0x0300) #define SQL_EXT_API_LAST SQL_API_SQLBINDPARAMETER #define SQL_NUM_FUNCTIONS 23 #define SQL_EXT_API_START 40 #define SQL_NUM_EXTENSIONS (SQL_EXT_API_LAST-SQL_EXT_API_START+1) #endif #define SQL_API_ALL_FUNCTIONS 0 #define SQL_API_LOADBYORDINAL 199 #if (ODBCVER >= 0x0300) #define SQL_API_ODBC3_ALL_FUNCTIONS 999 #define SQL_API_ODBC3_ALL_FUNCTIONS_SIZE 250 #define SQL_FUNC_EXISTS(pfExists, uwAPI) ((*(((UWORD*) (pfExists)) + ((uwAPI) >> 4)) & (1 << ((uwAPI) & 0x000F)) ) ? SQL_TRUE : SQL_FALSE ) #endif #define SQL_INFO_FIRST 0 #define SQL_ACTIVE_CONNECTIONS 0 #define SQL_ACTIVE_STATEMENTS 1 #define SQL_DRIVER_HDBC 3 #define SQL_DRIVER_HENV 4 #define SQL_DRIVER_HSTMT 5 #define SQL_DRIVER_NAME 6 #define SQL_DRIVER_VER 7 #define SQL_ODBC_API_CONFORMANCE 9 #define SQL_ODBC_VER 10 #define SQL_ROW_UPDATES 11 #define SQL_ODBC_SAG_CLI_CONFORMANCE 12 #define SQL_ODBC_SQL_CONFORMANCE 15 #define SQL_PROCEDURES 21 #define SQL_CONCAT_NULL_BEHAVIOR 22 #define SQL_CURSOR_ROLLBACK_BEHAVIOR 24 #define SQL_EXPRESSIONS_IN_ORDERBY 27 #define SQL_MAX_OWNER_NAME_LEN 32 #define SQL_MAX_PROCEDURE_NAME_LEN 33 #define SQL_MAX_QUALIFIER_NAME_LEN 34 #define SQL_MULT_RESULT_SETS 36 #define SQL_MULTIPLE_ACTIVE_TXN 37 #define SQL_OUTER_JOINS 38 #define SQL_OWNER_TERM 39 #define SQL_PROCEDURE_TERM 40 #define SQL_QUALIFIER_NAME_SEPARATOR 41 #define SQL_QUALIFIER_TERM 42 #define SQL_SCROLL_OPTIONS 44 #define SQL_TABLE_TERM 45 #define SQL_CONVERT_FUNCTIONS 48 #define SQL_NUMERIC_FUNCTIONS 49 #define SQL_STRING_FUNCTIONS 50 #define SQL_SYSTEM_FUNCTIONS 51 #define SQL_TIMEDATE_FUNCTIONS 52 #define SQL_CONVERT_BIGINT 53 #define SQL_CONVERT_BINARY 54 #define SQL_CONVERT_BIT 55 #define SQL_CONVERT_CHAR 56 #define SQL_CONVERT_DATE 57 #define SQL_CONVERT_DECIMAL 58 #define SQL_CONVERT_DOUBLE 59 #define SQL_CONVERT_FLOAT 60 #define SQL_CONVERT_INTEGER 61 #define SQL_CONVERT_LONGVARCHAR 62 #define SQL_CONVERT_NUMERIC 63 #define SQL_CONVERT_REAL 64 #define SQL_CONVERT_SMALLINT 65 #define SQL_CONVERT_TIME 66 #define SQL_CONVERT_TIMESTAMP 67 #define SQL_CONVERT_TINYINT 68 #define SQL_CONVERT_VARBINARY 69 #define SQL_CONVERT_VARCHAR 70 #define SQL_CONVERT_LONGVARBINARY 71 #define SQL_ODBC_SQL_OPT_IEF 73 #define SQL_CORRELATION_NAME 74 #define SQL_NON_NULLABLE_COLUMNS 75 #define SQL_DRIVER_HLIB 76 #define SQL_DRIVER_ODBC_VER 77 #define SQL_LOCK_TYPES 78 #define SQL_POS_OPERATIONS 79 #define SQL_POSITIONED_STATEMENTS 80 #define SQL_BOOKMARK_PERSISTENCE 82 #define SQL_STATIC_SENSITIVITY 83 #define SQL_FILE_USAGE 84 #define SQL_COLUMN_ALIAS 87 #define SQL_GROUP_BY 88 #define SQL_KEYWORDS 89 #define SQL_OWNER_USAGE 91 #define SQL_QUALIFIER_USAGE 92 #define SQL_QUOTED_IDENTIFIER_CASE 93 #define SQL_SUBQUERIES 95 #define SQL_UNION 96 #define SQL_MAX_ROW_SIZE_INCLUDES_LONG 103 #define SQL_MAX_CHAR_LITERAL_LEN 108 #define SQL_TIMEDATE_ADD_INTERVALS 109 #define SQL_TIMEDATE_DIFF_INTERVALS 110 #define SQL_NEED_LONG_DATA_LEN 111 #define SQL_MAX_BINARY_LITERAL_LEN 112 #define SQL_LIKE_ESCAPE_CLAUSE 113 #define SQL_QUALIFIER_LOCATION 114 #if (ODBCVER >= 0x0201 && ODBCVER < 0x0300) #define SQL_OJ_CAPABILITIES 65003 #endif #if (ODBCVER < 0x0300) #define SQL_INFO_LAST SQL_QUALIFIER_LOCATION #define SQL_INFO_DRIVER_START 1000 #endif #if (ODBCVER >= 0x0300) #define SQL_ACTIVE_ENVIRONMENTS 116 #define SQL_ALTER_DOMAIN 117 #define SQL_SQL_CONFORMANCE 118 #define SQL_DATETIME_LITERALS 119 #define SQL_ASYNC_MODE 10021 #define SQL_BATCH_ROW_COUNT 120 #define SQL_BATCH_SUPPORT 121 #define SQL_CATALOG_LOCATION SQL_QUALIFIER_LOCATION #define SQL_CATALOG_NAME_SEPARATOR SQL_QUALIFIER_NAME_SEPARATOR #define SQL_CATALOG_TERM SQL_QUALIFIER_TERM #define SQL_CATALOG_USAGE SQL_QUALIFIER_USAGE #define SQL_CONVERT_WCHAR 122 #define SQL_CONVERT_INTERVAL_DAY_TIME 123 #define SQL_CONVERT_INTERVAL_YEAR_MONTH 124 #define SQL_CONVERT_WLONGVARCHAR 125 #define SQL_CONVERT_WVARCHAR 126 #define SQL_CREATE_ASSERTION 127 #define SQL_CREATE_CHARACTER_SET 128 #define SQL_CREATE_COLLATION 129 #define SQL_CREATE_DOMAIN 130 #define SQL_CREATE_SCHEMA 131 #define SQL_CREATE_TABLE 132 #define SQL_CREATE_TRANSLATION 133 #define SQL_CREATE_VIEW 134 #define SQL_DRIVER_HDESC 135 #define SQL_DROP_ASSERTION 136 #define SQL_DROP_CHARACTER_SET 137 #define SQL_DROP_COLLATION 138 #define SQL_DROP_DOMAIN 139 #define SQL_DROP_SCHEMA 140 #define SQL_DROP_TABLE 141 #define SQL_DROP_TRANSLATION 142 #define SQL_DROP_VIEW 143 #define SQL_DYNAMIC_CURSOR_ATTRIBUTES1 144 #define SQL_DYNAMIC_CURSOR_ATTRIBUTES2 145 #define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 146 #define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 147 #define SQL_INDEX_KEYWORDS 148 #define SQL_INFO_SCHEMA_VIEWS 149 #define SQL_KEYSET_CURSOR_ATTRIBUTES1 150 #define SQL_KEYSET_CURSOR_ATTRIBUTES2 151 #define SQL_MAX_ASYNC_CONCURRENT_STATEMENTS 10022 #define SQL_ODBC_INTERFACE_CONFORMANCE 152 #define SQL_PARAM_ARRAY_ROW_COUNTS 153 #define SQL_PARAM_ARRAY_SELECTS 154 #define SQL_SCHEMA_TERM SQL_OWNER_TERM #define SQL_SCHEMA_USAGE SQL_OWNER_USAGE #define SQL_SQL92_DATETIME_FUNCTIONS 155 #define SQL_SQL92_FOREIGN_KEY_DELETE_RULE 156 #define SQL_SQL92_FOREIGN_KEY_UPDATE_RULE 157 #define SQL_SQL92_GRANT 158 #define SQL_SQL92_NUMERIC_VALUE_FUNCTIONS 159 #define SQL_SQL92_PREDICATES 160 #define SQL_SQL92_RELATIONAL_JOIN_OPERATORS 161 #define SQL_SQL92_REVOKE 162 #define SQL_SQL92_ROW_VALUE_CONSTRUCTOR 163 #define SQL_SQL92_STRING_FUNCTIONS 164 #define SQL_SQL92_VALUE_EXPRESSIONS 165 #define SQL_STANDARD_CLI_CONFORMANCE 166 #define SQL_STATIC_CURSOR_ATTRIBUTES1 167 #define SQL_STATIC_CURSOR_ATTRIBUTES2 168 #define SQL_AGGREGATE_FUNCTIONS 169 #define SQL_DDL_INDEX 170 #define SQL_DM_VER 171 #define SQL_INSERT_STATEMENT 172 #define SQL_UNION_STATEMENT SQL_UNION #endif #define SQL_DTC_TRANSITION_COST 1750 #if (ODBCVER >= 0x0300) #define SQL_AT_ADD_COLUMN_SINGLE __MSABI_LONG(0x00000020) #define SQL_AT_ADD_COLUMN_DEFAULT __MSABI_LONG(0x00000040) #define SQL_AT_ADD_COLUMN_COLLATION __MSABI_LONG(0x00000080) #define SQL_AT_SET_COLUMN_DEFAULT __MSABI_LONG(0x00000100) #define SQL_AT_DROP_COLUMN_DEFAULT __MSABI_LONG(0x00000200) #define SQL_AT_DROP_COLUMN_CASCADE __MSABI_LONG(0x00000400) #define SQL_AT_DROP_COLUMN_RESTRICT __MSABI_LONG(0x00000800) #define SQL_AT_ADD_TABLE_CONSTRAINT __MSABI_LONG(0x00001000) #define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE __MSABI_LONG(0x00002000) #define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT __MSABI_LONG(0x00004000) #define SQL_AT_CONSTRAINT_NAME_DEFINITION __MSABI_LONG(0x00008000) #define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00010000) #define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00020000) #define SQL_AT_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00040000) #define SQL_AT_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00080000) #endif #define SQL_CVT_CHAR __MSABI_LONG(0x00000001) #define SQL_CVT_NUMERIC __MSABI_LONG(0x00000002) #define SQL_CVT_DECIMAL __MSABI_LONG(0x00000004) #define SQL_CVT_INTEGER __MSABI_LONG(0x00000008) #define SQL_CVT_SMALLINT __MSABI_LONG(0x00000010) #define SQL_CVT_FLOAT __MSABI_LONG(0x00000020) #define SQL_CVT_REAL __MSABI_LONG(0x00000040) #define SQL_CVT_DOUBLE __MSABI_LONG(0x00000080) #define SQL_CVT_VARCHAR __MSABI_LONG(0x00000100) #define SQL_CVT_LONGVARCHAR __MSABI_LONG(0x00000200) #define SQL_CVT_BINARY __MSABI_LONG(0x00000400) #define SQL_CVT_VARBINARY __MSABI_LONG(0x00000800) #define SQL_CVT_BIT __MSABI_LONG(0x00001000) #define SQL_CVT_TINYINT __MSABI_LONG(0x00002000) #define SQL_CVT_BIGINT __MSABI_LONG(0x00004000) #define SQL_CVT_DATE __MSABI_LONG(0x00008000) #define SQL_CVT_TIME __MSABI_LONG(0x00010000) #define SQL_CVT_TIMESTAMP __MSABI_LONG(0x00020000) #define SQL_CVT_LONGVARBINARY __MSABI_LONG(0x00040000) #if (ODBCVER >= 0x0300) #define SQL_CVT_INTERVAL_YEAR_MONTH __MSABI_LONG(0x00080000) #define SQL_CVT_INTERVAL_DAY_TIME __MSABI_LONG(0x00100000) #define SQL_CVT_WCHAR __MSABI_LONG(0x00200000) #define SQL_CVT_WLONGVARCHAR __MSABI_LONG(0x00400000) #define SQL_CVT_WVARCHAR __MSABI_LONG(0x00800000) #endif #define SQL_FN_CVT_CONVERT __MSABI_LONG(0x00000001) #if (ODBCVER >= 0x0300) #define SQL_FN_CVT_CAST __MSABI_LONG(0x00000002) #endif #define SQL_FN_STR_CONCAT __MSABI_LONG(0x00000001) #define SQL_FN_STR_INSERT __MSABI_LONG(0x00000002) #define SQL_FN_STR_LEFT __MSABI_LONG(0x00000004) #define SQL_FN_STR_LTRIM __MSABI_LONG(0x00000008) #define SQL_FN_STR_LENGTH __MSABI_LONG(0x00000010) #define SQL_FN_STR_LOCATE __MSABI_LONG(0x00000020) #define SQL_FN_STR_LCASE __MSABI_LONG(0x00000040) #define SQL_FN_STR_REPEAT __MSABI_LONG(0x00000080) #define SQL_FN_STR_REPLACE __MSABI_LONG(0x00000100) #define SQL_FN_STR_RIGHT __MSABI_LONG(0x00000200) #define SQL_FN_STR_RTRIM __MSABI_LONG(0x00000400) #define SQL_FN_STR_SUBSTRING __MSABI_LONG(0x00000800) #define SQL_FN_STR_UCASE __MSABI_LONG(0x00001000) #define SQL_FN_STR_ASCII __MSABI_LONG(0x00002000) #define SQL_FN_STR_CHAR __MSABI_LONG(0x00004000) #define SQL_FN_STR_DIFFERENCE __MSABI_LONG(0x00008000) #define SQL_FN_STR_LOCATE_2 __MSABI_LONG(0x00010000) #define SQL_FN_STR_SOUNDEX __MSABI_LONG(0x00020000) #define SQL_FN_STR_SPACE __MSABI_LONG(0x00040000) #if (ODBCVER >= 0x0300) #define SQL_FN_STR_BIT_LENGTH __MSABI_LONG(0x00080000) #define SQL_FN_STR_CHAR_LENGTH __MSABI_LONG(0x00100000) #define SQL_FN_STR_CHARACTER_LENGTH __MSABI_LONG(0x00200000) #define SQL_FN_STR_OCTET_LENGTH __MSABI_LONG(0x00400000) #define SQL_FN_STR_POSITION __MSABI_LONG(0x00800000) #endif #if (ODBCVER >= 0x0300) #define SQL_SSF_CONVERT __MSABI_LONG(0x00000001) #define SQL_SSF_LOWER __MSABI_LONG(0x00000002) #define SQL_SSF_UPPER __MSABI_LONG(0x00000004) #define SQL_SSF_SUBSTRING __MSABI_LONG(0x00000008) #define SQL_SSF_TRANSLATE __MSABI_LONG(0x00000010) #define SQL_SSF_TRIM_BOTH __MSABI_LONG(0x00000020) #define SQL_SSF_TRIM_LEADING __MSABI_LONG(0x00000040) #define SQL_SSF_TRIM_TRAILING __MSABI_LONG(0x00000080) #endif #define SQL_FN_NUM_ABS __MSABI_LONG(0x00000001) #define SQL_FN_NUM_ACOS __MSABI_LONG(0x00000002) #define SQL_FN_NUM_ASIN __MSABI_LONG(0x00000004) #define SQL_FN_NUM_ATAN __MSABI_LONG(0x00000008) #define SQL_FN_NUM_ATAN2 __MSABI_LONG(0x00000010) #define SQL_FN_NUM_CEILING __MSABI_LONG(0x00000020) #define SQL_FN_NUM_COS __MSABI_LONG(0x00000040) #define SQL_FN_NUM_COT __MSABI_LONG(0x00000080) #define SQL_FN_NUM_EXP __MSABI_LONG(0x00000100) #define SQL_FN_NUM_FLOOR __MSABI_LONG(0x00000200) #define SQL_FN_NUM_LOG __MSABI_LONG(0x00000400) #define SQL_FN_NUM_MOD __MSABI_LONG(0x00000800) #define SQL_FN_NUM_SIGN __MSABI_LONG(0x00001000) #define SQL_FN_NUM_SIN __MSABI_LONG(0x00002000) #define SQL_FN_NUM_SQRT __MSABI_LONG(0x00004000) #define SQL_FN_NUM_TAN __MSABI_LONG(0x00008000) #define SQL_FN_NUM_PI __MSABI_LONG(0x00010000) #define SQL_FN_NUM_RAND __MSABI_LONG(0x00020000) #define SQL_FN_NUM_DEGREES __MSABI_LONG(0x00040000) #define SQL_FN_NUM_LOG10 __MSABI_LONG(0x00080000) #define SQL_FN_NUM_POWER __MSABI_LONG(0x00100000) #define SQL_FN_NUM_RADIANS __MSABI_LONG(0x00200000) #define SQL_FN_NUM_ROUND __MSABI_LONG(0x00400000) #define SQL_FN_NUM_TRUNCATE __MSABI_LONG(0x00800000) #if (ODBCVER >= 0x0300) #define SQL_SNVF_BIT_LENGTH __MSABI_LONG(0x00000001) #define SQL_SNVF_CHAR_LENGTH __MSABI_LONG(0x00000002) #define SQL_SNVF_CHARACTER_LENGTH __MSABI_LONG(0x00000004) #define SQL_SNVF_EXTRACT __MSABI_LONG(0x00000008) #define SQL_SNVF_OCTET_LENGTH __MSABI_LONG(0x00000010) #define SQL_SNVF_POSITION __MSABI_LONG(0x00000020) #endif #define SQL_FN_TD_NOW __MSABI_LONG(0x00000001) #define SQL_FN_TD_CURDATE __MSABI_LONG(0x00000002) #define SQL_FN_TD_DAYOFMONTH __MSABI_LONG(0x00000004) #define SQL_FN_TD_DAYOFWEEK __MSABI_LONG(0x00000008) #define SQL_FN_TD_DAYOFYEAR __MSABI_LONG(0x00000010) #define SQL_FN_TD_MONTH __MSABI_LONG(0x00000020) #define SQL_FN_TD_QUARTER __MSABI_LONG(0x00000040) #define SQL_FN_TD_WEEK __MSABI_LONG(0x00000080) #define SQL_FN_TD_YEAR __MSABI_LONG(0x00000100) #define SQL_FN_TD_CURTIME __MSABI_LONG(0x00000200) #define SQL_FN_TD_HOUR __MSABI_LONG(0x00000400) #define SQL_FN_TD_MINUTE __MSABI_LONG(0x00000800) #define SQL_FN_TD_SECOND __MSABI_LONG(0x00001000) #define SQL_FN_TD_TIMESTAMPADD __MSABI_LONG(0x00002000) #define SQL_FN_TD_TIMESTAMPDIFF __MSABI_LONG(0x00004000) #define SQL_FN_TD_DAYNAME __MSABI_LONG(0x00008000) #define SQL_FN_TD_MONTHNAME __MSABI_LONG(0x00010000) #if (ODBCVER >= 0x0300) #define SQL_FN_TD_CURRENT_DATE __MSABI_LONG(0x00020000) #define SQL_FN_TD_CURRENT_TIME __MSABI_LONG(0x00040000) #define SQL_FN_TD_CURRENT_TIMESTAMP __MSABI_LONG(0x00080000) #define SQL_FN_TD_EXTRACT __MSABI_LONG(0x00100000) #endif #if (ODBCVER >= 0x0300) #define SQL_SDF_CURRENT_DATE __MSABI_LONG(0x00000001) #define SQL_SDF_CURRENT_TIME __MSABI_LONG(0x00000002) #define SQL_SDF_CURRENT_TIMESTAMP __MSABI_LONG(0x00000004) #endif #define SQL_FN_SYS_USERNAME __MSABI_LONG(0x00000001) #define SQL_FN_SYS_DBNAME __MSABI_LONG(0x00000002) #define SQL_FN_SYS_IFNULL __MSABI_LONG(0x00000004) #define SQL_FN_TSI_FRAC_SECOND __MSABI_LONG(0x00000001) #define SQL_FN_TSI_SECOND __MSABI_LONG(0x00000002) #define SQL_FN_TSI_MINUTE __MSABI_LONG(0x00000004) #define SQL_FN_TSI_HOUR __MSABI_LONG(0x00000008) #define SQL_FN_TSI_DAY __MSABI_LONG(0x00000010) #define SQL_FN_TSI_WEEK __MSABI_LONG(0x00000020) #define SQL_FN_TSI_MONTH __MSABI_LONG(0x00000040) #define SQL_FN_TSI_QUARTER __MSABI_LONG(0x00000080) #define SQL_FN_TSI_YEAR __MSABI_LONG(0x00000100) #if (ODBCVER >= 0x0300) #define SQL_CA1_NEXT __MSABI_LONG(0x00000001) #define SQL_CA1_ABSOLUTE __MSABI_LONG(0x00000002) #define SQL_CA1_RELATIVE __MSABI_LONG(0x00000004) #define SQL_CA1_BOOKMARK __MSABI_LONG(0x00000008) #define SQL_CA1_LOCK_NO_CHANGE __MSABI_LONG(0x00000040) #define SQL_CA1_LOCK_EXCLUSIVE __MSABI_LONG(0x00000080) #define SQL_CA1_LOCK_UNLOCK __MSABI_LONG(0x00000100) #define SQL_CA1_POS_POSITION __MSABI_LONG(0x00000200) #define SQL_CA1_POS_UPDATE __MSABI_LONG(0x00000400) #define SQL_CA1_POS_DELETE __MSABI_LONG(0x00000800) #define SQL_CA1_POS_REFRESH __MSABI_LONG(0x00001000) #define SQL_CA1_POSITIONED_UPDATE __MSABI_LONG(0x00002000) #define SQL_CA1_POSITIONED_DELETE __MSABI_LONG(0x00004000) #define SQL_CA1_SELECT_FOR_UPDATE __MSABI_LONG(0x00008000) #define SQL_CA1_BULK_ADD __MSABI_LONG(0x00010000) #define SQL_CA1_BULK_UPDATE_BY_BOOKMARK __MSABI_LONG(0x00020000) #define SQL_CA1_BULK_DELETE_BY_BOOKMARK __MSABI_LONG(0x00040000) #define SQL_CA1_BULK_FETCH_BY_BOOKMARK __MSABI_LONG(0x00080000) #endif #if (ODBCVER >= 0x0300) #define SQL_CA2_READ_ONLY_CONCURRENCY __MSABI_LONG(0x00000001) #define SQL_CA2_LOCK_CONCURRENCY __MSABI_LONG(0x00000002) #define SQL_CA2_OPT_ROWVER_CONCURRENCY __MSABI_LONG(0x00000004) #define SQL_CA2_OPT_VALUES_CONCURRENCY __MSABI_LONG(0x00000008) #define SQL_CA2_SENSITIVITY_ADDITIONS __MSABI_LONG(0x00000010) #define SQL_CA2_SENSITIVITY_DELETIONS __MSABI_LONG(0x00000020) #define SQL_CA2_SENSITIVITY_UPDATES __MSABI_LONG(0x00000040) #define SQL_CA2_MAX_ROWS_SELECT __MSABI_LONG(0x00000080) #define SQL_CA2_MAX_ROWS_INSERT __MSABI_LONG(0x00000100) #define SQL_CA2_MAX_ROWS_DELETE __MSABI_LONG(0x00000200) #define SQL_CA2_MAX_ROWS_UPDATE __MSABI_LONG(0x00000400) #define SQL_CA2_MAX_ROWS_CATALOG __MSABI_LONG(0x00000800) #define SQL_CA2_MAX_ROWS_AFFECTS_ALL (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) #define SQL_CA2_CRC_EXACT __MSABI_LONG(0x00001000) #define SQL_CA2_CRC_APPROXIMATE __MSABI_LONG(0x00002000) #define SQL_CA2_SIMULATE_NON_UNIQUE __MSABI_LONG(0x00004000) #define SQL_CA2_SIMULATE_TRY_UNIQUE __MSABI_LONG(0x00008000) #define SQL_CA2_SIMULATE_UNIQUE __MSABI_LONG(0x00010000) #endif #define SQL_OAC_NONE 0x0000 #define SQL_OAC_LEVEL1 0x0001 #define SQL_OAC_LEVEL2 0x0002 #define SQL_OSCC_NOT_COMPLIANT 0x0000 #define SQL_OSCC_COMPLIANT 0x0001 #define SQL_OSC_MINIMUM 0x0000 #define SQL_OSC_CORE 0x0001 #define SQL_OSC_EXTENDED 0x0002 #define SQL_CB_NULL 0x0000 #define SQL_CB_NON_NULL 0x0001 #define SQL_SO_FORWARD_ONLY __MSABI_LONG(0x00000001) #define SQL_SO_KEYSET_DRIVEN __MSABI_LONG(0x00000002) #define SQL_SO_DYNAMIC __MSABI_LONG(0x00000004) #define SQL_SO_MIXED __MSABI_LONG(0x00000008) #define SQL_SO_STATIC __MSABI_LONG(0x00000010) #define SQL_FD_FETCH_BOOKMARK __MSABI_LONG(0x00000080) #define SQL_CN_NONE 0x0000 #define SQL_CN_DIFFERENT 0x0001 #define SQL_CN_ANY 0x0002 #define SQL_NNC_NULL 0x0000 #define SQL_NNC_NON_NULL 0x0001 #define SQL_NC_START 0x0002 #define SQL_NC_END 0x0004 #define SQL_FILE_NOT_SUPPORTED 0x0000 #define SQL_FILE_TABLE 0x0001 #define SQL_FILE_QUALIFIER 0x0002 #define SQL_FILE_CATALOG SQL_FILE_QUALIFIER #define SQL_GD_BLOCK __MSABI_LONG(0x00000004) #define SQL_GD_BOUND __MSABI_LONG(0x00000008) #define SQL_PS_POSITIONED_DELETE __MSABI_LONG(0x00000001) #define SQL_PS_POSITIONED_UPDATE __MSABI_LONG(0x00000002) #define SQL_PS_SELECT_FOR_UPDATE __MSABI_LONG(0x00000004) #define SQL_GB_NOT_SUPPORTED 0x0000 #define SQL_GB_GROUP_BY_EQUALS_SELECT 0x0001 #define SQL_GB_GROUP_BY_CONTAINS_SELECT 0x0002 #define SQL_GB_NO_RELATION 0x0003 #if (ODBCVER >= 0x0300) #define SQL_GB_COLLATE 0x0004 #endif #define SQL_OU_DML_STATEMENTS __MSABI_LONG(0x00000001) #define SQL_OU_PROCEDURE_INVOCATION __MSABI_LONG(0x00000002) #define SQL_OU_TABLE_DEFINITION __MSABI_LONG(0x00000004) #define SQL_OU_INDEX_DEFINITION __MSABI_LONG(0x00000008) #define SQL_OU_PRIVILEGE_DEFINITION __MSABI_LONG(0x00000010) #if (ODBCVER >= 0x0300) #define SQL_SU_DML_STATEMENTS SQL_OU_DML_STATEMENTS #define SQL_SU_PROCEDURE_INVOCATION SQL_OU_PROCEDURE_INVOCATION #define SQL_SU_TABLE_DEFINITION SQL_OU_TABLE_DEFINITION #define SQL_SU_INDEX_DEFINITION SQL_OU_INDEX_DEFINITION #define SQL_SU_PRIVILEGE_DEFINITION SQL_OU_PRIVILEGE_DEFINITION #endif #define SQL_QU_DML_STATEMENTS __MSABI_LONG(0x00000001) #define SQL_QU_PROCEDURE_INVOCATION __MSABI_LONG(0x00000002) #define SQL_QU_TABLE_DEFINITION __MSABI_LONG(0x00000004) #define SQL_QU_INDEX_DEFINITION __MSABI_LONG(0x00000008) #define SQL_QU_PRIVILEGE_DEFINITION __MSABI_LONG(0x00000010) #if (ODBCVER >= 0x0300) #define SQL_CU_DML_STATEMENTS SQL_QU_DML_STATEMENTS #define SQL_CU_PROCEDURE_INVOCATION SQL_QU_PROCEDURE_INVOCATION #define SQL_CU_TABLE_DEFINITION SQL_QU_TABLE_DEFINITION #define SQL_CU_INDEX_DEFINITION SQL_QU_INDEX_DEFINITION #define SQL_CU_PRIVILEGE_DEFINITION SQL_QU_PRIVILEGE_DEFINITION #endif #define SQL_SQ_COMPARISON __MSABI_LONG(0x00000001) #define SQL_SQ_EXISTS __MSABI_LONG(0x00000002) #define SQL_SQ_IN __MSABI_LONG(0x00000004) #define SQL_SQ_QUANTIFIED __MSABI_LONG(0x00000008) #define SQL_SQ_CORRELATED_SUBQUERIES __MSABI_LONG(0x00000010) #define SQL_U_UNION __MSABI_LONG(0x00000001) #define SQL_U_UNION_ALL __MSABI_LONG(0x00000002) #define SQL_BP_CLOSE __MSABI_LONG(0x00000001) #define SQL_BP_DELETE __MSABI_LONG(0x00000002) #define SQL_BP_DROP __MSABI_LONG(0x00000004) #define SQL_BP_TRANSACTION __MSABI_LONG(0x00000008) #define SQL_BP_UPDATE __MSABI_LONG(0x00000010) #define SQL_BP_OTHER_HSTMT __MSABI_LONG(0x00000020) #define SQL_BP_SCROLL __MSABI_LONG(0x00000040) #define SQL_SS_ADDITIONS __MSABI_LONG(0x00000001) #define SQL_SS_DELETIONS __MSABI_LONG(0x00000002) #define SQL_SS_UPDATES __MSABI_LONG(0x00000004) #define SQL_CV_CREATE_VIEW __MSABI_LONG(0x00000001) #define SQL_CV_CHECK_OPTION __MSABI_LONG(0x00000002) #define SQL_CV_CASCADED __MSABI_LONG(0x00000004) #define SQL_CV_LOCAL __MSABI_LONG(0x00000008) #define SQL_LCK_NO_CHANGE __MSABI_LONG(0x00000001) #define SQL_LCK_EXCLUSIVE __MSABI_LONG(0x00000002) #define SQL_LCK_UNLOCK __MSABI_LONG(0x00000004) #define SQL_POS_POSITION __MSABI_LONG(0x00000001) #define SQL_POS_REFRESH __MSABI_LONG(0x00000002) #define SQL_POS_UPDATE __MSABI_LONG(0x00000004) #define SQL_POS_DELETE __MSABI_LONG(0x00000008) #define SQL_POS_ADD __MSABI_LONG(0x00000010) #define SQL_QL_START 0x0001 #define SQL_QL_END 0x0002 #if (ODBCVER >= 0x0300) #define SQL_AF_AVG __MSABI_LONG(0x00000001) #define SQL_AF_COUNT __MSABI_LONG(0x00000002) #define SQL_AF_MAX __MSABI_LONG(0x00000004) #define SQL_AF_MIN __MSABI_LONG(0x00000008) #define SQL_AF_SUM __MSABI_LONG(0x00000010) #define SQL_AF_DISTINCT __MSABI_LONG(0x00000020) #define SQL_AF_ALL __MSABI_LONG(0x00000040) #define SQL_SC_SQL92_ENTRY __MSABI_LONG(0x00000001) #define SQL_SC_FIPS127_2_TRANSITIONAL __MSABI_LONG(0x00000002) #define SQL_SC_SQL92_INTERMEDIATE __MSABI_LONG(0x00000004) #define SQL_SC_SQL92_FULL __MSABI_LONG(0x00000008) #define SQL_DL_SQL92_DATE __MSABI_LONG(0x00000001) #define SQL_DL_SQL92_TIME __MSABI_LONG(0x00000002) #define SQL_DL_SQL92_TIMESTAMP __MSABI_LONG(0x00000004) #define SQL_DL_SQL92_INTERVAL_YEAR __MSABI_LONG(0x00000008) #define SQL_DL_SQL92_INTERVAL_MONTH __MSABI_LONG(0x00000010) #define SQL_DL_SQL92_INTERVAL_DAY __MSABI_LONG(0x00000020) #define SQL_DL_SQL92_INTERVAL_HOUR __MSABI_LONG(0x00000040) #define SQL_DL_SQL92_INTERVAL_MINUTE __MSABI_LONG(0x00000080) #define SQL_DL_SQL92_INTERVAL_SECOND __MSABI_LONG(0x00000100) #define SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH __MSABI_LONG(0x00000200) #define SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR __MSABI_LONG(0x00000400) #define SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE __MSABI_LONG(0x00000800) #define SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND __MSABI_LONG(0x00001000) #define SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE __MSABI_LONG(0x00002000) #define SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND __MSABI_LONG(0x00004000) #define SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND __MSABI_LONG(0x00008000) #define SQL_CL_START SQL_QL_START #define SQL_CL_END SQL_QL_END #define SQL_BRC_PROCEDURES 0x0000001 #define SQL_BRC_EXPLICIT 0x0000002 #define SQL_BRC_ROLLED_UP 0x0000004 #define SQL_BS_SELECT_EXPLICIT __MSABI_LONG(0x00000001) #define SQL_BS_ROW_COUNT_EXPLICIT __MSABI_LONG(0x00000002) #define SQL_BS_SELECT_PROC __MSABI_LONG(0x00000004) #define SQL_BS_ROW_COUNT_PROC __MSABI_LONG(0x00000008) #define SQL_PARC_BATCH 1 #define SQL_PARC_NO_BATCH 2 #define SQL_PAS_BATCH 1 #define SQL_PAS_NO_BATCH 2 #define SQL_PAS_NO_SELECT 3 #define SQL_IK_NONE __MSABI_LONG(0x00000000) #define SQL_IK_ASC __MSABI_LONG(0x00000001) #define SQL_IK_DESC __MSABI_LONG(0x00000002) #define SQL_IK_ALL (SQL_IK_ASC | SQL_IK_DESC) #define SQL_ISV_ASSERTIONS __MSABI_LONG(0x00000001) #define SQL_ISV_CHARACTER_SETS __MSABI_LONG(0x00000002) #define SQL_ISV_CHECK_CONSTRAINTS __MSABI_LONG(0x00000004) #define SQL_ISV_COLLATIONS __MSABI_LONG(0x00000008) #define SQL_ISV_COLUMN_DOMAIN_USAGE __MSABI_LONG(0x00000010) #define SQL_ISV_COLUMN_PRIVILEGES __MSABI_LONG(0x00000020) #define SQL_ISV_COLUMNS __MSABI_LONG(0x00000040) #define SQL_ISV_CONSTRAINT_COLUMN_USAGE __MSABI_LONG(0x00000080) #define SQL_ISV_CONSTRAINT_TABLE_USAGE __MSABI_LONG(0x00000100) #define SQL_ISV_DOMAIN_CONSTRAINTS __MSABI_LONG(0x00000200) #define SQL_ISV_DOMAINS __MSABI_LONG(0x00000400) #define SQL_ISV_KEY_COLUMN_USAGE __MSABI_LONG(0x00000800) #define SQL_ISV_REFERENTIAL_CONSTRAINTS __MSABI_LONG(0x00001000) #define SQL_ISV_SCHEMATA __MSABI_LONG(0x00002000) #define SQL_ISV_SQL_LANGUAGES __MSABI_LONG(0x00004000) #define SQL_ISV_TABLE_CONSTRAINTS __MSABI_LONG(0x00008000) #define SQL_ISV_TABLE_PRIVILEGES __MSABI_LONG(0x00010000) #define SQL_ISV_TABLES __MSABI_LONG(0x00020000) #define SQL_ISV_TRANSLATIONS __MSABI_LONG(0x00040000) #define SQL_ISV_USAGE_PRIVILEGES __MSABI_LONG(0x00080000) #define SQL_ISV_VIEW_COLUMN_USAGE __MSABI_LONG(0x00100000) #define SQL_ISV_VIEW_TABLE_USAGE __MSABI_LONG(0x00200000) #define SQL_ISV_VIEWS __MSABI_LONG(0x00400000) #define SQL_AM_NONE 0 #define SQL_AM_CONNECTION 1 #define SQL_AM_STATEMENT 2 #define SQL_AD_CONSTRAINT_NAME_DEFINITION __MSABI_LONG(0x00000001) #define SQL_AD_ADD_DOMAIN_CONSTRAINT __MSABI_LONG(0x00000002) #define SQL_AD_DROP_DOMAIN_CONSTRAINT __MSABI_LONG(0x00000004) #define SQL_AD_ADD_DOMAIN_DEFAULT __MSABI_LONG(0x00000008) #define SQL_AD_DROP_DOMAIN_DEFAULT __MSABI_LONG(0x00000010) #define SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00000020) #define SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00000040) #define SQL_AD_ADD_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00000080) #define SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00000100) #define SQL_CS_CREATE_SCHEMA __MSABI_LONG(0x00000001) #define SQL_CS_AUTHORIZATION __MSABI_LONG(0x00000002) #define SQL_CS_DEFAULT_CHARACTER_SET __MSABI_LONG(0x00000004) #define SQL_CTR_CREATE_TRANSLATION __MSABI_LONG(0x00000001) #define SQL_CA_CREATE_ASSERTION __MSABI_LONG(0x00000001) #define SQL_CA_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00000010) #define SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00000020) #define SQL_CA_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00000040) #define SQL_CA_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00000080) #define SQL_CCS_CREATE_CHARACTER_SET __MSABI_LONG(0x00000001) #define SQL_CCS_COLLATE_CLAUSE __MSABI_LONG(0x00000002) #define SQL_CCS_LIMITED_COLLATION __MSABI_LONG(0x00000004) #define SQL_CCOL_CREATE_COLLATION __MSABI_LONG(0x00000001) #define SQL_CDO_CREATE_DOMAIN __MSABI_LONG(0x00000001) #define SQL_CDO_DEFAULT __MSABI_LONG(0x00000002) #define SQL_CDO_CONSTRAINT __MSABI_LONG(0x00000004) #define SQL_CDO_COLLATION __MSABI_LONG(0x00000008) #define SQL_CDO_CONSTRAINT_NAME_DEFINITION __MSABI_LONG(0x00000010) #define SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00000020) #define SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00000040) #define SQL_CDO_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00000080) #define SQL_CDO_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00000100) #define SQL_CT_CREATE_TABLE __MSABI_LONG(0x00000001) #define SQL_CT_COMMIT_PRESERVE __MSABI_LONG(0x00000002) #define SQL_CT_COMMIT_DELETE __MSABI_LONG(0x00000004) #define SQL_CT_GLOBAL_TEMPORARY __MSABI_LONG(0x00000008) #define SQL_CT_LOCAL_TEMPORARY __MSABI_LONG(0x00000010) #define SQL_CT_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00000020) #define SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00000040) #define SQL_CT_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00000080) #define SQL_CT_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00000100) #define SQL_CT_COLUMN_CONSTRAINT __MSABI_LONG(0x00000200) #define SQL_CT_COLUMN_DEFAULT __MSABI_LONG(0x00000400) #define SQL_CT_COLUMN_COLLATION __MSABI_LONG(0x00000800) #define SQL_CT_TABLE_CONSTRAINT __MSABI_LONG(0x00001000) #define SQL_CT_CONSTRAINT_NAME_DEFINITION __MSABI_LONG(0x00002000) #define SQL_DI_CREATE_INDEX __MSABI_LONG(0x00000001) #define SQL_DI_DROP_INDEX __MSABI_LONG(0x00000002) #define SQL_DC_DROP_COLLATION __MSABI_LONG(0x00000001) #define SQL_DD_DROP_DOMAIN __MSABI_LONG(0x00000001) #define SQL_DD_RESTRICT __MSABI_LONG(0x00000002) #define SQL_DD_CASCADE __MSABI_LONG(0x00000004) #define SQL_DS_DROP_SCHEMA __MSABI_LONG(0x00000001) #define SQL_DS_RESTRICT __MSABI_LONG(0x00000002) #define SQL_DS_CASCADE __MSABI_LONG(0x00000004) #define SQL_DCS_DROP_CHARACTER_SET __MSABI_LONG(0x00000001) #define SQL_DA_DROP_ASSERTION __MSABI_LONG(0x00000001) #define SQL_DT_DROP_TABLE __MSABI_LONG(0x00000001) #define SQL_DT_RESTRICT __MSABI_LONG(0x00000002) #define SQL_DT_CASCADE __MSABI_LONG(0x00000004) #define SQL_DTR_DROP_TRANSLATION __MSABI_LONG(0x00000001) #define SQL_DV_DROP_VIEW __MSABI_LONG(0x00000001) #define SQL_DV_RESTRICT __MSABI_LONG(0x00000002) #define SQL_DV_CASCADE __MSABI_LONG(0x00000004) #define SQL_IS_INSERT_LITERALS __MSABI_LONG(0x00000001) #define SQL_IS_INSERT_SEARCHED __MSABI_LONG(0x00000002) #define SQL_IS_SELECT_INTO __MSABI_LONG(0x00000004) #define SQL_OIC_CORE __MSABI_LONG(1U) #define SQL_OIC_LEVEL1 __MSABI_LONG(2U) #define SQL_OIC_LEVEL2 __MSABI_LONG(3U) #define SQL_SFKD_CASCADE __MSABI_LONG(0x00000001) #define SQL_SFKD_NO_ACTION __MSABI_LONG(0x00000002) #define SQL_SFKD_SET_DEFAULT __MSABI_LONG(0x00000004) #define SQL_SFKD_SET_NULL __MSABI_LONG(0x00000008) #define SQL_SFKU_CASCADE __MSABI_LONG(0x00000001) #define SQL_SFKU_NO_ACTION __MSABI_LONG(0x00000002) #define SQL_SFKU_SET_DEFAULT __MSABI_LONG(0x00000004) #define SQL_SFKU_SET_NULL __MSABI_LONG(0x00000008) #define SQL_SG_USAGE_ON_DOMAIN __MSABI_LONG(0x00000001) #define SQL_SG_USAGE_ON_CHARACTER_SET __MSABI_LONG(0x00000002) #define SQL_SG_USAGE_ON_COLLATION __MSABI_LONG(0x00000004) #define SQL_SG_USAGE_ON_TRANSLATION __MSABI_LONG(0x00000008) #define SQL_SG_WITH_GRANT_OPTION __MSABI_LONG(0x00000010) #define SQL_SG_DELETE_TABLE __MSABI_LONG(0x00000020) #define SQL_SG_INSERT_TABLE __MSABI_LONG(0x00000040) #define SQL_SG_INSERT_COLUMN __MSABI_LONG(0x00000080) #define SQL_SG_REFERENCES_TABLE __MSABI_LONG(0x00000100) #define SQL_SG_REFERENCES_COLUMN __MSABI_LONG(0x00000200) #define SQL_SG_SELECT_TABLE __MSABI_LONG(0x00000400) #define SQL_SG_UPDATE_TABLE __MSABI_LONG(0x00000800) #define SQL_SG_UPDATE_COLUMN __MSABI_LONG(0x00001000) #define SQL_SP_EXISTS __MSABI_LONG(0x00000001) #define SQL_SP_ISNOTNULL __MSABI_LONG(0x00000002) #define SQL_SP_ISNULL __MSABI_LONG(0x00000004) #define SQL_SP_MATCH_FULL __MSABI_LONG(0x00000008) #define SQL_SP_MATCH_PARTIAL __MSABI_LONG(0x00000010) #define SQL_SP_MATCH_UNIQUE_FULL __MSABI_LONG(0x00000020) #define SQL_SP_MATCH_UNIQUE_PARTIAL __MSABI_LONG(0x00000040) #define SQL_SP_OVERLAPS __MSABI_LONG(0x00000080) #define SQL_SP_UNIQUE __MSABI_LONG(0x00000100) #define SQL_SP_LIKE __MSABI_LONG(0x00000200) #define SQL_SP_IN __MSABI_LONG(0x00000400) #define SQL_SP_BETWEEN __MSABI_LONG(0x00000800) #define SQL_SP_COMPARISON __MSABI_LONG(0x00001000) #define SQL_SP_QUANTIFIED_COMPARISON __MSABI_LONG(0x00002000) #define SQL_SRJO_CORRESPONDING_CLAUSE __MSABI_LONG(0x00000001) #define SQL_SRJO_CROSS_JOIN __MSABI_LONG(0x00000002) #define SQL_SRJO_EXCEPT_JOIN __MSABI_LONG(0x00000004) #define SQL_SRJO_FULL_OUTER_JOIN __MSABI_LONG(0x00000008) #define SQL_SRJO_INNER_JOIN __MSABI_LONG(0x00000010) #define SQL_SRJO_INTERSECT_JOIN __MSABI_LONG(0x00000020) #define SQL_SRJO_LEFT_OUTER_JOIN __MSABI_LONG(0x00000040) #define SQL_SRJO_NATURAL_JOIN __MSABI_LONG(0x00000080) #define SQL_SRJO_RIGHT_OUTER_JOIN __MSABI_LONG(0x00000100) #define SQL_SRJO_UNION_JOIN __MSABI_LONG(0x00000200) #define SQL_SR_USAGE_ON_DOMAIN __MSABI_LONG(0x00000001) #define SQL_SR_USAGE_ON_CHARACTER_SET __MSABI_LONG(0x00000002) #define SQL_SR_USAGE_ON_COLLATION __MSABI_LONG(0x00000004) #define SQL_SR_USAGE_ON_TRANSLATION __MSABI_LONG(0x00000008) #define SQL_SR_GRANT_OPTION_FOR __MSABI_LONG(0x00000010) #define SQL_SR_CASCADE __MSABI_LONG(0x00000020) #define SQL_SR_RESTRICT __MSABI_LONG(0x00000040) #define SQL_SR_DELETE_TABLE __MSABI_LONG(0x00000080) #define SQL_SR_INSERT_TABLE __MSABI_LONG(0x00000100) #define SQL_SR_INSERT_COLUMN __MSABI_LONG(0x00000200) #define SQL_SR_REFERENCES_TABLE __MSABI_LONG(0x00000400) #define SQL_SR_REFERENCES_COLUMN __MSABI_LONG(0x00000800) #define SQL_SR_SELECT_TABLE __MSABI_LONG(0x00001000) #define SQL_SR_UPDATE_TABLE __MSABI_LONG(0x00002000) #define SQL_SR_UPDATE_COLUMN __MSABI_LONG(0x00004000) #define SQL_SRVC_VALUE_EXPRESSION __MSABI_LONG(0x00000001) #define SQL_SRVC_NULL __MSABI_LONG(0x00000002) #define SQL_SRVC_DEFAULT __MSABI_LONG(0x00000004) #define SQL_SRVC_ROW_SUBQUERY __MSABI_LONG(0x00000008) #define SQL_SVE_CASE __MSABI_LONG(0x00000001) #define SQL_SVE_CAST __MSABI_LONG(0x00000002) #define SQL_SVE_COALESCE __MSABI_LONG(0x00000004) #define SQL_SVE_NULLIF __MSABI_LONG(0x00000008) #define SQL_SCC_XOPEN_CLI_VERSION1 __MSABI_LONG(0x00000001) #define SQL_SCC_ISO92_CLI __MSABI_LONG(0x00000002) #define SQL_US_UNION SQL_U_UNION #define SQL_US_UNION_ALL SQL_U_UNION_ALL #endif #define SQL_DTC_ENLIST_EXPENSIVE __MSABI_LONG(0x00000001) #define SQL_DTC_UNENLIST_EXPENSIVE __MSABI_LONG(0x00000002) #if (ODBCVER >= 0x0300) #define SQL_FETCH_FIRST_USER 31 #define SQL_FETCH_FIRST_SYSTEM 32 #endif #define SQL_ENTIRE_ROWSET 0 #define SQL_POSITION 0 #define SQL_REFRESH 1 #define SQL_UPDATE 2 #define SQL_DELETE 3 #define SQL_ADD 4 #define SQL_SETPOS_MAX_OPTION_VALUE SQL_ADD #if (ODBCVER >= 0x0300) #define SQL_UPDATE_BY_BOOKMARK 5 #define SQL_DELETE_BY_BOOKMARK 6 #define SQL_FETCH_BY_BOOKMARK 7 #endif #define SQL_LOCK_NO_CHANGE 0 #define SQL_LOCK_EXCLUSIVE 1 #define SQL_LOCK_UNLOCK 2 #define SQL_SETPOS_MAX_LOCK_VALUE SQL_LOCK_UNLOCK #define SQL_POSITION_TO(hstmt,irow) SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE) #define SQL_LOCK_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_POSITION,fLock) #define SQL_REFRESH_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_REFRESH,fLock) #define SQL_UPDATE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE) #define SQL_DELETE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE) #define SQL_ADD_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE) #define SQL_BEST_ROWID 1 #define SQL_ROWVER 2 #define SQL_PC_NOT_PSEUDO 1 #define SQL_QUICK 0 #define SQL_ENSURE 1 #define SQL_TABLE_STAT 0 #if (ODBCVER >= 0x0300) #define SQL_ALL_CATALOGS "%" #define SQL_ALL_SCHEMAS "%" #define SQL_ALL_TABLE_TYPES "%" #endif /* ODBCVER >= 0x0300 */ #define SQL_DRIVER_NOPROMPT 0 #define SQL_DRIVER_COMPLETE 1 #define SQL_DRIVER_PROMPT 2 #define SQL_DRIVER_COMPLETE_REQUIRED 3 SQLRETURN WINAPI SQLDriverConnect( SQLHDBC hdbc, SQLHWND hwnd, SQLCHAR *szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR *szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT *pcbConnStrOut, SQLUSMALLINT fDriverCompletion); #define SQL_FETCH_BOOKMARK 8 #define SQL_ROW_SUCCESS 0 #define SQL_ROW_DELETED 1 #define SQL_ROW_UPDATED 2 #define SQL_ROW_NOROW 3 #define SQL_ROW_ADDED 4 #define SQL_ROW_ERROR 5 #if (ODBCVER >= 0x0300) #define SQL_ROW_SUCCESS_WITH_INFO 6 #define SQL_ROW_PROCEED 0 #define SQL_ROW_IGNORE 1 #endif #if (ODBCVER >= 0x0300) #define SQL_PARAM_SUCCESS 0 #define SQL_PARAM_SUCCESS_WITH_INFO 6 #define SQL_PARAM_ERROR 5 #define SQL_PARAM_UNUSED 7 #define SQL_PARAM_DIAG_UNAVAILABLE 1 #define SQL_PARAM_PROCEED 0 #define SQL_PARAM_IGNORE 1 #endif #define SQL_CASCADE 0 #define SQL_RESTRICT 1 #define SQL_SET_NULL 2 #if (ODBCVER >= 0x0250) #define SQL_NO_ACTION 3 #define SQL_SET_DEFAULT 4 #endif #if (ODBCVER >= 0x0300) #define SQL_INITIALLY_DEFERRED 5 #define SQL_INITIALLY_IMMEDIATE 6 #define SQL_NOT_DEFERRABLE 7 #endif #define SQL_PARAM_TYPE_UNKNOWN 0 #define SQL_PARAM_INPUT 1 #define SQL_PARAM_INPUT_OUTPUT 2 #define SQL_RESULT_COL 3 #define SQL_PARAM_OUTPUT 4 #define SQL_RETURN_VALUE 5 #define SQL_PT_UNKNOWN 0 #define SQL_PT_PROCEDURE 1 #define SQL_PT_FUNCTION 2 #define SQL_ODBC_KEYWORDS "ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS," SQLRETURN WINAPI SQLBrowseConnect( SQLHDBC hdbc, SQLCHAR *szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR *szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT *pcbConnStrOut); #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLBulkOperations( SQLHSTMT StatementHandle, SQLSMALLINT Operation); #endif SQLRETURN WINAPI SQLColAttributes( SQLHSTMT hstmt, SQLUSMALLINT icol, SQLUSMALLINT fDescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT *pcbDesc, SQLLEN *pfDesc); SQLRETURN WINAPI SQLColumnPrivileges( SQLHSTMT hstmt, SQLCHAR *szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR *szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR *szTableName, SQLSMALLINT cbTableName, SQLCHAR *szColumnName, SQLSMALLINT cbColumnName); SQLRETURN WINAPI SQLDescribeParam( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT *pfSqlType, SQLULEN *pcbParamDef, SQLSMALLINT *pibScale, SQLSMALLINT *pfNullable); SQLRETURN WINAPI SQLExtendedFetch( SQLHSTMT hstmt, SQLUSMALLINT fFetchType, SQLLEN irow, SQLULEN *pcrow, SQLUSMALLINT *rgfRowStatus); SQLRETURN WINAPI SQLForeignKeys( SQLHSTMT hstmt, SQLCHAR *szPkCatalogName, SQLSMALLINT cbPkCatalogName, SQLCHAR *szPkSchemaName, SQLSMALLINT cbPkSchemaName, SQLCHAR *szPkTableName, SQLSMALLINT cbPkTableName, SQLCHAR *szFkCatalogName, SQLSMALLINT cbFkCatalogName, SQLCHAR *szFkSchemaName, SQLSMALLINT cbFkSchemaName, SQLCHAR *szFkTableName, SQLSMALLINT cbFkTableName); SQLRETURN WINAPI SQLMoreResults( SQLHSTMT hstmt); SQLRETURN WINAPI SQLNativeSql( SQLHDBC hdbc, SQLCHAR *szSqlStrIn, SQLINTEGER cbSqlStrIn, SQLCHAR *szSqlStr, SQLINTEGER cbSqlStrMax, SQLINTEGER *pcbSqlStr); SQLRETURN WINAPI SQLNumParams( SQLHSTMT hstmt, SQLSMALLINT *pcpar); SQLRETURN WINAPI SQLParamOptions( SQLHSTMT hstmt, SQLULEN crow, SQLULEN *pirow); SQLRETURN WINAPI SQLPrimaryKeys( SQLHSTMT hstmt, SQLCHAR *szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR *szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR *szTableName, SQLSMALLINT cbTableName); SQLRETURN WINAPI SQLProcedureColumns( SQLHSTMT hstmt, SQLCHAR *szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR *szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR *szProcName, SQLSMALLINT cbProcName, SQLCHAR *szColumnName, SQLSMALLINT cbColumnName); SQLRETURN WINAPI SQLProcedures( SQLHSTMT hstmt, SQLCHAR *szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR *szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR *szProcName, SQLSMALLINT cbProcName); SQLRETURN WINAPI SQLSetPos( SQLHSTMT hstmt, SQLSETPOSIROW irow, SQLUSMALLINT fOption, SQLUSMALLINT fLock); SQLRETURN WINAPI SQLTablePrivileges( SQLHSTMT hstmt, SQLCHAR *szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR *szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR *szTableName, SQLSMALLINT cbTableName); SQLRETURN WINAPI SQLDrivers( SQLHENV henv, SQLUSMALLINT fDirection, SQLCHAR *szDriverDesc, SQLSMALLINT cbDriverDescMax, SQLSMALLINT *pcbDriverDesc, SQLCHAR *szDriverAttributes, SQLSMALLINT cbDrvrAttrMax, SQLSMALLINT *pcbDrvrAttr); SQLRETURN WINAPI SQLBindParameter( SQLHSTMT hstmt, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLULEN cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN *pcbValue); #ifdef ODBC_STD #define SQLAllocHandle SQLAllocHandleStd #define SQLAllocEnv(phenv) SQLAllocHandleStd(SQL_HANDLE_ENV, SQL_NULL_HANDLE, phenv) #define SQL_YEAR SQL_CODE_YEAR #define SQL_MONTH SQL_CODE_MONTH #define SQL_DAY SQL_CODE_DAY #define SQL_HOUR SQL_CODE_HOUR #define SQL_MINUTE SQL_CODE_MINUTE #define SQL_SECOND SQL_CODE_SECOND #define SQL_YEAR_TO_MONTH SQL_CODE_YEAR_TO_MONTH #define SQL_DAY_TO_HOUR SQL_CODE_DAY_TO_HOUR #define SQL_DAY_TO_MINUTE SQL_CODE_DAY_TO_MINUTE #define SQL_DAY_TO_SECOND SQL_CODE_DAY_TO_SECOND #define SQL_HOUR_TO_MINUTE SQL_CODE_HOUR_TO_MINUTE #define SQL_HOUR_TO_SECOND SQL_CODE_HOUR_TO_SECOND #define SQL_MINUTE_TO_SECOND SQL_CODE_MINUTE_TO_SECOND #endif #if (ODBCVER >= 0x0300) SQLRETURN WINAPI SQLAllocHandleStd( SQLSMALLINT fHandleType, SQLHANDLE hInput, SQLHANDLE *phOutput); #endif #define SQL_DATABASE_NAME 16 #define SQL_FD_FETCH_PREV SQL_FD_FETCH_PRIOR #define SQL_FETCH_PREV SQL_FETCH_PRIOR #define SQL_CONCUR_TIMESTAMP SQL_CONCUR_ROWVER #define SQL_SCCO_OPT_TIMESTAMP SQL_SCCO_OPT_ROWVER #define SQL_CC_DELETE SQL_CB_DELETE #define SQL_CR_DELETE SQL_CB_DELETE #define SQL_CC_CLOSE SQL_CB_CLOSE #define SQL_CR_CLOSE SQL_CB_CLOSE #define SQL_CC_PRESERVE SQL_CB_PRESERVE #define SQL_CR_PRESERVE SQL_CB_PRESERVE #define SQL_SCROLL_FORWARD_ONLY __MSABI_LONG(0) #define SQL_SCROLL_KEYSET_DRIVEN (__MSABI_LONG(-1)) #define SQL_SCROLL_DYNAMIC (__MSABI_LONG(-2)) #define SQL_SCROLL_STATIC (__MSABI_LONG(-3)) SQLRETURN WINAPI SQLSetScrollOptions( SQLHSTMT hstmt, SQLUSMALLINT fConcurrency, SQLLEN crowKeyset, SQLUSMALLINT crowRowset); #define TRACE_VERSION 1000 RETCODE TraceOpenLogFile(LPWSTR,LPWSTR,DWORD); RETCODE TraceCloseLogFile(void); VOID TraceReturn(RETCODE,RETCODE); DWORD TraceVersion(void); /*#define TRACE_ON __MSABI_LONG(0x00000001)*/ #define TRACE_VS_EVENT_ON __MSABI_LONG(0x00000002) RETCODE TraceVSControl(DWORD); #define ODBC_VS_FLAG_UNICODE_ARG __MSABI_LONG(0x00000001) #define ODBC_VS_FLAG_UNICODE_COR __MSABI_LONG(0x00000002) #define ODBC_VS_FLAG_RETCODE __MSABI_LONG(0x00000004) #define ODBC_VS_FLAG_STOP __MSABI_LONG(0x00000008) typedef struct tagODBC_VS_ARGS { const GUID *pguidEvent; DWORD dwFlags; union { WCHAR *wszArg; CHAR *szArg; } DUMMYUNIONNAME1; union { WCHAR *wszCorrelation; CHAR *szCorrelation; } DUMMYUNIONNAME2; RETCODE RetCode; } ODBC_VS_ARGS, *PODBC_VS_ARGS; VOID FireVSDebugEvent(PODBC_VS_ARGS); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/sqltypes.h ================================================ /* * Copyright (C) 1999 Xiang Li * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __SQLTYPES_H #define __SQLTYPES_H #ifndef ODBCVER #define ODBCVER 0x0351 #endif #ifdef __cplusplus extern "C" { #endif typedef unsigned char SQLCHAR; #ifdef WINE_UNICODE_NATIVE typedef wchar_t SQLWCHAR; #else typedef unsigned short SQLWCHAR; #endif #ifndef UNICODE typedef SQLCHAR SQLTCHAR; #else typedef SQLWCHAR SQLTCHAR; #endif #if (ODBCVER >= 0x0300) typedef unsigned char SQLDATE; typedef unsigned char SQLDECIMAL; typedef double SQLDOUBLE; typedef double SQLFLOAT; #endif typedef int SQLINTEGER; #if (ODBCVER >= 0x0300) typedef unsigned char SQLNUMERIC; #endif typedef void * SQLPOINTER; #if (ODBCVER >= 0x0300) typedef float SQLREAL; #endif typedef signed short int SQLSMALLINT; typedef unsigned short SQLUSMALLINT; #if (ODBCVER >= 0x0300) typedef unsigned char SQLTIME; typedef unsigned char SQLTIMESTAMP; typedef unsigned char SQLVARCHAR; #endif typedef SQLSMALLINT SQLRETURN; #if (ODBCVER >= 0x0300) typedef void *SQLHANDLE; typedef SQLHANDLE SQLHENV; typedef SQLHANDLE SQLHDBC; typedef SQLHANDLE SQLHSTMT; typedef SQLHANDLE SQLHDESC; #else typedef void *SQLHENV; typedef void *SQLHDBC; typedef void *SQLHSTMT; #endif typedef signed char SCHAR; typedef SCHAR SQLSCHAR; typedef int SDWORD; typedef signed short int SWORD; typedef unsigned int UDWORD; typedef unsigned short int UWORD; typedef UDWORD SQLUINTEGER; typedef signed long SLONG; typedef signed short SSHORT; typedef double SDOUBLE; typedef double LDOUBLE; typedef float SFLOAT; typedef void* PTR; typedef signed short RETCODE; typedef void* SQLHWND; #ifdef _WIN64 typedef INT64 SQLLEN; typedef UINT64 SQLULEN; typedef UINT64 SQLSETPOSIROW; #else #define SQLLEN SQLINTEGER #define SQLULEN SQLUINTEGER #define SQLSETPOSIROW SQLUSMALLINT #endif typedef SQLHANDLE HENV; typedef SQLHANDLE HDBC; typedef SQLHANDLE HSTMT; #ifndef __SQLDATE #define __SQLDATE typedef struct tagDATE_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; } DATE_STRUCT; #if (ODBCVER >= 0x0300) typedef DATE_STRUCT SQL_DATE_STRUCT; #endif typedef struct tagTIME_STRUCT { SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; } TIME_STRUCT; #if (ODBCVER >= 0x0300) typedef TIME_STRUCT SQL_TIME_STRUCT; #endif typedef struct tagTIMESTAMP_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; SQLUINTEGER fraction; } TIMESTAMP_STRUCT; #if (ODBCVER >= 0x0300) typedef TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT; #endif #if (ODBCVER >= 0x0300) typedef enum { SQL_IS_YEAR = 1, SQL_IS_MONTH = 2, SQL_IS_DAY = 3, SQL_IS_HOUR = 4, SQL_IS_MINUTE = 5, SQL_IS_SECOND = 6, SQL_IS_YEAR_TO_MONTH = 7, SQL_IS_DAY_TO_HOUR = 8, SQL_IS_DAY_TO_MINUTE = 9, SQL_IS_DAY_TO_SECOND = 10, SQL_IS_HOUR_TO_MINUTE = 11, SQL_IS_HOUR_TO_SECOND = 12, SQL_IS_MINUTE_TO_SECOND = 13 } SQLINTERVAL; #endif #if (ODBCVER >= 0x0300) typedef struct tagSQL_YEAR_MONTH { SQLUINTEGER year; SQLUINTEGER month; } SQL_YEAR_MONTH_STRUCT; typedef struct tagSQL_DAY_SECOND { SQLUINTEGER day; SQLUINTEGER hour; SQLUINTEGER minute; SQLUINTEGER second; SQLUINTEGER fraction; } SQL_DAY_SECOND_STRUCT; typedef struct tagSQL_INTERVAL_STRUCT { SQLINTERVAL interval_type; SQLSMALLINT interval_sign; union { SQL_YEAR_MONTH_STRUCT year_month; SQL_DAY_SECOND_STRUCT day_second; } intval; } SQL_INTERVAL_STRUCT; #endif #endif #if (ODBCVER >= 0x0300) #define ODBCINT64 __int64 #define UODBCINT64 unsigned __int64 #ifdef ODBCINT64 typedef ODBCINT64 SQLBIGINT; typedef unsigned ODBCINT64 SQLUBIGINT; #endif #endif #if (ODBCVER >= 0x0300) #define SQL_MAX_NUMERIC_LEN 16 typedef struct tagSQL_NUMERIC_STRUCT { SQLCHAR precision; SQLSCHAR scale; SQLCHAR sign; /* 1=pos 0=neg */ SQLCHAR val[SQL_MAX_NUMERIC_LEN]; } SQL_NUMERIC_STRUCT; #endif #if (ODBCVER >= 0x0350) #ifdef GUID_DEFINED typedef GUID SQLGUID; #else typedef struct tagSQLGUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[ 8 ]; } SQLGUID; #endif #endif typedef SQLULEN BOOKMARK; #define SQL_WCHAR (-8) #define SQL_C_WCHAR SQL_WCHAR #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/sqlucode.h ================================================ /* * MS SQL Unicode Definitions * * Copyright (C) 2017 Daniel Lehman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __SQLUCODE_H #define __SQLUCODE_H #include #ifdef __cplusplus extern "C" { #endif SQLRETURN WINAPI SQLConnectW(SQLHDBC ConnectionHandle, SQLWCHAR *ServerName, SQLSMALLINT NameLength1, SQLWCHAR *UserName, SQLSMALLINT NameLength2, SQLWCHAR *Authentication, SQLSMALLINT NameLength3); SQLRETURN WINAPI SQLDescribeColW(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLWCHAR *ColumnName, SQLSMALLINT BufferLength, SQLSMALLINT *NameLength, SQLSMALLINT *DataType, SQLULEN *ColumnSize, SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable); SQLRETURN WINAPI SQLExecDirectW(SQLHSTMT StatementHandle, SQLWCHAR *StatementText, SQLINTEGER TextLength); SQLRETURN WINAPI SQLGetDiagRecW(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLWCHAR *Sqlstate, SQLINTEGER *NativeError, SQLWCHAR *MessageText, SQLSMALLINT BufferLength, SQLSMALLINT *TextLength); SQLRETURN WINAPI SQLGetInfoW(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValue, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength); SQLRETURN WINAPI SQLPrepareW(SQLHSTMT StatementHandle, SQLWCHAR *StatementText, SQLINTEGER TextLength); SQLRETURN WINAPI SQLSetStmtAttrW(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER StringLength); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/srcrst.idl ================================================ /* * Copyright (C) 2013 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif [ object, uuid(0c733a1e-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ISourcesRowset : IUnknown { typedef DWORD DBSOURCETYPE; enum DBSOURCETYPEENUM { DBSOURCETYPE_DATASOURCE = 1, DBSOURCETYPE_ENUMERATOR = 2, }; enum DBSOURCETYPEENUM20 { DBSOURCETYPE_DATASOURCE_TDP = 1, DBSOURCETYPE_DATASOURCE_MDP = 3, }; enum DBSOURCETYPEENUM25 { DBSOURCETYPE_BINDER = 4, }; [local] HRESULT GetSourcesRowset([in] IUnknown * pUnkOuter, [in] REFIID riid, [in] ULONG cPropertySets, [in, out] DBPROPSET rgProperties[], [out] IUnknown **ppSourcesRowset); [call_as(GetSourcesRowset)] HRESULT RemoteGetSourcesRowset([in] IUnknown * pUnkOuter, [in] REFIID riid, [in] ULONG cPropertySets, [in] DBPROPSET * rgProperties, [out] IUnknown **ppSourcesRowset, [in] ULONG cTotalProps, [out] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem); } ================================================ FILE: wine/windows/srrestoreptapi.h ================================================ /* * System Restore definitions * * Copyright 2008 Paul Vriens * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SRRESTOREPTAPI_H #define __WINE_SRRESTOREPTAPI_H /* Event types */ #define BEGIN_NESTED_SYSTEM_CHANGE 102 #define END_NESTED_SYSTEM_CHANGE 103 /* Restore point types */ #define APPLICATION_INSTALL 0 #define MAX_DESC 64 #define MAX_DESC_W 256 #pragma pack(1) typedef struct _RESTOREPTINFOA { DWORD dwEventType; DWORD dwRestorePtType; INT64 llSequenceNumber; CHAR szDescription[MAX_DESC]; } RESTOREPOINTINFOA, *PRESTOREPOINTINFOA; typedef struct _RESTOREPTINFOW { DWORD dwEventType; DWORD dwRestorePtType; INT64 llSequenceNumber; WCHAR szDescription[MAX_DESC_W]; } RESTOREPOINTINFOW, *PRESTOREPOINTINFOW; typedef struct _RESTOREPTINFOEX { FILETIME ftCreation; DWORD dwEventType; DWORD dwRestorePtType; DWORD dwRPNum; WCHAR szDescription[MAX_DESC_W]; } RESTOREPOINTINFOEX, *PRESTOREPOINTINFOEX; typedef struct _SMGRSTATUS { DWORD nStatus; INT64 llSequenceNumber; } STATEMGRSTATUS, *PSTATEMGRSTATUS; #ifdef __cplusplus extern "C" { #endif BOOL WINAPI SRSetRestorePointA(RESTOREPOINTINFOA *, STATEMGRSTATUS *); BOOL WINAPI SRSetRestorePointW(RESTOREPOINTINFOW *, STATEMGRSTATUS *); #define SRSetRestorePoint WINELIB_NAME_AW(SRSetRestorePoint) DWORD WINAPI SRRemoveRestorePoint(DWORD); #ifdef __cplusplus } #endif #endif /* !defined(__WINE_SRRESTOREPTAPI_H) */ ================================================ FILE: wine/windows/sspi.h ================================================ /* * Copyright (C) 2004 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SSPI_H__ #define __WINE_SSPI_H__ /* FIXME: #include */ #ifdef __cplusplus extern "C" { #endif #define SEC_ENTRY __stdcall typedef WCHAR SEC_WCHAR; typedef CHAR SEC_CHAR; #ifndef __SECSTATUS_DEFINED__ #define __SECSTATUS_DEFINED__ typedef LONG SECURITY_STATUS; #endif #ifdef UNICODE typedef SEC_WCHAR * SECURITY_PSTR; typedef const SEC_WCHAR * SECURITY_PCSTR; #else typedef SEC_CHAR * SECURITY_PSTR; typedef const SEC_CHAR * SECURITY_PCSTR; #endif #ifndef __SECHANDLE_DEFINED__ #define __SECHANDLE_DEFINED__ typedef struct _SecHandle { ULONG_PTR dwLower; ULONG_PTR dwUpper; } SecHandle, *PSecHandle; #endif #define SecInvalidateHandle(x) do { \ ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \ ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \ } while (0) #define SecIsValidHandle(x) \ ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \ (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1))) typedef SecHandle CredHandle; typedef PSecHandle PCredHandle; #ifndef __WINE_CTXTHANDLE_DEFINED__ #define __WINE_CTXTHANDLE_DEFINED__ typedef SecHandle CtxtHandle; typedef PSecHandle PCtxtHandle; #endif typedef struct _SECURITY_INTEGER { ULONG LowPart; LONG HighPart; } SECURITY_INTEGER, *PSECURITY_INTEGER; typedef SECURITY_INTEGER TimeStamp, *PTimeStamp; #ifndef __UNICODE_STRING_DEFINED__ #define __UNICODE_STRING_DEFINED__ typedef struct _UNICODE_STRING { USHORT Length; /* bytes */ USHORT MaximumLength; /* bytes */ PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; #endif typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING; #define SSPIPFC_CREDPROV_DO_NOT_SAVE 0x00000001 #define SSPIPFC_NO_CHECKBOX 0x00000002 typedef void *PSEC_WINNT_AUTH_IDENTITY_OPAQUE; SECURITY_STATUS SEC_ENTRY SspiEncodeAuthIdentityAsStrings( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PCWSTR *, PCWSTR *, PCWSTR *); SECURITY_STATUS SEC_ENTRY SspiEncodeStringsAsAuthIdentity( PCWSTR, PCWSTR, PCWSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE *); SECURITY_STATUS SEC_ENTRY SspiPrepareForCredWrite( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PCWSTR, PULONG, PCWSTR*, PCWSTR*, PUCHAR*, PULONG); ULONG SEC_ENTRY SspiPromptForCredentialsA(PCSTR, void *, ULONG, PCSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PSEC_WINNT_AUTH_IDENTITY_OPAQUE *, int *, ULONG); ULONG SEC_ENTRY SspiPromptForCredentialsW(PCWSTR, void *, ULONG, PCWSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PSEC_WINNT_AUTH_IDENTITY_OPAQUE *, int *, ULONG); #define SspiPromptForCredentials WINELIB_NAME_AW(SspiPromptForCredentials) void SEC_ENTRY SspiFreeAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE); void SEC_ENTRY SspiLocalFree(void *); void SEC_ENTRY SspiZeroAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE); typedef struct _SecPkgInfoA { ULONG fCapabilities; USHORT wVersion; USHORT wRPCID; ULONG cbMaxToken; SEC_CHAR *Name; SEC_CHAR *Comment; } SecPkgInfoA, *PSecPkgInfoA; typedef struct _SecPkgInfoW { ULONG fCapabilities; USHORT wVersion; USHORT wRPCID; ULONG cbMaxToken; SEC_WCHAR *Name; SEC_WCHAR *Comment; } SecPkgInfoW, *PSecPkgInfoW; typedef struct _SECURITY_PACKAGE_OPTIONS { ULONG Size; ULONG Type; ULONG Flags; ULONG SignatureSize; void *Signature; } SECURITY_PACKAGE_OPTIONS, *PSECURITY_PACKAGE_OPTIONS; SECURITY_STATUS WINAPI AddSecurityPackageA(LPSTR,SECURITY_PACKAGE_OPTIONS*); SECURITY_STATUS WINAPI AddSecurityPackageW(LPWSTR,SECURITY_PACKAGE_OPTIONS*); #define AddSecurityPackage WINELIB_NAME_AW(AddSecurityPackage) #define SecPkgInfo WINELIB_NAME_AW(SecPkgInfo) #define PSecPkgInfo WINELIB_NAME_AW(PSecPkgInfo) /* fCapabilities field of SecPkgInfo */ #define SECPKG_FLAG_INTEGRITY 0x00000001 #define SECPKG_FLAG_PRIVACY 0x00000002 #define SECPKG_FLAG_TOKEN_ONLY 0x00000004 #define SECPKG_FLAG_DATAGRAM 0x00000008 #define SECPKG_FLAG_CONNECTION 0x00000010 #define SECPKG_FLAG_MULTI_REQUIRED 0x00000020 #define SECPKG_FLAG_CLIENT_ONLY 0x00000040 #define SECPKG_FLAG_EXTENDED_ERROR 0x00000080 #define SECPKG_FLAG_IMPERSONATION 0x00000100 #define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200 #define SECPKG_FLAG_STREAM 0x00000400 #define SECPKG_FLAG_NEGOTIABLE 0x00000800 #define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000 #define SECPKG_FLAG_LOGON 0x00002000 #define SECPKG_FLAG_ASCII_BUFFERS 0x00004000 #define SECPKG_FLAG_FRAGMENT 0x00008000 #define SECPKG_FLAG_MUTUAL_AUTH 0x00010000 #define SECPKG_FLAG_DELEGATION 0x00020000 #define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000 #define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000 #define SECPKG_FLAG_NEGO_EXTENDER 0x00100000 #define SECPKG_FLAG_NEGOTIABLE2 0x00200000 #define SECPKG_FLAG_APPCONTAINER_PASSTHROUGH 0x00400000 #define SECPKG_FLAG_APPCONTAINER_CHECKS 0x00800000 #define SECPKG_ID_NONE 0xffff typedef struct _SecBuffer { ULONG cbBuffer; ULONG BufferType; PVOID pvBuffer; } SecBuffer, *PSecBuffer; /* values for BufferType */ #define SECBUFFER_EMPTY 0 #define SECBUFFER_DATA 1 #define SECBUFFER_TOKEN 2 #define SECBUFFER_PKG_PARAMS 3 #define SECBUFFER_MISSING 4 #define SECBUFFER_EXTRA 5 #define SECBUFFER_STREAM_TRAILER 6 #define SECBUFFER_STREAM_HEADER 7 #define SECBUFFER_NEGOTIATION_INFO 8 #define SECBUFFER_PADDING 9 #define SECBUFFER_STREAM 10 #define SECBUFFER_MECHLIST 11 #define SECBUFFER_MECHLIST_SIGNATURE 12 #define SECBUFFER_TARGET 13 #define SECBUFFER_CHANNEL_BINDINGS 14 #define SECBUFFER_ATTRMASK 0xf0000000 #define SECBUFFER_READONLY 0x80000000 #define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000 #define SECBUFFER_RESERVED 0x60000000 typedef struct _SecBufferDesc { ULONG ulVersion; ULONG cBuffers; PSecBuffer pBuffers; } SecBufferDesc, *PSecBufferDesc; /* values for ulVersion */ #define SECBUFFER_VERSION 0 typedef void (SEC_ENTRY *SEC_GET_KEY_FN)(void *Arg, void *Principal, ULONG KeyVer, void **Key, SECURITY_STATUS *Status); SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesA(PULONG pcPackages, PSecPkgInfoA *ppPackageInfo); SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesW(PULONG pcPackages, PSecPkgInfoW *ppPackageInfo); #define EnumerateSecurityPackages WINELIB_NAME_AW(EnumerateSecurityPackages) typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_A)(PULONG, PSecPkgInfoA *); typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_W)(PULONG, PSecPkgInfoW *); #define ENUMERATE_SECURITY_PACKAGES_FN WINELIB_NAME_AW(ENUMERATE_SECURITY_PACKAGES_FN_) SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesA( PCredHandle phCredential, ULONG ulAttribute, void *pBuffer); SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesW( PCredHandle phCredential, ULONG ulAttribute, void *pBuffer); #define QueryCredentialsAttributes WINELIB_NAME_AW(QueryCredentialsAttributes) typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_A) (PCredHandle, ULONG, PVOID); typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_W) (PCredHandle, ULONG, PVOID); #define QUERY_CREDENTIALS_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CREDENTIALS_ATTRIBUTES_FN_) typedef struct _SEC_CHANNEL_BINDINGS { ULONG dwInitiatorAddrType; ULONG cbInitiatorLength; ULONG dwInitiatorOffset; ULONG dwAcceptorAddrType; ULONG cbAcceptorLength; ULONG dwAcceptorOffset; ULONG cbApplicationDataLength; ULONG dwApplicationDataOffset; } SEC_CHANNEL_BINDINGS, *PSEC_CHANNEL_BINDINGS; /* values for QueryCredentialsAttributes ulAttribute */ #define SECPKG_CRED_ATTR_NAMES 1 /* types for QueryCredentialsAttributes */ typedef struct _SecPkgCredentials_NamesA { SEC_CHAR *sUserName; } SecPkgCredentials_NamesA, *PSecPkgCredentials_NamesA; typedef struct _SecPkgCredentials_NamesW { SEC_WCHAR *sUserName; } SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW; #define SecPkgCredentials_Names WINELIB_NAME_AW(SecPkgCredentials_Names) SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA( SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialsUse, PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn, PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry); SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW( SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialsUse, PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn, PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry); #define AcquireCredentialsHandle WINELIB_NAME_AW(AcquireCredentialsHandle) /* flags for fCredentialsUse */ #define SECPKG_CRED_INBOUND 0x00000001 #define SECPKG_CRED_OUTBOUND 0x00000002 #define SECPKG_CRED_BOTH (SECPKG_CRED_INBOUND | SECPKG_CRED_OUTBOUND) #define SECPKG_CRED_DEFAULT 0x00000004 #define SECPKG_CRED_RESERVED 0xf0000000 typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_A)( SEC_CHAR *, SEC_CHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID, PCredHandle, PTimeStamp); typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_W)( SEC_WCHAR *, SEC_WCHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID, PCredHandle, PTimeStamp); #define ACQUIRE_CREDENTIALS_HANDLE_FN WINELIB_NAME_AW(ACQUIRE_CREDENTIALS_HANDLE_FN_) SECURITY_STATUS SEC_ENTRY FreeContextBuffer(PVOID pv); typedef SECURITY_STATUS (SEC_ENTRY *FREE_CONTEXT_BUFFER_FN)(PVOID); SECURITY_STATUS SEC_ENTRY FreeCredentialsHandle(PCredHandle phCredential); #define FreeCredentialHandle FreeCredentialsHandle typedef SECURITY_STATUS (SEC_ENTRY *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle); SECURITY_STATUS SEC_ENTRY InitializeSecurityContextA( PCredHandle phCredential, PCtxtHandle phContext, SEC_CHAR *pszTargetName, ULONG fContextReq, ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput, ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput, ULONG *pfContextAttr, PTimeStamp ptsExpiry); SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW( PCredHandle phCredential, PCtxtHandle phContext, SEC_WCHAR *pszTargetName, ULONG fContextReq, ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput, ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput, ULONG *pfContextAttr, PTimeStamp ptsExpiry); #define InitializeSecurityContext WINELIB_NAME_AW(InitializeSecurityContext) typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_A) (PCredHandle, PCtxtHandle, SEC_CHAR *, ULONG, ULONG, ULONG, PSecBufferDesc, ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp); typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_W) (PCredHandle, PCtxtHandle, SEC_WCHAR *, ULONG, ULONG, ULONG, PSecBufferDesc, ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp); #define INITIALIZE_SECURITY_CONTEXT_FN WINELIB_NAME_AW(INITIALIZE_SECURITY_CONTEXT_FN_) /* flags for InitializeSecurityContext fContextReq and pfContextAttr */ #define ISC_REQ_DELEGATE 0x00000001 #define ISC_REQ_MUTUAL_AUTH 0x00000002 #define ISC_REQ_REPLAY_DETECT 0x00000004 #define ISC_REQ_SEQUENCE_DETECT 0x00000008 #define ISC_REQ_CONFIDENTIALITY 0x00000010 #define ISC_REQ_USE_SESSION_KEY 0x00000020 #define ISC_REQ_PROMPT_FOR_CREDS 0x00000040 #define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080 #define ISC_REQ_ALLOCATE_MEMORY 0x00000100 #define ISC_REQ_USE_DCE_STYLE 0x00000200 #define ISC_REQ_DATAGRAM 0x00000400 #define ISC_REQ_CONNECTION 0x00000800 #define ISC_REQ_CALL_LEVEL 0x00001000 #define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000 #define ISC_REQ_EXTENDED_ERROR 0x00004000 #define ISC_REQ_STREAM 0x00008000 #define ISC_REQ_INTEGRITY 0x00010000 #define ISC_REQ_IDENTIFY 0x00020000 #define ISC_REQ_NULL_SESSION 0x00040000 #define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000 #define ISC_REQ_RESERVED1 0x00100000 #define ISC_REQ_FRAGMENT_TO_FIT 0x00200000 #define ISC_RET_DELEGATE 0x00000001 #define ISC_RET_MUTUAL_AUTH 0x00000002 #define ISC_RET_REPLAY_DETECT 0x00000004 #define ISC_RET_SEQUENCE_DETECT 0x00000008 #define ISC_RET_CONFIDENTIALITY 0x00000010 #define ISC_RET_USE_SESSION_KEY 0x00000020 #define ISC_RET_USED_COLLECTED_CREDS 0x00000040 #define ISC_RET_USED_SUPPLIED_CREDS 0x00000080 #define ISC_RET_ALLOCATED_MEMORY 0x00000100 #define ISC_RET_USED_DCE_STYLE 0x00000200 #define ISC_RET_DATAGRAM 0x00000400 #define ISC_RET_CONNECTION 0x00000800 #define ISC_RET_INTERMEDIATE_RETURN 0x00001000 #define ISC_RET_CALL_LEVEL 0x00002000 #define ISC_RET_EXTENDED_ERROR 0x00004000 #define ISC_RET_STREAM 0x00008000 #define ISC_RET_INTEGRITY 0x00010000 #define ISC_RET_IDENTIFY 0x00020000 #define ISC_RET_NULL_SESSION 0x00040000 #define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000 #define ISC_RET_RESERVED1 0x00100000 #define ISC_RET_FRAGMENT_ONLY 0x00200000 SECURITY_STATUS SEC_ENTRY AcceptSecurityContext( PCredHandle phCredential, PCtxtHandle phContext, PSecBufferDesc pInput, ULONG fContextReq, ULONG TargetDataRep, PCtxtHandle phNewContext, PSecBufferDesc pOutput, ULONG *pfContextAttr, PTimeStamp ptsExpiry); typedef SECURITY_STATUS (SEC_ENTRY *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle, PCtxtHandle, PSecBufferDesc, ULONG, ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp); /* flags for AcceptSecurityContext fContextReq and pfContextAttr */ #define ASC_REQ_DELEGATE 0x00000001 #define ASC_REQ_MUTUAL_AUTH 0x00000002 #define ASC_REQ_REPLAY_DETECT 0x00000004 #define ASC_REQ_SEQUENCE_DETECT 0x00000008 #define ASC_REQ_CONFIDENTIALITY 0x00000010 #define ASC_REQ_USE_SESSION_KEY 0x00000020 #define ASC_REQ_ALLOCATE_MEMORY 0x00000100 #define ASC_REQ_USE_DCE_STYLE 0x00000200 #define ASC_REQ_DATAGRAM 0x00000400 #define ASC_REQ_CONNECTION 0x00000800 #define ASC_REQ_CALL_LEVEL 0x00001000 #define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000 #define ASC_REQ_EXTENDED_ERROR 0x00008000 #define ASC_REQ_STREAM 0x00010000 #define ASC_REQ_INTEGRITY 0x00020000 #define ASC_REQ_LICENSING 0x00040000 #define ASC_REQ_IDENTIFY 0x00080000 #define ASC_REQ_ALLOW_NULL_SESSION 0x00100000 #define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000 #define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000 #define ASC_REQ_FRAGMENT_TO_FIT 0x00800000 #define ASC_REQ_FRAGMENT_NO_TOKEN 0x01000000 #define ASC_RET_DELEGATE 0x00000001 #define ASC_RET_MUTUAL_AUTH 0x00000002 #define ASC_RET_REPLAY_DETECT 0x00000004 #define ASC_RET_SEQUENCE_DETECT 0x00000008 #define ASC_RET_CONFIDENTIALITY 0x00000010 #define ASC_RET_USE_SESSION_KEY 0x00000020 #define ASC_RET_ALLOCATED_MEMORY 0x00000100 #define ASC_RET_USED_DCE_STYLE 0x00000200 #define ASC_RET_DATAGRAM 0x00000400 #define ASC_RET_CONNECTION 0x00000800 #define ASC_RET_CALL_LEVEL 0x00002000 #define ASC_RET_THIRD_LEG_FAILED 0x00004000 #define ASC_RET_EXTENDED_ERROR 0x00008000 #define ASC_RET_STREAM 0x00010000 #define ASC_RET_INTEGRITY 0x00020000 #define ASC_RET_LICENSING 0x00040000 #define ASC_RET_IDENTIFY 0x00080000 #define ASC_RET_NULL_SESSION 0x00100000 #define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000 #define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000 #define ASC_RET_FRAGMENT_ONLY 0x00800000 #define ASC_RET_NO_TOKEN 0x01000000 /* values for TargetDataRep */ #define SECURITY_NATIVE_DREP 0x00000010 #define SECURITY_NETWORK_DREP 0x00000000 SECURITY_STATUS SEC_ENTRY CompleteAuthToken(PCtxtHandle phContext, PSecBufferDesc pToken); typedef SECURITY_STATUS (SEC_ENTRY *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle, PSecBufferDesc); SECURITY_STATUS SEC_ENTRY DeleteSecurityContext(PCtxtHandle phContext); typedef SECURITY_STATUS (SEC_ENTRY *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle); SECURITY_STATUS SEC_ENTRY ApplyControlToken(PCtxtHandle phContext, PSecBufferDesc pInput); typedef SECURITY_STATUS (SEC_ENTRY *APPLY_CONTROL_TOKEN_FN)(PCtxtHandle, PSecBufferDesc); SECURITY_STATUS SEC_ENTRY QueryContextAttributesA(PCtxtHandle phContext, ULONG ulAttribute, void *pBuffer); SECURITY_STATUS SEC_ENTRY QueryContextAttributesW(PCtxtHandle phContext, ULONG ulAttribute, void *pBuffer); #define QueryContextAttributes WINELIB_NAME_AW(QueryContextAttributes) typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle, ULONG, void *); typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle, ULONG, void *); #define QUERY_CONTEXT_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CONTEXT_ATTRIBUTES_FN_) /* values for QueryContextAttributes/SetContextAttributes ulAttribute */ #define SECPKG_ATTR_SIZES 0 #define SECPKG_ATTR_NAMES 1 #define SECPKG_ATTR_LIFESPAN 2 #define SECPKG_ATTR_DCE_INFO 3 #define SECPKG_ATTR_STREAM_SIZES 4 #define SECPKG_ATTR_KEY_INFO 5 #define SECPKG_ATTR_AUTHORITY 6 #define SECPKG_ATTR_PROTO_INFO 7 #define SECPKG_ATTR_PASSWORD_EXPIRY 8 #define SECPKG_ATTR_SESSION_KEY 9 #define SECPKG_ATTR_PACKAGE_INFO 10 #define SECPKG_ATTR_USER_FLAGS 11 #define SECPKG_ATTR_NEGOTIATION_INFO 12 #define SECPKG_ATTR_NATIVE_NAMES 13 #define SECPKG_ATTR_FLAGS 14 #define SECPKG_ATTR_USE_VALIDATED 15 #define SECPKG_ATTR_CREDENTIAL_NAME 16 #define SECPKG_ATTR_TARGET_INFORMATION 17 #define SECPKG_ATTR_ACCESS_TOKEN 18 #define SECPKG_ATTR_TARGET 19 #define SECPKG_ATTR_AUTHENTICATION_ID 20 #define SECPKG_ATTR_LOGOFF_TIME 21 #define SECPKG_ATTR_NEGO_KEYS 22 #define SECPKG_ATTR_PROMPTING_NEEDED 24 #define SECPKG_ATTR_UNIQUE_BINDINGS 25 #define SECPKG_ATTR_ENDPOINT_BINDINGS 26 #define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27 #define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30 #define SECPKG_ATTR_NEGO_PKG_INFO 31 #define SECPKG_ATTR_NEGO_STATUS 32 #define SECPKG_ATTR_CONTEXT_DELETED 33 #define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM 0x2 /* types for QueryContextAttributes/SetContextAttributes */ typedef struct _SecPkgContext_Sizes { ULONG cbMaxToken; ULONG cbMaxSignature; ULONG cbBlockSize; ULONG cbSecurityTrailer; } SecPkgContext_Sizes, *PSecPkgContext_Sizes; typedef struct _SecPkgContext_StreamSizes { ULONG cbHeader; ULONG cbTrailer; ULONG cbMaximumMessage; ULONG cbBuffers; ULONG cbBlockSize; } SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes; typedef struct _SecPkgContext_NamesA { SEC_CHAR *sUserName; } SecPkgContext_NamesA, *PSecPkgContext_NamesA; typedef struct _SecPkgContext_NamesW { SEC_WCHAR *sUserName; } SecPkgContext_NamesW, *PSecPkgContext_NamesW; #define SecPkgContext_Names WINELIB_NAME_AW(SecPkgContext_Names) #define PSecPkgContext_Names WINELIB_NAME_AW(PSecPkgContext_Names) typedef struct _SecPkgContext_Lifespan { TimeStamp tsStart; TimeStamp tsExpiry; } SecPkgContext_Lifespan, *PSecPkgContext_Lifespan; typedef struct _SecPkgContext_DceInfo { ULONG AuthzSvc; PVOID pPac; } SecPkgContext_DceInfo, *PSecPkgContext_DceInfo; typedef struct _SecPkgContext_KeyInfoA { SEC_CHAR *sSignatureAlgorithmName; SEC_CHAR *sEncryptAlgorithmName; ULONG KeySize; ULONG SignatureAlgorithm; ULONG EncryptAlgorithm; } SecPkgContext_KeyInfoA, *PSecPkgContext_KeyInfoA; typedef struct _SecPkgContext_KeyInfoW { SEC_WCHAR *sSignatureAlgorithmName; SEC_WCHAR *sEncryptAlgorithmName; ULONG KeySize; ULONG SignatureAlgorithm; ULONG EncryptAlgorithm; } SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW; #define SecPkgContext_KeyInfo WINELIB_NAME_AW(SecPkgContext_KeyInfo) #define PSecPkgContext_KeyInfo WINELIB_NAME_AW(PSecPkgContext_KeyInfo) typedef struct _SecPkgContext_AuthorityA { SEC_CHAR *sAuthorityName; } SecPkgContext_AuthorityA, *PSecPkgContext_AuthorityA; typedef struct _SecPkgContext_AuthorityW { SEC_WCHAR *sAuthorityName; } SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW; #define SecPkgContext_Authority WINELIB_NAME_AW(SecPkgContext_Authority) #define PSecPkgContext_Authority WINELIB_NAME_AW(PSecPkgContext_Authority) typedef struct _SecPkgContext_ProtoInfoA { SEC_CHAR *sProtocolName; ULONG majorVersion; ULONG minorVersion; } SecPkgContext_ProtoInfoA, *PSecPkgContext_ProtoInfoA; typedef struct _SecPkgContext_ProtoInfoW { SEC_WCHAR *sProtocolName; ULONG majorVersion; ULONG minorVersion; } SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW; #define SecPkgContext_ProtoInfo WINELIB_NAME_AW(SecPkgContext_ProtoInfo) #define PSecPkgContext_ProtoInfo WINELIB_NAME_AW(PSecPkgContext_ProtoInfo) typedef struct _SecPkgContext_PasswordExpiry { TimeStamp tsPasswordExpires; } SecPkgContext_PasswordExpiry, *PSecPkgContext_PasswordExpiry; typedef struct _SecPkgContext_SessionKey { ULONG SessionKeyLength; unsigned char *SessionKey; } SecPkgContext_SessionKey, *PSecPkgContext_SessionKey; typedef struct _SecPkgContext_PackageInfoA { PSecPkgInfoA PackageInfo; } SecPkgContext_PackageInfoA, *PSecPkgContext_PackageInfoA; typedef struct _SecPkgContext_PackageInfoW { PSecPkgInfoW PackageInfo; } SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW; #define SecPkgContext_PackageInfo WINELIB_NAME_AW(SecPkgContext_PackageInfo) #define PSecPkgContext_PackageInfo WINELIB_NAME_AW(PSecPkgContext_PackageInfo) typedef struct _SecPkgContext_Flags { ULONG Flags; } SecPkgContext_Flags, *PSecPkgContext_Flags; typedef struct _SecPkgContext_UserFlags { ULONG UserFlags; } SecPkgContext_UserFlags, *PSecPkgContext_UserFlags; typedef struct _SecPkgContext_NegotiationInfoA { PSecPkgInfoA PackageInfo; ULONG NegotiationState; } SecPkgContext_NegotiationInfoA, *PSecPkgContext_NegotiationInfoA; typedef struct _SecPkgContext_NegotiationInfoW { PSecPkgInfoW PackageInfo; ULONG NegotiationState; } SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW; #define SecPkgContext_NegotiationInfo WINELIB_NAME_AW(SecPkgContext_NegotiationInfo) #define PSecPkgContext_NegotiationInfo WINELIB_NAME_AW(PSecPkgContext_NegotiationInfo) /* values for NegotiationState */ #define SECPKG_NEGOTIATION_COMPLETE 0 #define SECPKG_NEGOTIATION_OPTIMISTIC 1 #define SECPKG_NEGOTIATION_IN_PROGRESS 2 #define SECPKG_NEGOTIATION_DIRECT 3 #define SECPKG_NEGOTIATION_TRY_MULTICRED 4 typedef struct _SecPkgContext_NativeNamesA { SEC_CHAR *sClientName; SEC_CHAR *sServerName; } SecPkgContext_NativeNamesA, *PSecPkgContext_NativeNamesA; typedef struct _SecPkgContext_NativeNamesW { SEC_WCHAR *sClientName; SEC_WCHAR *sServerName; } SecPkgContext_NativeNamesW, *PSecPkgContext_NativeNamesW; #define SecPkgContext_NativeNames WINELIB_NAME_AW(SecPkgContext_NativeNames) #define PSecPkgContext_NativeNames WINELIB_NAME_AW(PSecPkgContext_NativeNames) typedef struct _SecPkgContext_CredentialNameA { ULONG CredentialType; SEC_CHAR *sCredentialName; } SecPkgContext_CredentialNameA, *PSecPkgContext_CredentialNameA; typedef struct _SecPkgContext_CredentialNameW { ULONG CredentialType; SEC_WCHAR *sCredentialName; } SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW; #define SecPkgContext_CredentialName WINELIB_NAME_AW(SecPkgContext_CredentialName) #define PSecPkgContext_CredentialName WINELIB_NAME_AW(PSecPkgContext_CredentialName) typedef struct _SecPkgContext_AccessToken { void *AccessToken; } SecPkgContext_AccessToken, *PSecPkgContext_AccessToken; typedef struct _SecPkgContext_TargetInformation { ULONG MarshalledTargetInfoLength; unsigned char *MarshalledTargetInfo; } SecPkgContext_TargetInformation, *PSecPkgContext_TargetInformation; typedef struct _SecPkgContext_AuthzID { ULONG AuthzIDLength; char *AuthzID; } SecPkgContext_AuthzID, *PSecPkgContext_AuthzID; typedef struct _SecPkgContext_Target { ULONG TargetLength; char *Target; } SecPkgContext_Target, *PSecPkgContext_Target; typedef struct _SecPkgContext_Bindings { ULONG BindingsLength; SEC_CHANNEL_BINDINGS *Bindings; } SecPkgContext_Bindings, *PSecPkgContext_Bindings; SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(PCtxtHandle phContext); typedef SECURITY_STATUS (SEC_ENTRY *IMPERSONATE_SECURITY_CONTEXT_FN) (PCtxtHandle); SECURITY_STATUS SEC_ENTRY RevertSecurityContext(PCtxtHandle phContext); typedef SECURITY_STATUS (SEC_ENTRY *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle); SECURITY_STATUS SEC_ENTRY MakeSignature(PCtxtHandle phContext, ULONG fQOP, PSecBufferDesc pMessage, ULONG MessageSeqNo); typedef SECURITY_STATUS (SEC_ENTRY *MAKE_SIGNATURE_FN)(PCtxtHandle, ULONG, PSecBufferDesc, ULONG); SECURITY_STATUS SEC_ENTRY VerifySignature(PCtxtHandle phContext, PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP); typedef SECURITY_STATUS (SEC_ENTRY *VERIFY_SIGNATURE_FN)(PCtxtHandle, PSecBufferDesc, ULONG, PULONG); SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoA( SEC_CHAR *pszPackageName, PSecPkgInfoA *ppPackageInfo); SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW( SEC_WCHAR *pszPackageName, PSecPkgInfoW *ppPackageInfo); #define QuerySecurityPackageInfo WINELIB_NAME_AW(QuerySecurityPackageInfo) typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_A) (SEC_CHAR *, PSecPkgInfoA *); typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_W) (SEC_WCHAR *, PSecPkgInfoW *); #define QUERY_SECURITY_PACKAGE_INFO_FN WINELIB_NAME_AW(QUERY_SECURITY_PACKAGE_INFO_FN_) SECURITY_STATUS SEC_ENTRY ExportSecurityContext(PCtxtHandle phContext, ULONG fFlags, PSecBuffer pPackedContext, void **pToken); typedef SECURITY_STATUS (SEC_ENTRY *EXPORT_SECURITY_CONTEXT_FN)(PCtxtHandle, ULONG, PSecBuffer, void **); /* values for ExportSecurityContext fFlags */ #define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001 #define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002 SECURITY_STATUS SEC_ENTRY ImportSecurityContextA(SEC_CHAR *pszPackage, PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext); SECURITY_STATUS SEC_ENTRY ImportSecurityContextW(SEC_WCHAR *pszPackage, PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext); #define ImportSecurityContext WINELIB_NAME_AW(ImportSecurityContext) typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR *, PSecBuffer, void *, PCtxtHandle); typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_W)(SEC_WCHAR *, PSecBuffer, void *, PCtxtHandle); #define IMPORT_SECURITY_CONTEXT_FN WINELIB_NAME_AW(IMPORT_SECURITY_CONTEXT_FN_) SECURITY_STATUS SEC_ENTRY AddCredentialsA(PCredHandle hCredentials, SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialUse, void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument, PTimeStamp ptsExpiry); SECURITY_STATUS SEC_ENTRY AddCredentialsW(PCredHandle hCredentials, SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialUse, void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument, PTimeStamp ptsExpiry); #define AddCredentials WINELIB_NAME_AW(AddCredentials) typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_A)(PCredHandle, SEC_CHAR *, SEC_CHAR *, ULONG, void *, SEC_GET_KEY_FN, void *, PTimeStamp); typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_W)(PCredHandle, SEC_WCHAR *, SEC_WCHAR *, ULONG, void *, SEC_GET_KEY_FN, void *, PTimeStamp); SECURITY_STATUS SEC_ENTRY QuerySecurityContextToken(PCtxtHandle phContext, HANDLE *phToken); typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_CONTEXT_TOKEN_FN) (PCtxtHandle, HANDLE *); SECURITY_STATUS SEC_ENTRY EncryptMessage(PCtxtHandle phContext, ULONG fQOP, PSecBufferDesc pMessage, ULONG MessageSeqNo); SECURITY_STATUS SEC_ENTRY DecryptMessage(PCtxtHandle phContext, PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP); /* values for EncryptMessage fQOP */ #define SECQOP_WRAP_NO_ENCRYPT 0x80000001 typedef SECURITY_STATUS (SEC_ENTRY *ENCRYPT_MESSAGE_FN)(PCtxtHandle, ULONG, PSecBufferDesc, ULONG); typedef SECURITY_STATUS (SEC_ENTRY *DECRYPT_MESSAGE_FN)(PCtxtHandle, PSecBufferDesc, ULONG, PULONG); SECURITY_STATUS SEC_ENTRY SetContextAttributesA(PCtxtHandle phContext, ULONG ulAttribute, void *pBuffer, ULONG cbBuffer); SECURITY_STATUS SEC_ENTRY SetContextAttributesW(PCtxtHandle phContext, ULONG ulAttribute, void *pBuffer, ULONG cbBuffer); #define SetContextAttributes WINELIB_NAME_AW(SetContextAttributes) typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle, ULONG, void *, ULONG); typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle, ULONG, void *, ULONG); #define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA" #define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW" #define SECURITY_ENTRYPOINT_ANSI WINELIB_NAME_AW(SECURITY_ENTRYPOINT_ANSI) typedef struct _SECURITY_FUNCTION_TABLE_A { ULONG dwVersion; ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA; QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA; ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA; FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle; void *Reserved2; INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA; ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext; COMPLETE_AUTH_TOKEN_FN CompleteAuthToken; DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext; APPLY_CONTROL_TOKEN_FN ApplyControlToken; QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA; IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext; REVERT_SECURITY_CONTEXT_FN RevertSecurityContext; MAKE_SIGNATURE_FN MakeSignature; VERIFY_SIGNATURE_FN VerifySignature; FREE_CONTEXT_BUFFER_FN FreeContextBuffer; QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA; void *Reserved3; void *Reserved4; EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext; IMPORT_SECURITY_CONTEXT_FN_A ImportSecurityContextA; ADD_CREDENTIALS_FN_A AddCredentialsA; void *Reserved8; QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken; ENCRYPT_MESSAGE_FN EncryptMessage; DECRYPT_MESSAGE_FN DecryptMessage; SET_CONTEXT_ATTRIBUTES_FN_A SetContextAttributesA; } SecurityFunctionTableA, *PSecurityFunctionTableA; typedef struct _SECURITY_FUNCTION_TABLE_W { ULONG dwVersion; ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW; QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW; ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW; FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle; void *Reserved2; INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW; ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext; COMPLETE_AUTH_TOKEN_FN CompleteAuthToken; DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext; APPLY_CONTROL_TOKEN_FN ApplyControlToken; QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW; IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext; REVERT_SECURITY_CONTEXT_FN RevertSecurityContext; MAKE_SIGNATURE_FN MakeSignature; VERIFY_SIGNATURE_FN VerifySignature; FREE_CONTEXT_BUFFER_FN FreeContextBuffer; QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW; void *Reserved3; void *Reserved4; EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext; IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW; ADD_CREDENTIALS_FN_W AddCredentialsW; void *Reserved8; QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken; ENCRYPT_MESSAGE_FN EncryptMessage; DECRYPT_MESSAGE_FN DecryptMessage; SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW; } SecurityFunctionTableW, *PSecurityFunctionTableW; #define SecurityFunctionTable WINELIB_NAME_AW(SecurityFunctionTable) #define PSecurityFunctionTable WINELIB_NAME_AW(PSecurityFunctionTable) #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2 PSecurityFunctionTableA SEC_ENTRY InitSecurityInterfaceA(void); PSecurityFunctionTableW SEC_ENTRY InitSecurityInterfaceW(void); #define InitSecurityInterface WINELIB_NAME_AW(InitSecurityInterface) typedef PSecurityFunctionTableA (SEC_ENTRY *INIT_SECURITY_INTERFACE_A)(void); typedef PSecurityFunctionTableW (SEC_ENTRY *INIT_SECURITY_INTERFACE_W)(void); #define INIT_SECURITY_INTERFACE WINELIB_NAME_AW(INIT_SECURITY_INTERFACE_) #ifdef __cplusplus } #endif #endif /* ndef __WINE_SSPI_H__ */ ================================================ FILE: wine/windows/stamp-h ================================================ timestamp ================================================ FILE: wine/windows/stamp-h.in ================================================ timestamp ================================================ FILE: wine/windows/stdole2.idl ================================================ /* * Copyright (C) 2003 Robert Shearman * 2005 Huw Davies * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #if 0 #pragma makedep install #pragma makedep typelib #endif #include [ uuid(00020430-0000-0000-C000-000000000046), version(2.0), helpstring("OLE Automation") ] library stdole { /* These typedefs need to have the same size as their real counterparts. */ typedef short VARIANT_BOOL; typedef void *BSTR; typedef double CURRENCY; typedef unsigned long HRESULT; typedef struct { short word1, word2, word3, word4; void *ptr1, *ptr2; } VARIANT; typedef unsigned long SCODE; typedef struct GUID { unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[ 8 ]; } GUID; typedef struct DISPPARAMS { VARIANT *rgvarg; long *rgdispidNamedArgs; unsigned int cArgs; unsigned int cNamedArgs; } DISPPARAMS; typedef struct EXCEPINFO { unsigned short wCode; unsigned short wReserved; BSTR bstrSource; BSTR bstrDescription; BSTR bstrHelpFile; unsigned long dwHelpContext; void *pvReserved; void *pfnDeferredFillIn; SCODE scode; } EXCEPINFO; [ odl, uuid(00000000-0000-0000-C000-000000000046), hidden ] interface IUnknown { [restricted] HRESULT QueryInterface( [in] GUID *riid, [out] void **ppvObj); [restricted] unsigned long AddRef(); [restricted] unsigned long Release(); } [ odl, uuid(00020400-0000-0000-C000-000000000046), restricted ] interface IDispatch : IUnknown { [restricted] HRESULT GetTypeInfoCount( [out] unsigned int *pctinfo); [restricted] HRESULT GetTypeInfo( [in] unsigned int itinfo, [in] unsigned long lcid, [out] void **pptinfo); [restricted] HRESULT GetIDsOfNames( [in] GUID *riid, [in] char **rgszNames, [in] unsigned int cNames, [in] unsigned long lcid, [out] long *rgdispid); [restricted] HRESULT Invoke( [in] long dispidMember, [in] GUID *riid, [in] unsigned long lcid, [in] unsigned short wFlags, [in] DISPPARAMS *pdispparams, [out] VARIANT *pvarResult, [out] EXCEPINFO *pexcepinfo, [out] unsigned int *puArgErr); } [ odl, uuid(00020404-0000-0000-C000-000000000046), hidden ] interface IEnumVARIANT : IUnknown { HRESULT Next( [in] unsigned long celt, [in] VARIANT *rgvar, [out] unsigned long *pceltFetched); HRESULT Skip( [in] unsigned long celt); HRESULT Reset(); HRESULT Clone( [out] IEnumVARIANT **ppenum); } typedef [uuid(66504301-BE0F-101A-8BBB-00AA00300CAB), public] unsigned long OLE_COLOR; typedef [uuid(66504302-BE0F-101A-8BBB-00AA00300CAB), public] long OLE_XPOS_PIXELS; typedef [uuid(66504303-BE0F-101A-8BBB-00AA00300CAB), public] long OLE_YPOS_PIXELS; typedef [uuid(66504304-BE0F-101A-8BBB-00AA00300CAB), public] long OLE_XSIZE_PIXELS; typedef [uuid(66504305-BE0F-101A-8BBB-00AA00300CAB), public] long OLE_YSIZE_PIXELS; typedef [uuid(66504306-BE0F-101A-8BBB-00AA00300CAB), public] long OLE_XPOS_HIMETRIC; typedef [uuid(66504307-BE0F-101A-8BBB-00AA00300CAB), public] long OLE_YPOS_HIMETRIC; typedef [uuid(66504308-BE0F-101A-8BBB-00AA00300CAB), public] long OLE_XSIZE_HIMETRIC; typedef [uuid(66504309-BE0F-101A-8BBB-00AA00300CAB), public] long OLE_YSIZE_HIMETRIC; typedef [uuid(BF030640-9069-101B-AE2D-08002B2EC713), public] float OLE_XPOS_CONTAINER; typedef [uuid(BF030641-9069-101B-AE2D-08002B2EC713), public] float OLE_YPOS_CONTAINER; typedef [uuid(BF030642-9069-101B-AE2D-08002B2EC713), public] float OLE_XSIZE_CONTAINER; typedef [uuid(BF030643-9069-101B-AE2D-08002B2EC713), public] float OLE_YSIZE_CONTAINER; typedef [uuid(66504313-BE0F-101A-8BBB-00AA00300CAB), public] int OLE_HANDLE; typedef [uuid(6650430B-BE0F-101A-8BBB-00AA00300CAB), public] VARIANT_BOOL OLE_OPTEXCLUSIVE; typedef [uuid(BF030644-9069-101B-AE2D-08002B2EC713), public] VARIANT_BOOL OLE_CANCELBOOL; typedef [uuid(BF030645-9069-101B-AE2D-08002B2EC713), public] VARIANT_BOOL OLE_ENABLEDEFAULTBOOL; [ uuid(6650430A-BE0F-101A-8BBB-00AA00300CAB) ] enum OLE_TRISTATE { Unchecked = 0, Checked = 1, Gray = 2 }; typedef [uuid(6650430D-BE0F-101A-8BBB-00AA00300CAB), public] BSTR FONTNAME; typedef [uuid(6650430E-BE0F-101A-8BBB-00AA00300CAB), public] CURRENCY FONTSIZE; typedef [uuid(6650430F-BE0F-101A-8BBB-00AA00300CAB), public] VARIANT_BOOL FONTBOLD; typedef [uuid(66504310-BE0F-101A-8BBB-00AA00300CAB), public] VARIANT_BOOL FONTITALIC; typedef [uuid(66504311-BE0F-101A-8BBB-00AA00300CAB), public] VARIANT_BOOL FONTUNDERSCORE; typedef [uuid(66504312-BE0F-101A-8BBB-00AA00300CAB), public] VARIANT_BOOL FONTSTRIKETHROUGH; [ odl, uuid(BEF6E002-A874-101A-8BBA-00AA00300CAB), helpstring("Font Object"), hidden ] interface IFont : IUnknown { [propget] HRESULT Name([out, retval] BSTR *pname); [propput] HRESULT Name([in] BSTR pname); [propget] HRESULT Size([out, retval] CURRENCY *psize); [propput] HRESULT Size([in] CURRENCY psize); [propget] HRESULT Bold([out, retval] VARIANT_BOOL *pbold); [propput] HRESULT Bold([in] VARIANT_BOOL pbold); [propget] HRESULT Italic([out, retval] VARIANT_BOOL *pitalic); [propput] HRESULT Italic([in] VARIANT_BOOL pitalic); [propget] HRESULT Underline([out, retval] VARIANT_BOOL *punderline); [propput] HRESULT Underline([in] VARIANT_BOOL punderline); [propget] HRESULT Strikethrough([out, retval] VARIANT_BOOL *pstrikethrough); [propput] HRESULT Strikethrough([in] VARIANT_BOOL pstrikethrough); [propget] HRESULT Weight([out, retval] short *pweight); [propput] HRESULT Weight([in] short pweight); [propget] HRESULT Charset([out, retval] short *pcharset); [propput] HRESULT Charset([in] short pcharset); [propget] HRESULT hFont([out, retval] OLE_HANDLE *phfont); HRESULT Clone([out] IFont **ppfont); HRESULT IsEqual([in] IFont *pfontOther); HRESULT SetRatio([in] long cyLogical, [in] long cyHimetric); HRESULT AddRefHfont([in] OLE_HANDLE hFont); HRESULT ReleaseHfont([in] OLE_HANDLE hFont); } [ odl, uuid(BEF6E003-A874-101A-8BBA-00AA00300CAB) ] dispinterface Font { properties: [id(DISPID_FONT_NAME)] BSTR Name; [id(DISPID_FONT_SIZE)] CURRENCY Size; [id(DISPID_FONT_BOLD)] VARIANT_BOOL Bold; [id(DISPID_FONT_ITALIC)] VARIANT_BOOL Italic; [id(DISPID_FONT_UNDER)] VARIANT_BOOL Underline; [id(DISPID_FONT_STRIKE)] VARIANT_BOOL Strikethrough; [id(DISPID_FONT_WEIGHT)] short Weight; [id(DISPID_FONT_CHARSET)] short Charset; methods: } typedef [public] Font IFontDisp; [ uuid(0BE35203-8F91-11CE-9DE3-00AA004BB851) ] coclass StdFont { [default] dispinterface Font; /* FIXME: We can't reference dispinterface FontEvents here because we need it to appear at the end of the typelib. */ /* [default, source] dispinterface FontEvents;*/ interface IFont; } [ odl, uuid(7BF80980-BF32-101A-8BBB-00AA00300CAB), helpstring("Picture Object"), hidden ] interface IPicture : IUnknown { [propget] HRESULT Handle([out, retval] OLE_HANDLE *phandle); [propget] HRESULT hPal([out, retval] OLE_HANDLE *phpal); [propget] HRESULT Type([out, retval] short *ptype); [propget] HRESULT Width([out, retval] OLE_XSIZE_HIMETRIC *pwidth); [propget] HRESULT Height([out, retval] OLE_YSIZE_HIMETRIC *pheight); HRESULT Render([in] int hdc, [in] long x, [in] long y, [in] long cx, [in] long cy, [in] OLE_XPOS_HIMETRIC xSrc, [in] OLE_YPOS_HIMETRIC ySrc, [in] OLE_XSIZE_HIMETRIC cxSrc, [in] OLE_YSIZE_HIMETRIC cySrc, [in] void *prcWBounds); [propput] HRESULT hPal([in] OLE_HANDLE phpal); [propget] HRESULT CurDC([out, retval] int *phdcOut); HRESULT SelectPicture([in] int hdcIn, [out] int *phdcOut, [out] OLE_HANDLE *phbmpOut); [propget] HRESULT KeepOriginalFormat([out, retval] VARIANT_BOOL *pfkeep); [propput] HRESULT KeepOriginalFormat([in] VARIANT_BOOL pfkeep); HRESULT PictureChanged(); HRESULT SaveAsFile([in] void *pstm, [in] VARIANT_BOOL fSaveMemCopy, [out] long *pcbSize); [propget] HRESULT Attributes([out, retval] long *pdwAttr); HRESULT SetHdc([in] OLE_HANDLE hdc); } [ uuid(7BF80981-BF32-101A-8BBB-00AA00300CAB) ] dispinterface Picture { properties: [id(DISPID_PICT_HANDLE), readonly] OLE_HANDLE Handle; [id(DISPID_PICT_HPAL)] OLE_HANDLE hPal; [id(DISPID_PICT_TYPE), readonly] short Type; [id(DISPID_PICT_WIDTH), readonly] OLE_XSIZE_HIMETRIC Width; [id(DISPID_PICT_HEIGHT), readonly] OLE_YSIZE_HIMETRIC Height; methods: [id(DISPID_PICT_RENDER)] void Render(int hdc, long x, long y, long cx, long cy, OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc, OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc, void *prcWBounds); } typedef [public] Picture IPictureDisp; [ uuid(0BE35204-8F91-11CE-9DE3-00AA004BB851) ] coclass StdPicture { [default] dispinterface Picture; interface IPicture; } [ uuid(E6C8FA08-BD9F-11D0-985E-00C04FC29993) ] enum LoadPictureConstants { Default = 0, Monochrome = 1, VgaColor = 2, Color = 4 }; [ dllname("oleaut32.dll"), uuid(91209AC0-60F6-11CF-9C5D-00AA00C1489E), helpstring("Functions for Standard OLE Objects"), helpcontext(0x2775) ] module StdFunctions{ [ entry("OleLoadPictureFileEx"), helpstring("Loads a picture from a file"), helpcontext(0x2775) ] HRESULT LoadPicture([in, optional] VARIANT filename, [in, defaultvalue(0)] int widthDesired, [in, defaultvalue(0)] int heightDesired, [in, defaultvalue(Default)] enum LoadPictureConstants flags, [out, retval] IPictureDisp **retval); [ entry("OleSavePictureFile"), helpstring("Saves a picture to a file"), helpcontext(0x2775) ] HRESULT SavePicture([in] IPictureDisp *Picture, [in] BSTR filename); } [ uuid(4EF6100A-AF88-11D0-9846-00C04FC29993), helpstring("Event Interface for the Font Object"), hidden ] dispinterface FontEvents { properties: methods: [id(DISPID_FONT_CHANGED)] void FontChanged([in] BSTR PropertyName); } typedef [public] FontEvents IFontEventsDisp; } ================================================ FILE: wine/windows/stgprop.h ================================================ /* * Copyright 2017 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_STGPROP_H__ #define __WINE_STGPROP_H__ #define PSGUID_STORAGE {0xb725f130, 0x47ef, 0x101a, {0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac}} #define PID_STG_DIRECTORY ((PROPID)0x02) #define PID_STG_CLASSID ((PROPID)0x03) #define PID_STG_STORAGETYPE ((PROPID)0x04) #define PID_STG_VOLUME_ID ((PROPID)0x05) #define PID_STG_PARENT_WORKID ((PROPID)0x06) #define PID_STG_SECONDARYSTORE ((PROPID)0x07) #define PID_STG_FILEINDEX ((PROPID)0x08) #define PID_STG_LASTCHANGEUSN ((PROPID)0x09) #define PID_STG_NAME ((PROPID)0x0a) #define PID_STG_PATH ((PROPID)0x0b) #define PID_STG_SIZE ((PROPID)0x0c) #define PID_STG_ATTRIBUTES ((PROPID)0x0d) #define PID_STG_WRITETIME ((PROPID)0x0e) #define PID_STG_CREATETIME ((PROPID)0x0f) #define PID_STG_ACCESSTIME ((PROPID)0x10) #define PID_STG_CHANGETIME ((PROPID)0x11) #define PID_STG_CONTENTS ((PROPID)0x13) #define PID_STG_SHORTNAME ((PROPID)0x14) #define PID_STG_MAX PID_STG_SHORTNAME #endif ================================================ FILE: wine/windows/sti.h ================================================ /* * Copyright (C) 2009 Damjan Jovanovic * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_STI_H #define __WINE_STI_H #include /* #include */ /* #include */ #include #ifdef __cplusplus extern "C" { #endif DEFINE_GUID(CLSID_Sti, 0xB323F8E0, 0x2E68, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C); DEFINE_GUID(IID_IStillImageW, 0x641BD880, 0x2DC8, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C); DEFINE_GUID(IID_IStillImageA, 0xA7B1F740, 0x1D7F, 0x11D1, 0xAC, 0xA9, 0x00, 0xA0, 0x24, 0x38, 0xAD, 0x48); #define STI_VERSION_REAL 0x00000002 #define STI_VERSION_FLAG_UNICODE 0x01000000 #ifndef WINE_NO_UNICODE_MACROS # ifdef UNICODE # define STI_VERSION (STI_VERSION_REAL | STI_VERSION_FLAG_UNICODE) # else # define STI_VERSION (STI_VERSION_REAL) # endif #endif typedef struct IStillImageA *PSTIA; typedef struct IStillImageW *PSTIW; DECL_WINELIB_TYPE_AW(PSTI) typedef struct IStillImageA *LPSTILLIMAGEA; typedef struct IStillImageW *LPSTILLIMAGEW; DECL_WINELIB_TYPE_AW(LPSTILLIMAGE) typedef struct IStiDeviceA *PSTIDEVICEA; typedef struct IStiDeviceW *PSTIDEVICEW; DECL_WINELIB_TYPE_AW(PSTIDEVICE) HRESULT WINAPI StiCreateInstanceA(HINSTANCE hinst, DWORD dwVer, PSTIA *ppSti, LPUNKNOWN pUnkOuter); HRESULT WINAPI StiCreateInstanceW(HINSTANCE hinst, DWORD dwVer, PSTIW *ppSti, LPUNKNOWN pUnkOuter); #define StiCreateInstance WINELIB_NAME_AW(StiCreateInstance) typedef DWORD STI_DEVICE_TYPE; typedef enum _STI_DEVICE_MJ_TYPE { StiDeviceTypeDefault = 0, StiDeviceTypeScanner = 1, StiDeviceTypeDigitalCamera = 2, StiDeviceTypeStreamingVideo = 3 } STI_DEVICE_MJ_TYPE; #define GET_STIDEVICE_TYPE(dwDevType) HIWORD(dwDevType) #define GET_STIDEVICE_SUBTYPE(dwDevType) LOWORD(dwDevType) typedef struct _STI_DEV_CAPS { DWORD dwGeneric; } STI_DEV_CAPS, *PSTI_DEV_CAPS; #define STI_MAX_INTERNAL_NAME_LENGTH 128 typedef struct _STI_DEVICE_INFORMATIONW { DWORD dwSize; STI_DEVICE_TYPE DeviceType; WCHAR szDeviceInternalName[STI_MAX_INTERNAL_NAME_LENGTH]; STI_DEV_CAPS DeviceCapabilities; DWORD dwHardwareConfiguration; LPWSTR pszVendorDescription; LPWSTR pszDeviceDescription; LPWSTR pszPortName; LPWSTR pszPropProvider; LPWSTR pszLocalName; } STI_DEVICE_INFORMATIONW, *PSTI_DEVICE_INFORMATIONW; typedef STI_DEVICE_INFORMATIONW STI_DEVICE_INFORMATION; typedef PSTI_DEVICE_INFORMATIONW PSTI_DEVICE_INFORMATION; #define MAX_NOTIFICATION_DATA 64 typedef struct _STINOTIFY { DWORD dwSize; GUID guidNotificationCode; BYTE abNotificationData[MAX_NOTIFICATION_DATA]; } STINOTIFY,*LPSTINOTIFY; #define INTERFACE IStillImageW DECLARE_INTERFACE_(IStillImageW, IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IStillImageW methods ***/ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE; STDMETHOD(GetDeviceList)(THIS_ DWORD dwType, DWORD dwFlags, DWORD *pdwItemsReturned, LPVOID *ppBuffer) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPWSTR pwszDeviceName, LPVOID *ppBuffer) PURE; STDMETHOD(CreateDevice)(THIS_ LPWSTR pwszDeviceName, DWORD dwMode, PSTIDEVICEW *pDevice, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(GetDeviceValue)(THIS_ LPWSTR pwszDeviceName, LPWSTR pValueName, LPDWORD pType, LPBYTE pData, LPDWORD cbData) PURE; STDMETHOD(SetDeviceValue)(THIS_ LPWSTR pwszDeviceName, LPWSTR pValueName, DWORD type, LPBYTE pData, DWORD cbData) PURE; STDMETHOD(GetSTILaunchInformation)(THIS_ LPWSTR pwszDeviceName, DWORD *pdwEventCode, LPWSTR pwszEventName) PURE; STDMETHOD(RegisterLaunchApplication)(THIS_ LPWSTR pwszAppName, LPWSTR pwszCommandLine) PURE; STDMETHOD(UnregisterLaunchApplication)(THIS_ LPWSTR pwszAppName) PURE; STDMETHOD(EnableHwNotifications)(THIS_ LPCWSTR pwszDeviceName, BOOL bNewState) PURE; STDMETHOD(GetHwNotificationState)(THIS_ LPCWSTR pwszDeviceName, BOOL *pbCurrentState) PURE; STDMETHOD(RefreshDeviceBus)(THIS_ LPCWSTR pwszDeviceName) PURE; STDMETHOD(LaunchApplicationForDevice)(THIS_ LPWSTR pwszDeviceName, LPWSTR pwszAppName, LPSTINOTIFY pStiNotify); STDMETHOD(SetupDeviceParameters)(THIS_ PSTI_DEVICE_INFORMATIONW pDevInfo); STDMETHOD(WriteToErrorLog)(THIS_ DWORD dwMessageType, LPCWSTR pszMessage) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IStillImage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IStillImage_AddRef(p) (p)->lpVtbl->AddRef(p) #define IStillImage_Release(p) (p)->lpVtbl->Release(p) /*** IStillImage methods ***/ #define IStillImage_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IStillImage_GetDeviceList(p,a,b,c,d) (p)->lpVtbl->GetDeviceList(p,a,b,c,d) #define IStillImage_GetDeviceInfo(p,a,b) (p)->lpVtbl->GetDeviceInfo(p,a,b) #define IStillImage_CreateDevice(p,a,b,c,d) (p)->lpVtbl->CreateDevice(p,a,b,c,d) #define IStillImage_GetDeviceValue(p,a,b,c,d,e) (p)->lpVtbl->GetDeviceValue(p,a,b,c,d,e) #define IStillImage_SetDeviceValue(p,a,b,c,d,e) (p)->lpVtbl->SetDeviceValue(p,a,b,c,d,e) #define IStillImage_GetSTILaunchInformation(p,a,b,c) (p)->lpVtbl->GetSTILaunchInformation(p,a,b,c) #define IStillImage_RegisterLaunchApplication(p,a,b) (p)->lpVtbl->RegisterLaunchApplication(p,a,b) #define IStillImage_UnregisterLaunchApplication(p,a) (p)->lpVtbl->UnregisterLaunchApplication(p,a) #define IStillImage_EnableHwNotifications(p,a,b) (p)->lpVtbl->EnableHwNotifications(p,a,b) #define IStillImage_GetHwNotificationState(p,a,b) (p)->lpVtbl->GetHwNotificationState(p,a,b) #define IStillImage_RefreshDeviceBus(p,a) (p)->lpVtbl->RefreshDeviceBus(p,a) #define IStillImage_LaunchApplicationForDevice(p,a,b,c) (p)->lpVtbl->LaunchApplicationForDevice(p,a,b,c) #define IStillImage_SetupDeviceParameters(p,a) (p)->lpVtbl->SetupDeviceParameters(p,a) #define IStillImage_WriteToErrorLog(p,a,b) (p)->lpVtbl->WriteToErrorLog(p,a,b) #else /*** IUnknown methods ***/ #define IStillImage_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IStillImage_AddRef(p) (p)->AddRef() #define IStillImage_Release(p) (p)->Release() /*** IStillImage methods ***/ #define IStillImage_Initialize(p,a,b) (p)->Initialize(a,b) #define IStillImage_GetDeviceList(p,a,b,c,d) (p)->GetDeviceList(a,b,c,d) #define IStillImage_GetDeviceInfo(p,a,b) (p)->GetDeviceInfo(a,b) #define IStillImage_CreateDevice(p,a,b,c,d) (p)->CreateDevice(a,b,c,d) #define IStillImage_GetDeviceValue(p,a,b,c,d,e) (p)->GetDeviceValue(a,b,c,d,e) #define IStillImage_SetDeviceValue(p,a,b,c,d,e) (p)->SetDeviceValue(a,b,c,d,e) #define IStillImage_GetSTILaunchInformation(p,a,b,c) (p)->GetSTILaunchInformation(a,b,c) #define IStillImage_RegisterLaunchApplication(p,a,b) (p)->RegisterLaunchApplication(a,b) #define IStillImage_UnregisterLaunchApplication(p,a) (p)->UnregisterLaunchApplication(a) #define IStillImage_EnableHwNotifications(p,a,b) (p)->EnableHwNotifications(a,b) #define IStillImage_GetHwNotificationState(p,a,b) (p)->GetHwNotificationState(a,b) #define IStillImage_RefreshDeviceBus(p,a) (p)->RefreshDeviceBus(a) #define IStillImage_LaunchApplicationForDevice(p,a,b,c) (p)->LaunchApplicationForDevice(a,b,c) #define IStillImage_SetupDeviceParameters(p,a) (p)->SetupDeviceParameters(a) #define IStillImage_WriteToErrorLog(p,a,b) (p)->WriteToErrorLog(a,b) #endif #ifdef __cplusplus }; #endif #include #endif /* __WINE_STI_H */ ================================================ FILE: wine/windows/storage.h ================================================ /* * Copyright (C) 1999 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_STORAGE_H #define __WINE_STORAGE_H /* "storage.h" is obsolete, you should include "objbase.h" instead */ #include #endif ================================================ FILE: wine/windows/strmif.idl ================================================ /* * Copyright (C) 2002 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "objidl.idl"; #include #include #include #include /* TODO: #include */ #include ================================================ FILE: wine/windows/strsafe.h ================================================ /* * Copyright 2010 Thomas Mullaly * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_STRSAFE_H #define __WINE_STRSAFE_H #include #include #include /* Windows version includes this header. */ /* #include */ #define STRSAFE_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007A) #define STRSAFE_E_INVALID_PARAM ((HRESULT)0x80070075) #define STRSAFE_E_END_OF_FILE ((HRESULT)0x80070026) #endif ================================================ FILE: wine/windows/structuredquerycondition.idl ================================================ /* * structured query condition * * Copyright 2009 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ import "oaidl.idl"; import "ocidl.idl"; import "objidl.idl"; import "propidl.idl"; typedef [v1_enum] enum tagCONDITION_TYPE { CT_AND_CONDITION, CT_OR_CONDITION, CT_NOT_CONDITION, CT_LEAF_CONDITION } CONDITION_TYPE; typedef [v1_enum] enum tagCONDITION_OPERATION { COP_IMPLICIT, COP_EQUAL, COP_NOTEQUAL, COP_LESSTHAN, COP_GREATERTHAN, COP_LESSTHANOREQUAL, COP_GREATERTHANOREQUAL, COP_VALUE_STARTSWITH, COP_VALUE_ENDSWITH, COP_VALUE_CONTAINS, COP_VALUE_NOTCONTAINS, COP_DOSWILDCARDS, COP_WORD_EQUAL, COP_WORD_STARTSWITH, COP_APPLICATION_SPECIFIC } CONDITION_OPERATION; ================================================ FILE: wine/windows/svrapi.h ================================================ /* * Copyright 2006 Konstantin Petrov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef SVRAPI_INCLUDED #define SVRAPI_INCLUDED #include #include #include typedef struct _share_info_1 { char shi1_netname[LM20_NNLEN+1]; char shi1_pad1; unsigned short shi1_type; char* shi1_remark; } share_info_1; typedef struct _share_info_50 { char shi50_netname[LM20_NNLEN+1]; unsigned char shi50_type; unsigned short shi50_flags; char* shi50_remark; char* shi50_path; char shi50_rw_password[SHPWLEN+1]; char shi50_ro_password[SHPWLEN+1]; } share_info_50; #include #endif /* SVRAPI_INCLUDED */ ================================================ FILE: wine/windows/t2embapi.h ================================================ /* * Copyright (c) 2009 Andrew Nguyen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_T2EMBAPI_H #define __WINE_T2EMBAPI_H #ifdef __cplusplus extern "C" { #endif #define CHARSET_UNICODE 1 #define CHARSET_DEFAULT 1 #define CHARSET_SYMBOL 2 #define CHARSET_GLYPHIDX 3 #define LICENSE_INSTALLABLE 0x0000 #define LICENSE_DEFAULT 0x0000 #define LICENSE_NOEMBEDDING 0x0002 #define LICENSE_PREVIEWPRINT 0x0004 #define LICENSE_EDITABLE 0x0008 #define TTLOAD_PRIVATE 0x0001 /* Possible return values. */ #define E_NONE __MSABI_LONG(0x0000) #define E_API_NOTIMPL __MSABI_LONG(0x0001) #define E_HDCINVALID __MSABI_LONG(0x0006) #define E_NOFREEMEMORY __MSABI_LONG(0x0007) #define E_NOTATRUETYPEFONT __MSABI_LONG(0x000a) #define E_ERRORACCESSINGFONTDATA __MSABI_LONG(0x000c) #define E_ERRORACCESSINGFACENAME __MSABI_LONG(0x000d) #define E_FACENAMEINVALID __MSABI_LONG(0x0113) #define E_PERMISSIONSINVALID __MSABI_LONG(0x0117) #define E_PBENABLEDINVALID __MSABI_LONG(0x0118) typedef ULONG (WINAPIV * READEMBEDPROC)(void*,void*,ULONG); typedef ULONG (WINAPIV * WRITEEMBEDPROC)(void*,void*,ULONG); typedef struct { unsigned short usStructSize; unsigned short usRefStrSize; unsigned short *pusRefStr; } TTLOADINFO; typedef struct { unsigned short usStructSize; unsigned short usRootStrSize; unsigned short *pusRootStr; } TTEMBEDINFO; LONG WINAPI TTLoadEmbeddedFont(HANDLE*,ULONG,ULONG*,ULONG,ULONG*,READEMBEDPROC, LPVOID,LPWSTR,LPSTR,TTLOADINFO*); LONG WINAPI TTDeleteEmbeddedFont(HANDLE,ULONG,ULONG*); /* embedding privileges */ #define EMBED_PREVIEWPRINT 1 #define EMBED_EDITABLE 2 #define EMBED_INSTALLABLE 3 #define EMBED_NOEMBEDDING 4 LONG WINAPI TTGetEmbeddingType(HDC, ULONG*); LONG WINAPI TTIsEmbeddingEnabledForFacename(LPCSTR facename, BOOL *enabled); LONG WINAPI TTIsEmbeddingEnabled(HDC hdc, BOOL *enabled); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/tapi.h ================================================ /* * TAPI definitions * * Copyright (c) 1999 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_TAPI_H #define __WINE_TAPI_H #include #include #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef HANDLE HCALL, *LPHCALL; typedef HANDLE HLINE, *LPHLINE; typedef HANDLE HLINEAPP, *LPHLINEAPP; typedef HANDLE HPHONE, *LPHPHONE; typedef HANDLE HPHONEAPP, *LPHPHONEAPP; #define TAPIERR_REQUESTFAILED __MSABI_LONG(-16) #define LINEERR_ALLOCATED 0x80000001 #define LINEERR_BADDEVICEID 0x80000002 #define LINEERR_BEARERMODEUNAVAIL 0x80000003 #define LINEERR_CALLUNAVAIL 0x80000005 #define LINEERR_COMPLETIONOVERRUN 0x80000006 #define LINEERR_CONFERENCEFULL 0x80000007 #define LINEERR_DIALBILLING 0x80000008 #define LINEERR_DIALDIALTONE 0x80000009 #define LINEERR_DIALPROMPT 0x8000000A #define LINEERR_DIALQUIET 0x8000000B #define LINEERR_INCOMPATIBLEAPIVERSION 0x8000000C #define LINEERR_INCOMPATIBLEEXTVERSION 0x8000000D #define LINEERR_INIFILECORRUPT 0x8000000E #define LINEERR_INUSE 0x8000000F #define LINEERR_INVALADDRESS 0x80000010 #define LINEERR_INVALADDRESSID 0x80000011 #define LINEERR_INVALADDRESSMODE 0x80000012 #define LINEERR_INVALADDRESSSTATE 0x80000013 #define LINEERR_INVALAPPHANDLE 0x80000014 #define LINEERR_INVALAPPNAME 0x80000015 #define LINEERR_INVALBEARERMODE 0x80000016 #define LINEERR_INVALCALLCOMPLMODE 0x80000017 #define LINEERR_INVALCALLHANDLE 0x80000018 #define LINEERR_INVALCALLPARAMS 0x80000019 #define LINEERR_INVALCALLPRIVILEGE 0x8000001A #define LINEERR_INVALCALLSELECT 0x8000001B #define LINEERR_INVALCALLSTATE 0x8000001C #define LINEERR_INVALCALLSTATELIST 0x8000001D #define LINEERR_INVALCARD 0x8000001E #define LINEERR_INVALCOMPLETIONID 0x8000001F #define LINEERR_INVALCONFCALLHANDLE 0x80000020 #define LINEERR_INVALCONSULTCALLHANDLE 0x80000021 #define LINEERR_INVALCOUNTRYCODE 0x80000022 #define LINEERR_INVALDEVICECLASS 0x80000023 #define LINEERR_INVALDEVICEHANDLE 0x80000024 #define LINEERR_INVALDIALPARAMS 0x80000025 #define LINEERR_INVALDIGITLIST 0x80000026 #define LINEERR_INVALDIGITMODE 0x80000027 #define LINEERR_INVALDIGITS 0x80000028 #define LINEERR_INVALEXTVERSION 0x80000029 #define LINEERR_INVALGROUPID 0x8000002A #define LINEERR_INVALLINEHANDLE 0x8000002B #define LINEERR_INVALLINESTATE 0x8000002C #define LINEERR_INVALLOCATION 0x8000002D #define LINEERR_INVALMEDIALIST 0x8000002E #define LINEERR_INVALMEDIAMODE 0x8000002F #define LINEERR_INVALMESSAGEID 0x80000030 #define LINEERR_INVALPARAM 0x80000032 #define LINEERR_INVALPARKID 0x80000033 #define LINEERR_INVALPARKMODE 0x80000034 #define LINEERR_INVALPOINTER 0x80000035 #define LINEERR_INVALPRIVSELECT 0x80000036 #define LINEERR_INVALRATE 0x80000037 #define LINEERR_INVALREQUESTMODE 0x80000038 #define LINEERR_INVALTERMINALID 0x80000039 #define LINEERR_INVALTERMINALMODE 0x8000003A #define LINEERR_INVALTIMEOUT 0x8000003B #define LINEERR_INVALTONE 0x8000003C #define LINEERR_INVALTONELIST 0x8000003D #define LINEERR_INVALTONEMODE 0x8000003E #define LINEERR_INVALTRANSFERMODE 0x8000003F #define LINEERR_LINEMAPPERFAILED 0x80000040 #define LINEERR_NOCONFERENCE 0x80000041 #define LINEERR_NODEVICE 0x80000042 #define LINEERR_NODRIVER 0x80000043 #define LINEERR_NOMEM 0x80000044 #define LINEERR_NOREQUEST 0x80000045 #define LINEERR_NOTOWNER 0x80000046 #define LINEERR_NOTREGISTERED 0x80000047 #define LINEERR_OPERATIONFAILED 0x80000048 #define LINEERR_OPERATIONUNAVAIL 0x80000049 #define LINEERR_RATEUNAVAIL 0x8000004A #define LINEERR_RESOURCEUNAVAIL 0x8000004B #define LINEERR_REQUESTOVERRUN 0x8000004C #define LINEERR_STRUCTURETOOSMALL 0x8000004D #define LINEERR_TARGETNOTFOUND 0x8000004E #define LINEERR_TARGETSELF 0x8000004F #define LINEERR_UNINITIALIZED 0x80000050 #define LINEERR_USERUSERINFOTOOBIG 0x80000051 #define LINEERR_REINIT 0x80000052 #define LINEERR_ADDRESSBLOCKED 0x80000053 #define LINEERR_BILLINGREJECTED 0x80000054 #define LINEERR_INVALFEATURE 0x80000055 #define LINEERR_NOMULTIPLEINSTANCE 0x80000056 #define STRINGFORMAT_ASCII 0x00000001 #define STRINGFORMAT_DBCS 0x00000002 #define STRINGFORMAT_UNICODE 0x00000003 #define STRINGFORMAT_BINARY 0x00000004 #define LINEADDRESSMODE_ADDRESSID 0x00000001 #define LINEADDRESSMODE_DIALABLEADDR 0x00000002 #define LINEBEARERMODE_VOICE 0x00000001 #define LINEBEARERMODE_SPEECH 0x00000002 #define LINEBEARERMODE_MULTIUSE 0x00000004 #define LINEBEARERMODE_DATA 0x00000008 #define LINEBEARERMODE_ALTSPEECHDATA 0x00000010 #define LINEBEARERMODE_NONCALLSIGNALING 0x00000020 #define LINEBEARERMODE_PASSTHROUGH 0x00000040 #define LINEMEDIAMODE_UNKNOWN 0x00000002 #define LINEMEDIAMODE_INTERACTIVEVOICE 0x00000004 #define LINEMEDIAMODE_AUTOMATEDVOICE 0x00000008 #define LINEMEDIAMODE_DATAMODEM 0x00000010 #define LINEDEVCAPFLAGS_CROSSADDRCONF 0x00000001 #define LINEDEVCAPFLAGS_HIGHLEVCOMP 0x00000002 #define LINEDEVCAPFLAGS_LOWLEVCOMP 0x00000004 #define LINEDEVCAPFLAGS_MEDIACONTROL 0x00000008 #define LINEDEVCAPFLAGS_MULTIPLEADDR 0x00000010 #define LINEDEVCAPFLAGS_CLOSEDROP 0x00000020 #define LINEDEVCAPFLAGS_DIALBILLING 0x00000040 #define LINEDEVCAPFLAGS_DIALQUIET 0x00000080 #define LINEDEVCAPFLAGS_DIALDIALTONE 0x00000100 #define LINEDEVSTATE_OTHER 0x00000001 #define LINEDEVSTATE_RINGING 0x00000002 #define LINEDEVSTATE_CONNECTED 0x00000004 #define LINEDEVSTATE_DISCONNECTED 0x00000008 #define LINEDEVSTATE_MSGWAITON 0x00000010 #define LINEDEVSTATE_MSGWAITOFF 0x00000020 #define LINEDEVSTATE_INSERVICE 0x00000040 #define LINEDEVSTATE_OUTOFSERVICE 0x00000080 #define LINEDEVSTATE_MAINTENANCE 0x00000100 #define LINEDEVSTATE_OPEN 0x00000200 #define LINEDEVSTATE_CLOSE 0x00000400 #define LINEDEVSTATE_NUMCALLS 0x00000800 #define LINEDEVSTATE_NUMCOMPLETIONS 0x00001000 #define LINEDEVSTATE_TERMINALS 0x00002000 #define LINEDEVSTATE_ROAMMODE 0x00004000 #define LINEDEVSTATE_BATTERY 0x00008000 #define LINEDEVSTATE_SIGNAL 0x00010000 #define LINEDEVSTATE_DEVSPECIFIC 0x00020000 #define LINEDEVSTATE_REINIT 0x00040000 #define LINEDEVSTATE_LOCK 0x00080000 #define LINEDEVSTATE_CAPSCHANGE 0x00100000 #define LINEDEVSTATE_CONFIGCHANGE 0x00200000 #define LINEDEVSTATE_TRANSLATECHANGE 0x00400000 #define LINEDEVSTATE_COMPLCANCEL 0x00800000 #define LINEDEVSTATE_REMOVED 0x01000000 #define LINELOCATIONOPTION_PULSEDIAL 0x00000001 #define LINEFEATURE_DEVSPECIFIC 0x00000001 #define LINEFEATURE_DEVSPECIFICFEAT 0x00000002 #define LINEFEATURE_FORWARD 0x00000004 #define LINEFEATURE_MAKECALL 0x00000008 #define LINEFEATURE_SETMEDIACONTROL 0x00000010 #define LINEFEATURE_SETTERMINAL 0x00000020 #define LINEFEATURE_SETDEVSTATUS 0x00000040 #define LINEFEATURE_FORWARDFWD 0x00000080 #define LINEFEATURE_FORWARDDND 0x00000100 /* tapi callback messages */ #define LINE_ADDRESSSTATE __MSABI_LONG(0) #define LINE_CALLINFO __MSABI_LONG(1) #define LINE_CALLSTATE __MSABI_LONG(2) #define LINE_CLOSE __MSABI_LONG(3) #define LINE_DEVSPECIFIC __MSABI_LONG(4) #define LINE_DEVSPECIFICFEATURE __MSABI_LONG(5) #define LINE_GATHERDIGITS __MSABI_LONG(6) #define LINE_GENERATE __MSABI_LONG(7) #define LINE_LINEDEVSTATE __MSABI_LONG(8) #define LINE_MONITORDIGITS __MSABI_LONG(9) #define LINE_MONITORMEDIA __MSABI_LONG(10) #define LINE_MONITORTONE __MSABI_LONG(11) #define LINE_REPLY __MSABI_LONG(12) #define LINE_REQUEST __MSABI_LONG(13) #define PHONE_BUTTON __MSABI_LONG(14) #define PHONE_CLOSE __MSABI_LONG(15) #define PHONE_DEVSPECIFIC __MSABI_LONG(16) #define PHONE_REPLY __MSABI_LONG(17) #define PHONE_STATE __MSABI_LONG(18) #define LINE_CREATE __MSABI_LONG(19) #define PHONE_CREATE __MSABI_LONG(20) #define LINE_AGENTSPECIFIC __MSABI_LONG(21) #define LINE_AGENTSTATUS __MSABI_LONG(22) #define LINE_APPNEWCALL __MSABI_LONG(23) #define LINE_PROXYREQUEST __MSABI_LONG(24) #define LINE_REMOVE __MSABI_LONG(25) #define PHONE_REMOVE __MSABI_LONG(26) /* these are used as Param1 of line_callstate messages */ #define LINECALLSTATE_IDLE 0x00000001 #define LINECALLSTATE_OFFERING 0x00000002 #define LINECALLSTATE_ACCEPTED 0x00000004 #define LINECALLSTATE_DIALTONE 0x00000008 #define LINECALLSTATE_DIALING 0x00000010 #define LINECALLSTATE_RINGBACK 0x00000020 #define LINECALLSTATE_BUSY 0x00000040 #define LINECALLSTATE_SPECIALINFO 0x00000080 #define LINECALLSTATE_CONNECTED 0x00000100 #define LINECALLSTATE_PROCEEDING 0x00000200 #define LINECALLSTATE_ONHOLD 0x00000400 #define LINECALLSTATE_CONFERENCED 0x00000800 #define LINECALLSTATE_ONHOLDPENDCONF 0x00001000 #define LINECALLSTATE_ONHOLDPENDTRANSFER 0x00002000 #define LINECALLSTATE_DISCONNECTED 0x00004000 #define LINECALLSTATE_UNKNOWN 0x00008000 #define LINECONNECTEDMODE_ACTIVE 0x00000001 #define LINECONNECTEDMODE_INACTIVE 0x00000002 #define LINECONNECTEDMODE_ACTIVEHELD 0x00000004 #define LINECONNECTEDMODE_INACTIVEHELD 0x00000008 #define LINECONNECTEDMODE_CONFIRMED 0x00000010 /* these are Param2 values for state_disconnected line_callstate messages */ #define LINEDISCONNECTMODE_NORMAL 0x00000001 #define LINEDISCONNECTMODE_UNKNOWN 0x00000002 #define LINEDISCONNECTMODE_REJECT 0x00000004 #define LINEDISCONNECTMODE_PICKUP 0x00000008 #define LINEDISCONNECTMODE_FORWARDED 0x00000010 #define LINEDISCONNECTMODE_BUSY 0x00000020 #define LINEDISCONNECTMODE_NOANSWER 0x00000040 #define LINEDISCONNECTMODE_BADADDRESS 0x00000080 #define LINEDISCONNECTMODE_UNREACHABLE 0x00000100 #define LINEDISCONNECTMODE_CONGESTION 0x00000200 #define LINEDISCONNECTMODE_INCOMPATIBLE 0x00000400 #define LINEDISCONNECTMODE_UNAVAIL 0x00000800 #define LINEDISCONNECTMODE_NODIALTONE 0x00001000 #define LINEDISCONNECTMODE_NUMBERCHANGED 0x00002000 #define LINEDISCONNECTMODE_OUTOFORDER 0x00004000 #define LINEDISCONNECTMODE_TEMPFAILURE 0x00008000 #define LINEDISCONNECTMODE_QOSUNAVAIL 0x00010000 #define LINEDISCONNECTMODE_BLOCKED 0x00020000 #define LINEDISCONNECTMODE_DONOTDISTURB 0x00040000 #define LINEDISCONNECTMODE_CANCELLED 0x00080000 #define LINECALLSELECT_LINE 0x00000001 #define LINECALLSELECT_ADDRESS 0x00000002 #define LINECALLSELECT_CALL 0x00000004 #define LINECALLSELECT_DEVICEID 0x00000008 #define LINECALLPRIVILEGE_NONE 0x00000001 #define LINECALLPRIVILEGE_MONITOR 0x00000002 #define LINECALLPRIVILEGE_OWNER 0x00000004 #define LINECALLFEATURE_ACCEPT 0x00000001 #define LINECALLFEATURE_ADDTOCONF 0x00000002 #define LINECALLFEATURE_ANSWER 0x00000004 #define LINECALLFEATURE_BLINDTRANSFER 0x00000008 #define LINECALLFEATURE_COMPLETECALL 0x00000010 #define LINECALLFEATURE_COMPLETETRANSF 0x00000020 #define LINECALLFEATURE_DIAL 0x00000040 #define LINECALLFEATURE_DROP 0x00000080 #define LINECALLFEATURE_GATHERDIGITS 0x00000100 #define LINECALLFEATURE_GENERATEDIGITS 0x00000200 #define LINECALLFEATURE_GENERATETONE 0x00000400 #define LINECALLFEATURE_HOLD 0x00000800 #define LINECALLFEATURE_MONITORDIGITS 0x00001000 #define LINECALLFEATURE_MONITORMEDIA 0x00002000 #define LINECALLFEATURE_MONITORTONES 0x00004000 #define LINECALLFEATURE_PARK 0x00008000 #define LINECALLFEATURE_PREPAREADDCONF 0x00010000 #define LINECALLFEATURE_REDIRECT 0x00020000 #define LINECALLFEATURE_REMOVEFROMCONF 0x00040000 #define LINECALLFEATURE_SECURECALL 0x00080000 #define LINECALLFEATURE_SENDUSERUSER 0x00100000 #define LINECALLFEATURE_SETCALLPARAMS 0x00200000 #define LINECALLFEATURE_SETMEDIACONTROL 0x00400000 #define LINECALLFEATURE_SETTERMINAL 0x00800000 #define LINECALLFEATURE_SETUPCONF 0x01000000 #define LINECALLFEATURE_SETUPTRANSFER 0x02000000 #define LINECALLFEATURE_SWAPHOLD 0x04000000 #define LINECALLFEATURE_UNHOLD 0x08000000 #define LINECALLFEATURE_RELEASEUSERUSERINFO 0x10000000 #define LINEINITIALIZEEXOPTION_USEHIDDENWINDOW 0x00000001 #define LINEINITIALIZEEXOPTION_USEEVENT 0x00000002 #define LINEINITIALIZEEXOPTION_USECOMPLETIONPORT 0x00000003 #define LINEINITIALIZEEXOPTION_CALLHUBTRACKING 0x80000000 typedef struct lineaddresscaps_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwLineDeviceID; DWORD dwAddressSize; DWORD dwAddressOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; DWORD dwAddressSharing; DWORD dwAddressStates; DWORD dwCallInfoStates; DWORD dwCallerIDFlags; DWORD dwCalledIDFlags; DWORD dwConnectedIDFlags; DWORD dwRedirectionIDFlags; DWORD dwRedirectingIDFlags; DWORD dwCallStates; DWORD dwDialToneModes; DWORD dwBusyModes; DWORD dwSpecialInfo; DWORD dwDisconnectModes; DWORD dwMaxNumActiveCalls; DWORD dwMaxNumOnHoldCalls; DWORD dwMaxNumOnHoldPendingCalls; DWORD dwMaxNumConference; DWORD dwMaxNumTransConf; DWORD dwAddrCapFlags; DWORD dwCallFeatures; DWORD dwRemoveFromConfCaps; DWORD dwRemoveFromConfState; DWORD dwTransferModes; DWORD dwParkModes; DWORD dwForwardModes; DWORD dwMaxForwardEntries; DWORD dwMaxSpecificEntries; DWORD dwMinFwdNumRings; DWORD dwMaxFwdNumRings; DWORD dwMaxCallCompletions; DWORD dwCallCompletionConds; DWORD dwCallCompletionModes; DWORD dwNumCompletionMessages; DWORD dwCompletionMsgTextEntrySize; DWORD dwCompletionMsgTextSize; DWORD dwCompletionMsgTextOffset; DWORD dwAddressFeatures; } LINEADDRESSCAPS, *LPLINEADDRESSCAPS; typedef struct lineaddressstatus_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwNumInUse; DWORD dwNumActiveCalls; DWORD dwNumOnHoldCalls; DWORD dwNumOnHoldPendCalls; DWORD dwAddressFeatures; DWORD dwNumRingsNoAnswer; DWORD dwForwardNumEntries; DWORD dwForwardSize; DWORD dwForwardOffset; DWORD dwTerminalModesSize; DWORD dwTerminalModesOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; } LINEADDRESSSTATUS, *LPLINEADDRESSSTATUS; typedef struct linedialparams_tag { DWORD dwDialPause; DWORD dwDialSpeed; DWORD dwDigitDuration; DWORD dwWaitForDialtone; } LINEDIALPARAMS, *LPLINEDIALPARAMS; typedef struct linecallinfo_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; HLINE hLine; DWORD dwLineDeviceID; DWORD dwAddressID; DWORD dwBearerMode; DWORD dwRate; DWORD dwMediaMode; DWORD dwAppSpecific; DWORD dwCallID; DWORD dwRelatedCallID; DWORD dwCallParamFlags; DWORD dwCallStates; DWORD dwMonitorDigitModes; DWORD dwMonitorMediaModes; LINEDIALPARAMS DialParams; DWORD dwOrigin; DWORD dwReason; DWORD dwCompletionID; DWORD dwNumOwners; DWORD dwNumMonitors; DWORD dwCountryCode; DWORD dwTrunk; DWORD dwCallerIDFlags; DWORD dwCallerIDSize; DWORD dwCallerIDOffset; DWORD dwCallerIDNameSize; DWORD dwCallerIDNameOffset; DWORD dwCalledIDFlags; DWORD dwCalledIDSize; DWORD dwCalledIDOffset; DWORD dwCalledIDNameSize; DWORD dwCalledIDNameOffset; DWORD dwConnectedIDFlags; DWORD dwConnectedIDSize; DWORD dwConnectedIDOffset; DWORD dwConnectedIDNameSize; DWORD dwConnectedIDNameOffset; DWORD dwRedirectionIDFlags; DWORD dwRedirectionIDSize; DWORD dwRedirectionIDOffset; DWORD dwRedirectionIDNameSize; DWORD dwRedirectionIDNameOffset; DWORD dwRedirectingIDFlags; DWORD dwRedirectingIDSize; DWORD dwRedirectingIDOffset; DWORD dwRedirectingIDNameSize; DWORD dwRedirectingIDNameOffset; DWORD dwAppNameSize; DWORD dwAppNameOffset; DWORD dwDisplayableAddressSize; DWORD dwDisplayableAddressOffset; DWORD dwCalledPartySize; DWORD dwCalledPartyOffset; DWORD dwCommentSize; DWORD dwCommentOffset; DWORD dwDisplaySize; DWORD dwDisplayOffset; DWORD dwUserUserInfoSize; DWORD dwUserUserInfoOffset; DWORD dwHighLevelCompSize; DWORD dwHighLevelCompOffset; DWORD dwLowLevelCompSize; DWORD dwLowLevelCompOffset; DWORD dwChargingInfoSize; DWORD dwChargingInfoOffset; DWORD dwTerminalModesSize; DWORD dwTerminalModesOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; } LINECALLINFO, *LPLINECALLINFO; typedef struct linecalllist_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwCallsNumEntries; DWORD dwCallsSize; DWORD dwCallsOffset; } LINECALLLIST, *LPLINECALLLIST; typedef struct linecallparams_tag { DWORD dwTotalSize; DWORD dwBearerMode; DWORD dwMinRate; DWORD dwMaxRate; DWORD dwMediaMode; DWORD dwCallParamFlags; DWORD dwAddressMode; DWORD dwAddressID; LINEDIALPARAMS DialParams; DWORD dwOrigAddressSize; DWORD dwOrigAddressOffset; DWORD dwDisplayableAddressSize; DWORD dwDisplayableAddressOffset; DWORD dwCalledPartySize; DWORD dwCalledPartyOffset; DWORD dwCommentSize; DWORD dwCommentOffset; DWORD dwUserUserInfoSize; DWORD dwUserUserInfoOffset; DWORD dwHighLevelCompSize; DWORD dwHighLevelCompOffset; DWORD dwLowLevelCompSize; DWORD dwLowLevelCompOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; } LINECALLPARAMS, *LPLINECALLPARAMS; typedef struct linecallstatus_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwCallState; DWORD dwCallStateMode; DWORD dwCallPrivilege; DWORD dwCallFeatures; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; } LINECALLSTATUS, *LPLINECALLSTATUS; typedef struct linecountrylist_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwNumCountries; DWORD dwCountryListSize; DWORD dwCountryListOffset; } LINECOUNTRYLIST, *LPLINECOUNTRYLIST; typedef struct linecountryentry_tag { DWORD dwCountryID; DWORD dwCountryCode; DWORD dwNextCountryID; DWORD dwCountryNameSize; DWORD dwCountryNameOffset; DWORD dwSameAreaRuleSize; DWORD dwSameAreaRuleOffset; DWORD dwLongDistanceRuleSize; DWORD dwLongDistanceRuleOffset; DWORD dwInternationalRuleSize; DWORD dwInternationalRuleOffset; } LINECOUNTRYENTRY, *LPLINECOUNTRYENTRY; typedef struct linedevcaps_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwProviderInfoSize; DWORD dwProviderInfoOffset; DWORD dwSwitchInfoSize; DWORD dwSwitchInfoOffset; DWORD dwPermanentLineID; DWORD dwLineNameSize; DWORD dwLineNameOffset; DWORD dwStringFormat; DWORD dwAddressModes; DWORD dwNumAddresses; DWORD dwBearerModes; DWORD dwMaxRate; DWORD dwMediaModes; DWORD dwGenerateToneModes; DWORD dwGenerateToneMaxNumFreq; DWORD dwGenerateDigitModes; DWORD dwMonitorToneMaxNumFreq; DWORD dwMonitorToneMaxNumEntries; DWORD dwMonitorDigitModes; DWORD dwGatherDigitsMinTimeout; DWORD dwGatherDigitsMaxTimeout; DWORD dwMedCtlDigitMaxListSize; DWORD dwMedCtlMediaMaxListSize; DWORD dwMedCtlToneMaxListSize; DWORD dwMedCtlCallStateMaxListSize; DWORD dwDevCapFlags; DWORD dwMaxNumActiveCalls; DWORD dwAnswerMode; DWORD dwRingModes; DWORD dwLineStates; DWORD dwUUIAcceptSize; DWORD dwUUIAnswerSize; DWORD dwUUIMakeCallSize; DWORD dwUUIDropSize; DWORD dwUUISendUserUserInfoSize; DWORD dwUUICallInfoSize; LINEDIALPARAMS MinDialParams; LINEDIALPARAMS MaxDialParams; LINEDIALPARAMS DefaultDialParams; DWORD dwNumTerminals; DWORD dwTerminalCapsSize; DWORD dwTerminalCapsOffset; DWORD dwTerminalTextEntrySize; DWORD dwTerminalTextSize; DWORD dwTerminalTextOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; DWORD dwLineFeatures; } LINEDEVCAPS, *LPLINEDEVCAPS; typedef struct linedevstatus_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwNumOpens; DWORD dwOpenMediaModes; DWORD dwNumActiveCalls; DWORD dwNumOnHoldCalls; DWORD dwNumOnHoldPendCalls; DWORD dwLineFeatures; DWORD dwNumCallCompletions; DWORD dwRingMode; DWORD dwSignalLevel; DWORD dwBatteryLevel; DWORD dwRoamMode; DWORD dwDevStatusFlags; DWORD dwTerminalModesSize; DWORD dwTerminalModesOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; } LINEDEVSTATUS, *LPLINEDEVSTATUS; typedef struct lineextensionid_tag { DWORD dwExtensionID0; DWORD dwExtensionID1; DWORD dwExtensionID2; DWORD dwExtensionID3; } LINEEXTENSIONID, *LPLINEEXTENSIONID; typedef struct lineforward_tag { DWORD dwForwardMode; DWORD dwCallerAddressSize; DWORD dwCallerAddressOffset; DWORD dwDestCountryCode; DWORD dwDestAddressSize; DWORD dwDestAddressOffset; } LINEFORWARD, *LPLINEFORWARD; typedef struct lineforwardlist_tag { DWORD dwTotalSize; DWORD dwNumEntries; LINEFORWARD ForwardList[1]; } LINEFORWARDLIST, *LPLINEFORWARDLIST; typedef struct linegeneratetone_tag { DWORD dwFrequency; DWORD dwCadenceOn; DWORD dwCadenceOff; DWORD dwVolume; } LINEGENERATETONE, *LPLINEGENERATETONE; typedef struct lineinitializeexparams_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwOptions; union { HANDLE hEvent; HANDLE hCompletionPort; } Handles; DWORD dwCompletionKey; } LINEINITIALIZEEXPARAMS, *LPLINEINITIALIZEEXPARAMS; typedef struct linemediacontrolcallstate_tag { DWORD dwCallStates; DWORD dwMediaControl; } LINEMEDIACONTROLCALLSTATE, *LPLINEMEDIACONTROLCALLSTATE; typedef struct linemediacontroldigit_tag { DWORD dwDigit; DWORD dwDigitModes; DWORD dwMediaControl; } LINEMEDIACONTROLDIGIT, *LPLINEMEDIACONTROLDIGIT; typedef struct linemediacontrolmedia_tag { DWORD dwMediaModes; DWORD dwDuration; DWORD dwMediaControl; } LINEMEDIACONTROLMEDIA, *LPLINEMEDIACONTROLMEDIA; typedef struct linemediacontroltone_tag { DWORD dwAppSpecific; DWORD dwDuration; DWORD dwFrequency1; DWORD dwFrequency2; DWORD dwFrequency3; DWORD dwMediaControl; } LINEMEDIACONTROLTONE, *LPLINEMEDIACONTROLTONE; typedef struct linemonitortone_tag { DWORD dwAppSpecific; DWORD dwDuration; DWORD dwFrequency1; DWORD dwFrequency2; DWORD dwFrequency3; } LINEMONITORTONE, *LPLINEMONITORTONE; typedef struct lineproviderlist_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwNumProviders; DWORD dwProviderListSize; DWORD dwProviderListOffset; } LINEPROVIDERLIST, *LPLINEPROVIDERLIST; typedef struct linetranslatecaps_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwNumLocations; DWORD dwLocationListSize; DWORD dwLocationListOffset; DWORD dwCurrentLocationID; DWORD dwNumCards; DWORD dwCardListSize; DWORD dwCardListOffset; DWORD dwCurrentPreferredCardID; } LINETRANSLATECAPS, *LPLINETRANSLATECAPS; typedef struct linelocationentry_tag { DWORD dwPermanentLocationID; DWORD dwLocationNameSize; DWORD dwLocationNameOffset; DWORD dwCountryCode; DWORD dwCityCodeSize; DWORD dwCityCodeOffset; DWORD dwPreferredCardID; DWORD dwLocalAccessCodeSize; DWORD dwLocalAccessCodeOffset; DWORD dwLongDistanceAccessCodeSize; DWORD dwLongDistanceAccessCodeOffset; DWORD dwTollPrefixListSize; DWORD dwTollPrefixListOffset; DWORD dwCountryID; DWORD dwOptions; DWORD dwCancelCallWaitingSize; DWORD dwCancelCallWaitingOffset; } LINELOCATIONENTRY, *LPLINELOCATIONENTRY; typedef struct linecardentry_tag { DWORD dwPermanentCardID; DWORD dwCardNameSize; DWORD dwCardNameOffset; DWORD dwCardNumberDigits; DWORD dwSameAreaRuleSize; DWORD dwSameAreaRuleOffset; DWORD dwLongDistanceRuleSize; DWORD dwLongDistanceRuleOffset; DWORD dwInternationalRuleSize; DWORD dwInternationalRuleOffset; DWORD dwOptions; } LINECARDENTRY, *LPLINECARDENTRY; typedef struct linetranslateoutput_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwDialableStringSize; DWORD dwDialableStringOffset; DWORD dwDisplayableStringSize; DWORD dwDisplayableStringOffset; DWORD dwCurrentCountry; DWORD dwDestCountry; DWORD dwTranslateResults; } LINETRANSLATEOUTPUT, *LPLINETRANSLATEOUTPUT; typedef struct linemessage_tag { DWORD hDevice; DWORD dwMessageID; DWORD_PTR dwCallbackInstance; DWORD_PTR dwParam1; DWORD_PTR dwParam2; DWORD_PTR dwParam3; } LINEMESSAGE, *LPLINEMESSAGE; typedef void (CALLBACK *LINECALLBACK)(DWORD, DWORD, DWORD, DWORD, DWORD, DWORD); typedef struct _PHONEAPP { int dummy; } PHONEAPP, *LPPHONEAPP; typedef struct _PHONE { DWORD dwRingMode; DWORD dwVolume; } PHONE, *LPPHONE; typedef struct phonebuttoninfo_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwButtonMode; DWORD dwButtonFunction; DWORD dwButtonTextSize; DWORD dwButtonTextOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; DWORD dwButtonState; } PHONEBUTTONINFO, *LPPHONEBUTTONINFO; typedef struct phonecaps_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwProviderInfoSize; DWORD dwProviderInfoOffset; DWORD dwPhoneInfoSize; DWORD dwPhoneInfoOffset; DWORD dwPermanentPhoneID; DWORD dwPhoneNameSize; DWORD dwPhoneNameOffset; DWORD dwStringFormat; DWORD dwPhoneStates; DWORD dwHookSwitchDevs; DWORD dwHandsetHookSwitchModes; DWORD dwSpeakerHookSwitchModes; DWORD dwHeadsetHookSwitchModes; DWORD dwVolumeFlags; DWORD dwGainFlags; DWORD dwDisplayNumRows; DWORD dwDisplayNumColumns; DWORD dwNumRingModes; DWORD dwNumButtonLamps; DWORD dwButtonModesSize; DWORD dwButtonModesOffset; DWORD dwButtonFunctionsSize; DWORD dwButtonFunctionsOffset; DWORD dwLampModesSize; DWORD dwLampModesOffset; DWORD dwNumSetData; DWORD dwSetDataSize; DWORD dwSetDataOffset; DWORD dwNumGetData; DWORD dwGetDataSize; DWORD dwGetDataOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; } PHONECAPS, *LPPHONECAPS; typedef struct phoneextensionid_tag { DWORD dwExtensionID0; DWORD dwExtensionID1; DWORD dwExtensionID2; DWORD dwExtensionID3; } PHONEEXTENSIONID, *LPPHONEEXTENSIONID; typedef struct phoneinitializeexparams_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwOptions; union { HANDLE hEvent; HANDLE hCompletionPort; } Handles; DWORD dwCompletionKey; } PHONEINITIALIZEEXPARAMS, *LPPHONEINITIALIZEEXPARAMS; typedef struct phonemessage_tag { DWORD hDevice; DWORD dwMessageID; DWORD_PTR dwCallbackInstance; DWORD_PTR dwParam1; DWORD_PTR dwParam2; DWORD_PTR dwParam3; } PHONEMESSAGE, *LPPHONEMESSAGE; typedef struct phonestatus_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwStatusFlags; DWORD dwNumOwners; DWORD dwRingMOde; DWORD dwRingVolume; DWORD dwHandsetHookSwitchMode; DWORD dwHandsetVolume; DWORD dwHandsetGain; DWORD dwSpeakerHookSwitchMode; DWORD dwSpeakerVolume; DWORD dwSpeakerGain; DWORD dwHeadsetHookSwitchMode; DWORD dwHeadsetVolume; DWORD dwHeadsetGain; DWORD dwDisplaySize; DWORD dwDisplayOffset; DWORD dwLampModesSize; DWORD dwLampModesOffset; DWORD dwOwnerNameSize; DWORD dwOwnerNameOffset; DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; } PHONESTATUS, *LPPHONESTATUS; typedef void (CALLBACK *PHONECALLBACK)(HANDLE, DWORD, DWORD, DWORD, DWORD, DWORD); typedef struct varstring_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwStringFormat; DWORD dwStringSize; DWORD dwStringOffset; } VARSTRING, *LPVARSTRING; /* line functions */ DWORD WINAPI lineAccept(HCALL,LPCSTR,DWORD); DWORD WINAPI lineAddProviderA(LPCSTR,HWND,LPDWORD); DWORD WINAPI lineAddProviderW(LPCWSTR,HWND,LPDWORD); #define lineAddProvider WINELIB_NAME_AW(lineAddProvider) DWORD WINAPI lineAddToConference(HCALL,HCALL); DWORD WINAPI lineAnswer(HCALL,LPCSTR,DWORD); DWORD WINAPI lineBlindTransfer(HCALL,LPCSTR,DWORD); DWORD WINAPI lineClose(HLINE); DWORD WINAPI lineCompleteCall(HCALL,LPDWORD,DWORD,DWORD); DWORD WINAPI lineCompleteTransfer(HCALL,HCALL,LPHCALL,DWORD); DWORD WINAPI lineConfigDialog(DWORD,HWND,LPCSTR); DWORD WINAPI lineConfigDialogEdit(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING); DWORD WINAPI lineConfigProvider(HWND,DWORD); DWORD WINAPI lineDeallocateCall(HCALL); DWORD WINAPI lineDevSpecific(HLINE,DWORD,HCALL,LPVOID,DWORD); DWORD WINAPI lineDevSpecificFeature(HLINE,DWORD,LPVOID,DWORD); DWORD WINAPI lineDial(HCALL,LPCSTR,DWORD); DWORD WINAPI lineDrop(HCALL,LPCSTR,DWORD); DWORD WINAPI lineForward(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS); DWORD WINAPI lineGatherDigits(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD); DWORD WINAPI lineGenerateDigits(HCALL,DWORD,LPCSTR,DWORD); DWORD WINAPI lineGenerateTone(HCALL,DWORD,DWORD,DWORD,LPLINEGENERATETONE); DWORD WINAPI lineGetAddressCaps(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS); DWORD WINAPI lineGetAddressID(HLINE,LPDWORD,DWORD,LPCSTR,DWORD); DWORD WINAPI lineGetAddressStatus(HLINE,DWORD,LPLINEADDRESSSTATUS); DWORD WINAPI lineGetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD); DWORD WINAPI lineGetCallInfo(HCALL,LPLINECALLINFO); DWORD WINAPI lineGetCallStatus(HCALL,LPLINECALLSTATUS); DWORD WINAPI lineGetConfRelatedCalls(HCALL,LPLINECALLLIST); DWORD WINAPI lineGetCountry(DWORD,DWORD,LPLINECOUNTRYLIST); DWORD WINAPI lineGetDevCapsA(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS); DWORD WINAPI lineGetDevCapsW(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS); #define lineGetDevCaps WINELIB_NAME_AW(lineGetDevCaps) DWORD WINAPI lineGetDevConfig(DWORD,LPVARSTRING,LPCSTR); DWORD WINAPI lineGetIDA(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCSTR); DWORD WINAPI lineGetIDW(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCWSTR); #define lineGetID WINELIB_NAME_AW(lineGetID) DWORD WINAPI lineGetIcon(DWORD,LPCSTR,HICON *); DWORD WINAPI lineGetLineDevStatus(HLINE,LPLINEDEVSTATUS); DWORD WINAPI lineGetNewCalls(HLINE,DWORD,DWORD,LPLINECALLLIST); DWORD WINAPI lineGetNumRings(HLINE,DWORD,LPDWORD); DWORD WINAPI lineGetProviderListA(DWORD,LPLINEPROVIDERLIST); DWORD WINAPI lineGetProviderListW(DWORD,LPLINEPROVIDERLIST); #define lineGetProviderList WINELIB_NAME_AW(lineGetProviderList) DWORD WINAPI lineGetRequest(HLINEAPP,DWORD,LPVOID); DWORD WINAPI lineGetStatusMessages(HLINE,LPDWORD,LPDWORD); DWORD WINAPI lineGetTranslateCaps(HLINEAPP,DWORD,LPLINETRANSLATECAPS); DWORD WINAPI lineHandoff(HCALL,LPCSTR,DWORD); DWORD WINAPI lineHold(HCALL); DWORD WINAPI lineInitialize(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD); LONG WINAPI lineInitializeExA(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS); LONG WINAPI lineInitializeExW(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCWSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS); #define lineInitializeEx WINELIB_NAME_AW(lineInitializeEx) DWORD WINAPI lineMakeCallA(HLINE,LPHCALL,LPCSTR,DWORD,LPLINECALLPARAMS); DWORD WINAPI lineMakeCallW(HLINE,LPHCALL,LPCWSTR,DWORD,LPLINECALLPARAMS); #define lineMakeCall WINELIB_NAME_AW(lineMakeCall) DWORD WINAPI lineMonitorDigits(HCALL,DWORD); DWORD WINAPI lineMonitorMedia(HCALL,DWORD); DWORD WINAPI lineMonitorTones(HCALL,LPLINEMONITORTONE,DWORD); DWORD WINAPI lineNegotiateAPIVersion(HLINEAPP,DWORD,DWORD,DWORD,LPDWORD,LPLINEEXTENSIONID); DWORD WINAPI lineNegotiateExtVersion(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD); DWORD WINAPI lineOpen(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS); DWORD WINAPI linePark(HCALL,DWORD,LPCSTR,LPVARSTRING); DWORD WINAPI linePickup(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR); DWORD WINAPI linePrepareAddToConference(HCALL,LPHCALL,LPLINECALLPARAMS); DWORD WINAPI lineRedirect(HCALL,LPCSTR,DWORD); DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP,DWORD,DWORD,DWORD); DWORD WINAPI lineReleaseUserUserInfo(HCALL); DWORD WINAPI lineRemoveFromConference(HCALL); DWORD WINAPI lineRemoveProvider(DWORD,HWND); DWORD WINAPI lineSecureCall(HCALL); DWORD WINAPI lineSendUserUserInfo(HCALL,LPCSTR,DWORD); DWORD WINAPI lineSetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD); DWORD WINAPI lineSetAppSpecific(HCALL,DWORD); DWORD WINAPI lineSetCallParams(HCALL,DWORD,DWORD,DWORD,LPLINEDIALPARAMS); DWORD WINAPI lineSetCallPrivilege(HCALL,DWORD); DWORD WINAPI lineSetCurrentLocation(HLINEAPP,DWORD); DWORD WINAPI lineSetDevConfig(DWORD,LPVOID,DWORD,LPCSTR); DWORD WINAPI lineSetMediaControl(HLINE,DWORD,HCALL,DWORD,LPLINEMEDIACONTROLDIGIT,DWORD,LPLINEMEDIACONTROLMEDIA,DWORD,LPLINEMEDIACONTROLTONE,DWORD,LPLINEMEDIACONTROLCALLSTATE,DWORD); DWORD WINAPI lineSetMediaMode(HCALL,DWORD); DWORD WINAPI lineSetNumRings(HLINE,DWORD,DWORD); DWORD WINAPI lineSetStatusMessages(HLINE,DWORD,DWORD); DWORD WINAPI lineSetTerminal(HLINE,DWORD,HCALL,DWORD,DWORD,DWORD,DWORD); DWORD WINAPI lineSetTollList(HLINEAPP,DWORD,LPCSTR,DWORD); DWORD WINAPI lineSetupConference(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS); DWORD WINAPI lineSetupTransfer(HCALL,LPHCALL,LPLINECALLPARAMS); DWORD WINAPI lineShutdown(HLINEAPP); DWORD WINAPI lineSwapHold(HCALL,HCALL); DWORD WINAPI lineTranslateAddress(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT); DWORD WINAPI lineTranslateDialog(HLINEAPP,DWORD,DWORD,HWND,LPCSTR); DWORD WINAPI lineUncompleteCall(HLINE,DWORD); DWORD WINAPI lineUnHold(HCALL); DWORD WINAPI lineUnpark(HLINE,DWORD,LPHCALL,LPCSTR); DWORD WINAPI lineBlindTransferA(HCALL,LPCSTR,DWORD); DWORD WINAPI lineConfigDialogA(DWORD,HWND,LPCSTR); DWORD WINAPI lineConfigDialogEditA(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING); DWORD WINAPI lineDialA(HCALL,LPCSTR,DWORD); DWORD WINAPI lineForwardA(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS); DWORD WINAPI lineGatherDigitsA(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD); DWORD WINAPI lineGenerateDigitsA(HCALL,DWORD,LPCSTR,DWORD); DWORD WINAPI lineGetAddressCapsA(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS); DWORD WINAPI lineGetAddressIDA(HLINE,LPDWORD,DWORD,LPCSTR,DWORD); DWORD WINAPI lineGetAddressStatusA(HLINE,DWORD,LPLINEADDRESSSTATUS); DWORD WINAPI lineGetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD); DWORD WINAPI lineGetCallInfoA(HCALL,LPLINECALLINFO); DWORD WINAPI lineGetCountryA(DWORD,DWORD,LPLINECOUNTRYLIST); DWORD WINAPI lineGetDevConfigA(DWORD,LPVARSTRING,LPCSTR); DWORD WINAPI lineGetIconA(DWORD,LPCSTR,HICON *); DWORD WINAPI lineGetLineDevStatusA(HLINE,LPLINEDEVSTATUS); DWORD WINAPI lineGetRequestA(HLINEAPP,DWORD,LPVOID); DWORD WINAPI lineGetTranslateCapsA(HLINEAPP,DWORD,LPLINETRANSLATECAPS); DWORD WINAPI lineHandoffA(HCALL,LPCSTR,DWORD); DWORD WINAPI lineOpenA(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS); DWORD WINAPI lineParkA(HCALL,DWORD,LPCSTR,LPVARSTRING); DWORD WINAPI linePickupA(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR); DWORD WINAPI linePrepareAddToConferenceA(HCALL,LPHCALL,LPLINECALLPARAMS); DWORD WINAPI lineRedirectA(HCALL,LPCSTR,DWORD); DWORD WINAPI lineSetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD); DWORD WINAPI lineSetDevConfigA(DWORD,LPVOID,DWORD,LPCSTR); DWORD WINAPI lineSetTollListA(HLINEAPP,DWORD,LPCSTR,DWORD); DWORD WINAPI lineSetupConferenceA(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS); DWORD WINAPI lineSetupTransferA(HCALL,LPHCALL,LPLINECALLPARAMS); DWORD WINAPI lineTranslateAddressA(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT); DWORD WINAPI lineTranslateDialogA(HLINEAPP,DWORD,DWORD,HWND,LPCSTR); DWORD WINAPI lineUnhold(HCALL); DWORD WINAPI lineUnparkA(HLINE,DWORD,LPHCALL,LPCSTR); /* phone functions */ DWORD WINAPI phoneClose(HPHONE); DWORD WINAPI phoneConfigDialog(DWORD,HWND,LPCSTR); DWORD WINAPI phoneDevSpecific(HPHONE,LPVOID,DWORD); DWORD WINAPI phoneGetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO); DWORD WINAPI phoneGetData(HPHONE,DWORD,LPVOID,DWORD); DWORD WINAPI phoneGetDevCaps(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS); DWORD WINAPI phoneGetDisplay(HPHONE,LPVARSTRING); DWORD WINAPI phoneGetGain(HPHONE,DWORD,LPDWORD); DWORD WINAPI phoneGetHookSwitch(HPHONE,LPDWORD); DWORD WINAPI phoneGetID(HPHONE,LPVARSTRING,LPCSTR); DWORD WINAPI phoneGetIcon(DWORD,LPCSTR,HICON *); DWORD WINAPI phoneGetLamp(HPHONE,DWORD,LPDWORD); DWORD WINAPI phoneGetRing(HPHONE,LPDWORD,LPDWORD); DWORD WINAPI phoneGetStatus(HPHONE,LPPHONESTATUS); DWORD WINAPI phoneGetStatusMessages(HPHONE,LPDWORD,LPDWORD,LPDWORD); DWORD WINAPI phoneGetVolume(HPHONE,DWORD,LPDWORD); DWORD WINAPI phoneInitialize(LPHPHONEAPP,HINSTANCE,PHONECALLBACK,LPCSTR,LPDWORD); DWORD WINAPI phoneNegotiateAPIVersion(HPHONEAPP,DWORD,DWORD,DWORD,LPDWORD,LPPHONEEXTENSIONID); DWORD WINAPI phoneNegotiateExtVersion(HPHONEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD); DWORD WINAPI phoneOpen(HPHONEAPP,DWORD,LPHPHONE,DWORD,DWORD,DWORD,DWORD); DWORD WINAPI phoneSetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO); DWORD WINAPI phoneSetData(HPHONE,DWORD,LPVOID,DWORD); DWORD WINAPI phoneSetDisplay(HPHONE,DWORD,DWORD,LPCSTR,DWORD); DWORD WINAPI phoneSetGain(HPHONE,DWORD,DWORD); DWORD WINAPI phoneSetHookSwitch(HPHONE,DWORD,DWORD); DWORD WINAPI phoneSetLamp(HPHONE,DWORD,DWORD); DWORD WINAPI phoneSetRing(HPHONE,DWORD,DWORD); DWORD WINAPI phoneSetStatusMessages(HPHONE,DWORD,DWORD,DWORD); DWORD WINAPI phoneSetVolume(HPHONE,DWORD,DWORD); DWORD WINAPI phoneShutdown(HPHONEAPP); DWORD WINAPI phoneConfigDialogA(DWORD,HWND,LPCSTR); DWORD WINAPI phoneGetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO); DWORD WINAPI phoneGetDevCapsA(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS); DWORD WINAPI phoneGetIDA(HPHONE,LPVARSTRING,LPCSTR); DWORD WINAPI phoneGetIconA(DWORD,LPCSTR,HICON *); DWORD WINAPI phoneGetStatusA(HPHONE,LPPHONESTATUS); DWORD WINAPI phoneSetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO); /* "assisted" functions */ DWORD WINAPI tapiGetLocationInfo(LPSTR,LPSTR); DWORD WINAPI tapiRequestMakeCall(LPCSTR,LPCSTR,LPCSTR,LPCSTR); DWORD WINAPI tapiGetLocationInfoA(LPSTR,LPSTR); DWORD WINAPI tapiRequestMakeCallA(LPCSTR,LPCSTR,LPCSTR,LPCSTR); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_TAPI_H */ ================================================ FILE: wine/windows/taskschd.idl ================================================ /* * Task Scheduler definitions * * Copyright 2013 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; [ uuid(e34cb9f1-c7f7-424c-be29-027dcc09363a), version(1.0) ] library TaskScheduler { importlib("stdole2.tlb"); typedef enum _TASK_STATE { TASK_STATE_UNKNOWN, TASK_STATE_DISABLED, TASK_STATE_QUEUED, TASK_STATE_READY, TASK_STATE_RUNNING } TASK_STATE; typedef enum _TASK_ENUM_FLAGS { TASK_ENUM_HIDDEN = 0x0001 } TASK_ENUM_FLAGS; typedef enum _TASK_LOGON_TYPE { TASK_LOGON_NONE, TASK_LOGON_PASSWORD, TASK_LOGON_S4U, TASK_LOGON_INTERACTIVE_TOKEN, TASK_LOGON_GROUP, TASK_LOGON_SERVICE_ACCOUNT, TASK_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD } TASK_LOGON_TYPE; typedef enum _TASK_RUNLEVEL { TASK_RUNLEVEL_LUA, TASK_RUNLEVEL_HIGHEST } TASK_RUNLEVEL_TYPE; typedef enum _TASK_TRIGGER_TYPE2 { TASK_TRIGGER_EVENT, TASK_TRIGGER_TIME, TASK_TRIGGER_DAILY, TASK_TRIGGER_WEEKLY, TASK_TRIGGER_MONTHLY, TASK_TRIGGER_MONTHLYDOW, TASK_TRIGGER_IDLE, TASK_TRIGGER_REGISTRATION, TASK_TRIGGER_BOOT, TASK_TRIGGER_LOGON, TASK_TRIGGER_SESSION_STATE_CHANGE = 11 } TASK_TRIGGER_TYPE2; typedef enum _TASK_ACTION_TYPE { TASK_ACTION_EXEC = 0, TASK_ACTION_COM_HANDLER = 5, TASK_ACTION_SEND_EMAIL = 6, TASK_ACTION_SHOW_MESSAGE = 7 } TASK_ACTION_TYPE; typedef enum _TASK_INSTANCES_POLICY { TASK_INSTANCES_PARALLEL, TASK_INSTANCES_QUEUE, TASK_INSTANCES_IGNORE_NEW, TASK_INSTANCES_STOP_EXISTING } TASK_INSTANCES_POLICY; typedef enum _TASK_COMPATIBILITY { TASK_COMPATIBILITY_AT, TASK_COMPATIBILITY_V1, TASK_COMPATIBILITY_V2, TASK_COMPATIBILITY_V2_1 } TASK_COMPATIBILITY; typedef enum _TASK_CREATION { TASK_VALIDATE_ONLY = 1, TASK_CREATE = 2, TASK_UPDATE = 4, TASK_CREATE_OR_UPDATE = 6, TASK_DISABLE = 8, TASK_DONT_ADD_PRINCIPAL_ACE = 16, TASK_IGNORE_REGISTRATION_TRIGGERS = 32 } TASK_CREATION; interface ITaskService; interface IRegisteredTask; interface IRegisteredTaskCollection; interface IRegistrationInfo; interface ITaskFolder; interface ITaskFolderCollection; interface ITaskDefinition; interface ITaskSettings; interface IIdleSettings; interface IRunningTask; interface IRunningTaskCollection; interface ITrigger; interface ITriggerCollection; interface ITimeTrigger; interface IRepetitionPattern; interface IAction; interface IActionCollection; interface IExecAction; interface INetworkSettings; interface IPrincipal; [ object, oleautomation, uuid(2faba4c7-4da9-4013-9697-20cc3fd40f85) ] interface ITaskService : IDispatch { HRESULT GetFolder([in] BSTR path, [out, retval] ITaskFolder **folder ); HRESULT GetRunningTasks([in] LONG flags, [out, retval] IRunningTaskCollection **tasks ); HRESULT NewTask([in] DWORD flags, [out, retval] ITaskDefinition **definition ); HRESULT Connect([in, optional] VARIANT server, [in, optional] VARIANT user, [in, optional] VARIANT domain, [in, optional] VARIANT password); [propget] HRESULT Connected([out, retval] VARIANT_BOOL *connected); [propget] HRESULT TargetServer([out, retval] BSTR *server); [propget] HRESULT ConnectedUser([out, retval] BSTR *user); [propget] HRESULT ConnectedDomain([out, retval] BSTR *domain); [propget] HRESULT HighestVersion([out, retval] DWORD *version); } [ object, oleautomation, uuid(9c86f320-dee3-4dd1-b972-a303f26b061e) ] interface IRegisteredTask : IDispatch { [propget] HRESULT Name([out, retval] BSTR *name); [propget] HRESULT Path([out, retval] BSTR *path); [propget] HRESULT State([out, retval] TASK_STATE *state); [propget] HRESULT Enabled([out, retval] VARIANT_BOOL *enabled); [propput] HRESULT Enabled(VARIANT_BOOL enabled); HRESULT Run([in] VARIANT params, [out, retval] IRunningTask **task); HRESULT RunEx([in] VARIANT params, [in] LONG flags, [in] LONG sessionID, [in] BSTR user, [out, retval] IRunningTask **task); HRESULT GetInstances([in] LONG flags, [out, retval] IRunningTaskCollection **tasks); [propget] HRESULT LastRunTime([out, retval] DATE *date); [propget] HRESULT LastTaskResult([out, retval] LONG *result); [propget] HRESULT NumberOfMissedRuns([out, retval] LONG *runs); [propget] HRESULT NextRunTime([out, retval] DATE *date); [propget] HRESULT Definition([out, retval] ITaskDefinition **task); [propget] HRESULT Xml([out, retval] BSTR *xml); HRESULT GetSecurityDescriptor([in] LONG info, [out, retval] BSTR *sddl); HRESULT SetSecurityDescriptor([in] BSTR sddl, [in] LONG flags); HRESULT Stop([in] LONG flags); HRESULT GetRunTimes([in] const LPSYSTEMTIME start, [in] const LPSYSTEMTIME end, [in, out] DWORD *count, [out] LPSYSTEMTIME *time); } [ object, oleautomation, uuid(86627eb4-42a7-41e4-a4d9-ac33a72f2d52) ] interface IRegisteredTaskCollection : IDispatch { [propget] HRESULT Count([out, retval] LONG *count); [propget] HRESULT Item([in] VARIANT index, [out, retval] IRegisteredTask **task); [propget] HRESULT _NewEnum([out, retval] IUnknown **penum); } [ object, oleautomation, uuid(416d8b73-cb41-4ea1-805c-9be9a5ac4a74) ] interface IRegistrationInfo : IDispatch { [propget] HRESULT Description([out, retval] BSTR *description); [propput] HRESULT Description([in] BSTR description); [propget] HRESULT Author([out, retval] BSTR *author); [propput] HRESULT Author([in] BSTR author); [propget] HRESULT Version([out, retval] BSTR *version); [propput] HRESULT Version([in] BSTR version); [propget] HRESULT Date([out, retval] BSTR *date); [propput] HRESULT Date([in] BSTR date); [propget] HRESULT Documentation([out, retval] BSTR *doc); [propput] HRESULT Documentation([in] BSTR doc); [propget] HRESULT XmlText([out, retval] BSTR *xml); [propput] HRESULT XmlText([in] BSTR xml); [propget] HRESULT URI([out, retval] BSTR *uri); [propput] HRESULT URI([in] BSTR uri); [propget] HRESULT SecurityDescriptor([out, retval] VARIANT *sddl); [propput] HRESULT SecurityDescriptor([in] VARIANT sddl); [propget] HRESULT Source([out, retval] BSTR *source); [propput] HRESULT Source([in] BSTR source); } [ object, oleautomation, uuid(8cfac062-a080-4c15-9a88-aa7c2af80dfc) ] interface ITaskFolder : IDispatch { [propget] HRESULT Name([out, retval] BSTR *name); [propget] HRESULT Path([out, retval] BSTR *path); HRESULT GetFolder([in] BSTR path, [out, retval] ITaskFolder **folder); HRESULT GetFolders([in] LONG flags, [out, retval] ITaskFolderCollection **folders); HRESULT CreateFolder([in] BSTR name, [in] VARIANT sddl, [out, retval] ITaskFolder **folder); HRESULT DeleteFolder([in] BSTR name, [in] LONG flags); HRESULT GetTask([in] BSTR path, [out, retval] IRegisteredTask **task); HRESULT GetTasks([in] LONG flags, [out, retval] IRegisteredTaskCollection **tasks); HRESULT DeleteTask([in] BSTR name, [in] LONG flags); HRESULT RegisterTask([in] BSTR path, [in] BSTR xml, [in] LONG flags, [in] VARIANT user, [in] VARIANT password, [in] TASK_LOGON_TYPE logonType, [in] VARIANT sddl, [out, retval] IRegisteredTask **task); HRESULT RegisterTaskDefinition([in] BSTR path, [in] ITaskDefinition *definition, [in] LONG flags, [in] VARIANT user, [in] VARIANT password, [in] TASK_LOGON_TYPE logon, [in] VARIANT sddl, [out, retval] IRegisteredTask **task); HRESULT GetSecurityDescriptor(LONG info, [out, retval] BSTR *sddl); HRESULT SetSecurityDescriptor([in] BSTR sddl, [in] LONG flags); } [ object, oleautomation, uuid(79184a66-8664-423f-97f1-637356a5d812) ] interface ITaskFolderCollection : IDispatch { [propget] HRESULT Count([out, retval] LONG *count); [propget] HRESULT Item([in] VARIANT index, [out, retval] ITaskFolder **folder); [propget] HRESULT _NewEnum([out, retval] IUnknown **penum); } [ object, oleautomation, uuid(f5bc8fc5-536d-4f77-b852-fbc1356fdeb6) ] interface ITaskDefinition : IDispatch { [propget] HRESULT RegistrationInfo([out, retval] IRegistrationInfo **info); [propput] HRESULT RegistrationInfo([in] IRegistrationInfo *info); [propget] HRESULT Triggers([out, retval] ITriggerCollection **triggers); [propput] HRESULT Triggers([in] ITriggerCollection *triggers); [propget] HRESULT Settings([out, retval] ITaskSettings **settings); [propput] HRESULT Settings([in] ITaskSettings *settings); [propget] HRESULT Data([out, retval] BSTR *data); [propput] HRESULT Data([in] BSTR data); [propget] HRESULT Principal([out, retval] IPrincipal **principal); [propput] HRESULT Principal([in] IPrincipal *principal); [propget] HRESULT Actions([out, retval] IActionCollection **actions); [propput] HRESULT Actions([in] IActionCollection *actions); [propget] HRESULT XmlText([out, retval] BSTR *xml); [propput] HRESULT XmlText([in] BSTR xml); } [ object, oleautomation, uuid(8fd4711d-2d02-4c8c-87e3-eff699de127e) ] interface ITaskSettings : IDispatch { [propget] HRESULT AllowDemandStart([out, retval] VARIANT_BOOL *allow); [propput] HRESULT AllowDemandStart([in] VARIANT_BOOL allow); [propget] HRESULT RestartInterval([out, retval] BSTR *interval); [propput] HRESULT RestartInterval([in] BSTR interval); [propget] HRESULT RestartCount([out, retval] INT *count); [propput] HRESULT RestartCount([in] INT count); [propget] HRESULT MultipleInstances([out, retval] TASK_INSTANCES_POLICY *policy); [propput] HRESULT MultipleInstances([in] TASK_INSTANCES_POLICY policy); [propget] HRESULT StopIfGoingOnBatteries([out, retval] VARIANT_BOOL *stop); [propput] HRESULT StopIfGoingOnBatteries([in] VARIANT_BOOL stop); [propget] HRESULT DisallowStartIfOnBatteries([out, retval] VARIANT_BOOL *disallow); [propput] HRESULT DisallowStartIfOnBatteries([in] VARIANT_BOOL disallow); [propget] HRESULT AllowHardTerminate([out, retval] VARIANT_BOOL *allow); [propput] HRESULT AllowHardTerminate([in] VARIANT_BOOL allow); [propget] HRESULT StartWhenAvailable([out, retval] VARIANT_BOOL *start); [propput] HRESULT StartWhenAvailable([in] VARIANT_BOOL start); [propget] HRESULT XmlText([out, retval] BSTR *xml); [propput] HRESULT XmlText([in] BSTR xml); [propget] HRESULT RunOnlyIfNetworkAvailable([out, retval] VARIANT_BOOL *run); [propput] HRESULT RunOnlyIfNetworkAvailable([in] VARIANT_BOOL run); [propget] HRESULT ExecutionTimeLimit([out, retval] BSTR *limit); [propput] HRESULT ExecutionTimeLimit([in] BSTR limit); [propget] HRESULT Enabled([out, retval] VARIANT_BOOL *enabled); [propput] HRESULT Enabled([in] VARIANT_BOOL enabled); [propget] HRESULT DeleteExpiredTaskAfter([out, retval] BSTR *delay); [propput] HRESULT DeleteExpiredTaskAfter([in] BSTR delay); [propget] HRESULT Priority([out, retval] INT *priority); [propput] HRESULT Priority([in] INT priority); [propget] HRESULT Compatibility([out, retval] TASK_COMPATIBILITY *level); [propput] HRESULT Compatibility([in] TASK_COMPATIBILITY level); [propget] HRESULT Hidden([out, retval] VARIANT_BOOL *hidden); [propput] HRESULT Hidden([in] VARIANT_BOOL hidden); [propget] HRESULT IdleSettings([out, retval] IIdleSettings **settings); [propput] HRESULT IdleSettings([in] IIdleSettings *settings); [propget] HRESULT RunOnlyIfIdle([out, retval] VARIANT_BOOL *run); [propput] HRESULT RunOnlyIfIdle([in] VARIANT_BOOL run); [propget] HRESULT WakeToRun([out, retval] VARIANT_BOOL *wake); [propput] HRESULT WakeToRun([in] VARIANT_BOOL wake); [propget] HRESULT NetworkSettings([out, retval] INetworkSettings **settings); [propput] HRESULT NetworkSettings([in] INetworkSettings *settings); } [ object, oleautomation, uuid(84594461-0053-4342-a8fd-088fabf11f32) ] interface IIdleSettings : IDispatch { [propget] HRESULT IdleDuration([out, retval] BSTR *delay); [propput] HRESULT IdleDuration([in] BSTR delay); [propget] HRESULT WaitTimeout([out, retval] BSTR *timeout); [propput] HRESULT WaitTimeout([in] BSTR timeout); [propget] HRESULT StopOnIdleEnd([out, retval] VARIANT_BOOL *stop); [propput] HRESULT StopOnIdleEnd([in] VARIANT_BOOL stop); [propget] HRESULT RestartOnIdle([out, retval] VARIANT_BOOL *restart); [propput] HRESULT RestartOnIdle([in] VARIANT_BOOL restart); } [ object, oleautomation, uuid(653758fb-7b9a-4f1e-a471-beeb8e9b834e) ] interface IRunningTask : IDispatch { [propget] HRESULT Name([out, retval] BSTR *name); [propget] HRESULT InstanceGuid([out, retval] BSTR *guid); [propget] HRESULT Path([out, retval] BSTR *path); [propget] HRESULT State([out, retval] TASK_STATE *state); [propget] HRESULT CurrentAction([out, retval] BSTR *name); HRESULT Stop(void ); HRESULT Refresh(void ); [propget] HRESULT EnginePID([out, retval] DWORD *pid); } [ object, oleautomation, uuid(6a67614b-6828-4fec-aa54-6d52e8f1f2db) ] interface IRunningTaskCollection : IDispatch { [propget] HRESULT Count([out, retval] LONG *count); [propget] HRESULT Item([in] VARIANT index, [out, retval] IRunningTask **task); [propget] HRESULT _NewEnum([out, retval] IUnknown **penum); } [ object, oleautomation, uuid(09941815-ea89-4b5b-89e0-2a773801fac3) ] interface ITrigger : IDispatch { [propget] HRESULT Type([out, retval] TASK_TRIGGER_TYPE2 *type); [propget] HRESULT Id([out, retval] BSTR *id); [propput] HRESULT Id([in] BSTR id); [propget] HRESULT Repetition([out, retval] IRepetitionPattern **repeat); [propput] HRESULT Repetition([in] IRepetitionPattern *repeat); [propget] HRESULT ExecutionTimeLimit([out, retval] BSTR *limit); [propput] HRESULT ExecutionTimeLimit([in] BSTR limit); [propget] HRESULT StartBoundary([out, retval] BSTR *start); [propput] HRESULT StartBoundary([in] BSTR start); [propget] HRESULT EndBoundary([out, retval] BSTR *end); [propput] HRESULT EndBoundary([in] BSTR end); [propget] HRESULT Enabled([out, retval] VARIANT_BOOL *enabled); [propput] HRESULT Enabled([in] VARIANT_BOOL enabled); } [ odl, uuid(126c5cd8-b288-41d5-8dbf-e491446adc5c), oleautomation, dual, nonextensible ] interface IDailyTrigger : ITrigger { [propget] HRESULT DaysInterval([out, retval] short *pDays); [propput] HRESULT DaysInterval([in] short days); [propget] HRESULT RandomDelay([out, retval] BSTR *pRandomDelay); [propput] HRESULT RandomDelay([in] BSTR randomDelay); } [ object, oleautomation, uuid(85df5081-1b24-4f32-878a-d9d14df4cb77) ] interface ITriggerCollection : IDispatch { [propget] HRESULT Count([out, retval] LONG *count); [propget] HRESULT Item([in] LONG index, [out, retval] ITrigger **trigger); [propget] HRESULT _NewEnum([out, retval] IUnknown **penum); HRESULT Create([in] TASK_TRIGGER_TYPE2 type, [out, retval] ITrigger **trigger); HRESULT Remove([in] VARIANT index); HRESULT Clear(); } [ object, oleautomation, uuid(b45747e0-eba7-4276-9f29-85c5bb300006) ] interface ITimeTrigger : ITrigger { [propget] HRESULT RandomDelay([out, retval] BSTR *delay); [propput] HRESULT RandomDelay([in] BSTR delay); } [ object, oleautomation, uuid(7fb9acf1-26be-400e-85b5-294b9c75dfd6) ] interface IRepetitionPattern : IDispatch { [propget] HRESULT Interval([out, retval] BSTR *interval); [propput] HRESULT Interval([in] BSTR interval); [propget] HRESULT Duration([out, retval] BSTR *duration); [propput] HRESULT Duration([in] BSTR duration); [propget] HRESULT StopAtDurationEnd([out, retval] VARIANT_BOOL *stop); [propput] HRESULT StopAtDurationEnd([in] VARIANT_BOOL sop); } [ object, oleautomation, uuid(bae54997-48b1-4cbe-9965-d6be263ebea4) ] interface IAction : IDispatch { [propget] HRESULT Id([out, retval] BSTR *id); [propput] HRESULT Id([in] BSTR id); [propget] HRESULT Type([out, retval] TASK_ACTION_TYPE *type); } [ object, oleautomation, uuid(02820e19-7b98-4ed2-b2e8-fdccceff619b) ] interface IActionCollection : IDispatch { [propget] HRESULT Count([out, retval] LONG *count); [propget] HRESULT Item([in] LONG index, [out, retval] IAction **action); [propget] HRESULT _NewEnum([out, retval] IUnknown **penum); [propget] HRESULT XmlText([out, retval] BSTR *xml); [propput] HRESULT XmlText([in] BSTR xml); HRESULT Create([in] TASK_ACTION_TYPE Type, [out, retval] IAction **action); HRESULT Remove([in] VARIANT index); HRESULT Clear(); [propget] HRESULT Context([out, retval] BSTR *ctx); [propput] HRESULT Context([in] BSTR ctx); } [ object, oleautomation, uuid(4c3d624d-fd6b-49a3-b9b7-09cb3cd3f047) ] interface IExecAction : IAction { [propget] HRESULT Path([out, retval] BSTR *path); [propput] HRESULT Path([in] BSTR path); [propget] HRESULT Arguments([out, retval] BSTR *argument); [propput] HRESULT Arguments([in] BSTR argument); [propget] HRESULT WorkingDirectory([out, retval] BSTR *directory); [propput] HRESULT WorkingDirectory([in] BSTR directory); } [ object, oleautomation, uuid(9f7dea84-c30b-4245-80b6-00e9f646f1b4) ] interface INetworkSettings : IDispatch { [propget] HRESULT Name([out, retval] BSTR *name); [propput] HRESULT Name([in] BSTR name); [propget] HRESULT Id([out, retval] BSTR *id); [propput] HRESULT Id([in] BSTR id); } [ object, oleautomation, uuid(d98d51e5-c9b4-496a-a9c1-18980261cf0f) ] interface IPrincipal : IDispatch { [propget] HRESULT Id([out, retval] BSTR *id); [propput] HRESULT Id([in] BSTR id); [propget] HRESULT DisplayName([out, retval] BSTR *name); [propput] HRESULT DisplayName([in] BSTR name); [propget] HRESULT UserId([out, retval] BSTR *user); [propput] HRESULT UserId([in] BSTR user); [propget] HRESULT LogonType([out, retval] TASK_LOGON_TYPE *logon); [propput] HRESULT LogonType([in] TASK_LOGON_TYPE logon); [propget] HRESULT GroupId([out, retval] BSTR *group); [propput] HRESULT GroupId([in] BSTR group); [propget] HRESULT RunLevel([out, retval] TASK_RUNLEVEL_TYPE *level); [propput] HRESULT RunLevel([in] TASK_RUNLEVEL_TYPE level); } [ threading(both), progid("Schedule.Service.1"), vi_progid("Schedule.Service"), uuid(0f87369f-a4e5-4cfc-bd3e-73e6154572dd) ] coclass TaskScheduler { interface ITaskService; } } /* library TaskScheduler */ ================================================ FILE: wine/windows/tchar.h ================================================ /* * Copyright (C) 1998 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_TCHAR_H #define __WINE_TCHAR_H #ifdef __WINESRC__ #error Wine should not include tchar.h internally #endif #if !defined(__MSVCRT__) && (defined(_UNICODE) || defined(_MBCS)) #error You must use msvcrt when building in Unicode/MBCS mode [-mno-cygwin] #endif #ifdef __cplusplus extern "C" { #endif /***************************************************************************** * tchar routines */ #define _strdec(start,current) ((start)<(current) ? ((char*)(current))-1 : NULL) #define _strinc(current) (((char*)(current))+1) #define _strncnt(str,max) (strlen(str)>(max) ? (max) : strlen(str)) #define _strnextc(str) ((unsigned int)*(str)) #define _strninc(str,n) (((char*)(str))+(n)) #define _strspnp(s1,s2) (*((s1)+=strspn((s1),(s2))) ? (s1) : NULL) /***************************************************************************** * tchar mappings */ #ifndef _UNICODE # ifndef _MBCS # include # define WINE_tchar_routine(std,mbcs,unicode) std # else # include # define WINE_tchar_routine(std,mbcs,unicode) mbcs # endif #else /* _UNICODE */ # include # define WINE_tchar_routine(std,mbcs,unicode) unicode #endif #define WINE_tchar_true(a) (1) #define WINE_tchar_false(a) (0) #define WINE_tchar_tclen(a) (1) #define WINE_tchar_tccpy(a,b) do { *(a)=*(b); } while (0) #define __targv WINE_tchar_routine(__argv, __argv, __wargv) #define _fgettc WINE_tchar_routine(fgetc, fgetc, fgetwc) #define _fgettchar WINE_tchar_routine(fgetchar, fgetchar, _fgetwchar) #define _fgetts WINE_tchar_routine(fgets, fgets, fgetws) #define _fputtc WINE_tchar_routine(fputc, fputc, fputwc) #define _fputtchar WINE_tchar_routine(fputchar, fputchar, _fputwchar) #define _fputts WINE_tchar_routine(fputs, fputs, fputws) #define _ftprintf WINE_tchar_routine(fprintf, fprintf, fwprintf) #define _ftscanf WINE_tchar_routine(fscanf, fscanf, fwscanf) #define _gettc WINE_tchar_routine(getc, getc, getwc) #define _gettchar WINE_tchar_routine(getchar, getchar, getwchar) #define _getts WINE_tchar_routine(gets, gets, getws) #define _istalnum WINE_tchar_routine(isalnum, _ismbcalnum, iswalnum) #define _istalpha WINE_tchar_routine(isalpha, _ismbcalpha, iswalpha) #define _istascii WINE_tchar_routine(isascii, __isascii, iswascii) #define _istcntrl WINE_tchar_routine(iscntrl, iscntrl, iswcntrl) #define _istdigit WINE_tchar_routine(isdigit, _ismbcdigit, iswdigit) #define _istgraph WINE_tchar_routine(isgraph, _ismbcgraph, iswgraph) #define _istlead WINE_tchar_routine(WINE_tchar_false,_ismbblead, WINE_tchar_false) #define _istleadbyte WINE_tchar_routine(WINE_tchar_false,isleadbyte, WINE_tchar_false) #define _istlegal WINE_tchar_routine(WINE_tchar_true, _ismbclegal, WINE_tchar_true) #define _istlower WINE_tchar_routine(islower, _ismbcslower,iswlower) #define _istprint WINE_tchar_routine(isprint, _ismbcprint, iswprint) #define _istpunct WINE_tchar_routine(ispunct, _ismbcpunct, iswpunct) #define _istspace WINE_tchar_routine(isspace, _ismbcspace, iswspace) #define _istupper WINE_tchar_routine(isupper, _ismbcupper, iswupper) #define _istxdigit WINE_tchar_routine(isxdigit, isxdigit, iswxdigit) #define _itot WINE_tchar_routine(_itoa, _itoa, _itow) #define _ltot WINE_tchar_routine(_ltoa, _ltoa, _ltow) #define _puttc WINE_tchar_routine(putc, putc, putwc) #define _puttchar WINE_tchar_routine(putchar, putchar, putwchar) #define _putts WINE_tchar_routine(puts, puts, putws) #define _sntprintf WINE_tchar_routine(snprintf, snprintf, snwprintf) #define _stprintf WINE_tchar_routine(sprintf, sprintf, swprintf) #define _stscanf WINE_tchar_routine(sscanf, sscanf, swscanf) #define _taccess WINE_tchar_routine(access, _access, _waccess) #define _tasctime WINE_tchar_routine(asctime, asctime, _wasctime) #define _tccpy WINE_tchar_routine(WINE_tchar_tccpy,_mbccpy, WINE_tchar_tccpy) #define _tchdir WINE_tchar_routine(chdir, _chdir, _wchdir) #define _tclen WINE_tchar_routine(WINE_tchar_tclen,_mbclen, WINE_tchar_tclen) #define _tchmod WINE_tchar_routine(chmod, _chmod, _wchmod) #define _tcreat WINE_tchar_routine(creat, _creat, _wcreat) #define _tcscat WINE_tchar_routine(strcat, _mbscat, wcscat) #define _tcschr WINE_tchar_routine(strchr, _mbschr, wcschr) #define _tcsclen WINE_tchar_routine(strlen, _mbslen, wcslen) #define _tcscmp WINE_tchar_routine(strcmp, _mbscmp, wcscmp) #define _tcscoll WINE_tchar_routine(strcoll, _mbscoll, wcscoll) #define _tcscpy WINE_tchar_routine(strcpy, _mbscpy, wcscpy) #define _tcscspn WINE_tchar_routine(strcspn, _mbscspn, wcscspn) #define _tcsdec WINE_tchar_routine(_strdec, _mbsdec, _wcsdec) #define _tcsdup WINE_tchar_routine(strdup, _mbsdup, _wcsdup) #define _tcsftime WINE_tchar_routine(strftime, strftime, wcsftime) #define _tcsicmp WINE_tchar_routine(strcasecmp, _mbsicmp, _wcsicmp) #define _tcsicoll WINE_tchar_routine(_stricoll, _stricoll, _wcsicoll) #define _tcsinc WINE_tchar_routine(_strinc, _mbsinc, _wcsinc) #define _tcslen WINE_tchar_routine(strlen, strlen, wcslen) #define _tcslwr WINE_tchar_routine(_strlwr, _mbslwr, _wcslwr) #define _tcsnbcnt WINE_tchar_routine(_strncnt, _mbsnbcnt, _wcnscnt) #define _tcsncat WINE_tchar_routine(strncat, _mbsnbcat, wcsncat) #define _tcsnccat WINE_tchar_routine(strncat, _mbsncat, wcsncat) #define _tcsncmp WINE_tchar_routine(strncmp, _mbsnbcmp, wcsncmp) #define _tcsnccmp WINE_tchar_routine(strncmp, _mbsncmp, wcsncmp) #define _tcsnccnt WINE_tchar_routine(_strncnt, _mbsnccnt, _wcsncnt) #define _tcsnccpy WINE_tchar_routine(strncpy, _mbsncpy, wcsncpy) #define _tcsncicmp WINE_tchar_routine(_strnicmp, _mbsnicmp, _wcsnicmp) #define _tcsncpy WINE_tchar_routine(strncpy, _mbsnbcpy, wcsncpy) #define _tcsncset WINE_tchar_routine(_strnset, _mbsnset, _wcsnset) #define _tcsnextc WINE_tchar_routine(_strnextc, _mbsnextc, _wcsnextc) #define _tcsnicmp WINE_tchar_routine(_strnicmp, _mbsnicmp, _wcsnicmp) #define _tcsnicoll WINE_tchar_routine(_strnicoll, _strnicoll _wcsnicoll) #define _tcsninc WINE_tchar_routine(_strninc, _mbsninc, _wcsninc) #define _tcsnccnt WINE_tchar_routine(_strncnt, _mbsnccnt, _wcsncnt) #define _tcsnset WINE_tchar_routine(_strnset, _mbsnbset, _wcsnset) #define _tcspbrk WINE_tchar_routine(strpbrk, _mbspbrk, wcspbrk) #define _tcsspnp WINE_tchar_routine(_strspnp, _mbsspnp, _wcsspnp) #define _tcsrchr WINE_tchar_routine(strrchr, _mbsrchr, wcsrchr) #define _tcsrev WINE_tchar_routine(_strrev, _mbsrev, _wcsrev) #define _tcsset WINE_tchar_routine(_strset, _mbsset, _wcsset) #define _tcsspn WINE_tchar_routine(strspn, _mbsspn, wcsspn) #define _tcsstr WINE_tchar_routine(strstr, _mbsstr, wcsstr) #define _tcstod WINE_tchar_routine(strtod, strtod, wcstod) #define _tcstok WINE_tchar_routine(strtok, _mbstok, wcstok) #define _tcstol WINE_tchar_routine(strtol, strtol, wcstol) #define _tcstoul WINE_tchar_routine(strtoul, strtoul, wcstoul) #define _tcsupr WINE_tchar_routine(_strupr, _mbsupr, _wcsupr) #define _tcsxfrm WINE_tchar_routine(strxfrm, strxfrm, wcsxfrm) #define _tctime WINE_tchar_routine(ctime, ctime, _wctime) #define _tenviron WINE_tchar_routine(_environ, _environ, _wenviron) #define _texecl WINE_tchar_routine(execl, _execl, _wexecl) #define _texecle WINE_tchar_routine(execle, _execle, _wexecle) #define _texeclp WINE_tchar_routine(execlp, _execlp, _wexeclp) #define _texeclpe WINE_tchar_routine(execlpe, _execlpe, _wexeclpe) #define _texecv WINE_tchar_routine(execv, _execv, _wexecv) #define _texecve WINE_tchar_routine(execve, _execve, _wexecve) #define _texecvp WINE_tchar_routine(execvp, _execvp, _wexecvp) #define _texecvpe WINE_tchar_routine(execvpe, _execvpe, _wexecvpe) #define _tfdopen WINE_tchar_routine(fdopen, _fdopen, _wfdopen) #define _tfinddata_t WINE_tchar_routine(_finddata_t, _finddata_t, _wfinddata_t) #define _tfinddatai64_t WINE_tchar_routine(_finddatai64_t,_finddatai64_t,_wfinddatai64_t) #define _tfindfirst WINE_tchar_routine(_findfirst, _findfirst, _wfindfirst) #define _tfindnext WINE_tchar_routine(_findnext, _findnext, _wfindnext) #define _tfopen WINE_tchar_routine(fopen, fopen, _wfopen) #define _tfreopen WINE_tchar_routine(freopen, freopen, _wfreopen) #define _tfsopen WINE_tchar_routine(_fsopen, _fsopen, _wfsopen) #define _tfullpath WINE_tchar_routine(_fullpath, _fullpath, _wfullpath) #define _tgetcwd WINE_tchar_routine(getcwd, _getcwd, _wgetcwd) #define _tgetenv WINE_tchar_routine(getenv, getenv, _wgetenv) #define _tmain WINE_tchar_routine(main, main, wmain) #define _tmakepath WINE_tchar_routine(_makepath, _makepath, _wmakepath) #define _tmkdir WINE_tchar_routine(mkdir, _mkdir, _wmkdir) #define _tmktemp WINE_tchar_routine(mktemp, _mktemp, _wmktemp) #define _tperror WINE_tchar_routine(perror, perror, _wperror) #define _topen WINE_tchar_routine(open, _open, _wopen) #define _totlower WINE_tchar_routine(tolower, _mbctolower, towlower) #define _totupper WINE_tchar_routine(toupper, _mbctoupper, towupper) #define _tpopen WINE_tchar_routine(popen, _popen, _wpopen) #define _tprintf WINE_tchar_routine(printf, printf, wprintf) #define _tremove WINE_tchar_routine(remove, remove, _wremove) #define _trename WINE_tchar_routine(rename, rename, _wrename) #define _trmdir WINE_tchar_routine(rmdir, _rmdir, _wrmdir) #define _tsearchenv WINE_tchar_routine(_searchenv, _searchenv, _wsearchenv) #define _tscanf WINE_tchar_routine(scanf, scanf, wscanf) #define _tsetlocale WINE_tchar_routine(setlocale, setlocale, _wsetlocale) #define _tsopen WINE_tchar_routine(_sopen, _sopen, _wsopen) #define _tspawnl WINE_tchar_routine(_spawnl, _spawnl, _wspawnl) #define _tspawnle WINE_tchar_routine(_spawnle, _spawnle, _wspawnle) #define _tspawnlp WINE_tchar_routine(_spawnlp, _spawnlp, _wspawnlp) #define _tspawnlpe WINE_tchar_routine(_spawnlpe, _spawnlpe, _wspawnlpe) #define _tspawnv WINE_tchar_routine(_spawnv, _spawnv, _wspawnv) #define _tspawnve WINE_tchar_routine(_spawnve, _spawnve, _wspawnve) #define _tspawnvp WINE_tchar_routine(_spawnvp, _spawnvp, _tspawnvp) #define _tspawnvpe WINE_tchar_routine(_spawnvpe, _spawnvpe, _tspawnvpe) #define _tsplitpath WINE_tchar_routine(_splitpath, _splitpath, _wsplitpath) #define _tstat WINE_tchar_routine(_stat, _stat, _wstat) #define _tstati64 WINE_tchar_routine(_stati64, _stati64, _wstati64) #define _tstrdate WINE_tchar_routine(_strdate, _strdate, _wstrdate) #define _tstrtime WINE_tchar_routine(_strtime, _strtime, _wstrtime) #define _tsystem WINE_tchar_routine(system, system, _wsystem) #define _ttempnam WINE_tchar_routine(tempnam, _tempnam, _wtempnam) #define _ttmpnam WINE_tchar_routine(tmpnam, tmpnam, _wtmpnam) #define _ttoi WINE_tchar_routine(atoi, atoi, _wtoi) #define _ttol WINE_tchar_routine(atol, atol, _wtol) #define _tutime WINE_tchar_routine(utime, _utime, _wutime) #define _tWinMain WINE_tchar_routine(WinMain, WinMain, wWinMain) #define _ultot WINE_tchar_routine(_ultoa, _ultoa, _ultow) #define _ungettc WINE_tchar_routine(ungetc, ungetc, ungetwc) #define _vftprintf WINE_tchar_routine(vfprintf, vfprintf, vfwprintf) #define _vsntprintf WINE_tchar_routine(vsnprintf, _vsnprintf, _vsnwprintf) #define _vstprintf WINE_tchar_routine(vsprintf, vsprintf, vswprintf) #define _vtprintf WINE_tchar_routine(vprintf, vprintf, vwprintf) #define _TEOF WINE_tchar_routine(EOF, EOF, WEOF) #define __T(x) __TEXT(x) #define _T(x) __T(x) #define _TEXT(x) __T(x) #ifdef _UNICODE #if !defined(_WINT_T_DEFINED) && !defined(__WINT_TYPE__) typedef unsigned short wint_t; #endif #ifndef _WCTYPE_T_DEFINED typedef unsigned short wctype_t; #define _WCTYPE_T_DEFINED #endif #ifndef __TCHAR_DEFINED #ifdef WINE_UNICODE_NATIVE typedef wchar_t _TCHAR; #else typedef unsigned short _TCHAR; #endif typedef _TCHAR _TUCHAR; typedef _TCHAR _TSCHAR; typedef _TCHAR _TXCHAR; typedef _TCHAR _TINT; #define __TCHAR_DEFINED #endif #else /* _UNICODE */ #ifndef __TCHAR_DEFINED typedef char _TCHAR; typedef unsigned char _TUCHAR; typedef signed char _TSCHAR; #ifndef _MBCS typedef unsigned char _TXCHAR; typedef int _TINT; #else typedef char _TXCHAR; typedef unsigned int _TINT; #endif #endif #endif #ifndef _TCHAR_DEFINED typedef _TCHAR TCHAR, *PTCHAR; #define _TCHAR_DEFINED #endif #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __WINE_TCHAR_H */ ================================================ FILE: wine/windows/tcpestats.h ================================================ /* * Copyright (C) 2015 Bruno Jesus * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _TCPESTATS_ #define _TCPESTATS_ /* Values used in Get/SetPerTcpConnectionEStats */ typedef enum { TcpConnectionEstatsSynOpts, TcpConnectionEstatsData, TcpConnectionEstatsSndCong, TcpConnectionEstatsPath, TcpConnectionEstatsSendBuff, TcpConnectionEstatsRec, TcpConnectionEstatsObsRec, TcpConnectionEstatsBandwidth, TcpConnectionEstatsFineRtt, TcpConnectionEstatsMaximum } TCP_ESTATS_TYPE; #endif /* _TCPESTATS_ */ ================================================ FILE: wine/windows/tcpmib.h ================================================ /* * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_TCPMIB_H #define __WINE_TCPMIB_H #define TCPIP_OWNING_MODULE_SIZE 16 /* TCP tables */ typedef enum { MIB_TCP_STATE_CLOSED = 1, MIB_TCP_STATE_LISTEN = 2, MIB_TCP_STATE_SYN_SENT = 3, MIB_TCP_STATE_SYN_RCVD = 4, MIB_TCP_STATE_ESTAB = 5, MIB_TCP_STATE_FIN_WAIT1 = 6, MIB_TCP_STATE_FIN_WAIT2 = 7, MIB_TCP_STATE_CLOSE_WAIT = 8, MIB_TCP_STATE_CLOSING = 9, MIB_TCP_STATE_LAST_ACK = 10, MIB_TCP_STATE_TIME_WAIT = 11, MIB_TCP_STATE_DELETE_TCB = 12, } MIB_TCP_STATE; typedef enum { TcpConnectionOffloadStateInHost, TcpConnectionOffloadStateOffloading, TcpConnectionOffloadStateOffloaded, TcpConnectionOffloadStateUploading, TcpConnectionOffloadStateMax, } TCP_CONNECTION_OFFLOAD_STATE, *PTCP_CONNECTION_OFFLOAD_STATE; typedef struct _MIB_TCPROW { union { DWORD dwState; MIB_TCP_STATE State; } DUMMYUNIONNAME; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; } MIB_TCPROW, *PMIB_TCPROW; typedef struct _MIB_TCPTABLE { DWORD dwNumEntries; MIB_TCPROW table[1]; } MIB_TCPTABLE, *PMIB_TCPTABLE; typedef struct _MIB_TCP6ROW { MIB_TCP_STATE State; IN6_ADDR LocalAddr; DWORD dwLocalScopeId; DWORD dwLocalPort; IN6_ADDR RemoteAddr; DWORD dwRemoteScopeId; DWORD dwRemotePort; } MIB_TCP6ROW, *PMIB_TCP6ROW; typedef struct _MIB_TCP6TABLE { DWORD dwNumEntries; MIB_TCP6ROW table[1]; } MIB_TCP6TABLE, *PMIB_TCP6TABLE; typedef struct _MIB_TCP6ROW2 { IN6_ADDR LocalAddr; DWORD dwLocalScopeId; DWORD dwLocalPort; IN6_ADDR RemoteAddr; DWORD dwRemoteScopeId; DWORD dwRemotePort; MIB_TCP_STATE State; DWORD dwOwningPid; TCP_CONNECTION_OFFLOAD_STATE dwOffloadState; } MIB_TCP6ROW2, *PMIB_TCP6ROW2; typedef struct _MIB_TCP6TABLE2 { DWORD dwNumEntries; MIB_TCP6ROW2 table[1]; } MIB_TCP6TABLE2, *PMIB_TCP6TABLE2; typedef struct _MIB_TCPROW_OWNER_PID { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwOwningPid; } MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID; typedef struct _MIB_TCPTABLE_OWNER_PID { DWORD dwNumEntries; MIB_TCPROW_OWNER_PID table[1]; } MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID; typedef struct _MIB_TCPROW_OWNER_MODULE { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwOwningPid; LARGE_INTEGER liCreateTimestamp; ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE]; } MIB_TCPROW_OWNER_MODULE, *PMIB_TCPROW_OWNER_MODULE; typedef struct _MIB_TCPTABLE_OWNER_MODULE { DWORD dwNumEntries; MIB_TCPROW_OWNER_MODULE table[1]; } MIB_TCPTABLE_OWNER_MODULE, *PMIB_TCPTABLE_OWNER_MODULE; typedef struct _MIB_TCPROW2 { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwOwningPid; TCP_CONNECTION_OFFLOAD_STATE dwOffloadState; } MIB_TCPROW2, *PMIB_TCPROW2; typedef struct _MIB_TCPTABLE2 { DWORD dwNumEntries; MIB_TCPROW2 table[1]; } MIB_TCPTABLE2, *PMIB_TCPTABLE2; /* TCP stats */ typedef enum { TcpRtoAlgorithmOther = 0, TcpRtoAlgorithmConstant = 1, TcpRtoAlgorithmRsre = 2, TcpRtoAlgorithmVanj = 3, MIB_TCP_RTO_OTHER = 1, MIB_TCP_RTO_CONSTANT = 2, MIB_TCP_RTO_RSRE = 3, MIB_TCP_RTO_VANJ = 4, } TCP_RTO_ALGORITHM, *PTCP_RTO_ALGORITHM; typedef struct _MIB_TCPSTATS { union { DWORD dwRtoAlgorithm; TCP_RTO_ALGORITHM RtoAlgorithm; } DUMMYUNIONNAME; DWORD dwRtoMin; DWORD dwRtoMax; DWORD dwMaxConn; DWORD dwActiveOpens; DWORD dwPassiveOpens; DWORD dwAttemptFails; DWORD dwEstabResets; DWORD dwCurrEstab; DWORD dwInSegs; DWORD dwOutSegs; DWORD dwRetransSegs; DWORD dwInErrs; DWORD dwOutRsts; DWORD dwNumConns; } MIB_TCPSTATS, *PMIB_TCPSTATS; #endif /* __WINE_TCPMIB_H */ ================================================ FILE: wine/windows/textserv.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _TEXTSERV_H #define _TEXTSERV_H #ifdef __cplusplus extern "C" { #endif EXTERN_C const IID IID_ITextServices; EXTERN_C const IID IID_ITextHost; /***************************************************************************** * ITextServices interface */ #define INTERFACE ITextServices DECLARE_INTERFACE_(ITextServices,IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** ITextServices methods ***/ STDMETHOD(TxSendMessage)( THIS_ UINT msg, WPARAM wparam, LPARAM lparam, LRESULT* plresult) PURE; STDMETHOD(TxDraw)( THIS_ DWORD dwDrawAspect, LONG lindex, void* pvAspect, DVTARGETDEVICE* ptd, HDC hdcDraw, HDC hicTargetDev, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, LPRECT lprcUpdate, BOOL (CALLBACK * pfnContinue)(DWORD), DWORD dwContinue, LONG lViewId) PURE; STDMETHOD(TxGetHScroll)( THIS_ LONG* plMin, LONG* plMax, LONG* plPos, LONG* plPage, BOOL* pfEnabled) PURE; STDMETHOD(TxGetVScroll)( THIS_ LONG* plMin, LONG* plMax, LONG* plPos, LONG* plPage, BOOL* pfEnabled) PURE; STDMETHOD(OnTxSetCursor)( THIS_ DWORD dwDrawAspect, LONG lindex, void* pvAspect, DVTARGETDEVICE* ptd, HDC hdcDraw, HDC hicTargetDev, LPCRECT lprcClient, INT x, INT y) PURE; STDMETHOD(TxQueryHitPoint)( THIS_ DWORD dwDrawAspect, LONG lindex, void* pvAspect, DVTARGETDEVICE* ptd, HDC hdcDraw, HDC hicTargetDev, LPCRECT lprcClient, INT x, INT y, DWORD* pHitResult) PURE; STDMETHOD(OnTxInplaceActivate)( THIS_ LPCRECT prcClient) PURE; STDMETHOD(OnTxInplaceDeactivate)( THIS ) PURE; STDMETHOD(OnTxUIActivate)( THIS ) PURE; STDMETHOD(OnTxUIDeactivate)( THIS ) PURE; STDMETHOD(TxGetText)( THIS_ BSTR* pbstrText) PURE; STDMETHOD(TxSetText)( THIS_ LPCWSTR pszText) PURE; STDMETHOD(TxGetCurTargetX)( THIS_ LONG* x) PURE; STDMETHOD(TxGetBaseLinePos)( THIS_ LONG* x) PURE; STDMETHOD(TxGetNaturalSize)( THIS_ DWORD dwAspect, HDC hdcDraw, HDC hicTargetDev, DVTARGETDEVICE* ptd, DWORD dwMode, const SIZEL* psizelExtent, LONG* pwidth, LONG* pheight) PURE; STDMETHOD(TxGetDropTarget)( THIS_ IDropTarget** ppDropTarget) PURE; STDMETHOD(OnTxPropertyBitsChange)( THIS_ DWORD dwMask, DWORD dwBits) PURE; STDMETHOD(TxGetCachedSize)( THIS_ DWORD* pdwWidth, DWORD* pdwHeight) PURE; }; #undef INTERFACE #ifdef COBJMACROS /*** IUnknown methods ***/ #define ITextServices_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ITextServices_AddRef(p) (p)->lpVtbl->AddRef(p) #define ITextServices_Release(p) (p)->lpVtbl->Release(p) #endif typedef enum _TXTBACKSTYLE { TXTBACK_TRANSPARENT = 0, TXTBACK_OPAQUE } TXTBACKSTYLE; enum TXTHITRESULT { TXTHITRESULT_NOHIT = 0, TXTHITRESULT_TRANSPARENT = 1, TXTHITRESULT_CLOSE = 2, TXTHITRESULT_HIT = 3 }; enum TXTNATURALSIZE { TXTNS_FITTOCONTENT = 1, TXTNS_ROUNDTOLINE = 2 }; enum TXTVIEW { TXTVIEW_ACTIVE = 0, TXTVIEW_INACTIVE = 1 }; #define TXTBIT_RICHTEXT 0x000001 #define TXTBIT_MULTILINE 0x000002 #define TXTBIT_READONLY 0x000004 #define TXTBIT_SHOWACCELERATOR 0x000008 #define TXTBIT_USEPASSWORD 0x000010 #define TXTBIT_HIDESELECTION 0x000020 #define TXTBIT_SAVESELECTION 0x000040 #define TXTBIT_AUTOWORDSEL 0x000080 #define TXTBIT_VERTICAL 0x000100 #define TXTBIT_SELBARCHANGE 0x000200 #define TXTBIT_WORDWRAP 0x000400 #define TXTBIT_ALLOWBEEP 0x000800 #define TXTBIT_DISABLEDRAG 0x001000 #define TXTBIT_VIEWINSETCHANGE 0x002000 #define TXTBIT_BACKSTYLECHANGE 0x004000 #define TXTBIT_MAXLENGTHCHANGE 0x008000 #define TXTBIT_SCROLLBARCHANGE 0x010000 #define TXTBIT_CHARFORMATCHANGE 0x020000 #define TXTBIT_PARAFORMATCHANGE 0x040000 #define TXTBIT_EXTENTCHANGE 0x080000 #define TXTBIT_CLIENTRECTCHANGE 0x100000 #define TXTBIT_USECURRENTBKG 0x200000 /***************************************************************************** * ITextHost interface */ #define INTERFACE ITextHost DECLARE_INTERFACE_(ITextHost,IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** ITextHost methods ***/ STDMETHOD_(HDC,TxGetDC)( THIS ) PURE; STDMETHOD_(INT,TxReleaseDC)( THIS_ HDC hdc) PURE; STDMETHOD_(BOOL,TxShowScrollBar)( THIS_ INT fnBar, BOOL fShow) PURE; STDMETHOD_(BOOL,TxEnableScrollBar)( THIS_ INT fuSBFlags, INT fuArrowflags) PURE; STDMETHOD_(BOOL,TxSetScrollRange)( THIS_ INT fnBar, LONG nMinPos, INT nMaxPos, BOOL fRedraw) PURE; STDMETHOD_(BOOL,TxSetScrollPos)( THIS_ INT fnBar, INT nPos, BOOL fRedraw) PURE; STDMETHOD_(void,TxInvalidateRect)( THIS_ LPCRECT prc, BOOL fMode) PURE; STDMETHOD_(void,TxViewChange)( THIS_ BOOL fUpdate) PURE; STDMETHOD_(BOOL,TxCreateCaret)( THIS_ HBITMAP hbmp, INT xWidth, INT yHeight) PURE; STDMETHOD_(BOOL,TxShowCaret)( THIS_ BOOL fShow) PURE; STDMETHOD_(BOOL,TxSetCaretPos)( THIS_ INT x, INT y) PURE; STDMETHOD_(BOOL,TxSetTimer)( THIS_ UINT idTimer, UINT uTimeout) PURE; STDMETHOD_(void,TxKillTimer)( THIS_ UINT idTimer) PURE; STDMETHOD_(void,TxScrollWindowEx)( THIS_ INT dx, INT dy, LPCRECT lprcScroll, LPCRECT lprcClip, HRGN hRgnUpdate, LPRECT lprcUpdate, UINT fuScroll) PURE; STDMETHOD_(void,TxSetCapture)( THIS_ BOOL fCapture) PURE; STDMETHOD_(void,TxSetFocus)( THIS ) PURE; STDMETHOD_(void,TxSetCursor)( THIS_ HCURSOR hcur, BOOL fText) PURE; STDMETHOD_(BOOL,TxScreenToClient)( THIS_ LPPOINT lppt) PURE; STDMETHOD_(BOOL,TxClientToScreen)( THIS_ LPPOINT lppt) PURE; STDMETHOD(TxActivate)( THIS_ LONG* plOldState) PURE; STDMETHOD(TxDeactivate)( THIS_ LONG lNewState) PURE; STDMETHOD(TxGetClientRect)( THIS_ LPRECT prc) PURE; STDMETHOD(TxGetViewInset)( THIS_ LPRECT prc) PURE; STDMETHOD(TxGetCharFormat)( THIS_ const CHARFORMATW** ppCF) PURE; STDMETHOD(TxGetParaFormat)( THIS_ const PARAFORMAT** ppPF) PURE; STDMETHOD_(COLORREF,TxGetSysColor)( THIS_ int nIndex) PURE; STDMETHOD(TxGetBackStyle)( THIS_ TXTBACKSTYLE* pStyle) PURE; STDMETHOD(TxGetMaxLength)( THIS_ DWORD* plength) PURE; STDMETHOD(TxGetScrollBars)( THIS_ DWORD* pdwScrollBar) PURE; STDMETHOD(TxGetPasswordChar)( THIS_ WCHAR* pch) PURE; STDMETHOD(TxGetAcceleratorPos)( THIS_ LONG* pch) PURE; STDMETHOD(TxGetExtent)( THIS_ LPSIZEL lpExtent) PURE; STDMETHOD(OnTxCharFormatChange)( THIS_ const CHARFORMATW* pcf) PURE; STDMETHOD(OnTxParaFormatChange)( THIS_ const PARAFORMAT* ppf) PURE; STDMETHOD(TxGetPropertyBits)( THIS_ DWORD dwMask, DWORD* pdwBits) PURE; STDMETHOD(TxNotify)( THIS_ DWORD iNotify, void* pv) PURE; STDMETHOD_(HIMC,TxImmGetContext)( THIS ) PURE; STDMETHOD_(void,TxImmReleaseContext)( THIS_ HIMC himc) PURE; STDMETHOD(TxGetSelectionBarWidth)( THIS_ LONG* lSelBarWidth) PURE; }; #undef INTERFACE #ifdef COBJMACROS /*** IUnknown methods ***/ #define ITextHost_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define ITextHost_AddRef(p) (p)->lpVtbl->AddRef(p) #define ITextHost_Release(p) (p)->lpVtbl->Release(p) #endif HRESULT WINAPI CreateTextServices(IUnknown*,ITextHost*,IUnknown**); typedef HRESULT (WINAPI *PCreateTextServices)(IUnknown*,ITextHost*,IUnknown**); #ifdef __cplusplus } #endif #endif /* _TEXTSERV_H */ ================================================ FILE: wine/windows/textstor.idl ================================================ /* * Copyright 2009 Aric Stewart, CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "oaidl.idl"; #endif cpp_quote("#define TS_E_INVALIDPOS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200)") cpp_quote("#define TS_E_NOLOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)") cpp_quote("#define TS_E_NOOBJECT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202)") cpp_quote("#define TS_E_NOSERVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0203)") cpp_quote("#define TS_E_NOINTERFACE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0204)") cpp_quote("#define TS_E_NOSELECTION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0205)") cpp_quote("#define TS_E_NOLAYOUT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0206)") cpp_quote("#define TS_E_INVALIDPOINT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0207)") cpp_quote("#define TS_E_SYNCHRONOUS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0208)") cpp_quote("#define TS_E_READONLY MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0209)") cpp_quote("#define TS_E_FORMAT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x020a)") cpp_quote("#define TS_S_ASYNC MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x0300)") const ULONG TS_DEFAULT_SELECTION = ~0u; const DWORD TS_SD_READONLY = 0x001; const DWORD TS_SD_LOADING = 0x002; const DWORD TS_SS_DISJOINTSEL = 0x001; const DWORD TS_SS_REGIONS = 0x002; const DWORD TS_SS_TRANSITORY = 0x004; const DWORD TS_SS_NOHIDDENTEXT = 0x008; const DWORD TS_AS_TEXT_CHANGE = 0x01; const DWORD TS_AS_SEL_CHANGE = 0x02; const DWORD TS_AS_LAYOUT_CHANGE = 0x04; const DWORD TS_AS_ATTR_CHANGE = 0x08; const DWORD TS_AS_STATUS_CHANGE = 0x10; const 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); const DWORD TS_LF_SYNC = 0x1; const DWORD TS_LF_READ = 0x2; const DWORD TS_LF_READWRITE = 0x6; const WCHAR TS_CHAR_EMBEDDED = 0xfffc; const WCHAR TS_CHAR_REGION = 0x0000; const WCHAR TS_CHAR_REPLACEMENT = 0xfffd; const DWORD TS_IAS_NOQUERY = 0x1; const DWORD TS_IAS_QUERYONLY = 0x2; const DWORD TS_ST_CORRECTION = 0x1; const DWORD GXFPF_ROUND_NEAREST = 0x1; const DWORD GXFPF_NEAREST = 0x2; typedef [uuid(05fcf85b-5e9c-4c3e-ab71-29471d4f38e7)] enum { TS_AE_NONE, TS_AE_START, TS_AE_END } TsActiveSelEnd; typedef [uuid(033b0df0-f193-4170-b47b-141afc247878)] enum { TS_RT_PLAIN, TS_RT_HIDDEN, TS_RT_OPAQUE } TsRunType; typedef [uuid(ef3457d9-8446-49a7-a9e6-b50d9d5f3fd9)] GUID TS_ATTRID; typedef [uuid(fec4f516-c503-45b1-a5fd-7a3d8ab07049)] struct TS_STATUS { DWORD dwDynamicFlags; DWORD dwStaticFlags; } TS_STATUS; typedef [uuid(f3181bd6-bcf0-41d3-a81c-474b17ec38fb)] struct TS_TEXTCHANGE { LONG acpStart; LONG acpOldEnd; LONG acpNewEnd; } TS_TEXTCHANGE; typedef [uuid(7ecc3ffa-8f73-4d91-98ed-76f8ac5b1600)] struct TS_SELECTIONSTYLE { TsActiveSelEnd ase; BOOL fInterimChar; } TS_SELECTIONSTYLE; typedef [uuid(c4b9c33b-8a0d-4426-bebe-d444a4701fe9)] struct TS_SELECTION_ACP { LONG acpStart; LONG acpEnd; TS_SELECTIONSTYLE style; } TS_SELECTION_ACP; typedef [uuid(a6231949-37c5-4b74-a24e-2a26c327201d)] struct TS_RUNINFO { ULONG uCount; TsRunType type; } TS_RUNINFO; typedef [uuid(2cc2b33f-1174-4507-b8d9-5bc0eb37c197)] struct TS_ATTRVAL { TS_ATTRID idAttr; DWORD dwOverlapId; VARIANT varValue; } TS_ATTRVAL; const DWORD TS_ATTR_FIND_BACKWARDS = 0x0001; const DWORD TS_ATTR_FIND_WANT_OFFSET = 0x0002; const DWORD TS_ATTR_FIND_UPDATESTART = 0x0004; const DWORD TS_ATTR_FIND_WANT_VALUE = 0x0008; const DWORD TS_ATTR_FIND_WANT_END = 0x0010; const DWORD TS_ATTR_FIND_HIDDEN = 0x0020; typedef [uuid(7899d7c4-5f07-493c-a89a-fac8e777f476)] enum { TS_LC_CREATE, TS_LC_CHANGE, TS_LC_DESTROY } TsLayoutCode; typedef [uuid(1faf509e-44c1-458e-950a-38a96705a62b)] DWORD TsViewCookie; [ object, uuid(22d44c94-a419-4542-a272-ae26093ececf), pointer_default(unique) ] interface ITextStoreACPSink : IUnknown { HRESULT OnTextChange( [in] DWORD dwFlags, [in] const TS_TEXTCHANGE *pChange); HRESULT OnSelectionChange(); HRESULT OnLayoutChange( [in] TsLayoutCode lcode, [in] TsViewCookie vcView); HRESULT OnStatusChange( [in] DWORD dwFlags); HRESULT OnAttrsChange( [in] LONG acpStart, [in] LONG acpEnd, [in] ULONG cAttrs, [in, size_is(cAttrs)] const TS_ATTRID *paAttrs); HRESULT OnLockGranted( [in] DWORD dwLockFlags); HRESULT OnStartEditTransaction(); HRESULT OnEndEditTransaction(); } [ object, uuid(28888fe3-c2a0-483a-a3ea-8cb1ce51ff3d), pointer_default(unique) ] interface ITextStoreACP : IUnknown { HRESULT AdviseSink( [in] REFIID riid, [in, iid_is(riid)] IUnknown *punk, [in] DWORD dwMask); HRESULT UnadviseSink( [in] IUnknown *punk); HRESULT RequestLock( [in] DWORD dwLockFlags, [out] HRESULT *phrSession); HRESULT GetStatus( [out] TS_STATUS *pdcs); HRESULT QueryInsert( [in] LONG acpTestStart, [in] LONG acpTestEnd, [in] ULONG cch, [out] LONG *pacpResultStart, [out] LONG *pacpResultEnd); HRESULT GetSelection( [in] ULONG ulIndex, [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] TS_SELECTION_ACP *pSelection, [out] ULONG *pcFetched); HRESULT SetSelection( [in] ULONG ulCount, [in, size_is(ulCount)] const TS_SELECTION_ACP *pSelection); HRESULT GetText( [in] LONG acpStart, [in] LONG acpEnd, [out, size_is(cchPlainReq), length_is(*pcchPlainRet)] WCHAR *pchPlain, [in] ULONG cchPlainReq, [out] ULONG *pcchPlainRet, [out, size_is(cRunInfoReq), length_is(*pcRunInfoRet)] TS_RUNINFO *prgRunInfo, [in] ULONG cRunInfoReq, [out] ULONG *pcRunInfoRet, [out] LONG *pacpNext); HRESULT SetText( [in] DWORD dwFlags, [in] LONG acpStart, [in] LONG acpEnd, [in, size_is(cch)] const WCHAR *pchText, [in] ULONG cch, [out] TS_TEXTCHANGE *pChange); HRESULT GetFormattedText( [in] LONG acpStart, [in] LONG acpEnd, [out] IDataObject **ppDataObject); HRESULT GetEmbedded( [in] LONG acpPos, [in] REFGUID rguidService, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppunk); HRESULT QueryInsertEmbedded( [in] const GUID *pguidService, [in] const FORMATETC *pFormatEtc, [out] BOOL *pfInsertable); HRESULT InsertEmbedded( [in] DWORD dwFlags, [in] LONG acpStart, [in] LONG acpEnd, [in] IDataObject *pDataObject, [out] TS_TEXTCHANGE *pChange); HRESULT InsertTextAtSelection( [in] DWORD dwFlags, [in, size_is(cch)] const WCHAR *pchText, [in] ULONG cch, [out] LONG *pacpStart, [out] LONG *pacpEnd, [out] TS_TEXTCHANGE *pChange); HRESULT InsertEmbeddedAtSelection( [in] DWORD dwFlags, [in] IDataObject *pDataObject, [out] LONG *pacpStart, [out] LONG *pacpEnd, [out] TS_TEXTCHANGE *pChange); HRESULT RequestSupportedAttrs( [in] DWORD dwFlags, [in] ULONG cFilterAttrs, [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs); HRESULT RequestAttrsAtPosition( [in] LONG acpPos, [in] ULONG cFilterAttrs, [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs, [in] DWORD dwFlags); HRESULT RequestAttrsTransitioningAtPosition( [in] LONG acpPos, [in] ULONG cFilterAttrs, [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs, [in] DWORD dwFlags); HRESULT FindNextAttrTransition( [in] LONG acpStart, [in] LONG acpHalt, [in] ULONG cFilterAttrs, [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs, [in] DWORD dwFlags, [out] LONG *pacpNext, [out] BOOL *pfFound, [out] LONG *plFoundOffset); HRESULT RetrieveRequestedAttrs( [in] ULONG ulCount, [out, size_is(ulCount), length_is(*pcFetched)] TS_ATTRVAL *paAttrVals, [out] ULONG *pcFetched); HRESULT GetEndACP( [out] LONG *pacp); HRESULT GetActiveView( [out] TsViewCookie *pvcView); HRESULT GetACPFromPoint( [in] TsViewCookie vcView, [in] const POINT *ptScreen, [in] DWORD dwFlags, [out] LONG *pacp); HRESULT GetTextExt( [in] TsViewCookie vcView, [in] LONG acpStart, [in] LONG acpEnd, [out] RECT *prc, [out] BOOL *pfClipped); HRESULT GetScreenExt( [in] TsViewCookie vcView, [out] RECT *prc); HRESULT GetWnd( [in] TsViewCookie vcView, [out] HWND *phwnd); } ================================================ FILE: wine/windows/tlhelp32.h ================================================ /* * Copyright (C) 1998 Patrick Spinler * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_TLHELP32_H #define __WINE_TLHELP32_H #ifdef __cplusplus extern "C" { #endif /* * CreateToolhelp32Snapshot */ #define TH32CS_SNAPHEAPLIST 0x00000001 #define TH32CS_SNAPPROCESS 0x00000002 #define TH32CS_SNAPTHREAD 0x00000004 #define TH32CS_SNAPMODULE 0x00000008 #define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE) #define TH32CS_INHERIT 0x80000000 HANDLE WINAPI CreateToolhelp32Snapshot(DWORD,DWORD); /* * thread entry list as created by CreateToolHelp32Snapshot */ typedef struct tagTHREADENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ThreadID; DWORD th32OwnerProcessID; LONG tpBasePri; LONG tpDeltaPri; DWORD dwFlags; } THREADENTRY32, *PTHREADENTRY32, *LPTHREADENTRY32; BOOL WINAPI Thread32First(HANDLE,LPTHREADENTRY32); BOOL WINAPI Thread32Next(HANDLE,LPTHREADENTRY32); /* * Process entry list as created by CreateToolHelp32Snapshot */ typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; char szExeFile[MAX_PATH]; } PROCESSENTRY32, *PPROCESSENTRY32, *LPPROCESSENTRY32; typedef struct tagPROCESSENTRY32W { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; WCHAR szExeFile[MAX_PATH]; } PROCESSENTRY32W, *PPROCESSENTRY32W, *LPPROCESSENTRY32W; BOOL WINAPI Process32First(HANDLE,LPPROCESSENTRY32); BOOL WINAPI Process32FirstW(HANDLE,LPPROCESSENTRY32W); BOOL WINAPI Process32Next(HANDLE,LPPROCESSENTRY32); BOOL WINAPI Process32NextW(HANDLE,LPPROCESSENTRY32W); #ifdef UNICODE #define Process32First Process32FirstW #define Process32Next Process32NextW #define PROCESSENTRY32 PROCESSENTRY32W #define PPROCESSENTRY32 PPROCESSENTRY32W #define LPPROCESSENTRY32 LPPROCESSENTRY32W #endif /* * Module entry list as created by CreateToolHelp32Snapshot */ #define MAX_MODULE_NAME32 255 typedef struct tagMODULEENTRY32 { DWORD dwSize; DWORD th32ModuleID; DWORD th32ProcessID; DWORD GlblcntUsage; DWORD ProccntUsage; BYTE *modBaseAddr; DWORD modBaseSize; HMODULE hModule; char szModule[MAX_MODULE_NAME32 + 1]; char szExePath[MAX_PATH]; } MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32; typedef struct tagMODULEENTRY32W { DWORD dwSize; DWORD th32ModuleID; DWORD th32ProcessID; DWORD GlblcntUsage; DWORD ProccntUsage; BYTE *modBaseAddr; DWORD modBaseSize; HMODULE hModule; WCHAR szModule[MAX_MODULE_NAME32 + 1]; WCHAR szExePath[MAX_PATH]; } MODULEENTRY32W, *PMODULEENTRY32W, *LPMODULEENTRY32W; BOOL WINAPI Module32First(HANDLE,LPMODULEENTRY32); BOOL WINAPI Module32FirstW(HANDLE,LPMODULEENTRY32W); BOOL WINAPI Module32Next(HANDLE,LPMODULEENTRY32); BOOL WINAPI Module32NextW(HANDLE,LPMODULEENTRY32W); #ifdef UNICODE #define Module32First Module32FirstW #define Module32Next Module32NextW #define MODULEENTRY32 MODULEENTRY32W #define PMODULEENTRY32 PMODULEENTRY32W #define LPMODULEENTRY32 LPMODULEENTRY32W #endif typedef struct tagHEAPLIST32 { SIZE_T dwSize; DWORD th32ProcessID; ULONG_PTR th32HeapID; DWORD dwFlags; } HEAPLIST32, *PHEAPLIST32, *LPHEAPLIST32; #define HF32_DEFAULT 1 #define HF32_SHARED 2 BOOL WINAPI Heap32ListFirst(HANDLE,LPHEAPLIST32); BOOL WINAPI Heap32ListNext(HANDLE,LPHEAPLIST32); BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,SIZE_T,SIZE_T*); typedef struct tagHEAPENTRY32 { SIZE_T dwSize; HANDLE hHandle; ULONG_PTR dwAddress; SIZE_T dwBlockSize; DWORD dwFlags; DWORD dwLockCount; DWORD dwResvd; DWORD th32ProcessID; ULONG_PTR th32HeapID; } HEAPENTRY32, *PHEAPENTRY32, *LPHEAPENTRY32; BOOL WINAPI Heap32First(LPHEAPENTRY32,DWORD,ULONG_PTR); BOOL WINAPI Heap32Next(LPHEAPENTRY32); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __WINE_TLHELP32_H */ ================================================ FILE: wine/windows/tlogstg.idl ================================================ /* * Copyright 2012 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; import "shtypes.idl"; typedef struct _WINDOWDATA { DWORD dwWindowID; UINT uiCP; PIDLIST_ABSOLUTE pidl; [string] LPWSTR lpszUrl; [string] LPWSTR lpszUrlLocation; [string] LPWSTR lpszTitle; } WINDOWDATA; typedef WINDOWDATA *LPWINDOWDATA; typedef const WINDOWDATA *LPCWINDOWDATA; [ uuid(241c033e-e659-43da-aa4d-4086dbc4758d), object ] interface ITravelLogClient : IUnknown { HRESULT FindWindowByIndex( [in] DWORD dwID, [out] IUnknown **ppunk); HRESULT GetWindowData( [in] IStream *pStream, [out] LPWINDOWDATA pWinData); HRESULT LoadHistoryPosition( [in] LPWSTR pszUrlLocation, [in] DWORD dwPosition); } ================================================ FILE: wine/windows/tmschema.h ================================================ /* * Copyright (C) 2003 Kevin Koltzau * Copyright (C) 2004 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_TMSCHEMA_H #define __WINE_TMSCHEMA_H #include BEGIN_TM_SCHEMA(ThemeMgrSchema) /***** ENUMERATIONS *****/ /* BGTYPE Enum */ BEGIN_TM_ENUM(BGTYPE) TM_ENUM(0, BT, IMAGEFILE) TM_ENUM(1, BT, BORDERFILL) TM_ENUM(2, BT, NONE) END_TM_ENUM() /* IMAGELAYOUT Enum */ BEGIN_TM_ENUM(IMAGELAYOUT) TM_ENUM(0, IL, VERTICAL) TM_ENUM(1, IL, HORIZONTAL) END_TM_ENUM() /* BORDERTYPE Enum */ BEGIN_TM_ENUM(BORDERTYPE) TM_ENUM(0, BT, RECT) TM_ENUM(1, BT, ROUNDRECT) TM_ENUM(2, BT, ELLIPSE) END_TM_ENUM() /* FILLTYPE Enum */ BEGIN_TM_ENUM(FILLTYPE) TM_ENUM(0, FT, SOLID) TM_ENUM(1, FT, VERTGRADIENT) TM_ENUM(2, FT, HORZGRADIENT) TM_ENUM(3, FT, RADIALGRADIENT) TM_ENUM(4, FT, TILEIMAGE) END_TM_ENUM() /* SIZINGTYPE Enum */ BEGIN_TM_ENUM(SIZINGTYPE) TM_ENUM(0, ST, TRUESIZE) TM_ENUM(1, ST, STRETCH) TM_ENUM(2, ST, TILE) END_TM_ENUM() /* HALIGN Enum */ BEGIN_TM_ENUM(HALIGN) TM_ENUM(0, HA, LEFT) TM_ENUM(1, HA, CENTER) TM_ENUM(2, HA, RIGHT) END_TM_ENUM() /* CONTENTALIGNMENT Enum */ BEGIN_TM_ENUM(CONTENTALIGNMENT) TM_ENUM(0, CA, LEFT) TM_ENUM(1, CA, CENTER) TM_ENUM(2, CA, RIGHT) END_TM_ENUM() /* VALIGN Enum */ BEGIN_TM_ENUM(VALIGN) TM_ENUM(0, VA, TOP) TM_ENUM(1, VA, CENTER) TM_ENUM(2, VA, BOTTOM) END_TM_ENUM() /* OFFSETTYPE Enum */ BEGIN_TM_ENUM(OFFSETTYPE) TM_ENUM(0, OT, TOPLEFT) TM_ENUM(1, OT, TOPRIGHT) TM_ENUM(2, OT, TOPMIDDLE) TM_ENUM(3, OT, BOTTOMLEFT) TM_ENUM(4, OT, BOTTOMRIGHT) TM_ENUM(5, OT, BOTTOMMIDDLE) TM_ENUM(6, OT, MIDDLELEFT) TM_ENUM(7, OT, MIDDLERIGHT) TM_ENUM(8, OT, LEFTOFCAPTION) TM_ENUM(9, OT, RIGHTOFCAPTION) TM_ENUM(10, OT, LEFTOFLASTBUTTON) TM_ENUM(11, OT, RIGHTOFLASTBUTTON) TM_ENUM(12, OT, ABOVELASTBUTTON) TM_ENUM(13, OT, BELOWLASTBUTTON) END_TM_ENUM() /* ICONEFFECT Enum */ BEGIN_TM_ENUM(ICONEFFECT) TM_ENUM(0, ICE, NONE) TM_ENUM(1, ICE, GLOW) TM_ENUM(2, ICE, SHADOW) TM_ENUM(3, ICE, PULSE) TM_ENUM(4, ICE, ALPHA) END_TM_ENUM() /* TEXTSHADOWTYPE Enum */ BEGIN_TM_ENUM(TEXTSHADOWTYPE) TM_ENUM(0, TST, NONE) TM_ENUM(1, TST, SINGLE) TM_ENUM(2, TST, CONTINUOUS) END_TM_ENUM() /* GLYPHTYPE Enum */ BEGIN_TM_ENUM(GLYPHTYPE) TM_ENUM(0, GT, NONE) TM_ENUM(1, GT, IMAGEGLYPH) TM_ENUM(2, GT, FONTGLYPH) END_TM_ENUM() /* IMAGESELECTTYPE Enum */ BEGIN_TM_ENUM(IMAGESELECTTYPE) TM_ENUM(0, IST, NONE) TM_ENUM(1, IST, SIZE) TM_ENUM(2, IST, DPI) END_TM_ENUM() /* TRUESIZESCALINGTYPE Enum */ BEGIN_TM_ENUM(TRUESIZESCALINGTYPE) TM_ENUM(0, TSST, NONE) TM_ENUM(1, TSST, SIZE) TM_ENUM(2, TSST, DPI) END_TM_ENUM() /* GLYPHFONTSIZINGTYPE Enum */ BEGIN_TM_ENUM(GLYPHFONTSIZINGTYPE) TM_ENUM(0, GFST, NONE) TM_ENUM(1, GFST, SIZE) TM_ENUM(2, GFST, DPI) END_TM_ENUM() /***** PROPERTIES *****/ BEGIN_TM_PROPS() /* Primitive types */ TM_PROP(201, TMT, STRING, STRING) TM_PROP(202, TMT, INT, INT) TM_PROP(203, TMT, BOOL, BOOL) TM_PROP(204, TMT, COLOR, COLOR) TM_PROP(205, TMT, MARGINS, MARGINS) TM_PROP(206, TMT, FILENAME, FILENAME) TM_PROP(207, TMT, SIZE, SIZE) TM_PROP(208, TMT, POSITION, POSITION) TM_PROP(209, TMT, RECT, RECT) TM_PROP(210, TMT, FONT, FONT) TM_PROP(211, TMT, INTLIST, INTLIST) /* we should have ENUM around here */ /* Misc properties */ TM_PROP(401, TMT, COLORSCHEMES, STRING) TM_PROP(402, TMT, SIZES, STRING) TM_PROP(403, TMT, CHARSET, INT) /* Documentation properties */ TM_PROP(601, TMT, DISPLAYNAME, STRING) TM_PROP(602, TMT, TOOLTIP, STRING) TM_PROP(603, TMT, COMPANY, STRING) TM_PROP(604, TMT, AUTHOR, STRING) TM_PROP(605, TMT, COPYRIGHT, STRING) TM_PROP(606, TMT, URL, STRING) TM_PROP(607, TMT, VERSION, STRING) TM_PROP(608, TMT, DESCRIPTION, STRING) # define TMT_FIRST_RCSTRING_NAME TMT_DISPLAYNAME # define TMT_LAST_RCSTRING_NAME TMT_DESCRIPTION /* Font theme metric properties */ TM_PROP(801, TMT, CAPTIONFONT, FONT) TM_PROP(802, TMT, SMALLCAPTIONFONT, FONT) TM_PROP(803, TMT, MENUFONT, FONT) TM_PROP(804, TMT, STATUSFONT, FONT) TM_PROP(805, TMT, MSGBOXFONT, FONT) TM_PROP(806, TMT, ICONTITLEFONT, FONT) # define TMT_FIRSTFONT TMT_CAPTIONFONT # define TMT_LASTFONT TMT_ICONTITLEFONT /* Bool theme metric properties */ TM_PROP(1001, TMT, FLATMENUS, BOOL) # define TMT_FIRSTBOOL TMT_FLATMENUS # define TMT_LASTBOOL TMT_FLATMENUS /* Size theme metric properties */ TM_PROP(1201, TMT, SIZINGBORDERWIDTH, SIZE) TM_PROP(1202, TMT, SCROLLBARWIDTH, SIZE) TM_PROP(1203, TMT, SCROLLBARHEIGHT, SIZE) TM_PROP(1204, TMT, CAPTIONBARWIDTH, SIZE) TM_PROP(1205, TMT, CAPTIONBARHEIGHT, SIZE) TM_PROP(1206, TMT, SMCAPTIONBARWIDTH, SIZE) TM_PROP(1207, TMT, SMCAPTIONBARHEIGHT, SIZE) TM_PROP(1208, TMT, MENUBARWIDTH, SIZE) TM_PROP(1209, TMT, MENUBARHEIGHT, SIZE) # define TMT_FIRSTSIZE TMT_SIZINGBORDERWIDTH # define TMT_LASTSIZE TMT_MENUBARHEIGHT /* Int theme metric properties */ TM_PROP(1301, TMT, MINCOLORDEPTH, INT) # define TMT_FIRSTINT TMT_MINCOLORDEPTH # define TMT_LASTINT TMT_MINCOLORDEPTH /* String theme metric properties */ TM_PROP(1401, TMT, CSSNAME, STRING) TM_PROP(1402, TMT, XMLNAME, STRING) # define TMT_FIRSTSTRING TMT_CSSNAME # define TMT_LASTSTRING TMT_XMLNAME /* Color theme metric properties */ TM_PROP(1601, TMT, SCROLLBAR, COLOR) TM_PROP(1602, TMT, BACKGROUND, COLOR) TM_PROP(1603, TMT, ACTIVECAPTION, COLOR) TM_PROP(1604, TMT, INACTIVECAPTION, COLOR) TM_PROP(1605, TMT, MENU, COLOR) TM_PROP(1606, TMT, WINDOW, COLOR) TM_PROP(1607, TMT, WINDOWFRAME, COLOR) TM_PROP(1608, TMT, MENUTEXT, COLOR) TM_PROP(1609, TMT, WINDOWTEXT, COLOR) TM_PROP(1610, TMT, CAPTIONTEXT, COLOR) TM_PROP(1611, TMT, ACTIVEBORDER, COLOR) TM_PROP(1612, TMT, INACTIVEBORDER, COLOR) TM_PROP(1613, TMT, APPWORKSPACE, COLOR) TM_PROP(1614, TMT, HIGHLIGHT, COLOR) TM_PROP(1615, TMT, HIGHLIGHTTEXT, COLOR) TM_PROP(1616, TMT, BTNFACE, COLOR) TM_PROP(1617, TMT, BTNSHADOW, COLOR) TM_PROP(1618, TMT, GRAYTEXT, COLOR) TM_PROP(1619, TMT, BTNTEXT, COLOR) TM_PROP(1620, TMT, INACTIVECAPTIONTEXT, COLOR) TM_PROP(1621, TMT, BTNHIGHLIGHT, COLOR) TM_PROP(1622, TMT, DKSHADOW3D, COLOR) TM_PROP(1623, TMT, LIGHT3D, COLOR) TM_PROP(1624, TMT, INFOTEXT, COLOR) TM_PROP(1625, TMT, INFOBK, COLOR) TM_PROP(1626, TMT, BUTTONALTERNATEFACE, COLOR) TM_PROP(1627, TMT, HOTTRACKING, COLOR) TM_PROP(1628, TMT, GRADIENTACTIVECAPTION, COLOR) TM_PROP(1629, TMT, GRADIENTINACTIVECAPTION, COLOR) TM_PROP(1630, TMT, MENUHILIGHT, COLOR) TM_PROP(1631, TMT, MENUBAR, COLOR) # define TMT_FIRSTCOLOR TMT_SCROLLBAR # define TMT_LASTCOLOR TMT_MENUBAR /* hue substitutions */ TM_PROP(1801, TMT, FROMHUE1, INT) TM_PROP(1802, TMT, FROMHUE2, INT) TM_PROP(1803, TMT, FROMHUE3, INT) TM_PROP(1804, TMT, FROMHUE4, INT) TM_PROP(1805, TMT, FROMHUE5, INT) TM_PROP(1806, TMT, TOHUE1, INT) TM_PROP(1807, TMT, TOHUE2, INT) TM_PROP(1808, TMT, TOHUE3, INT) TM_PROP(1809, TMT, TOHUE4, INT) TM_PROP(1810, TMT, TOHUE5, INT) /* color substitutions */ TM_PROP(2001, TMT, FROMCOLOR1, COLOR) TM_PROP(2002, TMT, FROMCOLOR2, COLOR) TM_PROP(2003, TMT, FROMCOLOR3, COLOR) TM_PROP(2004, TMT, FROMCOLOR4, COLOR) TM_PROP(2005, TMT, FROMCOLOR5, COLOR) TM_PROP(2006, TMT, TOCOLOR1, COLOR) TM_PROP(2007, TMT, TOCOLOR2, COLOR) TM_PROP(2008, TMT, TOCOLOR3, COLOR) TM_PROP(2009, TMT, TOCOLOR4, COLOR) TM_PROP(2010, TMT, TOCOLOR5, COLOR) /* Bool rendering properties */ TM_PROP(2201, TMT, TRANSPARENT, BOOL) TM_PROP(2202, TMT, AUTOSIZE, BOOL) TM_PROP(2203, TMT, BORDERONLY, BOOL) TM_PROP(2204, TMT, COMPOSITED, BOOL) TM_PROP(2205, TMT, BGFILL, BOOL) TM_PROP(2206, TMT, GLYPHTRANSPARENT, BOOL) TM_PROP(2207, TMT, GLYPHONLY, BOOL) TM_PROP(2208, TMT, ALWAYSSHOWSIZINGBAR, BOOL) TM_PROP(2209, TMT, MIRRORIMAGE, BOOL) TM_PROP(2210, TMT, UNIFORMSIZING, BOOL) TM_PROP(2211, TMT, INTEGRALSIZING, BOOL) TM_PROP(2212, TMT, SOURCEGROW, BOOL) TM_PROP(2213, TMT, SOURCESHRINK, BOOL) /* Int rendering properties */ TM_PROP(2401, TMT, IMAGECOUNT, INT) TM_PROP(2402, TMT, ALPHALEVEL, INT) TM_PROP(2403, TMT, BORDERSIZE, INT) TM_PROP(2404, TMT, ROUNDCORNERWIDTH, INT) TM_PROP(2405, TMT, ROUNDCORNERHEIGHT, INT) TM_PROP(2406, TMT, GRADIENTRATIO1, INT) TM_PROP(2407, TMT, GRADIENTRATIO2, INT) TM_PROP(2408, TMT, GRADIENTRATIO3, INT) TM_PROP(2409, TMT, GRADIENTRATIO4, INT) TM_PROP(2410, TMT, GRADIENTRATIO5, INT) TM_PROP(2411, TMT, PROGRESSCHUNKSIZE, INT) TM_PROP(2412, TMT, PROGRESSSPACESIZE, INT) TM_PROP(2413, TMT, SATURATION, INT) TM_PROP(2414, TMT, TEXTBORDERSIZE, INT) TM_PROP(2415, TMT, ALPHATHRESHOLD, INT) TM_PROP(2416, TMT, WIDTH, SIZE) TM_PROP(2417, TMT, HEIGHT, SIZE) TM_PROP(2418, TMT, GLYPHINDEX, INT) TM_PROP(2419, TMT, TRUESIZESTRETCHMARK, INT) TM_PROP(2420, TMT, MINDPI1, INT) TM_PROP(2421, TMT, MINDPI2, INT) TM_PROP(2422, TMT, MINDPI3, INT) TM_PROP(2423, TMT, MINDPI4, INT) TM_PROP(2424, TMT, MINDPI5, INT) /* Font rendering properties */ TM_PROP(2601, TMT, GLYPHFONT, FONT) /* Filename rendering properties */ TM_PROP(3001, TMT, IMAGEFILE, FILENAME) TM_PROP(3002, TMT, IMAGEFILE1, FILENAME) TM_PROP(3003, TMT, IMAGEFILE2, FILENAME) TM_PROP(3004, TMT, IMAGEFILE3, FILENAME) TM_PROP(3005, TMT, IMAGEFILE4, FILENAME) TM_PROP(3006, TMT, IMAGEFILE5, FILENAME) TM_PROP(3007, TMT, STOCKIMAGEFILE, FILENAME) TM_PROP(3008, TMT, GLYPHIMAGEFILE, FILENAME) /* String rendering properties */ TM_PROP(3201, TMT, TEXT, STRING) /* Position rendering properties */ TM_PROP(3401, TMT, OFFSET, POSITION) TM_PROP(3402, TMT, TEXTSHADOWOFFSET, POSITION) TM_PROP(3403, TMT, MINSIZE, POSITION) TM_PROP(3404, TMT, MINSIZE1, POSITION) TM_PROP(3405, TMT, MINSIZE2, POSITION) TM_PROP(3406, TMT, MINSIZE3, POSITION) TM_PROP(3407, TMT, MINSIZE4, POSITION) TM_PROP(3408, TMT, MINSIZE5, POSITION) TM_PROP(3409, TMT, NORMALSIZE, POSITION) /* Margin rendering properties */ TM_PROP(3601, TMT, SIZINGMARGINS, MARGINS) TM_PROP(3602, TMT, CONTENTMARGINS, MARGINS) TM_PROP(3603, TMT, CAPTIONMARGINS, MARGINS) /* Color rendering properties */ TM_PROP(3801, TMT, BORDERCOLOR, COLOR) TM_PROP(3802, TMT, FILLCOLOR, COLOR) TM_PROP(3803, TMT, TEXTCOLOR, COLOR) TM_PROP(3804, TMT, EDGELIGHTCOLOR, COLOR) TM_PROP(3805, TMT, EDGEHIGHLIGHTCOLOR, COLOR) TM_PROP(3806, TMT, EDGESHADOWCOLOR, COLOR) TM_PROP(3807, TMT, EDGEDKSHADOWCOLOR, COLOR) TM_PROP(3808, TMT, EDGEFILLCOLOR, COLOR) TM_PROP(3809, TMT, TRANSPARENTCOLOR, COLOR) TM_PROP(3810, TMT, GRADIENTCOLOR1, COLOR) TM_PROP(3811, TMT, GRADIENTCOLOR2, COLOR) TM_PROP(3812, TMT, GRADIENTCOLOR3, COLOR) TM_PROP(3813, TMT, GRADIENTCOLOR4, COLOR) TM_PROP(3814, TMT, GRADIENTCOLOR5, COLOR) TM_PROP(3815, TMT, SHADOWCOLOR, COLOR) TM_PROP(3816, TMT, GLOWCOLOR, COLOR) TM_PROP(3817, TMT, TEXTBORDERCOLOR, COLOR) TM_PROP(3818, TMT, TEXTSHADOWCOLOR, COLOR) TM_PROP(3819, TMT, GLYPHTEXTCOLOR, COLOR) TM_PROP(3820, TMT, GLYPHTRANSPARENTCOLOR, COLOR) TM_PROP(3821, TMT, FILLCOLORHINT, COLOR) TM_PROP(3822, TMT, BORDERCOLORHINT, COLOR) TM_PROP(3823, TMT, ACCENTCOLORHINT, COLOR) /* Enum rendering properties */ TM_PROP(4001, TMT, BGTYPE, ENUM) TM_PROP(4002, TMT, BORDERTYPE, ENUM) TM_PROP(4003, TMT, FILLTYPE, ENUM) TM_PROP(4004, TMT, SIZINGTYPE, ENUM) TM_PROP(4005, TMT, HALIGN, ENUM) TM_PROP(4006, TMT, CONTENTALIGNMENT, ENUM) TM_PROP(4007, TMT, VALIGN, ENUM) TM_PROP(4008, TMT, OFFSETTYPE, ENUM) TM_PROP(4009, TMT, ICONEFFECT, ENUM) TM_PROP(4010, TMT, TEXTSHADOWTYPE, ENUM) TM_PROP(4011, TMT, IMAGELAYOUT, ENUM) TM_PROP(4012, TMT, GLYPHTYPE, ENUM) TM_PROP(4013, TMT, IMAGESELECTTYPE, ENUM) TM_PROP(4014, TMT, GLYPHFONTSIZINGTYPE, ENUM) TM_PROP(4015, TMT, TRUESIZESCALINGTYPE, ENUM) /* custom properties */ TM_PROP(5001, TMT, USERPICTURE, BOOL) TM_PROP(5002, TMT, DEFAULTPANESIZE, RECT) TM_PROP(5003, TMT, BLENDCOLOR, COLOR) END_TM_PROPS() /***** PARTS & STATES *****/ /* BUTTON parts */ BEGIN_TM_CLASS_PARTS(BUTTON) TM_PART(1, BP, PUSHBUTTON) TM_PART(2, BP, RADIOBUTTON) TM_PART(3, BP, CHECKBOX) TM_PART(4, BP, GROUPBOX) TM_PART(5, BP, USERBUTTON) END_TM_CLASS_PARTS() /* BUTTON - PUSHBUTTON states */ BEGIN_TM_PART_STATES(PUSHBUTTON) TM_STATE(1, PBS, NORMAL) TM_STATE(2, PBS, HOT) TM_STATE(3, PBS, PRESSED) TM_STATE(4, PBS, DISABLED) TM_STATE(5, PBS, DEFAULTED) END_TM_PART_STATES() /* BUTTON - RADIOBUTTON states */ BEGIN_TM_PART_STATES(RADIOBUTTON) TM_STATE(1, RBS, UNCHECKEDNORMAL) TM_STATE(2, RBS, UNCHECKEDHOT) TM_STATE(3, RBS, UNCHECKEDPRESSED) TM_STATE(4, RBS, UNCHECKEDDISABLED) TM_STATE(5, RBS, CHECKEDNORMAL) TM_STATE(6, RBS, CHECKEDHOT) TM_STATE(7, RBS, CHECKEDPRESSED) TM_STATE(8, RBS, CHECKEDDISABLED) END_TM_PART_STATES() /* BUTTON - CHECKBOX states */ BEGIN_TM_PART_STATES(CHECKBOX) TM_STATE(1, CBS, UNCHECKEDNORMAL) TM_STATE(2, CBS, UNCHECKEDHOT) TM_STATE(3, CBS, UNCHECKEDPRESSED) TM_STATE(4, CBS, UNCHECKEDDISABLED) TM_STATE(5, CBS, CHECKEDNORMAL) TM_STATE(6, CBS, CHECKEDHOT) TM_STATE(7, CBS, CHECKEDPRESSED) TM_STATE(8, CBS, CHECKEDDISABLED) TM_STATE(9, CBS, MIXEDNORMAL) TM_STATE(10, CBS, MIXEDHOT) TM_STATE(11, CBS, MIXEDPRESSED) TM_STATE(12, CBS, MIXEDDISABLED) END_TM_PART_STATES() /* BUTTON - GROUPBOX states */ BEGIN_TM_PART_STATES(GROUPBOX) TM_STATE(1, GBS, NORMAL) TM_STATE(2, GBS, DISABLED) END_TM_PART_STATES() /* CLOCK parts */ BEGIN_TM_CLASS_PARTS(CLOCK) TM_PART(1, CLP, TIME) END_TM_CLASS_PARTS() /* CLOCK states */ BEGIN_TM_PART_STATES(CLOCK) TM_STATE(1, CLS, NORMAL) END_TM_PART_STATES() /* COMBOBOX parts */ BEGIN_TM_CLASS_PARTS(COMBOBOX) TM_PART(1, CP, DROPDOWNBUTTON) END_TM_CLASS_PARTS() /* COMBOBOX states */ BEGIN_TM_PART_STATES(COMBOBOX) TM_STATE(1, CBXS, NORMAL) TM_STATE(2, CBXS, HOT) TM_STATE(3, CBXS, PRESSED) TM_STATE(4, CBXS, DISABLED) END_TM_PART_STATES() /* EDIT parts */ BEGIN_TM_CLASS_PARTS(EDIT) TM_PART(1, EP, EDITTEXT) TM_PART(2, EP, CARET) END_TM_CLASS_PARTS() /* EDIT - EDITTEXT states */ BEGIN_TM_PART_STATES(EDITTEXT) TM_STATE(1, ETS, NORMAL) TM_STATE(2, ETS, HOT) TM_STATE(3, ETS, SELECTED) TM_STATE(4, ETS, DISABLED) TM_STATE(5, ETS, FOCUSED) TM_STATE(6, ETS, READONLY) TM_STATE(7, ETS, ASSIST) END_TM_PART_STATES() /* EXPLORERBAR parts */ BEGIN_TM_CLASS_PARTS(EXPLORERBAR) TM_PART(1, EBP, HEADERBACKGROUND) TM_PART(2, EBP, HEADERCLOSE) TM_PART(3, EBP, HEADERPIN) TM_PART(4, EBP, IEBARMENU) TM_PART(5, EBP, NORMALGROUPBACKGROUND) TM_PART(6, EBP, NORMALGROUPCOLLAPSE) TM_PART(7, EBP, NORMALGROUPEXPAND) TM_PART(8, EBP, NORMALGROUPHEAD) TM_PART(9, EBP, SPECIALGROUPBACKGROUND) TM_PART(10, EBP, SPECIALGROUPCOLLAPSE) TM_PART(11, EBP, SPECIALGROUPEXPAND) TM_PART(12, EBP, SPECIALGROUPHEAD) END_TM_CLASS_PARTS() /* EXPLORERBAR - HEADERCLOSE states */ BEGIN_TM_PART_STATES(HEADERCLOSE) TM_STATE(1, EBHC, NORMAL) TM_STATE(2, EBHC, HOT) TM_STATE(3, EBHC, PRESSED) END_TM_PART_STATES() /* EXPLORERBAR - HEADERPIN states */ BEGIN_TM_PART_STATES(HEADERPIN) TM_STATE(1, EBHP, NORMAL) TM_STATE(2, EBHP, HOT) TM_STATE(3, EBHP, PRESSED) TM_STATE(4, EBHP, SELECTEDNORMAL) TM_STATE(5, EBHP, SELECTEDHOT) TM_STATE(6, EBHP, SELECTEDPRESSED) END_TM_PART_STATES() /* EXPLORERBAR - IEBARMENU states */ BEGIN_TM_PART_STATES(IEBARMENU) TM_STATE(1, EBM, NORMAL) TM_STATE(2, EBM, HOT) TM_STATE(3, EBM, PRESSED) END_TM_PART_STATES() /* EXPLORERBAR - NORMALGROUPCOLLAPSE states */ BEGIN_TM_PART_STATES(NORMALGROUPCOLLAPSE) TM_STATE(1, EBNGC, NORMAL) TM_STATE(2, EBNGC, HOT) TM_STATE(3, EBNGC, PRESSED) END_TM_PART_STATES() /* EXPLORERBAR - NORMALGROUPEXPAND states */ BEGIN_TM_PART_STATES(NORMALGROUPEXPAND) TM_STATE(1, EBNGE, NORMAL) TM_STATE(2, EBNGE, HOT) TM_STATE(3, EBNGE, PRESSED) END_TM_PART_STATES() /* EXPLORERBAR - SPECIALGROUPCOLLAPSE states */ BEGIN_TM_PART_STATES(SPECIALGROUPCOLLAPSE) TM_STATE(1, EBSGC, NORMAL) TM_STATE(2, EBSGC, HOT) TM_STATE(3, EBSGC, PRESSED) END_TM_PART_STATES() /* EXPLORERBAR - SPECIALGROUPEXPAND states */ BEGIN_TM_PART_STATES(SPECIALGROUPEXPAND) TM_STATE(1, EBSGE, NORMAL) TM_STATE(2, EBSGE, HOT) TM_STATE(3, EBSGE, PRESSED) END_TM_PART_STATES() /* GLOBALS parts */ BEGIN_TM_CLASS_PARTS(GLOBALS) TM_PART(1, GP, BORDER) TM_PART(2, GP, LINEHORZ) TM_PART(3, GP, LINEVERT) END_TM_CLASS_PARTS() /* GLOBALS - BORDER states */ BEGIN_TM_PART_STATES(BORDER) TM_STATE(1, BSS, FLAT) TM_STATE(2, BSS, RAISED) TM_STATE(3, BSS, SUNKEN) END_TM_PART_STATES() /* GLOBALS - LINEHORZ states */ BEGIN_TM_PART_STATES(LINEHORZ) TM_STATE(1, LHS, FLAT) TM_STATE(2, LHS, RAISED) TM_STATE(3, LHS, SUNKEN) END_TM_PART_STATES() /* GLOBAL - LINEVERT states */ BEGIN_TM_PART_STATES(LINEVERT) TM_STATE(1, LVS, FLAT) TM_STATE(2, LVS, RAISED) TM_STATE(3, LVS, SUNKEN) END_TM_PART_STATES() /* HEADER parts */ BEGIN_TM_CLASS_PARTS(HEADER) TM_PART(1, HP, HEADERITEM) TM_PART(2, HP, HEADERITEMLEFT) TM_PART(3, HP, HEADERITEMRIGHT) TM_PART(4, HP, HEADERSORTARROW) END_TM_CLASS_PARTS() /* HEADER - HEADERITEM states */ BEGIN_TM_PART_STATES(HEADERITEM) TM_STATE(1, HIS, NORMAL) TM_STATE(2, HIS, HOT) TM_STATE(3, HIS, PRESSED) END_TM_PART_STATES() /* HEADER - HEADERITEMLEFT states */ BEGIN_TM_PART_STATES(HEADERITEMLEFT) TM_STATE(1, HILS, NORMAL) TM_STATE(2, HILS, HOT) TM_STATE(3, HILS, PRESSED) END_TM_PART_STATES() /* HEADER - HEADERITEMRIGHT states */ BEGIN_TM_PART_STATES(HEADERITEMRIGHT) TM_STATE(1, HIRS, NORMAL) TM_STATE(2, HIRS, HOT) TM_STATE(3, HIRS, PRESSED) END_TM_PART_STATES() /* HEADER - HEADERSORTARROW states */ BEGIN_TM_PART_STATES(HEADERSORTARROW) TM_STATE(1, HSAS, SORTEDUP) TM_STATE(2, HSAS, SORTEDDOWN) END_TM_PART_STATES() /* LISTVIEW parts */ BEGIN_TM_CLASS_PARTS(LISTVIEW) TM_PART(1, LVP, LISTITEM) TM_PART(2, LVP, LISTGROUP) TM_PART(3, LVP, LISTDETAIL) TM_PART(4, LVP, LISTSORTEDDETAIL) TM_PART(5, LVP, EMPTYTEXT) END_TM_CLASS_PARTS() /* LISTVIEW - LISTITEM states */ BEGIN_TM_PART_STATES(LISTITEM) TM_STATE(1, LIS, NORMAL) TM_STATE(2, LIS, HOT) TM_STATE(3, LIS, SELECTED) TM_STATE(4, LIS, DISABLED) TM_STATE(5, LIS, SELECTEDNOTFOCUS) END_TM_PART_STATES() /* MENU parts */ BEGIN_TM_CLASS_PARTS(MENU) TM_PART(1, MP, MENUITEM) TM_PART(2, MP, MENUDROPDOWN) TM_PART(3, MP, MENUBARITEM) TM_PART(4, MP, MENUBARDROPDOWN) TM_PART(5, MP, CHEVRON) TM_PART(6, MP, SEPARATOR) END_TM_CLASS_PARTS() /* MENU - * states */ BEGIN_TM_PART_STATES(MENU) TM_STATE(1, MS, NORMAL) TM_STATE(2, MS, SELECTED) TM_STATE(3, MS, DEMOTED) END_TM_PART_STATES() /* MENUBAND parts */ BEGIN_TM_CLASS_PARTS(MENUBAND) TM_PART(1, MDP, NEWAPPBUTTON) /* MDP_SEPERATOR isn't a typo, as per Microsoft's headers */ TM_PART(2, MDP, SEPERATOR) END_TM_CLASS_PARTS() /* MENUBAND states */ BEGIN_TM_PART_STATES(MENUBAND) TM_STATE(1, MDS, NORMAL) TM_STATE(2, MDS, HOT) TM_STATE(3, MDS, PRESSED) TM_STATE(4, MDS, DISABLED) TM_STATE(5, MDS, CHECKED) TM_STATE(6, MDS, HOTCHECKED) END_TM_PART_STATES() /* PAGE parts */ BEGIN_TM_CLASS_PARTS(PAGE) TM_PART(1, PGRP, UP) TM_PART(2, PGRP, DOWN) TM_PART(3, PGRP, UPHORZ) TM_PART(4, PGRP, DOWNHORZ) END_TM_CLASS_PARTS() /* PAGE - UP states */ BEGIN_TM_PART_STATES(UP) TM_STATE(1, UPS, NORMAL) TM_STATE(2, UPS, HOT) TM_STATE(3, UPS, PRESSED) TM_STATE(4, UPS, DISABLED) END_TM_PART_STATES() /* PAGE - DOWN states */ BEGIN_TM_PART_STATES(DOWN) TM_STATE(1, DNS, NORMAL) TM_STATE(2, DNS, HOT) TM_STATE(3, DNS, PRESSED) TM_STATE(4, DNS, DISABLED) END_TM_PART_STATES() /* PAGE - UPHORZ states */ BEGIN_TM_PART_STATES(UPHORZ) TM_STATE(1, UPHZS, NORMAL) TM_STATE(2, UPHZS, HOT) TM_STATE(3, UPHZS, PRESSED) TM_STATE(4, UPHZS, DISABLED) END_TM_PART_STATES() /* PAGE - DOWNHORZ states */ BEGIN_TM_PART_STATES(DOWNHORZ) TM_STATE(1, DNHZS, NORMAL) TM_STATE(2, DNHZS, HOT) TM_STATE(3, DNHZS, PRESSED) TM_STATE(4, DNHZS, DISABLED) END_TM_PART_STATES() /* PROGRESS parts */ BEGIN_TM_CLASS_PARTS(PROGRESS) TM_PART(1, PP, BAR) TM_PART(2, PP, BARVERT) TM_PART(3, PP, CHUNK) TM_PART(4, PP, CHUNKVERT) END_TM_CLASS_PARTS() /* REBAR parts */ BEGIN_TM_CLASS_PARTS(REBAR) TM_PART(1, RP, GRIPPER) TM_PART(2, RP, GRIPPERVERT) TM_PART(3, RP, BAND) TM_PART(4, RP, CHEVRON) TM_PART(5, RP, CHEVRONVERT) END_TM_CLASS_PARTS() /* REBAR - CHEVRON states */ BEGIN_TM_PART_STATES(CHEVRON) TM_STATE(1, CHEVS, NORMAL) TM_STATE(2, CHEVS, HOT) TM_STATE(3, CHEVS, PRESSED) END_TM_PART_STATES() /* SCROLLBAR parts */ BEGIN_TM_CLASS_PARTS(SCROLLBAR) TM_PART(1, SBP, ARROWBTN) TM_PART(2, SBP, THUMBBTNHORZ) TM_PART(3, SBP, THUMBBTNVERT) TM_PART(4, SBP, LOWERTRACKHORZ) TM_PART(5, SBP, UPPERTRACKHORZ) TM_PART(6, SBP, LOWERTRACKVERT) TM_PART(7, SBP, UPPERTRACKVERT) TM_PART(8, SBP, GRIPPERHORZ) TM_PART(9, SBP, GRIPPERVERT) TM_PART(10, SBP, SIZEBOX) END_TM_CLASS_PARTS() /* SCROLLBAR - ARROWBTN states */ BEGIN_TM_PART_STATES(ARROWBTN) TM_STATE(1, ABS, UPNORMAL) TM_STATE(2, ABS, UPHOT) TM_STATE(3, ABS, UPPRESSED) TM_STATE(4, ABS, UPDISABLED) TM_STATE(5, ABS, DOWNNORMAL) TM_STATE(6, ABS, DOWNHOT) TM_STATE(7, ABS, DOWNPRESSED) TM_STATE(8, ABS, DOWNDISABLED) TM_STATE(9, ABS, LEFTNORMAL) TM_STATE(10, ABS, LEFTHOT) TM_STATE(11, ABS, LEFTPRESSED) TM_STATE(12, ABS, LEFTDISABLED) TM_STATE(13, ABS, RIGHTNORMAL) TM_STATE(14, ABS, RIGHTHOT) TM_STATE(15, ABS, RIGHTPRESSED) TM_STATE(16, ABS, RIGHTDISABLED) END_TM_PART_STATES() /* SCROLLBAR - LOWER* / THUMB* / UPPER* states */ BEGIN_TM_PART_STATES(SCROLLBAR) TM_STATE(1, SCRBS, NORMAL) TM_STATE(2, SCRBS, HOT) TM_STATE(3, SCRBS, PRESSED) TM_STATE(4, SCRBS, DISABLED) END_TM_PART_STATES() /* SCROLLBAR - SIZEBOX states */ BEGIN_TM_PART_STATES(SIZEBOX) TM_STATE(1, SZB, RIGHTALIGN) TM_STATE(2, SZB, LEFTALIGN) END_TM_PART_STATES() /* SPIN parts */ BEGIN_TM_CLASS_PARTS(SPIN) TM_PART(1, SPNP, UP) TM_PART(2, SPNP, DOWN) TM_PART(3, SPNP, UPHORZ) TM_PART(4, SPNP, DOWNHORZ) END_TM_CLASS_PARTS() /* SPIN * states */ /* See PAGE states */ /* STARTPANEL parts */ BEGIN_TM_CLASS_PARTS(STARTPANEL) TM_PART(1, SPP, USERPANE) TM_PART(2, SPP, MOREPROGRAMS) TM_PART(3, SPP, MOREPROGRAMSARROW) TM_PART(4, SPP, PROGLIST) TM_PART(5, SPP, PROGLISTSEPARATOR) TM_PART(6, SPP, PLACESLIST) TM_PART(7, SPP, PLACESLISTSEPARATOR) TM_PART(8, SPP, LOGOFF) TM_PART(9, SPP, LOGOFFBUTTONS) TM_PART(10, SPP, USERPICTURE) TM_PART(11, SPP, PREVIEW) END_TM_CLASS_PARTS() /* STARTPANEL - MOREPROGRAMSARROW states */ BEGIN_TM_PART_STATES(MOREPROGRAMSARROW) TM_STATE(1, SPS, NORMAL) TM_STATE(2, SPS, HOT) TM_STATE(3, SPS, PRESSED) END_TM_PART_STATES() /* STARTPANEL - LOGOFFBUTTONS states */ BEGIN_TM_PART_STATES(LOGOFFBUTTONS) TM_STATE(1, SPLS, NORMAL) TM_STATE(2, SPLS, HOT) TM_STATE(3, SPLS, PRESSED) END_TM_PART_STATES() /* STATUS parts */ BEGIN_TM_CLASS_PARTS(STATUS) TM_PART(1, SP, PANE) TM_PART(2, SP, GRIPPERPANE) TM_PART(3, SP, GRIPPER) END_TM_CLASS_PARTS() /* TAB parts */ BEGIN_TM_CLASS_PARTS(TAB) TM_PART(1, TABP, TABITEM) TM_PART(2, TABP, TABITEMLEFTEDGE) TM_PART(3, TABP, TABITEMRIGHTEDGE) TM_PART(4, TABP, TABITEMBOTHEDGE) TM_PART(5, TABP, TOPTABITEM) TM_PART(6, TABP, TOPTABITEMLEFTEDGE) TM_PART(7, TABP, TOPTABITEMRIGHTEDGE) TM_PART(8, TABP, TOPTABITEMBOTHEDGE) TM_PART(9, TABP, PANE) TM_PART(10, TABP, BODY) END_TM_CLASS_PARTS() /* TAB - TABITEM states */ BEGIN_TM_PART_STATES(TABITEM) TM_STATE(1, TIS, NORMAL) TM_STATE(2, TIS, HOT) TM_STATE(3, TIS, SELECTED) TM_STATE(4, TIS, DISABLED) TM_STATE(5, TIS, FOCUSED) END_TM_PART_STATES() /* TAB - TABITEMLEFTEDGE states */ BEGIN_TM_PART_STATES(TABITEMLEFTEDGE) TM_STATE(1, TILES, NORMAL) TM_STATE(2, TILES, HOT) TM_STATE(3, TILES, SELECTED) TM_STATE(4, TILES, DISABLED) TM_STATE(5, TILES, FOCUSED) END_TM_PART_STATES() /* TAB - TABITEMRIGHTEDGE states */ BEGIN_TM_PART_STATES(TABITEMRIGHTEDGE) TM_STATE(1, TIRES, NORMAL) TM_STATE(2, TIRES, HOT) TM_STATE(3, TIRES, SELECTED) TM_STATE(4, TIRES, DISABLED) TM_STATE(5, TIRES, FOCUSED) END_TM_PART_STATES() /* TAB - TABITEMBOTHEDGES states */ BEGIN_TM_PART_STATES(TABITEMBOTHEDGES) TM_STATE(1, TIBES, NORMAL) TM_STATE(2, TIBES, HOT) TM_STATE(3, TIBES, SELECTED) TM_STATE(4, TIBES, DISABLED) TM_STATE(5, TIBES, FOCUSED) END_TM_PART_STATES() /* TAB - TOPTABITEM states */ BEGIN_TM_PART_STATES(TOPTABITEM) TM_STATE(1, TTIS, NORMAL) TM_STATE(2, TTIS, HOT) TM_STATE(3, TTIS, SELECTED) TM_STATE(4, TTIS, DISABLED) TM_STATE(5, TTIS, FOCUSED) END_TM_PART_STATES() /* TAB - TOPTABITEMLEFTEDGE states */ BEGIN_TM_PART_STATES(TOPTABITEMLEFTEDGE) TM_STATE(1, TTILES, NORMAL) TM_STATE(2, TTILES, HOT) TM_STATE(3, TTILES, SELECTED) TM_STATE(4, TTILES, DISABLED) TM_STATE(5, TTILES, FOCUSED) END_TM_PART_STATES() /* TAB - TOPTABITEMRIGHTEDGE states */ BEGIN_TM_PART_STATES(TOPTABITEMRIGHTEDGE) TM_STATE(1, TTIRES, NORMAL) TM_STATE(2, TTIRES, HOT) TM_STATE(3, TTIRES, SELECTED) TM_STATE(4, TTIRES, DISABLED) TM_STATE(5, TTIRES, FOCUSED) END_TM_PART_STATES() /* TAB - TOPTABITEMBOTHEDGES states */ BEGIN_TM_PART_STATES(TOPTABITEMBOTHEDGES) TM_STATE(1, TTIBES, NORMAL) TM_STATE(2, TTIBES, HOT) TM_STATE(3, TTIBES, SELECTED) TM_STATE(4, TTIBES, DISABLED) TM_STATE(5, TTIBES, FOCUSED) END_TM_PART_STATES() /* TASKBAND parts */ BEGIN_TM_CLASS_PARTS(TASKBAND) TM_PART(1, TDP, GROUPCOUNT) TM_PART(2, TDP, FLASHBUTTON) TM_PART(3, TDP, FLASHBUTTONGROUPMENU) END_TM_CLASS_PARTS() /* TASKBAR parts */ BEGIN_TM_CLASS_PARTS(TASKBAR) TM_PART(1, TBP, BACKGROUNDBOTTOM) TM_PART(2, TBP, BACKGROUNDRIGHT) TM_PART(3, TBP, BACKGROUNDTOP) TM_PART(4, TBP, BACKGROUNDLEFT) TM_PART(5, TBP, SIZINGBARBOTTOM) TM_PART(6, TBP, SIZINGBARRIGHT) TM_PART(7, TBP, SIZINGBARTOP) TM_PART(8, TBP, SIZINGBARLEFT) END_TM_CLASS_PARTS() /* TOOLBAR parts */ BEGIN_TM_CLASS_PARTS(TOOLBAR) TM_PART(1, TP, BUTTON) TM_PART(2, TP, DROPDOWNBUTTON) TM_PART(3, TP, SPLITBUTTON) TM_PART(4, TP, SPLITBUTTONDROPDOWN) TM_PART(5, TP, SEPARATOR) TM_PART(6, TP, SEPARATORVERT) END_TM_CLASS_PARTS() /* TOOLBAR - * states */ BEGIN_TM_PART_STATES(TOOLBAR) TM_STATE(1, TS, NORMAL) TM_STATE(2, TS, HOT) TM_STATE(3, TS, PRESSED) TM_STATE(4, TS, DISABLED) TM_STATE(5, TS, CHECKED) TM_STATE(6, TS, HOTCHECKED) END_TM_PART_STATES() /* TOOLTIP parts */ BEGIN_TM_CLASS_PARTS(TOOLTIP) TM_PART(1, TTP, STANDARD) TM_PART(2, TTP, STANDARDTITLE) TM_PART(3, TTP, BALLOON) TM_PART(4, TTP, BALLOONTITLE) TM_PART(5, TTP, CLOSE) END_TM_CLASS_PARTS() /* TOOLTIP - STANDARD states */ BEGIN_TM_PART_STATES(STANDARD) TM_STATE(1, TTSS, NORMAL) TM_STATE(2, TTSS, LINK) END_TM_PART_STATES() /* TOOLTIP - STANDARDTITLE states */ /* See TOOLTIP STANDARD */ /* TOOLTIP - BALLOON states */ BEGIN_TM_PART_STATES(BALLOON) TM_STATE(1, TTBS, NORMAL) TM_STATE(2, TTBS, LINK) END_TM_PART_STATES() /* TOOLTIP - BALLOONTITLE states */ /* See TOOLTIP BALLOON */ /* TOOLTIP - CLOSE states */ BEGIN_TM_PART_STATES(CLOSE) TM_STATE(1, TTCS, NORMAL) TM_STATE(2, TTCS, HOT) TM_STATE(3, TTCS, PRESSED) END_TM_PART_STATES() /* TRACKBAR parts */ BEGIN_TM_CLASS_PARTS(TRACKBAR) TM_PART(1, TKP, TRACK) TM_PART(2, TKP, TRACKVERT) TM_PART(3, TKP, THUMB) TM_PART(4, TKP, THUMBBOTTOM) TM_PART(5, TKP, THUMBTOP) TM_PART(6, TKP, THUMBVERT) TM_PART(7, TKP, THUMBLEFT) TM_PART(8, TKP, THUMBRIGHT) TM_PART(9, TKP, TICS) TM_PART(10, TKP, TICSVERT) END_TM_CLASS_PARTS() /* TRACKBAR states */ BEGIN_TM_PART_STATES(TRACKBAR) TM_STATE(1, TKS, NORMAL) END_TM_PART_STATES() /* TRACKBAR - TRACK states */ BEGIN_TM_PART_STATES(TRACK) TM_STATE(1, TRS, NORMAL) END_TM_PART_STATES() /* TRACKBAR - TRACKVERT states */ BEGIN_TM_PART_STATES(TRACKVERT) TM_STATE(1, TRVS, NORMAL) END_TM_PART_STATES() /* TRACKBAR - THUMB states */ BEGIN_TM_PART_STATES(THUMB) TM_STATE(1, TUS, NORMAL) TM_STATE(2, TUS, HOT) TM_STATE(3, TUS, PRESSED) TM_STATE(4, TUS, FOCUSED) TM_STATE(5, TUS, DISABLED) END_TM_PART_STATES() /* TRACKBAR - THUMBBOTTOM states */ BEGIN_TM_PART_STATES(THUMBBOTTOM) TM_STATE(1, TUBS, NORMAL) TM_STATE(2, TUBS, HOT) TM_STATE(3, TUBS, PRESSED) TM_STATE(4, TUBS, FOCUSED) TM_STATE(5, TUBS, DISABLED) END_TM_PART_STATES() /* TRACKBAR - THUMBTOP states */ BEGIN_TM_PART_STATES(THUMBTOP) TM_STATE(1, TUTS, NORMAL) TM_STATE(2, TUTS, HOT) TM_STATE(3, TUTS, PRESSED) TM_STATE(4, TUTS, FOCUSED) TM_STATE(5, TUTS, DISABLED) END_TM_PART_STATES() /* TRACKBAR - THUMBVERT states */ BEGIN_TM_PART_STATES(THUMBVERT) TM_STATE(1, TUVS, NORMAL) TM_STATE(2, TUVS, HOT) TM_STATE(3, TUVS, PRESSED) TM_STATE(4, TUVS, FOCUSED) TM_STATE(5, TUVS, DISABLED) END_TM_PART_STATES() /* TRACKBAR - THUMBLEFT states */ BEGIN_TM_PART_STATES(THUMBLEFT) TM_STATE(1, TUVLS, NORMAL) TM_STATE(2, TUVLS, HOT) TM_STATE(3, TUVLS, PRESSED) TM_STATE(4, TUVLS, FOCUSED) TM_STATE(5, TUVLS, DISABLED) END_TM_PART_STATES() /* TRACKBAR - THUMBRIGHT states */ BEGIN_TM_PART_STATES(THUMBRIGHT) TM_STATE(1, TUVRS, NORMAL) TM_STATE(2, TUVRS, HOT) TM_STATE(3, TUVRS, PRESSED) TM_STATE(4, TUVRS, FOCUSED) TM_STATE(5, TUVRS, DISABLED) END_TM_PART_STATES() /* TRACKBAR - TICS states */ BEGIN_TM_PART_STATES(TICS) TM_STATE(1, TSS, NORMAL) END_TM_PART_STATES() /* TRACKBAR - TICSVERT states */ BEGIN_TM_PART_STATES(TICSVERT) TM_STATE(1, TSVS, NORMAL) END_TM_PART_STATES() /* TRAYNOTIFY parts */ BEGIN_TM_CLASS_PARTS(TRAYNOTIFY) TM_PART(1, TNP, BACKGROUND) TM_PART(2, TNP, ANIMBACKGROUND) END_TM_CLASS_PARTS() /* TREEVIEW parts */ BEGIN_TM_CLASS_PARTS(TREEVIEW) TM_PART(1, TVP, TREEITEM) TM_PART(2, TVP, GLYPH) TM_PART(3, TVP, BRANCH) END_TM_CLASS_PARTS() /* TREEVIEW - TREEITEM states */ BEGIN_TM_PART_STATES(TREEITEM) TM_STATE(1, TREIS, NORMAL) TM_STATE(2, TREIS, HOT) TM_STATE(3, TREIS, SELECTED) TM_STATE(4, TREIS, DISABLED) TM_STATE(5, TREIS, SELECTEDNOTFOCUS) END_TM_PART_STATES() /* TREEVIEW - GLYPH states */ BEGIN_TM_PART_STATES(GLYPH) TM_STATE(1, GLPS, CLOSED) TM_STATE(2, GLPS, OPENED) END_TM_PART_STATES() /* WINDOW parts */ BEGIN_TM_CLASS_PARTS(WINDOW) TM_PART(1, WP, CAPTION) TM_PART(2, WP, SMALLCAPTION) TM_PART(3, WP, MINCAPTION) TM_PART(4, WP, SMALLMINCAPTION) TM_PART(5, WP, MAXCAPTION) TM_PART(6, WP, SMALLMAXCAPTION) TM_PART(7, WP, FRAMELEFT) TM_PART(8, WP, FRAMERIGHT) TM_PART(9, WP, FRAMEBOTTOM) TM_PART(10, WP, SMALLFRAMELEFT) TM_PART(11, WP, SMALLFRAMERIGHT) TM_PART(12, WP, SMALLFRAMEBOTTOM) TM_PART(13, WP, SYSBUTTON) TM_PART(14, WP, MDISYSBUTTON) TM_PART(15, WP, MINBUTTON) TM_PART(16, WP, MDIMINBUTTON) TM_PART(17, WP, MAXBUTTON) TM_PART(18, WP, CLOSEBUTTON) TM_PART(19, WP, SMALLCLOSEBUTTON) TM_PART(20, WP, MDICLOSEBUTTON) TM_PART(21, WP, RESTOREBUTTON) TM_PART(22, WP, MDIRESTOREBUTTON) TM_PART(23, WP, HELPBUTTON) TM_PART(24, WP, MDIHELPBUTTON) TM_PART(25, WP, HORZSCROLL) TM_PART(26, WP, HORZTHUMB) TM_PART(27, WP, VERTSCROLL) TM_PART(28, WP, VERTTHUMB) TM_PART(29, WP, DIALOG) TM_PART(30, WP, CAPTIONSIZINGTEMPLATE) TM_PART(31, WP, SMALLCAPTIONSIZINGTEMPLATE) TM_PART(32, WP, FRAMELEFTSIZINGTEMPLATE) TM_PART(33, WP, SMALLFRAMELEFTSIZINGTEMPLATE) TM_PART(34, WP, FRAMERIGHTSIZINGTEMPLATE) TM_PART(35, WP, SMALLFRAMERIGHTSIZINGTEMPLATE) TM_PART(36, WP, FRAMEBOTTOMSIZINGTEMPLATE) TM_PART(37, WP, SMALLFRAMEBOTTOMSIZINGTEMPLATE) END_TM_CLASS_PARTS() /* WINDOW - CAPTION / SMALLCAPTION states */ BEGIN_TM_PART_STATES(CAPTION) TM_STATE(1, CS, ACTIVE) TM_STATE(2, CS, INACTIVE) TM_STATE(3, CS, DISABLED) END_TM_PART_STATES() /* WINDOW - MINCAPTION / SMALLMINCAPTION states */ BEGIN_TM_PART_STATES(MINCAPTION) TM_STATE(1, MNCS, ACTIVE) TM_STATE(2, MNCS, INACTIVE) TM_STATE(3, MNCS, DISABLED) END_TM_PART_STATES() /* WINDOW - MAXCAPTION / SMALLMAXCAPTION states */ BEGIN_TM_PART_STATES(MAXCAPTION) TM_STATE(1, MXCS, ACTIVE) TM_STATE(2, MXCS, INACTIVE) TM_STATE(3, MXCS, DISABLED) END_TM_PART_STATES() /* WINDOW - FRAME* / SMALLFRAME* states */ BEGIN_TM_PART_STATES(FRAME) TM_STATE(1, FS, ACTIVE) TM_STATE(2, FS, INACTIVE) END_TM_PART_STATES() /* WINDOW - SYSBUTTON / MDISYSBUTTON states */ BEGIN_TM_PART_STATES(SYSBUTTON) TM_STATE(1, SBS, NORMAL) TM_STATE(2, SBS, HOT) TM_STATE(3, SBS, PUSHED) TM_STATE(4, SBS, DISABLED) END_TM_PART_STATES() /* WINDOW - MINBUTTON / MDIMINBUTTON states */ BEGIN_TM_PART_STATES(MINBUTTON) TM_STATE(1, MINBS, NORMAL) TM_STATE(2, MINBS, HOT) TM_STATE(3, MINBS, PUSHED) TM_STATE(4, MINBS, DISABLED) END_TM_PART_STATES() /* WINDOW - MAXBUTTON states */ BEGIN_TM_PART_STATES(MAXBUTTON) TM_STATE(1, MAXBS, NORMAL) TM_STATE(2, MAXBS, HOT) TM_STATE(3, MAXBS, PUSHED) TM_STATE(4, MAXBS, DISABLED) END_TM_PART_STATES() /* WINDOW - CLOSEBUTTON / SMALLCLOSEBUTTON / MDICLOSEBUTTON states */ BEGIN_TM_PART_STATES(CLOSEBUTTON) TM_STATE(1, CBS, NORMAL) TM_STATE(2, CBS, HOT) TM_STATE(3, CBS, PUSHED) TM_STATE(4, CBS, DISABLED) END_TM_PART_STATES() /* WINDOW - RESTOREBUTTON / MDIRESTOREBUTTON states */ BEGIN_TM_PART_STATES(RESTOREBUTTON) TM_STATE(1, RBS, NORMAL) TM_STATE(2, RBS, HOT) TM_STATE(3, RBS, PUSHED) TM_STATE(4, RBS, DISABLED) END_TM_PART_STATES() /* WINDOW - HELPBUTTON / MDIHELPBUTTON states */ BEGIN_TM_PART_STATES(HELPBUTTON) TM_STATE(1, HBS, NORMAL) TM_STATE(2, HBS, HOT) TM_STATE(3, HBS, PUSHED) TM_STATE(4, HBS, DISABLED) END_TM_PART_STATES() /* WINDOW - HORZSCROLL states */ BEGIN_TM_PART_STATES(HORZSCROLL) TM_STATE(1, HSS, NORMAL) TM_STATE(2, HSS, HOT) TM_STATE(3, HSS, PUSHED) TM_STATE(4, HSS, DISABLED) END_TM_PART_STATES() /* WINDOW - HORZTHUMB states */ BEGIN_TM_PART_STATES(HORZTHUMB) TM_STATE(1, HTS, NORMAL) TM_STATE(2, HTS, HOT) TM_STATE(3, HTS, PUSHED) TM_STATE(4, HTS, DISABLED) END_TM_PART_STATES() /* WINDOW - VERTSCROLL states */ BEGIN_TM_PART_STATES(VERTSCROLL) TM_STATE(1, VSS, NORMAL) TM_STATE(2, VSS, HOT) TM_STATE(3, VSS, PUSHED) TM_STATE(4, VSS, DISABLED) END_TM_PART_STATES() /* WINDOW - VERTTHUMB states */ BEGIN_TM_PART_STATES(VERTTHUMB) TM_STATE(1, VTS, NORMAL) TM_STATE(2, VTS, HOT) TM_STATE(3, VTS, PUSHED) TM_STATE(4, VTS, DISABLED) END_TM_PART_STATES() END_TM_SCHEMA(ThemeMgrSchema) #endif ================================================ FILE: wine/windows/tom.idl ================================================ /* * Copyright 2006 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef FindText") cpp_quote("#endif") typedef enum tagTomConstants { tomFalse = (int) 0, tomTrue = (int) -1, tomUndefined = (int) -9999999, tomToggle = (int) -9999998, tomAutoColor = (int) -9999997, tomDefault = (int) -9999996, tomSuspend = (int) -9999995, tomResume = (int) -9999994, /* ITextFont::Reset() modes */ tomApplyNow = (int) 0, tomApplyLater = (int) 1, tomTrackParms = (int) 2, tomCacheParms = (int) 3, tomApplyTmp = (int) 4, tomDisableSmartFont = (int) 8, tomEnableSmartFont = (int) 9, tomUsePoints = (int) 10, tomUseTwips = (int) 11, tomBackward = (int) 0xc0000001, tomForward = (int) 0x3fffffff, tomMove = (int) 0, tomExtend = (int) 1, tomNoSelection = (int) 0, tomSelectionIP = (int) 1, tomSelectionNormal = (int) 2, tomSelectionFrame = (int) 3, tomSelectionColumn = (int) 4, tomSelectionRow = (int) 5, tomSelectionBlock = (int) 6, tomSelectionInlineShape = (int) 7, tomSelectionShape = (int) 8, tomSelStartActive = (int) 1, tomSelAtEOL = (int) 2, tomSelOvertype = (int) 4, tomSelActive = (int) 8, tomSelReplace = (int) 16, tomEnd = (int) 0, tomStart = (int) 32, tomCollapseEnd = (int) 0, tomCollapseStart = (int) 1, tomClientCoord = (int) 256, tomNone = (int) 0, tomSingle = (int) 1, tomWords = (int) 2, tomDouble = (int) 3, tomDotted = (int) 4, tomDash = (int) 5, tomDashDot = (int) 6, tomDashDotDot = (int) 7, tomWave = (int) 8, tomThick = (int) 9, tomHair = (int) 10, tomLineSpaceSingle = (int) 0, tomLineSpace1pt5 = (int) 1, tomLineSpaceDouble = (int) 2, tomLineSpaceAtLeast = (int) 3, tomLineSpaceExactly = (int) 4, tomLineSpaceMultiple = (int) 5, tomAlignLeft = (int) 0, tomAlignCenter = (int) 1, tomAlignRight = (int) 2, tomAlignJustify = (int) 3, tomAlignDecimal = (int) 3, tomAlignBar = (int) 4, tomAlignInterWord = (int) 3, tomAlignInterLetter = (int) 4, tomAlignScaled = (int) 5, tomAlignGlyphs = (int) 6, tomAlignSnapGrid = (int) 7, tomSpaces = (int) 0, tomDots = (int) 1, tomDashes = (int) 2, tomLines = (int) 3, tomThickLines = (int) 4, tomEquals = (int) 5, tomTabBack = (int) -3, tomTabNext = (int) -2, tomTabHere = (int) -1, tomListBullet = (int) 1, tomListNumberAsArabic = (int) 2, tomListNumberAsLCLetter = (int) 3, tomListNumberAsUCLetter = (int) 4, tomListNumberAsLCRoman = (int) 5, tomListNumberAsUCRoman = (int) 6, tomListNumberAsSequence = (int) 7, tomListParentheses = (int) 0x10000, tomListPeriod = (int) 0x20000, tomListPlain = (int) 0x30000, tomCharacter = (int) 1, tomWord = (int) 2, tomSentence = (int) 3, tomParagraph = (int) 4, tomLine = (int) 5, tomStory = (int) 6, tomScreen = (int) 7, tomSection = (int) 8, tomColumn = (int) 9, tomRow = (int) 10, tomWindow = (int) 11, tomCell = (int) 12, tomCharFormat = (int) 13, tomParaFormat = (int) 14, tomTable = (int) 15, tomObject = (int) 16, tomMatchWord = (int) 2, tomMatchCase = (int) 4, tomMatchPattern = (int) 8, /* ITextRange story type values */ tomUnknownStory = (int) 0, tomMainTextStory = (int) 1, tomFootnotesStory = (int) 2, tomEndnotesStory = (int) 3, tomCommentsStory = (int) 4, tomTextFrameStory = (int) 5, tomEvenPagesHeaderStory = (int) 6, tomPrimaryHeaderStory = (int) 7, tomEvenPagesFooterStory = (int) 8, tomPrimaryFooterStory = (int) 9, tomFirstPageHeaderStory = (int) 10, tomFirstPageFooterStory = (int) 11, /* ITextFont animation property */ tomNoAnimation = (int) 0, tomLasVegasLights = (int) 1, tomBlinkingBackground = (int) 2, tomSparkleText = (int) 3, tomMarchingBlackAnts = (int) 4, tomMarchingRedAnts = (int) 5, tomShimmer = (int) 6, tomWipeDown = (int) 7, tomWipeRight = (int) 8, tomAnimationMax = (int) 8, tomLowerCase = (int) 0, tomUpperCase = (int) 1, tomTitleCase = (int) 2, tomSentenceCase = (int) 4, tomToggleCase = (int) 5, tomReadOnly = (int) 0x100, tomShareDenyRead = (int) 0x200, tomShareDenyWrite = (int) 0x400, tomPasteFile = (int) 0x1000, tomCreateNew = (int) 0x10, tomCreateAlways = (int) 0x20, tomOpenExisting = (int) 0x30, tomOpenAlways = (int) 0x40, tomTruncateExisting = (int) 0x50, tomRTF = (int) 0x1, tomText = (int) 0x2, tomHTML = (int) 0x3, tomWordDocument = (int) 0x4, tomBold = (int) 0x80000001, tomItalic = (int) 0x80000002, tomUnderline = (int) 0x80000004, tomStrikeout = (int) 0x80000008, tomProtected = (int) 0x80000010, tomLink = (int) 0x80000020, tomSmallCaps = (int) 0x80000040, tomAllCaps = (int) 0x80000080, tomHidden = (int) 0x80000100, tomOutline = (int) 0x80000200, tomShadow = (int) 0x80000400, tomEmboss = (int) 0x80000800, tomImprint = (int) 0x80001000, tomDisabled = (int) 0x80002000, tomRevised = (int) 0x80004000, tomNormalCaret = (int) 0, tomKoreanBlockCaret = (int) 0x1, tomIncludeInset = (int) 0x1, tomIgnoreCurrentFont = (int) 0, tomMatchFontCharset = (int) 0x1, tomMatchFontSignature = (int) 0x2, tomCharset = (int) 0x80000000, tomRE10Mode = (int) 0x1, tomNoIME = (int) 0x80000, tomSelfIME = (int) 0x40000, tomRowApplyDefault = (int)0, tomCellStructureChangeOnly = (int)0x1, } tomConstants; interface ITextRange; interface ITextSelection; interface ITextStoryRanges; [ object, uuid(8cc497c0-a1df-11ce-8098-00aa0047be5d) ] interface ITextDocument : IDispatch { HRESULT GetName([retval, out]BSTR *pName); HRESULT GetSelection([retval, out]ITextSelection **ppSel); HRESULT GetStoryCount([retval, out]LONG *pCount); HRESULT GetStoryRanges([retval, out]ITextStoryRanges **ppStories); HRESULT GetSaved([retval, out]LONG *pValue); HRESULT SetSaved([in]LONG Value); HRESULT GetDefaultTabStop([retval, out]float *pValue); HRESULT SetDefaultTabStop([in]float Value); HRESULT New(); HRESULT Open([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage); HRESULT Save([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage); HRESULT Freeze([retval, out]LONG *pCount); HRESULT Unfreeze([retval, out]LONG *pCount); HRESULT BeginEditCollection(); HRESULT EndEditCollection(); HRESULT Undo([in]LONG Count, [retval, out]LONG *prop); HRESULT Redo([in]LONG Count, [retval, out]LONG *prop); HRESULT Range([in]LONG cp1, [in]LONG cp2, [retval, out]ITextRange **ppRange); HRESULT RangeFromPoint([in]LONG x, [in]LONG y, [retval, out]ITextRange **ppRange); } [ object, uuid(01c25500-4268-11d1-883a-3c8b00c10000) ] interface ITextDocument2Old : ITextDocument { HRESULT AttachMsgFilter([in]IUnknown *filter); HRESULT SetEffectColor([in]LONG index, [in]COLORREF cr); HRESULT GetEffectColor([in]LONG index, [out]COLORREF *cr); HRESULT GetCaretType([retval, out]LONG *type); HRESULT SetCaretType([in]LONG type); HRESULT GetImmContext([retval, out]LONG *context); HRESULT ReleaseImmContext([in]LONG context); HRESULT GetPreferredFont([in]LONG cp, [in]LONG codepage, [in]LONG option, [in]LONG current_codepage, [in]LONG current_fontsize, [out]BSTR *bstr, [out]LONG *pitch_family, [out]LONG *new_fontsize); HRESULT GetNotificationMode([retval, out]LONG *mode); HRESULT SetNotificationMode([in]LONG mode); HRESULT GetClientRect([in]LONG type, [out]LONG *left, [out]LONG *top, [out]LONG *right, [out]LONG *bottom); HRESULT GetSelectionEx([retval, out]ITextSelection **selection); HRESULT GetWindow([out]LONG *hwnd); HRESULT GetFEFlags([out]LONG *flags); HRESULT UpdateWindow(); HRESULT CheckTextLimit([in]LONG cch, [out]LONG *exceed); HRESULT IMEInProgress([in]LONG mode); HRESULT SysBeep(); HRESULT Update([in]LONG mode); HRESULT Notify([in]LONG notify); } interface ITextDisplays; interface ITextFont2; interface ITextPara2; interface ITextStory; interface ITextStoryRanges2; interface ITextStrings; [ object, uuid(c241f5ef-7206-11d8-a2c7-00a0d1d6c6b3) ] interface ITextRow : IDispatch { HRESULT GetAlignment([retval, out] LONG *value); HRESULT SetAlignment([in] LONG value); HRESULT GetCellCount([retval, out] LONG *value); HRESULT SetCellCount([in] LONG value); HRESULT GetCellCountCache([retval, out] LONG *value); HRESULT SetCellCountCache([in] LONG value); HRESULT GetCellIndex([retval, out] LONG *value); HRESULT SetCellIndex([in] LONG value); HRESULT GetCellMargin([retval, out] LONG *value); HRESULT SetCellMargin([in] LONG value); HRESULT GetHeight([retval, out] LONG *value); HRESULT SetHeight([in] LONG value); HRESULT GetIndent([retval, out] LONG *value); HRESULT SetIndent([in] LONG value); HRESULT GetKeepTogether([retval, out] LONG *value); HRESULT SetKeepTogether([in] LONG value); HRESULT GetKeepWithNext([retval, out] LONG *value); HRESULT SetKeepWithNext([in] LONG value); HRESULT GetNestLevel([retval, out] LONG *value); HRESULT GetRTL([retval, out] LONG *value); HRESULT SetRTL([in] LONG value); HRESULT GetCellAlignment([retval, out] LONG *value); HRESULT SetCellAlignment([in] LONG value); HRESULT GetCellColorBack([retval, out] LONG *value); HRESULT SetCellColorBack([in] LONG value); HRESULT GetCellColorFore([retval, out] LONG *value); HRESULT SetCellColorFore([in] LONG value); HRESULT GetCellMergeFlags([retval, out] LONG *value); HRESULT SetCellMergeFlags([in] LONG value); HRESULT GetCellShading([retval, out] LONG *value); HRESULT SetCellShading([in] LONG value); HRESULT GetCellVerticalText([retval, out] LONG *value); HRESULT SetCellVerticalText([in] LONG value); HRESULT GetCellWidth([retval, out] LONG *value); HRESULT SetCellWidth([in] LONG value); HRESULT GetCellBorderColors([out] LONG *left, [out] LONG *top, [out] LONG *right, [out] LONG *bottom); HRESULT GetCellBorderWidths([out] LONG *left, [out] LONG *top, [out] LONG *right, [out] LONG *bottom); HRESULT SetCellBorderColors([in] LONG left, [in] LONG top, [in] LONG right, [in] LONG bottom); HRESULT SetCellBorderWidths([in] LONG left, [in] LONG top, [in] LONG right, [in] LONG bottom); HRESULT Apply([in] LONG row, [in] LONG flags); HRESULT CanChange([retval, out] LONG *value); HRESULT GetProperty([in] LONG type, [out] LONG *value); HRESULT Insert([in] LONG row); HRESULT IsEqual([in] ITextRow *row, [retval, out] LONG *r); HRESULT Reset([in] LONG value); HRESULT SetProperty([in] LONG type, [in] LONG value); } [ object, uuid(c241f5e2-7206-11d8-a2c7-00a0d1d6c6b3) ] interface ITextRange2 : ITextSelection { HRESULT GetCch([retval, out] LONG *count); HRESULT GetCells([retval, out] IUnknown **cells); HRESULT GetColumn([retval, out] IUnknown **column); HRESULT GetCount([retval, out] LONG *count); HRESULT GetDuplicate2([retval, out] ITextRange2 **range); HRESULT GetFont2([retval, out] ITextFont2 **font); HRESULT SetFont2([in] ITextFont2 *font); HRESULT GetFormattedText2([retval, out] ITextRange2 **range); HRESULT SetFormattedText2([in] ITextRange2 *range); HRESULT GetGravity([retval, out] LONG *value); HRESULT SetGravity([in] LONG value); HRESULT GetPara2([retval, out] ITextPara2 **para); HRESULT SetPara2([in] ITextPara2 *para); HRESULT GetRow([retval, out] ITextRow **row); HRESULT GetStartPara([retval, out] LONG *value); HRESULT GetTable([retval, out] IUnknown **table); HRESULT GetURL([retval, out] BSTR *url); HRESULT SetURL([in] BSTR url); HRESULT AddSubrange([in] LONG cp1, [in] LONG cp2, [in] LONG activate); HRESULT BuildUpMath([in] LONG flags); HRESULT DeleteSubrange([in] LONG first, [in] LONG lim); HRESULT Find([in] ITextRange2 *range, [in] LONG count, [in] LONG flags, [out] LONG *delta); HRESULT GetChar2([out] LONG *ch, [in] LONG offset); HRESULT GetDropCap([out] LONG *line, [out] LONG *pos); HRESULT GetInlineObject([out] LONG *type, [out] LONG *align, [out] LONG *ch, [out] LONG *ch1, [out] LONG *ch2, [out] LONG *count, [out] LONG *texstyle, [out] LONG *ccol, [out] LONG *level); HRESULT GetProperty([in] LONG type, [out] LONG *value); HRESULT GetRect([in] LONG type, [out] LONG *left, [out] LONG *top, [out] LONG *right, [out] LONG *bottom, [out] LONG *hit); HRESULT GetSubrange([in] LONG subrange, [out] LONG *first, [out] LONG *limit); HRESULT GetText2([in] LONG flags, [out] BSTR *str); HRESULT HexToUnicode(); HRESULT InsertTable([in] LONG col, [in] LONG row, [in] LONG autofit); HRESULT Linearize([in] LONG flags); HRESULT SetActiveSubrange([in] LONG anchor, [in] LONG active); HRESULT SetDropCap([in] LONG line, [in] LONG pos); HRESULT SetProperty([in] LONG type, [in] LONG value); HRESULT SetText2([in] LONG flags, [in] BSTR str); HRESULT UnicodeToHex(); HRESULT SetInlineObject([in] LONG type, [in] LONG align, [in] LONG ch, [in] LONG ch1, [in] LONG ch2, [in] LONG count, [in] LONG texstyle, [in] LONG ccol); HRESULT GetMathFunctionType([in] BSTR str, [out] LONG *value); HRESULT InsertImage([in] LONG width, [in] LONG height, [in] LONG ascent, [in] LONG type, [in] BSTR alttext, [in] IStream *stream); } [ object, uuid(c241f5e1-7206-11d8-a2c7-00a0d1d6c6b3) ] interface ITextSelection2 : ITextRange2 { } [ object, uuid(c241f5e0-7206-11d8-a2c7-00a0d1d6c6b3) ] interface ITextDocument2 : ITextDocument { HRESULT GetCaretType([retval, out]LONG *value); HRESULT SetCaretType([in]LONG value); HRESULT GetDisplays([retval, out]ITextDisplays **displays); HRESULT GetDocumentFont([retval, out]ITextFont2 **font); HRESULT SetDocumentFont([in]ITextFont2 *font); HRESULT GetDocumentPara([retval, out]ITextPara2 **para); HRESULT SetDocumentPara([in]ITextPara2 *para); HRESULT GetEastAsianFlags([retval, out]LONG *flags); HRESULT GetGenerator([retval, out]BSTR *bstr); HRESULT SetIMEInProgress([in]LONG value); HRESULT GetNotificationMode([retval, out]LONG *mode); HRESULT SetNotificationMode([in]LONG mode); HRESULT GetSelection2([retval, out]ITextSelection2 **selection); HRESULT GetStoryRanges2([retval, out]ITextStoryRanges2 **stories); HRESULT GetTypographyOptions([retval, out]LONG *options); HRESULT GetVersion([retval, out]LONG *value); HRESULT GetWindow([retval, out]LONG *hwnd); HRESULT AttachMsgFilter([in]IUnknown *filter); HRESULT CheckTextLimit([in]LONG cch, [out]LONG *exceed); HRESULT GetCallManager([retval, out]IUnknown **manager); HRESULT GetClientRect([in]LONG type, [out]LONG *left, [out]LONG *top, [out]LONG *right, [out]LONG *bottom); HRESULT GetEffectColor([in]LONG index, [out]COLORREF *cr); HRESULT GetImmContext([retval, out]LONG *context); HRESULT GetPreferredFont([in]LONG cp, [in]LONG codepage, [in]LONG option, [in]LONG current_codepage, [in]LONG current_fontsize, [out]BSTR *bstr, [out]LONG *pitch_family, [out]LONG *new_fontsize); HRESULT GetProperty([in]LONG type, [out]LONG *value); HRESULT GetStrings([out]ITextStrings **strings); HRESULT Notify([in]LONG notify); HRESULT Range2([in]LONG cp_active, [in]LONG cp_anchor, [retval, out]ITextRange2 **range); HRESULT RangeFromPoint2([in]LONG x, [in]LONG y, [in]LONG type, [retval, out]ITextRange2 **range); HRESULT ReleaseCallManager([in]IUnknown *manager); HRESULT ReleaseImmContext([in]LONG context); HRESULT SetEffectColor([in]LONG index, [in]LONG value); HRESULT SetProperty([in]LONG type, [in]LONG value); HRESULT SetTypographyOptions([in]LONG options, [in]LONG mask); HRESULT SysBeep(); HRESULT Update([in]LONG value); HRESULT UpdateWindow(); HRESULT GetMathProperties([out]LONG *options); HRESULT SetMathProperties([in]LONG options, [in]LONG mask); HRESULT GetActiveStory([retval, out]ITextStory **story); HRESULT SetActiveStory([in]ITextStory *story); HRESULT GetMainStory([retval, out]ITextStory **story); HRESULT GetNewStory([retval, out]ITextStory **story); HRESULT GetStory([in]LONG index, [retval, out]ITextStory **story); } interface ITextFont; interface ITextPara; [ object, uuid(8cc497c2-a1df-11ce-8098-00aa0047be5d) ] interface ITextRange : IDispatch { HRESULT GetText([retval, out]BSTR *pbstr); HRESULT SetText([in]BSTR bstr); HRESULT GetChar([retval, out]LONG *pch); HRESULT SetChar([in]LONG ch); HRESULT GetDuplicate([retval, out]ITextRange **ppRange); HRESULT GetFormattedText([retval, out]ITextRange **ppRange); HRESULT SetFormattedText([in]ITextRange *pRange); HRESULT GetStart([retval, out]LONG *pcpFirst); HRESULT SetStart([in]LONG cpFirst); HRESULT GetEnd([retval, out]LONG *pcpLim); HRESULT SetEnd([in]LONG cpLim); HRESULT GetFont([retval, out]ITextFont **pFont); HRESULT SetFont([in]ITextFont *pFont); HRESULT GetPara([retval, out]ITextPara **ppPara); HRESULT SetPara([in]ITextPara *pPara); HRESULT GetStoryLength([retval, out]LONG *pcch); HRESULT GetStoryType([retval, out]LONG *pValue); HRESULT Collapse([in]LONG bStart); HRESULT Expand([in]LONG Unit, [retval, out]LONG *pDelta); HRESULT GetIndex([in]LONG Unit, [retval, out]LONG *pIndex); HRESULT SetIndex([in]LONG Unit, [in]LONG Index, [in]LONG Extend); HRESULT SetRange([in]LONG anchor, [in]LONG active); HRESULT InRange([in]ITextRange *pRange, [retval, out]LONG *pb); HRESULT InStory([in]ITextRange *pRange, [retval, out]LONG *pb); HRESULT IsEqual([in]ITextRange *pRange, [retval, out]LONG *pb); HRESULT Select(); HRESULT StartOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta); HRESULT EndOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta); HRESULT Move([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT MoveStart([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT MoveEnd([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT MoveWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT MoveStartWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT MoveEndWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT MoveUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT MoveStartUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT MoveEndUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT FindText([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength); HRESULT FindTextStart([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength); HRESULT FindTextEnd([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength); HRESULT Delete([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta); HRESULT Cut([out]VARIANT *pVar); HRESULT Copy([out]VARIANT *pVar); HRESULT Paste([in]VARIANT *pVar, [in]LONG Format); HRESULT CanPaste([in]VARIANT *pVar, [in]LONG Format, [retval, out]LONG *pb); HRESULT CanEdit([retval, out]LONG *pb); HRESULT ChangeCase([in]LONG Type); HRESULT GetPoint([in]LONG Type, [out]LONG *cx, [out]LONG *cy); HRESULT SetPoint([in]LONG x, [in]LONG y, [in]LONG Type, [in]LONG Extend); HRESULT ScrollIntoView([in]LONG Value); HRESULT GetEmbeddedObject([retval, out]IUnknown **ppv); } [ object, uuid(8cc497c1-a1df-11ce-8098-00aa0047be5d) ] interface ITextSelection : ITextRange { HRESULT GetFlags([retval, out]LONG *pFlags); HRESULT SetFlags([in]LONG Flags); HRESULT GetType([retval, out]LONG *pType); HRESULT MoveLeft([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta); HRESULT MoveRight([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta); HRESULT MoveUp([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta); HRESULT MoveDown([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta); HRESULT HomeKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta); HRESULT EndKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta); HRESULT TypeText([in]BSTR bstr); } [ object, uuid(8cc497c3-a1df-11ce-8098-00aa0047be5d) ] interface ITextFont : IDispatch { HRESULT GetDuplicate([retval, out]ITextFont **ppFont); HRESULT SetDuplicate([in]ITextFont *pFont); HRESULT CanChange([out]LONG *pB); HRESULT IsEqual([in]ITextFont *pFont, [retval, out]LONG *pB); HRESULT Reset([in]LONG Value); HRESULT GetStyle([retval, out]LONG *pValue); HRESULT SetStyle([in]LONG Value); HRESULT GetAllCaps([retval, out]LONG *pValue); HRESULT SetAllCaps([in]LONG Value); HRESULT GetAnimation([retval, out]LONG *pValue); HRESULT SetAnimation([in]LONG Value); HRESULT GetBackColor([retval, out]LONG *pValue); HRESULT SetBackColor([in]LONG Value); HRESULT GetBold([retval, out]LONG *pValue); HRESULT SetBold([in]LONG Value); HRESULT GetEmboss([retval, out]LONG *pValue); HRESULT SetEmboss([in]LONG Value); HRESULT GetForeColor([retval, out]LONG *pValue); HRESULT SetForeColor([in]LONG Value); HRESULT GetHidden([retval, out]LONG *pValue); HRESULT SetHidden([in]LONG Value); HRESULT GetEngrave([retval, out]LONG *pValue); HRESULT SetEngrave([in]LONG Value); HRESULT GetItalic([retval, out]LONG *pValue); HRESULT SetItalic([in]LONG Value); HRESULT GetKerning([retval, out]float *pValue); HRESULT SetKerning([in]float Value); HRESULT GetLanguageID([retval, out]LONG *pValue); HRESULT SetLanguageID([in]LONG Value); HRESULT GetName([retval, out]BSTR *pValue); HRESULT SetName([in]BSTR Value); HRESULT GetOutline([retval, out]LONG *pValue); HRESULT SetOutline([in]LONG Value); HRESULT GetPosition([retval, out]float *pValue); HRESULT SetPosition([in]float Value); HRESULT GetProtected([retval, out]LONG *pValue); HRESULT SetProtected([in]LONG Value); HRESULT GetShadow([retval, out]LONG *pValue); HRESULT SetShadow([in]LONG Value); HRESULT GetSize([retval, out]float *pValue); HRESULT SetSize([in]float Value); HRESULT GetSmallCaps([retval, out]LONG *pValue); HRESULT SetSmallCaps([in]LONG Value); HRESULT GetSpacing([retval, out]float *pValue); HRESULT SetSpacing([in]float Value); HRESULT GetStrikeThrough([retval, out]LONG *pValue); HRESULT SetStrikeThrough([in]LONG Value); HRESULT GetSubscript([retval, out]LONG *pValue); HRESULT SetSubscript([in]LONG Value); HRESULT GetSuperscript([retval, out]LONG *pValue); HRESULT SetSuperscript([in]LONG Value); HRESULT GetUnderline([retval, out]LONG *pValue); HRESULT SetUnderline([in]LONG Value); HRESULT GetWeight([retval, out]LONG *pValue); HRESULT SetWeight([in]LONG Value); } [ object, uuid(8cc497c4-a1df-11ce-8098-00aa0047be5d) ] interface ITextPara : IDispatch { HRESULT GetDuplicate([retval, out]ITextPara **ppPara); HRESULT SetDuplicate([in]ITextPara *pPara); HRESULT CanChange([out]LONG *pB); HRESULT IsEqual([in]ITextPara *pPara, [retval, out]LONG *pB); HRESULT Reset([in]LONG Value); HRESULT GetStyle([retval, out]LONG *pValue); HRESULT SetStyle([in]LONG Value); HRESULT GetAlignment([retval, out]LONG *pValue); HRESULT SetAlignment([in]LONG Value); HRESULT GetHyphenation([retval, out]LONG *pValue); HRESULT SetHyphenation([in]LONG Value); HRESULT GetFirstLineIndent([retval, out]float *pValue); HRESULT GetKeepTogether([retval, out]LONG *pValue); HRESULT SetKeepTogether([in]LONG Value); HRESULT GetKeepWithNext([retval, out]LONG *pValue); HRESULT SetKeepWithNext([in]LONG Value); HRESULT GetLeftIndent([retval, out]float *pValue); HRESULT GetLineSpacing([retval, out]float *pValue); HRESULT GetLineSpacingRule([retval, out]LONG *pValue); HRESULT GetListAlignment([retval, out]LONG *pValue); HRESULT SetListAlignment([in]LONG Value); HRESULT GetListLevelIndex([retval, out]LONG *pValue); HRESULT SetListLevelIndex([in]LONG Value); HRESULT GetListStart([retval, out]LONG *pValue); HRESULT SetListStart([in]LONG Value); HRESULT GetListTab([retval, out]float *pValue); HRESULT SetListTab([in]float Value); HRESULT GetListType([retval, out]LONG *pValue); HRESULT SetListType([in]LONG Value); HRESULT GetNoLineNumber([retval, out]LONG *pValue); HRESULT SetNoLineNumber([in]LONG Value); HRESULT GetPageBreakBefore([retval, out]LONG *pValue); HRESULT SetPageBreakBefore([in]LONG Value); HRESULT GetRightIndent([retval, out]float *pValue); HRESULT SetRightIndent([in]float Value); HRESULT SetIndents([in]float StartIndent, [in]float LeftIndent, [in]float RightIndent); HRESULT SetLineSpacing([in]LONG LineSpacingRule, [in]float LineSpacing); HRESULT GetSpaceAfter([retval, out]float *pValue); HRESULT SetSpaceAfter([in]float Value); HRESULT GetSpaceBefore([retval, out]float *pValue); HRESULT SetSpaceBefore([in]float Value); HRESULT GetWidowControl([retval, out]LONG *pValue); HRESULT SetWidowControl([in]LONG Value); HRESULT GetTabCount([retval, out]LONG *pCount); HRESULT AddTab([in]float tbPos, [in]LONG tbAlign, [in]LONG tbLeader); HRESULT ClearAllTabs(); HRESULT DeleteTab([in]float tbPos); HRESULT GetTab([in]LONG iTab, [out]float *ptbPos, [out]LONG *ptbAlign, [out]LONG *ptbLeader); } [ object, uuid(8cc497c5-a1df-11ce-8098-00aa0047be5d) ] interface ITextStoryRanges : IDispatch { HRESULT _NewEnum([retval, out]IUnknown **ppUnkEnum); HRESULT Item([in]LONG Index, [retval, out]ITextRange **ppRange); HRESULT GetCount([retval, out]LONG *pCount); } ================================================ FILE: wine/windows/traffic.h ================================================ /* * TRAFFIC definitions * * Copyright (c) 2009 Stefan Leichter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_TRAFFIC_H #define __WINE_TRAFFIC_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef VOID (CALLBACK * TCI_ADD_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG); typedef VOID (CALLBACK * TCI_DEL_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG); typedef VOID (CALLBACK * TCI_MOD_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG); typedef VOID (CALLBACK * TCI_NOTIFY_HANDLER) (HANDLE,HANDLE,ULONG,HANDLE,ULONG,PVOID); typedef struct _TCI_CLIENT_FUNC_LIST { TCI_NOTIFY_HANDLER ClNotifyHandler; TCI_ADD_FLOW_COMPLETE_HANDLER ClAddFlowCompleteHandler; TCI_MOD_FLOW_COMPLETE_HANDLER ClModifyFlowCompleteHandler; TCI_DEL_FLOW_COMPLETE_HANDLER ClDeleteFlowCompleteHandler; } TCI_CLIENT_FUNC_LIST, *PTCI_CLIENT_FUNC_LIST; ULONG WINAPI TcRegisterClient(ULONG,HANDLE,PTCI_CLIENT_FUNC_LIST,PHANDLE); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_TRAFFIC_H */ ================================================ FILE: wine/windows/transact.idl ================================================ /* * Copyright (C) 2013 Daniel Jeliński * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; cpp_quote("#include ") interface ITransaction; interface ITransactionCloner; interface ITransaction2; interface ITransactionDispenser; interface ITransactionOptions; interface ITransactionOutcomeEvents; interface ITmNodeName; typedef struct BOID { byte rgb[16]; } BOID; cpp_quote("#ifndef MAX_TRAN_DESC_DEFINED") cpp_quote("#define MAX_TRAN_DESC_DEFINED") typedef enum TX_MISC_CONSTANTS { MAX_TRAN_DESC = 40 } TX_MISC_CONSTANTS; cpp_quote("#endif") typedef BOID XACTUOW; typedef LONG ISOLEVEL; typedef enum ISOLATIONLEVEL { ISOLATIONLEVEL_UNSPECIFIED = 0xffffffff, ISOLATIONLEVEL_CHAOS = 0x10, ISOLATIONLEVEL_READUNCOMMITTED = 0x100, ISOLATIONLEVEL_BROWSE = 0x100, ISOLATIONLEVEL_CURSORSTABILITY = 0x1000, ISOLATIONLEVEL_READCOMMITTED = 0x1000, ISOLATIONLEVEL_REPEATABLEREAD = 0x10000, ISOLATIONLEVEL_SERIALIZABLE = 0x100000, ISOLATIONLEVEL_ISOLATED = 0x100000 } ISOLATIONLEVEL; typedef struct XACTTRANSINFO { XACTUOW uow; ISOLEVEL isoLevel; ULONG isoFlags; DWORD grfTCSupported; DWORD grfRMSupported; DWORD grfTCSupportedRetaining; DWORD grfRMSupportedRetaining; } XACTTRANSINFO; typedef struct XACTSTATS { ULONG cOpen; ULONG cCommitting; ULONG cCommitted; ULONG cAborting; ULONG cAborted; ULONG cInDoubt; ULONG cHeuristicDecision; FILETIME timeTransactionsUp; } XACTSTATS; typedef enum ISOFLAG { ISOFLAG_RETAIN_COMMIT_DC = 1, ISOFLAG_RETAIN_COMMIT = 2, ISOFLAG_RETAIN_COMMIT_NO = 3, ISOFLAG_RETAIN_ABORT_DC = 4, ISOFLAG_RETAIN_ABORT = 8, ISOFLAG_RETAIN_ABORT_NO = 12, ISOFLAG_RETAIN_DONTCARE = ISOFLAG_RETAIN_COMMIT_DC | ISOFLAG_RETAIN_ABORT_DC, ISOFLAG_RETAIN_BOTH = ISOFLAG_RETAIN_COMMIT | ISOFLAG_RETAIN_ABORT, ISOFLAG_RETAIN_NONE = ISOFLAG_RETAIN_COMMIT_NO | ISOFLAG_RETAIN_ABORT_NO, ISOFLAG_OPTIMISTIC = 16, ISOFLAG_READONLY = 32 } ISOFLAG; typedef enum XACTTC { XACTTC_NONE = 0, XACTTC_SYNC_PHASEONE = 1, XACTTC_SYNC_PHASETWO = 2, XACTTC_SYNC = 2, XACTTC_ASYNC_PHASEONE = 4, XACTTC_ASYNC = 4 } XACTTC; typedef enum XACTRM { XACTRM_OPTIMISTICLASTWINS = 1, XACTRM_NOREADONLYPREPARES } XACTRM; typedef enum XACTCONST { XACTCONST_TIMEOUTINFINITE } XACTCONST; typedef enum XACTHEURISTIC { XACTHEURISTIC_ABORT = 1, XACTHEURISTIC_COMMIT, XACTHEURISTIC_DAMAGE, XACTHEURISTIC_DANGER } XACTHEURISTIC; typedef enum XACTSTAT { XACTSTAT_NONE = 0, XACTSTAT_OPENNORMAL = 0x1, XACTSTAT_OPENREFUSED = 0x2, XACTSTAT_PREPARING = 0x4, XACTSTAT_PREPARED = 0x8, XACTSTAT_PREPARERETAINING = 0x10, XACTSTAT_PREPARERETAINED = 0x20, XACTSTAT_COMMITTING = 0x40, XACTSTAT_COMMITRETAINING = 0x80, XACTSTAT_ABORTING = 0x100, XACTSTAT_ABORTED = 0x200, XACTSTAT_COMMITTED = 0x400, XACTSTAT_HEURISTIC_ABORT = 0x800, XACTSTAT_HEURISTIC_COMMIT = 0x1000, XACTSTAT_HEURISTIC_DAMAGE = 0x2000, XACTSTAT_HEURISTIC_DANGER = 0x4000, XACTSTAT_FORCED_ABORT = 0x8000, XACTSTAT_FORCED_COMMIT = 0x10000, XACTSTAT_INDOUBT = 0x20000, XACTSTAT_CLOSED = 0x40000, XACTSTAT_OPEN = 0x3, XACTSTAT_NOTPREPARED = 0x7ffc3, XACTSTAT_ALL = 0x7ffff } XACTSTAT; typedef struct XACTOPT { ULONG ulTimeout; char szDescription[40 ]; } XACTOPT; [ object, uuid(0fb15084-af41-11ce-bd2b-204c4f4f5020) ] interface ITransaction : IUnknown { HRESULT Commit([in] BOOL fRetaining, [in] DWORD grfTC, [in] DWORD grfRM); HRESULT Abort([in, unique] BOID *pboidReason, [in] BOOL fRetaining, [in] BOOL fAsync); HRESULT GetTransactionInfo([out] XACTTRANSINFO *pinfo); } [ object, uuid(02656950-2152-11d0-944C-00A0C905416E) ] interface ITransactionCloner : ITransaction { HRESULT CloneWithCommitDisabled([out] ITransaction **ppITransaction); } [ object, uuid(34021548-0065-11d3-bac1-00c04f797be2) ] interface ITransaction2 : ITransactionCloner { HRESULT GetTransactionInfo2([out] XACTTRANSINFO *pinfo); } [ object, uuid(3A6AD9E1-23B9-11cf-AD60-00AA00A74CCD) ] interface ITransactionDispenser : IUnknown { HRESULT GetOptionsObject([out] ITransactionOptions **ppOptions); HRESULT BeginTransaction([in, unique] IUnknown *punkOuter, [in] ISOLEVEL isoLevel, [in] ULONG isoFlags, [in, unique] ITransactionOptions *pOptions, [out] ITransaction **ppTransaction); } [ object, uuid(3A6AD9E0-23B9-11cf-AD60-00AA00A74CCD) ] interface ITransactionOptions : IUnknown { HRESULT SetOptions([in] XACTOPT *pOptions); HRESULT GetOptions([in, out] XACTOPT *pOptions); } [ object, uuid(3A6AD9E2-23B9-11cf-AD60-00AA00A74CCD) ] interface ITransactionOutcomeEvents : IUnknown { HRESULT Committed([in] BOOL fRetaining, [in, unique] XACTUOW *pNewUOW, [in] HRESULT hr); HRESULT Aborted([in, unique] BOID *pboidReason, [in] BOOL fRetaining, [in, unique] XACTUOW *pNewUOW, [in] HRESULT hr); HRESULT HeuristicDecision([in] DWORD dwDecision, [in, unique] BOID *pboidReason, [in] HRESULT hr); HRESULT Indoubt(void); } [ object, uuid(30274F88-6EE4-474e-9B95-7807BC9EF8CF) ] interface ITmNodeName : IUnknown { HRESULT GetNodeNameSize([out] ULONG *pcbNodeNameSize); HRESULT GetNodeName([in] ULONG cbNodeNameBufferSize, [in, out] LPWSTR pNodeNameBuffer); } ================================================ FILE: wine/windows/twain.h ================================================ /* ======================================================================== *\ Copyright (C) 1991, 1992 TWAIN Working Group: Aldus, Caere, Eastman-Kodak, Hewlett-Packard and Logitech Corporations. All rights reserved. Copyright (C) 1997 TWAIN Working Group: Bell+Howell, Canon, DocuMagix, Fujitsu, Genoa Technology, Hewlett-Packard, Kofax Imaging Products, and Ricoh Corporation. All rights reserved. Copyright (C) 1998 TWAIN Working Group: Adobe Systems Incorporated, Canon Information Systems, Eastman Kodak Company, Fujitsu Computer Products of America, Genoa Technology, Hewlett-Packard Company, Intel Corporation, Kofax Image Products, JFL Peripheral Solutions Inc., Ricoh Corporation, and Xerox Corporation. All rights reserved. TWAIN.h - This is the definitive include file for applications and data sources written to the TWAIN specification. It defines constants, data structures, messages etc. for the public interface to TWAIN. Revision History: version 1.0, March 6, 1992. TWAIN 1.0. version 1.1, January 1993. Tech Notes 1.1 version 1.5, June 1993. Specification Update 1.5 Change DC to TW Change filename from DC.H to TWAIN.H version 1.5, July 1993. Remove spaces from country identifiers version 1.7, July 1997 Added Capabilities and data structure for document imaging and digital cameras. KHL. version 1.7, July 1997 Inserted Borland compatible structure packing directives provided by Mentor. JMH version 1.7, Aug 1997 Expanded file tabs to spaces. NOTE: future authors should be sure to have their editors set to automatically expand tabs to spaces (original tab setting was 4 spaces). version 1.7, Sept 1997 Added job control values Added return codes version 1.7, Sept 1997 changed definition of pRGBRESPONSE to pTW_RGBRESPONSE version 1.7 Aug 1998 Added missing TWEI_BARCODEROTATION values TWBCOR_ types JMH version 1.8 August 1998 Added new types and definitions required for 1.8 Specification JMH version 1.8 January 1999 Changed search mode from SRCH_ to TWBD_ as in 1.8 Specification, added TWBT_MAXICODE JMH version 1.8 January 1999 Removed undocumented duplicate AUTO JMH \* ======================================================================== */ #ifndef TWAIN #define TWAIN #include #include "windef.h" #include "winbase.h" /* The Twain structures must be packed on 2 byte alignment */ #include "pshpack2.h" #undef FAR #define FAR /**************************************************************************** * TWAIN Version * ****************************************************************************/ #define TWON_PROTOCOLMINOR 8 /* Changed for Version 1.8 */ #define TWON_PROTOCOLMAJOR 1 /**************************************************************************** * Platform Dependent Definitions and Typedefs * ****************************************************************************/ /* Define one of the following, depending on the platform */ /* #define _MAC_ */ /* #define _UNIX_ */ #define _MSWIN_ #ifdef _MSWIN_ typedef HANDLE TW_HANDLE; typedef LPVOID TW_MEMREF; typedef BYTE * HPBYTE; typedef void * HPVOID; #endif /* _MSWIN_ */ #ifdef _MAC_ #define PASCAL pascal #define FAR typedef Handle TW_HANDLE; typedef char *TW_MEMREF; #endif /* _MAC_ */ #ifdef _UNIX_ /* #define PASCAL pascal */ #define FAR typedef unsigned char *TW_HANDLE; typedef unsigned char *TW_MEMREF; #endif /* _UNIX_ */ /**************************************************************************** * Type Definitions * ****************************************************************************/ /* String types. These include room for the strings and a NULL char, * * or, on the Mac, a length byte followed by the string. * * TW_STR255 must hold less than 256 chars so length fits in first byte. */ typedef char TW_STR32[34], FAR *pTW_STR32; typedef char TW_STR64[66], FAR *pTW_STR64; typedef char TW_STR128[130], FAR *pTW_STR128; typedef char TW_STR255[256], FAR *pTW_STR255; /* Numeric types. */ typedef char TW_INT8, FAR *pTW_INT8; typedef short TW_INT16, FAR *pTW_INT16; typedef LONG TW_INT32, FAR *pTW_INT32; typedef unsigned char TW_UINT8, FAR *pTW_UINT8; typedef unsigned short TW_UINT16, FAR *pTW_UINT16; typedef ULONG TW_UINT32, FAR *pTW_UINT32; typedef unsigned short TW_BOOL, FAR *pTW_BOOL; /* Fixed point structure type. */ typedef struct { TW_INT16 Whole; /* maintains the sign */ TW_UINT16 Frac; } TW_FIX32, FAR *pTW_FIX32; /**************************************************************************** * Structure Definitions * ****************************************************************************/ /* No DAT needed. */ typedef struct { TW_FIX32 X; TW_FIX32 Y; TW_FIX32 Z; } TW_CIEPOINT, FAR * pTW_CIEPOINT; /* No DAT needed. */ typedef struct { TW_FIX32 StartIn; TW_FIX32 BreakIn; TW_FIX32 EndIn; TW_FIX32 StartOut; TW_FIX32 BreakOut; TW_FIX32 EndOut; TW_FIX32 Gamma; TW_FIX32 SampleCount; /* if =0 use the gamma */ } TW_DECODEFUNCTION, FAR * pTW_DECODEFUNCTION; /* No DAT needed. */ typedef struct { TW_UINT8 Index; /* Value used to index into the color table. */ TW_UINT8 Channel1; /* First tri-stimulus value (e.g Red) */ TW_UINT8 Channel2; /* Second tri-stimulus value (e.g Green) */ TW_UINT8 Channel3; /* Third tri-stimulus value (e.g Blue) */ } TW_ELEMENT8, FAR * pTW_ELEMENT8; /* No DAT. Defines a frame rectangle in ICAP_UNITS coordinates. */ typedef struct { TW_FIX32 Left; TW_FIX32 Top; TW_FIX32 Right; TW_FIX32 Bottom; } TW_FRAME, FAR * pTW_FRAME; /* No DAT needed. Used to manage memory buffers. */ typedef struct { TW_UINT32 Flags; /* Any combination of the TWMF_ constants. */ TW_UINT32 Length; /* Number of bytes stored in buffer TheMem. */ TW_MEMREF TheMem; /* Pointer or handle to the allocated memory buffer. */ } TW_MEMORY, FAR * pTW_MEMORY; /* No DAT needed. */ typedef struct { TW_DECODEFUNCTION Decode[3]; TW_FIX32 Mix[3][3]; } TW_TRANSFORMSTAGE, FAR * pTW_TRANSFORMSTAGE; /* No DAT needed. Describes version of software currently running. */ typedef struct { TW_UINT16 MajorNum; /* Major revision number of the software. */ TW_UINT16 MinorNum; /* Incremental revision number of the software. */ TW_UINT16 Language; /* e.g. TWLG_SWISSFRENCH */ TW_UINT16 Country; /* e.g. TWCY_SWITZERLAND */ TW_STR32 Info; /* e.g. "1.0b3 Beta release" */ } TW_VERSION, FAR * pTW_VERSION; /* TWON_ARRAY. Container for array of values (a simplified TW_ENUMERATION) */ typedef struct { TW_UINT16 ItemType; TW_UINT32 NumItems; /* How many items in ItemList */ TW_UINT8 ItemList[1]; /* Array of ItemType values starts here */ } TW_ARRAY, FAR * pTW_ARRAY; /* TWON_ENUMERATION. Container for a collection of values. */ typedef struct { TW_UINT16 ItemType; TW_UINT32 NumItems; /* How many items in ItemList */ TW_UINT32 CurrentIndex; /* Current value is in ItemList[CurrentIndex] */ TW_UINT32 DefaultIndex; /* Powerup value is in ItemList[DefaultIndex] */ TW_UINT8 ItemList[1]; /* Array of ItemType values starts here */ } TW_ENUMERATION, FAR * pTW_ENUMERATION; /* TWON_ONEVALUE. Container for one value. */ typedef struct { TW_UINT16 ItemType; TW_UINT32 Item; } TW_ONEVALUE, FAR * pTW_ONEVALUE; /* TWON_RANGE. Container for a range of values. */ typedef struct { TW_UINT16 ItemType; TW_UINT32 MinValue; /* Starting value in the range. */ TW_UINT32 MaxValue; /* Final value in the range. */ TW_UINT32 StepSize; /* Increment from MinValue to MaxValue. */ TW_UINT32 DefaultValue; /* Power-up value. */ TW_UINT32 CurrentValue; /* The value that is currently in effect. */ } TW_RANGE, FAR * pTW_RANGE; /* DAT_CAPABILITY. Used by application to get/set capability from/in a data source. */ typedef struct { TW_UINT16 Cap; /* id of capability to set or get, e.g. CAP_BRIGHTNESS */ TW_UINT16 ConType; /* TWON_ONEVALUE, _RANGE, _ENUMERATION or _ARRAY */ TW_HANDLE hContainer; /* Handle to container of type Dat */ } TW_CAPABILITY, FAR * pTW_CAPABILITY; /* DAT_CIECOLOR. */ typedef struct { TW_UINT16 ColorSpace; TW_INT16 LowEndian; TW_INT16 DeviceDependent; TW_INT32 VersionNumber; TW_TRANSFORMSTAGE StageABC; TW_TRANSFORMSTAGE StageLMN; TW_CIEPOINT WhitePoint; TW_CIEPOINT BlackPoint; TW_CIEPOINT WhitePaper; TW_CIEPOINT BlackInk; TW_FIX32 Samples[1]; } TW_CIECOLOR, FAR * pTW_CIECOLOR; /* DAT_EVENT. For passing events down from the application to the DS. */ typedef struct { TW_MEMREF pEvent; /* Windows pMSG or Mac pEvent. */ TW_UINT16 TWMessage; /* TW msg from data source, e.g. MSG_XFERREADY */ } TW_EVENT, FAR * pTW_EVENT; /* DAT_GRAYRESPONSE */ typedef struct { TW_ELEMENT8 Response[1]; } TW_GRAYRESPONSE, FAR * pTW_GRAYRESPONSE; /* DAT_IDENTITY. Identifies the program/library/code resource. */ typedef struct { TW_UINT32 Id; /* Unique number. In Windows, application hWnd */ TW_VERSION Version; /* Identifies the piece of code */ TW_UINT16 ProtocolMajor; /* Application and DS must set to TWON_PROTOCOLMAJOR */ TW_UINT16 ProtocolMinor; /* Application and DS must set to TWON_PROTOCOLMINOR */ TW_UINT32 SupportedGroups; /* Bit field OR combination of DG_ constants */ TW_STR32 Manufacturer; /* Manufacturer name, e.g. "Hewlett-Packard" */ TW_STR32 ProductFamily; /* Product family name, e.g. "ScanJet" */ TW_STR32 ProductName; /* Product name, e.g. "ScanJet Plus" */ } TW_IDENTITY, FAR * pTW_IDENTITY; /* DAT_IMAGEINFO. Application gets detailed image info from DS with this. */ typedef struct { TW_FIX32 XResolution; /* Resolution in the horizontal */ TW_FIX32 YResolution; /* Resolution in the vertical */ TW_INT32 ImageWidth; /* Columns in the image, -1 if unknown by DS*/ TW_INT32 ImageLength; /* Rows in the image, -1 if unknown by DS */ TW_INT16 SamplesPerPixel; /* Number of samples per pixel, 3 for RGB */ TW_INT16 BitsPerSample[8]; /* Number of bits for each sample */ TW_INT16 BitsPerPixel; /* Number of bits for each padded pixel */ TW_BOOL Planar; /* True if Planar, False if chunky */ TW_INT16 PixelType; /* How to interp data; photo interp (TWPT_) */ TW_UINT16 Compression; /* How the data is compressed (TWCP_xxxx) */ } TW_IMAGEINFO, FAR * pTW_IMAGEINFO; /* DAT_IMAGELAYOUT. Provides image layout information in current units. */ typedef struct { TW_FRAME Frame; /* Frame coords within larger document */ TW_UINT32 DocumentNumber; TW_UINT32 PageNumber; /* Reset when you go to next document */ TW_UINT32 FrameNumber; /* Reset when you go to next page */ } TW_IMAGELAYOUT, FAR * pTW_IMAGELAYOUT; /* DAT_IMAGEMEMXFER. Used to pass image data (e.g. in strips) from DS to application.*/ typedef struct { TW_UINT16 Compression; /* How the data is compressed */ TW_UINT32 BytesPerRow; /* Number of bytes in a row of data */ TW_UINT32 Columns; /* How many columns */ TW_UINT32 Rows; /* How many rows */ TW_UINT32 XOffset; /* How far from the side of the image */ TW_UINT32 YOffset; /* How far from the top of the image */ TW_UINT32 BytesWritten; /* How many bytes written in Memory */ TW_MEMORY Memory; /* Mem struct used to pass actual image data */ } TW_IMAGEMEMXFER, FAR * pTW_IMAGEMEMXFER; /* Changed in 1.1: QuantTable, HuffmanDC, HuffmanAC TW_MEMREF -> TW_MEMORY */ /* DAT_JPEGCOMPRESSION. Based on JPEG Draft International Std, ver 10918-1. */ typedef struct { TW_UINT16 ColorSpace; /* One of the TWPT_xxxx values */ TW_UINT32 SubSampling; /* Two word "array" for subsampling values */ TW_UINT16 NumComponents; /* Number of color components in image */ TW_UINT16 RestartFrequency; /* Frequency of restart marker codes in MDU's */ TW_UINT16 QuantMap[4]; /* Mapping of components to QuantTables */ TW_MEMORY QuantTable[4]; /* Quantization tables */ TW_UINT16 HuffmanMap[4]; /* Mapping of components to Huffman tables */ TW_MEMORY HuffmanDC[2]; /* DC Huffman tables */ TW_MEMORY HuffmanAC[2]; /* AC Huffman tables */ } TW_JPEGCOMPRESSION, FAR * pTW_JPEGCOMPRESSION; /* DAT_PALETTE8. Color palette when TWPT_PALETTE pixels xfer'd in mem buf. */ typedef struct { TW_UINT16 NumColors; /* Number of colors in the color table. */ TW_UINT16 PaletteType; /* TWPA_xxxx, specifies type of palette. */ TW_ELEMENT8 Colors[256]; /* Array of palette values starts here. */ } TW_PALETTE8, FAR * pTW_PALETTE8; /* DAT_PENDINGXFERS. Used with MSG_ENDXFER to indicate additional data. */ typedef struct { TW_UINT16 Count; union { TW_UINT32 EOJ; TW_UINT32 Reserved; } u; } TW_PENDINGXFERS, FAR *pTW_PENDINGXFERS; /* DAT_RGBRESPONSE */ typedef struct { TW_ELEMENT8 Response[1]; } TW_RGBRESPONSE, FAR * pTW_RGBRESPONSE; /* DAT_SETUPFILEXFER. Sets up DS to application data transfer via a file. */ typedef struct { TW_STR255 FileName; TW_UINT16 Format; /* Any TWFF_ constant */ TW_INT16 VRefNum; /* Used for Mac only */ } TW_SETUPFILEXFER, FAR * pTW_SETUPFILEXFER; /* DAT_SETUPMEMXFER. Sets up DS to application data transfer via a memory buffer. */ typedef struct { TW_UINT32 MinBufSize; TW_UINT32 MaxBufSize; TW_UINT32 Preferred; } TW_SETUPMEMXFER, FAR * pTW_SETUPMEMXFER; /* DAT_STATUS. Application gets detailed status info from a data source with this. */ typedef struct { TW_UINT16 ConditionCode; /* Any TWCC_ constant */ TW_UINT16 Reserved; /* Future expansion space */ } TW_STATUS, FAR * pTW_STATUS; /* DAT_USERINTERFACE. Coordinates UI between application and data source. */ typedef struct { TW_BOOL ShowUI; /* TRUE if DS should bring up its UI */ TW_BOOL ModalUI; /* For Mac only - true if the DS's UI is modal */ TW_HANDLE hParent; /* For windows only - Application window handle */ } TW_USERINTERFACE, FAR * pTW_USERINTERFACE; /* SDH - 03/21/95 - TWUNK */ /* DAT_TWUNKIDENTITY. Provides DS identity and 'other' information necessary */ /* across thunk link. */ typedef struct { TW_IDENTITY identity; /* Identity of data source. */ TW_STR255 dsPath; /* Full path and file name of data source. */ } TW_TWUNKIDENTITY, FAR * pTW_TWUNKIDENTITY; /* SDH - 03/21/95 - TWUNK */ /* Provides DS_Entry parameters over thunk link. */ typedef struct { TW_INT8 destFlag; /* TRUE if dest is not NULL */ TW_IDENTITY dest; /* Identity of data source (if used) */ TW_INT32 dataGroup; /* DSM_Entry dataGroup parameter */ TW_INT16 dataArgType; /* DSM_Entry dataArgType parameter */ TW_INT16 message; /* DSM_Entry message parameter */ TW_INT32 pDataSize; /* Size of pData (0 if NULL) */ /* TW_MEMREF pData; */ /* Based on implementation specifics, a */ /* pData parameter makes no sense in this */ /* structure, but data (if provided) will be*/ /* appended in the data block. */ } TW_TWUNKDSENTRYPARAMS, FAR * pTW_TWUNKDSENTRYPARAMS; /* SDH - 03/21/95 - TWUNK */ /* Provides DS_Entry results over thunk link. */ typedef struct { TW_UINT16 returnCode; /* Thunker DsEntry return code. */ TW_UINT16 conditionCode; /* Thunker DsEntry condition code. */ TW_INT32 pDataSize; /* Size of pData (0 if NULL) */ /* TW_MEMREF pData; */ /* Based on implementation specifics, a */ /* pData parameter makes no sense in this */ /* structure, but data (if provided) will be*/ /* appended in the data block. */ } TW_TWUNKDSENTRYRETURN, FAR * pTW_TWUNKDSENTRYRETURN; /* WJD - 950818 */ /* Added for 1.6 Specification */ /* TWAIN 1.6 CAP_SUPPORTEDCAPSEXT structure */ typedef struct { TW_UINT16 Cap; /* Which CAP/ICAP info is relevant to */ TW_UINT16 Properties; /* Messages this CAP/ICAP supports */ } TW_CAPEXT, FAR * pTW_CAPEXT; /* ----------------------------------------------------------------------- *\ Version 1.7: Added Following data structure for Document Imaging July 1997 Enhancement. KHL TW_CUSTOMDSDATA -- For Saving and Restoring Source's state. TW_INFO -- Each attribute for extended image information. TW_EXTIMAGEINFO -- Extended image information structure. \* ----------------------------------------------------------------------- */ typedef struct { TW_UINT32 InfoLength; /* Length of Information in bytes. */ TW_HANDLE hData; /* Place holder for data, DS Allocates */ }TW_CUSTOMDSDATA, FAR *pTW_CUSTOMDSDATA; typedef struct { TW_UINT16 InfoID; TW_UINT16 ItemType; TW_UINT16 NumItems; TW_UINT16 CondCode; TW_UINT32 Item; }TW_INFO, FAR* pTW_INFO; typedef struct { TW_UINT32 NumInfos; TW_INFO Info[1]; }TW_EXTIMAGEINFO, FAR* pTW_EXTIMAGEINFO; /* Added 1.8 */ /* DAT_AUDIOINFO, information about audio data */ typedef struct { TW_STR255 Name; /* name of audio data */ TW_UINT32 Reserved; /* reserved space */ } TW_AUDIOINFO, FAR * pTW_AUDIOINFO; /* DAT_DEVICEEVENT, information about events */ typedef struct { TW_UINT32 Event; /* One of the TWDE_xxxx values. */ TW_STR255 DeviceName; /* The name of the device that generated the event */ TW_UINT32 BatteryMinutes; /* Battery Minutes Remaining */ TW_INT16 BatteryPercentage; /* Battery Percentage Remaining */ TW_INT32 PowerSupply; /* Power Supply */ TW_FIX32 XResolution; /* Resolution */ TW_FIX32 YResolution; /* Resolution */ TW_UINT32 FlashUsed2; /* Flash Used2 */ TW_UINT32 AutomaticCapture; /* Automatic Capture */ TW_UINT32 TimeBeforeFirstCapture; /* Automatic Capture */ TW_UINT32 TimeBetweenCaptures; /* Automatic Capture */ } TW_DEVICEEVENT, FAR * pTW_DEVICEEVENT; /* DAT_FILESYSTEM, information about TWAIN file system */ typedef struct { /* DG_CONTROL / DAT_FILESYSTEM / MSG_xxxx fields */ TW_STR255 InputName; /* The name of the input or source file */ TW_STR255 OutputName; /* The result of an operation or the name of a destination file */ TW_MEMREF Context; /* Source specific data used to remember state information */ /* DG_CONTROL / DAT_FILESYSTEM / MSG_DELETE field */ int Recursive; /* recursively delete all sub-directories */ /* DG_CONTROL / DAT_FILESYSTEM / MSG_GETINFO fields */ TW_INT32 FileType; /* One of the TWFT_xxxx values */ TW_UINT32 Size; /* Size of current FileType */ TW_STR32 CreateTimeDate; /* creation date of the file */ TW_STR32 ModifiedTimeDate; /* last date the file was modified */ TW_UINT32 FreeSpace; /* bytes of free space on the current device */ TW_INT32 NewImageSize; /* estimate of the amount of space a new image would take up */ TW_UINT32 NumberOfFiles; /* number of files, depends on FileType */ TW_UINT32 NumberOfSnippets; /**/ char Reserved[512]; /**/ } TW_FILESYSTEM, FAR * pTW_FILESYSTEM; /* DAT_PASSTHRU, device dependent data to pass through Data Source */ typedef struct { TW_MEMREF pCommand; /* Pointer to Command buffer */ TW_UINT32 CommandBytes; /* Number of bytes in Command buffer */ TW_INT32 Direction; /* One of the TWDR_xxxx values. Defines the direction of data flow */ TW_MEMREF pData; /* Pointer to Data buffer */ TW_UINT32 DataBytes; /* Number of bytes in Data buffer */ TW_UINT32 DataBytesXfered; /* Number of bytes successfully transferred */ } TW_PASSTHRU, FAR * pTW_PASSTHRU; /* DAT_SETUPAUDIOFILEXFER, information required to setup an audio file transfer */ typedef struct { TW_STR255 FileName; /* full path target file */ TW_UINT16 Format; /* one of TWAF_xxxx */ TW_INT16 VRefNum; } TW_SETUPAUDIOFILEXFER, FAR * pTW_SETUPAUDIOFILEXFER; /**************************************************************************** * Generic Constants * ****************************************************************************/ #define TWON_ARRAY 3 /* indicates TW_ARRAY container */ #define TWON_ENUMERATION 4 /* indicates TW_ENUMERATION container */ #define TWON_ONEVALUE 5 /* indicates TW_ONEVALUE container */ #define TWON_RANGE 6 /* indicates TW_RANGE container */ #define TWON_ICONID 962 /* res Id of icon used in USERSELECT lbox */ #define TWON_DSMID 461 /* res Id of the DSM version num resource */ #define TWON_DSMCODEID 63 /* res Id of the Mac SM Code resource */ #define TWON_DONTCARE8 0xff #define TWON_DONTCARE16 0xffff #define TWON_DONTCARE32 0xffffffff /* Flags used in TW_MEMORY structure. */ #define TWMF_APPOWNS 0x1 #define TWMF_DSMOWNS 0x2 #define TWMF_DSOWNS 0x4 #define TWMF_POINTER 0x8 #define TWMF_HANDLE 0x10 /* Palette types for TW_PALETTE8 */ #define TWPA_RGB 0 #define TWPA_GRAY 1 #define TWPA_CMY 2 /* There are four containers used for capabilities negotiation: * TWON_ONEVALUE, TWON_RANGE, TWON_ENUMERATION, TWON_ARRAY * In each container structure ItemType can be TWTY_INT8, TWTY_INT16, etc. * The kind of data stored in the container can be determined by doing * DCItemSize[ItemType] where the following is defined in TWAIN glue code: * DCItemSize[]= { sizeof(TW_INT8), * sizeof(TW_INT16), * etc. * sizeof(TW_UINT32) }; * */ #define TWTY_INT8 0x0000 /* Means Item is a TW_INT8 */ #define TWTY_INT16 0x0001 /* Means Item is a TW_INT16 */ #define TWTY_INT32 0x0002 /* Means Item is a TW_INT32 */ #define TWTY_UINT8 0x0003 /* Means Item is a TW_UINT8 */ #define TWTY_UINT16 0x0004 /* Means Item is a TW_UINT16 */ #define TWTY_UINT32 0x0005 /* Means Item is a TW_UINT32 */ #define TWTY_BOOL 0x0006 /* Means Item is a TW_BOOL */ #define TWTY_FIX32 0x0007 /* Means Item is a TW_FIX32 */ #define TWTY_FRAME 0x0008 /* Means Item is a TW_FRAME */ #define TWTY_STR32 0x0009 /* Means Item is a TW_STR32 */ #define TWTY_STR64 0x000a /* Means Item is a TW_STR64 */ #define TWTY_STR128 0x000b /* Means Item is a TW_STR128 */ #define TWTY_STR255 0x000c /* Means Item is a TW_STR255 */ /**************************************************************************** * Capability Constants * ****************************************************************************/ /* ICAP_BITORDER values (BO_ means Bit Order) */ #define TWBO_LSBFIRST 0 #define TWBO_MSBFIRST 1 /* ICAP_COMPRESSION values (CP_ means ComPression ) */ #define TWCP_NONE 0 #define TWCP_PACKBITS 1 #define TWCP_GROUP31D 2 /* Follows CCITT spec (no End Of Line) */ #define TWCP_GROUP31DEOL 3 /* Follows CCITT spec (has End Of Line) */ #define TWCP_GROUP32D 4 /* Follows CCITT spec (use cap for K Factor) */ #define TWCP_GROUP4 5 /* Follows CCITT spec */ #define TWCP_JPEG 6 /* Use capability for more info */ #define TWCP_LZW 7 /* Must license from Unisys and IBM to use */ #define TWCP_JBIG 8 /* For Bitonal images -- Added 1.7 KHL */ /* Added 1.8 */ #define TWCP_PNG 9 #define TWCP_RLE4 10 #define TWCP_RLE8 11 #define TWCP_BITFIELDS 12 /* ICAP_IMAGEFILEFORMAT values (FF_means File Format) */ #define TWFF_TIFF 0 /* Tagged Image File Format */ #define TWFF_PICT 1 /* Macintosh PICT */ #define TWFF_BMP 2 /* Windows Bitmap */ #define TWFF_XBM 3 /* X-Windows Bitmap */ #define TWFF_JFIF 4 /* JPEG File Interchange Format */ #define TWFF_FPX 5 /* Flash Pix */ #define TWFF_TIFFMULTI 6 /* Multi-page tiff file */ #define TWFF_PNG 7 #define TWFF_SPIFF 8 #define TWFF_EXIF 9 /* ICAP_FILTER values (FT_ means Filter Type) */ #define TWFT_RED 0 #define TWFT_GREEN 1 #define TWFT_BLUE 2 #define TWFT_NONE 3 #define TWFT_WHITE 4 #define TWFT_CYAN 5 #define TWFT_MAGENTA 6 #define TWFT_YELLOW 7 #define TWFT_BLACK 8 /* ICAP_LIGHTPATH values (LP_ means Light Path) */ #define TWLP_REFLECTIVE 0 #define TWLP_TRANSMISSIVE 1 /* ICAP_LIGHTSOURCE values (LS_ means Light Source) */ #define TWLS_RED 0 #define TWLS_GREEN 1 #define TWLS_BLUE 2 #define TWLS_NONE 3 #define TWLS_WHITE 4 #define TWLS_UV 5 #define TWLS_IR 6 /* ICAP_ORIENTATION values (OR_ means ORientation) */ #define TWOR_ROT0 0 #define TWOR_ROT90 1 #define TWOR_ROT180 2 #define TWOR_ROT270 3 #define TWOR_PORTRAIT TWOR_ROT0 #define TWOR_LANDSCAPE TWOR_ROT270 /* ICAP_PLANARCHUNKY values (PC_ means Planar/Chunky ) */ #define TWPC_CHUNKY 0 #define TWPC_PLANAR 1 /* ICAP_PIXELFLAVOR values (PF_ means Pixel Flavor) */ #define TWPF_CHOCOLATE 0 /* zero pixel represents darkest shade */ #define TWPF_VANILLA 1 /* zero pixel represents lightest shade */ /* ICAP_PIXELTYPE values (PT_ means Pixel Type) */ #define TWPT_BW 0 /* Black and White */ #define TWPT_GRAY 1 #define TWPT_RGB 2 #define TWPT_PALETTE 3 #define TWPT_CMY 4 #define TWPT_CMYK 5 #define TWPT_YUV 6 #define TWPT_YUVK 7 #define TWPT_CIEXYZ 8 /* ICAP_SUPPORTEDSIZES values (SS_ means Supported Sizes) */ #define TWSS_NONE 0 #define TWSS_A4LETTER 1 #define TWSS_B5LETTER 2 #define TWSS_USLETTER 3 #define TWSS_USLEGAL 4 /* Added 1.5 */ #define TWSS_A5 5 #define TWSS_B4 6 #define TWSS_B6 7 /*#define TWSS_B 8 */ /* Added 1.7 */ #define TWSS_USLEDGER 9 #define TWSS_USEXECUTIVE 10 #define TWSS_A3 11 #define TWSS_B3 12 #define TWSS_A6 13 #define TWSS_C4 14 #define TWSS_C5 15 #define TWSS_C6 16 /* Added 1.8 */ #define TWSS_4A0 17 #define TWSS_2A0 18 #define TWSS_A0 19 #define TWSS_A1 20 #define TWSS_A2 21 #define TWSS_A4 TWSS_A4LETTER #define TWSS_A7 22 #define TWSS_A8 23 #define TWSS_A9 24 #define TWSS_A10 25 #define TWSS_ISOB0 26 #define TWSS_ISOB1 27 #define TWSS_ISOB2 28 #define TWSS_ISOB3 TWSS_B3 #define TWSS_ISOB4 TWSS_B4 #define TWSS_ISOB5 29 #define TWSS_ISOB6 TWSS_B6 #define TWSS_ISOB7 30 #define TWSS_ISOB8 31 #define TWSS_ISOB9 32 #define TWSS_ISOB10 33 #define TWSS_JISB0 34 #define TWSS_JISB1 35 #define TWSS_JISB2 36 #define TWSS_JISB3 37 #define TWSS_JISB4 38 #define TWSS_JISB5 TWSS_B5LETTER #define TWSS_JISB6 39 #define TWSS_JISB7 40 #define TWSS_JISB8 41 #define TWSS_JISB9 42 #define TWSS_JISB10 43 #define TWSS_C0 44 #define TWSS_C1 45 #define TWSS_C2 46 #define TWSS_C3 47 #define TWSS_C7 48 #define TWSS_C8 49 #define TWSS_C9 50 #define TWSS_C10 51 #define TWSS_USSTATEMENT 52 #define TWSS_BUSINESSCARD 53 /* ICAP_XFERMECH values (SX_ means Setup XFer) */ #define TWSX_NATIVE 0 #define TWSX_FILE 1 #define TWSX_MEMORY 2 /* ICAP_UNITS values (UN_ means UNits) */ #define TWUN_INCHES 0 #define TWUN_CENTIMETERS 1 #define TWUN_PICAS 2 #define TWUN_POINTS 3 #define TWUN_TWIPS 4 #define TWUN_PIXELS 5 /* Added 1.5 */ /* ICAP_BITDEPTHREDUCTION values (BR_ means Bitdepth Reduction) */ #define TWBR_THRESHOLD 0 #define TWBR_HALFTONE 1 #define TWBR_CUSTHALFTONE 2 #define TWBR_DIFFUSION 3 /* Added 1.7 */ /* ICAP_DUPLEX values */ #define TWDX_NONE 0 #define TWDX_1PASSDUPLEX 1 #define TWDX_2PASSDUPLEX 2 /* Added 1.7 */ /* TWEI_BARCODETYPE values */ #define TWBT_3OF9 0 #define TWBT_2OF5INTERLEAVED 1 #define TWBT_2OF5NONINTERLEAVED 2 #define TWBT_CODE93 3 #define TWBT_CODE128 4 #define TWBT_UCC128 5 #define TWBT_CODABAR 6 #define TWBT_UPCA 7 #define TWBT_UPCE 8 #define TWBT_EAN8 9 #define TWBT_EAN13 10 #define TWBT_POSTNET 11 #define TWBT_PDF417 12 /* Added 1.8 */ #define TWBT_2OF5INDUSTRIAL 13 #define TWBT_2OF5MATRIX 14 #define TWBT_2OF5DATALOGIC 15 #define TWBT_2OF5IATA 16 #define TWBT_3OF9FULLASCII 17 #define TWBT_CODABARWITHSTARTSTOP 18 #define TWBT_MAXICODE 19 /* Added 1.7 */ /* TWEI_DESKEWSTATUS values */ #define TWDSK_SUCCESS 0 #define TWDSK_REPORTONLY 1 #define TWDSK_FAIL 2 #define TWDSK_DISABLED 3 /* Added 1.7 */ /* TWEI_PATCHCODE values */ #define TWPCH_PATCH1 0 #define TWPCH_PATCH2 1 #define TWPCH_PATCH3 2 #define TWPCH_PATCH4 3 #define TWPCH_PATCH6 4 #define TWPCH_PATCHT 5 /* Added 1.7 */ /* CAP_JOBCONTROL values */ #define TWJC_NONE 0 #define TWJC_JSIC 1 #define TWJC_JSIS 2 #define TWJC_JSXC 3 #define TWJC_JSXS 4 /* Added 1.7 */ /* TWEI_BARCODEROTATION values (BCOR_ means barcode rotation) */ #define TWBCOR_ROT0 0 #define TWBCOR_ROT90 1 #define TWBCOR_ROT180 2 #define TWBCOR_ROT270 3 #define TWBCOR_ROTX 4 /* Added 1.8 */ /* ACAP_AUDIOFILEFORMAT values (AF_ means audio format) */ #define TWAF_WAV 0 #define TWAF_AIFF 1 #define TWAF_AU 3 #define TWAF_SND 4 /* CAP_ALARMS values (AL_ means alarms) */ #define TWAL_ALARM 0 #define TWAL_FEEDERERROR 1 #define TWAL_FEEDERWARNING 2 #define TWAL_BARCODE 3 #define TWAL_DOUBLEFEED 4 #define TWAL_JAM 5 #define TWAL_PATCHCODE 6 #define TWAL_POWER 7 #define TWAL_SKEW 8 /* CAP_CLEARBUFFERS values (CB_ means clear buffers) */ #define TWCB_AUTO 0 #define TWCB_CLEAR 1 #define TWCB_NOCLEAR 2 /* CAP_DEVICEEVENT values (DE_ means device event) */ #define TWDE_CUSTOMEVENTS 0x8000 #define TWDE_CHECKAUTOMATICCAPTURE 0 #define TWDE_CHECKBATTERY 1 #define TWDE_CHECKDEVICEONLINE 2 #define TWDE_CHECKFLASH 3 #define TWDE_CHECKPOWERSUPPLY 4 #define TWDE_CHECKRESOLUTION 5 #define TWDE_DEVICEADDED 6 #define TWDE_DEVICEOFFLINE 7 #define TWDE_DEVICEREADY 8 #define TWDE_DEVICEREMOVED 9 #define TWDE_IMAGECAPTURED 10 #define TWDE_IMAGEDELETED 11 #define TWDE_PAPERDOUBLEFEED 12 #define TWDE_PAPERJAM 13 #define TWDE_LAMPFAILURE 14 #define TWDE_POWERSAVE 15 #define TWDE_POWERSAVENOTIFY 16 /* CAP_FEEDERALIGNMENT values (FA_ means feeder alignment) */ #define TWFA_NONE 0 #define TWFA_LEFT 1 #define TWFA_CENTER 2 #define TWFA_RIGHT 3 /* CAP_FEEDERORDER values (FO_ means feeder order) */ #define TWFO_FIRSTPAGEFIRST 0 #define TWFO_LASTPAGEFIRST 1 /* CAP_FILESYSTEM values (FS_ means file system) */ #define TWFS_FILESYSTEM 0 #define TWFS_RECURSIVEDELETE 1 /* CAP_POWERSUPPLY values (PS_ means power supply) */ #define TWPS_EXTERNAL 0 #define TWPS_BATTERY 1 /* CAP_PRINTER values (PR_ means printer) */ #define TWPR_IMPRINTERTOPBEFORE 0 #define TWPR_IMPRINTERTOPAFTER 1 #define TWPR_IMPRINTERBOTTOMBEFORE 2 #define TWPR_IMPRINTERBOTTOMAFTER 3 #define TWPR_ENDORSERTOPBEFORE 4 #define TWPR_ENDORSERTOPAFTER 5 #define TWPR_ENDORSERBOTTOMBEFORE 6 #define TWPR_ENDORSERBOTTOMAFTER 7 /* CAP_PRINTERMODE values (PM_ means printer mode) */ #define TWPM_SINGLESTRING 0 #define TWPM_MULTISTRING 1 #define TWPM_COMPOUNDSTRING 2 /* ICAP_BARCODESEARCHMODE values (TWBD_ means search) */ #define TWBD_HORZ 0 #define TWBD_VERT 1 #define TWBD_HORZVERT 2 #define TWBD_VERTHORZ 3 /* ICAP_FLASHUSED2 values (FL_ means flash) */ #define TWFL_NONE 0 #define TWFL_OFF 1 #define TWFL_ON 2 #define TWFL_AUTO 3 #define TWFL_REDEYE 4 /* ICAP_FLIPROTATION values (FR_ means flip rotation) */ #define TWFR_BOOK 0 #define TWFR_FANFOLD 1 /* ICAP_IMAGEFILTER values (IF_ means image filter) */ #define TWIF_NONE 0 #define TWIF_AUTO 1 #define TWIF_LOWPASS 2 #define TWIF_BANDPASS 3 #define TWIF_HIGHPASS 4 #define TWIF_TEXT TWIF_BANDPASS #define TWIF_FINELINE TWIF_HIGHPASS /* ICAP_NOISEFILTER values (NF_ means noise filter) */ #define TWNF_NONE 0 #define TWNF_AUTO 1 #define TWNF_LONEPIXEL 2 #define TWNF_MAJORITYRULE 3 /* ICAP_OVERSCAN values (OV_ means overscan) */ #define TWOV_NONE 0 #define TWOV_AUTO 1 #define TWOV_TOPBOTTOM 2 #define TWOV_LEFTRIGHT 3 #define TWOV_ALL 4 /* TW_FILESYSTEM.FileType values (FT_ means file type) */ #define TWFY_CAMERA 0 #define TWFY_CAMERATOP 1 #define TWFY_CAMERABOTTOM 2 #define TWFY_CAMERAPREVIEW 3 #define TWFY_DOMAIN 4 #define TWFY_HOST 5 #define TWFY_DIRECTORY 6 #define TWFY_IMAGE 7 #define TWFY_UNKNOWN 8 /**************************************************************************** * Country Constants * ****************************************************************************/ #define TWCY_AFGHANISTAN 1001 #define TWCY_ALGERIA 213 #define TWCY_AMERICANSAMOA 684 #define TWCY_ANDORRA 033 #define TWCY_ANGOLA 1002 #define TWCY_ANGUILLA 8090 #define TWCY_ANTIGUA 8091 #define TWCY_ARGENTINA 54 #define TWCY_ARUBA 297 #define TWCY_ASCENSIONI 247 #define TWCY_AUSTRALIA 61 #define TWCY_AUSTRIA 43 #define TWCY_BAHAMAS 8092 #define TWCY_BAHRAIN 973 #define TWCY_BANGLADESH 880 #define TWCY_BARBADOS 8093 #define TWCY_BELGIUM 32 #define TWCY_BELIZE 501 #define TWCY_BENIN 229 #define TWCY_BERMUDA 8094 #define TWCY_BHUTAN 1003 #define TWCY_BOLIVIA 591 #define TWCY_BOTSWANA 267 #define TWCY_BRITAIN 6 #define TWCY_BRITVIRGINIS 8095 #define TWCY_BRAZIL 55 #define TWCY_BRUNEI 673 #define TWCY_BULGARIA 359 #define TWCY_BURKINAFASO 1004 #define TWCY_BURMA 1005 #define TWCY_BURUNDI 1006 #define TWCY_CAMAROON 237 #define TWCY_CANADA 2 #define TWCY_CAPEVERDEIS 238 #define TWCY_CAYMANIS 8096 #define TWCY_CENTRALAFREP 1007 #define TWCY_CHAD 1008 #define TWCY_CHILE 56 #define TWCY_CHINA 86 #define TWCY_CHRISTMASIS 1009 #define TWCY_COCOSIS 1009 #define TWCY_COLOMBIA 57 #define TWCY_COMOROS 1010 #define TWCY_CONGO 1011 #define TWCY_COOKIS 1012 #define TWCY_COSTARICA 506 #define TWCY_CUBA 005 #define TWCY_CYPRUS 357 #define TWCY_CZECHOSLOVAKIA 42 #define TWCY_DENMARK 45 #define TWCY_DJIBOUTI 1013 #define TWCY_DOMINICA 8097 #define TWCY_DOMINCANREP 8098 #define TWCY_EASTERIS 1014 #define TWCY_ECUADOR 593 #define TWCY_EGYPT 20 #define TWCY_ELSALVADOR 503 #define TWCY_EQGUINEA 1015 #define TWCY_ETHIOPIA 251 #define TWCY_FALKLANDIS 1016 #define TWCY_FAEROEIS 298 #define TWCY_FIJIISLANDS 679 #define TWCY_FINLAND 358 #define TWCY_FRANCE 33 #define TWCY_FRANTILLES 596 #define TWCY_FRGUIANA 594 #define TWCY_FRPOLYNEISA 689 #define TWCY_FUTANAIS 1043 #define TWCY_GABON 241 #define TWCY_GAMBIA 220 #define TWCY_GERMANY 49 #define TWCY_GHANA 233 #define TWCY_GIBRALTER 350 #define TWCY_GREECE 30 #define TWCY_GREENLAND 299 #define TWCY_GRENADA 8099 #define TWCY_GRENEDINES 8015 #define TWCY_GUADELOUPE 590 #define TWCY_GUAM 671 #define TWCY_GUANTANAMOBAY 5399 #define TWCY_GUATEMALA 502 #define TWCY_GUINEA 224 #define TWCY_GUINEABISSAU 1017 #define TWCY_GUYANA 592 #define TWCY_HAITI 509 #define TWCY_HONDURAS 504 #define TWCY_HONGKONG 852 #define TWCY_HUNGARY 36 #define TWCY_ICELAND 354 #define TWCY_INDIA 91 #define TWCY_INDONESIA 62 #define TWCY_IRAN 98 #define TWCY_IRAQ 964 #define TWCY_IRELAND 353 #define TWCY_ISRAEL 972 #define TWCY_ITALY 39 #define TWCY_IVORYCOAST 225 #define TWCY_JAMAICA 8010 #define TWCY_JAPAN 81 #define TWCY_JORDAN 962 #define TWCY_KENYA 254 #define TWCY_KIRIBATI 1018 #define TWCY_KOREA 82 #define TWCY_KUWAIT 965 #define TWCY_LAOS 1019 #define TWCY_LEBANON 1020 #define TWCY_LIBERIA 231 #define TWCY_LIBYA 218 #define TWCY_LIECHTENSTEIN 41 #define TWCY_LUXENBOURG 352 #define TWCY_MACAO 853 #define TWCY_MADAGASCAR 1021 #define TWCY_MALAWI 265 #define TWCY_MALAYSIA 60 #define TWCY_MALDIVES 960 #define TWCY_MALI 1022 #define TWCY_MALTA 356 #define TWCY_MARSHALLIS 692 #define TWCY_MAURITANIA 1023 #define TWCY_MAURITIUS 230 #define TWCY_MEXICO 3 #define TWCY_MICRONESIA 691 #define TWCY_MIQUELON 508 #define TWCY_MONACO 33 #define TWCY_MONGOLIA 1024 #define TWCY_MONTSERRAT 8011 #define TWCY_MOROCCO 212 #define TWCY_MOZAMBIQUE 1025 #define TWCY_NAMIBIA 264 #define TWCY_NAURU 1026 #define TWCY_NEPAL 977 #define TWCY_NETHERLANDS 31 #define TWCY_NETHANTILLES 599 #define TWCY_NEVIS 8012 #define TWCY_NEWCALEDONIA 687 #define TWCY_NEWZEALAND 64 #define TWCY_NICARAGUA 505 #define TWCY_NIGER 227 #define TWCY_NIGERIA 234 #define TWCY_NIUE 1027 #define TWCY_NORFOLKI 1028 #define TWCY_NORWAY 47 #define TWCY_OMAN 968 #define TWCY_PAKISTAN 92 #define TWCY_PALAU 1029 #define TWCY_PANAMA 507 #define TWCY_PARAGUAY 595 #define TWCY_PERU 51 #define TWCY_PHILLIPPINES 63 #define TWCY_PITCAIRNIS 1030 #define TWCY_PNEWGUINEA 675 #define TWCY_POLAND 48 #define TWCY_PORTUGAL 351 #define TWCY_QATAR 974 #define TWCY_REUNIONI 1031 #define TWCY_ROMANIA 40 #define TWCY_RWANDA 250 #define TWCY_SAIPAN 670 #define TWCY_SANMARINO 39 #define TWCY_SAOTOME 1033 #define TWCY_SAUDIARABIA 966 #define TWCY_SENEGAL 221 #define TWCY_SEYCHELLESIS 1034 #define TWCY_SIERRALEONE 1035 #define TWCY_SINGAPORE 65 #define TWCY_SOLOMONIS 1036 #define TWCY_SOMALI 1037 #define TWCY_SOUTHAFRICA 27 #define TWCY_SPAIN 34 #define TWCY_SRILANKA 94 #define TWCY_STHELENA 1032 #define TWCY_STKITTS 8013 #define TWCY_STLUCIA 8014 #define TWCY_STPIERRE 508 #define TWCY_STVINCENT 8015 #define TWCY_SUDAN 1038 #define TWCY_SURINAME 597 #define TWCY_SWAZILAND 268 #define TWCY_SWEDEN 46 #define TWCY_SWITZERLAND 41 #define TWCY_SYRIA 1039 #define TWCY_TAIWAN 886 #define TWCY_TANZANIA 255 #define TWCY_THAILAND 66 #define TWCY_TOBAGO 8016 #define TWCY_TOGO 228 #define TWCY_TONGAIS 676 #define TWCY_TRINIDAD 8016 #define TWCY_TUNISIA 216 #define TWCY_TURKEY 90 #define TWCY_TURKSCAICOS 8017 #define TWCY_TUVALU 1040 #define TWCY_UGANDA 256 #define TWCY_USSR 7 #define TWCY_UAEMIRATES 971 #define TWCY_UNITEDKINGDOM 44 #define TWCY_USA 1 #define TWCY_URUGUAY 598 #define TWCY_VANUATU 1041 #define TWCY_VATICANCITY 39 #define TWCY_VENEZUELA 58 #define TWCY_WAKE 1042 #define TWCY_WALLISIS 1043 #define TWCY_WESTERNSAHARA 1044 #define TWCY_WESTERNSAMOA 1045 #define TWCY_YEMEN 1046 #define TWCY_YUGOSLAVIA 38 #define TWCY_ZAIRE 243 #define TWCY_ZAMBIA 260 #define TWCY_ZIMBABWE 263 /* Added for 1.8 */ #define TWCY_ALBANIA 355 #define TWCY_ARMENIA 374 #define TWCY_AZERBAIJAN 994 #define TWCY_BELARUS 375 #define TWCY_BOSNIAHERZGO 387 #define TWCY_CAMBODIA 855 #define TWCY_CROATIA 385 #define TWCY_CZECHREPUBLIC 420 #define TWCY_DIEGOGARCIA 246 #define TWCY_ERITREA 291 #define TWCY_ESTONIA 372 #define TWCY_GEORGIA 995 #define TWCY_LATVIA 371 #define TWCY_LESOTHO 266 #define TWCY_LITHUANIA 370 #define TWCY_MACEDONIA 389 #define TWCY_MAYOTTEIS 269 #define TWCY_MOLDOVA 373 #define TWCY_MYANMAR 95 #define TWCY_NORTHKOREA 850 #define TWCY_PUERTORICO 787 #define TWCY_RUSSIA 7 #define TWCY_SERBIA 381 #define TWCY_SLOVAKIA 421 #define TWCY_SLOVENIA 386 #define TWCY_SOUTHKOREA 82 #define TWCY_UKRAINE 380 #define TWCY_USVIRGINIS 340 #define TWCY_VIETNAM 84 /**************************************************************************** * Language Constants * ****************************************************************************/ #define TWLG_DAN 0 /* Danish */ #define TWLG_DUT 1 /* Dutch */ #define TWLG_ENG 2 /* International English */ #define TWLG_FCF 3 /* French Canadian */ #define TWLG_FIN 4 /* Finnish */ #define TWLG_FRN 5 /* French */ #define TWLG_GER 6 /* German */ #define TWLG_ICE 7 /* Icelandic */ #define TWLG_ITN 8 /* Italian */ #define TWLG_NOR 9 /* Norwegian */ #define TWLG_POR 10 /* Portuguese */ #define TWLG_SPA 11 /* Spanish */ #define TWLG_SWE 12 /* Swedish */ #define TWLG_USA 13 /* U.S. English */ /* Added for 1.8 */ #define TWLG_USERLOCALE -1 #define TWLG_AFRIKAANS 14 #define TWLG_ALBANIA 15 #define TWLG_ARABIC 16 #define TWLG_ARABIC_ALGERIA 17 #define TWLG_ARABIC_BAHRAIN 18 #define TWLG_ARABIC_EGYPT 19 #define TWLG_ARABIC_IRAQ 20 #define TWLG_ARABIC_JORDAN 21 #define TWLG_ARABIC_KUWAIT 22 #define TWLG_ARABIC_LEBANON 23 #define TWLG_ARABIC_LIBYA 24 #define TWLG_ARABIC_MOROCCO 25 #define TWLG_ARABIC_OMAN 26 #define TWLG_ARABIC_QATAR 27 #define TWLG_ARABIC_SAUDIARABIA 28 #define TWLG_ARABIC_SYRIA 29 #define TWLG_ARABIC_TUNISIA 30 #define TWLG_ARABIC_UAE 31 /* United Arabic Emirates */ #define TWLG_ARABIC_YEMEN 32 #define TWLG_BASQUE 33 #define TWLG_BYELORUSSIAN 34 #define TWLG_BULGARIAN 35 #define TWLG_CATALAN 36 #define TWLG_CHINESE 37 #define TWLG_CHINESE_HONGKONG 38 #define TWLG_CHINESE_PRC 39 /* People's Republic of China */ #define TWLG_CHINESE_SINGAPORE 40 #define TWLG_CHINESE_SIMPLIFIED 41 #define TWLG_CHINESE_TAIWAN 42 #define TWLG_CHINESE_TRADITIONAL 43 #define TWLG_CROATIA 44 #define TWLG_CZECH 45 #define TWLG_DANISH TWLG_DAN #define TWLG_DUTCH TWLG_DUT #define TWLG_DUTCH_BELGIAN 46 #define TWLG_ENGLISH TWLG_ENG #define TWLG_ENGLISH_AUSTRALIAN 47 #define TWLG_ENGLISH_CANADIAN 48 #define TWLG_ENGLISH_IRELAND 49 #define TWLG_ENGLISH_NEWZEALAND 50 #define TWLG_ENGLISH_SOUTHAFRICA 51 #define TWLG_ENGLISH_UK 52 #define TWLG_ENGLISH_USA TWLG_USA #define TWLG_ESTONIAN 53 #define TWLG_FAEROESE 54 #define TWLG_FARSI 55 #define TWLG_FINNISH TWLG_FIN #define TWLG_FRENCH TWLG_FRN #define TWLG_FRENCH_BELGIAN 56 #define TWLG_FRENCH_CANADIAN TWLG_FCF #define TWLG_FRENCH_LUXEMBOURG 57 #define TWLG_FRENCH_SWISS 58 #define TWLG_GERMAN TWLG_GER #define TWLG_GERMAN_AUSTRIAN 59 #define TWLG_GERMAN_LUXEMBOURG 60 #define TWLG_GERMAN_LIECHTENSTEIN 61 #define TWLG_GERMAN_SWISS 62 #define TWLG_GREEK 63 #define TWLG_HEBREW 64 #define TWLG_HUNGARIAN 65 #define TWLG_ICELANDIC TWLG_ICE #define TWLG_INDONESIAN 66 #define TWLG_ITALIAN TWLG_ITN #define TWLG_ITALIAN_SWISS 67 #define TWLG_JAPANESE 68 #define TWLG_KOREAN 69 #define TWLG_KOREAN_JOHAB 70 #define TWLG_LATVIAN 71 #define TWLG_LITHUANIAN 72 #define TWLG_NORWEGIAN TWLG_NOR #define TWLG_NORWEGIAN_BOKMAL 73 #define TWLG_NORWEGIAN_NYNORSK 74 #define TWLG_POLISH 75 #define TWLG_PORTUGUESE TWLG_POR #define TWLG_PORTUGUESE_BRAZIL 76 #define TWLG_ROMANIAN 77 #define TWLG_RUSSIAN 78 #define TWLG_SERBIAN_LATIN 79 #define TWLG_SLOVAK 80 #define TWLG_SLOVENIAN 81 #define TWLG_SPANISH TWLG_SPA #define TWLG_SPANISH_MEXICAN 82 #define TWLG_SPANISH_MODERN 83 #define TWLG_SWEDISH TWLG_SWE #define TWLG_THAI 84 #define TWLG_TURKISH 85 #define TWLG_UKRANIAN 86 /* More stuff added for 1.8 */ #define TWLG_ASSAMESE 87 #define TWLG_BENGALI 88 #define TWLG_BIHARI 89 #define TWLG_BODO 90 #define TWLG_DOGRI 91 #define TWLG_GUJARATI 92 #define TWLG_HARYANVI 93 #define TWLG_HINDI 94 #define TWLG_KANNADA 95 #define TWLG_KASHMIRI 96 #define TWLG_MALAYALAM 97 #define TWLG_MARATHI 98 #define TWLG_MARWARI 99 #define TWLG_MEGHALAYAN 100 #define TWLG_MIZO 101 #define TWLG_NAGA 102 #define TWLG_ORISSI 103 #define TWLG_PUNJABI 104 #define TWLG_PUSHTU 105 #define TWLG_SERBIAN_CYRILLIC 106 #define TWLG_SIKKIMI 107 #define TWLG_SWEDISH_FINLAND 108 #define TWLG_TAMIL 109 #define TWLG_TELUGU 110 #define TWLG_TRIPURI 111 #define TWLG_URDU 112 #define TWLG_VIETNAMESE 113 /**************************************************************************** * Data Groups * ****************************************************************************/ /* More Data Groups may be added in the future. * Possible candidates include text, vector graphics, sound, etc. * NOTE: Data Group constants must be powers of 2 as they are used * as bitflags when Application asks DSM to present a list of DSs. */ #define DG_CONTROL 0x0001L /* data pertaining to control */ #define DG_IMAGE 0x0002L /* data pertaining to raster images */ /* Added 1.8 */ #define DG_AUDIO 0x0004L /* data pertaining to audio */ /**************************************************************************** * Data Argument Types * ****************************************************************************/ /* SDH - 03/23/95 - WATCH */ /* The thunker requires knowledge about size of data being passed in the */ /* lpData parameter to DS_Entry (which is not readily available due to */ /* type LPVOID. Thus, we key off the DAT_ argument to determine the size. */ /* This has a couple implications: */ /* 1) Any additional DAT_ features require modifications to the thunk code */ /* for thunker support. */ /* 2) Any applications which use the custom capabilities are not supported */ /* under thunking since we have no way of knowing what size data (if */ /* any) is being passed. */ #define DAT_NULL 0x0000 /* No data or structure. */ #define DAT_CUSTOMBASE 0x8000 /* Base of custom DATs. */ /* Data Argument Types for the DG_CONTROL Data Group. */ #define DAT_CAPABILITY 0x0001 /* TW_CAPABILITY */ #define DAT_EVENT 0x0002 /* TW_EVENT */ #define DAT_IDENTITY 0x0003 /* TW_IDENTITY */ #define DAT_PARENT 0x0004 /* TW_HANDLE, application win handle in Windows */ #define DAT_PENDINGXFERS 0x0005 /* TW_PENDINGXFERS */ #define DAT_SETUPMEMXFER 0x0006 /* TW_SETUPMEMXFER */ #define DAT_SETUPFILEXFER 0x0007 /* TW_SETUPFILEXFER */ #define DAT_STATUS 0x0008 /* TW_STATUS */ #define DAT_USERINTERFACE 0x0009 /* TW_USERINTERFACE */ #define DAT_XFERGROUP 0x000a /* TW_UINT32 */ /* SDH - 03/21/95 - TWUNK */ /* Additional message required for thunker to request the special */ /* identity information. */ #define DAT_TWUNKIDENTITY 0x000b /* TW_TWUNKIDENTITY */ #define DAT_CUSTOMDSDATA 0x000c /* TW_CUSTOMDSDATA. */ /* Added 1.8 */ #define DAT_DEVICEEVENT 0x000d /* TW_DEVICEEVENT */ #define DAT_FILESYSTEM 0x000e /* TW_FILESYSTEM */ #define DAT_PASSTHRU 0x000f /* TW_PASSTHRU */ /* Data Argument Types for the DG_IMAGE Data Group. */ #define DAT_IMAGEINFO 0x0101 /* TW_IMAGEINFO */ #define DAT_IMAGELAYOUT 0x0102 /* TW_IMAGELAYOUT */ #define DAT_IMAGEMEMXFER 0x0103 /* TW_IMAGEMEMXFER */ #define DAT_IMAGENATIVEXFER 0x0104 /* TW_UINT32 loword is hDIB, PICHandle */ #define DAT_IMAGEFILEXFER 0x0105 /* Null data */ #define DAT_CIECOLOR 0x0106 /* TW_CIECOLOR */ #define DAT_GRAYRESPONSE 0x0107 /* TW_GRAYRESPONSE */ #define DAT_RGBRESPONSE 0x0108 /* TW_RGBRESPONSE */ #define DAT_JPEGCOMPRESSION 0x0109 /* TW_JPEGCOMPRESSION */ #define DAT_PALETTE8 0x010a /* TW_PALETTE8 */ #define DAT_EXTIMAGEINFO 0x010b /* TW_EXTIMAGEINFO -- for 1.7 Spec. */ /* Added 1.8 */ /* Data Argument Types for the DG_AUDIO Data Group. */ #define DAT_AUDIOFILEXFER 0x0201 /* Null data */ #define DAT_AUDIOINFO 0x0202 /* TW_AUDIOINFO */ #define DAT_AUDIONATIVEXFER 0x0203 /* TW_UINT32 handle to WAV, (AIFF Mac) */ /**************************************************************************** * Messages * ****************************************************************************/ /* All message constants are unique. * Messages are grouped according to which DATs they are used with.*/ #define MSG_NULL 0x0000 /* Used in TW_EVENT structure */ #define MSG_CUSTOMBASE 0x8000 /* Base of custom messages */ /* Generic messages may be used with any of several DATs. */ #define MSG_GET 0x0001 /* Get one or more values */ #define MSG_GETCURRENT 0x0002 /* Get current value */ #define MSG_GETDEFAULT 0x0003 /* Get default (e.g. power up) value */ #define MSG_GETFIRST 0x0004 /* Get first of a series of items, e.g. DSs */ #define MSG_GETNEXT 0x0005 /* Iterate through a series of items. */ #define MSG_SET 0x0006 /* Set one or more values */ #define MSG_RESET 0x0007 /* Set current value to default value */ #define MSG_QUERYSUPPORT 0x0008 /* Get supported operations on the cap. */ /* Messages used with DAT_NULL */ #define MSG_XFERREADY 0x0101 /* The data source has data ready */ #define MSG_CLOSEDSREQ 0x0102 /* Request for Application. to close DS */ #define MSG_CLOSEDSOK 0x0103 /* Tell the Application. to save the state. */ /* Added 1.8 */ #define MSG_DEVICEEVENT 0X0104 /* Some event has taken place */ /* Messages used with a pointer to a DAT_STATUS structure */ #define MSG_CHECKSTATUS 0x0201 /* Get status information */ /* Messages used with a pointer to DAT_PARENT data */ #define MSG_OPENDSM 0x0301 /* Open the DSM */ #define MSG_CLOSEDSM 0x0302 /* Close the DSM */ /* Messages used with a pointer to a DAT_IDENTITY structure */ #define MSG_OPENDS 0x0401 /* Open a data source */ #define MSG_CLOSEDS 0x0402 /* Close a data source */ #define MSG_USERSELECT 0x0403 /* Put up a dialog of all DS */ /* Messages used with a pointer to a DAT_USERINTERFACE structure */ #define MSG_DISABLEDS 0x0501 /* Disable data transfer in the DS */ #define MSG_ENABLEDS 0x0502 /* Enable data transfer in the DS */ #define MSG_ENABLEDSUIONLY 0x0503 /* Enable for saving DS state only. */ /* Messages used with a pointer to a DAT_EVENT structure */ #define MSG_PROCESSEVENT 0x0601 /* Messages used with a pointer to a DAT_PENDINGXFERS structure */ #define MSG_ENDXFER 0x0701 /* Added 1.8 */ /* Messages used with a pointer to a DAT_FILESYSTEM structure */ #define MSG_CHANGEDIRECTORY 0x0801 #define MSG_CREATEDIRECTORY 0x0802 #define MSG_DELETE 0x0803 #define MSG_FORMATMEDIA 0x0804 #define MSG_GETCLOSE 0x0805 #define MSG_GETFIRSTFILE 0x0806 #define MSG_GETINFO 0x0807 #define MSG_GETNEXTFILE 0x0808 #define MSG_RENAME 0x0809 /* Messages used with a pointer to a DAT_PASSTHRU structure */ #define MSG_PASSTHRU 0x0901 /**************************************************************************** * Capabilities * ****************************************************************************/ #define CAP_CUSTOMBASE 0x8000 /* Base of custom capabilities */ /* all data sources are REQUIRED to support these caps */ #define CAP_XFERCOUNT 0x0001 /* image data sources are REQUIRED to support these caps */ #define ICAP_COMPRESSION 0x0100 #define ICAP_PIXELTYPE 0x0101 #define ICAP_UNITS 0x0102 /* default is TWUN_INCHES */ #define ICAP_XFERMECH 0x0103 /* all data sources MAY support these caps */ #define CAP_AUTHOR 0x1000 #define CAP_CAPTION 0x1001 #define CAP_FEEDERENABLED 0x1002 #define CAP_FEEDERLOADED 0x1003 #define CAP_TIMEDATE 0x1004 #define CAP_SUPPORTEDCAPS 0x1005 #define CAP_EXTENDEDCAPS 0x1006 #define CAP_AUTOFEED 0x1007 #define CAP_CLEARPAGE 0x1008 #define CAP_FEEDPAGE 0x1009 #define CAP_REWINDPAGE 0x100a #define CAP_INDICATORS 0x100b /* Added 1.1 */ #define CAP_SUPPORTEDCAPSEXT 0x100c /* Added 1.6 */ #define CAP_PAPERDETECTABLE 0x100d /* Added 1.6 */ #define CAP_UICONTROLLABLE 0x100e /* Added 1.6 */ #define CAP_DEVICEONLINE 0x100f /* Added 1.6 */ #define CAP_AUTOSCAN 0x1010 /* Added 1.6 */ #define CAP_THUMBNAILSENABLED 0x1011 /* Added 1.7 */ #define CAP_DUPLEX 0x1012 /* Added 1.7 */ #define CAP_DUPLEXENABLED 0x1013 /* Added 1.7 */ #define CAP_ENABLEDSUIONLY 0x1014 /* Added 1.7 */ #define CAP_CUSTOMDSDATA 0x1015 /* Added 1.7 */ #define CAP_ENDORSER 0x1016 /* Added 1.7 */ #define CAP_JOBCONTROL 0x1017 /* Added 1.7 */ #define CAP_ALARMS 0x1018 /* Added 1.8 */ #define CAP_ALARMVOLUME 0x1019 /* Added 1.8 */ #define CAP_AUTOMATICCAPTURE 0x101a /* Added 1.8 */ #define CAP_TIMEBEFOREFIRSTCAPTURE 0x101b /* Added 1.8 */ #define CAP_TIMEBETWEENCAPTURES 0x101c /* Added 1.8 */ #define CAP_CLEARBUFFERS 0x101d /* Added 1.8 */ #define CAP_MAXBATCHBUFFERS 0x101e /* Added 1.8 */ #define CAP_DEVICETIMEDATE 0x101f /* Added 1.8 */ #define CAP_POWERSUPPLY 0x1020 /* Added 1.8 */ #define CAP_CAMERAPREVIEWUI 0x1021 /* Added 1.8 */ #define CAP_DEVICEEVENT 0x1022 /* Added 1.8 */ #define CAP_PAGEMULTIPLEACQUIRE 0x1023 /* Added 1.8 */ #define CAP_SERIALNUMBER 0x1024 /* Added 1.8 */ #define CAP_FILESYSTEM 0x1025 /* Added 1.8 */ #define CAP_PRINTER 0x1026 /* Added 1.8 */ #define CAP_PRINTERENABLED 0x1027 /* Added 1.8 */ #define CAP_PRINTERINDEX 0x1028 /* Added 1.8 */ #define CAP_PRINTERMODE 0x1029 /* Added 1.8 */ #define CAP_PRINTERSTRING 0x102a /* Added 1.8 */ #define CAP_PRINTERSUFFIX 0x102b /* Added 1.8 */ #define CAP_LANGUAGE 0x102c /* Added 1.8 */ #define CAP_FEEDERALIGNMENT 0x102d /* Added 1.8 */ #define CAP_FEEDERORDER 0x102e /* Added 1.8 */ #define CAP_PAPERBINDING 0x102f /* Added 1.8 */ #define CAP_REACQUIREALLOWED 0x1030 /* Added 1.8 */ #define CAP_PASSTHRU 0x1031 /* Added 1.8 */ #define CAP_BATTERYMINUTES 0x1032 /* Added 1.8 */ #define CAP_BATTERYPERCENTAGE 0x1033 /* Added 1.8 */ #define CAP_POWERDOWNTIME 0x1034 /* Added 1.8 */ /* image data sources MAY support these caps */ #define ICAP_AUTOBRIGHT 0x1100 #define ICAP_BRIGHTNESS 0x1101 #define ICAP_CONTRAST 0x1103 #define ICAP_CUSTHALFTONE 0x1104 #define ICAP_EXPOSURETIME 0x1105 #define ICAP_FILTER 0x1106 #define ICAP_FLASHUSED 0x1107 #define ICAP_GAMMA 0x1108 #define ICAP_HALFTONES 0x1109 #define ICAP_HIGHLIGHT 0x110a #define ICAP_IMAGEFILEFORMAT 0x110c #define ICAP_LAMPSTATE 0x110d #define ICAP_LIGHTSOURCE 0x110e #define ICAP_ORIENTATION 0x1110 #define ICAP_PHYSICALWIDTH 0x1111 #define ICAP_PHYSICALHEIGHT 0x1112 #define ICAP_SHADOW 0x1113 #define ICAP_FRAMES 0x1114 #define ICAP_XNATIVERESOLUTION 0x1116 #define ICAP_YNATIVERESOLUTION 0x1117 #define ICAP_XRESOLUTION 0x1118 #define ICAP_YRESOLUTION 0x1119 #define ICAP_MAXFRAMES 0x111a #define ICAP_TILES 0x111b #define ICAP_BITORDER 0x111c #define ICAP_CCITTKFACTOR 0x111d #define ICAP_LIGHTPATH 0x111e #define ICAP_PIXELFLAVOR 0x111f #define ICAP_PLANARCHUNKY 0x1120 #define ICAP_ROTATION 0x1121 #define ICAP_SUPPORTEDSIZES 0x1122 #define ICAP_THRESHOLD 0x1123 #define ICAP_XSCALING 0x1124 #define ICAP_YSCALING 0x1125 #define ICAP_BITORDERCODES 0x1126 #define ICAP_PIXELFLAVORCODES 0x1127 #define ICAP_JPEGPIXELTYPE 0x1128 #define ICAP_TIMEFILL 0x112a #define ICAP_BITDEPTH 0x112b #define ICAP_BITDEPTHREDUCTION 0x112c /* Added 1.5 */ #define ICAP_UNDEFINEDIMAGESIZE 0x112d /* Added 1.6 */ #define ICAP_IMAGEDATASET 0x112e /* Added 1.7 */ #define ICAP_EXTIMAGEINFO 0x112f /* Added 1.7 */ #define ICAP_MINIMUMHEIGHT 0x1130 /* Added 1.7 */ #define ICAP_MINIMUMWIDTH 0x1131 /* Added 1.7 */ #define ICAP_AUTODISCARDBLANKPAGES 0x1134 /* Added 1.8 */ #define ICAP_FLIPROTATION 0x1136 /* Added 1.8 */ #define ICAP_BARCODEDETECTIONENABLED 0x1137 /* Added 1.8 */ #define ICAP_SUPPORTEDBARCODETYPES 0x1138 /* Added 1.8 */ #define ICAP_BARCODEMAXSEARCHPRIORITIES 0x1139 /* Added 1.8 */ #define ICAP_BARCODESEARCHPRIORITIES 0x113a /* Added 1.8 */ #define ICAP_BARCODESEARCHMODE 0x113b /* Added 1.8 */ #define ICAP_BARCODEMAXRETRIES 0x113c /* Added 1.8 */ #define ICAP_BARCODETIMEOUT 0x113d /* Added 1.8 */ #define ICAP_ZOOMFACTOR 0x113e /* Added 1.8 */ #define ICAP_PATCHCODEDETECTIONENABLED 0x113f /* Added 1.8 */ #define ICAP_SUPPORTEDPATCHCODETYPES 0x1140 /* Added 1.8 */ #define ICAP_PATCHCODEMAXSEARCHPRIORITIES 0x1141 /* Added 1.8 */ #define ICAP_PATCHCODESEARCHPRIORITIES 0x1142 /* Added 1.8 */ #define ICAP_PATCHCODESEARCHMODE 0x1143 /* Added 1.8 */ #define ICAP_PATCHCODEMAXRETRIES 0x1144 /* Added 1.8 */ #define ICAP_PATCHCODETIMEOUT 0x1145 /* Added 1.8 */ #define ICAP_FLASHUSED2 0x1146 /* Added 1.8 */ #define ICAP_IMAGEFILTER 0x1147 /* Added 1.8 */ #define ICAP_NOISEFILTER 0x1148 /* Added 1.8 */ #define ICAP_OVERSCAN 0x1149 /* Added 1.8 */ #define ICAP_AUTOMATICBORDERDETECTION 0x1150 /* Added 1.8 */ #define ICAP_AUTOMATICDESKEW 0x1151 /* Added 1.8 */ #define ICAP_AUTOMATICROTATE 0x1152 /* Added 1.8 */ /* image data sources MAY support these audio caps */ #define ACAP_AUDIOFILEFORMAT 0x1201 /* Added 1.8 */ #define ACAP_XFERMECH 0x1202 /* Added 1.8 */ /* ----------------------------------------------------------------------- *\ Version 1.7: Following is Extended Image Info Attributes. July 1997 KHL \* ----------------------------------------------------------------------- */ #define TWEI_BARCODEX 0x1200 #define TWEI_BARCODEY 0x1201 #define TWEI_BARCODETEXT 0x1202 #define TWEI_BARCODETYPE 0x1203 #define TWEI_DESHADETOP 0x1204 #define TWEI_DESHADELEFT 0x1205 #define TWEI_DESHADEHEIGHT 0x1206 #define TWEI_DESHADEWIDTH 0x1207 #define TWEI_DESHADESIZE 0x1208 #define TWEI_SPECKLESREMOVED 0x1209 #define TWEI_HORZLINEXCOORD 0x120A #define TWEI_HORZLINEYCOORD 0x120B #define TWEI_HORZLINELENGTH 0x120C #define TWEI_HORZLINETHICKNESS 0x120D #define TWEI_VERTLINEXCOORD 0x120E #define TWEI_VERTLINEYCOORD 0x120F #define TWEI_VERTLINELENGTH 0x1210 #define TWEI_VERTLINETHICKNESS 0x1211 #define TWEI_PATCHCODE 0x1212 #define TWEI_ENDORSEDTEXT 0x1213 #define TWEI_FORMCONFIDENCE 0x1214 #define TWEI_FORMTEMPLATEMATCH 0x1215 #define TWEI_FORMTEMPLATEPAGEMATCH 0x1216 #define TWEI_FORMHORZDOCOFFSET 0x1217 #define TWEI_FORMVERTDOCOFFSET 0x1218 #define TWEI_BARCODECOUNT 0x1219 #define TWEI_BARCODECONFIDENCE 0x121A #define TWEI_BARCODEROTATION 0x121B #define TWEI_BARCODETEXTLENGTH 0x121C #define TWEI_DESHADECOUNT 0x121D #define TWEI_DESHADEBLACKCOUNTOLD 0x121E #define TWEI_DESHADEBLACKCOUNTNEW 0x121F #define TWEI_DESHADEBLACKRLMIN 0x1220 #define TWEI_DESHADEBLACKRLMAX 0x1221 #define TWEI_DESHADEWHITECOUNTOLD 0x1222 #define TWEI_DESHADEWHITECOUNTNEW 0x1223 #define TWEI_DESHADEWHITERLMIN 0x1224 #define TWEI_DESHADEWHITERLAVE 0x1225 #define TWEI_DESHADEWHITERLMAX 0x1226 #define TWEI_BLACKSPECKLESREMOVED 0x1227 #define TWEI_WHITESPECKLESREMOVED 0x1228 #define TWEI_HORZLINECOUNT 0x1229 #define TWEI_VERTLINECOUNT 0x122A #define TWEI_DESKEWSTATUS 0x122B #define TWEI_SKEWORIGINALANGLE 0x122C #define TWEI_SKEWFINALANGLE 0x122D #define TWEI_SKEWCONFIDENCE 0x122E #define TWEI_SKEWWINDOWX1 0x122F #define TWEI_SKEWWINDOWY1 0x1230 #define TWEI_SKEWWINDOWX2 0x1231 #define TWEI_SKEWWINDOWY2 0x1232 #define TWEI_SKEWWINDOWX3 0x1233 #define TWEI_SKEWWINDOWY3 0x1234 #define TWEI_SKEWWINDOWX4 0x1235 #define TWEI_SKEWWINDOWY4 0x1236 #define TWEJ_NONE 0x0000 #define TWEJ_MIDSEPARATOR 0x0001 #define TWEJ_PATCH1 0x0002 #define TWEJ_PATCH2 0x0003 #define TWEJ_PATCH3 0x0004 #define TWEJ_PATCH4 0x0005 #define TWEJ_PATCH6 0x0006 #define TWEJ_PATCHT 0x0007 /*************************************************************************** * Return Codes and Condition Codes section * ***************************************************************************/ /* Return Codes: DSM_Entry and DS_Entry may return any one of these values. */ #define TWRC_CUSTOMBASE 0x8000 #define TWRC_SUCCESS 0 #define TWRC_FAILURE 1 /* Application may get TW_STATUS for info on failure */ #define TWRC_CHECKSTATUS 2 /* "tried hard"; get status */ #define TWRC_CANCEL 3 #define TWRC_DSEVENT 4 #define TWRC_NOTDSEVENT 5 #define TWRC_XFERDONE 6 #define TWRC_ENDOFLIST 7 /* After MSG_GETNEXT if nothing left */ #define TWRC_INFONOTSUPPORTED 8 #define TWRC_DATANOTAVAILABLE 9 /* Condition Codes: Application gets these by doing DG_CONTROL DAT_STATUS MSG_GET. */ #define TWCC_CUSTOMBASE 0x8000 #define TWCC_SUCCESS 0 /* It worked! */ #define TWCC_BUMMER 1 /* Failure due to unknown causes */ #define TWCC_LOWMEMORY 2 /* Not enough memory to perform operation */ #define TWCC_NODS 3 /* No Data Source */ #define TWCC_MAXCONNECTIONS 4 /* DS is connected to max possible applications */ #define TWCC_OPERATIONERROR 5 /* DS or DSM reported error, application shouldn't */ #define TWCC_BADCAP 6 /* Unknown capability */ #define TWCC_BADPROTOCOL 9 /* Unrecognized MSG DG DAT combination */ #define TWCC_BADVALUE 10 /* Data parameter out of range */ #define TWCC_SEQERROR 11 /* DG DAT MSG out of expected sequence */ #define TWCC_BADDEST 12 /* Unknown destination Application/Source in DSM_Entry */ #define TWCC_CAPUNSUPPORTED 13 /* Capability not supported by source */ #define TWCC_CAPBADOPERATION 14 /* Operation not supported by capability */ #define TWCC_CAPSEQERROR 15 /* Capability has dependency on other capability */ /* Added 1.8 */ #define TWCC_DENIED 16 /* File System operation is denied (file is protected) */ #define TWCC_FILEEXISTS 17 /* Operation failed because file already exists. */ #define TWCC_FILENOTFOUND 18 /* File not found */ #define TWCC_NOTEMPTY 19 /* Operation failed because directory is not empty */ #define TWCC_PAPERJAM 20 /* The feeder is jammed */ #define TWCC_PAPERDOUBLEFEED 21 /* The feeder detected multiple pages */ #define TWCC_FILEWRITEERROR 22 /* Error writing the file (meant for things like disk full conditions) */ #define TWCC_CHECKDEVICEONLINE 23 /* The device went offline prior to or during this operation */ /* bit patterns: for query the operation that are supported by the data source on a capability */ /* Application gets these through DG_CONTROL/DAT_CAPABILITY/MSG_QUERYSUPPORT */ /* Added 1.6 */ #define TWQC_GET 0x0001 #define TWQC_SET 0x0002 #define TWQC_GETDEFAULT 0x0004 #define TWQC_GETCURRENT 0x0008 #define TWQC_RESET 0x0010 /**************************************************************************** * Entry Points * ****************************************************************************/ /********************************************************************** * Function: DSM_Entry, the only entry point into the Data Source Manager. * * Parameters: * pOrigin Identifies the source module of the message. This could * identify an Application, a Source, or the Source Manager. * * pDest Identifies the destination module for the message. * This could identify an application or a data source. * If this is NULL, the message goes to the Source Manager. * * DG The Data Group. * Example: DG_IMAGE. * * DAT The Data Attribute Type. * Example: DAT_IMAGEMEMXFER. * * MSG The message. Messages are interpreted by the destination module * with respect to the Data Group and the Data Attribute Type. * Example: MSG_GET. * * pData A pointer to the data structure or variable identified * by the Data Attribute Type. * Example: (TW_MEMREF)&ImageMemXfer * where ImageMemXfer is a TW_IMAGEMEMXFER structure. * * Returns: * ReturnCode * Example: TWRC_SUCCESS. * ********************************************************************/ /* Don't mangle the name "DSM_Entry" if we're compiling in C++! */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifdef _MSWIN_ TW_UINT16 FAR PASCAL DSM_Entry( pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF pData); typedef TW_UINT16 (FAR PASCAL *DSMENTRYPROC)(pTW_IDENTITY, pTW_IDENTITY, TW_UINT32, TW_UINT16, TW_UINT16, TW_MEMREF); #else /* _MSWIN_ */ /*FAR PASCAL TW_UINT16 DSM_Entry( pTW_IDENTITY pOrigin, pTW_IDENTITY pDest, TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF pData);*/ typedef TW_UINT16 (*DSMENTRYPROC)(pTW_IDENTITY, pTW_IDENTITY, TW_UINT32, TW_UINT16, TW_UINT16, TW_MEMREF); #endif /* _MSWIN_ */ #ifdef __cplusplus } #endif /* cplusplus */ /********************************************************************** * Function: DS_Entry, the entry point provided by a Data Source. * * Parameters: * pOrigin Identifies the source module of the message. This could * identify an application or the Data Source Manager. * * DG The Data Group. * Example: DG_IMAGE. * * DAT The Data Attribute Type. * Example: DAT_IMAGEMEMXFER. * * MSG The message. Messages are interpreted by the data source * with respect to the Data Group and the Data Attribute Type. * Example: MSG_GET. * * pData A pointer to the data structure or variable identified * by the Data Attribute Type. * Example: (TW_MEMREF)&ImageMemXfer * where ImageMemXfer is a TW_IMAGEMEMXFER structure. * * Returns: * ReturnCode * Example: TWRC_SUCCESS. * * Note: * The DSPROC type is only used by an application when it calls * a Data Source directly, bypassing the Data Source Manager. * ********************************************************************/ /* Don't mangle the name "DS_Entry" if we're compiling in C++! */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifdef _MSWIN_ TW_UINT16 DECLSPEC_EXPORT PASCAL DS_Entry (pTW_IDENTITY pOrigin, TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF pData); typedef TW_UINT16 (FAR PASCAL *DSENTRYPROC) (pTW_IDENTITY pOrigin, TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF pData); #else /* _MSWIN_ */ /*FAR PASCAL TW_UINT16 DS_Entry( pTW_IDENTITY pOrigin, TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF pData);*/ typedef TW_UINT16 (*DSENTRYPROC)(pTW_IDENTITY, TW_UINT32, TW_UINT16, TW_UINT16, TW_MEMREF); #endif /* _MSWIN_ */ #ifdef __cplusplus } #endif /* cplusplus */ /* Definitions from TWAIN 2.x used by our builtin data sources */ #define DAT_ENTRYPOINT 0x0403 #define DF_DS2 0x40000000 #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef TW_HANDLE (PASCAL *DSM_MEMALLOCATE)(TW_UINT32 _size); typedef void (PASCAL *DSM_MEMFREE)(TW_HANDLE _handle); typedef TW_MEMREF (PASCAL *DSM_MEMLOCK)(TW_HANDLE _handle); typedef void (PASCAL *DSM_MEMUNLOCK)(TW_HANDLE _handle); #ifdef __cplusplus } #endif /* cplusplus */ typedef struct { TW_UINT32 Size; DSMENTRYPROC DSM_Entry; DSM_MEMALLOCATE DSM_MemAllocate; DSM_MEMFREE DSM_MemFree; DSM_MEMLOCK DSM_MemLock; DSM_MEMUNLOCK DSM_MemUnlock; } TW_ENTRYPOINT; /* The Twain structures must be packed on 2 byte alignment */ #include "poppack.h" #endif /* TWAIN */ ================================================ FILE: wine/windows/txcoord.idl ================================================ /* * Copyright (C) 2013 Daniel Jeliński * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "transact.idl"; import "objidl.idl"; interface ITransactionResourceAsync; interface ITransactionLastResourceAsync; interface ITransactionResource; interface ITransactionEnlistmentAsync; interface ITransactionLastEnlistmentAsync; interface ITransactionExportFactory; interface ITransactionImportWhereabouts; interface ITransactionExport; interface ITransactionImport; interface ITipTransaction; interface ITipHelper; interface ITipPullSink; interface IDtcNetworkAccessConfig; interface IDtcNetworkAccessConfig2; [ object, uuid(69e971f0-23ce-11cf-ad60-00aa00a74ccd) ] interface ITransactionResourceAsync : IUnknown { HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase); HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW); HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW); HRESULT TMDown(void); } [ object, uuid(c82bd532-5b30-11d3-8a91-00c04f79eb6d) ] interface ITransactionLastResourceAsync : IUnknown { HRESULT DelegateCommit([in]DWORD grfRM); HRESULT ForgetRequest([in]XACTUOW *pNewUOW); } [ object, uuid(ee5ff7b3-4572-11d0-9452-00a0c905416e) ] interface ITransactionResource : IUnknown { HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase); HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW); HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW); HRESULT TMDown(void); } [ object, uuid(0fb15081-af41-11ce-bd2b-204c4f4f5020) ] interface ITransactionEnlistmentAsync : IUnknown { HRESULT PrepareRequestDone([in]HRESULT hr,[in]IMoniker *pmk,[in]BOID *pboidReason); HRESULT CommitRequestDone([in]HRESULT hr); HRESULT AbortRequestDone([in]HRESULT hr); } [ object, uuid(c82bd533-5b30-11d3-8a91-00c04f79eb6d) ] interface ITransactionLastEnlistmentAsync : IUnknown { HRESULT TransactionOutcome([in]XACTSTAT XactStat,[in]BOID *pboidReason); } [ object, uuid(e1cf9b53-8745-11ce-a9ba-00aa006c3706) ] interface ITransactionExportFactory : IUnknown { HRESULT GetRemoteClassId([in]CLSID *pclsid); HRESULT Create([in]ULONG cbWhereabouts,[in]byte *rgbWhereabouts,[out]ITransactionExport **ppExport); } [ object, uuid(0141fda4-8fc0-11ce-bd18-204c4f4f5020) ] interface ITransactionImportWhereabouts : IUnknown { HRESULT GetWhereaboutsSize([out]ULONG *pcbWhereabouts); HRESULT GetWhereabouts([in]ULONG cbWhereabouts,[out]byte *rgbWhereabouts,[out]ULONG *pcbUsed); } [ object, uuid(0141fda5-8fc0-11ce-bd18-204c4f4f5020) ] interface ITransactionExport : IUnknown { HRESULT Export([in]IUnknown *punkTransaction,[out]ULONG *pcbTransactionCookie); HRESULT GetTransactionCookie([in]IUnknown *punkTransaction,[in]ULONG cbTransactionCookie,[out]byte *rgbTransactionCookie,[out]ULONG *pcbUsed); } [ object, uuid(e1cf9b5a-8745-11ce-a9ba-00aa006c3706) ] interface ITransactionImport : IUnknown { HRESULT Import([in]ULONG cbTransactionCookie,[in]byte *rgbTransactionCookie,[in]IID *piid,[out,iid_is(piid)]void **ppvTransaction); } [ object, uuid(17cf72d0-bac5-11d1-b1bf-00c04fc2f3ef) ] interface ITipTransaction : IUnknown { HRESULT Push([in]char *i_pszRemoteTmUrl,[out]char **o_ppszRemoteTxUrl); HRESULT GetTransactionUrl([out]char **o_ppszLocalTxUrl); } [ object, uuid(17cf72d1-bac5-11d1-b1bf-00c04fc2f3ef) ] interface ITipHelper : IUnknown { HRESULT Pull([in]char *i_pszTxUrl,[out]ITransaction **o_ppITransaction); HRESULT PullAsync([in]char *i_pszTxUrl,[in]ITipPullSink *i_pTipPullSink,[out]ITransaction **o_ppITransaction); HRESULT GetLocalTmUrl([out]char **o_ppszLocalTmUrl); } [ object, uuid(17cf72d2-bac5-11d1-b1bf-00c04fc2f3ef) ] interface ITipPullSink : IUnknown { HRESULT PullComplete([in]HRESULT i_hrPull); } [ object, uuid(9797c15d-a428-4291-87b6-0995031a678d) ] interface IDtcNetworkAccessConfig : IUnknown { HRESULT GetAnyNetworkAccess([out]BOOL *pbAnyNetworkAccess); HRESULT SetAnyNetworkAccess([in]BOOL bAnyNetworkAccess); HRESULT GetNetworkAdministrationAccess([out]BOOL *pbNetworkAdministrationAccess); HRESULT SetNetworkAdministrationAccess([in]BOOL bNetworkAdministrationAccess); HRESULT GetNetworkTransactionAccess([out]BOOL *pbNetworkTransactionAccess); HRESULT SetNetworkTransactionAccess([in]BOOL bNetworkTransactionAccess); HRESULT GetNetworkClientAccess([out]BOOL *pbNetworkClientAccess); HRESULT SetNetworkClientAccess([in]BOOL bNetworkClientAccess); HRESULT GetNetworkTIPAccess([out]BOOL *pbNetworkTIPAccess); HRESULT SetNetworkTIPAccess([in]BOOL bNetworkTIPAccess); HRESULT GetXAAccess([out]BOOL *pbXAAccess); HRESULT SetXAAccess([in]BOOL bXAAccess); HRESULT RestartDtcService(void); } typedef enum AUTHENTICATION_LEVEL { NO_AUTHENTICATION_REQUIRED, INCOMING_AUTHENTICATION_REQUIRED, MUTUAL_AUTHENTICATION_REQUIRED } AUTHENTICATION_LEVEL; [ object, uuid(a7aa013b-eb7d-4f42-b41c-b2dec09ae034) ] interface IDtcNetworkAccessConfig2 : IDtcNetworkAccessConfig { HRESULT GetNetworkInboundAccess([out]BOOL *pbInbound); HRESULT GetNetworkOutboundAccess([out]BOOL *pbOutbound); HRESULT SetNetworkInboundAccess([in]BOOL bInbound); HRESULT SetNetworkOutboundAccess([in]BOOL bOutbound); HRESULT GetAuthenticationLevel([out]AUTHENTICATION_LEVEL *pAuthLevel); HRESULT SetAuthenticationLevel([in]AUTHENTICATION_LEVEL AuthLevel); } ================================================ FILE: wine/windows/txdtc.idl ================================================ /* * Copyright (C) 2013 Daniel Jeliński * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "txcoord.idl"; interface IXATransLookup; interface IXATransLookup2; interface IResourceManagerSink; interface IResourceManager; interface ILastResourceManager; interface IResourceManager2; interface IXAConfig; /*interface IRMHelper; interface IXAObtainRMInfo;*/ interface IResourceManagerFactory; interface IResourceManagerFactory2; interface IPrepareInfo; interface IPrepareInfo2; interface IGetDispenser; interface ITransactionVoterBallotAsync2; interface ITransactionVoterNotifyAsync2; interface ITransactionVoterFactory2; interface ITransactionPhase0EnlistmentAsync; interface ITransactionPhase0NotifyAsync; interface ITransactionPhase0Factory; interface ITransactionTransmitter; interface ITransactionTransmitterFactory; interface ITransactionReceiver; interface ITransactionReceiverFactory; interface IDtcLuConfigure; interface IDtcLuRecovery; interface IDtcLuRecoveryFactory; interface IDtcLuRecoveryInitiatedByDtcTransWork; interface IDtcLuRecoveryInitiatedByDtcStatusWork; interface IDtcLuRecoveryInitiatedByDtc; interface IDtcLuRecoveryInitiatedByLuWork; interface IDtcLuRecoveryInitiatedByLu; interface IDtcLuRmEnlistment; interface IDtcLuRmEnlistmentSink; interface IDtcLuRmEnlistmentFactory; interface IDtcLuSubordinateDtc; interface IDtcLuSubordinateDtcSink; interface IDtcLuSubordinateDtcFactory; cpp_quote("#define XACTTOMSG(dwXact) (dwXact-0x00040000+0x40000000)") typedef enum XACT_DTC_CONSTANTS { XACT_E_CONNECTION_REQUEST_DENIED = 0x8004d100, XACT_E_TOOMANY_ENLISTMENTS = 0x8004d101, XACT_E_DUPLICATE_GUID = 0x8004d102, XACT_E_NOTSINGLEPHASE = 0x8004d103, XACT_E_RECOVERYALREADYDONE = 0x8004d104, XACT_E_PROTOCOL = 0x8004d105, XACT_E_RM_FAILURE = 0x8004d106, XACT_E_RECOVERY_FAILED = 0x8004d107, XACT_E_LU_NOT_FOUND = 0x8004d108, XACT_E_DUPLICATE_LU = 0x8004d109, XACT_E_LU_NOT_CONNECTED = 0x8004d10a, XACT_E_DUPLICATE_TRANSID = 0x8004d10b, XACT_E_LU_BUSY = 0x8004d10c, XACT_E_LU_NO_RECOVERY_PROCESS = 0x8004d10d, XACT_E_LU_DOWN = 0x8004d10e, XACT_E_LU_RECOVERING = 0x8004d10f, XACT_E_LU_RECOVERY_MISMATCH = 0x8004d110, XACT_E_RM_UNAVAILABLE = 0x8004d111, XACT_E_LRMRECOVERYALREADYDONE = 0x8004d112, XACT_E_NOLASTRESOURCEINTERFACE = 0x8004d113, XACT_S_NONOTIFY = 0x4d100, XACT_OK_NONOTIFY = 0x4d101, dwUSER_MS_SQLSERVER = 0xffff } XACT_DTC_CONSTANTS; cpp_quote("#ifndef _XID_T_DEFINED") cpp_quote("#define _XID_T_DEFINED") typedef struct xid_t { LONG32 formatID; LONG32 gtrid_length; LONG32 bqual_length; char data[128 ]; } XID; cpp_quote("#endif") /* idl doesn't like this type cpp_quote("#ifndef _XA_SWITCH_T_DEFINED") cpp_quote("#define _XA_SWITCH_T_DEFINED") typedef struct xa_switch_t { char name[32 ]; LONG32 flags; LONG32 version; int (__cdecl *xa_open_entry)(char *__MIDL_0004,int __MIDL_0005,LONG32 __MIDL_0006); int (__cdecl *xa_close_entry)(char *__MIDL_0008,int __MIDL_0009,LONG32 __MIDL_0010); int (__cdecl *xa_start_entry)(XID *__MIDL_0012,int __MIDL_0013,LONG32 __MIDL_0014); int (__cdecl *xa_end_entry)(XID *__MIDL_0016,int __MIDL_0017,LONG32 __MIDL_0018); int (__cdecl *xa_rollback_entry)(XID *__MIDL_0020,int __MIDL_0021,LONG32 __MIDL_0022); int (__cdecl *xa_prepare_entry)(XID *__MIDL_0024,int __MIDL_0025,LONG32 __MIDL_0026); int (__cdecl *xa_commit_entry)(XID *__MIDL_0028,int __MIDL_0029,LONG32 __MIDL_0030); int (__cdecl *xa_recover_entry)(XID *__MIDL_0032,LONG32 __MIDL_0033,int __MIDL_0034,LONG32 __MIDL_0035); int (__cdecl *xa_forget_entry)(XID *__MIDL_0037,int __MIDL_0038,LONG32 __MIDL_0039); int (__cdecl *xa_complete_entry)(int *__MIDL_0041,int *__MIDL_0042,int __MIDL_0043,LONG32 __MIDL_0044); } xa_switch_t; cpp_quote("#endif") */ [ object, uuid(f3b1f131-eeda-11ce-aed4-00aa0051e2c4) ] interface IXATransLookup : IUnknown { HRESULT Lookup([out]ITransaction **ppTransaction); } [ object, uuid(bf193c85-0d1a-4290-b88f-d2cb8873d1e7) ] interface IXATransLookup2 : IUnknown { HRESULT Lookup([in]XID *pXID,[out]ITransaction **ppTransaction); } [ object, uuid(0d563181-defb-11ce-aed1-00aa0051e2c4) ] interface IResourceManagerSink : IUnknown { HRESULT TMDown(void); } [ object, uuid(13741d21-87eb-11ce-8081-0080c758527e) ] interface IResourceManager : IUnknown { HRESULT Enlist([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pRes,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]ITransactionEnlistmentAsync **ppEnlist); HRESULT Reenlist([in]byte *pPrepInfo,[in]ULONG cbPrepInfo,[in]DWORD lTimeout,[out]XACTSTAT *pXactStat); HRESULT ReenlistmentComplete(void); HRESULT GetDistributedTransactionManager([in]REFIID iid,[out,iid_is(iid)]void **ppvObject); } [ object, uuid(4d964ad4-5b33-11d3-8a91-00c04f79eb6d) ] interface ILastResourceManager : IUnknown { HRESULT TransactionCommitted([in]byte *pPrepInfo,[in]ULONG cbPrepInfo); HRESULT RecoveryDone(void); } [ object, uuid(d136c69a-f749-11d1-8f47-00c04f8ee57d) ] interface IResourceManager2 : IResourceManager { HRESULT Enlist2([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pResAsync,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]XID *pXid,[out]ITransactionEnlistmentAsync **ppEnlist); HRESULT Reenlist2([in]XID *pXid,[in]DWORD dwTimeout,[out]XACTSTAT *pXactStat); } [ object, uuid(c8a6e3a1-9a8c-11cf-a308-00a0c905416e) ] interface IXAConfig : IUnknown { HRESULT Initialize([in]GUID clsidHelperDll); HRESULT Terminate(void); } /* commented out because idl doesn't accept xa_switch_t type [ object, uuid(E793F6D1-F53D-11cf-A60D-00A0C905416E) ] interface IRMHelper : IUnknown { HRESULT RMCount([in]DWORD dwcTotalNumberOfRMs); HRESULT RMInfo([in]xa_switch_t *pXa_Switch,[in]BOOL fCDeclCallingConv,[in]char *pszOpenString,[in]char *pszCloseString,[in]GUID guidRMRecovery); } [ object, uuid(E793F6D2-F53D-11cf-A60D-00A0C905416E) ] interface IXAObtainRMInfo : IUnknown { HRESULT ObtainRMInfo([in]IRMHelper *pIRMHelper); }*/ [ object, uuid(13741d20-87eb-11ce-8081-0080c758527e) ] interface IResourceManagerFactory : IUnknown { HRESULT Create([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[out]IResourceManager **ppResMgr); } [ object, uuid(6b369c21-fbd2-11d1-8f47-00c04f8ee57d) ] interface IResourceManagerFactory2 : IResourceManagerFactory { HRESULT CreateEx([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[in]REFIID riidRequested,[out, iid_is(riidRequested)]void **ppvResMgr); } [ object, uuid(80c7bfd0-87ee-11ce-8081-0080c758527e) ] interface IPrepareInfo : IUnknown { HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo); HRESULT GetPrepareInfo([out]byte *pPrepInfo); } [ object, uuid(5fab2547-9779-11d1-b886-00c04fb9618a) ] interface IPrepareInfo2 : IUnknown { HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo); HRESULT GetPrepareInfo([in]ULONG cbPrepareInfo,[out]byte *pPrepInfo); } [ object, uuid(c23cc370-87ef-11ce-8081-0080c758527e) ] interface IGetDispenser : IUnknown { HRESULT GetDispenser([in]REFIID iid,[out,iid_is(iid)]void **ppvObject); } [ object, uuid(5433376c-414d-11d3-b206-00c04fc2f3ef) ] interface ITransactionVoterBallotAsync2 : IUnknown { HRESULT VoteRequestDone([in]HRESULT hr,[in]BOID *pboidReason); } [ object, uuid(5433376b-414d-11d3-b206-00c04fc2f3ef) ] interface ITransactionVoterNotifyAsync2 : ITransactionOutcomeEvents { HRESULT VoteRequest(void); } [ object, uuid(5433376a-414d-11d3-b206-00c04fc2f3ef) ] interface ITransactionVoterFactory2 : IUnknown { HRESULT Create([in]ITransaction *pTransaction,[in]ITransactionVoterNotifyAsync2 *pVoterNotify,[out]ITransactionVoterBallotAsync2 **ppVoterBallot); } [ object, uuid(82dc88e1-a954-11d1-8f88-00600895e7d5) ] interface ITransactionPhase0EnlistmentAsync : IUnknown { HRESULT Enable(void); HRESULT WaitForEnlistment(void); HRESULT Phase0Done(void); HRESULT Unenlist(void); HRESULT GetTransaction([out]ITransaction **ppITransaction); } [ object, uuid(ef081809-0c76-11d2-87a6-00c04f990f34) ] interface ITransactionPhase0NotifyAsync : IUnknown { HRESULT Phase0Request([in]BOOL fAbortingHint); HRESULT EnlistCompleted([in]HRESULT status); } [ object, uuid(82dc88e0-a954-11d1-8f88-00600895e7d5) ] interface ITransactionPhase0Factory : IUnknown { HRESULT Create([in]ITransactionPhase0NotifyAsync *pPhase0Notify,[out]ITransactionPhase0EnlistmentAsync **ppPhase0Enlistment); } [ object, uuid(59313e01-b36c-11cf-a539-00aa006887c3) ] interface ITransactionTransmitter : IUnknown { HRESULT Set([in]ITransaction *pTransaction); HRESULT GetPropagationTokenSize([out]ULONG *pcbToken); HRESULT MarshalPropagationToken([in]ULONG cbToken,[out]byte *rgbToken,[out]ULONG *pcbUsed); HRESULT UnmarshalReturnToken([in]ULONG cbReturnToken,[in]byte *rgbReturnToken); HRESULT Reset(void); } [ object, uuid(59313e00-b36c-11cf-a539-00aa006887c3) ] interface ITransactionTransmitterFactory : IUnknown { HRESULT Create([out]ITransactionTransmitter **ppTransmitter); } [ object, uuid(59313e03-b36c-11cf-a539-00aa006887c3) ] interface ITransactionReceiver : IUnknown { HRESULT UnmarshalPropagationToken([in]ULONG cbToken,[in]byte *rgbToken,[out]ITransaction **ppTransaction); HRESULT GetReturnTokenSize([out]ULONG *pcbReturnToken); HRESULT MarshalReturnToken([in]ULONG cbReturnToken,[out]byte *rgbReturnToken,[out]ULONG *pcbUsed); HRESULT Reset(void); } [ object, uuid(59313e02-b36c-11cf-a539-00aa006887c3) ] interface ITransactionReceiverFactory : IUnknown { HRESULT Create([out]ITransactionReceiver **ppReceiver); } typedef struct _ProxyConfigParams { WORD wcThreadsMax; } PROXY_CONFIG_PARAMS; [ object, uuid(4131e760-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuConfigure : IUnknown { HRESULT Add([in]byte *pucLuPair,[in]DWORD cbLuPair); HRESULT Delete([in]byte *pucLuPair,[in]DWORD cbLuPair); } [ object, uuid(ac2b8ad2-d6f0-11d0-b386-00a0c9083365) ] interface IDtcLuRecovery : IUnknown { } [ object, uuid(4131e762-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuRecoveryFactory : IUnknown { HRESULT Create([in]byte *pucLuPair,[in]DWORD cbLuPair,[out]IDtcLuRecovery **ppRecovery); } typedef enum _DtcLu_LocalRecovery_Work { DTCINITIATEDRECOVERYWORK_CHECKLUSTATUS = 1, DTCINITIATEDRECOVERYWORK_TRANS, DTCINITIATEDRECOVERYWORK_TMDOWN } DTCINITIATEDRECOVERYWORK; typedef enum _DtcLu_Xln { DTCLUXLN_COLD = 1, DTCLUXLN_WARM } DTCLUXLN; typedef enum _DtcLu_Xln_Confirmation { DTCLUXLNCONFIRMATION_CONFIRM = 1, DTCLUXLNCONFIRMATION_LOGNAMEMISMATCH, DTCLUXLNCONFIRMATION_COLDWARMMISMATCH, DTCLUXLNCONFIRMATION_OBSOLETE } DTCLUXLNCONFIRMATION; typedef enum _DtcLu_Xln_Response { DTCLUXLNRESPONSE_OK_SENDOURXLNBACK = 1, DTCLUXLNRESPONSE_OK_SENDCONFIRMATION, DTCLUXLNRESPONSE_LOGNAMEMISMATCH, DTCLUXLNRESPONSE_COLDWARMMISMATCH } DTCLUXLNRESPONSE; typedef enum _DtcLu_Xln_Error { DTCLUXLNERROR_PROTOCOL = 1, DTCLUXLNERROR_LOGNAMEMISMATCH, DTCLUXLNERROR_COLDWARMMISMATCH } DTCLUXLNERROR; typedef enum _DtcLu_CompareState { DTCLUCOMPARESTATE_COMMITTED = 1, DTCLUCOMPARESTATE_HEURISTICCOMMITTED, DTCLUCOMPARESTATE_HEURISTICMIXED, DTCLUCOMPARESTATE_HEURISTICRESET, DTCLUCOMPARESTATE_INDOUBT, DTCLUCOMPARESTATE_RESET } DTCLUCOMPARESTATE; typedef enum _DtcLu_CompareStates_Confirmation { DTCLUCOMPARESTATESCONFIRMATION_CONFIRM = 1, DTCLUCOMPARESTATESCONFIRMATION_PROTOCOL } DTCLUCOMPARESTATESCONFIRMATION; typedef enum _DtcLu_CompareStates_Error { DTCLUCOMPARESTATESERROR_PROTOCOL = 1 } DTCLUCOMPARESTATESERROR; typedef enum _DtcLu_CompareStates_Response { DTCLUCOMPARESTATESRESPONSE_OK = 1, DTCLUCOMPARESTATESRESPONSE_PROTOCOL } DTCLUCOMPARESTATESRESPONSE; [ object, uuid(4131e765-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuRecoveryInitiatedByDtcTransWork : IUnknown { HRESULT GetLogNameSizes([out]DWORD *pcbOurLogName,[out]DWORD *pcbRemoteLogName); HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[in,out]unsigned char *pRemoteLogName,[out]DWORD *pdwProtocol); HRESULT HandleConfirmationFromOurXln([in]DTCLUXLNCONFIRMATION Confirmation); HRESULT HandleTheirXlnResponse([in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]DWORD dwProtocol,[out]DTCLUXLNCONFIRMATION *pConfirmation); HRESULT HandleErrorFromOurXln([in]DTCLUXLNERROR Error); HRESULT CheckForCompareStates([out]BOOL *fCompareStates); HRESULT GetOurTransIdSize([in,out]DWORD *pcbOurTransId); HRESULT GetOurCompareStates([in,out]unsigned char *pOurTransId,[out]DTCLUCOMPARESTATE *pCompareState); HRESULT HandleTheirCompareStatesResponse([in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESCONFIRMATION *pConfirmation); HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error); HRESULT ConversationLost(void); HRESULT GetRecoverySeqNum([out]LONG *plRecoverySeqNum); HRESULT ObsoleteRecoverySeqNum([in]LONG lNewRecoverySeqNum); } [ object, uuid(4131e766-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuRecoveryInitiatedByDtcStatusWork : IUnknown { HRESULT HandleCheckLuStatus([in]LONG lRecoverySeqNum); } [ object, uuid(4131e764-1aea-11d0-944b-00a0c905416e) ] [local] interface IDtcLuRecoveryInitiatedByDtc : IUnknown { HRESULT GetWork([in,out]DTCINITIATEDRECOVERYWORK *pWork,[in,out]void **ppv); } [ object, uuid(ac2b8ad1-d6f0-11d0-b386-00a0c9083365) ] interface IDtcLuRecoveryInitiatedByLuWork : IUnknown { 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); HRESULT GetOurLogNameSize([in,out]DWORD *pcbOurLogName); HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[out]DWORD *pdwProtocol); HRESULT HandleConfirmationOfOurXln([in]DTCLUXLNCONFIRMATION Confirmation); HRESULT HandleTheirCompareStates([in,out]unsigned char *pRemoteTransId,[in]DWORD cbRemoteTransId,[in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESRESPONSE *pResponse,[out]DTCLUCOMPARESTATE *pCompareState); HRESULT HandleConfirmationOfOurCompareStates([in]DTCLUCOMPARESTATESCONFIRMATION Confirmation); HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error); HRESULT ConversationLost(void); } [ object, uuid(4131e768-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuRecoveryInitiatedByLu : IUnknown { HRESULT GetObjectToHandleWorkFromLu([out]IDtcLuRecoveryInitiatedByLuWork **ppWork); } [ object, uuid(4131e769-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuRmEnlistment : IUnknown { HRESULT Unplug([in]BOOL fConversationLost); HRESULT BackedOut(void); HRESULT BackOut(void); HRESULT Committed(void); HRESULT Forget(void); HRESULT RequestCommit(void); } [ object, uuid(4131e770-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuRmEnlistmentSink : IUnknown { HRESULT AckUnplug(void); HRESULT TmDown(void); HRESULT SessionLost(void); HRESULT BackedOut(void); HRESULT BackOut(void); HRESULT Committed(void); HRESULT Forget(void); HRESULT Prepare(void); HRESULT RequestCommit(void); } [ object, uuid(4131e771-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuRmEnlistmentFactory : IUnknown { 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); } [ object, uuid(4131e773-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuSubordinateDtc : IUnknown { HRESULT Unplug([in]BOOL fConversationLost); HRESULT BackedOut(void); HRESULT BackOut(void); HRESULT Committed(void); HRESULT Forget(void); HRESULT Prepare(void); HRESULT RequestCommit(void); } [ object, uuid(4131e774-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuSubordinateDtcSink : IUnknown { HRESULT AckUnplug(void); HRESULT TmDown(void); HRESULT SessionLost(void); HRESULT BackedOut(void); HRESULT BackOut(void); HRESULT Committed(void); HRESULT Forget(void); HRESULT RequestCommit(void); } [ object, uuid(4131e775-1aea-11d0-944b-00a0c905416e) ] interface IDtcLuSubordinateDtcFactory : IUnknown { 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); } /* these GUIDs were found in mingw header, but without corresponding interface definitions DEFINE_GUID(IID_IXAResourceManager,0x4131e751,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); DEFINE_GUID(IID_IXAResourceManagerFactory,0x4131e750,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); DEFINE_GUID(IID_IXATransaction,0x4131e752,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); */ ================================================ FILE: wine/windows/udpmib.h ================================================ /* * Copyright (C) 2003 Juan Lang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_UDPMIB_H #define __WINE_UDPMIB_H #define TCPIP_OWNING_MODULE_SIZE 16 /* UDP table */ typedef struct _MIB_UDPROW { DWORD dwLocalAddr; DWORD dwLocalPort; } MIB_UDPROW, *PMIB_UDPROW; typedef struct _MIB_UDPTABLE { DWORD dwNumEntries; MIB_UDPROW table[1]; } MIB_UDPTABLE, *PMIB_UDPTABLE; typedef struct _MIB_UDPROW_OWNER_PID { DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwOwningPid; } MIB_UDPROW_OWNER_PID, *PMIB_UDPROW_OWNER_PID; typedef struct _MIB_UDPTABLE_OWNER_PID { DWORD dwNumEntries; MIB_UDPROW_OWNER_PID table[1]; } MIB_UDPTABLE_OWNER_PID, *PMIB_UDPTABLE_OWNER_PID; typedef struct _MIB_UDPROW_OWNER_MODULE { DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwOwningPid; LARGE_INTEGER liCreateTimestamp; __C89_NAMELESS union { __C89_NAMELESS struct { int SpecificPortBind:1; } __C89_NAMELESSSTRUCTNAME; int dwFlags; } __C89_NAMELESSUNIONNAME; ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE]; } MIB_UDPROW_OWNER_MODULE, *PMIB_UDPROW_OWNER_MODULE; typedef struct _MIB_UDPTABLE_OWNER_MODULE { DWORD dwNumEntries; MIB_UDPROW_OWNER_MODULE table[1]; } MIB_UDPTABLE_OWNER_MODULE, *PMIB_UDPTABLE_OWNER_MODULE; typedef struct _MIB_UDP6ROW { IN6_ADDR dwLocalAddr; DWORD dwLocalScopeId; DWORD dwLocalPort; } MIB_UDP6ROW, *PMIB_UDP6ROW; typedef struct _MIB_UDP6TABLE { DWORD dwNumEntries; MIB_UDP6ROW table[1]; } MIB_UDP6TABLE, *PMIB_UDP6TABLE; typedef struct _MIB_UDP6ROW_OWNER_PID { UCHAR ucLocalAddr[16]; DWORD dwLocalScopeId; DWORD dwLocalPort; DWORD dwOwningPid; } MIB_UDP6ROW_OWNER_PID, *PMIB_UDP6ROW_OWNER_PID; typedef struct _MIB_UDP6TABLE_OWNER_PID { DWORD dwNumEntries; MIB_UDP6ROW_OWNER_PID table[1]; } MIB_UDP6TABLE_OWNER_PID, *PMIB_UDP6TABLE_OWNER_PID; typedef struct _MIB_UDP6ROW_OWNER_MODULE { UCHAR ucLocalAddr[16]; DWORD dwLocalScopeId; DWORD dwLocalPort; DWORD dwOwningPid; LARGE_INTEGER liCreateTimestamp; __C89_NAMELESS union { __C89_NAMELESS struct { int SpecificPortBind:1; } __C89_NAMELESSSTRUCTNAME; int dwFlags; } __C89_NAMELESSUNIONNAME; ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE]; } MIB_UDP6ROW_OWNER_MODULE, *PMIB_UDP6ROW_OWNER_MODULE; typedef struct _MIB_UDP6TABLE_OWNER_MODULE { DWORD dwNumEntries; MIB_UDP6ROW_OWNER_MODULE table[1]; } MIB_UDP6TABLE_OWNER_MODULE, *PMIB_UDP6TABLE_OWNER_MODULE; /* UDP statistics */ typedef struct _MIB_UDPSTATS { DWORD dwInDatagrams; DWORD dwNoPorts; DWORD dwInErrors; DWORD dwOutDatagrams; DWORD dwNumAddrs; } MIB_UDPSTATS, *PMIB_UDPSTATS; #endif /* __WINE_UDPMIB_H */ ================================================ FILE: wine/windows/uianimation.idl ================================================ /* * Copyright 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; import "unknwn.idl"; interface IUIAnimationStoryboard; interface IUIAnimationVariable; typedef DOUBLE UI_ANIMATION_SECONDS; typedef struct { int _; } *UI_ANIMATION_KEYFRAME; typedef enum { UI_ANIMATION_MANAGER_IDLE, UI_ANIMATION_MANAGER_BUSY } UI_ANIMATION_MANAGER_STATUS; typedef enum { UI_ANIMATION_ROUNDING_NEAREST, UI_ANIMATION_ROUNDING_FLOOR, UI_ANIMATION_ROUNDING_CEILING } UI_ANIMATION_ROUNDING_MODE; typedef enum { UI_ANIMATION_SCHEDULING_UNEXPECTED_FAILURE, UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY, UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED, UI_ANIMATION_SCHEDULING_SUCCEEDED, UI_ANIMATION_SCHEDULING_DEFERRED } UI_ANIMATION_SCHEDULING_RESULT; typedef enum { UI_ANIMATION_STORYBOARD_BUILDING, UI_ANIMATION_STORYBOARD_SCHEDULED, UI_ANIMATION_STORYBOARD_CANCELLED, UI_ANIMATION_STORYBOARD_PLAYING, UI_ANIMATION_STORYBOARD_TRUNCATED, UI_ANIMATION_STORYBOARD_FINISHED, UI_ANIMATION_STORYBOARD_READY, UI_ANIMATION_STORYBOARD_INSUFFICIENT_PRIORITY } UI_ANIMATION_STORYBOARD_STATUS; typedef enum { UI_ANIMATION_UPDATE_NO_CHANGE, UI_ANIMATION_UPDATE_VARIABLES_CHANGED, } UI_ANIMATION_UPDATE_RESULT; typedef enum { UI_ANIMATION_TIMER_CLIENT_IDLE, UI_ANIMATION_TIMER_CLIENT_BUSY, } UI_ANIMATION_TIMER_CLIENT_STATUS; typedef enum { UI_ANIMATION_IDLE_BEHAVIOR_CONTINUE, UI_ANIMATION_IDLE_BEHAVIOR_DISABLE, } UI_ANIMATION_IDLE_BEHAVIOR; [ local, object, uuid(783321ed-78a3-4366-b574-6af607a64788), pointer_default(unique) ] interface IUIAnimationManagerEventHandler : IUnknown { HRESULT OnManagerStatusChanged ( [in] UI_ANIMATION_MANAGER_STATUS status, [in] UI_ANIMATION_MANAGER_STATUS prev_status); } [ local, object, uuid(6358b7ba-87d2-42d5-bf71-82e919dd5862), pointer_default(unique) ] interface IUIAnimationVariableChangeHandler : IUnknown { HRESULT OnValueChanged ( [in] IUIAnimationStoryboard *storyboard, [in] IUIAnimationVariable *variable, [in] DOUBLE value, [in] DOUBLE prev_value); } [ local, object, uuid(bb3e1550-356e-44b0-99da-85ac6017865e), pointer_default(unique) ] interface IUIAnimationVariableIntegerChangeHandler : IUnknown { HRESULT OnIntegerValueChanged ( [in] IUIAnimationStoryboard *storyboard, [in] IUIAnimationVariable *variable, [in] INT32 value, [in] INT32 prev_value); } [ local, object, uuid(3d5c9008-ec7c-4364-9f8a-9af3c58cbae6), pointer_default(unique) ] interface IUIAnimationStoryboardEventHandler : IUnknown { HRESULT OnStoryboardStatusChanged ( [in] IUIAnimationStoryboard *storyboard, [in] UI_ANIMATION_STORYBOARD_STATUS status, [in] UI_ANIMATION_STORYBOARD_STATUS prev_status); HRESULT OnStoryboardUpdated ([in] IUIAnimationStoryboard *storyboard); } [ local, object, uuid(dc6ce252-f731-41cf-b610-614b6ca049ad), pointer_default(unique) ] interface IUIAnimationTransition : IUnknown { HRESULT SetInitialValue ([in] DOUBLE value); HRESULT SetInitialVelocity ([in] DOUBLE velocity); HRESULT IsDurationKnown (); HRESULT GetDuration ([out, retval] UI_ANIMATION_SECONDS *duration); } [ local, object, uuid(8ceeb155-2849-4ce5-9448-91ff70e1e4d9), pointer_default(unique) ] interface IUIAnimationVariable : IUnknown { HRESULT GetValue ([out, retval] DOUBLE *value); HRESULT GetFinalValue ([out, retval] DOUBLE *value); HRESULT GetPreviousValue ([out, retval] DOUBLE *value); HRESULT GetIntegerValue ([out, retval] INT32 *value); HRESULT GetFinalIntegerValue ([out, retval] INT32 *value); HRESULT GetPreviousIntegerValue ([out, retval] INT32 *value); HRESULT GetCurrentStoryboard ([out, retval] IUIAnimationStoryboard **storyboard); HRESULT SetLowerBound ([in] DOUBLE bound); HRESULT SetUpperBound ([in] DOUBLE bound); HRESULT SetRoundingMode ([in] UI_ANIMATION_ROUNDING_MODE mode); HRESULT SetTag ( [in] IUnknown *object, [in] UINT32 id); HRESULT GetTag ( [out] IUnknown **object, [out] UINT32 *id); HRESULT SetVariableChangeHandler ([in, unique] IUIAnimationVariableChangeHandler *handler); HRESULT SetVariableIntegerChangeHandler ([in, unique] IUIAnimationVariableIntegerChangeHandler *handler); } [ local, object, uuid(a8ff128f-9bf9-4af1-9e67-e5e410defb84), pointer_default(unique) ] interface IUIAnimationStoryboard : IUnknown { HRESULT AddTransition ( [in] IUIAnimationVariable *variable, [in] IUIAnimationTransition *transition); HRESULT AddKeyframeAtOffset ( [in] UI_ANIMATION_KEYFRAME existingframe, [in] UI_ANIMATION_SECONDS offset, [out, retval] UI_ANIMATION_KEYFRAME *keyframe); HRESULT AddKeyframeAfterTransition ( [in] IUIAnimationTransition *transition, [out, retval] UI_ANIMATION_KEYFRAME *keyframe); HRESULT AddTransitionAtKeyframe ( [in] IUIAnimationVariable *variable, [in] IUIAnimationTransition *transition, [in] UI_ANIMATION_KEYFRAME start_key); HRESULT AddTransitionBetweenKeyframes ( [in] IUIAnimationVariable *variable, [in] IUIAnimationTransition *transition, [in] UI_ANIMATION_KEYFRAME start_key, [in] UI_ANIMATION_KEYFRAME end_key); HRESULT RepeatBetweenKeyframes ( [in] UI_ANIMATION_KEYFRAME start_key, [in] UI_ANIMATION_KEYFRAME end_key, [in] INT32 count); HRESULT HoldVariable ([in] IUIAnimationVariable *variable); HRESULT SetLongestAcceptableDelay ([in] UI_ANIMATION_SECONDS delay); HRESULT Schedule ( [in] UI_ANIMATION_SECONDS now, [out, defaultvalue(0)] UI_ANIMATION_SCHEDULING_RESULT *result); HRESULT Conclude (); HRESULT Finish ([in] UI_ANIMATION_SECONDS deadline); HRESULT Abandon (); HRESULT SetTag( [in, unique] IUnknown *object, [in] UINT32 id); HRESULT GetTag ( [out] IUnknown **object, [out] UINT32 *id); HRESULT GetStatus ([out, retval] UI_ANIMATION_STORYBOARD_STATUS *status); HRESULT GetElapsedTime ([out] UI_ANIMATION_SECONDS *elapsed); HRESULT SetStoryboardEventHandler ([in, unique] IUIAnimationStoryboardEventHandler *handler); } [ local, object, uuid(bedb4db6-94fa-4bfb-a47f-ef2d9e408c25), pointer_default(unique) ] interface IUIAnimationTimerClientEventHandler : IUnknown { HRESULT OnTimerClientStatusChanged ( [in] UI_ANIMATION_TIMER_CLIENT_STATUS new_status, [in] UI_ANIMATION_TIMER_CLIENT_STATUS previous_status); } [ local, object, uuid(195509b7-5d5e-4e3e-b278-ee3759b367ad), pointer_default(unique) ] interface IUIAnimationTimerUpdateHandler : IUnknown { HRESULT OnUpdate ( [in] UI_ANIMATION_SECONDS now, [out, retval] UI_ANIMATION_UPDATE_RESULT *result); HRESULT SetTimerClientEventHandler ( [in] IUIAnimationTimerClientEventHandler *handler); HRESULT ClearTimerClientEventHandler (); } [ local, object, uuid(274a7dea-d771-4095-abbd-8df7abd23ce3), pointer_default(unique) ] interface IUIAnimationTimerEventHandler : IUnknown { HRESULT OnPreUpdate (); HRESULT OnPostUpdate (); HRESULT OnRenderingTooSlow ( [in] UINT32 fps); } [ local, object, uuid(6b0efad1-a053-41d6-9085-33a689144665), pointer_default(unique) ] interface IUIAnimationTimer : IUnknown { HRESULT SetTimerUpdateHandler ( [in, unique] IUIAnimationTimerUpdateHandler *handler, [in] UI_ANIMATION_IDLE_BEHAVIOR idlebehavior); HRESULT SetTimerEventHandler ( [in, unique] IUIAnimationTimerEventHandler *handler); HRESULT Enable (); HRESULT Disable (); HRESULT IsEnabled (); HRESULT GetTime ( [out] UI_ANIMATION_SECONDS *time); HRESULT SetFrameRateThreshold ( [in] UINT32 fps); } [ uuid(44ca24db-1a92-4149-bab5-fb14d64b401e), version(1.0) ] library UIAnimation { [ uuid(bfcd4a0c-06b6-4384-b768-0daa792c380e) ] coclass UIAnimationTimer { [default] interface IUIAnimationTimer; } } ================================================ FILE: wine/windows/uiautomation.h ================================================ /* * Copyright 2012 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include ================================================ FILE: wine/windows/uiautomationclient.idl ================================================ /* * Copyright 2012 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define DO_NO_IMPORTS import "uiautomationcore.idl"; [ uuid(944de083-8fb8-45cf-bcb7-c477acb2f897), lcid(0), version(1.0) ] library UIAutomationClient { importlib ("stdole2.tlb"); /* FIXME: Uncomment when properly supported in widl [dllname("")] module UIA_PropertyIds { */ const long UIA_RuntimeIdPropertyId = 30000; const long UIA_BoundingRectanglePropertyId = 30001; const long UIA_ProcessIdPropertyId = 30002; const long UIA_ControlTypePropertyId = 30003; const long UIA_LocalizedControlTypePropertyId = 30004; const long UIA_NamePropertyId = 30005; const long UIA_AcceleratorKeyPropertyId = 30006; const long UIA_AccessKeyPropertyId = 30007; const long UIA_HasKeyboardFocusPropertyId = 30008; const long UIA_IsKeyboardFocusablePropertyId = 30009; const long UIA_IsEnabledPropertyId = 30010; const long UIA_AutomationIdPropertyId = 30011; const long UIA_ClassNamePropertyId = 30012; const long UIA_HelpTextPropertyId = 30013; const long UIA_ClickablePointPropertyId = 30014; const long UIA_CulturePropertyId = 30015; const long UIA_IsControlElementPropertyId = 30016; const long UIA_IsContentElementPropertyId = 30017; const long UIA_LabeledByPropertyId = 30018; const long UIA_IsPasswordPropertyId = 30019; const long UIA_NativeWindowHandlePropertyId = 30020; const long UIA_ItemTypePropertyId = 30021; const long UIA_IsOffscreenPropertyId = 30022; const long UIA_OrientationPropertyId = 30023; const long UIA_FrameworkIdPropertyId = 30024; const long UIA_IsRequiredForFormPropertyId = 30025; const long UIA_ItemStatusPropertyId = 30026; const long UIA_IsDockPatternAvailablePropertyId = 30027; const long UIA_IsExpandCollapsePatternAvailablePropertyId = 30028; const long UIA_IsGridItemPatternAvailablePropertyId = 30029; const long UIA_IsGridPatternAvailablePropertyId = 30030; const long UIA_IsInvokePatternAvailablePropertyId = 30031; const long UIA_IsMultipleViewPatternAvailablePropertyId = 30032; const long UIA_IsRangeValuePatternAvailablePropertyId = 30033; const long UIA_IsScrollPatternAvailablePropertyId = 30034; const long UIA_IsScrollItemPatternAvailablePropertyId = 30035; const long UIA_IsSelectionItemPatternAvailablePropertyId = 30036; const long UIA_IsSelectionPatternAvailablePropertyId = 30037; const long UIA_IsTablePatternAvailablePropertyId = 30038; const long UIA_IsTableItemPatternAvailablePropertyId = 30039; const long UIA_IsTextPatternAvailablePropertyId = 30040; const long UIA_IsTogglePatternAvailablePropertyId = 30041; const long UIA_IsTransformPatternAvailablePropertyId = 30042; const long UIA_IsValuePatternAvailablePropertyId = 30043; const long UIA_IsWindowPatternAvailablePropertyId = 30044; const long UIA_ValueValuePropertyId = 30045; const long UIA_ValueIsReadOnlyPropertyId = 30046; const long UIA_RangeValueValuePropertyId = 30047; const long UIA_RangeValueIsReadOnlyPropertyId = 30048; const long UIA_RangeValueMinimumPropertyId = 30049; const long UIA_RangeValueMaximumPropertyId = 30050; const long UIA_RangeValueLargeChangePropertyId = 30051; const long UIA_RangeValueSmallChangePropertyId = 30052; const long UIA_ScrollHorizontalScrollPercentPropertyId = 30053; const long UIA_ScrollHorizontalViewSizePropertyId = 30054; const long UIA_ScrollVerticalScrollPercentPropertyId = 30055; const long UIA_ScrollVerticalViewSizePropertyId = 30056; const long UIA_ScrollHorizontallyScrollablePropertyId = 30057; const long UIA_ScrollVerticallyScrollablePropertyId = 30058; const long UIA_SelectionSelectionPropertyId = 30059; const long UIA_SelectionCanSelectMultiplePropertyId = 30060; const long UIA_SelectionIsSelectionRequiredPropertyId = 30061; const long UIA_GridRowCountPropertyId = 30062; const long UIA_GridColumnCountPropertyId = 30063; const long UIA_GridItemRowPropertyId = 30064; const long UIA_GridItemColumnPropertyId = 30065; const long UIA_GridItemRowSpanPropertyId = 30066; const long UIA_GridItemColumnSpanPropertyId = 30067; const long UIA_GridItemContainingGridPropertyId = 30068; const long UIA_DockDockPositionPropertyId = 30069; const long UIA_ExpandCollapseExpandCollapseStatePropertyId = 30070; const long UIA_MultipleViewCurrentViewPropertyId = 30071; const long UIA_MultipleViewSupportedViewsPropertyId = 30072; const long UIA_WindowCanMaximizePropertyId = 30073; const long UIA_WindowCanMinimizePropertyId = 30074; const long UIA_WindowWindowVisualStatePropertyId = 30075; const long UIA_WindowWindowInteractionStatePropertyId = 30076; const long UIA_WindowIsModalPropertyId = 30077; const long UIA_WindowIsTopmostPropertyId = 30078; const long UIA_SelectionItemIsSelectedPropertyId = 30079; const long UIA_SelectionItemSelectionContainerPropertyId = 30080; const long UIA_TableRowHeadersPropertyId = 30081; const long UIA_TableColumnHeadersPropertyId = 30082; const long UIA_TableRowOrColumnMajorPropertyId = 30083; const long UIA_TableItemRowHeaderItemsPropertyId = 30084; const long UIA_TableItemColumnHeaderItemsPropertyId = 30085; const long UIA_ToggleToggleStatePropertyId = 30086; const long UIA_TransformCanMovePropertyId = 30087; const long UIA_TransformCanResizePropertyId = 30088; const long UIA_TransformCanRotatePropertyId = 30089; const long UIA_IsLegacyIAccessiblePatternAvailablePropertyId = 30090; const long UIA_LegacyIAccessibleChildIdPropertyId = 30091; const long UIA_LegacyIAccessibleNamePropertyId = 30092; const long UIA_LegacyIAccessibleValuePropertyId = 30093; const long UIA_LegacyIAccessibleDescriptionPropertyId = 30094; const long UIA_LegacyIAccessibleRolePropertyId = 30095; const long UIA_LegacyIAccessibleStatePropertyId = 30096; const long UIA_LegacyIAccessibleHelpPropertyId = 30097; const long UIA_LegacyIAccessibleKeyboardShortcutPropertyId = 30098; const long UIA_LegacyIAccessibleSelectionPropertyId = 30099; const long UIA_LegacyIAccessibleDefaultActionPropertyId = 30100; const long UIA_AriaRolePropertyId = 30101; const long UIA_AriaPropertiesPropertyId = 30102; const long UIA_IsDataValidForFormPropertyId = 30103; const long UIA_ControllerForPropertyId = 30104; const long UIA_DescribedByPropertyId = 30105; const long UIA_FlowsToPropertyId = 30106; const long UIA_ProviderDescriptionPropertyId = 30107; const long UIA_IsItemContainerPatternAvailablePropertyId = 30108; const long UIA_IsVirtualizedItemPatternAvailablePropertyId = 30109; const long UIA_IsSynchronizedInputPatternAvailablePropertyId = 30110; /* } */ } ================================================ FILE: wine/windows/uiautomationcore.idl ================================================ /* * Copyright 2012 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define DO_NO_IMPORTS import "oaidl.idl"; import "oleacc.idl"; enum ProviderOptions { ProviderOptions_ClientSideProvider = 0x0001, ProviderOptions_ServerSideProvider = 0x0002, ProviderOptions_NonClientAreaProvider = 0x0004, ProviderOptions_OverrideProvider = 0x0008, ProviderOptions_ProviderOwnsSetFocus = 0x0010, ProviderOptions_UseComThreading = 0x0020 }; typedef int PROPERTYID; typedef int PATTERNID; typedef int EVENTID; typedef int TEXTATTRIBUTEID; typedef int CONTROLTYPEID; [ version(1.0), uuid(930299ce-9965-4dec-b0f4-a54848d4b667), lcid(0), hidden ] library UIA { importlib("stdole2.tlb"); [ object, uuid(d6dd68d1-86fd-4332-8666-9abedea2d24c), pointer_default(unique) ] interface IRawElementProviderSimple : IUnknown { [propget] HRESULT ProviderOptions([out, retval] enum ProviderOptions *pRetVal); HRESULT GetPatternProvider( [in] PATTERNID patternId, [out, retval] IUnknown **pRetVal); HRESULT GetPropertyValue( [in] PROPERTYID propertyId, [out, retval] VARIANT *pRetVal); [propget] HRESULT HostRawElementProvider([out, retval] IRawElementProviderSimple **pRetVal); } [ object, uuid(f8b80ada-2c44-48d0-89be-5ff23c9cd875), pointer_default(unique), oleautomation ] interface IAccessibleEx : IUnknown { HRESULT GetObjectForChild( [in] long idChild, [out, retval] IAccessibleEx **pRetVal); HRESULT GetIAccessiblePair( [out] IAccessible **ppAcc, [out] long *pidChild); HRESULT GetRuntimeId( [out, retval] SAFEARRAY(int) *pRetVal); HRESULT ConvertReturnedElement( [in] IRawElementProviderSimple *pIn, [out] IAccessibleEx **ppRetValOut); } } ================================================ FILE: wine/windows/uiautomationcoreapi.h ================================================ /* * Copyright 2012 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _INC_UIAUTOMATIONCOREAPI #define _INC_UIAUTOMATIONCOREAPI #ifdef __cplusplus extern "C" { #endif #define UIA_E_ELEMENTNOTENABLED 0x80040200 #define UIA_E_ELEMENTNOTAVAILABLE 0x80040201 #define UIA_E_NOCLICKABLEPOINT 0x80040202 #define UIA_E_PROXYASSEMBLYNOTLOADED 0x80040203 #define UIA_E_NOTSUPPORTED 0x80040204 #define UIA_E_INVALIDOPERATION 0x80131509 #define UIA_E_TIMEOUT 0x80131505 #define UiaAppendRuntimeId 3 #define UiaRootObjectId -25 DECLARE_HANDLE(HUIANODE); DECLARE_HANDLE(HUIAPATTERNOBJECT); DECLARE_HANDLE(HUIATEXTRANGE); DECLARE_HANDLE(HUIAEVENT); enum AutomationIdentifierType { AutomationIdentifierType_Property, AutomationIdentifierType_Pattern, AutomationIdentifierType_Event, AutomationIdentifierType_ControlType, AutomationIdentifierType_TextAttribute, AutomationIdentifierType_LandmarkType, AutomationIdentifierType_Annotation, AutomationIdentifierType_Changes, AutomationIdentifierType_Style }; HRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value); HRESULT WINAPI UiaGetReservedNotSupportedValue(IUnknown **value); int WINAPI UiaLookupId(enum AutomationIdentifierType type, const GUID *guid); BOOL WINAPI UiaPatternRelease(HUIAPATTERNOBJECT hobj); HRESULT WINAPI UiaRaiseAutomationEvent(IRawElementProviderSimple *provider, EVENTID id); LRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wParam, LPARAM lParam, IRawElementProviderSimple *elprov); BOOL WINAPI UiaTextRangeRelease(HUIATEXTRANGE hobj); #ifdef __cplusplus } #endif #endif /* _INC_UIAUTOMATIONCOREAPI */ ================================================ FILE: wine/windows/uiribbon.idl ================================================ /* * COM Classes for uiribbon * * Copyright 2017 Fabian Maurer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "propsys.idl"; #ifndef __WIDL__ #define threading(model) #endif typedef enum UI_INVALIDATIONS { UI_INVALIDATIONS_STATE = 0x00000001, UI_INVALIDATIONS_VALUE = 0x00000002, UI_INVALIDATIONS_PROPERTY = 0x00000004, UI_INVALIDATIONS_ALLPROPERTIES = 0x00000008, } UI_INVALIDATIONS; typedef enum UI_EXECUTIONVERB { UI_EXECUTIONVERB_EXECUTE, UI_EXECUTIONVERB_PREVIEW, UI_EXECUTIONVERB_CANCELPREVIEW, } UI_EXECUTIONVERB; typedef enum UI_VIEWTYPE { UI_VIEWTYPE_RIBBON = 1 } UI_VIEWTYPE; typedef enum UI_VIEWVERB { UI_VIEWVERB_CREATE, UI_VIEWVERB_DESTROY, UI_VIEWVERB_SIZE, UI_VIEWVERB_ERROR, } UI_VIEWVERB; typedef enum UI_COMMANDTYPE { UI_COMMANDTYPE_UNKNOWN, UI_COMMANDTYPE_GROUP, UI_COMMANDTYPE_ACTION, UI_COMMANDTYPE_ANCHOR, UI_COMMANDTYPE_CONTEXT, UI_COMMANDTYPE_COLLECTION, UI_COMMANDTYPE_COMMANDCOLLECTION, UI_COMMANDTYPE_DECIMAL, UI_COMMANDTYPE_BOOLEAN, UI_COMMANDTYPE_FONT, UI_COMMANDTYPE_RECENTITEMS, UI_COMMANDTYPE_COLORANCHOR, UI_COMMANDTYPE_COLORCOLLECTION, } UI_COMMANDTYPE; typedef [v1_enum] enum UI_OWNERSHIP { UI_OWNERSHIP_TRANSFER = 0, UI_OWNERSHIP_COPY = 1, } UI_OWNERSHIP; typedef [v1_enum] enum UI_COLLECTIONCHANGE { UI_COLLECTIONCHANGE_INSERT = 0, UI_COLLECTIONCHANGE_REMOVE = 1, UI_COLLECTIONCHANGE_REPLACE = 2, UI_COLLECTIONCHANGE_RESET = 3 } UI_COLLECTIONCHANGE; [ object, uuid(c205bb48-5b1c-4219-a106-15bd0a5f24e2), local, pointer_default(unique) ] interface IUISimplePropertySet : IUnknown { HRESULT GetValue( [in] REFPROPERTYKEY key, [out] PROPVARIANT *value ); } [ object, uuid(75ae0a2d-dc03-4c9f-8883-069660d0beb6), local, pointer_default(unique) ] interface IUICommandHandler : IUnknown { HRESULT Execute( [in] UINT32 commandId, [in] UI_EXECUTIONVERB verb, [in] const PROPERTYKEY *key, [in] const PROPVARIANT *currentValue, [in] IUISimplePropertySet *commandExecutionProperties ); HRESULT UpdateProperty( [in] UINT32 commandId, [in] REFPROPERTYKEY key, [in] const PROPVARIANT *currentValue, [out] PROPVARIANT *newValue ); } [ object, uuid(d428903c-729a-491d-910d-682a08ff2522), local, pointer_default(unique) ] interface IUIApplication : IUnknown { HRESULT OnViewChanged( [in] UINT32 viewId, [in] UI_VIEWTYPE typeID, [in] IUnknown *view, [in] UI_VIEWVERB verb, [in] INT32 uReasonCode ); HRESULT OnCreateUICommand( [in] UINT32 commandId, [in] UI_COMMANDTYPE typeID, [out] IUICommandHandler **commandHandler ); HRESULT OnDestroyUICommand( [in] UINT32 commandId, [in] UI_COMMANDTYPE typeID, [in] IUICommandHandler *commandHandler ); } [ object, uuid(f4f0385d-6872-43a8-ad09-4c339cb3f5c5), local, pointer_default(unique) ] interface IUIFramework : IUnknown { HRESULT Initialize( [in] HWND frameWnd, [in] IUIApplication *application ); HRESULT Destroy( ); HRESULT LoadUI( [in] HINSTANCE instance, [in] LPCWSTR resourceName ); HRESULT GetView( [in] UINT32 viewId, [in] REFIID riid, [out] void **ppv ); HRESULT GetUICommandProperty( [in] UINT32 commandId, [in] REFPROPERTYKEY key, [out] PROPVARIANT *value ); HRESULT SetUICommandProperty( [in] UINT32 commandId, [in] REFPROPERTYKEY key, [in] PROPVARIANT value ); HRESULT InvalidateUICommand( [in] UINT32 commandId, [in] UI_INVALIDATIONS flags, [in] const PROPERTYKEY *key ); HRESULT FlushPendingInvalidations( ); HRESULT SetModes( INT32 iModes ); } [ object, uuid(23c8c838-4de6-436b-ab01-5554bb7c30dd), local, pointer_default(unique) ] interface IUIImage : IUnknown { HRESULT GetBitmap( [out] HBITMAP *bitmap ); } [ object, uuid(803982ab-370a-4f7e-a9e7-8784036a6e26), local, pointer_default(unique) ] interface IUIRibbon : IUnknown { HRESULT GetHeight( [out] UINT32 *cy ); HRESULT LoadSettingsFromStream( [in] IStream *pStream ); HRESULT SaveSettingsToStream( [in] IStream *pStream ); } [ object, uuid(df4f45bf-6f9d-4dd7-9d68-d8f9cd18c4db), local, pointer_default(unique) ] interface IUICollection : IUnknown { HRESULT GetCount( [out] UINT32 *count ); HRESULT GetItem( [in] UINT32 index, [out] IUnknown **item ); HRESULT Add( [in] IUnknown *item ); HRESULT Insert( [in] UINT32 index, [in] IUnknown *item ); HRESULT RemoveAt( [in] UINT32 index ); HRESULT Replace( [in] UINT32 indexReplaced, [in] IUnknown *itemReplaceWith ); HRESULT Clear(); } [ object, uuid(eea11f37-7c46-437c-8e55-b52122b29293), local, pointer_default(unique) ] interface IUIContextualUI : IUnknown { HRESULT ShowAtLocation( [in] INT32 x, [in] INT32 y ); } [ object, uuid(6502ae91-a14d-44b5-bbd0-62aacc581d52), local, pointer_default(unique) ] interface IUICollectionChangedEvent : IUnknown { HRESULT OnChanged( [in] UI_COLLECTIONCHANGE action, [in] UINT32 oldIndex, [in] IUnknown *oldItem, [in] UINT32 newIndex, [in] IUnknown *newItem ); } [ object, uuid(18aba7f3-4c1c-4ba2-bf6c-f5c3326fa816), local, pointer_default(unique) ] interface IUIImageFromBitmap : IUnknown { HRESULT CreateImage( [in] HBITMAP bitmap, [in] UI_OWNERSHIP options, [out] IUIImage **image ); } [ helpstring("UIRibbonFramework Object"), threading(apartment), uuid(926749fa-2615-4987-8845-c33e65f2b957) ] coclass UIRibbonFramework { interface IUIFramework; } [ threading(apartment), uuid(0f7434b6-59b6-4250-999e-d168d6ae4293) ] coclass UIRibbonImageFromBitmapFactory { interface IUIImageFromBitmap; } ================================================ FILE: wine/windows/unknwn.idl ================================================ /* * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef DO_NO_IMPORTS import "wtypes.idl"; #endif cpp_quote("#ifdef __WINESRC__") cpp_quote("#define WIDL_C_INLINE_WRAPPERS") cpp_quote("#endif") cpp_quote("#ifdef WIDL_C_INLINE_WRAPPERS") cpp_quote("#define SAVE_WIDL_C_INLINE_WRAPPERS") cpp_quote("#undef WIDL_C_INLINE_WRAPPERS") cpp_quote("#endif") [ local, object, uuid(00000000-0000-0000-C000-000000000046), pointer_default(unique) ] interface IUnknown { typedef [unique] IUnknown *LPUNKNOWN; HRESULT QueryInterface( [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); ULONG AddRef(); ULONG Release(); } cpp_quote("HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy(IUnknown* This, REFIID riid, void **ppvObject);") cpp_quote("void __RPC_STUB IUnknown_QueryInterface_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,") cpp_quote(" PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);") cpp_quote("ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy(IUnknown* This);") cpp_quote("void __RPC_STUB IUnknown_AddRef_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,") cpp_quote(" PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);") cpp_quote("ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy(IUnknown* This);") cpp_quote("void __RPC_STUB IUnknown_Release_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,") cpp_quote(" PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);") cpp_quote("#ifdef SAVE_WIDL_C_INLINE_WRAPPERS") cpp_quote("#define WIDL_C_INLINE_WRAPPERS") cpp_quote("#endif") [ object, uuid(00000001-0000-0000-C000-000000000046), pointer_default(unique) ] interface IClassFactory : IUnknown { typedef [unique] IClassFactory *LPCLASSFACTORY; [local] HRESULT CreateInstance( [in, unique] IUnknown *pUnkOuter, [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); [call_as(CreateInstance)] HRESULT RemoteCreateInstance( [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObject); [local] HRESULT LockServer( [in] BOOL fLock); [call_as(LockServer)] HRESULT RemoteLockServer( [in] BOOL fLock); } ================================================ FILE: wine/windows/urlhist.idl ================================================ /* * Copyright 2006 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; import "oaidl.idl"; import "docobj.idl"; cpp_quote("#define STATURL_QUERYFLAG_ISCACHED 0x010000") cpp_quote("#define STATURL_QUERYFLAG_NOURL 0x020000") cpp_quote("#define STATURL_QUERYFLAG_NOTITLE 0x040000") cpp_quote("#define STATURL_QUERYFLAG_TOPLEVEL 0x080000") cpp_quote("#define STATURLFLAG_ISCACHED 0x0001") cpp_quote("#define STATURLFLAG_ISTOPLEVEL 0x0002") typedef enum _ADDURL_FLAG { ADDURL_FIRST = 0, ADDURL_ADDTOHISTORYANDCACHE = 0, ADDURL_ADDTOCACHE = 1, ADDURL_Max = 0x7fffffff } ADDURL_FLAG; /***************************************************************************** * IEnumSTATURL interface */ [ object, uuid(3c374a42-bae4-11cf-bf7d-00aa006946ee), pointer_default(unique) ] interface IEnumSTATURL : IUnknown { typedef [unique] IEnumSTATURL *LPENUMSTATURL; typedef struct _STATURL { DWORD cbSize; LPWSTR pwcsUrl; LPWSTR pwcsTitle; FILETIME ftLastVisited; FILETIME ftLastUpdated; FILETIME ftExpires; DWORD dwFlags; } STATURL, *LPSTATURL; HRESULT Next( [in] ULONG celt, [in, out] LPSTATURL rgelt, [in, out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumSTATURL **ppenum); HRESULT SetFilter( [in] LPCOLESTR poszFilter, [in] DWORD dwFlags); } /***************************************************************************** * IUrlHistoryStg interface */ [ object, uuid(3c374a41-bae4-11cf-bf7d-00aa006946ee), pointer_default(unique) ] interface IUrlHistoryStg : IUnknown { typedef [unique] IUrlHistoryStg *LPURLHISTORYSTG; HRESULT AddUrl( [in] LPCOLESTR pocsUrl, [in, unique] LPCOLESTR pocsTitle, [in] DWORD dwFlags); HRESULT DeleteUrl( [in] LPCOLESTR pocsUrl, [in] DWORD dwFlags); HRESULT QueryUrl( [in] LPCOLESTR pocsUrl, [in] DWORD dwFlags, [in, out, unique] LPSTATURL lpSTATURL); HRESULT BindToObject( [in] LPCOLESTR pocsUrl, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut); HRESULT EnumUrls( [out] IEnumSTATURL **ppEnum); } /***************************************************************************** * IUrlHistoryStg2 interface */ [ object, uuid(afa0dc11-c313-11d0-831a-00c04fd5ae38), pointer_default(unique) ] interface IUrlHistoryStg2 : IUrlHistoryStg { typedef [unique] IUrlHistoryStg2 *LPURLHISTORYSTG2; HRESULT AddUrlAndNotify( [in] LPCOLESTR pocsUrl, [in,unique] LPCOLESTR pocsTitle, [in] DWORD dwFlags, [in] BOOL fWriteHistory, [in] IOleCommandTarget *poctNotify, [in, unique] IUnknown *punkISFolder); HRESULT ClearHistory(); } /***************************************************************************** * IUrlHistoryNotify interface */ [ object, uuid(bc40bec1-c493-11d0-831b-00C04fd5ae38), pointer_default(unique) ] interface IUrlHistoryNotify : IOleCommandTarget { typedef [unique] IUrlHistoryNotify *LPURLHISTORYNOTIFY; } ================================================ FILE: wine/windows/urlmon.idl ================================================ /* * Copyright (C) 2000 Ulrich Czekalla * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; import "servprov.idl"; import "msxml.idl"; cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetUserName") cpp_quote("#undef SetPort") cpp_quote("#endif") interface IInternetProtocolSink; interface IUri; /***************************************************************************** * IInternet interface */ [ object, uuid(79eac9e0-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique), local ] interface IInternet : IUnknown { typedef [unique] IInternet *LPIINTERNET; } /***************************************************************************** * IBinding interface */ [ object, uuid(79eac9c0-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IBinding : IUnknown { typedef [unique] IBinding *LPBINDING; HRESULT Abort(); HRESULT Suspend(); HRESULT Resume(); HRESULT SetPriority( [in] LONG nPriority); HRESULT GetPriority( [out] LONG * pnPriority); [local] HRESULT GetBindResult( [out] CLSID *pclsidProtocol, [out] DWORD *pdwResult, [out] LPOLESTR *pszResult, [in, out] DWORD *pdwReserved); [call_as(GetBindResult)] HRESULT RemoteGetBindResult( [out] CLSID *pclsidProtocol, [out] DWORD *pdwResult, [out] LPOLESTR *pszResult, [in] DWORD dwReserved); } /***************************************************************************** * IBindStatusCallback interface */ [ object, uuid(79eac9c1-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IBindStatusCallback : IUnknown { typedef [unique] IBindStatusCallback *LPBINDSTATUSCALLBACK; typedef enum { BINDVERB_GET = 0x00000000, BINDVERB_POST = 0x00000001, BINDVERB_PUT = 0x00000002, BINDVERB_CUSTOM = 0x00000003 } BINDVERB; typedef enum { BINDINFOF_URLENCODESTGMEDDATA = 0x00000001, BINDINFOF_URLENCODEDEXTRAINFO = 0x00000002 } BINDINFOF; typedef enum { BINDF_ASYNCHRONOUS = 0x00000001, BINDF_ASYNCSTORAGE = 0x00000002, BINDF_NOPROGRESSIVERENDERING = 0x00000004, BINDF_OFFLINEOPERATION = 0x00000008, BINDF_GETNEWESTVERSION = 0x00000010, BINDF_NOWRITECACHE = 0x00000020, BINDF_NEEDFILE = 0x00000040, BINDF_PULLDATA = 0x00000080, BINDF_IGNORESECURITYPROBLEM = 0x00000100, BINDF_RESYNCHRONIZE = 0x00000200, BINDF_HYPERLINK = 0x00000400, BINDF_NO_UI = 0x00000800, BINDF_SILENTOPERATION = 0x00001000, BINDF_PRAGMA_NO_CACHE = 0x00002000, BINDF_GETCLASSOBJECT = 0x00004000, BINDF_RESERVED_1 = 0x00008000, BINDF_FREE_THREADED = 0x00010000, BINDF_DIRECT_READ = 0x00020000, BINDF_FORMS_SUBMIT = 0x00040000, BINDF_GETFROMCACHE_IF_NET_FAIL = 0x00080000, BINDF_FROMURLMON = 0x00100000, BINDF_FWD_BACK = 0x00200000, BINDF_PREFERDEFAULTHANDLER = 0x00400000, BINDF_ENFORCERESTRICTED = 0x00800000 } BINDF; typedef enum { URL_ENCODING_NONE = 0x00000000, URL_ENCODING_ENABLE_UTF8 = 0x10000000, URL_ENCODING_DISABLE_UTF8 = 0x20000000 } URL_ENCODING; typedef struct _tagBINDINFO { ULONG cbSize; LPWSTR szExtraInfo; STGMEDIUM stgmedData; DWORD grfBindInfoF; DWORD dwBindVerb; LPWSTR szCustomVerb; DWORD cbstgmedData; DWORD dwOptions; DWORD dwOptionsFlags; DWORD dwCodePage; SECURITY_ATTRIBUTES securityAttributes; IID iid; IUnknown *pUnk; DWORD dwReserved; } BINDINFO; typedef struct _REMSECURITY_ATTRIBUTES { DWORD nLength; DWORD lpSecurityDescriptor; BOOL bInheritHandle; } REMSECURITY_ATTRIBUTES, *PREMSECURITY_ATTRIBUTES, *LPREMSECURITY_ATTRIBUTES; typedef struct _tagRemBINDINFO { ULONG cbSize; LPWSTR szExtraInfo; DWORD grfBindInfoF; DWORD dwBindVerb; LPWSTR szCustomVerb; DWORD cbstgmedData; DWORD dwOptions; DWORD dwOptionsFlags; DWORD dwCodePage; REMSECURITY_ATTRIBUTES securityAttributes; IID iid; IUnknown *pUnk; DWORD dwReserved; } RemBINDINFO; typedef struct tagRemFORMATETC { DWORD cfFormat; DWORD ptd; DWORD dwAspect; LONG lindex; DWORD tymed; } RemFORMATETC, *LPREMFORMATETC; typedef enum { BINDINFO_OPTIONS_WININETFLAG = 0x00010000, BINDINFO_OPTIONS_ENABLE_UTF8 = 0x00020000, BINDINFO_OPTIONS_DISABLE_UTF8 = 0x00040000, BINDINFO_OPTIONS_USE_IE_ENCODING = 0x00080000, BINDINFO_OPTIONS_BINDTOOBJECT = 0x00100000, BINDINFO_OPTIONS_SECURITYOPTOUT = 0x00200000, BINDINFO_OPTIONS_IGNOREMIMETEXTPLAIN = 0x00400000, BINDINFO_OPTIONS_USEBINDSTRINGCREDS = 0x00800000, BINDINFO_OPTIONS_IGNOREHTTPHTTPSREDIRECTS = 0x01000000, BINDINFO_OPTIONS_IGNORE_SSLERRORS_ONCE = 0x02000000, BINDINFO_WPC_DOWNLOADBLOCKED = 0x08000000, BINDINFO_WPC_LOGGING_ENABLED = 0x10000000, BINDINFO_OPTIONS_ALLOWCONNECTDATA = 0x20000000, BINDINFO_OPTIONS_DISABLEAUTOREDIRECTS = 0x40000000, BINDINFO_OPTIONS_SHDOCVW_NAVIGATE = (int)0x80000000 } BINDINFO_OPTIONS; typedef enum { BSCF_FIRSTDATANOTIFICATION = 0x01, BSCF_INTERMEDIATEDATANOTIFICATION = 0x02, BSCF_LASTDATANOTIFICATION = 0x04, BSCF_DATAFULLYAVAILABLE = 0x08, BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10, BSCF_SKIPDRAINDATAFORFILEURLS = 0x20, BSCF_64BITLENGTHDOWNLOAD = 0x40 } BSCF; typedef enum BINDSTATUS { BINDSTATUS_FINDINGRESOURCE = 1, BINDSTATUS_CONNECTING, BINDSTATUS_REDIRECTING, BINDSTATUS_BEGINDOWNLOADDATA, BINDSTATUS_DOWNLOADINGDATA, BINDSTATUS_ENDDOWNLOADDATA, BINDSTATUS_BEGINDOWNLOADCOMPONENTS, BINDSTATUS_INSTALLINGCOMPONENTS, BINDSTATUS_ENDDOWNLOADCOMPONENTS, BINDSTATUS_USINGCACHEDCOPY, BINDSTATUS_SENDINGREQUEST, BINDSTATUS_CLASSIDAVAILABLE, BINDSTATUS_MIMETYPEAVAILABLE, BINDSTATUS_CACHEFILENAMEAVAILABLE, BINDSTATUS_BEGINSYNCOPERATION, BINDSTATUS_ENDSYNCOPERATION, BINDSTATUS_BEGINUPLOADDATA, BINDSTATUS_UPLOADINGDATA, BINDSTATUS_ENDUPLOADINGDATA, BINDSTATUS_PROTOCOLCLASSID, BINDSTATUS_ENCODING, BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, BINDSTATUS_CLASSINSTALLLOCATION, BINDSTATUS_DECODING, BINDSTATUS_LOADINGMIMEHANDLER, BINDSTATUS_CONTENTDISPOSITIONATTACH, BINDSTATUS_FILTERREPORTMIMETYPE, BINDSTATUS_CLSIDCANINSTANTIATE, BINDSTATUS_IUNKNOWNAVAILABLE, BINDSTATUS_DIRECTBIND, BINDSTATUS_RAWMIMETYPE, BINDSTATUS_PROXYDETECTING, BINDSTATUS_ACCEPTRANGES, BINDSTATUS_COOKIE_SENT, BINDSTATUS_COMPACT_POLICY_RECEIVED, BINDSTATUS_COOKIE_SUPPRESSED, BINDSTATUS_COOKIE_STATE_UNKNOWN, BINDSTATUS_COOKIE_STATE_ACCEPT, BINDSTATUS_COOKIE_STATE_REJECT, BINDSTATUS_COOKIE_STATE_PROMPT, BINDSTATUS_COOKIE_STATE_LEASH, BINDSTATUS_COOKIE_STATE_DOWNGRADE, BINDSTATUS_POLICY_HREF, BINDSTATUS_P3P_HEADER, BINDSTATUS_SESSION_COOKIE_RECEIVED, BINDSTATUS_PERSISTENT_COOKIE_RECEIVED, BINDSTATUS_SESSION_COOKIES_ALLOWED, BINDSTATUS_CACHECONTROL, BINDSTATUS_CONTENTDISPOSITIONFILENAME, BINDSTATUS_MIMETEXTPLAINMISMATCH, BINDSTATUS_PUBLISHERAVAILABLE, BINDSTATUS_DISPLAYNAMEAVAILABLE, BINDSTATUS_SSLUX_NAVBLOCKED, BINDSTATUS_SERVER_MIMETYPEAVAILABLE, BINDSTATUS_SNIFFED_CLASSIDAVAILABLE, BINDSTATUS_64BIT_PROGRESS, BINDSTATUS_LAST = BINDSTATUS_64BIT_PROGRESS, BINDSTATUS_RESERVED_0 = (BINDSTATUS_LAST+1), BINDSTATUS_RESERVED_1 = (BINDSTATUS_RESERVED_0+1), BINDSTATUS_RESERVED_2 = (BINDSTATUS_RESERVED_1+1), BINDSTATUS_RESERVED_3 = (BINDSTATUS_RESERVED_2+1), BINDSTATUS_RESERVED_4 = (BINDSTATUS_RESERVED_3+1), BINDSTATUS_RESERVED_5 = (BINDSTATUS_RESERVED_4+1), BINDSTATUS_RESERVED_6 = (BINDSTATUS_RESERVED_5+1), BINDSTATUS_RESERVED_7 = (BINDSTATUS_RESERVED_6+1), BINDSTATUS_RESERVED_8 = (BINDSTATUS_RESERVED_7+1), BINDSTATUS_RESERVED_9 = (BINDSTATUS_RESERVED_8+1), BINDSTATUS_LAST_PRIVATE = BINDSTATUS_RESERVED_9 } BINDSTATUS; HRESULT OnStartBinding( [in] DWORD dwReserved, [in] IBinding * pib); HRESULT GetPriority( [out] LONG * pnPriority); HRESULT OnLowResource( [in] DWORD reserved); HRESULT OnProgress( [in] ULONG ulProgress, [in] ULONG ulProgressMax, [in] ULONG ulStatusCode, [in, unique] LPCWSTR szStatusText); HRESULT OnStopBinding( [in] HRESULT hresult, [in, unique] LPCWSTR szError); [local] HRESULT GetBindInfo( [out] DWORD *grfBINDF, [in, out, unique] BINDINFO * pbindinfo); [call_as(GetBindInfo)] HRESULT RemoteGetBindInfo( [out] DWORD *grfBINDF, [in, out, unique] RemBINDINFO * pbindinfo, [in, out, unique] RemSTGMEDIUM* pstgmed); [local] HRESULT OnDataAvailable( [in] DWORD grfBSCF, [in] DWORD dwSize, [in] FORMATETC* pformatetc, [in] STGMEDIUM* pstgmed); [call_as(OnDataAvailable)] HRESULT RemoteOnDataAvailable( [in] DWORD grfBSCF, [in] DWORD dwSize, [in] RemFORMATETC *pformatetc, [in] RemSTGMEDIUM* pstgmed); HRESULT OnObjectAvailable( [in] REFIID riid, [in, iid_is(riid)] IUnknown* punk); } /***************************************************************************** * IBindStatusCallbackEx interface */ [ object, uuid(aaa74ef9-8ee7-4659-88d9-f8c504da73cc), pointer_default(unique) ] interface IBindStatusCallbackEx : IBindStatusCallback { typedef [unique] IBindStatusCallbackEx *LPBINDSTATUSCALLBACKEX; typedef enum { BINDF2_DISABLEBASICOVERHTTP = 0x00000001, BINDF2_DISABLEAUTOCOOKIEHANDLING = 0x00000002, BINDF2_READ_DATA_GREATER_THAN_4GB = 0x00000004, BINDF2_DISABLE_HTTP_REDIRECT_XSECURITYID = 0x00000008, BINDF2_RESERVED_3 = 0x20000000, BINDF2_RESERVED_2 = 0x40000000, BINDF2_RESERVED_1 = 0x80000000, } BINDF2; [local] HRESULT GetBindInfoEx( [out] DWORD *grfBINDF, [in, out, unique] BINDINFO *pbindinfo, [out] DWORD *grfBINDF2, [out] DWORD *pdwReserved); [call_as(GetBindInfoEx)] HRESULT RemoteGetBindInfoEx( [out] DWORD *grfBINDF, [in, out, unique] RemBINDINFO *pbindinfo, [in, out, unique] RemSTGMEDIUM *pstgmed, [out] DWORD *grfBINDF2, [out] DWORD *pdwReserved); } /***************************************************************************** * IAuthenticate interface */ [ object, uuid(79EAC9D0-BAf9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IAuthenticate : IUnknown { typedef [unique] IAuthenticate *LPAUTHENTICATION; HRESULT Authenticate( [out] HWND* phwnd, [out] LPWSTR *pszUsername, [out] LPWSTR *pszPassword); } /***************************************************************************** * IHttpNegotiate interface */ [ object, uuid(79EAC9D2-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IHttpNegotiate : IUnknown { typedef [unique] IHttpNegotiate *LPHTTPNEGOTIATE; HRESULT BeginningTransaction( [in] LPCWSTR szURL, [in, unique] LPCWSTR szHeaders, [in] DWORD dwReserved, [out] LPWSTR *pszAdditionalHeaders); HRESULT OnResponse( [in] DWORD dwResponseCode, [in, unique] LPCWSTR szResponseHeaders, [in, unique] LPCWSTR szRequestHeaders, [out] LPWSTR *pszAdditionalRequestHeaders); } /***************************************************************************** * IHttpNegotiate2 interface */ [ object, uuid(4F9F9FCB-E0F4-48eb-B7AB-FA2EA9365CB4), pointer_default(unique) ] interface IHttpNegotiate2 : IHttpNegotiate { typedef [unique] IHttpNegotiate2 *LPHTTPNEGOTIATE2; HRESULT GetRootSecurityId( [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId, [in, out] DWORD *pcbSecurityId, [in] DWORD_PTR dwReserved); } /***************************************************************************** * IBindHost interface */ cpp_quote("#define SID_IBindHost IID_IBindHost") cpp_quote("#define SID_SBindHost IID_IBindHost") [ object, uuid(fc4801a1-2ba9-11cf-a229-00aa003d7352), pointer_default(unique) ] interface IBindHost : IUnknown { typedef [unique] IBindHost *LPBINDHOST; HRESULT CreateMoniker( [in] LPOLESTR szName, [in] IBindCtx *pBC, [out] IMoniker** ppmk, [in] DWORD dwReserved); [local] HRESULT MonikerBindToStorage( [in] IMoniker *pMk, [in] IBindCtx *pBC, [in] IBindStatusCallback *pBSC, [in] REFIID riid, [out] void **ppvObj); [call_as(MonikerBindToStorage)] HRESULT RemoteMonikerBindToStorage( [in, unique] IMoniker *pMk, [in, unique] IBindCtx *pBC, [in, unique] IBindStatusCallback *pBSC, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObj); [local] HRESULT MonikerBindToObject( [in] IMoniker *pMk, [in] IBindCtx *pBC, [in] IBindStatusCallback *pBSC, [in] REFIID riid, [out] void **ppvObj); [call_as(MonikerBindToObject)] HRESULT RemoteMonikerBindToObject( [in, unique] IMoniker *pMk, [in, unique] IBindCtx *pBC, [in, unique] IBindStatusCallback *pBSC, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObj); } /***************************************************************************** * IWinInetInfo interface */ [ object, uuid(79eac9d6-bafa-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IWinInetInfo : IUnknown { typedef [unique] IWinInetInfo *LPWININETINFO; [local] HRESULT QueryOption( [in] DWORD dwOption, [in, out, size_is(*pcbBuf)] LPVOID pBuffer, [in, out] DWORD *pcbBuf); [call_as(QueryOption)] HRESULT RemoteQueryOption( [in] DWORD dwOption, [in, out, size_is(*pcbBuf)] BYTE *pBuffer, [in, out] DWORD *pcbBuf); } /***************************************************************************** * IWinInetHttpInfo interface */ [ object, uuid(79eac9d8-bafa-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IWinInetHttpInfo : IWinInetInfo { typedef [unique] IWinInetHttpInfo *LPWININETHTTPINFO; [local] HRESULT QueryInfo( [in] DWORD dwOption, [in, out,size_is(*pcbBuf)] LPVOID pBuffer, [in, out] DWORD *pcbBuf, [in, out] DWORD *pdwFlags, [in, out] DWORD *pdwReserved); [call_as(QueryInfo)] HRESULT RemoteQueryInfo( [in] DWORD dwOption, [in,out,size_is(*pcbBuf)] BYTE *pBuffer, [in, out] DWORD *pcbBuf, [in, out] DWORD *pdwFlags, [in, out] DWORD *pdwReserved); } /***************************************************************************** * IWinInetHttpTimeouts interface */ [ local, object, uuid(f286fa56-c1fd-4270-8e67-b3eb790a81e8), pointer_default(unique) ] interface IWinInetHttpTimeouts : IUnknown { HRESULT GetRequestTimeouts( [out] DWORD *connect_timeout, [out] DWORD *send_timeout, [out] DWORD *receive_timeout); } /***************************************************************************** * IWindowForBindingUI interface */ [ local, object, uuid(79eac9d5-bafa-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IWindowForBindingUI : IUnknown { typedef [unique] IWindowForBindingUI *LPWINDOWFORBINDINGUI; HRESULT GetWindow( [in] REFGUID rguidReason, [out] HWND *phwnd); } /***************************************************************************** * ICodeInstall interface */ [ local, object, uuid(79eac9d1-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface ICodeInstall : IWindowForBindingUI { typedef [unique] ICodeInstall *LPCODEINSTALL; typedef enum { CIP_DISK_FULL, CIP_ACCESS_DENIED, CIP_NEWER_VERSION_EXISTS, CIP_OLDER_VERSION_EXISTS, CIP_NAME_CONFLICT, CIP_TRUST_VERIFICATION_COMPONENT_MISSING, CIP_EXE_SELF_REGISTERATION_TIMEOUT, CIP_UNSAFE_TO_ABORT, CIP_NEED_REBOOT, CIP_NEED_REBOOT_UI_PERMISSION } CIP_STATUS; HRESULT OnCodeInstallProblem( [in] ULONG ulStatusCode, [in, unique] LPCWSTR szDestination, [in, unique] LPCWSTR szSource, [in] DWORD dwReserved); } /***************************************************************************** * IHttpSecurity interface */ [ local, object, uuid(79eac9d7-bafa-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IHttpSecurity : IWindowForBindingUI { typedef [unique] IHttpSecurity *LPHTTPSECURITY; HRESULT OnSecurityProblem( [in] DWORD dwProblem); } /***************************************************************************** * IPersistMoniker interface */ [ object, uuid(79eac9c9-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IPersistMoniker : IUnknown { typedef [unique] IPersistMoniker *LPPERSISTMONIKER; HRESULT GetClassID( [out] CLSID *pClassID); HRESULT IsDirty(); HRESULT Load( [in] BOOL fFullyAvailable, [in] IMoniker *pimkName, [in] LPBC pibc, [in] DWORD grfMode); HRESULT Save( [in] IMoniker *pimkName, [in] LPBC pbc, [in] BOOL fRemember); HRESULT SaveCompleted( [in] IMoniker *pimkName, [in] LPBC pibc); HRESULT GetCurMoniker( [out] IMoniker **ppimkName); } /***************************************************************************** * IMonikerProp interface */ [ object, uuid(A5CA5F7F-1847-4D87-9C5B-918509F7511D), pointer_default(unique) ] interface IMonikerProp : IUnknown { typedef [unique] IMonikerProp *LPMONIKERPROP; typedef enum { MIMETYPEPROP = 0, USE_SRC_URL = 1, CLASSIDPROP = 2, TRUSTEDDOWNLOADPROP = 3, POPUPLEVELPROP = 4 } MONIKERPROPERTY; HRESULT PutProperty( [in] MONIKERPROPERTY mkp, [in] LPCWSTR val); } cpp_quote("#ifndef _LPBINDPROTOCOL_DEFINED") cpp_quote("#define _LPBINDPROTOCOL_DEFINED") /***************************************************************************** * IBindProtocol interface */ [ local, object, uuid(79EAC9CD-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IBindProtocol : IUnknown { typedef [unique] IBindProtocol *LPBINDPROTOCOL; HRESULT CreateBinding( [in] LPCWSTR szUrl, [in] IBindCtx *pbc, [out] IBinding **ppb); } cpp_quote("#endif /* !defined _LPBINDPROTOCOL_DEFINED */") /***************************************************************************** * IInternetBindInfo interface */ [ local, object, uuid(79EAC9E1-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IInternetBindInfo : IUnknown { typedef [unique] IInternetBindInfo *LPIINTERNETBINDINFO; typedef enum tagBINDSTRING { BINDSTRING_HEADERS = 1, BINDSTRING_ACCEPT_MIMES, BINDSTRING_EXTRA_URL, BINDSTRING_LANGUAGE, BINDSTRING_USERNAME, BINDSTRING_PASSWORD, BINDSTRING_UA_PIXELS, BINDSTRING_UA_COLOR, BINDSTRING_OS, BINDSTRING_USER_AGENT, BINDSTRING_ACCEPT_ENCODINGS, BINDSTRING_POST_COOKIE, BINDSTRING_POST_DATA_MIME, BINDSTRING_URL, BINDSTRING_IID, BINDSTRING_FLAG_BIND_TO_OBJECT, BINDSTRING_PTR_BIND_CONTEXT, BINDSTRING_XDR_ORIGIN, BINDSTRING_DOWNLOADPATH, BINDSTRING_ROOTDOC_URL, BINDSTRING_INITIAL_FILENAME, BINDSTRING_PROXY_USERNAME, BINDSTRING_PROXY_PASSWORD, BINDSTRING_ENTERPRISE_ID } BINDSTRING; HRESULT GetBindInfo( [out] DWORD *grfBINDF, [in, out, unique] BINDINFO *pbindinfo); HRESULT GetBindString( [in] ULONG ulStringType, [in, out] LPOLESTR *ppwzStr, [in] ULONG cEl, [in, out] ULONG *pcElFetched); } /***************************************************************************** * IInternetPriority interface */ [ local, object, uuid(79EAC9EB-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IInternetPriority : IUnknown { typedef [unique] IInternetPriority *LPIINTERNETPRIORITY; HRESULT SetPriority([in] LONG nPriority); HRESULT GetPriority([out] LONG *pnPriority); } /***************************************************************************** * IInternetProtocolRoot interface */ [ local, object, uuid(79EAC9E3-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IInternetProtocolRoot : IUnknown { typedef [unique] IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT; typedef enum _tagPI_FLAGS { PI_PARSE_URL = 0x00000001, PI_FILTER_MODE = 0x00000002, PI_FORCE_ASYNC = 0x00000004, PI_USE_WORKERTHREAD = 0x00000008, PI_MIMEVERIFICATION = 0x00000010, PI_CLSIDLOOKUP = 0x00000020, PI_DATAPROGRESS = 0x00000040, PI_SYNCHRONOUS = 0x00000080, PI_APARTMENTTHREADED = 0x00000100, PI_CLASSINSTALL = 0x00000200, PD_FORCE_SWITCH = 0x00010000 } PI_FLAGS; typedef struct _tagPROTOCOLDATA { DWORD grfFlags; DWORD dwState; LPVOID pData; ULONG cbData; } PROTOCOLDATA; HRESULT Start( [in] LPCWSTR szUrl, [in] IInternetProtocolSink *pOIProtSink, [in] IInternetBindInfo *pOIBindInfo, [in] DWORD grfPI, [in] HANDLE_PTR dwReserved); HRESULT Continue( [in] PROTOCOLDATA *pProtocolData); HRESULT Abort( [in] HRESULT hrReason, [in] DWORD dwOptions); HRESULT Terminate( [in] DWORD dwOptions); HRESULT Suspend(); HRESULT Resume(); } /***************************************************************************** * IInternetProtocolSink interface */ [ local, object, uuid(79EAC9E5-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IInternetProtocolSink : IUnknown { typedef [unique] IInternetProtocolSink *LPIINTERNETPROTOCOLSINK; HRESULT Switch( [in] PROTOCOLDATA *pProtocolData); HRESULT ReportProgress( [in] ULONG ulStatusCode, [in] LPCWSTR szStatusText); HRESULT ReportData( [in] DWORD grfBSCF, [in] ULONG ulProgress, [in] ULONG ulProgressMax); HRESULT ReportResult( [in] HRESULT hrResult, [in] DWORD dwError, [in] LPCWSTR szResult); } /***************************************************************************** * IInternetProtocol interface */ [ local, object, uuid(79EAC9E4-BAF9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IInternetProtocol : IInternetProtocolRoot { typedef [unique] IInternetProtocol *LPIINTERNETPROTOCOL; HRESULT Read( [in,out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead); HRESULT Seek( [in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] ULARGE_INTEGER *plibNewPosition); HRESULT LockRequest( [in] DWORD dwOptions); HRESULT UnlockRequest(); } /***************************************************************************** * IInternetProtocolInfo interface */ [ local, object, uuid(79eac9ec-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IInternetProtocolInfo : IUnknown { typedef [unique] IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO; typedef enum _tagPARSEACTION { PARSE_CANONICALIZE = 1, PARSE_FRIENDLY, PARSE_SECURITY_URL, PARSE_ROOTDOCUMENT, PARSE_DOCUMENT, PARSE_ANCHOR, PARSE_ENCODE, PARSE_DECODE, PARSE_PATH_FROM_URL, PARSE_URL_FROM_PATH, PARSE_MIME, PARSE_SERVER, PARSE_SCHEMA, PARSE_SITE, PARSE_DOMAIN, PARSE_LOCATION, PARSE_SECURITY_DOMAIN, PARSE_ESCAPE, PARSE_UNESCAPE } PARSEACTION; typedef enum _tagPSUACTION { PSU_DEFAULT = 1, PSU_SECURITY_URL_ONLY } PSUACTION; typedef enum _tagQUERYOPTION { QUERY_EXPIRATION_DATE = 1, QUERY_TIME_OF_LAST_CHANGE, QUERY_CONTENT_ENCODING, QUERY_CONTENT_TYPE, QUERY_REFRESH, QUERY_RECOMBINE, QUERY_CAN_NAVIGATE, QUERY_USES_NETWORK, QUERY_IS_CACHED, QUERY_IS_INSTALLEDENTRY, QUERY_IS_CACHED_OR_MAPPED, QUERY_USES_CACHE, QUERY_IS_SECURE, QUERY_IS_SAFE, QUERY_USES_HISTORYFOLDER, QUERY_IS_CACHED_AND_USABLE_OFFLINE } QUERYOPTION; HRESULT ParseUrl( [in] LPCWSTR pwzUrl, [in] PARSEACTION ParseAction, [in] DWORD dwParseFlags, [out] LPWSTR pwzResult, [in] DWORD cchResult, [out] DWORD *pcchResult, [in] DWORD dwReserved); HRESULT CombineUrl( [in] LPCWSTR pwzBaseUrl, [in] LPCWSTR pwzRelativeUrl, [in] DWORD dwCombineFlags, [out] LPWSTR pwzResult, [in] DWORD cchResult, [out] DWORD *pcchResult, [in] DWORD dwReserved); HRESULT CompareUrl( [in] LPCWSTR pwzUrl1, [in] LPCWSTR pwzUrl2, [in] DWORD dwCompareFlags); HRESULT QueryInfo( [in] LPCWSTR pwzUrl, [in] QUERYOPTION OueryOption, [in] DWORD dwQueryFlags, [in, out,size_is(*pcbBuf)] LPVOID pBuffer, [in] DWORD cbBuffer, [in, out] DWORD *pcbBuf, [in] DWORD dwReserved); } /***************************************************************************** * IInternetSession interface */ [ local, object, uuid(79eac9e7-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IInternetSession : IUnknown { typedef [unique] IInternetSession *LPIINTERNETSESSION; typedef enum _tagOIBDG_FLAGS { OIBDG_APARTMENTTHREADED = 0x0100, OIBDG_DATAONLY = 0x1000 } OIBDG_FLAGS; HRESULT RegisterNameSpace( [in] IClassFactory *pCF, [in] REFCLSID rclsid, [in] LPCWSTR pwzProtocol, [in] ULONG cPatterns, [in] const LPCWSTR *ppwzPatterns, [in] DWORD dwReserved); HRESULT UnregisterNameSpace( [in] IClassFactory *pCF, [in] LPCWSTR pszProtocol); HRESULT RegisterMimeFilter( [in] IClassFactory *pCF, [in] REFCLSID rclsid, [in] LPCWSTR pwzType); HRESULT UnregisterMimeFilter( [in] IClassFactory *pCF, [in] LPCWSTR pwzType); HRESULT CreateBinding( [in] LPBC pBC, [in] LPCWSTR szUrl, [in] IUnknown *pUnkOuter, [out, unique] IUnknown **ppUnk, [out, unique] IInternetProtocol **ppOInetProt, [in] DWORD dwOption); HRESULT SetSessionOption( [in] DWORD dwOption, [in] LPVOID pBuffer, [in] DWORD dwBufferLength, [in] DWORD dwReserved); } /***************************************************************************** * IInternetSecurityMgrSite interface */ [ local, object, uuid(79eac9ed-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IInternetSecurityMgrSite : IUnknown { HRESULT GetWindow( [out] HWND *phwnd); HRESULT EnableModeless( [in] BOOL fEnable); } /***************************************************************************** * IInternetSecurityManager interface */ cpp_quote("#define SID_SInternetSecurityManager IID_IInternetSecurityManager") [ object, uuid(79eac9ee-baf9-11ce-8c82-00aa004ba90b), pointer_default(unique) ] interface IInternetSecurityManager : IUnknown { HRESULT SetSecuritySite( [in, unique] IInternetSecurityMgrSite *pSite); HRESULT GetSecuritySite( [out] IInternetSecurityMgrSite **ppSite); HRESULT MapUrlToZone( [in] LPCWSTR pwszUrl, [out] DWORD *pdwZone, [in] DWORD dwFlags); cpp_quote("#define MAX_SIZE_SECURITY_ID 512") HRESULT GetSecurityId( [in] LPCWSTR pwszUrl, [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId, [in, out] DWORD *pcbSecurityId, [in] DWORD_PTR dwReserved); typedef enum { PUAF_DEFAULT = 0x00, PUAF_NOUI = 0x01, PUAF_ISFILE = 0x02, PUAF_WARN_IF_DENIED = 0x04, PUAF_FORCEUI_FOREGROUND = 0x08, PUAF_CHECK_TIPS = 0x10 } PUAF; HRESULT ProcessUrlAction( [in] LPCWSTR pwszUrl, [in] DWORD dwAction, [out, size_is(cbPolicy)] BYTE *pPolicy, [in] DWORD cbPolicy, [in, unique] BYTE *pContext, [in] DWORD cbContext, [in] DWORD dwFlags, [in] DWORD dwReserved); HRESULT QueryCustomPolicy( [in] LPCWSTR pwszUrl, [in] REFGUID guidKey, [out, size_is(,*pcbPolicy)] BYTE **ppPolicy, [out] DWORD *pcbPolicy, [in] BYTE *pContext, [in] DWORD cbContext, [in] DWORD dwReserved); typedef enum { SZM_CREATE = 0x0, SZM_DELETE = 0x1 } SZM_FLAGS; HRESULT SetZoneMapping( [in] DWORD dwZone, [in] LPCWSTR lpszPattern, [in] DWORD dwFlags); HRESULT GetZoneMappings( [in] DWORD dwZone, [out] IEnumString **ppenumString, [in] DWORD dwFlags); } /***************************************************************************** * IInternetSecurityManagerEx interface */ cpp_quote("#define SID_SInternetSecurityManagerEx IID_IInternetSecurityManagerEx") [ object, uuid(f164edf1-cc7c-4f0d-9a94-34222625C393), pointer_default(unique) ] interface IInternetSecurityManagerEx : IInternetSecurityManager { HRESULT ProcessUrlActionEx( [in] LPCWSTR pwszUrl, [in] DWORD dwAction, [out, size_is(cbPolicy)] BYTE *pPolicy, [in] DWORD cbPolicy, [in] BYTE *pContext, [in] DWORD cbContext, [in] DWORD dwFlags, [in] DWORD dwReserved, [out] DWORD *pdwOutFlags); } /***************************************************************************** * IInternetSecurityManagerEx2 interface */ cpp_quote("#define SID_SInternetSecurityManagerEx2 IID_IInternetSecurityManagerEx2") [ object, uuid(f1e50292-a795-4117-8e09-2b560a72ac60), pointer_default(unique) ] interface IInternetSecurityManagerEx2 : IInternetSecurityManagerEx { HRESULT MapUrlToZoneEx2( [in] IUri *pUri, [out] DWORD *pdwZone, [in] DWORD dwFlags, [out] LPWSTR *ppwszMappedUrl, [out] DWORD *pdwOutFlags); HRESULT ProcessUrlActionEx2( [in] IUri *pUri, [in] DWORD dwAction, [out, size_is(cbPolicy)] BYTE *pPolicy, [in] DWORD cbPolicy, [in, unique] BYTE *pContext, [in] DWORD cbContext, [in] DWORD dwFlags, [in] DWORD_PTR dwReserved, [out] DWORD *pdwOutFlags); HRESULT GetSecurityIdEx2( [in] IUri *pUri, [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId, [in, out] DWORD *pcbSecurityId, [in] DWORD_PTR dwReserved); HRESULT QueryCustomPolicyEx2( [in] IUri *pUri, [in] REFGUID guidKey, [out, size_is(,*pcbPolicy)] BYTE **ppPolicy, [out] DWORD *pcbPolicy, [in] BYTE *pContext, [in] DWORD cbContext, [in] DWORD_PTR dwReserved); } /***************************************************************************** * IInternetHostSecurityManager interface */ cpp_quote("#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager") [ local, object, uuid(3af280b6-cb3f-11d0-891e-00c04fb6bfc4), pointer_default(unique) ] interface IInternetHostSecurityManager : IUnknown { HRESULT GetSecurityId( [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId, [in, out] DWORD *pcbSecurityId, [in] DWORD_PTR dwReserved); HRESULT ProcessUrlAction( [in] DWORD dwAction, [out, size_is(cbPolicy)] BYTE *pPolicy, [in] DWORD cbPolicy, [in] BYTE *pContext, [in] DWORD cbContext, [in] DWORD dwFlags, [in] DWORD dwReserved); HRESULT QueryCustomPolicy( [in] REFGUID guidKey, [out, size_is(,*pcbPolicy)] BYTE **ppPolicy, [out] DWORD *pcbPolicy, [in] BYTE *pContext, [in] DWORD cbContext, [in] DWORD dwReserved); } cpp_quote("#define URLACTION_MIN 0x00001000") cpp_quote("#define URLACTION_DOWNLOAD_MIN 0x00001000") cpp_quote("#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX 0x00001001") cpp_quote("#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX 0x00001004") cpp_quote("#define URLACTION_DOWNLOAD_CURR_MAX 0x00001004") cpp_quote("#define URLACTION_DOWNLOAD_MAX 0x000011ff") cpp_quote("#define URLACTION_ACTIVEX_MIN 0x00001200") cpp_quote("#define URLACTION_ACTIVEX_RUN 0x00001200") cpp_quote("#define URLPOLICY_ACTIVEX_CHECK_LIST 0x00010000") cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY 0x00001201") cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY 0x00001202") cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY 0x00001203") cpp_quote("#define URLACTION_SCRIPT_OVERRIDE_SAFETY 0x00001401") cpp_quote("#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY 0x00001204") cpp_quote("#define URLACTION_ACTIVEX_TREATASUNTRUSTED 0x00001205") cpp_quote("#define URLACTION_ACTIVEX_CURR_MAX 0x00001205") cpp_quote("#define URLACTION_ACTIVEX_MAX 0x000013ff") cpp_quote("#define URLACTION_SCRIPT_MIN 0x00001400") cpp_quote("#define URLACTION_SCRIPT_RUN 0x00001400") cpp_quote("#define URLACTION_SCRIPT_JAVA_USE 0x00001402") cpp_quote("#define URLACTION_SCRIPT_SAFE_ACTIVEX 0x00001405") cpp_quote("#define URLACTION_CROSS_DOMAIN_DATA 0x00001406") cpp_quote("#define URLACTION_SCRIPT_PASTE 0x00001407") cpp_quote("#define URLACTION_SCRIPT_CURR_MAX 0x00001407") cpp_quote("#define URLACTION_SCRIPT_MAX 0x000015ff") cpp_quote("#define URLACTION_HTML_MIN 0x00001600") cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS 0x00001601") cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_FROM 0x00001602") cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_TO 0x00001603") cpp_quote("#define URLACTION_HTML_FONT_DOWNLOAD 0x00001604") cpp_quote("#define URLACTION_HTML_JAVA_RUN 0x00001605") cpp_quote("#define URLACTION_HTML_USERDATA_SAVE 0x00001606") cpp_quote("#define URLACTION_HTML_SUBFRAME_NAVIGATE 0x00001607") cpp_quote("#define URLACTION_HTML_META_REFRESH 0x00001608") cpp_quote("#define URLACTION_HTML_MIXED_CONTENT 0x00001609") cpp_quote("#define URLACTION_HTML_MAX 0x000017ff") cpp_quote("#define URLACTION_SHELL_MIN 0x00001800") cpp_quote("#define URLACTION_SHELL_INSTALL_DTITEMS 0x00001800") cpp_quote("#define URLACTION_SHELL_MOVE_OR_COPY 0x00001802") cpp_quote("#define URLACTION_SHELL_FILE_DOWNLOAD 0x00001803") cpp_quote("#define URLACTION_SHELL_VERB 0x00001804") cpp_quote("#define URLACTION_SHELL_WEBVIEW_VERB 0x00001805") cpp_quote("#define URLACTION_SHELL_CURR_MAX 0x00001805") cpp_quote("#define URLACTION_SHELL_MAX 0x000019ff") cpp_quote("#define URLACTION_NETWORK_MIN 0x00001a00") cpp_quote("#define URLACTION_CREDENTIALS_USE 0x00001a00") cpp_quote("#define URLACTION_AUTHENTICATE_CLIENT 0x00001a01") cpp_quote("#define URLACTION_COOKIES 0x00001a02") cpp_quote("#define URLACTION_COOKIES_SESSION 0x00001a03") cpp_quote("#define URLACTION_CLIENT_CERT_PROMPT 0x00001a04") cpp_quote("#define URLACTION_COOKIES_THIRD_PARTY 0x00001a05") cpp_quote("#define URLACTION_COOKIES_SESSION_THIRD_PARTY 0x00001a06") cpp_quote("#define URLACTION_COOKIES_ENABLED 0x00001a10") cpp_quote("#define URLACTION_NETWORK_CURR_MAX 0x00001a10") cpp_quote("#define URLACTION_NETWORK_MAX 0x00001bff") cpp_quote("#define URLACTION_JAVA_MIN 0x00001c00") cpp_quote("#define URLACTION_JAVA_PERMISSIONS 0x00001c00") cpp_quote("#define URLPOLICY_JAVA_PROHIBIT 0x00000000") cpp_quote("#define URLPOLICY_JAVA_HIGH 0x00010000") cpp_quote("#define URLPOLICY_JAVA_MEDIUM 0x00020000") cpp_quote("#define URLPOLICY_JAVA_LOW 0x00030000") cpp_quote("#define URLPOLICY_JAVA_CUSTOM 0x00800000") cpp_quote("#define URLACTION_JAVA_CURR_MAX 0x00001c00") cpp_quote("#define URLACTION_JAVA_MAX 0x00001cff") cpp_quote("#define URLACTION_INFODELIVERY_MIN 0x00001d00") cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS 0x00001d00") cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS 0x00001d01") cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS 0x00001d02") cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS 0x00001d03") cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS 0x00001d04") cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS 0x00001d05") cpp_quote("#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING 0x00001d06") cpp_quote("#define URLACTION_INFODELIVERY_CURR_MAX 0x00001d06") cpp_quote("#define URLACTION_INFODELIVERY_MAX 0x00001dff") cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MIN 0x00001e00") cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS 0x00001e05") cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT 0x00010000") cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE 0x00020000") cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL 0x00030000") cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MAX 0x00001eff") cpp_quote("#define URLACTION_BEHAVIOR_MIN 0x00002000") cpp_quote("#define URLACTION_BEHAVIOR_RUN 0x00002000") cpp_quote("#define URLPOLICY_BEHAVIOR_CHECK_LIST 0x00010000") cpp_quote("#define URLACTION_FEATURE_MIN 0x00002100") cpp_quote("#define URLACTION_FEATURE_MIME_SNIFFING 0x00002100") cpp_quote("#define URLACTION_FEATURE_ZONE_ELEVATION 0x00002101") cpp_quote("#define URLACTION_FEATURE_WINDOW_RESTRICTIONS 0x00002102") cpp_quote("#define URLACTION_FEATURE_SCRIPT_STATUS_BAR 0x00002103") cpp_quote("#define URLACTION_FEATURE_FORCE_ADDR_AND_STATUS 0x00002104") cpp_quote("#define URLACTION_FEATURE_BLOCK_INPUT_PROMPTS 0x00002105") cpp_quote("#define URLPOLICY_ALLOW 0x00") cpp_quote("#define URLPOLICY_QUERY 0x01") cpp_quote("#define URLPOLICY_DISALLOW 0x03") cpp_quote("#define URLPOLICY_NOTIFY_ON_ALLOW 0x10") cpp_quote("#define URLPOLICY_NOTIFY_ON_DISALLOW 0x20") cpp_quote("#define URLPOLICY_LOG_ON_ALLOW 0x40") cpp_quote("#define URLPOLICY_LOG_ON_DISALLOW 0x80") cpp_quote("#define URLPOLICY_DONTCHECKDLGBOX 0x100") cpp_quote("#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK 0x00000000") cpp_quote("#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER 0x00010000") cpp_quote("#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT 0x00020000") cpp_quote("#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY 0x00030000") cpp_quote("#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK 0x00000000") cpp_quote("#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE 0x00010000") cpp_quote("#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY 0x00030000") cpp_quote("#define URLPOLICY_MASK_PERMISSIONS 0x0f") cpp_quote("#define GetUrlPolicyPermissions(dw) (dw & URLPOLICY_MASK_PERMISSIONS)") cpp_quote("#define SetUrlPolicyPermissions(dw,dw2) ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))") /***************************************************************************** * IInternetZoneManager interface */ [ local, object, uuid(79EAC9EF-BAf9-11CE-8C82-00AA004BA90B), pointer_default(unique) ] interface IInternetZoneManager : IUnknown { typedef [unique] IInternetZoneManager* LPURLZONEMANAGER; typedef enum tagURLZONE { URLZONE_INVALID = -1, URLZONE_PREDEFINED_MIN = 0, URLZONE_LOCAL_MACHINE = 0, URLZONE_INTRANET = 1, URLZONE_TRUSTED = 2, URLZONE_INTERNET = 3, URLZONE_UNTRUSTED = 4, URLZONE_PREDEFINED_MAX = 999, URLZONE_USER_MIN = 1000, URLZONE_USER_MAX = 10000, } URLZONE; typedef enum tagURLTEMPLATE { URLTEMPLATE_CUSTOM = 0x00000, URLTEMPLATE_PREDEFINED_MIN = 0x10000, URLTEMPLATE_LOW = 0x10000, URLTEMPLATE_MEDLOW = 0x10500, URLTEMPLATE_MEDIUM = 0x11000, URLTEMPLATE_MEDHIGH = 0x11500, URLTEMPLATE_HIGH = 0x12000, URLTEMPLATE_PREDEFINED_MAX = 0x20000, } URLTEMPLATE ; typedef enum { ZAFLAGS_CUSTOM_EDIT = 0x00000001, ZAFLAGS_ADD_SITES = 0x00000002, ZAFLAGS_REQUIRE_VERIFICATION = 0x00000004, ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x00000008, ZAFLAGS_INCLUDE_INTRANET_SITES = 0x00000010, ZAFLAGS_NO_UI = 0x00000020, ZAFLAGS_SUPPORTS_VERIFICATION = 0x00000040, ZAFLAGS_UNC_AS_INTRANET = 0x00000080, ZAFLAGS_DETECT_INTRANET = 0x00000100, ZAFLAGS_USE_LOCKED_ZONES = 0x00010000, ZAFLAGS_VERIFY_TEMPLATE_SETTINGS = 0x00020000, ZAFLAGS_NO_CACHE = 0x00040000, } ZAFLAGS ; enum { MAX_ZONE_PATH = 260, MAX_ZONE_DESCRIPTION = 200 }; typedef struct _ZONEATTRIBUTES { ULONG cbSize; WCHAR szDisplayName[MAX_ZONE_PATH]; WCHAR szDescription[MAX_ZONE_DESCRIPTION]; WCHAR szIconPath[MAX_ZONE_PATH]; DWORD dwTemplateMinLevel; DWORD dwTemplateRecommended; DWORD dwTemplateCurrentLevel; DWORD dwFlags; } ZONEATTRIBUTES, *LPZONEATTRIBUTES; typedef enum _URLZONEREG { URLZONEREG_DEFAULT, URLZONEREG_HKLM, URLZONEREG_HKCU } URLZONEREG; HRESULT GetZoneAttributes( [in] DWORD dwZone, [in, out, unique] ZONEATTRIBUTES* pZoneAttributes); HRESULT SetZoneAttributes( [in] DWORD dwZone, [in] ZONEATTRIBUTES* pZoneAttributes); HRESULT GetZoneCustomPolicy( [in] DWORD dwZone, [in] REFGUID guidKey, [out, size_is(,*pcbPolicy)] BYTE **ppPolicy, [out] DWORD* pcbPolicy, [in] URLZONEREG ulrZoneReg); HRESULT SetZoneCustomPolicy( [in] DWORD dwZone, [in] REFGUID guidKey, [in, size_is(pcbPolicy)] BYTE *ppPolicy, [in] DWORD pcbPolicy, [in] URLZONEREG ulrZoneReg); HRESULT GetZoneActionPolicy( [in] DWORD dwZone, [in] DWORD dwAction, [out, size_is(cbPolicy)] BYTE* pPolicy, [in] DWORD cbPolicy, [in] URLZONEREG urlZoneReg); HRESULT SetZoneActionPolicy( [in] DWORD dwZone, [in] DWORD dwAction, [in, size_is(cbPolicy)] BYTE* pPolicy, [in] DWORD cbPolicy, [in] URLZONEREG urlZoneReg); HRESULT PromptAction( [in] DWORD dwAction, [in] HWND hwndParent, [in] LPCWSTR pwszUrl, [in] LPCWSTR pwszText, [in] DWORD dwPromptFlags ); HRESULT LogAction( [in] DWORD dwAction, [in] LPCWSTR pwszUrl, [in] LPCWSTR pwszText, [in] DWORD dwLogFlags); HRESULT CreateZoneEnumerator( [out] DWORD* pdwEnum, [out] DWORD* pdwCount, [in] DWORD dwFlags); HRESULT GetZoneAt( [in] DWORD dwEnum, [in] DWORD dwIndex, [out] DWORD* pdwZone); HRESULT DestroyZoneEnumerator( [in] DWORD dwEnum); HRESULT CopyTemplatePoliciesToZone( [in] DWORD dwTemplate, [in] DWORD dwZone, [in] DWORD dwReserved); } /***************************************************************************** * IInternetZoneManagerEx interface */ [ local, object, uuid(A4C23339-8E06-431E-9BF4-7E711C085648), pointer_default(unique) ] interface IInternetZoneManagerEx : IInternetZoneManager { HRESULT GetZoneActionPolicyEx( [in] DWORD dwZone, [in] DWORD dwAction, [out, size_is(cbPolicy)] BYTE *pPolicy, [in] DWORD cbPolicy, [in] URLZONEREG urlZoneReg, [in] DWORD dwFlags); HRESULT SetZoneActionPolicyEx( [in] DWORD dwZone, [in] DWORD dwAction, [in, size_is(cbPolicy)] BYTE *pPolicy, [in] DWORD cbPolicy, [in] URLZONEREG urlZoneReg, [in] DWORD dwFlags); } /***************************************************************************** * IInternetZoneManagerEx2 interface */ cpp_quote("#define SECURITY_IE_STATE_GREEN 0") cpp_quote("#define SECURITY_IE_STATE_RED 1") [ local, object, uuid(EDC17559-DD5D-4846-8EEF-8BECBA5A4ABF), pointer_default(unique) ] interface IInternetZoneManagerEx2 : IInternetZoneManagerEx { HRESULT GetZoneAttributesEx( [in] DWORD dwZone, [in, out, unique] ZONEATTRIBUTES* pZoneAttributes, [in] DWORD dwFlags); HRESULT GetZoneSecurityState( [in] DWORD dwZoneIndex, [in] BOOL fRespectPolicy, [in, out] LPDWORD pdwState, [in, out] BOOL *pfPolicyEncountered); HRESULT GetIESecurityState( [in] BOOL fRespectPolicy, [in, out] LPDWORD pdwState, [in, out] BOOL *pfPolicyEncountered, [in] BOOL fNoCache); HRESULT FixInsecureSettings(void); } typedef struct _tagSOFTDISTINFO { ULONG cbSize; DWORD dwFlags; DWORD dwAdState; LPWSTR szTitle; LPWSTR szAbstract; LPWSTR szHREF; DWORD dwInstalledVersionMS; DWORD dwInstalledVersionLS; DWORD dwUpdateVersionMS; DWORD dwUpdateVersionLS; DWORD dwAdvertisedVersionMS; DWORD dwAdvertisedVersionLS; DWORD dwReserved; } SOFTDISTINFO, *LPSOFTDISTINFO; typedef struct _tagCODEBASEHOLD { DWORD cbSize; LPWSTR szDistUnit; LPWSTR szCodeBase; DWORD dwVersionMS; DWORD dwVersionLS; DWORD dwStyle; } CODEBASEHOLD, *LPCODEBASEHOLD; [ local, object, uuid(b15b8dc1-c7e1-11d0-8680-00aa00bdcb71), pointer_default(unique) ] interface ISoftDistExt : IUnknown { HRESULT ProcessSoftDist( [in] LPCWSTR szCDFURL, [in] IXMLElement *pSoftDistElement, [in, out] LPSOFTDISTINFO lpsdi ); HRESULT GetFirstCodeBase( [in] LPWSTR *szCodeBase, [in] LPDWORD dwMaxSize ); HRESULT GetNextCodeBase( [in] LPWSTR *szCodeBase, [in] LPDWORD dwMaxSize ); HRESULT AsyncInstallDistributionUnit( [in] IBindCtx *pbc, [in] LPVOID lpReserved, [in] DWORD flags, [in] LPCODEBASEHOLD lpcbh); } typedef enum _tagINTERNETFEATURELIST { FEATURE_OBJECT_CACHING, FEATURE_ZONE_ELEVATION, FEATURE_MIME_HANDLING, FEATURE_MIME_SNIFFING, FEATURE_WINDOW_RESTRICTIONS, FEATURE_WEBOC_POPUPMANAGEMENT, FEATURE_BEHAVIORS, FEATURE_DISABLE_MK_PROTOCOL, FEATURE_LOCALMACHINE_LOCKDOWN, FEATURE_SECURITYBAND, FEATURE_RESTRICT_ACTIVEXINSTALL, FEATURE_VALIDATE_NAVIGATE_URL, FEATURE_RESTRICT_FILEDOWNLOAD, FEATURE_ADDON_MANAGEMENT, FEATURE_PROTOCOL_LOCKDOWN, FEATURE_HTTP_USERNAME_PASSWORD_DISABLE, FEATURE_SAFE_BINDTOOBJECT, FEATURE_UNC_SAVEDFILECHECK, FEATURE_GET_URL_DOM_FILEPATH_UNENCODED, FEATURE_TABBED_BROWSING, FEATURE_SSLUX, FEATURE_DISABLE_NAVIGATION_SOUNDS, FEATURE_DISABLE_LEGACY_COMPRESSION, FEATURE_FORCE_ADDR_AND_STATUS, FEATURE_XMLHTTP, FEATURE_DISABLE_TELNET_PROTOCOL, FEATURE_FEEDS, FEATURE_BLOCK_INPUT_PROMPTS, FEATURE_ENTRY_COUNT } INTERNETFEATURELIST; cpp_quote("#define SET_FEATURE_ON_THREAD 0x00000001") cpp_quote("#define SET_FEATURE_ON_PROCESS 0x00000002") cpp_quote("#define SET_FEATURE_IN_REGISTRY 0x00000004") cpp_quote("#define SET_FEATURE_ON_THREAD_LOCALMACHINE 0x00000008") cpp_quote("#define SET_FEATURE_ON_THREAD_INTRANET 0x00000010") cpp_quote("#define SET_FEATURE_ON_THREAD_TRUSTED 0x00000020") cpp_quote("#define SET_FEATURE_ON_THREAD_INTERNET 0x00000040") cpp_quote("#define SET_FEATURE_ON_THREAD_RESTRICTED 0x00000080") cpp_quote("#define GET_FEATURE_FROM_THREAD 0x00000001") cpp_quote("#define GET_FEATURE_FROM_PROCESS 0x00000002") cpp_quote("#define GET_FEATURE_FROM_REGISTRY 0x00000004") cpp_quote("#define GET_FEATURE_FROM_THREAD_LOCALMACHINE 0x00000008") cpp_quote("#define GET_FEATURE_FROM_THREAD_INTRANET 0x00000010") cpp_quote("#define GET_FEATURE_FROM_THREAD_TRUSTED 0x00000020") cpp_quote("#define GET_FEATURE_FROM_THREAD_INTERNET 0x00000040") cpp_quote("#define GET_FEATURE_FROM_THREAD_RESTRICTED 0x00000080") typedef struct _tagPROTOCOLFILTERDATA { DWORD cbSize; IInternetProtocolSink *pProtocolSink; IInternetProtocol *pProtocol; IUnknown *pUnk; DWORD dwFilterFlags; } PROTOCOLFILTERDATA; /***************************************************************************** * IUri interface */ [ object, uuid(a39ee748-6a27-4817-a6f2-13914bef5890), pointer_default(unique) ] interface IUri : IUnknown { typedef enum { Uri_PROPERTY_ABSOLUTE_URI = 0, Uri_PROPERTY_STRING_START = Uri_PROPERTY_ABSOLUTE_URI, Uri_PROPERTY_AUTHORITY = 1, Uri_PROPERTY_DISPLAY_URI = 2, Uri_PROPERTY_DOMAIN = 3, Uri_PROPERTY_EXTENSION = 4, Uri_PROPERTY_FRAGMENT = 5, Uri_PROPERTY_HOST = 6, Uri_PROPERTY_PASSWORD = 7, Uri_PROPERTY_PATH = 8, Uri_PROPERTY_PATH_AND_QUERY = 9, Uri_PROPERTY_QUERY = 10, Uri_PROPERTY_RAW_URI = 11, Uri_PROPERTY_SCHEME_NAME = 12, Uri_PROPERTY_USER_INFO = 13, Uri_PROPERTY_USER_NAME = 14, Uri_PROPERTY_STRING_LAST = Uri_PROPERTY_USER_NAME, Uri_PROPERTY_HOST_TYPE = 15, Uri_PROPERTY_DWORD_START = Uri_PROPERTY_HOST_TYPE, Uri_PROPERTY_PORT = 16, Uri_PROPERTY_SCHEME = 17, Uri_PROPERTY_ZONE = 18, Uri_PROPERTY_DWORD_LAST = Uri_PROPERTY_ZONE } Uri_PROPERTY; typedef enum { Uri_HOST_UNKNOWN = 0, Uri_HOST_DNS = 1, Uri_HOST_IPV4 = 2, Uri_HOST_IPV6 = 3, Uri_HOST_IDN = 4 } Uri_HOST_TYPE; HRESULT GetPropertyBSTR( [in] Uri_PROPERTY uriProp, [out] BSTR *pbstrProperty, [in] DWORD dwFlags); HRESULT GetPropertyLength( [in] Uri_PROPERTY uriProp, [out] DWORD *pcchProperty, [in] DWORD dwFlags); HRESULT GetPropertyDWORD( [in] Uri_PROPERTY uriProp, [out] DWORD *pdwProperty, [in] DWORD dwFlags); HRESULT HasProperty( [in] Uri_PROPERTY uriProp, [out] BOOL *pfHasProperty); HRESULT GetAbsoluteUri( [out] BSTR *pbstrAbsoluteUri); HRESULT GetAuthority( [out] BSTR *pbstrAuthority); HRESULT GetDisplayUri( [out] BSTR *pbstrDisplayString); HRESULT GetDomain( [out] BSTR *pbstrDomain); HRESULT GetExtension( [out] BSTR *pbstrExtension); HRESULT GetFragment( [out] BSTR *pbstrFragment); HRESULT GetHost( [out] BSTR *pbstrHost); HRESULT GetPassword( [out] BSTR *pbstrPassword); HRESULT GetPath( [out] BSTR *pbstrPath); HRESULT GetPathAndQuery( [out] BSTR *pbstrPathAndQuery); HRESULT GetQuery( [out] BSTR *pbstrQuery); HRESULT GetRawUri( [out] BSTR *pbstrRawUri); HRESULT GetSchemeName( [out] BSTR *pbstrSchemeName); HRESULT GetUserInfo( [out] BSTR *pbstrUserInfo); HRESULT GetUserName( [out] BSTR *pbstrUserName); HRESULT GetHostType( [out] DWORD *pdwHostType); HRESULT GetPort( [out] DWORD *pdwPort); HRESULT GetScheme( [out] DWORD *pdwScheme); HRESULT GetZone( [out] DWORD *pdwZone); HRESULT GetProperties( [out] LPDWORD pdwFlags); HRESULT IsEqual( [in] IUri *pUri, [out] BOOL *pfEqual); } cpp_quote("HRESULT WINAPI CreateUri(LPCWSTR,DWORD,DWORD_PTR,IUri**);") cpp_quote("HRESULT WINAPI CreateUriWithFragment(LPCWSTR,LPCWSTR,DWORD,DWORD_PTR,IUri**);") cpp_quote("HRESULT WINAPI CreateUriFromMultiByteString(LPCSTR,DWORD,DWORD,DWORD,DWORD_PTR,IUri**);") cpp_quote("#define Uri_HAS_ABSOLUTE_URI (1 << Uri_PROPERTY_ABSOLUTE_URI)") cpp_quote("#define Uri_HAS_AUTHORITY (1 << Uri_PROPERTY_AUTHORITY)") cpp_quote("#define Uri_HAS_DISPLAY_URI (1 << Uri_PROPERTY_DISPLAY_URI)") cpp_quote("#define Uri_HAS_DOMAIN (1 << Uri_PROPERTY_DOMAIN)") cpp_quote("#define Uri_HAS_EXTENSION (1 << Uri_PROPERTY_EXTENSION)") cpp_quote("#define Uri_HAS_FRAGMENT (1 << Uri_PROPERTY_FRAGMENT)") cpp_quote("#define Uri_HAS_HOST (1 << Uri_PROPERTY_HOST)") cpp_quote("#define Uri_HAS_PASSWORD (1 << Uri_PROPERTY_PASSWORD)") cpp_quote("#define Uri_HAS_PATH (1 << Uri_PROPERTY_PATH)") cpp_quote("#define Uri_HAS_QUERY (1 << Uri_PROPERTY_QUERY)") cpp_quote("#define Uri_HAS_RAW_URI (1 << Uri_PROPERTY_RAW_URI)") cpp_quote("#define Uri_HAS_SCHEME_NAME (1 << Uri_PROPERTY_SCHEME_NAME)") cpp_quote("#define Uri_HAS_USER_NAME (1 << Uri_PROPERTY_USER_NAME)") cpp_quote("#define Uri_HAS_PATH_AND_QUERY (1 << Uri_PROPERTY_PATH_AND_QUERY)") cpp_quote("#define Uri_HAS_USER_INFO (1 << Uri_PROPERTY_USER_INFO)") cpp_quote("#define Uri_HAS_HOST_TYPE (1 << Uri_PROPERTY_HOST_TYPE)") cpp_quote("#define Uri_HAS_PORT (1 << Uri_PROPERTY_PORT)") cpp_quote("#define Uri_HAS_SCHEME (1 << Uri_PROPERTY_SCHEME)") cpp_quote("#define Uri_HAS_ZONE (1 << Uri_PROPERTY_ZONE)") cpp_quote("#define Uri_CREATE_ALLOW_RELATIVE 0x0001") cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME 0x0002") cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME 0x0004") cpp_quote("#define Uri_CREATE_NOFRAG 0x0008") cpp_quote("#define Uri_CREATE_NO_CANONICALIZE 0x0010") cpp_quote("#define Uri_CREATE_CANONICALIZE 0x0100") cpp_quote("#define Uri_CREATE_FILE_USE_DOS_PATH 0x0020") cpp_quote("#define Uri_CREATE_DECODE_EXTRA_INFO 0x0040") cpp_quote("#define Uri_CREATE_NO_DECODE_EXTRA_INFO 0x0080") cpp_quote("#define Uri_CREATE_CRACK_UNKNOWN_SCHEMES 0x0200") cpp_quote("#define Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES 0x0400") cpp_quote("#define Uri_CREATE_PRE_PROCESS_HTML_URI 0x0800") cpp_quote("#define Uri_CREATE_NO_PRE_PROCESS_HTML_URI 0x1000") cpp_quote("#define Uri_CREATE_IE_SETTINGS 0x2000") cpp_quote("#define Uri_CREATE_NO_IE_SETTINGS 0x4000") cpp_quote("#define Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS 0x8000") cpp_quote("#define Uri_CREATE_NORMALIZE_INTL_CHARACTERS 0x00010000") cpp_quote("#define Uri_CREATE_CANONICALIZE_ABSOLUTE 0x00020000") cpp_quote("#define Uri_DISPLAY_NO_FRAGMENT 0x00000001") cpp_quote("#define Uri_PUNYCODE_IDN_HOST 0x00000002") cpp_quote("#define Uri_DISPLAY_IDN_HOST 0x00000004") cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8 0x00000001") cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_CP 0x00000002") cpp_quote("#define Uri_ENCODING_HOST_IS_IDN 0x00000004") cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8 0x00000008") cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_CP 0x00000010") cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8 0x00000020") cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_CP 0x00000040") cpp_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)") cpp_quote("#define UriBuilder_USE_ORIGINAL_FLAGS 0x00000001") /***************************************************************************** * IUriContainer interface */ [ local, object, uuid(a158a630-ed6f-45fb-b987-f68676f57752), pointer_default(unique) ] interface IUriContainer : IUnknown { HRESULT GetIUri([out] IUri **ppIUri); } /***************************************************************************** * IUriBuilder interface */ [ local, object, uuid(4221b2e1-8955-46c0-bd5b-de9897565de7), pointer_default(unique) ] interface IUriBuilder: IUnknown { HRESULT CreateUriSimple( [in] DWORD dwAllowEncodingPropertyMask, [in] DWORD_PTR dwReserved, [out] IUri **ppIUri); HRESULT CreateUri( [in] DWORD dwCreateFlags, [in] DWORD dwAllowEncodingPropertyMask, [in] DWORD_PTR dwReserved, [out] IUri **ppIUri); HRESULT CreateUriWithFlags( [in] DWORD dwCreateFlags, [in] DWORD dwUriBuilderFlags, [in] DWORD dwAllowEncodingPropertyMask, [in] DWORD_PTR dwReserved, [out] IUri **ppIUri); HRESULT GetIUri( [out] IUri **ppIUri); HRESULT SetIUri( [in, unique] IUri *pIUri); HRESULT GetFragment( [out] DWORD *pcchFragment, [out] LPCWSTR *ppwzFragment); HRESULT GetHost( [out] DWORD *pcchHost, [out] LPCWSTR *ppwzHost); HRESULT GetPassword( [out] DWORD *pcchPassword, [out] LPCWSTR *ppwzPassword); HRESULT GetPath( [out] DWORD *pcchPath, [out] LPCWSTR *ppwzPath); HRESULT GetPort( [out] BOOL *pfHasPort, [out] DWORD *pdwPort); HRESULT GetQuery( [out] DWORD *pcchQuery, [out] LPCWSTR *ppwzQuery); HRESULT GetSchemeName( [out] DWORD *pcchSchemeName, [out] LPCWSTR *ppwzSchemeName); HRESULT GetUserName( [out] DWORD *pcchUserName, [out] LPCWSTR *ppwzUserName); HRESULT SetFragment( [in] LPCWSTR pwzNewValue); HRESULT SetHost( [in] LPCWSTR pwzNewValue); HRESULT SetPassword( [in] LPCWSTR pwzNewValue); HRESULT SetPath( [in] LPCWSTR pwzNewValue); HRESULT SetPort( [in] BOOL fHasPort, [in] DWORD dwNewValue); HRESULT SetQuery( [in] LPCWSTR pwzNewValue); HRESULT SetSchemeName( [in] LPCWSTR pwzNewValue); HRESULT SetUserName( [in] LPCWSTR pwzNewValue); HRESULT RemoveProperties( [in] DWORD dwPropertyMask); HRESULT HasBeenModified( [out] BOOL *pfModified); } cpp_quote("HRESULT WINAPI CreateIUriBuilder(IUri*,DWORD,DWORD_PTR,IUriBuilder**);") /***************************************************************************** * IUriBuilderFactory interface */ [ local, object, uuid(e982ce48-0b96-440c-bc37-0c869b27a29e), pointer_default(unique) ] interface IUriBuilderFactory : IUnknown { HRESULT CreateIUriBuilder( [in] DWORD dwFlags, [in] DWORD_PTR dwReserved, [out] IUriBuilder **ppIUriBuilder); HRESULT CreateInitializedIUriBuilder( [in] DWORD dwFlags, [in] DWORD_PTR dwReserved, [out] IUriBuilder **ppIUriBuilder); } /***************************************************************************** * IInternetProtocolEx interface */ [ local, object, uuid(c7a98e66-1010-492c-a1c8-c809e1f75905), pointer_default(unique) ] interface IInternetProtocolEx : IInternetProtocol { HRESULT StartEx( [in] IUri *pUri, [in] IInternetProtocolSink *pOIProtSink, [in] IInternetBindInfo *pOIBindInfo, [in] DWORD grfPI, [in] HANDLE *dwReserved); } /***************************************************************************** * IGetBindHandle interface */ [ local, object, uuid(AF0FF408-129D-4b20-91F0-02BD23D88352), pointer_default(unique) ] interface IGetBindHandle : IUnknown { typedef [unique] IGetBindHandle *LPGETBINDHANDLE; typedef enum { BINDHANDLETYPES_APPCACHE = 0x00000000, BINDHANDLETYPES_DEPENDENCY = 0x00000001, BINDHANDLETYPES_COUNT } BINDHANDLETYPES; HRESULT GetBindHandle( [in] BINDHANDLETYPES enumRequestedHandle, [out] HANDLE *pRetHandle); } /***************************************************************************** * IBindCallbackRedirect interface */ [ local, object, uuid(11c81bc2-121e-4ed5-b9c4-b430bd54f2c0), pointer_default(unique) ] interface IBindCallbackRedirect : IUnknown { typedef [unique] IBindCallbackRedirect *LPBINDCALLBACKREDIRECT; HRESULT Redirect( [in] LPCWSTR lpcUrl, [out] VARIANT_BOOL *vbCancel); } cpp_quote("#define CONFIRMSAFETYACTION_LOADOBJECT 0x00000001") struct CONFIRMSAFETY { CLSID clsid; IUnknown *pUnk; DWORD dwFlags; }; cpp_quote("EXTERN_C const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;") cpp_quote("DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);") cpp_quote("DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);") cpp_quote("DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);") cpp_quote("DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);") cpp_quote("DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);") cpp_quote("DEFINE_GUID(CLSID_DeCompMimeFilter, 0x8f6b0360, 0xb80d, 0x11d0, 0xa9,0xb3, 0x00,0x60,0x97,0x94,0x23,0x11);") cpp_quote("DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);") cpp_quote("DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);") cpp_quote("DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);") cpp_quote("DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);") cpp_quote("DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);") cpp_quote("DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);") cpp_quote("DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);") cpp_quote("#define URLMON_OPTION_USERAGENT 0x10000001") cpp_quote("#define URLMON_OPTION_USERAGENT_REFRESH 0x10000002") cpp_quote("#define URLMON_OPTION_URL_ENCODING 0x10000004") cpp_quote("#define MK_S_ASYNCHRONOUS _HRESULT_TYPEDEF_(0x000401E8)") cpp_quote("#ifndef S_ASYNCHRONOUS") cpp_quote("#define S_ASYNCHRONOUS MK_S_ASYNCHRONOUS") cpp_quote("#endif") cpp_quote("#define INET_E_ERROR_FIRST _HRESULT_TYPEDEF_(0x800C0002)") cpp_quote("#define INET_E_INVALID_URL _HRESULT_TYPEDEF_(0x800C0002)") cpp_quote("#define INET_E_NO_SESSION _HRESULT_TYPEDEF_(0x800C0003)") cpp_quote("#define INET_E_CANNOT_CONNECT _HRESULT_TYPEDEF_(0x800C0004)") cpp_quote("#define INET_E_RESOURCE_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0005)") cpp_quote("#define INET_E_OBJECT_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0006)") cpp_quote("#define INET_E_DATA_NOT_AVAILABLE _HRESULT_TYPEDEF_(0x800C0007)") cpp_quote("#define INET_E_DOWNLOAD_FAILURE _HRESULT_TYPEDEF_(0x800C0008)") cpp_quote("#define INET_E_AUTHENTICATION_REQUIRED _HRESULT_TYPEDEF_(0x800C0009)") cpp_quote("#define INET_E_NO_VALID_MEDIA _HRESULT_TYPEDEF_(0x800C000A)") cpp_quote("#define INET_E_CONNECTION_TIMEOUT _HRESULT_TYPEDEF_(0x800C000B)") cpp_quote("#define INET_E_INVALID_REQUEST _HRESULT_TYPEDEF_(0x800C000C)") cpp_quote("#define INET_E_UNKNOWN_PROTOCOL _HRESULT_TYPEDEF_(0x800C000D)") cpp_quote("#define INET_E_SECURITY_PROBLEM _HRESULT_TYPEDEF_(0x800C000E)") cpp_quote("#define INET_E_CANNOT_LOAD_DATA _HRESULT_TYPEDEF_(0x800C000F)") cpp_quote("#define INET_E_CANNOT_INSTANTIATE_OBJECT _HRESULT_TYPEDEF_(0x800C0010)") cpp_quote("#define INET_E_USE_DEFAULT_PROTOCOLHANDLER _HRESULT_TYPEDEF_(0x800C0011)") cpp_quote("#define INET_E_USE_DEFAULT_SETTING _HRESULT_TYPEDEF_(0x800C0012L)") cpp_quote("#define INET_E_DEFAULT_ACTION INET_E_USE_DEFAULT_PROTOCOLHANDLER") cpp_quote("#define INET_E_QUERYOPTION_UNKNOWN _HRESULT_TYPEDEF_(0x800C0013)") cpp_quote("#define INET_E_REDIRECT_FAILED _HRESULT_TYPEDEF_(0x800C0014)") cpp_quote("#define INET_E_REDIRECT_TO_DIR _HRESULT_TYPEDEF_(0x800C0015)") cpp_quote("#define INET_E_CANNOT_LOCK_REQUEST _HRESULT_TYPEDEF_(0x800C0016)") cpp_quote("#define INET_E_USE_EXTENDED_BINDING _HRESULT_TYPEDEF_(0x800C0017)") cpp_quote("#define INET_E_TERMINATED_BIND _HRESULT_TYPEDEF_(0x800C0018)") cpp_quote("#define INET_E_INVALID_CERTIFICATE _HRESULT_TYPEDEF_(0x800C0019)") cpp_quote("#define INET_E_CODE_DOWNLOAD_DECLINED _HRESULT_TYPEDEF_(0x800C0100)") cpp_quote("#define INET_E_RESULT_DISPATCHED _HRESULT_TYPEDEF_(0x800C0200)") cpp_quote("#define INET_E_CANNOT_REPLACE_SFP_FILE _HRESULT_TYPEDEF_(0x800C0300)") cpp_quote("#define INET_E_CODE_INSTALL_SUPPRESSED _HRESULT_TYPEDEF_(0x800C0400)") cpp_quote("#define INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY _HRESULT_TYPEDEF_(0x800C0500)") cpp_quote("#define INET_E_DOWNLOAD_BLOCKED_BY_INPRIVATE _HRESULT_TYPEDEF_(0x800C0501)") cpp_quote("#define INET_E_ERROR_LAST INET_E_DOWNLOAD_BLOCKED_BY_INPRIVATE") cpp_quote("HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);") cpp_quote("HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);") cpp_quote("HRESULT WINAPI CreateURLMonikerEx(IMoniker*,LPCWSTR,IMoniker**,DWORD);") cpp_quote("HRESULT WINAPI CreateURLMonikerEx2(IMoniker*,IUri*,IMoniker**,DWORD);") cpp_quote("HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);") cpp_quote("HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);") cpp_quote("HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);") cpp_quote("HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);") cpp_quote("HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);") cpp_quote("HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);") cpp_quote("HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);") cpp_quote("HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);") cpp_quote("HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);") cpp_quote("HRESULT WINAPI CoInternetCombineUrlEx(IUri*,LPCWSTR,DWORD,IUri**,DWORD_PTR);") cpp_quote("HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);") cpp_quote("HRESULT WINAPI CoInternetCombineIUri(IUri*,IUri*,DWORD,IUri**,DWORD_PTR);") cpp_quote("HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);") cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);") cpp_quote("HRESULT WINAPI CoInternetParseIUri(IUri*,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD_PTR);") cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);") cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);") cpp_quote("HRESULT WINAPI CoInternetIsFeatureEnabled(INTERNETFEATURELIST,DWORD dwFlags);") cpp_quote("HRESULT WINAPI CoInternetIsFeatureEnabledForUrl(INTERNETFEATURELIST,DWORD,LPCWSTR,IInternetSecurityManager*);") cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);") cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrlEx(IUri*,IUri**,PSUACTION,DWORD_PTR);") cpp_quote("HRESULT WINAPI AsyncInstallDistributionUnit(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPCWSTR,IBindCtx*,LPVOID,DWORD);") cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);") cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);") cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);") cpp_quote("HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);") cpp_quote("HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);") cpp_quote("HRESULT WINAPI HlinkGoBack(IUnknown*);") cpp_quote("HRESULT WINAPI HlinkGoForward(IUnknown*);") cpp_quote("HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);") cpp_quote("HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);") cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);") cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);") cpp_quote("HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);") cpp_quote("HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);") cpp_quote("HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);") cpp_quote("HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);") cpp_quote("HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);") cpp_quote("HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);") cpp_quote("HRESULT WINAPI CopyBindInfo(const BINDINFO*,BINDINFO*);") cpp_quote("void WINAPI ReleaseBindInfo(BINDINFO*);") cpp_quote("HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);") cpp_quote("HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);") cpp_quote("HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);") cpp_quote("#define OInetCombineUrl CoInternetCombineUrl") cpp_quote("#define OInetCompareUrl CoInternetCompareUrl") cpp_quote("#define OInetGetSession CoInternetGetSession") cpp_quote("BOOL WINAPI IsLoggingEnabledA(LPCSTR);") cpp_quote("BOOL WINAPI IsLoggingEnabledW(LPCWSTR);") cpp_quote("#define IsLoggingEnabled WINELIB_NAME_AW(IsLoggingEnabled)") cpp_quote("#define MKSYS_URLMONIKER 6") cpp_quote("#define URL_MK_LEGACY 0") cpp_quote("#define URL_MK_UNIFORM 1") cpp_quote("#define URL_MK_NO_CANONICALIZE 2") ================================================ FILE: wine/windows/userenv.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_USERENV_H #define __WINE_USERENV_H #include #include #define PT_TEMPORARY 0x00000001 #define PT_ROAMING 0x00000002 #define PT_MANDATORY 0x00000004 typedef enum _GPO_LINK { GPLinkUnknown = 0, GPLinkMachine, GPLinkSite, GPLinkDomain, GPLinkOrganizationalUnit } GPO_LINK, *PGPO_LINK; typedef struct _GROUP_POLICY_OBJECTA { DWORD dwOptions; DWORD dwVersion; LPSTR lpDSPath; LPSTR lpFileSysPath; LPSTR lpDisplayName; CHAR szGPOName[50]; GPO_LINK GPOLink; LPARAM lParam; struct _GROUP_POLICY_OBJECTA *pNext; struct _GROUP_POLICY_OBJECTA *pPrev; LPSTR lpExtensions; LPARAM lParam2; LPSTR lpLink; } GROUP_POLICY_OBJECTA, *PGROUP_POLICY_OBJECTA; typedef struct _GROUP_POLICY_OBJECTW { DWORD dwOptions; DWORD dwVersion; LPWSTR lpDSPath; LPWSTR lpFileSysPath; LPWSTR lpDisplayName; WCHAR szGPOName[50]; GPO_LINK GPOLink; LPARAM lParam; struct _GROUP_POLICY_OBJECTW *pNext; struct _GROUP_POLICY_OBJECTW *pPrev; LPWSTR lpExtensions; LPARAM lParam2; LPWSTR lpLink; } GROUP_POLICY_OBJECTW, *PGROUP_POLICY_OBJECTW; DECL_WINELIB_TYPE_AW(GROUP_POLICY_OBJECT) DECL_WINELIB_TYPE_AW(PGROUP_POLICY_OBJECT) #ifdef __cplusplus extern "C" { #endif BOOL WINAPI CreateEnvironmentBlock(LPVOID*,HANDLE,BOOL); BOOL WINAPI DestroyEnvironmentBlock(LPVOID); HANDLE WINAPI EnterCriticalPolicySection(BOOL); BOOL WINAPI ExpandEnvironmentStringsForUserA(HANDLE,LPCSTR,LPSTR,DWORD); BOOL WINAPI ExpandEnvironmentStringsForUserW(HANDLE,LPCWSTR,LPWSTR,DWORD); #define ExpandEnvironmentStringsForUser WINELIB_NAME_AW(ExpandEnvironmentStringsForUser) DWORD WINAPI GetAppliedGPOListW(DWORD,LPCWSTR,PSID,GUID*,PGROUP_POLICY_OBJECTW*); DWORD WINAPI GetAppliedGPOListA(DWORD,LPCSTR,PSID,GUID*,PGROUP_POLICY_OBJECTA*); #define GetAppliedGPOList WINELIB_NAME_AW(GetAppliedGPOList) BOOL WINAPI GetUserProfileDirectoryA(HANDLE,LPSTR,LPDWORD); BOOL WINAPI GetUserProfileDirectoryW(HANDLE,LPWSTR,LPDWORD); #define GetUserProfileDirectory WINELIB_NAME_AW(GetUserProfileDirectory) BOOL WINAPI GetProfilesDirectoryA(LPSTR,LPDWORD); BOOL WINAPI GetProfilesDirectoryW(LPWSTR,LPDWORD); #define GetProfilesDirectory WINELIB_NAME_AW(GetProfilesDirectory) BOOL WINAPI GetAllUsersProfileDirectoryA(LPSTR,LPDWORD); BOOL WINAPI GetAllUsersProfileDirectoryW(LPWSTR,LPDWORD); #define GetAllUsersProfileDirectory WINELIB_NAME_AW(GetAllUsersProfileDirectory) BOOL WINAPI GetProfileType(DWORD*); BOOL WINAPI LeaveCriticalPolicySection(HANDLE); BOOL WINAPI LoadUserProfileA(HANDLE,LPPROFILEINFOA); BOOL WINAPI LoadUserProfileW(HANDLE,LPPROFILEINFOW); #define LoadUserProfile WINELIB_NAME_AW(LoadUserProfile) BOOL WINAPI RegisterGPNotification(HANDLE,BOOL); BOOL WINAPI UnloadUserProfile(HANDLE,HANDLE); BOOL WINAPI UnregisterGPNotification(HANDLE); #ifdef __cplusplus } #endif #endif /* __WINE_USERENV_H */ ================================================ FILE: wine/windows/usp10.h ================================================ /* * Copyright (C) 2005 Steven Edwards * Copyright (C) 2005 Vijay Kiran Kamuju * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __USP10_H #define __USP10_H #include /* FIXME: #include */ #ifdef __cplusplus extern "C" { #endif /** ScriptStringAnalyse */ #define SSA_PASSWORD 0x00000001 #define SSA_TAB 0x00000002 #define SSA_CLIP 0x00000004 #define SSA_FIT 0x00000008 #define SSA_DZWG 0x00000010 #define SSA_FALLBACK 0x00000020 #define SSA_BREAK 0x00000040 #define SSA_GLYPHS 0x00000080 #define SSA_RTL 0x00000100 #define SSA_GCP 0x00000200 #define SSA_HOTKEY 0x00000400 #define SSA_METAFILE 0x00000800 #define SSA_LINK 0x00001000 #define SSA_HIDEHOTKEY 0x00002000 #define SSA_HOTKEYONLY 0x00002400 #define SSA_FULLMEASURE 0x04000000 #define SSA_LPKANSIFALLBACK 0x08000000 #define SSA_PIDX 0x10000000 #define SSA_LAYOUTRTL 0x20000000 #define SSA_DONTGLYPH 0x40000000 #define SSA_NOKASHIDA 0x80000000 /** StringIsComplex */ #define SIC_COMPLEX 1 #define SIC_ASCIIDIGIT 2 #define SIC_NEUTRAL 4 /** ScriptGetCMap */ #define SGCM_RTL 0x00000001 /** ScriptApplyDigitSubstitution */ #define SCRIPT_DIGITSUBSTITUTE_CONTEXT 0 #define SCRIPT_DIGITSUBSTITUTE_NONE 1 #define SCRIPT_DIGITSUBSTITUTE_NATIONAL 2 #define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL 3 #define SCRIPT_UNDEFINED 0 #define USP_E_SCRIPT_NOT_IN_FONT MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200) typedef enum tag_SCRIPT_JUSTIFY { SCRIPT_JUSTIFY_NONE = 0, SCRIPT_JUSTIFY_ARABIC_BLANK = 1, SCRIPT_JUSTIFY_CHARACTER = 2, SCRIPT_JUSTIFY_RESERVED1 = 3, SCRIPT_JUSTIFY_BLANK = 4, SCRIPT_JUSTIFY_RESERVED2 = 5, SCRIPT_JUSTIFY_RESERVED3 = 6, SCRIPT_JUSTIFY_ARABIC_NORMAL = 7, SCRIPT_JUSTIFY_ARABIC_KASHIDA = 8, SCRIPT_JUSTIFY_ARABIC_ALEF = 9, SCRIPT_JUSTIFY_ARABIC_HA = 10, SCRIPT_JUSTIFY_ARABIC_RA = 11, SCRIPT_JUSTIFY_ARABIC_BA = 12, SCRIPT_JUSTIFY_ARABIC_BARA = 13, SCRIPT_JUSTIFY_ARABIC_SEEN = 14, SCRIPT_JUSTIFY_ARABIC_SEEN_M = 15, } SCRIPT_JUSTIFY; typedef struct tag_SCRIPT_CONTROL { DWORD uDefaultLanguage :16; DWORD fContextDigits :1; DWORD fInvertPreBoundDir :1; DWORD fInvertPostBoundDir :1; DWORD fLinkStringBefore :1; DWORD fLinkStringAfter :1; DWORD fNeutralOverride :1; DWORD fNumericOverride :1; DWORD fLegacyBidiClass :1; DWORD fMergeNeutralItems :1; DWORD fReserved :7; } SCRIPT_CONTROL; typedef struct { DWORD langid :16; DWORD fNumeric :1; DWORD fComplex :1; DWORD fNeedsWordBreaking :1; DWORD fNeedsCaretInfo :1; DWORD bCharSet :8; DWORD fControl :1; DWORD fPrivateUseArea :1; DWORD fNeedsCharacterJustify :1; DWORD fInvalidGlyph :1; DWORD fInvalidLogAttr :1; DWORD fCDM :1; DWORD fAmbiguousCharSet :1; DWORD fClusterSizeVaries :1; DWORD fRejectInvalid :1; } SCRIPT_PROPERTIES; typedef struct tag_SCRIPT_STATE { WORD uBidiLevel :5; WORD fOverrideDirection :1; WORD fInhibitSymSwap :1; WORD fCharShape :1; WORD fDigitSubstitute :1; WORD fInhibitLigate :1; WORD fDisplayZWG :1; WORD fArabicNumContext :1; WORD fGcpClusters :1; WORD fReserved :1; WORD fEngineReserved :2; } SCRIPT_STATE; typedef struct tag_SCRIPT_ANALYSIS { WORD eScript :10; WORD fRTL :1; WORD fLayoutRTL :1; WORD fLinkBefore :1; WORD fLinkAfter :1; WORD fLogicalOrder :1; WORD fNoGlyphIndex :1; SCRIPT_STATE s; } SCRIPT_ANALYSIS; typedef struct tag_SCRIPT_ITEM { int iCharPos; SCRIPT_ANALYSIS a; } SCRIPT_ITEM; typedef struct tag_SCRIPT_DIGITSUBSTITUTE { DWORD NationalDigitLanguage :16; DWORD TraditionalDigitLanguage :16; DWORD DigitSubstitute :8; DWORD dwReserved; } SCRIPT_DIGITSUBSTITUTE; typedef struct tag_SCRIPT_FONTPROPERTIES { int cBytes; WORD wgBlank; WORD wgDefault; WORD wgInvalid; WORD wgKashida; int iKashidaWidth; } SCRIPT_FONTPROPERTIES; typedef struct tag_SCRIPT_TABDEF { int cTabStops; int iScale; int *pTabStops; int iTabOrigin; } SCRIPT_TABDEF; typedef struct tag_SCRIPT_VISATTR { WORD uJustification :4; WORD fClusterStart :1; WORD fDiacritic :1; WORD fZeroWidth :1; WORD fReserved :1; WORD fShapeReserved :8; } SCRIPT_VISATTR; typedef struct tag_SCRIPT_LOGATTR { BYTE fSoftBreak :1; BYTE fWhiteSpace :1; BYTE fCharStop :1; BYTE fWordStop :1; BYTE fInvalid :1; BYTE fReserved :3; } SCRIPT_LOGATTR; typedef void *SCRIPT_CACHE; typedef void *SCRIPT_STRING_ANALYSIS; #ifndef LSDEFS_DEFINED typedef struct tagGOFFSET { LONG du; LONG dv; } GOFFSET; #endif typedef ULONG OPENTYPE_TAG; typedef struct tagOPENTYPE_FEATURE_RECORD { OPENTYPE_TAG tagFeature; LONG lParameter; } OPENTYPE_FEATURE_RECORD; typedef struct tagSCRIPT_GLYPHPROP { SCRIPT_VISATTR sva; WORD reserved; } SCRIPT_GLYPHPROP; typedef struct tagSCRIPT_CHARPROP { WORD fCanGlyphAlone :1; WORD reserved :15; } SCRIPT_CHARPROP; typedef struct tagTEXTRANGE_PROPERTIES { OPENTYPE_FEATURE_RECORD *potfRecords; INT cotfRecords; } TEXTRANGE_PROPERTIES; /* Function Declarations */ HRESULT WINAPI ScriptApplyDigitSubstitution(const SCRIPT_DIGITSUBSTITUTE* psds, SCRIPT_CONTROL* psc, SCRIPT_STATE* pss); HRESULT WINAPI ScriptApplyLogicalWidth(const int *piDx, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva, const int *piAdvance, const SCRIPT_ANALYSIS *psa, ABC *pABC, int *piJustify); HRESULT WINAPI ScriptRecordDigitSubstitution(LCID Locale, SCRIPT_DIGITSUBSTITUTE *psds); HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItems, const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, SCRIPT_ITEM *pItems, int *pcItems); HRESULT WINAPI ScriptGetCMap(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcInChars, int cChars, DWORD dwFlags, WORD *pwOutGlyphs); HRESULT WINAPI ScriptGetFontProperties(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_FONTPROPERTIES *sfp); HRESULT WINAPI ScriptGetGlyphABCWidth(HDC hdc, SCRIPT_CACHE *psc, WORD wGlyph, ABC *pABC); HRESULT WINAPI ScriptGetLogicalWidths(const SCRIPT_ANALYSIS *psa, int cChars, int cGlyphs, const int *piGlyphWidth, const WORD *pwLogClust, const SCRIPT_VISATTR *psva, int *piDx); HRESULT WINAPI ScriptGetProperties(const SCRIPT_PROPERTIES ***ppSp, int *piNumScripts); HRESULT WINAPI ScriptStringAnalyse(HDC hdc, const void *pString, int cString, int cGlyphs, int iCharset, DWORD dwFlags, int iReqWidth, SCRIPT_CONTROL *psControl, SCRIPT_STATE *psState, const int *piDx, SCRIPT_TABDEF *pTabdef, const BYTE *pbInClass, SCRIPT_STRING_ANALYSIS *pssa); HRESULT WINAPI ScriptStringValidate(SCRIPT_STRING_ANALYSIS ssa); HRESULT WINAPI ScriptStringFree(SCRIPT_STRING_ANALYSIS *pssa); HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc); HRESULT WINAPI ScriptIsComplex(const WCHAR* pwcInChars, int cInChars, DWORD dwFlags); HRESULT WINAPI ScriptJustify(const SCRIPT_VISATTR *psva, const int *piAdvance, int cGlyphs, int iDx, int iMinKashida, int *piJustify); HRESULT WINAPI ScriptLayout(int cRuns, const BYTE *pbLevel, int *piVisualToLogical, int *piLogicalToVisual); HRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars, int cChars, int cMaxGlyphs, SCRIPT_ANALYSIS *psa, WORD *pwOutGlyphs, WORD *pwLogClust, SCRIPT_VISATTR *psva, int *pcGlyphs); HRESULT WINAPI ScriptPlace(HDC hdc, SCRIPT_CACHE *psc, const WORD *pwGlyphs, int cGlyphs, const SCRIPT_VISATTR *psva, SCRIPT_ANALYSIS *psa, int *piAdvance, GOFFSET *pGoffset, ABC *pABC ); HRESULT WINAPI ScriptBreak(const WCHAR *pwcChars, int cChars, const SCRIPT_ANALYSIS *psa, SCRIPT_LOGATTR *psla); HRESULT WINAPI ScriptCacheGetHeight(HDC hdc, SCRIPT_CACHE *psc, LONG *tmHeight); HRESULT WINAPI ScriptCPtoX(int iCP, BOOL fTrailing, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva, const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piX); HRESULT WINAPI ScriptXtoCP(int iX, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva, const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piCP, int *piTrailing); HRESULT WINAPI ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS ssa, int icp, BOOL fTrailing, int *pX); HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int *piCh , int *piTrailing); HRESULT WINAPI ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS ssa, int *piDx); HRESULT WINAPI ScriptStringGetOrder(SCRIPT_STRING_ANALYSIS ssa, UINT *puOrder); HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa, int iX, int iY, UINT uOptions, const RECT *prc, int iMinSel, int iMaxSel, BOOL fDisabled); HRESULT WINAPI ScriptTextOut(const HDC hdc, SCRIPT_CACHE *psc, int x, int y, UINT fuOptions, const RECT *lprc, const SCRIPT_ANALYSIS *psa, const WCHAR *pwcReserved, int iReserved, const WORD *pwGlyphs, int cGlyphs, const int *piAdvance, const int *piJustify, const GOFFSET *pGoffset); const int* WINAPI ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS ssa); const SCRIPT_LOGATTR* WINAPI ScriptString_pLogAttr(SCRIPT_STRING_ANALYSIS ssa); const SIZE* WINAPI ScriptString_pSize(SCRIPT_STRING_ANALYSIS ssa); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __USP10_H */ ================================================ FILE: wine/windows/uuids.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef OUR_GUID_ENTRY #define OUR_GUID_ENTRY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8); #endif #define MEDIATYPE_NULL GUID_NULL #define MEDIASUBTYPE_NULL GUID_NULL OUR_GUID_ENTRY(AMPROPSETID_Pin, 0x9b00f101, 0x1567, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CAPTION_FORMAT_ATSC, 0x3ed9cb31, 0xfd10, 0x4ade, 0xbc, 0xcc, 0xfb, 0x91, 0x05, 0xd2, 0xf3, 0xef) OUR_GUID_ENTRY(CAPTION_FORMAT_DIRECTV, 0xe9ca1ce7, 0x915e, 0x47be, 0x9b, 0xb9, 0xbf, 0x1d, 0x8a, 0x13, 0xa5, 0xec) OUR_GUID_ENTRY(CAPTION_FORMAT_DVB, 0x12230db4, 0xff2a, 0x447e, 0xbb, 0x88, 0x68, 0x41, 0xc4, 0x16, 0xd0, 0x68) OUR_GUID_ENTRY(CAPTION_FORMAT_ECHOSTAR, 0xebb1a262, 0x1158, 0x4b99, 0xae, 0x80, 0x92, 0xac, 0x77, 0x69, 0x52, 0xc4) OUR_GUID_ENTRY(CLSID_ACMWrapper, 0x6a08cf80, 0x0e18, 0x11cf, 0xa2, 0x4d, 0x00, 0x20, 0xaf, 0xd7, 0x97, 0x67) OUR_GUID_ENTRY(CLSID_AMovie, 0x5f2759c0, 0x7685, 0x11cf, 0x8b, 0x23, 0x00, 0x80, 0x5f, 0x6c, 0xef, 0x60) OUR_GUID_ENTRY(CLSID_ATSCNetworkPropertyPage, 0xe3444d16, 0x5ac4, 0x4386, 0x88, 0xdf, 0x13, 0xfd, 0x23, 0x0e, 0x1d, 0xda) OUR_GUID_ENTRY(CLSID_ATSCNetworkProvider, 0x0dad2fdd, 0x5fd7, 0x11d3, 0x8f, 0x50, 0x00, 0xc0, 0x4f, 0x79, 0x71, 0xe2) OUR_GUID_ENTRY(CLSID_AVICo, 0xd76e2820, 0x1563, 0x11cf, 0xac, 0x98, 0x00, 0xaa, 0x00, 0x4c, 0x0f, 0xa9) OUR_GUID_ENTRY(CLSID_AVIDec, 0xcf49d4e0, 0x1115, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_AVIDoc, 0xd3588ab0, 0x0781, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_AVIDocWriter, 0xd3588ab1, 0x0781, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_AVIDraw, 0xa888df60, 0x1e90, 0x11cf, 0xac, 0x98, 0x00, 0xaa, 0x00, 0x4c, 0x0f, 0xa9) OUR_GUID_ENTRY(CLSID_AVIMIDIRender, 0x07b65360, 0xc445, 0x11ce, 0xaf, 0xde, 0x00, 0xaa, 0x00, 0x6c, 0x14, 0xf4) OUR_GUID_ENTRY(CLSID_ActiveMovieCategories, 0xda4e3da0, 0xd07d, 0x11d0, 0xbd, 0x50, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_AllocPresenter, 0x99d54f63, 0x1a69, 0x41ae, 0xaa, 0x4d, 0xc9, 0x76, 0xeb, 0x3f, 0x07, 0x13) OUR_GUID_ENTRY(CLSID_AllocPresenterDDXclMode, 0x4444ac9e, 0x242e, 0x471b, 0xa3, 0xc7, 0x45, 0xdc, 0xd4, 0x63, 0x52, 0xbc) OUR_GUID_ENTRY(CLSID_AnalogVideoDecoderPropertyPage, 0x71f96466, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56) OUR_GUID_ENTRY(CLSID_AsfMux, 0xf560ae42, 0x6cdd, 0x11d1, 0xad, 0xe2, 0x00, 0x00, 0xf8, 0x75, 0x4b, 0x99) OUR_GUID_ENTRY(CLSID_AsyncReader, 0xe436ebb5, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_AudioCompressorCategory, 0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_AudioFileClip, 0xa5ea8d32, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_AudioInputDeviceCategory, 0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_AudioInputMixerProperties, 0x2ca8ca52, 0x3c3f, 0x11d2, 0xb7, 0x3d, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d) OUR_GUID_ENTRY(CLSID_AudioProperties, 0x05589faf, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(CLSID_AudioRecord, 0xe30629d2, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66) OUR_GUID_ENTRY(CLSID_AudioRender, 0xe30629d1, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66) OUR_GUID_ENTRY(CLSID_AudioRendererAdvancedProperties,0x37e92a92, 0xd9aa, 0x11d2, 0xbf, 0x84, 0x8e, 0xf2, 0xb1, 0x55, 0x5a, 0xed) OUR_GUID_ENTRY(CLSID_AudioRendererCategory, 0xe0f158e1, 0xcb04, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_AviDest, 0xe2510970, 0xf137, 0x11ce, 0x8b, 0x67, 0x00, 0xaa, 0x00, 0xa3, 0xf1, 0xa6) OUR_GUID_ENTRY(CLSID_AviMuxProptyPage, 0xc647b5c0, 0x157c, 0x11d0, 0xbd, 0x23, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_AviMuxProptyPage1, 0x0a9ae910, 0x85c0, 0x11d0, 0xbd, 0x42, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_AviReader, 0x1b544c21, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e) OUR_GUID_ENTRY(CLSID_AviSplitter, 0x1b544c20, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e) OUR_GUID_ENTRY(CLSID_CAcmCoClassManager, 0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_CCAFilter, 0x3d07a539, 0x35ca, 0x447c, 0x9b, 0x05, 0x8d, 0x85, 0xce, 0x92, 0x4f, 0x9e) OUR_GUID_ENTRY(CLSID_CDeviceMoniker, 0x4315d437, 0x5b8c, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_CIcmCoClassManager, 0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_CMidiOutClassManager, 0x4efe2452, 0x168a, 0x11d1, 0xbc, 0x76, 0x00, 0xc0, 0x4f, 0xb9, 0x45, 0x3b) OUR_GUID_ENTRY(CLSID_CMpegAudioCodec, 0x4a2286e0, 0x7bef, 0x11ce, 0x9b, 0xd9, 0x00, 0x00, 0xe2, 0x02, 0x59, 0x9c) OUR_GUID_ENTRY(CLSID_CMpegVideoCodec, 0xfeb50740, 0x7bef, 0x11ce, 0x9b, 0xd9, 0x00, 0x00, 0xe2, 0x02, 0x59, 0x9c) OUR_GUID_ENTRY(CLSID_CQzFilterClassManager, 0x083863f1, 0x70de, 0x11d0, 0xbd, 0x40, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_CVidCapClassManager, 0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_CWaveOutClassManager, 0xe0f158e1, 0xcb04, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_CWaveinClassManager, 0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_CameraControlPropertyPage, 0x71f96465, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56) OUR_GUID_ENTRY(CLSID_CaptionsFilter, 0x2f7ee4b6, 0x6ff5, 0x4eb4, 0xb2, 0x4a, 0x2b, 0xfc, 0x41, 0x11, 0x71, 0x71) OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder, 0xbf87b6e0, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder2, 0xbf87b6e1, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_CaptureProperties, 0x1b544c22, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1f) OUR_GUID_ENTRY(CLSID_Colour, 0x1643e180, 0x90f5, 0x11ce, 0x97, 0xd5, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(CLSID_CrossbarFilterPropertyPage, 0x71f96461, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56) OUR_GUID_ENTRY(CLSID_CutListCacheMemory, 0xa5ea8d33, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_CutListGraphBuilder, 0xa5ea8d2f, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_CutListSource, 0xa5ea8d20, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_DShowTVEFilter, 0x05500280, 0xfaa5, 0x4df9, 0x82, 0x46, 0xbf, 0xc2, 0x3a, 0xc5, 0xce, 0xa8) OUR_GUID_ENTRY(CLSID_DSoundRender, 0x79376820, 0x07d0, 0x11cf, 0xa2, 0x4d, 0x00, 0x20, 0xaf, 0xd7, 0x97, 0x67) OUR_GUID_ENTRY(CLSID_DVBCNetworkProvider, 0xdc0c0fe7, 0x0485, 0x4266, 0xb9, 0x3f, 0x68, 0xfb, 0xf8, 0x0e, 0xd8, 0x34) OUR_GUID_ENTRY(CLSID_DVBSNetworkProvider, 0xfa4b375a, 0x45b4, 0x4d45, 0x84, 0x40, 0x26, 0x39, 0x57, 0xb1, 0x16, 0x23) OUR_GUID_ENTRY(CLSID_DVBTNetworkProvider, 0x216c62df, 0x6d7f, 0x4e9a, 0x85, 0x71, 0x05, 0xf1, 0x4e, 0xdb, 0x76, 0x6a) OUR_GUID_ENTRY(CLSID_DVDHWDecodersCategory, 0x2721ae20, 0x7e70, 0x11d0, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00) OUR_GUID_ENTRY(CLSID_DVDNavigator, 0x9b8c4620, 0x2c1a, 0x11d0, 0x84, 0x93, 0x00, 0xa0, 0x24, 0x38, 0xad, 0x48) OUR_GUID_ENTRY(CLSID_DVDState, 0xf963c5cf, 0xa659, 0x4a93, 0x96, 0x38, 0xca, 0xf3, 0xcd, 0x27, 0x7d, 0x13) OUR_GUID_ENTRY(CLSID_DVDecPropertiesPage, 0x101193c0, 0x0bfe, 0x11d0, 0xaf, 0x91, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42) OUR_GUID_ENTRY(CLSID_DVEncPropertiesPage, 0x4150f050, 0xbb6f, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42) OUR_GUID_ENTRY(CLSID_DVMux, 0x129d7e40, 0xc10d, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42) OUR_GUID_ENTRY(CLSID_DVMuxPropertyPage, 0x4db880e0, 0xc10d, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42) OUR_GUID_ENTRY(CLSID_DVSplitter, 0x4eb31670, 0x9fc6, 0x11cf, 0xaf, 0x6e, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42) OUR_GUID_ENTRY(CLSID_DVVideoCodec, 0xb1b77c00, 0xc3e4, 0x11cf, 0xaf, 0x79, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42) OUR_GUID_ENTRY(CLSID_DVVideoEnc, 0x13aa3650, 0xbb6f, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42) OUR_GUID_ENTRY(CLSID_DeviceControlCategory, 0xcc7bfb46, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59) OUR_GUID_ENTRY(CLSID_DirectDrawProperties, 0x944d4c00, 0xdd52, 0x11ce, 0xbf, 0x0e, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(CLSID_DirectShowPluginControl, 0x8670c736, 0xf614, 0x427b, 0x8a, 0xda, 0xbb, 0xad, 0xc5, 0x87, 0x19, 0x4b) OUR_GUID_ENTRY(CLSID_Dither, 0x1da08500, 0x9edc, 0x11cf, 0xbc, 0x10, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6) OUR_GUID_ENTRY(CLSID_DtvCcFilter, 0xfb056ba0, 0x2502, 0x45b9, 0x8e, 0x86, 0x2b, 0x40, 0xde, 0x84, 0xad, 0x29) OUR_GUID_ENTRY(CLSID_DvdGraphBuilder, 0xfcc152b7, 0xf372, 0x11d0, 0x8e, 0x00, 0x00, 0xc0, 0x4f, 0xd7, 0xc0, 0x8b) OUR_GUID_ENTRY(CLSID_EVRPlaybackPipelineOptimizer, 0x62079164, 0x233b, 0x41f8, 0xa8, 0x0f, 0xf0, 0x17, 0x05, 0xf5, 0x14, 0xa8) OUR_GUID_ENTRY(CLSID_EVRTearlessWindowPresenter9, 0xa0a7a57b, 0x59b2, 0x4919, 0xa6, 0x94, 0xad, 0xd0, 0xa5, 0x26, 0xc3, 0x73) OUR_GUID_ENTRY(CLSID_EnhancedVideoRenderer, 0xfa10746c, 0x9b63, 0x4b6c, 0xbc, 0x49, 0xfc, 0x30, 0x0e, 0xa5, 0xf2, 0x56) OUR_GUID_ENTRY(CLSID_FGControl, 0xe436ebb4, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_FileSource, 0x701722e0, 0x8ae3, 0x11ce, 0xa8, 0x5c, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5) OUR_GUID_ENTRY(CLSID_FileWriter, 0x8596e5f0, 0x0da5, 0x11d0, 0xbd, 0x21, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_FilterGraph, 0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_FilterGraphNoThread, 0xe436ebb8, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_FilterGraphPrivateThread, 0xa3ecbc41, 0x581a, 0x4476, 0xb6, 0x93, 0xa6, 0x33, 0x40, 0x46, 0x2d, 0x8b) OUR_GUID_ENTRY(CLSID_FilterMapper, 0xe436ebb2, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_FilterMapper2, 0xcda42200, 0xbd88, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_ICodecAPIProxy, 0x7ff0997a, 0x1999, 0x4286, 0xa7, 0x3c, 0x62, 0x2b, 0x88, 0x14, 0xe7, 0xeb) OUR_GUID_ENTRY(CLSID_IVideoEncoderCodecAPIProxy, 0xb05dabd9, 0x56e5, 0x4fdc, 0xaf, 0xa4, 0x8a, 0x47, 0xe9, 0x1f, 0x1c, 0x9c) OUR_GUID_ENTRY(CLSID_IVideoEncoderProxy, 0xb43c4eec, 0x8c32, 0x4791, 0x91, 0x02, 0x50, 0x8a, 0xda, 0x5e, 0xe8, 0xe7) OUR_GUID_ENTRY(CLSID_InfTee, 0xf8388a40, 0xd5bb, 0x11d0, 0xbe, 0x5a, 0x00, 0x80, 0xc7, 0x06, 0x56, 0x8e) OUR_GUID_ENTRY(CLSID_LegacyAmFilterCategory, 0x083863f1, 0x70de, 0x11d0, 0xbd, 0x40, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_Line21Decoder, 0x6e8d4a20, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7) OUR_GUID_ENTRY(CLSID_Line21Decoder2, 0xe4206432, 0x01a1, 0x4bee, 0xb3, 0xe1, 0x37, 0x02, 0xc8, 0xed, 0xc5, 0x74) OUR_GUID_ENTRY(CLSID_MFVideoMixer9, 0xe474e05a, 0xab65, 0x4f6a, 0x82, 0x7c, 0x21, 0x8b, 0x1b, 0xaa, 0xf3, 0x1f) OUR_GUID_ENTRY(CLSID_MFVideoPresenter9, 0x98455561, 0x5136, 0x4d28, 0xab, 0x08, 0x4c, 0xee, 0x40, 0xea, 0x27, 0x81) OUR_GUID_ENTRY(CLSID_MJPGEnc, 0xb80ab0a0, 0x7416, 0x11d2, 0x9e, 0xeb, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37) OUR_GUID_ENTRY(CLSID_MMSPLITTER, 0x3ae86b20, 0x7be8, 0x11d1, 0xab, 0xe6, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75) OUR_GUID_ENTRY(CLSID_MOVReader, 0x44584800, 0xf8ee, 0x11ce, 0xb2, 0xd4, 0x00, 0xdd, 0x01, 0x10, 0x1b, 0x85) OUR_GUID_ENTRY(CLSID_MPEG1Doc, 0xe4bbd160, 0x4269, 0x11ce, 0x83, 0x8d, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(CLSID_MPEG1PacketPlayer, 0x26c25940, 0x4ca9, 0x11ce, 0xa8, 0x28, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5) OUR_GUID_ENTRY(CLSID_MPEG1Splitter, 0x336475d0, 0x942a, 0x11ce, 0xa8, 0x70, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5) OUR_GUID_ENTRY(CLSID_MPEG2Demultiplexer, 0xafb6c280, 0x2c41, 0x11d3, 0x8a, 0x60, 0x00, 0x00, 0xf8, 0x1e, 0x0e, 0x4a) OUR_GUID_ENTRY(CLSID_MPEG2Demultiplexer_NoClock, 0x687d3367, 0x3644, 0x467a, 0xad, 0xfe, 0x6c, 0xd7, 0xa8, 0x5c, 0x4a, 0x2c) OUR_GUID_ENTRY(CLSID_MediaEncoderCategory, 0x7d22e920, 0x5ca9, 0x4787, 0x8c, 0x2b, 0xa6, 0x77, 0x9b, 0xd1, 0x17, 0x81) OUR_GUID_ENTRY(CLSID_MediaMultiplexerCategory, 0x236c9559, 0xadce, 0x4736, 0xbf, 0x72, 0xba, 0xb3, 0x4e, 0x39, 0x21, 0x96) OUR_GUID_ENTRY(CLSID_MediaPropertyBag, 0xcdbd8d00, 0xc193, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_MemoryAllocator, 0x1e651cc0, 0xb199, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45) OUR_GUID_ENTRY(CLSID_MidiRendererCategory, 0x4efe2452, 0x168a, 0x11d1, 0xbc, 0x76, 0x00, 0xc0, 0x4f, 0xb9, 0x45, 0x3b) OUR_GUID_ENTRY(CLSID_MjpegDec, 0x301056d0, 0x6dff, 0x11d2, 0x9e, 0xeb, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37) OUR_GUID_ENTRY(CLSID_ModexProperties, 0x0618aa30, 0x6bc4, 0x11cf, 0xbf, 0x36, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(CLSID_ModexRenderer, 0x07167665, 0x5011, 0x11cf, 0xbf, 0x33, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(CLSID_Mpeg2VideoStreamAnalyzer, 0x6cfad761, 0x735d, 0x4aa5, 0x8a, 0xfc, 0xaf, 0x91, 0xa7, 0xd6, 0x1e, 0xba) OUR_GUID_ENTRY(CLSID_NetworkProvider, 0xb2f3a67c, 0x29da, 0x4c78, 0x88, 0x31, 0x09, 0x1e, 0xd5, 0x09, 0xa4, 0x75) OUR_GUID_ENTRY(CLSID_NullRenderer, 0xc1f400a4, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37) OUR_GUID_ENTRY(CLSID_OverlayMixer, 0xcd8743a1, 0x3736, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(CLSID_PerformanceProperties, 0x59ce6880, 0xacf8, 0x11cf, 0xb5, 0x6e, 0x00, 0x80, 0xc7, 0xc4, 0xb6, 0x8a) OUR_GUID_ENTRY(CLSID_PersistMonikerPID, 0xe436ebb7, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_ProtoFilterGraph, 0xe436ebb0, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_QTDec, 0xfdfe9681, 0x74a3, 0x11d0, 0xaf, 0xa7, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42) OUR_GUID_ENTRY(CLSID_QualityProperties, 0x418afb70, 0xf8b8, 0x11ce, 0xaa, 0xc6, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3) OUR_GUID_ENTRY(CLSID_QuickTimeParser, 0xd51bd5a0, 0x7548, 0x11cf, 0xa5, 0x20, 0x00, 0x80, 0xc7, 0x7e, 0xf5, 0x8a) OUR_GUID_ENTRY(CLSID_SBE2File, 0x93a094d7, 0x51e8, 0x485b, 0x90, 0x4a, 0x8d, 0x6b, 0x97, 0xdc, 0x6b, 0x39) OUR_GUID_ENTRY(CLSID_SBE2FileScan, 0x3e458037, 0x0ca6, 0x41aa, 0xa5, 0x94, 0x2a, 0xa6, 0xc0, 0x2d, 0x70, 0x9b) OUR_GUID_ENTRY(CLSID_SBE2MediaTypeProfile, 0x1f26a602, 0x2b5c, 0x4b63, 0xb8, 0xe8, 0x9e, 0xa5, 0xc1, 0xa7, 0xdc, 0x2e) OUR_GUID_ENTRY(CLSID_SBE2Sink, 0xe2448508, 0x95da, 0x4205, 0x9a, 0x27, 0x7e, 0xc8, 0x1e, 0x72, 0x3b, 0x1a) OUR_GUID_ENTRY(CLSID_SampleGrabber, 0xc1f400a0, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37) OUR_GUID_ENTRY(CLSID_SeekingPassThru, 0x060af76c, 0x68dd, 0x11d0, 0x8f, 0xc1, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d) OUR_GUID_ENTRY(CLSID_SimpleCutList, 0xa5ea8d30, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_SmartTee, 0xcc58e280, 0x8aa1, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_StreamBufferComposeRecording, 0xd682c4ba, 0xa90a, 0x42fe, 0xb9, 0xe1, 0x03, 0x10, 0x98, 0x49, 0xc4, 0x23) OUR_GUID_ENTRY(CLSID_StreamBufferConfig, 0xfa8a68b2, 0xc864, 0x4ba2, 0xad, 0x53, 0xd3, 0x87, 0x6a, 0x87, 0x49, 0x4b) OUR_GUID_ENTRY(CLSID_StreamBufferPropertyHandler, 0xe37a73f8, 0xfb01, 0x43dc, 0x91, 0x4e, 0xaa, 0xee, 0x76, 0x09, 0x5a, 0xb9) OUR_GUID_ENTRY(CLSID_StreamBufferRecordingAttributes,0xccaa63ac, 0x1057, 0x4778, 0xae, 0x92, 0x12, 0x06, 0xab, 0x9a, 0xce, 0xe6) OUR_GUID_ENTRY(CLSID_StreamBufferSink, 0x2db47ae5, 0xcf39, 0x43c2, 0xb4, 0xd6, 0x0c, 0xd8, 0xd9, 0x09, 0x46, 0xf4) OUR_GUID_ENTRY(CLSID_StreamBufferSource, 0xc9f5fe02, 0xf851, 0x4eb5, 0x99, 0xee, 0xad, 0x60, 0x2a, 0xf1, 0xe6, 0x19) OUR_GUID_ENTRY(CLSID_StreamBufferThumbnailHandler, 0x713790ee, 0x5ee1, 0x45ba, 0x80, 0x70, 0xa1, 0x33, 0x7d, 0x27, 0x62, 0xfa) OUR_GUID_ENTRY(CLSID_SubtitlesFilter, 0x9f22cfea, 0xce07, 0x41ab, 0x8b, 0xa0, 0xc7, 0x36, 0x4a, 0xf9, 0x0a, 0xf9) OUR_GUID_ENTRY(CLSID_SystemClock, 0xe436ebb1, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_SystemDeviceEnum, 0x62be5d10, 0x60eb, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_TVAudioFilterPropertyPage, 0x71f96463, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56) OUR_GUID_ENTRY(CLSID_TVEFilterCCProperties, 0x05500282, 0xfaa5, 0x4df9, 0x82, 0x46, 0xbf, 0xc2, 0x3a, 0xc5, 0xce, 0xa8) OUR_GUID_ENTRY(CLSID_TVEFilterStatsProperties, 0x05500283, 0xfaa5, 0x4df9, 0x82, 0x46, 0xbf, 0xc2, 0x3a, 0xc5, 0xce, 0xa8) OUR_GUID_ENTRY(CLSID_TVEFilterTuneProperties, 0x05500281, 0xfaa5, 0x4df9, 0x82, 0x46, 0xbf, 0xc2, 0x3a, 0xc5, 0xce, 0xa8) OUR_GUID_ENTRY(CLSID_TVTunerFilterPropertyPage, 0x266eee41, 0x6c63, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(CLSID_TextRender, 0xe30629d3, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66) OUR_GUID_ENTRY(CLSID_TransmitCategory, 0xcc7bfb41, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59) OUR_GUID_ENTRY(CLSID_URLReader, 0xe436ebb6, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(CLSID_VBISurfaces, 0x814b9800, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(CLSID_VPObject, 0xce292861, 0xfc88, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(CLSID_VPVBIObject, 0x814b9801, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(CLSID_VfwCapture, 0x1b544c22, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e) OUR_GUID_ENTRY(CLSID_VideoCompressorCategory, 0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_VideoFileClip, 0xa5ea8d31, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(CLSID_VideoInputDeviceCategory, 0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86) OUR_GUID_ENTRY(CLSID_VideoMixingRenderer, 0xb87beb7b, 0x8d29, 0x423f, 0xae, 0x4d, 0x65, 0x82, 0xc1, 0x01, 0x75, 0xac) OUR_GUID_ENTRY(CLSID_VideoMixingRenderer9, 0x51b4abf3, 0x748f, 0x4e3b, 0xa2, 0x76, 0xc8, 0x28, 0x33, 0x0e, 0x92, 0x6a) OUR_GUID_ENTRY(CLSID_VideoPortManager, 0x6f26a6cd, 0x967b, 0x47fd, 0x87, 0x4a, 0x7a, 0xed, 0x2c, 0x9d, 0x25, 0xa2) OUR_GUID_ENTRY(CLSID_VideoProcAmpPropertyPage, 0x71f96464, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56) OUR_GUID_ENTRY(CLSID_VideoRenderer, 0x70e102b0, 0x5556, 0x11ce, 0x97, 0xc0, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(CLSID_VideoRendererDefault, 0x6bc1cffa, 0x8fc1, 0x4261, 0xac, 0x22, 0xcf, 0xb4, 0xcc, 0x38, 0xdb, 0x50) OUR_GUID_ENTRY(CLSID_VideoStreamConfigPropertyPage, 0x71f96467, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56) OUR_GUID_ENTRY(CLSID_WAVEParser, 0xd51bd5a1, 0x7548, 0x11cf, 0xa5, 0x20, 0x00, 0x80, 0xc7, 0x7e, 0xf5, 0x8a) OUR_GUID_ENTRY(CLSID_WMAsfReader, 0x187463a0, 0x5bb7, 0x11d3, 0xac, 0xbe, 0x00, 0x80, 0xc7, 0x5e, 0x24, 0x6e) OUR_GUID_ENTRY(CLSID_WMAsfWriter, 0x7c23220e, 0x55bb, 0x11d3, 0x8b, 0x16, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d) OUR_GUID_ENTRY(CLSID_WSTDecoder, 0x70bc06e0, 0x5666, 0x11d3, 0xa1, 0x84, 0x00, 0x10, 0x5a, 0xef, 0x9f, 0x33) OUR_GUID_ENTRY(CLSID_WstDecoderPropertyPage, 0x04e27f80, 0x91e4, 0x11d3, 0xa1, 0x84, 0x00, 0x10, 0x5a, 0xef, 0x9f, 0x33) OUR_GUID_ENTRY(CODECAPI_ALLSETTINGS, 0x6a577e92, 0x83e1, 0x4113, 0xad, 0xc2, 0x4f, 0xce, 0xc3, 0x2f, 0x83, 0xa1) OUR_GUID_ENTRY(CODECAPI_AUDIO_ENCODER, 0xb9d19a3e, 0xf897, 0x429c, 0xbc, 0x46, 0x81, 0x38, 0xb7, 0x27, 0x2b, 0x2d) OUR_GUID_ENTRY(CODECAPI_AVDecMmcssClass, 0xe0ad4828, 0xdf66, 0x4893, 0x9f, 0x33, 0x78, 0x8a, 0xa4, 0xec, 0x40, 0x82) OUR_GUID_ENTRY(CODECAPI_CHANGELISTS, 0x62b12acf, 0xf6b0, 0x47d9, 0x94, 0x56, 0x96, 0xf2, 0x2c, 0x4e, 0x0b, 0x9d) OUR_GUID_ENTRY(CODECAPI_CURRENTCHANGELIST, 0x1cb14e83, 0x7d72, 0x4657, 0x83, 0xfd, 0x47, 0xa2, 0xc5, 0xb9, 0xd1, 0x3d) OUR_GUID_ENTRY(CODECAPI_SETALLDEFAULTS, 0x6c5e6a7c, 0xacf8, 0x4f55, 0xa9, 0x99, 0x1a, 0x62, 0x81, 0x09, 0x05, 0x1b) OUR_GUID_ENTRY(CODECAPI_SUPPORTSEVENTS, 0x0581af97, 0x7693, 0x4dbd, 0x9d, 0xca, 0x3f, 0x9e, 0xbd, 0x65, 0x85, 0xa1) OUR_GUID_ENTRY(CODECAPI_VIDEO_ENCODER, 0x7112e8e1, 0x3d03, 0x47ef, 0x8e, 0x60, 0x03, 0xf1, 0xcf, 0x53, 0x73, 0x01) OUR_GUID_ENTRY(DSATTRIB_CAPTURE_STREAMTIME, 0x0c1a5614, 0x30cd, 0x4f40, 0xbc, 0xbf, 0xd0, 0x3e, 0x52, 0x30, 0x62, 0x07) OUR_GUID_ENTRY(DSATTRIB_CC_CONTAINER_INFO, 0xe7e050fb, 0xdd5d, 0x40dd, 0x99, 0x15, 0x35, 0xdc, 0xb8, 0x1b, 0xdc, 0x8a) OUR_GUID_ENTRY(DSATTRIB_DSHOW_STREAM_DESC, 0x5fb5673b, 0x0a2a, 0x4565, 0x82, 0x7b, 0x68, 0x53, 0xfd, 0x75, 0xe6, 0x11) OUR_GUID_ENTRY(DSATTRIB_OptionalVideoAttributes, 0x5a5f08ca, 0x55c2, 0x4033, 0x92, 0xab, 0x55, 0xdb, 0x8f, 0x78, 0x12, 0x26) OUR_GUID_ENTRY(DSATTRIB_PBDATAG_ATTRIBUTE, 0xe0b56679, 0x12b9, 0x43cc, 0xb7, 0xdf, 0x57, 0x8c, 0xaa, 0x5a, 0x7b, 0x63) OUR_GUID_ENTRY(DSATTRIB_PicSampleSeq, 0x2f5bae02, 0x7b8f, 0x4f60, 0x82, 0xd6, 0xe4, 0xea, 0x2f, 0x1f, 0x4c, 0x99) OUR_GUID_ENTRY(DSATTRIB_SAMPLE_LIVE_STREAM_TIME, 0x892cd111, 0x72f3, 0x411d, 0x8b, 0x91, 0xa9, 0xe9, 0x12, 0x3a, 0xc2, 0x9a) OUR_GUID_ENTRY(DSATTRIB_TRANSPORT_PROPERTIES, 0xb622f612, 0x47ad, 0x4671, 0xad, 0x6c, 0x05, 0xa9, 0x8e, 0x65, 0xde, 0x3a) OUR_GUID_ENTRY(DSATTRIB_UDCRTag, 0xeb7836ca, 0x14ff, 0x4919, 0xbc, 0xe7, 0x3a, 0xf1, 0x23, 0x19, 0xe5, 0x0c) OUR_GUID_ENTRY(ENCAPIPARAM_BITRATE, 0x49cc4c43, 0xca83, 0x4ad4, 0xa9, 0xaf, 0xf3, 0x69, 0x6a, 0xf6, 0x66, 0xdf) OUR_GUID_ENTRY(ENCAPIPARAM_BITRATE_MODE, 0xee5fb25c, 0xc713, 0x40d1, 0x9d, 0x58, 0xc0, 0xd7, 0x24, 0x1e, 0x25, 0x0f) OUR_GUID_ENTRY(ENCAPIPARAM_PEAK_BITRATE, 0x703f16a9, 0x3d48, 0x44a1, 0xb0, 0x77, 0x01, 0x8d, 0xff, 0x91, 0x5d, 0x19) OUR_GUID_ENTRY(ENCAPIPARAM_SAP_MODE, 0x0c0171db, 0xfefc, 0x4af7, 0x99, 0x91, 0xa5, 0x65, 0x7c, 0x19, 0x1c, 0xd1) OUR_GUID_ENTRY(EVRConfig_AllowBatching, 0xe447df0a, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_AllowDropToBob, 0xe447df02, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_AllowDropToHalfInterlace, 0xe447df06, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_AllowDropToThrottle, 0xe447df04, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_AllowScaling, 0xe447df08, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_ForceBatching, 0xe447df09, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_ForceBob, 0xe447df01, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_ForceHalfInterlace, 0xe447df05, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_ForceScaling, 0xe447df07, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(EVRConfig_ForceThrottle, 0xe447df03, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c) OUR_GUID_ENTRY(FORMAT_525WSS, 0xc7ecf04d, 0x4582, 0x4869, 0x9a, 0xbb, 0xbf, 0xb5, 0x23, 0xb6, 0x2e, 0xdf) OUR_GUID_ENTRY(FORMAT_AnalogVideo, 0x0482dde0, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(FORMAT_CAPTIONED_H264VIDEO, 0xa4efc024, 0x873e, 0x4da3, 0x89, 0x8b, 0x47, 0x4d, 0xdb, 0xd7, 0x9f, 0xd0) OUR_GUID_ENTRY(FORMAT_CAPTIONED_MPEG2VIDEO, 0x7ab2ada2, 0x81b6, 0x4f14, 0xb3, 0xc8, 0xd0, 0xc4, 0x86, 0x39, 0x3b, 0x67) OUR_GUID_ENTRY(FORMAT_CC_CONTAINER, 0x50997a4a, 0xe508, 0x4054, 0xa2, 0xb2, 0x10, 0xff, 0x0a, 0xc1, 0xa6, 0x9a) OUR_GUID_ENTRY(FORMAT_DvInfo, 0x05589f84, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(FORMAT_MPEGStreams, 0x05589f83, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(FORMAT_MPEGVideo, 0x05589f82, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(FORMAT_None, 0x0f6417d6, 0xc318, 0x11d0, 0xa4, 0x3f, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) OUR_GUID_ENTRY(FORMAT_VideoInfo, 0x05589f80, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(FORMAT_VideoInfo2, 0xf72a76a0, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(FORMAT_WaveFormatEx, 0x05589f81, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(IID_IAMAudioCutListElement, 0xcde29524, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f) OUR_GUID_ENTRY(IID_IAMCutListElement, 0xcde29520, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f) OUR_GUID_ENTRY(IID_IAMDirectSound, 0x546f4260, 0xd53e, 0x11cf, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(IID_IAMFileCutListElement, 0xf0947070, 0x276c, 0x11d0, 0x83, 0x16, 0x00, 0x20, 0xaf, 0x11, 0xc0, 0x10) OUR_GUID_ENTRY(IID_IAMLine21Decoder, 0x6e8d4a21, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7) OUR_GUID_ENTRY(IID_IAMVideoCutListElement, 0xcde29522, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f) OUR_GUID_ENTRY(IID_IAMWstDecoder, 0xc056de21, 0x75c2, 0x11d3, 0xa1, 0x84, 0x00, 0x10, 0x5a, 0xef, 0x9f, 0x33) OUR_GUID_ENTRY(IID_IBaseVideoMixer, 0x61ded640, 0xe912, 0x11ce, 0xa0, 0x99, 0x00, 0xaa, 0x00, 0x47, 0x9a, 0x58) OUR_GUID_ENTRY(IID_ICutListGraphBuilder, 0xa5ea8d2c, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(IID_IDirectDrawVideo, 0x36d39eb0, 0xdd75, 0x11ce, 0xbf, 0x0e, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(IID_IFileClip, 0xa5ea8d2a, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(IID_IFullScreenVideo, 0xdd1d7110, 0x7836, 0x11cf, 0xbf, 0x47, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a) OUR_GUID_ENTRY(IID_IFullScreenVideoEx, 0x53479470, 0xf1dd, 0x11cf, 0xbc, 0x42, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6) OUR_GUID_ENTRY(IID_IMixerPinConfig, 0x593cdde1, 0x0759, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(IID_IMixerPinConfig2, 0xebf47182, 0x8764, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(IID_IMpegAudioDecoder, 0xb45dd570, 0x3c77, 0x11d1, 0xab, 0xe1, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75) OUR_GUID_ENTRY(IID_IQualProp, 0x1bd0ecb0, 0xf8e2, 0x11ce, 0xaa, 0xc6, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3) OUR_GUID_ENTRY(IID_IStandardCutList, 0xa5ea8d29, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(IID_IVPConfig, 0xbc29a660, 0x30e3, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(IID_IVPControl, 0x25df12c1, 0x3de0, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(IID_IVPNotify, 0xc76794a1, 0xd6c5, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(IID_IVPNotify2, 0xebf47183, 0x8764, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(IID_IVPObject, 0xce292862, 0xfc88, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b) OUR_GUID_ENTRY(IID_IVPVBIConfig, 0xec529b00, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(IID_IVPVBINotify, 0xec529b01, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(IID_IVPVBIObject, 0x814b9802, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(LOOK_DOWNSTREAM_ONLY, 0xac798be1, 0x98e3, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(LOOK_UPSTREAM_ONLY, 0xac798be0, 0x98e3, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5) OUR_GUID_ENTRY(MEDIASUBTYPE_420O, 0x4f303234, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_708_608Data, 0x0af414bc, 0x4ed2, 0x445e, 0x98, 0x39, 0x8f, 0x09, 0x55, 0x68, 0xab, 0x3c) OUR_GUID_ENTRY(MEDIASUBTYPE_A2B10G10R10, 0x576f7893, 0xbdf6, 0x48c4, 0x87, 0x5f, 0xae, 0x7b, 0x81, 0x83, 0x45, 0x67) OUR_GUID_ENTRY(MEDIASUBTYPE_A2R10G10B10, 0x2f8bb76d, 0xb644, 0x4550, 0xac, 0xf3, 0xd3, 0x0c, 0xaa, 0x65, 0xd5, 0xc5) OUR_GUID_ENTRY(MEDIASUBTYPE_AI44, 0x34344941, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_AIFF, 0xe436eb8d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555, 0x297c55af, 0xe209, 0x4cb3, 0xb7, 0x57, 0xc7, 0x6d, 0x6b, 0x9c, 0x88, 0xa8) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555_D3D_DX7_RT, 0x35314137, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555_D3D_DX9_RT, 0x35314139, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32, 0x773c9ac0, 0x3274, 0x11d0, 0xb7, 0x24, 0x00, 0xaa, 0x00, 0x6c, 0x1a, 0x01) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32_D3D_DX7_RT, 0x38384137, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32_D3D_DX9_RT, 0x38384139, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444, 0x6e6415e6, 0x5c24, 0x425f, 0x93, 0xcd, 0x80, 0x10, 0x2b, 0x3d, 0x1c, 0xca) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444_D3D_DX7_RT, 0x34344137, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444_D3D_DX9_RT, 0x34344139, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_AU, 0xe436eb8c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_AYUV, 0x56555941, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_NTSC_M, 0x0482dde2, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_B, 0x0482dde5, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_D, 0x0482dde6, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_G, 0x0482dde7, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_H, 0x0482dde8, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_I, 0x0482dde9, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_M, 0x0482ddea, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N, 0x0482ddeb, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N_COMBO, 0x0482ddec, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_B, 0x0482ddf0, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_D, 0x0482ddf1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_G, 0x0482ddf2, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_H, 0x0482ddf3, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K, 0x0482ddf4, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K1, 0x0482ddf5, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_L, 0x0482ddf6, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIASUBTYPE_Asf, 0x3db80f90, 0x9412, 0x11d1, 0xad, 0xed, 0x00, 0x00, 0xf8, 0x75, 0x4b, 0x99) OUR_GUID_ENTRY(MEDIASUBTYPE_Avi, 0xe436eb88, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_CC_CONTAINER, 0x7ea626db, 0x54da, 0x437b, 0xbe, 0x9f, 0xf7, 0x30, 0x73, 0xad, 0xfa, 0x3c) OUR_GUID_ENTRY(MEDIASUBTYPE_CFCC, 0x43434643, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_CLJR, 0x524a4c43, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_CLPL, 0x4c504c43, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_CPLA, 0x414c5043, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3_SPDIF, 0x00000092, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_DRM_Audio, 0x00000009, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SUBTITLES, 0x34ffcbc3, 0xd5b3, 0x4171, 0x90, 0x02, 0xd4, 0xc6, 0x03, 0x01, 0x69, 0x7f) OUR_GUID_ENTRY(MEDIASUBTYPE_DVCS, 0x53435644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_DVSD, 0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_DssAudio, 0xa0af4f82, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(MEDIASUBTYPE_DssVideo, 0xa0af4f81, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(MEDIASUBTYPE_DtvCcData, 0xf52addaa, 0x36f0, 0x43f5, 0x95, 0xea, 0x6d, 0x86, 0x64, 0x84, 0x26, 0x2a) OUR_GUID_ENTRY(MEDIASUBTYPE_H264, 0x34363248, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_IA44, 0x34344149, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_IEEE_FLOAT, 0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_IF09, 0x39304649, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_IJPG, 0x47504a49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_IMC1, 0x31434d49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_IMC2, 0x32434d49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_IMC3, 0x33434d49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_IMC4, 0x34434d49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_ISDB_CAPTIONS, 0x059dd67d, 0x2e55, 0x4d41, 0x8d, 0x1b, 0x01, 0xf5, 0xe4, 0xf5, 0x06, 0x07) OUR_GUID_ENTRY(MEDIASUBTYPE_ISDB_SUPERIMPOSE, 0x36dc6d28, 0xf1a6, 0x4216, 0x90, 0x48, 0x9c, 0xfc, 0xef, 0xeb, 0x5e, 0xba) OUR_GUID_ENTRY(MEDIASUBTYPE_IYUV, 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_BytePair, 0x6e8d4a22, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7) OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_GOPPacket, 0x6e8d4a23, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7) OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_VBIRawData, 0x6e8d4a24, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7) OUR_GUID_ENTRY(MEDIASUBTYPE_MDVF, 0x4656444d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_MJPG, 0x47504a4d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Audio, 0xe436eb87, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1AudioPayload, 0x00000050, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Packet, 0xe436eb80, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Payload, 0xe436eb81, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1System, 0xe436eb84, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Video, 0xe436eb86, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1VideoCD, 0xe436eb85, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_NV11, 0x3131564e, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_NV12, 0x3231564e, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_NV24, 0x3432564e, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_None, 0xe436eb8e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_Overlay, 0xe436eb7f, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_P010, 0x30313050, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_P016, 0x36313050, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_P208, 0x38303250, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_P210, 0x30313250, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_P216, 0x36313250, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_P408, 0x38304250, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_PCM, 0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_PCMAudio_Obsolete, 0xe436eb8a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_Plum, 0x6d756c50, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_QTJpeg, 0x6765706a, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_QTMovie, 0xe436eb89, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_QTRle, 0x20656c72, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_QTRpza, 0x617a7072, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_QTSmc, 0x20636d73, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_RAW_SPORT, 0x00000240, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB1, 0xe436eb78, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB16_D3D_DX7_RT, 0x36315237, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB16_D3D_DX9_RT, 0x36315239, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB24, 0xe436eb7d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32, 0xe436eb7e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32_D3D_DX7_RT, 0x32335237, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32_D3D_DX9_RT, 0x32335239, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB4, 0xe436eb79, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB555, 0xe436eb7c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB565, 0xe436eb7b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_RGB8, 0xe436eb7a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_S340, 0x30343353, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_S342, 0x32343353, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_SPDIF_TAG_241h, 0x00000241, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_TELETEXT, 0xf72a76e3, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(MEDIASUBTYPE_TVMJ, 0x4a4d5654, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_UYVY, 0x59565955, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_VBI, 0x663da43c, 0x03e8, 0x4e9a, 0x9c, 0xd5, 0xbf, 0x11, 0xed, 0x0d, 0xef, 0x76) OUR_GUID_ENTRY(MEDIASUBTYPE_VPS, 0xa1b3f620, 0x9792, 0x4d8d, 0x81, 0xa4, 0x86, 0xaf, 0x25, 0x77, 0x20, 0x90) OUR_GUID_ENTRY(MEDIASUBTYPE_VPVBI, 0x5a9b6a41, 0x1a22, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(MEDIASUBTYPE_VPVideo, 0x5a9b6a40, 0x1a22, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a) OUR_GUID_ENTRY(MEDIASUBTYPE_WAKE, 0x454b4157, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_WAVE, 0xe436eb8b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIASUBTYPE_WSS, 0x2791d576, 0x8e7a, 0x466f, 0x9e, 0x90, 0x5d, 0x3f, 0x30, 0x83, 0x73, 0x8b) OUR_GUID_ENTRY(MEDIASUBTYPE_XDS, 0x01ca73e3, 0xdce6, 0x4575, 0xaf, 0xe1, 0x2b, 0xf1, 0xc9, 0x02, 0xca, 0xf3) OUR_GUID_ENTRY(MEDIASUBTYPE_Y210, 0x30313259, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_Y211, 0x31313259, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_Y216, 0x36313259, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_Y411, 0x31313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_Y41P, 0x50313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_YUY2, 0x32595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_YUYV, 0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_YV12, 0x32315659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_YVU9, 0x39555659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_YVYU, 0x55595659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_dv25, 0x35327664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_dv50, 0x30357664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_dvh1, 0x31687664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_dvhd, 0x64687664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_dvsd, 0x64737664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIASUBTYPE_dvsl, 0x6c737664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_AUXLine21Data, 0x670aea80, 0x3a82, 0x11d0, 0xb7, 0x9b, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7) OUR_GUID_ENTRY(MEDIATYPE_AUXTeletextPage, 0x11264acb, 0x37de, 0x4eba, 0x8c, 0x35, 0x7f, 0x04, 0xa1, 0xa6, 0x83, 0x32) OUR_GUID_ENTRY(MEDIATYPE_AnalogAudio, 0x0482dee1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIATYPE_AnalogVideo, 0x0482dde1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIATYPE_Audio, 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_CC_CONTAINER, 0xaeb312e9, 0x3357, 0x43ca, 0xb7, 0x01, 0x97, 0xec, 0x19, 0x8e, 0x2b, 0x62) OUR_GUID_ENTRY(MEDIATYPE_DTVCCData, 0xfb77e152, 0x53b2, 0x499c, 0xb4, 0x6b, 0x50, 0x9f, 0xc3, 0x3e, 0xdf, 0xd7) OUR_GUID_ENTRY(MEDIATYPE_File, 0x656c6966, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_Interleaved, 0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_LMRT, 0x74726c6d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_MPEG1SystemStream, 0xe436eb82, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIATYPE_MSTVCaption, 0xb88b8a89, 0xb049, 0x4c80, 0xad, 0xcf, 0x58, 0x98, 0x98, 0x5e, 0x22, 0xc1) OUR_GUID_ENTRY(MEDIATYPE_Midi, 0x7364696d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_ScriptCommand, 0x73636d64, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_Stream, 0xe436eb83, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70) OUR_GUID_ENTRY(MEDIATYPE_Text, 0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_Timecode, 0x0482dee3, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65) OUR_GUID_ENTRY(MEDIATYPE_URL_STREAM, 0x736c7275, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(MEDIATYPE_VBI, 0xf72a76e1, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(MEDIATYPE_Video, 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71) OUR_GUID_ENTRY(PIN_CATEGORY_ANALOGVIDEOIN, 0xfb6c4283, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_CAPTURE, 0xfb6c4281, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_CC, 0xfb6c4289, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_EDS, 0xfb6c4287, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_NABTS, 0xfb6c4286, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_PREVIEW, 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_STILL, 0xfb6c428a, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_TELETEXT, 0xfb6c4288, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_TIMECODE, 0xfb6c428b, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_VBI, 0xfb6c4284, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT, 0xfb6c4285, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT_VBI, 0xfb6c428c, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba) OUR_GUID_ENTRY(TIME_FORMAT_BYTE, 0x7b785571, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6) OUR_GUID_ENTRY(TIME_FORMAT_FIELD, 0x7b785573, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6) OUR_GUID_ENTRY(TIME_FORMAT_FRAME, 0x7b785570, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6) OUR_GUID_ENTRY(TIME_FORMAT_MEDIA_TIME, 0x7b785574, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6) OUR_GUID_ENTRY(TIME_FORMAT_NONE, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) OUR_GUID_ENTRY(TIME_FORMAT_SAMPLE, 0x7b785572, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6) OUR_GUID_ENTRY(UUID_UdriTagTables, 0xe1b98d74, 0x9778, 0x4878, 0xb6, 0x64, 0xeb, 0x20, 0x20, 0x36, 0x4d, 0x88) OUR_GUID_ENTRY(UUID_WMDRMTagTables, 0x5dcd1101, 0x9263, 0x45bb, 0xa4, 0xd5, 0xc4, 0x15, 0xab, 0x8c, 0x58, 0x9c) #include #undef OUR_GUID_ENTRY ================================================ FILE: wine/windows/uxtheme.h ================================================ /* * Win32 5.1 theme definitions * * Copyright (C) 2003 Kevin Koltzau * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_UXTHEME_H #define __WINE_UXTHEME_H #include typedef HANDLE HTHEME; HRESULT WINAPI CloseThemeData(HTHEME hTheme); HRESULT WINAPI DrawThemeBackground(HTHEME,HDC,int,int,const RECT*,const RECT*); #define DTBG_CLIPRECT 0x00000001 #define DTBG_DRAWSOLID 0x00000002 #define DTBG_OMITBORDER 0x00000004 #define DTBG_OMITCONTENT 0x00000008 #define DTBG_COMPUTINGREGION 0x00000010 #define DTBG_MIRRORDC 0x00000020 typedef struct _DTBGOPTS { DWORD dwSize; DWORD dwFlags; RECT rcClip; } DTBGOPTS, *PDTBGOPTS; HRESULT WINAPI DrawThemeBackgroundEx(HTHEME,HDC,int,int,const RECT*, const DTBGOPTS*); HRESULT WINAPI DrawThemeEdge(HTHEME,HDC,int,int,const RECT*,UINT,UINT, RECT*); HRESULT WINAPI DrawThemeIcon(HTHEME,HDC,int,int,const RECT*,HIMAGELIST,int); HRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*); #define DTT_GRAYED 0x1 HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD, const RECT*); /* DTTOPTS.dwFlags bits */ #define DTT_TEXTCOLOR 0x00000001 #define DTT_BORDERCOLOR 0x00000002 #define DTT_SHADOWCOLOR 0x00000004 #define DTT_SHADOWTYPE 0x00000008 #define DTT_SHADOWOFFSET 0x00000010 #define DTT_BORDERSIZE 0x00000020 #define DTT_FONTPROP 0x00000040 #define DTT_COLORPROP 0x00000080 #define DTT_STATEID 0x00000100 #define DTT_CALCRECT 0x00000200 #define DTT_APPLYOVERLAY 0x00000400 #define DTT_GLOWSIZE 0x00000800 #define DTT_CALLBACK 0x00001000 #define DTT_COMPOSITED 0x00002000 #define DTT_VALIDBITS 0x00003fff typedef int (WINAPI *DTT_CALLBACK_PROC)(HDC,LPWSTR,int,RECT*,UINT,LPARAM); typedef struct _DTTOPTS { DWORD dwSize; DWORD dwFlags; COLORREF crText; COLORREF crBorder; COLORREF crShadow; int iTextShadowType; POINT ptShadowOffset; int iBorderSize; int iFontPropId; int iColorPropId; int iStateId; BOOL fApplyOverlay; int iGlowSize; DTT_CALLBACK_PROC pfnDrawTextCallback; LPARAM lParam; } DTTOPTS, *PDTTOPTS; HRESULT WINAPI DrawThemeTextEx(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,RECT*, const DTTOPTS*); #define ETDT_DISABLE 0x00000001 #define ETDT_ENABLE 0x00000002 #define ETDT_USETABTEXTURE 0x00000004 #define ETDT_ENABLETAB (ETDT_ENABLE|ETDT_USETABTEXTURE) HRESULT WINAPI EnableThemeDialogTexture(HWND,DWORD); HRESULT WINAPI EnableTheming(BOOL); HRESULT WINAPI GetCurrentThemeName(LPWSTR,int,LPWSTR,int,LPWSTR,int); #define STAP_ALLOW_NONCLIENT (1<<0) #define STAP_ALLOW_CONTROLS (1<<1) #define STAP_ALLOW_WEBCONTENT (1<<2) DWORD WINAPI GetThemeAppProperties(void); HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME,HDC,int,int, const RECT*,RECT*); HRESULT WINAPI GetThemeBackgroundExtent(HTHEME,HDC,int,int,const RECT*,RECT*); HRESULT WINAPI GetThemeBackgroundRegion(HTHEME,HDC,int,int,const RECT*,HRGN*); HRESULT WINAPI GetThemeBool(HTHEME,int,int,int,BOOL*); HRESULT WINAPI GetThemeColor(HTHEME,int,int,int,COLORREF*); #if defined(__GNUC__) # define SZ_THDOCPROP_DISPLAYNAME (const WCHAR []){ 'D','i','s','p','l','a','y','N','a','m','e',0 } # define SZ_THDOCPROP_CANONICALNAME (const WCHAR []){ 'T','h','e','m','e','N','a','m','e',0 } # define SZ_THDOCPROP_TOOLTIP (const WCHAR []){ 'T','o','o','l','T','i','p',0 } # define SZ_THDOCPROP_AUTHOR (const WCHAR []){ 'a','u','t','h','o','r',0 } #elif defined(_MSC_VER) # define SZ_THDOCPROP_DISPLAYNAME L"DisplayName" # define SZ_THDOCPROP_CANONICALNAME L"ThemeName" # define SZ_THDOCPROP_TOOLTIP L"ToolTip" # define SZ_THDOCPROP_AUTHOR L"author" #else static const WCHAR SZ_THDOCPROP_DISPLAYNAME[] = { 'D','i','s','p','l','a','y','N','a','m','e',0 }; static const WCHAR SZ_THDOCPROP_CANONICALNAME[] = { 'T','h','e','m','e','N','a','m','e',0 }; static const WCHAR SZ_THDOCPROP_TOOLTIP[] = { 'T','o','o','l','T','i','p',0 }; static const WCHAR SZ_THDOCPROP_AUTHOR[] = { 'a','u','t','h','o','r',0 }; #endif HRESULT WINAPI GetThemeDocumentationProperty(LPCWSTR,LPCWSTR,LPWSTR,int); HRESULT WINAPI GetThemeEnumValue(HTHEME,int,int,int,int*); HRESULT WINAPI GetThemeFilename(HTHEME,int,int,int,LPWSTR,int); HRESULT WINAPI GetThemeFont(HTHEME,HDC,int,int,int,LOGFONTW*); HRESULT WINAPI GetThemeInt(HTHEME,int,int,int,int*); /* MAX_INTLIST_COUNT was 10 before Vista */ #define MAX_INTLIST_COUNT 402 typedef struct _INTLIST { int iValueCount; int iValues[MAX_INTLIST_COUNT]; } INTLIST, *PINTLIST; HRESULT WINAPI GetThemeIntList(HTHEME,int,int,int,INTLIST*); typedef struct _MARGINS { int cxLeftWidth; int cxRightWidth; int cyTopHeight; int cyBottomHeight; } MARGINS, *PMARGINS; HRESULT WINAPI GetThemeMargins(HTHEME,HDC,int,int,int,RECT*,MARGINS*); HRESULT WINAPI GetThemeMetric(HTHEME,HDC,int,int,int,int*); typedef enum { TS_MIN, TS_TRUE, TS_DRAW } THEMESIZE; HRESULT WINAPI GetThemePartSize(HTHEME,HDC,int,int,RECT*,THEMESIZE,SIZE*); HRESULT WINAPI GetThemePosition(HTHEME,int,int,int,POINT*); typedef enum { PO_STATE, PO_PART, PO_CLASS, PO_GLOBAL, PO_NOTFOUND } PROPERTYORIGIN; HRESULT WINAPI GetThemePropertyOrigin(HTHEME,int,int,int,PROPERTYORIGIN*); HRESULT WINAPI GetThemeRect(HTHEME,int,int,int,RECT*); HRESULT WINAPI GetThemeString(HTHEME,int,int,int,LPWSTR,int); BOOL WINAPI GetThemeSysBool(HTHEME,int); COLORREF WINAPI GetThemeSysColor(HTHEME,int); HBRUSH WINAPI GetThemeSysColorBrush(HTHEME,int); HRESULT WINAPI GetThemeSysFont(HTHEME,int,LOGFONTW*); HRESULT WINAPI GetThemeSysInt(HTHEME,int,int*); int WINAPI GetThemeSysSize(HTHEME,int); HRESULT WINAPI GetThemeSysString(HTHEME,int,LPWSTR,int); HRESULT WINAPI GetThemeTextExtent(HTHEME,HDC,int,int,LPCWSTR,int,DWORD, const RECT*,RECT*); HRESULT WINAPI GetThemeTextMetrics(HTHEME,HDC,int,int,TEXTMETRICW*); HRESULT WINAPI GetThemeTransitionDuration(HTHEME,int,int,int,int,DWORD*); HTHEME WINAPI GetWindowTheme(HWND); #define HTTB_BACKGROUNDSEG 0x0000 #define HTTB_FIXEDBORDER 0x0002 #define HTTB_CAPTION 0x0004 #define HTTB_RESIZINGBORDER_LEFT 0x0010 #define HTTB_RESIZINGBORDER_TOP 0x0020 #define HTTB_RESIZINGBORDER_RIGHT 0x0040 #define HTTB_RESIZINGBORDER_BOTTOM 0x0080 #define HTTB_RESIZINGBORDER \ (HTTB_RESIZINGBORDER_LEFT|HTTB_RESIZINGBORDER_TOP|\ HTTB_RESIZINGBORDER_RIGHT|HTTB_RESIZINGBORDER_BOTTOM) #define HTTB_SIZINGTEMPLATE 0x0100 #define HTTB_SYSTEMSIZINGMARGINS 0x0200 #define OTD_FORCE_RECT_SIZING 0x0001 #define OTD_NONCLIENT 0x0002 #define OTD_VALIDBITS (OTD_FORCE_RECT_SIZING | OTD_NONCLIENT) enum WINDOWTHEMEATTRIBUTETYPE { WTA_NONCLIENT = 1 }; HRESULT WINAPI HitTestThemeBackground(HTHEME,HDC,int,int,DWORD,const RECT*, HRGN,POINT,WORD*); BOOL WINAPI IsAppThemed(void); BOOL WINAPI IsCompositionActive(void); BOOL WINAPI IsThemeActive(void); BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME,int,int); BOOL WINAPI IsThemeDialogTextureEnabled(HWND); BOOL WINAPI IsThemePartDefined(HTHEME,int,int); HTHEME WINAPI OpenThemeData(HWND,LPCWSTR); HTHEME WINAPI OpenThemeDataEx(HWND,LPCWSTR,DWORD); void WINAPI SetThemeAppProperties(DWORD); HRESULT WINAPI SetWindowTheme(HWND,LPCWSTR,LPCWSTR); HRESULT WINAPI SetWindowThemeAttribute(HWND,enum WINDOWTHEMEATTRIBUTETYPE,PVOID,DWORD); /* Double-buffered Drawing API */ typedef HANDLE HPAINTBUFFER; HRESULT WINAPI BufferedPaintInit(VOID); HRESULT WINAPI BufferedPaintUnInit(VOID); typedef enum _BP_BUFFERFORMAT { BPBF_COMPATIBLEBITMAP, BPBF_DIB, BPBF_TOPDOWNDIB, BPBF_TOPDOWNMONODIB } BP_BUFFERFORMAT; typedef struct _BP_PAINTPARAMS { DWORD cbSize; DWORD dwFlags; const RECT *prcExclude; const BLENDFUNCTION *pBlendFunction; } BP_PAINTPARAMS, *PBP_PAINTPARAMS; HPAINTBUFFER WINAPI BeginBufferedPaint(HDC, const RECT *, BP_BUFFERFORMAT, BP_PAINTPARAMS *,HDC *); HRESULT WINAPI EndBufferedPaint(HPAINTBUFFER, BOOL); HRESULT WINAPI BufferedPaintClear(HPAINTBUFFER, const RECT *); HRESULT WINAPI BufferedPaintSetAlpha(HPAINTBUFFER, const RECT *, BYTE); HRESULT WINAPI GetBufferedPaintBits(HPAINTBUFFER, RGBQUAD **, int *); HDC WINAPI GetBufferedPaintDC(HPAINTBUFFER); HDC WINAPI GetBufferedPaintTargetDC(HPAINTBUFFER); HRESULT WINAPI GetBufferedPaintTargetRect(HPAINTBUFFER, RECT *prc); /* double-buffered animation functions */ typedef HANDLE HANIMATIONBUFFER; typedef enum _BP_ANIMATIONSTYLE { BPAS_NONE, BPAS_LINEAR, BPAS_CUBIC, BPAS_SINE } BP_ANIMATIONSTYLE; typedef struct _BP_ANIMATIONPARAMS { DWORD cbSize; DWORD dwFlags; BP_ANIMATIONSTYLE style; DWORD dwDuration; } BP_ANIMATIONPARAMS, *PBP_ANIMATIONPARAMS; HANIMATIONBUFFER WINAPI BeginBufferedAnimation(HWND, HDC, const RECT *, BP_BUFFERFORMAT, BP_PAINTPARAMS *, BP_ANIMATIONPARAMS *, HDC *, HDC *); BOOL WINAPI BufferedPaintRenderAnimation(HWND, HDC); HRESULT WINAPI BufferedPaintStopAllAnimations(HWND); HRESULT WINAPI EndBufferedAnimation(HANIMATIONBUFFER, BOOL); #endif ================================================ FILE: wine/windows/vdmdbg.h ================================================ /* * VDMDBG definitions * * Copyright (C) 2007 James Hawkins * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_VDMDBG_H #define __WINE_VDMDBG_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef BOOL (WINAPI *PROCESSENUMPROC)(DWORD, DWORD, LPARAM); typedef BOOL (WINAPI *TASKENUMPROC)(DWORD, WORD, WORD, LPARAM); typedef BOOL (WINAPI *TASKENUMPROCEX)(DWORD, WORD, WORD, PSZ, PSZ, LPARAM); INT WINAPI VDMEnumProcessWOW(PROCESSENUMPROC, LPARAM); INT WINAPI VDMEnumTaskWOW(DWORD, TASKENUMPROC, LPARAM); INT WINAPI VDMEnumTaskWOWEx(DWORD, TASKENUMPROCEX, LPARAM); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_VDMDBG_H */ ================================================ FILE: wine/windows/ver.h ================================================ /* Definitions for the VERsion infolibrary (VER.DLL) * * Copyright 1996 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * Marked as obsolete: Albert den Haan (Corel Corp) 1999-04-28 * VER.H obsolete, include winver.h instead */ #ifndef __WINE_VER_H #define __WINE_VER_H #include #endif /* __WINE_VER_H */ ================================================ FILE: wine/windows/verrsrc.h ================================================ /* Definitions for the VERsion info library (VER.DLL) * * Copyright 1996 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_VERRSRC_H #define __WINE_VERRSRC_H /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */ #ifndef __MSABI_LONG # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) # define __MSABI_LONG(x) x ## l # else # define __MSABI_LONG(x) x # endif #endif /* resource ids for different version infos */ #define VS_FILE_INFO RT_VERSION #define VS_VERSION_INFO 1 #define VS_USER_DEFINED 100 #define VS_FFI_SIGNATURE __MSABI_LONG(0xfeef04bd) /* FileInfo Magic */ #define VS_FFI_STRUCVERSION __MSABI_LONG(0x00010000) /* struc version 1.0 */ #define VS_FFI_FILEFLAGSMASK __MSABI_LONG(0x0000003f) /* valid flags */ /* VS_VERSION.dwFileFlags */ #define VS_FF_DEBUG __MSABI_LONG(0x01) #define VS_FF_PRERELEASE __MSABI_LONG(0x02) #define VS_FF_PATCHED __MSABI_LONG(0x04) #define VS_FF_PRIVATEBUILD __MSABI_LONG(0x08) #define VS_FF_INFOINFERRED __MSABI_LONG(0x10) #define VS_FF_SPECIALBUILD __MSABI_LONG(0x20) /* VS_VERSION.dwFileOS */ /* major os version */ #define VOS_UNKNOWN __MSABI_LONG(0x00000000) #define VOS_DOS __MSABI_LONG(0x00010000) #define VOS_OS216 __MSABI_LONG(0x00020000) #define VOS_OS232 __MSABI_LONG(0x00030000) #define VOS_NT __MSABI_LONG(0x00040000) #define VOS_WINCE __MSABI_LONG(0x00050000) /* minor os version */ #define VOS__BASE __MSABI_LONG(0x00000000) #define VOS__WINDOWS16 __MSABI_LONG(0x00000001) #define VOS__PM16 __MSABI_LONG(0x00000002) #define VOS__PM32 __MSABI_LONG(0x00000003) #define VOS__WINDOWS32 __MSABI_LONG(0x00000004) /* possible versions */ #define VOS_DOS_WINDOWS16 (VOS_DOS|VOS__WINDOWS16) #define VOS_DOS_WINDOWS32 (VOS_DOS|VOS__WINDOWS32) #define VOS_OS216_PM16 (VOS_OS216|VOS__PM16) #define VOS_OS232_PM32 (VOS_OS232|VOS__PM32) #define VOS_NT_WINDOWS32 (VOS_NT|VOS__WINDOWS32) /* VS_VERSION.dwFileType */ #define VFT_UNKNOWN __MSABI_LONG(0x00000000) #define VFT_APP __MSABI_LONG(0x00000001) #define VFT_DLL __MSABI_LONG(0x00000002) #define VFT_DRV __MSABI_LONG(0x00000003) #define VFT_FONT __MSABI_LONG(0x00000004) #define VFT_VXD __MSABI_LONG(0x00000005) /* ??one type missing?? __MSABI_LONG(0x00000006) -Marcus */ #define VFT_STATIC_LIB __MSABI_LONG(0x00000007) /* VS_VERSION.dwFileSubtype for VFT_DRV */ #define VFT2_UNKNOWN __MSABI_LONG(0x00000000) #define VFT2_DRV_PRINTER __MSABI_LONG(0x00000001) #define VFT2_DRV_KEYBOARD __MSABI_LONG(0x00000002) #define VFT2_DRV_LANGUAGE __MSABI_LONG(0x00000003) #define VFT2_DRV_DISPLAY __MSABI_LONG(0x00000004) #define VFT2_DRV_MOUSE __MSABI_LONG(0x00000005) #define VFT2_DRV_NETWORK __MSABI_LONG(0x00000006) #define VFT2_DRV_SYSTEM __MSABI_LONG(0x00000007) #define VFT2_DRV_INSTALLABLE __MSABI_LONG(0x00000008) #define VFT2_DRV_SOUND __MSABI_LONG(0x00000009) #define VFT2_DRV_COMM __MSABI_LONG(0x0000000a) #define VFT2_DRV_INPUTMETHOD __MSABI_LONG(0x0000000b) #define VFT2_DRV_VERSIONED_PRINTER __MSABI_LONG(0x0000000c) /* VS_VERSION.dwFileSubtype for VFT_FONT */ #define VFT2_FONT_RASTER __MSABI_LONG(0x00000001) #define VFT2_FONT_VECTOR __MSABI_LONG(0x00000002) #define VFT2_FONT_TRUETYPE __MSABI_LONG(0x00000003) /* VerFindFile Flags */ /* input */ #define VFFF_ISSHAREDFILE 0x0001 /* output (returned) */ #define VFF_CURNEDEST 0x0001 #define VFF_FILEINUSE 0x0002 #define VFF_BUFFTOOSMALL 0x0004 /* VerInstallFile Flags */ /* input */ #define VIFF_FORCEINSTALL 0x0001 #define VIFF_DONTDELETEOLD 0x0002 /* output (return) */ #define VIF_TEMPFILE __MSABI_LONG(0x00000001) #define VIF_MISMATCH __MSABI_LONG(0x00000002) #define VIF_SRCOLD __MSABI_LONG(0x00000004) #define VIF_DIFFLANG __MSABI_LONG(0x00000008) #define VIF_DIFFCODEPG __MSABI_LONG(0x00000010) #define VIF_DIFFTYPE __MSABI_LONG(0x00000020) #define VIF_WRITEPROT __MSABI_LONG(0x00000040) #define VIF_FILEINUSE __MSABI_LONG(0x00000080) #define VIF_OUTOFSPACE __MSABI_LONG(0x00000100) #define VIF_ACCESSVIOLATION __MSABI_LONG(0x00000200) #define VIF_SHARINGVIOLATION __MSABI_LONG(0x00000400) #define VIF_CANNOTCREATE __MSABI_LONG(0x00000800) #define VIF_CANNOTDELETE __MSABI_LONG(0x00001000) #define VIF_CANNOTRENAME __MSABI_LONG(0x00002000) #define VIF_CANNOTDELETECUR __MSABI_LONG(0x00004000) #define VIF_OUTOFMEMORY __MSABI_LONG(0x00008000) #define VIF_CANNOTREADSRC __MSABI_LONG(0x00010000) #define VIF_CANNOTREADDST __MSABI_LONG(0x00020000) #define VIF_BUFFTOOSMALL __MSABI_LONG(0x00040000) #define VIF_CANNOTLOADLZ32 __MSABI_LONG(0x00080000) #define VIF_CANNOTLOADCABINET __MSABI_LONG(0x00100000) #ifndef RC_INVOKED #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #define FILE_VER_GET_LOCALISED 0x01 #define FILE_VER_GET_NEUTRAL 0x02 #define FILE_VER_GET_PREFETCHED 0x04 typedef struct tagVS_FIXEDFILEINFO { DWORD dwSignature; DWORD dwStrucVersion; DWORD dwFileVersionMS; DWORD dwFileVersionLS; DWORD dwProductVersionMS; DWORD dwProductVersionLS; DWORD dwFileFlagsMask; DWORD dwFileFlags; DWORD dwFileOS; DWORD dwFileType; DWORD dwFileSubtype; DWORD dwFileDateMS; DWORD dwFileDateLS; } VS_FIXEDFILEINFO; #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* RC_INVOKED */ #endif /* __WINE_VERRSRC_H */ ================================================ FILE: wine/windows/vfw.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_VFW_H #define __WINE_VFW_H #include #include #include #define VFWAPI WINAPI #define VFWAPIV WINAPIV #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef HANDLE HDRAWDIB; /***************************************************************************** * Predeclare the interfaces */ typedef struct IAVIStream *PAVISTREAM; typedef struct IAVIFile *PAVIFILE; typedef struct IGetFrame *PGETFRAME; typedef struct IAVIEditStream *PAVIEDITSTREAM; /* Installable Compressor Manager */ #define ICVERSION 0x0104 DECLARE_HANDLE(HIC); /* error return codes */ #define ICERR_OK 0 #define ICERR_DONTDRAW 1 #define ICERR_NEWPALETTE 2 #define ICERR_GOTOKEYFRAME 3 #define ICERR_STOPDRAWING 4 #define ICERR_UNSUPPORTED -1 #define ICERR_BADFORMAT -2 #define ICERR_MEMORY -3 #define ICERR_INTERNAL -4 #define ICERR_BADFLAGS -5 #define ICERR_BADPARAM -6 #define ICERR_BADSIZE -7 #define ICERR_BADHANDLE -8 #define ICERR_CANTUPDATE -9 #define ICERR_ABORT -10 #define ICERR_ERROR -100 #define ICERR_BADBITDEPTH -200 #define ICERR_BADIMAGESIZE -201 #define ICERR_CUSTOM -400 /* ICM Messages */ #define ICM_USER (DRV_USER+0x0000) /* ICM driver message range */ #define ICM_RESERVED_LOW (DRV_USER+0x1000) #define ICM_RESERVED_HIGH (DRV_USER+0x2000) #define ICM_RESERVED ICM_RESERVED_LOW #define ICM_GETSTATE (ICM_RESERVED+0) #define ICM_SETSTATE (ICM_RESERVED+1) #define ICM_GETINFO (ICM_RESERVED+2) #define ICM_CONFIGURE (ICM_RESERVED+10) #define ICM_ABOUT (ICM_RESERVED+11) /* */ #define ICM_GETDEFAULTQUALITY (ICM_RESERVED+30) #define ICM_GETQUALITY (ICM_RESERVED+31) #define ICM_SETQUALITY (ICM_RESERVED+32) #define ICM_SET (ICM_RESERVED+40) #define ICM_GET (ICM_RESERVED+41) /* 2 constant FOURCC codes */ #define ICM_FRAMERATE mmioFOURCC('F','r','m','R') #define ICM_KEYFRAMERATE mmioFOURCC('K','e','y','R') #define ICM_COMPRESS_GET_FORMAT (ICM_USER+4) #define ICM_COMPRESS_GET_SIZE (ICM_USER+5) #define ICM_COMPRESS_QUERY (ICM_USER+6) #define ICM_COMPRESS_BEGIN (ICM_USER+7) #define ICM_COMPRESS (ICM_USER+8) #define ICM_COMPRESS_END (ICM_USER+9) #define ICM_DECOMPRESS_GET_FORMAT (ICM_USER+10) #define ICM_DECOMPRESS_QUERY (ICM_USER+11) #define ICM_DECOMPRESS_BEGIN (ICM_USER+12) #define ICM_DECOMPRESS (ICM_USER+13) #define ICM_DECOMPRESS_END (ICM_USER+14) #define ICM_DECOMPRESS_SET_PALETTE (ICM_USER+29) #define ICM_DECOMPRESS_GET_PALETTE (ICM_USER+30) #define ICM_DRAW_QUERY (ICM_USER+31) #define ICM_DRAW_BEGIN (ICM_USER+15) #define ICM_DRAW_GET_PALETTE (ICM_USER+16) #define ICM_DRAW_START (ICM_USER+18) #define ICM_DRAW_STOP (ICM_USER+19) #define ICM_DRAW_END (ICM_USER+21) #define ICM_DRAW_GETTIME (ICM_USER+32) #define ICM_DRAW (ICM_USER+33) #define ICM_DRAW_WINDOW (ICM_USER+34) #define ICM_DRAW_SETTIME (ICM_USER+35) #define ICM_DRAW_REALIZE (ICM_USER+36) #define ICM_DRAW_FLUSH (ICM_USER+37) #define ICM_DRAW_RENDERBUFFER (ICM_USER+38) #define ICM_DRAW_START_PLAY (ICM_USER+39) #define ICM_DRAW_STOP_PLAY (ICM_USER+40) #define ICM_DRAW_SUGGESTFORMAT (ICM_USER+50) #define ICM_DRAW_CHANGEPALETTE (ICM_USER+51) #define ICM_GETBUFFERSWANTED (ICM_USER+41) #define ICM_GETDEFAULTKEYFRAMERATE (ICM_USER+42) #define ICM_DECOMPRESSEX_BEGIN (ICM_USER+60) #define ICM_DECOMPRESSEX_QUERY (ICM_USER+61) #define ICM_DECOMPRESSEX (ICM_USER+62) #define ICM_DECOMPRESSEX_END (ICM_USER+63) #define ICM_COMPRESS_FRAMES_INFO (ICM_USER+70) #define ICM_SET_STATUS_PROC (ICM_USER+72) #ifndef comptypeDIB #define comptypeDIB mmioFOURCC('D','I','B',' ') #endif /* structs */ /* NOTE: Only the 16 bit structs are packed. Structs that are packed anyway * have not been changed. If a structure is later extended, you may need to create * two versions of it. */ typedef struct { DWORD dwSize; /* 00: size */ DWORD fccType; /* 04: type 'vidc' usually */ DWORD fccHandler; /* 08: */ DWORD dwVersion; /* 0c: version of compman opening you */ DWORD dwFlags; /* 10: LOWORD is type specific */ LRESULT dwError; /* 14: */ LPVOID pV1Reserved; /* 18: */ LPVOID pV2Reserved; /* 1c: */ DWORD dnDevNode; /* 20: */ /* 24: */ } ICOPEN,*LPICOPEN; #define ICCOMPRESS_KEYFRAME __MSABI_LONG(0x00000001) typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiOutput; LPVOID lpOutput; LPBITMAPINFOHEADER lpbiInput; LPVOID lpInput; LPDWORD lpckid; LPDWORD lpdwFlags; LONG lFrameNum; DWORD dwFrameSize; DWORD dwQuality; LPBITMAPINFOHEADER lpbiPrev; LPVOID lpPrev; } ICCOMPRESS; DWORD VFWAPIV ICCompress( HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData, LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid, LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality, LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev ); #define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ hic,ICM_COMPRESS_GET_FORMAT,(DWORD_PTR)(LPVOID)(lpbiInput), \ (DWORD_PTR)(LPVOID)(lpbiOutput) \ ) #define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL) #define ICCompressBegin(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ hic, ICM_COMPRESS_BEGIN, (DWORD_PTR)(LPVOID)(lpbiInput), \ (DWORD_PTR)(LPVOID)(lpbiOutput) \ ) #define ICCompressGetSize(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ hic, ICM_COMPRESS_GET_SIZE, (DWORD_PTR)(LPVOID)(lpbiInput), \ (DWORD_PTR)(LPVOID)(lpbiOutput) \ ) #define ICCompressQuery(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ hic, ICM_COMPRESS_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput), \ (DWORD_PTR)(LPVOID)(lpbiOutput) \ ) #define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0) /* ICCOMPRESSFRAMES.dwFlags */ #define ICCOMPRESSFRAMES_PADDING 0x00000001 typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiOutput; LPARAM lOutput; LPBITMAPINFOHEADER lpbiInput; LPARAM lInput; LONG lStartFrame; LONG lFrameCount; LONG lQuality; LONG lDataRate; LONG lKeyRate; DWORD dwRate; DWORD dwScale; DWORD dwOverheadPerFrame; DWORD dwReserved2; LONG (CALLBACK *GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len); LONG (CALLBACK *PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len); } ICCOMPRESSFRAMES; typedef struct { DWORD dwFlags; LPARAM lParam; /* messages for Status callback */ #define ICSTATUS_START 0 #define ICSTATUS_STATUS 1 #define ICSTATUS_END 2 #define ICSTATUS_ERROR 3 #define ICSTATUS_YIELD 4 /* FIXME: some X11 libs define Status as int... */ /* LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l); */ LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l); } ICSETSTATUSPROC; /* Values for wMode of ICOpen() */ #define ICMODE_COMPRESS 1 #define ICMODE_DECOMPRESS 2 #define ICMODE_FASTDECOMPRESS 3 #define ICMODE_QUERY 4 #define ICMODE_FASTCOMPRESS 5 #define ICMODE_DRAW 8 /* quality flags */ #define ICQUALITY_LOW 0 #define ICQUALITY_HIGH 10000 #define ICQUALITY_DEFAULT -1 typedef struct { DWORD dwSize; /* 00: */ DWORD fccType; /* 04:compressor type 'vidc' 'audc' */ DWORD fccHandler; /* 08:compressor sub-type 'rle ' 'jpeg' 'pcm '*/ DWORD dwFlags; /* 0c:flags LOWORD is type specific */ DWORD dwVersion; /* 10:version of the driver */ DWORD dwVersionICM; /* 14:version of the ICM used */ /* * under Win32, the driver always returns UNICODE strings. */ WCHAR szName[16]; /* 18:short name */ WCHAR szDescription[128]; /* 38:long name */ WCHAR szDriver[128]; /* 138:driver that contains compressor*/ /* 238: */ } ICINFO; /* ICINFO.dwFlags */ #define VIDCF_QUALITY 0x0001 /* supports quality */ #define VIDCF_CRUNCH 0x0002 /* supports crunching to a frame size */ #define VIDCF_TEMPORAL 0x0004 /* supports inter-frame compress */ #define VIDCF_COMPRESSFRAMES 0x0008 /* wants the compress all frames message */ #define VIDCF_DRAW 0x0010 /* supports drawing */ #define VIDCF_FASTTEMPORALC 0x0020 /* does not need prev frame on compress */ #define VIDCF_FASTTEMPORALD 0x0080 /* does not need prev frame on decompress */ #define VIDCF_QUALITYTIME 0x0040 /* supports temporal quality */ #define VIDCF_FASTTEMPORAL (VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD) /* function shortcuts */ /* ICM_ABOUT */ #define ICMF_ABOUT_QUERY 0x00000001 #define ICQueryAbout(hic) \ (ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)-1,ICMF_ABOUT_QUERY)==ICERR_OK) #define ICAbout(hic, hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)(UINT_PTR)(hwnd),0) /* ICM_CONFIGURE */ #define ICMF_CONFIGURE_QUERY 0x00000001 #define ICQueryConfigure(hic) \ (ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK) #define ICConfigure(hic,hwnd) \ ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)(UINT_PTR)(hwnd),0) /* Decompression stuff */ #define ICDECOMPRESS_HURRYUP 0x80000000 /* don't draw just buffer (hurry up!) */ #define ICDECOMPRESS_UPDATE 0x40000000 /* don't draw just update screen */ #define ICDECOMPRESS_PREROLL 0x20000000 /* this frame is before real start */ #define ICDECOMPRESS_NULLFRAME 0x10000000 /* repeat last frame */ #define ICDECOMPRESS_NOTKEYFRAME 0x08000000 /* this frame is not a key frame */ typedef struct { DWORD dwFlags; /* flags (from AVI index...) */ LPBITMAPINFOHEADER lpbiInput; /* BITMAPINFO of compressed data */ LPVOID lpInput; /* compressed data */ LPBITMAPINFOHEADER lpbiOutput; /* DIB to decompress to */ LPVOID lpOutput; DWORD ckid; /* ckid from AVI file */ } ICDECOMPRESS; typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiSrc; LPVOID lpSrc; LPBITMAPINFOHEADER lpbiDst; LPVOID lpDst; /* changed for ICM_DECOMPRESSEX */ INT xDst; /* destination rectangle */ INT yDst; INT dxDst; INT dyDst; INT xSrc; /* source rectangle */ INT ySrc; INT dxSrc; INT dySrc; } ICDECOMPRESSEX; DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits); #define ICDecompressBegin(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ hic, ICM_DECOMPRESS_BEGIN, (DWORD_PTR)(LPVOID)(lpbiInput), \ (DWORD_PTR)(LPVOID)(lpbiOutput) \ ) #define ICDecompressQuery(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ hic,ICM_DECOMPRESS_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput), \ (DWORD_PTR) (LPVOID)(lpbiOutput) \ ) #define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput) \ ((LONG)ICSendMessage( \ hic,ICM_DECOMPRESS_GET_FORMAT, (DWORD_PTR)(LPVOID)(lpbiInput), \ (DWORD_PTR)(LPVOID)(lpbiOutput) \ )) #define ICDecompressGetFormatSize(hic, lpbi) \ ICDecompressGetFormat(hic, lpbi, NULL) #define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput) \ ICSendMessage( \ hic, ICM_DECOMPRESS_GET_PALETTE, (DWORD_PTR)(LPVOID)(lpbiInput), \ (DWORD_PTR)(LPVOID)(lpbiOutput) \ ) #define ICDecompressSetPalette(hic,lpbiPalette) \ ICSendMessage( \ hic,ICM_DECOMPRESS_SET_PALETTE, \ (DWORD_PTR)(LPVOID)(lpbiPalette),0 \ ) #define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0) LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD_PTR dw1, DWORD_PTR dw2); static inline LRESULT VFWAPI ICDecompressEx(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc, int xSrc, int ySrc, int dxSrc, int dySrc, LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst, int xDst, int yDst, int dxDst, int dyDst) { ICDECOMPRESSEX ic; ic.dwFlags = dwFlags; ic.lpbiSrc = lpbiSrc; ic.lpSrc = lpSrc; ic.xSrc = xSrc; ic.ySrc = ySrc; ic.dxSrc = dxSrc; ic.dySrc = dySrc; ic.lpbiDst = lpbiDst; ic.lpDst = lpDst; ic.xDst = xDst; ic.yDst = yDst; ic.dxDst = dxDst; ic.dyDst = dyDst; return ICSendMessage(hic, ICM_DECOMPRESSEX, (DWORD_PTR)&ic, sizeof(ic)); } static inline LRESULT VFWAPI ICDecompressExBegin(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc, int xSrc, int ySrc, int dxSrc, int dySrc, LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst, int xDst, int yDst, int dxDst, int dyDst) { ICDECOMPRESSEX ic; ic.dwFlags = dwFlags; ic.lpbiSrc = lpbiSrc; ic.lpSrc = lpSrc; ic.xSrc = xSrc; ic.ySrc = ySrc; ic.dxSrc = dxSrc; ic.dySrc = dySrc; ic.lpbiDst = lpbiDst; ic.lpDst = lpDst; ic.xDst = xDst; ic.yDst = yDst; ic.dxDst = dxDst; ic.dyDst = dyDst; return ICSendMessage(hic, ICM_DECOMPRESSEX_BEGIN, (DWORD_PTR)&ic, sizeof(ic)); } static inline LRESULT VFWAPI ICDecompressExQuery(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc, int xSrc, int ySrc, int dxSrc, int dySrc, LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst, int xDst, int yDst, int dxDst, int dyDst) { ICDECOMPRESSEX ic; ic.dwFlags = dwFlags; ic.lpbiSrc = lpbiSrc; ic.lpSrc = lpSrc; ic.xSrc = xSrc; ic.ySrc = ySrc; ic.dxSrc = dxSrc; ic.dySrc = dySrc; ic.lpbiDst = lpbiDst; ic.lpDst = lpDst; ic.xDst = xDst; ic.yDst = yDst; ic.dxDst = dxDst; ic.dyDst = dyDst; return ICSendMessage(hic, ICM_DECOMPRESSEX_QUERY, (DWORD_PTR)&ic, sizeof(ic)); } #define ICDecompressExEnd(hic) \ ICSendMessage(hic, ICM_DECOMPRESSEX_END, 0, 0) #define ICDRAW_QUERY __MSABI_LONG(0x00000001) /* test for support */ #define ICDRAW_FULLSCREEN __MSABI_LONG(0x00000002) /* draw to full screen */ #define ICDRAW_HDC __MSABI_LONG(0x00000004) /* draw to a HDC/HWND */ #define ICDRAW_ANIMATE __MSABI_LONG(0x00000008) /* expect palette animation */ #define ICDRAW_CONTINUE __MSABI_LONG(0x00000010) /* draw is a continuation of previous draw */ #define ICDRAW_MEMORYDC __MSABI_LONG(0x00000020) /* DC is offscreen, by the way */ #define ICDRAW_UPDATING __MSABI_LONG(0x00000040) /* We're updating, as opposed to playing */ #define ICDRAW_RENDER __MSABI_LONG(0x00000080) /* used to render data not draw it */ #define ICDRAW_BUFFER __MSABI_LONG(0x00000100) /* buffer data offscreen, we will need to update it */ #define ICDecompressOpen(fccType, fccHandler, lpbiIn, lpbiOut) \ ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS) #define ICDrawOpen(fccType, fccHandler, lpbiIn) \ ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW) HANDLE VFWAPI ICImageCompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn, LPVOID lpBits, LPBITMAPINFO lpbiOut, LONG lQuality, LONG* plSize); HANDLE VFWAPI ICImageDecompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn, LPVOID lpBits, LPBITMAPINFO lpbiOut); BOOL VFWAPI ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo); BOOL VFWAPI ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags); BOOL VFWAPI ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags); LRESULT VFWAPI ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb); HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode); #ifdef WINE_STRICT_PROTOTYPES HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, DRIVERPROC lpfnHandler); #else HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler); #endif LRESULT VFWAPI ICClose(HIC hic); HIC VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags); HIC VFWAPI ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy); /* Values for wFlags of ICInstall() */ #define ICINSTALL_UNICODE 0x8000 #define ICINSTALL_FUNCTION 0x0001 #define ICINSTALL_DRIVER 0x0002 #define ICINSTALL_HDRV 0x0004 #define ICINSTALL_DRIVERW 0x8002 #define ICGetState(hic, pv, cb) \ ICSendMessage(hic, ICM_GETSTATE, (DWORD_PTR)(LPVOID)(pv), (DWORD_PTR)(cb)) #define ICSetState(hic, pv, cb) \ ICSendMessage(hic, ICM_SETSTATE, (DWORD_PTR)(LPVOID)(pv), (DWORD_PTR)(cb)) #define ICGetStateSize(hic) \ ICGetState(hic, NULL, 0) static inline DWORD ICGetDefaultQuality(HIC hic) { DWORD dwICValue; ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD_PTR)(LPVOID)&dwICValue, sizeof(DWORD)); return dwICValue; } static inline DWORD ICGetDefaultKeyFrameRate(HIC hic) { DWORD dwICValue; ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD_PTR)(LPVOID)&dwICValue, sizeof(DWORD)); return dwICValue; } #define ICDrawWindow(hic, prc) \ ICSendMessage(hic, ICM_DRAW_WINDOW, (DWORD_PTR)(LPVOID)(prc), sizeof(RECT)) /* As passed to ICM_DRAW_SUGGESTFORMAT */ typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiIn; LPBITMAPINFOHEADER lpbiSuggest; INT dxSrc; INT dySrc; INT dxDst; INT dyDst; HIC hicDecompressor; } ICDRAWSUGGEST; typedef struct { DWORD dwFlags; int iStart; int iLen; LPPALETTEENTRY lppe; } ICPALETTE; DWORD VFWAPIV ICDrawBegin( HIC hic, DWORD dwFlags,/* flags */ HPALETTE hpal, /* palette to draw with */ HWND hwnd, /* window to draw to */ HDC hdc, /* HDC to draw to */ INT xDst, /* destination rectangle */ INT yDst, INT dxDst, INT dyDst, LPBITMAPINFOHEADER lpbi, /* format of frame to draw */ INT xSrc, /* source rectangle */ INT ySrc, INT dxSrc, INT dySrc, DWORD dwRate, /* frames/second = (dwRate/dwScale) */ DWORD dwScale ); /* as passed to ICM_DRAW_BEGIN */ typedef struct { DWORD dwFlags; HPALETTE hpal; HWND hwnd; HDC hdc; INT xDst; INT yDst; INT dxDst; INT dyDst; LPBITMAPINFOHEADER lpbi; INT xSrc; INT ySrc; INT dxSrc; INT dySrc; DWORD dwRate; DWORD dwScale; } ICDRAWBEGIN; #define ICDRAW_HURRYUP __MSABI_LONG(0x80000000) /* don't draw just buffer (hurry up!) */ #define ICDRAW_UPDATE __MSABI_LONG(0x40000000) /* don't draw just update screen */ #define ICDRAW_PREROLL __MSABI_LONG(0x20000000) /* this frame is before real start */ #define ICDRAW_NULLFRAME __MSABI_LONG(0x10000000) /* repeat last frame */ #define ICDRAW_NOTKEYFRAME __MSABI_LONG(0x08000000) /* this frame is not a key frame */ typedef struct { DWORD dwFlags; LPVOID lpFormat; LPVOID lpData; DWORD cbData; LONG lTime; } ICDRAW; DWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime); static inline LRESULT VFWAPI ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int dxSrc, int dySrc, int dxDst, int dyDst, HIC hicDecomp) { ICDRAWSUGGEST ic; ic.lpbiIn = lpbiIn; ic.lpbiSuggest = lpbiOut; ic.dxSrc = dxSrc; ic.dySrc = dySrc; ic.dxDst = dxDst; ic.dyDst = dyDst; ic.hicDecompressor = hicDecomp; return ICSendMessage(hic, ICM_DRAW_SUGGESTFORMAT, (DWORD_PTR)&ic, sizeof(ic)); } #define ICDrawQuery(hic, lpbiInput) \ ICSendMessage(hic, ICM_DRAW_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput), 0) #define ICDrawChangePalette(hic, lpbiInput) \ ICSendMessage(hic, ICM_DRAW_CHANGEPALETTE, (DWORD_PTR)(LPVOID)(lpbiInput), 0) #define ICGetBuffersWanted(hic, lpdwBuffers) \ ICSendMessage(hic, ICM_GETBUFFERSWANTED, (DWORD_PTR)(LPVOID)(lpdwBuffers), 0) #define ICDrawEnd(hic) \ ICSendMessage(hic, ICM_DRAW_END, 0, 0) #define ICDrawStart(hic) \ ICSendMessage(hic, ICM_DRAW_START, 0, 0) #define ICDrawStartPlay(hic, lFrom, lTo) \ ICSendMessage(hic, ICM_DRAW_START_PLAY, (DWORD_PTR)(lFrom), (DWORD_PTR)(lTo)) #define ICDrawStop(hic) \ ICSendMessage(hic, ICM_DRAW_STOP, 0, 0) #define ICDrawStopPlay(hic) \ ICSendMessage(hic, ICM_DRAW_STOP_PLAY, 0, 0) #define ICDrawGetTime(hic, lplTime) \ ICSendMessage(hic, ICM_DRAW_GETTIME, (DWORD_PTR)(LPVOID)(lplTime), 0) #define ICDrawSetTime(hic, lTime) \ ICSendMessage(hic, ICM_DRAW_SETTIME, (DWORD_PTR)lTime, 0) #define ICDrawRealize(hic, hdc, fBackground) \ ICSendMessage(hic, ICM_DRAW_REALIZE, (DWORD_PTR)(UINT_PTR)(HDC)(hdc), (DWORD_PTR)(BOOL)(fBackground)) #define ICDrawFlush(hic) \ ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0) #define ICDrawRenderBuffer(hic) \ ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0) static inline LRESULT VFWAPI ICSetStatusProc(HIC hic, DWORD dwFlags, LRESULT lParam, LONG (CALLBACK *fpfnStatus)(LPARAM, UINT, LONG)) { ICSETSTATUSPROC ic; ic.dwFlags = dwFlags; ic.lParam = lParam; /* FIXME: see comment in ICSETSTATUSPROC definition */ ic.zStatus = fpfnStatus; return ICSendMessage(hic, ICM_SET_STATUS_PROC, (DWORD_PTR)&ic, sizeof(ic)); } typedef struct { LONG cbSize; DWORD dwFlags; HIC hic; DWORD fccType; DWORD fccHandler; LPBITMAPINFO lpbiIn; LPBITMAPINFO lpbiOut; LPVOID lpBitsOut; LPVOID lpBitsPrev; LONG lFrame; LONG lKey; LONG lDataRate; LONG lQ; LONG lKeyCount; LPVOID lpState; LONG cbState; } COMPVARS, *PCOMPVARS; #define ICMF_COMPVARS_VALID 0x00000001 BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData, PCOMPVARS pc, LPSTR lpszTitle); #define ICMF_CHOOSE_KEYFRAME 0x0001 #define ICMF_CHOOSE_DATARATE 0x0002 #define ICMF_CHOOSE_PREVIEW 0x0004 #define ICMF_CHOOSE_ALLCOMPRESSORS 0x0008 BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn); void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc); LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits, BOOL *pfKey, LONG *plSize); void VFWAPI ICCompressorFree(PCOMPVARS pc); /********************* AVIFILE function declarations *************************/ #ifndef mmioFOURCC #define mmioFOURCC( ch0, ch1, ch2, ch3 ) \ ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \ ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) ) #endif #ifndef aviTWOCC #define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8)) #endif typedef WORD TWOCC; #define ICTYPE_VIDEO mmioFOURCC('v', 'i', 'd', 'c') #define ICTYPE_AUDIO mmioFOURCC('a', 'u', 'd', 'c') #define formtypeAVI mmioFOURCC('A', 'V', 'I', ' ') #define listtypeAVIHEADER mmioFOURCC('h', 'd', 'r', 'l') #define ckidAVIMAINHDR mmioFOURCC('a', 'v', 'i', 'h') #define listtypeSTREAMHEADER mmioFOURCC('s', 't', 'r', 'l') #define ckidSTREAMHEADER mmioFOURCC('s', 't', 'r', 'h') #define ckidSTREAMFORMAT mmioFOURCC('s', 't', 'r', 'f') #define ckidSTREAMHANDLERDATA mmioFOURCC('s', 't', 'r', 'd') #define ckidSTREAMNAME mmioFOURCC('s', 't', 'r', 'n') #define listtypeAVIMOVIE mmioFOURCC('m', 'o', 'v', 'i') #define listtypeAVIRECORD mmioFOURCC('r', 'e', 'c', ' ') #define ckidAVINEWINDEX mmioFOURCC('i', 'd', 'x', '1') #define streamtypeANY 0U #define streamtypeVIDEO mmioFOURCC('v', 'i', 'd', 's') #define streamtypeAUDIO mmioFOURCC('a', 'u', 'd', 's') #define streamtypeMIDI mmioFOURCC('m', 'i', 'd', 's') #define streamtypeTEXT mmioFOURCC('t', 'x', 't', 's') /* Basic chunk types */ #define cktypeDIBbits aviTWOCC('d', 'b') #define cktypeDIBcompressed aviTWOCC('d', 'c') #define cktypePALchange aviTWOCC('p', 'c') #define cktypeWAVEbytes aviTWOCC('w', 'b') /* Chunk id to use for extra chunks for padding. */ #define ckidAVIPADDING mmioFOURCC('J', 'U', 'N', 'K') #define FromHex(n) (((n) >= 'A') ? ((n) + 10 - 'A') : ((n) - '0')) #define StreamFromFOURCC(fcc) ((WORD)((FromHex(LOBYTE(LOWORD(fcc))) << 4) + \ (FromHex(HIBYTE(LOWORD(fcc)))))) #define TWOCCFromFOURCC(fcc) HIWORD(fcc) #define ToHex(n) ((BYTE)(((n) > 9) ? ((n) - 10 + 'A') : ((n) + '0'))) #define MAKEAVICKID(tcc, stream) \ MAKELONG((ToHex((stream) & 0x0f) << 8) | \ (ToHex(((stream) & 0xf0) >> 4)), tcc) /* AVIFileHdr.dwFlags */ #define AVIF_HASINDEX 0x00000010 /* Index at end of file? */ #define AVIF_MUSTUSEINDEX 0x00000020 #define AVIF_ISINTERLEAVED 0x00000100 #define AVIF_TRUSTCKTYPE 0x00000800 /* Use CKType to find key frames*/ #define AVIF_WASCAPTUREFILE 0x00010000 #define AVIF_COPYRIGHTED 0x00020000 #define AVI_HEADERSIZE 2048 typedef BOOL (CALLBACK *AVISAVECALLBACK)(INT); typedef struct _MainAVIHeader { DWORD dwMicroSecPerFrame; DWORD dwMaxBytesPerSec; DWORD dwPaddingGranularity; DWORD dwFlags; DWORD dwTotalFrames; DWORD dwInitialFrames; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwReserved[4]; } MainAVIHeader; /* AVIStreamHeader.dwFlags */ #define AVISF_DISABLED 0x00000001 #define AVISF_VIDEO_PALCHANGES 0x00010000 typedef struct { FOURCC fccType; FOURCC fccHandler; DWORD dwFlags; /* AVISF_* */ WORD wPriority; WORD wLanguage; DWORD dwInitialFrames; DWORD dwScale; DWORD dwRate; /* dwRate / dwScale == samples/second */ DWORD dwStart; DWORD dwLength; /* In units above... */ DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; struct { SHORT left, top, right, bottom; } rcFrame; /* word.word - word.word in file */ } AVIStreamHeader; /* AVIINDEXENTRY.dwFlags */ #define AVIIF_LIST 0x00000001 /* chunk is a 'LIST' */ #define AVIIF_TWOCC 0x00000002 #define AVIIF_KEYFRAME 0x00000010 /* this frame is a key frame. */ #define AVIIF_FIRSTPART 0x00000020 #define AVIIF_LASTPART 0x00000040 #define AVIIF_MIDPART (AVIIF_LASTPART|AVIIF_FIRSTPART) #define AVIIF_NOTIME 0x00000100 /* this frame doesn't take any time */ #define AVIIF_COMPUSE 0x0FFF0000 typedef struct _AVIINDEXENTRY { DWORD ckid; DWORD dwFlags; DWORD dwChunkOffset; DWORD dwChunkLength; } AVIINDEXENTRY; typedef struct _AVIPALCHANGE { BYTE bFirstEntry; BYTE bNumEntries; WORD wFlags; /* pad */ PALETTEENTRY peNew[1]; } AVIPALCHANGE; #define AVIIF_KEYFRAME 0x00000010 /* this frame is a key frame. */ #define AVIGETFRAMEF_BESTDISPLAYFMT 1 typedef struct _AVISTREAMINFOA { DWORD fccType; DWORD fccHandler; DWORD dwFlags; /* AVIIF_* */ DWORD dwCaps; WORD wPriority; WORD wLanguage; DWORD dwScale; DWORD dwRate; /* dwRate / dwScale == samples/second */ DWORD dwStart; DWORD dwLength; /* In units above... */ DWORD dwInitialFrames; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; RECT rcFrame; DWORD dwEditCount; DWORD dwFormatChangeCount; CHAR szName[64]; } AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA; typedef struct _AVISTREAMINFOW { DWORD fccType; DWORD fccHandler; DWORD dwFlags; DWORD dwCaps; WORD wPriority; WORD wLanguage; DWORD dwScale; DWORD dwRate; /* dwRate / dwScale == samples/second */ DWORD dwStart; DWORD dwLength; /* In units above... */ DWORD dwInitialFrames; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; RECT rcFrame; DWORD dwEditCount; DWORD dwFormatChangeCount; WCHAR szName[64]; } AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW; DECL_WINELIB_TYPE_AW(AVISTREAMINFO) DECL_WINELIB_TYPE_AW(LPAVISTREAMINFO) DECL_WINELIB_TYPE_AW(PAVISTREAMINFO) #define AVISTREAMINFO_DISABLED 0x00000001 #define AVISTREAMINFO_FORMATCHANGES 0x00010000 /* AVIFILEINFO.dwFlags */ #define AVIFILEINFO_HASINDEX 0x00000010 #define AVIFILEINFO_MUSTUSEINDEX 0x00000020 #define AVIFILEINFO_ISINTERLEAVED 0x00000100 #define AVIFILEINFO_TRUSTCKTYPE 0x00000800 #define AVIFILEINFO_WASCAPTUREFILE 0x00010000 #define AVIFILEINFO_COPYRIGHTED 0x00020000 /* AVIFILEINFO.dwCaps */ #define AVIFILECAPS_CANREAD 0x00000001 #define AVIFILECAPS_CANWRITE 0x00000002 #define AVIFILECAPS_ALLKEYFRAMES 0x00000010 #define AVIFILECAPS_NOCOMPRESSION 0x00000020 typedef struct _AVIFILEINFOW { DWORD dwMaxBytesPerSec; DWORD dwFlags; DWORD dwCaps; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwScale; DWORD dwRate; DWORD dwLength; DWORD dwEditCount; WCHAR szFileType[64]; } AVIFILEINFOW, * LPAVIFILEINFOW, *PAVIFILEINFOW; typedef struct _AVIFILEINFOA { DWORD dwMaxBytesPerSec; DWORD dwFlags; DWORD dwCaps; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwScale; DWORD dwRate; DWORD dwLength; DWORD dwEditCount; CHAR szFileType[64]; } AVIFILEINFOA, * LPAVIFILEINFOA, *PAVIFILEINFOA; DECL_WINELIB_TYPE_AW(AVIFILEINFO) DECL_WINELIB_TYPE_AW(PAVIFILEINFO) DECL_WINELIB_TYPE_AW(LPAVIFILEINFO) /* AVICOMPRESSOPTIONS.dwFlags. determines presence of fields in below struct */ #define AVICOMPRESSF_INTERLEAVE 0x00000001 #define AVICOMPRESSF_DATARATE 0x00000002 #define AVICOMPRESSF_KEYFRAMES 0x00000004 #define AVICOMPRESSF_VALID 0x00000008 typedef struct { DWORD fccType; /* stream type, for consistency */ DWORD fccHandler; /* compressor */ DWORD dwKeyFrameEvery; /* keyframe rate */ DWORD dwQuality; /* compress quality 0-10,000 */ DWORD dwBytesPerSecond; /* bytes per second */ DWORD dwFlags; /* flags... see below */ LPVOID lpFormat; /* save format */ DWORD cbFormat; LPVOID lpParms; /* compressor options */ DWORD cbParms; DWORD dwInterleaveEvery; /* for non-video streams only */ } AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS; #define FIND_DIR __MSABI_LONG(0x0000000F) /* direction mask */ #define FIND_NEXT __MSABI_LONG(0x00000001) /* search forward */ #define FIND_PREV __MSABI_LONG(0x00000004) /* search backward */ #define FIND_FROM_START __MSABI_LONG(0x00000008) /* start at the logical beginning */ #define FIND_TYPE __MSABI_LONG(0x000000F0) /* type mask */ #define FIND_KEY __MSABI_LONG(0x00000010) /* find a key frame */ #define FIND_ANY __MSABI_LONG(0x00000020) /* find any (non-empty) sample */ #define FIND_FORMAT __MSABI_LONG(0x00000040) /* find a formatchange */ #define FIND_RET __MSABI_LONG(0x0000F000) /* return mask */ #define FIND_POS __MSABI_LONG(0x00000000) /* return logical position */ #define FIND_LENGTH __MSABI_LONG(0x00001000) /* return logical size */ #define FIND_OFFSET __MSABI_LONG(0x00002000) /* return physical position */ #define FIND_SIZE __MSABI_LONG(0x00003000) /* return physical size */ #define FIND_INDEX __MSABI_LONG(0x00004000) /* return physical index position */ #include #define DEFINE_AVIGUID(name, l, w1, w2) \ DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46) DEFINE_AVIGUID(IID_IAVIFile, 0x00020020, 0, 0); DEFINE_AVIGUID(IID_IAVIStream, 0x00020021, 0, 0); DEFINE_AVIGUID(IID_IAVIStreaming, 0x00020022, 0, 0); DEFINE_AVIGUID(IID_IGetFrame, 0x00020023, 0, 0); DEFINE_AVIGUID(IID_IAVIEditStream, 0x00020024, 0, 0); DEFINE_AVIGUID(CLSID_AVISimpleUnMarshal,0x00020009, 0, 0); DEFINE_AVIGUID(CLSID_AVIFile, 0x00020000, 0, 0); /***************************************************************************** * IAVIStream interface */ #define INTERFACE IAVIStream DECLARE_INTERFACE_(IAVIStream,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAVIStream methods ***/ STDMETHOD(Create)(THIS_ LPARAM lParam1, LPARAM lParam2) PURE; STDMETHOD(Info)(THIS_ AVISTREAMINFOW *psi, LONG lSize) PURE; STDMETHOD_(LONG,FindSample)(THIS_ LONG lPos, LONG lFlags) PURE; STDMETHOD(ReadFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG *lpcbFormat) PURE; STDMETHOD(SetFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG cbFormat) PURE; STDMETHOD(Read)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, LONG *plBytes, LONG *plSamples) PURE; STDMETHOD(Write)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags, LONG *plSampWritten, LONG *plBytesWritten) PURE; STDMETHOD(Delete)(THIS_ LONG lStart, LONG lSamples) PURE; STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE; STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE; STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW *plInfo, LONG cbInfo) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IAVIStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IAVIStream_AddRef(p) (p)->lpVtbl->AddRef(p) #define IAVIStream_Release(p) (p)->lpVtbl->Release(p) /*** IAVIStream methods ***/ #define IAVIStream_Create(p,a,b) (p)->lpVtbl->Create(p,a,b) #define IAVIStream_Info(p,a,b) (p)->lpVtbl->Info(p,a,b) #define IAVIStream_FindSample(p,a,b) (p)->lpVtbl->FindSample(p,a,b) #define IAVIStream_ReadFormat(p,a,b,c) (p)->lpVtbl->ReadFormat(p,a,b,c) #define IAVIStream_SetFormat(p,a,b,c) (p)->lpVtbl->SetFormat(p,a,b,c) #define IAVIStream_Read(p,a,b,c,d,e,f) (p)->lpVtbl->Read(p,a,b,c,d,e,f) #define IAVIStream_Write(p,a,b,c,d,e,f,g) (p)->lpVtbl->Write(p,a,b,c,d,e,f,g) #define IAVIStream_Delete(p,a,b) (p)->lpVtbl->Delete(p,a,b) #define IAVIStream_ReadData(p,a,b,c) (p)->lpVtbl->ReadData(p,a,b,c) #define IAVIStream_WriteData(p,a,b,c) (p)->lpVtbl->WriteData(p,a,b,c) #define IAVIStream_SetInfo(p,a,b) (p)->lpVtbl->SetInfo(p,a,b) #endif #define AVISTREAMREAD_CONVENIENT (__MSABI_LONG(-1)) ULONG WINAPI AVIStreamAddRef(PAVISTREAM iface); ULONG WINAPI AVIStreamRelease(PAVISTREAM iface); HRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*); HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size); HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size); #define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo) LONG WINAPI AVIStreamFindSample(PAVISTREAM pstream, LONG pos, LONG flags); HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize); HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize); HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread); HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten); HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread); HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size); PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted); LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos); HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg); HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler); HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE *ppfile, int nStreams, PAVISTREAM *ppStreams); HRESULT WINAPI AVIMakeStreamFromClipboard(UINT cfFormat, HANDLE hGlobal, PAVISTREAM * ppstream); HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi, LPCSTR szFile, DWORD fccType, LONG lParam, UINT mode, CLSID *pclsidHandler); HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM *ppavi, LPCWSTR szFile, DWORD fccType, LONG lParam, UINT mode, CLSID *pclsidHandler); #define AVIStreamOpenFromFile WINELIB_NAME_AW(AVIStreamOpenFromFile) LONG WINAPI AVIStreamBeginStreaming(PAVISTREAM pavi, LONG lStart, LONG lEnd, LONG lRate); LONG WINAPI AVIStreamEndStreaming(PAVISTREAM pavi); HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving); HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving); #define AVIBuildFilter WINELIB_NAME_AW(AVIBuildFilter) BOOL WINAPI AVISaveOptions(HWND hWnd,UINT uFlags,INT nStream, PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *ppOptions); HRESULT WINAPI AVISaveOptionsFree(INT nStreams,LPAVICOMPRESSOPTIONS*ppOptions); HRESULT WINAPIV AVISaveA(LPCSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...); HRESULT WINAPIV AVISaveW(LPCWSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...); #define AVISave WINELIB_NAME_AW(AVISave) HRESULT WINAPI AVISaveVA(LPCSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStream, PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions); HRESULT WINAPI AVISaveVW(LPCWSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStream, PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions); #define AVISaveV WINELIB_NAME_AW(AVISaveV) LONG WINAPI AVIStreamStart(PAVISTREAM iface); LONG WINAPI AVIStreamLength(PAVISTREAM iface); LONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample); LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime); #define AVIFileClose(pavi) \ AVIFileRelease(pavi) #define AVIStreamClose(pavi) \ AVIStreamRelease(pavi); #define AVIStreamEnd(pavi) \ (AVIStreamStart(pavi) + AVIStreamLength(pavi)) #define AVIStreamEndTime(pavi) \ AVIStreamSampleToTime(pavi, AVIStreamEnd(pavi)) #define AVIStreamFormatSize(pavi, lPos, plSize) \ AVIStreamReadFormat(pavi, lPos, NULL, plSize) #define AVIStreamLengthTime(pavi) \ AVIStreamSampleToTime(pavi, AVIStreamLength(pavi)) #define AVIStreamSampleSize(pavi,pos,psize) \ AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL) #define AVIStreamSampleToSample(pavi1, pavi2, samp2) \ AVIStreamTimeToSample(pavi1, AVIStreamSampleToTime(pavi2, samp2)) #define AVIStreamStartTime(pavi) \ AVIStreamSampleToTime(pavi, AVIStreamStart(pavi)) #define AVIStreamNextSample(pavi, pos) \ AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_ANY) #define AVIStreamPrevSample(pavi, pos) \ AVIStreamFindSample(pavi, pos - 1, FIND_PREV | FIND_ANY) #define AVIStreamNearestSample(pavi, pos) \ AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_ANY) #define AVStreamNextKeyFrame(pavi,pos) \ AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_KEY) #define AVStreamPrevKeyFrame(pavi,pos) \ AVIStreamFindSample(pavi, pos - 1, FIND_NEXT | FIND_KEY) #define AVIStreamNearestKeyFrame(pavi,pos) \ AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_KEY) #define AVIStreamIsKeyFrame(pavi, pos) \ (AVIStreamNearestKeyFrame(pavi, pos) == pos) /***************************************************************************** * IAVIStreaming interface */ #define INTERFACE IAVIStreaming DECLARE_INTERFACE_(IAVIStreaming,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAVIStreaming methods ***/ STDMETHOD(Begin)(THIS_ LONG lStart,LONG lEnd,LONG lRate) PURE; STDMETHOD(End)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IAVIStreaming_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IAVIStreaming_AddRef(p) (p)->lpVtbl->AddRef(p) #define IAVIStreaming_Release(p) (p)->lpVtbl->Release(p) /*** IAVIStreaming methods ***/ #define IAVIStreaming_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c) #define IAVIStreaming_End(p) (p)->lpVtbl->End(p) #endif /***************************************************************************** * IAVIEditStream interface */ #define INTERFACE IAVIEditStream DECLARE_INTERFACE_(IAVIEditStream,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAVIEditStream methods ***/ STDMETHOD(Cut)(THIS_ LONG *plStart,LONG *plLength,PAVISTREAM *ppResult) PURE; STDMETHOD(Copy)(THIS_ LONG *plStart,LONG *plLength,PAVISTREAM *ppResult) PURE; STDMETHOD(Paste)(THIS_ LONG *plStart,LONG *plLength,PAVISTREAM pSource,LONG lStart,LONG lEnd) PURE; STDMETHOD(Clone)(THIS_ PAVISTREAM *ppResult) PURE; STDMETHOD(SetInfo)(THIS_ LPAVISTREAMINFOW asi, LONG size) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IAVIEditStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IAVIEditStream_AddRef(p) (p)->lpVtbl->AddRef(p) #define IAVIEditStream_Release(p) (p)->lpVtbl->Release(p) /*** IAVIEditStream methods ***/ #define IAVIEditStream_Cut(p,a,b,c) (p)->lpVtbl->Cut(p,a,b,c) #define IAVIEditStream_Copy(p,a,b,c) (p)->lpVtbl->Copy(p,a,b,c) #define IAVIEditStream_Paste(p,a,b,c,d,e) (p)->lpVtbl->Paste(p,a,b,c,d,e) #define IAVIEditStream_Clone(p,a) (p)->lpVtbl->Clone(p,a) #define IAVIEditStream_SetInfo(p,a,b) (p)->lpVtbl->SetInfo(p,a,b) #endif HRESULT WINAPI CreateEditableStream(PAVISTREAM *ppEditable,PAVISTREAM pSource); HRESULT WINAPI EditStreamClone(PAVISTREAM pStream, PAVISTREAM *ppResult); HRESULT WINAPI EditStreamCopy(PAVISTREAM pStream, LONG *plStart, LONG *plLength, PAVISTREAM *ppResult); HRESULT WINAPI EditStreamCut(PAVISTREAM pStream, LONG *plStart, LONG *plLength, PAVISTREAM *ppResult); HRESULT WINAPI EditStreamPaste(PAVISTREAM pDest, LONG *plStart, LONG *plLength, PAVISTREAM pSource, LONG lStart, LONG lEnd); HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi, LONG size); HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size); #define EditStreamSetInfo WINELIB_NAME_AW(EditStreamSetInfo) HRESULT WINAPI EditStreamSetNameA(PAVISTREAM pstream, LPCSTR szName); HRESULT WINAPI EditStreamSetNameW(PAVISTREAM pstream, LPCWSTR szName); #define EditStreamSetName WINELIB_NAME_AW(EditStreamSetName) /***************************************************************************** * IAVIFile interface */ /* In Win32 this interface uses UNICODE only */ #define INTERFACE IAVIFile DECLARE_INTERFACE_(IAVIFile,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IAVIFile methods ***/ STDMETHOD(Info)(THIS_ AVIFILEINFOW *pfi, LONG lSize) PURE; STDMETHOD(GetStream)(THIS_ PAVISTREAM *ppStream, DWORD fccType, LONG lParam) PURE; STDMETHOD(CreateStream)(THIS_ PAVISTREAM *ppStream, AVISTREAMINFOW *psi) PURE; STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE; STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE; STDMETHOD(EndRecord)(THIS) PURE; STDMETHOD(DeleteStream)(THIS_ DWORD fccType, LONG lParam) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IAVIFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IAVIFile_AddRef(p) (p)->lpVtbl->AddRef(p) #define IAVIFile_Release(p) (p)->lpVtbl->Release(p) /*** IAVIFile methods ***/ #define IAVIFile_Info(p,a,b) (p)->lpVtbl->Info(p,a,b) #define IAVIFile_GetStream(p,a,b,c) (p)->lpVtbl->GetStream(p,a,b,c) #define IAVIFile_CreateStream(p,a,b) (p)->lpVtbl->CreateStream(p,a,b) #define IAVIFile_WriteData(p,a,b,c) (p)->lpVtbl->WriteData(p,a,b,c) #define IAVIFile_ReadData(p,a,b,c) (p)->lpVtbl->ReadData(p,a,b,c) #define IAVIFile_EndRecord(p) (p)->lpVtbl->EndRecord(p) #define IAVIFile_DeleteStream(p,a,b) (p)->lpVtbl->DeleteStream(p,a,b) #endif void WINAPI AVIFileInit(void); void WINAPI AVIFileExit(void); HRESULT WINAPI AVIFileOpenA(PAVIFILE* ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler); HRESULT WINAPI AVIFileOpenW(PAVIFILE* ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler); #define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen) ULONG WINAPI AVIFileAddRef(PAVIFILE pfile); ULONG WINAPI AVIFileRelease(PAVIFILE pfile); HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA pfi,LONG lSize); HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW pfi,LONG lSize); #define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo) HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM* avis,DWORD fccType,LONG lParam); HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOA* psi); HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOW* psi); #define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream) HRESULT WINAPI AVIFileWriteData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LONG size); HRESULT WINAPI AVIFileReadData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LPLONG size); HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile); /***************************************************************************** * IGetFrame interface */ #define INTERFACE IGetFrame DECLARE_INTERFACE_(IGetFrame,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IGetFrame methods ***/ STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG lPos) PURE; STDMETHOD(Begin)(THIS_ LONG lStart, LONG lEnd, LONG lRate) PURE; STDMETHOD(End)(THIS) PURE; STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT x, INT y, INT dx, INT dy) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IGetFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IGetFrame_AddRef(p) (p)->lpVtbl->AddRef(p) #define IGetFrame_Release(p) (p)->lpVtbl->Release(p) /*** IGetFrame methods ***/ #define IGetFrame_GetFrame(p,a) (p)->lpVtbl->GetFrame(p,a) #define IGetFrame_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c) #define IGetFrame_End(p) (p)->lpVtbl->End(p) #define IGetFrame_SetFormat(p,a,b,c,d,e,f) (p)->lpVtbl->SetFormat(p,a,b,c,d,e,f) #endif HRESULT WINAPI AVIClearClipboard(void); HRESULT WINAPI AVIGetFromClipboard(PAVIFILE *ppfile); HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE pfile); #ifdef OFN_READONLY BOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA lpofn); BOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW lpofn); #define GetOpenFileNamePreview WINELIB_NAME_AW(GetOpenFileNamePreview) BOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA lpofn); BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn); #define GetSaveFileNamePreview WINELIB_NAME_AW(GetSaveFileNamePreview) #endif #define AVIERR_OK 0 #define MAKE_AVIERR(error) MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+error) #define AVIERR_UNSUPPORTED MAKE_AVIERR(101) #define AVIERR_BADFORMAT MAKE_AVIERR(102) #define AVIERR_MEMORY MAKE_AVIERR(103) #define AVIERR_INTERNAL MAKE_AVIERR(104) #define AVIERR_BADFLAGS MAKE_AVIERR(105) #define AVIERR_BADPARAM MAKE_AVIERR(106) #define AVIERR_BADSIZE MAKE_AVIERR(107) #define AVIERR_BADHANDLE MAKE_AVIERR(108) #define AVIERR_FILEREAD MAKE_AVIERR(109) #define AVIERR_FILEWRITE MAKE_AVIERR(110) #define AVIERR_FILEOPEN MAKE_AVIERR(111) #define AVIERR_COMPRESSOR MAKE_AVIERR(112) #define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113) #define AVIERR_READONLY MAKE_AVIERR(114) #define AVIERR_NODATA MAKE_AVIERR(115) #define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116) #define AVIERR_CANTCOMPRESS MAKE_AVIERR(117) #define AVIERR_USERABORT MAKE_AVIERR(198) #define AVIERR_ERROR MAKE_AVIERR(199) BOOL VFWAPIV MCIWndRegisterClass(void); HWND VFWAPIV MCIWndCreateA(HWND, HINSTANCE, DWORD, LPCSTR); HWND VFWAPIV MCIWndCreateW(HWND, HINSTANCE, DWORD, LPCWSTR); #define MCIWndCreate WINELIB_NAME_AW(MCIWndCreate) #define MCIWNDOPENF_NEW 0x0001 #define MCIWNDF_NOAUTOSIZEWINDOW 0x0001 #define MCIWNDF_NOPLAYBAR 0x0002 #define MCIWNDF_NOAUTOSIZEMOVIE 0x0004 #define MCIWNDF_NOMENU 0x0008 #define MCIWNDF_SHOWNAME 0x0010 #define MCIWNDF_SHOWPOS 0x0020 #define MCIWNDF_SHOWMODE 0x0040 #define MCIWNDF_SHOWALL 0x0070 #define MCIWNDF_NOTIFYMODE 0x0100 #define MCIWNDF_NOTIFYPOS 0x0200 #define MCIWNDF_NOTIFYSIZE 0x0400 #define MCIWNDF_NOTIFYERROR 0x1000 #define MCIWNDF_NOTIFYALL 0x1F00 #define MCIWNDF_NOTIFYANSI 0x0080 #define MCIWNDF_NOTIFYMEDIAA 0x0880 #define MCIWNDF_NOTIFYMEDIAW 0x0800 #define MCIWNDF_NOTIFYMEDIA WINELIB_NAME_AW(MCIWNDF_NOTIFYMEDIA) #define MCIWNDF_RECORD 0x2000 #define MCIWNDF_NOERRORDLG 0x4000 #define MCIWNDF_NOOPEN 0x8000 #ifdef __cplusplus #define MCIWndSM ::SendMessage #else #define MCIWndSM SendMessage #endif #define MCIWndCanPlay(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0) #define MCIWndCanRecord(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0) #define MCIWndCanSave(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0) #define MCIWndCanWindow(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0) #define MCIWndCanEject(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0) #define MCIWndCanConfig(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0) #define MCIWndPaletteKick(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0) #define MCIWndSave(hWnd,szFile) (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile)) #define MCIWndSaveDialog(hWnd) MCIWndSave(hWnd,-1) #define MCIWndNew(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp)) #define MCIWndRecord(hWnd) (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0) #define MCIWndOpen(hWnd,sz,f) (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz)) #define MCIWndOpenDialog(hWnd) MCIWndOpen(hWnd,-1,0) #define MCIWndClose(hWnd) (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0) #define MCIWndPlay(hWnd) (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0) #define MCIWndStop(hWnd) (LONG)MCIWndSM(hWnd,MCI_STOP,0,0) #define MCIWndPause(hWnd) (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0) #define MCIWndResume(hWnd) (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0) #define MCIWndSeek(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos)) #define MCIWndEject(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0) #define MCIWndHome(hWnd) MCIWndSeek(hWnd,MCIWND_START) #define MCIWndEnd(hWnd) MCIWndSeek(hWnd,MCIWND_END) #define MCIWndGetSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc)) #define MCIWndPutSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc)) #define MCIWndGetDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc)) #define MCIWndPutDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc)) #define MCIWndPlayReverse(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0) #define MCIWndPlayFrom(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos)) #define MCIWndPlayTo(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO, 0,(LPARAM)(LONG)(lPos)) #define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd)) #define MCIWndGetDeviceID(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0) #define MCIWndGetAlias(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0) #define MCIWndGetMode(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) #define MCIWndGetPosition(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0) #define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) #define MCIWndGetStart(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0) #define MCIWndGetLength(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0) #define MCIWndGetEnd(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0) #define MCIWndStep(hWnd,n) (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(LONG)(n)) #define MCIWndDestroy(hWnd) (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0) #define MCIWndSetZoom(hWnd,iZoom) (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom)) #define MCIWndGetZoom(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0) #define MCIWndSetVolume(hWnd,iVol) (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol)) #define MCIWndGetVolume(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0) #define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed)) #define MCIWndGetSpeed(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0) #define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp)) #define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) #define MCIWndValidateMedia(hWnd) (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0) #define MCIWndSetRepeat(hWnd,f) (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f)) #define MCIWndGetRepeat(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0) #define MCIWndUseFrames(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("frames")) #define MCIWndUseTime(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("ms")) #define MCIWndSetActiveTimer(hWnd,active) \ (VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER, \ (WPARAM)(UINT)(active),0) #define MCIWndSetInactiveTimer(hWnd,inactive) \ (VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER, \ (WPARAM)(UINT)(inactive),0) #define MCIWndSetTimers(hWnd,active,inactive) \ (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),\ (LPARAM)(UINT)(inactive)) #define MCIWndGetActiveTimer(hWnd) \ (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0); #define MCIWndGetInactiveTimer(hWnd) \ (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0); #define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0) #define MCIWndSendString(hWnd,sz) (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz)) #define MCIWndReturnString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) #define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) #define MCIWndGetPalette(hWnd) (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0) #define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0) #define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) #define MCIWndGetDevice(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) #define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0) #define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value)) #define MCIWndOpenInterface(hWnd,pUnk) (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk)) #define MCIWndSetOwner(hWnd,hWndP) (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0) #define MCIWNDM_GETDEVICEID (WM_USER + 100) #define MCIWNDM_GETSTART (WM_USER + 103) #define MCIWNDM_GETLENGTH (WM_USER + 104) #define MCIWNDM_GETEND (WM_USER + 105) #define MCIWNDM_EJECT (WM_USER + 107) #define MCIWNDM_SETZOOM (WM_USER + 108) #define MCIWNDM_GETZOOM (WM_USER + 109) #define MCIWNDM_SETVOLUME (WM_USER + 110) #define MCIWNDM_GETVOLUME (WM_USER + 111) #define MCIWNDM_SETSPEED (WM_USER + 112) #define MCIWNDM_GETSPEED (WM_USER + 113) #define MCIWNDM_SETREPEAT (WM_USER + 114) #define MCIWNDM_GETREPEAT (WM_USER + 115) #define MCIWNDM_REALIZE (WM_USER + 118) #define MCIWNDM_VALIDATEMEDIA (WM_USER + 121) #define MCIWNDM_PLAYFROM (WM_USER + 122) #define MCIWNDM_PLAYTO (WM_USER + 123) #define MCIWNDM_GETPALETTE (WM_USER + 126) #define MCIWNDM_SETPALETTE (WM_USER + 127) #define MCIWNDM_SETTIMERS (WM_USER + 129) #define MCIWNDM_SETACTIVETIMER (WM_USER + 130) #define MCIWNDM_SETINACTIVETIMER (WM_USER + 131) #define MCIWNDM_GETACTIVETIMER (WM_USER + 132) #define MCIWNDM_GETINACTIVETIMER (WM_USER + 133) #define MCIWNDM_CHANGESTYLES (WM_USER + 135) #define MCIWNDM_GETSTYLES (WM_USER + 136) #define MCIWNDM_GETALIAS (WM_USER + 137) #define MCIWNDM_PLAYREVERSE (WM_USER + 139) #define MCIWNDM_GET_SOURCE (WM_USER + 140) #define MCIWNDM_PUT_SOURCE (WM_USER + 141) #define MCIWNDM_GET_DEST (WM_USER + 142) #define MCIWNDM_PUT_DEST (WM_USER + 143) #define MCIWNDM_CAN_PLAY (WM_USER + 144) #define MCIWNDM_CAN_WINDOW (WM_USER + 145) #define MCIWNDM_CAN_RECORD (WM_USER + 146) #define MCIWNDM_CAN_SAVE (WM_USER + 147) #define MCIWNDM_CAN_EJECT (WM_USER + 148) #define MCIWNDM_CAN_CONFIG (WM_USER + 149) #define MCIWNDM_PALETTEKICK (WM_USER + 150) #define MCIWNDM_OPENINTERFACE (WM_USER + 151) #define MCIWNDM_SETOWNER (WM_USER + 152) #define MCIWNDM_SENDSTRINGA (WM_USER + 101) #define MCIWNDM_GETPOSITIONA (WM_USER + 102) #define MCIWNDM_GETMODEA (WM_USER + 106) #define MCIWNDM_SETTIMEFORMATA (WM_USER + 119) #define MCIWNDM_GETTIMEFORMATA (WM_USER + 120) #define MCIWNDM_GETFILENAMEA (WM_USER + 124) #define MCIWNDM_GETDEVICEA (WM_USER + 125) #define MCIWNDM_GETERRORA (WM_USER + 128) #define MCIWNDM_NEWA (WM_USER + 134) #define MCIWNDM_RETURNSTRINGA (WM_USER + 138) #define MCIWNDM_OPENA (WM_USER + 153) #define MCIWNDM_SENDSTRINGW (WM_USER + 201) #define MCIWNDM_GETPOSITIONW (WM_USER + 202) #define MCIWNDM_GETMODEW (WM_USER + 206) #define MCIWNDM_SETTIMEFORMATW (WM_USER + 219) #define MCIWNDM_GETTIMEFORMATW (WM_USER + 220) #define MCIWNDM_GETFILENAMEW (WM_USER + 224) #define MCIWNDM_GETDEVICEW (WM_USER + 225) #define MCIWNDM_GETERRORW (WM_USER + 228) #define MCIWNDM_NEWW (WM_USER + 234) #define MCIWNDM_RETURNSTRINGW (WM_USER + 238) #define MCIWNDM_OPENW (WM_USER + 252) #define MCIWNDM_SENDSTRING WINELIB_NAME_AW(MCIWNDM_SENDSTRING) #define MCIWNDM_GETPOSITION WINELIB_NAME_AW(MCIWNDM_GETPOSITION) #define MCIWNDM_GETMODE WINELIB_NAME_AW(MCIWNDM_GETMODE) #define MCIWNDM_SETTIMEFORMAT WINELIB_NAME_AW(MCIWNDM_SETTIMEFORMAT) #define MCIWNDM_GETTIMEFORMAT WINELIB_NAME_AW(MCIWNDM_GETTIMEFORMAT) #define MCIWNDM_GETFILENAME WINELIB_NAME_AW(MCIWNDM_GETFILENAME) #define MCIWNDM_GETDEVICE WINELIB_NAME_AW(MCIWNDM_GETDEVICE) #define MCIWNDM_GETERROR WINELIB_NAME_AW(MCIWNDM_GETERROR) #define MCIWNDM_NEW WINELIB_NAME_AW(MCIWNDM_NEW) #define MCIWNDM_RETURNSTRING WINELIB_NAME_AW(MCIWNDM_RETURNSTRING) #define MCIWNDM_OPEN WINELIB_NAME_AW(MCIWNDM_OPEN) #define MCIWNDM_NOTIFYMODE (WM_USER + 200) #define MCIWNDM_NOTIFYPOS (WM_USER + 201) #define MCIWNDM_NOTIFYSIZE (WM_USER + 202) #define MCIWNDM_NOTIFYMEDIA (WM_USER + 203) #define MCIWNDM_NOTIFYERROR (WM_USER + 205) #define MCIWND_START -1 #define MCIWND_END -2 /******************************************** * DrawDib declarations */ typedef struct { LONG timeCount; LONG timeDraw; LONG timeDecompress; LONG timeDither; LONG timeStretch; LONG timeBlt; LONG timeSetDIBits; } DRAWDIBTIME, *LPDRAWDIBTIME; HDRAWDIB VFWAPI DrawDibOpen( void ); UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground); BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd, HDC hdc, INT dxDst, INT dyDst, LPBITMAPINFOHEADER lpbi, INT dxSrc, INT dySrc, UINT wFlags); BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst, LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT xSrc, INT ySrc, INT dxSrc, INT dySrc, UINT wFlags); /* DrawDibDraw flags */ #define DDF_UPDATE 0x0002 #define DDF_SAME_HDC 0x0004 #define DDF_SAME_DRAW 0x0008 #define DDF_DONTDRAW 0x0010 #define DDF_ANIMATE 0x0020 #define DDF_BUFFER 0x0040 #define DDF_JUSTDRAWIT 0x0080 #define DDF_FULLSCREEN 0x0100 #define DDF_BACKGROUNDPAL 0x0200 #define DDF_NOTKEYFRAME 0x0400 #define DDF_HURRYUP 0x0800 #define DDF_HALFTONE 0x1000 #define DDF_PREROLL DDF_DONTDRAW #define DDF_SAME_DIB DDF_SAME_DRAW #define DDF_SAME_SIZE DDF_SAME_DRAW BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal); HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd); BOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe); LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags); BOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate); BOOL VFWAPI DrawDibStop(HDRAWDIB hdd); #define DrawDibUpdate(hdd, hdc, x, y) \ DrawDibDraw(hdd, hdc, x, y, 0, 0, NULL, NULL, 0, 0, 0, 0, DDF_UPDATE) BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd); BOOL VFWAPI DrawDibClose(HDRAWDIB hdd); BOOL VFWAPI DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime); /* display profiling */ #define PD_CAN_DRAW_DIB 0x0001 #define PD_CAN_STRETCHDIB 0x0002 #define PD_STRETCHDIB_1_1_OK 0x0004 #define PD_STRETCHDIB_1_2_OK 0x0008 #define PD_STRETCHDIB_1_N_OK 0x0010 DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi); DECLARE_HANDLE(HVIDEO); typedef HVIDEO *LPHVIDEO; DWORD VFWAPI VideoForWindowsVersion(void); LONG VFWAPI InitVFW(void); LONG VFWAPI TermVFW(void); #define DV_ERR_OK (0) #define DV_ERR_BASE (1) #define DV_ERR_NONSPECIFIC (DV_ERR_BASE) #define DV_ERR_BADFORMAT (DV_ERR_BASE + 1) #define DV_ERR_STILLPLAYING (DV_ERR_BASE + 2) #define DV_ERR_UNPREPARED (DV_ERR_BASE + 3) #define DV_ERR_SYNC (DV_ERR_BASE + 4) #define DV_ERR_TOOMANYCHANNELS (DV_ERR_BASE + 5) #define DV_ERR_NOTDETECTED (DV_ERR_BASE + 6) #define DV_ERR_BADINSTALL (DV_ERR_BASE + 7) #define DV_ERR_CREATEPALETTE (DV_ERR_BASE + 8) #define DV_ERR_SIZEFIELD (DV_ERR_BASE + 9) #define DV_ERR_PARAM1 (DV_ERR_BASE + 10) #define DV_ERR_PARAM2 (DV_ERR_BASE + 11) #define DV_ERR_CONFIG1 (DV_ERR_BASE + 12) #define DV_ERR_CONFIG2 (DV_ERR_BASE + 13) #define DV_ERR_FLAGS (DV_ERR_BASE + 14) #define DV_ERR_13 (DV_ERR_BASE + 15) #define DV_ERR_NOTSUPPORTED (DV_ERR_BASE + 16) #define DV_ERR_NOMEM (DV_ERR_BASE + 17) #define DV_ERR_ALLOCATED (DV_ERR_BASE + 18) #define DV_ERR_BADDEVICEID (DV_ERR_BASE + 19) #define DV_ERR_INVALHANDLE (DV_ERR_BASE + 20) #define DV_ERR_BADERRNUM (DV_ERR_BASE + 21) #define DV_ERR_NO_BUFFERS (DV_ERR_BASE + 22) #define DV_ERR_MEM_CONFLICT (DV_ERR_BASE + 23) #define DV_ERR_IO_CONFLICT (DV_ERR_BASE + 24) #define DV_ERR_DMA_CONFLICT (DV_ERR_BASE + 25) #define DV_ERR_INT_CONFLICT (DV_ERR_BASE + 26) #define DV_ERR_PROTECT_ONLY (DV_ERR_BASE + 27) #define DV_ERR_LASTERROR (DV_ERR_BASE + 27) #define DV_ERR_USER_MSG (DV_ERR_BASE + 1000) #ifndef MM_DRVM_OPEN #define MM_DRVM_OPEN 0x3D0 #define MM_DRVM_CLOSE 0x3D1 #define MM_DRVM_DATA 0x3D2 #define MM_DRVM_ERROR 0x3D3 #define DV_VM_OPEN MM_DRVM_OPEN #define DV_VM_CLOSE MM_DRVM_CLOSE #define DV_VM_DATA MM_DRVM_DATA #define DV_VM_ERROR MM_DRVM_ERROR #endif typedef struct videohdr_tag { LPBYTE lpData; DWORD dwBufferLength; DWORD dwBytesUsed; DWORD dwTimeCaptured; DWORD_PTR dwUser; DWORD dwFlags; DWORD_PTR dwReserved[4]; } VIDEOHDR, *PVIDEOHDR, *LPVIDEOHDR; #define VHDR_DONE 0x00000001 #define VHDR_PREPARED 0x00000002 #define VHDR_INQUEUE 0x00000004 #define VHDR_KEYFRAME 0x00000008 typedef struct channel_caps_tag { DWORD dwFlags; DWORD dwSrcRectXMod; DWORD dwSrcRectYMod; DWORD dwSrcRectWidthMod; DWORD dwSrcRectHeightMod; DWORD dwDstRectXMod; DWORD dwDstRectYMod; DWORD dwDstRectWidthMod; DWORD dwDstRectHeightMod; } CHANNEL_CAPS, *PCHANNEL_CAPS, *LPCHANNEL_CAPS; #define VCAPS_OVERLAY 0x00000001 #define VCAPS_SRC_CAN_CLIP 0x00000002 #define VCAPS_DST_CAN_CLIP 0x00000004 #define VCAPS_CAN_SCALE 0x00000008 #define VIDEO_EXTERNALIN 0x0001 #define VIDEO_EXTERNALOUT 0x0002 #define VIDEO_IN 0x0004 #define VIDEO_OUT 0x0008 #define VIDEO_DLG_QUERY 0x0010 #define VIDEO_CONFIGURE_QUERY 0x8000 #define VIDEO_CONFIGURE_SET 0x1000 #define VIDEO_CONFIGURE_GET 0x2000 #define VIDEO_CONFIGURE_QUERYSIZE 0x0001 #define VIDEO_CONFIGURE_CURRENT 0x0010 #define VIDEO_CONFIGURE_NOMINAL 0x0020 #define VIDEO_CONFIGURE_MIN 0x0040 #define VIDEO_CONFIGURE_MAX 0x0080 #define DVM_USER 0x4000 #define DVM_CONFIGURE_START 0x1000 #define DVM_CONFIGURE_END 0x1FFF #define DVM_PALETTE (DVM_CONFIGURE_START + 1) #define DVM_FORMAT (DVM_CONFIGURE_START + 2) #define DVM_PALETTERGB555 (DVM_CONFIGURE_START + 3) #define DVM_SRC_RECT (DVM_CONFIGURE_START + 4) #define DVM_DST_RECT (DVM_CONFIGURE_START + 5) #define AVICapSM(hwnd,m,w,l) ((IsWindow(hwnd)) ? SendMessage(hwnd,m,w,l) : 0) #define WM_CAP_START WM_USER #define WM_CAP_UNICODE_START WM_USER+100 #define WM_CAP_GET_CAPSTREAMPTR (WM_CAP_START + 1) #define WM_CAP_SET_CALLBACK_ERRORW (WM_CAP_UNICODE_START + 2) #define WM_CAP_SET_CALLBACK_STATUSW (WM_CAP_UNICODE_START + 3) #define WM_CAP_SET_CALLBACK_ERRORA (WM_CAP_START + 2) #define WM_CAP_SET_CALLBACK_STATUSA (WM_CAP_START+ 3) #define WM_CAP_SET_CALLBACK_ERROR WINELIB_NAME_AW(WM_CAP_SET_CALLBACK_ERROR) #define WM_CAP_SET_CALLBACK_STATUS WINELIB_NAME_AW(WM_CAP_SET_CALLBACK_STATUS) #define WM_CAP_SET_CALLBACK_YIELD (WM_CAP_START + 4) #define WM_CAP_SET_CALLBACK_FRAME (WM_CAP_START + 5) #define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START + 6) #define WM_CAP_SET_CALLBACK_WAVESTREAM (WM_CAP_START + 7) #define WM_CAP_GET_USER_DATA (WM_CAP_START + 8) #define WM_CAP_SET_USER_DATA (WM_CAP_START + 9) #define WM_CAP_DRIVER_CONNECT (WM_CAP_START + 10) #define WM_CAP_DRIVER_DISCONNECT (WM_CAP_START + 11) #define WM_CAP_DRIVER_GET_NAMEA (WM_CAP_START + 12) #define WM_CAP_DRIVER_GET_VERSIONA (WM_CAP_START + 13) #define WM_CAP_DRIVER_GET_NAMEW (WM_CAP_UNICODE_START + 12) #define WM_CAP_DRIVER_GET_VERSIONW (WM_CAP_UNICODE_START + 13) #define WM_CAP_DRIVER_GET_NAME WINELIB_NAME_AW(WM_CAP_DRIVER_GET_NAME) #define WM_CAP_DRIVER_GET_VERSION WINELIB_NAME_AW(WM_CAP_DRIVER_GET_VERSION) #define WM_CAP_DRIVER_GET_CAPS (WM_CAP_START + 14) #define WM_CAP_FILE_SET_CAPTURE_FILEA (WM_CAP_START + 20) #define WM_CAP_FILE_GET_CAPTURE_FILEA (WM_CAP_START + 21) #define WM_CAP_FILE_ALLOCATE (WM_CAP_START + 22) #define WM_CAP_FILE_SAVEASA (WM_CAP_START + 23) #define WM_CAP_FILE_SET_INFOCHUNK (WM_CAP_START + 24) #define WM_CAP_FILE_SAVEDIBA (WM_CAP_START + 25) #define WM_CAP_FILE_SET_CAPTURE_FILEW (WM_CAP_UNICODE_START + 20) #define WM_CAP_FILE_GET_CAPTURE_FILEW (WM_CAP_UNICODE_START + 21) #define WM_CAP_FILE_SAVEASW (WM_CAP_UNICODE_START + 23) #define WM_CAP_FILE_SAVEDIBW (WM_CAP_UNICODE_START + 25) #define WM_CAP_FILE_SET_CAPTURE_FILE WINELIB_NAME_AW(WM_CAP_FILE_SET_CAPTURE_FILE) #define WM_CAP_FILE_GET_CAPTURE_FILE WINELIB_NAME_AW(WM_CAP_FILE_GET_CAPTURE_FILE) #define WM_CAP_FILE_SAVEAS WINELIB_NAME_AW(WM_CAP_FILE_SAVEAS) #define WM_CAP_FILE_SAVEDIB WINELIB_NAME_AW(WM_CAP_FILE_SAVEDIB) #define WM_CAP_EDIT_COPY (WM_CAP_START + 30) #define WM_CAP_SET_AUDIOFORMAT (WM_CAP_START + 35) #define WM_CAP_GET_AUDIOFORMAT (WM_CAP_START + 36) #define WM_CAP_DLG_VIDEOFORMAT (WM_CAP_START + 41) #define WM_CAP_DLG_VIDEOSOURCE (WM_CAP_START + 42) #define WM_CAP_DLG_VIDEODISPLAY (WM_CAP_START + 43) #define WM_CAP_GET_VIDEOFORMAT (WM_CAP_START + 44) #define WM_CAP_SET_VIDEOFORMAT (WM_CAP_START + 45) #define WM_CAP_DLG_VIDEOCOMPRESSION (WM_CAP_START + 46) #define WM_CAP_SET_PREVIEW (WM_CAP_START + 50) #define WM_CAP_SET_OVERLAY (WM_CAP_START + 51) #define WM_CAP_SET_PREVIEWRATE (WM_CAP_START + 52) #define WM_CAP_SET_SCALE (WM_CAP_START + 53) #define WM_CAP_GET_STATUS (WM_CAP_START + 54) #define WM_CAP_SET_SCROLL (WM_CAP_START + 55) #define WM_CAP_GRAB_FRAME (WM_CAP_START + 60) #define WM_CAP_GRAB_FRAME_NOSTOP (WM_CAP_START + 61) #define WM_CAP_SEQUENCE (WM_CAP_START + 62) #define WM_CAP_SEQUENCE_NOFILE (WM_CAP_START + 63) #define WM_CAP_SET_SEQUENCE_SETUP (WM_CAP_START + 64) #define WM_CAP_GET_SEQUENCE_SETUP (WM_CAP_START + 65) #define WM_CAP_SET_MCI_DEVICEA (WM_CAP_START + 66) #define WM_CAP_GET_MCI_DEVICEA (WM_CAP_START + 67) #define WM_CAP_SET_MCI_DEVICEW (WM_CAP_UNICODE_START + 66) #define WM_CAP_GET_MCI_DEVICEW (WM_CAP_UNICODE_START + 67) #define WM_CAP_SET_MCI_DEVICE WINELIB_NAME_AW(WM_CAP_SET_MCI_DEVICE) #define WM_CAP_GET_MCI_DEVICE WINELIB_NAME_AW(WM_CAP_GET_MCI_DEVICE) #define WM_CAP_STOP (WM_CAP_START + 68) #define WM_CAP_ABORT (WM_CAP_START + 69) #define WM_CAP_SINGLE_FRAME_OPEN (WM_CAP_START + 70) #define WM_CAP_SINGLE_FRAME_CLOSE (WM_CAP_START + 71) #define WM_CAP_SINGLE_FRAME (WM_CAP_START + 72) #define WM_CAP_PAL_OPENA (WM_CAP_START + 80) #define WM_CAP_PAL_SAVEA (WM_CAP_START + 81) #define WM_CAP_PAL_OPENW (WM_CAP_UNICODE_START + 80) #define WM_CAP_PAL_SAVEW (WM_CAP_UNICODE_START + 81) #define WM_CAP_PAL_OPEN WINELIB_NAME_AW(WM_CAP_PAL_OPEN) #define WM_CAP_PAL_SAVE WINELIB_NAME_AW(WM_CAP_PAL_SAVE) #define WM_CAP_PAL_PASTE (WM_CAP_START + 82) #define WM_CAP_PAL_AUTOCREATE (WM_CAP_START + 83) #define WM_CAP_PAL_MANUALCREATE (WM_CAP_START + 84) #define WM_CAP_SET_CALLBACK_CAPCONTROL (WM_CAP_START + 85) #define WM_CAP_UNICODE_END WM_CAP_PAL_SAVEW #define WM_CAP_END WM_CAP_UNICODE_END typedef struct tagCapDriverCaps { UINT wDeviceIndex; BOOL fHasOverlay; BOOL fHasDlgVideoSource; BOOL fHasDlgVideoFormat; BOOL fHasDlgVideoDisplay; BOOL fCaptureInitialized; BOOL fDriverSuppliesPalettes; HANDLE hVideoIn; HANDLE hVideoOut; HANDLE hVideoExtIn; HANDLE hVideoExtOut; } CAPDRIVERCAPS, *PCAPDRIVERCAPS, *LPCAPDRIVERCAPS; typedef struct tagCapStatus { UINT uiImageWidth; UINT uiImageHeight; BOOL fLiveWindow; BOOL fOverlayWindow; BOOL fScale; POINT ptScroll; BOOL fUsingDefaultPalette; BOOL fAudioHardware; BOOL fCapFileExists; DWORD dwCurrentVideoFrame; DWORD dwCurrentVideoFramesDropped; DWORD dwCurrentWaveSamples; DWORD dwCurrentTimeElapsedMS; HPALETTE hPalCurrent; BOOL fCapturingNow; DWORD dwReturn; UINT wNumVideoAllocated; UINT wNumAudioAllocated; } CAPSTATUS, *PCAPSTATUS, *LPCAPSTATUS; typedef struct tagCaptureParms { DWORD dwRequestMicroSecPerFrame; BOOL fMakeUserHitOKToCapture; UINT wPercentDropForError; BOOL fYield; DWORD dwIndexSize; UINT wChunkGranularity; BOOL fUsingDOSMemory; UINT wNumVideoRequested; BOOL fCaptureAudio; UINT wNumAudioRequested; UINT vKeyAbort; BOOL fAbortLeftMouse; BOOL fAbortRightMouse; BOOL fLimitEnabled; UINT wTimeLimit; BOOL fMCIControl; BOOL fStepMCIDevice; DWORD dwMCIStartTime; DWORD dwMCIStopTime; BOOL fStepCaptureAt2x; UINT wStepCaptureAverageFrames; DWORD dwAudioBufferSize; BOOL fDisableWriteCache; UINT AVStreamMaster; } CAPTUREPARMS, *PCAPTUREPARMS, *LPCAPTUREPARMS; typedef LRESULT (CALLBACK* CAPYIELDCALLBACK) (HWND hWnd); typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz); typedef LRESULT (CALLBACK* CAPERRORCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz); typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz); typedef LRESULT (CALLBACK* CAPERRORCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz); typedef LRESULT (CALLBACK* CAPVIDEOCALLBACK) (HWND hWnd, LPVIDEOHDR lpVHdr); typedef LRESULT (CALLBACK* CAPWAVECALLBACK) (HWND hWnd, LPWAVEHDR lpWHdr); typedef LRESULT (CALLBACK* CAPCONTROLCALLBACK)(HWND hWnd, int nState); HWND VFWAPI capCreateCaptureWindowA(LPCSTR,DWORD,INT,INT,INT,INT,HWND,INT); HWND VFWAPI capCreateCaptureWindowW(LPCWSTR,DWORD,INT,INT,INT,INT,HWND,INT); #define capCreateCaptureWindow WINELIB_NAME_AW(capCreateCaptureWindow) BOOL VFWAPI capGetDriverDescriptionA(WORD,LPSTR,INT,LPSTR,INT); BOOL VFWAPI capGetDriverDescriptionW(WORD,LPWSTR,INT,LPWSTR,INT); #define capGetDriverDescription WINELIB_NAME_AW(capGetDriverDescription) #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __WINE_VFW_H */ ================================================ FILE: wine/windows/vfwmsgs.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define VFW_S_NO_MORE_ITEMS ((HRESULT)0x00040103) #define VFW_S_DUPLICATE_NAME ((HRESULT)0x0004022D) #define VFW_S_STATE_INTERMEDIATE ((HRESULT)0x00040237) #define VFW_S_PARTIAL_RENDER ((HRESULT)0x00040242) #define VFW_S_SOME_DATA_IGNORED ((HRESULT)0x00040245) #define VFW_S_CONNECTIONS_DEFERRED ((HRESULT)0x00040246) #define VFW_S_RESOURCE_NOT_NEEDED ((HRESULT)0x00040250) #define VFW_S_MEDIA_TYPE_IGNORED ((HRESULT)0x00040254) #define VFW_S_VIDEO_NOT_RENDERED ((HRESULT)0x00040257) #define VFW_S_AUDIO_NOT_RENDERED ((HRESULT)0x00040258) #define VFW_S_RPZA ((HRESULT)0x0004025A) #define VFW_S_ESTIMATED ((HRESULT)0x00040260) #define VFW_S_RESERVED ((HRESULT)0x00040263) #define VFW_S_STREAM_OFF ((HRESULT)0x00040267) #define VFW_S_CANT_CUE ((HRESULT)0x00040268) #define VFW_S_NO_STOP_TIME ((HRESULT)0x00040270) #define VFW_S_NOPREVIEWPIN ((HRESULT)0x0004027E) #define VFW_S_DVD_NON_ONE_SEQUENTIAL ((HRESULT)0x00040280) #define VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE ((HRESULT)0x0004028C) #define VFW_S_DVD_NOT_ACCURATE ((HRESULT)0x0004028D) #define VFW_E_INVALIDMEDIATYPE ((HRESULT)0x80040200) #define VFW_E_INVALIDSUBTYPE ((HRESULT)0x80040201) #define VFW_E_NEED_OWNER ((HRESULT)0x80040202) #define VFW_E_ENUM_OUT_OF_SYNC ((HRESULT)0x80040203) #define VFW_E_ALREADY_CONNECTED ((HRESULT)0x80040204) #define VFW_E_FILTER_ACTIVE ((HRESULT)0x80040205) #define VFW_E_NO_TYPES ((HRESULT)0x80040206) #define VFW_E_NO_ACCEPTABLE_TYPES ((HRESULT)0x80040207) #define VFW_E_INVALID_DIRECTION ((HRESULT)0x80040208) #define VFW_E_NOT_CONNECTED ((HRESULT)0x80040209) #define VFW_E_NO_ALLOCATOR ((HRESULT)0x8004020A) #define VFW_E_RUNTIME_ERROR ((HRESULT)0x8004020B) #define VFW_E_BUFFER_NOTSET ((HRESULT)0x8004020C) #define VFW_E_BUFFER_OVERFLOW ((HRESULT)0x8004020D) #define VFW_E_BADALIGN ((HRESULT)0x8004020E) #define VFW_E_ALREADY_COMMITTED ((HRESULT)0x8004020F) #define VFW_E_BUFFERS_OUTSTANDING ((HRESULT)0x80040210) #define VFW_E_NOT_COMMITTED ((HRESULT)0x80040211) #define VFW_E_SIZENOTSET ((HRESULT)0x80040212) #define VFW_E_NO_CLOCK ((HRESULT)0x80040213) #define VFW_E_NO_SINK ((HRESULT)0x80040214) #define VFW_E_NO_INTERFACE ((HRESULT)0x80040215) #define VFW_E_NOT_FOUND ((HRESULT)0x80040216) #define VFW_E_CANNOT_CONNECT ((HRESULT)0x80040217) #define VFW_E_CANNOT_RENDER ((HRESULT)0x80040218) #define VFW_E_CHANGING_FORMAT ((HRESULT)0x80040219) #define VFW_E_NO_COLOR_KEY_SET ((HRESULT)0x8004021A) #define VFW_E_NOT_OVERLAY_CONNECTION ((HRESULT)0x8004021B) #define VFW_E_NOT_SAMPLE_CONNECTION ((HRESULT)0x8004021C) #define VFW_E_PALETTE_SET ((HRESULT)0x8004021D) #define VFW_E_COLOR_KEY_SET ((HRESULT)0x8004021E) #define VFW_E_NO_COLOR_KEY_FOUND ((HRESULT)0x8004021F) #define VFW_E_NO_PALETTE_AVAILABLE ((HRESULT)0x80040220) #define VFW_E_NO_DISPLAY_PALETTE ((HRESULT)0x80040221) #define VFW_E_TOO_MANY_COLORS ((HRESULT)0x80040222) #define VFW_E_STATE_CHANGED ((HRESULT)0x80040223) #define VFW_E_NOT_STOPPED ((HRESULT)0x80040224) #define VFW_E_NOT_PAUSED ((HRESULT)0x80040225) #define VFW_E_NOT_RUNNING ((HRESULT)0x80040226) #define VFW_E_WRONG_STATE ((HRESULT)0x80040227) #define VFW_E_START_TIME_AFTER_END ((HRESULT)0x80040228) #define VFW_E_INVALID_RECT ((HRESULT)0x80040229) #define VFW_E_TYPE_NOT_ACCEPTED ((HRESULT)0x8004022A) #define VFW_E_SAMPLE_REJECTED ((HRESULT)0x8004022B) #define VFW_E_SAMPLE_REJECTED_EOS ((HRESULT)0x8004022C) #define VFW_E_DUPLICATE_NAME ((HRESULT)0x8004022D) #define VFW_E_TIMEOUT ((HRESULT)0x8004022E) #define VFW_E_INVALID_FILE_FORMAT ((HRESULT)0x8004022F) #define VFW_E_ENUM_OUT_OF_RANGE ((HRESULT)0x80040230) #define VFW_E_CIRCULAR_GRAPH ((HRESULT)0x80040231) #define VFW_E_NOT_ALLOWED_TO_SAVE ((HRESULT)0x80040232) #define VFW_E_TIME_ALREADY_PASSED ((HRESULT)0x80040233) #define VFW_E_ALREADY_CANCELLED ((HRESULT)0x80040234) #define VFW_E_CORRUPT_GRAPH_FILE ((HRESULT)0x80040235) #define VFW_E_ADVISE_ALREADY_SET ((HRESULT)0x80040236) #define VFW_E_NO_MODEX_AVAILABLE ((HRESULT)0x80040238) #define VFW_E_NO_ADVISE_SET ((HRESULT)0x80040239) #define VFW_E_NO_FULLSCREEN ((HRESULT)0x8004023A) #define VFW_E_IN_FULLSCREEN_MODE ((HRESULT)0x8004023B) #define VFW_E_UNKNOWN_FILE_TYPE ((HRESULT)0x80040240) #define VFW_E_CANNOT_LOAD_SOURCE_FILTER ((HRESULT)0x80040241) #define VFW_E_FILE_TOO_SHORT ((HRESULT)0x80040243) #define VFW_E_INVALID_FILE_VERSION ((HRESULT)0x80040244) #define VFW_E_INVALID_CLSID ((HRESULT)0x80040247) #define VFW_E_INVALID_MEDIA_TYPE ((HRESULT)0x80040248) #define VFW_E_SAMPLE_TIME_NOT_SET ((HRESULT)0x80040249) #define VFW_E_MEDIA_TIME_NOT_SET ((HRESULT)0x80040251) #define VFW_E_NO_TIME_FORMAT_SET ((HRESULT)0x80040252) #define VFW_E_MONO_AUDIO_HW ((HRESULT)0x80040253) #define VFW_E_NO_DECOMPRESSOR ((HRESULT)0x80040255) #define VFW_E_NO_AUDIO_HARDWARE ((HRESULT)0x80040256) #define VFW_E_RPZA ((HRESULT)0x80040259) #define VFW_E_PROCESSOR_NOT_SUITABLE ((HRESULT)0x8004025B) #define VFW_E_UNSUPPORTED_AUDIO ((HRESULT)0x8004025C) #define VFW_E_UNSUPPORTED_VIDEO ((HRESULT)0x8004025D) #define VFW_E_MPEG_NOT_CONSTRAINED ((HRESULT)0x8004025E) #define VFW_E_NOT_IN_GRAPH ((HRESULT)0x8004025F) #define VFW_E_NO_TIME_FORMAT ((HRESULT)0x80040261) #define VFW_E_READ_ONLY ((HRESULT)0x80040262) #define VFW_E_BUFFER_UNDERFLOW ((HRESULT)0x80040264) #define VFW_E_UNSUPPORTED_STREAM ((HRESULT)0x80040265) #define VFW_E_NO_TRANSPORT ((HRESULT)0x80040266) #define VFW_E_BAD_VIDEOCD ((HRESULT)0x80040269) #define VFW_E_OUT_OF_VIDEO_MEMORY ((HRESULT)0x80040271) #define VFW_E_VP_NEGOTIATION_FAILED ((HRESULT)0x80040272) #define VFW_E_DDRAW_CAPS_NOT_SUITABLE ((HRESULT)0x80040273) #define VFW_E_NO_VP_HARDWARE ((HRESULT)0x80040274) #define VFW_E_NO_CAPTURE_HARDWARE ((HRESULT)0x80040275) #define VFW_E_DVD_OPERATION_INHIBITED ((HRESULT)0x80040276) #define VFW_E_DVD_INVALIDDOMAIN ((HRESULT)0x80040277) #define VFW_E_DVD_NO_BUTTON ((HRESULT)0x80040278) #define VFW_E_DVD_GRAPHNOTREADY ((HRESULT)0x80040279) #define VFW_E_DVD_RENDERFAIL ((HRESULT)0x8004027A) #define VFW_E_DVD_DECNOTENOUGH ((HRESULT)0x8004027B) #define VFW_E_DDRAW_VERSION_NOT_SUITABLE ((HRESULT)0x8004027C) #define VFW_E_COPYPROT_FAILED ((HRESULT)0x8004027D) #define VFW_E_TIME_EXPIRED ((HRESULT)0x8004027F) #define VFW_E_DVD_WRONG_SPEED ((HRESULT)0x80040281) #define VFW_E_DVD_MENU_DOES_NOT_EXIST ((HRESULT)0x80040282) #define VFW_E_DVD_CMD_CANCELLED ((HRESULT)0x80040283) #define VFW_E_DVD_STATE_WRONG_VERSION ((HRESULT)0x80040284) #define VFW_E_DVD_STATE_CORRUPT ((HRESULT)0x80040285) #define VFW_E_DVD_STATE_WRONG_DISC ((HRESULT)0x80040286) #define VFW_E_DVD_INCOMPATIBLE_REGION ((HRESULT)0x80040287) #define VFW_E_DVD_NO_ATTRIBUTES ((HRESULT)0x80040288) #define VFW_E_DVD_NO_GOUP_PGC ((HRESULT)0x80040289) #define VFW_E_DVD_LOW_PARENTAL_LEVEL ((HRESULT)0x8004028A) #define VFW_E_DVD_NOT_IN_KARAOKE_MODE ((HRESULT)0x8004028B) #define VFW_E_FRAME_STEP_UNSUPPORTED ((HRESULT)0x8004028E) #define VFW_E_DVD_STREAM_DISABLED ((HRESULT)0x8004028F) #define VFW_E_DVD_TITLE_UNKNOWN ((HRESULT)0x80040290) #define VFW_E_DVD_INVALID_DISC ((HRESULT)0x80040291) #define VFW_E_DVD_NO_RESUME_INFORMATION ((HRESULT)0x80040292) #define VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD ((HRESULT)0x80040293) #define VFW_E_PIN_ALREADY_BLOCKED ((HRESULT)0x80040294) #define VFW_E_CERTIFICATION_FAILURE ((HRESULT)0x80040295) #define VFW_E_VMR_NOT_IN_MIXER_MODE ((HRESULT)0x80040296) #define VFW_E_VMR_NO_AP_SUPPLIED ((HRESULT)0x80040297) #define VFW_E_VMR_NO_DEINTERLACE_HW ((HRESULT)0x80040298) #define VFW_E_VMR_NO_PROCAMP_HW ((HRESULT)0x80040299) #define VFW_E_DVD_VMR9_INCOMPATIBLEDEC ((HRESULT)0x8004029A) #define VFW_E_NO_COPP_HW ((HRESULT)0x8004029B) #define VFW_E_DVD_NONBLOCKING ((HRESULT)0x8004029C) #define VFW_E_DVD_TOO_MANY_RENDERERS_IN_FILTER_GRAPH ((HRESULT)0x8004029D) #define VFW_E_DVD_NON_EVR_RENDERER_IN_FILTER_GRAPH ((HRESULT)0x8004029E) #define VFW_E_DVD_RESOLUTION_ERROR ((HRESULT)0x8004029F) #define VFW_E_CODECAPI_LINEAR_RANGE ((HRESULT)0x80040310) #define VFW_E_CODECAPI_ENUMERATED ((HRESULT)0x80040311) #define VFW_E_CODECAPI_NO_DEFAULT ((HRESULT)0x80040313) #define VFW_E_CODECAPI_NO_CURRENT_VALUE ((HRESULT)0x80040314) #define VFW_E_DVD_CHAPTER_DOES_NOT_EXIST ((HRESULT)0x80040315) #define VFW_E_BAD_KEY ((HRESULT)0x800403F2) #ifndef E_PROP_ID_UNSUPPORTED #define E_PROP_ID_UNSUPPORTED ((HRESULT)0x80070490) #endif #ifndef E_PROP_SET_UNSUPPORTED #define E_PROP_SET_UNSUPPORTED ((HRESULT)0x80070492) #endif ================================================ FILE: wine/windows/virtdisk.h ================================================ /* * Copyright 2017 Louis Lenders * Copyright 2018 Gijs Vermeulen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_VIRTDISK_DLL_H #define __WINE_VIRTDISK_DLL_H #ifdef __cplusplus extern "C" { #endif #define VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN 0 #define VIRTUAL_STORAGE_TYPE_DEVICE_ISO 1 #define VIRTUAL_STORAGE_TYPE_DEVICE_VHD 2 typedef enum _ATTACH_VIRTUAL_DISK_FLAG { ATTACH_VIRTUAL_DISK_FLAG_NONE = 0x00, ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY = 0x01, ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER = 0x02, ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME = 0x04, ATTACH_VIRTUAL_DISK_FLAG_NO_LOCAL_HOST = 0x08, ATTACH_VIRTUAL_DISK_FLAG_NO_SECURITY_DESCRIPTOR = 0x10 } ATTACH_VIRTUAL_DISK_FLAG; typedef enum _ATTACH_VIRTUAL_DISK_VERSION { ATTACH_VIRTUAL_DISK_VERSION_UNSPECIFIED, ATTACH_VIRTUAL_DISK_VERSION_1 } ATTACH_VIRTUAL_DISK_VERSION; typedef enum _COMPACT_VIRTUAL_DISK_FLAG { COMPACT_VIRTUAL_DISK_FLAG_NONE = 0x00, COMPACT_VIRTUAL_DISK_FLAG_NO_ZERO_SCAN = 0x01, COMPACT_VIRTUAL_DISK_FLAG_NO_BLOCK_MOVES = 0x02 } COMPACT_VIRTUAL_DISK_FLAG; typedef enum _COMPACT_VIRTUAL_DISK_VERSION { COMPACT_VIRTUAL_DISK_VERSION_UNSPECIFIED, COMPACT_VIRTUAL_DISK_VERSION_1 } COMPACT_VIRTUAL_DISK_VERSION; typedef enum _DEPENDENT_DISK_FLAG { DEPENDENT_DISK_FLAG_NONE = 0x00000000, DEPENDENT_DISK_FLAG_MULT_BACKING_FILES = 0x00000001, DEPENDENT_DISK_FLAG_FULLY_ALLOCATED = 0x00000002, DEPENDENT_DISK_FLAG_READ_ONLY = 0x00000004, DEPENDENT_DISK_FLAG_REMOTE = 0x00000008, DEPENDENT_DISK_FLAG_SYSTEM_VOLUME = 0x00000010, DEPENDENT_DISK_FLAG_SYSTEM_VOLUME_PARENT = 0x00000020, DEPENDENT_DISK_FLAG_REMOVABLE = 0x00000040, DEPENDENT_DISK_FLAG_NO_DRIVE_LETTER = 0x00000080, DEPENDENT_DISK_FLAG_PARENT = 0x00000100, DEPENDENT_DISK_FLAG_NO_HOST_DISK = 0x00000200, DEPENDENT_DISK_FLAG_PERMANENT_LIFETIME = 0x00000400 } DEPENDENT_DISK_FLAG; typedef enum _EXPAND_VIRTUAL_DISK_VERSION { EXPAND_VIRTUAL_DISK_VERSION_UNSPECIFIED, EXPAND_VIRTUAL_DISK_VERSION_1 } EXPAND_VIRTUAL_DISK_VERSION; typedef enum _DETACH_VIRTUAL_DISK_FLAG { DETACH_VIRTUAL_DISK_FLAG_NONE = 0x00000000 } DETACH_VIRTUAL_DISK_FLAG; typedef enum _EXPAND_VIRTUAL_DISK_FLAG { EXPAND_VIRTUAL_DISK_FLAG_NONE = 0x00000000 } EXPAND_VIRTUAL_DISK_FLAG; typedef enum _GET_STORAGE_DEPENDENCY_FLAG { GET_STORAGE_DEPENDENCY_FLAG_NONE = 0x00, GET_STORAGE_DEPENDENCY_FLAG_HOST_VOLUMES = 0x01, GET_STORAGE_DEPENDENCY_FLAG_DISK_HANDLE = 0x02 } GET_STORAGE_DEPENDENCY_FLAG; typedef enum _MIRROR_VIRTUAL_DISK_FLAG { MIRROR_VIRTUAL_DISK_FLAG_NONE = 0x00, MIRROR_VIRTUAL_DISK_FLAG_EXISTING_FILE = 0x01 } MIRROR_VIRTUAL_DISK_FLAG; typedef enum _MIRROR_VIRTUAL_DISK_VERSION { MIRROR_VIRTUAL_DISK_VERSION_UNSPECIFIED, MIRROR_VIRTUAL_DISK_VERSION_1 } MIRROR_VIRTUAL_DISK_VERSION; typedef enum _MERGE_VIRTUAL_DISK_FLAG { MERGE_VIRTUAL_DISK_FLAG_NONE = 0x00000000 } MERGE_VIRTUAL_DISK_FLAG; typedef enum _STORAGE_DEPENDENCY_INFO_VERSION { STORAGE_DEPENDENCY_INFO_VERSION_UNSPECIFIED = 0x0, STORAGE_DEPENDENCY_INFO_VERSION_1 = 0x1, STORAGE_DEPENDENCY_INFO_VERSION_2 = 0x2 } STORAGE_DEPENDENCY_INFO_VERSION; typedef enum _VIRTUAL_DISK_ACCESS_MASK { VIRTUAL_DISK_ACCESS_NONE = 0x00000000, VIRTUAL_DISK_ACCESS_ATTACH_RO = 0x00010000, VIRTUAL_DISK_ACCESS_ATTACH_RW = 0x00020000, VIRTUAL_DISK_ACCESS_DETACH = 0x00040000, VIRTUAL_DISK_ACCESS_GET_INFO = 0x00080000, VIRTUAL_DISK_ACCESS_CREATE = 0x00100000, VIRTUAL_DISK_ACCESS_METAOPS = 0x00200000, VIRTUAL_DISK_ACCESS_READ = 0x000d0000, VIRTUAL_DISK_ACCESS_ALL = 0x003f0000, VIRTUAL_DISK_ACCESS_WRITABLE = 0x00320000 } VIRTUAL_DISK_ACCESS_MASK; typedef struct _VIRTUAL_STORAGE_TYPE { ULONG DeviceId; GUID VendorId; } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE; typedef struct _ATTACH_VIRTUAL_DISK_PARAMETERS { ATTACH_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONG Reserved; } Version1; } DUMMYUNIONNAME; } ATTACH_VIRTUAL_DISK_PARAMETERS, *PATTACH_VIRTUAL_DISK_PARAMETERS; typedef struct _COMPACT_VIRTUAL_DISK_PARAMETERS { COMPACT_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONG Reserved; } Version1; } DUMMYUNIONNAME; } COMPACT_VIRTUAL_DISK_PARAMETERS, *PCOMPACT_VIRTUAL_DISK_PARAMETERS; typedef struct _EXPAND_VIRTUAL_DISK_PARAMETERS { EXPAND_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONGLONG NewSize; } Version1; } DUMMYUNIONNAME; } EXPAND_VIRTUAL_DISK_PARAMETERS, *PEXPAND_VIRTUAL_DISK_PARAMETERS; typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_1 { DEPENDENT_DISK_FLAG DependencyTypeFlags; ULONG ProviderSpecificFlags; VIRTUAL_STORAGE_TYPE VirtualStorageType; } STORAGE_DEPENDENCY_INFO_TYPE_1, *PSTORAGE_DEPENDENCY_INFO_TYPE_1; typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_2 { DEPENDENT_DISK_FLAG DependencyTypeFlags; ULONG ProviderSpecificFlags; VIRTUAL_STORAGE_TYPE VirtualStorageType; ULONG AncestorLevel; PWSTR DependencyDeviceName; PWSTR HostVolumeName; PWSTR DependentVolumeName; PWSTR DependentVolumeRelativePath; } STORAGE_DEPENDENCY_INFO_TYPE_2, *PSTORAGE_DEPENDENCY_INFO_TYPE_2; typedef struct _STORAGE_DEPENDENCY_INFO { STORAGE_DEPENDENCY_INFO_VERSION Version; ULONG NumberEntries; #if !defined(__WINESRC__) && (defined(_MSC_EXTENSIONS) || ((defined(__GNUC__) && __GNUC__ >= 3))) __C89_NAMELESS union { STORAGE_DEPENDENCY_INFO_TYPE_1 Version1Entries[]; STORAGE_DEPENDENCY_INFO_TYPE_2 Version2Entries[]; } __C89_NAMELESSUNIONNAME; #endif } STORAGE_DEPENDENCY_INFO, *PSTORAGE_DEPENDENCY_INFO; typedef struct _VIRTUAL_DISK_PROGRESS { DWORD OperationStatus; ULONGLONG CurrentValue; ULONGLONG CompletionValue; } VIRTUAL_DISK_PROGRESS, *PVIRTUAL_DISK_PROGRESS; DWORD WINAPI GetStorageDependencyInformation(HANDLE obj, GET_STORAGE_DEPENDENCY_FLAG flags, ULONG size, STORAGE_DEPENDENCY_INFO *info, ULONG *used); #ifdef __cplusplus } #endif #endif /* __WINE_VIRTDISK_DLL_H */ ================================================ FILE: wine/windows/vmr9.idl ================================================ /* * Copyright 2008 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; cpp_quote("#if 0") interface IDirect3DSurface9; interface IDirect3DDevice9; typedef LONGLONG REFERENCE_TIME; typedef DWORD D3DFORMAT; typedef DWORD D3DPOOL; typedef HANDLE HMONITOR; typedef struct { char dummy; } AM_MEDIA_TYPE; typedef struct { char dummy; } D3DCOLOR; cpp_quote("#endif") interface IVMRSurface9; interface IVMRSurfaceAllocator9; interface IVMRSurfaceAllocatorEx9; interface IVMRSurfaceAllocatorNotify9; interface IVMRImagePresenter9; interface IVMRImagePresenterConfig9; interface IVMRMonitorConfig9; interface IVMRWindowlessControl9; interface IVMRMixerControl9; interface IVMRImageCompositor9; interface IVMRMixerBitmap9; interface IVMRFilterConfig9; interface IVMRAspectRatioControl9; interface IVMRVideoStreamControl9; typedef enum _VMR9PresentationFlags { VMR9Sample_SyncPoint = 0x1, VMR9Sample_Preroll = 0x2, VMR9Sample_Discontinuity = 0x4, VMR9Sample_TimeValid = 0x8, VMR9Sample_SrcDstRectsValid = 0x10 } VMR9PresentationFlags; typedef struct _VMR9PresentationInfo { DWORD dwFlags; /* Flags defined above */ IDirect3DSurface9 *lpSurf; REFERENCE_TIME rtStart; REFERENCE_TIME rtEnd; SIZE szAspectRatio; RECT rcSrc; RECT rcDst; DWORD dwReserved1; DWORD dwReserved2; } VMR9PresentationInfo; [ local, object, uuid(69188c61-12a3-40f0-8ffc-342e7b433fd7), helpstring("IVMRImagePresenter9 interface"), pointer_default(unique) ] interface IVMRImagePresenter9 : IUnknown { HRESULT StartPresenting([in] DWORD_PTR id); HRESULT StopPresenting([in] DWORD_PTR id); HRESULT PresentImage([in] DWORD_PTR id, [in] VMR9PresentationInfo *info); } typedef enum _VMR9SurfaceAllocationFlags { VMR9AllocFlag_3DRenderTarget = 0x1, VMR9AllocFlag_DXVATarget = 0x2, VMR9AllocFlag_TextureSurface = 0x4, VMR9AllocFlag_OffscreenSurface = 0x8, VMR9AllocFlag_RGBDynamicSwitch = 0x10, VMR9AllocFlag_UsageReserved = 0xe0, VMR9AllocFlag_UsageMask = 0xff, } VMR9SurfaceAllocationFlags; typedef struct _VMR9AllocationInfo { DWORD dwFlags; /* Flags defined above */ DWORD dwWidth; DWORD dwHeight; D3DFORMAT Format; D3DPOOL Pool; DWORD MinBuffers; SIZE szAspectRatio; SIZE szNativeSize; } VMR9AllocationInfo; [ local, object, uuid(8d5148ea-3f5d-46cf-9df1-d1b896eedb1f), helpstring("IVMRSurfaceAllocator9 interface"), pointer_default(unique) ] interface IVMRSurfaceAllocator9 : IUnknown { HRESULT InitializeDevice([in] DWORD_PTR id, [in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers); HRESULT TerminateDevice([in] DWORD_PTR id); HRESULT GetSurface([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface); HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify9 *allocnotify); } [ local, object, uuid(6de9a68a-a928-4522-bf57-655ae3866456), helpstring("IVMRSurfaceAllocatorEx9 interface"), pointer_default(unique) ] interface IVMRSurfaceAllocatorEx9 : IVMRSurfaceAllocator9 { HRESULT GetSurfaceEx([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface, [out] RECT *dest); } [ local, object, uuid(dca3f5df-bb3a-4d03-bd81-84614bfbfa0c), helpstring("IVMRSurfaceAllocatorNotify9 interface"), pointer_default(unique) ] interface IVMRSurfaceAllocatorNotify9 : IUnknown { HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator9 *alloc); HRESULT SetD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor); HRESULT ChangeD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor); HRESULT AllocateSurfaceHelper([in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers, [out] IDirect3DSurface9 **surface); HRESULT NotifyEvent([in] LONG code, [in] LONG_PTR param1, [in] LONG_PTR param2); } typedef enum _VMR9AspectRatioMode { VMR9ARMode_None, VMR9ARMode_LetterBox } VMR9AspectRatioMode; [ local, object, uuid(8f537d09-f85e-4414-b23b-502e54c79927), helpstring("IVMRWindowlessControl interface"), pointer_default(unique) ] interface IVMRWindowlessControl9 : IUnknown { HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *arwidth, [out] LONG *arheight); HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height); HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height); HRESULT SetVideoPosition([in] const RECT *source, [in] const RECT *dest); HRESULT GetVideoPosition([out] RECT *source, [out] RECT *dest); HRESULT GetAspectRatioMode([out] DWORD *mode); HRESULT SetAspectRatioMode([in] DWORD mode); HRESULT SetVideoClippingWindow([in] HWND hwnd); HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc); HRESULT DisplayModeChanged(); HRESULT GetCurrentImage([out] BYTE **dib); HRESULT SetBorderColor([in] COLORREF color); HRESULT GetBorderColor([out] COLORREF *color); } typedef enum _VMR9MixerPrefs { /* Decimation */ MixerPref9_NoDecimation = 0x1, MixerPref9_DecimateOutput = 0x2, MixerPref9_ARAdjustXorY = 0x4, MixerPref9_NonSquareMixing = 0x8, MixerPref9_DecimateMask = 0xf, /* Filtering */ MixerPref9_BiLinearFiltering = 0x10, MixerPref9_PointFiltering = 0x20, MixerPref9_AnisotropicFiltering = 0x40, MixerPref9_PyramidalQuadFiltering = 0x80, MixerPref9_GaussianQuadFiltering = 0x100, MixerPref9_FilteringReserved = 0xe00, MixerPref9_FilteringMask = 0xff0, /* Render target */ MixerPref9_RenderTargetRGB = 0x1000, MixerPref9_RenderTargetYUV = 0x2000, MixerPref9_RenderTargetReserved = 0xfc000, MixerPref9_DynamicSwitchToBOB = 0x100000, MixerPref9_DynamicDecimateBy2 = 0x200000, MixerPref9_DynamicReserved = 0xc00000, MixerPref9_DynamicMask = 0xf00000, } VMR9MixerPrefs; typedef struct _VMR9NormalizedRect { FLOAT left; FLOAT top; FLOAT right; FLOAT bottom; } VMR9NormalizedRect; typedef enum _VMR9ProcAmpControlFlags { ProcAmpControl9_Brightness = 0x1, ProcAmpControl9_Contrast = 0x2, ProcAmpControl9_Hue = 0x4, ProcAmpControl9_Saturation = 0x8, ProcAmpControl9_Mask = 0xf } VMR9ProcAmpControlFlags; typedef struct _VMR9ProcAmpControl { DWORD dwSize; DWORD dwFlags; FLOAT Brightness; FLOAT Contrast; FLOAT Hue; FLOAT Saturation; } VMR9ProcAmpControl; typedef struct _VMR9ProcAmpControlRange { DWORD dwSize; VMR9ProcAmpControlFlags dwProperty; FLOAT MinValue; FLOAT MaxValue; FLOAT DefaultValue; FLOAT StepSize; } VMR9ProcAmpControlRange; [ local, object, uuid(1a777eaa-47c8-4930-b2c9-8fee1c1b0f3b), helpstring("IVMRMixerControl9 interface"), pointer_default(unique) ] interface IVMRMixerControl9 : IUnknown { HRESULT SetAlpha([in] DWORD streamid, [in] FLOAT alpha); HRESULT GetAlpha([in] DWORD streamid, [out] FLOAT *alpha); HRESULT SetZOrder([in] DWORD streamid, [in] DWORD zorder); HRESULT GetZOrder([in] DWORD streamid, [out] DWORD *zorder); HRESULT SetOutputRect([in] DWORD streamid, [in] const VMR9NormalizedRect *rect); HRESULT GetOutputRect([in] DWORD streamid, [out] VMR9NormalizedRect *rect); HRESULT SetBackgroundClr([in] COLORREF back); HRESULT GetBackgroundClr([out] COLORREF *back); HRESULT SetMixingPrefs([in] DWORD mixingprefs); HRESULT GetMixingPrefs([out] DWORD *mixingprefs); HRESULT SetProcAmpControl([in] DWORD streamid, [in] VMR9ProcAmpControl *control); HRESULT GetProcAmpControl([in] DWORD streamid, [in, out] VMR9ProcAmpControl *control); HRESULT GetProcAmpControlRange([in] DWORD streamid, [in, out] VMR9ProcAmpControlRange *controlrange); } typedef struct _VMR9AlphaBitmap { DWORD dwFlags; HDC hdc; IDirect3DSurface9 *pDDS; RECT rSrc; VMR9NormalizedRect *rDest; FLOAT fAlpha; COLORREF clrSrcKey; DWORD dwFilterMode; } VMR9AlphaBitmap; typedef enum _VMR9AlphaBitmapFlags { VMR9AlphaBitmap_Disable = 0x1, VMR9AlphaBitmap_hDC = 0x2, VMR9AlphaBitmap_EntireDDS = 0x4, VMR9AlphaBitmap_SrcColorKey = 0x8, VMR9AlphaBitmap_SrcRect = 0x10, VMR9AlphaBitmap_FilterMode = 0x20 } VMR9AlphaBitmapFlags; [ local, object, uuid(ced175e5-1935-4820-81bd-ff6ad00c9108), helpstring("IVMRMixerBitmap interface"), pointer_default(unique) ] interface IVMRMixerBitmap9 : IUnknown { HRESULT SetAlphaBitmap([in] const VMR9AlphaBitmap *bitmap); HRESULT UpdateAlphaBitmapParameters([in] const VMR9AlphaBitmap *bitmap); HRESULT GetAlphaBitmapParameters([out] VMR9AlphaBitmap *bitmap); } [ local, object, uuid(dfc581a1-6e1f-4c3a-8d0a-5e9792ea2afc), helpstring("IVMRSurface interface"), pointer_default(unique) ] interface IVMRSurface9 : IUnknown { HRESULT IsSurfaceLocked(); HRESULT LockSurface([out] BYTE **surface); HRESULT UnlockSurface(); HRESULT GetSurface([out] IDirect3DSurface9 **surface); } typedef enum _VMR9RenderPrefs { RenderPrefs9_DoNotRenderBorder = 0x1, RenderPrefs9_Mask = 0x1 } VMR9RenderPrefs; [ local, object, uuid(45c15cab-6e22-420a-8043-ae1f0ac02c7d), helpstring("IVMRImagePresenterConfig9 interface"), pointer_default(unique) ] interface IVMRImagePresenterConfig9 : IUnknown { HRESULT SetRenderingPrefs([in] DWORD renderflags); HRESULT GetRenderingPrefs([out] DWORD *renderflags); } [ local, object, uuid(d0cfe38b-93e7-4772-8957-0400c49a4485), helpstring("IVMRMixerStreamConfig interface"), pointer_default(unique) ] interface IVMRVideoStreamControl9: IUnknown { HRESULT SetStreamActiveState([in] BOOL active); HRESULT GetStreamActiveState([out] BOOL *active); } typedef enum _VMR9Mode { VMR9Mode_Windowed = 0x1, VMR9Mode_Windowless = 0x2, VMR9Mode_Renderless = 0x4, VMR9Mode_Mask = 0x7 } VMR9Mode; [ local, object, uuid(5a804648-4f66-4867-9c43-4f5c822cf1b8), helpstring("IVMRFilterConfig9 interface"), pointer_default(unique) ] interface IVMRFilterConfig9 : IUnknown { HRESULT SetImageCompositor([in] IVMRImageCompositor9 *compositor); HRESULT SetNumberOfStreams([in] DWORD max); HRESULT GetNumberOfStreams([out] DWORD *max); HRESULT SetRenderingPrefs([in] DWORD renderflags); HRESULT GetRenderingPrefs([out] DWORD *renderflags); HRESULT SetRenderingMode([in] DWORD mode); HRESULT GetRenderingMode([out] DWORD *mode); } [ local, object, uuid(00d96c29-bbde-4efc-9901-bb5036392146), helpstring("IVMRAspectRatioControl9 interface"), pointer_default(unique) ] interface IVMRAspectRatioControl9 : IUnknown { HRESULT GetAspectRatioMode([out] DWORD *mode); HRESULT SetAspectRatioMode([in] DWORD mode); } #define VMR9DEVICENAMELEN 32 #define VMR9DEVICEDESCRIPTIONLEN 512 typedef struct _VMR9MonitorInfo { UINT uDevID; RECT rcMonitor; HMONITOR hMon; DWORD dwFlags; WCHAR szDevice[VMR9DEVICENAMELEN]; WCHAR szDescription[VMR9DEVICEDESCRIPTIONLEN]; LARGE_INTEGER liDriverVersion; DWORD dwVendorId; DWORD dwDeviceId; DWORD dwSubSysId; DWORD dwRevision; } VMR9MonitorInfo; [ local, object, uuid(46c2e457-8ba0-4eef-b80b-0680f0978749), helpstring("IVMRMonitorConfig9 interface"), pointer_default(unique) ] interface IVMRMonitorConfig9 : IUnknown { HRESULT SetMonitor([in] UINT uDev); HRESULT GetMonitor([out] UINT *uDev); HRESULT SetDefaultMonitor([in] UINT uDev); HRESULT GetDefaultMonitor([out] UINT *uDev); HRESULT GetAvailableMonitors([out, size_is(arraysize)] VMR9MonitorInfo *info, [in] DWORD arraysize, [out] DWORD *numdev); } typedef enum _VMR9DeinterlacePrefs { DeinterlacePref9_NextBest = 0x1, DeinterlacePref9_BOB = 0x2, DeinterlacePref9_Weave = 0x4, DeinterlacePref9_Mask = 0x7 } VMR9DeinterlacePrefs; typedef enum _VMR9DeinterlaceTech { DeinterlaceTech9_Unknown = 0, DeinterlaceTech9_BOBLineReplicate = 0x1, DeinterlaceTech9_BOBVerticalStretch = 0x2, DeinterlaceTech9_MedianFiltering = 0x4, DeinterlaceTech9_EdgeFiltering = 0x10, DeinterlaceTech9_FieldAdaptive = 0x20, DeinterlaceTech9_PixelAdaptive = 0x40, DeinterlaceTech9_MotionVectorSteered = 0x80 } VMR9DeinterlaceTech; typedef struct _VMR9Frequency { DWORD dwNumerator; DWORD dwDenominator; } VMR9Frequency; typedef enum _VMR9_SampleFormat { VMR9_SampleReserved = 1, VMR9_SampleProgressiveFrame = 2, VMR9_SampleFieldInterleavedEvenFirst = 3, VMR9_SampleFieldInterleavedOddFirst = 4, VMR9_SampleFieldSingleEven = 5, VMR9_SampleFieldSingleOdd = 6, } VMR9_SampleFormat; typedef struct _VMR9VideoDesc { DWORD dwSize; DWORD dwSampleWidth; DWORD dwSampleHeight; VMR9_SampleFormat SampleFormat; DWORD dwFourCC; VMR9Frequency InputSampleFreq; VMR9Frequency OutputFrameFreq; } VMR9VideoDesc; typedef struct _VMR9DeinterlaceCaps { DWORD dwSize; DWORD dwNumPreviousOutputFrames; DWORD dwNumForwardRefSamples; DWORD dwNumBackwardRefSamples; VMR9DeinterlaceTech DeinterlaceTechnology; } VMR9DeinterlaceCaps; [ local, object, uuid(a215fb8d-13c2-4f7f-993c-003d6271a459), helpstring("IVMRDeinterlaceControl9 interface"), pointer_default(unique) ] interface IVMRDeinterlaceControl9 : IUnknown { HRESULT GetNumberOfDeinterlaceModes([in] VMR9VideoDesc *desc, [in, out] DWORD *nummodes, [out] GUID *modes); HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMR9VideoDesc *desc, [out] VMR9DeinterlaceCaps *caps); HRESULT GetDeinterlaceMode([in] DWORD streamid, [out] GUID *mode); HRESULT SetDeinterlaceMode([in] DWORD streamid, [in] GUID *mode); HRESULT GetDeinterlacePrefs([out] DWORD *prefs); HRESULT SetDeinterlacePrefs([in] DWORD prefs); HRESULT GetActualDeinterlaceMode([in] DWORD streamid, [out] GUID *mode); } typedef struct _VMR9VideoStreamInfo { IDirect3DSurface9 *pddsVideoSurface; DWORD dwWidth; DWORD dwHeight; DWORD dwStrmID; FLOAT fAlpha; VMR9NormalizedRect rNormal; REFERENCE_TIME rtStart; REFERENCE_TIME rtEnd; VMR9_SampleFormat SampleFormat; } VMR9VideoStreamInfo; [ local, object, uuid(4a5c89eb-df51-4654-ac2a-e48e02bbabf6), helpstring("IVMRImageCompositor9 interface"), pointer_default(unique) ] interface IVMRImageCompositor9 : IUnknown { HRESULT InitCompositionDevice([in] IUnknown *d3ddev); HRESULT TermCompositionDevice([in] IUnknown *d3ddev); HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirect3DSurface9 *d3dtarget, [in] AM_MEDIA_TYPE *mttarget, [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop, D3DCOLOR back, [in] VMR9VideoStreamInfo *info, [in] UINT streams); } ================================================ FILE: wine/windows/vmrender.idl ================================================ /* * Copyright (C) 2008 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif cpp_quote("#if 0") typedef DWORD IDirectDrawSurface7; typedef DWORD IDirectDraw7; typedef DWORD *LPBITMAPINFOHEADER; typedef DWORD *LPDDPIXELFORMAT; typedef struct { DWORD dw1, dw2; } DDCOLORKEY; cpp_quote("#endif") cpp_quote("#include ") interface IVMRSurface; interface IVMRSurfaceAllocator; interface IVMRSurfaceAllocatorNotify; interface IVMRImagePresenter; interface IVMRImagePresenterNotify; interface IVMRWindowlessControl; interface IVMRMixerControl; interface IVMRMixerBitmap; interface IVMRFilterConfig; interface IVMRAspectRatioControl; interface IVMRDeinterlaceControl; interface IVMRMonitorConfig; interface IVMRImageCompositor; interface IVMRVideoStreamControl; typedef enum _VMRPresentationFlags { VMRSample_SyncPoint = 0x01, VMRSample_Preroll = 0x02, VMRSample_Discontinuity = 0x04, VMRSample_TimeValid = 0x08, VMRSample_SrcDstRectsValid = 0x10 } VMRPresentationFlags; typedef struct tagVMRPRESENTATIONINFO { DWORD dwFlags; IDirectDrawSurface7 *lpSurf; REFERENCE_TIME rtStart, rtEnd; SIZE szAspectRatio; RECT rcSrc, rcDst; DWORD dwTypeSpecificFlags; DWORD dwInterlaceFlags; } VMRPRESENTATIONINFO; [ local, object, uuid(ce704fe7-e71e-41fb-baa2-c4403e1182f5), helpstring("IVMRImagePresenter interface"), pointer_default(unique) ] interface IVMRImagePresenter : IUnknown { HRESULT StartPresenting([in] DWORD_PTR id); HRESULT StopPresenting([in] DWORD_PTR id); HRESULT PresentImage([in] DWORD_PTR id, [in] VMRPRESENTATIONINFO *info); } typedef enum _VMRSurfaceAllocationFlags { AMAP_PIXELFORMAT_VALID = 0x01, AMAP_3D_TARGET = 0x02, AMAP_ALLOW_SYSMEM = 0x04, AMAP_FORCE_SYSMEM = 0x08, AMAP_DIRECTED_FLIP = 0x10, AMAP_DXVA_TARGET = 0x20 } VMRSurfaceAllocationFlags; typedef struct tagVMRALLOCATIONINFO { DWORD dwFlags; LPBITMAPINFOHEADER lpHdr; LPDDPIXELFORMAT lpPixFmt; SIZE szAspectRatio; DWORD dwMinBuffers; DWORD dwMaxBuffers; DWORD dwInterlaceFlags; SIZE szNativeSize; } VMRALLOCATIONINFO; [ local, object, uuid(31ce832e-4484-458b-8cca-f4d7e3db0b52), helpstring("IVMRSurfaceAllocator interface"), pointer_default(unique) ] interface IVMRSurfaceAllocator : IUnknown { HRESULT AllocateSurface([in] DWORD_PTR id, [in] VMRALLOCATIONINFO *allocinfo, [in, out] DWORD *buffers, IDirectDrawSurface7 **surface); HRESULT FreeSurface([in] DWORD_PTR id); HRESULT PrepareSurface([in] DWORD_PTR id, [in] IDirectDrawSurface7 *surface, [in] DWORD dwSurfaceFlags); HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify *notify); } [ local, object, uuid(aada05a8-5a4e-4729-af0b-cea27aed51e2), helpstring("IVMRSurfaceAllocatorNotify interface"), pointer_default(unique) ] interface IVMRSurfaceAllocatorNotify : IUnknown { HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator *allocator); HRESULT SetDDrawDevice([in] IDirectDraw7 *device, [in] HMONITOR monitor); HRESULT ChangeDDrawDevice([in] IDirectDraw7 *device, [in] HMONITOR monitor); HRESULT RestoreDDrawSurfaces(); HRESULT NotifyEvent([in] LONG EventCode, [in] LONG_PTR p1, [in] LONG_PTR p2); HRESULT SetBorderColor([in] COLORREF border); } typedef enum _VMR_ASPECT_RATIO_MODE { VMR_ARMODE_NONE, VMR_ARMODE_LETTER_BOX } VMR_ASPECT_RATIO_MODE; [ local, object, uuid(0eb1088c-4dcd-46f0-878f-39dae86a51b7), helpstring("IVMRWindowlessControl interface"), pointer_default(unique) ] interface IVMRWindowlessControl : IUnknown { HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *ar_width, [out] LONG *ar_height); HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height); HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height); HRESULT SetVideoPosition([in] const RECT *src_rect, [in] const RECT *dst_rect); HRESULT GetVideoPosition([out] RECT *src_rect, [out] RECT *dst_rect); HRESULT GetAspectRatioMode([out] DWORD *mode); HRESULT SetAspectRatioMode([in] DWORD mode); HRESULT SetVideoClippingWindow([in] HWND hwnd); HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc); HRESULT DisplayModeChanged(); HRESULT GetCurrentImage([out] BYTE **data); HRESULT SetBorderColor([in] COLORREF border); HRESULT GetBorderColor([out] COLORREF *border); HRESULT SetColorKey([in] COLORREF key); HRESULT GetColorKey([out] COLORREF *key); } typedef enum _VMRMixerPrefs { MixerPref_NoDecimation = 0x0001, MixerPref_DecimateOutput = 0x0002, MixerPref_ARAdjustXorY = 0x0004, MixerPref_DecimationReserved = 0x0008, MixerPref_DecimateMask = 0x000f, MixerPref_BiLinearFiltering = 0x0010, MixerPref_PointFiltering = 0x0020, MixerPref_FinteringMask = 0x00f0, MixerPref_RenderTargetRGB = 0x0100, MixerPref_RenderTargetYUV = 0x1000, MixerPref_RenderTargetYUV420 = 0x0200, MixerPref_RenderTargetYUV422 = 0x0400, MixerPref_RenderTargetYUV444 = 0x0800, MixerPref_RenderTargetReserved = 0xe000, MixerPref_RenderTargetMask = 0xff00, MixerPref_DynamicSwitchToBOB = 0x10000, MixerPref_DynamicDecimateBy2 = 0x20000, MixerPref_DynamicReserved = 0xc0000, MixerPref_DynamicMask = 0xf0000 } VMRMixerPrefs; typedef struct _NORMALIZEDRECT { FLOAT left, top, right, bottom; } NORMALIZEDRECT; [ local, object, uuid(1c1a17b0-bed0-415d-974b-dc6696131599), helpstring("IVMRMixerControl interface"), pointer_default(unique) ] interface IVMRMixerControl : IUnknown { HRESULT SetAlpha([in] DWORD id, [in] FLOAT alpha); HRESULT GetAlpha([in] DWORD id, [out] FLOAT *alpha); HRESULT SetZOrder([in] DWORD id, [in] DWORD z); HRESULT GetZOrder([in] DWORD id, [out] DWORD *z); HRESULT SetOutputRect([in] DWORD id, [in] const NORMALIZEDRECT *rect); HRESULT SetBackgroundClr([in] COLORREF background); HRESULT GetBackgroundClr([out] COLORREF *background); HRESULT SetMixingPrefs([in] DWORD prefs); HRESULT GetMixingPrefs([out] DWORD *prefs); } typedef struct tagVMRGUID { struct _GUID *pGUID, GUID; } VMRGUID; #define VMRDEVICENAMELEN 32 #define VMRDEVICEDESCRIPTIONLEN 256 typedef struct tagVMRMONITORINFO { VMRGUID guid; RECT rcMonitor; HMONITOR hMon; DWORD dwFlags; WCHAR szDevice[VMRDEVICENAMELEN]; WCHAR szDescription[VMRDEVICEDESCRIPTIONLEN]; LARGE_INTEGER liDriverVersion; DWORD dwVendorId; DWORD dwDeviceId; DWORD dwSubSysId; DWORD dwRevision; } VMRMONITORINFO; [ local, object, uuid(9cf0b1b6-fbaa-4b7f-88cf-cf1f130a0dce), helpstring("IVMRMonitorConfig interface"), pointer_default(unique) ] interface IVMRMonitorConfig : IUnknown { HRESULT SetMonitor([in] const VMRGUID *vmrguid); HRESULT GetMonitor([out] VMRGUID *vmrguid); HRESULT SetDefaultMonitor([in] const VMRGUID *vmrguid); HRESULT GetDefaultMonitor([out] VMRGUID *vmrguid); HRESULT GetAvailableMonitors([out, size_is(array_size)] VMRMONITORINFO *info, [in] DWORD array_size, [out] DWORD *retrieved); } typedef enum _VMRRenderPrefs { RenderPrefs_RestrictToInitialMonitor = 0x00, RenderPrefs_ForceOffScreen = 0x01, RenderPrefs_ForceOverlays = 0x02, RenderPrefs_AllowOverlays = 0x00, RenderPrefs_AllowOffscreen = 0x00, RenderPrefs_DoNotRenderColorKeyAndBorder = 0x08, RenderPrefs_Reserved = 0x10, RenderPrefs_PreferAGPMemWhenMixing = 0x20, RenderPrefs_Mask = 0x3f } VMRRenderPrefs; typedef enum _VMRMode { VMRMode_Windowed = 0x1, VMRMode_Windowless = 0x2, VMRMode_Renderless = 0x4, VMRMode_Mask = 0x7 } VMRMode; enum { MAX_NUMBER_OF_STREAMS = 16 }; [ local, object, uuid(9e5530c5-7034-48b4-bb46-0b8a6efc8e36), helpstring("IVMRFilterConfig interface"), pointer_default(unique) ] interface IVMRFilterConfig : IUnknown { HRESULT SetImageCompositor([in] IVMRImageCompositor *compositor); HRESULT SetNumberOfStreams([in] DWORD streams); HRESULT GetNumberOfStreams([out] DWORD *streams); HRESULT SetRenderingPrefs([in] DWORD prefs); HRESULT GetRenderingPrefs([out] DWORD *prefs); HRESULT SetRenderingMode([in] DWORD mode); HRESULT GetRenderingMode([out] DWORD *mode); } [ local, object, uuid(ede80b5c-bad6-4623-b537-65586c9f8dfd), helpstring("IVMRAspectRatioControl interface"), pointer_default(unique) ] interface IVMRAspectRatioControl : IUnknown { HRESULT GetAspectRatioMode([out] DWORD *armode); HRESULT SetAspectRatioMode([in] DWORD armode); } typedef enum _VMRDeinterlacePrefs { DeinterlacePref_NextBest = 0x1, DeinterlacePref_BOB = 0x2, DeinterlacePref_Weave = 0x4, DeinterlacePref_Mask = 0x7 } VMRDeinterlacePrefs; typedef enum _VMRDeinterlaceTech { DeinterlaceTech_Unknown = 0x00, DeinterlaceTech_BOBLineReplicate = 0x01, DeinterlaceTech_BOBVerticalStretch = 0x02, DeinterlaceTech_MedianFiltering = 0x04, DeinterlaceTech_EdgeFiltering = 0x08, DeinterlaceTech_FieldAdaptive = 0x10, DeinterlaceTech_PixelAdaptive = 0x20, DeinterlaceTech_MotionVectorSteered = 0x80 } VMRDeinterlaceTech; typedef struct _VMRFrequency { DWORD dwNumerator, dwDenominator; } VMRFrequency; typedef struct _VMRVideoDesc { DWORD dwSize; DWORD dwSampleWidth; DWORD dwSampleHeight; BOOL SingleFieldPerSample; DWORD dwFourCC; VMRFrequency InputSampleFreq; VMRFrequency OutputFrameFreq; } VMRVideoDesc; typedef struct _VMRDeinterlaceCaps { DWORD dwSize; DWORD dwNumPreviousOutputFrames; DWORD dwNumForwardRefSamples; DWORD dwNumBackwardRefSamples; VMRDeinterlaceTech DeinterlaceTechnology; } VMRDeinterlaceCaps; [ local, object, uuid(bb057577-0db8-4e6a-87a7-1a8c9a505a0f), helpstring("IVMRDeinterlaceControl interface"), pointer_default(unique) ] interface IVMRDeinterlaceControl : IUnknown { HRESULT GetNumberOfDeinterlaceModes([in] VMRVideoDesc *desc, [in, out] DWORD *num_modes, [out] GUID *modes); HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMRVideoDesc *desc, [in, out] VMRDeinterlaceCaps *caps); HRESULT GetDeinterlaceMode([in] DWORD id, [out] GUID *mode); HRESULT SetDeinterlaceMode([in] DWORD id, [in] GUID *mode); HRESULT GetDeinterlacePrefs([out] DWORD *prefs); HRESULT SetDeinterlacePrefs([in] DWORD prefs); HRESULT GetActualDeinterlaceMode([in] DWORD id, [out] GUID *mode); } typedef struct _VMRALPHABITMAP { DWORD dwFlags; HDC hdc; IDirectDrawSurface7 *pDDS; RECT rSrc; RECT rDest; FLOAT fAlpha; COLORREF clrSrcKey; } VMRALPHABITMAP, *PVMRALPHABITMAP; cpp_quote("#define VMRBITMAP_DISABLE (0x01)") cpp_quote("#define VMRBITMAP_HDC (0x02)") cpp_quote("#define VMRBITMAP_ENTIREDDS (0x04)") cpp_quote("#define VMRBITMAP_SRCCOLORKEY (0x08)") cpp_quote("#define VMRBITMAP_SRCRECT (0x10)") [ local, object, uuid(1e673275-0257-40aa-af20-7c608d4a0428), helpstring("IVMRMixerBitmap interface"), pointer_default(unique) ] interface IVMRMixerBitmap : IUnknown { HRESULT SetAlphaBitmap([in] const VMRALPHABITMAP *params); HRESULT UpdateAlphaBitmapParameters([in] VMRALPHABITMAP *params); HRESULT GetAlphaBitmapParameters([out] VMRALPHABITMAP *params); } typedef struct _VMRVIDEOSTREAMINFO { IDirectDrawSurface7 *pddsVideoSurface; DWORD dwWidth; DWORD dwHeight; DWORD dwStrmID; FLOAT fAlpha; DDCOLORKEY ddClrKey; NORMALIZEDRECT rNormal; } VMRVIDEOSTREAMINFO; [ local, object, uuid(7a4fb5af-479f-4074-bb40-ce6722e43c82), helpstring("IVMRImageCompositor interface"), pointer_default(unique) ] interface IVMRImageCompositor : IUnknown { HRESULT InitCompositionTarget([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget); HRESULT TermCompositionTarget([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget); HRESULT SetStreamMediaType([in] DWORD id, [in] AM_MEDIA_TYPE *pmt, [in] BOOL texture); HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget, [in] AM_MEDIA_TYPE *pmt, [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop, [in] DWORD backgrnd, [in] VMRVIDEOSTREAMINFO *info, [in] UINT streams); } [ local, object, uuid(058d1f11-2a54-4bef-bd54-df706626b727), helpstring("IVMRVideoStreamControl interface"), pointer_default(unique) ] interface IVMRVideoStreamControl : IUnknown { HRESULT SetColorKey([in] DDCOLORKEY *key); HRESULT GetColorKey([out] DDCOLORKEY *key); HRESULT SetStreamActiveState([in] BOOL active); HRESULT GetStreamActiveState([out] BOOL *active); } [ local, object, uuid(9f3a1c85-8555-49ba-935f-be5b5b29d178), helpstring("IVMRImagePresenterConfig interface"), pointer_default(unique) ] interface IVMRImagePresenterConfig : IUnknown { HRESULT SetRenderingPrefs([in] DWORD prefs); HRESULT GetRenderingPrefs([out] DWORD *prefs); } [ local, object, uuid(e6f7ce40-4673-44f1-8f77-5499d68cb4ea), helpstring("IVMRImagePresenterExclModeConfig interface"), pointer_default(unique) ] interface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig { HRESULT SetXlcModeDDObjAndPrimarySurface([in] IDirectDraw7 *dddev, [in] IDirectDrawSurface7 *ddsurface); HRESULT GetXlcModeDDObjAndPrimarySurface([out] IDirectDraw7 **dddev, [out] IDirectDrawSurface7 **ddsurface); } [ local, object, uuid(aac18c18-e186-46d2-825d-a1f8dc8e395a), helpstring("IVPManager interface"), pointer_default(unique) ] interface IVPManager : IUnknown { HRESULT SetVideoPortIndex([in] DWORD index); HRESULT GetVideoPortIndex([out] DWORD *index); } ================================================ FILE: wine/windows/vss.idl ================================================ /* * Copyright 2014 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; typedef GUID VSS_ID; typedef enum _VSS_APPLICATION_LEVEL { VSS_APP_AUTO = -1, VSS_APP_UNKNOWN = 0, VSS_APP_SYSTEM = 1, VSS_APP_BACK_END = 2, VSS_APP_FRONT_END = 3, VSS_APP_SYSTEM_RM = 4 } VSS_APPLICATION_LEVEL; ================================================ FILE: wine/windows/vsstyle.h ================================================ /* * Copyright (C) 2011 Piotr Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __VSSTYLE_H__ #define __VSSTYLE_H__ #define TMTVS_RESERVEDLOW 100000 #define TMTVS_RESERVEDHIGH 19999 /* AEROWIZARDSTYLE class */ #if defined(__GNUC__) #define VSCLASS_AEROWIZARDSTYLE (const WCHAR []){'A','E','R','O','W','I','Z','A','R','D','S','T','Y','L','E',0} #define VSCLASS_AEROWIZARD (const WCHAR []){'A','E','R','O','W','I','Z','A','R','D',0} #elif defined(_MSC_VER) #define VSCLASS_AEROWIZARDSTYLE L"AEROWIZARDSTYLE" #define VSCLASS_AEROWIZARD L"AEROWIZARD" #else static const WCHAR VSCLASS_AEROWIZARDSTYLE[] = {'A','E','R','O','W','I','Z','A','R','D','S','T','Y','L','E',0}; static const WCHAR VSCLASS_AEROWIZARD [] = {'A','E','R','O','W','I','Z','A','R','D',0}; #endif enum AEROWIZARDPARTS { AW_TITLEBAR = 1, AW_HEADERAREA = 2, AW_CONTENTAREA = 3, AW_COMMANDAREA = 4, AW_BUTTON = 5, }; #define AEROWIZARDSTYLEPARTS AEROWIZARDPARTS; enum TITLEBARSTATES { AW_S_TITLEBAR_ACTIVE = 1, AW_S_TITLEBAR_INACTIVE = 2, }; enum HEADERAREASTATES { AW_S_HEADERAREA_NOMARGIN = 1, }; enum CONTENTAREASTATES { AW_S_CONTENTAREA_NOMARGIN = 1, }; /* BUTTONSTYLE class */ #if defined(__GNUC__) #define VSCLASS_BUTTONSTYLE (const WCHAR []){'B','U','T','T','O','N','S','T','Y','L','E',0} #define VSCLASS_BUTTON (const WCHAR []){'B','U','T','T','O','N',0} #elif defined(_MSC_VER) #define VSCLASS_BUTTONSTYLE L"BUTTONSTYLE" #define VSCLASS_BUTTON L"BUTTON" #else static const WCHAR VSCLASS_BUTTONSTYLE [] = {'B','U','T','T','O','N','S','T','Y','L','E',0}; static const WCHAR VSCLASS_BUTTON [] = {'B','U','T','T','O','N',0}; #endif enum BUTTONPARTS { BP_PUSHBUTTON = 1, BP_RADIOBUTTON = 2, BP_CHECKBOX = 3, BP_GROUPBOX = 4, BP_USERBUTTON = 5, BP_COMMANDLINK = 6, BP_COMMANDLINKGLYPH = 7, }; #define BUTTONSTYLEPARTS BUTTONPARTS; enum PUSHBUTTONSTATES { PBS_NORMAL = 1, PBS_HOT = 2, PBS_PRESSED = 3, PBS_DISABLED = 4, PBS_DEFAULTED = 5, PBS_DEFAULTED_ANIMATING = 6, }; enum RADIOBUTTONSTATES { RBS_UNCHECKEDNORMAL = 1, RBS_UNCHECKEDHOT = 2, RBS_UNCHECKEDPRESSED = 3, RBS_UNCHECKEDDISABLED = 4, RBS_CHECKEDNORMAL = 5, RBS_CHECKEDHOT = 6, RBS_CHECKEDPRESSED = 7, RBS_CHECKEDDISABLED = 8, }; enum CHECKBOXSTATES { CBS_UNCHECKEDNORMAL = 1, CBS_UNCHECKEDHOT = 2, CBS_UNCHECKEDPRESSED = 3, CBS_UNCHECKEDDISABLED = 4, CBS_CHECKEDNORMAL = 5, CBS_CHECKEDHOT = 6, CBS_CHECKEDPRESSED = 7, CBS_CHECKEDDISABLED = 8, CBS_MIXEDNORMAL = 9, CBS_MIXEDHOT = 10, CBS_MIXEDPRESSED = 11, CBS_MIXEDDISABLED = 12, CBS_IMPLICITNORMAL = 13, CBS_IMPLICITHOT = 14, CBS_IMPLICITPRESSED = 15, CBS_IMPLICITDISABLED = 16, CBS_EXCLUDEDNORMAL = 17, CBS_EXCLUDEDHOT = 18, CBS_EXCLUDEDPRESSED = 19, CBS_EXCLUDEDDISABLED = 20, }; enum GROUPBOXSTATES { GBS_NORMAL = 1, GBS_DISABLED = 2, }; enum COMMANDLINKSTATES { CMDLS_NORMAL = 1, CMDLS_HOT = 2, CMDLS_PRESSED = 3, CMDLS_DISABLED = 4, CMDLS_DEFAULTED = 5, CMDLS_DEFAULTED_ANIMATING = 6, }; enum COMMANDLINKGLYPHSTATES { CMDLGS_NORMAL = 1, CMDLGS_HOT = 2, CMDLGS_PRESSED = 3, CMDLGS_DISABLED = 4, CMDLGS_DEFAULTED = 5, }; /* COMBOBOXSTYLE class */ #if defined(__GNUC__) #define VSCLASS_COMBOBOXSTYLE (const WCHAR []){'C','O','M','B','O','B','O','X','S','T','Y','L','E',0} #define VSCLASS_COMBOBOX (const WCHAR []){'C','O','M','B','O','B','O','X',0} #elif defined(_MSC_VER) #define VSCLASS_COMBOBOXSTYLE L"COMBOBOXSTYLE" #define VSCLASS_COMBOBOX L"COMBOBOX" #else static const WCHAR VSCLASS_COMBOBOXSTYLE [] = {'C','O','M','B','O','B','O','X','S','T','Y','L','E',0}; static const WCHAR VSCLASS_COMBOBOX [] = {'C','O','M','B','O','B','O','X',0}; #endif enum COMBOBOXPARTS { CP_DROPDOWNBUTTON = 1, CP_BACKGROUND = 2, CP_TRANSPARENTBACKGROUND = 3, CP_BORDER = 4, CP_READONLY = 5, CP_DROPDOWNBUTTONRIGHT = 6, CP_DROPDOWNBUTTONLEFT = 7, CP_CUEBANNER = 8, }; #define COMBOBOXSTYLEPARTS COMBOBOXPARTS; enum COMBOBOXSTYLESTATES { CBXS_NORMAL = 1, CBXS_HOT = 2, CBXS_PRESSED = 3, CBXS_DISABLED = 4, }; enum DROPDOWNBUTTONRIGHTSTATES { CBXSR_NORMAL = 1, CBXSR_HOT = 2, CBXSR_PRESSED = 3, CBXSR_DISABLED = 4, }; enum DROPDOWNBUTTONLEFTSTATES { CBXSL_NORMAL = 1, CBXSL_HOT = 2, CBXSL_PRESSED = 3, CBXSL_DISABLED = 4, }; enum TRANSPARENTBACKGROUNDSTATES { CBTBS_NORMAL = 1, CBTBS_HOT = 2, CBTBS_DISABLED = 3, CBTBS_FOCUSED = 4, }; enum BORDERSTATES { CBB_NORMAL = 1, CBB_HOT = 2, CBB_FOCUSED = 3, CBB_DISABLED = 4, }; enum READONLYSTATES { CBRO_NORMAL = 1, CBRO_HOT = 2, CBRO_PRESSED = 3, CBRO_DISABLED = 4, }; enum CUEBANNERSTATES { CBCB_NORMAL = 1, CBCB_HOT = 2, CBCB_PRESSED = 3, CBCB_DISABLED = 4, }; /* COMMUNICATIONSSTYLE class */ #if defined(__GNUC__) #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} #define VSCLASS_COMMUNICATIONS (const WCHAR []){'C','O','M','M','U','N','I','C','A','T','I','O','N','S',0} #elif defined(_MSC_VER) #define VSCLASS_COMMUNICATIONSSTYLE L"COMMUNICATIONSSTYLE" #define VSCLASS_COMMUNICATIONS L"COMMUNICATIONS" #else static const WCHAR VSCLASS_COMMUNICATIONSSTYLE [] = {'C','O','M','M','U','N','I','C','A','T','I','O','N','S','S','T','Y','L','E',0}; static const WCHAR VSCLASS_COMMUNICATIONS [] = {'C','O','M','M','U','N','I','C','A','T','I','O','N','S',0}; #endif enum COMMUNICATIONSPARTS { CSST_TAB = 1, }; #define COMMUNICATIONSSTYLEPARTS COMMUNICATIONSPARTS; enum TABSTATES { CSTB_NORMAL = 1, CSTB_HOT = 2, CSTB_SELECTED = 3, }; /* CONTROLPANELSTYLE class */ #if defined(__GNUC__) #define VSCLASS_CONTROLPANELSTYLE (const WCHAR []){'C','O','N','T','R','O','L','P','A','N','E','L','S','T','Y','L','E',0} #define VSCLASS_CONTROLPANEL (const WCHAR []){'C','O','N','T','R','O','L','P','A','N','E','L',0} #elif defined(_MSC_VER) #define VSCLASS_CONTROLPANELSTYLE L"CONTROLPANELSTYLE" #define VSCLASS_CONTROLPANEL L"CONTROLPANEL" #else static const WCHAR VSCLASS_CONTROLPANELSTYLE [] = {'C','O','N','T','R','O','L','P','A','N','E','L','S','T','Y','L','E',0}; static const WCHAR VSCLASS_CONTROLPANEL [] = {'C','O','N','T','R','O','L','P','A','N','E','L',0}; #endif enum CONTROLPANELPARTS { CPANEL_NAVIGATIONPANE = 1, CPANEL_CONTENTPANE = 2, CPANEL_NAVIGATIONPANELABEL = 3, CPANEL_CONTENTPANELABEL = 4, CPANEL_TITLE = 5, CPANEL_BODYTEXT = 6, CPANEL_HELPLINK = 7, CPANEL_TASKLINK = 8, CPANEL_GROUPTEXT = 9, CPANEL_CONTENTLINK = 10, CPANEL_SECTIONTITLELINK = 11, CPANEL_LARGECOMMANDAREA = 12, CPANEL_SMALLCOMMANDAREA = 13, CPANEL_BUTTON = 14, CPANEL_MESSAGETEXT = 15, CPANEL_NAVIGATIONPANELINE = 16, CPANEL_CONTENTPANELINE = 17, CPANEL_BANNERAREA = 18, CPANEL_BODYTITLE = 19, }; #define CONTROLPANELSTYLEPARTS CONTROLPANELPARTS; enum HELPLINKSTATES { CPHL_NORMAL = 1, CPHL_HOT = 2, CPHL_PRESSED = 3, CPHL_DISABLED = 4, }; enum TASKLINKSTATES { CPTL_NORMAL = 1, CPTL_HOT = 2, CPTL_PRESSED = 3, CPTL_DISABLED = 4, CPTL_PAGE = 5, }; enum CONTENTLINKSTATES { CPCL_NORMAL = 1, CPCL_HOT = 2, CPCL_PRESSED = 3, CPCL_DISABLED = 4, }; enum SECTIONTITLELINKSTATES { CPSTL_NORMAL = 1, CPSTL_HOT = 2, }; /* DATEPICKERSTYLE class */ #if defined(__GNUC__) #define VSCLASS_DATEPICKERSTYLE (const WCHAR []){'D','A','T','E','P','I','C','K','E','R','S','T','Y','L','E',0} #define VSCLASS_DATEPICKER (const WCHAR []){'D','A','T','E','P','I','C','K','E','R',0} #elif defined(_MSC_VER) #define VSCLASS_DATEPICKERSTYLE L"DATEPICKERSTYLE" #define VSCLASS_DATEPICKER L"DATEPICKER" #else static const WCHAR VSCLASS_DATEPICKERSTYLE[] = {'D','A','T','E','P','I','C','K','E','R','S','T','Y','L','E',0}; static const WCHAR VSCLASS_DATEPICKER [] = {'D','A','T','E','P','I','C','K','E','R',0}; #endif enum DATEPICKERPARTS { DP_DATETEXT = 1, DP_DATEBORDER = 2, DP_SHOWCALENDARBUTTONRIGHT = 3, }; #define DATEPICKERSTYLEPARTS DATEPICKERPARTS; enum DATETEXTSTATES { DPDT_NORMAL = 1, DPDT_DISABLED = 2, DPDT_SELECTED = 3, }; enum DATEBORDERSTATES { DPDB_NORMAL = 1, DPDB_HOT = 2, DPDB_FOCUSED = 3, DPDB_DISABLED = 4, }; enum SHOWCALENDARBUTTONRIGHTSTATES { DPSCBR_NORMAL = 1, DPSCBR_HOT = 2, DPSCBR_PRESSED = 3, DPSCBR_DISABLED = 4, }; /* DRAGDROPSTYLE class */ #if defined(__GNUC__) #define VSCLASS_DRAGDROPSTYLE (const WCHAR []){'D','R','A','G','D','R','O','P','S','T','Y','L','E',0} #define VSCLASS_DRAGDROP (const WCHAR []){'D','R','A','G','D','R','O','P',0} #elif defined(_MSC_VER) #define VSCLASS_DRAGDROPSTYLE L"DRAGDROPSTYLE" #define VSCLASS_DRAGDROP L"DRAGDROP" #else static const WCHAR VSCLASS_DRAGDROPSTYLE [] = {'D','R','A','G','D','R','O','P','S','T','Y','L','E',0}; static const WCHAR VSCLASS_DRAGDROP [] = {'D','R','A','G','D','R','O','P',0}; #endif enum DRAGDROPPARTS { DD_COPY = 1, DD_MOVE = 2, DD_UPDATEMETADATA = 3, DD_CREATELINK = 4, DD_WARNING = 5, DD_NONE = 6, DD_IMAGEBG = 7, DD_TEXTBG = 8, }; #define DRAGDROPSTYLEPARTS DRAGDROPPARTS; enum COPYSTATES { DDCOPY_HIGHLIGHT = 1, DDCOPY_NOHIGHLIGHT = 2, }; enum MOVESTATES { DDMOVE_HIGHLIGHT = 1, DDMOVE_NOHIGHLIGHT = 2, }; enum UPDATEMETADATASTATES { DDUPDATEMETADATA_HIGHLIGHT = 1, DDUPDATEMETADATA_NOHIGHLIGHT = 2, }; enum CREATELINKSTATES { DDCREATELINK_HIGHLIGHT = 1, DDCREATELINK_NOHIGHLIGHT = 2, }; enum WARNINGSTATES { DDWARNING_HIGHLIGHT = 1, DDWARNING_NOHIGHLIGHT = 2, }; enum NONESTATES { DDNONE_HIGHLIGHT = 1, DDNONE_NOHIGHLIGHT = 2, }; /* EDITSTYLE class */ #if defined(__GNUC__) #define VSCLASS_EDITSTYLE (const WCHAR []){'E','D','I','T','S','T','Y','L','E',0} #define VSCLASS_EDIT (const WCHAR []){'E','D','I','T',0} #elif defined(_MSC_VER) #define VSCLASS_EDITSTYLE L"EDITSTYLE" #define VSCLASS_EDIT L"EDIT" #else static const WCHAR VSCLASS_EDITSTYLE [] = {'E','D','I','T','S','T','Y','L','E',0}; static const WCHAR VSCLASS_EDIT [] = {'E','D','I','T',0}; #endif enum EDITPARTS { EP_EDITTEXT = 1, EP_CARET = 2, EP_BACKGROUND = 3, EP_PASSWORD = 4, EP_BACKGROUNDWITHBORDER = 5, EP_EDITBORDER_NOSCROLL = 6, EP_EDITBORDER_HSCROLL = 7, EP_EDITBORDER_VSCROLL = 8, EP_EDITBORDER_HVSCROLL = 9, }; #define EDITSTYLEPARTS EDITPARTS; enum EDITTEXTSTATES { ETS_NORMAL = 1, ETS_HOT = 2, ETS_SELECTED = 3, ETS_DISABLED = 4, ETS_FOCUSED = 5, ETS_READONLY = 6, ETS_ASSIST = 7, ETS_CUEBANNER = 8, }; enum BACKGROUNDSTATES { EBS_NORMAL = 1, EBS_HOT = 2, EBS_DISABLED = 3, EBS_FOCUSED = 4, EBS_READONLY = 5, EBS_ASSIST = 6, }; enum BACKGROUNDWITHBORDERSTATES { EBWBS_NORMAL = 1, EBWBS_HOT = 2, EBWBS_DISABLED = 3, EBWBS_FOCUSED = 4, }; enum EDITBORDER_NOSCROLLSTATES { EPSN_NORMAL = 1, EPSN_HOT = 2, EPSN_FOCUSED = 3, EPSN_DISABLED = 4, }; enum EDITBORDER_HSCROLLSTATES { EPSH_NORMAL = 1, EPSH_HOT = 2, EPSH_FOCUSED = 3, EPSH_DISABLED = 4, }; enum EDITBORDER_VSCROLLSTATES { EPSV_NORMAL = 1, EPSV_HOT = 2, EPSV_FOCUSED = 3, EPSV_DISABLED = 4, }; enum EDITBORDER_HVSCROLLSTATES { EPSHV_NORMAL = 1, EPSHV_HOT = 2, EPSHV_FOCUSED = 3, EPSHV_DISABLED = 4, }; /* EXPLORERBARSTYLE class */ #if defined(__GNUC__) #define VSCLASS_EXPLORERBARSTYLE (const WCHAR []){'E','X','P','L','O','R','E','R','B','A','R','S','T','Y','L','E',0} #define VSCLASS_EXPLORERBAR (const WCHAR []){'E','X','P','L','O','R','E','R','B','A','R',0} #elif defined(_MSC_VER) #define VSCLASS_EXPLORERBARSTYLE L"EXPLORERBARSTYLE" #define VSCLASS_EXPLORERBAR L"EXPLORERBAR" #else static const WCHAR VSCLASS_EXPLORERBARSTYLE [] = {'E','X','P','L','O','R','E','R','B','A','R','S','T','Y','L','E',0}; static const WCHAR VSCLASS_EXPLORERBAR [] = {'E','X','P','L','O','R','E','R','B','A','R',0}; #endif enum EXPLORERBARPARTS { EBP_HEADERBACKGROUND = 1, EBP_HEADERCLOSE = 2, EBP_HEADERPIN = 3, EBP_IEBARMENU = 4, EBP_NORMALGROUPBACKGROUND = 5, EBP_NORMALGROUPCOLLAPSE = 6, EBP_NORMALGROUPEXPAND = 7, EBP_NORMALGROUPHEAD = 8, EBP_SPECIALGROUPBACKGROUND = 9, EBP_SPECIALGROUPCOLLAPSE = 10, EBP_SPECIALGROUPEXPAND = 11, EBP_SPECIALGROUPHEAD = 12, }; #define EXPLORERBARSTYLEPARTS EXPLORERBARPARTS; enum HEADERCLOSESTATES { EBHC_NORMAL = 1, EBHC_HOT = 2, EBHC_PRESSED = 3, }; enum HEADERPINSTATES { EBHP_NORMAL = 1, EBHP_HOT = 2, EBHP_PRESSED = 3, EBHP_SELECTEDNORMAL = 4, EBHP_SELECTEDHOT = 5, EBHP_SELECTEDPRESSED = 6, }; enum IEBARMENUSTATES { EBM_NORMAL = 1, EBM_HOT = 2, EBM_PRESSED = 3, }; enum NORMALGROUPCOLLAPSESTATES { EBNGC_NORMAL = 1, EBNGC_HOT = 2, EBNGC_PRESSED = 3, }; enum NORMALGROUPEXPANDSTATES { EBNGE_NORMAL = 1, EBNGE_HOT = 2, EBNGE_PRESSED = 3, }; enum SPECIALGROUPCOLLAPSESTATES { EBSGC_NORMAL = 1, EBSGC_HOT = 2, EBSGC_PRESSED = 3, }; enum SPECIALGROUPEXPANDSTATES { EBSGE_NORMAL = 1, EBSGE_HOT = 2, EBSGE_PRESSED = 3, }; /* FLYOUTSTYLE class */ #if defined(__GNUC__) #define VSCLASS_FLYOUTSTYLE (const WCHAR []){'F','L','Y','O','U','T','S','T','Y','L','E',0} #define VSCLASS_FLYOUT (const WCHAR []){'F','L','Y','O','U','T',0} #elif defined(_MSC_VER) #define VSCLASS_FLYOUTSTYLE L"FLYOUTSTYLE" #define VSCLASS_FLYOUT L"FLYOUT" #else static const WCHAR VSCLASS_FLYOUTSTYLE [] = {'F','L','Y','O','U','T','S','T','Y','L','E',0}; static const WCHAR VSCLASS_FLYOUT [] = {'F','L','Y','O','U','T',0}; #endif enum FLYOUTPARTS { FLYOUT_HEADER = 1, FLYOUT_BODY = 2, FLYOUT_LABEL = 3, FLYOUT_LINK = 4, FLYOUT_DIVIDER = 5, FLYOUT_WINDOW = 6, FLYOUT_LINKAREA = 7, FLYOUT_LINKHEADER = 8, }; #define FLYOUTSTYLEPARTS FLYOUTPARTS; enum LABELSTATES { FLS_NORMAL = 1, FLS_SELECTED = 2, FLS_EMPHASIZED = 3, FLS_DISABLED = 4, }; enum LINKSTATES { FLYOUTLINK_NORMAL = 1, FLYOUTLINK_HOVER = 2, }; enum BODYSTATES { FBS_NORMAL = 1, FBS_EMPHASIZED = 2, }; enum LINKHEADERSTATES { FLH_NORMAL = 1, FLH_HOVER = 2, }; /* HEADERSTYLE class */ #if defined(__GNUC__) #define VSCLASS_HEADERSTYLE (const WCHAR []){'H','E','A','D','E','R','S','T','Y','L','E',0} #define VSCLASS_HEADER (const WCHAR []){'H','E','A','D','E','R',0} #elif defined(_MSC_VER) #define VSCLASS_HEADERSTYLE L"HEADERSTYLE" #define VSCLASS_HEADER L"HEADER" #else static const WCHAR VSCLASS_HEADERSTYLE [] = {'H','E','A','D','E','R','S','T','Y','L','E',0}; static const WCHAR VSCLASS_HEADER [] = {'H','E','A','D','E','R',0}; #endif enum HEADERPARTS { HP_HEADERITEM = 1, HP_HEADERITEMLEFT = 2, HP_HEADERITEMRIGHT = 3, HP_HEADERSORTARROW = 4, HP_HEADERDROPDOWN = 5, HP_HEADERDROPDOWNFILTER = 6, HP_HEADEROVERFLOW = 7, }; #define HEADERSTYLEPARTS HEADERPARTS; enum HEADERSTYLESTATES { HBG_DETAILS = 1, HBG_ICON = 2, }; enum HEADERITEMSTATES { HIS_NORMAL = 1, HIS_HOT = 2, HIS_PRESSED = 3, HIS_SORTEDNORMAL = 4, HIS_SORTEDHOT = 5, HIS_SORTEDPRESSED = 6, HIS_ICONNORMAL = 7, HIS_ICONHOT = 8, HIS_ICONPRESSED = 9, HIS_ICONSORTEDNORMAL = 10, HIS_ICONSORTEDHOT = 11, HIS_ICONSORTEDPRESSED = 12, }; enum HEADERITEMLEFTSTATES { HILS_NORMAL = 1, HILS_HOT = 2, HILS_PRESSED = 3, }; enum HEADERITEMRIGHTSTATES { HIRS_NORMAL = 1, HIRS_HOT = 2, HIRS_PRESSED = 3, }; enum HEADERSORTARROWSTATES { HSAS_SORTEDUP = 1, HSAS_SORTEDDOWN = 2, }; enum HEADERDROPDOWNSTATES { HDDS_NORMAL = 1, HDDS_SOFTHOT = 2, HDDS_HOT = 3, }; enum HEADERDROPDOWNFILTERSTATES { HDDFS_NORMAL = 1, HDDFS_SOFTHOT = 2, HDDFS_HOT = 3, }; enum HEADEROVERFLOWSTATES { HOFS_NORMAL = 1, HOFS_HOT = 2, }; /* LISTBOXSTYLE class */ #if defined(__GNUC__) #define VSCLASS_LISTBOXSTYLE (const WCHAR []){'L','I','S','T','B','O','X','S','T','Y','L','E',0} #define VSCLASS_LISTBOX (const WCHAR []){'L','I','S','T','B','O','X',0} #elif defined(_MSC_VER) #define VSCLASS_LISTBOXSTYLE L"LISTBOXSTYLE" #define VSCLASS_LISTBOX L"LISTBOX" #else static const WCHAR VSCLASS_LISTBOXSTYLE [] = {'L','I','S','T','B','O','X','S','T','Y','L','E',0}; static const WCHAR VSCLASS_LISTBOX[] = {'L','I','S','T','B','O','X',0}; #endif enum LISTBOXPARTS { LBCP_BORDER_HSCROLL = 1, LBCP_BORDER_HVSCROLL = 2, LBCP_BORDER_NOSCROLL = 3, LBCP_BORDER_VSCROLL = 4, LBCP_ITEM = 5, }; #define LISTBOXSTYLEPARTS LISTBOXPARTS; enum BORDER_HSCROLLSTATES { LBPSH_NORMAL = 1, LBPSH_FOCUSED = 2, LBPSH_HOT = 3, LBPSH_DISABLED = 4, }; enum BORDER_HVSCROLLSTATES { LBPSHV_NORMAL = 1, LBPSHV_FOCUSED = 2, LBPSHV_HOT = 3, LBPSHV_DISABLED = 4, }; enum BORDER_NOSCROLLSTATES { LBPSN_NORMAL = 1, LBPSN_FOCUSED = 2, LBPSN_HOT = 3, LBPSN_DISABLED = 4, }; enum BORDER_VSCROLLSTATES { LBPSV_NORMAL = 1, LBPSV_FOCUSED = 2, LBPSV_HOT = 3, LBPSV_DISABLED = 4, }; enum ITEMSTATES { LBPSI_HOT = 1, LBPSI_HOTSELECTED = 2, LBPSI_SELECTED = 3, LBPSI_SELECTEDNOTFOCUS = 4, }; /* LISTVIEWSTYLE class */ #if defined(__GNUC__) #define VSCLASS_LISTVIEWSTYLE (const WCHAR []){'L','I','S','T','V','I','E','W','S','T','Y','L','E',0} #define VSCLASS_LISTVIEW (const WCHAR []){'L','I','S','T','V','I','E','W',0} #elif defined(_MSC_VER) #define VSCLASS_LISTVIEWSTYLE L"LISTVIEWSTYLE" #define VSCLASS_LISTVIEW L"LISTVIEW" #else static const WCHAR VSCLASS_LISTVIEWSTYLE [] = {'L','I','S','T','V','I','E','W','S','T','Y','L','E',0}; static const WCHAR VSCLASS_LISTVIEW [] = {'L','I','S','T','V','I','E','W',0}; #endif enum LISTVIEWPARTS { LVP_LISTITEM = 1, LVP_LISTGROUP = 2, LVP_LISTDETAIL = 3, LVP_LISTSORTEDDETAIL = 4, LVP_EMPTYTEXT = 5, LVP_GROUPHEADER = 6, LVP_GROUPHEADERLINE = 7, LVP_EXPANDBUTTON = 8, LVP_COLLAPSEBUTTON = 9, LVP_COLUMNDETAIL = 10, }; #define LISTVIEWSTYLEPARTS LISTVIEWPARTS; enum LISTITEMSTATES { LISS_NORMAL = 1, LISS_HOT = 2, LISS_SELECTED = 3, LISS_DISABLED = 4, LISS_SELECTEDNOTFOCUS = 5, LISS_HOTSELECTED = 6, }; enum GROUPHEADERSTATES { LVGH_OPEN = 1, LVGH_OPENHOT = 2, LVGH_OPENSELECTED = 3, LVGH_OPENSELECTEDHOT = 4, LVGH_OPENSELECTEDNOTFOCUSED = 5, LVGH_OPENSELECTEDNOTFOCUSEDHOT = 6, LVGH_OPENMIXEDSELECTION = 7, LVGH_OPENMIXEDSELECTIONHOT = 8, LVGH_CLOSE = 9, LVGH_CLOSEHOT = 10, LVGH_CLOSESELECTED = 11, LVGH_CLOSESELECTEDHOT = 12, LVGH_CLOSESELECTEDNOTFOCUSED = 13, LVGH_CLOSESELECTEDNOTFOCUSEDHOT = 14, LVGH_CLOSEMIXEDSELECTION = 15, LVGH_CLOSEMIXEDSELECTIONHOT = 16, }; enum GROUPHEADERLINESTATES { LVGHL_OPEN = 1, LVGHL_OPENHOT = 2, LVGHL_OPENSELECTED = 3, LVGHL_OPENSELECTEDHOT = 4, LVGHL_OPENSELECTEDNOTFOCUSED = 5, LVGHL_OPENSELECTEDNOTFOCUSEDHOT = 6, LVGHL_OPENMIXEDSELECTION = 7, LVGHL_OPENMIXEDSELECTIONHOT = 8, LVGHL_CLOSE = 9, LVGHL_CLOSEHOT = 10, LVGHL_CLOSESELECTED = 11, LVGHL_CLOSESELECTEDHOT = 12, LVGHL_CLOSESELECTEDNOTFOCUSED = 13, LVGHL_CLOSESELECTEDNOTFOCUSEDHOT = 14, LVGHL_CLOSEMIXEDSELECTION = 15, LVGHL_CLOSEMIXEDSELECTIONHOT = 16, }; enum EXPANDBUTTONSTATES { LVEB_NORMAL = 1, LVEB_HOVER = 2, LVEB_PUSHED = 3, }; enum COLLAPSEBUTTONSTATES { LVCB_NORMAL = 1, LVCB_HOVER = 2, LVCB_PUSHED = 3, }; /* MENUSTYLE class */ #if defined(__GNUC__) #define VSCLASS_MENUSTYLE (const WCHAR []){'M','E','N','U','S','T','Y','L','E',0} #define VSCLASS_MENU (const WCHAR []){'M','E','N','U',0} #elif defined(_MSC_VER) #define VSCLASS_MENUSTYLE L"MENUSTYLE" #define VSCLASS_MENU L"MENU" #else static const WCHAR VSCLASS_MENUSTYLE [] = {'M','E','N','U','S','T','Y','L','E',0}; static const WCHAR VSCLASS_MENU [] = {'M','E','N','U',0}; #endif enum MENUPARTS { MENU_MENUITEM_TMSCHEMA = 1, MENU_MENUDROPDOWN_TMSCHEMA = 2, MENU_MENUBARITEM_TMSCHEMA = 3, MENU_MENUBARDROPDOWN_TMSCHEMA = 4, MENU_CHEVRON_TMSCHEMA = 5, MENU_SEPARATOR_TMSCHEMA = 6, MENU_BARBACKGROUND = 7, MENU_BARITEM = 8, MENU_POPUPBACKGROUND = 9, MENU_POPUPBORDERS = 10, MENU_POPUPCHECK = 11, MENU_POPUPCHECKBACKGROUND = 12, MENU_POPUPGUTTER = 13, MENU_POPUPITEM = 14, MENU_POPUPSEPARATOR = 15, MENU_POPUPSUBMENU = 16, MENU_SYSTEMCLOSE = 17, MENU_SYSTEMMAXIMIZE = 18, MENU_SYSTEMMINIMIZE = 19, MENU_SYSTEMRESTORE = 20, }; #define MENUSTYLEPARTS MENUPARTS; enum BARBACKGROUNDSTATES { MB_ACTIVE = 1, MB_INACTIVE = 2, }; enum BARITEMSTATES { MBI_NORMAL = 1, MBI_HOT = 2, MBI_PUSHED = 3, MBI_DISABLED = 4, MBI_DISABLEDHOT = 5, MBI_DISABLEDPUSHED = 6, }; enum POPUPCHECKSTATES { MC_CHECKMARKNORMAL = 1, MC_CHECKMARKDISABLED = 2, MC_BULLETNORMAL = 3, MC_BULLETDISABLED = 4, }; enum POPUPCHECKBACKGROUNDSTATES { MCB_DISABLED = 1, MCB_NORMAL = 2, MCB_BITMAP = 3, }; enum POPUPITEMSTATES { MPI_NORMAL = 1, MPI_HOT = 2, MPI_DISABLED = 3, MPI_DISABLEDHOT = 4, }; enum POPUPSUBMENUSTATES { MSM_NORMAL = 1, MSM_DISABLED = 2, }; enum SYSTEMCLOSESTATES { MSYSC_NORMAL = 1, MSYSC_DISABLED = 2, }; enum SYSTEMMAXIMIZESTATES { MSYSMX_NORMAL = 1, MSYSMX_DISABLED = 2, }; enum SYSTEMMINIMIZESTATES { MSYSMN_NORMAL = 1, MSYSMN_DISABLED = 2, }; enum SYSTEMRESTORESTATES { MSYSR_NORMAL = 1, MSYSR_DISABLED = 2, }; /* NAVIGATION class */ #if defined(__GNUC__) #define VSCLASS_NAVIGATION (const WCHAR []){'N','A','V','I','G','A','T','I','O','N',0} #elif defined(_MSC_VER) #define VSCLASS_NAVIGATION L"NAVIGATION" #else static const WCHAR VSCLASS_NAVIGATION [] = {'N','A','V','I','G','A','T','I','O','N',0}; #endif enum NAVIGATIONPARTS { NAV_BACKBUTTON = 1, NAV_FORWARDBUTTON = 2, NAV_MENUBUTTON = 3, }; enum NAV_BACKBUTTONSTATES { NAV_BB_NORMAL = 1, NAV_BB_HOT = 2, NAV_BB_PRESSED = 3, NAV_BB_DISABLED = 4, }; enum NAV_FORWARDBUTTONSTATES { NAV_FB_NORMAL = 1, NAV_FB_HOT = 2, NAV_FB_PRESSED = 3, NAV_FB_DISABLED = 4, }; enum NAV_MENUBUTTONSTATES { NAV_MB_NORMAL = 1, NAV_MB_HOT = 2, NAV_MB_PRESSED = 3, NAV_MB_DISABLED = 4, }; /* PROGRESSSTYLE class */ #if defined(__GNUC__) #define VSCLASS_PROGRESSSTYLE (const WCHAR []){'P','R','O','G','R','E','S','S','S','T','Y','L','E',0} #define VSCLASS_PROGRESS (const WCHAR []){'P','R','O','G','R','E','S','S',0} #elif defined(_MSC_VER) #define VSCLASS_PROGRESSSTYLE L"PROGRESSSTYLE" #define VSCLASS_PROGRESS L"PROGRESS" #else static const WCHAR VSCLASS_PROGRESSSTYLE [] = {'P','R','O','G','R','E','S','S','S','T','Y','L','E',0}; static const WCHAR VSCLASS_PROGRESS [] = {'P','R','O','G','R','E','S','S',0}; #endif enum PROGRESSPARTS { PP_BAR = 1, PP_BARVERT = 2, PP_CHUNK = 3, PP_CHUNKVERT = 4, PP_FILL = 5, PP_FILLVERT = 6, PP_PULSEOVERLAY = 7, PP_MOVEOVERLAY = 8, PP_PULSEOVERLAYVERT = 9, PP_MOVEOVERLAYVERT = 10, PP_TRANSPARENTBAR = 11, PP_TRANSPARENTBARVERT = 12, }; #define PROGRESSSTYLEPARTS PROGRESSPARTS; enum TRANSPARENTBARSTATES { PBBS_NORMAL = 1, PBBS_PARTIAL = 2, }; enum TRANSPARENTBARVERTSTATES { PBBVS_NORMAL = 1, PBBVS_PARTIAL = 2, }; enum FILLSTATES { PBFS_NORMAL = 1, PBFS_ERROR = 2, PBFS_PAUSED = 3, PBFS_PARTIAL = 4, }; enum FILLVERTSTATES { PBFVS_NORMAL = 1, PBFVS_ERROR = 2, PBFVS_PAUSED = 3, PBFVS_PARTIAL = 4, }; /* REBARSTYLE class */ #if defined(__GNUC__) #define VSCLASS_REBARSTYLE (const WCHAR []){'R','E','B','A','R','S','T','Y','L','E',0} #define VSCLASS_REBAR (const WCHAR []){'R','E','B','A','R',0} #elif defined(_MSC_VER) #define VSCLASS_REBARSTYLE L"REBARSTYLE" #define VSCLASS_REBAR L"REBAR" #else static const WCHAR VSCLASS_REBARSTYLE [] = {'R','E','B','A','R','S','T','Y','L','E',0}; static const WCHAR VSCLASS_REBAR [] = {'R','E','B','A','R',0}; #endif enum REBARPARTS { RP_GRIPPER = 1, RP_GRIPPERVERT = 2, RP_BAND = 3, RP_CHEVRON = 4, RP_CHEVRONVERT = 5, RP_BACKGROUND = 6, RP_SPLITTER = 7, RP_SPLITTERVERT = 8, }; #define REBARSTYLEPARTS REBARPARTS; enum CHEVRONSTATES { CHEVS_NORMAL = 1, CHEVS_HOT = 2, CHEVS_PRESSED = 3, }; enum CHEVRONVERTSTATES { CHEVSV_NORMAL = 1, CHEVSV_HOT = 2, CHEVSV_PRESSED = 3, }; enum SPLITTERSTATES { SPLITS_NORMAL = 1, SPLITS_HOT = 2, SPLITS_PRESSED = 3, }; enum SPLITTERVERTSTATES { SPLITSV_NORMAL = 1, SPLITSV_HOT = 2, SPLITSV_PRESSED = 3, }; /* SCROLLBARSTYLE class */ #if defined(__GNUC__) #define VSCLASS_SCROLLBARSTYLE (const WCHAR []){'S','C','R','O','L','L','B','A','R','S','T','Y','L','E',0} #define VSCLASS_SCROLLBAR (const WCHAR []){'S','C','R','O','L','L','B','A','R',0} #elif defined(_MSC_VER) #define VSCLASS_SCROLLBARSTYLE L"SCROLLBARSTYLE" #define VSCLASS_SCROLLBAR L"SCROLLBAR" #else static const WCHAR VSCLASS_SCROLLBARSTYLE [] = {'S','C','R','O','L','L','B','A','R','S','T','Y','L','E',0}; static const WCHAR VSCLASS_SCROLLBAR [] = {'S','C','R','O','L','L','B','A','R',0}; #endif enum SCROLLBARPARTS { SBP_ARROWBTN = 1, SBP_THUMBBTNHORZ = 2, SBP_THUMBBTNVERT = 3, SBP_LOWERTRACKHORZ = 4, SBP_UPPERTRACKHORZ = 5, SBP_LOWERTRACKVERT = 6, SBP_UPPERTRACKVERT = 7, SBP_GRIPPERHORZ = 8, SBP_GRIPPERVERT = 9, SBP_SIZEBOX = 10, }; #define SCROLLBARSTYLEPARTS SCROLLBARPARTS; enum ARROWBTNSTATES { ABS_UPNORMAL = 1, ABS_UPHOT = 2, ABS_UPPRESSED = 3, ABS_UPDISABLED = 4, ABS_DOWNNORMAL = 5, ABS_DOWNHOT = 6, ABS_DOWNPRESSED = 7, ABS_DOWNDISABLED = 8, ABS_LEFTNORMAL = 9, ABS_LEFTHOT = 10, ABS_LEFTPRESSED = 11, ABS_LEFTDISABLED = 12, ABS_RIGHTNORMAL = 13, ABS_RIGHTHOT = 14, ABS_RIGHTPRESSED = 15, ABS_RIGHTDISABLED = 16, ABS_UPHOVER = 17, ABS_DOWNHOVER = 18, ABS_LEFTHOVER = 19, ABS_RIGHTHOVER = 20, }; enum SCROLLBARSTYLESTATES { SCRBS_NORMAL = 1, SCRBS_HOT = 2, SCRBS_PRESSED = 3, SCRBS_DISABLED = 4, SCRBS_HOVER = 5, }; enum SIZEBOXSTATES { SZB_RIGHTALIGN = 1, SZB_LEFTALIGN = 2, SZB_TOPRIGHTALIGN = 3, SZB_TOPLEFTALIGN = 4, SZB_HALFBOTTOMRIGHTALIGN = 5, SZB_HALFBOTTOMLEFTALIGN = 6, SZB_HALFTOPRIGHTALIGN = 7, SZB_HALFTOPLEFTALIGN = 8, }; /* SPINSTYLE class */ #if defined(__GNUC__) #define VSCLASS_SPINSTYLE (const WCHAR []){'S','P','I','N','S','T','Y','L','E',0} #elif defined(_MSC_VER) #define VSCLASS_SPINSTYLE L"SPINSTYLE" #else static const WCHAR VSCLASS_SPINSTYLE [] = {'S','P','I','N','S','T','Y','L','E',0}; #endif #if defined(__GNUC__) #define VSCLASS_SPIN (const WCHAR []){'S','P','I','N',0} #elif defined(_MSC_VER) #define VSCLASS_SPIN L"SPIN" #else static const WCHAR VSCLASS_SPIN [] = {'S','P','I','N',0}; #endif enum SPINPARTS { SPNP_UP = 1, SPNP_DOWN = 2, SPNP_UPHORZ = 3, SPNP_DOWNHORZ = 4, }; #define SPINSTYLEPARTS SPINPARTS; enum UPSTATES { UPS_NORMAL = 1, UPS_HOT = 2, UPS_PRESSED = 3, UPS_DISABLED = 4, }; enum DOWNSTATES { DNS_NORMAL = 1, DNS_HOT = 2, DNS_PRESSED = 3, DNS_DISABLED = 4, }; enum UPHORZSTATES { UPHZS_NORMAL = 1, UPHZS_HOT = 2, UPHZS_PRESSED = 3, UPHZS_DISABLED = 4, }; enum DOWNHORZSTATES { DNHZS_NORMAL = 1, DNHZS_HOT = 2, DNHZS_PRESSED = 3, DNHZS_DISABLED = 4, }; /* STATUSSTYLE class */ #if defined(__GNUC__) #define VSCLASS_STATUSSTYLE (const WCHAR []){'S','T','A','T','U','S','S','T','Y','L','E',0} #define VSCLASS_STATUS (const WCHAR []){'S','T','A','T','U','S',0} #elif defined(_MSC_VER) #define VSCLASS_STATUSSTYLE L"STATUSSTYLE" #define VSCLASS_STATUS L"STATUS" #else static const WCHAR VSCLASS_STATUSSTYLE [] = {'S','T','A','T','U','S','S','T','Y','L','E',0}; static const WCHAR VSCLASS_STATUS [] = {'S','T','A','T','U','S',0}; #endif enum STATUSPARTS { SP_PANE = 1, SP_GRIPPERPANE = 2, SP_GRIPPER = 3, }; #define STATUSSTYLEPARTS STATUSPARTS; /* TABSTYLE class */ #if defined(__GNUC__) #define VSCLASS_TABSTYLE (const WCHAR []){'T','A','B','S','T','Y','L','E',0} #define VSCLASS_TAB (const WCHAR []){'T','A','B',0} #elif defined(_MSC_VER) #define VSCLASS_TABSTYLE L"TABSTYLE" #define VSCLASS_TAB L"TAB" #else static const WCHAR VSCLASS_TABSTYLE [] = {'T','A','B','S','T','Y','L','E',0}; static const WCHAR VSCLASS_TAB [] = {'T','A','B',0}; #endif enum TABPARTS { TABP_TABITEM = 1, TABP_TABITEMLEFTEDGE = 2, TABP_TABITEMRIGHTEDGE = 3, TABP_TABITEMBOTHEDGE = 4, TABP_TOPTABITEM = 5, TABP_TOPTABITEMLEFTEDGE = 6, TABP_TOPTABITEMRIGHTEDGE = 7, TABP_TOPTABITEMBOTHEDGE = 8, TABP_PANE = 9, TABP_BODY = 10, TABP_AEROWIZARDBODY = 11, }; #define TABSTYLEPARTS TABPARTS; enum TABITEMSTATES { TIS_NORMAL = 1, TIS_HOT = 2, TIS_SELECTED = 3, TIS_DISABLED = 4, TIS_FOCUSED = 5, }; enum TABITEMLEFTEDGESTATES { TILES_NORMAL = 1, TILES_HOT = 2, TILES_SELECTED = 3, TILES_DISABLED = 4, TILES_FOCUSED = 5, }; enum TABITEMRIGHTEDGESTATES { TIRES_NORMAL = 1, TIRES_HOT = 2, TIRES_SELECTED = 3, TIRES_DISABLED = 4, TIRES_FOCUSED = 5, }; enum TABITEMBOTHEDGESTATES { TIBES_NORMAL = 1, TIBES_HOT = 2, TIBES_SELECTED = 3, TIBES_DISABLED = 4, TIBES_FOCUSED = 5, }; enum TOPTABITEMSTATES { TTIS_NORMAL = 1, TTIS_HOT = 2, TTIS_SELECTED = 3, TTIS_DISABLED = 4, TTIS_FOCUSED = 5, }; enum TOPTABITEMLEFTEDGESTATES { TTILES_NORMAL = 1, TTILES_HOT = 2, TTILES_SELECTED = 3, TTILES_DISABLED = 4, TTILES_FOCUSED = 5, }; enum TOPTABITEMRIGHTEDGESTATES { TTIRES_NORMAL = 1, TTIRES_HOT = 2, TTIRES_SELECTED = 3, TTIRES_DISABLED = 4, TTIRES_FOCUSED = 5, }; enum TOPTABITEMBOTHEDGESTATES { TTIBES_NORMAL = 1, TTIBES_HOT = 2, TTIBES_SELECTED = 3, TTIBES_DISABLED = 4, TTIBES_FOCUSED = 5, }; /* TASKDIALOGSTYLE class */ #if defined(__GNUC__) #define VSCLASS_TASKDIALOGSTYLE (const WCHAR []){'T','A','S','K','D','I','A','L','O','G','S','T','Y','L','E',0} #define VSCLASS_TASKDIALOG (const WCHAR []){'T','A','S','K','D','I','A','L','O','G',0} #elif defined(_MSC_VER) #define VSCLASS_TASKDIALOGSTYLE L"TASKDIALOGSTYLE" #define VSCLASS_TASKDIALOG L"TASKDIALOG" #else static const WCHAR VSCLASS_TASKDIALOGSTYLE[] = {'T','A','S','K','D','I','A','L','O','G','S','T','Y','L','E',0}; static const WCHAR VSCLASS_TASKDIALOG [] = {'T','A','S','K','D','I','A','L','O','G',0}; #endif enum TASKDIALOGPARTS { TDLG_PRIMARYPANEL = 1, TDLG_MAININSTRUCTIONPANE = 2, TDLG_MAINICON = 3, TDLG_CONTENTPANE = 4, TDLG_CONTENTICON = 5, TDLG_EXPANDEDCONTENT = 6, TDLG_COMMANDLINKPANE = 7, TDLG_SECONDARYPANEL = 8, TDLG_CONTROLPANE = 9, TDLG_BUTTONSECTION = 10, TDLG_BUTTONWRAPPER = 11, TDLG_EXPANDOTEXT = 12, TDLG_EXPANDOBUTTON = 13, TDLG_VERIFICATIONTEXT = 14, TDLG_FOOTNOTEPANE = 15, TDLG_FOOTNOTEAREA = 16, TDLG_FOOTNOTESEPARATOR = 17, TDLG_EXPANDEDFOOTERAREA = 18, TDLG_PROGRESSBAR = 19, TDLG_IMAGEALIGNMENT = 20, TDLG_RADIOBUTTONPANE = 21, }; #define TASKDIALOGSTYLEPARTS TASKDIALOGPARTS; enum CONTENTPANESTATES { TDLGCPS_STANDALONE = 1, }; enum EXPANDOBUTTONSTATES { TDLGEBS_NORMAL = 1, TDLGEBS_HOVER = 2, TDLGEBS_PRESSED = 3, TDLGEBS_EXPANDEDNORMAL = 4, TDLGEBS_EXPANDEDHOVER = 5, TDLGEBS_EXPANDEDPRESSED = 6, }; /* TEXTSTYLE class */ #if defined(__GNUC__) #define VSCLASS_TEXTSTYLE (const WCHAR []){'T','E','X','T','S','T','Y','L','E',0} #elif defined(_MSC_VER) #define VSCLASS_TEXTSTYLE L"TEXTSTYLE" #else static const WCHAR VSCLASS_TEXTSTYLE [] = {'T','E','X','T','S','T','Y','L','E',0}; #endif enum TEXTSTYLEPARTS { TEXT_MAININSTRUCTION = 1, TEXT_INSTRUCTION = 2, TEXT_BODYTITLE = 3, TEXT_BODYTEXT = 4, TEXT_SECONDARYTEXT = 5, TEXT_HYPERLINKTEXT = 6, TEXT_EXPANDED = 7, TEXT_LABEL = 8, TEXT_CONTROLLABEL = 9, }; enum HYPERLINKTEXTSTATES { TS_HYPERLINK_NORMAL = 1, TS_HYPERLINK_HOT = 2, TS_HYPERLINK_PRESSED = 3, TS_HYPERLINK_DISABLED = 4, }; enum CONTROLLABELSTATES { TS_CONTROLLABEL_NORMAL = 1, TS_CONTROLLABEL_DISABLED = 2, }; /* TOOLBARSTYLE class */ #if defined(__GNUC__) #define VSCLASS_TOOLBARSTYLE (const WCHAR []){'T','O','O','L','B','A','R','S','T','Y','L','E',0} #define VSCLASS_TOOLBAR (const WCHAR []){'T','O','O','L','B','A','R',0} #elif defined(_MSC_VER) #define VSCLASS_TOOLBARSTYLE L"TOOLBARSTYLE" #define VSCLASS_TOOLBAR L"TOOLBAR" #else static const WCHAR VSCLASS_TOOLBARSTYLE [] = {'T','O','O','L','B','A','R','S','T','Y','L','E',0}; static const WCHAR VSCLASS_TOOLBAR[] = {'T','O','O','L','B','A','R',0}; #endif enum TOOLBARPARTS { TP_BUTTON = 1, TP_DROPDOWNBUTTON = 2, TP_SPLITBUTTON = 3, TP_SPLITBUTTONDROPDOWN = 4, TP_SEPARATOR = 5, TP_SEPARATORVERT = 6, }; #define TOOLBARSTYLEPARTS TOOLBARPARTS; enum TOOLBARSTYLESTATES { TS_NORMAL = 1, TS_HOT = 2, TS_PRESSED = 3, TS_DISABLED = 4, TS_CHECKED = 5, TS_HOTCHECKED = 6, TS_NEARHOT = 7, TS_OTHERSIDEHOT = 8, }; /* TOOLTIPSTYLE class */ #if defined(__GNUC__) #define VSCLASS_TOOLTIPSTYLE (const WCHAR []){'T','O','O','L','T','I','P','S','T','Y','L','E',0} #define VSCLASS_TOOLTIP (const WCHAR []){'T','O','O','L','T','I','P',0} #elif defined(_MSC_VER) #define VSCLASS_TOOLTIPSTYLE L"TOOLTIPSTYLE" #define VSCLASS_TOOLTIP L"TOOLTIP" #else static const WCHAR VSCLASS_TOOLTIPSTYLE [] = {'T','O','O','L','T','I','P','S','T','Y','L','E',0}; static const WCHAR VSCLASS_TOOLTIP[] = {'T','O','O','L','T','I','P',0}; #endif enum TOOLTIPPARTS { TTP_STANDARD = 1, TTP_STANDARDTITLE = 2, TTP_BALLOON = 3, TTP_BALLOONTITLE = 4, TTP_CLOSE = 5, TTP_BALLOONSTEM = 6, }; #define TOOLTIPSTYLEPARTS TOOLTIPPARTS; enum CLOSESTATES { TTCS_NORMAL = 1, TTCS_HOT = 2, TTCS_PRESSED = 3, }; enum STANDARDSTATES { TTSS_NORMAL = 1, TTSS_LINK = 2, }; enum BALLOONSTATES { TTBS_NORMAL = 1, TTBS_LINK = 2, }; enum BALLOONSTEMSTATES { TTBSS_POINTINGUPLEFTWALL = 1, TTBSS_POINTINGUPCENTERED = 2, TTBSS_POINTINGUPRIGHTWALL = 3, TTBSS_POINTINGDOWNRIGHTWALL = 4, TTBSS_POINTINGDOWNCENTERED = 5, TTBSS_POINTINGDOWNLEFTWALL = 6, }; /* TRACKBARSTYLE class */ #if defined(__GNUC__) #define VSCLASS_TRACKBARSTYLE (const WCHAR []){'T','R','A','C','K','B','A','R','S','T','Y','L','E',0} #define VSCLASS_TRACKBAR (const WCHAR []){'T','R','A','C','K','B','A','R',0} #elif defined(_MSC_VER) #define VSCLASS_TRACKBARSTYLE L"TRACKBARSTYLE" #define VSCLASS_TRACKBAR L"TRACKBAR" #else static const WCHAR VSCLASS_TRACKBARSTYLE [] = {'T','R','A','C','K','B','A','R','S','T','Y','L','E',0}; static const WCHAR VSCLASS_TRACKBAR [] = {'T','R','A','C','K','B','A','R',0}; #endif enum TRACKBARPARTS { TKP_TRACK = 1, TKP_TRACKVERT = 2, TKP_THUMB = 3, TKP_THUMBBOTTOM = 4, TKP_THUMBTOP = 5, TKP_THUMBVERT = 6, TKP_THUMBLEFT = 7, TKP_THUMBRIGHT = 8, TKP_TICS = 9, TKP_TICSVERT = 10, }; #define TRACKBARSTYLEPARTS TRACKBARPARTS; enum TRACKBARSTYLESTATES { TKS_NORMAL = 1, }; enum TRACKSTATES { TRS_NORMAL = 1, }; enum TRACKVERTSTATES { TRVS_NORMAL = 1, }; enum THUMBSTATES { TUS_NORMAL = 1, TUS_HOT = 2, TUS_PRESSED = 3, TUS_FOCUSED = 4, TUS_DISABLED = 5, }; enum THUMBBOTTOMSTATES { TUBS_NORMAL = 1, TUBS_HOT = 2, TUBS_PRESSED = 3, TUBS_FOCUSED = 4, TUBS_DISABLED = 5, }; enum THUMBTOPSTATES { TUTS_NORMAL = 1, TUTS_HOT = 2, TUTS_PRESSED = 3, TUTS_FOCUSED = 4, TUTS_DISABLED = 5, }; enum THUMBVERTSTATES { TUVS_NORMAL = 1, TUVS_HOT = 2, TUVS_PRESSED = 3, TUVS_FOCUSED = 4, TUVS_DISABLED = 5, }; enum THUMBLEFTSTATES { TUVLS_NORMAL = 1, TUVLS_HOT = 2, TUVLS_PRESSED = 3, TUVLS_FOCUSED = 4, TUVLS_DISABLED = 5, }; enum THUMBRIGHTSTATES { TUVRS_NORMAL = 1, TUVRS_HOT = 2, TUVRS_PRESSED = 3, TUVRS_FOCUSED = 4, TUVRS_DISABLED = 5, }; enum TICSSTATES { TSS_NORMAL = 1, }; enum TICSVERTSTATES { TSVS_NORMAL = 1, }; /* TREEVIEWSTYLE class */ #if defined(__GNUC__) #define VSCLASS_TREEVIEWSTYLE (const WCHAR []){'T','R','E','E','V','I','E','W','S','T','Y','L','E',0} #define VSCLASS_TREEVIEW (const WCHAR []){'T','R','E','E','V','I','E','W',0} #elif defined(_MSC_VER) #define VSCLASS_TREEVIEWSTYLE L"TREEVIEWSTYLE" #define VSCLASS_TREEVIEW L"TREEVIEW" #else static const WCHAR VSCLASS_TREEVIEWSTYLE [] = {'T','R','E','E','V','I','E','W','S','T','Y','L','E',0}; static const WCHAR VSCLASS_TREEVIEW [] = {'T','R','E','E','V','I','E','W',0}; #endif enum TREEVIEWPARTS { TVP_TREEITEM = 1, TVP_GLYPH = 2, TVP_BRANCH = 3, TVP_HOTGLYPH = 4, }; #define TREEVIEWSTYLEPARTS TREEVIEWPARTS; enum TREEITEMSTATES { TREIS_NORMAL = 1, TREIS_HOT = 2, TREIS_SELECTED = 3, TREIS_DISABLED = 4, TREIS_SELECTEDNOTFOCUS = 5, TREIS_HOTSELECTED = 6, }; enum GLYPHSTATES { GLPS_CLOSED = 1, GLPS_OPENED = 2, }; enum HOTGLYPHSTATES { HGLPS_CLOSED = 1, HGLPS_OPENED = 2, }; /* WINDOWSTYLE class */ #if defined(__GNUC__) #define VSCLASS_WINDOWSTYLE (const WCHAR []){'W','I','N','D','O','W','S','T','Y','L','E',0} #define VSCLASS_WINDOW (const WCHAR []){'W','I','N','D','O','W',0} #elif defined(_MSC_VER) #define VSCLASS_WINDOWSTYLE L"WINDOWSTYLE" #define VSCLASS_WINDOW L"WINDOW" #else static const WCHAR VSCLASS_WINDOWSTYLE [] = {'W','I','N','D','O','W','S','T','Y','L','E',0}; static const WCHAR VSCLASS_WINDOW [] = {'W','I','N','D','O','W',0}; #endif enum WINDOWPARTS { WP_CAPTION = 1, WP_SMALLCAPTION = 2, WP_MINCAPTION = 3, WP_SMALLMINCAPTION = 4, WP_MAXCAPTION = 5, WP_SMALLMAXCAPTION = 6, WP_FRAMELEFT = 7, WP_FRAMERIGHT = 8, WP_FRAMEBOTTOM = 9, WP_SMALLFRAMELEFT = 10, WP_SMALLFRAMERIGHT = 11, WP_SMALLFRAMEBOTTOM = 12, WP_SYSBUTTON = 13, WP_MDISYSBUTTON = 14, WP_MINBUTTON = 15, WP_MDIMINBUTTON = 16, WP_MAXBUTTON = 17, WP_CLOSEBUTTON = 18, WP_SMALLCLOSEBUTTON = 19, WP_MDICLOSEBUTTON = 20, WP_RESTOREBUTTON = 21, WP_MDIRESTOREBUTTON = 22, WP_HELPBUTTON = 23, WP_MDIHELPBUTTON = 24, WP_HORZSCROLL = 25, WP_HORZTHUMB = 26, WP_VERTSCROLL = 27, WP_VERTTHUMB = 28, WP_DIALOG = 29, WP_CAPTIONSIZINGTEMPLATE = 30, WP_SMALLCAPTIONSIZINGTEMPLATE = 31, WP_FRAMELEFTSIZINGTEMPLATE = 32, WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33, WP_FRAMERIGHTSIZINGTEMPLATE = 34, WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35, WP_FRAMEBOTTOMSIZINGTEMPLATE = 36, WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37, WP_FRAME = 38, }; #define WINDOWSTYLEPARTS WINDOWPARTS; enum FRAMESTATES { FS_ACTIVE = 1, FS_INACTIVE = 2, }; enum CAPTIONSTATES { CS_ACTIVE = 1, CS_INACTIVE = 2, CS_DISABLED = 3, }; enum MAXCAPTIONSTATES { MXCS_ACTIVE = 1, MXCS_INACTIVE = 2, MXCS_DISABLED = 3, }; enum MINCAPTIONSTATES { MNCS_ACTIVE = 1, MNCS_INACTIVE = 2, MNCS_DISABLED = 3, }; enum HORZSCROLLSTATES { HSS_NORMAL = 1, HSS_HOT = 2, HSS_PUSHED = 3, HSS_DISABLED = 4, }; enum HORZTHUMBSTATES { HTS_NORMAL = 1, HTS_HOT = 2, HTS_PUSHED = 3, HTS_DISABLED = 4, }; enum VERTSCROLLSTATES { VSS_NORMAL = 1, VSS_HOT = 2, VSS_PUSHED = 3, VSS_DISABLED = 4, }; enum VERTTHUMBSTATES { VTS_NORMAL = 1, VTS_HOT = 2, VTS_PUSHED = 3, VTS_DISABLED = 4, }; enum SYSBUTTONSTATES { SBS_NORMAL = 1, SBS_HOT = 2, SBS_PUSHED = 3, SBS_DISABLED = 4, }; enum MINBUTTONSTATES { MINBS_NORMAL = 1, MINBS_HOT = 2, MINBS_PUSHED = 3, MINBS_DISABLED = 4, }; enum RESTOREBUTTONSTATES { RBS_NORMAL = 1, RBS_HOT = 2, RBS_PUSHED = 3, RBS_DISABLED = 4, }; enum HELPBUTTONSTATES { HBS_NORMAL = 1, HBS_HOT = 2, HBS_PUSHED = 3, HBS_DISABLED = 4, }; enum CLOSEBUTTONSTATES { CBS_NORMAL = 1, CBS_HOT = 2, CBS_PUSHED = 3, CBS_DISABLED = 4, }; #endif /* __VSSTYLE_H__ */ ================================================ FILE: wine/windows/vssym32.h ================================================ /* * Copyright (C) 2011 Piotr Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __VSSYM32_H__ #define __VSSYM32_H__ #include "vsstyle.h" enum BGTYPE { BT_IMAGEFILE = 0, BT_BORDERFILL = 1, BT_NONE = 2, }; enum IMAGELAYOUT { IL_VERTICAL = 0, IL_HORIZONTAL = 1, }; enum BORDERTYPE { BT_RECT = 0, BT_ROUNDRECT = 1, BT_ELLIPSE = 2, }; enum FILLTYPE { FT_SOLID = 0, FT_VERTGRADIENT = 1, FT_HORZGRADIENT = 2, FT_RADIALGRADIENT = 3, FT_TILEIMAGE = 4, }; enum SIZINGTYPE { ST_TRUESIZE = 0, ST_STRETCH = 1, ST_TILE = 2, }; enum HALIGN { HA_LEFT = 0, HA_CENTER = 1, HA_RIGHT = 2, }; enum CONTENTALIGNMENT { CA_LEFT = 0, CA_CENTER = 1, CA_RIGHT = 2, }; enum VALIGN { VA_TOP = 0, VA_CENTER = 1, VA_BOTTOM = 2, }; enum OFFSETTYPE { OT_TOPLEFT = 0, OT_TOPRIGHT = 1, OT_TOPMIDDLE = 2, OT_BOTTOMLEFT = 3, OT_BOTTOMRIGHT = 4, OT_BOTTOMMIDDLE = 5, OT_MIDDLELEFT = 6, OT_MIDDLERIGHT = 7, OT_LEFTOFCAPTION = 8, OT_RIGHTOFCAPTION = 9, OT_LEFTOFLASTBUTTON = 10, OT_RIGHTOFLASTBUTTON = 11, OT_ABOVELASTBUTTON = 12, OT_BELOWLASTBUTTON = 13, }; enum ICONEFFECT { ICE_NONE = 0, ICE_GLOW = 1, ICE_SHADOW = 2, ICE_PULSE = 3, ICE_ALPHA = 4, }; enum TEXTSHADOWTYPE { TST_NONE = 0, TST_SINGLE = 1, TST_CONTINUOUS = 2, }; enum GLYPHTYPE { GT_NONE = 0, GT_IMAGEGLYPH = 1, GT_FONTGLYPH = 2, }; enum IMAGESELECTTYPE { IST_NONE = 0, IST_SIZE = 1, IST_DPI = 2, }; enum TRUESIZESCALINGTYPE { TSST_NONE = 0, TSST_SIZE = 1, TSST_DPI = 2, }; enum GLYPHFONTSIZINGTYPE { GFST_NONE = 0, GFST_SIZE = 1, GFST_DPI = 2, }; #define TMT_RESERVEDLOW 0 #define TMT_RESERVEDHIGH 7999 #define TMT_DIBDATA 2 #define TMT_GLYPHDIBDATA 8 #define TMT_ENUM 200 #define TMT_STRING 201 #define TMT_INT 202 #define TMT_BOOL 203 #define TMT_COLOR 204 #define TMT_MARGINS 205 #define TMT_FILENAME 206 #define TMT_SIZE 207 #define TMT_POSITION 208 #define TMT_RECT 209 #define TMT_FONT 210 #define TMT_INTLIST 211 #define TMT_HBITMAP 212 #define TMT_DISKSTREAM 213 #define TMT_STREAM 214 #define TMT_BITMAPREF 215 #define TMT_COLORSCHEMES 401 #define TMT_SIZES 402 #define TMT_CHARSET 403 #define TMT_NAME 600 #define TMT_DISPLAYNAME 601 #define TMT_TOOLTIP 602 #define TMT_COMPANY 603 #define TMT_AUTHOR 604 #define TMT_COPYRIGHT 605 #define TMT_URL 606 #define TMT_VERSION 607 #define TMT_DESCRIPTION 608 #define TMT_FIRST_RCSTRING_NAME TMT_DISPLAYNAME #define TMT_LAST_RCSTRING_NAME TMT_DESCRIPTION #define TMT_CAPTIONFONT 801 #define TMT_SMALLCAPTIONFONT 802 #define TMT_MENUFONT 803 #define TMT_STATUSFONT 804 #define TMT_MSGBOXFONT 805 #define TMT_ICONTITLEFONT 806 #define TMT_HEADING1FONT 807 #define TMT_HEADING2FONT 808 #define TMT_BODYFONT 809 #define TMT_FIRSTFONT TMT_CAPTIONFONT #define TMT_LASTFONT TMT_BODYFONT #define TMT_FLATMENUS 1001 #define TMT_FIRSTBOOL TMT_FLATMENUS #define TMT_LASTBOOL TMT_FLATMENUS #define TMT_SIZINGBORDERWIDTH 1201 #define TMT_SCROLLBARWIDTH 1202 #define TMT_SCROLLBARHEIGHT 1203 #define TMT_CAPTIONBARWIDTH 1204 #define TMT_CAPTIONBARHEIGHT 1205 #define TMT_SMCAPTIONBARWIDTH 1206 #define TMT_SMCAPTIONBARHEIGHT 1207 #define TMT_MENUBARWIDTH 1208 #define TMT_MENUBARHEIGHT 1209 #define TMT_PADDEDBORDERWIDTH 1210 #define TMT_FIRSTSIZE TMT_SIZINGBORDERWIDTH #define TMT_LASTSIZE TMT_PADDEDBORDERWIDTH #define TMT_MINCOLORDEPTH 1301 #define TMT_FIRSTINT TMT_MINCOLORDEPTH #define TMT_LASTINT TMT_MINCOLORDEPTH #define TMT_CSSNAME 1401 #define TMT_XMLNAME 1402 #define TMT_LASTUPDATED 1403 #define TMT_ALIAS 1404 #define TMT_FIRSTSTRING TMT_CSSNAME #define TMT_LASTSTRING TMT_ALIAS #define TMT_SCROLLBAR 1601 #define TMT_BACKGROUND 1602 #define TMT_ACTIVECAPTION 1603 #define TMT_INACTIVECAPTION 1604 #define TMT_MENU 1605 #define TMT_WINDOW 1606 #define TMT_WINDOWFRAME 1607 #define TMT_MENUTEXT 1608 #define TMT_WINDOWTEXT 1609 #define TMT_CAPTIONTEXT 1610 #define TMT_ACTIVEBORDER 1611 #define TMT_INACTIVEBORDER 1612 #define TMT_APPWORKSPACE 1613 #define TMT_HIGHLIGHT 1614 #define TMT_HIGHLIGHTTEXT 1615 #define TMT_BTNFACE 1616 #define TMT_BTNSHADOW 1617 #define TMT_GRAYTEXT 1618 #define TMT_BTNTEXT 1619 #define TMT_INACTIVECAPTIONTEXT 1620 #define TMT_BTNHIGHLIGHT 1621 #define TMT_DKSHADOW3D 1622 #define TMT_LIGHT3D 1623 #define TMT_INFOTEXT 1624 #define TMT_INFOBK 1625 #define TMT_BUTTONALTERNATEFACE 1626 #define TMT_HOTTRACKING 1627 #define TMT_GRADIENTACTIVECAPTION 1628 #define TMT_GRADIENTINACTIVECAPTION 1629 #define TMT_MENUHILIGHT 1630 #define TMT_MENUBAR 1631 #define TMT_FIRSTCOLOR TMT_SCROLLBAR #define TMT_LASTCOLOR TMT_MENUBAR #define TMT_FROMHUE1 1801 #define TMT_FROMHUE2 1802 #define TMT_FROMHUE3 1803 #define TMT_FROMHUE4 1804 #define TMT_FROMHUE5 1805 #define TMT_TOHUE1 1806 #define TMT_TOHUE2 1807 #define TMT_TOHUE3 1808 #define TMT_TOHUE4 1809 #define TMT_TOHUE5 1810 #define TMT_FROMCOLOR1 2001 #define TMT_FROMCOLOR2 2002 #define TMT_FROMCOLOR3 2003 #define TMT_FROMCOLOR4 2004 #define TMT_FROMCOLOR5 2005 #define TMT_TOCOLOR1 2006 #define TMT_TOCOLOR2 2007 #define TMT_TOCOLOR3 2008 #define TMT_TOCOLOR4 2009 #define TMT_TOCOLOR5 2010 #define TMT_TRANSPARENT 2201 #define TMT_AUTOSIZE 2202 #define TMT_BORDERONLY 2203 #define TMT_COMPOSITED 2204 #define TMT_BGFILL 2205 #define TMT_GLYPHTRANSPARENT 2206 #define TMT_GLYPHONLY 2207 #define TMT_ALWAYSSHOWSIZINGBAR 2208 #define TMT_MIRRORIMAGE 2209 #define TMT_UNIFORMSIZING 2210 #define TMT_INTEGRALSIZING 2211 #define TMT_SOURCEGROW 2212 #define TMT_SOURCESHRINK 2213 #define TMT_DRAWBORDERS 2214 #define TMT_NOETCHEDEFFECT 2215 #define TMT_TEXTAPPLYOVERLAY 2216 #define TMT_TEXTGLOW 2217 #define TMT_TEXTITALIC 2218 #define TMT_COMPOSITEDOPAQUE 2219 #define TMT_LOCALIZEDMIRRORIMAGE 2220 #define TMT_IMAGECOUNT 2401 #define TMT_ALPHALEVEL 2402 #define TMT_BORDERSIZE 2403 #define TMT_ROUNDCORNERWIDTH 2404 #define TMT_ROUNDCORNERHEIGHT 2405 #define TMT_GRADIENTRATIO1 2406 #define TMT_GRADIENTRATIO2 2407 #define TMT_GRADIENTRATIO3 2408 #define TMT_GRADIENTRATIO4 2409 #define TMT_GRADIENTRATIO5 2410 #define TMT_PROGRESSCHUNKSIZE 2411 #define TMT_PROGRESSSPACESIZE 2412 #define TMT_SATURATION 2413 #define TMT_TEXTBORDERSIZE 2414 #define TMT_ALPHATHRESHOLD 2415 #define TMT_WIDTH 2416 #define TMT_HEIGHT 2417 #define TMT_GLYPHINDEX 2418 #define TMT_TRUESIZESTRETCHMARK 2419 #define TMT_MINDPI1 2420 #define TMT_MINDPI2 2421 #define TMT_MINDPI3 2422 #define TMT_MINDPI4 2423 #define TMT_MINDPI5 2424 #define TMT_TEXTGLOWSIZE 2425 #define TMT_FRAMESPERSECOND 2426 #define TMT_PIXELSPERFRAME 2427 #define TMT_ANIMATIONDELAY 2428 #define TMT_GLOWINTENSITY 2429 #define TMT_OPACITY 2430 #define TMT_COLORIZATIONCOLOR 2431 #define TMT_COLORIZATIONOPACITY 2432 #define TMT_GLYPHFONT 2601 #define TMT_IMAGEFILE 3001 #define TMT_IMAGEFILE1 3002 #define TMT_IMAGEFILE2 3003 #define TMT_IMAGEFILE3 3004 #define TMT_IMAGEFILE4 3005 #define TMT_IMAGEFILE5 3006 #define TMT_GLYPHIMAGEFILE 3008 #define TMT_TEXT 3201 #define TMT_CLASSICVALUE 3202 #define TMT_OFFSET 3401 #define TMT_TEXTSHADOWOFFSET 3402 #define TMT_MINSIZE 3403 #define TMT_MINSIZE1 3404 #define TMT_MINSIZE2 3405 #define TMT_MINSIZE3 3406 #define TMT_MINSIZE4 3407 #define TMT_MINSIZE5 3408 #define TMT_NORMALSIZE 3409 #define TMT_SIZINGMARGINS 3601 #define TMT_CONTENTMARGINS 3602 #define TMT_CAPTIONMARGINS 3603 #define TMT_BORDERCOLOR 3801 #define TMT_FILLCOLOR 3802 #define TMT_TEXTCOLOR 3803 #define TMT_EDGELIGHTCOLOR 3804 #define TMT_EDGEHIGHLIGHTCOLOR 3805 #define TMT_EDGESHADOWCOLOR 3806 #define TMT_EDGEDKSHADOWCOLOR 3807 #define TMT_EDGEFILLCOLOR 3808 #define TMT_TRANSPARENTCOLOR 3809 #define TMT_GRADIENTCOLOR1 3810 #define TMT_GRADIENTCOLOR2 3811 #define TMT_GRADIENTCOLOR3 3812 #define TMT_GRADIENTCOLOR4 3813 #define TMT_GRADIENTCOLOR5 3814 #define TMT_SHADOWCOLOR 3815 #define TMT_GLOWCOLOR 3816 #define TMT_TEXTBORDERCOLOR 3817 #define TMT_TEXTSHADOWCOLOR 3818 #define TMT_GLYPHTEXTCOLOR 3819 #define TMT_GLYPHTRANSPARENTCOLOR 3820 #define TMT_FILLCOLORHINT 3821 #define TMT_BORDERCOLORHINT 3822 #define TMT_ACCENTCOLORHINT 3823 #define TMT_TEXTCOLORHINT 3824 #define TMT_HEADING1TEXTCOLOR 3825 #define TMT_HEADING2TEXTCOLOR 3826 #define TMT_BODYTEXTCOLOR 3827 #define TMT_BGTYPE 4001 #define TMT_BORDERTYPE 4002 #define TMT_FILLTYPE 4003 #define TMT_SIZINGTYPE 4004 #define TMT_HALIGN 4005 #define TMT_CONTENTALIGNMENT 4006 #define TMT_VALIGN 4007 #define TMT_OFFSETTYPE 4008 #define TMT_ICONEFFECT 4009 #define TMT_TEXTSHADOWTYPE 4010 #define TMT_IMAGELAYOUT 4011 #define TMT_GLYPHTYPE 4012 #define TMT_IMAGESELECTTYPE 4013 #define TMT_GLYPHFONTSIZINGTYPE 4014 #define TMT_TRUESIZESCALINGTYPE 4015 #define TMT_USERPICTURE 5001 #define TMT_DEFAULTPANESIZE 5002 #define TMT_BLENDCOLOR 5003 #define TMT_CUSTOMSPLITRECT 5004 #define TMT_ANIMATIONBUTTONRECT 5005 #define TMT_ANIMATIONDURATION 5006 #define TMT_TRANSITIONDURATIONS 6000 #define TMT_SCALEDBACKGROUND 7001 #define TMT_ATLASIMAGE 8000 #define TMT_ATLASINPUTIMAGE 8001 #define TMT_ATLASRECT 8002 /* LINK class */ #if defined(__GNUC__) #define VSCLASS_LINK (const WCHAR []){'L','I','N','K',0} #elif defined(_MSC_VER) #define VSCLASS_LINK L"LINK" #else static const WCHAR VSCLASS_LINK[] = {'L','I','N','K',0}; #endif enum LINKPARTS { LP_HYPERLINK = 1, }; enum HYPERLINKSTATES { HLS_NORMALTEXT = 1, HLS_LINKTEXT = 2, }; /* EMPTYMARKUP class */ #if defined(__GNUC__) #define VSCLASS_EMPTYMARKUP (const WCHAR []){'E','M','P','T','Y','M','A','R','K','U','P',0} #elif defined(_MSC_VER) #define VSCLASS_EMPTYMARKUP L"EMPTYMARKUP" #else static const WCHAR VSCLASS_EMPTYMARKUP[] = {'E','M','P','T','Y','M','A','R','K','U','P',0}; #endif enum EMPTYMARKUPPARTS { EMP_MARKUPTEXT = 1, }; enum MARKUPTEXTSTATES { EMT_NORMALTEXT = 1, EMT_LINKTEXT = 2, }; /* STATIC class */ #if defined(__GNUC__) #define VSCLASS_STATIC (const WCHAR []){'S','T','A','T','I','C',0} #elif defined(_MSC_VER) #define VSCLASS_STATIC L"STATIC" #else static const WCHAR VSCLASS_STATIC[] = {'S','T','A','T','I','C',0}; #endif enum STATICPARTS { STAT_TEXT = 1, }; /* PAGE class */ #if defined(__GNUC__) #define VSCLASS_PAGE (const WCHAR []){'P','A','G','E',0} #elif defined(_MSC_VER) #define VSCLASS_PAGE L"PAGE" #else static const WCHAR VSCLASS_PAGE[] = {'P','A','G','E',0}; #endif enum PAGEPARTS { PGRP_UP = 1, PGRP_DOWN = 2, PGRP_UPHORZ = 3, PGRP_DOWNHORZ = 4, }; /* MONTHCAL class */ #if defined(__GNUC__) #define VSCLASS_MONTHCAL (const WCHAR []){'M','O','N','T','H','C','A','L',0} #elif defined(_MSC_VER) #define VSCLASS_MONTHCAL L"MONTHCAL" #else static const WCHAR VSCLASS_MONTHCAL[] = {'M','O','N','T','H','C','A','L',0}; #endif enum MONTHCALPARTS { MC_BACKGROUND = 1, MC_BORDERS = 2, MC_GRIDBACKGROUND = 3, MC_COLHEADERSPLITTER = 4, MC_GRIDCELLBACKGROUND = 5, MC_GRIDCELL = 6, MC_GRIDCELLUPPER = 7, MC_TRAILINGGRIDCELL = 8, MC_TRAILINGGRIDCELLUPPER = 9, MC_NAVNEXT = 10, MC_NAVPREV = 11, }; enum GRIDCELLBACKGROUNDSTATES { MCGCB_SELECTED = 1, MCGCB_HOT = 2, MCGCB_SELECTEDHOT = 3, MCGCB_SELECTEDNOTFOCUSED = 4, MCGCB_TODAY = 5, }; enum GRIDCELLSTATES { MCGC_HOT = 1, MCGC_HASSTATE = 2, MCGC_HASSTATEHOT = 3, MCGC_TODAY = 4, }; enum GRIDCELLUPPERSTATES { MCGCU_HOT = 1, MCGCU_HASSTATE = 2, MCGCU_HASSTATEHOT = 3, }; enum TRAILINGGRIDCELLSTATES { MCTGC_HOT = 1, MCTGC_HASSTATE = 2, MCTGC_HASSTATEHOT = 3, MCTGC_TODAY = 4, }; enum TRAILINGGRIDCELLUPPERSTATES { MCTGCU_HOT = 1, MCTGCU_HASSTATE = 2, MCTGCU_HASSTATEHOT = 3, }; enum NAVNEXTSTATES { MCNN_NORMAL = 1, MCNN_HOT = 2, MCNN_PRESSED = 3, MCNN_DISABLED = 4, }; enum NAVPREVSTATES { MCNP_NORMAL = 1, MCNP_HOT = 2, MCNP_PRESSED = 3, MCNP_DISABLED = 4, }; /* CLOCK class */ #if defined(__GNUC__) #define VSCLASS_CLOCK (const WCHAR []){'C','L','O','C','K',0} #elif defined(_MSC_VER) #define VSCLASS_CLOCK L"CLOCK" #else static const WCHAR VSCLASS_CLOCK[] = {'C','L','O','C','K',0}; #endif enum CLOCKPARTS { CLP_TIME = 1, }; enum CLOCKSTATES { CLS_NORMAL = 1, }; /* TRAYNOTIFY class */ #if defined(__GNUC__) #define VSCLASS_TRAYNOTIFY (const WCHAR []){'T','R','A','Y','N','O','T','I','F','Y',0} #elif defined(_MSC_VER) #define VSCLASS_TRAYNOTIFY L"TRAYNOTIFY" #else static const WCHAR VSCLASS_TRAYNOTIFY[] = {'T','R','A','Y','N','O','T','I','F','Y',0}; #endif enum TRAYNOTIFYPARTS { TNP_BACKGROUND = 1, TNP_ANIMBACKGROUND = 2, }; /* TASKBAR class */ #if defined(__GNUC__) #define VSCLASS_TASKBAR (const WCHAR []){'T','A','S','K','B','A','R',0} #elif defined(_MSC_VER) #define VSCLASS_TASKBAR L"TASKBAR" #else static const WCHAR VSCLASS_TASKBAR[] = {'T','A','S','K','B','A','R',0}; #endif enum TASKBARPARTS { TBP_BACKGROUNDBOTTOM = 1, TBP_BACKGROUNDRIGHT = 2, TBP_BACKGROUNDTOP = 3, TBP_BACKGROUNDLEFT = 4, TBP_SIZINGBARBOTTOM = 5, TBP_SIZINGBARRIGHT = 6, TBP_SIZINGBARTOP = 7, TBP_SIZINGBARLEFT = 8, }; /* TASKBAND class */ #if defined(__GNUC__) #define VSCLASS_TASKBAND (const WCHAR []){'T','A','S','K','B','A','N','D',0} #elif defined(_MSC_VER) #define VSCLASS_TASKBAND L"TASKBAND" #else static const WCHAR VSCLASS_TASKBAND[] = {'T','A','S','K','B','A','N','D',0}; #endif enum TASKBANDPARTS { TDP_GROUPCOUNT = 1, TDP_FLASHBUTTON = 2, TDP_FLASHBUTTONGROUPMENU = 3, }; /* STARTPANEL class */ #if defined(__GNUC__) #define VSCLASS_STARTPANEL (const WCHAR []){'S','T','A','R','T','P','A','N','E','L',0} #elif defined(_MSC_VER) #define VSCLASS_STARTPANEL L"STARTPANEL" #else static const WCHAR VSCLASS_STARTPANEL[] = {'S','T','A','R','T','P','A','N','E','L',0}; #endif enum STARTPANELPARTS { SPP_USERPANE = 1, SPP_MOREPROGRAMS = 2, SPP_MOREPROGRAMSARROW = 3, SPP_PROGLIST = 4, SPP_PROGLISTSEPARATOR = 5, SPP_PLACESLIST = 6, SPP_PLACESLISTSEPARATOR = 7, SPP_LOGOFF = 8, SPP_LOGOFFBUTTONS = 9, SPP_USERPICTURE = 10, SPP_PREVIEW = 11, SPP_MOREPROGRAMSTAB = 12, SPP_NSCHOST = 13, SPP_SOFTWAREEXPLORER = 14, SPP_OPENBOX = 15, SPP_SEARCHVIEW = 16, SPP_MOREPROGRAMSARROWBACK = 17, SPP_TOPMATCH = 18, SPP_LOGOFFSPLITBUTTONDROPDOWN = 19, }; enum MOREPROGRAMSTABSTATES { SPMPT_NORMAL = 1, SPMPT_HOT = 2, SPMPT_SELECTED = 3, SPMPT_DISABLED = 4, SPMPT_FOCUSED = 5, }; enum SOFTWAREEXPLORERSTATES { SPSE_NORMAL = 1, SPSE_HOT = 2, SPSE_SELECTED = 3, SPSE_DISABLED = 4, SPSE_FOCUSED = 5, }; enum OPENBOXSTATES { SPOB_NORMAL = 1, SPOB_HOT = 2, SPOB_SELECTED = 3, SPOB_DISABLED = 4, SPOB_FOCUSED = 5, }; enum MOREPROGRAMSARROWSTATES { SPS_NORMAL = 1, SPS_HOT = 2, SPS_PRESSED = 3, }; enum MOREPROGRAMSARROWBACKSTATES { SPSB_NORMAL = 1, SPSB_HOT = 2, SPSB_PRESSED = 3, }; enum LOGOFFBUTTONSSTATES { SPLS_NORMAL = 1, SPLS_HOT = 2, SPLS_PRESSED = 3, }; /* MENUBAND class */ #if defined(__GNUC__) #define VSCLASS_MENUBAND (const WCHAR []){'M','E','N','U','B','A','N','D',0} #elif defined(_MSC_VER) #define VSCLASS_MENUBAND L"MENUBAND" #else static const WCHAR VSCLASS_MENUBAND[] = {'M','E','N','U','B','A','N','D',0}; #endif enum MENUBANDPARTS { MDP_NEWAPPBUTTON = 1, MDP_SEPERATOR = 2, }; enum MENUBANDSTATES { MDS_NORMAL = 1, MDS_HOT = 2, MDS_PRESSED = 3, MDS_DISABLED = 4, MDS_CHECKED = 5, MDS_HOTCHECKED = 6, }; #endif /* __VSSYM32_H__ */ ================================================ FILE: wine/windows/vswriter.h ================================================ /* * Copyright 2014 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_VSWRITER_H #define __WINE_VSWRITER_H typedef enum { VSS_UT_UNDEFINED, VSS_UT_BOOTABLESYSTEMSTATE, VSS_UT_SYSTEMSERVICE, VSS_UT_USERDATA, VSS_UT_OTHER } VSS_USAGE_TYPE; typedef enum { VSS_ST_UNDEFINED, VSS_ST_TRANSACTEDDB, VSS_ST_NONTRANSACTEDDB, VSS_ST_OTHER } VSS_SOURCE_TYPE; typedef enum { VSS_AWS_UNDEFINED, VSS_AWS_NO_ALTERNATE_WRITER, VSS_AWS_ALTERNATE_WRITER_EXISTS, VSS_AWS_THIS_IS_ALTERNATE_WRITER } VSS_ALTERNATE_WRITER_STATE; #endif /* ___WINE_VSWRITER_H */ ================================================ FILE: wine/windows/wbemcli.idl ================================================ /* * Copyright 2009 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ cpp_quote("DEFINE_GUID(CLSID_WbemLocator, 0x4590f811,0x1d3A,0x11d0,0x89,0x1f,0x00,0xaa,0x00,0x4b,0x2e,0x24);") cpp_quote("DEFINE_GUID(CLSID_WbemStatusCode, 0xeb87e1bd,0x3233,0x11d2,0xae,0xc9,0x00,0xc0,0x4f,0xb6,0x88,0x20);") import "oaidl.idl"; import "objidl.idl"; interface IWbemContext; interface IWbemServices; interface IWbemStatusCodeText; interface IWbemCallResult; interface IWbemObjectSink; interface IWbemClassObject; interface IEnumWbemClassObject; interface IWbemQualifierSet; typedef [v1_enum] enum tag_WBEMSTATUS { WBEM_NO_ERROR = 0, WBEM_S_NO_ERROR = 0, WBEM_S_SAME = 0, WBEM_S_FALSE = 1, WBEM_S_ALREADY_EXISTS = 0x40001, WBEM_S_RESET_TO_DEFAULT = 0x40002, WBEM_S_DIFFERENT = 0x40003, WBEM_S_TIMEDOUT = 0x40004, WBEM_S_NO_MORE_DATA = 0x40005, WBEM_S_OPERATION_CANCELLED = 0x40006, WBEM_S_PENDING = 0x40007, WBEM_S_DUPLICATE_OBJECTS = 0x40008, WBEM_S_ACCESS_DENIED = 0x40009, WBEM_S_PARTIAL_RESULTS = 0x40010, WBEM_S_SOURCE_NOT_AVAILABLE = 0x40017, WBEM_E_FAILED = 0x80041001, WBEM_E_NOT_FOUND = 0x80041002, WBEM_E_ACCESS_DENIED = 0x80041003, WBEM_E_PROVIDER_FAILURE = 0x80041004, WBEM_E_TYPE_MISMATCH = 0x80041005, WBEM_E_OUT_OF_MEMORY = 0x80041006, WBEM_E_INVALID_CONTEXT = 0x80041007, WBEM_E_INVALID_PARAMETER = 0x80041008, WBEM_E_NOT_AVAILABLE = 0x80041009, WBEM_E_CRITICAL_ERROR = 0x8004100a, WBEM_E_INVALID_STREAM = 0x8004100b, WBEM_E_NOT_SUPPORTED = 0x8004100c, WBEM_E_INVALID_SUPERCLASS = 0x8004100d, WBEM_E_INVALID_NAMESPACE = 0x8004100e, WBEM_E_INVALID_OBJECT = 0x8004100f, WBEM_E_INVALID_CLASS = 0x80041010, WBEM_E_PROVIDER_NOT_FOUND = 0x80041011, WBEM_E_INVALID_PROVIDER_REGISTRATION = 0x80041012, WBEM_E_PROVIDER_LOAD_FAILURE = 0x80041013, WBEM_E_INITIALIZATION_FAILURE = 0x80041014, WBEM_E_TRANSPORT_FAILURE = 0x80041015, WBEM_E_INVALID_OPERATION = 0x80041016, WBEM_E_INVALID_QUERY = 0x80041017, WBEM_E_INVALID_QUERY_TYPE = 0x80041018, WBEM_E_ALREADY_EXISTS = 0x80041019, WBEM_E_OVERRIDE_NOT_ALLOWED = 0x8004101a, WBEM_E_PROPAGATED_QUALIFIER = 0x8004101b, WBEM_E_PROPAGATED_PROPERTY = 0x8004101c, WBEM_E_UNEXPECTED = 0x8004101d, WBEM_E_ILLEGAL_OPERATION = 0x8004101e, WBEM_E_CANNOT_BE_KEY = 0x8004101f, WBEM_E_INCOMPLETE_CLASS = 0x80041020, WBEM_E_INVALID_SYNTAX = 0x80041021, WBEM_E_NONDECORATED_OBJECT = 0x80041022, WBEM_E_READ_ONLY = 0x80041023, WBEM_E_PROVIDER_NOT_CAPABLE = 0x80041024, WBEM_E_CLASS_HAS_CHILDREN = 0x80041025, WBEM_E_CLASS_HAS_INSTANCES = 0x80041026, WBEM_E_QUERY_NOT_IMPLEMENTED = 0x80041027, WBEM_E_ILLEGAL_NULL = 0x80041028, WBEM_E_INVALID_QUALIFIER_TYPE = 0x80041029, WBEM_E_INVALID_PROPERTY_TYPE = 0x8004102a, WBEM_E_VALUE_OUT_OF_RANGE = 0x8004102b, WBEM_E_CANNOT_BE_SINGLETON = 0x8004102c, WBEM_E_INVALID_CIM_TYPE = 0x8004102d, WBEM_E_INVALID_METHOD = 0x8004102e, WBEM_E_INVALID_METHOD_PARAMETERS = 0x8004102f, WBEM_E_SYSTEM_PROPERTY = 0x80041030, WBEM_E_INVALID_PROPERTY = 0x80041031, WBEM_E_CALL_CANCELLED = 0x80041032, WBEM_E_SHUTTING_DOWN = 0x80041033, WBEM_E_PROPAGATED_METHOD = 0x80041034, WBEM_E_UNSUPPORTED_PARAMETER = 0x80041035, WBEM_E_MISSING_PARAMETER_ID = 0x80041036, WBEM_E_INVALID_PARAMETER_ID = 0x80041037, WBEM_E_NONCONSECUTIVE_PARAMETER_IDS = 0x80041038, WBEM_E_PARAMETER_ID_ON_RETVAL = 0x80041039, WBEM_E_INVALID_OBJECT_PATH = 0x8004103a, WBEM_E_OUT_OF_DISK_SPACE = 0x8004103b, WBEM_E_BUFFER_TOO_SMALL = 0x8004103c, WBEM_E_UNSUPPORTED_PUT_EXTENSION = 0x8004103d, WBEM_E_UNKNOWN_OBJECT_TYPE = 0x8004103e, WBEM_E_UNKNOWN_PACKET_TYPE = 0x8004103f, WBEM_E_MARSHAL_VERSION_MISMATCH = 0x80041040, WBEM_E_MARSHAL_INVALID_SIGNATURE = 0x80041041, WBEM_E_INVALID_QUALIFIER = 0x80041042, WBEM_E_INVALID_DUPLICATE_PARAMETER = 0x80041043, WBEM_E_TOO_MUCH_DATA = 0x80041044, WBEM_E_SERVER_TOO_BUSY = 0x80041045, WBEM_E_INVALID_FLAVOR = 0x80041046, WBEM_E_CIRCULAR_REFERENCE = 0x80041047, WBEM_E_UNSUPPORTED_CLASS_UPDATE = 0x80041048, WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE = 0x80041049, WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE = 0x80041050, WBEM_E_TOO_MANY_PROPERTIES = 0x80041051, WBEM_E_UPDATE_TYPE_MISMATCH = 0x80041052, WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED = 0x80041053, WBEM_E_UPDATE_PROPAGATED_METHOD = 0x80041054, WBEM_E_METHOD_NOT_IMPLEMENTED = 0x80041055, WBEM_E_METHOD_DISABLED = 0x80041056, WBEM_E_REFRESHER_BUSY = 0x80041057, WBEM_E_UNPARSABLE_QUERY = 0x80041058, WBEM_E_NOT_EVENT_CLASS = 0x80041059, WBEM_E_MISSING_GROUP_WITHIN = 0x8004105a, WBEM_E_MISSING_AGGREGATION_LIST = 0x8004105b, WBEM_E_PROPERTY_NOT_AN_OBJECT = 0x8004105c, WBEM_E_AGGREGATING_BY_OBJECT = 0x8004105d, WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY = 0x8004105f, WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING = 0x80041060, WBEM_E_QUEUE_OVERFLOW = 0x80041061, WBEM_E_PRIVILEGE_NOT_HELD = 0x80041062, WBEM_E_INVALID_OPERATOR = 0x80041063, WBEM_E_LOCAL_CREDENTIALS = 0x80041064, WBEM_E_CANNOT_BE_ABSTRACT = 0x80041065, WBEM_E_AMENDED_OBJECT = 0x80041066, WBEM_E_CLIENT_TOO_SLOW = 0x80041067, WBEM_E_NULL_SECURITY_DESCRIPTOR = 0x80041068, WBEM_E_TIMED_OUT = 0x80041069, WBEM_E_INVALID_ASSOCIATION = 0x8004106a, WBEM_E_AMBIGUOUS_OPERATION = 0x8004106b, WBEM_E_QUOTA_VIOLATION = 0x8004106c, WBEM_E_RESERVED_001 = 0x8004106d, WBEM_E_RESERVED_002 = 0x8004106e, WBEM_E_UNSUPPORTED_LOCALE = 0x8004106f, WBEM_E_HANDLE_OUT_OF_DATE = 0x80041070, WBEM_E_CONNECTION_FAILED = 0x80041071, WBEM_E_INVALID_HANDLE_REQUEST = 0x80041072, WBEM_E_PROPERTY_NAME_TOO_WIDE = 0x80041073, WBEM_E_CLASS_NAME_TOO_WIDE = 0x80041074, WBEM_E_METHOD_NAME_TOO_WIDE = 0x80041075, WBEM_E_QUALIFIER_NAME_TOO_WIDE = 0x80041076, WBEM_E_RERUN_COMMAND = 0x80041077, WBEM_E_DATABASE_VER_MISMATCH = 0x80041078, WBEM_E_VETO_DELETE = 0x80041079, WBEM_E_VETO_PUT = 0x8004107a, WBEM_E_INVALID_LOCALE = 0x80041080, WBEM_E_PROVIDER_SUSPENDED = 0x80041081, WBEM_E_SYNCHRONIZATION_REQUIRED = 0x80041082, WBEM_E_NO_SCHEMA = 0x80041083, WBEM_E_PROVIDER_ALREADY_REGISTERED = 0x80041084, WBEM_E_PROVIDER_NOT_REGISTERED = 0x80041085, WBEM_E_FATAL_TRANSPORT_ERROR = 0x80041086, WBEM_E_ENCRYPTED_CONNECTION_REQUIRED = 0x80041087, WBEM_E_PROVIDER_TIMED_OUT = 0x80041088, WBEM_E_NO_KEY = 0x80041089, WBEM_E_PROVIDER_DISABLED = 0x8004108a } WBEMSTATUS; typedef [v1_enum] enum tag_WBEM_STATUS_TYPE { WBEM_STATUS_COMPLETE = 0, WBEM_STATUS_REQUIREMENTS = 1, WBEM_STATUS_PROGRESS = 2 } WBEM_STATUS_TYPE; typedef [v1_enum] enum tag_WBEM_TIMEOUT_TYPE { WBEM_NO_WAIT = 0, WBEM_INFINITE = 0xffffffff } WBEM_TIMEOUT_TYPE; typedef [v1_enum] enum tag_WBEM_CONDITION_FLAG_TYPE { WBEM_FLAG_ALWAYS = 0, WBEM_FLAG_ONLY_IF_TRUE = 0x1, WBEM_FLAG_ONLY_IF_FALSE = 0x2, WBEM_FLAG_ONLY_IF_IDENTICAL = 0x3, WBEM_MASK_PRIMARY_CONDITION = 0x3, WBEM_FLAG_KEYS_ONLY = 0x4, WBEM_FLAG_REFS_ONLY = 0x8, WBEM_FLAG_LOCAL_ONLY = 0x10, WBEM_FLAG_PROPAGATED_ONLY = 0x20, WBEM_FLAG_SYSTEM_ONLY = 0x30, WBEM_FLAG_NONSYSTEM_ONLY = 0x40, WBEM_MASK_CONDITION_ORIGIN = 0x70, WBEM_FLAG_CLASS_OVERRIDES_ONLY = 0x100, WBEM_FLAG_CLASS_LOCAL_AND_OVERRIDES = 0x200, WBEM_MASK_CLASS_CONDITION = 0x300 } WBEM_CONDITION_FLAG_TYPE; typedef [v1_enum] enum tag_WBEM_FLAVOR_TYPE { WBEM_FLAVOR_DONT_PROPAGATE = 0, WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE = 0x1, WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS = 0x2, WBEM_FLAVOR_MASK_PROPAGATION = 0xf, WBEM_FLAVOR_OVERRIDABLE = 0, WBEM_FLAVOR_NOT_OVERRIDABLE = 0x10, WBEM_FLAVOR_MASK_PERMISSIONS = 0x10, WBEM_FLAVOR_ORIGIN_LOCAL = 0, WBEM_FLAVOR_ORIGIN_PROPAGATED = 0x20, WBEM_FLAVOR_ORIGIN_SYSTEM = 0x40, WBEM_FLAVOR_MASK_ORIGIN = 0x60, WBEM_FLAVOR_NOT_AMENDED = 0, WBEM_FLAVOR_AMENDED = 0x80, WBEM_FLAVOR_MASK_AMENDED = 0x80 } WBEM_FLAVOR_TYPE; typedef [v1_enum] enum tag_WBEM_GENUS_TYPE { WBEM_GENUS_CLASS = 1, WBEM_GENUS_INSTANCE = 2 } WBEM_GENUS_TYPE; typedef [v1_enum] enum tag_CIMTYPE_ENUMERATION { CIM_ILLEGAL = 0xfff, CIM_EMPTY = 0, CIM_SINT16 = 2, CIM_SINT32 = 3, CIM_REAL32 = 4, CIM_REAL64 = 5, CIM_STRING = 8, CIM_BOOLEAN = 11, CIM_OBJECT = 13, CIM_SINT8 = 16, CIM_UINT8 = 17, CIM_UINT16 = 18, CIM_UINT32 = 19, CIM_SINT64 = 20, CIM_UINT64 = 21, CIM_DATETIME = 101, CIM_REFERENCE = 102, CIM_CHAR16 = 103, CIM_FLAG_ARRAY = 0x2000 } CIMTYPE_ENUMERATION; typedef long CIMTYPE; [ object, restricted, local, uuid(dc12a687-737f-11cf-884d-00aa004b2e24), pointer_default(unique) ] interface IWbemLocator : IUnknown { HRESULT ConnectServer( [in] const BSTR strNetworkResource, [in] const BSTR strUser, [in] const BSTR strPassword, [in] const BSTR strLocale, [in] LONG lSecurityFlags, [in] const BSTR strAuthority, [in] IWbemContext *pCtx, [out] IWbemServices **ppNamespace); } [ object, local, uuid(eb87e1bc-3233-11d2-aec9-00c04fb68820) ] interface IWbemStatusCodeText : IUnknown { HRESULT GetErrorCodeText( [in] HRESULT hRes, [in] LCID LocaleId, [in] LONG lFlags, [out] BSTR *MessageText); HRESULT GetFacilityCodeText( [in] HRESULT hRes, [in] LCID LocaleId, [in] LONG lFlags, [out] BSTR *MessageText); } [ object, restricted, uuid(7c857801-7381-11cf-884d-00aa004b2e24) ] interface IWbemObjectSink : IUnknown { HRESULT Indicate( [in] long lObjectCount, [in, size_is(lObjectCount)] IWbemClassObject **apObjArray); HRESULT SetStatus( [in] long lFlags, [in] HRESULT hResult, [in] BSTR strParam, [in] IWbemClassObject *pObjParam); } typedef [v1_enum] enum tag_WBEM_GENERIC_FLAG_TYPE { WBEM_FLAG_RETURN_WBEM_COMPLETE = 0, WBEM_FLAG_BIDIRECTIONAL = 0, WBEM_FLAG_RETURN_ERROR_OBJECT = 0, WBEM_FLAG_DONT_SEND_STATUS = 0, WBEM_FLAG_SEND_ONLY_SELECTED = 0, WBEM_FLAG_RETURN_IMMEDIATELY = 0x10, WBEM_FLAG_FORWARD_ONLY = 0x20, WBEM_FLAG_NO_ERROR_OBJECT = 0x40, WBEM_FLAG_SEND_STATUS = 0x80, WBEM_FLAG_ENSURE_LOCATABLE = 0x100, WBEM_FLAG_DIRECT_READ = 0x200, WBEM_MASK_RESERVED_FLAGS = 0x1f000, WBEM_FLAG_USE_AMENDED_QUALIFIERS = 0x20000, WBEM_FLAG_STRONG_VALIDATION = 0x100000 } WBEM_GENERIC_FLAG_TYPE; [ object, restricted, uuid(9556dc99-828c-11cf-a37e-00aa003240c7), pointer_default(unique) ] interface IWbemServices : IUnknown { HRESULT OpenNamespace( [in] const BSTR strNamespace, [in] long lFlags, [in] IWbemContext *pCtx, [out] IWbemServices **ppWorkingNamespace, [out] IWbemCallResult **ppResult); HRESULT CancelAsyncCall( [in] IWbemObjectSink *pSink); HRESULT QueryObjectSink( [in] long lFlags, [out] IWbemObjectSink **ppResponseHandler); HRESULT GetObject( [in] const BSTR strObjectPath, [in] long lFlags, [in] IWbemContext *pCtx, [out] IWbemClassObject **ppObject, [out] IWbemCallResult **ppCallResult); HRESULT GetObjectAsync( [in] const BSTR strObjectPath, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT PutClass( [in] IWbemClassObject *pObject, [in] long lFlags, [in] IWbemContext *pCtx, [out] IWbemCallResult **ppCallResult); HRESULT PutClassAsync( [in] IWbemClassObject *pObject, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT DeleteClass( [in] const BSTR strClass, [in] long lFlags, [in] IWbemContext *pCtx, [out] IWbemCallResult **ppCallResult); HRESULT DeleteClassAsync( [in] const BSTR strClass, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT CreateClassEnum( [in] const BSTR strSuperclass, [in] long lFlags, [in] IWbemContext *pCtx, [out] IEnumWbemClassObject **ppEnum); HRESULT CreateClassEnumAsync( [in] const BSTR strSuperclass, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT PutInstance( [in] IWbemClassObject *pInst, [in] long lFlags, [in] IWbemContext *pCtx, [out] IWbemCallResult **ppCallResult); HRESULT PutInstanceAsync( [in] IWbemClassObject *pInst, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT DeleteInstance( [in] const BSTR strObjectPath, [in] long lFlags, [in] IWbemContext *pCtx, [out] IWbemCallResult **ppCallResult); HRESULT DeleteInstanceAsync( [in] const BSTR strObjectPath, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT CreateInstanceEnum( [in] const BSTR strFilter, [in] long lFlags, [in] IWbemContext *pCtx, [out] IEnumWbemClassObject **ppEnum); HRESULT CreateInstanceEnumAsync( [in] const BSTR strFilter, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT ExecQuery( [in] const BSTR strQueryLanguage, [in] const BSTR strQuery, [in] long lFlags, [in] IWbemContext *pCtx, [out] IEnumWbemClassObject **ppEnum); HRESULT ExecQueryAsync( [in] const BSTR strQueryLanguage, [in] const BSTR strQuery, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT ExecNotificationQuery( [in] const BSTR strQueryLanguage, [in] const BSTR strQuery, [in] long lFlags, [in] IWbemContext *pCtx, [out] IEnumWbemClassObject **ppEnum); HRESULT ExecNotificationQueryAsync( [in] const BSTR strQueryLanguage, [in] const BSTR strQuery, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pResponseHandler); HRESULT ExecMethod( [in] const BSTR strObjectPath, [in] const BSTR strMethodName, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemClassObject *pInParams, [out] IWbemClassObject **ppOutParams, [out] IWbemCallResult **ppCallResult); HRESULT ExecMethodAsync( [in] const BSTR strObjectPath, [in] const BSTR strMethodName, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemClassObject *pInParams, [in] IWbemObjectSink *pResponseHandler); } [ object, restricted, uuid(027947e1-d731-11ce-a357-000000000001) ] interface IEnumWbemClassObject : IUnknown { HRESULT Reset(); HRESULT Next( [in] long lTimeout, [in] ULONG uCount, [out, size_is(uCount), length_is(*puReturned)] IWbemClassObject **apObjects, [out] ULONG *puReturned); HRESULT NextAsync( [in] ULONG uCount, [in] IWbemObjectSink *pSink); HRESULT Clone( [out] IEnumWbemClassObject **ppEnum); HRESULT Skip( [in] long lTimeout, [in] ULONG nCount); } [ object, restricted, local, uuid(dc12a681-737f-11cf-884d-00aa004b2e24) ] interface IWbemClassObject : IUnknown { HRESULT GetQualifierSet( [out] IWbemQualifierSet **ppQualSet); HRESULT Get( [in,string] LPCWSTR wszName, [in] long lFlags, [out] VARIANT *pVal, [out] CIMTYPE *pType, [out] long *plFlavor); HRESULT Put( [in,string] LPCWSTR wszName, [in] long lFlags, [in] VARIANT *pVal, [in] CIMTYPE Type); HRESULT Delete( [in,string] LPCWSTR wszName); HRESULT GetNames( [in,string] LPCWSTR wszQualifierName, [in] long lFlags, [in] VARIANT *pQualifierVal, [out] SAFEARRAY **pNames); HRESULT BeginEnumeration( [in] long lEnumFlags); HRESULT Next( [in] long lFlags, [out] BSTR *strName, [out] VARIANT *pVal, [out] CIMTYPE *pType, [out] long *plFlavor); HRESULT EndEnumeration(); HRESULT GetPropertyQualifierSet( [in,string] LPCWSTR wszProperty, [out] IWbemQualifierSet **ppQualSet); HRESULT Clone( [out] IWbemClassObject **ppCopy); HRESULT GetObjectText( [in] long lFlags, [out] BSTR *pstrObjectText); HRESULT SpawnDerivedClass( [in] long lFlags, [out] IWbemClassObject **ppNewClass); HRESULT SpawnInstance( [in] long lFlags, [out] IWbemClassObject **ppNewInstance); HRESULT CompareTo( [in] long lFlags, [in] IWbemClassObject *pCompareTo); HRESULT GetPropertyOrigin( [in,string] LPCWSTR wszName, [out] BSTR *pstrClassName); HRESULT InheritsFrom( [in] LPCWSTR strAncestor); HRESULT GetMethod( [in,string] LPCWSTR wszName, [in] long lFlags, [out] IWbemClassObject **ppInSignature, [out] IWbemClassObject **ppOutSignature); HRESULT PutMethod( [in,string] LPCWSTR wszName, [in] long lFlags, [in] IWbemClassObject *pInSignature, [in] IWbemClassObject *pOutSignature); HRESULT DeleteMethod( [in,string] LPCWSTR wszName); HRESULT BeginMethodEnumeration( [in] long lEnumFlags); HRESULT NextMethod( [in] long lFlags, [out] BSTR *pstrName, [out] IWbemClassObject **ppInSignature, [out] IWbemClassObject **ppOutSignature); HRESULT EndMethodEnumeration(); HRESULT GetMethodQualifierSet( [in,string] LPCWSTR wszMethod, [out] IWbemQualifierSet **ppQualSet); HRESULT GetMethodOrigin( [in,string] LPCWSTR wszMethodName, [out] BSTR *pstrClassName); } [ object, restricted, local, uuid(dc12a680-737f-11cf-884d-00aa004b2e24) ] interface IWbemQualifierSet : IUnknown { HRESULT Get( [in,string] LPCWSTR wszName, [in] long lFlags, [out] VARIANT *pVal, [out] long *plFlavor); HRESULT Put( [in,string] LPCWSTR wszName, [in] VARIANT *pVal, [in] long lFlavor); HRESULT Delete( [in,string] LPCWSTR wszName); HRESULT GetNames( [in] long lFlags, [out] SAFEARRAY **pNames); HRESULT BeginEnumeration( [in] long lFlags); HRESULT Next( [in] long lFlags, [out] BSTR *pstrName, [out] VARIANT *pVal, [out] long *plFlavor); HRESULT EndEnumeration(); } typedef [v1_enum] enum tag_WBEM_UNSECAPP_FLAG_TYPE { WBEM_FLAG_UNSECAPP_DEFAULT_CHECK_ACCESS, WBEM_FLAG_UNSECAPP_CHECK_ACCESS, WBEM_FLAG_UNSECAPP_DONT_CHECK_ACCESS } WBEM_UNSECAPP_FLAG_TYPE; [ object, restricted, uuid(1cfaba8c-1523-11d1-ad79-00c04fd8fdff) ] interface IUnsecuredApartment : IUnknown { HRESULT CreateObjectStub( [in] IUnknown *object, [out] IUnknown **stub); }; [ object, restricted, uuid(31739d04-3471-4cf4-9a7c-57a44ae71956) ] interface IWbemUnsecuredApartment : IUnsecuredApartment { HRESULT CreateSinkStub( [in] IWbemObjectSink *sink, [in] DWORD flags, [in,unique] const WCHAR *reserved, [out] IWbemObjectSink **stub); }; [ uuid(49bd2028-1523-11d1-ad79-00c04fd8fdff) ] coclass UnsecuredApartment { interface IUnsecuredApartment; interface IWbemUnsecuredApartment; }; ================================================ FILE: wine/windows/wbemdisp.idl ================================================ /* * Copyright 2013 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "dispex.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ uuid(565783c6-cb41-11d1-8b02-00600806d9b6), helpstring("Microsoft WMI Scripting V1.2 Library"), lcid(0x0000), version(1.2) ] library WbemScripting { importlib("stdole2.tlb"); interface ISWbemEventSource; interface ISWbemLocator; interface ISWbemMethod; interface ISWbemMethodSet; interface ISWbemNamedValue; interface ISWbemNamedValueSet; interface ISWbemObject; interface ISWbemObjectPath; interface ISWbemObjectSet; interface ISWbemPrivilege; interface ISWbemPrivilegeSet; interface ISWbemProperty; interface ISWbemPropertySet; interface ISWbemQualifier; interface ISWbemQualifierSet; interface ISWbemSecurity; interface ISWbemServices; typedef [ v1_enum, uuid(bf078c2a-07d9-11d2-8b21-00600806d9b6) ] enum WbemTimeout { wbemTimeoutInfinite = 0xffffffff } WbemTimeout; typedef [ v1_enum, uuid(4a249b72-fc9a-11d1-8b1e-00600806d9b6) ] enum WbemChangeFlagEnum { wbemChangeFlagCreateOrUpdate = 0, wbemChangeFlagUpdateOnly = 0x00000001, wbemChangeFlagCreateOnly = 0x00000002, wbemChangeFlagUpdateCompatible = 0x00000000, wbemChangeFlagUpdateSafeMode = 0x00000020, wbemChangeFlagUpdateForceMode = 0x00000040, wbemChangeFlagStrongValidation = 0x00000080, wbemChangeFlagAdvisory = 0x00010000 } WbemChangeFlagEnum; typedef [ v1_enum, uuid(4a249b73-fc9a-11d1-8b1e-00600806d9b6) ] enum WbemFlagEnum { wbemFlagReturnImmediately = 0x00010, wbemFlagReturnWhenComplete = 0, wbemFlagBidirectional = 0, wbemFlagForwardOnly = 0x00020, wbemFlagNoErrorObject = 0x00040, wbemFlagReturnErrorObject = 0, wbemFlagSendStatus = 0x00080, wbemFlagDontSendStatus = 0, wbemFlagEnsureLocatable = 0x00100, wbemFlagDirectRead = 0x00200, wbemFlagSendOnlySelected = 0, wbemFlagUseAmendedQualifiers = 0x20000, wbemFlagGetDefault = 0x0, wbemFlagSpawnInstance = 0x00001, wbemFlagUseCurrentTime = 0x00001 } WbemFlagEnum; typedef [ v1_enum, uuid(4a249b76-fc9a-11d1-8b1e-00600806d9b6) ] enum WbemQueryFlagEnum { wbemQueryFlagDeep, wbemQueryFlagShallow, wbemQueryFlagPrototype } WbemQueryFlagEnum; typedef [ v1_enum, uuid(4A249B79-FC9A-11d1-8B1E-00600806D9B6) ] enum WbemComparisonFlagEnum { wbemComparisonFlagIncludeAll = 0, wbemComparisonFlagIgnoreQualifiers = 1, wbemComparisonFlagIgnoreObjectSource = 2, wbemComparisonFlagIgnoreDefaultValues = 4, wbemComparisonFlagIgnoreClass = 8, wbemComparisonFlagIgnoreCase = 16, wbemComparisonFlagIgnoreFlavor = 32 } WbemComparisonFlagEnum; [ object, local, uuid(27d54d92-0ebe-11d2-8b22-00600806d9b6), dual, hidden, oleautomation, nonextensible ] interface ISWbemEventSource : IDispatch { [ id(1) ] HRESULT NextEvent( [in, defaultvalue(wbemTimeoutInfinite)] long iTimeoutMs, [out, retval] ISWbemObject **objWbemObject); [ id(2), propget ] HRESULT Security_( [out, retval] ISWbemSecurity **objWbemSecurity); } [ object, local, uuid(76a6415b-cb41-11d1-8b02-00600806d9b6), dual, hidden, oleautomation, pointer_default(unique) ] interface ISWbemLocator : IDispatch { [ id(1) ] HRESULT ConnectServer( [in, defaultvalue(".")] BSTR strServer, [in, defaultvalue("")] BSTR strNamespace, [in, defaultvalue("")] BSTR strUser, [in, defaultvalue("")] BSTR strPassword, [in, defaultvalue("")] BSTR strLocale, [in, defaultvalue("")] BSTR strAuthority, [in, defaultvalue(0)] long iSecurityFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemServices **objWbemServices); [ id(2), propget ] HRESULT Security_([out, retval] ISWbemSecurity **objWbemSecurity); } [ object, local, uuid(422e8e90-d955-11d1-8b09-00600806d9b6), dual, hidden, oleautomation, pointer_default(unique), nonextensible ] interface ISWbemMethod : IDispatch { [ id(1), propget ] HRESULT Name( [out, retval] BSTR *strName); [ id(2), propget ] HRESULT Origin( [out, retval] BSTR *strOrigin); [ id(3), propget ] HRESULT InParameters( [out, retval] ISWbemObject **objWbemInParameters); [ id(4), propget ] HRESULT OutParameters( [out, retval] ISWbemObject **objWbemOutParameters); [ id(5), propget ] HRESULT Qualifiers_( [out, retval] ISWbemQualifierSet **objWbemQualifierSet); } [ object, local, uuid(c93ba292-d955-11d1-8b09-00600806d9b6), dual, hidden, oleautomation, nonextensible ] interface ISWbemMethodSet : IDispatch { [ id(DISPID_NEWENUM), propget, restricted ] HRESULT _NewEnum( [out, retval] IUnknown **pUnk); [ id(DISPID_VALUE) ] HRESULT Item( [in] BSTR strName, [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemMethod **objWbemMethod); [ id(1), propget ] HRESULT Count( [out, retval] long *iCount); } [ object, local, uuid(76a64164-cb41-11d1-8b02-00600806d9b6), dual, hidden, oleautomation ] interface ISWbemNamedValue : IDispatch { [ id(DISPID_VALUE), propget ] HRESULT Value( [out, retval] VARIANT *varValue); [ id(DISPID_VALUE), propput ] HRESULT Value( [in] VARIANT *varValue); [ id(2), propget ] HRESULT Name( [out, retval] BSTR *strName); } [ object, local, uuid(cf2376ea-ce8c-11d1-8b05-00600806d9b6), dual, hidden, oleautomation ] interface ISWbemNamedValueSet : IDispatch { [ id(DISPID_NEWENUM), propget, restricted ] HRESULT _NewEnum( [out, retval] IUnknown **pUnk); [ id(DISPID_VALUE) ] HRESULT Item( [in] BSTR strName, [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemNamedValue **objWbemNamedValue); [ id(1), propget ] HRESULT Count( [out, retval] long *iCount); [ id(2) ] HRESULT Add( [in] BSTR strName, [in] VARIANT *varValue, [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemNamedValue **objWbemNamedValue); [ id(3) ] HRESULT Remove( [in] BSTR strName, [in, defaultvalue(0)] long iFlags); [ id(4) ] HRESULT Clone( [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet); [ id(5) ] HRESULT DeleteAll(); } [ object, local, uuid(76A6415A-CB41-11d1-8B02-00600806D9B6), dual, hidden, oleautomation ] interface ISWbemObject : IDispatch { [ id(1) ] HRESULT Put_( [in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectPath **objWbemObjectPath); [ id(2) ] HRESULT PutAsync_( [in] IDispatch *objWbemSink, [in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id (3) ] HRESULT Delete_( [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet); [ id (4) ] HRESULT DeleteAsync_( [in] IDispatch *objWbemSink, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(5) ] HRESULT Instances_( [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(6) ] HRESULT InstancesAsync_( [in] IDispatch *objWbemSink, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(7) ] HRESULT Subclasses_( [in, defaultvalue(wbemFlagReturnImmediately|wbemQueryFlagDeep)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(8) ] HRESULT SubclassesAsync_( [in] IDispatch *objWbemSink, [in, defaultvalue(wbemQueryFlagDeep)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(9) ] HRESULT Associators_( [in, defaultvalue("")] BSTR strAssocClass, [in, defaultvalue("")] BSTR strResultClass, [in, defaultvalue("")] BSTR strResultRole, [in, defaultvalue("")] BSTR strRole, [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly, [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly, [in, defaultvalue("")] BSTR strRequiredAssocQualifier, [in, defaultvalue("")] BSTR strRequiredQualifier, [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(10) ] HRESULT AssociatorsAsync_( [in] IDispatch *objWbemSink, [in, defaultvalue("")] BSTR strAssocClass, [in, defaultvalue("")] BSTR strResultClass, [in, defaultvalue("")] BSTR strResultRole, [in, defaultvalue("")] BSTR strRole, [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly, [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly, [in, defaultvalue("")] BSTR strRequiredAssocQualifier, [in, defaultvalue("")] BSTR strRequiredQualifier, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(11) ] HRESULT References_( [in, defaultvalue("")] BSTR strResultClass, [in, defaultvalue("")] BSTR strRole, [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly, [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly, [in, defaultvalue("")] BSTR strRequiredQualifier, [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(12) ] HRESULT ReferencesAsync_( [in] IDispatch *objWbemSink, [in, defaultvalue("")] BSTR strResultClass, [in, defaultvalue("")] BSTR strRole, [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly, [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly, [in, defaultvalue("")] BSTR strRequiredQualifier, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(13) ] HRESULT ExecMethod_( [in] BSTR strMethodName, [in, defaultvalue(0)] IDispatch *objWbemInParameters, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObject **objWbemOutParameters); [ id(14) ] HRESULT ExecMethodAsync_( [in] IDispatch *objWbemSink, [in] BSTR strMethodName, [in, defaultvalue(0)] IDispatch *objWbemInParameters, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(15) ] HRESULT Clone_( [out, retval] ISWbemObject **objWbemObject); [ id(16) ] HRESULT GetObjectText_( [in, defaultvalue(0)] long iFlags, [out, retval] BSTR *strObjectText); [ id(17) ] HRESULT SpawnDerivedClass_( [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemObject **objWbemObject); [ id(18) ] HRESULT SpawnInstance_( [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemObject **objWbemObject); [ id(19) ] HRESULT CompareTo_( [in] IDispatch *objWbemObject, [in, defaultvalue(wbemComparisonFlagIncludeAll)] long iFlags, [out, retval] VARIANT_BOOL *bResult); [ id(20), propget ] HRESULT Qualifiers_( [out, retval] ISWbemQualifierSet **objWbemQualifierSet); [ id(21), propget ] HRESULT Properties_( [out, retval] ISWbemPropertySet **objWbemPropertySet); [ id(22), propget ] HRESULT Methods_( [out, retval] ISWbemMethodSet **objWbemMethodSet); [ id(23), propget ] HRESULT Derivation_( [out, retval] VARIANT *strClassNameArray); [ id(24), propget ] HRESULT Path_( [out, retval] ISWbemObjectPath **objWbemObjectPath); [ id(25), propget ] HRESULT Security_( [out, retval] ISWbemSecurity **objWbemSecurity); } [ object, local, uuid(5791bc27-ce9c-11d1-97bf-0000f81e849c), dual, hidden, oleautomation, pointer_default(unique) ] interface ISWbemObjectPath : IDispatch { [ id(DISPID_VALUE), propget ] HRESULT Path( [out, retval] BSTR *strPath); [ id(DISPID_VALUE), propput ] HRESULT Path( [in] BSTR strPath); [ id(1), propget ] HRESULT RelPath( [out, retval] BSTR *strRelPath); [ id(1), propput ] HRESULT RelPath( [in] BSTR strRelPath); [ id(2), propget ] HRESULT Server( [out, retval] BSTR *strServer); [ id(2), propput ] HRESULT Server( [in] BSTR strServer); [ id(3), propget ] HRESULT Namespace( [out, retval] BSTR *strNamespace); [ id(3), propput ] HRESULT Namespace( [in] BSTR strNamespace); [ id(4), propget ] HRESULT ParentNamespace( [out, retval] BSTR *strParentNamespace); [ id(5), propget ] HRESULT DisplayName( [out, retval] BSTR *strDisplayName); [ id(5), propput ] HRESULT DisplayName( [in] BSTR strDisplayName); [ id(6), propget ] HRESULT Class( [out, retval] BSTR *strClass); [ id(6), propput ] HRESULT Class( [in] BSTR strClass); [ id(7), propget ] HRESULT IsClass( [out, retval] VARIANT_BOOL *bIsClass); [ id(8) ] HRESULT SetAsClass(); [ id(9), propget ] HRESULT IsSingleton( [out, retval] VARIANT_BOOL *bIsSingleton); [ id(10) ] HRESULT SetAsSingleton(); [ id(11), propget ] HRESULT Keys( [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet); [ id(12), propget ] HRESULT Security_( [out, retval] ISWbemSecurity **objWbemSecurity); [ id(13), propget ] HRESULT Locale( [out, retval] BSTR *strLocale); [ id(13), propput ] HRESULT Locale( [in] BSTR strLocale); [ id(14), propget ] HRESULT Authority( [out, retval] BSTR *strAuthority); [ id(14), propput ] HRESULT Authority( [in] BSTR strAuthority); } [ object, local, uuid(76a6415f-cb41-11d1-8b02-00600806d9b6), dual, hidden, oleautomation, nonextensible ] interface ISWbemObjectSet : IDispatch { [ id(DISPID_NEWENUM), propget, restricted ] HRESULT _NewEnum( [out, retval] IUnknown **pUnk); [ id(DISPID_VALUE) ] HRESULT Item( [in] BSTR strObjectPath, [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemObject **objWbemObject); [ id(1), propget ] HRESULT Count( [out, retval] long *iCount); [ id(4), propget ] HRESULT Security_( [out, retval] ISWbemSecurity **objWbemSecurity); [ id(5) ] HRESULT ItemIndex( [in] long lIndex, [out, retval] ISWbemObject **objWbemObject); } typedef [ v1_enum, uuid(176d2f70-5af3-11d2-8b4a-00600806d9b6) ] enum WbemPrivilegeEnum { wbemPrivilegeCreateToken = 1, wbemPrivilegePrimaryToken = 2, wbemPrivilegeLockMemory = 3, wbemPrivilegeIncreaseQuota = 4, wbemPrivilegeMachineAccount = 5, wbemPrivilegeTcb = 6, wbemPrivilegeSecurity = 7, wbemPrivilegeTakeOwnership = 8, wbemPrivilegeLoadDriver = 9, wbemPrivilegeSystemProfile = 10, wbemPrivilegeSystemtime = 11, wbemPrivilegeProfileSingleProcess = 12, wbemPrivilegeIncreaseBasePriority = 13, wbemPrivilegeCreatePagefile = 14, wbemPrivilegeCreatePermanent = 15, wbemPrivilegeBackup = 16, wbemPrivilegeRestore = 17, wbemPrivilegeShutdown = 18, wbemPrivilegeDebug = 19, wbemPrivilegeAudit = 20, wbemPrivilegeSystemEnvironment = 21, wbemPrivilegeChangeNotify = 22, wbemPrivilegeRemoteShutdown = 23, wbemPrivilegeUndock = 24, wbemPrivilegeSyncAgent = 25, wbemPrivilegeEnableDelegation = 26, wbemPrivilegeManageVolume = 27 } WbemPrivilegeEnum; [ object, local, uuid(26ee67bd-5804-11d2-8b4a-00600806d9b6), dual, hidden, oleautomation, nonextensible ] interface ISWbemPrivilege : IDispatch { [ id(DISPID_VALUE), propget ] HRESULT IsEnabled( [out, retval] VARIANT_BOOL *bIsEnabled); [ id(DISPID_VALUE), propput ] HRESULT IsEnabled( [in] VARIANT_BOOL bIsEnabled); [ id(1), propget ] HRESULT Name( [out, retval] BSTR *strDisplayName); [ id(2), propget ] HRESULT DisplayName( [out, retval] BSTR *strDisplayName); [ id(3), propget ] HRESULT Identifier( [out, retval] WbemPrivilegeEnum *iPrivilege); } [ object, local, uuid(26ee67bf-5804-11d2-8b4a-00600806d9b6), dual, hidden, oleautomation, nonextensible ] interface ISWbemPrivilegeSet : IDispatch { [ id(DISPID_NEWENUM), propget, restricted ] HRESULT _NewEnum( [out, retval] IUnknown **pUnk); [ id(DISPID_VALUE) ] HRESULT Item( [in] WbemPrivilegeEnum iPrivilege, [out, retval] ISWbemPrivilege **objWbemPrivilege); [ id(1), propget ] HRESULT Count( [out, retval] long *iCount); [ id(2) ] HRESULT Add( [in] WbemPrivilegeEnum iPrivilege, [in, defaultvalue(TRUE)] VARIANT_BOOL bIsEnabled, [out, retval] ISWbemPrivilege **objWbemPrivilege); [ id(3) ] HRESULT Remove( [in] WbemPrivilegeEnum iPrivilege); [ id(4) ] HRESULT DeleteAll(); [ id(5) ] HRESULT AddAsString( [in] BSTR strPrivilege, [in, defaultvalue(TRUE)] VARIANT_BOOL bIsEnabled, [out, retval] ISWbemPrivilege **objWbemPrivilege); } typedef [ v1_enum, uuid(4a249b7b-fc9a-11d1-8b1e-00600806d9b6), ] enum WbemCimtypeEnum { wbemCimtypeSint16 = 2, wbemCimtypeSint32 = 3, wbemCimtypeReal32 = 4, wbemCimtypeReal64 = 5, wbemCimtypeString = 8, wbemCimtypeBoolean = 11, wbemCimtypeObject = 13, wbemCimtypeSint8 = 16, wbemCimtypeUint8 = 17, wbemCimtypeUint16 = 18, wbemCimtypeUint32 = 19, wbemCimtypeSint64 = 20, wbemCimtypeUint64 = 21, wbemCimtypeDatetime = 101, wbemCimtypeReference = 102, wbemCimtypeChar16 = 103 } WbemCimtypeEnum; [ object, local, uuid(1a388f98-d4ba-11d1-8b09-00600806d9b6), dual, hidden, oleautomation, pointer_default(unique) ] interface ISWbemProperty : IDispatch { [ id(DISPID_VALUE), propget ] HRESULT Value( [out, retval] VARIANT *varValue); [ id(DISPID_VALUE), propput ] HRESULT Value( [in] VARIANT *varValue); [ id(1), propget ] HRESULT Name( [out, retval] BSTR *strName); [ id(2), propget ] HRESULT IsLocal( [out, retval] VARIANT_BOOL *bIsLocal); [ id(3), propget ] HRESULT Origin( [out, retval] BSTR *strOrigin); [ id(4), propget ] HRESULT CIMType( [out, retval] WbemCimtypeEnum *iCimType); [ id(5), propget ] HRESULT Qualifiers_( [out, retval] ISWbemQualifierSet **objWbemQualifierSet); [ id(6), propget ] HRESULT IsArray( [out, retval] VARIANT_BOOL *bIsArray); } [ object, local, uuid(dea0a7b2-d4ba-11d1-8b09-00600806d9b6), dual, hidden, oleautomation ] interface ISWbemPropertySet : IDispatch { [ id(DISPID_NEWENUM), propget, restricted ] HRESULT _NewEnum( [out, retval] IUnknown **pUnk); [ id(DISPID_VALUE) ] HRESULT Item( [in] BSTR strName, [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemProperty **objWbemProperty); [ id(1), propget ] HRESULT Count( [out, retval] long *iCount); [ id(2) ] HRESULT Add( [in] BSTR strName, [in] WbemCimtypeEnum iCIMType, [in, defaultvalue(FALSE)] VARIANT_BOOL bIsArray, [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemProperty **objWbemProperty); [ id(3) ] HRESULT Remove( [in] BSTR strName, [in, defaultvalue(0)] long iFlags); } [ object, local, uuid(79b05932-d3b7-11d1-8b06-00600806d9b6), dual, hidden, oleautomation, nonextensible, pointer_default(unique) ] interface ISWbemQualifier : IDispatch { [ id(DISPID_VALUE), propget ] HRESULT Value( [out, retval] VARIANT *varValue); [ id(DISPID_VALUE), propput ] HRESULT Value( [in] VARIANT *varValue); [ id(1), propget ] HRESULT Name( [out, retval] BSTR *strName); [ id(2), propget ] HRESULT IsLocal( [out, retval] VARIANT_BOOL *bIsLocal); [ id(3), propget ] HRESULT PropagatesToSubclass( [out, retval] VARIANT_BOOL *bPropagatesToSubclass); [ id(3), propput ] HRESULT PropagatesToSubclass( [in] VARIANT_BOOL bPropagatesToSubclass); [ id(4), propget ] HRESULT PropagatesToInstance( [out, retval] VARIANT_BOOL *bPropagatesToInstance); [ id(4), propput ] HRESULT PropagatesToInstance( [in] VARIANT_BOOL bPropagatesToInstance); [ id(5), propget ] HRESULT IsOverridable( [out, retval] VARIANT_BOOL *bIsOverridable); [ id(5), propput ] HRESULT IsOverridable( [in] VARIANT_BOOL bIsOverridable); [ id(6), propget ] HRESULT IsAmended( [out, retval] VARIANT_BOOL *bIsAmended); } [ object, local, uuid(9b16ed16-d3df-11d1-8b08-00600806d9b6), dual, hidden, oleautomation, nonextensible ] interface ISWbemQualifierSet : IDispatch { [ id(DISPID_NEWENUM), propget, restricted ] HRESULT _NewEnum( [out, retval] IUnknown **pUnk); [ id(DISPID_VALUE) ] HRESULT Item( [in] BSTR name, [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemQualifier **objWbemQualifier); [ id(1), propget ] HRESULT Count( [out, retval] long *iCount); [ id(2) ] HRESULT Add( [in] BSTR strName, [in] VARIANT *varVal, [in, defaultvalue(TRUE)] VARIANT_BOOL bPropagatesToSubclass, [in, defaultvalue(TRUE)] VARIANT_BOOL bPropagatesToInstance, [in, defaultvalue(TRUE)] VARIANT_BOOL bIsOverridable, [in, defaultvalue(0)] long iFlags, [out, retval] ISWbemQualifier **objWbemQualifier); [ id(3) ] HRESULT Remove( [in] BSTR strName, [in, defaultvalue(0)] long iFlags); } typedef [ v1_enum, uuid(b54d66e8-2287-11d2-8b33-00600806d9b6) ] enum WbemImpersonationLevelEnum { wbemImpersonationLevelAnonymous = 1, wbemImpersonationLevelIdentify = 2, wbemImpersonationLevelImpersonate = 3, wbemImpersonationLevelDelegate = 4 } WbemImpersonationLevelEnum; typedef [ v1_enum, uuid(b54d66e7-2287-11d2-8b33-00600806d9b6) ] enum WbemAuthenticationLevelEnum { wbemAuthenticationLevelDefault = 0, wbemAuthenticationLevelNone = 1, wbemAuthenticationLevelConnect = 2, wbemAuthenticationLevelCall = 3, wbemAuthenticationLevelPkt = 4, wbemAuthenticationLevelPktIntegrity = 5, wbemAuthenticationLevelPktPrivacy = 6 } WbemAuthenticationLevelEnum; [ object, local, uuid(b54d66e6-2287-11d2-8b33-00600806d9b6), dual, hidden, oleautomation, nonextensible ] interface ISWbemSecurity : IDispatch { [ id(1), propget ] HRESULT ImpersonationLevel( [out, retval] WbemImpersonationLevelEnum *iImpersonationLevel); [ id(1), propput ] HRESULT ImpersonationLevel( [in] WbemImpersonationLevelEnum iImpersonationLevel); [ id(2), propget ] HRESULT AuthenticationLevel( [out, retval] WbemAuthenticationLevelEnum *iAuthenticationLevel); [ id(2), propput ] HRESULT AuthenticationLevel( [in] WbemAuthenticationLevelEnum iAuthenticationLevel); [ id(3), propget ] HRESULT Privileges( [out, retval] ISWbemPrivilegeSet **objWbemPrivilegeSet); } [ object, local, uuid(76a6415c-cb41-11d1-8b02-00600806d9b6), dual, hidden, oleautomation, pointer_default(unique) ] interface ISWbemServices : IDispatch { [ id(1) ] HRESULT Get( [in, defaultvalue("")] BSTR strObjectPath, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObject **objWbemObject); [ id(2) ] HRESULT GetAsync( [in] IDispatch *objWbemSink, [in, defaultvalue("")] BSTR strObjectPath, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(3) ] HRESULT Delete( [in] BSTR strObjectPath, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet); [ id(4) ] HRESULT DeleteAsync( [in] IDispatch *objWbemSink, [in] BSTR strObjectPath, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(5) ] HRESULT InstancesOf( [in] BSTR strClass, [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(6) ] HRESULT InstancesOfAsync( [in] IDispatch *objWbemSink, [in] BSTR strClass, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(7) ] HRESULT SubclassesOf( [in, defaultvalue("")] BSTR strSuperclass, [in, defaultvalue(wbemFlagReturnImmediately|wbemQueryFlagDeep)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(8) ] HRESULT SubclassesOfAsync( [in] IDispatch *objWbemSink, [in, defaultvalue("")] BSTR strSuperclass, [in, defaultvalue(wbemQueryFlagDeep)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(9) ] HRESULT ExecQuery( [in] BSTR strQuery, [in, defaultvalue("WQL")] BSTR strQueryLanguage, [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(10) ] HRESULT ExecQueryAsync( [in] IDispatch *objWbemSink, [in] BSTR strQuery, [in, defaultvalue("WQL")] BSTR strQueryLanguage, [in, defaultvalue(0)] long lFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(11) ] HRESULT AssociatorsOf( [in] BSTR strObjectPath, [in, defaultvalue("")] BSTR strAssocClass, [in, defaultvalue("")] BSTR strResultClass, [in, defaultvalue("")] BSTR strResultRole, [in, defaultvalue("")] BSTR strRole, [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly, [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly, [in, defaultvalue("")] BSTR strRequiredAssocQualifier, [in, defaultvalue("")] BSTR strRequiredQualifier, [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(12) ] HRESULT AssociatorsOfAsync( [in] IDispatch *objWbemSink, [in] BSTR strObjectPath, [in, defaultvalue("")] BSTR strAssocClass, [in, defaultvalue("")] BSTR strResultClass, [in, defaultvalue("")] BSTR strResultRole, [in, defaultvalue("")] BSTR strRole, [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly, [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly, [in, defaultvalue("")] BSTR strRequiredAssocQualifier, [in, defaultvalue("")] BSTR strRequiredQualifier, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(13) ] HRESULT ReferencesTo( [in] BSTR strObjectPath, [in, defaultvalue("")] BSTR strResultClass, [in, defaultvalue("")] BSTR strRole, [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly, [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly, [in, defaultvalue("")] BSTR strRequiredQualifier, [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObjectSet **objWbemObjectSet); [ id(14) ] HRESULT ReferencesToAsync( [in] IDispatch *objWbemSink, [in] BSTR strObjectPath, [in, defaultvalue("")] BSTR strResultClass, [in, defaultvalue("")] BSTR strRole, [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly, [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly, [in, defaultvalue("")] BSTR strRequiredQualifier, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(15) ] HRESULT ExecNotificationQuery( [in] BSTR strQuery, [in, defaultvalue("WQL")] BSTR strQueryLanguage, [in, defaultvalue(wbemFlagReturnImmediately|wbemFlagForwardOnly)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemEventSource **objWbemEventSource); [ id(16) ] HRESULT ExecNotificationQueryAsync( [in] IDispatch *objWbemSink, [in] BSTR strQuery, [in, defaultvalue("WQL")] BSTR strQueryLanguage, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(17) ] HRESULT ExecMethod( [in] BSTR strObjectPath, [in] BSTR strMethodName, [in, defaultvalue(0)] IDispatch *objWbemInParameters, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [out, retval] ISWbemObject **objWbemOutParameters); [ id(18) ] HRESULT ExecMethodAsync( [in] IDispatch *objWbemSink, [in] BSTR strObjectPath, [in] BSTR strMethodName, [in, defaultvalue(0)] IDispatch *objWbemInParameters, [in, defaultvalue(0)] long iFlags, [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet, [in, defaultvalue(0)] IDispatch *objWbemAsyncContext); [ id(19), propget ] HRESULT Security_( [out, retval] ISWbemSecurity **objWbemSecurity); } [ threading(apartment), uuid(76a64158-cb41-11d1-8b02-00600806d9b6), progid("WbemScripting.SWbemLocator.1"), vi_progid("WbemScripting.SWbemLocator") ] coclass SWbemLocator { interface ISWbemLocator; } } /* WbemScripting */ ================================================ FILE: wine/windows/wbemprov.idl ================================================ /* * Copyright 2012 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ [ uuid(092df710-7010-11d1-ad90-00c04fd8fdff) ] library WbemProviders_v1 { [ uuid(cb8555cc-9128-11d1-ad9b-00c04fd8fdff) ] coclass WbemAdministrativeLocator { interface IWbemLocator; } } ================================================ FILE: wine/windows/wct.h ================================================ /* * Copyright 2015 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WCT_H #define __WINE_WCT_H typedef HRESULT (WINAPI *PCOGETCALLSTATE)(int,PULONG); typedef HRESULT (WINAPI *PCOGETACTIVATIONSTATE)(GUID,DWORD,DWORD*); void WINAPI RegisterWaitChainCOMCallback(PCOGETCALLSTATE,PCOGETACTIVATIONSTATE); #endif /* __WINE_WCT_H */ ================================================ FILE: wine/windows/webservices.h ================================================ /* * Copyright 2015 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WEBSERVICES_H #define __WINE_WEBSERVICES_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _WS_ERROR WS_ERROR; typedef struct _WS_HEAP WS_HEAP; typedef struct _WS_XML_BUFFER WS_XML_BUFFER; typedef struct _WS_XML_READER WS_XML_READER; typedef struct _WS_XML_WRITER WS_XML_WRITER; typedef struct _WS_PROXY_PROPERTY WS_PROXY_PROPERTY; typedef struct _WS_SECURITY_DESCRIPTION WS_SECURITY_DESCRIPTION; typedef struct _WS_CHANNEL_PROPERTY WS_CHANNEL_PROPERTY; typedef struct _WS_SERVICE_PROXY WS_SERVICE_PROXY; typedef struct _WS_SECURITY_BINDING_PROPERTY WS_SECURITY_BINDING_PROPERTY; typedef struct _WS_SECURITY_PROPERTY WS_SECURITY_PROPERTY; typedef struct _WS_SECURITY_PROPERTIES WS_SECURITY_PROPERTIES; typedef struct _WS_SECURITY_BINDING WS_SECURITY_BINDING; typedef struct _WS_CHANNEL WS_CHANNEL; typedef struct _WS_MESSAGE_PROPERTY WS_MESSAGE_PROPERTY; typedef struct _WS_MESSAGE_PROPERTIES WS_MESSAGE_PROPERTIES; typedef struct _WS_HTTP_BINDING_TEMPLATE WS_HTTP_BINDING_TEMPLATE; typedef struct _WS_HTTP_SSL_BINDING_TEMPLATE WS_HTTP_SSL_BINDING_TEMPLATE; typedef struct _WS_CHANNEL_PROPERTIES WS_CHANNEL_PROPERTIES; typedef struct _WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE; typedef struct _WS_SECURITY_BINDING_PROPERTIES WS_SECURITY_BINDING_PROPERTIES; typedef struct _WS_CERT_CREDENTIAL WS_CERT_CREDENTIAL; typedef struct _WS_ENDPOINT_ADDRESS WS_ENDPOINT_ADDRESS; typedef struct _WS_ENDPOINT_IDENTITY WS_ENDPOINT_IDENTITY; typedef struct _WS_ENUM_DESCRIPTION WS_ENUM_DESCRIPTION; typedef struct _WS_ENUM_VALUE WS_ENUM_VALUE; typedef struct _WS_HTTP_POLICY_DESCRIPTION WS_HTTP_POLICY_DESCRIPTION; typedef struct _WS_MESSAGE WS_MESSAGE; typedef struct _WS_MESSAGE_DESCRIPTION WS_MESSAGE_DESCRIPTION; typedef struct _WS_OPERATION_DESCRIPTION WS_OPERATION_DESCRIPTION; typedef struct _WS_PARAMETER_DESCRIPTION WS_PARAMETER_DESCRIPTION; typedef struct _WS_OPERATION_CONTEXT WS_OPERATION_CONTEXT; typedef struct _WS_CALL_PROPERTY WS_CALL_PROPERTY; typedef struct _WS_FLOAT_DESCRIPTION WS_FLOAT_DESCRIPTION; typedef struct _WS_DOUBLE_DESCRIPTION WS_DOUBLE_DESCRIPTION; typedef struct _WS_DATETIME WS_DATETIME; typedef struct _WS_XML_DATETIME_TEXT WS_XML_DATETIME_TEXT; typedef struct _WS_XML_BASE64_TEXT WS_XML_BASE64_TEXT; typedef struct _WS_DATETIME_DESCRIPTION WS_DATETIME_DESCRIPTION; typedef struct _WS_GUID_DESCRIPTION WS_GUID_DESCRIPTION; typedef struct _WS_UNIQUE_ID_DESCRIPTION WS_UNIQUE_ID_DESCRIPTION; typedef struct _WS_BYTES_DESCRIPTION WS_BYTES_DESCRIPTION; typedef struct _WS_URL WS_URL; typedef struct _WS_HTTP_URL WS_HTTP_URL; typedef struct _WS_HTTPS_URL WS_HTTPS_URL; typedef struct _WS_NETTCP_URL WS_NETTCP_URL; typedef struct _WS_SOAPUDP_URL WS_SOAPUDP_URL; typedef struct _WS_NETPIPE_URL WS_NETPIPE_URL; typedef struct _WS_CUSTOM_CHANNEL_CALLBACKS WS_CUSTOM_CHANNEL_CALLBACKS; typedef struct _WS_CHANNEL_ENCODER WS_CHANNEL_ENCODER; typedef struct _WS_CHANNEL_DECODER WS_CHANNEL_DECODER; typedef struct _WS_CUSTOM_HTTP_PROXY WS_CUSTOM_HTTP_PROXY; typedef struct _WS_HTTP_MESSAGE_MAPPING WS_HTTP_MESSAGE_MAPPING; typedef struct _WS_HTTP_HEADER_MAPPING WS_HTTP_HEADER_MAPPING; typedef struct _WS_HTTP_REDIRECT_CALLBACK_CONTEXT WS_HTTP_REDIRECT_CALLBACK_CONTEXT; typedef struct _WS_PROXY_MESSAGE_CALLBACK_CONTEXT WS_PROXY_MESSAGE_CALLBACK_CONTEXT; typedef struct _WS_LISTENER WS_LISTENER; typedef struct _WS_LISTENER_PROPERTY WS_LISTENER_PROPERTY; typedef struct _WS_DISALLOWED_USER_AGENT_SUBSTRINGS WS_DISALLOWED_USER_AGENT_SUBSTRINGS; typedef struct _WS_LISTENER_PROPERTIES WS_LISTENER_PROPERTIES; typedef struct _WS_CUSTOM_LISTENER_CALLBACKS WS_CUSTOM_LISTENER_CALLBACKS; struct _WS_STRUCT_DESCRIPTION; struct _WS_XML_STRING; typedef enum { WS_ERROR_PROPERTY_STRING_COUNT, WS_ERROR_PROPERTY_ORIGINAL_ERROR_CODE, WS_ERROR_PROPERTY_LANGID } WS_ERROR_PROPERTY_ID; typedef struct _WS_ERROR_PROPERTY { WS_ERROR_PROPERTY_ID id; void *value; ULONG valueSize; } WS_ERROR_PROPERTY; typedef enum { WS_HEAP_PROPERTY_MAX_SIZE, WS_HEAP_PROPERTY_TRIM_SIZE, WS_HEAP_PROPERTY_REQUESTED_SIZE, WS_HEAP_PROPERTY_ACTUAL_SIZE } WS_HEAP_PROPERTY_ID; typedef struct _WS_HEAP_PROPERTY { WS_HEAP_PROPERTY_ID id; void *value; ULONG valueSize; } WS_HEAP_PROPERTY; typedef ULONG WS_XML_BUFFER_PROPERTY_ID; typedef struct _WS_XML_BUFFER_PROPERTY { WS_XML_BUFFER_PROPERTY_ID id; void *value; ULONG valueSize; } WS_XML_BUFFER_PROPERTY; typedef enum { WS_XML_READER_PROPERTY_MAX_DEPTH, WS_XML_READER_PROPERTY_ALLOW_FRAGMENT, WS_XML_READER_PROPERTY_MAX_ATTRIBUTES, WS_XML_READER_PROPERTY_READ_DECLARATION, WS_XML_READER_PROPERTY_CHARSET, WS_XML_READER_PROPERTY_ROW, WS_XML_READER_PROPERTY_COLUMN, WS_XML_READER_PROPERTY_UTF8_TRIM_SIZE, WS_XML_READER_PROPERTY_STREAM_BUFFER_SIZE, WS_XML_READER_PROPERTY_IN_ATTRIBUTE, WS_XML_READER_PROPERTY_STREAM_MAX_ROOT_MIME_PART_SIZE, WS_XML_READER_PROPERTY_STREAM_MAX_MIME_HEADERS_SIZE, WS_XML_READER_PROPERTY_MAX_MIME_PARTS, WS_XML_READER_PROPERTY_ALLOW_INVALID_CHARACTER_REFERENCES, WS_XML_READER_PROPERTY_MAX_NAMESPACES } WS_XML_READER_PROPERTY_ID; typedef struct _WS_XML_READER_PROPERTY { WS_XML_READER_PROPERTY_ID id; void *value; ULONG valueSize; } WS_XML_READER_PROPERTY; typedef enum { WS_XML_WRITER_PROPERTY_MAX_DEPTH, WS_XML_WRITER_PROPERTY_ALLOW_FRAGMENT, WS_XML_WRITER_PROPERTY_MAX_ATTRIBUTES, WS_XML_WRITER_PROPERTY_WRITE_DECLARATION, WS_XML_WRITER_PROPERTY_INDENT, WS_XML_WRITER_PROPERTY_BUFFER_TRIM_SIZE, WS_XML_WRITER_PROPERTY_CHARSET, WS_XML_WRITER_PROPERTY_BUFFERS, WS_XML_WRITER_PROPERTY_BUFFER_MAX_SIZE, WS_XML_WRITER_PROPERTY_BYTES, WS_XML_WRITER_PROPERTY_IN_ATTRIBUTE, WS_XML_WRITER_PROPERTY_MAX_MIME_PARTS_BUFFER_SIZE, WS_XML_WRITER_PROPERTY_INITIAL_BUFFER, WS_XML_WRITER_PROPERTY_ALLOW_INVALID_CHARACTER_REFERENCES, WS_XML_WRITER_PROPERTY_MAX_NAMESPACES, WS_XML_WRITER_PROPERTY_BYTES_WRITTEN, WS_XML_WRITER_PROPERTY_BYTES_TO_CLOSE, WS_XML_WRITER_PROPERTY_COMPRESS_EMPTY_ELEMENTS, WS_XML_WRITER_PROPERTY_EMIT_UNCOMPRESSED_EMPTY_ELEMENTS } WS_XML_WRITER_PROPERTY_ID; typedef struct _WS_XML_WRITER_PROPERTY { WS_XML_WRITER_PROPERTY_ID id; void *value; ULONG valueSize; } WS_XML_WRITER_PROPERTY; typedef struct _WS_BYTES { ULONG length; BYTE *bytes; } WS_BYTES; typedef struct _WS_BUFFERS { ULONG bufferCount; WS_BYTES *buffers; } WS_BUFFERS; typedef enum { WS_XML_READER_ENCODING_TYPE_TEXT = 1, WS_XML_READER_ENCODING_TYPE_BINARY = 2, WS_XML_READER_ENCODING_TYPE_MTOM = 3, WS_XML_READER_ENCODING_TYPE_RAW = 4 } WS_XML_READER_ENCODING_TYPE; typedef struct _WS_XML_READER_ENCODING { WS_XML_READER_ENCODING_TYPE encodingType; } WS_XML_READER_ENCODING; typedef enum { WS_XML_WRITER_ENCODING_TYPE_TEXT = 1, WS_XML_WRITER_ENCODING_TYPE_BINARY = 2, WS_XML_WRITER_ENCODING_TYPE_MTOM = 3, WS_XML_WRITER_ENCODING_TYPE_RAW = 4 } WS_XML_WRITER_ENCODING_TYPE; typedef struct _WS_XML_WRITER_ENCODING { WS_XML_WRITER_ENCODING_TYPE encodingType; } WS_XML_WRITER_ENCODING; typedef enum { WS_CHARSET_AUTO, WS_CHARSET_UTF8, WS_CHARSET_UTF16LE, WS_CHARSET_UTF16BE } WS_CHARSET; typedef struct _WS_XML_DICTIONARY { GUID guid; struct _WS_XML_STRING *strings; ULONG stringCount; BOOL isConst; } WS_XML_DICTIONARY; typedef struct _WS_XML_STRING { ULONG length; BYTE *bytes; WS_XML_DICTIONARY *dictionary; ULONG id; } WS_XML_STRING; typedef struct _WS_XML_READER_TEXT_ENCODING { WS_XML_READER_ENCODING encoding; WS_CHARSET charSet; } WS_XML_READER_TEXT_ENCODING; typedef struct _WS_XML_READER_BINARY_ENCODING { WS_XML_READER_ENCODING encoding; WS_XML_DICTIONARY *staticDictionary; WS_XML_DICTIONARY *dynamicDictionary; } WS_XML_READER_BINARY_ENCODING; typedef struct _WS_XML_WRITER_TEXT_ENCODING { WS_XML_WRITER_ENCODING encoding; WS_CHARSET charSet; } WS_XML_WRITER_TEXT_ENCODING; typedef HRESULT (CALLBACK *WS_DYNAMIC_STRING_CALLBACK) (void*, const WS_XML_STRING*, BOOL*, ULONG*, WS_ERROR*); typedef struct _WS_XML_WRITER_BINARY_ENCODING { WS_XML_WRITER_ENCODING encoding; WS_XML_DICTIONARY *staticDictionary; WS_DYNAMIC_STRING_CALLBACK dynamicStringCallback; void *dynamicStringCallbackState; } WS_XML_WRITER_BINARY_ENCODING; typedef enum { WS_XML_READER_INPUT_TYPE_BUFFER = 1, WS_XML_READER_INPUT_TYPE_STREAM = 2 } WS_XML_READER_INPUT_TYPE; typedef enum { WS_XML_WRITER_OUTPUT_TYPE_BUFFER = 1, WS_XML_WRITER_OUTPUT_TYPE_STREAM = 2 } WS_XML_WRITER_OUTPUT_TYPE; typedef struct _WS_XML_READER_INPUT { WS_XML_READER_INPUT_TYPE inputType; } WS_XML_READER_INPUT; typedef struct _WS_XML_WRITER_OUTPUT { WS_XML_WRITER_OUTPUT_TYPE outputType; } WS_XML_WRITER_OUTPUT; typedef struct _WS_XML_READER_BUFFER_INPUT { WS_XML_READER_INPUT input; void *encodedData; ULONG encodedDataSize; } WS_XML_READER_BUFFER_INPUT; typedef struct _WS_XML_WRITER_BUFFER_OUTPUT { WS_XML_WRITER_OUTPUT output; } WS_XML_WRITER_BUFFER_OUTPUT; typedef enum { WS_SHORT_CALLBACK, WS_LONG_CALLBACK } WS_CALLBACK_MODEL; typedef void (CALLBACK *WS_ASYNC_CALLBACK) (HRESULT, WS_CALLBACK_MODEL, void *); typedef struct _WS_ASYNC_CONTEXT { WS_ASYNC_CALLBACK callback; void *callbackState; } WS_ASYNC_CONTEXT; typedef HRESULT (CALLBACK *WS_READ_CALLBACK) (void*, void*, ULONG, ULONG*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_WRITE_CALLBACK) (void*, const WS_BYTES*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef struct _WS_XML_READER_STREAM_INPUT { WS_XML_READER_INPUT input; WS_READ_CALLBACK readCallback; void *readCallbackState; } WS_XML_READER_STREAM_INPUT; typedef enum { WS_ELEMENT_TYPE_MAPPING = 1, WS_ATTRIBUTE_TYPE_MAPPING = 2, WS_ELEMENT_CONTENT_TYPE_MAPPING = 3, WS_ANY_ELEMENT_TYPE_MAPPING = 4 } WS_TYPE_MAPPING; typedef enum { WS_BOOL_TYPE, WS_INT8_TYPE, WS_INT16_TYPE, WS_INT32_TYPE, WS_INT64_TYPE, WS_UINT8_TYPE, WS_UINT16_TYPE, WS_UINT32_TYPE, WS_UINT64_TYPE, WS_FLOAT_TYPE, WS_DOUBLE_TYPE, WS_DECIMAL_TYPE, WS_DATETIME_TYPE, WS_TIMESPAN_TYPE, WS_GUID_TYPE, WS_UNIQUE_ID_TYPE, WS_STRING_TYPE, WS_WSZ_TYPE, WS_BYTES_TYPE, WS_XML_STRING_TYPE, WS_XML_QNAME_TYPE, WS_XML_BUFFER_TYPE, WS_CHAR_ARRAY_TYPE, WS_UTF8_ARRAY_TYPE, WS_BYTE_ARRAY_TYPE, WS_DESCRIPTION_TYPE, WS_STRUCT_TYPE, WS_CUSTOM_TYPE, WS_ENDPOINT_ADDRESS_TYPE, WS_FAULT_TYPE, WS_VOID_TYPE, WS_ENUM_TYPE, WS_DURATION_TYPE, WS_UNION_TYPE, WS_ANY_ATTRIBUTES_TYPE } WS_TYPE; typedef enum { WS_READ_REQUIRED_VALUE = 1, WS_READ_REQUIRED_POINTER = 2, WS_READ_OPTIONAL_POINTER = 3, WS_READ_NILLABLE_POINTER = 4, WS_READ_NILLABLE_VALUE = 5 } WS_READ_OPTION; typedef enum { WS_WRITE_REQUIRED_VALUE = 1, WS_WRITE_REQUIRED_POINTER = 2, WS_WRITE_NILLABLE_VALUE = 3, WS_WRITE_NILLABLE_POINTER = 4 } WS_WRITE_OPTION; typedef struct _WS_BOOL_DESCRIPTION { BOOL value; } WS_BOOL_DESCRIPTION; typedef struct _WS_INT8_DESCRIPTION { char minValue; char maxValue; } WS_INT8_DESCRIPTION; typedef struct _WS_INT16_DESCRIPTION { short minValue; short maxValue; } WS_INT16_DESCRIPTION; typedef struct _WS_INT32_DESCRIPTION { int minValue; int maxValue; } WS_INT32_DESCRIPTION; typedef struct _WS_INT64_DESCRIPTION { __int64 DECLSPEC_ALIGN(8) minValue; __int64 DECLSPEC_ALIGN(8) maxValue; } WS_INT64_DESCRIPTION; typedef struct _WS_UINT8_DESCRIPTION { BYTE minValue; BYTE maxValue; } WS_UINT8_DESCRIPTION; typedef struct _WS_UINT16_DESCRIPTION { USHORT minValue; USHORT maxValue; } WS_UINT16_DESCRIPTION; typedef struct _WS_UINT32_DESCRIPTION { ULONG minValue; ULONG maxValue; } WS_UINT32_DESCRIPTION; typedef struct _WS_UINT64_DESCRIPTION { unsigned __int64 DECLSPEC_ALIGN(8) minValue; unsigned __int64 DECLSPEC_ALIGN(8) maxValue; } WS_UINT64_DESCRIPTION; typedef struct _WS_WSZ_DESCRIPTION { ULONG minCharCount; ULONG maxCharCount; } WS_WSZ_DESCRIPTION; typedef struct _WS_STRING_DESCRIPTION { ULONG minCharCount; ULONG maxCharCount; } WS_STRING_DESCRIPTION; typedef struct _WS_XML_STRING_DESCRIPTION { ULONG minByteCount; ULONG maxByteCount; } WS_XML_STRING_DESCRIPTION; typedef struct _WS_XML_QNAME_DESCRIPTION { ULONG minLocalNameByteCount; ULONG maxLocalNameByteCount; ULONG minNsByteCount; ULONG maxNsByteCount; } WS_XML_QNAME_DESCRIPTION; struct _WS_ENUM_VALUE { int value; WS_XML_STRING *name; }; struct _WS_ENUM_DESCRIPTION { WS_ENUM_VALUE *values; ULONG valueCount; ULONG maxByteCount; ULONG *nameIndices; }; struct _WS_FLOAT_DESCRIPTION { float minValue; float maxValue; }; struct _WS_DOUBLE_DESCRIPTION { double DECLSPEC_ALIGN(8) minValue; double DECLSPEC_ALIGN(8) maxValue; }; struct _WS_GUID_DESCRIPTION { GUID value; }; struct _WS_UNIQUE_ID_DESCRIPTION { ULONG minCharCount; ULONG maxCharCount; }; struct _WS_BYTES_DESCRIPTION { ULONG minByteCount; ULONG maxByteCount; }; typedef enum { WS_TYPE_ATTRIBUTE_FIELD_MAPPING, WS_ATTRIBUTE_FIELD_MAPPING, WS_ELEMENT_FIELD_MAPPING, WS_REPEATING_ELEMENT_FIELD_MAPPING, WS_TEXT_FIELD_MAPPING, WS_NO_FIELD_MAPPING, WS_XML_ATTRIBUTE_FIELD_MAPPING, WS_ELEMENT_CHOICE_FIELD_MAPPING, WS_REPEATING_ELEMENT_CHOICE_FIELD_MAPPING, WS_ANY_ELEMENT_FIELD_MAPPING, WS_REPEATING_ANY_ELEMENT_FIELD_MAPPING, WS_ANY_CONTENT_FIELD_MAPPING, WS_ANY_ATTRIBUTES_FIELD_MAPPING } WS_FIELD_MAPPING; typedef struct _WS_DEFAULT_VALUE { void *value; ULONG valueSize; } WS_DEFAULT_VALUE; typedef struct _WS_ITEM_RANGE { ULONG minItemCount; ULONG maxItemCount; } WS_ITEM_RANGE; enum { WS_FIELD_POINTER = 0x1, WS_FIELD_OPTIONAL = 0x2, WS_FIELD_NILLABLE = 0x4, WS_FIELD_NILLABLE_ITEM = 0x8, WS_FIELD_OTHER_NAMESPACE = 0x10 }; typedef struct _WS_FIELD_DESCRIPTION { WS_FIELD_MAPPING mapping; WS_XML_STRING *localName; WS_XML_STRING *ns; WS_TYPE type; void *typeDescription; ULONG offset; ULONG options; WS_DEFAULT_VALUE *defaultValue; ULONG countOffset; WS_XML_STRING *itemLocalName; WS_XML_STRING *itemNs; WS_ITEM_RANGE *itemRange; } WS_FIELD_DESCRIPTION; enum { WS_STRUCT_ABSTRACT = 0x1, WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT = 0x2, WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES = 0x4 }; typedef struct _WS_STRUCT_DESCRIPTION { ULONG size; ULONG alignment; WS_FIELD_DESCRIPTION **fields; ULONG fieldCount; WS_XML_STRING *typeLocalName; WS_XML_STRING *typeNs; struct _WS_STRUCT_DESCRIPTION *parentType; struct _WS_STRUCT_DESCRIPTION **subTypes; ULONG subTypeCount; ULONG structOptions; } WS_STRUCT_DESCRIPTION; typedef struct _WS_UNION_FIELD_DESCRIPTION { int value; WS_FIELD_DESCRIPTION field; } WS_UNION_FIELD_DESCRIPTION; typedef struct _WS_UNION_DESCRIPTION { ULONG size; ULONG alignment; WS_UNION_FIELD_DESCRIPTION **fields; ULONG fieldCount; ULONG enumOffset; int noneEnumValue; ULONG *valueIndices; } WS_UNION_DESCRIPTION; typedef struct _WS_ATTRIBUTE_DESCRIPTION { WS_XML_STRING *attributeLocalName; WS_XML_STRING *attributeNs; WS_TYPE type; void *typeDescription; } WS_ATTRIBUTE_DESCRIPTION; typedef struct _WS_ELEMENT_DESCRIPTION { WS_XML_STRING *elementLocalName; WS_XML_STRING *elementNs; WS_TYPE type; void *typeDescription; } WS_ELEMENT_DESCRIPTION; typedef struct _WS_STRING { ULONG length; WCHAR *chars; } WS_STRING; typedef struct _WS_UNIQUE_ID { WS_STRING uri; GUID guid; } WS_UNIQUE_ID; typedef enum { WS_XML_NODE_TYPE_ELEMENT = 1, WS_XML_NODE_TYPE_TEXT = 2, WS_XML_NODE_TYPE_END_ELEMENT = 3, WS_XML_NODE_TYPE_COMMENT = 4, WS_XML_NODE_TYPE_CDATA = 6, WS_XML_NODE_TYPE_END_CDATA = 7, WS_XML_NODE_TYPE_EOF = 8, WS_XML_NODE_TYPE_BOF = 9 } WS_XML_NODE_TYPE; typedef struct _WS_XML_NODE { WS_XML_NODE_TYPE nodeType; } WS_XML_NODE; typedef enum { WS_MOVE_TO_ROOT_ELEMENT, WS_MOVE_TO_NEXT_ELEMENT, WS_MOVE_TO_PREVIOUS_ELEMENT, WS_MOVE_TO_CHILD_ELEMENT, WS_MOVE_TO_END_ELEMENT, WS_MOVE_TO_PARENT_ELEMENT, WS_MOVE_TO_NEXT_NODE, WS_MOVE_TO_PREVIOUS_NODE, WS_MOVE_TO_FIRST_NODE, WS_MOVE_TO_BOF, WS_MOVE_TO_EOF, WS_MOVE_TO_CHILD_NODE } WS_MOVE_TO; typedef enum { WS_XML_TEXT_TYPE_UTF8 = 1, WS_XML_TEXT_TYPE_UTF16 = 2, WS_XML_TEXT_TYPE_BASE64 = 3, WS_XML_TEXT_TYPE_BOOL = 4, WS_XML_TEXT_TYPE_INT32 = 5, WS_XML_TEXT_TYPE_INT64 = 6, WS_XML_TEXT_TYPE_UINT64 = 7, WS_XML_TEXT_TYPE_FLOAT = 8, WS_XML_TEXT_TYPE_DOUBLE = 9, WS_XML_TEXT_TYPE_DECIMAL = 10, WS_XML_TEXT_TYPE_GUID = 11, WS_XML_TEXT_TYPE_UNIQUE_ID = 12, WS_XML_TEXT_TYPE_DATETIME = 13, WS_XML_TEXT_TYPE_TIMESPAN = 14, WS_XML_TEXT_TYPE_QNAME = 15, WS_XML_TEXT_TYPE_LIST = 16 } WS_XML_TEXT_TYPE; typedef struct _WS_XML_TEXT { WS_XML_TEXT_TYPE textType; } WS_XML_TEXT; typedef struct _WS_XML_UTF8_TEXT { WS_XML_TEXT text; WS_XML_STRING value; } WS_XML_UTF8_TEXT; typedef struct _WS_XML_UTF16_TEXT { WS_XML_TEXT text; BYTE *bytes; ULONG byteCount; } WS_XML_UTF16_TEXT; typedef struct _WS_XML_BOOL_TEXT { WS_XML_TEXT text; BOOL value; } WS_XML_BOOL_TEXT; typedef struct _WS_XML_INT32_TEXT { WS_XML_TEXT text; __int32 value; } WS_XML_INT32_TEXT; typedef struct _WS_XML_INT64_TEXT { WS_XML_TEXT text; __int64 DECLSPEC_ALIGN(8) value; } WS_XML_INT64_TEXT; typedef struct _WS_XML_UINT64_TEXT { WS_XML_TEXT text; unsigned __int64 DECLSPEC_ALIGN(8) value; } WS_XML_UINT64_TEXT; typedef struct _WS_XML_FLOAT_TEXT { WS_XML_TEXT text; float value; } WS_XML_FLOAT_TEXT; typedef struct _WS_XML_DOUBLE_TEXT { WS_XML_TEXT text; double DECLSPEC_ALIGN(8) value; } WS_XML_DOUBLE_TEXT; typedef struct _WS_XML_GUID_TEXT { WS_XML_TEXT text; GUID value; } WS_XML_GUID_TEXT; typedef struct _WS_XML_UNIQUE_ID_TEXT { WS_XML_TEXT text; GUID value; } WS_XML_UNIQUE_ID_TEXT; typedef struct _WS_XML_QNAME_TEXT { WS_XML_TEXT text; WS_XML_STRING *prefix; WS_XML_STRING *localName; WS_XML_STRING *ns; } WS_XML_QNAME_TEXT; typedef enum { WS_BOOL_VALUE_TYPE, WS_INT8_VALUE_TYPE, WS_INT16_VALUE_TYPE, WS_INT32_VALUE_TYPE, WS_INT64_VALUE_TYPE, WS_UINT8_VALUE_TYPE, WS_UINT16_VALUE_TYPE, WS_UINT32_VALUE_TYPE, WS_UINT64_VALUE_TYPE, WS_FLOAT_VALUE_TYPE, WS_DOUBLE_VALUE_TYPE, WS_DECIMAL_VALUE_TYPE, WS_DATETIME_VALUE_TYPE, WS_TIMESPAN_VALUE_TYPE, WS_GUID_VALUE_TYPE, WS_DURATION_VALUE_TYPE } WS_VALUE_TYPE; typedef struct _WS_XML_ATTRIBUTE { BYTE singleQuote; BYTE isXmlNs; WS_XML_STRING *prefix; WS_XML_STRING *localName; WS_XML_STRING *ns; WS_XML_TEXT *value; } WS_XML_ATTRIBUTE; typedef struct _WS_XML_ELEMENT_NODE { WS_XML_NODE node; WS_XML_STRING *prefix; WS_XML_STRING *localName; WS_XML_STRING *ns; ULONG attributeCount; WS_XML_ATTRIBUTE **attributes; BOOL isEmpty; } WS_XML_ELEMENT_NODE; typedef struct _WS_XML_TEXT_NODE { WS_XML_NODE node; WS_XML_TEXT *text; } WS_XML_TEXT_NODE; typedef struct _WS_XML_COMMENT_NODE { WS_XML_NODE node; WS_XML_STRING value; } WS_XML_COMMENT_NODE; typedef struct _WS_XML_NODE_POSITION { WS_XML_BUFFER *buffer; void *node; } WS_XML_NODE_POSITION; typedef struct _WS_XML_QNAME { WS_XML_STRING localName; WS_XML_STRING ns; } WS_XML_QNAME; typedef enum { WS_SERVICE_PROXY_STATE_CREATED, WS_SERVICE_PROXY_STATE_OPENING, WS_SERVICE_PROXY_STATE_OPEN, WS_SERVICE_PROXY_STATE_CLOSING, WS_SERVICE_PROXY_STATE_CLOSED, WS_SERVICE_PROXY_STATE_FAULTED } WS_SERVICE_PROXY_STATE; typedef enum { WS_PROXY_PROPERTY_CALL_TIMEOUT, WS_PROXY_PROPERTY_MESSAGE_PROPERTIES, WS_PROXY_PROPERTY_MAX_CALL_POOL_SIZE, WS_PROXY_PROPERTY_STATE, WS_PROXY_PROPERTY_MAX_PENDING_CALLS, WS_PROXY_PROPERTY_MAX_CLOSE_TIMEOUT, WS_PROXY_FAULT_LANG_ID } WS_PROXY_PROPERTY_ID; struct _WS_PROXY_PROPERTY { WS_PROXY_PROPERTY_ID id; void *value; ULONG valueSize; }; typedef enum { WS_CHANNEL_TYPE_INPUT = 0x1, WS_CHANNEL_TYPE_OUTPUT = 0x2, WS_CHANNEL_TYPE_SESSION = 0x4, WS_CHANNEL_TYPE_INPUT_SESSION = (WS_CHANNEL_TYPE_INPUT | WS_CHANNEL_TYPE_SESSION), WS_CHANNEL_TYPE_OUTPUT_SESSION = (WS_CHANNEL_TYPE_OUTPUT | WS_CHANNEL_TYPE_SESSION), WS_CHANNEL_TYPE_DUPLEX = (WS_CHANNEL_TYPE_INPUT | WS_CHANNEL_TYPE_OUTPUT), WS_CHANNEL_TYPE_DUPLEX_SESSION = (WS_CHANNEL_TYPE_INPUT | WS_CHANNEL_TYPE_OUTPUT | WS_CHANNEL_TYPE_SESSION), WS_CHANNEL_TYPE_REQUEST = 0x8, WS_CHANNEL_TYPE_REPLY = 0x10 } WS_CHANNEL_TYPE; typedef enum { WS_ENCODING_XML_BINARY_1, WS_ENCODING_XML_BINARY_SESSION_1, WS_ENCODING_XML_MTOM_UTF8, WS_ENCODING_XML_MTOM_UTF16BE, WS_ENCODING_XML_MTOM_UTF16LE, WS_ENCODING_XML_UTF8, WS_ENCODING_XML_UTF16BE, WS_ENCODING_XML_UTF16LE, WS_ENCODING_RAW } WS_ENCODING; typedef enum { WS_CHANNEL_STATE_CREATED, WS_CHANNEL_STATE_OPENING, WS_CHANNEL_STATE_ACCEPTING, WS_CHANNEL_STATE_OPEN, WS_CHANNEL_STATE_FAULTED, WS_CHANNEL_STATE_CLOSING, WS_CHANNEL_STATE_CLOSED } WS_CHANNEL_STATE; typedef enum { WS_CHANNEL_PROPERTY_MAX_BUFFERED_MESSAGE_SIZE = 0, WS_CHANNEL_PROPERTY_MAX_STREAMED_MESSAGE_SIZE = 1, WS_CHANNEL_PROPERTY_MAX_STREAMED_START_SIZE = 2, WS_CHANNEL_PROPERTY_MAX_STREAMED_FLUSH_SIZE = 3, WS_CHANNEL_PROPERTY_ENCODING = 4, WS_CHANNEL_PROPERTY_ENVELOPE_VERSION = 5, WS_CHANNEL_PROPERTY_ADDRESSING_VERSION = 6, WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE = 7, WS_CHANNEL_PROPERTY_STATE = 8, WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL = 9, WS_CHANNEL_PROPERTY_IP_VERSION = 10, WS_CHANNEL_PROPERTY_RESOLVE_TIMEOUT = 11, WS_CHANNEL_PROPERTY_CONNECT_TIMEOUT = 12, WS_CHANNEL_PROPERTY_SEND_TIMEOUT = 13, WS_CHANNEL_PROPERTY_RECEIVE_RESPONSE_TIMEOUT = 14, WS_CHANNEL_PROPERTY_RECEIVE_TIMEOUT = 15, WS_CHANNEL_PROPERTY_CLOSE_TIMEOUT = 16, WS_CHANNEL_PROPERTY_ENABLE_TIMEOUTS = 17, WS_CHANNEL_PROPERTY_TRANSFER_MODE = 18, WS_CHANNEL_PROPERTY_MULTICAST_INTERFACE = 19, WS_CHANNEL_PROPERTY_MULTICAST_HOPS = 20, WS_CHANNEL_PROPERTY_REMOTE_ADDRESS = 21, WS_CHANNEL_PROPERTY_REMOTE_IP_ADDRESS = 22, WS_CHANNEL_PROPERTY_HTTP_CONNECTION_ID = 23, WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_CALLBACKS = 24, WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_PARAMETERS = 25, WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_INSTANCE = 26, WS_CHANNEL_PROPERTY_TRANSPORT_URL = 27, WS_CHANNEL_PROPERTY_NO_DELAY = 28, WS_CHANNEL_PROPERTY_SEND_KEEP_ALIVES = 29, WS_CHANNEL_PROPERTY_KEEP_ALIVE_TIME = 30, WS_CHANNEL_PROPERTY_KEEP_ALIVE_INTERVAL = 31, WS_CHANNEL_PROPERTY_MAX_HTTP_SERVER_CONNECTIONS = 32, WS_CHANNEL_PROPERTY_IS_SESSION_SHUT_DOWN = 33, WS_CHANNEL_PROPERTY_CHANNEL_TYPE = 34, WS_CHANNEL_PROPERTY_TRIM_BUFFERED_MESSAGE_SIZE = 35, WS_CHANNEL_PROPERTY_ENCODER = 36, WS_CHANNEL_PROPERTY_DECODER = 37, WS_CHANNEL_PROPERTY_PROTECTION_LEVEL = 38, WS_CHANNEL_PROPERTY_COOKIE_MODE = 39, WS_CHANNEL_PROPERTY_HTTP_PROXY_SETTING_MODE = 40, WS_CHANNEL_PROPERTY_CUSTOM_HTTP_PROXY = 41, WS_CHANNEL_PROPERTY_HTTP_MESSAGE_MAPPING = 42, WS_CHANNEL_PROPERTY_ENABLE_HTTP_REDIRECT = 43, WS_CHANNEL_PROPERTY_HTTP_REDIRECT_CALLBACK_CONTEXT = 44, WS_CHANNEL_PROPERTY_FAULTS_AS_ERRORS = 45, WS_CHANNEL_PROPERTY_ALLOW_UNSECURED_FAULTS = 46, WS_CHANNEL_PROPERTY_HTTP_SERVER_SPN = 47, WS_CHANNEL_PROPERTY_HTTP_PROXY_SPN = 48, WS_CHANNEL_PROPERTY_MAX_HTTP_REQUEST_HEADERS_BUFFER_SIZE = 49 } WS_CHANNEL_PROPERTY_ID; struct _WS_CHANNEL_PROPERTY { WS_CHANNEL_PROPERTY_ID id; void *value; ULONG valueSize; }; struct _WS_CHANNEL_PROPERTIES { WS_CHANNEL_PROPERTY *properties; ULONG propertyCount; }; typedef enum { WS_HTTP_CHANNEL_BINDING, WS_TCP_CHANNEL_BINDING, WS_UDP_CHANNEL_BINDING, WS_CUSTOM_CHANNEL_BINDING, WS_NAMEDPIPE_CHANNEL_BINDING } WS_CHANNEL_BINDING; typedef enum { WS_SSL_TRANSPORT_SECURITY_BINDING_TYPE, WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TYPE, WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TYPE, WS_USERNAME_MESSAGE_SECURITY_BINDING_TYPE, WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TYPE, WS_XML_TOKEN_MESSAGE_SECURITY_BINDING_TYPE, WS_SAML_MESSAGE_SECURITY_BINDING_TYPE, WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_TYPE, WS_NAMEDPIPE_SSPI_TRANSPORT_SECURITY_BINDING_TYPE } WS_SECURITY_BINDING_TYPE; typedef enum { WS_SECURITY_BINDING_PROPERTY_REQUIRE_SSL_CLIENT_CERT = 1, WS_SECURITY_BINDING_PROPERTY_WINDOWS_INTEGRATED_AUTH_PACKAGE = 2, WS_SECURITY_BINDING_PROPERTY_REQUIRE_SERVER_AUTH = 3, WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS = 4, WS_SECURITY_BINDING_PROPERTY_ALLOWED_IMPERSONATION_LEVEL = 5, WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_SCHEME = 6, WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_TARGET = 7, WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_BASIC_REALM = 8, WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_DIGEST_REALM = 9, WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_DIGEST_DOMAIN = 10, WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_KEY_SIZE = 11, WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_KEY_ENTROPY_MODE = 12, WS_SECURITY_BINDING_PROPERTY_MESSAGE_PROPERTIES = 13, WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_PENDING_CONTEXTS = 14, WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_ACTIVE_CONTEXTS = 15, WS_SECURITY_BINDING_PROPERTY_SECURE_CONVERSATION_VERSION = 16, WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_SUPPORT_RENEW = 17, WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL = 18, WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL = 19, WS_SECURITY_BINDING_PROPERTY_CERT_FAILURES_TO_IGNORE = 20, WS_SECURITY_BINDING_PROPERTY_DISABLE_CERT_REVOCATION_CHECK = 21, WS_SECURITY_BINDING_PROPERTY_DISALLOWED_SECURE_PROTOCOLS = 22, WS_SECURITY_BINDING_PROPERTY_CERTIFICATE_VALIDATION_CALLBACK_CONTEXT = 23 } WS_SECURITY_BINDING_PROPERTY_ID; struct _WS_SECURITY_BINDING_PROPERTY { WS_SECURITY_BINDING_PROPERTY_ID id; void *value; ULONG valueSize; }; struct _WS_SECURITY_BINDING_PROPERTIES { WS_SECURITY_BINDING_PROPERTY *properties; ULONG propertyCount; }; struct _WS_SECURITY_BINDING { WS_SECURITY_BINDING_TYPE bindingType; WS_SECURITY_BINDING_PROPERTY *properties; ULONG propertyCount; }; typedef enum { WS_SECURITY_PROPERTY_TRANSPORT_PROTECTION_LEVEL = 1, WS_SECURITY_PROPERTY_ALGORITHM_SUITE = 2, WS_SECURITY_PROPERTY_ALGORITHM_SUITE_NAME = 3, WS_SECURITY_PROPERTY_MAX_ALLOWED_LATENCY = 4, WS_SECURITY_PROPERTY_TIMESTAMP_VALIDITY_DURATION = 5, WS_SECURITY_PROPERTY_MAX_ALLOWED_CLOCK_SKEW = 6, WS_SECURITY_PROPERTY_TIMESTAMP_USAGE = 7, WS_SECURITY_PROPERTY_SECURITY_HEADER_LAYOUT = 8, WS_SECURITY_PROPERTY_SECURITY_HEADER_VERSION = 9, WS_SECURITY_PROPERTY_EXTENDED_PROTECTION_POLICY = 10, WS_SECURITY_PROPERTY_EXTENDED_PROTECTION_SCENARIO = 11, WS_SECURITY_PROPERTY_SERVICE_IDENTITIES = 12 } WS_SECURITY_PROPERTY_ID; struct _WS_SECURITY_PROPERTY { WS_SECURITY_PROPERTY_ID id; void *value; ULONG valueSize; }; struct _WS_SECURITY_PROPERTIES { WS_SECURITY_PROPERTY *properties; ULONG propertyCount; }; struct _WS_SECURITY_DESCRIPTION { WS_SECURITY_BINDING **securityBindings; ULONG securityBindingCount; WS_SECURITY_PROPERTY *properties; ULONG propertyCount; }; typedef enum { WS_HTTP_BINDING_TEMPLATE_TYPE, WS_HTTP_SSL_BINDING_TEMPLATE_TYPE, WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE_TYPE, WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE_TYPE, WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE_TYPE, WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE, WS_TCP_BINDING_TEMPLATE_TYPE, WS_TCP_SSPI_BINDING_TEMPLATE_TYPE, WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE_TYPE, WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE, WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE, WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE, WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE, WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE } WS_BINDING_TEMPLATE_TYPE; typedef enum { WS_SUBJECT_NAME_CERT_CREDENTIAL_TYPE = 1, WS_THUMBPRINT_CERT_CREDENTIAL_TYPE = 2, WS_CUSTOM_CERT_CREDENTIAL_TYPE = 3 } WS_CERT_CREDENTIAL_TYPE; struct _WS_CERT_CREDENTIAL { WS_CERT_CREDENTIAL_TYPE credentialType; }; struct _WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE { WS_SECURITY_BINDING_PROPERTIES securityBindingProperties; WS_CERT_CREDENTIAL *localCertCredential; }; struct _WS_HTTP_BINDING_TEMPLATE { WS_CHANNEL_PROPERTIES channelProperties; }; struct _WS_HTTP_SSL_BINDING_TEMPLATE { WS_CHANNEL_PROPERTIES channelProperties; WS_SECURITY_PROPERTIES securityProperties; WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE sslTransportSecurityBinding; }; enum { WS_MUST_UNDERSTAND_HEADER_ATTRIBUTE = 0x1, WS_RELAY_HEADER_ATTRIBUTE = 0x2 }; typedef enum { WS_ADDRESSING_VERSION_0_9 = 1, WS_ADDRESSING_VERSION_1_0 = 2, WS_ADDRESSING_VERSION_TRANSPORT = 3 } WS_ADDRESSING_VERSION; typedef enum { WS_ENVELOPE_VERSION_SOAP_1_1 = 1, WS_ENVELOPE_VERSION_SOAP_1_2 = 2, WS_ENVELOPE_VERSION_NONE = 3 } WS_ENVELOPE_VERSION; typedef enum { WS_MESSAGE_PROPERTY_STATE, WS_MESSAGE_PROPERTY_HEAP, WS_MESSAGE_PROPERTY_ENVELOPE_VERSION, WS_MESSAGE_PROPERTY_ADDRESSING_VERSION, WS_MESSAGE_PROPERTY_HEADER_BUFFER, WS_MESSAGE_PROPERTY_HEADER_POSITION, WS_MESSAGE_PROPERTY_BODY_READER, WS_MESSAGE_PROPERTY_BODY_WRITER, WS_MESSAGE_PROPERTY_IS_ADDRESSED, WS_MESSAGE_PROPERTY_HEAP_PROPERTIES, WS_MESSAGE_PROPERTY_XML_READER_PROPERTIES, WS_MESSAGE_PROPERTY_XML_WRITER_PROPERTIES, WS_MESSAGE_PROPERTY_IS_FAULT, WS_MESSAGE_PROPERTY_MAX_PROCESSED_HEADERS, WS_MESSAGE_PROPERTY_USERNAME, WS_MESSAGE_PROPERTY_ENCODED_CERT, WS_MESSAGE_PROPERTY_TRANSPORT_SECURITY_WINDOWS_TOKEN, WS_MESSAGE_PROPERTY_HTTP_HEADER_AUTH_WINDOWS_TOKEN, WS_MESSAGE_PROPERTY_MESSAGE_SECURITY_WINDOWS_TOKEN, WS_MESSAGE_PROPERTY_SAML_ASSERTION, WS_MESSAGE_PROPERTY_SECURITY_CONTEXT, WS_MESSAGE_PROPERTY_PROTECTION_LEVEL } WS_MESSAGE_PROPERTY_ID; struct _WS_MESSAGE_PROPERTY { WS_MESSAGE_PROPERTY_ID id; void *value; ULONG valueSize; }; struct _WS_MESSAGE_PROPERTIES { WS_MESSAGE_PROPERTY *properties; ULONG propertyCount; }; typedef enum { WS_MESSAGE_STATE_EMPTY = 1, WS_MESSAGE_STATE_INITIALIZED = 2, WS_MESSAGE_STATE_READING = 3, WS_MESSAGE_STATE_WRITING = 4, WS_MESSAGE_STATE_DONE = 5 } WS_MESSAGE_STATE; typedef enum { WS_BLANK_MESSAGE, WS_DUPLICATE_MESSAGE, WS_REQUEST_MESSAGE, WS_REPLY_MESSAGE, WS_FAULT_MESSAGE } WS_MESSAGE_INITIALIZATION; typedef enum { WS_ACTION_HEADER = 1, WS_TO_HEADER = 2, WS_MESSAGE_ID_HEADER = 3, WS_RELATES_TO_HEADER = 4, WS_FROM_HEADER = 5, WS_REPLY_TO_HEADER = 6, WS_FAULT_TO_HEADER = 7 } WS_HEADER_TYPE; typedef enum { WS_REPEATING_HEADER = 1, WS_SINGLETON_HEADER = 2 } WS_REPEATING_HEADER_OPTION; typedef enum { WS_DNS_ENDPOINT_IDENTITY_TYPE = 1, WS_UPN_ENDPOINT_IDENTITY_TYPE = 2, WS_SPN_ENDPOINT_IDENTITY_TYPE = 3, WS_RSA_ENDPOINT_IDENTITY_TYPE = 4, WS_CERT_ENDPOINT_IDENTITY_TYPE = 5, WS_UNKNOWN_ENDPOINT_IDENTITY_TYPE = 6 } WS_ENDPOINT_IDENTITY_TYPE; struct _WS_ENDPOINT_IDENTITY { WS_ENDPOINT_IDENTITY_TYPE identityType; }; struct _WS_ENDPOINT_ADDRESS { WS_STRING url; WS_XML_BUFFER *headers; WS_XML_BUFFER *extensions; WS_ENDPOINT_IDENTITY *identity; }; struct _WS_HTTP_POLICY_DESCRIPTION { WS_CHANNEL_PROPERTIES channelProperties; }; struct _WS_MESSAGE_DESCRIPTION { WS_XML_STRING *action; WS_ELEMENT_DESCRIPTION *bodyElementDescription; }; typedef enum { WS_PARAMETER_TYPE_NORMAL, WS_PARAMETER_TYPE_ARRAY, WS_PARAMETER_TYPE_ARRAY_COUNT, WS_PARAMETER_TYPE_MESSAGES } WS_PARAMETER_TYPE; struct _WS_PARAMETER_DESCRIPTION { WS_PARAMETER_TYPE parameterType; USHORT inputMessageIndex; USHORT outputMessageIndex; }; typedef HRESULT (CALLBACK *WS_SERVICE_STUB_CALLBACK)( const WS_OPERATION_CONTEXT *context, void *frame, const void *callback, const WS_ASYNC_CONTEXT *asyncContext, WS_ERROR *error ); typedef enum { WS_NON_RPC_LITERAL_OPERATION, WS_RPC_LITERAL_OPERATION } WS_OPERATION_STYLE; struct _WS_OPERATION_DESCRIPTION { ULONG versionInfo; WS_MESSAGE_DESCRIPTION *inputMessageDescription; WS_MESSAGE_DESCRIPTION *outputMessageDescription; ULONG inputMessageOptions; ULONG outputMessageOptions; USHORT parameterCount; WS_PARAMETER_DESCRIPTION *parameterDescription; WS_SERVICE_STUB_CALLBACK stubCallback; WS_OPERATION_STYLE style; }; typedef enum { WS_CALL_PROPERTY_CHECK_MUST_UNDERSTAND, WS_CALL_PROPERTY_SEND_MESSAGE_CONTEXT, WS_CALL_PROPERTY_RECEIVE_MESSAGE_CONTEXT, WS_CALL_PROPERTY_CALL_ID } WS_CALL_PROPERTY_ID; struct _WS_CALL_PROPERTY { WS_CALL_PROPERTY_ID id; void *value; ULONG valueSize; }; typedef enum { WS_DATETIME_FORMAT_UTC, WS_DATETIME_FORMAT_LOCAL, WS_DATETIME_FORMAT_NONE } WS_DATETIME_FORMAT; struct _WS_DATETIME { unsigned __int64 DECLSPEC_ALIGN(8) ticks; WS_DATETIME_FORMAT format; }; struct _WS_DATETIME_DESCRIPTION { WS_DATETIME minValue; WS_DATETIME maxValue; }; struct _WS_XML_DATETIME_TEXT { WS_XML_TEXT text; WS_DATETIME value; }; struct _WS_XML_BASE64_TEXT { WS_XML_TEXT text; BYTE *bytes; ULONG length; }; typedef enum { WS_URL_HTTP_SCHEME_TYPE, WS_URL_HTTPS_SCHEME_TYPE, WS_URL_NETTCP_SCHEME_TYPE, WS_URL_SOAPUDP_SCHEME_TYPE, WS_URL_NETPIPE_SCHEME_TYPE } WS_URL_SCHEME_TYPE; enum { WS_URL_FLAGS_ALLOW_HOST_WILDCARDS = 0x1, WS_URL_FLAGS_NO_PATH_COLLAPSE = 0x2, WS_URL_FLAGS_ZERO_TERMINATE = 0x4 }; struct _WS_URL { WS_URL_SCHEME_TYPE scheme; }; struct _WS_HTTP_URL { WS_URL url; WS_STRING host; USHORT port; WS_STRING portAsString; WS_STRING path; WS_STRING query; WS_STRING fragment; }; struct _WS_HTTPS_URL { WS_URL url; WS_STRING host; USHORT port; WS_STRING portAsString; WS_STRING path; WS_STRING query; WS_STRING fragment; }; struct _WS_NETTCP_URL { WS_URL url; WS_STRING host; USHORT port; WS_STRING portAsString; WS_STRING path; WS_STRING query; WS_STRING fragment; }; struct _WS_SOAPUDP_URL { WS_URL url; WS_STRING host; USHORT port; WS_STRING portAsString; WS_STRING path; WS_STRING query; WS_STRING fragment; }; struct _WS_NETPIPE_URL { WS_URL url; WS_STRING host; USHORT port; WS_STRING portAsString; WS_STRING path; WS_STRING query; WS_STRING fragment; }; typedef enum { WS_IP_VERSION_4 = 1, WS_IP_VERSION_6 = 2, WS_IP_VERSION_AUTO = 3 } WS_IP_VERSION; typedef enum { WS_BUFFERED_TRANSFER_MODE = 0x0, WS_STREAMED_INPUT_TRANSFER_MODE = 0x1, WS_STREAMED_OUTPUT_TRANSFER_MODE = 0x2, WS_STREAMED_TRANSFER_MODE = (WS_STREAMED_INPUT_TRANSFER_MODE|WS_STREAMED_OUTPUT_TRANSFER_MODE) } WS_TRANSFER_MODE; typedef HRESULT (CALLBACK *WS_CREATE_CHANNEL_CALLBACK) (WS_CHANNEL_TYPE, const void*, ULONG, void**, WS_ERROR*); typedef void (CALLBACK *WS_FREE_CHANNEL_CALLBACK) (void*); typedef HRESULT (CALLBACK *WS_RESET_CHANNEL_CALLBACK) (void*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_OPEN_CHANNEL_CALLBACK) (void*, const WS_ENDPOINT_ADDRESS*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_CLOSE_CHANNEL_CALLBACK) (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_ABORT_CHANNEL_CALLBACK) (void*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_GET_CHANNEL_PROPERTY_CALLBACK) (void*, WS_CHANNEL_PROPERTY_ID, void*, ULONG, WS_ERROR*); typedef HRESULT (CALLBACK *WS_SET_CHANNEL_PROPERTY_CALLBACK) (void*, WS_CHANNEL_PROPERTY_ID, const void*, ULONG, WS_ERROR*); typedef HRESULT (CALLBACK *WS_WRITE_MESSAGE_START_CALLBACK) (void*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_WRITE_MESSAGE_END_CALLBACK) (void*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_READ_MESSAGE_START_CALLBACK) (void*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_READ_MESSAGE_END_CALLBACK) (void*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_ABANDON_MESSAGE_CALLBACK) (void*, WS_MESSAGE*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK) (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*); struct _WS_CUSTOM_CHANNEL_CALLBACKS { WS_CREATE_CHANNEL_CALLBACK createChannelCallback; WS_FREE_CHANNEL_CALLBACK freeChannelCallback; WS_RESET_CHANNEL_CALLBACK resetChannelCallback; WS_OPEN_CHANNEL_CALLBACK openChannelCallback; WS_CLOSE_CHANNEL_CALLBACK closeChannelCallback; WS_ABORT_CHANNEL_CALLBACK abortChannelCallback; WS_GET_CHANNEL_PROPERTY_CALLBACK getChannelPropertyCallback; WS_SET_CHANNEL_PROPERTY_CALLBACK setChannelPropertyCallback; WS_WRITE_MESSAGE_START_CALLBACK writeMessageStartCallback; WS_WRITE_MESSAGE_END_CALLBACK writeMessageEndCallback; WS_READ_MESSAGE_START_CALLBACK readMessageStartCallback; WS_READ_MESSAGE_END_CALLBACK readMessageEndCallback; WS_ABANDON_MESSAGE_CALLBACK abandonMessageCallback; WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK shutdownSessionChannelCallback; }; typedef HRESULT (CALLBACK *WS_CREATE_ENCODER_CALLBACK) (void*, WS_WRITE_CALLBACK, void*, void**, WS_ERROR*); typedef HRESULT (CALLBACK *WS_ENCODER_GET_CONTENT_TYPE_CALLBACK) (void*, const WS_STRING*, WS_STRING*, WS_STRING*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_ENCODER_START_CALLBACK) (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_ENCODER_ENCODE_CALLBACK) (void*, const WS_BYTES*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_ENCODER_END_CALLBACK) (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef void (CALLBACK *WS_FREE_ENCODER_CALLBACK) (void*); struct _WS_CHANNEL_ENCODER { void *createContext; WS_CREATE_ENCODER_CALLBACK createEncoderCallback; WS_ENCODER_GET_CONTENT_TYPE_CALLBACK encoderGetContentTypeCallback; WS_ENCODER_START_CALLBACK encoderStartCallback; WS_ENCODER_ENCODE_CALLBACK encoderEncodeCallback; WS_ENCODER_END_CALLBACK encoderEndCallback; WS_FREE_ENCODER_CALLBACK freeEncoderCallback; }; typedef HRESULT (CALLBACK *WS_CREATE_DECODER_CALLBACK) (void*, WS_READ_CALLBACK, void*, void**, WS_ERROR*); typedef HRESULT (CALLBACK *WS_DECODER_GET_CONTENT_TYPE_CALLBACK) (void*, const WS_STRING*, const WS_STRING*, WS_STRING*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_DECODER_START_CALLBACK) (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_DECODER_DECODE_CALLBACK) (void*, void*, ULONG, ULONG*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_DECODER_END_CALLBACK) (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef void (CALLBACK *WS_FREE_DECODER_CALLBACK) (void*); struct _WS_CHANNEL_DECODER { void *createContext; WS_CREATE_DECODER_CALLBACK createDecoderCallback; WS_DECODER_GET_CONTENT_TYPE_CALLBACK decoderGetContentTypeCallback; WS_DECODER_START_CALLBACK decoderStartCallback; WS_DECODER_DECODE_CALLBACK decoderDecodeCallback; WS_DECODER_END_CALLBACK decoderEndCallback; WS_FREE_DECODER_CALLBACK freeDecoderCallback; }; typedef enum { WS_PROTECTION_LEVEL_NONE = 1, WS_PROTECTION_LEVEL_SIGN = 2, WS_PROTECTION_LEVEL_SIGN_AND_ENCRYPT = 3 } WS_PROTECTION_LEVEL; typedef enum { WS_MANUAL_COOKIE_MODE = 1, WS_AUTO_COOKIE_MODE = 2 } WS_COOKIE_MODE; typedef enum { WS_HTTP_PROXY_SETTING_MODE_AUTO = 0x1, WS_HTTP_PROXY_SETTING_MODE_NONE = 0x2, WS_HTTP_PROXY_SETTING_MODE_CUSTOM = 0x3 } WS_HTTP_PROXY_SETTING_MODE; struct _WS_CUSTOM_HTTP_PROXY { WS_STRING servers; WS_STRING bypass; }; struct _WS_HTTP_HEADER_MAPPING { WS_XML_STRING headerName; ULONG headerMappingOptions; }; struct _WS_HTTP_MESSAGE_MAPPING { ULONG requestMappingOptions; ULONG responseMappingOptions; WS_HTTP_HEADER_MAPPING **requestHeaderMappings; ULONG requestHeaderMappingCount; WS_HTTP_HEADER_MAPPING **responseHeaderMappings; ULONG responseHeaderMappingCount; }; typedef HRESULT (CALLBACK *WS_HTTP_REDIRECT_CALLBACK) (void*, const WS_STRING*, const WS_STRING*); struct _WS_HTTP_REDIRECT_CALLBACK_CONTEXT { WS_HTTP_REDIRECT_CALLBACK callback; void *state; }; typedef enum { WS_RECEIVE_REQUIRED_MESSAGE = 1, WS_RECEIVE_OPTIONAL_MESSAGE = 2 } WS_RECEIVE_OPTION; typedef void (CALLBACK *WS_MESSAGE_DONE_CALLBACK) (void*); typedef HRESULT (CALLBACK *WS_PROXY_MESSAGE_CALLBACK) (WS_MESSAGE*, WS_HEAP*, void*, WS_ERROR*); struct _WS_PROXY_MESSAGE_CALLBACK_CONTEXT { WS_PROXY_MESSAGE_CALLBACK callback; void *state; }; typedef enum { WS_LISTENER_STATE_CREATED, WS_LISTENER_STATE_OPENING, WS_LISTENER_STATE_OPEN, WS_LISTENER_STATE_FAULTED, WS_LISTENER_STATE_CLOSING, WS_LISTENER_STATE_CLOSED } WS_LISTENER_STATE; typedef enum { WS_LISTENER_PROPERTY_LISTEN_BACKLOG, WS_LISTENER_PROPERTY_IP_VERSION, WS_LISTENER_PROPERTY_STATE, WS_LISTENER_PROPERTY_ASYNC_CALLBACK_MODEL, WS_LISTENER_PROPERTY_CHANNEL_TYPE, WS_LISTENER_PROPERTY_CHANNEL_BINDING, WS_LISTENER_PROPERTY_CONNECT_TIMEOUT, WS_LISTENER_PROPERTY_IS_MULTICAST, WS_LISTENER_PROPERTY_MULTICAST_INTERFACES, WS_LISTENER_PROPERTY_MULTICAST_LOOPBACK, WS_LISTENER_PROPERTY_CLOSE_TIMEOUT, WS_LISTENER_PROPERTY_TO_HEADER_MATCHING_OPTIONS, WS_LISTENER_PROPERTY_TRANSPORT_URL_MATCHING_OPTIONS, WS_LISTENER_PROPERTY_CUSTOM_LISTENER_CALLBACKS, WS_LISTENER_PROPERTY_CUSTOM_LISTENER_PARAMETERS, WS_LISTENER_PROPERTY_CUSTOM_LISTENER_INSTANCE, WS_LISTENER_PROPERTY_DISALLOWED_USER_AGENT } WS_LISTENER_PROPERTY_ID; struct _WS_LISTENER_PROPERTY { WS_LISTENER_PROPERTY_ID id; void *value; ULONG valueSize; }; struct _WS_DISALLOWED_USER_AGENT_SUBSTRINGS { ULONG subStringCount; WS_STRING **subStrings; }; struct _WS_LISTENER_PROPERTIES { WS_LISTENER_PROPERTY *properties; ULONG propertyCount; }; typedef HRESULT (CALLBACK *WS_CREATE_LISTENER_CALLBACK) (WS_CHANNEL_TYPE, const void*, ULONG, void**, WS_ERROR*); typedef void (CALLBACK *WS_FREE_LISTENER_CALLBACK) (void*); typedef HRESULT (CALLBACK *WS_RESET_LISTENER_CALLBACK) (void*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_OPEN_LISTENER_CALLBACK) (void*, const WS_STRING*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_CLOSE_LISTENER_CALLBACK) (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_ABORT_LISTENER_CALLBACK) (void*, WS_ERROR*); typedef HRESULT (CALLBACK *WS_GET_LISTENER_PROPERTY_CALLBACK) (void*, WS_LISTENER_PROPERTY_ID, void*, ULONG, WS_ERROR*); typedef HRESULT (CALLBACK *WS_SET_LISTENER_PROPERTY_CALLBACK) (void*, WS_LISTENER_PROPERTY_ID, const void*, ULONG, WS_ERROR*); typedef HRESULT (CALLBACK *WS_CREATE_CHANNEL_FOR_LISTENER_CALLBACK) (void*, const void*, ULONG, void**, WS_ERROR*); typedef HRESULT (CALLBACK *WS_ACCEPT_CHANNEL_CALLBACK) (void*, void*, const WS_ASYNC_CONTEXT*, WS_ERROR*); struct _WS_CUSTOM_LISTENER_CALLBACKS { WS_CREATE_LISTENER_CALLBACK createListenerCallback; WS_FREE_LISTENER_CALLBACK freeListenerCallback; WS_RESET_LISTENER_CALLBACK resetListenerCallback; WS_OPEN_LISTENER_CALLBACK openListenerCallback; WS_CLOSE_LISTENER_CALLBACK closeListenerCallback; WS_ABORT_LISTENER_CALLBACK abortListenerCallback; WS_GET_LISTENER_PROPERTY_CALLBACK getListenerPropertyCallback; WS_SET_LISTENER_PROPERTY_CALLBACK setListenerPropertyCallback; WS_CREATE_CHANNEL_FOR_LISTENER_CALLBACK createChannelForListenerCallback; WS_ACCEPT_CHANNEL_CALLBACK acceptChannelCallback; }; enum { WS_MATCH_URL_DNS_HOST = 0x1, WS_MATCH_URL_DNS_FULLY_QUALIFIED_HOST = 0x2, WS_MATCH_URL_NETBIOS_HOST = 0x4, WS_MATCH_URL_LOCAL_HOST = 0x8, WS_MATCH_URL_HOST_ADDRESSES = 0x10, WS_MATCH_URL_THIS_HOST = (WS_MATCH_URL_DNS_HOST | WS_MATCH_URL_DNS_FULLY_QUALIFIED_HOST | WS_MATCH_URL_NETBIOS_HOST | WS_MATCH_URL_LOCAL_HOST | WS_MATCH_URL_HOST_ADDRESSES), WS_MATCH_URL_PORT = 0x20, WS_MATCH_URL_EXACT_PATH = 0x40, WS_MATCH_URL_PREFIX_PATH = 0x80, WS_MATCH_URL_NO_QUERY = 0x100 }; HRESULT WINAPI WsAbortServiceProxy(WS_SERVICE_PROXY*, WS_ERROR*); HRESULT WINAPI WsAcceptChannel(WS_LISTENER*, WS_CHANNEL*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsAddCustomHeader(WS_MESSAGE*, const WS_ELEMENT_DESCRIPTION*, WS_WRITE_OPTION, const void*, ULONG, ULONG, WS_ERROR*); HRESULT WINAPI WsAddMappedHeader(WS_MESSAGE*, const WS_XML_STRING*, WS_TYPE, WS_WRITE_OPTION, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsAddressMessage(WS_MESSAGE*, const WS_ENDPOINT_ADDRESS*, WS_ERROR*); HRESULT WINAPI WsAlloc(WS_HEAP*, SIZE_T, void**, WS_ERROR*); HRESULT WINAPI WsCall(WS_SERVICE_PROXY*, const WS_OPERATION_DESCRIPTION*, const void**, WS_HEAP*, const WS_CALL_PROPERTY*, const ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsCloseChannel(WS_CHANNEL*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsCloseListener(WS_LISTENER*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsCloseServiceProxy(WS_SERVICE_PROXY*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsCombineUrl(const WS_STRING*, const WS_STRING*, ULONG, WS_HEAP*, WS_STRING*, WS_ERROR*); HRESULT WINAPI WsCopyNode(WS_XML_WRITER*, WS_XML_READER*, WS_ERROR*); HRESULT WINAPI WsCreateChannel(WS_CHANNEL_TYPE, WS_CHANNEL_BINDING, const WS_CHANNEL_PROPERTY*, ULONG, const WS_SECURITY_DESCRIPTION*, WS_CHANNEL**, WS_ERROR*); HRESULT WINAPI WsCreateChannelForListener(WS_LISTENER*, const WS_CHANNEL_PROPERTY*, ULONG, WS_CHANNEL**, WS_ERROR*); HRESULT WINAPI WsCreateError(const WS_ERROR_PROPERTY*, ULONG, WS_ERROR**); HRESULT WINAPI WsCreateHeap(SIZE_T, SIZE_T, const WS_HEAP_PROPERTY*, ULONG, WS_HEAP**, WS_ERROR*); HRESULT WINAPI WsCreateListener(WS_CHANNEL_TYPE, WS_CHANNEL_BINDING, const WS_LISTENER_PROPERTY*, ULONG, const WS_SECURITY_DESCRIPTION*, WS_LISTENER**, WS_ERROR*); HRESULT WINAPI WsCreateMessage(WS_ENVELOPE_VERSION, WS_ADDRESSING_VERSION, const WS_MESSAGE_PROPERTY*, ULONG, WS_MESSAGE**, WS_ERROR*); HRESULT WINAPI WsCreateMessageForChannel(WS_CHANNEL*, const WS_MESSAGE_PROPERTY*, ULONG, WS_MESSAGE**, WS_ERROR*); HRESULT WINAPI WsCreateReader(const WS_XML_READER_PROPERTY*, ULONG, WS_XML_READER**, WS_ERROR*); HRESULT WINAPI WsCreateServiceProxy(const WS_CHANNEL_TYPE, const WS_CHANNEL_BINDING, const WS_SECURITY_DESCRIPTION*, const WS_PROXY_PROPERTY*, const ULONG, const WS_CHANNEL_PROPERTY*, const ULONG, WS_SERVICE_PROXY**, WS_ERROR*); HRESULT WINAPI WsCreateServiceProxyFromTemplate(WS_CHANNEL_TYPE, const WS_PROXY_PROPERTY*, const ULONG, WS_BINDING_TEMPLATE_TYPE, void*, ULONG, const void*, ULONG, WS_SERVICE_PROXY**, WS_ERROR*); HRESULT WINAPI WsCreateWriter(const WS_XML_WRITER_PROPERTY*, ULONG, WS_XML_WRITER**, WS_ERROR*); HRESULT WINAPI WsCreateXmlBuffer(WS_HEAP*, const WS_XML_BUFFER_PROPERTY*, ULONG, WS_XML_BUFFER**, WS_ERROR*); HRESULT WINAPI WsDateTimeToFileTime(const WS_DATETIME*, FILETIME*, WS_ERROR*); HRESULT WINAPI WsDecodeUrl(const WS_STRING*, ULONG, WS_HEAP*, WS_URL**, WS_ERROR*); HRESULT WINAPI WsEncodeUrl(const WS_URL*, ULONG, WS_HEAP*, WS_STRING*, WS_ERROR*); HRESULT WINAPI WsFileTimeToDateTime(const FILETIME*, WS_DATETIME*, WS_ERROR*); HRESULT WINAPI WsFillReader(WS_XML_READER*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsFindAttribute(WS_XML_READER*, const WS_XML_STRING*, const WS_XML_STRING*, BOOL, ULONG*, WS_ERROR*); void WINAPI WsFreeChannel(WS_CHANNEL*); void WINAPI WsFreeError(WS_ERROR*); void WINAPI WsFreeHeap(WS_HEAP*); void WINAPI WsFreeListener(WS_LISTENER*); void WINAPI WsFreeMessage(WS_MESSAGE*); void WINAPI WsFreeReader(WS_XML_READER*); void WINAPI WsFreeServiceProxy(WS_SERVICE_PROXY*); void WINAPI WsFreeWriter(WS_XML_WRITER*); HRESULT WINAPI WsGetChannelProperty(WS_CHANNEL*, WS_CHANNEL_PROPERTY_ID, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetCustomHeader(WS_MESSAGE*, const WS_ELEMENT_DESCRIPTION*, WS_REPEATING_HEADER_OPTION, ULONG, WS_READ_OPTION, WS_HEAP*, void*, ULONG, ULONG*, WS_ERROR*); HRESULT WINAPI WsGetDictionary(WS_ENCODING, WS_XML_DICTIONARY**, WS_ERROR*); HRESULT WINAPI WsGetErrorProperty(WS_ERROR*, WS_ERROR_PROPERTY_ID, void*, ULONG); HRESULT WINAPI WsGetErrorString(WS_ERROR*, ULONG, WS_STRING*); HRESULT WINAPI WsGetHeader(WS_MESSAGE*, WS_HEADER_TYPE, WS_TYPE, WS_READ_OPTION, WS_HEAP*, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetHeapProperty(WS_HEAP*, WS_HEAP_PROPERTY_ID, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetListenerProperty(WS_LISTENER*, WS_LISTENER_PROPERTY_ID, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetMappedHeader(WS_MESSAGE*, const WS_XML_STRING*, WS_REPEATING_HEADER_OPTION, ULONG, WS_TYPE, WS_READ_OPTION, WS_HEAP*, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetMessageProperty(WS_MESSAGE*, WS_MESSAGE_PROPERTY_ID, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetNamespaceFromPrefix(WS_XML_READER*, const WS_XML_STRING*, BOOL, const WS_XML_STRING**, WS_ERROR*); HRESULT WINAPI WsGetPrefixFromNamespace(WS_XML_WRITER*, const WS_XML_STRING*, BOOL, const WS_XML_STRING**, WS_ERROR*); HRESULT WINAPI WsGetReaderNode(WS_XML_READER*, const WS_XML_NODE**, WS_ERROR*); HRESULT WINAPI WsGetReaderPosition(WS_XML_READER*, WS_XML_NODE_POSITION*, WS_ERROR*); HRESULT WINAPI WsGetReaderProperty(WS_XML_READER*, WS_XML_READER_PROPERTY_ID, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetServiceProxyProperty(WS_SERVICE_PROXY*, const WS_PROXY_PROPERTY_ID, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetWriterPosition(WS_XML_WRITER*, WS_XML_NODE_POSITION*, WS_ERROR*); HRESULT WINAPI WsGetWriterProperty(WS_XML_WRITER*, WS_XML_WRITER_PROPERTY_ID, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsGetXmlAttribute(WS_XML_READER*, const WS_XML_STRING*, WS_HEAP*, WCHAR**, ULONG*, WS_ERROR*); HRESULT WINAPI WsInitializeMessage(WS_MESSAGE*, WS_MESSAGE_INITIALIZATION, WS_MESSAGE*, WS_ERROR*); HRESULT WINAPI WsMoveReader(WS_XML_READER*, WS_MOVE_TO, BOOL*, WS_ERROR*); HRESULT WINAPI WsMoveWriter(WS_XML_WRITER*, WS_MOVE_TO, BOOL*, WS_ERROR*); HRESULT WINAPI WsOpenChannel(WS_CHANNEL*, const WS_ENDPOINT_ADDRESS*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsOpenListener(WS_LISTENER*, WS_STRING*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsOpenServiceProxy(WS_SERVICE_PROXY*, const WS_ENDPOINT_ADDRESS*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsReadAttribute(WS_XML_READER*, const WS_ATTRIBUTE_DESCRIPTION*, WS_READ_OPTION, WS_HEAP*, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsReadBody(WS_MESSAGE*, const WS_ELEMENT_DESCRIPTION*, WS_READ_OPTION, WS_HEAP*, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsReadBytes(WS_XML_READER*, void*, ULONG, ULONG*, WS_ERROR*); HRESULT WINAPI WsReadChars(WS_XML_READER*, WCHAR*, ULONG, ULONG*, WS_ERROR*); HRESULT WINAPI WsReadCharsUtf8(WS_XML_READER*, BYTE*, ULONG, ULONG*, WS_ERROR*); HRESULT WINAPI WsReadElement(WS_XML_READER*, const WS_ELEMENT_DESCRIPTION*, WS_READ_OPTION, WS_HEAP*, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsReadEndAttribute(WS_XML_READER*, WS_ERROR*); HRESULT WINAPI WsReadEndElement(WS_XML_READER*, WS_ERROR*); HRESULT WINAPI WsReadEnvelopeEnd(WS_MESSAGE*, WS_ERROR*); HRESULT WINAPI WsReadEnvelopeStart(WS_MESSAGE*, WS_XML_READER*, WS_MESSAGE_DONE_CALLBACK, void*, WS_ERROR*); HRESULT WINAPI WsReadMessageEnd(WS_CHANNEL*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsReadMessageStart(WS_CHANNEL*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsReadNode(WS_XML_READER*, WS_ERROR*); HRESULT WINAPI WsReadQualifiedName(WS_XML_READER*, WS_HEAP*, WS_XML_STRING*, WS_XML_STRING*, WS_XML_STRING*, WS_ERROR*); HRESULT WINAPI WsReadStartAttribute(WS_XML_READER*, ULONG, WS_ERROR*); HRESULT WINAPI WsReadStartElement(WS_XML_READER*, WS_ERROR*); HRESULT WINAPI WsReadToStartElement(WS_XML_READER*, const WS_XML_STRING*, const WS_XML_STRING*, BOOL*, WS_ERROR*); HRESULT WINAPI WsReadType(WS_XML_READER*, WS_TYPE_MAPPING, WS_TYPE, const void*, WS_READ_OPTION, WS_HEAP*, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsReadValue(WS_XML_READER*, WS_VALUE_TYPE, void*, ULONG, WS_ERROR*); HRESULT WINAPI WsReadXmlBuffer(WS_XML_READER*, WS_HEAP*, WS_XML_BUFFER**, WS_ERROR*); HRESULT WINAPI WsReceiveMessage(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION**, ULONG, WS_RECEIVE_OPTION, WS_READ_OPTION, WS_HEAP*, void*, ULONG, ULONG*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsRemoveCustomHeader(WS_MESSAGE*, const WS_XML_STRING*, const WS_XML_STRING*, WS_ERROR*); HRESULT WINAPI WsRemoveHeader(WS_MESSAGE*, WS_HEADER_TYPE, WS_ERROR*); HRESULT WINAPI WsRemoveMappedHeader(WS_MESSAGE*, const WS_XML_STRING*, WS_ERROR*); HRESULT WINAPI WsRemoveNode(const WS_XML_NODE_POSITION*, WS_ERROR*); HRESULT WINAPI WsResetChannel(WS_CHANNEL*, WS_ERROR*); HRESULT WINAPI WsResetMessage(WS_MESSAGE*, WS_ERROR*); HRESULT WINAPI WsResetError(WS_ERROR*); HRESULT WINAPI WsResetHeap(WS_HEAP*, WS_ERROR*); HRESULT WINAPI WsResetListener(WS_LISTENER*, WS_ERROR*); HRESULT WINAPI WsResetMessage(WS_MESSAGE*, WS_ERROR*); HRESULT WINAPI WsResetServiceProxy(WS_SERVICE_PROXY*, WS_ERROR*); HRESULT WINAPI WsRequestReply(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*, WS_WRITE_OPTION, const void*, ULONG, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*, WS_READ_OPTION, WS_HEAP*, void*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsSendMessage(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*, WS_WRITE_OPTION, const void*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsSendReplyMessage(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*, WS_WRITE_OPTION, const void*, ULONG, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsSetChannelProperty(WS_CHANNEL*, WS_CHANNEL_PROPERTY_ID, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsSetErrorProperty(WS_ERROR*, WS_ERROR_PROPERTY_ID, const void*, ULONG); HRESULT WINAPI WsSetHeader(WS_MESSAGE*, WS_HEADER_TYPE, WS_TYPE, WS_WRITE_OPTION, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsSetInput(WS_XML_READER*, const WS_XML_READER_ENCODING*, const WS_XML_READER_INPUT*, const WS_XML_READER_PROPERTY*, ULONG, WS_ERROR*); HRESULT WINAPI WsSetInputToBuffer(WS_XML_READER*, WS_XML_BUFFER*, const WS_XML_READER_PROPERTY*, ULONG, WS_ERROR*); HRESULT WINAPI WsSetListenerProperty(WS_LISTENER*, WS_LISTENER_PROPERTY_ID, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsSetMessageProperty(WS_MESSAGE*, WS_MESSAGE_PROPERTY_ID, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsSetOutput(WS_XML_WRITER*, const WS_XML_WRITER_ENCODING*, const WS_XML_WRITER_OUTPUT*, const WS_XML_WRITER_PROPERTY*, ULONG, WS_ERROR*); HRESULT WINAPI WsSetOutputToBuffer(WS_XML_WRITER*, WS_XML_BUFFER*, const WS_XML_WRITER_PROPERTY*, ULONG, WS_ERROR*); HRESULT WINAPI WsSetReaderPosition(WS_XML_READER*, const WS_XML_NODE_POSITION*, WS_ERROR*); HRESULT WINAPI WsSetWriterPosition(WS_XML_WRITER*, const WS_XML_NODE_POSITION*, WS_ERROR*); HRESULT WINAPI WsShutdownSessionChannel(WS_CHANNEL*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsSkipNode(WS_XML_READER*, WS_ERROR*); HRESULT WINAPI WsWriteArray(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*, WS_VALUE_TYPE, const void*, ULONG, ULONG, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteAttribute(WS_XML_WRITER*, const WS_ATTRIBUTE_DESCRIPTION*, WS_WRITE_OPTION, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteBody(WS_MESSAGE*, const WS_ELEMENT_DESCRIPTION*, WS_WRITE_OPTION, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteBytes(WS_XML_WRITER*, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteChars(WS_XML_WRITER*, const WCHAR*, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteCharsUtf8(WS_XML_WRITER*, const BYTE*, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteElement(WS_XML_WRITER*, const WS_ELEMENT_DESCRIPTION*, WS_WRITE_OPTION, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteEndAttribute(WS_XML_WRITER*, WS_ERROR*); HRESULT WINAPI WsWriteEndCData(WS_XML_WRITER*, WS_ERROR*); HRESULT WINAPI WsWriteEndElement(WS_XML_WRITER*, WS_ERROR*); HRESULT WINAPI WsWriteEndStartElement(WS_XML_WRITER*, WS_ERROR*); HRESULT WINAPI WsWriteEnvelopeEnd(WS_MESSAGE*, WS_ERROR*); HRESULT WINAPI WsWriteEnvelopeStart(WS_MESSAGE*, WS_XML_WRITER*, WS_MESSAGE_DONE_CALLBACK, void*, WS_ERROR*); HRESULT WINAPI WsWriteMessageStart(WS_CHANNEL*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsWriteMessageEnd(WS_CHANNEL*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*); HRESULT WINAPI WsWriteNode(WS_XML_WRITER*, const WS_XML_NODE*, WS_ERROR*); HRESULT WINAPI WsWriteQualifiedName(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*, const WS_XML_STRING*, WS_ERROR*); HRESULT WINAPI WsWriteStartAttribute(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*, const WS_XML_STRING*, BOOL, WS_ERROR*); HRESULT WINAPI WsWriteStartCData(WS_XML_WRITER*, WS_ERROR*); HRESULT WINAPI WsWriteStartElement(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*, const WS_XML_STRING*, WS_ERROR*); HRESULT WINAPI WsWriteText(WS_XML_WRITER*, const WS_XML_TEXT*, WS_ERROR*); HRESULT WINAPI WsWriteType(WS_XML_WRITER*, WS_TYPE_MAPPING, WS_TYPE, const void*, WS_WRITE_OPTION, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteValue(WS_XML_WRITER*, WS_VALUE_TYPE, const void*, ULONG, WS_ERROR*); HRESULT WINAPI WsWriteXmlBuffer(WS_XML_WRITER*, WS_XML_BUFFER*, WS_ERROR*); HRESULT WINAPI WsWriteXmlBufferToBytes(WS_XML_WRITER*, WS_XML_BUFFER*, const WS_XML_WRITER_ENCODING*, const WS_XML_WRITER_PROPERTY*, ULONG, WS_HEAP*, void**, ULONG*, WS_ERROR*); HRESULT WINAPI WsWriteXmlnsAttribute(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*, BOOL, WS_ERROR*); HRESULT WINAPI WsXmlStringEquals(const WS_XML_STRING*, const WS_XML_STRING*, WS_ERROR*); #define WS_S_ASYNC 0x003d0000 #define WS_S_END 0x003d0001 #define WS_E_INVALID_FORMAT 0x803d0000 #define WS_E_OBJECT_FAULTED 0x803d0001 #define WS_E_NUMERIC_OVERFLOW 0x803d0002 #define WS_E_INVALID_OPERATION 0x803d0003 #define WS_E_OPERATION_ABORTED 0x803d0004 #define WS_E_ENDPOINT_ACCESS_DENIED 0x803d0005 #define WS_E_OPERATION_TIMED_OUT 0x803d0006 #define WS_E_OPERATION_ABANDONED 0x803d0007 #define WS_E_QUOTA_EXCEEDED 0x803d0008 #define WS_E_NO_TRANSLATION_AVAILABLE 0x803d0009 #define WS_E_SECURITY_VERIFICATION_FAILURE 0x803d000a #define WS_E_ADDRESS_IN_USE 0x803d000b #define WS_E_ADDRESS_NOT_AVAILABLE 0x803d000c #define WS_E_ENDPOINT_NOT_FOUND 0x803d000d #define WS_E_ENDPOINT_NOT_AVAILABLE 0x803d000e #define WS_E_ENDPOINT_FAILURE 0x803d000f #define WS_E_ENDPOINT_UNREACHABLE 0x803d0010 #define WS_E_ENDPOINT_ACTION_NOT_SUPPORTED 0x803d0011 #define WS_E_ENDPOINT_TOO_BUSY 0x803d0012 #define WS_E_ENDPOINT_FAULT_RECEIVED 0x803d0013 #define WS_E_ENDPOINT_DISCONNECTED 0x803d0014 #define WS_E_PROXY_FAILURE 0x803d0015 #define WS_E_PROXY_ACCESS_DENIED 0x803d0016 #define WS_E_NOT_SUPPORTED 0x803d0017 #define WS_E_PROXY_REQUIRES_BASIC_AUTH 0x803d0018 #define WS_E_PROXY_REQUIRES_DIGEST_AUTH 0x803d0019 #define WS_E_PROXY_REQUIRES_NTLM_AUTH 0x803d001a #define WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH 0x803d001b #define WS_E_SERVER_REQUIRES_BASIC_AUTH 0x803d001c #define WS_E_SERVER_REQUIRES_DIGEST_AUTH 0x803d001d #define WS_E_SERVER_REQUIRES_NTLM_AUTH 0x803d001e #define WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH 0x803d001f #define WS_E_INVALID_ENDPOINT_URL 0x803d0020 #define WS_E_OTHER 0x803d0021 #define WS_E_SECURITY_TOKEN_EXPIRED 0x803d0022 #define WS_E_SECURITY_SYSTEM_FAILURE 0x803d0023 #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __WINE_WEBSERVICES_H */ ================================================ FILE: wine/windows/werapi.h ================================================ /* * Windows Error Reporting definitions * * Copyright (C) 2010 Louis Lenders * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WERAPI_H #define __WINE_WERAPI_H #ifdef __cplusplus extern "C" { #endif /* Only 10 parameter are allowed in WerReportSetParameter */ #define WER_MAX_PARAM_COUNT 10 #define WER_P0 0 #define WER_P1 1 #define WER_P2 2 #define WER_P3 3 #define WER_P4 4 #define WER_P5 5 #define WER_P6 6 #define WER_P7 7 #define WER_P8 8 #define WER_P9 9 /* Flags for WerReportSubmit */ #define WER_SUBMIT_HONOR_RECOVERY 0x0001 #define WER_SUBMIT_HONOR_RESTART 0x0002 #define WER_SUBMIT_QUEUE 0x0004 #define WER_SUBMIT_SHOW_DEBUG 0x0008 #define WER_SUBMIT_ADD_REGISTERED_DATA 0x0010 #define WER_SUBMIT_OUTOFPROCESS 0x0020 #define WER_SUBMIT_NO_CLOSE_UI 0x0040 #define WER_SUBMIT_NO_QUEUE 0x0080 #define WER_SUBMIT_NO_ARCHIVE 0x0100 #define WER_SUBMIT_START_MINIMIZED 0x0200 #define WER_SUBMIT_OUTOFPROCESS_ASYNC 0x0400 #define WER_SUBMIT_BYPASS_DATA_THROTTLING 0x0800 #define WER_SUBMIT_ARCHIVE_PARAMETERS_ONLY 0x1000 #define WER_SUBMIT_REPORT_MACHINE_ID 0x2000 #define WER_MAX_PREFERRED_MODULES 128 #define WER_MAX_PREFERRED_MODULES_BUFFER 256 /* #### */ typedef HANDLE HREPORT; typedef enum _WER_CONSENT { WerConsentNotAsked = 1, WerConsentApproved, WerConsentDenied, WerConsentAlwaysPrompt, WerConsentMax } WER_CONSENT; typedef enum _WER_FILE_TYPE { WerFileTypeMicrodump = 1, WerFileTypeMinidump, WerFileTypeHeapdump, WerFileTypeUserDocument, WerFileTypeOther, WerFileTypeMax } WER_FILE_TYPE; typedef enum _WER_REGISTER_FILE_TYPE { WerRegFileTypeUserDocument = 1, WerRegFileTypeOther = 2, WerRegFileTypeMax } WER_REGISTER_FILE_TYPE; typedef struct _WER_REPORT_INFORMATION { DWORD dwSize; HANDLE hProcess; WCHAR wzConsentKey[64]; WCHAR wzFriendlyEventName[128]; WCHAR wzApplicationName[128]; WCHAR wzApplicationPath[MAX_PATH]; WCHAR wzDescription[512]; HWND hwndParent; } WER_REPORT_INFORMATION, *PWER_REPORT_INFORMATION; typedef enum _WER_REPORT_TYPE { WerReportNonCritical = 0, WerReportCritical, WerReportApplicationCrash, WerReportApplicationHang, WerReportKernel, WerReportInvalid } WER_REPORT_TYPE; typedef enum _WER_SUBMIT_RESULT { WerReportQueued = 1, WerReportUploaded, WerReportDebug, WerReportFailed, WerDisabled, WerReportCancelled, WerDisabledQueue, WerReportAsync, WerCustomAction } WER_SUBMIT_RESULT, *PWER_SUBMIT_RESULT; typedef enum _WER_DUMP_TYPE { WerDumpTypeMicroDump = 1, WerDumpTypeMiniDump, WerDumpTypeHeapDump, WerDumpTypeMax } WER_DUMP_TYPE; typedef enum _WER_REPORT_UI { WerUIAdditionalDataDlgHeader = 1, WerUIIconFilePath = 2, WerUIConsentDlgHeader = 3, WerUIConsentDlgBody = 4, WerUIOnlineSolutionCheckText = 5, WerUIOfflineSolutionCheckText = 6, WerUICloseText = 7, WerUICloseDlgHeader = 8, WerUICloseDlgBody = 9, WerUICloseDlgButtonText = 10, WerUICustomActionButtonText = 11, WerUIMax } WER_REPORT_UI; /* #### */ typedef struct _WER_DUMP_CUSTOM_OPTIONS { DWORD dwSize; DWORD dwMask; DWORD dwDumpFlags; BOOL bOnlyThisThread; DWORD dwExceptionThreadFlags; DWORD dwOtherThreadFlags; DWORD dwExceptionThreadExFlags; DWORD dwOtherThreadExFlags; DWORD dwPreferredModuleFlags; DWORD dwOtherModuleFlags; WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER]; } WER_DUMP_CUSTOM_OPTIONS, *PWER_DUMP_CUSTOM_OPTIONS; typedef struct _WER_EXCEPTION_INFORMATION { PEXCEPTION_POINTERS pExceptionPointers; BOOL bClientPointers; } WER_EXCEPTION_INFORMATION, *PWER_EXCEPTION_INFORMATION; /* #### */ HRESULT WINAPI WerAddExcludedApplication(PCWSTR, BOOL); HRESULT WINAPI WerRegisterFile(PCWSTR file, WER_REGISTER_FILE_TYPE regfiletype, DWORD flags); HRESULT WINAPI WerRegisterMemoryBlock(void *block, DWORD size); HRESULT WINAPI WerRegisterRuntimeExceptionModule(PCWSTR callbackdll, void *context); HRESULT WINAPI WerRemoveExcludedApplication(PCWSTR, BOOL); HRESULT WINAPI WerReportAddFile(HREPORT, PCWSTR, WER_FILE_TYPE, DWORD); HRESULT WINAPI WerReportCloseHandle(HREPORT); HRESULT WINAPI WerReportCreate(PCWSTR, WER_REPORT_TYPE, PWER_REPORT_INFORMATION, HREPORT*); HRESULT WINAPI WerReportSetParameter(HREPORT, DWORD, PCWSTR, PCWSTR); HRESULT WINAPI WerReportSetUIOption(HREPORT, WER_REPORT_UI, PCWSTR); HRESULT WINAPI WerReportSubmit(HREPORT, WER_CONSENT, DWORD, PWER_SUBMIT_RESULT); HRESULT WINAPI WerSetFlags(DWORD flags); HRESULT WINAPI WerUnregisterMemoryBlock(void *block); #ifdef __cplusplus } #endif #endif /* __WINE_WERAPI_H */ ================================================ FILE: wine/windows/wfext.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WFEXT_H #define __WINE_WFEXT_H #ifdef __cplusplus extern "C" { #endif #define MENU_TEXT_LEN 40 #define FMMENU_FIRST 1 #define FMMENU_LAST 99 #define FMEVENT_LOAD 100 #define FMEVENT_UNLOAD 101 #define FMEVENT_INITMENU 102 #define FMEVENT_USER_REFRESH 103 #define FMEVENT_SELCHANGE 104 #define FMEVENT_TOOLBARLOAD 105 #define FMEVENT_HELPSTRING 106 #define FMEVENT_HELPMENUITEM 107 #define FMFOCUS_DIR 1 #define FMFOCUS_TREE 2 #define FMFOCUS_DRIVES 3 #define FMFOCUS_SEARCH 4 #define FM_GETFOCUS (WM_USER + 0x0200) #define FM_GETDRIVEINFOA (WM_USER + 0x0201) #define FM_GETSELCOUNT (WM_USER + 0x0202) #define FM_GETSELCOUNTLFN (WM_USER + 0x0203) #define FM_GETFILESELA (WM_USER + 0x0204) #define FM_GETFILESELLFNA (WM_USER + 0x0205) #define FM_REFRESH_WINDOWS (WM_USER + 0x0206) #define FM_RELOAD_EXTENSIONS (WM_USER + 0x0207) #define FM_GETDRIVEINFOW (WM_USER + 0x0211) #define FM_GETFILESELW (WM_USER + 0x0214) #define FM_GETFILESELLFNW (WM_USER + 0x0215) #define FM_GETDRIVEINFO WINELIB_NAME_AW(FM_GETDRIVEINFO) #define FM_GETFILESEL WINELIB_NAME_AW(FM_GETFILESEL) #define FM_GETFILESELLFN WINELIB_NAME_AW(FM_GETFILESELLFN) LONG WINAPI FMExtensionProc(HWND,WORD,LONG); LONG WINAPI FMExtensionProcW(HWND,WORD,LONG); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/wia.h ================================================ /* * Copyright (C) 2009 Damjan Jovanovic * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifdef __WINESRC__ #error Specify wia_lh.h or wia_xp.h explicitly in Wine #endif #if (_WIN32_WINNT >= 0x0600) #include #elif (_WIN32_WINNT >= 0x0501) #include #endif ================================================ FILE: wine/windows/wia_lh.idl ================================================ /* * Copyright 2009 Damjan Jovanovic * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "oaidl.idl"; import "propidl.idl"; cpp_quote("#include ") interface IEnumWIA_DEV_INFO; interface IWiaPropertyStorage; interface IWiaItem; interface IWiaEventCallback; cpp_quote("DEFINE_GUID(CLSID_WiaDevMgr, 0xa1f4e726,0x8cf1,0x11d1,0xbf,0x92,0x00,0x60,0x08,0x1e,0xd8,0x11);") [ object, uuid(5eb2502a-8cf1-11d1-bf92-0060081ed811) ] interface IWiaDevMgr : IUnknown { HRESULT EnumDeviceInfo( [in] LONG lFlag, [retval, out] IEnumWIA_DEV_INFO **ppIEnum); HRESULT CreateDevice( [in] BSTR bstrDeviceID, [out] IWiaItem **ppWiaItemRoot); HRESULT SelectDeviceDlg( [in] HWND hwndParent, [in] LONG lDeviceType, [in] LONG lFlags, [in, out, unique] BSTR *pbstrDeviceID, [retval, out] IWiaItem **ppItemRoot); HRESULT SelectDeviceDlgID( [in] HWND hwndParent, [in] LONG lDeviceType, [in] LONG lFlags, [retval, out] BSTR *pbstrDeviceID); HRESULT GetImageDlg( [in] HWND hwndParent, [in] LONG lDeviceType, [in] LONG lFlags, [in] LONG lIntent, [in] IWiaItem *pItemRoot, [in] BSTR bstrFilename, [in, out] GUID *pguidFormat); HRESULT RegisterEventCallbackProgram( [in] LONG lFlags, [in] BSTR bstrDeviceID, [in] const GUID *pEventGUID, [in] BSTR bstrCommandline, [in] BSTR bstrName, [in] BSTR bstrDescription, [in] BSTR bstrIcon); HRESULT RegisterEventCallbackInterface( [in] LONG lFlags, [in] BSTR bstrDeviceID, [in] const GUID *pEventGUID, [unique, in] IWiaEventCallback *pIWiaEventCallback, [out] IUnknown **pEventObject); HRESULT RegisterEventCallbackCLSID( [in] LONG lFlags, [in] BSTR bstrDeviceID, [in] const GUID *pEventGUID, [unique, in] const GUID *pClsID, [in] BSTR bstrName, [in] BSTR bstrDescription, [in] BSTR bstrIcon); HRESULT AddDeviceDlg( [in] HWND hwndParent, [in] LONG lFlags); } [ object, uuid(5e38b83c-8cf1-11d1-bf92-0060081ed811) ] interface IEnumWIA_DEV_INFO : IUnknown { HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IWiaPropertyStorage **rgelt, [out] ULONG *pceltFetched ); HRESULT Skip( [in] ULONG celt ); HRESULT Reset(); HRESULT Clone( [out] IEnumWIA_DEV_INFO **ppIEnum ); HRESULT GetCount( [out] ULONG *celt ); } [ object, uuid(98B5E8A0-29CC-491a-AAC0-E6DB4FDCCEB6) ] interface IWiaPropertyStorage : IUnknown { /* FIXME: fill in */ } [ object, uuid(4db1ad10-3391-11d2-9a33-00c04fa36145) ] interface IWiaItem : IUnknown { /* FIXME: fill in */ } [ object, uuid(ae6287b0-0084-11d2-973b-00a0c9068f2e) ] interface IWiaEventCallback : IUnknown { HRESULT ImageEventCallback( [in] const GUID *pEventGUID, [in] BSTR bstrEventDescription, [in] BSTR bstrDeviceID, [in] BSTR bstrDeviceDescription, [in] DWORD dwDeviceType, [in] BSTR bstrFullItemName, [in,out] ULONG *pulEventType, [in] ULONG ulReserved); } ================================================ FILE: wine/windows/wia_xp.idl ================================================ /* * Copyright 2009 Damjan Jovanovic * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "oaidl.idl"; import "propidl.idl"; cpp_quote("#include ") interface IEnumWIA_DEV_INFO; interface IWiaPropertyStorage; interface IWiaItem; interface IWiaEventCallback; cpp_quote("DEFINE_GUID(CLSID_WiaDevMgr, 0xa1f4e726,0x8cf1,0x11d1,0xbf,0x92,0x00,0x60,0x08,0x1e,0xd8,0x11);") [ object, uuid(5eb2502a-8cf1-11d1-bf92-0060081ed811) ] interface IWiaDevMgr : IUnknown { HRESULT EnumDeviceInfo( [in] LONG lFlag, [retval, out] IEnumWIA_DEV_INFO **ppIEnum); HRESULT CreateDevice( [in] BSTR bstrDeviceID, [out] IWiaItem **ppWiaItemRoot); HRESULT SelectDeviceDlg( [in] HWND hwndParent, [in] LONG lDeviceType, [in] LONG lFlags, [in, out, unique] BSTR *pbstrDeviceID, [retval, out] IWiaItem **ppItemRoot); HRESULT SelectDeviceDlgID( [in] HWND hwndParent, [in] LONG lDeviceType, [in] LONG lFlags, [retval, out] BSTR *pbstrDeviceID); HRESULT GetImageDlg( [in] HWND hwndParent, [in] LONG lDeviceType, [in] LONG lFlags, [in] LONG lIntent, [in] IWiaItem *pItemRoot, [in] BSTR bstrFilename, [in, out] GUID *pguidFormat); HRESULT RegisterEventCallbackProgram( [in] LONG lFlags, [in] BSTR bstrDeviceID, [in] const GUID *pEventGUID, [in] BSTR bstrCommandline, [in] BSTR bstrName, [in] BSTR bstrDescription, [in] BSTR bstrIcon); HRESULT RegisterEventCallbackInterface( [in] LONG lFlags, [in] BSTR bstrDeviceID, [in] const GUID *pEventGUID, [unique, in] IWiaEventCallback *pIWiaEventCallback, [out] IUnknown **pEventObject); HRESULT RegisterEventCallbackCLSID( [in] LONG lFlags, [in] BSTR bstrDeviceID, [in] const GUID *pEventGUID, [unique, in] const GUID *pClsID, [in] BSTR bstrName, [in] BSTR bstrDescription, [in] BSTR bstrIcon); HRESULT AddDeviceDlg( [in] HWND hwndParent, [in] LONG lFlags); } [ object, uuid(5e38b83c-8cf1-11d1-bf92-0060081ed811) ] interface IEnumWIA_DEV_INFO : IUnknown { HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IWiaPropertyStorage **rgelt, [out] ULONG *pceltFetched ); HRESULT Skip( [in] ULONG celt ); HRESULT Reset(); HRESULT Clone( [out] IEnumWIA_DEV_INFO **ppIEnum ); HRESULT GetCount( [out] ULONG *celt ); } [ object, uuid(98B5E8A0-29CC-491a-AAC0-E6DB4FDCCEB6) ] interface IWiaPropertyStorage : IUnknown { /* FIXME: fill in */ } [ object, uuid(4db1ad10-3391-11d2-9a33-00c04fa36145) ] interface IWiaItem : IUnknown { /* FIXME: fill in */ } [ object, uuid(ae6287b0-0084-11d2-973b-00a0c9068f2e) ] interface IWiaEventCallback : IUnknown { HRESULT ImageEventCallback( [in] const GUID *pEventGUID, [in] BSTR bstrEventDescription, [in] BSTR bstrDeviceID, [in] BSTR bstrDeviceDescription, [in] DWORD dwDeviceType, [in] BSTR bstrFullItemName, [in,out] ULONG *pulEventType, [in] ULONG ulReserved); } ================================================ FILE: wine/windows/wiadef.h ================================================ /* * WIA constants * * Copyright 2015 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define WIA_DEVINFO_ENUM_ALL 0x0000000f #define WIA_DEVINFO_ENUM_LOCAL 0x00000010 #define FACILITY_WIA 33 #define BASE_VAL_WIA_ERROR 0x00000000 #define WIA_S_NO_DEVICE_AVAILABLE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIA, (BASE_VAL_WIA_ERROR + 21)) ================================================ FILE: wine/windows/wimgapi.h ================================================ /* * Copyright (C) 2015 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WIMGAPI_H_ #define _WIMGAPI_H_ #ifdef __cplusplus extern "C" { #endif typedef struct _WIM_MOUNT_LIST { WCHAR WimPath[MAX_PATH]; WCHAR MountPath[MAX_PATH]; DWORD ImageIndex; BOOL MountedForRW; } WIM_MOUNT_LIST, *PWIM_MOUNT_LIST, *LPWIM_MOUNT_LIST; #ifdef __cplusplus } #endif #endif /* _WIMGAPI_H_ */ ================================================ FILE: wine/windows/winbase.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINBASE_H #define __WINE_WINBASE_H #include #ifdef __cplusplus extern "C" { #endif #ifdef _KERNEL32_ #define WINBASEAPI #else #define WINBASEAPI DECLSPEC_IMPORT #endif #ifdef _ADVAPI32_ #define WINADVAPI #else #define WINADVAPI DECLSPEC_IMPORT #endif #include /* Windows Exit Procedure flag values */ #define WEP_FREE_DLL 0 #define WEP_SYSTEM_EXIT 1 typedef DWORD (CALLBACK *LPTHREAD_START_ROUTINE)(LPVOID); typedef VOID (WINAPI *PFIBER_START_ROUTINE)( LPVOID lpFiberParameter ); typedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE; #define FIBER_FLAG_FLOAT_SWITCH 1 typedef RTL_CRITICAL_SECTION CRITICAL_SECTION; typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION; typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION; typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG; typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG; typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG; #define CRITICAL_SECTION_NO_DEBUG_INFO RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO typedef RTL_SRWLOCK SRWLOCK; typedef PRTL_SRWLOCK PSRWLOCK; #define SRWLOCK_INIT RTL_SRWLOCK_INIT typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK; #define CONDITION_VARIABLE_INIT RTL_CONDITION_VARIABLE_INIT #define CONDITION_VARIABLE_LOCKMODE_SHARED RTL_CONDITION_VARIABLE_LOCKMODE_SHARED typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE; #define EXCEPTION_DEBUG_EVENT 1 #define CREATE_THREAD_DEBUG_EVENT 2 #define CREATE_PROCESS_DEBUG_EVENT 3 #define EXIT_THREAD_DEBUG_EVENT 4 #define EXIT_PROCESS_DEBUG_EVENT 5 #define LOAD_DLL_DEBUG_EVENT 6 #define UNLOAD_DLL_DEBUG_EVENT 7 #define OUTPUT_DEBUG_STRING_EVENT 8 #define RIP_EVENT 9 typedef struct _EXCEPTION_DEBUG_INFO { EXCEPTION_RECORD ExceptionRecord; DWORD dwFirstChance; } EXCEPTION_DEBUG_INFO; typedef struct _CREATE_THREAD_DEBUG_INFO { HANDLE hThread; LPVOID lpThreadLocalBase; LPTHREAD_START_ROUTINE lpStartAddress; } CREATE_THREAD_DEBUG_INFO; typedef struct _CREATE_PROCESS_DEBUG_INFO { HANDLE hFile; HANDLE hProcess; HANDLE hThread; LPVOID lpBaseOfImage; DWORD dwDebugInfoFileOffset; DWORD nDebugInfoSize; LPVOID lpThreadLocalBase; LPTHREAD_START_ROUTINE lpStartAddress; LPVOID lpImageName; WORD fUnicode; } CREATE_PROCESS_DEBUG_INFO; typedef struct _EXIT_THREAD_DEBUG_INFO { DWORD dwExitCode; } EXIT_THREAD_DEBUG_INFO; typedef struct _EXIT_PROCESS_DEBUG_INFO { DWORD dwExitCode; } EXIT_PROCESS_DEBUG_INFO; typedef struct _LOAD_DLL_DEBUG_INFO { HANDLE hFile; LPVOID lpBaseOfDll; DWORD dwDebugInfoFileOffset; DWORD nDebugInfoSize; LPVOID lpImageName; WORD fUnicode; } LOAD_DLL_DEBUG_INFO; typedef struct _UNLOAD_DLL_DEBUG_INFO { LPVOID lpBaseOfDll; } UNLOAD_DLL_DEBUG_INFO; typedef struct _OUTPUT_DEBUG_STRING_INFO { LPSTR lpDebugStringData; WORD fUnicode; WORD nDebugStringLength; } OUTPUT_DEBUG_STRING_INFO; typedef struct _RIP_INFO { DWORD dwError; DWORD dwType; } RIP_INFO; typedef struct _DEBUG_EVENT { DWORD dwDebugEventCode; DWORD dwProcessId; DWORD dwThreadId; union { EXCEPTION_DEBUG_INFO Exception; CREATE_THREAD_DEBUG_INFO CreateThread; CREATE_PROCESS_DEBUG_INFO CreateProcessInfo; EXIT_THREAD_DEBUG_INFO ExitThread; EXIT_PROCESS_DEBUG_INFO ExitProcess; LOAD_DLL_DEBUG_INFO LoadDll; UNLOAD_DLL_DEBUG_INFO UnloadDll; OUTPUT_DEBUG_STRING_INFO DebugString; RIP_INFO RipInfo; } u; } DEBUG_EVENT, *LPDEBUG_EVENT; typedef PCONTEXT LPCONTEXT; typedef PEXCEPTION_RECORD LPEXCEPTION_RECORD; typedef PEXCEPTION_POINTERS LPEXCEPTION_POINTERS; typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS); typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER; #define OFS_MAXPATHNAME 128 typedef struct _OFSTRUCT { BYTE cBytes; BYTE fFixedDisk; WORD nErrCode; WORD Reserved1; WORD Reserved2; CHAR szPathName[OFS_MAXPATHNAME]; } OFSTRUCT, *POFSTRUCT, *LPOFSTRUCT; #define OF_READ 0x0000 #define OF_WRITE 0x0001 #define OF_READWRITE 0x0002 #define OF_SHARE_COMPAT 0x0000 #define OF_SHARE_EXCLUSIVE 0x0010 #define OF_SHARE_DENY_WRITE 0x0020 #define OF_SHARE_DENY_READ 0x0030 #define OF_SHARE_DENY_NONE 0x0040 #define OF_PARSE 0x0100 #define OF_DELETE 0x0200 #define OF_VERIFY 0x0400 /* Used with OF_REOPEN */ #define OF_SEARCH 0x0400 /* Used without OF_REOPEN */ #define OF_CANCEL 0x0800 #define OF_CREATE 0x1000 #define OF_PROMPT 0x2000 #define OF_EXIST 0x4000 #define OF_REOPEN 0x8000 /* SetErrorMode values */ #define SEM_FAILCRITICALERRORS 0x0001 #define SEM_NOGPFAULTERRORBOX 0x0002 #define SEM_NOALIGNMENTFAULTEXCEPT 0x0004 #define SEM_NOOPENFILEERRORBOX 0x8000 /* CopyFileEx flags */ #define COPY_FILE_FAIL_IF_EXISTS 0x00000001 #define COPY_FILE_RESTARTABLE 0x00000002 #define COPY_FILE_OPEN_SOURCE_FOR_WRITE 0x00000004 #define COPY_FILE_ALLOW_DECRYPTED_DESTINATION 0x00000008 #define COPY_FILE_COPY_SYMLINK 0x00000800 #define COPY_FILE_NO_BUFFERING 0x00001000 /* return values for CopyProgressRoutine */ #define PROGRESS_CONTINUE 0 #define PROGRESS_CANCEL 1 #define PROGRESS_STOP 2 #define PROGRESS_QUIET 3 /* reason codes for CopyProgressRoutine */ #define CALLBACK_CHUNK_FINISHED 0 #define CALLBACK_STREAM_SWITCH 1 /* GetTempFileName() Flags */ #define TF_FORCEDRIVE 0x80 #define DRIVE_UNKNOWN 0 #define DRIVE_NO_ROOT_DIR 1 #define DRIVE_REMOVABLE 2 #define DRIVE_FIXED 3 #define DRIVE_REMOTE 4 /* Win32 additions */ #define DRIVE_CDROM 5 #define DRIVE_RAMDISK 6 #define MAX_COMPUTERNAME_LENGTH 15 /* The security attributes structure */ typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; #ifndef _FILETIME_ #define _FILETIME_ /* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */ typedef struct _FILETIME { #ifdef WORDS_BIGENDIAN DWORD dwHighDateTime; DWORD dwLowDateTime; #else DWORD dwLowDateTime; DWORD dwHighDateTime; #endif } FILETIME, *PFILETIME, *LPFILETIME; #endif /* _FILETIME_ */ /* Find* structures */ typedef struct _WIN32_FIND_DATAA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; CHAR cFileName[260]; CHAR cAlternateFileName[14]; } WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA; typedef struct _WIN32_FIND_DATAW { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; WCHAR cFileName[260]; WCHAR cAlternateFileName[14]; } WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW; DECL_WINELIB_TYPE_AW(WIN32_FIND_DATA) DECL_WINELIB_TYPE_AW(PWIN32_FIND_DATA) DECL_WINELIB_TYPE_AW(LPWIN32_FIND_DATA) typedef enum _FINDEX_INFO_LEVELS { FindExInfoStandard, FindExInfoBasic, FindExInfoMaxInfoLevel } FINDEX_INFO_LEVELS; #define FIND_FIRST_EX_CASE_SENSITIVE 1 #define FIND_FIRST_EX_LARGE_FETCH 2 typedef enum _FINDEX_SEARCH_OPS { FindExSearchNameMatch, FindExSearchLimitToDirectories, FindExSearchLimitToDevices, FindExSearchMaxSearchOp } FINDEX_SEARCH_OPS; typedef struct _PROCESS_HEAP_ENTRY { LPVOID lpData; DWORD cbData; BYTE cbOverhead; BYTE iRegionIndex; WORD wFlags; union { struct { HANDLE hMem; DWORD dwReserved[3]; } Block; struct { DWORD dwCommittedSize; DWORD dwUnCommittedSize; LPVOID lpFirstBlock; LPVOID lpLastBlock; } Region; } DUMMYUNIONNAME; } PROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY; #define PROCESS_HEAP_REGION 0x0001 #define PROCESS_HEAP_UNCOMMITTED_RANGE 0x0002 #define PROCESS_HEAP_ENTRY_BUSY 0x0004 #define PROCESS_HEAP_ENTRY_MOVEABLE 0x0010 #define PROCESS_HEAP_ENTRY_DDESHARE 0x0020 #define INVALID_HANDLE_VALUE ((HANDLE)~(ULONG_PTR)0) #define INVALID_FILE_SIZE (~0u) #define INVALID_SET_FILE_POINTER (~0u) #define INVALID_FILE_ATTRIBUTES (~0u) #define LOCKFILE_FAIL_IMMEDIATELY 1 #define LOCKFILE_EXCLUSIVE_LOCK 2 #define FLS_OUT_OF_INDEXES (~0u) #define TLS_OUT_OF_INDEXES (~0u) #define SHUTDOWN_NORETRY 1 /* comm */ #define CBR_110 0xFF10 #define CBR_300 0xFF11 #define CBR_600 0xFF12 #define CBR_1200 0xFF13 #define CBR_2400 0xFF14 #define CBR_4800 0xFF15 #define CBR_9600 0xFF16 #define CBR_14400 0xFF17 #define CBR_19200 0xFF18 #define CBR_38400 0xFF1B #define CBR_56000 0xFF1F #define CBR_57600 0xFF20 #define CBR_115200 0xFF21 #define CBR_128000 0xFF23 #define CBR_256000 0xFF27 #define NOPARITY 0 #define ODDPARITY 1 #define EVENPARITY 2 #define MARKPARITY 3 #define SPACEPARITY 4 #define ONESTOPBIT 0 #define ONE5STOPBITS 1 #define TWOSTOPBITS 2 #define IGNORE 0 #define INFINITE 0xFFFFFFFF #define CE_RXOVER 0x0001 #define CE_OVERRUN 0x0002 #define CE_RXPARITY 0x0004 #define CE_FRAME 0x0008 #define CE_BREAK 0x0010 #define CE_CTSTO 0x0020 #define CE_DSRTO 0x0040 #define CE_RLSDTO 0x0080 #define CE_TXFULL 0x0100 #define CE_PTO 0x0200 #define CE_IOE 0x0400 #define CE_DNS 0x0800 #define CE_OOP 0x1000 #define CE_MODE 0x8000 #define IE_BADID -1 #define IE_OPEN -2 #define IE_NOPEN -3 #define IE_MEMORY -4 #define IE_DEFAULT -5 #define IE_HARDWARE -10 #define IE_BYTESIZE -11 #define IE_BAUDRATE -12 #define EV_RXCHAR 0x0001 #define EV_RXFLAG 0x0002 #define EV_TXEMPTY 0x0004 #define EV_CTS 0x0008 #define EV_DSR 0x0010 #define EV_RLSD 0x0020 #define EV_BREAK 0x0040 #define EV_ERR 0x0080 #define EV_RING 0x0100 #define EV_PERR 0x0200 #define EV_RX80FULL 0x0400 #define EV_EVENT1 0x0800 #define EV_EVENT2 0x1000 #define SETXOFF 1 #define SETXON 2 #define SETRTS 3 #define CLRRTS 4 #define SETDTR 5 #define CLRDTR 6 #define RESETDEV 7 #define SETBREAK 8 #define CLRBREAK 9 /* Purge functions for Comm Port */ #define PURGE_TXABORT 0x0001 /* Kill the pending/current writes to the comm port */ #define PURGE_RXABORT 0x0002 /*Kill the pending/current reads to the comm port */ #define PURGE_TXCLEAR 0x0004 /* Kill the transmit queue if there*/ #define PURGE_RXCLEAR 0x0008 /* Kill the typeahead buffer if there*/ /* Modem Status Flags */ #define MS_CTS_ON ((DWORD)0x0010) #define MS_DSR_ON ((DWORD)0x0020) #define MS_RING_ON ((DWORD)0x0040) #define MS_RLSD_ON ((DWORD)0x0080) #define RTS_CONTROL_DISABLE 0 #define RTS_CONTROL_ENABLE 1 #define RTS_CONTROL_HANDSHAKE 2 #define RTS_CONTROL_TOGGLE 3 #define DTR_CONTROL_DISABLE 0 #define DTR_CONTROL_ENABLE 1 #define DTR_CONTROL_HANDSHAKE 2 #define LMEM_FIXED 0 #define LMEM_MOVEABLE 0x0002 #define LMEM_NOCOMPACT 0x0010 #define LMEM_NODISCARD 0x0020 #define LMEM_ZEROINIT 0x0040 #define LMEM_MODIFY 0x0080 #define LMEM_DISCARDABLE 0x0F00 #define LMEM_DISCARDED 0x4000 #define LMEM_INVALID_HANDLE 0x8000 #define LMEM_LOCKCOUNT 0x00FF #define LPTR (LMEM_FIXED | LMEM_ZEROINIT) #define LHND (LMEM_MOVEABLE | LMEM_ZEROINIT) #define NONZEROLHND (LMEM_MOVEABLE) #define NONZEROLPTR (LMEM_FIXED) #define LocalDiscard(h) (LocalReAlloc((h),0,LMEM_MOVEABLE)) #define GMEM_FIXED 0x0000 #define GMEM_MOVEABLE 0x0002 #define GMEM_NOCOMPACT 0x0010 #define GMEM_NODISCARD 0x0020 #define GMEM_ZEROINIT 0x0040 #define GMEM_MODIFY 0x0080 #define GMEM_DISCARDABLE 0x0100 #define GMEM_NOT_BANKED 0x1000 #define GMEM_SHARE 0x2000 #define GMEM_DDESHARE 0x2000 #define GMEM_NOTIFY 0x4000 #define GMEM_LOWER GMEM_NOT_BANKED #define GMEM_DISCARDED 0x4000 #define GMEM_LOCKCOUNT 0x00ff #define GMEM_INVALID_HANDLE 0x8000 #define GHND (GMEM_MOVEABLE | GMEM_ZEROINIT) #define GPTR (GMEM_FIXED | GMEM_ZEROINIT) #define GlobalLRUNewest(h) ((HANDLE)(h)) #define GlobalLRUOldest(h) ((HANDLE)(h)) #define GlobalDiscard(h) (GlobalReAlloc((h),0,GMEM_MOVEABLE)) #define INVALID_ATOM ((ATOM)0) #define MAXINTATOM 0xc000 #ifdef WINE_NO_UNICODE_MACROS /* force using a cast */ #define MAKEINTATOM(atom) ((ULONG_PTR)((WORD)(atom))) #else #define MAKEINTATOM(atom) ((LPTSTR)((ULONG_PTR)((WORD)(atom)))) #endif typedef struct tagMEMORYSTATUS { DWORD dwLength; DWORD dwMemoryLoad; SIZE_T dwTotalPhys; SIZE_T dwAvailPhys; SIZE_T dwTotalPageFile; SIZE_T dwAvailPageFile; SIZE_T dwTotalVirtual; SIZE_T dwAvailVirtual; } MEMORYSTATUS, *LPMEMORYSTATUS; #include typedef struct tagMEMORYSTATUSEX { DWORD dwLength; DWORD dwMemoryLoad; DWORDLONG DECLSPEC_ALIGN(8) ullTotalPhys; DWORDLONG DECLSPEC_ALIGN(8) ullAvailPhys; DWORDLONG DECLSPEC_ALIGN(8) ullTotalPageFile; DWORDLONG DECLSPEC_ALIGN(8) ullAvailPageFile; DWORDLONG DECLSPEC_ALIGN(8) ullTotalVirtual; DWORDLONG DECLSPEC_ALIGN(8) ullAvailVirtual; DWORDLONG DECLSPEC_ALIGN(8) ullAvailExtendedVirtual; } MEMORYSTATUSEX, *LPMEMORYSTATUSEX; #include typedef enum _MEMORY_RESOURCE_NOTIFICATION_TYPE { LowMemoryResourceNotification, HighMemoryResourceNotification } MEMORY_RESOURCE_NOTIFICATION_TYPE; #ifndef _SYSTEMTIME_ #define _SYSTEMTIME_ typedef struct _SYSTEMTIME{ WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; #endif /* _SYSTEMTIME_ */ /* The 'overlapped' data structure used by async I/O functions. */ typedef struct _OVERLAPPED { #ifdef WORDS_BIGENDIAN ULONG_PTR InternalHigh; ULONG_PTR Internal; #else ULONG_PTR Internal; ULONG_PTR InternalHigh; #endif union { struct { #ifdef WORDS_BIGENDIAN DWORD OffsetHigh; DWORD Offset; #else DWORD Offset; DWORD OffsetHigh; #endif } DUMMYSTRUCTNAME; PVOID Pointer; } DUMMYUNIONNAME; HANDLE hEvent; } OVERLAPPED, *LPOVERLAPPED; typedef VOID (CALLBACK *LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPOVERLAPPED); /* Process startup information. */ /* STARTUPINFO.dwFlags */ #define STARTF_USESHOWWINDOW 0x00000001 #define STARTF_USESIZE 0x00000002 #define STARTF_USEPOSITION 0x00000004 #define STARTF_USECOUNTCHARS 0x00000008 #define STARTF_USEFILLATTRIBUTE 0x00000010 #define STARTF_RUNFULLSCREEN 0x00000020 #define STARTF_FORCEONFEEDBACK 0x00000040 #define STARTF_FORCEOFFFEEDBACK 0x00000080 #define STARTF_USESTDHANDLES 0x00000100 #define STARTF_USEHOTKEY 0x00000200 typedef struct _STARTUPINFOA{ DWORD cb; /* 00: size of struct */ LPSTR lpReserved; /* 04: */ LPSTR lpDesktop; /* 08: */ LPSTR lpTitle; /* 0c: */ DWORD dwX; /* 10: */ DWORD dwY; /* 14: */ DWORD dwXSize; /* 18: */ DWORD dwYSize; /* 1c: */ DWORD dwXCountChars; /* 20: */ DWORD dwYCountChars; /* 24: */ DWORD dwFillAttribute; /* 28: */ DWORD dwFlags; /* 2c: */ WORD wShowWindow; /* 30: */ WORD cbReserved2; /* 32: */ BYTE *lpReserved2; /* 34: */ HANDLE hStdInput; /* 38: */ HANDLE hStdOutput; /* 3c: */ HANDLE hStdError; /* 40: */ } STARTUPINFOA, *LPSTARTUPINFOA; typedef struct _STARTUPINFOW{ DWORD cb; LPWSTR lpReserved; LPWSTR lpDesktop; LPWSTR lpTitle; DWORD dwX; DWORD dwY; DWORD dwXSize; DWORD dwYSize; DWORD dwXCountChars; DWORD dwYCountChars; DWORD dwFillAttribute; DWORD dwFlags; WORD wShowWindow; WORD cbReserved2; BYTE *lpReserved2; HANDLE hStdInput; HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFOW, *LPSTARTUPINFOW; DECL_WINELIB_TYPE_AW(STARTUPINFO) DECL_WINELIB_TYPE_AW(LPSTARTUPINFO) typedef struct _PROCESS_INFORMATION{ HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId; } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; typedef struct _TIME_DYNAMIC_ZONE_INFORMATION { LONG Bias; WCHAR StandardName[32]; SYSTEMTIME StandardDate; LONG StandardBias; WCHAR DaylightName[32]; SYSTEMTIME DaylightDate; LONG DaylightBias; WCHAR TimeZoneKeyName[128]; BOOLEAN DynamicDaylightTimeDisabled; } DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION; typedef struct _TIME_ZONE_INFORMATION{ LONG Bias; WCHAR StandardName[32]; SYSTEMTIME StandardDate; LONG StandardBias; WCHAR DaylightName[32]; SYSTEMTIME DaylightDate; LONG DaylightBias; } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION; #define TIME_ZONE_ID_INVALID ((DWORD)0xFFFFFFFF) #define TIME_ZONE_ID_UNKNOWN 0 #define TIME_ZONE_ID_STANDARD 1 #define TIME_ZONE_ID_DAYLIGHT 2 /* CreateProcess: dwCreationFlag values */ #define DEBUG_PROCESS 0x00000001 #define DEBUG_ONLY_THIS_PROCESS 0x00000002 #define CREATE_SUSPENDED 0x00000004 #define DETACHED_PROCESS 0x00000008 #define CREATE_NEW_CONSOLE 0x00000010 #define NORMAL_PRIORITY_CLASS 0x00000020 #define IDLE_PRIORITY_CLASS 0x00000040 #define HIGH_PRIORITY_CLASS 0x00000080 #define REALTIME_PRIORITY_CLASS 0x00000100 #define BELOW_NORMAL_PRIORITY_CLASS 0x00004000 #define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000 #define CREATE_NEW_PROCESS_GROUP 0x00000200 #define CREATE_UNICODE_ENVIRONMENT 0x00000400 #define CREATE_SEPARATE_WOW_VDM 0x00000800 #define CREATE_SHARED_WOW_VDM 0x00001000 #define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000 #define CREATE_BREAKAWAY_FROM_JOB 0x01000000 #define CREATE_DEFAULT_ERROR_MODE 0x04000000 #define CREATE_NO_WINDOW 0x08000000 #define PROFILE_USER 0x10000000 #define PROFILE_KERNEL 0x20000000 #define PROFILE_SERVER 0x40000000 /* File object type definitions */ #define FILE_TYPE_UNKNOWN 0 #define FILE_TYPE_DISK 1 #define FILE_TYPE_CHAR 2 #define FILE_TYPE_PIPE 3 #define FILE_TYPE_REMOTE 32768 /* File encryption status */ #define FILE_ENCRYPTABLE 0 #define FILE_IS_ENCRYPTED 1 #define FILE_SYSTEM_ATTR 2 #define FILE_ROOT_DIR 3 #define FILE_SYSTEM_DIR 4 #define FILE_UNKNOWN 5 #define FILE_SYSTEM_NOT_SUPPORT 6 #define FILE_USER_DISALLOWED 7 #define FILE_READ_ONLY 8 #define FILE_DIR_DISALLOWED 9 typedef DWORD (WINAPI *PFE_EXPORT_FUNC)(PBYTE,PVOID,ULONG); typedef DWORD (WINAPI *PFE_IMPORT_FUNC)(PBYTE,PVOID,ULONG); #define CREATE_FOR_IMPORT (1) #define CREATE_FOR_DIR (2) #define OVERWRITE_HIDDEN (4) #define EFSRPC_SECURE_ONLY (8) /* File creation flags */ #define FILE_FLAG_WRITE_THROUGH 0x80000000 #define FILE_FLAG_OVERLAPPED 0x40000000 #define FILE_FLAG_NO_BUFFERING 0x20000000 #define FILE_FLAG_RANDOM_ACCESS 0x10000000 #define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000 #define FILE_FLAG_DELETE_ON_CLOSE 0x04000000 #define FILE_FLAG_BACKUP_SEMANTICS 0x02000000 #define FILE_FLAG_POSIX_SEMANTICS 0x01000000 #define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000 #define FILE_FLAG_OPEN_NO_RECALL 0x00100000 #define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000 #define CREATE_NEW 1 #define CREATE_ALWAYS 2 #define OPEN_EXISTING 3 #define OPEN_ALWAYS 4 #define TRUNCATE_EXISTING 5 /* Standard handle identifiers */ #define STD_INPUT_HANDLE ((DWORD) -10) #define STD_OUTPUT_HANDLE ((DWORD) -11) #define STD_ERROR_HANDLE ((DWORD) -12) /* Flags for GetFinalPathNameByHandle */ #define FILE_NAME_NORMALIZED 0x0 #define FILE_NAME_OPENED 0x8 #define VOLUME_NAME_DOS 0x0 #define VOLUME_NAME_GUID 0x1 #define VOLUME_NAME_NT 0x2 #define VOLUME_NAME_NONE 0x4 typedef struct _BY_HANDLE_FILE_INFORMATION { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD dwVolumeSerialNumber; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD nNumberOfLinks; DWORD nFileIndexHigh; DWORD nFileIndexLow; } BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION ; typedef enum _FILE_ID_TYPE { FileIdType, ObjectIdType, ExtendedFileIdType, MaximumFileIdType } FILE_ID_TYPE, *PFILE_ID_TYPE; typedef struct _FILE_ID_DESCRIPTOR { DWORD dwSize; FILE_ID_TYPE Type; union { LARGE_INTEGER FileId; GUID ObjectId; } DUMMYUNIONNAME; } FILE_ID_DESCRIPTOR, *LPFILE_ID_DESCRIPTOR; typedef enum _FILE_INFO_BY_HANDLE_CLASS { FileBasicInfo, FileStandardInfo, FileNameInfo, FileRenameInfo, FileDispositionInfo, FileAllocationInfo, FileEndOfFileInfo, FileStreamInfo, FileCompressionInfo, FileAttributeTagInfo, FileIdBothDirectoryInfo, FileIdBothDirectoryRestartInfo, FileIoPriorityHintInfo, FileRemoteProtocolInfo, FileFullDirectoryInfo, FileFullDirectoryRestartInfo, FileStorageInfo, FileAlignmentInfo, FileIdInfo, FileIdExtdDirectoryInfo, FileIdExtdDirectoryRestartInfo, MaximumFileInfoByHandlesClass } FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS; typedef struct _FILE_ID_BOTH_DIR_INFO { DWORD NextEntryOffset; DWORD FileIndex; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; DWORD FileAttributes; DWORD FileNameLength; DWORD EaSize; CCHAR ShortNameLength; WCHAR ShortName[12]; LARGE_INTEGER FileId; WCHAR FileName[1]; } FILE_ID_BOTH_DIR_INFO, *PFILE_ID_BOTH_DIR_INFO; typedef struct _FILE_BASIC_INFO { LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; DWORD FileAttributes; } FILE_BASIC_INFO, *PFILE_BASIC_INFO; typedef struct _FILE_STANDARD_INFO { LARGE_INTEGER AllocationSize; LARGE_INTEGER EndOfFile; DWORD NumberOfLinks; BOOLEAN DeletePending; BOOLEAN Directory; } FILE_STANDARD_INFO, *PFILE_STANDARD_INFO; typedef struct _FILE_NAME_INFO { DWORD FileNameLength; WCHAR FileName[1]; } FILE_NAME_INFO, *PFILE_NAME_INFO; typedef enum _PRIORITY_HINT { IoPriorityHintVeryLow, IoPriorityHintLow, IoPriorityHintNormal, MaximumIoPriorityHintType } PRIORITY_HINT; typedef struct _FILE_IO_PRIORITY_HINT_INFO { PRIORITY_HINT PriorityHint; } FILE_IO_PRIORITY_HINT_INFO; typedef struct _FILE_ALLOCATION_INFO { LARGE_INTEGER AllocationSize; } FILE_ALLOCATION_INFO, *PFILE_ALLOCATION_INFO; typedef struct _FILE_DISPOSITION_INFO { BOOLEAN DeleteFile; } FILE_DISPOSITION_INFO, *PFILE_DISPOSITION_INFO; typedef struct _FILE_END_OF_FILE_INFO { LARGE_INTEGER EndOfFile; } FILE_END_OF_FILE_INFO, *PFILE_END_OF_FILE_INFO; typedef struct _FILE_RENAME_INFO { BOOLEAN ReplaceIfExists; HANDLE RootDirectory; DWORD FileNameLength; WCHAR FileName[1]; } FILE_RENAME_INFO, *PFILE_RENAME_INFO; typedef struct _FILE_ATTRIBUTE_TAG_INFO { DWORD FileAttributes; DWORD ReparseTag; } FILE_ATTRIBUTE_TAG_INFO, *PFILE_ATTRIBUTE_TAG_INFO; typedef struct _FILE_COMPRESSION_INFO { LARGE_INTEGER CompressedFileSize; WORD CompressionFormat; UCHAR CompressionUnitShift; UCHAR ChunkShift; UCHAR ClusterShift; UCHAR Reserved[3]; } FILE_COMPRESSION_INFO, *PFILE_COMPRESSION_INFO; typedef struct _FILE_REMOTE_PROTOCOL_INFO { USHORT StructureVersion; USHORT StructureSize; ULONG Protocol; USHORT ProtocolMajorVersion; USHORT ProtocolMinorVersion; USHORT ProtocolRevision; USHORT Reserved; ULONG Flags; struct { ULONG Reserved[8]; } GenericReserved; struct { ULONG Reserved[16]; } ProtocolSpecificReserved; } FILE_REMOTE_PROTOCOL_INFO, *PFILE_REMOTE_PROTOCOL_INFO; #define PIPE_ACCESS_INBOUND 1 #define PIPE_ACCESS_OUTBOUND 2 #define PIPE_ACCESS_DUPLEX 3 #define PIPE_CLIENT_END 0 #define PIPE_SERVER_END 1 #define PIPE_READMODE_BYTE 0 #define PIPE_READMODE_MESSAGE 2 #define PIPE_TYPE_BYTE 0 #define PIPE_TYPE_MESSAGE 4 #define PIPE_WAIT 0 #define PIPE_NOWAIT 1 #define PIPE_UNLIMITED_INSTANCES 255 #define NMPWAIT_WAIT_FOREVER 0xffffffff #define NMPWAIT_NOWAIT 0x00000001 #define NMPWAIT_USE_DEFAULT_WAIT 0x00000000 /* Security flags for dwFlagsAndAttributes of CreateFile */ #define SECURITY_ANONYMOUS (SecurityAnonymous << 16) #define SECURITY_IDENTIFICATION (SecurityIdentification << 16) #define SECURITY_IMPERSONATION (SecurityImpersonation << 16) #define SECURITY_DELEGATION (SecurityDelegation << 16) #define SECURITY_CONTEXT_TRACKING 0x00040000 #define SECURITY_EFFECTIVE_ONLY 0x00080000 #define SECURITY_SQOS_PRESENT 0x00100000 #define SECURITY_VALID_SQOS_FLAGS 0x001f0000 typedef struct _SYSTEM_POWER_STATUS { BYTE ACLineStatus; BYTE BatteryFlag; BYTE BatteryLifePercent; BYTE Reserved1; DWORD BatteryLifeTime; DWORD BatteryFullLifeTime; } SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS; typedef enum _POWER_REQUEST_TYPE { PowerRequestDisplayRequired, PowerRequestSystemRequired, PowerRequestAwayModeRequired } POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE; typedef struct _SYSTEM_INFO { union { DWORD dwOemId; /* Obsolete field - do not use */ struct { WORD wProcessorArchitecture; WORD wReserved; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; DWORD dwPageSize; LPVOID lpMinimumApplicationAddress; LPVOID lpMaximumApplicationAddress; DWORD_PTR dwActiveProcessorMask; DWORD dwNumberOfProcessors; DWORD dwProcessorType; DWORD dwAllocationGranularity; WORD wProcessorLevel; WORD wProcessorRevision; } SYSTEM_INFO, *LPSYSTEM_INFO; typedef BOOL (CALLBACK *ENUMRESTYPEPROCA)(HMODULE,LPSTR,LONG_PTR); typedef BOOL (CALLBACK *ENUMRESTYPEPROCW)(HMODULE,LPWSTR,LONG_PTR); typedef BOOL (CALLBACK *ENUMRESNAMEPROCA)(HMODULE,LPCSTR,LPSTR,LONG_PTR); typedef BOOL (CALLBACK *ENUMRESNAMEPROCW)(HMODULE,LPCWSTR,LPWSTR,LONG_PTR); typedef BOOL (CALLBACK *ENUMRESLANGPROCA)(HMODULE,LPCSTR,LPCSTR,WORD,LONG_PTR); typedef BOOL (CALLBACK *ENUMRESLANGPROCW)(HMODULE,LPCWSTR,LPCWSTR,WORD,LONG_PTR); DECL_WINELIB_TYPE_AW(ENUMRESTYPEPROC) DECL_WINELIB_TYPE_AW(ENUMRESNAMEPROC) DECL_WINELIB_TYPE_AW(ENUMRESLANGPROC) /* flags that can be passed to LoadLibraryEx */ #define DONT_RESOLVE_DLL_REFERENCES 0x00000001 #define LOAD_LIBRARY_AS_DATAFILE 0x00000002 #define LOAD_WITH_ALTERED_SEARCH_PATH 0x00000008 #define LOAD_IGNORE_CODE_AUTHZ_LEVEL 0x00000010 #define LOAD_LIBRARY_AS_IMAGE_RESOURCE 0x00000020 #define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE 0x00000040 #define LOAD_LIBRARY_REQUIRE_SIGNED_TARGET 0x00000080 #define LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR 0x00000100 #define LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200 #define LOAD_LIBRARY_SEARCH_USER_DIRS 0x00000400 #define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 #define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x00001000 #define GET_MODULE_HANDLE_EX_FLAG_PIN 1 #define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2 #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 /* flags for SetSearchPathMode */ #define BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE 0x00001 #define BASE_SEARCH_PATH_DISABLE_SAFE_SEARCHMODE 0x10000 #define BASE_SEARCH_PATH_PERMANENT 0x08000 #define BASE_SEARCH_PATH_INVALID_FLAGS (~0x18001) typedef PLDT_ENTRY LPLDT_ENTRY; typedef enum _GET_FILEEX_INFO_LEVELS { GetFileExInfoStandard } GET_FILEEX_INFO_LEVELS; typedef struct _WIN32_FILE_ATTRIBUTES_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; } WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA; /* * This one seems to be a Win32 only definition. It also is defined with * WINAPI instead of CALLBACK in the windows headers. */ typedef DWORD (CALLBACK *LPPROGRESS_ROUTINE)(LARGE_INTEGER, LARGE_INTEGER, LARGE_INTEGER, LARGE_INTEGER, DWORD, DWORD, HANDLE, HANDLE, LPVOID); typedef DWORD (WINAPI *APPLICATION_RECOVERY_CALLBACK)(PVOID); typedef enum _COPYFILE2_MESSAGE_TYPE { COPYFILE2_CALLBACK_NONE = 0, COPYFILE2_CALLBACK_CHUNK_STARTED, COPYFILE2_CALLBACK_CHUNK_FINISHED, COPYFILE2_CALLBACK_STREAM_STARTED, COPYFILE2_CALLBACK_STREAM_FINISHED, COPYFILE2_CALLBACK_POLL_CONTINUE, COPYFILE2_CALLBACK_ERROR, COPYFILE2_CALLBACK_MAX, } COPYFILE2_MESSAGE_TYPE; typedef enum _COPYFILE2_MESSAGE_ACTION { COPYFILE2_PROGRESS_CONTINUE = 0, COPYFILE2_PROGRESS_CANCEL, COPYFILE2_PROGRESS_STOP, COPYFILE2_PROGRESS_QUIET, COPYFILE2_PROGRESS_PAUSE, } COPYFILE2_MESSAGE_ACTION; typedef enum _COPYFILE2_COPY_PHASE { COPYFILE2_PHASE_NONE = 0, COPYFILE2_PHASE_PREPARE_SOURCE, COPYFILE2_PHASE_PREPARE_DEST, COPYFILE2_PHASE_READ_SOURCE, COPYFILE2_PHASE_WRITE_DESTINATION, COPYFILE2_PHASE_SERVER_COPY, COPYFILE2_PHASE_NAMEGRAFT_COPY, COPYFILE2_PHASE_MAX, } COPYFILE2_COPY_PHASE; typedef struct COPYFILE2_MESSAGE { COPYFILE2_MESSAGE_TYPE Type; DWORD dwPadding; union { struct { DWORD dwStreamNumber; DWORD dwReserved; HANDLE hSourceFile; HANDLE hDestinationFile; ULARGE_INTEGER uliChunkNumber; ULARGE_INTEGER uliChunkSize; ULARGE_INTEGER uliStreamSize; ULARGE_INTEGER uliTotalFileSize; } ChunkStarted; struct { DWORD dwStreamNumber; DWORD dwFlags; HANDLE hSourceFile; HANDLE hDestinationFile; ULARGE_INTEGER uliChunkNumber; ULARGE_INTEGER uliChunkSize; ULARGE_INTEGER uliStreamSize; ULARGE_INTEGER uliStreamBytesTransferred; ULARGE_INTEGER uliTotalFileSize; ULARGE_INTEGER uliTotalBytesTransferred; } ChunkFinished; struct { DWORD dwStreamNumber; DWORD dwReserved; HANDLE hSourceFile; HANDLE hDestinationFile; ULARGE_INTEGER uliStreamSize; ULARGE_INTEGER uliTotalFileSize; } StreamStarted; struct { DWORD dwStreamNumber; DWORD dwReserved; HANDLE hSourceFile; HANDLE hDestinationFile; ULARGE_INTEGER uliStreamSize; ULARGE_INTEGER uliStreamBytesTransferred; ULARGE_INTEGER uliTotalFileSize; ULARGE_INTEGER uliTotalBytesTransferred; } StreamFinished; struct { DWORD dwReserved; } PollContinue; struct { COPYFILE2_COPY_PHASE CopyPhase; DWORD dwStreamNumber; HRESULT hrFailure; DWORD dwReserved; ULARGE_INTEGER uliChunkNumber; ULARGE_INTEGER uliStreamSize; ULARGE_INTEGER uliStreamBytesTransferred; ULARGE_INTEGER uliTotalFileSize; ULARGE_INTEGER uliTotalBytesTransferred; } Error; } Info; } COPYFILE2_MESSAGE; typedef COPYFILE2_MESSAGE_ACTION (CALLBACK *PCOPYFILE2_PROGRESS_ROUTINE)(const COPYFILE2_MESSAGE*,PVOID); typedef struct COPYFILE2_EXTENDED_PARAMETERS { DWORD dwSize; DWORD dwCopyFlags; BOOL *pfCancel; PCOPYFILE2_PROGRESS_ROUTINE pProgressRoutine; PVOID pvCallbackContext; } COPYFILE2_EXTENDED_PARAMETERS; #define CREATE_EVENT_MANUAL_RESET 1 #define CREATE_EVENT_INITIAL_SET 2 #define CREATE_MUTEX_INITIAL_OWNER 1 #define CREATE_WAITABLE_TIMER_MANUAL_RESET 1 #define WAIT_FAILED 0xffffffff #define WAIT_OBJECT_0 0 #define WAIT_ABANDONED STATUS_ABANDONED_WAIT_0 #define WAIT_ABANDONED_0 STATUS_ABANDONED_WAIT_0 #define WAIT_IO_COMPLETION STATUS_USER_APC #define STILL_ACTIVE STATUS_PENDING #define FILE_BEGIN 0 #define FILE_CURRENT 1 #define FILE_END 2 #define FILE_MAP_COPY 0x00000001 #define FILE_MAP_WRITE 0x00000002 #define FILE_MAP_READ 0x00000004 #define FILE_MAP_ALL_ACCESS 0x000f001f #define FILE_MAP_EXECUTE 0x00000020 #define MOVEFILE_REPLACE_EXISTING 0x00000001 #define MOVEFILE_COPY_ALLOWED 0x00000002 #define MOVEFILE_DELAY_UNTIL_REBOOT 0x00000004 #define MOVEFILE_WRITE_THROUGH 0x00000008 #define REPLACEFILE_WRITE_THROUGH 0x00000001 #define REPLACEFILE_IGNORE_MERGE_ERRORS 0x00000002 #define FS_CASE_SENSITIVE FILE_CASE_SENSITIVE_SEARCH #define FS_CASE_IS_PRESERVED FILE_CASE_PRESERVED_NAMES #define FS_UNICODE_STORED_ON_DISK FILE_UNICODE_ON_DISK #define FS_PERSISTENT_ACLS FILE_PERSISTENT_ACLS #define FS_VOL_IS_COMPRESSED FILE_VOLUME_IS_COMPRESSED #define FS_FILE_COMPRESSION FILE_FILE_COMPRESSION #define MUTEX_MODIFY_STATE MUTANT_QUERY_STATE #define MUTEX_ALL_ACCESS MUTANT_ALL_ACCESS #define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION #define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT #define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT #define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP #define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED #define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND #define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO #define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT #define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION #define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW #define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK #define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW #define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO #define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW #define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION #define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR #define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION #define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION #define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW #define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION #define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION #define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE #define CONTROL_C_EXIT STATUS_CONTROL_C_EXIT #define HANDLE_FLAG_INHERIT 0x00000001 #define HANDLE_FLAG_PROTECT_FROM_CLOSE 0x00000002 #define HINSTANCE_ERROR 32 #define THREAD_PRIORITY_LOWEST THREAD_BASE_PRIORITY_MIN #define THREAD_PRIORITY_BELOW_NORMAL (THREAD_PRIORITY_LOWEST+1) #define THREAD_PRIORITY_NORMAL 0 #define THREAD_PRIORITY_HIGHEST THREAD_BASE_PRIORITY_MAX #define THREAD_PRIORITY_ABOVE_NORMAL (THREAD_PRIORITY_HIGHEST-1) #define THREAD_PRIORITY_ERROR_RETURN (0x7fffffff) #define THREAD_PRIORITY_TIME_CRITICAL THREAD_BASE_PRIORITY_LOWRT #define THREAD_PRIORITY_IDLE THREAD_BASE_PRIORITY_IDLE /* flags to FormatMessage */ #define FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000100 #define FORMAT_MESSAGE_IGNORE_INSERTS 0x00000200 #define FORMAT_MESSAGE_FROM_STRING 0x00000400 #define FORMAT_MESSAGE_FROM_HMODULE 0x00000800 #define FORMAT_MESSAGE_FROM_SYSTEM 0x00001000 #define FORMAT_MESSAGE_ARGUMENT_ARRAY 0x00002000 #define FORMAT_MESSAGE_MAX_WIDTH_MASK 0x000000FF /* flags to ACTCTX[AW] */ #define ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID (0x00000001) #define ACTCTX_FLAG_LANGID_VALID (0x00000002) #define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID (0x00000004) #define ACTCTX_FLAG_RESOURCE_NAME_VALID (0x00000008) #define ACTCTX_FLAG_SET_PROCESS_DEFAULT (0x00000010) #define ACTCTX_FLAG_APPLICATION_NAME_VALID (0x00000020) #define ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF (0x00000040) #define ACTCTX_FLAG_HMODULE_VALID (0x00000080) /* flags to DeactiveActCtx */ #define DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION (0x00000001) /* flags to FindActCtxSection{Guid,String[AW]} */ #define FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX (0x00000001) #define FIND_ACTCTX_SECTION_KEY_RETURN_FLAGS (0x00000002) #define FIND_ACTCTX_SECTION_KEY_RETURN_ASSEMBLY_METADATA (0x00000004) /* flags to QueryActCtxW */ #define QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX (0x00000004) #define QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE (0x00000008) #define QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS (0x00000010) #define QUERY_ACTCTX_FLAG_NO_ADDREF (0x80000000) typedef struct tagACTCTXA { ULONG cbSize; DWORD dwFlags; LPCSTR lpSource; USHORT wProcessorArchitecture; LANGID wLangId; LPCSTR lpAssemblyDirectory; LPCSTR lpResourceName; LPCSTR lpApplicationName; HMODULE hModule; } ACTCTXA, *PACTCTXA; typedef struct tagACTCTXW { ULONG cbSize; DWORD dwFlags; LPCWSTR lpSource; USHORT wProcessorArchitecture; LANGID wLangId; LPCWSTR lpAssemblyDirectory; LPCWSTR lpResourceName; LPCWSTR lpApplicationName; HMODULE hModule; } ACTCTXW, *PACTCTXW; DECL_WINELIB_TYPE_AW(ACTCTX) DECL_WINELIB_TYPE_AW(PACTCTX) typedef const ACTCTXA *PCACTCTXA; typedef const ACTCTXW *PCACTCTXW; DECL_WINELIB_TYPE_AW(PCACTCTX) typedef struct tagACTCTX_SECTION_KEYED_DATA_2600 { ULONG cbSize; ULONG ulDataFormatVersion; PVOID lpData; ULONG ulLength; PVOID lpSectionGlobalData; ULONG ulSectionGlobalDataLength; PVOID lpSectionBase; ULONG ulSectionTotalLength; HANDLE hActCtx; ULONG ulAssemblyRosterIndex; } ACTCTX_SECTION_KEYED_DATA_2600, *PACTCTX_SECTION_KEYED_DATA_2600; typedef const ACTCTX_SECTION_KEYED_DATA_2600 *PCACTCTX_SECTION_KEYED_DATA_2600; typedef struct tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA { PVOID lpInformation; PVOID lpSectionBase; ULONG ulSectionLength; PVOID lpSectionGlobalDataBase; ULONG ulSectionGlobalDataLength; } ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA; typedef const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA *PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA; typedef struct tagACTCTX_SECTION_KEYED_DATA { ULONG cbSize; ULONG ulDataFormatVersion; PVOID lpData; ULONG ulLength; PVOID lpSectionGlobalData; ULONG ulSectionGlobalDataLength; PVOID lpSectionBase; ULONG ulSectionTotalLength; HANDLE hActCtx; ULONG ulAssemblyRosterIndex; /* Non 2600 extra fields */ ULONG ulFlags; ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata; } ACTCTX_SECTION_KEYED_DATA, *PACTCTX_SECTION_KEYED_DATA; typedef const ACTCTX_SECTION_KEYED_DATA *PCACTCTX_SECTION_KEYED_DATA; typedef struct _ACTIVATION_CONTEXT_BASIC_INFORMATION { HANDLE hActCtx; DWORD dwFlags; } ACTIVATION_CONTEXT_BASIC_INFORMATION, *PACTIVATION_CONTEXT_BASIC_INFORMATION; typedef BOOL (WINAPI *PQUERYACTCTXW_FUNC)(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T *); typedef struct tagCOMSTAT { DWORD fCtsHold : 1; DWORD fDsrHold : 1; DWORD fRlsdHold : 1; DWORD fXoffHold : 1; DWORD fXoffSent : 1; DWORD fEof : 1; DWORD fTxim : 1; DWORD fReserved : 25; DWORD cbInQue; DWORD cbOutQue; } COMSTAT, *LPCOMSTAT; typedef struct tagDCB { DWORD DCBlength; DWORD BaudRate; unsigned fBinary :1; unsigned fParity :1; unsigned fOutxCtsFlow :1; unsigned fOutxDsrFlow :1; unsigned fDtrControl :2; unsigned fDsrSensitivity :1; unsigned fTXContinueOnXoff :1; unsigned fOutX :1; unsigned fInX :1; unsigned fErrorChar :1; unsigned fNull :1; unsigned fRtsControl :2; unsigned fAbortOnError :1; unsigned fDummy2 :17; WORD wReserved; WORD XonLim; WORD XoffLim; BYTE ByteSize; BYTE Parity; BYTE StopBits; char XonChar; char XoffChar; char ErrorChar; char EofChar; char EvtChar; WORD wReserved1; } DCB, *LPDCB; typedef struct tagCOMMCONFIG { DWORD dwSize; WORD wVersion; WORD wReserved; DCB dcb; DWORD dwProviderSubType; DWORD dwProviderOffset; DWORD dwProviderSize; DWORD wcProviderData[1]; } COMMCONFIG, *LPCOMMCONFIG; typedef struct tagCOMMPROP { WORD wPacketLength; WORD wPacketVersion; DWORD dwServiceMask; DWORD dwReserved1; DWORD dwMaxTxQueue; DWORD dwMaxRxQueue; DWORD dwMaxBaud; DWORD dwProvSubType; DWORD dwProvCapabilities; DWORD dwSettableParams; DWORD dwSettableBaud; WORD wSettableData; WORD wSettableStopParity; DWORD dwCurrentTxQueue; DWORD dwCurrentRxQueue; DWORD dwProvSpec1; DWORD dwProvSpec2; WCHAR wcProvChar[1]; } COMMPROP, *LPCOMMPROP; #define SP_SERIALCOMM ((DWORD)1) #define BAUD_075 ((DWORD)0x01) #define BAUD_110 ((DWORD)0x02) #define BAUD_134_5 ((DWORD)0x04) #define BAUD_150 ((DWORD)0x08) #define BAUD_300 ((DWORD)0x10) #define BAUD_600 ((DWORD)0x20) #define BAUD_1200 ((DWORD)0x40) #define BAUD_1800 ((DWORD)0x80) #define BAUD_2400 ((DWORD)0x100) #define BAUD_4800 ((DWORD)0x200) #define BAUD_7200 ((DWORD)0x400) #define BAUD_9600 ((DWORD)0x800) #define BAUD_14400 ((DWORD)0x1000) #define BAUD_19200 ((DWORD)0x2000) #define BAUD_38400 ((DWORD)0x4000) #define BAUD_56K ((DWORD)0x8000) #define BAUD_57600 ((DWORD)0x40000) #define BAUD_115200 ((DWORD)0x20000) #define BAUD_128K ((DWORD)0x10000) #define BAUD_USER ((DWORD)0x10000000) #define PST_FAX ((DWORD)0x21) #define PST_LAT ((DWORD)0x101) #define PST_MODEM ((DWORD)0x06) #define PST_NETWORK_BRIDGE ((DWORD)0x100) #define PST_PARALLELPORT ((DWORD)0x02) #define PST_RS232 ((DWORD)0x01) #define PST_RS442 ((DWORD)0x03) #define PST_RS423 ((DWORD)0x04) #define PST_RS449 ((DWORD)0x06) #define PST_SCANNER ((DWORD)0x22) #define PST_TCPIP_TELNET ((DWORD)0x102) #define PST_UNSPECIFIED ((DWORD)0x00) #define PST_X25 ((DWORD)0x103) #define PCF_16BITMODE ((DWORD)0x200) #define PCF_DTRDSR ((DWORD)0x01) #define PCF_INTTIMEOUTS ((DWORD)0x80) #define PCF_PARITY_CHECK ((DWORD)0x08) #define PCF_RLSD ((DWORD)0x04) #define PCF_RTSCTS ((DWORD)0x02) #define PCF_SETXCHAR ((DWORD)0x20) #define PCF_SPECIALCHARS ((DWORD)0x100) #define PCF_TOTALTIMEOUTS ((DWORD)0x40) #define PCF_XONXOFF ((DWORD)0x10) #define SP_BAUD ((DWORD)0x02) #define SP_DATABITS ((DWORD)0x04) #define SP_HANDSHAKING ((DWORD)0x10) #define SP_PARITY ((DWORD)0x01) #define SP_PARITY_CHECK ((DWORD)0x20) #define SP_RLSD ((DWORD)0x40) #define SP_STOPBITS ((DWORD)0x08) #define DATABITS_5 ((DWORD)0x01) #define DATABITS_6 ((DWORD)0x02) #define DATABITS_7 ((DWORD)0x04) #define DATABITS_8 ((DWORD)0x08) #define DATABITS_16 ((DWORD)0x10) #define DATABITS_16X ((DWORD)0x20) #define STOPBITS_10 ((DWORD)1) #define STOPBITS_15 ((DWORD)2) #define STOPBITS_20 ((DWORD)4) #undef PARITY_NONE /* defined on Android */ #define PARITY_NONE ((DWORD)0x100) #define PARITY_ODD ((DWORD)0x200) #define PARITY_EVEN ((DWORD)0x400) #define PARITY_MARK ((DWORD)0x800) #define PARITY_SPACE ((DWORD)0x1000) typedef struct tagCOMMTIMEOUTS { DWORD ReadIntervalTimeout; DWORD ReadTotalTimeoutMultiplier; DWORD ReadTotalTimeoutConstant; DWORD WriteTotalTimeoutMultiplier; DWORD WriteTotalTimeoutConstant; } COMMTIMEOUTS,*LPCOMMTIMEOUTS; #define GET_TAPE_MEDIA_INFORMATION 0 #define GET_TAPE_DRIVE_INFORMATION 1 #define SET_TAPE_MEDIA_INFORMATION 0 #define SET_TAPE_DRIVE_INFORMATION 1 #define PROCESS_NAME_NATIVE 1 typedef void (CALLBACK *PAPCFUNC)(ULONG_PTR); typedef void (CALLBACK *PTIMERAPCROUTINE)(LPVOID,DWORD,DWORD); typedef enum _COMPUTER_NAME_FORMAT { ComputerNameNetBIOS, ComputerNameDnsHostname, ComputerNameDnsDomain, ComputerNameDnsFullyQualified, ComputerNamePhysicalNetBIOS, ComputerNamePhysicalDnsHostname, ComputerNamePhysicalDnsDomain, ComputerNamePhysicalDnsFullyQualified, ComputerNameMax } COMPUTER_NAME_FORMAT; #define HW_PROFILE_GUIDLEN 39 #define MAX_PROFILE_LEN 80 #define DOCKINFO_UNDOCKED 0x1 #define DOCKINFO_DOCKED 0x2 #define DOCKINFO_USER_SUPPLIED 0x4 #define DOCKINFO_USER_UNDOCKED (DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED) #define DOCKINFO_USER_DOCKED (DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED) typedef struct tagHW_PROFILE_INFOA { DWORD dwDockInfo; CHAR szHwProfileGuid[HW_PROFILE_GUIDLEN]; CHAR szHwProfileName[MAX_PROFILE_LEN]; } HW_PROFILE_INFOA, *LPHW_PROFILE_INFOA; typedef struct tagHW_PROFILE_INFOW { DWORD dwDockInfo; WCHAR szHwProfileGuid[HW_PROFILE_GUIDLEN]; WCHAR szHwProfileName[MAX_PROFILE_LEN]; } HW_PROFILE_INFOW, *LPHW_PROFILE_INFOW; DECL_WINELIB_TYPE_AW(HW_PROFILE_INFO) DECL_WINELIB_TYPE_AW(LPHW_PROFILE_INFO) typedef enum _DEP_SYSTEM_POLICY_TYPE { AlwaysOff = 0, AlwaysOn = 1, OptIn = 2, OptOut = 3 } DEP_SYSTEM_POLICY_TYPE; #define PROCESS_DEP_ENABLE 1 #define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 2 /* Event Logging */ #define EVENTLOG_FULL_INFO 0 typedef struct _EVENTLOG_FULL_INFORMATION { DWORD dwFull; } EVENTLOG_FULL_INFORMATION, *LPEVENTLOG_FULL_INFORMATION; /* Stream data structures and defines */ /*the types of backup data -- WIN32_STREAM_ID.dwStreamId below*/ #define BACKUP_INVALID 0 #define BACKUP_DATA 1 #define BACKUP_EA_DATA 2 #define BACKUP_SECURITY_DATA 3 #define BACKUP_ALTERNATE_DATA 4 #define BACKUP_LINK 5 #define BACKUP_PROPERTY_DATA 6 #define BACKUP_OBJECT_ID 7 #define BACKUP_REPARSE_DATA 8 #define BACKUP_SPARSE_BLOCK 9 /*flags for WIN32_STREAM_ID.dwStreamAttributes below*/ #define STREAM_NORMAL_ATTRIBUTE 0 #define STREAM_MODIFIED_WHEN_READ 1 #define STREAM_CONTAINS_SECURITY 2 #define STREAM_CONTAINS_PROPERTIES 4 #define STREAM_SPARSE_ATTRIBUTE 8 #include typedef struct _WIN32_STREAM_ID { DWORD dwStreamId; DWORD dwStreamAttributes; LARGE_INTEGER DECLSPEC_ALIGN(8) Size; DWORD dwStreamNameSize; WCHAR cStreamName[ANYSIZE_ARRAY]; } WIN32_STREAM_ID, *LPWIN32_STREAM_ID; #include /* GetBinaryType return values. */ #define SCS_32BIT_BINARY 0 #define SCS_DOS_BINARY 1 #define SCS_WOW_BINARY 2 #define SCS_PIF_BINARY 3 #define SCS_POSIX_BINARY 4 #define SCS_OS216_BINARY 5 #define SCS_64BIT_BINARY 6 /* flags for DefineDosDevice */ #define DDD_RAW_TARGET_PATH 0x00000001 #define DDD_REMOVE_DEFINITION 0x00000002 #define DDD_EXACT_MATCH_ON_REMOVE 0x00000004 #define DDD_NO_BROADCAST_SYSTEM 0x00000008 #define DDD_LUID_BROADCAST_DRIVE 0x00000010 #define LOGON_WITH_PROFILE 0x00000001 #define LOGON_NETCREDENTIALS_ONLY 0x00000002 #define LOGON_ZERO_PASSWORD_BUFFER 0x80000000 /* one-time initialisation API */ typedef RTL_RUN_ONCE INIT_ONCE; typedef PRTL_RUN_ONCE PINIT_ONCE; typedef PRTL_RUN_ONCE LPINIT_ONCE; #define INIT_ONCE_STATIC_INIT RTL_RUN_ONCE_INIT #define INIT_ONCE_CHECK_ONLY RTL_RUN_ONCE_CHECK_ONLY #define INIT_ONCE_ASYNC RTL_RUN_ONCE_ASYNC #define INIT_ONCE_INIT_FAILED RTL_RUN_ONCE_INIT_FAILED /* initialization callback prototype */ typedef BOOL (WINAPI *PINIT_ONCE_FN)(PINIT_ONCE,PVOID,PVOID*); typedef struct _REASON_CONTEXT { ULONG Version; DWORD Flags; union { struct { HMODULE LocalizedReasonModule; ULONG LocalizedReasonId; ULONG ReasonStringCount; LPWSTR *ReasonStrings; } Detailed; LPWSTR SimpleReasonString; } Reason; } REASON_CONTEXT, *PREASON_CONTEXT; #define RESOURCE_ENUM_LN 0x0001 #define RESOURCE_ENUM_MUI 0x0002 #define RESOURCE_ENUM_MUI_SYSTEM 0x0004 #define RESOURCE_ENUM_VALIDATE 0x0008 typedef struct _PROC_THREAD_ATTRIBUTE_LIST *PPROC_THREAD_ATTRIBUTE_LIST, *LPPROC_THREAD_ATTRIBUTE_LIST; #define PROC_THREAD_ATTRIBUTE_NUMBER 0x0000ffff #define PROC_THREAD_ATTRIBUTE_THREAD 0x00010000 #define PROC_THREAD_ATTRIBUTE_INPUT 0x00020000 #define PROC_THREAD_ATTRIBUTE_ADDITIVE 0x00040000 typedef enum _PROC_THREAD_ATTRIBUTE_NUM { ProcThreadAttributeParentProcess = 0, ProcThreadAttributeHandleList = 2, ProcThreadAttributeGroupAffinity = 3, ProcThreadAttributeIdealProcessor = 5, ProcThreadAttributeUmsThread = 6, ProcThreadAttributeMitigationPolicy = 7, ProcThreadAttributeSecurityCapabilities = 9, ProcThreadAttributeProtectionLevel = 11, ProcThreadAttributeJobList = 13, ProcThreadAttributeChildProcessPolicy = 14, ProcThreadAttributeAllApplicationPackagesPolicy = 15, ProcThreadAttributeWin32kFilter = 16, ProcThreadAttributeSafeOpenPromptOriginClaim = 17, } PROC_THREAD_ATTRIBUTE_NUM; #define PROC_THREAD_ATTRIBUTE_PARENT_PROCESS (ProcThreadAttributeParentProcess | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_HANDLE_LIST (ProcThreadAttributeHandleList | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY (ProcThreadAttributeGroupAffinity | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR (ProcThreadAttributeIdealProcessor | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_UMS_THREAD (ProcThreadAttributeUmsThread | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY (ProcThreadAttributeMitigationPolicy | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES (ProcThreadAttributeSecurityCapabilities | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL (ProcThreadAttributeProtectionLevel | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_JOB_LIST (ProcThreadAttributeJobList | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY (ProcThreadAttributeChildProcessPolicy | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_ALL_APPLICATION_PACKAGES_POLICY (ProcThreadAttributeAllApplicationPackagesPolicy | PROC_THREAD_ATTRIBUTE_INPUT) #define PROC_THREAD_ATTRIBUTE_WIN32K_FILTER (ProcThreadAttributeWin32kFilter | PROC_THREAD_ATTRIBUTE_INPUT) #define SYMBOLIC_LINK_FLAG_DIRECTORY (0x1) #define VALID_SYMBOLIC_LINK_FLAGS SYMBOLIC_LINK_FLAG_DIRECTORY typedef void *PUMS_CONTEXT; typedef void *PUMS_COMPLETION_LIST; typedef PRTL_UMS_SCHEDULER_ENTRY_POINT PUMS_SCHEDULER_ENTRY_POINT; typedef struct _UMS_SCHEDULER_STARTUP_INFO { ULONG UmsVersion; PUMS_COMPLETION_LIST CompletionList; PUMS_SCHEDULER_ENTRY_POINT SchedulerProc; PVOID SchedulerParam; } UMS_SCHEDULER_STARTUP_INFO, *PUMS_SCHEDULER_STARTUP_INFO; typedef enum _RTL_UMS_SCHEDULER_REASON UMS_SCHEDULER_REASON; typedef enum _RTL_UMS_THREAD_INFO_CLASS UMS_THREAD_INFO_CLASS, *PUMS_THREAD_INFO_CLASS; WINBASEAPI BOOL WINAPI ActivateActCtx(HANDLE,ULONG_PTR *); WINADVAPI BOOL WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID); WINADVAPI BOOL WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID); WINADVAPI BOOL WINAPI AddAccessDeniedAce(PACL,DWORD,DWORD,PSID); WINADVAPI BOOL WINAPI AddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID); WINADVAPI BOOL WINAPI AddAce(PACL,DWORD,DWORD,LPVOID,DWORD); WINBASEAPI ATOM WINAPI AddAtomA(LPCSTR); WINBASEAPI ATOM WINAPI AddAtomW(LPCWSTR); #define AddAtom WINELIB_NAME_AW(AddAtom) WINADVAPI BOOL WINAPI AddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL); WINADVAPI BOOL WINAPI AddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL); WINADVAPI BOOL WINAPI AddMandatoryAce(PACL,DWORD,DWORD,DWORD,PSID); WINBASEAPI VOID WINAPI AddRefActCtx(HANDLE); WINBASEAPI PVOID WINAPI AddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER); WINADVAPI BOOL WINAPI AdjustTokenGroups(HANDLE,BOOL,PTOKEN_GROUPS,DWORD,PTOKEN_GROUPS,PDWORD); WINADVAPI BOOL WINAPI AccessCheck(PSECURITY_DESCRIPTOR,HANDLE,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL); WINADVAPI BOOL WINAPI AccessCheckAndAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL); WINADVAPI BOOL WINAPI AccessCheckAndAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL); #define AccessCheckAndAuditAlarm WINELIB_NAME_AW(AccessCheckAndAuditAlarm) WINADVAPI BOOL WINAPI AccessCheckByType(PSECURITY_DESCRIPTOR,PSID,HANDLE,DWORD,POBJECT_TYPE_LIST,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL); WINBASEAPI VOID WINAPI AcquireSRWLockExclusive(PSRWLOCK); WINBASEAPI VOID WINAPI AcquireSRWLockShared(PSRWLOCK); WINADVAPI BOOL WINAPI AdjustTokenPrivileges(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD); WINADVAPI BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *); WINADVAPI BOOL WINAPI AllocateLocallyUniqueId(PLUID); WINADVAPI BOOL WINAPI AreAllAccessesGranted(DWORD,DWORD); WINADVAPI BOOL WINAPI AreAnyAccessesGranted(DWORD,DWORD); WINBASEAPI BOOL WINAPI AreFileApisANSI(void); WINBASEAPI BOOL WINAPI AssignProcessToJobObject(HANDLE,HANDLE); WINADVAPI BOOL WINAPI BackupEventLogA(HANDLE,LPCSTR); WINADVAPI BOOL WINAPI BackupEventLogW(HANDLE,LPCWSTR); #define BackupEventLog WINELIB_NAME_AW(BackupEventLog) WINBASEAPI BOOL WINAPI BackupRead(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*); WINBASEAPI BOOL WINAPI BackupSeek(HANDLE,DWORD,DWORD,LPDWORD,LPDWORD,LPVOID*); WINBASEAPI BOOL WINAPI BackupWrite(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*); WINBASEAPI BOOL WINAPI Beep(DWORD,DWORD); WINBASEAPI HANDLE WINAPI BeginUpdateResourceA(LPCSTR,BOOL); WINBASEAPI HANDLE WINAPI BeginUpdateResourceW(LPCWSTR,BOOL); #define BeginUpdateResource WINELIB_NAME_AW(BeginUpdateResource) WINBASEAPI BOOL WINAPI BindIoCompletionCallback(HANDLE,LPOVERLAPPED_COMPLETION_ROUTINE,ULONG); WINBASEAPI BOOL WINAPI BuildCommDCBA(LPCSTR,LPDCB); WINBASEAPI BOOL WINAPI BuildCommDCBW(LPCWSTR,LPDCB); #define BuildCommDCB WINELIB_NAME_AW(BuildCommDCB) WINBASEAPI BOOL WINAPI BuildCommDCBAndTimeoutsA(LPCSTR,LPDCB,LPCOMMTIMEOUTS); WINBASEAPI BOOL WINAPI BuildCommDCBAndTimeoutsW(LPCWSTR,LPDCB,LPCOMMTIMEOUTS); #define BuildCommDCBAndTimeouts WINELIB_NAME_AW(BuildCommDCBAndTimeouts) WINBASEAPI BOOL WINAPI CallNamedPipeA(LPCSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD); WINBASEAPI BOOL WINAPI CallNamedPipeW(LPCWSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD); #define CallNamedPipe WINELIB_NAME_AW(CallNamedPipe) WINBASEAPI BOOL WINAPI CancelIo(HANDLE); WINBASEAPI BOOL WINAPI CancelIoEx(HANDLE,LPOVERLAPPED); WINBASEAPI BOOL WINAPI CancelSynchronousIo(HANDLE); WINBASEAPI BOOL WINAPI CancelTimerQueueTimer(HANDLE,HANDLE); WINBASEAPI BOOL WINAPI CancelWaitableTimer(HANDLE); WINBASEAPI BOOL WINAPI CheckNameLegalDOS8Dot3A(const char*,char*,DWORD,BOOL*,BOOL*); WINBASEAPI BOOL WINAPI CheckNameLegalDOS8Dot3W(const WCHAR*, char*,DWORD,BOOL*,BOOL*); WINBASEAPI BOOL WINAPI CheckRemoteDebuggerPresent(HANDLE,BOOL*); WINBASEAPI BOOL WINAPI ChangeTimerQueueTimer(HANDLE,HANDLE,ULONG,ULONG); WINADVAPI BOOL WINAPI CheckTokenMembership(HANDLE,PSID,PBOOL); WINBASEAPI BOOL WINAPI ClearCommBreak(HANDLE); WINBASEAPI BOOL WINAPI ClearCommError(HANDLE,LPDWORD,LPCOMSTAT); WINADVAPI VOID WINAPI CloseEncryptedFileRaw(PVOID); WINADVAPI BOOL WINAPI ClearEventLogA(HANDLE,LPCSTR); WINADVAPI BOOL WINAPI ClearEventLogW(HANDLE,LPCWSTR); #define ClearEventLog WINELIB_NAME_AW(ClearEventLog) WINADVAPI BOOL WINAPI CloseEventLog(HANDLE); WINBASEAPI BOOL WINAPI CloseHandle(HANDLE); WINBASEAPI VOID WINAPI CloseThreadpool(PTP_POOL); WINBASEAPI VOID WINAPI CloseThreadpoolCleanupGroup(PTP_CLEANUP_GROUP); WINBASEAPI VOID WINAPI CloseThreadpoolCleanupGroupMembers(PTP_CLEANUP_GROUP,BOOL,PVOID); WINBASEAPI VOID WINAPI CloseThreadpoolTimer(PTP_TIMER); WINBASEAPI VOID WINAPI CloseThreadpoolWait(PTP_WAIT); WINBASEAPI VOID WINAPI CloseThreadpoolWork(PTP_WORK); WINBASEAPI BOOL WINAPI CommConfigDialogA(LPCSTR,HWND,LPCOMMCONFIG); WINBASEAPI BOOL WINAPI CommConfigDialogW(LPCWSTR,HWND,LPCOMMCONFIG); #define CommConfigDialog WINELIB_NAME_AW(CommConfigDialog) WINBASEAPI BOOL WINAPI ConnectNamedPipe(HANDLE,LPOVERLAPPED); WINBASEAPI BOOL WINAPI ContinueDebugEvent(DWORD,DWORD,DWORD); WINBASEAPI HANDLE WINAPI ConvertToGlobalHandle(HANDLE hSrc); WINBASEAPI BOOL WINAPI CopyFileA(LPCSTR,LPCSTR,BOOL); WINBASEAPI BOOL WINAPI CopyFileW(LPCWSTR,LPCWSTR,BOOL); #define CopyFile WINELIB_NAME_AW(CopyFile) WINBASEAPI HRESULT WINAPI CopyFile2(PCWSTR,PCWSTR,COPYFILE2_EXTENDED_PARAMETERS*); WINBASEAPI BOOL WINAPI CopyFileExA(LPCSTR, LPCSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD); WINBASEAPI BOOL WINAPI CopyFileExW(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD); #define CopyFileEx WINELIB_NAME_AW(CopyFileEx) WINADVAPI BOOL WINAPI CopySid(DWORD,PSID,PSID); WINBASEAPI INT WINAPI CompareFileTime(const FILETIME*,const FILETIME*); WINBASEAPI BOOL WINAPI ConvertFiberToThread(void); WINBASEAPI LPVOID WINAPI ConvertThreadToFiber(LPVOID); WINBASEAPI LPVOID WINAPI ConvertThreadToFiberEx(LPVOID,DWORD); WINADVAPI BOOL WINAPI ConvertToAutoInheritPrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID*,BOOL,PGENERIC_MAPPING); WINBASEAPI HANDLE WINAPI CreateActCtxA(PCACTCTXA); WINBASEAPI HANDLE WINAPI CreateActCtxW(PCACTCTXW); #define CreateActCtx WINELIB_NAME_AW(CreateActCtx) WINBASEAPI BOOL WINAPI CreateDirectoryA(LPCSTR,LPSECURITY_ATTRIBUTES); WINBASEAPI BOOL WINAPI CreateDirectoryW(LPCWSTR,LPSECURITY_ATTRIBUTES); #define CreateDirectory WINELIB_NAME_AW(CreateDirectory) WINBASEAPI BOOL WINAPI CreateDirectoryExA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES); WINBASEAPI BOOL WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES); #define CreateDirectoryEx WINELIB_NAME_AW(CreateDirectoryEx) WINBASEAPI HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI CreateEventW(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCWSTR); #define CreateEvent WINELIB_NAME_AW(CreateEvent) WINBASEAPI HANDLE WINAPI CreateEventExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD); WINBASEAPI HANDLE WINAPI CreateEventExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD); #define CreateEventEx WINELIB_NAME_AW(CreateEventEx) WINBASEAPI LPVOID WINAPI CreateFiber(SIZE_T,LPFIBER_START_ROUTINE,LPVOID); WINBASEAPI LPVOID WINAPI CreateFiberEx(SIZE_T,SIZE_T,DWORD,LPFIBER_START_ROUTINE,LPVOID); WINBASEAPI HANDLE WINAPI CreateFileA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE); WINBASEAPI HANDLE WINAPI CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE); #define CreateFile WINELIB_NAME_AW(CreateFile) WINBASEAPI HANDLE WINAPI CreateFileMappingA(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCSTR); WINBASEAPI HANDLE WINAPI CreateFileMappingW(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCWSTR); #define CreateFileMapping WINELIB_NAME_AW(CreateFileMapping) WINBASEAPI HANDLE WINAPI CreateIoCompletionPort(HANDLE,HANDLE,ULONG_PTR,DWORD); WINBASEAPI HANDLE WINAPI CreateJobObjectA(LPSECURITY_ATTRIBUTES,LPCSTR); WINBASEAPI HANDLE WINAPI CreateJobObjectW(LPSECURITY_ATTRIBUTES,LPCWSTR); #define CreateJobObject WINELIB_NAME_AW(CreateJobObject) WINBASEAPI HANDLE WINAPI CreateMailslotA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES); WINBASEAPI HANDLE WINAPI CreateMailslotW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES); #define CreateMailslot WINELIB_NAME_AW(CreateMailslot) WINBASEAPI HANDLE WINAPI CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE); WINBASEAPI HANDLE WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR); #define CreateMutex WINELIB_NAME_AW(CreateMutex) WINBASEAPI HANDLE WINAPI CreateMutexExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD); WINBASEAPI HANDLE WINAPI CreateMutexExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD); #define CreateMutexEx WINELIB_NAME_AW(CreateMutexEx) WINBASEAPI HANDLE WINAPI CreateNamedPipeA(LPCSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES); WINBASEAPI HANDLE WINAPI CreateNamedPipeW(LPCWSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES); #define CreateNamedPipe WINELIB_NAME_AW(CreateNamedPipe) WINBASEAPI BOOL WINAPI CreatePipe(PHANDLE,PHANDLE,LPSECURITY_ATTRIBUTES,DWORD); WINADVAPI BOOL WINAPI CreatePrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOL,HANDLE,PGENERIC_MAPPING); WINADVAPI BOOL WINAPI CreatePrivateObjectSecurityEx(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID*,BOOL,ULONG,HANDLE,PGENERIC_MAPPING); WINADVAPI BOOL WINAPI CreatePrivateObjectSecurityWithMultipleInheritance(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID**,ULONG,BOOL,ULONG,HANDLE,PGENERIC_MAPPING); WINBASEAPI PTP_POOL WINAPI CreateThreadpool(PVOID); WINBASEAPI PTP_CLEANUP_GROUP WINAPI CreateThreadpoolCleanupGroup(void); WINBASEAPI PTP_IO WINAPI CreateThreadpoolIo(HANDLE,PTP_WIN32_IO_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON); WINBASEAPI PTP_TIMER WINAPI CreateThreadpoolTimer(PTP_TIMER_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON); WINBASEAPI PTP_WAIT WINAPI CreateThreadpoolWait(PTP_WAIT_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON); WINBASEAPI PTP_WORK WINAPI CreateThreadpoolWork(PTP_WORK_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON); WINBASEAPI BOOL WINAPI CreateProcessA(LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION); WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION); #define CreateProcess WINELIB_NAME_AW(CreateProcess) WINADVAPI BOOL WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION); WINADVAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION); #define CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser) WINADVAPI BOOL WINAPI CreateProcessWithLogonW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPWSTR,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION); WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD); WINADVAPI BOOL WINAPI CreateRestrictedToken(HANDLE,DWORD,DWORD,PSID_AND_ATTRIBUTES,DWORD,PLUID_AND_ATTRIBUTES,DWORD,PSID_AND_ATTRIBUTES,PHANDLE); WINBASEAPI HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR); WINBASEAPI HANDLE WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR); #define CreateSemaphore WINELIB_NAME_AW(CreateSemaphore) WINBASEAPI HANDLE WINAPI CreateSemaphoreExA(SECURITY_ATTRIBUTES*,LONG,LONG,LPCSTR,DWORD,DWORD); WINBASEAPI HANDLE WINAPI CreateSemaphoreExW(SECURITY_ATTRIBUTES*,LONG,LONG,LPCWSTR,DWORD,DWORD); #define CreateSemaphoreEx WINELIB_NAME_AW(CreateSemaphoreEx) WINBASEAPI BOOLEAN WINAPI CreateSymbolicLinkA(LPCSTR,LPCSTR,DWORD); WINBASEAPI BOOLEAN WINAPI CreateSymbolicLinkW(LPCWSTR,LPCWSTR,DWORD); #define CreateSymbolicLink WINELIB_NAME_AW(CreateSymbolicLink) WINBASEAPI BOOL WINAPI CreateHardLinkA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES); WINBASEAPI BOOL WINAPI CreateHardLinkW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES); #define CreateHardLink WINELIB_NAME_AW(CreateHardLink) WINBASEAPI DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD); WINBASEAPI HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); WINBASEAPI HANDLE WINAPI CreateTimerQueue(void); WINBASEAPI BOOL WINAPI CreateTimerQueueTimer(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,ULONG); WINBASEAPI BOOL WINAPI CreateUmsCompletionList(PUMS_COMPLETION_LIST*); WINBASEAPI BOOL WINAPI CreateUmsThreadContext(PUMS_CONTEXT*); WINBASEAPI HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR); #define CreateWaitableTimer WINELIB_NAME_AW(CreateWaitableTimer) WINBASEAPI HANDLE WINAPI CreateWaitableTimerExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD); WINBASEAPI HANDLE WINAPI CreateWaitableTimerExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD); #define CreateWaitableTimerEx WINELIB_NAME_AW(CreateWaitableTimerEx) WINADVAPI BOOL WINAPI CreateWellKnownSid(WELL_KNOWN_SID_TYPE,PSID,PSID,DWORD*); WINBASEAPI BOOL WINAPI DeactivateActCtx(DWORD,ULONG_PTR); WINBASEAPI BOOL WINAPI DebugActiveProcess(DWORD); WINBASEAPI BOOL WINAPI DebugActiveProcessStop(DWORD); WINBASEAPI void WINAPI DebugBreak(void); WINBASEAPI BOOL WINAPI DebugBreakProcess(HANDLE); WINBASEAPI BOOL WINAPI DebugSetProcessKillOnExit(BOOL); WINBASEAPI void * WINAPI DecodePointer(void *); WINBASEAPI void * WINAPI DecodeSystemPointer(void *); WINADVAPI BOOL WINAPI DecryptFileA(LPCSTR,DWORD); WINADVAPI BOOL WINAPI DecryptFileW(LPCWSTR,DWORD); #define DecryptFile WINELIB_NAME_AW(DecryptFile) WINBASEAPI BOOL WINAPI DefineDosDeviceA(DWORD,LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI DefineDosDeviceW(DWORD,LPCWSTR,LPCWSTR); #define DefineDosDevice WINELIB_NAME_AW(DefineDosDevice) #define DefineHandleTable(w) ((w),TRUE) WINADVAPI BOOL WINAPI DeleteAce(PACL,DWORD); WINBASEAPI ATOM WINAPI DeleteAtom(ATOM); WINBASEAPI void WINAPI DeleteCriticalSection(CRITICAL_SECTION *lpCrit); WINBASEAPI void WINAPI DeleteFiber(LPVOID); WINBASEAPI BOOL WINAPI DeleteFileA(LPCSTR); WINBASEAPI BOOL WINAPI DeleteFileW(LPCWSTR); #define DeleteFile WINELIB_NAME_AW(DeleteFile) WINBASEAPI void WINAPI DeleteProcThreadAttributeList(struct _PROC_THREAD_ATTRIBUTE_LIST*); WINBASEAPI BOOL WINAPI DeleteTimerQueue(HANDLE); WINBASEAPI BOOL WINAPI DeleteTimerQueueEx(HANDLE,HANDLE); WINBASEAPI BOOL WINAPI DeleteTimerQueueTimer(HANDLE,HANDLE,HANDLE); WINBASEAPI BOOL WINAPI DeleteUmsCompletionList(PUMS_COMPLETION_LIST); WINBASEAPI BOOL WINAPI DeleteUmsThreadContext(PUMS_CONTEXT); WINBASEAPI BOOL WINAPI DeleteVolumeMountPointA(LPCSTR); WINBASEAPI BOOL WINAPI DeleteVolumeMountPointW(LPCWSTR); #define DeleteVolumeMountPoint WINELIB_NAME_AW(DeleteVolumeMountPoint) WINBASEAPI BOOL WINAPI DequeueUmsCompletionListItems(void *, DWORD, PUMS_CONTEXT *); WINADVAPI BOOL WINAPI DeregisterEventSource(HANDLE); WINADVAPI BOOL WINAPI DestroyPrivateObjectSecurity(PSECURITY_DESCRIPTOR*); WINBASEAPI BOOL WINAPI DeviceIoControl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED); WINBASEAPI BOOL WINAPI DisableThreadLibraryCalls(HMODULE); WINBASEAPI VOID WINAPI DisassociateCurrentThreadFromCallback(PTP_CALLBACK_INSTANCE); WINBASEAPI BOOL WINAPI DisconnectNamedPipe(HANDLE); WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameA(LPCSTR,LPSTR,LPDWORD); WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameW(LPCWSTR,LPWSTR,LPDWORD); #define DnsHostnameToComputerName WINELIB_NAME_AW(DnsHostnameToComputerName) WINBASEAPI BOOL WINAPI DosDateTimeToFileTime(WORD,WORD,LPFILETIME); WINBASEAPI BOOL WINAPI DuplicateHandle(HANDLE,HANDLE,HANDLE,HANDLE*,DWORD,BOOL,DWORD); WINADVAPI BOOL WINAPI DuplicateToken(HANDLE,SECURITY_IMPERSONATION_LEVEL,PHANDLE); WINADVAPI BOOL WINAPI DuplicateTokenEx(HANDLE,DWORD,LPSECURITY_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE); WINBASEAPI BOOL WINAPI EscapeCommFunction(HANDLE,DWORD); WINBASEAPI void * WINAPI EncodePointer(void *); WINBASEAPI void * WINAPI EncodeSystemPointer(void *); WINADVAPI BOOL WINAPI EncryptFileA(LPCSTR); WINADVAPI BOOL WINAPI EncryptFileW(LPCWSTR); #define EncryptFile WINELIB_NAME_AW(EncryptFile) WINBASEAPI BOOL WINAPI EndUpdateResourceA(HANDLE,BOOL); WINBASEAPI BOOL WINAPI EndUpdateResourceW(HANDLE,BOOL); #define EndUpdateResource WINELIB_NAME_AW(EndUpdateResource) WINBASEAPI void WINAPI EnterCriticalSection(CRITICAL_SECTION *lpCrit); WINBASEAPI BOOL WINAPI EnterUmsSchedulingMode(PUMS_SCHEDULER_STARTUP_INFO); WINBASEAPI BOOL WINAPI EnumResourceLanguagesA(HMODULE,LPCSTR,LPCSTR,ENUMRESLANGPROCA,LONG_PTR); WINBASEAPI BOOL WINAPI EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG_PTR); #define EnumResourceLanguages WINELIB_NAME_AW(EnumResourceLanguages) WINBASEAPI BOOL WINAPI EnumResourceLanguagesExA(HMODULE,LPCSTR,LPCSTR,ENUMRESLANGPROCA,LONG_PTR,DWORD,LANGID); WINBASEAPI BOOL WINAPI EnumResourceLanguagesExW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG_PTR,DWORD,LANGID); #define EnumResourceLanguagesEx WINELIB_NAME_AW(EnumResourceLanguagesEx) WINBASEAPI BOOL WINAPI EnumResourceNamesA(HMODULE,LPCSTR,ENUMRESNAMEPROCA,LONG_PTR); WINBASEAPI BOOL WINAPI EnumResourceNamesW(HMODULE,LPCWSTR,ENUMRESNAMEPROCW,LONG_PTR); #define EnumResourceNames WINELIB_NAME_AW(EnumResourceNames) WINBASEAPI BOOL WINAPI EnumResourceTypesA(HMODULE,ENUMRESTYPEPROCA,LONG_PTR); WINBASEAPI BOOL WINAPI EnumResourceTypesW(HMODULE,ENUMRESTYPEPROCW,LONG_PTR); #define EnumResourceTypes WINELIB_NAME_AW(EnumResourceTypes) WINADVAPI BOOL WINAPI EqualSid(PSID, PSID); WINADVAPI BOOL WINAPI EqualPrefixSid(PSID,PSID); WINBASEAPI DWORD WINAPI EraseTape(HANDLE,DWORD,BOOL); WINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitProcess(DWORD); WINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitThread(DWORD); WINBASEAPI BOOL WINAPI ExecuteUmsThread(PUMS_CONTEXT); WINBASEAPI DWORD WINAPI ExpandEnvironmentStringsA(LPCSTR,LPSTR,DWORD); WINBASEAPI DWORD WINAPI ExpandEnvironmentStringsW(LPCWSTR,LPWSTR,DWORD); #define ExpandEnvironmentStrings WINELIB_NAME_AW(ExpandEnvironmentStrings) WINBASEAPI void WINAPI FatalAppExitA(UINT,LPCSTR); WINBASEAPI void WINAPI FatalAppExitW(UINT,LPCWSTR); WINBASEAPI void WINAPI FatalExit(int); #define FatalAppExit WINELIB_NAME_AW(FatalAppExit) WINADVAPI BOOL WINAPI FileEncryptionStatusA(LPCSTR,LPDWORD); WINADVAPI BOOL WINAPI FileEncryptionStatusW(LPCWSTR,LPDWORD); #define FileEncryptionStatus WINELIB_NAME_AW(FileEncryptionStatus) WINBASEAPI BOOL WINAPI FileTimeToDosDateTime(const FILETIME*,LPWORD,LPWORD); WINBASEAPI BOOL WINAPI FileTimeToLocalFileTime(const FILETIME*,LPFILETIME); WINBASEAPI BOOL WINAPI FileTimeToSystemTime(const FILETIME*,LPSYSTEMTIME); WINBASEAPI BOOL WINAPI FindActCtxSectionStringA(DWORD,const GUID *,ULONG,LPCSTR,PACTCTX_SECTION_KEYED_DATA); WINBASEAPI BOOL WINAPI FindActCtxSectionStringW(DWORD,const GUID *,ULONG,LPCWSTR,PACTCTX_SECTION_KEYED_DATA); #define FindActCtxSectionString WINELIB_NAME_AW(FindActCtxSectionString) WINBASEAPI BOOL WINAPI FindActCtxSectionGuid(DWORD,const GUID *,ULONG,const GUID *,PACTCTX_SECTION_KEYED_DATA); WINBASEAPI ATOM WINAPI FindAtomA(LPCSTR); WINBASEAPI ATOM WINAPI FindAtomW(LPCWSTR); #define FindAtom WINELIB_NAME_AW(FindAtom) WINBASEAPI BOOL WINAPI FindClose(HANDLE); WINBASEAPI HANDLE WINAPI FindFirstChangeNotificationA(LPCSTR,BOOL,DWORD); WINBASEAPI HANDLE WINAPI FindFirstChangeNotificationW(LPCWSTR,BOOL,DWORD); #define FindFirstChangeNotification WINELIB_NAME_AW(FindFirstChangeNotification) WINBASEAPI HANDLE WINAPI FindFirstFileA(LPCSTR,LPWIN32_FIND_DATAA); WINBASEAPI HANDLE WINAPI FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW); #define FindFirstFile WINELIB_NAME_AW(FindFirstFile) WINBASEAPI HANDLE WINAPI FindFirstFileExA(LPCSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD); WINBASEAPI HANDLE WINAPI FindFirstFileExW(LPCWSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD); #define FindFirstFileEx WINELIB_NAME_AW(FindFirstFileEx) WINADVAPI BOOL WINAPI FindFirstFreeAce(PACL,LPVOID*); WINBASEAPI BOOL WINAPI FindNextChangeNotification(HANDLE); WINBASEAPI BOOL WINAPI FindNextFileA(HANDLE,LPWIN32_FIND_DATAA); WINBASEAPI BOOL WINAPI FindNextFileW(HANDLE,LPWIN32_FIND_DATAW); #define FindNextFile WINELIB_NAME_AW(FindNextFile) WINBASEAPI BOOL WINAPI FindCloseChangeNotification(HANDLE); WINBASEAPI HRSRC WINAPI FindResourceA(HMODULE,LPCSTR,LPCSTR); WINBASEAPI HRSRC WINAPI FindResourceW(HMODULE,LPCWSTR,LPCWSTR); #define FindResource WINELIB_NAME_AW(FindResource) WINBASEAPI HRSRC WINAPI FindResourceExA(HMODULE,LPCSTR,LPCSTR,WORD); WINBASEAPI HRSRC WINAPI FindResourceExW(HMODULE,LPCWSTR,LPCWSTR,WORD); #define FindResourceEx WINELIB_NAME_AW(FindResourceEx) WINBASEAPI HANDLE WINAPI FindFirstVolumeA(LPSTR,DWORD); WINBASEAPI HANDLE WINAPI FindFirstVolumeW(LPWSTR,DWORD); #define FindFirstVolume WINELIB_NAME_AW(FindFirstVolume) WINBASEAPI HANDLE WINAPI FindFirstVolumeMountPointA(LPCSTR,LPSTR,DWORD); WINBASEAPI HANDLE WINAPI FindFirstVolumeMountPointW(LPCWSTR,LPWSTR,DWORD); #define FindFirstVolumeMountPoint WINELIB_NAME_AW(FindFirstVolumeMountPoint) WINBASEAPI BOOL WINAPI FindNextVolumeA(HANDLE,LPSTR,DWORD); WINBASEAPI BOOL WINAPI FindNextVolumeW(HANDLE,LPWSTR,DWORD); #define FindNextVolume WINELIB_NAME_AW(FindNextVolume) WINBASEAPI BOOL WINAPI FindNextVolumeMountPointA(HANDLE,LPSTR,DWORD); WINBASEAPI BOOL WINAPI FindNextVolumeMountPointW(HANDLE,LPWSTR,DWORD); #define FindNextVolumeMountPoint WINELIB_NAME_AW(FindNextVolumeMountPoint) WINBASEAPI BOOL WINAPI FindVolumeClose(HANDLE); WINBASEAPI BOOL WINAPI FindVolumeMountPointClose(HANDLE); WINBASEAPI DWORD WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION); WINBASEAPI BOOL WINAPI FlsFree(DWORD); WINBASEAPI PVOID WINAPI FlsGetValue(DWORD); WINBASEAPI BOOL WINAPI FlsSetValue(DWORD,PVOID); WINBASEAPI BOOL WINAPI FlushFileBuffers(HANDLE); WINBASEAPI BOOL WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T); WINBASEAPI VOID WINAPI FlushProcessWriteBuffers(void); WINBASEAPI BOOL WINAPI FlushViewOfFile(LPCVOID,SIZE_T); WINBASEAPI DWORD WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,DWORD,__ms_va_list*); WINBASEAPI DWORD WINAPI FormatMessageW(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,DWORD,__ms_va_list*); #define FormatMessage WINELIB_NAME_AW(FormatMessage) WINBASEAPI BOOL WINAPI FreeEnvironmentStringsA(LPSTR); WINBASEAPI BOOL WINAPI FreeEnvironmentStringsW(LPWSTR); #define FreeEnvironmentStrings WINELIB_NAME_AW(FreeEnvironmentStrings) WINBASEAPI BOOL WINAPI FreeLibrary(HMODULE); WINBASEAPI VOID DECLSPEC_NORETURN WINAPI FreeLibraryAndExitThread(HINSTANCE,DWORD); WINBASEAPI VOID WINAPI FreeLibraryWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HMODULE); #define FreeModule(handle) FreeLibrary(handle) #define FreeProcInstance(proc) /*nothing*/ WINBASEAPI BOOL WINAPI FreeResource(HGLOBAL); WINADVAPI PVOID WINAPI FreeSid(PSID); WINADVAPI BOOL WINAPI GetAce(PACL,DWORD,LPVOID*); WINADVAPI BOOL WINAPI GetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS); WINBASEAPI HRESULT WINAPI GetApplicationRestartSettings(HANDLE,WCHAR*,DWORD*,DWORD*); WINBASEAPI UINT WINAPI GetAtomNameA(ATOM,LPSTR,INT); WINBASEAPI UINT WINAPI GetAtomNameW(ATOM,LPWSTR,INT); #define GetAtomName WINELIB_NAME_AW(GetAtomName) WINBASEAPI BOOL WINAPI GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType ); WINBASEAPI BOOL WINAPI GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType ); #define GetBinaryType WINELIB_NAME_AW(GetBinaryType) WINBASEAPI BOOL WINAPI GetCurrentActCtx(HANDLE *); WINBASEAPI BOOL WINAPI GetCommConfig(HANDLE,LPCOMMCONFIG,LPDWORD); WINBASEAPI BOOL WINAPI GetCommMask(HANDLE,LPDWORD); WINBASEAPI BOOL WINAPI GetCommModemStatus(HANDLE,LPDWORD); WINBASEAPI BOOL WINAPI GetCommProperties(HANDLE,LPCOMMPROP); WINBASEAPI BOOL WINAPI GetCommState(HANDLE,LPDCB); WINBASEAPI BOOL WINAPI GetCommTimeouts(HANDLE,LPCOMMTIMEOUTS); WINBASEAPI LPSTR WINAPI GetCommandLineA(void); WINBASEAPI LPWSTR WINAPI GetCommandLineW(void); #define GetCommandLine WINELIB_NAME_AW(GetCommandLine) WINBASEAPI DWORD WINAPI GetCompressedFileSizeA(LPCSTR,LPDWORD); WINBASEAPI DWORD WINAPI GetCompressedFileSizeW(LPCWSTR,LPDWORD); #define GetCompressedFileSize WINELIB_NAME_AW(GetCompressedFileSize) WINBASEAPI BOOL WINAPI GetComputerNameA(LPSTR,LPDWORD); WINBASEAPI BOOL WINAPI GetComputerNameW(LPWSTR,LPDWORD); #define GetComputerName WINELIB_NAME_AW(GetComputerName) WINBASEAPI BOOL WINAPI GetComputerNameExA(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD); WINBASEAPI BOOL WINAPI GetComputerNameExW(COMPUTER_NAME_FORMAT,LPWSTR,LPDWORD); #define GetComputerNameEx WINELIB_NAME_AW(GetComputerNameEx) WINBASEAPI UINT WINAPI GetCurrentDirectoryA(UINT,LPSTR); WINBASEAPI UINT WINAPI GetCurrentDirectoryW(UINT,LPWSTR); #define GetCurrentDirectory WINELIB_NAME_AW(GetCurrentDirectory) WINADVAPI BOOL WINAPI GetCurrentHwProfileA(LPHW_PROFILE_INFOA); WINADVAPI BOOL WINAPI GetCurrentHwProfileW(LPHW_PROFILE_INFOW); #define GetCurrentHwProfile WINELIB_NAME_AW(GetCurrentHwProfile) WINBASEAPI HANDLE WINAPI GetCurrentProcess(void); WINBASEAPI DWORD WINAPI GetCurrentProcessorNumber(void); WINBASEAPI VOID WINAPI GetCurrentProcessorNumberEx(PPROCESSOR_NUMBER); WINBASEAPI HANDLE WINAPI GetCurrentThread(void); #define GetCurrentTime() GetTickCount() WINBASEAPI PUMS_CONTEXT WINAPI GetCurrentUmsThread(void); WINBASEAPI BOOL WINAPI GetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,LPDWORD); WINBASEAPI BOOL WINAPI GetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,LPDWORD); #define GetDefaultCommConfig WINELIB_NAME_AW(GetDefaultCommConfig) WINBASEAPI BOOL WINAPI GetDevicePowerState(HANDLE,BOOL*); WINBASEAPI BOOL WINAPI GetDiskFreeSpaceA(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD); WINBASEAPI BOOL WINAPI GetDiskFreeSpaceW(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD); #define GetDiskFreeSpace WINELIB_NAME_AW(GetDiskFreeSpace) WINBASEAPI BOOL WINAPI GetDiskFreeSpaceExA(LPCSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER); WINBASEAPI BOOL WINAPI GetDiskFreeSpaceExW(LPCWSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER); #define GetDiskFreeSpaceEx WINELIB_NAME_AW(GetDiskFreeSpaceEx) WINBASEAPI DWORD WINAPI GetDllDirectoryA(DWORD,LPSTR); WINBASEAPI DWORD WINAPI GetDllDirectoryW(DWORD,LPWSTR); #define GetDllDirectory WINELIB_NAME_AW(GetDllDirectory) WINBASEAPI UINT WINAPI GetDriveTypeA(LPCSTR); WINBASEAPI UINT WINAPI GetDriveTypeW(LPCWSTR); #define GetDriveType WINELIB_NAME_AW(GetDriveType) WINBASEAPI DWORD WINAPI GetDynamicTimeZoneInformation(PDYNAMIC_TIME_ZONE_INFORMATION); WINBASEAPI LPSTR WINAPI GetEnvironmentStringsA(void); WINBASEAPI LPWSTR WINAPI GetEnvironmentStringsW(void); #define GetEnvironmentStrings WINELIB_NAME_AW(GetEnvironmentStrings) WINBASEAPI DWORD WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD); WINBASEAPI DWORD WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD); #define GetEnvironmentVariable WINELIB_NAME_AW(GetEnvironmentVariable) WINBASEAPI UINT WINAPI GetErrorMode(void); WINADVAPI BOOL WINAPI GetEventLogInformation(HANDLE,DWORD,LPVOID,DWORD,LPDWORD); WINBASEAPI BOOL WINAPI GetExitCodeProcess(HANDLE,LPDWORD); WINBASEAPI BOOL WINAPI GetExitCodeThread(HANDLE,LPDWORD); WINBASEAPI DWORD WINAPI GetFileAttributesA(LPCSTR); WINBASEAPI DWORD WINAPI GetFileAttributesW(LPCWSTR); #define GetFileAttributes WINELIB_NAME_AW(GetFileAttributes) WINBASEAPI BOOL WINAPI GetFileAttributesExA(LPCSTR,GET_FILEEX_INFO_LEVELS,LPVOID); WINBASEAPI BOOL WINAPI GetFileAttributesExW(LPCWSTR,GET_FILEEX_INFO_LEVELS,LPVOID); #define GetFileAttributesEx WINELIB_NAME_AW(GetFileAttributesEx) WINBASEAPI BOOL WINAPI GetFileInformationByHandle(HANDLE,BY_HANDLE_FILE_INFORMATION*); WINBASEAPI BOOL WINAPI GetFileInformationByHandleEx(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD); WINADVAPI BOOL WINAPI GetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD); WINADVAPI BOOL WINAPI GetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD); #define GetFileSecurity WINELIB_NAME_AW(GetFileSecurity) WINBASEAPI DWORD WINAPI GetFileSize(HANDLE,LPDWORD); WINBASEAPI BOOL WINAPI GetFileSizeEx(HANDLE,PLARGE_INTEGER); WINBASEAPI BOOL WINAPI GetFileTime(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME); WINBASEAPI DWORD WINAPI GetFileType(HANDLE); #define GetFreeSpace(w) (__MSABI_LONG(0x100000)) WINBASEAPI DWORD WINAPI GetFullPathNameA(LPCSTR,DWORD,LPSTR,LPSTR*); WINBASEAPI DWORD WINAPI GetFullPathNameW(LPCWSTR,DWORD,LPWSTR,LPWSTR*); #define GetFullPathName WINELIB_NAME_AW(GetFullPathName) WINBASEAPI BOOL WINAPI GetHandleInformation(HANDLE,LPDWORD); WINADVAPI BOOL WINAPI GetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD); WINADVAPI DWORD WINAPI GetLengthSid(PSID); WINBASEAPI VOID WINAPI GetLocalTime(LPSYSTEMTIME); WINBASEAPI DWORD WINAPI GetLogicalDrives(void); WINBASEAPI UINT WINAPI GetLogicalDriveStringsA(UINT,LPSTR); WINBASEAPI UINT WINAPI GetLogicalDriveStringsW(UINT,LPWSTR); #define GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings) WINBASEAPI DWORD WINAPI GetLongPathNameA(LPCSTR,LPSTR,DWORD); WINBASEAPI DWORD WINAPI GetLongPathNameW(LPCWSTR,LPWSTR,DWORD); #define GetLongPathName WINELIB_NAME_AW(GetLongPathName) WINBASEAPI BOOL WINAPI GetMailslotInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD); WINBASEAPI DWORD WINAPI GetModuleFileNameA(HMODULE,LPSTR,DWORD); WINBASEAPI DWORD WINAPI GetModuleFileNameW(HMODULE,LPWSTR,DWORD); #define GetModuleFileName WINELIB_NAME_AW(GetModuleFileName) WINBASEAPI HMODULE WINAPI GetModuleHandleA(LPCSTR); WINBASEAPI HMODULE WINAPI GetModuleHandleW(LPCWSTR); #define GetModuleHandle WINELIB_NAME_AW(GetModuleHandle) WINBASEAPI BOOL WINAPI GetModuleHandleExA(DWORD,LPCSTR,HMODULE*); WINBASEAPI BOOL WINAPI GetModuleHandleExW(DWORD,LPCWSTR,HMODULE*); #define GetModuleHandleEx WINELIB_NAME_AW(GetModuleHandleEx) WINBASEAPI BOOL WINAPI GetNamedPipeClientProcessId(HANDLE,PULONG); WINBASEAPI BOOL WINAPI GetNamedPipeClientSessionId(HANDLE,PULONG); WINBASEAPI BOOL WINAPI GetNamedPipeHandleStateA(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD); WINBASEAPI BOOL WINAPI GetNamedPipeHandleStateW(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD); #define GetNamedPipeHandleState WINELIB_NAME_AW(GetNamedPipeHandleState) WINBASEAPI BOOL WINAPI GetNamedPipeInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD); WINBASEAPI BOOL WINAPI GetNamedPipeServerProcessId(HANDLE,PULONG); WINBASEAPI BOOL WINAPI GetNamedPipeServerSessionId(HANDLE,PULONG); WINBASEAPI VOID WINAPI GetNativeSystemInfo(LPSYSTEM_INFO); WINBASEAPI PUMS_CONTEXT WINAPI GetNextUmsListItem(PUMS_CONTEXT); WINBASEAPI BOOL WINAPI GetNumaProcessorNode(UCHAR,PUCHAR); WINADVAPI BOOL WINAPI GetNumberOfEventLogRecords(HANDLE,PDWORD); WINADVAPI BOOL WINAPI GetOldestEventLogRecord(HANDLE,PDWORD); WINBASEAPI BOOL WINAPI GetOverlappedResult(HANDLE,LPOVERLAPPED,LPDWORD,BOOL); WINBASEAPI DWORD WINAPI GetPriorityClass(HANDLE); WINADVAPI BOOL WINAPI GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD); WINBASEAPI UINT WINAPI GetPrivateProfileIntA(LPCSTR,LPCSTR,INT,LPCSTR); WINBASEAPI UINT WINAPI GetPrivateProfileIntW(LPCWSTR,LPCWSTR,INT,LPCWSTR); #define GetPrivateProfileInt WINELIB_NAME_AW(GetPrivateProfileInt) WINBASEAPI INT WINAPI GetPrivateProfileSectionA(LPCSTR,LPSTR,DWORD,LPCSTR); WINBASEAPI INT WINAPI GetPrivateProfileSectionW(LPCWSTR,LPWSTR,DWORD,LPCWSTR); #define GetPrivateProfileSection WINELIB_NAME_AW(GetPrivateProfileSection) WINBASEAPI DWORD WINAPI GetPrivateProfileSectionNamesA(LPSTR,DWORD,LPCSTR); WINBASEAPI DWORD WINAPI GetPrivateProfileSectionNamesW(LPWSTR,DWORD,LPCWSTR); #define GetPrivateProfileSectionNames WINELIB_NAME_AW(GetPrivateProfileSectionNames) WINBASEAPI INT WINAPI GetPrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT,LPCSTR); WINBASEAPI INT WINAPI GetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT,LPCWSTR); #define GetPrivateProfileString WINELIB_NAME_AW(GetPrivateProfileString) WINBASEAPI BOOL WINAPI GetPrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR); WINBASEAPI BOOL WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR); #define GetPrivateProfileStruct WINELIB_NAME_AW(GetPrivateProfileStruct) WINBASEAPI FARPROC WINAPI GetProcAddress(HMODULE,LPCSTR); WINBASEAPI BOOL WINAPI GetProcessAffinityMask(HANDLE,PDWORD_PTR,PDWORD_PTR); WINBASEAPI BOOL WINAPI GetLogicalProcessorInformation(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,PDWORD); WINBASEAPI BOOL WINAPI GetLogicalProcessorInformationEx(LOGICAL_PROCESSOR_RELATIONSHIP,PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX,PDWORD); WINBASEAPI DWORD WINAPI GetProcessHeaps(DWORD,PHANDLE); WINBASEAPI DWORD WINAPI GetProcessId(HANDLE); WINBASEAPI DWORD WINAPI GetProcessIdOfThread(HANDLE); WINBASEAPI BOOL WINAPI GetProcessIoCounters(HANDLE,PIO_COUNTERS); WINBASEAPI BOOL WINAPI GetProcessPriorityBoost(HANDLE,PBOOL); WINBASEAPI BOOL WINAPI GetProcessShutdownParameters(LPDWORD,LPDWORD); WINBASEAPI BOOL WINAPI GetProcessTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME); WINBASEAPI DWORD WINAPI GetProcessVersion(DWORD); WINBASEAPI BOOL WINAPI GetProcessWorkingSetSize(HANDLE,PSIZE_T,PSIZE_T); WINBASEAPI BOOL WINAPI GetProductInfo(DWORD,DWORD,DWORD,DWORD,PDWORD); WINBASEAPI UINT WINAPI GetProfileIntA(LPCSTR,LPCSTR,INT); WINBASEAPI UINT WINAPI GetProfileIntW(LPCWSTR,LPCWSTR,INT); #define GetProfileInt WINELIB_NAME_AW(GetProfileInt) WINBASEAPI INT WINAPI GetProfileSectionA(LPCSTR,LPSTR,DWORD); WINBASEAPI INT WINAPI GetProfileSectionW(LPCWSTR,LPWSTR,DWORD); #define GetProfileSection WINELIB_NAME_AW(GetProfileSection) WINBASEAPI INT WINAPI GetProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT); WINBASEAPI INT WINAPI GetProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT); #define GetProfileString WINELIB_NAME_AW(GetProfileString) WINBASEAPI BOOL WINAPI GetQueuedCompletionStatus(HANDLE,LPDWORD,PULONG_PTR,LPOVERLAPPED*,DWORD); WINADVAPI BOOL WINAPI GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR_CONTROL,LPDWORD); WINADVAPI BOOL WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL); WINADVAPI BOOL WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID *,LPBOOL); WINADVAPI DWORD WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR); WINADVAPI BOOL WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID *,LPBOOL); WINADVAPI BOOL WINAPI GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL); WINADVAPI PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(PSID); WINADVAPI DWORD WINAPI GetSidLengthRequired(BYTE); WINADVAPI PDWORD WINAPI GetSidSubAuthority(PSID,DWORD); WINADVAPI PUCHAR WINAPI GetSidSubAuthorityCount(PSID); WINBASEAPI DWORD WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD); WINBASEAPI DWORD WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD); #define GetShortPathName WINELIB_NAME_AW(GetShortPathName) WINBASEAPI VOID WINAPI GetStartupInfoA(LPSTARTUPINFOA); WINBASEAPI VOID WINAPI GetStartupInfoW(LPSTARTUPINFOW); #define GetStartupInfo WINELIB_NAME_AW(GetStartupInfo) WINBASEAPI HANDLE WINAPI GetStdHandle(DWORD); WINBASEAPI UINT WINAPI GetSystemDirectoryA(LPSTR,UINT); WINBASEAPI UINT WINAPI GetSystemDirectoryW(LPWSTR,UINT); #define GetSystemDirectory WINELIB_NAME_AW(GetSystemDirectory) WINBASEAPI UINT WINAPI GetSystemFirmwareTable(DWORD,DWORD,PVOID,DWORD); WINBASEAPI VOID WINAPI GetSystemInfo(LPSYSTEM_INFO); WINBASEAPI BOOL WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS); WINBASEAPI BOOL WINAPI GetSystemRegistryQuota(PDWORD,PDWORD); WINBASEAPI VOID WINAPI GetSystemTime(LPSYSTEMTIME); WINBASEAPI BOOL WINAPI GetSystemTimeAdjustment(PDWORD,PDWORD,PBOOL); WINBASEAPI VOID WINAPI GetSystemTimeAsFileTime(LPFILETIME); WINBASEAPI VOID WINAPI GetSystemTimePreciseAsFileTime(LPFILETIME); WINBASEAPI UINT WINAPI GetSystemWindowsDirectoryA(LPSTR,UINT); WINBASEAPI UINT WINAPI GetSystemWindowsDirectoryW(LPWSTR,UINT); #define GetSystemWindowsDirectory WINELIB_NAME_AW(GetSystemWindowsDirectory) WINBASEAPI UINT WINAPI GetSystemWow64DirectoryA(LPSTR,UINT); WINBASEAPI UINT WINAPI GetSystemWow64DirectoryW(LPWSTR,UINT); #define GetSystemWow64Directory WINELIB_NAME_AW(GetSystemWow64Directory) WINBASEAPI DWORD WINAPI GetTapeParameters(HANDLE,DWORD,LPDWORD,LPVOID); WINBASEAPI DWORD WINAPI GetTapePosition(HANDLE,DWORD,LPDWORD,LPDWORD,LPDWORD); WINBASEAPI DWORD WINAPI GetTapeStatus(HANDLE); WINBASEAPI UINT WINAPI GetTempFileNameA(LPCSTR,LPCSTR,UINT,LPSTR); WINBASEAPI UINT WINAPI GetTempFileNameW(LPCWSTR,LPCWSTR,UINT,LPWSTR); #define GetTempFileName WINELIB_NAME_AW(GetTempFileName) WINBASEAPI DWORD WINAPI GetTempPathA(DWORD,LPSTR); WINBASEAPI DWORD WINAPI GetTempPathW(DWORD,LPWSTR); #define GetTempPath WINELIB_NAME_AW(GetTempPath) WINBASEAPI DWORD WINAPI GetThreadId(HANDLE); WINBASEAPI BOOL WINAPI GetThreadIOPendingFlag(HANDLE,PBOOL); WINBASEAPI DWORD WINAPI GetTickCount(void); WINBASEAPI ULONGLONG WINAPI GetTickCount64(void); WINBASEAPI DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION); WINBASEAPI BOOL WINAPI GetThreadContext(HANDLE,CONTEXT *); WINBASEAPI DWORD WINAPI GetThreadErrorMode(void); WINBASEAPI INT WINAPI GetThreadPriority(HANDLE); WINBASEAPI BOOL WINAPI GetThreadPriorityBoost(HANDLE,PBOOL); WINBASEAPI BOOL WINAPI GetThreadSelectorEntry(HANDLE,DWORD,LPLDT_ENTRY); WINBASEAPI BOOL WINAPI GetThreadTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME); WINADVAPI BOOL WINAPI GetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD,LPDWORD); WINBASEAPI BOOL WINAPI GetUmsCompletionListEvent(PUMS_COMPLETION_LIST, PHANDLE); WINADVAPI BOOL WINAPI GetUserNameA(LPSTR,LPDWORD); WINADVAPI BOOL WINAPI GetUserNameW(LPWSTR,LPDWORD); #define GetUserName WINELIB_NAME_AW(GetUserName) WINBASEAPI DWORD WINAPI GetVersion(void); WINBASEAPI BOOL WINAPI GetVersionExA(OSVERSIONINFOA*); WINBASEAPI BOOL WINAPI GetVersionExW(OSVERSIONINFOW*); #define GetVersionEx WINELIB_NAME_AW(GetVersionEx) WINBASEAPI BOOL WINAPI GetVolumeInformationA(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD); WINBASEAPI BOOL WINAPI GetVolumeInformationW(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD); #define GetVolumeInformation WINELIB_NAME_AW(GetVolumeInformation) WINBASEAPI BOOL WINAPI GetVolumeInformationByHandleW(HANDLE,WCHAR *,DWORD,DWORD *,DWORD *,DWORD *,WCHAR *,DWORD); WINBASEAPI BOOL WINAPI GetVolumeNameForVolumeMountPointA(LPCSTR,LPSTR,DWORD); WINBASEAPI BOOL WINAPI GetVolumeNameForVolumeMountPointW(LPCWSTR,LPWSTR,DWORD); #define GetVolumeNameForVolumeMountPoint WINELIB_NAME_AW(GetVolumeNameForVolumeMountPoint) WINBASEAPI BOOL WINAPI GetVolumePathNameA(LPCSTR,LPSTR,DWORD); WINBASEAPI BOOL WINAPI GetVolumePathNameW(LPCWSTR,LPWSTR,DWORD); #define GetVolumePathName WINELIB_NAME_AW(GetVolumePathName) WINBASEAPI BOOL WINAPI GetVolumePathNamesForVolumeNameA(LPCSTR,LPSTR,DWORD,PDWORD); WINBASEAPI BOOL WINAPI GetVolumePathNamesForVolumeNameW(LPCWSTR,LPWSTR,DWORD,PDWORD); #define GetVolumePathNamesForVolumeName WINELIB_NAME_AW(GetVolumePathNamesForVolumeName) WINADVAPI BOOL WINAPI GetWindowsAccountDomainSid(PSID,PSID,DWORD*); WINBASEAPI UINT WINAPI GetWindowsDirectoryA(LPSTR,UINT); WINBASEAPI UINT WINAPI GetWindowsDirectoryW(LPWSTR,UINT); #define GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory) WINBASEAPI UINT WINAPI GetWriteWatch(DWORD,LPVOID,SIZE_T,LPVOID*,ULONG_PTR*,ULONG*); WINBASEAPI ATOM WINAPI GlobalAddAtomA(LPCSTR); WINBASEAPI ATOM WINAPI GlobalAddAtomW(LPCWSTR); #define GlobalAddAtom WINELIB_NAME_AW(GlobalAddAtom) WINBASEAPI HGLOBAL WINAPI GlobalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2); WINBASEAPI SIZE_T WINAPI GlobalCompact(DWORD); WINBASEAPI ATOM WINAPI GlobalDeleteAtom(ATOM); WINBASEAPI ATOM WINAPI GlobalFindAtomA(LPCSTR); WINBASEAPI ATOM WINAPI GlobalFindAtomW(LPCWSTR); #define GlobalFindAtom WINELIB_NAME_AW(GlobalFindAtom) WINBASEAPI VOID WINAPI GlobalFix(HGLOBAL); WINBASEAPI UINT WINAPI GlobalFlags(HGLOBAL); WINBASEAPI HGLOBAL WINAPI GlobalFree(HGLOBAL); WINBASEAPI UINT WINAPI GlobalGetAtomNameA(ATOM,LPSTR,INT); WINBASEAPI UINT WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,INT); #define GlobalGetAtomName WINELIB_NAME_AW(GlobalGetAtomName) WINBASEAPI HGLOBAL WINAPI GlobalHandle(LPCVOID); WINBASEAPI LPVOID WINAPI GlobalLock(HGLOBAL); WINBASEAPI VOID WINAPI GlobalMemoryStatus(LPMEMORYSTATUS); WINBASEAPI BOOL WINAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX); WINBASEAPI HGLOBAL WINAPI GlobalReAlloc(HGLOBAL,SIZE_T,UINT) __WINE_ALLOC_SIZE(2); WINBASEAPI SIZE_T WINAPI GlobalSize(HGLOBAL); WINBASEAPI VOID WINAPI GlobalUnfix(HGLOBAL); WINBASEAPI BOOL WINAPI GlobalUnlock(HGLOBAL); WINBASEAPI BOOL WINAPI GlobalUnWire(HGLOBAL); WINBASEAPI LPVOID WINAPI GlobalWire(HGLOBAL); #define HasOverlappedIoCompleted(lpOverlapped) ((lpOverlapped)->Internal != STATUS_PENDING) WINBASEAPI LPVOID WINAPI HeapAlloc(HANDLE,DWORD,SIZE_T) __WINE_ALLOC_SIZE(3); WINBASEAPI SIZE_T WINAPI HeapCompact(HANDLE,DWORD); WINBASEAPI HANDLE WINAPI HeapCreate(DWORD,SIZE_T,SIZE_T); WINBASEAPI BOOL WINAPI HeapDestroy(HANDLE); WINBASEAPI BOOL WINAPI HeapFree(HANDLE,DWORD,LPVOID); WINBASEAPI BOOL WINAPI HeapLock(HANDLE); WINBASEAPI LPVOID WINAPI HeapReAlloc(HANDLE,DWORD,LPVOID,SIZE_T) __WINE_ALLOC_SIZE(4); WINBASEAPI BOOL WINAPI HeapQueryInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T); WINBASEAPI BOOL WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T); WINBASEAPI SIZE_T WINAPI HeapSize(HANDLE,DWORD,LPCVOID); WINBASEAPI BOOL WINAPI HeapUnlock(HANDLE); WINBASEAPI BOOL WINAPI HeapValidate(HANDLE,DWORD,LPCVOID); WINBASEAPI BOOL WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY); WINBASEAPI BOOL WINAPI InitAtomTable(DWORD); WINADVAPI BOOL WINAPI InitializeAcl(PACL,DWORD,DWORD); WINBASEAPI VOID WINAPI InitializeConditionVariable(PCONDITION_VARIABLE); WINBASEAPI void WINAPI InitializeCriticalSection(CRITICAL_SECTION *lpCrit); WINBASEAPI BOOL WINAPI InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION *,DWORD); WINBASEAPI BOOL WINAPI InitializeCriticalSectionEx(CRITICAL_SECTION *,DWORD,DWORD); WINBASEAPI BOOL WINAPI InitializeProcThreadAttributeList(struct _PROC_THREAD_ATTRIBUTE_LIST*,DWORD,DWORD,SIZE_T*); WINADVAPI BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD); WINADVAPI BOOL WINAPI InitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE); WINBASEAPI VOID WINAPI InitializeSListHead(PSLIST_HEADER); WINBASEAPI VOID WINAPI InitializeSRWLock(PSRWLOCK); WINBASEAPI BOOL WINAPI InitOnceBeginInitialize(PINIT_ONCE, DWORD, PBOOL, PVOID*); WINBASEAPI BOOL WINAPI InitOnceComplete(PINIT_ONCE, DWORD, PVOID); WINBASEAPI BOOL WINAPI InitOnceExecuteOnce(PINIT_ONCE,PINIT_ONCE_FN,PVOID,PVOID*); WINBASEAPI VOID WINAPI InitOnceInitialize(PINIT_ONCE); WINBASEAPI PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER); WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER); WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY); WINBASEAPI BOOL WINAPI IsBadCodePtr(FARPROC); WINBASEAPI BOOL WINAPI IsBadHugeReadPtr(LPCVOID,UINT_PTR); WINBASEAPI BOOL WINAPI IsBadHugeWritePtr(LPVOID,UINT_PTR); WINBASEAPI BOOL WINAPI IsBadReadPtr(LPCVOID,UINT_PTR); WINBASEAPI BOOL WINAPI IsBadStringPtrA(LPCSTR,UINT_PTR); WINBASEAPI BOOL WINAPI IsBadStringPtrW(LPCWSTR,UINT_PTR); #define IsBadStringPtr WINELIB_NAME_AW(IsBadStringPtr) WINBASEAPI BOOL WINAPI IsBadWritePtr(LPVOID,UINT_PTR); WINBASEAPI BOOL WINAPI IsDebuggerPresent(void); WINBASEAPI BOOL WINAPI IsSystemResumeAutomatic(void); WINADVAPI BOOL WINAPI IsTextUnicode(LPCVOID,INT,LPINT); WINBASEAPI BOOL WINAPI IsThreadpoolTimerSet(PTP_TIMER); WINADVAPI BOOL WINAPI IsTokenRestricted(HANDLE); WINADVAPI BOOL WINAPI IsValidAcl(PACL); WINADVAPI BOOL WINAPI IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR); WINADVAPI BOOL WINAPI IsValidSid(PSID); WINADVAPI BOOL WINAPI IsWellKnownSid(PSID,WELL_KNOWN_SID_TYPE); WINBASEAPI BOOL WINAPI IsWow64Process(HANDLE,PBOOL); WINADVAPI BOOL WINAPI ImpersonateLoggedOnUser(HANDLE); WINADVAPI BOOL WINAPI ImpersonateNamedPipeClient(HANDLE); WINADVAPI BOOL WINAPI ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL); WINBASEAPI BOOL WINAPI IsProcessInJob(HANDLE,HANDLE,PBOOL); WINBASEAPI BOOL WINAPI IsProcessorFeaturePresent(DWORD); WINBASEAPI void WINAPI LeaveCriticalSection(CRITICAL_SECTION *lpCrit); WINBASEAPI VOID WINAPI LeaveCriticalSectionWhenCallbackReturns(PTP_CALLBACK_INSTANCE,CRITICAL_SECTION*); WINBASEAPI HMODULE WINAPI LoadLibraryA(LPCSTR); WINBASEAPI HMODULE WINAPI LoadLibraryW(LPCWSTR); #define LoadLibrary WINELIB_NAME_AW(LoadLibrary) WINBASEAPI HMODULE WINAPI LoadLibraryExA(LPCSTR,HANDLE,DWORD); WINBASEAPI HMODULE WINAPI LoadLibraryExW(LPCWSTR,HANDLE,DWORD); #define LoadLibraryEx WINELIB_NAME_AW(LoadLibraryEx) WINBASEAPI DWORD WINAPI LoadModule(LPCSTR,LPVOID); WINBASEAPI HGLOBAL WINAPI LoadResource(HMODULE,HRSRC); WINBASEAPI HLOCAL WINAPI LocalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2); WINBASEAPI SIZE_T WINAPI LocalCompact(UINT); WINBASEAPI UINT WINAPI LocalFlags(HLOCAL); WINBASEAPI HLOCAL WINAPI LocalFree(HLOCAL); WINBASEAPI HLOCAL WINAPI LocalHandle(LPCVOID); WINBASEAPI LPVOID WINAPI LocalLock(HLOCAL); WINBASEAPI HLOCAL WINAPI LocalReAlloc(HLOCAL,SIZE_T,UINT) __WINE_ALLOC_SIZE(2); WINBASEAPI SIZE_T WINAPI LocalShrink(HGLOBAL,UINT); WINBASEAPI SIZE_T WINAPI LocalSize(HLOCAL); WINBASEAPI BOOL WINAPI LocalUnlock(HLOCAL); WINBASEAPI LPVOID WINAPI LockResource(HGLOBAL); #define LockSegment(handle) GlobalFix((HANDLE)(handle)) WINADVAPI BOOL WINAPI LookupAccountNameA(LPCSTR,LPCSTR,PSID,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE); WINADVAPI BOOL WINAPI LookupAccountNameW(LPCWSTR,LPCWSTR,PSID,LPDWORD,LPWSTR,LPDWORD,PSID_NAME_USE); #define LookupAccountName WINELIB_NAME_AW(LookupAccountName) WINADVAPI BOOL WINAPI LookupAccountSidA(LPCSTR,PSID,LPSTR,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE); WINADVAPI BOOL WINAPI LookupAccountSidW(LPCWSTR,PSID,LPWSTR,LPDWORD,LPWSTR,LPDWORD,PSID_NAME_USE); #define LookupAccountSid WINELIB_NAME_AW(LookupAccountSid) WINBASEAPI BOOL WINAPI LocalFileTimeToFileTime(const FILETIME*,LPFILETIME); WINBASEAPI BOOL WINAPI LockFile(HANDLE,DWORD,DWORD,DWORD,DWORD); WINBASEAPI BOOL WINAPI LockFileEx(HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED); WINADVAPI BOOL WINAPI LogonUserA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD,PHANDLE); WINADVAPI BOOL WINAPI LogonUserW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,PHANDLE); #define LogonUser WINELIB_NAME_AW(LogonUser) WINADVAPI BOOL WINAPI LookupPrivilegeDisplayNameA(LPCSTR,LPCSTR,LPSTR,LPDWORD,LPDWORD); WINADVAPI BOOL WINAPI LookupPrivilegeDisplayNameW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,LPDWORD); #define LookupPrivilegeDisplayName WINELIB_NAME_AW(LookupPrivilegeDisplayName) WINADVAPI BOOL WINAPI LookupPrivilegeNameA(LPCSTR,PLUID,LPSTR,LPDWORD); WINADVAPI BOOL WINAPI LookupPrivilegeNameW(LPCWSTR,PLUID,LPWSTR,LPDWORD); #define LookupPrivilegeName WINELIB_NAME_AW(LookupPrivilegeName) WINADVAPI BOOL WINAPI LookupPrivilegeValueA(LPCSTR,LPCSTR,PLUID); WINADVAPI BOOL WINAPI LookupPrivilegeValueW(LPCWSTR,LPCWSTR,PLUID); #define LookupPrivilegeValue WINELIB_NAME_AW(LookupPrivilegeValue) WINADVAPI BOOL WINAPI MakeAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD,PACL,LPDWORD,PACL,LPDWORD,PSID,LPDWORD,PSID,LPDWORD); WINBASEAPI void WINAPI MakeCriticalSectionGlobal(CRITICAL_SECTION *lpCrit); #define MakeProcInstance(proc,inst) (proc) WINADVAPI BOOL WINAPI MakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD); WINADVAPI VOID WINAPI MapGenericMask(PDWORD,PGENERIC_MAPPING); WINBASEAPI HMODULE WINAPI MapHModuleSL(WORD); WINBASEAPI WORD WINAPI MapHModuleLS(HMODULE); WINBASEAPI LPVOID WINAPI MapViewOfFile(HANDLE,DWORD,DWORD,DWORD,SIZE_T); WINBASEAPI LPVOID WINAPI MapViewOfFileEx(HANDLE,DWORD,DWORD,DWORD,SIZE_T,LPVOID); WINBASEAPI BOOL WINAPI MoveFileA(LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI MoveFileW(LPCWSTR,LPCWSTR); #define MoveFile WINELIB_NAME_AW(MoveFile) WINBASEAPI BOOL WINAPI MoveFileExA(LPCSTR,LPCSTR,DWORD); WINBASEAPI BOOL WINAPI MoveFileExW(LPCWSTR,LPCWSTR,DWORD); #define MoveFileEx WINELIB_NAME_AW(MoveFileEx) WINBASEAPI BOOL WINAPI MoveFileWithProgressA(LPCSTR,LPCSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD); WINBASEAPI BOOL WINAPI MoveFileWithProgressW(LPCWSTR,LPCWSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD); #define MoveFileWithProgress WINELIB_NAME_AW(MoveFileWithProgress) WINBASEAPI INT WINAPI MulDiv(INT,INT,INT); WINBASEAPI BOOL WINAPI NeedCurrentDirectoryForExePathA(LPCSTR); WINBASEAPI BOOL WINAPI NeedCurrentDirectoryForExePathW(LPCWSTR); #define NeedCurrentDirectoryForExePath WINELIB_NAME_AW(NeedCurrentDirectoryForExePath) WINADVAPI BOOL WINAPI NotifyChangeEventLog(HANDLE,HANDLE); WINADVAPI BOOL WINAPI ObjectCloseAuditAlarmA(LPCSTR,LPVOID,BOOL); WINADVAPI BOOL WINAPI ObjectCloseAuditAlarmW(LPCWSTR,LPVOID,BOOL); #define ObjectCloseAuditAlarm WINELIB_NAME_AW(ObjectCloseAuditAlarm) WINADVAPI BOOL WINAPI ObjectDeleteAuditAlarmA(LPCSTR,LPVOID,BOOL); WINADVAPI BOOL WINAPI ObjectDeleteAuditAlarmW(LPCWSTR,LPVOID,BOOL); #define ObjectDeleteAuditAlarm WINELIB_NAME_AW(ObjectDeleteAuditAlarm) WINADVAPI BOOL WINAPI ObjectOpenAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,LPBOOL); WINADVAPI BOOL WINAPI ObjectOpenAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,LPBOOL); #define ObjectOpenAuditAlarm WINELIB_NAME_AW(ObjectOpenAuditAlarm) WINADVAPI BOOL WINAPI ObjectPrivilegeAuditAlarmA(LPCSTR,LPVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL); WINADVAPI BOOL WINAPI ObjectPrivilegeAuditAlarmW(LPCWSTR,LPVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL); #define ObjectPrivilegeAuditAlarm WINELIB_NAME_AW(ObjectPrivilegeAuditAlarm) WINADVAPI HANDLE WINAPI OpenBackupEventLogA(LPCSTR,LPCSTR); WINADVAPI HANDLE WINAPI OpenBackupEventLogW(LPCWSTR,LPCWSTR); #define OpenBackupEventLog WINELIB_NAME_AW(OpenBackupEventLog) WINADVAPI DWORD WINAPI OpenEncryptedFileRawA(LPCSTR,ULONG,PVOID*); WINADVAPI DWORD WINAPI OpenEncryptedFileRawW(LPCWSTR,ULONG,PVOID*); #define OpenEncryptedFileRaw WINELIB_NAME_AW(OpenEncryptedFileRaw) WINBASEAPI HANDLE WINAPI OpenEventA(DWORD,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI OpenEventW(DWORD,BOOL,LPCWSTR); #define OpenEvent WINELIB_NAME_AW(OpenEvent) WINADVAPI HANDLE WINAPI OpenEventLogA(LPCSTR,LPCSTR); WINADVAPI HANDLE WINAPI OpenEventLogW(LPCWSTR,LPCWSTR); #define OpenEventLog WINELIB_NAME_AW(OpenEventLog) WINBASEAPI HFILE WINAPI OpenFile(LPCSTR,OFSTRUCT*,UINT); WINBASEAPI HANDLE WINAPI OpenFileMappingA(DWORD,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI OpenFileMappingW(DWORD,BOOL,LPCWSTR); #define OpenFileMapping WINELIB_NAME_AW(OpenFileMapping) WINBASEAPI HANDLE WINAPI OpenJobObjectA(DWORD,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI OpenJobObjectW(DWORD,BOOL,LPCWSTR); #define OpenJobObject WINELIB_NAME_AW(OpenJobObject) WINBASEAPI HANDLE WINAPI OpenMutexA(DWORD,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI OpenMutexW(DWORD,BOOL,LPCWSTR); #define OpenMutex WINELIB_NAME_AW(OpenMutex) WINBASEAPI HANDLE WINAPI OpenProcess(DWORD,BOOL,DWORD); WINADVAPI BOOL WINAPI OpenProcessToken(HANDLE,DWORD,PHANDLE); WINBASEAPI HANDLE WINAPI OpenSemaphoreA(DWORD,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI OpenSemaphoreW(DWORD,BOOL,LPCWSTR); #define OpenSemaphore WINELIB_NAME_AW(OpenSemaphore) WINBASEAPI HANDLE WINAPI OpenThread(DWORD,BOOL,DWORD); WINADVAPI BOOL WINAPI OpenThreadToken(HANDLE,DWORD,BOOL,PHANDLE); WINBASEAPI HANDLE WINAPI OpenWaitableTimerA(DWORD,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI OpenWaitableTimerW(DWORD,BOOL,LPCWSTR); #define OpenWaitableTimer WINELIB_NAME_AW(OpenWaitableTimer) WINBASEAPI VOID WINAPI OutputDebugStringA(LPCSTR); WINBASEAPI VOID WINAPI OutputDebugStringW(LPCWSTR); #define OutputDebugString WINELIB_NAME_AW(OutputDebugString) WINBASEAPI BOOL WINAPI PeekNamedPipe(HANDLE,PVOID,DWORD,PDWORD,PDWORD,PDWORD); WINBASEAPI BOOL WINAPI PostQueuedCompletionStatus(HANDLE,DWORD,ULONG_PTR,LPOVERLAPPED); WINBASEAPI DWORD WINAPI PrepareTape(HANDLE,DWORD,BOOL); WINBASEAPI BOOL WINAPI ProcessIdToSessionId(DWORD,DWORD*); WINADVAPI BOOL WINAPI PrivilegeCheck(HANDLE,PPRIVILEGE_SET,LPBOOL); WINADVAPI BOOL WINAPI PrivilegedServiceAuditAlarmA(LPCSTR,LPCSTR,HANDLE,PPRIVILEGE_SET,BOOL); WINADVAPI BOOL WINAPI PrivilegedServiceAuditAlarmW(LPCWSTR,LPCWSTR,HANDLE,PPRIVILEGE_SET,BOOL); #define PrivilegedServiceAuditAlarm WINELIB_NAME_AW(PrivilegedServiceAuditAlarm) WINBASEAPI BOOL WINAPI PulseEvent(HANDLE); WINBASEAPI BOOL WINAPI PurgeComm(HANDLE,DWORD); WINBASEAPI BOOL WINAPI QueryActCtxSettingsW(DWORD,HANDLE,const WCHAR*,const WCHAR*,WCHAR*,SIZE_T,SIZE_T*); WINBASEAPI BOOL WINAPI QueryActCtxW(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T *); WINBASEAPI USHORT WINAPI QueryDepthSList(PSLIST_HEADER); WINBASEAPI DWORD WINAPI QueryDosDeviceA(LPCSTR,LPSTR,DWORD); WINBASEAPI DWORD WINAPI QueryDosDeviceW(LPCWSTR,LPWSTR,DWORD); #define QueryDosDevice WINELIB_NAME_AW(QueryDosDevice) WINBASEAPI BOOL WINAPI QueryFullProcessImageNameA(HANDLE,DWORD,LPSTR,PDWORD); WINBASEAPI BOOL WINAPI QueryFullProcessImageNameW(HANDLE,DWORD,LPWSTR,PDWORD); #define QueryFullProcessImageName WINELIB_NAME_AW(QueryFullProcessImageName) WINBASEAPI BOOL WINAPI QueryInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,LPVOID,DWORD,DWORD*); WINBASEAPI BOOL WINAPI QueryMemoryResourceNotification(HANDLE,PBOOL); WINBASEAPI BOOL WINAPI QueryPerformanceCounter(LARGE_INTEGER*); WINBASEAPI BOOL WINAPI QueryPerformanceFrequency(LARGE_INTEGER*); WINBASEAPI BOOL WINAPI QueryThreadCycleTime(HANDLE,PULONG64); WINBASEAPI BOOL WINAPI QueryUmsThreadInformation(PUMS_CONTEXT,UMS_THREAD_INFO_CLASS,PVOID,ULONG,PULONG); WINBASEAPI DWORD WINAPI QueueUserAPC(PAPCFUNC,HANDLE,ULONG_PTR); WINBASEAPI BOOL WINAPI QueueUserWorkItem(LPTHREAD_START_ROUTINE,PVOID,ULONG); WINBASEAPI void WINAPI RaiseException(DWORD,DWORD,DWORD,const ULONG_PTR *); WINADVAPI BOOL WINAPI ReadEventLogA(HANDLE,DWORD,DWORD,LPVOID,DWORD,DWORD *,DWORD *); WINADVAPI BOOL WINAPI ReadEventLogW(HANDLE,DWORD,DWORD,LPVOID,DWORD,DWORD *,DWORD *); #define ReadEventLog WINELIB_NAME_AW(ReadEventLog) WINBASEAPI BOOL WINAPI ReadDirectoryChangesW(HANDLE,LPVOID,DWORD,BOOL,DWORD,LPDWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE); WINADVAPI DWORD WINAPI ReadEncryptedFileRaw(PFE_EXPORT_FUNC,PVOID,PVOID); WINBASEAPI BOOL WINAPI ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED); WINBASEAPI BOOL WINAPI ReadFileEx(HANDLE,LPVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE); WINBASEAPI BOOL WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED); WINBASEAPI BOOL WINAPI ReadProcessMemory(HANDLE,LPCVOID,LPVOID,SIZE_T,SIZE_T*); WINADVAPI HANDLE WINAPI RegisterEventSourceA(LPCSTR,LPCSTR); WINADVAPI HANDLE WINAPI RegisterEventSourceW(LPCWSTR,LPCWSTR); #define RegisterEventSource WINELIB_NAME_AW(RegisterEventSource) WINBASEAPI BOOL WINAPI RegisterWaitForSingleObject(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG); WINBASEAPI HANDLE WINAPI RegisterWaitForSingleObjectEx(HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG); WINBASEAPI VOID WINAPI ReleaseActCtx(HANDLE); WINBASEAPI BOOL WINAPI ReleaseMutex(HANDLE); WINBASEAPI VOID WINAPI ReleaseMutexWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE); WINBASEAPI BOOL WINAPI ReleaseSemaphore(HANDLE,LONG,LPLONG); WINBASEAPI VOID WINAPI ReleaseSemaphoreWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE,DWORD); WINBASEAPI VOID WINAPI ReleaseSRWLockExclusive(PSRWLOCK); WINBASEAPI VOID WINAPI ReleaseSRWLockShared(PSRWLOCK); WINBASEAPI ULONG WINAPI RemoveVectoredExceptionHandler(PVOID); WINBASEAPI BOOL WINAPI ReplaceFileA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPVOID,LPVOID); WINBASEAPI BOOL WINAPI ReplaceFileW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPVOID,LPVOID); #define ReplaceFile WINELIB_NAME_AW(ReplaceFile) WINBASEAPI BOOL WINAPI RemoveDirectoryA(LPCSTR); WINBASEAPI BOOL WINAPI RemoveDirectoryW(LPCWSTR); #define RemoveDirectory WINELIB_NAME_AW(RemoveDirectory) WINADVAPI BOOL WINAPI ReportEventA(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCSTR *,LPVOID); WINADVAPI BOOL WINAPI ReportEventW(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCWSTR *,LPVOID); WINBASEAPI BOOL WINAPI RequestDeviceWakeup(HANDLE); WINBASEAPI BOOL WINAPI RequestWakeupLatency(LATENCY_TIME latency); #define ReportEvent WINELIB_NAME_AW(ReportEvent) WINBASEAPI BOOL WINAPI ResetEvent(HANDLE); WINBASEAPI UINT WINAPI ResetWriteWatch(LPVOID,SIZE_T); WINBASEAPI DWORD WINAPI ResumeThread(HANDLE); WINADVAPI BOOL WINAPI RevertToSelf(void); WINBASEAPI DWORD WINAPI SearchPathA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPSTR,LPSTR*); WINBASEAPI DWORD WINAPI SearchPathW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*); #define SearchPath WINELIB_NAME_AW(SearchPath) WINADVAPI BOOL WINAPI SetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS); WINBASEAPI BOOL WINAPI SetCommConfig(HANDLE,LPCOMMCONFIG,DWORD); WINBASEAPI BOOL WINAPI SetCommBreak(HANDLE); WINBASEAPI BOOL WINAPI SetCommMask(HANDLE,DWORD); WINBASEAPI BOOL WINAPI SetCommState(HANDLE,LPDCB); WINBASEAPI BOOL WINAPI SetCommTimeouts(HANDLE,LPCOMMTIMEOUTS); WINBASEAPI BOOL WINAPI SetComputerNameA(LPCSTR); WINBASEAPI BOOL WINAPI SetComputerNameW(LPCWSTR); #define SetComputerName WINELIB_NAME_AW(SetComputerName) WINBASEAPI BOOL WINAPI SetComputerNameExA(COMPUTER_NAME_FORMAT,LPCSTR); WINBASEAPI BOOL WINAPI SetComputerNameExW(COMPUTER_NAME_FORMAT,LPCWSTR); #define SetComputerNameEx WINELIB_NAME_AW(SetComputerNameEx) WINBASEAPI DWORD WINAPI SetCriticalSectionSpinCount(LPCRITICAL_SECTION,DWORD); WINBASEAPI BOOL WINAPI SetCurrentDirectoryA(LPCSTR); WINBASEAPI BOOL WINAPI SetCurrentDirectoryW(LPCWSTR); #define SetCurrentDirectory WINELIB_NAME_AW(SetCurrentDirectory) WINBASEAPI BOOL WINAPI SetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,DWORD); WINBASEAPI BOOL WINAPI SetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,DWORD); #define SetDefaultCommConfig WINELIB_NAME_AW(SetDefaultCommConfig) WINBASEAPI BOOL WINAPI SetDllDirectoryA(LPCSTR); WINBASEAPI BOOL WINAPI SetDllDirectoryW(LPCWSTR); #define SetDllDirectory WINELIB_NAME_AW(SetDllDirectory) WINBASEAPI BOOL WINAPI SetDynamicTimeZoneInformation(const DYNAMIC_TIME_ZONE_INFORMATION*); WINBASEAPI BOOL WINAPI SetEndOfFile(HANDLE); WINBASEAPI BOOL WINAPI SetEnvironmentVariableA(LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI SetEnvironmentVariableW(LPCWSTR,LPCWSTR); #define SetEnvironmentVariable WINELIB_NAME_AW(SetEnvironmentVariable) WINBASEAPI UINT WINAPI SetErrorMode(UINT); WINBASEAPI BOOL WINAPI SetEvent(HANDLE); WINBASEAPI VOID WINAPI SetEventWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE); WINBASEAPI VOID WINAPI SetFileApisToANSI(void); WINBASEAPI VOID WINAPI SetFileApisToOEM(void); WINBASEAPI BOOL WINAPI SetFileAttributesA(LPCSTR,DWORD); WINBASEAPI BOOL WINAPI SetFileAttributesW(LPCWSTR,DWORD); #define SetFileAttributes WINELIB_NAME_AW(SetFileAttributes) WINBASEAPI BOOL WINAPI SetFileCompletionNotificationModes(HANDLE,UCHAR); WINBASEAPI BOOL WINAPI SetFileInformationByHandle(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD); WINBASEAPI DWORD WINAPI SetFilePointer(HANDLE,LONG,LPLONG,DWORD); WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,LARGE_INTEGER*,DWORD); WINADVAPI BOOL WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); WINADVAPI BOOL WINAPI SetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); #define SetFileSecurity WINELIB_NAME_AW(SetFileSecurity) WINBASEAPI BOOL WINAPI SetFileTime(HANDLE,const FILETIME*,const FILETIME*,const FILETIME*); WINBASEAPI BOOL WINAPI SetFileValidData(HANDLE,LONGLONG); WINBASEAPI UINT WINAPI SetHandleCount(UINT); WINBASEAPI BOOL WINAPI SetHandleInformation(HANDLE,DWORD,DWORD); WINBASEAPI BOOL WINAPI SetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,LPVOID,DWORD); WINADVAPI BOOL WINAPI SetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); WINBASEAPI BOOL WINAPI SetLocalTime(const SYSTEMTIME*); WINBASEAPI BOOL WINAPI SetMailslotInfo(HANDLE,DWORD); WINBASEAPI BOOL WINAPI SetNamedPipeHandleState(HANDLE,LPDWORD,LPDWORD,LPDWORD); WINBASEAPI BOOL WINAPI SetPriorityClass(HANDLE,DWORD); WINADVAPI BOOL WINAPI SetPrivateObjectSecurity(SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,PGENERIC_MAPPING,HANDLE); WINBASEAPI BOOL WINAPI SetProcessAffinityMask(HANDLE,DWORD_PTR); WINBASEAPI BOOL WINAPI SetProcessPriorityBoost(HANDLE,BOOL); WINBASEAPI BOOL WINAPI SetProcessShutdownParameters(DWORD,DWORD); WINBASEAPI BOOL WINAPI SetProcessWorkingSetSize(HANDLE,SIZE_T,SIZE_T); WINBASEAPI BOOL WINAPI SetProcessWorkingSetSizeEx(HANDLE,SIZE_T,SIZE_T,DWORD); WINBASEAPI BOOL WINAPI SetSearchPathMode(DWORD); WINADVAPI BOOL WINAPI SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL); WINADVAPI BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL); WINADVAPI BOOL WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID,BOOL); WINADVAPI BOOL WINAPI SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID,BOOL); WINADVAPI BOOL WINAPI SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL); WINBASEAPI BOOL WINAPI SetStdHandle(DWORD,HANDLE); #define SetSwapAreaSize(w) (w) WINBASEAPI BOOL WINAPI SetSystemPowerState(BOOL,BOOL); WINBASEAPI BOOL WINAPI SetSystemTime(const SYSTEMTIME*); WINBASEAPI BOOL WINAPI SetSystemTimeAdjustment(DWORD,BOOL); WINBASEAPI DWORD WINAPI SetTapeParameters(HANDLE,DWORD,LPVOID); WINBASEAPI DWORD WINAPI SetTapePosition(HANDLE,DWORD,DWORD,DWORD,DWORD,BOOL); WINBASEAPI DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE,DWORD_PTR); WINBASEAPI BOOL WINAPI SetThreadContext(HANDLE,const CONTEXT *); WINBASEAPI BOOL WINAPI SetThreadErrorMode(DWORD,LPDWORD); WINBASEAPI DWORD WINAPI SetThreadExecutionState(EXECUTION_STATE); WINBASEAPI DWORD WINAPI SetThreadIdealProcessor(HANDLE,DWORD); WINBASEAPI VOID WINAPI SetThreadpoolThreadMaximum(PTP_POOL,DWORD); WINBASEAPI BOOL WINAPI SetThreadpoolThreadMinimum(PTP_POOL,DWORD); WINBASEAPI BOOL WINAPI SetThreadPriority(HANDLE,INT); WINBASEAPI BOOL WINAPI SetThreadPriorityBoost(HANDLE,BOOL); WINADVAPI BOOL WINAPI SetThreadToken(PHANDLE,HANDLE); WINBASEAPI VOID WINAPI SetThreadpoolTimer(PTP_TIMER,FILETIME*,DWORD,DWORD); WINBASEAPI VOID WINAPI SetThreadpoolWait(PTP_WAIT,HANDLE,FILETIME *); WINBASEAPI HANDLE WINAPI SetTimerQueueTimer(HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,BOOL); WINBASEAPI BOOL WINAPI SetTimeZoneInformation(const TIME_ZONE_INFORMATION *); WINADVAPI BOOL WINAPI SetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD); WINBASEAPI LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER); WINBASEAPI BOOL WINAPI SetVolumeLabelA(LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI SetVolumeLabelW(LPCWSTR,LPCWSTR); #define SetVolumeLabel WINELIB_NAME_AW(SetVolumeLabel) WINBASEAPI BOOL WINAPI SetVolumeMountPointA(LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI SetVolumeMountPointW(LPCWSTR,LPCWSTR); #define SetVolumeMountPoint WINELIB_NAME_AW(SetVolumeMountPoint) WINBASEAPI BOOL WINAPI SetWaitableTimer(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,BOOL); WINBASEAPI BOOL WINAPI SetWaitableTimerEx(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,REASON_CONTEXT*,ULONG); WINBASEAPI BOOL WINAPI SetUmsThreadInformation(PUMS_CONTEXT,UMS_THREAD_INFO_CLASS,void *,ULONG); WINBASEAPI BOOL WINAPI SetupComm(HANDLE,DWORD,DWORD); WINBASEAPI DWORD WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL); WINBASEAPI DWORD WINAPI SizeofResource(HMODULE,HRSRC); WINBASEAPI VOID WINAPI Sleep(DWORD); WINBASEAPI BOOL WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE,PCRITICAL_SECTION,DWORD); WINBASEAPI BOOL WINAPI SleepConditionVariableSRW(PCONDITION_VARIABLE,PSRWLOCK,DWORD,ULONG); WINBASEAPI DWORD WINAPI SleepEx(DWORD,BOOL); WINBASEAPI VOID WINAPI SubmitThreadpoolWork(PTP_WORK); WINBASEAPI DWORD WINAPI SuspendThread(HANDLE); WINBASEAPI void WINAPI SwitchToFiber(LPVOID); WINBASEAPI BOOL WINAPI SwitchToThread(void); WINBASEAPI BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME*,LPFILETIME); WINBASEAPI BOOL WINAPI SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION*,const SYSTEMTIME*,LPSYSTEMTIME); WINBASEAPI BOOL WINAPI TerminateJobObject(HANDLE,UINT); WINBASEAPI BOOL WINAPI TerminateProcess(HANDLE,DWORD); WINBASEAPI BOOL WINAPI TerminateThread(HANDLE,DWORD); WINBASEAPI DWORD WINAPI TlsAlloc(void); WINBASEAPI BOOL WINAPI TlsFree(DWORD); WINBASEAPI LPVOID WINAPI TlsGetValue(DWORD); WINBASEAPI BOOL WINAPI TlsSetValue(DWORD,LPVOID); WINBASEAPI BOOL WINAPI TransactNamedPipe(HANDLE,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED); WINBASEAPI BOOL WINAPI TransmitCommChar(HANDLE,CHAR); WINBASEAPI BOOLEAN WINAPI TryAcquireSRWLockExclusive(PSRWLOCK); WINBASEAPI BOOLEAN WINAPI TryAcquireSRWLockShared(PSRWLOCK); WINBASEAPI BOOL WINAPI TryEnterCriticalSection(CRITICAL_SECTION *lpCrit); WINBASEAPI BOOL WINAPI TrySubmitThreadpoolCallback(PTP_SIMPLE_CALLBACK,void*,TP_CALLBACK_ENVIRON*); WINBASEAPI BOOL WINAPI TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION*,const SYSTEMTIME*,LPSYSTEMTIME); WINBASEAPI LONG WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS); WINBASEAPI BOOL WINAPI UnlockFile(HANDLE,DWORD,DWORD,DWORD,DWORD); WINBASEAPI BOOL WINAPI UnlockFileEx(HANDLE,DWORD,DWORD,DWORD,LPOVERLAPPED); #define UnlockResource(handle) ((handle), 0) #define UnlockSegment(handle) GlobalUnfix((HANDLE)(handle)) WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID); WINBASEAPI BOOL WINAPI UmsThreadYield(void *); WINBASEAPI HRESULT WINAPI UnregisterApplicationRestart(void); WINBASEAPI BOOL WINAPI UnregisterWait(HANDLE); WINBASEAPI BOOL WINAPI UnregisterWaitEx(HANDLE,HANDLE); WINBASEAPI BOOL WINAPI UpdateProcThreadAttribute(struct _PROC_THREAD_ATTRIBUTE_LIST*,DWORD,DWORD_PTR,void*,SIZE_T,void*,SIZE_T*); WINBASEAPI BOOL WINAPI UpdateResourceA(HANDLE,LPCSTR,LPCSTR,WORD,LPVOID,DWORD); WINBASEAPI BOOL WINAPI UpdateResourceW(HANDLE,LPCWSTR,LPCWSTR,WORD,LPVOID,DWORD); #define UpdateResource WINELIB_NAME_AW(UpdateResource) WINBASEAPI BOOL WINAPI VerifyVersionInfoA(LPOSVERSIONINFOEXA,DWORD,DWORDLONG); WINBASEAPI BOOL WINAPI VerifyVersionInfoW(LPOSVERSIONINFOEXW,DWORD,DWORDLONG); #define VerifyVersionInfo WINELIB_NAME_AW(VerifyVersionInfo) WINBASEAPI LPVOID WINAPI VirtualAlloc(LPVOID,SIZE_T,DWORD,DWORD); WINBASEAPI LPVOID WINAPI VirtualAllocEx(HANDLE,LPVOID,SIZE_T,DWORD,DWORD); WINBASEAPI BOOL WINAPI VirtualFree(LPVOID,SIZE_T,DWORD); WINBASEAPI BOOL WINAPI VirtualFreeEx(HANDLE,LPVOID,SIZE_T,DWORD); WINBASEAPI BOOL WINAPI VirtualLock(LPVOID,SIZE_T); WINBASEAPI BOOL WINAPI VirtualProtect(LPVOID,SIZE_T,DWORD,LPDWORD); WINBASEAPI BOOL WINAPI VirtualProtectEx(HANDLE,LPVOID,SIZE_T,DWORD,LPDWORD); WINBASEAPI SIZE_T WINAPI VirtualQuery(LPCVOID,PMEMORY_BASIC_INFORMATION,SIZE_T); WINBASEAPI SIZE_T WINAPI VirtualQueryEx(HANDLE,LPCVOID,PMEMORY_BASIC_INFORMATION,SIZE_T); WINBASEAPI BOOL WINAPI VirtualUnlock(LPVOID,SIZE_T); WINBASEAPI DWORD WINAPI WTSGetActiveConsoleSessionId(void); WINBASEAPI BOOL WINAPI WaitCommEvent(HANDLE,LPDWORD,LPOVERLAPPED); WINBASEAPI BOOL WINAPI WaitForDebugEvent(LPDEBUG_EVENT,DWORD); WINBASEAPI DWORD WINAPI WaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD); WINBASEAPI DWORD WINAPI WaitForMultipleObjectsEx(DWORD,const HANDLE*,BOOL,DWORD,BOOL); WINBASEAPI DWORD WINAPI WaitForSingleObject(HANDLE,DWORD); WINBASEAPI DWORD WINAPI WaitForSingleObjectEx(HANDLE,DWORD,BOOL); WINBASEAPI VOID WINAPI WaitForThreadpoolTimerCallbacks(PTP_TIMER,BOOL); WINBASEAPI VOID WINAPI WaitForThreadpoolWaitCallbacks(PTP_WAIT,BOOL); WINBASEAPI VOID WINAPI WaitForThreadpoolWorkCallbacks(PTP_WORK,BOOL); WINBASEAPI BOOL WINAPI WaitNamedPipeA(LPCSTR,DWORD); WINBASEAPI BOOL WINAPI WaitNamedPipeW(LPCWSTR,DWORD); #define WaitNamedPipe WINELIB_NAME_AW(WaitNamedPipe) WINBASEAPI VOID WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE); WINBASEAPI VOID WINAPI WakeConditionVariable(PCONDITION_VARIABLE); WINBASEAPI UINT WINAPI WinExec(LPCSTR,UINT); WINBASEAPI BOOL WINAPI Wow64DisableWow64FsRedirection(PVOID*); WINBASEAPI BOOLEAN WINAPI Wow64EnableWow64FsRedirection(BOOLEAN); WINBASEAPI BOOL WINAPI Wow64GetThreadContext(HANDLE, WOW64_CONTEXT *); WINBASEAPI BOOL WINAPI Wow64RevertWow64FsRedirection(PVOID); WINBASEAPI BOOL WINAPI Wow64SetThreadContext(HANDLE, const WOW64_CONTEXT *); WINADVAPI DWORD WINAPI WriteEncryptedFileRaw(PFE_IMPORT_FUNC,PVOID,PVOID); WINBASEAPI BOOL WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED); WINBASEAPI BOOL WINAPI WriteFileEx(HANDLE,LPCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE); WINBASEAPI BOOL WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED); WINBASEAPI BOOL WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR); #define WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection) WINBASEAPI BOOL WINAPI WritePrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI WritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); #define WritePrivateProfileString WINELIB_NAME_AW(WritePrivateProfileString) WINBASEAPI BOOL WINAPI WritePrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR); WINBASEAPI BOOL WINAPI WritePrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR); #define WritePrivateProfileStruct WINELIB_NAME_AW(WritePrivateProfileStruct) WINBASEAPI BOOL WINAPI WriteProcessMemory(HANDLE,LPVOID,LPCVOID,SIZE_T,SIZE_T*); WINBASEAPI BOOL WINAPI WriteProfileSectionA(LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI WriteProfileSectionW(LPCWSTR,LPCWSTR); #define WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection) WINBASEAPI BOOL WINAPI WriteProfileStringA(LPCSTR,LPCSTR,LPCSTR); WINBASEAPI BOOL WINAPI WriteProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR); #define WriteProfileString WINELIB_NAME_AW(WriteProfileString) WINBASEAPI DWORD WINAPI WriteTapemark(HANDLE,DWORD,DWORD,BOOL); #define Yield() WINBASEAPI BOOL WINAPI ZombifyActCtx(HANDLE); WINBASEAPI INT WINAPI lstrcmpA(LPCSTR,LPCSTR); WINBASEAPI INT WINAPI lstrcmpW(LPCWSTR,LPCWSTR); WINBASEAPI INT WINAPI lstrcmpiA(LPCSTR,LPCSTR); WINBASEAPI INT WINAPI lstrcmpiW(LPCWSTR,LPCWSTR); #if !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING) WINBASEAPI LPSTR WINAPI lstrcatA(LPSTR,LPCSTR); WINBASEAPI LPWSTR WINAPI lstrcatW(LPWSTR,LPCWSTR); WINBASEAPI LPSTR WINAPI lstrcpyA(LPSTR,LPCSTR); WINBASEAPI LPWSTR WINAPI lstrcpyW(LPWSTR,LPCWSTR); WINBASEAPI LPSTR WINAPI lstrcpynA(LPSTR,LPCSTR,INT); WINBASEAPI LPWSTR WINAPI lstrcpynW(LPWSTR,LPCWSTR,INT); WINBASEAPI INT WINAPI lstrlenA(LPCSTR); WINBASEAPI INT WINAPI lstrlenW(LPCWSTR); #else /* string functions without the exception handler */ static inline LPWSTR WINAPI lstrcpynW( LPWSTR dst, LPCWSTR src, INT n ) { LPWSTR d = dst; LPCWSTR s = src; UINT count = n; while ((count > 1) && *s) { count--; *d++ = *s++; } if (count) *d = 0; return dst; } static inline LPSTR WINAPI lstrcpynA( LPSTR dst, LPCSTR src, INT n ) { LPSTR d = dst; LPCSTR s = src; UINT count = n; while ((count > 1) && *s) { count--; *d++ = *s++; } if (count) *d = 0; return dst; } static inline INT WINAPI lstrlenW( LPCWSTR str ) { const WCHAR *s = str; while (*s) s++; return s - str; } static inline INT WINAPI lstrlenA( LPCSTR str ) { return strlen( str ); } static inline LPWSTR WINAPI lstrcpyW( LPWSTR dst, LPCWSTR src ) { WCHAR *p = dst; while ((*p++ = *src++)); return dst; } static inline LPSTR WINAPI lstrcpyA( LPSTR dst, LPCSTR src ) { return strcpy( dst, src ); } static inline LPWSTR WINAPI lstrcatW( LPWSTR dst, LPCWSTR src ) { WCHAR *p = dst; while (*p) p++; while ((*p++ = *src++)); return dst; } static inline LPSTR WINAPI lstrcatA( LPSTR dst, LPCSTR src ) { return strcat( dst, src ); } /* strncpy doesn't do what you think, don't use it */ #undef strncpy #define strncpy(d,s,n) error do_not_use_strncpy_use_lstrcpynA_or_memcpy_instead #endif /* !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING) */ #define lstrcat WINELIB_NAME_AW(lstrcat) #define lstrcmp WINELIB_NAME_AW(lstrcmp) #define lstrcmpi WINELIB_NAME_AW(lstrcmpi) #define lstrcpy WINELIB_NAME_AW(lstrcpy) #define lstrcpyn WINELIB_NAME_AW(lstrcpyn) #define lstrlen WINELIB_NAME_AW(lstrlen) WINBASEAPI LONG WINAPI _hread(HFILE,LPVOID,LONG); WINBASEAPI LONG WINAPI _hwrite(HFILE,LPCSTR,LONG); WINBASEAPI HFILE WINAPI _lcreat(LPCSTR,INT); WINBASEAPI HFILE WINAPI _lclose(HFILE); WINBASEAPI LONG WINAPI _llseek(HFILE,LONG,INT); WINBASEAPI HFILE WINAPI _lopen(LPCSTR,INT); WINBASEAPI UINT WINAPI _lread(HFILE,LPVOID,UINT); WINBASEAPI UINT WINAPI _lwrite(HFILE,LPCSTR,UINT); /* compatibility macros */ #define FillMemory RtlFillMemory #define MoveMemory RtlMoveMemory #define ZeroMemory RtlZeroMemory #define CopyMemory RtlCopyMemory #define SecureZeroMemory RtlSecureZeroMemory /* Wine internal functions */ extern char * CDECL wine_get_unix_file_name( LPCWSTR dos ); extern WCHAR * CDECL wine_get_dos_file_name( LPCSTR str ); /* Interlocked functions */ #ifdef __i386__ # if defined(__GNUC__) && !defined(_NTSYSTEM_) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare ) { LONG ret; __asm__ __volatile__( "lock; cmpxchgl %2,(%1)" : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); return ret; } static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val ) { LONG ret; __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" ); return ret; } static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr ) { LONG ret; __asm__ __volatile__( "lock; xaddl %0,(%1)" : "=r" (ret) : "r" (dest), "0" (incr) : "memory" ); return ret; } static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest ) { return InterlockedExchangeAdd( dest, 1 ) + 1; } static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest ) { return InterlockedExchangeAdd( dest, -1 ) - 1; } # else /* __GNUC__ */ WINBASEAPI LONG WINAPI InterlockedCompareExchange(LONG volatile*,LONG,LONG); WINBASEAPI LONG WINAPI InterlockedDecrement(LONG volatile*); WINBASEAPI LONG WINAPI InterlockedExchange(LONG volatile*,LONG); WINBASEAPI LONG WINAPI InterlockedExchangeAdd(LONG volatile*,LONG); WINBASEAPI LONG WINAPI InterlockedIncrement(LONG volatile*); # endif /* __GNUC__ */ static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare ) { return (PVOID)InterlockedCompareExchange( (LONG volatile*)dest, (LONG)xchg, (LONG)compare ); } static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val ) { return (PVOID)InterlockedExchange( (LONG volatile*)dest, (LONG)val ); } WINBASEAPI LONGLONG WINAPI InterlockedCompareExchange64(LONGLONG volatile*,LONGLONG,LONGLONG); #elif defined(_MSC_VER) #pragma intrinsic(_InterlockedCompareExchange) #pragma intrinsic(_InterlockedCompareExchangePointer) #pragma intrinsic(_InterlockedCompareExchange64) #pragma intrinsic(_InterlockedExchange) #pragma intrinsic(_InterlockedExchangePointer) #pragma intrinsic(_InterlockedExchangeAdd) #pragma intrinsic(_InterlockedIncrement) #pragma intrinsic(_InterlockedDecrement) static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare ) { return _InterlockedCompareExchange( dest, xchg, compare ); } static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare ) { return _InterlockedCompareExchangePointer( dest, xchg, compare ); } static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare ) { return _InterlockedCompareExchange64( dest, xchg, compare ); } static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val ) { return _InterlockedExchange( dest, val ); } static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val ) { return _InterlockedExchangePointer( dest, val ); } static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr ) { return _InterlockedExchangeAdd( dest, incr ); } static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest ) { return _InterlockedIncrement( dest ); } static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest ) { return _InterlockedDecrement( dest ); } #elif defined(__GNUC__) static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val ) { LONG ret; #ifdef __x86_64__ __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" ); #else do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val )); #endif return ret; } static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val ) { PVOID ret; #ifdef __x86_64__ __asm__ __volatile__( "lock; xchgq %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" ); #else do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val )); #endif return ret; } static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr ) { return __sync_fetch_and_add( dest, incr ); } static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest ) { return __sync_add_and_fetch( dest, 1 ); } static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest ) { return __sync_add_and_fetch( dest, -1 ); } #endif /* __i386__ */ /* A few optimizations for gcc */ #if defined(__GNUC__) && !defined(__MINGW32__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) static FORCEINLINE DWORD WINAPI GetLastError(void) { DWORD ret; #ifdef __x86_64__ #ifdef __APPLE__ DWORD* teb; __asm__ __volatile__( ".byte 0x65\n\tmovq 0x30,%0" : "=r" (teb) ); ret = teb[0x68 / sizeof(DWORD)]; #else __asm__ __volatile__( ".byte 0x65\n\tmovl 0x68,%0" : "=r" (ret) ); #endif #else __asm__ __volatile__( ".byte 0x64\n\tmovl 0x34,%0" : "=r" (ret) ); #endif return ret; } static FORCEINLINE DWORD WINAPI GetCurrentProcessId(void) { DWORD ret; #ifdef __x86_64__ #ifdef __APPLE__ DWORD* teb; __asm__ __volatile__( ".byte 0x65\n\tmovq 0x30,%0" : "=r" (teb) ); ret = teb[0x40 / sizeof(DWORD)]; #else __asm__ __volatile__( ".byte 0x65\n\tmovl 0x40,%0" : "=r" (ret) ); #endif #else __asm__ __volatile__( ".byte 0x64\n\tmovl 0x20,%0" : "=r" (ret) ); #endif return ret; } static FORCEINLINE DWORD WINAPI GetCurrentThreadId(void) { DWORD ret; #ifdef __x86_64__ #ifdef __APPLE__ DWORD* teb; __asm__ __volatile__( ".byte 0x65\n\tmovq 0x30,%0" : "=r" (teb) ); ret = teb[0x48 / sizeof(DWORD)]; #else __asm__ __volatile__( ".byte 0x65\n\tmovl 0x48,%0" : "=r" (ret) ); #endif #else __asm__ __volatile__( ".byte 0x64\n\tmovl 0x24,%0" : "=r" (ret) ); #endif return ret; } static FORCEINLINE void WINAPI SetLastError( DWORD err ) { #ifdef __x86_64__ #ifdef __APPLE__ DWORD* teb; __asm__ __volatile__( ".byte 0x65\n\tmovq 0x30,%0" : "=r" (teb) ); teb[0x68 / sizeof(DWORD)] = err; #else __asm__ __volatile__( ".byte 0x65\n\tmovl %0,0x68" : : "r" (err) : "memory" ); #endif #else __asm__ __volatile__( ".byte 0x64\n\tmovl %0,0x34" : : "r" (err) : "memory" ); #endif } static FORCEINLINE HANDLE WINAPI GetProcessHeap(void) { HANDLE *pdb; #ifdef __x86_64__ #ifdef __APPLE__ HANDLE** teb; __asm__ __volatile__( ".byte 0x65\n\tmovq 0x30,%0" : "=r" (teb) ); pdb = teb[0x60 / sizeof(HANDLE*)]; #else __asm__ __volatile__( ".byte 0x65\n\tmovq 0x60,%0" : "=r" (pdb) ); #endif return pdb[0x30 / sizeof(HANDLE)]; /* get dword at offset 0x30 in pdb */ #else __asm__ __volatile__( ".byte 0x64\n\tmovl 0x30,%0" : "=r" (pdb) ); return pdb[0x18 / sizeof(HANDLE)]; /* get dword at offset 0x18 in pdb */ #endif } #else /* __GNUC__ */ WINBASEAPI DWORD WINAPI GetCurrentProcessId(void); WINBASEAPI DWORD WINAPI GetCurrentThreadId(void); WINBASEAPI DWORD WINAPI GetLastError(void); WINBASEAPI HANDLE WINAPI GetProcessHeap(void); WINBASEAPI VOID WINAPI SetLastError(DWORD); #endif /* __GNUC__ */ #ifdef __WINESRC__ #define GetCurrentProcess() ((HANDLE)~(ULONG_PTR)0) #define GetCurrentThread() ((HANDLE)~(ULONG_PTR)1) #endif #define GetCurrentProcessToken() ((HANDLE)~(ULONG_PTR)3) #define GetCurrentThreadToken() ((HANDLE)~(ULONG_PTR)4) #define GetCurrentThreadEffectiveToken() ((HANDLE)~(ULONG_PTR)5) /* WinMain(entry point) must be declared in winbase.h. */ /* If this is not declared, we cannot compile many sources written with C++. */ int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int); #ifdef __WINESRC__ /* shouldn't be here, but is nice for type checking */ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) DECLSPEC_HIDDEN; #endif #ifdef __cplusplus } #endif #endif /* __WINE_WINBASE_H */ ================================================ FILE: wine/windows/wincodec.idl ================================================ /* * Copyright 2009 Vincent Povirk for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; import "propidl.idl"; import "ocidl.idl"; cpp_quote ("#include \"dcommon.h\"") cpp_quote("#define WINCODEC_SDK_VERSION 0x0236") #define CODEC_FORCE_DWORD 0x7fffffff typedef enum WICDecodeOptions { WICDecodeMetadataCacheOnDemand = 0x00000000, WICDecodeMetadataCacheOnLoad = 0x00000001, WICMETADATACACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD } WICDecodeOptions; typedef enum WICBitmapCreateCacheOption { WICBitmapNoCache = 0x00000000, WICBitmapCacheOnDemand = 0x00000001, WICBitmapCacheOnLoad = 0x00000002, WICBITMAPCREATECACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD } WICBitmapCreateCacheOption; typedef enum WICBitmapAlphaChannelOption { WICBitmapUseAlpha = 0x00000000, WICBitmapUsePremultipliedAlpha = 0x00000001, WICBitmapIgnoreAlpha = 0x00000002, WICBITMAPALPHACHANNELOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD } WICBitmapAlphaChannelOption; typedef enum WICBitmapDecoderCapabilities { WICBitmapDecoderCapabilitySameEncoder = 0x00000001, WICBitmapDecoderCapabilityCanDecodeAllImages = 0x00000002, WICBitmapDecoderCapabilityCanDecodeSomeImages = 0x00000004, WICBitmapDecoderCapabilityCanEnumerateMetadata = 0x00000008, WICBitmapDecoderCapabilityCanDecodeThumbnail = 0x00000010, } WICBitmapDecoderCapabilities; typedef enum WICBitmapDitherType { WICBitmapDitherTypeNone = 0x00000000, WICBitmapDitherTypeSolid = 0x00000000, WICBitmapDitherTypeOrdered4x4 = 0x00000001, WICBitmapDitherTypeOrdered8x8 = 0x00000002, WICBitmapDitherTypeOrdered16x16 = 0x00000003, WICBitmapDitherTypeSpiral4x4 = 0x00000004, WICBitmapDitherTypeSpiral8x8 = 0x00000005, WICBitmapDitherTypeDualSpiral4x4 = 0x00000006, WICBitmapDitherTypeDualSpiral8x8 = 0x00000007, WICBitmapDitherTypeErrorDiffusion = 0x00000008, WICBITMAPDITHERTYPE_FORCE_DWORD = CODEC_FORCE_DWORD } WICBitmapDitherType; typedef enum WICBitmapEncoderCacheOption { WICBitmapEncoderCacheInMemory = 0x00000000, WICBitmapEncoderCacheTempFile = 0x00000001, WICBitmapEncoderNoCache = 0x00000002, WICBITMAPENCODERCACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD } WICBitmapEncoderCacheOption; typedef enum WICBitmapInterpolationMode { WICBitmapInterpolationModeNearestNeighbor = 0x00000000, WICBitmapInterpolationModeLinear = 0x00000001, WICBitmapInterpolationModeCubic = 0x00000002, WICBitmapInterpolationModeFant = 0x00000003, WICBITMAPINTERPOLATIONMODE_FORCE_DWORD = CODEC_FORCE_DWORD } WICBitmapInterpolationMode; typedef enum WICBitmapLockFlags { WICBitmapLockRead = 0x00000001, WICBitmapLockWrite = 0x00000002, WICBITMAPLOCKFLAGS_FORCE_DWORD = CODEC_FORCE_DWORD } WICBitmapLockFlags; typedef enum WICBitmapPaletteType { WICBitmapPaletteTypeCustom = 0x00000000, WICBitmapPaletteTypeMedianCut = 0x00000001, WICBitmapPaletteTypeFixedBW = 0x00000002, WICBitmapPaletteTypeFixedHalftone8 = 0x00000003, WICBitmapPaletteTypeFixedHalftone27 = 0x00000004, WICBitmapPaletteTypeFixedHalftone64 = 0x00000005, WICBitmapPaletteTypeFixedHalftone125 = 0x00000006, WICBitmapPaletteTypeFixedHalftone216 = 0x00000007, WICBitmapPaletteTypeFixedWebPalette = WICBitmapPaletteTypeFixedHalftone216, WICBitmapPaletteTypeFixedHalftone252 = 0x00000008, WICBitmapPaletteTypeFixedHalftone256 = 0x00000009, WICBitmapPaletteTypeFixedGray4 = 0x0000000A, WICBitmapPaletteTypeFixedGray16 = 0x0000000B, WICBitmapPaletteTypeFixedGray256 = 0x0000000C, WICBITMAPPALETTETYPE_FORCE_DWORD = CODEC_FORCE_DWORD } WICBitmapPaletteType; typedef enum WICBitmapTransformOptions { WICBitmapTransformRotate0 = 0x00000000, WICBitmapTransformRotate90 = 0x00000001, WICBitmapTransformRotate180 = 0x00000002, WICBitmapTransformRotate270 = 0x00000003, WICBitmapTransformFlipHorizontal = 0x00000008, WICBitmapTransformFlipVertical = 0x00000010, WICBITMAPTRANSFORMOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD } WICBitmapTransformOptions; typedef enum WICColorContextType { WICColorContextUninitialized = 0x00000000, WICColorContextProfile = 0x00000001, WICColorContextExifColorSpace = 0x00000002 } WICColorContextType; typedef enum WICComponentType { WICDecoder = 0x00000001, WICEncoder = 0x00000002, WICPixelFormatConverter = 0x00000004, WICMetadataReader = 0x00000008, WICMetadataWriter = 0x00000010, WICPixelFormat = 0x00000020, WICCOMPONENTTYPE_FORCE_DWORD = CODEC_FORCE_DWORD } WICComponentType; typedef enum WICComponentSigning { WICComponentSigned = 0x00000001, WICComponentUnsigned = 0x00000002, WICComponentSafe = 0x00000004, WICComponentDisabled = 0x80000000 } WICComponentSigning; typedef enum WICComponentEnumerateOptions { WICComponentEnumerateDefault = 0x00000000, WICComponentEnumerateRefresh = 0x00000001, WICComponentEnumerateBuiltInOnly = 0x20000000, WICComponentEnumerateUnsigned = 0x40000000, WICComponentEnumerateDisabled = 0x80000000 } WICComponentEnumerateOptions; typedef enum WICJpegYCrCbSubsamplingOption { WICJpegYCrCbSubsamplingDefault = 0x00000000, WICJpegYCrCbSubsampling420 = 0x00000001, WICJpegYCrCbSubsampling422 = 0x00000002, WICJpegYCrCbSubsampling444 = 0x00000003, WICJpegYCrCbSubsampling440 = 0x00000004 } WICJpegYCrCbSubsamplingOption; typedef enum WICPixelFormatNumericRepresentation { WICPixelFormatNumericRepresentationUnspecified = 0x00000000, WICPixelFormatNumericRepresentationIndexed = 0x00000001, WICPixelFormatNumericRepresentationUnsignedInteger = 0x00000002, WICPixelFormatNumericRepresentationSignedInteger = 0x00000003, WICPixelFormatNumericRepresentationFixed = 0x00000004, WICPixelFormatNumericRepresentationFloat = 0x00000005, WICPIXELFORMATNUMERICREPRESENTATION_FORCE_DWORD = CODEC_FORCE_DWORD } WICPixelFormatNumericRepresentation; typedef enum WICTiffCompressionOption { WICTiffCompressionDontCare = 0x00000000, WICTiffCompressionNone = 0x00000001, WICTiffCompressionCCITT3 = 0x00000002, WICTiffCompressionCCITT4 = 0x00000003, WICTiffCompressionLZW = 0x00000004, WICTiffCompressionRLE = 0x00000005, WICTiffCompressionZIP = 0x00000006, WICTiffCompressionLZWHDifferencing = 0x00000007, WICTIFFCOMPRESSIONOPTION_FORCE_DWORD = CODEC_FORCE_DWORD } WICTiffCompressionOption; typedef enum WICPngFilterOption { WICPngFilterUnspecified = 0, WICPngFilterNone = 1, WICPngFilterSub = 2, WICPngFilterUp = 3, WICPngFilterAverage = 4, WICPngFilterPaeth = 5, WICPngFilterAdaptive = 6, WICPNFFILTEROPTION_FORCE_DWORD = CODEC_FORCE_DWORD } WICPngFilterOption; typedef enum WICSectionAccessLevel { WICSectionAccessLevelRead = 0x00000001, WICSectionAccessLevelReadWrite = 0x00000003, WICSectionAccessLevel_FORCE_DWORD = CODEC_FORCE_DWORD } WICSectionAccessLevel; typedef GUID WICPixelFormatGUID; typedef REFGUID REFWICPixelFormatGUID; cpp_quote("DEFINE_GUID(GUID_WICPixelFormatDontCare, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x00);") cpp_quote("#define GUID_WICPixelFormatUndefined GUID_WICPixelFormatDontCare") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat1bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x01);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat2bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x02);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat4bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x03);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat8bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x04);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormatBlackWhite, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x05);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat2bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x06);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat4bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x07);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat8bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x08);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0b);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGR555, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x09);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGR565, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0a);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGRA5551, 0x05ec7c2b,0xf1e6,0x4961,0xad,0x46,0xe1,0xcc,0x81,0x0a,0x87,0xd2);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat24bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0c);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat24bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0d);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0e);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0f);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppPBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x10);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppRGB, 0xd98c6b95,0x3efe,0x47d6,0xbb,0x25,0xeb,0x17,0x48,0xab,0x0c,0xf1);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppRGBA, 0xf5c7ad2d,0x6a8d,0x43dd,0xa7,0xa8,0xa2,0x99,0x35,0x26,0x1a,0xe9);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppPRGBA, 0x3cc4a650,0xa527,0x4d37,0xa9,0x16,0x31,0x42,0xc7,0xeb,0xed,0xba);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppGrayFloat, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x11);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat48bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x15);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x16);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppPRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x17);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppCMYK, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x1c);") cpp_quote("#if 0") typedef DWORD *D2D1_PIXEL_FORMAT; cpp_quote ("#endif") typedef struct WICRect { INT X; INT Y; INT Width; INT Height; } WICRect; typedef struct WICBitmapPattern { ULARGE_INTEGER Position; ULONG Length; BYTE *Pattern; BYTE *Mask; BOOL EndOfStream; } WICBitmapPattern; typedef struct WICImageParameters { D2D1_PIXEL_FORMAT PixelFormat; FLOAT DpiX; FLOAT DpiY; FLOAT Top; FLOAT Left; UINT32 PixelWidth; UINT32 PixelHeight; } WICImageParameters; typedef UINT32 WICColor; interface ID2D1Device; interface ID2D1Image; interface IWICPalette; [ object, uuid(3c613a02-34b2-44ea-9a7c-45aea9c6fd6d) ] interface IWICColorContext : IUnknown { HRESULT InitializeFromFilename( [in] LPCWSTR wzFilename); HRESULT InitializeFromMemory( [in, size_is(cbBufferSize)] const BYTE *pbBuffer, [in] UINT cbBufferSize); HRESULT InitializeFromExifColorSpace( [in] UINT value); HRESULT GetType( [out] WICColorContextType *pType); HRESULT GetProfileBytes( [in] UINT cbBuffer, [in, out, unique, size_is(cbBuffer)] BYTE *pbBuffer, [out] UINT *pcbActual); HRESULT GetExifColorSpace( [out] UINT *pValue); } [ object, uuid(00000120-a8f2-4877-ba0a-fd2b6645fb94) ] interface IWICBitmapSource : IUnknown { HRESULT GetSize( [out] UINT *puiWidth, [out] UINT *puiHeight); HRESULT GetPixelFormat( [out] WICPixelFormatGUID *pPixelFormat); HRESULT GetResolution( [out] double *pDpiX, [out] double *pDpiY); HRESULT CopyPalette( [in] IWICPalette *pIPalette); HRESULT CopyPixels( [in] const WICRect *prc, [in] UINT cbStride, [in] UINT cbBufferSize, [out, size_is(cbBufferSize)] BYTE *pbBuffer); } [ object, uuid(00000123-a8f2-4877-ba0a-fd2b6645fb94) ] interface IWICBitmapLock : IUnknown { HRESULT GetSize( [out] UINT *pWidth, [out] UINT *pHeight); HRESULT GetStride( [out] UINT *pcbStride); HRESULT GetDataPointer( [out] UINT *pcbBufferSize, [out, size_is(,*pcbBufferSize)] BYTE **ppbData); HRESULT GetPixelFormat( [out] WICPixelFormatGUID *pPixelFormat); } [ object, uuid(5009834f-2d6a-41ce-9e1b-17c5aff7a782) ] interface IWICBitmapFlipRotator : IWICBitmapSource { HRESULT Initialize( [in] IWICBitmapSource *pISource, [in] WICBitmapTransformOptions options); } [ object, uuid(00000121-a8f2-4877-ba0a-fd2b6645fb94) ] interface IWICBitmap : IWICBitmapSource { HRESULT Lock( [in] const WICRect *prcLock, [in] DWORD flags, [out] IWICBitmapLock **ppILock); HRESULT SetPalette( [in] IWICPalette *pIPalette); HRESULT SetResolution( [in] double dpiX, [in] double dpiY); } [ object, uuid(00000040-a8f2-4877-ba0a-fd2b6645fb94) ] interface IWICPalette : IUnknown { HRESULT InitializePredefined( [in] WICBitmapPaletteType ePaletteType, [in] BOOL fAddTransparentColor); HRESULT InitializeCustom( [in, size_is(colorCount)] WICColor *pColors, [in] UINT colorCount); HRESULT InitializeFromBitmap( [in] IWICBitmapSource *pISurface, [in] UINT colorCount, [in] BOOL fAddTransparentColor); HRESULT InitializeFromPalette( [in] IWICPalette *pIPalette); HRESULT GetType( [out] WICBitmapPaletteType *pePaletteType); HRESULT GetColorCount( [out] UINT *pcCount); HRESULT GetColors( [in] UINT colorCount, [out, size_is(colorCount)] WICColor *pColors, [out] UINT *pcActualColors); HRESULT IsBlackWhite( [out] BOOL *pfIsBlackWhite); HRESULT IsGrayscale( [out] BOOL *pfIsGrayscale); HRESULT HasAlpha( [out] BOOL *pfHasAlpha); } [ object, uuid(23bc3f0a-698b-4357-886b-f24d50671334) ] interface IWICComponentInfo : IUnknown { HRESULT GetComponentType( [out] WICComponentType *pType); HRESULT GetCLSID( [out] CLSID *pclsid); HRESULT GetSigningStatus( [out] DWORD *pStatus); HRESULT GetAuthor( [in] UINT cchAuthor, [in, out, unique, size_is(cchAuthor)] WCHAR *wzAuthor, [out] UINT *pcchActual); HRESULT GetVendorGUID( [out] GUID *pguidVendor); HRESULT GetVersion( [in] UINT cchVersion, [in, out, unique, size_is(cchVersion)] WCHAR *wzVersion, [out] UINT *pcchActual); HRESULT GetSpecVersion( [in] UINT cchSpecVersion, [in, out, unique, size_is(cchSpecVersion)] WCHAR *wzSpecVersion, [out] UINT *pcchActual); HRESULT GetFriendlyName( [in] UINT cchFriendlyName, [in, out, unique, size_is(cchFriendlyName)] WCHAR *wzFriendlyName, [out] UINT *pcchActual); } [ object, uuid(30989668-e1c9-4597-b395-458eedb808df) ] interface IWICMetadataQueryReader : IUnknown { HRESULT GetContainerFormat( [out] GUID *pguidContainerFormat); HRESULT GetLocation( [in] UINT cchMaxLength, [in, out, unique, size_is(cchMaxLength)] WCHAR *wzNamespace, [out] UINT *pcchActualLength); HRESULT GetMetadataByName( [in] LPCWSTR wzName, [in, out, unique] PROPVARIANT *pvarValue); HRESULT GetEnumerator( [out] IEnumString **ppIEnumString); } [ object, uuid(a721791a-0def-4d06-bd91-2118bf1db10b) ] interface IWICMetadataQueryWriter : IWICMetadataQueryReader { HRESULT SetMetadataByName( [in] LPCWSTR wzName, [in] const PROPVARIANT *pvarValue); HRESULT RemoveMetadataByName( [in] LPCWSTR wzName); } [ object, uuid(3b16811b-6a43-4ec9-a813-3d930c13b940) ] interface IWICBitmapFrameDecode : IWICBitmapSource { HRESULT GetMetadataQueryReader( [out] IWICMetadataQueryReader **ppIMetadataQueryReader); HRESULT GetColorContexts( [in] UINT cCount, [in, out, unique, size_is(cCount)] IWICColorContext **ppIColorContexts, [out] UINT *pcActualCount); HRESULT GetThumbnail( [out] IWICBitmapSource **ppIThumbnail); } [ object, uuid(e8eda601-3d48-431a-ab44-69059be88bbe) ] interface IWICPixelFormatInfo : IWICComponentInfo { HRESULT GetFormatGUID( [out] GUID* pFormat); HRESULT GetColorContext( [out] IWICColorContext **ppIColorContext); HRESULT GetBitsPerPixel( [out] UINT *puiBitsPerPixel); HRESULT GetChannelCount( [out] UINT *puiChannelCount); HRESULT GetChannelMask( [in] UINT uiChannelIndex, [in] UINT cbMaskBuffer, [in, out, unique, size_is(cbMaskBuffer)] BYTE *pbMaskBuffer, [out] UINT *pcbActual); } [ object, uuid(a9db33a2-af5f-43c7-b679-74f5984b5aa4) ] interface IWICPixelFormatInfo2 : IWICPixelFormatInfo { HRESULT SupportsTransparency( [out] BOOL *pfSupportsTransparency); HRESULT GetNumericRepresentation( [out] WICPixelFormatNumericRepresentation *pNumericRepresentation); } [ object, uuid(e87a44c4-b76e-4c47-8b09-298eb12a2714) ] interface IWICBitmapCodecInfo : IWICComponentInfo { HRESULT GetContainerFormat( [out] GUID *pguidContainerFormat); HRESULT GetPixelFormats( [in] UINT cFormats, [in, out, unique, size_is(cFormats)] GUID *pguidPixelFormats, [out] UINT *pcActual); HRESULT GetColorManagementVersion( [in] UINT cchColorManagementVersion, [in, out, unique, size_is(cchColorManagementVersion)] WCHAR *wzColorManagementVersion, [out] UINT *pcchActual); HRESULT GetDeviceManufacturer( [in] UINT cchDeviceManufacturer, [in, out, unique, size_is(cchDeviceManufacturer)] WCHAR *wzDeviceManufacturer, [out] UINT *pcchActual); HRESULT GetDeviceModels( [in] UINT cchDeviceModels, [in, out, unique, size_is(cchDeviceModels)] WCHAR *wzDeviceModels, [out] UINT *pcchActual); HRESULT GetMimeTypes( [in] UINT cchMimeTypes, [in, out, unique, size_is(cchMimeTypes)] WCHAR *wzMimeTypes, [out] UINT *pcchActual); HRESULT GetFileExtensions( [in] UINT cchFileExtensions, [in, out, unique, size_is(cchFileExtensions)] WCHAR *wzFileExtensions, [out] UINT *pcchActual); HRESULT DoesSupportAnimation( [out] BOOL *pfSupportAnimation); HRESULT DoesSupportChromaKey( [out] BOOL *pfSupportChromaKey); HRESULT DoesSupportLossless( [out] BOOL *pfSupportLossless); HRESULT DoesSupportMultiframe( [out] BOOL *pfSupportMultiframe); HRESULT MatchesMimeType( [in] LPCWSTR wzMimeType, [out] BOOL *pfMatches); } interface IWICBitmapDecoder; [ object, uuid(d8cd007f-d08f-4191-9bfc-236ea7f0e4b5) ] interface IWICBitmapDecoderInfo : IWICBitmapCodecInfo { [local] HRESULT GetPatterns( [in] UINT cbSizePatterns, [in, out, unique] WICBitmapPattern *pPatterns, [in, out, unique] UINT *pcPatterns, [in, out, unique] UINT *pcbPatternsActual); HRESULT MatchesPattern( [in] IStream *pIStream, [out] BOOL *pfMatches); HRESULT CreateInstance( [out] IWICBitmapDecoder **ppIBitmapDecoder); } [ object, uuid(9edde9e7-8dee-47ea-99df-e6faf2ed44bf) ] interface IWICBitmapDecoder : IUnknown { HRESULT QueryCapability( [in] IStream *pIStream, [out] DWORD *pdwCapability); HRESULT Initialize( [in] IStream *pIStream, [in] WICDecodeOptions cacheOptions); HRESULT GetContainerFormat( [out] GUID *pguidContainerFormat); HRESULT GetDecoderInfo( [out] IWICBitmapDecoderInfo **ppIDecoderInfo); HRESULT CopyPalette( [in] IWICPalette *pIPalette); HRESULT GetMetadataQueryReader( [out] IWICMetadataQueryReader **ppIMetadataQueryReader); HRESULT GetPreview( [out] IWICBitmapSource **ppIBitmapSource); HRESULT GetColorContexts( [in] UINT cCount, [in, out, unique, size_is(cCount)] IWICColorContext **ppIColorContexts, [out] UINT *pcActualCount); HRESULT GetThumbnail( [out] IWICBitmapSource **ppIThumbnail); HRESULT GetFrameCount( [out] UINT *pCount); HRESULT GetFrame( [in] UINT index, [out] IWICBitmapFrameDecode **ppIBitmapFrame); } [ object, uuid(00000105-a8f2-4877-ba0a-fd2b6645fb94) ] interface IWICBitmapFrameEncode : IUnknown { HRESULT Initialize( [in, unique] IPropertyBag2 *pIEncoderOptions); HRESULT SetSize( [in] UINT uiWidth, [in] UINT uiHeight); HRESULT SetResolution( [in] double dpiX, [in] double dpiY); HRESULT SetPixelFormat( [in, out] WICPixelFormatGUID *pPixelFormat); HRESULT SetColorContexts( [in] UINT cCount, [in, size_is(cCount)] IWICColorContext **ppIColorContext); HRESULT SetPalette( [in] IWICPalette *pIPalette); HRESULT SetThumbnail( [in] IWICBitmapSource *pIThumbnail); HRESULT WritePixels( [in] UINT lineCount, [in] UINT cbStride, [in] UINT cbBufferSize, [in, size_is(cbBufferSize)] BYTE *pbPixels); HRESULT WriteSource( [in] IWICBitmapSource *pIBitmapSource, [in, unique] WICRect *prc); HRESULT Commit(); HRESULT GetMetadataQueryWriter( IWICMetadataQueryWriter **ppIMetadataQueryWriter); } interface IWICBitmapEncoder; [ object, uuid(94c9b4ee-a09f-4f92-8a1e-4a9bce7e76fb) ] interface IWICBitmapEncoderInfo : IWICBitmapCodecInfo { HRESULT CreateInstance( [out] IWICBitmapEncoder **ppIBitmapEncoder); } [ object, uuid(00000103-a8f2-4877-ba0a-fd2b6645fb94) ] interface IWICBitmapEncoder : IUnknown { HRESULT Initialize( [in] IStream *pIStream, [in] WICBitmapEncoderCacheOption cacheOption); HRESULT GetContainerFormat( [out] GUID *pguidContainerFormat); HRESULT GetEncoderInfo( [out] IWICBitmapEncoderInfo **ppIEncoderInfo); HRESULT SetColorContexts( [in] UINT cCount, [in, size_is(cCount)] IWICColorContext **ppIColorContext); HRESULT SetPalette( [in] IWICPalette *pIPalette); HRESULT SetThumbnail( [in] IWICBitmapSource *pIThumbnail); HRESULT SetPreview( [in] IWICBitmapSource *pIPreview); HRESULT CreateNewFrame( [out] IWICBitmapFrameEncode **ppIFrameEncode, [in, out, unique] IPropertyBag2 **ppIEncoderOptions); HRESULT Commit(); HRESULT GetMetadataQueryWriter( [out] IWICMetadataQueryWriter **ppIMetadataQueryWriter); } [ object, uuid(00000301-a8f2-4877-ba0a-fd2b6645fb94) ] interface IWICFormatConverter : IWICBitmapSource { HRESULT Initialize( [in] IWICBitmapSource *pISource, [in] REFWICPixelFormatGUID dstFormat, [in] WICBitmapDitherType dither, [in] IWICPalette *pIPalette, [in] double alphaThresholdPercent, [in] WICBitmapPaletteType paletteTranslate); HRESULT CanConvert( [in] REFWICPixelFormatGUID srcPixelFormat, [in] REFWICPixelFormatGUID dstPixelFormat, [out] BOOL *pfCanConvert); } [ object, uuid(9f34fb65-13f4-4f15-bc57-3726b5e53d9f) ] interface IWICFormatConverterInfo : IWICComponentInfo { HRESULT GetPixelFormats( [in] UINT cFormats, [in, out, size_is(cFormats)] WICPixelFormatGUID *pPixelFormatGUIDs, [out] UINT *pcActual); HRESULT CreateInstance( [out] IWICFormatConverter **ppIConverter); } [ object, uuid(135ff860-22b7-4ddf-b0f6-218f4f299a43) ] interface IWICStream : IStream { HRESULT InitializeFromIStream( [in] IStream *pIStream); HRESULT InitializeFromFilename( [in] LPCWSTR wzFileName, [in] DWORD dwAccessMode); HRESULT InitializeFromMemory( [in, size_is(cbBufferSize)] BYTE *pbBuffer, [in] DWORD cbBufferSize); HRESULT InitializeFromIStreamRegion( [in] IStream *pIStream, [in] ULARGE_INTEGER ulOffset, [in] ULARGE_INTEGER ulMaxSize); } [ object, uuid(00000302-a8f2-4877-ba0a-fd2b6645fb94) ] interface IWICBitmapScaler : IWICBitmapSource { HRESULT Initialize( [in] IWICBitmapSource *pISource, [in] UINT uiWidth, [in] UINT uiHeight, [in] WICBitmapInterpolationMode mode); } [ object, uuid(e4fbcf03-223d-4e81-9333-d635556dd1b5) ] interface IWICBitmapClipper : IWICBitmapSource { HRESULT Initialize( [in] IWICBitmapSource *pISource, [in] const WICRect *prc); } [ object, uuid(b66f034f-d0e2-40ab-b436-6de39e321a94) ] interface IWICColorTransform : IWICBitmapSource { HRESULT Initialize( [in] IWICBitmapSource *pIBitmapSource, [in] IWICColorContext *pIContextSource, [in] IWICColorContext *pIContextDest, [in] REFWICPixelFormatGUID pixelFmtDest); } [ object, uuid(b84e2c09-78c9-4ac4-8bd3-524ae1663a2f) ] interface IWICFastMetadataEncoder : IUnknown { HRESULT Commit(); HRESULT GetMetadataQueryWriter( [out] IWICMetadataQueryWriter **ppIMetadataQueryWriter); } [ object, uuid(04c75bf8-3ce1-473b-acc5-3cc4f5e94999), local ] interface IWICImageEncoder : IUnknown { HRESULT WriteFrame( [in] ID2D1Image *image, [in] IWICBitmapFrameEncode *encode, [in, unique] const WICImageParameters *parameters); HRESULT WriteFrameThumbnail( [in] ID2D1Image *image, [in] IWICBitmapFrameEncode *encode, [in, unique] const WICImageParameters *parameters); HRESULT WriteThumbnail( [in] ID2D1Image *image, [in] IWICBitmapEncoder *encoder, [in, unique] const WICImageParameters *parameters); } cpp_quote("DEFINE_GUID(CLSID_WICImagingFactory, 0xcacaf262,0x9370,0x4615,0xa1,0x3b,0x9f,0x55,0x39,0xda,0x4c,0x0a);") cpp_quote("DEFINE_GUID(CLSID_WICImagingFactory1, 0xcacaf262,0x9370,0x4615,0xa1,0x3b,0x9f,0x55,0x39,0xda,0x4c,0x0a);") cpp_quote("DEFINE_GUID(CLSID_WICImagingFactory2, 0x317d06e8,0x5f24,0x433d,0xbd,0xf7,0x79,0xce,0x68,0xd8,0xab,0xc2);") [ object, uuid(ec5ec8a9-c395-4314-9c77-54d7a935ff70) ] interface IWICImagingFactory : IUnknown { HRESULT CreateDecoderFromFilename( [in] LPCWSTR wzFilename, [in, unique] const GUID *pguidVendor, [in] DWORD dwDesiredAccess, [in] WICDecodeOptions metadataOptions, [out, retval] IWICBitmapDecoder **ppIDecoder); HRESULT CreateDecoderFromStream( [in] IStream *pIStream, [in, unique] const GUID *pguidVendor, [in] WICDecodeOptions metadataOptions, [out, retval] IWICBitmapDecoder **ppIDecoder); HRESULT CreateDecoderFromFileHandle( [in] ULONG_PTR hFile, [in, unique] const GUID *pguidVendor, [in] WICDecodeOptions metadataOptions, [out, retval] IWICBitmapDecoder **ppIDecoder); HRESULT CreateComponentInfo( [in] REFCLSID clsidComponent, [out] IWICComponentInfo **ppIInfo); HRESULT CreateDecoder( [in] REFGUID guidContainerFormat, [in, unique] const GUID *pguidVendor, [out, retval] IWICBitmapDecoder **ppIDecoder); HRESULT CreateEncoder( [in] REFGUID guidContainerFormat, [in, unique] const GUID *pguidVendor, [out, retval] IWICBitmapEncoder **ppIEncoder); HRESULT CreatePalette( [out] IWICPalette **ppIPalette); HRESULT CreateFormatConverter( [out] IWICFormatConverter **ppIFormatConverter); HRESULT CreateBitmapScaler( [out] IWICBitmapScaler **ppIBitmapScaler); HRESULT CreateBitmapClipper( [out] IWICBitmapClipper **ppIBitmapClipper); HRESULT CreateBitmapFlipRotator( [out] IWICBitmapFlipRotator **ppIBitmapFlipRotator); HRESULT CreateStream( [out] IWICStream **ppIWICStream); HRESULT CreateColorContext( [out] IWICColorContext **ppIWICColorContext); HRESULT CreateColorTransformer( [out] IWICColorTransform **ppIWICColorTransform); HRESULT CreateBitmap( [in] UINT uiWidth, [in] UINT uiHeight, [in] REFWICPixelFormatGUID pixelFormat, [in] WICBitmapCreateCacheOption option, [out] IWICBitmap **ppIBitmap); HRESULT CreateBitmapFromSource( [in] IWICBitmapSource *piBitmapSource, [in] WICBitmapCreateCacheOption option, [out] IWICBitmap **ppIBitmap); HRESULT CreateBitmapFromSourceRect( [in] IWICBitmapSource *piBitmapSource, [in] UINT x, [in] UINT y, [in] UINT width, [in] UINT height, [out] IWICBitmap **ppIBitmap); HRESULT CreateBitmapFromMemory( [in] UINT uiWidth, [in] UINT uiHeight, [in] REFWICPixelFormatGUID pixelFormat, [in] UINT cbStride, [in] UINT cbBufferSize, [in, size_is(cbBufferSize)] BYTE *pbBuffer, [out] IWICBitmap **ppIBitmap); HRESULT CreateBitmapFromHBITMAP( [in] HBITMAP hBitmap, [in, unique] HPALETTE hPalette, [in] WICBitmapAlphaChannelOption options, [out] IWICBitmap **ppIBitmap); HRESULT CreateBitmapFromHICON( [in] HICON hIcon, [out] IWICBitmap **ppIBitmap); HRESULT CreateComponentEnumerator( [in] DWORD componentTypes, [in] DWORD options, [out] IEnumUnknown **ppIEnumUnknown); HRESULT CreateFastMetadataEncoderFromDecoder( [in] IWICBitmapDecoder *pIDecoder, [out] IWICFastMetadataEncoder **ppIFastEncoder); HRESULT CreateFastMetadataEncoderFromFrameDecode( [in] IWICBitmapFrameDecode *pIFrameDecoder, [out] IWICFastMetadataEncoder **ppIFastEncoder); HRESULT CreateQueryWriter( [in] REFGUID guidMetadataFormat, [in, unique] const GUID *pguidVendor, [out] IWICMetadataQueryWriter **ppIQueryWriter); HRESULT CreateQueryWriterFromReader( [in] IWICMetadataQueryReader *pIQueryReader, [in, unique] const GUID *pguidVendor, [out] IWICMetadataQueryWriter **ppIQueryWriter); } [ object, uuid(7b816b45-1996-4476-b132-de9e247c8af0), local ] interface IWICImagingFactory2 : IWICImagingFactory { HRESULT CreateImageEncoder( [in] ID2D1Device *device, [out] IWICImageEncoder **encoder); } [ local, object, uuid(dc2bb46d-3f07-481e-8625-220c4aedbb33) ] interface IWICEnumMetadataItem : IUnknown { HRESULT Next( [in] ULONG celt, [in, out, unique, size_is(celt)] PROPVARIANT *rgeltSchema, [in, out, size_is(celt)] PROPVARIANT *rgeltId, [in, out, optional, size_is(celt)] PROPVARIANT *rgeltValue, [out, optional] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IWICEnumMetadataItem **ppIEnumMetadataItem); } cpp_quote("HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);") cpp_quote("HRESULT WINAPI WICCreateBitmapFromSection(UINT width, UINT height, REFWICPixelFormatGUID format, HANDLE section, UINT stride, UINT offset, IWICBitmap **bitmap);") cpp_quote("HRESULT WINAPI WICCreateBitmapFromSectionEx(UINT width, UINT height, REFWICPixelFormatGUID format, HANDLE section, UINT stride, UINT offset, WICSectionAccessLevel access, IWICBitmap **bitmap);") cpp_quote("HRESULT WINAPI WICMapGuidToShortName(REFGUID,UINT,WCHAR *,UINT *);") cpp_quote("HRESULT WINAPI WICMapShortNameToGuid(PCWSTR,GUID *);") cpp_quote("HRESULT WINAPI WICMapSchemaToName(REFGUID,LPWSTR,UINT,WCHAR *,UINT *);") cpp_quote("DEFINE_GUID(CLSID_WICBmpDecoder, 0x6b462062,0x7cbf,0x400d,0x9f,0xdb,0x81,0x3d,0xd1,0x0f,0x27,0x78);") cpp_quote("DEFINE_GUID(CLSID_WICPngDecoder, 0x389ea17b,0x5078,0x4cde,0xb6,0xef,0x25,0xc1,0x51,0x75,0xc7,0x51);") cpp_quote("DEFINE_GUID(CLSID_WICIcoDecoder, 0xc61bfcdf,0x2e0f,0x4aad,0xa8,0xd7,0xe0,0x6b,0xaf,0xeb,0xcd,0xfe);") cpp_quote("DEFINE_GUID(CLSID_WICJpegDecoder, 0x9456a480,0xe88b,0x43ea,0x9e,0x73,0x0b,0x2d,0x9b,0x71,0xb1,0xca);") cpp_quote("DEFINE_GUID(CLSID_WICGifDecoder, 0x381dda3c,0x9ce9,0x4834,0xa2,0x3e,0x1f,0x98,0xf8,0xfc,0x52,0xbe);") cpp_quote("DEFINE_GUID(CLSID_WICTiffDecoder, 0xb54e85d9,0xfe23,0x499f,0x8b,0x88,0x6a,0xce,0xa7,0x13,0x75,0x2b);") cpp_quote("DEFINE_GUID(CLSID_WICWmpDecoder, 0xa26cec36,0x234c,0x4950,0xae,0x16,0xe3,0x4a,0xac,0xe7,0x1d,0x0d);") cpp_quote("DEFINE_GUID(CLSID_WICBmpEncoder, 0x69be8bb4,0xd66d,0x47c8,0x86,0x5a,0xed,0x15,0x89,0x43,0x37,0x82);") cpp_quote("DEFINE_GUID(CLSID_WICPngEncoder, 0x27949969,0x876a,0x41d7,0x94,0x47,0x56,0x8f,0x6a,0x35,0xa4,0xdc);") cpp_quote("DEFINE_GUID(CLSID_WICJpegEncoder, 0x1a34f5c1,0x4a5a,0x46dc,0xb6,0x44,0x1f,0x45,0x67,0xe7,0xa6,0x76);") cpp_quote("DEFINE_GUID(CLSID_WICGifEncoder, 0x114f5598,0x0b22,0x40a0,0x86,0xa1,0xc8,0x3e,0xa4,0x95,0xad,0xbd);") cpp_quote("DEFINE_GUID(CLSID_WICTiffEncoder, 0x0131be10,0x2001,0x4c5f,0xa9,0xb0,0xcc,0x88,0xfa,0xb6,0x4c,0xe8);") cpp_quote("DEFINE_GUID(CLSID_WICWmpEncoder, 0xac4ce3cb,0xe1c1,0x44cd,0x82,0x15,0x5a,0x16,0x65,0x50,0x9e,0xc2);") cpp_quote("DEFINE_GUID(CLSID_WICDefaultFormatConverter, 0x1a3f11dc,0xb514,0x4b17,0x8c,0x5f,0x21,0x54,0x51,0x38,0x52,0xf1);") cpp_quote("DEFINE_GUID(GUID_ContainerFormatBmp, 0x0af1d87e,0xfcfe,0x4188,0xbd,0xeb,0xa7,0x90,0x64,0x71,0xcb,0xe3);") cpp_quote("DEFINE_GUID(GUID_ContainerFormatPng, 0x1b7cfaf4,0x713f,0x473c,0xbb,0xcd,0x61,0x37,0x42,0x5f,0xae,0xaf);") cpp_quote("DEFINE_GUID(GUID_ContainerFormatIco, 0xa3a860c4,0x338f,0x4c17,0x91,0x9a,0xfb,0xa4,0xb5,0x62,0x8f,0x21);") cpp_quote("DEFINE_GUID(GUID_ContainerFormatJpeg, 0x19e4a5aa,0x5662,0x4fc5,0xa0,0xc0,0x17,0x58,0x02,0x8e,0x10,0x57);") cpp_quote("DEFINE_GUID(GUID_ContainerFormatTiff, 0x163bcc30,0xe2e9,0x4f0b,0x96,0x1d,0xa3,0xe9,0xfd,0xb7,0x88,0xa3);") cpp_quote("DEFINE_GUID(GUID_ContainerFormatGif, 0x1f8a5601,0x7d4d,0x4cbd,0x9c,0x82,0x1b,0xc8,0xd4,0xee,0xb9,0xa5);") cpp_quote("DEFINE_GUID(GUID_ContainerFormatWmp, 0x57a37caa,0x367a,0x4540,0x91,0x6b,0xf1,0x83,0xc5,0x09,0x3a,0x4b);") cpp_quote("DEFINE_GUID(GUID_VendorMicrosoft, 0xf0e749ca,0xedef,0x4589,0xa7,0x3a,0xee,0x0e,0x62,0x6a,0x2a,0x2b);") cpp_quote("DEFINE_GUID(CLSID_WICImagingCategories, 0xfae3d380,0xfea4,0x4623,0x8c,0x75,0xc6,0xb6,0x11,0x10,0xb6,0x81);") cpp_quote("DEFINE_GUID(CATID_WICBitmapDecoders, 0x7ed96837,0x96f0,0x4812,0xb2,0x11,0xf1,0x3c,0x24,0x11,0x7e,0xd3);") cpp_quote("DEFINE_GUID(CATID_WICBitmapEncoders, 0xac757296,0x3522,0x4e11,0x98,0x62,0xc1,0x7b,0xe5,0xa1,0x76,0x7e);") cpp_quote("DEFINE_GUID(CATID_WICFormatConverters, 0x7835eae8,0xbf14,0x49d1,0x93,0xce,0x53,0x3a,0x40,0x7b,0x22,0x48);") cpp_quote("DEFINE_GUID(CATID_WICMetadataReader, 0x05af94d8,0x7174,0x4cd2,0xbe,0x4a,0x41,0x24,0xb8,0x0e,0xe4,0xb8);") cpp_quote("DEFINE_GUID(CATID_WICPixelFormats, 0x2b46e70f,0xcda7,0x473e,0x89,0xf6,0xdc,0x96,0x30,0xa2,0x39,0x0b);") ================================================ FILE: wine/windows/wincodecsdk.idl ================================================ /* * Copyright 2011 Vincent Povirk for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "wtypes.idl"; import "wincodec.idl"; typedef enum WICPersistOptions { WICPersistOptionDefault = 0x00000000, WICPersistOptionLittleEndian = 0x00000000, WICPersistOptionBigEndian = 0x00000001, WICPersistOptionStrictFormat = 0x00000002, WICPersistOptionNoCacheStream = 0x00000004, WICPersistOptionPreferUTF8 = 0x00000008, WICPersistOptionMask = 0x0000FFFF } WICPersistOptions; typedef enum WICMetadataCreationOptions { WICMetadataCreationDefault = 0x00000000, WICMetadataCreationAllowUnknown = WICMetadataCreationDefault, WICMetadataCreationFailUnknown = 0x00010000, WICMetadataCreationMask = 0xFFFF0000 } WICMetadataCreationOptions; cpp_quote("DEFINE_GUID(GUID_MetadataFormatUnknown, 0xa45e592f,0x9078,0x4a7c,0xad,0xb5,0x4e,0xdc,0x4f,0xd6,0x1b,0x1f);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunkcHRM, 0x9db3655b,0x2842,0x44b3,0x80,0x67,0x12,0xe9,0xb3,0x75,0x55,0x6a);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunkgAMA, 0xf00935a5,0x1d5d,0x4cd1,0x81,0xb2,0x93,0x24,0xd7,0xec,0xa7,0x81);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktEXt, 0x568d8936,0xc0a9,0x4923,0x90,0x5d,0xdf,0x2b,0x38,0x23,0x8f,0xbc);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktIME, 0x6b00ae2d,0xe24b,0x460a,0x98,0xb6,0x87,0x8b,0xd0,0x30,0x72,0xfd);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatIfd, 0x537396c6,0x2d8a,0x4bb6,0x9b,0xf8,0x2f,0x0a,0x8e,0x2a,0x3a,0xdf);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatExif, 0x1c3c4f9d,0xb84a,0x467d,0x94,0x93,0x36,0xcf,0xbd,0x59,0xea,0x57);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMP, 0xbb5acc38,0xf216,0x4cec,0xa6,0xc5,0x5f,0x6e,0x73,0x97,0x63,0xa9);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMPStruct, 0x22383cf1,0xed17,0x4e2e,0xaf,0x17,0xd8,0x5b,0x8f,0x6b,0x30,0xd0);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatIMD, 0xbd2bb086,0x4d52,0x48dd,0x96,0x77,0xdb,0x48,0x3e,0x85,0xae,0x8f);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatLSD, 0xe256031e,0x6299,0x4929,0xb9,0x8d,0x5a,0xc8,0x84,0xaf,0xba,0x92);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatGCE, 0x2a25cad8,0xdeeb,0x4c69,0xa7,0x88,0x0e,0xc2,0x26,0x6d,0xca,0xfd);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatAPE, 0x2e043dc2,0xc967,0x4e05,0x87,0x5e,0x61,0x8b,0xf6,0x7e,0x85,0xc3);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatGifComment, 0xc4b6e0e0,0xcfb4,0x4ad3,0xab,0x33,0x9a,0xad,0x23,0x55,0xa3,0x4a);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatSubIfd, 0x58a2e128,0x2db9,0x4e57,0xbb,0x14,0x51,0x77,0x89,0x1e,0xd3,0x31);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatGps, 0x7134ab8a,0x9351,0x44ad,0xaf,0x62,0x44,0x8d,0xb6,0xb5,0x02,0xec);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatInterop, 0xed686f8e,0x681f,0x4c8b,0xbd,0x41,0xa8,0xad,0xdb,0xf6,0xb3,0xfc);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatApp0, 0x79007028,0x268d,0x45d6,0xa3,0xc2,0x35,0x4e,0x6a,0x50,0x4b,0xc9);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatApp1, 0x8fd3dfc3,0xf951,0x492b,0x81,0x7f,0x69,0xc2,0xe6,0xd9,0xa5,0xb0);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatApp13, 0x326556a2,0xf502,0x4354,0x9c,0xc0,0x8e,0x3f,0x48,0xea,0xf6,0xb5);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatIPTC, 0x4fab0914,0xe129,0x4087,0xa1,0xd1,0xbc,0x81,0x2d,0x45,0xa7,0xb5);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatIRB, 0x16100d66,0x8570,0x4bb9,0xb9,0x2d,0xfd,0xa4,0xb2,0x3e,0xce,0x67);") cpp_quote("DEFINE_GUID(GUID_MetadataFormat8BIMIPTC, 0x0010568c,0x0852,0x4e6a,0xb1,0x91,0x5c,0x33,0xac,0x5b,0x04,0x30);") cpp_quote("DEFINE_GUID(GUID_MetadataFormat8BIMResolutionInfo, 0x739f305d,0x81db,0x43cb,0xac,0x5e,0x55,0x01,0x3e,0xf9,0xf0,0x03);") cpp_quote("DEFINE_GUID(GUID_MetadataFormat8BIMIPTCDigest, 0x1ca32285,0x9ccd,0x4786,0x8b,0xd8,0x79,0x53,0x9d,0xb6,0xa0,0x06);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatThumbnail, 0x243dcee9,0x8703,0x40ee,0x8e,0xf0,0x22,0xa6,0x0,0xb8,0x5,0x8c);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMPBag, 0x833cca5f,0xdcb7,0x4516,0x80,0x6f,0x65,0x96,0xab,0x26,0xdc,0xe4);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMPSeq, 0x63e8df02,0xeb6c,0x456c,0xa2,0x24,0xb2,0x5e,0x79,0x4f,0xd6,0x48);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMPAlt, 0x7b08a675,0x91aa,0x481b,0xa7,0x98,0x4d,0xa9,0x49,0x08,0x61,0x3b);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatJpegChrominance, 0xf73d0dcf,0xcec6,0x4f85,0x9b,0x0e,0x1c,0x39,0x56,0xb1,0xbe,0xf7);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatJpegLuminance, 0x86908007,0xedfc,0x4860,0x8d,0x4b,0x4e,0xe6,0xe8,0x3e,0x60,0x58);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatJpegComment, 0x220e5f33,0xafd3,0x474e,0x9d,0x31,0x7d,0x4f,0xe7,0x30,0xf5,0x57);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunkbKGD, 0xe14d3571,0x6b47,0x4dea,0xb6,0xa,0x87,0xce,0xa,0x78,0xdf,0xb7);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunkiTXt, 0xc2bec729,0xb68,0x4b77,0xaa,0xe,0x62,0x95,0xa6,0xac,0x18,0x14);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunkhIST, 0xc59a82da,0xdb74,0x48a4,0xbd,0x6a,0xb6,0x9c,0x49,0x31,0xef,0x95);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunkiCCP, 0xeb4349ab,0xb685,0x450f,0x91,0xb5,0xe8,0x2,0xe8,0x92,0x53,0x6c);") cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunksRGB, 0xc115fd36,0xcc6f,0x4e3f,0x83,0x63,0x52,0x4b,0x87,0xc6,0xb0,0xd9);") cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataReader, 0x699745c2,0x5066,0x4b82,0xa8,0xe3,0xd4,0x04,0x78,0xdb,0xec,0x8c);") cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataWriter, 0xa09cca86,0x27ba,0x4f39,0x90,0x53,0x12,0x1f,0xa4,0xdc,0x08,0xfc);") cpp_quote("DEFINE_GUID(CLSID_WICPngChrmMetadataReader, 0xf90b5f36,0x367b,0x402a,0x9d,0xd1,0xbc,0x0f,0xd5,0x9d,0x8f,0x62);") cpp_quote("DEFINE_GUID(CLSID_WICPngGamaMetadataReader, 0x3692ca39,0xe082,0x4350,0x9e,0x1f,0x37,0x04,0xcb,0x08,0x3c,0xd5);") cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataReader, 0x4b59afcc,0xb8c3,0x408a,0xb6,0x70,0x89,0xe5,0xfa,0xb6,0xfd,0xa7);") cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataWriter, 0xb5ebafb9,0x253e,0x4a72,0xa7,0x44,0x07,0x62,0xd2,0x68,0x56,0x83);") cpp_quote("DEFINE_GUID(CLSID_WICIfdMetadataReader, 0x8f914656,0x9d0a,0x4eb2,0x90,0x19,0x0b,0xf9,0x6d,0x8a,0x9e,0xe6);") cpp_quote("DEFINE_GUID(CLSID_WICIfdMetadataWriter, 0xb1ebfc28,0xc9bd,0x47a2,0x8d,0x33,0xb9,0x48,0x76,0x97,0x77,0xa7);") cpp_quote("DEFINE_GUID(CLSID_WICExifMetadataReader, 0xd9403860,0x297f,0x4a49,0xbf,0x9b,0x77,0x89,0x81,0x50,0xa4,0x42);") cpp_quote("DEFINE_GUID(CLSID_WICExifMetadataWriter, 0xc9a14cda,0xc339,0x460b,0x90,0x78,0xd4,0xde,0xbc,0xfa,0xbe,0x91);") cpp_quote("DEFINE_GUID(CLSID_WICXMPStructMetadataReader, 0x01b90d9a,0x8209,0x47f7,0x9c,0x52,0xe1,0x24,0x4b,0xf5,0x0c,0xed);") cpp_quote("DEFINE_GUID(CLSID_WICXMPStructMetadataWriter, 0x22c21f93,0x7ddb,0x411c,0x9b,0x17,0xc5,0xb7,0xbd,0x06,0x4a,0xbc);") cpp_quote("DEFINE_GUID(CLSID_WICLSDMetadataReader, 0x41070793,0x59e4,0x479a,0xa1,0xf7,0x95,0x4a,0xdc,0x2e,0xf5,0xfc);") cpp_quote("DEFINE_GUID(CLSID_WICLSDMetadataWriter, 0x73c037e7,0xe5d9,0x4954,0x87,0x6a,0x6d,0xa8,0x1d,0x6e,0x57,0x68);") cpp_quote("DEFINE_GUID(CLSID_WICIMDMetadataReader, 0x7447a267,0x0015,0x42c8,0xa8,0xf1,0xfb,0x3b,0x94,0xc6,0x83,0x61);") cpp_quote("DEFINE_GUID(CLSID_WICIMDMetadataWriter, 0x8c89071f,0x452e,0x4e95,0x96,0x82,0x9d,0x10,0x24,0x62,0x71,0x72);") cpp_quote("DEFINE_GUID(CLSID_WICGCEMetadataReader, 0xb92e345d,0xf52d,0x41f3,0xb5,0x62,0x08,0x1b,0xc7,0x72,0xe3,0xb9);") cpp_quote("DEFINE_GUID(CLSID_WICGCEMetadataWriter, 0xaf95dc76,0x16b2,0x47f4,0xb3,0xea,0x3c,0x31,0x79,0x66,0x93,0xe7);") cpp_quote("DEFINE_GUID(CLSID_WICAPEMetadataReader, 0x1767b93a,0xb021,0x44ea,0x92,0x0f,0x86,0x3c,0x11,0xf4,0xf7,0x68);") cpp_quote("DEFINE_GUID(CLSID_WICAPEMetadataWriter, 0xbd6edfca,0x2890,0x482f,0xb2,0x33,0x8d,0x73,0x39,0xa1,0xcf,0x8d);") cpp_quote("DEFINE_GUID(CLSID_WICGifCommentMetadataReader, 0x32557d3b,0x69dc,0x4f95,0x83,0x6e,0xf5,0x97,0x2b,0x2f,0x61,0x59);") cpp_quote("DEFINE_GUID(CLSID_WICGifCommentMetadataWriter, 0xa02797fc,0xc4ae,0x418c,0xaf,0x95,0xe6,0x37,0xc7,0xea,0xd2,0xa1);") typedef struct WICMetadataPattern { ULARGE_INTEGER Position; ULONG Length; BYTE *Pattern; BYTE *Mask; ULARGE_INTEGER DataOffset; } WICMetadataPattern; typedef struct WICMetadataHeader { ULARGE_INTEGER Position; ULONG Length; BYTE *Header; ULARGE_INTEGER DataOffset; } WICMetadataHeader; [ object, uuid(aba958bf-c672-44d1-8d61-ce6df2e682c2) ] interface IWICMetadataHandlerInfo : IWICComponentInfo { HRESULT GetMetadataFormat( [out] GUID *pguidMetadataFormat); HRESULT GetContainerFormats( [in] UINT cContainerFormats, [in, out, unique, size_is(cContainerFormats)] GUID *pguidContainerFormats, [out] UINT *pcchActual); HRESULT GetDeviceManufacturer( [in] UINT cchDeviceManufacturer, [in, out, unique, size_is(cchDeviceManufacturer)] WCHAR *wzDeviceManufacturer, [out] UINT *pcchActual); HRESULT GetDeviceModels( [in] UINT cchDeviceModels, [in, out, unique, size_is(cchDeviceModels)] WCHAR *wzDeviceModels, [out] UINT *pcchActual); HRESULT DoesRequireFullStream( [out] BOOL *pfRequiresFullStream); HRESULT DoesSupportPadding( [out] BOOL *pfSupportsPadding); HRESULT DoesRequireFixedSize( [out] BOOL *pfFixedSize); } [ object, uuid(9204fe99-d8fc-4fd5-a001-9536b067a899) ] interface IWICMetadataReader : IUnknown { HRESULT GetMetadataFormat( [out] GUID *pguidMetadataFormat); HRESULT GetMetadataHandlerInfo( [out] IWICMetadataHandlerInfo **ppIHandler); HRESULT GetCount( [out] UINT *pcCount); HRESULT GetValueByIndex( [in] UINT nIndex, [in, out, unique] PROPVARIANT *pvarSchema, [in, out, unique] PROPVARIANT *pvarId, [in, out, unique] PROPVARIANT *pvarValue); HRESULT GetValue( [in] const PROPVARIANT *pvarSchema, [in] const PROPVARIANT *pvarId, [in, out, unique] PROPVARIANT *pvarValue); HRESULT GetEnumerator( [out] IWICEnumMetadataItem **ppIEnumMetadata); } [ object, uuid(eebf1f5b-07c1-4447-a3ab-22acaf78a804) ] interface IWICMetadataReaderInfo : IWICMetadataHandlerInfo { [local] HRESULT GetPatterns( [in] REFGUID guidContainerFormat, [in] UINT cbSize, [out, unique] WICMetadataPattern *pPattern, [out, unique] UINT *pcCount, [out, unique] UINT *pcbActual); HRESULT MatchesPattern( [in] REFGUID guidContainerFormat, [in] IStream *pIStream, [out] BOOL *pfMatches); HRESULT CreateInstance( [out] IWICMetadataReader **ppIReader); } [ object, uuid(f7836e16-3be0-470b-86bb-160d0aecd7de) ] interface IWICMetadataWriter : IWICMetadataReader { HRESULT SetValue( [in, unique] const PROPVARIANT *pvarSchema, [in] const PROPVARIANT *pvarId, [in] const PROPVARIANT *pvarValue); HRESULT SetValueByIndex( [in] UINT nIndex, [in, unique] const PROPVARIANT *pvarSchema, [in] const PROPVARIANT *pvarId, [in] const PROPVARIANT *pvarValue); HRESULT RemoveValue( [in, unique] const PROPVARIANT *pvarSchema, [in] const PROPVARIANT *pvarId); HRESULT RemoveValueByIndex( [in] UINT nIndex); } [ object, uuid(b22e3fba-3925-4323-b5c1-9ebfc430f236) ] interface IWICMetadataWriterInfo : IWICMetadataHandlerInfo { [local] HRESULT GetHeader( [in] REFGUID guidContainerFormat, [in] UINT cbSize, [out, unique] WICMetadataHeader *pHeader, [out, unique] UINT *pcbActual); HRESULT CreateInstance( [out] IWICMetadataWriter **ppIWriter); } [ object, uuid(feaa2a8d-b3f3-43e4-b25c-d1de990a1ae1) ] interface IWICMetadataBlockReader : IUnknown { HRESULT GetContainerFormat( [out] GUID *pguidContainerFormat); HRESULT GetCount( [out] UINT *pcCount); HRESULT GetReaderByIndex( [in] UINT nIndex, [out] IWICMetadataReader **ppIMetadataReader); HRESULT GetEnumerator( [out] IEnumUnknown **ppIEnumMetadata); } [ object, uuid(08fb9676-b444-41e8-8dbe-6a53a542bff1) ] interface IWICMetadataBlockWriter : IWICMetadataBlockReader { HRESULT InitializeFromBlockReader( [in] IWICMetadataBlockReader *pIMDBlockReader); HRESULT GetWriterByIndex( [in] UINT nIndex, [out] IWICMetadataWriter **ppIMetadataWriter); HRESULT AddWriter( [in] IWICMetadataWriter *pIMetadataWriter); HRESULT SetWriterByIndex( [in] UINT nIndex, [in] IWICMetadataWriter *pIMetadataWriter); HRESULT RemoveWriterByIndex( [in] UINT nIndex); } [ object, uuid(00675040-6908-45f8-86a3-49c7dfd6d9ad) ] interface IWICPersistStream : IPersistStream { HRESULT LoadEx( [in, unique] IStream *pIStream, [in, unique] const GUID *pguidPreferredVendor, [in] DWORD dwPersistOptions); HRESULT SaveEx( [in] IStream *pIStream, [in] DWORD dwPersistOptions, [in] BOOL fClearDirty); } [ object, uuid(412d0c3a-9650-44fa-af5b-dd2a06c8e8fb) ] interface IWICComponentFactory : IWICImagingFactory { HRESULT CreateMetadataReader( [in] REFGUID guidMetadataFormat, [in, unique] const GUID *pguidVendor, [in] DWORD dwOptions, [in] IStream *pIStream, [out] IWICMetadataReader **ppIReader); HRESULT CreateMetadataReaderFromContainer( [in] REFGUID guidMetadataFormat, [in, unique] const GUID *pguidVendor, [in] DWORD dwOptions, [in] IStream *pIStream, [out] IWICMetadataReader **ppIReader); HRESULT CreateMetadataWriter( [in] REFGUID guidMetadataFormat, [in, unique] const GUID *pguidVendor, [in] DWORD dwMetadataOptions, [out] IWICMetadataWriter **ppIWriter); HRESULT CreateMetadataWriterFromReader( [in] IWICMetadataReader *pIReader, [in, unique] const GUID *pguidVendor, [out] IWICMetadataWriter **ppIWriter); HRESULT CreateQueryReaderFromBlockReader( [in] IWICMetadataBlockReader *pIBlockReader, [out] IWICMetadataQueryReader **ppIQueryReader); HRESULT CreateQueryWriterFromBlockWriter( [in] IWICMetadataBlockWriter *pIBlockWriter, [out] IWICMetadataQueryWriter **ppIQueryWriter); HRESULT CreateEncoderPropertyBag( [in, unique, size_is(cCount)] PROPBAG2 *ppropOptions, [in] UINT cCount, [out] IPropertyBag2 **ppIPropertyBag); } ================================================ FILE: wine/windows/wincon.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINCON_H #define __WINE_WINCON_H #ifdef __cplusplus extern "C" { #endif #ifndef NOGDI #include #endif /* AttachConsole special pid value */ #define ATTACH_PARENT_PROCESS ((DWORD) -1) /* GetConsoleDisplayMode flags */ #define CONSOLE_FULLSCREEN 1 #define CONSOLE_FULLSCREEN_HARDWARE 2 /* SetConsoleDisplayMode flags */ #define CONSOLE_FULLSCREEN_MODE 1 #define CONSOLE_WINDOWED_MODE 2 /* CONSOLE_SELECTION_INFO.dwFlags */ #define CONSOLE_NO_SELECTION 0x00 #define CONSOLE_SELECTION_IN_PROGRESS 0x01 #define CONSOLE_SELECTION_NOT_EMPTY 0x02 #define CONSOLE_MOUSE_SELECTION 0x04 #define CONSOLE_MOUSE_DOWN 0x08 /* handler routine control signal type */ #define CTRL_C_EVENT 0 #define CTRL_BREAK_EVENT 1 #define CTRL_CLOSE_EVENT 2 #define CTRL_LOGOFF_EVENT 5 #define CTRL_SHUTDOWN_EVENT 6 /* Console Mode flags */ #define ENABLE_PROCESSED_INPUT 0x0001 #define ENABLE_LINE_INPUT 0x0002 #define ENABLE_ECHO_INPUT 0x0004 #define ENABLE_WINDOW_INPUT 0x0008 #define ENABLE_MOUSE_INPUT 0x0010 #define ENABLE_INSERT_MODE 0x0020 #define ENABLE_QUICK_EDIT_MODE 0x0040 #define ENABLE_EXTENDED_FLAGS 0x0080 #define ENABLE_AUTO_POSITION 0x0100 #define ENABLE_PROCESSED_OUTPUT 0x01 #define ENABLE_WRAP_AT_EOL_OUTPUT 0x02 typedef BOOL (WINAPI *PHANDLER_ROUTINE)(DWORD dwCtrlType); /* Attributes flags: */ #define FOREGROUND_BLUE 0x0001 #define FOREGROUND_GREEN 0x0002 #define FOREGROUND_RED 0x0004 #define FOREGROUND_INTENSITY 0x0008 #define BACKGROUND_BLUE 0x0010 #define BACKGROUND_GREEN 0x0020 #define BACKGROUND_RED 0x0040 #define BACKGROUND_INTENSITY 0x0080 #define COMMON_LVB_LEADING_BYTE 0x0100 #define COMMON_LVB_TRAILING_BYTE 0x0200 #define COMMON_LVB_GRID_HORIZONTAL 0x0400 #define COMMON_LVB_GRID_LVERTICAL 0x0800 #define COMMON_LVB_GRID_RVERTICAL 0x1000 #define COMMON_LVB_REVERSE_VIDEO 0x4000 #define COMMON_LVB_UNDERSCORE 0x8000 /* CONSOLE_HISTORY_INFO.dwFlags */ #define HISTORY_NO_DUP_FLAG 0x01 typedef struct _CONSOLE_CURSOR_INFO { DWORD dwSize; /* Between 1 & 100 for percentage of cell filled */ BOOL bVisible; /* Visibility of cursor */ } CONSOLE_CURSOR_INFO, *LPCONSOLE_CURSOR_INFO; typedef struct tagCOORD { SHORT X; SHORT Y; } COORD, *LPCOORD; typedef struct tagSMALL_RECT { SHORT Left; SHORT Top; SHORT Right; SHORT Bottom; } SMALL_RECT,*LPSMALL_RECT; typedef struct _CONSOLE_FONT_INFO { DWORD nFont; COORD dwFontSize; } CONSOLE_FONT_INFO,*LPCONSOLE_FONT_INFO; #ifndef NOGDI typedef struct _CONSOLE_FONT_INFOEX { ULONG cbSize; DWORD nFont; COORD dwFontSize; UINT FontFamily; UINT FontWeight; WCHAR FaceName[LF_FACESIZE]; } CONSOLE_FONT_INFOEX,*LPCONSOLE_FONT_INFOEX; WINBASEAPI BOOL WINAPI GetCurrentConsoleFontEx(HANDLE,BOOL,LPCONSOLE_FONT_INFOEX); WINBASEAPI BOOL WINAPI SetCurrentConsoleFontEx(HANDLE,BOOL,LPCONSOLE_FONT_INFOEX); #endif typedef struct tagCONSOLE_HISTORY_INFO { UINT cbSize; UINT HistoryBufferSize; UINT NumberOfHistoryBuffers; DWORD dwFlags; } CONSOLE_HISTORY_INFO,*LPCONSOLE_HISTORY_INFO; typedef struct _CONSOLE_READCONSOLE_CONTROL { ULONG nLength; ULONG nInitialChars; ULONG dwCtrlWakeupMask; ULONG dwConsoleKeyState; } CONSOLE_READCONSOLE_CONTROL,*LPCONSOLE_READCONSOLE_CONTROL; typedef struct tagCONSOLE_SCREEN_BUFFER_INFO { COORD dwSize; COORD dwCursorPosition; WORD wAttributes; SMALL_RECT srWindow; COORD dwMaximumWindowSize; } CONSOLE_SCREEN_BUFFER_INFO,*LPCONSOLE_SCREEN_BUFFER_INFO; typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX { ULONG cbSize; COORD dwSize; COORD dwCursorPosition; WORD wAttributes; SMALL_RECT srWindow; COORD dwMaximumWindowSize; WORD wPopupAttributes; BOOL bFullscreenSupported; COLORREF ColorTable[16]; } CONSOLE_SCREEN_BUFFER_INFOEX,*LPCONSOLE_SCREEN_BUFFER_INFOEX; typedef struct _CONSOLE_SELECTION_INFO { DWORD dwFlags; COORD dwSelectionAnchor; SMALL_RECT srSelection; } CONSOLE_SELECTION_INFO,*LPCONSOLE_SELECTION_INFO; typedef struct tagCHAR_INFO { union { WCHAR UnicodeChar; CHAR AsciiChar; } Char; WORD Attributes; } CHAR_INFO,*LPCHAR_INFO; typedef struct tagKEY_EVENT_RECORD { BOOL bKeyDown; /* 04 */ WORD wRepeatCount; /* 08 */ WORD wVirtualKeyCode; /* 0A */ WORD wVirtualScanCode; /* 0C */ union /* 0E */ { WCHAR UnicodeChar; /* 0E */ CHAR AsciiChar; /* 0E */ } uChar; DWORD dwControlKeyState; /* 10 */ } KEY_EVENT_RECORD,*LPKEY_EVENT_RECORD; /* dwControlKeyState bitmask */ #define RIGHT_ALT_PRESSED 0x0001 #define LEFT_ALT_PRESSED 0x0002 #define RIGHT_CTRL_PRESSED 0x0004 #define LEFT_CTRL_PRESSED 0x0008 #define SHIFT_PRESSED 0x0010 #define NUMLOCK_ON 0x0020 #define SCROLLLOCK_ON 0x0040 #define CAPSLOCK_ON 0x0080 #define ENHANCED_KEY 0x0100 typedef struct tagMOUSE_EVENT_RECORD { COORD dwMousePosition; DWORD dwButtonState; DWORD dwControlKeyState; DWORD dwEventFlags; } MOUSE_EVENT_RECORD,*LPMOUSE_EVENT_RECORD; /* MOUSE_EVENT_RECORD.dwButtonState */ #define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001 #define RIGHTMOST_BUTTON_PRESSED 0x0002 #define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004 #define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008 #define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010 /* MOUSE_EVENT_RECORD.dwEventFlags */ #define MOUSE_MOVED 0x0001 #define DOUBLE_CLICK 0x0002 #define MOUSE_WHEELED 0x0004 #define MOUSE_HWHEELED 0x0008 typedef struct tagWINDOW_BUFFER_SIZE_RECORD { COORD dwSize; } WINDOW_BUFFER_SIZE_RECORD,*LPWINDOW_BUFFER_SIZE_RECORD; typedef struct tagMENU_EVENT_RECORD { UINT dwCommandId; /* perhaps UINT16 ??? */ } MENU_EVENT_RECORD,*LPMENU_EVENT_RECORD; typedef struct tagFOCUS_EVENT_RECORD { BOOL bSetFocus; /* perhaps BOOL16 ??? */ } FOCUS_EVENT_RECORD,*LPFOCUS_EVENT_RECORD; typedef struct tagINPUT_RECORD { WORD EventType; /* 00 */ union { KEY_EVENT_RECORD KeyEvent; MOUSE_EVENT_RECORD MouseEvent; WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; MENU_EVENT_RECORD MenuEvent; FOCUS_EVENT_RECORD FocusEvent; } Event; } INPUT_RECORD,*PINPUT_RECORD; /* INPUT_RECORD.wEventType */ #define KEY_EVENT 0x01 #define MOUSE_EVENT 0x02 #define WINDOW_BUFFER_SIZE_EVENT 0x04 #define MENU_EVENT 0x08 #define FOCUS_EVENT 0x10 #define CONSOLE_TEXTMODE_BUFFER 1 #ifdef __i386__ /* Note: this should return a COORD, but calling convention for returning * structures is different between Windows and gcc on i386. */ WINBASEAPI DWORD WINAPI GetConsoleFontSize(HANDLE, DWORD); WINBASEAPI DWORD WINAPI GetLargestConsoleWindowSize(HANDLE); static inline COORD __wine_GetConsoleFontSize_wrapper(HANDLE h, DWORD d) { union { COORD c; DWORD dw; } u; u.dw = GetConsoleFontSize(h, d); return u.c; } #define GetConsoleFontSize(h, d) __wine_GetConsoleFontSize_wrapper(h, d) static inline COORD __wine_GetLargestConsoleWindowSize_wrapper(HANDLE h) { union { COORD c; DWORD dw; } u; u.dw = GetLargestConsoleWindowSize(h); return u.c; } #define GetLargestConsoleWindowSize(h) __wine_GetLargestConsoleWindowSize_wrapper(h) #else /* __i386__ */ WINBASEAPI COORD WINAPI GetConsoleFontSize(HANDLE, DWORD); WINBASEAPI COORD WINAPI GetLargestConsoleWindowSize(HANDLE); #endif /* __i386__ */ WINBASEAPI BOOL WINAPI AddConsoleAliasA(LPSTR,LPSTR,LPSTR); WINBASEAPI BOOL WINAPI AddConsoleAliasW(LPWSTR,LPWSTR,LPWSTR); #define AddConsoleAlias WINELIB_NAME_AW(AddConsoleAlias) WINBASEAPI BOOL WINAPI AllocConsole(VOID); WINBASEAPI BOOL WINAPI AttachConsole(DWORD); WINBASEAPI HANDLE WINAPI CreateConsoleScreenBuffer( DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,LPVOID); WINBASEAPI BOOL WINAPI FillConsoleOutputAttribute( HANDLE,WORD,DWORD,COORD,LPDWORD); WINBASEAPI BOOL WINAPI FillConsoleOutputCharacterA(HANDLE,CHAR,DWORD,COORD,LPDWORD); WINBASEAPI BOOL WINAPI FillConsoleOutputCharacterW(HANDLE,WCHAR,DWORD,COORD,LPDWORD); #define FillConsoleOutputCharacter WINELIB_NAME_AW(FillConsoleOutputCharacter) WINBASEAPI BOOL WINAPI FlushConsoleInputBuffer( HANDLE); WINBASEAPI BOOL WINAPI FreeConsole(VOID); WINBASEAPI BOOL WINAPI GenerateConsoleCtrlEvent( DWORD,DWORD); WINBASEAPI DWORD WINAPI GetConsoleAliasA(LPSTR,LPSTR,DWORD,LPSTR); WINBASEAPI DWORD WINAPI GetConsoleAliasW(LPWSTR,LPWSTR,DWORD,LPWSTR); #define GetConsoleAlias WINELIB_NAME_AW(GetConsoleAlias) WINBASEAPI DWORD WINAPI GetConsoleAliasesA(LPSTR,DWORD,LPSTR); WINBASEAPI DWORD WINAPI GetConsoleAliasesW(LPWSTR,DWORD,LPWSTR); #define GetConsoleAliases WINELIB_NAME_AW(GetConsoleAliases) WINBASEAPI DWORD WINAPI GetConsoleAliasesLengthA(LPSTR); WINBASEAPI DWORD WINAPI GetConsoleAliasesLengthW(LPWSTR); #define GetConsoleAliasesLength WINELIB_NAME_AW(GetConsoleAliasesLength) WINBASEAPI DWORD WINAPI GetConsoleAliasExesA(LPSTR,DWORD); WINBASEAPI DWORD WINAPI GetConsoleAliasExesW(LPWSTR,DWORD); #define GetConsoleAliasExes WINELIB_NAME_AW(GetConsoleAliasExes) WINBASEAPI DWORD WINAPI GetConsoleAliasExesLengthA(VOID); WINBASEAPI DWORD WINAPI GetConsoleAliasExesLengthW(VOID); #define GetConsoleAliasExesLength WINELIB_NAME_AW(GetConsoleAliasExesLength) WINBASEAPI UINT WINAPI GetConsoleCP(VOID); WINBASEAPI BOOL WINAPI GetConsoleCursorInfo( HANDLE,LPCONSOLE_CURSOR_INFO); WINBASEAPI BOOL WINAPI GetConsoleDisplayMode(LPDWORD); WINBASEAPI BOOL WINAPI GetConsoleHistoryInfo(LPCONSOLE_HISTORY_INFO); WINBASEAPI BOOL WINAPI GetConsoleInputExeNameA(DWORD,LPSTR); WINBASEAPI BOOL WINAPI GetConsoleInputExeNameW(DWORD,LPWSTR); #define GetConsoleInputExeName WINELIB_NAME_AW(GetConsoleInputExeName) WINBASEAPI BOOL WINAPI GetConsoleMode( HANDLE,LPDWORD); WINBASEAPI DWORD WINAPI GetConsoleOriginalTitleA(LPSTR,DWORD); WINBASEAPI DWORD WINAPI GetConsoleOriginalTitleW(LPWSTR,DWORD); #define GetConsoleOriginalTitle WINELIB_NAME_AW(GetConsoleOriginalTitle) WINBASEAPI UINT WINAPI GetConsoleOutputCP(VOID); WINBASEAPI DWORD WINAPI GetConsoleProcessList(LPDWORD,DWORD); WINBASEAPI BOOL WINAPI GetConsoleScreenBufferInfo(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFO); WINBASEAPI BOOL WINAPI GetConsoleScreenBufferInfoEx(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFOEX); WINBASEAPI DWORD WINAPI GetConsoleTitleA(LPSTR,DWORD); WINBASEAPI DWORD WINAPI GetConsoleTitleW(LPWSTR,DWORD); #define GetConsoleTitle WINELIB_NAME_AW(GetConsoleTitle) WINBASEAPI HWND WINAPI GetConsoleWindow(void); WINBASEAPI BOOL WINAPI GetCurrentConsoleFont(HANDLE,BOOL,LPCONSOLE_FONT_INFO); WINBASEAPI BOOL WINAPI GetNumberOfConsoleInputEvents( HANDLE,LPDWORD); WINBASEAPI BOOL WINAPI GetNumberOfConsoleMouseButtons(LPDWORD); WINBASEAPI BOOL WINAPI PeekConsoleInputA( HANDLE,PINPUT_RECORD,DWORD,LPDWORD); WINBASEAPI BOOL WINAPI PeekConsoleInputW( HANDLE,PINPUT_RECORD,DWORD,LPDWORD); #define PeekConsoleInput WINELIB_NAME_AW(PeekConsoleInput) WINBASEAPI BOOL WINAPI ReadConsoleA(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID); WINBASEAPI BOOL WINAPI ReadConsoleW(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID); #define ReadConsole WINELIB_NAME_AW(ReadConsole) WINBASEAPI BOOL WINAPI ReadConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,LPDWORD); WINBASEAPI BOOL WINAPI ReadConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,LPDWORD); #define ReadConsoleInput WINELIB_NAME_AW(ReadConsoleInput) WINBASEAPI BOOL WINAPI ReadConsoleOutputA( HANDLE,LPCHAR_INFO,COORD,COORD,LPSMALL_RECT); WINBASEAPI BOOL WINAPI ReadConsoleOutputW( HANDLE,LPCHAR_INFO,COORD,COORD,LPSMALL_RECT); #define ReadConsoleOutput WINELIB_NAME_AW(ReadConsoleOutput) WINBASEAPI BOOL WINAPI ReadConsoleOutputAttribute( HANDLE,LPWORD,DWORD,COORD,LPDWORD); WINBASEAPI BOOL WINAPI ReadConsoleOutputCharacterA(HANDLE,LPSTR,DWORD,COORD,LPDWORD); WINBASEAPI BOOL WINAPI ReadConsoleOutputCharacterW(HANDLE,LPWSTR,DWORD,COORD,LPDWORD); #define ReadConsoleOutputCharacter WINELIB_NAME_AW(ReadConsoleOutputCharacter) WINBASEAPI BOOL WINAPI ScrollConsoleScreenBufferA( HANDLE,LPSMALL_RECT,LPSMALL_RECT,COORD,LPCHAR_INFO); WINBASEAPI BOOL WINAPI ScrollConsoleScreenBufferW( HANDLE,LPSMALL_RECT,LPSMALL_RECT,COORD,LPCHAR_INFO); #define ScrollConsoleScreenBuffer WINELIB_NAME_AW(ScrollConsoleScreenBuffer) WINBASEAPI BOOL WINAPI SetConsoleActiveScreenBuffer( HANDLE); WINBASEAPI BOOL WINAPI SetConsoleCP(UINT); WINBASEAPI BOOL WINAPI SetConsoleCtrlHandler( PHANDLER_ROUTINE,BOOL); WINBASEAPI BOOL WINAPI SetConsoleCursorInfo( HANDLE,LPCONSOLE_CURSOR_INFO); WINBASEAPI BOOL WINAPI SetConsoleCursorPosition(HANDLE,COORD); WINBASEAPI BOOL WINAPI SetConsoleDisplayMode(HANDLE,DWORD,LPCOORD); WINBASEAPI BOOL WINAPI SetConsoleHistoryInfo(LPCONSOLE_HISTORY_INFO); WINBASEAPI BOOL WINAPI SetConsoleMode( HANDLE,DWORD); WINBASEAPI BOOL WINAPI SetConsoleOutputCP(UINT); WINBASEAPI BOOL WINAPI SetConsoleScreenBufferInfoEx(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFOEX); WINBASEAPI BOOL WINAPI SetConsoleScreenBufferSize(HANDLE,COORD); WINBASEAPI BOOL WINAPI SetConsoleTextAttribute( HANDLE,WORD); WINBASEAPI BOOL WINAPI SetConsoleTitleA(LPCSTR); WINBASEAPI BOOL WINAPI SetConsoleTitleW(LPCWSTR); #define SetConsoleTitle WINELIB_NAME_AW(SetConsoleTitle) WINBASEAPI BOOL WINAPI SetConsoleWindowInfo( HANDLE,BOOL,LPSMALL_RECT); WINBASEAPI BOOL WINAPI WriteConsoleA(HANDLE,const void *,DWORD,LPDWORD,void *); WINBASEAPI BOOL WINAPI WriteConsoleW(HANDLE,const void *,DWORD,LPDWORD,void *); #define WriteConsole WINELIB_NAME_AW(WriteConsole) WINBASEAPI BOOL WINAPI WriteConsoleInputA(HANDLE,const INPUT_RECORD *,DWORD,LPDWORD); WINBASEAPI BOOL WINAPI WriteConsoleInputW(HANDLE,const INPUT_RECORD *,DWORD,LPDWORD); #define WriteConsoleInput WINELIB_NAME_AW(WriteConsoleInput) WINBASEAPI BOOL WINAPI WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,LPSMALL_RECT); WINBASEAPI BOOL WINAPI WriteConsoleOutputW(HANDLE,const CHAR_INFO*,COORD,COORD,LPSMALL_RECT); #define WriteConsoleOutput WINELIB_NAME_AW(WriteConsoleOutput) WINBASEAPI BOOL WINAPI WriteConsoleOutputAttribute(HANDLE,const WORD *,DWORD,COORD,LPDWORD); WINBASEAPI BOOL WINAPI WriteConsoleOutputCharacterA(HANDLE,LPCSTR,DWORD,COORD,LPDWORD); WINBASEAPI BOOL WINAPI WriteConsoleOutputCharacterW(HANDLE,LPCWSTR,DWORD,COORD,LPDWORD); #define WriteConsoleOutputCharacter WINELIB_NAME_AW(WriteConsoleOutputCharacter) #ifdef __cplusplus } #endif #endif /* __WINE_WINCON_H */ ================================================ FILE: wine/windows/wincred.h ================================================ /* * Copyright (C) 2006 Robert Shearman (for CodeWeavers) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINCRED_H_ #define _WINCRED_H_ #ifdef __cplusplus extern "C" { #endif #ifdef _ADVAPI32_ #define WINADVAPI #else #define WINADVAPI DECLSPEC_IMPORT #endif #ifndef __SECHANDLE_DEFINED__ #define __SECHANDLE_DEFINED__ typedef struct _SecHandle { ULONG_PTR dwLower; ULONG_PTR dwUpper; } SecHandle, *PSecHandle; #endif #ifndef __WINE_CTXTHANDLE_DEFINED__ #define __WINE_CTXTHANDLE_DEFINED__ typedef SecHandle CtxtHandle; typedef PSecHandle PCtxtHandle; #endif typedef struct _CREDENTIAL_ATTRIBUTEA { LPSTR Keyword; DWORD Flags; DWORD ValueSize; LPBYTE Value; } CREDENTIAL_ATTRIBUTEA, *PCREDENTIAL_ATTRIBUTEA; typedef struct _CREDENTIAL_ATTRIBUTEW { LPWSTR Keyword; DWORD Flags; DWORD ValueSize; LPBYTE Value; } CREDENTIAL_ATTRIBUTEW, *PCREDENTIAL_ATTRIBUTEW; DECL_WINELIB_TYPE_AW(CREDENTIAL_ATTRIBUTE) DECL_WINELIB_TYPE_AW(PCREDENTIAL_ATTRIBUTE) typedef struct _CREDENTIALA { DWORD Flags; DWORD Type; LPSTR TargetName; LPSTR Comment; FILETIME LastWritten; DWORD CredentialBlobSize; LPBYTE CredentialBlob; DWORD Persist; DWORD AttributeCount; PCREDENTIAL_ATTRIBUTEA Attributes; LPSTR TargetAlias; LPSTR UserName; } CREDENTIALA, *PCREDENTIALA; typedef struct _CREDENTIALW { DWORD Flags; DWORD Type; LPWSTR TargetName; LPWSTR Comment; FILETIME LastWritten; DWORD CredentialBlobSize; LPBYTE CredentialBlob; DWORD Persist; DWORD AttributeCount; PCREDENTIAL_ATTRIBUTEW Attributes; LPWSTR TargetAlias; LPWSTR UserName; } CREDENTIALW, *PCREDENTIALW; DECL_WINELIB_TYPE_AW(CREDENTIAL) DECL_WINELIB_TYPE_AW(PCREDENTIAL) typedef struct _CREDENTIAL_TARGET_INFORMATIONA { LPSTR TargetName; LPSTR NetbiosServerName; LPSTR DnsServerName; LPSTR NetbiosDomainName; LPSTR DnsDomainName; LPSTR DnsTreeName; LPSTR PackageName; DWORD Flags; DWORD CredTypeCount; LPDWORD CredTypes; } CREDENTIAL_TARGET_INFORMATIONA, *PCREDENTIAL_TARGET_INFORMATIONA; typedef struct _CREDENTIAL_TARGET_INFORMATIONW { LPWSTR TargetName; LPWSTR NetbiosServerName; LPWSTR DnsServerName; LPWSTR NetbiosDomainName; LPWSTR DnsDomainName; LPWSTR DnsTreeName; LPWSTR PackageName; DWORD Flags; DWORD CredTypeCount; LPDWORD CredTypes; } CREDENTIAL_TARGET_INFORMATIONW, *PCREDENTIAL_TARGET_INFORMATIONW; DECL_WINELIB_TYPE_AW(CREDENTIAL_TARGET_INFORMATION) DECL_WINELIB_TYPE_AW(PCREDENTIAL_TARGET_INFORMATION) typedef struct _CREDUI_INFOA { DWORD cbSize; HWND hwndParent; PCSTR pszMessageText; PCSTR pszCaptionText; HBITMAP hbmBanner; } CREDUI_INFOA, *PCREDUI_INFOA; typedef struct _CREDUI_INFOW { DWORD cbSize; HWND hwndParent; PCWSTR pszMessageText; PCWSTR pszCaptionText; HBITMAP hbmBanner; } CREDUI_INFOW, *PCREDUI_INFOW; DECL_WINELIB_TYPE_AW(CREDUI_INFO) DECL_WINELIB_TYPE_AW(PCREDUI_INFO) typedef enum _CRED_MARSHAL_TYPE { CertCredential = 1, UsernameTargetCredential, BinaryBlobCredential } CRED_MARSHAL_TYPE, *PCRED_MARSHAL_TYPE; #define CERT_HASH_LENGTH 20 typedef struct _CERT_CREDENTIAL_INFO { ULONG cbSize; UCHAR rgbHashOfCert[CERT_HASH_LENGTH]; } CERT_CREDENTIAL_INFO, *PCERT_CREDENTIAL_INFO; typedef struct _USERNAME_TARGET_CREDENTIAL_INFO { LPWSTR UserName; } USERNAME_TARGET_CREDENTIAL_INFO; typedef struct _BINARY_BLOB_CREDENTIAL_INFO { ULONG cbBlob; LPBYTE pbBlob; } BINARY_BLOB_CREDENTIAL_INFO, *PBINARY_BLOB_CREDENTIAL_INFO; #define CRED_MAX_STRING_LENGTH 256 #define CRED_MAX_USERNAME_LENGTH 513 #define CRED_MAX_GENERIC_TARGET_NAME_LENGTH 32767 #define CRED_MAX_DOMAIN_TARGET_NAME_LENGTH 337 #define CRED_MAX_VALUE_SIZE 256 #define CRED_MAX_ATTRIBUTES 64 #define CRED_MAX_BLOB_SIZE 512 #define CRED_MAX_CREDENTIAL_BLOB_SIZE (5 * CRED_MAX_BLOB_SIZE) #define CREDUI_MAX_MESSAGE_LENGTH 32767 #define CREDUI_MAX_CAPTION_LENGTH 128 #define CREDUI_MAX_GENERIC_TARGET_LENGTH CRED_MAX_GENERIC_TARGET_NAME_LENGTH #define CREDUI_MAX_DOMAIN_TARGET_LENGTH CRED_MAX_DOMAIN_TARGET_NAME_LENGTH #define CREDUI_MAX_USERNAME_LENGTH CRED_MAX_USERNAME_LENGTH #define CREDUI_MAX_PASSWORD_LENGTH (CRED_MAX_CREDENTIAL_BLOB_SIZE / 2) /* flags for CREDENTIAL::Flags */ #define CRED_FLAGS_PASSWORD_FOR_CERT 0x0001 #define CRED_FLAGS_PROMPT_NOW 0x0002 #define CRED_FLAGS_USERNAME_TARGET 0x0004 #define CRED_FLAGS_OWF_CRED_BLOB 0x0008 #define CRED_FLAGS_VALID_FLAGS 0x000f /* values for CREDENTIAL::Type */ #define CRED_TYPE_GENERIC 1 #define CRED_TYPE_DOMAIN_PASSWORD 2 #define CRED_TYPE_DOMAIN_CERTIFICATE 3 #define CRED_TYPE_DOMAIN_VISIBLE_PASSWORD 4 #define CRED_TYPE_GENERIC_CERTIFICATE 5 #define CRED_TYPE_MAXIMUM 6 #define CRED_TYPE_MAXIMUM_EX (CRED_TYPE_MAXIMUM+1000) /* values for CREDENTIAL::Persist */ #define CRED_PERSIST_NONE 0 #define CRED_PERSIST_SESSION 1 #define CRED_PERSIST_LOCAL_MACHINE 2 #define CRED_PERSIST_ENTERPRISE 3 /* values for CREDENTIAL_TARGET_INFORMATION::Flags */ #define CRED_TI_SERVER_FORMAT_UNKNOWN 1 #define CRED_TI_DOMAIN_FORMAT_UNKNOWN 2 #define CRED_TI_ONLY_PASSWORD_REQUIRED 4 #define CREDUI_FLAGS_INCORRECT_PASSWORD 0x00000001 #define CREDUI_FLAGS_DO_NOT_PERSIST 0x00000002 #define CREDUI_FLAGS_REQUEST_ADMINISTRATOR 0x00000004 #define CREDUI_FLAGS_EXCLUDE_CERTIFICATES 0x00000008 #define CREDUI_FLAGS_REQUIRE_CERTIFICATE 0x00000010 #define CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX 0x00000040 #define CREDUI_FLAGS_ALWAYS_SHOW_UI 0x00000080 #define CREDUI_FLAGS_REQUIRE_SMARTCARD 0x00000100 #define CREDUI_FLAGS_PASSWORD_ONLY_OK 0x00000200 #define CREDUI_FLAGS_VALIDATE_USERNAME 0x00000400 #define CREDUI_FLAGS_COMPLETE_USERNAME 0x00000800 #define CREDUI_FLAGS_PERSIST 0x00001000 #define CREDUI_FLAGS_SERVER_CREDENTIAL 0x00004000 #define CREDUI_FLAGS_EXPECT_CONFIRMATION 0x00020000 #define CREDUI_FLAGS_GENERIC_CREDENTIALS 0x00040000 #define CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS 0x00080000 #define CREDUI_FLAGS_KEEP_USERNAME 0x00100000 /* flags for CredWrite and CredWriteDomainCredentials */ #define CRED_PRESERVE_CREDENTIAL_BLOB 0x00000001 WINADVAPI BOOL WINAPI CredDeleteA(LPCSTR,DWORD,DWORD); WINADVAPI BOOL WINAPI CredDeleteW(LPCWSTR,DWORD,DWORD); #define CredDelete WINELIB_NAME_AW(CredDelete) WINADVAPI BOOL WINAPI CredEnumerateA(LPCSTR,DWORD,DWORD *,PCREDENTIALA **); WINADVAPI BOOL WINAPI CredEnumerateW(LPCWSTR,DWORD,DWORD *,PCREDENTIALW **); #define CredEnumerate WINELIB_NAME_AW(CredEnumerate) WINADVAPI VOID WINAPI CredFree(PVOID); WINADVAPI BOOL WINAPI CredGetSessionTypes(DWORD,LPDWORD); WINADVAPI BOOL WINAPI CredIsMarshaledCredentialA(LPCSTR); WINADVAPI BOOL WINAPI CredIsMarshaledCredentialW(LPCWSTR); #define CredIsMarshaledCredential WINELIB_NAME_AW(CredIsMarshaledCredential) WINADVAPI BOOL WINAPI CredMarshalCredentialA(CRED_MARSHAL_TYPE,PVOID,LPSTR *); WINADVAPI BOOL WINAPI CredMarshalCredentialW(CRED_MARSHAL_TYPE,PVOID,LPWSTR *); #define CredMarshalCredential WINELIB_NAME_AW(CredMarshalCredential) WINADVAPI BOOL WINAPI CredReadA(LPCSTR,DWORD,DWORD,PCREDENTIALA *); WINADVAPI BOOL WINAPI CredReadW(LPCWSTR,DWORD,DWORD,PCREDENTIALW *); #define CredRead WINELIB_NAME_AW(CredRead) WINADVAPI BOOL WINAPI CredReadDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA,DWORD,DWORD *,PCREDENTIALA **); WINADVAPI BOOL WINAPI CredReadDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW,DWORD,DWORD *,PCREDENTIALW **); #define CredReadDomainCredentials WINELIB_NAME_AW(CredReadDomainCredentials) WINADVAPI BOOL WINAPI CredRenameA(LPCSTR,LPCSTR,DWORD,DWORD); WINADVAPI BOOL WINAPI CredRenameW(LPCWSTR,LPCWSTR,DWORD,DWORD); #define CredRename WINELIB_NAME_AW(CredRename) WINADVAPI BOOL WINAPI CredUnmarshalCredentialA(LPCSTR,PCRED_MARSHAL_TYPE,PVOID *); WINADVAPI BOOL WINAPI CredUnmarshalCredentialW(LPCWSTR,PCRED_MARSHAL_TYPE,PVOID *); #define CredUnmarshalCredential WINELIB_NAME_AW(CredUnmarshalCredential) WINADVAPI BOOL WINAPI CredWriteA(PCREDENTIALA,DWORD); WINADVAPI BOOL WINAPI CredWriteW(PCREDENTIALW,DWORD); #define CredWrite WINELIB_NAME_AW(CredWrite) BOOL WINAPI CredPackAuthenticationBufferW(DWORD,LPWSTR,LPWSTR,PBYTE,DWORD *); BOOL WINAPI CredUnPackAuthenticationBufferW(DWORD,PVOID,DWORD,LPWSTR,DWORD *,LPWSTR,DWORD *,LPWSTR,DWORD *); DWORD WINAPI CredUICmdLinePromptForCredentialsW(PCWSTR,PCtxtHandle,DWORD,PWSTR,ULONG,PWSTR,ULONG,PBOOL,DWORD); DWORD WINAPI CredUICmdLinePromptForCredentialsA(PCSTR,PCtxtHandle,DWORD,PSTR,ULONG,PSTR,ULONG,PBOOL,DWORD); #define CredUICmdLinePromptForCredentials WINELIB_NAME_AW(CredUICmdLinePromptForCredentials) DWORD WINAPI CredUIConfirmCredentialsW(PCWSTR,BOOL); DWORD WINAPI CredUIConfirmCredentialsA(PCSTR,BOOL); #define CredUIConfirmCredentials WINELIB_NAME_AW(CredUIConfirmCredentials) DWORD WINAPI CredUIParseUserNameW(PCWSTR,PWSTR,ULONG,PWSTR,ULONG); DWORD WINAPI CredUIParseUserNameA(PCSTR,PSTR,ULONG,PSTR,ULONG); #define CredUIParseUserName WINELIB_NAME_AW(CredUIParseUserName) DWORD WINAPI CredUIPromptForCredentialsW(PCREDUI_INFOW,PCWSTR,PCtxtHandle,DWORD,PWSTR,ULONG,PWSTR,ULONG,PBOOL,DWORD); DWORD WINAPI CredUIPromptForCredentialsA(PCREDUI_INFOA,PCSTR,PCtxtHandle,DWORD,PSTR,ULONG,PSTR,ULONG,PBOOL,DWORD); #define CredUIPromptForCredentials WINELIB_NAME_AW(CredUIPromptForCredentials) DWORD WINAPI CredUIPromptForWindowsCredentialsW(PCREDUI_INFOW,DWORD,ULONG *,LPCVOID,ULONG,LPVOID *, ULONG *, BOOL *, DWORD); DWORD WINAPI CredUIStoreSSOCredW(PCWSTR,PCWSTR,PCWSTR,BOOL); /* Note: no CredUIStoreSSOCredA in PSDK header */ DWORD WINAPI CredUIReadSSOCredW(PCWSTR,PWSTR*); /* Note: no CredUIReadSSOCredA in PSDK header */ #ifdef __cplusplus } #endif #endif /* _WINCRED_H_ */ ================================================ FILE: wine/windows/wincrypt.h ================================================ /* * Copyright (C) 2002 Travis Michielsen * Copyright (C) 2004-2005 Juan Lang * Copyright (C) 2007 Vijay Kiran Kamuju * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINCRYPT_H #define __WINE_WINCRYPT_H #ifdef __cplusplus extern "C" { #endif #include /* FIXME: #include */ #ifdef _ADVAPI32_ # define WINADVAPI #else # define WINADVAPI DECLSPEC_IMPORT #endif /* some typedefs for function parameters */ typedef unsigned int ALG_ID; typedef ULONG_PTR HCRYPTPROV; typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE; typedef ULONG_PTR HCRYPTPROV_LEGACY; typedef ULONG_PTR HCRYPTKEY; typedef ULONG_PTR HCRYPTHASH; typedef void *HCERTSTORE; typedef void *HCRYPTMSG; typedef void *HCERTSTOREPROV; typedef void *HCRYPTOIDFUNCSET; typedef void *HCRYPTOIDFUNCADDR; typedef void *HCRYPTDEFAULTCONTEXT; /* CSP Structs */ typedef struct _PROV_ENUMALGS { ALG_ID aiAlgid; DWORD dwBitLen; DWORD dwNameLen; CHAR szName[20]; } PROV_ENUMALGS; typedef struct _PROV_ENUMALGS_EX { ALG_ID aiAlgid; DWORD dwDefaultLen; DWORD dwMinLen; DWORD dwMaxLen; DWORD dwProtocols; DWORD dwNameLen; CHAR szName[20]; DWORD dwLongNameLen; CHAR szLongName[40]; } PROV_ENUMALGS_EX; #define SCHANNEL_MAC_KEY 0 #define SCHANNEL_ENC_KEY 1 typedef struct _SCHANNEL_ALG { DWORD dwUse; ALG_ID Algid; DWORD cBits; DWORD dwFlags; DWORD dwReserved; } SCHANNEL_ALG, *PSCHANNEL_ALG; #define CRYPT_IPSEC_HMAC_KEY 0x0100 typedef struct _HMAC_INFO { ALG_ID HashAlgid; BYTE* pbInnerString; DWORD cbInnerString; BYTE* pbOuterString; DWORD cbOuterString; } HMAC_INFO, *PHMAC_INFO; typedef struct _CRYPTOAPI_BLOB { DWORD cbData; BYTE* pbData; } CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB, CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB, CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB, CERT_NAME_BLOB, *PCERT_NAME_BLOB, CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB, CERT_BLOB, *PCERT_BLOB, CRL_BLOB, *PCRL_BLOB, DATA_BLOB, *PDATA_BLOB, CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB, CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB, CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB, CRYPT_DER_BLOB, *PCRYPT_DER_BLOB, CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB; typedef struct _CRYPTPROTECT_PROMPTSTRUCT{ DWORD cbSize; DWORD dwPromptFlags; HWND hwndApp; LPCWSTR szPrompt; } CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT; typedef struct _CRYPT_ALGORITHM_IDENTIFIER { LPSTR pszObjId; CRYPT_OBJID_BLOB Parameters; } CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER; typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE { LPSTR pszObjId; CRYPT_OBJID_BLOB Value; } CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE; typedef struct _PUBLICKEYSTRUC { BYTE bType; BYTE bVersion; WORD reserved; ALG_ID aiKeyAlg; } BLOBHEADER, PUBLICKEYSTRUC; typedef struct _RSAPUBKEY { DWORD magic; DWORD bitlen; DWORD pubexp; } RSAPUBKEY; typedef struct _PUBKEY { DWORD magic; DWORD bitlen; } DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY; typedef struct _DSSSEED { DWORD counter; BYTE seed[20]; } DSSSEED; typedef struct _PUBKEYVER3 { DWORD magic; DWORD bitlenP; DWORD bitlenQ; DWORD bitlenJ; DSSSEED DSSSeed; } DHPUBKEY_VER3, DSSPUBKEY_VER3; typedef struct _PRIVKEYVER3 { DWORD magic; DWORD bitlenP; DWORD bitlenQ; DWORD bitlenJ; DWORD bitlenX; DSSSEED DSSSeed; } DHPRIVKEY_VER3, DSSPRIVKEY_VER3; typedef struct _KEY_TYPE_SUBTYPE { DWORD dwKeySpec; GUID Type; GUID SubType; } KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE; typedef struct _CERT_FORTEZZA_DATA_PROP { unsigned char SerialNumber[8]; int CertIndex; unsigned char CertLabel[36]; } CERT_FORTEZZA_DATA_PROP; typedef struct _CMS_DH_KEY_INFO { DWORD dwVersion; ALG_ID Algid; LPSTR pszContentEncObjId; CRYPT_DATA_BLOB PubInfo; void *pReserved; } CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO; typedef struct _CRYPT_BIT_BLOB { DWORD cbData; BYTE *pbData; DWORD cUnusedBits; } CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB; typedef struct _CRYPT_KEY_PROV_PARAM { DWORD dwParam; BYTE *pbData; DWORD cbData; DWORD dwFlags; } CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM; typedef struct _CRYPT_KEY_PROV_INFO { LPWSTR pwszContainerName; LPWSTR pwszProvName; DWORD dwProvType; DWORD dwFlags; DWORD cProvParam; PCRYPT_KEY_PROV_PARAM rgProvParam; DWORD dwKeySpec; } CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO; typedef struct _CERT_KEY_CONTEXT { DWORD cbSize; HCRYPTPROV hCryptProv; DWORD dwKeySpec; } CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT; typedef struct _CERT_PUBLIC_KEY_INFO { CRYPT_ALGORITHM_IDENTIFIER Algorithm; CRYPT_BIT_BLOB PublicKey; } CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO; typedef struct _CERT_EXTENSION { LPSTR pszObjId; BOOL fCritical; CRYPT_OBJID_BLOB Value; } CERT_EXTENSION, *PCERT_EXTENSION; typedef struct _CERT_EXTENSIONS { DWORD cExtension; PCERT_EXTENSION rgExtension; } CERT_EXTENSIONS, *PCERT_EXTENSIONS; typedef struct _CERT_INFO { DWORD dwVersion; CRYPT_INTEGER_BLOB SerialNumber; CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; CERT_NAME_BLOB Issuer; FILETIME NotBefore; FILETIME NotAfter; CERT_NAME_BLOB Subject; CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo; CRYPT_BIT_BLOB IssuerUniqueId; CRYPT_BIT_BLOB SubjectUniqueId; DWORD cExtension; PCERT_EXTENSION rgExtension; } CERT_INFO, *PCERT_INFO; typedef struct _CERT_RDN_ATTR { LPSTR pszObjId; DWORD dwValueType; CERT_RDN_VALUE_BLOB Value; } CERT_RDN_ATTR, *PCERT_RDN_ATTR; typedef struct _CERT_RDN { DWORD cRDNAttr; PCERT_RDN_ATTR rgRDNAttr; } CERT_RDN, *PCERT_RDN; typedef struct _CERT_NAME_INFO { DWORD cRDN; PCERT_RDN rgRDN; } CERT_NAME_INFO, *PCERT_NAME_INFO; typedef struct _CERT_NAME_VALUE { DWORD dwValueType; CERT_RDN_VALUE_BLOB Value; } CERT_NAME_VALUE, *PCERT_NAME_VALUE; typedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO { CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm; CRYPT_DATA_BLOB EncryptedPrivateKey; } CERT_ENCRYPTED_PRIVATE_KEY_INFO, *PCERT_ENCRYPTED_PRIVATE_KEY_INFO; typedef struct _CERT_AUTHORITY_KEY_ID_INFO { CRYPT_DATA_BLOB KeyId; CERT_NAME_BLOB CertIssuer; CRYPT_INTEGER_BLOB CertSerialNumber; } CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO; typedef struct _CERT_PRIVATE_KEY_VALIDITY { FILETIME NotBefore; FILETIME NotAfter; } CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY; typedef struct _CERT_KEY_ATTRIBUTES_INFO { CRYPT_DATA_BLOB KeyId; CRYPT_BIT_BLOB IntendedKeyUsage; PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod; } CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO; typedef struct _CERT_ECC_SIGNATURE { CRYPT_UINT_BLOB r; CRYPT_UINT_BLOB s; } CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE; /* byte 0 */ #define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80 #define CERT_NON_REPUDIATION_KEY_USAGE 0x40 #define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20 #define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10 #define CERT_KEY_AGREEMENT_KEY_USAGE 0x08 #define CERT_KEY_CERT_SIGN_KEY_USAGE 0x04 #define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x02 #define CERT_CRL_SIGN_KEY_USAGE 0x02 #define CERT_ENCIPHER_ONLY_KEY_USAGE 0x01 /* byte 1 */ #define CERT_DECIPHER_ONLY_KEY_USAGE 0x80 typedef struct _CERT_POLICY_ID { DWORD cCertPolicyElementId; LPSTR *rgbszCertPolicyElementId; } CERT_POLICY_ID, *PCERT_POLICY_ID; typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO { DWORD cCertPolicyId; PCERT_POLICY_ID rgCertPolicyId; CRYPT_BIT_BLOB RestrictedKeyUsage; } CERT_KEY_USAGE_RESTRICTION_INFO, *PCERT_KEY_USAGE_RESTRICTION_INFO; typedef struct _CERT_OTHER_NAME { LPSTR pszObjId; CRYPT_OBJID_BLOB Value; } CERT_OTHER_NAME, *PCERT_OTHER_NAME; typedef struct _CERT_ALT_NAME_ENTRY { DWORD dwAltNameChoice; union { PCERT_OTHER_NAME pOtherName; LPWSTR pwszRfc822Name; LPWSTR pwszDNSName; CERT_NAME_BLOB DirectoryName; LPWSTR pwszURL; CRYPT_DATA_BLOB IPAddress; LPSTR pszRegisteredID; } DUMMYUNIONNAME; } CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY; #define CERT_ALT_NAME_OTHER_NAME 1 #define CERT_ALT_NAME_RFC822_NAME 2 #define CERT_ALT_NAME_DNS_NAME 3 #define CERT_ALT_NAME_X400_ADDRESS 4 #define CERT_ALT_NAME_DIRECTORY_NAME 5 #define CERT_ALT_NAME_EDI_PARTY_NAME 6 #define CERT_ALT_NAME_URL 7 #define CERT_ALT_NAME_IP_ADDRESS 8 #define CERT_ALT_NAME_REGISTERED_ID 9 typedef struct _CERT_ALT_NAME_INFO { DWORD cAltEntry; PCERT_ALT_NAME_ENTRY rgAltEntry; } CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO; #define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xff #define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16 #define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0x0000ffff #define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0 #define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(x) \ (((x) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & \ CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK) #define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(x) \ ((x) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK) typedef struct _CERT_BASIC_CONSTRAINTS_INFO { CRYPT_BIT_BLOB SubjectType; BOOL fPathLenConstraint; DWORD dwPathLenConstraint; DWORD cSubtreesConstraint; CERT_NAME_BLOB *rgSubtreesConstraint; } CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO; #define CERT_CA_SUBJECT_FLAG 0x80 #define CERT_END_ENTITY_SUBJECT_FLAG 0x40 typedef struct _CERT_BASIC_CONSTRAINTS2_INFO { BOOL fCA; BOOL fPathLenConstraint; DWORD dwPathLenConstraint; } CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO; typedef struct _CERT_POLICY_QUALIFIER_INFO { LPSTR pszPolicyQualifierId; CRYPT_OBJID_BLOB Qualifier; } CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO; typedef struct _CERT_POLICY_INFO { LPSTR pszPolicyIdentifier; DWORD cPolicyQualifier; CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier; } CERT_POLICY_INFO, *PCERT_POLICY_INFO; typedef struct _CERT_POLICIES_INFO { DWORD cPolicyInfo; CERT_POLICY_INFO *rgPolicyInfo; } CERT_POLICIES_INFO, *PCERT_POLICIES_INFO; typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE { LPSTR pszOrganization; DWORD cNoticeNumbers; int *rgNoticeNumbers; } CERT_POLICY_QUALIFIER_NOTICE_REFERENCE, *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE; typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE { CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference; LPWSTR pszDisplayText; } CERT_POLICY_QUALIFIER_USER_NOTICE, *PCERT_POLICY_QUALIFIER_USER_NOTICE; typedef struct _CPS_URLS { LPWSTR pszURL; CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm; CRYPT_DATA_BLOB *pDigest; } CPS_URLS, *PCPS_URLS; typedef struct _CERT_POLICY95_QUALIFIER1 { LPWSTR pszPracticesReference; LPSTR pszNoticeIdentifier; LPSTR pszNSINoticeIdentifier; DWORD cCPSURLs; CPS_URLS *rgCPSURLs; } CERT_POLICY95_QUALIFIER1, *PCERT_POLICY95_QUALIFIER1; typedef struct _CERT_POLICY_MAPPING { LPSTR pszIssuerDomainPolicy; LPSTR pszSubjectDomainPolicy; } CERT_POLICY_MAPPING, *PCERT_POLICY_MAPPING; typedef struct _CERT_POLICY_MAPPINGS_INFO { DWORD cPolicyMapping; PCERT_POLICY_MAPPING rgPolicyMapping; } CERT_POLICY_MAPPINGS_INFO, *PCERT_POLICY_MAPPINGS_INFO; typedef struct _CERT_POLICY_CONSTRAINTS_INFO { BOOL fRequireExplicitPolicy; DWORD dwRequireExplicitPolicySkipCerts; BOOL fInhibitPolicyMapping; DWORD dwInhibitPolicyMappingSkipCerts; } CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO; typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY { LPSTR pszObjId; DWORD cValue; PCRYPT_DER_BLOB rgValue; } CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY, *PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY; typedef struct _CRYPT_CONTENT_INFO { LPSTR pszObjId; CRYPT_DER_BLOB Content; } CRYPT_CONTENT_INFO, *PCRYPT_CONTENT_INFO; typedef struct _CRYPT_SEQUENCE_OF_ANY { DWORD cValue; PCRYPT_DER_BLOB rgValue; } CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY; typedef struct _CERT_AUTHORITY_KEY_ID2_INFO { CRYPT_DATA_BLOB KeyId; CERT_ALT_NAME_INFO AuthorityCertIssuer; CRYPT_INTEGER_BLOB AuthorityCertSerialNumber; } CERT_AUTHORITY_KEY_ID2_INFO, *PCERT_AUTHORITY_KEY_ID2_INFO; typedef struct _CERT_ACCESS_DESCRIPTION { LPSTR pszAccessMethod; CERT_ALT_NAME_ENTRY AccessLocation; } CERT_ACCESS_DESCRIPTION, *PCERT_ACCESS_DESCRIPTION; typedef struct _CERT_AUTHORITY_INFO_ACCESS { DWORD cAccDescr; PCERT_ACCESS_DESCRIPTION rgAccDescr; } CERT_AUTHORITY_INFO_ACCESS, *PCERT_AUTHORITY_INFO_ACCESS; typedef struct _CERT_CONTEXT { DWORD dwCertEncodingType; BYTE *pbCertEncoded; DWORD cbCertEncoded; PCERT_INFO pCertInfo; HCERTSTORE hCertStore; } CERT_CONTEXT, *PCERT_CONTEXT; typedef const CERT_CONTEXT *PCCERT_CONTEXT; typedef struct _CRL_ENTRY { CRYPT_INTEGER_BLOB SerialNumber; FILETIME RevocationDate; DWORD cExtension; PCERT_EXTENSION rgExtension; } CRL_ENTRY, *PCRL_ENTRY; typedef struct _CRL_INFO { DWORD dwVersion; CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; CERT_NAME_BLOB Issuer; FILETIME ThisUpdate; FILETIME NextUpdate; DWORD cCRLEntry; PCRL_ENTRY rgCRLEntry; DWORD cExtension; PCERT_EXTENSION rgExtension; } CRL_INFO, *PCRL_INFO; typedef struct _CRL_DIST_POINT_NAME { DWORD dwDistPointNameChoice; union { CERT_ALT_NAME_INFO FullName; } DUMMYUNIONNAME; } CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME; #define CRL_DIST_POINT_NO_NAME 0 #define CRL_DIST_POINT_FULL_NAME 1 #define CRL_DIST_POINT_ISSUER_RDN_NAME 2 typedef struct _CRL_DIST_POINT { CRL_DIST_POINT_NAME DistPointName; CRYPT_BIT_BLOB ReasonFlags; CERT_ALT_NAME_INFO CRLIssuer; } CRL_DIST_POINT, *PCRL_DIST_POINT; #define CRL_REASON_UNUSED_FLAG 0x80 #define CRL_REASON_KEY_COMPROMISE_FLAG 0x40 #define CRL_REASON_CA_COMPROMISE_FLAG 0x20 #define CRL_REASON_AFFILIATION_CHANGED_FLAG 0x10 #define CRL_REASON_SUPERSEDED_FLAG 0x08 #define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04 #define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x02 typedef struct _CRL_DIST_POINTS_INFO { DWORD cDistPoint; PCRL_DIST_POINT rgDistPoint; } CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO; #define CRL_DIST_POINT_ERR_INDEX_MASK 0x7f #define CRL_DIST_POINT_ERR_INDEX_SHIFT 24 #define GET_CRL_DIST_POINT_ERR_INDEX(x) \ (((x) >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK) #define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT __MSABI_LONG(0x80000000) #define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(x) \ ((x) & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT) typedef struct _CROSS_CERT_DIST_POINTS_INFO { DWORD dwSyncDeltaTime; DWORD cDistPoint; PCERT_ALT_NAME_INFO rgDistPoint; } CROSS_CERT_DIST_POINTS_INFO, *PCROSS_CERT_DIST_POINTS_INFO; #define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xff #define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24 #define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(x) \ (((x) >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & \ CROSS_CERT_DIST_POINT_ERR_INDEX_MASK) typedef struct _CERT_PAIR { CERT_BLOB Forward; CERT_BLOB Reverse; } CERT_PAIR, *PCERT_PAIR; typedef struct _CRL_ISSUING_DIST_POINT { CRL_DIST_POINT_NAME DistPointName; BOOL fOnlyContainsUserCerts; BOOL fOnlyContainsCACerts; CRYPT_BIT_BLOB OnlySomeReasonFlags; BOOL fIndirectCRL; } CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT; typedef struct _CERT_GENERAL_SUBTREE { CERT_ALT_NAME_ENTRY Base; DWORD dwMinimum; BOOL fMaximum; DWORD dwMaximum; } CERT_GENERAL_SUBTREE, *PCERT_GENERAL_SUBTREE; typedef struct _CERT_NAME_CONSTRAINTS_INFO { DWORD cPermittedSubtree; PCERT_GENERAL_SUBTREE rgPermittedSubtree; DWORD cExcludedSubtree; PCERT_GENERAL_SUBTREE rgExcludedSubtree; } CERT_NAME_CONSTRAINTS_INFO, *PCERT_NAME_CONSTRAINTS_INFO; #define CERT_EXCLUDED_SUBTREE_BIT __MSABI_LONG(0x80000000) #define IS_CERT_EXCLUDED_SUBTREE(x) ((x) & CERT_EXCLUDED_SUBTREE_BIT) typedef struct _CRYPT_ATTRIBUTE { LPSTR pszObjId; DWORD cValue; PCRYPT_DATA_BLOB rgValue; } CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE; typedef struct _CRYPT_ATTRIBUTES { DWORD cAttr; PCRYPT_ATTRIBUTE rgAttr; } CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES; typedef struct _CERT_REQUEST_INFO { DWORD dwVersion; CERT_NAME_BLOB Subject; CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo; DWORD cAttribute; PCRYPT_ATTRIBUTE rgAttribute; } CERT_REQUEST_INFO, *PCERT_REQUEST_INFO; typedef struct _CERT_KEYGEN_REQUEST_INFO { DWORD dwVersion; CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo; LPWSTR pwszChallengeString; } CERT_KEYGEN_REQUEST_INFO, *PCERT_KEYGEN_REQUEST_INFO; typedef struct _CERT_SIGNED_CONTENT_INFO { CRYPT_DER_BLOB ToBeSigned; CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; CRYPT_BIT_BLOB Signature; } CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO; typedef struct _CRL_CONTEXT { DWORD dwCertEncodingType; BYTE *pbCrlEncoded; DWORD cbCrlEncoded; PCRL_INFO pCrlInfo; HCERTSTORE hCertStore; } CRL_CONTEXT, *PCRL_CONTEXT; typedef const CRL_CONTEXT *PCCRL_CONTEXT; #define SORTED_CTL_EXT_FLAGS_OFFSET (0*4) #define SORTED_CTL_EXT_COUNT_OFFSET (1*4) #define SORTED_CTL_EXT_MAX_COLLISION_OFFSET (2*4) #define SORTED_CTL_EXT_HASH_BUCKET_OFFSET (3*4) #define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG 0x1 typedef struct _CERT_DSS_PARAMETERS { CRYPT_UINT_BLOB p; CRYPT_UINT_BLOB q; CRYPT_UINT_BLOB g; } CERT_DSS_PARAMETERS, *PCERT_DSS_PARAMETERS; #define CERT_DSS_R_LEN 20 #define CERT_DSS_S_LEN 20 #define CERT_DSS_SIGNATURE_LEN (CERT_DSS_R_LEN + CERT_DSS_S_LEN) #define CERT_MAX_ENCODED_DSS_SIGNATURE_LEN (2 + 2*(2 + 20 +1)) typedef struct _CERT_DH_PARAMETERS { CRYPT_UINT_BLOB p; CRYPT_UINT_BLOB g; } CERT_DH_PARAMETERS, *PCERT_DH_PARAMETERS; typedef struct _CERT_X942_DH_VALIDATION_PARAMS { CRYPT_BIT_BLOB seed; DWORD pgenCounter; } CERT_X942_DH_VALIDATION_PARAMS, *PCERT_X942_DH_VALIDATION_PARAMS; typedef struct _CERT_X942_DH_PARAMETERS { CRYPT_UINT_BLOB p; CRYPT_UINT_BLOB g; CRYPT_UINT_BLOB q; CRYPT_UINT_BLOB j; PCERT_X942_DH_VALIDATION_PARAMS pValidationParams; } CERT_X942_DH_PARAMETERS, *PCERT_X942_DH_PARAMETERS; #define CRYPT_X942_COUNTER_BYTE_LENGTH 4 #define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH 4 #define CRYPT_X942_PUB_INFO_BYTE_LENGTH (512/8) typedef struct _CRYPT_X942_OTHER_INFO { LPSTR pszContentEncryptionObjId; BYTE rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH]; BYTE rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH]; CRYPT_DATA_BLOB PubInfo; } CRYPT_X942_OTHER_INFO, *PCRYPT_X942_OTHER_INFO; typedef struct _CRYPT_RC2_CBC_PARAMETERS { DWORD dwVersion; BOOL fIV; BYTE rgbIV[4]; } CRYPT_RC2_CBC_PARAMETERS, *PCRYPT_RC2_CBC_PARAMETERS; #define CRYPT_RC2_40BIT_VERSION 160 #define CRYPT_RC2_56BIT_VERSION 52 #define CRYPT_RC2_64BIT_VERSION 120 #define CRYPT_RC2_128BIT_VERSION 58 typedef struct _CRYPT_SMIME_CAPABILITY { LPSTR pszObjId; CRYPT_OBJID_BLOB Parameters; } CRYPT_SMIME_CAPABILITY, *PCRYPT_SMIME_CAPABILITY; typedef struct _CRYPT_SMIME_CAPABILITIES { DWORD cCapability; PCRYPT_SMIME_CAPABILITY rgCapability; } CRYPT_SMIME_CAPABILITIES, *PCRYPT_SMIME_CAPABILITIES; typedef struct _VTableProvStruc { DWORD Version; #ifdef WINE_STRICT_PROTOTYPES BOOL (WINAPI *FuncVerifyImage)(LPCSTR,BYTE*); void (WINAPI *FuncReturnhWnd)(HWND*); #else FARPROC FuncVerifyImage; FARPROC FuncReturnhWnd; #endif DWORD dwProvType; BYTE *pbContextInfo; DWORD cbContextInfo; LPSTR pszProvName; } VTableProvStruc, *PVTableProvStruc; typedef struct _CERT_PRIVATE_KEY_INFO { DWORD Version; CRYPT_ALGORITHM_IDENTIFIER Algorithm; CRYPT_DER_BLOB PrivateKey; PCRYPT_ATTRIBUTES pAttributes; } CERT_PRIVATE_KEY_INFO, *PCERT_PRIVATE_KEY_INFO; typedef struct _CTL_USAGE { DWORD cUsageIdentifier; LPSTR *rgpszUsageIdentifier; } CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE; typedef struct _CTL_ENTRY { CRYPT_DATA_BLOB SubjectIdentifier; DWORD cAttribute; PCRYPT_ATTRIBUTE rgAttribute; } CTL_ENTRY, *PCTL_ENTRY; typedef struct _CTL_INFO { DWORD dwVersion; CTL_USAGE SubjectUsage; CRYPT_DATA_BLOB ListIdentifier; CRYPT_INTEGER_BLOB SequenceNumber; FILETIME ThisUpdate; FILETIME NextUpdate; CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm; DWORD cCTLEntry; PCTL_ENTRY rgCTLEntry; DWORD cExtension; PCERT_EXTENSION rgExtension; } CTL_INFO, *PCTL_INFO; typedef struct _CTL_CONTEXT { DWORD dwMsgAndCertEncodingType; BYTE *pbCtlEncoded; DWORD cbCtlEncoded; PCTL_INFO pCtlInfo; HCERTSTORE hCertStore; HCRYPTMSG hCryptMsg; BYTE *pbCtlContext; DWORD cbCtlContext; } CTL_CONTEXT, *PCTL_CONTEXT; typedef const CTL_CONTEXT *PCCTL_CONTEXT; typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO { LPSTR pszTimeStampAlgorithm; LPSTR pszContentType; CRYPT_OBJID_BLOB Content; DWORD cAttribute; PCRYPT_ATTRIBUTE rgAttribute; } CRYPT_TIME_STAMP_REQUEST_INFO, *PCRYPT_TIME_STAMP_REQUEST_INFO; typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR { LPWSTR pwszName; LPWSTR pwszValue; } CRYPT_ENROLLMENT_NAME_VALUE_PAIR, *PCRYPT_ENROLLMENT_NAME_VALUE_PAIR; typedef struct _CMSG_SIGNER_INFO { DWORD dwVersion; CERT_NAME_BLOB Issuer; CRYPT_INTEGER_BLOB SerialNumber; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; CRYPT_DATA_BLOB EncryptedHash; CRYPT_ATTRIBUTES AuthAttrs; CRYPT_ATTRIBUTES UnauthAttrs; } CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO; #define CMSG_VERIFY_SIGNER_PUBKEY 1 #define CMSG_VERIFY_SIGNER_CERT 2 #define CMSG_VERIFY_SIGNER_CHAIN 3 #define CMSG_VERIFY_SIGNER_NULL 4 typedef struct _CERT_REVOCATION_CRL_INFO { DWORD cbSize; PCCRL_CONTEXT pBaseCrlContext; PCCRL_CONTEXT pDeltaCrlContext; PCRL_ENTRY pCrlEntry; BOOL fDeltaCrlEntry; } CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO; typedef struct _CERT_REVOCATION_INFO { DWORD cbSize; DWORD dwRevocationResult; LPCSTR pszRevocationOid; LPVOID pvOidSpecificInfo; BOOL fHasFreshnessTime; DWORD dwFreshnessTime; PCERT_REVOCATION_CRL_INFO pCrlInfo; } CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO; typedef struct _CERT_REVOCATION_PARA { DWORD cbSize; PCCERT_CONTEXT pIssuerCert; DWORD cCertStore; HCERTSTORE *rgCertStore; HCERTSTORE hCrlStore; LPFILETIME pftTimeToUse; #ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS DWORD dwUrlRetrievalTimeout; BOOL fCheckFreshnessTime; DWORD dwFreshnessTime; LPFILETIME pftCurrentTime; PCERT_REVOCATION_CRL_INFO pCrlInfo; #endif } CERT_REVOCATION_PARA, *PCERT_REVOCATION_PARA; #define CERT_CONTEXT_REVOCATION_TYPE 1 #define CERT_VERIFY_REV_CHAIN_FLAG 0x00000001 #define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION 0x00000002 #define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x00000004 typedef struct _CTL_VERIFY_USAGE_PARA { DWORD cbSize; CRYPT_DATA_BLOB ListIdentifier; DWORD cCtlStore; HCERTSTORE *rghCtlStore; DWORD cSignerStore; HCERTSTORE *rghSignerStore; } CTL_VERIFY_USAGE_PARA, *PCTL_VERIFY_USAGE_PARA; typedef struct _CTL_VERIFY_USAGE_STATUS { DWORD cbSize; DWORD dwError; DWORD dwFlags; PCCTL_CONTEXT *ppCtl; DWORD dwCtlEntryIndex; PCCERT_CONTEXT *ppSigner; DWORD dwSignerIndex; } CTL_VERIFY_USAGE_STATUS, *PCTL_VERIFY_USAGE_STATUS; #define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1 #define CERT_VERIFY_TRUSTED_SIGNERS_FLAG 0x2 #define CERT_VERIFY_NO_TIME_CHECK_FLAG 0x4 #define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG 0x8 #define CERT_VERIFY_UPDATED_CTL_FLAG 0x1 typedef struct _CERT_CHAIN { DWORD cCerts; PCERT_BLOB certs; CRYPT_KEY_PROV_INFO keyLocatorInfo; } CERT_CHAIN, *PCERT_CHAIN; typedef struct _CERT_REVOCATION_STATUS { DWORD cbSize; DWORD dwIndex; DWORD dwError; DWORD dwReason; BOOL fHasFreshnessTime; DWORD dwFreshnessTime; } CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS; typedef struct _CERT_TRUST_LIST_INFO { DWORD cbSize; PCTL_ENTRY pCtlEntry; PCCTL_CONTEXT pCtlContext; } CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO; #define CERT_TRUST_NO_ERROR 0x00000000 #define CERT_TRUST_IS_NOT_TIME_VALID 0x00000001 #define CERT_TRUST_IS_NOT_TIME_NESTED 0x00000002 #define CERT_TRUST_IS_REVOKED 0x00000004 #define CERT_TRUST_IS_NOT_SIGNATURE_VALID 0x00000008 #define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 0x00000010 #define CERT_TRUST_IS_UNTRUSTED_ROOT 0x00000020 #define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 0x00000040 #define CERT_TRUST_IS_CYCLIC 0x00000080 #define CERT_TRUST_INVALID_EXTENSION 0x00000100 #define CERT_TRUST_INVALID_POLICY_CONSTRAINTS 0x00000200 #define CERT_TRUST_INVALID_BASIC_CONSTRAINTS 0x00000400 #define CERT_TRUST_INVALID_NAME_CONSTRAINTS 0x00000800 #define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x00001000 #define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT 0x00002000 #define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x00004000 #define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT 0x00008000 #define CERT_TRUST_IS_OFFLINE_REVOCATION 0x01000000 #define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x02000000 #define CERT_TRUST_IS_EXPLICIT_DISTRUST 0x04000000 #define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT 0x08000000 #define CERT_TRUST_IS_PARTIAL_CHAIN 0x00010000 #define CERT_TRUST_CTL_IS_NOT_TIME_VALID 0x00020000 #define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 0x00040000 #define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 0x00080000 #define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 0x00000001 #define CERT_TRUST_HAS_KEY_MATCH_ISSUER 0x00000002 #define CERT_TRUST_HAS_NAME_MATCH_ISSUER 0x00000004 #define CERT_TRUST_IS_SELF_SIGNED 0x00000008 #define CERT_TRUST_HAS_PREFERRED_ISSUER 0x00000100 #define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY 0x00000200 #define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS 0x00000400 #define CERT_TRUST_IS_PEER_TRUSTED 0x00000800 #define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED 0x00001000 #define CERT_TRUST_IS_COMPLEX_CHAIN 0x00010000 typedef struct _CERT_TRUST_STATUS { DWORD dwErrorStatus; DWORD dwInfoStatus; } CERT_TRUST_STATUS, *PCERT_TRUST_STATUS; typedef struct _CERT_CHAIN_ELEMENT { DWORD cbSize; PCCERT_CONTEXT pCertContext; CERT_TRUST_STATUS TrustStatus; PCERT_REVOCATION_INFO pRevocationInfo; PCERT_ENHKEY_USAGE pIssuanceUsage; PCERT_ENHKEY_USAGE pApplicationUsage; LPCWSTR pwszExtendedErrorInfo; } CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT; typedef struct _CERT_SIMPLE_CHAIN { DWORD cbSize; CERT_TRUST_STATUS TrustStatus; DWORD cElement; PCERT_CHAIN_ELEMENT *rgpElement; PCERT_TRUST_LIST_INFO pTrustListInfo; BOOL fHasRevocationFreshnessTime; DWORD dwRevocationFreshnessTime; } CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN; typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT; typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT; struct _CERT_CHAIN_CONTEXT { DWORD cbSize; CERT_TRUST_STATUS TrustStatus; DWORD cChain; PCERT_SIMPLE_CHAIN *rgpChain; DWORD cLowerQualityChainContext; PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext; BOOL fHasRevocationFreshnessTime; DWORD dwRevocationFreshnessTime; }; typedef struct _CERT_CHAIN_POLICY_PARA { DWORD cbSize; DWORD dwFlags; void *pvExtraPolicyPara; } CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA; typedef struct _CERT_CHAIN_POLICY_STATUS { DWORD cbSize; DWORD dwError; LONG lChainIndex; LONG lElementIndex; void *pvExtraPolicyStatus; } CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS; #define CERT_CHAIN_POLICY_BASE ((LPCSTR)1) #define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR)2) #define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR)3) #define CERT_CHAIN_POLICY_SSL ((LPCSTR)4) #define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR)5) #define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR)6) #define CERT_CHAIN_POLICY_MICROSOFT_ROOT ((LPCSTR)7) #define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG 0x00000001 #define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG 0x00000002 #define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG 0x00000004 #define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x00000008 #define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS ( \ CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG \ CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG \ CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG ) #define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG 0x00000010 #define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG 0x00000020 #define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG 0x00000040 #define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG 0x00000080 #define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG 0x00000100 #define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG 0x00000200 #define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG 0x00000400 #define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG 0x00000800 #define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS ( \ CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG \ CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG \ CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG \ CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG ) #define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG 0x00001000 #define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x00002000 #define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG 0x00004000 #define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x00008000 #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000 typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA { DWORD cbSize; DWORD dwRegPolicySettings; PCMSG_SIGNER_INFO pSignerInfo; } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA, *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA; typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS { DWORD cbSize; BOOL fCommercial; } AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS, *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS; typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA { DWORD cbSize; DWORD dwRegPolicySettings; BOOL fCommercial; } AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA, *PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA; typedef struct _HTTPSPolicyCallbackData { union { DWORD cbStruct; DWORD cbSize; } DUMMYUNIONNAME; DWORD dwAuthType; DWORD fdwChecks; WCHAR *pwszServerName; } HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData, SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA; /* Values for HTTPSPolicyCallbackData's dwAuthType */ #define AUTHTYPE_CLIENT 1 #define AUTHTYPE_SERVER 2 /* Values for HTTPSPolicyCallbackData's fdwChecks are defined in wininet.h */ #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG 0x80000000 #define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000 #define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000 #define USAGE_MATCH_TYPE_AND 0x00000000 #define USAGE_MATCH_TYPE_OR 0x00000001 typedef struct _CERT_USAGE_MATCH { DWORD dwType; CERT_ENHKEY_USAGE Usage; } CERT_USAGE_MATCH, *PCERT_USAGE_MATCH; typedef struct _CTL_USAGE_MATCH { DWORD dwType; CTL_USAGE Usage; } CTL_USAGE_MATCH, *PCTL_USAGE_MATCH; #define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000 #define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000 #define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000 #define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000 #define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x08000000 #define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x00000040 #define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x00000080 #define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x00000100 #define CERT_CHAIN_TIMESTAMP_TIME 0x00000200 typedef struct _CERT_CHAIN_PARA { DWORD cbSize; CERT_USAGE_MATCH RequestedUsage; #ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS CERT_USAGE_MATCH RequestedIssuancePolicy; DWORD dwUrlRetrievalTimeout; BOOL fCheckRevocationFreshnessTime; DWORD dwRevocationFreshnessTime; LPFILETIME pftCacheResync; #endif } CERT_CHAIN_PARA, *PCERT_CHAIN_PARA; typedef struct _CERT_SYSTEM_STORE_INFO { DWORD cbSize; } CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO; typedef struct _CERT_PHYSICAL_STORE_INFO { DWORD cbSize; LPSTR pszOpenStoreProvider; DWORD dwOpenEncodingType; DWORD dwOpenFlags; CRYPT_DATA_BLOB OpenParameters; DWORD dwFlags; DWORD dwPriority; } CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO; typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA { union { HKEY hKeyBase; VOID *pvBase; } DUMMYUNIONNAME; union { void *pvSystemStore; LPCSTR pszSystemStore; LPCWSTR pwszSystemStore; } DUMMYUNIONNAME2; } CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA; typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)( LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg); typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore, DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved, void *pvArg); typedef BOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved, void *pvArg); /* Encode/decode object */ typedef LPVOID (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize); typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv); typedef struct _CRYPT_ENCODE_PARA { DWORD cbSize; PFN_CRYPT_ALLOC pfnAlloc; PFN_CRYPT_FREE pfnFree; } CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA; typedef struct _CRYPT_DECODE_PARA { DWORD cbSize; PFN_CRYPT_ALLOC pfnAlloc; PFN_CRYPT_FREE pfnFree; } CRYPT_DECODE_PARA, *PCRYPT_DECODE_PARA; typedef struct _CERT_STORE_PROV_INFO { DWORD cbSize; DWORD cStoreProvFunc; void **rgpvStoreProvFunc; HCERTSTOREPROV hStoreProv; DWORD dwStoreProvFlags; HCRYPTOIDFUNCADDR hStoreProvFuncAddr2; } CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO; typedef BOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)( LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore, PCERT_STORE_PROV_INFO pStoreProvInfo); typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags, PCCERT_CONTEXT *ppProvCertContext); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)( HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)( HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags, PCCRL_CONTEXT *ppProvCrlContext); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)( HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags, PCCTL_CONTEXT *ppProvCtlContext); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)( HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)( HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId, DWORD dwFlags, const void *pvData); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara); typedef struct _CERT_STORE_PROV_FIND_INFO { DWORD cbSize; DWORD dwMsgAndCertEncodingType; DWORD dwFindFlags; DWORD dwFindType; const void *pvFindPara; } CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO; typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO, *PCCERT_STORE_PROV_FIND_INFO; typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv, PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext, DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)( HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, void *pvStoreProvFindInfo, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)( HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, void *pvData, DWORD *pcbData); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv, PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext, DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)( HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, void *pvStoreProvFindInfo, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)( HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId, DWORD dwFlags, void *pvData, DWORD *pcbData); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags); typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)( HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId, DWORD dwFlags, void *pvData); typedef struct _CERT_CREATE_CONTEXT_PARA { DWORD cbSize; PFN_CRYPT_FREE pfnFree; void *pvFree; } CERT_CREATE_CONTEXT_PARA, *PCERT_CREATE_CONTEXT_PARA; typedef struct _CRYPT_OID_FUNC_ENTRY { LPCSTR pszOID; void *pvFuncAddr; } CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY; typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[], LPCWSTR const rgpwszValueName[], const BYTE * const rgpbValueData[], const DWORD rgcbValueData[], void *pvArg); #define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff #define CALG_OID_INFO_CNG_ONLY 0xffffffff #define CALG_OID_INFO_PARAMETERS 0xfffffffe #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} #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} #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} #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} #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} #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} #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} typedef struct _CRYPT_OID_INFO { DWORD cbSize; LPCSTR pszOID; LPCWSTR pwszName; DWORD dwGroupId; union { DWORD dwValue; ALG_ID Algid; DWORD dwLength; } DUMMYUNIONNAME; CRYPT_DATA_BLOB ExtraInfo; #ifdef CRYPT_OID_INFO_HAS_EXTRA_FIELDS LPCWSTR pwszCNGAlgid; LPCWSTR pwszCNGExtraAlgid; #endif } CRYPT_OID_INFO, *PCRYPT_OID_INFO; typedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO; typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo, void *pvArg); typedef struct _CRYPT_SIGN_MESSAGE_PARA { DWORD cbSize; DWORD dwMsgEncodingType; PCCERT_CONTEXT pSigningCert; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; void * pvHashAuxInfo; DWORD cMsgCert; PCCERT_CONTEXT *rgpMsgCert; DWORD cMsgCrl; PCCRL_CONTEXT *rgpMsgCrl; DWORD cAuthAttr; PCRYPT_ATTRIBUTE rgAuthAttr; DWORD cUnauthAttr; PCRYPT_ATTRIBUTE rgUnauthAttr; DWORD dwFlags; DWORD dwInnerContentType; #ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; void * pvHashEncryptionAuxInfo; #endif } CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA; #define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG 0x00000001 #define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x00000002 #define CRYPT_MESSAGE_KEYID_SIGNER_FLAG 0x00000004 #define CRYPT_MESSAGE_SILENT_KEYSET_FLAG 0x00000008 typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvArg, DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore); typedef struct _CRYPT_VERIFY_MESSAGE_PARA { DWORD cbSize; DWORD dwMsgAndCertEncodingType; HCRYPTPROV_LEGACY hCryptProv; PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate; void * pvGetArg; } CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA; typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA { DWORD cbSize; DWORD dwMsgEncodingType; HCRYPTPROV_LEGACY hCryptProv; CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; void * pvEncryptionAuxInfo; DWORD dwFlags; DWORD dwInnerContentType; } CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA; #define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x00000004 typedef struct _CRYPT_DECRYPT_MESSAGE_PARA { DWORD cbSize; DWORD dwMsgAndCertEncodingType; DWORD cCertStore; HCERTSTORE *rghCertStore; #ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS DWORD dwFlags; #endif } CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA; typedef struct _CRYPT_HASH_MESSAGE_PARA { DWORD cbSize; DWORD dwMsgEncodingType; HCRYPTPROV_LEGACY hCryptProv; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; void * pvHashAuxInfo; } CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA; typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA { DWORD cbSize; DWORD dwMsgAndCertEncodingType; HCRYPTPROV hCryptProv; DWORD dwKeySpec; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; void * pvHashAuxInfo; } CRYPT_KEY_SIGN_MESSAGE_PARA, *PCRYPT_KEY_SIGN_MESSAGE_PARA; typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA { DWORD cbSize; DWORD dwMsgEncodingType; HCRYPTPROV_LEGACY hCryptProv; } CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA; typedef struct _CRYPT_URL_ARRAY { DWORD cUrl; LPWSTR *rgwszUrl; } CRYPT_URL_ARRAY, *PCRYPT_URL_ARRAY; typedef struct _CRYPT_URL_INFO { DWORD cbSize; DWORD dwSyncDeltaTime; DWORD cGroup; DWORD *rgcGroupEntry; } CRYPT_URL_INFO, *PCRYPT_URL_INFO; #define URL_OID_CERTIFICATE_ISSUER ((LPCSTR)1) #define URL_OID_CERTIFICATE_CRL_DIST_POINT ((LPCSTR)2) #define URL_OID_CTL_ISSUER ((LPCSTR)3) #define URL_OID_CTL_NEXT_UPDATE ((LPCSTR)4) #define URL_OID_CRL_ISSUER ((LPCSTR)5) #define URL_OID_CERTIFICATE_FRESHEST_CRL ((LPCSTR)6) #define URL_OID_CRL_FRESHEST_CRL ((LPCSTR)7) #define URL_OID_CROSS_CERT_DIST_POINT ((LPCSTR)8) #define URL_OID_CERTIFICATE_OCSP ((LPCSTR)9) #define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR)10) #define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR)11) #define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS ((LPCSTR)12) #define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl" typedef HANDLE HCRYPTASYNC, *PHCRYPTASYNC; typedef void (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid, LPVOID pvParam); #define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1) #define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL ((LPCSTR)2) typedef void (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)( void *pvCompletion, DWORD dwCompletionCode, LPCSTR pszURL, LPSTR pszObjectOid, void *pvObject); typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION { PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion; void *pvCompletion; } CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION; typedef BOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)( HCRYPTASYNC hAsyncRetrieve); typedef struct _CRYPT_BLOB_ARRAY { DWORD cBlob; PCRYPT_DATA_BLOB rgBlob; } CRYPT_BLOB_ARRAY, *PCRYPT_BLOB_ARRAY; typedef struct _CRYPT_CREDENTIALS { DWORD cbSize; LPCSTR pszCredentialsOid; LPVOID pvCredentials; } CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS; #define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1) #define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2) #define CREDENTIAL_OID_PASSWORD_CREDENTIALS \ WINELIB_NAME_AW(CREDENTIAL_OID_PASSWORD_CREDENTIALS_) typedef struct _CRYPT_PASSWORD_CREDENTIALSA { DWORD cbSize; LPSTR pszUsername; LPSTR pszPassword; } CRYPT_PASSWORD_CREDENTIALSA, *PCRYPT_PASSWORD_CREDENTIALSA; typedef struct _CRYPT_PASSWORD_CREDENTIALSW { DWORD cbSize; LPWSTR pszUsername; LPWSTR pszPassword; } CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW; #define CRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(CRYPT_PASSWORD_CREDENTIALS) #define PCRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS) typedef struct _CRYPT_RETRIEVE_AUX_INFO { DWORD cbSize; FILETIME *pLastSyncTime; DWORD dwMaxUrlRetrievalByteCount; } CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO; typedef void (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid, PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext); #define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC \ "SchemeDllRetrieveEncodedObject" #define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC \ "SchemeDllRetrieveEncodedObjectW" /* The signature of SchemeDllRetrieveEncodedObjectW is: BOOL WINAPI SchemeDllRetrieveEncodedObjectW(LPCWSTR pwszUrl, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject, void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo); */ #define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext" /* The signature of ContextDllCreateObjectContext is: BOOL WINAPI ContextDllCreateObjectContext(LPCSTR pszObjectOid, DWORD dwRetrievalFlags, PCRYPT_BLOB_ARRAY pObject, void **ppvContxt); */ #define CONTEXT_OID_CERTIFICATE ((LPCSTR)1) #define CONTEXT_OID_CRL ((LPCSTR)2) #define CONTEXT_OID_CTL ((LPCSTR)3) #define CONTEXT_OID_PKCS7 ((LPCSTR)4) #define CONTEXT_OID_CAPI2_ANY ((LPCSTR)5) #define CRYPT_RETRIEVE_MULTIPLE_OBJECTS 0x00000001 #define CRYPT_CACHE_ONLY_RETRIEVAL 0x00000002 #define CRYPT_WIRE_ONLY_RETRIEVAL 0x00000004 #define CRYPT_DONT_CACHE_RESULT 0x00000008 #define CRYPT_ASYNC_RETRIEVAL 0x00000010 #define CRYPT_STICKY_CACHE_RETRIEVAL 0x00001000 #define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x00002000 #define CRYPT_OFFLINE_CHECK_RETRIEVAL 0x00004000 #define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE 0x00008000 #define CRYPT_LDAP_SIGN_RETRIEVAL 0x00010000 #define CRYPT_NO_AUTH_RETRIEVAL 0x00020000 #define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL 0x00040000 #define CRYPT_AIA_RETRIEVAL 0x00080000 #define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x00000020 #define CRYPT_VERIFY_DATA_HASH 0x00000040 #define CRYPT_KEEP_TIME_VALID 0x00000080 #define CRYPT_DONT_VERIFY_SIGNATURE 0x00000100 #define CRYPT_DONT_CHECK_TIME_VALIDITY 0x00000200 #define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x00000400 #define CRYPT_ACCUMULATIVE_TIMEOUT 0x00000800 typedef BOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags, void *pvArg); typedef struct _CERT_CRL_CONTEXT_PAIR { PCCERT_CONTEXT pCertContext; PCCRL_CONTEXT pCrlContext; } CERT_CRL_CONTEXT_PAIR, *PCERT_CRL_CONTEXT_PAIR; typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR; #define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject" #define TIME_VALID_OID_GET_CTL ((LPCSTR)1) #define TIME_VALID_OID_GET_CRL ((LPCSTR)2) #define TIME_VALID_OID_GET_CRL_FROM_CERT ((LPCSTR)3) #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4) #define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL ((LPCSTR)5) #define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject" #define TIME_VALID_OID_FLUSH_CTL ((LPCSTR)1) #define TIME_VALID_OID_FLUSH_CRL ((LPCSTR)2) #define TIME_VALID_OID_FLUSH_CRL_FROM_CERT ((LPCSTR)3) #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4) #define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL ((LPCSTR)5) /* OID group IDs */ #define CRYPT_HASH_ALG_OID_GROUP_ID 1 #define CRYPT_ENCRYPT_ALG_OID_GROUP_ID 2 #define CRYPT_PUBKEY_ALG_OID_GROUP_ID 3 #define CRYPT_SIGN_ALG_OID_GROUP_ID 4 #define CRYPT_RDN_ATTR_OID_GROUP_ID 5 #define CRYPT_EXT_OR_ATTR_OID_GROUP_ID 6 #define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7 #define CRYPT_POLICY_OID_GROUP_ID 8 #define CRYPT_TEMPLATE_OID_GROUP_ID 9 #define CRYPT_LAST_OID_GROUP_ID 9 #define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID #define CRYPT_LAST_ALG_OID_GROUP_ID CRYPT_SIGN_ALG_OID_GROUP_ID #define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG 0x1 #define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2 #define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG 0x4 #define CRYPT_OID_INFO_OID_KEY 1 #define CRYPT_OID_INFO_NAME_KEY 2 #define CRYPT_OID_INFO_ALGID_KEY 3 #define CRYPT_OID_INFO_SIGN_KEY 4 /* Algorithm IDs */ #define GET_ALG_CLASS(x) (x & (7 << 13)) #define GET_ALG_TYPE(x) (x & (15 << 9)) #define GET_ALG_SID(x) (x & (511)) /* Algorithm Classes */ #define ALG_CLASS_ANY (0) #define ALG_CLASS_SIGNATURE (1 << 13) #define ALG_CLASS_MSG_ENCRYPT (2 << 13) #define ALG_CLASS_DATA_ENCRYPT (3 << 13) #define ALG_CLASS_HASH (4 << 13) #define ALG_CLASS_KEY_EXCHANGE (5 << 13) #define ALG_CLASS_ALL (7 << 13) /* Algorithm types */ #define ALG_TYPE_ANY (0) #define ALG_TYPE_DSS (1 << 9) #define ALG_TYPE_RSA (2 << 9) #define ALG_TYPE_BLOCK (3 << 9) #define ALG_TYPE_STREAM (4 << 9) #define ALG_TYPE_DH (5 << 9) #define ALG_TYPE_SECURECHANNEL (6 << 9) #define ALG_TYPE_ECDH (7 << 9) /* SIDs */ #define ALG_SID_ANY (0) /* RSA SIDs */ #define ALG_SID_RSA_ANY 0 #define ALG_SID_RSA_PKCS 1 #define ALG_SID_RSA_MSATWORK 2 #define ALG_SID_RSA_ENTRUST 3 #define ALG_SID_RSA_PGP 4 /* DSS SIDs */ #define ALG_SID_DSS_ANY 0 #define ALG_SID_DSS_PKCS 1 #define ALG_SID_DSS_DMS 2 #define ALG_SID_ECDSA 3 /* DES SIDs */ #define ALG_SID_DES 1 #define ALG_SID_3DES 3 #define ALG_SID_DESX 4 #define ALG_SID_IDEA 5 #define ALG_SID_CAST 6 #define ALG_SID_SAFERSK64 7 #define ALG_SID_SAFERSK128 8 #define ALG_SID_3DES_112 9 #define ALG_SID_CYLINK_MEK 12 #define ALG_SID_RC5 13 #define ALG_SID_AES_128 14 #define ALG_SID_AES_192 15 #define ALG_SID_AES_256 16 #define ALG_SID_AES 17 /* Fortezza */ #define ALG_SID_SKIPJACK 10 #define ALG_SID_TEK 11 /* Diffie-Hellmans SIDs */ #define ALG_SID_DH_SANDF 1 #define ALG_SID_DH_EPHEM 2 #define ALG_SID_AGREED_KEY_ANY 3 #define ALG_SID_KEA 4 #define ALG_SID_ECDH 5 #define ALG_SID_ECDH_EPHEM 6 /* RC2 SIDs */ #define ALG_SID_RC4 1 #define ALG_SID_RC2 2 #define ALG_SID_SEAL 2 /* Hash SIDs */ #define ALG_SID_MD2 1 #define ALG_SID_MD4 2 #define ALG_SID_MD5 3 #define ALG_SID_SHA 4 #define ALG_SID_SHA1 ALG_SID_SHA #define ALG_SID_MAC 5 #define ALG_SID_RIPEMD 6 #define ALG_SID_RIPEMD160 7 #define ALG_SID_SSL3SHAMD5 8 #define ALG_SID_HMAC 9 #define ALG_SID_TLS1PRF 10 #define ALG_SID_HASH_REPLACE_OWF 11 #define ALG_SID_SHA_256 12 #define ALG_SID_SHA_384 13 #define ALG_SID_SHA_512 14 /* SCHANNEL SIDs */ #define ALG_SID_SSL3_MASTER 1 #define ALG_SID_SCHANNEL_MASTER_HASH 2 #define ALG_SID_SCHANNEL_MAC_KEY 3 #define ALG_SID_PCT1_MASTER 4 #define ALG_SID_SSL2_MASTER 5 #define ALG_SID_TLS1_MASTER 6 #define ALG_SID_SCHANNEL_ENC_KEY 7 #define ALG_SID_EXAMPLE 80 #define ALG_SID_ECMQV 1 /* Algorithm Definitions */ #define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2) #define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4) #define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5) #define CALG_SHA (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA) #define CALG_SHA1 CALG_SHA #define CALG_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC) #define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5) #define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC) #define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF) #define CALG_HASH_REPLACE_OWF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF) #define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256) #define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384) #define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512) #define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY) #define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY) #define CALG_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY) #define CALG_ECDSA (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA) #define CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_SANDF) #define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EPHEM) #define CALG_AGREEDKEY_ANY (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_AGREED_KEY_ANY) #define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_KEA) #define CALG_HUGHES_MD5 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_MD5) #define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH) #define CALG_ECDH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH | ALG_SID_ECDH_EPHEM) #define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY) #define CALG_ECMQV (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV) #define CALG_DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES) #define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2) #define CALG_3DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES) #define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112) #define CALG_DESX (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX) #define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128) #define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192) #define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256) #define CALG_AES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES) #define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4) #define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL) #define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC5) #define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SKIPJACK) #define CALG_TEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_TEK) #define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_CYLINK_MEK) #define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER) #define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH) #define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY) #define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY) #define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER) #define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER) #define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER) /* Protocol Flags */ #define CRYPT_FLAG_PCT1 0x0001 #define CRYPT_FLAG_SSL2 0x0002 #define CRYPT_FLAG_SSL3 0x0004 #define CRYPT_FLAG_TLS1 0x0008 #define CRYPT_FLAG_IPSEC 0x0010 #define CRYPT_FLAG_SIGNING 0x0020 /* Provider names */ #define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0" #if defined(__GNUC__) # define MS_DEF_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \ 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 } #elif defined(_MSC_VER) # define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0" #else static const WCHAR MS_DEF_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }; #endif #define MS_DEF_PROV WINELIB_NAME_AW(MS_DEF_PROV_) #define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0" #if defined(__GNUC__) # define MS_ENHANCED_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \ 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 } #elif defined(_MSC_VER) # define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0" #else static const WCHAR MS_ENHANCED_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }; #endif #define MS_ENHANCED_PROV WINELIB_NAME_AW(MS_ENHANCED_PROV_) #define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider" #if defined(__GNUC__) # define MS_STRONG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \ 'P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider" #else static const WCHAR MS_STRONG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', 'P','r','o','v','i','d','e','r',0 }; #endif #define MS_STRONG_PROV WINELIB_NAME_AW(MS_STRONG_PROV_) #define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider" #if defined(__GNUC__) # define MS_DEF_RSA_SIG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', \ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider" #else static const WCHAR MS_DEF_RSA_SIG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; #endif #define MS_DEF_RSA_SIG_PROV WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_) #define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider" #if defined(__GNUC__) # define MS_DEF_RSA_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'R','S','A',' ','S','C','h','a','n','n','e','l',' ', \ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider" #else static const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'R','S','A',' ','S','C','h','a','n','n','e','l',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; #endif #define MS_DEF_RSA_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_) #define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider" #if defined(__GNUC__) # define MS_DEF_DSS_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'B','a','s','e',' ','D','S','S',' ', \ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider" #else static const WCHAR MS_DEF_DSS_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'B','a','s','e',' ','D','S','S',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; #endif #define MS_DEF_DSS_PROV WINELIB_NAME_AW(MS_DEF_DSS_PROV_) #define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider" #if defined(__GNUC__) # define MS_DEF_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', \ 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider" #else static const WCHAR MS_DEF_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; #endif #define MS_DEF_DSS_DH_PROV WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_) #define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider" #if defined(__GNUC__) # define MS_ENH_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', \ 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider" #else static const WCHAR MS_ENH_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; #endif #define MS_ENH_DSS_DH_PROV WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_) #define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider" #if defined(__GNUC__) # define MS_DEF_DH_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'D','H',' ','S','C','h','a','n','n','e','l',' ', \ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider" #else static const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'D','H',' ','S','C','h','a','n','n','e','l',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; #endif #define MS_DEF_DH_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_) #define MS_SCARD_PROV_A "Microsoft Base Smart Card Cryptographic Provider" #if defined(__GNUC__) # define MS_SCARD_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', \ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_SCARD_PROV_W L"Microsoft Base Smart Card Cryptographic Provider" #else static const WCHAR MS_SCARD_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; #endif #define MS_SCARD_PROV WINELIB_NAME_AW(MS_SCARD_PROV_) #define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider" #if defined(__GNUC__) # define MS_ENH_RSA_AES_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 } #elif defined(_MSC_VER) # define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider" #else static const WCHAR MS_ENH_RSA_AES_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; #endif #define MS_ENH_RSA_AES_PROV WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_) #define MS_ENH_RSA_AES_PROV_XP_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)" #if defined(__GNUC__) # define MS_ENH_RSA_AES_PROV_XP_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \ 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ',\ '(','P','r','o','t','o','t','y','p','e',')',0 } #elif defined(_MSC_VER) # define MS_ENH_RSA_AES_PROV_XP_W L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)" #else static const WCHAR MS_ENH_RSA_AES_PROV_XP_W[] = { 'M','i','c','r','o','s','o','f','t',' ', 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ', 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ', '(','P','r','o','t','o','t','y','p','e',')',0 }; #endif #define MS_ENH_RSA_AES_PROV_XP WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_XP_) /* Key Specs*/ #define AT_KEYEXCHANGE 1 #define AT_SIGNATURE 2 /* Provider Types */ #define PROV_RSA_FULL 1 #define PROV_RSA_SIG 2 #define PROV_DSS 3 #define PROV_FORTEZZA 4 #define PROV_MS_EXCHANGE 5 #define PROV_SSL 6 #define PROV_RSA_SCHANNEL 12 #define PROV_DSS_DH 13 #define PROV_EC_ECDSA_SIG 14 #define PROV_EC_ECNRA_SIG 15 #define PROV_EC_ECDSA_FULL 16 #define PROV_EC_ECNRA_FULL 17 #define PROV_DH_SCHANNEL 18 #define PROV_SPYRUS_LYNKS 20 #define PROV_RNG 21 #define PROV_INTEL_SEC 22 #define PROV_REPLACE_OWF 23 #define PROV_RSA_AES 24 /* FLAGS Section */ #define CRYPT_FIRST 1 #define CRYPT_NEXT 2 #define CRYPT_IMPL_HARDWARE 1 #define CRYPT_IMPL_SOFTWARE 2 #define CRYPT_IMPL_MIXED 3 #define CRYPT_IMPL_UNKNOWN 4 /* CryptAcquireContext */ #define CRYPT_VERIFYCONTEXT 0xF0000000 #define CRYPT_NEWKEYSET 0x00000008 #define CRYPT_DELETEKEYSET 0x00000010 #define CRYPT_MACHINE_KEYSET 0x00000020 #define CRYPT_SILENT 0x00000040 /* Crypt{Get|Set}Provider */ #define CRYPT_MACHINE_DEFAULT 0x00000001 #define CRYPT_USER_DEFAULT 0x00000002 #define CRYPT_DELETE_DEFAULT 0x00000004 /* Crypt{Get/Set}ProvParam */ #define PP_CLIENT_HWND 1 #define PP_ENUMALGS 1 #define PP_ENUMCONTAINERS 2 #define PP_IMPTYPE 3 #define PP_NAME 4 #define PP_VERSION 5 #define PP_CONTAINER 6 #define PP_CHANGE_PASSWORD 7 #define PP_KEYSET_SEC_DESCR 8 #define PP_KEY_TYPE_SUBTYPE 10 #define PP_CONTEXT_INFO 11 #define PP_KEYEXCHANGE_KEYSIZE 12 #define PP_SIGNATURE_KEYSIZE 13 #define PP_KEYEXCHANGE_ALG 14 #define PP_SIGNATURE_ALG 15 #define PP_PROVTYPE 16 #define PP_KEYSTORAGE 17 #define PP_SYM_KEYSIZE 19 #define PP_SESSION_KEYSIZE 20 #define PP_UI_PROMPT 21 #define PP_ENUMALGS_EX 22 #define PP_DELETEKEY 24 #define PP_ENUMMANDROOTS 25 #define PP_ENUMELECTROOTS 26 #define PP_KEYSET_TYPE 27 #define PP_ADMIN_PIN 31 #define PP_KEYEXCHANGE_PIN 32 #define PP_SIGNATURE_PIN 33 #define PP_SIG_KEYSIZE_INC 34 #define PP_KEYX_KEYSIZE_INC 35 #define PP_UNIQUE_CONTAINER 36 #define PP_SGC_INFO 37 #define PP_USE_HARDWARE_RNG 38 #define PP_KEYSPEC 39 #define PP_ENUMEX_SIGNING_PROT 40 #define PP_CRYPT_COUNT_KEY_USE 41 #define PP_USER_CERTSTORE 42 #define PP_SMARTCARD_READER 43 #define PP_SMARTCARD_GUID 45 #define PP_ROOT_CERTSTORE 46 /* Values returned by CryptGetProvParam of PP_KEYSTORAGE */ #define CRYPT_SEC_DESCR 0x00000001 #define CRYPT_PSTORE 0x00000002 #define CRYPT_UI_PROMPT 0x00000004 /* Crypt{Get/Set}KeyParam */ #define KP_IV 1 #define KP_SALT 2 #define KP_PADDING 3 #define KP_MODE 4 #define KP_MODE_BITS 5 #define KP_PERMISSIONS 6 #define KP_ALGID 7 #define KP_BLOCKLEN 8 #define KP_KEYLEN 9 #define KP_SALT_EX 10 #define KP_P 11 #define KP_G 12 #define KP_Q 13 #define KP_X 14 #define KP_Y 15 #define KP_RA 16 #define KP_RB 17 #define KP_INFO 18 #define KP_EFFECTIVE_KEYLEN 19 #define KP_SCHANNEL_ALG 20 #define KP_CLIENT_RANDOM 21 #define KP_SERVER_RANDOM 22 #define KP_RP 23 #define KP_PRECOMP_MD5 24 #define KP_PRECOMP_SHA 25 #define KP_CERTIFICATE 26 #define KP_CLEAR_KEY 27 #define KP_PUB_EX_LEN 28 #define KP_PUB_EX_VAL 29 #define KP_KEYVAL 30 #define KP_ADMIN_PIN 31 #define KP_KEYEXCHANGE_PIN 32 #define KP_SIGNATURE_PIN 33 #define KP_PREHASH 34 #define KP_ROUNDS 35 #define KP_OAEP_PARAMS 36 #define KP_CMS_KEY_INFO 37 #define KP_CMS_DH_KEY_INFO 38 #define KP_PUB_PARAMS 39 #define KP_VERIFY_PARAMS 40 #define KP_HIGHEST_VERSION 41 #define KP_GET_USE_COUNT 42 /* Values for KP_PADDING */ #define PKCS5_PADDING 1 #define RANDOM_PADDING 2 #define ZERO_PADDING 3 /* CryptSignHash/CryptVerifySignature */ #define CRYPT_NOHASHOID 0x00000001 #define CRYPT_TYPE2_FORMAT 0x00000002 #define CRYPT_X931_FORMAT 0x00000004 /* Crypt{Get,Set}HashParam */ #define HP_ALGID 0x0001 #define HP_HASHVAL 0x0002 #define HP_HASHSIZE 0x0004 #define HP_HMAC_INFO 0x0005 #define HP_TLS1PRF_LABEL 0x0006 #define HP_TLS1PRF_SEED 0x0007 /* Crypt{Get,Set}KeyParam */ #define CRYPT_MODE_CBC 1 #define CRYPT_MODE_ECB 2 #define CRYPT_MODE_OFB 3 #define CRYPT_MODE_CFB 4 #define CRYPT_ENCRYPT 0x0001 #define CRYPT_DECRYPT 0x0002 #define CRYPT_EXPORT 0x0004 #define CRYPT_READ 0x0008 #define CRYPT_WRITE 0x0010 #define CRYPT_MAC 0x0020 #define CRYPT_EXPORT_KEY 0x0040 #define CRYPT_IMPORT_KEY 0x0080 #define CRYPT_ARCHIVE 0x0100 /* Crypt*Key */ #define CRYPT_EXPORTABLE 0x00000001 #define CRYPT_USER_PROTECTED 0x00000002 #define CRYPT_CREATE_SALT 0x00000004 #define CRYPT_UPDATE_KEY 0x00000008 #define CRYPT_NO_SALT 0x00000010 #define CRYPT_PREGEN 0x00000040 #define CRYPT_SERVER 0x00000400 #define CRYPT_ARCHIVABLE 0x00004000 /* CryptExportKey */ #define CRYPT_SSL2_FALLBACK 0x00000002 #define CRYPT_DESTROYKEY 0x00000004 #define CRYPT_OAEP 0x00000040 /* CryptHashSessionKey */ #define CRYPT_LITTLE_ENDIAN 0x00000001 /* Crypt{Protect,Unprotect}Data PROMPTSTRUCT flags */ #define CRYPTPROTECT_PROMPT_ON_PROTECT 0x0001 #define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x0002 /* Crypt{Protect,Unprotect}Data flags */ #define CRYPTPROTECT_UI_FORBIDDEN 0x0001 #define CRYPTPROTECT_LOCAL_MACHINE 0x0004 #define CRYPTPROTECT_AUDIT 0x0010 #define CRYPTPROTECT_VERIFY_PROTECTION 0x0040 /* Crypt{Protect,Unprotect}Memory */ #define CRYPTPROTECTMEMORY_BLOCK_SIZE 16 #define CRYPTPROTECTMEMORY_SAME_PROCESS 0x0000 #define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x0001 #define CRYPTPROTECTMEMORY_SAME_LOGON 0x0002 /* Blob Types */ #define SIMPLEBLOB 0x1 #define PUBLICKEYBLOB 0x6 #define PRIVATEKEYBLOB 0x7 #define PLAINTEXTKEYBLOB 0x8 #define OPAQUEKEYBLOB 0x9 #define PUBLICKEYBLOBEX 0xA #define SYMMETRICWRAPKEYBLOB 0xB #define CUR_BLOB_VERSION 2 /* cert store provider types */ #define CERT_STORE_PROV_MSG ((LPCSTR)1) #define CERT_STORE_PROV_MEMORY ((LPCSTR)2) #define CERT_STORE_PROV_FILE ((LPCSTR)3) #define CERT_STORE_PROV_REG ((LPCSTR)4) #define CERT_STORE_PROV_PKCS7 ((LPCSTR)5) #define CERT_STORE_PROV_SERIALIZED ((LPCSTR)6) #define CERT_STORE_PROV_FILENAME_A ((LPCSTR)7) #define CERT_STORE_PROV_FILENAME_W ((LPCSTR)8) #define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)9) #define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)10) #define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W #define CERT_STORE_PROV_COLLECTION ((LPCSTR)11) #define CERT_STORE_PROV_SYSTEM_REGISTRY_A ((LPCSTR)12) #define CERT_STORE_PROV_SYSTEM_REGISTRY_W ((LPCSTR)13) #define CERT_STORE_PROV_SYSTEM_REGISTRY CERT_STORE_PROV_SYSTEM_REGISTRY_W #define CERT_STORE_PROV_PHYSICAL_W ((LPCSTR)14) #define CERT_STORE_PROV_PHYSICAL CERT_STORE_PROV_PHYSICAL_W #define CERT_STORE_PROV_SMART_CARD_W ((LPCSTR)15) #define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W #define CERT_STORE_PROV_LDAP_W ((LPCSTR)16) #define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W #define sz_CERT_STORE_PROV_MEMORY "Memory" #define sz_CERT_STORE_PROV_FILENAME_W "File" #define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W #define sz_CERT_STORE_PROV_SYSTEM_W "System" #define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W #define sz_CERT_STORE_PROV_PKCS7 "PKCS7" #define sz_CERT_STORE_PROV_SERIALIZED "Serialized" #define sz_CERT_STORE_PROV_COLLECTION "Collection" #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry" #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W #define sz_CERT_STORE_PROV_PHYSICAL_W "Physical" #define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W #define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard" #define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W #define sz_CERT_STORE_PROV_LDAP_W "Ldap" #define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W /* types for CertOpenStore dwEncodingType */ #define CERT_ENCODING_TYPE_MASK 0x0000ffff #define CMSG_ENCODING_TYPE_MASK 0xffff0000 #define GET_CERT_ENCODING_TYPE(x) ((x) & CERT_ENCODING_TYPE_MASK) #define GET_CMSG_ENCODING_TYPE(x) ((x) & CMSG_ENCODING_TYPE_MASK) #define CRYPT_ASN_ENCODING 0x00000001 #define CRYPT_NDR_ENCODING 0x00000002 #define X509_ASN_ENCODING 0x00000001 #define X509_NDR_ENCODING 0x00000002 #define PKCS_7_ASN_ENCODING 0x00010000 #define PKCS_7_NDR_ENCODING 0x00020000 /* system store locations */ #define CERT_SYSTEM_STORE_LOCATION_MASK 0x00ff0000 #define CERT_SYSTEM_STORE_LOCATION_SHIFT 16 /* system store location ids */ /* hkcu */ #define CERT_SYSTEM_STORE_CURRENT_USER_ID 1 /* hklm */ #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 2 /* hklm\Software\Microsoft\Cryptography\Services */ #define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 4 #define CERT_SYSTEM_STORE_SERVICES_ID 5 /* HKEY_USERS */ #define CERT_SYSTEM_STORE_USERS_ID 6 /* hkcu\Software\Policies\Microsoft\SystemCertificates */ #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 7 /* hklm\Software\Policies\Microsoft\SystemCertificates */ #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8 /* hklm\Software\Microsoft\EnterpriseCertificates */ #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 9 /* system store location values */ #define CERT_SYSTEM_STORE_CURRENT_USER \ (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) #define CERT_SYSTEM_STORE_LOCAL_MACHINE \ (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) #define CERT_SYSTEM_STORE_CURRENT_SERVICE \ (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) #define CERT_SYSTEM_STORE_SERVICES \ (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) #define CERT_SYSTEM_STORE_USERS \ (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) #define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY \ (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) #define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY \ (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) #define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE \ (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) #if defined(__GNUC__) #define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH (const WCHAR[])\ {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t',\ '\\','S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',\ 0 } #define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH (const WCHAR[])\ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\ 't','i','f','i','c','a','t','e','s',0 } #elif defined(_MSC_VER) #define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH \ L"Software\\Microsoft\\SystemCertificates" #define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH \ L"Software\\Policies\\Microsoft\\SystemCertificates" #else static const WCHAR CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\', 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',0 }; static const WCHAR CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH[] = {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\', 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r', 't','i','f','i','c','a','t','e','s',0 }; #endif #if defined(__GNUC__) #define CERT_EFSBLOB_REGPATH (const WCHAR[])\ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\ 't','i','f','i','c','a','t','e','s','\\','E','F','S',0 } #define CERT_EFSBLOB_VALUE_NAME (const WCHAR[]) {'E','F','S','B','l','o','b',0 } #elif defined(_MSC_VER) #define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\EFS" #define CERT_EFSBLOB_VALUE_NAME L"EFSBlob" #else static const WCHAR CERT_EFSBLOB_REGPATH[] = {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\', 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r', 't','i','f','i','c','a','t','e','s','\\','E','F','S',0 }; static const WCHAR CERT_EFSBLOB_VALUE_NAME[] = { 'E','F','S','B','l','o','b',0 }; #endif #if defined(__GNUC__) #define CERT_PROT_ROOT_FLAGS_REGPATH (const WCHAR[])\ {'\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o','t',\ 's',0 } #define CERT_PROT_ROOT_FLAGS_VALUE_NAME (const WCHAR[])\ {'F','l','a','g','s',0 } #elif defined(_MSC_VER) #define CERT_PROT_ROOT_FLAGS_REGPATH L"\\Root\\ProtectedRoots" #define CERT_PROT_ROOT_FLAGS_VALUE_NAME L"Flags" #else static const WCHAR CERT_PROT_ROOT_FLAGS_REGPATH[] = { '\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o', 't','s',0 }; static const WCHAR CERT_PROT_ROOT_FLAGS_VALUE_NAME[] = {'F','l','a','g','s',0 }; #endif #define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG 0x01 #define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG 0x02 #define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG 0x04 #define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG 0x08 #define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG 0x10 #define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20 #if defined(__GNUC__) #define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH (const WCHAR[])\ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\ 't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d',\ 'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 } #elif defined(_MSC_VER) #define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH \ CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer" #else static const WCHAR CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH[] = {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\', 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r', 't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d', 'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 }; #endif #if defined(__GNUC__) #define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH (const WCHAR[])\ {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',\ 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\',\ 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\',\ 'S','a','f','e','r',0 } #define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME (const WCHAR[])\ {'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 }; #elif defined(_MSC_VER) #define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH \ CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer" #define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags" #else static const WCHAR CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\', 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\', 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\', 'S','a','f','e','r',0 }; static const WCHAR CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME[] = { 'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 }; #endif #define CERT_TRUST_PUB_ALLOW_END_USER_TRUST 0x00000000 #define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST 0x00000001 #define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x00000002 #define CERT_TRUST_PUB_ALLOW_TRUST_MASK 0x00000003 #define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG 0x00000100 #define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG 0x00000200 /* flags for CertOpenStore dwFlags */ #define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x00000001 #define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x00000002 #define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004 #define CERT_STORE_DELETE_FLAG 0x00000010 #define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x00000020 #define CERT_STORE_SHARE_STORE_FLAG 0x00000040 #define CERT_STORE_SHARE_CONTEXT_FLAG 0x00000080 #define CERT_STORE_MANIFOLD_FLAG 0x00000100 #define CERT_STORE_ENUM_ARCHIVED_FLAG 0x00000200 #define CERT_STORE_UPDATE_KEYID_FLAG 0x00000400 #define CERT_STORE_BACKUP_RESTORE_FLAG 0x00000800 #define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x00001000 #define CERT_STORE_CREATE_NEW_FLAG 0x00002000 #define CERT_STORE_OPEN_EXISTING_FLAG 0x00004000 #define CERT_STORE_READONLY_FLAG 0x00008000 #define CERT_REGISTRY_STORE_REMOTE_FLAG 0x00010000 #define CERT_REGISTRY_STORE_SERIALIZED_FLAG 0x00020000 #define CERT_REGISTRY_STORE_ROAMING_FLAG 0x00040000 #define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x00080000 #define CERT_REGISTRY_STORE_LM_GPT_FLAG 0x01000000 #define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG 0x80000000 #define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x00010000 /* CertCloseStore dwFlags */ #define CERT_CLOSE_STORE_FORCE_FLAG 0x00000001 #define CERT_CLOSE_STORE_CHECK_FLAG 0x00000002 /* dwAddDisposition */ #define CERT_STORE_ADD_NEW 1 #define CERT_STORE_ADD_USE_EXISTING 2 #define CERT_STORE_ADD_REPLACE_EXISTING 3 #define CERT_STORE_ADD_ALWAYS 4 #define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5 #define CERT_STORE_ADD_NEWER 6 #define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7 /* Installable OID function defs */ #define CRYPT_OID_OPEN_STORE_PROV_FUNC "CertDllOpenStoreProv" #define CRYPT_OID_ENCODE_OBJECT_FUNC "CryptDllEncodeObject" #define CRYPT_OID_DECODE_OBJECT_FUNC "CryptDllDecodeObject" #define CRYPT_OID_ENCODE_OBJECT_EX_FUNC "CryptDllEncodeObjectEx" #define CRYPT_OID_DECODE_OBJECT_EX_FUNC "CryptDllDecodeObjectEx" #define CRYPT_OID_CREATE_COM_OBJECT_FUNC "CryptDllCreateComObject" #define CRYPT_OID_VERIFY_REVOCATION_FUNC "CertDllVerifyRevocation" #define CRYPT_OID_VERIFY_CTL_USAGE_FUNC "CertDllVerifyCTLUsage" #define CRYPT_OID_FORMAT_OBJECT_FUNC "CryptDllFormatObject" #define CRYPT_OID_FIND_OID_INFO_FUNC "CryptDllFindOIDInfo" #define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName" #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC "CryptDllExportPublicKeyInfoEx" #define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC "CryptDllImportPublicKeyInfoEx" #define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx" #define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx" #define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC \ "CertDllVerifyCertificateChainPolicy" #define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl" #define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject" #define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey" #define CMSG_OID_EXPORT_KEY_TRANS_FUNC "CryptMsgDllExportKeyTrans" #define CMSG_OID_IMPORT_KEY_TRANS_FUNC "CryptMsgDllImportKeyTrans" #define CRYPT_OID_REGPATH "Software\\Microsoft\\Cryptography\\OID" #define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType " #if defined(__GNUC__) # define CRYPT_OID_REG_DLL_VALUE_NAME (const WCHAR []){ 'D','l','l',0 } # define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME \ (const WCHAR []){ 'F','u','n','c','N','a','m','e',0 } # define CRYPT_OID_REG_FLAGS_VALUE_NAME \ (const WCHAR []){ 'C','r','y','p','t','F','l','a','g','s',0 } #elif defined(_MSC_VER) # define CRYPT_OID_REG_DLL_VALUE_NAME L"Dll" # define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L"FuncName" # define CRYPT_OID_REG_FLAGS_VALUE_NAME L"CryptFlags" #else static const WCHAR CRYPT_OID_REG_DLL_VALUE_NAME[] = { 'D','l','l',0 }; static const WCHAR CRYPT_OID_REG_FUNC_NAME_VALUE_NAME[] = { 'F','u','n','c','N','a','m','e',0 }; static const WCHAR CRYPT_OID_REG_FLAGS_VALUE_NAME[] = { 'C','r','y','p','t','F','l','a','g','s',0 }; #endif #define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName" #define CRYPT_DEFAULT_OID "DEFAULT" #define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1 #define CRYPT_GET_INSTALLED_OID_FUNC_FLAG 0x1 #define CRYPT_REGISTER_FIRST_INDEX 0 #define CRYPT_REGISTER_LAST_INDEX 0xffffffff /* values for CERT_STORE_PROV_INFO's dwStoreProvFlags */ #define CERT_STORE_PROV_EXTERNAL_FLAG 0x1 #define CERT_STORE_PROV_DELETED_FLAG 0x2 #define CERT_STORE_PROV_NO_PERSIST_FLAG 0x4 #define CERT_STORE_PROV_SYSTEM_STORE_FLAG 0x8 #define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10 /* function indices */ #define CERT_STORE_PROV_CLOSE_FUNC 0 #define CERT_STORE_PROV_READ_CERT_FUNC 1 #define CERT_STORE_PROV_WRITE_CERT_FUNC 2 #define CERT_STORE_PROV_DELETE_CERT_FUNC 3 #define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4 #define CERT_STORE_PROV_READ_CRL_FUNC 5 #define CERT_STORE_PROV_WRITE_CRL_FUNC 6 #define CERT_STORE_PROV_DELETE_CRL_FUNC 7 #define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC 8 #define CERT_STORE_PROV_READ_CTL_FUNC 9 #define CERT_STORE_PROV_WRITE_CTL_FUNC 10 #define CERT_STORE_PROV_DELETE_CTL_FUNC 11 #define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC 12 #define CERT_STORE_PROV_CONTROL_FUNC 13 #define CERT_STORE_PROV_FIND_CERT_FUNC 14 #define CERT_STORE_PROV_FREE_FIND_CERT_FUNC 15 #define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16 #define CERT_STORE_PROV_FIND_CRL_FUNC 17 #define CERT_STORE_PROV_FREE_FIND_CRL_FUNC 18 #define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC 19 #define CERT_STORE_PROV_FIND_CTL_FUNC 20 #define CERT_STORE_PROV_FREE_FIND_CTL_FUNC 21 #define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC 22 /* physical store dwFlags, also used by CertAddStoreToCollection as * dwUpdateFlags */ #define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1 #define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2 #define CERT_PHYSICAL_STORE_REMOVE_OPEN_DISABLE_FLAG 0x4 #define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8 /* dwFlag values for CertEnumPhysicalStore callback */ #define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1 /* predefined store names */ #if defined(__GNUC__) # define CERT_PHYSICAL_STORE_DEFAULT_NAME (const WCHAR[])\ {'.','D','e','f','a','u','l','t','0'} # define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME (const WCHAR[])\ {'.','G','r','o','u','p','P','o','l','i','c','y',0} # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME (const WCHAR[])\ {'.','L','o','c','a','l','M','a','c','h','i','n','e',0} # define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME (const WCHAR[])\ {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0} # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME (const WCHAR[])\ {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',\ 'P','o','l','i','c','y',0} # define CERT_PHYSICAL_STORE_ENTERPRISE_NAME (const WCHAR[])\ {'.','E','n','t','e','r','p','r','i','s','e',0} # define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME (const WCHAR[])\ {'.','A','u','t','h','R','o','o','t',0} #elif defined(_MSC_VER) # define CERT_PHYSICAL_STORE_DEFAULT_NAME \ L".Default" # define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME \ L".GroupPolicy" # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME \ L".LocalMachine" # define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME \ L".UserCertificate" # define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME \ L".LocalMachineGroupPolicy" # define CERT_PHYSICAL_STORE_ENTERPRISE_NAME \ L".Enterprise" # define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME \ L".AuthRoot" #else static const WCHAR CERT_PHYSICAL_STORE_DEFAULT_NAME[] = {'.','D','e','f','a','u','l','t','0'}; static const WCHAR CERT_PHYSICAL_STORE_GROUP_POLICY_NAME[] = {'.','G','r','o','u','p','P','o','l','i','c','y',0}; static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME[] = {'.','L','o','c','a','l','M','a','c','h','i','n','e',0}; static const WCHAR CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME[] = {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0}; static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME[] = {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p', 'P','o','l','i','c','y',0}; static const WCHAR CERT_PHYSICAL_STORE_ENTERPRISE_NAME[] = {'.','E','n','t','e','r','p','r','i','s','e',0}; static const WCHAR CERT_PHYSICAL_STORE_AUTH_ROOT_NAME[] = {'.','A','u','t','h','R','o','o','t',0}; #endif /* cert system store flags */ #define CERT_SYSTEM_STORE_MASK 0xffff0000 #define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000 /* CertFindChainInStore dwFindType types */ #define CERT_CHAIN_FIND_BY_ISSUER 1 /* CertSaveStore dwSaveAs values */ #define CERT_STORE_SAVE_AS_STORE 1 #define CERT_STORE_SAVE_AS_PKCS7 2 /* CertSaveStore dwSaveTo values */ #define CERT_STORE_SAVE_TO_FILE 1 #define CERT_STORE_SAVE_TO_MEMORY 2 #define CERT_STORE_SAVE_TO_FILENAME_A 3 #define CERT_STORE_SAVE_TO_FILENAME_W 4 #define CERT_STORE_SAVE_TO_FILENAME CERT_STORE_SAVE_TO_FILENAME_W /* CERT_INFO versions/flags */ #define CERT_V1 0 #define CERT_V2 1 #define CERT_V3 2 #define CERT_INFO_VERSION_FLAG 1 #define CERT_INFO_SERIAL_NUMBER_FLAG 2 #define CERT_INFO_SIGNATURE_ALGORITHM_FLAG 3 #define CERT_INFO_ISSUER_FLAG 4 #define CERT_INFO_NOT_BEFORE_FLAG 5 #define CERT_INFO_NOT_AFTER_FLAG 6 #define CERT_INFO_SUBJECT_FLAG 7 #define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8 #define CERT_INFO_ISSUER_UNIQUE_ID_FLAG 9 #define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG 10 #define CERT_INFO_EXTENSION_FLAG 11 /* CERT_REQUEST_INFO versions */ #define CERT_REQUEST_V1 0 /* CERT_KEYGEN_REQUEST_INFO versions */ #define CERT_KEYGEN_REQUEST_V1 0 /* CRL versions */ #define CRL_V1 0 #define CRL_V2 1 /* CTL versions */ #define CTL_V1 0 /* Certificate, CRL, CTL property IDs */ #define CERT_KEY_PROV_HANDLE_PROP_ID 1 #define CERT_KEY_PROV_INFO_PROP_ID 2 #define CERT_SHA1_HASH_PROP_ID 3 #define CERT_HASH_PROP_ID CERT_SHA1_HASH_PROP_ID #define CERT_MD5_HASH_PROP_ID 4 #define CERT_KEY_CONTEXT_PROP_ID 5 #define CERT_KEY_SPEC_PROP_ID 6 #define CERT_IE30_RESERVED_PROP_ID 7 #define CERT_PUBKEY_HASH_RESERVED_PROP_ID 8 #define CERT_ENHKEY_USAGE_PROP_ID 9 #define CERT_CTL_USAGE_PROP_ID CERT_ENHKEY_USAGE_PROP_ID #define CERT_NEXT_UPDATE_LOCATION_PROP_ID 10 #define CERT_FRIENDLY_NAME_PROP_ID 11 #define CERT_PVK_FILE_PROP_ID 12 #define CERT_DESCRIPTION_PROP_ID 13 #define CERT_ACCESS_STATE_PROP_ID 14 #define CERT_SIGNATURE_HASH_PROP_ID 15 #define CERT_SMART_CARD_DATA_PROP_ID 16 #define CERT_EFS_PROP_ID 17 #define CERT_FORTEZZA_DATA_PROP 18 #define CERT_ARCHIVED_PROP_ID 19 #define CERT_KEY_IDENTIFIER_PROP_ID 20 #define CERT_AUTO_ENROLL_PROP_ID 21 #define CERT_PUBKEY_ALG_PARA_PROP_ID 22 #define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23 #define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 24 #define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 25 #define CERT_ENROLLMENT_PROP_ID 26 #define CERT_DATE_STAMP_PROP_ID 27 #define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28 #define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 29 #define CERT_EXTENDED_ERROR_INFO_PROP_ID 30 /* 31 -- unused? 32 -- cert prop id 33 -- CRL prop id 34 -- CTL prop id 35 -- KeyId prop id 36-63 -- reserved */ #define CERT_RENEWAL_PROP_ID 64 #define CERT_ARCHIVED_KEY_HASH_PROP_ID 65 #define CERT_AUTO_ENROLL_RETRY_PROP_ID 66 #define CERT_AIA_URL_RETRIEVED_PROP_ID 67 #define CERT_AUTHORITY_INFO_ACCESS_PROP_ID 68 #define CERT_BACKED_UP_PROP_ID 69 #define CERT_OCSP_RESPONSE_PROP_ID 70 #define CERT_REQUEST_ORIGINATOR_PROP_ID 71 #define CERT_SOURCE_LOCATION_PROP_ID 72 #define CERT_SOURCE_URL_PROP_ID 73 #define CERT_NEW_KEY_PROP_ID 74 #define CERT_OCSP_CACHE_PREFIX_PROP_ID 75 #define CERT_SMART_CARD_ROOT_INFO_PROP_ID 76 #define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID 77 #define CERT_NCRYPT_KEY_HANDLE_PROP_ID 78 #define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79 #define CERT_SUBJECT_INFO_ACCESS_PROP_ID 80 #define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81 #define CERT_CA_DISABLE_CRL_PROP_ID 82 #define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID 83 #define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84 #define CERT_FIRST_RESERVED_PROP_ID 85 #define CERT_LAST_RESERVED_PROP_ID 0x00007fff #define CERT_FIRST_USER_PROP_ID 0x00008000 #define CERT_LAST_USER_PROP_ID 0x0000ffff #define IS_CERT_HASH_PROP_ID(x) \ ((x) == CERT_SHA1_HASH_PROP_ID || (x) == CERT_MD5_HASH_PROP_ID || \ (x) == CERT_SIGNATURE_HASH_PROP_ID) #define IS_PUBKEY_HASH_PROP_ID(x) \ ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \ (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID) #define IS_CHAIN_HASH_PROP_ID(x) \ ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \ (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID || \ (x) == CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID || \ (x) == CERT_SUBJECT_NAME_MD5_HASH_PROP_ID) /* access state flags */ #define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1 #define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2 #define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4 /* CertSetCertificateContextProperty flags */ #define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000 #define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000 /* CERT_RDN attribute dwValueType types */ #define CERT_RDN_TYPE_MASK 0x000000ff #define CERT_RDN_ANY_TYPE 0 #define CERT_RDN_ENCODED_BLOB 1 #define CERT_RDN_OCTET_STRING 2 #define CERT_RDN_NUMERIC_STRING 3 #define CERT_RDN_PRINTABLE_STRING 4 #define CERT_RDN_TELETEX_STRING 5 #define CERT_RDN_T61_STRING 5 #define CERT_RDN_VIDEOTEX_STRING 6 #define CERT_RDN_IA5_STRING 7 #define CERT_RDN_GRAPHIC_STRING 8 #define CERT_RDN_VISIBLE_STRING 9 #define CERT_RDN_ISO646_STRING 9 #define CERT_RDN_GENERAL_STRING 10 #define CERT_RDN_UNIVERSAL_STRING 11 #define CERT_RDN_INT4_STRING 11 #define CERT_RDN_BMP_STRING 12 #define CERT_RDN_UNICODE_STRING 12 #define CERT_RDN_UTF8_STRING 13 /* CERT_RDN attribute dwValueType flags */ #define CERT_RDN_FLAGS_MASK 0xff000000 #define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000 #define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x4000000 #define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x2000000 #define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x0100000 #define IS_CERT_RDN_CHAR_STRING(x) \ (((x) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING) /* CertIsRDNAttrsInCertificateName flags */ #define CERT_UNICODE_IS_RDN_ATTRS_FLAG 0x1 #define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2 /* CRL reason codes */ #define CRL_REASON_UNSPECIFIED 0 #define CRL_REASON_KEY_COMPROMISE 1 #define CRL_REASON_CA_COMPROMISE 2 #define CRL_REASON_AFFILIATION_CHANGED 3 #define CRL_REASON_SUPERSEDED 4 #define CRL_REASON_CESSATION_OF_OPERATION 5 #define CRL_REASON_CERTIFICATE_HOLD 6 #define CRL_REASON_REMOVE_FROM_CRL 8 /* CertControlStore control types */ #define CERT_STORE_CTRL_RESYNC 1 #define CERT_STORE_CTRL_NOTIFY_CHANGE 2 #define CERT_STORE_CTRL_COMMIT 3 #define CERT_STORE_CTRL_AUTO_RESYNC 4 #define CERT_STORE_CTRL_CANCEL_NOTIFY 5 #define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1 #define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2 /* cert store properties */ #define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000 /* CertCreateContext flags */ #define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1 #define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2 #define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4 #define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8 #define CERT_COMPARE_MASK 0xffff #define CERT_COMPARE_SHIFT 16 #define CERT_COMPARE_ANY 0 #define CERT_COMPARE_SHA1_HASH 1 #define CERT_COMPARE_HASH CERT_COMPARE_SHA1_HASH #define CERT_COMPARE_NAME 2 #define CERT_COMPARE_ATTR 3 #define CERT_COMPARE_MD5_HASH 4 #define CERT_COMPARE_PROPERTY 5 #define CERT_COMPARE_PUBLIC_KEY 6 #define CERT_COMPARE_NAME_STR_A 7 #define CERT_COMPARE_NAME_STR_W 8 #define CERT_COMPARE_KEY_SPEC 9 #define CERT_COMPARE_ENHKEY_USAGE 10 #define CERT_COMPARE_CTL_USAGE CERT_COMPARE_ENHKEY_USAGE #define CERT_COMPARE_SUBJECT_CERT 11 #define CERT_COMPARE_ISSUER_OF 12 #define CERT_COMPARE_EXISTING 13 #define CERT_COMPARE_SIGNATURE_HASH 14 #define CERT_COMPARE_KEY_IDENTIFIER 15 #define CERT_COMPARE_CERT_ID 16 #define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17 #define CERT_COMPARE_PUBKEY_MD5_HASH 18 /* values of dwFindType for CertFind*InStore */ #define CERT_FIND_ANY \ (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT) #define CERT_FIND_SHA1_HASH \ (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT) #define CERT_FIND_MD5_HASH \ (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT) #define CERT_FIND_SIGNATURE_HASH \ (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT) #define CERT_FIND_KEY_IDENTIFIER \ (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT) #define CERT_FIND_HASH CERT_FIND_SHA1_HASH #define CERT_FIND_PROPERTY \ (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT) #define CERT_FIND_PUBLIC_KEY \ (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT) #define CERT_FIND_SUBJECT_NAME \ (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG) #define CERT_FIND_SUBJECT_ATTR \ (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG) #define CERT_FIND_ISSUER_NAME \ (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG) #define CERT_FIND_ISSUER_ATTR \ (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG) #define CERT_FIND_SUBJECT_STR_A \ (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG) #define CERT_FIND_SUBJECT_STR_W \ (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG) #define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W #define CERT_FIND_ISSUER_STR_A \ (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG) #define CERT_FIND_ISSUER_STR_W \ (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG) #define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W #define CERT_FIND_KEY_SPEC \ (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT) #define CERT_FIND_ENHKEY_USAGE \ (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT) #define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE #define CERT_FIND_SUBJECT_CERT \ (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT) #define CERT_FIND_ISSUER_OF \ (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT) #define CERT_FIND_EXISTING \ (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT) #define CERT_FIND_CERT_ID \ (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT) #define CERT_FIND_CROSS_CERT_DIST_POINTS \ (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT) #define CERT_FIND_PUBKEY_MD5_HASH \ (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT) #define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 0x1 #define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG 0x1 #define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 0x2 #define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG 0x2 #define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4 #define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG 0x4 #define CERT_FIND_NO_ENHKEY_USAGE_FLAG 0x8 #define CERT_FIND_NO_CTL_USAGE_FLAG 0x8 #define CERT_FIND_OR_ENHKEY_USAGE_FLAG 0x10 #define CERT_FIND_OR_CTL_USAGE_FLAG 0x10 #define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 0x20 #define CERT_FIND_VALID_CTL_USAGE_FLAG 0x20 #define CRL_FIND_ANY 0 #define CRL_FIND_ISSUED_BY 1 #define CRL_FIND_EXISTING 2 #define CRL_FIND_ISSUED_FOR 3 #define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1 #define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2 #define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4 #define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8 typedef struct _CRL_FIND_ISSUED_FOR_PARA { PCCERT_CONTEXT pSubjectCert; PCCERT_CONTEXT pIssuerCert; } CRL_FIND_ISSUED_FOR_PARA, *PCRL_FIND_ISSUED_FOR_PARA; #define CTL_FIND_ANY 0 #define CTL_FIND_SHA1_HASH 1 #define CTL_FIND_MD5_HASH 2 #define CTL_FIND_USAGE 3 #define CTL_FIND_SUBJECT 4 #define CTL_FIND_EXISTING 5 typedef struct _CTL_FIND_USAGE_PARA { DWORD cbSize; CTL_USAGE SubjectUsage; CRYPT_DATA_BLOB ListIdentifier; PCERT_INFO pSigner; } CTL_FIND_USAGE_PARA, *PCTL_FIND_USAGE_PARA; #define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff #define CTL_FIND_NO_SIGNER_PTR ((PCERT_INFO)-1) #define CTL_FIND_SAME_USAGE_FLAG 0x00000001 typedef struct _CTL_FIND_SUBJECT_PARA { DWORD cbSize; PCTL_FIND_USAGE_PARA pUsagePara; DWORD dwSubjectType; void *pvSubject; } CTL_FIND_SUBJECT_PARA, *PCTL_FIND_SUBJECT_PARA; /* PFN_CERT_STORE_PROV_WRITE_CERT dwFlags values */ #define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1 /* CertAddSerializedElementToStore context types */ #define CERT_STORE_CERTIFICATE_CONTEXT 1 #define CERT_STORE_CRL_CONTEXT 2 #define CERT_STORE_CTL_CONTEXT 3 #define CERT_STORE_ALL_CONTEXT_FLAG ~0U #define CERT_STORE_CERTIFICATE_CONTEXT_FLAG \ (1 << CERT_STORE_CERTIFICATE_CONTEXT) #define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT) #define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT) /* CryptBinaryToString/CryptStringToBinary flags */ #define CRYPT_STRING_BASE64HEADER 0x00000000 #define CRYPT_STRING_BASE64 0x00000001 #define CRYPT_STRING_BINARY 0x00000002 #define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003 #define CRYPT_STRING_HEX 0x00000004 #define CRYPT_STRING_HEXASCII 0x00000005 #define CRYPT_STRING_BASE64_ANY 0x00000006 #define CRYPT_STRING_ANY 0x00000007 #define CRYPT_STRING_HEX_ANY 0x00000008 #define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009 #define CRYPT_STRING_HEXADDR 0x0000000a #define CRYPT_STRING_HEXASCIIADDR 0x0000000b #define CRYPT_STRING_NOCRLF 0x40000000 #define CRYPT_STRING_NOCR 0x80000000 /* OIDs */ #define szOID_RSA "1.2.840.113549" #define szOID_PKCS "1.2.840.113549.1" #define szOID_RSA_HASH "1.2.840.113549.2" #define szOID_RSA_ENCRYPT "1.2.840.113549.3" #define szOID_PKCS_1 "1.2.840.113549.1.1" #define szOID_PKCS_2 "1.2.840.113549.1.2" #define szOID_PKCS_3 "1.2.840.113549.1.3" #define szOID_PKCS_4 "1.2.840.113549.1.4" #define szOID_PKCS_5 "1.2.840.113549.1.5" #define szOID_PKCS_6 "1.2.840.113549.1.6" #define szOID_PKCS_7 "1.2.840.113549.1.7" #define szOID_PKCS_8 "1.2.840.113549.1.8" #define szOID_PKCS_9 "1.2.840.113549.1.9" #define szOID_PKCS_10 "1.2.840.113549.1.10" #define szOID_PKCS_11 "1.2.840.113549.1.12" #define szOID_RSA_RSA "1.2.840.113549.1.1.1" #define CERT_RSA_PUBLIC_KEY_OBJID szOID_RSA_RSA #define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN szOID_RSA_RSA #define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG szOID_RSA_RSA #define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2" #define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3" #define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4" #define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5" #define szOID_RSA_SET0AEP_RSA "1.2.840.113549.1.1.6" #define szOID_RSA_SHA256RSA "1.2.840.113549.1.1.11" #define szOID_RSA_SHA384RSA "1.2.840.113549.1.1.12" #define szOID_RSA_SHA512RSA "1.2.840.113549.1.1.13" #define szOID_RSA_DH "1.2.840.113549.1.3.1" #define szOID_RSA_data "1.2.840.113549.1.7.1" #define szOID_RSA_signedData "1.2.840.113549.1.7.2" #define szOID_RSA_envelopedData "1.2.840.113549.1.7.3" #define szOID_RSA_signEnvData "1.2.840.113549.1.7.4" #define szOID_RSA_digestedData "1.2.840.113549.1.7.5" #define szOID_RSA_hashedData "1.2.840.113549.1.7.5" #define szOID_RSA_encryptedData "1.2.840.113549.1.7.6" #define szOID_RSA_emailAddr "1.2.840.113549.1.9.1" #define szOID_RSA_unstructName "1.2.840.113549.1.9.2" #define szOID_RSA_contentType "1.2.840.113549.1.9.3" #define szOID_RSA_messageDigest "1.2.840.113549.1.9.4" #define szOID_RSA_signingTime "1.2.840.113549.1.9.5" #define szOID_RSA_counterSign "1.2.840.113549.1.9.6" #define szOID_RSA_challengePwd "1.2.840.113549.1.9.7" #define szOID_RSA_unstructAddr "1.2.840.113549.1.9.9" #define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9" #define szOID_RSA_certExtensions "1.2.840.113549.1.9.14" #define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15" #define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1" #define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3" #define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5" #define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6" #define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7" #define szOID_RSA_MD2 "1.2.840.113549.2.2" #define szOID_RSA_MD4 "1.2.840.113549.2.4" #define szOID_RSA_MD5 "1.2.840.113549.2.5" #define szOID_RSA_RC2CBC "1.2.840.113549.3.2" #define szOID_RSA_RC4 "1.2.840.113549.3.4" #define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7" #define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9" #define szOID_ANSI_X942 "1.2.840.10046" #define szOID_ANSI_X942_DH "1.2.840.10046.2.1" #define szOID_X957 "1.2.840.10040" #define szOID_X957_DSA "1.2.840.10040.4.1" #define szOID_X957_SHA1DSA "1.2.840.10040.4.3" #define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1" #define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7" #define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3" #define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2" #define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3" #define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4" #define szOID_DS "2.5" #define szOID_DSALG "2.5.8" #define szOID_DSALG_CRPT "2.5.8.1" #define szOID_DSALG_HASH "2.5.8.2" #define szOID_DSALG_SIGN "2.5.8.3" #define szOID_DSALG_RSA "2.5.8.1.1" #define szOID_OIW "1.3.14" #define szOID_OIWSEC "1.3.14.3.2" #define szOID_OIWSEC_md4RSA "1.3.14.3.2.2" #define szOID_OIWSEC_md5RSA "1.3.14.3.2.3" #define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4" #define szOID_OIWSEC_desECB "1.3.14.3.2.6" #define szOID_OIWSEC_desCBC "1.3.14.3.2.7" #define szOID_OIWSEC_desOFB "1.3.14.3.2.8" #define szOID_OIWSEC_desCFB "1.3.14.3.2.9" #define szOID_OIWSEC_desMAC "1.3.14.3.2.10" #define szOID_OIWSEC_rsaSign "1.3.14.3.2.11" #define szOID_OIWSEC_dsa "1.3.14.3.2.12" #define szOID_OIWSEC_shaDSA "1.3.14.3.2.13" #define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14" #define szOID_OIWSEC_shaRSA "1.3.14.3.2.15" #define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16" #define szOID_OIWSEC_desEDE "1.3.14.3.2.17" #define szOID_OIWSEC_sha "1.3.14.3.2.18" #define szOID_OIWSEC_mdc2 "1.3.14.3.2.19" #define szOID_OIWSEC_dsaComm "1.3.14.3.2.20" #define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21" #define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22" #define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23" #define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24" #define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25" #define szOID_OIWSEC_sha1 "1.3.14.3.2.26" #define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27" #define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28" #define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29" #define szOID_OIWDIR "1.3.14.7.2" #define szOID_OIWDIR_CRPT "1.3.14.7.2.1" #define szOID_OIWDIR_HASH "1.3.14.7.2.2" #define szOID_OIWDIR_SIGN "1.3.14.7.2.3" #define szOID_OIWDIR_md2 "1.3.14.7.2.2.1" #define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1" #define szOID_ECC_CURVE_P384 "1.3.132.0.34" #define szOID_ECC_CURVE_P521 "1.3.132.0.35" #define szOID_INFOSEC "2.16.840.1.101.2.1" #define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1" #define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2" #define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3" #define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4" #define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5" #define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6" #define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7" #define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8" #define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9" #define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10" #define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11" #define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12" #define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13" #define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14" #define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15" #define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16" #define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17" #define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18" #define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19" #define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20" #define szOID_INFOSEC_mosaicUpdateInteg "2.16.840.1.101.2.1.1.21" #define szOID_NIST_sha256 "2.16.840.1.101.3.4.2.1" #define szOID_NIST_sha384 "2.16.840.1.101.3.4.2.2" #define szOID_NIST_sha512 "2.16.840.1.101.3.4.2.3" #define szOID_COMMON_NAME "2.5.4.3" #define szOID_SUR_NAME "2.5.4.4" #define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5" #define szOID_COUNTRY_NAME "2.5.4.6" #define szOID_LOCALITY_NAME "2.5.4.7" #define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8" #define szOID_STREET_ADDRESS "2.5.4.9" #define szOID_ORGANIZATION_NAME "2.5.4.10" #define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11" #define szOID_TITLE "2.5.4.12" #define szOID_DESCRIPTION "2.5.4.13" #define szOID_SEARCH_GUIDE "2.5.4.14" #define szOID_BUSINESS_CATEGORY "2.5.4.15" #define szOID_POSTAL_ADDRESS "2.5.4.16" #define szOID_POSTAL_CODE "2.5.4.17" #define szOID_POST_OFFICE_BOX "2.5.4.18" #define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19" #define szOID_TELEPHONE_NUMBER "2.5.4.20" #define szOID_TELEX_NUMBER "2.5.4.21" #define szOID_TELETEXT_TERMINAL_IDENTIFIER "2.5.4.22" #define szOID_FACSIMILE_TELEPHONE_NUMBER "2.5.4.23" #define szOID_X21_ADDRESS "2.5.4.24" #define szOID_INTERNATIONAL_ISDN_NUMBER "2.5.4.25" #define szOID_REGISTERED_ADDRESS "2.5.4.26" #define szOID_DESTINATION_INDICATOR "2.5.4.27" #define szOID_PREFERRED_DELIVERY_METHOD "2.5.4.28" #define szOID_PRESENTATION_ADDRESS "2.5.4.29" #define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30" #define szOID_MEMBER "2.5.4.31" #define szOID_OWNER "2.5.4.32" #define szOID_ROLE_OCCUPANT "2.5.4.33" #define szOID_SEE_ALSO "2.5.4.34" #define szOID_USER_PASSWORD "2.5.4.35" #define szOID_USER_CERTIFICATE "2.5.4.36" #define szOID_CA_CERTIFICATE "2.5.4.37" #define szOID_AUTHORITY_REVOCATION_LIST "2.5.4.38" #define szOID_CERTIFICATE_REVOCATION_LIST "2.5.4.39" #define szOID_CROSS_CERTIFICATE_PAIR "2.5.4.40" #define szOID_GIVEN_NAME "2.5.4.42" #define szOID_INITIALS "2.5.4.43" #define szOID_DN_QUALIFIER "2.5.4.46" #define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1" #define szOID_KEY_ATTRIBUTES "2.5.29.2" #define szOID_CERT_POLICIES_95 "2.5.29.3" #define szOID_KEY_USAGE_RESTRICTION "2.5.29.4" #define szOID_LEGACY_POLICY_MAPPINGS "2.5.29.5" #define szOID_SUBJECT_ALT_NAME "2.5.29.7" #define szOID_ISSUER_ALT_NAME "2.5.29.8" #define szOID_SUBJECT_DIR_ATTRS "2.5.29.9" #define szOID_BASIC_CONSTRAINTS "2.5.29.10" #define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14" #define szOID_KEY_USAGE "2.5.29.15" #define szOID_PRIVATEKEY_USAGE_PERIOD "2.5.29.16" #define szOID_SUBJECT_ALT_NAME2 "2.5.29.17" #define szOID_ISSUER_ALT_NAME2 "2.5.29.18" #define szOID_BASIC_CONSTRAINTS2 "2.5.29.19" #define szOID_CRL_NUMBER "2.5.29.20" #define szOID_CRL_REASON_CODE "2.5.29.21" #define szOID_REASON_CODE_HOLD "2.5.29.23" #define szOID_DELTA_CRL_INDICATOR "2.5.29.27" #define szOID_ISSUING_DIST_POINT "2.5.29.28" #define szOID_NAME_CONSTRAINTS "2.5.29.30" #define szOID_CRL_DIST_POINTS "2.5.29.31" #define szOID_CERT_POLICIES "2.5.29.32" #define szOID_ANY_CERT_POLICY "2.5.29.32.0" #define szOID_POLICY_MAPPINGS "2.5.29.33" #define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35" #define szOID_POLICY_CONSTRAINTS "2.5.29.36" #define szOID_ENHANCED_KEY_USAGE "2.5.29.37" #define szOID_FRESHEST_CRL "2.5.29.46" #define szOID_INHIBIT_ANY_POLICY "2.5.29.54" #define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25" #define szOID_PKCS_12_FRIENDLY_NAME_ATTR "1.2.840.113549.1.9.20" #define szOID_PKCS_12_LOCAL_KEY_ID "1.2.840.113549.1.9.21" #define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14" #define szOID_NEXT_UPDATE_LOCATION "1.3.6.1.4.1.311.10.2" #define szOID_KP_CTL_USAGE_SIGNING "1.3.6.1.4.1.311.10.3.1" #define szOID_KP_TIME_STAMP_SIGNING "1.3.6.1.4.1.311.10.3.2" #ifndef szOID_SERVER_GATED_CRYPTO #define szOID_SERVER_GATED_CRYPTO "1.3.6.1.4.1.311.10.3.3" #endif #ifndef szOID_SGC_NETSCAPE #define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1" #endif #define szOID_KP_EFS "1.3.6.1.4.1.311.10.3.4" #define szOID_EFS_RECOVERY "1.3.6.1.4.1.311.10.3.4.1" #define szOID_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5" #define szOID_NT5_CRYPTO "1.3.6.1.4.1.311.10.3.6" #define szOID_OEM_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.7" #define szOID_EMBEDDED_NT_CRYPTO "1.3.6.1.4.1.311.10.3.8" #define szOID_ROOT_LIST_SIGNER "1.3.6.1.4.1.311.10.3.9" #define szOID_KP_QUALIFIED_SUBORDINATION "1.3.6.1.4.1.311.10.3.10" #define szOID_KP_KEY_RECOVERY "1.3.6.1.4.1.311.10.3.11" #define szOID_KP_DOCUMENT_SIGNING "1.3.6.1.4.1.311.10.3.12" #define szOID_KP_LIFETIME_SIGNING "1.3.6.1.4.1.311.10.3.13" #define szOID_KP_MOBILE_DEVICE_SOFTWARE "1.3.6.1.4.1.311.10.3.14" #define szOID_YESNO_TRUST_ATTR "1.3.6.1.4.1.311.10.4.1" #ifndef szOID_DRM #define szOID_DRM "1.3.6.1.4.1.311.10.5.1" #endif #ifndef szOID_DRM_INDIVIDUALIZATION #define szOID_DRM_INDIVIDUALIZATION "1.3.6.1.4.1.311.10.5.2" #endif #ifndef szOID_LICENSES #define szOID_LICENSES "1.3.6.1.4.1.311.10.6.1" #endif #ifndef szOID_LICENSE_SERVER #define szOID_LICENSE_SERVER "1.3.6.1.4.1.311.10.6.2" #endif #define szOID_REMOVE_CERTIFICATE "1.3.6.1.4.1.311.10.8.1" #define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1" #define szOID_CTL "1.3.6.1.4.1.311.10.1" #define szOID_SORTED_CTL "1.3.6.1.4.1.311.10.1.1" #define szOID_ANY_APPLICATION_POLICY "1.3.6.1.4.1.311.10.12.1" #define szOID_RENEWAL_CERTIFICATE "1.3.6.1.4.1.311.13.1" #define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1" #define szOID_ENROLLMENT_CSP_PROVIDER "1.3.6.1.4.1.311.13.2.2" #define szOID_OS_VERSION "1.3.6.1.4.1.311.13.2.3" #define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1" #define szOID_LOCAL_MACHINE_KEYSET "1.3.6.1.4.1.311.17.2" #define szOID_AUTO_ENROLL_CTL_USAGE "1.3.6.1.4.1.311.20.1" #define szOID_ENROLL_CERTTYPE_EXTENSION "1.3.6.1.4.1.311.20.2" #define szOID_ENROLLMENT_AGENT "1.3.6.1.4.1.311.20.2.1" #ifndef szOID_KP_SMARTCARD_LOGON #define szOID_KP_SMARTCARD_LOGON "1.3.6.1.4.1.311.20.2.2" #endif #ifndef szOID_NT_PRINCIPAL_NAME #define szOID_NT_PRINCIPAL_NAME "1.3.6.1.4.1.311.20.2.3" #endif #define szOID_CERT_MANIFOLD "1.3.6.1.4.1.311.20.3" #ifndef szOID_CERTSRV_CA_VERSION #define szOID_CERTSRV_CA_VERSION "1.3.6.1.4.1.311.21.1" #endif #define szOID_CERTSRV_PREVIOUS_CERT_HASH "1.3.6.1.4.1.311.21.2" #define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3" #define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4" #define szOID_KP_CA_EXCHANGE "1.3.6.1.4.1.311.21.5" #define szOID_KP_KEY_RECOVERY_AGENT "1.3.6.1.4.1.311.21.6" #define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7" #define szOID_ENTERPRISE_OID_ROOT "1.3.6.1.4.1.311.21.8" #define szOID_RDN_DUMMY_SIGNER "1.3.6.1.4.1.311.21.9" #define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10" #define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11" #define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12" #define szOID_ARCHIVED_KEY_ATTR "1.3.6.1.4.1.311.21.13" #define szOID_CRL_SELF_CDP "1.3.6.1.4.1.311.21.14" #define szOID_REQUIRE_CERT_CHAIN_POLICY "1.3.6.1.4.1.311.21.15" #define szOID_ARCHIVED_KEY_CERT_HASH "1.3.6.1.4.1.311.21.16" #define szOID_ISSUED_CERT_HASH "1.3.6.1.4.1.311.21.17" #define szOID_DS_EMAIL_REPLICATION "1.3.6.1.4.1.311.21.19" #define szOID_REQUEST_CLIENT_INFO "1.3.6.1.4.1.311.21.20" #define szOID_ENCRYPTED_KEY_HASH "1.3.6.1.4.1.311.21.21" #define szOID_CERTSRV_CROSSCA_VERSION "1.3.6.1.4.1.311.21.22" #define szOID_KEYID_RDN "1.3.6.1.4.1.311.10.7.1" #define szOID_PKIX "1.3.6.1.5.5.7" #define szOID_PKIX_PE "1.3.6.1.5.5.7.1" #define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1" #define szOID_PKIX_POLICY_QUALIFIER_CPS "1.3.6.1.5.5.7.2.1" #define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2" #define szOID_PKIX_KP "1.3.6.1.5.5.7.3" #define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1" #define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2" #define szOID_PKIX_KP_CODE_SIGNING "1.3.6.1.5.5.7.3.3" #define szOID_PKIX_KP_EMAIL_PROTECTION "1.3.6.1.5.5.7.3.4" #define szOID_PKIX_KP_IPSEC_END_SYSTEM "1.3.6.1.5.5.7.3.5" #define szOID_PKIX_KP_IPSEC_TUNNEL "1.3.6.1.5.5.7.3.6" #define szOID_PKIX_KP_IPSEC_USER "1.3.6.1.5.5.7.3.7" #define szOID_PKIX_KP_TIMESTAMP_SIGNING "1.3.6.1.5.5.7.3.8" #define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2" #define szOID_CMC "1.3.6.1.5.5.7.7" #define szOID_CMC_STATUS_INFO "1.3.6.1.5.5.7.7.1" #define szOID_CMC_IDENTIFICATION "1.3.6.1.5.5.7.7.2" #define szOID_CMC_IDENTITY_PROOF "1.3.6.1.5.5.7.7.3" #define szOID_CMC_DATA_RETURN "1.3.6.1.5.5.7.7.4" #define szOID_CMC_TRANSACTION_ID "1.3.6.1.5.5.7.7.5" #define szOID_CMC_SENDER_NONCE "1.3.6.1.5.5.7.7.6" #define szOID_CMC_RECIPIENT_NONCE "1.3.6.1.5.5.7.7.7" #define szOID_CMC_ADD_EXTENSIONS "1.3.6.1.5.5.7.7.8" #define szOID_CMC_ENCRYPTED_POP "1.3.6.1.5.5.7.7.9" #define szOID_CMC_DECRYPTED_POP "1.3.6.1.5.5.7.7.10" #define szOID_CMC_LRA_POP_WITNESS "1.3.6.1.5.5.7.7.11" #define szOID_CMC_GET_CERT "1.3.6.1.5.5.7.7.15" #define szOID_CMC_GET_CRL "1.3.6.1.5.5.7.7.16" #define szOID_CMC_REVOKE_REQUEST "1.3.6.1.5.5.7.7.17" #define szOID_CMC_REG_INFO "1.3.6.1.5.5.7.7.18" #define szOID_CMC_RESPONSE_INFO "1.3.6.1.5.5.7.7.19" #define szOID_CMC_QUERY_PENDING "1.3.6.1.5.5.7.7.21" #define szOID_CMC_ID_POP_LINK_RANDOM "1.3.6.1.5.5.7.7.22" #define szOID_CMC_ID_POP_LINK_WITNESS "1.3.6.1.5.5.7.7.23" #define szOID_CT_PKI_DATA "1.3.6.1.5.5.7.12.2" #define szOID_CT_PKI_RESPONSE "1.3.6.1.5.5.7.12.3" #define szOID_PKIX_ACC_DESCR "1.3.6.1.5.5.7.48" #define szOID_PKIX_OCSP "1.3.6.1.5.5.7.48.1" #define szOID_PKIX_CA_ISSUERS "1.3.6.1.5.5.7.48.2" #define szOID_IPSEC_KP_IKE_INTERMEDIATE "1.3.6.1.5.5.8.2.2" #ifndef szOID_SERIALIZED #define szOID_SERIALIZED "1.3.6.1.4.1.311.10.3.3.1" #endif #ifndef szOID_PRODUCT_UPDATE #define szOID_PRODUCT_UPDATE "1.3.6.1.4.1.311.31.1" #endif #define szOID_NETSCAPE "2.16.840.1.113730" #define szOID_NETSCAPE_CERT_EXTENSION "2.16.840.1.113730.1" #define szOID_NETSCAPE_CERT_TYPE "2.16.840.1.113730.1.1" #define szOID_NETSCAPE_BASE_URL "2.16.840.1.113730.1.2" #define szOID_NETSCAPE_REVOCATION_URL "2.16.840.1.113730.1.3" #define szOID_NETSCAPE_CA_REVOCATION_URL "2.16.840.1.113730.1.4" #define szOID_NETSCAPE_CERT_RENEWAL_URL "2.16.840.1.113730.1.7" #define szOID_NETSCAPE_CA_POLICY_URL "2.16.840.1.113730.1.8" #define szOID_NETSCAPE_SSL_SERVER_NAME "2.16.840.1.113730.1.12" #define szOID_NETSCAPE_COMMENT "2.16.840.1.113730.1.13" #define szOID_NETSCAPE_DATA_TYPE "2.16.840.1.113730.2" #define szOID_NETSCAPE_CERT_SEQUENCE "2.16.840.1.113730.2.5" /* Bits for szOID_NETSCAPE_CERT_TYPE */ #define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80 #define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40 #define NETSCAPE_SMIME_CERT_TYPE 0x20 #define NETSCAPE_SIGN_CERT_TYPE 0x10 #define NETSCAPE_SSL_CA_CERT_TYPE 0x04 #define NETSCAPE_SMIME_CA_CERT_TYPE 0x02 #define NETSCAPE_SIGN_CA_CERT_TYPE 0x01 #define CRYPT_ENCODE_DECODE_NONE 0 #define X509_CERT ((LPCSTR)1) #define X509_CERT_TO_BE_SIGNED ((LPCSTR)2) #define X509_CERT_CRL_TO_BE_SIGNED ((LPCSTR)3) #define X509_CERT_REQUEST_TO_BE_SIGNED ((LPCSTR)4) #define X509_EXTENSIONS ((LPCSTR)5) #define X509_NAME_VALUE ((LPCSTR)6) #define X509_ANY_STRING X509_NAME_VALUE #define X509_NAME ((LPCSTR)7) #define X509_PUBLIC_KEY_INFO ((LPCSTR)8) #define X509_AUTHORITY_KEY_ID ((LPCSTR)9) #define X509_KEY_ATTRIBUTES ((LPCSTR)10) #define X509_KEY_USAGE_RESTRICTION ((LPCSTR)11) #define X509_ALTERNATE_NAME ((LPCSTR)12) #define X509_BASIC_CONSTRAINTS ((LPCSTR)13) #define X509_KEY_USAGE ((LPCSTR)14) #define X509_BASIC_CONSTRAINTS2 ((LPCSTR)15) #define X509_CERT_POLICIES ((LPCSTR)16) #define PKCS_UTC_TIME ((LPCSTR)17) #define PKCS_TIME_REQUEST ((LPCSTR)18) #define RSA_CSP_PUBLICKEYBLOB ((LPCSTR)19) #define X509_UNICODE_NAME ((LPCSTR)20) #define X509_KEYGEN_REQUEST_TO_BE_SIGNED ((LPCSTR)21) #define PKCS_ATTRIBUTE ((LPCSTR)22) #define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY ((LPCSTR)23) #define X509_UNICODE_NAME_VALUE ((LPCSTR)24) #define X509_UNICODE_ANY_STRING X509_UNICODE_NAME_VALUE #define X509_OCTET_STRING ((LPCSTR)25) #define X509_BITS ((LPCSTR)26) #define X509_INTEGER ((LPCSTR)27) #define X509_MULTI_BYTE_INTEGER ((LPCSTR)28) #define X509_ENUMERATED ((LPCSTR)29) #define X509_CRL_REASON_CODE X509_ENUMERATED #define X509_CHOICE_OF_TIME ((LPCSTR)30) #define X509_AUTHORITY_KEY_ID2 ((LPCSTR)31) #define X509_AUTHORITY_INFO_ACCESS ((LPCSTR)32) #define PKCS_CONTENT_INFO ((LPCSTR)33) #define X509_SEQUENCE_OF_ANY ((LPCSTR)34) #define X509_CRL_DIST_POINTS ((LPCSTR)35) #define X509_ENHANCED_KEY_USAGE ((LPCSTR)36) #define PKCS_CTL ((LPCSTR)37) #define X509_MULTI_BYTE_UINT ((LPCSTR)38) #define X509_DSS_PUBLICKEY X509_MULTI_BYTE_UINT #define X509_DSS_PARAMETERS ((LPCSTR)39) #define X509_DSS_SIGNATURE ((LPCSTR)40) #define PKCS_RC2_CBC_PARAMETERS ((LPCSTR)41) #define PKCS_SMIME_CAPABILITIES ((LPCSTR)42) #define PKCS_RSA_PRIVATE_KEY ((LPCSTR)43) #define PKCS_PRIVATE_KEY_INFO ((LPCSTR)44) #define PKCS_ENCRYPTED_PRIVATE_KEY_INFO ((LPCSTR)45) #define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46) #define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT #define X509_DH_PARAMETERS ((LPCSTR)47) #define X509_ECC_SIGNATURE ((LPCSTR)47) #define PKCS_ATTRIBUTES ((LPCSTR)48) #define PKCS_SORTED_CTL ((LPCSTR)49) #define X942_DH_PARAMETERS ((LPCSTR)50) #define X509_BITS_WITHOUT_TRAILING_ZEROES ((LPCSTR)51) #define X942_OTHER_INFO ((LPCSTR)52) #define X509_CERT_PAIR ((LPCSTR)53) #define X509_ISSUING_DIST_POINT ((LPCSTR)54) #define X509_NAME_CONSTRAINTS ((LPCSTR)55) #define X509_POLICY_MAPPINGS ((LPCSTR)56) #define X509_POLICY_CONSTRAINTS ((LPCSTR)57) #define X509_CROSS_CERT_DIST_POINTS ((LPCSTR)58) #define CMC_DATA ((LPCSTR)59) #define CMC_RESPONSE ((LPCSTR)60) #define CMC_STATUS ((LPCSTR)61) #define CMC_ADD_EXTENSIONS ((LPCSTR)62) #define CMC_ADD_ATTRIBUTES ((LPCSTR)63) #define X509_CERTIFICATE_TEMPLATE ((LPCSTR)64) #define X509_OBJECT_IDENTIFIER ((LPCSTR)73) #define PKCS7_SIGNER_INFO ((LPCSTR)500) #define CMS_SIGNER_INFO ((LPCSTR)501) /* encode/decode flags */ #define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x00008 #define CRYPT_ENCODE_ALLOC_FLAG 0x08000 #define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000 #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG \ CERT_RDN_ENABLE_T61_UNICODE_FLAG #define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG \ CERT_RDN_ENABLE_UTF8_UNICODE_FLAG #define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG \ CERT_RDN_DISABLE_CHECK_TYPE_FLAG #define CRYPT_DECODE_NOCOPY_FLAG 0x00001 #define CRYPT_DECODE_TO_BE_SIGNED_FLAG 0x00002 #define CRYPT_DECODE_SHARE_OID_STRING_FLAG 0x00004 #define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x00008 #define CRYPT_DECODE_ALLOC_FLAG 0x08000 #define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG \ CERT_RDN_DISABLE_IE4_UTF8_FLAG #define CERT_STORE_SIGNATURE_FLAG 0x00000001 #define CERT_STORE_TIME_VALIDITY_FLAG 0x00000002 #define CERT_STORE_REVOCATION_FLAG 0x00000004 #define CERT_STORE_NO_CRL_FLAG 0x00010000 #define CERT_STORE_NO_ISSUER_FLAG 0x00020000 #define CERT_STORE_BASE_CRL_FLAG 0x00000100 #define CERT_STORE_DELTA_CRL_FLAG 0x00000200 /* subject types for CryptVerifyCertificateSignatureEx */ #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2 #define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 3 /* issuer types for CryptVerifyCertificateSignatureEx */ #define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT 2 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN 3 #define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 4 #define CRYPT_GET_URL_FROM_PROPERTY 0x00000001 #define CRYPT_GET_URL_FROM_EXTENSION 0x00000002 #define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x00000004 #define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE 0x00000008 /* Certificate name string types and flags */ #define CERT_SIMPLE_NAME_STR 1 #define CERT_OID_NAME_STR 2 #define CERT_X500_NAME_STR 3 #define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000 #define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000 #define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000 #define CERT_NAME_STR_CRLF_FLAG 0x08000000 #define CERT_NAME_STR_COMMA_FLAG 0x04000000 #define CERT_NAME_STR_REVERSE_FLAG 0x02000000 #define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000 #define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 0x00020000 #define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x00010000 #define CERT_NAME_EMAIL_TYPE 1 #define CERT_NAME_RDN_TYPE 2 #define CERT_NAME_ATTR_TYPE 3 #define CERT_NAME_SIMPLE_DISPLAY_TYPE 4 #define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5 #define CERT_NAME_DNS_TYPE 6 #define CERT_NAME_URL_TYPE 7 #define CERT_NAME_UPN_TYPE 8 #define CERT_NAME_ISSUER_FLAG 0x00000001 #define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x00010000 /* CryptFormatObject flags */ #define CRYPT_FORMAT_STR_MULTI_LINE 0x0001 #define CRYPT_FORMAT_STR_NO_HEX 0x0010 #define CRYPT_FORMAT_SIMPLE 0x0001 #define CRYPT_FORMAT_X509 0x0002 #define CRYPT_FORMAT_OID 0x0004 #define CRYPT_FORMAT_RDN_SEMICOLON 0x0100 #define CRYPT_FORMAT_RDN_CRLF 0x0200 #define CRYPT_FORMAT_RDN_UNQUOTE 0x0400 #define CRYPT_FORMAT_RDN_REVERSE 0x0800 #define CRYPT_FORMAT_COMMA 0x1000 #define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON #define CRYPT_FORMAT_CRLF CRYPT_FORMAT_RDN_CRLF /* CryptQueryObject types and flags */ #define CERT_QUERY_OBJECT_FILE 1 #define CERT_QUERY_OBJECT_BLOB 2 #define CERT_QUERY_CONTENT_CERT 1 #define CERT_QUERY_CONTENT_CTL 2 #define CERT_QUERY_CONTENT_CRL 3 #define CERT_QUERY_CONTENT_SERIALIZED_STORE 4 #define CERT_QUERY_CONTENT_SERIALIZED_CERT 5 #define CERT_QUERY_CONTENT_SERIALIZED_CTL 6 #define CERT_QUERY_CONTENT_SERIALIZED_CRL 7 #define CERT_QUERY_CONTENT_PKCS7_SIGNED 8 #define CERT_QUERY_CONTENT_PKCS7_UNSIGNED 9 #define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10 #define CERT_QUERY_CONTENT_PKCS10 11 #define CERT_QUERY_CONTENT_PFX 12 #define CERT_QUERY_CONTENT_CERT_PAIR 13 #define CERT_QUERY_CONTENT_FLAG_CERT (1 << CERT_QUERY_CONTENT_CERT) #define CERT_QUERY_CONTENT_FLAG_CTL (1 << CERT_QUERY_CONTENT_CTL) #define CERT_QUERY_CONTENT_FLAG_CRL (1 << CERT_QUERY_CONTENT_CRL) #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE \ (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE) #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT \ (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT) #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL \ (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL) #define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL \ (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL) #define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED \ (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED) #define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED \ (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED) #define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED \ (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED) #define CERT_QUERY_CONTENT_FLAG_PKCS10 (1 << CERT_QUERY_CONTENT_PKCS10) #define CERT_QUERY_CONTENT_FLAG_PFX (1 << CERT_QUERY_CONTENT_PFX) #define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR) #define CERT_QUERY_CONTENT_FLAG_ALL \ CERT_QUERY_CONTENT_FLAG_CERT | \ CERT_QUERY_CONTENT_FLAG_CTL | \ CERT_QUERY_CONTENT_FLAG_CRL | \ CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | \ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | \ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | \ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | \ CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | \ CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | \ CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | \ CERT_QUERY_CONTENT_FLAG_PKCS10 | \ CERT_QUERY_CONTENT_FLAG_PFX | \ CERT_QUERY_CONTENT_FLAG_CERT_PAIR #define CERT_QUERY_FORMAT_BINARY 1 #define CERT_QUERY_FORMAT_BASE64_ENCODED 2 #define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3 #define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY) #define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED \ (1 << CERT_QUERY_FORMAT_BASE64_ENCODED) #define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \ (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED) #define CERT_QUERY_FORMAT_FLAG_ALL \ CERT_QUERY_FORMAT_FLAG_BINARY | \ CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | \ CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \ #define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x00000001 #define CERT_SET_KEY_CONTEXT_PROP_ID 0x00000001 #define CERT_CREATE_SELFSIGN_NO_SIGN 1 #define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2 /* flags for CryptAcquireCertificatePrivateKey */ #define CRYPT_ACQUIRE_CACHE_FLAG 0x00000001 #define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x00000002 #define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x00000004 #define CRYPT_ACQUIRE_SILENT_FLAG 0x00000040 /* flags for CryptFindCertificateKeyProvInfo */ #define CRYPT_FIND_USER_KEYSET_FLAG 0x00000001 #define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x00000002 #define CRYPT_FIND_SILENT_KEYSET_FLAG 0x00000040 /* Chain engines and chains */ typedef HANDLE HCERTCHAINENGINE; #define HCCE_CURRENT_USER ((HCERTCHAINENGINE)NULL) #define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)1) #define CERT_CHAIN_CACHE_END_CERT 0x00000001 #define CERT_CHAIN_THREAD_STORE_SYNC 0x00000002 #define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x00000004 #define CERT_CHAIN_USE_LOCAL_MACHINE_STORE 0x00000008 #define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x00000010 #define CERT_CHAIN_ENABLE_SHARE_STORE 0x00000020 typedef struct _CERT_CHAIN_ENGINE_CONFIG { DWORD cbSize; HCERTSTORE hRestrictedRoot; HCERTSTORE hRestrictedTrust; HCERTSTORE hRestrictedOther; DWORD cAdditionalStore; HCERTSTORE *rghAdditionalStore; DWORD dwFlags; DWORD dwUrlRetrievalTimeout; DWORD MaximumCachedCertificates; DWORD CycleDetectionModulus; HCERTSTORE hExclusiveRoot; HCERTSTORE hExclusiveRootTrustedPeople; } CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG; /* message-related definitions */ typedef BOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg, BYTE *pbData, DWORD cbData, BOOL fFinal); #define CMSG_INDEFINITE_LENGTH 0xffffffff typedef struct _CMSG_STREAM_INFO { DWORD cbContent; PFN_CMSG_STREAM_OUTPUT pfnStreamOutput; void *pvArg; } CMSG_STREAM_INFO, *PCMSG_STREAM_INFO; typedef struct _CERT_ISSUER_SERIAL_NUMBER { CERT_NAME_BLOB Issuer; CRYPT_INTEGER_BLOB SerialNumber; } CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER; typedef struct _CERT_ID { DWORD dwIdChoice; union { CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber; CRYPT_HASH_BLOB KeyId; CRYPT_HASH_BLOB HashId; } DUMMYUNIONNAME; } CERT_ID, *PCERT_ID; #define CERT_ID_ISSUER_SERIAL_NUMBER 1 #define CERT_ID_KEY_IDENTIFIER 2 #define CERT_ID_SHA1_HASH 3 #ifndef USE_WC_PREFIX #undef CMSG_DATA /* may be defined by sys/socket.h */ #define CMSG_DATA 1 #define CMSG_SIGNED 2 #define CMSG_ENVELOPED 3 #define CMSG_SIGNED_AND_ENVELOPED 4 #define CMSG_HASHED 5 #define CMSG_ENCRYPTED 6 #define CMSG_ALL_FLAGS ~0U #define CMSG_DATA_FLAG (1 << CMSG_DATA) #define CMSG_SIGNED_FLAG (1 << CMSG_SIGNED) #define CMSG_ENVELOPED_FLAG (1 << CMSG_ENVELOPED) #define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED) #define CMSG_ENCRYPTED_FLAG (1 << CMSG_ENCRYPTED) #else #define WC_CMSG_DATA 1 #define WC_CMSG_SIGNED 2 #define WC_CMSG_ENVELOPED 3 #define WC_CMSG_SIGNED_AND_ENVELOPED 4 #define WC_CMSG_HASHED 5 #define WC_CMSG_ENCRYPTED 6 #define WC_CMSG_ALL_FLAGS ~0U #define WC_CMSG_DATA_FLAG (1 << WC_CMSG_DATA) #define WC_CMSG_SIGNED_FLAG (1 << WC_CMSG_SIGNED) #define WC_CMSG_ENVELOPED_FLAG (1 << WC_CMSG_ENVELOPED) #define WC_CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << WC_CMSG_SIGNED_AND_ENVELOPED) #define WC_CMSG_ENCRYPTED_FLAG (1 << WC_CMSG_ENCRYPTED) #endif typedef struct _CMSG_SIGNER_ENCODE_INFO { DWORD cbSize; PCERT_INFO pCertInfo; HCRYPTPROV hCryptProv; DWORD dwKeySpec; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; void *pvHashAuxInfo; DWORD cAuthAttr; PCRYPT_ATTRIBUTE rgAuthAttr; DWORD cUnauthAttr; PCRYPT_ATTRIBUTE rgUnauthAttr; #ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS CERT_ID SignerId; CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; void *pvHashEncryptionAuxInfo; #endif } CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO; typedef struct _CMSG_SIGNED_ENCODE_INFO { DWORD cbSize; DWORD cSigners; PCMSG_SIGNER_ENCODE_INFO rgSigners; DWORD cCertEncoded; PCERT_BLOB rgCertEncoded; DWORD cCrlEncoded; PCRL_BLOB rgCrlEncoded; #ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS DWORD cAttrCertEncoded; PCERT_BLOB rgAttrCertEncoded; #endif } CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO; typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO { DWORD cbSize; CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; void *pvKeyEncryptionAuxInfo; HCRYPTPROV_LEGACY hCryptProv; CRYPT_BIT_BLOB RecipientPublicKey; CERT_ID RecipientId; } CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO; typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO { DWORD cbSize; CRYPT_BIT_BLOB RecipientPublicKey; CERT_ID RecipientId; FILETIME Date; PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr; } CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO; typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO { DWORD cbSize; CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; void *pvKeyEncryptionAuxInfo; CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm; void *pvKeyWrapAuxInfo; HCRYPTPROV_LEGACY hCryptProv; DWORD dwKeySpec; DWORD dwKeyChoice; union { PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm; PCERT_ID pSenderId; } DUMMYUNIONNAME; CRYPT_DATA_BLOB UserKeyingMaterial; DWORD cRecipientEncryptedKeys; PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys; } CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO; #define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1 #define CMSG_KEY_AGREE_STATIC_KEY_CHOICE 2 typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO { DWORD cbSize; CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; void *pvKeyEncryptionAuxInfo; HCRYPTPROV hCryptProv; DWORD dwKeyChoice; union { HCRYPTKEY hKeyEncryptionKey; void *pvKeyEncryptionKey; } DUMMYUNIONNAME; CRYPT_DATA_BLOB KeyId; FILETIME Date; PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr; } CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO; #define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1 typedef struct _CMSG_RECIPIENT_ENCODE_INFO { DWORD dwRecipientChoice; union { PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans; PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree; PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList; } DUMMYUNIONNAME; } CMSG_RECIPIENT_ENCODE_INFO, *PCMSG_RECIPIENT_ENCODE_INFO; #define CMSG_KEY_TRANS_RECIPIENT 1 #define CMSG_KEY_AGREE_RECIPIENT 2 #define CMSG_MAIL_LIST_RECIPIENT 3 typedef struct _CMSG_ENVELOPED_ENCODE_INFO { DWORD cbSize; HCRYPTPROV_LEGACY hCryptProv; CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; void *pvEncryptionAuxInfo; DWORD cRecipients; PCERT_INFO *rgpRecipientCert; #ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients; DWORD cCertEncoded; PCERT_BLOB rgCertEncoded; DWORD cCrlEncoded; PCRL_BLOB rgCrlEncoded; DWORD cAttrCertEncoded; PCERT_BLOB rgAttrCertEncoded; DWORD cUnprotectedAttr; PCRYPT_ATTRIBUTE rgUnprotectedAttr; #endif } CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO; typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO { DWORD cbSize; CMSG_SIGNED_ENCODE_INFO SignedInfo; CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo; } CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO, *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO; typedef struct _CMSG_HASHED_ENCODE_INFO { DWORD cbSize; HCRYPTPROV_LEGACY hCryptProv; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; void *pvHashAuxInfo; } CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO; typedef struct _CMSG_ENCRYPTED_ENCODE_INFO { DWORD cbSize; CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; void *pvEncryptionAuxInfo; } CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO; #define CMSG_BARE_CONTENT_FLAG 0x00000001 #define CMSG_LENGTH_ONLY_FLAG 0x00000002 #define CMSG_DETACHED_FLAG 0x00000004 #define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008 #define CMSG_CONTENTS_OCTETS_FLAG 0x00000010 #define CMSG_MAX_LENGTH_FLAG 0x00000020 #define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x00000040 #define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x00008000 #define CMSG_CTRL_VERIFY_SIGNATURE 1 #define CMSG_CTRL_DECRYPT 2 #define CMSG_CTRL_VERIFY_HASH 5 #define CMSG_CTRL_ADD_SIGNER 6 #define CMSG_CTRL_DEL_SIGNER 7 #define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8 #define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9 #define CMSG_CTRL_ADD_CERT 10 #define CMSG_CTRL_DEL_CERT 11 #define CMSG_CTRL_ADD_CRL 12 #define CMSG_CTRL_DEL_CRL 13 #define CMSG_CTRL_ADD_ATTR_CERT 14 #define CMSG_CTRL_DEL_ATTR_CERT 15 #define CMSG_CTRL_KEY_TRANS_DECRYPT 16 #define CMSG_CTRL_KEY_AGREE_DECRYPT 17 #define CMSG_CTRL_MAIL_LIST_DECRYPT 18 #define CMSG_CTRL_VERIFY_SIGNATURE_EX 19 #define CMSG_CTRL_ADD_CMS_SIGNER_INFO 20 typedef struct _CMSG_CTRL_DECRYPT_PARA { DWORD cbSize; HCRYPTPROV hCryptProv; DWORD dwKeySpec; DWORD dwRecipientIndex; } CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA; typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA { DWORD cbSize; DWORD dwSignerIndex; CRYPT_DATA_BLOB blob; } CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA, *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA; typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA { DWORD cbSize; DWORD dwSignerIndex; DWORD dwUnauthAttrIndex; } CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA, *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA; typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA { DWORD cbSize; HCRYPTPROV hCryptProv; DWORD dwSignerIndex; DWORD dwSignerType; void *pvSigner; } CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA, *PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA; #define CMSG_VERIFY_SIGNER_PUBKEY 1 #define CMSG_VERIFY_SIGNER_CERT 2 #define CMSG_VERIFY_SIGNER_CHAIN 3 #define CMSG_VERIFY_SIGNER_NULL 4 #define CMSG_TYPE_PARAM 1 #define CMSG_CONTENT_PARAM 2 #define CMSG_BARE_CONTENT_PARAM 3 #define CMSG_INNER_CONTENT_TYPE_PARAM 4 #define CMSG_SIGNER_COUNT_PARAM 5 #define CMSG_SIGNER_INFO_PARAM 6 #define CMSG_SIGNER_CERT_INFO_PARAM 7 #define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8 #define CMSG_SIGNER_AUTH_ATTR_PARAM 9 #define CMSG_SIGNER_UNAUTH_ATTR_PARAM 10 #define CMSG_CERT_COUNT_PARAM 11 #define CMSG_CERT_PARAM 12 #define CMSG_CRL_COUNT_PARAM 13 #define CMSG_CRL_PARAM 14 #define CMSG_ENVELOPE_ALGORITHM_PARAM 15 #define CMSG_RECIPIENT_COUNT_PARAM 17 #define CMSG_RECIPIENT_INDEX_PARAM 18 #define CMSG_RECIPIENT_INFO_PARAM 19 #define CMSG_HASH_ALGORITHM_PARAM 20 #define CMSG_HASH_DATA_PARAM 21 #define CMSG_COMPUTED_HASH_PARAM 22 #define CMSG_ENCRYPT_PARAM 26 #define CMSG_ENCRYPTED_DIGEST 27 #define CMSG_ENCODED_SIGNER 28 #define CMSG_ENCODED_MESSAGE 29 #define CMSG_VERSION_PARAM 30 #define CMSG_ATTR_CERT_COUNT_PARAM 31 #define CMSG_ATTR_CERT_PARAM 32 #define CMSG_CMS_RECIPIENT_COUNT_PARAM 33 #define CMSG_CMS_RECIPIENT_INDEX_PARAM 34 #define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35 #define CMSG_CMS_RECIPIENT_INFO_PARAM 36 #define CMSG_UNPROTECTED_ATTR_PARAM 37 #define CMSG_SIGNER_CERT_ID_PARAM 38 #define CMSG_CMS_SIGNER_INFO_PARAM 39 typedef struct _CMSG_CMS_SIGNER_INFO { DWORD dwVersion; CERT_ID SignerId; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; CRYPT_DATA_BLOB EncryptedHash; CRYPT_ATTRIBUTES AuthAttrs; CRYPT_ATTRIBUTES UnauthAttrs; } CMSG_CMS_SIGNER_INFO, *PCMSG_CMS_SIGNER_INFO; typedef CRYPT_ATTRIBUTES CMSG_ATTR, *PCMSG_ATTR; #define CMSG_SIGNED_DATA_V1 1 #define CMSG_SIGNED_DATA_V3 3 #define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1 #define CMSG_SIGNED_DATA_CMS_VERSION CMSG_SIGNED_DATA_V3 #define CMSG_SIGNER_INFO_V1 1 #define CMSG_SIGNER_INFO_V3 3 #define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1 #define CMSG_SIGNER_INFO_CMS_VERSION CMSG_SIGNER_INFO_V3 #define CMSG_HASHED_DATA_V0 0 #define CMSG_HASHED_DATA_V2 2 #define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0 #define CMSG_HASHED_DATA_CMS_VERSION CMSG_HASHED_DATA_V2 #define CMSG_ENVELOPED_DATA_V0 0 #define CMSG_ENVELOPED_DATA_V2 2 #define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0 #define CMSG_ENVELOPED_DATA_CMS_VERSION CMSG_ENVELOPED_DATA_V2 typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO { DWORD dwVersion; CERT_ID RecipientId; CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; CRYPT_DATA_BLOB EncryptedKey; } CMSG_KEY_TRANS_RECIPIENT_INFO, *PCMSG_KEY_TRANS_RECIPIENT_INFO; typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO { CERT_ID RecipientId; CRYPT_DATA_BLOB EncryptedKey; PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr; } CMSG_RECIPIENT_ENCRYPTED_KEY_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO; typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO { DWORD dwVersion; DWORD dwOriginatorChoice; union { CERT_ID OriginatorCertId; CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo; } DUMMYUNIONNAME; CRYPT_ALGORITHM_IDENTIFIER UserKeyingMaterial; DWORD cRecipientEncryptedKeys; PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys; } CMSG_KEY_AGREE_RECIPIENT_INFO, *PCMSG_KEY_AGREE_RECIPIENT_INFO; #define CMSG_KEY_AGREE_ORIGINATOR_CERT 1 #define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2 typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO { DWORD dwVersion; CRYPT_DATA_BLOB KeyId; CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; CRYPT_DATA_BLOB EncryptedKey; FILETIME Date; PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr; } CMSG_MAIL_LIST_RECIPIENT_INFO, *PCMSG_MAIL_LIST_RECIPIENT_INFO; typedef struct _CMSG_CMS_RECIPIENT_INFO { DWORD dwRecipientChoice; union { PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans; PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree; PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList; } DUMMYUNIONNAME; } CMSG_CMS_RECIPIENT_INFO, *PCMSG_CMS_RECIPIENT_INFO; #define CMSG_ENVELOPED_RECIPIENT_V0 0 #define CMSG_ENVELOPED_RECIPIENT_V2 2 #define CMSG_ENVELOPED_RECIPIENT_V3 3 #define CMSG_ENVELOPED_RECIPIENT_V4 4 #define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0 #define CMSG_KEY_TRANS_CMS_VERSION CMSG_ENVELOPED_RECIPIENT_V2 #define CMSG_KEY_AGREE_VERSION CMSG_ENVELOPED_RECIPIENT_V3 #define CMSG_MAIL_LIST_VERSION CMSG_ENVELOPED_RECIPIENT_V4 typedef void * (WINAPI *PFN_CMSG_ALLOC)(size_t cb); typedef void (WINAPI *PFN_CMSG_FREE)(void *pv); typedef struct _CMSG_CONTENT_ENCRYPT_INFO { DWORD cbSize; HCRYPTPROV hCryptProv; CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; void *pvEncryptionAuxInfo; DWORD cRecipients; PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients; PFN_CMSG_ALLOC pfnAlloc; PFN_CMSG_FREE pfnFree; DWORD dwEncryptFlags; HCRYPTKEY hContentEncryptKey; DWORD dwFlags; } CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO; typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO { DWORD cbSize; DWORD dwRecipientIndex; CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; CRYPT_DATA_BLOB EncryptedKey; DWORD dwFlags; } CMSG_KEY_TRANS_ENCRYPT_INFO, *PCMSG_KEY_TRANS_ENCRYPT_INFO; typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA { DWORD cbSize; HCRYPTPROV hCryptProv; DWORD dwKeySpec; PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans; DWORD dwRecipientIndex; } CMSG_CTRL_KEY_TRANS_DECRYPT_PARA, *PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA; typedef struct _CERT_STRONG_SIGN_SERIALIZED_INFO { DWORD dwFlags; WCHAR *pwszCNGSignHashAlgids; WCHAR *pwszCNGPubKeyMinBitLengths; } CERT_STRONG_SIGN_SERIALIZED_INFO, *PCERT_STRONG_SIGN_SERIALIZED_INFO; typedef struct _CERT_STRONG_SIGN_PARA { DWORD cbSize; DWORD dwInfoChoice; union { void *pvInfo; CERT_STRONG_SIGN_SERIALIZED_INFO *pSerializedInfo; char *pszOID; } DUMMYUNIONNAME; } CERT_STRONG_SIGN_PARA, *PCERT_STRONG_SIGN_PARA; #define CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE 1 #define CERT_STRONG_SIGN_OID_INFO_CHOICE 2 #define CERT_STRONG_SIGN_ENABLE_CRL_CHECK 0x1 #define CERT_STRONG_SIGN_ENABLE_OCSP_CHECK 0x2 typedef BOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)( PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags, void *pvReserved); typedef BOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)( PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo, PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo, DWORD dwFlags, void *pvReserved); typedef BOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)( PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags, void *pvReserved, HCRYPTKEY *phContentEncryptKey); /* CryptMsgGetAndVerifySigner flags */ #define CMSG_TRUSTED_SIGNER_FLAG 0x1 #define CMSG_SIGNER_ONLY_FLAG 0x2 #define CMSG_USE_SIGNER_INDEX_FLAG 0x4 /* CryptMsgSignCTL flags */ #define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x00008000 /* CryptMsgEncodeAndSignCTL flags */ #define CMSG_ENCODED_SORTED_CTL_FLAG 0x1 #define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2 /* PFXImportCertStore flags */ #define CRYPT_USER_KEYSET 0x00001000 #define PKCS12_IMPORT_RESERVED_MASK 0xffff0000 /* PFXExportCertStore flags */ #define REPORT_NO_PRIVATE_KEY 0x00000001 #define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x00000002 #define EXPORT_PRIVATE_KEYS 0x00000004 #define PKCS12_EXPORT_RESERVED_MASK 0xffff0000 #define CRYPT_USERDATA 0x00000001 /* function declarations */ /* advapi32.dll */ WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD); WINADVAPI BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *, LPCWSTR, LPCWSTR, DWORD, DWORD); #define CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext) WINADVAPI BOOL WINAPI CryptGenRandom (HCRYPTPROV, DWORD, BYTE *); WINADVAPI BOOL WINAPI CryptContextAddRef (HCRYPTPROV, DWORD *, DWORD); WINADVAPI BOOL WINAPI CryptCreateHash (HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH *); WINADVAPI BOOL WINAPI CryptDecrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *); WINADVAPI BOOL WINAPI CryptDeriveKey (HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY *); WINADVAPI BOOL WINAPI CryptDestroyHash (HCRYPTHASH); WINADVAPI BOOL WINAPI CryptDestroyKey (HCRYPTKEY); WINADVAPI BOOL WINAPI CryptDuplicateKey (HCRYPTKEY, DWORD *, DWORD, HCRYPTKEY *); WINADVAPI BOOL WINAPI CryptDuplicateHash (HCRYPTHASH, DWORD *, DWORD, HCRYPTHASH *); WINADVAPI BOOL WINAPI CryptEncrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *, DWORD); WINADVAPI BOOL WINAPI CryptEnumProvidersA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *); WINADVAPI BOOL WINAPI CryptEnumProvidersW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *); #define CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders) WINADVAPI BOOL WINAPI CryptEnumProviderTypesA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *); WINADVAPI BOOL WINAPI CryptEnumProviderTypesW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *); #define CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes) WINADVAPI BOOL WINAPI CryptExportKey (HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, BYTE *, DWORD *); WINADVAPI BOOL WINAPI CryptGenKey (HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY *); WINADVAPI BOOL WINAPI CryptGetKeyParam (HCRYPTKEY, DWORD, BYTE *, DWORD *, DWORD); WINADVAPI BOOL WINAPI CryptGetHashParam (HCRYPTHASH, DWORD, BYTE *, DWORD *, DWORD); WINADVAPI BOOL WINAPI CryptGetProvParam (HCRYPTPROV, DWORD, BYTE *, DWORD *, DWORD); WINADVAPI BOOL WINAPI CryptGetDefaultProviderA (DWORD, DWORD *, DWORD, LPSTR, DWORD *); WINADVAPI BOOL WINAPI CryptGetDefaultProviderW (DWORD, DWORD *, DWORD, LPWSTR, DWORD *); #define CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider) WINADVAPI BOOL WINAPI CryptGetUserKey (HCRYPTPROV, DWORD, HCRYPTKEY *); WINADVAPI BOOL WINAPI CryptHashData (HCRYPTHASH, const BYTE *, DWORD, DWORD); WINADVAPI BOOL WINAPI CryptHashSessionKey (HCRYPTHASH, HCRYPTKEY, DWORD); WINADVAPI BOOL WINAPI CryptImportKey (HCRYPTPROV, const BYTE *, DWORD, HCRYPTKEY, DWORD, HCRYPTKEY *); WINADVAPI BOOL WINAPI CryptReleaseContext (HCRYPTPROV, ULONG_PTR); WINADVAPI BOOL WINAPI CryptSetHashParam (HCRYPTHASH, DWORD, const BYTE *, DWORD); WINADVAPI BOOL WINAPI CryptSetKeyParam (HCRYPTKEY, DWORD, const BYTE *, DWORD); WINADVAPI BOOL WINAPI CryptSetProviderA (LPCSTR, DWORD); WINADVAPI BOOL WINAPI CryptSetProviderW (LPCWSTR, DWORD); #define CryptSetProvider WINELIB_NAME_AW(CryptSetProvider) WINADVAPI BOOL WINAPI CryptSetProviderExA (LPCSTR, DWORD, DWORD *, DWORD); WINADVAPI BOOL WINAPI CryptSetProviderExW (LPCWSTR, DWORD, DWORD *, DWORD); #define CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx) WINADVAPI BOOL WINAPI CryptSetProvParam (HCRYPTPROV, DWORD, const BYTE *, DWORD); WINADVAPI BOOL WINAPI CryptSignHashA (HCRYPTHASH, DWORD, LPCSTR, DWORD, BYTE *, DWORD *); WINADVAPI BOOL WINAPI CryptSignHashW (HCRYPTHASH, DWORD, LPCWSTR, DWORD, BYTE *, DWORD *); #define CryptSignHash WINELIB_NAME_AW(CryptSignHash) WINADVAPI BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCSTR, DWORD); WINADVAPI BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCWSTR, DWORD); #define CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature) /* crypt32.dll functions */ LPVOID WINAPI CryptMemAlloc(ULONG cbSize) __WINE_ALLOC_SIZE(1); LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize) __WINE_ALLOC_SIZE(2); VOID WINAPI CryptMemFree(LPVOID pv); BOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary, DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString); BOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary, DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString); #define CryptBinaryToString WINELIB_NAME_AW(CryptBinaryToString) BOOL WINAPI CryptStringToBinaryA(LPCSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags); BOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString, DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, DWORD *pdwSkip, DWORD *pdwFlags); #define CryptStringToBinary WINELIB_NAME_AW(CryptStringToBinary) BOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags, PHCRYPTASYNC phAsync); BOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid, LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree); BOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid, LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree); BOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync); BOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD,LPCSTR,DWORD,LPCWSTR); BOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR); BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR szValueName, DWORD *pdwValueType, BYTE *pbValueData, DWORD *pcbValueData); BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType, const BYTE *pbValueData, DWORD cbValueData); BOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD,LPCSTR,LPCWSTR); BOOL WINAPI CryptUnregisterOIDFunction(DWORD,LPCSTR,LPCSTR); BOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc); HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR,DWORD); BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList); BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr); BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, HCRYPTOIDFUNCADDR *phFuncAddr); BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr, DWORD dwFlags); BOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule, DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry, const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags); BOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv, DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags, void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext); BOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext, DWORD dwFlags, void *pvReserved); BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo); PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey, DWORD dwGroupId); BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo, DWORD dwFlags); BOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo); LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName); LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId); DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId); /* cert store functions */ HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara); HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv, LPCSTR szSubSystemProtocol); HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv, LPCWSTR szSubSystemProtocol); #define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore) PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrev); PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pPrev); PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore, PCCTL_CONTEXT pPrev); BOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags, void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum); BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara, void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum); BOOL WINAPI CertRegisterSystemStore(const void *store, DWORD flags, CERT_SYSTEM_STORE_INFO *info, void *reserved); BOOL WINAPI CertUnregisterSystemStore(const void *store, DWORD flags); BOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags, void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum); BOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved); BOOL WINAPI CertUnregisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags, LPCWSTR pwszStoreName); BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags); BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority); void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore); BOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig, HCERTCHAINENGINE *phChainEngine); BOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine); VOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine); BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore, PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, PCCERT_CHAIN_CONTEXT *ppChainContext); PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain( PCCERT_CHAIN_CONTEXT pChainContext); VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext); PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext); BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID, PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara, PCERT_CHAIN_POLICY_STATUS pPolicyStatus); DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext, DWORD dwPropId); BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData); BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData); DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext, DWORD dwPropId); BOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext, DWORD dwPropId, void *pvData, DWORD *pcbData); BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext, DWORD dwPropId, DWORD dwFlags, const void *pvData); DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext, DWORD dwPropId); BOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCTLContext, void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier, PCRYPT_DER_BLOB pEncodedAttributes); BOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext, DWORD dwPropId, void *pvData, DWORD *pcbData); BOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCTLContext, DWORD dwPropId, DWORD dwFlags, const void *pvData); BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, void *pvData, DWORD *pcbData); BOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, DWORD dwFlags, const void *pvData); BOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara); HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore); BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags ); BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext ); BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext ); BOOL WINAPI CertFreeCTLContext( PCCTL_CONTEXT pCtlContext ); BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext); BOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext ); BOOL WINAPI CertAddCTLContextToStore( HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext ); BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext); BOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext); BOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext); BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded, DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext); BOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR pszCertStoreName, const BYTE *pbCertEncoded, DWORD cbCertEncoded); BOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR pszCertStoreName, const BYTE *pbCertEncoded, DWORD cbCertEncoded); #define CertAddEncodedCertificateToSystemStore \ WINELIB_NAME_AW(CertAddEncodedCertificateToSystemStore) BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext); BOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded, DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext); BOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore, const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags, DWORD dwContextTypeFlags, DWORD *pdwContentType, const void **ppvContext); BOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType, PCERT_INFO pCertId1, PCERT_INFO pCertId2); BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType, PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2); BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2); BOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2); DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey); const void * WINAPI CertCreateContext(DWORD dwContextType, DWORD dwEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCERT_CREATE_CONTEXT_PARA pCreatePara); PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded); PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType, const BYTE* pbCrlEncoded, DWORD cbCrlEncoded); PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded); PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv, PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags, PCRYPT_KEY_PROV_INFO pKeyProvInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime, PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions); BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext); BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext); BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext); PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext( PCCERT_CONTEXT pCertContext); PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext); PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext); PCCERT_CONTEXT WINAPI CertFindCertificateInStore( HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext ); PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext); PCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext); PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext, DWORD *pdwFlags); PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, PCERT_INFO pCertId); PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags); BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement); BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement); BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement); BOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType, PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage); BOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags, PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage); BOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, PCERT_ENHKEY_USAGE pUsage); BOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext, LPCSTR pszUsageIdentifier); BOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext, LPCSTR pszUsageIdentifier); BOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts, int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs); BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded); BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void *pvEncoded, DWORD *pcbEncoded); BOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo); BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo); BOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat); BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash); BOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, BYTE *pbComputedHash, DWORD *pcbComputedHash); BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash); BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType, DWORD* pdwFormatType, HCERTSTORE* phCertStore, HCRYPTMSG* phMsg, const void** ppvContext); BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned, DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature); BOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded); BOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, PCERT_PUBLIC_KEY_INFO pPublicKey); BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject, DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved); PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId, DWORD cAttr, CRYPT_ATTRIBUTE rgAttr[]); PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[]); PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName); BOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier, PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved, PCRYPT_DER_BLOB pEncodedAttributes); BOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType, DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN); BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved); BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved, PCRL_ENTRY *ppCrlEntry); BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType, PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]); BOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject, PCCERT_CONTEXT pIssuer, DWORD *pdwFlags); LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify, PCRL_INFO pCrlInfo); LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify, PCERT_INFO pCertInfo); BOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo, PCERT_INFO pIssuerInfo); BOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType, DWORD dwSubjectType, void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags, PCTL_VERIFY_USAGE_PARA pVerifyUsagePara, PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus); BOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType, DWORD cContext, PVOID rgpvContext[], DWORD dwFlags, PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus); BOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo); BOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo); BOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey); BOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg, DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey); BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert, DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec, BOOL *pfCallerFreeProv); BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert, DWORD dwFlags, void *pvReserved); BOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr, DATA_BLOB* pOptionalEntropy, PVOID pvReserved, CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut ); BOOL WINAPI CryptUnprotectData( DATA_BLOB* pDataIn, LPWSTR* ppszDataDescr, DATA_BLOB* pOptionalEntropy, PVOID pvReserved, CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut ); BOOL WINAPI CryptProtectMemory(void *pData, DWORD cbData, DWORD dwFlags); BOOL WINAPI CryptUnprotectMemory(void *pData, DWORD cbData, DWORD dwFlags); DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString); DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString); #define CertGetNameString WINELIB_NAME_AW(CertGetNameString) DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPSTR psz, DWORD csz); DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPWSTR psz, DWORD csz); #define CertRDNValueToStr WINELIB_NAME_AW(CertRDNValueToStr) DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPSTR psz, DWORD csz); DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz); #define CertNameToStr WINELIB_NAME_AW(CertNameToStr) BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, LPCSTR *ppszError); BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, LPCWSTR *ppszError); #define CertStrToName WINELIB_NAME_AW(CertStrToName) DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, DWORD cbData); BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg); BOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags, DWORD dwCtrlType, const void *pvCtrlPara); BOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg, DWORD dwIndex, DWORD dwCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners); BOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, DWORD cCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature, PDWORD pcbCountersignature); HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg); BOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType, PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded); BOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg, DWORD cSignerStore, HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner, DWORD *pdwSignerIndex); BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData); HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo, PCMSG_STREAM_INFO pStreamInfo); HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo); BOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent, DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded); BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal); BOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV_LEGACY hCryptProv, DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, PCERT_INFO pciCountersigner); BOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV_LEGACY hCryptProv, DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved); BOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara, BOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob); BOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara, const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob, DWORD *pcbSignedBlob); BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob, BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert); BOOL WINAPI CryptVerifyMessageSignatureWithKey( PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara, PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob, DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded); BOOL WINAPI CryptVerifyDetachedMessageSignature( PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], PCCERT_CONTEXT *ppSignerCert); LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType, const BYTE *pbSignedBlob, DWORD cbSignedBlob); BOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob, DWORD *pcbEncryptedBlob); BOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted, DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert); BOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara, PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted, DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob, DWORD *pcbSignedAndEncryptedBlob); BOOL WINAPI CryptDecryptAndVerifyMessageSignature( PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted, DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert); HCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob, DWORD cbSignedBlob); BOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags, PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType, DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded, DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert); BOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara, BOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob, BYTE *pbComputedHash, DWORD *pcbComputedHash); BOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara, BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed, DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash); BOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara, BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash, DWORD *pcbComputedHash); /* PFX functions */ HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags); BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX); BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags); BOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, void *pvReserved, DWORD dwFlags); BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags); /* cryptnet.dll functions */ BOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval); BOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags, PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo, DWORD *pcbUrlInfo, LPVOID pvReserved); BOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid, void *pvPara, PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout, void **ppvObject, PCRYPT_CREDENTIALS pCredentials, void *pvReserved); BOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid, void *pvPara, PCCERT_CONTEXT pIssuer, DWORD dwFlags, void *pvReserved); BOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel, const void *pvArg, DWORD dwFlags, void *pvReserved); BOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags, void *pvReserved); BOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszURL, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo); BOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszURL, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo); #define CryptRetrieveObjectByUrl WINELIB_NAME_AW(CryptRetrieveObjectByUrl) /* Not found in crypt32.dll but in softpub.dll */ HRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains, DWORD *pcbCertChains, DWORD *pcCertChains, BYTE* pbEncodedIssuerName, DWORD cbEncodedIssuerName, LPCWSTR pwszPurpose, DWORD dwKeySpec); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/windef.h ================================================ /* * Basic types definitions * * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINDEF_ #define _WINDEF_ #ifndef WINVER #define WINVER 0x0500 #endif #ifndef NO_STRICT # ifndef STRICT # define STRICT # endif /* STRICT */ #endif /* NO_STRICT */ #ifdef __cplusplus extern "C" { #endif /* Calling conventions definitions */ #if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__)) && !defined(_WIN64) #define _WIN64 #endif #ifndef _WIN64 # if defined(__i386__) && !defined(_X86_) # define _X86_ # endif # if defined(_X86_) && !defined(__i386__) # define __i386__ # endif #endif #ifndef __stdcall # ifdef __i386__ # ifdef __GNUC__ # if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__) # define __stdcall __attribute__((__stdcall__)) __attribute__((__force_align_arg_pointer__)) # else # define __stdcall __attribute__((__stdcall__)) # endif # elif defined(_MSC_VER) /* Nothing needs to be done. __stdcall already exists */ # else # error You need to define __stdcall for your compiler # endif # elif defined(__x86_64__) && defined (__GNUC__) # if (__GNUC__ > 5) || ((__GNUC__ == 5) && (__GNUC_MINOR__ >= 3)) # define __stdcall __attribute__((ms_abi)) __attribute__((__force_align_arg_pointer__)) # else # define __stdcall __attribute__((ms_abi)) # endif # elif defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) # define __stdcall __attribute__((pcs("aapcs-vfp"))) # elif defined(__aarch64__) && defined (__GNUC__) # define __stdcall __attribute__((ms_abi)) # else /* __i386__ */ # define __stdcall # endif /* __i386__ */ #endif /* __stdcall */ #ifndef __cdecl # if defined(__i386__) && defined(__GNUC__) # if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__) # define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__)) # else # define __cdecl __attribute__((__cdecl__)) # endif # elif defined(__x86_64__) && defined (__GNUC__) # if (__GNUC__ > 5) || ((__GNUC__ == 5) && (__GNUC_MINOR__ >= 3)) # define __cdecl __attribute__((ms_abi)) __attribute__((__force_align_arg_pointer__)) # else # define __cdecl __attribute__((ms_abi)) # endif # elif defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) # define __cdecl __attribute__((pcs("aapcs-vfp"))) # elif defined(__aarch64__) && defined (__GNUC__) # define __cdecl __attribute__((ms_abi)) # elif !defined(_MSC_VER) # define __cdecl # endif #endif /* __cdecl */ #ifndef __ms_va_list # if (defined(__x86_64__) || defined(__aarch64__)) && defined (__GNUC__) # define __ms_va_list __builtin_ms_va_list # define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg) # define __ms_va_end(list) __builtin_ms_va_end(list) # define __ms_va_copy(dest,src) __builtin_ms_va_copy(dest,src) # else # define __ms_va_list va_list # define __ms_va_start(list,arg) va_start(list,arg) # define __ms_va_end(list) va_end(list) # ifdef va_copy # define __ms_va_copy(dest,src) va_copy(dest,src) # else # define __ms_va_copy(dest,src) ((dest) = (src)) # endif # endif #endif #if defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__) # define WINAPIV __attribute__((pcs("aapcs"))) #else # define WINAPIV __cdecl #endif #ifdef __WINESRC__ #define __ONLY_IN_WINELIB(x) do_not_use_this_in_wine #else #define __ONLY_IN_WINELIB(x) x #endif #ifndef pascal #define pascal __ONLY_IN_WINELIB(__stdcall) #endif #ifndef _pascal #define _pascal __ONLY_IN_WINELIB(__stdcall) #endif #ifndef _stdcall #define _stdcall __ONLY_IN_WINELIB(__stdcall) #endif #ifndef _fastcall #define _fastcall __ONLY_IN_WINELIB(__stdcall) #endif #ifndef __fastcall #define __fastcall __ONLY_IN_WINELIB(__stdcall) #endif #ifndef __export #define __export __ONLY_IN_WINELIB(__stdcall) #endif #ifndef cdecl #define cdecl __ONLY_IN_WINELIB(__cdecl) #endif #ifndef _cdecl #define _cdecl __ONLY_IN_WINELIB(__cdecl) #endif #ifndef near #define near __ONLY_IN_WINELIB(/* nothing */) #endif #ifndef far #define far __ONLY_IN_WINELIB(/* nothing */) #endif #ifndef _near #define _near __ONLY_IN_WINELIB(/* nothing */) #endif #ifndef _far #define _far __ONLY_IN_WINELIB(/* nothing */) #endif #ifndef NEAR #define NEAR __ONLY_IN_WINELIB(/* nothing */) #endif #ifndef FAR #define FAR __ONLY_IN_WINELIB(/* nothing */) #endif #ifndef _MSC_VER # ifndef _declspec # define _declspec(x) __ONLY_IN_WINELIB(/* nothing */) # endif # ifndef __declspec # define __declspec(x) __ONLY_IN_WINELIB(/* nothing */) # endif #endif #ifdef _MSC_VER # define inline __inline #endif #define CALLBACK __stdcall #define WINAPI __stdcall #define APIPRIVATE __stdcall #define PASCAL __stdcall #define CDECL __cdecl #define _CDECL __cdecl #define APIENTRY WINAPI #define CONST __ONLY_IN_WINELIB(const) /* Misc. constants. */ #undef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void*)0) #endif #ifdef FALSE #undef FALSE #endif #define FALSE 0 #ifdef TRUE #undef TRUE #endif #define TRUE 1 #ifndef IN #define IN #endif #ifndef OUT #define OUT #endif #ifndef OPTIONAL #define OPTIONAL #endif /* Standard data types */ typedef void *LPVOID; typedef const void *LPCVOID; typedef int BOOL, *PBOOL, *LPBOOL; typedef unsigned char BYTE, *PBYTE, *LPBYTE; typedef unsigned char UCHAR, *PUCHAR; typedef unsigned short WORD, *PWORD, *LPWORD; typedef unsigned short USHORT, *PUSHORT; typedef int INT, *PINT, *LPINT; typedef unsigned int UINT, *PUINT; typedef float FLOAT, *PFLOAT; typedef char *PSZ; #ifdef _MSC_VER typedef long *LPLONG; typedef unsigned long DWORD, *PDWORD, *LPDWORD; typedef unsigned long ULONG, *PULONG; #else typedef int *LPLONG; typedef unsigned int DWORD, *PDWORD, *LPDWORD; typedef unsigned int ULONG, *PULONG; #endif /* Macros to map Winelib names to the correct implementation name */ /* Note that Winelib is purely Win32. */ #ifdef __WINESRC__ #define WINE_NO_UNICODE_MACROS 1 #define WINE_STRICT_PROTOTYPES 1 #endif #ifdef WINE_NO_UNICODE_MACROS # define WINELIB_NAME_AW(func) \ func##_must_be_suffixed_with_W_or_A_in_this_context \ func##_must_be_suffixed_with_W_or_A_in_this_context #else /* WINE_NO_UNICODE_MACROS */ # ifdef UNICODE # define WINELIB_NAME_AW(func) func##W # else # define WINELIB_NAME_AW(func) func##A # endif #endif /* WINE_NO_UNICODE_MACROS */ #ifdef WINE_NO_UNICODE_MACROS # define DECL_WINELIB_TYPE_AW(type) /* nothing */ #else # define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; #endif #include /* Polymorphic types */ typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; typedef LONG_PTR LRESULT; /* Integer types */ typedef WORD ATOM; typedef DWORD COLORREF, *LPCOLORREF; /* Handle types */ typedef int HFILE; DECLARE_HANDLE(DPI_AWARENESS_CONTEXT); DECLARE_HANDLE(HACCEL); DECLARE_HANDLE(HBITMAP); DECLARE_HANDLE(HBRUSH); DECLARE_HANDLE(HCOLORSPACE); DECLARE_HANDLE(HDC); DECLARE_HANDLE(HDESK); DECLARE_HANDLE(HENHMETAFILE); DECLARE_HANDLE(HFONT); DECLARE_HANDLE(HGLRC); DECLARE_HANDLE(HHOOK); DECLARE_HANDLE(HICON); DECLARE_HANDLE(HINSTANCE); DECLARE_HANDLE(HKEY); typedef HKEY *PHKEY; DECLARE_HANDLE(HKL); DECLARE_HANDLE(HMENU); DECLARE_HANDLE(HMETAFILE); DECLARE_HANDLE(HMONITOR); DECLARE_HANDLE(HPALETTE); DECLARE_HANDLE(HPEN); DECLARE_HANDLE(HRGN); DECLARE_HANDLE(HRSRC); DECLARE_HANDLE(HTASK); DECLARE_HANDLE(HWINEVENTHOOK); DECLARE_HANDLE(HWINSTA); DECLARE_HANDLE(HWND); /* Handle types that must remain interchangeable even with strict on */ typedef HINSTANCE HMODULE; typedef HANDLE HGDIOBJ; typedef HANDLE HGLOBAL; typedef HANDLE HLOCAL; typedef HANDLE GLOBALHANDLE; typedef HANDLE LOCALHANDLE; typedef HICON HCURSOR; /* Callback function pointers types */ #ifdef WINE_STRICT_PROTOTYPES typedef INT_PTR (CALLBACK *FARPROC)(void); typedef INT_PTR (CALLBACK *NEARPROC)(void); typedef INT_PTR (CALLBACK *PROC)(void); #else typedef INT_PTR (CALLBACK *FARPROC)(); typedef INT_PTR (CALLBACK *NEARPROC)(); typedef INT_PTR (CALLBACK *PROC)(); #endif /* Macros to split words and longs. */ #define LOBYTE(w) ((BYTE)((DWORD_PTR)(w) & 0xFF)) #define HIBYTE(w) ((BYTE)((DWORD_PTR)(w) >> 8)) #define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xFFFF)) #define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16)) #define MAKEWORD(low,high) ((WORD)(((BYTE)((DWORD_PTR)(low) & 0xFF)) | ((WORD)((BYTE)((DWORD_PTR)(high) & 0xFF))) << 8)) #define MAKELONG(low,high) ((LONG)(((WORD)((DWORD_PTR)(low) & 0xFFFF)) | ((DWORD)((WORD)((DWORD_PTR)(high) & 0xFFFF))) << 16)) /* min and max macros */ #ifndef NOMINMAX #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif #endif /* NOMINMAX */ #ifdef MAX_PATH /* Work-around for Mingw */ #undef MAX_PATH #endif /* MAX_PATH */ #define MAX_PATH 260 #define HFILE_ERROR ((HFILE)-1) /* The SIZE structure */ typedef struct tagSIZE { LONG cx; LONG cy; } SIZE, *PSIZE, *LPSIZE; typedef SIZE SIZEL, *PSIZEL, *LPSIZEL; /* The POINT structure */ typedef struct tagPOINT { LONG x; LONG y; } POINT, *PPOINT, *LPPOINT; typedef struct _POINTL { LONG x; LONG y; } POINTL, *PPOINTL; /* The POINTS structure */ typedef struct tagPOINTS { #ifdef WORDS_BIGENDIAN SHORT y; SHORT x; #else SHORT x; SHORT y; #endif } POINTS, *PPOINTS, *LPPOINTS; typedef struct _FILETIME { #ifdef WORDS_BIGENDIAN DWORD dwHighDateTime; DWORD dwLowDateTime; #else DWORD dwLowDateTime; DWORD dwHighDateTime; #endif } FILETIME, *PFILETIME, *LPFILETIME; #define _FILETIME_ /* The RECT structure */ typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT, *PRECT, *LPRECT; typedef const RECT *LPCRECT; typedef struct _RECTL { LONG left; LONG top; LONG right; LONG bottom; } RECTL, *PRECTL, *LPRECTL; typedef const RECTL *LPCRECTL; /* DPI awareness */ typedef enum DPI_AWARENESS { DPI_AWARENESS_INVALID = -1, DPI_AWARENESS_UNAWARE = 0, DPI_AWARENESS_SYSTEM_AWARE, DPI_AWARENESS_PER_MONITOR_AWARE } DPI_AWARENESS; #define DPI_AWARENESS_CONTEXT_UNAWARE ((DPI_AWARENESS_CONTEXT)-1) #define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ((DPI_AWARENESS_CONTEXT)-2) #define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ((DPI_AWARENESS_CONTEXT)-3) #define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((DPI_AWARENESS_CONTEXT)-4) #ifdef __cplusplus } #endif #endif /* _WINDEF_ */ ================================================ FILE: wine/windows/windns.h ================================================ /* * DNS support * * Copyright (C) 2006 Matthew Kehrer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINDNS_H #define __WINE_WINDNS_H #ifdef __cplusplus extern "C" { #endif #define DNS_TYPE_ZERO 0x0000 #define DNS_TYPE_A 0x0001 #define DNS_TYPE_NS 0x0002 #define DNS_TYPE_MD 0x0003 #define DNS_TYPE_MF 0x0004 #define DNS_TYPE_CNAME 0x0005 #define DNS_TYPE_SOA 0x0006 #define DNS_TYPE_MB 0x0007 #define DNS_TYPE_MG 0x0008 #define DNS_TYPE_MR 0x0009 #define DNS_TYPE_NULL 0x000a #define DNS_TYPE_WKS 0x000b #define DNS_TYPE_PTR 0x000c #define DNS_TYPE_HINFO 0x000d #define DNS_TYPE_MINFO 0x000e #define DNS_TYPE_MX 0x000f #define DNS_TYPE_TEXT 0x0010 #define DNS_TYPE_RP 0x0011 #define DNS_TYPE_AFSDB 0x0012 #define DNS_TYPE_X25 0x0013 #define DNS_TYPE_ISDN 0x0014 #define DNS_TYPE_RT 0x0015 #define DNS_TYPE_NSAP 0x0016 #define DNS_TYPE_NSAPPTR 0x0017 #define DNS_TYPE_SIG 0x0018 #define DNS_TYPE_KEY 0x0019 #define DNS_TYPE_PX 0x001a #define DNS_TYPE_GPOS 0x001b #define DNS_TYPE_AAAA 0x001c #define DNS_TYPE_LOC 0x001d #define DNS_TYPE_NXT 0x001e #define DNS_TYPE_EID 0x001f #define DNS_TYPE_NIMLOC 0x0020 #define DNS_TYPE_SRV 0x0021 #define DNS_TYPE_ATMA 0x0022 #define DNS_TYPE_NAPTR 0x0023 #define DNS_TYPE_KX 0x0024 #define DNS_TYPE_CERT 0x0025 #define DNS_TYPE_A6 0x0026 #define DNS_TYPE_DNAME 0x0027 #define DNS_TYPE_SINK 0x0028 #define DNS_TYPE_OPT 0x0029 #define DNS_TYPE_UINFO 0x0064 #define DNS_TYPE_UID 0x0065 #define DNS_TYPE_GID 0x0066 #define DNS_TYPE_UNSPEC 0x0067 #define DNS_TYPE_ADDRS 0x00f8 #define DNS_TYPE_TKEY 0x00f9 #define DNS_TYPE_TSIG 0x00fa #define DNS_TYPE_IXFR 0x00fb #define DNS_TYPE_AXFR 0x00fc #define DNS_TYPE_MAILB 0x00fd #define DNS_TYPE_MAILA 0x00fe #define DNS_TYPE_ALL 0x00ff #define DNS_TYPE_ANY 0x00ff #define DNS_TYPE_WINS 0xff01 #define DNS_TYPE_WINSR 0xff02 #define DNS_TYPE_NBSTAT (DNS_TYPE_WINSR) #define DNS_QUERY_STANDARD 0x00000000 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001 #define DNS_QUERY_USE_TCP_ONLY 0x00000002 #define DNS_QUERY_NO_RECURSION 0x00000004 #define DNS_QUERY_BYPASS_CACHE 0x00000008 #define DNS_QUERY_NO_WIRE_QUERY 0x00000010 #define DNS_QUERY_NO_LOCAL_NAME 0x00000020 #define DNS_QUERY_NO_HOSTS_FILE 0x00000040 #define DNS_QUERY_NO_NETBT 0x00000080 #define DNS_QUERY_WIRE_ONLY 0x00000100 #define DNS_QUERY_RETURN_MESSAGE 0x00000200 #define DNS_QUERY_MULTICAST_ONLY 0x00000400 #define DNS_QUERY_NO_MULTICAST 0x00000800 #define DNS_QUERY_TREAT_AS_FQDN 0x00001000 #define DNS_QUERY_ADDRCONFIG 0x00002000 #define DNS_QUERY_DUAL_ADDR 0x00004000 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x00100000 #define DNS_QUERY_DISABLE_IDN_ENCODING 0x00200000 #define DNS_QUERY_APPEND_MULTILABEL 0x00800000 #define DNS_QUERY_DNSSEC_OK 0x01000000 #define DNS_QUERY_DNSSEC_CHECKING_DISABLED 0x02000000 #define DNS_QUERY_RESERVED 0xff000000 typedef enum _DNS_NAME_FORMAT { DnsNameDomain, DnsNameDomainLabel, DnsNameHostnameFull, DnsNameHostnameLabel, DnsNameWildcard, DnsNameSrvRecord } DNS_NAME_FORMAT; typedef enum _DNS_FREE_TYPE { DnsFreeFlat, DnsFreeRecordList, DnsFreeParsedMessageFields } DNS_FREE_TYPE; typedef enum _DNS_CHARSET { DnsCharSetUnknown, DnsCharSetUnicode, DnsCharSetUtf8, DnsCharSetAnsi } DNS_CHARSET; typedef enum _DNS_CONFIG_TYPE { DnsConfigPrimaryDomainName_W, DnsConfigPrimaryDomainName_A, DnsConfigPrimaryDomainName_UTF8, DnsConfigAdapterDomainName_W, DnsConfigAdapterDomainName_A, DnsConfigAdapterDomainName_UTF8, DnsConfigDnsServerList, DnsConfigSearchList, DnsConfigAdapterInfo, DnsConfigPrimaryHostNameRegistrationEnabled, DnsConfigAdapterHostNameRegistrationEnabled, DnsConfigAddressRegistrationMaxCount, DnsConfigHostName_W, DnsConfigHostName_A, DnsConfigHostName_UTF8, DnsConfigFullHostName_W, DnsConfigFullHostName_A, DnsConfigFullHostName_UTF8 } DNS_CONFIG_TYPE; typedef enum _DnsSection { DnsSectionQuestion, DnsSectionAnswer, DnsSectionAuthority, DnsSectionAddtional /* Not a typo, as per Microsoft's headers */ } DNS_SECTION; typedef LONG DNS_STATUS, *PDNS_STATUS; typedef DWORD IP4_ADDRESS, *PIP4_ADDRESS; typedef struct { DWORD IP6Dword[4]; } IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS; #define SIZEOF_IP4_ADDRESS 4 #define IP4_ADDRESS_STRING_LENGTH 16 #define IP6_ADDRESS_STRING_LENGTH 65 #define DNS_ADDRESS_STRING_LENGTH IP6_ADDRESS_STRING_LENGTH #define IP4_ADDRESS_STRING_BUFFER_LENGTH IP4_ADDRESS_STRING_LENGTH #define IP6_ADDRESS_STRING_BUFFER_LENGTH IP6_ADDRESS_STRING_LENGTH typedef struct _IP4_ARRAY { DWORD AddrCount; IP4_ADDRESS AddrArray[1]; } IP4_ARRAY, *PIP4_ARRAY; #include typedef struct _DNS_HEADER { WORD Xid; BYTE RecursionDesired:1; BYTE Truncation:1; BYTE Authoritative:1; BYTE Opcode:4; BYTE IsResponse:1; BYTE ResponseCode:4; BYTE CheckingDisabled:1; BYTE AuthenticatedData:1; BYTE Reserved:1; BYTE RecursionAvailable:1; WORD QuestionCount; WORD AnswerCount; WORD NameServerCount; WORD AdditionalCount; } DNS_HEADER, *PDNS_HEADER; #include typedef struct _DNS_MESSAGE_BUFFER { DNS_HEADER MessageHead; CHAR MessageBody[1]; } DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER; typedef struct { IP4_ADDRESS IpAddress; } DNS_A_DATA, *PDNS_A_DATA; typedef struct _DnsRecordFlags { DWORD Section :2; DWORD Delete :1; DWORD CharSet :2; DWORD Unused :3; DWORD Reserved :24; } DNS_RECORD_FLAGS; typedef struct { PSTR pNamePrimaryServer; PSTR pNameAdministrator; DWORD dwSerialNo; DWORD dwRefresh; DWORD dwRetry; DWORD dwExpire; DWORD dwDefaultTtl; } DNS_SOA_DATAA, *PDNS_SOA_DATAA; typedef struct { PWSTR pNamePrimaryServer; PWSTR pNameAdministrator; DWORD dwSerialNo; DWORD dwRefresh; DWORD dwRetry; DWORD dwExpire; DWORD dwDefaultTtl; } DNS_SOA_DATAW, *PDNS_SOA_DATAW; DECL_WINELIB_TYPE_AW(DNS_SOA_DATA) DECL_WINELIB_TYPE_AW(PDNS_SOA_DATA) typedef struct { PSTR pNameHost; } DNS_PTR_DATAA, *PDNS_PTR_DATAA; typedef struct { PWSTR pNameHost; } DNS_PTR_DATAW, *PDNS_PTR_DATAW; DECL_WINELIB_TYPE_AW(DNS_PTR_DATA) DECL_WINELIB_TYPE_AW(PDNS_PTR_DATA) typedef struct { PSTR pNameMailbox; PSTR pNameErrorsMailbox; } DNS_MINFO_DATAA, *PDNS_MINFO_DATAA; typedef struct { PWSTR pNameMailbox; PWSTR pNameErrorsMailbox; } DNS_MINFO_DATAW, *PDNS_MINFO_DATAW; DECL_WINELIB_TYPE_AW(DNS_MINFO_DATA) DECL_WINELIB_TYPE_AW(PDNS_MINFO_DATA) typedef struct { PSTR pNameExchange; WORD wPreference; WORD Pad; } DNS_MX_DATAA, *PDNS_MX_DATAA; typedef struct { PWSTR pNameExchange; WORD wPreference; WORD Pad; } DNS_MX_DATAW, *PDNS_MX_DATAW; DECL_WINELIB_TYPE_AW(DNS_MX_DATA) DECL_WINELIB_TYPE_AW(PDNS_MX_DATA) typedef struct { DWORD dwStringCount; PSTR pStringArray[1]; } DNS_TXT_DATAA, *PDNS_TXT_DATAA; typedef struct { DWORD dwStringCount; PWSTR pStringArray[1]; } DNS_TXT_DATAW, *PDNS_TXT_DATAW; DECL_WINELIB_TYPE_AW(DNS_TXT_DATA) DECL_WINELIB_TYPE_AW(PDNS_TXT_DATA) typedef struct { DWORD dwByteCount; BYTE Data[1]; } DNS_NULL_DATA, *PDNS_NULL_DATA; typedef struct { IP4_ADDRESS IpAddress; UCHAR chProtocol; BYTE BitMask[1]; } DNS_WKS_DATA, *PDNS_WKS_DATA; typedef struct { DNS_IP6_ADDRESS Ip6Address; } DNS_AAAA_DATA, *PDNS_AAAA_DATA; typedef struct { WORD wFlags; BYTE chProtocol; BYTE chAlgorithm; BYTE Key[1]; } DNS_KEY_DATA, *PDNS_KEY_DATA; typedef struct { WORD wVersion; WORD wSize; WORD wHorPrec; WORD wVerPrec; DWORD dwLatitude; DWORD dwLongitude; DWORD dwAltitude; } DNS_LOC_DATA, *PDNS_LOC_DATA; typedef struct { PSTR pNameSigner; WORD wTypeCovered; BYTE chAlgorithm; BYTE chLabelCount; DWORD dwOriginalTtl; DWORD dwExpiration; DWORD dwTimeSigned; WORD wKeyTag; WORD Pad; BYTE Signature[1]; } DNS_SIG_DATAA, *PDNS_SIG_DATAA; typedef struct { PWSTR pNameSigner; WORD wTypeCovered; BYTE chAlgorithm; BYTE chLabelCount; DWORD dwOriginalTtl; DWORD dwExpiration; DWORD dwTimeSigned; WORD wKeyTag; WORD Pad; BYTE Signature[1]; } DNS_SIG_DATAW, *PDNS_SIG_DATAW; DECL_WINELIB_TYPE_AW(DNS_SIG_DATA) DECL_WINELIB_TYPE_AW(PDNS_SIG_DATA) #define DNS_ATMA_MAX_ADDR_LENGTH 20 typedef struct { BYTE AddressType; BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH]; } DNS_ATMA_DATA, *PDNS_ATMA_DATA; typedef struct { PSTR pNameNext; WORD wNumTypes; WORD wTypes[1]; } DNS_NXT_DATAA, *PDNS_NXT_DATAA; typedef struct { PWSTR pNameNext; WORD wNumTypes; WORD wTypes[1]; } DNS_NXT_DATAW, *PDNS_NXT_DATAW; DECL_WINELIB_TYPE_AW(DNS_NXT_DATA) DECL_WINELIB_TYPE_AW(PDNS_NXT_DATA) typedef struct { PSTR pNameTarget; WORD wPriority; WORD wWeight; WORD wPort; WORD Pad; } DNS_SRV_DATAA, *PDNS_SRV_DATAA; typedef struct { PWSTR pNameTarget; WORD wPriority; WORD wWeight; WORD wPort; WORD Pad; } DNS_SRV_DATAW, *PDNS_SRV_DATAW; DECL_WINELIB_TYPE_AW(DNS_SRV_DATA) DECL_WINELIB_TYPE_AW(PDNS_SRV_DATA) typedef struct { PSTR pNameAlgorithm; PBYTE pAlgorithmPacket; PBYTE pKey; PBYTE pOtherData; DWORD dwCreateTime; DWORD dwExpireTime; WORD wMode; WORD wError; WORD wKeyLength; WORD wOtherLength; UCHAR cAlgNameLength; BOOL bPacketPointers; } DNS_TKEY_DATAA, *PDNS_TKEY_DATAA; typedef struct { PWSTR pNameAlgorithm; PBYTE pAlgorithmPacket; PBYTE pKey; PBYTE pOtherData; DWORD dwCreateTime; DWORD dwExpireTime; WORD wMode; WORD wError; WORD wKeyLength; WORD wOtherLength; UCHAR cAlgNameLength; BOOL bPacketPointers; } DNS_TKEY_DATAW, *PDNS_TKEY_DATAW; DECL_WINELIB_TYPE_AW(DNS_TKEY_DATA) DECL_WINELIB_TYPE_AW(PDNS_TKEY_DATA) typedef struct { PSTR pNameAlgorithm; PBYTE pAlgorithmPacket; PBYTE pSignature; PBYTE pOtherData; LONGLONG i64CreateTime; WORD wFudgeTime; WORD wOriginalXid; WORD wError; WORD wSigLength; WORD wOtherLength; UCHAR cAlgNameLength; BOOL bPacketPointers; } DNS_TSIG_DATAA, *PDNS_TSIG_DATAA; typedef struct { PWSTR pNameAlgorithm; PBYTE pAlgorithmPacket; PBYTE pSignature; PBYTE pOtherData; LONGLONG i64CreateTime; WORD wFudgeTime; WORD wOriginalXid; WORD wError; WORD wSigLength; WORD wOtherLength; UCHAR cAlgNameLength; BOOL bPacketPointers; } DNS_TSIG_DATAW, *PDNS_TSIG_DATAW; typedef struct { DWORD dwMappingFlag; DWORD dwLookupTimeout; DWORD dwCacheTimeout; DWORD cWinsServerCount; IP4_ADDRESS WinsServers[1]; } DNS_WINS_DATA, *PDNS_WINS_DATA; typedef struct { DWORD dwMappingFlag; DWORD dwLookupTimeout; DWORD dwCacheTimeout; PSTR pNameResultDomain; } DNS_WINSR_DATAA, *PDNS_WINSR_DATAA; typedef struct { DWORD dwMappingFlag; DWORD dwLookupTimeout; DWORD dwCacheTimeout; PWSTR pNameResultDomain; } DNS_WINSR_DATAW, *PDNS_WINSR_DATAW; DECL_WINELIB_TYPE_AW(DNS_WINSR_DATA) DECL_WINELIB_TYPE_AW(PDNS_WINSR_DATA) typedef struct _DnsRecordA { struct _DnsRecordA *pNext; PSTR pName; WORD wType; WORD wDataLength; union { DWORD DW; DNS_RECORD_FLAGS S; } Flags; DWORD dwTtl; DWORD dwReserved; union { DNS_A_DATA A; DNS_SOA_DATAA SOA, Soa; DNS_PTR_DATAA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr; DNS_MINFO_DATAA MINFO, Minfo, RP, Rp; DNS_MX_DATAA MX, Mx, AFSDB, Afsdb, RT, Rt; DNS_TXT_DATAA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25; DNS_NULL_DATA Null; DNS_WKS_DATA WKS, Wks; DNS_AAAA_DATA AAAA; DNS_KEY_DATA KEY, Key; DNS_SIG_DATAA SIG, Sig; DNS_ATMA_DATA ATMA, Atma; DNS_NXT_DATAA NXT, Nxt; DNS_SRV_DATAA SRV, Srv; DNS_TKEY_DATAA TKEY, Tkey; DNS_TSIG_DATAA TSIG, Tsig; DNS_WINS_DATA WINS, Wins; DNS_WINSR_DATAA WINSR, WinsR, NBSTAT, Nbstat; } Data; } DNS_RECORDA, *PDNS_RECORDA; typedef struct _DnsRecordW { struct _DnsRecordW *pNext; PWSTR pName; WORD wType; WORD wDataLength; union { DWORD DW; DNS_RECORD_FLAGS S; } Flags; DWORD dwTtl; DWORD dwReserved; union { DNS_A_DATA A; DNS_SOA_DATAW SOA, Soa; DNS_PTR_DATAW PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr; DNS_MINFO_DATAW MINFO, Minfo, RP, Rp; DNS_MX_DATAW MX, Mx, AFSDB, Afsdb, RT, Rt; DNS_TXT_DATAW HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25; DNS_NULL_DATA Null; DNS_WKS_DATA WKS, Wks; DNS_AAAA_DATA AAAA; DNS_KEY_DATA KEY, Key; DNS_SIG_DATAW SIG, Sig; DNS_ATMA_DATA ATMA, Atma; DNS_NXT_DATAW NXT, Nxt; DNS_SRV_DATAW SRV, Srv; DNS_TKEY_DATAW TKEY, Tkey; DNS_TSIG_DATAW TSIG, Tsig; DNS_WINS_DATA WINS, Wins; DNS_WINSR_DATAW WINSR, WinsR, NBSTAT, Nbstat; } Data; } DNS_RECORDW, *PDNS_RECORDW; #if defined(__WINESRC__) || defined(UNICODE) typedef DNS_RECORDW DNS_RECORD; typedef PDNS_RECORDW PDNS_RECORD; #else typedef DNS_RECORDA DNS_RECORD; typedef PDNS_RECORDA PDNS_RECORD; #endif typedef struct _DnsRRSet { PDNS_RECORD pFirstRR; PDNS_RECORD pLastRR; } DNS_RRSET, *PDNS_RRSET; #define DNS_RRSET_INIT( rrset ) \ { \ PDNS_RRSET _prrset = &(rrset); \ _prrset->pFirstRR = NULL; \ _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; \ } #define DNS_RRSET_ADD( rrset, pnewRR ) \ { \ PDNS_RRSET _prrset = &(rrset); \ PDNS_RECORD _prrnew = (pnewRR); \ _prrset->pLastRR->pNext = _prrnew; \ _prrset->pLastRR = _prrnew; \ } #define DNS_RRSET_TERMINATE( rrset ) \ { \ PDNS_RRSET _prrset = &(rrset); \ _prrset->pLastRR->pNext = NULL; \ } #define DNS_ADDR_MAX_SOCKADDR_LENGTH 32 #include typedef struct _DnsAddr { char MaxSa[DNS_ADDR_MAX_SOCKADDR_LENGTH]; union { DWORD DnsAddrUserDword[8]; } Data; } DNS_ADDR, *PDNS_ADDR; typedef struct _DnsAddrArray { DWORD MaxCount; DWORD AddrCount; DWORD Tag; WORD Family; WORD WordReserved; DWORD Flags; DWORD MatchFlag; DWORD Reserved1; DWORD Reserved2; DNS_ADDR AddrArray[1]; } DNS_ADDR_ARRAY, *PDNS_ADDR_ARRAY; #include #define DNS_QUERY_RESULTS_VERSION1 0x1 typedef struct _DNS_QUERY_RESULT { ULONG Version; DNS_STATUS QueryStatus; ULONG64 QueryOptions; DNS_RECORD *pQueryRecords; void *Reserved; } DNS_QUERY_RESULT, *PDNS_QUERY_RESULT; typedef void WINAPI DNS_QUERY_COMPLETION_ROUTINE(void*,DNS_QUERY_RESULT*); typedef DNS_QUERY_COMPLETION_ROUTINE *PDNS_QUERY_COMPLETION_ROUTINE; #define DNS_QUERY_REQUEST_VERSION1 0x1 typedef struct _DNS_QUERY_REQUEST { ULONG Version; const WCHAR *QueryName; WORD QueryType; ULONG64 QueryOptions; PDNS_ADDR_ARRAY pDnsServerList; ULONG InterfaceIndex; PDNS_QUERY_COMPLETION_ROUTINE pQueryCompletionCallback; void *pQueryContext; } DNS_QUERY_REQUEST, *PDNS_QUERY_REQUEST; typedef struct _DNS_QUERY_CANCEL { char Reserved[32]; } DNS_QUERY_CANCEL, *PDNS_QUERY_CANCEL; DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,PHANDLE); DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,PHANDLE); #define DnsAcquireContextHandle WINELIB_NAME_AW(DnsAcquireContextHandle_) DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDW*); DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDA*); VOID WINAPI DnsFree(PVOID,DNS_FREE_TYPE); DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID); DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORDW,PDNS_RECORDW,DWORD,HANDLE,PVOID,PVOID); DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID); #define DnsModifyRecordsInSet WINELIB_NAME_AW(DnsModifyRecordsInSet_) BOOL WINAPI DnsNameCompare_A(PCSTR,PCSTR); BOOL WINAPI DnsNameCompare_W(PCWSTR,PCWSTR); #define DnsNameCompare WINELIB_NAME_AW(DnsNameCompare_) DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PVOID,PDNS_RECORDA*,PVOID*); DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PVOID,PDNS_RECORDW*,PVOID*); DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PVOID,PDNS_RECORDA*,PVOID*); #define DnsQuery WINELIB_NAME_AW(DnsQuery_) DNS_STATUS WINAPI DnsQueryEx(DNS_QUERY_REQUEST*,DNS_QUERY_RESULT*,DNS_QUERY_CANCEL*); DNS_STATUS WINAPI DnsCancelQuery(DNS_QUERY_CANCEL*); DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PCWSTR,PVOID,PVOID,PDWORD); BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD); PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET); VOID WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE); BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*); PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET); PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD); void WINAPI DnsReleaseContextHandle(HANDLE); DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID); DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORDW,DWORD,HANDLE,PVOID,PVOID); DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID); #define DnsReplaceRecordSet WINELIB_NAME_AW(DnsReplaceRecordSet) DNS_STATUS WINAPI DnsValidateName_A(PCSTR,DNS_NAME_FORMAT); DNS_STATUS WINAPI DnsValidateName_W(PCWSTR, DNS_NAME_FORMAT); DNS_STATUS WINAPI DnsValidateName_UTF8(PCSTR,DNS_NAME_FORMAT); #define DnsValidateName WINELIB_NAME_AW(DnsValidateName_) BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,PDWORD,PCWSTR,WORD,WORD,BOOL); BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,PDWORD,PCSTR,WORD,WORD,BOOL); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/windows.foundation.idl ================================================ /* * Copyright 2015 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifdef __WIDL__ #pragma winrt ns_prefix #endif import "inspectable.idl"; /* import "asyncinfo.idl"; */ /* import "eventtoken.idl"; */ /* import "ivectorchangedeventargs.idl"; */ namespace Windows { namespace Foundation { [version(0x06020000)] enum PropertyType { Empty = 0, UInt8 = 1, Int16 = 2, UInt16 = 3, Int32 = 4, UInt32 = 5, Int64 = 6, UInt64 = 7, Single = 8, Double = 9, Char16 = 10, Boolean = 11, String = 12, Inspectable = 13, DateTime = 14, TimeSpan = 15, Guid = 16, Point = 17, Size = 18, Rect = 19, OtherType = 20, UInt8Array = 1025, Int16Array = 1026, UInt16Array = 1027, Int32Array = 1028, UInt32Array = 1029, Int64Array = 1030, UInt64Array = 1031, SingleArray = 1032, DoubleArray = 1033, Char16Array = 1034, BooleanArray = 1035, StringArray = 1036, InspectableArray = 1037, DateTimeArray = 1038, TimeSpanArray = 1039, GuidArray = 1040, PointArray = 1041, SizeArray = 1042, RectArray = 1043, OtherTypeArray = 1044 }; [version(0x06020000)] struct Point { FLOAT X; FLOAT Y; }; [version(0x06020000)] struct Size { FLOAT Width; FLOAT Height; }; [version(0x06020000)] struct Rect { FLOAT X; FLOAT Y; FLOAT Width; FLOAT Height; }; [version(0x06020000)] struct DateTime { INT64 UniversalTime; }; [version(0x06020000)] struct TimeSpan { INT64 Duration; }; [ version(0x06030000), uuid(96369f54-8eb6-48f0-abce-c1b211e627c3) ] interface IStringable : IInspectable { HRESULT ToString([out, retval] HSTRING *value); } } } ================================================ FILE: wine/windows/windows.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINDOWS_H #define __WINE_WINDOWS_H #if defined(_MSC_VER) && (_MSC_VER >= 800) && !defined(__cplusplus) /* TYPE_ALIGNMENT generates this - move it outside the warning push/pop scope. */ # pragma warning(disable:4116) #endif #ifndef _INC_WINDOWS #define _INC_WINDOWS #if defined(RC_INVOKED) && !defined(NOWINRES) #include #else /* RC_INVOKED && !NOWINRES */ /* All the basic includes */ #include #include #include #include #include #include #include #include #include #include #include /* Not so essential ones */ #ifndef __WINESRC__ #ifndef WIN32_LEAN_AND_MEAN #include #include #include #include #include #include #include #include #include #include #ifndef WINE_NOWINSOCK #include #endif /* WINE_NOWINSOCK */ #ifndef NOCRYPT #include /* #include */ #include #endif /* !NOCRYPT */ #ifndef NOGDI #include #ifdef INC_OLE1 /* #include */ #else #include #endif #include #endif /* !NOGDI */ #endif /* !WIN32_LEAN_AND_MEAN */ /* #include */ #ifdef INC_OLE2 #include #endif /* INC_OLE2 */ #ifndef NOSERVICE #include #endif /* !NOSERVICE */ #ifndef NOMCX #include #endif /* !NOMCX */ #ifndef NOIMM #include #endif /* !NOIMM */ #endif /* __WINESRC__ */ #endif /* RC_INVOKED && !NOWINRES */ #endif /* _INC_WINDOWS */ #endif /* __WINE_WINDOWS_H */ ================================================ FILE: wine/windows/windowsx.h ================================================ /* Copyright (C) 1999 Corel Corporation (Paul Quinn) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _INC_WINDOWSX #define _INC_WINDOWSX #ifdef __cplusplus extern "C" { #endif #ifdef __WINESRC__ /* This file contains macros that cause warnings on gcc 4.1, so avoid it. */ #error Please avoid use of windowsx.h in Wine source code. #endif #ifndef SNDMSG #ifdef __cplusplus #define SNDMSG ::SendMessage #else /* __cplusplus */ #define SNDMSG SendMessage #endif /* __cplusplus */ #endif /* SNDMSG */ #define GET_WPARAM(wp, lp) (wp) #define GET_LPARAM(wp, lp) (lp) #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) #define GET_EM_LINESCROLL_MPS(vert, horz) (WPARAM)horz, (LPARAM)vert #define GET_EM_SETSEL_START(wp, lp) (INT)(wp) #define GET_EM_SETSEL_END(wp, lp) (lp) #define GET_EM_SETSEL_MPS(iStart, iEnd) (WPARAM)(iStart), (LPARAM)(iEnd) #define GET_WM_ACTIVATE_STATE(wp, lp) LOWORD(wp) #define GET_WM_ACTIVATE_FMINIMIZED(wp, lp) (BOOL)HIWORD(wp) #define GET_WM_ACTIVATE_HWND(wp, lp) (HWND)(lp) #define GET_WM_ACTIVATE_MPS(s, fmin, hwnd) (WPARAM)MAKELONG((s), (fmin)), (LPARAM)(hwnd) #define GET_WM_CHANGECBCHAIN_HWNDNEXT(wp, lp) (HWND)(lp) #define GET_WM_CHARTOITEM_CHAR(wp, lp) (TCHAR)LOWORD(wp) #define GET_WM_CHARTOITEM_POS(wp, lp) HIWORD(wp) #define GET_WM_CHARTOITEM_HWND(wp, lp) (HWND)(lp) #define GET_WM_CHARTOITEM_MPS(ch, pos, hwnd) (WPARAM)MAKELONG((pos), (ch)), (LPARAM)(hwnd) #define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp) #define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp) #define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp) #define GET_WM_COMMAND_MPS(id, hwnd, cmd) (WPARAM)MAKELONG(id, cmd), (LPARAM)(hwnd) #define WM_CTLCOLOR 0x0019 #define GET_WM_CTLCOLOR_HDC(wp, lp, msg) (HDC)(wp) #define GET_WM_CTLCOLOR_HWND(wp, lp, msg) (HWND)(lp) #define GET_WM_CTLCOLOR_TYPE(wp, lp, msg) (WORD)(msg - WM_CTLCOLORMSGBOX) #define GET_WM_CTLCOLOR_MSG(type) (WORD)(WM_CTLCOLORMSGBOX+(type)) #define GET_WM_CTLCOLOR_MPS(hdc, hwnd, type) (WPARAM)(hdc), (LPARAM)(hwnd) #define GET_WM_HSCROLL_CODE(wp, lp) LOWORD(wp) #define GET_WM_HSCROLL_POS(wp, lp) HIWORD(wp) #define GET_WM_HSCROLL_HWND(wp, lp) (HWND)(lp) #define GET_WM_HSCROLL_MPS(code, pos, hwnd) (WPARAM)MAKELONG(code, pos), (LPARAM)(hwnd) #define GET_WM_MENUCHAR_CHAR(wp, lp) (TCHAR)LOWORD(wp) #define GET_WM_MENUCHAR_HMENU(wp, lp) (HMENU)(lp) #define GET_WM_MENUCHAR_FMENU(wp, lp) (BOOL)HIWORD(wp) #define GET_WM_MENUCHAR_MPS(ch, hmenu, f) (WPARAM)MAKELONG(ch, f), (LPARAM)(hmenu) #define GET_WM_MENUSELECT_CMD(wp, lp) LOWORD(wp) #define GET_WM_MENUSELECT_FLAGS(wp, lp) (UINT)(int)(short)HIWORD(wp) #define GET_WM_MENUSELECT_HMENU(wp, lp) (HMENU)(lp) #define GET_WM_MENUSELECT_MPS(cmd, f, hmenu) (WPARAM)MAKELONG(cmd, f), (LPARAM)(hmenu) #define GET_WM_MDIACTIVATE_FACTIVATE(hwnd, wp, lp) (lp == (LPARAM)hwnd) #define GET_WM_MDIACTIVATE_HWNDDEACT(wp, lp) (HWND)(wp) #define GET_WM_MDIACTIVATE_HWNDACTIVATE(wp, lp) (HWND)(lp) #define GET_WM_MDIACTIVATE_MPS(f, hwndD, hwndA) (WPARAM)(hwndA), 0 #define GET_WM_MDISETMENU_MPS(hmenuF, hmenuW) (WPARAM)hmenuF, (LPARAM)hmenuW #define GET_WM_PARENTNOTIFY_MSG(wp, lp) LOWORD(wp) #define GET_WM_PARENTNOTIFY_ID(wp, lp) HIWORD(wp) #define GET_WM_PARENTNOTIFY_HWNDCHILD(wp, lp) (HWND)(lp) #define GET_WM_PARENTNOTIFY_X(wp, lp) (int)(short)LOWORD(lp) #define GET_WM_PARENTNOTIFY_Y(wp, lp) (int)(short)HIWORD(lp) #define GET_WM_PARENTNOTIFY_MPS(msg, id, hwnd) (WPARAM)MAKELONG(id, msg), (LPARAM)(hwnd) #define GET_WM_PARENTNOTIFY2_MPS(msg, x, y) (WPARAM)MAKELONG(0, msg), MAKELONG(x, y) #define GET_WM_VKEYTOITEM_CODE(wp, lp) (int)(short)LOWORD(wp) #define GET_WM_VKEYTOITEM_ITEM(wp, lp) HIWORD(wp) #define GET_WM_VKEYTOITEM_HWND(wp, lp) (HWND)(lp) #define GET_WM_VKEYTOITEM_MPS(code, item, hwnd) (WPARAM)MAKELONG(item, code), (LPARAM)(hwnd) #define GET_WM_VSCROLL_CODE(wp, lp) LOWORD(wp) #define GET_WM_VSCROLL_POS(wp, lp) HIWORD(wp) #define GET_WM_VSCROLL_HWND(wp, lp) (HWND)(lp) #define GET_WM_VSCROLL_MPS(code, pos, hwnd) (WPARAM)MAKELONG(code, pos), (LPARAM)(hwnd) /****** KERNEL Macro APIs ******************************************************/ #define GetInstanceModule(hInst) (HMODULE)(hInst) #define GlobalPtrHandle(lp) ((HGLOBAL)GlobalHandle(lp)) #define GlobalLockPtr(lp) ((BOOL)GlobalLock(GlobalPtrHandle(lp))) #define GlobalUnlockPtr(lp) GlobalUnlock(GlobalPtrHandle(lp)) #define GlobalAllocPtr(flags, cb) (GlobalLock(GlobalAlloc((flags), (cb)))) #define GlobalReAllocPtr(lp, cbNew, flags) (GlobalUnlockPtr(lp), GlobalLock(GlobalReAlloc(GlobalPtrHandle(lp) , (cbNew), (flags)))) #define GlobalFreePtr(lp) (GlobalUnlockPtr(lp), (BOOL)(ULONG_PTR)GlobalFree(GlobalPtrHandle(lp))) /****** USER Macro APIs ******************************************************/ #define GetWindowInstance(hwnd) ((HMODULE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE)) #define GetWindowStyle(hwnd) ((DWORD)GetWindowLong(hwnd, GWL_STYLE)) #define GetWindowExStyle(hwnd) ((DWORD)GetWindowLong(hwnd, GWL_EXSTYLE)) #define GetWindowOwner(hwnd) GetWindow(hwnd, GW_OWNER) #define GetFirstChild(hwnd) GetTopWindow(hwnd) #define GetFirstSibling(hwnd) GetWindow(hwnd, GW_HWNDFIRST) #define GetLastSibling(hwnd) GetWindow(hwnd, GW_HWNDLAST) #define GetNextSibling(hwnd) GetWindow(hwnd, GW_HWNDNEXT) #define GetPrevSibling(hwnd) GetWindow(hwnd, GW_HWNDPREV) #define GetWindowID(hwnd) GetDlgCtrlID(hwnd) #define SetWindowRedraw(hwnd, fRedraw) \ ((void)SendMessage(hwnd, WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L)) #define SubclassWindow(hwnd, lpfn) \ ((WNDPROC)SetWindowLongPtr((hwnd), GWLP_WNDPROC, (LPARAM)(WNDPROC)(lpfn))) #define IsMinimized(hwnd) IsIconic(hwnd) #define IsMaximized(hwnd) IsZoomed(hwnd) #define IsRestored(hwnd) ((GetWindowStyle(hwnd) & (WS_MINIMIZE | WS_MAXIMIZE)) == 0L) #define SetWindowFont(hwnd, hfont, fRedraw) \ FORWARD_WM_SETFONT((hwnd), (hfont), (fRedraw), SendMessage) #define GetWindowFont(hwnd) FORWARD_WM_GETFONT((hwnd), SendMessage) #define MapWindowRect(hwndFrom, hwndTo, lprc) \ MapWindowPoints((hwndFrom), (hwndTo), (POINT *)(lprc), 2) #define IsLButtonDown() (GetKeyState(VK_LBUTTON) < 0) #define IsRButtonDown() (GetKeyState(VK_RBUTTON) < 0) #define IsMButtonDown() (GetKeyState(VK_MBUTTON) < 0) #define SetDlgMsgResult(hwnd, msg, result) (( \ (msg) == WM_CTLCOLORMSGBOX || \ (msg) == WM_CTLCOLOREDIT || \ (msg) == WM_CTLCOLORLISTBOX || \ (msg) == WM_CTLCOLORBTN || \ (msg) == WM_CTLCOLORDLG || \ (msg) == WM_CTLCOLORSCROLLBAR || \ (msg) == WM_CTLCOLORSTATIC || \ (msg) == WM_COMPAREITEM || \ (msg) == WM_VKEYTOITEM || \ (msg) == WM_CHARTOITEM || \ (msg) == WM_QUERYDRAGICON || \ (msg) == WM_INITDIALOG \ ) ? (BOOL)(result) : (SetWindowLongPtr((hwnd), DWLP_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE)) #define DefDlgProcEx(hwnd, msg, wParam, lParam, pfRecursion) \ (*(pfRecursion) = TRUE, DefDlgProc(hwnd, msg, wParam, lParam)) #define CheckDefDlgRecursion(pfRecursion) \ if (*(pfRecursion)) { *(pfRecursion) = FALSE; return FALSE; } #define SubclassDialog(hwndDlg, lpfn) \ ((DLGPROC)SetWindowLongPtr(hwndDlg, DWLP_DLGPROC, (LPARAM)(DLGPROC)(lpfn))) #define DeletePen(hpen) DeleteObject((HGDIOBJ)(HPEN)(hpen)) #define SelectPen(hdc, hpen) ((HPEN)SelectObject((hdc), (HGDIOBJ)(HPEN)(hpen))) #define GetStockPen(i) ((HPEN)GetStockObject(i)) #define DeleteBrush(hbr) DeleteObject((HGDIOBJ)(HBRUSH)(hbr)) #define SelectBrush(hdc, hbr) ((HBRUSH)SelectObject((hdc), (HGDIOBJ)(HBRUSH)(hbr))) #define GetStockBrush(i) ((HBRUSH)GetStockObject(i)) #define DeleteRgn(hrgn) DeleteObject((HGDIOBJ)(HRGN)(hrgn)) #define CopyRgn(hrgnDst, hrgnSrc) CombineRgn(hrgnDst, hrgnSrc, 0, RGN_COPY) #define IntersectRgn(hrgnResult, hrgnA, hrgnB) CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_AND) #define SubtractRgn(hrgnResult, hrgnA, hrgnB) CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_DIFF) #define UnionRgn(hrgnResult, hrgnA, hrgnB) CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_OR) #define XorRgn(hrgnResult, hrgnA, hrgnB) CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_XOR) #define DeletePalette(hpal) DeleteObject((HGDIOBJ)(HPALETTE)(hpal)) #define DeleteFont(hfont) DeleteObject((HGDIOBJ)(HFONT)(hfont)) #define SelectFont(hdc, hfont) ((HFONT)SelectObject((hdc), (HGDIOBJ)(HFONT) (hfont))) #define GetStockFont(i) ((HFONT)GetStockObject(i)) #define DeleteBitmap(hbm) DeleteObject((HGDIOBJ)(HBITMAP)(hbm)) #define SelectBitmap(hdc, hbm) ((HBITMAP)SelectObject((hdc), (HGDIOBJ)(HBITMAP)(hbm))) #define InsetRect(lprc, dx, dy) InflateRect((lprc), -(dx), -(dy)) /* Button Message APIs */ #define Button_Enable(hwndCtl, fEnable) \ EnableWindow((hwndCtl), (fEnable)) #define Button_GetCheck(hwndCtl) \ ((int)SendMessage((hwndCtl), BM_GETCHECK, 0L, 0L)) #define Button_GetState(hwndCtl) \ ((int)SendMessage((hwndCtl), BM_GETSTATE, 0L, 0L)) #define Button_GetText(hwndCtl, lpch, cchMax) \ GetWindowText((hwndCtl), (lpch), (cchMax)) #define Button_GetTextLength(hwndCtl) \ GetWindowTextLength(hwndCtl) #define Button_SetCheck(hwndCtl, check) \ ((void)SendMessage((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L)) #define Button_SetState(hwndCtl, state) \ ((UINT)SendMessage((hwndCtl), BM_SETSTATE, (WPARAM)(int)(state), 0L)) #define Button_SetStyle(hwndCtl, style, fRedraw) \ ((void)SendMessage((hwndCtl), BM_SETSTYLE, (WPARAM)LOWORD(style), MAKELPARAM((fRedraw) != 0, 0))) #define Button_SetText(hwndCtl, lpsz) \ SetWindowText((hwndCtl), (lpsz)) /* ComboBox Message APIs */ #define ComboBox_AddItemData(hwndCtl, data) \ ((int)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(data))) #define ComboBox_AddString(hwndCtl, lpsz) \ ((int)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz))) #define ComboBox_DeleteString(hwndCtl, index) \ ((int)SendMessage((hwndCtl), CB_DELETESTRING, (WPARAM)(int)(index), 0L)) #define ComboBox_Dir(hwndCtl, attrs, lpszFileSpec) \ ((int)SendMessage((hwndCtl), CB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec))) #define ComboBox_Enable(hwndCtl, fEnable) \ EnableWindow((hwndCtl), (fEnable)) #define ComboBox_FindItemData(hwndCtl, indexStart, data) \ ((int)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data))) #define ComboBox_FindString(hwndCtl, indexStart, lpszFind) \ ((int)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind))) #define ComboBox_FindStringExact(hwndCtl, indexStart, lpszFind) \ ((int)SendMessage((hwndCtl), CB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind))) #define ComboBox_GetCount(hwndCtl) \ ((int)SendMessage((hwndCtl), CB_GETCOUNT, 0L, 0L)) #define ComboBox_GetCurSel(hwndCtl) \ ((int)SendMessage((hwndCtl), CB_GETCURSEL, 0L, 0L)) #define ComboBox_GetDroppedControlRect(hwndCtl, lprc) \ ((void)SendMessage((hwndCtl), CB_GETDROPPEDCONTROLRECT, 0L, (LPARAM)(RECT *)(lprc))) #define ComboBox_GetDroppedState(hwndCtl) \ ((BOOL)SendMessage((hwndCtl), CB_GETDROPPEDSTATE, 0L, 0L)) #define ComboBox_GetEditSel(hwndCtl) \ ((DWORD)SendMessage((hwndCtl), CB_GETEDITSEL, 0L, 0L)) #define ComboBox_GetExtendedUI(hwndCtl) \ ((UINT)SendMessage((hwndCtl), CB_GETEXTENDEDUI, 0L, 0L)) #define ComboBox_GetItemData(hwndCtl, index) \ ((LRESULT)SendMessage((hwndCtl), CB_GETITEMDATA, (WPARAM)(int)(index), 0L)) #define ComboBox_GetItemHeight(hwndCtl) \ ((int)SendMessage((hwndCtl), CB_GETITEMHEIGHT, 0L, 0L)) #define ComboBox_GetLBText(hwndCtl, index, lpszBuffer) \ ((int)SendMessage((hwndCtl), CB_GETLBTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer))) #define ComboBox_GetLBTextLen(hwndCtl, index) \ ((int)SendMessage((hwndCtl), CB_GETLBTEXTLEN, (WPARAM)(int)(index), 0L)) #define ComboBox_InsertItemData(hwndCtl, index, data) \ ((int)SendMessage((hwndCtl), CB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(data))) #define ComboBox_LimitText(hwndCtl, cchLimit) \ ((int)SendMessage((hwndCtl), CB_LIMITTEXT, (WPARAM)(int)(cchLimit), 0L)) #define ComboBox_GetText(hwndCtl, lpch, cchMax) \ GetWindowText((hwndCtl), (lpch), (cchMax)) #define ComboBox_GetTextLength(hwndCtl) \ GetWindowTextLength(hwndCtl) #define ComboBox_InsertString(hwndCtl, index, lpsz) \ ((int)SendMessage((hwndCtl), CB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz))) #define ComboBox_LimitText(hwndCtl, cchLimit) \ ((int)SendMessage((hwndCtl), CB_LIMITTEXT, (WPARAM)(int)(cchLimit), 0L)) #define ComboBox_ResetContent(hwndCtl) \ ((int)SendMessage((hwndCtl), CB_RESETCONTENT, 0L, 0L)) #define ComboBox_SelectItemData(hwndCtl, indexStart, data) \ ((int)SendMessage((hwndCtl), CB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data))) #define ComboBox_SelectString(hwndCtl, indexStart, lpszSelect) \ ((int)SendMessage((hwndCtl), CB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszSelect))) #define ComboBox_SetCurSel(hwndCtl, index) \ ((int)SendMessage((hwndCtl), CB_SETCURSEL, (WPARAM)(int)(index), 0L)) #define ComboBox_SetEditSel(hwndCtl, ichStart, ichEnd) \ ((int)SendMessage((hwndCtl), CB_SETEDITSEL, 0L, MAKELPARAM((ichStart), (ichEnd)))) #define ComboBox_SetExtendedUI(hwndCtl, flags) \ ((int)SendMessage((hwndCtl), CB_SETEXTENDEDUI, (WPARAM)(UINT)(flags), 0L)) #define ComboBox_SetItemData(hwndCtl, index, data) \ ((int)SendMessage((hwndCtl), CB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(DWORD)(data))) #define ComboBox_SetItemHeight(hwndCtl, index, cyItem) \ ((int)SendMessage((hwndCtl), CB_SETITEMHEIGHT, (WPARAM)(int)(index), (LPARAM)(int)cyItem)) #define ComboBox_SetText(hwndCtl, lpsz) \ SetWindowText((hwndCtl), (lpsz)) #define ComboBox_ShowDropdown(hwndCtl, fShow) \ ((BOOL)SendMessage((hwndCtl), CB_SHOWDROPDOWN, (WPARAM)(BOOL)(fShow), 0L)) /* Edit Message APIs */ #define Edit_CanUndo(hwndCtl) \ ((BOOL)SendMessage((hwndCtl), EM_CANUNDO, 0L, 0L)) #define Edit_EmptyUndoBuffer(hwndCtl) \ ((void)SendMessage((hwndCtl), EM_EMPTYUNDOBUFFER, 0L, 0L)) #define Edit_Enable(hwndCtl, fEnable) \ EnableWindow((hwndCtl), (fEnable)) #define Edit_FmtLines(hwndCtl, fAddEOL) \ ((BOOL)SendMessage((hwndCtl), EM_FMTLINES, (WPARAM)(BOOL)(fAddEOL), 0L)) #define Edit_GetFirstVisibleLine(hwndCtl) \ ((int)SendMessage((hwndCtl), EM_GETFIRSTVISIBLELINE, 0L, 0L)) #define Edit_GetHandle(hwndCtl) \ ((HLOCAL)SendMessage((hwndCtl), EM_GETHANDLE, 0L, 0L)) #define Edit_GetLine(hwndCtl, line, lpch, cchMax) \ ((*((int *)(lpch)) = (cchMax)), ((int)SendMessage((hwndCtl), EM_GETLINE, (WPARAM)(int)(line), (LPARAM)(LPTSTR)(lpch)))) #define Edit_GetModify(hwndCtl) \ ((BOOL)SendMessage((hwndCtl), EM_GETMODIFY, 0L, 0L)) #define Edit_GetPasswordChar(hwndCtl) \ ((TCHAR)SendMessage((hwndCtl), EM_GETPASSWORDCHAR, 0L, 0L)) #define Edit_GetRect(hwndCtl, lprc) \ ((void)SendMessage((hwndCtl), EM_GETRECT, 0L, (LPARAM)(RECT *)(lprc))) #define Edit_GetSel(hwndCtl) \ ((DWORD)SendMessage((hwndCtl), EM_GETSEL, 0L, 0L)) #define Edit_GetText(hwndCtl, lpch, cchMax) \ GetWindowText((hwndCtl), (lpch), (cchMax)) #define Edit_GetTextLength(hwndCtl) \ GetWindowTextLength(hwndCtl) #define Edit_GetWordBreakProc(hwndCtl) \ ((EDITWORDBREAKPROC)SendMessage((hwndCtl), EM_GETWORDBREAKPROC, 0L, 0L)) #define Edit_LimitText(hwndCtl, cchMax) \ ((void)SendMessage((hwndCtl), EM_LIMITTEXT, (WPARAM)(UINT)(cchMax), 0L)) #define Edit_LineFromChar(hwndCtl, ich) \ ((int)SendMessage((hwndCtl), EM_LINEFROMCHAR, (WPARAM)(int)(ich), 0L)) #define Edit_LineIndex(hwndCtl, line) \ ((int)SendMessage((hwndCtl), EM_LINEINDEX, (WPARAM)(int)(line), 0L)) #define Edit_GetLineCount(hwndCtl) \ ((int)SendMessage((hwndCtl), EM_GETLINECOUNT, 0L, 0L)) #define Edit_LineLength(hwndCtl, line) \ ((int)SendMessage((hwndCtl), EM_LINELENGTH, (WPARAM)(int)(line), 0L)) #define Edit_ReplaceSel(hwndCtl, lpszReplace) \ ((void)SendMessage((hwndCtl), EM_REPLACESEL, 0L, (LPARAM)(LPCTSTR)(lpszReplace))) #define Edit_Scroll(hwndCtl, dv, dh) \ ((void)SendMessage((hwndCtl), EM_LINESCROLL, (WPARAM)(int)(dh), (LPARAM)(int)(dv))) #define Edit_ScrollCaret(hwndCtl) \ ((BOOL)SendMessage((hwndCtl), EM_SCROLLCARET, 0, 0L)) #define Edit_SetHandle(hwndCtl, h) \ ((void)SendMessage((hwndCtl), EM_SETHANDLE, (WPARAM)(HLOCAL)(h), 0L)) #define Edit_SetModify(hwndCtl, fModified) \ ((void)SendMessage((hwndCtl), EM_SETMODIFY, (WPARAM)(UINT)(fModified), 0L)) #define Edit_SetPasswordChar(hwndCtl, ch) \ ((void)SendMessage((hwndCtl), EM_SETPASSWORDCHAR, (WPARAM)(UINT)(ch), 0L)) #define Edit_SetReadOnly(hwndCtl, fReadOnly) \ ((BOOL)SendMessage((hwndCtl), EM_SETREADONLY, (WPARAM)(BOOL)(fReadOnly), 0L)) #define Edit_SetRect(hwndCtl, lprc) \ ((void)SendMessage((hwndCtl), EM_SETRECT, 0L, (LPARAM)(const RECT *)(lprc))) #define Edit_SetRectNoPaint(hwndCtl, lprc) \ ((void)SendMessage((hwndCtl), EM_SETRECTNP, 0L, (LPARAM)(const RECT *)(lprc))) #define Edit_SetSel(hwndCtl, ichStart, ichEnd) \ ((void)SendMessage((hwndCtl), EM_SETSEL, (ichStart), (ichEnd))) #define Edit_SetTabStops(hwndCtl, cTabs, lpTabs) \ ((void)SendMessage((hwndCtl), EM_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(const int *)(lpTabs))) #define Edit_SetText(hwndCtl, lpsz) \ SetWindowText((hwndCtl), (lpsz)) #define Edit_SetWordBreakProc(hwndCtl, lpfnWordBreak) \ ((void)SendMessage((hwndCtl), EM_SETWORDBREAKPROC, 0L, (LPARAM)(EDITWORDBREAKPROC)(lpfnWordBreak))) #define Edit_Undo(hwndCtl) \ ((BOOL)SendMessage((hwndCtl), EM_UNDO, 0L, 0L)) /* ListBox Message APIs */ #define ListBox_AddItemData(hwndCtl, data) \ ((int)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(data))) #define ListBox_AddString(hwndCtl, lpsz) \ ((int)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz))) #define ListBox_DeleteString(hwndCtl, index) \ ((int)SendMessage((hwndCtl), LB_DELETESTRING, (WPARAM)(int)(index), 0L)) #define ListBox_Dir(hwndCtl, attrs, lpszFileSpec) \ ((int)SendMessage((hwndCtl), LB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec))) #define ListBox_Enable(hwndCtl, fEnable) \ EnableWindow((hwndCtl), (fEnable)) #define ListBox_FindItemData(hwndCtl, indexStart, data) \ ((int)SendMessage((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data))) #define ListBox_FindString(hwndCtl, indexStart, lpszFind) \ ((int)SendMessage((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind))) #define ListBox_FindStringExact(hwndCtl, indexStart, lpszFind) \ ((int)SendMessage((hwndCtl), LB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind))) #define ListBox_GetCaretIndex(hwndCtl) \ ((int)SendMessage((hwndCtl), LB_GETCARETINDEX, 0L, 0L)) #define ListBox_GetCurSel(hwndCtl) \ ((int)SendMessage((hwndCtl), LB_GETCURSEL, 0L, 0L)) #define ListBox_GetCount(hwndCtl) \ ((int)SendMessage((hwndCtl), LB_GETCOUNT, 0L, 0L)) #define ListBox_GetHorizontalExtent(hwndCtl) \ ((int)SendMessage((hwndCtl), LB_GETHORIZONTALEXTENT, 0L, 0L)) #define ListBox_GetItemData(hwndCtl, index) \ ((LRESULT)SendMessage((hwndCtl), LB_GETITEMDATA, (WPARAM)(int)(index), 0L)) #define ListBox_GetItemHeight(hwndCtl, index) \ ((int)SendMessage((hwndCtl), LB_GETITEMHEIGHT, (WPARAM)(int)(index), 0L)) #define ListBox_GetItemRect(hwndCtl, index, lprc) \ ((int)SendMessage((hwndCtl), LB_GETITEMRECT, (WPARAM)(int)(index), (LPARAM)(RECT *)(lprc))) #define ListBox_GetSel(hwndCtl, index) \ ((int)SendMessage((hwndCtl), LB_GETSEL, (WPARAM)(int)(index), 0L)) #define ListBox_GetSelCount(hwndCtl) \ ((int)SendMessage((hwndCtl), LB_GETSELCOUNT, 0L, 0L)) #define ListBox_GetSelItems(hwndCtl, cItems, lpItems) \ ((int)SendMessage((hwndCtl), LB_GETSELITEMS, (WPARAM)(int)(cItems), (LPARAM)(int *)(lpItems))) #define ListBox_GetText(hwndCtl, index, lpszBuffer) \ ((int)SendMessage((hwndCtl), LB_GETTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer))) #define ListBox_GetTextLen(hwndCtl, index) \ ((int)SendMessage((hwndCtl), LB_GETTEXTLEN, (WPARAM)(int)(index), 0L)) #define ListBox_GetTopIndex(hwndCtl) \ ((int)SendMessage((hwndCtl), LB_GETTOPINDEX, 0L, 0L)) #define ListBox_InsertItemData(hwndCtl, index, data) \ ((int)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(data))) #define ListBox_InsertString(hwndCtl, index, lpsz) \ ((int)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz))) #define ListBox_ResetContent(hwndCtl) \ ((BOOL)SendMessage((hwndCtl), LB_RESETCONTENT, 0L, 0L)) #define ListBox_SelectItemData(hwndCtl, indexStart, data) \ ((int)SendMessage((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data))) #define ListBox_SelectString(hwndCtl, indexStart, lpszFind) \ ((int)SendMessage((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind))) #define ListBox_SelItemRange(hwndCtl, fSelect, first, last) \ ((int)SendMessage((hwndCtl), LB_SELITEMRANGE, (WPARAM)(BOOL)(fSelect), MAKELPARAM((first), (last)))) #define ListBox_SetCaretIndex(hwndCtl, index) \ ((int)SendMessage((hwndCtl), LB_SETCARETINDEX, (WPARAM)(int)(index), 0L)) #define ListBox_SetColumnWidth(hwndCtl, cxColumn) \ ((void)SendMessage((hwndCtl), LB_SETCOLUMNWIDTH, (WPARAM)(int)(cxColumn), 0L)) #define ListBox_SetCurSel(hwndCtl, index) \ ((int)SendMessage((hwndCtl), LB_SETCURSEL, (WPARAM)(int)(index), 0L)) #define ListBox_SetHorizontalExtent(hwndCtl, cxExtent) \ ((void)SendMessage((hwndCtl), LB_SETHORIZONTALEXTENT, (WPARAM)(int)(cxExtent), 0L)) #define ListBox_SetItemData(hwndCtl, index, data) \ ((int)SendMessage((hwndCtl), LB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(DWORD)(data))) #define ListBox_SetItemHeight(hwndCtl, index, cy) \ ((int)SendMessage((hwndCtl), LB_SETITEMHEIGHT, (WPARAM)(int)(index), MAKELPARAM((cy), 0))) #define ListBox_SetSel(hwndCtl, fSelect, index) \ ((int)SendMessage((hwndCtl), LB_SETSEL, (WPARAM)(BOOL)(fSelect), (LPARAM)(UINT)(index))) #define ListBox_SetTabStops(hwndCtl, cTabs, lpTabs) \ ((BOOL)SendMessage((hwndCtl), LB_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(int *)(lpTabs))) #define ListBox_SetTopIndex(hwndCtl, indexTop) \ ((int)SendMessage((hwndCtl), LB_SETTOPINDEX, (WPARAM)(int)(indexTop), 0L)) /* Scrollbar Message APIs */ #define ScrollBar_Enable(hwndCtl, flags) \ EnableScrollBar((hwndCtl), SB_CTL, (flags)) #define ScrollBar_GetPos(hwndCtl) \ GetScrollPos((hwndCtl), SB_CTL) #define ScrollBar_GetRange(hwndCtl, lpposMin, lpposMax) \ GetScrollRange((hwndCtl), SB_CTL, (lpposMin), (lpposMax)) #define ScrollBar_SetPos(hwndCtl, pos, fRedraw) \ SetScrollPos((hwndCtl), SB_CTL, (pos), (fRedraw)) #define ScrollBar_SetRange(hwndCtl, posMin, posMax, fRedraw) \ SetScrollRange((hwndCtl), SB_CTL, (posMin), (posMax), (fRedraw)) #define ScrollBar_Show(hwndCtl, fShow) \ ShowWindow((hwndCtl), (fShow) ? SW_SHOWNORMAL : SW_HIDE) /* Static Message APIs */ #define Static_Enable(hwndCtl, fEnable) \ EnableWindow((hwndCtl), (fEnable)) #define Static_GetIcon(hwndCtl, hIcon) \ ((HICON)SendMessage((hwndCtl), STM_GETICON, 0L, 0L)) #define Static_GetText(hwndCtl, lpch, cchMax) \ GetWindowText((hwndCtl), (lpch), (cchMax)) #define Static_GetTextLength(hwndCtl) \ GetWindowTextLength(hwndCtl) #define Static_SetIcon(hwndCtl, hIcon) \ ((HICON)SendMessage((hwndCtl), STM_SETICON, (WPARAM)(HICON)(hIcon), 0L)) #define Static_SetText(hwndCtl, lpsz) \ SetWindowText((hwndCtl), (lpsz)) /****** Message crackers ****************************************************/ #define HANDLE_MSG(hwnd, message, fn) \ case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn)) /* void Cls_OnCompacting(HWND hwnd, UINT compactRatio) */ #define HANDLE_WM_COMPACTING(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam)), 0L) #define FORWARD_WM_COMPACTING(hwnd, compactRatio, fn) \ (void)(fn)((hwnd), WM_COMPACTING, (WPARAM)(UINT)(compactRatio), 0L) /* void Cls_OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName) */ #define HANDLE_WM_WININICHANGE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (LPCTSTR)(lParam)), 0L) #define FORWARD_WM_WININICHANGE(hwnd, lpszSectionName, fn) \ (void)(fn)((hwnd), WM_WININICHANGE, 0L, (LPARAM)(LPCTSTR)(lpszSectionName)) /* void Cls_OnSysColorChange(HWND hwnd) */ #define HANDLE_WM_SYSCOLORCHANGE(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_SYSCOLORCHANGE(hwnd, fn) \ (void)(fn)((hwnd), WM_SYSCOLORCHANGE, 0L, 0L) /* BOOL Cls_OnQueryNewPalette(HWND hwnd) */ #define HANDLE_WM_QUERYNEWPALETTE(hwnd, wParam, lParam, fn) \ MAKELRESULT((BOOL)(fn)(hwnd), 0L) #define FORWARD_WM_QUERYNEWPALETTE(hwnd, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_QUERYNEWPALETTE, 0L, 0L) /* void Cls_OnPaletteIsChanging(HWND hwnd, HWND hwndPaletteChange) */ #define HANDLE_WM_PALETTEISCHANGING(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam)), 0L) #define FORWARD_WM_PALETTEISCHANGING(hwnd, hwndPaletteChange, fn) \ (void)(fn)((hwnd), WM_PALETTEISCHANGING, (WPARAM)(HWND)(hwndPaletteChange), 0L) /* void Cls_OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange) */ #define HANDLE_WM_PALETTECHANGED(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam)), 0L) #define FORWARD_WM_PALETTECHANGED(hwnd, hwndPaletteChange, fn) \ (void)(fn)((hwnd), WM_PALETTECHANGED, (WPARAM)(HWND)(hwndPaletteChange), 0L) /* void Cls_OnFontChange(HWND hwnd) */ #define HANDLE_WM_FONTCHANGE(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_FONTCHANGE(hwnd, fn) \ (void)(fn)((hwnd), WM_FONTCHANGE, 0L, 0L) /* void Cls_OnSpoolerStatus(HWND hwnd, UINT status, int cJobInQueue) */ #define HANDLE_WM_SPOOLERSTATUS(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam)), 0L) #define FORWARD_WM_SPOOLERSTATUS(hwnd, status, cJobInQueue, fn) \ (void)(fn)((hwnd), WM_SPOOLERSTATUS, (WPARAM)(status), MAKELPARAM((cJobInQueue), 0)) /* void Cls_OnDevModeChange(HWND hwnd, LPCTSTR lpszDeviceName) */ #define HANDLE_WM_DEVMODECHANGE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (LPCTSTR)(lParam)), 0L) #define FORWARD_WM_DEVMODECHANGE(hwnd, lpszDeviceName, fn) \ (void)(fn)((hwnd), WM_DEVMODECHANGE, 0L, (LPARAM)(LPCTSTR)(lpszDeviceName)) /* void Cls_OnTimeChange(HWND hwnd) */ #define HANDLE_WM_TIMECHANGE(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_TIMECHANGE(hwnd, fn) \ (void)(fn)((hwnd), WM_TIMECHANGE, 0L, 0L) /* void Cls_OnPower(HWND hwnd, int code) */ #define HANDLE_WM_POWER(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(wParam)), 0L) #define FORWARD_WM_POWER(hwnd, code, fn) \ (void)(fn)((hwnd), WM_POWER, (WPARAM)(int)(code), 0L) /* BOOL Cls_OnQueryEndSession(HWND hwnd) */ #define HANDLE_WM_QUERYENDSESSION(hwnd, wParam, lParam, fn) \ MAKELRESULT((BOOL)(fn)(hwnd), 0L) #define FORWARD_WM_QUERYENDSESSION(hwnd, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_QUERYENDSESSION, 0L, 0L) /* void Cls_OnEndSession(HWND hwnd, BOOL fEnding) */ #define HANDLE_WM_ENDSESSION(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (BOOL)(wParam)), 0L) #define FORWARD_WM_ENDSESSION(hwnd, fEnding, fn) \ (void)(fn)((hwnd), WM_ENDSESSION, (WPARAM)(BOOL)(fEnding), 0L) /* void Cls_OnQuit(HWND hwnd, int exitCode) */ #define HANDLE_WM_QUIT(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(wParam)), 0L) #define FORWARD_WM_QUIT(hwnd, exitCode, fn) \ (void)(fn)((hwnd), WM_QUIT, (WPARAM)(exitCode), 0L) /* This message is in Windows 3.1 only */ /* void Cls_OnSystemError(HWND hwnd, int errCode) */ #define HANDLE_WM_SYSTEMERROR(hwnd, wParam, lParam, fn) 0L #define FORWARD_WM_SYSTEMERROR(hwnd, errCode, fn) 0L /* BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */ #define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L) #define FORWARD_WM_CREATE(hwnd, lpCreateStruct, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_CREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct)) /* BOOL Cls_OnNCCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */ #define HANDLE_WM_NCCREATE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPCREATESTRUCT)(lParam)) #define FORWARD_WM_NCCREATE(hwnd, lpCreateStruct, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_NCCREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct)) /* void Cls_OnDestroy(HWND hwnd) */ #define HANDLE_WM_DESTROY(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_DESTROY(hwnd, fn) \ (void)(fn)((hwnd), WM_DESTROY, 0L, 0L) /* void Cls_OnNCDestroy(HWND hwnd) */ #define HANDLE_WM_NCDESTROY(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_NCDESTROY(hwnd, fn) \ (void)(fn)((hwnd), WM_NCDESTROY, 0L, 0L) /* void Cls_OnShowWindow(HWND hwnd, BOOL fShow, UINT status) */ #define HANDLE_WM_SHOWWINDOW(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (BOOL)(wParam), (UINT)(lParam)), 0L) #define FORWARD_WM_SHOWWINDOW(hwnd, fShow, status, fn) \ (void)(fn)((hwnd), WM_SHOWWINDOW, (WPARAM)(BOOL)(fShow), (LPARAM)(UINT)(status)) /* void Cls_OnSetRedraw(HWND hwnd, BOOL fRedraw) */ #define HANDLE_WM_SETREDRAW(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (BOOL)(wParam)), 0L) #define FORWARD_WM_SETREDRAW(hwnd, fRedraw, fn) \ (void)(fn)((hwnd), WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L) /* void Cls_OnEnable(HWND hwnd, BOOL fEnable) */ #define HANDLE_WM_ENABLE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (BOOL)(wParam)), 0L) #define FORWARD_WM_ENABLE(hwnd, fEnable, fn) \ (void)(fn)((hwnd), WM_ENABLE, (WPARAM)(BOOL)(fEnable), 0L) /* void Cls_OnSetText(HWND hwnd, LPCTSTR lpszText) */ #define HANDLE_WM_SETTEXT(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (LPCTSTR)(lParam)), 0L) #define FORWARD_WM_SETTEXT(hwnd, lpszText, fn) \ (void)(fn)((hwnd), WM_SETTEXT, 0L, (LPARAM)(LPCTSTR)(lpszText)) /* INT Cls_OnGetText(HWND hwnd, int cchTextMax, LPTSTR lpszText) */ #define HANDLE_WM_GETTEXT(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(int)(fn)((hwnd), (int)(wParam), (LPTSTR)(lParam)) #define FORWARD_WM_GETTEXT(hwnd, cchTextMax, lpszText, fn) \ (int)(DWORD)(fn)((hwnd), WM_GETTEXT, (WPARAM)(int)(cchTextMax), (LPARAM)(LPTSTR)(lpszText)) /* INT Cls_OnGetTextLength(HWND hwnd) */ #define HANDLE_WM_GETTEXTLENGTH(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(int)(fn)(hwnd) #define FORWARD_WM_GETTEXTLENGTH(hwnd, fn) \ (int)(DWORD)(fn)((hwnd), WM_GETTEXTLENGTH, 0L, 0L) /* BOOL Cls_OnWindowPosChanging(HWND hwnd, LPWINDOWPOS lpwpos) */ #define HANDLE_WM_WINDOWPOSCHANGING(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPWINDOWPOS)(lParam)) #define FORWARD_WM_WINDOWPOSCHANGING(hwnd, lpwpos, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_WINDOWPOSCHANGING, 0L, (LPARAM)(LPWINDOWPOS)(lpwpos)) /* void Cls_OnWindowPosChanged(HWND hwnd, const LPWINDOWPOS lpwpos) */ #define HANDLE_WM_WINDOWPOSCHANGED(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (const LPWINDOWPOS)(lParam)), 0L) #define FORWARD_WM_WINDOWPOSCHANGED(hwnd, lpwpos, fn) \ (void)(fn)((hwnd), WM_WINDOWPOSCHANGED, 0L, (LPARAM)(const LPWINDOWPOS)(lpwpos)) /* void Cls_OnMove(HWND hwnd, int x, int y) */ #define HANDLE_WM_MOVE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L) #define FORWARD_WM_MOVE(hwnd, x, y, fn) \ (void)(fn)((hwnd), WM_MOVE, 0L, MAKELPARAM((x), (y))) /* void Cls_OnSize(HWND hwnd, UINT state, int cx, int cy) */ #define HANDLE_WM_SIZE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L) #define FORWARD_WM_SIZE(hwnd, state, cx, cy, fn) \ (void)(fn)((hwnd), WM_SIZE, (WPARAM)(UINT)(state), MAKELPARAM((cx), (cy))) /* void Cls_OnClose(HWND hwnd) */ #define HANDLE_WM_CLOSE(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_CLOSE(hwnd, fn) \ (void)(fn)((hwnd), WM_CLOSE, 0L, 0L) /* BOOL Cls_OnQueryOpen(HWND hwnd) */ #define HANDLE_WM_QUERYOPEN(hwnd, wParam, lParam, fn) \ MAKELRESULT((BOOL)(fn)(hwnd), 0L) #define FORWARD_WM_QUERYOPEN(hwnd, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_QUERYOPEN, 0L, 0L) /* void Cls_OnPaint(HWND hwnd) */ #define HANDLE_WM_PAINT(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_PAINT(hwnd, fn) \ (void)(fn)((hwnd), WM_PAINT, 0L, 0L) /* BOOL Cls_OnEraseBkgnd(HWND hwnd, HDC hdc) */ #define HANDLE_WM_ERASEBKGND(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam)) #define FORWARD_WM_ERASEBKGND(hwnd, hdc, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_ERASEBKGND, (WPARAM)(HDC)(hdc), 0L) /* BOOL Cls_OnIconEraseBkgnd(HWND hwnd, HDC hdc) */ #define HANDLE_WM_ICONERASEBKGND(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam)) #define FORWARD_WM_ICONERASEBKGND(hwnd, hdc, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_ICONERASEBKGND, (WPARAM)(HDC)(hdc), 0L) /* void Cls_OnNCPaint(HWND hwnd, HRGN hrgn) */ #define HANDLE_WM_NCPAINT(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HRGN)(wParam)), 0L) #define FORWARD_WM_NCPAINT(hwnd, hrgn, fn) \ (void)(fn)((hwnd), WM_NCPAINT, (WPARAM)(HRGN)(hrgn), 0L) /* UINT Cls_OnNCCalcSize(HWND hwnd, BOOL fCalcValidRects, NCCALCSIZE_PARAMS * lpcsp) */ #define HANDLE_WM_NCCALCSIZE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(UINT)(fn)((hwnd), (BOOL)(0), (NCCALCSIZE_PARAMS *)(lParam)) #define FORWARD_WM_NCCALCSIZE(hwnd, fCalcValidRects, lpcsp, fn) \ (UINT)(DWORD)(fn)((hwnd), WM_NCCALCSIZE, 0L, (LPARAM)(NCCALCSIZE_PARAMS *)(lpcsp)) /* HICON Cls_OnQueryDragIcon(HWND hwnd) */ #define HANDLE_WM_QUERYDRAGICON(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(UINT)(fn)(hwnd) #define FORWARD_WM_QUERYDRAGICON(hwnd, fn) \ (HICON)(UINT)(DWORD)(fn)((hwnd), WM_QUERYDRAGICON, 0L, 0L) /* void Cls_OnDropFiles(HWND hwnd, HDROP hdrop) */ #define HANDLE_WM_DROPFILES(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HDROP)(wParam)), 0L) #define FORWARD_WM_DROPFILES(hwnd, hdrop, fn) \ (void)(fn)((hwnd), WM_DROPFILES, (WPARAM)(HDROP)(hdrop), 0L) /* void Cls_OnActivate(HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized) */ #define HANDLE_WM_ACTIVATE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (BOOL)HIWORD(wParam)), 0L) #define FORWARD_WM_ACTIVATE(hwnd, state, hwndActDeact, fMinimized, fn) \ (void)(fn)((hwnd), WM_ACTIVATE, MAKEWPARAM((state), (fMinimized)), (LPARAM)(HWND)(hwndActDeact)) /* void Cls_OnActivateApp(HWND hwnd, BOOL fActivate, DWORD dwThreadId) */ #define HANDLE_WM_ACTIVATEAPP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (BOOL)(wParam), (DWORD)(lParam)), 0L) #define FORWARD_WM_ACTIVATEAPP(hwnd, fActivate, dwThreadId, fn) \ (void)(fn)((hwnd), WM_ACTIVATEAPP, (WPARAM)(BOOL)(fActivate), (LPARAM)(dwThreadId)) /* BOOL Cls_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized) */ #define HANDLE_WM_NCACTIVATE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (BOOL)(wParam), 0L, 0L) #define FORWARD_WM_NCACTIVATE(hwnd, fActive, hwndActDeact, fMinimized, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_NCACTIVATE, (WPARAM)(BOOL)(fActive), 0L) /* void Cls_OnSetFocus(HWND hwnd, HWND hwndOldFocus) */ #define HANDLE_WM_SETFOCUS(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam)), 0L) #define FORWARD_WM_SETFOCUS(hwnd, hwndOldFocus, fn) \ (void)(fn)((hwnd), WM_SETFOCUS, (WPARAM)(HWND)(hwndOldFocus), 0L) /* void Cls_OnKillFocus(HWND hwnd, HWND hwndNewFocus) */ #define HANDLE_WM_KILLFOCUS(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam)), 0L) #define FORWARD_WM_KILLFOCUS(hwnd, hwndNewFocus, fn) \ (void)(fn)((hwnd), WM_KILLFOCUS, (WPARAM)(HWND)(hwndNewFocus), 0L) /* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */ #define HANDLE_WM_KEYDOWN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L) #define FORWARD_WM_KEYDOWN(hwnd, vk, cRepeat, flags, fn) \ (void)(fn)((hwnd), WM_KEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags))) /* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */ #define HANDLE_WM_KEYUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L) #define FORWARD_WM_KEYUP(hwnd, vk, cRepeat, flags, fn) \ (void)(fn)((hwnd), WM_KEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags))) /* void Cls_OnChar(HWND hwnd, TCHAR ch, int cRepeat) */ #define HANDLE_WM_CHAR(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L) #define FORWARD_WM_CHAR(hwnd, ch, cRepeat, fn) \ (void)(fn)((hwnd), WM_CHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0)) /* void Cls_OnDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */ #define HANDLE_WM_DEADCHAR(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L) #define FORWARD_WM_DEADCHAR(hwnd, ch, cRepeat, fn) \ (void)(fn)((hwnd), WM_DEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0)) /* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */ #define HANDLE_WM_SYSKEYDOWN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L) #define FORWARD_WM_SYSKEYDOWN(hwnd, vk, cRepeat, flags, fn) \ (void)(fn)((hwnd), WM_SYSKEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags))) /* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */ #define HANDLE_WM_SYSKEYUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L) #define FORWARD_WM_SYSKEYUP(hwnd, vk, cRepeat, flags, fn) \ (void)(fn)((hwnd), WM_SYSKEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags))) /* void Cls_OnSysChar(HWND hwnd, TCHAR ch, int cRepeat) */ #define HANDLE_WM_SYSCHAR(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L) #define FORWARD_WM_SYSCHAR(hwnd, ch, cRepeat, fn) \ (void)(fn)((hwnd), WM_SYSCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0)) /* void Cls_OnSysDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */ #define HANDLE_WM_SYSDEADCHAR(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L) #define FORWARD_WM_SYSDEADCHAR(hwnd, ch, cRepeat, fn) \ (void)(fn)((hwnd), WM_SYSDEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0)) /* void Cls_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags) */ #define HANDLE_WM_MOUSEMOVE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_MOUSEMOVE(hwnd, x, y, keyFlags, fn) \ (void)(fn)((hwnd), WM_MOUSEMOVE, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y))) /* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */ #define HANDLE_WM_LBUTTONDOWN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_LBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \ (void)(fn)((hwnd), (fDoubleClick) ? WM_LBUTTONDBLCLK : WM_LBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y))) /* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */ #define HANDLE_WM_LBUTTONDBLCLK(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) /* void Cls_OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags) */ #define HANDLE_WM_LBUTTONUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_LBUTTONUP(hwnd, x, y, keyFlags, fn) \ (void)(fn)((hwnd), WM_LBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y))) /* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */ #define HANDLE_WM_RBUTTONDOWN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_RBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \ (void)(fn)((hwnd), (fDoubleClick) ? WM_RBUTTONDBLCLK : WM_RBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y))) /* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */ #define HANDLE_WM_RBUTTONDBLCLK(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) /* void Cls_OnRButtonUp(HWND hwnd, int x, int y, UINT flags) */ #define HANDLE_WM_RBUTTONUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_RBUTTONUP(hwnd, x, y, keyFlags, fn) \ (void)(fn)((hwnd), WM_RBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y))) /* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */ #define HANDLE_WM_MBUTTONDOWN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_MBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \ (void)(fn)((hwnd), (fDoubleClick) ? WM_MBUTTONDBLCLK : WM_MBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y))) /* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */ #define HANDLE_WM_MBUTTONDBLCLK(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) /* void Cls_OnMButtonUp(HWND hwnd, int x, int y, UINT flags) */ #define HANDLE_WM_MBUTTONUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_MBUTTONUP(hwnd, x, y, keyFlags, fn) \ (void)(fn)((hwnd), WM_MBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y))) /* void Cls_OnNCMouseMove(HWND hwnd, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCMOUSEMOVE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_NCMOUSEMOVE(hwnd, x, y, codeHitTest, fn) \ (void)(fn)((hwnd), WM_NCMOUSEMOVE, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y))) /* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCLBUTTONDOWN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_NCLBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \ (void)(fn)((hwnd), (fDoubleClick) ? WM_NCLBUTTONDBLCLK : WM_NCLBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y))) /* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCLBUTTONDBLCLK(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) /* void Cls_OnNCLButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCLBUTTONUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_NCLBUTTONUP(hwnd, x, y, codeHitTest, fn) \ (void)(fn)((hwnd), WM_NCLBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y))) /* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCRBUTTONDOWN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_NCRBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \ (void)(fn)((hwnd), (fDoubleClick) ? WM_NCRBUTTONDBLCLK : WM_NCRBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) ) /* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCRBUTTONDBLCLK(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) /* void Cls_OnNCRButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCRBUTTONUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_NCRBUTTONUP(hwnd, x, y, codeHitTest, fn) \ (void)(fn)((hwnd), WM_NCRBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) ) /* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCMBUTTONDOWN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_NCMBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \ (void)(fn)((hwnd), (fDoubleClick) ? WM_NCMBUTTONDBLCLK : WM_NCMBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) ) /* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCMBUTTONDBLCLK(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) /* void Cls_OnNCMButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */ #define HANDLE_WM_NCMBUTTONUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L) #define FORWARD_WM_NCMBUTTONUP(hwnd, x, y, codeHitTest, fn) \ (void)(fn)((hwnd), WM_NCMBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) ) /* int Cls_OnMouseActivate(HWND hwnd, HWND hwndTopLevel, UINT codeHitTest, UINT msg) */ #define HANDLE_WM_MOUSEACTIVATE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(int)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)) #define FORWARD_WM_MOUSEACTIVATE(hwnd, hwndTopLevel, codeHitTest, msg, fn) \ (int)(DWORD)(fn)((hwnd), WM_MOUSEACTIVATE, (WPARAM)(HWND)(hwndTopLevel), MAKELPARAM((codeHitTest), (msg))) /* void Cls_OnCancelMode(HWND hwnd) */ #define HANDLE_WM_CANCELMODE(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_CANCELMODE(hwnd, fn) (void)(fn)((hwnd), WM_CANCELMODE, 0L, 0L) /* void Cls_OnInitMenu(HWND hwnd, HMENU hMenu) */ #define HANDLE_WM_INITMENU(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HMENU)(wParam)), 0L) #define FORWARD_WM_INITMENU(hwnd, hMenu, fn) \ (void)(fn)((hwnd), WM_INITMENU, (WPARAM)(HMENU)(hMenu), 0L) /* void Cls_OnMenuSelect(HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags) */ #define HANDLE_WM_MENUSELECT(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HMENU)(lParam), \ (HIWORD(wParam) & MF_POPUP) ? 0L : (int)(LOWORD(wParam)), \ (HIWORD(wParam) & MF_POPUP) ? GetSubMenu((HMENU)lParam, LOWORD(wParam)) : 0L, \ (UINT)(((short)HIWORD(wParam) == -1) ? 0xFFFFFFFF : HIWORD(wParam))), 0L) #define FORWARD_WM_MENUSELECT(hwnd, hmenu, item, hmenuPopup, flags, fn) \ (void)(fn)((hwnd), WM_MENUSELECT, MAKEWPARAM((item), (flags)), (LPARAM)(HMENU)((hmenu) ? (hmenu) : (hmenuPopup))) /* DWORD Cls_OnMenuChar(HWND hwnd, UINT ch, UINT flags, HMENU hmenu) */ #define HANDLE_WM_MENUCHAR(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(fn)((hwnd), (UINT)(LOWORD(wParam)), (UINT)HIWORD(wParam), (HMENU)(lParam)) #define FORWARD_WM_MENUCHAR(hwnd, ch, flags, hmenu, fn) \ (DWORD)(fn)((hwnd), WM_MENUCHAR, MAKEWPARAM(flags, (WORD)(ch)), (LPARAM)(HMENU)(hmenu)) /* void Cls_OnHScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */ #define HANDLE_WM_HSCROLL(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)), (int)(short)HIWORD(wParam)), 0L) #define FORWARD_WM_HSCROLL(hwnd, hwndCtl, code, pos, fn) \ (void)(fn)((hwnd), WM_HSCROLL, MAKEWPARAM((UINT)(int)(code),(UINT)(int)(pos)), (LPARAM)(UINT)(hwndCtl)) /* void Cls_OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */ #define HANDLE_WM_VSCROLL(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)), (int)(short)HIWORD(wParam)), 0L) #define FORWARD_WM_VSCROLL(hwnd, hwndCtl, code, pos, fn) \ (void)(fn)((hwnd), WM_VSCROLL, MAKEWPARAM((UINT)(int)(code), (UINT)(int)(pos)), (LPARAM)(HWND)(hwndCtl)) /* void Cls_OnCut(HWND hwnd) */ #define HANDLE_WM_CUT(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_CUT(hwnd, fn) (void)(fn)((hwnd), WM_CUT, 0L, 0L) /* void Cls_OnCopy(HWND hwnd) */ #define HANDLE_WM_COPY(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_COPY(hwnd, fn) (void)(fn)((hwnd), WM_COPY, 0L, 0L) /* void Cls_OnPaste(HWND hwnd) */ #define HANDLE_WM_PASTE(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_PASTE(hwnd, fn) (void)(fn)((hwnd), WM_PASTE, 0L, 0L) /* void Cls_OnClear(HWND hwnd) */ #define HANDLE_WM_CLEAR(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_CLEAR(hwnd, fn) (void)(fn)((hwnd), WM_CLEAR, 0L, 0L) /* void Cls_OnUndo(HWND hwnd) */ #define HANDLE_WM_UNDO(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_UNDO(hwnd, fn) (void)(fn)((hwnd), WM_UNDO, 0L, 0L) /* HANDLE Cls_OnRenderFormat(HWND hwnd, UINT fmt) */ #define HANDLE_WM_RENDERFORMAT(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HANDLE)(fn)((hwnd), (UINT)(wParam)) #define FORWARD_WM_RENDERFORMAT(hwnd, fmt, fn) \ (HANDLE)(UINT_PTR)(fn)((hwnd), WM_RENDERFORMAT, (WPARAM)(UINT)(fmt), 0L) /* void Cls_OnRenderAllFormats(HWND hwnd) */ #define HANDLE_WM_RENDERALLFORMATS(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_RENDERALLFORMATS(hwnd, fn) (void)(fn)((hwnd), WM_RENDERALLFORMATS, 0L, 0L) /* void Cls_OnDestroyClipboard(HWND hwnd) */ #define HANDLE_WM_DESTROYCLIPBOARD(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_DESTROYCLIPBOARD(hwnd, fn) (void)(fn)((hwnd), WM_DESTROYCLIPBOARD, 0L, 0L) /* void Cls_OnDrawClipboard(HWND hwnd) */ #define HANDLE_WM_DRAWCLIPBOARD(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L) #define FORWARD_WM_DRAWCLIPBOARD(hwnd, fn) (void)(fn)((hwnd), WM_DRAWCLIPBOARD, 0L, 0L) /* void Cls_OnPaintClipboard(HWND hwnd, HWND hwndCBViewer, const LPPAINTSTRUCT lpPaintStruct) */ #define HANDLE_WM_PAINTCLIPBOARD(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam), (const LPPAINTSTRUCT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L) #define FORWARD_WM_PAINTCLIPBOARD(hwnd, hwndCBViewer, lpPaintStruct, fn) \ (void)(fn)((hwnd), WM_PAINTCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPPAINTSTRUCT)(lpPaintStruct)) /* void Cls_OnSizeClipboard(HWND hwnd, HWND hwndCBViewer, const LPRECT lprc) */ #define HANDLE_WM_SIZECLIPBOARD(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam), (const LPRECT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L) #define FORWARD_WM_SIZECLIPBOARD(hwnd, hwndCBViewer, lprc, fn) \ (void)(fn)((hwnd), WM_SIZECLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPRECT)(lprc)) /* void Cls_OnVScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */ #define HANDLE_WM_VSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L) #define FORWARD_WM_VSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \ (void)(fn)((hwnd), WM_VSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos))) /* void Cls_OnHScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */ #define HANDLE_WM_HSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L) #define FORWARD_WM_HSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \ (void)(fn)((hwnd), WM_HSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos))) /* void Cls_OnAskCBFormatName(HWND hwnd, int cchMax, LPTSTR rgchName) */ #define HANDLE_WM_ASKCBFORMATNAME(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(wParam), (LPTSTR)(lParam)), 0L) #define FORWARD_WM_ASKCBFORMATNAME(hwnd, cchMax, rgchName, fn) \ (void)(fn)((hwnd), WM_ASKCBFORMATNAME, (WPARAM)(int)(cchMax), (LPARAM)(rgchName)) /* void Cls_OnChangeCBChain(HWND hwnd, HWND hwndRemove, HWND hwndNext) */ #define HANDLE_WM_CHANGECBCHAIN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam), (HWND)(lParam)), 0L) #define FORWARD_WM_CHANGECBCHAIN(hwnd, hwndRemove, hwndNext, fn) \ (void)(fn)((hwnd), WM_CHANGECBCHAIN, (WPARAM)(HWND)(hwndRemove), (LPARAM)(HWND)(hwndNext)) /* BOOL Cls_OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg) */ #define HANDLE_WM_SETCURSOR(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)) #define FORWARD_WM_SETCURSOR(hwnd, hwndCursor, codeHitTest, msg, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_SETCURSOR, (WPARAM)(HWND)(hwndCursor), MAKELPARAM((codeHitTest), (msg))) /* void Cls_OnSysCommand(HWND hwnd, UINT cmd, int x, int y) */ #define HANDLE_WM_SYSCOMMAND(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L) #define FORWARD_WM_SYSCOMMAND(hwnd, cmd, x, y, fn) \ (void)(fn)((hwnd), WM_SYSCOMMAND, (WPARAM)(UINT)(cmd), MAKELPARAM((x), (y))) /* HWND Cls_MDICreate(HWND hwnd, const LPMDICREATESTRUCT lpmcs) */ #define HANDLE_WM_MDICREATE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(UINT)(fn)((hwnd), (LPMDICREATESTRUCT)(lParam)) #define FORWARD_WM_MDICREATE(hwnd, lpmcs, fn) \ (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDICREATE, 0L, (LPARAM)(LPMDICREATESTRUCT)(lpmcs)) /* void Cls_MDIDestroy(HWND hwnd, HWND hwndDestroy) */ #define HANDLE_WM_MDIDESTROY(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam)), 0L) #define FORWARD_WM_MDIDESTROY(hwnd, hwndDestroy, fn) \ (void)(fn)((hwnd), WM_MDIDESTROY, (WPARAM)(hwndDestroy), 0L) /* NOTE: Usable only by MDI client windows */ /* void Cls_MDIActivate(HWND hwnd, BOOL fActive, HWND hwndActivate, HWND hwndDeactivate) */ #define HANDLE_WM_MDIACTIVATE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (BOOL)(lParam == (LPARAM)hwnd), (HWND)(lParam), (HWND)(wParam)), 0L) #define FORWARD_WM_MDIACTIVATE(hwnd, fActive, hwndActivate, hwndDeactivate, fn) \ (void)(fn)(hwnd, WM_MDIACTIVATE, (WPARAM)(hwndDeactivate), (LPARAM)(hwndActivate)) /* void Cls_MDIRestore(HWND hwnd, HWND hwndRestore) */ #define HANDLE_WM_MDIRESTORE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam)), 0L) #define FORWARD_WM_MDIRESTORE(hwnd, hwndRestore, fn) \ (void)(fn)((hwnd), WM_MDIRESTORE, (WPARAM)(hwndRestore), 0L) /* HWND Cls_MDINext(HWND hwnd, HWND hwndCur, BOOL fPrev) */ #define HANDLE_WM_MDINEXT(hwnd, wParam, lParam, fn) \ (LRESULT)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)lParam) #define FORWARD_WM_MDINEXT(hwnd, hwndCur, fPrev, fn) \ (HWND)(UINT_PTR)(fn)((hwnd), WM_MDINEXT, (WPARAM)(hwndCur), (LPARAM)(fPrev)) /* void Cls_MDIMaximize(HWND hwnd, HWND hwndMaximize) */ #define HANDLE_WM_MDIMAXIMIZE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam)), 0L) #define FORWARD_WM_MDIMAXIMIZE(hwnd, hwndMaximize, fn) \ (void)(fn)((hwnd), WM_MDIMAXIMIZE, (WPARAM)(hwndMaximize), 0L) /* BOOL Cls_MDITile(HWND hwnd, UINT cmd) */ #define HANDLE_WM_MDITILE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam)) #define FORWARD_WM_MDITILE(hwnd, cmd, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_MDITILE, (WPARAM)(cmd), 0L) /* BOOL Cls_MDICascade(HWND hwnd, UINT cmd) */ #define HANDLE_WM_MDICASCADE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam)) #define FORWARD_WM_MDICASCADE(hwnd, cmd, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_MDICASCADE, (WPARAM)(cmd), 0L) /* void Cls_MDIIconArrange(HWND hwnd) */ #define HANDLE_WM_MDIICONARRANGE(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_MDIICONARRANGE(hwnd, fn) \ (void)(fn)((hwnd), WM_MDIICONARRANGE, 0L, 0L) /* HWND Cls_MDIGetActive(HWND hwnd) */ #define HANDLE_WM_MDIGETACTIVE(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(fn)(hwnd) #define FORWARD_WM_MDIGETACTIVE(hwnd, fn) \ (HWND)(UINT_PTR)(fn)((hwnd), WM_MDIGETACTIVE, 0L, 0L) /* HMENU Cls_MDISetMenu(HWND hwnd, BOOL fRefresh, HMENU hmenuFrame, HMENU hmenuWindow) */ #define HANDLE_WM_MDISETMENU(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(fn)((hwnd), (BOOL)(wParam), (HMENU)(wParam), (HMENU)(lParam)) #define FORWARD_WM_MDISETMENU(hwnd, fRefresh, hmenuFrame, hmenuWindow, fn) \ (HMENU)(UINT_PTR)(fn)((hwnd), WM_MDISETMENU, (WPARAM)((fRefresh) ? (hmenuFrame) : 0), (LPARAM)(hmenuWindow)) /* void Cls_OnChildActivate(HWND hwnd) */ #define HANDLE_WM_CHILDACTIVATE(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_CHILDACTIVATE(hwnd, fn) \ (void)(fn)((hwnd), WM_CHILDACTIVATE, 0L, 0L) /* BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) */ #define HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(UINT)(BOOL)(fn)((hwnd), (HWND)(wParam), lParam) #define FORWARD_WM_INITDIALOG(hwnd, hwndFocus, lParam, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_INITDIALOG, (WPARAM)(HWND)(hwndFocus), (lParam)) /* HWND Cls_OnNextDlgCtl(HWND hwnd, HWND hwndSetFocus, BOOL fNext) */ #define HANDLE_WM_NEXTDLGCTL(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)(lParam)) #define FORWARD_WM_NEXTDLGCTL(hwnd, hwndSetFocus, fNext, fn) \ (HWND)(UINT_PTR)(fn)((hwnd), WM_NEXTDLGCTL, (WPARAM)(HWND)(hwndSetFocus), (LPARAM)(fNext)) /* void Cls_OnParentNotify(HWND hwnd, UINT msg, HWND hwndChild, int idChild) */ #define HANDLE_WM_PARENTNOTIFY(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L) #define FORWARD_WM_PARENTNOTIFY(hwnd, msg, hwndChild, idChild, fn) \ (void)(fn)((hwnd), WM_PARENTNOTIFY, MAKEWPARAM(msg, idChild), (LPARAM)(hwndChild)) /* void Cls_OnEnterIdle(HWND hwnd, UINT source, HWND hwndSource) */ #define HANDLE_WM_ENTERIDLE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), (HWND)(lParam)), 0L) #define FORWARD_WM_ENTERIDLE(hwnd, source, hwndSource, fn) \ (void)(fn)((hwnd), WM_ENTERIDLE, (WPARAM)(UINT)(source), (LPARAM)(HWND)(hwndSource)) /* UINT Cls_OnGetDlgCode(HWND hwnd, LPMSG lpmsg) */ #define HANDLE_WM_GETDLGCODE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(UINT)(fn)(hwnd, (LPMSG)(lParam)) #define FORWARD_WM_GETDLGCODE(hwnd, lpmsg, fn) \ (UINT)(DWORD)(fn)((hwnd), WM_GETDLGCODE, (lpmsg ? lpmsg->wParam : 0), (LPARAM)(LPMSG)(lpmsg)) /* HBRUSH Cls_OnCtlColor(HWND hwnd, HDC hdc, HWND hwndChild, int type) */ #define HANDLE_WM_CTLCOLORMSGBOX(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_MSGBOX) #define FORWARD_WM_CTLCOLORMSGBOX(hwnd, hdc, hwndChild, fn) \ (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORMSGBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild)) #define HANDLE_WM_CTLCOLOREDIT(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_EDIT) #define FORWARD_WM_CTLCOLOREDIT(hwnd, hdc, hwndChild, fn) \ (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLOREDIT, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild)) #define HANDLE_WM_CTLCOLORLISTBOX(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_LISTBOX) #define FORWARD_WM_CTLCOLORLISTBOX(hwnd, hdc, hwndChild, fn) \ (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORLISTBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild)) #define HANDLE_WM_CTLCOLORBTN(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_BTN) #define FORWARD_WM_CTLCOLORBTN(hwnd, hdc, hwndChild, fn) \ (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORBTN, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild)) #define HANDLE_WM_CTLCOLORDLG(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_DLG) #define FORWARD_WM_CTLCOLORDLG(hwnd, hdc, hwndChild, fn) \ (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORDLG, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild)) #define HANDLE_WM_CTLCOLORSCROLLBAR(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_SCROLLBAR) #define FORWARD_WM_CTLCOLORSCROLLBAR(hwnd, hdc, hwndChild, fn) \ (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORSCROLLBAR, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild)) #define HANDLE_WM_CTLCOLORSTATIC(hwnd, wParam, lParam, fn) \ (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_STATIC) #define FORWARD_WM_CTLCOLORSTATIC(hwnd, hdc, hwndChild, fn) \ (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORSTATIC, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild)) /* void Cls_OnDeleteItem(HWND hwnd, const DELETEITEMSTRUCT * lpDeleteItem) */ #define HANDLE_WM_DELETEITEM(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (const DELETEITEMSTRUCT *)(lParam)), 0L) #define FORWARD_WM_DELETEITEM(hwnd, lpDeleteItem, fn) \ (void)(fn)((hwnd), WM_DELETEITEM, (WPARAM)(((const DELETEITEMSTRUCT *)(lpDeleteItem))->CtlID), (LPARAM)(const DELETEITEMSTRUCT *)(lpDeleteItem)) /* int Cls_OnCompareItem(HWND hwnd, const COMPAREITEMSTRUCT * lpCompareItem) */ #define HANDLE_WM_COMPAREITEM(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(int)(fn)((hwnd), (const COMPAREITEMSTRUCT *)(lParam)) #define FORWARD_WM_COMPAREITEM(hwnd, lpCompareItem, fn) \ (int)(DWORD)(fn)((hwnd), WM_COMPAREITEM, (WPARAM)(((const COMPAREITEMSTRUCT *)(lpCompareItem))->CtlID), (LPARAM)(const COMPAREITEMSTRUCT *)(lpCompareItem)) /* int Cls_OnVkeyToItem(HWND hwnd, UINT vk, HWND hwndListbox, int iCaret) */ #define HANDLE_WM_VKEYTOITEM(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam)) #define FORWARD_WM_VKEYTOITEM(hwnd, vk, hwndListBox, iCaret, fn) \ (int)(DWORD)(fn)((hwnd), WM_VKEYTOITEM, MAKEWPARAM((vk), (iCaret)), (LPARAM)(hwndListBox)) /* int Cls_OnCharToItem(HWND hwnd, UINT ch, HWND hwndListbox, int iCaret) */ #define HANDLE_WM_CHARTOITEM(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam)) #define FORWARD_WM_CHARTOITEM(hwnd, ch, hwndListBox, iCaret, fn) \ (int)(DWORD)(fn)((hwnd), WM_CHARTOITEM, MAKEWPARAM((UINT)(ch), (UINT)(iCaret)), (LPARAM)(hwndListBox)) /* void Cls_OnQueueSync(HWND hwnd) */ #define HANDLE_WM_QUEUESYNC(hwnd, wParam, lParam, fn) \ ((fn)(hwnd), 0L) #define FORWARD_WM_QUEUESYNC(hwnd, fn) \ (void)(fn)((hwnd), WM_QUEUESYNC, 0L, 0L) /* void Cls_OnCommNotify(HWND hwnd, int cid, UINT flags) */ #define HANDLE_WM_COMMNOTIFY(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(wParam), (UINT)LOWORD(lParam)), 0L) #define FORWARD_WM_COMMNOTIFY(hwnd, cid, flags, fn) \ (void)(fn)((hwnd), WM_COMMNOTIFY, (WPARAM)(cid), MAKELPARAM((flags), 0)) /* void Cls_OnDisplayChange(HWND hwnd, UINT bitsPerPixel, UINT cxScreen, UINT cyScreen) */ #define HANDLE_WM_DISPLAYCHANGE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (UINT)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L) #define FORWARD_WM_DISPLAYCHANGE(hwnd, bitsPerPixel, cxScreen, cyScreen, fn) \ (void)(fn)((hwnd), WM_DISPLAYCHANGE, (WPARAM)(UINT)(bitsPerPixel), (LPARAM)MAKELPARAM((UINT)(cxScreen), (UINT)(cyScreen))) /* BOOL Cls_OnDeviceChange(HWND hwnd, UINT uEvent, DWORD dwEventData) */ #define HANDLE_WM_DEVICECHANGE(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (UINT)(wParam), (DWORD)(wParam)) #define FORWARD_WM_DEVICECHANGE(hwnd, uEvent, dwEventData, fn) \ (BOOL)(DWORD)(fn)((hwnd), WM_DEVICECHANGE, (WPARAM)(UINT)(uEvent), (LPARAM)(DWORD)(dwEventData)) /* void Cls_OnContextMenu(HWND hwnd, HWND hwndContext, UINT xPos, UINT yPos) */ #define HANDLE_WM_CONTEXTMENU(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L) #define FORWARD_WM_CONTEXTMENU(hwnd, hwndContext, xPos, yPos, fn) \ (void)(fn)((hwnd), WM_CONTEXTMENU, (WPARAM)(HWND)(hwndContext), MAKELPARAM((UINT)(xPos), (UINT)(yPos))) /* void Cls_OnMeasureItem(HWND hwnd, MEASUREITEMSTRUCT * lpMeasureItem) */ #define HANDLE_WM_MEASUREITEM(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (MEASUREITEMSTRUCT *)(lParam)), 0L) #define FORWARD_WM_MEASUREITEM(hwnd, lpMeasureItem, fn) \ (void)(fn)((hwnd), WM_MEASUREITEM, (WPARAM)(((MEASUREITEMSTRUCT *)lpMeasureItem)->CtlID), (LPARAM)(MEASUREITEMSTRUCT *)(lpMeasureItem)) /* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */ #define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L) #define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \ (void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl)) /* void Cls_OnTimer(HWND hwnd, UINT id) */ #define HANDLE_WM_TIMER(hwnd, wParam, lParam, fn) ((fn)((hwnd), (UINT)(wParam)), 0L) #define FORWARD_WM_TIMER(hwnd, id, fn) (void)(fn)((hwnd), WM_TIMER, (WPARAM)(UINT)(id), 0L) /* void Cls_OnInitMenuPopup(HWND hwnd, HMENU hMenu, UINT item, BOOL fSystemMenu) */ #define HANDLE_WM_INITMENUPOPUP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HMENU)(wParam), (UINT)LOWORD(lParam), (BOOL)HIWORD(lParam)), 0L) #define FORWARD_WM_INITMENUPOPUP(hwnd, hMenu, item, fSystemMenu, fn) \ (void)(fn)((hwnd), WM_INITMENUPOPUP, (WPARAM)(HMENU)(hMenu), MAKELPARAM((item),(fSystemMenu))) /* UINT Cls_OnNCHitTest(HWND hwnd, int x, int y) */ #define HANDLE_WM_NCHITTEST(hwnd, wParam, lParam, fn) \ (LRESULT)(DWORD)(UINT)(fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)) #define FORWARD_WM_NCHITTEST(hwnd, x, y, fn) \ (UINT)(DWORD)(fn)((hwnd), WM_NCHITTEST, 0L, MAKELPARAM((x), (y))) /* HFONT Cls_OnGetFont(HWND hwnd) */ #define HANDLE_WM_GETFONT(hwnd, wParam, lParam, fn) (LRESULT)(UINT_PTR)(HFONT)(fn)(hwnd) #define FORWARD_WM_GETFONT(hwnd, fn) (HFONT)(UINT_PTR)(fn)((hwnd), WM_GETFONT, 0L, 0L) /* void Cls_OnSetFont(HWND hwndCtl, HFONT hfont, BOOL fRedraw) */ #define HANDLE_WM_SETFONT(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HFONT)(wParam), (BOOL)(lParam)), 0L) #define FORWARD_WM_SETFONT(hwnd, hfont, fRedraw, fn) \ (void)(fn)((hwnd), WM_SETFONT, (WPARAM)(HFONT)(hfont), (LPARAM)(BOOL)(fRedraw)) /* void Cls_OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpMinMaxInfo) */ #define HANDLE_WM_GETMINMAXINFO(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (LPMINMAXINFO)(lParam)), 0L) #define FORWARD_WM_GETMINMAXINFO(hwnd, lpMinMaxInfo, fn) \ (void)(fn)((hwnd), WM_GETMINMAXINFO, 0L, (LPARAM)(LPMINMAXINFO)(lpMinMaxInfo)) /* void Cls_OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT lpDrawItem) */ #define HANDLE_WM_DRAWITEM(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (const DRAWITEMSTRUCT *)(lParam)), 0L) #define FORWARD_WM_DRAWITEM(hwnd, lpDrawItem, fn) \ (void)(fn)((hwnd), WM_DRAWITEM, (WPARAM)(((const DRAWITEMSTRUCT *)lpDrawItem)->CtlID), (LPARAM)(const DRAWITEMSTRUCT *)(lpDrawItem)) /****** C runtime porting macros ****************************************/ #define _ncalloc calloc #define _nexpand _expand #define _ffree free #define _fmalloc malloc #define _fmemccpy _memccpy #define _fmemchr memchr #define _fmemcmp memcmp #define _fmemcpy memcpy #define _fmemicmp _memicmp #define _fmemmove memmove #define _fmemset memset #define _fmsize _msize #define _frealloc realloc #define _fstrcat strcat #define _fstrchr strchr #define _fstrcmp strcmp #define _fstrcpy strcpy #define _fstrcspn strcspn #define _fstrdup _strdup #define _fstricmp _stricmp #define _fstrlen strlen #define _fstrlwr _strlwr #define _fstrncat strncat #define _fstrncmp strncmp #define _fstrncpy strncpy #define _fstrnicmp _strnicmp #define _fstrnset _strnset #define _fstrpbrk strpbrk #define _fstrrchr strrchr #define _fstrrev _strrev #define _fstrset _strset #define _fstrspn strspn #define _fstrstr strstr #define _fstrtok strtok #define _fstrupr _strupr #define _nfree free #define _nmalloc malloc #define _nmsize _msize #define _nrealloc realloc #define _nstrdup _strdup #define hmemcpy MoveMemory #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/winerror.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINERROR_H #define __WINE_WINERROR_H #define FACILITY_NULL 0 #define FACILITY_RPC 1 #define FACILITY_DISPATCH 2 #define FACILITY_STORAGE 3 #define FACILITY_ITF 4 #define FACILITY_WIN32 7 #define FACILITY_WINDOWS 8 #define FACILITY_SSPI 9 #define FACILITY_SECURITY FACILITY_SSPI #define FACILITY_CONTROL 10 #define FACILITY_CERT 11 #define FACILITY_INTERNET 12 #define FACILITY_MEDIASERVER 13 #define FACILITY_MSMQ 14 #define FACILITY_SETUPAPI 15 #define FACILITY_SCARD 16 #define FACILITY_COMPLUS 17 #define FACILITY_AAF 18 #define FACILITY_URT 19 #define FACILITY_ACS 20 #define FACILITY_DPLAY 21 #define FACILITY_UMI 22 #define FACILITY_SXS 23 #define FACILITY_WINDOWS_CE 24 #define FACILITY_HTTP 25 #define FACILITY_COMMONLOG 26 #define FACILITY_USERMODE_FILTER_MANAGER 31 #define FACILITY_BACKGROUNDCOPY 32 #define FACILITY_CONFIGURATION 33 #define FACILITY_STATE_MANAGEMENT 34 #define FACILITY_METADIRECTORY 35 #define FACILITY_WINDOWSUPDATE 36 #define FACILITY_DIRECTORYSERVICE 37 #define FACILITY_GRAPHICS 38 #define FACILITY_SHELL 39 #define FACILITY_TPM_SERVICES 40 #define FACILITY_TPM_SOFTWARE 41 #define FACILITY_PLA 48 #define FACILITY_FVE 49 #define FACILITY_WINDOWS_DEFENDER 80 #define FACILITY_OPC 81 #define FACILITY_DIRECT3D11 0x87c #define FACILITY_AUDCLNT 0x889 #define SEVERITY_SUCCESS 0 #define SEVERITY_ERROR 1 #define MAKE_HRESULT(sev,fac,code) \ ((HRESULT) (((unsigned int)(sev)<<31) | ((unsigned int)(fac)<<16) | ((unsigned int)(code))) ) #define MAKE_SCODE(sev,fac,code) \ ((SCODE) (((unsigned int)(sev)<<31) | ((unsigned int)(fac)<<16) | ((unsigned int)(code))) ) #define SUCCEEDED(stat) ((HRESULT)(stat)>=0) #define FAILED(stat) ((HRESULT)(stat)<0) #define IS_ERROR(stat) (((unsigned int)(stat)>>31) == SEVERITY_ERROR) #define HRESULT_CODE(hr) ((hr) & 0xFFFF) #define SCODE_CODE(sc) ((sc) & 0xFFFF) #define HRESULT_FACILITY(hr) (((hr) >> 16) & 0x1FFF) #define SCODE_FACILITY(sc) (((sc) >> 16) & 0x1FFF) #define HRESULT_SEVERITY(hr) (((hr) >> 31) & 0x1) #define SCODE_SEVERITY(sc) (((sc) >> 31) & 0x1) #define __HRESULT_FROM_WIN32(x) ((HRESULT)(x) > 0 ? ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)(x) ) #ifndef _HRESULT_DEFINED #define _HRESULT_DEFINED # ifdef _MSC_VER typedef long HRESULT; # else typedef int HRESULT; # endif #endif static inline HRESULT HRESULT_FROM_WIN32(unsigned int x) { return (HRESULT)x > 0 ? ((HRESULT) ((x & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)x; } #define FACILITY_NT_BIT 0x10000000 #define HRESULT_FROM_NT(x) ((HRESULT) ((x) | FACILITY_NT_BIT)) /* SCODE <-> HRESULT functions */ /* This macros is obsolete and should not be used in new apps. */ #define GetScode(hr) ((SCODE)(hr)) /* This macros is obsolete and should not be used in new apps. */ #define ResultFromScode(sc) ((HRESULT)(sc)) #define NO_ERROR 0 #define ERROR_SUCCESS 0 #define ERROR_INVALID_FUNCTION 1 #define ERROR_FILE_NOT_FOUND 2 #define ERROR_PATH_NOT_FOUND 3 #define ERROR_TOO_MANY_OPEN_FILES 4 #define ERROR_ACCESS_DENIED 5 #define ERROR_INVALID_HANDLE 6 #define ERROR_ARENA_TRASHED 7 #define ERROR_NOT_ENOUGH_MEMORY 8 #define ERROR_INVALID_BLOCK 9 #define ERROR_BAD_ENVIRONMENT 10 #define ERROR_BAD_FORMAT 11 #define ERROR_INVALID_ACCESS 12 #define ERROR_INVALID_DATA 13 #define ERROR_OUTOFMEMORY 14 #define ERROR_INVALID_DRIVE 15 #define ERROR_CURRENT_DIRECTORY 16 #define ERROR_NOT_SAME_DEVICE 17 #define ERROR_NO_MORE_FILES 18 #define ERROR_WRITE_PROTECT 19 #define ERROR_BAD_UNIT 20 #define ERROR_NOT_READY 21 #define ERROR_BAD_COMMAND 22 #define ERROR_CRC 23 #define ERROR_BAD_LENGTH 24 #define ERROR_SEEK 25 #define ERROR_NOT_DOS_DISK 26 #define ERROR_SECTOR_NOT_FOUND 27 #define ERROR_OUT_OF_PAPER 28 #define ERROR_WRITE_FAULT 29 #define ERROR_READ_FAULT 30 #define ERROR_GEN_FAILURE 31 #define ERROR_SHARING_VIOLATION 32 #define ERROR_LOCK_VIOLATION 33 #define ERROR_WRONG_DISK 34 #define ERROR_FCB_UNAVAILABLE 35 #define ERROR_SHARING_BUFFER_EXCEEDED 36 #define ERROR_HANDLE_EOF 38 #define ERROR_HANDLE_DISK_FULL 39 #define ERROR_NOT_SUPPORTED 50 #define ERROR_REM_NOT_LIST 51 #define ERROR_DUP_NAME 52 #define ERROR_BAD_NETPATH 53 #define ERROR_NETWORK_BUSY 54 #define ERROR_DEV_NOT_EXIST 55 #define ERROR_TOO_MANY_CMDS 56 #define ERROR_ADAP_HDW_ERR 57 #define ERROR_BAD_NET_RESP 58 #define ERROR_UNEXP_NET_ERR 59 #define ERROR_BAD_REM_ADAP 60 #define ERROR_PRINTQ_FULL 61 #define ERROR_NO_SPOOL_SPACE 62 #define ERROR_PRINT_CANCELLED 63 #define ERROR_NETNAME_DELETED 64 #define ERROR_NETWORK_ACCESS_DENIED 65 #define ERROR_BAD_DEV_TYPE 66 #define ERROR_BAD_NET_NAME 67 #define ERROR_TOO_MANY_NAMES 68 #define ERROR_TOO_MANY_SESS 69 #define ERROR_SHARING_PAUSED 70 #define ERROR_REQ_NOT_ACCEP 71 #define ERROR_REDIR_PAUSED 72 #define ERROR_FILE_EXISTS 80 #define ERROR_CANNOT_MAKE 82 #define ERROR_FAIL_I24 83 #define ERROR_OUT_OF_STRUCTURES 84 #define ERROR_ALREADY_ASSIGNED 85 #define ERROR_INVALID_PASSWORD 86 #define ERROR_INVALID_PARAMETER 87 #define ERROR_NET_WRITE_FAULT 88 #define ERROR_NO_PROC_SLOTS 89 #define ERROR_TOO_MANY_SEMAPHORES 100 #define ERROR_EXCL_SEM_ALREADY_OWNED 101 #define ERROR_SEM_IS_SET 102 #define ERROR_TOO_MANY_SEM_REQUESTS 103 #define ERROR_INVALID_AT_INTERRUPT_TIME 104 #define ERROR_SEM_OWNER_DIED 105 #define ERROR_SEM_USER_LIMIT 106 #define ERROR_DISK_CHANGE 107 #define ERROR_DRIVE_LOCKED 108 #define ERROR_BROKEN_PIPE 109 #define ERROR_OPEN_FAILED 110 #define ERROR_BUFFER_OVERFLOW 111 #define ERROR_DISK_FULL 112 #define ERROR_NO_MORE_SEARCH_HANDLES 113 #define ERROR_INVALID_TARGET_HANDLE 114 #define ERROR_INVALID_CATEGORY 117 #define ERROR_INVALID_VERIFY_SWITCH 118 #define ERROR_BAD_DRIVER_LEVEL 119 #define ERROR_CALL_NOT_IMPLEMENTED 120 #define ERROR_SEM_TIMEOUT 121 #define ERROR_INSUFFICIENT_BUFFER 122 #define ERROR_INVALID_NAME 123 #define ERROR_INVALID_LEVEL 124 #define ERROR_NO_VOLUME_LABEL 125 #define ERROR_MOD_NOT_FOUND 126 #define ERROR_PROC_NOT_FOUND 127 #define ERROR_WAIT_NO_CHILDREN 128 #define ERROR_CHILD_NOT_COMPLETE 129 #define ERROR_DIRECT_ACCESS_HANDLE 130 #define ERROR_NEGATIVE_SEEK 131 #define ERROR_SEEK_ON_DEVICE 132 #define ERROR_IS_JOIN_TARGET 133 #define ERROR_IS_JOINED 134 #define ERROR_IS_SUBSTED 135 #define ERROR_NOT_JOINED 136 #define ERROR_NOT_SUBSTED 137 #define ERROR_JOIN_TO_JOIN 138 #define ERROR_SUBST_TO_SUBST 139 #define ERROR_JOIN_TO_SUBST 140 #define ERROR_SUBST_TO_JOIN 141 #define ERROR_BUSY_DRIVE 142 #define ERROR_SAME_DRIVE 143 #define ERROR_DIR_NOT_ROOT 144 #define ERROR_DIR_NOT_EMPTY 145 #define ERROR_IS_SUBST_PATH 146 #define ERROR_IS_JOIN_PATH 147 #define ERROR_PATH_BUSY 148 #define ERROR_IS_SUBST_TARGET 149 #define ERROR_SYSTEM_TRACE 150 #define ERROR_INVALID_EVENT_COUNT 151 #define ERROR_TOO_MANY_MUXWAITERS 152 #define ERROR_INVALID_LIST_FORMAT 153 #define ERROR_LABEL_TOO_LONG 154 #define ERROR_TOO_MANY_TCBS 155 #define ERROR_SIGNAL_REFUSED 156 #define ERROR_DISCARDED 157 #define ERROR_NOT_LOCKED 158 #define ERROR_BAD_THREADID_ADDR 159 #define ERROR_BAD_ARGUMENTS 160 #define ERROR_BAD_PATHNAME 161 #define ERROR_SIGNAL_PENDING 162 #define ERROR_MAX_THRDS_REACHED 164 #define ERROR_LOCK_FAILED 167 #define ERROR_BUSY 170 #define ERROR_DEVICE_SUPPORT_IN_PROGRESS 171 #define ERROR_CANCEL_VIOLATION 173 #define ERROR_ATOMIC_LOCKS_NOT_SUPPORTED 174 #define ERROR_INVALID_SEGMENT_NUMBER 180 #define ERROR_INVALID_ORDINAL 182 #define ERROR_ALREADY_EXISTS 183 #define ERROR_INVALID_FLAG_NUMBER 186 #define ERROR_SEM_NOT_FOUND 187 #define ERROR_INVALID_STARTING_CODESEG 188 #define ERROR_INVALID_STACKSEG 189 #define ERROR_INVALID_MODULETYPE 190 #define ERROR_INVALID_EXE_SIGNATURE 191 #define ERROR_EXE_MARKED_INVALID 192 #define ERROR_BAD_EXE_FORMAT 193 #define ERROR_ITERATED_DATA_EXCEEDS_64k 194 #define ERROR_INVALID_MINALLOCSIZE 195 #define ERROR_DYNLINK_FROM_INVALID_RING 196 #define ERROR_IOPL_NOT_ENABLED 197 #define ERROR_INVALID_SEGDPL 198 #define ERROR_AUTODATASEG_EXCEEDS_64k 199 #define ERROR_RING2SEG_MUST_BE_MOVABLE 200 #define ERROR_RELOC_CHAIN_XEEDS_SEGLIM 201 #define ERROR_INFLOOP_IN_RELOC_CHAIN 202 #define ERROR_ENVVAR_NOT_FOUND 203 #define ERROR_NO_SIGNAL_SENT 205 #define ERROR_FILENAME_EXCED_RANGE 206 #define ERROR_RING2_STACK_IN_USE 207 #define ERROR_META_EXPANSION_TOO_LONG 208 #define ERROR_INVALID_SIGNAL_NUMBER 209 #define ERROR_THREAD_1_INACTIVE 210 #define ERROR_LOCKED 212 #define ERROR_TOO_MANY_MODULES 214 #define ERROR_NESTING_NOT_ALLOWED 215 #define ERROR_EXE_MACHINE_TYPE_MISMATCH 216 #define ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY 217 #define ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY 218 #define ERROR_FILE_CHECKED_OUT 220 #define ERROR_CHECKOUT_REQUIRED 221 #define ERROR_BAD_FILE_TYPE 222 #define ERROR_FILE_TOO_LARGE 223 #define ERROR_FORMS_AUTH_REQUIRED 224 #define ERROR_VIRUS_INFECTED 225 #define ERROR_VIRUS_DELETED 226 #define ERROR_PIPE_LOCAL 229 #define ERROR_BAD_PIPE 230 #define ERROR_PIPE_BUSY 231 #define ERROR_NO_DATA 232 #define ERROR_PIPE_NOT_CONNECTED 233 #define ERROR_MORE_DATA 234 #define ERROR_VC_DISCONNECTED 240 #define ERROR_INVALID_EA_NAME 254 #define ERROR_EA_LIST_INCONSISTENT 255 #define WAIT_TIMEOUT 258 #define ERROR_NO_MORE_ITEMS 259 #define ERROR_CANNOT_COPY 266 #define ERROR_DIRECTORY 267 #define ERROR_EAS_DIDNT_FIT 275 #define ERROR_EA_FILE_CORRUPT 276 #define ERROR_EA_TABLE_FULL 277 #define ERROR_INVALID_EA_HANDLE 278 #define ERROR_EAS_NOT_SUPPORTED 282 #define ERROR_NOT_OWNER 288 #define ERROR_TOO_MANY_POSTS 298 #define ERROR_PARTIAL_COPY 299 #define ERROR_OPLOCK_NOT_GRANTED 300 #define ERROR_INVALID_OPLOCK_PROTOCOL 301 #define ERROR_DISK_TOO_FRAGMENTED 302 #define ERROR_DELETE_PENDING 303 #define ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING 304 #define ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME 305 #define ERROR_SECURITY_STREAM_IS_INCONSISTENT 306 #define ERROR_INVALID_LOCK_RANGE 307 #define ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT 308 #define ERROR_NOTIFICATION_GUID_ALREADY_DEFINED 309 #define ERROR_INVALID_EXCEPTION_HANDLER 310 #define ERROR_DUPLICATE_PRIVILEGES 311 #define ERROR_NO_RANGES_PROCESSED 312 #define ERROR_NOT_ALLOWED_ON_SYSTEM_FILE 313 #define ERROR_DISK_RESOURCES_EXHAUSTED 314 #define ERROR_INVALID_TOKEN 315 #define ERROR_DEVICE_FEATURE_NOT_SUPPORTED 316 #define ERROR_MR_MID_NOT_FOUND 317 #define ERROR_SCOPE_NOT_FOUND 318 #define ERROR_UNDEFINED_SCOPE 319 #define ERROR_INVALID_CAP 320 #define ERROR_DEVICE_UNREACHABLE 321 #define ERROR_DEVICE_NO_RESOURCES 322 #define ERROR_DATA_CHECKSUM_ERROR 323 #define ERROR_INTERMIXED_KERNEL_EA_OPERATION 324 #define ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED 326 #define ERROR_OFFSET_ALIGNMENT_VIOLATION 327 #define ERROR_INVALID_FIELD_IN_PARAMETER_LIST 328 #define ERROR_OPERATION_IN_PROGRESS 329 #define ERROR_BAD_DEVICE_PATH 330 #define ERROR_TOO_MANY_DESCRIPTORS 331 #define ERROR_SCRUB_DATA_DISABLED 332 #define ERROR_NOT_REDUNDANT_STORAGE 333 #define ERROR_RESIDENT_FILE_NOT_SUPPORTED 334 #define ERROR_COMPRESSED_FILE_NOT_SUPPORTED 335 #define ERROR_DIRECTORY_NOT_SUPPORTED 336 #define ERROR_NOT_READ_FROM_COPY 337 #define ERROR_FT_WRITE_FAILURE 338 #define ERROR_FT_DI_SCAN_REQUIRED 339 #define ERROR_INVALID_KERNEL_INFO_VERSION 340 #define ERROR_INVALID_PEP_INFO_VERSION 341 #define ERROR_FAIL_NOACTION_REBOOT 350 #define ERROR_FAIL_SHUTDOWN 351 #define ERROR_FAIL_RESTART 352 #define ERROR_MAX_SESSIONS_REACHED 353 #define ERROR_INVALID_ADDRESS 487 #define ERROR_USER_PROFILE_LOAD 500 #define ERROR_ARITHMETIC_OVERFLOW 534 #define ERROR_PIPE_CONNECTED 535 #define ERROR_PIPE_LISTENING 536 #define ERROR_INVALID_LDT_SIZE 561 #define ERROR_INVALID_LDT_OFFSET 563 #define ERROR_INVALID_LDT_DESCRIPTOR 564 #define ERROR_TOO_MANY_THREADS 565 #define ERROR_THREAD_NOT_IN_PROCESS 566 #define ERROR_PAGEFILE_QUOTA_EXCEEDED 567 #define ERROR_LOGON_SERVER_CONFLICT 568 #define ERROR_SYNCHRONIZATION_REQUIRED 569 #define ERROR_NET_OPEN_FAILED 570 #define ERROR_IO_PRIVILEGE_FAILED 571 #define ERROR_CONTROL_C_EXIT 572 #define ERROR_MISSING_SYSTEMFILE 573 #define ERROR_UNHANDLED_EXCEPTION 574 #define ERROR_APP_INIT_FAILURE 575 #define ERROR_PAGEFILE_CREATE_FAILED 576 #define ERROR_INVALID_IMAGE_HASH 577 #define ERROR_NO_PAGEFILE 578 #define ERROR_ILLEGAL_FLOAT_CONTEXT 579 #define ERROR_NO_EVENT_PAIR 580 #define ERROR_DOMAIN_CTRLR_CONFIG_ERROR 581 #define ERROR_ILLEGAL_CHARACTER 582 #define ERROR_UNDEFINED_CHARACTER 583 #define ERROR_FLOPPY_VOLUME 584 #define ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT 585 #define ERROR_BACKUP_CONTROLLER 586 #define ERROR_MUTANT_LIMIT_EXCEEDED 587 #define ERROR_FS_DRIVER_REQUIRED 588 #define ERROR_CANNOT_LOAD_REGISTRY_FILE 589 #define ERROR_DEBUG_ATTACH_FAILED 590 #define ERROR_SYSTEM_PROCESS_TERMINATED 591 #define ERROR_DATA_NOT_ACCEPTED 592 #define ERROR_VDM_HARD_ERROR 593 #define ERROR_DRIVER_CANCEL_TIMEOUT 594 #define ERROR_REPLY_MESSAGE_MISMATCH 595 #define ERROR_LOST_WRITEBEHIND_DATA 596 #define ERROR_CLIENT_SERVER_PARAMETERS_INVALID 597 #define ERROR_NOT_TINY_STREAM 598 #define ERROR_STACK_OVERFLOW_READ 599 #define ERROR_CONVERT_TO_LARGE 600 #define ERROR_FOUND_OUT_OF_SCOPE 601 #define ERROR_ALLOCATE_BUCKET 602 #define ERROR_MARSHALL_OVERFLOW 603 #define ERROR_INVALID_VARIANT 604 #define ERROR_BAD_COMPRESSION_BUFFER 605 #define ERROR_AUDIT_FAILED 606 #define ERROR_TIMER_RESOLUTION_NOT_SET 607 #define ERROR_INSUFFICIENT_LOGON_INFO 608 #define ERROR_BAD_DLL_ENTRYPOINT 609 #define ERROR_BAD_SERVICE_ENTRYPOINT 610 #define ERROR_IP_ADDRESS_CONFLICT1 611 #define ERROR_IP_ADDRESS_CONFLICT2 612 #define ERROR_REGISTRY_QUOTA_LIMIT 613 #define ERROR_NO_CALLBACK_ACTIVE 614 #define ERROR_PWD_TOO_SHORT 615 #define ERROR_PWD_TOO_RECENT 616 #define ERROR_PWD_HISTORY_CONFLICT 617 #define ERROR_UNSUPPORTED_COMPRESSION 618 #define ERROR_INVALID_HW_PROFILE 619 #define ERROR_INVALID_PLUGPLAY_DEVICE_PATH 620 #define ERROR_QUOTA_LIST_INCONSISTENT 621 #define ERROR_EVALUATION_EXPIRATION 622 #define ERROR_ILLEGAL_DLL_RELOCATION 623 #define ERROR_DLL_INIT_FAILED_LOGOFF 624 #define ERROR_VALIDATE_CONTINUE 625 #define ERROR_NO_MORE_MATCHES 626 #define ERROR_RANGE_LIST_CONFLICT 627 #define ERROR_SERVER_SID_MISMATCH 628 #define ERROR_CANT_ENABLE_DENY_ONLY 629 #define ERROR_FLOAT_MULTIPLE_FAULTS 630 #define ERROR_FLOAT_MULTIPLE_TRAPS 631 #define ERROR_NOINTERFACE 632 #define ERROR_DRIVER_FAILED_SLEEP 633 #define ERROR_CORRUPT_SYSTEM_FILE 634 #define ERROR_COMMITMENT_MINIMUM 635 #define ERROR_PNP_RESTART_ENUMERATION 636 #define ERROR_SYSTEM_IMAGE_BAD_SIGNATURE 637 #define ERROR_PNP_REBOOT_REQUIRED 638 #define ERROR_INSUFFICIENT_POWER 639 #define ERROR_MULTIPLE_FAULT_VIOLATION 640 #define ERROR_SYSTEM_SHUTDOWN 641 #define ERROR_PORT_NOT_SET 642 #define ERROR_DS_VERSION_CHECK_FAILURE 643 #define ERROR_RANGE_NOT_FOUND 644 #define ERROR_NOT_SAFE_MODE_DRIVER 646 #define ERROR_FAILED_DRIVER_ENTRY 647 #define ERROR_DEVICE_ENUMERATION_ERROR 648 #define ERROR_MOUNT_POINT_NOT_RESOLVED 649 #define ERROR_INVALID_DEVICE_OBJECT_PARAMETER 650 #define ERROR_MCA_OCCURED 651 #define ERROR_DRIVER_DATABASE_ERROR 652 #define ERROR_SYSTEM_HIVE_TOO_LARGE 653 #define ERROR_DRIVER_FAILED_PRIOR_UNLOAD 654 #define ERROR_VOLSNAP_PREPARE_HIBERNATE 655 #define ERROR_HIBERNATION_FAILURE 656 #define ERROR_FILE_SYSTEM_LIMITATION 665 #define ERROR_ASSERTION_FAILURE 668 #define ERROR_ACPI_ERROR 669 #define ERROR_WOW_ASSERTION 670 #define ERROR_PNP_BAD_MPS_TABLE 671 #define ERROR_PNP_TRANSLATION_FAILED 672 #define ERROR_PNP_IRQ_TRANSLATION_FAILED 673 #define ERROR_PNP_INVALID_ID 674 #define ERROR_WAKE_SYSTEM_DEBUGGER 675 #define ERROR_HANDLES_CLOSED 676 #define ERROR_EXTRANEOUS_INFORMATION 677 #define ERROR_RXACT_COMMIT_NECESSARY 678 #define ERROR_MEDIA_CHECK 679 #define ERROR_GUID_SUBSTITUTION_MADE 680 #define ERROR_STOPPED_ON_SYMLINK 681 #define ERROR_LONGJUMP 682 #define ERROR_PLUGPLAY_QUERY_VETOED 683 #define ERROR_UNWIND_CONSOLIDATE 684 #define ERROR_REGISTRY_HIVE_RECOVERED 685 #define ERROR_DLL_MIGHT_BE_INSECURE 686 #define ERROR_DLL_MIGHT_BE_INCOMPATIBLE 687 #define ERROR_DBG_EXCEPTION_NOT_HANDLED 688 #define ERROR_DBG_REPLY_LATER 689 #define ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE 690 #define ERROR_DBG_TERMINATE_THREAD 691 #define ERROR_DBG_TERMINATE_PROCESS 692 #define ERROR_DBG_CONTROL_C 693 #define ERROR_DBG_PRINTEXCEPTION_C 694 #define ERROR_DBG_RIPEXCEPTION 695 #define ERROR_DBG_CONTROL_BREAK 696 #define ERROR_DBG_COMMAND_EXCEPTION 697 #define ERROR_OBJECT_NAME_EXISTS 698 #define ERROR_THREAD_WAS_SUSPENDED 699 #define ERROR_IMAGE_NOT_AT_BASE 700 #define ERROR_RXACT_STATE_CREATED 701 #define ERROR_SEGMENT_NOTIFICATION 702 #define ERROR_BAD_CURRENT_DIRECTORY 703 #define ERROR_FT_READ_RECOVERY_FROM_BACKUP 704 #define ERROR_FT_WRITE_RECOVERY 705 #define ERROR_IMAGE_MACHINE_TYPE_MISMATCH 706 #define ERROR_RECEIVE_PARTIAL 707 #define ERROR_RECEIVE_EXPEDITED 708 #define ERROR_RECEIVE_PARTIAL_EXPEDITED 709 #define ERROR_EVENT_DONE 710 #define ERROR_EVENT_PENDING 711 #define ERROR_CHECKING_FILE_SYSTEM 712 #define ERROR_FATAL_APP_EXIT 713 #define ERROR_PREDEFINED_HANDLE 714 #define ERROR_WAS_UNLOCKED 715 #define ERROR_SERVICE_NOTIFICATION 716 #define ERROR_WAS_LOCKED 717 #define ERROR_LOG_HARD_ERROR 718 #define ERROR_ALREADY_WIN32 719 #define ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE 720 #define ERROR_NO_YIELD_PERFORMED 721 #define ERROR_TIMER_RESUME_IGNORED 722 #define ERROR_ARBITRATION_UNHANDLED 723 #define ERROR_CARDBUS_NOT_SUPPORTED 724 #define ERROR_MP_PROCESSOR_MISMATCH 725 #define ERROR_HIBERNATED 726 #define ERROR_RESUME_HIBERNATION 727 #define ERROR_FIRMWARE_UPDATED 728 #define ERROR_DRIVERS_LEAKING_LOCKED_PAGES 729 #define ERROR_WAKE_SYSTEM 730 #define ERROR_WAIT_1 731 #define ERROR_WAIT_2 732 #define ERROR_WAIT_3 733 #define ERROR_WAIT_63 734 #define ERROR_ABANDONED_WAIT_0 735 #define ERROR_ABANDONED_WAIT_63 736 #define ERROR_USER_APC 737 #define ERROR_KERNEL_APC 738 #define ERROR_ALERTED 739 #define ERROR_ELEVATION_REQUIRED 740 #define ERROR_REPARSE 741 #define ERROR_OPLOCK_BREAK_IN_PROGRESS 742 #define ERROR_VOLUME_MOUNTED 743 #define ERROR_RXACT_COMMITTED 744 #define ERROR_NOTIFY_CLEANUP 745 #define ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED 746 #define ERROR_PAGE_FAULT_TRANSITION 747 #define ERROR_PAGE_FAULT_DEMAND_ZERO 748 #define ERROR_PAGE_FAULT_COPY_ON_WRITE 749 #define ERROR_PAGE_FAULT_GUARD_PAGE 750 #define ERROR_PAGE_FAULT_PAGING_FILE 751 #define ERROR_CACHE_PAGE_LOCKED 752 #define ERROR_CRASH_DUMP 753 #define ERROR_BUFFER_ALL_ZEROS 754 #define ERROR_REPARSE_OBJECT 755 #define ERROR_RESOURCE_REQUIREMENTS_CHANGED 756 #define ERROR_TRANSLATION_COMPLETE 757 #define ERROR_NOTHING_TO_TERMINATE 758 #define ERROR_PROCESS_NOT_IN_JOB 759 #define ERROR_PROCESS_IN_JOB 760 #define ERROR_VOLSNAP_HIBERNATE_READY 761 #define ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY 762 #define ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED 763 #define ERROR_INTERRUPT_STILL_CONNECTED 764 #define ERROR_WAIT_FOR_OPLOCK 765 #define ERROR_DBG_EXCEPTION_HANDLED 766 #define ERROR_DBG_CONTINUE 767 #define ERROR_CALLBACK_POP_STACK 768 #define ERROR_COMPRESSION_DISABLED 769 #define ERROR_CANTFETCHBACKWARDS 770 #define ERROR_CANTSCROLLBACKWARDS 771 #define ERROR_ROWSNOTRELEASED 772 #define ERROR_BAD_ACCESSOR_FLAGS 773 #define ERROR_ERRORS_ENCOUNTERED 774 #define ERROR_NOT_CAPABLE 775 #define ERROR_REQUEST_OUT_OF_SEQUENCE 776 #define ERROR_VERSION_PARSE_ERROR 777 #define ERROR_BADSTARTPOSITION 778 #define ERROR_MEMORY_HARDWARE 779 #define ERROR_DISK_REPAIR_DISABLED 780 #define ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE 781 #define ERROR_SYSTEM_POWERSTATE_TRANSITION 782 #define ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION 783 #define ERROR_MCA_EXCEPTION 784 #define ERROR_ACCESS_AUDIT_BY_POLICY 785 #define ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY 786 #define ERROR_ABANDON_HIBERFILE 787 #define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED 788 #define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR 789 #define ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR 790 #define ERROR_NO_ACE_CONDITION 804 #define ERROR_INVALID_ACE_CONDITION 805 #define ERROR_EA_ACCESS_DENIED 994 #define ERROR_OPERATION_ABORTED 995 #define ERROR_IO_INCOMPLETE 996 #define ERROR_IO_PENDING 997 #define ERROR_NOACCESS 998 #define ERROR_SWAPERROR 999 #define ERROR_STACK_OVERFLOW 1001 #define ERROR_INVALID_MESSAGE 1002 #define ERROR_CAN_NOT_COMPLETE 1003 #define ERROR_INVALID_FLAGS 1004 #define ERROR_UNRECOGNIZED_VOLUME 1005 #define ERROR_FILE_INVALID 1006 #define ERROR_FULLSCREEN_MODE 1007 #define ERROR_NO_TOKEN 1008 #define ERROR_BADDB 1009 #define ERROR_BADKEY 1010 #define ERROR_CANTOPEN 1011 #define ERROR_CANTREAD 1012 #define ERROR_CANTWRITE 1013 #define ERROR_REGISTRY_RECOVERED 1014 #define ERROR_REGISTRY_CORRUPT 1015 #define ERROR_REGISTRY_IO_FAILED 1016 #define ERROR_NOT_REGISTRY_FILE 1017 #define ERROR_KEY_DELETED 1018 #define ERROR_NO_LOG_SPACE 1019 #define ERROR_KEY_HAS_CHILDREN 1020 #define ERROR_CHILD_MUST_BE_VOLATILE 1021 #define ERROR_NOTIFY_ENUM_DIR 1022 #define ERROR_DEPENDENT_SERVICES_RUNNING 1051 #define ERROR_INVALID_SERVICE_CONTROL 1052 #define ERROR_SERVICE_REQUEST_TIMEOUT 1053 #define ERROR_SERVICE_NO_THREAD 1054 #define ERROR_SERVICE_DATABASE_LOCKED 1055 #define ERROR_SERVICE_ALREADY_RUNNING 1056 #define ERROR_INVALID_SERVICE_ACCOUNT 1057 #define ERROR_SERVICE_DISABLED 1058 #define ERROR_CIRCULAR_DEPENDENCY 1059 #define ERROR_SERVICE_DOES_NOT_EXIST 1060 #define ERROR_SERVICE_CANNOT_ACCEPT_CTRL 1061 #define ERROR_SERVICE_NOT_ACTIVE 1062 #define ERROR_FAILED_SERVICE_CONTROLLER_CONNECT 1063 #define ERROR_EXCEPTION_IN_SERVICE 1064 #define ERROR_DATABASE_DOES_NOT_EXIST 1065 #define ERROR_SERVICE_SPECIFIC_ERROR 1066 #define ERROR_PROCESS_ABORTED 1067 #define ERROR_SERVICE_DEPENDENCY_FAIL 1068 #define ERROR_SERVICE_LOGON_FAILED 1069 #define ERROR_SERVICE_START_HANG 1070 #define ERROR_INVALID_SERVICE_LOCK 1071 #define ERROR_SERVICE_MARKED_FOR_DELETE 1072 #define ERROR_SERVICE_EXISTS 1073 #define ERROR_ALREADY_RUNNING_LKG 1074 #define ERROR_SERVICE_DEPENDENCY_DELETED 1075 #define ERROR_BOOT_ALREADY_ACCEPTED 1076 #define ERROR_SERVICE_NEVER_STARTED 1077 #define ERROR_DUPLICATE_SERVICE_NAME 1078 #define ERROR_DIFFERENT_SERVICE_ACCOUNT 1079 #define ERROR_CANNOT_DETECT_DRIVER_FAILURE 1080 #define ERROR_CANNOT_DETECT_PROCESS_ABORT 1081 #define ERROR_NO_RECOVERY_PROGRAM 1082 #define ERROR_SERVICE_NOT_IN_EXE 1083 #define ERROR_END_OF_MEDIA 1100 #define ERROR_FILEMARK_DETECTED 1101 #define ERROR_BEGINNING_OF_MEDIA 1102 #define ERROR_SETMARK_DETECTED 1103 #define ERROR_NO_DATA_DETECTED 1104 #define ERROR_PARTITION_FAILURE 1105 #define ERROR_INVALID_BLOCK_LENGTH 1106 #define ERROR_DEVICE_NOT_PARTITIONED 1107 #define ERROR_UNABLE_TO_LOCK_MEDIA 1108 #define ERROR_UNABLE_TO_UNLOAD_MEDIA 1109 #define ERROR_MEDIA_CHANGED 1110 #define ERROR_BUS_RESET 1111 #define ERROR_NO_MEDIA_IN_DRIVE 1112 #define ERROR_NO_UNICODE_TRANSLATION 1113 #define ERROR_DLL_INIT_FAILED 1114 #define ERROR_SHUTDOWN_IN_PROGRESS 1115 #define ERROR_NO_SHUTDOWN_IN_PROGRESS 1116 #define ERROR_IO_DEVICE 1117 #define ERROR_SERIAL_NO_DEVICE 1118 #define ERROR_IRQ_BUSY 1119 #define ERROR_MORE_WRITES 1120 #define ERROR_COUNTER_TIMEOUT 1121 #define ERROR_FLOPPY_ID_MARK_NOT_FOUND 1122 #define ERROR_FLOPPY_WRONG_CYLINDER 1123 #define ERROR_FLOPPY_UNKNOWN_ERROR 1124 #define ERROR_FLOPPY_BAD_REGISTERS 1125 #define ERROR_DISK_RECALIBRATE_FAILED 1126 #define ERROR_DISK_OPERATION_FAILED 1127 #define ERROR_DISK_RESET_FAILED 1128 #define ERROR_EOM_OVERFLOW 1129 #define ERROR_NOT_ENOUGH_SERVER_MEMORY 1130 #define ERROR_POSSIBLE_DEADLOCK 1131 #define ERROR_MAPPED_ALIGNMENT 1132 #define ERROR_SET_POWER_STATE_VETOED 1140 #define ERROR_SET_POWER_STATE_FAILED 1141 #define ERROR_TOO_MANY_LINKS 1142 #define ERROR_OLD_WIN_VERSION 1150 #define ERROR_APP_WRONG_OS 1151 #define ERROR_SINGLE_INSTANCE_APP 1152 #define ERROR_RMODE_APP 1153 #define ERROR_INVALID_DLL 1154 #define ERROR_NO_ASSOCIATION 1155 #define ERROR_DDE_FAIL 1156 #define ERROR_DLL_NOT_FOUND 1157 #define ERROR_NO_MORE_USER_HANDLES 1158 #define ERROR_MESSAGE_SYNC_ONLY 1159 #define ERROR_SOURCE_ELEMENT_EMPTY 1160 #define ERROR_DESTINATION_ELEMENT_FULL 1161 #define ERROR_ILLEGAL_ELEMENT_ADDRESS 1162 #define ERROR_MAGAZINE_NOT_PRESENT 1163 #define ERROR_DEVICE_REINITIALIZATION_NEEDED 1164 #define ERROR_DEVICE_REQUIRES_CLEANING 1165 #define ERROR_DEVICE_DOOR_OPEN 1166 #define ERROR_DEVICE_NOT_CONNECTED 1167 #define ERROR_NOT_FOUND 1168 #define ERROR_NO_MATCH 1169 #define ERROR_SET_NOT_FOUND 1170 #define ERROR_POINT_NOT_FOUND 1171 #define ERROR_NO_TRACKING_SERVICE 1172 #define ERROR_NO_VOLUME_ID 1173 #define ERROR_UNABLE_TO_REMOVE_REPLACED 1175 #define ERROR_UNABLE_TO_MOVE_REPLACEMENT 1176 #define ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 1177 #define ERROR_JOURNAL_DELETE_IN_PROGRESS 1178 #define ERROR_JOURNAL_NOT_ACTIVE 1179 #define ERROR_POTENTIAL_FILE_FOUND 1180 #define ERROR_JOURNAL_ENTRY_DELETED 1181 #define ERROR_BAD_DEVICE 1200 #define ERROR_CONNECTION_UNAVAIL 1201 #define ERROR_DEVICE_ALREADY_REMEMBERED 1202 #define ERROR_NO_NET_OR_BAD_PATH 1203 #define ERROR_BAD_PROVIDER 1204 #define ERROR_CANNOT_OPEN_PROFILE 1205 #define ERROR_BAD_PROFILE 1206 #define ERROR_NOT_CONTAINER 1207 #define ERROR_EXTENDED_ERROR 1208 #define ERROR_INVALID_GROUPNAME 1209 #define ERROR_INVALID_COMPUTERNAME 1210 #define ERROR_INVALID_EVENTNAME 1211 #define ERROR_INVALID_DOMAINNAME 1212 #define ERROR_INVALID_SERVICENAME 1213 #define ERROR_INVALID_NETNAME 1214 #define ERROR_INVALID_SHARENAME 1215 #define ERROR_INVALID_PASSWORDNAME 1216 #define ERROR_INVALID_MESSAGENAME 1217 #define ERROR_INVALID_MESSAGEDEST 1218 #define ERROR_SESSION_CREDENTIAL_CONFLICT 1219 #define ERROR_REMOTE_SESSION_LIMIT_EXCEEDED 1220 #define ERROR_DUP_DOMAINNAME 1221 #define ERROR_NO_NETWORK 1222 #define ERROR_CANCELLED 1223 #define ERROR_USER_MAPPED_FILE 1224 #define ERROR_CONNECTION_REFUSED 1225 #define ERROR_GRACEFUL_DISCONNECT 1226 #define ERROR_ADDRESS_ALREADY_ASSOCIATED 1227 #define ERROR_ADDRESS_NOT_ASSOCIATED 1228 #define ERROR_CONNECTION_INVALID 1229 #define ERROR_CONNECTION_ACTIVE 1230 #define ERROR_NETWORK_UNREACHABLE 1231 #define ERROR_HOST_UNREACHABLE 1232 #define ERROR_PROTOCOL_UNREACHABLE 1233 #define ERROR_PORT_UNREACHABLE 1234 #define ERROR_REQUEST_ABORTED 1235 #define ERROR_CONNECTION_ABORTED 1236 #define ERROR_RETRY 1237 #define ERROR_CONNECTION_COUNT_LIMIT 1238 #define ERROR_LOGIN_TIME_RESTRICTION 1239 #define ERROR_LOGIN_WKSTA_RESTRICTION 1240 #define ERROR_INCORRECT_ADDRESS 1241 #define ERROR_ALREADY_REGISTERED 1242 #define ERROR_SERVICE_NOT_FOUND 1243 #define ERROR_NOT_AUTHENTICATED 1244 #define ERROR_NOT_LOGGED_ON 1245 #define ERROR_CONTINUE 1246 #define ERROR_ALREADY_INITIALIZED 1247 #define ERROR_NO_MORE_DEVICES 1248 #define ERROR_NO_SUCH_SITE 1249 #define ERROR_DOMAIN_CONTROLLER_EXISTS 1250 #define ERROR_ONLY_IF_CONNECTED 1251 #define ERROR_OVERRIDE_NOCHANGES 1252 #define ERROR_BAD_USER_PROFILE 1253 #define ERROR_NOT_SUPPORTED_ON_SBS 1254 #define ERROR_SERVER_SHUTDOWN_IN_PROGRESS 1255 #define ERROR_HOST_DOWN 1256 #define ERROR_ACCESS_DISABLED_BY_POLICY 1260 #define ERROR_REG_NAT_CONSUMPTION 1261 #define ERROR_PKINIT_FAILURE 1263 #define ERROR_SMARTCARD_SUBSYSTEM_FAILURE 1264 #define ERROR_DOWNGRADE_DETECTED 1265 #define ERROR_MACHINE_LOCKED 1271 #define ERROR_CALLBACK_SUPPLIED_INVALID_DATA 1273 #define ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED 1274 #define ERROR_DRIVER_BLOCKED 1275 #define ERROR_INVALID_IMPORT_OF_NON_DLL 1276 #define ERROR_NOT_ALL_ASSIGNED 1300 #define ERROR_SOME_NOT_MAPPED 1301 #define ERROR_NO_QUOTAS_FOR_ACCOUNT 1302 #define ERROR_LOCAL_USER_SESSION_KEY 1303 #define ERROR_NULL_LM_PASSWORD 1304 #define ERROR_UNKNOWN_REVISION 1305 #define ERROR_REVISION_MISMATCH 1306 #define ERROR_INVALID_OWNER 1307 #define ERROR_INVALID_PRIMARY_GROUP 1308 #define ERROR_NO_IMPERSONATION_TOKEN 1309 #define ERROR_CANT_DISABLE_MANDATORY 1310 #define ERROR_NO_LOGON_SERVERS 1311 #define ERROR_NO_SUCH_LOGON_SESSION 1312 #define ERROR_NO_SUCH_PRIVILEGE 1313 #define ERROR_PRIVILEGE_NOT_HELD 1314 #define ERROR_INVALID_ACCOUNT_NAME 1315 #define ERROR_USER_EXISTS 1316 #define ERROR_NO_SUCH_USER 1317 #define ERROR_GROUP_EXISTS 1318 #define ERROR_NO_SUCH_GROUP 1319 #define ERROR_MEMBER_IN_GROUP 1320 #define ERROR_MEMBER_NOT_IN_GROUP 1321 #define ERROR_LAST_ADMIN 1322 #define ERROR_WRONG_PASSWORD 1323 #define ERROR_ILL_FORMED_PASSWORD 1324 #define ERROR_PASSWORD_RESTRICTION 1325 #define ERROR_LOGON_FAILURE 1326 #define ERROR_ACCOUNT_RESTRICTION 1327 #define ERROR_INVALID_LOGON_HOURS 1328 #define ERROR_INVALID_WORKSTATION 1329 #define ERROR_PASSWORD_EXPIRED 1330 #define ERROR_ACCOUNT_DISABLED 1331 #define ERROR_NONE_MAPPED 1332 #define ERROR_TOO_MANY_LUIDS_REQUESTED 1333 #define ERROR_LUIDS_EXHAUSTED 1334 #define ERROR_INVALID_SUB_AUTHORITY 1335 #define ERROR_INVALID_ACL 1336 #define ERROR_INVALID_SID 1337 #define ERROR_INVALID_SECURITY_DESCR 1338 #define ERROR_BAD_INHERITANCE_ACL 1340 #define ERROR_SERVER_DISABLED 1341 #define ERROR_SERVER_NOT_DISABLED 1342 #define ERROR_INVALID_ID_AUTHORITY 1343 #define ERROR_ALLOTTED_SPACE_EXCEEDED 1344 #define ERROR_INVALID_GROUP_ATTRIBUTES 1345 #define ERROR_BAD_IMPERSONATION_LEVEL 1346 #define ERROR_CANT_OPEN_ANONYMOUS 1347 #define ERROR_BAD_VALIDATION_CLASS 1348 #define ERROR_BAD_TOKEN_TYPE 1349 #define ERROR_NO_SECURITY_ON_OBJECT 1350 #define ERROR_CANT_ACCESS_DOMAIN_INFO 1351 #define ERROR_INVALID_SERVER_STATE 1352 #define ERROR_INVALID_DOMAIN_STATE 1353 #define ERROR_INVALID_DOMAIN_ROLE 1354 #define ERROR_NO_SUCH_DOMAIN 1355 #define ERROR_DOMAIN_EXISTS 1356 #define ERROR_DOMAIN_LIMIT_EXCEEDED 1357 #define ERROR_INTERNAL_DB_CORRUPTION 1358 #define ERROR_INTERNAL_ERROR 1359 #define ERROR_GENERIC_NOT_MAPPED 1360 #define ERROR_BAD_DESCRIPTOR_FORMAT 1361 #define ERROR_NOT_LOGON_PROCESS 1362 #define ERROR_LOGON_SESSION_EXISTS 1363 #define ERROR_NO_SUCH_PACKAGE 1364 #define ERROR_BAD_LOGON_SESSION_STATE 1365 #define ERROR_LOGON_SESSION_COLLISION 1366 #define ERROR_INVALID_LOGON_TYPE 1367 #define ERROR_CANNOT_IMPERSONATE 1368 #define ERROR_RXACT_INVALID_STATE 1369 #define ERROR_RXACT_COMMIT_FAILURE 1370 #define ERROR_SPECIAL_ACCOUNT 1371 #define ERROR_SPECIAL_GROUP 1372 #define ERROR_SPECIAL_USER 1373 #define ERROR_MEMBERS_PRIMARY_GROUP 1374 #define ERROR_TOKEN_ALREADY_IN_USE 1375 #define ERROR_NO_SUCH_ALIAS 1376 #define ERROR_MEMBER_NOT_IN_ALIAS 1377 #define ERROR_MEMBER_IN_ALIAS 1378 #define ERROR_ALIAS_EXISTS 1379 #define ERROR_LOGON_NOT_GRANTED 1380 #define ERROR_TOO_MANY_SECRETS 1381 #define ERROR_SECRET_TOO_LONG 1382 #define ERROR_INTERNAL_DB_ERROR 1383 #define ERROR_TOO_MANY_CONTEXT_IDS 1384 #define ERROR_LOGON_TYPE_NOT_GRANTED 1385 #define ERROR_NT_CROSS_ENCRYPTION_REQUIRED 1386 #define ERROR_NO_SUCH_MEMBER 1387 #define ERROR_INVALID_MEMBER 1388 #define ERROR_TOO_MANY_SIDS 1389 #define ERROR_LM_CROSS_ENCRYPTION_REQUIRED 1390 #define ERROR_NO_INHERITANCE 1391 #define ERROR_FILE_CORRUPT 1392 #define ERROR_DISK_CORRUPT 1393 #define ERROR_NO_USER_SESSION_KEY 1394 #define ERROR_LICENSE_QUOTA_EXCEEDED 1395 #define ERROR_WRONG_TARGET_NAME 1396 #define ERROR_MUTUAL_AUTH_FAILED 1397 #define ERROR_TIME_SKEW 1398 #define ERROR_CURRENT_DOMAIN_NOT_ALLOWED 1399 #define ERROR_INVALID_WINDOW_HANDLE 1400 #define ERROR_INVALID_MENU_HANDLE 1401 #define ERROR_INVALID_CURSOR_HANDLE 1402 #define ERROR_INVALID_ACCEL_HANDLE 1403 #define ERROR_INVALID_HOOK_HANDLE 1404 #define ERROR_INVALID_DWP_HANDLE 1405 #define ERROR_TLW_WITH_WSCHILD 1406 #define ERROR_CANNOT_FIND_WND_CLASS 1407 #define ERROR_WINDOW_OF_OTHER_THREAD 1408 #define ERROR_HOTKEY_ALREADY_REGISTERED 1409 #define ERROR_CLASS_ALREADY_EXISTS 1410 #define ERROR_CLASS_DOES_NOT_EXIST 1411 #define ERROR_CLASS_HAS_WINDOWS 1412 #define ERROR_INVALID_INDEX 1413 #define ERROR_INVALID_ICON_HANDLE 1414 #define ERROR_PRIVATE_DIALOG_INDEX 1415 #define ERROR_LISTBOX_ID_NOT_FOUND 1416 #define ERROR_NO_WILDCARD_CHARACTERS 1417 #define ERROR_CLIPBOARD_NOT_OPEN 1418 #define ERROR_HOTKEY_NOT_REGISTERED 1419 #define ERROR_WINDOW_NOT_DIALOG 1420 #define ERROR_CONTROL_ID_NOT_FOUND 1421 #define ERROR_INVALID_COMBOBOX_MESSAGE 1422 #define ERROR_WINDOW_NOT_COMBOBOX 1423 #define ERROR_INVALID_EDIT_HEIGHT 1424 #define ERROR_DC_NOT_FOUND 1425 #define ERROR_INVALID_HOOK_FILTER 1426 #define ERROR_INVALID_FILTER_PROC 1427 #define ERROR_HOOK_NEEDS_HMOD 1428 #define ERROR_GLOBAL_ONLY_HOOK 1429 #define ERROR_JOURNAL_HOOK_SET 1430 #define ERROR_HOOK_NOT_INSTALLED 1431 #define ERROR_INVALID_LB_MESSAGE 1432 #define ERROR_SETCOUNT_ON_BAD_LB 1433 #define ERROR_LB_WITHOUT_TABSTOPS 1434 #define ERROR_DESTROY_OBJECT_OF_OTHER_THREAD 1435 #define ERROR_CHILD_WINDOW_MENU 1436 #define ERROR_NO_SYSTEM_MENU 1437 #define ERROR_INVALID_MSGBOX_STYLE 1438 #define ERROR_INVALID_SPI_VALUE 1439 #define ERROR_SCREEN_ALREADY_LOCKED 1440 #define ERROR_HWNDS_HAVE_DIFF_PARENT 1441 #define ERROR_NOT_CHILD_WINDOW 1442 #define ERROR_INVALID_GW_COMMAND 1443 #define ERROR_INVALID_THREAD_ID 1444 #define ERROR_NON_MDICHILD_WINDOW 1445 #define ERROR_POPUP_ALREADY_ACTIVE 1446 #define ERROR_NO_SCROLLBARS 1447 #define ERROR_INVALID_SCROLLBAR_RANGE 1448 #define ERROR_INVALID_SHOWWIN_COMMAND 1449 #define ERROR_NO_SYSTEM_RESOURCES 1450 #define ERROR_NONPAGED_SYSTEM_RESOURCES 1451 #define ERROR_PAGED_SYSTEM_RESOURCES 1452 #define ERROR_WORKING_SET_QUOTA 1453 #define ERROR_PAGEFILE_QUOTA 1454 #define ERROR_COMMITMENT_LIMIT 1455 #define ERROR_MENU_ITEM_NOT_FOUND 1456 #define ERROR_INVALID_KEYBOARD_HANDLE 1457 #define ERROR_HOOK_TYPE_NOT_ALLOWED 1458 #define ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION 1459 #define ERROR_TIMEOUT 1460 #define ERROR_INVALID_MONITOR_HANDLE 1461 #define ERROR_INCORRECT_SIZE 1462 #define ERROR_SYMLINK_CLASS_DISABLED 1463 #define ERROR_SYMLINK_NOT_SUPPORTED 1464 #define ERROR_XML_PARSE_ERROR 1465 #define ERROR_XMLDSIG_ERROR 1466 #define ERROR_RESTART_APPLICATION 1467 #define ERROR_WRONG_COMPARTMENT 1468 #define ERROR_AUTHIP_FAILURE 1469 #define ERROR_NO_NVRAM_RESOURCES 1470 #define ERROR_EVENTLOG_FILE_CORRUPT 1500 #define ERROR_EVENTLOG_CANT_START 1501 #define ERROR_LOG_FILE_FULL 1502 #define ERROR_EVENTLOG_FILE_CHANGED 1503 #define ERROR_INVALID_TASK_NAME 1550 #define ERROR_INVALID_TASK_INDEX 1551 #define ERROR_THREAD_ALREADY_IN_TASK 1552 #define ERROR_INSTALL_SERVICE_FAILURE 1601 #define ERROR_INSTALL_USEREXIT 1602 #define ERROR_INSTALL_FAILURE 1603 #define ERROR_INSTALL_SUSPEND 1604 #define ERROR_UNKNOWN_PRODUCT 1605 #define ERROR_UNKNOWN_FEATURE 1606 #define ERROR_UNKNOWN_COMPONENT 1607 #define ERROR_UNKNOWN_PROPERTY 1608 #define ERROR_INVALID_HANDLE_STATE 1609 #define ERROR_BAD_CONFIGURATION 1610 #define ERROR_INDEX_ABSENT 1611 #define ERROR_INSTALL_SOURCE_ABSENT 1612 #define ERROR_INSTALL_PACKAGE_VERSION 1613 #define ERROR_PRODUCT_UNINSTALLED 1614 #define ERROR_BAD_QUERY_SYNTAX 1615 #define ERROR_INVALID_FIELD 1616 #define ERROR_DEVICE_REMOVED 1617 #define ERROR_INSTALL_ALREADY_RUNNING 1618 #define ERROR_INSTALL_PACKAGE_OPEN_FAILED 1619 #define ERROR_INSTALL_PACKAGE_INVALID 1620 #define ERROR_INSTALL_UI_FAILURE 1621 #define ERROR_INSTALL_LOG_FAILURE 1622 #define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 1623 #define ERROR_INSTALL_TRANSFORM_FAILURE 1624 #define ERROR_INSTALL_PACKAGE_REJECTED 1625 #define ERROR_FUNCTION_NOT_CALLED 1626 #define ERROR_FUNCTION_FAILED 1627 #define ERROR_INVALID_TABLE 1628 #define ERROR_DATATYPE_MISMATCH 1629 #define ERROR_UNSUPPORTED_TYPE 1630 #define ERROR_CREATE_FAILED 1631 #define ERROR_INSTALL_TEMP_UNWRITABLE 1632 #define ERROR_INSTALL_PLATFORM_UNSUPPORTED 1633 #define ERROR_INSTALL_NOTUSED 1634 #define ERROR_PATCH_PACKAGE_OPEN_FAILED 1635 #define ERROR_PATCH_PACKAGE_INVALID 1636 #define ERROR_PATCH_PACKAGE_UNSUPPORTED 1637 #define ERROR_PRODUCT_VERSION 1638 #define ERROR_INVALID_COMMAND_LINE 1639 #define ERROR_INSTALL_REMOTE_DISALLOWED 1640 #define ERROR_SUCCESS_REBOOT_INITIATED 1641 #define ERROR_PATCH_TARGET_NOT_FOUND 1642 #define ERROR_PATCH_PACKAGE_REJECTED 1643 #define ERROR_INSTALL_TRANSFORM_REJECTED 1644 #define ERROR_INSTALL_REMOTE_PROHIBITED 1645 #define ERROR_PATCH_REMOVAL_UNSUPPORTED 1646 #define ERROR_UNKNOWN_PATCH 1647 #define ERROR_PATCH_NO_SEQUENCE 1648 #define ERROR_PATCH_REMOVAL_DISALLOWED 1649 #define ERROR_INVALID_PATCH_XML 1650 #define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT 1651 #define ERROR_INSTALL_SERVICE_SAFEBOOT 1652 #define RPC_S_INVALID_STRING_BINDING 1700 #define RPC_S_WRONG_KIND_OF_BINDING 1701 #define RPC_S_INVALID_BINDING 1702 #define RPC_S_PROTSEQ_NOT_SUPPORTED 1703 #define RPC_S_INVALID_RPC_PROTSEQ 1704 #define RPC_S_INVALID_STRING_UUID 1705 #define RPC_S_INVALID_ENDPOINT_FORMAT 1706 #define RPC_S_INVALID_NET_ADDR 1707 #define RPC_S_NO_ENDPOINT_FOUND 1708 #define RPC_S_INVALID_TIMEOUT 1709 #define RPC_S_OBJECT_NOT_FOUND 1710 #define RPC_S_ALREADY_REGISTERED 1711 #define RPC_S_TYPE_ALREADY_REGISTERED 1712 #define RPC_S_ALREADY_LISTENING 1713 #define RPC_S_NO_PROTSEQS_REGISTERED 1714 #define RPC_S_NOT_LISTENING 1715 #define RPC_S_UNKNOWN_MGR_TYPE 1716 #define RPC_S_UNKNOWN_IF 1717 #define RPC_S_NO_BINDINGS 1718 #define RPC_S_NO_PROTSEQS 1719 #define RPC_S_CANT_CREATE_ENDPOINT 1720 #define RPC_S_OUT_OF_RESOURCES 1721 #define RPC_S_SERVER_UNAVAILABLE 1722 #define RPC_S_SERVER_TOO_BUSY 1723 #define RPC_S_INVALID_NETWORK_OPTIONS 1724 #define RPC_S_NO_CALL_ACTIVE 1725 #define RPC_S_CALL_FAILED 1726 #define RPC_S_CALL_FAILED_DNE 1727 #define RPC_S_PROTOCOL_ERROR 1728 #define RPC_S_UNSUPPORTED_TRANS_SYN 1730 #define RPC_S_UNSUPPORTED_TYPE 1732 #define RPC_S_INVALID_TAG 1733 #define RPC_S_INVALID_BOUND 1734 #define RPC_S_NO_ENTRY_NAME 1735 #define RPC_S_INVALID_NAME_SYNTAX 1736 #define RPC_S_UNSUPPORTED_NAME_SYNTAX 1737 #define RPC_S_UUID_NO_ADDRESS 1739 #define RPC_S_DUPLICATE_ENDPOINT 1740 #define RPC_S_UNKNOWN_AUTHN_TYPE 1741 #define RPC_S_MAX_CALLS_TOO_SMALL 1742 #define RPC_S_STRING_TOO_LONG 1743 #define RPC_S_PROTSEQ_NOT_FOUND 1744 #define RPC_S_PROCNUM_OUT_OF_RANGE 1745 #define RPC_S_BINDING_HAS_NO_AUTH 1746 #define RPC_S_UNKNOWN_AUTHN_SERVICE 1747 #define RPC_S_UNKNOWN_AUTHN_LEVEL 1748 #define RPC_S_INVALID_AUTH_IDENTITY 1749 #define RPC_S_UNKNOWN_AUTHZ_SERVICE 1750 #define EPT_S_INVALID_ENTRY 1751 #define EPT_S_CANT_PERFORM_OP 1752 #define EPT_S_NOT_REGISTERED 1753 #define RPC_S_NOTHING_TO_EXPORT 1754 #define RPC_S_INCOMPLETE_NAME 1755 #define RPC_S_INVALID_VERS_OPTION 1756 #define RPC_S_NO_MORE_MEMBERS 1757 #define RPC_S_NOT_ALL_OBJS_UNEXPORTED 1758 #define RPC_S_INTERFACE_NOT_FOUND 1759 #define RPC_S_ENTRY_ALREADY_EXISTS 1760 #define RPC_S_ENTRY_NOT_FOUND 1761 #define RPC_S_NAME_SERVICE_UNAVAILABLE 1762 #define RPC_S_INVALID_NAF_ID 1763 #define RPC_S_CANNOT_SUPPORT 1764 #define RPC_S_NO_CONTEXT_AVAILABLE 1765 #define RPC_S_INTERNAL_ERROR 1766 #define RPC_S_ZERO_DIVIDE 1767 #define RPC_S_ADDRESS_ERROR 1768 #define RPC_S_FP_DIV_ZERO 1769 #define RPC_S_FP_UNDERFLOW 1770 #define RPC_S_FP_OVERFLOW 1771 #define RPC_X_NO_MORE_ENTRIES 1772 #define RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773 #define RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774 #define RPC_X_SS_IN_NULL_CONTEXT 1775 #define RPC_X_SS_CONTEXT_DAMAGED 1777 #define RPC_X_SS_HANDLES_MISMATCH 1778 #define RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779 #define RPC_X_NULL_REF_POINTER 1780 #define RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781 #define RPC_X_BYTE_COUNT_TOO_SMALL 1782 #define RPC_X_BAD_STUB_DATA 1783 #define ERROR_INVALID_USER_BUFFER 1784 #define ERROR_UNRECOGNIZED_MEDIA 1785 #define ERROR_NO_TRUST_LSA_SECRET 1786 #define ERROR_NO_TRUST_SAM_ACCOUNT 1787 #define ERROR_TRUSTED_DOMAIN_FAILURE 1788 #define ERROR_TRUSTED_RELATIONSHIP_FAILURE 1789 #define ERROR_TRUST_FAILURE 1790 #define RPC_S_CALL_IN_PROGRESS 1791 #define ERROR_NETLOGON_NOT_STARTED 1792 #define ERROR_ACCOUNT_EXPIRED 1793 #define ERROR_REDIRECTOR_HAS_OPEN_HANDLES 1794 #define ERROR_PRINTER_DRIVER_ALREADY_INSTALLED 1795 #define ERROR_UNKNOWN_PORT 1796 #define ERROR_UNKNOWN_PRINTER_DRIVER 1797 #define ERROR_UNKNOWN_PRINTPROCESSOR 1798 #define ERROR_INVALID_SEPARATOR_FILE 1799 #define ERROR_INVALID_PRIORITY 1800 #define ERROR_INVALID_PRINTER_NAME 1801 #define ERROR_PRINTER_ALREADY_EXISTS 1802 #define ERROR_INVALID_PRINTER_COMMAND 1803 #define ERROR_INVALID_DATATYPE 1804 #define ERROR_INVALID_ENVIRONMENT 1805 #define RPC_S_NO_MORE_BINDINGS 1806 #define ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT 1807 #define ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT 1808 #define ERROR_NOLOGON_SERVER_TRUST_ACCOUNT 1809 #define ERROR_DOMAIN_TRUST_INCONSISTENT 1810 #define ERROR_SERVER_HAS_OPEN_HANDLES 1811 #define ERROR_RESOURCE_DATA_NOT_FOUND 1812 #define ERROR_RESOURCE_TYPE_NOT_FOUND 1813 #define ERROR_RESOURCE_NAME_NOT_FOUND 1814 #define ERROR_RESOURCE_LANG_NOT_FOUND 1815 #define ERROR_NOT_ENOUGH_QUOTA 1816 #define RPC_S_NO_INTERFACES 1817 #define RPC_S_CALL_CANCELLED 1818 #define RPC_S_BINDING_INCOMPLETE 1819 #define RPC_S_COMM_FAILURE 1820 #define RPC_S_UNSUPPORTED_AUTHN_LEVEL 1821 #define RPC_S_NO_PRINC_NAME 1822 #define RPC_S_NOT_RPC_ERROR 1823 #define RPC_S_UUID_LOCAL_ONLY 1824 #define RPC_S_SEC_PKG_ERROR 1825 #define RPC_S_NOT_CANCELLED 1826 #define RPC_X_INVALID_ES_ACTION 1827 #define RPC_X_WRONG_ES_VERSION 1828 #define RPC_X_WRONG_STUB_VERSION 1829 #define RPC_X_INVALID_PIPE_OBJECT 1830 #define RPC_X_WRONG_PIPE_ORDER 1831 #define RPC_X_WRONG_PIPE_VERSION 1832 #define RPC_S_GROUP_MEMBER_NOT_FOUND 1898 #define EPT_S_CANT_CREATE 1899 #define RPC_S_INVALID_OBJECT 1900 #define ERROR_INVALID_TIME 1901 #define ERROR_INVALID_FORM_NAME 1902 #define ERROR_INVALID_FORM_SIZE 1903 #define ERROR_ALREADY_WAITING 1904 #define ERROR_PRINTER_DELETED 1905 #define ERROR_INVALID_PRINTER_STATE 1906 #define ERROR_PASSWORD_MUST_CHANGE 1907 #define ERROR_DOMAIN_CONTROLLER_NOT_FOUND 1908 #define ERROR_ACCOUNT_LOCKED_OUT 1909 #define OR_INVALID_OXID 1910 #define OR_INVALID_OID 1911 #define OR_INVALID_SET 1912 #define RPC_S_SEND_INCOMPLETE 1913 #define RPC_S_INVALID_ASYNC_HANDLE 1914 #define RPC_S_INVALID_ASYNC_CALL 1915 #define RPC_X_PIPE_CLOSED 1916 #define RPC_X_PIPE_DISCIPLINE_ERROR 1917 #define RPC_X_PIPE_EMPTY 1918 #define ERROR_NO_SITENAME 1919 #define ERROR_CANT_ACCESS_FILE 1920 #define ERROR_CANT_RESOLVE_FILENAME 1921 #define RPC_S_ENTRY_TYPE_MISMATCH 1922 #define RPC_S_NOT_ALL_OBJS_EXPORTED 1923 #define RPC_S_INTERFACE_NOT_EXPORTED 1924 #define RPC_S_PROFILE_NOT_ADDED 1925 #define RPC_S_PRF_ELT_NOT_ADDED 1926 #define RPC_S_PRF_ELT_NOT_REMOVED 1927 #define RPC_S_GRP_ELT_NOT_ADDED 1928 #define RPC_S_GRP_ELT_NOT_REMOVED 1929 #define ERROR_KM_DRIVER_BLOCKED 1930 #define ERROR_CONTEXT_EXPIRED 1931 #define ERROR_PER_USER_TRUST_QUOTA_EXCEEDED 1932 #define ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED 1933 #define ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED 1934 #define ERROR_AUTHENTICATION_FIREWALL_FAILED 1935 #define ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED 1936 #define ERROR_INVALID_PIXEL_FORMAT 2000 #define ERROR_BAD_DRIVER 2001 #define ERROR_INVALID_WINDOW_STYLE 2002 #define ERROR_METAFILE_NOT_SUPPORTED 2003 #define ERROR_TRANSFORM_NOT_SUPPORTED 2004 #define ERROR_CLIPPING_NOT_SUPPORTED 2005 #define ERROR_INVALID_CMM 2010 #define ERROR_INVALID_PROFILE 2011 #define ERROR_TAG_NOT_FOUND 2012 #define ERROR_TAG_NOT_PRESENT 2013 #define ERROR_DUPLICATE_TAG 2014 #define ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE 2015 #define ERROR_PROFILE_NOT_FOUND 2016 #define ERROR_INVALID_COLORSPACE 2017 #define ERROR_ICM_NOT_ENABLED 2018 #define ERROR_DELETING_ICM_XFORM 2019 #define ERROR_INVALID_TRANSFORM 2020 #define ERROR_COLORSPACE_MISMATCH 2021 #define ERROR_INVALID_COLORINDEX 2022 #define ERROR_CONNECTED_OTHER_PASSWORD 2108 #define ERROR_BAD_USERNAME 2202 #define ERROR_NOT_CONNECTED 2250 #define ERROR_OPEN_FILES 2401 #define ERROR_ACTIVE_CONNECTIONS 2402 #define ERROR_DEVICE_IN_USE 2404 #define ERROR_UNKNOWN_PRINT_MONITOR 3000 #define ERROR_PRINTER_DRIVER_IN_USE 3001 #define ERROR_SPOOL_FILE_NOT_FOUND 3002 #define ERROR_SPL_NO_STARTDOC 3003 #define ERROR_SPL_NO_ADDJOB 3004 #define ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED 3005 #define ERROR_PRINT_MONITOR_ALREADY_INSTALLED 3006 #define ERROR_INVALID_PRINT_MONITOR 3007 #define ERROR_PRINT_MONITOR_IN_USE 3008 #define ERROR_PRINTER_HAS_JOBS_QUEUED 3009 #define ERROR_SUCCESS_REBOOT_REQUIRED 3010 #define ERROR_SUCCESS_RESTART_REQUIRED 3011 #define ERROR_PRINTER_NOT_FOUND 3012 #define ERROR_PRINTER_DRIVER_WARNED 3013 #define ERROR_PRINTER_DRIVER_BLOCKED 3014 #define ERROR_REQUEST_PAUSED 3050 #define ERROR_WINS_INTERNAL 4000 #define ERROR_CAN_NOT_DEL_LOCAL_WINS 4001 #define ERROR_STATIC_INIT 4002 #define ERROR_INC_BACKUP 4003 #define ERROR_FULL_BACKUP 4004 #define ERROR_REC_NON_EXISTENT 4005 #define ERROR_RPL_NOT_ALLOWED 4006 #define ERROR_DHCP_ADDRESS_CONFLICT 4100 #define ERROR_WMI_GUID_NOT_FOUND 4200 #define ERROR_WMI_INSTANCE_NOT_FOUND 4201 #define ERROR_WMI_ITEMID_NOT_FOUND 4202 #define ERROR_WMI_TRY_AGAIN 4203 #define ERROR_WMI_DP_NOT_FOUND 4204 #define ERROR_WMI_UNRESOLVED_INSTANCE_REF 4205 #define ERROR_WMI_ALREADY_ENABLED 4206 #define ERROR_WMI_GUID_DISCONNECTED 4207 #define ERROR_WMI_SERVER_UNAVAILABLE 4208 #define ERROR_WMI_DP_FAILED 4209 #define ERROR_WMI_INVALID_MOF 4210 #define ERROR_WMI_INVALID_REGINFO 4211 #define ERROR_WMI_ALREADY_DISABLED 4212 #define ERROR_WMI_READ_ONLY 4213 #define ERROR_WMI_SET_FAILURE 4214 #define ERROR_INVALID_MEDIA 4300 #define ERROR_INVALID_LIBRARY 4301 #define ERROR_INVALID_MEDIA_POOL 4302 #define ERROR_DRIVE_MEDIA_MISMATCH 4303 #define ERROR_MEDIA_OFFLINE 4304 #define ERROR_LIBRARY_OFFLINE 4305 #define ERROR_EMPTY 4306 #define ERROR_NOT_EMPTY 4307 #define ERROR_MEDIA_UNAVAILABLE 4308 #define ERROR_RESOURCE_DISABLED 4309 #define ERROR_INVALID_CLEANER 4310 #define ERROR_UNABLE_TO_CLEAN 4311 #define ERROR_OBJECT_NOT_FOUND 4312 #define ERROR_DATABASE_FAILURE 4313 #define ERROR_DATABASE_FULL 4314 #define ERROR_MEDIA_INCOMPATIBLE 4315 #define ERROR_RESOURCE_NOT_PRESENT 4316 #define ERROR_INVALID_OPERATION 4317 #define ERROR_MEDIA_NOT_AVAILABLE 4318 #define ERROR_DEVICE_NOT_AVAILABLE 4319 #define ERROR_REQUEST_REFUSED 4320 #define ERROR_INVALID_DRIVE_OBJECT 4321 #define ERROR_LIBRARY_FULL 4322 #define ERROR_MEDIUM_NOT_ACCESSIBLE 4323 #define ERROR_UNABLE_TO_LOAD_MEDIUM 4324 #define ERROR_UNABLE_TO_INVENTORY_DRIVE 4325 #define ERROR_UNABLE_TO_INVENTORY_SLOT 4326 #define ERROR_UNABLE_TO_INVENTORY_TRANSPORT 4327 #define ERROR_TRANSPORT_FULL 4328 #define ERROR_CONTROLLING_IEPORT 4329 #define ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA 4330 #define ERROR_CLEANER_SLOT_SET 4331 #define ERROR_CLEANER_SLOT_NOT_SET 4332 #define ERROR_CLEANER_CARTRIDGE_SPENT 4333 #define ERROR_UNEXPECTED_OMID 4334 #define ERROR_CANT_DELETE_LAST_ITEM 4335 #define ERROR_MESSAGE_EXCEEDS_MAX_SIZE 4336 #define ERROR_VOLUME_CONTAINS_SYS_FILES 4337 #define ERROR_INDIGENOUS_TYPE 4338 #define ERROR_NO_SUPPORTING_DRIVES 4339 #define ERROR_CLEANER_CARTRIDGE_INSTALLED 4340 #define ERROR_FILE_OFFLINE 4350 #define ERROR_REMOTE_STORAGE_NOT_ACTIVE 4351 #define ERROR_REMOTE_STORAGE_MEDIA_ERROR 4352 #define ERROR_NOT_A_REPARSE_POINT 4390 #define ERROR_REPARSE_ATTRIBUTE_CONFLICT 4391 #define ERROR_INVALID_REPARSE_DATA 4392 #define ERROR_REPARSE_TAG_INVALID 4393 #define ERROR_REPARSE_TAG_MISMATCH 4394 #define ERROR_VOLUME_NOT_SIS_ENABLED 4500 #define ERROR_DEPENDENT_RESOURCE_EXISTS 5001 #define ERROR_DEPENDENCY_NOT_FOUND 5002 #define ERROR_DEPENDENCY_ALREADY_EXISTS 5003 #define ERROR_RESOURCE_NOT_ONLINE 5004 #define ERROR_HOST_NODE_NOT_AVAILABLE 5005 #define ERROR_RESOURCE_NOT_AVAILABLE 5006 #define ERROR_RESOURCE_NOT_FOUND 5007 #define ERROR_SHUTDOWN_CLUSTER 5008 #define ERROR_CANT_EVICT_ACTIVE_NODE 5009 #define ERROR_OBJECT_ALREADY_EXISTS 5010 #define ERROR_OBJECT_IN_LIST 5011 #define ERROR_GROUP_NOT_AVAILABLE 5012 #define ERROR_GROUP_NOT_FOUND 5013 #define ERROR_GROUP_NOT_ONLINE 5014 #define ERROR_HOST_NODE_NOT_RESOURCE_OWNER 5015 #define ERROR_HOST_NODE_NOT_GROUP_OWNER 5016 #define ERROR_RESMON_CREATE_FAILED 5017 #define ERROR_RESMON_ONLINE_FAILED 5018 #define ERROR_RESOURCE_ONLINE 5019 #define ERROR_QUORUM_RESOURCE 5020 #define ERROR_NOT_QUORUM_CAPABLE 5021 #define ERROR_CLUSTER_SHUTTING_DOWN 5022 #define ERROR_INVALID_STATE 5023 #define ERROR_RESOURCE_PROPERTIES_STORED 5024 #define ERROR_NOT_QUORUM_CLASS 5025 #define ERROR_CORE_RESOURCE 5026 #define ERROR_QUORUM_RESOURCE_ONLINE_FAILED 5027 #define ERROR_QUORUMLOG_OPEN_FAILED 5028 #define ERROR_CLUSTERLOG_CORRUPT 5029 #define ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE 5030 #define ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE 5031 #define ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND 5032 #define ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE 5033 #define ERROR_QUORUM_OWNER_ALIVE 5034 #define ERROR_NETWORK_NOT_AVAILABLE 5035 #define ERROR_NODE_NOT_AVAILABLE 5036 #define ERROR_ALL_NODES_NOT_AVAILABLE 5037 #define ERROR_RESOURCE_FAILED 5038 #define ERROR_CLUSTER_INVALID_NODE 5039 #define ERROR_CLUSTER_NODE_EXISTS 5040 #define ERROR_CLUSTER_JOIN_IN_PROGRESS 5041 #define ERROR_CLUSTER_NODE_NOT_FOUND 5042 #define ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND 5043 #define ERROR_CLUSTER_NETWORK_EXISTS 5044 #define ERROR_CLUSTER_NETWORK_NOT_FOUND 5045 #define ERROR_CLUSTER_NETINTERFACE_EXISTS 5046 #define ERROR_CLUSTER_NETINTERFACE_NOT_FOUND 5047 #define ERROR_CLUSTER_INVALID_REQUEST 5048 #define ERROR_CLUSTER_INVALID_NETWORK_PROVIDER 5049 #define ERROR_CLUSTER_NODE_DOWN 5050 #define ERROR_CLUSTER_NODE_UNREACHABLE 5051 #define ERROR_CLUSTER_NODE_NOT_MEMBER 5052 #define ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS 5053 #define ERROR_CLUSTER_INVALID_NETWORK 5054 #define ERROR_CLUSTER_NODE_UP 5056 #define ERROR_CLUSTER_IPADDR_IN_USE 5057 #define ERROR_CLUSTER_NODE_NOT_PAUSED 5058 #define ERROR_CLUSTER_NO_SECURITY_CONTEXT 5059 #define ERROR_CLUSTER_NETWORK_NOT_INTERNAL 5060 #define ERROR_CLUSTER_NODE_ALREADY_UP 5061 #define ERROR_CLUSTER_NODE_ALREADY_DOWN 5062 #define ERROR_CLUSTER_NETWORK_ALREADY_ONLINE 5063 #define ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE 5064 #define ERROR_CLUSTER_NODE_ALREADY_MEMBER 5065 #define ERROR_CLUSTER_LAST_INTERNAL_NETWORK 5066 #define ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS 5067 #define ERROR_INVALID_OPERATION_ON_QUORUM 5068 #define ERROR_DEPENDENCY_NOT_ALLOWED 5069 #define ERROR_CLUSTER_NODE_PAUSED 5070 #define ERROR_NODE_CANT_HOST_RESOURCE 5071 #define ERROR_CLUSTER_NODE_NOT_READY 5072 #define ERROR_CLUSTER_NODE_SHUTTING_DOWN 5073 #define ERROR_CLUSTER_JOIN_ABORTED 5074 #define ERROR_CLUSTER_INCOMPATIBLE_VERSIONS 5075 #define ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED 5076 #define ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED 5077 #define ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND 5078 #define ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED 5079 #define ERROR_CLUSTER_RESNAME_NOT_FOUND 5080 #define ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED 5081 #define ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST 5082 #define ERROR_CLUSTER_DATABASE_SEQMISMATCH 5083 #define ERROR_RESMON_INVALID_STATE 5084 #define ERROR_CLUSTER_GUM_NOT_LOCKER 5085 #define ERROR_QUORUM_DISK_NOT_FOUND 5086 #define ERROR_DATABASE_BACKUP_CORRUPT 5087 #define ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT 5088 #define ERROR_RESOURCE_PROPERTY_UNCHANGEABLE 5089 #define ERROR_ENCRYPTION_FAILED 6000 #define ERROR_DECRYPTION_FAILED 6001 #define ERROR_FILE_ENCRYPTED 6002 #define ERROR_NO_RECOVERY_POLICY 6003 #define ERROR_NO_EFS 6004 #define ERROR_WRONG_EFS 6005 #define ERROR_NO_USER_KEYS 6006 #define ERROR_FILE_NOT_ENCRYPTED 6007 #define ERROR_NOT_EXPORT_FORMAT 6008 #define ERROR_FILE_READ_ONLY 6009 #define ERROR_DIR_EFS_DISALLOWED 6010 #define ERROR_EFS_SERVER_NOT_TRUSTED 6011 #define ERROR_EFS_ALG_BLOB_TOO_BIG 6013 #define ERROR_NO_BROWSER_SERVERS_FOUND 6118 #define SCHED_E_SERVICE_NOT_LOCALSYSTEM 6200 #define ERROR_CTX_WINSTATION_NAME_INVALID 7001 #define ERROR_CTX_INVALID_PD 7002 #define ERROR_CTX_PD_NOT_FOUND 7003 #define ERROR_CTX_WD_NOT_FOUND 7004 #define ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY 7005 #define ERROR_CTX_SERVICE_NAME_COLLISION 7006 #define ERROR_CTX_CLOSE_PENDING 7007 #define ERROR_CTX_NO_OUTBUF 7008 #define ERROR_CTX_MODEM_INF_NOT_FOUND 7009 #define ERROR_CTX_INVALID_MODEMNAME 7010 #define ERROR_CTX_MODEM_RESPONSE_ERROR 7011 #define ERROR_CTX_MODEM_RESPONSE_TIMEOUT 7012 #define ERROR_CTX_MODEM_RESPONSE_NO_CARRIER 7013 #define ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE 7014 #define ERROR_CTX_MODEM_RESPONSE_BUSY 7015 #define ERROR_CTX_MODEM_RESPONSE_VOICE 7016 #define ERROR_CTX_TD_ERROR 7017 #define ERROR_CTX_WINSTATION_NOT_FOUND 7022 #define ERROR_CTX_WINSTATION_ALREADY_EXISTS 7023 #define ERROR_CTX_WINSTATION_BUSY 7024 #define ERROR_CTX_BAD_VIDEO_MODE 7025 #define ERROR_CTX_GRAPHICS_INVALID 7035 #define ERROR_CTX_LOGON_DISABLED 7037 #define ERROR_CTX_NOT_CONSOLE 7038 #define ERROR_CTX_CLIENT_QUERY_TIMEOUT 7040 #define ERROR_CTX_CONSOLE_DISCONNECT 7041 #define ERROR_CTX_CONSOLE_CONNECT 7042 #define ERROR_CTX_SHADOW_DENIED 7044 #define ERROR_CTX_WINSTATION_ACCESS_DENIED 7045 #define ERROR_CTX_INVALID_WD 7049 #define ERROR_CTX_SHADOW_INVALID 7050 #define ERROR_CTX_SHADOW_DISABLED 7051 #define ERROR_CTX_CLIENT_LICENSE_IN_USE 7052 #define ERROR_CTX_CLIENT_LICENSE_NOT_SET 7053 #define ERROR_CTX_LICENSE_NOT_AVAILABLE 7054 #define ERROR_CTX_LICENSE_CLIENT_INVALID 7055 #define ERROR_CTX_LICENSE_EXPIRED 7056 #define ERROR_CTX_SHADOW_NOT_RUNNING 7057 #define ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE 7058 #define FRS_ERR_INVALID_API_SEQUENCE 8001 #define FRS_ERR_STARTING_SERVICE 8002 #define FRS_ERR_STOPPING_SERVICE 8003 #define FRS_ERR_INTERNAL_API 8004 #define FRS_ERR_INTERNAL 8005 #define FRS_ERR_SERVICE_COMM 8006 #define FRS_ERR_INSUFFICIENT_PRIV 8007 #define FRS_ERR_AUTHENTICATION 8008 #define FRS_ERR_PARENT_INSUFFICIENT_PRIV 8009 #define FRS_ERR_PARENT_AUTHENTICATION 8010 #define FRS_ERR_CHILD_TO_PARENT_COMM 8011 #define FRS_ERR_PARENT_TO_CHILD_COMM 8012 #define FRS_ERR_SYSVOL_POPULATE 8013 #define FRS_ERR_SYSVOL_POPULATE_TIMEOUT 8014 #define FRS_ERR_SYSVOL_IS_BUSY 8015 #define FRS_ERR_SYSVOL_DEMOTE 8016 #define FRS_ERR_INVALID_SERVICE_PARAMETER 8017 #define ERROR_DS_NOT_INSTALLED 8200 #define ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY 8201 #define ERROR_DS_NO_ATTRIBUTE_OR_VALUE 8202 #define ERROR_DS_INVALID_ATTRIBUTE_SYNTAX 8203 #define ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED 8204 #define ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS 8205 #define ERROR_DS_BUSY 8206 #define ERROR_DS_UNAVAILABLE 8207 #define ERROR_DS_NO_RIDS_ALLOCATED 8208 #define ERROR_DS_NO_MORE_RIDS 8209 #define ERROR_DS_INCORRECT_ROLE_OWNER 8210 #define ERROR_DS_RIDMGR_INIT_ERROR 8211 #define ERROR_DS_OBJ_CLASS_VIOLATION 8212 #define ERROR_DS_CANT_ON_NON_LEAF 8213 #define ERROR_DS_CANT_ON_RDN 8214 #define ERROR_DS_CANT_MOD_OBJ_CLASS 8215 #define ERROR_DS_CROSS_DOM_MOVE_ERROR 8216 #define ERROR_DS_GC_NOT_AVAILABLE 8217 #define ERROR_SHARED_POLICY 8218 #define ERROR_POLICY_OBJECT_NOT_FOUND 8219 #define ERROR_POLICY_ONLY_IN_DS 8220 #define ERROR_PROMOTION_ACTIVE 8221 #define ERROR_NO_PROMOTION_ACTIVE 8222 #define ERROR_DS_OPERATIONS_ERROR 8224 #define ERROR_DS_PROTOCOL_ERROR 8225 #define ERROR_DS_TIMELIMIT_EXCEEDED 8226 #define ERROR_DS_SIZELIMIT_EXCEEDED 8227 #define ERROR_DS_ADMIN_LIMIT_EXCEEDED 8228 #define ERROR_DS_COMPARE_FALSE 8229 #define ERROR_DS_COMPARE_TRUE 8230 #define ERROR_DS_AUTH_METHOD_NOT_SUPPORTED 8231 #define ERROR_DS_STRONG_AUTH_REQUIRED 8232 #define ERROR_DS_INAPPROPRIATE_AUTH 8233 #define ERROR_DS_AUTH_UNKNOWN 8234 #define ERROR_DS_REFERRAL 8235 #define ERROR_DS_UNAVAILABLE_CRIT_EXTENSION 8236 #define ERROR_DS_CONFIDENTIALITY_REQUIRED 8237 #define ERROR_DS_INAPPROPRIATE_MATCHING 8238 #define ERROR_DS_CONSTRAINT_VIOLATION 8239 #define ERROR_DS_NO_SUCH_OBJECT 8240 #define ERROR_DS_ALIAS_PROBLEM 8241 #define ERROR_DS_INVALID_DN_SYNTAX 8242 #define ERROR_DS_IS_LEAF 8243 #define ERROR_DS_ALIAS_DEREF_PROBLEM 8244 #define ERROR_DS_UNWILLING_TO_PERFORM 8245 #define ERROR_DS_LOOP_DETECT 8246 #define ERROR_DS_NAMING_VIOLATION 8247 #define ERROR_DS_OBJECT_RESULTS_TOO_LARGE 8248 #define ERROR_DS_AFFECTS_MULTIPLE_DSAS 8249 #define ERROR_DS_SERVER_DOWN 8250 #define ERROR_DS_LOCAL_ERROR 8251 #define ERROR_DS_ENCODING_ERROR 8252 #define ERROR_DS_DECODING_ERROR 8253 #define ERROR_DS_FILTER_UNKNOWN 8254 #define ERROR_DS_PARAM_ERROR 8255 #define ERROR_DS_NOT_SUPPORTED 8256 #define ERROR_DS_NO_RESULTS_RETURNED 8257 #define ERROR_DS_CONTROL_NOT_FOUND 8258 #define ERROR_DS_CLIENT_LOOP 8259 #define ERROR_DS_REFERRAL_LIMIT_EXCEEDED 8260 #define ERROR_DS_ROOT_MUST_BE_NC 8301 #define ERROR_DS_ADD_REPLICA_INHIBITED 8302 #define ERROR_DS_ATT_NOT_DEF_IN_SCHEMA 8303 #define ERROR_DS_MAX_OBJ_SIZE_EXCEEDED 8304 #define ERROR_DS_OBJ_STRING_NAME_EXISTS 8305 #define ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA 8306 #define ERROR_DS_RDN_DOESNT_MATCH_SCHEMA 8307 #define ERROR_DS_NO_REQUESTED_ATTS_FOUND 8308 #define ERROR_DS_USER_BUFFER_TO_SMALL 8309 #define ERROR_DS_ATT_IS_NOT_ON_OBJ 8310 #define ERROR_DS_ILLEGAL_MOD_OPERATION 8311 #define ERROR_DS_OBJ_TOO_LARGE 8312 #define ERROR_DS_BAD_INSTANCE_TYPE 8313 #define ERROR_DS_MASTERDSA_REQUIRED 8314 #define ERROR_DS_OBJECT_CLASS_REQUIRED 8315 #define ERROR_DS_MISSING_REQUIRED_ATT 8316 #define ERROR_DS_ATT_NOT_DEF_FOR_CLASS 8317 #define ERROR_DS_ATT_ALREADY_EXISTS 8318 #define ERROR_DS_CANT_ADD_ATT_VALUES 8320 #define ERROR_DS_SINGLE_VALUE_CONSTRAINT 8321 #define ERROR_DS_RANGE_CONSTRAINT 8322 #define ERROR_DS_ATT_VAL_ALREADY_EXISTS 8323 #define ERROR_DS_CANT_REM_MISSING_ATT 8324 #define ERROR_DS_CANT_REM_MISSING_ATT_VAL 8325 #define ERROR_DS_ROOT_CANT_BE_SUBREF 8326 #define ERROR_DS_NO_CHAINING 8327 #define ERROR_DS_NO_CHAINED_EVAL 8328 #define ERROR_DS_NO_PARENT_OBJECT 8329 #define ERROR_DS_PARENT_IS_AN_ALIAS 8330 #define ERROR_DS_CANT_MIX_MASTER_AND_REPS 8331 #define ERROR_DS_CHILDREN_EXIST 8332 #define ERROR_DS_OBJ_NOT_FOUND 8333 #define ERROR_DS_ALIASED_OBJ_MISSING 8334 #define ERROR_DS_BAD_NAME_SYNTAX 8335 #define ERROR_DS_ALIAS_POINTS_TO_ALIAS 8336 #define ERROR_DS_CANT_DEREF_ALIAS 8337 #define ERROR_DS_OUT_OF_SCOPE 8338 #define ERROR_DS_CANT_DELETE_DSA_OBJ 8340 #define ERROR_DS_GENERIC_ERROR 8341 #define ERROR_DS_DSA_MUST_BE_INT_MASTER 8342 #define ERROR_DS_CLASS_NOT_DSA 8343 #define ERROR_DS_INSUFF_ACCESS_RIGHTS 8344 #define ERROR_DS_ILLEGAL_SUPERIOR 8345 #define ERROR_DS_ATTRIBUTE_OWNED_BY_SAM 8346 #define ERROR_DS_NAME_TOO_MANY_PARTS 8347 #define ERROR_DS_NAME_TOO_LONG 8348 #define ERROR_DS_NAME_VALUE_TOO_LONG 8349 #define ERROR_DS_NAME_UNPARSEABLE 8350 #define ERROR_DS_NAME_TYPE_UNKNOWN 8351 #define ERROR_DS_NOT_AN_OBJECT 8352 #define ERROR_DS_SEC_DESC_TOO_SHORT 8353 #define ERROR_DS_SEC_DESC_INVALID 8354 #define ERROR_DS_NO_DELETED_NAME 8355 #define ERROR_DS_SUBREF_MUST_HAVE_PARENT 8356 #define ERROR_DS_NCNAME_MUST_BE_NC 8357 #define ERROR_DS_CANT_ADD_SYSTEM_ONLY 8358 #define ERROR_DS_CLASS_MUST_BE_CONCRETE 8359 #define ERROR_DS_INVALID_DMD 8360 #define ERROR_DS_OBJ_GUID_EXISTS 8361 #define ERROR_DS_NOT_ON_BACKLINK 8362 #define ERROR_DS_NO_CROSSREF_FOR_NC 8363 #define ERROR_DS_SHUTTING_DOWN 8364 #define ERROR_DS_UNKNOWN_OPERATION 8365 #define ERROR_DS_INVALID_ROLE_OWNER 8366 #define ERROR_DS_COULDNT_CONTACT_FSMO 8367 #define ERROR_DS_CROSS_NC_DN_RENAME 8368 #define ERROR_DS_CANT_MOD_SYSTEM_ONLY 8369 #define ERROR_DS_REPLICATOR_ONLY 8370 #define ERROR_DS_OBJ_CLASS_NOT_DEFINED 8371 #define ERROR_DS_OBJ_CLASS_NOT_SUBCLASS 8372 #define ERROR_DS_NAME_REFERENCE_INVALID 8373 #define ERROR_DS_CROSS_REF_EXISTS 8374 #define ERROR_DS_CANT_DEL_MASTER_CROSSREF 8375 #define ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD 8376 #define ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX 8377 #define ERROR_DS_DUP_RDN 8378 #define ERROR_DS_DUP_OID 8379 #define ERROR_DS_DUP_MAPI_ID 8380 #define ERROR_DS_DUP_SCHEMA_ID_GUID 8381 #define ERROR_DS_DUP_LDAP_DISPLAY_NAME 8382 #define ERROR_DS_SEMANTIC_ATT_TEST 8383 #define ERROR_DS_SYNTAX_MISMATCH 8384 #define ERROR_DS_EXISTS_IN_MUST_HAVE 8385 #define ERROR_DS_EXISTS_IN_MAY_HAVE 8386 #define ERROR_DS_NONEXISTENT_MAY_HAVE 8387 #define ERROR_DS_NONEXISTENT_MUST_HAVE 8388 #define ERROR_DS_AUX_CLS_TEST_FAIL 8389 #define ERROR_DS_NONEXISTENT_POSS_SUP 8390 #define ERROR_DS_SUB_CLS_TEST_FAIL 8391 #define ERROR_DS_BAD_RDN_ATT_ID_SYNTAX 8392 #define ERROR_DS_EXISTS_IN_AUX_CLS 8393 #define ERROR_DS_EXISTS_IN_SUB_CLS 8394 #define ERROR_DS_EXISTS_IN_POSS_SUP 8395 #define ERROR_DS_RECALCSCHEMA_FAILED 8396 #define ERROR_DS_TREE_DELETE_NOT_FINISHED 8397 #define ERROR_DS_CANT_DELETE 8398 #define ERROR_DS_ATT_SCHEMA_REQ_ID 8399 #define ERROR_DS_BAD_ATT_SCHEMA_SYNTAX 8400 #define ERROR_DS_CANT_CACHE_ATT 8401 #define ERROR_DS_CANT_CACHE_CLASS 8402 #define ERROR_DS_CANT_REMOVE_ATT_CACHE 8403 #define ERROR_DS_CANT_REMOVE_CLASS_CACHE 8404 #define ERROR_DS_CANT_RETRIEVE_DN 8405 #define ERROR_DS_MISSING_SUPREF 8406 #define ERROR_DS_CANT_RETRIEVE_INSTANCE 8407 #define ERROR_DS_CODE_INCONSISTENCY 8408 #define ERROR_DS_DATABASE_ERROR 8409 #define ERROR_DS_GOVERNSID_MISSING 8410 #define ERROR_DS_MISSING_EXPECTED_ATT 8411 #define ERROR_DS_NCNAME_MISSING_CR_REF 8412 #define ERROR_DS_SECURITY_CHECKING_ERROR 8413 #define ERROR_DS_SCHEMA_NOT_LOADED 8414 #define ERROR_DS_SCHEMA_ALLOC_FAILED 8415 #define ERROR_DS_ATT_SCHEMA_REQ_SYNTAX 8416 #define ERROR_DS_GCVERIFY_ERROR 8417 #define ERROR_DS_DRA_SCHEMA_MISMATCH 8418 #define ERROR_DS_CANT_FIND_DSA_OBJ 8419 #define ERROR_DS_CANT_FIND_EXPECTED_NC 8420 #define ERROR_DS_CANT_FIND_NC_IN_CACHE 8421 #define ERROR_DS_CANT_RETRIEVE_CHILD 8422 #define ERROR_DS_SECURITY_ILLEGAL_MODIFY 8423 #define ERROR_DS_CANT_REPLACE_HIDDEN_REC 8424 #define ERROR_DS_BAD_HIERARCHY_FILE 8425 #define ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED 8426 #define ERROR_DS_CONFIG_PARAM_MISSING 8427 #define ERROR_DS_COUNTING_AB_INDICES_FAILED 8428 #define ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED 8429 #define ERROR_DS_INTERNAL_FAILURE 8430 #define ERROR_DS_UNKNOWN_ERROR 8431 #define ERROR_DS_ROOT_REQUIRES_CLASS_TOP 8432 #define ERROR_DS_REFUSING_FSMO_ROLES 8433 #define ERROR_DS_MISSING_FSMO_SETTINGS 8434 #define ERROR_DS_UNABLE_TO_SURRENDER_ROLES 8435 #define ERROR_DS_DRA_GENERIC 8436 #define ERROR_DS_DRA_INVALID_PARAMETER 8437 #define ERROR_DS_DRA_BUSY 8438 #define ERROR_DS_DRA_BAD_DN 8439 #define ERROR_DS_DRA_BAD_NC 8440 #define ERROR_DS_DRA_DN_EXISTS 8441 #define ERROR_DS_DRA_INTERNAL_ERROR 8442 #define ERROR_DS_DRA_INCONSISTENT_DIT 8443 #define ERROR_DS_DRA_CONNECTION_FAILED 8444 #define ERROR_DS_DRA_BAD_INSTANCE_TYPE 8445 #define ERROR_DS_DRA_OUT_OF_MEM 8446 #define ERROR_DS_DRA_MAIL_PROBLEM 8447 #define ERROR_DS_DRA_REF_ALREADY_EXISTS 8448 #define ERROR_DS_DRA_REF_NOT_FOUND 8449 #define ERROR_DS_DRA_OBJ_IS_REP_SOURCE 8450 #define ERROR_DS_DRA_DB_ERROR 8451 #define ERROR_DS_DRA_NO_REPLICA 8452 #define ERROR_DS_DRA_ACCESS_DENIED 8453 #define ERROR_DS_DRA_NOT_SUPPORTED 8454 #define ERROR_DS_DRA_RPC_CANCELLED 8455 #define ERROR_DS_DRA_SOURCE_DISABLED 8456 #define ERROR_DS_DRA_SINK_DISABLED 8457 #define ERROR_DS_DRA_NAME_COLLISION 8458 #define ERROR_DS_DRA_SOURCE_REINSTALLED 8459 #define ERROR_DS_DRA_MISSING_PARENT 8460 #define ERROR_DS_DRA_PREEMPTED 8461 #define ERROR_DS_DRA_ABANDON_SYNC 8462 #define ERROR_DS_DRA_SHUTDOWN 8463 #define ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET 8464 #define ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA 8465 #define ERROR_DS_DRA_EXTN_CONNECTION_FAILED 8466 #define ERROR_DS_INSTALL_SCHEMA_MISMATCH 8467 #define ERROR_DS_DUP_LINK_ID 8468 #define ERROR_DS_NAME_ERROR_RESOLVING 8469 #define ERROR_DS_NAME_ERROR_NOT_FOUND 8470 #define ERROR_DS_NAME_ERROR_NOT_UNIQUE 8471 #define ERROR_DS_NAME_ERROR_NO_MAPPING 8472 #define ERROR_DS_NAME_ERROR_DOMAIN_ONLY 8473 #define ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING 8474 #define ERROR_DS_CONSTRUCTED_ATT_MOD 8475 #define ERROR_DS_WRONG_OM_OBJ_CLASS 8476 #define ERROR_DS_DRA_REPL_PENDING 8477 #define ERROR_DS_DS_REQUIRED 8478 #define ERROR_DS_INVALID_LDAP_DISPLAY_NAME 8479 #define ERROR_DS_NON_BASE_SEARCH 8480 #define ERROR_DS_CANT_RETRIEVE_ATTS 8481 #define ERROR_DS_BACKLINK_WITHOUT_LINK 8482 #define ERROR_DS_EPOCH_MISMATCH 8483 #define ERROR_DS_SRC_NAME_MISMATCH 8484 #define ERROR_DS_SRC_AND_DST_NC_IDENTICAL 8485 #define ERROR_DS_DST_NC_MISMATCH 8486 #define ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC 8487 #define ERROR_DS_SRC_GUID_MISMATCH 8488 #define ERROR_DS_CANT_MOVE_DELETED_OBJECT 8489 #define ERROR_DS_PDC_OPERATION_IN_PROGRESS 8490 #define ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD 8491 #define ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION 8492 #define ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS 8493 #define ERROR_DS_NC_MUST_HAVE_NC_PARENT 8494 #define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE 8495 #define ERROR_DS_DST_DOMAIN_NOT_NATIVE 8496 #define ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER 8497 #define ERROR_DS_CANT_MOVE_ACCOUNT_GROUP 8498 #define ERROR_DS_CANT_MOVE_RESOURCE_GROUP 8499 #define ERROR_DS_INVALID_SEARCH_FLAG 8500 #define ERROR_DS_NO_TREE_DELETE_ABOVE_NC 8501 #define ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE 8502 #define ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE 8503 #define ERROR_DS_SAM_INIT_FAILURE 8504 #define ERROR_DS_SENSITIVE_GROUP_VIOLATION 8505 #define ERROR_DS_CANT_MOD_PRIMARYGROUPID 8506 #define ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD 8507 #define ERROR_DS_NONSAFE_SCHEMA_CHANGE 8508 #define ERROR_DS_SCHEMA_UPDATE_DISALLOWED 8509 #define ERROR_DS_CANT_CREATE_UNDER_SCHEMA 8510 #define ERROR_DS_INSTALL_NO_SRC_SCH_VERSION 8511 #define ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE 8512 #define ERROR_DS_INVALID_GROUP_TYPE 8513 #define ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN 8514 #define ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN 8515 #define ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER 8516 #define ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER 8517 #define ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER 8518 #define ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER 8519 #define ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER 8520 #define ERROR_DS_HAVE_PRIMARY_MEMBERS 8521 #define ERROR_DS_STRING_SD_CONVERSION_FAILED 8522 #define ERROR_DS_NAMING_MASTER_GC 8523 #define ERROR_DS_LOOKUP_FAILURE 8524 #define ERROR_DS_COULDNT_UPDATE_SPNS 8525 #define ERROR_DS_CANT_RETRIEVE_SD 8526 #define ERROR_DS_KEY_NOT_UNIQUE 8527 #define ERROR_DS_WRONG_LINKED_ATT_SYNTAX 8528 #define ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD 8529 #define ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY 8530 #define ERROR_DS_CANT_START 8531 #define ERROR_DS_INIT_FAILURE 8532 #define ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION 8533 #define ERROR_DS_SOURCE_DOMAIN_IN_FOREST 8534 #define ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST 8535 #define ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED 8536 #define ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN 8537 #define ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER 8538 #define ERROR_DS_SRC_SID_EXISTS_IN_FOREST 8539 #define ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH 8540 #define ERROR_SAM_INIT_FAILURE 8541 #define ERROR_DS_DRA_SCHEMA_INFO_SHIP 8542 #define ERROR_DS_DRA_SCHEMA_CONFLICT 8543 #define ERROR_DS_DRA_EARLIER_SCHEMA_CONLICT 8544 #define ERROR_DS_DRA_OBJ_NC_MISMATCH 8545 #define ERROR_DS_NC_STILL_HAS_DSAS 8546 #define ERROR_DS_GC_REQUIRED 8547 #define ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY 8548 #define ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS 8549 #define ERROR_DS_CANT_ADD_TO_GC 8550 #define ERROR_DS_NO_CHECKPOINT_WITH_PDC 8551 #define ERROR_DS_SOURCE_AUDITING_NOT_ENABLED 8552 #define ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC 8553 #define ERROR_DS_INVALID_NAME_FOR_SPN 8554 #define ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS 8555 #define ERROR_DS_UNICODEPWD_NOT_IN_QUOTES 8556 #define ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED 8557 #define ERROR_DS_MUST_BE_RUN_ON_DST_DC 8558 #define ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER 8559 #define ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ 8560 #define ERROR_DS_INIT_FAILURE_CONSOLE 8561 #define ERROR_DS_SAM_INIT_FAILURE_CONSOLE 8562 #define ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 8572 #define ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER 8578 #define DNS_ERROR_RCODE_FORMAT_ERROR 9001 #define DNS_ERROR_RCODE_SERVER_FAILURE 9002 #define DNS_ERROR_RCODE_NAME_ERROR 9003 #define DNS_ERROR_RCODE_NOT_IMPLEMENTED 9004 #define DNS_ERROR_RCODE_REFUSED 9005 #define DNS_ERROR_RCODE_YXDOMAIN 9006 #define DNS_ERROR_RCODE_YXRRSET 9007 #define DNS_ERROR_RCODE_NXRRSET 9008 #define DNS_ERROR_RCODE_NOTAUTH 9009 #define DNS_ERROR_RCODE_NOTZONE 9010 #define DNS_ERROR_RCODE_BADSIG 9016 #define DNS_ERROR_RCODE_BADKEY 9017 #define DNS_ERROR_RCODE_BADTIME 9018 #define DNS_INFO_NO_RECORDS 9501 #define DNS_ERROR_BAD_PACKET 9502 #define DNS_ERROR_NO_PACKET 9503 #define DNS_ERROR_RCODE 9504 #define DNS_ERROR_UNSECURE_PACKET 9505 #define DNS_REQUEST_PENDING 9506 #define DNS_ERROR_INVALID_TYPE 9551 #define DNS_ERROR_INVALID_IP_ADDRESS 9552 #define DNS_ERROR_INVALID_PROPERTY 9553 #define DNS_ERROR_TRY_AGAIN_LATER 9554 #define DNS_ERROR_NOT_UNIQUE 9555 #define DNS_ERROR_NON_RFC_NAME 9556 #define DNS_STATUS_FQDN 9557 #define DNS_STATUS_DOTTED_NAME 9558 #define DNS_STATUS_SINGLE_PART_NAME 9559 #define DNS_ERROR_INVALID_NAME_CHAR 9560 #define DNS_ERROR_NUMERIC_NAME 9561 #define DNS_ERROR_ZONE_DOES_NOT_EXIST 9601 #define DNS_ERROR_NO_ZONE_INFO 9602 #define DNS_ERROR_INVALID_ZONE_OPERATION 9603 #define DNS_ERROR_ZONE_CONFIGURATION_ERROR 9604 #define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD 9605 #define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS 9606 #define DNS_ERROR_ZONE_LOCKED 9607 #define DNS_ERROR_ZONE_CREATION_FAILED 9608 #define DNS_ERROR_ZONE_ALREADY_EXISTS 9609 #define DNS_ERROR_AUTOZONE_ALREADY_EXISTS 9610 #define DNS_ERROR_INVALID_ZONE_TYPE 9611 #define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP 9612 #define DNS_ERROR_ZONE_NOT_SECONDARY 9613 #define DNS_ERROR_NEED_SECONDARY_ADDRESSES 9614 #define DNS_ERROR_WINS_INIT_FAILED 9615 #define DNS_ERROR_NEED_WINS_SERVERS 9616 #define DNS_ERROR_NBSTAT_INIT_FAILED 9617 #define DNS_ERROR_SOA_DELETE_INVALID 9618 #define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE 9651 #define DNS_ERROR_INVALID_DATAFILE_NAME 9652 #define DNS_ERROR_DATAFILE_OPEN_FAILURE 9653 #define DNS_ERROR_FILE_WRITEBACK_FAILED 9654 #define DNS_ERROR_DATAFILE_PARSING 9655 #define DNS_ERROR_RECORD_DOES_NOT_EXIST 9701 #define DNS_ERROR_RECORD_FORMAT 9702 #define DNS_ERROR_NODE_CREATION_FAILED 9703 #define DNS_ERROR_UNKNOWN_RECORD_TYPE 9704 #define DNS_ERROR_RECORD_TIMED_OUT 9705 #define DNS_ERROR_NAME_NOT_IN_ZONE 9706 #define DNS_ERROR_CNAME_LOOP 9707 #define DNS_ERROR_NODE_IS_CNAME 9708 #define DNS_ERROR_CNAME_COLLISION 9709 #define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT 9710 #define DNS_ERROR_RECORD_ALREADY_EXISTS 9711 #define DNS_ERROR_SECONDARY_DATA 9712 #define DNS_ERROR_NO_CREATE_CACHE_DATA 9713 #define DNS_ERROR_NAME_DOES_NOT_EXIST 9714 #define DNS_WARNING_PTR_CREATE_FAILED 9715 #define DNS_WARNING_DOMAIN_UNDELETED 9716 #define DNS_ERROR_DS_UNAVAILABLE 9717 #define DNS_ERROR_DS_ZONE_ALREADY_EXISTS 9718 #define DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE 9719 #define DNS_INFO_AXFR_COMPLETE 9751 #define DNS_ERROR_AXFR 9752 #define DNS_INFO_ADDED_LOCAL_WINS 9753 #define DNS_STATUS_CONTINUE_NEEDED 9801 #define DNS_ERROR_NO_TCPIP 9851 #define DNS_ERROR_NO_DNS_SERVERS 9852 /* * Also defined in winsock.h. * * All Windows Sockets error constants are biased by WSABASEERR from * the "normal" */ #define WSABASEERR 10000 /* * Windows Sockets definitions of regular Microsoft C error constants */ #define WSAEINTR (WSABASEERR+4) #define WSAEBADF (WSABASEERR+9) #define WSAEACCES (WSABASEERR+13) #define WSAEFAULT (WSABASEERR+14) #define WSAEINVAL (WSABASEERR+22) #define WSAEMFILE (WSABASEERR+24) /* * Windows Sockets definitions of regular Berkeley error constants */ #define WSAEWOULDBLOCK (WSABASEERR+35) #define WSAEINPROGRESS (WSABASEERR+36) #define WSAEALREADY (WSABASEERR+37) #define WSAENOTSOCK (WSABASEERR+38) #define WSAEDESTADDRREQ (WSABASEERR+39) #define WSAEMSGSIZE (WSABASEERR+40) #define WSAEPROTOTYPE (WSABASEERR+41) #define WSAENOPROTOOPT (WSABASEERR+42) #define WSAEPROTONOSUPPORT (WSABASEERR+43) #define WSAESOCKTNOSUPPORT (WSABASEERR+44) #define WSAEOPNOTSUPP (WSABASEERR+45) #define WSAEPFNOSUPPORT (WSABASEERR+46) #define WSAEAFNOSUPPORT (WSABASEERR+47) #define WSAEADDRINUSE (WSABASEERR+48) #define WSAEADDRNOTAVAIL (WSABASEERR+49) #define WSAENETDOWN (WSABASEERR+50) #define WSAENETUNREACH (WSABASEERR+51) #define WSAENETRESET (WSABASEERR+52) #define WSAECONNABORTED (WSABASEERR+53) #define WSAECONNRESET (WSABASEERR+54) #define WSAENOBUFS (WSABASEERR+55) #define WSAEISCONN (WSABASEERR+56) #define WSAENOTCONN (WSABASEERR+57) #define WSAESHUTDOWN (WSABASEERR+58) #define WSAETOOMANYREFS (WSABASEERR+59) #define WSAETIMEDOUT (WSABASEERR+60) #define WSAECONNREFUSED (WSABASEERR+61) #define WSAELOOP (WSABASEERR+62) #define WSAENAMETOOLONG (WSABASEERR+63) #define WSAEHOSTDOWN (WSABASEERR+64) #define WSAEHOSTUNREACH (WSABASEERR+65) #define WSAENOTEMPTY (WSABASEERR+66) #define WSAEPROCLIM (WSABASEERR+67) #define WSAEUSERS (WSABASEERR+68) #define WSAEDQUOT (WSABASEERR+69) #define WSAESTALE (WSABASEERR+70) #define WSAEREMOTE (WSABASEERR+71) /* * Extended Windows Sockets error constant definitions */ #define WSASYSNOTREADY (WSABASEERR+91) #define WSAVERNOTSUPPORTED (WSABASEERR+92) #define WSANOTINITIALISED (WSABASEERR+93) #define WSAEDISCON (WSABASEERR+101) #define WSAENOMORE (WSABASEERR+102) #define WSAECANCELLED (WSABASEERR+103) #define WSAEINVALIDPROCTABLE (WSABASEERR+104) #define WSAEINVALIDPROVIDER (WSABASEERR+105) #define WSAEPROVIDERFAILEDINIT (WSABASEERR+106) #define WSASYSCALLFAILURE (WSABASEERR+107) #define WSASERVICE_NOT_FOUND (WSABASEERR+108) #define WSATYPE_NOT_FOUND (WSABASEERR+109) #define WSA_E_NO_MORE (WSABASEERR+110) #define WSA_E_CANCELLED (WSABASEERR+111) #define WSAEREFUSED (WSABASEERR+112) #define ERROR_SXS_SECTION_NOT_FOUND 14000 #define ERROR_SXS_CANT_GEN_ACTCTX 14001 #define ERROR_SXS_INVALID_ACTCTXDATA_FORMAT 14002 #define ERROR_SXS_ASSEMBLY_NOT_FOUND 14003 #define ERROR_SXS_MANIFEST_FORMAT_ERROR 14004 #define ERROR_SXS_MANIFEST_PARSE_ERROR 14005 #define ERROR_SXS_ACTIVATION_CONTEXT_DISABLED 14006 #define ERROR_SXS_KEY_NOT_FOUND 14007 #define ERROR_SXS_VERSION_CONFLICT 14008 #define ERROR_SXS_WRONG_SECTION_TYPE 14009 #define ERROR_SXS_THREAD_QUERIES_DISABLED 14010 #define ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET 14011 #define ERROR_SXS_UNKNOWN_ENCODING_GROUP 14012 #define ERROR_SXS_UNKNOWN_ENCODING 14013 #define ERROR_SXS_INVALID_XML_NAMESPACE_URI 14014 #define ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED 14015 #define ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED 14016 #define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE 14017 #define ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE 14018 #define ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE 14019 #define ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT 14020 #define ERROR_SXS_DUPLICATE_DLL_NAME 14021 #define ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME 14022 #define ERROR_SXS_DUPLICATE_CLSID 14023 #define ERROR_SXS_DUPLICATE_IID 14024 #define ERROR_SXS_DUPLICATE_TLBID 14025 #define ERROR_SXS_DUPLICATE_PROGID 14026 #define ERROR_SXS_DUPLICATE_ASSEMBLY_NAME 14027 #define ERROR_SXS_FILE_HASH_MISMATCH 14028 #define ERROR_SXS_POLICY_PARSE_ERROR 14029 #define ERROR_SXS_PROTECTION_RECOVERY_FAILED 14074 #define ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT 14075 #define ERROR_SXS_PROTECTION_CATALOG_NOT_VALID 14076 #define ERROR_SXS_UNTRANSLATABLE_HRESULT 14077 #define ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING 14078 #define ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE 14079 #define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME 14080 #define ERROR_SXS_ASSEMBLY_MISSING 14081 #define ERROR_SXS_CORRUPT_ACTIVATION_STACK 14082 #define ERROR_SXS_CORRUPTION 14083 #define ERROR_SXS_EARLY_DEACTIVATION 14084 #define ERROR_SXS_INVALID_DEACTIVATION 14085 #define ERROR_SXS_MULTIPLE_DEACTIVATION 14086 #define ERROR_SXS_PROCESS_TERMINATION_REQUESTED 14087 #define ERROR_SXS_RELEASE_ACTIVATION_CONTEXT 14088 #define ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY 14089 #define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE 14090 #define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME 14091 #define ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE 14092 #define ERROR_SXS_IDENTITY_PARSE_ERROR 14093 #define ERROR_SXS_IDENTITY_PARSE_ERROR 14093 #define ERROR_MALFORMED_SUBSTITUTION_STRING 14094 #define ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN 14095 #define ERROR_UNMAPPED_SUBSTITUTION_STRING 14096 #define ERROR_SXS_ASSEMBLY_NOT_LOCKED 14097 #define ERROR_SXS_COMPONENT_STORE_CORRUPT 14098 #define ERROR_ADVANCED_INSTALLER_FAILED 14099 #define ERROR_XML_ENCODING_MISMATCH 14100 #define ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT 14101 #define ERROR_SXS_IDENTITIES_DIFFERENT 14102 #define ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT 14103 #define ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY 14104 #define ERROR_SXS_MANIFEST_TOO_BIG 14105 #define ERROR_SXS_SETTING_NOT_REGISTERED 14106 #define ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE 14107 #define ERROR_SMI_PRIMITIVE_INSTALLER_FAILED 14108 #define ERROR_GENERIC_COMMAND_FAILED 14109 #define ERROR_SXS_FILE_HASH_MISSING 14110 #define ERROR_MUI_FILE_NOT_FOUND 15100 #define ERROR_MUI_INVALID_FILE 15101 #define ERROR_MUI_INVALID_RC_CONFIG 15102 #define ERROR_MUI_INVALID_LOCALE_NAME 15103 #define ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME 15104 #define ERROR_MUI_FILE_NOT_LOADED 15105 #define ERROR_RESOURCE_ENUM_USER_STOP 15106 #define ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED 15107 #define ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME 15108 #define ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE 15110 #define ERROR_MRM_INVALID_PRICONFIG 15111 #define ERROR_MRM_INVALID_FILE_TYPE 15112 #define ERROR_MRM_UNKNOWN_QUALIFIER 15113 #define ERROR_MRM_INVALID_QUALIFIER_VALUE 15114 #define ERROR_MRM_NO_CANDIDATE 15115 #define ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE 15116 #define ERROR_MRM_RESOURCE_TYPE_MISMATCH 15117 #define ERROR_MRM_DUPLICATE_MAP_NAME 15118 #define ERROR_MRM_DUPLICATE_ENTRY 15119 #define ERROR_MRM_INVALID_RESOURCE_IDENTIFIER 15120 #define ERROR_MRM_FILEPATH_TOO_LONG 15121 #define ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE 15122 #define ERROR_MRM_INVALID_PRI_FILE 15126 #define ERROR_MRM_NAMED_RESOURCE_NOT_FOUND 15127 #define ERROR_MRM_MAP_NOT_FOUND 15135 #define ERROR_MRM_UNSUPPORTED_PROFILE_TYPE 15136 #define ERROR_MRM_INVALID_QUALIFIER_OPERATOR 15137 #define ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE 15138 #define ERROR_MRM_AUTOMERGE_ENABLED 15139 #define ERROR_MRM_TOO_MANY_RESOURCES 15140 #define ERROR_MCA_INVALID_CAPABILITIES_STRING 15200 #define ERROR_MCA_INVALID_VCP_VERSION 15201 #define ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION 15202 #define ERROR_MCA_MCCS_VERSION_MISMATCH 15203 #define ERROR_MCA_UNSUPPORTED_MCCS_VERSION 15204 #define ERROR_MCA_INTERNAL_ERROR 15205 #define ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED 15206 #define ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE 15207 #define ERROR_AMBIGUOUS_SYSTEM_DEVICE 15250 #define ERROR_SYSTEM_DEVICE_NOT_FOUND 15299 #define ERROR_HASH_NOT_SUPPORTED 15300 #define ERROR_HASH_NOT_PRESENT 15301 #define ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED 15321 #define ERROR_GPIO_CLIENT_INFORMATION_INVALID 15322 #define ERROR_GPIO_VERSION_NOT_SUPPORTED 15323 #define ERROR_GPIO_INVALID_REGISTRATION_PACKET 15324 #define ERROR_GPIO_OPERATION_DENIED 15325 #define ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE 15326 #define ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED 15327 #define ERROR_CANNOT_SWITCH_RUNLEVEL 15400 #define ERROR_INVALID_RUNLEVEL_SETTING 15401 #define ERROR_RUNLEVEL_SWITCH_TIMEOUT 15402 #define ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT 15403 #define ERROR_RUNLEVEL_SWITCH_IN_PROGRESS 15404 #define ERROR_SERVICES_FAILED_AUTOSTART 15405 #define ERROR_COM_TASK_STOP_PENDING 15501 #define ERROR_INSTALL_OPEN_PACKAGE_FAILED 15600 #define ERROR_INSTALL_PACKAGE_NOT_FOUND 15601 #define ERROR_INSTALL_INVALID_PACKAGE 15602 #define ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED 15603 #define ERROR_INSTALL_OUT_OF_DISK_SPACE 15604 #define ERROR_INSTALL_NETWORK_FAILURE 15605 #define ERROR_INSTALL_REGISTRATION_FAILURE 15606 #define ERROR_INSTALL_DEREGISTRATION_FAILURE 15607 #define ERROR_INSTALL_CANCEL 15608 #define ERROR_INSTALL_FAILED 15609 #define ERROR_REMOVE_FAILED 15610 #define ERROR_PACKAGE_ALREADY_EXISTS 15611 #define ERROR_NEEDS_REMEDIATION 15612 #define ERROR_INSTALL_PREREQUISITE_FAILED 15613 #define ERROR_PACKAGE_REPOSITORY_CORRUPTED 15614 #define ERROR_INSTALL_POLICY_FAILURE 15615 #define ERROR_PACKAGE_UPDATING 15616 #define ERROR_DEPLOYMENT_BLOCKED_BY_POLICY 15617 #define ERROR_PACKAGES_IN_USE 15618 #define ERROR_RECOVERY_FILE_CORRUPT 15619 #define ERROR_INVALID_STAGED_SIGNATURE 15620 #define ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED 15621 #define ERROR_INSTALL_PACKAGE_DOWNGRADE 15622 #define ERROR_SYSTEM_NEEDS_REMEDIATION 15623 #define ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN 15624 #define ERROR_RESILIENCY_FILE_CORRUPT 15625 #define ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING 15626 #define APPMODEL_ERROR_NO_PACKAGE 15700 #define APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT 15701 #define APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT 15702 #define APPMODEL_ERROR_NO_APPLICATION 15703 /* HRESULT values for OLE, SHELL and other Interface stuff */ /* the codes 4000-40ff are reserved for OLE */ #undef NOERROR /* arpa/nameser_compat.h defines this */ #define E_NOT_SUFFICIENT_BUFFER HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) #define E_NOT_VALID_STATE HRESULT_FROM_WIN32(ERROR_INVALID_STATE) #ifdef RC_INVOKED #define _HRESULT_TYPEDEF_(x) (x) #else #define _HRESULT_TYPEDEF_(x) ((HRESULT)x) #endif #define NOERROR _HRESULT_TYPEDEF_(0) #define S_OK _HRESULT_TYPEDEF_(0) #define SEC_E_OK _HRESULT_TYPEDEF_(0) #define S_FALSE _HRESULT_TYPEDEF_(1) #define E_PENDING _HRESULT_TYPEDEF_(0x8000000A) #define E_BOUNDS _HRESULT_TYPEDEF_(0x8000000B) #define E_NOTIMPL _HRESULT_TYPEDEF_(0x80004001) #define E_NOINTERFACE _HRESULT_TYPEDEF_(0x80004002) #define E_POINTER _HRESULT_TYPEDEF_(0x80004003) #define E_ABORT _HRESULT_TYPEDEF_(0x80004004) #define E_FAIL _HRESULT_TYPEDEF_(0x80004005) #define CO_E_INIT_TLS _HRESULT_TYPEDEF_(0x80004006) #define CO_E_INIT_SHARED_ALLOCATOR _HRESULT_TYPEDEF_(0x80004007) #define CO_E_INIT_MEMORY_ALLOCATOR _HRESULT_TYPEDEF_(0x80004008) #define CO_E_INIT_CLASS_CACHE _HRESULT_TYPEDEF_(0x80004009) #define CO_E_INIT_RPC_CHANNEL _HRESULT_TYPEDEF_(0x8000400A) #define CO_E_INIT_TLS_SET_CHANNEL_CONTROL _HRESULT_TYPEDEF_(0x8000400B) #define CO_E_INIT_TLS_CHANNEL_CONTROL _HRESULT_TYPEDEF_(0x8000400C) #define CO_E_INIT_UNACCEPTED_USER_ALLOCATOR _HRESULT_TYPEDEF_(0x8000400D) #define CO_E_INIT_SCM_MUTEX_EXISTS _HRESULT_TYPEDEF_(0x8000400E) #define CO_E_INIT_SCM_FILE_MAPPING_EXISTS _HRESULT_TYPEDEF_(0x8000400F) #define CO_E_INIT_SCM_MAP_VIEW_OF_FILE _HRESULT_TYPEDEF_(0x80004010) #define CO_E_INIT_SCM_EXEC_FAILURE _HRESULT_TYPEDEF_(0x80004011) #define CO_E_INIT_ONLY_SINGLE_THREADED _HRESULT_TYPEDEF_(0x80004012) #define CO_E_CANT_REMOTE _HRESULT_TYPEDEF_(0x80004013) #define CO_E_BAD_SERVER_NAME _HRESULT_TYPEDEF_(0x80004014) #define CO_E_WRONG_SERVER_IDENTITY _HRESULT_TYPEDEF_(0x80004015) #define CO_E_OLE1DDE_DISABLED _HRESULT_TYPEDEF_(0x80004016) #define CO_E_RUNAS_SYNTAX _HRESULT_TYPEDEF_(0x80004017) #define CO_E_CREATEPROCESS_FAILURE _HRESULT_TYPEDEF_(0x80004018) #define CO_E_RUNAS_CREATEPROCESS_FAILURE _HRESULT_TYPEDEF_(0x80004019) #define CO_E_RUNAS_LOGON_FAILURE _HRESULT_TYPEDEF_(0x8000401A) #define CO_E_LAUNCH_PERMISSION_DENIED _HRESULT_TYPEDEF_(0x8000401B) #define CO_E_START_SERVICE_FAILURE _HRESULT_TYPEDEF_(0x8000401C) #define CO_E_REMOTE_COMMUNICATION_FAILURE _HRESULT_TYPEDEF_(0x8000401D) #define CO_E_SERVER_START_TIMEOUT _HRESULT_TYPEDEF_(0x8000401E) #define CO_E_CLSREG_INCONSISTENT _HRESULT_TYPEDEF_(0x8000401F) #define CO_E_IIDREG_INCONSISTENT _HRESULT_TYPEDEF_(0x80004020) #define CO_E_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x80004021) #define CO_E_RELOAD_DLL _HRESULT_TYPEDEF_(0x80004022) #define CO_E_MSI_ERROR _HRESULT_TYPEDEF_(0x80004023) #define CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT _HRESULT_TYPEDEF_(0x80004024) #define CO_E_SERVER_PAUSED _HRESULT_TYPEDEF_(0x80004025) #define CO_E_SERVER_NOT_PAUSED _HRESULT_TYPEDEF_(0x80004026) #define CO_E_CLASS_DISABLED _HRESULT_TYPEDEF_(0x80004027) #define CO_E_CLRNOTAVAILABLE _HRESULT_TYPEDEF_(0x80004028) #define CO_E_ASYNC_WORK_REJECTED _HRESULT_TYPEDEF_(0x80004029) #define CO_E_SERVER_INIT_TIMEOUT _HRESULT_TYPEDEF_(0x8000402A) #define CO_E_NO_SECCTX_IN_ACTIVATE _HRESULT_TYPEDEF_(0x8000402B) #define CO_E_TRACKER_CONFIG _HRESULT_TYPEDEF_(0x80004030) #define CO_E_THREADPOOL_CONFIG _HRESULT_TYPEDEF_(0x80004031) #define CO_E_SXS_CONFIG _HRESULT_TYPEDEF_(0x80004032) #define CO_E_MALFORMED_SPN _HRESULT_TYPEDEF_(0x80004033) #define E_UNEXPECTED _HRESULT_TYPEDEF_(0x8000FFFF) #define RPC_E_CALL_REJECTED _HRESULT_TYPEDEF_(0x80010001) #define RPC_E_CALL_CANCELED _HRESULT_TYPEDEF_(0x80010002) #define RPC_E_CANTPOST_INSENDCALL _HRESULT_TYPEDEF_(0x80010003) #define RPC_E_CANTCALLOUT_INASYNCCALL _HRESULT_TYPEDEF_(0x80010004) #define RPC_E_CANTCALLOUT_INEXTERNALCALL _HRESULT_TYPEDEF_(0x80010005) #define RPC_E_CONNECTION_TERMINATED _HRESULT_TYPEDEF_(0x80010006) #define RPC_E_SERVER_DIED _HRESULT_TYPEDEF_(0x80010007) #define RPC_E_CLIENT_DIED _HRESULT_TYPEDEF_(0x80010008) #define RPC_E_INVALID_DATAPACKET _HRESULT_TYPEDEF_(0x80010009) #define RPC_E_CANTTRANSMIT_CALL _HRESULT_TYPEDEF_(0x8001000A) #define RPC_E_CLIENT_CANTMARSHAL_DATA _HRESULT_TYPEDEF_(0x8001000B) #define RPC_E_CLIENT_CANTUNMARSHAL_DATA _HRESULT_TYPEDEF_(0x8001000C) #define RPC_E_SERVER_CANTMARSHAL_DATA _HRESULT_TYPEDEF_(0x8001000D) #define RPC_E_SERVER_CANTUNMARSHAL_DATA _HRESULT_TYPEDEF_(0x8001000E) #define RPC_E_INVALID_DATA _HRESULT_TYPEDEF_(0x8001000F) #define RPC_E_INVALID_PARAMETER _HRESULT_TYPEDEF_(0x80010010) #define RPC_E_CANTCALLOUT_AGAIN _HRESULT_TYPEDEF_(0x80010011) #define RPC_E_SERVER_DIED_DNE _HRESULT_TYPEDEF_(0x80010012) #define RPC_E_SYS_CALL_FAILED _HRESULT_TYPEDEF_(0x80010100) #define RPC_E_OUT_OF_RESOURCES _HRESULT_TYPEDEF_(0x80010101) #define RPC_E_ATTEMPTED_MULTITHREAD _HRESULT_TYPEDEF_(0x80010102) #define RPC_E_NOT_REGISTERED _HRESULT_TYPEDEF_(0x80010103) #define RPC_E_FAULT _HRESULT_TYPEDEF_(0x80010104) #define RPC_E_SERVERFAULT _HRESULT_TYPEDEF_(0x80010105) #define RPC_E_CHANGED_MODE _HRESULT_TYPEDEF_(0x80010106) #define RPC_E_INVALIDMETHOD _HRESULT_TYPEDEF_(0x80010107) #define RPC_E_DISCONNECTED _HRESULT_TYPEDEF_(0x80010108) #define RPC_E_RETRY _HRESULT_TYPEDEF_(0x80010109) #define RPC_E_SERVERCALL_RETRYLATER _HRESULT_TYPEDEF_(0x8001010A) #define RPC_E_SERVERCALL_REJECTED _HRESULT_TYPEDEF_(0x8001010B) #define RPC_E_INVALID_CALLDATA _HRESULT_TYPEDEF_(0x8001010C) #define RPC_E_CANTCALLOUT_ININPUTSYNCCALL _HRESULT_TYPEDEF_(0x8001010D) #define RPC_E_WRONG_THREAD _HRESULT_TYPEDEF_(0x8001010E) #define RPC_E_THREAD_NOT_INIT _HRESULT_TYPEDEF_(0x8001010F) #define RPC_E_VERSION_MISMATCH _HRESULT_TYPEDEF_(0x80010110) #define RPC_E_INVALID_HEADER _HRESULT_TYPEDEF_(0x80010111) #define RPC_E_INVALID_EXTENSION _HRESULT_TYPEDEF_(0x80010112) #define RPC_E_INVALID_IPID _HRESULT_TYPEDEF_(0x80010113) #define RPC_E_INVALID_OBJECT _HRESULT_TYPEDEF_(0x80010114) #define RPC_S_CALLPENDING _HRESULT_TYPEDEF_(0x80010115) #define RPC_S_WAITONTIMER _HRESULT_TYPEDEF_(0x80010116) #define RPC_E_CALL_COMPLETE _HRESULT_TYPEDEF_(0x80010117) #define RPC_E_UNSECURE_CALL _HRESULT_TYPEDEF_(0x80010118) #define RPC_E_TOO_LATE _HRESULT_TYPEDEF_(0x80010119) #define RPC_E_NO_GOOD_SECURITY_PACKAGES _HRESULT_TYPEDEF_(0x8001011A) #define RPC_E_ACCESS_DENIED _HRESULT_TYPEDEF_(0x8001011B) #define RPC_E_REMOTE_DISABLED _HRESULT_TYPEDEF_(0x8001011C) #define RPC_E_INVALID_OBJREF _HRESULT_TYPEDEF_(0x8001011D) #define RPC_E_NO_CONTEXT _HRESULT_TYPEDEF_(0x8001011E) #define RPC_E_TIMEOUT _HRESULT_TYPEDEF_(0x8001011F) #define RPC_E_NO_SYNC _HRESULT_TYPEDEF_(0x80010120) #define RPC_E_UNEXPECTED _HRESULT_TYPEDEF_(0x8001FFFF) #define DISP_E_UNKNOWNINTERFACE _HRESULT_TYPEDEF_(0x80020001) #define DISP_E_MEMBERNOTFOUND _HRESULT_TYPEDEF_(0x80020003) #define DISP_E_PARAMNOTFOUND _HRESULT_TYPEDEF_(0x80020004) #define DISP_E_TYPEMISMATCH _HRESULT_TYPEDEF_(0x80020005) #define DISP_E_UNKNOWNNAME _HRESULT_TYPEDEF_(0x80020006) #define DISP_E_NONAMEDARGS _HRESULT_TYPEDEF_(0x80020007) #define DISP_E_BADVARTYPE _HRESULT_TYPEDEF_(0x80020008) #define DISP_E_EXCEPTION _HRESULT_TYPEDEF_(0x80020009) #define DISP_E_OVERFLOW _HRESULT_TYPEDEF_(0x8002000A) #define DISP_E_BADINDEX _HRESULT_TYPEDEF_(0x8002000B) #define DISP_E_UNKNOWNLCID _HRESULT_TYPEDEF_(0x8002000C) #define DISP_E_ARRAYISLOCKED _HRESULT_TYPEDEF_(0x8002000D) #define DISP_E_BADPARAMCOUNT _HRESULT_TYPEDEF_(0x8002000E) #define DISP_E_PARAMNOTOPTIONAL _HRESULT_TYPEDEF_(0x8002000F) #define DISP_E_BADCALLEE _HRESULT_TYPEDEF_(0x80020010) #define DISP_E_NOTACOLLECTION _HRESULT_TYPEDEF_(0x80020011) #define DISP_E_DIVBYZERO _HRESULT_TYPEDEF_(0x80020012) #define TYPE_E_BUFFERTOOSMALL _HRESULT_TYPEDEF_(0x80028016) #define TYPE_E_FIELDNOTFOUND _HRESULT_TYPEDEF_(0x80028017) #define TYPE_E_INVDATAREAD _HRESULT_TYPEDEF_(0x80028018) #define TYPE_E_UNSUPFORMAT _HRESULT_TYPEDEF_(0x80028019) #define TYPE_E_REGISTRYACCESS _HRESULT_TYPEDEF_(0x8002801C) #define TYPE_E_LIBNOTREGISTERED _HRESULT_TYPEDEF_(0x8002801D) #define TYPE_E_UNDEFINEDTYPE _HRESULT_TYPEDEF_(0x80028027) #define TYPE_E_QUALIFIEDNAMEDISALLOWED _HRESULT_TYPEDEF_(0x80028028) #define TYPE_E_INVALIDSTATE _HRESULT_TYPEDEF_(0x80028029) #define TYPE_E_WRONGTYPEKIND _HRESULT_TYPEDEF_(0x8002802A) #define TYPE_E_ELEMENTNOTFOUND _HRESULT_TYPEDEF_(0x8002802B) #define TYPE_E_AMBIGUOUSNAME _HRESULT_TYPEDEF_(0x8002802C) #define TYPE_E_NAMECONFLICT _HRESULT_TYPEDEF_(0x8002802D) #define TYPE_E_UNKNOWNLCID _HRESULT_TYPEDEF_(0x8002802E) #define TYPE_E_DLLFUNCTIONNOTFOUND _HRESULT_TYPEDEF_(0x8002802F) #define TYPE_E_BADMODULEKIND _HRESULT_TYPEDEF_(0x800288BD) #define TYPE_E_SIZETOOBIG _HRESULT_TYPEDEF_(0x800288C5) #define TYPE_E_DUPLICATEID _HRESULT_TYPEDEF_(0x800288C6) #define TYPE_E_INVALIDID _HRESULT_TYPEDEF_(0x800288CF) #define TYPE_E_TYPEMISMATCH _HRESULT_TYPEDEF_(0x80028CA0) #define TYPE_E_OUTOFBOUNDS _HRESULT_TYPEDEF_(0x80028CA1) #define TYPE_E_IOERROR _HRESULT_TYPEDEF_(0x80028CA2) #define TYPE_E_CANTCREATETMPFILE _HRESULT_TYPEDEF_(0x80028CA3) #define TYPE_E_CANTLOADLIBRARY _HRESULT_TYPEDEF_(0x80029C4A) #define TYPE_E_INCONSISTENTPROPFUNCS _HRESULT_TYPEDEF_(0x80029C83) #define TYPE_E_CIRCULARTYPE _HRESULT_TYPEDEF_(0x80029C84) #define STG_S_CONVERTED _HRESULT_TYPEDEF_(0x00030200) #define STG_S_BLOCK _HRESULT_TYPEDEF_(0x00030201) #define STG_S_RETRYNOW _HRESULT_TYPEDEF_(0x00030202) #define STG_S_MONITORING _HRESULT_TYPEDEF_(0x00030203) #define STG_S_MULTIPLEOPENS _HRESULT_TYPEDEF_(0x00030204) #define STG_S_CONSOLIDATIONFAILED _HRESULT_TYPEDEF_(0x00030205) #define STG_S_CANNOTCONSOLIDATE _HRESULT_TYPEDEF_(0x00030206) #define STG_E_INVALIDFUNCTION _HRESULT_TYPEDEF_(0x80030001) #define STG_E_FILENOTFOUND _HRESULT_TYPEDEF_(0x80030002) #define STG_E_PATHNOTFOUND _HRESULT_TYPEDEF_(0x80030003) #define STG_E_TOOMANYOPENFILES _HRESULT_TYPEDEF_(0x80030004) #define STG_E_ACCESSDENIED _HRESULT_TYPEDEF_(0x80030005) #define STG_E_INVALIDHANDLE _HRESULT_TYPEDEF_(0x80030006) #define STG_E_INSUFFICIENTMEMORY _HRESULT_TYPEDEF_(0x80030008) #define STG_E_INVALIDPOINTER _HRESULT_TYPEDEF_(0x80030009) #define STG_E_NOMOREFILES _HRESULT_TYPEDEF_(0x80030012) #define STG_E_DISKISWRITEPROTECTED _HRESULT_TYPEDEF_(0x80030013) #define STG_E_SEEKERROR _HRESULT_TYPEDEF_(0x80030019) #define STG_E_WRITEFAULT _HRESULT_TYPEDEF_(0x8003001D) #define STG_E_READFAULT _HRESULT_TYPEDEF_(0x8003001E) #define STG_E_SHAREVIOLATION _HRESULT_TYPEDEF_(0x80030020) #define STG_E_LOCKVIOLATION _HRESULT_TYPEDEF_(0x80030021) #define STG_E_FILEALREADYEXISTS _HRESULT_TYPEDEF_(0x80030050) #define STG_E_INVALIDPARAMETER _HRESULT_TYPEDEF_(0x80030057) #define STG_E_MEDIUMFULL _HRESULT_TYPEDEF_(0x80030070) #define STG_E_ABNORMALAPIEXIT _HRESULT_TYPEDEF_(0x800300FA) #define STG_E_INVALIDHEADER _HRESULT_TYPEDEF_(0x800300FB) #define STG_E_INVALIDNAME _HRESULT_TYPEDEF_(0x800300FC) #define STG_E_UNKNOWN _HRESULT_TYPEDEF_(0x800300FD) #define STG_E_UNIMPLEMENTEDFUNCTION _HRESULT_TYPEDEF_(0x800300FE) #define STG_E_INVALIDFLAG _HRESULT_TYPEDEF_(0x800300FF) #define STG_E_INUSE _HRESULT_TYPEDEF_(0x80030100) #define STG_E_NOTCURRENT _HRESULT_TYPEDEF_(0x80030101) #define STG_E_REVERTED _HRESULT_TYPEDEF_(0x80030102) #define STG_E_CANTSAVE _HRESULT_TYPEDEF_(0x80030103) #define STG_E_OLDFORMAT _HRESULT_TYPEDEF_(0x80030104) #define STG_E_OLDDLL _HRESULT_TYPEDEF_(0x80030105) #define STG_E_SHAREREQUIRED _HRESULT_TYPEDEF_(0x80030106) #define STG_E_NOTFILEBASEDSTORAGE _HRESULT_TYPEDEF_(0x80030107) #define STG_E_EXTANTMARSHALLINGS _HRESULT_TYPEDEF_(0x80030108) #define STG_E_DOCFILECORRUPT _HRESULT_TYPEDEF_(0x80030109) #define STG_E_STATUS_COPY_PROTECTION_FAILURE _HRESULT_TYPEDEF_(0x80030305) #define STG_E_CSS_AUTHENTICATION_FAILURE _HRESULT_TYPEDEF_(0x80030306) #define STG_E_CSS_KEY_NOT_PRESENT _HRESULT_TYPEDEF_(0x80030307) #define STG_E_CSS_KEY_NOT_ESTABLISHED _HRESULT_TYPEDEF_(0x80030308) #define STG_E_CSS_SCRAMBLED_SECTOR _HRESULT_TYPEDEF_(0x80030309) #define STG_E_CSS_REGION_MISMATCH _HRESULT_TYPEDEF_(0x8003030A) #define STG_E_RESETS_EXHAUSTED _HRESULT_TYPEDEF_(0x8003030B) #define OLE_S_FIRST _HRESULT_TYPEDEF_(0x00040000) #define OLE_S_USEREG _HRESULT_TYPEDEF_(0x00040000) #define OLE_S_STATIC _HRESULT_TYPEDEF_(0x00040001) #define OLE_S_MAC_CLIPFORMAT _HRESULT_TYPEDEF_(0x00040002) #define OLE_S_LAST _HRESULT_TYPEDEF_(0x000400FF) #define OLE_E_FIRST _HRESULT_TYPEDEF_(0x80040000) #define OLE_E_OLEVERB _HRESULT_TYPEDEF_(0x80040000) #define OLE_E_ADVF _HRESULT_TYPEDEF_(0x80040001) #define OLE_E_ENUM_NOMORE _HRESULT_TYPEDEF_(0x80040002) #define OLE_E_ADVISENOTSUPPORTED _HRESULT_TYPEDEF_(0x80040003) #define OLE_E_NOCONNECTION _HRESULT_TYPEDEF_(0x80040004) #define OLE_E_NOTRUNNING _HRESULT_TYPEDEF_(0x80040005) #define OLE_E_NOCACHE _HRESULT_TYPEDEF_(0x80040006) #define OLE_E_BLANK _HRESULT_TYPEDEF_(0x80040007) #define OLE_E_CLASSDIFF _HRESULT_TYPEDEF_(0x80040008) #define OLE_E_CANT_GETMONIKER _HRESULT_TYPEDEF_(0x80040009) #define OLE_E_CANT_BINDTOSOURCE _HRESULT_TYPEDEF_(0x8004000A) #define OLE_E_STATIC _HRESULT_TYPEDEF_(0x8004000B) #define OLE_E_PROMPTSAVECANCELLED _HRESULT_TYPEDEF_(0x8004000C) #define OLE_E_INVALIDRECT _HRESULT_TYPEDEF_(0x8004000D) #define OLE_E_WRONGCOMPOBJ _HRESULT_TYPEDEF_(0x8004000E) #define OLE_E_INVALIDHWND _HRESULT_TYPEDEF_(0x8004000F) #define OLE_E_NOT_INPLACEACTIVE _HRESULT_TYPEDEF_(0x80040010) #define OLE_E_CANTCONVERT _HRESULT_TYPEDEF_(0x80040011) #define OLE_E_NOSTORAGE _HRESULT_TYPEDEF_(0x80040012) #define DV_E_FORMATETC _HRESULT_TYPEDEF_(0x80040064) #define DV_E_DVTARGETDEVICE _HRESULT_TYPEDEF_(0x80040065) #define DV_E_STGMEDIUM _HRESULT_TYPEDEF_(0x80040066) #define DV_E_STATDATA _HRESULT_TYPEDEF_(0x80040067) #define DV_E_LINDEX _HRESULT_TYPEDEF_(0x80040068) #define DV_E_TYMED _HRESULT_TYPEDEF_(0x80040069) #define DV_E_CLIPFORMAT _HRESULT_TYPEDEF_(0x8004006A) #define DV_E_DVASPECT _HRESULT_TYPEDEF_(0x8004006B) #define DV_E_DVTARGETDEVICE_SIZE _HRESULT_TYPEDEF_(0x8004006C) #define DV_E_NOIVIEWOBJECT _HRESULT_TYPEDEF_(0x8004006D) #define OLE_E_LAST _HRESULT_TYPEDEF_(0x800400FF) #define DRAGDROP_S_FIRST _HRESULT_TYPEDEF_(0x00040100) #define DRAGDROP_S_DROP _HRESULT_TYPEDEF_(0x00040100) #define DRAGDROP_S_CANCEL _HRESULT_TYPEDEF_(0x00040101) #define DRAGDROP_S_USEDEFAULTCURSORS _HRESULT_TYPEDEF_(0x00040102) #define DRAGDROP_S_LAST _HRESULT_TYPEDEF_(0x0004010F) #define DRAGDROP_E_FIRST _HRESULT_TYPEDEF_(0x80040100) #define DRAGDROP_E_NOTREGISTERED _HRESULT_TYPEDEF_(0x80040100) #define DRAGDROP_E_ALREADYREGISTERED _HRESULT_TYPEDEF_(0x80040101) #define DRAGDROP_E_INVALIDHWND _HRESULT_TYPEDEF_(0x80040102) #define DRAGDROP_E_LAST _HRESULT_TYPEDEF_(0x8004010F) #define CLASSFACTORY_S_FIRST _HRESULT_TYPEDEF_(0x00040110) #define CLASSFACTORY_S_LAST _HRESULT_TYPEDEF_(0x0004011F) #define CLASSFACTORY_E_FIRST _HRESULT_TYPEDEF_(0x80040110) #define CLASS_E_NOAGGREGATION _HRESULT_TYPEDEF_(0x80040110) #define CLASS_E_CLASSNOTAVAILABLE _HRESULT_TYPEDEF_(0x80040111) #define CLASS_E_NOTLICENSED _HRESULT_TYPEDEF_(0x80040112) #define CLASSFACTORY_E_LAST _HRESULT_TYPEDEF_(0x8004011F) #define MARSHAL_S_FIRST _HRESULT_TYPEDEF_(0x00040120) #define MARSHAL_S_LAST _HRESULT_TYPEDEF_(0x0004012F) #define MARSHAL_E_FIRST _HRESULT_TYPEDEF_(0x80040120) #define MARSHAL_E_LAST _HRESULT_TYPEDEF_(0x8004012F) #define DATA_S_FIRST _HRESULT_TYPEDEF_(0x00040130) #define DATA_S_SAMEFORMATETC _HRESULT_TYPEDEF_(0x00040130) #define DATA_S_LAST _HRESULT_TYPEDEF_(0x0004013F) #define DATA_E_FIRST _HRESULT_TYPEDEF_(0x80040130) #define DATA_E_LAST _HRESULT_TYPEDEF_(0x8004013F) #define VIEW_S_FIRST _HRESULT_TYPEDEF_(0x00040140) #define VIEW_S_ALREADY_FROZEN _HRESULT_TYPEDEF_(0x00040140) #define VIEW_S_LAST _HRESULT_TYPEDEF_(0x0004014F) #define VIEW_E_FIRST _HRESULT_TYPEDEF_(0x80040140) #define VIEW_E_DRAW _HRESULT_TYPEDEF_(0x80040140) #define VIEW_E_LAST _HRESULT_TYPEDEF_(0x8004014F) #define REGDB_S_FIRST _HRESULT_TYPEDEF_(0x00040150) #define REGDB_S_LAST _HRESULT_TYPEDEF_(0x0004015F) #define REGDB_E_FIRST _HRESULT_TYPEDEF_(0x80040150) #define REGDB_E_READREGDB _HRESULT_TYPEDEF_(0x80040150) #define REGDB_E_WRITEREGDB _HRESULT_TYPEDEF_(0x80040151) #define REGDB_E_KEYMISSING _HRESULT_TYPEDEF_(0x80040152) #define REGDB_E_INVALIDVALUE _HRESULT_TYPEDEF_(0x80040153) #define REGDB_E_CLASSNOTREG _HRESULT_TYPEDEF_(0x80040154) #define REGDB_E_IIDNOTREG _HRESULT_TYPEDEF_(0x80040155) #define REGDB_E_LAST _HRESULT_TYPEDEF_(0x8004015F) #define CAT_E_FIRST _HRESULT_TYPEDEF_(0x80040160) #define CAT_E_CATIDNOEXIST _HRESULT_TYPEDEF_(0x80040160) #define CAT_E_NODESCRIPTION _HRESULT_TYPEDEF_(0x80040161) #define CAT_E_LAST _HRESULT_TYPEDEF_(0x80040161) #define CACHE_S_FIRST _HRESULT_TYPEDEF_(0x00040170) #define CACHE_S_FORMATETC_NOTSUPPORTED _HRESULT_TYPEDEF_(0x00040170) #define CACHE_S_SAMECACHE _HRESULT_TYPEDEF_(0x00040171) #define CACHE_S_SOMECACHES_NOTUPDATED _HRESULT_TYPEDEF_(0x00040172) #define CACHE_S_LAST _HRESULT_TYPEDEF_(0x0004017F) #define CACHE_E_FIRST _HRESULT_TYPEDEF_(0x80040170) #define CACHE_E_NOCACHE_UPDATED _HRESULT_TYPEDEF_(0x80040170) #define CACHE_E_LAST _HRESULT_TYPEDEF_(0x8004017F) #define OLEOBJ_S_FIRST _HRESULT_TYPEDEF_(0x00040180) #define OLEOBJ_S_INVALIDVERB _HRESULT_TYPEDEF_(0x00040180) #define OLEOBJ_S_CANNOT_DOVERB_NOW _HRESULT_TYPEDEF_(0x00040181) #define OLEOBJ_S_INVALIDHWND _HRESULT_TYPEDEF_(0x00040182) #define OLEOBJ_S_LAST _HRESULT_TYPEDEF_(0x0004018F) #define OLEOBJ_E_FIRST _HRESULT_TYPEDEF_(0x80040180) #define OLEOBJ_E_NOVERBS _HRESULT_TYPEDEF_(0x80040180) #define OLEOBJ_E_INVALIDVERB _HRESULT_TYPEDEF_(0x80040181) #define OLEOBJ_E_LAST _HRESULT_TYPEDEF_(0x8004018F) #define CLIENTSITE_S_FIRST _HRESULT_TYPEDEF_(0x00040190) #define CLIENTSITE_S_LAST _HRESULT_TYPEDEF_(0x0004019F) #define CLIENTSITE_E_FIRST _HRESULT_TYPEDEF_(0x80040190) #define CLIENTSITE_E_LAST _HRESULT_TYPEDEF_(0x8004019F) #define INPLACE_S_FIRST _HRESULT_TYPEDEF_(0x000401A0) #define INPLACE_S_TRUNCATED _HRESULT_TYPEDEF_(0x000401A0) #define INPLACE_S_LAST _HRESULT_TYPEDEF_(0x000401AF) #define INPLACE_E_FIRST _HRESULT_TYPEDEF_(0x800401A0) #define INPLACE_E_NOTUNDOABLE _HRESULT_TYPEDEF_(0x800401A0) #define INPLACE_E_NOTOOLSPACE _HRESULT_TYPEDEF_(0x800401A1) #define INPLACE_E_LAST _HRESULT_TYPEDEF_(0x800401AF) #define ENUM_S_FIRST _HRESULT_TYPEDEF_(0x000401B0) #define ENUM_S_LAST _HRESULT_TYPEDEF_(0x000401BF) #define ENUM_E_FIRST _HRESULT_TYPEDEF_(0x800401B0) #define ENUM_E_LAST _HRESULT_TYPEDEF_(0x800401BF) #define CONVERT10_S_FIRST _HRESULT_TYPEDEF_(0x000401C0) #define CONVERT10_S_NO_PRESENTATION _HRESULT_TYPEDEF_(0x000401C0) #define CONVERT10_S_LAST _HRESULT_TYPEDEF_(0x000401CF) #define CONVERT10_E_FIRST _HRESULT_TYPEDEF_(0x800401C0) #define CONVERT10_E_OLESTREAM_GET _HRESULT_TYPEDEF_(0x800401C0) #define CONVERT10_E_OLESTREAM_PUT _HRESULT_TYPEDEF_(0x800401C1) #define CONVERT10_E_OLESTREAM_FMT _HRESULT_TYPEDEF_(0x800401C2) #define CONVERT10_E_OLESTREAM_BITMAP_TO_DIB _HRESULT_TYPEDEF_(0x800401C3) #define CONVERT10_E_STG_FMT _HRESULT_TYPEDEF_(0x800401C4) #define CONVERT10_E_STG_NO_STD_STREAM _HRESULT_TYPEDEF_(0x800401C5) #define CONVERT10_E_STG_DIB_TO_BITMAP _HRESULT_TYPEDEF_(0x800401C6) #define CONVERT10_E_LAST _HRESULT_TYPEDEF_(0x800401CF) #define CLIPBRD_S_FIRST _HRESULT_TYPEDEF_(0x000401D0) #define CLIPBRD_S_LAST _HRESULT_TYPEDEF_(0x000401DF) #define CLIPBRD_E_FIRST _HRESULT_TYPEDEF_(0x800401D0) #define CLIPBRD_E_LAST _HRESULT_TYPEDEF_(0x800401DF) #define CLIPBRD_E_CANT_OPEN _HRESULT_TYPEDEF_(0x800401D0) #define CLIPBRD_E_CANT_EMPTY _HRESULT_TYPEDEF_(0x800401D1) #define CLIPBRD_E_CANT_SET _HRESULT_TYPEDEF_(0x800401D2) #define CLIPBRD_E_BAD_DATA _HRESULT_TYPEDEF_(0x800401D3) #define CLIPBRD_E_CANT_CLOSE _HRESULT_TYPEDEF_(0x800401D4) #define MK_S_FIRST _HRESULT_TYPEDEF_(0x000401E0) #define MK_S_REDUCED_TO_SELF _HRESULT_TYPEDEF_(0x000401E2) #define MK_S_ME _HRESULT_TYPEDEF_(0x000401E4) #define MK_S_HIM _HRESULT_TYPEDEF_(0x000401E5) #define MK_S_US _HRESULT_TYPEDEF_(0x000401E6) #define MK_S_MONIKERALREADYREGISTERED _HRESULT_TYPEDEF_(0x000401E7) #define MK_S_LAST _HRESULT_TYPEDEF_(0x000401EF) #define MK_E_FIRST _HRESULT_TYPEDEF_(0x800401E0) #define MK_E_CONNECTMANUALLY _HRESULT_TYPEDEF_(0x800401E0) #define MK_E_EXCEEDEDDEADLINE _HRESULT_TYPEDEF_(0x800401E1) #define MK_E_NEEDGENERIC _HRESULT_TYPEDEF_(0x800401E2) #define MK_E_UNAVAILABLE _HRESULT_TYPEDEF_(0x800401E3) #define MK_E_SYNTAX _HRESULT_TYPEDEF_(0x800401E4) #define MK_E_NOOBJECT _HRESULT_TYPEDEF_(0x800401E5) #define MK_E_INVALIDEXTENSION _HRESULT_TYPEDEF_(0x800401E6) #define MK_E_INTERMEDIATEINTERFACENOTSUPPORTED _HRESULT_TYPEDEF_(0x800401E7) #define MK_E_NOTBINDABLE _HRESULT_TYPEDEF_(0x800401E8) #define MK_E_NOTBOUND _HRESULT_TYPEDEF_(0x800401E9) #define MK_E_CANTOPENFILE _HRESULT_TYPEDEF_(0x800401EA) #define MK_E_MUSTBOTHERUSER _HRESULT_TYPEDEF_(0x800401EB) #define MK_E_NOINVERSE _HRESULT_TYPEDEF_(0x800401EC) #define MK_E_NOSTORAGE _HRESULT_TYPEDEF_(0x800401ED) #define MK_E_NOPREFIX _HRESULT_TYPEDEF_(0x800401EE) #define MK_E_ENUMERATION_FAILED _HRESULT_TYPEDEF_(0x800401EF) #define MK_E_LAST _HRESULT_TYPEDEF_(0x800401EF) #define CO_S_FIRST _HRESULT_TYPEDEF_(0x000401F0) #define CO_S_LAST _HRESULT_TYPEDEF_(0x000401FF) #define CO_E_FIRST _HRESULT_TYPEDEF_(0x800401F0) #define CO_E_NOTINITIALIZED _HRESULT_TYPEDEF_(0x800401F0) #define CO_E_ALREADYINITIALIZED _HRESULT_TYPEDEF_(0x800401F1) #define CO_E_CANTDETERMINECLASS _HRESULT_TYPEDEF_(0x800401F2) #define CO_E_CLASSSTRING _HRESULT_TYPEDEF_(0x800401F3) #define CO_E_IIDSTRING _HRESULT_TYPEDEF_(0x800401F4) #define CO_E_APPNOTFOUND _HRESULT_TYPEDEF_(0x800401F5) #define CO_E_APPSINGLEUSE _HRESULT_TYPEDEF_(0x800401F6) #define CO_E_ERRORINAPP _HRESULT_TYPEDEF_(0x800401F7) #define CO_E_DLLNOTFOUND _HRESULT_TYPEDEF_(0x800401F8) #define CO_E_ERRORINDLL _HRESULT_TYPEDEF_(0x800401F9) #define CO_E_WRONGOSFORAPP _HRESULT_TYPEDEF_(0x800401FA) #define CO_E_OBJNOTREG _HRESULT_TYPEDEF_(0x800401FB) #define CO_E_OBJISREG _HRESULT_TYPEDEF_(0x800401FC) #define CO_E_OBJNOTCONNECTED _HRESULT_TYPEDEF_(0x800401FD) #define CO_E_APPDIDNTREG _HRESULT_TYPEDEF_(0x800401FE) #define CO_E_RELEASED _HRESULT_TYPEDEF_(0x800401FF) #define CO_E_LAST _HRESULT_TYPEDEF_(0x800401FF) #define CO_E_FAILEDTOIMPERSONATE _HRESULT_TYPEDEF_(0x80040200) #define CO_E_FAILEDTOGETSECCTX _HRESULT_TYPEDEF_(0x80040201) #define CO_E_FAILEDTOOPENTHREADTOKEN _HRESULT_TYPEDEF_(0x80040202) #define CO_E_FAILEDTOGETTOKENINFO _HRESULT_TYPEDEF_(0x80040203) #define CO_E_TRUSTEEDOESNTMATCHCLIENT _HRESULT_TYPEDEF_(0x80040204) #define CO_E_FAILEDTOQUERYCLIENTBLANKET _HRESULT_TYPEDEF_(0x80040205) #define CO_E_FAILEDTOSETDACL _HRESULT_TYPEDEF_(0x80040206) #define CO_E_ACCESSCHECKFAILED _HRESULT_TYPEDEF_(0x80040207) #define CO_E_NETACCESSAPIFAILED _HRESULT_TYPEDEF_(0x80040208) #define CO_E_WRONGTRUSTEENAMESYNTAX _HRESULT_TYPEDEF_(0x80040209) #define CO_E_INVALIDSID _HRESULT_TYPEDEF_(0x8004020A) #define CO_E_CONVERSIONFAILED _HRESULT_TYPEDEF_(0x8004020B) #define CO_E_NOMATCHINGSIDFOUND _HRESULT_TYPEDEF_(0x8004020C) #define CO_E_LOOKUPACCSIDFAILED _HRESULT_TYPEDEF_(0x8004020D) #define CO_E_NOMATCHINGNAMEFOUND _HRESULT_TYPEDEF_(0x8004020E) #define CO_E_LOOKUPACCNAMEFAILED _HRESULT_TYPEDEF_(0x8004020F) #define CO_E_SETSERLHNDLFAILED _HRESULT_TYPEDEF_(0x80040210) #define CO_E_FAILEDTOGETWINDIR _HRESULT_TYPEDEF_(0x80040211) #define CO_E_PATHTOOLONG _HRESULT_TYPEDEF_(0x80040212) #define CO_E_FAILEDTOGENUUID _HRESULT_TYPEDEF_(0x80040213) #define CO_E_FAILEDTOCREATEFILE _HRESULT_TYPEDEF_(0x80040214) #define CO_E_FAILEDTOCLOSEHANDLE _HRESULT_TYPEDEF_(0x80040215) #define CO_E_EXCEEDSYSACLLIMIT _HRESULT_TYPEDEF_(0x80040216) #define CO_E_ACESINWRONGORDER _HRESULT_TYPEDEF_(0x80040217) #define CO_E_INCOMPATIBLESTREAMVERSION _HRESULT_TYPEDEF_(0x80040218) #define CO_E_FAILEDTOOPENPROCESSTOKEN _HRESULT_TYPEDEF_(0x80040219) #define CO_E_DECODEFAILED _HRESULT_TYPEDEF_(0x8004021A) #define CO_E_ACNOTINITIALIZED _HRESULT_TYPEDEF_(0x8004021B) /* Task Scheduler Service Error Codes */ #define SCHED_S_TASK_READY _HRESULT_TYPEDEF_(0x00041300) #define SCHED_S_TASK_RUNNING _HRESULT_TYPEDEF_(0x00041301) #define SCHED_S_TASK_DISABLED _HRESULT_TYPEDEF_(0x00041302) #define SCHED_S_TASK_HAS_NOT_RUN _HRESULT_TYPEDEF_(0x00041303) #define SCHED_S_TASK_NO_MORE_RUNS _HRESULT_TYPEDEF_(0x00041304) #define SCHED_S_TASK_NOT_SCHEDULED _HRESULT_TYPEDEF_(0x00041305) #define SCHED_S_TASK_TERMINATED _HRESULT_TYPEDEF_(0x00041306) #define SCHED_S_TASK_NO_VALID_TRIGGERS _HRESULT_TYPEDEF_(0x00041307) #define SCHED_S_EVENT_TRIGGER _HRESULT_TYPEDEF_(0x00041308) #define SCHED_E_TRIGGER_NOT_FOUND _HRESULT_TYPEDEF_(0x80041309) #define SCHED_E_TASK_NOT_READY _HRESULT_TYPEDEF_(0x8004130A) #define SCHED_E_TASK_NOT_RUNNING _HRESULT_TYPEDEF_(0x8004130B) #define SCHED_E_SERVICE_NOT_INSTALLED _HRESULT_TYPEDEF_(0x8004130C) #define SCHED_E_CANNOT_OPEN_TASK _HRESULT_TYPEDEF_(0x8004130D) #define SCHED_E_INVALID_TASK _HRESULT_TYPEDEF_(0x8004130E) #define SCHED_E_ACCOUNT_INFORMATION_NOT_SET _HRESULT_TYPEDEF_(0x8004130F) #define SCHED_E_ACCOUNT_NAME_NOT_FOUND _HRESULT_TYPEDEF_(0x80041310) #define SCHED_E_ACCOUNT_DBASE_CORRUPT _HRESULT_TYPEDEF_(0x80041311) #define SCHED_E_NO_SECURITY_SERVICES _HRESULT_TYPEDEF_(0x80041312) #define SCHED_E_UNKNOWN_OBJECT_VERSION _HRESULT_TYPEDEF_(0x80041313) #define SCHED_E_UNSUPPORTED_ACCOUNT_OPTION _HRESULT_TYPEDEF_(0x80041314) #define SCHED_E_SERVICE_NOT_RUNNING _HRESULT_TYPEDEF_(0x80041315) #define SCHED_E_UNEXPECTEDNODE _HRESULT_TYPEDEF_(0x80041316) #define SCHED_E_NAMESPACE _HRESULT_TYPEDEF_(0x80041317) #define SCHED_E_INVALIDVALUE _HRESULT_TYPEDEF_(0x80041318) #define SCHED_E_MISSINGNODE _HRESULT_TYPEDEF_(0x80041319) #define SCHED_E_MALFORMEDXML _HRESULT_TYPEDEF_(0x8004131A) #define SCHED_S_SOME_TRIGGERS_FAILED _HRESULT_TYPEDEF_(0x0004131B) #define SCHED_S_BATCH_LOGON_PROBLEM _HRESULT_TYPEDEF_(0x0004131C) #define SCHED_E_TOO_MANY_NODES _HRESULT_TYPEDEF_(0x8004131D) #define SCHED_E_PAST_END_BOUNDARY _HRESULT_TYPEDEF_(0x8004131E) #define SCHED_E_ALREADY_RUNNING _HRESULT_TYPEDEF_(0x8004131F) #define SCHED_E_USER_NOT_LOGGED_ON _HRESULT_TYPEDEF_(0x80041320) #define SCHED_E_INVALID_TASK_HASH _HRESULT_TYPEDEF_(0x80041321) #define SCHED_E_SERVICE_NOT_AVAILABLE _HRESULT_TYPEDEF_(0x80041322) #define SCHED_E_SERVICE_TOO_BUSY _HRESULT_TYPEDEF_(0x80041323) #define SCHED_E_TASK_ATTEMPTED _HRESULT_TYPEDEF_(0x80041324) #define SCHED_S_TASK_QUEUED _HRESULT_TYPEDEF_(0x00041325) #define SCHED_E_TASK_DISABLED _HRESULT_TYPEDEF_(0x80041326) #define SCHED_E_TASK_NOT_V1_COMPAT _HRESULT_TYPEDEF_(0x80041327) #define SCHED_E_START_ON_DEMAND _HRESULT_TYPEDEF_(0x80041328) #define E_ACCESSDENIED _HRESULT_TYPEDEF_(0x80070005) #define E_HANDLE _HRESULT_TYPEDEF_(0x80070006) #define E_OUTOFMEMORY _HRESULT_TYPEDEF_(0x8007000E) #define E_INVALIDARG _HRESULT_TYPEDEF_(0x80070057) #define CO_S_NOTALLINTERFACES _HRESULT_TYPEDEF_(0x00080012) #define CO_E_CLASS_CREATE_FAILED _HRESULT_TYPEDEF_(0x80080001) #define CO_E_SCM_ERROR _HRESULT_TYPEDEF_(0x80080002) #define CO_E_SCM_RPC_FAILURE _HRESULT_TYPEDEF_(0x80080003) #define CO_E_BAD_PATH _HRESULT_TYPEDEF_(0x80080004) #define CO_E_SERVER_EXEC_FAILURE _HRESULT_TYPEDEF_(0x80080005) #define CO_E_OBJSRV_RPC_FAILURE _HRESULT_TYPEDEF_(0x80080006) #define MK_E_NO_NORMALIZED _HRESULT_TYPEDEF_(0x80080007) #define CO_E_SERVER_STOPPING _HRESULT_TYPEDEF_(0x80080008) #define MEM_E_INVALID_ROOT _HRESULT_TYPEDEF_(0x80080009) #define MEM_E_INVALID_LINK _HRESULT_TYPEDEF_(0x80080010) #define MEM_E_INVALID_SIZE _HRESULT_TYPEDEF_(0x80080011) /*Cryptographic Error Codes */ #define NTE_BAD_UID _HRESULT_TYPEDEF_(0x80090001) #define NTE_BAD_HASH _HRESULT_TYPEDEF_(0x80090002) #define NTE_BAD_KEY _HRESULT_TYPEDEF_(0x80090003) #define NTE_BAD_LEN _HRESULT_TYPEDEF_(0x80090004) #define NTE_BAD_DATA _HRESULT_TYPEDEF_(0x80090005) #define NTE_BAD_SIGNATURE _HRESULT_TYPEDEF_(0x80090006) #define NTE_BAD_VER _HRESULT_TYPEDEF_(0x80090007) #define NTE_BAD_ALGID _HRESULT_TYPEDEF_(0x80090008) #define NTE_BAD_FLAGS _HRESULT_TYPEDEF_(0x80090009) #define NTE_BAD_TYPE _HRESULT_TYPEDEF_(0x8009000A) #define NTE_BAD_KEY_STATE _HRESULT_TYPEDEF_(0x8009000B) #define NTE_BAD_HASH_STATE _HRESULT_TYPEDEF_(0x8009000C) #define NTE_NO_KEY _HRESULT_TYPEDEF_(0x8009000D) #define NTE_NO_MEMORY _HRESULT_TYPEDEF_(0x8009000E) #define NTE_EXISTS _HRESULT_TYPEDEF_(0x8009000F) #define NTE_PERM _HRESULT_TYPEDEF_(0x80090010) #define NTE_NOT_FOUND _HRESULT_TYPEDEF_(0x80090011) #define NTE_DOUBLE_ENCRYPT _HRESULT_TYPEDEF_(0x80090012) #define NTE_BAD_PROVIDER _HRESULT_TYPEDEF_(0x80090013) #define NTE_BAD_PROV_TYPE _HRESULT_TYPEDEF_(0x80090014) #define NTE_BAD_PUBLIC_KEY _HRESULT_TYPEDEF_(0x80090015) #define NTE_BAD_KEYSET _HRESULT_TYPEDEF_(0x80090016) #define NTE_PROV_TYPE_NOT_DEF _HRESULT_TYPEDEF_(0x80090017) #define NTE_PROV_TYPE_ENTRY_BAD _HRESULT_TYPEDEF_(0x80090018) #define NTE_KEYSET_NOT_DEF _HRESULT_TYPEDEF_(0x80090019) #define NTE_KEYSET_ENTRY_BAD _HRESULT_TYPEDEF_(0x8009001A) #define NTE_PROV_TYPE_NO_MATCH _HRESULT_TYPEDEF_(0x8009001B) #define NTE_SIGNATURE_FILE_BAD _HRESULT_TYPEDEF_(0x8009001C) #define NTE_PROVIDER_DLL_FAIL _HRESULT_TYPEDEF_(0x8009001D) #define NTE_PROV_DLL_NOT_FOUND _HRESULT_TYPEDEF_(0x8009001E) #define NTE_BAD_KEYSET_PARAM _HRESULT_TYPEDEF_(0x8009001F) #define NTE_FAIL _HRESULT_TYPEDEF_(0x80090020) #define NTE_SYS_ERR _HRESULT_TYPEDEF_(0x80090021) #define NTE_SILENT_CONTEXT _HRESULT_TYPEDEF_(0x80090022) #define NTE_TOKEN_KEYSET_STORAGE_FULL _HRESULT_TYPEDEF_(0x80090023) #define NTE_TEMPORARY_PROFILE _HRESULT_TYPEDEF_(0x80090024) #define NTE_FIXEDPARAMETER _HRESULT_TYPEDEF_(0x80090025) #define NTE_INVALID_HANDLE _HRESULT_TYPEDEF_(0x80090026) #define NTE_INVALID_PARAMETER _HRESULT_TYPEDEF_(0x80090027) #define NTE_BUFFER_TOO_SMALL _HRESULT_TYPEDEF_(0x80090028) #define NTE_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x80090029) #define NTE_NO_MORE_ITEMS _HRESULT_TYPEDEF_(0x8009002A) #define NTE_BUFFERS_OVERLAP _HRESULT_TYPEDEF_(0x8009002B) #define NTE_DECRYPTION_FAILURE _HRESULT_TYPEDEF_(0x8009002C) #define NTE_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x8009002D) #define NTE_UI_REQUIRED _HRESULT_TYPEDEF_(0x8009002E) #define NTE_HMAC_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009002F) #define NTE_OP_OK _HRESULT_TYPEDEF_(0) #define SEC_E_INSUFFICIENT_MEMORY _HRESULT_TYPEDEF_(0x80090300) #define SEC_E_INVALID_HANDLE _HRESULT_TYPEDEF_(0x80090301) #define SEC_E_UNSUPPORTED_FUNCTION _HRESULT_TYPEDEF_(0x80090302) #define SEC_E_TARGET_UNKNOWN _HRESULT_TYPEDEF_(0x80090303) #define SEC_E_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x80090304) #define SEC_E_SECPKG_NOT_FOUND _HRESULT_TYPEDEF_(0x80090305) #define SEC_E_NOT_OWNER _HRESULT_TYPEDEF_(0x80090306) #define SEC_E_CANNOT_INSTALL _HRESULT_TYPEDEF_(0x80090307) #define SEC_E_INVALID_TOKEN _HRESULT_TYPEDEF_(0x80090308) #define SEC_E_CANNOT_PACK _HRESULT_TYPEDEF_(0x80090309) #define SEC_E_QOP_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009030A) #define SEC_E_NO_IMPERSONATION _HRESULT_TYPEDEF_(0x8009030B) #define SEC_E_LOGON_DENIED _HRESULT_TYPEDEF_(0x8009030C) #define SEC_E_UNKNOWN_CREDENTIALS _HRESULT_TYPEDEF_(0x8009030D) #define SEC_E_NO_CREDENTIALS _HRESULT_TYPEDEF_(0x8009030E) #define SEC_E_MESSAGE_ALTERED _HRESULT_TYPEDEF_(0x8009030F) #define SEC_E_OUT_OF_SEQUENCE _HRESULT_TYPEDEF_(0x80090310) #define SEC_E_NO_AUTHENTICATING_AUTHORITY _HRESULT_TYPEDEF_(0x80090311) #define SEC_I_CONTINUE_NEEDED _HRESULT_TYPEDEF_(0x00090312) #define SEC_I_COMPLETE_NEEDED _HRESULT_TYPEDEF_(0x00090313) #define SEC_I_COMPLETE_AND_CONTINUE _HRESULT_TYPEDEF_(0x00090314) #define SEC_I_CONTEXT_EXPIRED _HRESULT_TYPEDEF_(0x00090317) #define SEC_E_BAD_PKGID _HRESULT_TYPEDEF_(0x80090316) #define SEC_E_CONTEXT_EXPIRED _HRESULT_TYPEDEF_(0x80090317) #define SEC_E_INCOMPLETE_MESSAGE _HRESULT_TYPEDEF_(0x80090318) #define SEC_E_INCOMPLETE_CREDENTIALS _HRESULT_TYPEDEF_(0x80090320) #define SEC_E_BUFFER_TOO_SMALL _HRESULT_TYPEDEF_(0x80090321) #define SEC_E_WRONG_PRINCIPAL _HRESULT_TYPEDEF_(0x80090322) #define SEC_E_TIME_SKEW _HRESULT_TYPEDEF_(0x80090324) #define SEC_E_UNTRUSTED_ROOT _HRESULT_TYPEDEF_(0x80090325) #define SEC_E_ILLEGAL_MESSAGE _HRESULT_TYPEDEF_(0x80090326) #define SEC_E_CERT_UNKNOWN _HRESULT_TYPEDEF_(0x80090327) #define SEC_E_CERT_EXPIRED _HRESULT_TYPEDEF_(0x80090328) #define SEC_E_ENCRYPT_FAILURE _HRESULT_TYPEDEF_(0x80090329) #define SEC_E_DECRYPT_FAILURE _HRESULT_TYPEDEF_(0x80090330) #define SEC_E_ALGORITHM_MISMATCH _HRESULT_TYPEDEF_(0x80090331) #define SEC_E_SECURITY_QOS_FAILED _HRESULT_TYPEDEF_(0x80090332) #define SEC_E_UNFINISHED_CONTEXT_DELETED _HRESULT_TYPEDEF_(0x80090333) #define SEC_E_NO_TGT_REPLY _HRESULT_TYPEDEF_(0x80090334) #define SEC_E_NO_IP_ADDRESSES _HRESULT_TYPEDEF_(0x80090335) #define SEC_E_WRONG_CREDENTIAL_HANDLE _HRESULT_TYPEDEF_(0x80090336) #define SEC_E_CRYPTO_SYSTEM_INVALID _HRESULT_TYPEDEF_(0x80090337) #define SEC_E_MAX_REFERRALS_EXCEEDED _HRESULT_TYPEDEF_(0x80090338) #define SEC_E_MUST_BE_KDC _HRESULT_TYPEDEF_(0x80090339) #define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009033A) #define SEC_E_TOO_MANY_PRINCIPALS _HRESULT_TYPEDEF_(0x8009033B) #define SEC_E_NO_PA_DATA _HRESULT_TYPEDEF_(0x8009033C) #define SEC_E_PKINIT_NAME_MISMATCH _HRESULT_TYPEDEF_(0x8009033D) #define SEC_E_SMARTCARD_LOGON_REQUIRED _HRESULT_TYPEDEF_(0x8009033E) #define SEC_E_SHUTDOWN_IN_PROGRESS _HRESULT_TYPEDEF_(0x8009033F) #define SEC_E_KDC_INVALID_REQUEST _HRESULT_TYPEDEF_(0x80090340) #define SEC_E_KDC_UNABLE_TO_REFER _HRESULT_TYPEDEF_(0x80090341) #define SEC_E_KDC_UNKNOWN_ETYPE _HRESULT_TYPEDEF_(0x80090342) #define SEC_E_UNSUPPORTED_PREAUTH _HRESULT_TYPEDEF_(0x80090343) #define SEC_E_DELEGATION_REQUIRED _HRESULT_TYPEDEF_(0x80090345) #define SEC_E_BAD_BINDINGS _HRESULT_TYPEDEF_(0x80090346) #define SEC_E_MULTIPLE_ACCOUNTS _HRESULT_TYPEDEF_(0x80090347) #define SEC_E_NO_KERB_KEY _HRESULT_TYPEDEF_(0x80090348) #define SEC_E_CERT_WRONG_USAGE _HRESULT_TYPEDEF_(0x80090349) #define SEC_E_DOWNGRADE_DETECTED _HRESULT_TYPEDEF_(0x80090350) #define SEC_E_SMARTCARD_CERT_REVOKED _HRESULT_TYPEDEF_(0x80090351) #define SEC_E_ISSUING_CA_UNTRUSTED _HRESULT_TYPEDEF_(0x80090352) #define SEC_E_REVOCATION_OFFLINE_C _HRESULT_TYPEDEF_(0x80090353) #define SEC_E_PKINIT_CLIENT_FAILURE _HRESULT_TYPEDEF_(0x80090354) #define SEC_E_SMARTCARD_CERT_EXPIRED _HRESULT_TYPEDEF_(0x80090355) #define SEC_E_NO_S4U_PROT_SUPPORT _HRESULT_TYPEDEF_(0x80090356) #define SEC_E_CROSSREALM_DELEGATION_FAILURE _HRESULT_TYPEDEF_(0x80090357) #define SEC_E_REVOCATION_OFFLINE_KDC _HRESULT_TYPEDEF_(0x80090358) #define SEC_E_ISSUING_CA_UNTRUSTED_KDC _HRESULT_TYPEDEF_(0x80090359) #define SEC_E_KDC_CERT_EXPIRED _HRESULT_TYPEDEF_(0x8009035A) #define SEC_E_KDC_CERT_REVOKED _HRESULT_TYPEDEF_(0x8009035B) #define CRYPT_E_MSG_ERROR _HRESULT_TYPEDEF_(0x80091001) #define CRYPT_E_UNKNOWN_ALGO _HRESULT_TYPEDEF_(0x80091002) #define CRYPT_E_OID_FORMAT _HRESULT_TYPEDEF_(0x80091003) #define CRYPT_E_INVALID_MSG_TYPE _HRESULT_TYPEDEF_(0x80091004) #define CRYPT_E_UNEXPECTED_ENCODING _HRESULT_TYPEDEF_(0x80091005) #define CRYPT_E_AUTH_ATTR_MISSING _HRESULT_TYPEDEF_(0x80091006) #define CRYPT_E_HASH_VALUE _HRESULT_TYPEDEF_(0x80091007) #define CRYPT_E_INVALID_INDEX _HRESULT_TYPEDEF_(0x80091008) #define CRYPT_E_ALREADY_DECRYPTED _HRESULT_TYPEDEF_(0x80091009) #define CRYPT_E_NOT_DECRYPTED _HRESULT_TYPEDEF_(0x8009100A) #define CRYPT_E_RECIPIENT_NOT_FOUND _HRESULT_TYPEDEF_(0x8009100B) #define CRYPT_E_CONTROL_TYPE _HRESULT_TYPEDEF_(0x8009100C) #define CRYPT_E_ISSUER_SERIALNUMBER _HRESULT_TYPEDEF_(0x8009100D) #define CRYPT_E_SIGNER_NOT_FOUND _HRESULT_TYPEDEF_(0x8009100E) #define CRYPT_E_ATTRIBUTES_MISSING _HRESULT_TYPEDEF_(0x8009100F) #define CRYPT_E_STREAM_MSG_NOT_READY _HRESULT_TYPEDEF_(0x80091010) #define CRYPT_E_STREAM_INSUFFICIENT_DATA _HRESULT_TYPEDEF_(0x80091011) #define CRYPT_I_NEW_PROTECTION_REQUIRED _HRESULT_TYPEDEF_(0x80091012) #define CRYPT_E_BAD_LEN _HRESULT_TYPEDEF_(0x80092001) #define CRYPT_E_BAD_ENCODE _HRESULT_TYPEDEF_(0x80092002) #define CRYPT_E_FILE_ERROR _HRESULT_TYPEDEF_(0x80092003) #define CRYPT_E_NOT_FOUND _HRESULT_TYPEDEF_(0x80092004) #define CRYPT_E_EXISTS _HRESULT_TYPEDEF_(0x80092005) #define CRYPT_E_NO_PROVIDER _HRESULT_TYPEDEF_(0x80092006) #define CRYPT_E_SELF_SIGNED _HRESULT_TYPEDEF_(0x80092007) #define CRYPT_E_DELETED_PREV _HRESULT_TYPEDEF_(0x80092008) #define CRYPT_E_NO_MATCH _HRESULT_TYPEDEF_(0x80092009) #define CRYPT_E_UNEXPECTED_MSG_TYPE _HRESULT_TYPEDEF_(0x8009200A) #define CRYPT_E_NO_KEY_PROPERTY _HRESULT_TYPEDEF_(0x8009200B) #define CRYPT_E_NO_DECRYPT_CERT _HRESULT_TYPEDEF_(0x8009200C) #define CRYPT_E_BAD_MSG _HRESULT_TYPEDEF_(0x8009200D) #define CRYPT_E_NO_SIGNER _HRESULT_TYPEDEF_(0x8009200E) #define CRYPT_E_PENDING_CLOSE _HRESULT_TYPEDEF_(0x8009200F) #define CRYPT_E_REVOKED _HRESULT_TYPEDEF_(0x80092010) #define CRYPT_E_NO_REVOCATION_DLL _HRESULT_TYPEDEF_(0x80092011) #define CRYPT_E_NO_REVOCATION_CHECK _HRESULT_TYPEDEF_(0x80092012) #define CRYPT_E_REVOCATION_OFFLINE _HRESULT_TYPEDEF_(0x80092013) #define CRYPT_E_NOT_IN_REVOCATION_DATABASE _HRESULT_TYPEDEF_(0x80092014) #define CRYPT_E_INVALID_NUMERIC_STRING _HRESULT_TYPEDEF_(0x80092020) #define CRYPT_E_INVALID_PRINTABLE_STRING _HRESULT_TYPEDEF_(0x80092021) #define CRYPT_E_INVALID_IA5_STRING _HRESULT_TYPEDEF_(0x80092022) #define CRYPT_E_INVALID_X500_STRING _HRESULT_TYPEDEF_(0x80092023) #define CRYPT_E_NOT_CHAR_STRING _HRESULT_TYPEDEF_(0x80092024) #define CRYPT_E_FILERESIZED _HRESULT_TYPEDEF_(0x80092025) #define CRYPT_E_SECURITY_SETTINGS _HRESULT_TYPEDEF_(0x80092026) #define CRYPT_E_NO_VERIFY_USAGE_DLL _HRESULT_TYPEDEF_(0x80092027) #define CRYPT_E_NO_VERIFY_USAGE_CHECK _HRESULT_TYPEDEF_(0x80092028) #define CRYPT_E_VERIFY_USAGE_OFFLINE _HRESULT_TYPEDEF_(0x80092029) #define CRYPT_E_NOT_IN_CTL _HRESULT_TYPEDEF_(0x8009202A) #define CRYPT_E_NO_TRUSTED_SIGNER _HRESULT_TYPEDEF_(0x8009202B) #define CRYPT_E_MISSING_PUBKEY_PARA _HRESULT_TYPEDEF_(0x8009202C) #define CRYPT_E_OSS_ERROR _HRESULT_TYPEDEF_(0x80093000) #define OSS_MORE_BUF _HRESULT_TYPEDEF_(0x80093001) #define OSS_NEGATIVE_UINTEGER _HRESULT_TYPEDEF_(0x80093002) #define OSS_PDU_RANGE _HRESULT_TYPEDEF_(0x80093003) #define OSS_MORE_INPUT _HRESULT_TYPEDEF_(0x80093004) #define OSS_DATA_ERROR _HRESULT_TYPEDEF_(0x80093005) #define OSS_BAD_ARG _HRESULT_TYPEDEF_(0x80093006) #define OSS_BAD_VERSION _HRESULT_TYPEDEF_(0x80093007) #define OSS_OUT_MEMORY _HRESULT_TYPEDEF_(0x80093008) #define OSS_PDU_MISMATCH _HRESULT_TYPEDEF_(0x80093009) #define OSS_LIMITED _HRESULT_TYPEDEF_(0x8009300A) #define OSS_BAD_PTR _HRESULT_TYPEDEF_(0x8009300B) #define OSS_BAD_TIME _HRESULT_TYPEDEF_(0x8009300C) #define OSS_INDEFINITE_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009300D) #define OSS_MEM_ERROR _HRESULT_TYPEDEF_(0x8009300E) #define OSS_BAD_TABLE _HRESULT_TYPEDEF_(0x8009300F) #define OSS_TOO_LONG _HRESULT_TYPEDEF_(0x80093010) #define OSS_CONSTRAINT_VIOLATED _HRESULT_TYPEDEF_(0x80093011) #define OSS_FATAL_ERROR _HRESULT_TYPEDEF_(0x80093012) #define OSS_ACCESS_SERIALIZATION_ERROR _HRESULT_TYPEDEF_(0x80093013) #define OSS_NULL_TBL _HRESULT_TYPEDEF_(0x80093014) #define OSS_NULL_FCN _HRESULT_TYPEDEF_(0x80093015) #define OSS_BAD_ENCRULES _HRESULT_TYPEDEF_(0x80093016) #define OSS_UNAVAIL_ENCRULES _HRESULT_TYPEDEF_(0x80093017) #define OSS_CANT_OPEN_TRACE_WINDOW _HRESULT_TYPEDEF_(0x80093018) #define OSS_UNIMPLEMENTED _HRESULT_TYPEDEF_(0x80093019) #define OSS_OID_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x8009301A) #define OSS_CANT_OPEN_TRACE_FILE _HRESULT_TYPEDEF_(0x8009301B) #define OSS_TRACE_FILE_ALREADY_OPEN _HRESULT_TYPEDEF_(0x8009301C) #define OSS_TABLE_MISMATCH _HRESULT_TYPEDEF_(0x8009301D) #define OSS_TYPE_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009301E) #define OSS_REAL_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x8009301F) #define OSS_REAL_CODE_NOT_LINKED _HRESULT_TYPEDEF_(0x80093020) #define OSS_OUT_OF_RANGE _HRESULT_TYPEDEF_(0x80093021) #define OSS_COPIER_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093022) #define OSS_CONSTRAINT_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093023) #define OSS_COMPARATOR_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093024) #define OSS_COMPARATOR_CODE_NOT_LINKED _HRESULT_TYPEDEF_(0x80093025) #define OSS_MEM_MGR_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093026) #define OSS_PDV_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093027) #define OSS_PDV_CODE_NOT_LINKED _HRESULT_TYPEDEF_(0x80093028) #define OSS_API_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093029) #define OSS_BERDER_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x8009302A) #define OSS_PER_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x8009302B) #define OSS_OPEN_TYPE_ERROR _HRESULT_TYPEDEF_(0x8009302C) #define OSS_MUTEX_NOT_CREATED _HRESULT_TYPEDEF_(0x8009302D) #define OSS_CANT_CLOSE_TRACE_FILE _HRESULT_TYPEDEF_(0x8009302E) #define CRYPT_E_ASN1_ERROR _HRESULT_TYPEDEF_(0x80093100) #define CRYPT_E_ASN1_INTERNAL _HRESULT_TYPEDEF_(0x80093101) #define CRYPT_E_ASN1_EOD _HRESULT_TYPEDEF_(0x80093102) #define CRYPT_E_ASN1_CORRUPT _HRESULT_TYPEDEF_(0x80093103) #define CRYPT_E_ASN1_LARGE _HRESULT_TYPEDEF_(0x80093104) #define CRYPT_E_ASN1_CONSTRAINT _HRESULT_TYPEDEF_(0x80093105) #define CRYPT_E_ASN1_MEMORY _HRESULT_TYPEDEF_(0x80093106) #define CRYPT_E_ASN1_OVERFLOW _HRESULT_TYPEDEF_(0x80093107) #define CRYPT_E_ASN1_BADPDU _HRESULT_TYPEDEF_(0x80093108) #define CRYPT_E_ASN1_BADARGS _HRESULT_TYPEDEF_(0x80093109) #define CRYPT_E_ASN1_BADREAL _HRESULT_TYPEDEF_(0x8009310A) #define CRYPT_E_ASN1_BADTAG _HRESULT_TYPEDEF_(0x8009310B) #define CRYPT_E_ASN1_CHOICE _HRESULT_TYPEDEF_(0x8009310C) #define CRYPT_E_ASN1_RULE _HRESULT_TYPEDEF_(0x8009310D) #define CRYPT_E_ASN1_UTF8 _HRESULT_TYPEDEF_(0x8009310E) #define CRYPT_E_ASN1_PDU_TYPE _HRESULT_TYPEDEF_(0x80093133) #define CRYPT_E_ASN1_NYI _HRESULT_TYPEDEF_(0x80093134) #define CRYPT_E_ASN1_EXTENDED _HRESULT_TYPEDEF_(0x80093201) #define CRYPT_E_ASN1_NOEOD _HRESULT_TYPEDEF_(0x80093202) #define TRUST_E_SYSTEM_ERROR _HRESULT_TYPEDEF_(0x80096001) #define TRUST_E_NO_SIGNER_CERT _HRESULT_TYPEDEF_(0x80096002) #define TRUST_E_COUNTER_SIGNER _HRESULT_TYPEDEF_(0x80096003) #define TRUST_E_CERT_SIGNATURE _HRESULT_TYPEDEF_(0x80096004) #define TRUST_E_TIME_STAMP _HRESULT_TYPEDEF_(0x80096005) #define TRUST_E_BAD_DIGEST _HRESULT_TYPEDEF_(0x80096010) #define TRUST_E_BASIC_CONSTRAINTS _HRESULT_TYPEDEF_(0x80096019) #define TRUST_E_FINANCIAL_CRITERIA _HRESULT_TYPEDEF_(0x8009601E) #define TRUST_E_PROVIDER_UNKNOWN _HRESULT_TYPEDEF_(0x800B0001) #define TRUST_E_ACTION_UNKNOWN _HRESULT_TYPEDEF_(0x800B0002) #define TRUST_E_SUBJECT_FORM_UNKNOWN _HRESULT_TYPEDEF_(0x800B0003) #define TRUST_E_SUBJECT_NOT_TRUSTED _HRESULT_TYPEDEF_(0x800B0004) #define TRUST_E_NOSIGNATURE _HRESULT_TYPEDEF_(0x800B0100) #define CERT_E_EXPIRED _HRESULT_TYPEDEF_(0x800B0101) #define CERT_E_VALIDITYPERIODNESTING _HRESULT_TYPEDEF_(0x800B0102) #define CERT_E_ROLE _HRESULT_TYPEDEF_(0x800B0103) #define CERT_E_PATHLENCONST _HRESULT_TYPEDEF_(0x800B0104) #define CERT_E_CRITICAL _HRESULT_TYPEDEF_(0x800B0105) #define CERT_E_PURPOSE _HRESULT_TYPEDEF_(0x800B0106) #define CERT_E_ISSUERCHAINING _HRESULT_TYPEDEF_(0x800B0107) #define CERT_E_MALFORMED _HRESULT_TYPEDEF_(0x800B0108) #define CERT_E_UNTRUSTEDROOT _HRESULT_TYPEDEF_(0x800B0109) #define CERT_E_CHAINING _HRESULT_TYPEDEF_(0x800B010A) #define TRUST_E_FAIL _HRESULT_TYPEDEF_(0x800B010B) #define CERT_E_REVOKED _HRESULT_TYPEDEF_(0x800B010C) #define CERT_E_UNTRUSTEDTESTROOT _HRESULT_TYPEDEF_(0x800B010D) #define CERT_E_REVOCATION_FAILURE _HRESULT_TYPEDEF_(0x800B010E) #define CERT_E_CN_NO_MATCH _HRESULT_TYPEDEF_(0x800B010F) #define CERT_E_WRONG_USAGE _HRESULT_TYPEDEF_(0x800B0110) #define TRUST_E_EXPLICIT_DISTRUST _HRESULT_TYPEDEF_(0x800B0111) #define CERT_E_UNTRUSTEDCA _HRESULT_TYPEDEF_(0x800B0112) #define CERT_E_INVALID_POLICY _HRESULT_TYPEDEF_(0x800B0113) #define CERT_E_INVALID_NAME _HRESULT_TYPEDEF_(0x800B0114) #define SPAPI_E_EXPECTED_SECTION_NAME _HRESULT_TYPEDEF_(0x800F0000) #define SPAPI_E_BAD_SECTION_NAME_LINE _HRESULT_TYPEDEF_(0x800F0001) #define SPAPI_E_SECTION_NAME_TOO_LONG _HRESULT_TYPEDEF_(0x800F0002) #define SPAPI_E_GENERAL_SYNTAX _HRESULT_TYPEDEF_(0x800F0003) #define SPAPI_E_WRONG_INF_STYLE _HRESULT_TYPEDEF_(0x800F0100) #define SPAPI_E_SECTION_NOT_FOUND _HRESULT_TYPEDEF_(0x800F0101) #define SPAPI_E_LINE_NOT_FOUND _HRESULT_TYPEDEF_(0x800F0102) #define SPAPI_E_NO_BACKUP _HRESULT_TYPEDEF_(0x800F0103) #define SPAPI_E_NO_ASSOCIATED_CLASS _HRESULT_TYPEDEF_(0x800F0200) #define SPAPI_E_CLASS_MISMATCH _HRESULT_TYPEDEF_(0x800F0201) #define SPAPI_E_DUPLICATE_FOUND _HRESULT_TYPEDEF_(0x800F0202) #define SPAPI_E_NO_DRIVER_SELECTED _HRESULT_TYPEDEF_(0x800F0203) #define SPAPI_E_KEY_DOES_NOT_EXIST _HRESULT_TYPEDEF_(0x800F0204) #define SPAPI_E_INVALID_DEVINST_NAME _HRESULT_TYPEDEF_(0x800F0205) #define SPAPI_E_INVALID_CLASS _HRESULT_TYPEDEF_(0x800F0206) #define SPAPI_E_DEVINST_ALREADY_EXISTS _HRESULT_TYPEDEF_(0x800F0207) #define SPAPI_E_DEVINFO_NOT_REGISTERED _HRESULT_TYPEDEF_(0x800F0208) #define SPAPI_E_INVALID_REG_PROPERTY _HRESULT_TYPEDEF_(0x800F0209) #define SPAPI_E_NO_INF _HRESULT_TYPEDEF_(0x800F020A) #define SPAPI_E_NO_SUCH_DEVINST _HRESULT_TYPEDEF_(0x800F020B) #define SPAPI_E_CANT_LOAD_CLASS_ICON _HRESULT_TYPEDEF_(0x800F020C) #define SPAPI_E_INVALID_CLASS_INSTALLER _HRESULT_TYPEDEF_(0x800F020D) #define SPAPI_E_DI_DO_DEFAULT _HRESULT_TYPEDEF_(0x800F020E) #define SPAPI_E_DI_NOFILECOPY _HRESULT_TYPEDEF_(0x800F020F) #define SPAPI_E_INVALID_HWPROFILE _HRESULT_TYPEDEF_(0x800F0210) #define SPAPI_E_NO_DEVICE_SELECTED _HRESULT_TYPEDEF_(0x800F0211) #define SPAPI_E_DEVINFO_LIST_LOCKED _HRESULT_TYPEDEF_(0x800F0212) #define SPAPI_E_DEVINFO_DATA_LOCKED _HRESULT_TYPEDEF_(0x800F0213) #define SPAPI_E_DI_BAD_PATH _HRESULT_TYPEDEF_(0x800F0214) #define SPAPI_E_NO_CLASSINSTALL_PARAMS _HRESULT_TYPEDEF_(0x800F0215) #define SPAPI_E_FILEQUEUE_LOCKED _HRESULT_TYPEDEF_(0x800F0216) #define SPAPI_E_BAD_SERVICE_INSTALLSECT _HRESULT_TYPEDEF_(0x800F0217) #define SPAPI_E_NO_CLASS_DRIVER_LIST _HRESULT_TYPEDEF_(0x800F0218) #define SPAPI_E_NO_ASSOCIATED_SERVICE _HRESULT_TYPEDEF_(0x800F0219) #define SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE _HRESULT_TYPEDEF_(0x800F021A) #define SPAPI_E_DEVICE_INTERFACE_ACTIVE _HRESULT_TYPEDEF_(0x800F021B) #define SPAPI_E_DEVICE_INTERFACE_REMOVED _HRESULT_TYPEDEF_(0x800F021C) #define SPAPI_E_BAD_INTERFACE_INSTALLSECT _HRESULT_TYPEDEF_(0x800F021D) #define SPAPI_E_NO_SUCH_INTERFACE_CLASS _HRESULT_TYPEDEF_(0x800F021E) #define SPAPI_E_INVALID_REFERENCE_STRING _HRESULT_TYPEDEF_(0x800F021F) #define SPAPI_E_INVALID_MACHINENAME _HRESULT_TYPEDEF_(0x800F0220) #define SPAPI_E_REMOTE_COMM_FAILURE _HRESULT_TYPEDEF_(0x800F0221) #define SPAPI_E_MACHINE_UNAVAILABLE _HRESULT_TYPEDEF_(0x800F0222) #define SPAPI_E_NO_CONFIGMGR_SERVICES _HRESULT_TYPEDEF_(0x800F0223) #define SPAPI_E_INVALID_PROPPAGE_PROVIDER _HRESULT_TYPEDEF_(0x800F0224) #define SPAPI_E_NO_SUCH_DEVICE_INTERFACE _HRESULT_TYPEDEF_(0x800F0225) #define SPAPI_E_DI_POSTPROCESSING_REQUIRED _HRESULT_TYPEDEF_(0x800F0226) #define SPAPI_E_INVALID_COINSTALLER _HRESULT_TYPEDEF_(0x800F0227) #define SPAPI_E_NO_COMPAT_DRIVERS _HRESULT_TYPEDEF_(0x800F0228) #define SPAPI_E_NO_DEVICE_ICON _HRESULT_TYPEDEF_(0x800F0229) #define SPAPI_E_INVALID_INF_LOGCONFIG _HRESULT_TYPEDEF_(0x800F022A) #define SPAPI_E_DI_DONT_INSTALL _HRESULT_TYPEDEF_(0x800F022B) #define SPAPI_E_INVALID_FILTER_DRIVER _HRESULT_TYPEDEF_(0x800F022C) #define SPAPI_E_NON_WINDOWS_NT_DRIVER _HRESULT_TYPEDEF_(0x800F022D) #define SPAPI_E_NON_WINDOWS_DRIVER _HRESULT_TYPEDEF_(0x800F022E) #define SPAPI_E_NO_CATALOG_FOR_OEM_INF _HRESULT_TYPEDEF_(0x800F022F) #define SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE _HRESULT_TYPEDEF_(0x800F0230) #define SPAPI_E_NOT_DISABLEABLE _HRESULT_TYPEDEF_(0x800F0231) #define SPAPI_E_CANT_REMOVE_DEVINST _HRESULT_TYPEDEF_(0x800F0232) #define SPAPI_E_INVALID_TARGET _HRESULT_TYPEDEF_(0x800F0233) #define SPAPI_E_DRIVER_NONNATIVE _HRESULT_TYPEDEF_(0x800F0234) #define SPAPI_E_IN_WOW64 _HRESULT_TYPEDEF_(0x800F0235) #define SPAPI_E_SET_SYSTEM_RESTORE_POINT _HRESULT_TYPEDEF_(0x800F0236) #define SPAPI_E_INCORRECTLY_COPIED_INF _HRESULT_TYPEDEF_(0x800F0237) #define SPAPI_E_SCE_DISABLED _HRESULT_TYPEDEF_(0x800F0238) #define SPAPI_E_ERROR_NOT_INSTALLED _HRESULT_TYPEDEF_(0x800F1000) /* Smart card management error codes */ #define SCARD_S_SUCCESS NO_ERROR #define SCARD_F_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x80100001) #define SCARD_E_CANCELLED _HRESULT_TYPEDEF_(0x80100002) #define SCARD_E_INVALID_HANDLE _HRESULT_TYPEDEF_(0x80100003) #define SCARD_E_INVALID_PARAMETER _HRESULT_TYPEDEF_(0x80100004) #define SCARD_E_INVALID_TARGET _HRESULT_TYPEDEF_(0x80100005) #define SCARD_E_NO_MEMORY _HRESULT_TYPEDEF_(0x80100006) #define SCARD_F_WAITED_TOO_LONG _HRESULT_TYPEDEF_(0x80100007) #define SCARD_E_INSUFFICIENT_BUFFER _HRESULT_TYPEDEF_(0x80100008) #define SCARD_E_UNKNOWN_READER _HRESULT_TYPEDEF_(0x80100009) #define SCARD_E_TIMEOUT _HRESULT_TYPEDEF_(0x8010000A) #define SCARD_E_SHARING_VIOLATION _HRESULT_TYPEDEF_(0x8010000B) #define SCARD_E_NO_SMARTCARD _HRESULT_TYPEDEF_(0x8010000C) #define SCARD_E_UNKNOWN_CARD _HRESULT_TYPEDEF_(0x8010000D) #define SCARD_E_CANT_DISPOSE _HRESULT_TYPEDEF_(0x8010000E) #define SCARD_E_PROTO_MISMATCH _HRESULT_TYPEDEF_(0x8010000F) #define SCARD_E_NOT_READY _HRESULT_TYPEDEF_(0x80100010) #define SCARD_E_INVALID_VALUE _HRESULT_TYPEDEF_(0x80100011) #define SCARD_E_SYSTEM_CANCELLED _HRESULT_TYPEDEF_(0x80100012) #define SCARD_F_COMM_ERROR _HRESULT_TYPEDEF_(0x80100013) #define SCARD_F_UNKNOWN_ERROR _HRESULT_TYPEDEF_(0x80100014) #define SCARD_E_INVALID_ATR _HRESULT_TYPEDEF_(0x80100015) #define SCARD_E_NOT_TRANSACTED _HRESULT_TYPEDEF_(0x80100016) #define SCARD_E_READER_UNAVAILABLE _HRESULT_TYPEDEF_(0x80100017) #define SCARD_P_SHUTDOWN _HRESULT_TYPEDEF_(0x80100018) #define SCARD_E_PCI_TOO_SMALL _HRESULT_TYPEDEF_(0x80100019) #define SCARD_E_READER_UNSUPPORTED _HRESULT_TYPEDEF_(0x8010001A) #define SCARD_E_DUPLICATE_READER _HRESULT_TYPEDEF_(0x8010001B) #define SCARD_E_CARD_UNSUPPORTED _HRESULT_TYPEDEF_(0x8010001C) #define SCARD_E_NO_SERVICE _HRESULT_TYPEDEF_(0x8010001D) #define SCARD_E_SERVICE_STOPPED _HRESULT_TYPEDEF_(0x8010001E) #define SCARD_E_UNEXPECTED _HRESULT_TYPEDEF_(0x8010001F) #define SCARD_E_ICC_INSTALLATION _HRESULT_TYPEDEF_(0x80100020) #define SCARD_E_ICC_CREATEORDER _HRESULT_TYPEDEF_(0x80100021) #define SCARD_E_UNSUPPORTED_FEATURE _HRESULT_TYPEDEF_(0x80100022) #define SCARD_E_DIR_NOT_FOUND _HRESULT_TYPEDEF_(0x80100023) #define SCARD_E_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0x80100024) #define SCARD_E_NO_DIR _HRESULT_TYPEDEF_(0x80100025) #define SCARD_E_NO_FILE _HRESULT_TYPEDEF_(0x80100026) #define SCARD_E_NO_ACCESS _HRESULT_TYPEDEF_(0x80100027) #define SCARD_E_WRITE_TOO_MANY _HRESULT_TYPEDEF_(0x80100028) #define SCARD_E_BAD_SEEK _HRESULT_TYPEDEF_(0x80100029) #define SCARD_E_INVALID_CHV _HRESULT_TYPEDEF_(0x8010002A) #define SCARD_E_UNKNOWN_RES_MNG _HRESULT_TYPEDEF_(0x8010002B) #define SCARD_E_NO_SUCH_CERTIFICATE _HRESULT_TYPEDEF_(0x8010002C) #define SCARD_E_CERTIFICATE_UNAVAILABLE _HRESULT_TYPEDEF_(0x8010002D) #define SCARD_E_NO_READERS_AVAILABLE _HRESULT_TYPEDEF_(0x8010002E) #define SCARD_E_COMM_DATA_LOST _HRESULT_TYPEDEF_(0x8010002F) #define SCARD_E_NO_KEY_CONTAINER _HRESULT_TYPEDEF_(0x80100030) #define SCARD_E_SERVER_TOO_BUSY _HRESULT_TYPEDEF_(0x80100031) #define SCARD_W_UNSUPPORTED_CARD _HRESULT_TYPEDEF_(0x80100065) #define SCARD_W_UNRESPONSIVE_CARD _HRESULT_TYPEDEF_(0x80100066) #define SCARD_W_UNPOWERED_CARD _HRESULT_TYPEDEF_(0x80100067) #define SCARD_W_RESET_CARD _HRESULT_TYPEDEF_(0x80100068) #define SCARD_W_REMOVED_CARD _HRESULT_TYPEDEF_(0x80100069) #define SCARD_W_SECURITY_VIOLATION _HRESULT_TYPEDEF_(0x8010006A) #define SCARD_W_WRONG_CHV _HRESULT_TYPEDEF_(0x8010006B) #define SCARD_W_CHV_BLOCKED _HRESULT_TYPEDEF_(0x8010006C) #define SCARD_W_EOF _HRESULT_TYPEDEF_(0x8010006D) #define SCARD_W_CANCELLED_BY_USER _HRESULT_TYPEDEF_(0x8010006E) #define SCARD_W_CARD_NOT_AUTHENTICATED _HRESULT_TYPEDEF_(0x8010006F) #define SCARD_W_CACHE_ITEM_NOT_FOUND _HRESULT_TYPEDEF_(0x80100070) #define SCARD_W_CACHE_ITEM_STALE _HRESULT_TYPEDEF_(0x80100071) #define SCARD_W_CACHE_ITEM_TOO_BIG _HRESULT_TYPEDEF_(0x80100072) #define WININET_E_OUT_OF_HANDLES _HRESULT_TYPEDEF_(0x80072ee1) #define WININET_E_TIMEOUT _HRESULT_TYPEDEF_(0x80072ee2) #define WININET_E_EXTENDED_ERROR _HRESULT_TYPEDEF_(0x80072ee3) #define WININET_E_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x80072ee4) #define WININET_E_INVALID_URL _HRESULT_TYPEDEF_(0x80072ee5) #define WININET_E_UNRECOGNIZED_SCHEME _HRESULT_TYPEDEF_(0x80072ee6) #define WININET_E_NAME_NOT_RESOLVED _HRESULT_TYPEDEF_(0x80072ee7) #define WININET_E_PROTOCOL_NOT_FOUND _HRESULT_TYPEDEF_(0x80072ee8) #define WININET_E_INVALID_OPTION _HRESULT_TYPEDEF_(0x80072ee9) #define WININET_E_BAD_OPTION_LENGTH _HRESULT_TYPEDEF_(0x80072eea) #define WININET_E_OPTION_NOT_SETTABLE _HRESULT_TYPEDEF_(0x80072eeb) #define WININET_E_SHUTDOWN _HRESULT_TYPEDEF_(0x80072eec) #define WININET_E_INCORRECT_USER_NAME _HRESULT_TYPEDEF_(0x80072eed) #define WININET_E_INCORRECT_PASSWORD _HRESULT_TYPEDEF_(0x80072eee) #define WININET_E_LOGIN_FAILURE _HRESULT_TYPEDEF_(0x80072eef) #define WININET_E_INVALID_OPERATION _HRESULT_TYPEDEF_(0x80072ef0) #define WININET_E_OPERATION_CANCELLED _HRESULT_TYPEDEF_(0x80072ef1) #define WININET_E_INCORRECT_HANDLE_TYPE _HRESULT_TYPEDEF_(0x80072ef2) #define WININET_E_INCORRECT_HANDLE_STATE _HRESULT_TYPEDEF_(0x80072ef3) #define WININET_E_NOT_PROXY_REQUEST _HRESULT_TYPEDEF_(0x80072ef4) #define WININET_E_REGISTRY_VALUE_NOT_FOUND _HRESULT_TYPEDEF_(0x80072ef5) #define WININET_E_BAD_REGISTRY_PARAMETER _HRESULT_TYPEDEF_(0x80072ef6) #define WININET_E_NO_DIRECT_ACCESS _HRESULT_TYPEDEF_(0x80072ef7) #define WININET_E_NO_CONTEXT _HRESULT_TYPEDEF_(0x80072ef8) #define WININET_E_NO_CALLBACK _HRESULT_TYPEDEF_(0x80072ef9) #define WININET_E_REQUEST_PENDING _HRESULT_TYPEDEF_(0x80072efa) #define WININET_E_INCORRECT_FORMAT _HRESULT_TYPEDEF_(0x80072efb) #define WININET_E_ITEM_NOT_FOUND _HRESULT_TYPEDEF_(0x80072efc) #define WININET_E_CANNOT_CONNECT _HRESULT_TYPEDEF_(0x80072efd) #define WININET_E_CONNECTION_ABORTED _HRESULT_TYPEDEF_(0x80072efe) #define WININET_E_CONNECTION_RESET _HRESULT_TYPEDEF_(0x80072eff) #define WININET_E_FORCE_RETRY _HRESULT_TYPEDEF_(0x80072f00) #define WININET_E_INVALID_PROXY_REQUEST _HRESULT_TYPEDEF_(0x80072f01) #define WININET_E_NEED_UI _HRESULT_TYPEDEF_(0x80072f02) #define WININET_E_HANDLE_EXISTS _HRESULT_TYPEDEF_(0x80072f04) #define WININET_E_SEC_CERT_DATE_INVALID _HRESULT_TYPEDEF_(0x80072f05) #define WININET_E_SEC_CERT_CN_INVALID _HRESULT_TYPEDEF_(0x80072f06) #define WININET_E_HTTP_TO_HTTPS_ON_REDIR _HRESULT_TYPEDEF_(0x80072f07) #define WININET_E_HTTPS_TO_HTTP_ON_REDIR _HRESULT_TYPEDEF_(0x80072f08) #define WININET_E_MIXED_SECURITY _HRESULT_TYPEDEF_(0x80072f09) #define WININET_E_CHG_POST_IS_NON_SECURE _HRESULT_TYPEDEF_(0x80072f0a) #define WININET_E_POST_IS_NON_SECURE _HRESULT_TYPEDEF_(0x80072f0b) #define WININET_E_CLIENT_AUTH_CERT_NEEDED _HRESULT_TYPEDEF_(0x80072f0c) #define WININET_E_INVALID_CA _HRESULT_TYPEDEF_(0x80072f0d) #define WININET_E_CLIENT_AUTH_NOT_SETUP _HRESULT_TYPEDEF_(0x80072f0e) #define WININET_E_ASYNC_THREAD_FAILED _HRESULT_TYPEDEF_(0x80072f0f) #define WININET_E_REDIRECT_SCHEME_CHANGE _HRESULT_TYPEDEF_(0x80072f10) #define WININET_E_DIALOG_PENDING _HRESULT_TYPEDEF_(0x80072f11) #define WININET_E_RETRY_DIALOG _HRESULT_TYPEDEF_(0x80072f12) #define WININET_E_NO_NEW_CONTAINERS _HRESULT_TYPEDEF_(0x80072f13) #define WININET_E_HTTPS_HTTP_SUBMIT_REDIR _HRESULT_TYPEDEF_(0x80072f14) #define WININET_E_SEC_CERT_ERRORS _HRESULT_TYPEDEF_(0x80072f17) #define WININET_E_SEC_CERT_REV_FAILED _HRESULT_TYPEDEF_(0x80072f19) #define WININET_E_HEADER_NOT_FOUND _HRESULT_TYPEDEF_(0x80072f76) #define WININET_E_DOWNLEVEL_SERVER _HRESULT_TYPEDEF_(0x80072f77) #define WININET_E_INVALID_SERVER_RESPONSE _HRESULT_TYPEDEF_(0x80072f78) #define WININET_E_INVALID_HEADER _HRESULT_TYPEDEF_(0x80072f79) #define WININET_E_INVALID_QUERY_REQUEST _HRESULT_TYPEDEF_(0x80072f7a) #define WININET_E_HEADER_ALREADY_EXISTS _HRESULT_TYPEDEF_(0x80072f7b) #define WININET_E_REDIRECT_FAILED _HRESULT_TYPEDEF_(0x80072f7c) #define WININET_E_SECURITY_CHANNEL_ERROR _HRESULT_TYPEDEF_(0x80072f7d) #define WININET_E_UNABLE_TO_CACHE_FILE _HRESULT_TYPEDEF_(0x80072f7e) #define WININET_E_TCPIP_NOT_INSTALLED _HRESULT_TYPEDEF_(0x80072f7f) #define WININET_E_NOT_REDIRECTED _HRESULT_TYPEDEF_(0x80072f80) #define WININET_E_COOKIE_NEEDS_CONFIRMATION _HRESULT_TYPEDEF_(0x80072f81) #define WININET_E_COOKIE_DECLINED _HRESULT_TYPEDEF_(0x80072f82) #define WININET_E_DISCONNECTED _HRESULT_TYPEDEF_(0x80072f83) #define WININET_E_SERVER_UNREACHABLE _HRESULT_TYPEDEF_(0x80072f84) #define WININET_E_PROXY_SERVER_UNREACHABLE _HRESULT_TYPEDEF_(0x80072f85) #define WININET_E_BAD_AUTO_PROXY_SCRIPT _HRESULT_TYPEDEF_(0x80072f86) #define WININET_E_UNABLE_TO_DOWNLOAD_SCRIPT _HRESULT_TYPEDEF_(0x80072f87) #define WININET_E_REDIRECT_NEEDS_CONFIRMATION _HRESULT_TYPEDEF_(0x80072f88) #define WININET_E_SEC_INVALID_CERT _HRESULT_TYPEDEF_(0x80072f89) #define WININET_E_SEC_CERT_REVOKED _HRESULT_TYPEDEF_(0x80072f8a) #define WININET_E_FAILED_DUETOSECURITYCHECK _HRESULT_TYPEDEF_(0x80072f8b) #define WININET_E_NOT_INITIALIZED _HRESULT_TYPEDEF_(0x80072f8c) #define WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY _HRESULT_TYPEDEF_(0x80072f8e) #define WININET_E_DECODING_FAILED _HRESULT_TYPEDEF_(0x80072f8f) #define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS _HRESULT_TYPEDEF_(0x887c0001) #define D3D11_ERROR_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0x887c0002) #define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS _HRESULT_TYPEDEF_(0x887c0003) #define D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD _HRESULT_TYPEDEF_(0x887c0004) #define WINCODEC_ERR_WRONGSTATE _HRESULT_TYPEDEF_(0x88982f04) #define WINCODEC_ERR_VALUEOUTOFRANGE _HRESULT_TYPEDEF_(0x88982f05) #define WINCODEC_ERR_UNKNOWNIMAGEFORMAT _HRESULT_TYPEDEF_(0x88982f07) #define WINCODEC_ERR_UNSUPPORTEDVERSION _HRESULT_TYPEDEF_(0x88982f0b) #define WINCODEC_ERR_NOTINITIALIZED _HRESULT_TYPEDEF_(0x88982f0c) #define WINCODEC_ERR_ALREADYLOCKED _HRESULT_TYPEDEF_(0x88982f0d) #define WINCODEC_ERR_PROPERTYNOTFOUND _HRESULT_TYPEDEF_(0x88982f40) #define WINCODEC_ERR_PROPERTYNOTSUPPORTED _HRESULT_TYPEDEF_(0x88982f41) #define WINCODEC_ERR_PROPERTYSIZE _HRESULT_TYPEDEF_(0x88982f42) #define WINCODEC_ERR_CODECPRESENT _HRESULT_TYPEDEF_(0x88982f43) #define WINCODEC_ERR_CODECNOTHUMBNAIL _HRESULT_TYPEDEF_(0x88982f44) #define WINCODEC_ERR_PALETTEUNAVAILABLE _HRESULT_TYPEDEF_(0x88982f45) #define WINCODEC_ERR_CODECTOOMANYSCANLINES _HRESULT_TYPEDEF_(0x88982f46) #define WINCODEC_ERR_INTERNALERROR _HRESULT_TYPEDEF_(0x88982f48) #define WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS _HRESULT_TYPEDEF_(0x88982f49) #define WINCODEC_ERR_COMPONENTNOTFOUND _HRESULT_TYPEDEF_(0x88982f50) #define WINCODEC_ERR_IMAGESIZEOUTOFRANGE _HRESULT_TYPEDEF_(0x88982f51) #define WINCODEC_ERR_TOOMUCHMETADATA _HRESULT_TYPEDEF_(0x88982f52) #define WINCODEC_ERR_BADIMAGE _HRESULT_TYPEDEF_(0x88982f60) #define WINCODEC_ERR_BADHEADER _HRESULT_TYPEDEF_(0x88982f61) #define WINCODEC_ERR_FRAMEMISSING _HRESULT_TYPEDEF_(0x88982f62) #define WINCODEC_ERR_BADMETADATAHEADER _HRESULT_TYPEDEF_(0x88982f63) #define WINCODEC_ERR_BADSTREAMDATA _HRESULT_TYPEDEF_(0x88982f70) #define WINCODEC_ERR_STREAMWRITE _HRESULT_TYPEDEF_(0x88982f71) #define WINCODEC_ERR_STREAMREAD _HRESULT_TYPEDEF_(0x88982f72) #define WINCODEC_ERR_STREAMNOTAVAILABLE _HRESULT_TYPEDEF_(0x88982f73) #define WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT _HRESULT_TYPEDEF_(0x88982f80) #define WINCODEC_ERR_UNSUPPORTEDOPERATION _HRESULT_TYPEDEF_(0x88982f81) #define WINCODEC_ERR_INVALIDREGISTRATION _HRESULT_TYPEDEF_(0x88982f8a) #define WINCODEC_ERR_COMPONENTINITIALIZEFAILURE _HRESULT_TYPEDEF_(0x88982f8b) #define WINCODEC_ERR_INSUFFICIENTBUFFER _HRESULT_TYPEDEF_(0x88982f8c) #define WINCODEC_ERR_DUPLICATEMETADATAPRESENT _HRESULT_TYPEDEF_(0x88982f8d) #define WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE _HRESULT_TYPEDEF_(0x88982f8e) #define WINCODEC_ERR_UNEXPECTEDSIZE _HRESULT_TYPEDEF_(0x88982f8f) #define WINCODEC_ERR_INVALIDQUERYREQUEST _HRESULT_TYPEDEF_(0x88982f90) #define WINCODEC_ERR_UNEXPECTEDMETADATATYPE _HRESULT_TYPEDEF_(0x88982f91) #define WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT _HRESULT_TYPEDEF_(0x88982f92) #define WINCODEC_ERR_INVALIDQUERYCHARACTER _HRESULT_TYPEDEF_(0x88982f93) #define WINCODEC_ERR_WIN32ERROR _HRESULT_TYPEDEF_(0x88982f94) #define WINCODEC_ERR_INVALIDPROGRESSIVELEVEL _HRESULT_TYPEDEF_(0x88982f95) #define DWRITE_E_FILEFORMAT _HRESULT_TYPEDEF_(0x88985000) #define DWRITE_E_UNEXPECTED _HRESULT_TYPEDEF_(0x88985001) #define DWRITE_E_NOFONT _HRESULT_TYPEDEF_(0x88985002) #define DWRITE_E_FILENOTFOUND _HRESULT_TYPEDEF_(0x88985003) #define DWRITE_E_FILEACCESS _HRESULT_TYPEDEF_(0x88985004) #define DWRITE_E_FONTCOLLECTIONOBSOLETE _HRESULT_TYPEDEF_(0x88985005) #define DWRITE_E_ALREADYREGISTERED _HRESULT_TYPEDEF_(0x88985006) #define DWRITE_E_CACHEFORMAT _HRESULT_TYPEDEF_(0x88985007) #define DWRITE_E_CACHEVERSION _HRESULT_TYPEDEF_(0x88985008) #define DWRITE_E_UNSUPPORTEDOPERATION _HRESULT_TYPEDEF_(0x88985009) #define DWRITE_E_TEXTRENDERERINCOMPATIBLE _HRESULT_TYPEDEF_(0x8898500A) #define DWRITE_E_FLOWDIRECTIONCONFLICTS _HRESULT_TYPEDEF_(0x8898500B) #define DWRITE_E_NOCOLOR _HRESULT_TYPEDEF_(0x8898500C) #define D2DERR_WRONG_STATE _HRESULT_TYPEDEF_(0x88990001) #define D2DERR_NOT_INITIALIZED _HRESULT_TYPEDEF_(0x88990002) #define D2DERR_UNSUPPORTED_OPERATION _HRESULT_TYPEDEF_(0x88990003) #define D2DERR_SCANNER_FAILED _HRESULT_TYPEDEF_(0x88990004) #define D2DERR_SCREEN_ACCESS_DENIED _HRESULT_TYPEDEF_(0x88990005) #define D2DERR_DISPLAY_STATE_INVALID _HRESULT_TYPEDEF_(0x88990006) #define D2DERR_ZERO_VECTOR _HRESULT_TYPEDEF_(0x88990007) #define D2DERR_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x88990008) #define D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x88990009) #define D2DERR_INVALID_CALL _HRESULT_TYPEDEF_(0x8899000a) #define D2DERR_NO_HARDWARE_DEVICE _HRESULT_TYPEDEF_(0x8899000b) #define D2DERR_RECREATE_TARGET _HRESULT_TYPEDEF_(0x8899000c) #define D2DERR_TOO_MANY_SHADER_ELEMENTS _HRESULT_TYPEDEF_(0x8899000d) #define D2DERR_SHADER_COMPILE_FAILED _HRESULT_TYPEDEF_(0x8899000e) #define D2DERR_MAX_TEXTURE_SIZE_EXCEEDED _HRESULT_TYPEDEF_(0x8899000f) #define D2DERR_UNSUPPORTED_VERSION _HRESULT_TYPEDEF_(0x88990010) #define D2DERR_BAD_NUMBER _HRESULT_TYPEDEF_(0x88990011) #define D2DERR_WRONG_FACTORY _HRESULT_TYPEDEF_(0x88990012) #define D2DERR_LAYER_ALREADY_IN_USE _HRESULT_TYPEDEF_(0x88990013) #define D2DERR_POP_CALL_DID_NOT_MATCH_PUSH _HRESULT_TYPEDEF_(0x88990014) #define D2DERR_WRONG_RESOURCE_DOMAIN _HRESULT_TYPEDEF_(0x88990015) #define D2DERR_PUSH_POP_UNBALANCED _HRESULT_TYPEDEF_(0x88990016) #define D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT _HRESULT_TYPEDEF_(0x88990017) #define D2DERR_INCOMPATIBLE_BRUSH_TYPES _HRESULT_TYPEDEF_(0x88990018) #define D2DERR_WIN32_ERROR _HRESULT_TYPEDEF_(0x88990019) #define D2DERR_TARGET_NOT_GDI_COMPATIBLE _HRESULT_TYPEDEF_(0x8899001a) #define D2DERR_TEXT_EFFECT_IS_WRONG_TYPE _HRESULT_TYPEDEF_(0x8899001b) #define D2DERR_TEXT_RENDERER_NOT_RELEASED _HRESULT_TYPEDEF_(0x8899001c) #define D2DERR_EXCEEDS_MAX_BITMAP_SIZE _HRESULT_TYPEDEF_(0x8899001d) #define D2DERR_INVALID_GRAPH_CONFIGURATION _HRESULT_TYPEDEF_(0x8899001e) #define D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION _HRESULT_TYPEDEF_(0x8899001f) #define D2DERR_CYCLIC_GRAPH _HRESULT_TYPEDEF_(0x88990020) #define D2DERR_BITMAP_CANNOT_DRAW _HRESULT_TYPEDEF_(0x88990021) #define D2DERR_OUTSTANDING_BITMAP_REFERENCES _HRESULT_TYPEDEF_(0x88990022) #define D2DERR_ORIGINAL_TARGET_NOT_BOUND _HRESULT_TYPEDEF_(0x88990023) #define D2DERR_INVALID_TARGET _HRESULT_TYPEDEF_(0x88990024) #define D2DERR_BITMAP_BOUND_AS_TARGET _HRESULT_TYPEDEF_(0x88990025) #define D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES _HRESULT_TYPEDEF_(0x88990026) #define D2DERR_INTERMEDIATE_TOO_LARGE _HRESULT_TYPEDEF_(0x88990027) #define D2DERR_EFFECT_IS_NOT_REGISTERED _HRESULT_TYPEDEF_(0x88990028) #define D2DERR_INVALID_PROPERTY _HRESULT_TYPEDEF_(0x88990029) #define D2DERR_NO_SUBPROPERTIES _HRESULT_TYPEDEF_(0x8899002a) #define D2DERR_PRINT_JOB_CLOSED _HRESULT_TYPEDEF_(0x8899002b) #define D2DERR_PRINT_FORMAT_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8899002c) #define D2DERR_TOO_MANY_TRANSFORM_INPUTS _HRESULT_TYPEDEF_(0x8899002d) #define DXGI_STATUS_OCCLUDED _HRESULT_TYPEDEF_(0x087a0001) #define DXGI_STATUS_CLIPPED _HRESULT_TYPEDEF_(0x087a0002) #define DXGI_STATUS_NO_REDIRECTION _HRESULT_TYPEDEF_(0x087a0004) #define DXGI_STATUS_NO_DESKTOP_ACCESS _HRESULT_TYPEDEF_(0x087a0005) #define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE _HRESULT_TYPEDEF_(0x087a0006) #define DXGI_STATUS_MODE_CHANGED _HRESULT_TYPEDEF_(0x087a0007) #define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS _HRESULT_TYPEDEF_(0x087a0008) #define DXGI_STATUS_UNOCCLUDED _HRESULT_TYPEDEF_(0x087a0009) #define DXGI_STATUS_DDA_WAS_STILL_DRAWING _HRESULT_TYPEDEF_(0x087a000a) #define DXGI_STATUS_PRESENT_REQUIRED _HRESULT_TYPEDEF_(0x087a002f) #define DXGI_ERROR_INVALID_CALL _HRESULT_TYPEDEF_(0x887a0001) #define DXGI_ERROR_NOT_FOUND _HRESULT_TYPEDEF_(0x887a0002) #define DXGI_ERROR_MORE_DATA _HRESULT_TYPEDEF_(0x887a0003) #define DXGI_ERROR_UNSUPPORTED _HRESULT_TYPEDEF_(0x887a0004) #define DXGI_ERROR_DEVICE_REMOVED _HRESULT_TYPEDEF_(0x887a0005) #define DXGI_ERROR_DEVICE_HUNG _HRESULT_TYPEDEF_(0x887a0006) #define DXGI_ERROR_DEVICE_RESET _HRESULT_TYPEDEF_(0x887a0007) #define DXGI_ERROR_WAS_STILL_DRAWING _HRESULT_TYPEDEF_(0x887a000a) #define DXGI_ERROR_FRAME_STATISTICS_DISJOINT _HRESULT_TYPEDEF_(0x887a000b) #define DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE _HRESULT_TYPEDEF_(0x887a000c) #define DXGI_ERROR_DRIVER_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x887a0020) #define DXGI_ERROR_NONEXCLUSIVE _HRESULT_TYPEDEF_(0x887a0021) #define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE _HRESULT_TYPEDEF_(0x887a0022) #define DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED _HRESULT_TYPEDEF_(0x887a0023) #define DXGI_ERROR_REMOTE_OUTOFMEMORY _HRESULT_TYPEDEF_(0x887a0024) #define DXGI_ERROR_ACCESS_LOST _HRESULT_TYPEDEF_(0x887a0026) #define DXGI_ERROR_WAIT_TIMEOUT _HRESULT_TYPEDEF_(0x887a0027) #define DXGI_ERROR_SESSION_DISCONNECTED _HRESULT_TYPEDEF_(0x887a0028) #define DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE _HRESULT_TYPEDEF_(0x887a0029) #define DXGI_ERROR_CANNOT_PROTECT_CONTENT _HRESULT_TYPEDEF_(0x887a002a) #define DXGI_ERROR_ACCESS_DENIED _HRESULT_TYPEDEF_(0x887a002b) #define DXGI_ERROR_NAME_ALREADY_EXISTS _HRESULT_TYPEDEF_(0x887a002c) #define DXGI_ERROR_SDK_COMPONENT_MISSING _HRESULT_TYPEDEF_(0x887a002d) #define DXGI_ERROR_NOT_CURRENT _HRESULT_TYPEDEF_(0x887a002e) #define DXGI_ERROR_HW_PROTECTION_OUTOFMEMORY _HRESULT_TYPEDEF_(0x887a0030) #define DXGI_ERROR_MODE_CHANGE_IN_PROGRESS _HRESULT_TYPEDEF_(0x887a0025) #define ERROR_AUDITING_DISABLED _HRESULT_TYPEDEF_(0xC0090001) #define ERROR_ALL_SIDS_FILTERED _HRESULT_TYPEDEF_(0xC0090002) #endif /* __WINE_WINERROR_H */ ================================================ FILE: wine/windows/winevt.h ================================================ /* Definitions for the Windows Event Log (wevtapi.dll) * * Copyright 2012 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINEVT_H #define __WINE_WINEVT_H #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef HANDLE EVT_HANDLE, *PEVT_HANDLE; typedef enum _EVT_CHANNEL_CONFIG_PROPERTY_ID { EvtChannelConfigEnabled = 0, EvtChannelConfigIsolation, EvtChannelConfigType, EvtChannelConfigOwningPublisher, EvtChannelConfigClassicEventlog, EvtChannelConfigAccess, EvtChannelLoggingConfigRetention, EvtChannelLoggingConfigAutoBackup, EvtChannelLoggingConfigMaxSize, EvtChannelLoggingConfigLogFilePath, EvtChannelPublishingConfigLevel, EvtChannelPublishingConfigKeywords, EvtChannelPublishingConfigControlGuid, EvtChannelPublishingConfigBufferSize, EvtChannelPublishingConfigMinBuffers, EvtChannelPublishingConfigMaxBuffers, EvtChannelPublishingConfigLatency, EvtChannelPublishingConfigClockType, EvtChannelPublishingConfigSidType, EvtChannelPublisherList, EvtChannelPublishingConfigFileMax, EvtChannelConfigPropertyIdEND } EVT_CHANNEL_CONFIG_PROPERTY_ID; typedef enum _EVT_LOGIN_CLASS { EvtRpcLogin = 1 } EVT_LOGIN_CLASS; typedef enum _EVT_SUBSCRIBE_NOTIFY_ACTION { EvtSubscribeActionError = 0, EvtSubscribeActionDeliver } EVT_SUBSCRIBE_NOTIFY_ACTION; typedef struct _EVT_VARIANT { union { BOOL BooleanVal; INT8 SByteVal; INT16 Int16Val; INT32 Int32Val; INT64 Int64Val; UINT8 ByteVal; UINT16 UInt16Val; UINT32 UInt32Val; UINT64 UInt64Val; FLOAT SingleVal; DOUBLE DoubleVal; ULONGLONG FileTimeVal; SYSTEMTIME* SysTimeVal; GUID* GuidVal; LPCWSTR StringVal; LPCSTR AnsiStringVal; PBYTE BinaryVal; PSID SidVal; SIZE_T SizeTVal; BOOL* BooleanArr; INT8* SByteArr; INT16* Int16Arr; INT32* Int32Arr; INT64* Int64Arr; UINT8* ByteArr; UINT16* UInt16Arr; UINT32* UInt32Arr; UINT64* UInt64Arr; FLOAT* SingleArr; DOUBLE* DoubleArr; FILETIME* FileTimeArr; SYSTEMTIME* SysTimeArr; GUID* GuidArr; LPWSTR* StringArr; LPSTR* AnsiStringArr; PSID* SidArr; SIZE_T* SizeTArr; EVT_HANDLE EvtHandleVal; LPCWSTR XmlVal; LPCWSTR* XmlValArr; } DUMMYUNIONNAME; DWORD Count; DWORD Type; } EVT_VARIANT, *PEVT_VARIANT; typedef DWORD (WINAPI *EVT_SUBSCRIBE_CALLBACK)(EVT_SUBSCRIBE_NOTIFY_ACTION Action, PVOID UserContext, EVT_HANDLE Event); BOOL WINAPI EvtExportLog(EVT_HANDLE session, const WCHAR *path, const WCHAR *query, const WCHAR *file, DWORD flags); BOOL WINAPI EvtGetChannelConfigProperty(EVT_HANDLE ChannelConfig, EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId, DWORD Flags, DWORD PropertyValueBufferSize, PEVT_VARIANT PropertyValueBuffer, PDWORD PropertyValueBufferUsed); BOOL WINAPI EvtSetChannelConfigProperty(EVT_HANDLE ChannelConfig, EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId, DWORD Flags, PEVT_VARIANT PropertyValue); EVT_HANDLE WINAPI EvtSubscribe(EVT_HANDLE Session, HANDLE SignalEvent, LPCWSTR ChannelPath, LPCWSTR Query, EVT_HANDLE Bookmark, PVOID context, EVT_SUBSCRIBE_CALLBACK Callback, DWORD Flags); EVT_HANDLE WINAPI EvtOpenChannelConfig(EVT_HANDLE Session, LPCWSTR ChannelPath, DWORD Flags); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_WINEVT_H */ ================================================ FILE: wine/windows/wingdi.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINGDI_ #define _WINGDI_ #ifndef NOGDI #ifdef __cplusplus extern "C" { #endif #ifdef _GDI32_ #define WINGDIAPI #else #define WINGDIAPI DECLSPEC_IMPORT #endif typedef struct _ABCFLOAT { FLOAT abcfA; FLOAT abcfB; FLOAT abcfC; } ABCFLOAT, *PABCFLOAT, *LPABCFLOAT; #define FONTMAPPER_MAX 10 typedef struct { WORD wFirst; WORD wSecond; INT iKernAmount; } KERNINGPAIR, *LPKERNINGPAIR; typedef struct tagPIXELFORMATDESCRIPTOR { WORD nSize; WORD nVersion; DWORD dwFlags; BYTE iPixelType; BYTE cColorBits; BYTE cRedBits; BYTE cRedShift; BYTE cGreenBits; BYTE cGreenShift; BYTE cBlueBits; BYTE cBlueShift; BYTE cAlphaBits; BYTE cAlphaShift; BYTE cAccumBits; BYTE cAccumRedBits; BYTE cAccumGreenBits; BYTE cAccumBlueBits; BYTE cAccumAlphaBits; BYTE cDepthBits; BYTE cStencilBits; BYTE cAuxBuffers; BYTE iLayerType; BYTE bReserved; DWORD dwLayerMask; DWORD dwVisibleMask; DWORD dwDamageMask; } PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR; #define PFD_TYPE_RGBA 0 #define PFD_TYPE_COLORINDEX 1 #define PFD_MAIN_PLANE 0 #define PFD_OVERLAY_PLANE 1 #define PFD_UNDERLAY_PLANE (-1) #define PFD_DOUBLEBUFFER 0x00000001 #define PFD_STEREO 0x00000002 #define PFD_DRAW_TO_WINDOW 0x00000004 #define PFD_DRAW_TO_BITMAP 0x00000008 #define PFD_SUPPORT_GDI 0x00000010 #define PFD_SUPPORT_OPENGL 0x00000020 #define PFD_GENERIC_FORMAT 0x00000040 #define PFD_NEED_PALETTE 0x00000080 #define PFD_NEED_SYSTEM_PALETTE 0x00000100 #define PFD_SWAP_EXCHANGE 0x00000200 #define PFD_SWAP_COPY 0x00000400 #define PFD_SWAP_LAYER_BUFFERS 0x00000800 #define PFD_GENERIC_ACCELERATED 0x00001000 #define PFD_SUPPORT_COMPOSITION 0x00008000 /* Vista stuff */ #define PFD_DEPTH_DONTCARE 0x20000000 #define PFD_DOUBLEBUFFER_DONTCARE 0x40000000 #define PFD_STEREO_DONTCARE 0x80000000 typedef struct tagCOLORADJUSTMENT { WORD caSize; WORD caFlags; WORD caIlluminantIndex; WORD caRedGamma; WORD caGreenGamma; WORD caBlueGamma; WORD caReferenceBlack; WORD caReferenceWhite; SHORT caContrast; SHORT caBrightness; SHORT caColorfulness; SHORT caRedGreenTint; } COLORADJUSTMENT, *PCOLORADJUSTMENT, *LPCOLORADJUSTMENT; #define CA_NEGATIVE 0x0001 #define CA_LOG_FILTER 0x0002 #define ILLUMINANT_DEVICE_DEFAULT 0 #define ILLUMINANT_A 1 #define ILLUMINANT_B 2 #define ILLUMINANT_C 3 #define ILLUMINANT_D50 4 #define ILLUMINANT_D55 5 #define ILLUMINANT_D65 6 #define ILLUMINANT_D75 7 #define ILLUMINANT_F2 8 #define ILLUMINANT_MAX_INDEX ILLUMINANT_F2 #define ILLUMINANT_TUNGSTEN ILLUMINANT_A #define ILLUMINANT_DAYLIGHT ILLUMINANT_C #define ILLUMINANT_FLUORESCENT ILLUMINANT_F2 #define ILLUMINANT_NTSC ILLUMINANT_C #define RGB_GAMMA_MIN (WORD)02500 #define RGB_GAMMA_MAX (WORD)65000 #define REFERENCE_WHITE_MIN (WORD)6000 #define REFERENCE_WHITE_MAX (WORD)10000 #define REFERENCE_BLACK_MIN (WORD)0 #define REFERENCE_BLACK_MAX (WORD)4000 #define COLOR_ADJ_MIN ((SHORT)-100) #define COLOR_ADJ_MAX (SHORT) 100 typedef LONG FXPT16DOT16, *LPFXPT16DOT16; typedef LONG FXPT2DOT30, *LPFXPT2DOT30; typedef LONG LCSCSTYPE; typedef LONG LCSGAMUTMATCH; #define LCS_sRGB 0x73524742 /* 'sRGB' */ #define LCS_WINDOWS_COLOR_SPACE 0x57696e20 /* 'Win ' */ #define LCS_CALIBRATED_RGB __MSABI_LONG(0x00000000) #define LCS_DEVICE_RGB __MSABI_LONG(0x00000001) #define LCS_DEVICE_CMYK __MSABI_LONG(0x00000002) #define LCS_GM_BUSINESS __MSABI_LONG(0x00000001) #define LCS_GM_GRAPHICS __MSABI_LONG(0x00000002) #define LCS_GM_IMAGES __MSABI_LONG(0x00000004) #define CM_OUT_OF_GAMUT 255 #define CM_IN_GAMUT 0 typedef struct tagCIEXYZ { FXPT2DOT30 ciexyzX; FXPT2DOT30 ciexyzY; FXPT2DOT30 ciexyzZ; } CIEXYZ, *LPCIEXYZ; typedef struct tagCIEXYZTRIPLE { CIEXYZ ciexyzRed; CIEXYZ ciexyzGreen; CIEXYZ ciexyzBlue; } CIEXYZTRIPLE, *LPCIEXYZTRIPLE; typedef struct tagLOGCOLORSPACEA { DWORD lcsSignature; DWORD lcsVersion; DWORD lcsSize; LCSCSTYPE lcsCSType; LCSGAMUTMATCH lcsIntent; CIEXYZTRIPLE lcsEndpoints; DWORD lcsGammaRed; DWORD lcsGammaGreen; DWORD lcsGammaBlue; CHAR lcsFilename[MAX_PATH]; } LOGCOLORSPACEA, *LPLOGCOLORSPACEA; typedef struct tagLOGCOLORSPACEW { DWORD lcsSignature; DWORD lcsVersion; DWORD lcsSize; LCSCSTYPE lcsCSType; LCSGAMUTMATCH lcsIntent; CIEXYZTRIPLE lcsEndpoints; DWORD lcsGammaRed; DWORD lcsGammaGreen; DWORD lcsGammaBlue; WCHAR lcsFilename[MAX_PATH]; } LOGCOLORSPACEW, *LPLOGCOLORSPACEW; DECL_WINELIB_TYPE_AW(LPLOGCOLORSPACE) DECL_WINELIB_TYPE_AW(LOGCOLORSPACE) #define DC_FIELDS 1 #define DC_PAPERS 2 #define DC_PAPERSIZE 3 #define DC_MINEXTENT 4 #define DC_MAXEXTENT 5 #define DC_BINS 6 #define DC_DUPLEX 7 #define DC_SIZE 8 #define DC_EXTRA 9 #define DC_VERSION 10 #define DC_DRIVER 11 #define DC_BINNAMES 12 #define DC_ENUMRESOLUTIONS 13 #define DC_FILEDEPENDENCIES 14 #define DC_TRUETYPE 15 #define DC_PAPERNAMES 16 #define DC_ORIENTATION 17 #define DC_COPIES 18 #define DC_BINADJUST 19 #define DC_EMF_COMPLIANT 20 #define DC_DATATYPE_PRODUCED 21 #define DC_COLLATE 22 #define DC_MANUFACTURER 23 #define DC_MODEL 24 #define DC_PERSONALITY 25 #define DC_PRINTRATE 26 #define DC_PRINTRATEUNIT 27 #define DC_PRINTERMEM 28 #define DC_MEDIAREADY 29 #define DC_STAPLE 30 #define DC_PRINTRATEPPM 31 #define DC_COLORDEVICE 32 #define DC_NUP 33 #define DC_MEDIATYPENAMES 34 #define DC_MEDIATYPES 35 #define DCTT_BITMAP __MSABI_LONG(0x00000001) #define DCTT_DOWNLOAD __MSABI_LONG(0x00000002) #define DCTT_SUBDEV __MSABI_LONG(0x00000004) #define DCTT_DOWNLOAD_OUTLINE __MSABI_LONG(0x00000008) #define DCBA_FACEUPNONE 0x0000 #define DCBA_FACEUPCENTER 0x0001 #define DCBA_FACEUPLEFT 0x0002 #define DCBA_FACEUPRIGHT 0x0003 #define DCBA_FACEDOWNNONE 0x0100 #define DCBA_FACEDOWNCENTER 0x0101 #define DCBA_FACEDOWNLEFT 0x0102 #define DCBA_FACEDOWNRIGHT 0x0103 #define PRINTRATEUNIT_PPM 1 #define PRINTRATEUNIT_CPS 2 #define PRINTRATEUNIT_LPM 3 #define PRINTRATEUNIT_IPM 4 /* Flag returned from Escape QUERYDIBSUPPORT */ #define QDI_SETDIBITS 1 #define QDI_GETDIBITS 2 #define QDI_DIBTOSCREEN 4 #define QDI_STRETCHDIB 8 /* GDI Escape commands */ #define NEWFRAME 1 #define ABORTDOC 2 #define NEXTBAND 3 #define SETCOLORTABLE 4 #define GETCOLORTABLE 5 #define FLUSHOUTPUT 6 #define DRAFTMODE 7 #define QUERYESCSUPPORT 8 #define SETABORTPROC 9 #define STARTDOC 10 #define ENDDOC 11 #define GETPHYSPAGESIZE 12 #define GETPRINTINGOFFSET 13 #define GETSCALINGFACTOR 14 #define MFCOMMENT 15 #define GETPENWIDTH 16 #define SETCOPYCOUNT 17 #define SELECTPAPERSOURCE 18 #define DEVICEDATA 19 #define PASSTHROUGH 19 #define GETTECHNOLGY 20 #define GETTECHNOLOGY 20 /* yes, both of them */ #define SETLINECAP 21 #define SETLINEJOIN 22 #define SETMITERLIMIT 23 #define BANDINFO 24 #define DRAWPATTERNRECT 25 #define GETVECTORPENSIZE 26 #define GETVECTORBRUSHSIZE 27 #define ENABLEDUPLEX 28 #define GETSETPAPERBINS 29 #define GETSETPRINTORIENT 30 #define ENUMPAPERBINS 31 #define SETDIBSCALING 32 #define EPSPRINTING 33 #define ENUMPAPERMETRICS 34 #define GETSETPAPERMETRICS 35 #define POSTSCRIPT_DATA 37 #define POSTSCRIPT_IGNORE 38 #define MOUSETRAILS 39 #define GETDEVICEUNITS 42 #define GETEXTENDEDTEXTMETRICS 256 #define GETEXTENTTABLE 257 #define GETPAIRKERNTABLE 258 #define GETTRACKKERNTABLE 259 #define EXTTEXTOUT 512 #define GETFACENAME 513 #define DOWNLOADFACE 514 #define ENABLERELATIVEWIDTHS 768 #define ENABLEPAIRKERNING 769 #define SETKERNTRACK 770 #define SETALLJUSTVALUES 771 #define SETCHARSET 772 #define STRETCHBLT 2048 #define GETSETSCREENPARAMS 3072 #define QUERYDIBSUPPORT 3073 #define BEGIN_PATH 4096 #define CLIP_TO_PATH 4097 #define END_PATH 4098 #define EXT_DEVICE_CAPS 4099 #define RESTORE_CTM 4100 #define SAVE_CTM 4101 #define SET_ARC_DIRECTION 4102 #define SET_BACKGROUND_COLOR 4103 #define SET_POLY_MODE 4104 #define SET_SCREEN_ANGLE 4105 #define SET_SPREAD 4106 #define TRANSFORM_CTM 4107 #define SET_CLIP_BOX 4108 #define SET_BOUNDS 4109 #define SET_MIRROR_MODE 4110 #define OPENCHANNEL 4110 #define DOWNLOADHEADER 4111 #define CLOSECHANNEL 4112 #define POSTSCRIPT_PASSTHROUGH 4115 #define ENCAPSULATED_POSTSCRIPT 4116 #define POSTSCRIPT_IDENTIFY 4117 #define POSTSCRIPT_INJECTION 4118 #define CHECKJPEGFORMAT 4119 #define CHECKPNGFORMAT 4120 #define GET_PS_FEATURESETTING 4121 #define GDIPLUS_TS_QUERYVER 4122 #define GDIPLUS_TS_RECORD 4123 /* for POSTSCRIPT_IDENTIFY */ #define PSIDENT_GDICENTRIC 0 #define PSIDENT_PSCENTRIC 1 #define QDI_SETDIBITS 1 #define QDI_GETDIBITS 2 #define QDI_DIBTOSCREEN 4 #define QDI_STRETCHDIB 8 /* Spooler Error Codes */ #define SP_NOTREPORTED 0x4000 #define SP_ERROR (-1) #define SP_APPABORT (-2) #define SP_USERABORT (-3) #define SP_OUTOFDISK (-4) #define SP_OUTOFMEMORY (-5) #define PR_JOBSTATUS 0 /* Raster operations */ #define R2_BLACK 1 #define R2_NOTMERGEPEN 2 #define R2_MASKNOTPEN 3 #define R2_NOTCOPYPEN 4 #define R2_MASKPENNOT 5 #define R2_NOT 6 #define R2_XORPEN 7 #define R2_NOTMASKPEN 8 #define R2_MASKPEN 9 #define R2_NOTXORPEN 10 #define R2_NOP 11 #define R2_MERGENOTPEN 12 #define R2_COPYPEN 13 #define R2_MERGEPENNOT 14 #define R2_MERGEPEN 15 #define R2_WHITE 16 #define R2_LAST 16 #define MAKEROP4(fore,back) (DWORD)((((back)<<8)&0xFF000000)|(fore)) #define SRCCOPY 0xcc0020 #define SRCPAINT 0xee0086 #define SRCAND 0x8800c6 #define SRCINVERT 0x660046 #define SRCERASE 0x440328 #define NOTSRCCOPY 0x330008 #define NOTSRCERASE 0x1100a6 #define MERGECOPY 0xc000ca #define MERGEPAINT 0xbb0226 #define PATCOPY 0xf00021 #define PATPAINT 0xfb0a09 #define PATINVERT 0x5a0049 #define DSTINVERT 0x550009 #define BLACKNESS 0x000042 #define WHITENESS 0xff0062 /* StretchBlt() modes */ #define BLACKONWHITE 1 #define WHITEONBLACK 2 #define COLORONCOLOR 3 #define HALFTONE 4 #define MAXSTRETCHBLTMODE 4 #define STRETCH_ANDSCANS BLACKONWHITE #define STRETCH_ORSCANS WHITEONBLACK #define STRETCH_DELETESCANS COLORONCOLOR #define STRETCH_HALFTONE HALFTONE /* Colors */ #define RGB(r,g,b) ((COLORREF)((BYTE)(r) | ((BYTE)(g) << 8) | ((BYTE)(b) << 16))) #define PALETTERGB(r,g,b) (0x02000000 | RGB(r,g,b)) #define PALETTEINDEX(i) ((COLORREF)(0x01000000 | (WORD)(i))) #define GetRValue(rgb) ((BYTE) (rgb) ) #define GetGValue(rgb) ((BYTE) ((rgb) >> 8)) #define GetBValue(rgb) ((BYTE) ((rgb) >> 16)) #define GetKValue(cmyk) ((BYTE) (cmyk) ) #define GetYValue(cmyk) ((BYTE) ((cmyk) >> 8)) #define GetMValue(cmyk) ((BYTE) ((cmyk) >> 16)) #define GetCValue(cmyk) ((BYTE) ((cmyk) >> 24)) #define CMYK(c,m,y,k) ((COLORREF)((((BYTE)(k)|((WORD)((BYTE)(y))<<8))|(((DWORD)(BYTE)(m))<<16))|(((DWORD)(BYTE)(c))<<24))) /* ICM stuff */ typedef INT (CALLBACK *ICMENUMPROCA)(LPSTR lpszFilename,LPARAM lParam); typedef INT (CALLBACK *ICMENUMPROCW)(LPWSTR lpszFilename,LPARAM lParam); DECL_WINELIB_TYPE_AW(ICMENUMPROC) #define ICM_OFF 1 #define ICM_ON 2 #define ICM_QUERY 3 /* Bounds Accumulation APIs */ #define DCB_RESET 0x0001 #define DCB_ACCUMULATE 0x0002 #define DCB_DIRTY DCB_ACCUMULATE #define DCB_SET (DCB_RESET | DCB_ACCUMULATE) #define DCB_ENABLE 0x0004 #define DCB_DISABLE 0x0008 typedef struct { LONG paXCount; LONG paYCount; LONG paXExt; LONG paYExt; BYTE paRGBs; } PELARRAY, *PPELARRAY, *LPPELARRAY; /* Bitmaps */ typedef struct { INT bmType; INT bmWidth; INT bmHeight; INT bmWidthBytes; WORD bmPlanes; WORD bmBitsPixel; LPVOID bmBits; } BITMAP, *PBITMAP, *LPBITMAP; /* Brushes */ typedef struct { UINT lbStyle; COLORREF lbColor; ULONG_PTR lbHatch; } LOGBRUSH, *PLOGBRUSH, *LPLOGBRUSH; typedef struct { UINT lbStyle; COLORREF lbColor; ULONG lbHatch; } LOGBRUSH32, *PLOGBRUSH32, *LPLOGBRUSH32; typedef LOGBRUSH PATTERN, *PPATTERN, *LPPATTERN; /* Brush styles */ #define BS_SOLID 0 #define BS_NULL 1 #define BS_HOLLOW 1 #define BS_HATCHED 2 #define BS_PATTERN 3 #define BS_INDEXED 4 #define BS_DIBPATTERN 5 #define BS_DIBPATTERNPT 6 #define BS_PATTERN8X8 7 #define BS_DIBPATTERN8X8 8 #define BS_MONOPATTERN 9 /* Hatch styles */ #define HS_HORIZONTAL 0 #define HS_VERTICAL 1 #define HS_FDIAGONAL 2 #define HS_BDIAGONAL 3 #define HS_CROSS 4 #define HS_DIAGCROSS 5 #define HS_API_MAX 12 /* Fonts */ #define LF_FACESIZE 32 #define LF_FULLFACESIZE 64 #define RASTER_FONTTYPE 0x0001 #define DEVICE_FONTTYPE 0x0002 #define TRUETYPE_FONTTYPE 0x0004 typedef struct tagLOGFONTA { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; CHAR lfFaceName[LF_FACESIZE]; } LOGFONTA, *PLOGFONTA, *LPLOGFONTA; typedef struct tagLOGFONTW { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; WCHAR lfFaceName[LF_FACESIZE]; } LOGFONTW, *PLOGFONTW, *LPLOGFONTW; DECL_WINELIB_TYPE_AW(LOGFONT) DECL_WINELIB_TYPE_AW(PLOGFONT) DECL_WINELIB_TYPE_AW(LPLOGFONT) typedef struct { LOGFONTA elfLogFont; BYTE elfFullName[LF_FULLFACESIZE]; BYTE elfStyle[LF_FACESIZE]; } ENUMLOGFONTA, *LPENUMLOGFONTA; typedef struct { LOGFONTW elfLogFont; WCHAR elfFullName[LF_FULLFACESIZE]; WCHAR elfStyle[LF_FACESIZE]; } ENUMLOGFONTW, *LPENUMLOGFONTW; DECL_WINELIB_TYPE_AW(ENUMLOGFONT) DECL_WINELIB_TYPE_AW(LPENUMLOGFONT) typedef struct { LOGFONTA elfLogFont; BYTE elfFullName[LF_FULLFACESIZE]; BYTE elfStyle[LF_FACESIZE]; BYTE elfScript[LF_FACESIZE]; } ENUMLOGFONTEXA,*LPENUMLOGFONTEXA; typedef struct { LOGFONTW elfLogFont; WCHAR elfFullName[LF_FULLFACESIZE]; WCHAR elfStyle[LF_FACESIZE]; WCHAR elfScript[LF_FACESIZE]; } ENUMLOGFONTEXW,*LPENUMLOGFONTEXW; DECL_WINELIB_TYPE_AW(ENUMLOGFONTEX) DECL_WINELIB_TYPE_AW(LPENUMLOGFONTEX) #define MM_MAX_NUMAXES 16 typedef struct { DWORD dvReserved; DWORD dvNumAxes; LONG dvValues[MM_MAX_NUMAXES]; } DESIGNVECTOR, *PDESIGNVECTOR; typedef struct { ENUMLOGFONTEXA elfEnumLogfontEx; DESIGNVECTOR elfDesignVector; } ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA; typedef struct { ENUMLOGFONTEXW elfEnumLogfontEx; DESIGNVECTOR elfDesignVector; } ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW; DECL_WINELIB_TYPE_AW(ENUMLOGFONTEXDV) DECL_WINELIB_TYPE_AW(PENUMLOGFONTEXDV) /* * The FONTSIGNATURE tells which Unicode ranges and which code pages * have glyphs in a font. * * fsUsb 128-bit bitmap. The most significant bits are 10 (magic number). * The remaining 126 bits map the Unicode ISO 10646 subranges * for which the font provides glyphs. * * fsCsb 64-bit bitmap. The low 32 bits map the Windows codepages for * which the font provides glyphs. The high 32 bits are for * non Windows codepages. */ typedef struct { DWORD fsUsb[4]; DWORD fsCsb[2]; } FONTSIGNATURE, *PFONTSIGNATURE, *LPFONTSIGNATURE; typedef struct { UINT ciCharset; /* character set */ UINT ciACP; /* ANSI code page */ FONTSIGNATURE fs; } CHARSETINFO, *PCHARSETINFO, *LPCHARSETINFO; /* Flags for TranslateCharsetInfo */ #define TCI_SRCCHARSET 1 #define TCI_SRCCODEPAGE 2 #define TCI_SRCFONTSIG 3 typedef struct { DWORD lsUsb[4]; DWORD lsCsbDefault[2]; DWORD lsCsbSupported[2]; } LOCALESIGNATURE, *PLOCALESIGNATURE, *LPLOCALESIGNATURE; /* Flags for ModifyWorldTransform */ #define MWT_IDENTITY 1 #define MWT_LEFTMULTIPLY 2 #define MWT_RIGHTMULTIPLY 3 #define MWT_MIN MWT_IDENTITY #define MWT_MAX MWT_RIGHTMULTIPLY /* Object Definitions for EnumObjects() */ #define OBJ_PEN 1 #define OBJ_BRUSH 2 #define OBJ_DC 3 #define OBJ_METADC 4 #define OBJ_PAL 5 #define OBJ_FONT 6 #define OBJ_BITMAP 7 #define OBJ_REGION 8 #define OBJ_METAFILE 9 #define OBJ_MEMDC 10 #define OBJ_EXTPEN 11 #define OBJ_ENHMETADC 12 #define OBJ_ENHMETAFILE 13 #define OBJ_COLORSPACE 14 typedef struct tagXFORM { FLOAT eM11; FLOAT eM12; FLOAT eM21; FLOAT eM22; FLOAT eDx; FLOAT eDy; } XFORM, *PXFORM, *LPXFORM; /* lfWeight values */ #define FW_DONTCARE 0 #define FW_THIN 100 #define FW_EXTRALIGHT 200 #define FW_ULTRALIGHT 200 #define FW_LIGHT 300 #define FW_NORMAL 400 #define FW_REGULAR 400 #define FW_MEDIUM 500 #define FW_SEMIBOLD 600 #define FW_DEMIBOLD 600 #define FW_BOLD 700 #define FW_EXTRABOLD 800 #define FW_ULTRABOLD 800 #define FW_HEAVY 900 #define FW_BLACK 900 /* lfCharSet values */ #define ANSI_CHARSET (BYTE)0 /* CP1252, ansi-0, iso8859-{1,15} */ #define DEFAULT_CHARSET (BYTE)1 #define SYMBOL_CHARSET (BYTE)2 #define SHIFTJIS_CHARSET (BYTE)128 /* CP932 */ #define HANGEUL_CHARSET (BYTE)129 /* CP949, ksc5601.1987-0 */ #define HANGUL_CHARSET HANGEUL_CHARSET #define GB2312_CHARSET (BYTE)134 /* CP936, gb2312.1980-0 */ #define CHINESEBIG5_CHARSET (BYTE)136 /* CP950, big5.et-0 */ #define GREEK_CHARSET (BYTE)161 /* CP1253 */ #define TURKISH_CHARSET (BYTE)162 /* CP1254, -iso8859-9 */ #define HEBREW_CHARSET (BYTE)177 /* CP1255, -iso8859-8 */ #define ARABIC_CHARSET (BYTE)178 /* CP1256, -iso8859-6 */ #define BALTIC_CHARSET (BYTE)186 /* CP1257, -iso8859-13 */ #define VIETNAMESE_CHARSET (BYTE)163 /* CP1258 */ #define RUSSIAN_CHARSET (BYTE)204 /* CP1251, -iso8859-5 */ #define EE_CHARSET (BYTE)238 /* CP1250, -iso8859-2 */ #define EASTEUROPE_CHARSET EE_CHARSET #define THAI_CHARSET (BYTE)222 /* CP874, iso8859-11, tis620 */ #define JOHAB_CHARSET (BYTE)130 /* korean (johab) CP1361 */ #define MAC_CHARSET (BYTE)77 #define OEM_CHARSET (BYTE)255 /* I don't know if the values of *_CHARSET macros are defined in Windows * or if we can choose them as we want. -- srtxg */ #define VISCII_CHARSET (BYTE)240 /* viscii1.1-1 */ #define TCVN_CHARSET (BYTE)241 /* tcvn-0 */ #define KOI8_CHARSET (BYTE)242 /* koi8-{r,u,ru} */ #define ISO3_CHARSET (BYTE)243 /* iso8859-3 */ #define ISO4_CHARSET (BYTE)244 /* iso8859-4 */ #define ISO10_CHARSET (BYTE)245 /* iso8859-10 */ #define CELTIC_CHARSET (BYTE)246 /* iso8859-14 */ #define FS_LATIN1 __MSABI_LONG(0x00000001) #define FS_LATIN2 __MSABI_LONG(0x00000002) #define FS_CYRILLIC __MSABI_LONG(0x00000004) #define FS_GREEK __MSABI_LONG(0x00000008) #define FS_TURKISH __MSABI_LONG(0x00000010) #define FS_HEBREW __MSABI_LONG(0x00000020) #define FS_ARABIC __MSABI_LONG(0x00000040) #define FS_BALTIC __MSABI_LONG(0x00000080) #define FS_VIETNAMESE __MSABI_LONG(0x00000100) #define FS_THAI __MSABI_LONG(0x00010000) #define FS_JISJAPAN __MSABI_LONG(0x00020000) #define FS_CHINESESIMP __MSABI_LONG(0x00040000) #define FS_WANSUNG __MSABI_LONG(0x00080000) #define FS_CHINESETRAD __MSABI_LONG(0x00100000) #define FS_JOHAB __MSABI_LONG(0x00200000) #define FS_SYMBOL __MSABI_LONG(0x80000000) /* lfOutPrecision values */ #define OUT_DEFAULT_PRECIS 0 #define OUT_STRING_PRECIS 1 #define OUT_CHARACTER_PRECIS 2 #define OUT_STROKE_PRECIS 3 #define OUT_TT_PRECIS 4 #define OUT_DEVICE_PRECIS 5 #define OUT_RASTER_PRECIS 6 #define OUT_TT_ONLY_PRECIS 7 #define OUT_OUTLINE_PRECIS 8 #define OUT_SCREEN_OUTLINE_PRECIS 9 #define OUT_PS_ONLY_PRECIS 10 /* lfClipPrecision values */ #define CLIP_DEFAULT_PRECIS 0x00 #define CLIP_CHARACTER_PRECIS 0x01 #define CLIP_STROKE_PRECIS 0x02 #define CLIP_MASK 0x0F #define CLIP_LH_ANGLES 0x10 #define CLIP_TT_ALWAYS 0x20 #define CLIP_DFA_DISABLE 0x40 #define CLIP_EMBEDDED 0x80 /* lfQuality values */ #define DEFAULT_QUALITY 0 #define DRAFT_QUALITY 1 #define PROOF_QUALITY 2 #define NONANTIALIASED_QUALITY 3 #define ANTIALIASED_QUALITY 4 #define CLEARTYPE_QUALITY 5 #define CLEARTYPE_NATURAL_QUALITY 6 /* lfPitchAndFamily pitch values */ #define DEFAULT_PITCH 0x00 #define FIXED_PITCH 0x01 #define VARIABLE_PITCH 0x02 #define MONO_FONT 0x08 #define FF_DONTCARE 0x00 #define FF_ROMAN 0x10 #define FF_SWISS 0x20 #define FF_MODERN 0x30 #define FF_SCRIPT 0x40 #define FF_DECORATIVE 0x50 #ifndef _TEXTMETRIC_DEFINED #define _TEXTMETRIC_DEFINED typedef struct tagTEXTMETRICA { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; } TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA; typedef struct tagTEXTMETRICW { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; WCHAR tmFirstChar; WCHAR tmLastChar; WCHAR tmDefaultChar; WCHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; } TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW; DECL_WINELIB_TYPE_AW(TEXTMETRIC) DECL_WINELIB_TYPE_AW(PTEXTMETRIC) DECL_WINELIB_TYPE_AW(LPTEXTMETRIC) #endif /* _TEXTMETRIC_DEFINED */ typedef struct tagPANOSE { BYTE bFamilyType; BYTE bSerifStyle; BYTE bWeight; BYTE bProportion; BYTE bContrast; BYTE bStrokeVariation; BYTE bArmStyle; BYTE bLetterform; BYTE bMidline; BYTE bXHeight; } PANOSE, *LPPANOSE; #define PANOSE_COUNT 10 #define PAN_FAMILYTYPE_INDEX 0 #define PAN_SERIFSTYLE_INDEX 1 #define PAN_WEIGHT_INDEX 2 #define PAN_PROPORTION_INDEX 3 #define PAN_CONTRAST_INDEX 4 #define PAN_STROKEVARIATION_INDEX 5 #define PAN_ARMSTYLE_INDEX 6 #define PAN_LETTERFORM_INDEX 7 #define PAN_MIDLINE_INDEX 8 #define PAN_XHEIGHT_INDEX 9 #define PAN_CULTURE_LATIN 0 #define PAN_ANY 0 #define PAN_NO_FIT 1 #define PAN_FAMILY_TEXT_DISPLAY 2 #define PAN_FAMILY_SCRIPT 3 #define PAN_FAMILY_DECORATIVE 4 #define PAN_FAMILY_PICTORIAL 5 #define PAN_SERIF_COVE 2 #define PAN_SERIF_OBTUSE_COVE 3 #define PAN_SERIF_SQUARE_COVE 4 #define PAN_SERIF_OBTUSE_SQUARE_COVE 5 #define PAN_SERIF_SQUARE 6 #define PAN_SERIF_THIN 7 #define PAN_SERIF_BONE 8 #define PAN_SERIF_EXAGGERATED 9 #define PAN_SERIF_TRIANGLE 10 #define PAN_SERIF_NORMAL_SANS 11 #define PAN_SERIF_OBTUSE_SANS 12 #define PAN_SERIF_PERP_SANS 13 #define PAN_SERIF_FLARED 14 #define PAN_SERIF_ROUNDED 15 #define PAN_WEIGHT_VERY_LIGHT 2 #define PAN_WEIGHT_LIGHT 3 #define PAN_WEIGHT_THIN 4 #define PAN_WEIGHT_BOOK 5 #define PAN_WEIGHT_MEDIUM 6 #define PAN_WEIGHT_DEMI 7 #define PAN_WEIGHT_BOLD 8 #define PAN_WEIGHT_HEAVY 9 #define PAN_WEIGHT_BLACK 10 #define PAN_WEIGHT_NORD 11 #define PAN_PROP_OLD_STYLE 2 #define PAN_PROP_MODERN 3 #define PAN_PROP_EVEN_WIDTH 4 #define PAN_PROP_EXPANDED 5 #define PAN_PROP_CONDENSED 6 #define PAN_PROP_VERY_EXPANDED 7 #define PAN_PROP_VERY_CONDENSED 8 #define PAN_PROP_MONOSPACED 9 #define PAN_CONTRAST_NONE 2 #define PAN_CONTRAST_VERY_LOW 3 #define PAN_CONTRAST_LOW 4 #define PAN_CONTRAST_MEDIUM_LOW 5 #define PAN_CONTRAST_MEDIUM 6 #define PAN_CONTRAST_MEDIUM_HIGH 7 #define PAN_CONTRAST_HIGH 8 #define PAN_CONTRAST_VERY_HIGH 9 #define PAN_STROKE_GRADUAL_DIAG 2 #define PAN_STROKE_GRADUAL_TRAN 3 #define PAN_STROKE_GRADUAL_VERT 4 #define PAN_STROKE_GRADUAL_HORZ 5 #define PAN_STROKE_RAPID_VERT 6 #define PAN_STROKE_RAPID_HORZ 7 #define PAN_STROKE_INSTANT_VERT 8 #define PAN_STRAIGHT_ARMS_HORZ 2 #define PAN_STRAIGHT_ARMS_WEDGE 3 #define PAN_STRAIGHT_ARMS_VERT 4 #define PAN_STRAIGHT_ARMS_SINGLE_SERIF 5 #define PAN_STRAIGHT_ARMS_DOUBLE_SERIF 6 #define PAN_BENT_ARMS_HORZ 7 #define PAN_BENT_ARMS_WEDGE 8 #define PAN_BENT_ARMS_VERT 9 #define PAN_BENT_ARMS_SINGLE_SERIF 10 #define PAN_BENT_ARMS_DOUBLE_SERIF 11 #define PAN_LETT_NORMAL_COMPACT 2 #define PAN_LETT_NORMAL_WEIGHTED 3 #define PAN_LETT_NORMAL_BOXED 4 #define PAN_LETT_NORMAL_FLATTENED 5 #define PAN_LETT_NORMAL_ROUNDED 6 #define PAN_LETT_NORMAL_OFF_CENTER 7 #define PAN_LETT_NORMAL_SQUARE 8 #define PAN_LETT_OBLIQUE_COMPACT 9 #define PAN_LETT_OBLIQUE_WEIGHTED 10 #define PAN_LETT_OBLIQUE_BOXED 11 #define PAN_LETT_OBLIQUE_FLATTENED 12 #define PAN_LETT_OBLIQUE_ROUNDED 13 #define PAN_LETT_OBLIQUE_OFF_CENTER 14 #define PAN_LETT_OBLIQUE_SQUARE 15 #define PAN_MIDLINE_STANDARD_TRIMMED 2 #define PAN_MIDLINE_STANDARD_POINTED 3 #define PAN_MIDLINE_STANDARD_SERIFED 4 #define PAN_MIDLINE_HIGH_TRIMMED 5 #define PAN_MIDLINE_HIGH_POINTED 6 #define PAN_MIDLINE_HIGH_SERIFED 7 #define PAN_MIDLINE_CONSTANT_TRIMMED 8 #define PAN_MIDLINE_CONSTANT_POINTED 9 #define PAN_MIDLINE_CONSTANT_SERIFED 10 #define PAN_MIDLINE_LOW_TRIMMED 11 #define PAN_MIDLINE_LOW_POINTED 12 #define PAN_MIDLINE_LOW_SERIFED 13 #define PAN_XHEIGHT_CONSTANT_SMALL 2 #define PAN_XHEIGHT_CONSTANT_STANDARD 3 #define PAN_XHEIGHT_CONSTANT_LARGE 4 #define PAN_XHEIGHT_DUCKING_SMALL 5 #define PAN_XHEIGHT_DUCKING_STANDARD 6 #define PAN_XHEIGHT_DUCKING_LARGE 7 #define ELF_VENDOR_SIZE 4 typedef struct { LOGFONTA elfLogFont; BYTE elfFullName[LF_FULLFACESIZE]; BYTE elfStyle[LF_FACESIZE]; DWORD elfVersion; DWORD elfStyleSize; DWORD elfMatch; DWORD elfReserved; BYTE elfVendorId[ELF_VENDOR_SIZE]; DWORD elfCulture; PANOSE elfPanose; } EXTLOGFONTA, *PEXTLOGFONTA, *LPEXTLOGFONTA; typedef struct { LOGFONTW elfLogFont; WCHAR elfFullName[LF_FULLFACESIZE]; WCHAR elfStyle[LF_FACESIZE]; DWORD elfVersion; DWORD elfStyleSize; DWORD elfMatch; DWORD elfReserved; BYTE elfVendorId[ELF_VENDOR_SIZE]; DWORD elfCulture; PANOSE elfPanose; } EXTLOGFONTW, *PEXTLOGFONTW, *LPEXTLOGFONTW; DECL_WINELIB_TYPE_AW(EXTLOGFONT) DECL_WINELIB_TYPE_AW(PEXTLOGFONT) DECL_WINELIB_TYPE_AW(LPEXTLOGFONT) #define ELF_VERSION 0 #define ELF_CULTURE_LATIN 0 typedef struct _OUTLINETEXTMETRICA { UINT otmSize; TEXTMETRICA otmTextMetrics; BYTE otmFiller; PANOSE otmPanoseNumber; UINT otmfsSelection; UINT otmfsType; INT otmsCharSlopeRise; INT otmsCharSlopeRun; INT otmItalicAngle; UINT otmEMSquare; INT otmAscent; INT otmDescent; UINT otmLineGap; UINT otmsCapEmHeight; UINT otmsXHeight; RECT otmrcFontBox; INT otmMacAscent; INT otmMacDescent; UINT otmMacLineGap; UINT otmusMinimumPPEM; POINT otmptSubscriptSize; POINT otmptSubscriptOffset; POINT otmptSuperscriptSize; POINT otmptSuperscriptOffset; UINT otmsStrikeoutSize; INT otmsStrikeoutPosition; INT otmsUnderscoreSize; INT otmsUnderscorePosition; LPSTR otmpFamilyName; LPSTR otmpFaceName; LPSTR otmpStyleName; LPSTR otmpFullName; } OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, *LPOUTLINETEXTMETRICA; typedef struct _OUTLINETEXTMETRICW { UINT otmSize; TEXTMETRICW otmTextMetrics; BYTE otmFiller; PANOSE otmPanoseNumber; UINT otmfsSelection; UINT otmfsType; INT otmsCharSlopeRise; INT otmsCharSlopeRun; INT otmItalicAngle; UINT otmEMSquare; INT otmAscent; INT otmDescent; UINT otmLineGap; UINT otmsCapEmHeight; UINT otmsXHeight; RECT otmrcFontBox; INT otmMacAscent; INT otmMacDescent; UINT otmMacLineGap; UINT otmusMinimumPPEM; POINT otmptSubscriptSize; POINT otmptSubscriptOffset; POINT otmptSuperscriptSize; POINT otmptSuperscriptOffset; UINT otmsStrikeoutSize; INT otmsStrikeoutPosition; INT otmsUnderscoreSize; INT otmsUnderscorePosition; LPSTR otmpFamilyName; LPSTR otmpFaceName; LPSTR otmpStyleName; LPSTR otmpFullName; } OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW; DECL_WINELIB_TYPE_AW(OUTLINETEXTMETRIC) DECL_WINELIB_TYPE_AW(POUTLINETEXTMETRIC) DECL_WINELIB_TYPE_AW(LPOUTLINETEXTMETRIC) typedef struct { INT x; INT y; UINT n; LPCSTR lpstr; UINT uiFlags; RECT rcl; INT *pdx; } POLYTEXTA, *PPOLYTEXTA, *LPPOLYTEXTA; typedef struct { INT x; INT y; UINT n; LPCWSTR lpstr; UINT uiFlags; RECT rcl; INT *pdx; } POLYTEXTW, *PPOLYTEXTW, *LPPOLYTEXTW; DECL_WINELIB_TYPE_AW(POLYTEXT) DECL_WINELIB_TYPE_AW(PPOLYTEXT) DECL_WINELIB_TYPE_AW(LPPOLYTEXT) /* ntmFlags field flags */ #define NTM_REGULAR __MSABI_LONG(0x00000040) #define NTM_BOLD __MSABI_LONG(0x00000020) #define NTM_ITALIC __MSABI_LONG(0x00000001) #define NTM_NONNEGATIVE_AC 0x00010000 #define NTM_PS_OPENTYPE 0x00020000 #define NTM_TT_OPENTYPE 0x00040000 #define NTM_MULTIPLEMASTER 0x00080000 #define NTM_TYPE1 0x00100000 #define NTM_DSIG 0x00200000 typedef struct { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; DWORD ntmFlags; UINT ntmSizeEM; UINT ntmCellHeight; UINT ntmAvgWidth; } NEWTEXTMETRICA, *PNEWTEXTMETRICA, *LPNEWTEXTMETRICA; typedef struct { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; WCHAR tmFirstChar; WCHAR tmLastChar; WCHAR tmDefaultChar; WCHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; DWORD ntmFlags; UINT ntmSizeEM; UINT ntmCellHeight; UINT ntmAvgWidth; } NEWTEXTMETRICW, *PNEWTEXTMETRICW, *LPNEWTEXTMETRICW; DECL_WINELIB_TYPE_AW(NEWTEXTMETRIC) DECL_WINELIB_TYPE_AW(PNEWTEXTMETRIC) DECL_WINELIB_TYPE_AW(LPNEWTEXTMETRIC) typedef struct { NEWTEXTMETRICA ntmTm; FONTSIGNATURE ntmFontSig; } NEWTEXTMETRICEXA; typedef struct { NEWTEXTMETRICW ntmTm; FONTSIGNATURE ntmFontSig; } NEWTEXTMETRICEXW; DECL_WINELIB_TYPE_AW(NEWTEXTMETRICEX) #if defined(STRICT) #if !defined(NOTEXTMETRIC) typedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA *, const TEXTMETRICA *, DWORD, LPARAM); typedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW *, const TEXTMETRICW *, DWORD, LPARAM); #else /* !defined(NOTEXTMETRIC) */ typedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA *, const VOID *, DWORD, LPARAM); typedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW *, const VOID *, DWORD, LPARAM); #endif /* !defined(NOTEXTMETRIC) */ DECL_WINELIB_TYPE_AW(OLDFONTENUMPROC) typedef OLDFONTENUMPROCA FONTENUMPROCA; typedef OLDFONTENUMPROCW FONTENUMPROCW; DECL_WINELIB_TYPE_AW(FONTENUMPROC) typedef INT (CALLBACK *GOBJENUMPROC)(LPVOID, LPARAM); typedef VOID (CALLBACK *LINEDDAPROC)(INT, INT, LPARAM); #else /* defined(STRICT) */ typedef FARPROC OLDFONTENUMPROC; typedef FARPROC FONTENUMPROCA; typedef FARPROC FONTENUMPROCW; DECL_WINELIB_TYPE_AW(FONTENUMPROC) typedef FARPROC GOBJENUMPROC; typedef FARPROC LINEDDAPROC; #endif /* defined(STRICT) */ /* tmPitchAndFamily bits */ #define TMPF_FIXED_PITCH 1 /* means variable pitch */ #define TMPF_VECTOR 2 #define TMPF_TRUETYPE 4 #define TMPF_DEVICE 8 /* Text alignment */ #define TA_NOUPDATECP 0x00 #define TA_UPDATECP 0x01 #define TA_LEFT 0x00 #define TA_RIGHT 0x02 #define TA_CENTER 0x06 #define TA_TOP 0x00 #define TA_BOTTOM 0x08 #define TA_BASELINE 0x18 #define TA_RTLREADING 0x100 #define TA_MASK TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING #define VTA_BASELINE TA_BASELINE #define VTA_LEFT TA_BOTTOM #define VTA_RIGHT TA_TOP #define VTA_CENTER TA_CENTER #define VTA_BOTTOM TA_RIGHT #define VTA_TOP TA_LEFT /* ExtTextOut() parameters */ #define ETO_GRAYED 0x0001 #define ETO_OPAQUE 0x0002 #define ETO_CLIPPED 0x0004 #define ETO_GLYPH_INDEX 0x0010 #define ETO_RTLREADING 0x0080 #define ETO_NUMERICSLOCAL 0x0400 #define ETO_NUMERICSLATIN 0x0800 #define ETO_IGNORELANGUAGE 0x1000 #define ETO_PDY 0x2000 #define ASPECT_FILTERING 0x0001 /* for GetGlyphIndices() */ #define GGI_MARK_NONEXISTING_GLYPHS 0x0001 typedef struct { UINT gmBlackBoxX; UINT gmBlackBoxY; POINT gmptGlyphOrigin; SHORT gmCellIncX; SHORT gmCellIncY; } GLYPHMETRICS, *LPGLYPHMETRICS; #define GGO_METRICS 0 #define GGO_BITMAP 1 #define GGO_NATIVE 2 #define GGO_BEZIER 3 #define GGO_GRAY2_BITMAP 4 #define GGO_GRAY4_BITMAP 5 #define GGO_GRAY8_BITMAP 6 #define GGO_GLYPH_INDEX 0x80 #define GGO_UNHINTED 0x100 #ifdef __WINESRC__ #define WINE_GGO_GRAY16_BITMAP 0x10 #define WINE_GGO_HRGB_BITMAP 0x11 #define WINE_GGO_HBGR_BITMAP 0x12 #define WINE_GGO_VRGB_BITMAP 0x13 #define WINE_GGO_VBGR_BITMAP 0x14 #endif typedef struct { WORD fract; SHORT value; } FIXED; typedef struct tagPOINTFX { FIXED x; FIXED y; } POINTFX, *LPPOINTFX; typedef struct tagTTPOLYCURVE { WORD wType; WORD cpfx; POINTFX apfx[1]; } TTPOLYCURVE, *LPTTPOLYCURVE; typedef struct tagTTPOLYGONHEADER { DWORD cb; DWORD dwType; POINTFX pfxStart; } TTPOLYGONHEADER, *LPTTPOLYGONHEADER; typedef struct { FIXED eM11; FIXED eM12; FIXED eM21; FIXED eM22; } MAT2, *LPMAT2; /* for GetCharABCWidths() */ typedef struct { INT abcA; UINT abcB; INT abcC; } ABC, *PABC, *LPABC; /* for GetCharacterPlacement () */ #define GCP_DBCS 0x0001 #define GCP_REORDER 0x0002 #define GCP_USEKERNING 0x0008 #define GCP_GLYPHSHAPE 0x0010 #define GCP_LIGATE 0x0020 #define GCP_DIACRITIC 0x0100 #define GCP_KASHIDA 0x0200 #define GCP_ERROR 0x8000 #define FLI_MASK 0x103b #define GCP_JUSTIFY __MSABI_LONG(0x00010000) #define FLI_GLYPHS __MSABI_LONG(0x00040000) #define GCP_CLASSIN __MSABI_LONG(0x00080000) #define GCP_MAXEXTENT __MSABI_LONG(0x00100000) #define GCP_JUSTIFYIN __MSABI_LONG(0x00200000) #define GCP_DISPLAYZWG __MSABI_LONG(0x00400000) #define GCP_SYMSWAPOFF __MSABI_LONG(0x00800000) #define GCP_NUMERICOVERRIDE __MSABI_LONG(0x01000000) #define GCP_NEUTRALOVERRIDE __MSABI_LONG(0x02000000) #define GCP_NUMERICSLATIN __MSABI_LONG(0x04000000) #define GCP_NUMERICSLOCAL __MSABI_LONG(0x08000000) #define GCPCLASS_LATIN 1 #define GCPCLASS_HEBREW 2 #define GCPCLASS_ARABIC 3 #define GCPCLASS_NEUTRAL 4 #define GCPCLASS_LOCALNUMBER 5 #define GCPCLASS_LATINNUMBER 6 #define GCPCLASS_LATINNUMERICTERMINATOR 7 #define GCPCLASS_LATINNUMERICSEPARATOR 8 #define GCPCLASS_NUMERICSEPARATOR 9 #define GCPCLASS_PREBOUNDLTR 0x80 #define GCPCLASS_PREBOUNDRTL 0x40 #define GCPCLASS_POSTBOUNDLTR 0x20 #define GCPCLASS_POSTBOUNDRTL 0x10 #define GCPGLYPH_LINKBEFORE 0x8000 #define GCPGLYPH_LINKAFTER 0x4000 typedef struct tagGCP_RESULTSA{ DWORD lStructSize; LPSTR lpOutString; UINT *lpOrder; INT *lpDx; INT *lpCaretPos; LPSTR lpClass; LPWSTR lpGlyphs; UINT nGlyphs; UINT nMaxFit; } GCP_RESULTSA, *LPGCP_RESULTSA; typedef struct tagGCP_RESULTSW { DWORD lStructSize; LPWSTR lpOutString; UINT *lpOrder; INT *lpDx; INT *lpCaretPos; LPSTR lpClass; LPWSTR lpGlyphs; UINT nGlyphs; UINT nMaxFit; } GCP_RESULTSW, *LPGCP_RESULTSW; DECL_WINELIB_TYPE_AW(GCP_RESULTS) DECL_WINELIB_TYPE_AW(LPGCP_RESULTS) /* Rasterizer status */ typedef struct { SHORT nSize; SHORT wFlags; SHORT nLanguageID; } RASTERIZER_STATUS, *LPRASTERIZER_STATUS; #define TT_AVAILABLE 0x0001 #define TT_ENABLED 0x0002 #define TT_PRIM_LINE 1 #define TT_PRIM_QSPLINE 2 #define TT_PRIM_CSPLINE 3 #define TT_POLYGON_TYPE 24 /* OpenGL defines */ typedef struct { FLOAT x; FLOAT y; } POINTFLOAT, *PPOINTFLOAT; typedef struct { FLOAT gmfBlackBoxX; FLOAT gmfBlackBoxY; POINTFLOAT gmfptGlyphOrigin; FLOAT gmfCellIncX; FLOAT gmfCellIncY; } GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT; typedef struct { WORD nSize; WORD nVersion; DWORD dwFlags; BYTE iPixelType; BYTE cColorBits; BYTE cRedBits; BYTE cRedShift; BYTE cGreenBits; BYTE cGreenShift; BYTE cBlueBits; BYTE cBlueShift; BYTE cAlphaBits; BYTE cAlphaShift; BYTE cAccumBits; BYTE cAccumRedBits; BYTE cAccumGreenBits; BYTE cAccumBlueBits; BYTE cAccumAlphaBits; BYTE cDepthBits; BYTE cStencilBits; BYTE cAuxBuffers; BYTE iLayerPlane; BYTE bReserved; COLORREF crTransparent; } LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR; /* Get/SetSystemPaletteUse() values */ #define SYSPAL_ERROR 0 #define SYSPAL_STATIC 1 #define SYSPAL_NOSTATIC 2 #define SYSPAL_NOSTATIC256 3 #ifndef _PALETTEENTRY_DEFINED #define _PALETTEENTRY_DEFINED typedef struct tagPALETTEENTRY { BYTE peRed, peGreen, peBlue, peFlags; } PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY; #endif /* Logical palette entry flags */ #define PC_RESERVED 0x01 #define PC_EXPLICIT 0x02 #define PC_NOCOLLAPSE 0x04 #ifndef _LOGPALETTE_DEFINED #define _LOGPALETTE_DEFINED typedef struct tagLOGPALETTE { WORD palVersion; WORD palNumEntries; PALETTEENTRY palPalEntry[1]; } LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE, *NPLOGPALETTE; #endif /* Pens */ typedef struct { UINT lopnStyle; POINT lopnWidth; COLORREF lopnColor; } LOGPEN, *LPLOGPEN; typedef struct tagEXTLOGPEN { DWORD elpPenStyle; DWORD elpWidth; UINT elpBrushStyle; COLORREF elpColor; ULONG_PTR elpHatch; DWORD elpNumEntries; DWORD elpStyleEntry[1]; } EXTLOGPEN, *PEXTLOGPEN, *NPEXTLOGPEN, *LPEXTLOGPEN; #define PS_SOLID 0x00000000 #define PS_DASH 0x00000001 #define PS_DOT 0x00000002 #define PS_DASHDOT 0x00000003 #define PS_DASHDOTDOT 0x00000004 #define PS_NULL 0x00000005 #define PS_INSIDEFRAME 0x00000006 #define PS_USERSTYLE 0x00000007 #define PS_ALTERNATE 0x00000008 #define PS_STYLE_MASK 0x0000000f #define PS_ENDCAP_ROUND 0x00000000 #define PS_ENDCAP_SQUARE 0x00000100 #define PS_ENDCAP_FLAT 0x00000200 #define PS_ENDCAP_MASK 0x00000f00 #define PS_JOIN_ROUND 0x00000000 #define PS_JOIN_BEVEL 0x00001000 #define PS_JOIN_MITER 0x00002000 #define PS_JOIN_MASK 0x0000f000 #define PS_COSMETIC 0x00000000 #define PS_GEOMETRIC 0x00010000 #define PS_TYPE_MASK 0x000f0000 /* Regions */ #define ERROR 0 #define NULLREGION 1 #define SIMPLEREGION 2 #define COMPLEXREGION 3 #define RGN_ERROR ERROR #define RGN_AND 1 #define RGN_OR 2 #define RGN_XOR 3 #define RGN_DIFF 4 #define RGN_COPY 5 #define RGN_MIN RGN_AND #define RGN_MAX RGN_COPY #define SYSRGN 4 /* Device contexts */ /* Polygon modes */ #define ALTERNATE 1 #define WINDING 2 #define POLYFILL_LAST 2 /* Background modes */ /* Apparently some broken svr4 includes define TRANSPARENT */ #undef TRANSPARENT #define TRANSPARENT 1 #define OPAQUE 2 #define BKMODE_LAST 2 /* Graphics Modes */ #define GM_COMPATIBLE 1 #define GM_ADVANCED 2 #define GM_LAST 2 /* Arc direction modes */ #define AD_COUNTERCLOCKWISE 1 #define AD_CLOCKWISE 2 /* Map modes */ #define MM_TEXT 1 #define MM_LOMETRIC 2 #define MM_HIMETRIC 3 #define MM_LOENGLISH 4 #define MM_HIENGLISH 5 #define MM_TWIPS 6 #define MM_ISOTROPIC 7 #define MM_ANISOTROPIC 8 #define MM_MIN MM_TEXT #define MM_MAX MM_ANISOTROPIC #define MM_MAX_FIXEDSCALE MM_TWIPS /* Coordinate modes */ #define ABSOLUTE 1 #define RELATIVE 2 /* Flood fill modes */ #define FLOODFILLBORDER 0 #define FLOODFILLSURFACE 1 /* Device parameters for GetDeviceCaps() */ #define DRIVERVERSION 0 #define TECHNOLOGY 2 #define HORZSIZE 4 #define VERTSIZE 6 #define HORZRES 8 #define VERTRES 10 #define BITSPIXEL 12 #define PLANES 14 #define NUMBRUSHES 16 #define NUMPENS 18 #define NUMMARKERS 20 #define NUMFONTS 22 #define NUMCOLORS 24 #define PDEVICESIZE 26 #define CURVECAPS 28 #define LINECAPS 30 #define POLYGONALCAPS 32 #define TEXTCAPS 34 #define CLIPCAPS 36 #define RASTERCAPS 38 #define ASPECTX 40 #define ASPECTY 42 #define ASPECTXY 44 #define LOGPIXELSX 88 #define LOGPIXELSY 90 #define CAPS1 94 #define SIZEPALETTE 104 #define NUMRESERVED 106 #define COLORRES 108 #define PHYSICALWIDTH 110 #define PHYSICALHEIGHT 111 #define PHYSICALOFFSETX 112 #define PHYSICALOFFSETY 113 #define SCALINGFACTORX 114 #define SCALINGFACTORY 115 #define VREFRESH 116 #define DESKTOPVERTRES 117 #define DESKTOPHORZRES 118 #define BLTALIGNMENT 119 #define SHADEBLENDCAPS 120 #define COLORMGMTCAPS 121 /* TECHNOLOGY */ #define DT_PLOTTER 0 #define DT_RASDISPLAY 1 #define DT_RASPRINTER 2 #define DT_RASCAMERA 3 #define DT_CHARSTREAM 4 #define DT_METAFILE 5 #define DT_DISPFILE 6 /* CURVECAPS */ #define CC_NONE 0x0000 #define CC_CIRCLES 0x0001 #define CC_PIE 0x0002 #define CC_CHORD 0x0004 #define CC_ELLIPSES 0x0008 #define CC_WIDE 0x0010 #define CC_STYLED 0x0020 #define CC_WIDESTYLED 0x0040 #define CC_INTERIORS 0x0080 #define CC_ROUNDRECT 0x0100 /* LINECAPS */ #define LC_NONE 0x0000 #define LC_POLYLINE 0x0002 #define LC_MARKER 0x0004 #define LC_POLYMARKER 0x0008 #define LC_WIDE 0x0010 #define LC_STYLED 0x0020 #define LC_WIDESTYLED 0x0040 #define LC_INTERIORS 0x0080 /* POLYGONALCAPS */ #define PC_NONE 0x0000 #define PC_POLYGON 0x0001 #define PC_RECTANGLE 0x0002 #define PC_WINDPOLYGON 0x0004 #define PC_TRAPEZOID 0x0004 #define PC_SCANLINE 0x0008 #define PC_WIDE 0x0010 #define PC_STYLED 0x0020 #define PC_WIDESTYLED 0x0040 #define PC_INTERIORS 0x0080 #define PC_POLYPOLYGON 0x0100 #define PC_PATHS 0x0200 /* TEXTCAPS */ #define TC_OP_CHARACTER 0x0001 #define TC_OP_STROKE 0x0002 #define TC_CP_STROKE 0x0004 #define TC_CR_90 0x0008 #define TC_CR_ANY 0x0010 #define TC_SF_X_YINDEP 0x0020 #define TC_SA_DOUBLE 0x0040 #define TC_SA_INTEGER 0x0080 #define TC_SA_CONTIN 0x0100 #define TC_EA_DOUBLE 0x0200 #define TC_IA_ABLE 0x0400 #define TC_UA_ABLE 0x0800 #define TC_SO_ABLE 0x1000 #define TC_RA_ABLE 0x2000 #define TC_VA_ABLE 0x4000 #define TC_RESERVED 0x8000 #define TC_SCROLLBLT 0x00010000 /* CLIPCAPS */ #define CP_NONE 0x0000 #define CP_RECTANGLE 0x0001 #define CP_REGION 0x0002 /* RASTERCAPS */ #define RC_NONE 0x0000 #define RC_BITBLT 0x0001 #define RC_BANDING 0x0002 #define RC_SCALING 0x0004 #define RC_BITMAP64 0x0008 #define RC_GDI20_OUTPUT 0x0010 #define RC_GDI20_STATE 0x0020 #define RC_SAVEBITMAP 0x0040 #define RC_DI_BITMAP 0x0080 #define RC_PALETTE 0x0100 #define RC_DIBTODEV 0x0200 #define RC_BIGFONT 0x0400 #define RC_STRETCHBLT 0x0800 #define RC_FLOODFILL 0x1000 #define RC_STRETCHDIB 0x2000 #define RC_OP_DX_OUTPUT 0x4000 #define RC_DEVBITS 0x8000 /* CAPS1 */ #define C1_TRANSPARENT 0x0001 #define TC_TT_ABLE 0x0002 #define C1_TT_CR_ANY 0x0004 #define C1_EMF_COMPLIANT 0x0008 #define C1_DIBENGINE 0x0010 #define C1_GAMMA_RAMP 0x0040 #define C1_REINIT_ABLE 0x0080 #define C1_GLYPH_INDEX 0x0100 #define C1_BIT_PACKED 0x0200 #define C1_BYTE_PACKED 0x0400 #define C1_COLORCURSOR 0x0800 #define C1_CMYK_ABLE 0x1000 #define C1_SLOW_CARD 0x2000 /* SHADEBLENDCAPS */ #define SB_NONE 0x0000 #define SB_CONST_ALPHA 0x0001 #define SB_PIXEL_ALPHA 0x0002 #define SB_PREMULT_ALPHA 0x0004 #define SB_GRAD_RECT 0x0010 #define SB_GRAD_TRI 0x0020 /* Device-independent bitmaps */ typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD, *LPRGBQUAD; typedef struct tagRGBTRIPLE { BYTE rgbtBlue; BYTE rgbtGreen; BYTE rgbtRed; } RGBTRIPLE; #include typedef struct { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER, *PBITMAPFILEHEADER, *LPBITMAPFILEHEADER; #include #define MAKEPOINTS(l) (*((POINTS *)&(l))) typedef struct { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER; typedef struct { DWORD bV4Size; LONG bV4Width; LONG bV4Height; WORD bV4Planes; WORD bV4BitCount; DWORD bV4V4Compression; DWORD bV4SizeImage; LONG bV4XPelsPerMeter; LONG bV4YPelsPerMeter; DWORD bV4ClrUsed; DWORD bV4ClrImportant; DWORD bV4RedMask; DWORD bV4GreenMask; DWORD bV4BlueMask; DWORD bV4AlphaMask; DWORD bV4CSType; CIEXYZTRIPLE bV4Endpoints; DWORD bV4GammaRed; DWORD bV4GammaGreen; DWORD bV4GammaBlue; } BITMAPV4HEADER, *PBITMAPV4HEADER; typedef struct { DWORD bV5Size; LONG bV5Width; LONG bV5Height; WORD bV5Planes; WORD bV5BitCount; DWORD bV5Compression; DWORD bV5SizeImage; LONG bV5XPelsPerMeter; LONG bV5YPelsPerMeter; DWORD bV5ClrUsed; DWORD bV5ClrImportant; DWORD bV5RedMask; DWORD bV5GreenMask; DWORD bV5BlueMask; DWORD bV5AlphaMask; DWORD bV5CSType; CIEXYZTRIPLE bV5Endpoints; DWORD bV5GammaRed; DWORD bV5GammaGreen; DWORD bV5GammaBlue; DWORD bV5Intent; DWORD bV5ProfileData; DWORD bV5ProfileSize; DWORD bV5Reserved; } BITMAPV5HEADER, *LPBITMAPV5HEADER, *PBITMAPV5HEADER; #define PROFILE_LINKED 0x4c494e4b /* 'LINK' */ #define PROFILE_EMBEDDED 0x4d424544 /* 'MBED' */ /* biCompression */ #define BI_RGB 0 #define BI_RLE8 1 #define BI_RLE4 2 #define BI_BITFIELDS 3 #define BI_JPEG 4 #define BI_PNG 5 typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO, *PBITMAPINFO, *LPBITMAPINFO; typedef struct { DWORD bcSize; WORD bcWidth; WORD bcHeight; WORD bcPlanes; WORD bcBitCount; } BITMAPCOREHEADER, *PBITMAPCOREHEADER, *LPBITMAPCOREHEADER; typedef struct { BITMAPCOREHEADER bmciHeader; RGBTRIPLE bmciColors[1]; } BITMAPCOREINFO, *PBITMAPCOREINFO, *LPBITMAPCOREINFO; #define DIB_RGB_COLORS 0 #define DIB_PAL_COLORS 1 #define CBM_INIT 4 typedef struct { BITMAP dsBm; BITMAPINFOHEADER dsBmih; DWORD dsBitfields[3]; HANDLE dshSection; DWORD dsOffset; } DIBSECTION, *PDIBSECTION, *LPDIBSECTION; /* Stock GDI objects for GetStockObject() */ #define WHITE_BRUSH 0 #define LTGRAY_BRUSH 1 #define GRAY_BRUSH 2 #define DKGRAY_BRUSH 3 #define BLACK_BRUSH 4 #define NULL_BRUSH 5 #define HOLLOW_BRUSH 5 #define WHITE_PEN 6 #define BLACK_PEN 7 #define NULL_PEN 8 #define OEM_FIXED_FONT 10 #define ANSI_FIXED_FONT 11 #define ANSI_VAR_FONT 12 #define SYSTEM_FONT 13 #define DEVICE_DEFAULT_FONT 14 #define DEFAULT_PALETTE 15 #define SYSTEM_FIXED_FONT 16 #define DEFAULT_GUI_FONT 17 #define DC_BRUSH 18 #define DC_PEN 19 #define STOCK_LAST 19 #define CLR_INVALID 0xffffffff typedef USHORT COLOR16; typedef struct _TRIVERTEX { LONG x; LONG y; COLOR16 Red; COLOR16 Green; COLOR16 Blue; COLOR16 Alpha; } TRIVERTEX, *PTRIVERTEX, *LPTRIVERTEX; typedef struct _GRADIENT_TRIANGLE { ULONG Vertex1; ULONG Vertex2; ULONG Vertex3; } GRADIENT_TRIANGLE, *PGRADIENT_TRIANGLE, *LPGRADIENT_TRIANGLE; typedef struct _GRADIENT_RECT { ULONG UpperLeft; ULONG LowerRight; } GRADIENT_RECT, *PGRADIENT_RECT, *LPGRADIENT_RECT; #define AC_SRC_OVER 0x00 #define AC_SRC_ALPHA 0x01 typedef struct _BLENDFUNCTION { BYTE BlendOp; BYTE BlendFlags; BYTE SourceConstantAlpha; BYTE AlphaFormat; } BLENDFUNCTION, *PBLENDFUNCTION; #define GRADIENT_FILL_RECT_H 0x00000000 #define GRADIENT_FILL_RECT_V 0x00000001 #define GRADIENT_FILL_TRIANGLE 0x00000002 #define GRADIENT_FILL_OP_FLAG 0x000000ff /* Metafile header structure */ #include typedef struct { WORD mtType; WORD mtHeaderSize; WORD mtVersion; DWORD mtSize; WORD mtNoObjects; DWORD mtMaxRecord; WORD mtNoParameters; } METAHEADER, *PMETAHEADER, *LPMETAHEADER; #include /* Metafile typical record structure */ typedef struct { DWORD rdSize; WORD rdFunction; WORD rdParm[1]; } METARECORD, *PMETARECORD, *LPMETARECORD; /* Handle table structure */ typedef struct { HGDIOBJ objectHandle[1]; } HANDLETABLE, *PHANDLETABLE, *LPHANDLETABLE; /* Clipboard metafile picture structure */ typedef struct { LONG mm; LONG xExt; LONG yExt; HMETAFILE hMF; } METAFILEPICT, *LPMETAFILEPICT; /* Metafile functions */ #define META_SETBKCOLOR 0x0201 #define META_SETBKMODE 0x0102 #define META_SETMAPMODE 0x0103 #define META_SETROP2 0x0104 #define META_SETRELABS 0x0105 #define META_SETPOLYFILLMODE 0x0106 #define META_SETSTRETCHBLTMODE 0x0107 #define META_SETTEXTCHAREXTRA 0x0108 #define META_SETTEXTCOLOR 0x0209 #define META_SETTEXTJUSTIFICATION 0x020A #define META_SETWINDOWORG 0x020B #define META_SETWINDOWEXT 0x020C #define META_SETVIEWPORTORG 0x020D #define META_SETVIEWPORTEXT 0x020E #define META_OFFSETWINDOWORG 0x020F #define META_SCALEWINDOWEXT 0x0410 #define META_OFFSETVIEWPORTORG 0x0211 #define META_SCALEVIEWPORTEXT 0x0412 #define META_LINETO 0x0213 #define META_MOVETO 0x0214 #define META_EXCLUDECLIPRECT 0x0415 #define META_INTERSECTCLIPRECT 0x0416 #define META_ARC 0x0817 #define META_ELLIPSE 0x0418 #define META_FLOODFILL 0x0419 #define META_PIE 0x081A #define META_RECTANGLE 0x041B #define META_ROUNDRECT 0x061C #define META_PATBLT 0x061D #define META_SAVEDC 0x001E #define META_SETPIXEL 0x041F #define META_OFFSETCLIPRGN 0x0220 #define META_TEXTOUT 0x0521 #define META_BITBLT 0x0922 #define META_STRETCHBLT 0x0B23 #define META_POLYGON 0x0324 #define META_POLYLINE 0x0325 #define META_ESCAPE 0x0626 #define META_RESTOREDC 0x0127 #define META_FILLREGION 0x0228 #define META_FRAMEREGION 0x0429 #define META_INVERTREGION 0x012A #define META_PAINTREGION 0x012B #define META_SELECTCLIPREGION 0x012C #define META_SELECTOBJECT 0x012D #define META_SETTEXTALIGN 0x012E #define META_DRAWTEXT 0x062F #define META_CHORD 0x0830 #define META_SETMAPPERFLAGS 0x0231 #define META_EXTTEXTOUT 0x0A32 #define META_SETDIBTODEV 0x0D33 #define META_SELECTPALETTE 0x0234 #define META_REALIZEPALETTE 0x0035 #define META_ANIMATEPALETTE 0x0436 #define META_SETPALENTRIES 0x0037 #define META_POLYPOLYGON 0x0538 #define META_RESIZEPALETTE 0x0139 #define META_DIBBITBLT 0x0940 #define META_DIBSTRETCHBLT 0x0B41 #define META_DIBCREATEPATTERNBRUSH 0x0142 #define META_STRETCHDIB 0x0F43 #define META_EXTFLOODFILL 0x0548 #define META_RESETDC 0x014C #define META_STARTDOC 0x014D #define META_STARTPAGE 0x004F #define META_ENDPAGE 0x0050 #define META_ABORTDOC 0x0052 #define META_ENDDOC 0x005E #define META_DELETEOBJECT 0x01F0 #define META_CREATEPALETTE 0x00F7 #define META_CREATEBRUSH 0x00F8 #define META_CREATEPATTERNBRUSH 0x01F9 #define META_CREATEPENINDIRECT 0x02FA #define META_CREATEFONTINDIRECT 0x02FB #define META_CREATEBRUSHINDIRECT 0x02FC #define META_CREATEBITMAPINDIRECT 0x02FD #define META_CREATEBITMAP 0x06FE #define META_CREATEREGION 0x06FF #define META_UNKNOWN 0x0529 /* FIXME: unknown meta magic */ typedef INT (CALLBACK *MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*, INT,LPARAM); /* enhanced metafile structures and functions */ /* note that ENHMETAHEADER is just a particular kind of ENHMETARECORD, ie. the header is just the first record in the metafile */ typedef struct { DWORD iType; DWORD nSize; RECTL rclBounds; RECTL rclFrame; DWORD dSignature; DWORD nVersion; DWORD nBytes; DWORD nRecords; WORD nHandles; WORD sReserved; DWORD nDescription; DWORD offDescription; DWORD nPalEntries; SIZEL szlDevice; SIZEL szlMillimeters; DWORD cbPixelFormat; DWORD offPixelFormat; DWORD bOpenGL; SIZEL szlMicrometers; } ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER; typedef struct { DWORD iType; DWORD nSize; DWORD dParm[1]; } ENHMETARECORD, *LPENHMETARECORD; typedef struct { DWORD iType; DWORD nSize; } EMR, *PEMR; typedef struct { POINTL ptlReference; DWORD nChars; DWORD offString; DWORD fOptions; RECTL rcl; DWORD offDx; } EMRTEXT, *PEMRTEXT; typedef struct { EMR emr; } EMRABORTPATH, *PEMRABORTPATH, EMRBEGINPATH, *PEMRBEGINPATH, EMRENDPATH, *PEMRENDPATH, EMRCLOSEFIGURE, *PEMRCLOSEFIGURE, EMRFLATTENPATH, *PEMRFLATTENPATH, EMRWIDENPATH, *PEMRWIDENPATH, EMRSETMETARGN, *PEMRSETMETARGN, EMRSAVEDC, *PEMRSAVEDC, EMRREALIZEPALETTE, *PEMRREALIZEPALETTE; typedef struct { EMR emr; POINTL ptlCenter; DWORD nRadius; FLOAT eStartAngle; FLOAT eSweepAngle; } EMRANGLEARC, *PEMRANGLEARC; typedef struct { EMR emr; RECTL rclBox; POINTL ptlStart; POINTL ptlEnd; } EMRARC, *PEMRARC, EMRARCTO, *PEMRARCTO, EMRCHORD, *PEMRCHORD, EMRPIE, *PEMRPIE; typedef struct { EMR emr; RECTL rclBounds; LONG xDest; LONG yDest; LONG cxDest; LONG cyDest; DWORD dwRop; LONG xSrc; LONG ySrc; XFORM xformSrc; COLORREF crBkColorSrc; DWORD iUsageSrc; DWORD offBmiSrc; DWORD cbBmiSrc; DWORD offBitsSrc; DWORD cbBitsSrc; } EMRBITBLT, *PEMRBITBLT; typedef struct { EMR emr; DWORD ihBrush; LOGBRUSH32 lb; } EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT; typedef struct { EMR emr; DWORD ihCS; LOGCOLORSPACEA lcs; } EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE; typedef struct { EMR emr; DWORD ihCS; LOGCOLORSPACEW lcs; DWORD dwFlags; DWORD cbData; BYTE Data[1]; } EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW; typedef struct { EMR emr; DWORD ihBrush; DWORD iUsage; DWORD offBmi; DWORD cbBmi; DWORD offBits; DWORD cbBits; } EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT; typedef struct { EMR emr; DWORD ihBrush; DWORD iUsage; DWORD offBmi; DWORD cbBmi; DWORD offBits; DWORD cbBits; } EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH; typedef struct { EMR emr; DWORD ihPal; LOGPALETTE lgpl; } EMRCREATEPALETTE, *PEMRCREATEPALETTE; typedef struct { EMR emr; DWORD ihPen; LOGPEN lopn; } EMRCREATEPEN, *PEMRCREATEPEN; typedef struct { EMR emr; DWORD ihCS; } EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE, EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE, EMRSETCOLORSPACE, *PEMRSETCOLORSPACE; typedef struct { EMR emr; DWORD ihObject; } EMRDELETEOBJECT, *PEMRDELETEOBJECT, EMRSELECTOBJECT, *PEMRSELECTOBJECT; typedef struct { EMR emr; RECTL rclBox; } EMRELLIPSE, *PEMRELLIPSE, EMRRECTANGLE, *PEMRRECTANGLE; typedef struct { EMR emr; DWORD nPalEntries; DWORD offPalEntries; DWORD nSizeLast; } EMREOF, *PEMREOF; typedef struct { EMR emr; RECTL rclClip; } EMREXCLUDECLIPRECT, *PEMREXCLUDECLIPRECT, EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT; typedef struct { EMR emr; DWORD ihFont; EXTLOGFONTW elfw; } EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW; typedef struct { EMR emr; DWORD ihPen; DWORD offBmi; DWORD cbBmi; DWORD offBits; DWORD cbBits; EXTLOGPEN elp; } EMREXTCREATEPEN, *PEMREXTCREATEPEN; typedef struct { EMR emr; POINTL ptlStart; COLORREF crColor; DWORD iMode; } EMREXTFLOODFILL, *PEMREXTFLOODFILL; typedef struct { EMR emr; DWORD cbRgnData; DWORD iMode; BYTE RgnData[1]; } EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN; typedef struct { EMR emr; RECTL rclBounds; DWORD iGraphicsMode; FLOAT exScale; FLOAT eyScale; EMRTEXT emrtext; } EMREXTTEXTOUTA, *PEMREXTTEXTOUTA, EMREXTTEXTOUTW, *PEMREXTTEXTOUTW; typedef struct { EMR emr; RECTL rclBounds; } EMRFILLPATH, *PEMRFILLPATH, EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH, EMRSTROKEPATH, *PEMRSTROKEPATH; typedef struct { EMR emr; RECTL rclBounds; DWORD cbRgnData; DWORD ihBrush; BYTE RgnData[1]; } EMRFILLRGN, *PEMRFILLRGN; typedef struct { DWORD dSignature; DWORD nVersion; DWORD cbData; DWORD offData; } EMRFORMAT, *PEMRFORMAT; typedef struct { EMR emr; RECTL rclBounds; DWORD cbRgnData; DWORD ihBrush; SIZEL szlStroke; BYTE RgnData[1]; } EMRFRAMERGN, *PEMRFRAMERGN; typedef struct { EMR emr; DWORD cbData; BYTE Data[1]; } EMRGDICOMMENT, *PEMRGDICOMMENT; typedef struct { EMR emr; RECTL rclBounds; DWORD nVer; DWORD nTri; ULONG ulMode; TRIVERTEX Ver[1]; } EMRGRADIENTFILL, *PEMRGRADIENTFILL; typedef struct { EMR emr; RECTL rclBounds; DWORD cbRgnData; BYTE RgnData[1]; } EMRINVERTRGN, *PEMRINVERTRGN, EMRPAINTRGN, *PEMRPAINTRGN; typedef struct { EMR emr; POINTL ptl; } EMRLINETO, *PEMRLINETO, EMRMOVETOEX, *PEMRMOVETOEX; typedef struct { EMR emr; RECTL rclBounds; LONG xDest; LONG yDest; LONG cxDest; LONG cyDest; DWORD dwRop; LONG xSrc; LONG ySrc; XFORM xformSrc; COLORREF crBkColorSrc; DWORD iUsageSrc; DWORD offBmiSrc; DWORD cbBmiSrc; DWORD offBitsSrc; DWORD cbBitsSrc; LONG xMask; LONG yMask; DWORD iUsageMask; DWORD offBmiMask; DWORD cbBmiMask; DWORD offBitsMask; DWORD cbBitsMask; } EMRMASKBLT, *PEMRMASKBLT; typedef struct { EMR emr; XFORM xform; DWORD iMode; } EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM; typedef struct { EMR emr; POINTL ptlOffset; } EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN; typedef struct { EMR emr; RECTL rclBounds; POINTL aptlDest[3]; LONG xSrc; LONG ySrc; LONG cxSrc; LONG cySrc; XFORM xformSrc; COLORREF crBkColorSrc; DWORD iUsageSrc; DWORD offBmiSrc; DWORD cbBmiSrc; DWORD offBitsSrc; DWORD cbBitsSrc; LONG xMask; LONG yMask; DWORD iUsageMask; DWORD offBmiMask; DWORD cbBmiMask; DWORD offBitsMask; DWORD cbBitsMask; } EMRPLGBLT, *PEMRPLGBLT; typedef struct { EMR emr; RECTL rclBounds; DWORD cptl; POINTL aptl[1]; } EMRPOLYLINE, *PEMRPOLYLINE, EMRPOLYBEZIER, *PEMRPOLYBEZIER, EMRPOLYGON, *PEMRPOLYGON, EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO, EMRPOLYLINETO, *PEMRPOLYLINETO; typedef struct { EMR emr; RECTL rclBounds; DWORD cpts; POINTS apts[1]; } EMRPOLYLINE16, *PEMRPOLYLINE16, EMRPOLYBEZIER16, *PEMRPOLYBEZIER16, EMRPOLYGON16, *PEMRPOLYGON16, EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16, EMRPOLYLINETO16, *PEMRPOLYLINETO16; typedef struct { EMR emr; RECTL rclBounds; DWORD cpts; POINTS apts[1]; BYTE abTypes[1]; } EMRPOLYDRAW16, *PEMRPOLYDRAW16; typedef struct { EMR emr; RECTL rclBounds; DWORD nPolys; DWORD cpts; DWORD aPolyCounts[1]; POINTS apts[1]; } EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16, EMRPOLYPOLYGON16, *PEMRPOLYPOLYGON16; typedef struct { EMR emr; RECTL rclBounds; DWORD cptl; POINTL aptl[1]; BYTE abTypes[1]; } EMRPOLYDRAW, *PEMRPOLYDRAW; typedef struct { EMR emr; RECTL rclBounds; DWORD nPolys; DWORD cptl; DWORD aPolyCounts[1]; POINTL aptl[1]; } EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE, EMRPOLYPOLYGON, *PEMRPOLYPOLYGON; typedef struct { EMR emr; RECTL rclBounds; DWORD iGraphicsMode; FLOAT exScale; FLOAT eyScale; LONG cStrings; EMRTEXT aemrtext[1]; } EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA, EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW; typedef struct { EMR emr; DWORD ihPal; DWORD cEntries; } EMRRESIZEPALETTE, *PEMRRESIZEPALETTE; typedef struct { EMR emr; LONG iRelative; } EMRRESTOREDC, *PEMRRESTOREDC; typedef struct { EMR emr; RECTL rclBox; SIZEL szlCorner; } EMRROUNDRECT, *PEMRROUNDRECT; typedef struct { EMR emr; LONG xNum; LONG xDenom; LONG yNum; LONG yDenom; } EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX, EMRSCALEWINDOWEXTEX, *PEMRSCALEWINDOWEXTEX; typedef struct { EMR emr; DWORD iMode; } EMRSELECTCLIPPATH, *PEMRSELECTCLIPPATH, EMRSETBKMODE, *PEMRSETBKMODE, EMRSETMAPMODE, *PEMRSETMAPMODE, EMRSETPOLYFILLMODE, *PEMRSETPOLYFILLMODE, EMRSETROP2, *PEMRSETROP2, EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE, EMRSETTEXTALIGN, *PEMRSETTEXTALIGN, EMRSETICMMODE, *PEMRSETICMMODE, EMRSETLAYOUT, *PEMRSETLAYOUT; typedef struct { EMR emr; DWORD ihPal; } EMRSELECTPALETTE, *PEMRSELECTPALETTE; typedef struct { EMR emr; DWORD iArcDirection; } EMRSETARCDIRECTION, *PEMRSETARCDIRECTION; typedef struct { EMR emr; COLORREF crColor; } EMRSETBKCOLOR, *PEMRSETBKCOLOR, EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR; typedef struct { EMR emr; POINTL ptlOrigin; } EMRSETBRUSHORGEX, *PEMRSETBRUSHORGEX, EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX, EMRSETWINDOWORGEX, *PEMRSETWINDOWORGEX; typedef struct { EMR emr; COLORADJUSTMENT ColorAdjustment; } EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT; typedef struct { EMR emr; RECTL rclBounds; LONG xDest; LONG yDest; LONG xSrc; LONG ySrc; LONG cxSrc; LONG cySrc; DWORD offBmiSrc; DWORD cbBmiSrc; DWORD offBitsSrc; DWORD cbBitsSrc; DWORD iUsageSrc; DWORD iStartScan; DWORD cScans; } EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE; typedef struct { EMR emr; DWORD dwFlags; } EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS; typedef struct { EMR emr; FLOAT eMiterLimit; } EMRSETMITERLIMIT, *PEMRSETMITERLIMIT; typedef struct { EMR emr; DWORD ihPal; DWORD iStart; DWORD cEntries; PALETTEENTRY aPalEntries[1]; } EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES; typedef struct { EMR emr; POINTL ptlPixel; COLORREF crColor; } EMRSETPIXELV, *PEMRSETPIXELV; typedef struct { EMR emr; SIZEL szlExtent; } EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX, EMRSETWINDOWEXTEX, *PEMRSETWINDOWEXTEX; typedef struct { EMR emr; XFORM xform; } EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM; typedef struct { EMR emr; RECTL rclBounds; LONG xDest; LONG yDest; LONG cxDest; LONG cyDest; DWORD dwRop; LONG xSrc; LONG ySrc; XFORM xformSrc; COLORREF crBkColorSrc; DWORD iUsageSrc; DWORD offBmiSrc; DWORD cbBmiSrc; DWORD offBitsSrc; DWORD cbBitsSrc; LONG cxSrc; LONG cySrc; } EMRSTRETCHBLT, *PEMRSTRETCHBLT; typedef struct { EMR emr; RECTL rclBounds; LONG xDest; LONG yDest; LONG cxDest; LONG cyDest; DWORD dwRop; LONG xSrc; LONG ySrc; XFORM xformSrc; COLORREF crBkColorSrc; DWORD iUsageSrc; DWORD offBmiSrc; DWORD cbBmiSrc; DWORD offBitsSrc; DWORD cbBitsSrc; LONG cxSrc; LONG cySrc; } EMRALPHABLEND, *PEMRALPHABLEND; typedef struct { EMR emr; RECTL rclBounds; LONG xDest; LONG yDest; LONG xSrc; LONG ySrc; LONG cxSrc; LONG cySrc; DWORD offBmiSrc; DWORD cbBmiSrc; DWORD offBitsSrc; DWORD cbBitsSrc; DWORD iUsageSrc; DWORD dwRop; LONG cxDest; LONG cyDest; } EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS; typedef struct { EMR emr; PIXELFORMATDESCRIPTOR pfd; } EMRPIXELFORMAT, *PEMRPIXELFORMAT; typedef struct tagEMRGLSRECORD { EMR emr; DWORD cbData; BYTE Data[1]; } EMRGLSRECORD, *PEMRGLSRECORD; typedef struct { EMR emr; RECTL rclBounds; DWORD cbData; BYTE Data[1]; } EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD; typedef INT (CALLBACK *ENHMFENUMPROC)(HDC, HANDLETABLE *, const ENHMETARECORD *, INT, LPARAM); #define EMR_HEADER 1 #define EMR_POLYBEZIER 2 #define EMR_POLYGON 3 #define EMR_POLYLINE 4 #define EMR_POLYBEZIERTO 5 #define EMR_POLYLINETO 6 #define EMR_POLYPOLYLINE 7 #define EMR_POLYPOLYGON 8 #define EMR_SETWINDOWEXTEX 9 #define EMR_SETWINDOWORGEX 10 #define EMR_SETVIEWPORTEXTEX 11 #define EMR_SETVIEWPORTORGEX 12 #define EMR_SETBRUSHORGEX 13 #define EMR_EOF 14 #define EMR_SETPIXELV 15 #define EMR_SETMAPPERFLAGS 16 #define EMR_SETMAPMODE 17 #define EMR_SETBKMODE 18 #define EMR_SETPOLYFILLMODE 19 #define EMR_SETROP2 20 #define EMR_SETSTRETCHBLTMODE 21 #define EMR_SETTEXTALIGN 22 #define EMR_SETCOLORADJUSTMENT 23 #define EMR_SETTEXTCOLOR 24 #define EMR_SETBKCOLOR 25 #define EMR_OFFSETCLIPRGN 26 #define EMR_MOVETOEX 27 #define EMR_SETMETARGN 28 #define EMR_EXCLUDECLIPRECT 29 #define EMR_INTERSECTCLIPRECT 30 #define EMR_SCALEVIEWPORTEXTEX 31 #define EMR_SCALEWINDOWEXTEX 32 #define EMR_SAVEDC 33 #define EMR_RESTOREDC 34 #define EMR_SETWORLDTRANSFORM 35 #define EMR_MODIFYWORLDTRANSFORM 36 #define EMR_SELECTOBJECT 37 #define EMR_CREATEPEN 38 #define EMR_CREATEBRUSHINDIRECT 39 #define EMR_DELETEOBJECT 40 #define EMR_ANGLEARC 41 #define EMR_ELLIPSE 42 #define EMR_RECTANGLE 43 #define EMR_ROUNDRECT 44 #define EMR_ARC 45 #define EMR_CHORD 46 #define EMR_PIE 47 #define EMR_SELECTPALETTE 48 #define EMR_CREATEPALETTE 49 #define EMR_SETPALETTEENTRIES 50 #define EMR_RESIZEPALETTE 51 #define EMR_REALIZEPALETTE 52 #define EMR_EXTFLOODFILL 53 #define EMR_LINETO 54 #define EMR_ARCTO 55 #define EMR_POLYDRAW 56 #define EMR_SETARCDIRECTION 57 #define EMR_SETMITERLIMIT 58 #define EMR_BEGINPATH 59 #define EMR_ENDPATH 60 #define EMR_CLOSEFIGURE 61 #define EMR_FILLPATH 62 #define EMR_STROKEANDFILLPATH 63 #define EMR_STROKEPATH 64 #define EMR_FLATTENPATH 65 #define EMR_WIDENPATH 66 #define EMR_SELECTCLIPPATH 67 #define EMR_ABORTPATH 68 #define EMR_GDICOMMENT 70 #define EMR_FILLRGN 71 #define EMR_FRAMERGN 72 #define EMR_INVERTRGN 73 #define EMR_PAINTRGN 74 #define EMR_EXTSELECTCLIPRGN 75 #define EMR_BITBLT 76 #define EMR_STRETCHBLT 77 #define EMR_MASKBLT 78 #define EMR_PLGBLT 79 #define EMR_SETDIBITSTODEVICE 80 #define EMR_STRETCHDIBITS 81 #define EMR_EXTCREATEFONTINDIRECTW 82 #define EMR_EXTTEXTOUTA 83 #define EMR_EXTTEXTOUTW 84 #define EMR_POLYBEZIER16 85 #define EMR_POLYGON16 86 #define EMR_POLYLINE16 87 #define EMR_POLYBEZIERTO16 88 #define EMR_POLYLINETO16 89 #define EMR_POLYPOLYLINE16 90 #define EMR_POLYPOLYGON16 91 #define EMR_POLYDRAW16 92 #define EMR_CREATEMONOBRUSH 93 #define EMR_CREATEDIBPATTERNBRUSHPT 94 #define EMR_EXTCREATEPEN 95 #define EMR_POLYTEXTOUTA 96 #define EMR_POLYTEXTOUTW 97 #define EMR_SETICMMODE 98 #define EMR_CREATECOLORSPACE 99 #define EMR_SETCOLORSPACE 100 #define EMR_DELETECOLORSPACE 101 #define EMR_GLSRECORD 102 #define EMR_GLSBOUNDEDRECORD 103 #define EMR_PIXELFORMAT 104 #define EMR_DRAWESCAPE 105 #define EMR_EXTESCAPE 106 #define EMR_STARTDOC 107 #define EMR_SMALLTEXTOUT 108 #define EMR_FORCEUFIMAPPING 109 #define EMR_NAMEDESCAPE 110 #define EMR_COLORCORRECTPALETTE 111 #define EMR_SETICMPROFILEA 112 #define EMR_SETICMPROFILEW 113 #define EMR_ALPHABLEND 114 #define EMR_SETLAYOUT 115 #define EMR_TRANSPARENTBLT 116 #define EMR_RESERVED_117 117 #define EMR_GRADIENTFILL 118 #define EMR_SETLINKEDUFI 119 #define EMR_SETTEXTJUSTIFICATION 120 #define EMR_COLORMATCHTOTARGETW 121 #define EMR_CREATECOLORSPACEW 122 #define EMR_MIN 1 #define EMR_MAX 122 #define ENHMETA_SIGNATURE 1179469088 #define ENHMETA_STOCK_OBJECT 0x80000000 #define GDICOMMENT_IDENTIFIER 0x43494447 #define GDICOMMENT_WINDOWS_METAFILE 0x80000001 #define GDICOMMENT_BEGINGROUP 0x00000002 #define GDICOMMENT_ENDGROUP 0x00000003 #define GDICOMMENT_MULTIFORMATS 0x40000004 #define GDICOMMENT_UNICODE_STRING 0x00000040 #define GDICOMMENT_UNICODE_END 0x00000080 #define EPS_SIGNATURE 0x46535045 #define CCHDEVICENAME 32 #define CCHFORMNAME 32 typedef struct { BYTE dmDeviceName[CCHDEVICENAME]; WORD dmSpecVersion; WORD dmDriverVersion; WORD dmSize; WORD dmDriverExtra; DWORD dmFields; union { struct { short dmOrientation; short dmPaperSize; short dmPaperLength; short dmPaperWidth; short dmScale; short dmCopies; short dmDefaultSource; short dmPrintQuality; } DUMMYSTRUCTNAME1; struct { POINTL dmPosition; DWORD dmDisplayOrientation; DWORD dmDisplayFixedOutput; } DUMMYSTRUCTNAME2; } DUMMYUNIONNAME1; short dmColor; short dmDuplex; short dmYResolution; short dmTTOption; short dmCollate; BYTE dmFormName[CCHFORMNAME]; WORD dmLogPixels; DWORD dmBitsPerPel; DWORD dmPelsWidth; DWORD dmPelsHeight; union { DWORD dmDisplayFlags; DWORD dmNup; } DUMMYUNIONNAME2; DWORD dmDisplayFrequency; DWORD dmICMMethod; DWORD dmICMIntent; DWORD dmMediaType; DWORD dmDitherType; DWORD dmReserved1; DWORD dmReserved2; DWORD dmPanningWidth; DWORD dmPanningHeight; } DEVMODEA, *PDEVMODEA, *LPDEVMODEA; typedef struct { WCHAR dmDeviceName[CCHDEVICENAME]; WORD dmSpecVersion; WORD dmDriverVersion; WORD dmSize; WORD dmDriverExtra; DWORD dmFields; union { struct { short dmOrientation; short dmPaperSize; short dmPaperLength; short dmPaperWidth; short dmScale; short dmCopies; short dmDefaultSource; short dmPrintQuality; } DUMMYSTRUCTNAME1; struct { POINTL dmPosition; DWORD dmDisplayOrientation; DWORD dmDisplayFixedOutput; } DUMMYSTRUCTNAME2; } DUMMYUNIONNAME1; short dmColor; short dmDuplex; short dmYResolution; short dmTTOption; short dmCollate; WCHAR dmFormName[CCHFORMNAME]; WORD dmLogPixels; DWORD dmBitsPerPel; DWORD dmPelsWidth; DWORD dmPelsHeight; union { DWORD dmDisplayFlags; DWORD dmNup; } DUMMYUNIONNAME2; DWORD dmDisplayFrequency; DWORD dmICMMethod; DWORD dmICMIntent; DWORD dmMediaType; DWORD dmDitherType; DWORD dmReserved1; DWORD dmReserved2; DWORD dmPanningWidth; DWORD dmPanningHeight; } DEVMODEW, *PDEVMODEW, *LPDEVMODEW; DECL_WINELIB_TYPE_AW(DEVMODE) DECL_WINELIB_TYPE_AW(PDEVMODE) DECL_WINELIB_TYPE_AW(LPDEVMODE) #define DM_SPECVERSION 0x401 #define DM_UPDATE 1 #define DM_COPY 2 #define DM_PROMPT 4 #define DM_MODIFY 8 #define DM_IN_BUFFER DM_MODIFY #define DM_IN_PROMPT DM_PROMPT #define DM_OUT_BUFFER DM_COPY #define DM_OUT_DEFAULT DM_UPDATE #define DM_ORIENTATION __MSABI_LONG(0x00000001) #define DM_PAPERSIZE __MSABI_LONG(0x00000002) #define DM_PAPERLENGTH __MSABI_LONG(0x00000004) #define DM_PAPERWIDTH __MSABI_LONG(0x00000008) #define DM_SCALE __MSABI_LONG(0x00000010) #define DM_POSITION __MSABI_LONG(0x00000020) #define DM_NUP __MSABI_LONG(0x00000040) #define DM_DISPLAYORIENTATION __MSABI_LONG(0x00000080) #define DM_COPIES __MSABI_LONG(0x00000100) #define DM_DEFAULTSOURCE __MSABI_LONG(0x00000200) #define DM_PRINTQUALITY __MSABI_LONG(0x00000400) #define DM_COLOR __MSABI_LONG(0x00000800) #define DM_DUPLEX __MSABI_LONG(0x00001000) #define DM_YRESOLUTION __MSABI_LONG(0x00002000) #define DM_TTOPTION __MSABI_LONG(0x00004000) #define DM_COLLATE __MSABI_LONG(0x00008000) #define DM_FORMNAME __MSABI_LONG(0x00010000) #define DM_LOGPIXELS __MSABI_LONG(0x00020000) #define DM_BITSPERPEL __MSABI_LONG(0x00040000) #define DM_PELSWIDTH __MSABI_LONG(0x00080000) #define DM_PELSHEIGHT __MSABI_LONG(0x00100000) #define DM_DISPLAYFLAGS __MSABI_LONG(0x00200000) #define DM_DISPLAYFREQUENCY __MSABI_LONG(0x00400000) #define DM_ICMMETHOD __MSABI_LONG(0x00800000) #define DM_ICMINTENT __MSABI_LONG(0x01000000) #define DM_MEDIATYPE __MSABI_LONG(0x02000000) #define DM_DITHERTYPE __MSABI_LONG(0x04000000) #define DM_PANNINGWIDTH __MSABI_LONG(0x08000000) #define DM_PANNINGHEIGHT __MSABI_LONG(0x10000000) #define DM_DISPLAYFIXEDOUTPUT __MSABI_LONG(0x20000000) #define DM_GRAYSCALE 1 #define DM_INTERLACED 2 #define DMDISPLAYFLAGS_TEXTMODE 4 #define DMORIENT_PORTRAIT 1 #define DMORIENT_LANDSCAPE 2 #define DMPAPER_FIRST DMPAPER_LETTER #define DMPAPER_LETTER 1 #define DMPAPER_LETTERSMALL 2 #define DMPAPER_TABLOID 3 #define DMPAPER_LEDGER 4 #define DMPAPER_LEGAL 5 #define DMPAPER_STATEMENT 6 #define DMPAPER_EXECUTIVE 7 #define DMPAPER_A3 8 #define DMPAPER_A4 9 #define DMPAPER_A4SMALL 10 #define DMPAPER_A5 11 #define DMPAPER_B4 12 #define DMPAPER_B5 13 #define DMPAPER_FOLIO 14 #define DMPAPER_QUARTO 15 #define DMPAPER_10X14 16 #define DMPAPER_11X17 17 #define DMPAPER_NOTE 18 #define DMPAPER_ENV_9 19 #define DMPAPER_ENV_10 20 #define DMPAPER_ENV_11 21 #define DMPAPER_ENV_12 22 #define DMPAPER_ENV_14 23 #define DMPAPER_CSHEET 24 #define DMPAPER_DSHEET 25 #define DMPAPER_ESHEET 26 #define DMPAPER_ENV_DL 27 #define DMPAPER_ENV_C5 28 #define DMPAPER_ENV_C3 29 #define DMPAPER_ENV_C4 30 #define DMPAPER_ENV_C6 31 #define DMPAPER_ENV_C65 32 #define DMPAPER_ENV_B4 33 #define DMPAPER_ENV_B5 34 #define DMPAPER_ENV_B6 35 #define DMPAPER_ENV_ITALY 36 #define DMPAPER_ENV_MONARCH 37 #define DMPAPER_ENV_PERSONAL 38 #define DMPAPER_FANFOLD_US 39 #define DMPAPER_FANFOLD_STD_GERMAN 40 #define DMPAPER_FANFOLD_LGL_GERMAN 41 #define DMPAPER_ISO_B4 42 #define DMPAPER_JAPANESE_POSTCARD 43 #define DMPAPER_9X11 44 #define DMPAPER_10X11 45 #define DMPAPER_15X11 46 #define DMPAPER_ENV_INVITE 47 #define DMPAPER_RESERVED_48 48 #define DMPAPER_RESERVED_49 49 #define DMPAPER_LETTER_EXTRA 50 #define DMPAPER_LEGAL_EXTRA 51 #define DMPAPER_TABLOID_EXTRA 52 #define DMPAPER_A4_EXTRA 53 #define DMPAPER_LETTER_TRANSVERSE 54 #define DMPAPER_A4_TRANSVERSE 55 #define DMPAPER_LETTER_EXTRA_TRANSVERSE 56 #define DMPAPER_A_PLUS 57 #define DMPAPER_B_PLUS 58 #define DMPAPER_LETTER_PLUS 59 #define DMPAPER_A4_PLUS 60 #define DMPAPER_A5_TRANSVERSE 61 #define DMPAPER_B5_TRANSVERSE 62 #define DMPAPER_A3_EXTRA 63 #define DMPAPER_A5_EXTRA 64 #define DMPAPER_B5_EXTRA 65 #define DMPAPER_A2 66 #define DMPAPER_A3_TRANSVERSE 67 #define DMPAPER_A3_EXTRA_TRANSVERSE 68 #define DMPAPER_DBL_JAPANESE_POSTCARD 69 #define DMPAPER_A6 70 #define DMPAPER_JENV_KAKU2 71 #define DMPAPER_JENV_KAKU3 72 #define DMPAPER_JENV_CHOU3 73 #define DMPAPER_JENV_CHOU4 74 #define DMPAPER_LETTER_ROTATED 75 #define DMPAPER_A3_ROTATED 76 #define DMPAPER_A4_ROTATED 77 #define DMPAPER_A5_ROTATED 78 #define DMPAPER_B4_JIS_ROTATED 79 #define DMPAPER_B5_JIS_ROTATED 80 #define DMPAPER_JAPANESE_POSTCARD_ROTATED 81 #define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82 #define DMPAPER_A6_ROTATED 83 #define DMPAPER_JENV_KAKU2_ROTATED 84 #define DMPAPER_JENV_KAKU3_ROTATED 85 #define DMPAPER_JENV_CHOU3_ROTATED 86 #define DMPAPER_JENV_CHOU4_ROTATED 87 #define DMPAPER_B6_JIS 88 #define DMPAPER_B6_JIS_ROTATED 89 #define DMPAPER_12X11 90 #define DMPAPER_JENV_YOU4 91 #define DMPAPER_JENV_YOU4_ROTATED 92 #define DMPAPER_P16K 93 #define DMPAPER_P32K 94 #define DMPAPER_P32KBIG 95 #define DMPAPER_PENV_1 96 #define DMPAPER_PENV_2 97 #define DMPAPER_PENV_3 98 #define DMPAPER_PENV_4 99 #define DMPAPER_PENV_5 100 #define DMPAPER_PENV_6 101 #define DMPAPER_PENV_7 102 #define DMPAPER_PENV_8 103 #define DMPAPER_PENV_9 104 #define DMPAPER_PENV_10 105 #define DMPAPER_P16K_ROTATED 106 #define DMPAPER_P32K_ROTATED 107 #define DMPAPER_P32KBIG_ROTATED 108 #define DMPAPER_PENV_1_ROTATED 109 #define DMPAPER_PENV_2_ROTATED 110 #define DMPAPER_PENV_3_ROTATED 111 #define DMPAPER_PENV_4_ROTATED 112 #define DMPAPER_PENV_5_ROTATED 113 #define DMPAPER_PENV_6_ROTATED 114 #define DMPAPER_PENV_7_ROTATED 115 #define DMPAPER_PENV_8_ROTATED 116 #define DMPAPER_PENV_9_ROTATED 117 #define DMPAPER_PENV_10_ROTATED 118 #define DMPAPER_LAST DMPAPER_PENV_10_ROTATED #define DMPAPER_USER 256 #define DMBIN_FIRST DMBIN_UPPER #define DMBIN_UPPER 1 #define DMBIN_ONLYONE 1 #define DMBIN_LOWER 2 #define DMBIN_MIDDLE 3 #define DMBIN_MANUAL 4 #define DMBIN_ENVELOPE 5 #define DMBIN_ENVMANUAL 6 #define DMBIN_AUTO 7 #define DMBIN_TRACTOR 8 #define DMBIN_SMALLFMT 9 #define DMBIN_LARGEFMT 10 #define DMBIN_LARGECAPACITY 11 #define DMBIN_CASSETTE 14 #define DMBIN_FORMSOURCE 15 #define DMBIN_LAST DMBIN_FORMSOURCE #define DMBIN_USER 256 #define DMRES_DRAFT (-1) #define DMRES_LOW (-2) #define DMRES_MEDIUM (-3) #define DMRES_HIGH (-4) #define DMCOLOR_MONOCHROME 1 #define DMCOLOR_COLOR 2 #define DMDUP_SIMPLEX 1 #define DMDUP_VERTICAL 2 #define DMDUP_HORIZONTAL 3 #define DMTT_BITMAP 1 #define DMTT_DOWNLOAD 2 #define DMTT_SUBDEV 3 #define DMTT_DOWNLOAD_OUTLINE 4 #define DMCOLLATE_FALSE 0 #define DMCOLLATE_TRUE 1 #define DMICMMETHOD_NONE 1 #define DMICMMETHOD_SYSTEM 2 #define DMICMMETHOD_DRIVER 3 #define DMICMMETHOD_DEVICE 4 #define DMICMMETHOD_USER 256 #define DMICM_SATURATE 1 #define DMICM_CONTRAST 2 #define DMICM_COLORMETRIC 3 #define DMICM_USER 256 #define DMMEDIA_STANDARD 1 #define DMMEDIA_TRANSPARENCY 2 #define DMMEDIA_GLOSSY 3 #define DMMEDIA_USER 256 #define DMDITHER_NONE 1 #define DMDITHER_COARSE 2 #define DMDITHER_FINE 3 #define DMDITHER_LINEART 4 #define DMDITHER_GRAYSCALE 5 #define DMDITHER_USER 256 #define DMDO_DEFAULT 0 #define DMDO_90 1 #define DMDO_180 2 #define DMDO_270 3 #define DMDFO_DEFAULT 0 #define DMDFO_STRETCH 1 #define DMDFO_CENTER 2 typedef struct { INT cbSize; LPCSTR lpszDocName; LPCSTR lpszOutput; LPCSTR lpszDatatype; DWORD fwType; } DOCINFOA, *LPDOCINFOA; typedef struct { INT cbSize; LPCWSTR lpszDocName; LPCWSTR lpszOutput; LPCWSTR lpszDatatype; DWORD fwType; } DOCINFOW, *LPDOCINFOW; DECL_WINELIB_TYPE_AW(DOCINFO) DECL_WINELIB_TYPE_AW(LPDOCINFO) #define DI_APPBANDING 0x0001 /* Flags for PolyDraw and GetPath */ #define PT_CLOSEFIGURE 0x0001 #define PT_LINETO 0x0002 #define PT_BEZIERTO 0x0004 #define PT_MOVETO 0x0006 #define RDH_RECTANGLES 1 typedef struct _RGNDATAHEADER { DWORD dwSize; DWORD iType; DWORD nCount; DWORD nRgnSize; RECT rcBound; } RGNDATAHEADER,*PRGNDATAHEADER; typedef struct _RGNDATA { RGNDATAHEADER rdh; char Buffer[1]; } RGNDATA,*PRGNDATA,*LPRGNDATA; typedef BOOL (CALLBACK *ABORTPROC)(HDC, INT); typedef enum { DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1, DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2, DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3, DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME = 4, DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE = 5, DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE = 6, DISPLAYCONFIG_DEVICE_INFO_GET_SUPPORT_VIRTUAL_RESOLUTION = 7, DISPLAYCONFIG_DEVICE_INFO_SET_SUPPORT_VIRTUAL_RESOLUTION = 8, DISPLAYCONFIG_DEVICE_INFO_FORCE_UINT32 = 0xffffffff } DISPLAYCONFIG_DEVICE_INFO_TYPE; typedef struct DISPLAYCONFIG_DEVICE_INFO_HEADER { DISPLAYCONFIG_DEVICE_INFO_TYPE type; UINT32 size; LUID adapterId; UINT32 id; } DISPLAYCONFIG_DEVICE_INFO_HEADER; typedef struct { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD StateFlags; CHAR DeviceID[128]; CHAR DeviceKey[128]; } DISPLAY_DEVICEA,*PDISPLAY_DEVICEA,*LPDISPLAY_DEVICEA; typedef struct { DWORD cb; WCHAR DeviceName[32]; WCHAR DeviceString[128]; DWORD StateFlags; WCHAR DeviceID[128]; WCHAR DeviceKey[128]; } DISPLAY_DEVICEW,*PDISPLAY_DEVICEW,*LPDISPLAY_DEVICEW; DECL_WINELIB_TYPE_AW(DISPLAY_DEVICE) DECL_WINELIB_TYPE_AW(PDISPLAY_DEVICE) DECL_WINELIB_TYPE_AW(LPDISPLAY_DEVICE) /* DISPLAY_DEVICE.StateFlags (?)*/ #define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001 #define DISPLAY_DEVICE_MULTI_DRIVER 0x00000002 #define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004 #define DISPLAY_DEVICE_MIRRORING_DRIVER 0x00000008 #define DISPLAY_DEVICE_VGA_COMPATIBLE 0x00000010 typedef struct DISPLAYCONFIG_DESKTOP_IMAGE_INFO { POINTL PathSourceSize; RECTL DesktopImageRegion; RECTL DesktopImageClip; } DISPLAYCONFIG_DESKTOP_IMAGE_INFO; typedef enum { DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1, DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2, DISPLAYCONFIG_MODE_INFO_TYPE_DESKTOP_IMAGE = 3, DISPLAYCONFIG_MODE_INFO_TYPE_FORCE_UINT32 = 0xffffffff } DISPLAYCONFIG_MODE_INFO_TYPE; typedef enum { DISPLAYCONFIG_PIXELFORMAT_8BPP = 1, DISPLAYCONFIG_PIXELFORMAT_16BPP = 2, DISPLAYCONFIG_PIXELFORMAT_24BPP = 3, DISPLAYCONFIG_PIXELFORMAT_32BPP = 4, DISPLAYCONFIG_PIXELFORMAT_NONGDI = 5, DISPLAYCONFIG_PIXELFORMAT_FORCE_UINT32 = 0xffffffff } DISPLAYCONFIG_PIXELFORMAT; typedef enum { DISPLAYCONFIG_ROTATION_IDENTITY = 1, DISPLAYCONFIG_ROTATION_ROTATE90 = 2, DISPLAYCONFIG_ROTATION_ROTATE180 = 3, DISPLAYCONFIG_ROTATION_ROTATE270 = 4, DISPLAYCONFIG_ROTATION_FORCE_UINT32 = 0xffffffff } DISPLAYCONFIG_ROTATION; typedef enum { DISPLAYCONFIG_SCALING_IDENTITY = 1, DISPLAYCONFIG_SCALING_CENTERED = 2, DISPLAYCONFIG_SCALING_STRETCHED = 3, DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX = 4, DISPLAYCONFIG_SCALING_CUSTOM = 5, DISPLAYCONFIG_SCALING_PREFERRED = 128, DISPLAYCONFIG_SCALING_FORCE_UINT32 = 0xffffffff } DISPLAYCONFIG_SCALING; typedef enum { DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED = 0, DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE = 1, DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED = 2, DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_UPPERFIELDFIRST = DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED, DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_LOWERFIELDFIRST = 3, DISPLAYCONFIG_SCANLINE_ORDERING_FORCE_UINT32 = 0xffffffff } DISPLAYCONFIG_SCANLINE_ORDERING; typedef enum { DISPLAYCONFIG_TOPOLOGY_INTERNAL = 0x00000001, DISPLAYCONFIG_TOPOLOGY_CLONE = 0x00000002, DISPLAYCONFIG_TOPOLOGY_EXTEND = 0x00000004, DISPLAYCONFIG_TOPOLOGY_EXTERNAL = 0x00000008, DISPLAYCONFIG_TOPOLOGY_FORCE_UINT32 = 0xffffffff } DISPLAYCONFIG_TOPOLOGY_ID; typedef enum { DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = -1, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = 0, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = 1, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = 2, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = 3, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = 4, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = 5, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = 6, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN = 8, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = 9, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_MIRACAST = 15, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = 0x80000000, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = 0xffffffff } DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY; typedef struct DISPLAYCONFIG_2DREGION { UINT32 cx; UINT32 cy; } DISPLAYCONFIG_2DREGION; typedef struct DISPLAYCONFIG_RATIONAL { UINT32 Numerator; UINT32 Denominator; } DISPLAYCONFIG_RATIONAL; typedef struct DISPLAYCONFIG_PATH_SOURCE_INFO { LUID adapterId; UINT32 id; union { UINT32 modeInfoIdx; struct { UINT32 cloneGroupId :16; UINT32 sourceModeInfoIdx :16; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; UINT32 statusFlags; } DISPLAYCONFIG_PATH_SOURCE_INFO; typedef struct DISPLAYCONFIG_SOURCE_MODE { UINT32 width; UINT32 height; DISPLAYCONFIG_PIXELFORMAT pixelFormat; POINTL position; } DISPLAYCONFIG_SOURCE_MODE; typedef struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO { UINT64 pixelRate; DISPLAYCONFIG_RATIONAL hSyncFreq; DISPLAYCONFIG_RATIONAL vSyncFreq; DISPLAYCONFIG_2DREGION activeSize; DISPLAYCONFIG_2DREGION totalSize; union { struct { UINT32 videoStandard :16; UINT32 vSyncFreqDivider :6; UINT32 reserved :10; } AdditionalSignalInfo; UINT32 videoStandard; } DUMMYUNIONNAME; DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering; } DISPLAYCONFIG_VIDEO_SIGNAL_INFO; typedef struct DISPLAYCONFIG_PATH_TARGET_INFO { LUID adapterId; UINT32 id; union { UINT32 modeInfoIdx; struct { UINT32 desktopModeInfoIdx :16; UINT32 targetModeInfoIdx :16; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology; DISPLAYCONFIG_ROTATION rotation; DISPLAYCONFIG_SCALING scaling; DISPLAYCONFIG_RATIONAL refreshRate; DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering; BOOL targetAvailable; UINT32 statusFlags; } DISPLAYCONFIG_PATH_TARGET_INFO; typedef struct DISPLAYCONFIG_TARGET_MODE { DISPLAYCONFIG_VIDEO_SIGNAL_INFO targetVideoSignalInfo; } DISPLAYCONFIG_TARGET_MODE; typedef struct DISPLAYCONFIG_PATH_INFO { DISPLAYCONFIG_PATH_SOURCE_INFO sourceInfo; DISPLAYCONFIG_PATH_TARGET_INFO targetInfo; UINT32 flags; } DISPLAYCONFIG_PATH_INFO; typedef struct DISPLAYCONFIG_MODE_INFO { DISPLAYCONFIG_MODE_INFO_TYPE infoType; UINT32 id; LUID adapterId; union { DISPLAYCONFIG_TARGET_MODE targetMode; DISPLAYCONFIG_SOURCE_MODE sourceMode; DISPLAYCONFIG_DESKTOP_IMAGE_INFO desktopImageInfo; } DUMMYUNIONNAME; } DISPLAYCONFIG_MODE_INFO; /* For GetDisplayConfigBufferSizes */ #define QDC_ALL_PATHS 0x00000001 #define QDC_ONLY_ACTIVE_PATHS 0x00000002 #define QDC_DATABASE_CURRENT 0x00000004 #define GDI_ERROR (~0u) #define HGDI_ERROR ((HANDLE)~(ULONG_PTR)0) /* AddFontResourceEx flags */ #define FR_PRIVATE 0x10 #define FR_NOT_ENUM 0x20 /* Mirroring flags */ #define LAYOUT_LTR 0x00000000 #define LAYOUT_RTL 0x00000001 #define LAYOUT_BITMAPORIENTATIONPRESERVED 0x00000008 #define NOMIRRORBITMAP 0x80000000 /* For DRAWPATTERNRECT Escape */ typedef struct _DRAWPATRECT { POINT ptPosition; POINT ptSize; WORD wStyle; WORD wPattern; } DRAWPATRECT, *PDRAWPATRECT; typedef struct tagWCRANGE { WCHAR wcLow; USHORT cGlyphs; } WCRANGE, *PWCRANGE, *LPWCRANGE; typedef struct tagGLYPHSET { DWORD cbThis; DWORD flAccel; DWORD cGlyphsSupported; DWORD cRanges; WCRANGE ranges[1]; } GLYPHSET, *PGLYPHSET, *LPGLYPHSET; #define GS_8BIT_INDICES 0x00000001 WINGDIAPI INT WINAPI AbortDoc(HDC); WINGDIAPI BOOL WINAPI AbortPath(HDC); WINGDIAPI INT WINAPI AddFontResourceA(LPCSTR); WINGDIAPI INT WINAPI AddFontResourceW(LPCWSTR); #define AddFontResource WINELIB_NAME_AW(AddFontResource) WINGDIAPI INT WINAPI AddFontResourceExA(LPCSTR, DWORD, PVOID); WINGDIAPI INT WINAPI AddFontResourceExW(LPCWSTR, DWORD, PVOID); #define AddFontResourceEx WINELIB_NAME_AW(AddFontResourceEx) WINGDIAPI HANDLE WINAPI AddFontMemResourceEx(PVOID, DWORD, PVOID, DWORD *); WINGDIAPI BOOL WINAPI AlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION); WINGDIAPI BOOL WINAPI AngleArc(HDC, INT, INT, DWORD, FLOAT, FLOAT); WINGDIAPI BOOL WINAPI AnimatePalette(HPALETTE,UINT,UINT,const PALETTEENTRY*); WINGDIAPI BOOL WINAPI Arc(HDC,INT,INT,INT,INT,INT,INT,INT,INT); WINGDIAPI BOOL WINAPI ArcTo(HDC, INT, INT, INT, INT, INT, INT, INT, INT); WINGDIAPI BOOL WINAPI BeginPath(HDC); WINGDIAPI BOOL WINAPI BitBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,DWORD); WINGDIAPI INT WINAPI ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR*); WINGDIAPI BOOL WINAPI Chord(HDC,INT,INT,INT,INT,INT,INT,INT,INT); WINGDIAPI HENHMETAFILE WINAPI CloseEnhMetaFile(HDC); WINGDIAPI BOOL WINAPI CloseFigure(HDC); WINGDIAPI HMETAFILE WINAPI CloseMetaFile(HDC); WINGDIAPI INT WINAPI CombineRgn(HRGN,HRGN,HRGN,INT); WINGDIAPI BOOL WINAPI CombineTransform(LPXFORM,const XFORM *,const XFORM *); WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR); WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR); #define CopyEnhMetaFile WINELIB_NAME_AW(CopyEnhMetaFile) WINGDIAPI HMETAFILE WINAPI CopyMetaFileA(HMETAFILE,LPCSTR); WINGDIAPI HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR); #define CopyMetaFile WINELIB_NAME_AW(CopyMetaFile) WINGDIAPI HBITMAP WINAPI CreateBitmap(INT,INT,UINT,UINT,LPCVOID); WINGDIAPI HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*); WINGDIAPI HBRUSH WINAPI CreateBrushIndirect(const LOGBRUSH*); WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA); WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW); #define CreateColorSpace WINELIB_NAME_AW(CreateColorSpace) WINGDIAPI HBITMAP WINAPI CreateCompatibleBitmap(HDC,INT,INT); WINGDIAPI HDC WINAPI CreateCompatibleDC(HDC); WINGDIAPI HDC WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*); WINGDIAPI HDC WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*); #define CreateDC WINELIB_NAME_AW(CreateDC) WINGDIAPI HBITMAP WINAPI CreateDIBitmap(HDC,const BITMAPINFOHEADER*,DWORD,LPCVOID,const BITMAPINFO*,UINT); WINGDIAPI HBRUSH WINAPI CreateDIBPatternBrush(HGLOBAL,UINT); WINGDIAPI HBRUSH WINAPI CreateDIBPatternBrushPt(const void*,UINT); WINGDIAPI HBITMAP WINAPI CreateDIBSection(HDC, const BITMAPINFO *, UINT, void **, HANDLE, DWORD offset); WINGDIAPI HBITMAP WINAPI CreateDiscardableBitmap(HDC,INT,INT); WINGDIAPI HRGN WINAPI CreateEllipticRgn(INT,INT,INT,INT); WINGDIAPI HRGN WINAPI CreateEllipticRgnIndirect(const RECT *); WINGDIAPI HDC WINAPI CreateEnhMetaFileA(HDC,LPCSTR,const RECT*,LPCSTR); WINGDIAPI HDC WINAPI CreateEnhMetaFileW(HDC,LPCWSTR,const RECT*,LPCWSTR); #define CreateEnhMetaFile WINELIB_NAME_AW(CreateEnhMetaFile) WINGDIAPI HFONT WINAPI CreateFontA(INT,INT,INT,INT,INT,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCSTR); WINGDIAPI HFONT WINAPI CreateFontW(INT,INT,INT,INT,INT,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCWSTR); #define CreateFont WINELIB_NAME_AW(CreateFont) WINGDIAPI HFONT WINAPI CreateFontIndirectA(const LOGFONTA*); WINGDIAPI HFONT WINAPI CreateFontIndirectW(const LOGFONTW*); #define CreateFontIndirect WINELIB_NAME_AW(CreateFontIndirect) WINGDIAPI HFONT WINAPI CreateFontIndirectExA(const ENUMLOGFONTEXDVA*); WINGDIAPI HFONT WINAPI CreateFontIndirectExW(const ENUMLOGFONTEXDVW*); #define CreateFontIndirectEx WINELIB_NAME_AW(CreateFontIndirectEx) WINGDIAPI HPALETTE WINAPI CreateHalftonePalette(HDC); WINGDIAPI HBRUSH WINAPI CreateHatchBrush(INT,COLORREF); WINGDIAPI HDC WINAPI CreateICA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*); WINGDIAPI HDC WINAPI CreateICW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*); #define CreateIC WINELIB_NAME_AW(CreateIC) WINGDIAPI HDC WINAPI CreateMetaFileA(LPCSTR); WINGDIAPI HDC WINAPI CreateMetaFileW(LPCWSTR); #define CreateMetaFile WINELIB_NAME_AW(CreateMetaFile) WINGDIAPI HPALETTE WINAPI CreatePalette(const LOGPALETTE*); WINGDIAPI HBRUSH WINAPI CreatePatternBrush(HBITMAP); WINGDIAPI HPEN WINAPI CreatePen(INT,INT,COLORREF); WINGDIAPI HPEN WINAPI CreatePenIndirect(const LOGPEN*); WINGDIAPI HRGN WINAPI CreatePolyPolygonRgn(const POINT*,const INT*,INT,INT); WINGDIAPI HRGN WINAPI CreatePolygonRgn(const POINT*,INT,INT); WINGDIAPI HRGN WINAPI CreateRectRgn(INT,INT,INT,INT); WINGDIAPI HRGN WINAPI CreateRectRgnIndirect(const RECT*); WINGDIAPI HRGN WINAPI CreateRoundRectRgn(INT,INT,INT,INT,INT,INT); WINGDIAPI BOOL WINAPI CreateScalableFontResourceA(DWORD,LPCSTR,LPCSTR,LPCSTR); WINGDIAPI BOOL WINAPI CreateScalableFontResourceW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR); #define CreateScalableFontResource WINELIB_NAME_AW(CreateScalableFontResource) WINGDIAPI HBRUSH WINAPI CreateSolidBrush(COLORREF); WINGDIAPI BOOL WINAPI DPtoLP(HDC,LPPOINT,INT); WINGDIAPI BOOL WINAPI DeleteColorSpace(HCOLORSPACE); WINGDIAPI BOOL WINAPI DeleteDC(HDC); WINGDIAPI BOOL WINAPI DeleteEnhMetaFile(HENHMETAFILE); WINGDIAPI BOOL WINAPI DeleteMetaFile(HMETAFILE); WINGDIAPI BOOL WINAPI DeleteObject(HGDIOBJ); WINGDIAPI INT WINAPI DescribePixelFormat(HDC,int,UINT,LPPIXELFORMATDESCRIPTOR); WINGDIAPI INT WINAPI DrawEscape(HDC,INT,INT,LPCSTR); WINGDIAPI BOOL WINAPI Ellipse(HDC,INT,INT,INT,INT); WINGDIAPI INT WINAPI EndDoc(HDC); WINGDIAPI BOOL WINAPI EndPath(HDC); WINGDIAPI BOOL WINAPI EnumEnhMetaFile(HDC,HENHMETAFILE,ENHMFENUMPROC,LPVOID,const RECT*); WINGDIAPI INT WINAPI EnumFontFamiliesA(HDC,LPCSTR,FONTENUMPROCA,LPARAM); WINGDIAPI INT WINAPI EnumFontFamiliesW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM); #define EnumFontFamilies WINELIB_NAME_AW(EnumFontFamilies) WINGDIAPI INT WINAPI EnumFontFamiliesExA(HDC,LPLOGFONTA,FONTENUMPROCA,LPARAM,DWORD); WINGDIAPI INT WINAPI EnumFontFamiliesExW(HDC,LPLOGFONTW,FONTENUMPROCW,LPARAM,DWORD); #define EnumFontFamiliesEx WINELIB_NAME_AW(EnumFontFamiliesEx) WINGDIAPI INT WINAPI EnumFontsA(HDC,LPCSTR,FONTENUMPROCA,LPARAM); WINGDIAPI INT WINAPI EnumFontsW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM); #define EnumFonts WINELIB_NAME_AW(EnumFonts) WINGDIAPI INT WINAPI EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM); WINGDIAPI INT WINAPI EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM); #define EnumICMProfiles WINELIB_NAME_AW(EnumICMProfiles) WINGDIAPI BOOL WINAPI EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM); WINGDIAPI INT WINAPI EnumObjects(HDC,INT,GOBJENUMPROC,LPARAM); WINGDIAPI BOOL WINAPI EqualRgn(HRGN,HRGN); WINGDIAPI INT WINAPI Escape(HDC,INT,INT,LPCSTR,LPVOID); WINGDIAPI INT WINAPI ExcludeClipRect(HDC,INT,INT,INT,INT); WINGDIAPI HPEN WINAPI ExtCreatePen(DWORD,DWORD,const LOGBRUSH*,DWORD,const DWORD*); WINGDIAPI HRGN WINAPI ExtCreateRegion(const XFORM*,DWORD,const RGNDATA*); WINGDIAPI INT WINAPI ExtEscape(HDC,INT,INT,LPCSTR,INT,LPSTR); WINGDIAPI BOOL WINAPI ExtFloodFill(HDC,INT,INT,COLORREF,UINT); WINGDIAPI INT WINAPI ExtSelectClipRgn(HDC,HRGN,INT); WINGDIAPI BOOL WINAPI ExtTextOutA(HDC,INT,INT,UINT,const RECT*,LPCSTR,UINT,const INT*); WINGDIAPI BOOL WINAPI ExtTextOutW(HDC,INT,INT,UINT,const RECT*,LPCWSTR,UINT,const INT*); #define ExtTextOut WINELIB_NAME_AW(ExtTextOut) WINGDIAPI BOOL WINAPI FillPath(HDC); WINGDIAPI BOOL WINAPI FillRgn(HDC,HRGN,HBRUSH); WINGDIAPI BOOL WINAPI FixBrushOrgEx(HDC,INT,INT,LPPOINT); WINGDIAPI BOOL WINAPI FlattenPath(HDC); WINGDIAPI BOOL WINAPI FloodFill(HDC,INT,INT,COLORREF); WINGDIAPI BOOL WINAPI FrameRgn(HDC,HRGN,HBRUSH,INT,INT); WINGDIAPI BOOL WINAPI GdiAlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION); WINGDIAPI BOOL WINAPI GdiComment(HDC,UINT,const BYTE *); WINGDIAPI DEVMODEW * WINAPI GdiConvertToDevmodeW(const DEVMODEA *); WINGDIAPI BOOL WINAPI GdiFlush(void); WINGDIAPI DWORD WINAPI GdiGetBatchLimit(void); WINGDIAPI LONG WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *); WINGDIAPI DWORD WINAPI GdiGetCodePage(HDC); WINGDIAPI BOOL WINAPI GdiGradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG); WINGDIAPI BOOL WINAPI GdiIsMetaFileDC(HDC); WINGDIAPI BOOL WINAPI GdiIsMetaPrintDC(HDC); WINGDIAPI BOOL WINAPI GdiIsPlayMetafileDC(HDC); WINGDIAPI DWORD WINAPI GdiSetBatchLimit(DWORD); WINGDIAPI BOOL WINAPI GdiTransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT); WINGDIAPI INT WINAPI GetArcDirection(HDC); WINGDIAPI BOOL WINAPI GetAspectRatioFilterEx(HDC,LPSIZE); WINGDIAPI LONG WINAPI GetBitmapBits(HBITMAP,LONG,LPVOID); WINGDIAPI BOOL WINAPI GetBitmapDimensionEx(HBITMAP,LPSIZE); WINGDIAPI BOOL WINAPI GetBrushOrgEx(HDC,LPPOINT); WINGDIAPI COLORREF WINAPI GetBkColor(HDC); WINGDIAPI INT WINAPI GetBkMode(HDC); WINGDIAPI UINT WINAPI GetBoundsRect(HDC,LPRECT,UINT); WINGDIAPI BOOL WINAPI GetCharABCWidthsA(HDC,UINT,UINT,LPABC); WINGDIAPI BOOL WINAPI GetCharABCWidthsW(HDC,UINT,UINT,LPABC); #define GetCharABCWidths WINELIB_NAME_AW(GetCharABCWidths) WINGDIAPI BOOL WINAPI GetCharABCWidthsFloatA(HDC,UINT,UINT,LPABCFLOAT); WINGDIAPI BOOL WINAPI GetCharABCWidthsFloatW(HDC,UINT,UINT,LPABCFLOAT); #define GetCharABCWidthsFloat WINELIB_NAME_AW(GetCharABCWidthsFloat) WINGDIAPI BOOL WINAPI GetCharABCWidthsI(HDC,UINT,UINT,LPWORD,LPABC); WINGDIAPI DWORD WINAPI GetCharacterPlacementA(HDC,LPCSTR,INT,INT,GCP_RESULTSA*,DWORD); WINGDIAPI DWORD WINAPI GetCharacterPlacementW(HDC,LPCWSTR,INT,INT,GCP_RESULTSW*,DWORD); #define GetCharacterPlacement WINELIB_NAME_AW(GetCharacterPlacement) WINGDIAPI BOOL WINAPI GetCharWidth32A(HDC,UINT,UINT,LPINT); WINGDIAPI BOOL WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT); #define GetCharWidth32 WINELIB_NAME_AW(GetCharWidth32) WINGDIAPI BOOL WINAPI GetCharWidthA(HDC,UINT,UINT,LPINT); WINGDIAPI BOOL WINAPI GetCharWidthI(HDC,UINT,UINT,LPWORD,LPINT); WINGDIAPI BOOL WINAPI GetCharWidthW(HDC,UINT,UINT,LPINT); #define GetCharWidth WINELIB_NAME_AW(GetCharWidth) WINGDIAPI BOOL WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT); WINGDIAPI BOOL WINAPI GetCharWidthFloatW(HDC,UINT,UINT,PFLOAT); #define GetCharWidthFloat WINELIB_NAME_AW(GetCharWidthFloat) WINGDIAPI INT WINAPI GetClipBox(HDC,LPRECT); WINGDIAPI INT WINAPI GetClipRgn(HDC,HRGN); WINGDIAPI BOOL WINAPI GetColorAdjustment(HDC, LPCOLORADJUSTMENT); WINGDIAPI HCOLORSPACE WINAPI GetColorSpace(HDC); WINGDIAPI HGDIOBJ WINAPI GetCurrentObject(HDC,UINT); WINGDIAPI BOOL WINAPI GetCurrentPositionEx(HDC,LPPOINT); WINGDIAPI INT WINAPI GetDeviceCaps(HDC,INT); WINGDIAPI BOOL WINAPI GetDeviceGammaRamp(HDC,LPVOID); WINGDIAPI COLORREF WINAPI GetDCBrushColor(HDC); WINGDIAPI BOOL WINAPI GetDCOrgEx(HDC,LPPOINT); WINGDIAPI COLORREF WINAPI GetDCPenColor(HDC); WINGDIAPI UINT WINAPI GetDIBColorTable(HDC,UINT,UINT,RGBQUAD*); WINGDIAPI INT WINAPI GetDIBits(HDC,HBITMAP,UINT,UINT,LPVOID,LPBITMAPINFO,UINT); WINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileA(LPCSTR); WINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileW(LPCWSTR); #define GetEnhMetaFile WINELIB_NAME_AW(GetEnhMetaFile) WINGDIAPI UINT WINAPI GetEnhMetaFileBits(HENHMETAFILE,UINT,LPBYTE); WINGDIAPI UINT WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE,UINT,LPSTR); WINGDIAPI UINT WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE,UINT,LPWSTR); #define GetEnhMetaFileDescription WINELIB_NAME_AW(GetEnhMetaFileDescription) WINGDIAPI UINT WINAPI GetEnhMetaFileHeader(HENHMETAFILE,UINT,LPENHMETAHEADER); WINGDIAPI UINT WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE,UINT,LPPALETTEENTRY); WINGDIAPI DWORD WINAPI GetFontData(HDC,DWORD,DWORD,LPVOID,DWORD); WINGDIAPI DWORD WINAPI GetFontLanguageInfo(HDC); WINGDIAPI DWORD WINAPI GetFontUnicodeRanges(HDC,LPGLYPHSET); WINGDIAPI DWORD WINAPI GetGlyphIndicesA(HDC,LPCSTR,INT,LPWORD,DWORD); WINGDIAPI DWORD WINAPI GetGlyphIndicesW(HDC,LPCWSTR,INT,LPWORD,DWORD); #define GetGlyphIndices WINELIB_NAME_AW(GetGlyphIndices) WINGDIAPI DWORD WINAPI GetGlyphOutlineA(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*); WINGDIAPI DWORD WINAPI GetGlyphOutlineW(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*); #define GetGlyphOutline WINELIB_NAME_AW(GetGlyphOutline) WINGDIAPI INT WINAPI GetGraphicsMode(HDC); WINGDIAPI BOOL WINAPI GetICMProfileA(HDC,LPDWORD,LPSTR); WINGDIAPI BOOL WINAPI GetICMProfileW(HDC,LPDWORD,LPWSTR); #define GetICMProfile WINELIB_NAME_AW(GetICMProfile) WINGDIAPI DWORD WINAPI GetKerningPairsA(HDC,DWORD,LPKERNINGPAIR); WINGDIAPI DWORD WINAPI GetKerningPairsW(HDC,DWORD,LPKERNINGPAIR); #define GetKerningPairs WINELIB_NAME_AW(GetKerningPairs) WINGDIAPI DWORD WINAPI GetLayout(HDC); WINGDIAPI BOOL WINAPI GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD); WINGDIAPI BOOL WINAPI GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD); #define GetLogColorSpace WINELIB_NAME_AW(GetLogColorSpace) WINGDIAPI INT WINAPI GetMapMode(HDC); WINGDIAPI HMETAFILE WINAPI GetMetaFileA(LPCSTR); WINGDIAPI HMETAFILE WINAPI GetMetaFileW(LPCWSTR); #define GetMetaFile WINELIB_NAME_AW(GetMetaFile) WINGDIAPI UINT WINAPI GetMetaFileBitsEx(HMETAFILE,UINT,LPVOID); WINGDIAPI INT WINAPI GetMetaRgn(HDC,HRGN); WINGDIAPI BOOL WINAPI GetMiterLimit(HDC, PFLOAT); WINGDIAPI DWORD WINAPI GetNearestColor(HDC,DWORD); WINGDIAPI UINT WINAPI GetNearestPaletteIndex(HPALETTE,COLORREF); WINGDIAPI INT WINAPI GetObjectA(HGDIOBJ,INT,LPVOID); WINGDIAPI INT WINAPI GetObjectW(HGDIOBJ,INT,LPVOID); #define GetObject WINELIB_NAME_AW(GetObject) WINGDIAPI DWORD WINAPI GetObjectType(HGDIOBJ); WINGDIAPI UINT WINAPI GetOutlineTextMetricsA(HDC,UINT,LPOUTLINETEXTMETRICA); WINGDIAPI UINT WINAPI GetOutlineTextMetricsW(HDC,UINT,LPOUTLINETEXTMETRICW); #define GetOutlineTextMetrics WINELIB_NAME_AW(GetOutlineTextMetrics) WINGDIAPI UINT WINAPI GetPaletteEntries(HPALETTE,UINT,UINT,LPPALETTEENTRY); WINGDIAPI INT WINAPI GetPath(HDC,LPPOINT,LPBYTE,INT); WINGDIAPI COLORREF WINAPI GetPixel(HDC,INT,INT); WINGDIAPI INT WINAPI GetPixelFormat(HDC); WINGDIAPI INT WINAPI GetPolyFillMode(HDC); WINGDIAPI INT WINAPI GetRandomRgn(HDC,HRGN,INT); WINGDIAPI BOOL WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS,UINT); WINGDIAPI DWORD WINAPI GetRegionData(HRGN,DWORD,LPRGNDATA); WINGDIAPI INT WINAPI GetRelAbs(HDC,DWORD); WINGDIAPI INT WINAPI GetRgnBox(HRGN,LPRECT); WINGDIAPI INT WINAPI GetROP2(HDC); WINGDIAPI HGDIOBJ WINAPI GetStockObject(INT); WINGDIAPI INT WINAPI GetStretchBltMode(HDC); WINGDIAPI UINT WINAPI GetSystemPaletteEntries(HDC,UINT,UINT,LPPALETTEENTRY); WINGDIAPI UINT WINAPI GetSystemPaletteUse(HDC); WINGDIAPI UINT WINAPI GetTextAlign(HDC); WINGDIAPI INT WINAPI GetTextCharacterExtra(HDC); WINGDIAPI UINT WINAPI GetTextCharset(HDC); WINGDIAPI UINT WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD); WINGDIAPI COLORREF WINAPI GetTextColor(HDC); WINGDIAPI BOOL WINAPI GetTextExtentExPointA(HDC,LPCSTR,INT,INT,LPINT,LPINT,LPSIZE); WINGDIAPI BOOL WINAPI GetTextExtentExPointW(HDC,LPCWSTR,INT,INT,LPINT,LPINT,LPSIZE); #define GetTextExtentExPoint WINELIB_NAME_AW(GetTextExtentExPoint) WINGDIAPI BOOL WINAPI GetTextExtentPointA(HDC,LPCSTR,INT,LPSIZE); WINGDIAPI BOOL WINAPI GetTextExtentPointW(HDC,LPCWSTR,INT,LPSIZE); #define GetTextExtentPoint WINELIB_NAME_AW(GetTextExtentPoint) WINGDIAPI BOOL WINAPI GetTextExtentPoint32A(HDC,LPCSTR,INT,LPSIZE); WINGDIAPI BOOL WINAPI GetTextExtentPoint32W(HDC,LPCWSTR,INT,LPSIZE); #define GetTextExtentPoint32 WINELIB_NAME_AW(GetTextExtentPoint32) WINGDIAPI BOOL WINAPI GetTextExtentExPointI(HDC,const WORD*,INT,INT,LPINT,LPINT,LPSIZE); WINGDIAPI BOOL WINAPI GetTextExtentPointI(HDC,const WORD*,INT,LPSIZE); WINGDIAPI INT WINAPI GetTextFaceA(HDC,INT,LPSTR); WINGDIAPI INT WINAPI GetTextFaceW(HDC,INT,LPWSTR); #define GetTextFace WINELIB_NAME_AW(GetTextFace) WINGDIAPI BOOL WINAPI GetTextMetricsA(HDC,LPTEXTMETRICA); WINGDIAPI BOOL WINAPI GetTextMetricsW(HDC,LPTEXTMETRICW); #define GetTextMetrics WINELIB_NAME_AW(GetTextMetrics) WINGDIAPI BOOL WINAPI GetTransform(HDC,DWORD,XFORM*); WINGDIAPI BOOL WINAPI GetViewportExtEx(HDC,LPSIZE); WINGDIAPI BOOL WINAPI GetViewportOrgEx(HDC,LPPOINT); WINGDIAPI BOOL WINAPI GetWindowExtEx(HDC,LPSIZE); WINGDIAPI BOOL WINAPI GetWindowOrgEx(HDC,LPPOINT); WINGDIAPI UINT WINAPI GetWinMetaFileBits(HENHMETAFILE,UINT,LPBYTE,INT,HDC); WINGDIAPI BOOL WINAPI GetWorldTransform(HDC,LPXFORM); WINGDIAPI BOOL WINAPI GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG); WINGDIAPI INT WINAPI IntersectClipRect(HDC,INT,INT,INT,INT); WINGDIAPI BOOL WINAPI InvertRgn(HDC,HRGN); WINGDIAPI BOOL WINAPI LineDDA(INT,INT,INT,INT,LINEDDAPROC,LPARAM); WINGDIAPI BOOL WINAPI LineTo(HDC,INT,INT); WINGDIAPI BOOL WINAPI LPtoDP(HDC,LPPOINT,INT); WINGDIAPI BOOL WINAPI MaskBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,HBITMAP,INT,INT,DWORD); WINGDIAPI BOOL WINAPI MirrorRgn(HWND,HRGN); WINGDIAPI BOOL WINAPI ModifyWorldTransform(HDC,const XFORM *, DWORD); WINGDIAPI BOOL WINAPI MoveToEx(HDC,INT,INT,LPPOINT); WINGDIAPI INT WINAPI OffsetClipRgn(HDC,INT,INT); WINGDIAPI INT WINAPI OffsetRgn(HRGN,INT,INT); WINGDIAPI BOOL WINAPI OffsetViewportOrgEx(HDC,INT,INT,LPPOINT); WINGDIAPI BOOL WINAPI OffsetWindowOrgEx(HDC,INT,INT,LPPOINT); WINGDIAPI BOOL WINAPI PaintRgn(HDC,HRGN); WINGDIAPI BOOL WINAPI PatBlt(HDC,INT,INT,INT,INT,DWORD); WINGDIAPI HRGN WINAPI PathToRegion(HDC); WINGDIAPI BOOL WINAPI Pie(HDC,INT,INT,INT,INT,INT,INT,INT,INT); WINGDIAPI BOOL WINAPI PlayEnhMetaFile(HDC,HENHMETAFILE,const RECT*); WINGDIAPI BOOL WINAPI PlayEnhMetaFileRecord(HDC,LPHANDLETABLE,const ENHMETARECORD*,UINT); WINGDIAPI BOOL WINAPI PlayMetaFile(HDC,HMETAFILE); WINGDIAPI BOOL WINAPI PlayMetaFileRecord(HDC,LPHANDLETABLE,LPMETARECORD,UINT); WINGDIAPI BOOL WINAPI PlgBlt(HDC,const POINT*,HDC,INT,INT,INT,INT,HBITMAP,INT,INT); WINGDIAPI BOOL WINAPI PolyBezier(HDC,const POINT*,DWORD); WINGDIAPI BOOL WINAPI PolyBezierTo(HDC,const POINT*,DWORD); WINGDIAPI BOOL WINAPI PolyDraw(HDC,const POINT*,const BYTE*,DWORD); WINGDIAPI BOOL WINAPI PolyPolygon(HDC,const POINT*,const INT*,UINT); WINGDIAPI BOOL WINAPI PolyPolyline(HDC,const POINT*,const DWORD*,DWORD); WINGDIAPI BOOL WINAPI Polygon(HDC,const POINT*,INT); WINGDIAPI BOOL WINAPI Polyline(HDC,const POINT*,INT); WINGDIAPI BOOL WINAPI PolylineTo(HDC,const POINT*,DWORD); WINGDIAPI BOOL WINAPI PtInRegion(HRGN,INT,INT); WINGDIAPI BOOL WINAPI PtVisible(HDC,INT,INT); WINGDIAPI UINT WINAPI RealizePalette(HDC); WINGDIAPI BOOL WINAPI Rectangle(HDC,INT,INT,INT,INT); WINGDIAPI BOOL WINAPI RectInRegion(HRGN,const RECT *); WINGDIAPI BOOL WINAPI RectVisible(HDC,const RECT*); WINGDIAPI BOOL WINAPI RemoveFontMemResourceEx(HANDLE); WINGDIAPI BOOL WINAPI RemoveFontResourceA(LPCSTR); WINGDIAPI BOOL WINAPI RemoveFontResourceW(LPCWSTR); #define RemoveFontResource WINELIB_NAME_AW(RemoveFontResource) WINGDIAPI BOOL WINAPI RemoveFontResourceExA(LPCSTR, DWORD, PVOID); WINGDIAPI BOOL WINAPI RemoveFontResourceExW(LPCWSTR, DWORD, PVOID); #define RemoveFontResourceEx WINELIB_NAME_AW(RemoveFontResourceEx) WINGDIAPI HDC WINAPI ResetDCA(HDC,const DEVMODEA *); WINGDIAPI HDC WINAPI ResetDCW(HDC,const DEVMODEW *); #define ResetDC WINELIB_NAME_AW(ResetDC) WINGDIAPI BOOL WINAPI ResizePalette(HPALETTE,UINT); WINGDIAPI BOOL WINAPI RestoreDC(HDC,INT); WINGDIAPI BOOL WINAPI RoundRect(HDC,INT,INT,INT,INT,INT,INT); WINGDIAPI INT WINAPI SaveDC(HDC); WINGDIAPI BOOL WINAPI ScaleViewportExtEx(HDC,INT,INT,INT,INT,LPSIZE); WINGDIAPI BOOL WINAPI ScaleWindowExtEx(HDC,INT,INT,INT,INT,LPSIZE); WINGDIAPI BOOL WINAPI SelectClipPath(HDC,INT); WINGDIAPI INT WINAPI SelectClipRgn(HDC,HRGN); WINGDIAPI HGDIOBJ WINAPI SelectObject(HDC,HGDIOBJ); WINGDIAPI HPALETTE WINAPI SelectPalette(HDC,HPALETTE,BOOL); WINGDIAPI INT WINAPI SetAbortProc(HDC,ABORTPROC); WINGDIAPI INT WINAPI SetArcDirection(HDC,INT); WINGDIAPI LONG WINAPI SetBitmapBits(HBITMAP,LONG,LPCVOID); WINGDIAPI BOOL WINAPI SetBitmapDimensionEx(HBITMAP,INT,INT,LPSIZE); WINGDIAPI COLORREF WINAPI SetBkColor(HDC,COLORREF); WINGDIAPI INT WINAPI SetBkMode(HDC,INT); WINGDIAPI UINT WINAPI SetBoundsRect(HDC,const RECT*,UINT); WINGDIAPI BOOL WINAPI SetBrushOrgEx(HDC,INT,INT,LPPOINT); WINGDIAPI BOOL WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*); WINGDIAPI HCOLORSPACE WINAPI SetColorSpace(HDC,HCOLORSPACE); WINGDIAPI BOOL WINAPI SetDeviceGammaRamp(HDC,LPVOID); WINGDIAPI COLORREF WINAPI SetDCBrushColor(HDC,COLORREF); WINGDIAPI COLORREF WINAPI SetDCPenColor(HDC, COLORREF); WINGDIAPI UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,const RGBQUAD*); WINGDIAPI INT WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT); WINGDIAPI INT WINAPI SetDIBitsToDevice(HDC,INT,INT,DWORD,DWORD,INT,INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT); WINGDIAPI HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE *); WINGDIAPI INT WINAPI SetGraphicsMode(HDC,INT); WINGDIAPI INT WINAPI SetICMMode(HDC,INT); WINGDIAPI BOOL WINAPI SetICMProfileA(HDC,LPSTR); WINGDIAPI BOOL WINAPI SetICMProfileW(HDC,LPWSTR); #define SetICMProfile WINELIB_NAME_AW(SetICMProfile) WINGDIAPI DWORD WINAPI SetLayout(HDC,DWORD); WINGDIAPI INT WINAPI SetMapMode(HDC,INT); WINGDIAPI DWORD WINAPI SetMapperFlags(HDC,DWORD); WINGDIAPI HMETAFILE WINAPI SetMetaFileBitsEx(UINT,const BYTE*); WINGDIAPI INT WINAPI SetMetaRgn(HDC); WINGDIAPI BOOL WINAPI SetMiterLimit(HDC, FLOAT, PFLOAT); WINGDIAPI UINT WINAPI SetPaletteEntries(HPALETTE,UINT,UINT,const PALETTEENTRY*); WINGDIAPI COLORREF WINAPI SetPixel(HDC,INT,INT,COLORREF); WINGDIAPI BOOL WINAPI SetPixelV(HDC,INT,INT,COLORREF); WINGDIAPI BOOL WINAPI SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR*); WINGDIAPI INT WINAPI SetPolyFillMode(HDC,INT); WINGDIAPI BOOL WINAPI SetRectRgn(HRGN,INT,INT,INT,INT); WINGDIAPI INT WINAPI SetRelAbs(HDC,INT); WINGDIAPI INT WINAPI SetROP2(HDC,INT); WINGDIAPI INT WINAPI SetStretchBltMode(HDC,INT); WINGDIAPI UINT WINAPI SetSystemPaletteUse(HDC,UINT); WINGDIAPI UINT WINAPI SetTextAlign(HDC,UINT); WINGDIAPI INT WINAPI SetTextCharacterExtra(HDC,INT); WINGDIAPI COLORREF WINAPI SetTextColor(HDC,COLORREF); WINGDIAPI BOOL WINAPI SetTextJustification(HDC,INT,INT); WINGDIAPI BOOL WINAPI SetViewportExtEx(HDC,INT,INT,LPSIZE); WINGDIAPI BOOL WINAPI SetViewportOrgEx(HDC,INT,INT,LPPOINT); WINGDIAPI BOOL WINAPI SetWindowExtEx(HDC,INT,INT,LPSIZE); WINGDIAPI BOOL WINAPI SetWindowOrgEx(HDC,INT,INT,LPPOINT); WINGDIAPI HENHMETAFILE WINAPI SetWinMetaFileBits(UINT,const BYTE*,HDC,const METAFILEPICT *); WINGDIAPI BOOL WINAPI SetWorldTransform(HDC,const XFORM*); WINGDIAPI INT WINAPI StartDocA(HDC,const DOCINFOA*); WINGDIAPI INT WINAPI StartDocW(HDC,const DOCINFOW*); #define StartDoc WINELIB_NAME_AW(StartDoc) WINGDIAPI INT WINAPI StartPage(HDC); WINGDIAPI INT WINAPI EndPage(HDC); WINGDIAPI BOOL WINAPI StretchBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,INT,INT,DWORD); WINGDIAPI INT WINAPI StretchDIBits(HDC,INT,INT,INT,INT,INT,INT,INT,INT,const VOID*,const BITMAPINFO*,UINT,DWORD); WINGDIAPI BOOL WINAPI StrokeAndFillPath(HDC); WINGDIAPI BOOL WINAPI StrokePath(HDC); WINGDIAPI BOOL WINAPI SwapBuffers(HDC); WINGDIAPI BOOL WINAPI TextOutA(HDC,INT,INT,LPCSTR,INT); WINGDIAPI BOOL WINAPI TextOutW(HDC,INT,INT,LPCWSTR,INT); #define TextOut WINELIB_NAME_AW(TextOut) WINGDIAPI BOOL WINAPI TranslateCharsetInfo(LPDWORD,LPCHARSETINFO,DWORD); WINGDIAPI BOOL WINAPI TransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT); WINGDIAPI BOOL WINAPI UnrealizeObject(HGDIOBJ); WINGDIAPI BOOL WINAPI UpdateColors(HDC); WINGDIAPI BOOL WINAPI UpdateICMRegKeyA(DWORD,LPSTR,LPSTR,UINT); WINGDIAPI BOOL WINAPI UpdateICMRegKeyW(DWORD,LPWSTR,LPWSTR,UINT); #define UpdateICMRegKey WINELIB_NAME_AW(UpdateICMRegKey) WINGDIAPI BOOL WINAPI WidenPath(HDC); WINGDIAPI BOOL WINAPI PolyTextOutA(HDC,const POLYTEXTA*,INT); WINGDIAPI BOOL WINAPI PolyTextOutW(HDC,const POLYTEXTW*,INT); #define PolyTextOut WINELIB_NAME_AW(PolyTextOut) /* These defines are used by wglSwapLayerBuffers */ #define WGL_SWAP_MAIN_PLANE (1 << 0) #define WGL_SWAP_OVERLAY1 (1 << 1) #define WGL_SWAP_OVERLAY2 (1 << 2) #define WGL_SWAP_OVERLAY3 (1 << 3) #define WGL_SWAP_OVERLAY4 (1 << 4) #define WGL_SWAP_OVERLAY5 (1 << 5) #define WGL_SWAP_OVERLAY6 (1 << 6) #define WGL_SWAP_OVERLAY7 (1 << 7) #define WGL_SWAP_OVERLAY8 (1 << 8) #define WGL_SWAP_OVERLAY9 (1 << 9) #define WGL_SWAP_OVERLAY10 (1 << 10) #define WGL_SWAP_OVERLAY11 (1 << 11) #define WGL_SWAP_OVERLAY12 (1 << 12) #define WGL_SWAP_OVERLAY13 (1 << 13) #define WGL_SWAP_OVERLAY14 (1 << 14) #define WGL_SWAP_OVERLAY15 (1 << 15) #define WGL_SWAP_UNDERLAY1 (1 << 16) #define WGL_SWAP_UNDERLAY2 (1 << 17) #define WGL_SWAP_UNDERLAY3 (1 << 18) #define WGL_SWAP_UNDERLAY4 (1 << 19) #define WGL_SWAP_UNDERLAY5 (1 << 20) #define WGL_SWAP_UNDERLAY6 (1 << 21) #define WGL_SWAP_UNDERLAY7 (1 << 22) #define WGL_SWAP_UNDERLAY8 (1 << 23) #define WGL_SWAP_UNDERLAY9 (1 << 24) #define WGL_SWAP_UNDERLAY10 (1 << 25) #define WGL_SWAP_UNDERLAY11 (1 << 26) #define WGL_SWAP_UNDERLAY12 (1 << 27) #define WGL_SWAP_UNDERLAY13 (1 << 28) #define WGL_SWAP_UNDERLAY14 (1 << 29) #define WGL_SWAP_UNDERLAY15 (1 << 30) #define WGL_FONT_LINES 0 #define WGL_FONT_POLYGONS 1 /* WGL prototypes */ WINGDIAPI HGLRC WINAPI wglCreateContext(HDC); WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC,INT); WINGDIAPI BOOL WINAPI wglCopyContext(HGLRC,HGLRC,UINT); WINGDIAPI BOOL WINAPI wglDeleteContext(HGLRC); WINGDIAPI BOOL WINAPI wglDescribeLayerPlane(HDC,INT,INT,UINT,LPLAYERPLANEDESCRIPTOR); WINGDIAPI HGLRC WINAPI wglGetCurrentContext(void); WINGDIAPI HDC WINAPI wglGetCurrentDC(void); WINGDIAPI INT WINAPI wglGetLayerPaletteEntries(HDC,INT,INT,INT,const COLORREF *); WINGDIAPI PROC WINAPI wglGetProcAddress(LPCSTR); WINGDIAPI BOOL WINAPI wglMakeCurrent(HDC,HGLRC); WINGDIAPI BOOL WINAPI wglRealizeLayerPalette(HDC,INT,BOOL); WINGDIAPI INT WINAPI wglSetLayerPaletteEntries(HDC,INT,INT,INT,const COLORREF *); WINGDIAPI BOOL WINAPI wglShareLists(HGLRC,HGLRC); WINGDIAPI BOOL WINAPI wglSwapLayerBuffers(HDC,UINT); WINGDIAPI BOOL WINAPI wglUseFontBitmapsA(HDC,DWORD,DWORD,DWORD); WINGDIAPI BOOL WINAPI wglUseFontBitmapsW(HDC,DWORD,DWORD,DWORD); #define wglUseFontBitmaps WINELIB_NAME_AW(wglUseFontBitmaps) WINGDIAPI BOOL WINAPI wglUseFontOutlinesA(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT); WINGDIAPI BOOL WINAPI wglUseFontOutlinesW(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT); #define wglUseFontOutlines WINELIB_NAME_AW(wglUseFontOutlines) #ifdef __cplusplus } #endif #endif /* !NOGDI */ #endif /* _WINGDI_ */ ================================================ FILE: wine/windows/winhttp.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINHTTP_H #define __WINE_WINHTTP_H #ifdef _WIN64 #include #else #include #endif #define WINHTTPAPI #define BOOLAPI WINHTTPAPI BOOL WINAPI typedef LPVOID HINTERNET; typedef HINTERNET *LPHINTERNET; #define INTERNET_DEFAULT_PORT 0 #define INTERNET_DEFAULT_HTTP_PORT 80 #define INTERNET_DEFAULT_HTTPS_PORT 443 typedef WORD INTERNET_PORT; typedef INTERNET_PORT *LPINTERNET_PORT; /* Yes, these values contradict wininet.h */ #define INTERNET_SCHEME_HTTP 1 #define INTERNET_SCHEME_HTTPS 2 #define INTERNET_SCHEME_FTP 3 #define INTERNET_SCHEME_SOCKS 4 typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME; #define ICU_ESCAPE 0x80000000 /* flags for WinHttpOpen */ #define WINHTTP_FLAG_ASYNC 0x10000000 /* flags for WinHttpOpenRequest */ #define WINHTTP_FLAG_ESCAPE_PERCENT 0x00000004 #define WINHTTP_FLAG_NULL_CODEPAGE 0x00000008 #define WINHTTP_FLAG_ESCAPE_DISABLE 0x00000040 #define WINHTTP_FLAG_ESCAPE_DISABLE_QUERY 0x00000080 #define WINHTTP_FLAG_BYPASS_PROXY_CACHE 0x00000100 #define WINHTTP_FLAG_REFRESH WINHTTP_FLAG_BYPASS_PROXY_CACHE #define WINHTTP_FLAG_SECURE 0x00800000 #define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY 0 #define WINHTTP_ACCESS_TYPE_NO_PROXY 1 #define WINHTTP_ACCESS_TYPE_NAMED_PROXY 3 #define WINHTTP_NO_PROXY_NAME NULL #define WINHTTP_NO_PROXY_BYPASS NULL #define WINHTTP_NO_CLIENT_CERT_CONTEXT NULL #define WINHTTP_NO_REFERER NULL #define WINHTTP_DEFAULT_ACCEPT_TYPES NULL #define WINHTTP_NO_ADDITIONAL_HEADERS NULL #define WINHTTP_NO_REQUEST_DATA NULL #define WINHTTP_HEADER_NAME_BY_INDEX NULL #define WINHTTP_NO_OUTPUT_BUFFER NULL #define WINHTTP_NO_HEADER_INDEX NULL #define WINHTTP_ADDREQ_INDEX_MASK 0x0000FFFF #define WINHTTP_ADDREQ_FLAGS_MASK 0xFFFF0000 #define WINHTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000 #define WINHTTP_ADDREQ_FLAG_ADD 0x20000000 #define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000 #define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x01000000 #define WINHTTP_ADDREQ_FLAG_COALESCE WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA #define WINHTTP_ADDREQ_FLAG_REPLACE 0x80000000 #define WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH 0 /* flags for WinHttp{Set/Query}Options */ #define WINHTTP_FIRST_OPTION WINHTTP_OPTION_CALLBACK #define WINHTTP_OPTION_CALLBACK 1 #define WINHTTP_OPTION_RESOLVE_TIMEOUT 2 #define WINHTTP_OPTION_CONNECT_TIMEOUT 3 #define WINHTTP_OPTION_CONNECT_RETRIES 4 #define WINHTTP_OPTION_SEND_TIMEOUT 5 #define WINHTTP_OPTION_RECEIVE_TIMEOUT 6 #define WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT 7 #define WINHTTP_OPTION_HANDLE_TYPE 9 #define WINHTTP_OPTION_READ_BUFFER_SIZE 12 #define WINHTTP_OPTION_WRITE_BUFFER_SIZE 13 #define WINHTTP_OPTION_PARENT_HANDLE 21 #define WINHTTP_OPTION_EXTENDED_ERROR 24 #define WINHTTP_OPTION_SECURITY_FLAGS 31 #define WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT 32 #define WINHTTP_OPTION_URL 34 #define WINHTTP_OPTION_SECURITY_KEY_BITNESS 36 #define WINHTTP_OPTION_PROXY 38 #define WINHTTP_OPTION_USER_AGENT 41 #define WINHTTP_OPTION_CONTEXT_VALUE 45 #define WINHTTP_OPTION_CLIENT_CERT_CONTEXT 47 #define WINHTTP_OPTION_REQUEST_PRIORITY 58 #define WINHTTP_OPTION_HTTP_VERSION 59 #define WINHTTP_OPTION_DISABLE_FEATURE 63 #define WINHTTP_OPTION_CODEPAGE 68 #define WINHTTP_OPTION_MAX_CONNS_PER_SERVER 73 #define WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER 74 #define WINHTTP_OPTION_AUTOLOGON_POLICY 77 #define WINHTTP_OPTION_SERVER_CERT_CONTEXT 78 #define WINHTTP_OPTION_ENABLE_FEATURE 79 #define WINHTTP_OPTION_WORKER_THREAD_COUNT 80 #define WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT 81 #define WINHTTP_OPTION_PASSPORT_COBRANDING_URL 82 #define WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH 83 #define WINHTTP_OPTION_SECURE_PROTOCOLS 84 #define WINHTTP_OPTION_ENABLETRACING 85 #define WINHTTP_OPTION_PASSPORT_SIGN_OUT 86 #define WINHTTP_OPTION_PASSPORT_RETURN_URL 87 #define WINHTTP_OPTION_REDIRECT_POLICY 88 #define WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS 89 #define WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE 90 #define WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE 91 #define WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE 92 #define WINHTTP_OPTION_CONNECTION_INFO 93 #define WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST 94 #define WINHTTP_OPTION_SPN 96 #define WINHTTP_OPTION_GLOBAL_PROXY_CREDS 97 #define WINHTTP_OPTION_GLOBAL_SERVER_CREDS 98 #define WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT 99 #define WINHTTP_OPTION_REJECT_USERPWD_IN_URL 100 #define WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS 101 #define WINHTTP_LAST_OPTION WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS #define WINHTTP_OPTION_USERNAME 0x1000 #define WINHTTP_OPTION_PASSWORD 0x1001 #define WINHTTP_OPTION_PROXY_USERNAME 0x1002 #define WINHTTP_OPTION_PROXY_PASSWORD 0x1003 #define WINHTTP_CONNS_PER_SERVER_UNLIMITED 0xFFFFFFFF #define WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM 0 #define WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW 1 #define WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH 2 #define WINHTTP_AUTOLOGON_SECURITY_LEVEL_DEFAULT WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM #define WINHTTP_OPTION_REDIRECT_POLICY_NEVER 0 #define WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP 1 #define WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS 2 #define WINHTTP_OPTION_REDIRECT_POLICY_LAST WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS #define WINHTTP_OPTION_REDIRECT_POLICY_DEFAULT WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP #define WINHTTP_DISABLE_PASSPORT_AUTH 0x00000000 #define WINHTTP_ENABLE_PASSPORT_AUTH 0x10000000 #define WINHTTP_DISABLE_PASSPORT_KEYRING 0x20000000 #define WINHTTP_ENABLE_PASSPORT_KEYRING 0x40000000 #define WINHTTP_DISABLE_COOKIES 0x00000001 #define WINHTTP_DISABLE_REDIRECTS 0x00000002 #define WINHTTP_DISABLE_AUTHENTICATION 0x00000004 #define WINHTTP_DISABLE_KEEP_ALIVE 0x00000008 #define WINHTTP_ENABLE_SSL_REVOCATION 0x00000001 #define WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION 0x00000002 #define WINHTTP_DISABLE_SPN_SERVER_PORT 0x00000000 #define WINHTTP_ENABLE_SPN_SERVER_PORT 0x00000001 #define WINHTTP_OPTION_SPN_MASK WINHTTP_ENABLE_SPN_SERVER_PORT /* Options for WinHttpOpenRequest */ #define WINHTTP_NO_REFERER NULL #define WINHTTP_DEFAULT_ACCEPT_TYPES NULL /* Options for WinHttpSendRequest */ #define WINHTTP_NO_ADDITIONAL_HEADERS NULL #define WINHTTP_NO_REQUEST_DATA NULL /* WinHTTP error codes */ #define WINHTTP_ERROR_BASE 12000 #define ERROR_WINHTTP_OUT_OF_HANDLES (WINHTTP_ERROR_BASE + 1) #define ERROR_WINHTTP_TIMEOUT (WINHTTP_ERROR_BASE + 2) #define ERROR_WINHTTP_INTERNAL_ERROR (WINHTTP_ERROR_BASE + 4) #define ERROR_WINHTTP_INVALID_URL (WINHTTP_ERROR_BASE + 5) #define ERROR_WINHTTP_UNRECOGNIZED_SCHEME (WINHTTP_ERROR_BASE + 6) #define ERROR_WINHTTP_NAME_NOT_RESOLVED (WINHTTP_ERROR_BASE + 7) #define ERROR_WINHTTP_INVALID_OPTION (WINHTTP_ERROR_BASE + 9) #define ERROR_WINHTTP_OPTION_NOT_SETTABLE (WINHTTP_ERROR_BASE + 11) #define ERROR_WINHTTP_SHUTDOWN (WINHTTP_ERROR_BASE + 12) #define ERROR_WINHTTP_LOGIN_FAILURE (WINHTTP_ERROR_BASE + 15) #define ERROR_WINHTTP_OPERATION_CANCELLED (WINHTTP_ERROR_BASE + 17) #define ERROR_WINHTTP_INCORRECT_HANDLE_TYPE (WINHTTP_ERROR_BASE + 18) #define ERROR_WINHTTP_INCORRECT_HANDLE_STATE (WINHTTP_ERROR_BASE + 19) #define ERROR_WINHTTP_CANNOT_CONNECT (WINHTTP_ERROR_BASE + 29) #define ERROR_WINHTTP_CONNECTION_ERROR (WINHTTP_ERROR_BASE + 30) #define ERROR_WINHTTP_RESEND_REQUEST (WINHTTP_ERROR_BASE + 32) #define ERROR_WINHTTP_SECURE_CERT_DATE_INVALID (WINHTTP_ERROR_BASE + 37) #define ERROR_WINHTTP_SECURE_CERT_CN_INVALID (WINHTTP_ERROR_BASE + 38) #define ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (WINHTTP_ERROR_BASE + 44) #define ERROR_WINHTTP_SECURE_INVALID_CA (WINHTTP_ERROR_BASE + 45) #define ERROR_WINHTTP_SECURE_CERT_REV_FAILED (WINHTTP_ERROR_BASE + 57) #define ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN (WINHTTP_ERROR_BASE + 100) #define ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND (WINHTTP_ERROR_BASE + 101) #define ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND (WINHTTP_ERROR_BASE + 102) #define ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN (WINHTTP_ERROR_BASE + 103) #define ERROR_WINHTTP_HEADER_NOT_FOUND (WINHTTP_ERROR_BASE + 150) #define ERROR_WINHTTP_INVALID_SERVER_RESPONSE (WINHTTP_ERROR_BASE + 152) #define ERROR_WINHTTP_INVALID_HEADER (WINHTTP_ERROR_BASE + 153) #define ERROR_WINHTTP_INVALID_QUERY_REQUEST (WINHTTP_ERROR_BASE + 154) #define ERROR_WINHTTP_HEADER_ALREADY_EXISTS (WINHTTP_ERROR_BASE + 155) #define ERROR_WINHTTP_REDIRECT_FAILED (WINHTTP_ERROR_BASE + 156) #define ERROR_WINHTTP_SECURE_CHANNEL_ERROR (WINHTTP_ERROR_BASE + 157) #define ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT (WINHTTP_ERROR_BASE + 166) #define ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT (WINHTTP_ERROR_BASE + 167) #define ERROR_WINHTTP_SECURE_INVALID_CERT (WINHTTP_ERROR_BASE + 169) #define ERROR_WINHTTP_SECURE_CERT_REVOKED (WINHTTP_ERROR_BASE + 170) #define ERROR_WINHTTP_NOT_INITIALIZED (WINHTTP_ERROR_BASE + 172) #define ERROR_WINHTTP_SECURE_FAILURE (WINHTTP_ERROR_BASE + 175) #define ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR (WINHTTP_ERROR_BASE + 178) #define ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE (WINHTTP_ERROR_BASE + 179) #define ERROR_WINHTTP_AUTODETECTION_FAILED (WINHTTP_ERROR_BASE + 180) #define ERROR_WINHTTP_HEADER_COUNT_EXCEEDED (WINHTTP_ERROR_BASE + 181) #define ERROR_WINHTTP_HEADER_SIZE_OVERFLOW (WINHTTP_ERROR_BASE + 182) #define ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW (WINHTTP_ERROR_BASE + 183) #define ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW (WINHTTP_ERROR_BASE + 184) #define ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY (WINHTTP_ERROR_BASE + 185) #define ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY (WINHTTP_ERROR_BASE + 186) #define WINHTTP_ERROR_LAST (WINHTTP_ERROR_BASE + 186) /* WinHttp status codes */ #define HTTP_STATUS_CONTINUE 100 #define HTTP_STATUS_SWITCH_PROTOCOLS 101 #define HTTP_STATUS_OK 200 #define HTTP_STATUS_CREATED 201 #define HTTP_STATUS_ACCEPTED 202 #define HTTP_STATUS_PARTIAL 203 #define HTTP_STATUS_NO_CONTENT 204 #define HTTP_STATUS_RESET_CONTENT 205 #define HTTP_STATUS_PARTIAL_CONTENT 206 #define HTTP_STATUS_WEBDAV_MULTI_STATUS 207 #define HTTP_STATUS_AMBIGUOUS 300 #define HTTP_STATUS_MOVED 301 #define HTTP_STATUS_REDIRECT 302 #define HTTP_STATUS_REDIRECT_METHOD 303 #define HTTP_STATUS_NOT_MODIFIED 304 #define HTTP_STATUS_USE_PROXY 305 #define HTTP_STATUS_REDIRECT_KEEP_VERB 307 #define HTTP_STATUS_BAD_REQUEST 400 #define HTTP_STATUS_DENIED 401 #define HTTP_STATUS_PAYMENT_REQ 402 #define HTTP_STATUS_FORBIDDEN 403 #define HTTP_STATUS_NOT_FOUND 404 #define HTTP_STATUS_BAD_METHOD 405 #define HTTP_STATUS_NONE_ACCEPTABLE 406 #define HTTP_STATUS_PROXY_AUTH_REQ 407 #define HTTP_STATUS_REQUEST_TIMEOUT 408 #define HTTP_STATUS_CONFLICT 409 #define HTTP_STATUS_GONE 410 #define HTTP_STATUS_LENGTH_REQUIRED 411 #define HTTP_STATUS_PRECOND_FAILED 412 #define HTTP_STATUS_REQUEST_TOO_LARGE 413 #define HTTP_STATUS_URI_TOO_LONG 414 #define HTTP_STATUS_UNSUPPORTED_MEDIA 415 #define HTTP_STATUS_RETRY_WITH 449 #define HTTP_STATUS_SERVER_ERROR 500 #define HTTP_STATUS_NOT_SUPPORTED 501 #define HTTP_STATUS_BAD_GATEWAY 502 #define HTTP_STATUS_SERVICE_UNAVAIL 503 #define HTTP_STATUS_GATEWAY_TIMEOUT 504 #define HTTP_STATUS_VERSION_NOT_SUP 505 #define HTTP_STATUS_FIRST HTTP_STATUS_CONTINUE #define HTTP_STATUS_LAST HTTP_STATUS_VERSION_NOT_SUP #define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x00000100 #define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000 #define SECURITY_FLAG_IGNORE_CERT_CN_INVALID 0x00001000 #define SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE 0x00000200 #define SECURITY_FLAG_SECURE 0x00000001 #define SECURITY_FLAG_STRENGTH_WEAK 0x10000000 #define SECURITY_FLAG_STRENGTH_MEDIUM 0x40000000 #define SECURITY_FLAG_STRENGTH_STRONG 0x20000000 #define ICU_NO_ENCODE 0x20000000 #define ICU_DECODE 0x10000000 #define ICU_NO_META 0x08000000 #define ICU_ENCODE_SPACES_ONLY 0x04000000 #define ICU_BROWSER_MODE 0x02000000 #define ICU_ENCODE_PERCENT 0x00001000 /* Query flags */ #define WINHTTP_QUERY_MIME_VERSION 0 #define WINHTTP_QUERY_CONTENT_TYPE 1 #define WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING 2 #define WINHTTP_QUERY_CONTENT_ID 3 #define WINHTTP_QUERY_CONTENT_DESCRIPTION 4 #define WINHTTP_QUERY_CONTENT_LENGTH 5 #define WINHTTP_QUERY_CONTENT_LANGUAGE 6 #define WINHTTP_QUERY_ALLOW 7 #define WINHTTP_QUERY_PUBLIC 8 #define WINHTTP_QUERY_DATE 9 #define WINHTTP_QUERY_EXPIRES 10 #define WINHTTP_QUERY_LAST_MODIFIED 11 #define WINHTTP_QUERY_MESSAGE_ID 12 #define WINHTTP_QUERY_URI 13 #define WINHTTP_QUERY_DERIVED_FROM 14 #define WINHTTP_QUERY_COST 15 #define WINHTTP_QUERY_LINK 16 #define WINHTTP_QUERY_PRAGMA 17 #define WINHTTP_QUERY_VERSION 18 #define WINHTTP_QUERY_STATUS_CODE 19 #define WINHTTP_QUERY_STATUS_TEXT 20 #define WINHTTP_QUERY_RAW_HEADERS 21 #define WINHTTP_QUERY_RAW_HEADERS_CRLF 22 #define WINHTTP_QUERY_CONNECTION 23 #define WINHTTP_QUERY_ACCEPT 24 #define WINHTTP_QUERY_ACCEPT_CHARSET 25 #define WINHTTP_QUERY_ACCEPT_ENCODING 26 #define WINHTTP_QUERY_ACCEPT_LANGUAGE 27 #define WINHTTP_QUERY_AUTHORIZATION 28 #define WINHTTP_QUERY_CONTENT_ENCODING 29 #define WINHTTP_QUERY_FORWARDED 30 #define WINHTTP_QUERY_FROM 31 #define WINHTTP_QUERY_IF_MODIFIED_SINCE 32 #define WINHTTP_QUERY_LOCATION 33 #define WINHTTP_QUERY_ORIG_URI 34 #define WINHTTP_QUERY_REFERER 35 #define WINHTTP_QUERY_RETRY_AFTER 36 #define WINHTTP_QUERY_SERVER 37 #define WINHTTP_QUERY_TITLE 38 #define WINHTTP_QUERY_USER_AGENT 39 #define WINHTTP_QUERY_WWW_AUTHENTICATE 40 #define WINHTTP_QUERY_PROXY_AUTHENTICATE 41 #define WINHTTP_QUERY_ACCEPT_RANGES 42 #define WINHTTP_QUERY_SET_COOKIE 43 #define WINHTTP_QUERY_COOKIE 44 #define WINHTTP_QUERY_REQUEST_METHOD 45 #define WINHTTP_QUERY_REFRESH 46 #define WINHTTP_QUERY_CONTENT_DISPOSITION 47 #define WINHTTP_QUERY_AGE 48 #define WINHTTP_QUERY_CACHE_CONTROL 49 #define WINHTTP_QUERY_CONTENT_BASE 50 #define WINHTTP_QUERY_CONTENT_LOCATION 51 #define WINHTTP_QUERY_CONTENT_MD5 52 #define WINHTTP_QUERY_CONTENT_RANGE 53 #define WINHTTP_QUERY_ETAG 54 #define WINHTTP_QUERY_HOST 55 #define WINHTTP_QUERY_IF_MATCH 56 #define WINHTTP_QUERY_IF_NONE_MATCH 57 #define WINHTTP_QUERY_IF_RANGE 58 #define WINHTTP_QUERY_IF_UNMODIFIED_SINCE 59 #define WINHTTP_QUERY_MAX_FORWARDS 60 #define WINHTTP_QUERY_PROXY_AUTHORIZATION 61 #define WINHTTP_QUERY_RANGE 62 #define WINHTTP_QUERY_TRANSFER_ENCODING 63 #define WINHTTP_QUERY_UPGRADE 64 #define WINHTTP_QUERY_VARY 65 #define WINHTTP_QUERY_VIA 66 #define WINHTTP_QUERY_WARNING 67 #define WINHTTP_QUERY_EXPECT 68 #define WINHTTP_QUERY_PROXY_CONNECTION 69 #define WINHTTP_QUERY_UNLESS_MODIFIED_SINCE 70 #define WINHTTP_QUERY_PROXY_SUPPORT 75 #define WINHTTP_QUERY_AUTHENTICATION_INFO 76 #define WINHTTP_QUERY_PASSPORT_URLS 77 #define WINHTTP_QUERY_PASSPORT_CONFIG 78 #define WINHTTP_QUERY_MAX 78 #define WINHTTP_QUERY_CUSTOM 65535 #define WINHTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000 #define WINHTTP_QUERY_FLAG_SYSTEMTIME 0x40000000 #define WINHTTP_QUERY_FLAG_NUMBER 0x20000000 /* Callback options */ #define WINHTTP_CALLBACK_STATUS_RESOLVING_NAME 0x00000001 #define WINHTTP_CALLBACK_STATUS_NAME_RESOLVED 0x00000002 #define WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER 0x00000004 #define WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER 0x00000008 #define WINHTTP_CALLBACK_STATUS_SENDING_REQUEST 0x00000010 #define WINHTTP_CALLBACK_STATUS_REQUEST_SENT 0x00000020 #define WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE 0x00000040 #define WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED 0x00000080 #define WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION 0x00000100 #define WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED 0x00000200 #define WINHTTP_CALLBACK_STATUS_HANDLE_CREATED 0x00000400 #define WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 0x00000800 #define WINHTTP_CALLBACK_STATUS_DETECTING_PROXY 0x00001000 #define WINHTTP_CALLBACK_STATUS_REDIRECT 0x00004000 #define WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE 0x00008000 #define WINHTTP_CALLBACK_STATUS_SECURE_FAILURE 0x00010000 #define WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 0x00020000 #define WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE 0x00040000 #define WINHTTP_CALLBACK_STATUS_READ_COMPLETE 0x00080000 #define WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE 0x00100000 #define WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 0x00200000 #define WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE 0x00400000 #define WINHTTP_CALLBACK_FLAG_RESOLVE_NAME (WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | WINHTTP_CALLBACK_STATUS_NAME_RESOLVED) #define WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER (WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER) #define WINHTTP_CALLBACK_FLAG_SEND_REQUEST (WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | WINHTTP_CALLBACK_STATUS_REQUEST_SENT) #define WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE (WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED) #define WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION (WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED) #define WINHTTP_CALLBACK_FLAG_HANDLES (WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING) #define WINHTTP_CALLBACK_FLAG_DETECTING_PROXY WINHTTP_CALLBACK_STATUS_DETECTING_PROXY #define WINHTTP_CALLBACK_FLAG_REDIRECT WINHTTP_CALLBACK_STATUS_REDIRECT #define WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE #define WINHTTP_CALLBACK_FLAG_SECURE_FAILURE WINHTTP_CALLBACK_STATUS_SECURE_FAILURE #define WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE #define WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE #define WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE #define WINHTTP_CALLBACK_FLAG_READ_COMPLETE WINHTTP_CALLBACK_STATUS_READ_COMPLETE #define WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE #define WINHTTP_CALLBACK_FLAG_REQUEST_ERROR WINHTTP_CALLBACK_STATUS_REQUEST_ERROR #define WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE \ | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | WINHTTP_CALLBACK_STATUS_READ_COMPLETE \ | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR) #define WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS 0xffffffff #define WINHTTP_INVALID_STATUS_CALLBACK ((WINHTTP_STATUS_CALLBACK)(-1)) #define API_RECEIVE_RESPONSE (1) #define API_QUERY_DATA_AVAILABLE (2) #define API_READ_DATA (3) #define API_WRITE_DATA (4) #define API_SEND_REQUEST (5) #define WINHTTP_HANDLE_TYPE_SESSION 1 #define WINHTTP_HANDLE_TYPE_CONNECT 2 #define WINHTTP_HANDLE_TYPE_REQUEST 3 #define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED 0x00000001 #define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT 0x00000002 #define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED 0x00000004 #define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA 0x00000008 #define WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID 0x00000010 #define WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID 0x00000020 #define WINHTTP_CALLBACK_STATUS_FLAG_CERT_WRONG_USAGE 0x00000040 #define WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR 0x80000000 #define WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 0x00000008 #define WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 0x00000020 #define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 0x00000080 #define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 0x00000200 #define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 0x00000800 #define WINHTTP_FLAG_SECURE_PROTOCOL_ALL (WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 |\ WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 |\ WINHTTP_FLAG_SECURE_PROTOCOL_TLS1) #define WINHTTP_AUTH_SCHEME_BASIC 0x00000001 #define WINHTTP_AUTH_SCHEME_NTLM 0x00000002 #define WINHTTP_AUTH_SCHEME_PASSPORT 0x00000004 #define WINHTTP_AUTH_SCHEME_DIGEST 0x00000008 #define WINHTTP_AUTH_SCHEME_NEGOTIATE 0x00000010 #define WINHTTP_AUTH_TARGET_SERVER 0x00000000 #define WINHTTP_AUTH_TARGET_PROXY 0x00000001 #define WINHTTP_TIME_FORMAT_BUFSIZE 62 typedef struct { DWORD dwStructSize; LPWSTR lpszScheme; DWORD dwSchemeLength; INTERNET_SCHEME nScheme; LPWSTR lpszHostName; DWORD dwHostNameLength; INTERNET_PORT nPort; LPWSTR lpszUserName; DWORD dwUserNameLength; LPWSTR lpszPassword; DWORD dwPasswordLength; LPWSTR lpszUrlPath; DWORD dwUrlPathLength; LPWSTR lpszExtraInfo; DWORD dwExtraInfoLength; } URL_COMPONENTS, *LPURL_COMPONENTS; typedef URL_COMPONENTS URL_COMPONENTSW; typedef LPURL_COMPONENTS LPURL_COMPONENTSW; typedef struct { DWORD_PTR dwResult; DWORD dwError; } WINHTTP_ASYNC_RESULT, *LPWINHTTP_ASYNC_RESULT; typedef struct { FILETIME ftExpiry; FILETIME ftStart; LPWSTR lpszSubjectInfo; LPWSTR lpszIssuerInfo; LPWSTR lpszProtocolName; LPWSTR lpszSignatureAlgName; LPWSTR lpszEncryptionAlgName; DWORD dwKeySize; } WINHTTP_CERTIFICATE_INFO; typedef struct { DWORD dwAccessType; LPWSTR lpszProxy; LPWSTR lpszProxyBypass; } WINHTTP_PROXY_INFO, *LPWINHTTP_PROXY_INFO; typedef WINHTTP_PROXY_INFO WINHTTP_PROXY_INFOW; typedef LPWINHTTP_PROXY_INFO LPWINHTTP_PROXY_INFOW; typedef struct { BOOL fAutoDetect; LPWSTR lpszAutoConfigUrl; LPWSTR lpszProxy; LPWSTR lpszProxyBypass; } WINHTTP_CURRENT_USER_IE_PROXY_CONFIG; typedef VOID (CALLBACK *WINHTTP_STATUS_CALLBACK)(HINTERNET,DWORD_PTR,DWORD,LPVOID,DWORD); #define WINHTTP_AUTO_DETECT_TYPE_DHCP 0x00000001 #define WINHTTP_AUTO_DETECT_TYPE_DNS_A 0x00000002 #define WINHTTP_AUTOPROXY_AUTO_DETECT 0x00000001 #define WINHTTP_AUTOPROXY_CONFIG_URL 0x00000002 #define WINHTTP_AUTOPROXY_RUN_INPROCESS 0x00010000 #define WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY 0x00020000 typedef struct { DWORD dwFlags; DWORD dwAutoDetectFlags; LPCWSTR lpszAutoConfigUrl; LPVOID lpvReserved; DWORD dwReserved; BOOL fAutoLogonIfChallenged; } WINHTTP_AUTOPROXY_OPTIONS; typedef struct { DWORD dwMajorVersion; DWORD dwMinorVersion; } HTTP_VERSION_INFO, *LPHTTP_VERSION_INFO; #ifdef _WS2DEF_ typedef struct { DWORD cbSize; SOCKADDR_STORAGE LocalAddress; SOCKADDR_STORAGE RemoteAddress; } WINHTTP_CONNECTION_INFO; #endif #ifdef __cplusplus extern "C" { #endif BOOL WINAPI WinHttpAddRequestHeaders(HINTERNET,LPCWSTR,DWORD,DWORD); BOOL WINAPI WinHttpDetectAutoProxyConfigUrl(DWORD,LPWSTR*); BOOL WINAPI WinHttpCheckPlatform(void); BOOL WINAPI WinHttpCloseHandle(HINTERNET); HINTERNET WINAPI WinHttpConnect(HINTERNET,LPCWSTR,INTERNET_PORT,DWORD); BOOL WINAPI WinHttpCrackUrl(LPCWSTR,DWORD,DWORD,LPURL_COMPONENTS); BOOL WINAPI WinHttpCreateUrl(LPURL_COMPONENTS,DWORD,LPWSTR,LPDWORD); BOOL WINAPI WinHttpGetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*); BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG*); BOOL WINAPI WinHttpGetProxyForUrl(HINTERNET,LPCWSTR,WINHTTP_AUTOPROXY_OPTIONS*,WINHTTP_PROXY_INFO*); HINTERNET WINAPI WinHttpOpen(LPCWSTR,DWORD,LPCWSTR,LPCWSTR,DWORD); HINTERNET WINAPI WinHttpOpenRequest(HINTERNET,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR*,DWORD); BOOL WINAPI WinHttpQueryAuthParams(HINTERNET,DWORD,LPVOID*); BOOL WINAPI WinHttpQueryAuthSchemes(HINTERNET,LPDWORD,LPDWORD,LPDWORD); BOOL WINAPI WinHttpQueryDataAvailable(HINTERNET,LPDWORD); BOOL WINAPI WinHttpQueryHeaders(HINTERNET,DWORD,LPCWSTR,LPVOID,LPDWORD,LPDWORD); BOOL WINAPI WinHttpQueryOption(HINTERNET,DWORD,LPVOID,LPDWORD); BOOL WINAPI WinHttpReadData(HINTERNET,LPVOID,DWORD,LPDWORD); BOOL WINAPI WinHttpReceiveResponse(HINTERNET,LPVOID); BOOL WINAPI WinHttpSendRequest(HINTERNET,LPCWSTR,DWORD,LPVOID,DWORD,DWORD,DWORD_PTR); BOOL WINAPI WinHttpSetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*); BOOL WINAPI WinHttpSetCredentials(HINTERNET,DWORD,DWORD,LPCWSTR,LPCWSTR,LPVOID); BOOL WINAPI WinHttpSetOption(HINTERNET,DWORD,LPVOID,DWORD); WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(HINTERNET,WINHTTP_STATUS_CALLBACK,DWORD,DWORD_PTR); BOOL WINAPI WinHttpSetTimeouts(HINTERNET,int,int,int,int); BOOL WINAPI WinHttpTimeFromSystemTime(const SYSTEMTIME *,LPWSTR); BOOL WINAPI WinHttpTimeToSystemTime(LPCWSTR,SYSTEMTIME*); BOOL WINAPI WinHttpWriteData(HINTERNET,LPCVOID,DWORD,LPDWORD); #ifdef __cplusplus } #endif #include #endif /* __WINE_WINHTTP_H */ ================================================ FILE: wine/windows/wininet.h ================================================ /* * Copyright (C) 2000 Ulrich Czekalla * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINE_WININET_H_ #define _WINE_WININET_H_ #ifdef __cplusplus extern "C" { #endif #define INTERNETAPI #define BOOLAPI INTERNETAPI BOOL WINAPI typedef LPVOID HINTERNET; typedef HINTERNET * LPHINTERNET; typedef WORD INTERNET_PORT; typedef INTERNET_PORT * LPINTERNET_PORT; #define INTERNET_INVALID_PORT_NUMBER 0 #define INTERNET_DEFAULT_FTP_PORT 21 #define INTERNET_DEFAULT_GOPHER_PORT 70 #define INTERNET_DEFAULT_HTTP_PORT 80 #define INTERNET_DEFAULT_HTTPS_PORT 443 #define INTERNET_DEFAULT_SOCKS_PORT 1080 #define INTERNET_MAX_HOST_NAME_LENGTH 256 #define INTERNET_MAX_USER_NAME_LENGTH 128 #define INTERNET_MAX_PASSWORD_LENGTH 128 #define INTERNET_MAX_PORT_NUMBER_LENGTH 5 #define INTERNET_MAX_PORT_NUMBER_VALUE 65535 #define INTERNET_MAX_PATH_LENGTH 2048 #define INTERNET_MAX_SCHEME_LENGTH 32 #define INTERNET_MAX_URL_LENGTH (INTERNET_MAX_SCHEME_LENGTH + sizeof("://")+ INTERNET_MAX_PATH_LENGTH) #define INTERNET_KEEP_ALIVE_UNKNOWN ((DWORD)-1) #define INTERNET_KEEP_ALIVE_ENABLED 1 #define INTERNET_KEEP_ALIVE_DISABLED 0 #define INTERNET_REQFLAG_FROM_CACHE 0x00000001 #define INTERNET_REQFLAG_ASYNC 0x00000002 #define INTERNET_REQFLAG_VIA_PROXY 0x00000004 #define INTERNET_REQFLAG_NO_HEADERS 0x00000008 #define INTERNET_REQFLAG_PASSIVE 0x00000010 #define INTERNET_REQFLAG_CACHE_WRITE_DISABLED 0x00000040 #define INTERNET_FLAG_RELOAD 0x80000000 #define INTERNET_FLAG_RAW_DATA 0x40000000 #define INTERNET_FLAG_EXISTING_CONNECT 0x20000000 #define INTERNET_FLAG_ASYNC 0x10000000 #define INTERNET_FLAG_PASSIVE 0x08000000 #define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000 #define INTERNET_FLAG_DONT_CACHE INTERNET_FLAG_NO_CACHE_WRITE #define INTERNET_FLAG_MAKE_PERSISTENT 0x02000000 #define INTERNET_FLAG_FROM_CACHE 0x01000000 #define INTERNET_FLAG_OFFLINE INTERNET_FLAG_FROM_CACHE #define INTERNET_FLAG_SECURE 0x00800000 #define INTERNET_FLAG_KEEP_CONNECTION 0x00400000 #define INTERNET_FLAG_NO_AUTO_REDIRECT 0x00200000 #define INTERNET_FLAG_READ_PREFETCH 0x00100000 #define INTERNET_FLAG_NO_COOKIES 0x00080000 #define INTERNET_FLAG_NO_AUTH 0x00040000 #define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000 #define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 0x00008000 #define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x00004000 #define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000 #define INTERNET_FLAG_IGNORE_CERT_CN_INVALID 0x00001000 #define INTERNET_FLAG_RESYNCHRONIZE 0x00000800 #define INTERNET_FLAG_HYPERLINK 0x00000400 #define INTERNET_FLAG_NO_UI 0x00000200 #define INTERNET_FLAG_PRAGMA_NOCACHE 0x00000100 #define INTERNET_FLAG_CACHE_ASYNC 0x00000080 #define INTERNET_FLAG_FORMS_SUBMIT 0x00000040 #define INTERNET_FLAG_NEED_FILE 0x00000010 #define INTERNET_FLAG_MUST_CACHE_REQUEST INTERNET_FLAG_NEED_FILE #define INTERNET_FLAG_TRANSFER_ASCII FTP_TRANSFER_TYPE_ASCII #define INTERNET_FLAG_TRANSFER_BINARY FTP_TRANSFER_TYPE_BINARY #define SECURITY_INTERNET_MASK (INTERNET_FLAG_IGNORE_CERT_CN_INVALID|\ INTERNET_FLAG_IGNORE_CERT_DATE_INVALID|\ INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|\ INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP) #define INTERNET_FLAGS_MASK (INTERNET_FLAG_RELOAD \ | INTERNET_FLAG_RAW_DATA \ | INTERNET_FLAG_EXISTING_CONNECT \ | INTERNET_FLAG_ASYNC \ | INTERNET_FLAG_PASSIVE \ | INTERNET_FLAG_NO_CACHE_WRITE \ | INTERNET_FLAG_MAKE_PERSISTENT \ | INTERNET_FLAG_FROM_CACHE \ | INTERNET_FLAG_SECURE \ | INTERNET_FLAG_KEEP_CONNECTION \ | INTERNET_FLAG_NO_AUTO_REDIRECT \ | INTERNET_FLAG_READ_PREFETCH \ | INTERNET_FLAG_NO_COOKIES \ | INTERNET_FLAG_NO_AUTH \ | INTERNET_FLAG_CACHE_IF_NET_FAIL \ | SECURITY_INTERNET_MASK \ | INTERNET_FLAG_RESYNCHRONIZE \ | INTERNET_FLAG_HYPERLINK \ | INTERNET_FLAG_NO_UI \ | INTERNET_FLAG_PRAGMA_NOCACHE \ | INTERNET_FLAG_CACHE_ASYNC \ | INTERNET_FLAG_FORMS_SUBMIT \ | INTERNET_FLAG_NEED_FILE \ | INTERNET_FLAG_TRANSFER_BINARY \ | INTERNET_FLAG_TRANSFER_ASCII \ ) #define INTERNET_ERROR_MASK_INSERT_CDROM 0x1 #define INTERNET_ERROR_MASK_COMBINED_SEC_CERT 0x2 #define INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG 0x4 #define INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 0x8 #define INTERNET_OPTIONS_MASK (~INTERNET_FLAGS_MASK) #define WININET_API_FLAG_ASYNC 0x00000001 #define WININET_API_FLAG_SYNC 0x00000004 #define WININET_API_FLAG_USE_CONTEXT 0x00000008 #define INTERNET_NO_CALLBACK 0 typedef enum { INTERNET_SCHEME_PARTIAL = -2, INTERNET_SCHEME_UNKNOWN = -1, INTERNET_SCHEME_DEFAULT = 0, INTERNET_SCHEME_FTP, /* yes, this contradicts winhttp.h */ INTERNET_SCHEME_GOPHER, INTERNET_SCHEME_HTTP, /* yes, this contradicts winhttp.h */ INTERNET_SCHEME_HTTPS, /* yes, this contradicts winhttp.h */ INTERNET_SCHEME_FILE, INTERNET_SCHEME_NEWS, INTERNET_SCHEME_MAILTO, INTERNET_SCHEME_SOCKS, /* yes, this contradicts winhttp.h */ INTERNET_SCHEME_JAVASCRIPT, INTERNET_SCHEME_VBSCRIPT, INTERNET_SCHEME_RES, INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP, INTERNET_SCHEME_LAST = INTERNET_SCHEME_RES } INTERNET_SCHEME,* LPINTERNET_SCHEME; typedef struct { DWORD_PTR dwResult; DWORD dwError; } INTERNET_ASYNC_RESULT,* LPINTERNET_ASYNC_RESULT; typedef struct { DWORD dwAccessType; LPCSTR lpszProxy; LPCSTR lpszProxyBypass; } INTERNET_PROXY_INFOA,* LPINTERNET_PROXY_INFOA; typedef struct { DWORD dwAccessType; LPCWSTR lpszProxy; LPCWSTR lpszProxyBypass; } INTERNET_PROXY_INFOW,* LPINTERNET_PROXY_INFOW; DECL_WINELIB_TYPE_AW(INTERNET_PROXY_INFO) DECL_WINELIB_TYPE_AW(LPINTERNET_PROXY_INFO) typedef struct { DWORD dwMajorVersion; DWORD dwMinorVersion; } INTERNET_VERSION_INFO,* LPINTERNET_VERSION_INFO; typedef struct { DWORD dwMajorVersion; DWORD dwMinorVersion; } HTTP_VERSION_INFO,* LPHTTP_VERSION_INFO; typedef struct { DWORD dwConnectedState; DWORD dwFlags; } INTERNET_CONNECTED_INFO,* LPINTERNET_CONNECTED_INFO; #define ISO_FORCE_DISCONNECTED 0x00000001 typedef struct { DWORD dwStructSize; LPSTR lpszScheme; DWORD dwSchemeLength; INTERNET_SCHEME nScheme; LPSTR lpszHostName; DWORD dwHostNameLength; INTERNET_PORT nPort; LPSTR lpszUserName; DWORD dwUserNameLength; LPSTR lpszPassword; DWORD dwPasswordLength; LPSTR lpszUrlPath; DWORD dwUrlPathLength; LPSTR lpszExtraInfo; DWORD dwExtraInfoLength; } URL_COMPONENTSA,* LPURL_COMPONENTSA; typedef struct { DWORD dwStructSize; LPWSTR lpszScheme; DWORD dwSchemeLength; INTERNET_SCHEME nScheme; LPWSTR lpszHostName; DWORD dwHostNameLength; INTERNET_PORT nPort; LPWSTR lpszUserName; DWORD dwUserNameLength; LPWSTR lpszPassword; DWORD dwPasswordLength; LPWSTR lpszUrlPath; DWORD dwUrlPathLength; LPWSTR lpszExtraInfo; DWORD dwExtraInfoLength; } URL_COMPONENTSW,* LPURL_COMPONENTSW; DECL_WINELIB_TYPE_AW(URL_COMPONENTS) DECL_WINELIB_TYPE_AW(LPURL_COMPONENTS) typedef struct { FILETIME ftExpiry; FILETIME ftStart; LPSTR lpszSubjectInfo; LPSTR lpszIssuerInfo; LPSTR lpszProtocolName; LPSTR lpszSignatureAlgName; LPSTR lpszEncryptionAlgName; DWORD dwKeySize; } INTERNET_CERTIFICATE_INFOA,* LPINTERNET_CERTIFICATE_INFOA; typedef struct { FILETIME ftExpiry; FILETIME ftStart; LPWSTR lpszSubjectInfo; LPWSTR lpszIssuerInfo; LPWSTR lpszProtocolName; LPWSTR lpszSignatureAlgName; LPWSTR lpszEncryptionAlgName; DWORD dwKeySize; } INTERNET_CERTIFICATE_INFOW,* LPINTERNET_CERTIFICATE_INFOW; DECL_WINELIB_TYPE_AW(INTERNET_CERTIFICATE_INFO) DECL_WINELIB_TYPE_AW(LPINTERNET_CERTIFICATE_INFO) typedef struct _INTERNET_BUFFERSA { DWORD dwStructSize; struct _INTERNET_BUFFERSA * Next; LPCSTR lpcszHeader; DWORD dwHeadersLength; DWORD dwHeadersTotal; LPVOID lpvBuffer; DWORD dwBufferLength; DWORD dwBufferTotal; DWORD dwOffsetLow; DWORD dwOffsetHigh; } INTERNET_BUFFERSA,* LPINTERNET_BUFFERSA; typedef struct _INTERNET_BUFFERSW { DWORD dwStructSize; struct _INTERNET_BUFFERSW * Next; LPCWSTR lpcszHeader; DWORD dwHeadersLength; DWORD dwHeadersTotal; LPVOID lpvBuffer; DWORD dwBufferLength; DWORD dwBufferTotal; DWORD dwOffsetLow; DWORD dwOffsetHigh; } INTERNET_BUFFERSW,* LPINTERNET_BUFFERSW; DECL_WINELIB_TYPE_AW(INTERNET_BUFFERS) DECL_WINELIB_TYPE_AW(LPINTERNET_BUFFERS) #define GROUP_OWNER_STORAGE_SIZE 4 #define GROUPNAME_MAX_LENGTH 120 typedef struct _INTERNET_CACHE_GROUP_INFOA { DWORD dwGroupSize; DWORD dwGroupFlags; DWORD dwGroupType; DWORD dwDiskUsage; DWORD dwDiskQuota; DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE]; CHAR szGroupName[GROUPNAME_MAX_LENGTH]; } INTERNET_CACHE_GROUP_INFOA, * LPINTERNET_CACHE_GROUP_INFOA; typedef struct _INTERNET_CACHE_GROUP_INFOW { DWORD dwGroupSize; DWORD dwGroupFlags; DWORD dwGroupType; DWORD dwDiskUsage; DWORD dwDiskQuota; DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE]; WCHAR szGroupName[GROUPNAME_MAX_LENGTH]; } INTERNET_CACHE_GROUP_INFOW, *LPINTERNET_CACHE_GROUP_INFOW; DECL_WINELIB_TYPE_AW(INTERNET_CACHE_GROUP_INFO) DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_GROUP_INFO) typedef struct _INTERNET_PER_CONN_OPTIONA { DWORD dwOption; union { DWORD dwValue; LPSTR pszValue; FILETIME ftValue; } Value; } INTERNET_PER_CONN_OPTIONA, *LPINTERNET_PER_CONN_OPTIONA; typedef struct _INTERNET_PER_CONN_OPTIONW { DWORD dwOption; union { DWORD dwValue; LPWSTR pszValue; FILETIME ftValue; } Value; } INTERNET_PER_CONN_OPTIONW, *LPINTERNET_PER_CONN_OPTIONW; DECL_WINELIB_TYPE_AW(INTERNET_PER_CONN_OPTION) DECL_WINELIB_TYPE_AW(LPINTERNET_PER_CONN_OPTION) #define INTERNET_PER_CONN_FLAGS 1 #define INTERNET_PER_CONN_PROXY_SERVER 2 #define INTERNET_PER_CONN_PROXY_BYPASS 3 #define INTERNET_PER_CONN_AUTOCONFIG_URL 4 #define INTERNET_PER_CONN_AUTODISCOVERY_FLAGS 5 #define INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL 6 #define INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS 7 #define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME 8 #define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL 9 /* Values for INTERNET_PER_CONN_FLAGS */ #define PROXY_TYPE_DIRECT 0x00000001 #define PROXY_TYPE_PROXY 0x00000002 #define PROXY_TYPE_AUTO_PROXY_URL 0x00000004 #define PROXY_TYPE_AUTO_DETECT 0x00000008 /* Values for INTERNET_PER_CONN_AUTODISCOVERY_FLAGS */ #define AUTO_PROXY_FLAG_USER_SET 0x00000001 #define AUTO_PROXY_FLAG_ALWAYS_DETECT 0x00000002 #define AUTO_PROXY_FLAG_DETECTION_RUN 0x00000004 #define AUTO_PROXY_FLAG_MIGRATED 0x00000008 #define AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT 0x00000010 #define AUTO_PROXY_FLAG_CACHE_INIT_RUN 0x00000020 #define AUTO_PROXY_FLAG_DETECTION_SUSPECT 0x00000040 typedef struct _INTERNET_PER_CONN_OPTION_LISTA { DWORD dwSize; LPSTR pszConnection; DWORD dwOptionCount; DWORD dwOptionError; LPINTERNET_PER_CONN_OPTIONA pOptions; } INTERNET_PER_CONN_OPTION_LISTA, *LPINTERNET_PER_CONN_OPTION_LISTA; typedef struct _INTERNET_PER_CONN_OPTION_LISTW { DWORD dwSize; LPWSTR pszConnection; DWORD dwOptionCount; DWORD dwOptionError; LPINTERNET_PER_CONN_OPTIONW pOptions; } INTERNET_PER_CONN_OPTION_LISTW, *LPINTERNET_PER_CONN_OPTION_LISTW; DECL_WINELIB_TYPE_AW(INTERNET_PER_CONN_OPTION_LIST) DECL_WINELIB_TYPE_AW(LPINTERNET_PER_CONN_OPTION_LIST) typedef struct _INTERNET_DIAGNOSTIC_SOCKET_INFO { DWORD_PTR Socket; DWORD SourcePort; DWORD DestPort; DWORD Flags; } INTERNET_DIAGNOSTIC_SOCKET_INFO, *LPINTERNET_DIAGNOSTIC_SOCKET_INFO; #define IDSI_FLAG_KEEP_ALIVE 0x00000001 #define IDSI_FLAG_SECURE 0x00000002 #define IDSI_FLAG_PROXY 0x00000004 #define IDSI_FLAG_TUNNEL 0x00000008 BOOLAPI InternetTimeFromSystemTimeA(const SYSTEMTIME *,DWORD ,LPSTR ,DWORD); BOOLAPI InternetTimeFromSystemTimeW(const SYSTEMTIME *,DWORD ,LPWSTR ,DWORD); #define InternetTimeFromSystemTime WINELIB_NAME_AW(InternetTimeFromSystemTime) #define INTERNET_RFC1123_FORMAT 0 #define INTERNET_RFC1123_BUFSIZE 30 BOOLAPI InternetTimeToSystemTimeA(LPCSTR ,SYSTEMTIME *,DWORD); BOOLAPI InternetTimeToSystemTimeW(LPCWSTR ,SYSTEMTIME *,DWORD); #define InternetTimeToSystemTime WINELIB_NAME_AW(InternetTimeToSystemTime) BOOLAPI InternetCrackUrlA(LPCSTR ,DWORD ,DWORD ,LPURL_COMPONENTSA); BOOLAPI InternetCrackUrlW(LPCWSTR ,DWORD ,DWORD ,LPURL_COMPONENTSW); #define InternetCrackUrl WINELIB_NAME_AW(InternetCrackUrl) BOOLAPI InternetCreateUrlA(LPURL_COMPONENTSA ,DWORD ,LPSTR ,LPDWORD); BOOLAPI InternetCreateUrlW(LPURL_COMPONENTSW ,DWORD ,LPWSTR ,LPDWORD); #define InternetCreateUrl WINELIB_NAME_AW(InternetCreateUrl) BOOLAPI InternetCanonicalizeUrlA(LPCSTR ,LPSTR ,LPDWORD ,DWORD); BOOLAPI InternetCanonicalizeUrlW(LPCWSTR ,LPWSTR ,LPDWORD ,DWORD); #define InternetCanonicalizeUrl WINELIB_NAME_AW(InternetCanonicalizeUrl) BOOLAPI InternetCombineUrlA(LPCSTR ,LPCSTR ,LPSTR ,LPDWORD ,DWORD); BOOLAPI InternetCombineUrlW(LPCWSTR ,LPCWSTR ,LPWSTR ,LPDWORD ,DWORD); #define InternetCombineUrl WINELIB_NAME_AW(InternetCombineUrl) #define ICU_ESCAPE 0x80000000 #define ICU_USERNAME 0x40000000 #define ICU_NO_ENCODE 0x20000000 #define ICU_DECODE 0x10000000 #define ICU_NO_META 0x08000000 #define ICU_ENCODE_SPACES_ONLY 0x04000000 #define ICU_BROWSER_MODE 0x02000000 #define ICU_ENCODE_PERCENT 0x00001000 INTERNETAPI HINTERNET WINAPI InternetOpenA(LPCSTR ,DWORD ,LPCSTR ,LPCSTR ,DWORD); INTERNETAPI HINTERNET WINAPI InternetOpenW(LPCWSTR ,DWORD ,LPCWSTR ,LPCWSTR ,DWORD); #define InternetOpen WINELIB_NAME_AW(InternetOpen) #define INTERNET_OPEN_TYPE_PRECONFIG 0 #define INTERNET_OPEN_TYPE_DIRECT 1 #define INTERNET_OPEN_TYPE_PROXY 3 #define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 #define PRE_CONFIG_INTERNET_ACCESS INTERNET_OPEN_TYPE_PRECONFIG #define LOCAL_INTERNET_ACCESS INTERNET_OPEN_TYPE_DIRECT #define CERN_PROXY_INTERNET_ACCESS INTERNET_OPEN_TYPE_PROXY BOOLAPI InternetCloseHandle(HINTERNET); INTERNETAPI HINTERNET WINAPI InternetConnectA(HINTERNET ,LPCSTR ,INTERNET_PORT , LPCSTR ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR ); INTERNETAPI HINTERNET WINAPI InternetConnectW(HINTERNET ,LPCWSTR ,INTERNET_PORT , LPCWSTR ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR ); #define InternetConnect WINELIB_NAME_AW(InternetConnect) #define INTERNET_SERVICE_URL 0 #define INTERNET_SERVICE_FTP 1 #define INTERNET_SERVICE_GOPHER 2 #define INTERNET_SERVICE_HTTP 3 #define InternetConnectUrl(hInternet,lpszUrl,dwFlags,dwContext) \ InternetConnect(hInternet,\ lpszUrl,\ INTERNET_INVALID_PORT_NUMBER,\ NULL,\ NULL,\ INTERNET_SERVICE_URL,\ dwFlags,\ dwContext \ ) INTERNETAPI HINTERNET WINAPI InternetOpenUrlA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR); INTERNETAPI HINTERNET WINAPI InternetOpenUrlW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR); #define InternetOpenUrl WINELIB_NAME_AW(InternetOpenUrl) BOOLAPI InternetReadFile( HINTERNET ,LPVOID ,DWORD ,LPDWORD ); INTERNETAPI BOOL WINAPI InternetReadFileExA( HINTERNET ,LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR ); INTERNETAPI BOOL WINAPI InternetReadFileExW( HINTERNET ,LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR ); #define InternetReadFileEx WINELIB_NAME_AW(InternetReadFileEx) #define IRF_ASYNC WININET_API_FLAG_ASYNC #define IRF_SYNC WININET_API_FLAG_SYNC #define IRF_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT #define IRF_NO_WAIT 0x00000008 INTERNETAPI DWORD WINAPI InternetSetFilePointer(HINTERNET ,LONG ,PVOID ,DWORD ,DWORD_PTR); BOOLAPI InternetWriteFile(HINTERNET ,LPCVOID ,DWORD ,LPDWORD); BOOLAPI InternetQueryDataAvailable(HINTERNET ,LPDWORD ,DWORD ,DWORD_PTR); BOOLAPI InternetFindNextFileA(HINTERNET ,LPVOID); BOOLAPI InternetFindNextFileW(HINTERNET ,LPVOID); #define InternetFindNextFile WINELIB_NAME_AW(InternetFindNextFile) BOOLAPI InternetQueryOptionA(HINTERNET ,DWORD ,LPVOID ,LPDWORD); BOOLAPI InternetQueryOptionW(HINTERNET ,DWORD ,LPVOID ,LPDWORD); #define InternetQueryOption WINELIB_NAME_AW(InternetQueryOption) BOOLAPI InternetSetOptionA(HINTERNET ,DWORD ,LPVOID ,DWORD); BOOLAPI InternetSetOptionW(HINTERNET ,DWORD ,LPVOID ,DWORD); #define InternetSetOption WINELIB_NAME_AW(InternetSetOption) BOOLAPI InternetSetOptionExA(HINTERNET ,DWORD ,LPVOID ,DWORD ,DWORD); BOOLAPI InternetSetOptionExW(HINTERNET ,DWORD ,LPVOID ,DWORD ,DWORD); #define InternetSetOptionEx WINELIB_NAME_AW(InternetSetOptionEx) BOOLAPI InternetLockRequestFile(HINTERNET ,HANDLE *); BOOLAPI InternetUnlockRequestFile(HANDLE); #define ISO_GLOBAL 0x00000001 #define ISO_REGISTRY 0x00000002 #define ISO_VALID_FLAGS (ISO_GLOBAL | ISO_REGISTRY) #define INTERNET_OPTION_CALLBACK 1 #define INTERNET_OPTION_CONNECT_TIMEOUT 2 #define INTERNET_OPTION_CONNECT_RETRIES 3 #define INTERNET_OPTION_CONNECT_BACKOFF 4 #define INTERNET_OPTION_SEND_TIMEOUT 5 #define INTERNET_OPTION_CONTROL_SEND_TIMEOUT INTERNET_OPTION_SEND_TIMEOUT #define INTERNET_OPTION_RECEIVE_TIMEOUT 6 #define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT #define INTERNET_OPTION_DATA_SEND_TIMEOUT 7 #define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT 8 #define INTERNET_OPTION_HANDLE_TYPE 9 #define INTERNET_OPTION_LISTEN_TIMEOUT 11 #define INTERNET_OPTION_READ_BUFFER_SIZE 12 #define INTERNET_OPTION_WRITE_BUFFER_SIZE 13 #define INTERNET_OPTION_ASYNC_ID 15 #define INTERNET_OPTION_ASYNC_PRIORITY 16 #define INTERNET_OPTION_PARENT_HANDLE 21 #define INTERNET_OPTION_KEEP_CONNECTION 22 #define INTERNET_OPTION_REQUEST_FLAGS 23 #define INTERNET_OPTION_EXTENDED_ERROR 24 #define INTERNET_OPTION_OFFLINE_MODE 26 #define INTERNET_OPTION_CACHE_STREAM_HANDLE 27 #define INTERNET_OPTION_USERNAME 28 #define INTERNET_OPTION_PASSWORD 29 #define INTERNET_OPTION_ASYNC 30 #define INTERNET_OPTION_SECURITY_FLAGS 31 #define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32 #define INTERNET_OPTION_DATAFILE_NAME 33 #define INTERNET_OPTION_URL 34 #define INTERNET_OPTION_SECURITY_CERTIFICATE 35 #define INTERNET_OPTION_SECURITY_KEY_BITNESS 36 #define INTERNET_OPTION_REFRESH 37 #define INTERNET_OPTION_PROXY 38 #define INTERNET_OPTION_SETTINGS_CHANGED 39 #define INTERNET_OPTION_VERSION 40 #define INTERNET_OPTION_USER_AGENT 41 #define INTERNET_OPTION_END_BROWSER_SESSION 42 #define INTERNET_OPTION_PROXY_USERNAME 43 #define INTERNET_OPTION_PROXY_PASSWORD 44 #define INTERNET_OPTION_CONTEXT_VALUE 45 #define INTERNET_OPTION_CONNECT_LIMIT 46 #define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 47 #define INTERNET_OPTION_POLICY 48 #define INTERNET_OPTION_DISCONNECTED_TIMEOUT 49 #define INTERNET_OPTION_CONNECTED_STATE 50 #define INTERNET_OPTION_IDLE_STATE 51 #define INTERNET_OPTION_OFFLINE_SEMANTICS 52 #define INTERNET_OPTION_SECONDARY_CACHE_KEY 53 #define INTERNET_OPTION_CALLBACK_FILTER 54 #define INTERNET_OPTION_CONNECT_TIME 55 #define INTERNET_OPTION_SEND_THROUGHPUT 56 #define INTERNET_OPTION_RECEIVE_THROUGHPUT 57 #define INTERNET_OPTION_REQUEST_PRIORITY 58 #define INTERNET_OPTION_HTTP_VERSION 59 #define INTERNET_OPTION_RESET_URLCACHE_SESSION 60 #define INTERNET_OPTION_ERROR_MASK 62 #define INTERNET_OPTION_FROM_CACHE_TIMEOUT 63 #define INTERNET_OPTION_BYPASS_EDITED_ENTRY 64 #define INTERNET_OPTION_HTTP_DECODING 65 #define INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO 67 #define INTERNET_OPTION_CODEPAGE 68 #define INTERNET_OPTION_CACHE_TIMESTAMPS 69 #define INTERNET_OPTION_DISABLE_AUTODIAL 70 #define INTERNET_OPTION_MAX_CONNS_PER_SERVER 73 #define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 74 #define INTERNET_OPTION_PER_CONNECTION_OPTION 75 #define INTERNET_OPTION_DIGEST_AUTH_UNLOAD 76 #define INTERNET_OPTION_IGNORE_OFFLINE 77 #define INTERNET_OPTION_IDENTITY 78 #define INTERNET_OPTION_REMOVE_IDENTITY 79 #define INTERNET_OPTION_ALTER_IDENTITY 80 #define INTERNET_OPTION_SUPPRESS_BEHAVIOR 81 #define INTERNET_OPTION_AUTODIAL_MODE 82 #define INTERNET_OPTION_AUTODIAL_CONNECTION 83 #define INTERNET_OPTION_CLIENT_CERT_CONTEXT 84 #define INTERNET_OPTION_AUTH_FLAGS 85 #define INTERNET_OPTION_COOKIES_3RD_PARTY 86 #define INTERNET_OPTION_DISABLE_PASSPORT_AUTH 87 #define INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY 88 #define INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT 89 #define INTERNET_OPTION_ENABLE_PASSPORT_AUTH 90 #define INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS 91 #define INTERNET_OPTION_ACTIVATE_WORKER_THREADS 92 #define INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS 93 #define INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH 94 #define INTERNET_OPTION_PROXY_SETTINGS_CHANGED 95 #define INTERNET_OPTION_DATAFILE_EXT 96 #define INTERNET_OPTION_CODEPAGE_PATH 100 #define INTERNET_OPTION_CODEPAGE_EXTRA 101 #define INTERNET_OPTION_IDN 102 #define INTERNET_OPTION_MAX_CONNS_PER_PROXY 103 #define INTERNET_OPTION_SUPPRESS_SERVER_AUTH 104 #define INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT 105 #define INTERNET_FIRST_OPTION INTERNET_OPTION_CALLBACK #define INTERNET_LAST_OPTION INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT #define INTERNET_PRIORITY_FOREGROUND 1000 #define INTERNET_HANDLE_TYPE_INTERNET 1 #define INTERNET_HANDLE_TYPE_CONNECT_FTP 2 #define INTERNET_HANDLE_TYPE_CONNECT_GOPHER 3 #define INTERNET_HANDLE_TYPE_CONNECT_HTTP 4 #define INTERNET_HANDLE_TYPE_FTP_FIND 5 #define INTERNET_HANDLE_TYPE_FTP_FIND_HTML 6 #define INTERNET_HANDLE_TYPE_FTP_FILE 7 #define INTERNET_HANDLE_TYPE_FTP_FILE_HTML 8 #define INTERNET_HANDLE_TYPE_GOPHER_FIND 9 #define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML 10 #define INTERNET_HANDLE_TYPE_GOPHER_FILE 11 #define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML 12 #define INTERNET_HANDLE_TYPE_HTTP_REQUEST 13 #define SECURITY_FLAG_SECURE 0x00000001 #define SECURITY_FLAG_STRENGTH_WEAK 0x10000000 #define SECURITY_FLAG_STRENGTH_MEDIUM 0x40000000 #define SECURITY_FLAG_STRENGTH_STRONG 0x20000000 #define SECURITY_FLAG_UNKNOWNBIT 0x80000000 #define SECURITY_FLAG_NORMALBITNESS SECURITY_FLAG_STRENGTH_WEAK #define SECURITY_FLAG_SSL 0x00000002 #define SECURITY_FLAG_SSL3 0x00000004 #define SECURITY_FLAG_PCT 0x00000008 #define SECURITY_FLAG_PCT4 0x00000010 #define SECURITY_FLAG_IETFSSL4 0x00000020 #define SECURITY_FLAG_40BIT SECURITY_FLAG_STRENGTH_WEAK #define SECURITY_FLAG_128BIT SECURITY_FLAG_STRENGTH_STRONG #define SECURITY_FLAG_56BIT SECURITY_FLAG_STRENGTH_MEDIUM #define SECURITY_FLAG_IGNORE_REVOCATION 0x00000080 #define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x00000100 #define SECURITY_FLAG_IGNORE_WRONG_USAGE 0x00000200 #define SECURITY_FLAG_IGNORE_CERT_CN_INVALID INTERNET_FLAG_IGNORE_CERT_CN_INVALID #define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID INTERNET_FLAG_IGNORE_CERT_DATE_INVALID #define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS #define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP #define SECURITY_SET_MASK (SECURITY_FLAG_IGNORE_REVOCATION |\ SECURITY_FLAG_IGNORE_UNKNOWN_CA |\ SECURITY_FLAG_IGNORE_CERT_CN_INVALID |\ SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |\ SECURITY_FLAG_IGNORE_WRONG_USAGE) BOOLAPI InternetGetLastResponseInfoA(LPDWORD ,LPSTR ,LPDWORD); BOOLAPI InternetGetLastResponseInfoW(LPDWORD ,LPWSTR ,LPDWORD); #define InternetGetLastResponseInfo WINELIB_NAME_AW(InternetGetLastResponseInfo) typedef VOID (CALLBACK *INTERNET_STATUS_CALLBACK)(HINTERNET ,DWORD_PTR ,DWORD , LPVOID ,DWORD); typedef INTERNET_STATUS_CALLBACK * LPINTERNET_STATUS_CALLBACK; INTERNETAPI INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackA(HINTERNET ,INTERNET_STATUS_CALLBACK); INTERNETAPI INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackW(HINTERNET ,INTERNET_STATUS_CALLBACK); #define InternetSetStatusCallback WINELIB_NAME_AW(InternetSetStatusCallback) #define INTERNET_STATUS_RESOLVING_NAME 10 #define INTERNET_STATUS_NAME_RESOLVED 11 #define INTERNET_STATUS_CONNECTING_TO_SERVER 20 #define INTERNET_STATUS_CONNECTED_TO_SERVER 21 #define INTERNET_STATUS_SENDING_REQUEST 30 #define INTERNET_STATUS_REQUEST_SENT 31 #define INTERNET_STATUS_RECEIVING_RESPONSE 40 #define INTERNET_STATUS_RESPONSE_RECEIVED 41 #define INTERNET_STATUS_CTL_RESPONSE_RECEIVED 42 #define INTERNET_STATUS_PREFETCH 43 #define INTERNET_STATUS_CLOSING_CONNECTION 50 #define INTERNET_STATUS_CONNECTION_CLOSED 51 #define INTERNET_STATUS_HANDLE_CREATED 60 #define INTERNET_STATUS_HANDLE_CLOSING 70 #define INTERNET_STATUS_DETECTING_PROXY 80 #define INTERNET_STATUS_REQUEST_COMPLETE 100 #define INTERNET_STATUS_REDIRECT 110 #define INTERNET_STATUS_INTERMEDIATE_RESPONSE 120 #define INTERNET_STATUS_USER_INPUT_REQUIRED 140 #define INTERNET_STATUS_STATE_CHANGE 200 #define INTERNET_STATUS_COOKIE_SENT 320 #define INTERNET_STATUS_COOKIE_RECEIVED 321 #define INTERNET_STATUS_PRIVACY_IMPACTED 324 #define INTERNET_STATUS_P3P_HEADER 325 #define INTERNET_STATUS_P3P_POLICYREF 326 #define INTERNET_STATUS_COOKIE_HISTORY 327 #define INTERNET_STATE_CONNECTED 0x00000001 #define INTERNET_STATE_DISCONNECTED 0x00000002 #define INTERNET_STATE_DISCONNECTED_BY_USER 0x00000010 #define INTERNET_STATE_IDLE 0x00000100 #define INTERNET_STATE_BUSY 0x00000200 #define INTERNET_INVALID_STATUS_CALLBACK ((INTERNET_STATUS_CALLBACK)(-1)) #define FTP_TRANSFER_TYPE_UNKNOWN 0x00000000 #define FTP_TRANSFER_TYPE_ASCII 0x00000001 #define FTP_TRANSFER_TYPE_BINARY 0x00000002 #define FTP_TRANSFER_TYPE_MASK (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY) BOOLAPI FtpCommandA(HINTERNET, BOOL, DWORD, LPCSTR, DWORD_PTR, HINTERNET *); BOOLAPI FtpCommandW(HINTERNET, BOOL, DWORD, LPCWSTR, DWORD_PTR, HINTERNET *); #define FtpCommand WINELIB_NAME_AW(FtpCommand) INTERNETAPI HINTERNET WINAPI FtpFindFirstFileA(HINTERNET ,LPCSTR , LPWIN32_FIND_DATAA ,DWORD ,DWORD_PTR); INTERNETAPI HINTERNET WINAPI FtpFindFirstFileW(HINTERNET ,LPCWSTR , LPWIN32_FIND_DATAW ,DWORD ,DWORD_PTR); #define FtpFindFirstFile WINELIB_NAME_AW(FtpFindFirstFile) BOOLAPI FtpGetFileA(HINTERNET ,LPCSTR ,LPCSTR ,BOOL ,DWORD ,DWORD ,DWORD_PTR); BOOLAPI FtpGetFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,BOOL ,DWORD ,DWORD ,DWORD_PTR); #define FtpGetFile WINELIB_NAME_AW(FtpGetFile) DWORD WINAPI FtpGetFileSize(HINTERNET, LPDWORD); BOOLAPI FtpPutFileA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD_PTR); BOOLAPI FtpPutFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD_PTR); #define FtpPutFile WINELIB_NAME_AW(FtpPutFile) BOOLAPI FtpDeleteFileA(HINTERNET ,LPCSTR); BOOLAPI FtpDeleteFileW(HINTERNET ,LPCWSTR); #define FtpDeleteFile WINELIB_NAME_AW(FtpDeleteFile) BOOLAPI FtpRenameFileA(HINTERNET ,LPCSTR ,LPCSTR); BOOLAPI FtpRenameFileW(HINTERNET ,LPCWSTR ,LPCWSTR); #define FtpRenameFile WINELIB_NAME_AW(FtpRenameFile) INTERNETAPI HINTERNET WINAPI FtpOpenFileA(HINTERNET ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR); INTERNETAPI HINTERNET WINAPI FtpOpenFileW(HINTERNET ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR); #define FtpOpenFile WINELIB_NAME_AW(FtpOpenFile) BOOLAPI FtpCreateDirectoryA(HINTERNET ,LPCSTR); BOOLAPI FtpCreateDirectoryW(HINTERNET ,LPCWSTR); #define FtpCreateDirectory WINELIB_NAME_AW(FtpCreateDirectory) BOOLAPI FtpRemoveDirectoryA(HINTERNET ,LPCSTR); BOOLAPI FtpRemoveDirectoryW(HINTERNET ,LPCWSTR); #define FtpRemoveDirectory WINELIB_NAME_AW(FtpRemoveDirectory) BOOLAPI FtpSetCurrentDirectoryA(HINTERNET ,LPCSTR); BOOLAPI FtpSetCurrentDirectoryW(HINTERNET ,LPCWSTR); #define FtpSetCurrentDirectory WINELIB_NAME_AW(FtpSetCurrentDirectory) BOOLAPI FtpGetCurrentDirectoryA(HINTERNET ,LPSTR ,LPDWORD); BOOLAPI FtpGetCurrentDirectoryW(HINTERNET ,LPWSTR ,LPDWORD); #define FtpGetCurrentDirectory WINELIB_NAME_AW(FtpGetCurrentDirectory) #define MAX_GOPHER_DISPLAY_TEXT 128 #define MAX_GOPHER_SELECTOR_TEXT 256 #define MAX_GOPHER_HOST_NAME INTERNET_MAX_HOST_NAME_LENGTH #define MAX_GOPHER_LOCATOR_LENGTH (1 \ + MAX_GOPHER_DISPLAY_TEXT \ + 1 \ + MAX_GOPHER_SELECTOR_TEXT \ + 1 \ + MAX_GOPHER_HOST_NAME \ + 1 \ + INTERNET_MAX_PORT_NUMBER_LENGTH \ + 1 \ + 1 \ + 2 \ ) typedef struct { CHAR DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1]; DWORD GopherType; DWORD SizeLow; DWORD SizeHigh; FILETIME LastModificationTime; CHAR Locator[MAX_GOPHER_LOCATOR_LENGTH + 1]; } GOPHER_FIND_DATAA,* LPGOPHER_FIND_DATAA; typedef struct { WCHAR DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1]; DWORD GopherType; DWORD SizeLow; DWORD SizeHigh; FILETIME LastModificationTime; WCHAR Locator[MAX_GOPHER_LOCATOR_LENGTH + 1]; } GOPHER_FIND_DATAW,* LPGOPHER_FIND_DATAW; DECL_WINELIB_TYPE_AW(GOPHER_FIND_DATA) DECL_WINELIB_TYPE_AW(LPGOPHER_FIND_DATA) #define GOPHER_TYPE_TEXT_FILE 0x00000001 #define GOPHER_TYPE_DIRECTORY 0x00000002 #define GOPHER_TYPE_CSO 0x00000004 #define GOPHER_TYPE_ERROR 0x00000008 #define GOPHER_TYPE_MAC_BINHEX 0x00000010 #define GOPHER_TYPE_DOS_ARCHIVE 0x00000020 #define GOPHER_TYPE_UNIX_UUENCODED 0x00000040 #define GOPHER_TYPE_INDEX_SERVER 0x00000080 #define GOPHER_TYPE_TELNET 0x00000100 #define GOPHER_TYPE_BINARY 0x00000200 #define GOPHER_TYPE_REDUNDANT 0x00000400 #define GOPHER_TYPE_TN3270 0x00000800 #define GOPHER_TYPE_GIF 0x00001000 #define GOPHER_TYPE_IMAGE 0x00002000 #define GOPHER_TYPE_BITMAP 0x00004000 #define GOPHER_TYPE_MOVIE 0x00008000 #define GOPHER_TYPE_SOUND 0x00010000 #define GOPHER_TYPE_HTML 0x00020000 #define GOPHER_TYPE_PDF 0x00040000 #define GOPHER_TYPE_CALENDAR 0x00080000 #define GOPHER_TYPE_INLINE 0x00100000 #define GOPHER_TYPE_UNKNOWN 0x20000000 #define GOPHER_TYPE_ASK 0x40000000 #define GOPHER_TYPE_GOPHER_PLUS 0x80000000 #define IS_GOPHER_FILE(type) (BOOL)(((type) & GOPHER_TYPE_FILE_MASK) != 0) #define IS_GOPHER_DIRECTORY(type) (BOOL)(((type) & GOPHER_TYPE_DIRECTORY) != 0) #define IS_GOPHER_PHONE_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_CSO) != 0) #define IS_GOPHER_ERROR(type) (BOOL)(((type) & GOPHER_TYPE_ERROR) != 0) #define IS_GOPHER_INDEX_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_INDEX_SERVER) != 0) #define IS_GOPHER_TELNET_SESSION(type) (BOOL)(((type) & GOPHER_TYPE_TELNET) != 0) #define IS_GOPHER_BACKUP_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_REDUNDANT) != 0) #define IS_GOPHER_TN3270_SESSION(type) (BOOL)(((type) & GOPHER_TYPE_TN3270) != 0) #define IS_GOPHER_ASK(type) (BOOL)(((type) & GOPHER_TYPE_ASK) != 0) #define IS_GOPHER_PLUS(type) (BOOL)(((type) & GOPHER_TYPE_GOPHER_PLUS) != 0) #define IS_GOPHER_TYPE_KNOWN(type) (BOOL)(!((type) & GOPHER_TYPE_UNKNOWN)) #define GOPHER_TYPE_FILE_MASK (GOPHER_TYPE_TEXT_FILE \ | GOPHER_TYPE_MAC_BINHEX \ | GOPHER_TYPE_DOS_ARCHIVE \ | GOPHER_TYPE_UNIX_UUENCODED \ | GOPHER_TYPE_BINARY \ | GOPHER_TYPE_GIF \ | GOPHER_TYPE_IMAGE \ | GOPHER_TYPE_BITMAP \ | GOPHER_TYPE_MOVIE \ | GOPHER_TYPE_SOUND \ | GOPHER_TYPE_HTML \ | GOPHER_TYPE_PDF \ | GOPHER_TYPE_CALENDAR \ | GOPHER_TYPE_INLINE \ ) typedef struct { LPCSTR Comment; LPCSTR EmailAddress; } GOPHER_ADMIN_ATTRIBUTE_TYPEA,* LPGOPHER_ADMIN_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR Comment; LPCWSTR EmailAddress; } GOPHER_ADMIN_ATTRIBUTE_TYPEW,* LPGOPHER_ADMIN_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_ADMIN_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_ADMIN_ATTRIBUTE_TYPE) typedef struct { FILETIME DateAndTime; } GOPHER_MOD_DATE_ATTRIBUTE_TYPE,* LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE; typedef struct { DWORD Ttl; } GOPHER_TTL_ATTRIBUTE_TYPE,* LPGOPHER_TTL_ATTRIBUTE_TYPE; typedef struct { INT Score; } GOPHER_SCORE_ATTRIBUTE_TYPE,* LPGOPHER_SCORE_ATTRIBUTE_TYPE; typedef struct { INT LowerBound; INT UpperBound; } GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE,* LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE; typedef struct { LPCSTR Site; } GOPHER_SITE_ATTRIBUTE_TYPEA,* LPGOPHER_SITE_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR Site; } GOPHER_SITE_ATTRIBUTE_TYPEW,* LPGOPHER_SITE_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_SITE_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_SITE_ATTRIBUTE_TYPE) typedef struct { LPCSTR Organization; } GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA,* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR Organization; } GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW,* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_ORGANIZATION_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE) typedef struct { LPCSTR Location; } GOPHER_LOCATION_ATTRIBUTE_TYPEA,* LPGOPHER_LOCATION_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR Location; } GOPHER_LOCATION_ATTRIBUTE_TYPEW,* LPGOPHER_LOCATION_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_LOCATION_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_LOCATION_ATTRIBUTE_TYPE) typedef struct { INT DegreesNorth; INT MinutesNorth; INT SecondsNorth; INT DegreesEast; INT MinutesEast; INT SecondsEast; } GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE,* LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE; typedef struct { INT Zone; } GOPHER_TIMEZONE_ATTRIBUTE_TYPE,* LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE; typedef struct { LPCSTR Provider; } GOPHER_PROVIDER_ATTRIBUTE_TYPEA,* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR Provider; } GOPHER_PROVIDER_ATTRIBUTE_TYPEW,* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_PROVIDER_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_PROVIDER_ATTRIBUTE_TYPE) typedef struct { LPCSTR Version; } GOPHER_VERSION_ATTRIBUTE_TYPEA,* LPGOPHER_VERSION_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR Version; } GOPHER_VERSION_ATTRIBUTE_TYPEW,* LPGOPHER_VERSION_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_VERSION_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_VERSION_ATTRIBUTE_TYPE) typedef struct { LPCSTR ShortAbstract; LPCSTR AbstractFile; } GOPHER_ABSTRACT_ATTRIBUTE_TYPEA,* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR ShortAbstract; LPCWSTR AbstractFile; } GOPHER_ABSTRACT_ATTRIBUTE_TYPEW,* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_ABSTRACT_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE) typedef struct { LPCSTR ContentType; LPCSTR Language; DWORD Size; } GOPHER_VIEW_ATTRIBUTE_TYPEA,* LPGOPHER_VIEW_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR ContentType; LPCWSTR Language; DWORD Size; } GOPHER_VIEW_ATTRIBUTE_TYPEW,* LPGOPHER_VIEW_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_VIEW_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_VIEW_ATTRIBUTE_TYPE) typedef struct { BOOL TreeWalk; } GOPHER_VERONICA_ATTRIBUTE_TYPE,* LPGOPHER_VERONICA_ATTRIBUTE_TYPE; typedef struct { LPCSTR QuestionType; LPCSTR QuestionText; } GOPHER_ASK_ATTRIBUTE_TYPEA,* LPGOPHER_ASK_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR QuestionType; LPCWSTR QuestionText; } GOPHER_ASK_ATTRIBUTE_TYPEW,* LPGOPHER_ASK_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_ASK_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_ASK_ATTRIBUTE_TYPE) typedef struct { LPCSTR Text; } GOPHER_UNKNOWN_ATTRIBUTE_TYPEA,* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA; typedef struct { LPCWSTR Text; } GOPHER_UNKNOWN_ATTRIBUTE_TYPEW,* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_UNKNOWN_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE) typedef struct { DWORD CategoryId; DWORD AttributeId; union { GOPHER_ADMIN_ATTRIBUTE_TYPEA Admin; GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate; GOPHER_TTL_ATTRIBUTE_TYPE Ttl; GOPHER_SCORE_ATTRIBUTE_TYPE Score; GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange; GOPHER_SITE_ATTRIBUTE_TYPEA Site; GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA Organization; GOPHER_LOCATION_ATTRIBUTE_TYPEA Location; GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation; GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone; GOPHER_PROVIDER_ATTRIBUTE_TYPEA Provider; GOPHER_VERSION_ATTRIBUTE_TYPEA Version; GOPHER_ABSTRACT_ATTRIBUTE_TYPEA Abstract; GOPHER_VIEW_ATTRIBUTE_TYPEA View; GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica; GOPHER_ASK_ATTRIBUTE_TYPEA Ask; GOPHER_UNKNOWN_ATTRIBUTE_TYPEA Unknown; } AttributeType; } GOPHER_ATTRIBUTE_TYPEA, *LPGOPHER_ATTRIBUTE_TYPEA; typedef struct { DWORD CategoryId; DWORD AttributeId; union { GOPHER_ADMIN_ATTRIBUTE_TYPEW Admin; GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate; GOPHER_TTL_ATTRIBUTE_TYPE Ttl; GOPHER_SCORE_ATTRIBUTE_TYPE Score; GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange; GOPHER_SITE_ATTRIBUTE_TYPEW Site; GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW Organization; GOPHER_LOCATION_ATTRIBUTE_TYPEW Location; GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation; GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone; GOPHER_PROVIDER_ATTRIBUTE_TYPEW Provider; GOPHER_VERSION_ATTRIBUTE_TYPEW Version; GOPHER_ABSTRACT_ATTRIBUTE_TYPEW Abstract; GOPHER_VIEW_ATTRIBUTE_TYPEW View; GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica; GOPHER_ASK_ATTRIBUTE_TYPEW Ask; GOPHER_UNKNOWN_ATTRIBUTE_TYPEW Unknown; } AttributeType; } GOPHER_ATTRIBUTE_TYPEW, *LPGOPHER_ATTRIBUTE_TYPEW; DECL_WINELIB_TYPE_AW(GOPHER_ATTRIBUTE_TYPE) DECL_WINELIB_TYPE_AW(LPGOPHER_ATTRIBUTE_TYPE) #define MAX_GOPHER_CATEGORY_NAME 128 #define MAX_GOPHER_ATTRIBUTE_NAME 128 #define MIN_GOPHER_ATTRIBUTE_LENGTH 256 #define GOPHER_INFO_CATEGORY TEXT("+INFO") #define GOPHER_ADMIN_CATEGORY TEXT("+ADMIN") #define GOPHER_VIEWS_CATEGORY TEXT("+VIEWS") #define GOPHER_ABSTRACT_CATEGORY TEXT("+ABSTRACT") #define GOPHER_VERONICA_CATEGORY TEXT("+VERONICA") #define GOPHER_ADMIN_ATTRIBUTE TEXT("Admin") #define GOPHER_MOD_DATE_ATTRIBUTE TEXT("Mod-Date") #define GOPHER_TTL_ATTRIBUTE TEXT("TTL") #define GOPHER_SCORE_ATTRIBUTE TEXT("Score") #define GOPHER_RANGE_ATTRIBUTE TEXT("Score-range") #define GOPHER_SITE_ATTRIBUTE TEXT("Site") #define GOPHER_ORG_ATTRIBUTE TEXT("Org") #define GOPHER_LOCATION_ATTRIBUTE TEXT("Loc") #define GOPHER_GEOG_ATTRIBUTE TEXT("Geog") #define GOPHER_TIMEZONE_ATTRIBUTE TEXT("TZ") #define GOPHER_PROVIDER_ATTRIBUTE TEXT("Provider") #define GOPHER_VERSION_ATTRIBUTE TEXT("Version") #define GOPHER_ABSTRACT_ATTRIBUTE TEXT("Abstract") #define GOPHER_VIEW_ATTRIBUTE TEXT("View") #define GOPHER_TREEWALK_ATTRIBUTE TEXT("treewalk") #define GOPHER_ATTRIBUTE_ID_BASE 0xabcccc00 #define GOPHER_CATEGORY_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE + 1) #define GOPHER_CATEGORY_ID_INFO (GOPHER_ATTRIBUTE_ID_BASE + 2) #define GOPHER_CATEGORY_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE + 3) #define GOPHER_CATEGORY_ID_VIEWS (GOPHER_ATTRIBUTE_ID_BASE + 4) #define GOPHER_CATEGORY_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE + 5) #define GOPHER_CATEGORY_ID_VERONICA (GOPHER_ATTRIBUTE_ID_BASE + 6) #define GOPHER_CATEGORY_ID_ASK (GOPHER_ATTRIBUTE_ID_BASE + 7) #define GOPHER_CATEGORY_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE + 8) #define GOPHER_ATTRIBUTE_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE + 9) #define GOPHER_ATTRIBUTE_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE + 10) #define GOPHER_ATTRIBUTE_ID_MOD_DATE (GOPHER_ATTRIBUTE_ID_BASE + 11) #define GOPHER_ATTRIBUTE_ID_TTL (GOPHER_ATTRIBUTE_ID_BASE + 12) #define GOPHER_ATTRIBUTE_ID_SCORE (GOPHER_ATTRIBUTE_ID_BASE + 13) #define GOPHER_ATTRIBUTE_ID_RANGE (GOPHER_ATTRIBUTE_ID_BASE + 14) #define GOPHER_ATTRIBUTE_ID_SITE (GOPHER_ATTRIBUTE_ID_BASE + 15) #define GOPHER_ATTRIBUTE_ID_ORG (GOPHER_ATTRIBUTE_ID_BASE + 16) #define GOPHER_ATTRIBUTE_ID_LOCATION (GOPHER_ATTRIBUTE_ID_BASE + 17) #define GOPHER_ATTRIBUTE_ID_GEOG (GOPHER_ATTRIBUTE_ID_BASE + 18) #define GOPHER_ATTRIBUTE_ID_TIMEZONE (GOPHER_ATTRIBUTE_ID_BASE + 19) #define GOPHER_ATTRIBUTE_ID_PROVIDER (GOPHER_ATTRIBUTE_ID_BASE + 20) #define GOPHER_ATTRIBUTE_ID_VERSION (GOPHER_ATTRIBUTE_ID_BASE + 21) #define GOPHER_ATTRIBUTE_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE + 22) #define GOPHER_ATTRIBUTE_ID_VIEW (GOPHER_ATTRIBUTE_ID_BASE + 23) #define GOPHER_ATTRIBUTE_ID_TREEWALK (GOPHER_ATTRIBUTE_ID_BASE + 24) #define GOPHER_ATTRIBUTE_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE + 25) BOOLAPI GopherCreateLocatorA(LPCSTR ,INTERNET_PORT ,LPCSTR , LPCSTR ,DWORD ,LPSTR ,LPDWORD); BOOLAPI GopherCreateLocatorW(LPCWSTR ,INTERNET_PORT ,LPCWSTR , LPCWSTR ,DWORD ,LPWSTR ,LPDWORD); #define GopherCreateLocator WINELIB_NAME_AW(GopherCreateLocator) BOOLAPI GopherGetLocatorTypeA(LPCSTR ,LPDWORD); BOOLAPI GopherGetLocatorTypeW(LPCWSTR ,LPDWORD); #define GopherGetLocatorType WINELIB_NAME_AW(GopherGetLocatorType) INTERNETAPI HINTERNET WINAPI GopherFindFirstFileA(HINTERNET ,LPCSTR , LPCSTR ,LPGOPHER_FIND_DATAA ,DWORD ,DWORD_PTR); INTERNETAPI HINTERNET WINAPI GopherFindFirstFileW(HINTERNET ,LPCWSTR , LPCWSTR ,LPGOPHER_FIND_DATAW ,DWORD ,DWORD_PTR); #define GopherFindFirstFile WINELIB_NAME_AW(GopherFindFirstFile) INTERNETAPI HINTERNET WINAPI GopherOpenFileA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD_PTR); INTERNETAPI HINTERNET WINAPI GopherOpenFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD_PTR); #define GopherOpenFile WINELIB_NAME_AW(GopherOpenFile) typedef BOOL (CALLBACK *GOPHER_ATTRIBUTE_ENUMERATORA)(LPGOPHER_ATTRIBUTE_TYPEA ,DWORD); typedef BOOL (CALLBACK *GOPHER_ATTRIBUTE_ENUMERATORW)(LPGOPHER_ATTRIBUTE_TYPEW ,DWORD); DECL_WINELIB_TYPE_AW(GOPHER_ATTRIBUTE_ENUMERATOR) BOOLAPI GopherGetAttributeA(HINTERNET ,LPCSTR ,LPCSTR ,LPBYTE , DWORD ,LPDWORD ,GOPHER_ATTRIBUTE_ENUMERATORA ,DWORD_PTR); BOOLAPI GopherGetAttributeW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPBYTE , DWORD ,LPDWORD ,GOPHER_ATTRIBUTE_ENUMERATORW ,DWORD_PTR); #define GopherGetAttribute WINELIB_NAME_AW(GopherGetAttribute) #define HTTP_MAJOR_VERSION 1 #define HTTP_MINOR_VERSION 0 #define HTTP_VERSION TEXT("HTTP/1.0") #define HTTP_QUERY_MIME_VERSION 0 #define HTTP_QUERY_CONTENT_TYPE 1 #define HTTP_QUERY_CONTENT_TRANSFER_ENCODING 2 #define HTTP_QUERY_CONTENT_ID 3 #define HTTP_QUERY_CONTENT_DESCRIPTION 4 #define HTTP_QUERY_CONTENT_LENGTH 5 #define HTTP_QUERY_CONTENT_LANGUAGE 6 #define HTTP_QUERY_ALLOW 7 #define HTTP_QUERY_PUBLIC 8 #define HTTP_QUERY_DATE 9 #define HTTP_QUERY_EXPIRES 10 #define HTTP_QUERY_LAST_MODIFIED 11 #define HTTP_QUERY_MESSAGE_ID 12 #define HTTP_QUERY_URI 13 #define HTTP_QUERY_DERIVED_FROM 14 #define HTTP_QUERY_COST 15 #define HTTP_QUERY_LINK 16 #define HTTP_QUERY_PRAGMA 17 #define HTTP_QUERY_VERSION 18 #define HTTP_QUERY_STATUS_CODE 19 #define HTTP_QUERY_STATUS_TEXT 20 #define HTTP_QUERY_RAW_HEADERS 21 #define HTTP_QUERY_RAW_HEADERS_CRLF 22 #define HTTP_QUERY_CONNECTION 23 #define HTTP_QUERY_ACCEPT 24 #define HTTP_QUERY_ACCEPT_CHARSET 25 #define HTTP_QUERY_ACCEPT_ENCODING 26 #define HTTP_QUERY_ACCEPT_LANGUAGE 27 #define HTTP_QUERY_AUTHORIZATION 28 #define HTTP_QUERY_CONTENT_ENCODING 29 #define HTTP_QUERY_FORWARDED 30 #define HTTP_QUERY_FROM 31 #define HTTP_QUERY_IF_MODIFIED_SINCE 32 #define HTTP_QUERY_LOCATION 33 #define HTTP_QUERY_ORIG_URI 34 #define HTTP_QUERY_REFERER 35 #define HTTP_QUERY_RETRY_AFTER 36 #define HTTP_QUERY_SERVER 37 #define HTTP_QUERY_TITLE 38 #define HTTP_QUERY_USER_AGENT 39 #define HTTP_QUERY_WWW_AUTHENTICATE 40 #define HTTP_QUERY_PROXY_AUTHENTICATE 41 #define HTTP_QUERY_ACCEPT_RANGES 42 #define HTTP_QUERY_SET_COOKIE 43 #define HTTP_QUERY_COOKIE 44 #define HTTP_QUERY_REQUEST_METHOD 45 #define HTTP_QUERY_REFRESH 46 #define HTTP_QUERY_CONTENT_DISPOSITION 47 #define HTTP_QUERY_AGE 48 #define HTTP_QUERY_CACHE_CONTROL 49 #define HTTP_QUERY_CONTENT_BASE 50 #define HTTP_QUERY_CONTENT_LOCATION 51 #define HTTP_QUERY_CONTENT_MD5 52 #define HTTP_QUERY_CONTENT_RANGE 53 #define HTTP_QUERY_ETAG 54 #define HTTP_QUERY_HOST 55 #define HTTP_QUERY_IF_MATCH 56 #define HTTP_QUERY_IF_NONE_MATCH 57 #define HTTP_QUERY_IF_RANGE 58 #define HTTP_QUERY_IF_UNMODIFIED_SINCE 59 #define HTTP_QUERY_MAX_FORWARDS 60 #define HTTP_QUERY_PROXY_AUTHORIZATION 61 #define HTTP_QUERY_RANGE 62 #define HTTP_QUERY_TRANSFER_ENCODING 63 #define HTTP_QUERY_UPGRADE 64 #define HTTP_QUERY_VARY 65 #define HTTP_QUERY_VIA 66 #define HTTP_QUERY_WARNING 67 #define HTTP_QUERY_EXPECT 68 #define HTTP_QUERY_PROXY_CONNECTION 69 #define HTTP_QUERY_UNLESS_MODIFIED_SINCE 70 #define HTTP_QUERY_ECHO_REQUEST 71 #define HTTP_QUERY_ECHO_REPLY 72 #define HTTP_QUERY_ECHO_HEADERS 73 #define HTTP_QUERY_ECHO_HEADERS_CRLF 74 #define HTTP_QUERY_PROXY_SUPPORT 75 #define HTTP_QUERY_AUTHENTICATION_INFO 76 #define HTTP_QUERY_PASSPORT_URLS 77 #define HTTP_QUERY_PASSPORT_CONFIG 78 #define HTTP_QUERY_MAX 78 #define HTTP_QUERY_CUSTOM 65535 #define HTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000 #define HTTP_QUERY_FLAG_SYSTEMTIME 0x40000000 #define HTTP_QUERY_FLAG_NUMBER 0x20000000 #define HTTP_QUERY_FLAG_COALESCE 0x10000000 #define HTTP_QUERY_MODIFIER_FLAGS_MASK (HTTP_QUERY_FLAG_REQUEST_HEADERS \ | HTTP_QUERY_FLAG_SYSTEMTIME \ | HTTP_QUERY_FLAG_NUMBER \ | HTTP_QUERY_FLAG_COALESCE \ ) #define HTTP_QUERY_HEADER_MASK (~HTTP_QUERY_MODIFIER_FLAGS_MASK) #define HTTP_STATUS_CONTINUE 100 #define HTTP_STATUS_SWITCH_PROTOCOLS 101 #define HTTP_STATUS_OK 200 #define HTTP_STATUS_CREATED 201 #define HTTP_STATUS_ACCEPTED 202 #define HTTP_STATUS_PARTIAL 203 #define HTTP_STATUS_NO_CONTENT 204 #define HTTP_STATUS_RESET_CONTENT 205 #define HTTP_STATUS_PARTIAL_CONTENT 206 #define HTTP_STATUS_AMBIGUOUS 300 #define HTTP_STATUS_MOVED 301 #define HTTP_STATUS_REDIRECT 302 #define HTTP_STATUS_REDIRECT_METHOD 303 #define HTTP_STATUS_NOT_MODIFIED 304 #define HTTP_STATUS_USE_PROXY 305 #define HTTP_STATUS_REDIRECT_KEEP_VERB 307 #define HTTP_STATUS_BAD_REQUEST 400 #define HTTP_STATUS_DENIED 401 #define HTTP_STATUS_PAYMENT_REQ 402 #define HTTP_STATUS_FORBIDDEN 403 #define HTTP_STATUS_NOT_FOUND 404 #define HTTP_STATUS_BAD_METHOD 405 #define HTTP_STATUS_NONE_ACCEPTABLE 406 #define HTTP_STATUS_PROXY_AUTH_REQ 407 #define HTTP_STATUS_REQUEST_TIMEOUT 408 #define HTTP_STATUS_CONFLICT 409 #define HTTP_STATUS_GONE 410 #define HTTP_STATUS_LENGTH_REQUIRED 411 #define HTTP_STATUS_PRECOND_FAILED 412 #define HTTP_STATUS_REQUEST_TOO_LARGE 413 #define HTTP_STATUS_URI_TOO_LONG 414 #define HTTP_STATUS_UNSUPPORTED_MEDIA 415 #define HTTP_STATUS_SERVER_ERROR 500 #define HTTP_STATUS_NOT_SUPPORTED 501 #define HTTP_STATUS_BAD_GATEWAY 502 #define HTTP_STATUS_SERVICE_UNAVAIL 503 #define HTTP_STATUS_GATEWAY_TIMEOUT 504 #define HTTP_STATUS_VERSION_NOT_SUP 505 #define HTTP_STATUS_FIRST HTTP_STATUS_CONTINUE #define HTTP_STATUS_LAST HTTP_STATUS_VERSION_NOT_SUP INTERNETAPI HINTERNET WINAPI HttpOpenRequestA(HINTERNET ,LPCSTR ,LPCSTR ,LPCSTR , LPCSTR ,LPCSTR * ,DWORD ,DWORD_PTR); INTERNETAPI HINTERNET WINAPI HttpOpenRequestW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPCWSTR , LPCWSTR ,LPCWSTR * ,DWORD ,DWORD_PTR); #define HttpOpenRequest WINELIB_NAME_AW(HttpOpenRequest) BOOLAPI HttpAddRequestHeadersA(HINTERNET ,LPCSTR ,DWORD ,DWORD); BOOLAPI HttpAddRequestHeadersW(HINTERNET ,LPCWSTR ,DWORD ,DWORD); #define HttpAddRequestHeaders WINELIB_NAME_AW(HttpAddRequestHeaders) #define HTTP_ADDREQ_INDEX_MASK 0x0000FFFF #define HTTP_ADDREQ_FLAGS_MASK 0xFFFF0000 #define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000 #define HTTP_ADDREQ_FLAG_ADD 0x20000000 #define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000 #define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x01000000 #define HTTP_ADDREQ_FLAG_COALESCE HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA #define HTTP_ADDREQ_FLAG_REPLACE 0x80000000 BOOLAPI HttpSendRequestA(HINTERNET ,LPCSTR ,DWORD ,LPVOID ,DWORD); BOOLAPI HttpSendRequestW(HINTERNET ,LPCWSTR ,DWORD ,LPVOID ,DWORD); #define HttpSendRequest WINELIB_NAME_AW(HttpSendRequest) INTERNETAPI BOOL WINAPI HttpSendRequestExA(HINTERNET ,LPINTERNET_BUFFERSA , LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR); INTERNETAPI BOOL WINAPI HttpSendRequestExW(HINTERNET ,LPINTERNET_BUFFERSW , LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR); #define HttpSendRequestEx WINELIB_NAME_AW(HttpSendRequestEx) #define HSR_ASYNC WININET_API_FLAG_ASYNC #define HSR_SYNC WININET_API_FLAG_SYNC #define HSR_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT #define HSR_INITIATE 0x00000008 #define HSR_DOWNLOAD 0x00000010 #define HSR_CHUNKED 0x00000020 INTERNETAPI BOOL WINAPI HttpEndRequestA(HINTERNET ,LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR); INTERNETAPI BOOL WINAPI HttpEndRequestW(HINTERNET ,LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR); #define HttpEndRequest WINELIB_NAME_AW(HttpEndRequest) BOOLAPI HttpQueryInfoA(HINTERNET ,DWORD ,LPVOID ,LPDWORD ,LPDWORD); BOOLAPI HttpQueryInfoW(HINTERNET ,DWORD ,LPVOID ,LPDWORD ,LPDWORD); #define HttpQueryInfo WINELIB_NAME_AW(HttpQueryInfo) typedef enum { COOKIE_STATE_UNKNOWN, COOKIE_STATE_ACCEPT, COOKIE_STATE_PROMPT, COOKIE_STATE_LEASH, COOKIE_STATE_DOWNGRADE, COOKIE_STATE_REJECT, COOKIE_STATE_MAX = COOKIE_STATE_REJECT } InternetCookieState; BOOLAPI InternetClearAllPerSiteCookieDecisions(VOID); BOOLAPI InternetEnumPerSiteCookieDecisionA(LPSTR,ULONG *,ULONG *,ULONG); BOOLAPI InternetEnumPerSiteCookieDecisionW(LPWSTR,ULONG *,ULONG *,ULONG); #define InternetEnumPerSiteCookieDecision WINELIB_NAME_AW(InternetEnumPerSiteCookieDecision) #define INTERNET_COOKIE_IS_SECURE 0x00000001 #define INTERNET_COOKIE_IS_SESSION 0x00000002 #define INTERNET_COOKIE_THIRD_PARTY 0x00000010 #define INTERNET_COOKIE_PROMPT_REQUIRED 0x00000020 #define INTERNET_COOKIE_EVALUATE_P3P 0x00000040 #define INTERNET_COOKIE_APPLY_P3P 0x00000080 #define INTERNET_COOKIE_P3P_ENABLED 0x00000100 #define INTERNET_COOKIE_IS_RESTRICTED 0x00000200 #define INTERNET_COOKIE_IE6 0x00000400 #define INTERNET_COOKIE_IS_LEGACY 0x00000800 #define INTERNET_COOKIE_NON_SCRIPT 0x00001000 #define INTERNET_COOKIE_HTTPONLY 0x00002000 BOOLAPI InternetGetCookieExA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD,LPVOID); BOOLAPI InternetGetCookieExW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD,LPVOID); #define InternetGetCookieEx WINELIB_NAME_AW(InternetGetCookieEx) DWORD WINAPI InternetSetCookieExA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD_PTR); DWORD WINAPI InternetSetCookieExW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD_PTR); #define InternetSetCookieEx WINELIB_NAME_AW(InternetSetCookieEx) BOOLAPI InternetGetPerSiteCookieDecisionA(LPCSTR,ULONG *); BOOLAPI InternetGetPerSiteCookieDecisionW(LPCWSTR,ULONG *); #define InternetGetPerSiteCookieDecision WINELIB_NAME_AW(InternetGetPerSiteCookieDecision) BOOLAPI InternetSetPerSiteCookieDecisionA(LPCSTR,DWORD); BOOLAPI InternetSetPerSiteCookieDecisionW(LPCWSTR,DWORD); #define InternetSetPerSiteCookieDecision WINELIB_NAME_AW(InternetSetPerSiteCookieDecision) BOOLAPI InternetSetCookieA(LPCSTR ,LPCSTR ,LPCSTR); BOOLAPI InternetSetCookieW(LPCWSTR ,LPCWSTR ,LPCWSTR); #define InternetSetCookie WINELIB_NAME_AW(InternetSetCookie) BOOLAPI InternetGetCookieA(LPCSTR ,LPCSTR ,LPSTR ,LPDWORD); BOOLAPI InternetGetCookieW(LPCWSTR ,LPCWSTR ,LPWSTR ,LPDWORD); #define InternetGetCookie WINELIB_NAME_AW(InternetGetCookie) INTERNETAPI DWORD WINAPI InternetAttemptConnect(DWORD); BOOLAPI InternetCheckConnectionA(LPCSTR ,DWORD ,DWORD); BOOLAPI InternetCheckConnectionW(LPCWSTR ,DWORD ,DWORD); #define InternetCheckConnection WINELIB_NAME_AW(InternetCheckConnection) #define FLAG_ICC_FORCE_CONNECTION 0x00000001 #define FLAGS_ERROR_UI_FILTER_FOR_ERRORS 0x01 #define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS 0x02 #define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA 0x04 #define FLAGS_ERROR_UI_FLAGS_NO_UI 0x08 #define FLAGS_ERROR_UI_SERIALIZE_DIALOGS 0x10 DWORD InternetAuthNotifyCallback ( DWORD_PTR ,DWORD ,LPVOID ); typedef DWORD (CALLBACK *PFN_AUTH_NOTIFY) (DWORD_PTR,DWORD,LPVOID); typedef struct { DWORD cbStruct; DWORD dwOptions; PFN_AUTH_NOTIFY pfnNotify; DWORD_PTR dwContext; } INTERNET_AUTH_NOTIFY_DATA; INTERNETAPI DWORD WINAPI InternetErrorDlg(HWND ,HINTERNET ,DWORD ,DWORD ,LPVOID *); INTERNETAPI DWORD WINAPI InternetConfirmZoneCrossingA(HWND ,LPSTR ,LPSTR ,BOOL); INTERNETAPI DWORD WINAPI InternetConfirmZoneCrossingW(HWND ,LPWSTR ,LPWSTR ,BOOL); #define InternetConfirmZoneCrossing WINELIB_NAME_AW(InternetConfirmZoneCrossing) #define PRIVACY_TEMPLATE_NO_COOKIES 0 #define PRIVACY_TEMPLATE_HIGH 1 #define PRIVACY_TEMPLATE_MEDIUM_HIGH 2 #define PRIVACY_TEMPLATE_MEDIUM 3 #define PRIVACY_TEMPLATE_MEDIUM_LOW 4 #define PRIVACY_TEMPLATE_LOW 5 #define PRIVACY_TEMPLATE_CUSTOM 100 #define PRIVACY_TEMPLATE_ADVANCED 101 #define PRIVACY_TEMPLATE_MAX PRIVACY_TEMPLATE_LOW #define PRIVACY_TYPE_FIRST_PARTY 0 #define PRIVACY_TYPE_THIRD_PARTY 1 INTERNETAPI DWORD WINAPI PrivacySetZonePreferenceW(DWORD,DWORD,DWORD,LPCWSTR); INTERNETAPI DWORD WINAPI PrivacyGetZonePreferenceW(DWORD,DWORD,LPDWORD,LPWSTR,LPDWORD); #define INTERNET_ERROR_BASE 12000 #define ERROR_INTERNET_OUT_OF_HANDLES (INTERNET_ERROR_BASE + 1) #define ERROR_INTERNET_TIMEOUT (INTERNET_ERROR_BASE + 2) #define ERROR_INTERNET_EXTENDED_ERROR (INTERNET_ERROR_BASE + 3) #define ERROR_INTERNET_INTERNAL_ERROR (INTERNET_ERROR_BASE + 4) #define ERROR_INTERNET_INVALID_URL (INTERNET_ERROR_BASE + 5) #define ERROR_INTERNET_UNRECOGNIZED_SCHEME (INTERNET_ERROR_BASE + 6) #define ERROR_INTERNET_NAME_NOT_RESOLVED (INTERNET_ERROR_BASE + 7) #define ERROR_INTERNET_PROTOCOL_NOT_FOUND (INTERNET_ERROR_BASE + 8) #define ERROR_INTERNET_INVALID_OPTION (INTERNET_ERROR_BASE + 9) #define ERROR_INTERNET_BAD_OPTION_LENGTH (INTERNET_ERROR_BASE + 10) #define ERROR_INTERNET_OPTION_NOT_SETTABLE (INTERNET_ERROR_BASE + 11) #define ERROR_INTERNET_SHUTDOWN (INTERNET_ERROR_BASE + 12) #define ERROR_INTERNET_INCORRECT_USER_NAME (INTERNET_ERROR_BASE + 13) #define ERROR_INTERNET_INCORRECT_PASSWORD (INTERNET_ERROR_BASE + 14) #define ERROR_INTERNET_LOGIN_FAILURE (INTERNET_ERROR_BASE + 15) #define ERROR_INTERNET_INVALID_OPERATION (INTERNET_ERROR_BASE + 16) #define ERROR_INTERNET_OPERATION_CANCELLED (INTERNET_ERROR_BASE + 17) #define ERROR_INTERNET_INCORRECT_HANDLE_TYPE (INTERNET_ERROR_BASE + 18) #define ERROR_INTERNET_INCORRECT_HANDLE_STATE (INTERNET_ERROR_BASE + 19) #define ERROR_INTERNET_NOT_PROXY_REQUEST (INTERNET_ERROR_BASE + 20) #define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND (INTERNET_ERROR_BASE + 21) #define ERROR_INTERNET_BAD_REGISTRY_PARAMETER (INTERNET_ERROR_BASE + 22) #define ERROR_INTERNET_NO_DIRECT_ACCESS (INTERNET_ERROR_BASE + 23) #define ERROR_INTERNET_NO_CONTEXT (INTERNET_ERROR_BASE + 24) #define ERROR_INTERNET_NO_CALLBACK (INTERNET_ERROR_BASE + 25) #define ERROR_INTERNET_REQUEST_PENDING (INTERNET_ERROR_BASE + 26) #define ERROR_INTERNET_INCORRECT_FORMAT (INTERNET_ERROR_BASE + 27) #define ERROR_INTERNET_ITEM_NOT_FOUND (INTERNET_ERROR_BASE + 28) #define ERROR_INTERNET_CANNOT_CONNECT (INTERNET_ERROR_BASE + 29) #define ERROR_INTERNET_CONNECTION_ABORTED (INTERNET_ERROR_BASE + 30) #define ERROR_INTERNET_CONNECTION_RESET (INTERNET_ERROR_BASE + 31) #define ERROR_INTERNET_FORCE_RETRY (INTERNET_ERROR_BASE + 32) #define ERROR_INTERNET_INVALID_PROXY_REQUEST (INTERNET_ERROR_BASE + 33) #define ERROR_INTERNET_NEED_UI (INTERNET_ERROR_BASE + 34) #define ERROR_INTERNET_HANDLE_EXISTS (INTERNET_ERROR_BASE + 36) #define ERROR_INTERNET_SEC_CERT_DATE_INVALID (INTERNET_ERROR_BASE + 37) #define ERROR_INTERNET_SEC_CERT_CN_INVALID (INTERNET_ERROR_BASE + 38) #define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR (INTERNET_ERROR_BASE + 39) #define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR (INTERNET_ERROR_BASE + 40) #define ERROR_INTERNET_MIXED_SECURITY (INTERNET_ERROR_BASE + 41) #define ERROR_INTERNET_CHG_POST_IS_NON_SECURE (INTERNET_ERROR_BASE + 42) #define ERROR_INTERNET_POST_IS_NON_SECURE (INTERNET_ERROR_BASE + 43) #define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED (INTERNET_ERROR_BASE + 44) #define ERROR_INTERNET_INVALID_CA (INTERNET_ERROR_BASE + 45) #define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP (INTERNET_ERROR_BASE + 46) #define ERROR_INTERNET_ASYNC_THREAD_FAILED (INTERNET_ERROR_BASE + 47) #define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE (INTERNET_ERROR_BASE + 48) #define ERROR_INTERNET_DIALOG_PENDING (INTERNET_ERROR_BASE + 49) #define ERROR_INTERNET_RETRY_DIALOG (INTERNET_ERROR_BASE + 50) #define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR (INTERNET_ERROR_BASE + 52) #define ERROR_INTERNET_INSERT_CDROM (INTERNET_ERROR_BASE + 53) #define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED (INTERNET_ERROR_BASE + 54) #define ERROR_INTERNET_SEC_CERT_ERRORS (INTERNET_ERROR_BASE + 55) #define ERROR_INTERNET_SEC_CERT_NO_REV (INTERNET_ERROR_BASE + 56) #define ERROR_INTERNET_SEC_CERT_REV_FAILED (INTERNET_ERROR_BASE + 57) #define ERROR_FTP_TRANSFER_IN_PROGRESS (INTERNET_ERROR_BASE + 110) #define ERROR_FTP_DROPPED (INTERNET_ERROR_BASE + 111) #define ERROR_FTP_NO_PASSIVE_MODE (INTERNET_ERROR_BASE + 112) #define ERROR_GOPHER_PROTOCOL_ERROR (INTERNET_ERROR_BASE + 130) #define ERROR_GOPHER_NOT_FILE (INTERNET_ERROR_BASE + 131) #define ERROR_GOPHER_DATA_ERROR (INTERNET_ERROR_BASE + 132) #define ERROR_GOPHER_END_OF_DATA (INTERNET_ERROR_BASE + 133) #define ERROR_GOPHER_INVALID_LOCATOR (INTERNET_ERROR_BASE + 134) #define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE (INTERNET_ERROR_BASE + 135) #define ERROR_GOPHER_NOT_GOPHER_PLUS (INTERNET_ERROR_BASE + 136) #define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND (INTERNET_ERROR_BASE + 137) #define ERROR_GOPHER_UNKNOWN_LOCATOR (INTERNET_ERROR_BASE + 138) #define ERROR_HTTP_HEADER_NOT_FOUND (INTERNET_ERROR_BASE + 150) #define ERROR_HTTP_DOWNLEVEL_SERVER (INTERNET_ERROR_BASE + 151) #define ERROR_HTTP_INVALID_SERVER_RESPONSE (INTERNET_ERROR_BASE + 152) #define ERROR_HTTP_INVALID_HEADER (INTERNET_ERROR_BASE + 153) #define ERROR_HTTP_INVALID_QUERY_REQUEST (INTERNET_ERROR_BASE + 154) #define ERROR_HTTP_HEADER_ALREADY_EXISTS (INTERNET_ERROR_BASE + 155) #define ERROR_HTTP_REDIRECT_FAILED (INTERNET_ERROR_BASE + 156) #define ERROR_HTTP_NOT_REDIRECTED (INTERNET_ERROR_BASE + 160) #define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION (INTERNET_ERROR_BASE + 161) #define ERROR_HTTP_COOKIE_DECLINED (INTERNET_ERROR_BASE + 162) #define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION (INTERNET_ERROR_BASE + 168) #define ERROR_INTERNET_SECURITY_CHANNEL_ERROR (INTERNET_ERROR_BASE + 157) #define ERROR_INTERNET_UNABLE_TO_CACHE_FILE (INTERNET_ERROR_BASE + 158) #define ERROR_INTERNET_TCPIP_NOT_INSTALLED (INTERNET_ERROR_BASE + 159) #define ERROR_INTERNET_DISCONNECTED (INTERNET_ERROR_BASE + 163) #define ERROR_INTERNET_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 164) #define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 165) #define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT (INTERNET_ERROR_BASE + 166) #define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT (INTERNET_ERROR_BASE + 167) #define ERROR_INTERNET_SEC_INVALID_CERT (INTERNET_ERROR_BASE + 169) #define ERROR_INTERNET_SEC_CERT_REVOKED (INTERNET_ERROR_BASE + 170) #define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK (INTERNET_ERROR_BASE + 171) #define ERROR_INTERNET_NOT_INITIALIZED (INTERNET_ERROR_BASE + 172) #define ERROR_INTERNET_NEED_MSN_SSPI_PKG (INTERNET_ERROR_BASE + 173) #define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY (INTERNET_ERROR_BASE + 174) #define ERROR_INTERNET_DECODING_FAILED (INTERNET_ERROR_BASE + 175) #define INTERNET_ERROR_LAST ERROR_INTERNET_DECODING_FAILED #define NORMAL_CACHE_ENTRY 0x00000001 #define STICKY_CACHE_ENTRY 0x00000004 #define EDITED_CACHE_ENTRY 0x00000008 #define COOKIE_CACHE_ENTRY 0x00100000 #define URLHISTORY_CACHE_ENTRY 0x00200000 #define TRACK_OFFLINE_CACHE_ENTRY 0x00000010 #define TRACK_ONLINE_CACHE_ENTRY 0x00000020 #define SPARSE_CACHE_ENTRY 0x00010000 #define URLCACHE_FIND_DEFAULT_FILTER NORMAL_CACHE_ENTRY \ | COOKIE_CACHE_ENTRY \ | URLHISTORY_CACHE_ENTRY \ | TRACK_OFFLINE_CACHE_ENTRY \ | TRACK_ONLINE_CACHE_ENTRY \ | STICKY_CACHE_ENTRY typedef struct _INTERNET_CACHE_ENTRY_INFOA { DWORD dwStructSize; LPSTR lpszSourceUrlName; LPSTR lpszLocalFileName; DWORD CacheEntryType; DWORD dwUseCount; DWORD dwHitRate; DWORD dwSizeLow; DWORD dwSizeHigh; FILETIME LastModifiedTime; FILETIME ExpireTime; FILETIME LastAccessTime; FILETIME LastSyncTime; LPBYTE lpHeaderInfo; DWORD dwHeaderInfoSize; LPSTR lpszFileExtension; union { DWORD dwReserved; DWORD dwExemptDelta; } DUMMYUNIONNAME; } INTERNET_CACHE_ENTRY_INFOA,* LPINTERNET_CACHE_ENTRY_INFOA; typedef struct _INTERNET_CACHE_ENTRY_INFOW { DWORD dwStructSize; LPWSTR lpszSourceUrlName; LPWSTR lpszLocalFileName; DWORD CacheEntryType; DWORD dwUseCount; DWORD dwHitRate; DWORD dwSizeLow; DWORD dwSizeHigh; FILETIME LastModifiedTime; FILETIME ExpireTime; FILETIME LastAccessTime; FILETIME LastSyncTime; LPBYTE lpHeaderInfo; DWORD dwHeaderInfoSize; LPWSTR lpszFileExtension; union { DWORD dwReserved; DWORD dwExemptDelta; } DUMMYUNIONNAME; } INTERNET_CACHE_ENTRY_INFOW,* LPINTERNET_CACHE_ENTRY_INFOW; DECL_WINELIB_TYPE_AW(INTERNET_CACHE_ENTRY_INFO) DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_ENTRY_INFO) typedef struct _INTERNET_CACHE_TIMESTAMPS { FILETIME ftExpires; FILETIME ftLastModified; } INTERNET_CACHE_TIMESTAMPS, *LPINTERNET_CACHE_TIMESTAMPS; BOOLAPI CreateUrlCacheEntryA(LPCSTR ,DWORD ,LPCSTR ,LPSTR ,DWORD); BOOLAPI CreateUrlCacheEntryW(LPCWSTR ,DWORD ,LPCWSTR ,LPWSTR ,DWORD); #define CreateUrlCacheEntry WINELIB_NAME_AW(CreateUrlCacheEntry) BOOLAPI CommitUrlCacheEntryA(LPCSTR,LPCSTR,FILETIME,FILETIME,DWORD,LPBYTE,DWORD,LPCSTR,LPCSTR); BOOLAPI CommitUrlCacheEntryW(LPCWSTR,LPCWSTR,FILETIME,FILETIME,DWORD,LPWSTR,DWORD,LPCWSTR,LPCWSTR); #define CommitUrlCacheEntry WINELIB_NAME_AW(CommitUrlCacheEntry) BOOLAPI ResumeSuspendedDownload(HINTERNET, DWORD); BOOLAPI RetrieveUrlCacheEntryFileA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,DWORD); BOOLAPI RetrieveUrlCacheEntryFileW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,DWORD); #define RetrieveUrlCacheEntryFile WINELIB_NAME_AW(RetrieveUrlCacheEntryFile) BOOLAPI UnlockUrlCacheEntryFileA(LPCSTR ,DWORD); BOOLAPI UnlockUrlCacheEntryFileW(LPCWSTR ,DWORD); #define UnlockUrlCacheEntryFile WINELIB_NAME_AW(UnlockUrlCacheEntryFile) INTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamA(LPCSTR , LPINTERNET_CACHE_ENTRY_INFOA , LPDWORD ,BOOL ,DWORD); INTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW , LPDWORD ,BOOL ,DWORD); #define RetrieveUrlCacheEntryStream WINELIB_NAME_AW(RetrieveUrlCacheEntryStream) BOOLAPI ReadUrlCacheEntryStream( HANDLE ,DWORD ,LPVOID ,LPDWORD ,DWORD ); BOOLAPI UnlockUrlCacheEntryStream( HANDLE ,DWORD ); BOOLAPI GetUrlCacheEntryInfoA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD); BOOLAPI GetUrlCacheEntryInfoW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD); #define GetUrlCacheEntryInfo WINELIB_NAME_AW(GetUrlCacheEntryInfo) BOOLAPI GetUrlCacheEntryInfoExA( LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPSTR ,LPDWORD ,LPVOID ,DWORD); BOOLAPI GetUrlCacheEntryInfoExW( LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPWSTR ,LPDWORD ,LPVOID ,DWORD); #define GetUrlCacheEntryInfoEx WINELIB_NAME_AW(GetUrlCacheEntryInfoEx) #define CACHE_ENTRY_ATTRIBUTE_FC 0x00000004 #define CACHE_ENTRY_HITRATE_FC 0x00000010 #define CACHE_ENTRY_MODTIME_FC 0x00000040 #define CACHE_ENTRY_EXPTIME_FC 0x00000080 #define CACHE_ENTRY_ACCTIME_FC 0x00000100 #define CACHE_ENTRY_SYNCTIME_FC 0x00000200 #define CACHE_ENTRY_HEADERINFO_FC 0x00000400 #define CACHE_ENTRY_EXEMPT_DELTA_FC 0x00000800 BOOLAPI SetUrlCacheEntryInfoA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,DWORD); BOOLAPI SetUrlCacheEntryInfoW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,DWORD); #define SetUrlCacheEntryInfo WINELIB_NAME_AW(SetUrlCacheEntryInfo) typedef LONGLONG GROUPID; INTERNETAPI GROUPID WINAPI CreateUrlCacheGroup(DWORD,LPVOID); BOOLAPI DeleteUrlCacheGroup(GROUPID ,DWORD ,LPVOID); INTERNETAPI HANDLE WINAPI FindFirstUrlCacheGroup(DWORD,DWORD,LPVOID,DWORD,GROUPID*,LPVOID); BOOLAPI FindNextUrlCacheGroup(HANDLE,GROUPID*,LPVOID); BOOLAPI GetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPDWORD,LPVOID); BOOLAPI GetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPDWORD,LPVOID); #define GetUrlCacheGroupAttribute WINELIB_NAME_AW(GetUrlCacheGroupAttribute) #define INTERNET_CACHE_GROUP_ADD 0 #define INTERNET_CACHE_GROUP_REMOVE 1 BOOLAPI SetUrlCacheEntryGroupA(LPCSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID); BOOLAPI SetUrlCacheEntryGroupW(LPCWSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID); #define SetUrlCacheEntryGroup WINELIB_NAME_AW(SetUrlCacheEntryGroup) BOOLAPI SetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPVOID); BOOLAPI SetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPVOID); #define SetUrlCacheGroupAttribute WINELIB_NAME_AW(SetUrlCacheGroupAttribute) INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExA( LPCSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID ); INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExW( LPCWSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID ); #define FindFirstUrlCacheEntryEx WINELIB_NAME_AW(FindFirstUrlCacheEntryEx) BOOLAPI FindNextUrlCacheEntryExA(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID); BOOLAPI FindNextUrlCacheEntryExW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID); #define FindNextUrlCacheEntryEx WINELIB_NAME_AW(FindNextUrlCacheEntryEx) INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD); INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD); #define FindFirstUrlCacheEntry WINELIB_NAME_AW(FindFirstUrlCacheEntry) BOOLAPI FindNextUrlCacheEntryA(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD); BOOLAPI FindNextUrlCacheEntryW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD); #define FindNextUrlCacheEntry WINELIB_NAME_AW(FindNextUrlCacheEntry) BOOLAPI FindCloseUrlCache(HANDLE); BOOLAPI DeleteUrlCacheEntryA(LPCSTR); BOOLAPI DeleteUrlCacheEntryW(LPCWSTR); #define DeleteUrlCacheEntry WINELIB_NAME_AW(DeleteUrlCacheEntry) /* FCS_ flags and FreeUrlCacheSpace are no longer documented */ #define FCS_PERCENT_CACHE_SPACE 0 /* guessed value */ #define FCS_PERCENT_DISK_SPACE 1 /* guessed value */ #define FCS_ABSOLUTE_SIZE 2 /* guessed value */ BOOLAPI FreeUrlCacheSpaceA(LPCSTR ,DWORD ,DWORD); BOOLAPI FreeUrlCacheSpaceW(LPCWSTR ,DWORD ,DWORD); #define FreeUrlCacheSpace WINELIB_NAME_AW(FreeUrlCacheSpace) INTERNETAPI DWORD WINAPI InternetDialA(HWND ,LPSTR ,DWORD ,DWORD_PTR* ,DWORD); INTERNETAPI DWORD WINAPI InternetDialW(HWND ,LPWSTR ,DWORD ,DWORD_PTR* ,DWORD); #define InternetDial WINELIB_NAME_AW(InternetDial) #define INTERNET_DIAL_UNATTENDED 0x8000 INTERNETAPI DWORD WINAPI InternetHangUp(DWORD_PTR ,DWORD); BOOLAPI CreateMD5SSOHash(PWSTR,PWSTR,PWSTR,PBYTE); #define INTERENT_GOONLINE_REFRESH 0x00000001 #define INTERENT_GOONLINE_MASK 0x00000001 INTERNETAPI BOOL WINAPI InternetGoOnlineA(LPSTR ,HWND ,DWORD); INTERNETAPI BOOL WINAPI InternetGoOnlineW(LPWSTR ,HWND ,DWORD); #define InternetGoOnline WINELIB_NAME_AW(InternetGoOnline) INTERNETAPI BOOL WINAPI InternetAutodial(DWORD,HWND); #define INTERNET_AUTODIAL_FORCE_ONLINE 1 #define INTERNET_AUTODIAL_FORCE_UNATTENDED 2 #define INTERNET_AUTODIAL_FAILIFSECURITYCHECK 4 #define INTERNET_AUTODIAL_FLAGS_MASK (INTERNET_AUTODIAL_FORCE_ONLINE | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK) INTERNETAPI BOOL WINAPI InternetAutodialHangup(DWORD); INTERNETAPI BOOL WINAPI InternetGetConnectedState(LPDWORD ,DWORD); #define INTERNET_CONNECTION_MODEM 0x01 #define INTERNET_CONNECTION_LAN 0x02 #define INTERNET_CONNECTION_PROXY 0x04 #define INTERNET_CONNECTION_MODEM_BUSY 0x08 #define INTERNET_RAS_INSTALLED 0x10 #define INTERNET_CONNECTION_OFFLINE 0x20 #define INTERNET_CONNECTION_CONFIGURED 0x40 typedef DWORD (CALLBACK *PFN_DIAL_HANDLER) (HWND,LPCSTR,DWORD,LPDWORD); #define INTERNET_CUSTOMDIAL_CONNECT 0 #define INTERNET_CUSTOMDIAL_UNATTENDED 1 #define INTERNET_CUSTOMDIAL_DISCONNECT 2 #define INTERNET_CUSTOMDIAL_SHOWOFFLINE 4 #define INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED 1 #define INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE 2 #define INTERNET_CUSTOMDIAL_CAN_HANGUP 4 INTERNETAPI BOOL WINAPI InternetSetDialStateA(LPCSTR ,DWORD ,DWORD); INTERNETAPI BOOL WINAPI InternetSetDialStateW(LPCWSTR ,DWORD ,DWORD); #define InternetSetDialState WINELIB_NAME_AW(InternetSetDialState) #define INTERNET_DIALSTATE_DISCONNECTED 1 BOOL WINAPI InternetGetConnectedStateExA(LPDWORD, LPSTR, DWORD, DWORD); BOOL WINAPI InternetGetConnectedStateExW(LPDWORD, LPWSTR, DWORD, DWORD); #define InternetGetConnectedStateEx WINELIB_NAME_AW(InternetGetConnectedStateEx) typedef struct AutoProxyHelperVtbl { BOOL (WINAPI *IsResolvable)(LPSTR); DWORD (WINAPI *GetIPAddress)(LPSTR, LPDWORD); DWORD (WINAPI *ResolveHostName)(LPSTR, LPSTR, LPDWORD); BOOL (WINAPI *IsInNet)(LPSTR, LPSTR, LPSTR); BOOL (WINAPI *IsResolvableEx)(LPSTR); DWORD (WINAPI *GetIPAddressEx)(LPSTR, LPDWORD); DWORD (WINAPI *ResolveHostNameEx)(LPSTR, LPSTR, LPDWORD); BOOL (WINAPI *IsInNetEx)(LPSTR, LPSTR); DWORD (WINAPI *SortIpList)(LPSTR, LPSTR, LPDWORD); } AutoProxyHelperVtbl; typedef struct AutoProxyHelperFunctions { const struct AutoProxyHelperVtbl *lpVtbl; } AutoProxyHelperFunctions; typedef struct { DWORD dwStructSize; LPSTR lpszScriptBuffer; DWORD dwScriptBufferSize; } AUTO_PROXY_SCRIPT_BUFFER, *LPAUTO_PROXY_SCRIPT_BUFFER; typedef BOOL (CALLBACK *pfnInternetDeInitializeAutoProxyDll)(LPSTR, DWORD); typedef BOOL (CALLBACK *pfnInternetGetProxyInfo)(LPCSTR, DWORD, LPSTR, DWORD, LPSTR *, LPDWORD); typedef BOOL (CALLBACK *pfnInternetInitializeAutoProxyDll)(DWORD, LPSTR, LPSTR, AutoProxyHelperFunctions *, LPAUTO_PROXY_SCRIPT_BUFFER); BOOL WINAPI InternetInitializeAutoProxyDll(DWORD); BOOL WINAPI DetectAutoProxyUrl(LPSTR, DWORD, DWORD); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/winineti.h ================================================ /* * Copyright (C) 2007 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINE_WININETI_H_ #define _WINE_WININETI_H_ /* FIXME: #include */ #include #include typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYA { CHAR CachePath[MAX_PATH]; DWORD dwCacheSize; } INTERNET_CACHE_CONFIG_PATH_ENTRYA, *LPINTERNET_CACHE_CONFIG_PATH_ENTRYA; typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYW { WCHAR CachePath[MAX_PATH]; DWORD dwCacheSize; } INTERNET_CACHE_CONFIG_PATH_ENTRYW, *LPINTERNET_CACHE_CONFIG_PATH_ENTRYW; DECL_WINELIB_TYPE_AW(INTERNET_CACHE_CONFIG_PATH_ENTRY) DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_CONFIG_PATH_ENTRY) typedef struct _INTERNET_CACHE_CONFIG_INFOA { DWORD dwStructSize; DWORD dwContainer; DWORD dwQuota; DWORD dwReserved4; BOOL fPerUser; DWORD dwSyncMode; DWORD dwNumCachePaths; __C89_NAMELESS union { __C89_NAMELESS struct { CHAR CachePath[MAX_PATH]; DWORD dwCacheSize; } __C89_NAMELESSSTRUCTNAME; INTERNET_CACHE_CONFIG_PATH_ENTRYA CachePaths[ANYSIZE_ARRAY]; } __C89_NAMELESSUNIONNAME; DWORD dwNormalUsage; DWORD dwExemptUsage; } INTERNET_CACHE_CONFIG_INFOA, *LPINTERNET_CACHE_CONFIG_INFOA; typedef struct _INTERNET_CACHE_CONFIG_INFOW { DWORD dwStructSize; DWORD dwContainer; DWORD dwQuota; DWORD dwReserved4; BOOL fPerUser; DWORD dwSyncMode; DWORD dwNumCachePaths; __C89_NAMELESS union { __C89_NAMELESS struct { WCHAR CachePath[MAX_PATH]; DWORD dwCacheSize; } __C89_NAMELESSSTRUCTNAME; INTERNET_CACHE_CONFIG_PATH_ENTRYW CachePaths[ANYSIZE_ARRAY]; } __C89_NAMELESSUNIONNAME; DWORD dwNormalUsage; DWORD dwExemptUsage; } INTERNET_CACHE_CONFIG_INFOW, *LPINTERNET_CACHE_CONFIG_INFOW; DECL_WINELIB_TYPE_AW(INTERNET_CACHE_CONFIG_INFO) DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_CONFIG_INFO) typedef enum { WININET_SYNC_MODE_NEVER = 0, WININET_SYNC_MODE_ON_EXPIRY, WININET_SYNC_MODE_ONCE_PER_SESSION, WININET_SYNC_MODE_ALWAYS, WININET_SYNC_MODE_AUTOMATIC, WININET_SYNC_MODE_DEFAULT = WININET_SYNC_MODE_AUTOMATIC } WININET_SYNC_MODE; /* Flags for GetUrlCacheConfigInfoA/W and SetUrlCacheConfigInfoA/W */ #define CACHE_CONFIG_FORCE_CLEANUP_FC 0x00000020 #define CACHE_CONFIG_DISK_CACHE_PATHS_FC 0x00000040 #define CACHE_CONFIG_SYNC_MODE_FC 0x00000080 #define CACHE_CONFIG_CONTENT_PATHS_FC 0x00000100 #define CACHE_CONFIG_COOKIES_PATHS_FC 0x00000200 #define CACHE_CONFIG_HISTORY_PATHS_FC 0x00000400 #define CACHE_CONFIG_QUOTA_FC 0x00000800 #define CACHE_CONFIG_USER_MODE_FC 0x00001000 #define CACHE_CONFIG_CONTENT_USAGE_FC 0x00002000 #define CACHE_CONFIG_STICKY_CONTENT_USAGE_FC 0x00004000 #ifdef __cplusplus extern "C" { #endif DWORD WINAPI DeleteIE3Cache(HWND,HINSTANCE,LPSTR,int); BOOL WINAPI GetDiskInfoA(PCSTR,PDWORD,PDWORDLONG,PDWORDLONG); BOOL WINAPI GetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,LPDWORD,DWORD); BOOL WINAPI GetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,LPDWORD,DWORD); #define GetUrlCacheConfigInfo WINELIB_NAME_AW(GetUrlCacheConfigInfo) BOOL WINAPI IncrementUrlCacheHeaderData(DWORD,LPDWORD); BOOL WINAPI InternetQueryFortezzaStatus(DWORD*,DWORD_PTR); BOOL WINAPI IsUrlCacheEntryExpiredA(LPCSTR,DWORD,FILETIME*); BOOL WINAPI IsUrlCacheEntryExpiredW(LPCWSTR,DWORD,FILETIME*); #define IsUrlCacheEntryExpired WINELIB_NAME_AW(IsUrlCacheEntryExpired) DWORD WINAPI ParseX509EncodedCertificateForListBoxEntry(LPBYTE,DWORD,LPSTR,LPDWORD); BOOL WINAPI SetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,DWORD); BOOL WINAPI SetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,DWORD); #define SetUrlCacheConfigInfo WINELIB_NAME_AW(SetUrlCacheConfigInfo) BOOL WINAPI InternetGetSecurityInfoByURLA(LPSTR,PCCERT_CHAIN_CONTEXT*,DWORD*); BOOL WINAPI InternetGetSecurityInfoByURLW(LPCWSTR,PCCERT_CHAIN_CONTEXT*,DWORD*); #define InternetGetSecurityInfoByURL WINELIB_NAME_AW(InternetGetSecurityInfoByURL) #ifdef __cplusplus } #endif #endif /* _WINE_WININETI_H_ */ ================================================ FILE: wine/windows/winioctl.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINIOCTL_H #define __WINE_WINIOCTL_H #define CTL_CODE( DeviceType, Function, Method, Access ) ( \ (DWORD)((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ ) #define DEVICE_TYPE DWORD #define FILE_DEVICE_BEEP 0x00000001 #define FILE_DEVICE_CD_ROM 0x00000002 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 #define FILE_DEVICE_CONTROLLER 0x00000004 #define FILE_DEVICE_DATALINK 0x00000005 #define FILE_DEVICE_DFS 0x00000006 #define FILE_DEVICE_DISK 0x00000007 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 #define FILE_DEVICE_FILE_SYSTEM 0x00000009 #define FILE_DEVICE_INPORT_PORT 0x0000000a #define FILE_DEVICE_KEYBOARD 0x0000000b #define FILE_DEVICE_MAILSLOT 0x0000000c #define FILE_DEVICE_MIDI_IN 0x0000000d #define FILE_DEVICE_MIDI_OUT 0x0000000e #define FILE_DEVICE_MOUSE 0x0000000f #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 #define FILE_DEVICE_NAMED_PIPE 0x00000011 #define FILE_DEVICE_NETWORK 0x00000012 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 #define FILE_DEVICE_NULL 0x00000015 #define FILE_DEVICE_PARALLEL_PORT 0x00000016 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 #define FILE_DEVICE_PRINTER 0x00000018 #define FILE_DEVICE_SCANNER 0x00000019 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a #define FILE_DEVICE_SERIAL_PORT 0x0000001b #define FILE_DEVICE_SCREEN 0x0000001c #define FILE_DEVICE_SOUND 0x0000001d #define FILE_DEVICE_STREAMS 0x0000001e #define FILE_DEVICE_TAPE 0x0000001f #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 #define FILE_DEVICE_TRANSPORT 0x00000021 #define FILE_DEVICE_UNKNOWN 0x00000022 #define FILE_DEVICE_VIDEO 0x00000023 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 #define FILE_DEVICE_WAVE_IN 0x00000025 #define FILE_DEVICE_WAVE_OUT 0x00000026 #define FILE_DEVICE_8042_PORT 0x00000027 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 #define FILE_DEVICE_BATTERY 0x00000029 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a #define FILE_DEVICE_MODEM 0x0000002b #define FILE_DEVICE_VDM 0x0000002c #define FILE_DEVICE_MASS_STORAGE 0x0000002d #define FILE_DEVICE_SMB 0x0000002e #define FILE_DEVICE_KS 0x0000002f #define FILE_DEVICE_CHANGER 0x00000030 #define FILE_DEVICE_SMARTCARD 0x00000031 #define FILE_DEVICE_ACPI 0x00000032 #define FILE_DEVICE_DVD 0x00000033 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 #define FILE_DEVICE_DFS_VOLUME 0x00000036 #define FILE_DEVICE_SERENUM 0x00000037 #define FILE_DEVICE_TERMSRV 0x00000038 #define FILE_DEVICE_KSEC 0x00000039 #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 #define METHOD_OUT_DIRECT 2 #define METHOD_NEITHER 3 #define FILE_ANY_ACCESS 0 #define FILE_SPECIAL_ACCESS 0 #define FILE_READ_ACCESS FILE_READ_DATA /* file & pipe */ #define FILE_WRITE_ACCESS FILE_WRITE_DATA /* file & pipe */ #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA) #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA) #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS) #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS) #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT,FILE_READ_DATA) #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA) #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_STORAGE_SET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_PERSISTENT_RESERVE_IN CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS) #define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_BASE FILE_DEVICE_DISK #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS) #define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS) #define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_VOLUME_BASE ((DWORD)'V') #define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS) /* Return Codes... should these be the same as something somewhere? */ #define PARTITION_ENTRY_UNUSED 0x00 /* Entry unused */ #define PARTITION_FAT_12 0x01 /* 12-bit FAT entries */ #define PARTITION_XENIX_1 0x02 /* Xenix */ #define PARTITION_XENIX_2 0x03 /* Xenix */ #define PARTITION_FAT_16 0x04 /* 16-bit FAT entries */ #define PARTITION_EXTENDED 0x05 /* Extended partition entry */ #define PARTITION_HUGE 0x06 /* Huge partition MS-DOS V4 */ #define PARTITION_IFS 0x07 /* IFS Partition */ #define PARTITION_FAT32 0x0B /* FAT32 */ #define PARTITION_FAT32_XINT13 0x0C /* FAT32 using extended int13 services */ #define PARTITION_XINT13 0x0E /* Win95 partition using extended int13 services */ #define PARTITION_XINT13_EXTENDED 0x0F /* Same as type 5 but uses extended int13 services */ #define PARTITION_PREP 0x41 /* PowerPC Reference Platform (PReP) Boot Partition */ #define PARTITION_LDM 0x42 /* Logical Disk Manager partition */ #define PARTITION_UNIX 0x63 /* Unix */ typedef enum _MEDIA_TYPE { Unknown, F5_1Pt2_512, F3_1Pt44_512, F3_2Pt88_512, F3_20Pt8_512, F3_720_512, F5_360_512, F5_320_512, F5_320_1024, F5_180_512, F5_160_512, RemovableMedia, FixedMedia, F3_120M_512, F3_640_512, F5_640_512, F5_720_512, F3_1Pt2_512, F3_1Pt23_1024, F5_1Pt23_1024, F3_128Mb_512, F3_230Mb_512, F8_256_128 } MEDIA_TYPE, *PMEDIA_TYPE; typedef struct _FORMAT_PARAMETERS { MEDIA_TYPE MediaType; DWORD StartCylinderNumber; DWORD EndCylinderNumber; DWORD StartHeadNumber; DWORD EndHeadNumber; } FORMAT_PARAMETERS, *PFORMAT_PARAMETERS; typedef WORD BAD_TRACK_NUMBER; typedef WORD *PBAD_TRACK_NUMBER; typedef struct _FORMAT_EX_PARAMETERS { MEDIA_TYPE MediaType; DWORD StartCylinderNumber; DWORD EndCylinderNumber; DWORD StartHeadNumber; DWORD EndHeadNumber; WORD FormatGapLength; WORD SectorsPerTrack; WORD SectorNumber[1]; } FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS; typedef struct _DISK_GEOMETRY { LARGE_INTEGER Cylinders; MEDIA_TYPE MediaType; DWORD TracksPerCylinder; DWORD SectorsPerTrack; DWORD BytesPerSector; } DISK_GEOMETRY, *PDISK_GEOMETRY; typedef struct _DISK_GEOMETRY_EX { DISK_GEOMETRY Geometry; LARGE_INTEGER DiskSize; BYTE Data[1]; } DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX; typedef struct _PARTITION_INFORMATION { LARGE_INTEGER StartingOffset; LARGE_INTEGER PartitionLength; DWORD HiddenSectors; DWORD PartitionNumber; BYTE PartitionType; BOOLEAN BootIndicator; BOOLEAN RecognizedPartition; BOOLEAN RewritePartition; } PARTITION_INFORMATION, *PPARTITION_INFORMATION; typedef struct _SET_PARTITION_INFORMATION { BYTE PartitionType; } SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION; typedef struct _DRIVE_LAYOUT_INFORMATION { DWORD PartitionCount; DWORD Signature; PARTITION_INFORMATION PartitionEntry[1]; } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION; typedef struct _VERIFY_INFORMATION { LARGE_INTEGER StartingOffset; DWORD Length; } VERIFY_INFORMATION, *PVERIFY_INFORMATION; typedef struct _REASSIGN_BLOCKS { WORD Reserved; WORD Count; DWORD BlockNumber[1]; } REASSIGN_BLOCKS, *PREASSIGN_BLOCKS; /* Start: _WIN32_WINNT >= 0x0400 */ typedef struct _DISK_CONTROLLER_NUMBER { DWORD ControllerNumber; DWORD DiskNumber; } DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER; /* VOLUME_GET_VOLUME_DISK_EXTENTS */ typedef struct _DISK_EXTENT { DWORD DiskNumber; LARGE_INTEGER StartingOffset; LARGE_INTEGER ExtentLength; } DISK_EXTENT; typedef struct _VOLUME_DISK_EXTENTS { DWORD NumberOfDiskExtents; DISK_EXTENT Extents[1]; } VOLUME_DISK_EXTENTS; typedef struct RETRIEVAL_POINTERS_BUFFER { DWORD ExtentCount; LARGE_INTEGER StartingVcn; struct { LARGE_INTEGER NextVcn; LARGE_INTEGER Lcn; } Extents[1]; } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER; /* End: _WIN32_WINNT >= 0x0400 */ /* * NT I/O-Manager */ /* * structures for NtQueryVolumeInformationFile * (wdm.h) */ /* FileFsVolumeInformation = 1 */ typedef struct _FILE_FS_VOLUME_INFORMATION { LARGE_INTEGER VolumeCreationTime; ULONG VolumeSerialNumber; ULONG VolumeLabelLength; BOOLEAN SupportsObjects; WCHAR VolumeLabel[1]; } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; /* FileFsLabelInformation = 2 */ /* unknown */ /* FileFsSizeInformation = 3 */ typedef struct _FILE_FS_SIZE_INFORMATION { LARGE_INTEGER TotalAllocationUnits; LARGE_INTEGER AvailableAllocationUnits; ULONG SectorsPerAllocationUnit; ULONG BytesPerSector; } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; /* FileFsDeviceInformation = 4 */ typedef struct _FILE_FS_DEVICE_INFORMATION { DEVICE_TYPE DeviceType; ULONG Characteristics; } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; /* FileFsAttributeInformation = 5 */ typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { ULONG FileSystemAttribute; LONG MaximumComponentNameLength; ULONG FileSystemNameLength; WCHAR FileSystemName[1]; } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; /*FileFsControlInformation = 6 */ /* unknown */ /*FileFsFullSizeInformation = 7 */ typedef struct _FILE_FS_FULL_SIZE_INFORMATION { LARGE_INTEGER TotalAllocationUnits; LARGE_INTEGER CallerAvailableAllocationUnits; LARGE_INTEGER ActualAvailableAllocationUnits; ULONG SectorsPerAllocationUnit; ULONG BytesPerSector; } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; typedef struct _FILE_PIPE_WAIT_FOR_BUFFER { LARGE_INTEGER Timeout; ULONG NameLength; BOOLEAN TimeoutSpecified; WCHAR Name[1]; } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER; typedef struct _FILE_PIPE_PEEK_BUFFER { ULONG NamedPipeState; ULONG ReadDataAvailable; ULONG NumberOfMessages; ULONG MessageLength; CHAR Data[1]; } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER; /* Device GUIDs */ #ifdef DEFINE_GUID DEFINE_GUID(GUID_DEVINTERFACE_COMPORT, 0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73); DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); /* obsolete GUID names */ #define GUID_CLASS_COMPORT GUID_DEVINTERFACE_COMPORT #define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR #endif /* DEFINE_GUID */ #endif ================================================ FILE: wine/windows/winldap.h ================================================ /* * Copyright 2005 Hans Leidekker * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINLDAP_H #define __WINE_WINLDAP_H #include #include #ifndef LDAPAPI #define LDAPAPI __cdecl #endif typedef enum { LDAP_SUCCESS = 0x00, LDAP_OPERATIONS_ERROR = 0x01, LDAP_PROTOCOL_ERROR = 0x02, LDAP_TIMELIMIT_EXCEEDED = 0x03, LDAP_SIZELIMIT_EXCEEDED = 0x04, LDAP_COMPARE_FALSE = 0x05, LDAP_COMPARE_TRUE = 0x06, LDAP_AUTH_METHOD_NOT_SUPPORTED = 0x07, LDAP_STRONG_AUTH_REQUIRED = 0x08, LDAP_REFERRAL_V2 = 0x09, LDAP_PARTIAL_RESULTS = 0x09, LDAP_REFERRAL = 0x0a, LDAP_ADMIN_LIMIT_EXCEEDED = 0x0b, LDAP_UNAVAILABLE_CRIT_EXTENSION = 0x0c, LDAP_CONFIDENTIALITY_REQUIRED = 0x0d, LDAP_SASL_BIND_IN_PROGRESS = 0x0e, LDAP_NO_SUCH_ATTRIBUTE = 0x10, LDAP_UNDEFINED_TYPE = 0x11, LDAP_INAPPROPRIATE_MATCHING = 0x12, LDAP_CONSTRAINT_VIOLATION = 0x13, LDAP_ATTRIBUTE_OR_VALUE_EXISTS = 0x14, LDAP_INVALID_SYNTAX = 0x15, LDAP_NO_SUCH_OBJECT = 0x20, LDAP_ALIAS_PROBLEM = 0x21, LDAP_INVALID_DN_SYNTAX = 0x22, LDAP_IS_LEAF = 0x23, LDAP_ALIAS_DEREF_PROBLEM = 0x24, LDAP_INAPPROPRIATE_AUTH = 0x30, LDAP_INVALID_CREDENTIALS = 0x31, LDAP_INSUFFICIENT_RIGHTS = 0x32, LDAP_BUSY = 0x33, LDAP_UNAVAILABLE = 0x34, LDAP_UNWILLING_TO_PERFORM = 0x35, LDAP_LOOP_DETECT = 0x36, LDAP_SORT_CONTROL_MISSING = 0x3C, LDAP_OFFSET_RANGE_ERROR = 0x3D, LDAP_NAMING_VIOLATION = 0x40, LDAP_OBJECT_CLASS_VIOLATION = 0x41, LDAP_NOT_ALLOWED_ON_NONLEAF = 0x42, LDAP_NOT_ALLOWED_ON_RDN = 0x43, LDAP_ALREADY_EXISTS = 0x44, LDAP_NO_OBJECT_CLASS_MODS = 0x45, LDAP_RESULTS_TOO_LARGE = 0x46, LDAP_AFFECTS_MULTIPLE_DSAS = 0x47, LDAP_VIRTUAL_LIST_VIEW_ERROR = 0x4c, LDAP_OTHER = 0x50, LDAP_SERVER_DOWN = 0x51, LDAP_LOCAL_ERROR = 0x52, LDAP_ENCODING_ERROR = 0x53, LDAP_DECODING_ERROR = 0x54, LDAP_TIMEOUT = 0x55, LDAP_AUTH_UNKNOWN = 0x56, LDAP_FILTER_ERROR = 0x57, LDAP_USER_CANCELLED = 0x58, LDAP_PARAM_ERROR = 0x59, LDAP_NO_MEMORY = 0x5a, LDAP_CONNECT_ERROR = 0x5b, LDAP_NOT_SUPPORTED = 0x5c, LDAP_CONTROL_NOT_FOUND = 0x5d, LDAP_NO_RESULTS_RETURNED = 0x5e, LDAP_MORE_RESULTS_TO_RETURN = 0x5f, LDAP_CLIENT_LOOP = 0x60, LDAP_REFERRAL_LIMIT_EXCEEDED = 0x61 } LDAP_RETCODE; #define LDAP_SCOPE_BASE 0x00 #define LDAP_SCOPE_ONELEVEL 0x01 #define LDAP_SCOPE_SUBTREE 0x02 typedef struct berelement { PCHAR opaque; } BerElement; #define LDAP_OPT_API_INFO 0x00 #define LDAP_OPT_DESC 0x01 #define LDAP_OPT_DEREF 0x02 #define LDAP_OPT_SIZELIMIT 0x03 #define LDAP_OPT_TIMELIMIT 0x04 #define LDAP_OPT_THREAD_FN_PTRS 0x05 #define LDAP_OPT_REBIND_FN 0x06 #define LDAP_OPT_REBIND_ARG 0x07 #define LDAP_OPT_REFERRALS 0x08 #define LDAP_OPT_RESTART 0x09 #define LDAP_OPT_SSL 0x0a #define LDAP_OPT_IO_FN_PTRS 0x0b #define LDAP_OPT_CACHE_FN_PTRS 0x0d #define LDAP_OPT_CACHE_STRATEGY 0x0e #define LDAP_OPT_CACHE_ENABLE 0x0f #define LDAP_OPT_REFERRAL_HOP_LIMIT 0x10 #define LDAP_OPT_PROTOCOL_VERSION 0x11 #define LDAP_OPT_VERSION 0x11 #define LDAP_OPT_API_FEATURE_INFO 0x15 #define LDAP_OPT_HOST_NAME 0x30 #define LDAP_OPT_ERROR_NUMBER 0x31 #define LDAP_OPT_ERROR_STRING 0x32 #define LDAP_OPT_SERVER_ERROR 0x33 #define LDAP_OPT_SERVER_EXT_ERROR 0x34 #define LDAP_OPT_PING_KEEP_ALIVE 0x36 #define LDAP_OPT_PING_WAIT_TIME 0x37 #define LDAP_OPT_PING_LIMIT 0x38 #define LDAP_OPT_DNSDOMAIN_NAME 0x3b #define LDAP_OPT_GETDSNAME_FLAGS 0x3d #define LDAP_OPT_HOST_REACHABLE 0x3e #define LDAP_OPT_PROMPT_CREDENTIALS 0x3f #define LDAP_OPT_TCP_KEEPALIVE 0x40 #define LDAP_OPT_FAST_CONCURRENT_BIND 0x41 #define LDAP_OPT_SEND_TIMEOUT 0x42 #define LDAP_OPT_REFERRAL_CALLBACK 0x70 #define LDAP_OPT_CLIENT_CERTIFICATE 0x80 #define LDAP_OPT_SERVER_CERTIFICATE 0x81 #define LDAP_OPT_AUTO_RECONNECT 0x91 #define LDAP_OPT_SSPI_FLAGS 0x92 #define LDAP_OPT_SSL_INFO 0x93 #define LDAP_OPT_REF_DEREF_CONN_PER_MSG 0x94 #define LDAP_OPT_TLS LDAP_OPT_SSL #define LDAP_OPT_TLS_INFO LDAP_OPT_SSL_INFO #define LDAP_OPT_SIGN 0x95 #define LDAP_OPT_ENCRYPT 0x96 #define LDAP_OPT_SASL_METHOD 0x97 #define LDAP_OPT_AREC_EXCLUSIVE 0x98 #define LDAP_OPT_SECURITY_CONTEXT 0x99 #define LDAP_OPT_ROOTDSE_CACHE 0x9a #define LDAP_OPT_ON ((void *)1) #define LDAP_OPT_OFF ((void *)0) #define LDAP_VERSION1 1 #define LDAP_VERSION2 2 #define LDAP_VERSION3 3 #define LDAP_VERSION LDAP_VERSION2 #define LDAP_MSG_ONE 0 #define LDAP_MSG_ALL 1 #define LDAP_MSG_RECEIVED 2 #define LDAP_RES_BIND 0x61 #define LDAP_RES_SEARCH_ENTRY 0x64 #define LDAP_RES_SEARCH_RESULT 0x65 #define LDAP_RES_MODIFY 0x67 #define LDAP_RES_ADD 0x69 #define LDAP_RES_DELETE 0x6b #define LDAP_RES_MODRDN 0x6d #define LDAP_RES_COMPARE 0x6f #define LDAP_RES_SESSION 0x72 #define LDAP_RES_REFERRAL 0x73 #define LDAP_RES_EXTENDED 0x78 #define LDAP_RES_ANY (-1) typedef struct ldap { struct { UINT_PTR sb_sd; UCHAR Reserved1[41]; ULONG_PTR sb_naddr; UCHAR Reserved2[24]; } ld_sb; PCHAR ld_host; ULONG ld_version; UCHAR ld_lberoptions; ULONG ld_deref; ULONG ld_timelimit; ULONG ld_sizelimit; ULONG ld_errno; PCHAR ld_matched; PCHAR ld_error; ULONG ld_msgid; UCHAR Reserved3[25]; ULONG ld_cldaptries; ULONG ld_cldaptimeout; ULONG ld_refhoplimit; ULONG ld_options; } LDAP, *PLDAP; #define LDAP_MOD_ADD 0x00 #define LDAP_MOD_DELETE 0x01 #define LDAP_MOD_REPLACE 0x02 #define LDAP_MOD_BVALUES 0x80 typedef struct ldapmodA { ULONG mod_op; PCHAR mod_type; union { PCHAR *modv_strvals; struct berval **modv_bvals; } mod_vals; } LDAPModA, *PLDAPModA; typedef struct ldapmodW { ULONG mod_op; PWCHAR mod_type; union { PWCHAR *modv_strvals; struct berval **modv_bvals; } mod_vals; } LDAPModW, *PLDAPModW; DECL_WINELIB_TYPE_AW(LDAPMod) DECL_WINELIB_TYPE_AW(PLDAPMod) typedef struct l_timeval { LONG tv_sec; LONG tv_usec; } LDAP_TIMEVAL, *PLDAP_TIMEVAL; typedef struct ldapmsg { ULONG lm_msgid; ULONG lm_msgtype; PVOID lm_ber; struct ldapmsg *lm_chain; struct ldapmsg *lm_next; ULONG lm_time; PLDAP Connection; PVOID Request; ULONG lm_returncode; USHORT lm_referral; BOOLEAN lm_chased; BOOLEAN lm_eom; BOOLEAN ConnectionReferenced; } LDAPMessage, *PLDAPMessage; #define LAPI_MAJOR_VER1 1 #define LAPI_MINOR_VER1 1 typedef struct ldap_version_info { ULONG lv_size; ULONG lv_major; ULONG lv_minor; } LDAP_VERSION_INFO, *PLDAP_VERSION_INFO; typedef struct berval { ULONG bv_len; PCHAR bv_val; } LDAP_BERVAL, *PLDAP_BERVAL, BERVAL, *PBERVAL, BerValue; typedef struct ldapcontrolA { PCHAR ldctl_oid; struct berval ldctl_value; BOOLEAN ldctl_iscritical; } LDAPControlA, *PLDAPControlA; typedef struct ldapcontrolW { PWCHAR ldctl_oid; struct berval ldctl_value; BOOLEAN ldctl_iscritical; } LDAPControlW, *PLDAPControlW; DECL_WINELIB_TYPE_AW(LDAPControl) DECL_WINELIB_TYPE_AW(PLDAPControl) typedef struct ldapvlvinfo { int ldvlv_version; ULONG ldvlv_before_count; ULONG ldvlv_after_count; ULONG ldvlv_offset; ULONG ldvlv_count; PBERVAL ldvlv_attrvalue; PBERVAL ldvlv_context; VOID *ldvlv_extradata; } LDAPVLVInfo, *PLDAPVLVInfo; typedef struct ldapsearch LDAPSearch, *PLDAPSearch; typedef struct ldapsortkeyA { PCHAR sk_attrtype; PCHAR sk_matchruleoid; BOOLEAN sk_reverseorder; } LDAPSortKeyA, *PLDAPSortKeyA; typedef struct ldapsortkeyW { PWCHAR sk_attrtype; PWCHAR sk_matchruleoid; BOOLEAN sk_reverseorder; } LDAPSortKeyW, *PLDAPSortKeyW; DECL_WINELIB_TYPE_AW(LDAPSortKey) DECL_WINELIB_TYPE_AW(PLDAPSortKey) #define LDAP_API_INFO_VERSION 1 typedef struct ldapapiinfoA { int ldapai_info_version; int ldapai_api_version; int ldapai_protocol_version; char **ldapai_extensions; char *ldapai_vendor_name; int ldapai_vendor_version; } LDAPAPIInfoA; typedef struct ldapapiinfoW { int ldapai_info_version; int ldapai_api_version; int ldapai_protocol_version; PWCHAR *ldapai_extensions; PWCHAR ldapai_vendor_name; int ldapai_vendor_version; } LDAPAPIInfoW; DECL_WINELIB_TYPE_AW(LDAPAPIInfo) #define LDAP_FEATURE_INFO_VERSION 1 typedef struct ldap_apifeature_infoA { int ldapaif_info_version; char *ldapaif_name; int ldapaif_version; } LDAPAPIFeatureInfoA; typedef struct ldap_apifeature_infoW { int ldapaif_info_version; PWCHAR ldapaif_name; int ldapaif_version; } LDAPAPIFeatureInfoW; DECL_WINELIB_TYPE_AW(LDAPAPIFeatureInfo) #ifdef __cplusplus extern "C" { #endif LDAP * CDECL cldap_openA(PCHAR,ULONG); LDAP * CDECL cldap_openW(PWCHAR,ULONG); #define cldap_open WINELIB_NAME_AW(cldap_open) ULONG CDECL ldap_abandon(LDAP*,ULONG); ULONG CDECL ldap_addA(LDAP*,PCHAR,LDAPModA*[]); ULONG CDECL ldap_addW(LDAP*,PWCHAR,LDAPModW*[]); #define ldap_add WINELIB_NAME_AW(ldap_add) ULONG CDECL ldap_add_extA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*); ULONG CDECL ldap_add_extW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*); #define ldap_add_ext WINELIB_NAME_AW(ldap_add_ext) ULONG CDECL ldap_add_ext_sA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*); ULONG CDECL ldap_add_ext_sW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*); #define ldap_add_ext_s WINELIB_NAME_AW(ldap_add_ext_s) ULONG CDECL ldap_add_sA(LDAP*,PCHAR,LDAPModA*[]); ULONG CDECL ldap_add_sW(LDAP*,PWCHAR,LDAPModW*[]); #define ldap_add_s WINELIB_NAME_AW(ldap_add_s) ULONG CDECL ldap_bindA(LDAP*,PCHAR,PCHAR,ULONG); ULONG CDECL ldap_bindW(LDAP*,PWCHAR,PWCHAR,ULONG); #define ldap_bind WINELIB_NAME_AW(ldap_bind) ULONG CDECL ldap_bind_sA(LDAP*,PCHAR,PCHAR,ULONG); ULONG CDECL ldap_bind_sW(LDAP*,PWCHAR,PWCHAR,ULONG); #define ldap_bind_s WINELIB_NAME_AW(ldap_bind_s) ULONG CDECL ldap_check_filterA(LDAP*,PCHAR); ULONG CDECL ldap_check_filterW(LDAP*,PWCHAR); #define ldap_check_filter WINELIB_NAME_AW(ldap_check_filter) ULONG CDECL ldap_cleanup(HANDLE); ULONG CDECL ldap_close_extended_op(LDAP*,ULONG); LDAP* CDECL ldap_conn_from_msg(LDAP*,LDAPMessage*); ULONG CDECL ldap_compareA(LDAP*,PCHAR,PCHAR,PCHAR); ULONG CDECL ldap_compareW(LDAP*,PWCHAR,PWCHAR,PWCHAR); #define ldap_compare WINELIB_NAME_AW(ldap_compare) ULONG CDECL ldap_compare_extA(LDAP*,PCHAR,PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*); ULONG CDECL ldap_compare_extW(LDAP*,PWCHAR,PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*); #define ldap_compare_ext WINELIB_NAME_AW(ldap_compare_ext) ULONG CDECL ldap_compare_ext_sA(LDAP*,PCHAR,PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*); ULONG CDECL ldap_compare_ext_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*); #define ldap_compare_ext_s WINELIB_NAME_AW(ldap_compare_ext_s) ULONG CDECL ldap_compare_sA(LDAP*,PCHAR,PCHAR,PCHAR); ULONG CDECL ldap_compare_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR); #define ldap_compare_s WINELIB_NAME_AW(ldap_compare_s) ULONG CDECL ldap_connect(LDAP*,struct l_timeval*); ULONG CDECL ldap_control_freeA(LDAPControlA*); ULONG CDECL ldap_control_freeW(LDAPControlW*); #define ldap_control_free WINELIB_NAME_AW(ldap_control_free) ULONG CDECL ldap_controls_freeA(LDAPControlA**); ULONG CDECL ldap_controls_freeW(LDAPControlW**); #define ldap_controls_free WINELIB_NAME_AW(ldap_controls_free) ULONG CDECL ldap_count_entries(LDAP*,LDAPMessage*); ULONG CDECL ldap_count_references(LDAP*,LDAPMessage*); ULONG CDECL ldap_count_values_len(struct berval**); ULONG CDECL ldap_count_valuesA(PCHAR*); ULONG CDECL ldap_count_valuesW(PWCHAR*); #define ldap_count_values WINELIB_NAME_AW(ldap_count_values) ULONG CDECL ldap_create_page_controlA(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlA*); ULONG CDECL ldap_create_page_controlW(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlW*); #define ldap_create_page_control WINELIB_NAME_AW(ldap_create_page_control) ULONG CDECL ldap_create_sort_controlA(PLDAP,PLDAPSortKeyA*,UCHAR,PLDAPControlA*); ULONG CDECL ldap_create_sort_controlW(PLDAP,PLDAPSortKeyW*,UCHAR,PLDAPControlW*); #define ldap_create_sort_control WINELIB_NAME_AW(ldap_create_sort_control) INT CDECL ldap_create_vlv_controlA(PLDAP,PLDAPVLVInfo,UCHAR,PLDAPControlA*); INT CDECL ldap_create_vlv_controlW(PLDAP,PLDAPVLVInfo,UCHAR,PLDAPControlW*); #define ldap_create_vlv_control WINELIB_NAME_AW(ldap_create_vlv_control) ULONG CDECL ldap_deleteA(LDAP*,PCHAR); ULONG CDECL ldap_deleteW(LDAP*,PWCHAR); #define ldap_delete WINELIB_NAME_AW(ldap_delete) ULONG CDECL ldap_delete_extA(LDAP*,PCHAR,PLDAPControlA*,PLDAPControlA*,ULONG*); ULONG CDECL ldap_delete_extW(LDAP*,PWCHAR,PLDAPControlW*,PLDAPControlW*,ULONG*); #define ldap_delete_ext WINELIB_NAME_AW(ldap_delete_ext) ULONG CDECL ldap_delete_ext_sA(LDAP*,PCHAR,PLDAPControlA*,PLDAPControlA*); ULONG CDECL ldap_delete_ext_sW(LDAP*,PWCHAR,PLDAPControlW*,PLDAPControlW*); #define ldap_delete_ext_s WINELIB_NAME_AW(ldap_delete_ext_s) ULONG CDECL ldap_delete_sA(LDAP*,PCHAR); ULONG CDECL ldap_delete_sW(LDAP*,PWCHAR); #define ldap_delete_s WINELIB_NAME_AW(ldap_delete_s) PCHAR CDECL ldap_dn2ufnA(PCHAR); PWCHAR CDECL ldap_dn2ufnW(PWCHAR); #define ldap_dn2ufn WINELIB_NAME_AW(ldap_dn2ufn) ULONG CDECL ldap_encode_sort_controlA(PLDAP,PLDAPSortKeyA*,PLDAPControlA,BOOLEAN); ULONG CDECL ldap_encode_sort_controlW(PLDAP,PLDAPSortKeyW*,PLDAPControlW,BOOLEAN); #define ldap_encode_sort_control WINELIB_NAME_AW(ldap_encode_sort_control) PCHAR CDECL ldap_err2stringA(ULONG); PWCHAR CDECL ldap_err2stringW(ULONG); #define ldap_err2string WINELIB_NAME_AW(ldap_err2string) ULONG CDECL ldap_escape_filter_elementA(PCHAR,ULONG,PCHAR,ULONG); ULONG CDECL ldap_escape_filter_elementW(PCHAR,ULONG,PWCHAR,ULONG); #define ldap_escape_filter_element WINELIB_NAME_AW(ldap_escape_filter_element) PCHAR* CDECL ldap_explode_dnA(PCHAR,ULONG); PWCHAR* CDECL ldap_explode_dnW(PWCHAR,ULONG); #define ldap_explode_dn WINELIB_NAME_AW(ldap_explode_dn) ULONG CDECL ldap_extended_operationA(LDAP*,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*); ULONG CDECL ldap_extended_operationW(LDAP*,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*); #define ldap_extended_operation WINELIB_NAME_AW(ldap_extended_operation) ULONG CDECL ldap_extended_operation_sA(LDAP*,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,PCHAR*,struct berval**); ULONG CDECL ldap_extended_operation_sW(LDAP*,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,PWCHAR*,struct berval**); #define ldap_extended_operation_s WINELIB_NAME_AW(ldap_extended_operation_s) PCHAR CDECL ldap_first_attributeA(LDAP*,LDAPMessage*,BerElement**); PWCHAR CDECL ldap_first_attributeW(LDAP*,LDAPMessage*,BerElement**); #define ldap_first_attribute WINELIB_NAME_AW(ldap_first_attribute) LDAPMessage* CDECL ldap_first_entry(LDAP*,LDAPMessage*); LDAPMessage* CDECL ldap_first_reference(LDAP*,LDAPMessage*); ULONG CDECL ldap_free_controlsA(LDAPControlA**); ULONG CDECL ldap_free_controlsW(LDAPControlW**); #define ldap_free_controls WINELIB_NAME_AW(ldap_free_controls) PCHAR CDECL ldap_get_dnA(LDAP*,LDAPMessage*); PWCHAR CDECL ldap_get_dnW(LDAP*,LDAPMessage*); #define ldap_get_dn WINELIB_NAME_AW(ldap_get_dn) ULONG CDECL ldap_get_next_page(PLDAP,PLDAPSearch,ULONG,ULONG*); ULONG CDECL ldap_get_next_page_s(PLDAP,PLDAPSearch,struct l_timeval*,ULONG,ULONG*,LDAPMessage**); ULONG CDECL ldap_get_optionA(LDAP*,int,void*); ULONG CDECL ldap_get_optionW(LDAP*,int,void*); #define ldap_get_option WINELIB_NAME_AW(ldap_get_option) ULONG CDECL ldap_get_paged_count(LDAP*,PLDAPSearch,ULONG*,LDAPMessage*); PCHAR* CDECL ldap_get_valuesA(LDAP*,LDAPMessage*,PCHAR); PWCHAR* CDECL ldap_get_valuesW(LDAP*,LDAPMessage*,PWCHAR); #define ldap_get_values WINELIB_NAME_AW(ldap_get_values) struct berval ** CDECL ldap_get_values_lenA(LDAP*,LDAPMessage*,PCHAR); struct berval ** CDECL ldap_get_values_lenW(LDAP*,LDAPMessage*,PWCHAR); #define ldap_get_values_len WINELIB_NAME_AW(ldap_get_values_len) LDAP* CDECL ldap_initA(const PCHAR,ULONG); LDAP* CDECL ldap_initW(const PWCHAR,ULONG); #define ldap_init WINELIB_NAME_AW(ldap_init) VOID CDECL ldap_memfreeA(PCHAR); VOID CDECL ldap_memfreeW(PWCHAR); #define ldap_memfree WINELIB_NAME_AW(ldap_memfree) ULONG CDECL ldap_modifyA(LDAP*,PCHAR,LDAPModA*[]); ULONG CDECL ldap_modifyW(LDAP*,PWCHAR,LDAPModW*[]); #define ldap_modify WINELIB_NAME_AW(ldap_modify) ULONG CDECL ldap_modify_extA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*); ULONG CDECL ldap_modify_extW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*); #define ldap_modify_ext WINELIB_NAME_AW(ldap_modify_ext) ULONG CDECL ldap_modify_ext_sA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*); ULONG CDECL ldap_modify_ext_sW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*); #define ldap_modify_ext_s WINELIB_NAME_AW(ldap_modify_ext_s) ULONG CDECL ldap_modify_sA(LDAP*,PCHAR,LDAPModA*[]); ULONG CDECL ldap_modify_sW(LDAP*,PWCHAR,LDAPModW*[]); #define ldap_modify_s WINELIB_NAME_AW(ldap_modify_s) ULONG CDECL ldap_modrdnA(LDAP*,PCHAR,PCHAR); ULONG CDECL ldap_modrdnW(LDAP*,PWCHAR,PWCHAR); #define ldap_modrdn WINELIB_NAME_AW(ldap_modrdn) ULONG CDECL ldap_modrdn2A(LDAP*,PCHAR,PCHAR,INT); ULONG CDECL ldap_modrdn2W(LDAP*,PWCHAR,PWCHAR,INT); #define ldap_modrdn2 WINELIB_NAME_AW(ldap_modrdn2) ULONG CDECL ldap_modrdn2_sA(LDAP*,PCHAR,PCHAR,INT); ULONG CDECL ldap_modrdn2_sW(LDAP*,PWCHAR,PWCHAR,INT); #define ldap_modrdn2_s WINELIB_NAME_AW(ldap_modrdn2_s) ULONG CDECL ldap_modrdn_sA(LDAP*,PCHAR,PCHAR); ULONG CDECL ldap_modrdn_sW(LDAP*,PWCHAR,PWCHAR); #define ldap_modrdn_s WINELIB_NAME_AW(ldap_modrdn_s) ULONG CDECL ldap_msgfree(LDAPMessage*); PCHAR CDECL ldap_next_attributeA(LDAP*,LDAPMessage*,BerElement*); PWCHAR CDECL ldap_next_attributeW(LDAP*,LDAPMessage*,BerElement*); #define ldap_next_attribute WINELIB_NAME_AW(ldap_next_attribute) LDAPMessage * CDECL ldap_next_entry(LDAP*,LDAPMessage*); LDAP * CDECL ldap_openA(PCHAR,ULONG); LDAP * CDECL ldap_openW(PWCHAR,ULONG); #define ldap_open WINELIB_NAME_AW(ldap_open) ULONG CDECL ldap_parse_extended_resultA(LDAP*,LDAPMessage*,PCHAR*,struct berval**,BOOLEAN); ULONG CDECL ldap_parse_extended_resultW(LDAP*,LDAPMessage*,PWCHAR*,struct berval**,BOOLEAN); #define ldap_parse_extended_result WINELIB_NAME_AW(ldap_parse_extended_result) ULONG CDECL ldap_parse_page_controlA(LDAP*,PLDAPControlA*,ULONG*,struct berval**); ULONG CDECL ldap_parse_page_controlW(LDAP*,PLDAPControlW*,ULONG*,struct berval**); #define ldap_parse_page_control WINELIB_NAME_AW(ldap_parse_page_control) ULONG CDECL ldap_parse_referenceA(LDAP*,LDAPMessage*,PCHAR**); ULONG CDECL ldap_parse_referenceW(LDAP*,LDAPMessage*,PWCHAR**); #define ldap_parse_reference WINELIB_NAME_AW(ldap_parse_reference) ULONG CDECL ldap_result2error(LDAP*,LDAPMessage*,ULONG); ULONG CDECL ldap_parse_resultA(LDAP*,LDAPMessage*,ULONG*,PCHAR*,PCHAR*,PCHAR**,PLDAPControlA**,BOOLEAN); ULONG CDECL ldap_parse_resultW(LDAP*,LDAPMessage*,ULONG*,PWCHAR*,PWCHAR*,PWCHAR**,PLDAPControlW**,BOOLEAN); #define ldap_parse_result WINELIB_NAME_AW(ldap_parse_result) ULONG CDECL ldap_parse_sort_controlA(LDAP*,PLDAPControlA*,ULONG*,PCHAR*); ULONG CDECL ldap_parse_sort_controlW(LDAP*,PLDAPControlW*,ULONG*,PWCHAR*); #define ldap_parse_sort_control WINELIB_NAME_AW(ldap_parse_sort_control) INT CDECL ldap_parse_vlv_controlA(PLDAP,PLDAPControlA*,PULONG,PULONG,PBERVAL*,PINT); INT CDECL ldap_parse_vlv_controlW(PLDAP,PLDAPControlW*,PULONG,PULONG,PBERVAL*,PINT); #define ldap_parse_vlv_control WINELIB_NAME_AW(ldap_parse_vlv_control) void CDECL ldap_perror(LDAP*,const PCHAR); ULONG CDECL ldap_rename_extA(LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*,ULONG*); ULONG CDECL ldap_rename_extW(LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*,ULONG*); #define ldap_rename_ext WINELIB_NAME_AW(ldap_rename_ext) ULONG CDECL ldap_rename_ext_sA(LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*); ULONG CDECL ldap_rename_ext_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*); #define ldap_rename_ext_s WINELIB_NAME_AW(ldap_rename_ext_s) ULONG CDECL ldap_result(LDAP*,ULONG,ULONG,struct l_timeval*,LDAPMessage**); ULONG CDECL ldap_result2error(LDAP*,LDAPMessage*,ULONG); ULONG CDECL ldap_sasl_bindA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,int*); ULONG CDECL ldap_sasl_bindW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,int*); #define ldap_sasl_bind WINELIB_NAME_AW(ldap_sasl_bind) ULONG CDECL ldap_sasl_bind_sA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,PBERVAL*); ULONG CDECL ldap_sasl_bind_sW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,PBERVAL*); #define ldap_sasl_bind_s WINELIB_NAME_AW(ldap_sasl_bind_s) ULONG CDECL ldap_simple_bindA(LDAP*,PCHAR,PCHAR); ULONG CDECL ldap_simple_bindW(LDAP*,PWCHAR,PWCHAR); #define ldap_simple_bind WINELIB_NAME_AW(ldap_simple_bind) ULONG CDECL ldap_simple_bind_sA(LDAP*,PCHAR,PCHAR); ULONG CDECL ldap_simple_bind_sW(LDAP*,PWCHAR,PWCHAR); #define ldap_simple_bind_s WINELIB_NAME_AW(ldap_simple_bind_s) ULONG CDECL ldap_search_abandon_page(PLDAP,PLDAPSearch); ULONG CDECL ldap_searchA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG); ULONG CDECL ldap_searchW(LDAP*,PWCHAR,ULONG,PWCHAR,PCHAR[],ULONG); #define ldap_search WINELIB_NAME_AW(ldap_search) ULONG CDECL ldap_search_extA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*, PLDAPControlA*,ULONG,ULONG,ULONG*); ULONG CDECL ldap_search_extW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*, PLDAPControlW*,ULONG,ULONG,ULONG*); #define ldap_search_ext WINELIB_NAME_AW(ldap_search_ext) ULONG CDECL ldap_search_ext_sA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*, PLDAPControlA*,struct l_timeval*,ULONG,LDAPMessage**); ULONG CDECL ldap_search_ext_sW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*, PLDAPControlW*,struct l_timeval*,ULONG,LDAPMessage**); #define ldap_search_ext_s WINELIB_NAME_AW(ldap_search_ext_s) PLDAPSearch CDECL ldap_search_init_pageA(PLDAP,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*, PLDAPControlA*,ULONG,ULONG,PLDAPSortKeyA*); PLDAPSearch CDECL ldap_search_init_pageW(PLDAP,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*, PLDAPControlW*,ULONG,ULONG, PLDAPSortKeyW*); #define ldap_search_init_page WINELIB_NAME_AW(ldap_search_init_page) ULONG CDECL ldap_search_sA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,LDAPMessage**); ULONG CDECL ldap_search_sW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,LDAPMessage**); #define ldap_search_s WINELIB_NAME_AW(ldap_search_s) ULONG CDECL ldap_search_stA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG, struct l_timeval*,LDAPMessage**); ULONG CDECL ldap_search_stW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG, struct l_timeval*,LDAPMessage**); #define ldap_search_st WINELIB_NAME_AW(ldap_search_st) ULONG CDECL ldap_set_optionA(LDAP*,int,void*); ULONG CDECL ldap_set_optionW(LDAP*,int,void*); #define ldap_set_option WINELIB_NAME_AW(ldap_set_option) LDAP * CDECL ldap_sslinitA(PCHAR,ULONG,int); LDAP * CDECL ldap_sslinitW(PWCHAR,ULONG,int); #define ldap_sslinit WINELIB_NAME_AW(ldap_sslinit) ULONG CDECL ldap_start_tls_sA(LDAP*,PULONG,LDAPMessage**,PLDAPControlA*,PLDAPControlA*); ULONG CDECL ldap_start_tls_sW(LDAP*,PULONG,LDAPMessage**,PLDAPControlW*,PLDAPControlW*); #define ldap_start_tls_s WINELIB_NAME_AW(ldap_start_tls_s) ULONG CDECL ldap_startup(PLDAP_VERSION_INFO,HANDLE*); BOOLEAN CDECL ldap_stop_tls_s(LDAP*); ULONG CDECL ldap_ufn2dnA(PCHAR,PCHAR*); ULONG CDECL ldap_ufn2dnW(PWCHAR,PWCHAR*); #define ldap_ufn2dn WINELIB_NAME_AW(ldap_ufn2dn) ULONG CDECL ldap_unbind(LDAP*); ULONG CDECL ldap_unbind_s(LDAP*); ULONG CDECL ldap_value_freeA(PCHAR*); ULONG CDECL ldap_value_freeW(PWCHAR*); #define ldap_value_free WINELIB_NAME_AW(ldap_value_free) ULONG CDECL ldap_value_free_len(struct berval**); BerElement* CDECL ber_alloc_t(INT); BERVAL* CDECL ber_bvdup(BERVAL*); void CDECL ber_bvecfree(PBERVAL*); void CDECL ber_bvfree(BERVAL*); ULONG CDECL ber_first_element(BerElement*,ULONG*,CHAR**); INT CDECL ber_flatten(BerElement*,PBERVAL*); void CDECL ber_free(BerElement*,INT); BerElement* CDECL ber_init(BERVAL*); ULONG CDECL ber_next_element(BerElement*,ULONG*,CHAR*); ULONG CDECL ber_peek_tag(BerElement*,ULONG*); INT WINAPIV ber_printf(BerElement*,PCHAR,...); ULONG CDECL ber_skip_tag(BerElement*,ULONG*); INT WINAPIV ber_scanf(BerElement*,PCHAR,...); ULONG CDECL LdapGetLastError(void); ULONG CDECL LdapMapErrorToWin32(ULONG); int CDECL LdapUnicodeToUTF8(LPCWSTR,int,LPSTR,int); int CDECL LdapUTF8ToUnicode(LPCSTR,int,LPWSTR,int); #ifdef __cplusplus } #endif #endif /* __WINE_WINLDAP_H */ ================================================ FILE: wine/windows/winnetwk.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINNETWK_H_ #define _WINNETWK_H_ #ifdef __cplusplus extern "C" { #endif /* * Network types */ #define WNNC_NET_MSNET 0x00010000 #define WNNC_NET_LANMAN 0x00020000 #define WNNC_NET_NETWARE 0x00030000 #define WNNC_NET_VINES 0x00040000 #define WNNC_NET_10NET 0x00050000 #define WNNC_NET_LOCUS 0x00060000 #define WNNC_NET_SUN_PC_NFS 0x00070000 #define WNNC_NET_LANSTEP 0x00080000 #define WNNC_NET_9TILES 0x00090000 #define WNNC_NET_LANTASTIC 0x000A0000 #define WNNC_NET_AS400 0x000B0000 #define WNNC_NET_FTP_NFS 0x000C0000 #define WNNC_NET_PATHWORKS 0x000D0000 #define WNNC_NET_LIFENET 0x000E0000 #define WNNC_NET_POWERLAN 0x000F0000 #define WNNC_NET_BWNFS 0x00100000 #define WNNC_NET_COGENT 0x00110000 #define WNNC_NET_FARALLON 0x00120000 #define WNNC_NET_APPLETALK 0x00130000 #define WNNC_NET_INTERGRAPH 0x00140000 /* * Network resources */ #define RESOURCE_CONNECTED 0x00000001 #define RESOURCE_GLOBALNET 0x00000002 #define RESOURCE_REMEMBERED 0x00000003 #define RESOURCE_RECENT 0x00000004 #define RESOURCE_CONTEXT 0x00000005 #define RESOURCETYPE_ANY 0x00000000 #define RESOURCETYPE_DISK 0x00000001 #define RESOURCETYPE_PRINT 0x00000002 #define RESOURCETYPE_RESERVED 0x00000008 #define RESOURCETYPE_UNKNOWN 0xFFFFFFFF #define RESOURCEUSAGE_CONNECTABLE 0x00000001 #define RESOURCEUSAGE_CONTAINER 0x00000002 #define RESOURCEUSAGE_NOLOCALDEVICE 0x00000004 #define RESOURCEUSAGE_SIBLING 0x00000008 #define RESOURCEUSAGE_ATTACHED 0x00000010 #define RESOURCEUSAGE_ALL (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED) #define RESOURCEUSAGE_RESERVED 0x80000000 #define RESOURCEDISPLAYTYPE_GENERIC 0x00000000 #define RESOURCEDISPLAYTYPE_DOMAIN 0x00000001 #define RESOURCEDISPLAYTYPE_SERVER 0x00000002 #define RESOURCEDISPLAYTYPE_SHARE 0x00000003 #define RESOURCEDISPLAYTYPE_FILE 0x00000004 #define RESOURCEDISPLAYTYPE_GROUP 0x00000005 #define RESOURCEDISPLAYTYPE_NETWORK 0x00000006 #define RESOURCEDISPLAYTYPE_ROOT 0x00000007 #define RESOURCEDISPLAYTYPE_SHAREADMIN 0x00000008 #define RESOURCEDISPLAYTYPE_DIRECTORY 0x00000009 #define RESOURCEDISPLAYTYPE_TREE 0x0000000A typedef struct { DWORD dwScope; DWORD dwType; DWORD dwDisplayType; DWORD dwUsage; LPSTR lpLocalName; LPSTR lpRemoteName; LPSTR lpComment ; LPSTR lpProvider; } NETRESOURCEA,*LPNETRESOURCEA; typedef struct { DWORD dwScope; DWORD dwType; DWORD dwDisplayType; DWORD dwUsage; LPWSTR lpLocalName; LPWSTR lpRemoteName; LPWSTR lpComment ; LPWSTR lpProvider; } NETRESOURCEW,*LPNETRESOURCEW; DECL_WINELIB_TYPE_AW(NETRESOURCE) DECL_WINELIB_TYPE_AW(LPNETRESOURCE) /* * Network connections */ #define NETPROPERTY_PERSISTENT 1 #define CONNECT_UPDATE_PROFILE 0x00000001 #define CONNECT_UPDATE_RECENT 0x00000002 #define CONNECT_TEMPORARY 0x00000004 #define CONNECT_INTERACTIVE 0x00000008 #define CONNECT_PROMPT 0x00000010 #define CONNECT_NEED_DRIVE 0x00000020 #define CONNECT_REFCOUNT 0x00000040 #define CONNECT_REDIRECT 0x00000080 #define CONNECT_LOCALDRIVE 0x00000100 #define CONNECT_CURRENT_MEDIA 0x00000200 DWORD WINAPI WNetAddConnectionA(LPCSTR,LPCSTR,LPCSTR); DWORD WINAPI WNetAddConnectionW(LPCWSTR,LPCWSTR,LPCWSTR); #define WNetAddConnection WINELIB_NAME_AW(WNetAddConnection) DWORD WINAPI WNetAddConnection2A(LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD); DWORD WINAPI WNetAddConnection2W(LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD); #define WNetAddConnection2 WINELIB_NAME_AW(WNetAddConnection2) DWORD WINAPI WNetAddConnection3A(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD); DWORD WINAPI WNetAddConnection3W(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD); #define WNetAddConnection3 WINELIB_NAME_AW(WNetAddConnection3) DWORD WINAPI WNetCancelConnectionA(LPCSTR,BOOL); DWORD WINAPI WNetCancelConnectionW(LPCWSTR,BOOL); #define WNetCancelConnection WINELIB_NAME_AW(WNetCancelConnection) DWORD WINAPI WNetCancelConnection2A(LPCSTR,DWORD,BOOL); DWORD WINAPI WNetCancelConnection2W(LPCWSTR,DWORD,BOOL); #define WNetCancelConnection2 WINELIB_NAME_AW(WNetCancelConnection2) DWORD WINAPI WNetGetConnectionA(LPCSTR,LPSTR,LPDWORD); DWORD WINAPI WNetGetConnectionW(LPCWSTR,LPWSTR,LPDWORD); #define WNetGetConnection WINELIB_NAME_AW(WNetGetConnection) DWORD WINAPI WNetGetLastErrorA(LPDWORD,LPSTR,DWORD,LPSTR,DWORD); DWORD WINAPI WNetGetLastErrorW(LPDWORD,LPWSTR,DWORD,LPWSTR,DWORD); #define WNetGetLastError WINELIB_NAME_AW(WNetGetLastError) DWORD WINAPI WNetRestoreConnectionA(HWND,LPCSTR); DWORD WINAPI WNetRestoreConnectionW(HWND,LPCWSTR); #define WNetRestoreConnection WINELIB_NAME_AW(WNetRestoreConnection) DWORD WINAPI WNetUseConnectionA(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD,LPSTR,LPDWORD,LPDWORD); DWORD WINAPI WNetUseConnectionW(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPDWORD,LPDWORD); #define WNetUseConnection WINELIB_NAME_AW(WNetUseConnection) DWORD WINAPI WNetSetConnectionA(LPCSTR,DWORD,LPVOID); DWORD WINAPI WNetSetConnectionW(LPCWSTR,DWORD,LPVOID); #define WNetSetConnection WINELIB_NAME_AW(WNetSetConnection) /* * Network connection dialogs */ typedef struct { DWORD cbStructure; /* size of this structure in bytes */ HWND hwndOwner; /* owner window for the dialog */ LPNETRESOURCEA lpConnRes;/* Requested Resource info */ DWORD dwFlags; /* flags (see below) */ DWORD dwDevNum; /* number of devices connected to */ } CONNECTDLGSTRUCTA, *LPCONNECTDLGSTRUCTA; typedef struct { DWORD cbStructure; /* size of this structure in bytes */ HWND hwndOwner; /* owner window for the dialog */ LPNETRESOURCEW lpConnRes;/* Requested Resource info */ DWORD dwFlags; /* flags (see below) */ DWORD dwDevNum; /* number of devices connected to */ } CONNECTDLGSTRUCTW, *LPCONNECTDLGSTRUCTW; DECL_WINELIB_TYPE_AW(CONNECTDLGSTRUCT) DECL_WINELIB_TYPE_AW(LPCONNECTDLGSTRUCT) #define CONNDLG_RO_PATH 0x00000001 /* Resource path should be read-only */ #define CONNDLG_CONN_POINT 0x00000002 /* Netware -style movable connection point enabled */ #define CONNDLG_USE_MRU 0x00000004 /* Use MRU combobox */ #define CONNDLG_HIDE_BOX 0x00000008 /* Hide persistent connect checkbox */ #define CONNDLG_PERSIST 0x00000010 /* Force persistent connection */ #define CONNDLG_NOT_PERSIST 0x00000020 /* Force connection NOT persistent */ typedef struct { DWORD cbStructure; /* size of this structure in bytes */ HWND hwndOwner; /* owner window for the dialog */ LPSTR lpLocalName; /* local device name */ LPSTR lpRemoteName; /* network resource name */ DWORD dwFlags; /* flags */ } DISCDLGSTRUCTA, *LPDISCDLGSTRUCTA; typedef struct { DWORD cbStructure; /* size of this structure in bytes */ HWND hwndOwner; /* owner window for the dialog */ LPWSTR lpLocalName; /* local device name */ LPWSTR lpRemoteName; /* network resource name */ DWORD dwFlags; /* flags */ } DISCDLGSTRUCTW, *LPDISCDLGSTRUCTW; DECL_WINELIB_TYPE_AW(DISCDLGSTRUCT) DECL_WINELIB_TYPE_AW(LPDISCDLGSTRUCT) #define DISC_UPDATE_PROFILE 0x00000001 #define DISC_NO_FORCE 0x00000040 DWORD WINAPI WNetConnectionDialog(HWND,DWORD); DWORD WINAPI WNetDisconnectDialog(HWND,DWORD); DWORD WINAPI WNetConnectionDialog1A(LPCONNECTDLGSTRUCTA); DWORD WINAPI WNetConnectionDialog1W(LPCONNECTDLGSTRUCTW); #define WNetConnectionDialog1 WINELIB_NAME_AW(WNetConnectionDialog1) DWORD WINAPI WNetDisconnectDialog1A(LPDISCDLGSTRUCTA); DWORD WINAPI WNetDisconnectDialog1W(LPDISCDLGSTRUCTW); #define WNetDisconnectDialog1 WINELIB_NAME_AW(WNetDisconnectDialog1) /* * Network browsing */ DWORD WINAPI WNetOpenEnumA(DWORD,DWORD,DWORD,LPNETRESOURCEA,LPHANDLE); DWORD WINAPI WNetOpenEnumW(DWORD,DWORD,DWORD,LPNETRESOURCEW,LPHANDLE); #define WNetOpenEnum WINELIB_NAME_AW(WNetOpenEnum) DWORD WINAPI WNetEnumResourceA(HANDLE,LPDWORD,LPVOID,LPDWORD); DWORD WINAPI WNetEnumResourceW(HANDLE,LPDWORD,LPVOID,LPDWORD); #define WNetEnumResource WINELIB_NAME_AW(WNetEnumResource) DWORD WINAPI WNetGetResourceInformationA(LPNETRESOURCEA,LPVOID,LPDWORD,LPSTR*); DWORD WINAPI WNetGetResourceInformationW(LPNETRESOURCEW,LPVOID,LPDWORD,LPWSTR*); #define WNetGetResourceInformation WINELIB_NAME_AW(WNetGetResourceInformation) DWORD WINAPI WNetGetResourceParentA(LPNETRESOURCEA,LPVOID,LPDWORD); DWORD WINAPI WNetGetResourceParentW(LPNETRESOURCEW,LPVOID,LPDWORD); #define WNetGetResourceParent WINELIB_NAME_AW(WNetGetResourceParent) DWORD WINAPI WNetCloseEnum(HANDLE); /* * Universal naming */ #define UNIVERSAL_NAME_INFO_LEVEL 0x00000001 #define REMOTE_NAME_INFO_LEVEL 0x00000002 typedef struct { LPSTR lpUniversalName; } UNIVERSAL_NAME_INFOA, *LPUNIVERSAL_NAME_INFOA; typedef struct { LPWSTR lpUniversalName; } UNIVERSAL_NAME_INFOW, *LPUNIVERSAL_NAME_INFOW; DECL_WINELIB_TYPE_AW(UNIVERSAL_NAME_INFO) DECL_WINELIB_TYPE_AW(LPUNIVERSAL_NAME_INFO) typedef struct { LPSTR lpUniversalName; LPSTR lpConnectionName; LPSTR lpRemainingPath; }REMOTE_NAME_INFOA, *LPREMOTE_NAME_INFOA; typedef struct { LPWSTR lpUniversalName; LPWSTR lpConnectionName; LPWSTR lpRemainingPath; }REMOTE_NAME_INFOW, *LPREMOTE_NAME_INFOW; DECL_WINELIB_TYPE_AW(REMOTE_NAME_INFO) DECL_WINELIB_TYPE_AW(LPREMOTE_NAME_INFO) DWORD WINAPI WNetGetUniversalNameA(LPCSTR,DWORD,LPVOID,LPDWORD); DWORD WINAPI WNetGetUniversalNameW(LPCWSTR,DWORD,LPVOID,LPDWORD); #define WNetGetUniversalName WINELIB_NAME_AW(WNetGetUniversalName) /* * Other */ DWORD WINAPI WNetGetUserA(LPCSTR,LPSTR,LPDWORD); DWORD WINAPI WNetGetUserW(LPCWSTR,LPWSTR,LPDWORD); #define WNetGetUser WINELIB_NAME_AW(WNetGetUser) #define WNFMT_MULTILINE 0x01 #define WNFMT_ABBREVIATED 0x02 #define WNFMT_INENUM 0x10 #define WNFMT_CONNECTION 0x20 DWORD WINAPI WNetGetProviderNameA(DWORD,LPSTR,LPDWORD); DWORD WINAPI WNetGetProviderNameW(DWORD,LPWSTR,LPDWORD); #define WNetGetProviderName WINELIB_NAME_AW(WNetGetProviderName) typedef struct { DWORD cbStructure; DWORD dwProviderVersion; DWORD dwStatus; DWORD dwCharacteristics; DWORD dwHandle; WORD wNetType; DWORD dwPrinters; DWORD dwDrives; } NETINFOSTRUCT, *LPNETINFOSTRUCT; #define NETINFO_DLL16 0x00000001 #define NETINFO_DISKRED 0x00000004 #define NETINFO_PRINTERRED 0x00000008 DWORD WINAPI WNetGetNetworkInformationA(LPCSTR,LPNETINFOSTRUCT); DWORD WINAPI WNetGetNetworkInformationW(LPCWSTR,LPNETINFOSTRUCT); #define WNetGetNetworkInformation WINELIB_NAME_AW(WNetGetNetworkInformation) /* * Status codes */ #define WN_SUCCESS NO_ERROR #define WN_NO_ERROR NO_ERROR #define WN_NOT_SUPPORTED ERROR_NOT_SUPPORTED #define WN_CANCEL ERROR_CANCELLED #define WN_RETRY ERROR_RETRY #define WN_NET_ERROR ERROR_UNEXP_NET_ERR #define WN_MORE_DATA ERROR_MORE_DATA #define WN_BAD_POINTER ERROR_INVALID_ADDRESS #define WN_BAD_VALUE ERROR_INVALID_PARAMETER #define WN_BAD_USER ERROR_BAD_USERNAME #define WN_BAD_PASSWORD ERROR_INVALID_PASSWORD #define WN_ACCESS_DENIED ERROR_ACCESS_DENIED #define WN_FUNCTION_BUSY ERROR_BUSY #define WN_WINDOWS_ERROR ERROR_UNEXP_NET_ERR #define WN_OUT_OF_MEMORY ERROR_NOT_ENOUGH_MEMORY #define WN_NO_NETWORK ERROR_NO_NETWORK #define WN_EXTENDED_ERROR ERROR_EXTENDED_ERROR #define WN_BAD_LEVEL ERROR_INVALID_LEVEL #define WN_BAD_HANDLE ERROR_INVALID_HANDLE #define WN_NOT_INITIALIZING ERROR_ALREADY_INITIALIZED #define WN_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES #define WN_NOT_CONNECTED ERROR_NOT_CONNECTED #define WN_OPEN_FILES ERROR_OPEN_FILES #define WN_DEVICE_IN_USE ERROR_DEVICE_IN_USE #define WN_BAD_NETNAME ERROR_BAD_NET_NAME #define WN_BAD_LOCALNAME ERROR_BAD_DEVICE #define WN_ALREADY_CONNECTED ERROR_ALREADY_ASSIGNED #define WN_DEVICE_ERROR ERROR_GEN_FAILURE #define WN_CONNECTION_CLOSED ERROR_CONNECTION_UNAVAIL #define WN_NO_NET_OR_BAD_PATH ERROR_NO_NET_OR_BAD_PATH #define WN_BAD_PROVIDER ERROR_BAD_PROVIDER #define WN_CANNOT_OPEN_PROFILE ERROR_CANNOT_OPEN_PROFILE #define WN_BAD_PROFILE ERROR_BAD_PROFILE #define WN_BAD_DEV_TYPE ERROR_BAD_DEV_TYPE #define WN_DEVICE_ALREADY_REMEMBERED ERROR_DEVICE_ALREADY_REMEMBERED #define WN_NO_MORE_ENTRIES ERROR_NO_MORE_ITEMS #define WN_NOT_CONTAINER ERROR_NOT_CONTAINER #define WN_NOT_AUTHENTICATED ERROR_NOT_AUTHENTICATED #define WN_NOT_LOGGED_ON ERROR_NOT_LOGGED_ON #define WN_NOT_VALIDATED ERROR_NO_LOGON_SERVERS /* * Multinet (for Shell) */ typedef struct { DWORD cbStructure; DWORD dwFlags; DWORD dwSpeed; DWORD dwDelay; DWORD dwOptDataSize; } NETCONNECTINFOSTRUCT,*LPNETCONNECTINFOSTRUCT; #define WNCON_FORNETCARD 0x00000001 #define WNCON_NOTROUTED 0x00000002 #define WNCON_SLOWLINK 0x00000004 #define WNCON_DYNAMIC 0x00000008 DWORD WINAPI MultinetGetConnectionPerformanceA(LPNETRESOURCEA,LPNETCONNECTINFOSTRUCT); DWORD WINAPI MultinetGetConnectionPerformanceW(LPNETRESOURCEW,LPNETCONNECTINFOSTRUCT); #define MultinetGetConnectionPerformance WINELIB_NAME_AW(MultinetGetConnectionPerformance) DWORD WINAPI MultinetGetErrorTextA(DWORD,DWORD,DWORD); DWORD WINAPI MultinetGetErrorTextW(DWORD,DWORD,DWORD); #define MultinetGetErrorText WINELIB_NAME_AW(MultinetGetErrorText) /* * Password cache */ /* WNetEnumCachedPasswords */ typedef struct tagPASSWORD_CACHE_ENTRY { WORD cbEntry; WORD cbResource; WORD cbPassword; BYTE iEntry; BYTE nType; BYTE abResource[1]; } PASSWORD_CACHE_ENTRY; typedef BOOL (CALLBACK *ENUMPASSWORDPROC)(PASSWORD_CACHE_ENTRY *, DWORD); UINT WINAPI WNetEnumCachedPasswords( LPSTR, WORD, BYTE, ENUMPASSWORDPROC, DWORD); DWORD WINAPI WNetGetCachedPassword( LPSTR, WORD, LPSTR, LPWORD, BYTE ); DWORD WINAPI WNetCachePassword( LPSTR, WORD, LPSTR, WORD, BYTE, WORD ); #ifdef __cplusplus } #endif #endif /* _WINNETWK_H_ */ ================================================ FILE: wine/windows/winnls.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINNLS_H #define __WINE_WINNLS_H #ifndef NONLS #ifdef __cplusplus extern "C" { #endif #ifndef _NORMALIZE_ # define WINNORMALIZEAPI DECLSPEC_IMPORT #else # define WINNORMALIZEAPI #endif /* Country codes */ #define CTRY_DEFAULT (0) #define CTRY_ALBANIA (355) #define CTRY_ALGERIA (213) #define CTRY_ARGENTINA (54) #define CTRY_ARMENIA (374) #define CTRY_AUSTRALIA (61) #define CTRY_AUSTRIA (43) #define CTRY_AZERBAIJAN (994) #define CTRY_BAHRAIN (973) #define CTRY_BELARUS (375) #define CTRY_BELGIUM (32) #define CTRY_BELIZE (501) #define CTRY_BOLIVIA (591) #define CTRY_BRAZIL (55) #define CTRY_BRUNEI_DARUSSALAM (673) #define CTRY_BULGARIA (359) #define CTRY_CANADA (2) #define CTRY_CARIBBEAN (1) #define CTRY_CHILE (56) #define CTRY_COLOMBIA (57) #define CTRY_COSTA_RICA (506) #define CTRY_CROATIA (385) #define CTRY_CZECH (420) #define CTRY_DENMARK (45) #define CTRY_DOMINICAN_REPUBLIC (1) #define CTRY_ECUADOR (593) #define CTRY_EGYPT (20) #define CTRY_EL_SALVADOR (503) #define CTRY_ESTONIA (372) #define CTRY_FAEROE_ISLANDS (298) #define CTRY_FINLAND (358) #define CTRY_FRANCE (33) #define CTRY_GEORGIA (995) #define CTRY_GERMANY (49) #define CTRY_GREECE (30) #define CTRY_GUATEMALA (502) #define CTRY_HONDURAS (504) #define CTRY_HONG_KONG (852) #define CTRY_HUNGARY (36) #define CTRY_ICELAND (354) #define CTRY_INDIA (91) #define CTRY_INDONESIA (62) #define CTRY_IRAN (981) #define CTRY_IRAQ (964) #define CTRY_IRELAND (353) #define CTRY_ISRAEL (972) #define CTRY_ITALY (39) #define CTRY_JAMAICA (1) #define CTRY_JAPAN (81) #define CTRY_JORDAN (962) #define CTRY_KAZAKSTAN (7) #define CTRY_KENYA (254) #define CTRY_KUWAIT (965) #define CTRY_KYRGYZSTAN (996) #define CTRY_LATVIA (371) #define CTRY_LEBANON (961) #define CTRY_LIBYA (218) #define CTRY_LIECHTENSTEIN (41) #define CTRY_LITHUANIA (370) #define CTRY_LUXEMBOURG (352) #define CTRY_MACAU (853) #define CTRY_MACEDONIA (389) #define CTRY_MALAYSIA (60) #define CTRY_MALDIVES (960) #define CTRY_MEXICO (52) #define CTRY_MONACO (33) #define CTRY_MONGOLIA (976) #define CTRY_MOROCCO (212) #define CTRY_NETHERLANDS (31) #define CTRY_NEW_ZEALAND (64) #define CTRY_NICARAGUA (505) #define CTRY_NORWAY (47) #define CTRY_OMAN (968) #define CTRY_PAKISTAN (92) #define CTRY_PANAMA (507) #define CTRY_PARAGUAY (595) #define CTRY_PERU (51) #define CTRY_PHILIPPINES (63) #define CTRY_POLAND (48) #define CTRY_PORTUGAL (351) #define CTRY_PRCHINA (86) #define CTRY_PUERTO_RICO (1) #define CTRY_QATAR (974) #define CTRY_ROMANIA (40) #define CTRY_RUSSIA (7) #define CTRY_SAUDI_ARABIA (966) #define CTRY_SERBIA (381) #define CTRY_SINGAPORE (65) #define CTRY_SLOVAK (421) #define CTRY_SLOVENIA (386) #define CTRY_SOUTH_AFRICA (27) #define CTRY_SOUTH_KOREA (82) #define CTRY_SPAIN (34) #define CTRY_SWEDEN (46) #define CTRY_SWITZERLAND (41) #define CTRY_SYRIA (963) #define CTRY_TAIWAN (886) #define CTRY_TATARSTAN (7) #define CTRY_THAILAND (66) #define CTRY_TRINIDAD_Y_TOBAGO (1) #define CTRY_TUNISIA (216) #define CTRY_TURKEY (90) #define CTRY_UAE (971) #define CTRY_UKRAINE (380) #define CTRY_UNITED_KINGDOM (44) #define CTRY_UNITED_STATES (1) #define CTRY_URUGUAY (598) #define CTRY_UZBEKISTAN (7) #define CTRY_VENEZUELA (58) #define CTRY_VIET_NAM (84) #define CTRY_YEMEN (967) #define CTRY_ZIMBABWE (263) #define MB_PRECOMPOSED 0x01 #define MB_COMPOSITE 0x02 #define MB_USEGLYPHCHARS 0x04 #define MB_ERR_INVALID_CHARS 0x08 #define LGRPID_INSTALLED 0x1 #define LGRPID_SUPPORTED 0x2 #define LCID_INSTALLED 0x1 #define LCID_SUPPORTED 0x2 #define LCID_ALTERNATE_SORTS 0x4 #define LOCALE_ALL 0x00 #define LOCALE_WINDOWS 0x01 #define LOCALE_SUPPLEMENTAL 0x02 #define LOCALE_ALTERNATE_SORTS 0x04 #define LOCALE_REPLACEMENT 0x08 #define LOCALE_NEUTRALDATA 0x10 #define LOCALE_SPECIFICDATA 0x20 /* Locale flags */ #define LOCALE_NOUSEROVERRIDE 0x80000000 #define LOCALE_USE_CP_ACP 0x40000000 #define LOCALE_RETURN_NUMBER 0x20000000 #define LOCALE_RETURN_GENITIVE_NAMES 0x10000000 /* Locale information types */ #define LOCALE_ILANGUAGE 0x0001 #define LOCALE_SLANGUAGE 0x0002 #define LOCALE_SENGLANGUAGE 0x1001 #define LOCALE_SENGLISHLANGUAGENAME 0x1001 #define LOCALE_SABBREVLANGNAME 0x0003 #define LOCALE_SNATIVELANGNAME 0x0004 #define LOCALE_SNATIVELANGUAGENAME 0x0004 #define LOCALE_ICOUNTRY 0x0005 #define LOCALE_SCOUNTRY 0x0006 #define LOCALE_SLOCALIZEDCOUNTRYNAME 0x0006 #define LOCALE_SENGCOUNTRY 0x1002 #define LOCALE_SENGLISHCOUNTRYNAME 0x1002 #define LOCALE_SABBREVCTRYNAME 0x0007 #define LOCALE_SNATIVECTRYNAME 0x0008 #define LOCALE_SNATIVECOUNTRYNAME 0x0008 #define LOCALE_IDEFAULTLANGUAGE 0x0009 #define LOCALE_IDEFAULTCOUNTRY 0x000A #define LOCALE_IDEFAULTCODEPAGE 0x000B #define LOCALE_IDEFAULTANSICODEPAGE 0x1004 #define LOCALE_IDEFAULTMACCODEPAGE 0x1011 #define LOCALE_SLIST 0x000C #define LOCALE_IMEASURE 0x000D #define LOCALE_SDECIMAL 0x000E #define LOCALE_STHOUSAND 0x000F #define LOCALE_SGROUPING 0x0010 #define LOCALE_IDIGITS 0x0011 #define LOCALE_ILZERO 0x0012 #define LOCALE_INEGNUMBER 0x1010 #define LOCALE_SNATIVEDIGITS 0x0013 #define LOCALE_SCURRENCY 0x0014 #define LOCALE_SINTLSYMBOL 0x0015 #define LOCALE_SMONDECIMALSEP 0x0016 #define LOCALE_SMONTHOUSANDSEP 0x0017 #define LOCALE_SMONGROUPING 0x0018 #define LOCALE_ICURRDIGITS 0x0019 #define LOCALE_IINTLCURRDIGITS 0x001A #define LOCALE_ICURRENCY 0x001B #define LOCALE_INEGCURR 0x001C #define LOCALE_SDATE 0x001D #define LOCALE_STIME 0x001E #define LOCALE_SSHORTDATE 0x001F #define LOCALE_SLONGDATE 0x0020 #define LOCALE_STIMEFORMAT 0x1003 #define LOCALE_IDATE 0x0021 #define LOCALE_ILDATE 0x0022 #define LOCALE_ITIME 0x0023 #define LOCALE_ITIMEMARKPOSN 0x1005 #define LOCALE_ICENTURY 0x0024 #define LOCALE_ITLZERO 0x0025 #define LOCALE_IDAYLZERO 0x0026 #define LOCALE_IMONLZERO 0x0027 #define LOCALE_S1159 0x0028 #define LOCALE_S2359 0x0029 #define LOCALE_ICALENDARTYPE 0x1009 #define LOCALE_IOPTIONALCALENDAR 0x100B #define LOCALE_IFIRSTDAYOFWEEK 0x100C #define LOCALE_IFIRSTWEEKOFYEAR 0x100D #define LOCALE_SDAYNAME1 0x002A #define LOCALE_SDAYNAME2 0x002B #define LOCALE_SDAYNAME3 0x002C #define LOCALE_SDAYNAME4 0x002D #define LOCALE_SDAYNAME5 0x002E #define LOCALE_SDAYNAME6 0x002F #define LOCALE_SDAYNAME7 0x0030 #define LOCALE_SABBREVDAYNAME1 0x0031 #define LOCALE_SABBREVDAYNAME2 0x0032 #define LOCALE_SABBREVDAYNAME3 0x0033 #define LOCALE_SABBREVDAYNAME4 0x0034 #define LOCALE_SABBREVDAYNAME5 0x0035 #define LOCALE_SABBREVDAYNAME6 0x0036 #define LOCALE_SABBREVDAYNAME7 0x0037 #define LOCALE_SMONTHNAME1 0x0038 #define LOCALE_SMONTHNAME2 0x0039 #define LOCALE_SMONTHNAME3 0x003A #define LOCALE_SMONTHNAME4 0x003B #define LOCALE_SMONTHNAME5 0x003C #define LOCALE_SMONTHNAME6 0x003D #define LOCALE_SMONTHNAME7 0x003E #define LOCALE_SMONTHNAME8 0x003F #define LOCALE_SMONTHNAME9 0x0040 #define LOCALE_SMONTHNAME10 0x0041 #define LOCALE_SMONTHNAME11 0x0042 #define LOCALE_SMONTHNAME12 0x0043 #define LOCALE_SMONTHNAME13 0x100E #define LOCALE_SABBREVMONTHNAME1 0x0044 #define LOCALE_SABBREVMONTHNAME2 0x0045 #define LOCALE_SABBREVMONTHNAME3 0x0046 #define LOCALE_SABBREVMONTHNAME4 0x0047 #define LOCALE_SABBREVMONTHNAME5 0x0048 #define LOCALE_SABBREVMONTHNAME6 0x0049 #define LOCALE_SABBREVMONTHNAME7 0x004A #define LOCALE_SABBREVMONTHNAME8 0x004B #define LOCALE_SABBREVMONTHNAME9 0x004C #define LOCALE_SABBREVMONTHNAME10 0x004D #define LOCALE_SABBREVMONTHNAME11 0x004E #define LOCALE_SABBREVMONTHNAME12 0x004F #define LOCALE_SABBREVMONTHNAME13 0x100F #define LOCALE_SPOSITIVESIGN 0x0050 #define LOCALE_SNEGATIVESIGN 0x0051 #define LOCALE_IPOSSIGNPOSN 0x0052 #define LOCALE_INEGSIGNPOSN 0x0053 #define LOCALE_IPOSSYMPRECEDES 0x0054 #define LOCALE_IPOSSEPBYSPACE 0x0055 #define LOCALE_INEGSYMPRECEDES 0x0056 #define LOCALE_INEGSEPBYSPACE 0x0057 #define LOCALE_FONTSIGNATURE 0x0058 #define LOCALE_SISO639LANGNAME 0x0059 #define LOCALE_SISO3166CTRYNAME 0x005A #define LOCALE_IGEOID 0x005B #define LOCALE_SNAME 0x005C #define LOCALE_SDURATION 0x005D #define LOCALE_SKEYBOARDSTOINSTALL 0x005E #define LOCALE_SSHORTESTDAYNAME1 0x0060 #define LOCALE_SSHORTESTDAYNAME2 0x0061 #define LOCALE_SSHORTESTDAYNAME3 0x0062 #define LOCALE_SSHORTESTDAYNAME4 0x0063 #define LOCALE_SSHORTESTDAYNAME5 0x0064 #define LOCALE_SSHORTESTDAYNAME6 0x0065 #define LOCALE_SSHORTESTDAYNAME7 0x0066 #define LOCALE_SISO639LANGNAME2 0x0067 #define LOCALE_SISO3166CTRYNAME2 0x0068 #define LOCALE_SNAN 0x0069 #define LOCALE_SPOSINFINITY 0x006A #define LOCALE_SNEGINFINITY 0x006B #define LOCALE_SSCRIPTS 0x006C #define LOCALE_SPARENT 0x006D #define LOCALE_SCONSOLEFALLBACKNAME 0x006E #define LOCALE_SLANGDISPLAYNAME 0x006F #define LOCALE_SLOCALIZEDLANGUAGENAME 0x006F #define LOCALE_IREADINGLAYOUT 0x0070 #define LOCALE_INEUTRAL 0x0071 #define LOCALE_SENGLISHDISPLAYNAME 0x0072 #define LOCALE_SNATIVEDISPLAYNAME 0x0073 #define LOCALE_INEGATIVEPERCENT 0x0074 #define LOCALE_IPOSITIVEPERCENT 0x0075 #define LOCALE_SPERCENT 0x0076 #define LOCALE_SPERMILLE 0x0077 #define LOCALE_SMONTHDAY 0x0078 #define LOCALE_SSHORTTIME 0x0079 #define LOCALE_SOPENTYPELANGUAGETAG 0X007A #define LOCALE_SSORTLOCALE 0x007B #define LOCALE_IDEFAULTEBCDICCODEPAGE 0x1012 #define LOCALE_IPAPERSIZE 0x100A #define LOCALE_SENGCURRNAME 0x1007 #define LOCALE_SNATIVECURRNAME 0x1008 #define LOCALE_SYEARMONTH 0x1006 #define LOCALE_SSORTNAME 0x1013 #define LOCALE_IDIGITSUBSTITUTION 0x1014 /* Locale name special values */ #if defined(__GNUC__) # define LOCALE_NAME_INVARIANT (const WCHAR []){ 0 } #elif defined(_MSC_VER) # define LOCALE_NAME_INVARIANT L"" #else static const WCHAR LOCALE_NAME_INVARIANT[] = { 0 }; #endif #if defined(__GNUC__) # define LOCALE_NAME_SYSTEM_DEFAULT (const WCHAR []){'!','s','y','s','-','d','e','f','a','u','l','t','-','l','o','c','a','l','e',0} #elif defined(_MSC_VER) # define LOCALE_NAME_SYSTEM_DEFAULT L"!sys-default-locale" #else static const WCHAR LOCALE_NAME_SYSTEM_DEFAULT[] = {'!','s','y','s','-','d','e','f','a','u','l','t','-','l','o','c','a','l','e',0}; #endif #define LOCALE_NAME_USER_DEFAULT NULL #define LOCALE_IDEFAULTUNIXCODEPAGE 0x1030 /* Wine extension */ #define NORM_IGNORECASE 0x00000001 #define NORM_IGNORENONSPACE 0x00000002 #define NORM_IGNORESYMBOLS 0x00000004 #define SORT_DIGITSASNUMBERS 0x00000008 #define LINGUISTIC_IGNORECASE 0x00000010 #define LINGUISTIC_IGNOREDIACRITIC 0x00000020 #define SORT_STRINGSORT 0x00001000 /* Take punctuation into account */ #define NORM_IGNOREKANATYPE 0x00010000 #define NORM_IGNOREWIDTH 0x00020000 #define NORM_LINGUISTIC_CASING 0x08000000 #define FIND_STARTSWITH 0x00100000 #define FIND_ENDSWITH 0x00200000 #define FIND_FROMSTART 0x00400000 #define FIND_FROMEND 0x00800000 #define CP_ACP 0 #define CP_OEMCP 1 #define CP_MACCP 2 #define CP_THREAD_ACP 3 #define CP_SYMBOL 42 #define CP_UTF7 65000 #define CP_UTF8 65001 #define CP_UNIXCP 65010 /* Wine extension */ #define CP_INSTALLED 0x1 #define CP_SUPPORTED 0x2 #define HIGH_SURROGATE_START 0xd800 #define HIGH_SURROGATE_END 0xdbff #define LOW_SURROGATE_START 0xdc00 #define LOW_SURROGATE_END 0xdfff #define IS_HIGH_SURROGATE(ch) ((ch) >= HIGH_SURROGATE_START && (ch) <= HIGH_SURROGATE_END) #define IS_LOW_SURROGATE(ch) ((ch) >= LOW_SURROGATE_START && (ch) <= LOW_SURROGATE_END) #define IS_SURROGATE_PAIR(high,low) (IS_HIGH_SURROGATE(high) && IS_LOW_SURROGATE(low)) #define WC_DISCARDNS 0x0010 #define WC_SEPCHARS 0x0020 #define WC_DEFAULTCHAR 0x0040 #define WC_ERR_INVALID_CHARS 0x0080 #define WC_COMPOSITECHECK 0x0200 #define WC_NO_BEST_FIT_CHARS 0x0400 #define MAP_FOLDCZONE 0x0010 #define MAP_PRECOMPOSED 0x0020 #define MAP_COMPOSITE 0x0040 #define MAP_FOLDDIGITS 0x0080 #define MAP_EXPAND_LIGATURES 0x2000 /* String mapping flags */ #define LCMAP_LOWERCASE 0x00000100 /* Make lower-case */ #define LCMAP_UPPERCASE 0x00000200 /* Make upper-case */ #define LCMAP_SORTKEY 0x00000400 /* Create a sort key */ #define LCMAP_BYTEREV 0x00000800 /* Reverse the result */ #define LCMAP_HIRAGANA 0x00100000 /* Transform Japanese katakana into hiragana */ #define LCMAP_KATAKANA 0x00200000 /* Transform Japanese hiragana into katakana */ #define LCMAP_HALFWIDTH 0x00400000 /* Use single byte chars in output */ #define LCMAP_FULLWIDTH 0x00800000 /* Use double byte chars in output */ #define LCMAP_LINGUISTIC_CASING 0x01000000 /* Change case by using language context */ #define LCMAP_SIMPLIFIED_CHINESE 0x02000000 /* Transform Chinese traditional into simplified */ #define LCMAP_TRADITIONAL_CHINESE 0x04000000 /* Transform Chinese simplified into traditional */ /* Date and time formatting flags */ #define DATE_SHORTDATE 0x01 /* Short date format */ #define DATE_LONGDATE 0x02 /* Long date format */ #define DATE_USE_ALT_CALENDAR 0x04 /* Use an Alternate calendar */ #define DATE_YEARMONTH 0x08 /* Year/month format */ #define DATE_LTRREADING 0x10 /* Add LTR reading marks */ #define DATE_RTLREADING 0x20 /* Add RTL reading marks */ #define TIME_FORCE24HOURFORMAT 0x08 /* Always use 24 hour clock */ #define TIME_NOTIMEMARKER 0x04 /* show no AM/PM */ #define TIME_NOSECONDS 0x02 /* show no seconds */ #define TIME_NOMINUTESORSECONDS 0x01 /* show no minutes either */ /* Unicode char type flags */ #define CT_CTYPE1 0x0001 /* usual ctype */ #define CT_CTYPE2 0x0002 /* bidirectional layout info */ #define CT_CTYPE3 0x0004 /* textprocessing info */ /* Type 1 flags */ #define C1_UPPER 0x0001 #define C1_LOWER 0x0002 #define C1_DIGIT 0x0004 #define C1_SPACE 0x0008 #define C1_PUNCT 0x0010 #define C1_CNTRL 0x0020 #define C1_BLANK 0x0040 #define C1_XDIGIT 0x0080 #define C1_ALPHA 0x0100 #define C1_DEFINED 0x0200 /* Type 2 flags */ #define C2_LEFTTORIGHT 0x0001 #define C2_RIGHTTOLEFT 0x0002 #define C2_EUROPENUMBER 0x0003 #define C2_EUROPESEPARATOR 0x0004 #define C2_EUROPETERMINATOR 0x0005 #define C2_ARABICNUMBER 0x0006 #define C2_COMMONSEPARATOR 0x0007 #define C2_BLOCKSEPARATOR 0x0008 #define C2_SEGMENTSEPARATOR 0x0009 #define C2_WHITESPACE 0x000A #define C2_OTHERNEUTRAL 0x000B #define C2_NOTAPPLICABLE 0x0000 /* Type 3 flags */ #define C3_NONSPACING 0x0001 #define C3_DIACRITIC 0x0002 #define C3_VOWELMARK 0x0004 #define C3_SYMBOL 0x0008 #define C3_KATAKANA 0x0010 #define C3_HIRAGANA 0x0020 #define C3_HALFWIDTH 0x0040 #define C3_FULLWIDTH 0x0080 #define C3_IDEOGRAPH 0x0100 #define C3_KASHIDA 0x0200 #define C3_LEXICAL 0x0400 #define C3_HIGHSURROGATE 0x0800 #define C3_LOWSURROGATE 0x1000 #define C3_ALPHA 0x8000 #define C3_NOTAPPLICABLE 0x0000 /* Code page information. */ #define MAX_LEADBYTES 12 #define MAX_DEFAULTCHAR 2 /* Defines for calendar handling */ #define CAL_NOUSEROVERRIDE LOCALE_NOUSEROVERRIDE #define CAL_USE_CP_ACP LOCALE_USE_CP_ACP #define CAL_RETURN_NUMBER LOCALE_RETURN_NUMBER #define CAL_RETURN_GENITIVE_NAMES LOCALE_RETURN_GENITIVE_NAMES #define CAL_ICALINTVALUE 0x01 #define CAL_SCALNAME 0x02 #define CAL_IYEAROFFSETRANGE 0x03 #define CAL_SERASTRING 0x04 #define CAL_SSHORTDATE 0x05 #define CAL_SLONGDATE 0x06 #define CAL_SDAYNAME1 0x07 #define CAL_SDAYNAME2 0x08 #define CAL_SDAYNAME3 0x09 #define CAL_SDAYNAME4 0x0a #define CAL_SDAYNAME5 0x0b #define CAL_SDAYNAME6 0x0c #define CAL_SDAYNAME7 0x0d #define CAL_SABBREVDAYNAME1 0x0e #define CAL_SABBREVDAYNAME2 0x0f #define CAL_SABBREVDAYNAME3 0x10 #define CAL_SABBREVDAYNAME4 0x11 #define CAL_SABBREVDAYNAME5 0x12 #define CAL_SABBREVDAYNAME6 0x13 #define CAL_SABBREVDAYNAME7 0x14 #define CAL_SMONTHNAME1 0x15 #define CAL_SMONTHNAME2 0x16 #define CAL_SMONTHNAME3 0x17 #define CAL_SMONTHNAME4 0x18 #define CAL_SMONTHNAME5 0x19 #define CAL_SMONTHNAME6 0x1a #define CAL_SMONTHNAME7 0x1b #define CAL_SMONTHNAME8 0x1c #define CAL_SMONTHNAME9 0x1d #define CAL_SMONTHNAME10 0x1e #define CAL_SMONTHNAME11 0x1f #define CAL_SMONTHNAME12 0x20 #define CAL_SMONTHNAME13 0x21 #define CAL_SABBREVMONTHNAME1 0x22 #define CAL_SABBREVMONTHNAME2 0x23 #define CAL_SABBREVMONTHNAME3 0x24 #define CAL_SABBREVMONTHNAME4 0x25 #define CAL_SABBREVMONTHNAME5 0x26 #define CAL_SABBREVMONTHNAME6 0x27 #define CAL_SABBREVMONTHNAME7 0x28 #define CAL_SABBREVMONTHNAME8 0x29 #define CAL_SABBREVMONTHNAME9 0x2a #define CAL_SABBREVMONTHNAME10 0x2b #define CAL_SABBREVMONTHNAME11 0x2c #define CAL_SABBREVMONTHNAME12 0x2d #define CAL_SABBREVMONTHNAME13 0x2e #define CAL_SYEARMONTH 0x2f #define CAL_ITWODIGITYEARMAX 0x30 #define CAL_SSHORTESTDAYNAME1 0x31 #define CAL_SSHORTESTDAYNAME2 0x32 #define CAL_SSHORTESTDAYNAME3 0x33 #define CAL_SSHORTESTDAYNAME4 0x34 #define CAL_SSHORTESTDAYNAME5 0x35 #define CAL_SSHORTESTDAYNAME6 0x36 #define CAL_SSHORTESTDAYNAME7 0x37 #define CAL_SMONTHDAY 0x38 #define CAL_SABBREVERASTRING 0x39 /* Calendar types */ #define CAL_GREGORIAN 1 #define CAL_GREGORIAN_US 2 #define CAL_JAPAN 3 #define CAL_TAIWAN 4 #define CAL_KOREA 5 #define CAL_HIJRI 6 #define CAL_THAI 7 #define CAL_HEBREW 8 #define CAL_GREGORIAN_ME_FRENCH 9 #define CAL_GREGORIAN_ARABIC 10 #define CAL_GREGORIAN_XLIT_ENGLISH 11 #define CAL_GREGORIAN_XLIT_FRENCH 12 /* EnumCalendarInfo Flags */ #define ENUM_ALL_CALENDARS 0xffffffff /* Enumerate all calendars within a locale */ /* CompareString results */ #define CSTR_LESS_THAN 1 #define CSTR_EQUAL 2 #define CSTR_GREATER_THAN 3 /* * Language Group IDs. * Resources in kernel32 are LGRPID_xxx+0x2000 because low values were used by LOCALE_xxx * This is done because resources in win2k kernel32 / winxp kernel32 are not even * stored the same way. */ #define LGRPID_WESTERN_EUROPE 0x01 /* Includes US and Africa */ #define LGRPID_CENTRAL_EUROPE 0x02 #define LGRPID_BALTIC 0x03 #define LGRPID_GREEK 0x04 #define LGRPID_CYRILLIC 0x05 #define LGRPID_TURKISH 0x06 #define LGRPID_JAPANESE 0x07 #define LGRPID_KOREAN 0x08 #define LGRPID_TRADITIONAL_CHINESE 0x09 #define LGRPID_SIMPLIFIED_CHINESE 0x0A #define LGRPID_THAI 0x0B #define LGRPID_HEBREW 0x0C #define LGRPID_ARABIC 0x0D #define LGRPID_VIETNAMESE 0x0E #define LGRPID_INDIC 0x0F #define LGRPID_GEORGIAN 0x10 #define LGRPID_ARMENIAN 0x11 /* IDN defines. */ #define IDN_ALLOW_UNASSIGNED 0x1 #define IDN_USE_STD3_ASCII_RULES 0x2 /* MUI defines. */ #define MUI_LANGUAGE_ID 0x04 #define MUI_LANGUAGE_NAME 0x08 #define MUI_MERGE_SYSTEM_FALLBACK 0x10 #define MUI_MERGE_USER_FALLBACK 0x20 #define MUI_UI_FALLBACK MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK #define MUI_THREAD_LANGUAGES 0x40 #define MUI_CONSOLE_FILTER 0x100 #define MUI_COMPLEX_SCRIPT_FILTER 0x200 #define MUI_RESET_FILTERS 0x001 #define MUI_USER_PREFERRED_UI_LANGUAGES 0x10 #define MUI_USE_INSTALLED_LANGUAGES 0x20 #define MUI_USE_SEARCH_ALL_LANGUAGES 0x40 #define MUI_LANG_NEUTRAL_PE_FILE 0x100 #define MUI_NON_LANG_NEUTRAL_FILE 0x200 #define MUI_MACHINE_LANGUAGE_SETTINGS 0x400 #define MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL 0x001 #define MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN 0x002 #define MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI 0x004 #define MUI_QUERY_TYPE 0x001 #define MUI_QUERY_CHECKSUM 0x002 #define MUI_QUERY_LANGUAGE_NAME 0x004 #define MUI_QUERY_RESOURCE_TYPES 0x008 #define MUI_FILEINFO_VERSION 0x001 #define MUI_FULL_LANGUAGE 0x01 #define MUI_PARTIAL_LANGUAGE 0x02 #define MUI_LIP_LANGUAGE 0x04 #define MUI_LANGUAGE_INSTALLED 0x20 #define MUI_LANGUAGE_LICENSED 0x40 typedef struct _FILEMUIINFO { DWORD dwSize; DWORD dwVersion; DWORD dwFileType; BYTE pChecksum[16]; BYTE pServiceChecksum[16]; DWORD dwLanguageNameOffset; DWORD dwTypeIDMainSize; DWORD dwTypeIDMainOffset; DWORD dwTypeNameMainOffset; DWORD dwTypeIDMUISize; DWORD dwTypeIDMUIOffset; DWORD dwTypeNameMUIOffset; BYTE abBuffer[8]; } FILEMUIINFO, *PFILEMUIINFO; /* Types */ typedef enum _NORM_FORM { NormalizationOther = 0, NormalizationC = 0x1, NormalizationD = 0x2, NormalizationKC = 0x5, NormalizationKD = 0x6 } NORM_FORM; typedef DWORD CALID; typedef DWORD CALTYPE; typedef LONG GEOID; typedef DWORD GEOCLASS; typedef DWORD GEOTYPE; typedef DWORD LCTYPE; typedef DWORD LGRPID; typedef struct { UINT MaxCharSize; BYTE DefaultChar[MAX_DEFAULTCHAR]; BYTE LeadByte[MAX_LEADBYTES]; } CPINFO, *LPCPINFO; typedef struct { UINT MaxCharSize; BYTE DefaultChar[MAX_DEFAULTCHAR]; BYTE LeadByte[MAX_LEADBYTES]; WCHAR UnicodeDefaultChar; UINT CodePage; CHAR CodePageName[MAX_PATH]; } CPINFOEXA, *LPCPINFOEXA; typedef struct { UINT MaxCharSize; BYTE DefaultChar[MAX_DEFAULTCHAR]; BYTE LeadByte[MAX_LEADBYTES]; WCHAR UnicodeDefaultChar; UINT CodePage; WCHAR CodePageName[MAX_PATH]; } CPINFOEXW, *LPCPINFOEXW; DECL_WINELIB_TYPE_AW(CPINFOEX) DECL_WINELIB_TYPE_AW(LPCPINFOEX) typedef struct _numberfmtA { UINT NumDigits; UINT LeadingZero; UINT Grouping; LPSTR lpDecimalSep; LPSTR lpThousandSep; UINT NegativeOrder; } NUMBERFMTA, *LPNUMBERFMTA; typedef struct _numberfmtW { UINT NumDigits; UINT LeadingZero; UINT Grouping; LPWSTR lpDecimalSep; LPWSTR lpThousandSep; UINT NegativeOrder; } NUMBERFMTW, *LPNUMBERFMTW; DECL_WINELIB_TYPE_AW(NUMBERFMT) DECL_WINELIB_TYPE_AW(LPNUMBERFMT) typedef struct _currencyfmtA { UINT NumDigits; UINT LeadingZero; UINT Grouping; LPSTR lpDecimalSep; LPSTR lpThousandSep; UINT NegativeOrder; UINT PositiveOrder; LPSTR lpCurrencySymbol; } CURRENCYFMTA, *LPCURRENCYFMTA; typedef struct _currencyfmtW { UINT NumDigits; UINT LeadingZero; UINT Grouping; LPWSTR lpDecimalSep; LPWSTR lpThousandSep; UINT NegativeOrder; UINT PositiveOrder; LPWSTR lpCurrencySymbol; } CURRENCYFMTW, *LPCURRENCYFMTW; DECL_WINELIB_TYPE_AW(CURRENCYFMT) DECL_WINELIB_TYPE_AW(LPCURRENCYFMT) typedef struct _nlsversioninfo { DWORD dwNLSVersionInfoSize; DWORD dwNLSVersion; DWORD dwDefinedVersion; } NLSVERSIONINFO, *LPNLSVERSIONINFO; typedef struct _nlsversioninfoex { DWORD dwNLSVersionInfoSize; DWORD dwNLSVersion; DWORD dwDefinedVersion; DWORD dwEffectiveId; GUID guidCustomVersion; } NLSVERSIONINFOEX, *LPNLSVERSIONINFOEX; /* Define a bunch of callback types */ typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXEX)(LPWSTR,CALID,LPWSTR,LPARAM); typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXEX)(LPWSTR,CALID,LPARAM); typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCEX)(LPWSTR,LPARAM); #if defined(STRICT) typedef BOOL (CALLBACK *CALINFO_ENUMPROCA)(LPSTR); typedef BOOL (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR); typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXA)(LPSTR,CALID); typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXW)(LPWSTR,CALID); typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCA)(LPSTR); typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCW)(LPWSTR); typedef BOOL (CALLBACK *DATEFMT_ENUMPROCA)(LPSTR); typedef BOOL (CALLBACK *DATEFMT_ENUMPROCW)(LPWSTR); typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXA)(LPSTR,CALID); typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXW)(LPWSTR,CALID); typedef BOOL (CALLBACK *GEO_ENUMPROC)(GEOID); typedef BOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCA)(LGRPID,LCID,LPSTR,LONG_PTR); typedef BOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCW)(LGRPID,LCID,LPWSTR,LONG_PTR); typedef BOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCA)(LGRPID,LPSTR,LPSTR,DWORD,LONG_PTR); typedef BOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCW)(LGRPID,LPWSTR,LPWSTR,DWORD,LONG_PTR); typedef BOOL (CALLBACK *LOCALE_ENUMPROCA)(LPSTR); typedef BOOL (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR); typedef BOOL (CALLBACK *LOCALE_ENUMPROCEX)(LPWSTR, DWORD, LPARAM); typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCA)(LPSTR); typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCW)(LPWSTR); typedef BOOL (CALLBACK *UILANGUAGE_ENUMPROCA)(LPSTR,LONG_PTR); typedef BOOL (CALLBACK *UILANGUAGE_ENUMPROCW)(LPWSTR,LONG_PTR); #else typedef FARPROC CALINFO_ENUMPROCA; typedef FARPROC CALINFO_ENUMPROCW; typedef FARPROC CALINFO_ENUMPROCEXA; typedef FARPROC CALINFO_ENUMPROCEXW; typedef FARPROC CODEPAGE_ENUMPROCA; typedef FARPROC CODEPAGE_ENUMPROCW; typedef FARPROC DATEFMT_ENUMPROCA; typedef FARPROC DATEFMT_ENUMPROCW; typedef FARPROC DATEFMT_ENUMPROCEXA; typedef FARPROC DATEFMT_ENUMPROCEXW; typedef FARPROC GEO_ENUMPROC; typedef FARPROC LANGGROUPLOCALE_ENUMPROCA; typedef FARPROC LANGGROUPLOCALE_ENUMPROCW; typedef FARPROC LANGUAGEGROUP_ENUMPROCA; typedef FARPROC LANGUAGEGROUP_ENUMPROCW; typedef FARPROC LOCALE_ENUMPROCA; typedef FARPROC LOCALE_ENUMPROCW; typedef FARPROC TIMEFMT_ENUMPROCA; typedef FARPROC TIMEFMT_ENUMPROCW; typedef FARPROC UILANGUAGE_ENUMPROCA; typedef FARPROC UILANGUAGE_ENUMPROCW; #endif /* STRICT */ DECL_WINELIB_TYPE_AW(CALINFO_ENUMPROC) DECL_WINELIB_TYPE_AW(CALINFO_ENUMPROCEX) DECL_WINELIB_TYPE_AW(CODEPAGE_ENUMPROC) DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROC) DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROCEX) DECL_WINELIB_TYPE_AW(LANGGROUPLOCALE_ENUMPROC) DECL_WINELIB_TYPE_AW(LANGUAGEGROUP_ENUMPROC) DECL_WINELIB_TYPE_AW(LOCALE_ENUMPROC) DECL_WINELIB_TYPE_AW(TIMEFMT_ENUMPROC) DECL_WINELIB_TYPE_AW(UILANGUAGE_ENUMPROC) /* Geographic Information types */ enum SYSGEOTYPE { GEO_NATION = 1, GEO_LATITUDE, GEO_LONGITUDE, GEO_ISO2, GEO_ISO3, GEO_RFC1766, GEO_LCID, GEO_FRIENDLYNAME, GEO_OFFICIALNAME, GEO_TIMEZONES, GEO_OFFICIALLANGUAGES, GEO_ISO_UN_NUMBER, GEO_PARENT, GEO_DIALINGCODE, GEO_CURRENCYCODE, GEO_CURRENCYSYMBOL, GEO_NAME, GEO_ID }; enum SYSGEOCLASS { GEOCLASS_REGION = 14, GEOCLASS_NATION = 16 }; #define GEOID_NOT_AVAILABLE (-1) /* NLS Functions. */ WINBASEAPI INT WINAPI CompareStringA(LCID,DWORD,LPCSTR,INT,LPCSTR,INT); WINBASEAPI INT WINAPI CompareStringW(LCID,DWORD,LPCWSTR,INT,LPCWSTR,INT); #define CompareString WINELIB_NAME_AW(CompareString) WINBASEAPI INT WINAPI CompareStringEx(LPCWSTR,DWORD,LPCWSTR,INT,LPCWSTR,INT,LPNLSVERSIONINFO,LPVOID,LPARAM); WINBASEAPI INT WINAPI CompareStringOrdinal(const WCHAR *,INT,const WCHAR *,INT,BOOL); WINBASEAPI LCID WINAPI ConvertDefaultLocale(LCID); WINBASEAPI BOOL WINAPI EnumCalendarInfoA(CALINFO_ENUMPROCA,LCID,CALID,CALTYPE); WINBASEAPI BOOL WINAPI EnumCalendarInfoW(CALINFO_ENUMPROCW,LCID,CALID,CALTYPE); #define EnumCalendarInfo WINELIB_NAME_AW(EnumCalendarInfo) WINBASEAPI BOOL WINAPI EnumCalendarInfoExA(CALINFO_ENUMPROCEXA,LCID,CALID,CALTYPE); WINBASEAPI BOOL WINAPI EnumCalendarInfoExW(CALINFO_ENUMPROCEXW,LCID,CALID,CALTYPE); #define EnumCalendarInfoEx WINELIB_NAME_AW(EnumCalendarInfoEx) WINBASEAPI BOOL WINAPI EnumCalendarInfoExEx(CALINFO_ENUMPROCEXEX,LPCWSTR,CALID,LPCWSTR,CALTYPE,LPARAM); WINBASEAPI BOOL WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA,LCID,DWORD); WINBASEAPI BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD); #define EnumDateFormats WINELIB_NAME_AW(EnumDateFormats) WINBASEAPI BOOL WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA,LCID,DWORD); WINBASEAPI BOOL WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW,LCID,DWORD); #define EnumDateFormatsEx WINELIB_NAME_AW(EnumDateFormatsEx) WINBASEAPI BOOL WINAPI EnumDateFormatsExEx(DATEFMT_ENUMPROCEXEX,LPCWSTR,DWORD,LPARAM); WINBASEAPI BOOL WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA,DWORD); WINBASEAPI BOOL WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW,DWORD); #define EnumSystemCodePages WINELIB_NAME_AW(EnumSystemCodePages) WINBASEAPI BOOL WINAPI EnumSystemGeoID(GEOCLASS,GEOID,GEO_ENUMPROC); WINBASEAPI BOOL WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA,DWORD); WINBASEAPI BOOL WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW,DWORD); #define EnumSystemLocales WINELIB_NAME_AW(EnumSystemLocales) WINBASEAPI BOOL WINAPI EnumSystemLocalesEx(LOCALE_ENUMPROCEX,DWORD,LPARAM,LPVOID); WINBASEAPI BOOL WINAPI EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA,DWORD,LONG_PTR); WINBASEAPI BOOL WINAPI EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW,DWORD,LONG_PTR); #define EnumSystemLanguageGroups WINELIB_NAME_AW(EnumSystemLanguageGroups) WINBASEAPI BOOL WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA,LGRPID,DWORD,LONG_PTR); WINBASEAPI BOOL WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW,LGRPID,DWORD,LONG_PTR); #define EnumLanguageGroupLocales WINELIB_NAME_AW(EnumLanguageGroupLocales) WINBASEAPI BOOL WINAPI EnumTimeFormatsA(TIMEFMT_ENUMPROCA,LCID,DWORD); WINBASEAPI BOOL WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW,LCID,DWORD); #define EnumTimeFormats WINELIB_NAME_AW(EnumTimeFormats) WINBASEAPI BOOL WINAPI EnumTimeFormatsEx(TIMEFMT_ENUMPROCEX,LPCWSTR,DWORD,LPARAM); WINBASEAPI BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA,DWORD,LONG_PTR); WINBASEAPI BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW,DWORD,LONG_PTR); #define EnumUILanguages WINELIB_NAME_AW(EnumUILanguages) WINBASEAPI INT WINAPI FoldStringA(DWORD,LPCSTR,INT,LPSTR,INT); WINBASEAPI INT WINAPI FoldStringW(DWORD,LPCWSTR,INT,LPWSTR,INT); #define FoldString WINELIB_NAME_AW(FoldString) WINBASEAPI UINT WINAPI GetACP(void); WINBASEAPI BOOL WINAPI GetCPInfo(UINT,LPCPINFO); WINBASEAPI BOOL WINAPI GetCPInfoExA(UINT,DWORD,LPCPINFOEXA); WINBASEAPI BOOL WINAPI GetCPInfoExW(UINT,DWORD,LPCPINFOEXW); #define GetCPInfoEx WINELIB_NAME_AW(GetCPInfoEx) WINBASEAPI INT WINAPI GetCalendarInfoA(LCID,DWORD,DWORD,LPSTR,INT,LPDWORD); WINBASEAPI INT WINAPI GetCalendarInfoW(LCID,DWORD,DWORD,LPWSTR,INT,LPDWORD); #define GetCalendarInfo WINELIB_NAME_AW(GetCalendarInfo) WINBASEAPI INT WINAPI GetCurrencyFormatA(LCID,DWORD,LPCSTR,const CURRENCYFMTA*,LPSTR,INT); WINBASEAPI INT WINAPI GetCurrencyFormatEx(LPCWSTR,DWORD,LPCWSTR,const CURRENCYFMTW*,LPWSTR,int); WINBASEAPI INT WINAPI GetCurrencyFormatW(LCID,DWORD,LPCWSTR,const CURRENCYFMTW*,LPWSTR,INT); #define GetCurrencyFormat WINELIB_NAME_AW(GetCurrencyFormat) WINBASEAPI INT WINAPI GetDateFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,INT); WINBASEAPI INT WINAPI GetDateFormatEx(LPCWSTR,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT,LPCWSTR); WINBASEAPI INT WINAPI GetDateFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT); #define GetDateFormat WINELIB_NAME_AW(GetDateFormat) WINBASEAPI BOOL WINAPI GetFileMUIInfo(DWORD,PCWSTR,PFILEMUIINFO,DWORD*); WINBASEAPI BOOL WINAPI GetFileMUIPath(DWORD,PCWSTR,PWSTR,PULONG,PWSTR,PULONG,PULONGLONG); WINBASEAPI INT WINAPI GetGeoInfoA(GEOID,GEOTYPE,LPSTR,INT,LANGID); WINBASEAPI INT WINAPI GetGeoInfoW(GEOID,GEOTYPE,LPWSTR,INT,LANGID); #define GetGeoInfo WINELIB_NAME_AW(GetGeoInfo) WINBASEAPI INT WINAPI GetLocaleInfoA(LCID,LCTYPE,LPSTR,INT); WINBASEAPI INT WINAPI GetLocaleInfoW(LCID,LCTYPE,LPWSTR,INT); #define GetLocaleInfo WINELIB_NAME_AW(GetLocaleInfo) WINBASEAPI INT WINAPI GetLocaleInfoEx(LPCWSTR,LCTYPE,LPWSTR,INT); WINBASEAPI INT WINAPI GetNumberFormatA(LCID,DWORD,LPCSTR,const NUMBERFMTA*,LPSTR,INT); WINBASEAPI INT WINAPI GetNumberFormatW(LCID,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,INT); #define GetNumberFormat WINELIB_NAME_AW(GetNumberFormat) WINBASEAPI UINT WINAPI GetOEMCP(void); WINBASEAPI BOOL WINAPI GetProcessPreferredUILanguages(DWORD,PULONG,PZZWSTR,PULONG); WINBASEAPI BOOL WINAPI GetStringTypeA(LCID,DWORD,LPCSTR,INT,LPWORD); WINBASEAPI BOOL WINAPI GetStringTypeW(DWORD,LPCWSTR,INT,LPWORD); WINBASEAPI BOOL WINAPI GetStringTypeExA(LCID,DWORD,LPCSTR,INT,LPWORD); WINBASEAPI BOOL WINAPI GetStringTypeExW(LCID,DWORD,LPCWSTR,INT,LPWORD); #define GetStringTypeEx WINELIB_NAME_AW(GetStringTypeEx) WINBASEAPI LANGID WINAPI GetSystemDefaultLangID(void); WINBASEAPI INT WINAPI GetSystemDefaultLocaleName(LPWSTR,int); WINBASEAPI LCID WINAPI GetSystemDefaultLCID(void); WINBASEAPI LANGID WINAPI GetSystemDefaultUILanguage(void); WINBASEAPI BOOL WINAPI GetSystemPreferredUILanguages(DWORD,ULONG*,WCHAR*,ULONG*); WINBASEAPI LCID WINAPI GetThreadLocale(void); WINBASEAPI BOOL WINAPI GetThreadPreferredUILanguages(DWORD,ULONG*,WCHAR*,ULONG*); WINBASEAPI LANGID WINAPI GetThreadUILanguage(void); WINBASEAPI INT WINAPI GetTimeFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,INT); WINBASEAPI INT WINAPI GetTimeFormatEx(LPCWSTR,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT); WINBASEAPI INT WINAPI GetTimeFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT); #define GetTimeFormat WINELIB_NAME_AW(GetTimeFormat) WINBASEAPI LANGID WINAPI GetUserDefaultLangID(void); WINBASEAPI LCID WINAPI GetUserDefaultLCID(void); WINBASEAPI INT WINAPI GetUserDefaultLocaleName(LPWSTR,int); WINBASEAPI LANGID WINAPI GetUserDefaultUILanguage(void); WINBASEAPI GEOID WINAPI GetUserGeoID(GEOCLASS); WINNORMALIZEAPI INT WINAPI IdnToAscii(DWORD,LPCWSTR,INT,LPWSTR,INT); WINNORMALIZEAPI INT WINAPI IdnToNameprepUnicode(DWORD,LPCWSTR,INT,LPWSTR,INT); WINNORMALIZEAPI INT WINAPI IdnToUnicode(DWORD,LPCWSTR,INT,LPWSTR,INT); WINBASEAPI BOOL WINAPI IsDBCSLeadByte(BYTE); WINBASEAPI BOOL WINAPI IsDBCSLeadByteEx(UINT,BYTE); WINNORMALIZEAPI BOOL WINAPI IsNormalizedString(NORM_FORM,LPCWSTR,INT); WINBASEAPI BOOL WINAPI IsValidCodePage(UINT); WINBASEAPI BOOL WINAPI IsValidLanguageGroup(LGRPID,DWORD); WINBASEAPI BOOL WINAPI IsValidLocale(LCID,DWORD); WINBASEAPI BOOL WINAPI IsValidLocaleName(LPCWSTR); WINBASEAPI INT WINAPI LCIDToLocaleName(LCID,LPWSTR,INT,DWORD); WINBASEAPI INT WINAPI LCMapStringA(LCID,DWORD,LPCSTR,INT,LPSTR,INT); WINBASEAPI INT WINAPI LCMapStringW(LCID,DWORD,LPCWSTR,INT,LPWSTR,INT); #define LCMapString WINELIB_NAME_AW(LCMapString) WINBASEAPI INT WINAPI LCMapStringEx(LPCWSTR,DWORD,LPCWSTR,INT,LPWSTR,INT,LPNLSVERSIONINFO,LPVOID,LPARAM); WINBASEAPI LCID WINAPI LocaleNameToLCID(LPCWSTR,DWORD); WINBASEAPI INT WINAPI MultiByteToWideChar(UINT,DWORD,LPCSTR,INT,LPWSTR,INT); WINNORMALIZEAPI INT WINAPI NormalizeString(NORM_FORM,LPCWSTR,INT,LPWSTR,INT); WINBASEAPI INT WINAPI ResolveLocaleName(LPCWSTR,LPWSTR,INT); WINBASEAPI INT WINAPI SetCalendarInfoA(LCID,CALID,CALTYPE,LPCSTR); WINBASEAPI INT WINAPI SetCalendarInfoW(LCID,CALID,CALTYPE,LPCWSTR); #define SetCalendarInfo WINELIB_NAME_AW(SetCalendarInfo) WINBASEAPI BOOL WINAPI SetLocaleInfoA(LCID,LCTYPE,LPCSTR); WINBASEAPI BOOL WINAPI SetLocaleInfoW(LCID,LCTYPE,LPCWSTR); #define SetLocaleInfo WINELIB_NAME_AW(SetLocaleInfo) WINBASEAPI BOOL WINAPI SetThreadLocale(LCID); WINBASEAPI LANGID WINAPI SetThreadUILanguage(LANGID); WINBASEAPI BOOL WINAPI SetUserGeoID(GEOID); WINBASEAPI INT WINAPI WideCharToMultiByte(UINT,DWORD,LPCWSTR,INT,LPSTR,INT,LPCSTR,LPBOOL); WINBASEAPI INT WINAPI FindNLSStringEx(const WCHAR *,DWORD,const WCHAR *,INT,const WCHAR *,INT,INT *,NLSVERSIONINFO *,void *,LPARAM); #ifdef __cplusplus } #endif #endif /* !NONLS */ #endif /* __WINE_WINNLS_H */ ================================================ FILE: wine/windows/winnls32.h ================================================ /* * Copyright (C) 2005 Diego Petteno * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINNLS32_ #define _WINNLS32_ #ifdef __cplusplus extern "C" { #endif UINT WINAPI WINNLSGetIMEHotkey(HWND); BOOL WINAPI WINNLSEnableIME(HWND, BOOL); BOOL WINAPI WINNLSGetEnableStatus(HWND); #ifdef __cplusplus } #endif #endif /* _WINNLS32_ */ ================================================ FILE: wine/windows/winnt.h ================================================ /* * Win32 definitions for Windows NT * * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINNT_ #define _WINNT_ #include #include #ifndef RC_INVOKED #include #include #include #endif #ifdef __cplusplus extern "C" { #endif #ifdef _NTSYSTEM_ #define NTSYSAPI #else #define NTSYSAPI DECLSPEC_IMPORT #endif #define NTAPI __stdcall #ifndef MIDL_PASS # if defined(_MSC_VER) # define DECLSPEC_IMPORT __declspec(dllimport) # elif defined(__MINGW32__) || defined(__CYGWIN__) # define DECLSPEC_IMPORT __attribute__((dllimport)) # else # define DECLSPEC_IMPORT DECLSPEC_HIDDEN # endif #else # define DECLSPEC_IMPORT #endif #ifndef DECLSPEC_NORETURN # if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS) # define DECLSPEC_NORETURN __declspec(noreturn) # elif defined(__GNUC__) # define DECLSPEC_NORETURN __attribute__((noreturn)) # else # define DECLSPEC_NORETURN # endif #endif #ifndef DECLSPEC_ALIGN # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) # define DECLSPEC_ALIGN(x) __declspec(align(x)) # elif defined(__GNUC__) # define DECLSPEC_ALIGN(x) __attribute__((aligned(x))) # else # define DECLSPEC_ALIGN(x) # endif #endif #ifndef DECLSPEC_CACHEALIGN # define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(128) #endif #ifndef DECLSPEC_UUID # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined (__cplusplus) # define DECLSPEC_UUID(x) __declspec(uuid(x)) # else # define DECLSPEC_UUID(x) # endif #endif #ifndef DECLSPEC_NOVTABLE # if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus) # define DECLSPEC_NOVTABLE __declspec(novtable) # else # define DECLSPEC_NOVTABLE # endif #endif #ifndef DECLSPEC_SELECTANY #if defined(_MSC_VER) && (_MSC_VER >= 1100) #define DECLSPEC_SELECTANY __declspec(selectany) #else #define DECLSPEC_SELECTANY #endif #endif #ifndef NOP_FUNCTION # if defined(_MSC_VER) && (_MSC_VER >= 1210) # define NOP_FUNCTION __noop # else # define NOP_FUNCTION (void)0 # endif #endif #ifndef DECLSPEC_ADDRSAFE # if defined(_MSC_VER) && (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64)) # define DECLSPEC_ADDRSAFE __declspec(address_safe) # else # define DECLSPEC_ADDRSAFE # endif #endif #ifndef FORCEINLINE # if defined(_MSC_VER) && (_MSC_VER >= 1200) # define FORCEINLINE __forceinline # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) # define FORCEINLINE inline __attribute__((always_inline)) # else # define FORCEINLINE inline # endif #endif #ifndef DECLSPEC_DEPRECATED # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) # define DECLSPEC_DEPRECATED __declspec(deprecated) # define DEPRECATE_SUPPORTED # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) # define DECLSPEC_DEPRECATED __attribute__((deprecated)) # define DEPRECATE_SUPPORTED # else # define DECLSPEC_DEPRECATED # undef DEPRECATE_SUPPORTED # endif #endif /* a couple of useful Wine extensions */ #ifdef _MSC_VER # define DECLSPEC_EXPORT __declspec(dllexport) #elif defined(__MINGW32__) # define DECLSPEC_EXPORT __attribute__((dllexport)) #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) && !defined(__sun) # define DECLSPEC_EXPORT __attribute__((visibility ("default"))) #else # define DECLSPEC_EXPORT #endif #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) || defined(__sun) # define DECLSPEC_HIDDEN #elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) # define DECLSPEC_HIDDEN __attribute__((visibility ("hidden"))) #else # define DECLSPEC_HIDDEN #endif #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))) #define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x))) #else #define __WINE_ALLOC_SIZE(x) #endif /* Anonymous union/struct handling */ #ifndef NONAMELESSSTRUCT # ifdef __GNUC__ /* Anonymous struct support starts with gcc 2.96 or gcc/g++ 3.x */ # if (__GNUC__ < 2) || ((__GNUC__ == 2) && (defined(__cplusplus) || (__GNUC_MINOR__ < 96))) # define NONAMELESSSTRUCT # endif # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) # define NONAMELESSSTRUCT # endif #endif /* NONAMELESSSTRUCT */ #ifndef NONAMELESSUNION # ifdef __GNUC__ /* Anonymous unions support starts with gcc 2.96/g++ 2.95 */ # if (__GNUC__ < 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ < 95) || ((__GNUC_MINOR__ == 95) && !defined(__cplusplus)))) # define NONAMELESSUNION # endif # elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) # define NONAMELESSUNION # endif #endif /* NONAMELESSUNION */ #undef DUMMYSTRUCTNAME #undef DUMMYSTRUCTNAME1 #undef DUMMYSTRUCTNAME2 #undef DUMMYSTRUCTNAME3 #undef DUMMYSTRUCTNAME4 #undef DUMMYSTRUCTNAME5 #ifndef NONAMELESSSTRUCT #define DUMMYSTRUCTNAME #define DUMMYSTRUCTNAME1 #define DUMMYSTRUCTNAME2 #define DUMMYSTRUCTNAME3 #define DUMMYSTRUCTNAME4 #define DUMMYSTRUCTNAME5 #else /* !defined(NONAMELESSSTRUCT) */ #define DUMMYSTRUCTNAME s #define DUMMYSTRUCTNAME1 s1 #define DUMMYSTRUCTNAME2 s2 #define DUMMYSTRUCTNAME3 s3 #define DUMMYSTRUCTNAME4 s4 #define DUMMYSTRUCTNAME5 s5 #endif /* !defined(NONAMELESSSTRUCT) */ #undef DUMMYUNIONNAME #undef DUMMYUNIONNAME1 #undef DUMMYUNIONNAME2 #undef DUMMYUNIONNAME3 #undef DUMMYUNIONNAME4 #undef DUMMYUNIONNAME5 #undef DUMMYUNIONNAME6 #undef DUMMYUNIONNAME7 #undef DUMMYUNIONNAME8 #ifndef NONAMELESSUNION #define DUMMYUNIONNAME #define DUMMYUNIONNAME1 #define DUMMYUNIONNAME2 #define DUMMYUNIONNAME3 #define DUMMYUNIONNAME4 #define DUMMYUNIONNAME5 #define DUMMYUNIONNAME6 #define DUMMYUNIONNAME7 #define DUMMYUNIONNAME8 #else /* !defined(NONAMELESSUNION) */ #define DUMMYUNIONNAME u #define DUMMYUNIONNAME1 u1 #define DUMMYUNIONNAME2 u2 #define DUMMYUNIONNAME3 u3 #define DUMMYUNIONNAME4 u4 #define DUMMYUNIONNAME5 u5 #define DUMMYUNIONNAME6 u6 #define DUMMYUNIONNAME7 u7 #define DUMMYUNIONNAME8 u8 #endif /* !defined(NONAMELESSUNION) */ #undef __C89_NAMELESS #undef __C89_NAMELESSSTRUCTNAME #undef __C89_NAMELESSSTRUCTNAME1 #undef __C89_NAMELESSSTRUCTNAME2 #undef __C89_NAMELESSSTRUCTNAME3 #undef __C89_NAMELESSSTRUCTNAME4 #undef __C89_NAMELESSSTRUCTNAME5 #undef __C89_NAMELESSUNIONNAME #undef __C89_NAMELESSUNIONNAME1 #undef __C89_NAMELESSUNIONNAME2 #undef __C89_NAMELESSUNIONNAME3 #undef __C89_NAMELESSUNIONNAME4 #undef __C89_NAMELESSUNIONNAME5 #undef __C89_NAMELESSUNIONNAME6 #undef __C89_NAMELESSUNIONNAME7 #undef __C89_NAMELESSUNIONNAME8 #if !defined(__WINESRC__) && !defined(WINE_NO_NAMELESS_EXTENSION) # ifdef __GNUC__ /* Anonymous structs support starts with gcc 2.96/g++ 2.95 */ # if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus)))) # define __C89_NAMELESS __extension__ # endif # elif defined(_MSC_VER) # define __C89_NAMELESS # endif #endif #ifdef __C89_NAMELESS # define __C89_NAMELESSSTRUCTNAME # define __C89_NAMELESSSTRUCTNAME1 # define __C89_NAMELESSSTRUCTNAME2 # define __C89_NAMELESSSTRUCTNAME3 # define __C89_NAMELESSSTRUCTNAME4 # define __C89_NAMELESSSTRUCTNAME5 # define __C89_NAMELESSUNIONNAME # define __C89_NAMELESSUNIONNAME1 # define __C89_NAMELESSUNIONNAME2 # define __C89_NAMELESSUNIONNAME3 # define __C89_NAMELESSUNIONNAME4 # define __C89_NAMELESSUNIONNAME5 # define __C89_NAMELESSUNIONNAME6 # define __C89_NAMELESSUNIONNAME7 # define __C89_NAMELESSUNIONNAME8 #else # define __C89_NAMELESS # define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME # define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1 # define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2 # define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3 # define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4 # define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5 # define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME # define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1 # define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2 # define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3 # define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4 # define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5 # define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6 # define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7 # define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8 #endif /* C99 restrict support */ #if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED) # if defined(_MSC_VER) && defined(_M_MRX000) # define RESTRICTED_POINTER __restrict # elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95))) # define RESTRICTED_POINTER __restrict # else # define RESTRICTED_POINTER # endif #else # define RESTRICTED_POINTER #endif /* C99 unaligned support */ #ifndef UNALIGNED #if defined(_MSC_VER) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64)) # define UNALIGNED __unaligned # ifdef _WIN64 # define UNALIGNED64 __unaligned # else # define UNALIGNED64 # endif #else # define UNALIGNED # define UNALIGNED64 #endif #endif /* Alignment macros */ #if defined(_WIN64) || (defined(_MSC_VER) && defined(_M_ALPHA)) || defined(__alpha__) #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG) #define MEMORY_ALLOCATION_ALIGNMENT 16 #else #define MAX_NATURAL_ALIGNMENT sizeof(DWORD) #define MEMORY_ALLOCATION_ALIGNMENT 8 #endif #if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) # define TYPE_ALIGNMENT(t) __alignof(t) #elif defined(__GNUC__) # define TYPE_ALIGNMENT(t) __alignof__(t) #else # define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test) #endif #ifdef _WIN64 # define PROBE_ALIGNMENT(_s) \ (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? \ TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD)) # define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD) #else # define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD) #endif /* Compile time assertion */ #if defined(_MSC_VER) # define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1] #else # define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1]) #endif /* Eliminate Microsoft C/C++ compiler warning 4715 */ #if defined(_MSC_VER) && (_MSC_VER > 1200) # define DEFAULT_UNREACHABLE default: __assume(0) #elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)))) # define DEFAULT_UNREACHABLE default: __builtin_unreachable() #else # define DEFAULT_UNREACHABLE default: #endif /* Error Masks */ #define APPLICATION_ERROR_MASK 0x20000000 #define ERROR_SEVERITY_SUCCESS 0x00000000 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000 #define ERROR_SEVERITY_WARNING 0x80000000 #define ERROR_SEVERITY_ERROR 0xC0000000 #ifdef __cplusplus #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \ extern "C++" { \ inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \ inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \ inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \ inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \ inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \ inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \ inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \ } #else #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */ #endif /* Microsoft's macros for declaring functions */ #ifdef __cplusplus # define EXTERN_C extern "C" #else # define EXTERN_C extern #endif #define STDMETHODCALLTYPE __stdcall #define STDMETHODVCALLTYPE __cdecl #define STDAPICALLTYPE __stdcall #define STDAPIVCALLTYPE __cdecl #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE #define STDAPI_(type) EXTERN_C type STDAPICALLTYPE #define STDMETHODIMP HRESULT STDMETHODCALLTYPE #define STDMETHODIMP_(type) type STDMETHODCALLTYPE #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE /* Define the basic types */ #ifndef VOID #define VOID void #endif typedef VOID *PVOID; typedef VOID *PVOID64; typedef BYTE BOOLEAN, *PBOOLEAN; typedef char CHAR, *PCHAR; typedef short SHORT, *PSHORT; #ifdef _MSC_VER typedef long LONG, *PLONG; #else typedef int LONG, *PLONG; #endif /* Some systems might have wchar_t, but we really need 16 bit characters */ #ifdef WINE_UNICODE_NATIVE typedef wchar_t WCHAR, *PWCHAR; #else typedef unsigned short WCHAR, *PWCHAR; #endif typedef ULONG UCSCHAR; #define MIN_UCSCHAR (0) #define MAX_UCSCHAR (0x0010ffff) #define UCSCHAR_INVALID_CHARACTER (0xffffffff) /* 'Extended/Wide' numerical types */ #ifndef _ULONGLONG_ # define _ULONGLONG_ # ifdef _MSC_VER typedef signed __int64 LONGLONG, *PLONGLONG; typedef unsigned __int64 ULONGLONG, *PULONGLONG; # else typedef signed __int64 DECLSPEC_ALIGN(8) LONGLONG, *PLONGLONG; typedef unsigned __int64 DECLSPEC_ALIGN(8) ULONGLONG, *PULONGLONG; # endif #endif #ifndef _DWORDLONG_ # define _DWORDLONG_ # ifdef _MSC_VER typedef ULONGLONG DWORDLONG, *PDWORDLONG; # else typedef ULONGLONG DECLSPEC_ALIGN(8) DWORDLONG, *PDWORDLONG; # endif #endif /* ANSI string types */ typedef CHAR *PCH, *LPCH, *PNZCH; typedef const CHAR *PCCH, *LPCCH, *PCNZCH; typedef CHAR *PSTR, *LPSTR, *NPSTR; typedef const CHAR *PCSTR, *LPCSTR; typedef CHAR *PZZSTR; typedef const CHAR *PCZZSTR; /* Unicode string types */ typedef const WCHAR *PCWCHAR, *LPCUWCHAR, *PCUWCHAR; typedef WCHAR *PWCH, *LPWCH; typedef const WCHAR *PCWCH, *LPCWCH; typedef WCHAR *PNZWCH, *PUNZWCH; typedef const WCHAR *PCNZWCH, *PCUNZWCH; typedef WCHAR *PWSTR, *LPWSTR, *NWPSTR; typedef const WCHAR *PCWSTR, *LPCWSTR; typedef WCHAR *PZZWSTR, *PUZZWSTR; typedef const WCHAR *PCZZWSTR, *PCUZZWSTR; typedef PWSTR *PZPWSTR; typedef PCWSTR *PZPCWSTR; /* Neutral character and string types */ /* These are only defined for Winelib, i.e. _not_ defined for * the emulator. The reason is they depend on the UNICODE * macro which only exists in the user's code. */ #ifndef WINE_NO_UNICODE_MACROS # ifdef UNICODE # ifndef _TCHAR_DEFINED typedef WCHAR TCHAR, *PTCHAR; # define _TCHAR_DEFINED #endif typedef LPWCH PTCH, LPTCH; typedef LPCWCH PCTCH, LPCTCH; typedef LPWSTR PTSTR, LPTSTR; typedef LPCWSTR PCTSTR, LPCTSTR; typedef LPWSTR PUTSTR, LPUTSTR; typedef LPCWSTR PCUTSTR, LPCUTSTR; typedef PNZWCH PNZTCH; typedef PUNZWCH PUNZTCH; typedef PCNZWCH PCNZTCH; typedef PCUNZWCH PCUNZTCH; typedef PZZWSTR PZZTSTR; typedef PCZZWSTR PCZZTSTR; typedef PUZZWSTR PUZZTSTR; typedef PCUZZWSTR PCUZZTSTR; # else /* UNICODE */ # ifndef _TCHAR_DEFINED typedef CHAR TCHAR, *PTCHAR; # define _TCHAR_DEFINED # endif typedef LPCH PTCH, LPTCH; typedef LPCCH PCTCH, LPCTCH; typedef LPSTR PTSTR, LPTSTR; typedef LPCSTR PCTSTR, LPCTSTR; typedef PNZCH PNZTCH, PUNZTCH; typedef PCNZCH PCNZTCH, PCUNZTCH; typedef PZZSTR PZZTSTR, PUZZTSTR; typedef PCZZSTR PCZZTSTR, PCUZZTSTR; # endif /* UNICODE */ #endif /* WINE_NO_UNICODE_MACROS */ /* UCS string types */ typedef UCSCHAR *PUCSCHAR, *PUUCSCHAR; typedef const UCSCHAR *PCUCSCHAR, *PCUUCSCHAR; typedef UCSCHAR *PUCSSTR, *PUUCSSTR; typedef const UCSCHAR *PCUCSSTR, *PCUUCSSTR; /* Misc common WIN32 types */ typedef char CCHAR; typedef DWORD LCID, *PLCID; typedef WORD LANGID; typedef DWORD EXECUTION_STATE; #ifndef _HRESULT_DEFINED #define _HRESULT_DEFINED typedef LONG HRESULT; #endif /* Handle type */ typedef void *HANDLE; typedef HANDLE *PHANDLE, *LPHANDLE; #ifdef STRICT #define DECLARE_HANDLE(a) typedef struct a##__ { int unused; } *a #else /*STRICT*/ #define DECLARE_HANDLE(a) typedef HANDLE a #endif /*STRICT*/ typedef BYTE FCHAR; typedef WORD FSHORT; typedef DWORD FLONG; /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */ #ifndef __MSABI_LONG # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) # define __MSABI_LONG(x) x ## l # else # define __MSABI_LONG(x) x # endif #endif /* Defines */ #ifndef WIN32_NO_STATUS #define STATUS_WAIT_0 ((DWORD) 0x00000000) #define STATUS_ABANDONED_WAIT_0 ((DWORD) 0x00000080) #define STATUS_USER_APC ((DWORD) 0x000000C0) #define STATUS_TIMEOUT ((DWORD) 0x00000102) #define STATUS_PENDING ((DWORD) 0x00000103) #define STATUS_SEGMENT_NOTIFICATION ((DWORD) 0x40000005) #define STATUS_GUARD_PAGE_VIOLATION ((DWORD) 0x80000001) #define STATUS_DATATYPE_MISALIGNMENT ((DWORD) 0x80000002) #define STATUS_BREAKPOINT ((DWORD) 0x80000003) #define STATUS_SINGLE_STEP ((DWORD) 0x80000004) #define STATUS_ACCESS_VIOLATION ((DWORD) 0xC0000005) #define STATUS_IN_PAGE_ERROR ((DWORD) 0xC0000006) #define STATUS_INVALID_HANDLE ((DWORD) 0xC0000008) #define STATUS_NO_MEMORY ((DWORD) 0xC0000017) #define STATUS_ILLEGAL_INSTRUCTION ((DWORD) 0xC000001D) #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD) 0xC0000025) #define STATUS_INVALID_DISPOSITION ((DWORD) 0xC0000026) #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD) 0xC000008C) #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD) 0xC000008D) #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD) 0xC000008E) #define STATUS_FLOAT_INEXACT_RESULT ((DWORD) 0xC000008F) #define STATUS_FLOAT_INVALID_OPERATION ((DWORD) 0xC0000090) #define STATUS_FLOAT_OVERFLOW ((DWORD) 0xC0000091) #define STATUS_FLOAT_STACK_CHECK ((DWORD) 0xC0000092) #define STATUS_FLOAT_UNDERFLOW ((DWORD) 0xC0000093) #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD) 0xC0000094) #define STATUS_INTEGER_OVERFLOW ((DWORD) 0xC0000095) #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD) 0xC0000096) #define STATUS_STACK_OVERFLOW ((DWORD) 0xC00000FD) #define STATUS_CONTROL_C_EXIT ((DWORD) 0xC000013A) #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD) 0xC00002B4) #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD) 0xC00002B5) #define STATUS_REG_NAT_CONSUMPTION ((DWORD) 0xC00002C9) #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD) 0xC015000F) #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD) 0xC0150010) /* status values for ContinueDebugEvent */ #define DBG_EXCEPTION_HANDLED ((DWORD) 0x00010001) #define DBG_CONTINUE ((DWORD) 0x00010002) #define DBG_TERMINATE_THREAD ((DWORD) 0x40010003) #define DBG_TERMINATE_PROCESS ((DWORD) 0x40010004) #define DBG_CONTROL_C ((DWORD) 0x40010005) #define DBG_PRINTEXCEPTION_C ((DWORD) 0x40010006) #define DBG_RIPEXCEPTION ((DWORD) 0x40010007) #define DBG_CONTROL_BREAK ((DWORD) 0x40010008) #define DBG_COMMAND_EXCEPTION ((DWORD) 0x40010009) #define DBG_EXCEPTION_NOT_HANDLED ((DWORD) 0x80010001) #endif /* WIN32_NO_STATUS */ /* Argument 1 passed to the DllEntryProc. */ #define DLL_PROCESS_DETACH 0 /* detach process (unload library) */ #define DLL_PROCESS_ATTACH 1 /* attach process (load library) */ #define DLL_THREAD_ATTACH 2 /* attach new thread */ #define DLL_THREAD_DETACH 3 /* detach thread */ #ifdef __WINESRC__ #define DLL_WINE_PREATTACH 8 /* called before process attach for Wine builtins */ #endif /* u.x.wProcessorArchitecture (NT) */ #define PROCESSOR_ARCHITECTURE_INTEL 0 #define PROCESSOR_ARCHITECTURE_MIPS 1 #define PROCESSOR_ARCHITECTURE_ALPHA 2 #define PROCESSOR_ARCHITECTURE_PPC 3 #define PROCESSOR_ARCHITECTURE_SHX 4 #define PROCESSOR_ARCHITECTURE_ARM 5 #define PROCESSOR_ARCHITECTURE_IA64 6 #define PROCESSOR_ARCHITECTURE_ALPHA64 7 #define PROCESSOR_ARCHITECTURE_MSIL 8 #define PROCESSOR_ARCHITECTURE_AMD64 9 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10 #define PROCESSOR_ARCHITECTURE_NEUTRAL 11 #define PROCESSOR_ARCHITECTURE_ARM64 12 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF /* dwProcessorType */ #define PROCESSOR_INTEL_386 386 #define PROCESSOR_INTEL_486 486 #define PROCESSOR_INTEL_PENTIUM 586 #define PROCESSOR_INTEL_860 860 #define PROCESSOR_INTEL_IA64 2200 #define PROCESSOR_AMD_X8664 8664 #define PROCESSOR_MIPS_R2000 2000 #define PROCESSOR_MIPS_R3000 3000 #define PROCESSOR_MIPS_R4000 4000 #define PROCESSOR_ALPHA_21064 21064 #define PROCESSOR_PPC_601 601 #define PROCESSOR_PPC_603 603 #define PROCESSOR_PPC_604 604 #define PROCESSOR_PPC_620 620 #define PROCESSOR_HITACHI_SH3 10003 #define PROCESSOR_HITACHI_SH3E 10004 #define PROCESSOR_HITACHI_SH4 10005 #define PROCESSOR_MOTOROLA_821 821 #define PROCESSOR_SHx_SH3 103 #define PROCESSOR_SHx_SH4 104 #define PROCESSOR_STRONGARM 2577 #define PROCESSOR_ARM720 1824 /* 0x720 */ #define PROCESSOR_ARM820 2080 /* 0x820 */ #define PROCESSOR_ARM920 2336 /* 0x920 */ #define PROCESSOR_ARM_7TDMI 70001 #define PROCESSOR_OPTIL 18767 #ifdef _WIN64 #define MAXIMUM_PROCESSORS 64 #else #define MAXIMUM_PROCESSORS 32 #endif typedef struct _MEMORY_BASIC_INFORMATION { LPVOID BaseAddress; LPVOID AllocationBase; DWORD AllocationProtect; SIZE_T RegionSize; DWORD State; DWORD Protect; DWORD Type; } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; #define PAGE_NOACCESS 0x01 #define PAGE_READONLY 0x02 #define PAGE_READWRITE 0x04 #define PAGE_WRITECOPY 0x08 #define PAGE_EXECUTE 0x10 #define PAGE_EXECUTE_READ 0x20 #define PAGE_EXECUTE_READWRITE 0x40 #define PAGE_EXECUTE_WRITECOPY 0x80 #define PAGE_GUARD 0x100 #define PAGE_NOCACHE 0x200 #define PAGE_WRITECOMBINE 0x400 #define MEM_COMMIT 0x00001000 #define MEM_RESERVE 0x00002000 #define MEM_DECOMMIT 0x00004000 #define MEM_RELEASE 0x00008000 #define MEM_FREE 0x00010000 #define MEM_PRIVATE 0x00020000 #define MEM_MAPPED 0x00040000 #define MEM_RESET 0x00080000 #define MEM_TOP_DOWN 0x00100000 #define MEM_WRITE_WATCH 0x00200000 #define MEM_PHYSICAL 0x00400000 #define MEM_LARGE_PAGES 0x20000000 #define MEM_4MB_PAGES 0x80000000 #define SEC_FILE 0x00800000 #define SEC_IMAGE 0x01000000 #define SEC_PROTECTED_IMAGE 0x02000000 #define SEC_RESERVE 0x04000000 #define SEC_COMMIT 0x08000000 #define SEC_NOCACHE 0x10000000 #define SEC_WRITECOMBINE 0x40000000 #define SEC_LARGE_PAGES 0x80000000 #define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE) #define MEM_IMAGE SEC_IMAGE #define WRITE_WATCH_FLAG_RESET 0x00000001 #define AT_ROUND_TO_PAGE 0x40000000 #define MINCHAR 0x80 #define MAXCHAR 0x7f #define MINSHORT 0x8000 #define MAXSHORT 0x7fff #define MINLONG 0x80000000 #define MAXLONG 0x7fffffff #define MAXBYTE 0xff #define MAXWORD 0xffff #define MAXDWORD 0xffffffff #define MAXLONGLONG (((LONGLONG)0x7fffffff << 32) | 0xffffffff) #define UNICODE_STRING_MAX_CHARS 32767 #define FIELD_OFFSET(type, field) ((LONG)offsetof(type, field)) #define CONTAINING_RECORD(address, type, field) \ ((type *)((PCHAR)(address) - offsetof(type, field))) #ifdef __WINESRC__ # define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #endif /* Types */ typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; } LIST_ENTRY, *PLIST_ENTRY, * RESTRICTED_POINTER PRLIST_ENTRY; typedef struct _SINGLE_LIST_ENTRY { struct _SINGLE_LIST_ENTRY *Next; } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; #ifdef _WIN64 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY; typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY { PSLIST_ENTRY Next; } SLIST_ENTRY; typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER { struct { ULONGLONG Alignment; ULONGLONG Region; } DUMMYSTRUCTNAME; struct { ULONGLONG Depth:16; ULONGLONG Sequence:9; ULONGLONG NextEntry:39; ULONGLONG HeaderType:1; ULONGLONG Init:1; ULONGLONG Reserved:59; ULONGLONG Region:3; } Header8; struct { ULONGLONG Depth:16; ULONGLONG Sequence:48; ULONGLONG HeaderType:1; ULONGLONG Init:1; ULONGLONG Reserved:2; ULONGLONG NextEntry:60; } Header16; } SLIST_HEADER, *PSLIST_HEADER; #else #undef SLIST_ENTRY /* for Mac OS */ #define SLIST_ENTRY SINGLE_LIST_ENTRY #define _SLIST_ENTRY _SINGLE_LIST_ENTRY #define PSLIST_ENTRY PSINGLE_LIST_ENTRY typedef union _SLIST_HEADER { ULONGLONG Alignment; struct { SLIST_ENTRY Next; WORD Depth; WORD Sequence; } DUMMYSTRUCTNAME; } SLIST_HEADER, *PSLIST_HEADER; #endif NTSYSAPI PSLIST_ENTRY WINAPI RtlFirstEntrySList(const SLIST_HEADER*); NTSYSAPI VOID WINAPI RtlInitializeSListHead(PSLIST_HEADER); NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedFlushSList(PSLIST_HEADER); NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPopEntrySList(PSLIST_HEADER); NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY); NTSYSAPI WORD WINAPI RtlQueryDepthSList(PSLIST_HEADER); /* Heap flags */ #define HEAP_NO_SERIALIZE 0x00000001 #define HEAP_GROWABLE 0x00000002 #define HEAP_GENERATE_EXCEPTIONS 0x00000004 #define HEAP_ZERO_MEMORY 0x00000008 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020 #define HEAP_FREE_CHECKING_ENABLED 0x00000040 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080 #define HEAP_CREATE_ALIGN_16 0x00010000 #define HEAP_CREATE_ENABLE_TRACING 0x00020000 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000 /* This flag allows it to create heaps shared by all processes under win95, FIXME: correct name */ #define HEAP_SHARED 0x04000000 typedef enum _HEAP_INFORMATION_CLASS { HeapCompatibilityInformation, } HEAP_INFORMATION_CLASS; /* Processor feature flags. */ #define PF_FLOATING_POINT_PRECISION_ERRATA 0 #define PF_FLOATING_POINT_EMULATED 1 #define PF_COMPARE_EXCHANGE_DOUBLE 2 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3 #define PF_PPC_MOVEMEM_64BIT_OK 4 #define PF_ALPHA_BYTE_INSTRUCTIONS 5 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8 #define PF_PAE_ENABLED 9 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 #define PF_SSE_DAZ_MODE_AVAILABLE 11 #define PF_NX_ENABLED 12 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13 #define PF_COMPARE_EXCHANGE128 14 #define PF_COMPARE64_EXCHANGE128 15 #define PF_CHANNELS_ENABLED 16 #define PF_XSAVE_ENABLED 17 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20 #define PF_VIRT_FIRMWARE_ENABLED 21 #define PF_RDWRFSGSBASE_AVAILABLE 22 #define PF_FASTFAIL_AVAILABLE 23 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28 #define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29 #define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30 #define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31 /* Execution state flags */ #define ES_SYSTEM_REQUIRED 0x00000001 #define ES_DISPLAY_REQUIRED 0x00000002 #define ES_USER_PRESENT 0x00000004 #define ES_CONTINUOUS 0x80000000 /* The Win32 register context */ /* i386 context definitions */ #ifdef __i386__ #define SIZE_OF_80387_REGISTERS 80 typedef struct _FLOATING_SAVE_AREA { DWORD ControlWord; DWORD StatusWord; DWORD TagWord; DWORD ErrorOffset; DWORD ErrorSelector; DWORD DataOffset; DWORD DataSelector; BYTE RegisterArea[SIZE_OF_80387_REGISTERS]; DWORD Cr0NpxState; } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; #define MAXIMUM_SUPPORTED_EXTENSION 512 typedef struct _CONTEXT { DWORD ContextFlags; /* 000 */ /* These are selected by CONTEXT_DEBUG_REGISTERS */ DWORD Dr0; /* 004 */ DWORD Dr1; /* 008 */ DWORD Dr2; /* 00c */ DWORD Dr3; /* 010 */ DWORD Dr6; /* 014 */ DWORD Dr7; /* 018 */ /* These are selected by CONTEXT_FLOATING_POINT */ FLOATING_SAVE_AREA FloatSave; /* 01c */ /* These are selected by CONTEXT_SEGMENTS */ DWORD SegGs; /* 08c */ DWORD SegFs; /* 090 */ DWORD SegEs; /* 094 */ DWORD SegDs; /* 098 */ /* These are selected by CONTEXT_INTEGER */ DWORD Edi; /* 09c */ DWORD Esi; /* 0a0 */ DWORD Ebx; /* 0a4 */ DWORD Edx; /* 0a8 */ DWORD Ecx; /* 0ac */ DWORD Eax; /* 0b0 */ /* These are selected by CONTEXT_CONTROL */ DWORD Ebp; /* 0b4 */ DWORD Eip; /* 0b8 */ DWORD SegCs; /* 0bc */ DWORD EFlags; /* 0c0 */ DWORD Esp; /* 0c4 */ DWORD SegSs; /* 0c8 */ BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; /* 0xcc */ } CONTEXT; #define CONTEXT_X86 0x00010000 #define CONTEXT_i386 CONTEXT_X86 #define CONTEXT_i486 CONTEXT_X86 #define CONTEXT_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */ #define CONTEXT_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */ #define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */ #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x0008) /* 387 state */ #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */ #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS) #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS) #define EXCEPTION_READ_FAULT 0 #define EXCEPTION_WRITE_FAULT 1 #define EXCEPTION_EXECUTE_FAULT 8 #endif /* __i386__ */ typedef struct _LDT_ENTRY { WORD LimitLow; WORD BaseLow; union { struct { BYTE BaseMid; BYTE Flags1; BYTE Flags2; BYTE BaseHi; } Bytes; struct { unsigned BaseMid: 8; unsigned Type : 5; unsigned Dpl : 2; unsigned Pres : 1; unsigned LimitHi : 4; unsigned Sys : 1; unsigned Reserved_0 : 1; unsigned Default_Big : 1; unsigned Granularity : 1; unsigned BaseHi : 8; } Bits; } HighWord; } LDT_ENTRY, *PLDT_ENTRY, WOW64_LDT_ENTRY, *PWOW64_LDT_ENTRY; /* x86-64 context definitions */ #if defined(__x86_64__) #define CONTEXT_AMD64 0x00100000 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x0001) #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x0002) #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x0004) #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x0008) #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) #define EXCEPTION_READ_FAULT 0 #define EXCEPTION_WRITE_FAULT 1 #define EXCEPTION_EXECUTE_FAULT 8 typedef struct DECLSPEC_ALIGN(16) _M128A { ULONGLONG Low; LONGLONG High; } M128A, *PM128A; typedef struct _XMM_SAVE_AREA32 { WORD ControlWord; /* 000 */ WORD StatusWord; /* 002 */ BYTE TagWord; /* 004 */ BYTE Reserved1; /* 005 */ WORD ErrorOpcode; /* 006 */ DWORD ErrorOffset; /* 008 */ WORD ErrorSelector; /* 00c */ WORD Reserved2; /* 00e */ DWORD DataOffset; /* 010 */ WORD DataSelector; /* 014 */ WORD Reserved3; /* 016 */ DWORD MxCsr; /* 018 */ DWORD MxCsr_Mask; /* 01c */ M128A FloatRegisters[8]; /* 020 */ M128A XmmRegisters[16]; /* 0a0 */ BYTE Reserved4[96]; /* 1a0 */ } XMM_SAVE_AREA32, *PXMM_SAVE_AREA32; typedef struct DECLSPEC_ALIGN(16) _CONTEXT { DWORD64 P1Home; /* 000 */ DWORD64 P2Home; /* 008 */ DWORD64 P3Home; /* 010 */ DWORD64 P4Home; /* 018 */ DWORD64 P5Home; /* 020 */ DWORD64 P6Home; /* 028 */ /* Control flags */ DWORD ContextFlags; /* 030 */ DWORD MxCsr; /* 034 */ /* Segment */ WORD SegCs; /* 038 */ WORD SegDs; /* 03a */ WORD SegEs; /* 03c */ WORD SegFs; /* 03e */ WORD SegGs; /* 040 */ WORD SegSs; /* 042 */ DWORD EFlags; /* 044 */ /* Debug */ DWORD64 Dr0; /* 048 */ DWORD64 Dr1; /* 050 */ DWORD64 Dr2; /* 058 */ DWORD64 Dr3; /* 060 */ DWORD64 Dr6; /* 068 */ DWORD64 Dr7; /* 070 */ /* Integer */ DWORD64 Rax; /* 078 */ DWORD64 Rcx; /* 080 */ DWORD64 Rdx; /* 088 */ DWORD64 Rbx; /* 090 */ DWORD64 Rsp; /* 098 */ DWORD64 Rbp; /* 0a0 */ DWORD64 Rsi; /* 0a8 */ DWORD64 Rdi; /* 0b0 */ DWORD64 R8; /* 0b8 */ DWORD64 R9; /* 0c0 */ DWORD64 R10; /* 0c8 */ DWORD64 R11; /* 0d0 */ DWORD64 R12; /* 0d8 */ DWORD64 R13; /* 0e0 */ DWORD64 R14; /* 0e8 */ DWORD64 R15; /* 0f0 */ /* Counter */ DWORD64 Rip; /* 0f8 */ /* Floating point */ union { XMM_SAVE_AREA32 FltSave; /* 100 */ struct { M128A Header[2]; /* 100 */ M128A Legacy[8]; /* 120 */ M128A Xmm0; /* 1a0 */ M128A Xmm1; /* 1b0 */ M128A Xmm2; /* 1c0 */ M128A Xmm3; /* 1d0 */ M128A Xmm4; /* 1e0 */ M128A Xmm5; /* 1f0 */ M128A Xmm6; /* 200 */ M128A Xmm7; /* 210 */ M128A Xmm8; /* 220 */ M128A Xmm9; /* 230 */ M128A Xmm10; /* 240 */ M128A Xmm11; /* 250 */ M128A Xmm12; /* 260 */ M128A Xmm13; /* 270 */ M128A Xmm14; /* 280 */ M128A Xmm15; /* 290 */ } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; /* Vector */ M128A VectorRegister[26]; /* 300 */ DWORD64 VectorControl; /* 4a0 */ /* Debug control */ DWORD64 DebugControl; /* 4a8 */ DWORD64 LastBranchToRip; /* 4b0 */ DWORD64 LastBranchFromRip; /* 4b8 */ DWORD64 LastExceptionToRip; /* 4c0 */ DWORD64 LastExceptionFromRip; /* 4c8 */ } CONTEXT; typedef struct _RUNTIME_FUNCTION { DWORD BeginAddress; DWORD EndAddress; DWORD UnwindData; } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION; #define UNWIND_HISTORY_TABLE_SIZE 12 typedef struct _UNWIND_HISTORY_TABLE_ENTRY { ULONG64 ImageBase; PRUNTIME_FUNCTION FunctionEntry; } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY; #define UNWIND_HISTORY_TABLE_NONE 0 #define UNWIND_HISTORY_TABLE_GLOBAL 1 #define UNWIND_HISTORY_TABLE_LOCAL 2 typedef struct _UNWIND_HISTORY_TABLE { ULONG Count; UCHAR Search; ULONG64 LowAddress; ULONG64 HighAddress; UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE]; } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE; typedef struct _KNONVOLATILE_CONTEXT_POINTERS { union { PM128A FloatingContext[16]; struct { PM128A Xmm0; PM128A Xmm1; PM128A Xmm2; PM128A Xmm3; PM128A Xmm4; PM128A Xmm5; PM128A Xmm6; PM128A Xmm7; PM128A Xmm8; PM128A Xmm9; PM128A Xmm10; PM128A Xmm11; PM128A Xmm12; PM128A Xmm13; PM128A Xmm14; PM128A Xmm15; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; union { PULONG64 IntegerContext[16]; struct { PULONG64 Rax; PULONG64 Rcx; PULONG64 Rdx; PULONG64 Rbx; PULONG64 Rsp; PULONG64 Rbp; PULONG64 Rsi; PULONG64 Rdi; PULONG64 R8; PULONG64 R9; PULONG64 R10; PULONG64 R11; PULONG64 R12; PULONG64 R13; PULONG64 R14; PULONG64 R15; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME2; } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS; typedef PRUNTIME_FUNCTION (CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64,PVOID); BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD64); BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*); BOOLEAN CDECL RtlInstallFunctionTableCallback(DWORD64,DWORD64,DWORD,PGET_RUNTIME_FUNCTION_CALLBACK,PVOID,PCWSTR); PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(DWORD64,DWORD64*,UNWIND_HISTORY_TABLE*); PVOID WINAPI RtlVirtualUnwind(ULONG,ULONG64,ULONG64,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,ULONG64*,KNONVOLATILE_CONTEXT_POINTERS*); #define UNW_FLAG_NHANDLER 0 #define UNW_FLAG_EHANDLER 1 #define UNW_FLAG_UHANDLER 2 #define UNW_FLAG_CHAININFO 4 #endif /* __x86_64__ */ /* IA64 context definitions */ #ifdef __ia64__ #define CONTEXT_IA64 0x00080000 #define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001) #define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002) #define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004) #define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008) #define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010) #define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020) #define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL) #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL) #define CONTEXT_EXCEPTION_ACTIVE 0x8000000 #define CONTEXT_SERVICE_ACTIVE 0x10000000 #define CONTEXT_EXCEPTION_REQUEST 0x40000000 #define CONTEXT_EXCEPTION_REPORTING 0x80000000 typedef struct _CONTEXT { DWORD ContextFlags; DWORD Fill1[3]; ULONGLONG DbI0; ULONGLONG DbI1; ULONGLONG DbI2; ULONGLONG DbI3; ULONGLONG DbI4; ULONGLONG DbI5; ULONGLONG DbI6; ULONGLONG DbI7; ULONGLONG DbD0; ULONGLONG DbD1; ULONGLONG DbD2; ULONGLONG DbD3; ULONGLONG DbD4; ULONGLONG DbD5; ULONGLONG DbD6; ULONGLONG DbD7; FLOAT128 FltS0; FLOAT128 FltS1; FLOAT128 FltS2; FLOAT128 FltS3; FLOAT128 FltT0; FLOAT128 FltT1; FLOAT128 FltT2; FLOAT128 FltT3; FLOAT128 FltT4; FLOAT128 FltT5; FLOAT128 FltT6; FLOAT128 FltT7; FLOAT128 FltT8; FLOAT128 FltT9; FLOAT128 FltS4; FLOAT128 FltS5; FLOAT128 FltS6; FLOAT128 FltS7; FLOAT128 FltS8; FLOAT128 FltS9; FLOAT128 FltS10; FLOAT128 FltS11; FLOAT128 FltS12; FLOAT128 FltS13; FLOAT128 FltS14; FLOAT128 FltS15; FLOAT128 FltS16; FLOAT128 FltS17; FLOAT128 FltS18; FLOAT128 FltS19; FLOAT128 FltF32; FLOAT128 FltF33; FLOAT128 FltF34; FLOAT128 FltF35; FLOAT128 FltF36; FLOAT128 FltF37; FLOAT128 FltF38; FLOAT128 FltF39; FLOAT128 FltF40; FLOAT128 FltF41; FLOAT128 FltF42; FLOAT128 FltF43; FLOAT128 FltF44; FLOAT128 FltF45; FLOAT128 FltF46; FLOAT128 FltF47; FLOAT128 FltF48; FLOAT128 FltF49; FLOAT128 FltF50; FLOAT128 FltF51; FLOAT128 FltF52; FLOAT128 FltF53; FLOAT128 FltF54; FLOAT128 FltF55; FLOAT128 FltF56; FLOAT128 FltF57; FLOAT128 FltF58; FLOAT128 FltF59; FLOAT128 FltF60; FLOAT128 FltF61; FLOAT128 FltF62; FLOAT128 FltF63; FLOAT128 FltF64; FLOAT128 FltF65; FLOAT128 FltF66; FLOAT128 FltF67; FLOAT128 FltF68; FLOAT128 FltF69; FLOAT128 FltF70; FLOAT128 FltF71; FLOAT128 FltF72; FLOAT128 FltF73; FLOAT128 FltF74; FLOAT128 FltF75; FLOAT128 FltF76; FLOAT128 FltF77; FLOAT128 FltF78; FLOAT128 FltF79; FLOAT128 FltF80; FLOAT128 FltF81; FLOAT128 FltF82; FLOAT128 FltF83; FLOAT128 FltF84; FLOAT128 FltF85; FLOAT128 FltF86; FLOAT128 FltF87; FLOAT128 FltF88; FLOAT128 FltF89; FLOAT128 FltF90; FLOAT128 FltF91; FLOAT128 FltF92; FLOAT128 FltF93; FLOAT128 FltF94; FLOAT128 FltF95; FLOAT128 FltF96; FLOAT128 FltF97; FLOAT128 FltF98; FLOAT128 FltF99; FLOAT128 FltF100; FLOAT128 FltF101; FLOAT128 FltF102; FLOAT128 FltF103; FLOAT128 FltF104; FLOAT128 FltF105; FLOAT128 FltF106; FLOAT128 FltF107; FLOAT128 FltF108; FLOAT128 FltF109; FLOAT128 FltF110; FLOAT128 FltF111; FLOAT128 FltF112; FLOAT128 FltF113; FLOAT128 FltF114; FLOAT128 FltF115; FLOAT128 FltF116; FLOAT128 FltF117; FLOAT128 FltF118; FLOAT128 FltF119; FLOAT128 FltF120; FLOAT128 FltF121; FLOAT128 FltF122; FLOAT128 FltF123; FLOAT128 FltF124; FLOAT128 FltF125; FLOAT128 FltF126; FLOAT128 FltF127; ULONGLONG StFPSR; ULONGLONG IntGp; ULONGLONG IntT0; ULONGLONG IntT1; ULONGLONG IntS0; ULONGLONG IntS1; ULONGLONG IntS2; ULONGLONG IntS3; ULONGLONG IntV0; ULONGLONG IntT2; ULONGLONG IntT3; ULONGLONG IntT4; ULONGLONG IntSp; ULONGLONG IntTeb; ULONGLONG IntT5; ULONGLONG IntT6; ULONGLONG IntT7; ULONGLONG IntT8; ULONGLONG IntT9; ULONGLONG IntT10; ULONGLONG IntT11; ULONGLONG IntT12; ULONGLONG IntT13; ULONGLONG IntT14; ULONGLONG IntT15; ULONGLONG IntT16; ULONGLONG IntT17; ULONGLONG IntT18; ULONGLONG IntT19; ULONGLONG IntT20; ULONGLONG IntT21; ULONGLONG IntT22; ULONGLONG IntNats; ULONGLONG Preds; ULONGLONG BrRp; ULONGLONG BrS0; ULONGLONG BrS1; ULONGLONG BrS2; ULONGLONG BrS3; ULONGLONG BrS4; ULONGLONG BrT0; ULONGLONG BrT1; ULONGLONG ApUNAT; ULONGLONG ApLC; ULONGLONG ApEC; ULONGLONG ApCCV; ULONGLONG ApDCR; ULONGLONG RsPFS; ULONGLONG RsBSP; ULONGLONG RsBSPSTORE; ULONGLONG RsRSC; ULONGLONG RsRNAT; ULONGLONG StIPSR; ULONGLONG StIIP; ULONGLONG StIFS; ULONGLONG StFCR; ULONGLONG Eflag; ULONGLONG SegCSD; ULONGLONG SegSSD; ULONGLONG Cflag; ULONGLONG StFSR; ULONGLONG StFIR; ULONGLONG StFDR; ULONGLONG UNUSEDPACK; } CONTEXT, *PCONTEXT; typedef struct _RUNTIME_FUNCTION { ULONG BeginAddress; ULONG EndAddress; ULONG UnwindInfoAddress; } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION; typedef struct _FRAME_POINTERS { ULONGLONG MemoryStackFp; ULONGLONG BackingStoreFp; } FRAME_POINTERS, *PFRAME_POINTERS; #define UNWIND_HISTORY_TABLE_SIZE 12 typedef struct _UNWIND_HISTORY_TABLE_ENTRY { ULONG64 ImageBase; ULONG64 Gp; PRUNTIME_FUNCTION FunctionEntry; } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY; typedef struct _UNWIND_HISTORY_TABLE { ULONG Count; UCHAR Search; ULONG64 LowAddress; ULONG64 HighAddress; UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE]; } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE; typedef struct _KNONVOLATILE_CONTEXT_POINTERS { PFLOAT128 FltS0; PFLOAT128 FltS1; PFLOAT128 FltS2; PFLOAT128 FltS3; PFLOAT128 HighFloatingContext[10]; PFLOAT128 FltS4; PFLOAT128 FltS5; PFLOAT128 FltS6; PFLOAT128 FltS7; PFLOAT128 FltS8; PFLOAT128 FltS9; PFLOAT128 FltS10; PFLOAT128 FltS11; PFLOAT128 FltS12; PFLOAT128 FltS13; PFLOAT128 FltS14; PFLOAT128 FltS15; PFLOAT128 FltS16; PFLOAT128 FltS17; PFLOAT128 FltS18; PFLOAT128 FltS19; PULONGLONG IntS0; PULONGLONG IntS1; PULONGLONG IntS2; PULONGLONG IntS3; PULONGLONG IntSp; PULONGLONG IntS0Nat; PULONGLONG IntS1Nat; PULONGLONG IntS2Nat; PULONGLONG IntS3Nat; PULONGLONG IntSpNat; PULONGLONG Preds; PULONGLONG BrRp; PULONGLONG BrS0; PULONGLONG BrS1; PULONGLONG BrS2; PULONGLONG BrS3; PULONGLONG BrS4; PULONGLONG ApUNAT; PULONGLONG ApLC; PULONGLONG ApEC; PULONGLONG RsPFS; PULONGLONG StFSR; PULONGLONG StFIR; PULONGLONG StFDR; PULONGLONG Cflag; } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS; ULONGLONG WINAPI RtlVirtualUnwind(ULONGLONG,ULONGLONG,RUNTIME_FUNCTION*,CONTEXT*,BOOLEAN*,FRAME_POINTERS*,KNONVOLATILE_CONTEXT_POINTERS*); #endif /* __ia64__ */ /* Alpha context definitions */ #if defined(_ALPHA_) || defined(__ALPHA__) || defined(__alpha__) #define CONTEXT_ALPHA 0x00020000 #define CONTEXT_CONTROL (CONTEXT_ALPHA | 0x00000001) #define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA | 0x00000002) #define CONTEXT_INTEGER (CONTEXT_ALPHA | 0x00000004) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) #define EXCEPTION_READ_FAULT 0 #define EXCEPTION_WRITE_FAULT 1 #define EXCEPTION_EXECUTE_FAULT 8 typedef struct _CONTEXT { /* selected by CONTEXT_FLOATING_POINT */ ULONGLONG FltF0; ULONGLONG FltF1; ULONGLONG FltF2; ULONGLONG FltF3; ULONGLONG FltF4; ULONGLONG FltF5; ULONGLONG FltF6; ULONGLONG FltF7; ULONGLONG FltF8; ULONGLONG FltF9; ULONGLONG FltF10; ULONGLONG FltF11; ULONGLONG FltF12; ULONGLONG FltF13; ULONGLONG FltF14; ULONGLONG FltF15; ULONGLONG FltF16; ULONGLONG FltF17; ULONGLONG FltF18; ULONGLONG FltF19; ULONGLONG FltF20; ULONGLONG FltF21; ULONGLONG FltF22; ULONGLONG FltF23; ULONGLONG FltF24; ULONGLONG FltF25; ULONGLONG FltF26; ULONGLONG FltF27; ULONGLONG FltF28; ULONGLONG FltF29; ULONGLONG FltF30; ULONGLONG FltF31; /* selected by CONTEXT_INTEGER */ ULONGLONG IntV0; ULONGLONG IntT0; ULONGLONG IntT1; ULONGLONG IntT2; ULONGLONG IntT3; ULONGLONG IntT4; ULONGLONG IntT5; ULONGLONG IntT6; ULONGLONG IntT7; ULONGLONG IntS0; ULONGLONG IntS1; ULONGLONG IntS2; ULONGLONG IntS3; ULONGLONG IntS4; ULONGLONG IntS5; ULONGLONG IntFp; ULONGLONG IntA0; ULONGLONG IntA1; ULONGLONG IntA2; ULONGLONG IntA3; ULONGLONG IntA4; ULONGLONG IntA5; ULONGLONG IntT8; ULONGLONG IntT9; ULONGLONG IntT10; ULONGLONG IntT11; ULONGLONG IntRa; ULONGLONG IntT12; ULONGLONG IntAt; ULONGLONG IntGp; ULONGLONG IntSp; ULONGLONG IntZero; /* selected by CONTEXT_FLOATING_POINT */ ULONGLONG Fpcr; ULONGLONG SoftFpcr; /* selected by CONTEXT_CONTROL */ ULONGLONG Fir; DWORD Psr; DWORD ContextFlags; DWORD Fill[4]; } CONTEXT; #define _QUAD_PSR_OFFSET HighSoftFpcr #define _QUAD_FLAGS_OFFSET HighFir #endif /* _ALPHA_ */ #ifdef __arm__ /* The following flags control the contents of the CONTEXT structure. */ #define CONTEXT_ARM 0x0200000 #define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001) #define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002) #define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004) #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER) #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) #define EXCEPTION_READ_FAULT 0 #define EXCEPTION_WRITE_FAULT 1 #define EXCEPTION_EXECUTE_FAULT 8 #define ARM_MAX_BREAKPOINTS 8 #define ARM_MAX_WATCHPOINTS 1 typedef struct _RUNTIME_FUNCTION { DWORD BeginAddress; union { DWORD UnwindData; struct { DWORD Flag : 2; DWORD FunctionLength : 11; DWORD Ret : 2; DWORD H : 1; DWORD Reg : 3; DWORD R : 1; DWORD L : 1; DWORD C : 1; DWORD StackAdjust : 10; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION; #define UNWIND_HISTORY_TABLE_SIZE 12 typedef struct _UNWIND_HISTORY_TABLE_ENTRY { DWORD ImageBase; PRUNTIME_FUNCTION FunctionEntry; } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY; typedef struct _UNWIND_HISTORY_TABLE { DWORD Count; BYTE LocalHint; BYTE GlobalHint; BYTE Search; BYTE Once; DWORD LowAddress; DWORD HighAddress; UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE]; } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE; typedef struct _NEON128 { ULONGLONG Low; LONGLONG High; } NEON128, *PNEON128; typedef struct _CONTEXT { ULONG ContextFlags; /* 000 */ /* CONTEXT_INTEGER */ ULONG R0; /* 004 */ ULONG R1; /* 008 */ ULONG R2; /* 00c */ ULONG R3; /* 010 */ ULONG R4; /* 014 */ ULONG R5; /* 018 */ ULONG R6; /* 01c */ ULONG R7; /* 020 */ ULONG R8; /* 024 */ ULONG R9; /* 028 */ ULONG R10; /* 02c */ ULONG R11; /* 030 */ ULONG R12; /* 034 */ /* CONTEXT_CONTROL */ ULONG Sp; /* 038 */ ULONG Lr; /* 03c */ ULONG Pc; /* 040 */ ULONG Cpsr; /* 044 */ /* CONTEXT_FLOATING_POINT */ ULONG Fpscr; /* 048 */ ULONG Padding; /* 04c */ union { NEON128 Q[16]; ULONGLONG D[32]; ULONG S[32]; } DUMMYUNIONNAME; /* 050 */ /* CONTEXT_DEBUG_REGISTERS */ ULONG Bvr[ARM_MAX_BREAKPOINTS]; /* 150 */ ULONG Bcr[ARM_MAX_BREAKPOINTS]; /* 170 */ ULONG Wvr[ARM_MAX_WATCHPOINTS]; /* 190 */ ULONG Wcr[ARM_MAX_WATCHPOINTS]; /* 194 */ ULONG Padding2[2]; /* 198 */ } CONTEXT; BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD); BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*); PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_TABLE*); #endif /* __arm__ */ #ifdef __aarch64__ #define CONTEXT_ARM64 0x400000 #define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x00000001) #define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x00000002) #define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004) #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER) #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) #define EXCEPTION_READ_FAULT 0 #define EXCEPTION_WRITE_FAULT 1 #define EXCEPTION_EXECUTE_FAULT 8 #define ARM64_MAX_BREAKPOINTS 8 #define ARM64_MAX_WATCHPOINTS 2 typedef struct _RUNTIME_FUNCTION { DWORD BeginAddress; union { DWORD UnwindData; struct { DWORD Flag : 2; DWORD FunctionLength : 11; DWORD RegF : 3; DWORD RegI : 4; DWORD H : 1; DWORD CR : 2; DWORD FrameSize : 9; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION; #define UNWIND_HISTORY_TABLE_SIZE 12 typedef struct _UNWIND_HISTORY_TABLE_ENTRY { DWORD64 ImageBase; PRUNTIME_FUNCTION FunctionEntry; } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY; typedef struct _UNWIND_HISTORY_TABLE { DWORD Count; BYTE LocalHint; BYTE GlobalHint; BYTE Search; BYTE Once; DWORD64 LowAddress; DWORD64 HighAddress; UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE]; } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE; typedef union _NEON128 { struct { ULONGLONG Low; LONGLONG High; } DUMMYSTRUCTNAME; double D[2]; float S[4]; WORD H[8]; BYTE B[16]; } NEON128, *PNEON128; typedef struct _CONTEXT { ULONG ContextFlags; /* 000 */ /* CONTEXT_INTEGER */ ULONG Cpsr; /* 004 */ union { struct { DWORD64 X0; /* 008 */ DWORD64 X1; /* 010 */ DWORD64 X2; /* 018 */ DWORD64 X3; /* 020 */ DWORD64 X4; /* 028 */ DWORD64 X5; /* 030 */ DWORD64 X6; /* 038 */ DWORD64 X7; /* 040 */ DWORD64 X8; /* 048 */ DWORD64 X9; /* 050 */ DWORD64 X10; /* 058 */ DWORD64 X11; /* 060 */ DWORD64 X12; /* 068 */ DWORD64 X13; /* 070 */ DWORD64 X14; /* 078 */ DWORD64 X15; /* 080 */ DWORD64 X16; /* 088 */ DWORD64 X17; /* 090 */ DWORD64 X18; /* 098 */ DWORD64 X19; /* 0a0 */ DWORD64 X20; /* 0a8 */ DWORD64 X21; /* 0b0 */ DWORD64 X22; /* 0b8 */ DWORD64 X23; /* 0c0 */ DWORD64 X24; /* 0c8 */ DWORD64 X25; /* 0d0 */ DWORD64 X26; /* 0d8 */ DWORD64 X27; /* 0e0 */ DWORD64 X28; /* 0e8 */ DWORD64 Fp; /* 0f0 */ DWORD64 Lr; /* 0f8 */ } DUMMYSTRUCTNAME; DWORD64 X[31]; /* 008 */ } DUMMYUNIONNAME; /* CONTEXT_CONTROL */ DWORD64 Sp; /* 100 */ DWORD64 Pc; /* 108 */ /* CONTEXT_FLOATING_POINT */ NEON128 V[32]; /* 110 */ DWORD Fpcr; /* 310 */ DWORD Fpsr; /* 314 */ /* CONTEXT_DEBUG_REGISTERS */ DWORD Bcr[ARM64_MAX_BREAKPOINTS]; /* 318 */ DWORD64 Bvr[ARM64_MAX_BREAKPOINTS]; /* 338 */ DWORD Wcr[ARM64_MAX_WATCHPOINTS]; /* 378 */ DWORD64 Wvr[ARM64_MAX_WATCHPOINTS]; /* 380 */ } CONTEXT; #endif /* __aarch64__ */ /* Mips context definitions */ #if defined(_MIPS_) || defined(__MIPS__) || defined(__mips__) #define CONTEXT_R4000 0x00010000 #define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001) #define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002) #define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004) #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) #define EXCEPTION_READ_FAULT 0 #define EXCEPTION_WRITE_FAULT 1 #define EXCEPTION_EXECUTE_FAULT 8 typedef struct _CONTEXT { DWORD Argument[4]; /* These are selected by CONTEXT_FLOATING_POINT */ DWORD FltF0; DWORD FltF1; DWORD FltF2; DWORD FltF3; DWORD FltF4; DWORD FltF5; DWORD FltF6; DWORD FltF7; DWORD FltF8; DWORD FltF9; DWORD FltF10; DWORD FltF11; DWORD FltF12; DWORD FltF13; DWORD FltF14; DWORD FltF15; DWORD FltF16; DWORD FltF17; DWORD FltF18; DWORD FltF19; DWORD FltF20; DWORD FltF21; DWORD FltF22; DWORD FltF23; DWORD FltF24; DWORD FltF25; DWORD FltF26; DWORD FltF27; DWORD FltF28; DWORD FltF29; DWORD FltF30; DWORD FltF31; /* These are selected by CONTEXT_INTEGER */ DWORD IntZero; DWORD IntAt; DWORD IntV0; DWORD IntV1; DWORD IntA0; DWORD IntA1; DWORD IntA2; DWORD IntA3; DWORD IntT0; DWORD IntT1; DWORD IntT2; DWORD IntT3; DWORD IntT4; DWORD IntT5; DWORD IntT6; DWORD IntT7; DWORD IntS0; DWORD IntS1; DWORD IntS2; DWORD IntS3; DWORD IntS4; DWORD IntS5; DWORD IntS6; DWORD IntS7; DWORD IntT8; DWORD IntT9; DWORD IntK0; DWORD IntK1; DWORD IntGp; DWORD IntSp; DWORD IntS8; DWORD IntRa; DWORD IntLo; DWORD IntHi; /* These are selected by CONTEXT_FLOATING_POINT */ DWORD Fsr; /* These are selected by CONTEXT_CONTROL */ DWORD Fir; DWORD Psr; DWORD ContextFlags; DWORD Fill[2]; } CONTEXT; #endif /* _MIPS_ */ /* PowerPC context definitions */ #ifdef __powerpc__ #define CONTEXT_CONTROL 0x0001 #define CONTEXT_FLOATING_POINT 0x0002 #define CONTEXT_INTEGER 0x0004 #define CONTEXT_DEBUG_REGISTERS 0x0008 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) #define EXCEPTION_READ_FAULT 0 #define EXCEPTION_WRITE_FAULT 1 #define EXCEPTION_EXECUTE_FAULT 8 typedef struct { /* These are selected by CONTEXT_FLOATING_POINT */ double Fpr0; double Fpr1; double Fpr2; double Fpr3; double Fpr4; double Fpr5; double Fpr6; double Fpr7; double Fpr8; double Fpr9; double Fpr10; double Fpr11; double Fpr12; double Fpr13; double Fpr14; double Fpr15; double Fpr16; double Fpr17; double Fpr18; double Fpr19; double Fpr20; double Fpr21; double Fpr22; double Fpr23; double Fpr24; double Fpr25; double Fpr26; double Fpr27; double Fpr28; double Fpr29; double Fpr30; double Fpr31; double Fpscr; /* These are selected by CONTEXT_INTEGER */ DWORD Gpr0; DWORD Gpr1; DWORD Gpr2; DWORD Gpr3; DWORD Gpr4; DWORD Gpr5; DWORD Gpr6; DWORD Gpr7; DWORD Gpr8; DWORD Gpr9; DWORD Gpr10; DWORD Gpr11; DWORD Gpr12; DWORD Gpr13; DWORD Gpr14; DWORD Gpr15; DWORD Gpr16; DWORD Gpr17; DWORD Gpr18; DWORD Gpr19; DWORD Gpr20; DWORD Gpr21; DWORD Gpr22; DWORD Gpr23; DWORD Gpr24; DWORD Gpr25; DWORD Gpr26; DWORD Gpr27; DWORD Gpr28; DWORD Gpr29; DWORD Gpr30; DWORD Gpr31; DWORD Cr; DWORD Xer; /* These are selected by CONTEXT_CONTROL */ DWORD Msr; DWORD Iar; /* Instruction Address Register , aka PC ... */ DWORD Lr; DWORD Ctr; DWORD ContextFlags; DWORD Dar; /* Fault registers for coredump */ DWORD Dsisr; DWORD Trap; /* number of powerpc exception taken */ /* These are selected by CONTEXT_DEBUG_REGISTERS */ DWORD Dr0; DWORD Dr1; DWORD Dr2; DWORD Dr3; DWORD Dr4; DWORD Dr5; DWORD Dr6; DWORD Dr7; } CONTEXT; typedef struct _STACK_FRAME_HEADER { DWORD BackChain; DWORD GlueSaved1; DWORD GlueSaved2; DWORD Reserved1; DWORD Spare1; DWORD Spare2; DWORD Parameter0; DWORD Parameter1; DWORD Parameter2; DWORD Parameter3; DWORD Parameter4; DWORD Parameter5; DWORD Parameter6; DWORD Parameter7; } STACK_FRAME_HEADER,*PSTACK_FRAME_HEADER; #endif /* __powerpc__ */ #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED) #error You need to define a CONTEXT for your CPU #endif typedef CONTEXT *PCONTEXT; NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*); #define WOW64_CONTEXT_i386 0x00010000 #define WOW64_CONTEXT_i486 0x00010000 #define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001)) #define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002)) #define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004)) #define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008)) #define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010)) #define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020)) #define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS) #define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | \ WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | \ WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS) #define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040)) #define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000 #define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000 #define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000 #define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000 #define WOW64_SIZE_OF_80387_REGISTERS 80 #define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512 typedef struct _WOW64_FLOATING_SAVE_AREA { DWORD ControlWord; DWORD StatusWord; DWORD TagWord; DWORD ErrorOffset; DWORD ErrorSelector; DWORD DataOffset; DWORD DataSelector; BYTE RegisterArea[WOW64_SIZE_OF_80387_REGISTERS]; DWORD Cr0NpxState; } WOW64_FLOATING_SAVE_AREA, *PWOW64_FLOATING_SAVE_AREA; #include "pshpack4.h" typedef struct _WOW64_CONTEXT { DWORD ContextFlags; DWORD Dr0; DWORD Dr1; DWORD Dr2; DWORD Dr3; DWORD Dr6; DWORD Dr7; WOW64_FLOATING_SAVE_AREA FloatSave; DWORD SegGs; DWORD SegFs; DWORD SegEs; DWORD SegDs; DWORD Edi; DWORD Esi; DWORD Ebx; DWORD Edx; DWORD Ecx; DWORD Eax; DWORD Ebp; DWORD Eip; DWORD SegCs; DWORD EFlags; DWORD Esp; DWORD SegSs; BYTE ExtendedRegisters[WOW64_MAXIMUM_SUPPORTED_EXTENSION]; } WOW64_CONTEXT, *PWOW64_CONTEXT; #include "poppack.h" /* * Product types */ #define PRODUCT_UNDEFINED 0x00000000 #define PRODUCT_ULTIMATE 0x00000001 #define PRODUCT_HOME_BASIC 0x00000002 #define PRODUCT_HOME_PREMIUM 0x00000003 #define PRODUCT_ENTERPRISE 0x00000004 #define PRODUCT_HOME_BASIC_N 0x00000005 #define PRODUCT_BUSINESS 0x00000006 #define PRODUCT_STANDARD_SERVER 0x00000007 #define PRODUCT_DATACENTER_SERVER 0x00000008 #define PRODUCT_SMALLBUSINESS_SERVER 0x00000009 #define PRODUCT_ENTERPRISE_SERVER 0x0000000A #define PRODUCT_STARTER 0x0000000B #define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C #define PRODUCT_STANDARD_SERVER_CORE 0x0000000D #define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E #define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F #define PRODUCT_BUSINESS_N 0x00000010 #define PRODUCT_WEB_SERVER 0x00000011 #define PRODUCT_CLUSTER_SERVER 0x00000012 #define PRODUCT_HOME_SERVER 0x00000013 #define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014 #define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015 #define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016 #define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017 #define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019 #define PRODUCT_HOME_PREMIUM_N 0x0000001A #define PRODUCT_ENTERPRISE_N 0x0000001B #define PRODUCT_ULTIMATE_N 0x0000001C #define PRODUCT_WEB_SERVER_CORE 0x0000001D #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020 #define PRODUCT_SERVER_FOUNDATION 0x00000021 #define PRODUCT_HOME_PREMIUM_SERVER 0x00000022 #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023 #define PRODUCT_STANDARD_SERVER_V 0x00000024 #define PRODUCT_DATACENTER_SERVER_V 0x00000025 #define PRODUCT_SERVER_V 0x00000025 #define PRODUCT_ENTERPRISE_SERVER_V 0x00000026 #define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027 #define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028 #define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029 #define PRODUCT_HYPERV 0x0000002A #define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B #define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C #define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D #define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E #define PRODUCT_STARTER_N 0x0000002F #define PRODUCT_PROFESSIONAL 0x00000030 #define PRODUCT_PROFESSIONAL_N 0x00000031 #define PRODUCT_SB_SOLUTION_SERVER 0x00000032 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033 #define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034 #define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035 #define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037 #define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038 #define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039 #define PRODUCT_PROFESSIONAL_EMBEDDED 0x0000003A #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F #define PRODUCT_CLUSTER_SERVER_V 0x00000040 #define PRODUCT_EMBEDDED 0x00000041 #define PRODUCT_STARTER_E 0x00000042 #define PRODUCT_HOME_BASIC_E 0x00000043 #define PRODUCT_HOME_PREMIUM_E 0x00000044 #define PRODUCT_PROFESSIONAL_E 0x00000045 #define PRODUCT_ENTERPRISE_E 0x00000046 #define PRODUCT_ULTIMATE_E 0x00000047 #define PRODUCT_ENTERPRISE_EVALUATION 0x00000048 #define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C #define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D #define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F #define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050 #define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054 #define PRODUCT_EMBEDDED_AUTOMOTIVE 0x00000055 #define PRODUCT_EMBEDDED_INDUSTRY_A 0x00000056 #define PRODUCT_THINPC 0x00000057 #define PRODUCT_EMBEDDED_A 0x00000058 #define PRODUCT_EMBEDDED_INDUSTRY 0x00000059 #define PRODUCT_EMBEDDED_E 0x0000005A #define PRODUCT_EMBEDDED_INDUSTRY_E 0x0000005B #define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x0000005C #define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F #define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060 #define PRODUCT_CORE_ARM 0x00000061 #define PRODUCT_CORE_N 0x00000062 #define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063 #define PRODUCT_CORE_SINGLELANGUAGE 0x00000064 #define PRODUCT_CORE_LANGUAGESPECIFIC 0x00000064 #define PRODUCT_CORE 0x00000065 #define PRODUCT_PROFESSIONAL_WMC 0x00000067 #define PRODUCT_MOBILE_CORE 0x00000068 #define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069 #define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A #define PRODUCT_EMBEDDED_EVAL 0x0000006B #define PRODUCT_EMBEDDED_E_EVAL 0x0000006C #define PRODUCT_NANO_SERVER 0x0000006D #define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E #define PRODUCT_CORE_CONNECTED 0x0000006F #define PRODUCT_PROFESSIONAL_STUDENT 0x00000070 #define PRODUCT_CORE_CONNECTED_N 0x00000071 #define PRODUCT_PROFESSIONAL_STUDENT_N 0x00000072 #define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073 #define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x00000074 #define PRODUCT_CONNECTED_CAR 0x00000075 #define PRODUCT_INDUSTRY_HANDHELD 0x00000076 #define PRODUCT_PPI_PRO 0x00000077 #define PRODUCT_ARM64_SERVER 0x00000078 #define PRODUCT_EDUCATION 0x00000079 #define PRODUCT_EDUCATION_N 0x0000007A #define PRODUCT_IOTUAP 0x0000007B #define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x0000007C #define PRODUCT_ENTERPRISE_S 0x0000007D #define PRODUCT_ENTERPRISE_S_N 0x0000007E #define PRODUCT_PROFESSIONAL_S 0x0000007F #define PRODUCT_PROFESSIONAL_S_N 0x00000080 #define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081 #define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082 #define PRODUCT_UNLICENSED 0xABCDABCD /* * Language IDs */ #define MAKELCID(l, s) (MAKELONG(l, s)) #define MAKELANGID(p, s) ((((WORD)(s))<<10) | (WORD)(p)) #define PRIMARYLANGID(l) ((WORD)(l) & 0x3ff) #define SUBLANGID(l) ((WORD)(l) >> 10) #define LANGIDFROMLCID(lcid) ((WORD)(lcid)) #define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0x0f)) #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT)) #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)) #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT)) #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT)) #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)) #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT)) #define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_DEFAULT),SORT_DEFAULT)) #define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_UNSPECIFIED),SORT_DEFAULT)) #define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_UI_CUSTOM_DEFAULT),SORT_DEFAULT)) #define LOCALE_NAME_MAX_LENGTH 85 #define UNREFERENCED_PARAMETER(u) (void)(u) #define DBG_UNREFERENCED_PARAMETER(u) (void)(u) #define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (void)(u) #include /* * Definitions for IsTextUnicode() */ #define IS_TEXT_UNICODE_ASCII16 0x0001 #define IS_TEXT_UNICODE_STATISTICS 0x0002 #define IS_TEXT_UNICODE_CONTROLS 0x0004 #define IS_TEXT_UNICODE_SIGNATURE 0x0008 #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F #define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080 #define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100 #define IS_TEXT_UNICODE_ODD_LENGTH 0x0200 #define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00 #define IS_TEXT_UNICODE_NULL_BYTES 0x1000 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000 #define MAXIMUM_WAIT_OBJECTS 64 #define MAXIMUM_SUSPEND_COUNT 127 #define WT_EXECUTEDEFAULT 0x00 #define WT_EXECUTEINIOTHREAD 0x01 #define WT_EXECUTEINUITHREAD 0x02 #define WT_EXECUTEINWAITTHREAD 0x04 #define WT_EXECUTEONLYONCE 0x08 #define WT_EXECUTELONGFUNCTION 0x10 #define WT_EXECUTEINTIMERTHREAD 0x20 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x40 #define WT_EXECUTEINPERSISTENTTHREAD 0x80 #define WT_EXECUTEINLONGTHREAD 0x10 #define WT_EXECUTEDELETEWAIT 0x08 #define WT_TRANSFER_IMPERSONATION 0x0100 #define EXCEPTION_CONTINUABLE 0 #define EXCEPTION_NONCONTINUABLE 0x01 /* * The exception record used by Win32 to give additional information * about exception to exception handlers. */ #define EXCEPTION_MAXIMUM_PARAMETERS 15 typedef struct _EXCEPTION_RECORD { DWORD ExceptionCode; DWORD ExceptionFlags; struct _EXCEPTION_RECORD *ExceptionRecord; PVOID ExceptionAddress; DWORD NumberParameters; ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; } EXCEPTION_RECORD, *PEXCEPTION_RECORD; /* * The exception pointers structure passed to exception filters * in except() and the UnhandledExceptionFilter(). */ typedef struct _EXCEPTION_POINTERS { PEXCEPTION_RECORD ExceptionRecord; PCONTEXT ContextRecord; } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; /* * The exception frame, used for registering exception handlers * Win32 cares only about this, but compilers generally emit * larger exception frames for their own use. */ struct _EXCEPTION_REGISTRATION_RECORD; typedef DWORD (*PEXCEPTION_HANDLER)(PEXCEPTION_RECORD,struct _EXCEPTION_REGISTRATION_RECORD*, PCONTEXT,struct _EXCEPTION_REGISTRATION_RECORD **); typedef struct _EXCEPTION_REGISTRATION_RECORD { struct _EXCEPTION_REGISTRATION_RECORD *Prev; PEXCEPTION_HANDLER Handler; } EXCEPTION_REGISTRATION_RECORD; /* * function pointer to an exception filter */ typedef LONG (CALLBACK *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS ExceptionInfo); typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; PVOID StackBase; PVOID StackLimit; PVOID SubSystemTib; union { PVOID FiberData; DWORD Version; } DUMMYUNIONNAME; PVOID ArbitraryUserPointer; struct _NT_TIB *Self; } NT_TIB, *PNT_TIB; struct _TEB; #if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { struct _TEB *teb; __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb)); return teb; } #elif defined(__i386__) && defined(_MSC_VER) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { struct _TEB *teb; __asm mov eax, fs:[0x18]; __asm mov teb, eax; return teb; } #elif defined(__x86_64__) && defined(__GNUC__) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { struct _TEB *teb; __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb)); return teb; } #elif defined(__x86_64__) && defined(_MSC_VER) #pragma intrinsic(__readgsqword) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self)); } #else extern struct _TEB * WINAPI NtCurrentTeb(void); #endif #ifdef NONAMELESSUNION #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->u.FiberData) #else #define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->FiberData) #endif #define GetFiberData() (*(void **)GetCurrentFiber()) #define TLS_MINIMUM_AVAILABLE 64 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 * 1024) #define IO_REPARSE_TAG_RESERVED_ZERO 0 #define IO_REPARSE_TAG_RESERVED_ONE 1 #define IO_REPARSE_TAG_RESERVED_TWO 2 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_TWO #define IO_REPARSE_TAG_MOUNT_POINT __MSABI_LONG(0xA0000003) #define IO_REPARSE_TAG_HSM __MSABI_LONG(0xC0000004) #define IO_REPARSE_TAG_DRIVE_EXTENDER __MSABI_LONG(0x80000005) #define IO_REPARSE_TAG_HSM2 __MSABI_LONG(0x80000006) #define IO_REPARSE_TAG_SIS __MSABI_LONG(0x80000007) #define IO_REPARSE_TAG_WIM __MSABI_LONG(0x80000008) #define IO_REPARSE_TAG_CSV __MSABI_LONG(0x80000009) #define IO_REPARSE_TAG_DFS __MSABI_LONG(0x8000000A) #define IO_REPARSE_TAG_FILTER_MANAGER __MSABI_LONG(0x8000000B) #define IO_REPARSE_TAG_SYMLINK __MSABI_LONG(0xA000000C) #define IO_REPARSE_TAG_IIS_CACHE __MSABI_LONG(0xA0000010) #define IO_REPARSE_TAG_DFSR __MSABI_LONG(0x80000012) #define IO_REPARSE_TAG_DEDUP __MSABI_LONG(0x80000013) #define IO_REPARSE_TAG_NFS __MSABI_LONG(0x80000014) #define IO_REPARSE_TAG_FILE_PLACEHOLDER __MSABI_LONG(0x80000015) #define IO_REPARSE_TAG_WOF __MSABI_LONG(0x80000017) #define IO_REPARSE_TAG_WCI __MSABI_LONG(0x80000018) #define IO_REPARSE_TAG_WCI_1 __MSABI_LONG(0x90001018) #define IO_REPARSE_TAG_GLOBAL_REPARSE __MSABI_LONG(0xA0000019) #define IO_REPARSE_TAG_CLOUD __MSABI_LONG(0x9000001A) #define IO_REPARSE_TAG_CLOUD_1 __MSABI_LONG(0x9000101A) #define IO_REPARSE_TAG_CLOUD_2 __MSABI_LONG(0x9000201A) #define IO_REPARSE_TAG_CLOUD_3 __MSABI_LONG(0x9000301A) #define IO_REPARSE_TAG_CLOUD_4 __MSABI_LONG(0x9000401A) #define IO_REPARSE_TAG_CLOUD_5 __MSABI_LONG(0x9000501A) #define IO_REPARSE_TAG_CLOUD_6 __MSABI_LONG(0x9000601A) #define IO_REPARSE_TAG_CLOUD_7 __MSABI_LONG(0x9000701A) #define IO_REPARSE_TAG_CLOUD_8 __MSABI_LONG(0x9000801A) #define IO_REPARSE_TAG_CLOUD_9 __MSABI_LONG(0x9000901A) #define IO_REPARSE_TAG_CLOUD_A __MSABI_LONG(0x9000A01A) #define IO_REPARSE_TAG_CLOUD_B __MSABI_LONG(0x9000B01A) #define IO_REPARSE_TAG_CLOUD_C __MSABI_LONG(0x9000C01A) #define IO_REPARSE_TAG_CLOUD_D __MSABI_LONG(0x9000D01A) #define IO_REPARSE_TAG_CLOUD_E __MSABI_LONG(0x9000E01A) #define IO_REPARSE_TAG_CLOUD_F __MSABI_LONG(0x9000F01A) #define IO_REPARSE_TAG_CLOUD_MASK __MSABI_LONG(0x0000F000) #define IO_REPARSE_TAG_APPEXECLINK __MSABI_LONG(0x8000001B) #define IO_REPARSE_TAG_GVFS __MSABI_LONG(0x9000001C) #define IO_REPARSE_TAG_STORAGE_SYNC __MSABI_LONG(0x8000001E) #define IO_REPARSE_TAG_WCI_TOMBSTONE __MSABI_LONG(0xA000001F) #define IO_REPARSE_TAG_UNHANDLED __MSABI_LONG(0x80000020) #define IO_REPARSE_TAG_ONEDRIVE __MSABI_LONG(0x80000021) #define IO_REPARSE_TAG_GVFS_TOMBSTONE __MSABI_LONG(0xA0000022) /* * File formats definitions */ #include typedef struct _IMAGE_DOS_HEADER { WORD e_magic; /* 00: MZ Header signature */ WORD e_cblp; /* 02: Bytes on last page of file */ WORD e_cp; /* 04: Pages in file */ WORD e_crlc; /* 06: Relocations */ WORD e_cparhdr; /* 08: Size of header in paragraphs */ WORD e_minalloc; /* 0a: Minimum extra paragraphs needed */ WORD e_maxalloc; /* 0c: Maximum extra paragraphs needed */ WORD e_ss; /* 0e: Initial (relative) SS value */ WORD e_sp; /* 10: Initial SP value */ WORD e_csum; /* 12: Checksum */ WORD e_ip; /* 14: Initial IP value */ WORD e_cs; /* 16: Initial (relative) CS value */ WORD e_lfarlc; /* 18: File address of relocation table */ WORD e_ovno; /* 1a: Overlay number */ WORD e_res[4]; /* 1c: Reserved words */ WORD e_oemid; /* 24: OEM identifier (for e_oeminfo) */ WORD e_oeminfo; /* 26: OEM information; e_oemid specific */ WORD e_res2[10]; /* 28: Reserved words */ DWORD e_lfanew; /* 3c: Offset to extended header */ } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; #include #define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */ #define IMAGE_OS2_SIGNATURE 0x454E /* NE */ #define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */ #define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */ #define IMAGE_VXD_SIGNATURE 0x454C /* LE */ #define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 */ /* * This is the Windows executable (NE) header. * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way. */ #include typedef struct { WORD ne_magic; /* 00 NE signature 'NE' */ BYTE ne_ver; /* 02 Linker version number */ BYTE ne_rev; /* 03 Linker revision number */ WORD ne_enttab; /* 04 Offset to entry table relative to NE */ WORD ne_cbenttab; /* 06 Length of entry table in bytes */ LONG ne_crc; /* 08 Checksum */ WORD ne_flags; /* 0c Flags about segments in this file */ WORD ne_autodata; /* 0e Automatic data segment number */ WORD ne_heap; /* 10 Initial size of local heap */ WORD ne_stack; /* 12 Initial size of stack */ DWORD ne_csip; /* 14 Initial CS:IP */ DWORD ne_sssp; /* 18 Initial SS:SP */ WORD ne_cseg; /* 1c # of entries in segment table */ WORD ne_cmod; /* 1e # of entries in module reference tab. */ WORD ne_cbnrestab; /* 20 Length of nonresident-name table */ WORD ne_segtab; /* 22 Offset to segment table */ WORD ne_rsrctab; /* 24 Offset to resource table */ WORD ne_restab; /* 26 Offset to resident-name table */ WORD ne_modtab; /* 28 Offset to module reference table */ WORD ne_imptab; /* 2a Offset to imported name table */ DWORD ne_nrestab; /* 2c Offset to nonresident-name table */ WORD ne_cmovent; /* 30 # of movable entry points */ WORD ne_align; /* 32 Logical sector alignment shift count */ WORD ne_cres; /* 34 # of resource segments */ BYTE ne_exetyp; /* 36 Flags indicating target OS */ BYTE ne_flagsothers; /* 37 Additional information flags */ WORD ne_pretthunks; /* 38 Offset to return thunks */ WORD ne_psegrefbytes; /* 3a Offset to segment ref. bytes */ WORD ne_swaparea; /* 3c Reserved by Microsoft */ WORD ne_expver; /* 3e Expected Windows version number */ } IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER; #include #include typedef struct _IMAGE_VXD_HEADER { WORD e32_magic; BYTE e32_border; BYTE e32_worder; DWORD e32_level; WORD e32_cpu; WORD e32_os; DWORD e32_ver; DWORD e32_mflags; DWORD e32_mpages; DWORD e32_startobj; DWORD e32_eip; DWORD e32_stackobj; DWORD e32_esp; DWORD e32_pagesize; DWORD e32_lastpagesize; DWORD e32_fixupsize; DWORD e32_fixupsum; DWORD e32_ldrsize; DWORD e32_ldrsum; DWORD e32_objtab; DWORD e32_objcnt; DWORD e32_objmap; DWORD e32_itermap; DWORD e32_rsrctab; DWORD e32_rsrccnt; DWORD e32_restab; DWORD e32_enttab; DWORD e32_dirtab; DWORD e32_dircnt; DWORD e32_fpagetab; DWORD e32_frectab; DWORD e32_impmod; DWORD e32_impmodcnt; DWORD e32_impproc; DWORD e32_pagesum; DWORD e32_datapage; DWORD e32_preload; DWORD e32_nrestab; DWORD e32_cbnrestab; DWORD e32_nressum; DWORD e32_autodata; DWORD e32_debuginfo; DWORD e32_debuglen; DWORD e32_instpreload; DWORD e32_instdemand; DWORD e32_heapsize; BYTE e32_res3[12]; DWORD e32_winresoff; DWORD e32_winreslen; WORD e32_devid; WORD e32_ddkver; } IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER; #include /* These defines describe the meanings of the bits in the Characteristics field */ #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */ #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 #define IMAGE_FILE_16BIT_MACHINE 0x0040 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 #define IMAGE_FILE_32BIT_MACHINE 0x0100 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 #define IMAGE_FILE_SYSTEM 0x1000 #define IMAGE_FILE_DLL 0x2000 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 /* These are the settings of the Machine field. */ #define IMAGE_FILE_MACHINE_UNKNOWN 0 #define IMAGE_FILE_MACHINE_I860 0x014d #define IMAGE_FILE_MACHINE_I386 0x014c #define IMAGE_FILE_MACHINE_R3000 0x0162 #define IMAGE_FILE_MACHINE_R4000 0x0166 #define IMAGE_FILE_MACHINE_R10000 0x0168 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 #define IMAGE_FILE_MACHINE_ALPHA 0x0184 #define IMAGE_FILE_MACHINE_SH3 0x01a2 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3 #define IMAGE_FILE_MACHINE_SH3E 0x01a4 #define IMAGE_FILE_MACHINE_SH4 0x01a6 #define IMAGE_FILE_MACHINE_SH5 0x01a8 #define IMAGE_FILE_MACHINE_ARM 0x01c0 #define IMAGE_FILE_MACHINE_THUMB 0x01c2 #define IMAGE_FILE_MACHINE_ARMNT 0x01c4 #define IMAGE_FILE_MACHINE_ARM64 0xaa64 #define IMAGE_FILE_MACHINE_AM33 0x01d3 #define IMAGE_FILE_MACHINE_POWERPC 0x01f0 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 #define IMAGE_FILE_MACHINE_IA64 0x0200 #define IMAGE_FILE_MACHINE_MIPS16 0x0266 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284 #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64 #define IMAGE_FILE_MACHINE_TRICORE 0x0520 #define IMAGE_FILE_MACHINE_CEF 0x0cef #define IMAGE_FILE_MACHINE_EBC 0x0ebc #define IMAGE_FILE_MACHINE_AMD64 0x8664 #define IMAGE_FILE_MACHINE_M32R 0x9041 #define IMAGE_FILE_MACHINE_CEE 0xc0ee #define IMAGE_SIZEOF_FILE_HEADER 20 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240 #define IMAGE_SIZEOF_SHORT_NAME 8 #define IMAGE_SIZEOF_SECTION_HEADER 40 #define IMAGE_SIZEOF_SYMBOL 18 #define IMAGE_SIZEOF_AUX_SYMBOL 18 #define IMAGE_SIZEOF_RELOCATION 10 #define IMAGE_SIZEOF_BASE_RELOCATION 8 #define IMAGE_SIZEOF_LINENUMBER 6 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60 /* Possible Magic values */ #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 #ifdef _WIN64 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC #else #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC #endif /* These are indexes into the DataDirectory array */ #define IMAGE_FILE_EXPORT_DIRECTORY 0 #define IMAGE_FILE_IMPORT_DIRECTORY 1 #define IMAGE_FILE_RESOURCE_DIRECTORY 2 #define IMAGE_FILE_EXCEPTION_DIRECTORY 3 #define IMAGE_FILE_SECURITY_DIRECTORY 4 #define IMAGE_FILE_BASE_RELOCATION_TABLE 5 #define IMAGE_FILE_DEBUG_DIRECTORY 6 #define IMAGE_FILE_DESCRIPTION_STRING 7 #define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */ #define IMAGE_FILE_THREAD_LOCAL_STORAGE 9 #define IMAGE_FILE_CALLBACK_DIRECTORY 10 /* Directory Entries, indices into the DataDirectory array */ #define IMAGE_DIRECTORY_ENTRY_EXPORT 0 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */ #define IMAGE_DIRECTORY_ENTRY_TLS 9 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 #define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */ #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 /* Subsystem Values */ #define IMAGE_SUBSYSTEM_UNKNOWN 0 #define IMAGE_SUBSYSTEM_NATIVE 1 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */ #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */ #define IMAGE_SUBSYSTEM_OS2_CUI 5 #define IMAGE_SUBSYSTEM_POSIX_CUI 7 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */ #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */ #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 #define IMAGE_SUBSYSTEM_EFI_ROM 13 #define IMAGE_SUBSYSTEM_XBOX 14 #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16 /* DLL Characteristics */ #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000 typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 typedef struct _IMAGE_OPTIONAL_HEADER64 { WORD Magic; /* 0x20b */ BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode; ULONGLONG ImageBase; DWORD SectionAlignment; DWORD FileAlignment; WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage; DWORD SizeOfHeaders; DWORD CheckSum; WORD Subsystem; WORD DllCharacteristics; ULONGLONG SizeOfStackReserve; ULONGLONG SizeOfStackCommit; ULONGLONG SizeOfHeapReserve; ULONGLONG SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64; typedef struct _IMAGE_NT_HEADERS64 { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER64 OptionalHeader; } IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64; typedef struct _IMAGE_OPTIONAL_HEADER { /* Standard fields */ WORD Magic; /* 0x10b or 0x107 */ /* 0x00 */ BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; /* 0x10 */ DWORD BaseOfCode; DWORD BaseOfData; /* NT additional fields */ DWORD ImageBase; DWORD SectionAlignment; /* 0x20 */ DWORD FileAlignment; WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; /* 0x30 */ WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage; DWORD SizeOfHeaders; DWORD CheckSum; /* 0x40 */ WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve; DWORD SizeOfStackCommit; DWORD SizeOfHeapReserve; /* 0x50 */ DWORD SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; /* 0x60 */ /* 0xE0 */ } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; typedef struct _IMAGE_NT_HEADERS { DWORD Signature; /* "PE"\0\0 */ /* 0x00 */ IMAGE_FILE_HEADER FileHeader; /* 0x04 */ IMAGE_OPTIONAL_HEADER32 OptionalHeader; /* 0x18 */ } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; #ifdef _WIN64 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS; typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS; typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER; typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER; #else typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS; typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER; typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER; #endif #define IMAGE_SIZEOF_SHORT_NAME 8 typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAddress; DWORD VirtualSize; } Misc; DWORD VirtualAddress; DWORD SizeOfRawData; DWORD PointerToRawData; DWORD PointerToRelocations; DWORD PointerToLinenumbers; WORD NumberOfRelocations; WORD NumberOfLinenumbers; DWORD Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; #define IMAGE_SIZEOF_SECTION_HEADER 40 #define IMAGE_FIRST_SECTION(ntheader) \ ((PIMAGE_SECTION_HEADER)(ULONG_PTR)((const BYTE *)&((const IMAGE_NT_HEADERS *)(ntheader))->OptionalHeader + \ ((const IMAGE_NT_HEADERS *)(ntheader))->FileHeader.SizeOfOptionalHeader)) /* These defines are for the Characteristics bitfield. */ /* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */ /* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */ /* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */ /* #define IMAGE_SCN_TYPE_GROUP 0x00000004 - Reserved */ #define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved */ /* #define IMAGE_SCN_TYPE_COPY 0x00000010 - Reserved */ #define IMAGE_SCN_CNT_CODE 0x00000020 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 #define IMAGE_SCN_LNK_OTHER 0x00000100 #define IMAGE_SCN_LNK_INFO 0x00000200 /* #define IMAGE_SCN_TYPE_OVER 0x00000400 - Reserved */ #define IMAGE_SCN_LNK_REMOVE 0x00000800 #define IMAGE_SCN_LNK_COMDAT 0x00001000 /* 0x00002000 - Reserved */ /* #define IMAGE_SCN_MEM_PROTECTED 0x00004000 - Obsolete */ #define IMAGE_SCN_MEM_FARDATA 0x00008000 /* #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 - Obsolete */ #define IMAGE_SCN_MEM_PURGEABLE 0x00020000 #define IMAGE_SCN_MEM_16BIT 0x00020000 #define IMAGE_SCN_MEM_LOCKED 0x00040000 #define IMAGE_SCN_MEM_PRELOAD 0x00080000 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default */ #define IMAGE_SCN_ALIGN_32BYTES 0x00600000 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000 /* 0x00F00000 - Unused */ #define IMAGE_SCN_ALIGN_MASK 0x00F00000 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 #define IMAGE_SCN_MEM_SHARED 0x10000000 #define IMAGE_SCN_MEM_EXECUTE 0x20000000 #define IMAGE_SCN_MEM_READ 0x40000000 #define IMAGE_SCN_MEM_WRITE 0x80000000 #include typedef struct _IMAGE_SYMBOL { union { BYTE ShortName[8]; struct { DWORD Short; DWORD Long; } Name; DWORD LongName[2]; } N; DWORD Value; SHORT SectionNumber; WORD Type; BYTE StorageClass; BYTE NumberOfAuxSymbols; } IMAGE_SYMBOL; typedef IMAGE_SYMBOL *PIMAGE_SYMBOL; #define IMAGE_SIZEOF_SYMBOL 18 typedef struct _IMAGE_LINENUMBER { union { DWORD SymbolTableIndex; DWORD VirtualAddress; } Type; WORD Linenumber; } IMAGE_LINENUMBER; typedef IMAGE_LINENUMBER *PIMAGE_LINENUMBER; #define IMAGE_SIZEOF_LINENUMBER 6 typedef union _IMAGE_AUX_SYMBOL { struct { DWORD TagIndex; union { struct { WORD Linenumber; WORD Size; } LnSz; DWORD TotalSize; } Misc; union { struct { DWORD PointerToLinenumber; DWORD PointerToNextFunction; } Function; struct { WORD Dimension[4]; } Array; } FcnAry; WORD TvIndex; } Sym; struct { BYTE Name[IMAGE_SIZEOF_SYMBOL]; } File; struct { DWORD Length; WORD NumberOfRelocations; WORD NumberOfLinenumbers; DWORD CheckSum; SHORT Number; BYTE Selection; } Section; } IMAGE_AUX_SYMBOL; typedef IMAGE_AUX_SYMBOL *PIMAGE_AUX_SYMBOL; #define IMAGE_SIZEOF_AUX_SYMBOL 18 #include #define IMAGE_SYM_UNDEFINED (SHORT)0 #define IMAGE_SYM_ABSOLUTE (SHORT)-1 #define IMAGE_SYM_DEBUG (SHORT)-2 #define IMAGE_SYM_TYPE_NULL 0x0000 #define IMAGE_SYM_TYPE_VOID 0x0001 #define IMAGE_SYM_TYPE_CHAR 0x0002 #define IMAGE_SYM_TYPE_SHORT 0x0003 #define IMAGE_SYM_TYPE_INT 0x0004 #define IMAGE_SYM_TYPE_LONG 0x0005 #define IMAGE_SYM_TYPE_FLOAT 0x0006 #define IMAGE_SYM_TYPE_DOUBLE 0x0007 #define IMAGE_SYM_TYPE_STRUCT 0x0008 #define IMAGE_SYM_TYPE_UNION 0x0009 #define IMAGE_SYM_TYPE_ENUM 0x000A #define IMAGE_SYM_TYPE_MOE 0x000B #define IMAGE_SYM_TYPE_BYTE 0x000C #define IMAGE_SYM_TYPE_WORD 0x000D #define IMAGE_SYM_TYPE_UINT 0x000E #define IMAGE_SYM_TYPE_DWORD 0x000F #define IMAGE_SYM_TYPE_PCODE 0x8000 #define IMAGE_SYM_DTYPE_NULL 0 #define IMAGE_SYM_DTYPE_POINTER 1 #define IMAGE_SYM_DTYPE_FUNCTION 2 #define IMAGE_SYM_DTYPE_ARRAY 3 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1 #define IMAGE_SYM_CLASS_NULL 0x0000 #define IMAGE_SYM_CLASS_AUTOMATIC 0x0001 #define IMAGE_SYM_CLASS_EXTERNAL 0x0002 #define IMAGE_SYM_CLASS_STATIC 0x0003 #define IMAGE_SYM_CLASS_REGISTER 0x0004 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005 #define IMAGE_SYM_CLASS_LABEL 0x0006 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008 #define IMAGE_SYM_CLASS_ARGUMENT 0x0009 #define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B #define IMAGE_SYM_CLASS_UNION_TAG 0x000C #define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E #define IMAGE_SYM_CLASS_ENUM_TAG 0x000F #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010 #define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011 #define IMAGE_SYM_CLASS_BIT_FIELD 0x0012 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044 #define IMAGE_SYM_CLASS_BLOCK 0x0064 #define IMAGE_SYM_CLASS_FUNCTION 0x0065 #define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066 #define IMAGE_SYM_CLASS_FILE 0x0067 #define IMAGE_SYM_CLASS_SECTION 0x0068 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069 #define N_BTMASK 0x000F #define N_TMASK 0x0030 #define N_TMASK1 0x00C0 #define N_TMASK2 0x00F0 #define N_BTSHFT 4 #define N_TSHIFT 2 #define BTYPE(x) ((x) & N_BTMASK) #ifndef ISPTR #define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT)) #endif #ifndef ISFCN #define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT)) #endif #ifndef ISARY #define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT)) #endif #ifndef ISTAG #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG) #endif #ifndef INCREF #define INCREF(x) ((((x)&~N_BTMASK)<>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK)) #endif #define IMAGE_COMDAT_SELECT_NODUPLICATES 1 #define IMAGE_COMDAT_SELECT_ANY 2 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5 #define IMAGE_COMDAT_SELECT_LARGEST 6 #define IMAGE_COMDAT_SELECT_NEWEST 7 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3 /* Export module directory */ typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; DWORD Name; DWORD Base; DWORD NumberOfFunctions; DWORD NumberOfNames; DWORD AddressOfFunctions; DWORD AddressOfNames; DWORD AddressOfNameOrdinals; } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY; /* Import name entry */ typedef struct _IMAGE_IMPORT_BY_NAME { WORD Hint; BYTE Name[1]; } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME; #include /* Import thunk */ typedef struct _IMAGE_THUNK_DATA64 { union { ULONGLONG ForwarderString; ULONGLONG Function; ULONGLONG Ordinal; ULONGLONG AddressOfData; } u1; } IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64; #include typedef struct _IMAGE_THUNK_DATA32 { union { DWORD ForwarderString; DWORD Function; DWORD Ordinal; DWORD AddressOfData; } u1; } IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32; /* Import module directory */ typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; /* 0 for terminating null import descriptor */ DWORD OriginalFirstThunk; /* RVA to original unbound IAT */ } DUMMYUNIONNAME; DWORD TimeDateStamp; /* 0 if not bound, * -1 if bound, and real date\time stamp * in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT * (new BIND) * otherwise date/time stamp of DLL bound to * (Old BIND) */ DWORD ForwarderChain; /* -1 if no forwarders */ DWORD Name; /* RVA to IAT (if bound this IAT has actual addresses) */ DWORD FirstThunk; } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR; #define IMAGE_ORDINAL_FLAG64 (((ULONGLONG)0x80000000 << 32) | 0x00000000) #define IMAGE_ORDINAL_FLAG32 0x80000000 #define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0) #define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0) #define IMAGE_ORDINAL64(ordinal) ((ordinal) & 0xffff) #define IMAGE_ORDINAL32(ordinal) ((ordinal) & 0xffff) #ifdef _WIN64 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal) #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal) typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA; typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA; #else #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal) #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal) typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA; typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA; #endif typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR { DWORD TimeDateStamp; WORD OffsetModuleName; WORD NumberOfModuleForwarderRefs; /* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */ } IMAGE_BOUND_IMPORT_DESCRIPTOR, *PIMAGE_BOUND_IMPORT_DESCRIPTOR; typedef struct _IMAGE_BOUND_FORWARDER_REF { DWORD TimeDateStamp; WORD OffsetModuleName; WORD Reserved; } IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF; typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; /* WORD TypeOffset[1]; */ } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION; #include typedef struct _IMAGE_RELOCATION { union { DWORD VirtualAddress; DWORD RelocCount; } DUMMYUNIONNAME; DWORD SymbolTableIndex; WORD Type; } IMAGE_RELOCATION, *PIMAGE_RELOCATION; #include #define IMAGE_SIZEOF_RELOCATION 10 typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR { union { DWORD AllAttributes; struct { DWORD RvaBased:1; DWORD ReservedAttributes:31; } DUMMYSTRUCTNAME; } Attributes; DWORD DllNameRVA; DWORD ModuleHandleRVA; DWORD ImportAddressTableRVA; DWORD ImportNameTableRVA; DWORD BoundImportAddressTableRVA; DWORD UnloadInformationTableRVA; DWORD TimeDateStamp; } IMAGE_DELAYLOAD_DESCRIPTOR, *PIMAGE_DELAYLOAD_DESCRIPTOR; typedef const IMAGE_DELAYLOAD_DESCRIPTOR *PCIMAGE_DELAYLOAD_DESCRIPTOR; /* generic relocation types */ #define IMAGE_REL_BASED_ABSOLUTE 0 #define IMAGE_REL_BASED_HIGH 1 #define IMAGE_REL_BASED_LOW 2 #define IMAGE_REL_BASED_HIGHLOW 3 #define IMAGE_REL_BASED_HIGHADJ 4 #define IMAGE_REL_BASED_MIPS_JMPADDR 5 #define IMAGE_REL_BASED_ARM_MOV32A 5 /* yes, 5 too */ #define IMAGE_REL_BASED_ARM_MOV32 5 /* yes, 5 too */ #define IMAGE_REL_BASED_SECTION 6 #define IMAGE_REL_BASED_REL 7 #define IMAGE_REL_BASED_ARM_MOV32T 7 /* yes, 7 too */ #define IMAGE_REL_BASED_THUMB_MOV32 7 /* yes, 7 too */ #define IMAGE_REL_BASED_MIPS_JMPADDR16 9 #define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */ #define IMAGE_REL_BASED_DIR64 10 #define IMAGE_REL_BASED_HIGH3ADJ 11 /* I386 relocation types */ #define IMAGE_REL_I386_ABSOLUTE 0 #define IMAGE_REL_I386_DIR16 1 #define IMAGE_REL_I386_REL16 2 #define IMAGE_REL_I386_DIR32 6 #define IMAGE_REL_I386_DIR32NB 7 #define IMAGE_REL_I386_SEG12 9 #define IMAGE_REL_I386_SECTION 10 #define IMAGE_REL_I386_SECREL 11 #define IMAGE_REL_I386_TOKEN 12 #define IMAGE_REL_I386_SECREL7 13 #define IMAGE_REL_I386_REL32 20 /* MIPS relocation types */ #define IMAGE_REL_MIPS_ABSOLUTE 0x0000 #define IMAGE_REL_MIPS_REFHALF 0x0001 #define IMAGE_REL_MIPS_REFWORD 0x0002 #define IMAGE_REL_MIPS_JMPADDR 0x0003 #define IMAGE_REL_MIPS_REFHI 0x0004 #define IMAGE_REL_MIPS_REFLO 0x0005 #define IMAGE_REL_MIPS_GPREL 0x0006 #define IMAGE_REL_MIPS_LITERAL 0x0007 #define IMAGE_REL_MIPS_SECTION 0x000A #define IMAGE_REL_MIPS_SECREL 0x000B #define IMAGE_REL_MIPS_SECRELLO 0x000C #define IMAGE_REL_MIPS_SECRELHI 0x000D #define IMAGE_REL_MIPS_TOKEN 0x000E #define IMAGE_REL_MIPS_JMPADDR16 0x0010 #define IMAGE_REL_MIPS_REFWORDNB 0x0022 #define IMAGE_REL_MIPS_PAIR 0x0025 /* ALPHA relocation types */ #define IMAGE_REL_ALPHA_ABSOLUTE 0x0000 #define IMAGE_REL_ALPHA_REFLONG 0x0001 #define IMAGE_REL_ALPHA_REFQUAD 0x0002 #define IMAGE_REL_ALPHA_GPREL 0x0003 #define IMAGE_REL_ALPHA_LITERAL 0x0004 #define IMAGE_REL_ALPHA_LITUSE 0x0005 #define IMAGE_REL_ALPHA_GPDISP 0x0006 #define IMAGE_REL_ALPHA_BRADDR 0x0007 #define IMAGE_REL_ALPHA_HINT 0x0008 #define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009 #define IMAGE_REL_ALPHA_REFHI 0x000A #define IMAGE_REL_ALPHA_REFLO 0x000B #define IMAGE_REL_ALPHA_PAIR 0x000C #define IMAGE_REL_ALPHA_MATCH 0x000D #define IMAGE_REL_ALPHA_SECTION 0x000E #define IMAGE_REL_ALPHA_SECREL 0x000F #define IMAGE_REL_ALPHA_REFLONGNB 0x0010 #define IMAGE_REL_ALPHA_SECRELLO 0x0011 #define IMAGE_REL_ALPHA_SECRELHI 0x0012 #define IMAGE_REL_ALPHA_REFQ3 0x0013 #define IMAGE_REL_ALPHA_REFQ2 0x0014 #define IMAGE_REL_ALPHA_REFQ1 0x0015 #define IMAGE_REL_ALPHA_GPRELLO 0x0016 #define IMAGE_REL_ALPHA_GPRELHI 0x0017 /* PowerPC relocation types */ #define IMAGE_REL_PPC_ABSOLUTE 0x0000 #define IMAGE_REL_PPC_ADDR64 0x0001 #define IMAGE_REL_PPC_ADDR 0x0002 #define IMAGE_REL_PPC_ADDR24 0x0003 #define IMAGE_REL_PPC_ADDR16 0x0004 #define IMAGE_REL_PPC_ADDR14 0x0005 #define IMAGE_REL_PPC_REL24 0x0006 #define IMAGE_REL_PPC_REL14 0x0007 #define IMAGE_REL_PPC_TOCREL16 0x0008 #define IMAGE_REL_PPC_TOCREL14 0x0009 #define IMAGE_REL_PPC_ADDR32NB 0x000A #define IMAGE_REL_PPC_SECREL 0x000B #define IMAGE_REL_PPC_SECTION 0x000C #define IMAGE_REL_PPC_IFGLUE 0x000D #define IMAGE_REL_PPC_IMGLUE 0x000E #define IMAGE_REL_PPC_SECREL16 0x000F #define IMAGE_REL_PPC_REFHI 0x0010 #define IMAGE_REL_PPC_REFLO 0x0011 #define IMAGE_REL_PPC_PAIR 0x0012 #define IMAGE_REL_PPC_SECRELLO 0x0013 #define IMAGE_REL_PPC_SECRELHI 0x0014 #define IMAGE_REL_PPC_GPREL 0x0015 #define IMAGE_REL_PPC_TOKEN 0x0016 #define IMAGE_REL_PPC_TYPEMASK 0x00FF /* modifier bits */ #define IMAGE_REL_PPC_NEG 0x0100 #define IMAGE_REL_PPC_BRTAKEN 0x0200 #define IMAGE_REL_PPC_BRNTAKEN 0x0400 #define IMAGE_REL_PPC_TOCDEFN 0x0800 /* SH3 relocation types */ #define IMAGE_REL_SH3_ABSOLUTE 0x0000 #define IMAGE_REL_SH3_DIRECT16 0x0001 #define IMAGE_REL_SH3_DIRECT 0x0002 #define IMAGE_REL_SH3_DIRECT8 0x0003 #define IMAGE_REL_SH3_DIRECT8_WORD 0x0004 #define IMAGE_REL_SH3_DIRECT8_LONG 0x0005 #define IMAGE_REL_SH3_DIRECT4 0x0006 #define IMAGE_REL_SH3_DIRECT4_WORD 0x0007 #define IMAGE_REL_SH3_DIRECT4_LONG 0x0008 #define IMAGE_REL_SH3_PCREL8_WORD 0x0009 #define IMAGE_REL_SH3_PCREL8_LONG 0x000A #define IMAGE_REL_SH3_PCREL12_WORD 0x000B #define IMAGE_REL_SH3_STARTOF_SECTION 0x000C #define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D #define IMAGE_REL_SH3_SECTION 0x000E #define IMAGE_REL_SH3_SECREL 0x000F #define IMAGE_REL_SH3_DIRECT32_NB 0x0010 #define IMAGE_REL_SH3_GPREL4_LONG 0x0011 #define IMAGE_REL_SH3_TOKEN 0x0012 /* ARM relocation types */ #define IMAGE_REL_ARM_ABSOLUTE 0x0000 #define IMAGE_REL_ARM_ADDR 0x0001 #define IMAGE_REL_ARM_ADDR32NB 0x0002 #define IMAGE_REL_ARM_BRANCH24 0x0003 #define IMAGE_REL_ARM_BRANCH11 0x0004 #define IMAGE_REL_ARM_TOKEN 0x0005 #define IMAGE_REL_ARM_GPREL12 0x0006 #define IMAGE_REL_ARM_GPREL7 0x0007 #define IMAGE_REL_ARM_BLX24 0x0008 #define IMAGE_REL_ARM_BLX11 0x0009 #define IMAGE_REL_ARM_SECTION 0x000E #define IMAGE_REL_ARM_SECREL 0x000F #define IMAGE_REL_ARM_MOV32A 0x0010 #define IMAGE_REL_ARM_MOV32T 0x0011 #define IMAGE_REL_ARM_BRANCH20T 0x0012 #define IMAGE_REL_ARM_BRANCH24T 0x0014 #define IMAGE_REL_ARM_BLX23T 0x0015 /* ARM64 relocation types */ #define IMAGE_REL_ARM64_ABSOLUTE 0x0000 #define IMAGE_REL_ARM64_ADDR32 0x0001 #define IMAGE_REL_ARM64_ADDR32NB 0x0002 #define IMAGE_REL_ARM64_BRANCH26 0x0003 #define IMAGE_REL_ARM64_PAGEBASE_REL21 0x0004 #define IMAGE_REL_ARM64_REL21 0x0005 #define IMAGE_REL_ARM64_PAGEOFFSET_12A 0x0006 #define IMAGE_REL_ARM64_PAGEOFFSET_12L 0x0007 #define IMAGE_REL_ARM64_SECREL 0x0008 #define IMAGE_REL_ARM64_SECREL_LOW12A 0x0009 #define IMAGE_REL_ARM64_SECREL_HIGH12A 0x000A #define IMAGE_REL_ARM64_SECREL_LOW12L 0x000B #define IMAGE_REL_ARM64_TOKEN 0x000C #define IMAGE_REL_ARM64_SECTION 0x000D #define IMAGE_REL_ARM64_ADDR64 0x000E /* IA64 relocation types */ #define IMAGE_REL_IA64_ABSOLUTE 0x0000 #define IMAGE_REL_IA64_IMM14 0x0001 #define IMAGE_REL_IA64_IMM22 0x0002 #define IMAGE_REL_IA64_IMM64 0x0003 #define IMAGE_REL_IA64_DIR 0x0004 #define IMAGE_REL_IA64_DIR64 0x0005 #define IMAGE_REL_IA64_PCREL21B 0x0006 #define IMAGE_REL_IA64_PCREL21M 0x0007 #define IMAGE_REL_IA64_PCREL21F 0x0008 #define IMAGE_REL_IA64_GPREL22 0x0009 #define IMAGE_REL_IA64_LTOFF22 0x000A #define IMAGE_REL_IA64_SECTION 0x000B #define IMAGE_REL_IA64_SECREL22 0x000C #define IMAGE_REL_IA64_SECREL64I 0x000D #define IMAGE_REL_IA64_SECREL 0x000E #define IMAGE_REL_IA64_LTOFF64 0x000F #define IMAGE_REL_IA64_DIR32NB 0x0010 #define IMAGE_REL_IA64_SREL14 0x0011 #define IMAGE_REL_IA64_SREL22 0x0012 #define IMAGE_REL_IA64_SREL32 0x0013 #define IMAGE_REL_IA64_UREL32 0x0014 #define IMAGE_REL_IA64_PCREL60X 0x0015 #define IMAGE_REL_IA64_PCREL60B 0x0016 #define IMAGE_REL_IA64_PCREL60F 0x0017 #define IMAGE_REL_IA64_PCREL60I 0x0018 #define IMAGE_REL_IA64_PCREL60M 0x0019 #define IMAGE_REL_IA64_IMMGPREL64 0x001A #define IMAGE_REL_IA64_TOKEN 0x001B #define IMAGE_REL_IA64_GPREL32 0x001C #define IMAGE_REL_IA64_ADDEND 0x001F /* AMD64 relocation types */ #define IMAGE_REL_AMD64_ABSOLUTE 0x0000 #define IMAGE_REL_AMD64_ADDR64 0x0001 #define IMAGE_REL_AMD64_ADDR32 0x0002 #define IMAGE_REL_AMD64_ADDR32NB 0x0003 #define IMAGE_REL_AMD64_REL32 0x0004 #define IMAGE_REL_AMD64_REL32_1 0x0005 #define IMAGE_REL_AMD64_REL32_2 0x0006 #define IMAGE_REL_AMD64_REL32_3 0x0007 #define IMAGE_REL_AMD64_REL32_4 0x0008 #define IMAGE_REL_AMD64_REL32_5 0x0009 #define IMAGE_REL_AMD64_SECTION 0x000A #define IMAGE_REL_AMD64_SECREL 0x000B #define IMAGE_REL_AMD64_SECREL7 0x000C #define IMAGE_REL_AMD64_TOKEN 0x000D #define IMAGE_REL_AMD64_SREL32 0x000E #define IMAGE_REL_AMD64_PAIR 0x000F #define IMAGE_REL_AMD64_SSPAN32 0x0010 /* archive format */ #define IMAGE_ARCHIVE_START_SIZE 8 #define IMAGE_ARCHIVE_START "!\n" #define IMAGE_ARCHIVE_END "`\n" #define IMAGE_ARCHIVE_PAD "\n" #define IMAGE_ARCHIVE_LINKER_MEMBER "/ " #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// " typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER { BYTE Name[16]; BYTE Date[12]; BYTE UserID[6]; BYTE GroupID[6]; BYTE Mode[8]; BYTE Size[10]; BYTE EndHeader[2]; } IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER; #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60 typedef struct _IMPORT_OBJECT_HEADER { WORD Sig1; WORD Sig2; WORD Version; WORD Machine; DWORD TimeDateStamp; DWORD SizeOfData; union { WORD Ordinal; WORD Hint; } DUMMYUNIONNAME; WORD Type : 2; WORD NameType : 3; WORD Reserved : 11; } IMPORT_OBJECT_HEADER; #define IMPORT_OBJECT_HDR_SIG2 0xffff typedef enum IMPORT_OBJECT_TYPE { IMPORT_OBJECT_CODE = 0, IMPORT_OBJECT_DATA = 1, IMPORT_OBJECT_CONST = 2 } IMPORT_OBJECT_TYPE; typedef enum IMPORT_OBJECT_NAME_TYPE { IMPORT_OBJECT_ORDINAL = 0, IMPORT_OBJECT_NAME = 1, IMPORT_OBJECT_NAME_NO_PREFIX = 2, IMPORT_OBJECT_NAME_UNDECORATE = 3 } IMPORT_OBJECT_NAME_TYPE; typedef struct _ANON_OBJECT_HEADER { WORD Sig1; WORD Sig2; WORD Version; WORD Machine; DWORD TimeDateStamp; CLSID ClassID; DWORD SizeOfData; } ANON_OBJECT_HEADER; /* * Resource directory stuff */ typedef struct _IMAGE_RESOURCE_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; WORD NumberOfNamedEntries; WORD NumberOfIdEntries; /* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */ } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY; #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { union { struct { #ifdef BITFIELDS_BIGENDIAN unsigned NameIsString:1; unsigned NameOffset:31; #else unsigned NameOffset:31; unsigned NameIsString:1; #endif } DUMMYSTRUCTNAME; DWORD Name; #ifdef WORDS_BIGENDIAN WORD __pad; WORD Id; #else WORD Id; WORD __pad; #endif } DUMMYUNIONNAME; union { DWORD OffsetToData; struct { #ifdef BITFIELDS_BIGENDIAN unsigned DataIsDirectory:1; unsigned OffsetToDirectory:31; #else unsigned OffsetToDirectory:31; unsigned DataIsDirectory:1; #endif } DUMMYSTRUCTNAME2; } DUMMYUNIONNAME2; } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY; typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { WORD Length; CHAR NameString[ 1 ]; } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING; typedef struct _IMAGE_RESOURCE_DIR_STRING_U { WORD Length; WCHAR NameString[ 1 ]; } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U; typedef struct _IMAGE_RESOURCE_DATA_ENTRY { DWORD OffsetToData; DWORD Size; DWORD CodePage; DWORD Reserved; } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY; typedef VOID (CALLBACK *PIMAGE_TLS_CALLBACK)( LPVOID DllHandle,DWORD Reason,LPVOID Reserved ); typedef struct _IMAGE_TLS_DIRECTORY64 { ULONGLONG StartAddressOfRawData; ULONGLONG EndAddressOfRawData; ULONGLONG AddressOfIndex; ULONGLONG AddressOfCallBacks; DWORD SizeOfZeroFill; DWORD Characteristics; } IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64; typedef struct _IMAGE_TLS_DIRECTORY32 { DWORD StartAddressOfRawData; DWORD EndAddressOfRawData; DWORD AddressOfIndex; DWORD AddressOfCallBacks; DWORD SizeOfZeroFill; DWORD Characteristics; } IMAGE_TLS_DIRECTORY32, *PIMAGE_TLS_DIRECTORY32; #ifdef _WIN64 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY; typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY; #else typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY; typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY; #endif typedef struct _IMAGE_DEBUG_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; DWORD Type; DWORD SizeOfData; DWORD AddressOfRawData; DWORD PointerToRawData; } IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY; #define IMAGE_DEBUG_TYPE_UNKNOWN 0 #define IMAGE_DEBUG_TYPE_COFF 1 #define IMAGE_DEBUG_TYPE_CODEVIEW 2 #define IMAGE_DEBUG_TYPE_FPO 3 #define IMAGE_DEBUG_TYPE_MISC 4 #define IMAGE_DEBUG_TYPE_EXCEPTION 5 #define IMAGE_DEBUG_TYPE_FIXUP 6 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8 #define IMAGE_DEBUG_TYPE_BORLAND 9 #define IMAGE_DEBUG_TYPE_RESERVED10 10 #define IMAGE_DEBUG_TYPE_CLSID 11 #define IMAGE_DEBUG_TYPE_VC_FEATURE 12 #define IMAGE_DEBUG_TYPE_POGO 13 #define IMAGE_DEBUG_TYPE_ILTCG 14 #define IMAGE_DEBUG_TYPE_MPX 15 typedef enum ReplacesCorHdrNumericDefines { COMIMAGE_FLAGS_ILONLY = 0x00000001, COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002, COMIMAGE_FLAGS_IL_LIBRARY = 0x00000004, COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008, COMIMAGE_FLAGS_NATIVE_ENTRYPOINT= 0x00000010, COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x00010000, COMIMAGE_FLAGS_32BITPREFERRED = 0x00020000, COR_VERSION_MAJOR_V2 = 2, COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2, COR_VERSION_MINOR = 5, COR_DELETED_NAME_LENGTH = 8, COR_VTABLEGAP_NAME_LENGTH = 8, NATIVE_TYPE_MAX_CB = 1, COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE = 0xff, IMAGE_COR_MIH_METHODRVA = 0x01, IMAGE_COR_MIH_EHRVA = 0x02, IMAGE_COR_MIH_BASICBLOCK = 0x08, COR_VTABLE_32BIT = 0x01, COR_VTABLE_64BIT = 0x02, COR_VTABLE_FROM_UNMANAGED = 0x04, COR_VTABLE_CALL_MOST_DERIVED = 0x10, IMAGE_COR_EATJ_THUNK_SIZE = 32, MAX_CLASS_NAME = 1024, MAX_PACKAGE_NAME = 1024, } ReplacesCorHdrNumericDefines; typedef struct IMAGE_COR20_HEADER { DWORD cb; WORD MajorRuntimeVersion; WORD MinorRuntimeVersion; IMAGE_DATA_DIRECTORY MetaData; DWORD Flags; union { DWORD EntryPointToken; DWORD EntryPointRVA; } DUMMYUNIONNAME; IMAGE_DATA_DIRECTORY Resources; IMAGE_DATA_DIRECTORY StrongNameSignature; IMAGE_DATA_DIRECTORY CodeManagerTable; IMAGE_DATA_DIRECTORY VTableFixups; IMAGE_DATA_DIRECTORY ExportAddressTableJumps; IMAGE_DATA_DIRECTORY ManagedNativeHeader; } IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER; typedef struct _IMAGE_COFF_SYMBOLS_HEADER { DWORD NumberOfSymbols; DWORD LvaToFirstSymbol; DWORD NumberOfLinenumbers; DWORD LvaToFirstLinenumber; DWORD RvaToFirstByteOfCode; DWORD RvaToLastByteOfCode; DWORD RvaToFirstByteOfData; DWORD RvaToLastByteOfData; } IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER; #define FRAME_FPO 0 #define FRAME_TRAP 1 #define FRAME_TSS 2 #define FRAME_NONFPO 3 typedef struct _FPO_DATA { DWORD ulOffStart; DWORD cbProcSize; DWORD cdwLocals; WORD cdwParams; WORD cbProlog : 8; WORD cbRegs : 3; WORD fHasSEH : 1; WORD fUseBP : 1; WORD reserved : 1; WORD cbFrame : 2; } FPO_DATA, *PFPO_DATA; typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 { DWORD Size; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; DWORD GlobalFlagsClear; DWORD GlobalFlagsSet; DWORD CriticalSectionDefaultTimeout; ULONGLONG DeCommitFreeBlockThreshold; ULONGLONG DeCommitTotalFreeThreshold; ULONGLONG LockPrefixTable; ULONGLONG MaximumAllocationSize; ULONGLONG VirtualMemoryThreshold; ULONGLONG ProcessAffinityMask; DWORD ProcessHeapFlags; WORD CSDVersion; WORD Reserved1; ULONGLONG EditList; ULONGLONG SecurityCookie; ULONGLONG SEHandlerTable; ULONGLONG SEHandlerCount; } IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64; typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 { DWORD Size; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; DWORD GlobalFlagsClear; DWORD GlobalFlagsSet; DWORD CriticalSectionDefaultTimeout; DWORD DeCommitFreeBlockThreshold; DWORD DeCommitTotalFreeThreshold; PVOID LockPrefixTable; DWORD MaximumAllocationSize; DWORD VirtualMemoryThreshold; DWORD ProcessHeapFlags; DWORD ProcessAffinityMask; WORD CSDVersion; WORD Reserved1; PVOID EditList; DWORD SecurityCookie; DWORD SEHandlerTable; DWORD SEHandlerCount; } IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32; #ifdef _WIN64 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY; typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY; #else typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY; typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY; #endif typedef struct _IMAGE_FUNCTION_ENTRY { DWORD StartingAddress; DWORD EndingAddress; DWORD EndOfPrologue; } IMAGE_FUNCTION_ENTRY, *PIMAGE_FUNCTION_ENTRY; #define IMAGE_DEBUG_MISC_EXENAME 1 typedef struct _IMAGE_DEBUG_MISC { DWORD DataType; DWORD Length; BYTE Unicode; BYTE Reserved[ 3 ]; BYTE Data[ 1 ]; } IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC; /* This is the structure that appears at the very start of a .DBG file. */ typedef struct _IMAGE_SEPARATE_DEBUG_HEADER { WORD Signature; WORD Flags; WORD Machine; WORD Characteristics; DWORD TimeDateStamp; DWORD CheckSum; DWORD ImageBase; DWORD SizeOfImage; DWORD NumberOfSections; DWORD ExportedNamesSize; DWORD DebugDirectorySize; DWORD SectionAlignment; DWORD Reserved[ 2 ]; } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER; #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944 typedef struct tagMESSAGE_RESOURCE_ENTRY { WORD Length; WORD Flags; BYTE Text[1]; } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY; #define MESSAGE_RESOURCE_UNICODE 0x0001 typedef struct tagMESSAGE_RESOURCE_BLOCK { DWORD LowId; DWORD HighId; DWORD OffsetToEntries; } MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK; typedef struct tagMESSAGE_RESOURCE_DATA { DWORD NumberOfBlocks; MESSAGE_RESOURCE_BLOCK Blocks[ 1 ]; } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA; /* * Here follows typedefs for security and tokens. */ /* * First a constant for the following typedefs. */ #define ANYSIZE_ARRAY 1 /* FIXME: Orphan. What does it point to? */ typedef PVOID PACCESS_TOKEN; typedef PVOID PSECURITY_DESCRIPTOR; typedef PVOID PSID; typedef enum _TOKEN_ELEVATION_TYPE { TokenElevationTypeDefault = 1, TokenElevationTypeFull, TokenElevationTypeLimited } TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE; /* * TOKEN_INFORMATION_CLASS */ typedef enum _TOKEN_INFORMATION_CLASS { TokenUser = 1, TokenGroups, TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl, TokenSource, TokenType, TokenImpersonationLevel, TokenStatistics, TokenRestrictedSids, TokenSessionId, TokenGroupsAndPrivileges, TokenSessionReference, TokenSandBoxInert, TokenAuditPolicy, TokenOrigin, TokenElevationType, TokenLinkedToken, TokenElevation, TokenHasRestrictions, TokenAccessInformation, TokenVirtualizationAllowed, TokenVirtualizationEnabled, TokenIntegrityLevel, TokenUIAccess, TokenMandatoryPolicy, TokenLogonSid, TokenIsAppContainer, TokenCapabilities, TokenAppContainerSid, TokenAppContainerNumber, TokenUserClaimAttributes, TokenDeviceClaimAttributes, TokenRestrictedUserClaimAttributes, TokenRestrictedDeviceClaimAttributes, TokenDeviceGroups, TokenRestrictedDeviceGroups, TokenSecurityAttributes, TokenIsRestricted, TokenProcessTrustLevel, MaxTokenInfoClass } TOKEN_INFORMATION_CLASS; #define TOKEN_TOKEN_ADJUST_DEFAULT 0x0080 #define TOKEN_ADJUST_GROUPS 0x0040 #define TOKEN_ADJUST_PRIVILEGES 0x0020 #define TOKEN_ADJUST_SESSIONID 0x0100 #define TOKEN_ASSIGN_PRIMARY 0x0001 #define TOKEN_DUPLICATE 0x0002 #define TOKEN_EXECUTE STANDARD_RIGHTS_EXECUTE #define TOKEN_IMPERSONATE 0x0004 #define TOKEN_QUERY 0x0008 #define TOKEN_QUERY_SOURCE 0x0010 #define TOKEN_ADJUST_DEFAULT 0x0080 #define TOKEN_READ (STANDARD_RIGHTS_READ|TOKEN_QUERY) #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | \ TOKEN_ADJUST_PRIVILEGES | \ TOKEN_ADJUST_GROUPS | \ TOKEN_ADJUST_DEFAULT ) #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ TOKEN_ASSIGN_PRIMARY | \ TOKEN_DUPLICATE | \ TOKEN_IMPERSONATE | \ TOKEN_QUERY | \ TOKEN_QUERY_SOURCE | \ TOKEN_ADJUST_PRIVILEGES | \ TOKEN_ADJUST_GROUPS | \ TOKEN_ADJUST_SESSIONID | \ TOKEN_ADJUST_DEFAULT ) #ifndef _SECURITY_DEFINED #define _SECURITY_DEFINED typedef DWORD ACCESS_MASK, *PACCESS_MASK; typedef struct _GENERIC_MAPPING { ACCESS_MASK GenericRead; ACCESS_MASK GenericWrite; ACCESS_MASK GenericExecute; ACCESS_MASK GenericAll; } GENERIC_MAPPING, *PGENERIC_MAPPING; #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED #define SID_IDENTIFIER_AUTHORITY_DEFINED typedef struct { BYTE Value[6]; } SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; #endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */ #ifndef SID_DEFINED #define SID_DEFINED typedef struct _SID { BYTE Revision; BYTE SubAuthorityCount; SID_IDENTIFIER_AUTHORITY IdentifierAuthority; DWORD SubAuthority[1]; } SID,*PISID; #endif /* !defined(SID_DEFINED) */ #define SID_REVISION (1) /* Current revision */ #define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */ #define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */ #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD))) /* * ACL */ #define ACL_REVISION1 1 #define ACL_REVISION2 2 #define ACL_REVISION3 3 #define ACL_REVISION4 4 #define MIN_ACL_REVISION ACL_REVISION2 #define MAX_ACL_REVISION ACL_REVISION4 #define ACL_REVISION 2 typedef struct _ACL { BYTE AclRevision; BYTE Sbz1; WORD AclSize; WORD AceCount; WORD Sbz2; } ACL, *PACL; typedef enum _ACL_INFORMATION_CLASS { AclRevisionInformation = 1, AclSizeInformation } ACL_INFORMATION_CLASS; typedef struct _ACL_REVISION_INFORMATION { DWORD AclRevision; } ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION; typedef struct _ACL_SIZE_INFORMATION { DWORD AceCount; DWORD AclBytesInUse; DWORD AclBytesFree; } ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION; /* SECURITY_DESCRIPTOR */ #define SECURITY_DESCRIPTOR_REVISION 1 #define SECURITY_DESCRIPTOR_REVISION1 1 /* * Privilege Names */ #ifdef UNICODE #if defined(_MSC_VER) #define SE_CREATE_TOKEN_NAME L"SeCreateTokenPrivilege" #define SE_ASSIGNPRIMARYTOKEN_NAME L"SeAssignPrimaryTokenPrivilege" #define SE_LOCK_MEMORY_NAME L"SeLockMemoryPrivilege" #define SE_INCREASE_QUOTA_NAME L"SeIncreaseQuotaPrivilege" #define SE_UNSOLICITED_INPUT_NAME L"SeUnsolicitedInputPrivilege" #define SE_MACHINE_ACCOUNT_NAME L"SeMachineAccountPrivilege" #define SE_TCB_NAME L"SeTcbPrivilege" #define SE_SECURITY_NAME L"SeSecurityPrivilege" #define SE_TAKE_OWNERSHIP_NAME L"SeTakeOwnershipPrivilege" #define SE_LOAD_DRIVER_NAME L"SeLoadDriverPrivilege" #define SE_SYSTEM_PROFILE_NAME L"SeSystemProfilePrivilege" #define SE_SYSTEMTIME_NAME L"SeSystemtimePrivilege" #define SE_PROF_SINGLE_PROCESS_NAME L"SeProfileSingleProcessPrivilege" #define SE_INC_BASE_PRIORITY_NAME L"SeIncreaseBasePriorityPrivilege" #define SE_CREATE_PAGEFILE_NAME L"SeCreatePagefilePrivilege" #define SE_CREATE_PERMANENT_NAME L"SeCreatePermanentPrivilege" #define SE_BACKUP_NAME L"SeBackupPrivilege" #define SE_RESTORE_NAME L"SeRestorePrivilege" #define SE_SHUTDOWN_NAME L"SeShutdownPrivilege" #define SE_DEBUG_NAME L"SeDebugPrivilege" #define SE_AUDIT_NAME L"SeAuditPrivilege" #define SE_SYSTEM_ENVIRONMENT_NAME L"SeSystemEnvironmentPrivilege" #define SE_CHANGE_NOTIFY_NAME L"SeChangeNotifyPrivilege" #define SE_REMOTE_SHUTDOWN_NAME L"SeRemoteShutdownPrivilege" #define SE_UNDOCK_NAME L"SeUndockPrivilege" #define SE_ENABLE_DELEGATION_NAME L"SeEnableDelegationPrivilege" #define SE_MANAGE_VOLUME_NAME L"SeManageVolumePrivilege" #define SE_IMPERSONATE_NAME L"SeImpersonatePrivilege" #define SE_CREATE_GLOBAL_NAME L"SeCreateGlobalPrivilege" #elif defined(__GNUC__) #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 } #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 } #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 } #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 } #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 } #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 } #define SE_TCB_NAME (const WCHAR []){ 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 } #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 } #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 } #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 } #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 } #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 } #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 } #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 } #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 } #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 } #define SE_BACKUP_NAME (const WCHAR []){ 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 } #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 } #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 } #define SE_DEBUG_NAME (const WCHAR []){ 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 } #define SE_AUDIT_NAME (const WCHAR []){ 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 } #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 } #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 } #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 } #define SE_UNDOCK_NAME (const WCHAR []){ 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 } #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 } #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 } #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 } #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 } #else /* _MSC_VER/__GNUC__ */ static 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 }; static 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 }; static 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 }; static 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 }; static 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 }; static 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 }; static const WCHAR SE_TCB_NAME[] = { 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 }; static 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 }; static 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 }; static 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 }; static 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 }; static 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 }; static 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 }; static 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 }; static 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 }; static 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 }; static const WCHAR SE_BACKUP_NAME[] = { 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 }; static const WCHAR SE_RESTORE_NAME[] = { 'S','e','R','e','s','t','o','r','e','P','r','i','v','i','l','e','g','e',0 }; static 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 }; static const WCHAR SE_DEBUG_NAME[] = { 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 }; static const WCHAR SE_AUDIT_NAME[] = { 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 }; static 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 }; static 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 }; static 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 }; static const WCHAR SE_UNDOCK_NAME[] = { 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 }; static 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 }; static 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 }; static 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 }; static 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 }; #endif #else /* UNICODE */ #define SE_CREATE_TOKEN_NAME "SeCreateTokenPrivilege" #define SE_ASSIGNPRIMARYTOKEN_NAME "SeAssignPrimaryTokenPrivilege" #define SE_LOCK_MEMORY_NAME "SeLockMemoryPrivilege" #define SE_INCREASE_QUOTA_NAME "SeIncreaseQuotaPrivilege" #define SE_UNSOLICITED_INPUT_NAME "SeUnsolicitedInputPrivilege" #define SE_MACHINE_ACCOUNT_NAME "SeMachineAccountPrivilege" #define SE_TCB_NAME "SeTcbPrivilege" #define SE_SECURITY_NAME "SeSecurityPrivilege" #define SE_TAKE_OWNERSHIP_NAME "SeTakeOwnershipPrivilege" #define SE_LOAD_DRIVER_NAME "SeLoadDriverPrivilege" #define SE_SYSTEM_PROFILE_NAME "SeSystemProfilePrivilege" #define SE_SYSTEMTIME_NAME "SeSystemtimePrivilege" #define SE_PROF_SINGLE_PROCESS_NAME "SeProfileSingleProcessPrivilege" #define SE_INC_BASE_PRIORITY_NAME "SeIncreaseBasePriorityPrivilege" #define SE_CREATE_PAGEFILE_NAME "SeCreatePagefilePrivilege" #define SE_CREATE_PERMANENT_NAME "SeCreatePermanentPrivilege" #define SE_BACKUP_NAME "SeBackupPrivilege" #define SE_RESTORE_NAME "SeRestorePrivilege" #define SE_SHUTDOWN_NAME "SeShutdownPrivilege" #define SE_DEBUG_NAME "SeDebugPrivilege" #define SE_AUDIT_NAME "SeAuditPrivilege" #define SE_SYSTEM_ENVIRONMENT_NAME "SeSystemEnvironmentPrivilege" #define SE_CHANGE_NOTIFY_NAME "SeChangeNotifyPrivilege" #define SE_REMOTE_SHUTDOWN_NAME "SeRemoteShutdownPrivilege" #define SE_UNDOCK_NAME "SeUndockPrivilege" #define SE_ENABLE_DELEGATION_NAME "SeEnableDelegationPrivilege" #define SE_MANAGE_VOLUME_NAME "SeManageVolumePrivilege" #define SE_IMPERSONATE_NAME "SeImpersonatePrivilege" #define SE_CREATE_GLOBAL_NAME "SeCreateGlobalPrivilege" #endif #define SE_GROUP_MANDATORY 0x00000001 #define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002 #define SE_GROUP_ENABLED 0x00000004 #define SE_GROUP_OWNER 0x00000008 #define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010 #define SE_GROUP_INTEGRITY 0x00000020 #define SE_GROUP_INTEGRITY_ENABLED 0x00000040 #define SE_GROUP_LOGON_ID 0xC0000000 #define SE_GROUP_RESOURCE 0x20000000 #define SE_GROUP_VALID_ATTRIBUTES 0xE000007F #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001 #define SE_PRIVILEGE_ENABLED 0x00000002 #define SE_PRIVILEGE_REMOVED 0x00000004 #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000 #define PRIVILEGE_SET_ALL_NECESSARY 1 #define SE_OWNER_DEFAULTED 0x00000001 #define SE_GROUP_DEFAULTED 0x00000002 #define SE_DACL_PRESENT 0x00000004 #define SE_DACL_DEFAULTED 0x00000008 #define SE_SACL_PRESENT 0x00000010 #define SE_SACL_DEFAULTED 0x00000020 #define SE_DACL_AUTO_INHERIT_REQ 0x00000100 #define SE_SACL_AUTO_INHERIT_REQ 0x00000200 #define SE_DACL_AUTO_INHERITED 0x00000400 #define SE_SACL_AUTO_INHERITED 0x00000800 #define SE_DACL_PROTECTED 0x00001000 #define SE_SACL_PROTECTED 0x00002000 #define SE_RM_CONTROL_VALID 0x00004000 #define SE_SELF_RELATIVE 0x00008000 typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION; typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; /* The security descriptor structure */ typedef struct { BYTE Revision; BYTE Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; DWORD Owner; DWORD Group; DWORD Sacl; DWORD Dacl; } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE; typedef struct { BYTE Revision; BYTE Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; PSID Owner; PSID Group; PACL Sacl; PACL Dacl; } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR; #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR)) #endif /* _SECURITY_DEFINED */ /* * SID_AND_ATTRIBUTES */ typedef struct _SID_AND_ATTRIBUTES { PSID Sid; DWORD Attributes; } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES; /* security entities */ #define SECURITY_NULL_RID __MSABI_LONG(0x00000000) #define SECURITY_WORLD_RID __MSABI_LONG(0x00000000) #define SECURITY_LOCAL_RID __MSABI_LONG(0X00000000) #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0} /* S-1-1 */ #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1} /* S-1-2 */ #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2} /* S-1-3 */ #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3} #define SECURITY_CREATOR_OWNER_RID __MSABI_LONG(0x00000000) #define SECURITY_CREATOR_GROUP_RID __MSABI_LONG(0x00000001) #define SECURITY_CREATOR_OWNER_SERVER_RID __MSABI_LONG(0x00000002) #define SECURITY_CREATOR_GROUP_SERVER_RID __MSABI_LONG(0x00000003) /* S-1-4 */ #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4} /* S-1-5 */ #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5} #define SECURITY_DIALUP_RID __MSABI_LONG(0x00000001) #define SECURITY_NETWORK_RID __MSABI_LONG(0x00000002) #define SECURITY_BATCH_RID __MSABI_LONG(0x00000003) #define SECURITY_INTERACTIVE_RID __MSABI_LONG(0x00000004) #define SECURITY_LOGON_IDS_RID __MSABI_LONG(0x00000005) #define SECURITY_SERVICE_RID __MSABI_LONG(0x00000006) #define SECURITY_ANONYMOUS_LOGON_RID __MSABI_LONG(0x00000007) #define SECURITY_PROXY_RID __MSABI_LONG(0x00000008) #define SECURITY_ENTERPRISE_CONTROLLERS_RID __MSABI_LONG(0x00000009) #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID #define SECURITY_PRINCIPAL_SELF_RID __MSABI_LONG(0x0000000A) #define SECURITY_AUTHENTICATED_USER_RID __MSABI_LONG(0x0000000B) #define SECURITY_RESTRICTED_CODE_RID __MSABI_LONG(0x0000000C) #define SECURITY_TERMINAL_SERVER_RID __MSABI_LONG(0x0000000D) #define SECURITY_REMOTE_LOGON_RID __MSABI_LONG(0x0000000E) #define SECURITY_THIS_ORGANIZATION_RID __MSABI_LONG(0x0000000F) #define SECURITY_LOCAL_SYSTEM_RID __MSABI_LONG(0x00000012) #define SECURITY_LOCAL_SERVICE_RID __MSABI_LONG(0x00000013) #define SECURITY_NETWORK_SERVICE_RID __MSABI_LONG(0x00000014) #define SECURITY_NT_NON_UNIQUE __MSABI_LONG(0x00000015) #define SECURITY_BUILTIN_DOMAIN_RID __MSABI_LONG(0x00000020) #define SECURITY_PACKAGE_BASE_RID __MSABI_LONG(0x00000040) #define SECURITY_PACKAGE_NTLM_RID __MSABI_LONG(0x0000000A) #define SECURITY_PACKAGE_SCHANNEL_RID __MSABI_LONG(0x0000000E) #define SECURITY_PACKAGE_DIGEST_RID __MSABI_LONG(0x00000015) #define SECURITY_MAX_ALWAYS_FILTERED __MSABI_LONG(0x000003E7) #define SECURITY_MIN_NEVER_FILTERED __MSABI_LONG(0x000003E8) #define SECURITY_OTHER_ORGANIZATION_RID __MSABI_LONG(0x000003E8) #define FOREST_USER_RID_MAX __MSABI_LONG(0x000001F3) #define DOMAIN_USER_RID_ADMIN __MSABI_LONG(0x000001F4) #define DOMAIN_USER_RID_GUEST __MSABI_LONG(0x000001F5) #define DOMAIN_USER_RID_KRBTGT __MSABI_LONG(0x000001F6) #define DOMAIN_USER_RID_MAX __MSABI_LONG(0x000003E7) #define DOMAIN_GROUP_RID_ADMINS __MSABI_LONG(0x00000200) #define DOMAIN_GROUP_RID_USERS __MSABI_LONG(0x00000201) #define DOMAIN_GROUP_RID_GUESTS __MSABI_LONG(0x00000202) #define DOMAIN_GROUP_RID_COMPUTERS __MSABI_LONG(0x00000203) #define DOMAIN_GROUP_RID_CONTROLLERS __MSABI_LONG(0x00000204) #define DOMAIN_GROUP_RID_CERT_ADMINS __MSABI_LONG(0x00000205) #define DOMAIN_GROUP_RID_SCHEMA_ADMINS __MSABI_LONG(0x00000206) #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS __MSABI_LONG(0x00000207) #define DOMAIN_GROUP_RID_POLICY_ADMINS __MSABI_LONG(0x00000208) #define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15} #define SECURITY_APP_PACKAGE_BASE_RID __MSABI_LONG(0x000000002) #define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000002) #define SECURITY_APP_PACKAGE_RID_COUNT __MSABI_LONG(0x000000008) #define SECURITY_CAPABILITY_BASE_RID __MSABI_LONG(0x000000003) #define SECURITY_CAPABILITY_APP_RID __MSABI_LONG(0x000000400) #define SECURITY_BUILTIN_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000002) #define SECURITY_CAPABILITY_RID_COUNT __MSABI_LONG(0x000000005) #define SECURITY_PARENT_PACKAGE_RID_COUNT SECURITY_APP_PACKAGE_RID_COUNT #define SECURITY_CHILD_PACKAGE_RID_COUNT __MSABI_LONG(0x00000000c) #define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE __MSABI_LONG(0x000000001) #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16} #define SECURITY_MANDATORY_UNTRUSTED_RID __MSABI_LONG(0x00000000) #define SECURITY_MANDATORY_LOW_RID __MSABI_LONG(0x00001000) #define SECURITY_MANDATORY_MEDIUM_RID __MSABI_LONG(0x00002000) #define SECURITY_MANDATORY_HIGH_RID __MSABI_LONG(0x00003000) #define SECURITY_MANDATORY_SYSTEM_RID __MSABI_LONG(0x00004000) #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID __MSABI_LONG(0x00005000) #define DOMAIN_ALIAS_RID_ADMINS __MSABI_LONG(0x00000220) #define DOMAIN_ALIAS_RID_USERS __MSABI_LONG(0x00000221) #define DOMAIN_ALIAS_RID_GUESTS __MSABI_LONG(0x00000222) #define DOMAIN_ALIAS_RID_POWER_USERS __MSABI_LONG(0x00000223) #define DOMAIN_ALIAS_RID_ACCOUNT_OPS __MSABI_LONG(0x00000224) #define DOMAIN_ALIAS_RID_SYSTEM_OPS __MSABI_LONG(0x00000225) #define DOMAIN_ALIAS_RID_PRINT_OPS __MSABI_LONG(0x00000226) #define DOMAIN_ALIAS_RID_BACKUP_OPS __MSABI_LONG(0x00000227) #define DOMAIN_ALIAS_RID_REPLICATOR __MSABI_LONG(0x00000228) #define DOMAIN_ALIAS_RID_RAS_SERVERS __MSABI_LONG(0x00000229) #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS __MSABI_LONG(0x0000022A) #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS __MSABI_LONG(0x0000022B) #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS __MSABI_LONG(0x0000022C) #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS __MSABI_LONG(0x0000022D) #define DOMAIN_ALIAS_RID_MONITORING_USERS __MSABI_LONG(0x0000022E) #define DOMAIN_ALIAS_RID_LOGGING_USERS __MSABI_LONG(0x0000022F) #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS __MSABI_LONG(0x00000230) #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS __MSABI_LONG(0x00000231) #define DOMAIN_ALIAS_RID_DCOM_USERS __MSABI_LONG(0x00000232) #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID #define SECURITY_PACKAGE_RID_COUNT __MSABI_LONG(2) #define SECURITY_LOGON_IDS_RID_COUNT __MSABI_LONG(3) typedef enum { WinNullSid = 0, WinWorldSid = 1, WinLocalSid = 2, WinCreatorOwnerSid = 3, WinCreatorGroupSid = 4, WinCreatorOwnerServerSid = 5, WinCreatorGroupServerSid = 6, WinNtAuthoritySid = 7, WinDialupSid = 8, WinNetworkSid = 9, WinBatchSid = 10, WinInteractiveSid = 11, WinServiceSid = 12, WinAnonymousSid = 13, WinProxySid = 14, WinEnterpriseControllersSid = 15, WinSelfSid = 16, WinAuthenticatedUserSid = 17, WinRestrictedCodeSid = 18, WinTerminalServerSid = 19, WinRemoteLogonIdSid = 20, WinLogonIdsSid = 21, WinLocalSystemSid = 22, WinLocalServiceSid = 23, WinNetworkServiceSid = 24, WinBuiltinDomainSid = 25, WinBuiltinAdministratorsSid = 26, WinBuiltinUsersSid = 27, WinBuiltinGuestsSid = 28, WinBuiltinPowerUsersSid = 29, WinBuiltinAccountOperatorsSid = 30, WinBuiltinSystemOperatorsSid = 31, WinBuiltinPrintOperatorsSid = 32, WinBuiltinBackupOperatorsSid = 33, WinBuiltinReplicatorSid = 34, WinBuiltinPreWindows2000CompatibleAccessSid = 35, WinBuiltinRemoteDesktopUsersSid = 36, WinBuiltinNetworkConfigurationOperatorsSid = 37, WinAccountAdministratorSid = 38, WinAccountGuestSid = 39, WinAccountKrbtgtSid = 40, WinAccountDomainAdminsSid = 41, WinAccountDomainUsersSid = 42, WinAccountDomainGuestsSid = 43, WinAccountComputersSid = 44, WinAccountControllersSid = 45, WinAccountCertAdminsSid = 46, WinAccountSchemaAdminsSid = 47, WinAccountEnterpriseAdminsSid = 48, WinAccountPolicyAdminsSid = 49, WinAccountRasAndIasServersSid = 50, WinNTLMAuthenticationSid = 51, WinDigestAuthenticationSid = 52, WinSChannelAuthenticationSid = 53, WinThisOrganizationSid = 54, WinOtherOrganizationSid = 55, WinBuiltinIncomingForestTrustBuildersSid = 56, WinBuiltinPerfMonitoringUsersSid = 57, WinBuiltinPerfLoggingUsersSid = 58, WinBuiltinAuthorizationAccessSid = 59, WinBuiltinTerminalServerLicenseServersSid = 60, WinBuiltinDCOMUsersSid = 61, WinBuiltinIUsersSid = 62, WinIUserSid = 63, WinBuiltinCryptoOperatorsSid = 64, WinUntrustedLabelSid = 65, WinLowLabelSid = 66, WinMediumLabelSid = 67, WinHighLabelSid = 68, WinSystemLabelSid = 69, WinWriteRestrictedCodeSid = 70, WinCreatorOwnerRightsSid = 71, WinCacheablePrincipalsGroupSid = 72, WinNonCacheablePrincipalsGroupSid = 73, WinEnterpriseReadonlyControllersSid = 74, WinAccountReadonlyControllersSid = 75, WinBuiltinEventLogReadersGroup = 76, WinNewEnterpriseReadonlyControllersSid = 77, WinBuiltinCertSvcDComAccessGroup = 78, WinMediumPlusLabelSid = 79, WinLocalLogonSid = 80, WinConsoleLogonSid = 81, WinThisOrganizationCertificateSid = 82, WinApplicationPackageAuthoritySid = 83, WinBuiltinAnyPackageSid = 84, WinCapabilityInternetClientSid = 85, WinCapabilityInternetClientServerSid = 86, WinCapabilityPrivateNetworkClientServerSid = 87, WinCapabilityPicturesLibrarySid = 88, WinCapabilityVideosLibrarySid = 89, WinCapabilityMusicLibrarySid = 90, WinCapabilityDocumentsLibrarySid = 91, WinCapabilitySharedUserCertificatesSid = 92, WinCapabilityEnterpriseAuthenticationSid = 93, WinCapabilityRemovableStorageSid = 94, WinBuiltinRDSRemoteAccessServersSid = 95, WinBuiltinRDSEndpointServersSid = 96, WinBuiltinRDSManagementServersSid = 97, WinUserModeDriversSid = 98, WinBuiltinHyperVAdminsSid = 99, WinAccountCloneableControllersSid = 100, WinBuiltinAccessControlAssistanceOperatorsSid = 101, WinBuiltinRemoteManagementUsersSid = 102, WinAuthenticationAuthorityAssertedSid = 103, WinAuthenticationServiceAssertedSid = 104, WinLocalAccountSid = 105, WinLocalAccountAndAdministratorSid = 106, WinAccountProtectedUsersSid = 107, } WELL_KNOWN_SID_TYPE; /* * TOKEN_USER */ typedef struct _TOKEN_USER { SID_AND_ATTRIBUTES User; } TOKEN_USER, *PTOKEN_USER; /* * TOKEN_GROUPS */ typedef struct _TOKEN_GROUPS { DWORD GroupCount; SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; } TOKEN_GROUPS, *PTOKEN_GROUPS; /* * LUID_AND_ATTRIBUTES */ typedef union _LARGE_INTEGER { struct { #ifdef WORDS_BIGENDIAN LONG HighPart; DWORD LowPart; #else DWORD LowPart; LONG HighPart; #endif } u; #ifndef NONAMELESSSTRUCT struct { #ifdef WORDS_BIGENDIAN LONG HighPart; DWORD LowPart; #else DWORD LowPart; LONG HighPart; #endif }; #endif LONGLONG QuadPart; } LARGE_INTEGER, *PLARGE_INTEGER; typedef union _ULARGE_INTEGER { struct { #ifdef WORDS_BIGENDIAN DWORD HighPart; DWORD LowPart; #else DWORD LowPart; DWORD HighPart; #endif } u; #ifndef NONAMELESSSTRUCT struct { #ifdef WORDS_BIGENDIAN DWORD HighPart; DWORD LowPart; #else DWORD LowPart; DWORD HighPart; #endif }; #endif ULONGLONG QuadPart; } ULARGE_INTEGER, *PULARGE_INTEGER; /* * Locally Unique Identifier */ typedef struct _LUID { DWORD LowPart; LONG HighPart; } LUID, *PLUID; #include typedef struct _LUID_AND_ATTRIBUTES { LUID Luid; DWORD Attributes; } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES; #include /* * PRIVILEGE_SET */ typedef struct _PRIVILEGE_SET { DWORD PrivilegeCount; DWORD Control; LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY]; } PRIVILEGE_SET, *PPRIVILEGE_SET; /* * TOKEN_PRIVILEGES */ typedef struct _TOKEN_PRIVILEGES { DWORD PrivilegeCount; LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; /* * TOKEN_OWNER */ typedef struct _TOKEN_OWNER { PSID Owner; } TOKEN_OWNER, *PTOKEN_OWNER; /* * TOKEN_PRIMARY_GROUP */ typedef struct _TOKEN_PRIMARY_GROUP { PSID PrimaryGroup; } TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP; /* * TOKEN_DEFAULT_DACL */ typedef struct _TOKEN_DEFAULT_DACL { PACL DefaultDacl; } TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL; /* * TOKEN_SOURCE */ #define TOKEN_SOURCE_LENGTH 8 typedef struct _TOKEN_SOURCE { char SourceName[TOKEN_SOURCE_LENGTH]; LUID SourceIdentifier; } TOKEN_SOURCE, *PTOKEN_SOURCE; /* * TOKEN_TYPE */ typedef enum tagTOKEN_TYPE { TokenPrimary = 1, TokenImpersonation } TOKEN_TYPE; /* * SECURITY_IMPERSONATION_LEVEL */ typedef enum _SECURITY_IMPERSONATION_LEVEL { SecurityAnonymous, SecurityIdentification, SecurityImpersonation, SecurityDelegation } SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL; #define SECURITY_DYNAMIC_TRACKING (TRUE) #define SECURITY_STATIC_TRACKING (FALSE) typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, * PSECURITY_CONTEXT_TRACKING_MODE; /* * Quality of Service */ typedef struct _SECURITY_QUALITY_OF_SERVICE { DWORD Length; SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; BOOLEAN EffectiveOnly; } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE; /* * TOKEN_STATISTICS */ #include typedef struct _TOKEN_STATISTICS { LUID TokenId; LUID AuthenticationId; LARGE_INTEGER ExpirationTime; TOKEN_TYPE TokenType; SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; DWORD DynamicCharged; DWORD DynamicAvailable; DWORD GroupCount; DWORD PrivilegeCount; LUID ModifiedId; } TOKEN_STATISTICS; #include typedef struct _TOKEN_GROUPS_AND_PRIVILEGES { DWORD SidCount; DWORD SidLength; PSID_AND_ATTRIBUTES Sids; DWORD RestrictedSidCount; DWORD RestrictedSidLength; PSID_AND_ATTRIBUTES RestrictedSids; DWORD PrivilegeCount; DWORD PrivilegeLength; PLUID_AND_ATTRIBUTES Privileges; LUID AuthenticationId; } TOKEN_GROUPS_AND_PRIVILEGES, * PTOKEN_GROUPS_AND_PRIVILEGES; typedef struct _TOKEN_ORIGIN { LUID OriginatingLogonSession; } TOKEN_ORIGIN, * PTOKEN_ORIGIN; typedef struct _TOKEN_LINKED_TOKEN { HANDLE LinkedToken; } TOKEN_LINKED_TOKEN, * PTOKEN_LINKED_TOKEN; typedef struct _TOKEN_ELEVATION { DWORD TokenIsElevated; } TOKEN_ELEVATION, * PTOKEN_ELEVATION; typedef struct _TOKEN_MANDATORY_LABEL { SID_AND_ATTRIBUTES Label; } TOKEN_MANDATORY_LABEL, * PTOKEN_MANDATORY_LABEL; typedef struct _TOKEN_APPCONTAINER_INFORMATION { PSID TokenAppContainer; } TOKEN_APPCONTAINER_INFORMATION, * PTOKEN_APPCONTAINER_INFORMATION; /* * ACLs of NT */ /* ACEs, directly starting after an ACL */ typedef struct _ACE_HEADER { BYTE AceType; BYTE AceFlags; WORD AceSize; } ACE_HEADER,*PACE_HEADER; /* AceType */ #define ACCESS_ALLOWED_ACE_TYPE 0 #define ACCESS_DENIED_ACE_TYPE 1 #define SYSTEM_AUDIT_ACE_TYPE 2 #define SYSTEM_ALARM_ACE_TYPE 3 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11 /* inherit AceFlags */ #define OBJECT_INHERIT_ACE 0x01 #define CONTAINER_INHERIT_ACE 0x02 #define NO_PROPAGATE_INHERIT_ACE 0x04 #define INHERIT_ONLY_ACE 0x08 #define INHERITED_ACE 0x10 #define VALID_INHERIT_FLAGS 0x1F /* AceFlags mask for what events we (should) audit */ #define SUCCESSFUL_ACCESS_ACE_FLAG 0x40 #define FAILED_ACCESS_ACE_FLAG 0x80 /* different ACEs depending on AceType * SidStart marks the begin of a SID * so the thing finally looks like this: * 0: ACE_HEADER * 4: ACCESS_MASK * 8... : SID */ typedef struct _ACCESS_ALLOWED_ACE { ACE_HEADER Header; DWORD Mask; DWORD SidStart; } ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE; typedef struct _ACCESS_DENIED_ACE { ACE_HEADER Header; DWORD Mask; DWORD SidStart; } ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE; typedef struct _SYSTEM_AUDIT_ACE { ACE_HEADER Header; DWORD Mask; DWORD SidStart; } SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE; typedef struct _SYSTEM_ALARM_ACE { ACE_HEADER Header; DWORD Mask; DWORD SidStart; } SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE; typedef struct _SYSTEM_MANDATORY_LABEL_ACE { ACE_HEADER Header; ACCESS_MASK Mask; DWORD SidStart; } SYSTEM_MANDATORY_LABEL_ACE,*PSYSTEM_MANDATORY_LABEL_ACE; #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4 typedef enum tagSID_NAME_USE { SidTypeUser = 1, SidTypeGroup, SidTypeDomain, SidTypeAlias, SidTypeWellKnownGroup, SidTypeDeletedAccount, SidTypeInvalid, SidTypeUnknown } SID_NAME_USE,*PSID_NAME_USE; #define ACE_OBJECT_TYPE_PRESENT 0x1 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2 /* Access rights */ /* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */ #undef DELETE #define DELETE 0x00010000 #define READ_CONTROL 0x00020000 #define WRITE_DAC 0x00040000 #define WRITE_OWNER 0x00080000 #define SYNCHRONIZE 0x00100000 #define STANDARD_RIGHTS_REQUIRED 0x000f0000 #define STANDARD_RIGHTS_READ READ_CONTROL #define STANDARD_RIGHTS_WRITE READ_CONTROL #define STANDARD_RIGHTS_EXECUTE READ_CONTROL #define STANDARD_RIGHTS_ALL 0x001f0000 #define SPECIFIC_RIGHTS_ALL 0x0000ffff #define GENERIC_READ 0x80000000 #define GENERIC_WRITE 0x40000000 #define GENERIC_EXECUTE 0x20000000 #define GENERIC_ALL 0x10000000 #define MAXIMUM_ALLOWED 0x02000000 #define ACCESS_SYSTEM_SECURITY 0x01000000 #define EVENT_QUERY_STATE 0x0001 #define EVENT_MODIFY_STATE 0x0002 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) #define SEMAPHORE_QUERY_STATE 0x0001 #define SEMAPHORE_MODIFY_STATE 0x0002 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) #define MUTANT_QUERY_STATE 0x0001 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE) #define JOB_OBJECT_ASSIGN_PROCESS 0x0001 #define JOB_OBJECT_SET_ATTRIBUTES 0x0002 #define JOB_OBJECT_QUERY 0x0004 #define JOB_OBJECT_TERMINATE 0x0008 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1f) #define TIMER_QUERY_STATE 0x0001 #define TIMER_MODIFY_STATE 0x0002 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) #define PROCESS_TERMINATE 0x0001 #define PROCESS_CREATE_THREAD 0x0002 #define PROCESS_VM_OPERATION 0x0008 #define PROCESS_VM_READ 0x0010 #define PROCESS_VM_WRITE 0x0020 #define PROCESS_DUP_HANDLE 0x0040 #define PROCESS_CREATE_PROCESS 0x0080 #define PROCESS_SET_QUOTA 0x0100 #define PROCESS_SET_INFORMATION 0x0200 #define PROCESS_QUERY_INFORMATION 0x0400 #define PROCESS_SUSPEND_RESUME 0x0800 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000 #define PROCESS_SET_LIMITED_INFORMATION 0x2000 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff) #define THREAD_TERMINATE 0x0001 #define THREAD_SUSPEND_RESUME 0x0002 #define THREAD_GET_CONTEXT 0x0008 #define THREAD_SET_CONTEXT 0x0010 #define THREAD_SET_INFORMATION 0x0020 #define THREAD_QUERY_INFORMATION 0x0040 #define THREAD_SET_THREAD_TOKEN 0x0080 #define THREAD_IMPERSONATE 0x0100 #define THREAD_DIRECT_IMPERSONATION 0x0200 #define THREAD_SET_LIMITED_INFORMATION 0x0400 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800 #define THREAD_RESUME 0x1000 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff) #define THREAD_BASE_PRIORITY_LOWRT 15 #define THREAD_BASE_PRIORITY_MAX 2 #define THREAD_BASE_PRIORITY_MIN -2 #define THREAD_BASE_PRIORITY_IDLE -15 typedef struct _QUOTA_LIMITS { SIZE_T PagedPoolLimit; SIZE_T NonPagedPoolLimit; SIZE_T MinimumWorkingSetSize; SIZE_T MaximumWorkingSetSize; SIZE_T PagefileLimit; LARGE_INTEGER TimeLimit; } QUOTA_LIMITS, *PQUOTA_LIMITS; #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 typedef struct _QUOTA_LIMITS_EX { SIZE_T PagedPoolLimit; SIZE_T NonPagedPoolLimit; SIZE_T MinimumWorkingSetSize; SIZE_T MaximumWorkingSetSize; SIZE_T PagefileLimit; LARGE_INTEGER TimeLimit; SIZE_T Reserved1; SIZE_T Reserved2; SIZE_T Reserved3; SIZE_T Reserved4; DWORD Flags; DWORD Reserved5; } QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX; #define SECTION_QUERY 0x0001 #define SECTION_MAP_WRITE 0x0002 #define SECTION_MAP_READ 0x0004 #define SECTION_MAP_EXECUTE 0x0008 #define SECTION_EXTEND_SIZE 0x0010 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x01f) #define FILE_READ_DATA 0x0001 /* file & pipe */ #define FILE_LIST_DIRECTORY 0x0001 /* directory */ #define FILE_WRITE_DATA 0x0002 /* file & pipe */ #define FILE_ADD_FILE 0x0002 /* directory */ #define FILE_APPEND_DATA 0x0004 /* file */ #define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */ #define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */ #define FILE_READ_EA 0x0008 /* file & directory */ #define FILE_READ_PROPERTIES FILE_READ_EA #define FILE_WRITE_EA 0x0010 /* file & directory */ #define FILE_WRITE_PROPERTIES FILE_WRITE_EA #define FILE_EXECUTE 0x0020 /* file */ #define FILE_TRAVERSE 0x0020 /* directory */ #define FILE_DELETE_CHILD 0x0040 /* directory */ #define FILE_READ_ATTRIBUTES 0x0080 /* all */ #define FILE_WRITE_ATTRIBUTES 0x0100 /* all */ #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff) #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \ FILE_READ_ATTRIBUTES | FILE_READ_EA | \ SYNCHRONIZE) #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \ FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \ FILE_APPEND_DATA | SYNCHRONIZE) #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \ FILE_READ_ATTRIBUTES | SYNCHRONIZE) #define DUPLICATE_CLOSE_SOURCE 0x00000001 #define DUPLICATE_SAME_ACCESS 0x00000002 /* File attribute flags */ #define FILE_SHARE_READ 0x00000001 #define FILE_SHARE_WRITE 0x00000002 #define FILE_SHARE_DELETE 0x00000004 #define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 #define FILE_ATTRIBUTE_DEVICE 0x00000040 #define FILE_ATTRIBUTE_NORMAL 0x00000080 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000 #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000 #define FILE_ATTRIBUTE_EA 0x00040000 /* File notification flags */ #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 #define FILE_NOTIFY_CHANGE_NAME 0x00000003 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040 #define FILE_NOTIFY_CHANGE_EA 0x00000080 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800 #define FILE_ACTION_ADDED 0x00000001 #define FILE_ACTION_REMOVED 0x00000002 #define FILE_ACTION_MODIFIED 0x00000003 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 #define FILE_ACTION_ADDED_STREAM 0x00000006 #define FILE_ACTION_REMOVED_STREAM 0x00000007 #define FILE_ACTION_MODIFIED_STREAM 0x00000008 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000a #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000b #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 #define FILE_CASE_PRESERVED_NAMES 0x00000002 #define FILE_UNICODE_ON_DISK 0x00000004 #define FILE_PERSISTENT_ACLS 0x00000008 #define FILE_FILE_COMPRESSION 0x00000010 #define FILE_VOLUME_QUOTAS 0x00000020 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 #define FILE_VOLUME_IS_COMPRESSED 0x00008000 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000 #define FILE_SUPPORTS_ENCRYPTION 0x00020000 #define FILE_NAMED_STREAMS 0x00040000 #define FILE_READ_ONLY_VOLUME 0x00080000 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000 #define FILE_SUPPORTS_HARD_LINKS 0x00400000 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000 #define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000 #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 #define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* File alignments (NT) */ #define FILE_BYTE_ALIGNMENT 0x00000000 #define FILE_WORD_ALIGNMENT 0x00000001 #define FILE_LONG_ALIGNMENT 0x00000003 #define FILE_QUAD_ALIGNMENT 0x00000007 #define FILE_OCTA_ALIGNMENT 0x0000000f #define FILE_32_BYTE_ALIGNMENT 0x0000001f #define FILE_64_BYTE_ALIGNMENT 0x0000003f #define FILE_128_BYTE_ALIGNMENT 0x0000007f #define FILE_256_BYTE_ALIGNMENT 0x000000ff #define FILE_512_BYTE_ALIGNMENT 0x000001ff #define COMPRESSION_FORMAT_NONE 0 #define COMPRESSION_FORMAT_DEFAULT 1 #define COMPRESSION_FORMAT_LZNT1 2 #define COMPRESSION_ENGINE_STANDARD 0 #define COMPRESSION_ENGINE_MAXIMUM 256 #define MAILSLOT_NO_MESSAGE ((DWORD)-1) #define MAILSLOT_WAIT_FOREVER ((DWORD)-1) #define REG_NONE 0 /* no type */ #define REG_SZ 1 /* string type (ASCII) */ #define REG_EXPAND_SZ 2 /* string, includes %ENVVAR% (expanded by caller) (ASCII) */ #define REG_BINARY 3 /* binary format, callerspecific */ /* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */ #define REG_DWORD 4 /* DWORD in little endian format */ #define REG_DWORD_LITTLE_ENDIAN 4 /* DWORD in little endian format */ #define REG_DWORD_BIG_ENDIAN 5 /* DWORD in big endian format */ #define REG_LINK 6 /* symbolic link (UNICODE) */ #define REG_MULTI_SZ 7 /* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */ #define REG_RESOURCE_LIST 8 /* resource list? huh? */ #define REG_FULL_RESOURCE_DESCRIPTOR 9 /* full resource descriptor? huh? */ #define REG_RESOURCE_REQUIREMENTS_LIST 10 #define REG_QWORD 11 /* QWORD in little endian format */ #define REG_QWORD_LITTLE_ENDIAN 11 /* QWORD in little endian format */ /* ----------------------------- begin power management --------------------- */ typedef enum _LATENCY_TIME { LT_DONT_CARE, LT_LOWEST_LATENCY } LATENCY_TIME, *PLATENCY_TIME; #define DISCHARGE_POLICY_CRITICAL 0 #define DISCHARGE_POLICY_LOW 1 #define NUM_DISCHARGE_POLICIES 4 #define PO_THROTTLE_NONE 0 #define PO_THROTTLE_CONSTANT 1 #define PO_THROTTLE_DEGRADE 2 #define PO_THROTTLE_ADAPTIVE 3 typedef enum _POWER_ACTION { PowerActionNone = 0, PowerActionReserved, PowerActionSleep, PowerActionHibernate, PowerActionShutdown, PowerActionShutdownReset, PowerActionShutdownOff, PowerActionWarmEject } POWER_ACTION, *PPOWER_ACTION; typedef enum _POWER_PLATFORM_ROLE { PlatformRoleUnspecified, PlatformRoleDesktop, PlatformRoleMobile, PlatformRoleWorkstation, PlatformRoleEnterpriseServer, PlatformRoleSOHOServer, PlatformRoleAppliancePC, PlatformRolePerformanceServer, PlatformRoleSlate, PlatformRoleMaximum } POWER_PLATFORM_ROLE, *PPOWER_PLATFORM_ROLE; typedef enum _SYSTEM_POWER_STATE { PowerSystemUnspecified = 0, PowerSystemWorking = 1, PowerSystemSleeping1 = 2, PowerSystemSleeping2 = 3, PowerSystemSleeping3 = 4, PowerSystemHibernate = 5, PowerSystemShutdown = 6, PowerSystemMaximum = 7 } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE; typedef enum _DEVICE_POWER_STATE { PowerDeviceUnspecified, PowerDeviceD0, PowerDeviceD1, PowerDeviceD2, PowerDeviceD3, PowerDeviceMaximum } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE; typedef enum _POWER_INFORMATION_LEVEL { SystemPowerPolicyAc, SystemPowerPolicyDc, VerifySystemPolicyAc, VerifySystemPolicyDc, SystemPowerCapabilities, SystemBatteryState, SystemPowerStateHandler, ProcessorStateHandler, SystemPowerPolicyCurrent, AdministratorPowerPolicy, SystemReserveHiberFile, ProcessorInformation, SystemPowerInformation, ProcessorStateHandler2, LastWakeTime, LastSleepTime, SystemExecutionState, SystemPowerStateNotifyHandler, ProcessorPowerPolicyAc, ProcessorPowerPolicyDc, VerifyProcessorPowerPolicyAc, VerifyProcessorPowerPolicyDc, ProcessorPowerPolicyCurrent } POWER_INFORMATION_LEVEL; typedef struct _ADMINISTRATOR_POWER_POLICY { SYSTEM_POWER_STATE MinSleep; SYSTEM_POWER_STATE MaxSleep; ULONG MinVideoTimeout; ULONG MaxVideoTimeout; ULONG MinSpindownTimeout; ULONG MaxSpindownTimeout; } ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY; typedef struct { ULONG Granularity; ULONG Capacity; } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE; typedef struct { POWER_ACTION Action; ULONG Flags; ULONG EventCode; } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY; typedef struct _PROCESSOR_POWER_INFORMATION { ULONG Number; ULONG MaxMhz; ULONG CurrentMhz; ULONG MhzLimit; ULONG MaxIdleState; ULONG CurrentIdleState; } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION; typedef struct _PROCESSOR_POWER_POLICY_INFO { ULONG TimeCheck; ULONG DemoteLimit; ULONG PromoteLimit; UCHAR DemotePercent; UCHAR PromotePercent; UCHAR Spare[2]; ULONG AllowDemotion:1; ULONG AllowPromotion:1; ULONG Reserved:30; } PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO; typedef struct _PROCESSOR_POWER_POLICY { DWORD Revision; BYTE DynamicThrottle; BYTE Spare[3]; DWORD DisableCStates:1; DWORD Reserved:31; DWORD PolicyCount; PROCESSOR_POWER_POLICY_INFO Policy[3]; } PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY; typedef struct { BOOLEAN AcOnLine; BOOLEAN BatteryPresent; BOOLEAN Charging; BOOLEAN Discharging; BOOLEAN Spare1[4]; ULONG MaxCapacity; ULONG RemainingCapacity; ULONG Rate; ULONG EstimatedTime; ULONG DefaultAlert1; ULONG DefaultAlert2; } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE; typedef struct { BOOLEAN PowerButtonPresent; BOOLEAN SleepButtonPresent; BOOLEAN LidPresent; BOOLEAN SystemS1; BOOLEAN SystemS2; BOOLEAN SystemS3; BOOLEAN SystemS4; BOOLEAN SystemS5; BOOLEAN HiberFilePresent; BOOLEAN FullWake; BOOLEAN VideoDimPresent; BOOLEAN ApmPresent; BOOLEAN UpsPresent; BOOLEAN ThermalControl; BOOLEAN ProcessorThrottle; UCHAR ProcessorMinThrottle; UCHAR ProcessorMaxThrottle; UCHAR spare2[4]; BOOLEAN DiskSpinDown; UCHAR spare3[8]; BOOLEAN SystemBatteriesPresent; BOOLEAN BatteriesAreShortTerm; BATTERY_REPORTING_SCALE BatteryScale[3]; SYSTEM_POWER_STATE AcOnLineWake; SYSTEM_POWER_STATE SoftLidWake; SYSTEM_POWER_STATE RtcWake; SYSTEM_POWER_STATE MinDeviceWakeState; SYSTEM_POWER_STATE DefaultLowLatencyWake; } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES; typedef struct _SYSTEM_POWER_INFORMATION { ULONG MaxIdlenessAllowed; ULONG Idleness; ULONG TimeRemaining; UCHAR CoolingMode; } SYSTEM_POWER_INFORMATION, *PSYSTEM_POWER_INFORMATION; typedef struct _SYSTEM_POWER_LEVEL { BOOLEAN Enable; UCHAR Spare[3]; ULONG BatteryLevel; POWER_ACTION_POLICY PowerPolicy; SYSTEM_POWER_STATE MinSystemState; } SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL; typedef struct _SYSTEM_POWER_POLICY { ULONG Revision; POWER_ACTION_POLICY PowerButton; POWER_ACTION_POLICY SleepButton; POWER_ACTION_POLICY LidClose; SYSTEM_POWER_STATE LidOpenWake; ULONG Reserved; POWER_ACTION_POLICY Idle; ULONG IdleTimeout; UCHAR IdleSensitivity; UCHAR DynamicThrottle; UCHAR Spare2[2]; SYSTEM_POWER_STATE MinSleep; SYSTEM_POWER_STATE MaxSleep; SYSTEM_POWER_STATE ReducedLatencySleep; ULONG WinLogonFlags; ULONG Spare3; ULONG DozeS4Timeout; ULONG BroadcastCapacityResolution; SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES]; ULONG VideoTimeout; BOOLEAN VideoDimDisplay; ULONG VideoReserved[3]; ULONG SpindownTimeout; BOOLEAN OptimizeForPower; UCHAR FanThrottleTolerance; UCHAR ForcedThrottle; UCHAR MinThrottle; POWER_ACTION_POLICY OverThrottled; } SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY; typedef union _FILE_SEGMENT_ELEMENT { PVOID64 Buffer; ULONGLONG Alignment; } FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; typedef struct _FILE_NOTIFY_INFORMATION { DWORD NextEntryOffset; DWORD Action; DWORD FileNameLength; WCHAR FileName[1]; } FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION; /* ----------------------------- begin tape storage --------------------- */ #define TAPE_FIXED_PARTITIONS 0 #define TAPE_SELECT_PARTITIONS 1 #define TAPE_INITIATOR_PARTITIONS 2 #define TAPE_ERASE_SHORT 0 #define TAPE_ERASE_LONG 1 #define TAPE_LOAD 0 #define TAPE_UNLOAD 1 #define TAPE_TENSION 2 #define TAPE_LOCK 3 #define TAPE_UNLOCK 4 #define TAPE_FORMAT 5 #define TAPE_SETMARKS 0 #define TAPE_FILEMARKS 1 #define TAPE_SHORT_FILEMARKS 2 #define TAPE_LONG_FILEMARKS 3 #define TAPE_REWIND 0 #define TAPE_ABSOLUTE_BLOCK 1 #define TAPE_LOGICAL_BLOCK 2 #define TAPE_PSEUDO_LOGICAL_BLOCK 3 #define TAPE_SPACE_END_OF_DATA 4 #define TAPE_SPACE_RELATIVE_BLOCKS 5 #define TAPE_SPACE_FILEMARKS 6 #define TAPE_SPACE_SEQUENTIAL_FMKS 7 #define TAPE_SPACE_SETMARKS 8 #define TAPE_SPACE_SEQUENTIAL_SMKS 9 typedef struct _TAPE_CREATE_PARTITION { DWORD Method; DWORD Count; DWORD Size; } TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION; typedef struct _TAPE_ERASE { DWORD Type; BOOLEAN Immediate; } TAPE_ERASE, *PTAPE_ERASE; typedef struct _TAPE_PREPARE { DWORD Operation; BOOLEAN Immediate; } TAPE_PREPARE, *PTAPE_PREPARE; typedef struct _TAPE_SET_DRIVE_PARAMETERS { BOOLEAN ECC; BOOLEAN Compression; BOOLEAN DataPadding; BOOLEAN ReportSetmarks; ULONG EOTWarningZoneSize; } TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS; typedef struct _TAPE_SET_MEDIA_PARAMETERS { ULONG BlockSize; } TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS; typedef struct _TAPE_WRITE_MARKS { DWORD Type; DWORD Count; BOOLEAN Immediate; } TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS; typedef struct _TAPE_GET_POSITION { ULONG Type; ULONG Partition; ULONG OffsetLow; ULONG OffsetHigh; } TAPE_GET_POSITION, *PTAPE_GET_POSITION; typedef struct _TAPE_SET_POSITION { ULONG Method; ULONG Partition; LARGE_INTEGER Offset; BOOLEAN Immediate; } TAPE_SET_POSITION, *PTAPE_SET_POSITION; typedef struct _TAPE_GET_DRIVE_PARAMETERS { BOOLEAN ECC; BOOLEAN Compression; BOOLEAN DataPadding; BOOLEAN ReportSetmarks; DWORD DefaultBlockSize; DWORD MaximumBlockSize; DWORD MinimumBlockSize; DWORD MaximumPartitionCount; DWORD FeaturesLow; DWORD FeaturesHigh; DWORD EOTWarningZoneSize; } TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS; typedef struct _TAPE_GET_MEDIA_PARAMETERS { LARGE_INTEGER Capacity; LARGE_INTEGER Remaining; DWORD BlockSize; DWORD PartitionCount; BOOLEAN WriteProtected; } TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS; /* ----------------------------- begin registry ----------------------------- */ /* Registry security values */ #define OWNER_SECURITY_INFORMATION 0x00000001 #define GROUP_SECURITY_INFORMATION 0x00000002 #define DACL_SECURITY_INFORMATION 0x00000004 #define SACL_SECURITY_INFORMATION 0x00000008 #define LABEL_SECURITY_INFORMATION 0x00000010 #define REG_OPTION_RESERVED 0x00000000 #define REG_OPTION_NON_VOLATILE 0x00000000 #define REG_OPTION_VOLATILE 0x00000001 #define REG_OPTION_CREATE_LINK 0x00000002 #define REG_OPTION_BACKUP_RESTORE 0x00000004 /* FIXME */ #define REG_OPTION_OPEN_LINK 0x00000008 #define REG_LEGAL_OPTION (REG_OPTION_RESERVED | \ REG_OPTION_NON_VOLATILE | \ REG_OPTION_VOLATILE | \ REG_OPTION_CREATE_LINK | \ REG_OPTION_BACKUP_RESTORE | \ REG_OPTION_OPEN_LINK) #define REG_CREATED_NEW_KEY 0x00000001 #define REG_OPENED_EXISTING_KEY 0x00000002 /* For RegNotifyChangeKeyValue */ #define REG_NOTIFY_CHANGE_NAME 0x01 #define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02 #define REG_NOTIFY_CHANGE_LAST_SET 0x04 #define REG_NOTIFY_CHANGE_SECURITY 0x08 #define REG_NOTIFY_THREAD_AGNOSTIC 0x10000000 #define KEY_QUERY_VALUE 0x00000001 #define KEY_SET_VALUE 0x00000002 #define KEY_CREATE_SUB_KEY 0x00000004 #define KEY_ENUMERATE_SUB_KEYS 0x00000008 #define KEY_NOTIFY 0x00000010 #define KEY_CREATE_LINK 0x00000020 #define KEY_WOW64_64KEY 0x00000100 #define KEY_WOW64_32KEY 0x00000200 #define KEY_WOW64_RES 0x00000300 /* for RegKeyRestore flags */ #define REG_WHOLE_HIVE_VOLATILE 0x00000001 #define REG_REFRESH_HIVE 0x00000002 #define REG_NO_LAZY_FLUSH 0x00000004 #define REG_FORCE_RESTORE 0x00000008 #define KEY_READ ((STANDARD_RIGHTS_READ| \ KEY_QUERY_VALUE| \ KEY_ENUMERATE_SUB_KEYS| \ KEY_NOTIFY) \ & (~SYNCHRONIZE) \ ) #define KEY_WRITE ((STANDARD_RIGHTS_WRITE| \ KEY_SET_VALUE| \ KEY_CREATE_SUB_KEY) \ & (~SYNCHRONIZE) \ ) #define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE)) #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL| \ KEY_QUERY_VALUE| \ KEY_SET_VALUE| \ KEY_CREATE_SUB_KEY| \ KEY_ENUMERATE_SUB_KEYS| \ KEY_NOTIFY| \ KEY_CREATE_LINK) \ & (~SYNCHRONIZE) \ ) /* ------------------------------ end registry ------------------------------ */ #define EVENTLOG_SUCCESS 0x0000 #define EVENTLOG_ERROR_TYPE 0x0001 #define EVENTLOG_WARNING_TYPE 0x0002 #define EVENTLOG_INFORMATION_TYPE 0x0004 #define EVENTLOG_AUDIT_SUCCESS 0x0008 #define EVENTLOG_AUDIT_FAILURE 0x0010 #define EVENTLOG_SEQUENTIAL_READ 0x0001 #define EVENTLOG_SEEK_READ 0x0002 #define EVENTLOG_FORWARDS_READ 0x0004 #define EVENTLOG_BACKWARDS_READ 0x0008 typedef struct _EVENTLOGRECORD { DWORD Length; DWORD Reserved; DWORD RecordNumber; DWORD TimeGenerated; DWORD TimeWritten; DWORD EventID; WORD EventType; WORD NumStrings; WORD EventCategory; WORD ReservedFlags; DWORD ClosingRecordNumber; DWORD StringOffset; DWORD UserSidLength; DWORD UserSidOffset; DWORD DataLength; DWORD DataOffset; } EVENTLOGRECORD, *PEVENTLOGRECORD; #define SERVICE_BOOT_START 0x00000000 #define SERVICE_SYSTEM_START 0x00000001 #define SERVICE_AUTO_START 0x00000002 #define SERVICE_DEMAND_START 0x00000003 #define SERVICE_DISABLED 0x00000004 #define SERVICE_ERROR_IGNORE 0x00000000 #define SERVICE_ERROR_NORMAL 0x00000001 #define SERVICE_ERROR_SEVERE 0x00000002 #define SERVICE_ERROR_CRITICAL 0x00000003 /* Service types */ #define SERVICE_KERNEL_DRIVER 0x00000001 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002 #define SERVICE_ADAPTER 0x00000004 #define SERVICE_RECOGNIZER_DRIVER 0x00000008 #define SERVICE_DRIVER ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | \ SERVICE_RECOGNIZER_DRIVER ) #define SERVICE_WIN32_OWN_PROCESS 0x00000010 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS) #define SERVICE_INTERACTIVE_PROCESS 0x00000100 #define SERVICE_TYPE_ALL ( SERVICE_WIN32 | SERVICE_ADAPTER | \ SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS ) typedef enum _CM_SERVICE_NODE_TYPE { DriverType = SERVICE_KERNEL_DRIVER, FileSystemType = SERVICE_FILE_SYSTEM_DRIVER, Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS, Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS, AdapterType = SERVICE_ADAPTER, RecognizerType = SERVICE_RECOGNIZER_DRIVER } SERVICE_NODE_TYPE; typedef enum _CM_SERVICE_LOAD_TYPE { BootLoad = SERVICE_BOOT_START, SystemLoad = SERVICE_SYSTEM_START, AutoLoad = SERVICE_AUTO_START, DemandLoad = SERVICE_DEMAND_START, DisableLoad = SERVICE_DISABLED } SERVICE_LOAD_TYPE; typedef enum _CM_ERROR_CONTROL_TYPE { IgnoreError = SERVICE_ERROR_IGNORE, NormalError = SERVICE_ERROR_NORMAL, SevereError = SERVICE_ERROR_SEVERE, CriticalError = SERVICE_ERROR_CRITICAL } SERVICE_ERROR_TYPE; NTSYSAPI SIZE_T WINAPI RtlCompareMemory(const VOID*, const VOID*, SIZE_T); #define RtlEqualMemory(Destination, Source, Length) (!memcmp((Destination),(Source),(Length))) #define RtlMoveMemory(Destination, Source, Length) memmove((Destination),(Source),(Length)) #define RtlCopyMemory(Destination, Source, Length) memcpy((Destination),(Source),(Length)) #define RtlFillMemory(Destination, Length, Fill) memset((Destination),(Fill),(Length)) #define RtlZeroMemory(Destination, Length) memset((Destination),0,(Length)) static FORCEINLINE void *RtlSecureZeroMemory(void *buffer, SIZE_T length) { volatile char *ptr = (volatile char *)buffer; while (length--) *ptr++ = 0; return buffer; } #include typedef struct _OBJECT_TYPE_LIST { WORD Level; WORD Sbz; GUID *ObjectType; } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST; typedef struct _RTL_CRITICAL_SECTION_DEBUG { WORD Type; WORD CreatorBackTraceIndex; struct _RTL_CRITICAL_SECTION *CriticalSection; LIST_ENTRY ProcessLocksList; DWORD EntryCount; DWORD ContentionCount; #ifdef __WINESRC__ /* in Wine we store the name here */ DWORD_PTR Spare[8/sizeof(DWORD_PTR)]; #else DWORD Spare[ 2 ]; #endif } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG; typedef struct _RTL_CRITICAL_SECTION { PRTL_CRITICAL_SECTION_DEBUG DebugInfo; LONG LockCount; LONG RecursionCount; HANDLE OwningThread; HANDLE LockSemaphore; ULONG_PTR SpinCount; } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION; #define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x1000000 #define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x2000000 #define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x4000000 #define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xFF000000 #define RTL_CRITICAL_SECTION_FLAG_RESERVED (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & ~0x7000000) typedef struct _RTL_SRWLOCK { PVOID Ptr; } RTL_SRWLOCK, *PRTL_SRWLOCK; #define RTL_SRWLOCK_INIT {0} typedef struct _RTL_CONDITION_VARIABLE { PVOID Ptr; } RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE; #define RTL_CONDITION_VARIABLE_INIT {0} #define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1 typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN ); typedef VOID (NTAPI * PFLS_CALLBACK_FUNCTION) ( PVOID ); #define RTL_RUN_ONCE_INIT {0} typedef union _RTL_RUN_ONCE { PVOID Ptr; } RTL_RUN_ONCE, *PRTL_RUN_ONCE; #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001 #define RTL_RUN_ONCE_ASYNC 0x00000002 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004 typedef DWORD WINAPI RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE, PVOID, PVOID*); typedef RTL_RUN_ONCE_INIT_FN *PRTL_RUN_ONCE_INIT_FN; NTSYSAPI VOID WINAPI RtlRunOnceInitialize(PRTL_RUN_ONCE); NTSYSAPI DWORD WINAPI RtlRunOnceExecuteOnce(PRTL_RUN_ONCE,PRTL_RUN_ONCE_INIT_FN,PVOID,PVOID*); NTSYSAPI DWORD WINAPI RtlRunOnceBeginInitialize(PRTL_RUN_ONCE, DWORD, PVOID*); NTSYSAPI DWORD WINAPI RtlRunOnceComplete(PRTL_RUN_ONCE, DWORD, PVOID); #include typedef struct _IO_COUNTERS { ULONGLONG DECLSPEC_ALIGN(8) ReadOperationCount; ULONGLONG DECLSPEC_ALIGN(8) WriteOperationCount; ULONGLONG DECLSPEC_ALIGN(8) OtherOperationCount; ULONGLONG DECLSPEC_ALIGN(8) ReadTransferCount; ULONGLONG DECLSPEC_ALIGN(8) WriteTransferCount; ULONGLONG DECLSPEC_ALIGN(8) OtherTransferCount; } IO_COUNTERS, *PIO_COUNTERS; #include typedef struct { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; CHAR szCSDVersion[128]; } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA; typedef struct { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; WCHAR szCSDVersion[128]; } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; DECL_WINELIB_TYPE_AW(OSVERSIONINFO) DECL_WINELIB_TYPE_AW(POSVERSIONINFO) DECL_WINELIB_TYPE_AW(LPOSVERSIONINFO) typedef struct { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; CHAR szCSDVersion[128]; WORD wServicePackMajor; WORD wServicePackMinor; WORD wSuiteMask; BYTE wProductType; BYTE wReserved; } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA; typedef struct { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; WCHAR szCSDVersion[128]; WORD wServicePackMajor; WORD wServicePackMinor; WORD wSuiteMask; BYTE wProductType; BYTE wReserved; } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX) DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX) DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX) NTSYSAPI ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE); #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_))) #define VER_PLATFORM_WIN32s 0 #define VER_PLATFORM_WIN32_WINDOWS 1 #define VER_PLATFORM_WIN32_NT 2 #define VER_MINORVERSION 0x00000001 #define VER_MAJORVERSION 0x00000002 #define VER_BUILDNUMBER 0x00000004 #define VER_PLATFORMID 0x00000008 #define VER_SERVICEPACKMINOR 0x00000010 #define VER_SERVICEPACKMAJOR 0x00000020 #define VER_SUITENAME 0x00000040 #define VER_PRODUCT_TYPE 0x00000080 #define VER_NT_WORKSTATION 1 #define VER_NT_DOMAIN_CONTROLLER 2 #define VER_NT_SERVER 3 #define VER_SUITE_SMALLBUSINESS 0x00000001 #define VER_SUITE_ENTERPRISE 0x00000002 #define VER_SUITE_BACKOFFICE 0x00000004 #define VER_SUITE_COMMUNICATIONS 0x00000008 #define VER_SUITE_TERMINAL 0x00000010 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020 #define VER_SUITE_EMBEDDEDNT 0x00000040 #define VER_SUITE_DATACENTER 0x00000080 #define VER_SUITE_SINGLEUSERTS 0x00000100 #define VER_SUITE_PERSONAL 0x00000200 #define VER_SUITE_BLADE 0x00000400 #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800 #define VER_SUITE_SECURITY_APPLIANCE 0x00001000 #define VER_SUITE_STORAGE_SERVER 0x00002000 #define VER_SUITE_COMPUTE_SERVER 0x00004000 #define VER_SUITE_WH_SERVER 0x00008000 #define VER_EQUAL 1 #define VER_GREATER 2 #define VER_GREATER_EQUAL 3 #define VER_LESS 4 #define VER_LESS_EQUAL 5 #define VER_AND 6 #define VER_OR 7 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION { DWORD dwFlags; DWORD ulFormatVersion; DWORD ulAssemblyCount; DWORD ulRootManifestPathType; DWORD ulRootManifestPathChars; DWORD ulRootConfigurationPathType; DWORD ulRootConfigurationPathChars; DWORD ulAppDirPathType; DWORD ulAppDirPathChars; PCWSTR lpRootManifestPath; PCWSTR lpRootConfigurationPath; PCWSTR lpAppDirPath; } ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION; typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION { DWORD ulFlags; DWORD ulEncodedAssemblyIdentityLength; DWORD ulManifestPathType; DWORD ulManifestPathLength; LARGE_INTEGER liManifestLastWriteTime; DWORD ulPolicyPathType; DWORD ulPolicyPathLength; LARGE_INTEGER liPolicyLastWriteTime; DWORD ulMetadataSatelliteRosterIndex; DWORD ulManifestVersionMajor; DWORD ulManifestVersionMinor; DWORD ulPolicyVersionMajor; DWORD ulPolicyVersionMinor; DWORD ulAssemblyDirectoryNameLength; PCWSTR lpAssemblyEncodedAssemblyIdentity; PCWSTR lpAssemblyManifestPath; PCWSTR lpAssemblyPolicyPath; PCWSTR lpAssemblyDirectoryName; DWORD ulFileCount; } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION; typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX { DWORD ulAssemblyIndex; DWORD ulFileIndexInAssembly; } ACTIVATION_CONTEXT_QUERY_INDEX, *PACTIVATION_CONTEXT_QUERY_INDEX; typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX; typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION { DWORD ulFlags; DWORD ulFilenameLength; DWORD ulPathLength; PCWSTR lpFileName; PCWSTR lpFilePath; } ASSEMBLY_FILE_DETAILED_INFORMATION, *PASSEMBLY_FILE_DETAILED_INFORMATION; typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION; typedef enum { ACTCX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN = 0, ACTCX_COMPATIBILITY_ELEMENT_TYPE_OS } ACTCTX_COMPATIBILITY_ELEMENT_TYPE; typedef struct _COMPATIBILITY_CONTEXT_ELEMENT { GUID Id; ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type; } COMPATIBILITY_CONTEXT_ELEMENT, *PCOMPATIBILITY_CONTEXT_ELEMENT; #if !defined(__WINESRC__) && (defined(_MSC_EXTENSIONS) || ((defined(__GNUC__) && __GNUC__ >= 3))) typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION { DWORD ElementCount; COMPATIBILITY_CONTEXT_ELEMENT Elements[]; } ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION, *PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION; #endif typedef enum { ACTCTX_RUN_LEVEL_UNSPECIFIED = 0, ACTCTX_RUN_LEVEL_AS_INVOKER, ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE, ACTCTX_RUN_LEVEL_REQUIRE_ADMIN, ACTCTX_RUN_LEVEL_NUMBERS } ACTCTX_REQUESTED_RUN_LEVEL; typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION { DWORD ulFlags; ACTCTX_REQUESTED_RUN_LEVEL RunLevel; DWORD UiAccess; } ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION, *PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION; typedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION *PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION; typedef enum _ACTIVATION_CONTEXT_INFO_CLASS { ActivationContextBasicInformation = 1, ActivationContextDetailedInformation = 2, AssemblyDetailedInformationInActivationContext = 3, FileInformationInAssemblyOfAssemblyInActivationContext = 4, RunlevelInformationInActivationContext = 5, CompatibilityInformationInActivationContext = 6, ActivationContextManifestResourceName = 7, MaxActivationContextInfoClass, AssemblyDetailedInformationInActivationContxt = AssemblyDetailedInformationInActivationContext, FileInformationInAssemblyOfAssemblyInActivationContxt = FileInformationInAssemblyOfAssemblyInActivationContext } ACTIVATION_CONTEXT_INFO_CLASS; #define ACTIVATION_CONTEXT_PATH_TYPE_NONE 1 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE 2 #define ACTIVATION_CONTEXT_PATH_TYPE_URL 3 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF 4 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 8 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS 10 #define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO 11 typedef enum _JOBOBJECTINFOCLASS { JobObjectBasicAccountingInformation = 1, JobObjectBasicLimitInformation, JobObjectBasicProcessIdList, JobObjectBasicUIRestrictions, JobObjectSecurityLimitInformation, JobObjectEndOfJobTimeInformation, JobObjectAssociateCompletionPortInformation, JobObjectBasicAndIoAccountingInformation, JobObjectExtendedLimitInformation, JobObjectJobSetInformation, MaxJobObjectInfoClass } JOBOBJECTINFOCLASS; typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION { LARGE_INTEGER TotalUserTime; LARGE_INTEGER TotalKernelTime; LARGE_INTEGER ThisPeriodTotalUserTime; LARGE_INTEGER ThisPeriodTotalKernelTime; DWORD TotalPageFaultCount; DWORD TotalProcesses; DWORD ActiveProcesses; DWORD TotalTerminatedProcesses; } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION; typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION { LARGE_INTEGER PerProcessUserTimeLimit; LARGE_INTEGER PerJobUserTimeLimit; DWORD LimitFlags; SIZE_T MinimumWorkingSetSize; SIZE_T MaximumWorkingSetSize; DWORD ActiveProcessLimit; ULONG_PTR Affinity; DWORD PriorityClass; DWORD SchedulingClass; } JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION; typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST { DWORD NumberOfAssignedProcesses; DWORD NumberOfProcessIdsInList; ULONG_PTR ProcessIdList[1]; } JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST; typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS { DWORD UIRestrictionsClass; } JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS; typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION { DWORD SecurityLimitFlags; HANDLE JobToken; PTOKEN_GROUPS SidsToDisable; PTOKEN_PRIVILEGES PrivilegesToDelete; PTOKEN_GROUPS RestrictedSids; } JOBOBJECT_SECURITY_LIMIT_INFORMATION, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION; typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION { DWORD EndOfJobTimeAction; } JOBOBJECT_END_OF_JOB_TIME_INFORMATION, PJOBOBJECT_END_OF_JOB_TIME_INFORMATION; typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT { PVOID CompletionKey; HANDLE CompletionPort; } JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT; #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4 #define JOB_OBJECT_MSG_NEW_PROCESS 6 #define JOB_OBJECT_MSG_EXIT_PROCESS 7 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10 typedef struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION { JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo; IO_COUNTERS IoInfo; } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION; typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION { JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation; IO_COUNTERS IoInfo; SIZE_T ProcessMemoryLimit; SIZE_T JobMemoryLimit; SIZE_T PeakProcessMemoryUsed; SIZE_T PeakJobMemoryUsed; } JOBOBJECT_EXTENDED_LIMIT_INFORMATION, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION; #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002 #define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000 #define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000 #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP { RelationProcessorCore = 0, RelationNumaNode = 1, RelationCache = 2, RelationProcessorPackage = 3, RelationGroup = 4, RelationAll = 0xffff } LOGICAL_PROCESSOR_RELATIONSHIP; #define LTP_PC_SMT 0x1 typedef enum _PROCESSOR_CACHE_TYPE { CacheUnified, CacheInstruction, CacheData, CacheTrace } PROCESSOR_CACHE_TYPE; typedef struct _PROCESSOR_GROUP_INFO { BYTE MaximumProcessorCount; BYTE ActiveProcessorCount; BYTE Reserved[38]; KAFFINITY ActiveProcessorMask; } PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO; typedef struct _CACHE_DESCRIPTOR { BYTE Level; BYTE Associativity; WORD LineSize; DWORD Size; PROCESSOR_CACHE_TYPE Type; } CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR; typedef struct _GROUP_AFFINITY { KAFFINITY Mask; WORD Group; WORD Reserved[3]; } GROUP_AFFINITY, *PGROUP_AFFINITY; typedef struct _PROCESSOR_NUMBER { WORD Group; BYTE Number; BYTE Reserved; } PROCESSOR_NUMBER, *PPROCESSOR_NUMBER; typedef struct _PROCESSOR_RELATIONSHIP { BYTE Flags; BYTE EfficiencyClass; BYTE Reserved[20]; WORD GroupCount; GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY]; } PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP; typedef struct _NUMA_NODE_RELATIONSHIP { DWORD NodeNumber; BYTE Reserved[20]; GROUP_AFFINITY GroupMask; } NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP; typedef struct _CACHE_RELATIONSHIP { BYTE Level; BYTE Associativity; WORD LineSize; DWORD CacheSize; PROCESSOR_CACHE_TYPE Type; BYTE Reserved[20]; GROUP_AFFINITY GroupMask; } CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP; typedef struct _GROUP_RELATIONSHIP { WORD MaximumGroupCount; WORD ActiveGroupCount; BYTE Reserved[20]; PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY]; } GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP; typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION { ULONG_PTR ProcessorMask; LOGICAL_PROCESSOR_RELATIONSHIP Relationship; union { struct { BYTE Flags; } ProcessorCore; struct { DWORD NodeNumber; } NumaNode; CACHE_DESCRIPTOR Cache; ULONGLONG Reserved[2]; } DUMMYUNIONNAME; } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { LOGICAL_PROCESSOR_RELATIONSHIP Relationship; DWORD Size; union { PROCESSOR_RELATIONSHIP Processor; NUMA_NODE_RELATIONSHIP NumaNode; CACHE_RELATIONSHIP Cache; GROUP_RELATIONSHIP Group; } DUMMYUNIONNAME; } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX; /* Threadpool things */ typedef DWORD TP_VERSION,*PTP_VERSION; typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE,*PTP_CALLBACK_INSTANCE; typedef VOID (CALLBACK *PTP_SIMPLE_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID); typedef struct _TP_POOL TP_POOL,*PTP_POOL; typedef enum _TP_CALLBACK_PRIORITY { TP_CALLBACK_PRIORITY_HIGH, TP_CALLBACK_PRIORITY_NORMAL, TP_CALLBACK_PRIORITY_LOW, TP_CALLBACK_PRIORITY_INVALID, TP_CALLBACK_PRIORITY_COUNT = TP_CALLBACK_PRIORITY_INVALID } TP_CALLBACK_PRIORITY; typedef struct _TP_POOL_STACK_INFORMATION { SIZE_T StackReserve; SIZE_T StackCommit; } TP_POOL_STACK_INFORMATION,*PTP_POOL_STACK_INFORMATION; typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP,*PTP_CLEANUP_GROUP; typedef VOID (CALLBACK *PTP_CLEANUP_GROUP_CANCEL_CALLBACK)(PVOID,PVOID); typedef struct _TP_CALLBACK_ENVIRON_V1 { TP_VERSION Version; PTP_POOL Pool; PTP_CLEANUP_GROUP CleanupGroup; PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback; PVOID RaceDll; struct _ACTIVATION_CONTEXT* ActivationContext; PTP_SIMPLE_CALLBACK FinalizationCallback; union { DWORD Flags; struct { DWORD LongFunction:1; DWORD Persistent:1; DWORD Private:30; } s; } u; } TP_CALLBACK_ENVIRON_V1; typedef struct _TP_CALLBACK_ENVIRON_V3 { TP_VERSION Version; PTP_POOL Pool; PTP_CLEANUP_GROUP CleanupGroup; PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback; PVOID RaceDll; struct _ACTIVATION_CONTEXT *ActivationContext; PTP_SIMPLE_CALLBACK FinalizationCallback; union { DWORD Flags; struct { DWORD LongFunction:1; DWORD Persistent:1; DWORD Private:30; } s; } u; TP_CALLBACK_PRIORITY CallbackPriority; DWORD Size; } TP_CALLBACK_ENVIRON_V3; typedef struct _TP_WORK TP_WORK, *PTP_WORK; typedef struct _TP_TIMER TP_TIMER, *PTP_TIMER; typedef DWORD TP_WAIT_RESULT; typedef struct _TP_WAIT TP_WAIT, *PTP_WAIT; typedef struct _TP_IO TP_IO, *PTP_IO; typedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON, *PTP_CALLBACK_ENVIRON; typedef VOID (CALLBACK *PTP_WORK_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_WORK); typedef VOID (CALLBACK *PTP_TIMER_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_TIMER); typedef VOID (CALLBACK *PTP_WAIT_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_WAIT,TP_WAIT_RESULT); typedef VOID (CALLBACK *PTP_WIN32_IO_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PVOID,ULONG,ULONG_PTR,PTP_IO); NTSYSAPI BOOLEAN NTAPI RtlGetProductInfo(DWORD,DWORD,DWORD,DWORD,PDWORD); typedef enum _RTL_UMS_THREAD_INFO_CLASS { UmsThreadInvalidInfoClass, UmsThreadUserContext, UmsThreadPriority, UmsThreadAffinity, UmsThreadTeb, UmsThreadIsSuspended, UmsThreadIsTerminated, UmsThreadMaxInfoClass } RTL_UMS_THREAD_INFO_CLASS, *PRTL_UMS_THREAD_INFO_CLASS; typedef enum _RTL_UMS_SCHEDULER_REASON { UmsSchedulerStartup, UmsSchedulerThreadBlocked, UmsSchedulerThreadYield, } RTL_UMS_SCHEDULER_REASON, *PRTL_UMS_SCHEDULER_REASON; typedef void (CALLBACK *PRTL_UMS_SCHEDULER_ENTRY_POINT)(RTL_UMS_SCHEDULER_REASON,ULONG_PTR,PVOID); typedef enum _PROCESS_MITIGATION_POLICY { ProcessDEPPolicy, ProcessASLRPolicy, ProcessDynamicCodePolicy, ProcessStrictHandleCheckPolicy, ProcessSystemCallDisablePolicy, ProcessMitigationOptionsMask, ProcessExtensionPointDisablePolicy, ProcessControlFlowGuardPolicy, ProcessSignaturePolicy, ProcessFontDisablePolicy, ProcessImageLoadPolicy, ProcessSystemCallFilterPolicy, ProcessPayloadRestrictionPolicy, ProcessChildProcessPolicy, ProcessSideChannelIsolationPolicy, MaxProcessMitigationPolicy } PROCESS_MITIGATION_POLICY, *PPROCESS_MITIGATION_POLICY; #ifdef __cplusplus } #endif #endif /* _WINNT_ */ ================================================ FILE: wine/windows/winnt.rh ================================================ /* * Win32 definitions for Windows NT * * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* These are only defined for Winelib, i.e. _not_ defined for * the emulator. The reason is they depend on the UNICODE * macro which only exists in the user's code. */ #ifndef WINE_NO_UNICODE_MACROS # ifdef UNICODE # define __TEXT(string) L##string # else # define __TEXT(string) string # endif # define TEXT(string) __TEXT(string) #endif /* Language definitions */ #define LANG_NEUTRAL 0x00 #define LANG_INVARIANT 0x7f #define LANG_AFRIKAANS 0x36 #define LANG_ALBANIAN 0x1c #define LANG_ALSATIAN 0x84 #define LANG_AMHARIC 0x5e #define LANG_ARABIC 0x01 #define LANG_ARMENIAN 0x2b #define LANG_ASSAMESE 0x4d #define LANG_AZERI 0x2c #define LANG_BANGLA 0x45 #define LANG_BASHKIR 0x6d #define LANG_BASQUE 0x2d #define LANG_BELARUSIAN 0x23 #define LANG_BENGALI 0x45 #define LANG_BOSNIAN 0x1a #define LANG_BOSNIAN_NEUTRAL 0x781a #define LANG_BRETON 0x7e #define LANG_BULGARIAN 0x02 #define LANG_CATALAN 0x03 #define LANG_CHINESE 0x04 #define LANG_CHINESE_SIMPLIFIED 0x0004 #define LANG_CHINESE_TRADITIONAL 0x7c04 #define LANG_CORSICAN 0x83 #define LANG_CROATIAN 0x1a #define LANG_CZECH 0x05 #define LANG_DANISH 0x06 #define LANG_DARI 0x8c #define LANG_DIVEHI 0x65 #define LANG_DUTCH 0x13 #define LANG_ENGLISH 0x09 #define LANG_ESTONIAN 0x25 #define LANG_FAEROESE 0x38 #define LANG_FARSI LANG_PERSIAN #define LANG_FILIPINO 0x64 #define LANG_FINNISH 0x0b #define LANG_FRENCH 0x0c #define LANG_FRISIAN 0x62 #define LANG_GALICIAN 0x56 #define LANG_GEORGIAN 0x37 #define LANG_GERMAN 0x07 #define LANG_GREEK 0x08 #define LANG_GREENLANDIC 0x6f #define LANG_GUJARATI 0x47 #define LANG_HAUSA 0x68 #define LANG_HEBREW 0x0d #define LANG_HINDI 0x39 #define LANG_HUNGARIAN 0x0e #define LANG_ICELANDIC 0x0f #define LANG_IGBO 0x70 #define LANG_INDONESIAN 0x21 #define LANG_INUKTITUT 0x5d #define LANG_IRISH 0x3c #define LANG_ITALIAN 0x10 #define LANG_JAPANESE 0x11 #define LANG_KANNADA 0x4b #define LANG_KASHMIRI 0x60 #define LANG_KAZAK 0x3f #define LANG_KHMER 0x53 #define LANG_KICHE 0x86 #define LANG_KINYARWANDA 0x87 #define LANG_KONKANI 0x57 #define LANG_KOREAN 0x12 #define LANG_KYRGYZ 0x40 #define LANG_LAO 0x54 #define LANG_LATVIAN 0x26 #define LANG_LITHUANIAN 0x27 #define LANG_LOWER_SORBIAN 0x2e #define LANG_LUXEMBOURGISH 0x6e #define LANG_MACEDONIAN 0x2f #define LANG_MALAY 0x3e #define LANG_MALAYALAM 0x4c #define LANG_MALTESE 0x3a #define LANG_MANIPURI 0x58 #define LANG_MAORI 0x81 #define LANG_MAPUDUNGUN 0x7a #define LANG_MARATHI 0x4e #define LANG_MOHAWK 0x7c #define LANG_MONGOLIAN 0x50 #define LANG_NEPALI 0x61 #define LANG_NORWEGIAN 0x14 #define LANG_OCCITAN 0x82 #define LANG_ORIYA 0x48 #define LANG_PASHTO 0x63 #define LANG_PERSIAN 0x29 #define LANG_POLISH 0x15 #define LANG_PORTUGUESE 0x16 #define LANG_PUNJABI 0x46 #define LANG_QUECHUA 0x6b #define LANG_ROMANIAN 0x18 #define LANG_ROMANSH 0x17 #define LANG_RUSSIAN 0x19 #define LANG_SAMI 0x3b #define LANG_SANSKRIT 0x4f #define LANG_SCOTTISH_GAELIC 0x91 #define LANG_SERBIAN 0x1a #define LANG_SERBIAN_NEUTRAL 0x7c1a #define LANG_SINDHI 0x59 #define LANG_SINHALESE 0x5b #define LANG_SLOVAK 0x1b #define LANG_SLOVENIAN 0x24 #define LANG_SOTHO 0x6c #define LANG_SPANISH 0x0a #define LANG_SWAHILI 0x41 #define LANG_SWEDISH 0x1d #define LANG_SYRIAC 0x5a #define LANG_TAJIK 0x28 #define LANG_TAMAZIGHT 0x5f #define LANG_TAMIL 0x49 #define LANG_TATAR 0x44 #define LANG_TELUGU 0x4a #define LANG_THAI 0x1e #define LANG_TIBETAN 0x51 #define LANG_TIGRIGNA 0x73 #define LANG_TSWANA 0x32 #define LANG_TURKISH 0x1f #define LANG_TURKMEN 0x42 #define LANG_UIGHUR 0x80 #define LANG_UKRAINIAN 0x22 #define LANG_UPPER_SORBIAN 0x2e #define LANG_URDU 0x20 #define LANG_UZBEK 0x43 #define LANG_VIETNAMESE 0x2a #define LANG_WELSH 0x52 #define LANG_WOLOF 0x88 #define LANG_XHOSA 0x34 #define LANG_YAKUT 0x85 #define LANG_YI 0x78 #define LANG_YORUBA 0x6a #define LANG_ZULU 0x35 /* These are documented by the MSDN but are missing from the Windows header */ #define LANG_MALAGASY 0x8d /* FIXME: these are not defined anywhere */ #define LANG_SUTU 0x30 #define LANG_TSONGA 0x31 #define LANG_VENDA 0x33 /* non standard; keep the number high enough (but < 0xff) */ #define LANG_ESPERANTO 0x8f #define LANG_WALON 0x90 #define LANG_CORNISH 0x92 #define LANG_MANX_GAELIC 0x94 /* Sublanguage definitions */ #define SUBLANG_NEUTRAL 0x00 /* language neutral */ #define SUBLANG_DEFAULT 0x01 /* user default */ #define SUBLANG_SYS_DEFAULT 0x02 /* system default */ #define SUBLANG_CUSTOM_DEFAULT 0x03 #define SUBLANG_CUSTOM_UNSPECIFIED 0x04 #define SUBLANG_UI_CUSTOM_DEFAULT 0x05 #define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01 #define SUBLANG_ALBANIAN_ALBANIA 0x01 #define SUBLANG_ALSATIAN_FRANCE 0x01 #define SUBLANG_AMHARIC_ETHIOPIA 0x01 #define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 #define SUBLANG_ARABIC_IRAQ 0x02 #define SUBLANG_ARABIC_EGYPT 0x03 #define SUBLANG_ARABIC_LIBYA 0x04 #define SUBLANG_ARABIC_ALGERIA 0x05 #define SUBLANG_ARABIC_MOROCCO 0x06 #define SUBLANG_ARABIC_TUNISIA 0x07 #define SUBLANG_ARABIC_OMAN 0x08 #define SUBLANG_ARABIC_YEMEN 0x09 #define SUBLANG_ARABIC_SYRIA 0x0a #define SUBLANG_ARABIC_JORDAN 0x0b #define SUBLANG_ARABIC_LEBANON 0x0c #define SUBLANG_ARABIC_KUWAIT 0x0d #define SUBLANG_ARABIC_UAE 0x0e #define SUBLANG_ARABIC_BAHRAIN 0x0f #define SUBLANG_ARABIC_QATAR 0x10 #define SUBLANG_ARMENIAN_ARMENIA 0x01 #define SUBLANG_ASSAMESE_INDIA 0x01 #define SUBLANG_AZERI_LATIN 0x01 #define SUBLANG_AZERI_CYRILLIC 0x02 #define SUBLANG_BANGLA_BANGLADESH 0x02 #define SUBLANG_BANGLA_INDIA 0x01 #define SUBLANG_BASHKIR_RUSSIA 0x01 #define SUBLANG_BASQUE_BASQUE 0x01 #define SUBLANG_BELARUSIAN_BELARUS 0x01 #define SUBLANG_BENGALI_INDIA 0x01 #define SUBLANG_BENGALI_BANGLADESH 0x02 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08 #define SUBLANG_BRETON_FRANCE 0x01 #define SUBLANG_BULGARIAN_BULGARIA 0x01 #define SUBLANG_CATALAN_CATALAN 0x01 #define SUBLANG_CHINESE_TRADITIONAL 0x01 #define SUBLANG_CHINESE_SIMPLIFIED 0x02 #define SUBLANG_CHINESE_HONGKONG 0x03 #define SUBLANG_CHINESE_SINGAPORE 0x04 #define SUBLANG_CHINESE_MACAU 0x05 #define SUBLANG_CORSICAN_FRANCE 0x01 #define SUBLANG_CROATIAN_CROATIA 0x01 #define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 #define SUBLANG_CZECH_CZECH_REPUBLIC 0x01 #define SUBLANG_DANISH_DENMARK 0x01 #define SUBLANG_DARI_AFGHANISTAN 0x01 #define SUBLANG_DIVEHI_MALDIVES 0x01 #define SUBLANG_DUTCH 0x01 #define SUBLANG_DUTCH_BELGIAN 0x02 #define SUBLANG_ENGLISH_US 0x01 #define SUBLANG_ENGLISH_UK 0x02 #define SUBLANG_ENGLISH_AUS 0x03 #define SUBLANG_ENGLISH_CAN 0x04 #define SUBLANG_ENGLISH_NZ 0x05 #define SUBLANG_ENGLISH_EIRE 0x06 #define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 #define SUBLANG_ENGLISH_JAMAICA 0x08 #define SUBLANG_ENGLISH_CARIBBEAN 0x09 #define SUBLANG_ENGLISH_BELIZE 0x0a #define SUBLANG_ENGLISH_TRINIDAD 0x0b #define SUBLANG_ENGLISH_ZIMBABWE 0x0c #define SUBLANG_ENGLISH_PHILIPPINES 0x0d #define SUBLANG_ENGLISH_INDIA 0x10 #define SUBLANG_ENGLISH_MALAYSIA 0x11 #define SUBLANG_ENGLISH_SINGAPORE 0x12 #define SUBLANG_ESTONIAN_ESTONIA 0x01 #define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01 #define SUBLANG_FILIPINO_PHILIPPINES 0x01 #define SUBLANG_FINNISH_FINLAND 0x01 #define SUBLANG_FRENCH 0x01 #define SUBLANG_FRENCH_BELGIAN 0x02 #define SUBLANG_FRENCH_CANADIAN 0x03 #define SUBLANG_FRENCH_SWISS 0x04 #define SUBLANG_FRENCH_LUXEMBOURG 0x05 #define SUBLANG_FRENCH_MONACO 0x06 #define SUBLANG_FRISIAN_NETHERLANDS 0x01 #define SUBLANG_GALICIAN_GALICIAN 0x01 #define SUBLANG_GEORGIAN_GEORGIA 0x01 #define SUBLANG_GERMAN 0x01 #define SUBLANG_GERMAN_SWISS 0x02 #define SUBLANG_GERMAN_AUSTRIAN 0x03 #define SUBLANG_GERMAN_LUXEMBOURG 0x04 #define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 #define SUBLANG_GREEK_GREECE 0x01 #define SUBLANG_GREENLANDIC_GREENLAND 0x01 #define SUBLANG_GUJARATI_INDIA 0x01 #define SUBLANG_HAUSA_NIGERIA_LATIN 0x01 #define SUBLANG_HEBREW_ISRAEL 0x01 #define SUBLANG_HINDI_INDIA 0x01 #define SUBLANG_HUNGARIAN_HUNGARY 0x01 #define SUBLANG_ICELANDIC_ICELAND 0x01 #define SUBLANG_IGBO_NIGERIA 0x01 #define SUBLANG_INDONESIAN_INDONESIA 0x01 #define SUBLANG_INUKTITUT_CANADA 0x01 #define SUBLANG_INUKTITUT_CANADA_LATIN 0x02 #define SUBLANG_IRISH_IRELAND 0x02 #define SUBLANG_ITALIAN 0x01 #define SUBLANG_ITALIAN_SWISS 0x02 #define SUBLANG_JAPANESE_JAPAN 0x01 #define SUBLANG_KANNADA_INDIA 0x01 #define SUBLANG_KASHMIRI_SASIA 0x02 #define SUBLANG_KASHMIRI_INDIA 0x02 #define SUBLANG_KAZAK_KAZAKHSTAN 0x01 #define SUBLANG_KHMER_CAMBODIA 0x01 #define SUBLANG_KICHE_GUATEMALA 0x01 #define SUBLANG_KINYARWANDA_RWANDA 0X01 #define SUBLANG_KONKANI_INDIA 0x01 #define SUBLANG_KOREAN 0x01 #define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01 #define SUBLANG_LAO_LAO 0x01 #define SUBLANG_LATVIAN_LATVIA 0x01 #define SUBLANG_LITHUANIAN 0x01 #define SUBLANG_LOWER_SORBIAN_GERMANY 0x02 #define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01 #define SUBLANG_MACEDONIAN_MACEDONIA 0x01 #define SUBLANG_MALAY_MALAYSIA 0x01 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 #define SUBLANG_MALAYALAM_INDIA 0x01 #define SUBLANG_MALTESE_MALTA 0x01 #define SUBLANG_MAORI_NEW_ZEALAND 0x01 #define SUBLANG_MAPUDUNGUN_CHILE 0x01 #define SUBLANG_MARATHI_INDIA 0x01 #define SUBLANG_MOHAWK_MOHAWK 0x01 #define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01 #define SUBLANG_MONGOLIAN_PRC 0x02 #define SUBLANG_NEPALI_INDIA 0x02 #define SUBLANG_NEPALI_NEPAL 0x01 #define SUBLANG_NORWEGIAN_BOKMAL 0x01 #define SUBLANG_NORWEGIAN_NYNORSK 0x02 #define SUBLANG_OCCITAN_FRANCE 0x01 #define SUBLANG_ORIYA_INDIA 0x01 #define SUBLANG_PASHTO_AFGHANISTAN 0x01 #define SUBLANG_PERSIAN_IRAN 0x01 #define SUBLANG_POLISH_POLAND 0x01 #define SUBLANG_PORTUGUESE 0x02 #define SUBLANG_PORTUGUESE_BRAZILIAN 0x01 #define SUBLANG_PUNJABI_INDIA 0x01 #define SUBLANG_QUECHUA_BOLIVIA 0x01 #define SUBLANG_QUECHUA_ECUADOR 0x02 #define SUBLANG_QUECHUA_PERU 0x03 #define SUBLANG_ROMANIAN_ROMANIA 0x01 #define SUBLANG_ROMANSH_SWITZERLAND 0x01 #define SUBLANG_RUSSIAN_RUSSIA 0x01 #define SUBLANG_SAMI_NORTHERN_NORWAY 0x01 #define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02 #define SUBLANG_SAMI_NORTHERN_FINLAND 0x03 #define SUBLANG_SAMI_LULE_NORWAY 0x04 #define SUBLANG_SAMI_LULE_SWEDEN 0x05 #define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06 #define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07 #define SUBLANG_SAMI_SKOLT_FINLAND 0x08 #define SUBLANG_SAMI_INARI_FINLAND 0x09 #define SUBLANG_SANSKRIT_INDIA 0x01 #define SUBLANG_SCOTTISH_GAELIC 0x01 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07 #define SUBLANG_SERBIAN_CROATIA 0x01 #define SUBLANG_SERBIAN_LATIN 0x02 #define SUBLANG_SERBIAN_CYRILLIC 0x03 #define SUBLANG_SERBIAN_SERBIA_LATIN 0x09 #define SUBLANG_SERBIAN_SERBIA_CYRILLIC 0x0a #define SUBLANG_SERBIAN_MONTENEGRO_LATIN 0x0b #define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC 0x0c #define SUBLANG_SINDHI_INDIA 0x01 #define SUBLANG_SINDHI_AFGHANISTAN 0x02 #define SUBLANG_SINDHI_PAKISTAN SUBLANG_SINDHI_AFGHANISTAN #define SUBLANG_SINHALESE_SRI_LANKA 0x01 #define SUBLANG_SLOVAK_SLOVAKIA 0x01 #define SUBLANG_SLOVENIAN_SLOVENIA 0x01 #define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01 #define SUBLANG_SPANISH 0x01 #define SUBLANG_SPANISH_MEXICAN 0x02 #define SUBLANG_SPANISH_MODERN 0x03 #define SUBLANG_SPANISH_GUATEMALA 0x04 #define SUBLANG_SPANISH_COSTA_RICA 0x05 #define SUBLANG_SPANISH_PANAMA 0x06 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 #define SUBLANG_SPANISH_VENEZUELA 0x08 #define SUBLANG_SPANISH_COLOMBIA 0x09 #define SUBLANG_SPANISH_PERU 0x0a #define SUBLANG_SPANISH_ARGENTINA 0x0b #define SUBLANG_SPANISH_ECUADOR 0x0c #define SUBLANG_SPANISH_CHILE 0x0d #define SUBLANG_SPANISH_URUGUAY 0x0e #define SUBLANG_SPANISH_PARAGUAY 0x0f #define SUBLANG_SPANISH_BOLIVIA 0x10 #define SUBLANG_SPANISH_EL_SALVADOR 0x11 #define SUBLANG_SPANISH_HONDURAS 0x12 #define SUBLANG_SPANISH_NICARAGUA 0x13 #define SUBLANG_SPANISH_PUERTO_RICO 0x14 #define SUBLANG_SPANISH_US 0x15 #define SUBLANG_SWAHILI_KENYA 0x01 #define SUBLANG_SWEDISH 0x01 #define SUBLANG_SWEDISH_FINLAND 0x02 #define SUBLANG_SYRIAC_SYRIA 0x01 #define SUBLANG_TAJIK_TAJIKISTAN 0x01 #define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 #define SUBLANG_TAMIL_INDIA 0x01 #define SUBLANG_TATAR_RUSSIA 0x01 #define SUBLANG_TELUGU_INDIA 0x01 #define SUBLANG_THAI_THAILAND 0x01 #define SUBLANG_TIBETAN_PRC 0x01 #define SUBLANG_TIBETAN_BHUTAN 0x02 #define SUBLANG_TIGRIGNA_ERITREA 0x02 #define SUBLANG_TSWANA_SOUTH_AFRICA 0x01 #define SUBLANG_TURKISH_TURKEY 0x01 #define SUBLANG_TURKMEN_TURKMENISTAN 0x01 #define SUBLANG_UIGHUR_PRC 0x01 #define SUBLANG_UKRAINIAN_UKRAINE 0x01 #define SUBLANG_UPPER_SORBIAN_GERMANY 0x01 #define SUBLANG_URDU_PAKISTAN 0x01 #define SUBLANG_URDU_INDIA 0x02 #define SUBLANG_UZBEK_LATIN 0x01 #define SUBLANG_UZBEK_CYRILLIC 0x02 #define SUBLANG_VIETNAMESE_VIETNAM 0x01 #define SUBLANG_WELSH_UNITED_KINGDOM 0x01 #define SUBLANG_WOLOF_SENEGAL 0x01 #define SUBLANG_XHOSA_SOUTH_AFRICA 0x01 #define SUBLANG_YAKUT_RUSSIA 0x01 #define SUBLANG_YI_PRC 0x01 #define SUBLANG_YORUBA_NIGERIA 0x01 #define SUBLANG_ZULU_SOUTH_AFRICA 0x01 /* These are documented by the MSDN but are missing from the Windows header */ #define SUBLANG_ENGLISH_IRELAND SUBLANG_ENGLISH_EIRE #define SUBLANG_HAUSA_NIGERIA SUBLANG_HAUSA_NIGERIA_LATIN #define SUBLANG_LAO_LAO_PDR SUBLANG_LAO_LAO #define SUBLANG_PORTUGUESE_PORTUGAL SUBLANG_PORTUGUESE #define SUBLANG_SWAHILI SUBLANG_SWAHILI_KENYA #define SUBLANG_SWEDISH_SWEDEN SUBLANG_SWEDISH #define SUBLANG_SYRIAC SUBLANG_SYRIAC_SYRIA /* FIXME: these are not defined anywhere */ #define SUBLANG_DUTCH_SURINAM 0x03 #define SUBLANG_ROMANIAN_MOLDAVIA 0x02 #define SUBLANG_RUSSIAN_MOLDAVIA 0x02 #define SUBLANG_LITHUANIAN_CLASSIC 0x02 #define SUBLANG_MANX_GAELIC 0x01 /* * Sort definitions */ #define SORT_DEFAULT 0x0 #define SORT_INVARIANT_MATH 0x1 #define SORT_JAPANESE_XJIS 0x0 #define SORT_JAPANESE_UNICODE 0x1 #define SORT_JAPANESE_RADICALSTROKE 0x4 #define SORT_CHINESE_BIG5 0x0 #define SORT_CHINESE_PRCP 0x0 #define SORT_CHINESE_UNICODE 0x1 #define SORT_CHINESE_PRC 0x2 #define SORT_CHINESE_BOPOMOFO 0x3 #define SORT_CHINESE_RADICALSTROKE 0x4 #define SORT_KOREAN_KSC 0x0 #define SORT_KOREAN_UNICODE 0x1 #define SORT_GERMAN_PHONE_BOOK 0x1 #define SORT_HUNGARIAN_DEFAULT 0x0 #define SORT_HUNGARIAN_TECHNICAL 0x1 #define SORT_GEORGIAN_TRADITIONAL 0x0 #define SORT_GEORGIAN_MODERN 0x1 ================================================ FILE: wine/windows/winperf.h ================================================ /* * Performance Monitor * * Copyright 2007 Hans Leidekker * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINPERF_ #define _WINPERF_ #define PERF_SIZE_DWORD 0x00000000 #define PERF_SIZE_LARGE 0x00000100 #define PERF_SIZE_ZERO 0x00000200 #define PERF_SIZE_VARIABLE_LEN 0x00000300 #define PERF_TYPE_NUMBER 0x00000000 #define PERF_TYPE_COUNTER 0x00000400 #define PERF_TYPE_TEXT 0x00000800 #define PERF_TYPE_ZERO 0x00000C00 #define PERF_NUMBER_HEX 0x00000000 #define PERF_NUMBER_DECIMAL 0x00010000 #define PERF_NUMBER_DEC_1000 0x00020000 #define PERF_COUNTER_VALUE 0x00000000 #define PERF_COUNTER_RATE 0x00010000 #define PERF_COUNTER_FRACTION 0x00020000 #define PERF_COUNTER_BASE 0x00030000 #define PERF_COUNTER_ELAPSED 0x00040000 #define PERF_COUNTER_QUEUELEN 0x00050000 #define PERF_COUNTER_HISTOGRAM 0x00060000 #define PERF_COUNTER_PRECISION 0x00070000 #define PERF_TEXT_UNICODE 0x00000000 #define PERF_TEXT_ASCII 0x00010000 #define PERF_TIMER_TICK 0x00000000 #define PERF_TIMER_100NS 0x00100000 #define PERF_OBJECT_TIMER 0x00200000 #define PERF_DELTA_COUNTER 0x00400000 #define PERF_DELTA_BASE 0x00800000 #define PERF_INVERSE_COUNTER 0x01000000 #define PERF_MULTI_COUNTER 0x02000000 #define PERF_DISPLAY_NO_SUFFIX 0x00000000 #define PERF_DISPLAY_PER_SEC 0x10000000 #define PERF_DISPLAY_PERCENT 0x20000000 #define PERF_DISPLAY_SECONDS 0x30000000 #define PERF_DISPLAY_NOSHOW 0x40000000 #define PERF_DETAIL_NOVICE 100 #define PERF_DETAIL_ADVANCED 200 #define PERF_DETAIL_EXPERT 300 #define PERF_DETAIL_WIZARD 400 #include /* Performance data structure header * returned in answer to HKEY_PERFORMANCE_DATA request */ #define PERF_DATA_VERSION 1 #define PERF_DATA_REVISION 1 typedef struct _PERF_DATA_BLOCK { WCHAR Signature[4]; DWORD LittleEndian; DWORD Version; DWORD Revision; DWORD TotalByteLength; DWORD HeaderLength; DWORD NumObjectTypes; DWORD DefaultObject; SYSTEMTIME SystemTime; LARGE_INTEGER PerfTime; LARGE_INTEGER PerfFreq; LARGE_INTEGER PerfTime100nSec; DWORD SystemNameLength; DWORD SystemNameOffset; } PERF_DATA_BLOCK, *PPERF_DATA_BLOCK; #define PERF_NO_INSTANCES -1 typedef struct _PERF_OBJECT_TYPE { DWORD TotalByteLength; DWORD DefinitionLength; DWORD HeaderLength; DWORD ObjectNameTitleIndex; #ifdef _WIN64 DWORD ObjectNameTitle; #else LPWSTR ObjectNameTitle; #endif DWORD ObjectHelpTitleIndex; #ifdef _WIN64 DWORD ObjectHelpTitle; #else LPWSTR ObjectHelpTitle; #endif DWORD DetailLevel; DWORD NumCounters; LONG DefaultCounter; LONG NumInstances; DWORD CodePage; LARGE_INTEGER PerfTime; LARGE_INTEGER PerfFreq; } PERF_OBJECT_TYPE, *PPERF_OBJECT_TYPE; typedef struct _PERF_COUNTER_DEFINITION { DWORD ByteLength; DWORD CounterNameTitleIndex; #ifdef _WIN64 DWORD CounterNameTitle; #else LPWSTR CounterNameTitle; #endif DWORD CounterHelpTitleIndex; #ifdef _WIN64 DWORD CounterHelpTitle; #else LPWSTR CounterHelpTitle; #endif LONG DefaultScale; DWORD DetailLevel; DWORD CounterType; DWORD CounterSize; DWORD CounterOffset; } PERF_COUNTER_DEFINITION, *PPERF_COUNTER_DEFINITION; #define PERF_NO_UNIQUE_ID -1 typedef struct _PERF_INSTANCE_DEFINITION { DWORD ByteLength; DWORD ParentObjectTitleIndex; DWORD ParentObjectInstance; LONG UniqueID; DWORD NameOffset; DWORD NameLength; } PERF_INSTANCE_DEFINITION, *PPERF_INSTANCE_DEFINITION; typedef struct _PERF_COUNTER_BLOCK { DWORD ByteLength; } PERF_COUNTER_BLOCK, *PPERF_COUNTER_BLOCK; #include typedef DWORD (APIENTRY PM_OPEN_PROC)(LPWSTR); typedef DWORD (APIENTRY PM_COLLECT_PROC)(LPWSTR,LPVOID *,LPDWORD,LPDWORD); typedef DWORD (APIENTRY PM_CLOSE_PROC)(void); typedef DWORD (APIENTRY PM_QUERY_PROC)(LPDWORD,LPVOID *,LPDWORD,LPDWORD); #endif /* _WINPERF_ */ ================================================ FILE: wine/windows/winreg.h ================================================ /* * Win32 registry defines (see also winnt.h) * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINREG_H #define __WINE_WINREG_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #define HKEY_CLASSES_ROOT ((HKEY)(LONG_PTR)(LONG)0x80000000) #define HKEY_CURRENT_USER ((HKEY)(LONG_PTR)(LONG)0x80000001) #define HKEY_LOCAL_MACHINE ((HKEY)(LONG_PTR)(LONG)0x80000002) #define HKEY_USERS ((HKEY)(LONG_PTR)(LONG)0x80000003) #define HKEY_PERFORMANCE_DATA ((HKEY)(LONG_PTR)(LONG)0x80000004) #define HKEY_CURRENT_CONFIG ((HKEY)(LONG_PTR)(LONG)0x80000005) #define HKEY_DYN_DATA ((HKEY)(LONG_PTR)(LONG)0x80000006) #define HKEY_PERFORMANCE_TEXT ((HKEY)(LONG_PTR)(LONG)0x80000050) #define HKEY_PERFORMANCE_NLSTEXT ((HKEY)(LONG_PTR)(LONG)0x80000060) /* * registry provider structs */ typedef struct value_entA { LPSTR ve_valuename; DWORD ve_valuelen; DWORD_PTR ve_valueptr; DWORD ve_type; } VALENTA, *PVALENTA; typedef struct value_entW { LPWSTR ve_valuename; DWORD ve_valuelen; DWORD_PTR ve_valueptr; DWORD ve_type; } VALENTW, *PVALENTW; typedef ACCESS_MASK REGSAM; typedef LONG LSTATUS; /* * InitiateSystemShutdown() reasons */ #include #define REASON_OTHER (SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER) #define REASON_UNKNOWN SHTDN_REASON_UNKNOWN #define REASON_LEGACY_API SHTDN_REASON_LEGACY_API #define REASON_PLANNED_FLAG SHTDN_REASON_FLAG_PLANNED #define MAX_SHUTDOWN_TIMEOUT (10*365*24*60*60) /* * RegGetValue() restrictions */ #define RRF_RT_REG_NONE (1 << 0) #define RRF_RT_REG_SZ (1 << 1) #define RRF_RT_REG_EXPAND_SZ (1 << 2) #define RRF_RT_REG_BINARY (1 << 3) #define RRF_RT_REG_DWORD (1 << 4) #define RRF_RT_REG_MULTI_SZ (1 << 5) #define RRF_RT_REG_QWORD (1 << 6) #define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD) #define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD) #define RRF_RT_ANY 0xffff #define RRF_NOEXPAND (1 << 28) #define RRF_ZEROONFAILURE (1 << 29) WINADVAPI BOOL WINAPI AbortSystemShutdownA(LPSTR); WINADVAPI BOOL WINAPI AbortSystemShutdownW(LPWSTR); #define AbortSystemShutdown WINELIB_NAME_AW(AbortSystemShutdown) WINADVAPI BOOL WINAPI InitiateSystemShutdownA(LPSTR,LPSTR,DWORD,BOOL,BOOL); WINADVAPI BOOL WINAPI InitiateSystemShutdownW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL); #define InitiateSystemShutdown WINELIB_NAME_AW(InitiateSystemShutdown) WINADVAPI BOOL WINAPI InitiateSystemShutdownExA(LPSTR,LPSTR,DWORD,BOOL,BOOL,DWORD); WINADVAPI BOOL WINAPI InitiateSystemShutdownExW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL,DWORD); #define InitiateSystemShutdownEx WINELIB_NAME_AW(InitiateSystemShutdownEx) WINADVAPI LSTATUS WINAPI RegCloseKey(HKEY); WINADVAPI LSTATUS WINAPI RegConnectRegistryA(LPCSTR,HKEY,PHKEY); WINADVAPI LSTATUS WINAPI RegConnectRegistryW(LPCWSTR,HKEY,PHKEY); #define RegConnectRegistry WINELIB_NAME_AW(RegConnectRegistry) WINADVAPI LSTATUS WINAPI RegCreateKeyA(HKEY,LPCSTR,PHKEY); WINADVAPI LSTATUS WINAPI RegCreateKeyW(HKEY,LPCWSTR,PHKEY); #define RegCreateKey WINELIB_NAME_AW(RegCreateKey) WINADVAPI LSTATUS WINAPI RegCreateKeyExA(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD); WINADVAPI LSTATUS WINAPI RegCreateKeyExW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD); #define RegCreateKeyEx WINELIB_NAME_AW(RegCreateKeyEx) WINADVAPI LSTATUS WINAPI RegDeleteKeyA(HKEY,LPCSTR); WINADVAPI LSTATUS WINAPI RegDeleteKeyW(HKEY,LPCWSTR); #define RegDeleteKey WINELIB_NAME_AW(RegDeleteKey) WINADVAPI LSTATUS WINAPI RegDeleteKeyExA(HKEY,LPCSTR,REGSAM,DWORD); WINADVAPI LSTATUS WINAPI RegDeleteKeyExW(HKEY,LPCWSTR,REGSAM,DWORD); #define RegDeleteKeyEx WINELIB_NAME_AW(RegDeleteKeyEx) WINADVAPI LSTATUS WINAPI RegDeleteKeyValueA(HKEY,LPCSTR,LPCSTR); WINADVAPI LSTATUS WINAPI RegDeleteKeyValueW(HKEY,LPCWSTR,LPCWSTR); #define RegDeleteKeyValue WINELIB_NAME_AW(RegDeleteKeyValue) WINADVAPI LSTATUS WINAPI RegDeleteTreeA(HKEY,LPCSTR); WINADVAPI LSTATUS WINAPI RegDeleteTreeW(HKEY,LPCWSTR); #define RegDeleteTree WINELIB_NAME_AW(RegDeleteTree) WINADVAPI LSTATUS WINAPI RegDeleteValueA(HKEY,LPCSTR); WINADVAPI LSTATUS WINAPI RegDeleteValueW(HKEY,LPCWSTR); #define RegDeleteValue WINELIB_NAME_AW(RegDeleteValue) WINADVAPI LSTATUS WINAPI RegDisablePredefinedCache(void); WINADVAPI LSTATUS WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD); WINADVAPI LSTATUS WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD); #define RegEnumKey WINELIB_NAME_AW(RegEnumKey) WINADVAPI LSTATUS WINAPI RegEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPSTR,LPDWORD,LPFILETIME); WINADVAPI LSTATUS WINAPI RegEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPWSTR,LPDWORD,LPFILETIME); #define RegEnumKeyEx WINELIB_NAME_AW(RegEnumKeyEx) WINADVAPI LSTATUS WINAPI RegEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD); WINADVAPI LSTATUS WINAPI RegEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD); #define RegEnumValue WINELIB_NAME_AW(RegEnumValue) WINADVAPI LSTATUS WINAPI RegFlushKey(HKEY); WINADVAPI LSTATUS WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,LPDWORD); WINADVAPI LSTATUS WINAPI RegGetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD); WINADVAPI LSTATUS WINAPI RegGetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPDWORD,PVOID,LPDWORD); #define RegGetValue WINELIB_NAME_AW(RegGetValue) WINADVAPI LSTATUS WINAPI RegLoadKeyA(HKEY,LPCSTR,LPCSTR); WINADVAPI LSTATUS WINAPI RegLoadKeyW(HKEY,LPCWSTR,LPCWSTR); #define RegLoadKey WINELIB_NAME_AW(RegLoadKey) WINADVAPI LSTATUS WINAPI RegLoadMUIStringA(HKEY,LPCSTR,LPSTR,DWORD,LPDWORD,DWORD,LPCSTR); WINADVAPI LSTATUS WINAPI RegLoadMUIStringW(HKEY,LPCWSTR,LPWSTR,DWORD,LPDWORD,DWORD,LPCWSTR); #define RegLoadMUIString WINELIB_NAME_AW(RegLoadMUIString) WINADVAPI LSTATUS WINAPI RegNotifyChangeKeyValue(HKEY,BOOL,DWORD,HANDLE,BOOL); WINADVAPI LSTATUS WINAPI RegOpenCurrentUser(REGSAM,PHKEY); WINADVAPI LSTATUS WINAPI RegOpenKeyA(HKEY,LPCSTR,PHKEY); WINADVAPI LSTATUS WINAPI RegOpenKeyW(HKEY,LPCWSTR,PHKEY); #define RegOpenKey WINELIB_NAME_AW(RegOpenKey) WINADVAPI LSTATUS WINAPI RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY); WINADVAPI LSTATUS WINAPI RegOpenKeyExA(HKEY,LPCSTR,DWORD,REGSAM,PHKEY); #define RegOpenKeyEx WINELIB_NAME_AW(RegOpenKeyEx) WINADVAPI LSTATUS WINAPI RegOpenUserClassesRoot(HANDLE,DWORD,REGSAM,PHKEY); WINADVAPI LSTATUS WINAPI RegOverridePredefKey(HKEY,HKEY); WINADVAPI LSTATUS WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME); WINADVAPI LSTATUS WINAPI RegQueryInfoKeyA(HKEY,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME); #define RegQueryInfoKey WINELIB_NAME_AW(RegQueryInfoKey) WINADVAPI LSTATUS WINAPI RegQueryMultipleValuesA(HKEY,PVALENTA,DWORD,LPSTR,LPDWORD); WINADVAPI LSTATUS WINAPI RegQueryMultipleValuesW(HKEY,PVALENTW,DWORD,LPWSTR,LPDWORD); #define RegQueryMultipleValues WINELIB_NAME_AW(RegQueryMultipleValues) WINADVAPI LSTATUS WINAPI RegQueryValueA(HKEY,LPCSTR,LPSTR,LPLONG); WINADVAPI LSTATUS WINAPI RegQueryValueW(HKEY,LPCWSTR,LPWSTR,LPLONG); #define RegQueryValue WINELIB_NAME_AW(RegQueryValue) WINADVAPI LSTATUS WINAPI RegQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); WINADVAPI LSTATUS WINAPI RegQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); #define RegQueryValueEx WINELIB_NAME_AW(RegQueryValueEx) WINADVAPI LSTATUS WINAPI RegReplaceKeyA(HKEY,LPCSTR,LPCSTR,LPCSTR); WINADVAPI LSTATUS WINAPI RegReplaceKeyW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR); #define RegReplaceKey WINELIB_NAME_AW(RegReplaceKey) WINADVAPI LSTATUS WINAPI RegRestoreKeyA(HKEY,LPCSTR,DWORD); WINADVAPI LSTATUS WINAPI RegRestoreKeyW(HKEY,LPCWSTR,DWORD); #define RegRestoreKey WINELIB_NAME_AW(RegRestoreKey) WINADVAPI LSTATUS WINAPI RegSaveKeyA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES); WINADVAPI LSTATUS WINAPI RegSaveKeyW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES); #define RegSaveKey WINELIB_NAME_AW(RegSaveKey) WINADVAPI LSTATUS WINAPI RegSaveKeyExA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES,DWORD); WINADVAPI LSTATUS WINAPI RegSaveKeyExW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES,DWORD); #define RegSaveKeyEx WINELIB_NAME_AW(RegSaveKeyEx) WINADVAPI LSTATUS WINAPI RegSetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); WINADVAPI LSTATUS WINAPI RegSetKeyValueA(HKEY,LPCSTR,LPCSTR,DWORD,const void*,DWORD); WINADVAPI LSTATUS WINAPI RegSetKeyValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,const void*,DWORD); WINADVAPI LSTATUS WINAPI RegSetValueA(HKEY,LPCSTR,DWORD,LPCSTR,DWORD); WINADVAPI LSTATUS WINAPI RegSetValueW(HKEY,LPCWSTR,DWORD,LPCWSTR,DWORD); #define RegSetValue WINELIB_NAME_AW(RegSetValue) WINADVAPI LSTATUS WINAPI RegSetValueExA(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD); WINADVAPI LSTATUS WINAPI RegSetValueExW(HKEY,LPCWSTR,DWORD,DWORD,const BYTE*,DWORD); #define RegSetValueEx WINELIB_NAME_AW(RegSetValueEx) WINADVAPI LSTATUS WINAPI RegUnLoadKeyA(HKEY,LPCSTR); WINADVAPI LSTATUS WINAPI RegUnLoadKeyW(HKEY,LPCWSTR); #define RegUnLoadKey WINELIB_NAME_AW(RegUnLoadKey) #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_WINREG_H */ ================================================ FILE: wine/windows/winresrc.h ================================================ /* * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINRESRC_ #define _WINRESRC_ #ifndef WINVER #define WINVER 0x0500 #endif #ifndef _WIN32_IE #define _WIN32_IE 0x0501 #endif #ifndef _WIN32_WINDOWS #define _WIN32_WINDOWS 0x0410 #endif #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0500 #endif #include #include #include #include #include #include #endif /* _WINRESRC_ */ ================================================ FILE: wine/windows/winsafer.h ================================================ /* * Winsafer definitions * * Copyright (C) 2009 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINSAFER_H #define __WINE_WINSAFER_H #include #include #ifdef __cplusplus extern "C" { #endif DECLARE_HANDLE(SAFER_LEVEL_HANDLE); #define SAFER_SCOPEID_MACHINE 1 #define SAFER_SCOPEID_USER 2 #define SAFER_LEVELID_DISALLOWED 0x00000 #define SAFER_LEVELID_UNTRUSTED 0x01000 #define SAFER_LEVELID_CONSTRAINED 0x10000 #define SAFER_LEVELID_NORMALUSER 0x20000 #define SAFER_LEVELID_FULLYTRUSTED 0x40000 #define SAFER_LEVEL_OPEN 1 WINADVAPI BOOL WINAPI SaferCreateLevel(DWORD,DWORD,DWORD,SAFER_LEVEL_HANDLE*,LPVOID); typedef enum _SAFER_POLICY_INFO_CLASS { SaferPolicyLevelList = 1, SaferPolicyEnableTransparentEnforcement, SaferPolicyDefaultLevel, SaferPolicyEvaluateUserScope, SaferPolicyScopeFlags } SAFER_POLICY_INFO_CLASS; typedef enum _SAFER_OBJECT_INFO_CLASS { SaferObjectLevelId = 1, SaferObjectScopeId, SaferObjectFriendlyName, SaferObjectDescription, SaferObjectBuiltin, SaferObjectDisallowed, SaferObjectDisableMaxPrivilege, SaferObjectInvertDeletedPrivileges, SaferObjectDeletedPrivileges, SaferObjectDefaultOwner, SaferObjectSidsToDisable, SaferObjectRestrictedSidsInverted, SaferObjectRestrictedSidsAdded, SaferObjectAllIdentificationGuids, SaferObjectSingleIdentification, SaferObjectExtendedError } SAFER_OBJECT_INFO_CLASS; WINADVAPI BOOL WINAPI SaferGetPolicyInformation(DWORD,SAFER_POLICY_INFO_CLASS,DWORD,PVOID,PDWORD,LPVOID); WINADVAPI BOOL WINAPI SaferSetLevelInformation(SAFER_LEVEL_HANDLE,SAFER_OBJECT_INFO_CLASS,LPVOID,DWORD); #ifdef __cplusplus } #endif #endif /* __WINE_WINSAFER_H */ ================================================ FILE: wine/windows/winscard.h ================================================ /* * Winscard definitions * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINSCARD_H #define __WINE_WINSCARD_H #include #include #include #include /* Valid scopes for contexts */ #define SCARD_SCOPE_USER 0 #define SCARD_SCOPE_TERMINAL 1 #define SCARD_SCOPE_SYSTEM 2 #ifndef _LPCBYTE_DEFINED #define _LPCBYTE_DEFINED typedef const BYTE *LPCBYTE; #endif typedef ULONG_PTR SCARDCONTEXT, *PSCARDCONTEXT, *LPSCARDCONTEXT; typedef ULONG_PTR SCARDHANDLE, *PSCARDHANDLE, *LPSCARDHANDLE; typedef struct _SCARD_ATRMASK { DWORD cbAtr; BYTE rgbAtr[36]; BYTE rgbMask[36]; } SCARD_ATRMASK, *PSCARD_ATRMASK, *LPSCARD_ATRMASK; typedef struct { LPCSTR szReader; LPVOID pvUserData; DWORD dwCurrentState; DWORD dwEventState; DWORD cbAtr; BYTE rgbAtr[36]; } SCARD_READERSTATEA, *PSCARD_READERSTATEA, *LPSCARD_READERSTATEA; typedef struct { LPCWSTR szReader; LPVOID pvUserData; DWORD dwCurrentState; DWORD dwEventState; DWORD cbAtr; BYTE rgbAtr[36]; } SCARD_READERSTATEW, *PSCARD_READERSTATEW, *LPSCARD_READERSTATEW; DECL_WINELIB_TYPE_AW(SCARD_READERSTATE) DECL_WINELIB_TYPE_AW(PSCARD_READERSTATE) DECL_WINELIB_TYPE_AW(LPSCARD_READERSTATE) #ifdef __cplusplus extern "C" { #endif HANDLE WINAPI SCardAccessStartedEvent(void); LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT,LPCSTR,LPCSTR); LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR); #define SCardAddReaderToGroup WINELIB_NAME_AW(SCardAddReaderToGroup) LONG WINAPI SCardBeginTransaction(SCARDHANDLE); LONG WINAPI SCardCancel(SCARDCONTEXT); LONG WINAPI SCardConnectA(SCARDCONTEXT,LPCSTR,DWORD,DWORD,LPSCARDHANDLE,LPDWORD); LONG WINAPI SCardConnectW(SCARDCONTEXT,LPCWSTR,DWORD,DWORD,LPSCARDHANDLE,LPDWORD); #define SCardConnect WINELIB_NAME_AW(SCardConnect) LONG WINAPI SCardControl(SCARDHANDLE,DWORD,LPCVOID,DWORD,LPVOID,DWORD,LPDWORD); LONG WINAPI SCardDisconnect(SCARDHANDLE,DWORD); LONG WINAPI SCardEndTransaction(SCARDHANDLE,DWORD); LONG WINAPI SCardEstablishContext(DWORD,LPCVOID,LPCVOID,LPSCARDCONTEXT); LONG WINAPI SCardForgetCardTypeA(SCARDCONTEXT,LPCSTR); LONG WINAPI SCardForgetCardTypeW(SCARDCONTEXT,LPCWSTR); #define SCardForgetCardType WINELIB_NAME_AW(SCardForgetCardType) LONG WINAPI SCardForgetReaderA(SCARDCONTEXT,LPCSTR); LONG WINAPI SCardForgetReaderW(SCARDCONTEXT,LPCWSTR); #define SCardForgetReader WINELIB_NAME_AW(SCardForgetReader) LONG WINAPI SCardForgetReaderGroupA(SCARDCONTEXT,LPCSTR); LONG WINAPI SCardForgetReaderGroupW(SCARDCONTEXT,LPCWSTR); #define SCardForgetReaderGroup WINELIB_NAME_AW(SCardForgetReaderGroup) LONG WINAPI SCardFreeMemory(SCARDCONTEXT,LPCVOID); LONG WINAPI SCardGetAttrib(SCARDHANDLE,DWORD,LPBYTE,LPDWORD); LONG WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT,LPCSTR,DWORD,LPSTR,LPDWORD); LONG WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT,LPCWSTR,DWORD,LPWSTR,LPDWORD); #define SCardGetCardTypeProviderName WINELIB_NAME_AW(SCardGetCardTypeProviderName) LONG WINAPI SCardGetProviderIdA(SCARDCONTEXT,LPCSTR,LPGUID); LONG WINAPI SCardGetProviderIdW(SCARDCONTEXT,LPCWSTR,LPGUID); #define SCardGetProviderId WINELIB_NAME_AW(SCardGetProviderId) LONG WINAPI SCardGetStatusChangeA(SCARDCONTEXT,DWORD,LPSCARD_READERSTATEA,DWORD); LONG WINAPI SCardGetStatusChangeW(SCARDCONTEXT,DWORD,LPSCARD_READERSTATEW,DWORD); #define SCardGetStatusChange WINELIB_NAME_AW(SCardGetStatusChange) LONG WINAPI SCardIntroduceCardTypeA(SCARDCONTEXT,LPCSTR,LPCGUID,LPCGUID,DWORD,LPCBYTE,LPCBYTE,DWORD); LONG WINAPI SCardIntroduceCardTypeW(SCARDCONTEXT,LPCWSTR,LPCGUID,LPCGUID,DWORD,LPCBYTE,LPCBYTE,DWORD); #define SCardIntroduceCardType WINELIB_NAME_AW(SCardIntroduceCardType) LONG WINAPI SCardIntroduceReaderA(SCARDCONTEXT,LPCSTR,LPCSTR); LONG WINAPI SCardIntroduceReaderW(SCARDCONTEXT,LPCWSTR,LPCWSTR); #define SCardIntroduceReader WINELIB_NAME_AW(SCardIntroduceReader) LONG WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT,LPCSTR); LONG WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT,LPCWSTR); #define SCardIntroduceReaderGroup WINELIB_NAME_AW(SCardIntroduceReaderGroup) LONG WINAPI SCardIsValidContext(SCARDCONTEXT); LONG WINAPI SCardListCardsA(SCARDCONTEXT,LPCBYTE,LPCGUID,DWORD,LPSTR,LPDWORD); LONG WINAPI SCardListCardsW(SCARDCONTEXT,LPCBYTE,LPCGUID,DWORD,LPWSTR,LPDWORD); #define SCardListCards WINELIB_NAME_AW(SCardListCards) LONG WINAPI SCardListInterfacesA(SCARDCONTEXT,LPCSTR,LPGUID,LPDWORD); LONG WINAPI SCardListInterfacesW(SCARDCONTEXT,LPCWSTR,LPGUID,LPDWORD); #define SCardListInterfaces WINELIB_NAME_AW(SCardListInterfaces) LONG WINAPI SCardListReadersA(SCARDCONTEXT,const CHAR *,CHAR *,DWORD *); LONG WINAPI SCardListReadersW(SCARDCONTEXT,const WCHAR *,WCHAR *,DWORD *); #define SCardListReaders WINELIB_NAME_AW(SCardListReaders) LONG WINAPI SCardListReaderGroupsA(SCARDCONTEXT,LPSTR,LPDWORD); LONG WINAPI SCardListReaderGroupsW(SCARDCONTEXT,LPWSTR,LPDWORD); #define SCardListReaderGroups WINELIB_NAME_AW(SCardListReaderGroups) LONG WINAPI SCardLocateCardsA(SCARDCONTEXT,LPCSTR,LPSCARD_READERSTATEA,DWORD); LONG WINAPI SCardLocateCardsW(SCARDCONTEXT,LPCWSTR,LPSCARD_READERSTATEW,DWORD); #define SCardLocateCards WINELIB_NAME_AW(SCardLocateCards) LONG WINAPI SCardLocateCardsByATRA(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPSCARD_READERSTATEA,DWORD); LONG WINAPI SCardLocateCardsByATRW(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPSCARD_READERSTATEW,DWORD); #define SCardLocateCardsByATR WINELIB_NAME_AW(SCardLocateCardsByATR) LONG WINAPI SCardReconnect(SCARDHANDLE,DWORD,DWORD,DWORD,LPDWORD); LONG WINAPI SCardReleaseContext(SCARDCONTEXT); void WINAPI SCardReleaseStartedEvent(void); LONG WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT,LPCSTR,LPCSTR); LONG WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR); #define SCardRemoveReaderFromGroup WINELIB_NAME_AW(SCardRemoveReaderFromGroup) LONG WINAPI SCardSetAttrib(SCARDHANDLE,DWORD,LPCBYTE,DWORD); LONG WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT,LPCSTR,DWORD,LPCSTR); LONG WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT,LPCWSTR,DWORD,LPCWSTR); #define SCardSetCardTypeProviderName WINELIB_NAME_AW(SCardSetCardTypeProviderName) LONG WINAPI SCardState(SCARDHANDLE,LPDWORD,LPDWORD,LPBYTE,LPDWORD); LONG WINAPI SCardStatusA(SCARDHANDLE,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD); LONG WINAPI SCardStatusW(SCARDHANDLE,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD); #define SCardStatus WINELIB_NAME_AW(SCardStatus) LONG WINAPI SCardTransmit(SCARDHANDLE,LPCSCARD_IO_REQUEST,LPCBYTE,DWORD,LPSCARD_IO_REQUEST,LPBYTE,LPDWORD); #ifdef __cplusplus } #endif #endif /* __WINE_WINSCARD_H */ ================================================ FILE: wine/windows/winsmcrd.h ================================================ /* * Winscard definitions * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINSMCRD_H #define __WINE_WINSMCRD_H #define SCARD_PROTOCOL_UNDEFINED 0x00000000 #define SCARD_PROTOCOL_OPTIMAL 0x00000000 #define SCARD_PROTOCOL_T0 0x00000001 #define SCARD_PROTOCOL_T1 0x00000002 #define SCARD_PROTOCOL_RAW 0x00010000 #define SCARD_PROTOCOL_DEFAULT 0x80000000 #define SCARD_PROTOCOL_Tx (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1) typedef struct _SCARD_IO_REQUEST { DWORD dwProtocol; DWORD cbPciLength; } SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST; typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST; #endif /* __WINE_WINSMCRD_H */ ================================================ FILE: wine/windows/winsnmp.h ================================================ /* * Copyright 2013 Hans Leidekker for CodeWeavers. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINSNMP_H #define __WINE_WINSNMP_H #ifdef __cplusplus extern "C" { #endif typedef int smiINT, *smiLPINT; typedef smiINT smiINT32, *smiLPINT32; typedef unsigned int smiUINT32, *smiLPUINT32; typedef smiUINT32 SNMPAPI_STATUS; typedef HANDLE HSNMP_SESSION; #define SNMPAPI_NO_SUPPORT 0 #define SNMPAPI_V1_SUPPORT 1 #define SNMPAPI_V2_SUPPORT 2 #define SNMPAPI_M2M_SUPPORT 3 #define SNMPAPI_TRANSLATED 0 #define SNMPAPI_UNTRANSLATED_V1 1 #define SNMPAPI_UNTRANSLATED_V2 2 #define SNMPAPI_OFF 0 #define SNMPAPI_ON 1 #define SNMPAPI_FAILURE 0 #define SNMPAPI_SUCCESS 1 SNMPAPI_STATUS WINAPI SnmpCleanup(void); HSNMP_SESSION WINAPI SnmpOpen(HWND,UINT); SNMPAPI_STATUS WINAPI SnmpSetRetransmitMode(smiUINT32); SNMPAPI_STATUS WINAPI SnmpSetTranslateMode(smiUINT32); SNMPAPI_STATUS WINAPI SnmpStartup(smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32); #ifdef __cplusplus } #endif #endif /* __WINE_WINSNMP_H */ ================================================ FILE: wine/windows/winsock.h ================================================ /* WINSOCK.H--definitions to be used with the WINSOCK.DLL * * This header file corresponds to version 1.1 of the Windows Sockets * specification. * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifdef __WINESRC__ # ifndef __WINE_WINSOCK2__ # error Please use Winsock2 in Wine # endif #endif #ifndef __WINE_WINSOCKAPI_STDLIB_H #define __WINE_WINSOCKAPI_STDLIB_H /* * This section defines the items that conflict with the Unix headers. */ #ifndef USE_WS_PREFIX /* We are not using the WS_ prefix we risk getting conflicts for * everything related to select. */ # ifdef FD_CLR /* Too late, the Unix version of stdlib.h was included before winsock.h. * This means select and all the related stuff is already defined and we * cannot override types and function prototypes. * All we can do is disable all these symbols so that they are not used * inadvertently. */ # include # undef FD_SETSIZE # undef FD_CLR # undef FD_SET # undef FD_ZERO # undef FD_ISSET # define FD_SETSIZE Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library # define FD_CLR Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library # define FD_SET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library # define FD_ZERO Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library # define FD_ISSET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library # define fd_set Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library # define select Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library # elif defined(RLIM_INFINITY) /* On Darwin stdlib.h includes sys/resource.h which defines timeval but not the fd_set macros */ # define fd_set unix_fd_set # include # include # include # undef fd_set # undef FD_SETSIZE # undef FD_CLR # undef FD_SET # undef FD_ZERO # undef FD_ISSET # define select Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library # define timeval Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library # else /* FD_CLR */ /* stdlib.h has not been included yet so it's not too late. Include it now * making sure that none of the select symbols is affected. Then we can * define them with our own values. */ # define fd_set unix_fd_set # define timeval unix_timeval # define select unix_select # define socklen_t unix_socklen_t # define u_long unix_u_long # include # include # include # undef fd_set # undef timeval # undef select # undef socklen_t # undef u_long # undef FD_SETSIZE # undef FD_CLR # undef FD_SET # undef FD_ZERO # undef FD_ISSET # undef _TIMEVAL_DEFINED # define WS_DEFINE_SELECT # endif /* FD_CLR */ #else # define WS_DEFINE_SELECT # include # include #endif /* !USE_WS_PREFIX */ #endif /* __WINE_WINSOCKAPI_STDLIB_H */ #include #ifndef _WINSOCKAPI_ #define _WINSOCKAPI_ #include #ifdef USE_WS_PREFIX typedef unsigned char WS_u_char; typedef unsigned short WS_u_short; typedef unsigned int WS_u_int; typedef ULONG WS_u_long; #elif (defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__)) && !defined(_BSDTYPES_DEFINED) /* MinGW doesn't define the u_xxx types */ typedef unsigned char u_char; typedef unsigned short u_short; typedef unsigned int u_int; typedef ULONG u_long; #define _BSDTYPES_DEFINED #else #define u_long ULONG /* make sure we don't use the system u_long */ #endif #ifdef USE_WS_PREFIX # define WS(x) WS_##x #else # define WS(x) x #endif #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /* * Address families */ #ifndef USE_WS_PREFIX #define AF_UNSPEC 0 #define AF_UNIX 1 #define AF_INET 2 #define AF_IMPLINK 3 #define AF_PUP 4 #define AF_CHAOS 5 #define AF_NS 6 #define AF_IPX AF_NS #define AF_ISO 7 #define AF_OSI AF_ISO #define AF_ECMA 8 #define AF_DATAKIT 9 #define AF_CCITT 10 #define AF_SNA 11 #define AF_DECnet 12 #define AF_DLI 13 #define AF_LAT 14 #define AF_HYLINK 15 #define AF_APPLETALK 16 #define AF_NETBIOS 17 #define AF_VOICEVIEW 18 #define AF_FIREFOX 19 #define AF_UNKNOWN1 20 #define AF_BAN 21 #define AF_ATM 22 #define AF_INET6 23 #define AF_CLUSTER 24 #define AF_12844 25 #define AF_IRDA 26 #define AF_MAX 27 #define PF_UNSPEC AF_UNSPEC #define PF_UNIX AF_UNIX #define PF_INET AF_INET #define PF_IMPLINK AF_IMPLINK #define PF_PUP AF_PUP #define PF_CHAOS AF_CHAOS #define PF_NS AF_NS #define PF_IPX AF_IPX #define PF_ISO AF_ISO #define PF_OSI AF_OSI #define PF_ECMA AF_ECMA #define PF_DATAKIT AF_DATAKIT #define PF_CCITT AF_CCITT #define PF_SNA AF_SNA #define PF_DECnet AF_DECnet #define PF_DLI AF_DLI #define PF_LAT AF_LAT #define PF_HYLINK AF_HYLINK #define PF_APPLETALK AF_APPLETALK #define PF_VOICEVIEW AF_VOICEVIEW #define PF_FIREFOX AF_FIREFOX #define PF_UNKNOWN1 AF_UNKNOWN1 #define PF_BAN AF_BAN #define PF_MAX AF_MAX #else /* USE_WS_PREFIX */ #define WS_AF_UNSPEC 0 #define WS_AF_UNIX 1 #define WS_AF_INET 2 #define WS_AF_IMPLINK 3 #define WS_AF_PUP 4 #define WS_AF_CHAOS 5 #define WS_AF_NS 6 #define WS_AF_IPX WS_AF_NS #define WS_AF_ISO 7 #define WS_AF_OSI AF_ISO #define WS_AF_ECMA 8 #define WS_AF_DATAKIT 9 #define WS_AF_CCITT 10 #define WS_AF_SNA 11 #define WS_AF_DECnet 12 #define WS_AF_DLI 13 #define WS_AF_LAT 14 #define WS_AF_HYLINK 15 #define WS_AF_APPLETALK 16 #define WS_AF_NETBIOS 17 #define WS_AF_VOICEVIEW 18 #define WS_AF_FIREFOX 19 #define WS_AF_UNKNOWN1 20 #define WS_AF_BAN 21 #define WS_AF_ATM 22 #define WS_AF_INET6 23 #define WS_AF_CLUSTER 24 #define WS_AF_12844 25 #define WS_AF_IRDA 26 #define WS_AF_MAX 27 #endif /* USE_WS_PREFIX */ /* * Types */ #ifndef USE_WS_PREFIX #define SOCK_STREAM 1 #define SOCK_DGRAM 2 #define SOCK_RAW 3 #define SOCK_RDM 4 #define SOCK_SEQPACKET 5 #else /* USE_WS_PREFIX */ #define WS_SOCK_STREAM 1 #define WS_SOCK_DGRAM 2 #define WS_SOCK_RAW 3 #define WS_SOCK_RDM 4 #define WS_SOCK_SEQPACKET 5 #endif /* USE_WS_PREFIX */ /* * Protocols */ #ifndef USE_WS_PREFIX #define IPPROTO_IP 0 #define IPPROTO_ICMP 1 #define IPPROTO_IGMP 2 #define IPPROTO_GGP 3 #define IPPROTO_TCP 6 #define IPPROTO_UDP 17 #define IPPROTO_IDP 22 #define IPPROTO_IPV6 41 #define IPPROTO_ICMPV6 58 #define IPPROTO_ND 77 #define IPPROTO_RAW 255 #define IPPROTO_MAX 256 #else /* USE_WS_PREFIX */ #define WS_IPPROTO_IP 0 #define WS_IPPROTO_ICMP 1 #define WS_IPPROTO_IGMP 2 #define WS_IPPROTO_GGP 3 #define WS_IPPROTO_TCP 6 #define WS_IPPROTO_UDP 17 #define WS_IPPROTO_IDP 22 #define WS_IPPROTO_IPV6 41 #define WS_IPPROTO_ICMPV6 58 #define WS_IPPROTO_ND 77 #define WS_IPPROTO_RAW 255 #define WS_IPPROTO_MAX 256 #endif /* USE_WS_PREFIX */ typedef struct WS(protoent) { char* p_name; char** p_aliases; short p_proto; } PROTOENT, *PPROTOENT, *LPPROTOENT; /* * Networks */ struct WS(netent) { char* n_name; /* official name of net */ char** n_aliases; /* alias list */ short n_addrtype; /* net address type */ ULONG n_net; /* network # */ }; /* * Services */ #ifndef USE_WS_PREFIX #define IPPORT_ECHO 7 #define IPPORT_DISCARD 9 #define IPPORT_SYSTAT 11 #define IPPORT_DAYTIME 13 #define IPPORT_NETSTAT 15 #define IPPORT_FTP 21 #define IPPORT_TELNET 23 #define IPPORT_SMTP 25 #define IPPORT_TIMESERVER 37 #define IPPORT_NAMESERVER 42 #define IPPORT_WHOIS 43 #define IPPORT_MTP 57 #define IPPORT_TFTP 69 #define IPPORT_RJE 77 #define IPPORT_FINGER 79 #define IPPORT_TTYLINK 87 #define IPPORT_SUPDUP 95 #define IPPORT_EXECSERVER 512 #define IPPORT_LOGINSERVER 513 #define IPPORT_CMDSERVER 514 #define IPPORT_EFSSERVER 520 #define IPPORT_BIFFUDP 512 #define IPPORT_WHOSERVER 513 #define IPPORT_ROUTESERVER 520 #define IPPORT_RESERVED 1024 #else /* USE_WS_PREFIX */ #define WS_IPPORT_ECHO 7 #define WS_IPPORT_DISCARD 9 #define WS_IPPORT_SYSTAT 11 #define WS_IPPORT_DAYTIME 13 #define WS_IPPORT_NETSTAT 15 #define WS_IPPORT_FTP 21 #define WS_IPPORT_TELNET 23 #define WS_IPPORT_SMTP 25 #define WS_IPPORT_TIMESERVER 37 #define WS_IPPORT_NAMESERVER 42 #define WS_IPPORT_WHOIS 43 #define WS_IPPORT_MTP 57 #define WS_IPPORT_TFTP 69 #define WS_IPPORT_RJE 77 #define WS_IPPORT_FINGER 79 #define WS_IPPORT_TTYLINK 87 #define WS_IPPORT_SUPDUP 95 #define WS_IPPORT_EXECSERVER 512 #define WS_IPPORT_LOGINSERVER 513 #define WS_IPPORT_CMDSERVER 514 #define WS_IPPORT_EFSSERVER 520 #define WS_IPPORT_BIFFUDP 512 #define WS_IPPORT_WHOSERVER 513 #define WS_IPPORT_ROUTESERVER 520 #define WS_IPPORT_RESERVED 1024 #endif /* USE_WS_PREFIX */ typedef struct WS(servent) { char* s_name; /* official service name */ char** s_aliases; /* alias list */ #ifdef _WIN64 char* s_proto; /* protocol to use */ short s_port; /* port # */ #else short s_port; /* port # */ char* s_proto; /* protocol to use */ #endif } SERVENT, *PSERVENT, *LPSERVENT; /* * Hosts */ typedef struct WS(hostent) { char* h_name; /* official name of host */ char** h_aliases; /* alias list */ short h_addrtype; /* host address type */ short h_length; /* length of address */ char** h_addr_list; /* list of addresses from name server */ #define h_addr h_addr_list[0] /* address, for backward compat */ } HOSTENT, *PHOSTENT, *LPHOSTENT; /* * Sockets */ typedef UINT_PTR SOCKET; /* * This is used instead of -1, since the * SOCKET type is unsigned. */ #define INVALID_SOCKET (SOCKET)(~0) #define SOCKET_ERROR (-1) typedef struct WS(sockaddr) { WS(u_short) sa_family; char sa_data[14]; } SOCKADDR, *PSOCKADDR, *LPSOCKADDR; typedef struct WS(linger) { WS(u_short) l_onoff; /* option on/off */ WS(u_short) l_linger; /* linger time */ } LINGER, *PLINGER, *LPLINGER; /* * Select */ #ifdef WS_DEFINE_SELECT /* Define our own version of select and the associated types and macros */ # ifndef USE_WS_PREFIX # ifndef FD_SETSIZE # define FD_SETSIZE 64 # endif # else # ifndef WS_FD_SETSIZE # define WS_FD_SETSIZE 64 # endif # endif typedef struct WS(fd_set) { WS(u_int) fd_count; /* how many are SET? */ # ifndef USE_WS_PREFIX SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */ # else SOCKET fd_array[WS_FD_SETSIZE];/* an array of SOCKETs */ # endif } WS(fd_set), FD_SET, *PFD_SET, *LPFD_SET; #ifndef _TIMEVAL_DEFINED #define _TIMEVAL_DEFINED typedef struct WS(timeval) { LONG tv_sec; /* seconds */ LONG tv_usec; /* and microseconds */ } TIMEVAL, *PTIMEVAL, *LPTIMEVAL; #endif #define __WS_FD_CLR(fd, set, cast) do { \ unsigned int __i; \ for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \ { \ if (((cast*)(set))->fd_array[__i] == fd) \ { \ while (__i < ((cast*)(set))->fd_count-1) \ { \ ((cast*)(set))->fd_array[__i] = \ ((cast*)(set))->fd_array[__i+1]; \ __i++; \ } \ ((cast*)(set))->fd_count--; \ break; \ } \ } \ } while(0) #define __WS_FD_SET1(fd, set, cast) do { \ if (((cast*)(set))->fd_count < FD_SETSIZE) \ ((cast*)(set))->fd_array[((cast*)(set))->fd_count++]=(fd); \ } while(0) /* This version checks if the filedesc is already in the list, and appends it * only if it's not the case */ #define __WS_FD_SET2(fd, set, cast) do { \ unsigned int __i; \ for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \ { \ if (((cast*)(set))->fd_array[__i]==(fd)) \ break; \ } \ if (__i == ((cast*)(set))->fd_count && ((cast*)(set))->fd_count < FD_SETSIZE) \ { \ ((cast*)(set))->fd_count++; \ ((cast*)(set))->fd_array[__i]=(fd);\ } \ } while(0) #ifndef __WINE_WINSOCK2__ #define __WS_FD_SET(fd, set, cast) __WS_FD_SET1((fd),(set), cast) #else #define __WS_FD_SET(fd, set, cast) __WS_FD_SET2((fd),(set), cast) #endif #ifndef USE_WS_PREFIX #define FD_CLR(fd, set) __WS_FD_CLR((fd),(set), fd_set) #define FD_SET(fd, set) __WS_FD_SET((fd),(set), fd_set) #define FD_ZERO(set) (((fd_set*)(set))->fd_count=0) #define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set*)(set)) #else #define WS_FD_CLR(fd, set) __WS_FD_CLR((fd),(set), WS_fd_set) #define WS_FD_SET(fd, set) __WS_FD_SET((fd),(set), WS_fd_set) #define WS_FD_ZERO(set) (((WS_fd_set*)(set))->fd_count=0) #define WS_FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (WS_fd_set*)(set)) #endif int WINAPI __WSAFDIsSet(SOCKET,WS(fd_set)*); #endif /* WS_DEFINE_SELECT */ /* we have to define hton/ntoh as macros to avoid conflicts with Unix headers */ #ifndef USE_WS_PREFIX #undef htonl #undef htons #undef ntohl #undef ntohs #ifdef WORDS_BIGENDIAN static inline u_short __wine_ushort_noop(u_short s) { return s; } static inline ULONG __wine_ulong_noop(ULONG l) { return l; } #define htonl __wine_ulong_noop #define htons __wine_ushort_noop #define ntohl __wine_ulong_noop #define ntohs __wine_ushort_noop #else /* WORDS_BIGENDIAN */ static inline u_short __wine_ushort_swap(u_short s) { return (s >> 8) | (s << 8); } static inline ULONG __wine_ulong_swap(ULONG l) { return ((ULONG)__wine_ushort_swap((u_short)l) << 16) | __wine_ushort_swap((u_short)(l >> 16)); } #define htonl __wine_ulong_swap #define htons __wine_ushort_swap #define ntohl __wine_ulong_swap #define ntohs __wine_ushort_swap #endif /* WORDS_BIGENDIAN */ #endif /* USE_WS_PREFIX */ /* * Internet address (old style... should be updated) */ #ifndef USE_WS_PREFIX #define IN_CLASSA_NSHIFT 24 #define IN_CLASSA_MAX 128 #define IN_CLASSA_NET 0xff000000 #define IN_CLASSA_HOST 0x00ffffff #define IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0) #define IN_CLASSB_NSHIFT 16 #define IN_CLASSB_MAX 65536 #define IN_CLASSB_NET 0xffff0000 #define IN_CLASSB_HOST 0x0000ffff #define IN_CLASSB(i) (((LONG)(i) & 0xc0000000) == 0x80000000) #define IN_CLASSC_NSHIFT 8 #define IN_CLASSC_NET 0xffffff00 #define IN_CLASSC_HOST 0x000000ff #define IN_CLASSC(i) (((LONG)(i) & 0xe0000000) == 0xc0000000) #else #define WS_IN_CLASSA_NSHIFT 24 #define WS_IN_CLASSA_MAX 128 #define WS_IN_CLASSA_NET 0xff000000 #define WS_IN_CLASSA_HOST 0x00ffffff #define WS_IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0) #define WS_IN_CLASSB_NSHIFT 16 #define WS_IN_CLASSB_MAX 65536 #define WS_IN_CLASSB_NET 0xffff0000 #define WS_IN_CLASSB_HOST 0x0000ffff #define WS_IN_CLASSB(i) (((LONG)(i) & 0xc0000000) == 0x80000000) #define WS_IN_CLASSC_NSHIFT 8 #define WS_IN_CLASSC_NET 0xffffff00 #define WS_IN_CLASSC_HOST 0x000000ff #define WS_IN_CLASSC(i) (((LONG)(i) & 0xe0000000) == 0xc0000000) #endif /* USE_WS_PREFIX */ #ifndef USE_WS_PREFIX #define INADDR_ANY ((ULONG)0x00000000) #define INADDR_LOOPBACK 0x7f000001 #define INADDR_BROADCAST ((ULONG)0xffffffff) #define INADDR_NONE 0xffffffff #else #define WS_INADDR_ANY ((ULONG)0x00000000) #define WS_INADDR_LOOPBACK 0x7f000001 #define WS_INADDR_BROADCAST ((ULONG)0xffffffff) #define WS_INADDR_NONE 0xffffffff #endif /* USE_WS_PREFIX */ typedef struct WS(sockaddr_in) { short sin_family; WS(u_short) sin_port; struct WS(in_addr) sin_addr; char sin_zero[8]; } SOCKADDR_IN, *PSOCKADDR_IN, *LPSOCKADDR_IN; /* * Multicast group information */ #if !defined(__WINE_WINSOCK2__) struct WS(ip_mreq) { struct WS(in_addr) imr_multiaddr; struct WS(in_addr) imr_interface; }; #endif /* * WSAStartup */ #define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 typedef struct WS(WSAData) { WORD wVersion; WORD wHighVersion; #ifdef _WIN64 WORD iMaxSockets; WORD iMaxUdpDg; char *lpVendorInfo; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; #else char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; WORD iMaxSockets; WORD iMaxUdpDg; char *lpVendorInfo; #endif } WSADATA, *LPWSADATA; /* * {get,set}sockopt */ #ifndef USE_WS_PREFIX #define SOL_SOCKET 0xffff #define SO_DEBUG 0x0001 #define SO_ACCEPTCONN 0x0002 #define SO_REUSEADDR 0x0004 #define SO_EXCLUSIVEADDRUSE ((u_int)(~SO_REUSEADDR)) #define SO_KEEPALIVE 0x0008 #define SO_DONTROUTE 0x0010 #define SO_BROADCAST 0x0020 #define SO_USELOOPBACK 0x0040 #define SO_LINGER 0x0080 #define SO_OOBINLINE 0x0100 #define SO_DONTLINGER ((u_int)(~SO_LINGER)) #define SO_SNDBUF 0x1001 #define SO_RCVBUF 0x1002 #define SO_SNDLOWAT 0x1003 #define SO_RCVLOWAT 0x1004 #define SO_SNDTIMEO 0x1005 #define SO_RCVTIMEO 0x1006 #define SO_ERROR 0x1007 #define SO_TYPE 0x1008 #define SO_BSP_STATE 0x1009 #define SO_RANDOMIZE_PORT 0x3005 #define SO_PORT_SCALABILITY 0x3006 #define SO_REUSE_UNICASTPORT 0x3007 #define SO_REUSE_MULTICASTPORT 0x3008 #define IOCPARM_MASK 0x7f #define IOC_VOID 0x20000000 #define IOC_OUT 0x40000000 #define IOC_IN 0x80000000 #define IOC_INOUT (IOC_IN|IOC_OUT) #define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) #define _IOR(x,y,t) (IOC_OUT|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) #define _IOW(x,y,t) (IOC_IN|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) #else #define WS_SOL_SOCKET 0xffff #define WS_SO_DEBUG 0x0001 #define WS_SO_ACCEPTCONN 0x0002 #define WS_SO_REUSEADDR 0x0004 #define WS_SO_EXCLUSIVEADDRUSE ((WS_u_int)(~WS_SO_REUSEADDR)) #define WS_SO_KEEPALIVE 0x0008 #define WS_SO_DONTROUTE 0x0010 #define WS_SO_BROADCAST 0x0020 #define WS_SO_USELOOPBACK 0x0040 #define WS_SO_LINGER 0x0080 #define WS_SO_OOBINLINE 0x0100 #define WS_SO_DONTLINGER ((WS_u_int)(~WS_SO_LINGER)) #define WS_SO_SNDBUF 0x1001 #define WS_SO_RCVBUF 0x1002 #define WS_SO_SNDLOWAT 0x1003 #define WS_SO_RCVLOWAT 0x1004 #define WS_SO_SNDTIMEO 0x1005 #define WS_SO_RCVTIMEO 0x1006 #define WS_SO_ERROR 0x1007 #define WS_SO_TYPE 0x1008 #define WS_SO_BSP_STATE 0x1009 #define WS_SO_RANDOMIZE_PORT 0x3005 #define WS_SO_PORT_SCALABILITY 0x3006 #define WS_SO_REUSE_UNICASTPORT 0x3007 #define WS_SO_REUSE_MULTICASTPORT 0x3008 #define WS_IOCPARM_MASK 0x7f #define WS_IOC_VOID 0x20000000 #define WS_IOC_OUT 0x40000000 #define WS_IOC_IN 0x80000000 #define WS_IOC_INOUT (WS_IOC_IN|WS_IOC_OUT) #define WS__IO(x,y) (WS_IOC_VOID|((x)<<8)|(y)) #define WS__IOR(x,y,t) (WS_IOC_OUT|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y)) #define WS__IOW(x,y,t) (WS_IOC_IN|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y)) #endif /* IPPROTO_TCP options */ #ifndef USE_WS_PREFIX #define TCP_NODELAY 1 #else #define WS_TCP_NODELAY 1 #endif /* IPPROTO_IP options */ #ifndef __WINE_WINSOCK2__ /* WinSock2 has different values for the IP_ constants */ # ifndef USE_WS_PREFIX # define IP_OPTIONS 1 # define IP_MULTICAST_IF 2 # define IP_MULTICAST_TTL 3 # define IP_MULTICAST_LOOP 4 # define IP_ADD_MEMBERSHIP 5 # define IP_DROP_MEMBERSHIP 6 # define IP_TTL 7 # define IP_TOS 8 # define IP_DONTFRAGMENT 9 # define IP_RECEIVE_BROADCAST 22 # else # define WS_IP_OPTIONS 1 # define WS_IP_MULTICAST_IF 2 # define WS_IP_MULTICAST_TTL 3 # define WS_IP_MULTICAST_LOOP 4 # define WS_IP_ADD_MEMBERSHIP 5 # define WS_IP_DROP_MEMBERSHIP 6 # define WS_IP_TTL 7 # define WS_IP_TOS 8 # define WS_IP_DONTFRAGMENT 9 # define WS_IP_RECEIVE_BROADCAST 22 # endif #endif /* * Socket I/O flags (supported by spec 1.1) */ #ifndef USE_WS_PREFIX #define FIONREAD _IOR('f', 127, ULONG) #define FIONBIO _IOW('f', 126, ULONG) #define FIOASYNC _IOW('f', 125, ULONG) #define SIOCSHIWAT _IOW('s', 0, ULONG) #define SIOCGHIWAT _IOR('s', 1, ULONG) #define SIOCSLOWAT _IOW('s', 2, ULONG) #define SIOCGLOWAT _IOR('s', 3, ULONG) #define SIOCATMARK _IOR('s', 7, ULONG) #else #define WS_FIONREAD WS__IOR('f', 127, ULONG) #define WS_FIONBIO WS__IOW('f', 126, ULONG) #define WS_FIOASYNC WS__IOW('f', 125, ULONG) #define WS_SIOCSHIWAT WS__IOW('s', 0, ULONG) #define WS_SIOCGHIWAT WS__IOR('s', 1, ULONG) #define WS_SIOCSLOWAT WS__IOW('s', 2, ULONG) #define WS_SIOCGLOWAT WS__IOR('s', 3, ULONG) #define WS_SIOCATMARK WS__IOR('s', 7, ULONG) #endif /* * Maximum queue length specifiable by listen. */ #ifndef USE_WS_PREFIX #define SOMAXCONN 5 #define MSG_OOB 0x0001 #define MSG_PEEK 0x0002 #define MSG_DONTROUTE 0x0004 #define MSG_WAITALL 0x0008 #define MSG_INTERRUPT 0x0010 #define MSG_PARTIAL 0x8000 #define MSG_MAXIOVLEN 16 #else /* USE_WS_PREFIX */ #define WS_SOMAXCONN 5 #define WS_MSG_OOB 0x0001 #define WS_MSG_PEEK 0x0002 #define WS_MSG_DONTROUTE 0x0004 #define WS_MSG_WAITALL 0x0008 #define WS_MSG_INTERRUPT 0x0010 #define WS_MSG_PARTIAL 0x8000 #define WS_MSG_MAXIOVLEN 16 #endif /* USE_WS_PREFIX */ /* * Define constant based on rfc883, used by gethostbyxxxx() calls. */ #ifndef USE_WS_PREFIX #define MAXGETHOSTSTRUCT 1024 #else #define MAXGETHOSTSTRUCT 1024 #endif /* * Define flags to be used with the WSAAsyncSelect() call. */ #define FD_READ 0x00000001 #define FD_WRITE 0x00000002 #define FD_OOB 0x00000004 #define FD_ACCEPT 0x00000008 #define FD_CONNECT 0x00000010 #define FD_CLOSE 0x00000020 /* internal per-socket flags */ #ifdef __WINESRC__ #define FD_WINE_LISTENING 0x10000000 #define FD_WINE_NONBLOCKING 0x20000000 #define FD_WINE_CONNECTED 0x40000000 #define FD_WINE_RAW 0x80000000 #define FD_WINE_INTERNAL 0xFFFF0000 #endif /* * All Windows Sockets error constants are biased by WSABASEERR from * the "normal". They are also defined in winerror.h. */ #define WSABASEERR 10000 /* * Windows Sockets definitions of regular Microsoft C error constants */ #define WSAEINTR (WSABASEERR+4) #define WSAEBADF (WSABASEERR+9) #define WSAEACCES (WSABASEERR+13) #define WSAEFAULT (WSABASEERR+14) #define WSAEINVAL (WSABASEERR+22) #define WSAEMFILE (WSABASEERR+24) /* * Windows Sockets definitions of regular Berkeley error constants */ #define WSAEWOULDBLOCK (WSABASEERR+35) #define WSAEINPROGRESS (WSABASEERR+36) #define WSAEALREADY (WSABASEERR+37) #define WSAENOTSOCK (WSABASEERR+38) #define WSAEDESTADDRREQ (WSABASEERR+39) #define WSAEMSGSIZE (WSABASEERR+40) #define WSAEPROTOTYPE (WSABASEERR+41) #define WSAENOPROTOOPT (WSABASEERR+42) #define WSAEPROTONOSUPPORT (WSABASEERR+43) #define WSAESOCKTNOSUPPORT (WSABASEERR+44) #define WSAEOPNOTSUPP (WSABASEERR+45) #define WSAEPFNOSUPPORT (WSABASEERR+46) #define WSAEAFNOSUPPORT (WSABASEERR+47) #define WSAEADDRINUSE (WSABASEERR+48) #define WSAEADDRNOTAVAIL (WSABASEERR+49) #define WSAENETDOWN (WSABASEERR+50) #define WSAENETUNREACH (WSABASEERR+51) #define WSAENETRESET (WSABASEERR+52) #define WSAECONNABORTED (WSABASEERR+53) #define WSAECONNRESET (WSABASEERR+54) #define WSAENOBUFS (WSABASEERR+55) #define WSAEISCONN (WSABASEERR+56) #define WSAENOTCONN (WSABASEERR+57) #define WSAESHUTDOWN (WSABASEERR+58) #define WSAETOOMANYREFS (WSABASEERR+59) #define WSAETIMEDOUT (WSABASEERR+60) #define WSAECONNREFUSED (WSABASEERR+61) #define WSAELOOP (WSABASEERR+62) #define WSAENAMETOOLONG (WSABASEERR+63) #define WSAEHOSTDOWN (WSABASEERR+64) #define WSAEHOSTUNREACH (WSABASEERR+65) #define WSAENOTEMPTY (WSABASEERR+66) #define WSAEPROCLIM (WSABASEERR+67) #define WSAEUSERS (WSABASEERR+68) #define WSAEDQUOT (WSABASEERR+69) #define WSAESTALE (WSABASEERR+70) #define WSAEREMOTE (WSABASEERR+71) /* * Extended Windows Sockets error constant definitions */ #define WSASYSNOTREADY (WSABASEERR+91) #define WSAVERNOTSUPPORTED (WSABASEERR+92) #define WSANOTINITIALISED (WSABASEERR+93) #define WSAEDISCON (WSABASEERR+101) #define WSAENOMORE (WSABASEERR+102) #define WSAECANCELLED (WSABASEERR+103) #define WSAEINVALIDPROCTABLE (WSABASEERR+104) #define WSAEINVALIDPROVIDER (WSABASEERR+105) #define WSAEPROVIDERFAILEDINIT (WSABASEERR+106) #define WSASYSCALLFAILURE (WSABASEERR+107) #define WSASERVICE_NOT_FOUND (WSABASEERR+108) #define WSATYPE_NOT_FOUND (WSABASEERR+109) #define WSA_E_NO_MORE (WSABASEERR+110) #define WSA_E_CANCELLED (WSABASEERR+111) #define WSAEREFUSED (WSABASEERR+112) /* * Error return codes from gethostbyname() and gethostbyaddr() * (when using the resolver). Note that these errors are * retrieved via WSAGetLastError() and must therefore follow * the rules for avoiding clashes with error numbers from * specific implementations or language run-time systems. * For this reason the codes are based at WSABASEERR+1001. * Note also that [WSA]NO_ADDRESS is defined only for * compatibility purposes. */ #ifndef USE_WS_PREFIX #define h_errno WSAGetLastError() #else #define WS_h_errno WSAGetLastError() #endif /* Authoritative Answer: Host not found */ #define WSAHOST_NOT_FOUND (WSABASEERR+1001) /* Non-Authoritative: Host not found, or SERVERFAIL */ #define WSATRY_AGAIN (WSABASEERR+1002) /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ #define WSANO_RECOVERY (WSABASEERR+1003) /* Valid name, no data record of requested type */ #define WSANO_DATA (WSABASEERR+1004) /* no address, look for MX record */ #define WSANO_ADDRESS WSANO_DATA #ifndef USE_WS_PREFIX #define HOST_NOT_FOUND WSAHOST_NOT_FOUND #define TRY_AGAIN WSATRY_AGAIN #define NO_RECOVERY WSANO_RECOVERY #define NO_DATA WSANO_DATA #define NO_ADDRESS WSANO_ADDRESS #endif /* USE_WS_PREFIX */ /* * Windows message parameter composition and decomposition * macros. */ /* * WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation * when constructing the response to a WSAAsyncGetXByY() routine. */ #define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error) /* * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation * when constructing the response to WSAAsyncSelect(). */ #define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error) /* * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application * to extract the buffer length from the lParam in the response * to a WSAGetXByY(). */ #define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam) /* * WSAGETASYNCERROR is intended for use by the Windows Sockets application * to extract the error code from the lParam in the response * to a WSAGetXByY(). */ #define WSAGETASYNCERROR(lParam) HIWORD(lParam) /* * WSAGETSELECTEVENT is intended for use by the Windows Sockets application * to extract the event code from the lParam in the response * to a WSAAsyncSelect(). */ #define WSAGETSELECTEVENT(lParam) LOWORD(lParam) /* * WSAGETSELECTERROR is intended for use by the Windows Sockets application * to extract the error code from the lParam in the response * to a WSAAsyncSelect(). */ #define WSAGETSELECTERROR(lParam) HIWORD(lParam) /* * Prototypes * * Remember to keep this section in sync with the * "Winsock Function Typedefs" section in winsock2.h. */ #if !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES HANDLE WINAPI WSAAsyncGetHostByAddr(HWND,WS(u_int),const char*,int,int,char*,int); HANDLE WINAPI WSAAsyncGetHostByName(HWND,WS(u_int),const char*,char*,int); HANDLE WINAPI WSAAsyncGetProtoByName(HWND,WS(u_int),const char*,char*,int); HANDLE WINAPI WSAAsyncGetProtoByNumber(HWND,WS(u_int),int,char*,int); HANDLE WINAPI WSAAsyncGetServByName(HWND,WS(u_int),const char*,const char*,char*,int); HANDLE WINAPI WSAAsyncGetServByPort(HWND,WS(u_int),int,const char*,char*,int); int WINAPI WSAAsyncSelect(SOCKET,HWND,WS(u_int),LONG); int WINAPI WSACancelAsyncRequest(HANDLE); int WINAPI WSACancelBlockingCall(void); int WINAPI WSACleanup(void); int WINAPI WSAGetLastError(void); BOOL WINAPI WSAIsBlocking(void); FARPROC WINAPI WSASetBlockingHook(FARPROC); void WINAPI WSASetLastError(int); int WINAPI WSAStartup(WORD,LPWSADATA); int WINAPI WSAUnhookBlockingHook(void); SOCKET WINAPI WS(accept)(SOCKET,struct WS(sockaddr)*,int*); int WINAPI WS(bind)(SOCKET,const struct WS(sockaddr)*,int); int WINAPI WS(closesocket)(SOCKET); int WINAPI WS(connect)(SOCKET,const struct WS(sockaddr)*,int); struct WS(hostent)* WINAPI WS(gethostbyaddr)(const char*,int,int); struct WS(hostent)* WINAPI WS(gethostbyname)(const char*); int WINAPI WS(getpeername)(SOCKET,struct WS(sockaddr)*,int*); struct WS(protoent)* WINAPI WS(getprotobyname)(const char*); struct WS(protoent)* WINAPI WS(getprotobynumber)(int); #ifdef WS_DEFINE_SELECT int WINAPI WS(select)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*); #endif struct WS(servent)* WINAPI WS(getservbyname)(const char*,const char*); struct WS(servent)* WINAPI WS(getservbyport)(int,const char*); int WINAPI WS(getsockname)(SOCKET,struct WS(sockaddr)*,int*); int WINAPI WS(getsockopt)(SOCKET,int,int,char*,int*); ULONG WINAPI WS(inet_addr)(const char*); char* WINAPI WS(inet_ntoa)(struct WS(in_addr)); int WINAPI WS(ioctlsocket)(SOCKET,LONG,ULONG*); int WINAPI WS(listen)(SOCKET,int); int WINAPI WS(recv)(SOCKET,char*,int,int); int WINAPI WS(recvfrom)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*); int WINAPI WS(send)(SOCKET,const char*,int,int); int WINAPI WS(sendto)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int); int WINAPI WS(setsockopt)(SOCKET,int,int,const char*,int); int WINAPI WS(shutdown)(SOCKET,int); SOCKET WINAPI WS(socket)(int,int,int); #if defined(__MINGW32__) || defined (_MSC_VER) /* gethostname is not defined on Unix because of conflicts with unistd.h */ int WINAPI WS(gethostname)(char*,int); #endif #endif /* !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES */ #ifdef __cplusplus } #endif #ifndef __WINE_WINSOCK2__ #undef WS #undef WS_API_PROTOTYPES #undef WS_API_TYPEDEFS #endif #endif /* _WINSOCKAPI_ */ ================================================ FILE: wine/windows/winsock2.h ================================================ /* * Winsock 2 definitions - used for ws2_32.dll * * Copyright (C) 1999 Ove Kaaven * Copyright (C) 2001 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * FIXME: Still missing required Winsock 2 definitions. */ #ifndef _WINSOCK2API_ #define _WINSOCK2API_ /* * Setup phase */ /* Everything common between winsock.h and winsock2.h */ #ifndef INCL_WINSOCK_API_PROTOTYPES #define INCL_WINSOCK_API_PROTOTYPES 1 #define WS_API_PROTOTYPES 1 #else #define WS_API_PROTOTYPES INCL_WINSOCK_API_PROTOTYPES #endif #ifndef INCL_WINSOCK_API_TYPEDEFS #define INCL_WINSOCK_API_TYPEDEFS 0 #define WS_API_TYPEDEFS 0 #else #define WS_API_TYPEDEFS INCL_WINSOCK_API_TYPEDEFS #endif #define __WINE_WINSOCK2__ #include #undef __WINE_WINSOCK2__ #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifndef USE_WS_PREFIX #define SO_GROUP_ID 0x2001 #define SO_GROUP_PRIORITY 0x2002 #define SO_MAX_MSG_SIZE 0x2003 #define SO_PROTOCOL_INFOA 0x2004 #define SO_PROTOCOL_INFOW 0x2005 #define SO_PROTOCOL_INFO WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO) #define PVD_CONFIG 0x3001 #define SO_CONDITIONAL_ACCEPT 0x3002 #else #define WS_SO_GROUP_ID 0x2001 #define WS_SO_GROUP_PRIORITY 0x2002 #define WS_SO_MAX_MSG_SIZE 0x2003 #define WS_SO_PROTOCOL_INFOA 0x2004 #define WS_SO_PROTOCOL_INFOW 0x2005 #define WS_SO_PROTOCOL_INFO WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO) #define WS_PVD_CONFIG 0x3001 #define WS_SO_CONDITIONAL_ACCEPT 0x3002 #endif /* protocol types */ #define FROM_PROTOCOL_INFO (-1) #ifndef USE_WS_PREFIX #define SOCK_STREAM 1 #define SOCK_DGRAM 2 #define SOCK_RAW 3 #define SOCK_RDM 4 #define SOCK_SEQPACKET 5 #else /* USE_WS_PREFIX */ #define WS_SOCK_STREAM 1 #define WS_SOCK_DGRAM 2 #define WS_SOCK_RAW 3 #define WS_SOCK_RDM 4 #define WS_SOCK_SEQPACKET 5 #endif /* USE_WS_PREFIX */ /* option flags per socket */ #define FD_MAX_EVENTS 10 #define FD_READ_BIT 0 #define FD_WRITE_BIT 1 #define FD_OOB_BIT 2 #define FD_ACCEPT_BIT 3 #define FD_CONNECT_BIT 4 #define FD_CLOSE_BIT 5 #define FD_QOS_BIT 6 #define FD_GROUP_QOS_BIT 7 #define FD_ROUTING_INTERFACE_CHANGE_BIT 8 #define FD_ADDRESS_LIST_CHANGE_BIT 9 #define FD_QOS 0x00000040 #define FD_GROUP_QOS 0x00000080 #define FD_ROUTING_INTERFACE_CHANGE 0x00000100 #define FD_ADDRESS_LIST_CHANGE 0x00000200 /* Constants for LPCONDITIONPROC */ #define CF_ACCEPT 0x0000 #define CF_REJECT 0x0001 #define CF_DEFER 0x0002 /* Constants for shutdown() */ #define SD_RECEIVE 0x00 #define SD_SEND 0x01 #define SD_BOTH 0x02 /* Constants for WSAPoll() */ #ifndef USE_WS_PREFIX #ifndef __WINE_WINE_PORT_H #define POLLERR 0x0001 #define POLLHUP 0x0002 #define POLLNVAL 0x0004 #define POLLWRNORM 0x0010 #define POLLWRBAND 0x0020 #define POLLRDNORM 0x0100 #define POLLRDBAND 0x0200 #define POLLPRI 0x0400 #define POLLIN (POLLRDNORM|POLLRDBAND) #define POLLOUT (POLLWRNORM) #endif #else #define WS_POLLERR 0x0001 #define WS_POLLHUP 0x0002 #define WS_POLLNVAL 0x0004 #define WS_POLLWRNORM 0x0010 #define WS_POLLWRBAND 0x0020 #define WS_POLLRDNORM 0x0100 #define WS_POLLRDBAND 0x0200 #define WS_POLLPRI 0x0400 #define WS_POLLIN (WS_POLLRDNORM|WS_POLLRDBAND) #define WS_POLLOUT (WS_POLLWRNORM) #endif /* Constants for WSAIoctl() */ #ifdef USE_WS_PREFIX #define WS_IOC_UNIX 0x00000000 #define WS_IOC_WS2 0x08000000 #define WS_IOC_PROTOCOL 0x10000000 #define WS_IOC_VENDOR 0x18000000 #define WS_IOC_VOID 0x20000000 #define WS_IOC_OUT 0x40000000 #define WS_IOC_IN 0x80000000 #define WS_IOC_INOUT (WS_IOC_IN|WS_IOC_OUT) #define _WSAIO(x,y) (WS_IOC_VOID|(x)|(y)) #define _WSAIOR(x,y) (WS_IOC_OUT|(x)|(y)) #define _WSAIOW(x,y) (WS_IOC_IN|(x)|(y)) #define _WSAIORW(x,y) (WS_IOC_INOUT|(x)|(y)) #define WS_SIO_ASSOCIATE_HANDLE _WSAIOW(WS_IOC_WS2,1) #define WS_SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(WS_IOC_WS2,2) #define WS_SIO_FIND_ROUTE _WSAIOR(WS_IOC_WS2,3) #define WS_SIO_FLUSH _WSAIO(WS_IOC_WS2,4) #define WS_SIO_GET_BROADCAST_ADDRESS _WSAIOR(WS_IOC_WS2,5) #define WS_SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(WS_IOC_WS2,6) #define WS_SIO_GET_QOS _WSAIORW(WS_IOC_WS2,7) #define WS_SIO_GET_GROUP_QOS _WSAIORW(WS_IOC_WS2,8) #define WS_SIO_MULTIPOINT_LOOPBACK _WSAIOW(WS_IOC_WS2,9) #define WS_SIO_MULTICAST_SCOPE _WSAIOW(WS_IOC_WS2,10) #define WS_SIO_SET_QOS _WSAIOW(WS_IOC_WS2,11) #define WS_SIO_SET_GROUP_QOS _WSAIOW(WS_IOC_WS2,12) #define WS_SIO_TRANSLATE_HANDLE _WSAIORW(WS_IOC_WS2,13) #define WS_SIO_ROUTING_INTERFACE_QUERY _WSAIORW(WS_IOC_WS2,20) #define WS_SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(WS_IOC_WS2,21) #define WS_SIO_ADDRESS_LIST_QUERY _WSAIOR(WS_IOC_WS2,22) #define WS_SIO_ADDRESS_LIST_CHANGE _WSAIO(WS_IOC_WS2,23) #define WS_SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(WS_IOC_WS2,24) #define WS_SIO_GET_INTERFACE_LIST WS__IOR('t', 127, ULONG) #else /* USE_WS_PREFIX */ #undef IOC_VOID #undef IOC_IN #undef IOC_OUT #undef IOC_INOUT #define IOC_UNIX 0x00000000 #define IOC_WS2 0x08000000 #define IOC_PROTOCOL 0x10000000 #define IOC_VENDOR 0x18000000 #define IOC_VOID 0x20000000 #define IOC_OUT 0x40000000 #define IOC_IN 0x80000000 #define IOC_INOUT (IOC_IN|IOC_OUT) #define _WSAIO(x,y) (IOC_VOID|(x)|(y)) #define _WSAIOR(x,y) (IOC_OUT|(x)|(y)) #define _WSAIOW(x,y) (IOC_IN|(x)|(y)) #define _WSAIORW(x,y) (IOC_INOUT|(x)|(y)) #define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1) #define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2) #define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3) #define SIO_FLUSH _WSAIO(IOC_WS2,4) #define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5) #define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6) #define SIO_GET_QOS _WSAIORW(IOC_WS2,7) #define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8) #define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9) #define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10) #define SIO_SET_QOS _WSAIOW(IOC_WS2,11) #define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12) #define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13) #define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20) #define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21) #define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22) #define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23) #define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24) #define SIO_GET_INTERFACE_LIST _IOR ('t', 127, ULONG) #endif /* USE_WS_PREFIX */ /* Constants for WSAIoctl() */ #define WSA_FLAG_OVERLAPPED 0x0001 #define WSA_FLAG_MULTIPOINT_C_ROOT 0x0002 #define WSA_FLAG_MULTIPOINT_C_LEAF 0x0004 #define WSA_FLAG_MULTIPOINT_D_ROOT 0x0008 #define WSA_FLAG_MULTIPOINT_D_LEAF 0x0010 #define WSA_FLAG_ACCESS_SYSTEM_SECURITY 0x0040 #define WSA_FLAG_NO_HANDLE_INHERIT 0x0080 #define WSA_FLAG_REGISTERED_IO 0x0100 /* Constants for WSAJoinLeaf() */ #define JL_SENDER_ONLY 0x01 #define JL_RECEIVER_ONLY 0x02 #define JL_BOTH 0x04 /* Constants for WSALookupServiceBegin() */ #define LUP_DEEP 0x0001 #define LUP_RETURN_NAME 0x0010 #define LUP_RETURN_TYPE 0x0020 #define LUP_RETURN_VERSION 0x0040 #define LUP_RETURN_COMMENT 0x0080 #define LUP_RETURN_ADDR 0x0100 #define LUP_RETURN_BLOB 0x0200 #define LUP_RETURN_ALIASES 0x0400 #define LUP_RETURN_QUERY_STRING 0x0800 #define LUP_RETURN_ALL (LUP_RETURN_ADDR|LUP_RETURN_BLOB|LUP_RETURN_ALIASES|LUP_RETURN_QUERY_STRING \ |LUP_RETURN_NAME|LUP_RETURN_TYPE|LUP_RETURN_VERSION|LUP_RETURN_COMMENT) /* Constants for dwNameSpace from struct WSANAMESPACE_INFO */ #define NS_ALL 0 #define NS_SAP 1 #define NS_NDS 2 #define NS_PEER_BROWSE 3 #define NS_SLP 5 #define NS_DHCP 6 #define NS_TCPIP_LOCAL 10 #define NS_TCPIP_HOSTS 11 #define NS_DNS 12 #define NS_NETBT 13 #define NS_WINS 14 #define NS_NLA 15 #define NS_BTH 16 #define NS_NBP 20 #define NS_MS 30 #define NS_STDA 31 #define NS_NTDS 32 #define NS_EMAIL 37 #define NS_PNRPNAME 38 #define NS_PNRPCLOUD 39 #define NS_X500 40 #define NS_NIS 41 #define NS_NISPLUS 42 #define NS_WRQ 50 #define NS_NETDES 60 #ifndef GUID_DEFINED #include #endif #define MAX_PROTOCOL_CHAIN 7 #define BASE_PROTOCOL 1 #define LAYERED_PROTOCOL 0 typedef struct _WSAPROTOCOLCHAIN { int ChainLen; /* the length of the chain, */ /* length = 0 means layered protocol, */ /* length = 1 means base protocol, */ /* length > 1 means protocol chain */ DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */ } WSAPROTOCOLCHAIN, * LPWSAPROTOCOLCHAIN; /* constants used in dwProviderFlags from struct WSAPROTOCOL_INFO */ #define PFL_MULTIPLE_PROTO_ENTRIES 0x00000001 #define PFL_RECOMMENDED_PROTO_ENTRY 0x00000002 #define PFL_HIDDEN 0x00000004 #define PFL_MATCHES_PROTOCOL_ZERO 0x00000008 #define XP1_CONNECTIONLESS 0x00000001 #define XP1_GUARANTEED_DELIVERY 0x00000002 #define XP1_GUARANTEED_ORDER 0x00000004 #define XP1_MESSAGE_ORIENTED 0x00000008 #define XP1_PSEUDO_STREAM 0x00000010 #define XP1_GRACEFUL_CLOSE 0x00000020 #define XP1_EXPEDITED_DATA 0x00000040 #define XP1_CONNECT_DATA 0x00000080 #define XP1_DISCONNECT_DATA 0x00000100 #define XP1_SUPPORT_BROADCAST 0x00000200 #define XP1_SUPPORT_MULTIPOINT 0x00000400 #define XP1_MULTIPOINT_CONTROL_PLANE 0x00000800 #define XP1_MULTIPOINT_DATA_PLANE 0x00001000 #define XP1_QOS_SUPPORTED 0x00002000 #define XP1_INTERRUPT 0x00004000 #define XP1_UNI_SEND 0x00008000 #define XP1_UNI_RECV 0x00010000 #define XP1_IFS_HANDLES 0x00020000 #define XP1_PARTIAL_MESSAGE 0x00040000 #define BIGENDIAN 0x0000 #define LITTLEENDIAN 0x0001 #define SECURITY_PROTOCOL_NONE 0x0000 typedef struct /*WS(pollfd)*/ { SOCKET fd; SHORT events; SHORT revents; } WSAPOLLFD; #define WSAPROTOCOL_LEN 255 typedef struct _WSAPROTOCOL_INFOA { DWORD dwServiceFlags1; DWORD dwServiceFlags2; DWORD dwServiceFlags3; DWORD dwServiceFlags4; DWORD dwProviderFlags; GUID ProviderId; DWORD dwCatalogEntryId; WSAPROTOCOLCHAIN ProtocolChain; int iVersion; int iAddressFamily; int iMaxSockAddr; int iMinSockAddr; int iSocketType; int iProtocol; int iProtocolMaxOffset; int iNetworkByteOrder; int iSecurityScheme; DWORD dwMessageSize; DWORD dwProviderReserved; CHAR szProtocol[WSAPROTOCOL_LEN+1]; } WSAPROTOCOL_INFOA, * LPWSAPROTOCOL_INFOA; typedef struct _WSAPROTOCOL_INFOW { DWORD dwServiceFlags1; DWORD dwServiceFlags2; DWORD dwServiceFlags3; DWORD dwServiceFlags4; DWORD dwProviderFlags; GUID ProviderId; DWORD dwCatalogEntryId; WSAPROTOCOLCHAIN ProtocolChain; int iVersion; int iAddressFamily; int iMaxSockAddr; int iMinSockAddr; int iSocketType; int iProtocol; int iProtocolMaxOffset; int iNetworkByteOrder; int iSecurityScheme; DWORD dwMessageSize; DWORD dwProviderReserved; WCHAR szProtocol[WSAPROTOCOL_LEN+1]; } WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW; DECL_WINELIB_TYPE_AW(WSAPROTOCOL_INFO) DECL_WINELIB_TYPE_AW(LPWSAPROTOCOL_INFO) typedef struct _WSANETWORKEVENTS { LONG lNetworkEvents; int iErrorCode[FD_MAX_EVENTS]; } WSANETWORKEVENTS, *LPWSANETWORKEVENTS; typedef struct _WSANSClassInfoA { LPSTR lpszName; DWORD dwNameSpace; DWORD dwValueType; DWORD dwValueSize; LPVOID lpValue; } WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA; typedef struct _WSANSClassInfoW { LPSTR lpszName; DWORD dwNameSpace; DWORD dwValueType; DWORD dwValueSize; LPVOID lpValue; } WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW; DECL_WINELIB_TYPE_AW(WSANSCLASSINFO) DECL_WINELIB_TYPE_AW(PWSANSCLASSINFO) DECL_WINELIB_TYPE_AW(LPWSANSCLASSINFO) typedef struct _WSAServiceClassInfoA { LPGUID lpServiceClassId; LPSTR lpszServiceClassName; DWORD dwCount; LPWSANSCLASSINFOA lpClassInfos; } WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA; typedef struct _WSAServiceClassInfoW { LPGUID lpServiceClassId; LPWSTR lpszServiceClassName; DWORD dwCount; LPWSANSCLASSINFOW lpClassInfos; } WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW; DECL_WINELIB_TYPE_AW(WSASERVICECLASSINFO) DECL_WINELIB_TYPE_AW(PWSASERVICECLASSINFO) DECL_WINELIB_TYPE_AW(LPWSASERVICECLASSINFO) #define WSAEVENT HANDLE #define LPWSAEVENT LPHANDLE #define WSAOVERLAPPED OVERLAPPED typedef struct _OVERLAPPED* LPWSAOVERLAPPED; #define WSA_IO_PENDING (ERROR_IO_PENDING) #define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE) #define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE) #define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) #define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY) #define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED) #define WSA_INVALID_EVENT ((WSAEVENT)NULL) #define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS) #define WSA_WAIT_FAILED ((DWORD)-1) #define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0) #define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION) #define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT) #define WSA_INFINITE (INFINITE) typedef unsigned int GROUP; #define SG_UNCONSTRAINED_GROUP 0x01 #define SG_CONSTRAINED_GROUP 0x02 /* * FLOWSPEC and SERVICETYPE should eventually move to qos.h */ typedef ULONG SERVICETYPE; typedef struct _FLOWSPEC { unsigned int TokenRate; unsigned int TokenBucketSize; unsigned int PeakBandwidth; unsigned int Latency; unsigned int DelayVariation; SERVICETYPE ServiceType; unsigned int MaxSduSize; unsigned int MinimumPolicedSize; } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC; typedef struct _QUALITYOFSERVICE { FLOWSPEC SendingFlowspec; FLOWSPEC ReceivingFlowspec; WSABUF ProviderSpecific; } QOS, *LPQOS; typedef int (CALLBACK *LPCONDITIONPROC) ( LPWSABUF lpCallerId, LPWSABUF lpCallerData, LPQOS lpSQOS, LPQOS lpGQOS, LPWSABUF lpCalleeId, LPWSABUF lpCalleeData, GROUP *g, DWORD_PTR dwCallbackData ); typedef void (CALLBACK *LPWSAOVERLAPPED_COMPLETION_ROUTINE) ( DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags ); #ifndef _tagBLOB_DEFINED #define _tagBLOB_DEFINED #define _BLOB_DEFINED #define _LPBLOB_DEFINED typedef struct _BLOB { ULONG cbSize; BYTE *pBlobData; } BLOB, *LPBLOB; #endif /* addressfamily protocol pairs */ typedef struct _AFPROTOCOLS { INT iAddressFamily; INT iProtocol; } AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS; /* client query definitions */ typedef enum _WSAEcomparator { COMP_EQUAL = 0, COMP_NOTLESS } WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR; typedef struct _WSAVersion { DWORD dwVersion; WSAECOMPARATOR ecHow; } WSAVERSION, *PWSAVERSION, *LPWSAVERSION; typedef struct _WSAQuerySetA { DWORD dwSize; LPSTR lpszServiceInstanceName; LPGUID lpServiceClassId; LPWSAVERSION lpVersion; LPSTR lpszComment; DWORD dwNameSpace; LPGUID lpNSProviderId; LPSTR lpszContext; DWORD dwNumberOfProtocols; LPAFPROTOCOLS lpafpProtocols; LPSTR lpszQueryString; DWORD dwNumberOfCsAddrs; LPCSADDR_INFO lpcsaBuffer; DWORD dwOutputFlags; LPBLOB lpBlob; } WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA; typedef struct _WSAQuerySetW { DWORD dwSize; LPWSTR lpszServiceInstanceName; LPGUID lpServiceClassId; LPWSAVERSION lpVersion; LPWSTR lpszComment; DWORD dwNameSpace; LPGUID lpNSProviderId; LPWSTR lpszContext; DWORD dwNumberOfProtocols; LPAFPROTOCOLS lpafpProtocols; LPWSTR lpszQueryString; DWORD dwNumberOfCsAddrs; LPCSADDR_INFO lpcsaBuffer; DWORD dwOutputFlags; LPBLOB lpBlob; } WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW; DECL_WINELIB_TYPE_AW(WSAQUERYSET) DECL_WINELIB_TYPE_AW(PWSAQUERYSET) DECL_WINELIB_TYPE_AW(LPWSAQUERYSET) typedef enum _WSAESETSERVICEOP { RNRSERVICE_REGISTER = 0, RNRSERVICE_DEREGISTER, RNRSERVICE_DELETE } WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP; typedef struct _WSANAMESPACE_INFOA { GUID NSProviderId; DWORD dwNameSpace; BOOL fActive; DWORD dwVersion; LPSTR lpszIdentifier; } WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA; typedef struct _WSANAMESPACE_INFOW { GUID NSProviderId; DWORD dwNameSpace; BOOL fActive; DWORD dwVersion; LPWSTR lpszIdentifier; } WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW; DECL_WINELIB_TYPE_AW(WSANAMESPACE_INFO) DECL_WINELIB_TYPE_AW(PWSANAMESPACE_INFO) DECL_WINELIB_TYPE_AW(LPWSANAMESPACE_INFO) typedef enum _WSACOMPLETIONTYPE { NSP_NOTIFY_IMMEDIATELY = 0, NSP_NOTIFY_HWND = 1, NSP_NOTIFY_EVENT = 2, NSP_NOTIFY_PORT = 3, NSP_NOTIFY_APC = 4 } WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, * LPWSACOMPLETIONTYPE; typedef struct _WSACOMPLETION { WSACOMPLETIONTYPE Type; union { struct { HWND hWnd; UINT uMsg; WPARAM context; } WindowMessage; struct { LPWSAOVERLAPPED lpOverlapped; } Event; struct { LPWSAOVERLAPPED lpOverlapped; LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc; } Apc; struct { LPWSAOVERLAPPED lpOverlapped; HANDLE hPort; ULONG_PTR Key; } Port; } Parameters; } WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION; /* * Winsock Function Typedefs * * Remember to keep this section in sync with the * "Prototypes" section in winsock.h. */ #if WS_API_TYPEDEFS typedef HANDLE (WINAPI *LPFN_WSAASYNCGETHOSTBYADDR)(HWND,WS(u_int),const char*,int,int,char*,int); typedef HANDLE (WINAPI *LPFN_WSAASYNCGETHOSTBYNAME)(HWND,WS(u_int),const char*,char*,int); typedef HANDLE (WINAPI *LPFN_WSAASYNCGETPROTOBYNAME)(HWND,WS(u_int),const char*,char*,int); typedef HANDLE (WINAPI *LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND,WS(u_int),int,char*,int); typedef HANDLE (WINAPI *LPFN_WSAASYNCGETSERVBYNAME)(HWND,WS(u_int),const char*,const char*,char*,int); typedef HANDLE (WINAPI *LPFN_WSAASYNCGETSERVBYPORT)(HWND,WS(u_int),int,const char*,char*,int); typedef int (WINAPI *LPFN_WSAASYNCSELECT)(SOCKET,HWND,WS(u_int),LONG); typedef int (WINAPI *LPFN_WSACANCELASYNCREQUEST)(HANDLE); typedef int (WINAPI *LPFN_WSACANCELBLOCKINGCALL)(void); typedef int (WINAPI *LPFN_WSACLEANUP)(void); typedef int (WINAPI *LPFN_WSAGETLASTERROR)(void); typedef BOOL (WINAPI *LPFN_WSAISBLOCKING)(void); typedef FARPROC (WINAPI *LPFN_WSASETBLOCKINGHOOK)(FARPROC); typedef void (WINAPI *LPFN_WSASETLASTERROR)(int); typedef int (WINAPI *LPFN_WSASTARTUP)(WORD,LPWSADATA); typedef int (WINAPI *LPFN_WSAUNHOOKBLOCKINGHOOK)(void); typedef SOCKET (WINAPI *LPFN_ACCEPT)(SOCKET,struct WS(sockaddr)*,int*); typedef int (WINAPI *LPFN_BIND)(SOCKET,const struct WS(sockaddr)*,int); typedef int (WINAPI *LPFN_CLOSESOCKET)(SOCKET); typedef int (WINAPI *LPFN_CONNECT)(SOCKET,const struct WS(sockaddr)*,int); typedef struct WS(hostent)* (WINAPI *LPFN_GETHOSTBYADDR)(const char*,int,int); typedef struct WS(hostent)* (WINAPI *LPFN_GETHOSTBYNAME)(const char*); typedef int (WINAPI *LPFN_GETHOSTNAME)(char*,int); typedef int (WINAPI *LPFN_GETPEERNAME)(SOCKET,struct WS(sockaddr)*,int*); typedef struct WS(protoent)* (WINAPI *LPFN_GETPROTOBYNAME)(const char*); typedef struct WS(protoent)* (WINAPI *LPFN_GETPROTOBYNUMBER)(int); #ifdef WS_DEFINE_SELECT typedef int (WINAPI* LPFN_SELECT)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*); #endif typedef struct WS(servent)* (WINAPI *LPFN_GETSERVBYNAME)(const char*,const char*); typedef struct WS(servent)* (WINAPI *LPFN_GETSERVBYPORT)(int,const char*); typedef int (WINAPI *LPFN_GETSOCKNAME)(SOCKET,struct WS(sockaddr)*,int*); typedef int (WINAPI *LPFN_GETSOCKOPT)(SOCKET,int,int,char*,int*); typedef ULONG (WINAPI *LPFN_HTONL)(ULONG); typedef WS(u_short) (WINAPI *LPFN_HTONS)(WS(u_short)); typedef ULONG (WINAPI *LPFN_INET_ADDR)(const char*); typedef char* (WINAPI *LPFN_INET_NTOA)(struct WS(in_addr)); typedef int (WINAPI *LPFN_IOCTLSOCKET)(SOCKET,LONG,ULONG*); typedef int (WINAPI *LPFN_LISTEN)(SOCKET,int); typedef ULONG (WINAPI *LPFN_NTOHL)(ULONG); typedef WS(u_short) (WINAPI *LPFN_NTOHS)(WS(u_short)); typedef int (WINAPI *LPFN_RECV)(SOCKET,char*,int,int); typedef int (WINAPI *LPFN_RECVFROM)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*); typedef int (WINAPI *LPFN_SEND)(SOCKET,const char*,int,int); typedef int (WINAPI *LPFN_SENDTO)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int); typedef int (WINAPI *LPFN_SETSOCKOPT)(SOCKET,int,int,const char*,int); typedef int (WINAPI *LPFN_SHUTDOWN)(SOCKET,int); typedef SOCKET (WINAPI *LPFN_SOCKET)(int,int,int); #endif /* WS_API_TYPEDEFS */ /* * Winsock2 Prototypes * * Remember to keep this section in sync with the * "Winsock2 Function Typedefs" section below. */ #if WS_API_PROTOTYPES SOCKET WINAPI WSAAccept(SOCKET,struct WS(sockaddr)*,LPINT,LPCONDITIONPROC,DWORD_PTR); INT WINAPI WSAAddressToStringA(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOA,LPSTR,LPDWORD); INT WINAPI WSAAddressToStringW(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD); #define WSAAddressToString WINELIB_NAME_AW(WSAAddressToString) BOOL WINAPI WSACloseEvent(WSAEVENT); int WINAPI WSAConnect(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS); WSAEVENT WINAPI WSACreateEvent(void); INT WINAPI WSADuplicateSocketA(SOCKET,DWORD,LPWSAPROTOCOL_INFOA); INT WINAPI WSADuplicateSocketW(SOCKET,DWORD,LPWSAPROTOCOL_INFOW); #define WSADuplicateSocket WINELIB_NAME_AW(WSADuplicateSocket) INT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD,LPWSANAMESPACE_INFOA); INT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD,LPWSANAMESPACE_INFOW); #define WSAEnumNameSpaceProviders WINELIB_NAME_AW(WSAEnumNameSpaceProviders) int WINAPI WSAEnumNetworkEvents(SOCKET,WSAEVENT,LPWSANETWORKEVENTS); int WINAPI WSAEnumProtocolsA(LPINT,LPWSAPROTOCOL_INFOA,LPDWORD); int WINAPI WSAEnumProtocolsW(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD); #define WSAEnumProtocols WINELIB_NAME_AW(WSAEnumProtocols) int WINAPI WSAEventSelect(SOCKET,WSAEVENT,LONG); BOOL WINAPI WSAGetOverlappedResult(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD); BOOL WINAPI WSAGetQOSByName(SOCKET,LPWSABUF,LPQOS); INT WINAPI WSAGetServiceClassInfoA(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOA); INT WINAPI WSAGetServiceClassInfoW(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOW); #define WSAGetServiceClassInfo WINELIB_NAME_AW(WSAGetServiceClassInfo) INT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID,LPSTR,LPDWORD); INT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID,LPWSTR,LPDWORD); #define WSAGetServiceClassNameByClassId WINELIB_NAME_AW(WSAGetServiceClassNameByClassId) int WINAPI WSAHtonl(SOCKET,ULONG,ULONG*); int WINAPI WSAHtons(SOCKET,WS(u_short),WS(u_short)*); int WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA); int WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW); #define WSAInstallServiceClass WINELIB_NAME_AW(WSAInstallServiceClass) int WINAPI WSAIoctl(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); SOCKET WINAPI WSAJoinLeaf(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD); INT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA,DWORD,LPHANDLE); INT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW,DWORD,LPHANDLE); #define WSALookupServiceBegin WINELIB_NAME_AW(WSALookupServiceBegin) INT WINAPI WSALookupServiceEnd(HANDLE); INT WINAPI WSALookupServiceNextA(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETA); INT WINAPI WSALookupServiceNextW(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETW); #define WSALookupServiceNext WINELIB_NAME_AW(WSALookupServiceNext) int WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); int WINAPI WSANtohl(SOCKET,ULONG,ULONG*); int WINAPI WSANtohs(SOCKET,WS(u_short),WS(u_short)*); int WINAPI WSAPoll(WSAPOLLFD*,ULONG,int); INT WINAPI WSAProviderConfigChange(LPHANDLE,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); int WINAPI WSARecv(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); int WINAPI WSARecvDisconnect(SOCKET,LPWSABUF); int WINAPI WSARecvFrom(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,struct WS(sockaddr)*,LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); INT WINAPI WSARemoveServiceClass(LPGUID); BOOL WINAPI WSAResetEvent(WSAEVENT); int WINAPI WSASend(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); int WINAPI WSASendDisconnect(SOCKET,LPWSABUF); int WINAPI WSASendTo(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct WS(sockaddr)*,int,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); BOOL WINAPI WSASetEvent(WSAEVENT); INT WINAPI WSASetServiceA(LPWSAQUERYSETA,WSAESETSERVICEOP,DWORD); INT WINAPI WSASetServiceW(LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD); #define WSASetService WINELIB_NAME_AW(WSASetService) SOCKET WINAPI WSASocketA(int,int,int,LPWSAPROTOCOL_INFOA,GROUP,DWORD); SOCKET WINAPI WSASocketW(int,int,int,LPWSAPROTOCOL_INFOW,GROUP,DWORD); #define WSASocket WINELIB_NAME_AW(WSASocket) INT WINAPI WSAStringToAddressA(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT); INT WINAPI WSAStringToAddressW(LPWSTR,INT,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPINT); #define WSAStringToAddress WINELIB_NAME_AW(WSAStringToAddress) DWORD WINAPI WSAWaitForMultipleEvents(DWORD,const WSAEVENT*,BOOL,DWORD,BOOL); #endif /* WS_API_PROTOTYPES */ /* * Winsock2 Function Typedefs * * Remember to keep this section in sync with the * "Winsock2 Prototypes" section above. */ #if WS_API_TYPEDEFS typedef SOCKET (WINAPI *LPFN_WSAACCEPT)(SOCKET,struct WS(sockaddr)*,LPINT,LPCONDITIONPROC,DWORD_PTR); typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOA,LPSTR,LPDWORD); typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD); #define LPFN_WSAADDRESSTOSTRING WINELIB_NAME_AW(LPFN_WSAADDRESSTOSTRING) typedef BOOL (WINAPI *LPFN_WSACLOSEEVENT)(WSAEVENT); typedef int (WINAPI *LPFN_WSACONNECT)(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS); typedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT)(void); typedef INT (WINAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET,DWORD,LPWSAPROTOCOL_INFOA); typedef INT (WINAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET,DWORD,LPWSAPROTOCOL_INFOW); #define LPFN_WSADUPLICATESOCKET WINELIB_NAME_AW(LPFN_WSADUPLICATESOCKET) typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD,LPWSANAMESPACE_INFOA); typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD,LPWSANAMESPACE_INFOW); #define LPFN_WSAENUMNAMESPACEPROVIDERS WINELIB_NAME_AW(LPFN_WSAENUMNAMESPACEPROVIDERS) typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET,WSAEVENT,LPWSANETWORKEVENTS); typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT,LPWSAPROTOCOL_INFOA,LPDWORD); typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD); #define LPFN_WSAENUMPROTOCOLS WINELIB_NAME_AW(LPFN_WSAENUMPROTOCOLS) typedef int (WINAPI *LPFN_WSAEVENTSELECT)(SOCKET,WSAEVENT,LONG); typedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD); typedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME)(SOCKET,LPWSABUF,LPQOS); typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOA); typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOW); #define LPFN_LPFNWSAGETSERVICECLASSINFO WINELIB_NAME_AW(LPFN_LPFNWSAGETSERVICECLASSINFO) typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID,LPSTR,LPDWORD); typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID,LPWSTR,LPDWORD); #define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID WINELIB_NAME_AW(LPFN_WSAGETSERVICECLASSNAMEBYCLASSID) typedef int (WINAPI *LPFN_WSAHTONL)(SOCKET,ULONG,ULONG*); typedef int (WINAPI *LPFN_WSAHTONS)(SOCKET,WS(u_short),WS(u_short)*); typedef int (WINAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA); typedef int (WINAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW); typedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); typedef int (WINAPI *LPFN_WSAJOINLEAF)(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD); typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA,DWORD,LPHANDLE); typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW,DWORD,LPHANDLE); #define LPFN_WSALOOKUPSERVICEBEGIN WINELIB_NAME_AW(LPFN_WSALOOKUPSERVICEBEGIN) typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE); typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETA); typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETW); #define LPFN_WSALOOKUPSERVICENEXT WINELIB_NAME_AW(LPFN_WSALOOKUPSERVICENEXT) typedef int (WINAPI *LPFN_WSANSPIOCTL)(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); typedef int (WINAPI *LPFN_WSANTOHL)(SOCKET,ULONG,ULONG*); typedef int (WINAPI *LPFN_WSANTOHS)(SOCKET,WS(u_short),WS(u_short)*); typedef INT (WINAPI *LPFN_WSAPROVIDERCONFIGCHANGE)(LPHANDLE,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); typedef int (WINAPI *LPFN_WSAPOLL)(WSAPOLLFD*,ULONG,int); typedef int (WINAPI *LPFN_WSARECV)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); typedef int (WINAPI *LPFN_WSARECVDISCONNECT)(SOCKET,LPWSABUF); typedef int (WINAPI *LPFN_WSARECVFROM)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,struct WS(sockaddr)*,LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); typedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID); typedef BOOL (WINAPI *LPFN_WSARESETEVENT)(WSAEVENT); typedef int (WINAPI *LPFN_WSASEND)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); typedef int (WINAPI *LPFN_WSASENDDISCONNECT)(SOCKET,LPWSABUF); typedef int (WINAPI *LPFN_WSASENDTO)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct WS(sockaddr)*,int,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE); typedef BOOL (WINAPI *LPFN_WSASETEVENT)(WSAEVENT); typedef INT (WINAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA,WSAESETSERVICEOP,DWORD); typedef INT (WINAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD); #define LPFN_WSASETSERVICE WINELIB_NAME_AW(LPFN_WSASETSERVICE) typedef SOCKET (WINAPI *LPFN_WSASOCKETA)(int,int,int,LPWSAPROTOCOL_INFOA,GROUP,DWORD); typedef SOCKET (WINAPI *LPFN_WSASOCKETW)(int,int,int,LPWSAPROTOCOL_INFOW,GROUP,DWORD); typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT); typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW)(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT); #define LPFN_WSASOCKET WINELIB_NAME_AW(LPFN_WSASOCKET) #define LPFN_WSASTRINGTOADDRESS WINELIB_NAME_AW(LPFN_WSASTRINGTOADDRESS) typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD,const WSAEVENT*,BOOL,DWORD,BOOL); #endif /* WS_API_TYPEDEFS */ /* Condition function return values */ #define CF_ACCEPT 0x0000 #define CF_REJECT 0x0001 #define CF_DEFER 0x0002 #ifdef __cplusplus } #endif #undef WS #undef WS_API_PROTOTYPES #undef WS_API_TYPEDEFS #endif /* __WINSOCK2API__ */ ================================================ FILE: wine/windows/winspool.h ================================================ /* Definitions for printing * * Copyright 1998 Huw Davies, Andreas Mohr * * Portions Copyright (c) 1999 Corel Corporation * (Paul Quinn, Albert Den Haan) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINSPOOL_H #define __WINE_WINSPOOL_H #ifdef __cplusplus extern "C" { #endif /* DEFINES */ #define PRINTER_ATTRIBUTE_QUEUED 0x00000001 #define PRINTER_ATTRIBUTE_DIRECT 0x00000002 #define PRINTER_ATTRIBUTE_DEFAULT 0x00000004 #define PRINTER_ATTRIBUTE_SHARED 0x00000008 #define PRINTER_ATTRIBUTE_NETWORK 0x00000010 #define PRINTER_ATTRIBUTE_HIDDEN 0x00000020 #define PRINTER_ATTRIBUTE_LOCAL 0x00000040 #define PRINTER_ATTRIBUTE_ENABLE_DEVQ 0x00000080 #define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS 0x00000100 #define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200 #define PRINTER_ATTRIBUTE_WORK_OFFLINE 0x00000400 #define PRINTER_ATTRIBUTE_ENABLE_BIDI 0x00000800 #define PRINTER_ATTRIBUTE_RAW_ONLY 0x00001000 #define PRINTER_ATTRIBUTE_PUBLISHED 0x00002000 #define PRINTER_CONTROL_PAUSE 1 #define PRINTER_CONTROL_RESUME 2 #define PRINTER_CONTROL_PURGE 3 #define PRINTER_CONTROL_SET_STATUS 4 #define PRINTER_ENUM_DEFAULT 0x00000001 #define PRINTER_ENUM_LOCAL 0x00000002 #define PRINTER_ENUM_CONNECTIONS 0x00000004 #define PRINTER_ENUM_FAVORITE 0x00000004 #define PRINTER_ENUM_NAME 0x00000008 #define PRINTER_ENUM_REMOTE 0x00000010 #define PRINTER_ENUM_SHARED 0x00000020 #define PRINTER_ENUM_NETWORK 0x00000040 #define PRINTER_ENUM_EXPAND 0x00004000 #define PRINTER_ENUM_CONTAINER 0x00008000 #define PRINTER_ENUM_ICONMASK 0x00ff0000 #define PRINTER_ENUM_ICON1 0x00010000 #define PRINTER_ENUM_ICON2 0x00020000 #define PRINTER_ENUM_ICON3 0x00040000 #define PRINTER_ENUM_ICON4 0x00080000 #define PRINTER_ENUM_ICON5 0x00100000 #define PRINTER_ENUM_ICON6 0x00200000 #define PRINTER_ENUM_ICON7 0x00400000 #define PRINTER_ENUM_ICON8 0x00800000 #define PRINTER_ENUM_HIDE 0x01000000 /* various printer statuses */ #define PRINTER_STATUS_PAUSED 0x00000001 #define PRINTER_STATUS_ERROR 0x00000002 #define PRINTER_STATUS_PENDING_DELETION 0x00000004 #define PRINTER_STATUS_PAPER_JAM 0x00000008 #define PRINTER_STATUS_PAPER_OUT 0x00000010 #define PRINTER_STATUS_MANUAL_FEED 0x00000020 #define PRINTER_STATUS_PAPER_PROBLEM 0x00000040 #define PRINTER_STATUS_OFFLINE 0x00000080 #define PRINTER_STATUS_IO_ACTIVE 0x00000100 #define PRINTER_STATUS_BUSY 0x00000200 #define PRINTER_STATUS_PRINTING 0x00000400 #define PRINTER_STATUS_OUTPUT_BIN_FULL 0x00000800 #define PRINTER_STATUS_NOT_AVAILABLE 0x00001000 #define PRINTER_STATUS_WAITING 0x00002000 #define PRINTER_STATUS_PROCESSING 0x00004000 #define PRINTER_STATUS_INITIALIZING 0x00008000 #define PRINTER_STATUS_WARMING_UP 0x00010000 #define PRINTER_STATUS_TONER_LOW 0x00020000 #define PRINTER_STATUS_NO_TONER 0x00040000 #define PRINTER_STATUS_PAGE_PUNT 0x00080000 #define PRINTER_STATUS_USER_INTERVENTION 0x00100000 #define PRINTER_STATUS_OUT_OF_MEMORY 0x00200000 #define PRINTER_STATUS_DOOR_OPEN 0x00400000 #define PRINTER_STATUS_SERVER_UNKNOWN 0x00800000 #define PRINTER_STATUS_POWER_SAVE 0x01000000 #define PRINTER_STATUS_SERVER_OFFLINE 0x02000000 #define PRINTER_STATUS_DRIVER_UPDATE_NEEDED 0x04000000 #define NO_PRIORITY 0 #define MAX_PRIORITY 99 #define MIN_PRIORITY 1 #define DEF_PRIORITY 1 #define JOB_CONTROL_PAUSE 1 #define JOB_CONTROL_RESUME 2 #define JOB_CONTROL_CANCEL 3 #define JOB_CONTROL_RESTART 4 #define JOB_CONTROL_DELETE 5 #define JOB_CONTROL_SENT_TO_PRINTER 6 #define JOB_CONTROL_LAST_PAGE_EJECTED 7 #define JOB_STATUS_PAUSED 0x0001 #define JOB_STATUS_ERROR 0x0002 #define JOB_STATUS_DELETING 0x0004 #define JOB_STATUS_SPOOLING 0x0008 #define JOB_STATUS_PRINTING 0x0010 #define JOB_STATUS_OFFLINE 0x0020 #define JOB_STATUS_PAPEROUT 0x0040 #define JOB_STATUS_PRINTED 0x0080 #define JOB_STATUS_DELETED 0x0100 #define JOB_STATUS_BLOCKED_DEVQ 0x0200 #define JOB_STATUS_USER_INTERVENTION 0x0400 #define JOB_POSITION_UNSPECIFIED 1 #define DI_CHANNEL 1 #define DI_READ_SPOOL_JOB 3 #define FORM_USER 0 #define FORM_BUILTIN 1 #define FORM_PRINTER 2 #define PORT_TYPE_WRITE 1 #define PORT_TYPE_READ 2 #define PORT_TYPE_REDIRECTED 4 #define PORT_TYPE_NET_ATTACHED 8 #define PORT_STATUS_TYPE_ERROR 1 #define PORT_STATUS_TYPE_WARNING 2 #define PORT_STATUS_TYPE_INFO 3 #define PORT_STATUS_OFFLINE 1 #define PORT_STATUS_PAPER_JAM 2 #define PORT_STATUS_PAPER_OUT 3 #define PORT_STATUS_OUTPUT_BIN_FULL 4 #define PORT_STATUS_PAPER_PROBLEM 5 #define PORT_STATUS_NO_TONER 6 #define PORT_STATUS_DOOR_OPEN 7 #define PORT_STATUS_USER_INTERVENTION 8 #define PORT_STATUS_OUT_OF_MEMORY 9 #define PORT_STATUS_TONER_LOW 10 #define PORT_STATUS_WARMING_UP 11 #define PORT_STATUS_POWER_SAVE 12 #define PRINTER_NOTIFY_TYPE 0 #define JOB_NOTIFY_TYPE 1 #define PRINTER_NOTIFY_FIELD_SERVER_NAME 0x00 #define PRINTER_NOTIFY_FIELD_PRINTER_NAME 0x01 #define PRINTER_NOTIFY_FIELD_SHARE_NAME 0x02 #define PRINTER_NOTIFY_FIELD_PORT_NAME 0x03 #define PRINTER_NOTIFY_FIELD_DRIVER_NAME 0x04 #define PRINTER_NOTIFY_FIELD_COMMENT 0x05 #define PRINTER_NOTIFY_FIELD_LOCATION 0x06 #define PRINTER_NOTIFY_FIELD_DEVMODE 0x07 #define PRINTER_NOTIFY_FIELD_SEPFILE 0x08 #define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR 0x09 #define PRINTER_NOTIFY_FIELD_PARAMETERS 0x0a #define PRINTER_NOTIFY_FIELD_DATATYPE 0x0b #define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0c #define PRINTER_NOTIFY_FIELD_ATTRIBUTES 0x0d #define PRINTER_NOTIFY_FIELD_PRIORITY 0x0e #define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY 0x0f #define PRINTER_NOTIFY_FIELD_START_TIME 0x10 #define PRINTER_NOTIFY_FIELD_UNTIL_TIME 0x11 #define PRINTER_NOTIFY_FIELD_STATUS 0x12 #define PRINTER_NOTIFY_FIELD_STATUS_STRING 0x13 #define PRINTER_NOTIFY_FIELD_CJOBS 0x14 #define PRINTER_NOTIFY_FIELD_AVERAGE_PPM 0x15 #define PRINTER_NOTIFY_FIELD_TOTAL_PAGES 0x16 #define PRINTER_NOTIFY_FIELD_PAGES_PRINTED 0x17 #define PRINTER_NOTIFY_FIELD_TOTAL_BYTES 0x18 #define PRINTER_NOTIFY_FIELD_BYTES_PRINTED 0x19 #define JOB_NOTIFY_FIELD_PRINTER_NAME 0x00 #define JOB_NOTIFY_FIELD_MACHINE_NAME 0x01 #define JOB_NOTIFY_FIELD_PORT_NAME 0x02 #define JOB_NOTIFY_FIELD_USER_NAME 0x03 #define JOB_NOTIFY_FIELD_NOTIFY_NAME 0x04 #define JOB_NOTIFY_FIELD_DATATYPE 0x05 #define JOB_NOTIFY_FIELD_PRINT_PROCESSOR 0x06 #define JOB_NOTIFY_FIELD_PARAMETERS 0x07 #define JOB_NOTIFY_FIELD_DRIVER_NAME 0x08 #define JOB_NOTIFY_FIELD_DEVMODE 0x09 #define JOB_NOTIFY_FIELD_STATUS 0x0a #define JOB_NOTIFY_FIELD_STATUS_STRING 0x0b #define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0c #define JOB_NOTIFY_FIELD_DOCUMENT 0x0d #define JOB_NOTIFY_FIELD_PRIORITY 0x0e #define JOB_NOTIFY_FIELD_POSITION 0x0f #define JOB_NOTIFY_FIELD_SUBMITTED 0x10 #define JOB_NOTIFY_FIELD_START_TIME 0x11 #define JOB_NOTIFY_FIELD_UNTIL_TIME 0x12 #define JOB_NOTIFY_FIELD_TIME 0x13 #define JOB_NOTIFY_FIELD_TOTAL_PAGES 0x14 #define JOB_NOTIFY_FIELD_PAGES_PRINTED 0x15 #define JOB_NOTIFY_FIELD_TOTAL_BYTES 0x16 #define JOB_NOTIFY_FIELD_BYTES_PRINTED 0x17 #define PRINTER_NOTIFY_OPTIONS_REFRESH 1 #define PRINTER_NOTIFY_INFO_DISCARDED 1 #define PRINTER_CHANGE_ADD_PRINTER 0x00000001 #define PRINTER_CHANGE_SET_PRINTER 0x00000002 #define PRINTER_CHANGE_DELETE_PRINTER 0x00000004 #define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 0x00000008 #define PRINTER_CHANGE_PRINTER 0x000000ff #define PRINTER_CHANGE_ADD_JOB 0x00000100 #define PRINTER_CHANGE_SET_JOB 0x00000200 #define PRINTER_CHANGE_DELETE_JOB 0x00000400 #define PRINTER_CHANGE_WRITE_JOB 0x00000800 #define PRINTER_CHANGE_JOB 0x0000ff00 #define PRINTER_CHANGE_ADD_FORM 0x00010000 #define PRINTER_CHANGE_SET_FORM 0x00020000 #define PRINTER_CHANGE_DELETE_FORM 0x00040000 #define PRINTER_CHANGE_FORM 0x00070000 #define PRINTER_CHANGE_ADD_PORT 0x00100000 #define PRINTER_CHANGE_CONFIGURE_PORT 0x00200000 #define PRINTER_CHANGE_DELETE_PORT 0x00400000 #define PRINTER_CHANGE_PORT 0x00700000 #define PRINTER_CHANGE_ADD_PRINT_PROCESSOR 0x01000000 #define PRINTER_CHANGE_DELETE_PRINTER_PROCESSOR 0x04000000 #define PRINTER_CHANGE_PRINT_PROCESSOR 0x07000000 #define PRINTER_CHANGE_ADD_PRINTER_DRIVER 0x10000000 #define PRINTER_CHANGE_SET_PRINTER_DRIVER 0x20000000 #define PRINTER_CHANGE_DELETE_PRINTER_DRIVER 0x40000000 #define PRINTER_CHANGE_PRINTER_DRIVER 0x70000000 #define PRINTER_CHANGE_TIMEOUT 0x80000000 #define PRINTER_CHANGE_ALL 0x7777ffff #define PRINTER_ERROR_INFORMATION 0x80000000 #define PRINTER_ERROR_WARNING 0x40000000 #define PRINTER_ERROR_SEVERE 0x20000000 #define PRINTER_ERROR_OUTODPAPER 0x00000001 #define PRINTER_ERROR_JAM 0x00000002 #define PRINTER_ERROR_OUTOFTONER 0x00000004 /* Access Rights for Printserver, Printers and Printjobs */ #define SERVER_ACCESS_ADMINISTER 0x00000001 #define SERVER_ACCESS_ENUMERATE 0x00000002 #define SERVER_READ (STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE) #define SERVER_WRITE (STANDARD_RIGHTS_WRITE | \ SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE) #define SERVER_EXECUTE (STANDARD_RIGHTS_EXECUTE | SERVER_ACCESS_ENUMERATE) #define SERVER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE) #define PRINTER_ACCESS_ADMINISTER 0x00000004 #define PRINTER_ACCESS_USE 0x00000008 #define PRINTER_READ (STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE) #define PRINTER_WRITE (STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE) #define PRINTER_EXECUTE (STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE) #define PRINTER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE) #define JOB_ACCESS_ADMINISTER 0x00000010 #define JOB_READ (STANDARD_RIGHTS_READ | JOB_ACCESS_ADMINISTER) #define JOB_WRITE (STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER) #define JOB_EXECUTE (STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER) #define JOB_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER) /* Flags for printer drivers */ #define DRIVER_KERNELMODE 0x00000001 #define DRIVER_USERMODE 0x00000002 #define APD_STRICT_UPGRADE 0x00000001 #define APD_STRICT_DOWNGRADE 0x00000002 #define APD_COPY_ALL_FILES 0x00000004 #define APD_COPY_NEW_FILES 0x00000008 #define APD_COPY_FROM_DIRECTORY 0x00000010 #define DPD_DELETE_UNUSED_FILES 0x00000001 #define DPD_DELETE_SPECIFIC_VERSION 0x00000002 #define DPD_DELETE_ALL_FILES 0x00000004 /* dwAction for PRINTER_INFO_7 */ #define DSPRINT_PUBLISH 0x00000001 #define DSPRINT_UPDATE 0x00000002 #define DSPRINT_UNPUBLISH 0x00000004 #define DSPRINT_REPUBLISH 0x00000008 #define DSPRINT_PENDING 0x80000000 #define UPDP_SILENT_UPLOAD 0x00000001 #define UPDP_UPLOAD_ALWAYS 0x00000002 #define UPDP_CHECK_DRIVERSTORE 0x00000004 /* ##################################### */ /* TYPES */ typedef struct _PRINTER_DEFAULTSA { LPSTR pDatatype; LPDEVMODEA pDevMode; ACCESS_MASK DesiredAccess; } PRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA; typedef struct _PRINTER_DEFAULTSW { LPWSTR pDatatype; LPDEVMODEW pDevMode; ACCESS_MASK DesiredAccess; } PRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW; DECL_WINELIB_TYPE_AW(PRINTER_DEFAULTS) DECL_WINELIB_TYPE_AW(LPPRINTER_DEFAULTS) typedef struct _DRIVER_INFO_1A { LPSTR pName; } DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A; typedef struct _DRIVER_INFO_1W { LPWSTR pName; } DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W; DECL_WINELIB_TYPE_AW(DRIVER_INFO_1) DECL_WINELIB_TYPE_AW(PDRIVER_INFO_1) DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_1) typedef struct _DRIVER_INFO_2A { DWORD cVersion; LPSTR pName; LPSTR pEnvironment; LPSTR pDriverPath; LPSTR pDataFile; LPSTR pConfigFile; } DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A; typedef struct _DRIVER_INFO_2W { DWORD cVersion; LPWSTR pName; LPWSTR pEnvironment; LPWSTR pDriverPath; LPWSTR pDataFile; LPWSTR pConfigFile; } DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W; DECL_WINELIB_TYPE_AW(DRIVER_INFO_2) DECL_WINELIB_TYPE_AW(PDRIVER_INFO_2) DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_2) typedef struct _DRIVER_INFO_3A { DWORD cVersion; LPSTR pName; LPSTR pEnvironment; LPSTR pDriverPath; LPSTR pDataFile; LPSTR pConfigFile; LPSTR pHelpFile; LPSTR pDependentFiles; LPSTR pMonitorName; LPSTR pDefaultDataType; } DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A; typedef struct _DRIVER_INFO_3W { DWORD cVersion; LPWSTR pName; LPWSTR pEnvironment; LPWSTR pDriverPath; LPWSTR pDataFile; LPWSTR pConfigFile; LPWSTR pHelpFile; LPWSTR pDependentFiles; LPWSTR pMonitorName; LPWSTR pDefaultDataType; } DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W; DECL_WINELIB_TYPE_AW(DRIVER_INFO_3) DECL_WINELIB_TYPE_AW(PDRIVER_INFO_3) DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_3) typedef struct _DRIVER_INFO_4A { DWORD cVersion; LPSTR pName; LPSTR pEnvironment; LPSTR pDriverPath; LPSTR pDataFile; LPSTR pConfigFile; LPSTR pHelpFile; LPSTR pDependentFiles; LPSTR pMonitorName; LPSTR pDefaultDataType; LPSTR pszzPreviousNames; } DRIVER_INFO_4A, *PDRIVER_INFO_4A, *LPDRIVER_INFO_4A; typedef struct _DRIVER_INFO_4W { DWORD cVersion; LPWSTR pName; LPWSTR pEnvironment; LPWSTR pDriverPath; LPWSTR pDataFile; LPWSTR pConfigFile; LPWSTR pHelpFile; LPWSTR pDependentFiles; LPWSTR pMonitorName; LPWSTR pDefaultDataType; LPWSTR pszzPreviousNames; } DRIVER_INFO_4W, *PDRIVER_INFO_4W, *LPDRIVER_INFO_4W; DECL_WINELIB_TYPE_AW(DRIVER_INFO_4) DECL_WINELIB_TYPE_AW(PDRIVER_INFO_4) DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_4) typedef struct _DRIVER_INFO_5A { DWORD cVersion; LPSTR pName; LPSTR pEnvironment; LPSTR pDriverPath; LPSTR pDataFile; LPSTR pConfigFile; DWORD dwDriverAttributes; DWORD dwConfigVersion; DWORD dwDriverVersion; } DRIVER_INFO_5A, *PDRIVER_INFO_5A, *LPDRIVER_INFO_5A; typedef struct _DRIVER_INFO_5W { DWORD cVersion; LPWSTR pName; LPWSTR pEnvironment; LPWSTR pDriverPath; LPWSTR pDataFile; LPWSTR pConfigFile; DWORD dwDriverAttributes; DWORD dwConfigVersion; DWORD dwDriverVersion; } DRIVER_INFO_5W, *PDRIVER_INFO_5W, *LPDRIVER_INFO_5W; DECL_WINELIB_TYPE_AW(DRIVER_INFO_5) DECL_WINELIB_TYPE_AW(PDRIVER_INFO_5) DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_5) typedef struct _DRIVER_INFO_6A { DWORD cVersion; LPSTR pName; LPSTR pEnvironment; LPSTR pDriverPath; LPSTR pDataFile; LPSTR pConfigFile; LPSTR pHelpFile; LPSTR pDependentFiles; LPSTR pMonitorName; LPSTR pDefaultDataType; LPSTR pszzPreviousNames; FILETIME ftDriverDate; DWORDLONG dwlDriverVersion; LPSTR pszMfgName; LPSTR pszOEMUrl; LPSTR pszHardwareID; LPSTR pszProvider; } DRIVER_INFO_6A, *PDRIVER_INFO_6A, *LPDRIVER_INFO_6A; typedef struct _DRIVER_INFO_6W { DWORD cVersion; LPWSTR pName; LPWSTR pEnvironment; LPWSTR pDriverPath; LPWSTR pDataFile; LPWSTR pConfigFile; LPWSTR pHelpFile; LPWSTR pDependentFiles; LPWSTR pMonitorName; LPWSTR pDefaultDataType; LPWSTR pszzPreviousNames; FILETIME ftDriverDate; DWORDLONG dwlDriverVersion; LPWSTR pszMfgName; LPWSTR pszOEMUrl; LPWSTR pszHardwareID; LPWSTR pszProvider; } DRIVER_INFO_6W, *PDRIVER_INFO_6W, *LPDRIVER_INFO_6W; DECL_WINELIB_TYPE_AW(DRIVER_INFO_6) DECL_WINELIB_TYPE_AW(PDRIVER_INFO_6) DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_6) /* DRIVER_INFO_7 is not defined in native winspool.h and not found in the www */ typedef struct _DRIVER_INFO_8A { DWORD cVersion; LPSTR pName; LPSTR pEnvironment; LPSTR pDriverPath; LPSTR pDataFile; LPSTR pConfigFile; LPSTR pHelpFile; LPSTR pDependentFiles; LPSTR pMonitorName; LPSTR pDefaultDataType; LPSTR pszzPreviousNames; FILETIME ftDriverDate; DWORDLONG dwlDriverVersion; LPSTR pszMfgName; LPSTR pszOEMUrl; LPSTR pszHardwareID; LPSTR pszProvider; LPSTR pszPrintProcessor; LPSTR pszVendorSetup; LPSTR pszzColorProfiles; LPSTR pszInfPath; DWORD dwPrinterDriverAttributes; LPSTR pszzCoreDriverDependencies; FILETIME ftMinInboxDriverVerDate; DWORDLONG dwlMinInboxDriverVerVersion; } DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A; typedef struct _DRIVER_INFO_8W { DWORD cVersion; LPWSTR pName; LPWSTR pEnvironment; LPWSTR pDriverPath; LPWSTR pDataFile; LPWSTR pConfigFile; LPWSTR pHelpFile; LPWSTR pDependentFiles; LPWSTR pMonitorName; LPWSTR pDefaultDataType; LPWSTR pszzPreviousNames; FILETIME ftDriverDate; DWORDLONG dwlDriverVersion; LPWSTR pszMfgName; LPWSTR pszOEMUrl; LPWSTR pszHardwareID; LPWSTR pszProvider; LPWSTR pszPrintProcessor; LPWSTR pszVendorSetup; LPWSTR pszzColorProfiles; LPWSTR pszInfPath; DWORD dwPrinterDriverAttributes; LPWSTR pszzCoreDriverDependencies; FILETIME ftMinInboxDriverVerDate; DWORDLONG dwlMinInboxDriverVerVersion; } DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W; DECL_WINELIB_TYPE_AW(DRIVER_INFO_8) DECL_WINELIB_TYPE_AW(PDRIVER_INFO_8) DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_8) typedef struct _PRINTER_INFO_1A { DWORD Flags; LPSTR pDescription; LPSTR pName; LPSTR pComment; } PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A; typedef struct _PRINTER_INFO_1W { DWORD Flags; LPWSTR pDescription; LPWSTR pName; LPWSTR pComment; } PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W; DECL_WINELIB_TYPE_AW(PRINTER_INFO_1) DECL_WINELIB_TYPE_AW(PPRINTER_INFO_1) DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_1) /* FIXME: winspool.h declares some structure members with the name Status. * unfortunately #defines Status to the type 'int' * therefore the following hack */ #ifndef Status typedef struct _PRINTER_INFO_2A { LPSTR pServerName; LPSTR pPrinterName; LPSTR pShareName; LPSTR pPortName; LPSTR pDriverName; LPSTR pComment; LPSTR pLocation; LPDEVMODEA pDevMode; LPSTR pSepFile; LPSTR pPrintProcessor; LPSTR pDatatype; LPSTR pParameters; PSECURITY_DESCRIPTOR pSecurityDescriptor; DWORD Attributes; DWORD Priority; DWORD DefaultPriority; DWORD StartTime; DWORD UntilTime; DWORD Status; DWORD cJobs; DWORD AveragePPM; } PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A; typedef struct _PRINTER_INFO_2W { LPWSTR pServerName; LPWSTR pPrinterName; LPWSTR pShareName; LPWSTR pPortName; LPWSTR pDriverName; LPWSTR pComment; LPWSTR pLocation; LPDEVMODEW pDevMode; LPWSTR pSepFile; LPWSTR pPrintProcessor; LPWSTR pDatatype; LPWSTR pParameters; PSECURITY_DESCRIPTOR pSecurityDescriptor; DWORD Attributes; DWORD Priority; DWORD DefaultPriority; DWORD StartTime; DWORD UntilTime; DWORD Status; DWORD cJobs; DWORD AveragePPM; } PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W; DECL_WINELIB_TYPE_AW(PRINTER_INFO_2) DECL_WINELIB_TYPE_AW(PPRINTER_INFO_2) DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_2) typedef struct _PRINTER_INFO_3 { PSECURITY_DESCRIPTOR pSecurityDescriptor; } PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3; typedef struct _PRINTER_INFO_4A { LPSTR pPrinterName; LPSTR pServerName; DWORD Attributes; } PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A; typedef struct _PRINTER_INFO_4W { LPWSTR pPrinterName; LPWSTR pServerName; DWORD Attributes; } PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W; DECL_WINELIB_TYPE_AW(PRINTER_INFO_4) DECL_WINELIB_TYPE_AW(PPRINTER_INFO_4) DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_4) typedef struct _PRINTER_INFO_5A { LPSTR pPrinterName; LPSTR pPortName; DWORD Attributes; DWORD DeviceNotSelectedTimeout; DWORD TransmissionRetryTimeout; } PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A; typedef struct _PRINTER_INFO_5W { LPWSTR pPrinterName; LPWSTR pPortName; DWORD Attributes; DWORD DeviceNotSelectedTimeout; DWORD TransmissionRetryTimeout; } PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W; DECL_WINELIB_TYPE_AW(PRINTER_INFO_5) DECL_WINELIB_TYPE_AW(PPRINTER_INFO_5) DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_5) typedef struct _PRINTER_INFO_6 { DWORD dwStatus; } PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6; typedef struct _PRINTER_INFO_7A { LPSTR pszObjectGUID; DWORD dwAction; } PRINTER_INFO_7A, *PPRINTER_INFO_7A, *LPPRINTER_INFO_7A; typedef struct _PRINTER_INFO_7W { LPWSTR pszObjectGUID; DWORD dwAction; } PRINTER_INFO_7W, *PPRINTER_INFO_7W, *LPPRINTER_INFO_7W; DECL_WINELIB_TYPE_AW(PRINTER_INFO_7) DECL_WINELIB_TYPE_AW(PPRINTER_INFO_7) DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_7) typedef struct _PRINTER_INFO_8A { LPDEVMODEA pDevMode; } PRINTER_INFO_8A, *PPRINTER_INFO_8A, *LPPRINTER_INFO_8A; typedef struct _PRINTER_INFO_8W { LPDEVMODEW pDevMode; } PRINTER_INFO_8W, *PPRINTER_INFO_8W, *LPPRINTER_INFO_8W; DECL_WINELIB_TYPE_AW(PRINTER_INFO_8) DECL_WINELIB_TYPE_AW(PPRINTER_INFO_8) DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_8) typedef struct _PRINTER_INFO_9A { LPDEVMODEA pDevMode; } PRINTER_INFO_9A, *PPRINTER_INFO_9A, *LPPRINTER_INFO_9A; typedef struct _PRINTER_INFO_9W { LPDEVMODEW pDevMode; } PRINTER_INFO_9W, *PPRINTER_INFO_9W, *LPPRINTER_INFO_9W; DECL_WINELIB_TYPE_AW(PRINTER_INFO_9) DECL_WINELIB_TYPE_AW(PPRINTER_INFO_9) DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_9) typedef struct _JOB_INFO_1A { DWORD JobId; LPSTR pPrinterName; LPSTR pMachineName; LPSTR pUserName; LPSTR pDocument; LPSTR pDatatype; LPSTR pStatus; DWORD Status; DWORD Priority; DWORD Position; DWORD TotalPages; DWORD PagesPrinted; SYSTEMTIME Submitted; } JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A; typedef struct _JOB_INFO_1W { DWORD JobId; LPWSTR pPrinterName; LPWSTR pMachineName; LPWSTR pUserName; LPWSTR pDocument; LPWSTR pDatatype; LPWSTR pStatus; DWORD Status; DWORD Priority; DWORD Position; DWORD TotalPages; DWORD PagesPrinted; SYSTEMTIME Submitted; } JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W; DECL_WINELIB_TYPE_AW(JOB_INFO_1) DECL_WINELIB_TYPE_AW(PJOB_INFO_1) DECL_WINELIB_TYPE_AW(LPJOB_INFO_1) typedef struct _JOB_INFO_2A { DWORD JobId; LPSTR pPrinterName; LPSTR pMachineName; LPSTR pUserName; LPSTR pDocument; LPSTR pNotifyName; LPSTR pDatatype; LPSTR pPrintProcessor; LPSTR pParameters; LPSTR pDriverName; LPDEVMODEA pDevMode; LPSTR pStatus; PSECURITY_DESCRIPTOR pSecurityDescriptor; DWORD Status; DWORD Priority; DWORD Position; DWORD StartTime; DWORD UntilTime; DWORD TotalPages; DWORD Size; SYSTEMTIME Submitted; DWORD Time; DWORD PagesPrinted; } JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A; typedef struct _JOB_INFO_2W { DWORD JobId; LPWSTR pPrinterName; LPWSTR pMachineName; LPWSTR pUserName; LPWSTR pDocument; LPWSTR pNotifyName; LPWSTR pDatatype; LPWSTR pPrintProcessor; LPWSTR pParameters; LPWSTR pDriverName; LPDEVMODEW pDevMode; LPWSTR pStatus; PSECURITY_DESCRIPTOR pSecurityDescriptor; DWORD Status; DWORD Priority; DWORD Position; DWORD StartTime; DWORD UntilTime; DWORD TotalPages; DWORD Size; SYSTEMTIME Submitted; DWORD Time; DWORD PagesPrinted; } JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W; DECL_WINELIB_TYPE_AW(JOB_INFO_2) DECL_WINELIB_TYPE_AW(PJOB_INFO_2) DECL_WINELIB_TYPE_AW(LPJOB_INFO_2) typedef struct _JOB_INFO_3 { DWORD JobId; DWORD NextJobId; DWORD Reserved; } JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3; typedef struct _ADDJOB_INFO_1A { LPSTR Path; DWORD JobId; } ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A; typedef struct _ADDJOB_INFO_1W { LPWSTR Path; DWORD JobId; } ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W; DECL_WINELIB_TYPE_AW(ADDJOB_INFO_1) DECL_WINELIB_TYPE_AW(PADDJOB_INFO_1) DECL_WINELIB_TYPE_AW(LPADDJOB_INFO_1) typedef struct _DOC_INFO_1A { LPSTR pDocName; LPSTR pOutputFile; LPSTR pDatatype; } DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A; typedef struct _DOC_INFO_1W { LPWSTR pDocName; LPWSTR pOutputFile; LPWSTR pDatatype; } DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W; DECL_WINELIB_TYPE_AW(DOC_INFO_1) DECL_WINELIB_TYPE_AW(PDOC_INFO_1) DECL_WINELIB_TYPE_AW(LPDOC_INFO_1) typedef struct _DOC_INFO_2A { LPSTR pDocName; LPSTR pOutputFile; LPSTR pDatatype; DWORD dwMode; DWORD JobId; } DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A; typedef struct _DOC_INFO_2W { LPWSTR pDocName; LPWSTR pOutputFile; LPWSTR pDatatype; DWORD dwMode; DWORD JobId; } DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W; DECL_WINELIB_TYPE_AW(DOC_INFO_2) DECL_WINELIB_TYPE_AW(PDOC_INFO_2) DECL_WINELIB_TYPE_AW(LPDOC_INFO_2) typedef struct _FORM_INFO_1A { DWORD Flags; LPSTR pName; SIZEL Size; RECTL ImageableArea; } FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A; typedef struct _FORM_INFO_1W { DWORD Flags; LPWSTR pName; SIZEL Size; RECTL ImageableArea; } FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W; DECL_WINELIB_TYPE_AW(FORM_INFO_1) DECL_WINELIB_TYPE_AW(PFORM_INFO_1) DECL_WINELIB_TYPE_AW(LPFORM_INFO_1) typedef struct _FORM_INFO_2A { DWORD Flags; LPSTR pName; SIZEL Size; RECTL ImageableArea; LPCSTR pKeyword; DWORD StringType; LPSTR pMuiDll; DWORD dwResourceId; LPSTR pDisplayName; LANGID wLangId; } FORM_INFO_2A, *PFORM_INFO_2A, *LPFORM_INFO_2A; typedef struct _FORM_INFO_2W { DWORD Flags; LPWSTR pName; SIZEL Size; RECTL ImageableArea; LPCSTR pKeyword; DWORD StringType; LPWSTR pMuiDll; DWORD dwResourceId; LPWSTR pDisplayName; LANGID wLangId; } FORM_INFO_2W, *PFORM_INFO_2W, *LPFORM_INFO_2W; DECL_WINELIB_TYPE_AW(FORM_INFO_2) DECL_WINELIB_TYPE_AW(PFORM_INFO_2) DECL_WINELIB_TYPE_AW(LPFORM_INFO_2) typedef struct _PRINTPROCESSOR_INFO_1A { LPSTR pName; } PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A, *LPPRINTPROCESSOR_INFO_1A; typedef struct _PRINTPROCESSOR_INFO_1W { LPWSTR pName; } PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W, *LPPRINTPROCESSOR_INFO_1W; DECL_WINELIB_TYPE_AW(PRINTPROCESSOR_INFO_1) DECL_WINELIB_TYPE_AW(PPRINTPROCESSOR_INFO_1) DECL_WINELIB_TYPE_AW(LPPRINTPROCESSOR_INFO_1) typedef struct _PORT_INFO_1A { LPSTR pName; } PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A; typedef struct _PORT_INFO_1W { LPWSTR pName; } PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W; DECL_WINELIB_TYPE_AW(PORT_INFO_1) DECL_WINELIB_TYPE_AW(PPORT_INFO_1) DECL_WINELIB_TYPE_AW(LPPORT_INFO_1) typedef struct _PORT_INFO_2A { LPSTR pPortName; LPSTR pMonitorName; LPSTR pDescription; DWORD fPortType; DWORD Reserved; } PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A; typedef struct _PORT_INFO_2W { LPWSTR pPortName; LPWSTR pMonitorName; LPWSTR pDescription; DWORD fPortType; DWORD Reserved; } PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W; DECL_WINELIB_TYPE_AW(PORT_INFO_2) DECL_WINELIB_TYPE_AW(PPORT_INFO_2) DECL_WINELIB_TYPE_AW(LPPORT_INFO_2) typedef struct _PORT_INFO_3A { DWORD dwStatus; LPSTR pszStatus; DWORD dwSeverity; } PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A; typedef struct _PORT_INFO_3W { DWORD dwStatus; LPWSTR pszStatus; DWORD dwSeverity; } PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W; DECL_WINELIB_TYPE_AW(PORT_INFO_3) DECL_WINELIB_TYPE_AW(PPORT_INFO_3) DECL_WINELIB_TYPE_AW(LPPORT_INFO_3) typedef struct _MONITOR_INFO_1A { LPSTR pName; } MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A; typedef struct _MONITOR_INFO_1W { LPWSTR pName; } MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W; DECL_WINELIB_TYPE_AW(MONITOR_INFO_1) DECL_WINELIB_TYPE_AW(PMONITOR_INFO_1) DECL_WINELIB_TYPE_AW(LPMONITOR_INFO_1) #endif /* Status */ typedef struct _MONITOR_INFO_2A { LPSTR pName; LPSTR pEnvironment; LPSTR pDLLName; } MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A; typedef struct _MONITOR_INFO_2W { LPWSTR pName; LPWSTR pEnvironment; LPWSTR pDLLName; } MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W; DECL_WINELIB_TYPE_AW(MONITOR_INFO_2) DECL_WINELIB_TYPE_AW(PMONITOR_INFO_2) DECL_WINELIB_TYPE_AW(LPMONITOR_INFO_2) typedef struct _DATATYPES_INFO_1A { LPSTR pName; } DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A; typedef struct _DATATYPES_INFO_1W { LPWSTR pName; } DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W; DECL_WINELIB_TYPE_AW(DATATYPES_INFO_1) DECL_WINELIB_TYPE_AW(PDATATYPES_INFO_1) DECL_WINELIB_TYPE_AW(LPDATATYPES_INFO_1) typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE { WORD Type; WORD Reserved0; DWORD Reserved1; DWORD Reserved2; DWORD Count; PWORD pFields; } PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE, *LPPRINTER_NOTIFY_OPTIONS_TYPE; typedef struct _PRINTER_NOTIFY_OPTIONS { DWORD Version; DWORD Flags; DWORD Count; PPRINTER_NOTIFY_OPTIONS_TYPE pTypes; } PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS; typedef struct _PRINTER_NOTIFY_INFO_DATA { WORD Type; WORD Field; DWORD Reserved; DWORD Id; union { DWORD adwData[2]; struct { DWORD cbBuf; LPVOID pBuf; } Data; } NotifyData; } PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA, *LPPRINTER_NOTIFY_INFO_DATA; typedef struct _PRINTER_NOTIFY_INFO { DWORD Version; DWORD Flags; DWORD Count; PRINTER_NOTIFY_INFO_DATA aData[1]; } PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO; typedef struct _PROVIDOR_INFO_1A { LPSTR pName; LPSTR pEnvironment; LPSTR pDLLName; } PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A; typedef struct _PROVIDOR_INFO_1W { LPWSTR pName; LPWSTR pEnvironment; LPWSTR pDLLName; } PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W; DECL_WINELIB_TYPE_AW(PROVIDOR_INFO_1) DECL_WINELIB_TYPE_AW(PPROVIDOR_INFO_1) DECL_WINELIB_TYPE_AW(LPPROVIDOR_INFO_1) typedef struct _PRINTER_ENUM_VALUESA { LPSTR pValueName; DWORD cbValueName; DWORD dwType; LPBYTE pData; DWORD cbData; } PRINTER_ENUM_VALUESA, *PPRINTER_ENUM_VALUESA; typedef struct _PRINTER_ENUM_VALUESW { LPWSTR pValueName; DWORD cbValueName; DWORD dwType; LPBYTE pData; DWORD cbData; } PRINTER_ENUM_VALUESW, *PPRINTER_ENUM_VALUESW; DECL_WINELIB_TYPE_AW(PRINTER_ENUM_VALUES) DECL_WINELIB_TYPE_AW(PPRINTER_ENUM_VALUES) typedef enum { BIDI_NULL = 0, BIDI_INT, BIDI_FLOAT, BIDI_BOOL, BIDI_STRING, BIDI_TEXT, BIDI_ENUM, BIDI_BLOB } BIDI_TYPE; typedef struct _BINARY_CONTAINER { DWORD cbBuf; LPBYTE pData; } BINARY_CONTAINER, *PBINARY_CONTAINER; typedef struct _BIDI_DATA { DWORD dwBidiType; union { BOOL bData; INT iData; LPWSTR sData; FLOAT fData; BINARY_CONTAINER biData; } u; } BIDI_DATA, *LPBIDI_DATA, *PBIDI_DATA; typedef struct _BIDI_REQUEST_DATA { DWORD dwReqNumber; LPWSTR pSchema; BIDI_DATA data; } BIDI_REQUEST_DATA, *LPBIDI_REQUEST_DATA, *PBIDI_REQUEST_DATA; typedef struct _BIDI_REQUEST_CONTAINER { DWORD Version; DWORD Flags; DWORD Count; BIDI_REQUEST_DATA aData[1]; } BIDI_REQUEST_CONTAINER, *LPBIDI_REQUEST_CONTAINER, *PBIDI_REQUEST_CONTAINER; typedef struct _BIDI_RESPONSE_DATA { DWORD dwResult; DWORD dwReqNumber; LPWSTR pSchema; BIDI_DATA data; } BIDI_RESPONSE_DATA, *LPBIDI_RESPONSE_DATA, *PBIDI_RESPONSE_DATA; typedef struct _BIDI_RESPONSE_CONTAINER { DWORD Version; DWORD Flags; DWORD Count; BIDI_RESPONSE_DATA aData[1]; } BIDI_RESPONSE_CONTAINER, *LPBIDI_RESPONSE_CONTAINER, *PBIDI_RESPONSE_CONTAINER; /* string constants */ #define SPLREG_DEFAULT_SPOOL_DIRECTORYA "DefaultSpoolDirectory" #ifdef _MSC_VER #define SPLREG_DEFAULT_SPOOL_DIRECTORYW L"DefaultSpoolDirectory" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_DEFAULT_SPOOL_DIRECTORY WINELIB_NAME_AW(SPLREG_DEFAULT_SPOOL_DIRECTORY) #define SPLREG_PORT_THREAD_PRIORITY_DEFAULTA "PortThreadPriorityDefault" #ifdef _MSC_VER #define SPLREG_PORT_THREAD_PRIORITY_DEFAULTW L"PortThreadPriorityDefault" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_PORT_THREAD_PRIORITY_DEFAULT WINELIB_NAME_AW(SPLREG_PORT_THREAD_PRIORITY_DEFAULT) #define SPLREG_PORT_THREAD_PRIORITYA "PortThreadPriority" #ifdef _MSC_VER #define SPLREG_PORT_THREAD_PRIORITYW L"PortThreadPriority" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_PORT_THREAD_PRIORITY WINELIB_NAME_AW(SPLREG_PORT_THREAD_PRIORITY) #define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTA "SchedulerThreadPriorityDefault" #ifdef _MSC_VER #define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW L"SchedulerThreadPriorityDefault" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT WINELIB_NAME_AW(SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT) #define SPLREG_SCHEDULER_THREAD_PRIORITYA "SchedulerThreadPriority" #ifdef _MSC_VER #define SPLREG_SCHEDULER_THREAD_PRIORITYW L"SchedulerThreadPriority" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_SCHEDULER_THREAD_PRIORITY WINELIB_NAME_AW(SPLREG_SCHEDULER_THREAD_PRIORITY) #define SPLREG_BEEP_ENABLEDA "BeepEnabled" #ifdef _MSC_VER #define SPLREG_BEEP_ENABLEDW L"BeepEnabled" #elif defined(__GNUC__) #define SPLREG_BEEP_ENABLEDW (const WCHAR[]){'B','e','e','p','E','n','a','b','l','e','d',0} #else static const WCHAR SPLREG_BEEP_ENABLEDW[] = {'B','e','e','p','E','n','a','b','l','e','d',0}; #endif #define SPLREG_BEEP_ENABLED WINELIB_NAME_AW(SPLREG_BEEP_ENABLED) #define SPLREG_NET_POPUPA "NetPopup" #ifdef _MSC_VER #define SPLREG_NET_POPUPW L"NetPopup" #elif defined(__GNUC__) #define SPLREG_NET_POPUPW (const WCHAR[]){'N','e','t','P','o','p','u','p',0} #else static const WCHAR SPLREG_NET_POPUPW[] = {'N','e','t','P','o','p','u','p',0}; #endif #define SPLREG_NET_POPUP WINELIB_NAME_AW(SPLREG_NET_POPUP) #define SPLREG_RETRY_POPUPA "RetryPopup" #ifdef _MSC_VER #define SPLREG_RETRY_POPUPW L"RetryPopup" #elif defined(__GNUC__) #define SPLREG_RETRY_POPUPW (const WCHAR[]){'R','e','t','r','y','P','o','p','u','p',0} #else static const WCHAR SPLREG_RETRY_POPUPW[] = {'R','e','t','r','y','P','o','p','u','p',0}; #endif #define SPLREG_RETRY_POPUP WINELIB_NAME_AW(SPLREG_RETRY_POPUP) #define SPLREG_NET_POPUP_TO_COMPUTERA "NetPopupToComputer" #ifdef _MSC_VER #define SPLREG_NET_POPUP_TO_COMPUTERW L"NetPopupToComputer" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_NET_POPUP_TO_COMPUTER WINELIB_NAME_AW(SPLREG_NET_POPUP_TO_COMPUTER) #define SPLREG_EVENT_LOGA "EventLog" #ifdef _MSC_VER #define SPLREG_EVENT_LOGW L"EventLog" #elif defined(__GNUC__) #define SPLREG_EVENT_LOGW (const WCHAR[]){'E','v','e','n','t','L','o','g',0} #else static const WCHAR SPLREG_EVENT_LOGW[] = {'E','v','e','n','t','L','o','g',0}; #endif #define SPLREG_EVENT_LOG WINELIB_NAME_AW(SPLREG_EVENT_LOG) #define SPLREG_MAJOR_VERSIONA "MajorVersion" #ifdef _MSC_VER #define SPLREG_MAJOR_VERSIONW L"MajorVersion" #elif defined(__GNUC__) #define SPLREG_MAJOR_VERSIONW (const WCHAR[]){'M','a','j','o','r','V','e','r','s','i','o','n',0} #else static const WCHAR SPLREG_MAJOR_VERSIONW[] = {'M','a','j','o','r','V','e','r','s','i','o','n',0}; #endif #define SPLREG_MAJOR_VERSION WINELIB_NAME_AW(SPLREG_MAJOR_VERSION) #define SPLREG_MINOR_VERSIONA "MinorVersion" #ifdef _MSC_VER #define SPLREG_MINOR_VERSIONW L"MinorVersion" #elif defined(__GNUC__) #define SPLREG_MINOR_VERSIONW (const WCHAR[]){'M','i','n','o','r','V','e','r','s','i','o','n',0} #else static const WCHAR SPLREG_MINOR_VERSIONW[] = {'M','i','n','o','r','V','e','r','s','i','o','n',0}; #endif #define SPLREG_MINOR_VERSION WINELIB_NAME_AW(SPLREG_MINOR_VERSION) #define SPLREG_ARCHITECTUREA "Architecture" #ifdef _MSC_VER #define SPLREG_ARCHITECTUREW L"Architecture" #elif defined(__GNUC__) #define SPLREG_ARCHITECTUREW (const WCHAR[]){'A','r','c','h','i','t','e','c','t','u','r','e',0} #else static const WCHAR SPLREG_ARCHITECTUREW[] = {'A','r','c','h','i','t','e','c','t','u','r','e',0}; #endif #define SPLREG_ARCHITECTURE WINELIB_NAME_AW(SPLREG_ARCHITECTURE) #define SPLREG_OS_VERSIONA "OSVersion" #ifdef _MSC_VER #define SPLREG_OS_VERSIONW L"OSVersion" #elif defined(__GNUC__) #define SPLREG_OS_VERSIONW (const WCHAR[]){'O','S','V','e','r','s','i','o','n',0} #else static const WCHAR SPLREG_OS_VERSIONW[] = {'O','S','V','e','r','s','i','o','n',0}; #endif #define SPLREG_OS_VERSION WINELIB_NAME_AW(SPLREG_OS_VERSION) #define SPLREG_OS_VERSIONEXA "OSVersionEx" #ifdef _MSC_VER #define SPLREG_OS_VERSIONEXW L"OSVersionEx" #elif defined(__GNUC__) #define SPLREG_OS_VERSIONEXW (const WCHAR[]){'O','S','V','e','r','s','i','o','n','E','x',0} #else static const WCHAR SPLREG_OS_VERSIONEXW[] = {'O','S','V','e','r','s','i','o','n','E','x',0}; #endif #define SPLREG_OS_VERSIONEX WINELIB_NAME_AW(SPLREG_OS_VERSIONEX) #define SPLREG_DS_PRESENTA "DsPresent" #ifdef _MSC_VER #define SPLREG_DS_PRESENTW L"DsPresent" #elif defined(__GNUC__) #define SPLREG_DS_PRESENTW (const WCHAR[]){'D','s','P','r','e','s','e','n','t',0} #else static const WCHAR SPLREG_DS_PRESENTW[] = {'D','s','P','r','e','s','e','n','t',0}; #endif #define SPLREG_DS_PRESENT WINELIB_NAME_AW(SPLREG_DS_PRESENT) #define SPLREG_DS_PRESENT_FOR_USERA "DsPresentForUser" #ifdef _MSC_VER #define SPLREG_DS_PRESENT_FOR_USERW L"DsPresentForUser" #elif defined(__GNUC__) #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} #else static const WCHAR SPLREG_DS_PRESENT_FOR_USERW[] = {'D','s','P','r','e','s','e','n','t','F','o','r','U','s','e','r',0}; #endif #define SPLREG_DS_PRESENT_FOR_USER WINELIB_NAME_AW(SPLREG_DS_PRESENT_FOR_USER) #define SPLREG_REMOTE_FAXA "RemoteFax" #ifdef _MSC_VER #define SPLREG_REMOTE_FAXW L"RemoteFax" #elif defined(__GNUC__) #define SPLREG_REMOTE_FAXW (const WCHAR[]){'R','e','m','o','t','e','F','a','x',0} #else static const WCHAR SPLREG_REMOTE_FAXW[] = {'R','e','m','o','t','e','F','a','x',0}; #endif #define SPLREG_REMOTE_FAX WINELIB_NAME_AW(SPLREG_REMOTE_FAX) #define SPLREG_RESTART_JOB_ON_POOL_ERRORA "RestartJobOnPoolError" #ifdef _MSC_VER #define SPLREG_RESTART_JOB_ON_POOL_ERRORW L"RestartJobOnPoolError" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_RESTART_JOB_ON_POOL_ERROR WINELIB_NAME_AW(SPLREG_RESTART_JOB_ON_POOL_ERROR) #define SPLREG_RESTART_JOB_ON_POOL_ENABLEDA "RestartJobOnPoolEnabled" #ifdef _MSC_VER #define SPLREG_RESTART_JOB_ON_POOL_ENABLEDW L"RestartJobOnPoolEnabled" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_RESTART_JOB_ON_POOL_ENABLED WINELIB_NAME_AW(SPLREG_RESTART_JOB_ON_POOL_ENABLED) #define SPLREG_DNS_MACHINE_NAMEA "DNSMachineName" #ifdef _MSC_VER #define SPLREG_DNS_MACHINE_NAMEW L"DNSMachineName" #elif defined(__GNUC__) #define SPLREG_DNS_MACHINE_NAMEW (const WCHAR[]){'D','N','S','M','a','c','h','i','n','e','N','a','m','e',0} #else static const WCHAR SPLREG_DNS_MACHINE_NAMEW[] = {'D','N','S','M','a','c','h','i','n','e','N','a','m','e',0}; #endif #define SPLREG_DNS_MACHINE_NAME WINELIB_NAME_AW(SPLREG_DNS_MACHINE_NAME) #define SPLREG_ALLOW_USER_MANAGEFORMSA "AllowUserManageForms" #ifdef _MSC_VER #define SPLREG_ALLOW_USER_MANAGEFORMSW L"AllowUserManageForms" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_ALLOW_USER_MANAGEFORMS WINELIB_NAME_AW(SPLREG_ALLOW_USER_MANAGEFORMS) #define SPLREG_WEBSHAREMGMTA "WebShareMgmt" #ifdef _MSC_VER #define SPLREG_WEBSHAREMGMTW L"WebShareMgmt" #elif defined(__GNUC__) #define SPLREG_WEBSHAREMGMTW (const WCHAR[]){'W','e','b','S','h','a','r','e','M','g','m','t',0} #else static const WCHAR SPLREG_WEBSHAREMGMTW[] = {'W','e','b','S','h','a','r','e','M','g','m','t',0}; #endif #define SPLREG_WEBSHAREMGMT WINELIB_NAME_AW(SPLREG_WEBSHAREMGMT) #define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSA "PrintDriverIsolationGroups" #ifdef _MSC_VER #define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW L"PrintDriverIsolationGroups" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_PRINT_DRIVER_ISOLATION_GROUPS WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_GROUPS) #define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEA "PrintDriverIsolationTimeBeforeRecycle" #ifdef _MSC_VER #define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW L"PrintDriverIsolationTimeBeforeRecycle" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE) #define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEA "PrintDriverIsolationMaxobjsBeforeRecycle" #ifdef _MSC_VER #define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW L"PrintDriverIsolationMaxobjsBeforeRecycle" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE) #define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTA "PrintDriverIsolationIdleTimeout" #ifdef _MSC_VER #define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW L"PrintDriverIsolationIdleTimeout" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT) #define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYA "PrintDriverIsolationExecutionPolicy" #ifdef _MSC_VER #define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW L"PrintDriverIsolationExecutionPolicy" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY) #define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYA "PrintDriverIsolationOverrideCompat" #ifdef _MSC_VER #define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW L"PrintDriverIsolationOverrideCompat" #elif defined(__GNUC__) #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} #else static 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}; #endif #define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY) /* DECLARATIONS */ INT WINAPI DeviceCapabilitiesA(LPCSTR pDevice,LPCSTR pPort,WORD fwCapability, LPSTR pOutput, LPDEVMODEA pDevMode); INT WINAPI DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort, WORD fwCapability, LPWSTR pOutput, const DEVMODEW *pDevMode); #define DeviceCapabilities WINELIB_NAME_AW(DeviceCapabilities) LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter, LPSTR pDeviceName, LPDEVMODEA pDevModeOutput, LPDEVMODEA pDevModeInput,DWORD fMode ); LONG WINAPI DocumentPropertiesW(HWND hWnd, HANDLE hPrinter, LPWSTR pDeviceName, LPDEVMODEW pDevModeOutput, LPDEVMODEW pDevModeInput, DWORD fMode); #define DocumentProperties WINELIB_NAME_AW(DocumentProperties) BOOL WINAPI OpenPrinterA(LPSTR lpPrinterName,HANDLE *phPrinter, LPPRINTER_DEFAULTSA pDefault); BOOL WINAPI OpenPrinterW(LPWSTR lpPrinterName,HANDLE *phPrinter, LPPRINTER_DEFAULTSW pDefault); #define OpenPrinter WINELIB_NAME_AW(OpenPrinter) BOOL WINAPI ResetPrinterA(HANDLE hPrinter, LPPRINTER_DEFAULTSA pDefault); BOOL WINAPI ResetPrinterW(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault); #define ResetPrinter WINELIB_NAME_AW(ResetPrinter) BOOL WINAPI ClosePrinter (HANDLE phPrinter); BOOL WINAPI EnumJobsA(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs, DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned); BOOL WINAPI EnumJobsW(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs, DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned); #define EnumJobs WINELIB_NAME_AW(EnumJobs) BOOL WINAPI EnumPrintersA(DWORD dwType, LPSTR lpszName, DWORD dwLevel, LPBYTE lpbPrinters, DWORD cbBuf, LPDWORD lpdwNeeded, LPDWORD lpdwReturned); BOOL WINAPI EnumPrintersW(DWORD dwType, LPWSTR lpszName, DWORD dwLevel, LPBYTE lpbPrinters, DWORD cbBuf, LPDWORD lpdwNeeded, LPDWORD lpdwReturned); #define EnumPrinters WINELIB_NAME_AW(EnumPrinters) BOOL WINAPI PrinterProperties(HWND hWnd, HANDLE hPrinter); BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD); BOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD); #define GetPrinterDriverDirectory WINELIB_NAME_AW(GetPrinterDriverDirectory) BOOL WINAPI GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded); BOOL WINAPI GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded); #define GetPrinterDriver WINELIB_NAME_AW(GetPrinterDriver) BOOL WINAPI SetJobA(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob, DWORD Command); BOOL WINAPI SetJobW(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob, DWORD Command); #define SetJob WINELIB_NAME_AW(SetJob) BOOL WINAPI GetJobA(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded); BOOL WINAPI GetJobW(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded); #define GetJob WINELIB_NAME_AW(GetJob) HANDLE WINAPI AddPrinterA(LPSTR pName, DWORD Level, LPBYTE pPrinter); HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter); #define AddPrinter WINELIB_NAME_AW(AddPrinter) BOOL WINAPI DeletePrinter(HANDLE hPrinter); BOOL WINAPI SetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD Command); BOOL WINAPI SetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD Command); #define SetPrinter WINELIB_NAME_AW(SetPrinter) BOOL WINAPI GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded); BOOL WINAPI GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded); #define GetPrinter WINELIB_NAME_AW(GetPrinter) BOOL WINAPI AddPrinterDriverA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo); BOOL WINAPI AddPrinterDriverW(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo); #define AddPrinterDriver WINELIB_NAME_AW(AddPrinterDriver) BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo, DWORD dwFileCopyFlags); BOOL WINAPI AddPrinterDriverExW(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo, DWORD dwFileCopyFlags); #define AddPrinterDriverEx WINELIB_NAME_AW(AddPrinterDriverEx) BOOL WINAPI EnumPrinterDriversA(LPSTR pName, LPSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned); BOOL WINAPI EnumPrinterDriversW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned); #define EnumPrinterDrivers WINELIB_NAME_AW(EnumPrinterDrivers) BOOL WINAPI GetDefaultPrinterA(LPSTR pName, LPDWORD pcbNameSize); BOOL WINAPI GetDefaultPrinterW(LPWSTR pName, LPDWORD pcbNameSize); #define GetDefaultPrinter WINELIB_NAME_AW(GetDefaultPrinter) BOOL WINAPI SetDefaultPrinterA(LPCSTR); BOOL WINAPI SetDefaultPrinterW(LPCWSTR); #define SetDefaultPrinter WINELIB_NAME_AW(SetDefaultPrinter) BOOL WINAPI DeletePrinterDriverA(LPSTR pName, LPSTR pEnvironment, LPSTR pDriverName); BOOL WINAPI DeletePrinterDriverW(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pDriverName); #define DeletePrinterDriver WINELIB_NAME_AW(DeletePrinterDriver) BOOL WINAPI DeletePrinterDriverExA(LPSTR pName, LPSTR pEnvironment, LPSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionFlag); BOOL WINAPI DeletePrinterDriverExW(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionFlag); #define DeletePrinterDriverEx WINELIB_NAME_AW(DeletePrinterDriverEx) BOOL WINAPI AddPrintProcessorA(LPSTR pName, LPSTR pEnvironment, LPSTR pPathName, LPSTR pPrintProcessorName); BOOL WINAPI AddPrintProcessorW(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pPathName, LPWSTR pPrintProcessorName); #define AddPrintProcessor WINELIB_NAME_AW(AddPrintProcessor) BOOL WINAPI EnumPrintProcessorsA(LPSTR pName, LPSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned); BOOL WINAPI EnumPrintProcessorsW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned); #define EnumPrintProcessors WINELIB_NAME_AW(EnumPrintProcessors) BOOL WINAPI GetPrintProcessorDirectoryA(LPSTR pName, LPSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded); BOOL WINAPI GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded); #define GetPrintProcessorDirectory WINELIB_NAME_AW(GetPrintProcessorDirectory) BOOL WINAPI EnumPrintProcessorDatatypesA(LPSTR pName, LPSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned); BOOL WINAPI EnumPrintProcessorDatatypesW(LPWSTR pName, LPWSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned); #define EnumPrintProcessorDatatypes WINELIB_NAME_AW(EnumPrintProcessorDatatypes) BOOL WINAPI DeletePrintProcessorA(LPSTR pName, LPSTR pEnvironment, LPSTR pPrintProcessorName); BOOL WINAPI DeletePrintProcessorW(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pPrintProcessorName); #define DeletePrintProcessor WINELIB_NAME_AW(DeletePrintProcessor) DWORD WINAPI StartDocPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo); DWORD WINAPI StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo); #define StartDocPrinter WINELIB_NAME_AW(StartDocPrinter) BOOL WINAPI StartPagePrinter(HANDLE hPrinter); BOOL WINAPI WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pcWritten); BOOL WINAPI EndPagePrinter(HANDLE hPrinter); BOOL WINAPI AbortPrinter(HANDLE hPrinter); BOOL WINAPI ReadPrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pNoBytesRead); BOOL WINAPI EndDocPrinter(HANDLE hPrinter); BOOL WINAPI AddJobA(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf, LPDWORD pcbNeeded); BOOL WINAPI AddJobW(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf, LPDWORD pcbNeeded); #define AddJob WINELIB_NAME_AW(AddJob) BOOL WINAPI ScheduleJob(HANDLE hPrinter, DWORD JobID); LONG WINAPI AdvancedDocumentPropertiesA(HWND hWnd, HANDLE hPrinter, LPSTR pDeviceName, PDEVMODEA pDevModeOutput, PDEVMODEA pDevModeInput); LONG WINAPI AdvancedDocumentPropertiesW(HWND hWnd, HANDLE hPrinter, LPWSTR pDeviceName, PDEVMODEW pDevModeOutput, PDEVMODEW pDevModeInput); #define AdvancedDocumentProperties WINELIB_NAME_AW(AdvancedDocumentProperties) DWORD WINAPI GetPrinterDataA(HANDLE hPrinter, LPSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded); DWORD WINAPI GetPrinterDataW(HANDLE hPrinter, LPWSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded); #define GetPrinterData WINELIB_NAME_AW(GetPrinterData) DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, LPCSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded); DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, LPCWSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded); #define GetPrinterDataEx WINELIB_NAME_AW(GetPrinterDataEx) DWORD WINAPI DeletePrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, LPCSTR pValueName); DWORD WINAPI DeletePrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, LPCWSTR pValueName); #define DeletePrinterDataEx WINELIB_NAME_AW(DeletePrinterDataEx) DWORD WINAPI SetPrinterDataA(HANDLE hPrinter, LPSTR pValueName, DWORD Type, LPBYTE pData, DWORD cbData); DWORD WINAPI SetPrinterDataW(HANDLE hPrinter, LPWSTR pValueName, DWORD Type, LPBYTE pData, DWORD cbData); #define SetPrinterData WINELIB_NAME_AW(SetPrinterData) DWORD WINAPI SetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, LPCSTR pValueName, DWORD Type, LPBYTE pData, DWORD cbData); DWORD WINAPI SetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, LPCWSTR pValueName, DWORD Type, LPBYTE pData, DWORD cbData); #define SetPrinterDataEx WINELIB_NAME_AW(SetPrinterDataEx) DWORD WINAPI WaitForPrinterChange(HANDLE hPrinter, DWORD Flags); HANDLE WINAPI FindFirstPrinterChangeNotification(HANDLE hPrinter, DWORD fdwFlags, DWORD fdwOptions, LPVOID pPrinterNotifyOptions); BOOL WINAPI FindNextPrinterChangeNotification(HANDLE hChange, PDWORD pdwChange, LPVOID pvReserved, LPVOID *ppPrinterNotifyInfo); BOOL WINAPI FreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pPrinterNotifyInfo); BOOL WINAPI FindClosePrinterChangeNotification(HANDLE hChange); DWORD WINAPI PrinterMessageBoxA(HANDLE hPrinter, DWORD Error, HWND hWnd, LPSTR pText, LPSTR pCaption, DWORD dwType); DWORD WINAPI PrinterMessageBoxW(HANDLE hPrinter, DWORD Error, HWND hWnd, LPWSTR pText, LPWSTR pCaption, DWORD dwType); #define PrinterMessageBox WINELIB_NAME_AW(PrinterMessageBox) BOOL WINAPI AddFormA(HANDLE hPrinter, DWORD Level, LPBYTE pForm); BOOL WINAPI AddFormW(HANDLE hPrinter, DWORD Level, LPBYTE pForm); #define AddForm WINELIB_NAME_AW(AddForm) BOOL WINAPI DeleteFormA(HANDLE hPrinter, LPSTR pFormName); BOOL WINAPI DeleteFormW(HANDLE hPrinter, LPWSTR pFormName); #define DeleteForm WINELIB_NAME_AW(DeleteForm) BOOL WINAPI GetFormA(HANDLE hPrinter, LPSTR pFormName, DWORD Level, LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded); BOOL WINAPI GetFormW(HANDLE hPrinter, LPWSTR pFormName, DWORD Level, LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded); #define GetForm WINELIB_NAME_AW(GetForm) BOOL WINAPI SetFormA(HANDLE hPrinter, LPSTR pFormName, DWORD Level, LPBYTE pForm); BOOL WINAPI SetFormW(HANDLE hPrinter, LPWSTR pFormName, DWORD Level, LPBYTE pForm); #define SetForm WINELIB_NAME_AW(SetForm) BOOL WINAPI EnumFormsA(HANDLE hPrinter, DWORD Level, LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned); BOOL WINAPI EnumFormsW(HANDLE hPrinter, DWORD Level, LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned); #define EnumForms WINELIB_NAME_AW(EnumForms) BOOL WINAPI EnumMonitorsA(LPSTR pName, DWORD Level, LPBYTE pMonitors, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned); BOOL WINAPI EnumMonitorsW(LPWSTR pName, DWORD Level, LPBYTE pMonitors, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned); #define EnumMonitors WINELIB_NAME_AW(EnumMonitors) DWORD WINAPI EnumPrinterDataA( HANDLE hPrinter, DWORD dwIndex, LPSTR pValueName, DWORD cbValueName, LPDWORD pcbValueName, LPDWORD pType, LPBYTE pData, DWORD cbData, LPDWORD pcbData ); DWORD WINAPI EnumPrinterDataW( HANDLE hPrinter, DWORD dwIndex, LPWSTR pValueName, DWORD cbValueName, LPDWORD pcbValueName, LPDWORD pType, LPBYTE pData, DWORD cbData, LPDWORD pcbData ); #define EnumPrinterData WINELIB_NAME_AW(EnumPrinterData) BOOL WINAPI AddMonitorA(LPSTR pName, DWORD Level, LPBYTE pMonitors); BOOL WINAPI AddMonitorW(LPWSTR pName, DWORD Level, LPBYTE pMonitors); #define AddMonitor WINELIB_NAME_AW(AddMonitor) BOOL WINAPI DeleteMonitorA(LPSTR pName, LPSTR pEnvironment, LPSTR pMonitorName); BOOL WINAPI DeleteMonitorW(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pMonitorName); #define DeleteMonitor WINELIB_NAME_AW(DeleteMonitor) BOOL WINAPI EnumPortsA(LPSTR pName, DWORD Level, LPBYTE pPorts, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned); BOOL WINAPI EnumPortsW(LPWSTR pName, DWORD Level, LPBYTE pPorts, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned); #define EnumPorts WINELIB_NAME_AW(EnumPorts) BOOL WINAPI AddPortA(LPSTR pName, HWND hWnd, LPSTR pMonitorName); BOOL WINAPI AddPortW(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName); #define AddPort WINELIB_NAME_AW(AddPort) BOOL WINAPI AddPortExA(LPSTR, DWORD, LPBYTE, LPSTR); BOOL WINAPI AddPortExW(LPWSTR, DWORD, LPBYTE, LPWSTR); #define AddPortEx WINELIB_NAME_AW(AddPortEx) BOOL WINAPI ConfigurePortA(LPSTR pName, HWND hWnd, LPSTR pPortName); BOOL WINAPI ConfigurePortW(LPWSTR pName, HWND hWnd, LPWSTR pPortName); #define ConfigurePort WINELIB_NAME_AW(ConfigurePort) BOOL WINAPI DeletePortA(LPSTR pName, HWND hWnd, LPSTR pPortName); BOOL WINAPI DeletePortW(LPWSTR pName, HWND hWnd, LPWSTR pPortName); #define DeletePort WINELIB_NAME_AW(DeletePort) BOOL WINAPI SetPortA(LPSTR pName, LPSTR pPortName, DWORD dwLevel, LPBYTE pPortInfo); BOOL WINAPI SetPortW(LPWSTR pName, LPWSTR pPortName, DWORD dwLevel, LPBYTE pPortInfo); #define SetPort WINELIB_NAME_AW(SetPort) BOOL WINAPI AddPrinterConnectionA(LPSTR pName); BOOL WINAPI AddPrinterConnectionW(LPWSTR pName); #define AddPrinterConnection WINELIB_NAME_AW(AddPrinterConnection) BOOL WINAPI DeletePrinterConnectionA(LPSTR pName); BOOL WINAPI DeletePrinterConnectionW(LPWSTR pName); #define DeletePrinterConnection WINELIB_NAME_AW(DeletePrinterConnection) HANDLE WINAPI ConnectToPrinterDlg(HWND hwnd, DWORD Flags); BOOL WINAPI AddPrintProvidorA(LPSTR pName, DWORD Level, LPBYTE pProvidorInfo); BOOL WINAPI AddPrintProvidorW(LPWSTR pName, DWORD Level, LPBYTE pProvidorInfo); #define AddPrintProvidor WINELIB_NAME_AW(AddPrintProvidor) BOOL WINAPI DeletePrintProvidorA(LPSTR pName, LPSTR pEnvironment, LPSTR pPrintProvidorName); BOOL WINAPI DeletePrintProvidorW(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pPrintProvidorName); #define DeletePrintProvidor WINELIB_NAME_AW(DeletePrintProvidor) DWORD WINAPI EnumPrinterKeyA(HANDLE printer, const CHAR *key, CHAR *subkey, DWORD size, DWORD *needed); DWORD WINAPI EnumPrinterKeyW(HANDLE printer, const WCHAR *key, WCHAR *subkey, DWORD size, DWORD *needed); #define EnumPrinterKey WINELIB_NAME_AW(EnumPrinterKey) DWORD WINAPI EnumPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, LPBYTE pEnumValues, DWORD cbEnumValues, LPDWORD pcbEnumValues, LPDWORD pnEnumValues); DWORD WINAPI EnumPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, LPBYTE pEnumValues, DWORD cbEnumValues, LPDWORD pcbEnumValues, LPDWORD pnEnumValues); #define EnumPrinterDataEx WINELIB_NAME_AW(EnumPrinterDataEx) LONG WINAPI ExtDeviceMode( HWND hWnd, HANDLE hInst, LPDEVMODEA pDevModeOutput, LPSTR pDeviceName, LPSTR pPort, LPDEVMODEA pDevModeInput, LPSTR pProfile, DWORD fMode); LPSTR WINAPI StartDocDlgA(HANDLE hPrinter, DOCINFOA *doc); LPWSTR WINAPI StartDocDlgW(HANDLE hPrinter, DOCINFOW *doc); #define StartDocDlg WINELIB_NAME_AW(StartDocDlg) HRESULT WINAPI UploadPrinterDriverPackageA(LPCSTR,LPCSTR,LPCSTR,DWORD,HWND,LPSTR,PULONG); HRESULT WINAPI UploadPrinterDriverPackageW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,HWND,LPWSTR,PULONG); #define UploadPrinterDriverPackage WINELIB_NAME_AW(UploadPrinterDriverPackage) BOOL WINAPI XcvDataW(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData, DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded, PDWORD pdwStatus); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __WINE_WINSPOOL_H */ ================================================ FILE: wine/windows/winstring.h ================================================ /* * Copyright (C) 2014 Martin Storsjo * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINSTRING_H #define __WINE_WINSTRING_H #include #ifdef __cplusplus extern "C" { #endif HRESULT WINAPI WindowsCompareStringOrdinal(HSTRING str1, HSTRING str2, INT32 *order); HRESULT WINAPI WindowsConcatString(HSTRING str1, HSTRING str2, HSTRING *out); HRESULT WINAPI WindowsCreateString(LPCWSTR ptr, UINT32 len, HSTRING *out); HRESULT WINAPI WindowsCreateStringReference(LPCWSTR ptr, UINT32 len, HSTRING_HEADER *header, HSTRING *out); HRESULT WINAPI WindowsDeleteString(HSTRING str); HRESULT WINAPI WindowsDeleteStringBuffer(HSTRING_BUFFER buf); HRESULT WINAPI WindowsDuplicateString(HSTRING str, HSTRING *out); UINT32 WINAPI WindowsGetStringLen(HSTRING str); LPCWSTR WINAPI WindowsGetStringRawBuffer(HSTRING str, UINT32 *len); BOOL WINAPI WindowsIsStringEmpty(HSTRING str); HRESULT WINAPI WindowsPreallocateStringBuffer(UINT32 len, WCHAR **outptr, HSTRING_BUFFER *out); HRESULT WINAPI WindowsPromoteStringBuffer(HSTRING_BUFFER buf, HSTRING *out); HRESULT WINAPI WindowsReplaceString(HSTRING haystack, HSTRING needle, HSTRING replacement, HSTRING *out); HRESULT WINAPI WindowsStringHasEmbeddedNull(HSTRING str, BOOL *out); HRESULT WINAPI WindowsSubstring(HSTRING str, UINT32 pos, HSTRING *out); HRESULT WINAPI WindowsSubstringWithSpecifiedLength(HSTRING str, UINT32 pos, UINT32 len, HSTRING *out); HRESULT WINAPI WindowsTrimStringEnd(HSTRING str, HSTRING charstr, HSTRING *out); HRESULT WINAPI WindowsTrimStringStart(HSTRING str, HSTRING charstr, HSTRING *out); #ifdef __cplusplus } #endif #endif /* __WINE_WINSTRING_H */ ================================================ FILE: wine/windows/winsvc.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINSVC_H #define __WINE_WINSVC_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifdef _ADVAPI32_ #define WINADVAPI #else #define WINADVAPI DECLSPEC_IMPORT #endif /* Service database names */ #define SERVICES_ACTIVE_DATABASEA "ServicesActive" #define SERVICES_FAILED_DATABASEA "ServicesFailed" #if defined(__GNUC__) # define SERVICES_ACTIVE_DATABASEW (const WCHAR []){ 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 } # define SERVICES_FAILED_DATABASEW (const WCHAR []){ 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 } #elif defined(_MSC_VER) # define SERVICES_ACTIVE_DATABASEW L"ServicesActive" # define SERVICES_FAILED_DATABASEW L"ServicesFailed" #else static const WCHAR SERVICES_ACTIVE_DATABASEW[] = { 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 }; static const WCHAR SERVICES_FAILED_DATABASEW[] = { 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 }; #endif #define SERVICES_ACTIVE_DATABASE WINELIB_NAME_AW( SERVICES_ACTIVE_DATABASE ) #define SERVICES_FAILED_DATABASE WINELIB_NAME_AW( SERVICES_FAILED_DATABASE ) /* Service State requests */ #define SERVICE_ACTIVE 0x00000001 #define SERVICE_INACTIVE 0x00000002 #define SERVICE_STATE_ALL (SERVICE_ACTIVE | SERVICE_INACTIVE) /* Controls */ #define SERVICE_CONTROL_STOP 0x00000001 #define SERVICE_CONTROL_PAUSE 0x00000002 #define SERVICE_CONTROL_CONTINUE 0x00000003 #define SERVICE_CONTROL_INTERROGATE 0x00000004 #define SERVICE_CONTROL_SHUTDOWN 0x00000005 #define SERVICE_CONTROL_PARAMCHANGE 0x00000006 #define SERVICE_CONTROL_NETBINDADD 0x00000007 #define SERVICE_CONTROL_NETBINDREMOVE 0x00000008 #define SERVICE_CONTROL_NETBINDENABLE 0x00000009 #define SERVICE_CONTROL_NETBINDDISABLE 0x0000000A #define SERVICE_CONTROL_DEVICEEVENT 0x0000000B #define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0x0000000C #define SERVICE_CONTROL_POWEREVENT 0x0000000D #define SERVICE_CONTROL_SESSIONCHANGE 0x0000000E #define SERVICE_CONTROL_PRESHUTDOWN 0x0000000F /* Service State */ #define SERVICE_STOPPED 0x00000001 #define SERVICE_START_PENDING 0x00000002 #define SERVICE_STOP_PENDING 0x00000003 #define SERVICE_RUNNING 0x00000004 #define SERVICE_CONTINUE_PENDING 0x00000005 #define SERVICE_PAUSE_PENDING 0x00000006 #define SERVICE_PAUSED 0x00000007 /* Controls Accepted */ #define SERVICE_ACCEPT_STOP 0x00000001 #define SERVICE_ACCEPT_PAUSE_CONTINUE 0x00000002 #define SERVICE_ACCEPT_SHUTDOWN 0x00000004 #define SERVICE_ACCEPT_PARAMCHANGE 0x00000008 #define SERVICE_ACCEPT_NETBINDCHANGE 0x00000010 #define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 0x00000020 #define SERVICE_ACCEPT_POWEREVENT 0x00000040 #define SERVICE_ACCEPT_SESSIONCHANGE 0x00000080 #define SERVICE_ACCEPT_PRESHUTDOWN 0x00000100 /* Service Control Manager Object access types */ #define SC_MANAGER_CONNECT 0x0001 #define SC_MANAGER_CREATE_SERVICE 0x0002 #define SC_MANAGER_ENUMERATE_SERVICE 0x0004 #define SC_MANAGER_LOCK 0x0008 #define SC_MANAGER_QUERY_LOCK_STATUS 0x0010 #define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020 #define SC_MANAGER_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED | \ SC_MANAGER_CONNECT | \ SC_MANAGER_CREATE_SERVICE | \ SC_MANAGER_ENUMERATE_SERVICE | \ SC_MANAGER_LOCK | \ SC_MANAGER_QUERY_LOCK_STATUS | \ SC_MANAGER_MODIFY_BOOT_CONFIG ) #define SERVICE_QUERY_CONFIG 0x0001 #define SERVICE_CHANGE_CONFIG 0x0002 #define SERVICE_QUERY_STATUS 0x0004 #define SERVICE_ENUMERATE_DEPENDENTS 0x0008 #define SERVICE_START 0x0010 #define SERVICE_STOP 0x0020 #define SERVICE_PAUSE_CONTINUE 0x0040 #define SERVICE_INTERROGATE 0x0080 #define SERVICE_USER_DEFINED_CONTROL 0x0100 #define SERVICE_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED | \ SERVICE_QUERY_CONFIG | \ SERVICE_CHANGE_CONFIG | \ SERVICE_QUERY_STATUS | \ SERVICE_ENUMERATE_DEPENDENTS | \ SERVICE_START | \ SERVICE_STOP | \ SERVICE_PAUSE_CONTINUE | \ SERVICE_INTERROGATE | \ SERVICE_USER_DEFINED_CONTROL ) #define SERVICE_NO_CHANGE 0xffffffff /* Handle types */ DECLARE_HANDLE(SC_HANDLE); typedef SC_HANDLE *LPSC_HANDLE; DECLARE_HANDLE(SERVICE_STATUS_HANDLE); typedef LPVOID SC_LOCK; /* Service status structure */ typedef struct _SERVICE_STATUS { DWORD dwServiceType; DWORD dwCurrentState; DWORD dwControlsAccepted; DWORD dwWin32ExitCode; DWORD dwServiceSpecificExitCode; DWORD dwCheckPoint; DWORD dwWaitHint; } SERVICE_STATUS, *LPSERVICE_STATUS; /* Service status process structure */ typedef struct _SERVICE_STATUS_PROCESS { DWORD dwServiceType; DWORD dwCurrentState; DWORD dwControlsAccepted; DWORD dwWin32ExitCode; DWORD dwServiceSpecificExitCode; DWORD dwCheckPoint; DWORD dwWaitHint; DWORD dwProcessId; DWORD dwServiceFlags; } SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS; #define SERVICE_NOTIFY_STATUS_CHANGE 2 #define SERVICE_NOTIFY_STOPPED 0x1 #define SERVICE_NOTIFY_START_PENDING 0x2 #define SERVICE_NOTIFY_STOP_PENDING 0x4 #define SERVICE_NOTIFY_RUNNING 0x8 #define SERVICE_NOTIFY_CONTINUE_PENDING 0x10 #define SERVICE_NOTIFY_PAUSE_PENDING 0x20 #define SERVICE_NOTIFY_PAUSED 0x40 #define SERVICE_NOTIFY_CREATED 0x80 #define SERVICE_NOTIFY_DELETED 0x100 #define SERVICE_NOTIFY_DELETE_PENDING 0x200 typedef void (CALLBACK *PFN_SC_NOTIFY_CALLBACK)(void *); typedef struct _SERVICE_NOTIFY_2A { DWORD dwVersion; PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback; void *pContext; DWORD dwNotificationStatus; SERVICE_STATUS_PROCESS ServiceStatus; DWORD dwNotificationTriggered; char *pszServiceNames; } SERVICE_NOTIFY_2A, SERVICE_NOTIFYA; typedef struct _SERVICE_NOTIFY_2W { DWORD dwVersion; PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback; void *pContext; DWORD dwNotificationStatus; SERVICE_STATUS_PROCESS ServiceStatus; DWORD dwNotificationTriggered; WCHAR *pszServiceNames; } SERVICE_NOTIFY_2W, SERVICE_NOTIFYW; DWORD WINAPI NotifyServiceStatusChangeW(SC_HANDLE,DWORD,SERVICE_NOTIFYW*); typedef enum _SC_STATUS_TYPE { SC_STATUS_PROCESS_INFO = 0 } SC_STATUS_TYPE; /* Service main function prototype */ typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*); typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR*); DECL_WINELIB_TYPE_AW(LPSERVICE_MAIN_FUNCTION) /* Service start table */ typedef struct _SERVICE_TABLE_ENTRYA { LPSTR lpServiceName; LPSERVICE_MAIN_FUNCTIONA lpServiceProc; } SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA; typedef struct _SERVICE_TABLE_ENTRYW { LPWSTR lpServiceName; LPSERVICE_MAIN_FUNCTIONW lpServiceProc; } SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW; DECL_WINELIB_TYPE_AW(SERVICE_TABLE_ENTRY) DECL_WINELIB_TYPE_AW(LPSERVICE_TABLE_ENTRY) /* Service status enumeration structure */ typedef struct _ENUM_SERVICE_STATUSA { LPSTR lpServiceName; LPSTR lpDisplayName; SERVICE_STATUS ServiceStatus; } ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA; typedef struct _ENUM_SERVICE_STATUSW { LPWSTR lpServiceName; LPWSTR lpDisplayName; SERVICE_STATUS ServiceStatus; } ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW; DECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS) DECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS) typedef struct _ENUM_SERVICE_STATUS_PROCESSA { LPSTR lpServiceName; LPSTR lpDisplayName; SERVICE_STATUS_PROCESS ServiceStatusProcess; } ENUM_SERVICE_STATUS_PROCESSA, *LPENUM_SERVICE_STATUS_PROCESSA; typedef struct _ENUM_SERVICE_STATUS_PROCESSW { LPWSTR lpServiceName; LPWSTR lpDisplayName; SERVICE_STATUS_PROCESS ServiceStatusProcess; } ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW; DECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS_PROCESS) DECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS_PROCESS) typedef enum _SC_ENUM_TYPE { SC_ENUM_PROCESS_INFO = 0 } SC_ENUM_TYPE; typedef struct _QUERY_SERVICE_CONFIGA { DWORD dwServiceType; DWORD dwStartType; DWORD dwErrorControl; LPSTR lpBinaryPathName; LPSTR lpLoadOrderGroup; DWORD dwTagId; LPSTR lpDependencies; LPSTR lpServiceStartName; LPSTR lpDisplayName; } QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA; typedef struct _QUERY_SERVICE_CONFIGW { DWORD dwServiceType; DWORD dwStartType; DWORD dwErrorControl; LPWSTR lpBinaryPathName; LPWSTR lpLoadOrderGroup; DWORD dwTagId; LPWSTR lpDependencies; LPWSTR lpServiceStartName; LPWSTR lpDisplayName; } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW; /* defines and structures for ChangeServiceConfig2 */ #define SERVICE_CONFIG_DESCRIPTION 1 #define SERVICE_CONFIG_FAILURE_ACTIONS 2 #define SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3 #define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4 #define SERVICE_CONFIG_SERVICE_SID_INFO 5 #define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6 #define SERVICE_CONFIG_PRESHUTDOWN_INFO 7 typedef struct _SERVICE_DESCRIPTIONA { LPSTR lpDescription; } SERVICE_DESCRIPTIONA,*LPSERVICE_DESCRIPTIONA; typedef struct _SERVICE_DESCRIPTIONW { LPWSTR lpDescription; } SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW; DECL_WINELIB_TYPE_AW(SERVICE_DESCRIPTION) DECL_WINELIB_TYPE_AW(LPSERVICE_DESCRIPTION) typedef enum _SC_ACTION_TYPE { SC_ACTION_NONE = 0, SC_ACTION_RESTART = 1, SC_ACTION_REBOOT = 2, SC_ACTION_RUN_COMMAND = 3 } SC_ACTION_TYPE; typedef struct _SC_ACTION { SC_ACTION_TYPE Type; DWORD Delay; } SC_ACTION,*LPSC_ACTION; typedef struct _SERVICE_FAILURE_ACTIONSA { DWORD dwResetPeriod; LPSTR lpRebootMsg; LPSTR lpCommand; DWORD cActions; SC_ACTION * lpsaActions; } SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA; typedef struct _SERVICE_FAILURE_ACTIONSW { DWORD dwResetPeriod; LPWSTR lpRebootMsg; LPWSTR lpCommand; DWORD cActions; SC_ACTION * lpsaActions; } SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW; DECL_WINELIB_TYPE_AW(SERVICE_FAILURE_ACTIONS) DECL_WINELIB_TYPE_AW(LPSERVICE_FAILURE_ACTIONS) typedef struct _SERVICE_DELAYED_AUTO_START_INFO { BOOL fDelayedAutostart; } SERVICE_DELAYED_AUTO_START_INFO,*LPSERVICE_DELAYED_AUTO_START_INFO; typedef struct _SERVICE_FAILURE_ACTIONS_FLAG { BOOL fFailureActionsOnNonCrashFailures; } SERVICE_FAILURE_ACTIONS_FLAG,*LPSERVICE_FAILURE_ACTIONS_FLAG; typedef struct _SERVICE_SID_INFO { DWORD dwServiceSidType; } SERVICE_SID_INFO,*LPSERVICE_SID_INFO; typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA { LPSTR pmszRequiredPrivileges; } SERVICE_REQUIRED_PRIVILEGES_INFOA,*LPSERVICE_REQUIRED_PRIVILEGES_INFOA; typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW { LPWSTR pmszRequiredPrivileges; } SERVICE_REQUIRED_PRIVILEGES_INFOW,*LPSERVICE_REQUIRED_PRIVILEGES_INFOW; DECL_WINELIB_TYPE_AW(SERVICE_REQUIRED_PRIVILEGES_INFO) DECL_WINELIB_TYPE_AW(LPSERVICE_REQUIRED_PRIVILEGES_INFO) typedef struct _SERVICE_PRESHUTDOWN_INFO { DWORD dwPreshutdownTimeout; } SERVICE_PRESHUTDOWN_INFO,*LPSERVICE_PRESHUTDOWN_INFO; typedef struct _QUERY_SERVICE_LOCK_STATUSA { DWORD fIsLocked; LPSTR lpLockOwner; DWORD dwLockDuration; } QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA; typedef struct _QUERY_SERVICE_LOCK_STATUSW { DWORD fIsLocked; LPWSTR lpLockOwner; DWORD dwLockDuration; } QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW; DECL_WINELIB_TYPE_AW(QUERY_SERVICE_LOCK_STATUS) /* Service control handler function prototype */ typedef VOID (WINAPI *LPHANDLER_FUNCTION)(DWORD); typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID); /* API function prototypes */ WINADVAPI BOOL WINAPI ChangeServiceConfigA(SC_HANDLE,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR); WINADVAPI BOOL WINAPI ChangeServiceConfigW(SC_HANDLE,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); #define ChangeServiceConfig WINELIB_NAME_AW(ChangeServiceConfig) WINADVAPI BOOL WINAPI ChangeServiceConfig2A(SC_HANDLE,DWORD,LPVOID); WINADVAPI BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE,DWORD,LPVOID); #define ChangeServiceConfig2 WINELIB_NAME_AW(ChangeServiceConfig2) WINADVAPI BOOL WINAPI CloseServiceHandle(SC_HANDLE); WINADVAPI BOOL WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS); WINADVAPI SC_HANDLE WINAPI CreateServiceA(SC_HANDLE,LPCSTR,LPCSTR,DWORD,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR); WINADVAPI SC_HANDLE WINAPI CreateServiceW(SC_HANDLE,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR); #define CreateService WINELIB_NAME_AW(CreateService) WINADVAPI BOOL WINAPI DeleteService(SC_HANDLE); WINADVAPI BOOL WINAPI EnumDependentServicesA(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD); WINADVAPI BOOL WINAPI EnumDependentServicesW(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD); #define EnumDependentServices WINELIB_NAME_AW(EnumDependentServices) WINADVAPI BOOL WINAPI EnumServicesStatusA(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD,LPDWORD); WINADVAPI BOOL WINAPI EnumServicesStatusW(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD,LPDWORD); #define EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus) WINADVAPI BOOL WINAPI EnumServicesStatusExA(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCSTR); WINADVAPI BOOL WINAPI EnumServicesStatusExW(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCWSTR); #define EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus) WINADVAPI BOOL WINAPI GetServiceDisplayNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD); WINADVAPI BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD); #define GetServiceDisplayName WINELIB_NAME_AW(GetServiceDisplayName) WINADVAPI BOOL WINAPI GetServiceKeyNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD); WINADVAPI BOOL WINAPI GetServiceKeyNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD); #define GetServiceKeyName WINELIB_NAME_AW(GetServiceKeyName) WINADVAPI SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE); WINADVAPI BOOL WINAPI NotifyBootConfigStatus(BOOL); WINADVAPI SC_HANDLE WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD); WINADVAPI SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD); #define OpenSCManager WINELIB_NAME_AW(OpenSCManager) WINADVAPI SC_HANDLE WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD); WINADVAPI SC_HANDLE WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD); #define OpenService WINELIB_NAME_AW(OpenService) WINADVAPI BOOL WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS); WINADVAPI BOOL WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD); WINADVAPI BOOL WINAPI QueryServiceConfigA(SC_HANDLE,LPQUERY_SERVICE_CONFIGA,DWORD,LPDWORD); WINADVAPI BOOL WINAPI QueryServiceConfigW(SC_HANDLE,LPQUERY_SERVICE_CONFIGW,DWORD,LPDWORD); #define QueryServiceConfig WINELIB_NAME_AW(QueryServiceConfig) WINADVAPI BOOL WINAPI QueryServiceConfig2A(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD); WINADVAPI BOOL WINAPI QueryServiceConfig2W(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD); #define QueryServiceConfig2 WINELIB_NAME_AW(QueryServiceConfig2) WINADVAPI BOOL WINAPI QueryServiceLockStatusA(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSA,DWORD,LPDWORD); WINADVAPI BOOL WINAPI QueryServiceLockStatusW(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSW,DWORD,LPDWORD); #define QueryServiceLockStatus WINELIB_NAME_AW(QueryServiceLockStatus) WINADVAPI BOOL WINAPI QueryServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD); WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR,LPHANDLER_FUNCTION); WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR,LPHANDLER_FUNCTION); #define RegisterServiceCtrlHandler WINELIB_NAME_AW(RegisterServiceCtrlHandler) WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID); WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR,LPHANDLER_FUNCTION_EX,LPVOID); #define RegisterServiceCtrlHandlerEx WINELIB_NAME_AW(RegisterServiceCtrlHandlerEx) WINADVAPI BOOL WINAPI SetServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); WINADVAPI BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE,LPSERVICE_STATUS); WINADVAPI BOOL WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*); WINADVAPI BOOL WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*); #define StartService WINELIB_NAME_AW(StartService) WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA*); WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherW(const SERVICE_TABLE_ENTRYW*); #define StartServiceCtrlDispatcher WINELIB_NAME_AW(StartServiceCtrlDispatcher) WINADVAPI BOOL WINAPI UnlockServiceDatabase(SC_LOCK); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* !defined(__WINE_WINSVC_H) */ ================================================ FILE: wine/windows/winsxs.idl ================================================ /* * Copyright 2010 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "oleidl.idl"; interface IAssemblyCache; interface IAssemblyCacheItem; interface IAssemblyName; typedef struct _FUSION_INSTALL_REFERENCE_ { DWORD cbSize; DWORD dwFlags; GUID guidScheme; LPCWSTR szIdentifier; LPCWSTR szNonCannonicalData; } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE; typedef struct _ASSEMBLY_INFO { ULONG cbAssemblyInfo; DWORD dwAssemblyFlags; ULARGE_INTEGER uliAssemblySizeInKB; LPWSTR pszCurrentAssemblyPathBuf; ULONG cchBuf; } ASSEMBLY_INFO; typedef const struct _FUSION_INSTALL_REFERENCE_ *LPCFUSION_INSTALL_REFERENCE; [ object, uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae), pointer_default(unique), local ] interface IAssemblyCache : IUnknown { HRESULT UninstallAssembly( [in] DWORD flags, [in] LPCWSTR name, [in] LPCFUSION_INSTALL_REFERENCE ref, [out, optional] ULONG *disp); HRESULT QueryAssemblyInfo( [in] DWORD flags, [in] LPCWSTR name, [in, out] ASSEMBLY_INFO *info); HRESULT CreateAssemblyCacheItem( [in] DWORD flags, [in] PVOID reserved, [out] IAssemblyCacheItem **item, [in, optional] LPCWSTR name); HRESULT Reserved( [out] IUnknown **reserved); HRESULT InstallAssembly( [in] DWORD flags, [in] LPCWSTR path, [in] LPCFUSION_INSTALL_REFERENCE ref); } [ object, uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae), pointer_default(unique), local ] interface IAssemblyCacheItem : IUnknown { HRESULT CreateStream( [in] DWORD flags, [in] LPCWSTR name, [in] DWORD format, [in] DWORD format_flags, [out] IStream **stream, [in, optional] ULARGE_INTEGER *max_size); HRESULT Commit( [in] DWORD flags, [out, optional] ULONG *disp); HRESULT AbortItem(); } [ object, uuid(cd193bc0-b4bc-11D2-9833-00c04fc31d2e), pointer_default(unique), local ] interface IAssemblyName : IUnknown { typedef [public] enum { ASM_NAME_PUBLIC_KEY, ASM_NAME_PUBLIC_KEY_TOKEN, ASM_NAME_HASH_VALUE, ASM_NAME_NAME, ASM_NAME_MAJOR_VERSION, ASM_NAME_MINOR_VERSION, ASM_NAME_BUILD_NUMBER, ASM_NAME_REVISION_NUMBER, ASM_NAME_CULTURE, ASM_NAME_PROCESSOR_ID_ARRAY, ASM_NAME_OSINFO_ARRAY, ASM_NAME_HASH_ALGID, ASM_NAME_ALIAS, ASM_NAME_CODEBASE_URL, ASM_NAME_CODEBASE_LASTMOD, ASM_NAME_NULL_PUBLIC_KEY, ASM_NAME_NULL_PUBLIC_KEY_TOKEN, ASM_NAME_CUSTOM, ASM_NAME_NULL_CUSTOM, ASM_NAME_MVID, ASM_NAME_MAX_PARAMS } ASM_NAME; typedef [public] enum { ASM_DISPLAYF_VERSION = 0x1, ASM_DISPLAYF_CULTURE = 0x2, ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4, ASM_DISPLAYF_PUBLIC_KEY = 0x8, ASM_DISPLAYF_CUSTOM = 0x10, ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20, ASM_DISPLAYF_LANGUAGEID = 0x40 } ASM_DISPLAY_FLAGS; HRESULT SetProperty( [in] DWORD id, [in] LPVOID property, [in] DWORD size); HRESULT GetProperty( [in] DWORD id, [out] LPVOID buffer, [in][out] LPDWORD buflen); HRESULT Finalize(); HRESULT GetDisplayName( [out] LPWSTR buffer, [in][out] LPDWORD buflen, [in] DWORD flags); HRESULT Reserved( [in] REFIID riid, [in] IUnknown *pUnkReserved1, [in] IUnknown *pUnkReserved2, [in] LPCOLESTR szReserved, [in] LONGLONG llReserved, [in] LPVOID pvReserved, [in] DWORD cbReserved, [out] LPVOID *ppReserved); HRESULT GetName( [in][out] LPDWORD buflen, [out] LPWSTR buffer); HRESULT GetVersion( [out] LPDWORD hi, [out] LPDWORD low); HRESULT IsEqual( [in] IAssemblyName *name, [in] DWORD flags); HRESULT Clone( [out] IAssemblyName **name); } typedef [unique] IAssemblyName *LPASSEMBLYNAME; typedef [public] enum { CANOF_PARSE_DISPLAY_NAME = 0x1, CANOF_SET_DEFAULT_VALUES = 0x2 } CREATE_ASM_NAME_OBJ_FLAGS; cpp_quote("HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);") cpp_quote("HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME *,LPCWSTR,DWORD,LPVOID);") ================================================ FILE: wine/windows/wintab.h ================================================ /* * Copyright (C) 1991-1998 by LCS/Telegraphics * Copyright (C) 2002 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINTAB_H #define __WINE_WINTAB_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /*********************************************************************** * Messages */ #ifndef NOWTMESSAGES #define WT_DEFBASE 0x7FF0 #define WT_MAXOFFSET 0xF #define _WT_PACKET(b) ((b)+0) #define _WT_CTXOPEN(b) ((b)+1) #define _WT_CTXCLOSE(b) ((b)+2) #define _WT_CTXUPDATE(b) ((b)+3) #define _WT_CTXOVERLAP(b) ((b)+4) #define _WT_PROXIMITY(b) ((b)+5) #define _WT_INFOCHANGE(b) ((b)+6) #define _WT_CSRCHANGE(b) ((b)+7) /* 1.1 */ #define _WT_MAX(b) ((b)+WT_MAXOFFSET) #define WT_PACKET _WT_PACKET(WT_DEFBASE) #define WT_CTXOPEN _WT_CTXOPEN(WT_DEFBASE) #define WT_CTXCLOSE _WT_CTXCLOSE(WT_DEFBASE) #define WT_CTXUPDATE _WT_CTXUPDATE(WT_DEFBASE) #define WT_CTXOVERLAP _WT_CTXOVERLAP(WT_DEFBASE) #define WT_PROXIMITY _WT_PROXIMITY(WT_DEFBASE) #define WT_INFOCHANGE _WT_INFOCHANGE(WT_DEFBASE) #define WT_CSRCHANGE _WT_CSRCHANGE(WT_DEFBASE) /* 1.1 */ #define WT_MAX _WT_MAX(WT_DEFBASE) #endif /*********************************************************************** * COMMON DATA DEFS */ DECLARE_HANDLE(HMGR); /* manager handle */ DECLARE_HANDLE(HCTX); /* context handle */ DECLARE_HANDLE(HWTHOOK); /* hook handle */ typedef DWORD WTPKT; /* packet mask */ #ifndef NOWTPKT /* WTPKT bits */ #define PK_CONTEXT 0x0001 /* reporting context */ #define PK_STATUS 0x0002 /* status bits */ #define PK_TIME 0x0004 /* time stamp */ #define PK_CHANGED 0x0008 /* change bit vector */ #define PK_SERIAL_NUMBER 0x0010 /* packet serial number */ #define PK_CURSOR 0x0020 /* reporting cursor */ #define PK_BUTTONS 0x0040 /* button information */ #define PK_X 0x0080 /* x axis */ #define PK_Y 0x0100 /* y axis */ #define PK_Z 0x0200 /* z axis */ #define PK_NORMAL_PRESSURE 0x0400 /* normal or tip pressure */ #define PK_TANGENT_PRESSURE 0x0800 /* tangential or barrel pressure */ #define PK_ORIENTATION 0x1000 /* orientation info: tilts */ #define PK_ROTATION 0x2000 /* rotation info; 1.1 */ #endif typedef DWORD FIX32; /* fixed-point arithmetic type */ #ifndef NOFIX32 #define INT(x) HIWORD(x) #define FRAC(x) LOWORD(x) #define CASTFIX32(x) ((FIX32)((x)*65536L)) #define ROUND(x) (INT(x) + (FRAC(x) > (WORD)0x8000)) #define FIX_MUL(c, a, b) \ (c = (((DWORD)FRAC(a) * FRAC(b)) >> 16) + \ (DWORD)INT(a) * FRAC(b) + \ (DWORD)INT(b) * FRAC(a) + \ ((DWORD)INT(a) * INT(b) << 16)) #ifdef _WINDLL # define FIX_DIV_SC static #else # define FIX_DIV_SC # endif #define FIX_DIV(c, a, b) \ { \ FIX_DIV_SC DWORD temp, rem, btemp; \ \ /* fraction done bytewise */ \ temp = ((a / b) << 16); \ rem = a % b; \ btemp = b; \ if (INT(btemp) < 256) { \ rem <<= 8; \ } else { \ btemp >>= 8; \ } \ temp += ((rem / btemp) << 8); \ rem %= btemp; \ rem <<= 8; \ temp += rem / btemp; \ c = temp; \ } #endif /*********************************************************************** * INFO DATA DEFS */ #ifndef NOWTINFO #ifndef NOWTAXIS typedef struct tagAXIS { LONG axMin; LONG axMax; UINT axUnits; FIX32 axResolution; } AXIS, *PAXIS, *NPAXIS, *LPAXIS; /* unit specifiers */ #define TU_NONE 0 #define TU_INCHES 1 #define TU_CENTIMETERS 2 #define TU_CIRCLE 3 #endif #ifndef NOWTSYSBUTTONS /* system button assignment values */ #define SBN_NONE 0x00 #define SBN_LCLICK 0x01 #define SBN_LDBLCLICK 0x02 #define SBN_LDRAG 0x03 #define SBN_RCLICK 0x04 #define SBN_RDBLCLICK 0x05 #define SBN_RDRAG 0x06 #define SBN_MCLICK 0x07 #define SBN_MDBLCLICK 0x08 #define SBN_MDRAG 0x09 /* for Pen Windows */ #define SBN_PTCLICK 0x10 #define SBN_PTDBLCLICK 0x20 #define SBN_PTDRAG 0x30 #define SBN_PNCLICK 0x40 #define SBN_PNDBLCLICK 0x50 #define SBN_PNDRAG 0x60 #define SBN_P1CLICK 0x70 #define SBN_P1DBLCLICK 0x80 #define SBN_P1DRAG 0x90 #define SBN_P2CLICK 0xA0 #define SBN_P2DBLCLICK 0xB0 #define SBN_P2DRAG 0xC0 #define SBN_P3CLICK 0xD0 #define SBN_P3DBLCLICK 0xE0 #define SBN_P3DRAG 0xF0 #endif #ifndef NOWTCAPABILITIES /* hardware capabilities */ #define HWC_INTEGRATED 0x0001 #define HWC_TOUCH 0x0002 #define HWC_HARDPROX 0x0004 #define HWC_PHYSID_CURSORS 0x0008 /* 1.1 */ #endif #ifndef NOWTIFC #ifndef NOWTCURSORS /* cursor capabilities */ #define CRC_MULTIMODE 0x0001 /* 1.1 */ #define CRC_AGGREGATE 0x0002 /* 1.1 */ #define CRC_INVERT 0x0004 /* 1.1 */ #endif /* info categories */ #define WTI_INTERFACE 1 #define IFC_WINTABID 1 #define IFC_SPECVERSION 2 #define IFC_IMPLVERSION 3 #define IFC_NDEVICES 4 #define IFC_NCURSORS 5 #define IFC_NCONTEXTS 6 #define IFC_CTXOPTIONS 7 #define IFC_CTXSAVESIZE 8 #define IFC_NEXTENSIONS 9 #define IFC_NMANAGERS 10 #define IFC_MAX 10 #endif #ifndef NOWTSTATUS #define WTI_STATUS 2 #define STA_CONTEXTS 1 #define STA_SYSCTXS 2 #define STA_PKTRATE 3 #define STA_PKTDATA 4 #define STA_MANAGERS 5 #define STA_SYSTEM 6 #define STA_BUTTONUSE 7 #define STA_SYSBTNUSE 8 #define STA_MAX 8 #endif #ifndef NOWTDEFCONTEXT #define WTI_DEFCONTEXT 3 #define WTI_DEFSYSCTX 4 #define WTI_DDCTXS 400 /* 1.1 */ #define WTI_DSCTXS 500 /* 1.1 */ #define CTX_NAME 1 #define CTX_OPTIONS 2 #define CTX_STATUS 3 #define CTX_LOCKS 4 #define CTX_MSGBASE 5 #define CTX_DEVICE 6 #define CTX_PKTRATE 7 #define CTX_PKTDATA 8 #define CTX_PKTMODE 9 #define CTX_MOVEMASK 10 #define CTX_BTNDNMASK 11 #define CTX_BTNUPMASK 12 #define CTX_INORGX 13 #define CTX_INORGY 14 #define CTX_INORGZ 15 #define CTX_INEXTX 16 #define CTX_INEXTY 17 #define CTX_INEXTZ 18 #define CTX_OUTORGX 19 #define CTX_OUTORGY 20 #define CTX_OUTORGZ 21 #define CTX_OUTEXTX 22 #define CTX_OUTEXTY 23 #define CTX_OUTEXTZ 24 #define CTX_SENSX 25 #define CTX_SENSY 26 #define CTX_SENSZ 27 #define CTX_SYSMODE 28 #define CTX_SYSORGX 29 #define CTX_SYSORGY 30 #define CTX_SYSEXTX 31 #define CTX_SYSEXTY 32 #define CTX_SYSSENSX 33 #define CTX_SYSSENSY 34 #define CTX_MAX 34 #endif #ifndef NOWTDEVICES #define WTI_DEVICES 100 #define DVC_NAME 1 #define DVC_HARDWARE 2 #define DVC_NCSRTYPES 3 #define DVC_FIRSTCSR 4 #define DVC_PKTRATE 5 #define DVC_PKTDATA 6 #define DVC_PKTMODE 7 #define DVC_CSRDATA 8 #define DVC_XMARGIN 9 #define DVC_YMARGIN 10 #define DVC_ZMARGIN 11 #define DVC_X 12 #define DVC_Y 13 #define DVC_Z 14 #define DVC_NPRESSURE 15 #define DVC_TPRESSURE 16 #define DVC_ORIENTATION 17 #define DVC_ROTATION 18 /* 1.1 */ #define DVC_PNPID 19 /* 1.1 */ #define DVC_MAX 19 #endif #ifndef NOWTCURSORS #define WTI_CURSORS 200 #define CSR_NAME 1 #define CSR_ACTIVE 2 #define CSR_PKTDATA 3 #define CSR_BUTTONS 4 #define CSR_BUTTONBITS 5 #define CSR_BTNNAMES 6 #define CSR_BUTTONMAP 7 #define CSR_SYSBTNMAP 8 #define CSR_NPBUTTON 9 #define CSR_NPBTNMARKS 10 #define CSR_NPRESPONSE 11 #define CSR_TPBUTTON 12 #define CSR_TPBTNMARKS 13 #define CSR_TPRESPONSE 14 #define CSR_PHYSID 15 /* 1.1 */ #define CSR_MODE 16 /* 1.1 */ #define CSR_MINPKTDATA 17 /* 1.1 */ #define CSR_MINBUTTONS 18 /* 1.1 */ #define CSR_CAPABILITIES 19 /* 1.1 */ /* from http://www.wacomeng.com/devsupport/ibmpc/wacomwindevfaq.html */ #define CSR_TYPE 20 #define CSR_MAX 20 #endif #ifndef NOWTEXTENSIONS #define WTI_EXTENSIONS 300 #define EXT_NAME 1 #define EXT_TAG 2 #define EXT_MASK 3 #define EXT_SIZE 4 #define EXT_AXES 5 #define EXT_DEFAULT 6 #define EXT_DEFCONTEXT 7 #define EXT_DEFSYSCTX 8 #define EXT_CURSORS 9 #define EXT_MAX 109 /* Allow 100 cursors */ #endif #endif /*********************************************************************** * CONTEXT DATA DEFS */ #define LCNAMELEN 40 #define LC_NAMELEN 40 typedef struct tagLOGCONTEXTA { char lcName[LCNAMELEN]; UINT lcOptions; UINT lcStatus; UINT lcLocks; UINT lcMsgBase; UINT lcDevice; UINT lcPktRate; WTPKT lcPktData; WTPKT lcPktMode; WTPKT lcMoveMask; DWORD lcBtnDnMask; DWORD lcBtnUpMask; LONG lcInOrgX; LONG lcInOrgY; LONG lcInOrgZ; LONG lcInExtX; LONG lcInExtY; LONG lcInExtZ; LONG lcOutOrgX; LONG lcOutOrgY; LONG lcOutOrgZ; LONG lcOutExtX; LONG lcOutExtY; LONG lcOutExtZ; FIX32 lcSensX; FIX32 lcSensY; FIX32 lcSensZ; BOOL lcSysMode; int lcSysOrgX; int lcSysOrgY; int lcSysExtX; int lcSysExtY; FIX32 lcSysSensX; FIX32 lcSysSensY; } LOGCONTEXTA, *PLOGCONTEXTA, *NPLOGCONTEXTA, *LPLOGCONTEXTA; typedef struct tagLOGCONTEXTW { WCHAR lcName[LCNAMELEN]; UINT lcOptions; UINT lcStatus; UINT lcLocks; UINT lcMsgBase; UINT lcDevice; UINT lcPktRate; WTPKT lcPktData; WTPKT lcPktMode; WTPKT lcMoveMask; DWORD lcBtnDnMask; DWORD lcBtnUpMask; LONG lcInOrgX; LONG lcInOrgY; LONG lcInOrgZ; LONG lcInExtX; LONG lcInExtY; LONG lcInExtZ; LONG lcOutOrgX; LONG lcOutOrgY; LONG lcOutOrgZ; LONG lcOutExtX; LONG lcOutExtY; LONG lcOutExtZ; FIX32 lcSensX; FIX32 lcSensY; FIX32 lcSensZ; BOOL lcSysMode; int lcSysOrgX; int lcSysOrgY; int lcSysExtX; int lcSysExtY; FIX32 lcSysSensX; FIX32 lcSysSensY; } LOGCONTEXTW, *PLOGCONTEXTW, *NPLOGCONTEXTW, *LPLOGCONTEXTW; DECL_WINELIB_TYPE_AW(LOGCONTEXT) DECL_WINELIB_TYPE_AW(PLOGCONTEXT) DECL_WINELIB_TYPE_AW(NPLOGCONTEXT) DECL_WINELIB_TYPE_AW(LPLOGCONTEXT) /* context option values */ #define CXO_SYSTEM 0x0001 #define CXO_PEN 0x0002 #define CXO_MESSAGES 0x0004 #define CXO_MARGIN 0x8000 #define CXO_MGNINSIDE 0x4000 #define CXO_CSRMESSAGES 0x0008 /* 1.1 */ /* context status values */ #define CXS_DISABLED 0x0001 #define CXS_OBSCURED 0x0002 #define CXS_ONTOP 0x0004 /* context lock values */ #define CXL_INSIZE 0x0001 #define CXL_INASPECT 0x0002 #define CXL_SENSITIVITY 0x0004 #define CXL_MARGIN 0x0008 #define CXL_SYSOUT 0x0010 /*********************************************************************** * EVENT DATA DEFS */ /* For packet structure definition, see pktdef.h */ /* packet status values */ #define TPS_PROXIMITY 0x0001 #define TPS_QUEUE_ERR 0x0002 #define TPS_MARGIN 0x0004 #define TPS_GRAB 0x0008 #define TPS_INVERT 0x0010 /* 1.1 */ typedef struct tagORIENTATION { int orAzimuth; int orAltitude; int orTwist; } ORIENTATION, *PORIENTATION, *NPORIENTATION, *LPORIENTATION; typedef struct tagROTATION { /* 1.1 */ int roPitch; int roRoll; int roYaw; } ROTATION, *PROTATION, *NPROTATION, *LPROTATION; /* grandfather in obsolete member names. */ #define rotPitch roPitch #define rotRoll roRoll #define rotYaw roYaw /* relative buttons */ #define TBN_NONE 0 #define TBN_UP 1 #define TBN_DOWN 2 /*********************************************************************** * DEVICE CONFIG CONSTANTS */ #ifndef NOWTDEVCFG #define WTDC_NONE 0 #define WTDC_CANCEL 1 #define WTDC_OK 2 #define WTDC_RESTART 3 #endif /*********************************************************************** * HOOK CONSTANTS */ #ifndef NOWTHOOKS #define WTH_PLAYBACK 1 #define WTH_RECORD 2 #define WTHC_GETLPLPFN (-3) #define WTHC_LPLPFNNEXT (-2) #define WTHC_LPFNNEXT (-1) #define WTHC_ACTION 0 #define WTHC_GETNEXT 1 #define WTHC_SKIP 2 #endif /*********************************************************************** * PREFERENCE FUNCTION CONSTANTS */ #ifndef NOWTPREF #define WTP_LPDEFAULT ((LPVOID)-1L) #define WTP_DWDEFAULT ((DWORD)-1L) #endif /*********************************************************************** * EXTENSION TAGS AND CONSTANTS */ #ifndef NOWTEXTENSIONS /* constants for use with pktdef.h */ #define PKEXT_ABSOLUTE 1 #define PKEXT_RELATIVE 2 /* Extension tags. */ #define WTX_OBT 0 /* Out of bounds tracking */ #define WTX_FKEYS 1 /* Function keys */ #define WTX_TILT 2 /* Raw Cartesian tilt; 1.1 */ #define WTX_CSRMASK 3 /* select input by cursor type; 1.1 */ #define WTX_XBTNMASK 4 /* Extended button mask; 1.1 */ typedef struct tagXBTNMASK { BYTE xBtnDnMask[32]; BYTE xBtnUpMask[32]; } XBTNMASK; typedef struct tagTILT { /* 1.1 */ int tiltX; int tiltY; } TILT; #endif /*********************************************************************** * Functions */ #ifndef NOWTCALLBACKS #ifndef NOWTMANAGERFXNS /* callback function types */ typedef BOOL (WINAPI * WTENUMPROC)(HCTX, LPARAM); /* changed CALLBACK->WINAPI, 1.1 */ typedef BOOL (WINAPI * WTCONFIGPROC)(HCTX, HWND); typedef LRESULT (WINAPI * WTHOOKPROC)(int, WPARAM, LPARAM); typedef WTHOOKPROC *LPWTHOOKPROC; #endif #endif #ifndef NOWTFUNCTIONS #ifndef NOWTBASICFXNS /* BASIC FUNCTIONS */ #define ORD_WTInfoA 20 #define ORD_WTInfoW 1020 #define ORD_WTInfo WINELIB_NAME_AW(ORD_WTInfo) #define ORD_WTOpenA 21 #define ORD_WTOpenW 1021 #define ORD_WTOpen WINELIB_NAME_AW(ORD_WTOpen) #define ORD_WTClose 22 #define ORD_WTPacketsGet 23 #define ORD_WTPacket 24 UINT WINAPI WTInfoA(UINT, UINT, LPVOID); UINT WINAPI WTInfoW(UINT, UINT, LPVOID); #define WTInfo WINELIB_NAME_AW(WTInfo) HCTX WINAPI WTOpenA(HWND, LPLOGCONTEXTA, BOOL); HCTX WINAPI WTOpenW(HWND, LPLOGCONTEXTW, BOOL); #define WTOpen WINELIB_NAME_AW(WTOpen) BOOL WINAPI WTClose(HCTX); int WINAPI WTPacketsGet(HCTX, int, LPVOID); BOOL WINAPI WTPacket(HCTX, UINT, LPVOID); #endif #ifndef NOWTVISIBILITYFXNS /* VISIBILITY FUNCTIONS */ #define ORD_WTEnable 40 #define ORD_WTOverlap 41 BOOL WINAPI WTEnable(HCTX, BOOL); BOOL WINAPI WTOverlap(HCTX, BOOL); #endif #ifndef NOWTCTXEDITFXNS /* CONTEXT EDITING FUNCTIONS */ #define ORD_WTConfig 60 #define ORD_WTGetA 61 #define ORD_WTGetW 1061 #define ORD_WTGet WINELIB_NAME_AW(ORD_WTGet) #define ORD_WTSetA 62 #define ORD_WTSetW 1062 #define ORD_WTSet WINELIB_NAME_AW(ORD_WTSet) #define ORD_WTExtGet 63 #define ORD_WTExtSet 64 #define ORD_WTSave 65 #define ORD_WTRestore 66 BOOL WINAPI WTConfig(HCTX, HWND); BOOL WINAPI WTGetA(HCTX, LPLOGCONTEXTA); BOOL WINAPI WTGetW(HCTX, LPLOGCONTEXTW); #define WTGet WINELIB_NAME_AW(WTGet) BOOL WINAPI WTSetA(HCTX, LPLOGCONTEXTA); BOOL WINAPI WTSetW(HCTX, LPLOGCONTEXTW); #define WTSet WINELIB_NAME_AW(WTSet) BOOL WINAPI WTExtGet(HCTX, UINT, LPVOID); BOOL WINAPI WTExtSet(HCTX, UINT, LPVOID); BOOL WINAPI WTSave(HCTX, LPVOID); HCTX WINAPI WTRestore(HWND, LPVOID, BOOL); #endif #ifndef NOWTQUEUEFXNS /* ADVANCED PACKET AND QUEUE FUNCTIONS */ #define ORD_WTPacketsPeek 80 #define ORD_WTDataGet 81 #define ORD_WTDataPeek 82 #define ORD_WTQueueSizeGet 84 #define ORD_WTQueueSizeSet 85 int WINAPI WTPacketsPeek(HCTX, int, LPVOID); int WINAPI WTDataGet(HCTX, UINT, UINT, int, LPVOID, LPINT); int WINAPI WTDataPeek(HCTX, UINT, UINT, int, LPVOID, LPINT); int WINAPI WTQueueSizeGet(HCTX); BOOL WINAPI WTQueueSizeSet(HCTX, int); #endif #ifndef NOWTHMGRFXNS /* MANAGER HANDLE FUNCTIONS */ #define ORD_WTMgrOpen 100 #define ORD_WTMgrClose 101 HMGR WINAPI WTMgrOpen(HWND, UINT); BOOL WINAPI WTMgrClose(HMGR); #endif #ifndef NOWTMGRCTXFXNS /* MANAGER CONTEXT FUNCTIONS */ #define ORD_WTMgrContextEnum 120 #define ORD_WTMgrContextOwner 121 #define ORD_WTMgrDefContext 122 #define ORD_WTMgrDefContextEx 206 BOOL WINAPI WTMgrContextEnum(HMGR, WTENUMPROC, LPARAM); HWND WINAPI WTMgrContextOwner(HMGR, HCTX); HCTX WINAPI WTMgrDefContext(HMGR, BOOL); HCTX WINAPI WTMgrDefContextEx(HMGR, UINT, BOOL); /* 1.1 */ #endif #ifndef NOWTMGRCONFIGFXNS /* MANAGER CONFIG BOX FUNCTIONS */ #define ORD_WTMgrDeviceConfig 140 UINT WINAPI WTMgrDeviceConfig(HMGR, UINT, HWND); #endif #ifndef NOWTMGRHOOKFXNS /* MANAGER PACKET HOOK FUNCTIONS */ /* OBSOLETE IN WIN32! */ #endif #ifndef NOWTMGRPREFFXNS /* MANAGER PREFERENCE DATA FUNCTIONS */ #define ORD_WTMgrExt 180 #define ORD_WTMgrCsrEnable 181 #define ORD_WTMgrCsrButtonMap 182 #define ORD_WTMgrCsrPressureBtnMarks 183 #define ORD_WTMgrCsrPressureResponse 184 #define ORD_WTMgrCsrExt 185 BOOL WINAPI WTMgrExt(HMGR, UINT, LPVOID); BOOL WINAPI WTMgrCsrEnable(HMGR, UINT, BOOL); BOOL WINAPI WTMgrCsrButtonMap(HMGR, UINT, LPBYTE, LPBYTE); BOOL WINAPI WTMgrCsrPressureBtnMarks(HMGR, UINT, DWORD, DWORD); BOOL WINAPI WTMgrCsrPressureResponse(HMGR, UINT, UINT *, UINT *); BOOL WINAPI WTMgrCsrExt(HMGR, UINT, UINT, LPVOID); #endif /*********************************************************************** * Win32 replacements for non-portable functions. */ #ifndef NOWTQUEUEFXNS /* ADVANCED PACKET AND QUEUE FUNCTIONS */ #define ORD_WTQueuePacketsEx 200 BOOL WINAPI WTQueuePacketsEx(HCTX, UINT *, UINT *); #endif #ifndef NOWTMGRCONFIGFXNS /* MANAGER CONFIG BOX FUNCTIONS */ #define ORD_WTMgrConfigReplaceExA 202 #define ORD_WTMgrConfigReplaceExW 1202 #define ORD_WTMgrConfigReplaceEx WINELIB_NAME_AW(ORD_WTMgrConfigReplaceEx) BOOL WINAPI WTMgrConfigReplaceExA(HMGR, BOOL, LPSTR, LPSTR); BOOL WINAPI WTMgrConfigReplaceExW(HMGR, BOOL, LPWSTR, LPSTR); #define WTMgrConfigReplaceEx WINELIB_NAME_AW(WTMgrConfigReplaceEx) #endif #ifndef NOWTMGRHOOKFXNS /* MANAGER PACKET HOOK FUNCTIONS */ #define ORD_WTMgrPacketHookExA 203 #define ORD_WTMgrPacketHookExW 1203 #define ORD_WTMgrPacketHookEx WINELIB_NAME_AW(ORD_WTMgrPacketHookEx) #define ORD_WTMgrPacketUnhook 204 #define ORD_WTMgrPacketHookNext 205 HWTHOOK WINAPI WTMgrPacketHookExA(HMGR, int, LPSTR, LPSTR); HWTHOOK WINAPI WTMgrPacketHookExW(HMGR, int, LPWSTR, LPSTR); #define WTMgrPacketHookEx WINELIB_NAME_AW(WTMgrPacketHookEx) BOOL WINAPI WTMgrPacketUnhook(HWTHOOK); LRESULT WINAPI WTMgrPacketHookNext(HWTHOOK, int, WPARAM, LPARAM); #endif #ifndef NOWTMGRPREFFXNS /* MANAGER PREFERENCE DATA FUNCTIONS */ #define ORD_WTMgrCsrPressureBtnMarksEx 201 BOOL WINAPI WTMgrCsrPressureBtnMarksEx(HMGR, UINT, UINT *, UINT *); #endif #endif #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* defined(__WINE_WINTAB_H */ ================================================ FILE: wine/windows/wintabx.h ================================================ /* * Copyright (C) 1991-1998 by LCS/Telegraphics * Copyright (C) 2002 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINTABX_H #define __WINE_WINTABX_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /*********************************************************************** * Wintab message crackers */ #ifndef HANDLE_MSG # define HANDLE_MSG(hwnd, message, fn) \ case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn)) #endif /* void Cls_OnWintabPacket(HWND hwnd, HCTX hCtx, UINT sn) */ #define HANDLE_WT_PACKET(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HCTX)(lParam), (UINT)(wParam)), 0L) #define FORWARD__WT_PACKET(hwnd, bs, hCtx, sn, fn) \ (void)(fn)((hwnd), _WT_PACKET(bs), (WPARAM)(UINT)(sn), (LPARAM)(HCTX)(hCtx)) #define FORWARD_WT_PACKET(hwnd, hCtx, sn, fn) \ FORWARD__WT_PACKET(hwnd, WT_DEFBASE, hCtx, sn, fn) /* void Cls_OnWintabCtxOpen(HWND hwnd, HCTX hCtx, UINT sf) */ #define HANDLE_WT_CTXOPEN(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L) #define FORWARD__WT_CTXOPEN(hwnd, bs, hCtx, sf, fn) \ (void)(fn)((hwnd), _WT_CTXOPEN(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf)) #define FORWARD_WT_CTXOPEN(hwnd, hCtx, sf, fn) \ FORWARD__WT_CTXOPEN(hwnd, WT_DEFBASE, hCtx, sf, fn) /* void Cls_OnWintabCtxClose(HWND hwnd, HCTX hCtx, UINT sf) */ #define HANDLE_WT_CTXCLOSE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L) #define FORWARD__WT_CTXCLOSE(hwnd, bs, hCtx, sf, fn) \ (void)(fn)((hwnd), _WT_CTXCLOSE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf)) #define FORWARD_WT_CTXCLOSE(hwnd, hCtx, sf, fn) \ FORWARD__WT_CTXCLOSE(hwnd, WT_DEFBASE, hCtx, sf, fn) /* void Cls_OnWintabCtxUpdate(HWND hwnd, HCTX hCtx, UINT sf) */ #define HANDLE_WT_CTXUPDATE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L) #define FORWARD__WT_CTXUPDATE(hwnd, bs, hCtx, sf, fn) \ (void)(fn)((hwnd), _WT_CTXUPDATE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf)) #define FORWARD_WT_CTXUPDATE(hwnd, hCtx, sf, fn) \ FORWARD__WT_CTXUPDATE(hwnd, WT_DEFBASE, hCtx, sf, fn) /* void Cls_OnWintabCtxOverlap(HWND hwnd, HCTX hCtx, UINT sf) */ #define HANDLE_WT_CTXOVERLAP(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L) #define FORWARD__WT_CTXOVERLAP(hwnd, bs, hCtx, sf, fn) \ (void)(fn)((hwnd), _WT_CTXOVERLAP(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf)) #define FORWARD_WT_CTXOVERLAP(hwnd, hCtx, sf, fn) \ FORWARD__WT_CTXOVERLAP(hwnd, WT_DEFBASE, hCtx, sf, fn) /* void Cls_OnWintabProximity(HWND hwnd, HCTX hCtx, BOOL cp, BOOL hp) */ #define HANDLE_WT_PROXIMITY(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HCTX)(wParam), (BOOL)LOWORD(lParam), (BOOL)HIWORD(lParam)), 0L) #define FORWARD__WT_PROXIMITY(hwnd, bs, hCtx, cp, hp, fn) \ (void)(fn)((hwnd), _WT_PROXIMITY(bs), (WPARAM)(HCTX)(hCtx), MAKELPARAM((cp), (hp)) #define FORWARD_WT_PROXIMITY(hwnd, hCtx, sf, fn) \ FORWARD__WT_PROXIMITY(hwnd, WT_DEFBASE, hCtx, cp, hp, fn) /* void Cls_OnWintabInfoChange(HWND hwnd, HMGR hMgr, UINT c, UINT i) */ #define HANDLE_WT_INFOCHANGE(hwnd, wParam, lParam, fn) \ ((fn)((hwnd), (HMGR)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L) #define FORWARD__WT_INFOCHANGE(hwnd, bs, hMgr, cp, hp, fn) \ (void)(fn)((hwnd), _WT_INFOCHANGE(bs), (WPARAM)(HMGR)(hMgr), MAKELPARAM((c), (i)) #define FORWARD_WT_INFOCHANGE(hwnd, hMgr, sf, fn) \ FORWARD__WT_INFOCHANGE(hwnd, WT_DEFBASE, hMgr, cp, hp, fn) /*********************************************************************** * Alternate porting layer macros */ #define GET_WT_PACKET_HCTX(wp, lp) ((HCTX)lp) #define GET_WT_PACKET_SERIAL(wp, lp) (wp) #define GET_WT_PACKET_MPS(h, s) (s), (LPARAM)(h) #define GET_WT_CTXOPEN_HCTX(wp, lp) ((HCTX)wp) #define GET_WT_CTXOPEN_STATUS(wp, lp) ((UINT)lp) #define GET_WT_CTXOPEN_MPS(h, s) (WPARAM)(h), (LPARAM)(s) #define GET_WT_CTXCLOSE_HCTX(wp, lp) ((HCTX)wp) #define GET_WT_CTXCLOSE_STATUS(wp, lp) ((UINT)lp) #define GET_WT_CTXCLOSE_MPS(h, s) (WPARAM)(h), (LPARAM)(s) #define GET_WT_CTXUPDATE_HCTX(wp, lp) ((HCTX)wp) #define GET_WT_CTXUPDATE_STATUS(wp, lp) ((UINT)lp) #define GET_WT_CTXUPDATE_MPS(h, s) (WPARAM)(h), (LPARAM)(s) #define GET_WT_CTXOVERLAP_HCTX(wp, lp) ((HCTX)wp) #define GET_WT_CTXOVERLAP_STATUS(wp, lp) ((UINT)lp) #define GET_WT_CTXOVERLAP_MPS(h, s) (WPARAM)(h), (LPARAM)(s) #define GET_WT_PROXIMITY_HCTX(wp, lp) ((HCTX)wp) #define GET_WT_PROXIMITY_CTXPROX(wp, lp) LOWORD(lp) #define GET_WT_PROXIMITY_HARDPROX(wp, lp) HIWORD(lp) #define GET_WT_PROXIMITY_MPS(h, fc, fh) (WPARAM)(h), MAKELONG(fc, fh) #define GET_WT_INFOCHANGE_HMGR(wp, lp) ((HMGR)wp) #define GET_WT_INFOCHANGE_CATEGORY(wp, lp) LOWORD(lp) #define GET_WT_INFOCHANGE_INDEX(wp, lp) HIWORD(lp) #define GET_WT_INFOCHANGE_MPS(h, c, i) (WPARAM)(h), MAKELONG(c, i) #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* defined(__WINE_WINTABX_H */ ================================================ FILE: wine/windows/winternl.h ================================================ /* * Internal NT APIs and data structures * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINTERNL_H #define __WINE_WINTERNL_H #include #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /********************************************************************** * Fundamental types and data structures */ #ifndef WINE_NTSTATUS_DECLARED #define WINE_NTSTATUS_DECLARED typedef LONG NTSTATUS; #endif typedef const char *PCSZ; typedef short CSHORT; typedef CSHORT *PCSHORT; #ifndef __STRING_DEFINED__ #define __STRING_DEFINED__ typedef struct _STRING { USHORT Length; USHORT MaximumLength; PCHAR Buffer; } STRING, *PSTRING; #endif typedef STRING ANSI_STRING; typedef PSTRING PANSI_STRING; typedef const STRING *PCANSI_STRING; typedef STRING OEM_STRING; typedef PSTRING POEM_STRING; typedef const STRING *PCOEM_STRING; #ifndef __UNICODE_STRING_DEFINED__ #define __UNICODE_STRING_DEFINED__ typedef struct _UNICODE_STRING { USHORT Length; /* bytes */ USHORT MaximumLength; /* bytes */ PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; #endif typedef const UNICODE_STRING *PCUNICODE_STRING; #ifndef _FILETIME_ #define _FILETIME_ /* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */ typedef struct _FILETIME { #ifdef WORDS_BIGENDIAN DWORD dwHighDateTime; DWORD dwLowDateTime; #else DWORD dwLowDateTime; DWORD dwHighDateTime; #endif } FILETIME, *PFILETIME, *LPFILETIME; #endif /* _FILETIME_ */ /* * RTL_SYSTEM_TIME and RTL_TIME_ZONE_INFORMATION are the same as * the SYSTEMTIME and TIME_ZONE_INFORMATION structures defined * in winbase.h, however we need to define them separately so * winternl.h doesn't depend on winbase.h. They are used by * RtlQueryTimeZoneInformation and RtlSetTimeZoneInformation. * The names are guessed; if anybody knows the real names, let me know. */ typedef struct _RTL_SYSTEM_TIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } RTL_SYSTEM_TIME, *PRTL_SYSTEM_TIME; typedef struct _RTL_TIME_ZONE_INFORMATION { LONG Bias; WCHAR StandardName[32]; RTL_SYSTEM_TIME StandardDate; LONG StandardBias; WCHAR DaylightName[32]; RTL_SYSTEM_TIME DaylightDate; LONG DaylightBias; } RTL_TIME_ZONE_INFORMATION, *PRTL_TIME_ZONE_INFORMATION; typedef struct _RTL_TIME_DYNAMIC_ZONE_INFORMATION { LONG Bias; WCHAR StandardName[32]; RTL_SYSTEM_TIME StandardDate; LONG StandardBias; WCHAR DaylightName[32]; RTL_SYSTEM_TIME DaylightDate; LONG DaylightBias; WCHAR TimeZoneKeyName[128]; BOOLEAN DynamicDaylightTimeDisabled; } RTL_DYNAMIC_TIME_ZONE_INFORMATION, *PRTL_DYNAMIC_TIME_ZONE_INFORMATION; typedef struct _CLIENT_ID { HANDLE UniqueProcess; HANDLE UniqueThread; } CLIENT_ID, *PCLIENT_ID; typedef struct _CURDIR { UNICODE_STRING DosPath; PVOID Handle; } CURDIR, *PCURDIR; typedef struct RTL_DRIVE_LETTER_CURDIR { USHORT Flags; USHORT Length; ULONG TimeStamp; UNICODE_STRING DosPath; } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR; typedef struct _RTL_RELATIVE_NAME { UNICODE_STRING RelativeName; HANDLE ContainerDirectory; void *CurDirRef; } RTL_RELATIVE_NAME, *PRTL_RELATIVE_NAME; typedef struct tagRTL_BITMAP { ULONG SizeOfBitMap; /* Number of bits in the bitmap */ PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */ } RTL_BITMAP, *PRTL_BITMAP; typedef const RTL_BITMAP *PCRTL_BITMAP; typedef struct tagRTL_BITMAP_RUN { ULONG StartingIndex; /* Bit position at which run starts */ ULONG NumberOfBits; /* Size of the run in bits */ } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN; typedef struct _RTL_USER_PROCESS_PARAMETERS { ULONG AllocationSize; ULONG Size; ULONG Flags; ULONG DebugFlags; HANDLE ConsoleHandle; ULONG ConsoleFlags; HANDLE hStdInput; HANDLE hStdOutput; HANDLE hStdError; CURDIR CurrentDirectory; UNICODE_STRING DllPath; UNICODE_STRING ImagePathName; UNICODE_STRING CommandLine; PWSTR Environment; ULONG dwX; ULONG dwY; ULONG dwXSize; ULONG dwYSize; ULONG dwXCountChars; ULONG dwYCountChars; ULONG dwFillAttribute; ULONG dwFlags; ULONG wShowWindow; UNICODE_STRING WindowTitle; UNICODE_STRING Desktop; UNICODE_STRING ShellInfo; UNICODE_STRING RuntimeInfo; RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20]; } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; /* value for Flags field (FIXME: not the correct name) */ #define PROCESS_PARAMS_FLAG_NORMALIZED 1 typedef struct _PEB_LDR_DATA { ULONG Length; BOOLEAN Initialized; PVOID SsHandle; LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InMemoryOrderModuleList; LIST_ENTRY InInitializationOrderModuleList; PVOID EntryInProgress; } PEB_LDR_DATA, *PPEB_LDR_DATA; typedef struct _GDI_TEB_BATCH { ULONG Offset; HANDLE HDC; ULONG Buffer[0x136]; } GDI_TEB_BATCH; typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME { struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous; struct _ACTIVATION_CONTEXT *ActivationContext; ULONG Flags; } RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME; typedef struct _ACTIVATION_CONTEXT_STACK { ULONG Flags; ULONG NextCookieSequenceNumber; RTL_ACTIVATION_CONTEXT_STACK_FRAME *ActiveFrame; LIST_ENTRY FrameListCache; } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK; typedef struct _TEB_ACTIVE_FRAME_CONTEXT { ULONG Flags; const char *FrameName; } TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT; typedef struct _TEB_ACTIVE_FRAME_CONTEXT_EX { TEB_ACTIVE_FRAME_CONTEXT BasicContext; const char *SourceLocation; } TEB_ACTIVE_FRAME_CONTEXT_EX, *PTEB_ACTIVE_FRAME_CONTEXT_EX; typedef struct _TEB_ACTIVE_FRAME { ULONG Flags; struct _TEB_ACTIVE_FRAME *Previous; TEB_ACTIVE_FRAME_CONTEXT *Context; } TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME; typedef struct _TEB_ACTIVE_FRAME_EX { TEB_ACTIVE_FRAME BasicFrame; void *ExtensionIdentifier; } TEB_ACTIVE_FRAME_EX, *PTEB_ACTIVE_FRAME_EX; #define TEB_ACTIVE_FRAME_CONTEXT_FLAG_EXTENDED 0x00000001 #define TEB_ACTIVE_FRAME_FLAG_EXTENDED 0x00000001 /*********************************************************************** * PEB data structure */ typedef struct _PEB { /* win32/win64 */ BOOLEAN InheritedAddressSpace; /* 000/000 */ BOOLEAN ReadImageFileExecOptions; /* 001/001 */ BOOLEAN BeingDebugged; /* 002/002 */ BOOLEAN SpareBool; /* 003/003 */ HANDLE Mutant; /* 004/008 */ HMODULE ImageBaseAddress; /* 008/010 */ PPEB_LDR_DATA LdrData; /* 00c/018 */ RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 010/020 */ PVOID SubSystemData; /* 014/028 */ HANDLE ProcessHeap; /* 018/030 */ PRTL_CRITICAL_SECTION FastPebLock; /* 01c/038 */ PVOID /*PPEBLOCKROUTINE*/ FastPebLockRoutine; /* 020/040 */ PVOID /*PPEBLOCKROUTINE*/ FastPebUnlockRoutine; /* 024/048 */ ULONG EnvironmentUpdateCount; /* 028/050 */ PVOID KernelCallbackTable; /* 02c/058 */ ULONG Reserved[2]; /* 030/060 */ PVOID /*PPEB_FREE_BLOCK*/ FreeList; /* 038/068 */ ULONG TlsExpansionCounter; /* 03c/070 */ PRTL_BITMAP TlsBitmap; /* 040/078 */ ULONG TlsBitmapBits[2]; /* 044/080 */ PVOID ReadOnlySharedMemoryBase; /* 04c/088 */ PVOID ReadOnlySharedMemoryHeap; /* 050/090 */ PVOID *ReadOnlyStaticServerData; /* 054/098 */ PVOID AnsiCodePageData; /* 058/0a0 */ PVOID OemCodePageData; /* 05c/0a8 */ PVOID UnicodeCaseTableData; /* 060/0b0 */ ULONG NumberOfProcessors; /* 064/0b8 */ ULONG NtGlobalFlag; /* 068/0bc */ LARGE_INTEGER CriticalSectionTimeout; /* 070/0c0 */ SIZE_T HeapSegmentReserve; /* 078/0c8 */ SIZE_T HeapSegmentCommit; /* 07c/0d0 */ SIZE_T HeapDeCommitTotalFreeThreshold; /* 080/0d8 */ SIZE_T HeapDeCommitFreeBlockThreshold; /* 084/0e0 */ ULONG NumberOfHeaps; /* 088/0e8 */ ULONG MaximumNumberOfHeaps; /* 08c/0ec */ PVOID *ProcessHeaps; /* 090/0f0 */ PVOID GdiSharedHandleTable; /* 094/0f8 */ PVOID ProcessStarterHelper; /* 098/100 */ PVOID GdiDCAttributeList; /* 09c/108 */ PVOID LoaderLock; /* 0a0/110 */ ULONG OSMajorVersion; /* 0a4/118 */ ULONG OSMinorVersion; /* 0a8/11c */ ULONG OSBuildNumber; /* 0ac/120 */ ULONG OSPlatformId; /* 0b0/124 */ ULONG ImageSubSystem; /* 0b4/128 */ ULONG ImageSubSystemMajorVersion; /* 0b8/12c */ ULONG ImageSubSystemMinorVersion; /* 0bc/130 */ ULONG ImageProcessAffinityMask; /* 0c0/134 */ HANDLE GdiHandleBuffer[28]; /* 0c4/138 */ ULONG unknown[6]; /* 134/218 */ PVOID PostProcessInitRoutine; /* 14c/230 */ PRTL_BITMAP TlsExpansionBitmap; /* 150/238 */ ULONG TlsExpansionBitmapBits[32]; /* 154/240 */ ULONG SessionId; /* 1d4/2c0 */ ULARGE_INTEGER AppCompatFlags; /* 1d8/2c8 */ ULARGE_INTEGER AppCompatFlagsUser; /* 1e0/2d0 */ PVOID ShimData; /* 1e8/2d8 */ PVOID AppCompatInfo; /* 1ec/2e0 */ UNICODE_STRING CSDVersion; /* 1f0/2e8 */ PVOID ActivationContextData; /* 1f8/2f8 */ PVOID ProcessAssemblyStorageMap; /* 1fc/300 */ PVOID SystemDefaultActivationData; /* 200/308 */ PVOID SystemAssemblyStorageMap; /* 204/310 */ SIZE_T MinimumStackCommit; /* 208/318 */ PVOID *FlsCallback; /* 20c/320 */ LIST_ENTRY FlsListHead; /* 210/328 */ PRTL_BITMAP FlsBitmap; /* 218/338 */ ULONG FlsBitmapBits[4]; /* 21c/340 */ } PEB, *PPEB; /*********************************************************************** * TEB data structure */ typedef struct _TEB { /* win32/win64 */ NT_TIB Tib; /* 000/0000 */ PVOID EnvironmentPointer; /* 01c/0038 */ CLIENT_ID ClientId; /* 020/0040 */ PVOID ActiveRpcHandle; /* 028/0050 */ PVOID ThreadLocalStoragePointer; /* 02c/0058 */ PPEB Peb; /* 030/0060 */ ULONG LastErrorValue; /* 034/0068 */ ULONG CountOfOwnedCriticalSections; /* 038/006c */ PVOID CsrClientThread; /* 03c/0070 */ PVOID Win32ThreadInfo; /* 040/0078 */ ULONG Win32ClientInfo[31]; /* 044/0080 used for user32 private data in Wine */ PVOID WOW32Reserved; /* 0c0/0100 */ ULONG CurrentLocale; /* 0c4/0108 */ ULONG FpSoftwareStatusRegister; /* 0c8/010c */ PVOID SystemReserved1[54]; /* 0cc/0110 used for kernel32 private data in Wine */ LONG ExceptionCode; /* 1a4/02c0 */ ACTIVATION_CONTEXT_STACK ActivationContextStack; /* 1a8/02c8 */ BYTE SpareBytes1[24]; /* 1bc/02e8 */ PVOID SystemReserved2[10]; /* 1d4/0300 used for ntdll platform-specific private data in Wine */ GDI_TEB_BATCH GdiTebBatch; /* 1fc/0350 used for ntdll private data in Wine */ HANDLE gdiRgn; /* 6dc/0838 */ HANDLE gdiPen; /* 6e0/0840 */ HANDLE gdiBrush; /* 6e4/0848 */ CLIENT_ID RealClientId; /* 6e8/0850 */ HANDLE GdiCachedProcessHandle; /* 6f0/0860 */ ULONG GdiClientPID; /* 6f4/0868 */ ULONG GdiClientTID; /* 6f8/086c */ PVOID GdiThreadLocaleInfo; /* 6fc/0870 */ ULONG UserReserved[5]; /* 700/0878 */ PVOID glDispatchTable[280]; /* 714/0890 */ PVOID glReserved1[26]; /* b74/1150 */ PVOID glReserved2; /* bdc/1220 */ PVOID glSectionInfo; /* be0/1228 */ PVOID glSection; /* be4/1230 */ PVOID glTable; /* be8/1238 */ PVOID glCurrentRC; /* bec/1240 */ PVOID glContext; /* bf0/1248 */ ULONG LastStatusValue; /* bf4/1250 */ UNICODE_STRING StaticUnicodeString; /* bf8/1258 used by advapi32 */ WCHAR StaticUnicodeBuffer[261]; /* c00/1268 used by advapi32 */ PVOID DeallocationStack; /* e0c/1478 */ PVOID TlsSlots[64]; /* e10/1480 */ LIST_ENTRY TlsLinks; /* f10/1680 */ PVOID Vdm; /* f18/1690 */ PVOID ReservedForNtRpc; /* f1c/1698 */ PVOID DbgSsReserved[2]; /* f20/16a0 */ ULONG HardErrorDisabled; /* f28/16b0 */ PVOID Instrumentation[16]; /* f2c/16b8 */ PVOID WinSockData; /* f6c/1738 */ ULONG GdiBatchCount; /* f70/1740 */ ULONG Spare2; /* f74/1744 */ PVOID Spare3; /* f78/1748 */ PVOID Spare4; /* f7c/1750 */ PVOID ReservedForOle; /* f80/1758 */ ULONG WaitingOnLoaderLock; /* f84/1760 */ PVOID Reserved5[3]; /* f88/1768 */ PVOID *TlsExpansionSlots; /* f94/1780 */ #ifdef _WIN64 PVOID DeallocationBStore; /* /1788 */ PVOID BStoreLimit; /* /1790 */ #endif ULONG ImpersonationLocale; /* f98/1798 */ ULONG IsImpersonating; /* f9c/179c */ PVOID NlsCache; /* fa0/17a0 */ PVOID ShimData; /* fa4/17a8 */ ULONG HeapVirtualAffinity; /* fa8/17b0 */ PVOID CurrentTransactionHandle; /* fac/17b8 */ TEB_ACTIVE_FRAME *ActiveFrame; /* fb0/17c0 */ PVOID *FlsSlots; /* fb4/17c8 */ } TEB, *PTEB; /*********************************************************************** * Enums */ typedef enum _FILE_INFORMATION_CLASS { FileDirectoryInformation = 1, FileFullDirectoryInformation, FileBothDirectoryInformation, FileBasicInformation, FileStandardInformation, FileInternalInformation, FileEaInformation, FileAccessInformation, FileNameInformation, FileRenameInformation, FileLinkInformation, FileNamesInformation, FileDispositionInformation, FilePositionInformation, FileFullEaInformation, FileModeInformation, FileAlignmentInformation, FileAllInformation, FileAllocationInformation, FileEndOfFileInformation, FileAlternateNameInformation, FileStreamInformation, FilePipeInformation, FilePipeLocalInformation, FilePipeRemoteInformation, FileMailslotQueryInformation, FileMailslotSetInformation, FileCompressionInformation, FileObjectIdInformation, FileCompletionInformation, FileMoveClusterInformation, FileQuotaInformation, FileReparsePointInformation, FileNetworkOpenInformation, FileAttributeTagInformation, FileTrackingInformation, FileIdBothDirectoryInformation, FileIdFullDirectoryInformation, FileValidDataLengthInformation, FileShortNameInformation, FileIoCompletionNotificationInformation, FileIoStatusBlockRangeInformation, FileIoPriorityHintInformation, FileSfioReserveInformation, FileSfioVolumeInformation, FileHardLinkInformation, FileProcessIdsUsingFileInformation, FileNormalizedNameInformation, FileNetworkPhysicalNameInformation, FileIdGlobalTxDirectoryInformation, FileIsRemoteDeviceInformation, FileAttributeCacheInformation, FileNumaNodeInformation, FileStandardLinkInformation, FileRemoteProtocolInformation, FileRenameInformationBypassAccessCheck, FileLinkInformationBypassAccessCheck, FileVolumeNameInformation, FileIdInformation, FileIdExtdDirectoryInformation, FileReplaceCompletionInformation, FileHardLinkFullIdInformation, FileIdExtdBothDirectoryInformation, FileMaximumInformation } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; typedef struct _FILE_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG FileIndex; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; WCHAR FileName[ANYSIZE_ARRAY]; } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; typedef struct _FILE_FULL_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG FileIndex; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; ULONG EaSize; WCHAR FileName[ANYSIZE_ARRAY]; } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION, FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION; typedef struct _FILE_ID_FULL_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG FileIndex; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; ULONG EaSize; LARGE_INTEGER FileId; WCHAR FileName[ANYSIZE_ARRAY]; } FILE_ID_FULL_DIRECTORY_INFORMATION, *PFILE_ID_FULL_DIRECTORY_INFORMATION; typedef struct _FILE_BOTH_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG FileIndex; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; ULONG EaSize; CHAR ShortNameLength; WCHAR ShortName[12]; WCHAR FileName[ANYSIZE_ARRAY]; } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION, FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; typedef struct _FILE_ID_BOTH_DIRECTORY_INFORMATION { ULONG NextEntryOffset; ULONG FileIndex; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; ULONG EaSize; CHAR ShortNameLength; WCHAR ShortName[12]; LARGE_INTEGER FileId; WCHAR FileName[ANYSIZE_ARRAY]; } FILE_ID_BOTH_DIRECTORY_INFORMATION, *PFILE_ID_BOTH_DIRECTORY_INFORMATION; typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION { ULONG NextEntryOffset; ULONG FileIndex; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; LARGE_INTEGER FileId; GUID LockingTransactionId; ULONG TxInfoFlags; WCHAR FileName[ANYSIZE_ARRAY]; } FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION; typedef struct _FILE_BASIC_INFORMATION { LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; ULONG FileAttributes; } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; typedef struct _FILE_STANDARD_INFORMATION { LARGE_INTEGER AllocationSize; LARGE_INTEGER EndOfFile; ULONG NumberOfLinks; BOOLEAN DeletePending; BOOLEAN Directory; } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; typedef struct _FILE_INTERNAL_INFORMATION { LARGE_INTEGER IndexNumber; } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; typedef struct _FILE_ID_128 { UCHAR Identifier[16]; } FILE_ID_128, *PFILE_ID_128; typedef struct _FILE_ID_INFORMATION { ULONGLONG VolumeSerialNumber; FILE_ID_128 FileId; } FILE_ID_INFORMATION, *PFILE_ID_INFORMATION; typedef struct _FILE_EA_INFORMATION { ULONG EaSize; } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; typedef struct _FILE_ACCESS_INFORMATION { ACCESS_MASK AccessFlags; } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; typedef struct _FILE_NAME_INFORMATION { ULONG FileNameLength; WCHAR FileName[1]; } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; typedef struct _FILE_RENAME_INFORMATION { BOOLEAN Replace; HANDLE RootDir; ULONG FileNameLength; WCHAR FileName[1]; } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; typedef struct _FILE_LINK_INFORMATION { BOOLEAN ReplaceIfExists; HANDLE RootDirectory; ULONG FileNameLength; WCHAR FileName[1]; } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; typedef struct _FILE_NAMES_INFORMATION { ULONG NextEntryOffset; ULONG FileIndex; ULONG FileNameLength; WCHAR FileName[1]; } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; typedef struct _FILE_DISPOSITION_INFORMATION { BOOLEAN DoDeleteFile; } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; typedef struct _FILE_POSITION_INFORMATION { LARGE_INTEGER CurrentByteOffset; } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; typedef struct _FILE_ALIGNMENT_INFORMATION { ULONG AlignmentRequirement; } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; typedef struct _FILE_ALLOCATION_INFORMATION { LARGE_INTEGER AllocationSize; } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; typedef struct _FILE_END_OF_FILE_INFORMATION { LARGE_INTEGER EndOfFile; } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; typedef struct _FILE_NETWORK_OPEN_INFORMATION { LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER AllocationSize; LARGE_INTEGER EndOfFile; ULONG FileAttributes; } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; typedef struct _FILE_FULL_EA_INFORMATION { ULONG NextEntryOffset; UCHAR Flags; UCHAR EaNameLength; USHORT EaValueLength; CHAR EaName[1]; } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; typedef struct _FILE_MODE_INFORMATION { ULONG Mode; } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; typedef struct _FILE_STREAM_INFORMATION { ULONG NextEntryOffset; ULONG StreamNameLength; LARGE_INTEGER StreamSize; LARGE_INTEGER StreamAllocationSize; WCHAR StreamName[1]; } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION; typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { ULONG FileAttributes; ULONG ReparseTag; } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; typedef struct _FILE_MAILSLOT_QUERY_INFORMATION { ULONG MaximumMessageSize; ULONG MailslotQuota; ULONG NextMessageSize; ULONG MessagesAvailable; LARGE_INTEGER ReadTimeout; } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION; typedef struct _FILE_MAILSLOT_SET_INFORMATION { LARGE_INTEGER ReadTimeout; } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; typedef struct _FILE_PIPE_INFORMATION { ULONG ReadMode; ULONG CompletionMode; } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION; typedef struct _FILE_PIPE_LOCAL_INFORMATION { ULONG NamedPipeType; ULONG NamedPipeConfiguration; ULONG MaximumInstances; ULONG CurrentInstances; ULONG InboundQuota; ULONG ReadDataAvailable; ULONG OutboundQuota; ULONG WriteQuotaAvailable; ULONG NamedPipeState; ULONG NamedPipeEnd; } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; #define FILE_PIPE_DISCONNECTED_STATE 0x00000001 #define FILE_PIPE_LISTENING_STATE 0x00000002 #define FILE_PIPE_CONNECTED_STATE 0x00000003 #define FILE_PIPE_CLOSING_STATE 0x00000004 typedef struct _FILE_OBJECTID_INFORMATION { LONGLONG FileReference; UCHAR ObjectId[16]; union { struct { UCHAR BirthVolumeId[16]; UCHAR BirthObjectId[16]; UCHAR DomainId[16]; } DUMMYSTRUCTNAME; UCHAR ExtendedInfo[48]; } DUMMYUNIONNAME; } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION; typedef struct _FILE_QUOTA_INFORMATION { ULONG NextEntryOffset; ULONG SidLength; LARGE_INTEGER ChangeTime; LARGE_INTEGER QuotaUsed; LARGE_INTEGER QuotaThreshold; LARGE_INTEGER QuotaLimit; SID Sid; } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION; typedef struct _FILE_REPARSE_POINT_INFORMATION { LONGLONG FileReference; ULONG Tag; } FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION; typedef struct _FILE_ALL_INFORMATION { FILE_BASIC_INFORMATION BasicInformation; FILE_STANDARD_INFORMATION StandardInformation; FILE_INTERNAL_INFORMATION InternalInformation; FILE_EA_INFORMATION EaInformation; FILE_ACCESS_INFORMATION AccessInformation; FILE_POSITION_INFORMATION PositionInformation; FILE_MODE_INFORMATION ModeInformation; FILE_ALIGNMENT_INFORMATION AlignmentInformation; FILE_NAME_INFORMATION NameInformation; } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION { ULONG Flags; } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION; #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4 typedef enum _FSINFOCLASS { FileFsVolumeInformation = 1, FileFsLabelInformation, FileFsSizeInformation, FileFsDeviceInformation, FileFsAttributeInformation, FileFsControlInformation, FileFsFullSizeInformation, FileFsObjectIdInformation, FileFsMaximumInformation } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; typedef enum _KEY_INFORMATION_CLASS { KeyBasicInformation, KeyNodeInformation, KeyFullInformation, KeyNameInformation, KeyCachedInformation, KeyFlagsInformation, KeyVirtualizationInformation, KeyHandleTagsInformation, MaxKeyInfoClass } KEY_INFORMATION_CLASS; typedef enum _KEY_VALUE_INFORMATION_CLASS { KeyValueBasicInformation, KeyValueFullInformation, KeyValuePartialInformation, KeyValueFullInformationAlign64, KeyValuePartialInformationAlign64 } KEY_VALUE_INFORMATION_CLASS; typedef enum _OBJECT_INFORMATION_CLASS { ObjectBasicInformation, ObjectNameInformation, ObjectTypeInformation, ObjectAllInformation, ObjectDataInformation } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS; typedef enum _PROCESSINFOCLASS { ProcessBasicInformation = 0, ProcessQuotaLimits = 1, ProcessIoCounters = 2, ProcessVmCounters = 3, ProcessTimes = 4, ProcessBasePriority = 5, ProcessRaisePriority = 6, ProcessDebugPort = 7, ProcessExceptionPort = 8, ProcessAccessToken = 9, ProcessLdtInformation = 10, ProcessLdtSize = 11, ProcessDefaultHardErrorMode = 12, ProcessIoPortHandlers = 13, ProcessPooledUsageAndLimits = 14, ProcessWorkingSetWatch = 15, ProcessUserModeIOPL = 16, ProcessEnableAlignmentFaultFixup = 17, ProcessPriorityClass = 18, ProcessWx86Information = 19, ProcessHandleCount = 20, ProcessAffinityMask = 21, ProcessPriorityBoost = 22, ProcessDeviceMap = 23, ProcessSessionInformation = 24, ProcessForegroundInformation = 25, ProcessWow64Information = 26, ProcessImageFileName = 27, ProcessLUIDDeviceMapsEnabled = 28, ProcessBreakOnTermination = 29, ProcessDebugObjectHandle = 30, ProcessDebugFlags = 31, ProcessHandleTracing = 32, ProcessExecuteFlags = 34, ProcessTlsInformation = 35, ProcessCookie = 36, ProcessImageInformation = 37, ProcessCycleTime = 38, ProcessPagePriority = 39, ProcessInstrumentationCallback = 40, ProcessThreadStackAllocation = 41, ProcessWorkingSetWatchEx = 42, ProcessImageFileNameWin32 = 43, MaxProcessInfoClass } PROCESSINFOCLASS, PROCESS_INFORMATION_CLASS; #define MEM_EXECUTE_OPTION_DISABLE 0x01 #define MEM_EXECUTE_OPTION_ENABLE 0x02 #define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION 0x04 #define MEM_EXECUTE_OPTION_PERMANENT 0x08 typedef enum _SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 } SECTION_INHERIT; typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation = 0, SystemCpuInformation = 1, SystemPerformanceInformation = 2, SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */ Unknown4, SystemProcessInformation = 5, Unknown6, Unknown7, SystemProcessorPerformanceInformation = 8, Unknown9, Unknown10, SystemModuleInformation = 11, Unknown12, Unknown13, Unknown14, Unknown15, SystemHandleInformation = 16, Unknown17, SystemPageFileInformation = 18, Unknown19, Unknown20, SystemCacheInformation = 21, Unknown22, SystemInterruptInformation = 23, SystemDpcBehaviourInformation = 24, SystemFullMemoryInformation = 25, SystemNotImplemented6 = 25, SystemLoadImage = 26, SystemUnloadImage = 27, SystemTimeAdjustmentInformation = 28, SystemTimeAdjustment = 28, SystemSummaryMemoryInformation = 29, SystemNotImplemented7 = 29, SystemNextEventIdInformation = 30, SystemNotImplemented8 = 30, SystemEventIdsInformation = 31, SystemCrashDumpInformation = 32, SystemExceptionInformation = 33, SystemCrashDumpStateInformation = 34, SystemKernelDebuggerInformation = 35, SystemContextSwitchInformation = 36, SystemRegistryQuotaInformation = 37, SystemCurrentTimeZoneInformation = 44, SystemTimeZoneInformation = 44, SystemLookasideInformation = 45, SystemSetTimeSlipEvent = 46, SystemCreateSession = 47, SystemDeleteSession = 48, SystemInvalidInfoClass4 = 49, SystemRangeStartInformation = 50, SystemVerifierInformation = 51, SystemAddVerifier = 52, SystemSessionProcessesInformation = 53, SystemLoadGdiDriverInSystemSpace = 54, SystemNumaProcessorMap = 55, SystemPrefetcherInformation = 56, SystemExtendedProcessInformation = 57, SystemRecommendedSharedDataAlignment = 58, SystemComPlusPackage = 59, SystemNumaAvailableMemory = 60, SystemProcessorPowerInformation = 61, SystemEmulationBasicInformation = 62, SystemEmulationProcessorInformation = 63, SystemExtendedHandleInformation = 64, SystemLostDelayedWriteInformation = 65, SystemBigPoolInformation = 66, SystemSessionPoolTagInformation = 67, SystemSessionMappedViewInformation = 68, SystemHotpatchInformation = 69, SystemObjectSecurityMode = 70, SystemWatchdogTimerHandler = 71, SystemWatchdogTimerInformation = 72, SystemLogicalProcessorInformation = 73, SystemWow64SharedInformation = 74, SystemRegisterFirmwareTableInformationHandler = 75, SystemFirmwareTableInformation = 76, SystemModuleInformationEx = 77, SystemVerifierTriageInformation = 78, SystemSuperfetchInformation = 79, SystemMemoryListInformation = 80, SystemFileCacheInformationEx = 81, SystemLogicalProcessorInformationEx = 107, SystemInformationClassMax } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS; typedef enum _THREADINFOCLASS { ThreadBasicInformation, ThreadTimes, ThreadPriority, ThreadBasePriority, ThreadAffinityMask, ThreadImpersonationToken, ThreadDescriptorTableEntry, ThreadEnableAlignmentFaultFixup, ThreadEventPair_Reusable, ThreadQuerySetWin32StartAddress, ThreadZeroTlsCell, ThreadPerformanceCount, ThreadAmILastThread, ThreadIdealProcessor, ThreadPriorityBoost, ThreadSetTlsArrayAddress, ThreadIsIoPending, ThreadHideFromDebugger, ThreadBreakOnTermination, ThreadSwitchLegacyState, ThreadIsTerminated, ThreadLastSystemCall, ThreadIoPriority, ThreadCycleTime, ThreadPagePriority, ThreadActualBasePriority, ThreadTebInformation, ThreadCSwitchMon, ThreadCSwitchPmu, ThreadWow64Context, ThreadGroupInformation, ThreadUmsInformation, ThreadCounterProfiling, ThreadIdealProcessorEx, MaxThreadInfoClass } THREADINFOCLASS; typedef struct _THREAD_BASIC_INFORMATION { NTSTATUS ExitStatus; PVOID TebBaseAddress; CLIENT_ID ClientId; ULONG_PTR AffinityMask; LONG Priority; LONG BasePriority; } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION; typedef struct _THREAD_DESCRIPTOR_INFORMATION { DWORD Selector; LDT_ENTRY Entry; } THREAD_DESCRIPTOR_INFORMATION, *PTHREAD_DESCRIPTOR_INFORMATION; typedef struct _KERNEL_USER_TIMES { LARGE_INTEGER CreateTime; LARGE_INTEGER ExitTime; LARGE_INTEGER KernelTime; LARGE_INTEGER UserTime; } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; typedef enum _WINSTATIONINFOCLASS { WinStationInformation = 8 } WINSTATIONINFOCLASS; typedef enum _MEMORY_INFORMATION_CLASS { MemoryBasicInformation, MemoryWorkingSetList, MemorySectionName, MemoryBasicVlmInformation } MEMORY_INFORMATION_CLASS; typedef struct _MEMORY_SECTION_NAME { UNICODE_STRING SectionFileName; } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME; typedef enum _MUTANT_INFORMATION_CLASS { MutantBasicInformation } MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS; typedef struct _MUTANT_BASIC_INFORMATION { LONG CurrentCount; BOOLEAN OwnedByCaller; BOOLEAN AbandonedState; } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION; typedef enum _TIMER_INFORMATION_CLASS { TimerBasicInformation = 0 } TIMER_INFORMATION_CLASS; typedef struct _TIMER_BASIC_INFORMATION { LARGE_INTEGER RemainingTime; BOOLEAN TimerState; } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION; /* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */ typedef enum { INVALID_PATH = 0, UNC_PATH, /* "//foo" */ ABSOLUTE_DRIVE_PATH, /* "c:/foo" */ RELATIVE_DRIVE_PATH, /* "c:foo" */ ABSOLUTE_PATH, /* "/foo" */ RELATIVE_PATH, /* "foo" */ DEVICE_PATH, /* "//./foo" */ UNC_DOT_PATH /* "//." */ } DOS_PATHNAME_TYPE; /*********************************************************************** * Types and data structures */ /* This is used by NtQuerySystemInformation */ typedef struct _SYSTEM_THREAD_INFORMATION { /* win32/win64 */ LARGE_INTEGER KernelTime; /* 00/00 */ LARGE_INTEGER UserTime; /* 08/08 */ LARGE_INTEGER CreateTime; /* 10/10 */ DWORD dwTickCount; /* 18/18 */ LPVOID StartAddress; /* 1c/20 */ CLIENT_ID ClientId; /* 20/28 */ DWORD dwCurrentPriority; /* 28/38 */ DWORD dwBasePriority; /* 2c/3c */ DWORD dwContextSwitches; /* 30/40 */ DWORD dwThreadState; /* 34/44 */ DWORD dwWaitReason; /* 38/48 */ DWORD dwUnknown; /* 3c/4c */ } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION; typedef struct _IO_STATUS_BLOCK { union { NTSTATUS Status; PVOID Pointer; } DUMMYUNIONNAME; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG); typedef struct _KEY_BASIC_INFORMATION { LARGE_INTEGER LastWriteTime; ULONG TitleIndex; ULONG NameLength; WCHAR Name[1]; } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; typedef struct _KEY_NODE_INFORMATION { LARGE_INTEGER LastWriteTime; ULONG TitleIndex; ULONG ClassOffset; ULONG ClassLength; ULONG NameLength; WCHAR Name[1]; /* Class[1]; */ } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; typedef struct _KEY_FULL_INFORMATION { LARGE_INTEGER LastWriteTime; ULONG TitleIndex; ULONG ClassOffset; ULONG ClassLength; ULONG SubKeys; ULONG MaxNameLen; ULONG MaxClassLen; ULONG Values; ULONG MaxValueNameLen; ULONG MaxValueDataLen; WCHAR Class[1]; } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; typedef struct _KEY_NAME_INFORMATION { ULONG NameLength; WCHAR Name[1]; } KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION; typedef struct _KEY_CACHED_INFORMATION { LARGE_INTEGER LastWriteTime; ULONG TitleIndex; ULONG SubKeys; ULONG MaxNameLen; ULONG Values; ULONG MaxValueNameLen; ULONG MaxValueDataLen; ULONG NameLength; } KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION; typedef struct _KEY_VALUE_ENTRY { PUNICODE_STRING ValueName; ULONG DataLength; ULONG DataOffset; ULONG Type; } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; typedef struct _KEY_VALUE_BASIC_INFORMATION { ULONG TitleIndex; ULONG Type; ULONG NameLength; WCHAR Name[1]; } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; typedef struct _KEY_VALUE_FULL_INFORMATION { ULONG TitleIndex; ULONG Type; ULONG DataOffset; ULONG DataLength; ULONG NameLength; WCHAR Name[1]; } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; typedef struct _KEY_VALUE_PARTIAL_INFORMATION { ULONG TitleIndex; ULONG Type; ULONG DataLength; UCHAR Data[1]; } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; #ifndef __OBJECT_ATTRIBUTES_DEFINED__ #define __OBJECT_ATTRIBUTES_DEFINED__ typedef struct _OBJECT_ATTRIBUTES { ULONG Length; HANDLE RootDirectory; PUNICODE_STRING ObjectName; ULONG Attributes; PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */ PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */ } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; #endif typedef struct _OBJECT_DATA_INFORMATION { BOOLEAN InheritHandle; BOOLEAN ProtectFromClose; } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION; typedef struct _OBJECT_BASIC_INFORMATION { ULONG Attributes; ACCESS_MASK GrantedAccess; ULONG HandleCount; ULONG PointerCount; ULONG PagedPoolUsage; ULONG NonPagedPoolUsage; ULONG Reserved[3]; ULONG NameInformationLength; ULONG TypeInformationLength; ULONG SecurityDescriptorLength; LARGE_INTEGER CreateTime; } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION; typedef struct _OBJECT_NAME_INFORMATION { UNICODE_STRING Name; } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; typedef struct __OBJECT_TYPE_INFORMATION { UNICODE_STRING TypeName; ULONG Reserved [22]; } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION; typedef struct _PROCESS_BASIC_INFORMATION { #ifdef __WINESRC__ DWORD_PTR ExitStatus; PPEB PebBaseAddress; DWORD_PTR AffinityMask; DWORD_PTR BasePriority; ULONG_PTR UniqueProcessId; ULONG_PTR InheritedFromUniqueProcessId; #else PVOID Reserved1; PPEB PebBaseAddress; PVOID Reserved2[2]; ULONG_PTR UniqueProcessId; PVOID Reserved3; #endif } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; #define PROCESS_PRIOCLASS_IDLE 1 #define PROCESS_PRIOCLASS_NORMAL 2 #define PROCESS_PRIOCLASS_HIGH 3 #define PROCESS_PRIOCLASS_REALTIME 4 #define PROCESS_PRIOCLASS_BELOW_NORMAL 5 #define PROCESS_PRIOCLASS_ABOVE_NORMAL 6 typedef struct _PROCESS_PRIORITY_CLASS { BOOLEAN Foreground; UCHAR PriorityClass; } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS; typedef struct _RTL_HEAP_DEFINITION { ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */ ULONG Unknown[11]; } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION; typedef struct _RTL_RWLOCK { RTL_CRITICAL_SECTION rtlCS; HANDLE hSharedReleaseSemaphore; UINT uSharedWaiters; HANDLE hExclusiveReleaseSemaphore; UINT uExclusiveWaiters; INT iNumberActive; HANDLE hOwningThreadId; DWORD dwTimeoutBoost; PVOID pDebugInfo; } RTL_RWLOCK, *LPRTL_RWLOCK; /* System Information Class 0x00 */ typedef struct _SYSTEM_BASIC_INFORMATION { #ifdef __WINESRC__ DWORD unknown; ULONG KeMaximumIncrement; ULONG PageSize; ULONG MmNumberOfPhysicalPages; ULONG MmLowestPhysicalPage; ULONG MmHighestPhysicalPage; ULONG_PTR AllocationGranularity; PVOID LowestUserAddress; PVOID HighestUserAddress; ULONG_PTR ActiveProcessorsAffinityMask; BYTE NumberOfProcessors; #else BYTE Reserved1[24]; PVOID Reserved2[4]; CCHAR NumberOfProcessors; #endif } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; /* System Information Class 0x01 */ typedef struct _SYSTEM_CPU_INFORMATION { WORD Architecture; WORD Level; WORD Revision; /* combination of CPU model and stepping */ WORD Reserved; /* always zero */ DWORD FeatureSet; /* see bit flags below */ } SYSTEM_CPU_INFORMATION, *PSYSTEM_CPU_INFORMATION; /* definitions of bits in the Feature set for the x86 processors */ #define CPU_FEATURE_VME 0x00000005 /* Virtual 86 Mode Extensions */ #define CPU_FEATURE_TSC 0x00000002 /* Time Stamp Counter available */ #define CPU_FEATURE_CMOV 0x00000008 /* Conditional Move instruction*/ #define CPU_FEATURE_PGE 0x00000014 /* Page table Entry Global bit */ #define CPU_FEATURE_PSE 0x00000024 /* Page Size Extension */ #define CPU_FEATURE_MTRR 0x00000040 /* Memory Type Range Registers */ #define CPU_FEATURE_CX8 0x00000080 /* Compare and eXchange 8 byte instr. */ #define CPU_FEATURE_MMX 0x00000100 /* Multi Media eXtensions */ #define CPU_FEATURE_X86 0x00000200 /* seems to be always ON, on the '86 */ #define CPU_FEATURE_PAT 0x00000400 /* Page Attribute Table */ #define CPU_FEATURE_FXSR 0x00000800 /* FXSAVE and FXSTORE instructions */ #define CPU_FEATURE_SEP 0x00001000 /* SYSENTER and SYSEXIT instructions */ #define CPU_FEATURE_SSE 0x00002000 /* SSE extensions (ext. MMX) */ #define CPU_FEATURE_3DNOW 0x00004000 /* 3DNOW instructions available */ #define CPU_FEATURE_SSE2 0x00010000 /* SSE2 extensions (XMMI64) */ #define CPU_FEATURE_DS 0x00020000 /* Debug Store */ #define CPU_FEATURE_HTT 0x00040000 /* Hyper Threading Technology */ /* System Information Class 0x02 */ /* Documented in "Windows NT/2000 Native API Reference" by Gary Nebbett. */ typedef struct _SYSTEM_PERFORMANCE_INFORMATION { LARGE_INTEGER IdleTime; LARGE_INTEGER ReadTransferCount; LARGE_INTEGER WriteTransferCount; LARGE_INTEGER OtherTransferCount; ULONG ReadOperationCount; ULONG WriteOperationCount; ULONG OtherOperationCount; ULONG AvailablePages; ULONG TotalCommittedPages; ULONG TotalCommitLimit; ULONG PeakCommitment; ULONG PageFaults; ULONG WriteCopyFaults; ULONG TransitionFaults; ULONG Reserved1; ULONG DemandZeroFaults; ULONG PagesRead; ULONG PageReadIos; ULONG Reserved2[2]; ULONG PagefilePagesWritten; ULONG PagefilePageWriteIos; ULONG MappedFilePagesWritten; ULONG MappedFilePageWriteIos; ULONG PagedPoolUsage; ULONG NonPagedPoolUsage; ULONG PagedPoolAllocs; ULONG PagedPoolFrees; ULONG NonPagedPoolAllocs; ULONG NonPagedPoolFrees; ULONG TotalFreeSystemPtes; ULONG SystemCodePage; ULONG TotalSystemDriverPages; ULONG TotalSystemCodePages; ULONG SmallNonPagedLookasideListAllocateHits; ULONG SmallPagedLookasideListAllocateHits; ULONG Reserved3; ULONG MmSystemCachePage; ULONG PagedPoolPage; ULONG SystemDriverPage; ULONG FastReadNoWait; ULONG FastReadWait; ULONG FastReadResourceMiss; ULONG FastReadNotPossible; ULONG FastMdlReadNoWait; ULONG FastMdlReadWait; ULONG FastMdlReadResourceMiss; ULONG FastMdlReadNotPossible; ULONG MapDataNoWait; ULONG MapDataWait; ULONG MapDataNoWaitMiss; ULONG MapDataWaitMiss; ULONG PinMappedDataCount; ULONG PinReadNoWait; ULONG PinReadWait; ULONG PinReadNoWaitMiss; ULONG PinReadWaitMiss; ULONG CopyReadNoWait; ULONG CopyReadWait; ULONG CopyReadNoWaitMiss; ULONG CopyReadWaitMiss; ULONG MdlReadNoWait; ULONG MdlReadWait; ULONG MdlReadNoWaitMiss; ULONG MdlReadWaitMiss; ULONG ReadAheadIos; ULONG LazyWriteIos; ULONG LazyWritePages; ULONG DataFlushes; ULONG DataPages; ULONG ContextSwitches; ULONG FirstLevelTbFills; ULONG SecondLevelTbFills; ULONG SystemCalls; } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; /* System Information Class 0x03 */ typedef struct _SYSTEM_TIMEOFDAY_INFORMATION { #ifdef __WINESRC__ LARGE_INTEGER liKeBootTime; LARGE_INTEGER liKeSystemTime; LARGE_INTEGER liExpTimeZoneBias; ULONG uCurrentTimeZoneId; DWORD dwUnknown1[5]; #else BYTE Reserved1[48]; #endif } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */ /* System Information Class 0x08 */ typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { LARGE_INTEGER IdleTime; LARGE_INTEGER KernelTime; LARGE_INTEGER UserTime; LARGE_INTEGER Reserved1[2]; ULONG Reserved2; } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION; /* System Information Class 0x0b */ typedef struct _SYSTEM_DRIVER_INFORMATION { PVOID pvAddress; DWORD dwUnknown1; DWORD dwUnknown2; DWORD dwEntryIndex; DWORD dwUnknown3; char szName[MAX_PATH + 1]; } SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION; /* System Information Class 0x10 */ typedef struct _SYSTEM_HANDLE_ENTRY { ULONG OwnerPid; BYTE ObjectType; BYTE HandleFlags; USHORT HandleValue; PVOID ObjectPointer; ULONG AccessMask; } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY; typedef struct _SYSTEM_HANDLE_INFORMATION { ULONG Count; SYSTEM_HANDLE_ENTRY Handle[1]; } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; /* System Information Class 0x15 */ typedef struct _SYSTEM_CACHE_INFORMATION { ULONG CurrentSize; ULONG PeakSize; ULONG PageFaultCount; ULONG MinimumWorkingSet; ULONG MaximumWorkingSet; ULONG unused[4]; #ifdef _WIN64 ULONG unknown64[7]; #endif } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION; /* System Information Class 0x17 */ typedef struct _SYSTEM_INTERRUPT_INFORMATION { BYTE Reserved1[24]; } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION; typedef struct _SYSTEM_CONFIGURATION_INFO { union { ULONG OemId; struct { WORD ProcessorArchitecture; WORD Reserved; } tag1; } tag2; ULONG PageSize; PVOID MinimumApplicationAddress; PVOID MaximumApplicationAddress; ULONG ActiveProcessorMask; ULONG NumberOfProcessors; ULONG ProcessorType; ULONG AllocationGranularity; WORD ProcessorLevel; WORD ProcessorRevision; } SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO; typedef struct _SYSTEM_EXCEPTION_INFORMATION { BYTE Reserved1[16]; } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION; typedef struct _SYSTEM_LOOKASIDE_INFORMATION { BYTE Reserved1[32]; } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION; typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION { BOOLEAN DebuggerEnabled; BOOLEAN DebuggerNotPresent; } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION; /* System Information Class 0x05 */ typedef struct _VM_COUNTERS_ { SIZE_T PeakVirtualSize; SIZE_T VirtualSize; ULONG PageFaultCount; SIZE_T PeakWorkingSetSize; SIZE_T WorkingSetSize; SIZE_T QuotaPeakPagedPoolUsage; SIZE_T QuotaPagedPoolUsage; SIZE_T QuotaPeakNonPagedPoolUsage; SIZE_T QuotaNonPagedPoolUsage; SIZE_T PagefileUsage; SIZE_T PeakPagefileUsage; SIZE_T PrivatePageCount; } VM_COUNTERS, *PVM_COUNTERS; typedef struct _SYSTEM_PROCESS_INFORMATION { #ifdef __WINESRC__ /* win32/win64 */ ULONG NextEntryOffset; /* 00/00 */ DWORD dwThreadCount; /* 04/04 */ DWORD dwUnknown1[6]; /* 08/08 */ LARGE_INTEGER CreationTime; /* 20/20 */ LARGE_INTEGER UserTime; /* 28/28 */ LARGE_INTEGER KernelTime; /* 30/30 */ UNICODE_STRING ProcessName; /* 38/38 */ DWORD dwBasePriority; /* 40/48 */ HANDLE UniqueProcessId; /* 44/50 */ HANDLE ParentProcessId; /* 48/58 */ ULONG HandleCount; /* 4c/60 */ ULONG SessionId; /* 50/64 */ DWORD dwUnknown4; /* 54/68 */ VM_COUNTERS vmCounters; /* 58/70 */ IO_COUNTERS ioCounters; /* 88/d0 */ SYSTEM_THREAD_INFORMATION ti[1]; /* b8/100 */ #else ULONG NextEntryOffset; /* 00/00 */ BYTE Reserved1[52]; /* 04/04 */ PVOID Reserved2[3]; /* 38/38 */ HANDLE UniqueProcessId; /* 44/50 */ PVOID Reserved3; /* 48/58 */ ULONG HandleCount; /* 4c/60 */ BYTE Reserved4[4]; /* 50/64 */ PVOID Reserved5[11]; /* 54/68 */ SIZE_T PeakPagefileUsage; /* 80/c0 */ SIZE_T PrivatePageCount; /* 84/c8 */ LARGE_INTEGER Reserved6[6]; /* 88/d0 */ #endif } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION; typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION { ULONG RegistryQuotaAllowed; ULONG RegistryQuotaUsed; PVOID Reserved1; } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION; typedef struct _SYSTEM_TIME_ADJUSTMENT { ULONG TimeAdjustment; BOOLEAN TimeAdjustmentDisabled; } SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT; typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION { SystemFirmwareTable_Enumerate = 0, SystemFirmwareTable_Get = 1 } SYSTEM_FIRMWARE_TABLE_ACTION, *PSYSTEM_FIRMWARE_TABLE_ACTION; /* System Information Class 0x4C */ typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION { ULONG ProviderSignature; SYSTEM_FIRMWARE_TABLE_ACTION Action; ULONG TableID; ULONG TableBufferLength; UCHAR TableBuffer[1]; } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION; typedef struct _TIME_FIELDS { CSHORT Year; CSHORT Month; CSHORT Day; CSHORT Hour; CSHORT Minute; CSHORT Second; CSHORT Milliseconds; CSHORT Weekday; } TIME_FIELDS, *PTIME_FIELDS; typedef struct _WINSTATIONINFORMATIONW { BYTE Reserved2[70]; ULONG LogonId; BYTE Reserved3[1140]; } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW; typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG); typedef struct _LDR_RESOURCE_INFO { ULONG_PTR Type; ULONG_PTR Name; ULONG Language; } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO; /* debug buffer definitions */ typedef struct _DEBUG_BUFFER { HANDLE SectionHandle; PVOID SectionBase; PVOID RemoteSectionBase; ULONG SectionBaseDelta; HANDLE EventPairHandle; ULONG Unknown[2]; HANDLE RemoteThreadHandle; ULONG InfoClassMask; ULONG SizeOfInfo; ULONG AllocatedSize; ULONG SectionSize; PVOID ModuleInformation; PVOID BackTraceInformation; PVOID HeapInformation; PVOID LockInformation; PVOID Reserved[8]; } DEBUG_BUFFER, *PDEBUG_BUFFER; #define PDI_MODULES 0x01 #define PDI_BACKTRACE 0x02 #define PDI_HEAPS 0x04 #define PDI_HEAP_TAGS 0x08 #define PDI_HEAP_BLOCKS 0x10 #define PDI_LOCKS 0x20 typedef struct _DEBUG_MODULE_INFORMATION { ULONG Reserved[2]; ULONG Base; ULONG Size; ULONG Flags; USHORT Index; USHORT Unknown; USHORT LoadCount; USHORT ModuleNameOffset; CHAR ImageName[256]; } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION; typedef struct _DEBUG_HEAP_INFORMATION { ULONG Base; ULONG Flags; USHORT Granularity; USHORT Unknown; ULONG Allocated; ULONG Committed; ULONG TagCount; ULONG BlockCount; ULONG Reserved[7]; PVOID Tags; PVOID Blocks; } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION; typedef struct _DEBUG_LOCK_INFORMATION { PVOID Address; USHORT Type; USHORT CreatorBackTraceIndex; ULONG OwnerThreadId; ULONG ActiveCount; ULONG ContentionCount; ULONG EntryCount; ULONG RecursionCount; ULONG NumberOfSharedWaiters; ULONG NumberOfExclusiveWaiters; } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION; typedef struct _PORT_MESSAGE_HEADER { USHORT DataSize; USHORT MessageSize; USHORT MessageType; USHORT VirtualRangesOffset; CLIENT_ID ClientId; ULONG MessageId; ULONG SectionSize; } PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE; typedef unsigned short RTL_ATOM, *PRTL_ATOM; /* Wine doesn't implement atom table as NT does: * - in NT, atom tables are user space tables, which ntdll directly accesses * - on Wine, (even local) atom tables are wineserver objects, hence a HANDLE */ typedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE; typedef enum _ATOM_INFORMATION_CLASS { AtomBasicInformation = 0, AtomTableInformation = 1, } ATOM_INFORMATION_CLASS; typedef struct _ATOM_BASIC_INFORMATION { USHORT ReferenceCount; USHORT Pinned; USHORT NameLength; WCHAR Name[1]; } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION; /* FIXME: names probably not correct */ typedef struct _RTL_HANDLE { struct _RTL_HANDLE * Next; } RTL_HANDLE; /* FIXME: names probably not correct */ typedef struct _RTL_HANDLE_TABLE { ULONG MaxHandleCount; /* 0x00 */ ULONG HandleSize; /* 0x04 */ ULONG Unused[2]; /* 0x08-0x0c */ PVOID NextFree; /* 0x10 */ PVOID FirstHandle; /* 0x14 */ PVOID ReservedMemory; /* 0x18 */ PVOID MaxHandle; /* 0x1c */ } RTL_HANDLE_TABLE; /*********************************************************************** * Defines */ /* flags for NtCreateFile and NtOpenFile */ #define FILE_DIRECTORY_FILE 0x00000001 #define FILE_WRITE_THROUGH 0x00000002 #define FILE_SEQUENTIAL_ONLY 0x00000004 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 #define FILE_NON_DIRECTORY_FILE 0x00000040 #define FILE_CREATE_TREE_CONNECTION 0x00000080 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 #define FILE_NO_EA_KNOWLEDGE 0x00000200 #define FILE_OPEN_FOR_RECOVERY 0x00000400 #define FILE_RANDOM_ACCESS 0x00000800 #define FILE_DELETE_ON_CLOSE 0x00001000 #define FILE_OPEN_BY_FILE_ID 0x00002000 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 #define FILE_NO_COMPRESSION 0x00008000 #define FILE_RESERVE_OPFILTER 0x00100000 #define FILE_TRANSACTED_MODE 0x00200000 #define FILE_OPEN_OFFLINE_FILE 0x00400000 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 /* status for NtCreateFile or NtOpenFile */ #define FILE_SUPERSEDED 0 #define FILE_OPENED 1 #define FILE_CREATED 2 #define FILE_OVERWRITTEN 3 #define FILE_EXISTS 4 #define FILE_DOES_NOT_EXIST 5 /* disposition for NtCreateFile */ #define FILE_SUPERSEDE 0 #define FILE_OPEN 1 #define FILE_CREATE 2 #define FILE_OPEN_IF 3 #define FILE_OVERWRITE 4 #define FILE_OVERWRITE_IF 5 #define FILE_MAXIMUM_DISPOSITION 5 /* Characteristics of a File System */ #define FILE_REMOVABLE_MEDIA 0x00000001 #define FILE_READ_ONLY_DEVICE 0x00000002 #define FILE_FLOPPY_DISKETTE 0x00000004 #define FILE_WRITE_ONE_MEDIA 0x00000008 #define FILE_REMOTE_DEVICE 0x00000010 #define FILE_DEVICE_IS_MOUNTED 0x00000020 #define FILE_VIRTUAL_VOLUME 0x00000040 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 #define FILE_DEVICE_SECURE_OPEN 0x00000100 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000 #define FILE_CHARACTERISTIC_CSV 0x00010000 #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000 #define FILE_PORTABLE_DEVICE 0x00040000 /* options for NtCreateNamedPipeFile */ #define FILE_PIPE_INBOUND 0x00000000 #define FILE_PIPE_OUTBOUND 0x00000001 #define FILE_PIPE_FULL_DUPLEX 0x00000002 /* options for pipe's type */ #define FILE_PIPE_TYPE_MESSAGE 0x00000001 #define FILE_PIPE_TYPE_BYTE 0x00000000 /* options for pipe's message mode */ #define FILE_PIPE_MESSAGE_MODE 0x00000001 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000 /* options for pipe's blocking mode */ #define FILE_PIPE_COMPLETE_OPERATION 0x00000001 #define FILE_PIPE_QUEUE_OPERATION 0x00000000 /* and client / server end */ #define FILE_PIPE_SERVER_END 0x00000001 #define FILE_PIPE_CLIENT_END 0x00000000 #define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) ) #define LOGONID_CURRENT ((ULONG)-1) #define OBJ_INHERIT 0x00000002 #define OBJ_PERMANENT 0x00000010 #define OBJ_EXCLUSIVE 0x00000020 #define OBJ_CASE_INSENSITIVE 0x00000040 #define OBJ_OPENIF 0x00000080 #define OBJ_OPENLINK 0x00000100 #define OBJ_KERNEL_HANDLE 0x00000200 #define OBJ_VALID_ATTRIBUTES 0x000003F2 #define SERVERNAME_CURRENT ((HANDLE)NULL) typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */ typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */ typedef DWORD (CALLBACK *PRTL_WORK_ITEM_ROUTINE)(LPVOID); /* FIXME: not the right name */ typedef void (NTAPI *RTL_WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN); /* FIXME: not the right name */ /* DbgPrintEx default levels */ #define DPFLTR_ERROR_LEVEL 0 #define DPFLTR_WARNING_LEVEL 1 #define DPFLTR_TRACE_LEVEL 2 #define DPFLTR_INFO_LEVEL 3 #define DPFLTR_MASK 0x8000000 /* Well-known LUID values */ #define SE_MIN_WELL_KNOWN_PRIVILEGE 2 #define SE_CREATE_TOKEN_PRIVILEGE 2 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3 #define SE_LOCK_MEMORY_PRIVILEGE 4 #define SE_INCREASE_QUOTA_PRIVILEGE 5 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6 /* obsolete */ #define SE_MACHINE_ACCOUNT_PRIVILEGE 6 #define SE_TCB_PRIVILEGE 7 #define SE_SECURITY_PRIVILEGE 8 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9 #define SE_LOAD_DRIVER_PRIVILEGE 10 #define SE_SYSTEM_PROFILE_PRIVILEGE 11 #define SE_SYSTEMTIME_PRIVILEGE 12 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14 #define SE_CREATE_PAGEFILE_PRIVILEGE 15 #define SE_CREATE_PERMANENT_PRIVILEGE 16 #define SE_BACKUP_PRIVILEGE 17 #define SE_RESTORE_PRIVILEGE 18 #define SE_SHUTDOWN_PRIVILEGE 19 #define SE_DEBUG_PRIVILEGE 20 #define SE_AUDIT_PRIVILEGE 21 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22 #define SE_CHANGE_NOTIFY_PRIVILEGE 23 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24 #define SE_UNDOCK_PRIVILEGE 25 #define SE_SYNC_AGENT_PRIVILEGE 26 #define SE_ENABLE_DELEGATION_PRIVILEGE 27 #define SE_MANAGE_VOLUME_PRIVILEGE 28 #define SE_IMPERSONATE_PRIVILEGE 29 #define SE_CREATE_GLOBAL_PRIVILEGE 30 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE /* NtGlobalFlag bits */ #define FLG_STOP_ON_EXCEPTION 0x00000001 #define FLG_SHOW_LDR_SNAPS 0x00000002 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004 #define FLG_STOP_ON_HUNG_GUI 0x00000008 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040 #define FLG_HEAP_VALIDATE_ALL 0x00000080 #define FLG_APPLICATION_VERIFIER 0x00000100 #define FLG_POOL_ENABLE_TAGGING 0x00000400 #define FLG_HEAP_ENABLE_TAGGING 0x00000800 #define FLG_USER_STACK_TRACE_DB 0x00001000 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000 #define FLG_DISABLE_STACK_EXTENSION 0x00010000 #define FLG_ENABLE_CSRDEBUG 0x00020000 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000 #define FLG_ENABLE_SYSTEM_CRIT_BREAKS 0x00100000 #define FLG_HEAP_DISABLE_COALESCING 0x00200000 #define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000 #define FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000 #define FLG_HEAP_PAGE_ALLOCS 0x02000000 #define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000 #define FLG_DISABLE_DBGPRINT 0x08000000 #define FLG_CRITSEC_EVENT_CREATION 0x10000000 #define FLG_LDR_TOP_DOWN 0x20000000 #define FLG_ENABLE_HANDLE_EXCEPTIONS 0x40000000 #define FLG_DISABLE_PROTDLLS 0x80000000 /* Rtl*Registry* functions structs and defines */ #define RTL_REGISTRY_ABSOLUTE 0 #define RTL_REGISTRY_SERVICES 1 #define RTL_REGISTRY_CONTROL 2 #define RTL_REGISTRY_WINDOWS_NT 3 #define RTL_REGISTRY_DEVICEMAP 4 #define RTL_REGISTRY_USER 5 #define RTL_REGISTRY_HANDLE 0x40000000 #define RTL_REGISTRY_OPTIONAL 0x80000000 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020 #define RTL_QUERY_REGISTRY_DELETE 0x00000040 typedef NTSTATUS (WINAPI *PRTL_QUERY_REGISTRY_ROUTINE)( PCWSTR ValueName, ULONG ValueType, PVOID ValueData, ULONG ValueLength, PVOID Context, PVOID EntryContext); typedef struct _RTL_QUERY_REGISTRY_TABLE { PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; ULONG Flags; PWSTR Name; PVOID EntryContext; ULONG DefaultType; PVOID DefaultData; ULONG DefaultLength; } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; typedef struct _KEY_MULTIPLE_VALUE_INFORMATION { PUNICODE_STRING ValueName; ULONG DataLength; ULONG DataOffset; ULONG Type; } KEY_MULTIPLE_VALUE_INFORMATION, *PKEY_MULTIPLE_VALUE_INFORMATION; typedef VOID (CALLBACK *PRTL_OVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPVOID); typedef VOID (CALLBACK *PTIMER_APC_ROUTINE) ( PVOID, ULONG, LONG ); typedef enum _EVENT_INFORMATION_CLASS { EventBasicInformation } EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS; typedef struct _EVENT_BASIC_INFORMATION { EVENT_TYPE EventType; LONG EventState; } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION; typedef enum _SEMAPHORE_INFORMATION_CLASS { SemaphoreBasicInformation } SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS; typedef struct _SEMAPHORE_BASIC_INFORMATION { ULONG CurrentCount; ULONG MaximumCount; } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION; typedef enum _SECTION_INFORMATION_CLASS { SectionBasicInformation, SectionImageInformation, } SECTION_INFORMATION_CLASS; typedef struct _SECTION_BASIC_INFORMATION { PVOID BaseAddress; ULONG Attributes; LARGE_INTEGER Size; } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION; typedef struct _SECTION_IMAGE_INFORMATION { PVOID TransferAddress; ULONG ZeroBits; SIZE_T MaximumStackSize; SIZE_T CommittedStackSize; ULONG SubSystemType; WORD SubsystemVersionLow; WORD SubsystemVersionHigh; ULONG GpValue; USHORT ImageCharacteristics; USHORT DllCharacteristics; USHORT Machine; BOOLEAN ImageContainsCode; union { UCHAR ImageFlags; struct { UCHAR ComPlusNativeReady : 1; UCHAR ComPlusILOnly : 1; UCHAR ImageDynamicallyRelocated : 1; UCHAR ImageMappedFlat : 1; UCHAR BaseBelow4gb : 1; UCHAR Reserved : 3; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; ULONG LoaderFlags; ULONG ImageFileSize; ULONG CheckSum; } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION; typedef struct _LPC_SECTION_WRITE { ULONG Length; HANDLE SectionHandle; ULONG SectionOffset; ULONG ViewSize; PVOID ViewBase; PVOID TargetViewBase; } LPC_SECTION_WRITE, *PLPC_SECTION_WRITE; typedef struct _LPC_SECTION_READ { ULONG Length; ULONG ViewSize; PVOID ViewBase; } LPC_SECTION_READ, *PLPC_SECTION_READ; typedef struct _LPC_MESSAGE { USHORT DataSize; USHORT MessageSize; USHORT MessageType; USHORT VirtualRangesOffset; CLIENT_ID ClientId; ULONG_PTR MessageId; ULONG_PTR SectionSize; UCHAR Data[ANYSIZE_ARRAY]; } LPC_MESSAGE, *PLPC_MESSAGE; typedef struct _RTL_USER_PROCESS_INFORMATION { ULONG Length; HANDLE Process; HANDLE Thread; CLIENT_ID ClientId; SECTION_IMAGE_INFORMATION ImageInformation; } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION; typedef enum _SHUTDOWN_ACTION { ShutdownNoReboot, ShutdownReboot, ShutdownPowerOff } SHUTDOWN_ACTION, *PSHUTDOWN_ACTION; typedef enum _KPROFILE_SOURCE { ProfileTime, ProfileAlignmentFixup, ProfileTotalIssues, ProfilePipelineDry, ProfileLoadInstructions, ProfilePipelineFrozen, ProfileBranchInstructions, ProfileTotalNonissues, ProfileDcacheMisses, ProfileIcacheMisses, ProfileCacheMisses, ProfileBranchMispredictions, ProfileStoreInstructions, ProfileFpInstructions, ProfileIntegerInstructions, Profile2Issue, Profile3Issue, Profile4Issue, ProfileSpecialInstructions, ProfileTotalCycles, ProfileIcacheIssues, ProfileDcacheAccesses, ProfileMemoryBarrierCycles, ProfileLoadLinkedIssues, ProfileMaximum } KPROFILE_SOURCE, *PKPROFILE_SOURCE; typedef struct _DIRECTORY_BASIC_INFORMATION { UNICODE_STRING ObjectName; UNICODE_STRING ObjectTypeName; } DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION; typedef struct _INITIAL_TEB { PVOID StackBase; PVOID StackLimit; PVOID StackCommit; PVOID StackCommitMax; PVOID StackReserved; } INITIAL_TEB, *PINITIAL_TEB; typedef enum _PORT_INFORMATION_CLASS { PortNoInformation } PORT_INFORMATION_CLASS, *PPORT_INFORMATION_CLASS; typedef enum _IO_COMPLETION_INFORMATION_CLASS { IoCompletionBasicInformation } IO_COMPLETION_INFORMATION_CLASS, *PIO_COMPLETION_INFORMATION_CLASS; typedef struct _FILE_COMPLETION_INFORMATION { HANDLE CompletionPort; ULONG_PTR CompletionKey; } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION; #define IO_COMPLETION_QUERY_STATE 0x0001 #define IO_COMPLETION_MODIFY_STATE 0x0002 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) typedef enum _HARDERROR_RESPONSE_OPTION { OptionAbortRetryIgnore, OptionOk, OptionOkCancel, OptionRetryCancel, OptionYesNo, OptionYesNoCancel, OptionShutdownSystem } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION; typedef enum _HARDERROR_RESPONSE { ResponseReturnToCaller, ResponseNotHandled, ResponseAbort, ResponseCancel, ResponseIgnore, ResponseNo, ResponseOk, ResponseRetry, ResponseYes } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE; typedef enum _SYSDBG_COMMAND { SysDbgQueryModuleInformation, SysDbgQueryTraceInformation, SysDbgSetTracepoint, SysDbgSetSpecialCall, SysDbgClearSpecialCalls, SysDbgQuerySpecialCalls, SysDbgBreakPoint, SysDbgQueryVersion, SysDbgReadVirtual, SysDbgWriteVirtual, SysDbgReadPhysical, SysDbgWritePhysical, SysDbgReadControlSpace, SysDbgWriteControlSpace, SysDbgReadIoSpace, SysDbgWriteIoSpace, SysDbgReadMsr, SysDbgWriteMsr, SysDbgReadBusData, SysDbgWriteBusData } SYSDBG_COMMAND, *PSYSDBG_COMMAND; /************************************************************************* * Loader structures * * Those are not part of standard Winternl.h */ typedef struct _LDR_MODULE { LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InMemoryOrderModuleList; LIST_ENTRY InInitializationOrderModuleList; void* BaseAddress; void* EntryPoint; ULONG SizeOfImage; UNICODE_STRING FullDllName; UNICODE_STRING BaseDllName; ULONG Flags; SHORT LoadCount; SHORT TlsIndex; HANDLE SectionHandle; ULONG CheckSum; ULONG TimeDateStamp; HANDLE ActivationContext; } LDR_MODULE, *PLDR_MODULE; typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA { ULONG Flags; const UNICODE_STRING *FullDllName; const UNICODE_STRING *BaseDllName; void *DllBase; ULONG SizeOfImage; } LDR_DLL_LOADED_NOTIFICATION_DATA, *PLDR_DLL_LOADED_NOTIFICATION_DATA; typedef struct _LDR_DLL_UNLOADED_NOTIFICATION_DATA { ULONG Flags; const UNICODE_STRING *FullDllName; const UNICODE_STRING *BaseDllName; void *DllBase; ULONG SizeOfImage; } LDR_DLL_UNLOADED_NOTIFICATION_DATA, *PLDR_DLL_UNLOADED_NOTIFICATION_DATA; typedef union _LDR_DLL_NOTIFICATION_DATA { LDR_DLL_LOADED_NOTIFICATION_DATA Loaded; LDR_DLL_UNLOADED_NOTIFICATION_DATA Unloaded; } LDR_DLL_NOTIFICATION_DATA, *PLDR_DLL_NOTIFICATION_DATA; typedef void (CALLBACK *PLDR_DLL_NOTIFICATION_FUNCTION)(ULONG, LDR_DLL_NOTIFICATION_DATA*, void*); /* those defines are (some of the) regular LDR_MODULE.Flags values */ #define LDR_IMAGE_IS_DLL 0x00000004 #define LDR_LOAD_IN_PROGRESS 0x00001000 #define LDR_UNLOAD_IN_PROGRESS 0x00002000 #define LDR_NO_DLL_CALLS 0x00040000 #define LDR_PROCESS_ATTACHED 0x00080000 #define LDR_COR_IMAGE 0x00400000 #define LDR_COR_ILONLY 0x01000000 /* these ones is Wine specific */ #define LDR_DONT_RESOLVE_REFS 0x40000000 #define LDR_WINE_INTERNAL 0x80000000 /* flag for LdrAddRefDll */ #define LDR_ADDREF_DLL_PIN 0x00000001 #define LDR_DLL_NOTIFICATION_REASON_LOADED 1 #define LDR_DLL_NOTIFICATION_REASON_UNLOADED 2 /* FIXME: to be checked */ #define MAXIMUM_FILENAME_LENGTH 256 typedef struct _SYSTEM_MODULE { PVOID Reserved1; /* 00/00 */ PVOID Reserved2; /* 04/08 */ PVOID ImageBaseAddress; /* 08/10 */ ULONG ImageSize; /* 0c/18 */ ULONG Flags; /* 10/1c */ WORD Id; /* 14/20 */ WORD Rank; /* 16/22 */ WORD Unknown; /* 18/24 */ WORD NameOffset; /* 1a/26 */ BYTE Name[MAXIMUM_FILENAME_LENGTH]; /* 1c/28 */ } SYSTEM_MODULE, *PSYSTEM_MODULE; typedef struct _SYSTEM_MODULE_INFORMATION { ULONG ModulesCount; SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */ } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION; #define THREAD_CREATE_FLAGS_CREATE_SUSPENDED 0x00000001 #define THREAD_CREATE_FLAGS_SKIP_THREAD_ATTACH 0x00000002 #define THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER 0x00000004 #define THREAD_CREATE_FLAGS_HAS_SECURITY_DESCRIPTOR 0x00000010 #define THREAD_CREATE_FLAGS_ACCESS_CHECK_IN_TARGET 0x00000020 #define THREAD_CREATE_FLAGS_INITIAL_THREAD 0x00000080 /*********************************************************************** * Function declarations */ #if defined(__i386__) && defined(__GNUC__) static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); } static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); } #else /* __i386__ && __GNUC__ */ NTSYSAPI void WINAPI DbgBreakPoint(void); NTSYSAPI void WINAPI DbgUserBreakPoint(void); #endif /* __i386__ && __GNUC__ */ NTSYSAPI NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...); NTSYSAPI NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...); NTSYSAPI NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG); NTSYSAPI NTSTATUS WINAPI LdrAddRefDll(ULONG,HMODULE); NTSYSAPI NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**); NTSYSAPI NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**); NTSYSAPI NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE); NTSYSAPI NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*); NTSYSAPI NTSTATUS WINAPI LdrGetDllHandle(LPCWSTR, ULONG, const UNICODE_STRING*, HMODULE*); NTSYSAPI NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**); NTSYSAPI void WINAPI LdrInitializeThunk(void*,ULONG_PTR,ULONG_PTR,ULONG_PTR); NTSYSAPI NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*); NTSYSAPI NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG_PTR*); IMAGE_BASE_RELOCATION * WINAPI LdrProcessRelocationBlock(void*,UINT,USHORT*,INT_PTR); NTSYSAPI NTSTATUS WINAPI LdrQueryImageFileExecutionOptions(const UNICODE_STRING*,LPCWSTR,ULONG,void*,ULONG,ULONG*); NTSYSAPI NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*); NTSYSAPI void WINAPI LdrShutdownProcess(void); NTSYSAPI void WINAPI LdrShutdownThread(void); NTSYSAPI NTSTATUS WINAPI LdrUnloadDll(HMODULE); NTSYSAPI NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG_PTR); NTSYSAPI NTSTATUS WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ); NTSYSAPI NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*); NTSYSAPI NTSTATUS WINAPI NtAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PACCESS_MASK,PBOOLEAN,PBOOLEAN); NTSYSAPI NTSTATUS WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*); NTSYSAPI NTSTATUS WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG); NTSYSAPI NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD); NTSYSAPI NTSTATUS WINAPI NtAlertResumeThread(HANDLE,PULONG); NTSYSAPI NTSTATUS WINAPI NtAlertThread(HANDLE ThreadHandle); NTSYSAPI NTSTATUS WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid); NTSYSAPI NTSTATUS WINAPI NtAllocateUuids(PULARGE_INTEGER,PULONG,PULONG,PUCHAR); NTSYSAPI NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG); NTSYSAPI NTSTATUS WINAPI NtAreMappedFilesTheSame(PVOID,PVOID); NTSYSAPI NTSTATUS WINAPI NtAssignProcessToJobObject(HANDLE,HANDLE); NTSYSAPI NTSTATUS WINAPI NtCallbackReturn(PVOID,ULONG,NTSTATUS); NTSYSAPI NTSTATUS WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK); NTSYSAPI NTSTATUS WINAPI NtCancelIoFileEx(HANDLE,PIO_STATUS_BLOCK,PIO_STATUS_BLOCK); NTSYSAPI NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*); NTSYSAPI NTSTATUS WINAPI NtClearEvent(HANDLE); NTSYSAPI NTSTATUS WINAPI NtClose(HANDLE); NTSYSAPI NTSTATUS WINAPI NtCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtCompleteConnectPort(HANDLE); NTSYSAPI NTSTATUS WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG); NTSYSAPI NTSTATUS WINAPI NtContinue(PCONTEXT,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES); NTSYSAPI NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,EVENT_TYPE,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtCreateEventPair(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES); NTSYSAPI NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG); NTSYSAPI NTSTATUS WINAPI NtCreateJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtCreateKeyTransacted(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,HANDLE,ULONG*); NTSYSAPI NTSTATUS WINAPI NtCreateKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG); NTSYSAPI NTSTATUS WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER); NTSYSAPI NTSTATUS WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER); NTSYSAPI NTSTATUS WINAPI NtCreatePagingFile(PUNICODE_STRING,PLARGE_INTEGER,PLARGE_INTEGER,PLARGE_INTEGER); NTSYSAPI NTSTATUS WINAPI NtCreatePort(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtCreateProcess(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,BOOLEAN,HANDLE,HANDLE,HANDLE); NTSYSAPI NTSTATUS WINAPI NtCreateProfile(PHANDLE,HANDLE,PVOID,ULONG,ULONG,PVOID,ULONG,KPROFILE_SOURCE,KAFFINITY); NTSYSAPI NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE); NTSYSAPI NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG); NTSYSAPI NTSTATUS WINAPI NtCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING); NTSYSAPI NTSTATUS WINAPI NtCreateThread(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PCONTEXT,PINITIAL_TEB,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE); NTSYSAPI 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); NTSYSAPI NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI NtDeleteAtom(RTL_ATOM); NTSYSAPI NTSTATUS WINAPI NtDeleteFile(POBJECT_ATTRIBUTES); NTSYSAPI NTSTATUS WINAPI NtDeleteKey(HANDLE); NTSYSAPI NTSTATUS WINAPI NtDeleteValueKey(HANDLE,const UNICODE_STRING *); NTSYSAPI NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtDisplayString(PUNICODE_STRING); NTSYSAPI NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG); NTSYSAPI NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE); NTSYSAPI NTSTATUS WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *); NTSYSAPI NTSTATUS WINAPI NtEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtExtendSection(HANDLE,PLARGE_INTEGER); NTSYSAPI NTSTATUS WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*); NTSYSAPI NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*); NTSYSAPI NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,SIZE_T); NTSYSAPI NTSTATUS WINAPI NtFlushKey(HANDLE); NTSYSAPI NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG); NTSYSAPI NTSTATUS WINAPI NtFlushWriteBuffer(VOID); NTSYSAPI NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG); NTSYSAPI NTSTATUS WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*); NTSYSAPI ULONG WINAPI NtGetCurrentProcessorNumber(void); NTSYSAPI NTSTATUS WINAPI NtGetPlugPlayEvent(ULONG,ULONG,PVOID,ULONG); NTSYSAPI ULONG WINAPI NtGetTickCount(VOID); NTSYSAPI NTSTATUS WINAPI NtGetWriteWatch(HANDLE,ULONG,PVOID,SIZE_T,PVOID*,ULONG_PTR*,ULONG*); NTSYSAPI NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE); NTSYSAPI NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE); NTSYSAPI NTSTATUS WINAPI NtInitializeRegistry(BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtIsProcessInJob(HANDLE,HANDLE); NTSYSAPI NTSTATUS WINAPI NtListenPort(HANDLE,PLPC_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtLoadDriver(const UNICODE_STRING *); NTSYSAPI NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *); NTSYSAPI NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG); NTSYSAPI NTSTATUS WINAPI NtMakeTemporaryObject(HANDLE); NTSYSAPI NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG); NTSYSAPI NTSTATUS WINAPI NtNotifyChangeDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,ULONG,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtNotifyChangeMultipleKeys(HANDLE,ULONG,OBJECT_ATTRIBUTES*,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtOpenDirectoryObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *); NTSYSAPI NTSTATUS WINAPI NtOpenEventPair(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG); NTSYSAPI NTSTATUS WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *); NTSYSAPI NTSTATUS WINAPI NtOpenKeyEx(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG); NTSYSAPI NTSTATUS WINAPI NtOpenKeyTransacted(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,HANDLE); NTSYSAPI NTSTATUS WINAPI NtOpenKeyTransactedEx(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,HANDLE); NTSYSAPI NTSTATUS WINAPI NtOpenKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenObjectAuditAlarm(PUNICODE_STRING,PHANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,ACCESS_MASK,PPRIVILEGE_SET,BOOLEAN,BOOLEAN,PBOOLEAN); NTSYSAPI NTSTATUS WINAPI NtOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*); NTSYSAPI NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *); NTSYSAPI NTSTATUS WINAPI NtOpenProcessTokenEx(HANDLE,DWORD,DWORD,HANDLE *); NTSYSAPI NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*); NTSYSAPI NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *); NTSYSAPI NTSTATUS WINAPI NtOpenThreadTokenEx(HANDLE,DWORD,BOOLEAN,DWORD,HANDLE *); NTSYSAPI NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*); NTSYSAPI NTSTATUS WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN); NTSYSAPI NTSTATUS WINAPI NtPrivilegeObjectAuditAlarm(PUNICODE_STRING,HANDLE,HANDLE,ULONG,PPRIVILEGE_SET,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtPrivilegedServiceAuditAlarm(PUNICODE_STRING,PUNICODE_STRING,HANDLE,PPRIVILEGE_SET,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG,ULONG*); NTSYSAPI NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR); NTSYSAPI NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*); NTSYSAPI NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*); NTSYSAPI NTSTATUS WINAPI NtQueryDefaultUILanguage(LANGID*); NTSYSAPI NTSTATUS WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtQueryDirectoryObject(HANDLE,PDIRECTORY_BASIC_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PULONG,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtQueryEvent(HANDLE,EVENT_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*); NTSYSAPI NTSTATUS WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,PVOID,ULONG,ULONG*); NTSYSAPI NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS); NTSYSAPI NTSTATUS WINAPI NtQueryInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryInformationPort(HANDLE,PORT_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryInstallUILanguage(LANGID*); NTSYSAPI NTSTATUS WINAPI NtQueryIntervalProfile(KPROFILE_SOURCE,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryIoCompletion(HANDLE,IO_COMPLETION_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *); NTSYSAPI NTSTATUS WINAPI NtQueryMultipleValueKey(HANDLE,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryMutant(HANDLE,MUTANT_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryOpenSubKeys(POBJECT_ATTRIBUTES,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER); NTSYSAPI NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,SIZE_T,SIZE_T*); NTSYSAPI NTSTATUS WINAPI NtQuerySemaphore(HANDLE,SEMAPHORE_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG); NTSYSAPI NTSTATUS WINAPI NtQuerySystemEnvironmentValue(PUNICODE_STRING,PWCHAR,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQuerySystemInformationEx(SYSTEM_INFORMATION_CLASS,void*,ULONG,void*,ULONG,ULONG*); NTSYSAPI NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER); NTSYSAPI NTSTATUS WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryTimerResolution(PULONG,PULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *); NTSYSAPI NTSTATUS WINAPI NtQueryLicenseValue(const UNICODE_STRING *,ULONG *,PVOID,ULONG,ULONG *); NTSYSAPI NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,SIZE_T,SIZE_T*); NTSYSAPI NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS); NTSYSAPI NTSTATUS WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL); NTSYSAPI NTSTATUS WINAPI NtRaiseHardError(NTSTATUS,ULONG,PUNICODE_STRING,PVOID*,HARDERROR_RESPONSE_OPTION,PHARDERROR_RESPONSE); NTSYSAPI NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG); NTSYSAPI NTSTATUS WINAPI NtReadFileScatter(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT*,ULONG,PLARGE_INTEGER,PULONG); NTSYSAPI NTSTATUS WINAPI NtReadRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*); NTSYSAPI NTSTATUS WINAPI NtRegisterThreadTerminatePort(HANDLE); NTSYSAPI NTSTATUS WINAPI NtReleaseKeyedEvent(HANDLE,const void*,BOOLEAN,const LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI NtReleaseMutant(HANDLE,PLONG); NTSYSAPI NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtRemoveIoCompletion(HANDLE,PULONG_PTR,PULONG_PTR,PIO_STATUS_BLOCK,PLARGE_INTEGER); NTSYSAPI NTSTATUS WINAPI NtRenameKey(HANDLE,UNICODE_STRING*); NTSYSAPI NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES); NTSYSAPI NTSTATUS WINAPI NtReplyPort(HANDLE,PLPC_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtReplyWaitReceivePortEx(HANDLE,PVOID*,PPORT_MESSAGE,PPORT_MESSAGE,PLARGE_INTEGER); NTSYSAPI NTSTATUS WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtRequestPort(HANDLE,PLPC_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG); NTSYSAPI NTSTATUS WINAPI NtResetWriteWatch(HANDLE,PVOID,SIZE_T); NTSYSAPI NTSTATUS WINAPI NtRestoreKey(HANDLE,HANDLE,ULONG); NTSYSAPI NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG); NTSYSAPI NTSTATUS WINAPI NtSaveKey(HANDLE,HANDLE); NTSYSAPI NTSTATUS WINAPI NtSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG); NTSYSAPI NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*); NTSYSAPI NTSTATUS WINAPI NtSetDefaultHardErrorPort(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID); NTSYSAPI NTSTATUS WINAPI NtSetDefaultUILanguage(LANGID); NTSYSAPI NTSTATUS WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG); NTSYSAPI NTSTATUS WINAPI NtSetHighEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetHighWaitLowEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetHighWaitLowThread(VOID); NTSYSAPI NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS); NTSYSAPI NTSTATUS WINAPI NtSetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetIntervalProfile(ULONG,KPROFILE_SOURCE); NTSYSAPI NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG_PTR,ULONG_PTR,NTSTATUS,SIZE_T); NTSYSAPI NTSTATUS WINAPI NtSetLdtEntries(ULONG,ULONG,ULONG,ULONG,ULONG,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetLowEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetLowWaitHighEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetLowWaitHighThread(VOID); NTSYSAPI NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); NTSYSAPI NTSTATUS WINAPI NtSetSystemEnvironmentValue(PUNICODE_STRING,PUNICODE_STRING); NTSYSAPI NTSTATUS WINAPI NtSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetSystemPowerState(POWER_ACTION,SYSTEM_POWER_STATE,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*); NTSYSAPI NTSTATUS WINAPI NtSetTimerResolution(ULONG,BOOLEAN,PULONG); NTSYSAPI NTSTATUS WINAPI NtSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS); NTSYSAPI NTSTATUS WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI NtShutdownSystem(SHUTDOWN_ACTION); NTSYSAPI NTSTATUS WINAPI NtStartProfile(HANDLE); NTSYSAPI NTSTATUS WINAPI NtStopProfile(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG); NTSYSAPI NTSTATUS WINAPI NtSystemDebugControl(SYSDBG_COMMAND,PVOID,ULONG,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtTerminateJobObject(HANDLE,NTSTATUS); NTSYSAPI NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG); NTSYSAPI NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG); NTSYSAPI NTSTATUS WINAPI NtTestAlert(VOID); NTSYSAPI NTSTATUS WINAPI NtUnloadDriver(const UNICODE_STRING *); NTSYSAPI NTSTATUS WINAPI NtUnloadKey(POBJECT_ATTRIBUTES); NTSYSAPI NTSTATUS WINAPI NtUnloadKeyEx(POBJECT_ATTRIBUTES,HANDLE); NTSYSAPI NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG); NTSYSAPI NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG); NTSYSAPI NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID); NTSYSAPI NTSTATUS WINAPI NtVdmControl(ULONG,PVOID); NTSYSAPI NTSTATUS WINAPI NtWaitForKeyedEvent(HANDLE,const void*,BOOLEAN,const LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI NtWaitHighEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtWaitLowEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG); NTSYSAPI NTSTATUS WINAPI NtWriteFileGather(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT*,ULONG,PLARGE_INTEGER,PULONG); NTSYSAPI NTSTATUS WINAPI NtWriteRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*); NTSYSAPI NTSTATUS WINAPI NtYieldExecution(void); NTSYSAPI void WINAPI RtlAcquirePebLock(void); NTSYSAPI BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE); NTSYSAPI BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE); NTSYSAPI void WINAPI RtlAcquireSRWLockExclusive(RTL_SRWLOCK*); NTSYSAPI void WINAPI RtlAcquireSRWLockShared(RTL_SRWLOCK*); NTSYSAPI NTSTATUS WINAPI RtlActivateActivationContext(DWORD,HANDLE,ULONG_PTR*); NTSYSAPI NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD); NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID); NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID); NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedObjectAce(PACL,DWORD,DWORD,DWORD,GUID*,GUID*,PSID); NTSYSAPI NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID); NTSYSAPI NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID); NTSYSAPI NTSTATUS WINAPI RtlAddAccessDeniedObjectAce(PACL,DWORD,DWORD,DWORD,GUID*,GUID*,PSID); NTSYSAPI NTSTATUS WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*); NTSYSAPI NTSTATUS WINAPI RtlAddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL); NTSYSAPI NTSTATUS WINAPI RtlAddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL); NTSYSAPI NTSTATUS WINAPI RtlAddAuditAccessObjectAce(PACL,DWORD,DWORD,DWORD,GUID*,GUID*,PSID,BOOL,BOOL); NTSYSAPI NTSTATUS WINAPI RtlAddMandatoryAce(PACL,DWORD,DWORD,DWORD,DWORD,PSID); NTSYSAPI void WINAPI RtlAddRefActivationContext(HANDLE); NTSYSAPI PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER); NTSYSAPI NTSTATUS WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *); NTSYSAPI RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *); NTSYSAPI PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,SIZE_T) __WINE_ALLOC_SIZE(3); NTSYSAPI WCHAR WINAPI RtlAnsiCharToUnicodeChar(LPSTR *); NTSYSAPI DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *); NTSYSAPI NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR); NTSYSAPI NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *); NTSYSAPI NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *); NTSYSAPI NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR); NTSYSAPI BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK); NTSYSAPI BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK); NTSYSAPI BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG); NTSYSAPI BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG); NTSYSAPI NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI RtlCheckRegistryKey(ULONG, PWSTR); NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP); NTSYSAPI void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG); NTSYSAPI NTSTATUS WINAPI RtlCreateActivationContext(HANDLE*,const void*); NTSYSAPI PDEBUG_BUFFER WINAPI RtlCreateQueryDebugBuffer(ULONG,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlCreateRegistryKey(ULONG,PWSTR); NTSYSAPI ULONG WINAPI RtlCompactHeap(HANDLE,ULONG); NTSYSAPI LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN); NTSYSAPI LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN); NTSYSAPI LONG WINAPI RtlCompareUnicodeStrings(const WCHAR*,SIZE_T,const WCHAR*,SIZE_T,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlCompressBuffer(USHORT,PUCHAR,ULONG,PUCHAR,ULONG,ULONG,PULONG,PVOID); NTSYSAPI DWORD WINAPI RtlComputeCrc32(DWORD,const BYTE*,INT); NTSYSAPI NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN); NTSYSAPI void WINAPI RtlCopyLuid(PLUID,const LUID*); NTSYSAPI void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES); NTSYSAPI BOOLEAN WINAPI RtlCopySid(DWORD,PSID,PSID); NTSYSAPI NTSTATUS WINAPI RtlCopySecurityDescriptor(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR); NTSYSAPI void WINAPI RtlCopyString(STRING*,const STRING*); NTSYSAPI void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*); NTSYSAPI NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD); NTSYSAPI NTSTATUS WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*); NTSYSAPI NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*); NTSYSAPI HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,SIZE_T,SIZE_T,PVOID,PRTL_HEAP_DEFINITION); NTSYSAPI 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*); NTSYSAPI NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD); NTSYSAPI NTSTATUS WINAPI RtlCreateTimerQueue(PHANDLE); NTSYSAPI NTSTATUS WINAPI RtlCreateTimer(PHANDLE, HANDLE, RTL_WAITORTIMERCALLBACKFUNC, PVOID, DWORD, DWORD, ULONG); NTSYSAPI BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR); NTSYSAPI BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR); NTSYSAPI NTSTATUS WINAPI RtlCreateUserProcess(UNICODE_STRING*,ULONG,RTL_USER_PROCESS_PARAMETERS*,SECURITY_DESCRIPTOR*,SECURITY_DESCRIPTOR*,HANDLE,BOOLEAN,HANDLE,HANDLE,RTL_USER_PROCESS_INFORMATION*); NTSYSAPI NTSTATUS WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*); NTSYSAPI void WINAPI RtlDeactivateActivationContext(DWORD,ULONG_PTR); NTSYSAPI PVOID WINAPI RtlDecodePointer(PVOID); NTSYSAPI NTSTATUS WINAPI RtlDecompressBuffer(USHORT,PUCHAR,ULONG,PUCHAR,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI RtlDeleteAce(PACL,DWORD); NTSYSAPI NTSTATUS WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM); NTSYSAPI NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI NTSTATUS WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR); NTSYSAPI void WINAPI RtlDeleteResource(LPRTL_RWLOCK); NTSYSAPI NTSTATUS WINAPI RtlDeleteSecurityObject(PSECURITY_DESCRIPTOR*); NTSYSAPI NTSTATUS WINAPI RtlDeleteTimer(HANDLE, HANDLE, HANDLE); NTSYSAPI NTSTATUS WINAPI RtlDeleteTimerQueueEx(HANDLE, HANDLE); NTSYSAPI PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*); NTSYSAPI NTSTATUS WINAPI RtlDeregisterWait(HANDLE); NTSYSAPI NTSTATUS WINAPI RtlDeregisterWaitEx(HANDLE,HANDLE); NTSYSAPI NTSTATUS WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE); NTSYSAPI NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR); NTSYSAPI NTSTATUS WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *); NTSYSAPI HANDLE WINAPI RtlDestroyHeap(HANDLE); NTSYSAPI void WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*); NTSYSAPI NTSTATUS WINAPI RtlDestroyQueryDebugBuffer(PDEBUG_BUFFER); NTSYSAPI DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR); NTSYSAPI BOOLEAN WINAPI RtlDllShutdownInProgress(void); NTSYSAPI BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR); NTSYSAPI BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*); NTSYSAPI NTSTATUS WINAPI RtlDosPathNameToNtPathName_U_WithStatus(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*); NTSYSAPI ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*); NTSYSAPI WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR); NTSYSAPI NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN); NTSYSAPI void WINAPI RtlDumpResource(LPRTL_RWLOCK); NTSYSAPI NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*); NTSYSAPI NTSTATUS WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN); NTSYSAPI PVOID WINAPI RtlEncodePointer(PVOID); NTSYSAPI NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI void WINAPI RtlEraseUnicodeString(UNICODE_STRING*); NTSYSAPI NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*); NTSYSAPI NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*); NTSYSAPI BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*); NTSYSAPI BOOL WINAPI RtlEqualPrefixSid(PSID,PSID); NTSYSAPI BOOL WINAPI RtlEqualSid(PSID,PSID); NTSYSAPI BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN); NTSYSAPI BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN); NTSYSAPI void DECLSPEC_NORETURN WINAPI RtlExitUserProcess(ULONG); NTSYSAPI void DECLSPEC_NORETURN WINAPI RtlExitUserThread(ULONG); NTSYSAPI NTSTATUS WINAPI RtlExpandEnvironmentStrings(const WCHAR*,WCHAR*,SIZE_T,WCHAR*,SIZE_T,SIZE_T*); NTSYSAPI NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PCWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*); NTSYSAPI NTSTATUS WINAPI RtlFindActivationContextSectionString(ULONG,const GUID*,ULONG,const UNICODE_STRING*,PVOID); NTSYSAPI NTSTATUS WINAPI RtlFindActivationContextSectionGuid(ULONG,const GUID*,ULONG,const GUID*,PVOID); NTSYSAPI NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*); NTSYSAPI ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG); NTSYSAPI ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG); NTSYSAPI ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN); NTSYSAPI ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG); NTSYSAPI ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG); NTSYSAPI CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG); NTSYSAPI ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG); NTSYSAPI ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG); NTSYSAPI NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**); NTSYSAPI CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG); NTSYSAPI ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG); NTSYSAPI ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG); NTSYSAPI ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG); NTSYSAPI ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG); NTSYSAPI ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN); NTSYSAPI BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *); NTSYSAPI NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING); NTSYSAPI NTSTATUS WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,__ms_va_list *,LPWSTR,ULONG); NTSYSAPI void WINAPI RtlFreeAnsiString(PANSI_STRING); NTSYSAPI BOOLEAN WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *); NTSYSAPI BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID); NTSYSAPI void WINAPI RtlFreeOemString(POEM_STRING); NTSYSAPI DWORD WINAPI RtlFreeSid(PSID); NTSYSAPI void WINAPI RtlFreeThreadActivationContextStack(void); NTSYSAPI void WINAPI RtlFreeUnicodeString(PUNICODE_STRING); NTSYSAPI NTSTATUS WINAPI RtlGetAce(PACL,DWORD,LPVOID *); NTSYSAPI NTSTATUS WINAPI RtlGetActiveActivationContext(HANDLE*); NTSYSAPI NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT,PULONG,PULONG); NTSYSAPI NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD); NTSYSAPI ULONG WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR); NTSYSAPI PEB * WINAPI RtlGetCurrentPeb(void); NTSYSAPI NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN); NTSYSAPI TEB_ACTIVE_FRAME * WINAPI RtlGetFrame(void); NTSYSAPI ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*); NTSYSAPI NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlGetLastNtStatus(void); NTSYSAPI DWORD WINAPI RtlGetLastWin32Error(void); NTSYSAPI DWORD WINAPI RtlGetLongestNtPathLength(void); NTSYSAPI ULONG WINAPI RtlGetNtGlobalFlags(void); NTSYSAPI BOOLEAN WINAPI RtlGetNtProductType(LPDWORD); NTSYSAPI NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN); NTSYSAPI ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*); NTSYSAPI DWORD WINAPI RtlGetThreadErrorMode(void); NTSYSAPI NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*); NTSYSAPI NTSTATUS WINAPI RtlGUIDFromString(PUNICODE_STRING,GUID*); NTSYSAPI PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID); NTSYSAPI PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *); NTSYSAPI PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE); NTSYSAPI PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD); NTSYSAPI PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **); NTSYSAPI NTSTATUS WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL); NTSYSAPI void WINAPI RtlInitString(PSTRING,PCSZ); NTSYSAPI void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ); NTSYSAPI NTSTATUS WINAPI RtlInitAnsiStringEx(PANSI_STRING,PCSZ); NTSYSAPI void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR); NTSYSAPI NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR); NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG); NTSYSAPI void WINAPI RtlInitializeConditionVariable(RTL_CONDITION_VARIABLE *); NTSYSAPI NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,ULONG); NTSYSAPI NTSTATUS WINAPI RtlInitializeCriticalSectionEx(RTL_CRITICAL_SECTION *,ULONG,ULONG); NTSYSAPI void WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *); NTSYSAPI void WINAPI RtlInitializeResource(LPRTL_RWLOCK); NTSYSAPI void WINAPI RtlInitializeSRWLock(RTL_SRWLOCK*); NTSYSAPI BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE); NTSYSAPI NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *); NTSYSAPI NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR); NTSYSAPI NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *); NTSYSAPI BOOLEAN WINAPI RtlIsActivationContextActive(HANDLE); NTSYSAPI BOOL WINAPI RtlIsCriticalSectionLocked(RTL_CRITICAL_SECTION *); NTSYSAPI BOOL WINAPI RtlIsCriticalSectionLockedByThread(RTL_CRITICAL_SECTION *); NTSYSAPI ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR); NTSYSAPI BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN); NTSYSAPI BOOLEAN WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *); NTSYSAPI BOOLEAN WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *); NTSYSAPI BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **); NTSYSAPI NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI DWORD WINAPI RtlLengthRequiredSid(DWORD); NTSYSAPI ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR); NTSYSAPI DWORD WINAPI RtlLengthSid(PSID); NTSYSAPI NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER); NTSYSAPI BOOLEAN WINAPI RtlLockHeap(HANDLE); NTSYSAPI NTSTATUS WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*); NTSYSAPI NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD); NTSYSAPI void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*); NTSYSAPI NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD); NTSYSAPI NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT); NTSYSAPI NTSTATUS WINAPI RtlNewSecurityObject(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOLEAN,HANDLE,PGENERIC_MAPPING); NTSYSAPI PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*); NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS); NTSYSAPI ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS); NTSYSAPI ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP); NTSYSAPI ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP); NTSYSAPI UINT WINAPI RtlOemStringToUnicodeSize(const STRING*); NTSYSAPI NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD); NTSYSAPI NTSTATUS WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHANDLE); NTSYSAPI PVOID WINAPI RtlPcToFileHeader(PVOID,PVOID*); NTSYSAPI NTSTATUS WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM); NTSYSAPI void WINAPI RtlPopFrame(TEB_ACTIVE_FRAME*); NTSYSAPI BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN); NTSYSAPI BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN); NTSYSAPI void WINAPI RtlPushFrame(TEB_ACTIVE_FRAME*); NTSYSAPI NTSTATUS WINAPI RtlQueryActivationContextApplicationSettings(DWORD,HANDLE,const WCHAR*,const WCHAR*,WCHAR*,SIZE_T,SIZE_T*); NTSYSAPI NTSTATUS WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*); NTSYSAPI NTSTATUS WINAPI RtlQueryDynamicTimeZoneInformation(RTL_DYNAMIC_TIME_ZONE_INFORMATION*); NTSYSAPI NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING); NTSYSAPI NTSTATUS WINAPI RtlQueryHeapInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T); NTSYSAPI NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS); NTSYSAPI NTSTATUS WINAPI RtlQueryInformationActivationContext(ULONG,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T*); NTSYSAPI NTSTATUS WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER); NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID); NTSYSAPI NTSTATUS WINAPI RtlQueryTimeZoneInformation(RTL_TIME_ZONE_INFORMATION*); NTSYSAPI NTSTATUS WINAPI RtlQueryUnbiasedInterruptTime(ULONGLONG*); NTSYSAPI NTSTATUS WINAPI RtlQueueWorkItem(PRTL_WORK_ITEM_ROUTINE,PVOID,ULONG); NTSYSAPI void WINAPI RtlRaiseException(PEXCEPTION_RECORD); NTSYSAPI void WINAPI RtlRaiseStatus(NTSTATUS); NTSYSAPI ULONG WINAPI RtlRandom(PULONG); NTSYSAPI PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,SIZE_T); NTSYSAPI NTSTATUS WINAPI RtlRegisterWait(PHANDLE,HANDLE,RTL_WAITORTIMERCALLBACKFUNC,PVOID,ULONG,ULONG); NTSYSAPI void WINAPI RtlReleaseActivationContext(HANDLE); NTSYSAPI void WINAPI RtlReleasePebLock(void); NTSYSAPI void WINAPI RtlReleaseResource(LPRTL_RWLOCK); NTSYSAPI void WINAPI RtlReleaseSRWLockExclusive(RTL_SRWLOCK*); NTSYSAPI void WINAPI RtlReleaseSRWLockShared(RTL_SRWLOCK*); NTSYSAPI ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID); NTSYSAPI void WINAPI RtlRestoreLastWin32Error(DWORD); NTSYSAPI void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *); NTSYSAPI void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *); NTSYSAPI NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD); NTSYSAPI void WINAPI RtlSetAllBits(PRTL_BITMAP); NTSYSAPI void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG); NTSYSAPI ULONG WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG); NTSYSAPI NTSTATUS WINAPI RtlSetControlSecurityDescriptor(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL); NTSYSAPI NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*); NTSYSAPI void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*); NTSYSAPI NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING); NTSYSAPI NTSTATUS WINAPI RtlSetHeapInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T); NTSYSAPI NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlSetIoCompletionCallback(HANDLE,PRTL_OVERLAPPED_COMPLETION_ROUTINE,ULONG); NTSYSAPI void WINAPI RtlSetLastWin32Error(DWORD); NTSYSAPI void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS); NTSYSAPI NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlSetThreadErrorMode(DWORD,LPDWORD); NTSYSAPI NTSTATUS WINAPI RtlSetTimeZoneInformation(const RTL_TIME_ZONE_INFORMATION*); NTSYSAPI SIZE_T WINAPI RtlSizeHeap(HANDLE,ULONG,const void*); NTSYSAPI NTSTATUS WINAPI RtlSleepConditionVariableCS(RTL_CONDITION_VARIABLE*,RTL_CRITICAL_SECTION*,const LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI RtlSleepConditionVariableSRW(RTL_CONDITION_VARIABLE*,RTL_SRWLOCK*,const LARGE_INTEGER*,ULONG); NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID,PUNICODE_STRING); NTSYSAPI LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD); NTSYSAPI LPBYTE WINAPI RtlSubAuthorityCountSid(PSID); NTSYSAPI NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER); NTSYSAPI void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS); NTSYSAPI BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER); NTSYSAPI void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS); NTSYSAPI BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD); NTSYSAPI BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD); NTSYSAPI BOOLEAN WINAPI RtlTryAcquireSRWLockExclusive(RTL_SRWLOCK *); NTSYSAPI BOOLEAN WINAPI RtlTryAcquireSRWLockShared(RTL_SRWLOCK *); NTSYSAPI BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG); NTSYSAPI DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*); NTSYSAPI NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *); NTSYSAPI DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*); NTSYSAPI NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD); NTSYSAPI NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG); NTSYSAPI NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD); NTSYSAPI ULONG WINAPI RtlUniform(PULONG); NTSYSAPI BOOLEAN WINAPI RtlUnlockHeap(HANDLE); NTSYSAPI void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID); #ifdef __x86_64__ NTSYSAPI void WINAPI RtlUnwindEx(PVOID,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE); #elif defined(__ia64__) NTSYSAPI void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT); NTSYSAPI void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE); #endif NTSYSAPI WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR); NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD); NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD); NTSYSAPI NTSTATUS WINAPI RtlUpdateTimer(HANDLE, HANDLE, DWORD, DWORD); NTSYSAPI CHAR WINAPI RtlUpperChar(CHAR); NTSYSAPI void WINAPI RtlUpperString(STRING *,const STRING *); NTSYSAPI NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR); NTSYSAPI BOOLEAN WINAPI RtlValidRelativeSecurityDescriptor(PSECURITY_DESCRIPTOR,ULONG,SECURITY_INFORMATION); NTSYSAPI BOOLEAN WINAPI RtlValidAcl(PACL); NTSYSAPI BOOLEAN WINAPI RtlValidSid(PSID); NTSYSAPI BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID); NTSYSAPI NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG); NTSYSAPI void WINAPI RtlWakeAllConditionVariable(RTL_CONDITION_VARIABLE *); NTSYSAPI void WINAPI RtlWakeConditionVariable(RTL_CONDITION_VARIABLE *); NTSYSAPI NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID); NTSYSAPI NTSTATUS WINAPI RtlWow64EnableFsRedirection(BOOLEAN); NTSYSAPI NTSTATUS WINAPI RtlWow64EnableFsRedirectionEx(ULONG,ULONG*); #ifdef __x86_64__ NTSYSAPI NTSTATUS WINAPI RtlWow64GetThreadContext(HANDLE, WOW64_CONTEXT *); NTSYSAPI NTSTATUS WINAPI RtlWow64SetThreadContext(HANDLE, const WOW64_CONTEXT *); #endif NTSYSAPI NTSTATUS WINAPI RtlWriteRegistryValue(ULONG,PCWSTR,PCWSTR,ULONG,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI RtlZombifyActivationContext(HANDLE); NTSYSAPI NTSTATUS WINAPI RtlpNtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG); NTSYSAPI NTSTATUS WINAPI RtlpNtEnumerateSubKey(HANDLE,UNICODE_STRING *, ULONG); NTSYSAPI NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *); NTSYSAPI NTSTATUS WINAPI vDbgPrintEx(ULONG,ULONG,LPCSTR,__ms_va_list); NTSYSAPI NTSTATUS WINAPI vDbgPrintExWithPrefix(LPCSTR,ULONG,ULONG,LPCSTR,__ms_va_list); /* 32-bit only functions */ #ifndef _WIN64 NTSYSAPI LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG); NTSYSAPI ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG); NTSYSAPI LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT); NTSYSAPI ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT); NTSYSAPI UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *); NTSYSAPI LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT); NTSYSAPI LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT); NTSYSAPI LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *); NTSYSAPI LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG); NTSYSAPI LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT); NTSYSAPI ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *); NTSYSAPI LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG); NTSYSAPI LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT); NTSYSAPI LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT); NTSYSAPI LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG); NTSYSAPI NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR); #endif /* Threadpool functions */ NTSYSAPI NTSTATUS WINAPI TpAllocCleanupGroup(TP_CLEANUP_GROUP **); NTSYSAPI NTSTATUS WINAPI TpAllocPool(TP_POOL **,PVOID); NTSYSAPI NTSTATUS WINAPI TpAllocTimer(TP_TIMER **,PTP_TIMER_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); NTSYSAPI NTSTATUS WINAPI TpAllocWait(TP_WAIT **,PTP_WAIT_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); NTSYSAPI NTSTATUS WINAPI TpAllocWork(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); NTSYSAPI void WINAPI TpCallbackLeaveCriticalSectionOnCompletion(TP_CALLBACK_INSTANCE *,RTL_CRITICAL_SECTION *); NTSYSAPI NTSTATUS WINAPI TpCallbackMayRunLong(TP_CALLBACK_INSTANCE *); NTSYSAPI void WINAPI TpCallbackReleaseMutexOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE); NTSYSAPI void WINAPI TpCallbackReleaseSemaphoreOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE,DWORD); NTSYSAPI void WINAPI TpCallbackSetEventOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE); NTSYSAPI void WINAPI TpCallbackUnloadDllOnCompletion(TP_CALLBACK_INSTANCE *,HMODULE); NTSYSAPI void WINAPI TpDisassociateCallback(TP_CALLBACK_INSTANCE *); NTSYSAPI BOOL WINAPI TpIsTimerSet(TP_TIMER *); NTSYSAPI void WINAPI TpPostWork(TP_WORK *); NTSYSAPI void WINAPI TpReleaseCleanupGroup(TP_CLEANUP_GROUP *); NTSYSAPI void WINAPI TpReleaseCleanupGroupMembers(TP_CLEANUP_GROUP *,BOOL,PVOID); NTSYSAPI void WINAPI TpReleasePool(TP_POOL *); NTSYSAPI void WINAPI TpReleaseTimer(TP_TIMER *); NTSYSAPI void WINAPI TpReleaseWait(TP_WAIT *); NTSYSAPI void WINAPI TpReleaseWork(TP_WORK *); NTSYSAPI void WINAPI TpSetPoolMaxThreads(TP_POOL *,DWORD); NTSYSAPI BOOL WINAPI TpSetPoolMinThreads(TP_POOL *,DWORD); NTSYSAPI void WINAPI TpSetTimer(TP_TIMER *, LARGE_INTEGER *,LONG,LONG); NTSYSAPI void WINAPI TpSetWait(TP_WAIT *,HANDLE,LARGE_INTEGER *); NTSYSAPI NTSTATUS WINAPI TpSimpleTryPost(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); NTSYSAPI void WINAPI TpWaitForTimer(TP_TIMER *,BOOL); NTSYSAPI void WINAPI TpWaitForWait(TP_WAIT *,BOOL); NTSYSAPI void WINAPI TpWaitForWork(TP_WORK *,BOOL); /* Wine internal functions */ NTSYSAPI NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret, UINT disposition, BOOLEAN check_case ); NTSYSAPI NTSTATUS CDECL wine_unix_to_nt_file_name( const ANSI_STRING *name, UNICODE_STRING *nt ); /*********************************************************************** * Inline functions */ #define InitializeObjectAttributes(p,n,a,r,s) \ do { \ (p)->Length = sizeof(OBJECT_ATTRIBUTES); \ (p)->RootDirectory = r; \ (p)->Attributes = a; \ (p)->ObjectName = n; \ (p)->SecurityDescriptor = s; \ (p)->SecurityQualityOfService = NULL; \ } while (0) #define NtCurrentProcess() ((HANDLE)-1) #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length)) #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length)) #define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0) #define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0) #define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG)) #define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG)) #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length)) static inline BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit) { if (lpBits && ulBit < lpBits->SizeOfBitMap && lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31))) return TRUE; return FALSE; } /* These are implemented as __fastcall, so we can't let Winelib apps link with them */ static inline USHORT RtlUshortByteSwap(USHORT s) { return (s >> 8) | (s << 8); } static inline ULONG RtlUlongByteSwap(ULONG i) { #if defined(__i386__) && defined(__GNUC__) ULONG ret; __asm__("bswap %0" : "=r" (ret) : "0" (i) ); return ret; #else return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16)); #endif } /* list manipulation macros */ #define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le)) #define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0) #define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0) #define IsListEmpty(le) ((le)->Flink == (le)) #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) static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le) { PLIST_ENTRY f, b, e; e = le->Flink; f = le->Flink->Flink; b = le->Flink->Blink; f->Blink = b; b->Flink = f; if (e != le) e->Flink = e->Blink = NULL; return e; } static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le) { PLIST_ENTRY f, b, e; e = le->Blink; f = le->Blink->Flink; b = le->Blink->Blink; f->Blink = b; b->Flink = f; if (e != le) e->Flink = e->Blink = NULL; return e; } #ifdef __WINESRC__ /* FIXME: private structure for vm86 mode, stored in teb->GdiTebBatch */ typedef struct { DWORD dpmi_vif; DWORD vm86_pending; } WINE_VM86_TEB_INFO; static inline WINE_VM86_TEB_INFO *get_vm86_teb_info(void) { return (WINE_VM86_TEB_INFO *)&NtCurrentTeb()->GdiTebBatch; } /* The thread information for 16-bit threads */ /* NtCurrentTeb()->SubSystemTib points to this */ typedef struct { void *unknown; /* 00 unknown */ UNICODE_STRING *exe_name; /* 04 exe module name */ /* the following fields do not exist under Windows */ UNICODE_STRING exe_str; /* exe name string pointed to by exe_name */ CURDIR curdir; /* current directory */ WCHAR curdir_buffer[MAX_PATH]; } WIN16_SUBSYSTEM_TIB; #endif /* __WINESRC__ */ #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_WINTERNL_H */ ================================================ FILE: wine/windows/wintrust.h ================================================ /* * Copyright (C) 2004 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINTRUST_H #define __WINE_WINTRUST_H #include #include typedef struct WINTRUST_FILE_INFO_ { DWORD cbStruct; LPCWSTR pcwszFilePath; HANDLE hFile; GUID* pgKnownSubject; } WINTRUST_FILE_INFO, *PWINTRUST_FILE_INFO; typedef struct WINTRUST_CATALOG_INFO_ { DWORD cbStruct; DWORD dwCatalogVersion; LPCWSTR pcwszCatalogFilePath; LPCWSTR pcwszMemberTag; LPCWSTR pcwszMemberFilePath; HANDLE hMemberFile; BYTE* pbCalculatedFileHash; DWORD cbCalculatedFileHash; PCCTL_CONTEXT pcCatalogContext; } WINTRUST_CATALOG_INFO, *PWINTRUST_CATALOG_INFO; typedef struct WINTRUST_BLOB_INFO_ { DWORD cbStruct; GUID gSubject; LPCWSTR pcwszDisplayName; DWORD cbMemObject; BYTE* pbMemObject; DWORD cbMemSignedMsg; BYTE* pbMemSignedMsg; } WINTRUST_BLOB_INFO, *PWINTRUST_BLOB_INFO; typedef struct WINTRUST_SGNR_INFO_ { DWORD cbStruct; LPCWSTR pcwszDisplayName; CMSG_SIGNER_INFO* psSignerInfo; DWORD chStores; HCERTSTORE* pahStores; } WINTRUST_SGNR_INFO, *PWINTRUST_SGNR_INFO; typedef struct WINTRUST_CERT_INFO_ { DWORD cbStruct; LPCWSTR pcwszDisplayName; CERT_CONTEXT* psCertContext; DWORD chStores; HCERTSTORE* pahStores; DWORD dwFlags; FILETIME* psftVerifyAsOf; } WINTRUST_CERT_INFO, *PWINTRUST_CERT_INFO; #define WTCI_DONT_OPEN_STORES 0x00000001 #define WTCI_OPEN_ONLY_ROOT 0x00000002 /* dwUIChoice */ #define WTD_UI_ALL 1 #define WTD_UI_NONE 2 #define WTD_UI_NOBAD 3 #define WTD_UI_NOGOOD 4 /* fdwRevocationChecks */ #define WTD_REVOKE_NONE 0 #define WTD_REVOKE_WHOLECHAIN 1 /* dwUnionChoice */ #define WTD_CHOICE_FILE 1 #define WTD_CHOICE_CATALOG 2 #define WTD_CHOICE_BLOB 3 #define WTD_CHOICE_SIGNER 4 #define WTD_CHOICE_CERT 5 typedef struct _WINTRUST_DATA { DWORD cbStruct; LPVOID pPolicyCallbackData; LPVOID pSIPClientData; DWORD dwUIChoice; DWORD fdwRevocationChecks; DWORD dwUnionChoice; union { struct WINTRUST_FILE_INFO_* pFile; struct WINTRUST_CATALOG_INFO_* pCatalog; struct WINTRUST_BLOB_INFO_* pBlob; struct WINTRUST_SGNR_INFO_* pSgnr; struct WINTRUST_CERT_INFO_* pCert; } DUMMYUNIONNAME; DWORD dwStateAction; HANDLE hWVTStateData; WCHAR* pwszURLReference; DWORD dwProvFlags; DWORD dwUIContext; struct WINTRUST_SIGNATURE_SETTINGS_ *pSignatureSettings; } WINTRUST_DATA, *PWINTRUST_DATA; #define WTD_STATEACTION_IGNORE 0 #define WTD_STATEACTION_VERIFY 1 #define WTD_STATEACTION_CLOSE 2 #define WTD_STATEACTION_AUTO_CACHE 3 #define WTD_STATEACTION_AUTO_CACHE_FLUSH 4 #define WTD_PROV_FLAGS_MASK 0x0000ffff #define WTD_USE_IE4_TRUST_FLAG 0x00000001 #define WTD_NO_IE4_CHAIN_FLAG 0x00000002 #define WTD_NO_POLICY_USAGE_FLAG 0x00000004 #define WTD_REVOCATION_CHECK_NONE 0x00000010 #define WTD_REVOCATION_CHECK_END_CERT 0x00000020 #define WTD_REVOCATION_CHECK_CHAIN 0x00000040 #define WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000080 #define WTD_SAFER_FLAG 0x00000100 #define WTD_HASH_ONLY_FLAG 0x00000200 #define WTD_USE_DEFAULT_OSVER_CHECK 0x00000400 #define WTD_LIFETIME_SIGNING_FLAG 0x00000800 #define WTD_CACHE_ONLY_URL_RETRIEVAL 0x00001000 #define WTD_UICONTEXT_EXECUTE 0 #define WTD_UICONTEXT_INSTALL 1 typedef struct WINTRUST_SIGNATURE_SETTINGS_ { DWORD cbStruct; DWORD dwIndex; DWORD dwFlags; DWORD cSecondarySigs; DWORD dwVerifiedSigIndex; CERT_STRONG_SIGN_PARA *pCryptoPolicy; } WINTRUST_SIGNATURE_SETTINGS, *PWINTRUST_SIGNATURE_SETTINGS; #define WSS_VERIFY_SPECIFIC 0x00000001 #define WSS_GET_SECONDARY_SIG_COUNT 0x00000002 #define WSS_VERIFY_SEALING 0x00000004 #define WSS_INPUT_FLAG_MASK 0x00000007 #define WSS_OUT_SEALING_STATUS_VERIFIED 0x80000000 #define WSS_OUT_HAS_SEALING_INTENT 0x40000000 #define WSS_OUT_FILE_SUPPORTS_SEAL 0x20000000 #define WSS_OUTPUT_FLAG_MASK 0xe0000000 typedef struct _CRYPT_TRUST_REG_ENTRY { DWORD cbStruct; WCHAR *pwszDLLName; WCHAR *pwszFunctionName; } CRYPT_TRUST_REG_ENTRY, *PCRYPT_TRUST_REG_ENTRY; typedef struct _CRYPT_REGISTER_ACTIONID { DWORD cbStruct; CRYPT_TRUST_REG_ENTRY sInitProvider; CRYPT_TRUST_REG_ENTRY sObjectProvider; CRYPT_TRUST_REG_ENTRY sSignatureProvider; CRYPT_TRUST_REG_ENTRY sCertificateProvider; CRYPT_TRUST_REG_ENTRY sCertificatePolicyProvider; CRYPT_TRUST_REG_ENTRY sFinalPolicyProvider; CRYPT_TRUST_REG_ENTRY sTestPolicyProvider; CRYPT_TRUST_REG_ENTRY sCleanupProvider; } CRYPT_REGISTER_ACTIONID, *PCRYPT_REGISTER_ACTIONID; typedef struct _CRYPT_PROVIDER_REGDEFUSAGE { DWORD cbStruct; GUID *pgActionID; WCHAR *pwszDllName; char *pwszLoadCallbackDataFunctionName; char *pwszFreeCallbackDataFunctionName; } CRYPT_PROVIDER_REGDEFUSAGE, *PCRYPT_PROVIDER_REGDEFUSAGE; typedef struct _CRYPT_PROVUI_DATA { DWORD cbStruct; DWORD dwFinalError; WCHAR *pYesButtonText; WCHAR *pNoButtonText; WCHAR *pMoreInfoButtonText; WCHAR *pAdvancedLinkText; WCHAR *pCopyActionText; WCHAR *pCopyActionTextNoTS; WCHAR *pCopyActionTextNotSigned; } CRYPT_PROVUI_DATA, *PCRYPT_PROVUI_DATA; typedef struct _CRYPT_PROVIDER_CERT { DWORD cbStruct; PCCERT_CONTEXT pCert; BOOL fCommercial; BOOL fTrustedRoot; BOOL fSelfSigned; BOOL fTestCert; DWORD dwRevokedReason; DWORD dwConfidence; DWORD dwError; CTL_CONTEXT *pTrustListContext; BOOL fTrustListSignerCert; PCCTL_CONTEXT pCtlContext; DWORD dwCtlError; BOOL fIsCyclic; PCERT_CHAIN_ELEMENT pChainElement; } CRYPT_PROVIDER_CERT, *PCRYPT_PROVIDER_CERT; #define CERT_CONFIDENCE_SIG 0x10000000 #define CERT_CONFIDENCE_TIME 0x01000000 #define CERT_CONFIDENCE_TIMENEST 0x00100000 #define CERT_CONFIDENCE_AUTHIDEXT 0x00010000 #define CERT_CONFIDENCE_HYGIENE 0x00001000 #define CERT_CONFIDENCE_HIGHEST 0x11111000 typedef struct _CRYPT_PROVIDER_SGNR { DWORD cbStruct; FILETIME sftVerifyAsOf; DWORD csCertChain; CRYPT_PROVIDER_CERT *pasCertChain; DWORD dwSignerType; CMSG_SIGNER_INFO *psSigner; DWORD dwError; DWORD csCounterSigners; struct _CRYPT_PROVIDER_SGNR *pasCounterSigners; PCCERT_CHAIN_CONTEXT pChainContext; } CRYPT_PROVIDER_SGNR, *PCRYPT_PROVIDER_SGNR; #define SGNR_TYPE_TIMESTAMP 0x00000010 typedef struct _CRYPT_PROVIDER_PRIVDATA { DWORD cbStruct; GUID gProviderID; DWORD cbProvData; void *pvProvData; } CRYPT_PROVIDER_PRIVDATA, *PCRYPT_PROVIDER_PRIVDATA; struct _CRYPT_PROVIDER_DATA; #define TRUSTERROR_STEP_WVTPARAMS 0 #define TRUSTERROR_STEP_FILEIO 2 #define TRUSTERROR_STEP_SIP 3 #define TRUSTERROR_STEP_SIPSUBJINFO 5 #define TRUSTERROR_STEP_CATALOGFILE 6 #define TRUSTERROR_STEP_CERTSTORE 7 #define TRUSTERROR_STEP_MESSAGE 8 #define TRUSTERROR_STEP_MSG_SIGNERCOUNT 9 #define TRUSTERROR_STEP_MSG_INNERCNTTYPE 10 #define TRUSTERROR_STEP_MSG_INNERCNT 11 #define TRUSTERROR_STEP_MSG_STORE 12 #define TRUSTERROR_STEP_MSG_SIGNERINFO 13 #define TRUSTERROR_STEP_MSG_SIGNERCERT 14 #define TRUSTERROR_STEP_MSG_CERTCHAIN 15 #define TRUSTERROR_STEP_MSG_COUNTERSIGINFO 16 #define TRUSTERROR_STEP_MSG_COUNTERSIGCERT 17 #define TRUSTERROR_STEP_VERIFY_MSGHASH 18 #define TRUSTERROR_STEP_VERIFY_MSGINDIRECTDATA 19 #define TRUSTERROR_STEP_FINAL_WVTINIT 30 #define TRUSTERROR_STEP_FINAL_INITPROV 31 #define TRUSTERROR_STEP_FINAL_OBJPROV 32 #define TRUSTERROR_STEP_FINAL_SIGPROV 33 #define TRUSTERROR_STEP_FINAL_CERTPROV 34 #define TRUSTERROR_STEP_FINAL_CERTCHKPROV 35 #define TRUSTERROR_STEP_FINAL_POLICYPROV 36 #define TRUSTERROR_STEP_FINAL_UIPROV 37 #define TRUSTERROR_MAX_STEPS 38 typedef void * (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CPD_MEM_ALLOC)(DWORD cbSize); typedef void (WINAPI *PFN_CPD_MEM_FREE)(void *pvMem2Free); typedef BOOL (WINAPI *PFN_CPD_ADD_STORE)(struct _CRYPT_PROVIDER_DATA *pProvData, HCERTSTORE hStore2Add); typedef BOOL (WINAPI *PFN_CPD_ADD_SGNR)(struct _CRYPT_PROVIDER_DATA *pProvData, BOOL fCounterSigner, DWORD idxSigner, struct _CRYPT_PROVIDER_SGNR *pSgnr2Add); typedef BOOL (WINAPI *PFN_CPD_ADD_CERT)(struct _CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner, DWORD idxCounterSigner, PCCERT_CONTEXT pCert2Add); typedef BOOL (WINAPI *PFN_CPD_ADD_PRIVDATA)(struct _CRYPT_PROVIDER_DATA *pProvData, struct _CRYPT_PROVIDER_PRIVDATA *pPrivData2Add); typedef HRESULT (WINAPI *PFN_PROVIDER_INIT_CALL)( struct _CRYPT_PROVIDER_DATA *pProvData); typedef HRESULT (WINAPI *PFN_PROVIDER_OBJTRUST_CALL)( struct _CRYPT_PROVIDER_DATA *pProvData); typedef HRESULT (WINAPI *PFN_PROVIDER_SIGTRUST_CALL)( struct _CRYPT_PROVIDER_DATA *pProvData); typedef HRESULT (WINAPI *PFN_PROVIDER_CERTTRUST_CALL)( struct _CRYPT_PROVIDER_DATA *pProvData); typedef HRESULT (WINAPI *PFN_PROVIDER_FINALPOLICY_CALL)( struct _CRYPT_PROVIDER_DATA *pProvData); typedef HRESULT (WINAPI *PFN_PROVIDER_TESTFINALPOLICY_CALL)( struct _CRYPT_PROVIDER_DATA *pProvData); typedef HRESULT (WINAPI *PFN_PROVIDER_CLEANUP_CALL)( struct _CRYPT_PROVIDER_DATA *pProvData); typedef BOOL (WINAPI *PFN_PROVIDER_CERTCHKPOLICY_CALL)( struct _CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSignerChain, DWORD idxCounterSigner); typedef struct _CRYPT_PROVIDER_FUNCTIONS { DWORD cbStruct; PFN_CPD_MEM_ALLOC pfnAlloc; PFN_CPD_MEM_FREE pfnFree; PFN_CPD_ADD_STORE pfnAddStore2Chain; PFN_CPD_ADD_SGNR pfnAddSgnr2Chain; PFN_CPD_ADD_CERT pfnAddCert2Chain; PFN_CPD_ADD_PRIVDATA pfnAddPrivData2Chain; PFN_PROVIDER_INIT_CALL pfnInitialize; PFN_PROVIDER_OBJTRUST_CALL pfnObjectTrust; PFN_PROVIDER_SIGTRUST_CALL pfnSignatureTrust; PFN_PROVIDER_CERTTRUST_CALL pfnCertificateTrust; PFN_PROVIDER_FINALPOLICY_CALL pfnFinalPolicy; PFN_PROVIDER_CERTCHKPOLICY_CALL pfnCertCheckPolicy; PFN_PROVIDER_TESTFINALPOLICY_CALL pfnTestFinalPolicy; struct _CRYPT_PROVUI_FUNCS *psUIpfns; PFN_PROVIDER_CLEANUP_CALL pfnCleanupPolicy; } CRYPT_PROVIDER_FUNCTIONS, *PCRYPT_PROVIDER_FUNCTIONS; struct SIP_DISPATCH_INFO_; struct SIP_SUBJECTINFO_; struct SIP_INDIRECT_DATA_; typedef struct _PROVDATA_SIP { DWORD cbStruct; GUID gSubject; struct SIP_DISPATCH_INFO_ *pSip; struct SIP_DISPATCH_INFO_ *pCATSip; struct SIP_SUBJECTINFO_ *psSipSubjectInfo; struct SIP_SUBJECTINFO_ *psSipCATSubjectInfo; struct SIP_INDIRECT_DATA_ *psIndirectData; } PROVDATA_SIP, *PPROVDATA_SIP; typedef struct _CRYPT_PROVIDER_DATA { DWORD cbStruct; WINTRUST_DATA *pWintrustData; BOOL fOpenedFile; HWND hWndParent; GUID *pgActionID; HCRYPTPROV hProv; DWORD dwError; DWORD dwRegSecuritySettings; DWORD dwRegPolicySettings; CRYPT_PROVIDER_FUNCTIONS *psPfns; DWORD cdwTrustStepErrors; DWORD *padwTrustStepErrors; DWORD chStores; HCERTSTORE *pahStores; DWORD dwEncoding; HCRYPTMSG hMsg; DWORD csSigners; CRYPT_PROVIDER_SGNR *pasSigners; DWORD csProvPrivData; CRYPT_PROVIDER_PRIVDATA *pasProvPrivData; DWORD dwSubjectChoice; union { struct _PROVDATA_SIP *pPDSip; } DUMMYUNIONNAME; char *pszUsageOID; BOOL fRecallWithState; FILETIME sftSystemTime; char *pszCTLSignerUsageOID; DWORD dwProvFlags; DWORD dwFinalError; PCERT_USAGE_MATCH pRequestUsage; DWORD dwTrustPubSettings; DWORD dwUIStateFlags; struct _CRYPT_PROVIDER_SIGSTATE *pSigState; struct WINTRUST_SIGNATURE_SETTINGS_ *pSigSettings; } CRYPT_PROVIDER_DATA, *PCRYPT_PROVIDER_DATA; #define CPD_CHOICE_SIP 1 #define CPD_USE_NT5_CHAIN_FLAG 0x80000000 #define CPD_REVOCATION_CHECK_NONE 0x00010000 #define CPD_REVOCATION_CHECK_END_CERT 0x00020000 #define CPD_REVOCATION_CHECK_CHAIN 0x00040000 #define CPD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00080000 #define CPD_UISTATE_MODE_PROMPT 0x00000000 #define CPD_UISTATE_MODE_BLOCK 0x00000001 #define CPD_UISTATE_MODE_ALLOW 0x00000002 #define CPD_UISTATE_MODE_MASK 0x00000003 typedef struct _CRYPT_PROVIDER_SIGSTATE { DWORD cbStruct; HCRYPTMSG *rhSecondarySigs; HCRYPTMSG hPrimarySig; BOOL fFirstAttemptMade; BOOL fNoMoreSigs; DWORD cSecondarySigs; DWORD dwCurrentIndex; BOOL fSupportMultiSig; DWORD dwCryptoPolicySupport; DWORD iAttemptCount; BOOL fCheckedSealing; struct _SEALING_SIGNATURE_ATTRIBUTE *pSealingSignature; } CRYPT_PROVIDER_SIGSTATE, *PCRYPT_PROVIDER_SIGSTATE; /* Flags for dwCryptoPolicySupport */ #define WSS_OBJTRUST_SUPPORT 0x00000001 #define WSS_SIGTRUST_SUPPORT 0x00000002 #define WSS_CERTTRUST_SUPPORT 0x00000004 typedef BOOL (*PFN_PROVUI_CALL)(HWND hWndSecurityDialog, struct _CRYPT_PROVIDER_DATA *pProvData); typedef struct _CRYPT_PROVUI_FUNCS { DWORD cbStruct; CRYPT_PROVUI_DATA *psUIData; PFN_PROVUI_CALL pfnOnMoreInfoClick; PFN_PROVUI_CALL pfnOnMoreInfoClickDefault; PFN_PROVUI_CALL pfnOnAdvancedClick; PFN_PROVUI_CALL pfnOnAdvancedClickDefault; } CRYPT_PROVUI_FUNCS, *PCRYPT_PROVUI_FUNCS; #include #define WVT_OFFSETOF(t,f) ((ULONG)(offsetof(t, f))) #define WVT_ISINSTRUCT(t,s,f) (WVT_OFFSETOF(t,f) + sizeof(((t*)0)->f) <= (s)) #define WVT_IS_CBSTRUCT_GT_MEMBEROFFSET(t,s,f) WVT_ISINSTRUCT(t,s,f) #define WTPF_TRUSTTEST 0x00000020 #define WTPF_TESTCANBEVALID 0x00000080 #define WTPF_IGNOREEXPIRATION 0x00000100 #define WTPF_IGNOREREVOKATION 0x00000200 #define WTPF_OFFLINEOK_IND 0x00000400 #define WTPF_OFFLINEOK_COM 0x00000800 #define WTPF_OFFLINEOKNBU_IND 0x00001000 #define WTPF_OFFLINEOKNBU_COM 0x00002000 #define WTPF_VERIFY_V1_OFF 0x00010000 #define WTPF_IGNOREREVOCATIONONTS 0x00020000 #define WTPF_ALLOWONLYPERTRUST 0x00040000 #define WT_ADD_ACTION_ID_RET_RESULT_FLAG 1 #ifdef __cplusplus extern "C" { #endif #if defined(__GNUC__) #define WT_PROVIDER_CERTTRUST_FUNCTION (const WCHAR []) \ {'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} #elif defined(_MSC_VER) #define WT_PROVIDER_CERTTRUST_FUNCTION L"WintrustCertificateTrust" #else static const WCHAR WT_PROVIDER_CERTTRUST_FUNCTION[] = {'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}; #endif BOOL WINAPI WintrustAddActionID(GUID*,DWORD,CRYPT_REGISTER_ACTIONID*); BOOL WINAPI WintrustRemoveActionID(GUID*); BOOL WINAPI WintrustLoadFunctionPointers(GUID*,CRYPT_PROVIDER_FUNCTIONS*); BOOL WINAPI WintrustAddDefaultForUsage(const char*,CRYPT_PROVIDER_REGDEFUSAGE*); void WINAPI WintrustGetRegPolicyFlags(DWORD*); BOOL WINAPI WintrustSetRegPolicyFlags(DWORD); LONG WINAPI WinVerifyTrust(HWND,GUID*,LPVOID); HRESULT WINAPI WinVerifyTrustEx(HWND,GUID*,WINTRUST_DATA*); CRYPT_PROVIDER_CERT * WINAPI WTHelperGetProvCertFromChain( CRYPT_PROVIDER_SGNR *pSgnr, DWORD idxCert); CRYPT_PROVIDER_SGNR * WINAPI WTHelperGetProvSignerFromChain( CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner, DWORD idxCounterSigner); CRYPT_PROVIDER_DATA * WINAPI WTHelperProvDataFromStateData(HANDLE hStateData); CRYPT_PROVIDER_PRIVDATA * WINAPI WTHelperGetProvPrivateDataFromChain(CRYPT_PROVIDER_DATA *,GUID *); #define SPC_INDIRECT_DATA_OBJID "1.3.6.1.4.1.311.2.1.4" #define SPC_SP_AGENCY_INFO_OBJID "1.3.6.1.4.1.311.2.1.10" #define SPC_STATEMENT_TYPE_OBJID "1.3.6.1.4.1.311.2.1.11" #define SPC_SP_OPUS_INFO_OBJID "1.3.6.1.4.1.311.2.1.12" #define SPC_CERT_EXTENSIONS_OBJID "1.3.6.1.4.1.311.2.1.14" #define SPC_PE_IMAGE_DATA_OBJID "1.3.6.1.4.1.311.2.1.15" #define SPC_RAW_FILE_DATA_OBJID "1.3.6.1.4.1.311.2.1.18" #define SPC_STRUCTURED_STORAGE_DATA_OBJID "1.3.6.1.4.1.311.2.1.19" #define SPC_JAVA_CLASS_DATA_OBJID "1.3.6.1.4.1.311.2.1.20" #define SPC_INDIVIDUAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.21" #define SPC_COMMERCIAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.22" #define SPC_CAB_DATA_OBJID "1.3.6.1.4.1.311.2.1.25" #define SPC_GLUE_RDN_OBJID "1.3.6.1.4.1.311.2.1.25" #define SPC_MINIMAL_CRITERIA_OBJID "1.3.6.1.4.1.311.2.1.26" #define SPC_FINANCIAL_CRITERIA_OBJID "1.3.6.1.4.1.311.2.1.27" #define SPC_LINK_OBJID "1.3.6.1.4.1.311.2.1.28" #define SPC_SIGINFO_OBJID "1.3.6.1.4.1.311.2.1.30" #define CAT_NAMEVALUE_OBJID "1.3.6.1.4.1.311.12.2.1" #define CAT_MEMBERINFO_OBJID "1.3.6.1.4.1.311.12.2.2" #define SPC_SP_AGENCY_INFO_STRUCT ((LPCSTR) 2000) #define SPC_MINIMAL_CRITERIA_STRUCT ((LPCSTR) 2001) #define SPC_FINANCIAL_CRITERIA_STRUCT ((LPCSTR) 2002) #define SPC_INDIRECT_DATA_CONTENT_STRUCT ((LPCSTR) 2003) #define SPC_PE_IMAGE_DATA_STRUCT ((LPCSTR) 2004) #define SPC_LINK_STRUCT ((LPCSTR) 2005) #define SPC_STATEMENT_TYPE_STRUCT ((LPCSTR) 2006) #define SPC_SP_OPUS_INFO_STRUCT ((LPCSTR) 2007) #define SPC_CAB_DATA_STRUCT ((LPCSTR) 2008) #define SPC_JAVA_CLASS_DATA_STRUCT ((LPCSTR) 2009) #define SPC_SIGINFO_STRUCT ((LPCSTR) 2130) #define CAT_NAMEVALUE_STRUCT ((LPCSTR) 2221) #define CAT_MEMBERINFO_STRUCT ((LPCSTR) 2222) #define SPC_UUID_LENGTH 16 typedef BYTE SPC_UUID[SPC_UUID_LENGTH]; typedef struct _SPC_SERIALIZED_OBJECT { SPC_UUID ClassId; CRYPT_DATA_BLOB SerializedData; } SPC_SERIALIZED_OBJECT, *PSPC_SERIALIZED_OBJECT; typedef struct SPC_SIGINFO_ { DWORD dwSipVersion; GUID gSIPGuid; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwReserved4; DWORD dwReserved5; } SPC_SIGINFO, *PSPC_SIGINFO; #define SPC_URL_LINK_CHOICE 1 #define SPC_MONIKER_LINK_CHOICE 2 #define SPC_FILE_LINK_CHOICE 3 typedef struct SPC_LINK_ { DWORD dwLinkChoice; union { LPWSTR pwszUrl; SPC_SERIALIZED_OBJECT Moniker; LPWSTR pwszFile; } DUMMYUNIONNAME; } SPC_LINK, *PSPC_LINK; typedef struct _SPC_PE_IMAGE_DATA { CRYPT_BIT_BLOB Flags; PSPC_LINK pFile; } SPC_PE_IMAGE_DATA, *PSPC_PE_IMAGE_DATA; typedef struct _SPC_INDIRECT_DATA_CONTENT { CRYPT_ATTRIBUTE_TYPE_VALUE Data; CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm; CRYPT_HASH_BLOB Digest; } SPC_INDIRECT_DATA_CONTENT, *PSPC_INDIRECT_DATA_CONTENT; typedef struct _SPC_FINANCIAL_CRITERIA { BOOL fFinancialInfoAvailable; BOOL fMeetsCriteria; } SPC_FINANCIAL_CRITERIA, *PSPC_FINANCIAL_CRITERIA; typedef struct _SPC_IMAGE { struct SPC_LINK_ *pImageLink; CRYPT_DATA_BLOB Bitmap; CRYPT_DATA_BLOB Metafile; CRYPT_DATA_BLOB EnhancedMetafile; CRYPT_DATA_BLOB GifFile; } SPC_IMAGE, *PSPC_IMAGE; typedef struct _SPC_SP_AGENCY_INFO { struct SPC_LINK_ *pPolicyInformation; LPWSTR pwszPolicyDisplayText; PSPC_IMAGE pLogoImage; struct SPC_LINK_ *pLogoLink; } SPC_SP_AGENCY_INFO, *PSPC_SP_AGENCY_INFO; typedef struct _SPC_STATEMENT_TYPE { DWORD cKeyPurposeId; LPSTR *rgpszKeyPurposeId; } SPC_STATEMENT_TYPE, *PSPC_STATEMENT_TYPE; typedef struct _SPC_SP_OPUS_INFO { LPCWSTR pwszProgramName; struct SPC_LINK_ *pMoreInfo; struct SPC_LINK_ *pPublisherInfo; } SPC_SP_OPUS_INFO, *PSPC_SP_OPUS_INFO; typedef struct _CAT_NAMEVALUE { LPWSTR pwszTag; DWORD fdwFlags; CRYPT_DATA_BLOB Value; } CAT_NAMEVALUE, *PCAT_NAMEVALUE; typedef struct _CAT_MEMBERINFO { LPWSTR pwszSubjGuid; DWORD dwCertVersion; } CAT_MEMBERINFO, *PCAT_MEMBERINFO; /* PSDK protects the remaining defines with WT_DEFINE_ALL_APIS, but it's * defined by default. No need to protect against bad headers from old PSDKs. */ typedef struct _WIN_CERTIFICATE { DWORD dwLength; WORD wRevision; /* WIN_CERT_REVISION_xxx */ WORD wCertificateType; /* WIN_CERT_TYPE_xxx */ BYTE bCertificate[ANYSIZE_ARRAY]; } WIN_CERTIFICATE, *LPWIN_CERTIFICATE; #define WIN_CERT_REVISION_1_0 0x0100 #define WIN_CERT_REVISION_2_0 0x0200 #define WIN_CERT_TYPE_X509 0x0001 /* X.509 Certificate */ #define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002 /* PKCS SignedData */ #define WIN_CERT_TYPE_RESERVED_1 0x0003 /* Reserved */ #define WIN_CERT_TYPE_TS_STACK_SIGNED 0x0004 typedef LPVOID WIN_TRUST_SUBJECT; typedef struct _WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT { HANDLE hClientToken; GUID *SubjectType; WIN_TRUST_SUBJECT Subject; } WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT, *LPWIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT; typedef struct _WIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY { GUID *SubjectType; WIN_TRUST_SUBJECT Subject; } WIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY, *LPWIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY; typedef struct _WIN_TRUST_SUBJECT_FILE { HANDLE hFile; LPCWSTR lpPath; } WIN_TRUST_SUBJECT_FILE, *LPWIN_TRUST_SUBJECT_FILE; typedef struct _WIN_TRUST_SUBJECT_FILE_AND_DISPLAY { HANDLE hFile; LPCWSTR lpPath; LPCWSTR lpDisplayName; } WIN_TRUST_SUBJECT_FILE_AND_DISPLAY, *LPWIN_TRUST_SUBJECT_FILE_AND_DISPLAY; #define WIN_SPUB_ACTION_PUBLISHED_SOFTWARE \ { 0x64b9d180, 0x8da2, 0x11cf, { 0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb }} #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/winuser.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINUSER_ #define _WINUSER_ #if !defined(_USER32_) #define WINUSERAPI DECLSPEC_IMPORT #else #define WINUSERAPI #endif #ifndef RC_INVOKED #include #endif #include #ifdef __cplusplus extern "C" { #endif /* Define a bunch of callback types */ #if defined(STRICT) typedef INT_PTR (CALLBACK *DLGPROC)(HWND,UINT,WPARAM,LPARAM); typedef BOOL (CALLBACK *DRAWSTATEPROC)(HDC,LPARAM,WPARAM,int,int); typedef INT (CALLBACK *EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT); typedef INT (CALLBACK *EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT); typedef BOOL (CALLBACK *GRAYSTRINGPROC)(HDC,LPARAM,INT); typedef LRESULT (CALLBACK *HOOKPROC)(INT,WPARAM,LPARAM); typedef BOOL (CALLBACK *NAMEENUMPROCA)(LPSTR,LPARAM); typedef BOOL (CALLBACK *NAMEENUMPROCW)(LPWSTR,LPARAM); typedef BOOL (CALLBACK *PROPENUMPROCA)(HWND,LPCSTR,HANDLE); typedef BOOL (CALLBACK *PROPENUMPROCW)(HWND,LPCWSTR,HANDLE); typedef BOOL (CALLBACK *PROPENUMPROCEXA)(HWND,LPSTR,HANDLE,ULONG_PTR); typedef BOOL (CALLBACK *PROPENUMPROCEXW)(HWND,LPWSTR,HANDLE,ULONG_PTR); typedef VOID (CALLBACK *SENDASYNCPROC)(HWND,UINT,ULONG_PTR,LRESULT); typedef VOID (CALLBACK *TIMERPROC)(HWND,UINT,UINT_PTR,DWORD); typedef VOID (CALLBACK *WINEVENTPROC)(HWINEVENTHOOK,DWORD,HWND,LONG,LONG, DWORD,DWORD); typedef BOOL (CALLBACK *WNDENUMPROC)(HWND,LPARAM); #else typedef FARPROC DLGPROC; typedef FARPROC DRAWSTATEPROC; typedef FARPROC EDITWORDBREAKPROCA; typedef FARPROC EDITWORDBREAKPROCW; typedef FARPROC GRAYSTRINGPROC; typedef FARPROC HOOKPROC; typedef FARPROC NAMEENUMPROCA; typedef FARPROC NAMEENUMPROCW; typedef FARPROC PROPENUMPROCA; typedef FARPROC PROPENUMPROCW; typedef FARPROC PROPENUMPROCEXA; typedef FARPROC PROPENUMPROCEXW; typedef FARPROC SENDASYNCPROC; typedef FARPROC TIMERPROC; typedef FARPROC WINEVENTPROC; typedef FARPROC WNDENUMPROC; #endif /* STRICT */ typedef NAMEENUMPROCA WINSTAENUMPROCA; typedef NAMEENUMPROCA DESKTOPENUMPROCA; typedef NAMEENUMPROCW WINSTAENUMPROCW; typedef NAMEENUMPROCW DESKTOPENUMPROCW; typedef LRESULT (CALLBACK *WNDPROC)(HWND,UINT,WPARAM,LPARAM); DECL_WINELIB_TYPE_AW(DESKTOPENUMPROC) DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC) DECL_WINELIB_TYPE_AW(NAMEENUMPROC) DECL_WINELIB_TYPE_AW(PROPENUMPROC) DECL_WINELIB_TYPE_AW(PROPENUMPROCEX) DECL_WINELIB_TYPE_AW(WINSTAENUMPROC) typedef HANDLE HDWP; typedef void* HPOWERNOTIFY; #define UOI_FLAGS 1 #define UOI_NAME 2 #define UOI_TYPE 3 #define UOI_USER_SID 4 #define WSF_VISIBLE 1 #define DF_ALLOWOTHERACCOUNTHOOK 1 typedef struct tagUSEROBJECTFLAGS { BOOL fInherit; BOOL fReserved; DWORD dwFlags; } USEROBJECTFLAGS, *PUSEROBJECTFLAGS; typedef struct tagBSMINFO { UINT cbSize; HDESK hdesk; HWND hwnd; LUID luid; } BSMINFO, *PBSMINFO; /* Window stations */ #define WINSTA_ENUMDESKTOPS 0x0001 #define WINSTA_READATTRIBUTES 0x0002 #define WINSTA_ACCESSCLIPBOARD 0x0004 #define WINSTA_CREATEDESKTOP 0x0008 #define WINSTA_WRITEATTRIBUTES 0x0010 #define WINSTA_ACCESSGLOBALATOMS 0x0020 #define WINSTA_EXITWINDOWS 0x0040 #define WINSTA_ENUMERATE 0x0100 #define WINSTA_READSCREEN 0x0200 #define WINSTA_ALL_ACCESS 0x037f /* Desktops */ #define DESKTOP_READOBJECTS 0x0001 #define DESKTOP_CREATEWINDOW 0x0002 #define DESKTOP_CREATEMENU 0x0004 #define DESKTOP_HOOKCONTROL 0x0008 #define DESKTOP_JOURNALRECORD 0x0010 #define DESKTOP_JOURNALPLAYBACK 0x0020 #define DESKTOP_ENUMERATE 0x0040 #define DESKTOP_WRITEOBJECTS 0x0080 #define DESKTOP_SWITCHDESKTOP 0x0100 /* flags for FILTERKEYS dwFlags field */ #define FKF_AVAILABLE 0x00000002 #define FKF_CLICKON 0x00000040 #define FKF_FILTERKEYSON 0x00000001 #define FKF_HOTKEYACTIVE 0x00000004 #define FKF_HOTKEYSOUND 0x00000010 #define FKF_CONFIRMHOTKEY 0x00000008 #define FKF_INDICATOR 0x00000020 typedef struct tagFILTERKEYS { UINT cbSize; DWORD dwFlags; DWORD iWaitMSec; DWORD iDelayMSec; DWORD iRepeatMSec; DWORD iBounceMSec; } FILTERKEYS, *LPFILTERKEYS; /* flags for TOGGLEKEYS dwFlags field */ #define TKF_AVAILABLE 0x00000002 #define TKF_CONFIRMHOTKEY 0x00000008 #define TKF_HOTKEYACTIVE 0x00000004 #define TKF_HOTKEYSOUND 0x00000010 #define TKF_TOGGLEKEYSON 0x00000001 typedef struct tagTOGGLEKEYS { DWORD cbSize; DWORD dwFlags; } TOGGLEKEYS, *LPTOGGLEKEYS; /* flags for MOUSEKEYS dwFlags field */ #define MKF_AVAILABLE 0x00000002 #define MKF_CONFIRMHOTKEY 0x00000008 #define MKF_HOTKEYACTIVE 0x00000004 #define MKF_HOTKEYSOUND 0x00000010 #define MKF_INDICATOR 0x00000020 #define MKF_MOUSEKEYSON 0x00000001 #define MKF_MODIFIERS 0x00000040 #define MKF_REPLACENUMBERS 0x00000080 typedef struct tagMOUSEKEYS { UINT cbSize; DWORD dwFlags; DWORD iMaxSpeed; DWORD iTimeToMaxSpeed; DWORD iCtrlSpeed; DWORD dwReserved1; DWORD dwReserved2; } MOUSEKEYS, *LPMOUSEKEYS; /* struct and defines for GetMouseMovePointsEx */ #define GMMP_USE_DISPLAY_POINTS 1 #define GMMP_USE_HIGH_RESOLUTION_POINTS 2 typedef struct tagMOUSEMOVEPOINT { int x; int y; DWORD time; ULONG_PTR dwExtraInfo; } MOUSEMOVEPOINT,*PMOUSEMOVEPOINT,*LPMOUSEMOVEPOINT; /* flags for STICKYKEYS dwFlags field */ #define SKF_AUDIBLEFEEDBACK 0x00000040 #define SKF_AVAILABLE 0x00000002 #define SKF_CONFIRMHOTKEY 0x00000008 #define SKF_HOTKEYACTIVE 0x00000004 #define SKF_HOTKEYSOUND 0x00000010 #define SKF_INDICATOR 0x00000020 #define SKF_STICKYKEYSON 0x00000001 #define SKF_TRISTATE 0x00000080 #define SKF_TWOKEYSOFF 0x00000100 typedef struct tagSTICKYKEYS { DWORD cbSize; DWORD dwFlags; } STICKYKEYS, *LPSTICKYKEYS; /* flags for ACCESSTIMEOUT dwFlags field */ #define ATF_ONOFFFEEDBACK 0x00000002 #define ATF_AVAILABLE 0x00000004 #define ATF_TIMEOUTON 0x00000001 typedef struct tagACCESSTIMEOUT { UINT cbSize; DWORD dwFlags; DWORD iTimeOutMSec; } ACCESSTIMEOUT, *LPACCESSTIMEOUT; /* flags for SERIALKEYS dwFlags field */ #define SERKF_ACTIVE 0x00000008 #define SERKF_AVAILABLE 0x00000002 #define SERKF_INDICATOR 0x00000004 #define SERKF_SERIALKEYSON 0x00000001 typedef struct tagSERIALKEYSA { UINT cbSize; DWORD dwFlags; LPSTR lpszActivePort; LPSTR lpszPort; UINT iBaudRate; UINT iPortState; UINT iActive; } SERIALKEYSA, *LPSERIALKEYSA; typedef struct tagSERIALKEYSW { UINT cbSize; DWORD dwFlags; LPWSTR lpszActivePort; LPWSTR lpszPort; UINT iBaudRate; UINT iPortState; UINT iActive; } SERIALKEYSW,*LPSERIALKEYSW; DECL_WINELIB_TYPE_AW(SERIALKEYS) DECL_WINELIB_TYPE_AW(LPSERIALKEYS) /* flags for SOUNDSENTRY dwFlags field */ #define SSF_AVAILABLE 0x00000002 #define SSF_SOUNDSENTRYON 0x00000001 #define SSTF_BORDER 0x00000002 #define SSTF_CHARS 0x00000001 #define SSTF_DISPLAY 0x00000003 #define SSTF_NONE 0x00000000 #define SSGF_DISPLAY 0x00000003 #define SSGF_NONE 0x00000000 #define SSWF_DISPLAY 0x00000003 #define SSWF_NONE 0x00000000 #define SSWF_TITLE 0x00000001 #define SSWF_WINDOW 0x00000002 typedef struct tagSOUNDSENTRYA { UINT cbSize; DWORD dwFlags; DWORD iFSTextEffect; DWORD iFSTextEffectMSec; DWORD iFSTextEffectColorBits; DWORD iFSGrafEffect; DWORD iFSGrafEffectMSec; DWORD iFSGrafEffectColor; DWORD iWindowsEffect; DWORD iWindowsEffectMSec; LPSTR lpszWindowsEffectDLL; DWORD iWindowsEffectOrdinal; } SOUNDSENTRYA, *LPSOUNDSENTRYA; typedef struct tagSOUNDSENTRYW { UINT cbSize; DWORD dwFlags; DWORD iFSTextEffect; DWORD iFSTextEffectMSec; DWORD iFSTextEffectColorBits; DWORD iFSGrafEffect; DWORD iFSGrafEffectMSec; DWORD iFSGrafEffectColor; DWORD iWindowsEffect; DWORD iWindowsEffectMSec; LPWSTR lpszWindowsEffectDLL; DWORD iWindowsEffectOrdinal; } SOUNDSENTRYW, *LPSOUNDSENTRYW; DECL_WINELIB_TYPE_AW(SOUNDSENTRY) DECL_WINELIB_TYPE_AW(LPSOUNDSENTRY) /* flags for HIGHCONTRAST dwFlags field */ #define HCF_HIGHCONTRASTON 0x00000001 #define HCF_AVAILABLE 0x00000002 #define HCF_HOTKEYACTIVE 0x00000004 #define HCF_CONFIRMHOTKEY 0x00000008 #define HCF_HOTKEYSOUND 0x00000010 #define HCF_INDICATOR 0x00000020 #define HCF_HOTKEYAVAILABLE 0x00000040 typedef struct tagHIGHCONTRASTA { UINT cbSize; DWORD dwFlags; LPSTR lpszDefaultScheme; } HIGHCONTRASTA, *LPHIGHCONTRASTA; typedef struct tagHIGHCONTRASTW { UINT cbSize; DWORD dwFlags; LPWSTR lpszDefaultScheme; } HIGHCONTRASTW, *LPHIGHCONTRASTW; DECL_WINELIB_TYPE_AW(HIGHCONTRAST) DECL_WINELIB_TYPE_AW(LPHIGHCONTRAST) typedef struct tagEVENTMSG { UINT message; UINT paramL; UINT paramH; DWORD time; HWND hwnd; } EVENTMSG, *PEVENTMSG, *LPEVENTMSG; /* WH_KEYBOARD_LL structure */ typedef struct tagKBDLLHOOKSTRUCT { DWORD vkCode; DWORD scanCode; DWORD flags; DWORD time; ULONG_PTR dwExtraInfo; } KBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT; #define LLKHF_EXTENDED (KF_EXTENDED >> 8) #define LLKHF_INJECTED 0x00000010 #define LLKHF_ALTDOWN (KF_ALTDOWN >> 8) #define LLKHF_UP (KF_UP >> 8) /* WH_MOUSE_LL structure */ typedef struct tagMSLLHOOKSTRUCT { POINT pt; DWORD mouseData; DWORD flags; DWORD time; ULONG_PTR dwExtraInfo; } MSLLHOOKSTRUCT, *LPMSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT; #define LLMHF_INJECTED 0x00000001 /* Mouse hook structure */ typedef struct { POINT pt; HWND hwnd; UINT wHitTestCode; ULONG_PTR dwExtraInfo; } MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT; typedef struct { struct { /* MOUSEHOOKSTRUCT */ POINT pt; HWND hwnd; UINT wHitTestCode; ULONG_PTR dwExtraInfo; } DUMMYSTRUCTNAME; DWORD mouseData; } MOUSEHOOKSTRUCTEX, *PMOUSEHOOKSTRUCTEX, *LPMOUSEHOOKSTRUCTEX; /* Hardware hook structure */ typedef struct { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; } HARDWAREHOOKSTRUCT, *PHARDWAREHOOKSTRUCT, *LPHARDWAREHOOKSTRUCT; /* Debug hook structure */ typedef struct tagDEBUGHOOKINFO { DWORD idThread; DWORD idThreadInstaller; LPARAM lParam; WPARAM wParam; INT code; } DEBUGHOOKINFO, *PDEBUGHOOKINFO, *LPDEBUGHOOKINFO; #define HKL_PREV 0 #define HKL_NEXT 1 #define KLF_ACTIVATE 0x00000001 #define KLF_SUBSTITUTE_OK 0x00000002 #define KLF_UNLOADPREVIOUS 0x00000004 #define KLF_REORDER 0x00000008 #define KLF_REPLACELANG 0x00000010 #define KLF_NOTELLSHELL 0x00000080 #define KLF_SETFORPROCESS 0x00000100 #define KLF_SHIFTLOCK 0x00010000 #define KLF_RESET 0x40000000 #define KL_NAMELENGTH 9 typedef struct tagMOUSEINPUT { LONG dx; LONG dy; DWORD mouseData; DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo; } MOUSEINPUT, *PMOUSEINPUT, *LPMOUSEINPUT; typedef struct tagKEYBDINPUT { WORD wVk; WORD wScan; DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo; } KEYBDINPUT, *PKEYBDINPUT, *LPKEYBDINPUT; typedef struct tagHARDWAREINPUT { DWORD uMsg; WORD wParamL; WORD wParamH; } HARDWAREINPUT, *PHARDWAREINPUT, *LPHARDWAREINPUT; #define INPUT_MOUSE 0 #define INPUT_KEYBOARD 1 #define INPUT_HARDWARE 2 typedef struct tagINPUT { DWORD type; union { MOUSEINPUT mi; KEYBDINPUT ki; HARDWAREINPUT hi; } DUMMYUNIONNAME; } INPUT, *PINPUT, *LPINPUT; DECLARE_HANDLE(HRAWINPUT); typedef struct tagRAWINPUTDEVICELIST { HANDLE hDevice; DWORD dwType; } RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST; typedef struct tagRAWHID { DWORD dwSizeHid; DWORD dwCount; BYTE bRawData[1]; } RAWHID, *LPRAWHID; typedef struct tagRAWKEYBOARD { USHORT MakeCode; USHORT Flags; USHORT Reserved; USHORT VKey; UINT Message; ULONG ExtraInformation; } RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD; typedef struct tagRAWMOUSE { USHORT usFlags; union { ULONG ulButtons; struct { USHORT usButtonFlags; USHORT usButtonData; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; ULONG ulRawButtons; LONG lLastX; LONG lLastY; ULONG ulExtraInformation; } RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE; typedef struct tagRAWINPUTHEADER { DWORD dwType; DWORD dwSize; HANDLE hDevice; WPARAM wParam; } RAWINPUTHEADER, *PRAWINPUTHEADER; typedef struct tagRAWINPUT { RAWINPUTHEADER header; union { RAWMOUSE mouse; RAWKEYBOARD keyboard; RAWHID hid; } data; } RAWINPUT, *PRAWINPUT, *LPRAWINPUT; typedef struct tagRAWINPUTDEVICE { USHORT usUsagePage; USHORT usUsage; DWORD dwFlags; HWND hwndTarget; } RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE; typedef struct tagRID_DEVICE_INFO_MOUSE { DWORD dwId; DWORD dwNumberOfButtons; DWORD dwSampleRate; BOOL fHasHorizontalWheel; } RID_DEVICE_INFO_MOUSE, *PRID_DEVICE_INFO_MOUSE; typedef struct tagRID_DEVICE_INFO_KEYBOARD { DWORD dwType; DWORD dwSubType; DWORD dwKeyboardMode; DWORD dwNumberOfFunctionKeys; DWORD dwNumberOfIndicators; DWORD dwNumberOfKeysTotal; } RID_DEVICE_INFO_KEYBOARD, *PRID_DEVICE_INFO_KEYBOARD; typedef struct tagRID_DEVICE_INFO_HID { DWORD dwVendorId; DWORD dwProductId; DWORD dwVersionNumber; USHORT usUsagePage; USHORT usUsage; } RID_DEVICE_INFO_HID, *PRID_DEVICE_INFO_HID; typedef struct tagRID_DEVICE_INFO { DWORD cbSize; DWORD dwType; union { RID_DEVICE_INFO_MOUSE mouse; RID_DEVICE_INFO_KEYBOARD keyboard; RID_DEVICE_INFO_HID hid; } DUMMYUNIONNAME; } RID_DEVICE_INFO, *PRID_DEVICE_INFO, *LPRID_DEVICE_INFO; #define GET_RAWINPUT_CODE_WPARAM(wParam) ((wParam) & 0xff) #define RIM_INPUT 0 #define RIM_INPUTSINK 1 #define RIM_TYPEMOUSE 0 #define RIM_TYPEKEYBOARD 1 #define RIM_TYPEHID 2 #define RI_MOUSE_LEFT_BUTTON_DOWN 0x0001 #define RI_MOUSE_LEFT_BUTTON_UP 0x0002 #define RI_MOUSE_RIGHT_BUTTON_DOWN 0x0004 #define RI_MOUSE_RIGHT_BUTTON_UP 0x0008 #define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010 #define RI_MOUSE_MIDDLE_BUTTON_UP 0x0020 #define RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN #define RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP #define RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN #define RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP #define RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN #define RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP #define RI_MOUSE_BUTTON_4_DOWN 0x0040 #define RI_MOUSE_BUTTON_4_UP 0x0080 #define RI_MOUSE_BUTTON_5_DOWN 0x0100 #define RI_MOUSE_BUTTON_5_UP 0x0200 #define RI_MOUSE_WHEEL 0x0400 #define RI_MOUSE_HORIZONTAL_WHEEL 0x0800 #define MOUSE_MOVE_RELATIVE 0x00 #define MOUSE_MOVE_ABSOLUTE 0x01 #define MOUSE_VIRTUAL_DESKTOP 0x02 #define MOUSE_ATTRIBUTES_CHANGED 0x04 #define MOUSE_MOVE_NOCOALESCE 0x08 #define KEYBOARD_OVERRUN_MAKE_CODE 0xFF #define RI_KEY_MAKE 0x00 #define RI_KEY_BREAK 0x01 #define RI_KEY_E0 0x02 #define RI_KEY_E1 0x04 #define RI_KEY_TERMSRV_SET_LED 0x08 #define RI_KEY_TERMSRV_SHADOW 0x10 #define RAWINPUT_ALIGN(x) (((x) + sizeof(DWORD_PTR) - 1) & ~(sizeof(DWORD_PTR) - 1)) #define NEXTRAWINPUTBLOCK(ptr) ((PRAWINPUT)RAWINPUT_ALIGN((ULONG_PTR)((PBYTE)(ptr) + (ptr)->header.dwSize))) #define RID_INPUT 0x10000003 #define RID_HEADER 0x10000005 #define RIDI_PREPARSEDDATA 0x20000005 #define RIDI_DEVICENAME 0x20000007 #define RIDI_DEVICEINFO 0x2000000b #define RIDEV_REMOVE 0x00000001 #define RIDEV_EXCLUDE 0x00000010 #define RIDEV_PAGEONLY 0x00000020 #define RIDEV_NOLEGACY 0x00000030 #define RIDEV_INPUTSINK 0x00000100 #define RIDEV_CAPTUREMOUSE 0x00000200 #define RIDEV_NOHOTKEYS 0x00000200 #define RIDEV_APPKEYS 0x00000400 #define RIDEV_EXINPUTSINK 0x00001000 #define RIDEV_DEVNOTIFY 0x00002000 #define RIDEV_EXMODEMASK 0x000000F0 #define RIDEV_EXMODE(mode) ((mode) & RIDEV_EXMODEMASK) typedef struct tagGESTURECONFIG { DWORD dwID; DWORD dwWant; DWORD dwBlock; } GESTURECONFIG, *PGESTURECONFIG; #define GIDC_ARRIVAL 1 #define GIDC_REMOVAL 2 #if (_WIN32_WINNT >= 0x0601) #define GET_DEVICE_CHANGE_WPARAM(wParam) (LOWORD(wParam)) #elif (_WIN32_WINNT >= 0x0501) #define GET_DEVICE_CHANGE_LPARAM(lParam) (LOWORD(lParam)) #endif typedef struct tagGUITHREADINFO { DWORD cbSize; DWORD flags; HWND hwndActive; HWND hwndFocus; HWND hwndCapture; HWND hwndMenuOwner; HWND hwndMoveSize; HWND hwndCaret; RECT rcCaret; } GUITHREADINFO, *PGUITHREADINFO, *LPGUITHREADINFO; #define GUI_CARETBLINKING 0x00000001 #define GUI_INMOVESIZE 0x00000002 #define GUI_INMENUMODE 0x00000004 #define GUI_SYSTEMMENUMODE 0x00000008 #define GUI_POPUPMENUMODE 0x00000010 #define GUI_16BITTASK 0x00000020 /***** Dialogs *****/ /* Gcc on Solaris has a version of this that we don't care about */ #undef FSHIFT #define FVIRTKEY TRUE /* Assumed to be == TRUE */ #define FNOINVERT 0x02 #define FSHIFT 0x04 #define FCONTROL 0x08 #define FALT 0x10 typedef struct tagANIMATIONINFO { UINT cbSize; INT iMinAnimate; } ANIMATIONINFO, *LPANIMATIONINFO; typedef struct tagNMHDR { HWND hwndFrom; UINT_PTR idFrom; UINT code; } NMHDR, *LPNMHDR; typedef struct tagDRAWTEXTPARAMS { UINT cbSize; INT iTabLength; INT iLeftMargin; INT iRightMargin; UINT uiLengthDrawn; } DRAWTEXTPARAMS,*LPDRAWTEXTPARAMS; typedef struct { LPARAM lParam; WPARAM wParam; UINT message; HWND hwnd; } CWPSTRUCT, *PCWPSTRUCT, *LPCWPSTRUCT; typedef struct { LRESULT lResult; LPARAM lParam; WPARAM wParam; DWORD message; HWND hwnd; } CWPRETSTRUCT, *PCWPRETSTRUCT, *LPCWPRETSTRUCT; typedef struct tagWINDOWPLACEMENT { UINT length; UINT flags; UINT showCmd; POINT ptMinPosition; POINT ptMaxPosition; RECT rcNormalPosition; } WINDOWPLACEMENT, *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT; /* WINDOWPLACEMENT flags */ #define WPF_SETMINPOSITION 0x0001 #define WPF_RESTORETOMAXIMIZED 0x0002 /***** Dialogs *****/ #define IS_INTRESOURCE(x) (((ULONG_PTR)(x) >> 16) == 0) #define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i))) #define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i))) #ifndef RC_INVOKED # ifdef WINE_NO_UNICODE_MACROS /* force using a cast */ # define MAKEINTRESOURCE(i) ((ULONG_PTR)((WORD)(i))) # else # define MAKEINTRESOURCE WINELIB_NAME_AW(MAKEINTRESOURCE) # endif #endif /* Predefined resource types */ #define RT_CURSOR MAKEINTRESOURCE(1) #define RT_BITMAP MAKEINTRESOURCE(2) #define RT_ICON MAKEINTRESOURCE(3) #define RT_MENU MAKEINTRESOURCE(4) #define RT_DIALOG MAKEINTRESOURCE(5) #define RT_STRING MAKEINTRESOURCE(6) #define RT_FONTDIR MAKEINTRESOURCE(7) #define RT_FONT MAKEINTRESOURCE(8) #define RT_ACCELERATOR MAKEINTRESOURCE(9) #define RT_RCDATA MAKEINTRESOURCE(10) #define RT_MESSAGETABLE MAKEINTRESOURCE(11) #define RT_GROUP_CURSOR MAKEINTRESOURCE(12) #define RT_GROUP_ICON MAKEINTRESOURCE(14) #define RT_VERSION MAKEINTRESOURCE(16) #define RT_DLGINCLUDE MAKEINTRESOURCE(17) #define RT_PLUGPLAY MAKEINTRESOURCE(19) #define RT_VXD MAKEINTRESOURCE(20) #define RT_ANICURSOR MAKEINTRESOURCE(21) #define RT_ANIICON MAKEINTRESOURCE(22) #define RT_HTML MAKEINTRESOURCE(23) #ifdef RC_INVOKED #define RT_MANIFEST 24 #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 #define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2 #define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3 #define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID 1 #define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID 16 #else #define RT_MANIFEST MAKEINTRESOURCE(24) #define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1) #define ISOLATIONAWARE_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(2) #define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3) #define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1) #define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(16) #endif /* cbWndExtra bytes for dialog class */ #define DLGWINDOWEXTRA 30 /* Dialog messages */ #define DM_GETDEFID (WM_USER+0) #define DM_SETDEFID (WM_USER+1) #define DM_REPOSITION (WM_USER+2) #define DC_HASDEFID 0x534b /* Bit flags for DRAWITEMSTRUCT.CtlType */ #define ODT_MENU 1 #define ODT_LISTBOX 2 #define ODT_COMBOBOX 3 #define ODT_BUTTON 4 #define ODT_STATIC 5 /* Bit flags for DRAWITEMSTRUCT.itemAction */ #define ODA_DRAWENTIRE 0x1 #define ODA_SELECT 0x2 #define ODA_FOCUS 0x4 /* Bit flags for DRAWITEMSTRUCT.itemState */ #define ODS_SELECTED 0x0001 /* Selected */ #define ODS_GRAYED 0x0002 /* Grayed (Menus only) */ #define ODS_DISABLED 0x0004 /* Disabled */ #define ODS_CHECKED 0x0008 /* Checked (Menus only) */ #define ODS_FOCUS 0x0010 /* Has focus */ #define ODS_DEFAULT 0x0020 /* Default */ #define ODS_HOTLIGHT 0x0040 /* Highlighted when under mouse */ #define ODS_INACTIVE 0x0080 /* Inactive */ #define ODS_NOACCEL 0x0100 /* No keyboard accelerator */ #define ODS_NOFOCUSRECT 0x0200 /* No focus rectangle */ #define ODS_COMBOBOXEDIT 0x1000 /* Edit of a combo box */ #ifndef NOCOLOR #define COLOR_SCROLLBAR 0 #define COLOR_BACKGROUND 1 #define COLOR_ACTIVECAPTION 2 #define COLOR_INACTIVECAPTION 3 #define COLOR_MENU 4 #define COLOR_WINDOW 5 #define COLOR_WINDOWFRAME 6 #define COLOR_MENUTEXT 7 #define COLOR_WINDOWTEXT 8 #define COLOR_CAPTIONTEXT 9 #define COLOR_ACTIVEBORDER 10 #define COLOR_INACTIVEBORDER 11 #define COLOR_APPWORKSPACE 12 #define COLOR_HIGHLIGHT 13 #define COLOR_HIGHLIGHTTEXT 14 #define COLOR_BTNFACE 15 #define COLOR_BTNSHADOW 16 #define COLOR_GRAYTEXT 17 #define COLOR_BTNTEXT 18 #define COLOR_INACTIVECAPTIONTEXT 19 #define COLOR_BTNHIGHLIGHT 20 /* win95 colors */ #define COLOR_3DDKSHADOW 21 #define COLOR_3DLIGHT 22 #define COLOR_INFOTEXT 23 #define COLOR_INFOBK 24 #define COLOR_DESKTOP COLOR_BACKGROUND #define COLOR_3DFACE COLOR_BTNFACE #define COLOR_3DSHADOW COLOR_BTNSHADOW #define COLOR_3DHIGHLIGHT COLOR_BTNHIGHLIGHT #define COLOR_3DHILIGHT COLOR_BTNHIGHLIGHT #define COLOR_BTNHILIGHT COLOR_BTNHIGHLIGHT /* win98 colors */ #define COLOR_ALTERNATEBTNFACE 25 /* undocumented, constant name unknown */ #define COLOR_HOTLIGHT 26 #define COLOR_GRADIENTACTIVECAPTION 27 #define COLOR_GRADIENTINACTIVECAPTION 28 /* win2k/xp colors */ #define COLOR_MENUHILIGHT 29 #define COLOR_MENUBAR 30 /* WM_CTLCOLOR values */ #define CTLCOLOR_MSGBOX 0 #define CTLCOLOR_EDIT 1 #define CTLCOLOR_LISTBOX 2 #define CTLCOLOR_BTN 3 #define CTLCOLOR_DLG 4 #define CTLCOLOR_SCROLLBAR 5 #define CTLCOLOR_STATIC 6 WINUSERAPI COLORREF WINAPI GetSysColor(INT); WINUSERAPI BOOL WINAPI SetSysColors(INT,const INT*,const COLORREF*); #endif /* NOCOLOR */ /* IMESTATUS type */ #define EMSIS_COMPOSITIONSTRING 1 /* IMESTATUS type specific data */ #define EIMES_GETCOMPSTRATONCE 0x0001 #define EIMES_CANCELCOMPSTRINFOCUS 0x0002 #define EIMES_COMPLETECOMPSTRKILLFOCUS 0x0004 /* EDITWORDBREAKPROC code values */ #define WB_LEFT 0 #define WB_RIGHT 1 #define WB_ISDELIMITER 2 /* Edit control notification codes */ #define EN_SETFOCUS 0x0100 #define EN_KILLFOCUS 0x0200 #define EN_CHANGE 0x0300 #define EN_UPDATE 0x0400 #define EN_ERRSPACE 0x0500 #define EN_MAXTEXT 0x0501 #define EN_HSCROLL 0x0601 #define EN_VSCROLL 0x0602 /* New since win95 : EM_SETMARGIN parameters */ #define EC_LEFTMARGIN 0x0001 #define EC_RIGHTMARGIN 0x0002 #define EC_USEFONTINFO 0xffff /* GetSystemMetrics() codes */ #define SM_CXSCREEN 0 #define SM_CYSCREEN 1 #define SM_CXVSCROLL 2 #define SM_CYHSCROLL 3 #define SM_CYCAPTION 4 #define SM_CXBORDER 5 #define SM_CYBORDER 6 #define SM_CXDLGFRAME 7 #define SM_CYDLGFRAME 8 #define SM_CYVTHUMB 9 #define SM_CXHTHUMB 10 #define SM_CXICON 11 #define SM_CYICON 12 #define SM_CXCURSOR 13 #define SM_CYCURSOR 14 #define SM_CYMENU 15 #define SM_CXFULLSCREEN 16 #define SM_CYFULLSCREEN 17 #define SM_CYKANJIWINDOW 18 #define SM_MOUSEPRESENT 19 #define SM_CYVSCROLL 20 #define SM_CXHSCROLL 21 #define SM_DEBUG 22 #define SM_SWAPBUTTON 23 #define SM_RESERVED1 24 #define SM_RESERVED2 25 #define SM_RESERVED3 26 #define SM_RESERVED4 27 #define SM_CXMIN 28 #define SM_CYMIN 29 #define SM_CXSIZE 30 #define SM_CYSIZE 31 #define SM_CXFRAME 32 #define SM_CYFRAME 33 #define SM_CXMINTRACK 34 #define SM_CYMINTRACK 35 #define SM_CXDOUBLECLK 36 #define SM_CYDOUBLECLK 37 #define SM_CXICONSPACING 38 #define SM_CYICONSPACING 39 #define SM_MENUDROPALIGNMENT 40 #define SM_PENWINDOWS 41 #define SM_DBCSENABLED 42 #define SM_CMOUSEBUTTONS 43 #define SM_CXFIXEDFRAME SM_CXDLGFRAME #define SM_CYFIXEDFRAME SM_CYDLGFRAME #define SM_CXSIZEFRAME SM_CXFRAME #define SM_CYSIZEFRAME SM_CYFRAME #define SM_SECURE 44 #define SM_CXEDGE 45 #define SM_CYEDGE 46 #define SM_CXMINSPACING 47 #define SM_CYMINSPACING 48 #define SM_CXSMICON 49 #define SM_CYSMICON 50 #define SM_CYSMCAPTION 51 #define SM_CXSMSIZE 52 #define SM_CYSMSIZE 53 #define SM_CXMENUSIZE 54 #define SM_CYMENUSIZE 55 #define SM_ARRANGE 56 #define SM_CXMINIMIZED 57 #define SM_CYMINIMIZED 58 #define SM_CXMAXTRACK 59 #define SM_CYMAXTRACK 60 #define SM_CXMAXIMIZED 61 #define SM_CYMAXIMIZED 62 #define SM_NETWORK 63 #define SM_CLEANBOOT 67 #define SM_CXDRAG 68 #define SM_CYDRAG 69 #define SM_SHOWSOUNDS 70 #define SM_CXMENUCHECK 71 #define SM_CYMENUCHECK 72 #define SM_SLOWMACHINE 73 #define SM_MIDEASTENABLED 74 #define SM_MOUSEWHEELPRESENT 75 #define SM_XVIRTUALSCREEN 76 #define SM_YVIRTUALSCREEN 77 #define SM_CXVIRTUALSCREEN 78 #define SM_CYVIRTUALSCREEN 79 #define SM_CMONITORS 80 #define SM_SAMEDISPLAYFORMAT 81 #define SM_IMMENABLED 82 #define SM_CXFOCUSBORDER 83 #define SM_CYFOCUSBORDER 84 #define SM_TABLETPC 86 #define SM_MEDIACENTER 87 #define SM_STARTER 88 #define SM_SERVERR2 89 #define SM_CMETRICS 90 #define SM_MOUSEHORIZONTALWHEELPRESENT 91 #define SM_CXPADDEDBORDER 92 #define SM_REMOTESESSION 0x1000 #define SM_SHUTTINGDOWN 0x2000 #define SM_REMOTECONTROL 0x2001 #define SM_CARETBLINKINGENABLED 0x2002 #define PMB_ACTIVE 0x00000001 /* wParam for WM_POWERBROADCAST */ #define PBT_APMQUERYSUSPEND 0x0000 #define PBT_APMQUERYSTANDBY 0x0001 #define PBT_APMQUERYSUSPENDFAILED 0x0002 #define PBT_APMQUERYSTANDBYFAILED 0x0003 #define PBT_APMSUSPEND 0x0004 #define PBT_APMSTANDBY 0x0005 #define PBT_APMRESUMECRITICAL 0x0006 #define PBT_APMRESUMESUSPEND 0x0007 #define PBT_APMRESUMESTANDBY 0x0008 #define PBT_APMBATTERYLOW 0x0009 #define PBT_APMPOWERSTATUSCHANGE 0x000A #define PBT_APMOEMEVENT 0x000B #define PBT_APMRESUMEAUTOMATIC 0x0012 #define PBTF_APMRESUMEFROMFAILURE 0x00000001 /* MsgWaitForMultipleObjectsEx flags */ #define MWMO_WAITALL 0x0001 #define MWMO_ALERTABLE 0x0002 #define MWMO_INPUTAVAILABLE 0x0004 /* WM_GETDLGCODE values */ #define DLGC_WANTARROWS 0x0001 #define DLGC_WANTTAB 0x0002 #define DLGC_WANTALLKEYS 0x0004 #define DLGC_WANTMESSAGE 0x0004 #define DLGC_HASSETSEL 0x0008 #define DLGC_DEFPUSHBUTTON 0x0010 #define DLGC_UNDEFPUSHBUTTON 0x0020 #define DLGC_RADIOBUTTON 0x0040 #define DLGC_WANTCHARS 0x0080 #define DLGC_STATIC 0x0100 #define DLGC_BUTTON 0x2000 /* Used for EnumDisplaySettingsEx */ #define ENUM_CURRENT_SETTINGS ((DWORD) -1) #define ENUM_REGISTRY_SETTINGS ((DWORD) -2) #define EDS_RAWMODE 0x00000002 #define EDS_ROTATEDMODE 0x00000004 /* Used for PrintWindow */ #define PW_CLIENTONLY 0x00000001 /****** Window classes ******/ typedef struct tagCREATESTRUCTA { LPVOID lpCreateParams; HINSTANCE hInstance; HMENU hMenu; HWND hwndParent; INT cy; INT cx; INT y; INT x; LONG style; LPCSTR lpszName; LPCSTR lpszClass; DWORD dwExStyle; } CREATESTRUCTA, *LPCREATESTRUCTA; typedef struct tagCREATESTRUCTW { LPVOID lpCreateParams; HINSTANCE hInstance; HMENU hMenu; HWND hwndParent; INT cy; INT cx; INT y; INT x; LONG style; LPCWSTR lpszName; LPCWSTR lpszClass; DWORD dwExStyle; } CREATESTRUCTW, *LPCREATESTRUCTW; DECL_WINELIB_TYPE_AW(CREATESTRUCT) DECL_WINELIB_TYPE_AW(LPCREATESTRUCT) typedef struct tagPAINTSTRUCT { HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved[32]; } PAINTSTRUCT, *PPAINTSTRUCT, *LPPAINTSTRUCT; typedef struct tagCLIENTCREATESTRUCT { HMENU hWindowMenu; UINT idFirstChild; } CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT; typedef struct tagMDICREATESTRUCTA { LPCSTR szClass; LPCSTR szTitle; HINSTANCE hOwner; INT x; INT y; INT cx; INT cy; DWORD style; LPARAM lParam; } MDICREATESTRUCTA, *LPMDICREATESTRUCTA; typedef struct tagMDICREATESTRUCTW { LPCWSTR szClass; LPCWSTR szTitle; HINSTANCE hOwner; INT x; INT y; INT cx; INT cy; DWORD style; LPARAM lParam; } MDICREATESTRUCTW, *LPMDICREATESTRUCTW; DECL_WINELIB_TYPE_AW(MDICREATESTRUCT) DECL_WINELIB_TYPE_AW(LPMDICREATESTRUCT) #define MDITILE_VERTICAL 0x0000 #define MDITILE_HORIZONTAL 0x0001 #define MDITILE_SKIPDISABLED 0x0002 #define MDITILE_ZORDER 0x0004 #define MDIS_ALLCHILDSTYLES 0x0001 typedef struct tagSTYLESTRUCT { DWORD styleOld; DWORD styleNew; } STYLESTRUCT, *LPSTYLESTRUCT; #define WC_DIALOG MAKEINTATOM(0x8002) /* Offsets for GetWindowLong() and GetWindowWord() */ #define GWL_EXSTYLE (-20) #define GWL_STYLE (-16) #if !defined _WIN64 && !defined __WINESRC__ # define GWL_USERDATA (-21) # define GWL_ID (-12) # define GWL_HWNDPARENT (-8) # define GWL_HINSTANCE (-6) # define GWL_WNDPROC (-4) # define DWL_MSGRESULT 0 # define DWL_DLGPROC 4 # define DWL_USER 8 #endif /* _WIN64 && __WINESRC__ */ /* Offsets for GetWindowLongPtr() and SetWindowLongPtr() */ #define GWLP_USERDATA (-21) #define GWLP_ID (-12) #define GWLP_HWNDPARENT (-8) #define GWLP_HINSTANCE (-6) #define GWLP_WNDPROC (-4) #define DWLP_MSGRESULT 0 #define DWLP_DLGPROC DWLP_MSGRESULT + sizeof(LRESULT) #define DWLP_USER DWLP_DLGPROC + sizeof(DLGPROC) /* GetWindow() constants */ #define GW_HWNDFIRST 0 #define GW_HWNDLAST 1 #define GW_HWNDNEXT 2 #define GW_HWNDPREV 3 #define GW_OWNER 4 #define GW_CHILD 5 /* GetAncestor() constants */ #define GA_PARENT 1 #define GA_ROOT 2 #define GA_ROOTOWNER 3 /* WM_GETMINMAXINFO struct */ typedef struct tagMINMAXINFO { POINT ptReserved; POINT ptMaxSize; POINT ptMaxPosition; POINT ptMinTrackSize; POINT ptMaxTrackSize; } MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO; /* RedrawWindow() flags */ #define RDW_INVALIDATE 0x0001 #define RDW_INTERNALPAINT 0x0002 #define RDW_ERASE 0x0004 #define RDW_VALIDATE 0x0008 #define RDW_NOINTERNALPAINT 0x0010 #define RDW_NOERASE 0x0020 #define RDW_NOCHILDREN 0x0040 #define RDW_ALLCHILDREN 0x0080 #define RDW_UPDATENOW 0x0100 #define RDW_ERASENOW 0x0200 #define RDW_FRAME 0x0400 #define RDW_NOFRAME 0x0800 /* debug flags */ #define DBGFILL_ALLOC 0xfd #define DBGFILL_FREE 0xfb #define DBGFILL_BUFFER 0xf9 #define DBGFILL_STACK 0xf7 /* WM_WINDOWPOSCHANGING/CHANGED struct */ typedef struct tagWINDOWPOS { HWND hwnd; HWND hwndInsertAfter; INT x; INT y; INT cx; INT cy; UINT flags; } WINDOWPOS, *PWINDOWPOS, *LPWINDOWPOS; /* WM_NCCALCSIZE parameter structure */ typedef struct { RECT rgrc[3]; WINDOWPOS *lppos; } NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS; #define PRF_CHECKVISIBLE __MSABI_LONG(0x00000001) #define PRF_NONCLIENT __MSABI_LONG(0x00000002) #define PRF_CLIENT __MSABI_LONG(0x00000004) #define PRF_ERASEBKGND __MSABI_LONG(0x00000008) #define PRF_CHILDREN __MSABI_LONG(0x00000010) #define PRF_OWNED __MSABI_LONG(0x00000020) /* Offsets for GetClassLong() and GetClassWord() */ #if !defined _WIN64 && !defined __WINESRC__ # define GCL_MENUNAME (-8) # define GCL_HBRBACKGROUND (-10) # define GCL_HCURSOR (-12) # define GCL_HICON (-14) # define GCL_HMODULE (-16) # define GCL_WNDPROC (-24) # define GCL_HICONSM (-34) #endif /* _WIN64 && __WINESRC__ */ #define GCL_CBWNDEXTRA (-18) #define GCL_CBCLSEXTRA (-20) #define GCL_STYLE (-26) #define GCW_ATOM (-32) #define GCLP_MENUNAME (-8) #define GCLP_HBRBACKGROUND (-10) #define GCLP_HCURSOR (-12) #define GCLP_HICON (-14) #define GCLP_HMODULE (-16) #define GCLP_WNDPROC (-24) #define GCLP_HICONSM (-34) /* BroadcastSystemMessage flags */ #define BSM_ALLCOMPONENTS 0x00000000 #define BSM_VXDS 0x00000001 #define BSM_NETDRIVER 0x00000002 #define BSM_INSTALLABLEDRIVERS 0x00000004 #define BSM_APPLICATIONS 0x00000008 #define BSM_ALLDESKTOPS 0x00000010 #define BSF_QUERY 0x00000001 #define BSF_IGNORECURRENTTASK 0x00000002 #define BSF_FLUSHDISK 0x00000004 #define BSF_NOHANG 0x00000008 #define BSF_POSTMESSAGE 0x00000010 #define BSF_FORCEIFHUNG 0x00000020 #define BSF_NOTIMEOUTIFNOTHUNG 0x00000040 #define BSF_ALLOWSFW 0x00000080 #define BSF_SENDNOTIFYMESSAGE 0x00000100 #define BSF_RETURNHDESK 0x00000200 #define BSF_LUID 0x00000400 #define BROADCAST_QUERY_DENY 0x424D5144 /***** Window hooks *****/ /* Hook values */ #define WH_MIN (-1) #define WH_MSGFILTER (-1) #define WH_JOURNALRECORD 0 #define WH_JOURNALPLAYBACK 1 #define WH_KEYBOARD 2 #define WH_GETMESSAGE 3 #define WH_CALLWNDPROC 4 #define WH_CBT 5 #define WH_SYSMSGFILTER 6 #define WH_MOUSE 7 #define WH_HARDWARE 8 #define WH_DEBUG 9 #define WH_SHELL 10 #define WH_FOREGROUNDIDLE 11 #define WH_CALLWNDPROCRET 12 #define WH_KEYBOARD_LL 13 #define WH_MOUSE_LL 14 #define WH_MAX 14 #define WH_MINHOOK WH_MIN #define WH_MAXHOOK WH_MAX /* Hook action codes */ #define HC_ACTION 0 #define HC_GETNEXT 1 #define HC_SKIP 2 #define HC_NOREMOVE 3 #define HC_NOREM HC_NOREMOVE #define HC_SYSMODALON 4 #define HC_SYSMODALOFF 5 /* CallMsgFilter() values */ #define MSGF_DIALOGBOX 0 #define MSGF_MESSAGEBOX 1 #define MSGF_MENU 2 #define MSGF_MOVE 3 #define MSGF_SIZE 4 #define MSGF_SCROLLBAR 5 #define MSGF_NEXTWINDOW 6 #define MSGF_MAX 8 #define MSGF_USER 0x1000 #define MSGF_DDEMGR 0x8001 typedef struct tagWNDCLASSA { UINT style; WNDPROC lpfnWndProc; INT cbClsExtra; INT cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; LPCSTR lpszClassName; } WNDCLASSA, *PWNDCLASSA, *LPWNDCLASSA; typedef struct tagWNDCLASSW { UINT style; WNDPROC lpfnWndProc; INT cbClsExtra; INT cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; } WNDCLASSW, *PWNDCLASSW, *LPWNDCLASSW; DECL_WINELIB_TYPE_AW(WNDCLASS) DECL_WINELIB_TYPE_AW(PWNDCLASS) DECL_WINELIB_TYPE_AW(LPWNDCLASS) typedef struct tagCOPYDATASTRUCT { ULONG_PTR dwData; DWORD cbData; PVOID lpData; } COPYDATASTRUCT, *PCOPYDATASTRUCT; typedef struct tagMDINEXTMENU { HMENU hmenuIn; HMENU hmenuNext; HWND hwndNext; } MDINEXTMENU, *PMDINEXTMENU, *LPMDINEXTMENU; typedef struct tagMULTIKEYHELPA { DWORD mkSize; CHAR mkKeylist; CHAR szKeyphrase[1]; } MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA; typedef struct tagMULTIKEYHELPW { DWORD mkSize; WCHAR mkKeylist; WCHAR szKeyphrase[1]; } MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW; DECL_WINELIB_TYPE_AW(MULTIKEYHELP) DECL_WINELIB_TYPE_AW(PMULTIKEYHELP) DECL_WINELIB_TYPE_AW(LPMULTIKEYHELP) typedef struct tagHELPWININFOA { int wStructSize; int x; int y; int dx; int dy; int wMax; CHAR rgchMember[2]; } HELPWININFOA, *PHELPWININFOA, *LPHELPWININFOA; typedef struct tagHELPWININFOW { int wStructSize; int x; int y; int dx; int dy; int wMax; WCHAR rgchMember[2]; } HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW; DECL_WINELIB_TYPE_AW(HELPWININFO) DECL_WINELIB_TYPE_AW(PHELPWININFO) DECL_WINELIB_TYPE_AW(LPHELPWININFO) /* ChangeDisplaySettings return codes */ #define DISP_CHANGE_SUCCESSFUL 0 #define DISP_CHANGE_RESTART 1 #define DISP_CHANGE_FAILED (-1) #define DISP_CHANGE_BADMODE (-2) #define DISP_CHANGE_NOTUPDATED (-3) #define DISP_CHANGE_BADFLAGS (-4) #define DISP_CHANGE_BADPARAM (-5) #define DISP_CHANGE_BADDUALVIEW (-6) /* ChangeDisplaySettings.dwFlags */ #define CDS_UPDATEREGISTRY 0x00000001 #define CDS_TEST 0x00000002 #define CDS_FULLSCREEN 0x00000004 #define CDS_GLOBAL 0x00000008 #define CDS_SET_PRIMARY 0x00000010 #define CDS_VIDEOPARAMETERS 0x00000020 #define CDS_NORESET 0x10000000 #define CDS_SETRECT 0x20000000 #define CDS_RESET 0x40000000 typedef struct tagWNDCLASSEXA { UINT cbSize; UINT style; WNDPROC lpfnWndProc; INT cbClsExtra; INT cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; LPCSTR lpszClassName; HICON hIconSm; } WNDCLASSEXA, *PWNDCLASSEXA, *LPWNDCLASSEXA; typedef struct tagWNDCLASSEXW { UINT cbSize; UINT style; WNDPROC lpfnWndProc; INT cbClsExtra; INT cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; HICON hIconSm; } WNDCLASSEXW, *PWNDCLASSEXW, *LPWNDCLASSEXW; DECL_WINELIB_TYPE_AW(WNDCLASSEX) DECL_WINELIB_TYPE_AW(PWNDCLASSEX) DECL_WINELIB_TYPE_AW(LPWNDCLASSEX) typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG, *PMSG, *LPMSG; #define POINTSTOPOINT(pt, pts) { (pt).x = (pts).x; (pt).y = (pts).y; } #define POINTTOPOINTS(pt) (MAKELONG((short)((pt).x), (short)((pt).y))) #define MAKELPARAM(low,high) ((LPARAM)(DWORD)MAKELONG(low,high)) #define MAKEWPARAM(low,high) ((WPARAM)(DWORD)MAKELONG(low,high)) #define MAKELRESULT(low,high) ((LRESULT)(DWORD)MAKELONG(low,high)) /* Cursors / Icons */ typedef struct _ICONINFO { BOOL fIcon; DWORD xHotspot; DWORD yHotspot; HBITMAP hbmMask; HBITMAP hbmColor; } ICONINFO, *PICONINFO; typedef struct _ICONINFOEXA { DWORD cbSize; BOOL fIcon; DWORD xHotspot; DWORD yHotspot; HBITMAP hbmMask; HBITMAP hbmColor; WORD wResID; CHAR szModName[MAX_PATH]; CHAR szResName[MAX_PATH]; } ICONINFOEXA, *PICONINFOEXA; typedef struct _ICONINFOEXW { DWORD cbSize; BOOL fIcon; DWORD xHotspot; DWORD yHotspot; HBITMAP hbmMask; HBITMAP hbmColor; WORD wResID; WCHAR szModName[MAX_PATH]; WCHAR szResName[MAX_PATH]; } ICONINFOEXW, *PICONINFOEXW; DECL_WINELIB_TYPE_AW(ICONINFOEX) DECL_WINELIB_TYPE_AW(PICONINFOEX) typedef struct tagCURSORINFO { DWORD cbSize; DWORD flags; HCURSOR hCursor; POINT ptScreenPos; } CURSORINFO, *PCURSORINFO, *LPCURSORINFO; #define CURSOR_SHOWING 0x00000001 #define CURSOR_SUPPRESSED 0x00000002 /* this is the 6 byte accel struct used in Win32 when presented to the user */ typedef struct tagACCEL { #ifdef WORDS_BIGENDIAN WORD fVirt; WORD key; DWORD cmd; #else BYTE fVirt; WORD key; WORD cmd; #endif } ACCEL, *LPACCEL; /* Flags for TrackPopupMenu */ #define TPM_LEFTBUTTON 0x0000 #define TPM_RECURSE 0x0001 #define TPM_RIGHTBUTTON 0x0002 #define TPM_LEFTALIGN 0x0000 #define TPM_CENTERALIGN 0x0004 #define TPM_RIGHTALIGN 0x0008 #define TPM_TOPALIGN 0x0000 #define TPM_VCENTERALIGN 0x0010 #define TPM_BOTTOMALIGN 0x0020 #define TPM_HORIZONTAL 0x0000 #define TPM_VERTICAL 0x0040 #define TPM_NONOTIFY 0x0080 #define TPM_RETURNCMD 0x0100 #define TPM_HORPOSANIMATION 0x0400 #define TPM_HORNEGANIMATION 0x0800 #define TPM_VERPOSANIMATION 0x1000 #define TPM_VERNEGANIMATION 0x2000 #define TPM_NOANIMATION 0x4000 #define TPM_LAYOUTRTL 0x8000 typedef struct tagTPMPARAMS { UINT cbSize; RECT rcExclude; } TPMPARAMS, *LPTPMPARAMS; /* * Combobox information */ typedef struct tagCOMBOBOXINFO { DWORD cbSize; RECT rcItem; RECT rcButton; DWORD stateButton; HWND hwndCombo; HWND hwndItem; HWND hwndList; } COMBOBOXINFO, *PCOMBOBOXINFO, *LPCOMBOBOXINFO; typedef struct tagMENUITEMINFOA { UINT cbSize; UINT fMask; UINT fType; UINT fState; UINT wID; HMENU hSubMenu; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; ULONG_PTR dwItemData; LPSTR dwTypeData; UINT cch; HBITMAP hbmpItem; } MENUITEMINFOA, *LPMENUITEMINFOA; typedef struct tagMENUITEMINFOW { UINT cbSize; UINT fMask; UINT fType; UINT fState; UINT wID; HMENU hSubMenu; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; ULONG_PTR dwItemData; LPWSTR dwTypeData; UINT cch; HBITMAP hbmpItem; } MENUITEMINFOW, *LPMENUITEMINFOW; DECL_WINELIB_TYPE_AW(MENUITEMINFO) DECL_WINELIB_TYPE_AW(LPMENUITEMINFO) typedef const MENUITEMINFOA *LPCMENUITEMINFOA; typedef const MENUITEMINFOW *LPCMENUITEMINFOW; DECL_WINELIB_TYPE_AW(LPCMENUITEMINFO) typedef struct tagMENUBARINFO { DWORD cbSize; RECT rcBar; HMENU hMenu; HWND hwndMenu; BOOL fBarFocused:1; BOOL fFocused:1; } MENUBARINFO, *PMENUBARINFO, *LPMENUBARINFO; typedef struct tagMENUINFO { DWORD cbSize; DWORD fMask; DWORD dwStyle; UINT cyMax; HBRUSH hbrBack; DWORD dwContextHelpID; ULONG_PTR dwMenuData; } MENUINFO, *LPMENUINFO; typedef const MENUINFO *LPCMENUINFO; #define MIM_MAXHEIGHT 0x00000001 #define MIM_BACKGROUND 0x00000002 #define MIM_HELPID 0x00000004 #define MIM_MENUDATA 0x00000008 #define MIM_STYLE 0x00000010 #define MIM_APPLYTOSUBMENUS 0x80000000 #define MNS_NOCHECK 0x80000000 #define MNS_MODELESS 0x40000000 #define MNS_DRAGDROP 0x20000000 #define MNS_AUTODISMISS 0x10000000 #define MNS_NOTIFYBYPOS 0x08000000 #define MNS_CHECKORBMP 0x04000000 typedef struct { WORD versionNumber; WORD offset; } MENUITEMTEMPLATEHEADER, *PMENUITEMTEMPLATEHEADER; typedef struct { WORD mtOption; WORD mtID; WCHAR mtString[1]; } MENUITEMTEMPLATE, *PMENUITEMTEMPLATE; typedef VOID MENUTEMPLATE; typedef PVOID *LPMENUTEMPLATE; /* Field specifiers for MENUITEMINFO[AW] type. */ #define MIIM_STATE 0x00000001 #define MIIM_ID 0x00000002 #define MIIM_SUBMENU 0x00000004 #define MIIM_CHECKMARKS 0x00000008 #define MIIM_TYPE 0x00000010 #define MIIM_DATA 0x00000020 #define MIIM_STRING 0x00000040 #define MIIM_BITMAP 0x00000080 #define MIIM_FTYPE 0x00000100 #define HBMMENU_CALLBACK ((HBITMAP) -1) #define HBMMENU_SYSTEM ((HBITMAP) 1) #define HBMMENU_MBAR_RESTORE ((HBITMAP) 2) #define HBMMENU_MBAR_MINIMIZE ((HBITMAP) 3) #define HBMMENU_MBAR_CLOSE ((HBITMAP) 5) #define HBMMENU_MBAR_CLOSE_D ((HBITMAP) 6) #define HBMMENU_MBAR_MINIMIZE_D ((HBITMAP) 7) #define HBMMENU_POPUP_CLOSE ((HBITMAP) 8) #define HBMMENU_POPUP_RESTORE ((HBITMAP) 9) #define HBMMENU_POPUP_MAXIMIZE ((HBITMAP) 10) #define HBMMENU_POPUP_MINIMIZE ((HBITMAP) 11) /* WM_H/VSCROLL commands */ #define SB_LINEUP 0 #define SB_LINELEFT 0 #define SB_LINEDOWN 1 #define SB_LINERIGHT 1 #define SB_PAGEUP 2 #define SB_PAGELEFT 2 #define SB_PAGEDOWN 3 #define SB_PAGERIGHT 3 #define SB_THUMBPOSITION 4 #define SB_THUMBTRACK 5 #define SB_TOP 6 #define SB_LEFT 6 #define SB_BOTTOM 7 #define SB_RIGHT 7 #define SB_ENDSCROLL 8 /* Scroll bar selection constants */ #define SB_HORZ 0 #define SB_VERT 1 #define SB_CTL 2 #define SB_BOTH 3 /* EnableScrollBar() flags */ #define ESB_ENABLE_BOTH 0x0000 #define ESB_DISABLE_BOTH 0x0003 #define ESB_DISABLE_LEFT 0x0001 #define ESB_DISABLE_RIGHT 0x0002 #define ESB_DISABLE_UP 0x0001 #define ESB_DISABLE_DOWN 0x0002 #define ESB_DISABLE_LTUP ESB_DISABLE_LEFT #define ESB_DISABLE_RTDN ESB_DISABLE_RIGHT /* Static Control Messages */ #define STM_SETICON 0x0170 #define STM_GETICON 0x0171 #define STM_SETIMAGE 0x0172 #define STM_GETIMAGE 0x0173 #define STM_MSGMAX 0x0174 #define STN_CLICKED 0 #define STN_DBLCLK 1 #define STN_ENABLE 2 #define STN_DISABLE 3 /* Scrollbar messages */ #define SBM_SETPOS 0x00e0 #define SBM_GETPOS 0x00e1 #define SBM_SETRANGE 0x00e2 #define SBM_GETRANGE 0x00e3 #define SBM_ENABLE_ARROWS 0x00e4 #define SBM_SETRANGEREDRAW 0x00e6 #define SBM_SETSCROLLINFO 0x00e9 #define SBM_GETSCROLLINFO 0x00ea #define SBM_GETSCROLLBARINFO 0x00eb /* Scrollbar info */ typedef struct tagSCROLLINFO { UINT cbSize; UINT fMask; INT nMin; INT nMax; UINT nPage; INT nPos; INT nTrackPos; } SCROLLINFO, *LPSCROLLINFO; typedef const SCROLLINFO *LPCSCROLLINFO; #define CCHILDREN_SCROLLBAR 5 typedef struct tagSCROLLBARINFO { DWORD cbSize; /* Size of SCROLLBARINFO struct */ RECT rcScrollBar; /* Coordinates of the scroll bar */ INT dxyLineButton; /* Height or width */ INT xyThumbTop; /* Position of the top or the left */ INT xyThumbBottom; /* Position of the bottom or the right */ INT reserved; DWORD rgstate[CCHILDREN_SCROLLBAR+1]; } SCROLLBARINFO, *PSCROLLBARINFO, *LPSCROLLBARINFO; /* GetScrollInfo() flags */ #define SIF_RANGE 0x0001 #define SIF_PAGE 0x0002 #define SIF_POS 0x0004 #define SIF_DISABLENOSCROLL 0x0008 #define SIF_TRACKPOS 0x0010 #define SIF_ALL (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS) /* Listbox messages */ #define LB_ADDSTRING 0x0180 #define LB_INSERTSTRING 0x0181 #define LB_DELETESTRING 0x0182 #define LB_SELITEMRANGEEX 0x0183 #define LB_RESETCONTENT 0x0184 #define LB_SETSEL 0x0185 #define LB_SETCURSEL 0x0186 #define LB_GETSEL 0x0187 #define LB_GETCURSEL 0x0188 #define LB_GETTEXT 0x0189 #define LB_GETTEXTLEN 0x018a #define LB_GETCOUNT 0x018b #define LB_SELECTSTRING 0x018c #define LB_DIR 0x018d #define LB_GETTOPINDEX 0x018e #define LB_FINDSTRING 0x018f #define LB_GETSELCOUNT 0x0190 #define LB_GETSELITEMS 0x0191 #define LB_SETTABSTOPS 0x0192 #define LB_GETHORIZONTALEXTENT 0x0193 #define LB_SETHORIZONTALEXTENT 0x0194 #define LB_SETCOLUMNWIDTH 0x0195 #define LB_ADDFILE 0x0196 #define LB_SETTOPINDEX 0x0197 #define LB_GETITEMRECT 0x0198 #define LB_GETITEMDATA 0x0199 #define LB_SETITEMDATA 0x019a #define LB_SELITEMRANGE 0x019b #define LB_SETANCHORINDEX 0x019c #define LB_GETANCHORINDEX 0x019d #define LB_SETCARETINDEX 0x019e #define LB_GETCARETINDEX 0x019f #define LB_SETITEMHEIGHT 0x01a0 #define LB_GETITEMHEIGHT 0x01a1 #define LB_FINDSTRINGEXACT 0x01a2 #define LB_CARETON 0x01a3 #define LB_CARETOFF 0x01a4 #define LB_SETLOCALE 0x01a5 #define LB_GETLOCALE 0x01a6 #define LB_SETCOUNT 0x01a7 #define LB_INITSTORAGE 0x01a8 #define LB_ITEMFROMPOINT 0x01a9 #define LB_GETLISTBOXINFO 0x01b2 #define LB_MSGMAX 0x01b3 /* Listbox notification codes */ #define LBN_ERRSPACE (-2) #define LBN_SELCHANGE 1 #define LBN_DBLCLK 2 #define LBN_SELCANCEL 3 #define LBN_SETFOCUS 4 #define LBN_KILLFOCUS 5 /* Listbox message return values */ #define LB_OKAY 0 #define LB_ERR (-1) #define LB_ERRSPACE (-2) #define LB_CTLCODE __MSABI_LONG(0) /* Combo box messages */ #define CB_GETEDITSEL 0x0140 #define CB_LIMITTEXT 0x0141 #define CB_SETEDITSEL 0x0142 #define CB_ADDSTRING 0x0143 #define CB_DELETESTRING 0x0144 #define CB_DIR 0x0145 #define CB_GETCOUNT 0x0146 #define CB_GETCURSEL 0x0147 #define CB_GETLBTEXT 0x0148 #define CB_GETLBTEXTLEN 0x0149 #define CB_INSERTSTRING 0x014a #define CB_RESETCONTENT 0x014b #define CB_FINDSTRING 0x014c #define CB_SELECTSTRING 0x014d #define CB_SETCURSEL 0x014e #define CB_SHOWDROPDOWN 0x014f #define CB_GETITEMDATA 0x0150 #define CB_SETITEMDATA 0x0151 #define CB_GETDROPPEDCONTROLRECT 0x0152 #define CB_SETITEMHEIGHT 0x0153 #define CB_GETITEMHEIGHT 0x0154 #define CB_SETEXTENDEDUI 0x0155 #define CB_GETEXTENDEDUI 0x0156 #define CB_GETDROPPEDSTATE 0x0157 #define CB_FINDSTRINGEXACT 0x0158 #define CB_SETLOCALE 0x0159 #define CB_GETLOCALE 0x015a #define CB_GETTOPINDEX 0x015b #define CB_SETTOPINDEX 0x015c #define CB_GETHORIZONTALEXTENT 0x015d #define CB_SETHORIZONTALEXTENT 0x015e #define CB_GETDROPPEDWIDTH 0x015f #define CB_SETDROPPEDWIDTH 0x0160 #define CB_INITSTORAGE 0x0161 #define CB_MULTIPLEADDSTRING 0x0163 #define CB_GETCOMBOBOXINFO 0x0164 #define CB_MSGMAX 0x0165 /* Combo box notification codes */ #define CBN_ERRSPACE (-1) #define CBN_SELCHANGE 1 #define CBN_DBLCLK 2 #define CBN_SETFOCUS 3 #define CBN_KILLFOCUS 4 #define CBN_EDITCHANGE 5 #define CBN_EDITUPDATE 6 #define CBN_DROPDOWN 7 #define CBN_CLOSEUP 8 #define CBN_SELENDOK 9 #define CBN_SELENDCANCEL 10 /* Combo box message return values */ #define CB_OKAY 0 #define CB_ERR (-1) #define CB_ERRSPACE (-2) #define MB_OK 0x00000000 #define MB_OKCANCEL 0x00000001 #define MB_ABORTRETRYIGNORE 0x00000002 #define MB_YESNOCANCEL 0x00000003 #define MB_YESNO 0x00000004 #define MB_RETRYCANCEL 0x00000005 #define MB_CANCELTRYCONTINUE 0x00000006 #define MB_TYPEMASK 0x0000000F #define MB_ICONHAND 0x00000010 #define MB_ICONQUESTION 0x00000020 #define MB_ICONEXCLAMATION 0x00000030 #define MB_ICONASTERISK 0x00000040 #define MB_USERICON 0x00000080 #define MB_ICONMASK 0x000000F0 #define MB_ICONINFORMATION MB_ICONASTERISK #define MB_ICONSTOP MB_ICONHAND #define MB_ICONWARNING MB_ICONEXCLAMATION #define MB_ICONERROR MB_ICONHAND #define MB_DEFBUTTON1 0x00000000 #define MB_DEFBUTTON2 0x00000100 #define MB_DEFBUTTON3 0x00000200 #define MB_DEFBUTTON4 0x00000300 #define MB_DEFMASK 0x00000F00 #define MB_APPLMODAL 0x00000000 #define MB_SYSTEMMODAL 0x00001000 #define MB_TASKMODAL 0x00002000 #define MB_MODEMASK 0x00003000 #define MB_HELP 0x00004000 #define MB_NOFOCUS 0x00008000 #define MB_MISCMASK 0x0000C000 #define MB_SETFOREGROUND 0x00010000 #define MB_DEFAULT_DESKTOP_ONLY 0x00020000 #define MB_SERVICE_NOTIFICATION 0x00040000 #define MB_TOPMOST 0x00040000 #define MB_RIGHT 0x00080000 #define MB_RTLREADING 0x00100000 #define HELPINFO_WINDOW 0x0001 #define HELPINFO_MENUITEM 0x0002 /* Structure pointed to by lParam of WM_HELP */ typedef struct tagHELPINFO { UINT cbSize; /* Size in bytes of this struct */ INT iContextType; /* Either HELPINFO_WINDOW or HELPINFO_MENUITEM */ INT iCtrlId; /* Control Id or a Menu item Id. */ HANDLE hItemHandle; /* hWnd of control or hMenu. */ DWORD_PTR dwContextId; /* Context Id associated with this item */ POINT MousePos; /* Mouse Position in screen co-ordinates */ } HELPINFO,*LPHELPINFO; typedef void (CALLBACK *MSGBOXCALLBACK)(LPHELPINFO lpHelpInfo); typedef struct tagMSGBOXPARAMSA { UINT cbSize; HWND hwndOwner; HINSTANCE hInstance; LPCSTR lpszText; LPCSTR lpszCaption; DWORD dwStyle; LPCSTR lpszIcon; DWORD_PTR dwContextHelpId; MSGBOXCALLBACK lpfnMsgBoxCallback; DWORD dwLanguageId; } MSGBOXPARAMSA, *PMSGBOXPARAMSA, *LPMSGBOXPARAMSA; typedef struct tagMSGBOXPARAMSW { UINT cbSize; HWND hwndOwner; HINSTANCE hInstance; LPCWSTR lpszText; LPCWSTR lpszCaption; DWORD dwStyle; LPCWSTR lpszIcon; DWORD_PTR dwContextHelpId; MSGBOXCALLBACK lpfnMsgBoxCallback; DWORD dwLanguageId; } MSGBOXPARAMSW, *PMSGBOXPARAMSW, *LPMSGBOXPARAMSW; DECL_WINELIB_TYPE_AW(MSGBOXPARAMS) DECL_WINELIB_TYPE_AW(PMSGBOXPARAMS) DECL_WINELIB_TYPE_AW(LPMSGBOXPARAMS) #define MONITOR_DEFAULTTONULL 0x00000000 #define MONITOR_DEFAULTTOPRIMARY 0x00000001 #define MONITOR_DEFAULTTONEAREST 0x00000002 #define MONITORINFOF_PRIMARY 0x00000001 #ifndef CCHDEVICENAME #define CCHDEVICENAME 32 #endif typedef struct tagMONITORINFO { DWORD cbSize; RECT rcMonitor; RECT rcWork; DWORD dwFlags; } MONITORINFO, *LPMONITORINFO; typedef struct tagMONITORINFOEXA { /* the 4 first entries are the same as MONITORINFO */ DWORD cbSize; RECT rcMonitor; RECT rcWork; DWORD dwFlags; CHAR szDevice[CCHDEVICENAME]; } MONITORINFOEXA, *LPMONITORINFOEXA; typedef struct tagMONITORINFOEXW { /* the 4 first entries are the same as MONITORINFO */ DWORD cbSize; RECT rcMonitor; RECT rcWork; DWORD dwFlags; WCHAR szDevice[CCHDEVICENAME]; } MONITORINFOEXW, *LPMONITORINFOEXW; DECL_WINELIB_TYPE_AW(MONITORINFOEX) DECL_WINELIB_TYPE_AW(LPMONITORINFOEX) typedef BOOL (CALLBACK *MONITORENUMPROC)(HMONITOR,HDC,LPRECT,LPARAM); #include typedef struct tagDLGTEMPLATE { DWORD style; DWORD dwExtendedStyle; WORD cdit; short x; short y; short cx; short cy; } DLGTEMPLATE; typedef DLGTEMPLATE *LPDLGTEMPLATEA; typedef DLGTEMPLATE *LPDLGTEMPLATEW; DECL_WINELIB_TYPE_AW(LPDLGTEMPLATE) typedef const DLGTEMPLATE *LPCDLGTEMPLATEA; typedef const DLGTEMPLATE *LPCDLGTEMPLATEW; DECL_WINELIB_TYPE_AW(LPCDLGTEMPLATE) typedef struct tagDLGITEMTEMPLATE { DWORD style; DWORD dwExtendedStyle; short x; short y; short cx; short cy; WORD id; } DLGITEMTEMPLATE; typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEA; typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEW; DECL_WINELIB_TYPE_AW(PDLGITEMTEMPLATE) typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEA; typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEW; DECL_WINELIB_TYPE_AW(LPDLGITEMTEMPLATE) #include /* CBT hook values */ #define HCBT_MOVESIZE 0 #define HCBT_MINMAX 1 #define HCBT_QS 2 #define HCBT_CREATEWND 3 #define HCBT_DESTROYWND 4 #define HCBT_ACTIVATE 5 #define HCBT_CLICKSKIPPED 6 #define HCBT_KEYSKIPPED 7 #define HCBT_SYSCOMMAND 8 #define HCBT_SETFOCUS 9 /* CBT hook structures */ typedef struct tagCBT_CREATEWNDA { CREATESTRUCTA *lpcs; HWND hwndInsertAfter; } CBT_CREATEWNDA, *LPCBT_CREATEWNDA; typedef struct tagCBT_CREATEWNDW { CREATESTRUCTW *lpcs; HWND hwndInsertAfter; } CBT_CREATEWNDW, *LPCBT_CREATEWNDW; DECL_WINELIB_TYPE_AW(CBT_CREATEWND) DECL_WINELIB_TYPE_AW(LPCBT_CREATEWND) typedef struct tagCBTACTIVATESTRUCT { BOOL fMouse; HWND hWndActive; } CBTACTIVATESTRUCT, *LPCBTACTIVATESTRUCT; typedef struct tagDROPSTRUCT { HWND hwndSource; HWND hwndSink; DWORD wFmt; ULONG_PTR dwData; POINT ptDrop; DWORD dwControlData; } DROPSTRUCT, *PDROPSTRUCT, *LPDROPSTRUCT; #define DOF_EXECUTABLE 0x8001 #define DOF_DOCUMENT 0x8002 #define DOF_DIRECTORY 0x8003 #define DOF_MULTIPLE 0x8004 #define DOF_PROGMAN 0x0001 #define DOF_SHELLDATA 0x0002 /* modifiers for RegisterHotKey */ #define MOD_ALT 0x0001 #define MOD_CONTROL 0x0002 #define MOD_SHIFT 0x0004 #define MOD_WIN 0x0008 /* ids for RegisterHotKey */ #define IDHOT_SNAPWINDOW (-1) /* SHIFT-PRINTSCRN */ #define IDHOT_SNAPDESKTOP (-2) /* PRINTSCRN */ /* keybd_event flags */ #define KEYEVENTF_EXTENDEDKEY 0x0001 #define KEYEVENTF_KEYUP 0x0002 #define KEYEVENTF_UNICODE 0x0004 #define KEYEVENTF_SCANCODE 0x0008 /* mouse_event flags */ #define MOUSEEVENTF_MOVE 0x0001 #define MOUSEEVENTF_LEFTDOWN 0x0002 #define MOUSEEVENTF_LEFTUP 0x0004 #define MOUSEEVENTF_RIGHTDOWN 0x0008 #define MOUSEEVENTF_RIGHTUP 0x0010 #define MOUSEEVENTF_MIDDLEDOWN 0x0020 #define MOUSEEVENTF_MIDDLEUP 0x0040 #define MOUSEEVENTF_XDOWN 0x0080 #define MOUSEEVENTF_XUP 0x0100 #define MOUSEEVENTF_WHEEL 0x0800 #define MOUSEEVENTF_HWHEEL 0x1000 #define MOUSEEVENTF_MOVE_NOCOALESCE 0x2000 #define MOUSEEVENTF_VIRTUALDESK 0x4000 #define MOUSEEVENTF_ABSOLUTE 0x8000 /* ExitWindows() flags */ #define EW_RESTARTWINDOWS 0x0042 #define EW_REBOOTSYSTEM 0x0043 #define EW_EXITANDEXECAPP 0x0044 /* ExitWindowsEx() flags */ #define EWX_LOGOFF 0 #define EWX_SHUTDOWN 1 #define EWX_REBOOT 2 #define EWX_FORCE 4 #define EWX_POWEROFF 8 #define EWX_FORCEIFHUNG 16 /* SetLastErrorEx types */ #define SLE_ERROR 0x00000001 #define SLE_MINORERROR 0x00000002 #define SLE_WARNING 0x00000003 /* Predefined resources */ #define IDI_APPLICATION MAKEINTRESOURCE(32512) #define IDI_HAND MAKEINTRESOURCE(32513) #define IDI_QUESTION MAKEINTRESOURCE(32514) #define IDI_EXCLAMATION MAKEINTRESOURCE(32515) #define IDI_ASTERISK MAKEINTRESOURCE(32516) #define IDI_WINLOGO MAKEINTRESOURCE(32517) #define IDI_WARNING IDI_EXCLAMATION #define IDI_ERROR IDI_HAND #define IDI_INFORMATION IDI_ASTERISK #define IDC_ARROW MAKEINTRESOURCE(32512) #define IDC_IBEAM MAKEINTRESOURCE(32513) #define IDC_WAIT MAKEINTRESOURCE(32514) #define IDC_CROSS MAKEINTRESOURCE(32515) #define IDC_UPARROW MAKEINTRESOURCE(32516) #define IDC_PEN MAKEINTRESOURCE(32631) #define IDC_SIZE MAKEINTRESOURCE(32640) #define IDC_ICON MAKEINTRESOURCE(32641) #define IDC_SIZENWSE MAKEINTRESOURCE(32642) #define IDC_SIZENESW MAKEINTRESOURCE(32643) #define IDC_SIZEWE MAKEINTRESOURCE(32644) #define IDC_SIZENS MAKEINTRESOURCE(32645) #define IDC_SIZEALL MAKEINTRESOURCE(32646) #define IDC_NO MAKEINTRESOURCE(32648) #define IDC_HAND MAKEINTRESOURCE(32649) #define IDC_APPSTARTING MAKEINTRESOURCE(32650) #define IDC_HELP MAKEINTRESOURCE(32651) #define MNC_IGNORE 0 #define MNC_CLOSE 1 #define MNC_EXECUTE 2 #define MNC_SELECT 3 /* SystemParametersInfo */ #define SPI_GETBEEP 1 #define SPI_SETBEEP 2 #define SPI_GETMOUSE 3 #define SPI_SETMOUSE 4 #define SPI_GETBORDER 5 #define SPI_SETBORDER 6 #define SPI_GETKEYBOARDSPEED 10 #define SPI_SETKEYBOARDSPEED 11 #define SPI_LANGDRIVER 12 #define SPI_ICONHORIZONTALSPACING 13 #define SPI_GETSCREENSAVETIMEOUT 14 #define SPI_SETSCREENSAVETIMEOUT 15 #define SPI_GETSCREENSAVEACTIVE 16 #define SPI_SETSCREENSAVEACTIVE 17 #define SPI_GETGRIDGRANULARITY 18 #define SPI_SETGRIDGRANULARITY 19 #define SPI_SETDESKWALLPAPER 20 #define SPI_SETDESKPATTERN 21 #define SPI_GETKEYBOARDDELAY 22 #define SPI_SETKEYBOARDDELAY 23 #define SPI_ICONVERTICALSPACING 24 #define SPI_GETICONTITLEWRAP 25 #define SPI_SETICONTITLEWRAP 26 #define SPI_GETMENUDROPALIGNMENT 27 #define SPI_SETMENUDROPALIGNMENT 28 #define SPI_SETDOUBLECLKWIDTH 29 #define SPI_SETDOUBLECLKHEIGHT 30 #define SPI_GETICONTITLELOGFONT 31 #define SPI_SETDOUBLECLICKTIME 32 #define SPI_SETMOUSEBUTTONSWAP 33 #define SPI_SETICONTITLELOGFONT 34 #define SPI_GETFASTTASKSWITCH 35 #define SPI_SETFASTTASKSWITCH 36 #define SPI_SETDRAGFULLWINDOWS 37 #define SPI_GETDRAGFULLWINDOWS 38 #define SPI_GETNONCLIENTMETRICS 41 #define SPI_SETNONCLIENTMETRICS 42 #define SPI_GETMINIMIZEDMETRICS 43 #define SPI_SETMINIMIZEDMETRICS 44 #define SPI_GETICONMETRICS 45 #define SPI_SETICONMETRICS 46 #define SPI_SETWORKAREA 47 #define SPI_GETWORKAREA 48 #define SPI_SETPENWINDOWS 49 #define SPI_GETFILTERKEYS 50 #define SPI_SETFILTERKEYS 51 #define SPI_GETTOGGLEKEYS 52 #define SPI_SETTOGGLEKEYS 53 #define SPI_GETMOUSEKEYS 54 #define SPI_SETMOUSEKEYS 55 #define SPI_GETSHOWSOUNDS 56 #define SPI_SETSHOWSOUNDS 57 #define SPI_GETSTICKYKEYS 58 #define SPI_SETSTICKYKEYS 59 #define SPI_GETACCESSTIMEOUT 60 #define SPI_SETACCESSTIMEOUT 61 #define SPI_GETSERIALKEYS 62 #define SPI_SETSERIALKEYS 63 #define SPI_GETSOUNDSENTRY 64 #define SPI_SETSOUNDSENTRY 65 #define SPI_GETHIGHCONTRAST 66 #define SPI_SETHIGHCONTRAST 67 #define SPI_GETKEYBOARDPREF 68 #define SPI_SETKEYBOARDPREF 69 #define SPI_GETSCREENREADER 70 #define SPI_SETSCREENREADER 71 #define SPI_GETANIMATION 72 #define SPI_SETANIMATION 73 #define SPI_GETFONTSMOOTHING 74 #define SPI_SETFONTSMOOTHING 75 #define SPI_SETDRAGWIDTH 76 #define SPI_SETDRAGHEIGHT 77 #define SPI_SETHANDHELD 78 #define SPI_GETLOWPOWERTIMEOUT 79 #define SPI_GETPOWEROFFTIMEOUT 80 #define SPI_SETLOWPOWERTIMEOUT 81 #define SPI_SETPOWEROFFTIMEOUT 82 #define SPI_GETLOWPOWERACTIVE 83 #define SPI_GETPOWEROFFACTIVE 84 #define SPI_SETLOWPOWERACTIVE 85 #define SPI_SETPOWEROFFACTIVE 86 #define SPI_SETCURSORS 87 #define SPI_SETICONS 88 #define SPI_GETDEFAULTINPUTLANG 89 #define SPI_SETDEFAULTINPUTLANG 90 #define SPI_SETLANGTOGGLE 91 #define SPI_GETWINDOWSEXTENSION 92 #define SPI_SETMOUSETRAILS 93 #define SPI_GETMOUSETRAILS 94 #define SPI_GETSNAPTODEFBUTTON 95 #define SPI_SETSNAPTODEFBUTTON 96 #define SPI_SETSCREENSAVERRUNNING 97 #define SPI_SCREENSAVERRUNNING SPI_SETSCREENSAVERRUNNING #define SPI_GETMOUSEHOVERWIDTH 98 #define SPI_SETMOUSEHOVERWIDTH 99 #define SPI_GETMOUSEHOVERHEIGHT 100 #define SPI_SETMOUSEHOVERHEIGHT 101 #define SPI_GETMOUSEHOVERTIME 102 #define SPI_SETMOUSEHOVERTIME 103 #define SPI_GETWHEELSCROLLLINES 104 #define SPI_SETWHEELSCROLLLINES 105 #define SPI_GETMENUSHOWDELAY 106 #define SPI_SETMENUSHOWDELAY 107 #define SPI_GETWHEELSCROLLCHARS 108 #define SPI_SETWHEELSCROLLCHARS 109 #define SPI_GETSHOWIMEUI 110 #define SPI_SETSHOWIMEUI 111 #define SPI_GETMOUSESPEED 112 #define SPI_SETMOUSESPEED 113 #define SPI_GETSCREENSAVERRUNNING 114 #define SPI_GETDESKWALLPAPER 115 #define SPI_GETAUDIODESCRIPTION 116 #define SPI_SETAUDIODESCRIPTION 117 #define SPI_GETACTIVEWINDOWTRACKING 0x1000 #define SPI_SETACTIVEWINDOWTRACKING 0x1001 #define SPI_GETMENUANIMATION 0x1002 #define SPI_SETMENUANIMATION 0x1003 #define SPI_GETCOMBOBOXANIMATION 0x1004 #define SPI_SETCOMBOBOXANIMATION 0x1005 #define SPI_GETLISTBOXSMOOTHSCROLLING 0x1006 #define SPI_SETLISTBOXSMOOTHSCROLLING 0x1007 #define SPI_GETGRADIENTCAPTIONS 0x1008 #define SPI_SETGRADIENTCAPTIONS 0x1009 #define SPI_GETKEYBOARDCUES 0x100A #define SPI_SETKEYBOARDCUES 0x100B #define SPI_GETMENUUNDERLINES SPI_GETKEYBOARDCUES #define SPI_SETMENUUNDERLINES SPI_SETKEYBOARDCUES #define SPI_GETACTIVEWNDTRKZORDER 0x100C #define SPI_SETACTIVEWNDTRKZORDER 0x100D #define SPI_GETHOTTRACKING 0x100E #define SPI_SETHOTTRACKING 0x100F #define SPI_GETMENUFADE 0x1012 #define SPI_SETMENUFADE 0x1013 #define SPI_GETSELECTIONFADE 0x1014 #define SPI_SETSELECTIONFADE 0x1015 #define SPI_GETTOOLTIPANIMATION 0x1016 #define SPI_SETTOOLTIPANIMATION 0x1017 #define SPI_GETTOOLTIPFADE 0x1018 #define SPI_SETTOOLTIPFADE 0x1019 #define SPI_GETCURSORSHADOW 0x101A #define SPI_SETCURSORSHADOW 0x101B #define SPI_GETMOUSESONAR 0x101C #define SPI_SETMOUSESONAR 0x101D #define SPI_GETMOUSECLICKLOCK 0x101E #define SPI_SETMOUSECLICKLOCK 0x101F #define SPI_GETMOUSEVANISH 0x1020 #define SPI_SETMOUSEVANISH 0x1021 #define SPI_GETFLATMENU 0x1022 #define SPI_SETFLATMENU 0x1023 #define SPI_GETDROPSHADOW 0x1024 #define SPI_SETDROPSHADOW 0x1025 #define SPI_GETBLOCKSENDINPUTRESETS 0x1026 #define SPI_SETBLOCKSENDINPUTRESETS 0x1027 #define SPI_GETUIEFFECTS 0x103E #define SPI_SETUIEFFECTS 0x103F #define SPI_GETDISABLEOVERLAPPEDCONTENT 0x1040 #define SPI_SETDISABLEOVERLAPPEDCONTENT 0x1041 #define SPI_GETCLIENTAREAANIMATION 0x1042 #define SPI_SETCLIENTAREAANIMATION 0x1043 #define SPI_GETCLEARTYPE 0x1048 #define SPI_SETCLEARTYPE 0x1049 #define SPI_GETSPEECHRECOGNITION 0x104A #define SPI_SETSPEECHRECOGNITION 0x104B #define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000 #define SPI_SETFOREGROUNDLOCKTIMEOUT 0x2001 #define SPI_GETACTIVEWNDTRKTIMEOUT 0x2002 #define SPI_SETACTIVEWNDTRKTIMEOUT 0x2003 #define SPI_GETFOREGROUNDFLASHCOUNT 0x2004 #define SPI_SETFOREGROUNDFLASHCOUNT 0x2005 #define SPI_GETCARETWIDTH 0x2006 #define SPI_SETCARETWIDTH 0x2007 #define SPI_GETMOUSECLICKLOCKTIME 0x2008 #define SPI_SETMOUSECLICKLOCKTIME 0x2009 #define SPI_GETFONTSMOOTHINGTYPE 0x200A #define SPI_SETFONTSMOOTHINGTYPE 0x200B #define SPI_GETFONTSMOOTHINGCONTRAST 0x200C #define SPI_SETFONTSMOOTHINGCONTRAST 0x200D #define SPI_GETFOCUSBORDERWIDTH 0x200E #define SPI_SETFOCUSBORDERWIDTH 0x200F #define SPI_GETFOCUSBORDERHEIGHT 0x2010 #define SPI_SETFOCUSBORDERHEIGHT 0x2011 #define SPI_GETFONTSMOOTHINGORIENTATION 0x2012 #define SPI_SETFONTSMOOTHINGORIENTATION 0x2013 #define FE_FONTSMOOTHINGSTANDARD 0x0001 #define FE_FONTSMOOTHINGCLEARTYPE 0x0002 #define FE_FONTSMOOTHINGDOCKING 0x8000 #define FE_FONTSMOOTHINGORIENTATIONBGR 0x0000 #define FE_FONTSMOOTHINGORIENTATIONRGB 0x0001 #define SETWALLPAPER_DEFAULT ((LPWSTR)-1) /* SystemParametersInfo flags */ #define SPIF_UPDATEINIFILE 1 #define SPIF_SENDWININICHANGE 2 #define SPIF_SENDCHANGE SPIF_SENDWININICHANGE #if defined(_WINGDI_) && !defined(NOGDI) typedef struct tagNONCLIENTMETRICSA { UINT cbSize; INT iBorderWidth; INT iScrollWidth; INT iScrollHeight; INT iCaptionWidth; INT iCaptionHeight; LOGFONTA lfCaptionFont; INT iSmCaptionWidth; INT iSmCaptionHeight; LOGFONTA lfSmCaptionFont; INT iMenuWidth; INT iMenuHeight; LOGFONTA lfMenuFont; LOGFONTA lfStatusFont; LOGFONTA lfMessageFont; INT iPaddedBorderWidth; } NONCLIENTMETRICSA, *PNONCLIENTMETRICSA, *LPNONCLIENTMETRICSA; typedef struct tagNONCLIENTMETRICSW { UINT cbSize; INT iBorderWidth; INT iScrollWidth; INT iScrollHeight; INT iCaptionWidth; INT iCaptionHeight; LOGFONTW lfCaptionFont; INT iSmCaptionWidth; INT iSmCaptionHeight; LOGFONTW lfSmCaptionFont; INT iMenuWidth; INT iMenuHeight; LOGFONTW lfMenuFont; LOGFONTW lfStatusFont; LOGFONTW lfMessageFont; INT iPaddedBorderWidth; } NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, *LPNONCLIENTMETRICSW; DECL_WINELIB_TYPE_AW(NONCLIENTMETRICS) DECL_WINELIB_TYPE_AW(PNONCLIENTMETRICS) DECL_WINELIB_TYPE_AW(LPNONCLIENTMETRICS) typedef struct tagICONMETRICSA { UINT cbSize; int iHorzSpacing; int iVertSpacing; int iTitleWrap; LOGFONTA lfFont; } ICONMETRICSA, *PICONMETRICSA, *LPICONMETRICSA; typedef struct tagICONMETRICSW { UINT cbSize; int iHorzSpacing; int iVertSpacing; int iTitleWrap; LOGFONTW lfFont; } ICONMETRICSW, *PICONMETRICSW, *LPICONMETRICSW; DECL_WINELIB_TYPE_AW(ICONMETRICS) DECL_WINELIB_TYPE_AW(PICONMETRICS) DECL_WINELIB_TYPE_AW(LPICONMETRICS) typedef struct tagUPDATELAYEREDWINDOWINFO { DWORD cbSize; HDC hdcDst; POINT const* pptDst; SIZE const* psize; HDC hdcSrc; POINT const* pptSrc; COLORREF crKey; BLENDFUNCTION const* pblend; DWORD dwFlags; RECT const* prcDirty; } UPDATELAYEREDWINDOWINFO, *PUPDATELAYEREDWINDOWINFO; #endif /* defined(_WINGDI_) && !defined(NOGDI) */ #define ARW_BOTTOMLEFT __MSABI_LONG(0x0000) #define ARW_BOTTOMRIGHT __MSABI_LONG(0x0001) #define ARW_TOPLEFT __MSABI_LONG(0x0002) #define ARW_TOPRIGHT __MSABI_LONG(0x0003) #define ARW_STARTMASK __MSABI_LONG(0x0003) #define ARW_STARTRIGHT __MSABI_LONG(0x0001) #define ARW_STARTTOP __MSABI_LONG(0x0002) #define ARW_LEFT __MSABI_LONG(0x0000) #define ARW_RIGHT __MSABI_LONG(0x0000) #define ARW_UP __MSABI_LONG(0x0004) #define ARW_DOWN __MSABI_LONG(0x0004) #define ARW_HIDE __MSABI_LONG(0x0008) typedef struct tagMINIMIZEDMETRICS { UINT cbSize; int iWidth; int iHorzGap; int iVertGap; int iArrange; } MINIMIZEDMETRICS, *PMINIMIZEDMETRICS, *LPMINIMIZEDMETRICS; /* Window affinity */ #define WDA_NONE 0x0 #define WDA_MONITOR 0x1 /* Window scrolling */ #define SW_SCROLLCHILDREN 0x0001 #define SW_INVALIDATE 0x0002 #define SW_ERASE 0x0004 /* CreateWindow() coordinates */ #define CW_USEDEFAULT ((INT)0x80000000) /* ChildWindowFromPointEx Flags */ #define CWP_ALL 0x0000 #define CWP_SKIPINVISIBLE 0x0001 #define CWP_SKIPDISABLED 0x0002 #define CWP_SKIPTRANSPARENT 0x0004 /* PeekMessage() options */ #define PM_NOREMOVE 0x0000 #define PM_REMOVE 0x0001 #define PM_NOYIELD 0x0002 #define PM_QS_INPUT (QS_INPUT << 16) #define PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16) #define PM_QS_PAINT (QS_PAINT << 16) #define PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16) /* SetTimer() limits */ #define USER_TIMER_MINIMUM 0x0000000A #define USER_TIMER_MAXIMUM 0x7FFFFFFF /* SetCoalescableTimer() tolerances */ #define TIMERV_DEFAULT_COALESCING 0 #define TIMERV_NO_COALESCING 0xFFFFFFFF #define TIMERV_COALESCING_MIN 1 #define TIMERV_COALESCING_MAX 0x7FFFFFF5 /* AnimateWindow() flags */ #define AW_SLIDE 0x00040000 #define AW_ACTIVATE 0x00020000 #define AW_BLEND 0x00080000 #define AW_HIDE 0x00010000 #define AW_CENTER 0x00000010 #define AW_HOR_POSITIVE 0x00000001 #define AW_HOR_NEGATIVE 0x00000002 #define AW_VER_POSITIVE 0x00000004 #define AW_VER_NEGATIVE 0x00000008 /* FlashWindowEx() flags */ #define FLASHW_STOP 0x00000000 #define FLASHW_CAPTION 0x00000001 #define FLASHW_TRAY 0x00000002 #define FLASHW_ALL (FLASHW_CAPTION|FLASHW_TRAY) #define FLASHW_TIMER 0x00000004 #define FLASHW_TIMERNOFG 0x0000000C typedef struct { UINT cbSize; HWND hwnd; DWORD dwFlags; UINT uCount; DWORD dwTimeout; } FLASHWINFO, *PFLASHWINFO; /* SetLayeredWindowAttributes() flags */ #define LWA_COLORKEY 0x00000001 #define LWA_ALPHA 0x00000002 /* UpdateLayeredWindow() flags */ #define ULW_COLORKEY 0x00000001 #define ULW_ALPHA 0x00000002 #define ULW_OPAQUE 0x00000004 #define ULW_EX_NORESIZE 0x00000008 /* SetWindowPos() and WINDOWPOS flags */ #define SWP_NOSIZE 0x0001 #define SWP_NOMOVE 0x0002 #define SWP_NOZORDER 0x0004 #define SWP_NOREDRAW 0x0008 #define SWP_NOACTIVATE 0x0010 #define SWP_FRAMECHANGED 0x0020 /* The frame changed: send WM_NCCALCSIZE */ #define SWP_SHOWWINDOW 0x0040 #define SWP_HIDEWINDOW 0x0080 #define SWP_NOCOPYBITS 0x0100 #define SWP_NOOWNERZORDER 0x0200 /* Don't do owner Z ordering */ #define SWP_DRAWFRAME SWP_FRAMECHANGED #define SWP_NOREPOSITION SWP_NOOWNERZORDER #define SWP_NOSENDCHANGING 0x0400 #define SWP_DEFERERASE 0x2000 #define SWP_ASYNCWINDOWPOS 0x4000 /* undocumented SWP flags - from SDK 3.1 */ #define SWP_NOCLIENTSIZE 0x0800 #define SWP_NOCLIENTMOVE 0x1000 #define SWP_STATECHANGED 0x8000 #define HWND_DESKTOP ((HWND)0) #define HWND_BROADCAST ((HWND)0xffff) /* SetWindowPos() hwndInsertAfter field values */ #define HWND_TOP ((HWND)0) #define HWND_BOTTOM ((HWND)1) #define HWND_TOPMOST ((HWND)-1) #define HWND_NOTOPMOST ((HWND)-2) #define HWND_MESSAGE ((HWND)-3) /* GetDCEx flags */ #define DCX_WINDOW 0x00000001 #define DCX_CACHE 0x00000002 #define DCX_NORESETATTRS 0x00000004 #define DCX_CLIPCHILDREN 0x00000008 #define DCX_CLIPSIBLINGS 0x00000010 #define DCX_PARENTCLIP 0x00000020 #define DCX_EXCLUDERGN 0x00000040 #define DCX_INTERSECTRGN 0x00000080 #define DCX_EXCLUDEUPDATE 0x00000100 #define DCX_INTERSECTUPDATE 0x00000200 #define DCX_LOCKWINDOWUPDATE 0x00000400 #define DCX_USESTYLE 0x00010000 #define DCX_NORECOMPUTE 0x00100000 #define DCX_VALIDATE 0x00200000 /* for GetMenuDefaultItem */ #define GMDI_USEDISABLED __MSABI_LONG(0x0001) #define GMDI_GOINTOPOPUPS __MSABI_LONG(0x0002) /* DrawText() flags */ #define DT_TOP 0x00000000 #define DT_LEFT 0x00000000 #define DT_CENTER 0x00000001 #define DT_RIGHT 0x00000002 #define DT_VCENTER 0x00000004 #define DT_BOTTOM 0x00000008 #define DT_WORDBREAK 0x00000010 #define DT_SINGLELINE 0x00000020 #define DT_EXPANDTABS 0x00000040 #define DT_TABSTOP 0x00000080 #define DT_NOCLIP 0x00000100 #define DT_EXTERNALLEADING 0x00000200 #define DT_CALCRECT 0x00000400 #define DT_NOPREFIX 0x00000800 #define DT_INTERNAL 0x00001000 #define DT_EDITCONTROL 0x00002000 #define DT_PATH_ELLIPSIS 0x00004000 #define DT_END_ELLIPSIS 0x00008000 #define DT_MODIFYSTRING 0x00010000 #define DT_RTLREADING 0x00020000 #define DT_WORD_ELLIPSIS 0x00040000 #define DT_NOFULLWIDTHCHARBREAK 0x00080000 #define DT_HIDEPREFIX 0x00100000 #define DT_PREFIXONLY 0x00200000 /* DrawCaption()/DrawCaptionTemp() flags */ #define DC_ACTIVE 0x0001 #define DC_SMALLCAP 0x0002 #define DC_ICON 0x0004 #define DC_TEXT 0x0008 #define DC_INBUTTON 0x0010 #define DC_GRADIENT 0x0020 #define DC_BUTTONS 0x1000 /* DrawEdge() flags */ #define BDR_RAISEDOUTER 0x0001 #define BDR_SUNKENOUTER 0x0002 #define BDR_RAISEDINNER 0x0004 #define BDR_SUNKENINNER 0x0008 #define BDR_OUTER 0x0003 #define BDR_INNER 0x000c #define BDR_RAISED 0x0005 #define BDR_SUNKEN 0x000a #define EDGE_RAISED (BDR_RAISEDOUTER | BDR_RAISEDINNER) #define EDGE_SUNKEN (BDR_SUNKENOUTER | BDR_SUNKENINNER) #define EDGE_ETCHED (BDR_SUNKENOUTER | BDR_RAISEDINNER) #define EDGE_BUMP (BDR_RAISEDOUTER | BDR_SUNKENINNER) /* border flags */ #define BF_LEFT 0x0001 #define BF_TOP 0x0002 #define BF_RIGHT 0x0004 #define BF_BOTTOM 0x0008 #define BF_DIAGONAL 0x0010 #define BF_MIDDLE 0x0800 /* Fill in the middle */ #define BF_SOFT 0x1000 /* For softer buttons */ #define BF_ADJUST 0x2000 /* Calculate the space left over */ #define BF_FLAT 0x4000 /* For flat rather than 3D borders */ #define BF_MONO 0x8000 /* For monochrome borders */ #define BF_TOPLEFT (BF_TOP | BF_LEFT) #define BF_TOPRIGHT (BF_TOP | BF_RIGHT) #define BF_BOTTOMLEFT (BF_BOTTOM | BF_LEFT) #define BF_BOTTOMRIGHT (BF_BOTTOM | BF_RIGHT) #define BF_RECT (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM) #define BF_DIAGONAL_ENDTOPRIGHT (BF_DIAGONAL | BF_TOP | BF_RIGHT) #define BF_DIAGONAL_ENDTOPLEFT (BF_DIAGONAL | BF_TOP | BF_LEFT) #define BF_DIAGONAL_ENDBOTTOMLEFT (BF_DIAGONAL | BF_BOTTOM | BF_LEFT) #define BF_DIAGONAL_ENDBOTTOMRIGHT (BF_DIAGONAL | BF_BOTTOM | BF_RIGHT) /* DrawFrameControl() uType's */ #define DFC_CAPTION 1 #define DFC_MENU 2 #define DFC_SCROLL 3 #define DFC_BUTTON 4 #define DFC_POPUPMENU 5 /* uState's */ #define DFCS_CAPTIONCLOSE 0x0000 #define DFCS_CAPTIONMIN 0x0001 #define DFCS_CAPTIONMAX 0x0002 #define DFCS_CAPTIONRESTORE 0x0003 #define DFCS_CAPTIONHELP 0x0004 /* Windows 95 only */ #define DFCS_MENUARROW 0x0000 #define DFCS_MENUCHECK 0x0001 #define DFCS_MENUBULLET 0x0002 #define DFCS_MENUARROWRIGHT 0x0004 #define DFCS_SCROLLUP 0x0000 #define DFCS_SCROLLDOWN 0x0001 #define DFCS_SCROLLLEFT 0x0002 #define DFCS_SCROLLRIGHT 0x0003 #define DFCS_SCROLLCOMBOBOX 0x0005 #define DFCS_SCROLLSIZEGRIP 0x0008 #define DFCS_SCROLLSIZEGRIPRIGHT 0x0010 #define DFCS_BUTTONCHECK 0x0000 #define DFCS_BUTTONRADIOIMAGE 0x0001 #define DFCS_BUTTONRADIOMASK 0x0002 /* to draw nonsquare button */ #define DFCS_BUTTONRADIO 0x0004 #define DFCS_BUTTON3STATE 0x0008 #define DFCS_BUTTONPUSH 0x0010 /* additional state of the control */ #define DFCS_INACTIVE 0x0100 #define DFCS_PUSHED 0x0200 #define DFCS_CHECKED 0x0400 #define DFCS_TRANSPARENT 0x0800 #define DFCS_HOT 0x1000 #define DFCS_ADJUSTRECT 0x2000 /* exclude surrounding edge */ #define DFCS_FLAT 0x4000 #define DFCS_MONO 0x8000 /* Image type */ #define DST_COMPLEX 0x0000 #define DST_TEXT 0x0001 #define DST_PREFIXTEXT 0x0002 #define DST_ICON 0x0003 #define DST_BITMAP 0x0004 /* State type */ #define DSS_NORMAL 0x0000 #define DSS_UNION 0x0010 /* Gray string appearance */ #define DSS_DISABLED 0x0020 #define DSS_DEFAULT 0x0040 /* Make it bold */ #define DSS_MONO 0x0080 #define DSS_HIDEPREFIX 0x0200 #define DSS_PREFIXONLY 0x0400 #define DSS_RIGHT 0x8000 /* UserObjectInformation classes */ #define UOI_FLAGS 1 #define UOI_NAME 2 #define UOI_TYPE 3 #define UOI_USER_SID 4 /* Sent as the lParam of a WM_DRAWITEM message to instruct how an * owner drawn control is to be drawn */ typedef struct tagDRAWITEMSTRUCT { UINT CtlType; /* Type of control (ODT_* flags from "winuser.h") */ UINT CtlID; /* Control ID */ UINT itemID; /* Menu item ID */ UINT itemAction; /* Action to perform (ODA_* flags from "winuser.h") */ UINT itemState; /* Item state (ODS_* flags from "winuser.h") */ HWND hwndItem; /* Control window */ HDC hDC; /* Device context to draw to */ RECT rcItem; /* Position of the control in hDC */ ULONG_PTR itemData; /* Extra data added by the application, if any */ } DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT; typedef struct tagMEASUREITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemWidth; UINT itemHeight; ULONG_PTR itemData; } MEASUREITEMSTRUCT, *PMEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT; typedef struct tagDELETEITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; HWND hwndItem; ULONG_PTR itemData; } DELETEITEMSTRUCT, *PDELETEITEMSTRUCT, *LPDELETEITEMSTRUCT; typedef struct tagCOMPAREITEMSTRUCT { UINT CtlType; UINT CtlID; HWND hwndItem; UINT itemID1; ULONG_PTR itemData1; UINT itemID2; ULONG_PTR itemData2; DWORD dwLocaleId; } COMPAREITEMSTRUCT, *PCOMPAREITEMSTRUCT, *LPCOMPAREITEMSTRUCT; /* WM_KEYUP/DOWN/CHAR HIWORD(lParam) flags */ #define KF_EXTENDED 0x0100 #define KF_DLGMODE 0x0800 #define KF_MENUMODE 0x1000 #define KF_ALTDOWN 0x2000 #define KF_REPEAT 0x4000 #define KF_UP 0x8000 /* MapVirtualKey translation types */ #define MAPVK_VK_TO_VSC 0 #define MAPVK_VSC_TO_VK 1 #define MAPVK_VK_TO_CHAR 2 #define MAPVK_VSC_TO_VK_EX 3 #define MAPVK_VK_TO_VSC_EX 4 typedef struct tagTRACKMOUSEEVENT { DWORD cbSize; DWORD dwFlags; HWND hwndTrack; DWORD dwHoverTime; } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT; /* Queue status flags */ #define QS_KEY 0x0001 #define QS_MOUSEMOVE 0x0002 #define QS_MOUSEBUTTON 0x0004 #define QS_MOUSE (QS_MOUSEMOVE | QS_MOUSEBUTTON) #define QS_POSTMESSAGE 0x0008 #define QS_TIMER 0x0010 #define QS_PAINT 0x0020 #define QS_SENDMESSAGE 0x0040 #define QS_HOTKEY 0x0080 #define QS_ALLPOSTMESSAGE 0x0100 #define QS_RAWINPUT 0x0400 #define QS_INPUT (QS_MOUSE | QS_KEY | QS_RAWINPUT) #define QS_ALLEVENTS (QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY) #define QS_ALLINPUT (QS_ALLEVENTS | QS_SENDMESSAGE) /* Extra (undocumented) queue wake bits - see "Undoc. Windows" */ #define QS_SMRESULT 0x8000 /* InSendMessageEx flags */ #define ISMEX_NOSEND 0x00000000 #define ISMEX_SEND 0x00000001 #define ISMEX_NOTIFY 0x00000002 #define ISMEX_CALLBACK 0x00000004 #define ISMEX_REPLIED 0x00000008 #define DDL_READWRITE 0x0000 #define DDL_READONLY 0x0001 #define DDL_HIDDEN 0x0002 #define DDL_SYSTEM 0x0004 #define DDL_DIRECTORY 0x0010 #define DDL_ARCHIVE 0x0020 #define DDL_POSTMSGS 0x2000 #define DDL_DRIVES 0x4000 #define DDL_EXCLUSIVE 0x8000 /* Shell hook values */ #define HSHELL_WINDOWCREATED 1 #define HSHELL_WINDOWDESTROYED 2 #define HSHELL_ACTIVATESHELLWINDOW 3 #define HSHELL_WINDOWACTIVATED 4 #define HSHELL_GETMINRECT 5 #define HSHELL_REDRAW 6 #define HSHELL_TASKMAN 7 #define HSHELL_LANGUAGE 8 #define HSHELL_SYSMENU 9 #define HSHELL_ENDTASK 10 #define HSHELL_ACCESSIBILITYSTATE 11 #define HSHELL_APPCOMMAND 12 #define HSHELL_WINDOWREPLACED 13 #define HSHELL_WINDOWREPLACING 14 #define HSHELL_HIGHBIT 0x8000 #define HSHELL_FLASH (HSHELL_REDRAW|HSHELL_HIGHBIT) #define HSHELL_RUDEAPPACTIVATED (HSHELL_WINDOWACTIVATED|HSHELL_HIGHBIT) /* App commands */ #define APPCOMMAND_BROWSER_BACKWARD 1 #define APPCOMMAND_BROWSER_FORWARD 2 #define APPCOMMAND_BROWSER_REFRESH 3 #define APPCOMMAND_BROWSER_STOP 4 #define APPCOMMAND_BROWSER_SEARCH 5 #define APPCOMMAND_BROWSER_FAVORITES 6 #define APPCOMMAND_BROWSER_HOME 7 #define APPCOMMAND_VOLUME_MUTE 8 #define APPCOMMAND_VOLUME_DOWN 9 #define APPCOMMAND_VOLUME_UP 10 #define APPCOMMAND_MEDIA_NEXTTRACK 11 #define APPCOMMAND_MEDIA_PREVIOUSTRACK 12 #define APPCOMMAND_MEDIA_STOP 13 #define APPCOMMAND_MEDIA_PLAY_PAUSE 14 #define APPCOMMAND_LAUNCH_MAIL 15 #define APPCOMMAND_LAUNCH_MEDIA_SELECT 16 #define APPCOMMAND_LAUNCH_APP1 17 #define APPCOMMAND_LAUNCH_APP2 18 #define APPCOMMAND_BASS_DOWN 19 #define APPCOMMAND_BASS_BOOST 20 #define APPCOMMAND_BASS_UP 21 #define APPCOMMAND_TREBLE_DOWN 22 #define APPCOMMAND_TREBLE_UP 23 #define APPCOMMAND_MICROPHONE_VOLUME_MUTE 24 #define APPCOMMAND_MICROPHONE_VOLUME_DOWN 25 #define APPCOMMAND_MICROPHONE_VOLUME_UP 26 #define APPCOMMAND_HELP 27 #define APPCOMMAND_FIND 28 #define APPCOMMAND_NEW 29 #define APPCOMMAND_OPEN 30 #define APPCOMMAND_CLOSE 31 #define APPCOMMAND_SAVE 32 #define APPCOMMAND_PRINT 33 #define APPCOMMAND_UNDO 34 #define APPCOMMAND_REDO 35 #define APPCOMMAND_COPY 36 #define APPCOMMAND_CUT 37 #define APPCOMMAND_PASTE 38 #define APPCOMMAND_REPLY_TO_MAIL 39 #define APPCOMMAND_FORWARD_MAIL 40 #define APPCOMMAND_SEND_MAIL 41 #define APPCOMMAND_SPELL_CHECK 42 #define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE 43 #define APPCOMMAND_MIC_ON_OFF_TOGGLE 44 #define APPCOMMAND_CORRECTION_LIST 45 #define APPCOMMAND_MEDIA_PLAY 46 #define APPCOMMAND_MEDIA_PAUSE 47 #define APPCOMMAND_MEDIA_RECORD 48 #define APPCOMMAND_MEDIA_FAST_FORWARD 49 #define APPCOMMAND_MEDIA_REWIND 50 #define APPCOMMAND_MEDIA_CHANNEL_UP 51 #define APPCOMMAND_MEDIA_CHANNEL_DOWN 52 #define APPCOMMAND_DELETE 53 #define APPCOMMAND_DWM_FLIP3D 54 #define FAPPCOMMAND_MOUSE 0x8000 #define FAPPCOMMAND_KEY 0 #define FAPPCOMMAND_OEM 0x1000 #define FAPPCOMMAND_MASK 0xF000 #define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) & ~FAPPCOMMAND_MASK)) #define GET_DEVICE_LPARAM(lParam) ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK)) #define GET_MOUSEORKEY_LPARAM GET_DEVICE_LPARAM #define GET_FLAGS_LPARAM(lParam) (LOWORD(lParam)) #define GET_KEYSTATE_LPARAM(lParam) GET_FLAGS_LPARAM(lParam) /* types of LoadImage */ #define IMAGE_BITMAP 0 #define IMAGE_ICON 1 #define IMAGE_CURSOR 2 #define IMAGE_ENHMETAFILE 3 /* loadflags to LoadImage */ #define LR_DEFAULTCOLOR 0x0000 #define LR_MONOCHROME 0x0001 #define LR_COLOR 0x0002 #define LR_COPYRETURNORG 0x0004 #define LR_COPYDELETEORG 0x0008 #define LR_LOADFROMFILE 0x0010 #define LR_LOADTRANSPARENT 0x0020 #define LR_DEFAULTSIZE 0x0040 #define LR_VGA_COLOR 0x0080 #define LR_LOADMAP3DCOLORS 0x1000 #define LR_CREATEDIBSECTION 0x2000 #define LR_COPYFROMRESOURCE 0x4000 #define LR_SHARED 0x8000 /* Flags for DrawIconEx. */ #define DI_MASK 0x0001 #define DI_IMAGE 0x0002 #define DI_NORMAL (DI_MASK | DI_IMAGE) #define DI_COMPAT 0x0004 #define DI_DEFAULTSIZE 0x0008 #define DI_NOMIRROR 0x0010 /* RegisterDeviceNotification stuff */ typedef PVOID HDEVNOTIFY; typedef HDEVNOTIFY *PHDEVNOTIFY; #define DEVICE_NOTIFY_WINDOW_HANDLE 0x00000000 /* used for GetWindowInfo() */ #define WS_ACTIVECAPTION 0x0001 typedef struct tagWINDOWINFO { DWORD cbSize; RECT rcWindow; RECT rcClient; DWORD dwStyle; DWORD dwExStyle; DWORD dwWindowStatus; UINT cxWindowBorders; UINT cyWindowBorders; ATOM atomWindowType; WORD wCreatorVersion; } WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO; /* used for GetTitleBarInfo() */ #define CCHILDREN_TITLEBAR 5 typedef struct tagTITLEBARINFO { DWORD cbSize; RECT rcTitleBar; DWORD rgstate[CCHILDREN_TITLEBAR+1]; } TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO; /* used by GetLastInputInfo */ typedef struct tagLASTINPUTINFO { UINT cbSize; DWORD dwTime; } LASTINPUTINFO, *PLASTINPUTINFO; /* used by GetAltTabInfo */ typedef struct { DWORD cbSize; INT cItems; INT cColumns; INT cRows; INT iColFocus; INT iRowFocus; INT cxItem; INT cyItem; POINT ptStart; } ALTTABINFO, *PALTTABINFO, *LPALTTABINFO; /* SetWinEventHook() flags */ #define WINEVENT_OUTOFCONTEXT 0x0 #define WINEVENT_SKIPOWNTHREAD 0x1 #define WINEVENT_SKIPOWNPROCESS 0x2 #define WINEVENT_INCONTEXT 0x4 #define ENDSESSION_LOGOFF 0x80000000 /* Object Id's */ #define CHILDID_SELF 0 #define INDEXID_OBJECT 0 #define INDEXID_CONTAINER 0 /* System object Id's */ #define OBJID_WINDOW 0 #define OBJID_SYSMENU -1 #define OBJID_TITLEBAR -2 #define OBJID_MENU -3 #define OBJID_CLIENT -4 #define OBJID_VSCROLL -5 #define OBJID_HSCROLL -6 #define OBJID_SIZEGRIP -7 #define OBJID_CARET -8 #define OBJID_CURSOR -9 #define OBJID_ALERT -10 #define OBJID_SOUND -11 #define OBJID_QUERYCLASSNAMEIDX -12 #define OBJID_NATIVEOM -16 /* User event Id limits */ #define EVENT_MIN 0x00000001 #define EVENT_MAX 0x7FFFFFFF /* System events */ #define EVENT_SYSTEM_SOUND 0x01 #define EVENT_SYSTEM_ALERT 0x02 #define EVENT_SYSTEM_FOREGROUND 0x03 #define EVENT_SYSTEM_MENUSTART 0x04 #define EVENT_SYSTEM_MENUEND 0x05 #define EVENT_SYSTEM_MENUPOPUPSTART 0x06 #define EVENT_SYSTEM_MENUPOPUPEND 0x07 #define EVENT_SYSTEM_CAPTURESTART 0x08 #define EVENT_SYSTEM_CAPTUREEND 0x09 #define EVENT_SYSTEM_MOVESIZESTART 0x0A #define EVENT_SYSTEM_MOVESIZEEND 0x0B #define EVENT_SYSTEM_CONTEXTHELPSTART 0x0C #define EVENT_SYSTEM_CONTEXTHELPEND 0x0D #define EVENT_SYSTEM_DRAGDROPSTART 0x0E #define EVENT_SYSTEM_DRAGDROPEND 0x0F #define EVENT_SYSTEM_DIALOGSTART 0x10 #define EVENT_SYSTEM_DIALOGEND 0x11 #define EVENT_SYSTEM_SCROLLINGSTART 0x12 #define EVENT_SYSTEM_SCROLLINGEND 0x13 #define EVENT_SYSTEM_SWITCHSTART 0x14 #define EVENT_SYSTEM_SWITCHEND 0x15 #define EVENT_SYSTEM_MINIMIZESTART 0x16 #define EVENT_SYSTEM_MINIMIZEEND 0x17 /* Console events */ #define EVENT_CONSOLE_CARET 0x4001 #define EVENT_CONSOLE_UPDATE_REGION 0x4002 #define EVENT_CONSOLE_UPDATE_SIMPLE 0x4003 #define EVENT_CONSOLE_UPDATE_SCROLL 0x4004 #define EVENT_CONSOLE_LAYOUT 0x4005 #define EVENT_CONSOLE_START_APPLICATION 0x4006 #define EVENT_CONSOLE_END_APPLICATION 0x4007 #define CONSOLE_APPLICATION_16BIT 0x1 #define CONSOLE_CARET_SELECTION 0x1 #define CONSOLE_CARET_VISIBLE 0x2 /* Object events */ #define EVENT_OBJECT_CREATE 0x8000 #define EVENT_OBJECT_DESTROY 0x8001 #define EVENT_OBJECT_SHOW 0x8002 #define EVENT_OBJECT_HIDE 0x8003 #define EVENT_OBJECT_REORDER 0x8004 #define EVENT_OBJECT_FOCUS 0x8005 #define EVENT_OBJECT_SELECTION 0x8006 #define EVENT_OBJECT_SELECTIONADD 0x8007 #define EVENT_OBJECT_SELECTIONREMOVE 0x8008 #define EVENT_OBJECT_SELECTIONWITHIN 0x8009 #define EVENT_OBJECT_STATECHANGE 0x800A #define EVENT_OBJECT_LOCATIONCHANGE 0x800B #define EVENT_OBJECT_NAMECHANGE 0x800C #define EVENT_OBJECT_DESCRIPTIONCHANGE 0x800D #define EVENT_OBJECT_VALUECHANGE 0x800E #define EVENT_OBJECT_PARENTCHANGE 0x800F #define EVENT_OBJECT_HELPCHANGE 0x8010 #define EVENT_OBJECT_DEFACTIONCHANGE 0x8011 #define EVENT_OBJECT_ACCELERATORCHANGE 0x8012 /* Sound events */ #define SOUND_SYSTEM_STARTUP 1 #define SOUND_SYSTEM_SHUTDOWN 2 #define SOUND_SYSTEM_BEEP 3 #define SOUND_SYSTEM_ERROR 4 #define SOUND_SYSTEM_QUESTION 5 #define SOUND_SYSTEM_WARNING 6 #define SOUND_SYSTEM_INFORMATION 7 #define SOUND_SYSTEM_MAXIMIZE 8 #define SOUND_SYSTEM_MINIMIZE 9 #define SOUND_SYSTEM_RESTOREUP 10 #define SOUND_SYSTEM_RESTOREDOWN 11 #define SOUND_SYSTEM_APPSTART 12 #define SOUND_SYSTEM_FAULT 13 #define SOUND_SYSTEM_APPEND 14 #define SOUND_SYSTEM_MENUCOMMAND 15 #define SOUND_SYSTEM_MENUPOPUP 16 #define CSOUND_SYSTEM 16 /* Alert events */ #define ALERT_SYSTEM_INFORMATIONAL 1 #define ALERT_SYSTEM_WARNING 2 #define ALERT_SYSTEM_ERROR 3 #define ALERT_SYSTEM_QUERY 4 #define ALERT_SYSTEM_CRITICAL 5 #define CALERT_SYSTEM 6 /* System state flags */ #define STATE_SYSTEM_UNAVAILABLE 0x00000001 #define STATE_SYSTEM_SELECTED 0x00000002 #define STATE_SYSTEM_FOCUSED 0x00000004 #define STATE_SYSTEM_PRESSED 0x00000008 #define STATE_SYSTEM_CHECKED 0x00000010 #define STATE_SYSTEM_MIXED 0x00000020 #define STATE_SYSTEM_INDETERMINATE STATE_SYSTEM_MIXED #define STATE_SYSTEM_READONLY 0x00000040 #define STATE_SYSTEM_HOTTRACKED 0x00000080 #define STATE_SYSTEM_DEFAULT 0x00000100 #define STATE_SYSTEM_EXPANDED 0x00000200 #define STATE_SYSTEM_COLLAPSED 0x00000400 #define STATE_SYSTEM_BUSY 0x00000800 #define STATE_SYSTEM_FLOATING 0x00001000 #define STATE_SYSTEM_MARQUEED 0x00002000 #define STATE_SYSTEM_ANIMATED 0x00004000 #define STATE_SYSTEM_INVISIBLE 0x00008000 #define STATE_SYSTEM_OFFSCREEN 0x00010000 #define STATE_SYSTEM_SIZEABLE 0x00020000 #define STATE_SYSTEM_MOVEABLE 0x00040000 #define STATE_SYSTEM_SELFVOICING 0x00080000 #define STATE_SYSTEM_FOCUSABLE 0x00100000 #define STATE_SYSTEM_SELECTABLE 0x00200000 #define STATE_SYSTEM_LINKED 0x00400000 #define STATE_SYSTEM_TRAVERSED 0x00800000 #define STATE_SYSTEM_MULTISELECTABLE 0x01000000 #define STATE_SYSTEM_EXTSELECTABLE 0x02000000 #define STATE_SYSTEM_ALERT_LOW 0x04000000 #define STATE_SYSTEM_ALERT_MEDIUM 0x08000000 #define STATE_SYSTEM_ALERT_HIGH 0x10000000 #define STATE_SYSTEM_PROTECTED 0x20000000 #define STATE_SYSTEM_VALID 0x3FFFFFFF /* Lock codes for LockSetForegroundWindow */ #define LSFW_LOCK 1 #define LSFW_UNLOCK 2 /* Values for AllowSetForegroundWindow */ #define ASFW_ANY ((DWORD)-1) #define EnumTaskWindows(handle,proc,lparam) \ EnumThreadWindows(handle,proc,lparam) #define OemToAnsiA OemToCharA #define OemToAnsiW OemToCharW #define OemToAnsi WINELIB_NAME_AW(OemToAnsi) #define OemToAnsiBuffA OemToCharBuffA #define OemToAnsiBuffW OemToCharBuffW #define OemToAnsiBuff WINELIB_NAME_AW(OemToAnsiBuff) #define AnsiToOemA CharToOemA #define AnsiToOemW CharToOemW #define AnsiToOem WINELIB_NAME_AW(AnsiToOem) #define AnsiToOemBuffA CharToOemBuffA #define AnsiToOemBuffW CharToOemBuffW #define AnsiToOemBuff WINELIB_NAME_AW(AnsiToOemBuff) /* ChangeWindowMessageFilter flags */ #define MSGFLT_ADD 1 #define MSGFLT_REMOVE 2 /* ChangeWindowMessageFilterEx defines */ #define MSGFLTINFO_NONE 0 #define MSGFLTINFO_ALREADYALLOWED_FORWND 1 #define MSGFLTINFO_ALREADYDISALLOWED_FORWND 2 #define MSGFLTINFO_ALLOWED_HIGHER 3 typedef struct tagCHANGEFILTERSTRUCT { DWORD cbSize; DWORD ExtStatus; } CHANGEFILTERSTRUCT, *PCHANGEFILTERSTRUCT; /* Actions for ChangeWindowMessageFilterEx */ #define MSGFLT_RESET 0 #define MSGFLT_ALLOW 1 #define MSGFLT_DISALLOW 2 #define USER_DEFAULT_SCREEN_DPI 96 typedef enum tagAR_STATE { AR_ENABLED = 0x0, AR_DISABLED = 0x1, AR_SUPPRESSED = 0x2, AR_REMOTESESSION = 0x4, AR_MULTIMON = 0x8, AR_NOSENSOR = 0x10, AR_NOT_SUPPORTED = 0x20, AR_DOCKED = 0x40, AR_LAPTOP = 0x80 } AR_STATE, *PAR_STATE; typedef enum ORIENTATION_PREFERENCE { ORIENTATION_PREFERENCE_NONE = 0x0, ORIENTATION_PREFERENCE_LANDSCAPE = 0x1, ORIENTATION_PREFERENCE_PORTRAIT = 0x2, ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4, ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 0x8 } ORIENTATION_PREFERENCE; /* Touch input definitions */ DECLARE_HANDLE(HTOUCHINPUT); typedef struct tagTOUCHINPUT { LONG x; LONG y; HANDLE hSource; DWORD dwID; DWORD dwFlags; DWORD dwMask; DWORD dwTime; ULONG_PTR dwExtraInfo; DWORD cxContact; DWORD cyContact; } TOUCHINPUT, *PTOUCHINPUT; typedef TOUCHINPUT const * PCTOUCHINPUT; /* Gesture definitions */ DECLARE_HANDLE(HGESTUREINFO); typedef struct tagGESTUREINFO { UINT cbSize; DWORD dwFlags; DWORD dwID; HWND hwndTarget; POINTS ptsLocation; DWORD dwInstanceID; DWORD dwSequenceID; ULONGLONG ullArguments; UINT cbExtraArgs; } GESTUREINFO, *PGESTUREINFO; typedef GESTUREINFO const * PCGESTUREINFO; #define POINTER_DEVICE_PRODUCT_STRING_MAX 520 typedef enum tagPOINTER_DEVICE_TYPE { POINTER_DEVICE_TYPE_INTEGRATED_PEN = 0x00000001, POINTER_DEVICE_TYPE_EXTERNAL_PEN = 0x00000002, POINTER_DEVICE_TYPE_TOUCH = 0x00000003, POINTER_DEVICE_TYPE_TOUCH_PAD = 0x00000004, POINTER_DEVICE_TYPE_MAX = 0xFFFFFFFF } POINTER_DEVICE_TYPE; typedef struct tagPOINTER_DEVICE_INFO { DWORD displayOrientation; HANDLE device; POINTER_DEVICE_TYPE pointerDeviceType; HMONITOR monitor; ULONG startingCursorId; USHORT maxActiveContacts; WCHAR productString[POINTER_DEVICE_PRODUCT_STRING_MAX]; } POINTER_DEVICE_INFO; enum tagPOINTER_INPUT_TYPE { PT_POINTER = 1, PT_TOUCH, PT_PEN, PT_MOUSE, PT_TOUCHPAD, }; typedef DWORD POINTER_INPUT_TYPE; typedef struct tagAUDIODESCRIPTION { UINT cbSize; BOOL Enabled; LCID Locale; } AUDIODESCRIPTION, *LPAUDIODESCRIPTION; #if defined(_WINGDI_) && !defined(NOGDI) WINUSERAPI LONG WINAPI ChangeDisplaySettingsA(LPDEVMODEA,DWORD); WINUSERAPI LONG WINAPI ChangeDisplaySettingsW(LPDEVMODEW,DWORD); #define ChangeDisplaySettings WINELIB_NAME_AW(ChangeDisplaySettings) WINUSERAPI LONG WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID); WINUSERAPI LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID); #define ChangeDisplaySettingsEx WINELIB_NAME_AW(ChangeDisplaySettingsEx) WINUSERAPI HDESK WINAPI CreateDesktopA(LPCSTR,LPCSTR,LPDEVMODEA,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES); WINUSERAPI HDESK WINAPI CreateDesktopW(LPCWSTR,LPCWSTR,LPDEVMODEW,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES); #define CreateDesktop WINELIB_NAME_AW(CreateDesktop) WINUSERAPI LONG WINAPI DisplayConfigGetDeviceInfo(DISPLAYCONFIG_DEVICE_INFO_HEADER *); WINUSERAPI BOOL WINAPI EnumDisplayDevicesA(LPCSTR,DWORD,LPDISPLAY_DEVICEA,DWORD); WINUSERAPI BOOL WINAPI EnumDisplayDevicesW(LPCWSTR,DWORD,LPDISPLAY_DEVICEW,DWORD); #define EnumDisplayDevices WINELIB_NAME_AW(EnumDisplayDevices) WINUSERAPI BOOL WINAPI EnumDisplaySettingsA(LPCSTR,DWORD,LPDEVMODEA); WINUSERAPI BOOL WINAPI EnumDisplaySettingsW(LPCWSTR,DWORD,LPDEVMODEW); #define EnumDisplaySettings WINELIB_NAME_AW(EnumDisplaySettings) WINUSERAPI BOOL WINAPI EnumDisplaySettingsExA(LPCSTR,DWORD,LPDEVMODEA,DWORD); WINUSERAPI BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR,DWORD,LPDEVMODEW,DWORD); #define EnumDisplaySettingsEx WINELIB_NAME_AW(EnumDisplaySettingsEx) WINUSERAPI LONG WINAPI GetDisplayConfigBufferSizes(UINT32,UINT32*,UINT32*); WINUSERAPI BOOL WINAPI UpdateLayeredWindow(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD); WINUSERAPI BOOL WINAPI UpdateLayeredWindowIndirect(HWND,UPDATELAYEREDWINDOWINFO const*); #endif /* defined(_WINGDI_) && !defined(NOGDI) */ WINUSERAPI HKL WINAPI ActivateKeyboardLayout(HKL,UINT); WINUSERAPI BOOL WINAPI AddClipboardFormatListener(HWND); WINUSERAPI BOOL WINAPI AdjustWindowRect(LPRECT,DWORD,BOOL); WINUSERAPI BOOL WINAPI AdjustWindowRectEx(LPRECT,DWORD,BOOL,DWORD); WINUSERAPI BOOL WINAPI AdjustWindowRectExForDpi(RECT*,DWORD,BOOL,DWORD,UINT); WINUSERAPI BOOL WINAPI AllowSetForegroundWindow(DWORD); WINUSERAPI BOOL WINAPI AnimateWindow(HWND,DWORD,DWORD); #define AnsiLowerA CharLowerA #define AnsiLowerW CharLowerW #define AnsiLower WINELIB_NAME_AW(AnsiLower) #define AnsiLowerBuffA CharLowerBuffA #define AnsiLowerBuffW CharLowerBuffW #define AnsiLowerBuff WINELIB_NAME_AW(AnsiLowerBuff) #define AnsiNextA CharNextA #define AnsiNextW CharNextW #define AnsiNext WINELIB_NAME_AW(AnsiNext) #define AnsiPrevA CharPrevA #define AnsiPrevW CharPrevW #define AnsiPrev WINELIB_NAME_AW(AnsiPrev) #define AnsiUpperA CharUpperA #define AnsiUpperW CharUpperW #define AnsiUpper WINELIB_NAME_AW(AnsiUpper) #define AnsiUpperBuffA CharUpperBuffA #define AnsiUpperBuffW CharUpperBuffW #define AnsiUpperBuff WINELIB_NAME_AW(AnsiUpperBuff) WINUSERAPI BOOL WINAPI AnyPopup(void); WINUSERAPI BOOL WINAPI AppendMenuA(HMENU,UINT,UINT_PTR,LPCSTR); WINUSERAPI BOOL WINAPI AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR); #define AppendMenu WINELIB_NAME_AW(AppendMenu) WINUSERAPI BOOL WINAPI AreDpiAwarenessContextsEqual(DPI_AWARENESS_CONTEXT,DPI_AWARENESS_CONTEXT); WINUSERAPI UINT WINAPI ArrangeIconicWindows(HWND); WINUSERAPI BOOL WINAPI AttachThreadInput(DWORD,DWORD,BOOL); WINUSERAPI HDWP WINAPI BeginDeferWindowPos(INT); WINUSERAPI HDC WINAPI BeginPaint(HWND,LPPAINTSTRUCT); WINUSERAPI BOOL WINAPI BlockInput(BOOL); WINUSERAPI BOOL WINAPI BringWindowToTop(HWND); WINUSERAPI LONG WINAPI BroadcastSystemMessageA(DWORD,LPDWORD,UINT,WPARAM,LPARAM); WINUSERAPI LONG WINAPI BroadcastSystemMessageW(DWORD,LPDWORD,UINT,WPARAM,LPARAM); #define BroadcastSystemMessage WINELIB_NAME_AW(BroadcastSystemMessage) WINUSERAPI LONG WINAPI BroadcastSystemMessageExA(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO); WINUSERAPI LONG WINAPI BroadcastSystemMessageExW(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO); #define BroadcastSystemMessageEx WINELIB_NAME_AW(BroadcastSystemMessageEx) WINUSERAPI void WINAPI CalcChildScroll(HWND, INT); WINUSERAPI BOOL WINAPI CallMsgFilterA(LPMSG,INT); WINUSERAPI BOOL WINAPI CallMsgFilterW(LPMSG,INT); #define CallMsgFilter WINELIB_NAME_AW(CallMsgFilter) WINUSERAPI LRESULT WINAPI CallNextHookEx(HHOOK,INT,WPARAM,LPARAM); WINUSERAPI LRESULT WINAPI CallWindowProcA(WNDPROC,HWND,UINT,WPARAM,LPARAM); WINUSERAPI LRESULT WINAPI CallWindowProcW(WNDPROC,HWND,UINT,WPARAM,LPARAM); #define CallWindowProc WINELIB_NAME_AW(CallWindowProc) WINUSERAPI WORD WINAPI CascadeWindows(HWND, UINT, const RECT *, UINT, const HWND *); WINUSERAPI BOOL WINAPI ChangeClipboardChain(HWND,HWND); WINUSERAPI BOOL WINAPI ChangeMenuA(HMENU,UINT,LPCSTR,UINT,UINT); WINUSERAPI BOOL WINAPI ChangeMenuW(HMENU,UINT,LPCWSTR,UINT,UINT); #define ChangeMenu WINELIB_NAME_AW(ChangeMenu) WINUSERAPI BOOL WINAPI ChangeWindowMessageFilter(UINT,DWORD); WINUSERAPI BOOL WINAPI ChangeWindowMessageFilterEx(HWND,UINT,DWORD,CHANGEFILTERSTRUCT*); WINUSERAPI LPSTR WINAPI CharLowerA(LPSTR); WINUSERAPI LPWSTR WINAPI CharLowerW(LPWSTR); #define CharLower WINELIB_NAME_AW(CharLower) WINUSERAPI DWORD WINAPI CharLowerBuffA(LPSTR,DWORD); WINUSERAPI DWORD WINAPI CharLowerBuffW(LPWSTR,DWORD); #define CharLowerBuff WINELIB_NAME_AW(CharLowerBuff) WINUSERAPI LPSTR WINAPI CharNextA(LPCSTR); WINUSERAPI LPWSTR WINAPI CharNextW(LPCWSTR); #define CharNext WINELIB_NAME_AW(CharNext) WINUSERAPI LPSTR WINAPI CharNextExA(WORD,LPCSTR,DWORD); /* no CharNextExW (doesn't make sense) */ WINUSERAPI LPSTR WINAPI CharPrevA(LPCSTR,LPCSTR); WINUSERAPI LPWSTR WINAPI CharPrevW(LPCWSTR,LPCWSTR); #define CharPrev WINELIB_NAME_AW(CharPrev) WINUSERAPI LPSTR WINAPI CharPrevExA(WORD,LPCSTR,LPCSTR,DWORD); /* no CharPrevExW (doesn't make sense) */ WINUSERAPI LPSTR WINAPI CharUpperA(LPSTR); WINUSERAPI LPWSTR WINAPI CharUpperW(LPWSTR); #define CharUpper WINELIB_NAME_AW(CharUpper) WINUSERAPI DWORD WINAPI CharUpperBuffA(LPSTR,DWORD); WINUSERAPI DWORD WINAPI CharUpperBuffW(LPWSTR,DWORD); #define CharUpperBuff WINELIB_NAME_AW(CharUpperBuff) WINUSERAPI BOOL WINAPI CharToOemA(LPCSTR,LPSTR); WINUSERAPI BOOL WINAPI CharToOemW(LPCWSTR,LPSTR); #define CharToOem WINELIB_NAME_AW(CharToOem) WINUSERAPI BOOL WINAPI CharToOemBuffA(LPCSTR,LPSTR,DWORD); WINUSERAPI BOOL WINAPI CharToOemBuffW(LPCWSTR,LPSTR,DWORD); #define CharToOemBuff WINELIB_NAME_AW(CharToOemBuff) WINUSERAPI BOOL WINAPI CheckDlgButton(HWND,INT,UINT); WINUSERAPI DWORD WINAPI CheckMenuItem(HMENU,UINT,UINT); WINUSERAPI BOOL WINAPI CheckMenuRadioItem(HMENU,UINT,UINT,UINT,UINT); WINUSERAPI BOOL WINAPI CheckRadioButton(HWND,int,int,int); WINUSERAPI HWND WINAPI ChildWindowFromPoint(HWND,POINT); WINUSERAPI HWND WINAPI ChildWindowFromPointEx(HWND,POINT,UINT); WINUSERAPI BOOL WINAPI ClientToScreen(HWND,LPPOINT); WINUSERAPI BOOL WINAPI ClipCursor(const RECT*); WINUSERAPI BOOL WINAPI CloseClipboard(void); WINUSERAPI BOOL WINAPI CloseDesktop(HDESK); WINUSERAPI BOOL WINAPI CloseTouchInputHandle(HTOUCHINPUT); WINUSERAPI BOOL WINAPI CloseWindow(HWND); WINUSERAPI BOOL WINAPI CloseWindowStation(HWINSTA); WINUSERAPI INT WINAPI CopyAcceleratorTableA(HACCEL,LPACCEL,INT); WINUSERAPI INT WINAPI CopyAcceleratorTableW(HACCEL,LPACCEL,INT); #define CopyAcceleratorTable WINELIB_NAME_AW(CopyAcceleratorTable) #define CopyCursor(cur) ((HCURSOR)CopyIcon((HICON)(cur))) WINUSERAPI HICON WINAPI CopyIcon(HICON); WINUSERAPI HANDLE WINAPI CopyImage(HANDLE,UINT,INT,INT,UINT); WINUSERAPI BOOL WINAPI CopyRect(RECT*,const RECT*); WINUSERAPI INT WINAPI CountClipboardFormats(void); WINUSERAPI HACCEL WINAPI CreateAcceleratorTableA(LPACCEL,INT); WINUSERAPI HACCEL WINAPI CreateAcceleratorTableW(LPACCEL,INT); #define CreateAcceleratorTable WINELIB_NAME_AW(CreateAcceleratorTable) WINUSERAPI HICON WINAPI CreateIconIndirect(PICONINFO); WINUSERAPI BOOL WINAPI CreateCaret(HWND,HBITMAP,INT,INT); WINUSERAPI HCURSOR WINAPI CreateCursor(HINSTANCE,INT,INT,INT,INT,LPCVOID,LPCVOID); #define CreateDialogA(inst,ptr,hwnd,dlg) CreateDialogParamA(inst,ptr,hwnd,dlg,0) #define CreateDialogW(inst,ptr,hwnd,dlg) CreateDialogParamW(inst,ptr,hwnd,dlg,0) #define CreateDialog WINELIB_NAME_AW(CreateDialog) #define CreateDialogIndirectA(inst,ptr,hwnd,dlg) CreateDialogIndirectParamA(inst,ptr,hwnd,dlg,0) #define CreateDialogIndirectW(inst,ptr,hwnd,dlg) CreateDialogIndirectParamW(inst,ptr,hwnd,dlg,0) #define CreateDialogIndirect WINELIB_NAME_AW(CreateDialogIndirect) WINUSERAPI HWND WINAPI CreateDialogIndirectParamA(HINSTANCE,LPCDLGTEMPLATEA,HWND,DLGPROC,LPARAM); WINUSERAPI HWND WINAPI CreateDialogIndirectParamW(HINSTANCE,LPCDLGTEMPLATEW,HWND,DLGPROC,LPARAM); #define CreateDialogIndirectParam WINELIB_NAME_AW(CreateDialogIndirectParam) WINUSERAPI HWND WINAPI CreateDialogParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM); WINUSERAPI HWND WINAPI CreateDialogParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM); #define CreateDialogParam WINELIB_NAME_AW(CreateDialogParam) WINUSERAPI HICON WINAPI CreateIcon(HINSTANCE,INT,INT,BYTE,BYTE,LPCVOID,LPCVOID); WINUSERAPI HICON WINAPI CreateIconFromResource(LPBYTE,UINT,BOOL,DWORD); WINUSERAPI HICON WINAPI CreateIconFromResourceEx(LPBYTE,UINT,BOOL,DWORD,INT,INT,UINT); WINUSERAPI HMENU WINAPI CreateMenu(void); WINUSERAPI HMENU WINAPI CreatePopupMenu(void); #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) #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) #define CreateWindow WINELIB_NAME_AW(CreateWindow) WINUSERAPI HWND WINAPI CreateWindowExA(DWORD,LPCSTR,LPCSTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,LPVOID); WINUSERAPI HWND WINAPI CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,LPVOID); #define CreateWindowEx WINELIB_NAME_AW(CreateWindowEx) WINUSERAPI HWINSTA WINAPI CreateWindowStationA(LPCSTR,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES); WINUSERAPI HWINSTA WINAPI CreateWindowStationW(LPCWSTR,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES); #define CreateWindowStation WINELIB_NAME_AW(CreateWindowStation) WINUSERAPI HWND WINAPI CreateMDIWindowA(LPCSTR,LPCSTR,DWORD,INT,INT,INT,INT,HWND,HINSTANCE,LPARAM); WINUSERAPI HWND WINAPI CreateMDIWindowW(LPCWSTR,LPCWSTR,DWORD,INT,INT,INT,INT,HWND,HINSTANCE,LPARAM); #define CreateMDIWindow WINELIB_NAME_AW(CreateMDIWindow) WINUSERAPI LRESULT WINAPI DefDlgProcA(HWND,UINT,WPARAM,LPARAM); WINUSERAPI LRESULT WINAPI DefDlgProcW(HWND,UINT,WPARAM,LPARAM); #define DefDlgProc WINELIB_NAME_AW(DefDlgProc) WINUSERAPI HDWP WINAPI DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,UINT); WINUSERAPI LRESULT WINAPI DefFrameProcA(HWND,HWND,UINT,WPARAM,LPARAM); WINUSERAPI LRESULT WINAPI DefFrameProcW(HWND,HWND,UINT,WPARAM,LPARAM); #define DefFrameProc WINELIB_NAME_AW(DefFrameProc) #define DefHookProc(code,wparam,lparam,phhook) CallNextHookEx(*(phhook),code,wparam,lparam) WINUSERAPI LRESULT WINAPI DefMDIChildProcA(HWND,UINT,WPARAM,LPARAM); WINUSERAPI LRESULT WINAPI DefMDIChildProcW(HWND,UINT,WPARAM,LPARAM); #define DefMDIChildProc WINELIB_NAME_AW(DefMDIChildProc) WINUSERAPI LRESULT WINAPI DefRawInputProc(PRAWINPUT*,INT,UINT); WINUSERAPI LRESULT WINAPI DefWindowProcA(HWND,UINT,WPARAM,LPARAM); WINUSERAPI LRESULT WINAPI DefWindowProcW(HWND,UINT,WPARAM,LPARAM); #define DefWindowProc WINELIB_NAME_AW(DefWindowProc) WINUSERAPI BOOL WINAPI DeleteMenu(HMENU,UINT,UINT); WINUSERAPI BOOL WINAPI DeregisterShellHookWindow(HWND); WINUSERAPI BOOL WINAPI DestroyAcceleratorTable(HACCEL); WINUSERAPI BOOL WINAPI DestroyCaret(void); WINUSERAPI BOOL WINAPI DestroyCursor(HCURSOR); WINUSERAPI BOOL WINAPI DestroyIcon(HICON); WINUSERAPI BOOL WINAPI DestroyMenu(HMENU); WINUSERAPI BOOL WINAPI DestroyWindow(HWND); #define DialogBoxA(inst,template,owner,func) DialogBoxParamA(inst,template,owner,func,0) #define DialogBoxW(inst,template,owner,func) DialogBoxParamW(inst,template,owner,func,0) #define DialogBox WINELIB_NAME_AW(DialogBox) #define DialogBoxIndirectA(inst,template,owner,func) DialogBoxIndirectParamA(inst,template,owner,func,0) #define DialogBoxIndirectW(inst,template,owner,func) DialogBoxIndirectParamW(inst,template,owner,func,0) #define DialogBoxIndirect WINELIB_NAME_AW(DialogBoxIndirect) WINUSERAPI INT_PTR WINAPI DialogBoxIndirectParamA(HINSTANCE,LPCDLGTEMPLATEA,HWND,DLGPROC,LPARAM); WINUSERAPI INT_PTR WINAPI DialogBoxIndirectParamW(HINSTANCE,LPCDLGTEMPLATEW,HWND,DLGPROC,LPARAM); #define DialogBoxIndirectParam WINELIB_NAME_AW(DialogBoxIndirectParam) WINUSERAPI INT_PTR WINAPI DialogBoxParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM); WINUSERAPI INT_PTR WINAPI DialogBoxParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM); #define DialogBoxParam WINELIB_NAME_AW(DialogBoxParam) WINUSERAPI VOID WINAPI DisableProcessWindowsGhosting(VOID); WINUSERAPI LRESULT WINAPI DispatchMessageA(const MSG*); WINUSERAPI LRESULT WINAPI DispatchMessageW(const MSG*); #define DispatchMessage WINELIB_NAME_AW(DispatchMessage) WINUSERAPI INT WINAPI DlgDirListA(HWND,LPSTR,INT,INT,UINT); WINUSERAPI INT WINAPI DlgDirListW(HWND,LPWSTR,INT,INT,UINT); #define DlgDirList WINELIB_NAME_AW(DlgDirList) WINUSERAPI INT WINAPI DlgDirListComboBoxA(HWND,LPSTR,INT,INT,UINT); WINUSERAPI INT WINAPI DlgDirListComboBoxW(HWND,LPWSTR,INT,INT,UINT); #define DlgDirListComboBox WINELIB_NAME_AW(DlgDirListComboBox) WINUSERAPI BOOL WINAPI DlgDirSelectComboBoxExA(HWND,LPSTR,INT,INT); WINUSERAPI BOOL WINAPI DlgDirSelectComboBoxExW(HWND,LPWSTR,INT,INT); #define DlgDirSelectComboBoxEx WINELIB_NAME_AW(DlgDirSelectComboBoxEx) WINUSERAPI BOOL WINAPI DlgDirSelectExA(HWND,LPSTR,INT,INT); WINUSERAPI BOOL WINAPI DlgDirSelectExW(HWND,LPWSTR,INT,INT); #define DlgDirSelectEx WINELIB_NAME_AW(DlgDirSelectEx) WINUSERAPI BOOL WINAPI DragDetect(HWND,POINT); WINUSERAPI DWORD WINAPI DragObject(HWND,HWND,UINT,ULONG_PTR,HCURSOR); WINUSERAPI BOOL WINAPI DrawAnimatedRects(HWND,int,const RECT*,const RECT*); WINUSERAPI BOOL WINAPI DrawCaption(HWND,HDC,const RECT*,UINT); WINUSERAPI BOOL WINAPI DrawCaptionTempA(HWND,HDC,const RECT*,HFONT,HICON,LPCSTR,UINT); WINUSERAPI BOOL WINAPI DrawCaptionTempW(HWND,HDC,const RECT*,HFONT,HICON,LPCWSTR,UINT); #define DrawCaptionTemp WINELIB_NAME_AW(DrawCaptionTemp) WINUSERAPI BOOL WINAPI DrawEdge(HDC,LPRECT,UINT,UINT); WINUSERAPI BOOL WINAPI DrawFocusRect(HDC,const RECT*); WINUSERAPI BOOL WINAPI DrawFrameControl(HDC,LPRECT,UINT,UINT); WINUSERAPI BOOL WINAPI DrawIcon(HDC,INT,INT,HICON); WINUSERAPI BOOL WINAPI DrawIconEx(HDC,INT,INT,HICON,INT,INT,UINT,HBRUSH,UINT); WINUSERAPI BOOL WINAPI DrawMenuBar(HWND); WINUSERAPI BOOL WINAPI DrawStateA(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT); WINUSERAPI BOOL WINAPI DrawStateW(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT); #define DrawState WINELIB_NAME_AW(DrawState) WINUSERAPI INT WINAPI DrawTextA(HDC,LPCSTR,INT,LPRECT,UINT); WINUSERAPI INT WINAPI DrawTextW(HDC,LPCWSTR,INT,LPRECT,UINT); #define DrawText WINELIB_NAME_AW(DrawText) WINUSERAPI INT WINAPI DrawTextExA(HDC,LPSTR,INT,LPRECT,UINT,LPDRAWTEXTPARAMS); WINUSERAPI INT WINAPI DrawTextExW(HDC,LPWSTR,INT,LPRECT,UINT,LPDRAWTEXTPARAMS); #define DrawTextEx WINELIB_NAME_AW(DrawTextEx) WINUSERAPI BOOL WINAPI EmptyClipboard(void); WINUSERAPI BOOL WINAPI EnableMenuItem(HMENU,UINT,UINT); WINUSERAPI BOOL WINAPI EnableMouseInPointer(BOOL); WINUSERAPI BOOL WINAPI EnableScrollBar(HWND,UINT,UINT); WINUSERAPI BOOL WINAPI EnableWindow(HWND,BOOL); WINUSERAPI BOOL WINAPI EndDeferWindowPos(HDWP); WINUSERAPI BOOL WINAPI EndDialog(HWND,INT_PTR); WINUSERAPI BOOL WINAPI EndMenu(void); WINUSERAPI BOOL WINAPI EndPaint(HWND,const PAINTSTRUCT*); WINUSERAPI BOOL WINAPI EnumChildWindows(HWND,WNDENUMPROC,LPARAM); WINUSERAPI UINT WINAPI EnumClipboardFormats(UINT); WINUSERAPI BOOL WINAPI EnumDesktopsA(HWINSTA,DESKTOPENUMPROCA,LPARAM); WINUSERAPI BOOL WINAPI EnumDesktopsW(HWINSTA,DESKTOPENUMPROCW,LPARAM); #define EnumDesktops WINELIB_NAME_AW(EnumDesktops) WINUSERAPI BOOL WINAPI EnumDesktopWindows(HDESK,WNDENUMPROC,LPARAM); WINUSERAPI BOOL WINAPI EnumDisplayMonitors(HDC,LPRECT,MONITORENUMPROC,LPARAM); WINUSERAPI INT WINAPI EnumPropsA(HWND,PROPENUMPROCA); WINUSERAPI INT WINAPI EnumPropsW(HWND,PROPENUMPROCW); #define EnumProps WINELIB_NAME_AW(EnumProps) WINUSERAPI INT WINAPI EnumPropsExA(HWND,PROPENUMPROCEXA,LPARAM); WINUSERAPI INT WINAPI EnumPropsExW(HWND,PROPENUMPROCEXW,LPARAM); #define EnumPropsEx WINELIB_NAME_AW(EnumPropsEx) WINUSERAPI BOOL WINAPI EnumThreadWindows(DWORD,WNDENUMPROC,LPARAM); WINUSERAPI BOOL WINAPI EnumWindows(WNDENUMPROC,LPARAM); WINUSERAPI BOOL WINAPI EnumWindowStationsA(WINSTAENUMPROCA,LPARAM); WINUSERAPI BOOL WINAPI EnumWindowStationsW(WINSTAENUMPROCW,LPARAM); #define EnumWindowStations WINELIB_NAME_AW(EnumWindowStations) WINUSERAPI INT WINAPI ExcludeUpdateRgn(HDC,HWND); #define ExitWindows(a,b) ExitWindowsEx(EWX_LOGOFF,0xffffffff) WINUSERAPI BOOL WINAPI ExitWindowsEx(UINT,DWORD); WINUSERAPI INT WINAPI FillRect(HDC,const RECT*,HBRUSH); WINUSERAPI HWND WINAPI FindWindowA(LPCSTR,LPCSTR); WINUSERAPI HWND WINAPI FindWindowW(LPCWSTR,LPCWSTR); #define FindWindow WINELIB_NAME_AW(FindWindow) WINUSERAPI HWND WINAPI FindWindowExA(HWND,HWND,LPCSTR,LPCSTR); WINUSERAPI HWND WINAPI FindWindowExW(HWND,HWND,LPCWSTR,LPCWSTR); #define FindWindowEx WINELIB_NAME_AW(FindWindowEx) WINUSERAPI BOOL WINAPI FlashWindow(HWND,BOOL); WINUSERAPI BOOL WINAPI FlashWindowEx(PFLASHWINFO); WINUSERAPI INT WINAPI FrameRect(HDC,const RECT*,HBRUSH); WINUSERAPI HWND WINAPI GetActiveWindow(void); WINUSERAPI BOOL WINAPI GetAltTabInfoA(HWND,INT,PALTTABINFO,LPSTR,UINT); WINUSERAPI BOOL WINAPI GetAltTabInfoW(HWND,INT,PALTTABINFO,LPWSTR,UINT); #define GetAltTabInfo WINELIB_NAME_AW(GetAltTabInfo) WINUSERAPI HWND WINAPI GetAncestor(HWND,UINT); WINUSERAPI DWORD WINAPI GetAppCompatFlags(HTASK); WINUSERAPI SHORT WINAPI GetAsyncKeyState(INT); WINUSERAPI BOOL WINAPI GetAutoRotationState(AR_STATE*); WINUSERAPI DPI_AWARENESS WINAPI GetAwarenessFromDpiAwarenessContext(DPI_AWARENESS_CONTEXT); WINUSERAPI HWND WINAPI GetCapture(void); WINUSERAPI UINT WINAPI GetCaretBlinkTime(void); WINUSERAPI BOOL WINAPI GetCaretPos(LPPOINT); WINUSERAPI BOOL WINAPI GetClassInfoA(HINSTANCE,LPCSTR,WNDCLASSA *); WINUSERAPI BOOL WINAPI GetClassInfoW(HINSTANCE,LPCWSTR,WNDCLASSW *); #define GetClassInfo WINELIB_NAME_AW(GetClassInfo) WINUSERAPI BOOL WINAPI GetClassInfoExA(HINSTANCE,LPCSTR,WNDCLASSEXA *); WINUSERAPI BOOL WINAPI GetClassInfoExW(HINSTANCE,LPCWSTR,WNDCLASSEXW *); #define GetClassInfoEx WINELIB_NAME_AW(GetClassInfoEx) WINUSERAPI DWORD WINAPI GetClassLongA(HWND,INT); WINUSERAPI DWORD WINAPI GetClassLongW(HWND,INT); #define GetClassLong WINELIB_NAME_AW(GetClassLong) #ifdef _WIN64 WINUSERAPI ULONG_PTR WINAPI GetClassLongPtrA(HWND,INT); WINUSERAPI ULONG_PTR WINAPI GetClassLongPtrW(HWND,INT); #else #define GetClassLongPtrA GetClassLongA #define GetClassLongPtrW GetClassLongW #endif #define GetClassLongPtr WINELIB_NAME_AW(GetClassLongPtr) WINUSERAPI INT WINAPI GetClassNameA(HWND,LPSTR,INT); WINUSERAPI INT WINAPI GetClassNameW(HWND,LPWSTR,INT); #define GetClassName WINELIB_NAME_AW(GetClassName) WINUSERAPI WORD WINAPI GetClassWord(HWND,INT); WINUSERAPI BOOL WINAPI GetClientRect(HWND,LPRECT); WINUSERAPI HANDLE WINAPI GetClipboardData(UINT); WINUSERAPI INT WINAPI GetClipboardFormatNameA(UINT,LPSTR,INT); WINUSERAPI INT WINAPI GetClipboardFormatNameW(UINT,LPWSTR,INT); #define GetClipboardFormatName WINELIB_NAME_AW(GetClipboardFormatName) WINUSERAPI HWND WINAPI GetClipboardOwner(void); WINUSERAPI DWORD WINAPI GetClipboardSequenceNumber(VOID); WINUSERAPI HWND WINAPI GetClipboardViewer(void); WINUSERAPI BOOL WINAPI GetClipCursor(LPRECT); WINUSERAPI BOOL WINAPI GetComboBoxInfo(HWND,PCOMBOBOXINFO); WINUSERAPI HCURSOR WINAPI GetCursor(void); WINUSERAPI BOOL WINAPI GetCursorInfo(PCURSORINFO); WINUSERAPI HCURSOR WINAPI GetCursorFrameInfo(HCURSOR,DWORD,DWORD,DWORD*,DWORD*); WINUSERAPI BOOL WINAPI GetCursorPos(LPPOINT); WINUSERAPI HDC WINAPI GetDC(HWND); WINUSERAPI HDC WINAPI GetDCEx(HWND,HRGN,DWORD); WINUSERAPI HWND WINAPI GetDesktopWindow(void); WINUSERAPI DWORD WINAPI GetDialogBaseUnits(void); WINUSERAPI BOOL WINAPI GetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE*); WINUSERAPI INT WINAPI GetDlgCtrlID(HWND); WINUSERAPI HWND WINAPI GetDlgItem(HWND,INT); WINUSERAPI UINT WINAPI GetDlgItemInt(HWND,INT,BOOL*,BOOL); WINUSERAPI UINT WINAPI GetDlgItemTextA(HWND,INT,LPSTR,INT); WINUSERAPI UINT WINAPI GetDlgItemTextW(HWND,INT,LPWSTR,INT); #define GetDlgItemText WINELIB_NAME_AW(GetDlgItemText) WINUSERAPI UINT WINAPI GetDoubleClickTime(void); WINUSERAPI BOOL WINAPI GetDpiForMonitorInternal(HMONITOR,UINT,UINT*,UINT*); WINUSERAPI UINT WINAPI GetDpiForWindow(HWND); WINUSERAPI UINT WINAPI GetDpiForSystem(void); WINUSERAPI HWND WINAPI GetFocus(void); WINUSERAPI HWND WINAPI GetForegroundWindow(void); WINUSERAPI BOOL WINAPI GetGestureConfig(HWND,DWORD,DWORD,UINT*,GESTURECONFIG*,UINT); WINUSERAPI BOOL WINAPI GetGestureInfo(HGESTUREINFO,PGESTUREINFO); WINUSERAPI BOOL WINAPI GetGUIThreadInfo(DWORD,GUITHREADINFO*); WINUSERAPI DWORD WINAPI GetGuiResources(HANDLE,DWORD); WINUSERAPI BOOL WINAPI GetIconInfo(HICON,PICONINFO); WINUSERAPI BOOL WINAPI GetIconInfoExA(HICON,ICONINFOEXA*); WINUSERAPI BOOL WINAPI GetIconInfoExW(HICON,ICONINFOEXW*); #define GetIconInfoEx WINELIB_NAME_AW(GetIconInfoEx) WINUSERAPI BOOL WINAPI GetInputState(void); WINUSERAPI UINT WINAPI GetInternalWindowPos(HWND,LPRECT,LPPOINT); WINUSERAPI UINT WINAPI GetKBCodePage(void); WINUSERAPI HKL WINAPI GetKeyboardLayout(DWORD); WINUSERAPI UINT WINAPI GetKeyboardLayoutList(INT,HKL *); WINUSERAPI BOOL WINAPI GetKeyboardState(LPBYTE); WINUSERAPI INT WINAPI GetKeyboardType(INT); WINUSERAPI INT WINAPI GetKeyNameTextA(LONG,LPSTR,INT); WINUSERAPI INT WINAPI GetKeyNameTextW(LONG,LPWSTR,INT); #define GetKeyNameText WINELIB_NAME_AW(GetKeyNameText) WINUSERAPI BOOL WINAPI GetKeyboardLayoutNameA(LPSTR); WINUSERAPI BOOL WINAPI GetKeyboardLayoutNameW(LPWSTR); #define GetKeyboardLayoutName WINELIB_NAME_AW(GetKeyboardLayoutName) WINUSERAPI SHORT WINAPI GetKeyState(INT); WINUSERAPI HWND WINAPI GetLastActivePopup(HWND); WINUSERAPI BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO); WINUSERAPI DWORD WINAPI GetListBoxInfo(HWND); WINUSERAPI UINT WINAPI GetRawInputBuffer(PRAWINPUT,PUINT,UINT); WINUSERAPI UINT WINAPI GetRawInputData(HRAWINPUT,UINT,LPVOID,PUINT,UINT); WINUSERAPI UINT WINAPI GetRawInputDeviceInfoA(HANDLE,UINT,LPVOID,PUINT); WINUSERAPI UINT WINAPI GetRawInputDeviceInfoW(HANDLE,UINT,LPVOID,PUINT); #define GetRawInputDeviceInfo WINELIB_NAME_AW(GetRawInputDeviceInfo) WINUSERAPI UINT WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST,PUINT,UINT); WINUSERAPI UINT WINAPI GetRegisteredRawInputDevices(PRAWINPUTDEVICE,PUINT,UINT); WINUSERAPI BOOL WINAPI GetLayeredWindowAttributes(HWND,COLORREF*,BYTE*,DWORD*); WINUSERAPI HMENU WINAPI GetMenu(HWND); WINUSERAPI BOOL WINAPI GetMenuBarInfo(HWND,LONG,LONG,PMENUBARINFO); WINUSERAPI DWORD WINAPI GetMenuCheckMarkDimensions(void); WINUSERAPI DWORD WINAPI GetMenuContextHelpId(HMENU); WINUSERAPI UINT WINAPI GetMenuDefaultItem(HMENU,UINT,UINT); WINUSERAPI BOOL WINAPI GetMenuInfo(HMENU,LPMENUINFO); WINUSERAPI INT WINAPI GetMenuItemCount(HMENU); WINUSERAPI UINT WINAPI GetMenuItemID(HMENU,INT); WINUSERAPI BOOL WINAPI GetMenuItemInfoA(HMENU,UINT,BOOL,MENUITEMINFOA*); WINUSERAPI BOOL WINAPI GetMenuItemInfoW(HMENU,UINT,BOOL,MENUITEMINFOW*); #define GetMenuItemInfo WINELIB_NAME_AW(GetMenuItemInfo) WINUSERAPI BOOL WINAPI GetMenuItemRect(HWND,HMENU,UINT,LPRECT); WINUSERAPI UINT WINAPI GetMenuState(HMENU,UINT,UINT); WINUSERAPI INT WINAPI GetMenuStringA(HMENU,UINT,LPSTR,INT,UINT); WINUSERAPI INT WINAPI GetMenuStringW(HMENU,UINT,LPWSTR,INT,UINT); #define GetMenuString WINELIB_NAME_AW(GetMenuString) WINUSERAPI BOOL WINAPI GetMessageA(LPMSG,HWND,UINT,UINT); WINUSERAPI BOOL WINAPI GetMessageW(LPMSG,HWND,UINT,UINT); #define GetMessage WINELIB_NAME_AW(GetMessage) WINUSERAPI LPARAM WINAPI GetMessageExtraInfo(void); WINUSERAPI DWORD WINAPI GetMessagePos(void); WINUSERAPI LONG WINAPI GetMessageTime(void); WINUSERAPI BOOL WINAPI GetMonitorInfoA(HMONITOR,LPMONITORINFO); WINUSERAPI BOOL WINAPI GetMonitorInfoW(HMONITOR,LPMONITORINFO); #define GetMonitorInfo WINELIB_NAME_AW(GetMonitorInfo) WINUSERAPI HWND WINAPI GetNextDlgGroupItem(HWND,HWND,BOOL); WINUSERAPI HWND WINAPI GetNextDlgTabItem(HWND,HWND,BOOL); #define GetNextWindow GetWindow WINUSERAPI HWND WINAPI GetOpenClipboardWindow(void); WINUSERAPI HWND WINAPI GetParent(HWND); WINUSERAPI BOOL WINAPI GetPhysicalCursorPos(POINT*); WINUSERAPI INT WINAPI GetPriorityClipboardFormat(UINT*,INT); WINUSERAPI BOOL WINAPI GetProcessDefaultLayout(DWORD*); WINUSERAPI BOOL WINAPI GetProcessDpiAwarenessInternal(HANDLE,DPI_AWARENESS*); WINUSERAPI HANDLE WINAPI GetPropA(HWND,LPCSTR); WINUSERAPI HANDLE WINAPI GetPropW(HWND,LPCWSTR); #define GetProp WINELIB_NAME_AW(GetProp) WINUSERAPI DWORD WINAPI GetQueueStatus(UINT); WINUSERAPI BOOL WINAPI GetScrollInfo(HWND,INT,LPSCROLLINFO); WINUSERAPI BOOL WINAPI GetScrollBarInfo(HWND,LONG,LPSCROLLBARINFO); WINUSERAPI INT WINAPI GetScrollPos(HWND,INT); WINUSERAPI BOOL WINAPI GetScrollRange(HWND,INT,LPINT,LPINT); WINUSERAPI HWND WINAPI GetShellWindow(void); WINUSERAPI HMENU WINAPI GetSubMenu(HMENU,INT); WINUSERAPI HBRUSH WINAPI GetSysColorBrush(INT); #define GetSysModalWindow() ((HWND)0) WINUSERAPI HMENU WINAPI GetSystemMenu(HWND,BOOL); WINUSERAPI INT WINAPI GetSystemMetrics(INT); WINUSERAPI INT WINAPI GetSystemMetricsForDpi(INT,UINT); WINUSERAPI DWORD WINAPI GetTabbedTextExtentA(HDC,LPCSTR,INT,INT,const INT*); WINUSERAPI DWORD WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,INT,INT,const INT*); #define GetTabbedTextExtent WINELIB_NAME_AW(GetTabbedTextExtent) WINUSERAPI BOOL WINAPI GetTitleBarInfo(HWND,PTITLEBARINFO); WINUSERAPI HDESK WINAPI GetThreadDesktop(DWORD); WINUSERAPI DPI_AWARENESS_CONTEXT WINAPI GetThreadDpiAwarenessContext(void); WINUSERAPI HWND WINAPI GetTopWindow(HWND); WINUSERAPI BOOL WINAPI GetTouchInputInfo(HTOUCHINPUT,UINT,TOUCHINPUT*,int); WINUSERAPI BOOL WINAPI GetUpdateRect(HWND,LPRECT,BOOL); WINUSERAPI INT WINAPI GetUpdateRgn(HWND,HRGN,BOOL); WINUSERAPI BOOL WINAPI GetUpdatedClipboardFormats(UINT*,UINT,UINT*); WINUSERAPI BOOL WINAPI GetUserObjectInformationA(HANDLE,INT,LPVOID,DWORD,LPDWORD); WINUSERAPI BOOL WINAPI GetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD,LPDWORD); #define GetUserObjectInformation WINELIB_NAME_AW(GetUserObjectInformation) WINUSERAPI BOOL WINAPI GetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD); WINUSERAPI HWND WINAPI GetWindow(HWND,UINT); WINUSERAPI DWORD WINAPI GetWindowContextHelpId(HWND); WINUSERAPI HDC WINAPI GetWindowDC(HWND); WINUSERAPI BOOL WINAPI GetWindowDisplayAffinity(HWND,DWORD*); WINUSERAPI DPI_AWARENESS_CONTEXT WINAPI GetWindowDpiAwarenessContext(HWND); WINUSERAPI BOOL WINAPI GetWindowInfo(HWND, PWINDOWINFO); WINUSERAPI LONG WINAPI GetWindowLongA(HWND,INT); WINUSERAPI LONG WINAPI GetWindowLongW(HWND,INT); #define GetWindowLong WINELIB_NAME_AW(GetWindowLong) #ifdef _WIN64 WINUSERAPI LONG_PTR WINAPI GetWindowLongPtrA(HWND,INT); WINUSERAPI LONG_PTR WINAPI GetWindowLongPtrW(HWND,INT); #else #define GetWindowLongPtrA GetWindowLongA #define GetWindowLongPtrW GetWindowLongW #endif #define GetWindowLongPtr WINELIB_NAME_AW(GetWindowLongPtr) WINUSERAPI UINT WINAPI GetWindowModuleFileNameA(HWND,LPSTR,UINT); WINUSERAPI UINT WINAPI GetWindowModuleFileNameW(HWND,LPWSTR,UINT); #define GetWindowModuleFileName WINELIB_NAME_AW(GetWindowModuleFileName) WINUSERAPI BOOL WINAPI GetWindowPlacement(HWND,LPWINDOWPLACEMENT); WINUSERAPI BOOL WINAPI GetWindowRect(HWND,LPRECT); WINUSERAPI INT WINAPI GetWindowRgnBox(HWND,LPRECT); WINUSERAPI INT WINAPI GetWindowRgn(HWND,HRGN); WINUSERAPI HWINSTA WINAPI GetProcessWindowStation(void); #define GetWindowTask(hwnd) ((HTASK)GetWindowThreadProcessId(hwnd,NULL)) WINUSERAPI INT WINAPI GetWindowTextA(HWND,LPSTR,INT); WINUSERAPI INT WINAPI GetWindowTextW(HWND,LPWSTR,INT); #define GetWindowText WINELIB_NAME_AW(GetWindowText) WINUSERAPI INT WINAPI GetWindowTextLengthA(HWND); WINUSERAPI INT WINAPI GetWindowTextLengthW(HWND); #define GetWindowTextLength WINELIB_NAME_AW(GetWindowTextLength) WINUSERAPI DWORD WINAPI GetWindowThreadProcessId(HWND,LPDWORD); WINUSERAPI WORD WINAPI GetWindowWord(HWND,INT); WINUSERAPI BOOL WINAPI GrayStringA(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,INT,INT,INT,INT,INT); WINUSERAPI BOOL WINAPI GrayStringW(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,INT,INT,INT,INT,INT); #define GrayString WINELIB_NAME_AW(GrayString) WINUSERAPI BOOL WINAPI HideCaret(HWND); WINUSERAPI BOOL WINAPI HiliteMenuItem(HWND,HMENU,UINT,UINT); WINUSERAPI BOOL WINAPI InSendMessage(void); WINUSERAPI DWORD WINAPI InSendMessageEx(LPVOID); WINUSERAPI BOOL WINAPI InsertMenuA(HMENU,UINT,UINT,UINT_PTR,LPCSTR); WINUSERAPI BOOL WINAPI InsertMenuW(HMENU,UINT,UINT,UINT_PTR,LPCWSTR); #define InsertMenu WINELIB_NAME_AW(InsertMenu) WINUSERAPI BOOL WINAPI InsertMenuItemA(HMENU,UINT,BOOL,const MENUITEMINFOA*); WINUSERAPI BOOL WINAPI InsertMenuItemW(HMENU,UINT,BOOL,const MENUITEMINFOW*); #define InsertMenuItem WINELIB_NAME_AW(InsertMenuItem) WINUSERAPI INT WINAPI InternalGetWindowText(HWND,LPWSTR,INT); WINUSERAPI BOOL WINAPI IntersectRect(LPRECT,const RECT*,const RECT*); WINUSERAPI BOOL WINAPI InvalidateRect(HWND,const RECT*,BOOL); WINUSERAPI BOOL WINAPI InvalidateRgn(HWND,HRGN,BOOL); WINUSERAPI BOOL WINAPI InvertRect(HDC,const RECT*); WINUSERAPI BOOL WINAPI IsCharAlphaA(CHAR); WINUSERAPI BOOL WINAPI IsCharAlphaW(WCHAR); #define IsCharAlpha WINELIB_NAME_AW(IsCharAlpha) WINUSERAPI BOOL WINAPI IsCharAlphaNumericA(CHAR); WINUSERAPI BOOL WINAPI IsCharAlphaNumericW(WCHAR); #define IsCharAlphaNumeric WINELIB_NAME_AW(IsCharAlphaNumeric) WINUSERAPI BOOL WINAPI IsCharLowerA(CHAR); WINUSERAPI BOOL WINAPI IsCharLowerW(WCHAR); #define IsCharLower WINELIB_NAME_AW(IsCharLower) WINUSERAPI BOOL WINAPI IsCharUpperA(CHAR); WINUSERAPI BOOL WINAPI IsCharUpperW(WCHAR); #define IsCharUpper WINELIB_NAME_AW(IsCharUpper) WINUSERAPI BOOL WINAPI IsChild(HWND,HWND); WINUSERAPI BOOL WINAPI IsClipboardFormatAvailable(UINT); WINUSERAPI BOOL WINAPI IsDialogMessageA(HWND,LPMSG); WINUSERAPI BOOL WINAPI IsDialogMessageW(HWND,LPMSG); #define IsDialogMessage WINELIB_NAME_AW(IsDialogMessage) WINUSERAPI UINT WINAPI IsDlgButtonChecked(HWND,int); WINUSERAPI BOOL WINAPI IsGUIThread(BOOL); WINUSERAPI BOOL WINAPI IsHungAppWindow(HWND); WINUSERAPI BOOL WINAPI IsIconic(HWND); WINUSERAPI BOOL WINAPI IsMenu(HMENU); WINUSERAPI BOOL WINAPI IsProcessDPIAware(void); WINUSERAPI BOOL WINAPI IsTouchWindow(HWND,PULONG); WINUSERAPI BOOL WINAPI IsValidDpiAwarenessContext(DPI_AWARENESS_CONTEXT); WINUSERAPI BOOL WINAPI IsWinEventHookInstalled(DWORD); WINUSERAPI BOOL WINAPI IsWindow(HWND); WINUSERAPI BOOL WINAPI IsWindowEnabled(HWND); WINUSERAPI BOOL WINAPI IsWindowUnicode(HWND); WINUSERAPI BOOL WINAPI IsWindowVisible(HWND); WINUSERAPI BOOL WINAPI IsZoomed(HWND); WINUSERAPI BOOL WINAPI KillSystemTimer(HWND,UINT_PTR); WINUSERAPI BOOL WINAPI KillTimer(HWND,UINT_PTR); WINUSERAPI HACCEL WINAPI LoadAcceleratorsA(HINSTANCE,LPCSTR); WINUSERAPI HACCEL WINAPI LoadAcceleratorsW(HINSTANCE,LPCWSTR); #define LoadAccelerators WINELIB_NAME_AW(LoadAccelerators) WINUSERAPI HBITMAP WINAPI LoadBitmapA(HINSTANCE,LPCSTR); WINUSERAPI HBITMAP WINAPI LoadBitmapW(HINSTANCE,LPCWSTR); #define LoadBitmap WINELIB_NAME_AW(LoadBitmap) WINUSERAPI HCURSOR WINAPI LoadCursorA(HINSTANCE,LPCSTR); WINUSERAPI HCURSOR WINAPI LoadCursorW(HINSTANCE,LPCWSTR); #define LoadCursor WINELIB_NAME_AW(LoadCursor) WINUSERAPI HCURSOR WINAPI LoadCursorFromFileA(LPCSTR); WINUSERAPI HCURSOR WINAPI LoadCursorFromFileW(LPCWSTR); #define LoadCursorFromFile WINELIB_NAME_AW(LoadCursorFromFile) WINUSERAPI HICON WINAPI LoadIconA(HINSTANCE,LPCSTR); WINUSERAPI HICON WINAPI LoadIconW(HINSTANCE,LPCWSTR); #define LoadIcon WINELIB_NAME_AW(LoadIcon) WINUSERAPI HANDLE WINAPI LoadImageA(HINSTANCE,LPCSTR,UINT,INT,INT,UINT); WINUSERAPI HANDLE WINAPI LoadImageW(HINSTANCE,LPCWSTR,UINT,INT,INT,UINT); #define LoadImage WINELIB_NAME_AW(LoadImage) WINUSERAPI HKL WINAPI LoadKeyboardLayoutA(LPCSTR,UINT); WINUSERAPI HKL WINAPI LoadKeyboardLayoutW(LPCWSTR,UINT); #define LoadKeyboardLayout WINELIB_NAME_AW(LoadKeyboardLayout) WINUSERAPI HMENU WINAPI LoadMenuA(HINSTANCE,LPCSTR); WINUSERAPI HMENU WINAPI LoadMenuW(HINSTANCE,LPCWSTR); #define LoadMenu WINELIB_NAME_AW(LoadMenu) WINUSERAPI HMENU WINAPI LoadMenuIndirectA(LPCVOID); WINUSERAPI HMENU WINAPI LoadMenuIndirectW(LPCVOID); #define LoadMenuIndirect WINELIB_NAME_AW(LoadMenuIndirect) WINUSERAPI INT WINAPI LoadStringA(HINSTANCE,UINT,LPSTR,INT); WINUSERAPI INT WINAPI LoadStringW(HINSTANCE,UINT,LPWSTR,INT); #define LoadString WINELIB_NAME_AW(LoadString) WINUSERAPI BOOL WINAPI LogicalToPhysicalPoint(HWND,POINT*); WINUSERAPI BOOL WINAPI LogicalToPhysicalPointForPerMonitorDPI(HWND,POINT*); WINUSERAPI BOOL WINAPI LockSetForegroundWindow(UINT); WINUSERAPI BOOL WINAPI LockWindowUpdate(HWND); WINUSERAPI BOOL WINAPI LockWorkStation(void); WINUSERAPI INT WINAPI LookupIconIdFromDirectory(LPBYTE,BOOL); WINUSERAPI INT WINAPI LookupIconIdFromDirectoryEx(LPBYTE,BOOL,INT,INT,UINT); WINUSERAPI UINT WINAPI MapVirtualKeyA(UINT,UINT); WINUSERAPI UINT WINAPI MapVirtualKeyW(UINT,UINT); #define MapVirtualKey WINELIB_NAME_AW(MapVirtualKey) WINUSERAPI UINT WINAPI MapVirtualKeyExA(UINT,UINT,HKL); WINUSERAPI UINT WINAPI MapVirtualKeyExW(UINT,UINT,HKL); #define MapVirtualKeyEx WINELIB_NAME_AW(MapVirtualKeyEx) WINUSERAPI BOOL WINAPI MapDialogRect(HWND,LPRECT); WINUSERAPI INT WINAPI MapWindowPoints(HWND,HWND,LPPOINT,UINT); WINUSERAPI INT WINAPI MenuItemFromPoint(HWND,HMENU,POINT); WINUSERAPI BOOL WINAPI MessageBeep(UINT); WINUSERAPI INT WINAPI MessageBoxA(HWND,LPCSTR,LPCSTR,UINT); WINUSERAPI INT WINAPI MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT); #define MessageBox WINELIB_NAME_AW(MessageBox) WINUSERAPI INT WINAPI MessageBoxExA(HWND,LPCSTR,LPCSTR,UINT,WORD); WINUSERAPI INT WINAPI MessageBoxExW(HWND,LPCWSTR,LPCWSTR,UINT,WORD); #define MessageBoxEx WINELIB_NAME_AW(MessageBoxEx) WINUSERAPI INT WINAPI MessageBoxIndirectA(LPMSGBOXPARAMSA); WINUSERAPI INT WINAPI MessageBoxIndirectW(LPMSGBOXPARAMSW); #define MessageBoxIndirect WINELIB_NAME_AW(MessageBoxIndirect) WINUSERAPI BOOL WINAPI ModifyMenuA(HMENU,UINT,UINT,UINT_PTR,LPCSTR); WINUSERAPI BOOL WINAPI ModifyMenuW(HMENU,UINT,UINT,UINT_PTR,LPCWSTR); #define ModifyMenu WINELIB_NAME_AW(ModifyMenu) WINUSERAPI HMONITOR WINAPI MonitorFromPoint(POINT,DWORD); WINUSERAPI HMONITOR WINAPI MonitorFromRect(const RECT*,DWORD); WINUSERAPI HMONITOR WINAPI MonitorFromWindow(HWND,DWORD); WINUSERAPI BOOL WINAPI MoveWindow(HWND,INT,INT,INT,INT,BOOL); WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD,DWORD); WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjectsEx(DWORD,const HANDLE*,DWORD,DWORD,DWORD); WINUSERAPI VOID WINAPI NotifyWinEvent(DWORD,HWND,LONG,LONG); WINUSERAPI DWORD WINAPI OemKeyScan(WORD); WINUSERAPI BOOL WINAPI OemToCharA(LPCSTR,LPSTR); WINUSERAPI BOOL WINAPI OemToCharW(LPCSTR,LPWSTR); #define OemToChar WINELIB_NAME_AW(OemToChar) WINUSERAPI BOOL WINAPI OemToCharBuffA(LPCSTR,LPSTR,DWORD); WINUSERAPI BOOL WINAPI OemToCharBuffW(LPCSTR,LPWSTR,DWORD); #define OemToCharBuff WINELIB_NAME_AW(OemToCharBuff) WINUSERAPI BOOL WINAPI OpenClipboard(HWND); WINUSERAPI HDESK WINAPI OpenDesktopA(LPCSTR,DWORD,BOOL,ACCESS_MASK); WINUSERAPI HDESK WINAPI OpenDesktopW(LPCWSTR,DWORD,BOOL,ACCESS_MASK); #define OpenDesktop WINELIB_NAME_AW(OpenDesktop) WINUSERAPI BOOL WINAPI OpenIcon(HWND); WINUSERAPI HDESK WINAPI OpenInputDesktop(DWORD,BOOL,ACCESS_MASK); WINUSERAPI HWINSTA WINAPI OpenWindowStationA(LPCSTR,BOOL,ACCESS_MASK); WINUSERAPI HWINSTA WINAPI OpenWindowStationW(LPCWSTR,BOOL,ACCESS_MASK); #define OpenWindowStation WINELIB_NAME_AW(OpenWindowStation) WINUSERAPI BOOL WINAPI PaintDesktop(HDC); WINUSERAPI BOOL WINAPI PeekMessageA(LPMSG,HWND,UINT,UINT,UINT); WINUSERAPI BOOL WINAPI PeekMessageW(LPMSG,HWND,UINT,UINT,UINT); #define PeekMessage WINELIB_NAME_AW(PeekMessage) WINUSERAPI BOOL WINAPI PhysicalToLogicalPoint(HWND,POINT*); WINUSERAPI BOOL WINAPI PhysicalToLogicalPointForPerMonitorDPI(HWND,POINT*); #define PostAppMessageA(thread,msg,wparam,lparam) PostThreadMessageA((DWORD)(thread),msg,wparam,lparam) #define PostAppMessageW(thread,msg,wparam,lparam) PostThreadMessageW((DWORD)(thread),msg,wparam,lparam) #define PostAppMessage WINELIB_NAME_AW(PostAppMessage) WINUSERAPI BOOL WINAPI PostMessageA(HWND,UINT,WPARAM,LPARAM); WINUSERAPI BOOL WINAPI PostMessageW(HWND,UINT,WPARAM,LPARAM); #define PostMessage WINELIB_NAME_AW(PostMessage) WINUSERAPI void WINAPI PostQuitMessage(INT); WINUSERAPI BOOL WINAPI PostThreadMessageA(DWORD,UINT,WPARAM,LPARAM); WINUSERAPI BOOL WINAPI PostThreadMessageW(DWORD,UINT,WPARAM,LPARAM); #define PostThreadMessage WINELIB_NAME_AW(PostThreadMessage) WINUSERAPI BOOL WINAPI PrintWindow(HWND,HDC,UINT); WINUSERAPI UINT WINAPI PrivateExtractIconExA(LPCSTR,int,HICON*,HICON*,UINT); WINUSERAPI UINT WINAPI PrivateExtractIconExW(LPCWSTR,int,HICON*,HICON*,UINT); WINUSERAPI UINT WINAPI PrivateExtractIconsA(LPCSTR,int,int,int,HICON*,UINT*,UINT,UINT); WINUSERAPI UINT WINAPI PrivateExtractIconsW(LPCWSTR,int,int,int,HICON*,UINT*,UINT,UINT); WINUSERAPI BOOL WINAPI PtInRect(const RECT*,POINT); WINUSERAPI HWND WINAPI RealChildWindowFromPoint(HWND,POINT); WINUSERAPI UINT WINAPI RealGetWindowClassA(HWND,LPSTR,UINT); WINUSERAPI UINT WINAPI RealGetWindowClassW(HWND,LPWSTR,UINT); #define RealGetWindowClass WINELIB_NAME_AW(RealGetWindowClass) WINUSERAPI BOOL WINAPI RedrawWindow(HWND,const RECT*,HRGN,UINT); WINUSERAPI ATOM WINAPI RegisterClassA(const WNDCLASSA *); WINUSERAPI ATOM WINAPI RegisterClassW(const WNDCLASSW *); #define RegisterClass WINELIB_NAME_AW(RegisterClass) WINUSERAPI ATOM WINAPI RegisterClassExA(const WNDCLASSEXA *); WINUSERAPI ATOM WINAPI RegisterClassExW(const WNDCLASSEXW *); #define RegisterClassEx WINELIB_NAME_AW(RegisterClassEx) WINUSERAPI UINT WINAPI RegisterClipboardFormatA(LPCSTR); WINUSERAPI UINT WINAPI RegisterClipboardFormatW(LPCWSTR); #define RegisterClipboardFormat WINELIB_NAME_AW(RegisterClipboardFormat) WINUSERAPI HDEVNOTIFY WINAPI RegisterDeviceNotificationA(HANDLE,LPVOID,DWORD); WINUSERAPI HDEVNOTIFY WINAPI RegisterDeviceNotificationW(HANDLE,LPVOID,DWORD); #define RegisterDeviceNotification WINELIB_NAME_AW(RegisterDeviceNotification) WINUSERAPI BOOL WINAPI RegisterHotKey(HWND,INT,UINT,UINT); WINUSERAPI BOOL WINAPI RegisterPointerDeviceNotifications(HWND,BOOL); WINUSERAPI HPOWERNOTIFY WINAPI RegisterPowerSettingNotification(HANDLE,LPCGUID,DWORD); WINUSERAPI BOOL WINAPI RegisterRawInputDevices(PRAWINPUTDEVICE,UINT,UINT); WINUSERAPI BOOL WINAPI RegisterShellHookWindow(HWND); WINUSERAPI BOOL WINAPI RegisterTouchWindow(HWND,ULONG); WINUSERAPI UINT WINAPI RegisterWindowMessageA(LPCSTR); WINUSERAPI UINT WINAPI RegisterWindowMessageW(LPCWSTR); #define RegisterWindowMessage WINELIB_NAME_AW(RegisterWindowMessage) WINUSERAPI BOOL WINAPI ReleaseCapture(void); WINUSERAPI INT WINAPI ReleaseDC(HWND,HDC); WINUSERAPI BOOL WINAPI RemoveClipboardFormatListener(HWND); WINUSERAPI BOOL WINAPI RemoveMenu(HMENU,UINT,UINT); WINUSERAPI HANDLE WINAPI RemovePropA(HWND,LPCSTR); WINUSERAPI HANDLE WINAPI RemovePropW(HWND,LPCWSTR); #define RemoveProp WINELIB_NAME_AW(RemoveProp) WINUSERAPI BOOL WINAPI ReplyMessage(LRESULT); WINUSERAPI BOOL WINAPI ScreenToClient(HWND,LPPOINT); WINUSERAPI VOID WINAPI ScrollChildren(HWND,UINT,WPARAM,LPARAM); WINUSERAPI BOOL WINAPI ScrollDC(HDC,INT,INT,const RECT*,const RECT*,HRGN,LPRECT); WINUSERAPI BOOL WINAPI ScrollWindow(HWND,INT,INT,const RECT*,const RECT*); WINUSERAPI INT WINAPI ScrollWindowEx(HWND,INT,INT,const RECT*,const RECT*,HRGN,LPRECT,UINT); WINUSERAPI LRESULT WINAPI SendDlgItemMessageA(HWND,INT,UINT,WPARAM,LPARAM); WINUSERAPI LRESULT WINAPI SendDlgItemMessageW(HWND,INT,UINT,WPARAM,LPARAM); #define SendDlgItemMessage WINELIB_NAME_AW(SendDlgItemMessage) WINUSERAPI UINT WINAPI SendInput(UINT,LPINPUT,int); WINUSERAPI LRESULT WINAPI SendMessageA(HWND,UINT,WPARAM,LPARAM); WINUSERAPI LRESULT WINAPI SendMessageW(HWND,UINT,WPARAM,LPARAM); #define SendMessage WINELIB_NAME_AW(SendMessage) WINUSERAPI BOOL WINAPI SendMessageCallbackA(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,ULONG_PTR); WINUSERAPI BOOL WINAPI SendMessageCallbackW(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,ULONG_PTR); #define SendMessageCallback WINELIB_NAME_AW(SendMessageCallback) WINUSERAPI LRESULT WINAPI SendMessageTimeoutA(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR); WINUSERAPI LRESULT WINAPI SendMessageTimeoutW(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR); #define SendMessageTimeout WINELIB_NAME_AW(SendMessageTimeout) WINUSERAPI BOOL WINAPI SendNotifyMessageA(HWND,UINT,WPARAM,LPARAM); WINUSERAPI BOOL WINAPI SendNotifyMessageW(HWND,UINT,WPARAM,LPARAM); #define SendNotifyMessage WINELIB_NAME_AW(SendNotifyMessage) WINUSERAPI HWND WINAPI SetActiveWindow(HWND); WINUSERAPI HWND WINAPI SetCapture(HWND); WINUSERAPI BOOL WINAPI SetCaretBlinkTime(UINT); WINUSERAPI BOOL WINAPI SetCaretPos(INT,INT); WINUSERAPI DWORD WINAPI SetClassLongA(HWND,INT,LONG); WINUSERAPI DWORD WINAPI SetClassLongW(HWND,INT,LONG); #define SetClassLong WINELIB_NAME_AW(SetClassLong) #ifdef _WIN64 WINUSERAPI ULONG_PTR WINAPI SetClassLongPtrA(HWND,INT,LONG_PTR); WINUSERAPI ULONG_PTR WINAPI SetClassLongPtrW(HWND,INT,LONG_PTR); #else #define SetClassLongPtrA SetClassLongA #define SetClassLongPtrW SetClassLongW #endif #define SetClassLongPtr WINELIB_NAME_AW(SetClassLongPtr) WINUSERAPI WORD WINAPI SetClassWord(HWND,INT,WORD); WINUSERAPI HANDLE WINAPI SetClipboardData(UINT,HANDLE); WINUSERAPI HWND WINAPI SetClipboardViewer(HWND); WINUSERAPI UINT_PTR WINAPI SetCoalescableTimer(HWND,UINT_PTR,UINT,TIMERPROC,ULONG); WINUSERAPI HCURSOR WINAPI SetCursor(HCURSOR); WINUSERAPI BOOL WINAPI SetCursorPos(INT,INT); WINUSERAPI VOID WINAPI SetDebugErrorLevel(DWORD); WINUSERAPI BOOL WINAPI SetDeskWallPaper(LPCSTR); WINUSERAPI BOOL WINAPI SetDlgItemInt(HWND,INT,UINT,BOOL); WINUSERAPI BOOL WINAPI SetDlgItemTextA(HWND,INT,LPCSTR); WINUSERAPI BOOL WINAPI SetDlgItemTextW(HWND,INT,LPCWSTR); #define SetDlgItemText WINELIB_NAME_AW(SetDlgItemText) WINUSERAPI BOOL WINAPI SetDoubleClickTime(UINT); WINUSERAPI HWND WINAPI SetFocus(HWND); WINUSERAPI BOOL WINAPI SetForegroundWindow(HWND); WINUSERAPI BOOL WINAPI SetGestureConfig(HWND,DWORD,UINT,PGESTURECONFIG,UINT); WINUSERAPI void WINAPI SetInternalWindowPos(HWND,UINT,LPRECT,LPPOINT); WINUSERAPI BOOL WINAPI SetKeyboardState(LPBYTE); WINUSERAPI VOID WINAPI SetLastErrorEx(DWORD,DWORD); WINUSERAPI BOOL WINAPI SetLayeredWindowAttributes(HWND,COLORREF,BYTE,DWORD); WINUSERAPI BOOL WINAPI SetMenu(HWND,HMENU); WINUSERAPI BOOL WINAPI SetMenuContextHelpId(HMENU,DWORD); WINUSERAPI BOOL WINAPI SetMenuDefaultItem(HMENU,UINT,UINT); WINUSERAPI BOOL WINAPI SetMenuInfo(HMENU,LPCMENUINFO); WINUSERAPI BOOL WINAPI SetMenuItemBitmaps(HMENU,UINT,UINT,HBITMAP,HBITMAP); WINUSERAPI BOOL WINAPI SetMenuItemInfoA(HMENU,UINT,BOOL,const MENUITEMINFOA*); WINUSERAPI BOOL WINAPI SetMenuItemInfoW(HMENU,UINT,BOOL,const MENUITEMINFOW*); #define SetMenuItemInfo WINELIB_NAME_AW(SetMenuItemInfo) WINUSERAPI LPARAM WINAPI SetMessageExtraInfo(LPARAM); WINUSERAPI BOOL WINAPI SetMessageQueue(INT); WINUSERAPI HWND WINAPI SetParent(HWND,HWND); WINUSERAPI BOOL WINAPI SetPhysicalCursorPos(INT,INT); WINUSERAPI BOOL WINAPI SetProcessDPIAware(void); WINUSERAPI BOOL WINAPI SetProcessDefaultLayout(DWORD); WINUSERAPI BOOL WINAPI SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT); WINUSERAPI BOOL WINAPI SetProcessDpiAwarenessInternal(DPI_AWARENESS); WINUSERAPI BOOL WINAPI SetProcessWindowStation(HWINSTA); WINUSERAPI BOOL WINAPI SetPropA(HWND,LPCSTR,HANDLE); WINUSERAPI BOOL WINAPI SetPropW(HWND,LPCWSTR,HANDLE); #define SetProp WINELIB_NAME_AW(SetProp) WINUSERAPI INT WINAPI SetScrollInfo(HWND,INT,const SCROLLINFO*,BOOL); WINUSERAPI INT WINAPI SetScrollPos(HWND,INT,INT,BOOL); WINUSERAPI BOOL WINAPI SetScrollRange(HWND,INT,INT,INT,BOOL); #define SetSysModalWindow(hwnd) ((HWND)0) WINUSERAPI BOOL WINAPI SetSystemCursor(HCURSOR,DWORD); WINUSERAPI BOOL WINAPI SetSystemMenu(HWND,HMENU); WINUSERAPI UINT_PTR WINAPI SetSystemTimer(HWND,UINT_PTR,UINT,TIMERPROC); WINUSERAPI BOOL WINAPI SetThreadDesktop(HDESK); WINUSERAPI DPI_AWARENESS_CONTEXT WINAPI SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT); WINUSERAPI UINT_PTR WINAPI SetTimer(HWND,UINT_PTR,UINT,TIMERPROC); WINUSERAPI BOOL WINAPI SetUserObjectInformationA(HANDLE,INT,LPVOID,DWORD); WINUSERAPI BOOL WINAPI SetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD); #define SetUserObjectInformation WINELIB_NAME_AW(SetUserObjectInformation) WINUSERAPI BOOL WINAPI SetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR); WINUSERAPI BOOL WINAPI SetWindowContextHelpId(HWND,DWORD); WINUSERAPI BOOL WINAPI SetWindowDisplayAffinity(HWND,DWORD); WINUSERAPI LONG WINAPI SetWindowLongA(HWND,INT,LONG); WINUSERAPI LONG WINAPI SetWindowLongW(HWND,INT,LONG); #define SetWindowLong WINELIB_NAME_AW(SetWindowLong) #ifdef _WIN64 WINUSERAPI LONG_PTR WINAPI SetWindowLongPtrA(HWND,INT,LONG_PTR); WINUSERAPI LONG_PTR WINAPI SetWindowLongPtrW(HWND,INT,LONG_PTR); #else #define SetWindowLongPtrA SetWindowLongA #define SetWindowLongPtrW SetWindowLongW #endif #define SetWindowLongPtr WINELIB_NAME_AW(SetWindowLongPtr) WINUSERAPI BOOL WINAPI SetWindowPlacement(HWND,const WINDOWPLACEMENT*); WINUSERAPI HHOOK WINAPI SetWindowsHookA(INT,HOOKPROC); WINUSERAPI HHOOK WINAPI SetWindowsHookW(INT,HOOKPROC); #define SetWindowsHook WINELIB_NAME_AW(SetWindowsHook) WINUSERAPI HHOOK WINAPI SetWindowsHookExA(INT,HOOKPROC,HINSTANCE,DWORD); WINUSERAPI HHOOK WINAPI SetWindowsHookExW(INT,HOOKPROC,HINSTANCE,DWORD); #define SetWindowsHookEx WINELIB_NAME_AW(SetWindowsHookEx) WINUSERAPI BOOL WINAPI SetWindowPos(HWND,HWND,INT,INT,INT,INT,UINT); WINUSERAPI INT WINAPI SetWindowRgn(HWND,HRGN,BOOL); WINUSERAPI BOOL WINAPI SetWindowTextA(HWND,LPCSTR); WINUSERAPI BOOL WINAPI SetWindowTextW(HWND,LPCWSTR); #define SetWindowText WINELIB_NAME_AW(SetWindowText) WINUSERAPI WORD WINAPI SetWindowWord(HWND,INT,WORD); WINUSERAPI HWINEVENTHOOK WINAPI SetWinEventHook(DWORD,DWORD,HMODULE,WINEVENTPROC,DWORD,DWORD,DWORD); WINUSERAPI BOOL WINAPI ShowCaret(HWND); WINUSERAPI INT WINAPI ShowCursor(BOOL); WINUSERAPI BOOL WINAPI ShowScrollBar(HWND,INT,BOOL); WINUSERAPI BOOL WINAPI ShowOwnedPopups(HWND,BOOL); WINUSERAPI BOOL WINAPI ShowWindow(HWND,INT); WINUSERAPI BOOL WINAPI ShowWindowAsync(HWND,INT); WINUSERAPI BOOL WINAPI ShutdownBlockReasonCreate(HWND,LPCWSTR); WINUSERAPI BOOL WINAPI ShutdownBlockReasonDestroy(HWND); WINUSERAPI BOOL WINAPI SubtractRect(LPRECT,const RECT*,const RECT*); WINUSERAPI BOOL WINAPI SwapMouseButton(BOOL); WINUSERAPI BOOL WINAPI SwitchDesktop(HDESK); WINUSERAPI VOID WINAPI SwitchToThisWindow(HWND,BOOL); WINUSERAPI BOOL WINAPI SystemParametersInfoA(UINT,UINT,LPVOID,UINT); WINUSERAPI BOOL WINAPI SystemParametersInfoW(UINT,UINT,LPVOID,UINT); #define SystemParametersInfo WINELIB_NAME_AW(SystemParametersInfo) WINUSERAPI BOOL WINAPI SystemParametersInfoForDpi(UINT,UINT,void*,UINT,UINT); WINUSERAPI LONG WINAPI TabbedTextOutA(HDC,INT,INT,LPCSTR,INT,INT,const INT*,INT); WINUSERAPI LONG WINAPI TabbedTextOutW(HDC,INT,INT,LPCWSTR,INT,INT,const INT*,INT); #define TabbedTextOut WINELIB_NAME_AW(TabbedTextOut) WINUSERAPI WORD WINAPI TileWindows (HWND,UINT,const RECT *,UINT,const HWND *); WINUSERAPI INT WINAPI ToAscii(UINT,UINT,const BYTE *,LPWORD,UINT); WINUSERAPI INT WINAPI ToAsciiEx(UINT,UINT,const BYTE *,LPWORD,UINT,HKL); WINUSERAPI INT WINAPI ToUnicode(UINT,UINT,const BYTE *,LPWSTR,int,UINT); WINUSERAPI INT WINAPI ToUnicodeEx(UINT,UINT,const BYTE *,LPWSTR,int,UINT,HKL); WINUSERAPI BOOL WINAPI TrackMouseEvent(LPTRACKMOUSEEVENT); WINUSERAPI BOOL WINAPI TrackPopupMenu(HMENU,UINT,INT,INT,INT,HWND,const RECT*); WINUSERAPI BOOL WINAPI TrackPopupMenuEx(HMENU,UINT,INT,INT,HWND,LPTPMPARAMS); WINUSERAPI INT WINAPI TranslateAcceleratorA(HWND,HACCEL,LPMSG); WINUSERAPI INT WINAPI TranslateAcceleratorW(HWND,HACCEL,LPMSG); #define TranslateAccelerator WINELIB_NAME_AW(TranslateAccelerator) WINUSERAPI BOOL WINAPI TranslateMDISysAccel(HWND,LPMSG); WINUSERAPI BOOL WINAPI TranslateMessage(const MSG*); WINUSERAPI BOOL WINAPI UnhookWinEvent(HWINEVENTHOOK); WINUSERAPI BOOL WINAPI UnhookWindowsHook(INT,HOOKPROC); WINUSERAPI BOOL WINAPI UnhookWindowsHookEx(HHOOK); WINUSERAPI BOOL WINAPI UnloadKeyboardLayout(HKL); WINUSERAPI BOOL WINAPI UnionRect(LPRECT,const RECT*,const RECT*); WINUSERAPI BOOL WINAPI UnregisterClassA(LPCSTR,HINSTANCE); WINUSERAPI BOOL WINAPI UnregisterClassW(LPCWSTR,HINSTANCE); #define UnregisterClass WINELIB_NAME_AW(UnregisterClass) WINUSERAPI BOOL WINAPI UnregisterDeviceNotification(HDEVNOTIFY); WINUSERAPI BOOL WINAPI UnregisterHotKey(HWND,INT); WINUSERAPI BOOL WINAPI UnregisterPowerSettingNotification(HPOWERNOTIFY); WINUSERAPI BOOL WINAPI UnregisterTouchWindow(HWND); WINUSERAPI BOOL WINAPI UpdateWindow(HWND); WINUSERAPI BOOL WINAPI UserHandleGrantAccess(HANDLE,HANDLE,BOOL); WINUSERAPI UINT WINAPI UserRealizePalette(HDC); WINUSERAPI BOOL WINAPI ValidateRect(HWND,const RECT*); WINUSERAPI BOOL WINAPI ValidateRgn(HWND,HRGN); WINUSERAPI SHORT WINAPI VkKeyScanA(CHAR); WINUSERAPI SHORT WINAPI VkKeyScanW(WCHAR); #define VkKeyScan WINELIB_NAME_AW(VkKeyScan) WINUSERAPI WORD WINAPI VkKeyScanExA(CHAR, HKL); WINUSERAPI WORD WINAPI VkKeyScanExW(WCHAR, HKL); #define VkKeyScanEx WINELIB_NAME_AW(VkKeyScanEx) WINUSERAPI DWORD WINAPI WaitForInputIdle(HANDLE,DWORD); WINUSERAPI BOOL WINAPI WaitMessage(void); WINUSERAPI HWND WINAPI WindowFromDC(HDC); WINUSERAPI HWND WINAPI WindowFromPoint(POINT); WINUSERAPI BOOL WINAPI WinHelpA(HWND,LPCSTR,UINT,ULONG_PTR); WINUSERAPI BOOL WINAPI WinHelpW(HWND,LPCWSTR,UINT,ULONG_PTR); #define WinHelp WINELIB_NAME_AW(WinHelp) WINUSERAPI VOID WINAPI keybd_event(BYTE,BYTE,DWORD,ULONG_PTR); WINUSERAPI VOID WINAPI mouse_event(DWORD,DWORD,DWORD,DWORD,ULONG_PTR); WINUSERAPI INT WINAPIV wsprintfA(LPSTR,LPCSTR,...); WINUSERAPI INT WINAPIV wsprintfW(LPWSTR,LPCWSTR,...); #define wsprintf WINELIB_NAME_AW(wsprintf) WINUSERAPI INT WINAPI wvsprintfA(LPSTR,LPCSTR,__ms_va_list); WINUSERAPI INT WINAPI wvsprintfW(LPWSTR,LPCWSTR,__ms_va_list); #define wvsprintf WINELIB_NAME_AW(wvsprintf) #if !defined(__WINESRC__) || defined(WINE_NO_INLINE_RECT) WINUSERAPI BOOL WINAPI EqualRect(const RECT*,const RECT*); WINUSERAPI BOOL WINAPI InflateRect(LPRECT,INT,INT); WINUSERAPI BOOL WINAPI IsRectEmpty(const RECT*); WINUSERAPI BOOL WINAPI OffsetRect(LPRECT,INT,INT); WINUSERAPI BOOL WINAPI SetRect(LPRECT,INT,INT,INT,INT); WINUSERAPI BOOL WINAPI SetRectEmpty(LPRECT); #else /* Inline versions of common RECT helpers */ static inline BOOL WINAPI EqualRect(const RECT *rect1, const RECT *rect2) { if (!rect1 || !rect2) return FALSE; return ((rect1->left == rect2->left) && (rect1->right == rect2->right) && (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom)); } static inline BOOL WINAPI InflateRect(LPRECT rect, INT x, INT y) { if (!rect) return FALSE; rect->left -= x; rect->top -= y; rect->right += x; rect->bottom += y; return TRUE; } static inline BOOL WINAPI IsRectEmpty(const RECT *rect) { if (!rect) return TRUE; return ((rect->left >= rect->right) || (rect->top >= rect->bottom)); } static inline BOOL WINAPI OffsetRect(LPRECT rect, INT x, INT y) { if (!rect) return FALSE; rect->left += x; rect->right += x; rect->top += y; rect->bottom += y; return TRUE; } static inline BOOL WINAPI SetRect(LPRECT rect, INT left, INT top, INT right, INT bottom) { if (!rect) return FALSE; rect->left = left; rect->right = right; rect->top = top; rect->bottom = bottom; return TRUE; } static inline BOOL WINAPI SetRectEmpty(LPRECT rect) { if (!rect) return FALSE; rect->left = rect->right = rect->top = rect->bottom = 0; return TRUE; } #endif /* !defined(__WINESRC__) || defined(WINE_NO_INLINE_RECT) */ /* Undocumented functions */ /* NOTE: This is SYSTEM.3, not USER.182, which is also named KillSystemTimer */ WORD WINAPI SYSTEM_KillSystemTimer( WORD ); #ifdef __WINESRC__ WINUSERAPI BOOL CDECL __wine_send_input( HWND hwnd, const INPUT *input ); #endif #ifdef __cplusplus } #endif #endif /* _WINUSER_ */ ================================================ FILE: wine/windows/winuser.rh ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */ #ifndef __MSABI_LONG # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) # define __MSABI_LONG(x) x ## l # else # define __MSABI_LONG(x) x # endif #endif #ifdef RC_INVOKED # define MAKEINTRESOURCE(i) i #endif #define RT_MANIFEST MAKEINTRESOURCE(24) #define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1) #define ISOLATIONAWARE_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(2) #define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3) #define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1) #define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(16) /*** ShowWindow() codes ***/ #define SW_HIDE 0 #define SW_SHOWNORMAL 1 #define SW_NORMAL SW_SHOWNORMAL #define SW_SHOWMINIMIZED 2 #define SW_SHOWMAXIMIZED 3 #define SW_MAXIMIZE SW_SHOWMAXIMIZED #define SW_SHOWNOACTIVATE 4 #define SW_SHOW 5 #define SW_MINIMIZE 6 #define SW_SHOWMINNOACTIVE 7 #define SW_SHOWNA 8 #define SW_RESTORE 9 #define SW_SHOWDEFAULT 10 #define SW_FORCEMINIMIZE 11 #define SW_MAX 11 #define SW_NORMALNA 0xCC /* Undocumented. Flag in MinMaximize */ /* Obsolete ShowWindow() codes for compatibility */ #define HIDE_WINDOW SW_HIDE #define SHOW_OPENWINDOW SW_SHOWNORMAL #define SHOW_ICONWINDOW SW_SHOWMINIMIZED #define SHOW_FULLSCREEN SW_SHOWMAXIMIZED #define SHOW_OPENNOACTIVATE SW_SHOWNOACTIVATE /* WM_SHOWWINDOW lParam codes */ #define SW_PARENTCLOSING 1 #define SW_OTHERZOOM 2 #define SW_PARENTOPENING 3 #define SW_OTHERUNZOOM 4 /*** Virtual key codes ***/ #define VK_LBUTTON 0x01 #define VK_RBUTTON 0x02 #define VK_CANCEL 0x03 #define VK_MBUTTON 0x04 #define VK_XBUTTON1 0x05 #define VK_XBUTTON2 0x06 /* 0x07 Undefined */ #define VK_BACK 0x08 #define VK_TAB 0x09 /* 0x0A-0x0B Undefined */ #define VK_CLEAR 0x0C #define VK_RETURN 0x0D /* 0x0E-0x0F Undefined */ #define VK_SHIFT 0x10 #define VK_CONTROL 0x11 #define VK_MENU 0x12 #define VK_PAUSE 0x13 #define VK_CAPITAL 0x14 #define VK_KANA 0x15 #define VK_HANGEUL VK_KANA #define VK_HANGUL VK_KANA #define VK_JUNJA 0x17 #define VK_FINAL 0x18 #define VK_HANJA 0x19 #define VK_KANJI VK_HANJA /* 0x1A Undefined */ #define VK_ESCAPE 0x1B #define VK_CONVERT 0x1C #define VK_NONCONVERT 0x1D #define VK_ACCEPT 0x1E #define VK_MODECHANGE 0x1F #define VK_SPACE 0x20 #define VK_PRIOR 0x21 #define VK_NEXT 0x22 #define VK_END 0x23 #define VK_HOME 0x24 #define VK_LEFT 0x25 #define VK_UP 0x26 #define VK_RIGHT 0x27 #define VK_DOWN 0x28 #define VK_SELECT 0x29 #define VK_PRINT 0x2A /* OEM specific in Windows 3.1 SDK */ #define VK_EXECUTE 0x2B #define VK_SNAPSHOT 0x2C #define VK_INSERT 0x2D #define VK_DELETE 0x2E #define VK_HELP 0x2F /* VK_0 - VK-9 0x30-0x39 Use ASCII instead */ /* 0x3A-0x40 Undefined */ /* VK_A - VK_Z 0x41-0x5A Use ASCII instead */ #define VK_LWIN 0x5B #define VK_RWIN 0x5C #define VK_APPS 0x5D /* 0x5E Unassigned */ #define VK_SLEEP 0x5F #define VK_NUMPAD0 0x60 #define VK_NUMPAD1 0x61 #define VK_NUMPAD2 0x62 #define VK_NUMPAD3 0x63 #define VK_NUMPAD4 0x64 #define VK_NUMPAD5 0x65 #define VK_NUMPAD6 0x66 #define VK_NUMPAD7 0x67 #define VK_NUMPAD8 0x68 #define VK_NUMPAD9 0x69 #define VK_MULTIPLY 0x6A #define VK_ADD 0x6B #define VK_SEPARATOR 0x6C #define VK_SUBTRACT 0x6D #define VK_DECIMAL 0x6E #define VK_DIVIDE 0x6F #define VK_F1 0x70 #define VK_F2 0x71 #define VK_F3 0x72 #define VK_F4 0x73 #define VK_F5 0x74 #define VK_F6 0x75 #define VK_F7 0x76 #define VK_F8 0x77 #define VK_F9 0x78 #define VK_F10 0x79 #define VK_F11 0x7A #define VK_F12 0x7B #define VK_F13 0x7C #define VK_F14 0x7D #define VK_F15 0x7E #define VK_F16 0x7F #define VK_F17 0x80 #define VK_F18 0x81 #define VK_F19 0x82 #define VK_F20 0x83 #define VK_F21 0x84 #define VK_F22 0x85 #define VK_F23 0x86 #define VK_F24 0x87 /* 0x88-0x8F Unassigned */ #define VK_NUMLOCK 0x90 #define VK_SCROLL 0x91 #define VK_OEM_NEC_EQUAL 0x92 #define VK_OEM_FJ_JISHO 0x92 #define VK_OEM_FJ_MASSHOU 0x93 #define VK_OEM_FJ_TOUROKU 0x94 #define VK_OEM_FJ_LOYA 0x95 #define VK_OEM_FJ_ROYA 0x96 /* 0x97-0x9F Unassigned */ /* * differencing between right and left shift/control/alt key. * Used only by GetAsyncKeyState() and GetKeyState(). */ #define VK_LSHIFT 0xA0 #define VK_RSHIFT 0xA1 #define VK_LCONTROL 0xA2 #define VK_RCONTROL 0xA3 #define VK_LMENU 0xA4 #define VK_RMENU 0xA5 #define VK_BROWSER_BACK 0xA6 #define VK_BROWSER_FORWARD 0xA7 #define VK_BROWSER_REFRESH 0xA8 #define VK_BROWSER_STOP 0xA9 #define VK_BROWSER_SEARCH 0xAA #define VK_BROWSER_FAVORITES 0xAB #define VK_BROWSER_HOME 0xAC #define VK_VOLUME_MUTE 0xAD #define VK_VOLUME_DOWN 0xAE #define VK_VOLUME_UP 0xAF #define VK_MEDIA_NEXT_TRACK 0xB0 #define VK_MEDIA_PREV_TRACK 0xB1 #define VK_MEDIA_STOP 0xB2 #define VK_MEDIA_PLAY_PAUSE 0xB3 #define VK_LAUNCH_MAIL 0xB4 #define VK_LAUNCH_MEDIA_SELECT 0xB5 #define VK_LAUNCH_APP1 0xB6 #define VK_LAUNCH_APP2 0xB7 /* 0xB8-0xB9 Unassigned */ #define VK_OEM_1 0xBA #define VK_OEM_PLUS 0xBB #define VK_OEM_COMMA 0xBC #define VK_OEM_MINUS 0xBD #define VK_OEM_PERIOD 0xBE #define VK_OEM_2 0xBF #define VK_OEM_3 0xC0 /* 0xC1-0xDA Unassigned */ #define VK_OEM_4 0xDB #define VK_OEM_5 0xDC #define VK_OEM_6 0xDD #define VK_OEM_7 0xDE #define VK_OEM_8 0xDF /* 0xE0 OEM specific */ #define VK_OEM_AX 0xE1 /* "AX" key on Japanese AX keyboard */ #define VK_OEM_102 0xE2 /* "<>" or "\|" on RT 102-key keyboard */ #define VK_ICO_HELP 0xE3 /* Help key on ICO */ #define VK_ICO_00 0xE4 /* 00 key on ICO */ #define VK_PROCESSKEY 0xE5 #define VK_ICO_CLEAR 0xE6 #define VK_PACKET 0xE7 /* 0xE8 Unassigned */ #define VK_OEM_RESET 0xE9 #define VK_OEM_JUMP 0xEA #define VK_OEM_PA1 0xEB #define VK_OEM_PA2 0xEC #define VK_OEM_PA3 0xED #define VK_OEM_WSCTRL 0xEE #define VK_OEM_CUSEL 0xEF #define VK_OEM_ATTN 0xF0 #define VK_OEM_FINISH 0xF1 #define VK_OEM_COPY 0xF2 #define VK_OEM_AUTO 0xF3 #define VK_OEM_ENLW 0xF4 #define VK_OEM_BACKTAB 0xF5 #define VK_ATTN 0xF6 #define VK_CRSEL 0xF7 #define VK_EXSEL 0xF8 #define VK_EREOF 0xF9 #define VK_PLAY 0xFA #define VK_ZOOM 0xFB #define VK_NONAME 0xFC #define VK_PA1 0xFD #define VK_OEM_CLEAR 0xFE /* 0xFF Unassigned */ /*** Messages ***/ #ifndef NOWINMESSAGES #define WM_NULL 0x0000 #define WM_CREATE 0x0001 #define WM_DESTROY 0x0002 #define WM_MOVE 0x0003 #define WM_SIZEWAIT 0x0004 /* DDK / Win16 */ #define WM_SIZE 0x0005 #define WM_ACTIVATE 0x0006 /* WM_ACTIVATE wParam values */ #define WA_INACTIVE 0 #define WA_ACTIVE 1 #define WA_CLICKACTIVE 2 #define WM_SETFOCUS 0x0007 #define WM_KILLFOCUS 0x0008 #define WM_SETVISIBLE 0x0009 /* DDK / Win16 */ #define WM_ENABLE 0x000a #define WM_SETREDRAW 0x000b #define WM_SETTEXT 0x000c #define WM_GETTEXT 0x000d #define WM_GETTEXTLENGTH 0x000e #define WM_PAINT 0x000f #define WM_CLOSE 0x0010 #define WM_QUERYENDSESSION 0x0011 #define WM_QUIT 0x0012 #define WM_QUERYOPEN 0x0013 #define WM_ERASEBKGND 0x0014 #define WM_SYSCOLORCHANGE 0x0015 #define WM_ENDSESSION 0x0016 #define WM_SYSTEMERROR 0x0017 /* DDK / Win16 */ #define WM_SHOWWINDOW 0x0018 #define WM_CTLCOLOR 0x0019 /* Added from windowsx.h */ #define WM_WININICHANGE 0x001a #define WM_SETTINGCHANGE WM_WININICHANGE #define WM_DEVMODECHANGE 0x001b #define WM_ACTIVATEAPP 0x001c #define WM_FONTCHANGE 0x001d #define WM_TIMECHANGE 0x001e #define WM_CANCELMODE 0x001f #define WM_SETCURSOR 0x0020 #define WM_MOUSEACTIVATE 0x0021 #define WM_CHILDACTIVATE 0x0022 #define WM_QUEUESYNC 0x0023 #define WM_GETMINMAXINFO 0x0024 #define WM_PAINTICON 0x0026 #define WM_ICONERASEBKGND 0x0027 #define WM_NEXTDLGCTL 0x0028 #define WM_ALTTABACTIVE 0x0029 /* DDK / Win16 */ #define WM_SPOOLERSTATUS 0x002a #define WM_DRAWITEM 0x002b #define WM_MEASUREITEM 0x002c #define WM_DELETEITEM 0x002d #define WM_VKEYTOITEM 0x002e #define WM_CHARTOITEM 0x002f #define WM_SETFONT 0x0030 #define WM_GETFONT 0x0031 #define WM_SETHOTKEY 0x0032 #define WM_GETHOTKEY 0x0033 #define WM_FILESYSCHANGE 0x0034 /* DDK / Win16 */ #define WM_ISACTIVEICON 0x0035 /* DDK / Win16 */ #define WM_QUERYPARKICON 0x0036 /* Undocumented */ #define WM_QUERYDRAGICON 0x0037 #define WM_QUERYSAVESTATE 0x0038 /* Undocumented */ #define WM_COMPAREITEM 0x0039 #define WM_TESTING 0x003a /* DDK / Win16 */ #define WM_GETOBJECT 0x003d #define WM_ACTIVATESHELLWINDOW 0x003e /* FIXME: Wine-only */ #define WM_COMPACTING 0x0041 #define WM_COMMNOTIFY 0x0044 #define WM_WINDOWPOSCHANGING 0x0046 #define WM_WINDOWPOSCHANGED 0x0047 #define WM_POWER 0x0048 /* For WM_POWER */ #define PWR_OK 1 #define PWR_FAIL (-1) #define PWR_SUSPENDREQUEST 1 #define PWR_SUSPENDRESUME 2 #define PWR_CRITICALRESUME 3 /* Win32 4.0 messages */ #define WM_COPYDATA 0x004a #define WM_CANCELJOURNAL 0x004b #define WM_KEYF1 0x004d /* DDK / Win16 */ #define WM_NOTIFY 0x004e #define WM_INPUTLANGCHANGEREQUEST 0x0050 #define WM_INPUTLANGCHANGE 0x0051 #define WM_TCARD 0x0052 #define WM_HELP 0x0053 #define WM_USERCHANGED 0x0054 #define WM_NOTIFYFORMAT 0x0055 /* WM_NOTIFYFORMAT commands and return values */ #define NFR_ANSI 1 #define NFR_UNICODE 2 #define NF_QUERY 3 #define NF_REQUERY 4 #define WM_CONTEXTMENU 0x007b #define WM_STYLECHANGING 0x007c #define WM_STYLECHANGED 0x007d #define WM_DISPLAYCHANGE 0x007e #define WM_GETICON 0x007f #define WM_SETICON 0x0080 /* Non-client system messages */ #define WM_NCCREATE 0x0081 #define WM_NCDESTROY 0x0082 #define WM_NCCALCSIZE 0x0083 #define WM_NCHITTEST 0x0084 #define WM_NCPAINT 0x0085 #define WM_NCACTIVATE 0x0086 #define WM_GETDLGCODE 0x0087 #define WM_SYNCPAINT 0x0088 #define WM_SYNCTASK 0x0089 /* DDK / Win16 */ /* Non-client mouse messages */ #define WM_NCMOUSEMOVE 0x00a0 #define WM_NCLBUTTONDOWN 0x00a1 #define WM_NCLBUTTONUP 0x00a2 #define WM_NCLBUTTONDBLCLK 0x00a3 #define WM_NCRBUTTONDOWN 0x00a4 #define WM_NCRBUTTONUP 0x00a5 #define WM_NCRBUTTONDBLCLK 0x00a6 #define WM_NCMBUTTONDOWN 0x00a7 #define WM_NCMBUTTONUP 0x00a8 #define WM_NCMBUTTONDBLCLK 0x00a9 #define WM_NCXBUTTONDOWN 0x00ab #define WM_NCXBUTTONUP 0x00ac #define WM_NCXBUTTONDBLCLK 0x00ad /* Raw input */ #define WM_INPUT_DEVICE_CHANGE 0x00fe #define WM_INPUT 0x00ff /* Keyboard messages */ #define WM_KEYFIRST 0x0100 #define WM_KEYDOWN WM_KEYFIRST #define WM_KEYUP 0x0101 #define WM_CHAR 0x0102 #define WM_DEADCHAR 0x0103 #define WM_SYSKEYDOWN 0x0104 #define WM_SYSKEYUP 0x0105 #define WM_SYSCHAR 0x0106 #define WM_SYSDEADCHAR 0x0107 #define WM_UNICHAR 0x0109 #define WM_KEYLAST WM_UNICHAR #define UNICODE_NOCHAR 0xffff /* Win32 4.0 messages for IME */ #define WM_IME_STARTCOMPOSITION 0x010d #define WM_IME_ENDCOMPOSITION 0x010e #define WM_IME_COMPOSITION 0x010f #define WM_IME_KEYLAST 0x010f #define WM_INITDIALOG 0x0110 #define WM_COMMAND 0x0111 #define WM_SYSCOMMAND 0x0112 #define WM_TIMER 0x0113 /* Scroll messages */ #define WM_HSCROLL 0x0114 #define WM_VSCROLL 0x0115 /* Menu messages */ #define WM_INITMENU 0x0116 #define WM_INITMENUPOPUP 0x0117 #define WM_GESTURE 0x0119 #define WM_GESTURENOTIFY 0x011A #define WM_MENUSELECT 0x011F #define WM_MENUCHAR 0x0120 #define WM_ENTERIDLE 0x0121 #define WM_MENURBUTTONUP 0x0122 #define WM_MENUDRAG 0x0123 #define WM_MENUGETOBJECT 0x0124 #define WM_UNINITMENUPOPUP 0x0125 #define WM_MENUCOMMAND 0x0126 #define WM_CHANGEUISTATE 0x0127 #define WM_UPDATEUISTATE 0x0128 #define WM_QUERYUISTATE 0x0129 /* UI flags for WM_*UISTATE */ /* for low-order word of wparam */ #define UIS_SET 1 #define UIS_CLEAR 2 #define UIS_INITIALIZE 3 /* for hi-order word of wparam */ #define UISF_HIDEFOCUS 0x1 #define UISF_HIDEACCEL 0x2 #define UISF_ACTIVE 0x4 #define WM_LBTRACKPOINT 0x0131 /* DDK / Win16 */ /* Win32 CTLCOLOR messages */ #define WM_CTLCOLORMSGBOX 0x0132 #define WM_CTLCOLOREDIT 0x0133 #define WM_CTLCOLORLISTBOX 0x0134 #define WM_CTLCOLORBTN 0x0135 #define WM_CTLCOLORDLG 0x0136 #define WM_CTLCOLORSCROLLBAR 0x0137 #define WM_CTLCOLORSTATIC 0x0138 #define MN_GETHMENU 0x01E1 /* Mouse messages */ #define WM_MOUSEFIRST 0x0200 #define WM_MOUSEMOVE WM_MOUSEFIRST #define WM_LBUTTONDOWN 0x0201 #define WM_LBUTTONUP 0x0202 #define WM_LBUTTONDBLCLK 0x0203 #define WM_RBUTTONDOWN 0x0204 #define WM_RBUTTONUP 0x0205 #define WM_RBUTTONDBLCLK 0x0206 #define WM_MBUTTONDOWN 0x0207 #define WM_MBUTTONUP 0x0208 #define WM_MBUTTONDBLCLK 0x0209 #define WM_MOUSEWHEEL 0x020A #define WM_XBUTTONDOWN 0x020B #define WM_XBUTTONUP 0x020C #define WM_XBUTTONDBLCLK 0x020D #define WM_MOUSEHWHEEL 0x020E #define WM_MOUSELAST WM_MOUSEHWHEEL /* Macros for the mouse messages */ #define WHEEL_DELTA 120 #define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) #define WHEEL_PAGESCROLL (UINT_MAX) #define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) #define GET_NCHITTEST_WPARAM(wParam) ((short)LOWORD(wParam)) #define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam)) #define XBUTTON1 0x0001 #define XBUTTON2 0x0002 #define WM_PARENTNOTIFY 0x0210 #define WM_ENTERMENULOOP 0x0211 #define WM_EXITMENULOOP 0x0212 #define WM_NEXTMENU 0x0213 /* Win32 4.0 messages */ #define WM_SIZING 0x0214 #define WM_CAPTURECHANGED 0x0215 #define WM_MOVING 0x0216 #define WM_POWERBROADCAST 0x0218 #define WM_DEVICECHANGE 0x0219 /* MDI messages */ #define WM_MDICREATE 0x0220 #define WM_MDIDESTROY 0x0221 #define WM_MDIACTIVATE 0x0222 #define WM_MDIRESTORE 0x0223 #define WM_MDINEXT 0x0224 #define WM_MDIMAXIMIZE 0x0225 #define WM_MDITILE 0x0226 #define WM_MDICASCADE 0x0227 #define WM_MDIICONARRANGE 0x0228 #define WM_MDIGETACTIVE 0x0229 /* D&D messages */ #define WM_DROPOBJECT 0x022A /* DDK / Win16 */ #define WM_QUERYDROPOBJECT 0x022B /* DDK / Win16 */ #define WM_BEGINDRAG 0x022C /* DDK / Win16 */ #define WM_DRAGLOOP 0x022D /* DDK / Win16 */ #define WM_DRAGSELECT 0x022E /* DDK / Win16 */ #define WM_DRAGMOVE 0x022F /* DDK / Win16 */ #define WM_MDISETMENU 0x0230 #define WM_ENTERSIZEMOVE 0x0231 #define WM_EXITSIZEMOVE 0x0232 #define WM_DROPFILES 0x0233 #define WM_MDIREFRESHMENU 0x0234 #define WM_POINTERDEVICECHANGE 0x0238 #define WM_POINTERDEVICEINRANGE 0x0239 #define WM_POINTERDEVICEOUTOFRANGE 0x023a #define WM_TOUCH 0x0240 #define WM_NCPOINTERUPDATE 0x0241 #define WM_NCPOINTERDOWN 0x0242 #define WM_NCPOINTERUP 0x0243 #define WM_POINTERUPDATE 0x0245 #define WM_POINTERDOWN 0x0246 #define WM_POINTERUP 0x0247 #define WM_POINTERENTER 0x0249 #define WM_POINTERLEAVE 0x024a #define WM_POINTERACTIVATE 0x024b #define WM_POINTERCAPTURECHANGED 0x024c #define WM_TOUCHHITTESTING 0x024d #define WM_POINTERWHEEL 0x024e #define WM_POINTERHWHEEL 0x024f #define WM_POINTERROUTEDTO 0x0251 #define WM_POINTERROUTEDAWAY 0x0252 #define WM_POINTERROUTEDRELEASED 0x0253 /* Win32 4.0 messages for IME */ #define WM_IME_SETCONTEXT 0x0281 #define WM_IME_NOTIFY 0x0282 #define WM_IME_CONTROL 0x0283 #define WM_IME_COMPOSITIONFULL 0x0284 #define WM_IME_SELECT 0x0285 #define WM_IME_CHAR 0x0286 /* Win32 5.0 messages for IME */ #define WM_IME_REQUEST 0x0288 /* Win32 4.0 messages for IME */ #define WM_IME_KEYDOWN 0x0290 #define WM_IME_KEYUP 0x0291 #define WM_NCMOUSEHOVER 0x02A0 #define WM_MOUSEHOVER 0x02A1 #define WM_MOUSELEAVE 0x02A3 #define WM_NCMOUSELEAVE 0x02A2 #define WM_WTSSESSION_CHANGE 0x02B1 #define WM_TABLET_FIRST 0x02c0 #define WM_TABLET_LAST 0x02df #define WM_DPICHANGED 0x02e0 #define WM_DPICHANGED_BEFOREPARENT 0x02e2 #define WM_DPICHANGED_AFTERPARENT 0x02e3 #define WM_GETDPISCALEDSIZE 0x02e4 /* Clipboard command messages */ #define WM_CUT 0x0300 #define WM_COPY 0x0301 #define WM_PASTE 0x0302 #define WM_CLEAR 0x0303 #define WM_UNDO 0x0304 /* Clipboard owner messages */ #define WM_RENDERFORMAT 0x0305 #define WM_RENDERALLFORMATS 0x0306 #define WM_DESTROYCLIPBOARD 0x0307 /* Clipboard viewer messages */ #define WM_DRAWCLIPBOARD 0x0308 #define WM_PAINTCLIPBOARD 0x0309 #define WM_VSCROLLCLIPBOARD 0x030A #define WM_SIZECLIPBOARD 0x030B #define WM_ASKCBFORMATNAME 0x030C #define WM_CHANGECBCHAIN 0x030D #define WM_HSCROLLCLIPBOARD 0x030E #define WM_QUERYNEWPALETTE 0x030F #define WM_PALETTEISCHANGING 0x0310 #define WM_PALETTECHANGED 0x0311 #define WM_HOTKEY 0x0312 #define WM_PRINT 0x0317 #define WM_PRINTCLIENT 0x0318 #define WM_APPCOMMAND 0x0319 #define WM_THEMECHANGED 0x031A #define WM_CLIPBOARDUPDATE 0x031D #define WM_DWMCOMPOSITIONCHANGED 0x031E #define WM_DWMNCRENDERINGCHANGED 0x031F #define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320 #define WM_DWMWINDOWMAXIMIZEDCHANGE 0x0321 #define WM_DWMSENDICONICTHUMBNAIL 0x0323 #define WM_DWMSENDICONICLIVEPREVIEWBITMAP 0x0326 #define WM_GETTITLEBARINFOEX 0x033F #define WM_HANDHELDFIRST 0x0358 #define WM_HANDHELDLAST 0x035F #define WM_AFXFIRST 0x0360 #define WM_AFXLAST 0x037F #define WM_PENWINFIRST 0x0380 #define WM_PENWINLAST 0x038F #define WM_USER 0x0400 #define WM_APP 0x8000 /* wParam for WM_SIZING message */ #define WMSZ_LEFT 1 #define WMSZ_RIGHT 2 #define WMSZ_TOP 3 #define WMSZ_TOPLEFT 4 #define WMSZ_TOPRIGHT 5 #define WMSZ_BOTTOM 6 #define WMSZ_BOTTOMLEFT 7 #define WMSZ_BOTTOMRIGHT 8 /* WM_NCHITTEST return codes */ #define HTERROR (-2) #define HTTRANSPARENT (-1) #define HTNOWHERE 0 #define HTCLIENT 1 #define HTCAPTION 2 #define HTSYSMENU 3 #define HTSIZE 4 #define HTGROWBOX HTSIZE #define HTMENU 5 #define HTHSCROLL 6 #define HTVSCROLL 7 #define HTMINBUTTON 8 #define HTREDUCE HTMINBUTTON #define HTMAXBUTTON 9 #define HTZOOM HTMAXBUTTON #define HTLEFT 10 #define HTSIZEFIRST HTLEFT #define HTRIGHT 11 #define HTTOP 12 #define HTTOPLEFT 13 #define HTTOPRIGHT 14 #define HTBOTTOM 15 #define HTBOTTOMLEFT 16 #define HTBOTTOMRIGHT 17 #define HTSIZELAST HTBOTTOMRIGHT #define HTBORDER 18 #define HTOBJECT 19 #define HTCLOSE 20 #define HTHELP 21 /* SendMessageTimeout flags */ #define SMTO_NORMAL 0x0000 #define SMTO_BLOCK 0x0001 #define SMTO_ABORTIFHUNG 0x0002 #define SMTO_NOTIMEOUTIFNOTHUNG 0x0008 #define SMTO_ERRORONEXIT 0x0020 /* WM_MOUSEACTIVATE return values */ #define MA_ACTIVATE 1 #define MA_ACTIVATEANDEAT 2 #define MA_NOACTIVATE 3 #define MA_NOACTIVATEANDEAT 4 /* WM_GETICON/WM_SETICON params values */ #define ICON_SMALL 0 #define ICON_BIG 1 #define ICON_SMALL2 2 /* WM_SIZE message wParam values */ #define SIZE_RESTORED 0 #define SIZE_MINIMIZED 1 #define SIZE_MAXIMIZED 2 #define SIZE_MAXSHOW 3 #define SIZE_MAXHIDE 4 #define SIZENORMAL SIZE_RESTORED #define SIZEICONIC SIZE_MINIMIZED #define SIZEFULLSCREEN SIZE_MAXIMIZED #define SIZEZOOMSHOW SIZE_MAXSHOW #define SIZEZOOMHIDE SIZE_MAXHIDE /* WM_NCCALCSIZE return flags */ #define WVR_ALIGNTOP 0x0010 #define WVR_ALIGNLEFT 0x0020 #define WVR_ALIGNBOTTOM 0x0040 #define WVR_ALIGNRIGHT 0x0080 #define WVR_HREDRAW 0x0100 #define WVR_VREDRAW 0x0200 #define WVR_REDRAW (WVR_HREDRAW | WVR_VREDRAW) #define WVR_VALIDRECTS 0x0400 /* Key status flags for mouse events */ #ifndef NOKEYSTATES #define MK_LBUTTON 0x0001 #define MK_RBUTTON 0x0002 #define MK_SHIFT 0x0004 #define MK_CONTROL 0x0008 #define MK_MBUTTON 0x0010 #define MK_XBUTTON1 0x0020 #define MK_XBUTTON2 0x0040 #endif /* NOKEYSTATES */ #ifndef NOTRACKMOUSEEVENT #define TME_HOVER 0x00000001 #define TME_LEAVE 0x00000002 #define TME_NONCLIENT 0x00000010 #define TME_QUERY 0x40000000 #define TME_CANCEL 0x80000000 #define HOVER_DEFAULT 0xFFFFFFFF #endif /* NOTRACKMOUSEEVENT */ #endif /* NOWINMESSAGES */ /*** Window Styles ***/ #ifndef NOWINSTYLES #define WS_OVERLAPPED __MSABI_LONG(0x00000000) #define WS_POPUP __MSABI_LONG(0x80000000) #define WS_CHILD __MSABI_LONG(0x40000000) #define WS_MINIMIZE __MSABI_LONG(0x20000000) #define WS_VISIBLE __MSABI_LONG(0x10000000) #define WS_DISABLED __MSABI_LONG(0x08000000) #define WS_CLIPSIBLINGS __MSABI_LONG(0x04000000) #define WS_CLIPCHILDREN __MSABI_LONG(0x02000000) #define WS_MAXIMIZE __MSABI_LONG(0x01000000) #define WS_BORDER __MSABI_LONG(0x00800000) #define WS_DLGFRAME __MSABI_LONG(0x00400000) #define WS_VSCROLL __MSABI_LONG(0x00200000) #define WS_HSCROLL __MSABI_LONG(0x00100000) #define WS_SYSMENU __MSABI_LONG(0x00080000) #define WS_THICKFRAME __MSABI_LONG(0x00040000) #define WS_GROUP __MSABI_LONG(0x00020000) #define WS_TABSTOP __MSABI_LONG(0x00010000) #define WS_MINIMIZEBOX __MSABI_LONG(0x00020000) #define WS_MAXIMIZEBOX __MSABI_LONG(0x00010000) #define WS_CAPTION (WS_BORDER | WS_DLGFRAME) #define WS_TILED WS_OVERLAPPED #define WS_ICONIC WS_MINIMIZE #define WS_SIZEBOX WS_THICKFRAME #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME| WS_MINIMIZEBOX | WS_MAXIMIZEBOX) #define WS_POPUPWINDOW (WS_POPUP | WS_BORDER | WS_SYSMENU) #define WS_CHILDWINDOW WS_CHILD #define WS_TILEDWINDOW WS_OVERLAPPEDWINDOW #endif /* NOWINSTYLES */ /*** Window extended styles ***/ #ifndef NOWINSTYLES #define WS_EX_DLGMODALFRAME __MSABI_LONG(0x00000001) #define WS_EX_DRAGDETECT __MSABI_LONG(0x00000002) /* Undocumented */ #define WS_EX_NOPARENTNOTIFY __MSABI_LONG(0x00000004) #define WS_EX_TOPMOST __MSABI_LONG(0x00000008) #define WS_EX_ACCEPTFILES __MSABI_LONG(0x00000010) #define WS_EX_TRANSPARENT __MSABI_LONG(0x00000020) #define WS_EX_MDICHILD __MSABI_LONG(0x00000040) #define WS_EX_TOOLWINDOW __MSABI_LONG(0x00000080) #define WS_EX_WINDOWEDGE __MSABI_LONG(0x00000100) #define WS_EX_CLIENTEDGE __MSABI_LONG(0x00000200) #define WS_EX_CONTEXTHELP __MSABI_LONG(0x00000400) #define WS_EX_RIGHT __MSABI_LONG(0x00001000) #define WS_EX_LEFT __MSABI_LONG(0x00000000) #define WS_EX_RTLREADING __MSABI_LONG(0x00002000) #define WS_EX_LTRREADING __MSABI_LONG(0x00000000) #define WS_EX_LEFTSCROLLBAR __MSABI_LONG(0x00004000) #define WS_EX_RIGHTSCROLLBAR __MSABI_LONG(0x00000000) #define WS_EX_CONTROLPARENT __MSABI_LONG(0x00010000) #define WS_EX_STATICEDGE __MSABI_LONG(0x00020000) #define WS_EX_APPWINDOW __MSABI_LONG(0x00040000) #define WS_EX_LAYERED __MSABI_LONG(0x00080000) #define WS_EX_NOINHERITLAYOUT __MSABI_LONG(0x00100000) #define WS_EX_LAYOUTRTL __MSABI_LONG(0x00400000) #define WS_EX_COMPOSITED __MSABI_LONG(0x02000000) #define WS_EX_NOACTIVATE __MSABI_LONG(0x08000000) #define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE) #define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST) #endif /* NOWINSTYLES */ /*** Class styles ***/ #ifndef NOWINSTYLES #define CS_VREDRAW 0x00000001 #define CS_HREDRAW 0x00000002 #define CS_KEYCVTWINDOW 0x00000004 /* DDK / Win16 */ #define CS_DBLCLKS 0x00000008 #define CS_OWNDC 0x00000020 #define CS_CLASSDC 0x00000040 #define CS_PARENTDC 0x00000080 #define CS_NOKEYCVT 0x00000100 /* DDK / Win16 */ #define CS_NOCLOSE 0x00000200 #define CS_SAVEBITS 0x00000800 #define CS_BYTEALIGNCLIENT 0x00001000 #define CS_BYTEALIGNWINDOW 0x00002000 #define CS_GLOBALCLASS 0x00004000 #define CS_IME 0x00010000 #define CS_DROPSHADOW 0x00020000 #endif /* NOWINSTYLES */ /*** Predefined Clipboard Formats ***/ #ifndef NOCLIPBOARD #define CF_TEXT 1 #define CF_BITMAP 2 #define CF_METAFILEPICT 3 #define CF_SYLK 4 #define CF_DIF 5 #define CF_TIFF 6 #define CF_OEMTEXT 7 #define CF_DIB 8 #define CF_PALETTE 9 #define CF_PENDATA 10 #define CF_RIFF 11 #define CF_WAVE 12 #define CF_UNICODETEXT 13 #define CF_ENHMETAFILE 14 #define CF_HDROP 15 #define CF_LOCALE 16 #define CF_DIBV5 17 #define CF_MAX 18 #define CF_OWNERDISPLAY 0x0080 #define CF_DSPTEXT 0x0081 #define CF_DSPBITMAP 0x0082 #define CF_DSPMETAFILEPICT 0x0083 #define CF_DSPENHMETAFILE 0x008E /* "Private" formats don't get GlobalFree()'d */ #define CF_PRIVATEFIRST 0x0200 #define CF_PRIVATELAST 0x02FF /* "GDIOBJ" formats do get DeleteObject()'d */ #define CF_GDIOBJFIRST 0x0300 #define CF_GDIOBJLAST 0x03FF #endif /* NOCLIPBOARD */ /*** Menu flags ***/ #ifndef NOMENUS #define MF_INSERT __MSABI_LONG(0x00000000) #define MF_CHANGE __MSABI_LONG(0x00000080) #define MF_APPEND __MSABI_LONG(0x00000100) #define MF_DELETE __MSABI_LONG(0x00000200) #define MF_REMOVE __MSABI_LONG(0x00001000) #define MF_END __MSABI_LONG(0x00000080) #define MF_ENABLED __MSABI_LONG(0x00000000) #define MF_GRAYED __MSABI_LONG(0x00000001) #define MF_DISABLED __MSABI_LONG(0x00000002) #define MF_STRING __MSABI_LONG(0x00000000) #define MF_BITMAP __MSABI_LONG(0x00000004) #define MF_UNCHECKED __MSABI_LONG(0x00000000) #define MF_CHECKED __MSABI_LONG(0x00000008) #define MF_POPUP __MSABI_LONG(0x00000010) #define MF_MENUBARBREAK __MSABI_LONG(0x00000020) #define MF_MENUBREAK __MSABI_LONG(0x00000040) #define MF_UNHILITE __MSABI_LONG(0x00000000) #define MF_HILITE __MSABI_LONG(0x00000080) #define MF_OWNERDRAW __MSABI_LONG(0x00000100) #define MF_USECHECKBITMAPS __MSABI_LONG(0x00000200) #define MF_BYCOMMAND __MSABI_LONG(0x00000000) #define MF_BYPOSITION __MSABI_LONG(0x00000400) #define MF_SEPARATOR __MSABI_LONG(0x00000800) #define MF_DEFAULT __MSABI_LONG(0x00001000) #define MF_SYSMENU __MSABI_LONG(0x00002000) #define MF_HELP __MSABI_LONG(0x00004000) #define MF_RIGHTJUSTIFY __MSABI_LONG(0x00004000) #define MF_MOUSESELECT __MSABI_LONG(0x00008000) /* Flags for extended menu item types */ #define MFT_STRING MF_STRING #define MFT_BITMAP MF_BITMAP #define MFT_MENUBARBREAK MF_MENUBARBREAK #define MFT_MENUBREAK MF_MENUBREAK #define MFT_OWNERDRAW MF_OWNERDRAW #define MFT_RADIOCHECK __MSABI_LONG(0x00000200) #define MFT_SEPARATOR MF_SEPARATOR #define MFT_RIGHTORDER __MSABI_LONG(0x00002000) #define MFT_RIGHTJUSTIFY MF_RIGHTJUSTIFY /* Flags for extended menu item states */ #define MFS_GRAYED __MSABI_LONG(0x00000003) #define MFS_DISABLED MFS_GRAYED #define MFS_CHECKED MF_CHECKED #define MFS_HILITE MF_HILITE #define MFS_ENABLED MF_ENABLED #define MFS_UNCHECKED MF_UNCHECKED #define MFS_UNHILITE MF_UNHILITE #define MFS_DEFAULT MF_DEFAULT /* DDK / Win16 defines */ #define MFS_MASK __MSABI_LONG(0x0000108B) #define MFS_HOTTRACKDRAWN __MSABI_LONG(0x10000000) #define MFS_CACHEDBMP __MSABI_LONG(0x20000000) #define MFS_BOTTOMGAPDROP __MSABI_LONG(0x40000000) #define MFS_TOPGAPDROP __MSABI_LONG(0x80000000) #define MFS_GAPDROP (MFS_BOTTOMGAPDROP | MFS_TOPGAPDROP) #endif /* NOMENUS */ /*** WM_SYSCOMMAND parameters ***/ #ifndef NOSYSCOMMANDS /* At least HP-UX defines it in /usr/include/sys/signal.h */ # ifdef SC_SIZE # undef SC_SIZE # endif #define SC_SIZE 0xf000 #define SC_MOVE 0xf010 #define SC_MINIMIZE 0xf020 #define SC_MAXIMIZE 0xf030 #define SC_NEXTWINDOW 0xf040 #define SC_PREVWINDOW 0xf050 #define SC_CLOSE 0xf060 #define SC_VSCROLL 0xf070 #define SC_HSCROLL 0xf080 #define SC_MOUSEMENU 0xf090 #define SC_KEYMENU 0xf100 #define SC_ARRANGE 0xf110 #define SC_RESTORE 0xf120 #define SC_TASKLIST 0xf130 #define SC_SCREENSAVE 0xf140 #define SC_HOTKEY 0xf150 /* Win32 4.0 */ #define SC_DEFAULT 0xf160 #define SC_MONITORPOWER 0xf170 #define SC_CONTEXTHELP 0xf180 #define SC_SEPARATOR 0xf00f #define GET_SC_WPARAM(wParam) ((int)wParam & 0xfff0) #define SCF_ISSECURE 0x0001 /* Obsolete names */ #define SC_ICON SC_MINIMIZE #define SC_ZOOM SC_MAXIMIZE #endif /* NOSYSCOMMANDS */ /*** OEM Resource Ordinal Numbers ***/ #ifdef OEMRESOURCE #define OBM_RDRVERT 32559 #define OBM_RDRHORZ 32660 #define OBM_RDR2DIM 32661 #define OBM_TRTYPE 32732 /* FIXME: Wine-only */ #define OBM_LFARROWI 32734 #define OBM_RGARROWI 32735 #define OBM_DNARROWI 32736 #define OBM_UPARROWI 32737 #define OBM_COMBO 32738 #define OBM_MNARROW 32739 #define OBM_LFARROWD 32740 #define OBM_RGARROWD 32741 #define OBM_DNARROWD 32742 #define OBM_UPARROWD 32743 #define OBM_RESTORED 32744 #define OBM_ZOOMD 32745 #define OBM_REDUCED 32746 #define OBM_RESTORE 32747 #define OBM_ZOOM 32748 #define OBM_REDUCE 32749 #define OBM_LFARROW 32750 #define OBM_RGARROW 32751 #define OBM_DNARROW 32752 #define OBM_UPARROW 32753 #define OBM_CLOSE 32754 #define OBM_OLD_RESTORE 32755 #define OBM_OLD_ZOOM 32756 #define OBM_OLD_REDUCE 32757 #define OBM_BTNCORNERS 32758 #define OBM_CHECKBOXES 32759 #define OBM_CHECK 32760 #define OBM_BTSIZE 32761 #define OBM_OLD_LFARROW 32762 #define OBM_OLD_RGARROW 32763 #define OBM_OLD_DNARROW 32764 #define OBM_OLD_UPARROW 32765 #define OBM_SIZE 32766 #define OBM_OLD_CLOSE 32767 #define OCR_NORMAL 32512 #define OCR_IBEAM 32513 #define OCR_WAIT 32514 #define OCR_CROSS 32515 #define OCR_UP 32516 #define OCR_PEN 32631 #define OCR_SIZE 32640 #define OCR_ICON 32641 #define OCR_SIZENWSE 32642 #define OCR_SIZENESW 32643 #define OCR_SIZEWE 32644 #define OCR_SIZENS 32645 #define OCR_SIZEALL 32646 #define OCR_ICOCUR 32647 #define OCR_NO 32648 #define OCR_HAND 32649 #define OCR_APPSTARTING 32650 #define OCR_HELP 32651 /* DDK / Win16 */ #define OCR_RDRVERT 32652 /* DDK / Win16 */ #define OCR_RDRHORZ 32653 /* DDK / Win16 */ #define OCR_RDR2DIM 32654 /* DDK / Win16 */ #define OCR_RDRNORTH 32655 /* DDK / Win16 */ #define OCR_RDRSOUTH 32656 /* DDK / Win16 */ #define OCR_RDRWEST 32657 /* DDK / Win16 */ #define OCR_RDREAST 32658 /* DDK / Win16 */ #define OCR_RDRNORTHWEST 32659 /* DDK / Win16 */ #define OCR_RDRNORTHEAST 32660 /* DDK / Win16 */ #define OCR_RDRSOUTHWEST 32661 /* DDK / Win16 */ #define OCR_RDRSOUTHEAST 32662 /* DDK / Win16 */ #define OIC_SAMPLE 32512 #define OIC_HAND 32513 #define OIC_ERROR OIC_HAND #define OIC_QUES 32514 #define OIC_BANG 32515 #define OIC_WARNING OIC_BANG #define OIC_NOTE 32516 #define OIC_INFORMATION OIC_NOTE #define OIC_WINLOGO 32517 #define OIC_SHIELD 32518 #endif /* OEMRESOURCE */ /*** Predefined resources ***/ #ifndef NOICONS #define IDI_APPLICATION MAKEINTRESOURCE(32512) #define IDI_HAND MAKEINTRESOURCE(32513) #define IDI_QUESTION MAKEINTRESOURCE(32514) #define IDI_EXCLAMATION MAKEINTRESOURCE(32515) #define IDI_ASTERISK MAKEINTRESOURCE(32516) #define IDI_WINLOGO MAKEINTRESOURCE(32517) #define IDI_SHIELD MAKEINTRESOURCE(32518) #define IDI_WARNING IDI_EXCLAMATION #define IDI_ERROR IDI_HAND #define IDI_INFORMATION IDI_ASTERISK #endif /* NOICONS */ /*** Standard dialog button IDs ***/ #define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7 #define IDCLOSE 8 #define IDHELP 9 #define IDTRYAGAIN 10 #define IDCONTINUE 11 #ifndef IDTIMEOUT #define IDTIMEOUT 32000 #endif /*** Edit control styles ***/ #ifndef NOWINSTYLES #define ES_LEFT __MSABI_LONG(0x00000000) #define ES_CENTER __MSABI_LONG(0x00000001) #define ES_RIGHT __MSABI_LONG(0x00000002) #define ES_MULTILINE __MSABI_LONG(0x00000004) #define ES_UPPERCASE __MSABI_LONG(0x00000008) #define ES_LOWERCASE __MSABI_LONG(0x00000010) #define ES_PASSWORD __MSABI_LONG(0x00000020) #define ES_AUTOVSCROLL __MSABI_LONG(0x00000040) #define ES_AUTOHSCROLL __MSABI_LONG(0x00000080) #define ES_NOHIDESEL __MSABI_LONG(0x00000100) #define ES_COMBO __MSABI_LONG(0x00000200) /* Undocumented. Parent is a combobox */ #define ES_OEMCONVERT __MSABI_LONG(0x00000400) #define ES_READONLY __MSABI_LONG(0x00000800) #define ES_WANTRETURN __MSABI_LONG(0x00001000) #define ES_NUMBER __MSABI_LONG(0x00002000) #endif /* NOWINSTYLES */ /*** Edit control messages ***/ #ifndef NOWINMESSAGES #define EM_GETSEL 0x00b0 #define EM_SETSEL 0x00b1 #define EM_GETRECT 0x00b2 #define EM_SETRECT 0x00b3 #define EM_SETRECTNP 0x00b4 #define EM_SCROLL 0x00b5 #define EM_LINESCROLL 0x00b6 #define EM_SCROLLCARET 0x00b7 #define EM_GETMODIFY 0x00b8 #define EM_SETMODIFY 0x00b9 #define EM_GETLINECOUNT 0x00ba #define EM_LINEINDEX 0x00bb #define EM_SETHANDLE 0x00bc #define EM_GETHANDLE 0x00bd #define EM_GETTHUMB 0x00be /* Unassigned 0x00bf and 0x00c0 */ #define EM_LINELENGTH 0x00c1 #define EM_REPLACESEL 0x00c2 #define EM_SETFONT 0x00c3 /* DDK / Win16 */ #define EM_GETLINE 0x00c4 #define EM_LIMITTEXT 0x00c5 #define EM_SETLIMITTEXT EM_LIMITTEXT #define EM_CANUNDO 0x00c6 #define EM_UNDO 0x00c7 #define EM_FMTLINES 0x00c8 #define EM_LINEFROMCHAR 0x00c9 #define EM_SETWORDBREAK 0x00ca /* DDK / Win16 */ #define EM_SETTABSTOPS 0x00cb #define EM_SETPASSWORDCHAR 0x00cc #define EM_EMPTYUNDOBUFFER 0x00cd #define EM_GETFIRSTVISIBLELINE 0x00ce #define EM_SETREADONLY 0x00cf #define EM_SETWORDBREAKPROC 0x00d0 #define EM_GETWORDBREAKPROC 0x00d1 #define EM_GETPASSWORDCHAR 0x00d2 #define EM_SETMARGINS 0x00d3 #define EM_GETMARGINS 0x00d4 #define EM_GETLIMITTEXT 0x00d5 #define EM_POSFROMCHAR 0x00d6 #define EM_CHARFROMPOS 0x00d7 #define EM_SETIMESTATUS 0x00d8 #define EM_GETIMESTATUS 0x00d9 #endif /* NOWINMESSAGES */ /*** Button control styles ***/ #define BS_PUSHBUTTON __MSABI_LONG(0x00000000) #define BS_DEFPUSHBUTTON __MSABI_LONG(0x00000001) #define BS_CHECKBOX __MSABI_LONG(0x00000002) #define BS_AUTOCHECKBOX __MSABI_LONG(0x00000003) #define BS_RADIOBUTTON __MSABI_LONG(0x00000004) #define BS_3STATE __MSABI_LONG(0x00000005) #define BS_AUTO3STATE __MSABI_LONG(0x00000006) #define BS_GROUPBOX __MSABI_LONG(0x00000007) #define BS_USERBUTTON __MSABI_LONG(0x00000008) #define BS_AUTORADIOBUTTON __MSABI_LONG(0x00000009) #define BS_PUSHBOX __MSABI_LONG(0x0000000A) #define BS_OWNERDRAW __MSABI_LONG(0x0000000B) #define BS_TYPEMASK __MSABI_LONG(0x0000000F) #define BS_LEFTTEXT __MSABI_LONG(0x00000020) #define BS_RIGHTBUTTON BS_LEFTTEXT #define BS_TEXT __MSABI_LONG(0x00000000) #define BS_ICON __MSABI_LONG(0x00000040) #define BS_BITMAP __MSABI_LONG(0x00000080) #define BS_LEFT __MSABI_LONG(0x00000100) #define BS_RIGHT __MSABI_LONG(0x00000200) #define BS_CENTER __MSABI_LONG(0x00000300) #define BS_TOP __MSABI_LONG(0x00000400) #define BS_BOTTOM __MSABI_LONG(0x00000800) #define BS_VCENTER __MSABI_LONG(0x00000C00) #define BS_PUSHLIKE __MSABI_LONG(0x00001000) #define BS_MULTILINE __MSABI_LONG(0x00002000) #define BS_NOTIFY __MSABI_LONG(0x00004000) #define BS_FLAT __MSABI_LONG(0x00008000) /*** Button notification codes ***/ #define BN_CLICKED 0 #define BN_PAINT 1 #define BN_HILITE 2 #define BN_PUSHED BN_HILITE #define BN_UNHILITE 3 #define BN_UNPUSHED BN_UNHILITE #define BN_DISABLE 4 #define BN_DOUBLECLICKED 5 #define BN_DBLCLK BN_DOUBLECLICKED #define BN_SETFOCUS 6 #define BN_KILLFOCUS 7 /*** Win32 button control messages ***/ #define BM_GETCHECK 0x00f0 #define BM_SETCHECK 0x00f1 #define BM_GETSTATE 0x00f2 #define BM_SETSTATE 0x00f3 #define BM_SETSTYLE 0x00f4 #define BM_CLICK 0x00f5 #define BM_GETIMAGE 0x00f6 #define BM_SETIMAGE 0x00f7 #define BM_SETDONTCLICK 0x00f8 /* Button states */ #define BST_UNCHECKED 0x0000 #define BST_CHECKED 0x0001 #define BST_INDETERMINATE 0x0002 #define BST_PUSHED 0x0004 #define BST_FOCUS 0x0008 /*** Static Control Styles ***/ #define SS_LEFT __MSABI_LONG(0x00000000) #define SS_CENTER __MSABI_LONG(0x00000001) #define SS_RIGHT __MSABI_LONG(0x00000002) #define SS_ICON __MSABI_LONG(0x00000003) #define SS_BLACKRECT __MSABI_LONG(0x00000004) #define SS_GRAYRECT __MSABI_LONG(0x00000005) #define SS_WHITERECT __MSABI_LONG(0x00000006) #define SS_BLACKFRAME __MSABI_LONG(0x00000007) #define SS_GRAYFRAME __MSABI_LONG(0x00000008) #define SS_WHITEFRAME __MSABI_LONG(0x00000009) #define SS_USERITEM __MSABI_LONG(0x0000000A) #define SS_SIMPLE __MSABI_LONG(0x0000000B) #define SS_LEFTNOWORDWRAP __MSABI_LONG(0x0000000C) #define SS_OWNERDRAW __MSABI_LONG(0x0000000D) #define SS_BITMAP __MSABI_LONG(0x0000000E) #define SS_ENHMETAFILE __MSABI_LONG(0x0000000F) #define SS_ETCHEDHORZ __MSABI_LONG(0x00000010) #define SS_ETCHEDVERT __MSABI_LONG(0x00000011) #define SS_ETCHEDFRAME __MSABI_LONG(0x00000012) #define SS_TYPEMASK __MSABI_LONG(0x0000001F) #define SS_REALSIZECONTROL __MSABI_LONG(0x00000040) #define SS_NOPREFIX __MSABI_LONG(0x00000080) #define SS_NOTIFY __MSABI_LONG(0x00000100) #define SS_CENTERIMAGE __MSABI_LONG(0x00000200) #define SS_RIGHTJUST __MSABI_LONG(0x00000400) #define SS_REALSIZEIMAGE __MSABI_LONG(0x00000800) #define SS_SUNKEN __MSABI_LONG(0x00001000) #define SS_EDITCONTROL __MSABI_LONG(0x00002000) #define SS_ENDELLIPSIS __MSABI_LONG(0x00004000) #define SS_PATHELLIPSIS __MSABI_LONG(0x00008000) #define SS_WORDELLIPSIS __MSABI_LONG(0x0000C000) #define SS_ELLIPSISMASK SS_WORDELLIPSIS /*** Dialog styles ***/ #define DS_ABSALIGN __MSABI_LONG(0x00000001) #define DS_SYSMODAL __MSABI_LONG(0x00000002) #define DS_3DLOOK __MSABI_LONG(0x00000004) /* win95 */ #define DS_FIXEDSYS __MSABI_LONG(0x00000008) /* win95 */ #define DS_NOFAILCREATE __MSABI_LONG(0x00000010) /* win95 */ #define DS_LOCALEDIT __MSABI_LONG(0x00000020) #define DS_SETFONT __MSABI_LONG(0x00000040) #define DS_MODALFRAME __MSABI_LONG(0x00000080) #define DS_NOIDLEMSG __MSABI_LONG(0x00000100) #define DS_SETFOREGROUND __MSABI_LONG(0x00000200) /* win95 */ #define DS_CONTROL __MSABI_LONG(0x00000400) /* win95 */ #define DS_CENTER __MSABI_LONG(0x00000800) /* win95 */ #define DS_CENTERMOUSE __MSABI_LONG(0x00001000) /* win95 */ #define DS_CONTEXTHELP __MSABI_LONG(0x00002000) /* win95 */ #define DS_USEPIXELS __MSABI_LONG(0x00008000) #define DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS) /*** Listbox styles ***/ #ifndef NOWINSTYLES #define LBS_NOTIFY __MSABI_LONG(0x00000001) #define LBS_SORT __MSABI_LONG(0x00000002) #define LBS_NOREDRAW __MSABI_LONG(0x00000004) #define LBS_MULTIPLESEL __MSABI_LONG(0x00000008) #define LBS_OWNERDRAWFIXED __MSABI_LONG(0x00000010) #define LBS_OWNERDRAWVARIABLE __MSABI_LONG(0x00000020) #define LBS_HASSTRINGS __MSABI_LONG(0x00000040) #define LBS_USETABSTOPS __MSABI_LONG(0x00000080) #define LBS_NOINTEGRALHEIGHT __MSABI_LONG(0x00000100) #define LBS_MULTICOLUMN __MSABI_LONG(0x00000200) #define LBS_WANTKEYBOARDINPUT __MSABI_LONG(0x00000400) #define LBS_EXTENDEDSEL __MSABI_LONG(0x00000800) #define LBS_DISABLENOSCROLL __MSABI_LONG(0x00001000) #define LBS_NODATA __MSABI_LONG(0x00002000) #define LBS_NOSEL __MSABI_LONG(0x00004000) #define LBS_COMBOBOX __MSABI_LONG(0x00008000) #define LBS_STANDARD (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER) #endif /* NOWINSTYLES */ /*** Combo box styles ***/ #ifndef NOWINSTYLES #define CBS_SIMPLE __MSABI_LONG(0x00000001) #define CBS_DROPDOWN __MSABI_LONG(0x00000002) #define CBS_DROPDOWNLIST __MSABI_LONG(0x00000003) #define CBS_OWNERDRAWFIXED __MSABI_LONG(0x00000010) #define CBS_OWNERDRAWVARIABLE __MSABI_LONG(0x00000020) #define CBS_AUTOHSCROLL __MSABI_LONG(0x00000040) #define CBS_OEMCONVERT __MSABI_LONG(0x00000080) #define CBS_SORT __MSABI_LONG(0x00000100) #define CBS_HASSTRINGS __MSABI_LONG(0x00000200) #define CBS_NOINTEGRALHEIGHT __MSABI_LONG(0x00000400) #define CBS_DISABLENOSCROLL __MSABI_LONG(0x00000800) #define CBS_UPPERCASE __MSABI_LONG(0x00002000) #define CBS_LOWERCASE __MSABI_LONG(0x00004000) #endif /* NOWINSTYLES */ /*** Scrollbar styles ***/ #ifndef NOWINSTYLES #define SBS_HORZ __MSABI_LONG(0x00000000) #define SBS_VERT __MSABI_LONG(0x00000001) #define SBS_TOPALIGN __MSABI_LONG(0x00000002) #define SBS_LEFTALIGN __MSABI_LONG(0x00000002) #define SBS_BOTTOMALIGN __MSABI_LONG(0x00000004) #define SBS_RIGHTALIGN __MSABI_LONG(0x00000004) #define SBS_SIZEBOXTOPLEFTALIGN __MSABI_LONG(0x00000002) #define SBS_SIZEBOXBOTTOMRIGHTALIGN __MSABI_LONG(0x00000004) #define SBS_SIZEBOX __MSABI_LONG(0x00000008) #define SBS_SIZEGRIP __MSABI_LONG(0x00000010) #endif /* NOWINSTYLES */ /*** WinHelp commands ***/ #define HELP_CONTEXT __MSABI_LONG(0x00000001) #define HELP_QUIT __MSABI_LONG(0x00000002) #define HELP_INDEX __MSABI_LONG(0x00000003) #define HELP_CONTENTS HELP_INDEX #define HELP_HELPONHELP __MSABI_LONG(0x00000004) #define HELP_SETINDEX __MSABI_LONG(0x00000005) #define HELP_SETCONTENTS HELP_SETINDEX #define HELP_CONTEXTPOPUP __MSABI_LONG(0x00000008) #define HELP_FORCEFILE __MSABI_LONG(0x00000009) #define HELP_KEY __MSABI_LONG(0x00000101) #define HELP_COMMAND __MSABI_LONG(0x00000102) #define HELP_PARTIALKEY __MSABI_LONG(0x00000105) #define HELP_MULTIKEY __MSABI_LONG(0x00000201) #define HELP_SETWINPOS __MSABI_LONG(0x00000203) #define HELP_CONTEXTMENU 0x000a #define HELP_FINDER 0x000b #define HELP_WM_HELP 0x000c #define HELP_SETPOPUP_POS 0x000d #define HELP_TCARD_DATA 0x0010 #define HELP_TCARD_OTHER_CALLER 0x0011 #define HELP_TCARD 0x8000 #define IDH_NO_HELP 28440 #define IDH_MISSING_CONTEXT 28441 #define IDH_GENERIC_HELP_BUTTON 28442 #define IDH_OK 28443 #define IDH_CANCEL 28444 #define IDH_HELP 28445 ================================================ FILE: wine/windows/winver.h ================================================ /* Definitions for the VERsion info library (VER.DLL) * * Copyright 1996 Marcus Meissner * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINVER_H #define __WINE_WINVER_H /* FIXME: #include */ #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ #ifndef RC_INVOKED /* function prototypes */ DWORD WINAPI VerFindFileA(DWORD,LPCSTR,LPCSTR,LPCSTR,LPSTR,PUINT,LPSTR,PUINT); DWORD WINAPI VerFindFileW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,PUINT,LPWSTR,PUINT); #define VerFindFile WINELIB_NAME_AW(VerFindFile) DWORD WINAPI VerInstallFileA(DWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,PUINT); DWORD WINAPI VerInstallFileW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,PUINT); #define VerInstallFile WINELIB_NAME_AW(VerInstallFile) DWORD WINAPI VerLanguageNameA(DWORD,LPSTR,DWORD); DWORD WINAPI VerLanguageNameW(DWORD,LPWSTR,DWORD); #define VerLanguageName WINELIB_NAME_AW(VerLanguageName) BOOL WINAPI VerQueryValueA(LPCVOID,LPCSTR,LPVOID*,PUINT); BOOL WINAPI VerQueryValueW(LPCVOID,LPCWSTR,LPVOID*,PUINT); #define VerQueryValue WINELIB_NAME_AW(VerQueryValue) DWORD WINAPI GetFileVersionInfoSizeA(LPCSTR,LPDWORD); DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR,LPDWORD); #define GetFileVersionInfoSize WINELIB_NAME_AW(GetFileVersionInfoSize) BOOL WINAPI GetFileVersionInfoA(LPCSTR,DWORD,DWORD,LPVOID); BOOL WINAPI GetFileVersionInfoW(LPCWSTR,DWORD,DWORD,LPVOID); #define GetFileVersionInfo WINELIB_NAME_AW(GetFileVersionInfo) DWORD WINAPI GetFileVersionInfoSizeExA(DWORD,LPCSTR,LPDWORD); DWORD WINAPI GetFileVersionInfoSizeExW(DWORD,LPCWSTR,LPDWORD); #define GetFileVersionInfoSizeEx WINELIB_NAME_AW(GetFileVersionInfoSizeEx) BOOL WINAPI GetFileVersionInfoExA(DWORD,LPCSTR,DWORD,DWORD,LPVOID); BOOL WINAPI GetFileVersionInfoExW(DWORD,LPCWSTR,DWORD,DWORD,LPVOID); #define GetFileVersionInfoEx WINELIB_NAME_AW(GetFileVersionInfoEx) #endif /* RC_INVOKED */ #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_WINVER_H */ ================================================ FILE: wine/windows/wlanapi.h ================================================ /* * Copyright (C) 2016 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WLAN_WLANAPI_H #define _WLAN_WLANAPI_H typedef enum _WLAN_INTERFACE_STATE { wlan_interface_state_not_ready, wlan_interface_state_connected, wlan_interface_state_ad_hoc_network_formed, wlan_interface_state_disconnecting, wlan_interface_state_disconnected, wlan_interface_state_associating, wlan_interface_state_discovering, wlan_interface_state_authenticating } WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE; typedef struct _WLAN_INTERFACE_INFO { GUID InterfaceGuid; WCHAR strInterfaceDescription[256]; WLAN_INTERFACE_STATE isState; } WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO; typedef struct _WLAN_INTERFACE_INFO_LIST { DWORD dwNumberOfItems; DWORD dwIndex; WLAN_INTERFACE_INFO InterfaceInfo[1]; } WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST; #define DOT11_SSID_MAX_LENGTH 32 typedef struct _DOT11_SSID { DWORD uSSIDLength; UCHAR ucSSID[DOT11_SSID_MAX_LENGTH]; } DOT11_SSID; typedef struct _WLAN_RAW_DATA { DWORD dwDataSize; BYTE DataBlob[1]; } WLAN_RAW_DATA, *PWLAN_RAW_DATA; typedef struct _WLAN_NOTIFICATION_DATA { DWORD NotificationSource; DWORD NotificationCode; GUID InterfaceGuid; DWORD dwDataSize; PVOID pData; } WLAN_NOTIFICATION_DATA, *PWLAN_NOTIFICATION_DATA; typedef void (WINAPI *WLAN_NOTIFICATION_CALLBACK)(WLAN_NOTIFICATION_DATA *, void *); typedef enum _DOT11_BSS_TYPE { dot11_BSS_type_infrastructure = 0x01, dot11_BSS_type_independent = 0x02, dot11_BSS_type_any = 0x03 } DOT11_BSS_TYPE, *PDOT11_BSS_TYPE; typedef DWORD WLAN_REASON_CODE, *PWLAN_REASON_CODE, WLAN_SIGNAL_QUALITY; typedef enum _DOT11_AUTH_ALGORITHM { DOT11_AUTH_ALGO_80211_OPEN = 0x01, DOT11_AUTH_ALGO_80211_SHARED_KEY = 0x02, DOT11_AUTH_ALGO_WPA = 0x03, DOT11_AUTH_ALGO_WPA_PSK = 0x04, DOT11_AUTH_ALGO_WPA_NONE = 0x05, DOT11_AUTH_ALGO_RSNA = 0x06, DOT11_AUTH_ALGO_RSNA_PSK = 0x07, DOT11_AUTH_ALGO_IHV_START = 0x80000000, DOT11_AUTH_ALGO_IHV_END = 0xFFFFFFFF } DOT11_AUTH_ALGORITHM, *PDOT11_AUTH_ALGORITHM; typedef enum _DOT11_CIPHER_ALGORITHM { DOT11_CIPHER_ALGO_NONE = 0x00, DOT11_CIPHER_ALGO_WEP40 = 0x01, DOT11_CIPHER_ALGO_TKIP = 0x02, DOT11_CIPHER_ALGO_CCMP = 0x04, DOT11_CIPHER_ALGO_WEP104 = 0x05, DOT11_CIPHER_ALGO_WPA_USE_GROUP = 0x100, DOT11_CIPHER_ALGO_RSN_USE_GROUP = 0x100, DOT11_CIPHER_ALGO_WEP = 0x101, DOT11_CIPHER_ALGO_IHV_START = 0x80000000, DOT11_CIPHER_ALGO_IHV_END = 0xFFFFFFFF } DOT11_CIPHER_ALGORITHM, *PDOT11_CIPHER_ALGORITHM; typedef enum _DOT11_PHY_TYPE { dot11_phy_type_unknown = 0x00, dot11_phy_type_any = 0x00, dot11_phy_type_fhss = 0x01, dot11_phy_type_dsss = 0x02, dot11_phy_type_irbaseband = 0x03, dot11_phy_type_ofdm = 0x04, dot11_phy_type_hrdsss = 0x05, dot11_phy_type_erp = 0x06, dot11_phy_type_ht = 0x07, dot11_phy_type_vht = 0x08, dot11_phy_type_IHV_start = 0x80000000, dot11_phy_type_IHV_end = 0xFFFFFFFF } DOT11_PHY_TYPE, *PDOT11_PHY_TYPE; #define WLAN_MAX_PHY_TYPE_NUMBER 8 typedef struct _WLAN_AVAILABLE_NETWORK { WCHAR strProfileName[256]; DOT11_SSID dot11Ssid; DOT11_BSS_TYPE dot11BssType; ULONG uNumberOfBssids; BOOL bNetworkConnectable; WLAN_REASON_CODE wlanNotConnectableReason; ULONG uNumberOfPhyTypes; DOT11_PHY_TYPE dot11PhyTypes[WLAN_MAX_PHY_TYPE_NUMBER]; BOOL bMorePhyTypes; WLAN_SIGNAL_QUALITY wlanSignalQuality; BOOL bSecurityEnabled; DOT11_AUTH_ALGORITHM dot11DefaultAuthAlgorithm; DOT11_CIPHER_ALGORITHM dot11DefaultCipherAlgorithm; DWORD dwFlags; DWORD dwReserved; } WLAN_AVAILABLE_NETWORK, *PWLAN_AVAILABLE_NETWORK; typedef struct _WLAN_AVAILABLE_NETWORK_LIST { DWORD dwNumberOfItems; DWORD dwIndex; WLAN_AVAILABLE_NETWORK Network[1]; } WLAN_AVAILABLE_NETWORK_LIST, *PWLAN_AVAILABLE_NETWORK_LIST; DWORD WINAPI WlanCloseHandle(HANDLE, void *); DWORD WINAPI WlanEnumInterfaces(HANDLE, void *, WLAN_INTERFACE_INFO_LIST **); DWORD WINAPI WlanOpenHandle(DWORD, void *, DWORD *, HANDLE *); void *WINAPI WlanAllocateMemory(DWORD); void WINAPI WlanFreeMemory(void *); DWORD WINAPI WlanScan(HANDLE, const GUID *, const DOT11_SSID *, const WLAN_RAW_DATA *, void *); DWORD WINAPI WlanRegisterNotification(HANDLE, DWORD, BOOL, WLAN_NOTIFICATION_CALLBACK, void *, void *, DWORD *); DWORD WINAPI WlanGetAvailableNetworkList(HANDLE, const GUID *, DWORD, void *, WLAN_AVAILABLE_NETWORK_LIST **); #endif /* _WLAN_WLANAPI_H */ ================================================ FILE: wine/windows/wmcodecdsp.idl ================================================ /* * Copyright 2018 Zebediah Figura * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "mediaobj.idl"; import "strmif.idl"; [ uuid(bbeea841-0a63-4f52-a7ab-a9b3a84ed38a) ] coclass CMP3DecMediaObject {} ================================================ FILE: wine/windows/wmdrmsdk.idl ================================================ /* * Copyright 2017 Alistair Leslie-Hughes * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "mfobjects.idl"; import "mfidl.idl"; typedef struct _DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS { WORD wCompressedDigitalVideo; WORD wUncompressedDigitalVideo; WORD wAnalogVideo; WORD wCompressedDigitalAudio; WORD wUncompressedDigitalAudio; } DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS; typedef struct _DRM_VIDEO_OUTPUT_PROTECTION { GUID guidId; BYTE bConfigData; } DRM_VIDEO_OUTPUT_PROTECTION; typedef struct _DRM_VIDEO_OUTPUT_PROTECTION_IDS { WORD cEntries; DRM_VIDEO_OUTPUT_PROTECTION *rgVop; } DRM_VIDEO_OUTPUT_PROTECTION_IDS; typedef struct _DRM_OPL_OUTPUT_IDS { WORD cIds; GUID *rgIds; } DRM_OPL_OUTPUT_IDS; typedef struct __tagDRM_COPY_OPL { WORD wMinimumCopyLevel; DRM_OPL_OUTPUT_IDS oplIdIncludes; DRM_OPL_OUTPUT_IDS oplIdExcludes; } DRM_COPY_OPL; typedef struct __tagDRM_PLAY_OPL { DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS minOPL; DRM_OPL_OUTPUT_IDS oplIdReserved; DRM_VIDEO_OUTPUT_PROTECTION_IDS vopi; } DRM_PLAY_OPL; [ uuid(82435be0-f7c1-4df9-8103-eeabebf3d6e1), version(1.0) ] library WMDRMContentEnablerLib { importlib("stdole2.tlb"); [ uuid(82435bdf-f7c1-4df9-8103-eeabebf3d6e1) ] coclass WMDRMContentEnablerActivate { [default] interface IPersistStream; } } ================================================ FILE: wine/windows/wmistr.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WMISTR_ #define _WMISTR_ #define WNODE_FLAG_ALL_DATA 0x00000001 #define WNODE_FLAG_SINGLE_INSTANCE 0x00000002 #define WNODE_FLAG_SINGLE_ITEM 0x00000004 #define WNODE_FLAG_EVENT_ITEM 0x00000008 #define WNODE_FLAG_FIXED_INSTANCE_SIZE 0x00000010 #define WNODE_FLAG_TOO_SMALL 0x00000020 #define WNODE_FLAG_INSTANCES_SAME 0x00000040 #define WNODE_FLAG_STATIC_INSTANCE_NAMES 0x00000080 #define WNODE_FLAG_USE_TIMESTAMP 0x00000200 #define WNODE_FLAG_EVENT_REFERENCE 0x00002000 #define WNODE_FLAG_METHOD_ITEM 0x00008000 #define WNODE_FLAG_PDO_INSTANCE_NAMES 0x00010000 #define WNODE_FLAG_TRACED_GUID 0x00020000 #define WNODE_FLAG_LOG_WNODE 0x00040000 #define WNODE_FLAG_USE_GUID_PTR 0x00080000 #define WNODE_FLAG_USE_MOF_PTR 0x00100000 #define WNODE_FLAG_SEVERITY_MASK 0xFF000000 typedef enum { WMI_GET_ALL_DATA = 0, WMI_GET_SINGLE_INSTANCE = 1, WMI_SET_SINGLE_INSTANCE = 2, WMI_SET_SINGLE_ITEM = 3, WMI_ENABLE_EVENTS = 4, WMI_DISABLE_EVENTS = 5, WMI_ENABLE_CONNECTION = 6, WMI_DISABLE_CONNECTION = 7, WMI_REGINFO = 8, WMI_EXECUTE_METHOD = 9, } WMIDPREQUESTCODE; typedef struct _WNODE_HEADER { ULONG BufferSize; ULONG ProvicerId; union { ULONG64 HistoricalContext; struct { ULONG Version; ULONG Linkage; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; union { HANDLE KernelHandle; LARGE_INTEGER TimeStamp; } DUMMYUNIONNAME2; GUID Guid; ULONG ClientContext; ULONG Flags; } WNODE_HEADER, *PWNODE_HEADER; #endif /* _WMISTR_ */ ================================================ FILE: wine/windows/wmium.h ================================================ /* * Copyright (C) 2016 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WMIUM_ #define _WMIUM_ #ifdef _WMI_SOURCE_ #define WMIAPI __stdcall #else #define WMIAPI DECLSPEC_IMPORT __stdcall #endif #include #include #include typedef PVOID WMIHANDLE, *PWMIHANDLE, MOFHANDLE, *PMOFHANDLE; #define MOFCI_RESERVED0 0x00000001 #define MOFCI_RESERVED1 0x00000002 #define MOFCI_RESERVED2 0x00000004 typedef struct { char *ImagePath; char *ResourceName; ULONG ResourceSize; UCHAR *ResourceBuffer; } MOFRESOURCEINFOA, *PMOFRESOURCEINFOA; typedef struct { WCHAR *ImagePath; WCHAR *ResourceName; ULONG ResourceSize; UCHAR *ResourceBuffer; } MOFRESOURCEINFOW, *PMOFRESOURCEINFOW; DECL_WINELIB_TYPE_AW(MOFRESOURCEINFO) DECL_WINELIB_TYPE_AW(PMOFRESOURCEINFO) #ifdef __cplusplus extern "C" { #endif #define NOTIFICATION_TRACE_FLAG 0x00010000 #define NOTIFICATION_CALLBACK_DIRECT 0x00000004 #define NOTIFICATION_CHECK_ACCESS 0x00000008 typedef void (WINAPI *NOTIFICATIONCALLBACK)(WNODE_HEADER *, UINT_PTR); typedef struct _WMIGUIDINFORMATION { ULONG Size; BOOLEAN IsExpensive; BOOLEAN IsEventOnly; } WMIGUIDINFORMATION, *PWMIGUIDINFORMATION; DEFINE_GUID(GUID_REGISTRATION_CHANGE_NOTIFICATION, 0xb48d49a1, 0xe777, 0x11d0, 0xa5, 0xc, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10); DEFINE_GUID(GUID_MOF_RESOURCE_ADDED_NOTIFICATION, 0xb48d49a2, 0xe777, 0x11d0, 0xa5, 0xc, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10); DEFINE_GUID(GUID_MOF_RESOURCE_REMOVED_NOTIFICATION, 0xb48d49a3, 0xe777, 0x11d0, 0xa5, 0xc, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10); ULONG WMIAPI WmiCloseBlock(WMIHANDLE); ULONG WMIAPI WmiDevInstToInstanceNameA(char *, ULONG, char *, ULONG); ULONG WMIAPI WmiDevInstToInstanceNameW(WCHAR *, ULONG, WCHAR *, ULONG); #define WmiDevInstToInstanceName WINELIB_NAME_AW(WmiDevInstToInstanceName) ULONG WMIAPI WmiEnumerateGuids(GUID *, ULONG *); ULONG WMIAPI WmiExecuteMethodA(WMIHANDLE, const char *, ULONG, ULONG, void *, ULONG *, void *); ULONG WMIAPI WmiExecuteMethodW(WMIHANDLE, const WCHAR *, ULONG, ULONG, void *, ULONG *, void *); #define WmiExecuteMethod WINELIB_NAME_AW(WmiExecuteMethod) ULONG WMIAPI WmiFileHandleToInstanceNameA(WMIHANDLE, HANDLE, ULONG *, char *); ULONG WMIAPI WmiFileHandleToInstanceNameW(WMIHANDLE, HANDLE, ULONG *, WCHAR *); #define WmiFileHandleToInstanceName WINELIB_NAME_AW(WmiFileHandleToInstanceName) void WMIAPI WmiFreeBuffer(void *); #define WmiInsertTimestamp(WnodeHeader) GetSystemTimeAsFileTime((FILETIME *)&((WNODE_HEADER *)WnodeHeader)->TimeStamp) ULONG WMIAPI WmiMofEnumerateResourcesA(MOFHANDLE, ULONG *, MOFRESOURCEINFOA **); ULONG WMIAPI WmiMofEnumerateResourcesW(MOFHANDLE, ULONG *, MOFRESOURCEINFOW **); #define WmiMofEnumerateResources WINELIB_NAME_AW(WmiMofEnumerateResources) ULONG WMIAPI WmiNotificationRegistrationA(GUID *, BOOLEAN, void *, ULONG_PTR, ULONG); ULONG WMIAPI WmiNotificationRegistrationW(GUID *, BOOLEAN, void *, ULONG_PTR, ULONG); #define WmiNotificationRegistration WINELIB_NAME_AW(WmiNotificationRegistration) ULONG WMIAPI WmiOpenBlock(GUID *, ULONG, WMIHANDLE *); ULONG WMIAPI WmiQueryAllDataA(WMIHANDLE, ULONG *, void *); ULONG WMIAPI WmiQueryAllDataW(WMIHANDLE, ULONG *, void *); #define WmiQueryAllData WINELIB_NAME_AW(WmiQueryAllData) ULONG WMIAPI WmiQueryGuidInformation(WMIHANDLE, WMIGUIDINFORMATION *); ULONG WMIAPI WmiQuerySingleInstanceA(WMIHANDLE, const char *, ULONG *, void *); ULONG WMIAPI WmiQuerySingleInstanceW(WMIHANDLE, const WCHAR *, ULONG *, void *); #define WmiQuerySingleInstance WINELIB_NAME_AW(WmiQuerySingleInstance) ULONG WMIAPI WmiSetSingleInstanceA(WMIHANDLE, const char *, ULONG, ULONG, void *); ULONG WMIAPI WmiSetSingleInstanceW(WMIHANDLE, const WCHAR *, ULONG, ULONG, void *); #define WmiSetSingleInstance WINELIB_NAME_AW(WmiSetSingleInstance) ULONG WMIAPI WmiSetSingleItemA(WMIHANDLE, const char *, ULONG, ULONG, ULONG, void *); ULONG WMIAPI WmiSetSingleItemW(WMIHANDLE, const WCHAR *, ULONG, ULONG, ULONG, void *); #define WmiSetSingleItem WINELIB_NAME_AW(WmiSetSingleItem) #ifdef __cplusplus } #endif #endif /* _WMIUM_ */ ================================================ FILE: wine/windows/wmiutils.idl ================================================ /* * Copyright 2012 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; interface IWbemPath; interface IWbemPathKeyList; typedef [v1_enum] enum tag_WBEM_PATH_STATUS_FLAG { WBEMPATH_INFO_ANON_LOCAL_MACHINE = 0x1, WBEMPATH_INFO_HAS_MACHINE_NAME = 0x2, WBEMPATH_INFO_IS_CLASS_REF = 0x4, WBEMPATH_INFO_IS_INST_REF = 0x8, WBEMPATH_INFO_HAS_SUBSCOPES = 0x10, WBEMPATH_INFO_IS_COMPOUND = 0x20, WBEMPATH_INFO_HAS_V2_REF_PATHS = 0x40, WBEMPATH_INFO_HAS_IMPLIED_KEY = 0x80, WBEMPATH_INFO_CONTAINS_SINGLETON = 0x100, WBEMPATH_INFO_V1_COMPLIANT = 0x200, WBEMPATH_INFO_V2_COMPLIANT = 0x400, WBEMPATH_INFO_CIM_COMPLIANT = 0x800, WBEMPATH_INFO_IS_SINGLETON = 0x1000, WBEMPATH_INFO_IS_PARENT = 0x2000, WBEMPATH_INFO_SERVER_NAMESPACE_ONLY = 0x4000, WBEMPATH_INFO_NATIVE_PATH = 0x8000, WBEMPATH_INFO_WMI_PATH = 0x10000, WBEMPATH_INFO_PATH_HAD_SERVER = 0x20000 } tag_WBEM_PATH_STATUS_FLAG; typedef [v1_enum] enum tag_WBEM_PATH_CREATE_FLAG { WBEMPATH_CREATE_ACCEPT_RELATIVE = 0x1, WBEMPATH_CREATE_ACCEPT_ABSOLUTE = 0x2, WBEMPATH_CREATE_ACCEPT_ALL = 0x4, WBEMPATH_TREAT_SINGLE_IDENT_AS_NS = 0x8 } tag_WBEM_PATH_CREATE_FLAG; typedef [v1_enum] enum tag_WBEM_GET_TEXT_FLAGS { WBEMPATH_COMPRESSED = 0x1, WBEMPATH_GET_RELATIVE_ONLY = 0x2, WBEMPATH_GET_SERVER_TOO = 0x4, WBEMPATH_GET_SERVER_AND_NAMESPACE_ONLY = 0x8, WBEMPATH_GET_NAMESPACE_ONLY = 0x10, WBEMPATH_GET_ORIGINAL = 0x20 } tag_WBEM_GET_TEXT_FLAGS; [ local, object, uuid(9ae62877-7544-4bb0-aa26-a13824659ed6) ] interface IWbemPathKeyList : IUnknown { HRESULT GetCount( [out] ULONG *puKeyCount); HRESULT SetKey( [in,string] LPCWSTR wszName, [in] ULONG uFlags, [in] ULONG uCimType, [in] LPVOID pKeyVal); HRESULT SetKey2( [in,string] LPCWSTR wszName, [in] ULONG uFlags, [in] ULONG uCimType, [in] VARIANT *pKeyVal); HRESULT GetKey( [in] ULONG uKeyIx, [in] ULONG uFlags, [in,out] ULONG *puNameBufSize, [in,out] LPWSTR pszKeyName, [in,out] ULONG *puKeyValBufSize, [in,out] LPVOID pKeyVal, [out] ULONG *puApparentCimType); HRESULT GetKey2( [in] ULONG uKeyIx, [in] ULONG uFlags, [in,out] ULONG *puNameBufSize, [in,out] LPWSTR pszKeyName, [in,out] VARIANT *pKeyValue, [out] ULONG *puApparentCimType); HRESULT RemoveKey( [in,string] LPCWSTR wszName, [in] ULONG uFlags); HRESULT RemoveAllKeys( [in] ULONG uFlags); HRESULT MakeSingleton([in] boolean bSet); HRESULT GetInfo( [in] ULONG uRequestedInfo, [out] ULONGLONG *puResponse); HRESULT GetText( [in] long lFlags, [in,out] ULONG *puBuffLength, [in,out,string] LPWSTR pszText); } cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") cpp_quote("#undef GetClassName") cpp_quote("#endif") [ local, object, uuid(3bc15af2-736c-477e-9e51-238af8667dcc) ] interface IWbemPath : IUnknown { HRESULT SetText( [in] ULONG uMode, [in] LPCWSTR pszPath); HRESULT GetText( [in] long lFlags, [in,out] ULONG *puBuffLength, [in,out,string] LPWSTR pszText); HRESULT GetInfo( [in] ULONG uRequestedInfo, [out] ULONGLONG *puResponse); HRESULT SetServer( [in,string] LPCWSTR Name); HRESULT GetServer( [in,out] ULONG *puNameBufLength, [in,out,string] LPWSTR pName); HRESULT GetNamespaceCount( [out] ULONG *puCount); HRESULT SetNamespaceAt( [in] ULONG uIndex, [in,string] LPCWSTR pszName); HRESULT GetNamespaceAt( [in] ULONG uIndex, [in,out] ULONG *puNameBufLength, [in,out,string] LPWSTR pName); HRESULT RemoveNamespaceAt( [in] ULONG uIndex); HRESULT RemoveAllNamespaces(); HRESULT GetScopeCount( [out] ULONG *puCount); HRESULT SetScope( [in] ULONG uIndex, [in] LPWSTR pszClass); HRESULT SetScopeFromText( [in] ULONG uIndex, [in] LPWSTR pszText); HRESULT GetScope( [in] ULONG uIndex, [in,out] ULONG *puClassNameBufSize, [in,out] LPWSTR pszClass, [out] IWbemPathKeyList **pKeyList); HRESULT GetScopeAsText( [in] ULONG uIndex, [in,out] ULONG *puTextBufSize, [in,out] LPWSTR pszText); HRESULT RemoveScope( [in] ULONG uIndex); HRESULT RemoveAllScopes(); HRESULT SetClassName( [in,string] LPCWSTR Name); HRESULT GetClassName( [in,out] ULONG *puBuffLength, [in,out,string] LPWSTR pszName); HRESULT GetKeyList( [out] IWbemPathKeyList **pOut); HRESULT CreateClassPart( [in] long lFlags, [in,string] LPCWSTR Name); HRESULT DeleteClassPart( [in] long lFlags); BOOL IsRelative( [in,string] LPWSTR wszMachine, [in,string] LPWSTR wszNamespace); BOOL IsRelativeOrChild( [in,string] LPWSTR wszMachine, [in,string] LPWSTR wszNamespace, [in] long lFlags); BOOL IsLocal( [in,string] LPCWSTR wszMachine); BOOL IsSameClassName( [in,string] LPCWSTR wszClass); } [ uuid(cf4cc405-e2c5-4ddd-b3ce-5e7582d8c9fa) ] coclass WbemDefPath { interface IWbemPath; } ================================================ FILE: wine/windows/wmp.idl ================================================ /* * Copyright 2014 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ helpstring("Windows Media Player"), version(1.0), uuid(6bf52a50-394a-11d3-b153-00c04f79Faa6) ] library WMPLib { importlib("stdole2.tlb"); typedef enum { wmposUndefined, wmposPlaylistChanging, wmposPlaylistLocating, wmposPlaylistConnecting, wmposPlaylistLoading, wmposPlaylistOpening, wmposPlaylistOpenNoMedia, wmposPlaylistChanged, wmposMediaChanging, wmposMediaLocating, wmposMediaConnecting, wmposMediaLoading, wmposMediaOpening, wmposMediaOpen, wmposBeginCodecAcquisition, wmposEndCodecAcquisition, wmposBeginLicenseAcquisition, wmposEndLicenseAcquisition, wmposBeginIndividualization, wmposEndIndividualization, wmposMediaWaiting, wmposOpeningUnknownURL } WMPOpenState; typedef enum { wmppsUndefined, wmppsStopped, wmppsPaused, wmppsPlaying, wmppsScanForward, wmppsScanReverse, wmppsBuffering, wmppsWaiting, wmppsMediaEnded, wmppsTransitioning, wmppsReady, wmppsReconnecting, wmppsLast } WMPPlayState; typedef enum { wmplcUnknown, wmplcClear, wmplcInfoChange, wmplcMove, wmplcDelete, wmplcInsert, wmplcAppend, wmplcPrivate, wmplcNameChange, wmplcMorph, wmplcSort, wmplcLast } WMPPlaylistChangeEventType; typedef enum { wmpdsUnknown, wmpdsPartnershipExists, wmpdsPartnershipDeclined, wmpdsPartnershipAnother, wmpdsManualDevice, wmpdsNewDevice, wmpdsLast } WMPDeviceStatus; typedef enum { wmpssUnknown, wmpssSynchronizing, wmpssStopped, wmpssEstimating, wmpssLast } WMPSyncState; typedef enum { wmprsUnknown, wmprsRipping, wmprsStopped } WMPRipState; typedef enum { wmpbfAudioCD, wmpbfDataCD } WMPBurnFormat; typedef enum { wmpbsUnknown, wmpbsBusy, wmpbsReady, wmpbsWaitingForDisc, wmpbsRefreshStatusPending, wmpbsPreparingToBurn, wmpbsBurning, wmpbsStopped, wmpbsErasing, wmpbsDownloading } WMPBurnState; typedef enum { wmpltUnknown, wmpltAll, wmpltLocal, wmpltRemote, wmpltDisc, wmpltPortableDevice } WMPLibraryType; typedef enum { wmpfssUnknown, wmpfssScanning, wmpfssUpdating, wmpfssStopped } WMPFolderScanState; typedef enum { wmpsccetUnknown, wmpsccetInsert, wmpsccetChange, wmpsccetDelete, wmpsccetClear, wmpsccetBeginUpdates, wmpsccetEndUpdates } WMPStringCollectionChangeEventType; interface IWMPMedia; [ odl, uuid(d5f0f4f1-130c-11d3-b14e-00c04f79Faa6), dual, oleautomation ] interface IWMPPlaylist : IDispatch { [id(0x00c9), propget] HRESULT count([out, retval] long *plCount); [id(0x00ca), propget] HRESULT name([out, retval] BSTR *pbstrName); [id(0x00ca), propput] HRESULT name([in] BSTR pbstrName); [id(0x00d2), propget] HRESULT attributeCount([out, retval] long *plCount); [id(0x00d3), propget] HRESULT attributeName( [in] long lIndex, [out, retval] BSTR *pbstrAttributeName); [id(0x00d4), propget] HRESULT Item( [in] long lIndex, [out, retval] IWMPMedia** ppIWMPMedia); [id(0x00cb)] HRESULT getItemInfo( [in] BSTR bstrName, [out, retval] BSTR *pbstrVal); [id(0x00cc)] HRESULT setItemInfo( [in] BSTR bstrName, [in] BSTR bstrValue); [id(0x00d5), propget] HRESULT isIdentical( [in] IWMPPlaylist *pIWMPPlaylist, [out, retval] VARIANT_BOOL *pvbool); [id(0x00cd)] HRESULT clear(); [id(0x00ce)] HRESULT insertItem( [in] long lIndex, [in] IWMPMedia *pIWMPMedia); [id(0x00cf)] HRESULT appendItem([in] IWMPMedia *pIWMPMedia); [id(0x00d0)] HRESULT removeItem([in] IWMPMedia *pIWMPMedia); [id(0x00d1)] HRESULT moveItem( long lIndexOld, long lIndexNew); } [ odl, uuid(94d55e95-3Fac-11d3-b155-00c04f79faa6), dual, oleautomation ] interface IWMPMedia : IDispatch { [id(0x02fb), propget] HRESULT isIdentical( [in] IWMPMedia *pIWMPMedia, [out, retval] VARIANT_BOOL *pvbool); [id(0x02ef), propget] HRESULT sourceURL([out, retval] BSTR *pbstrSourceURL); [id(0x02fc), propget] HRESULT name([out, retval] BSTR *pbstrName); [id(0x02fc), propput] HRESULT name([in] BSTR pbstrName); [id(0x02f0), propget] HRESULT imageSourceWidth([out, retval] long *pWidth); [id(0x02f1), propget] HRESULT imageSourceHeight([out, retval] long *pHeight); [id(0x02f2), propget] HRESULT markerCount([out, retval] long *pMarkerCount); [id(0x02f3)] HRESULT getMarkerTime( [in] long MarkerNum, [out, retval] double *pMarkerTime); [id(0x02f4)] HRESULT getMarkerName( [in] long MarkerNum, [out, retval] BSTR *pbstrMarkerName); [id(0x02f5), propget] HRESULT duration([out, retval] double *pDuration); [id(0x02f6), propget] HRESULT durationString([out, retval] BSTR *pbstrDuration); [id(0x02f7), propget] HRESULT attributeCount([out, retval] long *plCount); [id(0x02f8)] HRESULT getAttributeName( [in] long lIndex, [out, retval] BSTR *pbstrItemName); [id(0x02f9)] HRESULT getItemInfo( [in] BSTR bstrItemName, [out, retval] BSTR *pbstrVal); [id(0x02fa)] HRESULT setItemInfo( [in] BSTR bstrItemName, [in] BSTR bstrVal); [id(0x02fd)] HRESULT getItemInfoByAtom( [in] long lAtom, [out, retval] BSTR *pbstrVal); [id(0x02fe)] HRESULT isMemberOf( [in] IWMPPlaylist *pPlaylist, [out, retval] VARIANT_BOOL *pvarfIsMemberOf); [id(0x02ff)] HRESULT isReadOnlyItem( [in] BSTR bstrItemName, [out, retval] VARIANT_BOOL *pvarfIsReadOnly); } [ odl, uuid(74c09E02-f828-11d2-a74b-00a0c905f36e), dual, oleautomation ] interface IWMPControls : IDispatch { [id(0x003e), propget] HRESULT isAvailable( [in] BSTR bstrItem, [out, retval] VARIANT_BOOL *pIsAvailable); [id(0x0033)] HRESULT play(); [id(0x0034)] HRESULT stop(); [id(0x0035)] HRESULT pause(); [id(0x0036)] HRESULT fastForward(); [id(0x0037)] HRESULT fastReverse(); [id(0x0038), propget] HRESULT currentPosition([out, retval] double *pdCurrentPosition); [id(0x0038), propput] HRESULT currentPosition([in] double pdCurrentPosition); [id(0x0039), propget] HRESULT currentPositionString([out, retval] BSTR *pbstrCurrentPosition); [id(0x003a)] HRESULT next(); [id(0x003b)] HRESULT previous(); [id(0x003c)] HRESULT currentItem([out, retval] IWMPMedia **ppIWMPMedia); [id(0x003c), propput] HRESULT currentItem([in] IWMPMedia *ppIWMPMedia); [id(0x003d), propget] HRESULT currentMarker([out, retval] long *plMarker); [id(0x003d), propput] HRESULT currentMarker([in] long plMarker); [id(0x003f)] HRESULT playItem([in] IWMPMedia *pIWMPMedia); } [ odl, uuid(9104d1ab-80c9-4fed-abf0-2e6417a6df14), dual, oleautomation ] interface IWMPSettings : IDispatch { [id(0x0071), propget] HRESULT isAvailable( [in] BSTR bstrItem, [out, retval] VARIANT_BOOL *pIsAvailable); [id(0x0065), propget] HRESULT autoStart([out, retval] VARIANT_BOOL *pfAutoStart); [id(0x0065), propput] HRESULT autoStart([in] VARIANT_BOOL pfAutoStart); [id(0x006c), propget] HRESULT baseURL([out, retval] BSTR *pbstrBaseURL); [id(0x006c), propput] HRESULT baseURL([in] BSTR pbstrBaseURL); [id(0x006d), propget] HRESULT defaultFrame([out, retval] BSTR *pbstrDefaultFrame); [id(0x006d), propput] HRESULT defaultFrame([in] BSTR pbstrDefaultFrame); [id(0x0067), propget] HRESULT invokeURLs([out, retval] VARIANT_BOOL *pfInvokeURLs); [id(0x0067), propput] HRESULT invokeURLs([in] VARIANT_BOOL pfInvokeURLs); [id(0x0068), propget] HRESULT mute([out, retval] VARIANT_BOOL *pfMute); [id(0x0068), propput] HRESULT mute([in] VARIANT_BOOL pfMute); [id(0x0069), propget] HRESULT playCount([out, retval] long *plCount); [id(0x0069), propput] HRESULT playCount([in] long plCount); [id(0x006a), propget] HRESULT rate([out, retval] double *pdRate); [id(0x006a), propput] HRESULT rate([in] double pdRate); [id(0x0066), propget] HRESULT balance([out, retval] long *plBalance); [id(0x0066), propput] HRESULT balance([in] long plBalance); [id(0x006b), propget] HRESULT volume([out, retval] long *plVolume); [id(0x006b), propput] HRESULT volume([in] long plVolume); [id(0x006e)] HRESULT getMode( [in] BSTR bstrMode, [out, retval] VARIANT_BOOL *pvarfMode); [id(0x006f)] HRESULT setMode( [in] BSTR bstrMode, [in] VARIANT_BOOL varfMode); [id(0x0070), propget] HRESULT enableErrorDialogs([out, retval] VARIANT_BOOL *pfEnableErrorDialogs); [id(0x0070), propput] HRESULT enableErrorDialogs([in] VARIANT_BOOL pfEnableErrorDialogs); } [ odl, uuid(4a976298-8c0d-11d3-b389-00c04f68574b), dual, oleautomation ] interface IWMPStringCollection : IDispatch { [id(0x0191), propget] HRESULT count([out, retval] long *plCount); [id(0x0192)] HRESULT Item( [in] long lIndex, [out, retval] BSTR *pbstrString); } [ odl, uuid(8363bc22-b4b4-4b19-989d-1cd765749dd1), dual, oleautomation ] interface IWMPMediaCollection : IDispatch { [id(0x01c4)] HRESULT add( [in] BSTR bstrURL, [out, retval] IWMPMedia **ppItem); [id(0x01c5)] HRESULT getAll([out, retval] IWMPPlaylist **ppMediaItems); [id(0x01c6)] HRESULT getByName( [in] BSTR bstrName, [out, retval] IWMPPlaylist **ppMediaItems); [id(0x01c7)] HRESULT getByGenre( [in] BSTR bstrGenre, [out, retval] IWMPPlaylist **ppMediaItems); [id(0x01c8)] HRESULT getByAuthor( [in] BSTR bstrAuthor, [out, retval] IWMPPlaylist **ppMediaItems); [id(0x01c9)] HRESULT getByAlbum( [in] BSTR bstrAlbum, [out, retval] IWMPPlaylist **ppMediaItems); [id(0x01ca)] HRESULT getByAttribute( [in] BSTR bstrAttribute, [in] BSTR bstrValue, [out, retval] IWMPPlaylist **ppMediaItems); [id(0x01cb)] HRESULT remove( [in] IWMPMedia *pItem, [in] VARIANT_BOOL varfDeleteFile); [id(0x01cd)] HRESULT getAttributeStringCollection( [in] BSTR bstrAttribute, [in] BSTR bstrMediaType, [out, retval] IWMPStringCollection **ppStringCollection); [id(0x01d6)] HRESULT getMediaAtom( [in] BSTR bstrItemName, [out, retval] long *plAtom); [id(0x01d7)] HRESULT setDeleted( [in] IWMPMedia *pItem, [in] VARIANT_BOOL varfIsDeleted); [id(0x01d8)] HRESULT isDeleted( [in] IWMPMedia *pItem, [out, retval] VARIANT_BOOL *pvarfIsDeleted); } [ odl, uuid(679409c0-99f7-11d3-9fb7-00105aa620bb), dual, oleautomation ] interface IWMPPlaylistArray : IDispatch { [id(0x01f5), propget] HRESULT count([out, retval] long *plCount); [id(0x01f6)] HRESULT Item( [in] long lIndex, [out, retval] IWMPPlaylist **ppItem); } [ odl, uuid(10a13217-23a7-439b-b1c0-d847c79b7774), dual, oleautomation ] interface IWMPPlaylistCollection : IDispatch { [id(0x0228)] HRESULT newPlaylist( [in] BSTR bstrName, [out, retval] IWMPPlaylist **ppItem); [id(0x0229)] HRESULT getAll([out, retval] IWMPPlaylistArray **ppPlaylistArray); [id(0x022a)] HRESULT getByName( [in] BSTR bstrName, [out, retval] IWMPPlaylistArray **ppPlaylistArray); [id(0x022c)] HRESULT remove([in] IWMPPlaylist *pItem); [id(0x0230)] HRESULT setDeleted( [in] IWMPPlaylist *pItem, [in] VARIANT_BOOL varfIsDeleted); [id(0x0231)] HRESULT isDeleted( [in] IWMPPlaylist *pItem, [out, retval] VARIANT_BOOL *pvarfIsDeleted); [id(0x0232)] HRESULT importPlaylist( [in] IWMPPlaylist *pItem, [out, retval] IWMPPlaylist **ppImportedItem); } [ odl, uuid(ec21b779-edef-462d-bba4-ad9dde2b29a7), dual, oleautomation ] interface IWMPNetwork : IDispatch { [id(0x0321), propget] HRESULT bandWidth([out, retval] long *plBandwidth); [id(0x0322), propget] HRESULT recoveredPackets([out, retval] long *plRecoveredPackets); [id(0x0323), propget] HRESULT sourceProtocol([out, retval] BSTR *pbstrSourceProtocol); [id(0x0324), propget] HRESULT receivedPackets([out, retval] long *plReceivedPackets); [id(0x0325), propget] HRESULT lostPackets([out, retval] long *plLostPackets); [id(0x0326), propget] HRESULT receptionQuality([out, retval] long *plReceptionQuality); [id(0x0327), propget] HRESULT bufferingCount([out, retval] long *plBufferingCount); [id(0x0328), propget] HRESULT bufferingProgress([out, retval] long *plBufferingProgress); [id(0x0329), propget] HRESULT bufferingTime([out, retval] long *plBufferingTime); [id(0x0329), propput] HRESULT bufferingTime([in] long plBufferingTime); [id(0x032a), propget] HRESULT frameRate([out, retval] long *plFrameRate); [id(0x032b), propget] HRESULT maxBitRate([out, retval] long *plBitRate); [id(0x032c), propget] HRESULT bitRate([out, retval] long *plBitRate); [id(0x032d)] HRESULT getProxySettings( [in] BSTR bstrProtocol, [out, retval] long *plProxySetting); [id(0x032e)] HRESULT setProxySettings( [in] BSTR bstrProtocol, [in] long lProxySetting); [id(0x032f)] HRESULT getProxyName( [in] BSTR bstrProtocol, [out, retval] BSTR *pbstrProxyName); [id(0x0330)] HRESULT setProxyName( [in] BSTR bstrProtocol, [in] BSTR bstrProxyName); [id(0x0331)] HRESULT getProxyPort( [in] BSTR bstrProtocol, [out, retval] long *lProxyPort); [id(0x0332)] HRESULT setProxyPort( [in] BSTR bstrProtocol, [in] long lProxyPort); [id(0x0333)] HRESULT getProxyExceptionList( [in] BSTR bstrProtocol, [out, retval] BSTR *pbstrExceptionList); [id(0x0334)] HRESULT setProxyExceptionList( [in] BSTR bstrProtocol, [in] BSTR pbstrExceptionList); [id(0x0335)] HRESULT getProxyBypassForLocal( [in] BSTR bstrProtocol, [out, retval] VARIANT_BOOL *pfBypassForLocal); [id(0x0336)] HRESULT setProxyBypassForLocal( [in] BSTR bstrProtocol, [in] VARIANT_BOOL fBypassForLocal); [id(0x0337), propget] HRESULT maxBandwidth([out, retval] long *lMaxBandwidth); [id(0x0337), propput] HRESULT maxBandwidth([in] long lMaxBandwidth); [id(0x0338), propget] HRESULT downloadProgress([out, retval] long *plDownloadProgress); [id(0x0339), propget] HRESULT encodedFrameRate([out, retval] long *plFrameRate); [id(0x033a), propget] HRESULT framesSkipped([out, retval] long *plFrames); } [ odl, uuid(cfab6e98-8730-11d3-b388-00c04f68574b), dual, oleautomation ] interface IWMPCdrom : IDispatch { [id(0x00fb), propget] HRESULT driveSpecifier([out, retval] BSTR *pbstrDrive); [id(0x00fc), propget] HRESULT Playlist([out, retval] IWMPPlaylist **ppPlaylist); [id(0x00fd)] HRESULT eject(); } [ odl, uuid(ee4c8fe2-34b2-11d3-a3bf-006097c9b344), dual, oleautomation ] interface IWMPCdromCollection : IDispatch { [id(0x012d), propget] HRESULT count([out, retval] long *plCount); [id(0x012e)] HRESULT Item( [in] long lIndex, [out, retval] IWMPCdrom **ppItem); [id(0x012f)] HRESULT getByDriveSpecifier( [in] BSTR bstrDriveSpecifier, [out, retval] IWMPCdrom **ppCdrom); } [ odl, uuid(8da61686-4668-4a5c-ae5d-803193293dbe), dual, oleautomation ] interface IWMPDVD : IDispatch { [id(0x03e9), propget] HRESULT isAvailable( [in] BSTR bstrItem, [out, retval] VARIANT_BOOL *pIsAvailable); [id(0x03ea), propget] HRESULT domain([out, retval] BSTR *strDomain); [id(0x03eb)] HRESULT topMenu(); [id(0x03ec)] HRESULT titleMenu(); [id(0x03ed)] HRESULT back(); [id(0x03ee)] HRESULT resume(); } [ odl, uuid(4f2df574-c588-11d3-9ed0-00c04fb6e937), dual, oleautomation ] interface IWMPClosedCaption : IDispatch { [id(0x03b7), propget] HRESULT SAMIStyle([out, retval] BSTR *pbstrSAMIStyle); [id(0x03b7), propput] HRESULT SAMIStyle([in] BSTR pbstrSAMIStyle); [id(0x03b8), propget] HRESULT SAMILang([out, retval] BSTR *pbstrSAMILang); [id(0x03b8), propput] HRESULT SAMILang([in] BSTR pbstrSAMILang); [id(0x03b9), propget] HRESULT SAMIFileName([out, retval] BSTR *pbstrSAMIFileName); [id(0x03b9), propput] HRESULT SAMIFileName([in] BSTR pbstrSAMIFileName); [id(0x03ba), propget] HRESULT captioningId([out, retval] BSTR *pbstrCaptioningID); [id(0x03ba), propput] HRESULT captioningId([in] BSTR pbstrCaptioningID); } [ odl, uuid(3614c646-3b3b-4de7-a81e-930e3f2127b3), dual, oleautomation ] interface IWMPErrorItem : IDispatch { [id(0x0385), propget] HRESULT errorCode([out, retval] long *phr); [id(0x0386), propget] HRESULT errorDescription([out, retval] BSTR *pbstrDescription); [id(0x0387), propget] HRESULT errorContext([out, retval] VARIANT *pvarContext); [id(0x0388), propget] HRESULT remedy([out, retval] long *plRemedy); [id(0x0389), propget] HRESULT customUrl([out, retval] BSTR *pbstrCustomUrl); } [ odl, uuid(a12dcf7d-14ab-4c1b-a8cd-63909f06025b), dual, oleautomation ] interface IWMPError : IDispatch { [id(0x0353)] HRESULT clearErrorQueue(); [id(0x0354), propget] HRESULT errorCount([out, retval] long *plNumErrors); [id(0x0355), propget] HRESULT Item( [in] long dwIndex, [out, retval] IWMPErrorItem **ppErrorItem); [id(0x0356)] HRESULT webHelp(); } [ odl, uuid(40897764-ceab-47be-ad4a-8e28537f9bbf), dual, oleautomation ] interface IWMPPlayerApplication : IDispatch { [id(0x044d)] HRESULT switchToPlayerApplication(); [id(0x044e)] HRESULT switchToControl(); [id(0x044f), propget] HRESULT playerDocked([out, retval] VARIANT_BOOL* pbPlayerDocked); [id(0x0450), propget] HRESULT hasDisplay([out, retval] VARIANT_BOOL *pbHasDisplay); } [ odl, uuid(d84cca99-cce2-11d2-9ecc-0000f8085981), dual, oleautomation ] interface IWMPCore : IDispatch { [id(0x0003)] HRESULT close(); [id(0x0001), propget] HRESULT URL([out, retval] BSTR *pbstrURL); [id(0x0001), propput] HRESULT URL([in] BSTR pbstrURL); [id(0x0002), propget] HRESULT openState([out, retval] WMPOpenState *pwmpos); [id(0x000a), propget] HRESULT playState([out, retval] WMPPlayState *pwmpps); [id(0x0004), propget] HRESULT controls([out, retval] IWMPControls **ppControl); [id(0x0005), propget] HRESULT settings([out, retval] IWMPSettings **ppSettings); [id(0x0006), propget] HRESULT currentMedia([out, retval] IWMPMedia **ppMedia); [id(0x0006), propput] HRESULT currentMedia([in] IWMPMedia *ppMedia); [id(0x0008), propget] HRESULT mediaCollection([out, retval] IWMPMediaCollection **ppMediaCollection); [id(0x0009), propget] HRESULT playlistCollection([out, retval] IWMPPlaylistCollection **ppPlaylistCollection); [id(0x000b), propget] HRESULT versionInfo([out, retval] BSTR *pbstrVersionInfo); [id(0x000c)] HRESULT launchURL([in] BSTR bstrURL); [id(0x0007), propget] HRESULT network([out, retval] IWMPNetwork **ppQNI); [id(0x000d), propget] HRESULT currentPlaylist([out, retval] IWMPPlaylist **ppPL); [id(0x000d), propput] HRESULT currentPlaylist([in] IWMPPlaylist *ppPL); [id(0x000e), propget] HRESULT cdromCollection([out, retval] IWMPCdromCollection **ppCdromCollection); [id(0x000f), propget] HRESULT closedCaption([out, retval] IWMPClosedCaption **ppClosedCaption); [id(0x0010), propget] HRESULT isOnline([out, retval] VARIANT_BOOL *pfOnline); [id(0x0011), propget] HRESULT Error([out, retval] IWMPError **ppError); [id(0x0012), propget] HRESULT status([out, retval] BSTR *pbstrStatus); } [ odl, uuid(bc17e5B7-7561-4c18-bb90-17d485775659), dual, oleautomation ] interface IWMPCore2 : IWMPCore { [id(0x0028), propget] HRESULT dvd([out, retval] IWMPDVD **ppDVD); } [ odl, uuid(7587c667-628f-499f-88e7-6A6f4e888464), dual, oleautomation ] interface IWMPCore3 : IWMPCore2 { [id(0x0029)] HRESULT newPlaylist( [in] BSTR bstrName, [in] BSTR bstrURL, [out, retval] IWMPPlaylist **ppPlaylist); [id(0x002a)] HRESULT newMedia( [in] BSTR bstrURL, [out, retval] IWMPMedia **ppMedia); } [ odl, uuid(6c497d62-8919-413c-82db-e935fb3ec584), dual, oleautomation ] interface IWMPPlayer4 : IWMPCore3 { [id(0x0013), propget] HRESULT enabled([out, retval] VARIANT_BOOL *pbEnabled); [id(0x0013), propput] HRESULT enabled([in] VARIANT_BOOL pbEnabled); [id(0x0015), propget] HRESULT fullScreen([out, retval] VARIANT_BOOL *pbFullScreen); [id(0x0015), propput] HRESULT fullScreen(VARIANT_BOOL pbFullScreen); [id(0x0016), propget] HRESULT enableContextMenu([out, retval] VARIANT_BOOL *pbEnableContextMenu); [id(0x0016), propput] HRESULT enableContextMenu(VARIANT_BOOL pbEnableContextMenu); [id(0x0017), propput] HRESULT uiMode([in] BSTR pbstrMode); [id(0x0017), propget] HRESULT uiMode([out, retval] BSTR *pbstrMode); [id(0x0018), propget] HRESULT stretchToFit([out, retval] VARIANT_BOOL *pbEnabled); [id(0x0018), propput] HRESULT stretchToFit([in] VARIANT_BOOL pbEnabled); [id(0x0019), propget] HRESULT windowlessVideo([out, retval] VARIANT_BOOL *pbEnabled); [id(0x0019), propput] HRESULT windowlessVideo([in] VARIANT_BOOL pbEnabled); [id(0x001a), propget] HRESULT isRemote([out, retval] VARIANT_BOOL *pvarfIsRemote); [id(0x001b), propget] HRESULT playerApplication([out, retval] IWMPPlayerApplication **ppIWMPPlayerApplication); [id(0x001c)] HRESULT openPlayer([in] BSTR bstrURL); } [ odl, uuid(6BF52A4F-394A-11D3-B153-00C04F79FAA6), dual, oleautomation ] interface IWMPPlayer : IWMPCore { [id(0x00000013), propget] HRESULT enabled([out, retval] VARIANT_BOOL* pbEnabled); [id(0x00000013), propput] HRESULT enabled([in] VARIANT_BOOL pbEnabled); [id(0x00000015), propget] HRESULT fullScreen([out, retval] VARIANT_BOOL* pbFullScreen); [id(0x00000015), propput] HRESULT fullScreen(VARIANT_BOOL pbFullScreen); [id(0x00000016), propget] HRESULT enableContextMenu([out, retval] VARIANT_BOOL* pbEnableContextMenu); [id(0x00000016), propput] HRESULT enableContextMenu(VARIANT_BOOL pbEnableContextMenu); [id(0x00000017), propput] HRESULT uiMode([in] BSTR pbstrMode); [id(0x00000017), propget] HRESULT uiMode([out, retval] BSTR* pbstrMode); }; [ odl, uuid(82a2986c-0293-4fd0-b279-b21b86c058be), oleautomation ] interface IWMPSyncDevice : IUnknown { [propget] HRESULT friendlyName([out, retval] BSTR *name); [propput] HRESULT friendlyName([in] BSTR name); [propget] HRESULT deviceName([out, retval] BSTR *name); [propget] HRESULT deviceId([out, retval] BSTR *device); [propget] HRESULT partnershipIndex([out, retval] long *index); [propget] HRESULT connected([out, retval] VARIANT_BOOL *connected); [propget] HRESULT status([out, retval] WMPDeviceStatus *status); [propget] HRESULT syncState([out, retval] WMPSyncState *state); [propget] HRESULT progress([out, retval] long *progress); HRESULT getItemInfo( [in] BSTR name, [out, retval] BSTR *val); HRESULT createPartnership([in] VARIANT_BOOL showui); HRESULT deletePartnership(); HRESULT start(); HRESULT stop(); HRESULT showSettings(); HRESULT isIdentical( [in] IWMPSyncDevice *device, [out, retval] VARIANT_BOOL *ret); } [ odl, uuid(88afb4b2-140a-44d2-91e6-4543da467cd1), oleautomation ] interface IWMPSyncDevice2 : IWMPSyncDevice { HRESULT setItemInfo( [in] BSTR name, [in] BSTR val); } [ odl, uuid(56e2294f-69ed-4629-a869-aea72c0dcc2c), oleautomation ] interface IWMPCdromRip : IUnknown { [propget] HRESULT ripState([out, retval] WMPRipState *state); [propget] HRESULT ripProgress([out, retval] long *progress); HRESULT startRip(); HRESULT stopRip(); } [ odl, uuid(bd94dbeb-417f-4928-aa06-087d56ed9b59), oleautomation ] interface IWMPCdromBurn : IUnknown { HRESULT isAvailable( [in] BSTR item, [out, retval] VARIANT_BOOL *available); HRESULT getItemInfo( [in] BSTR item, [out, retval] BSTR *val); [propget] HRESULT label([out, retval] BSTR *label); [propput] HRESULT label([in] BSTR label); [propget] HRESULT burnFormat([out, retval] WMPBurnFormat *format); [propput] HRESULT burnFormat([in] WMPBurnFormat format); [propget] HRESULT burnPlaylist([out, retval] IWMPPlaylist **playlist); [propput] HRESULT burnPlaylist([in] IWMPPlaylist *playlist); HRESULT refreshStatus(); [propget] HRESULT burnState([out, retval] WMPBurnState *state); [propget] HRESULT burnProgress([out, retval] long *progress); HRESULT startBurn(); HRESULT stopBurn(); HRESULT erase(); } [ odl, uuid(3df47861-7df1-4c1f-a81b-4c26f0f7a7c6), oleautomation ] interface IWMPLibrary : IUnknown { [propget] HRESULT name([out, retval] BSTR *name); [propget] HRESULT type([out, retval] WMPLibraryType *type); [propget] HRESULT mediaCollection([out, retval] IWMPMediaCollection **collection); HRESULT isIdentical( [in] IWMPLibrary *wmplibrary, [out, retval] VARIANT_BOOL *ret); } [ uuid(19a6627b-da9e-47c1-bb23-00b5e668236a), odl ] interface IWMPEvents : IUnknown { void OpenStateChange([in] long state); void PlayStateChange([in] long state); void AudioLanguageChange([in] long lang); void StatusChange(); void ScriptCommand( [in] BSTR type, [in] BSTR param); void NewStream(); void Disconnect([in] long result); void Buffering([in] VARIANT_BOOL start); void Error(); void Warning( [in] long warning, [in] long param, [in] BSTR description); void EndOfStream([in] long result); void PositionChange( [in] double old_position, [in] double new_position); void MarkerHit([in] long marker); void DurationUnitChange([in] long duration); void CdromMediaChange([in] long num); void PlaylistChange( [in] IDispatch *playlist, [in] WMPPlaylistChangeEventType change); void CurrentPlaylistChange([in] WMPPlaylistChangeEventType change); void CurrentPlaylistItemAvailable([in] BSTR item); void MediaChange([in] IDispatch *item); void CurrentMediaItemAvailable([in] BSTR name); void CurrentItemChange([in] IDispatch *media); void MediaCollectionChange(); void MediaCollectionAttributeStringAdded( [in] BSTR name, [in] BSTR val); void MediaCollectionAttributeStringRemoved( [in] BSTR name, [in] BSTR val); void MediaCollectionAttributeStringChanged( [in] BSTR name, [in] BSTR old_val, [in] BSTR new_val); void PlaylistCollectionChange(); void PlaylistCollectionPlaylistAdded([in] BSTR name); void PlaylistCollectionPlaylistRemoved([in] BSTR name); void PlaylistCollectionPlaylistSetAsDeleted( [in] BSTR name, [in] VARIANT_BOOL deleted); void ModeChange( [in] BSTR ModeName, [in] VARIANT_BOOL value); void MediaError([in] IDispatch *media); void OpenPlaylistSwitch([in] IDispatch *item); void DomainChange([in] BSTR domain); void SwitchedToPlayerApplication(); void SwitchedToControl(); void PlayerDockedStateChange(); void PlayerReconnect(); void Click( [in] short button, [in] short shift_state, [in] long x, [in] long y); void DoubleClick( [in] short button, [in] short shift_state, [in] long fX, [in] long fY); void KeyDown( [in] short keycode, [in] short shift_state); void KeyPress([in] short ascii); void KeyUp( [in] short keycode, [in] short shift_state); void MouseDown( [in] short button, [in] short nShiftState, [in] long x, [in] long y); void MouseMove( [in] short button, [in] short shift_state, [in] long x, [in] long y); void MouseUp( [in] short button, [in] short shift_state, [in] long x, [in] long y); } [ uuid(1e7601fa-47ea-4107-9ea9-9004ed9684ff), odl ] interface IWMPEvents2 : IWMPEvents { void DeviceConnect([in] IWMPSyncDevice *device); void DeviceDisconnect([in] IWMPSyncDevice *device); void DeviceStatusChange( [in] IWMPSyncDevice *device, [in] WMPDeviceStatus status); void DeviceSyncStateChange( [in] IWMPSyncDevice *device, [in] WMPSyncState state); void DeviceSyncError( [in] IWMPSyncDevice *device, [in] IDispatch *media); void CreatePartnershipComplete( [in] IWMPSyncDevice *device, [in] HRESULT result); } [ uuid(1f504270-a66b-4223-8e96-26a06c63d69f), odl ] interface IWMPEvents3 : IWMPEvents2 { void CdromRipStateChange( [in] IWMPCdromRip *rip, [in] WMPRipState state); void CdromRipMediaError( [in] IWMPCdromRip *rip, [in] IDispatch *media); void CdromBurnStateChange( [in] IWMPCdromBurn *burn, [in] WMPBurnState state); void CdromBurnMediaError( [in] IWMPCdromBurn *burn, [in] IDispatch *media); void CdromBurnError( [in] IWMPCdromBurn *burn, [in] HRESULT error); void LibraryConnect( [in] IWMPLibrary *wmplibrary); void LibraryDisconnect( [in] IWMPLibrary *wmplibrary); void FolderScanStateChange( [in] WMPFolderScanState state); void StringCollectionChange( [in] IDispatch *collection, [in] WMPStringCollectionChangeEventType change, [in] long index); void MediaCollectionMediaAdded( [in] IDispatch *media); void MediaCollectionMediaRemoved( [in] IDispatch *media); } [ uuid(26dabcfa-306b-404d-9a6f-630a8405048d), odl ] interface IWMPEvents4 : IWMPEvents3 { void DeviceEstimation( [in] IWMPSyncDevice *device, [in] HRESULT result, [in] LONGLONG used_space, [in] LONGLONG estimated_space); } [ hidden, uuid(6bf52a51-394a-11d3-b153-00c04f79faa6) ] interface _WMPOCXEvents : IDispatch {} [ helpstring("Windows Media Player"), threading(apartment), progid("WMPlayer.OCX.7"), vi_progid("WMPlayer.OCX"), uuid(6bf52a52-394a-11d3-b153-00c04f79faa6) ] coclass WindowsMediaPlayer { [default] interface IWMPPlayer4; /* interface IWMPPlayer3; */ /* interface IWMPPlayer2; */ interface IWMPPlayer; interface IWMPControls; interface IWMPSettings; interface IWMPPlaylist; interface IWMPMedia; interface IWMPMediaCollection; interface IWMPPlaylistCollection; interface IWMPCdromCollection; interface IWMPError; interface IWMPErrorItem; /* interface IWMPErrorItem2; */ interface IWMPClosedCaption; interface IWMPDVD; /* interface IWMPControls2; */ /* interface IWMPMedia2; */ /* interface IWMPMedia3; */ /* interface IWMPMetadataPicture; */ /* interface IWMPMetadataText; */ /* interface IWMPSettings2; */ /* interface IWMPControls3; */ /* interface IWMPClosedCaption2; */ /* interface IWMPMediaCollection2; */ /* interface IWMPStringCollection2; */ [default, source] dispinterface _WMPOCXEvents; } } ================================================ FILE: wine/windows/wmpids.h ================================================ /* * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* WMPCoreEvents */ #define DISPID_WMPCOREEVENT_OPENSTATECHANGE 5001 #define DISPID_WMPCOREEVENT_STATUSCHANGE 5002 #define DISPID_WMPCOREEVENT_PLAYSTATECHANGE 5101 #define DISPID_WMPCOREEVENT_MEDIACHANGE 5802 #define DISPID_WMPCOREEVENT_CURRENTITEMCHANGE 5806 ================================================ FILE: wine/windows/wmsbuffer.idl ================================================ /* * Copyright 2012 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; [ object, uuid(e1cd3524-03d7-11d2-9eed-006097d2d7cf), pointer_default(unique), local ] interface INSSBuffer : IUnknown { HRESULT GetLength( [out] DWORD *pdwLength); HRESULT SetLength( [in] DWORD dwLength); HRESULT GetMaxLength( [out] DWORD *pdwLength); HRESULT GetBuffer( [out] BYTE **ppdwBuffer); HRESULT GetBufferAndLength( [out] BYTE **ppdwBuffer, [out] DWORD *pdwLength); } ================================================ FILE: wine/windows/wmsdk.h ================================================ /* * Copyright (C) 2016 Austin English * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* Unlikely to ever be needed on Wine, currently unimplemented */ /* #include */ #include "wmsdkidl.h" /* Currently unimplemented */ /* #include "asferr.h" */ #include "nserror.h" ================================================ FILE: wine/windows/wmsdkidl.idl ================================================ /* * Copyright 2012 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "wmsbuffer.idl"; import "drmexternals.idl"; typedef struct _WMMediaType { GUID majortype; GUID subtype; BOOL bFixedSizeSamples; BOOL bTemporalCompression; ULONG lSampleSize; GUID formattype; IUnknown *pUnk; ULONG cbFormat; [size_is(cbFormat)] BYTE *pbFormat; } WM_MEDIA_TYPE; typedef struct _WMWriterStatistics { QWORD qwSampleCount; QWORD qwByteCount; QWORD qwDroppedSampleCount; QWORD qwDroppedByteCount; DWORD dwCurrentBitrate; DWORD dwAverageBitrate; DWORD dwExpectedBitrate; DWORD dwCurrentSampleRate; DWORD dwAverageSampleRate; DWORD dwExpectedSampleRate; } WM_WRITER_STATISTICS; typedef struct _WMWriterStatisticsEx { DWORD dwBitratePlusOverhead; DWORD dwCurrentSampleDropRateInQueue; DWORD dwCurrentSampleDropRateInCodec; DWORD dwCurrentSampleDropRateInMultiplexer; DWORD dwTotalSampleDropsInQueue; DWORD dwTotalSampleDropsInCodec; DWORD dwTotalSampleDropsInMultiplexer; } WM_WRITER_STATISTICS_EX; typedef struct _WMReaderStatistics { DWORD cbSize; DWORD dwBandwidth; DWORD cPacketsReceived; DWORD cPacketsRecovered; DWORD cPacketsLost; WORD wQuality; } WM_READER_STATISTICS; typedef struct _WMReaderClientInfo { DWORD cbSize; WCHAR *wszLang; WCHAR *wszBrowserUserAgent; WCHAR *wszBrowserWebPage; QWORD qwReserved; LPARAM *pReserved; WCHAR *wszHostExe; QWORD qwHostVersion; WCHAR *wszPlayerUserAgent; } WM_READER_CLIENTINFO; typedef enum WMT_ATTR_DATATYPE { WMT_TYPE_DWORD = 0, WMT_TYPE_STRING = 1, WMT_TYPE_BINARY = 2, WMT_TYPE_BOOL = 3, WMT_TYPE_QWORD = 4, WMT_TYPE_WORD = 5, WMT_TYPE_GUID = 6, } WMT_ATTR_DATATYPE; typedef enum WMT_STATUS { WMT_ERROR = 0, WMT_OPENED = 1, WMT_BUFFERING_START = 2, WMT_BUFFERING_STOP = 3, WMT_EOF = 4, WMT_END_OF_FILE = 4, WMT_END_OF_SEGMENT = 5, WMT_END_OF_STREAMING = 6, WMT_LOCATING = 7, WMT_CONNECTING = 8, WMT_NO_RIGHTS = 9, WMT_MISSING_CODEC = 10, WMT_STARTED = 11, WMT_STOPPED = 12, WMT_CLOSED = 13, WMT_STRIDING = 14, WMT_TIMER = 15, WMT_INDEX_PROGRESS = 16, WMT_SAVEAS_START = 17, WMT_SAVEAS_STOP = 18, WMT_NEW_SOURCEFLAGS = 19, WMT_NEW_METADATA = 20, WMT_BACKUPRESTORE_BEGIN = 21, WMT_SOURCE_SWITCH = 22, WMT_ACQUIRE_LICENSE = 23, WMT_INDIVIDUALIZE = 24, WMT_NEEDS_INDIVIDUALIZATION = 25, WMT_NO_RIGHTS_EX = 26, WMT_BACKUPRESTORE_END = 27, WMT_BACKUPRESTORE_CONNECTING = 28, WMT_BACKUPRESTORE_DISCONNECTING = 29, WMT_ERROR_WITHURL = 30, WMT_RESTRICTED_LICENSE = 31, WMT_CLIENT_CONNECT = 32, WMT_CLIENT_DISCONNECT = 33, WMT_NATIVE_OUTPUT_PROPS_CHANGED = 34, WMT_RECONNECT_START = 35, WMT_RECONNECT_END = 36, WMT_CLIENT_CONNECT_EX = 37, WMT_CLIENT_DISCONNECT_EX = 38, WMT_SET_FEC_SPAN = 39, WMT_PREROLL_READY = 40, WMT_PREROLL_COMPLETE = 41, WMT_CLIENT_PROPERTIES = 42, WMT_LICENSEURL_SIGNATURE_STATE = 43, WMT_INIT_PLAYLIST_BURN = 44, WMT_TRANSCRYPTOR_INIT = 45, WMT_TRANSCRYPTOR_SEEKED = 46, WMT_TRANSCRYPTOR_READ = 47, WMT_TRANSCRYPTOR_CLOSED = 48, WMT_PROXIMITY_RESULT = 49, WMT_PROXIMITY_COMPLETED = 50, WMT_CONTENT_ENABLER = 51 } WMT_STATUS; typedef enum WMT_STREAM_SELECTION { WMT_OFF = 0, WMT_CLEANPOINT_ONLY = 1, WMT_ON = 2, } WMT_STREAM_SELECTION; typedef enum WMT_VERSION { WMT_VER_4_0 = 0x00040000, WMT_VER_7_0 = 0x00070000, WMT_VER_8_0 = 0x00080000, WMT_VER_9_0 = 0x00090000 } WMT_VERSION; typedef enum WMT_PLAY_MODE { WMT_PLAY_MODE_AUTOSELECT, WMT_PLAY_MODE_LOCAL, WMT_PLAY_MODE_DOWNLOAD, WMT_PLAY_MODE_STREAMING } WMT_PLAY_MODE; typedef enum tagWMT_OFFSET_FORMAT { WMT_OFFSET_FORMAT_100NS, WMT_OFFSET_FORMAT_FRAME_NUMBERS, WMT_OFFSET_FORMAT_PLAYLIST_OFFSET, WMT_OFFSET_FORMAT_TIMECODE, WMT_OFFSET_FORMAT_100NS_APPROXIMATE } WMT_OFFSET_FORMAT; typedef enum WMT_CODEC_INFO_TYPE { WMT_CODECINFO_AUDIO = 0, WMT_CODECINFO_VIDEO = 1, WMT_CODECINFO_UNKNOWN = 0xFFFFFFFF, } WMT_CODEC_INFO_TYPE; typedef enum WMT_PROXY_SETTINGS { WMT_PROXY_SETTING_NONE = 0, WMT_PROXY_SETTING_MANUAL = 1, WMT_PROXY_SETTING_AUTO = 2, WMT_PROXY_SETTING_BROWSER = 3, WMT_PROXY_SETTING_MAX } WMT_PROXY_SETTINGS; typedef enum tagWMT_STORAGE_FORMAT { WMT_Storage_Format_MP3 = 0, WMT_Storage_Format_V1 = 1 } WMT_STORAGE_FORMAT; #include typedef struct _WMStreamPrioritizationRecord { WORD wStreamNumber; BOOL fMandatory; } WM_STREAM_PRIORITY_RECORD; #include typedef struct _WM_PORT_NUMBER_RANGE { WORD wPortBegin; WORD wPortEnd; } WM_PORT_NUMBER_RANGE; typedef LPCWSTR LPCWSTR_WMSDK_TYPE_SAFE; [ object, uuid(6d7cdc70-9888-11d3-8edc-00c04f6109cf), pointer_default(unique), local ] interface IWMStatusCallback : IUnknown { HRESULT OnStatus( [in] WMT_STATUS Status, [in] HRESULT hr, [in] WMT_ATTR_DATATYPE dwType, [in] BYTE *pValue, [in] void *pvContext); } [ object, uuid(96406bd8-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMReaderCallback : IWMStatusCallback { HRESULT OnSample( [in] DWORD dwOutputNum, [in] QWORD cnsSampleTime, [in] QWORD cnsSampleDuration, [in] DWORD dwFlags, [in] INSSBuffer *pSample, [in] void *pvContext); } [ object, uuid(96406Bdd-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMStreamList : IUnknown { HRESULT GetStreams( [out, size_is(*pcStreams)] WORD *pwStreamNumArray, [in, out] WORD *pcStreams); HRESULT AddStream([in] WORD wStreamNum); HRESULT RemoveStream([in] WORD wStreamNum); } [ object, uuid(96406Bde-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMMutualExclusion : IWMStreamList { HRESULT GetType([out] GUID *pguidType); HRESULT SetType([in] REFGUID guidType); } [ object, uuid(ad694af1-f8d9-42f8-bc47-70311b0c4f9e), pointer_default(unique), local ] interface IWMBandwidthSharing : IWMStreamList { HRESULT GetType([out] GUID *guid); HRESULT SetType([in] REFGUID guid); HRESULT GetBandwidth( [out] DWORD *bitrate, [out] DWORD *buffer); HRESULT SetBandwidth( [in] DWORD bitrate, [in] DWORD buffer); } [ object, uuid(8c1c6090-f9a8-4748-8ec3-dd1108ba1e77), pointer_default(unique), local ] interface IWMStreamPrioritization : IUnknown { HRESULT GetPriorityRecords( [out] WM_STREAM_PRIORITY_RECORD *array, [in, out] WORD *records); HRESULT SetPriorityRecords( [in] WM_STREAM_PRIORITY_RECORD *array, [in] WORD records); } [ object, uuid(96406Bdc-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMStreamConfig : IUnknown { HRESULT GetStreamType([out] GUID *pguidStreamType); HRESULT GetStreamNumber([out] WORD *pwStreamNum); HRESULT SetStreamNumber([in] WORD wStreamNum); HRESULT GetStreamName( [out, size_is(*pcchStreamName)] WCHAR *pwszStreamName, [in, out] WORD *pcchStreamName); HRESULT SetStreamName([in] LPCWSTR_WMSDK_TYPE_SAFE pwszStreamName); HRESULT GetConnectionName( [out, size_is(*pcchInputName)] WCHAR *pwszInputName, [in, out] WORD *pcchInputName); HRESULT SetConnectionName([in] LPCWSTR_WMSDK_TYPE_SAFE pwszInputName); HRESULT GetBitrate([out] DWORD *pdwBitrate); HRESULT SetBitrate([in] DWORD pdwBitrate); HRESULT GetBufferWindow([out] DWORD *pmsBufferWindow); HRESULT SetBufferWindow([in] DWORD msBufferWindow); } [ object, uuid(96406bdb-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMProfile : IUnknown { HRESULT GetVersion( [out] WMT_VERSION *pdwVersion); HRESULT GetName( [out, size_is(*pcchName)] WCHAR *pwszName, [in, out] DWORD *pcchName); HRESULT SetName( [in] const WCHAR *pwszName); HRESULT GetDescription( [out, size_is(*pcchDescription)] WCHAR *pwszDescription, [in, out] DWORD *pcchDescription); HRESULT SetDescription( [in] const WCHAR *pwszDescription); HRESULT GetStreamCount( [out] DWORD *pcStreams); HRESULT GetStream( [in] DWORD dwStreamIndex, [out] IWMStreamConfig **ppConfig); HRESULT GetStreamByNumber( [in] WORD wStreamNum, [out] IWMStreamConfig **ppConfig); HRESULT RemoveStream( [in] IWMStreamConfig *pConfig); HRESULT RemoveStreamByNumber( [in] WORD wStreamNum); HRESULT AddStream( [in] IWMStreamConfig *pConfig); HRESULT ReconfigStream( [in] IWMStreamConfig *pConfig); HRESULT CreateNewStream( [in] REFGUID guidStreamType, [out] IWMStreamConfig **ppConfig); HRESULT GetMutualExclusionCount( [out] DWORD *pcME); HRESULT GetMutualExclusion( [in] DWORD dwMEIndex, [out] IWMMutualExclusion **ppME); HRESULT RemoveMutualExclusion( [in] IWMMutualExclusion *pME); HRESULT AddMutualExclusion( [in] IWMMutualExclusion *pME); HRESULT CreateNewMutualExclusion( [out] IWMMutualExclusion **ppME); } [ object, uuid(07e72d33-d94e-4be7-8843-60ae5ff7e5f5), pointer_default(unique), local ] interface IWMProfile2 : IWMProfile { HRESULT GetProfileID([out] GUID *guid); } [ object, uuid(00ef96cc-a461-4546-8bcd-c9a28f0e06f5), pointer_default(unique), local ] interface IWMProfile3 : IWMProfile2 { HRESULT GetStorageFormat([out] WMT_STORAGE_FORMAT *storage); HRESULT SetStorageFormat([in] WMT_STORAGE_FORMAT storage); HRESULT GetBandwidthSharingCount([out] DWORD *count); HRESULT GetBandwidthSharing( [in] DWORD index, [out] IWMBandwidthSharing **bandwidth); HRESULT RemoveBandwidthSharing([in] IWMBandwidthSharing *bandwidth); HRESULT AddBandwidthSharing([in] IWMBandwidthSharing *bandwidth); HRESULT CreateNewBandwidthSharing([out] IWMBandwidthSharing **bandwidth); HRESULT GetStreamPrioritization([out] IWMStreamPrioritization **stream); HRESULT SetStreamPrioritization([in] IWMStreamPrioritization *stream); HRESULT RemoveStreamPrioritization(); HRESULT CreateNewStreamPrioritization([out] IWMStreamPrioritization **stream); HRESULT GetExpectedPacketCount( [in] QWORD duration, [out] QWORD *packets); } [ object, uuid(d16679f2-6ca0-472d-8d31-2f5d55aee155), pointer_default(unique), local ] interface IWMProfileManager : IUnknown { HRESULT CreateEmptyProfile( [in] WMT_VERSION dwVersion, [out] IWMProfile **ppProfile); HRESULT LoadProfileByID( [in] REFGUID guidProfile, [out] IWMProfile **ppProfile); HRESULT LoadProfileByData( [in] const WCHAR *pwszProfile, [out] IWMProfile **ppProfile); HRESULT SaveProfile( [in] IWMProfile *pIWMProfile, [in] WCHAR *pwszProfile, [in, out] DWORD *pdwLength); HRESULT GetSystemProfileCount( [out] DWORD *pcProfiles); HRESULT LoadSystemProfile( [in] DWORD dwProfileIndex, [out] IWMProfile **ppProfile); } [ object, uuid(7a924e51-73c1-494d-8019-23d37ed9b89a), pointer_default(unique), local ] interface IWMProfileManager2 : IWMProfileManager { HRESULT GetSystemProfileVersion(WMT_VERSION *version); HRESULT SetSystemProfileVersion(WMT_VERSION version); }; cpp_quote("HRESULT WINAPI WMCreateProfileManager(IWMProfileManager**);") [ object, uuid(a970f41e-34de-4a98-b3ba-e4b3ca7528f0), pointer_default(unique), local ] interface IWMCodecInfo : IUnknown { HRESULT GetCodecInfoCount( [in] REFGUID guid, [out] DWORD *count); HRESULT GetCodecFormatCount( [in] REFGUID guid, [in] DWORD codecindex, [out] DWORD *formatcount); HRESULT GetCodecFormat( [in] REFGUID guid, [in] DWORD codecindex, [in] DWORD formatindex, [out] IWMStreamConfig **streamconfig); } [ object, uuid(aa65e273-b686-4056-91ec-dd768d4df710), pointer_default(unique), local ] interface IWMCodecInfo2 : IWMCodecInfo { HRESULT GetCodecName( [in] REFGUID guid, [in] DWORD codecindex, [out, size_is(*namesize)] WCHAR *name, [in, out] DWORD *namesize); HRESULT GetCodecFormatDesc( [in] REFGUID guid, [in] DWORD codecindex, [in] DWORD formatindex, [out] IWMStreamConfig **streamconfig, [out, size_is(*descrsize)] WCHAR *description, [in, out] DWORD *descrsize); } [ object, uuid(7e51f487-4d93-4f98-8ab4-27d0565adc51), pointer_default(unique), local ] interface IWMCodecInfo3 : IWMCodecInfo2 { HRESULT GetCodecFormatProp( [in] REFGUID guid, [in] DWORD codecindex, [in] DWORD formatindex, [in] const WCHAR *name, [out] WMT_ATTR_DATATYPE *type, [out, size_is(*size)] BYTE *value, [in, out] DWORD *size); HRESULT GetCodecProp( [in] REFGUID guid, [in] DWORD codecindex, [in] const WCHAR *name, [out] WMT_ATTR_DATATYPE *type, [out, size_is(*size)] BYTE *value, [in, out] DWORD *size); HRESULT SetCodecEnumerationSetting( [in] REFGUID guid, [in] DWORD codecindex, [in] const WCHAR *name, [in] WMT_ATTR_DATATYPE type, [in, size_is(size)] const BYTE *value, [in] DWORD size); HRESULT GetCodecEnumerationSetting( [in] REFGUID guid, [in] DWORD codecindex, [in] const WCHAR *name, [out] WMT_ATTR_DATATYPE *type, [out, size_is(*size)] BYTE *value, [in, out] DWORD *size); } cpp_quote("static const WCHAR g_wszNumPasses[] = {'_','P','A','S','S','E','S','U','S','E','D',0};") cpp_quote("static const WCHAR g_wszVBREnabled[] = {'_','V','B','R','E','N','A','B','L','E','D',0};") [ object, uuid(96406bce-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMMediaProps : IUnknown { HRESULT GetType( [out] GUID *pguidType); HRESULT GetMediaType( [out] WM_MEDIA_TYPE *pType, [in, out] DWORD *pcbType); HRESULT SetMediaType( [in] WM_MEDIA_TYPE *pType); } [ object, uuid(96406bd7-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMOutputMediaProps : IWMMediaProps { HRESULT GetStreamGroupName( [out, size_is(*pcchName)] WCHAR *pwszName, [in, out] WORD *pcchName); HRESULT GetConnectionName( [out, size_is(*pcchName)] WCHAR *pwszName, [in, out] WORD *pcchName); } [ object, uuid(96406bd9-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMMetadataEditor : IUnknown { HRESULT Open( [in] const WCHAR *pwszFilename); HRESULT Close(); HRESULT Flush(); } [ object, uuid(96406bd6-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMReader : IUnknown { HRESULT Open( [in] const WCHAR *pwszURL, [in] IWMReaderCallback *pCallback, [in] void *pvContext); HRESULT Close(); HRESULT GetOutputCount( [out] DWORD *pcOutputs); HRESULT GetOutputProps( [in] DWORD dwOutputNum, [out] IWMOutputMediaProps **ppOutput); HRESULT SetOutputProps( [in] DWORD dwOutputNum, [in] IWMOutputMediaProps *pOutput); HRESULT GetOutputFormatCount( [in] DWORD dwOutputNumber, [out] DWORD *pcFormats); HRESULT GetOutputFormat( [in] DWORD dwOutputNumber, [in] DWORD dwFormatNumber, [out] IWMOutputMediaProps** ppProps); HRESULT Start( [in] QWORD cnsStart, [in] QWORD cnsDuration, [in] float fRate, [in] void *pvContext); HRESULT Stop(); HRESULT Pause(); HRESULT Resume(); } [ object, uuid(e5b7ca9a-0f1c-4f66-9002-74ec50d8b304), pointer_default(unique), local ] interface IWMPlayerHook : IUnknown { HRESULT PreDecode(); } [ object, uuid(96406bea-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMReaderAdvanced : IUnknown { HRESULT SetUserProvidedClock( [in] BOOL fUserClock); HRESULT GetUserProvidedClock( [out] BOOL *pfUserClock); HRESULT DeliverTime( [in] QWORD cnsTime); HRESULT SetManualStreamSelection( [in] BOOL fSelection); HRESULT GetManualStreamSelection( [out] BOOL *pfSelection); HRESULT SetStreamsSelected( [in] WORD cStreamCount, [in] WORD *pwStreamNumbers, [in] WMT_STREAM_SELECTION *pSelections); HRESULT GetStreamSelected( [in] WORD wStreamNum, [out] WMT_STREAM_SELECTION *pSelection); HRESULT SetReceiveSelectionCallbacks( [in] BOOL fGetCallbacks); HRESULT GetReceiveSelectionCallbacks( [out] BOOL *pfGetCallbacks); HRESULT SetReceiveStreamSamples( [in] WORD wStreamNum, [in] BOOL fReceiveStreamSamples); HRESULT GetReceiveStreamSamples( [in] WORD wStreamNum, [out] BOOL *pfReceiveStreamSamples); HRESULT SetAllocateForOutput( [in] DWORD dwOutputNum, [in] BOOL fAllocate); HRESULT GetAllocateForOutput( [in] DWORD dwOutputNum, [out] BOOL *pfAllocate); HRESULT SetAllocateForStream( [in] WORD wStreamNum, [in] BOOL fAllocate); HRESULT GetAllocateForStream( [in] WORD dwStreamNum, [out] BOOL *pfAllocate); HRESULT GetStatistics( [in, out] WM_READER_STATISTICS *pStatistics); HRESULT SetClientInfo( [in] WM_READER_CLIENTINFO *pClientInfo); HRESULT GetMaxOutputSampleSize( [in] DWORD dwOutput, [out] DWORD *pcbMax); HRESULT GetMaxStreamSampleSize( [in] WORD wStream, [out] DWORD *pcbMax); HRESULT NotifyLateDelivery( QWORD cnsLateness); } [ object, uuid(ae14a945-b90c-4d0d-9127-80d665f7d73e), pointer_default(unique), local ] interface IWMReaderAdvanced2 : IWMReaderAdvanced { HRESULT SetPlayMode( [in] WMT_PLAY_MODE Mode); HRESULT GetPlayMode( [out] WMT_PLAY_MODE *pMode); HRESULT GetBufferProgress( [out] DWORD *pdwPercent, [out] QWORD *pcnsBuffering); HRESULT GetDownloadProgress( [out] DWORD *pdwPercent, [out] QWORD *pqwBytesDownloaded, [out] QWORD *pcnsDownload); HRESULT GetSaveAsProgress( [out] DWORD *pdwPercent); HRESULT SaveFileAs( [in] const WCHAR *pwszFilename); HRESULT GetProtocolName( [out, size_is(*pcchProtocol)] WCHAR *pwszProtocol, [in, out] DWORD *pcchProtocol); HRESULT StartAtMarker( [in] WORD wMarkerIndex, [in] QWORD cnsDuration, [in] float fRate, [in] void *pvContext); HRESULT GetOutputSetting( [in] DWORD dwOutputNum, [in] LPCWSTR pszName, [out] WMT_ATTR_DATATYPE *pType, [out, size_is(*pcbLength)] BYTE *pValue, [in, out] WORD *pcbLength); HRESULT SetOutputSetting( [in] DWORD dwOutputNum, [in] LPCWSTR pszName, [in] WMT_ATTR_DATATYPE Type, [in, size_is(cbLength)] const BYTE *pValue, [in] WORD cbLength); HRESULT Preroll( [in] QWORD cnsStart, [in] QWORD cnsDuration, [in] float fRate); HRESULT SetLogClientID( [in] BOOL fLogClientID); HRESULT GetLogClientID( [out] BOOL *pfLogClientID); HRESULT StopBuffering(); HRESULT OpenStream( [in] IStream *pStream, [in] IWMReaderCallback *pCallback, [in] void *pvContext); } [ object, uuid(5dc0674b-f04B-4a4e-9f2a-b1afde2c8100), pointer_default(unique), local ] interface IWMReaderAdvanced3 : IWMReaderAdvanced2 { HRESULT StopNetStreaming(); HRESULT StartAtPosition( [in] WORD wStreamNum, [in] void *pvOffsetStart, [in] void *pvDuration, [in] WMT_OFFSET_FORMAT dwOffsetFormat, [in] float fRate, [in] void *pvContext); } [ object, uuid(945a76a2-12ae-4d48-bd3c-cd1d90399b85), pointer_default(unique), local ] interface IWMReaderAdvanced4 : IWMReaderAdvanced3 { HRESULT GetLanguageCount( [in] DWORD dwOutputNum, [out] WORD *pwLanguageCount); HRESULT GetLanguage( [in] DWORD dwOutputNum, [in] WORD wLanguage, [out, size_is(*pcchLanguageStringLength)] WCHAR *pwszLanguageString, [in, out] WORD *pcchLanguageStringLength); HRESULT GetMaxSpeedFactor( [out] double *pdblFactor); HRESULT IsUsingFastCache( [out] BOOL *pfUsingFastCache); HRESULT AddLogParam( [in] LPCWSTR wszNameSpace, [in] LPCWSTR wszName, [in] LPCWSTR wszValue); HRESULT SendLogParams(); HRESULT CanSaveFileAs( [out] BOOL *pfCanSave); HRESULT CancelSaveFileAs(); HRESULT GetURL( [out, size_is(*pcchURL)] WCHAR *pwszURL, [in, out] DWORD *pcchURL); } [ object, uuid(24c44db0-55d1-49ae-a5cc-f13815e36363), pointer_default(unique), local ] interface IWMReaderAdvanced5 : IWMReaderAdvanced4 { HRESULT SetPlayerHook( [in] DWORD dwOutputNum, [in] IWMPlayerHook *pHook); } [ object, uuid(18a2e7f8-428f-4acd-8a00-e64639bc93de), pointer_default(unique), local ] interface IWMReaderAdvanced6 : IWMReaderAdvanced5 { HRESULT SetProtectStreamSamples( [in, size_is(cbCertificate)] BYTE *pbCertificate, [in] DWORD cbCertificate, [in] DWORD dwCertificateType, [in] DWORD dwFlags, [out, size_is(*pcbInitializationVector)] BYTE *pbInitializationVector, [in, out] DWORD *pcbInitializationVector); } [ object, uuid(9397f121-7705-4dc9-b049-98b698188414), pointer_default( unique ), local ] interface IWMSyncReader : IUnknown { HRESULT Open( [in] const WCHAR *pwszFilename); HRESULT Close(); HRESULT SetRange( [in] QWORD cnsStartTime, [in] LONGLONG cnsDuration); HRESULT SetRangeByFrame( [in] WORD wStreamNum, [in] QWORD qwFrameNumber, [in] LONGLONG cFramesToRead); HRESULT GetNextSample( [in] WORD wStreamNum, [out] INSSBuffer **ppSample, [out] QWORD *pcnsSampleTime, [out] QWORD *pcnsDuration, [out] DWORD *pdwFlags, [out] DWORD *pdwOutputNum, [out] WORD *pwStreamNum); HRESULT SetStreamsSelected( [in] WORD cStreamCount, [in] WORD *pwStreamNumbers, [in] WMT_STREAM_SELECTION *pSelections); HRESULT GetStreamSelected( [in] WORD wStreamNum, [out] WMT_STREAM_SELECTION *pSelection); HRESULT SetReadStreamSamples( [in] WORD wStreamNum, [in] BOOL fCompressed); HRESULT GetReadStreamSamples( [in] WORD wStreamNum, [out] BOOL *pfCompressed); HRESULT GetOutputSetting( [in] DWORD dwOutputNum, [in] LPCWSTR pszName, [out] WMT_ATTR_DATATYPE *pType, [out, size_is(*pcbLength)] BYTE *pValue, [in, out] WORD *pcbLength); HRESULT SetOutputSetting( [in] DWORD dwOutputNum, [in] LPCWSTR pszName, [in] WMT_ATTR_DATATYPE Type, [in, size_is(cbLength)] const BYTE *pValue, [in] WORD cbLength); HRESULT GetOutputCount( [out] DWORD *pcOutputs); HRESULT GetOutputProps( [in] DWORD dwOutputNum, [out] IWMOutputMediaProps **ppOutput); HRESULT SetOutputProps( [in] DWORD dwOutputNum, [in] IWMOutputMediaProps *pOutput); HRESULT GetOutputFormatCount( [in] DWORD dwOutputNum, [out] DWORD *pcFormats); HRESULT GetOutputFormat( [in] DWORD dwOutputNum, [in] DWORD dwFormatNum, [out] IWMOutputMediaProps **ppProps); HRESULT GetOutputNumberForStream( [in] WORD wStreamNum, [out] DWORD *pdwOutputNum); HRESULT GetStreamNumberForOutput( [in] DWORD dwOutputNum, [out] WORD *pwStreamNum); HRESULT GetMaxOutputSampleSize( [in] DWORD dwOutput, [out] DWORD *pcbMax); HRESULT GetMaxStreamSampleSize( [in] WORD wStream, [out] DWORD *pcbMax); HRESULT OpenStream( [in] IStream *pStream); } [ object, uuid(96406bd5-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMInputMediaProps : IWMMediaProps { HRESULT GetConnectionName( [out, size_is(*pcchName)] WCHAR *pwszName, [in, out] WORD *pcchName); HRESULT GetGroupName( [out, size_is(*pcchName)] WCHAR *pwszName, [in, out] WORD *pcchName); } [ object, uuid(96406be4-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMWriterSink : IUnknown { HRESULT OnHeader( [in] INSSBuffer *pHeader); HRESULT IsRealTime( [out] BOOL *pfRealTime); HRESULT AllocateDataUnit( [in] DWORD cbDataUnit, [out] INSSBuffer **ppDataUnit); HRESULT OnDataUnit( [in] INSSBuffer *pDataUnit); HRESULT OnEndWriting(); } [ object, uuid(96406bd4-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMWriter : IUnknown { HRESULT SetProfileByID( [in] REFGUID guidProfile); HRESULT SetProfile( [in] IWMProfile *pProfile); HRESULT SetOutputFilename( [in] const WCHAR *pwszFilename); HRESULT GetInputCount( [out] DWORD *pcInputs); HRESULT GetInputProps( [in] DWORD dwInputNum, [out] IWMInputMediaProps **ppInput); HRESULT SetInputProps( [in] DWORD dwInputNum, [in] IWMInputMediaProps *pInput); HRESULT GetInputFormatCount( [in] DWORD dwInputNumber, [out] DWORD *pcFormats); HRESULT GetInputFormat( [in] DWORD dwInputNumber, [in] DWORD dwFormatNumber, [out] IWMInputMediaProps **pProps); HRESULT BeginWriting(); HRESULT EndWriting(); HRESULT AllocateSample( [in] DWORD dwSampleSize, [out] INSSBuffer **ppSample); HRESULT WriteSample( [in] DWORD dwInputNum, [in] QWORD cnsSampleTime, [in] DWORD dwFlags, [in] INSSBuffer *pSample); HRESULT Flush(); } [ object, uuid(96406be3-2b2b-11d3-b36b-00C04f6108ff), pointer_default(unique), local ] interface IWMWriterAdvanced : IUnknown { HRESULT GetSinkCount( [out] DWORD *pcSinks); HRESULT GetSink( [in] DWORD dwSinkNum, [out] IWMWriterSink **ppSink); HRESULT AddSink( [in] IWMWriterSink *pSink); HRESULT RemoveSink( [in] IWMWriterSink *pSink); HRESULT WriteStreamSample( [in] WORD wStreamNum, [in] QWORD cnsSampleTime, [in] DWORD msSampleSendTime, [in] QWORD cnsSampleDuration, [in] DWORD dwFlags, [in] INSSBuffer *pSample); HRESULT SetLiveSource( BOOL fIsLiveSource); HRESULT IsRealTime( [out] BOOL *pfRealTime); HRESULT GetWriterTime( [out] QWORD *pCurrentTime); HRESULT GetStatistics( [in] WORD wStreamNum, [out] WM_WRITER_STATISTICS *pStats); HRESULT SetSyncTolerance( [in] DWORD msWindow); HRESULT GetSyncTolerance( [out] DWORD *pmsWindow); } [ object, uuid(962dc1ec-c046-4db8-9cc7-26ceae500817), pointer_default(unique), local ] interface IWMWriterAdvanced2 : IWMWriterAdvanced { HRESULT GetInputSetting( [in] DWORD dwInputNum, [in] LPCWSTR pszName, [out] WMT_ATTR_DATATYPE *pType, [out, size_is(*pcbLength)] BYTE *pValue, [in, out] WORD *pcbLength); HRESULT SetInputSetting( [in] DWORD dwInputNum, [in] LPCWSTR pszName, [in] WMT_ATTR_DATATYPE Type, [in, size_is(cbLength)] const BYTE *pValue, [in] WORD cbLength); } [ object, uuid(2cd6492d-7c37-4e76-9d3b-59261183a22e), pointer_default(unique), local ] interface IWMWriterAdvanced3 : IWMWriterAdvanced2 { HRESULT GetStatisticsEx( [in] WORD wStreamNum, [out] WM_WRITER_STATISTICS_EX *pStats); HRESULT SetNonBlocking(); } [ object, uuid(96406bda-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMHeaderInfo : IUnknown { HRESULT GetAttributeCount( [in] WORD stream_num, [out] WORD *attributes ); HRESULT GetAttributeByIndex( [in] WORD index, [in, out] WORD *stream_num, [out, size_is( *name_len )] WCHAR *name, [in, out] WORD *name_len, [out] WMT_ATTR_DATATYPE *type, [out, size_is( *length )] BYTE *value, [in, out] WORD *length ); HRESULT GetAttributeByName( [in, out] WORD *stream_num, [in] LPCWSTR name, [out] WMT_ATTR_DATATYPE *type, [out, size_is( *length )] BYTE *value, [in, out] WORD *length ); HRESULT SetAttribute( [in] WORD stream_num, [in] LPCWSTR name, [in] WMT_ATTR_DATATYPE type, [in, size_is( length )] const BYTE *value, [in] WORD length ); HRESULT GetMarkerCount( [out] WORD *markers ); HRESULT GetMarker( [in] WORD index, [out, size_is( *marker_len )] WCHAR *marker_name, [in, out] WORD *marker_len, [out] QWORD *marker_time ); HRESULT AddMarker( [in] LPCWSTR_WMSDK_TYPE_SAFE marker_name, [in] QWORD marker_time ); HRESULT RemoveMarker( [in] WORD index ); HRESULT GetScriptCount( [out] WORD *scripts ); HRESULT GetScript( [in] WORD index, [out, size_is( *type_len )] WCHAR *type, [in, out] WORD *type_len, [out, size_is( *command_len )] WCHAR *command, [in, out] WORD *command_len, [out] QWORD *script_time ); HRESULT AddScript( [in] LPCWSTR_WMSDK_TYPE_SAFE type, [in] LPCWSTR_WMSDK_TYPE_SAFE command, [in] QWORD script_time ); HRESULT RemoveScript( [in] WORD index ); } [ object, uuid(15cf9781-454e-482e-b393-85fae487a810), pointer_default(unique), local ] interface IWMHeaderInfo2 : IWMHeaderInfo { HRESULT GetCodecInfoCount( [out] DWORD *codec_infos ); HRESULT GetCodecInfo( [in] DWORD index, [in, out] WORD *name_len, [out, size_is( *name_len )] WCHAR *name, [in, out] WORD *description_len, [out, size_is( *description_len )] WCHAR *description, [out] WMT_CODEC_INFO_TYPE *codec_type, [in, out] WORD *codec_info_cnt, [out, size_is( *codec_info_cnt )] BYTE *codec_info ); } [ object, uuid(15cc68e3-27cc-4ecd-b222-3f5d02d80bd5), pointer_default(unique), local ] interface IWMHeaderInfo3 : IWMHeaderInfo2 { HRESULT GetAttributeCountEx( [in] WORD stream_num, [out] WORD *attributes ); HRESULT GetAttributeIndices( [in] WORD stream_num, [in] LPCWSTR name, [in] WORD *lang_index, [out, size_is( *count )] WORD *indices, [in, out] WORD *count ); HRESULT GetAttributeByIndexEx( [in] WORD stream_num, [in] WORD index, [out, size_is( *name_len )] LPWSTR name, [in, out] WORD *name_len, [out] WMT_ATTR_DATATYPE *type, [out] WORD *lang_index, [out, size_is( *data_len )] BYTE *value, [in, out] DWORD *data_len ); HRESULT ModifyAttribute( [in] WORD stream_num, [in] WORD index, [in] WMT_ATTR_DATATYPE type, [in] WORD lang_index, [in, size_is( length )] const BYTE *value, [in] DWORD length ); HRESULT AddAttribute( [in] WORD stream_num, [in] LPCWSTR name, [out] WORD *index, [in] WMT_ATTR_DATATYPE type, [in] WORD lang_index, [in, size_is( length )] const BYTE *value, [in] DWORD length ); HRESULT DeleteAttribute( [in] WORD stream_num, [in] WORD index ); HRESULT AddCodecInfo( [in] LPCWSTR_WMSDK_TYPE_SAFE name, [in] LPCWSTR_WMSDK_TYPE_SAFE description, [in] WMT_CODEC_INFO_TYPE codec_type, [in] WORD codec_info_cnt, [in, size_is( codec_info_cnt )] BYTE *codec_info ); } [ object, uuid(96406bec-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMReaderNetworkConfig : IUnknown { HRESULT GetBufferingTime([out] QWORD *buffering_time); HRESULT SetBufferingTime([in] QWORD buffering_time); HRESULT GetUDPPortRanges( [out, size_is( *ranges )] WM_PORT_NUMBER_RANGE *array, [in, out] DWORD *ranges); HRESULT SetUDPPortRanges( [in, size_is( ranges )] WM_PORT_NUMBER_RANGE *array, [in] DWORD ranges); HRESULT GetProxySettings( [in] const WCHAR *protocol, [out] WMT_PROXY_SETTINGS *proxy); HRESULT SetProxySettings( [in] LPCWSTR protocol, [in] WMT_PROXY_SETTINGS proxy); HRESULT GetProxyHostName( [in] const WCHAR *protocol, [out, size_is( *size )] WCHAR *hostname, [in, out] DWORD *size); HRESULT SetProxyHostName( [in] const WCHAR *protocol, [in] const WCHAR *hostname); HRESULT GetProxyPort( [in] const WCHAR *protocol, [out] DWORD *port); HRESULT SetProxyPort( [in] const WCHAR *protocol, [in] DWORD port); HRESULT GetProxyExceptionList( [in] const WCHAR *protocol, [out, size_is( *count )] WCHAR *exceptions, [in, out] DWORD *count); HRESULT SetProxyExceptionList( [in] const WCHAR *protocol, [in] const WCHAR *exceptions); HRESULT GetProxyBypassForLocal( [in] const WCHAR *protocol, [out] BOOL *bypass); HRESULT SetProxyBypassForLocal( [in] const WCHAR *protocol, [in] BOOL bypass); HRESULT GetForceRerunAutoProxyDetection([out] BOOL *detection); HRESULT SetForceRerunAutoProxyDetection([in] BOOL detection); HRESULT GetEnableMulticast([out] BOOL *multicast); HRESULT SetEnableMulticast([in] BOOL multicast); HRESULT GetEnableHTTP([out] BOOL *enable); HRESULT SetEnableHTTP([in] BOOL enable); HRESULT GetEnableUDP([out] BOOL *enable); HRESULT SetEnableUDP([in] BOOL enable); HRESULT GetEnableTCP([out] BOOL *enable); HRESULT SetEnableTCP([in] BOOL enable); HRESULT ResetProtocolRollover(); HRESULT GetConnectionBandwidth([out] DWORD *bandwidth); HRESULT SetConnectionBandwidth([in] DWORD bandwidth); HRESULT GetNumProtocolsSupported([out] DWORD *protocols); HRESULT GetSupportedProtocolName( [in] DWORD protocol_num, [out, size_is( *size )] WCHAR *protocol, [in, out] DWORD *size); HRESULT AddLoggingUrl([in] const WCHAR *url); HRESULT GetLoggingUrl( [in] DWORD index, [out, size_is( *size )] WCHAR *url, [in, out] DWORD *size); HRESULT GetLoggingUrlCount([out] DWORD *count); HRESULT ResetLoggingUrlList(); } [ object, uuid(d979a853-042b-4050-8387-c939db22013f), pointer_default(unique), local ] interface IWMReaderNetworkConfig2 : IWMReaderNetworkConfig { HRESULT GetEnableContentCaching([out] BOOL *enable); HRESULT SetEnableContentCaching([in] BOOL enable); HRESULT GetEnableFastCache([out] BOOL *enable); HRESULT SetEnableFastCache([in] BOOL enable); HRESULT GetAcceleratedStreamingDuration([out] QWORD *duration); HRESULT SetAcceleratedStreamingDuration([in] QWORD duration); HRESULT GetAutoReconnectLimit([out] DWORD *limit); HRESULT SetAutoReconnectLimit([in] DWORD limit); HRESULT GetEnableResends([out] BOOL *enable); HRESULT SetEnableResends([in] BOOL enable); HRESULT GetEnableThinning([out] BOOL *enable); HRESULT SetEnableThinning([in] BOOL enable); HRESULT GetMaxNetPacketSize([out] DWORD *packet_size); } [ object, uuid(96406bed-2b2b-11d3-b36b-00c04f6108ff), pointer_default(unique), local ] interface IWMReaderStreamClock : IUnknown { HRESULT GetTime([in] QWORD *now); HRESULT SetTimer([in] QWORD when, [in] void *param, [out] DWORD *id); HRESULT KillTimer([in] DWORD id); } [ object, uuid(cdfb97ab-188f-40b3-b643-5b7903975c59), pointer_default(unique), local ] interface IWMPacketSize : IUnknown { HRESULT GetMaxPacketSize([out] DWORD *size); HRESULT SetMaxPacketSize([in] DWORD size); } [ object, uuid(8bfc2b9e-b646-4233-a877-1c6a079669dc), pointer_default(unique), local ] interface IWMPacketSize2 : IWMPacketSize { HRESULT GetMinPacketSize([out] DWORD *size); HRESULT SetMinPacketSize([in] DWORD size); } [ object, uuid(d2827540-3ee7-432c-b14c-dc17f085d3b3), pointer_default(unique), local ] interface IWMDRMReader : IUnknown { HRESULT AcquireLicense([in] DWORD flags); HRESULT CancelLicenseAcquisition(); HRESULT Individualize([in] DWORD flags); HRESULT CancelIndividualization(); HRESULT MonitorLicenseAcquisition(); HRESULT CancelMonitorLicenseAcquisition(); HRESULT SetDRMProperty( [in] const WCHAR *name, [in] WMT_ATTR_DATATYPE type, [in, size_is( length )] const BYTE *value, [in] WORD length); HRESULT GetDRMProperty( [in] const WCHAR *name, [out] WMT_ATTR_DATATYPE *type, [out, size_is( *length )] BYTE *value, [in, out] WORD *length); } [ object, uuid(befe7a75-9f1d-4075-b9d9-a3c37bda49a0), pointer_default(unique), local ] interface IWMDRMReader2 : IWMDRMReader { HRESULT SetEvaluateOutputLevelLicenses([in] BOOL evaluate); HRESULT GetPlayOutputLevels( [out, size_is( *length )] DRM_PLAY_OPL *play, [in, out] DWORD *length, [out] DWORD *level); HRESULT GetCopyOutputLevels( [out, size_is( *length )] DRM_COPY_OPL *copy, [in, out] DWORD *length, [out] DWORD *level); HRESULT TryNextLicense(); } [ object, uuid(e08672de-f1e7-4ff4-a0a3-fc4b08e4caf8), pointer_default(unique), local ] interface IWMDRMReader3 : IWMDRMReader2 { HRESULT GetInclusionList( [out] GUID **guids, [out] DWORD *count); } [ object, uuid(bddc4d08-944d-4d52-a612-46c3fda07dd4), pointer_default( unique ), local ] interface IWMReaderAccelerator : IUnknown { HRESULT GetCodecInterface( [in] DWORD output, [in] REFIID riid, [out] void **codec); HRESULT Notify( [in] DWORD output, [in] WM_MEDIA_TYPE *subtype); } [ object, uuid(f369e2f0-e081-4fe6-8450-b810b2f410d1), pointer_default(unique), local ] interface IWMReaderTimecode : IUnknown { HRESULT GetTimecodeRangeCount( [in] WORD num, [out] WORD *count); HRESULT GetTimecodeRangeBounds( [in] WORD stream, [in] WORD range, [out] DWORD *start_timecode, [out] DWORD *end_timecode); } [ object, uuid(fdbe5592-81a1-41ea-93bd-735cad1adc05), pointer_default(unique), local ] interface IWMReaderTypeNegotiation : IUnknown { HRESULT TryOutputProps( [in] DWORD output, [in] IWMOutputMediaProps *props); } [ object, uuid(df683f00-2d49-4d8e-92b7-fb19f6a0dc57), pointer_default(unique), local ] interface IWMLanguageList : IUnknown { HRESULT GetLanguageCount( [out] WORD *count); HRESULT GetLanguageDetails( [in] WORD index, [out, size_is( *length )] WCHAR *language, [in, out] WORD *length); HRESULT AddLanguageByRFC1766String( [in] LPCWSTR_WMSDK_TYPE_SAFE language, [out] WORD *index); } [ object, uuid(f28c0300-9baa-4477-a846-1744d9cbf533), pointer_default(unique), local ] interface IWMReaderPlaylistBurn : IUnknown { HRESULT InitPlaylistBurn( [in] DWORD count, [in] LPCWSTR_WMSDK_TYPE_SAFE *filenames, [in] IWMStatusCallback *callback, [in] void *context); HRESULT GetInitResults( [in] DWORD count, [out] HRESULT *stat); HRESULT Cancel(); HRESULT EndPlaylistBurn([in] HRESULT result); } [ object, uuid(72995a79-5090-42a4-9c8c-d9d0b6d34be5), pointer_default(unique), local ] interface IWMPropertyVault : IUnknown { HRESULT GetPropertyCount([in] DWORD *count); HRESULT GetPropertyByName( [in] const WCHAR *name, [out] WMT_ATTR_DATATYPE *type, [out, size_is( *size )] BYTE *value, [in, out] DWORD *size); HRESULT SetProperty( [in] const WCHAR *name, [in] WMT_ATTR_DATATYPE type, [in] BYTE *value, [in] DWORD size); HRESULT GetPropertyByIndex( [in] DWORD index, [out, size_is( *pdwNameLen )] WCHAR *name, [in, out] DWORD *length, [out] WMT_ATTR_DATATYPE *type, [out, size_is( *size )] BYTE *value, [in, out] DWORD *size); HRESULT CopyPropertiesFrom([in] IWMPropertyVault *vault); HRESULT Clear(); }; [ object, uuid(fc54a285-38c4-45b5-aa23-85b9f7cb424b), pointer_default(unique), local ] interface IWMWriterPreprocess : IUnknown { HRESULT GetMaxPreprocessingPasses( [in] DWORD input, [in] DWORD flags, [out] DWORD *passes); HRESULT SetNumPreprocessingPasses( [in] DWORD input, [in] DWORD flags, [in] DWORD passes); HRESULT BeginPreprocessingPass( [in] DWORD input, [in] DWORD flags); HRESULT PreprocessSample( [in] DWORD input, [in] QWORD sample_time, [in] DWORD flags, [in] INSSBuffer *sample); HRESULT EndPreprocessingPass( [in] DWORD input, [in] DWORD flags); }; cpp_quote("HRESULT WINAPI WMCreateWriter(IUnknown*,IWMWriter**);") cpp_quote("HRESULT WINAPI WMCreateReader(IUnknown*,DWORD,IWMReader**);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_Base, 0x00000000,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIATYPE_Video, 0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB1, 0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB4, 0xe436eb79,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB8, 0xe436eb7a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB565, 0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB555, 0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB24, 0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB32, 0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_I420, 0x30323449,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_IYUV, 0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YV12, 0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YUY2, 0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_P422, 0x32323450,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_UYVY, 0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YVYU, 0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YVU9, 0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_VIDEOIMAGE, 0x1d4a45f2,0xe5f6,0x4b44,0x83,0x88,0xf0,0xae,0x5c,0x0e,0x0c,0x37);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MP43, 0x3334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MP4S, 0x5334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_M4S2, 0x3253344d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV1, 0x31564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV2, 0x32564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MSS1, 0x3153534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MPEG2_VIDEO, 0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea);") cpp_quote("EXTERN_GUID(WMMEDIATYPE_Audio, 0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_PCM, 0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_DRM, 0x00000009,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMAudioV9, 0x00000162,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMAudio_Lossless, 0x00000163,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MSS2, 0x3253534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMSP1, 0x0000000a,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMSP2, 0x0000000b,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV3, 0x33564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMVP, 0x50564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WVP2, 0x32505657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMVA, 0x41564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WVC1, 0x31435657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);") ================================================ FILE: wine/windows/wnaspi32.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WNASPI32_H__ #define __WNASPI32_H__ /* This file should be 100% source compatible according to MS docs and * Adaptec docs */ #ifdef __cplusplus extern "C" { #endif /* #ifdef __cplusplus */ /* SCSI Miscellaneous Stuff */ #define SENSE_LEN 14 #define SRB_DIR_SCSI 0x00 #define SRB_POSTING 0x01 #define SRB_ENABLE_RESIDUAL_COUNT 0x04 #define SRB_DIR_IN 0x08 #define SRB_DIR_OUT 0x10 /* ASPI Command Definitions */ #define SC_HA_INQUIRY 0x00 #define SC_GET_DEV_TYPE 0x01 #define SC_EXEC_SCSI_CMD 0x02 #define SC_ABORT_SRB 0x03 #define SC_RESET_DEV 0x04 #define SC_SET_HA_PARMS 0x05 #define SC_GET_DISK_INFO 0x06 /* SRB status codes */ #define SS_PENDING 0x00 #define SS_COMP 0x01 #define SS_ABORTED 0x02 #define SS_ABORT_FAIL 0x03 #define SS_ERR 0x04 #define SS_INVALID_CMD 0x80 #define SS_INVALID_HA 0x81 #define SS_NO_DEVICE 0x82 #define SS_INVALID_SRB 0xE0 #define SS_OLD_MANAGER 0xE1 #define SS_BUFFER_ALIGN 0xE1 /* Win32 */ #define SS_ILLEGAL_MODE 0xE2 #define SS_NO_ASPI 0xE3 #define SS_FAILED_INIT 0xE4 #define SS_ASPI_IS_BUSY 0xE5 #define SS_BUFFER_TO_BIG 0xE6 #define SS_MISMATCHED_COMPONENTS 0xE7 /* DLLs/EXE version mismatch */ #define SS_NO_ADAPTERS 0xE8 #define SS_INSUFFICIENT_RESOURCES 0xE9 #define SS_ASPI_IS_SHUTDOWN 0xEA #define SS_BAD_INSTALL 0xEB /* Host status codes */ #define HASTAT_OK 0x00 #define HASTAT_SEL_TO 0x11 #define HASTAT_DO_DU 0x12 #define HASTAT_BUS_FREE 0x13 #define HASTAT_PHASE_ERR 0x14 #define HASTAT_TIMEOUT 0x09 #define HASTAT_COMMAND_TIMEOUT 0x0B #define HASTAT_MESSAGE_REJECT 0x0D #define HASTAT_BUS_RESET 0x0E #define HASTAT_PARITY_ERROR 0x0F #define HASTAT_REQUEST_SENSE_FAILED 0x10 /* Additional definitions */ /* SCSI Miscellaneous Stuff */ #define SRB_EVENT_NOTIFY 0x40 #define RESIDUAL_COUNT_SUPPORTED 0x02 #define MAX_SRB_TIMEOUT 1080001u #define DEFAULT_SRB_TIMEOUT 1080001u /* These are defined by MS but not adaptec */ #define SRB_DATA_SG_LIST 0x02 #define WM_ASPIPOST 0x4D42 /* ASPI Command Definitions */ #define SC_RESCAN_SCSI_BUS 0x07 #define SC_GETSET_TIMEOUTS 0x08 /* SRB Status.. MS defined */ #define SS_SECURITY_VIOLATION 0xE2 /* Replaces SS_INVALID_MODE */ /*** END DEFS */ #include /* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */ typedef struct tagSRB32_HaInquiry { BYTE SRB_Cmd; /* 00 ASPI command code = SC_HA_INQUIRY */ BYTE SRB_Status; /* 01 ASPI command status byte */ BYTE SRB_HaId; /* 02 ASPI host adapter number */ BYTE SRB_Flags; /* 03 ASPI request flags */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */ BYTE HA_Count; /* 08 Number of host adapters present */ BYTE HA_SCSI_ID; /* 09 SCSI ID of host adapter */ BYTE HA_ManagerId[16]; /* 0A String describing the manager */ BYTE HA_Identifier[16]; /* 1A String describing the host adapter */ BYTE HA_Unique[16]; /* 2A Host Adapter Unique parameters */ WORD HA_Rsvd1; } SRB_HaInquiry, *PSRB_HaInquiry; /* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */ typedef struct tagSRB32_GDEVBlock { BYTE SRB_Cmd; /* 00 ASPI command code = SC_GET_DEV_TYPE */ BYTE SRB_Status; /* 01 ASPI command status byte */ BYTE SRB_HaId; /* 02 ASPI host adapter number */ BYTE SRB_Flags; /* 03 Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ BYTE SRB_Target; /* 08 Target's SCSI ID */ BYTE SRB_Lun; /* 09 Target's LUN number */ BYTE SRB_DeviceType; /* 0A Target's peripheral device type */ BYTE SRB_Rsvd1; } SRB_GDEVBlock, *PSRB_GDEVBlock; /* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */ typedef struct tagSRB32_ExecSCSICmd { BYTE SRB_Cmd; /* 00 ASPI command code = SC_EXEC_SCSI_CMD */ BYTE SRB_Status; /* 01 ASPI command status byte */ BYTE SRB_HaId; /* 02 ASPI host adapter number */ BYTE SRB_Flags; /* 03 ASPI request flags */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ BYTE SRB_Target; /* 08 Target's SCSI ID */ BYTE SRB_Lun; /* 09 Target's LUN number */ WORD SRB_Rsvd1; /* 0A Reserved for Alignment */ DWORD SRB_BufLen; /* 0C Data Allocation Length */ BYTE *SRB_BufPointer; /* 10 Data Buffer Point */ BYTE SRB_SenseLen; /* 14 Sense Allocation Length */ BYTE SRB_CDBLen; /* 15 CDB Length */ BYTE SRB_HaStat; /* 16 Host Adapter Status */ BYTE SRB_TargStat; /* 17 Target Status */ void (*SRB_PostProc)( struct tagSRB32_ExecSCSICmd * ); /* 18 Post routine */ void *SRB_Rsvd2; /* 1C Reserved */ BYTE SRB_Rsvd3[16]; /* 20 Reserved for expansion */ BYTE CDBByte[16]; /* 30 SCSI CDB */ BYTE SenseArea[SENSE_LEN+2]; /* 40 Request sense buffer - var length */ } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd; /* SRB - ABORT AN ARB - SC_ABORT_SRB */ typedef struct tagSRB32_Abort { BYTE SRB_Cmd; /* 00 ASPI command code = SC_ABORT_SRB */ BYTE SRB_Status; /* 01 ASPI command status byte */ BYTE SRB_HaId; /* 02 ASPI host adapter number */ BYTE SRB_Flags; /* 03 Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */ VOID *SRB_ToAbort; /* 08 Pointer to SRB to abort */ } SRB_Abort, *PSRB_Abort; /* SRB - BUS DEVICE RESET - SC_RESET_DEV */ typedef struct tagSRB32_BusDeviceReset { BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */ BYTE SRB_Status; /* 01 ASPI command status byte */ BYTE SRB_HaId; /* 02 ASPI host adapter number */ BYTE SRB_Flags; /* 03 Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ BYTE SRB_Target; /* 08 Target's SCSI ID */ BYTE SRB_Lun; /* 09 Target's LUN number */ BYTE SRB_Rsvd1[12]; /* 0A Reserved for Alignment */ BYTE SRB_HaStat; /* 16 Host Adapter Status */ BYTE SRB_TargStat; /* 17 Target Status */ void (*SRB_PostProc)( struct tagSRB32_BusDeviceReset * ); /* 18 Post routine */ void *SRB_Rsvd2; /* 1c Reserved */ BYTE SRB_Rsvd3[32]; /* 20 Reserved */ } SRB_BusDeviceReset, *PSRB_BusDeviceReset; /* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */ typedef struct tagSRB32_GetDiskInfo { BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */ BYTE SRB_Status; /* 01 ASPI command status byte */ BYTE SRB_HaId; /* 02 ASPI host adapter number */ BYTE SRB_Flags; /* 03 Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ BYTE SRB_Target; /* 08 Target's SCSI ID */ BYTE SRB_Lun; /* 09 Target's LUN number */ BYTE SRB_DriveFlags; /* 0A Driver flags */ BYTE SRB_Int13HDriveInfo; /* 0B Host Adapter Status */ BYTE SRB_Heads; /* 0C Preferred number of heads trans */ BYTE SRB_Sectors; /* 0D Preferred number of sectors trans */ BYTE SRB_Rsvd1[10]; /* 0E Reserved */ } SRB_GetDiskInfo, *PSRB_GetDiskInfo; typedef struct tagSRB32_GetSetTimeouts { BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_GETSET_TIMEOUTS */ BYTE SRB_Status; /* 01 ASPI command status byte */ BYTE SRB_HaId; /* 02 ASPI host adapter number */ BYTE SRB_Flags; /* 03 Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ BYTE SRB_Target; /* 08 Target's SCSI ID */ BYTE SRB_Lun; /* 09 Target's LUN number */ DWORD SRB_Timeout; /* 10 Target's Timeout value */ } SRB_GetSetTimeouts, *PSRB_GetSetTimeouts; /* SRB header */ typedef struct tagSRB32_Header { BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */ BYTE SRB_Status; /* 01 ASPI command status byte */ BYTE SRB_HaId; /* 02 ASPI host adapter number */ BYTE SRB_Flags; /* 03 Reserved */ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */ } SRB_Header, *PSRB_Header; typedef union tagSRB32 { SRB_Header common; SRB_HaInquiry inquiry; SRB_ExecSCSICmd cmd; SRB_Abort abort; SRB_BusDeviceReset reset; SRB_GDEVBlock devtype; SRB_GetDiskInfo diskinfo; } SRB, *PSRB, *LPSRB; typedef struct tagASPI32BUFF { LPBYTE AB_BufPointer; /* pointer to buffer */ DWORD AB_BufLen; /* length of buffer */ DWORD AB_ZeroFill; /* set to 1 if zeroing */ DWORD AB_Reserved; /* 0 */ } ASPI32BUFF, *PASPI32BUFF; #include /* Prototypes */ extern DWORD __cdecl SendASPI32Command (PSRB); extern DWORD __cdecl GetASPI32SupportInfo (void); extern DWORD __cdecl GetASPI32DLLVersion(void); extern BOOL __cdecl GetASPI32Buffer(PASPI32BUFF pab); #ifdef __cplusplus } #endif /* #ifdef __cplusplus */ #endif /* __WNASPI32_H__ */ ================================================ FILE: wine/windows/wownt32.h ================================================ /* * WOW Generic Thunk API * * Copyright (C) 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WOWNT32_H_ #define _WOWNT32_H_ #ifdef __WINESRC__ /* under Wine use the kernel functions directly so we don't have to import wow32 */ #define WOWCallback16 K32WOWCallback16 #define WOWCallback16Ex K32WOWCallback16Ex #define WOWDirectedYield16 K32WOWDirectedYield16 #define WOWGetVDMPointer K32WOWGetVDMPointer #define WOWGetVDMPointerFix K32WOWGetVDMPointerFix #define WOWGetVDMPointerUnfix K32WOWGetVDMPointerUnfix #define WOWGlobalAlloc16 K32WOWGlobalAlloc16 #define WOWGlobalAllocLock16 K32WOWGlobalAllocLock16 #define WOWGlobalFree16 K32WOWGlobalFree16 #define WOWGlobalLock16 K32WOWGlobalLock16 #define WOWGlobalLockSize16 K32WOWGlobalLockSize16 #define WOWGlobalUnlock16 K32WOWGlobalUnlock16 #define WOWGlobalUnlockFree16 K32WOWGlobalUnlockFree16 #define WOWHandle16 K32WOWHandle16 #define WOWHandle32 K32WOWHandle32 #define WOWYield16 K32WOWYield16 #endif LPVOID WINAPI WOWGetVDMPointer(DWORD,DWORD,BOOL); LPVOID WINAPI WOWGetVDMPointerFix(DWORD,DWORD,BOOL); VOID WINAPI WOWGetVDMPointerUnfix(DWORD); WORD WINAPI WOWGlobalAlloc16(WORD,DWORD); WORD WINAPI WOWGlobalFree16(WORD); DWORD WINAPI WOWGlobalLock16(WORD); BOOL WINAPI WOWGlobalUnlock16(WORD); DWORD WINAPI WOWGlobalAllocLock16(WORD,DWORD,WORD *); WORD WINAPI WOWGlobalUnlockFree16(DWORD); DWORD WINAPI WOWGlobalLockSize16(WORD,PDWORD); VOID WINAPI WOWYield16(VOID); VOID WINAPI WOWDirectedYield16(WORD); typedef enum { WOW_TYPE_HWND, WOW_TYPE_HMENU, WOW_TYPE_HDWP, WOW_TYPE_HDROP, WOW_TYPE_HDC, WOW_TYPE_HFONT, WOW_TYPE_HMETAFILE, WOW_TYPE_HRGN, WOW_TYPE_HBITMAP, WOW_TYPE_HBRUSH, WOW_TYPE_HPALETTE, WOW_TYPE_HPEN, WOW_TYPE_HACCEL, WOW_TYPE_HTASK, WOW_TYPE_FULLHWND } WOW_HANDLE_TYPE; HANDLE WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE); WORD WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE); #if 0 && defined(__WINESRC__) /* under Wine we use optimized versions where we can */ #define HWND_32(h16) ((HWND) (ULONG_PTR)(h16)) #define HMENU_32(h16) ((HMENU) (ULONG_PTR)(h16)) #define HDWP_32(h16) ((HDWP) (ULONG_PTR)(h16)) #define HDROP_32(h16) ((HDROP) (ULONG_PTR)(h16)) #define HDC_32(h16) ((HDC) (ULONG_PTR)(h16)) #define HFONT_32(h16) ((HFONT) (ULONG_PTR)(h16)) #define HRGN_32(h16) ((HRGN) (ULONG_PTR)(h16)) #define HBITMAP_32(h16) ((HBITMAP) (ULONG_PTR)(h16)) #define HBRUSH_32(h16) ((HBRUSH) (ULONG_PTR)(h16)) #define HPALETTE_32(h16) ((HPALETTE) (ULONG_PTR)(h16)) #define HPEN_32(h16) ((HPEN) (ULONG_PTR)(h16)) #define HACCEL_32(h16) ((HACCEL) (ULONG_PTR)(h16)) #define HWND_16(h32) (LOWORD(h32)) #define HMENU_16(h32) (LOWORD(h32)) #define HDWP_16(h32) (LOWORD(h32)) #define HDROP_16(h32) (LOWORD(h32)) #define HDC_16(h32) (LOWORD(h32)) #define HFONT_16(h32) (LOWORD(h32)) #define HRGN_16(h32) (LOWORD(h32)) #define HBITMAP_16(h32) (LOWORD(h32)) #define HBRUSH_16(h32) (LOWORD(h32)) #define HPALETTE_16(h32) (LOWORD(h32)) #define HPEN_16(h32) (LOWORD(h32)) #define HACCEL_16(h32) (LOWORD(h32)) #else /* __WINESRC__ */ #define HWND_32(h16) ((HWND) (WOWHandle32(h16, WOW_TYPE_HWND))) #define HMENU_32(h16) ((HMENU) (WOWHandle32(h16, WOW_TYPE_HMENU))) #define HDWP_32(h16) ((HDWP) (WOWHandle32(h16, WOW_TYPE_HDWP))) #define HDROP_32(h16) ((HDROP) (WOWHandle32(h16, WOW_TYPE_HDROP))) #define HDC_32(h16) ((HDC) (WOWHandle32(h16, WOW_TYPE_HDC))) #define HFONT_32(h16) ((HFONT) (WOWHandle32(h16, WOW_TYPE_HFONT))) #define HRGN_32(h16) ((HRGN) (WOWHandle32(h16, WOW_TYPE_HRGN))) #define HBITMAP_32(h16) ((HBITMAP) (WOWHandle32(h16, WOW_TYPE_HBITMAP))) #define HBRUSH_32(h16) ((HBRUSH) (WOWHandle32(h16, WOW_TYPE_HBRUSH))) #define HPALETTE_32(h16) ((HPALETTE) (WOWHandle32(h16, WOW_TYPE_HPALETTE))) #define HPEN_32(h16) ((HPEN) (WOWHandle32(h16, WOW_TYPE_HPEN))) #define HACCEL_32(h16) ((HACCEL) (WOWHandle32(h16, WOW_TYPE_HACCEL))) #define HWND_16(h32) (WOWHandle16(h32, WOW_TYPE_HWND)) #define HMENU_16(h32) (WOWHandle16(h32, WOW_TYPE_HMENU)) #define HDWP_16(h32) (WOWHandle16(h32, WOW_TYPE_HDWP)) #define HDROP_16(h32) (WOWHandle16(h32, WOW_TYPE_HDROP)) #define HDC_16(h32) (WOWHandle16(h32, WOW_TYPE_HDC)) #define HFONT_16(h32) (WOWHandle16(h32, WOW_TYPE_HFONT)) #define HRGN_16(h32) (WOWHandle16(h32, WOW_TYPE_HRGN)) #define HBITMAP_16(h32) (WOWHandle16(h32, WOW_TYPE_HBITMAP)) #define HBRUSH_16(h32) (WOWHandle16(h32, WOW_TYPE_HBRUSH)) #define HPALETTE_16(h32) (WOWHandle16(h32, WOW_TYPE_HPALETTE)) #define HPEN_16(h32) (WOWHandle16(h32, WOW_TYPE_HPEN)) #define HACCEL_16(h32) (WOWHandle16(h32, WOW_TYPE_HACCEL)) #endif /* __WINESRC__ */ #define HMETAFILE_32(h16) ((HMETAFILE)(WOWHandle32(h16, WOW_TYPE_HMETAFILE))) #define HTASK_32(h16) ((DWORD)(WOWHandle32(h16, WOW_TYPE_HTASK))) #define FULLHWND_32(h16) ((HWND)(WOWHandle32(h16, WOW_TYPE_FULLHWND))) #define HMETAFILE_16(h32) (WOWHandle16(h32, WOW_TYPE_HMETAFILE)) #define HTASK_16(h32) (WOWHandle16((HANDLE)(h32), WOW_TYPE_HTASK)) #define WCB16_PASCAL 0 #define WCB16_CDECL 1 #define WCB16_MAX_CBARGS 16 /* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */ #define WCB16_REGS 2 #define WCB16_REGS_LONG 4 /* function uses 32-bit lret */ DWORD WINAPI WOWCallback16(DWORD,DWORD); BOOL WINAPI WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD); #endif /* _WOWNT32_H_ */ ================================================ FILE: wine/windows/wpcapi.idl ================================================ /* * Copyright 2011 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; #ifndef __WIDL__ #define threading(model) #endif typedef [v1_enum] enum tagWPCFLAG_RESTRICTION { WPCFLAG_NO_RESTRICTION = 0x0000, WPCFLAG_LOGGING_REQUIRED = 0x0001, WPCFLAG_WEB_FILTERED = 0x0002, WPCFLAG_HOURS_RESTRICTED = 0x0004, WPCFLAG_GAMES_BLOCKED = 0x0008, WPCFLAG_APPS_RESTRICTED = 0x0010 } WPCFLAG_RESTRICTION; [ uuid(8fdf6ca1-0189-47e4-b670-1a8a4636e340), object ] interface IWPCSettings : IUnknown { HRESULT IsLoggingRequired( [out] BOOL *pfRequired); HRESULT GetLastSettingsChangeTime( [out] SYSTEMTIME *pTime) ; HRESULT GetRestrictions( [out] DWORD *pdwRestrictions); } [ uuid(95e87780-e158-489e-b452-bbb850790715), object ] interface IWPCGamesSettings : IWPCSettings { HRESULT IsBlocked( [in] GUID guidAppID, [out] DWORD *pdwReasons); } [ uuid(ffccbdb8-0992-4c30-b0f1-1cbb09c240aa), object ] interface IWPCWebSettings : IWPCSettings { typedef enum tagWPCFLAG_WEB_SETTING { WPCFLAG_WEB_SETTING_NOTBLOCKED = 0, WPCFLAG_WEB_SETTING_DOWNLOADSBLOCKED = 1 } WPCFLAG_WEB_SETTING; HRESULT GetSettings( [out] DWORD *pdwSettings); HRESULT RequestURLOverride( [in] HWND hWnd, [in] LPCWSTR pcszURL, [in] DWORD cURLs, [in] LPCWSTR *ppcszSubURLs, [out] BOOL *pfChanged); } typedef enum tagWPCFLAG_VISIBILITY { WPCFLAG_WPC_VISIBLE = 0, WPCFLAG_WPC_HIDDEN = 1 } WPCFLAG_VISIBILITY; [ uuid(4FF40A0F-3F3B-4d7c-A41B-4F39D7B44D05), object ] interface IWindowsParentalControlsCore : IUnknown { HRESULT GetVisibility( [out] WPCFLAG_VISIBILITY *peVisibility) ; HRESULT GetUserSettings( [in] LPCWSTR pcszSID, [out] IWPCSettings **ppSettings); HRESULT GetWebSettings( [in] LPCWSTR pcszSID, [out] IWPCWebSettings **ppSettings); HRESULT GetWebFilterInfo( [out] GUID *pguidID, [in] LPWSTR *ppszName); } [ uuid(28b4d88b-e072-49e6-804d-26edbe21a7b9), object ] interface IWindowsParentalControls : IWindowsParentalControlsCore { HRESULT GetGamesSettings( [in] LPCWSTR pcszSID, [out] IWPCGamesSettings **ppSettings) ; } [ helpstring("WindowsParentalControls class"), threading(both), uuid(e77cc89b-7401-4c04-8ced-149db35add04) ] coclass WindowsParentalControls { [default] interface IWindowsParentalControls; } ================================================ FILE: wine/windows/ws2def.h ================================================ /* * Copyright (C) 2009 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WS2DEF_ #define _WS2DEF_ #include #ifdef USE_WS_PREFIX #define WS(x) WS_##x #else #define WS(x) x #endif typedef USHORT ADDRESS_FAMILY; #ifndef __CSADDR_DEFINED__ #define __CSADDR_DEFINED__ typedef struct _SOCKET_ADDRESS { LPSOCKADDR lpSockaddr; INT iSockaddrLength; } SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS; typedef struct _CSADDR_INFO { SOCKET_ADDRESS LocalAddr; SOCKET_ADDRESS RemoteAddr; INT iSocketType; INT iProtocol; } CSADDR_INFO, *PCSADDR_INFO, *LPCSADDR_INFO; #endif #ifdef USE_WS_PREFIX #define WS__SS_MAXSIZE 128 #define WS__SS_ALIGNSIZE (sizeof(__int64)) #define WS__SS_PAD1SIZE (WS__SS_ALIGNSIZE - sizeof(short)) #define WS__SS_PAD2SIZE (WS__SS_MAXSIZE - 2 * WS__SS_ALIGNSIZE) #else #define _SS_MAXSIZE 128 #define _SS_ALIGNSIZE (sizeof(__int64)) #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(short)) #define _SS_PAD2SIZE (_SS_MAXSIZE - 2 * _SS_ALIGNSIZE) #endif typedef struct WS(sockaddr_storage) { short ss_family; char __ss_pad1[WS(_SS_PAD1SIZE)]; __int64 DECLSPEC_ALIGN(8) __ss_align; char __ss_pad2[WS(_SS_PAD2SIZE)]; } SOCKADDR_STORAGE, *PSOCKADDR_STORAGE, *LPSOCKADDR_STORAGE; /*socket address list */ typedef struct _SOCKET_ADDRESS_LIST { INT iAddressCount; SOCKET_ADDRESS Address[1]; } SOCKET_ADDRESS_LIST, *LPSOCKET_ADDRESS_LIST; typedef enum { ScopeLevelInterface = 1, ScopeLevelLink = 2, ScopeLevelSubnet = 3, ScopeLevelAdmin = 4, ScopeLevelSite = 5, ScopeLevelOrganization = 8, ScopeLevelGlobal = 14, ScopeLevelCount = 16, } SCOPE_LEVEL; typedef struct { union { struct { ULONG Zone : 28; ULONG Level : 4; } DUMMYSTRUCTNAME; ULONG Value; } DUMMYUNIONNAME; } SCOPE_ID, *PSCOPE_ID; typedef struct _WSABUF { ULONG len; CHAR* buf; } WSABUF, *LPWSABUF; typedef struct _WSAMSG { LPSOCKADDR name; INT namelen; LPWSABUF lpBuffers; DWORD dwBufferCount; WSABUF Control; DWORD dwFlags; } WSAMSG, *PWSAMSG, *LPWSAMSG; /* * Macros for retrieving control message data returned by WSARecvMsg() */ #define WSA_CMSG_DATA(cmsg) ((UCHAR*)((WSACMSGHDR*)(cmsg)+1)) #define WSA_CMSG_FIRSTHDR(mhdr) ((mhdr)->Control.len >= sizeof(WSACMSGHDR) ? (WSACMSGHDR *) (mhdr)->Control.buf : (WSACMSGHDR *) 0) #define WSA_CMSG_ALIGN(len) (((len) + sizeof(SIZE_T) - 1) & ~(sizeof(SIZE_T) - 1)) /* * Next Header: If the response is too short (or the next message in the response * is too short) then return NULL, otherwise return the next control message. */ #define WSA_CMSG_NXTHDR(mhdr,cmsg) \ (!(cmsg) ? WSA_CMSG_FIRSTHDR(mhdr) : \ ((mhdr)->Control.len < sizeof(WSACMSGHDR) ? NULL : \ (((unsigned char*)(((WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)))+1) > ((unsigned char*)(mhdr)->Control.buf + (mhdr)->Control.len)) ? NULL : \ (((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 : \ (WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)))))) typedef struct addrinfoexA { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; SIZE_T ai_addrlen; char *ai_canonname; struct WS(sockaddr) *ai_addr; void *ai_blob; SIZE_T ai_bloblen; GUID *ai_provider; struct addrinfoexA *ai_next; } ADDRINFOEXA, *PADDRINFOEXA, *LPADDRINFOEXA; typedef struct addrinfoexW { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; SIZE_T ai_addrlen; WCHAR *ai_canonname; struct WS(sockaddr) *ai_addr; void *ai_blob; SIZE_T ai_bloblen; GUID *ai_provider; struct addrinfoexW *ai_next; } ADDRINFOEXW, *PADDRINFOEXW, *LPADDRINFOEXW; #endif /* _WS2DEF_ */ ================================================ FILE: wine/windows/ws2ipdef.h ================================================ /* * Copyright (C) 2009 Robert Shearman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WS2IPDEF__ #define __WS2IPDEF__ #include #ifdef USE_WS_PREFIX #define WS(x) WS_##x #else #define WS(x) x #endif typedef struct WS(sockaddr_in6_old) { SHORT sin6_family; USHORT sin6_port; ULONG sin6_flowinfo; IN6_ADDR sin6_addr; } SOCKADDR_IN6_OLD,*PSOCKADDR_IN6_OLD, *LPSOCKADDR_IN6_OLD; typedef union sockaddr_gen { struct WS(sockaddr) Address; struct WS(sockaddr_in) AddressIn; struct WS(sockaddr_in6_old) AddressIn6; } WS(sockaddr_gen); /* Structure to keep interface specific information */ typedef struct _INTERFACE_INFO { ULONG iiFlags; /* Interface flags */ WS(sockaddr_gen) iiAddress; /* Interface address */ WS(sockaddr_gen) iiBroadcastAddress; /* Broadcast address */ WS(sockaddr_gen) iiNetmask; /* Network mask */ } INTERFACE_INFO, * LPINTERFACE_INFO; /* Possible flags for the iiFlags - bitmask */ #ifndef USE_WS_PREFIX #define IFF_UP 0x00000001 /* Interface is up */ #define IFF_BROADCAST 0x00000002 /* Broadcast is supported */ #define IFF_LOOPBACK 0x00000004 /* this is loopback interface */ #define IFF_POINTTOPOINT 0x00000008 /* this is point-to-point interface */ #define IFF_MULTICAST 0x00000010 /* multicast is supported */ #else #define WS_IFF_UP 0x00000001 /* Interface is up */ #define WS_IFF_BROADCAST 0x00000002 /* Broadcast is supported */ #define WS_IFF_LOOPBACK 0x00000004 /* this is loopback interface */ #define WS_IFF_POINTTOPOINT 0x00000008 /* this is point-to-point interface */ #define WS_IFF_MULTICAST 0x00000010 /* multicast is supported */ #endif /* USE_WS_PREFIX */ #ifndef USE_WS_PREFIX #define IP_OPTIONS 1 #define IP_HDRINCL 2 #define IP_TOS 3 #define IP_TTL 4 #define IP_MULTICAST_IF 9 #define IP_MULTICAST_TTL 10 #define IP_MULTICAST_LOOP 11 #define IP_ADD_MEMBERSHIP 12 #define IP_DROP_MEMBERSHIP 13 #define IP_DONTFRAGMENT 14 #define IP_ADD_SOURCE_MEMBERSHIP 15 #define IP_DROP_SOURCE_MEMBERSHIP 16 #define IP_BLOCK_SOURCE 17 #define IP_UNBLOCK_SOURCE 18 #define IP_PKTINFO 19 #define IP_HOPLIMIT 21 #define IP_RECEIVE_BROADCAST 22 #define IP_RECVIF 24 #define IP_RECVDSTADDR 25 #define IP_IFLIST 28 #define IP_ADD_IFLIST 29 #define IP_DEL_IFLIST 30 #define IP_UNICAST_IF 31 #define IP_RTHDR 32 #define IP_RECVRTHDR 38 #else #define WS_IP_OPTIONS 1 #define WS_IP_HDRINCL 2 #define WS_IP_TOS 3 #define WS_IP_TTL 4 #define WS_IP_MULTICAST_IF 9 #define WS_IP_MULTICAST_TTL 10 #define WS_IP_MULTICAST_LOOP 11 #define WS_IP_ADD_MEMBERSHIP 12 #define WS_IP_DROP_MEMBERSHIP 13 #define WS_IP_DONTFRAGMENT 14 #define WS_IP_ADD_SOURCE_MEMBERSHIP 15 #define WS_IP_DROP_SOURCE_MEMBERSHIP 16 #define WS_IP_BLOCK_SOURCE 17 #define WS_IP_UNBLOCK_SOURCE 18 #define WS_IP_PKTINFO 19 #define WS_IP_HOPLIMIT 21 #define WS_IP_RECEIVE_BROADCAST 22 #define WS_IP_RECVIF 24 #define WS_IP_RECVDSTADDR 25 #define WS_IP_IFLIST 28 #define WS_IP_ADD_IFLIST 29 #define WS_IP_DEL_IFLIST 30 #define WS_IP_UNICAST_IF 31 #define WS_IP_RTHDR 32 #define WS_IP_RECVRTHDR 38 #endif /* USE_WS_PREFIX */ typedef struct WS(sockaddr_in6) { SHORT sin6_family; USHORT sin6_port; ULONG sin6_flowinfo; IN6_ADDR sin6_addr; ULONG sin6_scope_id; } SOCKADDR_IN6,*PSOCKADDR_IN6, *LPSOCKADDR_IN6; typedef struct WS(sockaddr_in6_pair) { PSOCKADDR_IN6 SourceAddress; PSOCKADDR_IN6 DestinationAddress; } SOCKADDR_IN6_PAIR, *PSOCKADDR_IN6_PAIR; typedef union _SOCKADDR_INET { SOCKADDR_IN Ipv4; SOCKADDR_IN6 Ipv6; ADDRESS_FAMILY si_family; } SOCKADDR_INET, *PSOCKADDR_INET; /* * Multicast group information */ typedef struct WS(ip_mreq) { struct WS(in_addr) imr_multiaddr; struct WS(in_addr) imr_interface; } WS(IP_MREQ), *WS(PIP_MREQ); typedef struct WS(ipv6_mreq) { struct WS(in6_addr) ipv6mr_multiaddr; unsigned int ipv6mr_interface; } WS(IPV6_MREQ), *WS(PIPV6_MREQ); typedef struct WS(ip_mreq_source) { struct WS(in_addr) imr_multiaddr; struct WS(in_addr) imr_sourceaddr; struct WS(in_addr) imr_interface; } WS(IP_MREQ_SOURCE), *WS(PIP_MREQ_SOURCE); typedef struct WS(ip_msfilter) { struct WS(in_addr) imsf_multiaddr; struct WS(in_addr) imsf_interface; ULONG imsf_fmode; ULONG imsf_numsrc; struct WS(in_addr) imsf_slist[1]; } WS(IP_MSFILTER), *WS(PIP_MSFILTER); typedef struct WS(in_pktinfo) { IN_ADDR ipi_addr; UINT ipi_ifindex; } IN_PKTINFO, *PIN_PKTINFO; #ifndef USE_WS_PREFIX #define IPV6_OPTIONS 1 #define IPV6_HDRINCL 2 #define IPV6_UNICAST_HOPS 4 #define IPV6_MULTICAST_IF 9 #define IPV6_MULTICAST_HOPS 10 #define IPV6_MULTICAST_LOOP 11 #define IPV6_ADD_MEMBERSHIP 12 #define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP #define IPV6_DROP_MEMBERSHIP 13 #define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP #define IPV6_DONTFRAG 14 #define IPV6_PKTINFO 19 #define IPV6_HOPLIMIT 21 #define IPV6_PROTECTION_LEVEL 23 #define IPV6_RECVIF 24 #define IPV6_RECVDSTADDR 25 #define IPV6_CHECKSUM 26 #define IPV6_V6ONLY 27 #define IPV6_IFLIST 28 #define IPV6_ADD_IFLIST 29 #define IPV6_DEL_IFLIST 30 #define IPV6_UNICAST_IF 31 #define IPV6_RTHDR 32 #define IPV6_RECVRTHDR 38 #else #define WS_IPV6_OPTIONS 1 #define WS_IPV6_HDRINCL 2 #define WS_IPV6_UNICAST_HOPS 4 #define WS_IPV6_MULTICAST_IF 9 #define WS_IPV6_MULTICAST_HOPS 10 #define WS_IPV6_MULTICAST_LOOP 11 #define WS_IPV6_ADD_MEMBERSHIP 12 #define WS_IPV6_DROP_MEMBERSHIP 13 #define WS_IPV6_LEAVE_GROUP WS_IPV6_DROP_MEMBERSHIP #define WS_IPV6_DONTFRAG 14 #define WS_IPV6_PKTINFO 19 #define WS_IPV6_HOPLIMIT 21 #define WS_IPV6_PROTECTION_LEVEL 23 #define WS_IPV6_RECVIF 24 #define WS_IPV6_RECVDSTADDR 25 #define WS_IPV6_CHECKSUM 26 #define WS_IPV6_V6ONLY 27 #define WS_IPV6_IFLIST 28 #define WS_IPV6_ADD_IFLIST 29 #define WS_IPV6_DEL_IFLIST 30 #define WS_IPV6_UNICAST_IF 31 #define WS_IPV6_RTHDR 32 #define WS_IPV6_RECVRTHDR 38 #endif /* USE_WS_PREFIX */ #ifndef USE_WS_PREFIX #define TCP_OFFLOAD_NO_PREFERENCE 0 #define TCP_OFFLOAD_NOT_PREFERRED 1 #define TCP_OFFLOAD_PREFERRED 2 #else #define WS_TCP_OFFLOAD_NO_PREFERENCE 0 #define WS_TCP_OFFLOAD_NOT_PREFERRED 1 #define WS_TCP_OFFLOAD_PREFERRED 2 #endif /* USE_WS_PREFIX */ #ifndef USE_WS_PREFIX /* TCP_NODELAY is defined elsewhere */ #define TCP_EXPEDITED_1122 2 #define TCP_KEEPALIVE 3 #define TCP_MAXSEG 4 #define TCP_MAXRT 5 #define TCP_STDURG 6 #define TCP_NOURG 7 #define TCP_ATMARK 8 #define TCP_NOSYNRETRIES 9 #define TCP_TIMESTAMPS 10 #define TCP_OFFLOAD_PREFERENCE 11 #define TCP_CONGESTION_ALGORITHM 12 #define TCP_DELAY_FIN_ACK 13 #else /* WS_TCP_NODELAY is defined elsewhere */ #define WS_TCP_EXPEDITED_1122 2 #define WS_TCP_KEEPALIVE 3 #define WS_TCP_MAXSEG 4 #define WS_TCP_MAXRT 5 #define WS_TCP_STDURG 6 #define WS_TCP_NOURG 7 #define WS_TCP_ATMARK 8 #define WS_TCP_NOSYNRETRIES 9 #define WS_TCP_TIMESTAMPS 10 #define WS_TCP_OFFLOAD_PREFERENCE 11 #define WS_TCP_CONGESTION_ALGORITHM 12 #define WS_TCP_DELAY_FIN_ACK 13 #endif /* USE_WS_PREFIX */ #ifndef USE_WS_PREFIX #define INET_ADDRSTRLEN 22 #define INET6_ADDRSTRLEN 65 #define IN6ADDR_ANY_INIT { 0 } #define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } #else #define WS_INET_ADDRSTRLEN 22 #define WS_INET6_ADDRSTRLEN 65 #define WS_IN6ADDR_ANY_INIT { 0 } #define WS_IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } #endif /* USE_WS_PREFIX */ #ifdef __cplusplus extern "C" { #endif static inline BOOLEAN WS(IN6_IS_ADDR_LOOPBACK) ( const IN6_ADDR *a ) { return ((a->s6_words[0] == 0) && (a->s6_words[1] == 0) && (a->s6_words[2] == 0) && (a->s6_words[3] == 0) && (a->s6_words[4] == 0) && (a->s6_words[5] == 0) && (a->s6_words[6] == 0) && (a->s6_words[7] == 0x0100)); } static inline BOOLEAN WS(IN6_IS_ADDR_MULTICAST) ( const IN6_ADDR *a ) { return (a->s6_bytes[0] == 0xff); } static inline BOOLEAN WS(IN6_IS_ADDR_UNSPECIFIED) ( const IN6_ADDR *a ) { return ((a->s6_words[0] == 0) && (a->s6_words[1] == 0) && (a->s6_words[2] == 0) && (a->s6_words[3] == 0) && (a->s6_words[4] == 0) && (a->s6_words[5] == 0) && (a->s6_words[6] == 0) && (a->s6_words[7] == 0)); } #ifdef __cplusplus } #endif #endif /* __WS2IPDEF__ */ ================================================ FILE: wine/windows/ws2spi.h ================================================ /* * WS2SPI.H -- definitions to be used with the WinSock service provider. * * Copyright (C) 2001 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINSOCK2SPI_ #define _WINSOCK2SPI_ #ifndef _WINSOCK2API_ #include #endif /* !defined(_WINSOCK2API_) */ #include #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ typedef BOOL (WINAPI *LPWPUPOSTMESSAGE)(HWND,UINT,WPARAM,LPARAM); WSAEVENT WINAPI WPUCompleteOverlappedRequest(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT); INT WINAPI WSCInstallProvider(const LPGUID,LPCWSTR,const LPWSAPROTOCOL_INFOW, DWORD,LPINT); INT WINAPI WSCDeinstallProvider(LPGUID,LPINT); INT WINAPI WSCEnableNSProvider(LPGUID,BOOL); INT WINAPI WSCEnumProtocols(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD,LPINT); INT WINAPI WSCGetProviderPath(LPGUID,LPWSTR,LPINT,LPINT); INT WINAPI WSCInstallNameSpace(LPWSTR,LPWSTR,DWORD,DWORD,LPGUID); INT WINAPI WSCUnInstallNameSpace(LPGUID); INT WINAPI WSCUpdateProvider(LPGUID, const WCHAR *, const LPWSAPROTOCOL_INFOW, DWORD, LPINT); INT WINAPI WSCWriteProviderOrder(LPDWORD,DWORD); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #include #endif /* !defined(_WINSOCK2SPI_) */ ================================================ FILE: wine/windows/ws2tcpip.h ================================================ /* * Copyright (C) 2001 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WS2TCPIP__ #define __WS2TCPIP__ #include #include #include #ifdef USE_WS_PREFIX #define WS(x) WS_##x #else #define WS(x) x #endif /* for addrinfo calls */ typedef struct WS(addrinfo) { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; SIZE_T ai_addrlen; char * ai_canonname; struct WS(sockaddr)* ai_addr; struct WS(addrinfo)* ai_next; } ADDRINFOA, *PADDRINFOA; typedef struct WS(addrinfoW) { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; SIZE_T ai_addrlen; PWSTR ai_canonname; struct WS(sockaddr)* ai_addr; struct WS(addrinfoW)* ai_next; } ADDRINFOW, *PADDRINFOW; #ifdef USE_WS_PREFIX typedef int WS_socklen_t; #else #define socklen_t int /* avoid conflicts with the system's socklen_t typedef */ #endif typedef ADDRINFOA ADDRINFO, *LPADDRINFO; /* Possible Windows flags for getaddrinfo() */ #ifndef USE_WS_PREFIX # define AI_PASSIVE 0x00000001 # define AI_CANONNAME 0x00000002 # define AI_NUMERICHOST 0x00000004 # define AI_NUMERICSERV 0x00000008 # define AI_ADDRCONFIG 0x00000400 # define AI_V4MAPPED 0x00000800 # define AI_NON_AUTHORITATIVE 0x00004000 # define AI_SECURE 0x00008000 # define AI_RETURN_PREFERRED_NAMES 0x00010000 # define AI_DISABLE_IDN_ENCODING 0x00080000 /* getaddrinfo error codes */ # define EAI_AGAIN WSATRY_AGAIN # define EAI_BADFLAGS WSAEINVAL # define EAI_FAIL WSANO_RECOVERY # define EAI_FAMILY WSAEAFNOSUPPORT # define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY # define EAI_NODATA EAI_NONAME # define EAI_NONAME WSAHOST_NOT_FOUND # define EAI_SERVICE WSATYPE_NOT_FOUND # define EAI_SOCKTYPE WSAESOCKTNOSUPPORT #else # define WS_AI_PASSIVE 0x00000001 # define WS_AI_CANONNAME 0x00000002 # define WS_AI_NUMERICHOST 0x00000004 # define WS_AI_NUMERICSERV 0x00000008 # define WS_AI_ADDRCONFIG 0x00000400 # define WS_AI_V4MAPPED 0x00000800 # define WS_AI_NON_AUTHORITATIVE 0x00004000 # define WS_AI_SECURE 0x00008000 # define WS_AI_RETURN_PREFERRED_NAMES 0x00010000 # define WS_AI_DISABLE_IDN_ENCODING 0x00080000 /* getaddrinfo error codes */ # define WS_EAI_AGAIN WSATRY_AGAIN # define WS_EAI_BADFLAGS WSAEINVAL # define WS_EAI_FAIL WSANO_RECOVERY # define WS_EAI_FAMILY WSAEAFNOSUPPORT # define WS_EAI_MEMORY WSA_NOT_ENOUGH_MEMORY # define WS_EAI_NODATA WS_EAI_NONAME # define WS_EAI_NONAME WSAHOST_NOT_FOUND # define WS_EAI_SERVICE WSATYPE_NOT_FOUND # define WS_EAI_SOCKTYPE WSAESOCKTNOSUPPORT #endif #ifndef USE_WS_PREFIX # define NI_MAXHOST 1025 # define NI_MAXSERV 32 #else # define WS_NI_MAXHOST 1025 # define WS_NI_MAXSERV 32 #endif /* Possible Windows flags for getnameinfo() */ #ifndef USE_WS_PREFIX # define NI_NOFQDN 0x01 # define NI_NUMERICHOST 0x02 # define NI_NAMEREQD 0x04 # define NI_NUMERICSERV 0x08 # define NI_DGRAM 0x10 #else # define WS_NI_NOFQDN 0x01 # define WS_NI_NUMERICHOST 0x02 # define WS_NI_NAMEREQD 0x04 # define WS_NI_NUMERICSERV 0x08 # define WS_NI_DGRAM 0x10 #endif #ifdef __cplusplus extern "C" { #endif #define GAI_STRERROR_BUFFER_SIZE 1024 static inline char *gai_strerrorA(int errcode) { static char buffer[GAI_STRERROR_BUFFER_SIZE + 1]; /* FIXME: should format message from system, ignoring inserts in neutral * language */ buffer[0] = '\0'; return buffer; } static inline WCHAR *gai_strerrorW(int errcode) { static WCHAR buffer[GAI_STRERROR_BUFFER_SIZE + 1]; /* FIXME: should format message from system, ignoring inserts in neutral * language */ buffer[0] = '\0'; return buffer; } #ifdef USE_WS_PREFIX # define WS_gai_strerror WINELIB_NAME_AW(gai_strerror) #elif defined(WINE_NO_UNICODE_MACROS) # define gai_strerror gai_strerrorA #else # define gai_strerror WINELIB_NAME_AW(gai_strerror) #endif typedef void (CALLBACK *LPLOOKUPSERVICE_COMPLETION_ROUTINE)(DWORD,DWORD,WSAOVERLAPPED*); void WINAPI WS(freeaddrinfo)(LPADDRINFO); #define FreeAddrInfoA WS(freeaddrinfo) void WINAPI FreeAddrInfoW(PADDRINFOW); #define FreeAddrInfo WINELIB_NAME_AW(FreeAddrInfo) void WINAPI FreeAddrInfoExW(ADDRINFOEXW*); int WINAPI WS(getaddrinfo)(const char*,const char*,const struct WS(addrinfo)*,struct WS(addrinfo)**); #define GetAddrInfoA WS(getaddrinfo) int WINAPI GetAddrInfoW(PCWSTR,PCWSTR,const ADDRINFOW*,PADDRINFOW*); #define GetAddrInfo WINELIB_NAME_AW(GetAddrInfo) int WINAPI GetAddrInfoExA(const char*,const char*,DWORD,GUID*,const ADDRINFOEXA*,ADDRINFOEXA**,struct timeval*, OVERLAPPED*,LPLOOKUPSERVICE_COMPLETION_ROUTINE,HANDLE*); int WINAPI GetAddrInfoExW(const WCHAR*,const WCHAR*,DWORD,GUID*, const ADDRINFOEXW*,ADDRINFOEXW**,struct timeval*, OVERLAPPED*,LPLOOKUPSERVICE_COMPLETION_ROUTINE,HANDLE*); #define GetAddrInfoEx WINELIB_NAME_AW(GetAddrInfoExW) int WINAPI GetAddrInfoExOverlappedResult(OVERLAPPED*); int WINAPI GetAddrInfoExCancel(HANDLE*); int WINAPI WS(getnameinfo)(const SOCKADDR*,WS(socklen_t),PCHAR,DWORD,PCHAR,DWORD,INT); #define GetNameInfoA WS(getnameinfo) INT WINAPI GetNameInfoW(const SOCKADDR*,WS(socklen_t),PWCHAR,DWORD,PWCHAR,DWORD,INT); #define GetNameInfo WINELIB_NAME_AW(GetNameInfo) PCSTR WINAPI WS(inet_ntop)(INT,PVOID,PSTR,SIZE_T); #define InetNtopA WS(inet_ntop) PCWSTR WINAPI InetNtopW(INT,PVOID,PWSTR,SIZE_T); #define InetNtop WINELIB_NAME_AW(InetNtop) int WINAPI WS(inet_pton)(INT,PCSTR,PVOID); #define InetPtonA WS(inet_pton) int WINAPI InetPtonW(INT,PCWSTR,PVOID); #define InetPton WINELIB_NAME_AW(InetPton) /* * Ws2tcpip Function Typedefs * * Remember to keep this section in sync with the * prototypes above. */ #if INCL_WINSOCK_API_TYPEDEFS typedef void (WINAPI *LPFN_FREEADDRINFO)(LPADDRINFO); #define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO typedef void (WINAPI *LPFN_FREEADDRINFOW)(PADDRINFOW); #define LPFN_FREEADDRINFOT WINELIB_NAME_AW(LPFN_FREEADDRINFO) typedef int (WINAPI *LPFN_GETADDRINFO)(const char*,const char*,const struct WS(addrinfo)*,struct WS(addrinfo)**); #define LPFN_GETADDRINFOA LPFN_GETADDRINFO typedef int (WINAPI *LPFN_GETADDRINFOW)(PCWSTR,PCWSTR,const ADDRINFOW*,PADDRINFOW*); #define LPFN_GETADDRINFOT WINELIB_NAME_AW(LPFN_GETADDRINFO) typedef int (WINAPI *LPFN_GETNAMEINFO)(const struct sockaddr*,socklen_t,char*,DWORD,char*,DWORD,int); #define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO typedef int (WINAPI *LPFN_GETNAMEINFOW)(const SOCKADDR*,socklen_t,PWCHAR,DWORD,PWCHAR,DWORD,INT); #define LPFN_GETNAMEINFOT WINELIB_NAME_AW(LPFN_GETNAMEINFO) #endif #ifdef __cplusplus } #endif #endif /* __WS2TCPIP__ */ ================================================ FILE: wine/windows/wsdapi.h ================================================ /* * Copyright 2017 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WSDAPI_H #define WSDAPI_H #include #include #include #include #include #include #endif ================================================ FILE: wine/windows/wsdbase.idl ================================================ /* * Copyright 2017 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; cpp_quote("#define WSDAPI_ADDRESSFAMILY_IPV4 1") cpp_quote("#define WSDAPI_ADDRESSFAMILY_IPV6 2") interface IWSDAddress; interface IWSDUdpAddress; interface IWSDMessageParameters; cpp_quote("HRESULT WINAPI WSDCreateUdpAddress(IWSDUdpAddress **ppAddress);") #ifndef SOCKADDR_STORAGE cpp_quote("#if 1") cpp_quote("#ifndef __CSADDR_DEFINED__") cpp_quote("typedef struct SOCKADDR_STORAGE SOCKADDR_STORAGE;") cpp_quote("#endif") cpp_quote("#else") typedef void SOCKADDR_STORAGE; cpp_quote("#endif") #endif [ uuid(b9574c6c-12a6-4f74-93a1-3318ff605759), object, local ] interface IWSDAddress : IUnknown { HRESULT Serialize([out, size_is(cchLength)] LPWSTR pszBuffer, [in] DWORD cchLength, [in] BOOL fSafe); HRESULT Deserialize([in] LPCWSTR pszBuffer); } [ uuid(70d23498-4ee6-4340-a3df-d845d2235467), object, local ] interface IWSDTransportAddress : IWSDAddress { HRESULT GetPort([out] WORD *pwPort); HRESULT SetPort([in] WORD wPort); HRESULT GetTransportAddress([out] LPCWSTR *ppszAddress); HRESULT GetTransportAddressEx([in] BOOL fSafe, [out] LPCWSTR *ppszAddress); HRESULT SetTransportAddress([in] LPCWSTR pszAddress); } typedef enum _WSDUdpMessageType { ONE_WAY, TWO_WAY } WSDUdpMessageType; [ uuid(74d6124a-a441-4f78-a1eb-97a8d1996893), object, local ] interface IWSDUdpAddress : IWSDTransportAddress { HRESULT SetSockaddr([in] const SOCKADDR_STORAGE *pSockAddr); HRESULT GetSockaddr([out] SOCKADDR_STORAGE *pSockAddr); HRESULT SetExclusive(BOOL fExclusive); HRESULT GetExclusive(); HRESULT SetMessageType([in] WSDUdpMessageType messageType); HRESULT GetMessageType([out] WSDUdpMessageType* pMessageType); HRESULT SetTTL([in] DWORD dwTTL); HRESULT GetTTL([out] DWORD *pdwTTL); HRESULT SetAlias([in] const GUID* pAlias); HRESULT GetAlias([out] GUID *pAlias); } [ uuid(1fafe8a2-e6fc-4b80-b6cf-b7d45c416d7c), object ] interface IWSDMessageParameters : IUnknown { HRESULT GetLocalAddress([out] IWSDAddress** ppAddress); HRESULT SetLocalAddress([in] IWSDAddress* pAddress); HRESULT GetRemoteAddress([out] IWSDAddress** ppAddress); HRESULT SetRemoteAddress([in] IWSDAddress* pAddress); HRESULT GetLowerParameters([out] IWSDMessageParameters** ppTxParams); } cpp_quote("HRESULT WINAPI WSDCreateUdpMessageParameters(IWSDUdpMessageParameters **ppTxParams);") typedef struct _WSDUdpRetransmitParams { ULONG ulSendDelay; ULONG ulRepeat; ULONG ulRepeatMinDelay; ULONG ulRepeatMaxDelay; ULONG ulRepeatUpperDelay; } WSDUdpRetransmitParams; [ uuid(9934149f-8f0c-447b-aa0b-73124b0ca7f0), object ] interface IWSDUdpMessageParameters : IWSDMessageParameters { HRESULT SetRetransmitParams([in] const WSDUdpRetransmitParams *pParams); HRESULT GetRetransmitParams([out] WSDUdpRetransmitParams *pParams); } ================================================ FILE: wine/windows/wsddisco.idl ================================================ /* * Copyright 2017 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "objidl.idl"; import "wsdxmldom.h"; import "wsdtypes.h"; interface IWSDScopeMatchingRule; interface IWSDiscoveryPublisherNotify; interface IWSDiscoveryPublisher; interface IWSDXMLContext; [ uuid(fcafe424-fef5-481a-bd9f-33ce0574256f), object, local, restricted, pointer_default(unique) ] interface IWSDScopeMatchingRule : IUnknown { HRESULT GetScopeRule([out] LPCWSTR *ppszScopeMatchingRule); HRESULT MatchScopes([in] LPCWSTR pszScope1, [in] LPCWSTR pszScope2, [out] BOOL *pfMatch); } [ uuid(e67651b0-337a-4b3c-9758-733388568251), object, local, restricted, pointer_default(unique) ] interface IWSDiscoveryPublisherNotify : IUnknown { HRESULT ProbeHandler([in] const WSD_SOAP_MESSAGE *pSoap, [in] IWSDMessageParameters *pMessageParameters); HRESULT ResolveHandler([in] const WSD_SOAP_MESSAGE *pSoap, [in] IWSDMessageParameters *pMessageParameters); } [ uuid(AE01E1A8-3ff9-4148-8116-057cc616fe13), object, local, restricted, pointer_default(unique) ] interface IWSDiscoveryPublisher : IUnknown { HRESULT SetAddressFamily([in] DWORD dwAddressFamily); HRESULT RegisterNotificationSink([in] IWSDiscoveryPublisherNotify *pSink); HRESULT UnRegisterNotificationSink([in] IWSDiscoveryPublisherNotify *pSink); HRESULT Publish([in] LPCWSTR pszId, [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId, [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList); HRESULT UnPublish([in] LPCWSTR pszId, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId, [in, optional] const WSDXML_ELEMENT *pAny); HRESULT MatchProbe([in] const WSD_SOAP_MESSAGE *pProbeMessage, [in] IWSDMessageParameters *pMessageParameters, [in] LPCWSTR pszId, [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId, [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList); HRESULT MatchResolve([in] const WSD_SOAP_MESSAGE *pResolveMessage, [in] IWSDMessageParameters *pMessageParameters, [in] LPCWSTR pszId, [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId, [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList); HRESULT PublishEx([in] LPCWSTR pszId, [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId, [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList, [in, optional] const WSDXML_ELEMENT *pHeaderAny, [in, optional] const WSDXML_ELEMENT *pReferenceParameterAny, [in, optional] const WSDXML_ELEMENT *pPolicyAny, [in, optional] const WSDXML_ELEMENT *pEndpointReferenceAny, [in, optional] const WSDXML_ELEMENT *pAny); HRESULT MatchProbeEx([in] const WSD_SOAP_MESSAGE *pProbeMessage, [in] IWSDMessageParameters *pMessageParameters, [in] LPCWSTR pszId, [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId, [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList, [in, optional] const WSDXML_ELEMENT *pHeaderAny, [in, optional] const WSDXML_ELEMENT *pReferenceParameterAny, [in, optional] const WSDXML_ELEMENT *pPolicyAny, [in, optional] const WSDXML_ELEMENT *pEndpointReferenceAny, [in, optional] const WSDXML_ELEMENT *pAny); HRESULT MatchResolveEx([in] const WSD_SOAP_MESSAGE *pResolveMessage, [in] IWSDMessageParameters *pMessageParameters, [in] LPCWSTR pszId, [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId, [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList, [in, optional] const WSDXML_ELEMENT *pHeaderAny, [in, optional] const WSDXML_ELEMENT *pReferenceParameterAny, [in, optional] const WSDXML_ELEMENT *pPolicyAny, [in, optional] const WSDXML_ELEMENT *pEndpointReferenceAny, [in, optional] const WSDXML_ELEMENT *pAny); HRESULT RegisterScopeMatchingRule([in] IWSDScopeMatchingRule *pScopeMatchingRule); HRESULT UnRegisterScopeMatchingRule([in] IWSDScopeMatchingRule *pScopeMatchingRule); HRESULT GetXMLContext([out] IWSDXMLContext **ppContext); } cpp_quote("HRESULT WINAPI WSDCreateDiscoveryPublisher(IWSDXMLContext* pContext, IWSDiscoveryPublisher **ppPublisher);") ================================================ FILE: wine/windows/wsdtypes.h ================================================ /* * Copyright 2017 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WSDTYPES_H #define WSDTYPES_H interface IWSDMessageParameters; typedef struct _WSD_APP_SEQUENCE WSD_APP_SEQUENCE; typedef struct _WSD_HEADER_RELATESTO WSD_HEADER_RELATESTO; typedef struct _WSD_SOAP_HEADER WSD_SOAP_HEADER; typedef struct _WSD_SOAP_MESSAGE WSD_SOAP_MESSAGE; typedef struct _WSD_NAME_LIST WSD_NAME_LIST; typedef struct _WSD_REFERENCE_PARAMETERS WSD_REFERENCE_PARAMETERS; typedef struct _WSD_REFERENCE_PROPERTIES WSD_REFERENCE_PROPERTIES; typedef struct _WSD_ENDPOINT_REFERENCE WSD_ENDPOINT_REFERENCE; typedef struct _WSD_URI_LIST WSD_URI_LIST; typedef struct _WSD_PROBE WSD_PROBE; typedef struct _WSD_SCOPES WSD_SCOPES; struct _WSD_APP_SEQUENCE { ULONGLONG InstanceId; const WCHAR *SequenceId; ULONGLONG MessageNumber; }; struct _WSD_NAME_LIST { WSD_NAME_LIST *Next; WSDXML_NAME *Element; }; struct _WSD_REFERENCE_PARAMETERS { WSDXML_ELEMENT *Any; }; struct _WSD_REFERENCE_PROPERTIES { WSDXML_ELEMENT *Any; }; struct _WSD_ENDPOINT_REFERENCE { const WCHAR *Address; WSD_REFERENCE_PROPERTIES ReferenceProperties; WSD_REFERENCE_PARAMETERS ReferenceParameters; WSDXML_NAME *PortType; WSDXML_NAME *ServiceName; WSDXML_ELEMENT *Any; }; struct _WSD_URI_LIST { WSD_URI_LIST *Next; const WCHAR *Element; }; struct _WSD_HEADER_RELATESTO { WSDXML_NAME *RelationshipType; const WCHAR *MessageID; }; struct _WSD_SOAP_HEADER { const WCHAR *To; const WCHAR *Action; const WCHAR *MessageID; WSD_HEADER_RELATESTO RelatesTo; WSD_ENDPOINT_REFERENCE *ReplyTo; WSD_ENDPOINT_REFERENCE *From; WSD_ENDPOINT_REFERENCE *FaultTo; WSD_APP_SEQUENCE *AppSequence; WSDXML_ELEMENT *AnyHeaders; }; struct _WSD_SOAP_MESSAGE { WSD_SOAP_HEADER Header; void *Body; WSDXML_TYPE *BodyType; }; struct _WSD_PROBE { WSD_NAME_LIST *Types; WSD_SCOPES *Scopes; WSDXML_ELEMENT *Any; }; struct _WSD_SCOPES { const WCHAR *MatchBy; WSD_URI_LIST *Scopes; }; #endif ================================================ FILE: wine/windows/wsdutil.h ================================================ /* * Copyright 2017 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef WSDUTIL_H #define WSDUTIL_H void * WINAPI WSDAllocateLinkedMemory(void *pParent, SIZE_T cbSize); void WINAPI WSDAttachLinkedMemory(void *pParent, void *pChild); void WINAPI WSDDetachLinkedMemory(void *pVoid); void WINAPI WSDFreeLinkedMemory(void *pVoid); HRESULT WINAPI WSDXMLAddChild(WSDXML_ELEMENT *pParent, WSDXML_ELEMENT *pChild); HRESULT WINAPI WSDXMLAddSibling(WSDXML_ELEMENT *pFirst, WSDXML_ELEMENT *pSecond); HRESULT WINAPI WSDXMLBuildAnyForSingleElement(WSDXML_NAME *pElementName, LPCWSTR pszText, WSDXML_ELEMENT **ppAny); HRESULT WINAPI WSDXMLCleanupElement(WSDXML_ELEMENT *pAny); HRESULT WINAPI WSDXMLGetValueFromAny(const WCHAR *pszNamespace, const WCHAR *pszName, WSDXML_ELEMENT *pAny, LPCWSTR *ppszValue); #endif ================================================ FILE: wine/windows/wsdxml.idl ================================================ /* * Copyright 2017 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; import "ocidl.idl"; import "wsdxmldom.h"; interface IWSDXMLContext; [ uuid(75d8f3ee-3e5a-43b4-a15a-bcf6887460c0), object, local, restricted, pointer_default(unique) ] interface IWSDXMLContext : IUnknown { HRESULT AddNamespace([in] LPCWSTR pszUri, [in] LPCWSTR pszSuggestedPrefix, [out] WSDXML_NAMESPACE** ppNamespace); HRESULT AddNameToNamespace([in] LPCWSTR pszUri, [in] LPCWSTR pszName, [out] WSDXML_NAME** ppName); HRESULT SetNamespaces([in, size_is(wNamespacesCount)] const PCWSDXML_NAMESPACE* pNamespaces, [in] WORD wNamespacesCount, [in] BYTE bLayerNumber); HRESULT SetTypes([in, size_is(dwTypesCount)] const PCWSDXML_TYPE* pTypes, [in] DWORD dwTypesCount, [in] BYTE bLayerNumber); } cpp_quote("HRESULT WINAPI WSDXMLCreateContext(IWSDXMLContext **ppContext);") ================================================ FILE: wine/windows/wsdxmldom.h ================================================ /* * Copyright 2017 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WSDXMLDOM_H__ #define __WSDXMLDOM_H__ typedef struct _WSDXML_TYPE WSDXML_TYPE; typedef struct _WSDXML_NAMESPACE WSDXML_NAMESPACE; typedef struct _WSDXML_NAME WSDXML_NAME; typedef struct _WSDXML_PREFIX_MAPPING WSDXML_PREFIX_MAPPING; typedef struct _WSDXML_ATTRIBUTE WSDXML_ATTRIBUTE; typedef struct _WSDXML_NODE WSDXML_NODE; typedef struct _WSDXML_ELEMENT WSDXML_ELEMENT; typedef struct _WSDXML_TEXT WSDXML_TEXT; typedef const WSDXML_NAMESPACE *PCWSDXML_NAMESPACE; typedef const WSDXML_TYPE *PCWSDXML_TYPE; struct _WSDXML_TYPE { const WCHAR *Uri; const BYTE *Table; }; struct _WSDXML_NAMESPACE { const WCHAR *Uri; const WCHAR *PreferredPrefix; WSDXML_NAME *Names; WORD NamesCount; WORD Encoding; }; struct _WSDXML_NAME { WSDXML_NAMESPACE *Space; WCHAR *LocalName; }; struct _WSDXML_PREFIX_MAPPING { DWORD Refs; WSDXML_PREFIX_MAPPING *Next; WSDXML_NAMESPACE *Space; WCHAR *Prefix; }; struct _WSDXML_ATTRIBUTE { WSDXML_ELEMENT *Element; WSDXML_ATTRIBUTE *Next; WSDXML_NAME *Name; WCHAR *Value; }; struct _WSDXML_NODE { enum { ElementType, TextType } Type; WSDXML_ELEMENT *Parent; WSDXML_NODE *Next; }; struct _WSDXML_ELEMENT { WSDXML_NODE Node; WSDXML_NAME *Name; WSDXML_ATTRIBUTE *FirstAttribute; WSDXML_NODE *FirstChild; WSDXML_PREFIX_MAPPING *PrefixMappings; }; struct _WSDXML_TEXT { WSDXML_NODE Node; WCHAR *Text; }; #endif /* __WSDXMLDOM_H__ */ ================================================ FILE: wine/windows/wshisotp.h ================================================ /* * Copyright (C) 2001 Stefan Leichter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINE_WSHISOTP_ #define _WINE_WSHISOTP_ /* * constants */ #define ISOPROTO_TP4 29 #define ISOPROTO_TP ISOPROTO_TP4 #endif /* _WINE_WSHISOTP_ */ ================================================ FILE: wine/windows/wsipx.h ================================================ /* * Copyright (C) 2001 Stefan Leichter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WINE_WSIPX_ #define _WINE_WSIPX_ #ifdef USE_WS_PREFIX # define WS(x) WS_##x #else # define WS(x) x #endif typedef struct WS_sockaddr_ipx { short sa_family; char sa_netnum[4]; char sa_nodenum[6]; unsigned short sa_socket; } SOCKADDR_IPX, *PSOCKADDR_IPX, *LPSOCKADDR_IPX; /* * constants */ #ifndef USE_WS_PREFIX #define NSPROTO_IPX 1000 #define NSPROTO_SPX 1256 #define NSPROTO_SPXII 1257 #else #define WS_NSPROTO_IPX 1000 #define WS_NSPROTO_SPX 1256 #define WS_NSPROTO_SPXII 1257 #endif #undef WS #endif /* _WINE_WSIPX_ */ ================================================ FILE: wine/windows/wsnwlink.h ================================================ /* * Copyright (C) 2003,2004 Roderick Colenbrander * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WSNWLINK_ #define _WSNWLINK_ #ifdef USE_WS_PREFIX #define WS(x) WS_##x #else #define WS(x) x #endif #ifndef USE_WS_PREFIX #define IPX_PTYPE 0x4000 #define IPX_FILTERPTYPE 0x4001 #define IPX_DSTYPE 0x4002 #define IPX_STOPFILTERPTYPE 0x4003 #define IPX_EXTENDED_ADDRESS 0x4004 #define IPX_RECVHDR 0x4005 #define IPX_MAXSIZE 0x4006 #define IPX_ADDRESS 0x4007 #define IPX_GETNETINFO 0x4008 #define IPX_GETNETINFO_NORIP 0x4009 #define IPX_SPXGETCONNECTIONSTATUS 0x400b #define IPX_ADDRESS_NOTIFY 0x400c #define IPX_MAX_ADAPTER_NUM 0x400d #define IPX_RERIPNETNUMBER 0x400e #define IPX_RECEIVE_BROADCAST 0x400f #define IPX_IMMEDIATESPXACK 0x4010 #else #define WS_IPX_PTYPE 0x4000 #define WS_IPX_FILTERPTYPE 0x4001 #define WS_IPX_DSTYPE 0x4002 #define WS_IPX_STOPFILTERPTYPE 0x4003 #define WS_IPX_EXTENDED_ADDRESS 0x4004 #define WS_IPX_RECVHDR 0x4005 #define WS_IPX_MAXSIZE 0x4006 #define WS_IPX_ADDRESS 0x4007 #define WS_IPX_GETNETINFO 0x4008 #define WS_IPX_GETNETINFO_NORIP 0x4009 #define WS_IPX_SPXGETCONNECTIONSTATUS 0x400b #define WS_IPX_ADDRESS_NOTIFY 0x400c #define WS_IPX_MAX_ADAPTER_NUM 0x400d #define WS_IPX_RERIPNETNUMBER 0x400e #define WS_IPX_RECEIVE_BROADCAST 0x400f #define WS_IPX_IMMEDIATESPXACK 0x4010 #endif /* USE_WS_PREFIX */ typedef struct _IPX_ADDRESS_DATA { INT adapternum; UCHAR netnum[4]; UCHAR nodenum[6]; BOOLEAN wan; BOOLEAN status; INT maxpkt; ULONG linkspeed; } IPX_ADDRESS_DATA, *PIPX_ADDRESS_DATA; #endif /* _WSNWLINK_ */ ================================================ FILE: wine/windows/wtsapi32.h ================================================ /* * Copyright 2005 Ulrich Czekalla (For CodeWeavers) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WTSAPI32_H #define __WINE_WTSAPI32_H #ifdef __cplusplus extern "C" { #endif typedef enum _WTS_VIRTUAL_CLASS { WTSVirtualClientData, WTSVirtualFileHandle } WTS_VIRTUAL_CLASS; typedef enum tagWTS_INFO_CLASS { WTSInitialProgram, WTSApplicationName, WTSWorkingDirectory, WTSOEMId, WTSSessionId, WTSUserName, WTSWinStationName, WTSDomainName, WTSConnectState, WTSClientBuildNumber, WTSClientName, WTSClientDirectory, WTSClientProductId, WTSClientHardwareId, WTSClientAddress, WTSClientDisplay, WTSClientProtocolType, } WTS_INFO_CLASS; typedef enum _WTS_CONNECTSTATE_CLASS { WTSActive, WTSConnected, WTSConnectQuery, WTSShadow, WTSDisconnected, WTSIdle, WTSListen, WTSReset, WTSDown, WTSInit } WTS_CONNECTSTATE_CLASS; typedef enum _WTS_CONFIG_CLASS { WTSUserConfigInitialProgram, WTSUserConfigWorkingDirectory, WTSUserConfigInheritInitialProgram, WTSUserConfigAllowLogonTerminalServer, WTSUserConfigTimeoutSettingsConnections, WTSUserConfigTimeoutSettingsDisconnections, WTSUserConfigTimeoutSettingsIdle, WTSUserConfigDeviceClientDrives, WTSUserConfigDeviceClientPrinters, WTSUserConfigDeviceClientDefaultPrinter, WTSUserConfigBrokenTimeoutSettings, WTSUserConfigModemCallbackSettings, WTSUserConfigModemCallbackPhoneNumber, WTSUserConfigShadowSettings, WTSUserConfigTerminalServerProfilePath, WTSUserConfigTerminalServerHomeDirectory, WTSUserConfigfTerminalServerRemoteHomeDir } WTS_CONFIG_CLASS; typedef struct _WTS_PROCESS_INFOA { DWORD SessionId; DWORD ProcessId; LPSTR pProcessName; PSID pUserSid; } WTS_PROCESS_INFOA, *PWTS_PROCESS_INFOA; typedef struct _WTS_PROCESS_INFOW { DWORD SessionId; DWORD ProcessId; LPWSTR pProcessName; PSID pUserSid; } WTS_PROCESS_INFOW, *PWTS_PROCESS_INFOW; DECL_WINELIB_TYPE_AW(WTS_PROCESS_INFO) DECL_WINELIB_TYPE_AW(PWTS_PROCESS_INFO) typedef struct _WTS_SESSION_INFOA { DWORD SessionId; LPSTR pWinStationName; WTS_CONNECTSTATE_CLASS State; } WTS_SESSION_INFOA, *PWTS_SESSION_INFOA; typedef struct _WTS_SESSION_INFOW { DWORD SessionId; LPWSTR pWinStationName; WTS_CONNECTSTATE_CLASS State; } WTS_SESSION_INFOW, *PWTS_SESSION_INFOW; DECL_WINELIB_TYPE_AW(WTS_SESSION_INFO) DECL_WINELIB_TYPE_AW(PWTS_SESSION_INFO) typedef struct _WTS_SERVER_INFOA { LPSTR pServerName; } WTS_SERVER_INFOA, *PWTS_SERVER_INFOA; typedef struct _WTS_SERVER_INFOW { LPWSTR pServerName; } WTS_SERVER_INFOW, *PWTS_SERVER_INFOW; DECL_WINELIB_TYPE_AW(WTS_SERVER_INFO) DECL_WINELIB_TYPE_AW(PWTS_SERVER_INFO) #define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL) #define WTS_CURRENT_SESSION (~0u) void WINAPI WTSCloseServer(HANDLE); BOOL WINAPI WTSConnectSessionA(ULONG, ULONG, PSTR, BOOL); BOOL WINAPI WTSConnectSessionW(ULONG, ULONG, PWSTR, BOOL); #define WTSConnectSession WINELIB_NAME_AW(WTSConnectSession) BOOL WINAPI WTSDisconnectSession(HANDLE, DWORD, BOOL); BOOL WINAPI WTSEnableChildSessions(BOOL); BOOL WINAPI WTSEnumerateProcessesA(HANDLE, DWORD, DWORD, PWTS_PROCESS_INFOA *, DWORD *); BOOL WINAPI WTSEnumerateProcessesW(HANDLE, DWORD, DWORD, PWTS_PROCESS_INFOW *, DWORD *); #define WTSEnumerateProcesses WINELIB_NAME_AW(WTSEnumerateProcesses) BOOL WINAPI WTSEnumerateServersA( LPSTR, DWORD, DWORD, PWTS_SERVER_INFOA*, DWORD*); BOOL WINAPI WTSEnumerateServersW( LPWSTR, DWORD, DWORD, PWTS_SERVER_INFOW*, DWORD*); #define WTSEnumerateServers WINELIB_NAME_AW(WTSEnumerateServers) BOOL WINAPI WTSEnumerateSessionsA(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOA *, DWORD *); BOOL WINAPI WTSEnumerateSessionsW(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOW *, DWORD *); #define WTSEnumerateSessions WINELIB_NAME_AW(WTSEnumerateSessions) void WINAPI WTSFreeMemory(PVOID); HANDLE WINAPI WTSOpenServerA(LPSTR); HANDLE WINAPI WTSOpenServerW(LPWSTR); #define WTSOpenServer WINELIB_NAME_AW(WTSOpenServer) BOOL WINAPI WTSQuerySessionInformationA(HANDLE, DWORD, WTS_INFO_CLASS, LPSTR *, DWORD *); BOOL WINAPI WTSQuerySessionInformationW(HANDLE, DWORD, WTS_INFO_CLASS, LPWSTR *, DWORD *); #define WTSQuerySessionInformation WINELIB_NAME_AW(WTSQuerySessionInformation) BOOL WINAPI WTSQueryUserConfigA(LPSTR,LPSTR,WTS_CONFIG_CLASS,LPSTR*,DWORD*); BOOL WINAPI WTSQueryUserConfigW(LPWSTR,LPWSTR,WTS_CONFIG_CLASS,LPWSTR*,DWORD*); #define WTSQueryUserConfig WINELIB_NAME_AW(WTSQueryUserConfig) BOOL WINAPI WTSQueryUserToken(ULONG, PHANDLE); BOOL WINAPI WTSRegisterSessionNotification(HWND, DWORD); BOOL WINAPI WTSRegisterSessionNotificationEx(HANDLE, HWND, DWORD); BOOL WINAPI WTSStartRemoteControlSessionA(LPSTR, ULONG, BYTE, USHORT); BOOL WINAPI WTSStartRemoteControlSessionW(LPWSTR, ULONG, BYTE, USHORT); #define WTSStartRemoteControlSession WINELIB_NAME_AW(WTSStartRemoteControlSession) BOOL WINAPI WTSStopRemoteControlSession(ULONG); BOOL WINAPI WTSTerminateProcess(HANDLE, DWORD, DWORD); BOOL WINAPI WTSUnRegisterSessionNotification(HWND); BOOL WINAPI WTSUnRegisterSessionNotificationEx(HANDLE, HWND); BOOL WINAPI WTSWaitSystemEvent(HANDLE, DWORD, DWORD*); #ifdef __cplusplus } #endif #endif ================================================ FILE: wine/windows/wtypes.idl ================================================ /* * Basic types used by COM interfaces * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "basetsd.h"; import "guiddef.h"; [ uuid(D3980A60-910C-1068-9341-00DD010F2F1C), version(0.1), pointer_default(unique) ] interface IWinTypes { /******************** BASIC WIN32 TYPES ********************/ cpp_quote("#if 0 /* winnt.h */") /* don't redefine these */ typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef long BOOL; typedef unsigned char UCHAR; typedef int INT; typedef unsigned int UINT; typedef short SHORT; typedef unsigned short USHORT; typedef long LONG; typedef unsigned long ULONG; typedef float FLOAT; typedef void *PVOID, *LPVOID; typedef DWORD *LPDWORD; typedef char CHAR; typedef [string] CHAR *LPSTR; typedef [string] const CHAR *LPCSTR; typedef wchar_t WCHAR; typedef [string] WCHAR *LPWSTR; typedef [string] const WCHAR *LPCWSTR; typedef boolean BOOLEAN; typedef DWORD COLORREF; typedef void *HANDLE; #define DECLARE_HANDLE(name) typedef void *name #define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*name DECLARE_HANDLE(HMODULE); DECLARE_HANDLE(HINSTANCE); DECLARE_HANDLE(HRGN); DECLARE_HANDLE(HTASK); DECLARE_HANDLE(HKEY); DECLARE_HANDLE(HDESK); DECLARE_HANDLE(HMF); DECLARE_HANDLE(HEMF); DECLARE_HANDLE(HPEN); DECLARE_HANDLE(HRSRC); DECLARE_HANDLE(HSTR); DECLARE_HANDLE(HWINSTA); DECLARE_HANDLE(HKL); DECLARE_HANDLE(HGDIOBJ); typedef HANDLE HDWP; typedef LONG_PTR LRESULT; typedef LONG HRESULT; typedef DWORD LCID; typedef USHORT LANGID; typedef unsigned __int64 DWORDLONG; typedef __int64 LONGLONG; typedef unsigned __int64 ULONGLONG; typedef struct _LARGE_INTEGER { LONGLONG QuadPart; } LARGE_INTEGER; typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart; } ULARGE_INTEGER; typedef struct _SID_IDENTIFIER_AUTHORITY { UCHAR Value[6]; } SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; typedef struct _SID { UCHAR Revision; UCHAR SubAuthorityCount; SID_IDENTIFIER_AUTHORITY IdentifierAuthority; [size_is(SubAuthorityCount)] ULONG SubAuthority[*]; } SID, *PSID; typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; typedef struct _ACL { UCHAR AclRevision; UCHAR Sbz1; USHORT AclSize; USHORT AceCount; USHORT Sbz2; } ACL; typedef ACL *PACL; typedef struct _SECURITY_DESCRIPTOR { UCHAR Revision; UCHAR Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; PSID Owner; PSID Group; PACL Sacl; PACL Dacl; } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR; typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; [size_is(nLength)] LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; typedef struct tagSIZE { LONG cx; LONG cy; } SIZE, *PSIZE, *LPSIZE; typedef SIZE SIZEL, *PSIZEL, *LPSIZEL; typedef struct tagPOINT { LONG x; LONG y; } POINT, *PPOINT, *LPPOINT; typedef struct _POINTL { LONG x; LONG y; } POINTL, *PPOINTL; typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT, *PRECT, *LPRECT; typedef const RECT *LPCRECT; typedef struct _RECTL { LONG left; LONG top; LONG right; LONG bottom; } RECTL, *PRECTL, *LPRECTL; typedef const RECTL *LPCRECTL; typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; cpp_quote("#endif /* winnt.h */") cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */ typedef double DOUBLE; cpp_quote("#else") cpp_quote("typedef double DECLSPEC_ALIGN(8) DOUBLE;") cpp_quote("#endif") cpp_quote("#ifndef _PALETTEENTRY_DEFINED") cpp_quote("#define _PALETTEENTRY_DEFINED") typedef struct tagPALETTEENTRY { BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; } PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY; cpp_quote("#endif") cpp_quote("#ifndef _LOGPALETTE_DEFINED") cpp_quote("#define _LOGPALETTE_DEFINED") typedef struct tagLOGPALETTE { WORD palVersion; WORD palNumEntries; [size_is(palNumEntries)] PALETTEENTRY palPalEntry[*]; } LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE; cpp_quote("#endif") cpp_quote("#ifndef _SYSTEMTIME_") cpp_quote("#define _SYSTEMTIME_") typedef struct _SYSTEMTIME{ WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; cpp_quote("#endif") cpp_quote("#ifndef _FILETIME_") cpp_quote("#define _FILETIME_") typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME, *LPFILETIME; cpp_quote("#endif") cpp_quote("#ifndef _TEXTMETRIC_DEFINED") cpp_quote("#define _TEXTMETRIC_DEFINED") typedef struct tagTEXTMETRICA { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; } TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA; typedef struct tagTEXTMETRICW { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; WCHAR tmFirstChar; WCHAR tmLastChar; WCHAR tmDefaultChar; WCHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; } TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW; cpp_quote("#endif") /******************** BASIC COM/OLE TYPES ********************/ typedef WCHAR OLECHAR; typedef [string] OLECHAR *LPOLESTR; typedef [string] const OLECHAR *LPCOLESTR; cpp_quote("#ifndef __WINESRC__") cpp_quote("#define OLESTR(str) L##str") cpp_quote("#endif") typedef LONG SCODE; typedef struct _COAUTHIDENTITY { [size_is(UserLength+1)] USHORT *User; ULONG UserLength; [size_is(DomainLength+1)] USHORT *Domain; ULONG DomainLength; [size_is(PasswordLength+1)] USHORT *Password; ULONG PasswordLength; ULONG Flags; } COAUTHIDENTITY; typedef struct _COAUTHINFO { DWORD dwAuthnSvc; DWORD dwAuthzSvc; LPWSTR pwszServerPrincName; DWORD dwAuthnLevel; DWORD dwImpersonationLevel; COAUTHIDENTITY *pAuthIdentityData; DWORD dwCapabilities; } COAUTHINFO; typedef enum tagMEMCTX { MEMCTX_TASK = 1, MEMCTX_SHARED = 2, MEMCTX_MACSYSTEM = 3, MEMCTX_UNKNOWN = -1, MEMCTX_SAME = -2 } MEMCTX; cpp_quote("#ifndef _ROT_COMPARE_MAX_DEFINED") cpp_quote("#define _ROT_COMPARE_MAX_DEFINED") cpp_quote("#define ROT_COMPARE_MAX 2048") cpp_quote("#endif") cpp_quote("#ifndef _ROTFLAGS_DEFINED") cpp_quote("#define _ROTFLAGS_DEFINED") cpp_quote("#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1") cpp_quote("#define ROTFLAGS_ALLOWANYCLIENT 0x2") cpp_quote("#endif") typedef enum tagCLSCTX { CLSCTX_INPROC_SERVER = 0x1, CLSCTX_INPROC_HANDLER = 0x2, CLSCTX_LOCAL_SERVER = 0x4, CLSCTX_INPROC_SERVER16 = 0x8, CLSCTX_REMOTE_SERVER = 0x10, CLSCTX_INPROC_HANDLER16 = 0x20, CLSCTX_INPROC_SERVERX86 = 0x40, CLSCTX_INPROC_HANDLERX86 = 0x80, CLSCTX_ESERVER_HANDLER = 0x100, CLSCTX_NO_CODE_DOWNLOAD = 0x400, CLSCTX_NO_CUSTOM_MARSHAL = 0x1000, CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000, CLSCTX_NO_FAILURE_LOG = 0x4000, CLSCTX_DISABLE_AAA = 0x8000, CLSCTX_ENABLE_AAA = 0x10000, CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000 } CLSCTX; cpp_quote("#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)") cpp_quote("#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)") cpp_quote("#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)") typedef enum tagMSHLFLAGS { MSHLFLAGS_NORMAL = 0, MSHLFLAGS_TABLESTRONG = 1, MSHLFLAGS_TABLEWEAK = 2, MSHLFLAGS_NOPING = 4 } MSHLFLAGS; typedef enum tagMSHCTX { MSHCTX_LOCAL = 0, MSHCTX_NOSHAREDMEM = 1, MSHCTX_DIFFERENTMACHINE = 2, MSHCTX_INPROC = 3, MSHCTX_CROSSCTX = 4 } MSHCTX; /******************** BLOB TYPES ********************/ typedef struct _BYTE_BLOB { unsigned long clSize; [size_is(clSize)] byte abData[]; } BYTE_BLOB; typedef [unique] BYTE_BLOB *UP_BYTE_BLOB; typedef struct _FLAGGED_BYTE_BLOB { unsigned long fFlags; unsigned long clSize; [size_is(clSize)] byte abData[]; } FLAGGED_BYTE_BLOB; typedef [unique] FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB; typedef struct _FLAGGED_WORD_BLOB { unsigned long fFlags; unsigned long clSize; [size_is(clSize)] unsigned short asData[]; } FLAGGED_WORD_BLOB; typedef [unique] FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB; typedef struct _BYTE_SIZEDARR { unsigned long clSize; [size_is(clSize)] byte *pData; } BYTE_SIZEDARR; typedef struct _SHORT_SIZEDARR { unsigned long clSize; [size_is(clSize)] unsigned short *pData; } WORD_SIZEDARR; typedef struct _LONG_SIZEDARR { unsigned long clSize; [size_is(clSize)] unsigned long *pData; } DWORD_SIZEDARR; typedef struct _HYPER_SIZEDARR { unsigned long clSize; [size_is(clSize)] hyper *pData; } HYPER_SIZEDARR; /******************** GDI TYPES ********************/ const unsigned long WDT_INPROC_CALL = 0x48746457; const unsigned long WDT_REMOTE_CALL = 0x52746457; const unsigned long WDT_INPROC64_CALL = 0x50746457; typedef union _userCLIPFORMAT switch(long fContext) u { case WDT_INPROC_CALL: DWORD dwValue; case WDT_REMOTE_CALL: LPWSTR pwszName; } userCLIPFORMAT; typedef [unique] userCLIPFORMAT *wireCLIPFORMAT; typedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT; typedef struct tagRemHGLOBAL { long fNullHGlobal; unsigned long cbData; [size_is(cbData)] byte data[]; } RemHGLOBAL; typedef union _userHGLOBAL switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: FLAGGED_BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHGLOBAL; typedef [unique] userHGLOBAL *wireHGLOBAL; typedef struct tagRemHMETAFILEPICT { long mm; long xExt; long yExt; unsigned long cbData; [size_is(cbData)] byte data[]; } RemHMETAFILEPICT; typedef union _userHMETAFILE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHMETAFILE; typedef [unique] userHMETAFILE *wireHMETAFILE; typedef struct _remoteMETAFILEPICT { long mm; long xExt; long yExt; userHMETAFILE *hMF; } remoteMETAFILEPICT; typedef union _userHMETAFILEPICT switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHMETAFILEPICT; typedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT; typedef struct tagRemHENHMETAFILE { unsigned long cbData; [size_is(cbData)] byte data[]; } RemHENHMETAFILE; typedef union _userHENHMETAFILE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHENHMETAFILE; typedef [unique] userHENHMETAFILE *wireHENHMETAFILE; typedef struct tagRemHBITMAP { unsigned long cbData; [size_is(cbData)] byte data[]; } RemHBITMAP; typedef struct _userBITMAP { LONG bmType; LONG bmWidth; LONG bmHeight; LONG bmWidthBytes; WORD bmPlanes; WORD bmBitsPixel; ULONG cbSize; [size_is(cbSize)] byte pBuffer[]; } userBITMAP; typedef union _userHBITMAP switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: userBITMAP *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHBITMAP; typedef [unique] userHBITMAP *wireHBITMAP; typedef struct tagRemHPALETTE { unsigned long cbData; [size_is(cbData)] byte data[]; } RemHPALETTE; typedef struct tagrpcLOGPALETTE { WORD palVersion; WORD palNumEntries; [size_is(palNumEntries)] PALETTEENTRY palPalEntry[]; } rpcLOGPALETTE; typedef union _userHPALETTE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: rpcLOGPALETTE *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHPALETTE; typedef [unique] userHPALETTE *wireHPALETTE; cpp_quote("#if 0") DECLARE_WIREM_HANDLE(HGLOBAL); typedef HGLOBAL HLOCAL; DECLARE_WIREM_HANDLE(HBITMAP); DECLARE_WIREM_HANDLE(HPALETTE); DECLARE_WIREM_HANDLE(HENHMETAFILE); DECLARE_WIREM_HANDLE(HMETAFILE); cpp_quote("#endif") DECLARE_WIREM_HANDLE(HMETAFILEPICT); typedef union _RemotableHandle switch (long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: long hRemote; } RemotableHandle; typedef [unique] RemotableHandle *wireHACCEL; typedef [unique] RemotableHandle *wireHBRUSH; typedef [unique] RemotableHandle *wireHDC; typedef [unique] RemotableHandle *wireHFONT; typedef [unique] RemotableHandle *wireHICON; typedef [unique] RemotableHandle *wireHMENU; typedef [unique] RemotableHandle *wireHWND; cpp_quote("#if 0") /* for IDL only (C/C++ defs are in windef.h) */ DECLARE_WIREM_HANDLE(HACCEL); DECLARE_WIREM_HANDLE(HBRUSH); DECLARE_WIREM_HANDLE(HDC); DECLARE_WIREM_HANDLE(HFONT); DECLARE_WIREM_HANDLE(HICON); DECLARE_WIREM_HANDLE(HMENU); DECLARE_WIREM_HANDLE(HWND); typedef HICON HCURSOR; typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG, *PMSG, *NPMSG, *LPMSG; cpp_quote("#endif") /******************** GUID TYPES ********************/ cpp_quote("#if 0") /* for IDL only (C/C++ defs are in guiddef.h) */ typedef GUID *REFGUID; typedef IID *REFIID; typedef CLSID *REFCLSID; typedef FMTID *REFFMTID; cpp_quote("#endif") /******************** MISC TYPES ********************/ typedef enum tagDVASPECT { DVASPECT_CONTENT = 1, DVASPECT_THUMBNAIL = 2, DVASPECT_ICON = 4, DVASPECT_DOCPRINT = 8 } DVASPECT; typedef enum tagSTGC { STGC_DEFAULT = 0, STGC_OVERWRITE = 1, STGC_ONLYIFCURRENT = 2, STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4, STGC_CONSOLIDATE = 8 } STGC; typedef enum tagSTGMOVE { STGMOVE_MOVE = 0, STGMOVE_COPY = 1, STGMOVE_SHALLOWCOPY = 2 } STGMOVE; typedef enum tagSTATFLAG { STATFLAG_DEFAULT = 0, STATFLAG_NONAME = 1, STATFLAG_NOOPEN = 2 } STATFLAG; /******************** OLE Automation ********************/ cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */ typedef double DATE; cpp_quote("#else") cpp_quote("typedef double DECLSPEC_ALIGN(8) DATE;") cpp_quote("#endif") cpp_quote("#if 0") /* for IDL only */ typedef struct tagCY { LONGLONG int64; } CY; cpp_quote("#else") /* C/C++ defs */ cpp_quote("#ifndef _tagCY_DEFINED") cpp_quote("#define _tagCY_DEFINED") cpp_quote("typedef union tagCY {") cpp_quote(" struct {") cpp_quote("#ifdef WORDS_BIGENDIAN") cpp_quote(" LONG Hi;") cpp_quote(" ULONG Lo;") cpp_quote("#else") cpp_quote(" ULONG Lo;") cpp_quote(" LONG Hi;") cpp_quote("#endif") cpp_quote(" } DUMMYSTRUCTNAME;") cpp_quote(" LONGLONG int64;") cpp_quote("} CY;") cpp_quote("#endif") cpp_quote("#endif") typedef CY *LPCY; cpp_quote("#if 0") /* for IDL only */ typedef struct tagDEC { USHORT wReserved; BYTE scale; BYTE sign; ULONG Hi32; ULONGLONG Lo64; } DECIMAL; cpp_quote("#else") /* C/C++ defs */ cpp_quote("typedef struct tagDEC {") cpp_quote(" USHORT wReserved;") cpp_quote(" union {") cpp_quote(" struct {") cpp_quote(" BYTE scale;") cpp_quote(" BYTE sign;") cpp_quote(" } DUMMYSTRUCTNAME;") cpp_quote(" USHORT signscale;") cpp_quote(" } DUMMYUNIONNAME;") cpp_quote(" ULONG Hi32;") cpp_quote(" union {") cpp_quote(" struct {") cpp_quote("#ifdef WORDS_BIGENDIAN") cpp_quote(" ULONG Mid32;") cpp_quote(" ULONG Lo32;") cpp_quote("#else") cpp_quote(" ULONG Lo32;") cpp_quote(" ULONG Mid32;") cpp_quote("#endif") cpp_quote(" } DUMMYSTRUCTNAME1;") cpp_quote(" ULONGLONG Lo64;") cpp_quote(" } DUMMYUNIONNAME1;") cpp_quote("} DECIMAL;") cpp_quote("#endif") cpp_quote("#define DECIMAL_NEG ((BYTE)0x80)") cpp_quote("#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)") typedef DECIMAL *LPDECIMAL; typedef [unique] FLAGGED_WORD_BLOB *wireBSTR; typedef [wire_marshal(wireBSTR)] OLECHAR *BSTR; typedef BSTR *LPBSTR; typedef short VARIANT_BOOL; typedef VARIANT_BOOL _VARIANT_BOOL; cpp_quote("#define VARIANT_TRUE ((VARIANT_BOOL)0xFFFF)") cpp_quote("#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)") typedef struct tagBSTRBLOB { ULONG cbSize; [size_is(cbSize)] BYTE *pData; } BSTRBLOB, *LPBSTRBLOB; cpp_quote("#ifndef _tagBLOB_DEFINED") cpp_quote("#define _tagBLOB_DEFINED") cpp_quote("#define _BLOB_DEFINED") cpp_quote("#define _LPBLOB_DEFINED") typedef struct tagBLOB { ULONG cbSize; [size_is(cbSize)] BYTE *pBlobData; } BLOB, *LPBLOB; cpp_quote("#endif") typedef struct tagCLIPDATA { ULONG cbSize; long ulClipFmt; [size_is(cbSize-sizeof(long))] BYTE *pClipData; } CLIPDATA; cpp_quote("#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))") typedef ULONG PROPID; /******************** VARTYPE ********************/ typedef unsigned short VARTYPE; enum VARENUM { VT_EMPTY = 0, VT_NULL = 1, VT_I2 = 2, VT_I4 = 3, VT_R4 = 4, VT_R8 = 5, VT_CY = 6, VT_DATE = 7, VT_BSTR = 8, VT_DISPATCH = 9, VT_ERROR = 10, VT_BOOL = 11, VT_VARIANT = 12, VT_UNKNOWN = 13, VT_DECIMAL = 14, VT_I1 = 16, VT_UI1 = 17, VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_INT = 22, VT_UINT = 23, VT_VOID = 24, VT_HRESULT = 25, VT_PTR = 26, VT_SAFEARRAY = 27, VT_CARRAY = 28, VT_USERDEFINED = 29, VT_LPSTR = 30, VT_LPWSTR = 31, VT_RECORD = 36, VT_INT_PTR = 37, VT_UINT_PTR = 38, VT_FILETIME = 64, VT_BLOB = 65, VT_STREAM = 66, VT_STORAGE = 67, VT_STREAMED_OBJECT = 68, VT_STORED_OBJECT = 69, VT_BLOB_OBJECT = 70, VT_CF = 71, VT_CLSID = 72, VT_VERSIONED_STREAM= 73, VT_BSTR_BLOB = 0x0fff, VT_VECTOR = 0x1000, VT_ARRAY = 0x2000, VT_BYREF = 0x4000, VT_RESERVED = 0x8000, VT_ILLEGAL = 0xffff, VT_ILLEGALMASKED = 0x0fff, VT_TYPEMASK = 0x0fff }; typedef struct tagCSPLATFORM { DWORD dwPlatformId; DWORD dwVersionHi; DWORD dwVersionLo; DWORD dwProcessorArch; } CSPLATFORM; typedef struct tagQUERYCONTEXT { DWORD dwContext; CSPLATFORM Platform; LCID Locale; DWORD dwVersionHi; DWORD dwVersionLo; } QUERYCONTEXT; typedef [v1_enum] enum tagTYSPEC { TYSPEC_CLSID, TYSPEC_FILEEXT, TYSPEC_MIMETYPE, TYSPEC_PROGID, TYSPEC_FILENAME, TYSPEC_PACKAGENAME, TYSPEC_OBJECTID } TYSPEC; typedef union switch(DWORD tyspec) { case TYSPEC_CLSID: CLSID clsid; case TYSPEC_FILEEXT: LPOLESTR pFileExt; case TYSPEC_MIMETYPE: LPOLESTR pMimeType; case TYSPEC_PROGID: LPOLESTR pProgId; case TYSPEC_FILENAME: LPOLESTR pFileName; case TYSPEC_PACKAGENAME: struct { LPOLESTR pPackageName; GUID PolicyId; } ByName; case TYSPEC_OBJECTID: struct { GUID ObjectId; GUID PolicyId; } ByObjectId; } uCLSSPEC; cpp_quote("#ifndef PROPERTYKEY_DEFINED") cpp_quote("#define PROPERTYKEY_DEFINED") typedef struct _tagpropertykey { GUID fmtid; DWORD pid; } PROPERTYKEY; cpp_quote("#endif /*PROPERTYKEY_DEFINED*/") } /* interface IWinTypes */ ================================================ FILE: wine/windows/wuapi.idl ================================================ /* * Copyright 2008 Hans Leidekker for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; #ifndef __WIDL__ #define threading(model) #define progid(str) #define vi_progid(str) #endif [ helpstring("WUAPI 2.0 Type Library"), uuid(b596cc9f-56e5-419e-a622-e01bb457431e), version(2.0) ] library WUApiLib { importlib("stdole2.tlb"); interface ICategoryCollection; interface IStringCollection; interface IUpdateCollection; interface IUpdateDownloader; interface IUpdateInstaller; interface IUpdateSearcher; typedef [public] enum tagDownloadPriority { dpLow = 1, dpNormal = 2, dpHigh = 3, } DownloadPriority; typedef [public] enum tagServerSelection { ssDefault = 0, ssManagedServer = 1, ssWindowsUpdate = 2, ssOthers = 3, } ServerSelection; typedef [public] enum tagAutomaticUpdatesNotificationLevel { aunlNotConfigured, aunlDisabled, aunlNotifyBeforeDownload, aunlNotifyBeforeInstallation, aunlScheduledInstallation, } AutomaticUpdatesNotificationLevel; typedef [public] enum tagAutomaticUpdatesScheduledInstallationDay { ausidEveryDay, ausidEverySunday, ausidEveryMonday, ausidEveryTuesday, ausidEveryWednesday, ausidEveryThursday, ausidEveryFriday, ausidEverySaturday, } AutomaticUpdatesScheduledInstallationDay; typedef [public] enum tagDownloadPhase { dphInitializing, dphDownloading, dphVerifying, } DownloadPhase; typedef [public] enum tagOperationResultCode { orcNotStarted, orcInProgress, orcSucceeded, orcSucceededWithErrors, orcFailed, orcAborted, } OperationResultCode; typedef [public] enum tagUpdateExceptionContext { uecGeneral = 1, uecWindowsDriver, uecWindowsInstaller } UpdateExceptionContext; typedef [public] enum tagInstallationImpact { iiNormal, iiMinor, iiRequiresExclusiveHandling } InstallationImpact; typedef [public] enum tagInstallationRebootBehavior { irbNeverReboots, irbAlwaysRequiresReboot, irbCanRequestReboot } InstallationRebootBehavior; typedef [public] enum tagUpdateType { utSoftware = 1, utDriver } UpdateType; typedef [public] enum tagUpdateOperation { uoInstallation = 1, uoUninstallation } UpdateOperation; typedef [public] enum tagDeploymentAction { daNone, daInstallation, daUninstallation, daDetection } DeploymentAction; [ object, oleautomation, dual, nonextensible, uuid(2ee48f22-af3c-405f-8970-f71be12ee9a2), pointer_default(unique) ] interface IAutomaticUpdatesSettings : IDispatch { [propget, id(0x60020001)] HRESULT NotificationLevel( [out, retval] AutomaticUpdatesNotificationLevel *retval ); [propput, id(0x60020001)] HRESULT NotificationLevel( [in] AutomaticUpdatesNotificationLevel value ); [propget, id(0x60020002)] HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020003)] HRESULT Required( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020004)] HRESULT ScheduledInstallationDay( [out, retval] AutomaticUpdatesScheduledInstallationDay *retval ); [propput, id(0x60020004)] HRESULT ScheduledInstallationDay( [in] AutomaticUpdatesScheduledInstallationDay value ); [propget, id(0x60020005)] HRESULT ScheduledInstallationTime( [out, retval] LONG *retval ); [propput, id(0x60020005)] HRESULT ScheduledInstallationTime( [in] LONG value ); [id(0x60020006)] HRESULT Refresh(); [id(0x60020007)] HRESULT Save(); } [ object, uuid(673425bf-c082-4c7c-bdfd-569464b8e0ce), oleautomation, dual, nonextensible, pointer_default(unique), hidden ] interface IAutomaticUpdates : IDispatch { HRESULT DetectNow(); HRESULT Pause(); HRESULT Resume(); HRESULT ShowSettingsDialog(); [propget] HRESULT Settings( [out, retval] IAutomaticUpdatesSettings **retval); [propget] HRESULT ServiceEnabled( [out, retval] VARIANT_BOOL *retval); HRESULT EnableService(); } [ object, oleautomation, dual, nonextensible, uuid(174c81fe-aecd-4dae-b8a0-2c6318dd86a8), pointer_default(unique), ] interface IWebProxy : IDispatch { [propget, id(0x60020001)] HRESULT Address( [out, retval] BSTR *retval ); [propput, id(0x60020001)] HRESULT Address( [in] BSTR value ); [propget, id(0x60020002)] HRESULT BypassList( [out, retval] IStringCollection **retval ); [propput, id(0x60020002)] HRESULT BypassList( [in] IStringCollection *value ); [propget, id(0x60020003)] HRESULT BypassProxyOnLocal( [out, retval] VARIANT_BOOL *retval ); [propput, id(0x60020003)] HRESULT BypassProxyOnLocal( [in] VARIANT_BOOL value ); [propget, id(0x60020004)] HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020005)] HRESULT UserName( [out, retval] BSTR *retval ); [propput, id(0x60020005)] HRESULT UserName( [in] BSTR value ); [id(0x60020006)] HRESULT SetPassword( [in] BSTR value ); [id(0x60020007)] HRESULT PromptForCredentials( [in, unique] IUnknown *parentWindow, [in] BSTR title ); [restricted, id(0x60020008)] HRESULT PromptForCredentialsFromHwnd( [in, unique] HWND parentWindow, [in] BSTR title ); [propget, id(0x60020009)] HRESULT AutoDetect( [out, retval] VARIANT_BOOL *retval ); [propput, id(0x60020009)] HRESULT AutoDetect( [in] VARIANT_BOOL value ); } [ object, uuid(816858a4-260d-4260-933a-2585f1abc76b), oleautomation, dual, nonextensible, pointer_default(unique), ] interface IUpdateSession : IDispatch { [propget] HRESULT ClientApplicationID( [out, retval] BSTR *retval); [propput] HRESULT ClientApplicationID( [in] BSTR value); [propget] HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval); [propget] HRESULT WebProxy( [out, retval] IWebProxy **retval); [propput] HRESULT WebProxy( [in, unique] IWebProxy *value); HRESULT CreateUpdateSearcher( [out, retval] IUpdateSearcher **retval); HRESULT CreateUpdateDownloader( [out, retval] IUpdateDownloader **retval); HRESULT CreateUpdateInstaller( [out, retval] IUpdateInstaller **retval); } [ object, oleautomation, dual, nonextensible, uuid(7c907864-346c-4aeb-8f3f-57da289f969f), pointer_default(unique), ] interface IImageInformation : IDispatch { [propget, id(0x60020001)] HRESULT AltText( [out, retval] BSTR *retval ); [propget, id(0x60020002)] HRESULT Height( [out, retval] LONG *retval ); [propget, id(0x60020003)] HRESULT Source( [out, retval] BSTR *retval ); [propget, id(0x60020004)] HRESULT Width( [out, retval] LONG *retval ); } [ object, oleautomation, dual, nonextensible, uuid(81ddc1b8-9d35-47a6-b471-5b80f519223b), pointer_default(unique), ] interface ICategory : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Name( [out, retval] BSTR *retval ); [propget, id(0x60020001)] HRESULT CategoryID( [out, retval] BSTR *retval ); [propget, id(0x60020002)] HRESULT Children( [out, retval] ICategoryCollection **retval ); [propget, id(0x60020003)] HRESULT Description( [out, retval] BSTR *retval ); [propget, id(0x60020004)] HRESULT Image( [out, retval] IImageInformation **retval ); [propget, id(0x60020005)] HRESULT Order( [out, retval] LONG *retval ); [propget, id(0x60020006)] HRESULT Parent( [out, retval] ICategory **retval ); [propget, id(0x60020007)] HRESULT Type( [out, retval] BSTR *retval ); [propget, id(0x60020008)] HRESULT Updates( [out, retval] IUpdateCollection **retval ); } [ object, oleautomation, dual, nonextensible, uuid(3a56bfb8-576c-43f7-9335-fe4838fd7e37), pointer_default(unique), ] interface ICategoryCollection : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Item( [in] LONG index, [out, retval] ICategory **retval ); [propget, id(DISPID_NEWENUM)] HRESULT _NewEnum( [out, retval] IUnknown **retval ); [propget, id(0x60020001)] HRESULT Count( [out, retval] LONG *retval ); } [ object, oleautomation, dual, nonextensible, uuid(eff90582-2ddc-480f-a06d-60f3fbc362c3), pointer_default(unique), hidden ] interface IStringCollection : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Item( [in] LONG index, [out, retval] BSTR *retval ); [propput, id(DISPID_VALUE)] HRESULT Item( [in] LONG index, [in] BSTR value ); [propget, id(DISPID_NEWENUM)] HRESULT _NewEnum( [out, retval] IUnknown **retval ); [propget, id(0x60020001)] HRESULT Count( [out, retval] LONG *retval ); [propget, id(0x60020002)] HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval ); [id(0x60020003)] HRESULT Add( [in] BSTR value, [out, retval] LONG *retval ); [id(0x60020004)] HRESULT Clear(); [id(0x60020005)] HRESULT Copy( [out, retval] IStringCollection **retval ); [id(0x60020006)] HRESULT Insert( [in] LONG index, [in] BSTR value ); [id(0x60020007)] HRESULT RemoveAt( [in] LONG index ); } [ object, oleautomation, dual, nonextensible, uuid(a376dd5e-09d4-427f-af7c-fed5b6e1c1d6), pointer_default(unique), ] interface IUpdateException : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Message( [out, retval] BSTR *retval ); [propget, id(0x60020001)] HRESULT HResult( [out, retval] LONG *retval ); [propget, id(0x60020002)] HRESULT Context( [out, retval] UpdateExceptionContext *retval ); } [ object, oleautomation, dual, nonextensible, uuid(503626a3-8e14-4729-9355-0fe664bd2321), pointer_default(unique), ] interface IUpdateExceptionCollection : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Item( [in] LONG index, [out, retval] IUpdateException **retval ); [propget, id(DISPID_NEWENUM)] HRESULT _NewEnum( [out, retval] IUnknown **retval ); [propget, id(0x60020001)] HRESULT Count( [out, retval] LONG *retval ); } [ object, oleautomation, dual, nonextensible, uuid(46297823-9940-4c09-aed9-cd3ea6d05968), pointer_default(unique) ] interface IUpdateIdentity : IDispatch { [propget, id(0x60020002)] HRESULT RevisionNumber( [out, retval] LONG *retval ); [propget, id(0x60020003)] HRESULT UpdateID( [out, retval] BSTR *retval ); } [ , object, oleautomation, dual, nonextensible, uuid(d9a59339-e245-4dbd-9686-4d5763e39624), pointer_default(unique), ] interface IInstallationBehavior : IDispatch { [propget, id(0x60020001)] HRESULT CanRequestUserInput( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020002)] HRESULT Impact( [out, retval] InstallationImpact *retval ); [propget, id(0x60020003)] HRESULT RebootBehavior( [out, retval] InstallationRebootBehavior *retval ); [propget, id(0x60020004)] HRESULT RequiresNetworkConnectivity( [out, retval] VARIANT_BOOL *retval ); } [ object, oleautomation, dual, nonextensible, uuid(54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02), pointer_default(unique), ] interface IUpdateDownloadContent : IDispatch { [propget, id(0x60020001)] HRESULT DownloadUrl( [out, retval] BSTR *retval ); } [ object, oleautomation, dual, nonextensible, uuid(bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba), pointer_default(unique), ] interface IUpdateDownloadContentCollection : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Item( [in] LONG index, [out, retval] IUpdateDownloadContent **retval ); [propget, id(DISPID_NEWENUM)] HRESULT _NewEnum( [out, retval] IUnknown **retval ); [propget, id(0x60020001)] HRESULT Count( [out, retval] LONG *retval ); } [ object, oleautomation, dual, nonextensible, uuid(6a92b07a-d821-4682-b423-5c805022cc4d), pointer_default(unique), ] interface IUpdate : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Title( [out, retval] BSTR *retval ); [propget, id(0x60020001)] HRESULT AutoSelectOnWebSites( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020002)] HRESULT BundledUpdates( [out, retval] IUpdateCollection **retval ); [propget, id(0x60020003)] HRESULT CanRequireSource( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020004)] HRESULT Categories( [out, retval] ICategoryCollection **retval ); [propget, id(0x60020005)] HRESULT Deadline( [out, retval] VARIANT *retval ); [propget, id(0x60020006)] HRESULT DeltaCompressedContentAvailable( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020007)] HRESULT DeltaCompressedContentPreferred( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020008)] HRESULT Description( [out, retval] BSTR *retval ); [propget, id(0x60020009)] HRESULT EulaAccepted( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x6002000a)] HRESULT EulaText( [out, retval] BSTR *retval ); [propget, id(0x6002000b)] HRESULT HandlerID( [out, retval] BSTR *retval ); [propget, id(0x6002000c)] HRESULT Identity( [out, retval] IUpdateIdentity **retval ); [propget, id(0x6002000d)] HRESULT Image( [out, retval] IImageInformation **retval ); [propget, id(0x6002000e)] HRESULT InstallationBehavior( [out, retval] IInstallationBehavior **retval ); [propget, id(0x6002000f)] HRESULT IsBeta( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020010)] HRESULT IsDownloaded( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020011)] HRESULT IsHidden( [out, retval] VARIANT_BOOL *retval ); [propput, id(0x60020011)] HRESULT IsHidden( [in] VARIANT_BOOL value ); [propget, id(0x60020012)] HRESULT IsInstalled( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020013)] HRESULT IsMandatory( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020014)] HRESULT IsUninstallable( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020015)] HRESULT Languages( [out, retval] IStringCollection **retval ); [propget, id(0x60020016)] HRESULT LastDeploymentChangeTime( [out, retval] DATE *retval ); [propget, id(0x60020017)] HRESULT MaxDownloadSize( [out, retval] DECIMAL *retval ); [propget, id(0x60020018)] HRESULT MinDownloadSize( [out, retval] DECIMAL *retval ); [propget, id(0x60020019)] HRESULT MoreInfoUrls( [out, retval] IStringCollection **retval ); [propget, id(0x6002001a)] HRESULT MsrcSeverity( [out, retval] BSTR *retval ); [propget, id(0x6002001b)] HRESULT RecommendedCpuSpeed( [out, retval] LONG *retval ); [propget, id(0x6002001c)] HRESULT RecommendedHardDiskSpace( [out, retval] LONG *retval ); [propget, id(0x6002001d)] HRESULT RecommendedMemory( [out, retval] LONG *retval ); [propget, id(0x6002001e)] HRESULT ReleaseNotes( [out, retval] BSTR *retval ); [propget, id(0x6002001f)] HRESULT SecurityBulletinIDs( [out, retval] IStringCollection **retval ); [propget, id(0x60020021)] HRESULT SupersededUpdateIDs( [out, retval] IStringCollection **retval ); [propget, id(0x60020022)] HRESULT SupportUrl( [out, retval] BSTR *retval ); [propget, id(0x60020023)] HRESULT Type( [out, retval] UpdateType *retval ); [propget, id(0x60020024)] HRESULT UninstallationNotes( [out, retval] BSTR *retval ); [propget, id(0x60020025)] HRESULT UninstallationBehavior( [out, retval] IInstallationBehavior **retval ); [propget, id(0x60020026)] HRESULT UninstallationSteps( [out, retval] IStringCollection **retval ); [propget, id(0x60020028)] HRESULT KBArticleIDs( [out, retval] IStringCollection **retval ); [id(0x60020027)] HRESULT AcceptEula(); [propget, id(0x60020029)] HRESULT DeploymentAction( [out, retval] DeploymentAction *retval ); [id(0x6002002a)] HRESULT CopyFromCache( [in, ref] BSTR path, [in] VARIANT_BOOL toExtractCabFiles ); [propget, id(0x6002002b)] HRESULT DownloadPriority( [out, retval] DownloadPriority *retval ); [propget, id(0x6002002c)] HRESULT DownloadContents( [out, retval] IUpdateDownloadContentCollection **retval ); } [ object, oleautomation, dual, nonextensible, uuid(07f7438c-7709-4ca5-b518-91279288134e), pointer_default(unique), hidden ] interface IUpdateCollection : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Item( [in] LONG index, [out, retval] IUpdate **retval ); [propput, id(DISPID_VALUE)] HRESULT Item( [in] LONG index, [in] IUpdate *value ); [propget, id(DISPID_NEWENUM)] HRESULT _NewEnum( [out, retval] IUnknown **retval ); [propget, id(0x60020001)] HRESULT Count( [out, retval] LONG *retval ); [propget, id(0x60020002)] HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval ); [id(0x60020003)] HRESULT Add( [in] IUpdate *value, [out, retval] LONG *retval ); [id(0x60020004)] HRESULT Clear(); [id(0x60020005)] HRESULT Copy( [out, retval] IUpdateCollection **retval ); [id(0x60020006)] HRESULT Insert( [in] LONG index, [in] IUpdate *value ); [id(0x60020007)] HRESULT RemoveAt( [in] LONG index ); } [ object, oleautomation, dual, nonextensible, uuid(7366ea16-7a1a-4ea2-b042-973d3e9cd99b), pointer_default(unique), ] interface ISearchJob : IDispatch { [propget, id(0x60020001)] HRESULT AsyncState( [out, retval] VARIANT *retval ); [propget, id(0x60020002)] HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval ); [id(0x60020003)] HRESULT CleanUp(); [id(0x60020004)] HRESULT RequestAbort(); } [ object, oleautomation, dual, nonextensible, uuid(d40cff62-e08c-4498-941a-01e25f0fd33c), pointer_default(unique), ] interface ISearchResult : IDispatch { [propget, id(0x60020001)] HRESULT ResultCode( [out, retval] OperationResultCode *retval ); [propget, id(0x60020002)] HRESULT RootCategories( [out, retval] ICategoryCollection **retval ); [propget, id(0x60020003)] HRESULT Updates( [out, retval] IUpdateCollection **retval ); [propget, id(0x60020004)] HRESULT Warnings( [out, retval] IUpdateExceptionCollection **retval ); } [ object, oleautomation, dual, nonextensible, uuid(be56a644-af0e-4e0e-a311-c1d8e695cbff), pointer_default(unique), ] interface IUpdateHistoryEntry : IDispatch { [propget, id(0x60020001)] HRESULT Operation( [out, retval] UpdateOperation *retval ); [propget, id(0x60020002)] HRESULT ResultCode( [out, retval] OperationResultCode *retval ); [propget, id(0x60020003)] HRESULT HResult( [out, retval] LONG *retval ); [propget, id(0x60020004)] HRESULT Date( [out, retval] DATE *retval ); [propget, id(0x60020005)] HRESULT UpdateIdentity( [out, retval] IUpdateIdentity **retval ); [propget, id(0x60020006)] HRESULT Title( [out, retval] BSTR *retval ); [propget, id(0x60020007)] HRESULT Description( [out, retval] BSTR *retval ); [propget, id(0x60020008)] HRESULT UnmappedResultCode( [out, retval] LONG *retval ); [propget, id(0x60020009)] HRESULT ClientApplicationID( [out, retval] BSTR *retval ); [propget, id(0x6002000a)] HRESULT ServerSelection( [out, retval] ServerSelection *retval ); [propget, id(0x6002000b)] HRESULT ServiceID( [out, retval] BSTR *retval ); [propget, id(0x6002000c)] HRESULT UninstallationSteps( [out, retval] IStringCollection **retval ); [propget, id(0x6002000d)] HRESULT UninstallationNotes( [out, retval] BSTR *retval ); [propget, id(0x6002000e)] HRESULT SupportUrl( [out, retval] BSTR *retval ); } [ object, oleautomation, dual, nonextensible, uuid(a7f04f3c-a290-435b-aadf-a116c3357a5c), pointer_default(unique), ] interface IUpdateHistoryEntryCollection : IDispatch { [propget, id(DISPID_VALUE)] HRESULT Item( [in] LONG index, [out, retval] IUpdateHistoryEntry **retval ); [propget, id(DISPID_NEWENUM)] HRESULT _NewEnum( [out, retval] IUnknown **retval ); [propget, id(0x60020001)] HRESULT Count( [out, retval] LONG *retval ); } [ object, uuid(8f45abf1-f9ae-4b95-a933-f0f66e5056ea), oleautomation, dual, nonextensible, pointer_default(unique), ] interface IUpdateSearcher : IDispatch { [propget] HRESULT CanAutomaticallyUpgradeService( [out, retval] VARIANT_BOOL *retval); [propput] HRESULT CanAutomaticallyUpgradeService( [in] VARIANT_BOOL value); [propget] HRESULT ClientApplicationID( [out, retval] BSTR *retval); [propput] HRESULT ClientApplicationID( [in] BSTR value); [propget] HRESULT IncludePotentiallySupersededUpdates( [out, retval] VARIANT_BOOL *retval); [propput] HRESULT IncludePotentiallySupersededUpdates( [in] VARIANT_BOOL value); [propget] HRESULT ServerSelection( [out, retval] ServerSelection *retval); [propput] HRESULT ServerSelection( [in] ServerSelection value); HRESULT BeginSearch( [in] BSTR criteria, [in] IUnknown *onCompleted, [in] VARIANT state, [out, retval] ISearchJob **retval); HRESULT EndSearch( [in] ISearchJob *searchJob, [out, retval] ISearchResult **retval); HRESULT EscapeString( [in] BSTR unescaped, [out, retval] BSTR *retval); HRESULT QueryHistory( [in] LONG startIndex, [in] LONG count, [out, retval] IUpdateHistoryEntryCollection **retval); HRESULT Search( [in] BSTR criteria, [out, retval] ISearchResult **retval); [propget] HRESULT Online( [out, retval] VARIANT_BOOL *retval); [propput] HRESULT Online( [in] VARIANT_BOOL value); HRESULT GetTotalHistoryCount( [out, retval] LONG *retval); [propget] HRESULT ServiceID( [out, retval] BSTR *retval); [propput] HRESULT ServiceID( [in] BSTR value); } [ object, oleautomation, dual, nonextensible, uuid(bf99af76-b575-42ad-8aa4-33cbb5477af1), pointer_default(unique), ] interface IUpdateDownloadResult : IDispatch { [propget, id(0x60020001)] HRESULT HResult( [out, retval] LONG *retval ); [propget, id(0x60020002)] HRESULT ResultCode( [out, retval] OperationResultCode *retval ); } [ object, oleautomation, dual, nonextensible, uuid(d31a5bac-f719-4178-9dbb-5e2cb47fd18a), pointer_default(unique), ] interface IDownloadProgress : IDispatch { [propget, id(0x60020001)] HRESULT CurrentUpdateBytesDownloaded( [out, retval] DECIMAL *retval ); [propget, id(0x60020002)] HRESULT CurrentUpdateBytesToDownload( [out, retval] DECIMAL *retval ); [propget, id(0x60020003)] HRESULT CurrentUpdateIndex( [out, retval] LONG *retval ); [propget, id(0x60020004)] HRESULT PercentComplete( [out, retval] LONG *retval ); [propget, id(0x60020005)] HRESULT TotalBytesDownloaded( [out, retval] DECIMAL *retval ); [propget, id(0x60020006)] HRESULT TotalBytesToDownload( [out, retval] DECIMAL *retval ); [id(0x60020007)] HRESULT GetUpdateResult( [in] LONG updateIndex, [out, retval] IUpdateDownloadResult **retval ); [propget, id(0x60020008)] HRESULT CurrentUpdateDownloadPhase( [out, retval] DownloadPhase *retval ); [propget, id(0x60020009)] HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval ); } [ object, oleautomation, dual, nonextensible, uuid(c574de85-7358-43f6-aae8-8697e62d8ba7), pointer_default(unique), ] interface IDownloadJob : IDispatch { [propget, id(0x60020001)] HRESULT AsyncState( [out, retval] VARIANT *retval ); [propget, id(0x60020002)] HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020003)] HRESULT Updates( [out, retval] IUpdateCollection **retval ); [id(0x60020004)] HRESULT CleanUp(); [id(0x60020005)] HRESULT GetProgress( [out, retval] IDownloadProgress **retval ); [id(0x60020006)] HRESULT RequestAbort(); } [ object, oleautomation, dual, nonextensible, uuid(daa4fdd0-4727-4dbe-a1e7-745dca317144), pointer_default(unique), ] interface IDownloadResult : IDispatch { [propget, id(0x60020001)] HRESULT HResult( [out, retval] LONG *retval ); [propget, id(0x60020002)] HRESULT ResultCode( [out, retval] OperationResultCode *retval ); [id(0x60020003)] HRESULT GetUpdateResult( [in] LONG updateIndex, [out, retval] IUpdateDownloadResult **retval ); } [ object, uuid(68f1c6f9-7ecc-4666-a464-247fe12496c3), oleautomation, dual, nonextensible, pointer_default(unique), hidden ] interface IUpdateDownloader : IDispatch { [propget] HRESULT ClientApplicationID( [out, retval] BSTR *retval); [propput] HRESULT ClientApplicationID( [in] BSTR value); [propget] HRESULT IsForced( [out, retval] VARIANT_BOOL *retval); [propput] HRESULT IsForced( [in] VARIANT_BOOL value); [propget] HRESULT Priority( [out, retval] DownloadPriority *retval); [propput] HRESULT Priority( [in] DownloadPriority value); [propget] HRESULT Updates( [out, retval] IUpdateCollection **retval); [propput] HRESULT Updates( [in] IUpdateCollection *value); HRESULT BeginDownload( [in] IUnknown *onProgressChanged, [in] IUnknown *onCompleted, [in] VARIANT state, [out, retval] IDownloadJob **retval); HRESULT Download( [out, retval] IDownloadResult **retval); HRESULT EndDownload( [in] IDownloadJob *value, [out, retval] IDownloadResult **retval); } [ object, oleautomation, dual, nonextensible, uuid(d940f0f8-3cbb-4fd0-993f-471e7f2328ad), pointer_default(unique), ] interface IUpdateInstallationResult : IDispatch { [propget, id(0x60020001)] HRESULT HResult( [out, retval] LONG *retval ); [propget, id(0x60020002)] HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020003)] HRESULT ResultCode( [out, retval] OperationResultCode *retval ); } [ object, oleautomation, dual, nonextensible, uuid(345c8244-43a3-4e32-a368-65f073b76f36), pointer_default(unique), ] interface IInstallationProgress : IDispatch { [propget, id(0x60020001)] HRESULT CurrentUpdateIndex( [out, retval] LONG *retval ); [propget, id(0x60020002)] HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval ); [propget, id(0x60020003)] HRESULT PercentComplete( [out, retval] LONG *retval ); [id(0x60020004)] HRESULT GetUpdateResult( [in] LONG updateIndex, [out, retval] IUpdateInstallationResult **retval ); } [ object, oleautomation, dual, nonextensible, uuid(5c209f0b-bad5-432a-9556-4699bed2638a), pointer_default(unique), ] interface IInstallationJob : IDispatch { [propget, id(0x60020001)] HRESULT AsyncState( [out, retval] VARIANT *retval ); [propget, id(0x60020002)] HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020003)] HRESULT Updates( [out, retval] IUpdateCollection **retval ); [id(0x60020004)] HRESULT CleanUp(); [id(0x60020005)] HRESULT GetProgress( [out, retval] IInstallationProgress **retval ); [id(0x60020006)] HRESULT RequestAbort(); } [ object, oleautomation, dual, nonextensible, uuid(a43c56d6-7451-48d4-af96-b6cd2d0d9b7a), pointer_default(unique), ] interface IInstallationResult : IDispatch { [propget, id(0x60020001)] HRESULT HResult( [out, retval] LONG *retval ); [propget, id(0x60020002)] HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval ); [propget, id(0x60020003)] HRESULT ResultCode( [out, retval] OperationResultCode *retval ); [id(0x60020004)] HRESULT GetUpdateResult( [in] LONG updateIndex, [out, retval] IUpdateInstallationResult **retval ); } [ object, uuid(7b929c68-ccdc-4226-96b1-8724600b54c2), oleautomation, dual, nonextensible, pointer_default(unique), ] interface IUpdateInstaller : IDispatch { [propget] HRESULT ClientApplicationID( [out, retval] BSTR *retval); [propput] HRESULT ClientApplicationID( [in] BSTR value); [propget] HRESULT IsForced( [out, retval] VARIANT_BOOL *retval); [propput] HRESULT IsForced( [in] VARIANT_BOOL value); [propget, restricted] HRESULT ParentHwnd( [out, retval] HWND *retval); [propput, restricted] HRESULT ParentHwnd( [in, unique] HWND value); [propput] HRESULT ParentWindow( [in, unique] IUnknown *value); [propget] HRESULT ParentWindow( [out, retval] IUnknown **retval); [propget] HRESULT Updates( [out, retval] IUpdateCollection **retval); [propput] HRESULT Updates( [in] IUpdateCollection *value); HRESULT BeginInstall( [in] IUnknown *onProgressChanged, [in] IUnknown *onCompleted, [in] VARIANT state, [out, retval] IInstallationJob **retval); HRESULT BeginUninstall( [in] IUnknown *onProgressChanged, [in] IUnknown *onCompleted, [in] VARIANT state, [out, retval] IInstallationJob **retval); HRESULT EndInstall( [in] IInstallationJob *value, [out, retval] IInstallationResult **retval); HRESULT EndUninstall( [in] IInstallationJob *value, [out, retval] IInstallationResult **retval); HRESULT Install( [out, retval] IInstallationResult **retval); HRESULT RunWizard( [in, defaultvalue("")] BSTR dialogTitle, [out, retval] IInstallationResult **retval); [propget] HRESULT IsBusy( [out, retval] VARIANT_BOOL *retval); HRESULT Uninstall( [out, retval] IInstallationResult **retval); [propget] HRESULT AllowSourcePrompts( [out, retval] VARIANT_BOOL *retval); [propput] HRESULT AllowSourcePrompts( [in] VARIANT_BOOL value); [propget] HRESULT RebootRequiredBeforeInstallation( [out, retval] VARIANT_BOOL *retval); } [ object, uuid(ADE87BF7-7B56-4275-8FAB-B9B0E591844B), oleautomation, hidden, dual, nonextensible, pointer_default(unique), ] interface ISystemInformation : IDispatch { [propget] HRESULT OemHardwareSupportLink( [out, retval] BSTR *retval); [propget] HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval); } [ helpstring("AutomaticUpdates Class"), threading(both), progid("Microsoft.Update.AutoUpdate.1"), vi_progid("Microsoft.Update.AutoUpdate"), uuid(bfe18e9c-6d87-4450-b37c-e02f0b373803) ] coclass AutomaticUpdates { interface IAutomaticUpdates; } [ helpstring("UpdateSession Class"), threading(both), progid("Microsoft.Update.Session.1"), vi_progid("Microsoft.Update.Session"), uuid(4cb43d7f-7eee-4906-8698-60da1c38f2fe) ] coclass UpdateSession { interface IUpdateSession; } [ helpstring("SystemInformation Class"), threading(both), progid("Microsoft.Update.SystemInfo.1"), vi_progid("Microsoft.Update.SystemInfo"), uuid(C01B9BA0-BEA7-41BA-B604-D0A36F469133) ] coclass SystemInformation { interface ISystemInformation; } } /* WUApiLib */ ================================================ FILE: wine/windows/x3daudio.h ================================================ /* * Copyright (c) 2015 Andrew Eikum for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _X3DAUDIO_H #define _X3DAUDIO_H typedef struct X3DAUDIO_VECTOR { float x, y, z; } X3DAUDIO_VECTOR; typedef struct X3DAUDIO_CONE { float InnerAngle; float OuterAngle; float InnerVolume; float OuterVolume; float InnerLPF; float OuterLPF; float InnerReverb; float OuterReverb; } X3DAUDIO_CONE; typedef struct X3DAUDIO_DISTANCE_CURVE_POINT { float Distance; float DSPSetting; } X3DAUDIO_DISTANCE_CURVE_POINT; typedef struct X3DAUDIO_DISTANCE_CURVE { X3DAUDIO_DISTANCE_CURVE_POINT *pPoints; UINT32 PointCount; } X3DAUDIO_DISTANCE_CURVE; typedef struct X3DAUDIO_LISTENER { X3DAUDIO_VECTOR OrientFront; X3DAUDIO_VECTOR OrientTop; X3DAUDIO_VECTOR Position; X3DAUDIO_VECTOR Velocity; X3DAUDIO_CONE *pCone; } X3DAUDIO_LISTENER; typedef struct X3DAUDIO_EMITTER { X3DAUDIO_CONE *pCone; X3DAUDIO_VECTOR OrientFront; X3DAUDIO_VECTOR OrientTop; X3DAUDIO_VECTOR Position; X3DAUDIO_VECTOR Velocity; float InnerRadius; float InnerRadiusAngle; UINT32 ChannelCount; float ChannelRadius; float *pChannelAzimuths; X3DAUDIO_DISTANCE_CURVE *pVolumeCurve; X3DAUDIO_DISTANCE_CURVE *pLFECurve; X3DAUDIO_DISTANCE_CURVE *pLPFDirectCurve; X3DAUDIO_DISTANCE_CURVE *pLPFReverbCurve; X3DAUDIO_DISTANCE_CURVE *pReverbCurve; float CurveDistanceScalar; float DopplerScalar; } X3DAUDIO_EMITTER; typedef struct X3DAUDIO_DSP_SETTINGS { float *pMatrixCoefficients; float *pDelayTimes; UINT32 SrcChannelCount; UINT32 DstChannelCount; float LPFDirectCoefficient; float LPFReverbCoefficient; float ReverbLevel; float DopplerFactor; float EmitterToListenerAngle; float EmitterToListenerDistance; float EmitterVelocityComponent; float ListenerVelocityComponent; } X3DAUDIO_DSP_SETTINGS; #define X3DAUDIO_HANDLE_BYTESIZE 20 typedef BYTE X3DAUDIO_HANDLE[X3DAUDIO_HANDLE_BYTESIZE]; HRESULT CDECL X3DAudioInitialize(UINT32, float, X3DAUDIO_HANDLE); void CDECL X3DAudioCalculate(const X3DAUDIO_HANDLE, const X3DAUDIO_LISTENER *, const X3DAUDIO_EMITTER *, UINT32, X3DAUDIO_DSP_SETTINGS *); #endif ================================================ FILE: wine/windows/xapo.idl ================================================ /* * Copyright (c) 2015 Andrew Eikum for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; #define XAPO_REGISTRATION_STRING_LENGTH 256 cpp_quote("#if 0") typedef struct WAVEFORMATEX { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; typedef struct { WAVEFORMATEX Format; union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; } Samples; DWORD dwChannelMask; GUID SubFormat; } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; cpp_quote("#else") cpp_quote("#include ") cpp_quote("#endif") typedef struct XAPO_REGISTRATION_PROPERTIES { CLSID clsid; WCHAR FriendlyName[XAPO_REGISTRATION_STRING_LENGTH]; WCHAR CopyrightInfo[XAPO_REGISTRATION_STRING_LENGTH]; UINT32 MajorVersion; UINT32 MinorVersion; UINT32 Flags; UINT32 MinInputBufferCount; UINT32 MaxInputBufferCount; UINT32 MinOutputBufferCount; UINT32 MaxOutputBufferCount; } XAPO_REGISTRATION_PROPERTIES; typedef struct XAPO20_REGISTRATION_PROPERTIES { CLSID clsid; WCHAR FriendlyName[XAPO_REGISTRATION_STRING_LENGTH]; WCHAR CopyrightInfo[XAPO_REGISTRATION_STRING_LENGTH]; UINT32 MajorVersion; UINT32 MinorVersion; UINT32 Flags; UINT32 MinInputBufferCount; UINT32 MaxInputBufferCount; UINT32 MinOutputBufferCount; UINT32 MaxOutputBufferCount; UINT32 InterfaceCount; IID InterfaceArray[1]; } XAPO20_REGISTRATION_PROPERTIES; typedef struct XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS { const WAVEFORMATEX *pFormat; UINT32 MaxFrameCount; } XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS; typedef enum XAPO_BUFFER_FLAGS { XAPO_BUFFER_SILENT, XAPO_BUFFER_VALID } XAPO_BUFFER_FLAGS; typedef struct XAPO_PROCESS_BUFFER_PARAMETERS { void *pBuffer; XAPO_BUFFER_FLAGS BufferFlags; UINT32 ValidFrameCount; } XAPO_PROCESS_BUFFER_PARAMETERS; /* XAudio2 2.8 version of IXAPO */ [ object, local, uuid(a410b984-9839-4819-a0be-2856ae6b3adb) ] interface IXAPO : IUnknown { HRESULT GetRegistrationProperties([out] XAPO_REGISTRATION_PROPERTIES **props); HRESULT IsInputFormatSupported(const WAVEFORMATEX *output_fmt, const WAVEFORMATEX *input_fmt, WAVEFORMATEX **supported_fmt); HRESULT IsOutputFormatSupported(const WAVEFORMATEX *input_fmt, const WAVEFORMATEX *output_fmt, WAVEFORMATEX **supported_fmt); HRESULT Initialize(const void *data, UINT32 data_len); void Reset(void); HRESULT LockForProcess(UINT32 in_params_count, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *in_params, UINT32 out_params_count, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *out_params); void UnlockForProcess(void); void Process(UINT32 in_params_count, const XAPO_PROCESS_BUFFER_PARAMETERS *in_params, UINT32 out_params_count, const XAPO_PROCESS_BUFFER_PARAMETERS *out_params, BOOL enabled); UINT32 CalcInputFrames(UINT32 output_frames); UINT32 CalcOutputFrames(UINT32 input_frames); } /* XAudio2 2.7 version of IXAPO is identical to 2.8 */ cpp_quote("DEFINE_GUID(IID_IXAPO27, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x00);") /* XAudio2 2.8 version of IXAPOParameters */ [ object, local, uuid(26d95c66-80f2-499a-ad54-5ae7f01c6d98) ] interface IXAPOParameters : IUnknown { void SetParameters(const void *params, UINT32 params_len); void GetParameters(void *params, UINT32 params_len); } /* XAudio2 2.7 version of IXAPOParameters is identical to 2.8 */ cpp_quote("DEFINE_GUID(IID_IXAPO27Parameters, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x01);") ================================================ FILE: wine/windows/xapofx.h ================================================ /* * Copyright (c) 2015 Andrew Eikum for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* CLSIDs used by CreateFX, but never registered */ #ifndef _XAPOFX_H #define _XAPOFX_H /* xapofx 1.0 through 1.5 */ DEFINE_GUID(CLSID_FXEQ27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x00); /* xaudio >= 2.8 */ DEFINE_GUID(CLSID_FXEQ, 0xf5e01117, 0xd6c4, 0x485a, 0xa3, 0xf5, 0x69, 0x51, 0x96, 0xf3, 0xdb, 0xfa); /* xapofx 1.0 through 1.5 */ DEFINE_GUID(CLSID_FXMasteringLimiter27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x01); /* xaudio >= 2.8 */ DEFINE_GUID(CLSID_FXMasteringLimiter, 0xc4137916, 0x2be1, 0x46fd, 0x85, 0x99, 0x44, 0x15, 0x36, 0xf4, 0x98, 0x56); /* xapofx 1.0 through 1.5 */ DEFINE_GUID(CLSID_FXReverb27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x02); /* xaudio >= 2.8 */ DEFINE_GUID(CLSID_FXReverb, 0x7d9aca56, 0xcb68, 0x4807, 0xb6, 0x32, 0xb1, 0x37, 0x35, 0x2e, 0x85, 0x96); /* xapofx 1.0 through 1.5 */ DEFINE_GUID(CLSID_FXEcho27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x03); /* xaudio >= 2.8 */ DEFINE_GUID(CLSID_FXEcho, 0x5039d740, 0xf736, 0x449a, 0x84, 0xd3, 0xa5, 0x62, 0x02, 0x55, 0x7b, 0x87); #endif ================================================ FILE: wine/windows/xaudio2.idl ================================================ /* * Copyright (c) 2015 Mark Harmstone * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "mmdeviceapi.idl"; import "audiosessiontypes.h"; cpp_quote("#include ") [ uuid(fac23f48-31f5-45a8-b49b-5225d61401aa) ] coclass XAudio20 { interface IUnknown; } [ uuid(e21a7345-eb21-468e-be50-804db97cf708) ] coclass XAudio21 { interface IUnknown; } [ uuid(b802058a-464a-42db-bc10-b650d6f2586a) ] coclass XAudio22 { interface IUnknown; } [ uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d) ] coclass XAudio23 { interface IUnknown; } [ uuid(03219e78-5bc3-44d1-b92e-f63d89cc6526) ] coclass XAudio24 { interface IUnknown; } [ uuid(4c9b6dde-6809-46e6-a278-9b6a97588670) ] coclass XAudio25 { interface IUnknown; } [ uuid(3eda9b49-2085-498b-9bb2-39a6778493de) ] coclass XAudio26 { interface IUnknown; } [ uuid(5a508685-a254-4fba-9b82-9a24b00306af) ] coclass XAudio27 { interface IUnknown; } [ uuid(db05ea35-0329-4d4b-a53a-6dead03d3852) ] coclass XAudio2Debug { interface IUnknown; } cpp_quote("#if 0") typedef struct WAVEFORMATEX { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; typedef struct { WAVEFORMATEX Format; union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; } Samples; DWORD dwChannelMask; GUID SubFormat; } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; cpp_quote("#else") cpp_quote("#include ") cpp_quote("#endif") interface IXAudio2Voice; typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER { Processor1 = 0x00000001, Processor2 = 0x00000002, Processor3 = 0x00000004, Processor4 = 0x00000008, Processor5 = 0x00000010, Processor6 = 0x00000020, Processor7 = 0x00000040, Processor8 = 0x00000080, Processor9 = 0x00000100, Processor10 = 0x00000200, Processor11 = 0x00000400, Processor12 = 0x00000800, Processor13 = 0x00001000, Processor14 = 0x00002000, Processor15 = 0x00004000, Processor16 = 0x00008000, Processor17 = 0x00010000, Processor18 = 0x00020000, Processor19 = 0x00040000, Processor20 = 0x00080000, Processor21 = 0x00100000, Processor22 = 0x00200000, Processor23 = 0x00400000, Processor24 = 0x00800000, Processor25 = 0x01000000, Processor26 = 0x02000000, Processor27 = 0x04000000, Processor28 = 0x08000000, Processor29 = 0x10000000, Processor30 = 0x20000000, Processor31 = 0x40000000, Processor32 = 0x80000000, XAUDIO2_ANY_PROCESSOR = 0xffffffff, XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR } XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER, XAUDIO2_PROCESSOR; typedef struct XAUDIO2_PERFORMANCE_DATA { UINT64 AudioCyclesSinceLastQuery; UINT64 TotalCyclesSinceLastQuery; UINT32 MinimumCyclesPerQuantum; UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; UINT32 GlitchesSinceEngineStarted; UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; UINT32 ActiveResamplerCount; UINT32 ActiveMatrixMixCount; UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO2_PERFORMANCE_DATA; typedef struct XAUDIO22_PERFORMANCE_DATA { UINT64 AudioCyclesSinceLastQuery; UINT64 TotalCyclesSinceLastQuery; UINT32 MinimumCyclesPerQuantum; UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; UINT32 GlitchesSinceEngineStarted; UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; UINT32 TotalSubmixVoiceCount; UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO22_PERFORMANCE_DATA; typedef struct XAUDIO20_PERFORMANCE_DATA { UINT64 AudioCyclesSinceLastQuery; UINT64 TotalCyclesSinceLastQuery; UINT32 MinimumCyclesPerQuantum; UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; UINT32 GlitchesSinceLastQuery; UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; UINT32 TotalSubmixVoiceCount; UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO20_PERFORMANCE_DATA; typedef enum XAUDIO2_DEVICE_ROLE { NotDefaultDevice = 0x0, DefaultConsoleDevice = 0x1, DefaultMultimediaDevice = 0x2, DefaultCommunicationsDevice = 0x4, DefaultGameDevice = 0x8, GlobalDefaultDevice = 0xf, InvalidDeviceRole = ~GlobalDefaultDevice } XAUDIO2_DEVICE_ROLE; typedef struct XAUDIO2_DEVICE_DETAILS { WCHAR DeviceID[256]; WCHAR DisplayName[256]; XAUDIO2_DEVICE_ROLE Role; WAVEFORMATEXTENSIBLE OutputFormat; } XAUDIO2_DEVICE_DETAILS; typedef struct XAUDIO27_VOICE_DETAILS { UINT32 CreationFlags; UINT32 InputChannels; UINT32 InputSampleRate; } XAUDIO27_VOICE_DETAILS; typedef struct XAUDIO2_VOICE_DETAILS { UINT32 CreationFlags; UINT32 ActiveFlags; UINT32 InputChannels; UINT32 InputSampleRate; } XAUDIO2_VOICE_DETAILS; typedef struct XAUDIO2_SEND_DESCRIPTOR { UINT32 Flags; IXAudio2Voice* pOutputVoice; } XAUDIO2_SEND_DESCRIPTOR; /* XAudio2 2.3's XAUDIO2_VOICE_SENDS struct */ typedef struct XAUDIO23_VOICE_SENDS { UINT32 OutputCount; IXAudio2Voice **pOutputVoices; } XAUDIO23_VOICE_SENDS; typedef struct XAUDIO2_VOICE_SENDS { UINT32 SendCount; XAUDIO2_SEND_DESCRIPTOR* pSends; } XAUDIO2_VOICE_SENDS; typedef struct XAUDIO2_EFFECT_DESCRIPTOR { IUnknown* pEffect; BOOL InitialState; UINT32 OutputChannels; } XAUDIO2_EFFECT_DESCRIPTOR; typedef struct XAUDIO2_EFFECT_CHAIN { UINT32 EffectCount; XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors; } XAUDIO2_EFFECT_CHAIN; const UINT32 XAUDIO2_MAX_BUFFER_BYTES = 0x80000000; const UINT32 XAUDIO2_MAX_QUEUED_BUFFERS = 64; const UINT32 XAUDIO2_MAX_BUFFERS_SYSTEM = 2; const UINT32 XAUDIO2_MAX_AUDIO_CHANNELS = 64; const UINT32 XAUDIO2_MIN_SAMPLE_RATE = 1000; const UINT32 XAUDIO2_MAX_SAMPLE_RATE = 200000; const float XAUDIO2_MAX_VOLUME_LEVEL = 16777216.0; const float XAUDIO2_MIN_FREQ_RATIO = (1/1024.0); const float XAUDIO2_MAX_FREQ_RATIO = 1024.0; const float XAUDIO2_DEFAULT_FREQ_RATIO = 2.0; const float XAUDIO2_MAX_FILTER_ONEOVERQ = 1.5; const float XAUDIO2_MAX_FILTER_FREQUENCY = 1.0; const UINT32 XAUDIO2_MAX_LOOP_COUNT = 254; const UINT32 XAUDIO20_MAX_LOOP_COUNT = 0x100000; /* xaudio 2.0 */ const UINT32 XAUDIO2_COMMIT_NOW = 0; const UINT32 XAUDIO2_COMMIT_ALL = 0; const UINT32 XAUDIO2_INVALID_OPSET = 0xffffffff; const UINT32 XAUDIO2_NO_LOOP_REGION = 0; const UINT32 XAUDIO2_LOOP_INFINITE = 255; const UINT32 XAUDIO20_LOOP_INFINITE = ((UINT)-1); /* xaudio 2.0 */ const UINT32 XAUDIO2_DEFAULT_CHANNELS = 0; const UINT32 XAUDIO2_DEFAULT_SAMPLERATE = 0; [ object, local ] interface IXAudio2EngineCallback { void OnProcessingPassStart(); void OnProcessingPassEnd(); void OnCriticalError([in] HRESULT Error); } typedef enum XAUDIO2_FILTER_TYPE { LowPassFilter, BandPassFilter, HighPassFilter, NotchFilter } XAUDIO2_FILTER_TYPE; typedef struct XAUDIO2_FILTER_PARAMETERS { XAUDIO2_FILTER_TYPE Type; float Frequency; float OneOverQ; } XAUDIO2_FILTER_PARAMETERS; /* XAudio 2.0's IXAudio2Voice */ /* XAudio2 2.0's IXAudio2Voice interface. Actually called * IXAudio2Voice in the Mar 2008 DX SDK */ [ object, local ] interface IXAudio20Voice { void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList); HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT EnableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT DisableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetEffectState( [in] UINT32 EffectIndex, [out] BOOL* pEnabled); HRESULT SetEffectParameters( [in] UINT32 EffectIndex, [in] const void* pParameters, [in] UINT32 ParametersByteSize, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetEffectParameters( [in] UINT32 EffectIndex, [out] void* pParameters, [in] UINT32 ParametersByteSize); HRESULT SetFilterParameters( [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetVolume([out] float* pVolume); HRESULT SetChannelVolumes( [in] UINT32 Channels, [in, size_is(Channels)] const float* pVolumes, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetChannelVolumes( [in] UINT32 Channels, [out, size_is(Channels)] float* pVolumes); HRESULT SetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); void DestroyVoice(); } /* XAudio 2.3's IXAudio2Voice */ /* XAudio2 2.3's IXAudio2Voice interface. Actually called * IXAudio2Voice in the Nov 2008 DX SDK */ [ object, local ] interface IXAudio23Voice { void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList); HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT EnableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT DisableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetEffectState( [in] UINT32 EffectIndex, [out] BOOL* pEnabled); HRESULT SetEffectParameters( [in] UINT32 EffectIndex, [in] const void* pParameters, [in] UINT32 ParametersByteSize, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetEffectParameters( [in] UINT32 EffectIndex, [out] void* pParameters, [in] UINT32 ParametersByteSize); HRESULT SetFilterParameters( [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetVolume([out] float* pVolume); HRESULT SetChannelVolumes( [in] UINT32 Channels, [in, size_is(Channels)] const float* pVolumes, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetChannelVolumes( [in] UINT32 Channels, [out, size_is(Channels)] float* pVolumes); HRESULT SetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); void DestroyVoice(); } /* XAudio 2.7's IXAudio2Voice */ /* XAudio2 2.7's IXAudio2Voice interface. Actually called * IXAudio2Voice in the Jun 2010 DX SDK */ [ object, local ] interface IXAudio27Voice { void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList); HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT EnableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT DisableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetEffectState( [in] UINT32 EffectIndex, [out] BOOL* pEnabled); HRESULT SetEffectParameters( [in] UINT32 EffectIndex, [in] const void* pParameters, [in] UINT32 ParametersByteSize, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetEffectParameters( [in] UINT32 EffectIndex, [out] void* pParameters, [in] UINT32 ParametersByteSize); HRESULT SetFilterParameters( [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetOutputFilterParameters( [in] IXAudio2Voice* pDestinationVoice, [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputFilterParameters( [in] IXAudio2Voice* pDestinationVoice, [out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetVolume([out] float* pVolume); HRESULT SetChannelVolumes( [in] UINT32 Channels, [in, size_is(Channels)] const float* pVolumes, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetChannelVolumes( [in] UINT32 Channels, [out, size_is(Channels)] float* pVolumes); HRESULT SetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); void DestroyVoice(); } [ object, local ] interface IXAudio2Voice { void GetVoiceDetails([out] XAUDIO2_VOICE_DETAILS* pVoiceDetails); HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList); HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT EnableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT DisableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetEffectState( [in] UINT32 EffectIndex, [out] BOOL* pEnabled); HRESULT SetEffectParameters( [in] UINT32 EffectIndex, [in] const void* pParameters, [in] UINT32 ParametersByteSize, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetEffectParameters( [in] UINT32 EffectIndex, [out] void* pParameters, [in] UINT32 ParametersByteSize); HRESULT SetFilterParameters( [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetOutputFilterParameters( [in] IXAudio2Voice* pDestinationVoice, [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputFilterParameters( [in] IXAudio2Voice* pDestinationVoice, [out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetVolume([out] float* pVolume); HRESULT SetChannelVolumes( [in] UINT32 Channels, [in, size_is(Channels)] const float* pVolumes, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetChannelVolumes( [in] UINT32 Channels, [out, size_is(Channels)] float* pVolumes); HRESULT SetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); void DestroyVoice(); } typedef struct XAUDIO2_BUFFER { UINT32 Flags; UINT32 AudioBytes; const BYTE* pAudioData; UINT32 PlayBegin; UINT32 PlayLength; UINT32 LoopBegin; UINT32 LoopLength; UINT32 LoopCount; void* pContext; } XAUDIO2_BUFFER; typedef struct XAUDIO2_BUFFER_WMA { const UINT32* pDecodedPacketCumulativeBytes; UINT32 PacketCount; } XAUDIO2_BUFFER_WMA; typedef struct XAUDIO2_VOICE_STATE { void* pCurrentBufferContext; UINT32 BuffersQueued; UINT64 SamplesPlayed; } XAUDIO2_VOICE_STATE; [ local ] /* XAudio2 2.0's IXAudio2SourceVoice interface. Actually called * IXAudio2SourceVoice in the Mar 2008 DX SDK */ interface IXAudio20SourceVoice : IXAudio20Voice { HRESULT Start( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT Stop( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT SubmitSourceBuffer( [in] const XAUDIO2_BUFFER* pBuffer, [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); HRESULT FlushSourceBuffers(); HRESULT Discontinuity(); HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); HRESULT SetFrequencyRatio( [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFrequencyRatio([out] float* pRatio); } [ local ] /* XAudio2 2.3's IXAudio2SourceVoice interface. Actually called * IXAudio2SourceVoice in the Nov 2008 DX SDK */ interface IXAudio23SourceVoice : IXAudio23Voice { HRESULT Start( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT Stop( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT SubmitSourceBuffer( [in] const XAUDIO2_BUFFER* pBuffer, [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); HRESULT FlushSourceBuffers(); HRESULT Discontinuity(); HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); HRESULT SetFrequencyRatio( [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFrequencyRatio([out] float* pRatio); } [ local ] /* XAudio2 2.7's IXAudio2SourceVoice interface. Actually called * IXAudio2SourceVoice in the Jun 2010 DX SDK */ interface IXAudio27SourceVoice : IXAudio27Voice { HRESULT Start( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT Stop( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT SubmitSourceBuffer( [in] const XAUDIO2_BUFFER* pBuffer, [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); HRESULT FlushSourceBuffers(); HRESULT Discontinuity(); HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); HRESULT SetFrequencyRatio( [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFrequencyRatio([out] float* pRatio); HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); } [ local ] /* XAudio2 2.8's IXAudio2SourceVoice interface. */ interface IXAudio2SourceVoice : IXAudio2Voice { HRESULT Start( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT Stop( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT SubmitSourceBuffer( [in] const XAUDIO2_BUFFER* pBuffer, [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); HRESULT FlushSourceBuffers(); HRESULT Discontinuity(); HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState, [in, defaultvalue(0)] UINT32 Flags); HRESULT SetFrequencyRatio( [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFrequencyRatio([out] float* pRatio); HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); } [ local ] /* XAudio2 2.0's IXAudio2SubmixVoice interface. Actually called * IXAudio2SubmixVoice in the Mar 2008 DX SDK */ interface IXAudio20SubmixVoice : IXAudio20Voice { } [ local ] /* XAudio2 2.3's IXAudio2SubmixVoice interface. Actually called * IXAudio2SubmixVoice in the Nov 2008 DX SDK */ interface IXAudio23SubmixVoice : IXAudio23Voice { } [ local ] /* XAudio2 2.7's IXAudio2SubmixVoice interface. Actually called * IXAudio2SubmixVoice in the Jun 2010 DX SDK */ interface IXAudio27SubmixVoice : IXAudio27Voice { } [ local ] interface IXAudio2SubmixVoice : IXAudio2Voice { } [ local ] /* XAudio2 2.0's IXAudio2MasteringVoice interface. Actually called * IXAudio2MasteringVoice in the Mar 2008 DX SDK */ interface IXAudio20MasteringVoice : IXAudio20Voice { } [ local ] /* XAudio2 2.3's IXAudio2MasteringVoice interface. Actually called * IXAudio2MasteringVoice in the Nov 2008 DX SDK */ interface IXAudio23MasteringVoice : IXAudio23Voice { } [ local ] /* XAudio2 2.7's IXAudio2MasteringVoice interface. Actually called * IXAudio2MasteringVoice in the Jun 2010 DX SDK */ interface IXAudio27MasteringVoice : IXAudio27Voice { } [ local ] interface IXAudio2MasteringVoice : IXAudio2Voice { /* not present in XAudio2 2.7 */ void GetChannelMask([out] DWORD *pChannelMask); } [ object, local ] interface IXAudio20VoiceCallback { void OnVoiceProcessingPassStart(); void OnVoiceProcessingPassEnd(); void OnStreamEnd(); void OnBufferStart([in] void* pBufferContext); void OnBufferEnd([in] void* pBufferContext); void OnLoopEnd([in] void* pBufferContext); void OnVoiceError( [in] void* pBuffercontext, [in] HRESULT Error); } [ object, local ] interface IXAudio2VoiceCallback { void OnVoiceProcessingPassStart([in] UINT32 BytesRequired); void OnVoiceProcessingPassEnd(); void OnStreamEnd(); void OnBufferStart([in] void* pBufferContext); void OnBufferEnd([in] void* pBufferContext); void OnLoopEnd([in] void* pBufferContext); void OnVoiceError( [in] void* pBuffercontext, [in] HRESULT Error); } typedef struct XAUDIO2_DEBUG_CONFIGURATION { UINT32 TraceMask; UINT32 BreakMask; BOOL LogThreadID; BOOL LogFileline; BOOL LogFunctionName; BOOL LogTiming; } XAUDIO2_DEBUG_CONFIGURATION; [ object, uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ ] /* XAudio2 2.0's IXAudio2 interface. Actually called IXAudio2 in the Mar 2008 * DX SDK */ interface IXAudio20 : IUnknown { HRESULT GetDeviceCount([out] UINT32* pCount); HRESULT GetDeviceDetails( [in] UINT32 Index, [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); HRESULT Initialize( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 DeviceIndex, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO20_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } [ object, uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ ] /* XAudio2 2.2's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010 * DX SDK */ interface IXAudio22 : IUnknown { HRESULT GetDeviceCount([out] UINT32* pCount); HRESULT GetDeviceDetails( [in] UINT32 Index, [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); HRESULT Initialize( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 DeviceIndex, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO22_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } [ object, uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), ] /* XAudio2 2.7's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010 * DX SDK */ interface IXAudio27 : IUnknown { HRESULT GetDeviceCount([out] UINT32* pCount); HRESULT GetDeviceDetails( [in] UINT32 Index, [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); HRESULT Initialize( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 DeviceIndex, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } /* XAudio2 2.8's IXAudio2 is identical to 2.9's */ cpp_quote("DEFINE_GUID(IID_IXAudio28, 0x60d8dac8, 0x5aa1, 0x4e8e, 0xb5, 0x97, 0x2f, 0x5e, 0x28, 0x83, 0xd4, 0x84);") [ object, uuid(2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d) ] /* XAudio2 2.9's IXAudio2 interface. */ interface IXAudio2 : IUnknown { HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(NULL)] LPCWSTR DeviceId, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain, [in, defaultvalue(AudioCategory_GameEffects)] AUDIO_STREAM_CATEGORY StreamCategory); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } const UINT32 XAUDIO2_DEBUG_ENGINE = 1; const UINT32 XAUDIO2_VOICE_NOPITCH = 2; const UINT32 XAUDIO2_VOICE_NOSRC = 4; const UINT32 XAUDIO2_VOICE_USEFILTER = 8; const UINT32 XAUDIO2_VOICE_MUSIC = 16; const UINT32 XAUDIO2_PLAY_TAILS = 32; const UINT32 XAUDIO2_END_OF_STREAM = 64; const UINT32 XAUDIO2_SEND_USEFILTER = 128; const UINT32 XAUDIO2_VOICE_NOSAMPLESPLAYED = 256; const XAUDIO2_FILTER_TYPE XAUDIO2_DEFAULT_FILTER_TYPE = LowPassFilter; const float XAUDIO2_DEFAULT_FILTER_FREQUENCY = XAUDIO2_MAX_FILTER_FREQUENCY; const float XAUDIO2_DEFAULT_FILTER_ONEOVERQ = 1.0; const UINT32 XAUDIO2_QUANTUM_NUMERATOR = 1; const UINT32 XAUDIO2_QUANTUM_DENOMINATOR = 100; const float XAUDIO2_QUANTUM_MS = (1000.0 * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR); const HRESULT XAUDIO2_E_INVALID_CALL = 0x88960001; const HRESULT XAUDIO2_E_XMA_DECODER_ERROR = 0x88960002; const HRESULT XAUDIO2_E_XAPO_CREATION_FAILED = 0x88960003; const HRESULT XAUDIO2_E_DEVICE_INVALIDATED = 0x88960004; /* xaudio 2.0 error codes */ const HRESULT XAUDIO20_E_XMA_DECODER_ERROR = 0x88960001; const HRESULT XAUDIO20_E_XAPO_CREATION_FAILED = 0x88960002; const HRESULT XAUDIO20_E_DEVICE_INVALIDATED = 0x88960003; cpp_quote("#ifdef XAUDIO2_HELPER_FUNCTIONS") cpp_quote("#define _USE_MATH_DEFINES") cpp_quote("#include ") cpp_quote("inline static float XAudio2DecibelsToAmplitudeRatio(float decibels) { return powf(10.0f, decibels/20.0f); }") cpp_quote("inline static float XAudio2AmplitudeRatioToDecibels(float volume) { if (volume == 0) { return -3.402823466e+38f; } return 20.0f * log10f(volume); }") cpp_quote("inline static float XAudio2SemitonesToFrequencyRatio(float semitones) { return powf(2.0f, semitones/12.0f); }") cpp_quote("inline static float XAudio2FrequencyRatioToSemitones(float freqratio) { return 39.86313713864835f * log10f(freqratio); }") cpp_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); }") cpp_quote("inline static float XAudio2RadiansToCutoffFrequency(float radians, float samplerate) { return samplerate * asinf(radians/2.0f) / (float)M_PI; }") cpp_quote("#endif") cpp_quote("HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);") cpp_quote("#include ") ================================================ FILE: wine/windows/xaudio2fx.idl ================================================ /* * Copyright (c) 2015 Andrew Eikum * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; [ uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2) ] coclass AudioVolumeMeter20 { interface IUnknown; } [ uuid(c1e3f122-a2ea-442c-854f-20d98f8357a1) ] coclass AudioVolumeMeter21 { interface IUnknown; } [ uuid(f5ca7b34-8055-42c0-b836-216129eb7e30) ] coclass AudioVolumeMeter22 { interface IUnknown; } [ uuid(e180344b-ac83-4483-959e-18a5c56a5e19) ] coclass AudioVolumeMeter23 { interface IUnknown; } [ uuid(c7338b95-52b8-4542-aa79-42eb016c8c1c) ] coclass AudioVolumeMeter24 { interface IUnknown; } [ uuid(2139e6da-c341-4774-9ac3-b4e026347f64) ] coclass AudioVolumeMeter25 { interface IUnknown; } [ uuid(e48c5a3f-93ef-43bb-a092-2c7ceb946f27) ] coclass AudioVolumeMeter26 { interface IUnknown; } [ uuid(cac1105f-619b-4d04-831a-44e1cbf12d57) ] coclass AudioVolumeMeter27 { interface IUnknown; } [ uuid(6f6ea3a9-2cf5-41cf-91c1-2170b1540063) ] coclass AudioReverb20 { interface IUnknown; } [ uuid(f4769300-b949-4df9-b333-00d33932e9a6) ] coclass AudioReverb21 { interface IUnknown; } [ uuid(629cf0de-3ecc-41e7-9926-f7e43eebec51) ] coclass AudioReverb22 { interface IUnknown; } [ uuid(9cab402c-1d37-44b4-886d-fa4f36170a4c) ] coclass AudioReverb23 { interface IUnknown; } [ uuid(8bb7778b-645b-4475-9a73-1de3170bd3af) ] coclass AudioReverb24 { interface IUnknown; } [ uuid(d06df0d0-8518-441e-822f-5451d5c595b8) ] coclass AudioReverb25 { interface IUnknown; } [ uuid(cecec95a-d894-491a-bee3-5e106fb59f2d) ] coclass AudioReverb26 { interface IUnknown; } [ uuid(6a93130e-1d53-41d1-a9cf-e758800bb179) ] coclass AudioReverb27 { interface IUnknown; } ================================================ FILE: wine/windows/xcmc.h ================================================ /* * Copyright (C) 2004 Chris Morgan * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _XCMC_H #define _XCMC_H #ifdef __cplusplus extern "C" { #endif typedef char CMC_sint8; typedef short CMC_sint16; typedef LONG CMC_sint32; typedef unsigned short int CMC_uint16; typedef ULONG CMC_uint32; typedef void* CMC_buffer; typedef char* CMC_string; typedef CMC_uint16 CMC_boolean; typedef CMC_sint32 CMC_enum; typedef CMC_uint32 CMC_return_code; typedef CMC_uint32 CMC_flags; typedef CMC_string CMC_object_identifier; typedef CMC_uint32 CMC_session_id; typedef CMC_uint32 CMC_ui_id; #define CMC_FALSE ((CMC_boolean)0) #define CMC_TRUE ((CMC_boolean)1) #define CMC_SUCCESS ((CMC_return_code) 0) #define CMC_E_AMBIGUOUS_RECIPIENT ((CMC_return_code) 1) #define CMC_E_ATTACHMENT_NOT_FOUND ((CMC_return_code) 2) #define CMC_E_ATTACHMENT_OPEN_FAILURE ((CMC_return_code) 3) #define CMC_E_ATTACHMENT_READ_FAILURE ((CMC_return_code) 4) #define CMC_E_ATTACHMENT_WRITE_FAILURE ((CMC_return_code) 5) #define CMC_E_COUNTED_STRING_UNSUPPORTED ((CMC_return_code) 6) #define CMC_E_DISK_FULL ((CMC_return_code) 7) #define CMC_E_FAILURE ((CMC_return_code) 8) #define CMC_E_INSUFFICIENT_MEMORY ((CMC_return_code) 9) #define CMC_E_INVALID_CONFIGURATION ((CMC_return_code) 10) #define CMC_E_INVALID_ENUM ((CMC_return_code) 11) #define CMC_E_INVALID_FLAG ((CMC_return_code) 12) #define CMC_E_INVALID_MEMORY ((CMC_return_code) 13) #define CMC_E_INVALID_MESSAGE_PARAMETER ((CMC_return_code) 14) #define CMC_E_INVALID_MESSAGE_REFERENCE ((CMC_return_code) 15) #define CMC_E_INVALID_PARAMETER ((CMC_return_code) 16) #define CMC_E_INVALID_SESSION_ID ((CMC_return_code) 17) #define CMC_E_INVALID_UI_ID ((CMC_return_code) 18) #define CMC_E_LOGON_FAILURE ((CMC_return_code) 19) #define CMC_E_MESSAGE_IN_USE ((CMC_return_code) 20) #define CMC_E_NOT_SUPPORTED ((CMC_return_code) 21) #define CMC_E_PASSWORD_REQUIRED ((CMC_return_code) 22) #define CMC_E_RECIPIENT_NOT_FOUND ((CMC_return_code) 23) #define CMC_E_SERVICE_UNAVAILABLE ((CMC_return_code) 24) #define CMC_E_TEXT_TOO_LARGE ((CMC_return_code) 25) #define CMC_E_TOO_MANY_FILES ((CMC_return_code) 26) #define CMC_E_TOO_MANY_RECIPIENTS ((CMC_return_code) 27) #define CMC_E_UNABLE_TO_NOT_MARK_AS_READ ((CMC_return_code) 28) #define CMC_E_UNRECOGNIZED_MESSAGE_TYPE ((CMC_return_code) 29) #define CMC_E_UNSUPPORTED_ACTION ((CMC_return_code) 30) #define CMC_E_UNSUPPORTED_CHARACTER_SET ((CMC_return_code) 31) #define CMC_E_UNSUPPORTED_DATA_EXT ((CMC_return_code) 32) #define CMC_E_UNSUPPORTED_FLAG ((CMC_return_code) 33) #define CMC_E_UNSUPPORTED_FUNCTION_EXT ((CMC_return_code) 34) #define CMC_E_UNSUPPORTED_VERSION ((CMC_return_code) 35) #define CMC_E_USER_CANCEL ((CMC_return_code) 36) #define CMC_E_USER_NOT_LOGGED_ON ((CMC_return_code) 37) #define CMC_ERROR_DISPLAYED ((CMC_return_code) 0x00008000) #define CMC_ERROR_RSV_MASK ((CMC_return_code) 0x0000FFFF) #define CMC_ERROR_IMPL_MASK ((CMC_return_code) 0xFFFF0000) typedef struct { CMC_uint32 length; char string[1]; } CMC_counted_string; typedef CMC_counted_string CMC_message_reference; typedef struct { CMC_sint8 second; CMC_sint8 minute; CMC_sint8 hour; CMC_sint8 day; CMC_sint8 month; CMC_sint8 year; CMC_sint8 isdst; CMC_sint8 unused1; CMC_sint16 tmzone; CMC_sint16 unused2; } CMC_time; #define CMC_NO_TIMEZONE ((CMC_sint16) 0x8000) typedef struct { CMC_uint32 item_code; CMC_uint32 item_data; CMC_buffer item_reference; CMC_flags extension_flags; } CMC_extension; #define CMC_EXT_REQUIRED ((CMC_flags) 0x00010000) #define CMC_EXT_OUTPUT ((CMC_flags) 0x00020000) #define CMC_EXT_LAST_ELEMENT ((CMC_flags) 0x80000000) #define CMC_EXT_RSV_FLAG_MASK ((CMC_flags) 0xFFFF0000) #define CMC_EXT_ITEM_FLAG_MASK ((CMC_flags) 0x0000FFFF) typedef struct CMC_attachment_s { CMC_string attach_title; CMC_object_identifier attach_type; CMC_string attach_filename; CMC_flags attach_flags; CMC_extension *attach_extensions; } CMC_attachment; #define CMC_ATT_APP_OWNS_FILE ((CMC_flags) 1) #define CMC_ATT_LAST_ELEMENT ((CMC_flags) 0x80000000) #define CMC_ATT_OID_BINARY "? ? ? ? ? ?" #define CMC_ATT_OID_TEXT "? ? ? ? ? ?" typedef struct { CMC_string name; CMC_enum name_type; CMC_string address; CMC_enum role; CMC_flags recip_flags; CMC_extension *recip_extensions; } CMC_recipient; #define CMC_TYPE_UNKNOWN ((CMC_enum) 0) #define CMC_TYPE_INDIVIDUAL ((CMC_enum) 1) #define CMC_TYPE_GROUP ((CMC_enum) 2) #define CMC_ROLE_TO ((CMC_enum) 0) #define CMC_ROLE_CC ((CMC_enum) 1) #define CMC_ROLE_BCC ((CMC_enum) 2) #define CMC_ROLE_ORIGINATOR ((CMC_enum) 3) #define CMC_ROLE_AUTHORIZING_USER ((CMC_enum) 4) #define CMC_RECIP_IGNORE ((CMC_flags) 1) #define CMC_RECIP_LIST_TRUNCATED ((CMC_flags) 2) #define CMC_RECIP_LAST_ELEMENT ((CMC_flags) 0x80000000) typedef struct { CMC_message_reference *message_reference; CMC_string message_type; CMC_string subject; CMC_time time_sent; CMC_string text_note; CMC_recipient *recipients; CMC_attachment *attachments; CMC_flags message_flags; CMC_extension *message_extensions; } CMC_message; #define CMC_MSG_READ ((CMC_flags) 1) #define CMC_MSG_TEXT_NOTE_AS_FILE ((CMC_flags) 2) #define CMC_MSG_UNSENT ((CMC_flags) 4) #define CMC_MSG_LAST_ELEMENT ((CMC_flags) 0x80000000) typedef struct { CMC_message_reference *message_reference; CMC_string message_type; CMC_string subject; CMC_time time_sent; CMC_uint32 byte_length; CMC_recipient *originator; CMC_flags summary_flags; CMC_extension *message_summary_extensions; } CMC_message_summary; #define CMC_SUM_READ ((CMC_flags) 1) #define CMC_SUM_UNSENT ((CMC_flags) 2) #define CMC_SUM_LAST_ELEMENT ((CMC_flags) 0x80000000) #define CMC_ERROR_UI_ALLOWED ((CMC_flags) 0x01000000) #define CMC_LOGON_UI_ALLOWED ((CMC_flags) 0x02000000) #define CMC_COUNTED_STRING_TYPE ((CMC_flags) 0x04000000) CMC_return_code WINAPI cmc_send( CMC_session_id session, CMC_message *message, CMC_flags send_flags, CMC_ui_id ui_id, CMC_extension *send_extensions ); #define CMC_SEND_UI_REQUESTED ((CMC_flags) 1) CMC_return_code WINAPI cmc_send_documents( CMC_string recipient_addresses, CMC_string subject, CMC_string text_note, CMC_flags send_doc_flags, CMC_string file_paths, CMC_string file_names, CMC_string delimiter, CMC_ui_id ui_id ); #define CMC_FIRST_ATTACH_AS_TEXT_NOTE ((CMC_flags) 2) CMC_return_code WINAPI cmc_act_on( CMC_session_id session, CMC_message_reference *message_reference, CMC_enum operation, CMC_flags act_on_flags, CMC_ui_id ui_id, CMC_extension *act_on_extensions ); #define CMC_ACT_ON_EXTENDED ((CMC_enum) 0) #define CMC_ACT_ON_DELETE ((CMC_enum) 1) CMC_return_code WINAPI cmc_list( CMC_session_id session, CMC_string message_type, CMC_flags list_flags, CMC_message_reference *seed, CMC_uint32 *count, CMC_ui_id ui_id, CMC_message_summary **result, CMC_extension *list_extensions ); #define CMC_LIST_UNREAD_ONLY ((CMC_flags) 1) #define CMC_LIST_MSG_REFS_ONLY ((CMC_flags) 2) #define CMC_LIST_COUNT_ONLY ((CMC_flags) 4) #define CMC_LENGTH_UNKNOWN 0xFFFFFFFF CMC_return_code WINAPI cmc_read( CMC_session_id session, CMC_message_reference *message_reference, CMC_flags read_flags, CMC_message **message, CMC_ui_id ui_id, CMC_extension *read_extensions ); #define CMC_DO_NOT_MARK_AS_READ ((CMC_flags) 1) #define CMC_MSG_AND_ATT_HDRS_ONLY ((CMC_flags) 2) #define CMC_READ_FIRST_UNREAD_MESSAGE ((CMC_flags) 4) CMC_return_code WINAPI cmc_look_up( CMC_session_id session, CMC_recipient *recipient_in, CMC_flags look_up_flags, CMC_ui_id ui_id, CMC_uint32 *count, CMC_recipient **recipient_out, CMC_extension *look_up_extensions ); #define CMC_LOOKUP_RESOLVE_PREFIX_SEARCH ((CMC_flags) 1) #define CMC_LOOKUP_RESOLVE_IDENTITY ((CMC_flags) 2) #define CMC_LOOKUP_RESOLVE_UI ((CMC_flags) 4) #define CMC_LOOKUP_DETAILS_UI ((CMC_flags) 8) #define CMC_LOOKUP_ADDRESSING_UI ((CMC_flags) 16) CMC_return_code WINAPI cmc_free( CMC_buffer memory ); CMC_return_code WINAPI cmc_logoff( CMC_session_id session, CMC_ui_id ui_id, CMC_flags logoff_flags, CMC_extension *logoff_extensions ); CMC_return_code WINAPI cmc_logon( CMC_string service, CMC_string user, CMC_string password, CMC_object_identifier character_set, CMC_ui_id ui_id, CMC_uint16 caller_cmc_version, CMC_flags logon_flags, CMC_session_id *session, CMC_extension *logon_extensions ); #define CMC_VERSION ((CMC_uint16) 100) CMC_return_code WINAPI cmc_query_configuration( CMC_session_id session, CMC_enum item, CMC_buffer reference, CMC_extension *config_extensions ); #define CMC_CONFIG_CHARACTER_SET ((CMC_enum) 1) #define CMC_CONFIG_LINE_TERM ((CMC_enum) 2) #define CMC_CONFIG_DEFAULT_SERVICE ((CMC_enum) 3) #define CMC_CONFIG_DEFAULT_USER ((CMC_enum) 4) #define CMC_CONFIG_REQ_PASSWORD ((CMC_enum) 5) #define CMC_CONFIG_REQ_SERVICE ((CMC_enum) 6) #define CMC_CONFIG_REQ_USER ((CMC_enum) 7) #define CMC_CONFIG_UI_AVAIL ((CMC_enum) 8) #define CMC_CONFIG_SUP_NOMKMSGREAD ((CMC_enum) 9) #define CMC_CONFIG_SUP_COUNTED_STR ((CMC_enum) 10) #define CMC_CONFIG_VER_IMPLEM ((CMC_enum) 11) #define CMC_CONFIG_VER_SPEC ((CMC_enum) 12) #define CMC_LINE_TERM_CRLF ((CMC_enum) 0) #define CMC_LINE_TERM_CR ((CMC_enum) 1) #define CMC_LINE_TERM_LF ((CMC_enum) 2) #define CMC_REQUIRED_NO ((CMC_enum) 0) #define CMC_REQUIRED_YES ((CMC_enum) 1) #define CMC_REQUIRED_OPT ((CMC_enum) 2) #define CMC_CHAR_CP437 "1 2 840 113556 3 2 437" #define CMC_CHAR_CP850 "1 2 840 113556 3 2 85" #define CMC_CHAR_CP1252 "1 2 840 113556 3 2 1252" #define CMC_CHAR_ISTRING "1 2 840 113556 3 2 0" #define CMC_CHAR_UNICODE "1 2 840 113556 3 2 1" #ifdef __cplusplus } #endif #endif /* #ifndef _XCMC_H */ ================================================ FILE: wine/windows/xinput.h ================================================ /* * The Wine project - Xinput Joystick Library * Copyright 2008 Andrew Fenn * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_XINPUT_H #define __WINE_XINPUT_H #include /* * Bitmasks for the joysticks buttons, determines what has * been pressed on the joystick, these need to be mapped * to whatever device you're using instead of an xbox 360 * joystick */ #define XINPUT_GAMEPAD_DPAD_UP 0x0001 #define XINPUT_GAMEPAD_DPAD_DOWN 0x0002 #define XINPUT_GAMEPAD_DPAD_LEFT 0x0004 #define XINPUT_GAMEPAD_DPAD_RIGHT 0x0008 #define XINPUT_GAMEPAD_START 0x0010 #define XINPUT_GAMEPAD_BACK 0x0020 #define XINPUT_GAMEPAD_LEFT_THUMB 0x0040 #define XINPUT_GAMEPAD_RIGHT_THUMB 0x0080 #define XINPUT_GAMEPAD_LEFT_SHOULDER 0x0100 #define XINPUT_GAMEPAD_RIGHT_SHOULDER 0x0200 #define XINPUT_GAMEPAD_A 0x1000 #define XINPUT_GAMEPAD_B 0x2000 #define XINPUT_GAMEPAD_X 0x4000 #define XINPUT_GAMEPAD_Y 0x8000 /* * Defines the flags used to determine if the user is pushing * down on a button, not holding a button, etc */ #define XINPUT_KEYSTROKE_KEYDOWN 0x0001 #define XINPUT_KEYSTROKE_KEYUP 0x0002 #define XINPUT_KEYSTROKE_REPEAT 0x0004 /* * Defines the codes which are returned by XInputGetKeystroke */ #define VK_PAD_A 0x5800 #define VK_PAD_B 0x5801 #define VK_PAD_X 0x5802 #define VK_PAD_Y 0x5803 #define VK_PAD_RSHOULDER 0x5804 #define VK_PAD_LSHOULDER 0x5805 #define VK_PAD_LTRIGGER 0x5806 #define VK_PAD_RTRIGGER 0x5807 #define VK_PAD_DPAD_UP 0x5810 #define VK_PAD_DPAD_DOWN 0x5811 #define VK_PAD_DPAD_LEFT 0x5812 #define VK_PAD_DPAD_RIGHT 0x5813 #define VK_PAD_START 0x5814 #define VK_PAD_BACK 0x5815 #define VK_PAD_LTHUMB_PRESS 0x5816 #define VK_PAD_RTHUMB_PRESS 0x5817 #define VK_PAD_LTHUMB_UP 0x5820 #define VK_PAD_LTHUMB_DOWN 0x5821 #define VK_PAD_LTHUMB_RIGHT 0x5822 #define VK_PAD_LTHUMB_LEFT 0x5823 #define VK_PAD_LTHUMB_UPLEFT 0x5824 #define VK_PAD_LTHUMB_UPRIGHT 0x5825 #define VK_PAD_LTHUMB_DOWNRIGHT 0x5826 #define VK_PAD_LTHUMB_DOWNLEFT 0x5827 #define VK_PAD_RTHUMB_UP 0x5830 #define VK_PAD_RTHUMB_DOWN 0x5831 #define VK_PAD_RTHUMB_RIGHT 0x5832 #define VK_PAD_RTHUMB_LEFT 0x5833 #define VK_PAD_RTHUMB_UPLEFT 0x5834 #define VK_PAD_RTHUMB_UPRIGHT 0x5835 #define VK_PAD_RTHUMB_DOWNRIGHT 0x5836 #define VK_PAD_RTHUMB_DOWNLEFT 0x5837 /* * Deadzones are for analogue joystick controls on the joypad * which determine when input should be assumed to be in the * middle of the pad. This is a threshold to stop a joypad * controlling the game when the player isn't touching the * controls. */ #define XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE 7849 #define XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE 8689 #define XINPUT_GAMEPAD_TRIGGER_THRESHOLD 30 /* * Defines what type of abilities the type of joystick has * DEVTYPE_GAMEPAD is available for all joysticks, however * there may be more specific identifiers for other joysticks * which are being used. */ #define XINPUT_DEVTYPE_GAMEPAD 0x01 #define XINPUT_DEVSUBTYPE_GAMEPAD 0x01 #define XINPUT_DEVSUBTYPE_WHEEL 0x02 #define XINPUT_DEVSUBTYPE_ARCADE_STICK 0x03 #define XINPUT_DEVSUBTYPE_FLIGHT_SICK 0x04 #define XINPUT_DEVSUBTYPE_DANCE_PAD 0x05 #define XINPUT_DEVSUBTYPE_GUITAR 0x06 #define XINPUT_DEVSUBTYPE_DRUM_KIT 0x08 /* * These are used with the XInputGetCapabilities function to * determine the abilities to the joystick which has been * plugged in. */ #define XINPUT_CAPS_VOICE_SUPPORTED 0x0004 #define XINPUT_FLAG_GAMEPAD 0x00000001 /* * Defines the status of the battery if one is used in the * attached joystick. The first two define if the joystick * supports a battery. Disconnected means that the joystick * isn't connected. Wired shows that the joystick is a wired * joystick. */ #define BATTERY_DEVTYPE_GAMEPAD 0x00 #define BATTERY_DEVTYPE_HEADSET 0x01 #define BATTERY_TYPE_DISCONNECTED 0x00 #define BATTERY_TYPE_WIRED 0x01 #define BATTERY_TYPE_ALKALINE 0x02 #define BATTERY_TYPE_NIMH 0x03 #define BATTERY_TYPE_UNKNOWN 0xFF #define BATTERY_LEVEL_EMPTY 0x00 #define BATTERY_LEVEL_LOW 0x01 #define BATTERY_LEVEL_MEDIUM 0x02 #define BATTERY_LEVEL_FULL 0x03 /* * How many joysticks can be used with this library. Games that * use the xinput library will not go over this number. */ #define XUSER_MAX_COUNT 4 #define XUSER_INDEX_ANY 0x000000FF #define XINPUT_CAPS_FFB_SUPPORTED 0x0001 /* * Defines the structure of an xbox 360 joystick. */ typedef struct _XINPUT_GAMEPAD { WORD wButtons; BYTE bLeftTrigger; BYTE bRightTrigger; SHORT sThumbLX; SHORT sThumbLY; SHORT sThumbRX; SHORT sThumbRY; } XINPUT_GAMEPAD, *PXINPUT_GAMEPAD; typedef struct _XINPUT_STATE { DWORD dwPacketNumber; XINPUT_GAMEPAD Gamepad; } XINPUT_STATE, *PXINPUT_STATE; /* * Defines the structure of how much vibration is set on both the * right and left motors in a joystick. If you're not using a 360 * joystick you will have to map these to your device. */ typedef struct _XINPUT_VIBRATION { WORD wLeftMotorSpeed; WORD wRightMotorSpeed; } XINPUT_VIBRATION, *PXINPUT_VIBRATION; /* * Defines the structure for what kind of abilities the joystick has * such abilities are things such as if the joystick has the ability * to send and receive audio, if the joystick is in fact a driving * wheel or perhaps if the joystick is some kind of dance pad or * guitar. */ typedef struct _XINPUT_CAPABILITIES { BYTE Type; BYTE SubType; WORD Flags; XINPUT_GAMEPAD Gamepad; XINPUT_VIBRATION Vibration; } XINPUT_CAPABILITIES, *PXINPUT_CAPABILITIES; /* * Defines the structure for a joystick input event which is * retrieved using the function XInputGetKeystroke */ typedef struct _XINPUT_KEYSTROKE { WORD VirtualKey; WCHAR Unicode; WORD Flags; BYTE UserIndex; BYTE HidCode; } XINPUT_KEYSTROKE, *PXINPUT_KEYSTROKE; typedef struct _XINPUT_BATTERY_INFORMATION { BYTE BatteryType; BYTE BatteryLevel; } XINPUT_BATTERY_INFORMATION, *PXINPUT_BATTERY_INFORMATION; #ifdef __cplusplus extern "C" { #endif void WINAPI XInputEnable(BOOL); DWORD WINAPI XInputSetState(DWORD, XINPUT_VIBRATION*); DWORD WINAPI XInputGetState(DWORD, XINPUT_STATE*); DWORD WINAPI XInputGetKeystroke(DWORD, DWORD, PXINPUT_KEYSTROKE); DWORD WINAPI XInputGetCapabilities(DWORD, DWORD, XINPUT_CAPABILITIES*); DWORD WINAPI XInputGetDSoundAudioDeviceGuids(DWORD, GUID*, GUID*); DWORD WINAPI XInputGetBatteryInformation(DWORD, BYTE, XINPUT_BATTERY_INFORMATION*); DWORD WINAPI XInputGetStateEx(DWORD, XINPUT_STATE*); #ifdef __cplusplus } #endif #endif /* __WINE_XINPUT_H */ ================================================ FILE: wine/windows/xmldom.h ================================================ /* * Copyright 2010 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* xmldom.idl is included by msxml.idl so it doesn't need a stand-alone header */ #include ================================================ FILE: wine/windows/xmldom.idl ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif #include #include #if !defined(progid) && !defined(__WIDL__) #define threading(model) #define progid(str) #define vi_progid(str) #endif interface IXMLDOMImplementation; interface IXMLDOMNode; interface IXMLDOMDocumentFragment; interface IXMLDOMDocument; interface IXMLDOMNodeList; interface IXMLDOMNamedNodeMap; interface IXMLDOMCharacterData; interface IXMLDOMAttribute; interface IXMLDOMElement; interface IXMLDOMText; interface IXMLDOMComment; interface IXMLDOMProcessingInstruction; interface IXMLDOMCDATASection; interface IXMLDOMDocumentType; interface IXMLDOMNotation; interface IXMLDOMEntity; interface IXMLDOMEntityReference; interface IXMLDOMParseError; cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED") cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED") typedef enum tagDOMNodeType { NODE_INVALID, NODE_ELEMENT, NODE_ATTRIBUTE, NODE_TEXT, NODE_CDATA_SECTION, NODE_ENTITY_REFERENCE, NODE_ENTITY, NODE_PROCESSING_INSTRUCTION, NODE_COMMENT, NODE_DOCUMENT, NODE_DOCUMENT_TYPE, NODE_DOCUMENT_FRAGMENT, NODE_NOTATION } DOMNodeType; cpp_quote("#endif") [ local, object, odl, dual, oleautomation, /*nonextensible,*/ uuid(2933bf80-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMNode : IDispatch { [propget, id(DISPID_DOM_NODE_NODENAME)] HRESULT nodeName( [out,retval] BSTR *name ); [propget, id(DISPID_DOM_NODE_NODEVALUE)] HRESULT nodeValue( [out,retval] VARIANT *value ); [propput, id(DISPID_DOM_NODE_NODEVALUE)] HRESULT nodeValue( [in] VARIANT value ); [propget, id(DISPID_DOM_NODE_NODETYPE)] HRESULT nodeType( [out,retval] DOMNodeType *type ); [propget, id(DISPID_DOM_NODE_PARENTNODE)] HRESULT parentNode( [out,retval] IXMLDOMNode **parent ); [propget, id(DISPID_DOM_NODE_CHILDNODES)] HRESULT childNodes( [out,retval] IXMLDOMNodeList **childList ); [propget, id(DISPID_DOM_NODE_FIRSTCHILD)] HRESULT firstChild( [out,retval] IXMLDOMNode **firstChild ); [propget, id(DISPID_DOM_NODE_LASTCHILD)] HRESULT lastChild( [out,retval] IXMLDOMNode **lastChild ); [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)] HRESULT previousSibling( [out,retval] IXMLDOMNode **previousSibling ); [propget, id(DISPID_DOM_NODE_NEXTSIBLING)] HRESULT nextSibling( [out,retval] IXMLDOMNode **nextSibling ); [propget, id(DISPID_DOM_NODE_ATTRIBUTES)] HRESULT attributes( [out,retval] IXMLDOMNamedNodeMap **attributeMap ); [id(DISPID_DOM_NODE_INSERTBEFORE)] HRESULT insertBefore( [in] IXMLDOMNode * newChild, [in] VARIANT refChild, [out,retval] IXMLDOMNode **outNewChild ); [id(DISPID_DOM_NODE_REPLACECHILD)] HRESULT replaceChild( [in] IXMLDOMNode *newChild, [in] IXMLDOMNode *oldChild, [out,retval] IXMLDOMNode **outOldChild ); [id(DISPID_DOM_NODE_REMOVECHILD)] HRESULT removeChild( [in] IXMLDOMNode *childNode, [out,retval] IXMLDOMNode **oldChild ); [id(DISPID_DOM_NODE_APPENDCHILD)] HRESULT appendChild( [in] IXMLDOMNode *newChild, [out,retval] IXMLDOMNode **outNewChild ); [id(DISPID_DOM_NODE_HASCHILDNODES)] HRESULT hasChildNodes( [out,retval] VARIANT_BOOL *hasChild ); [propget, id(DISPID_DOM_NODE_OWNERDOC)] HRESULT ownerDocument( [out,retval] IXMLDOMDocument **DOMDocument ); [id(DISPID_DOM_NODE_CLONENODE)] HRESULT cloneNode( [in] VARIANT_BOOL deep, [out,retval] IXMLDOMNode **cloneRoot ); [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)] HRESULT nodeTypeString( [out,retval] BSTR *nodeType ); [propget, id(DISPID_XMLDOM_NODE_TEXT)] HRESULT text( [out,retval] BSTR *text ); [propput, id(DISPID_XMLDOM_NODE_TEXT)] HRESULT text( [in] BSTR text ); [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)] HRESULT specified( [out,retval] VARIANT_BOOL *isSpecified ); [propget, id(DISPID_XMLDOM_NODE_DEFINITION)] HRESULT definition( [out,retval] IXMLDOMNode **definitionNode ); [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)] HRESULT nodeTypedValue( [out,retval] VARIANT *typedValue ); [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)] HRESULT nodeTypedValue( [in] VARIANT typedValue ); [propget, id(DISPID_XMLDOM_NODE_DATATYPE)] HRESULT dataType( [out,retval] VARIANT *dataTypeName ); [propput, id(DISPID_XMLDOM_NODE_DATATYPE)] HRESULT dataType( [in] BSTR dataTypeName ); [propget, id(DISPID_XMLDOM_NODE_XML)] HRESULT xml( [out,retval] BSTR *xmlString ); [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)] HRESULT transformNode( [in] IXMLDOMNode *styleSheet, [out,retval] BSTR *xmlString ); [id(DISPID_XMLDOM_NODE_SELECTNODES)] HRESULT selectNodes( [in] BSTR queryString, [out,retval] IXMLDOMNodeList **resultList ); [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)] HRESULT selectSingleNode( [in] BSTR queryString, [out,retval] IXMLDOMNode **resultNode ); [propget, id(DISPID_XMLDOM_NODE_PARSED)] HRESULT parsed( [out,retval] VARIANT_BOOL *isParsed ); [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)] HRESULT namespaceURI( [out,retval] BSTR *namespaceURI ); [propget, id(DISPID_XMLDOM_NODE_PREFIX)] HRESULT prefix( [out,retval] BSTR *prefixString ); [propget, id(DISPID_XMLDOM_NODE_BASENAME)] HRESULT baseName( [out,retval] BSTR *nameString ); [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)] HRESULT transformNodeToObject( [in] IXMLDOMNode *stylesheet, [in] VARIANT outputObject ); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf81-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMDocument : IXMLDOMNode { [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)] HRESULT doctype( [out,retval] IXMLDOMDocumentType **documentType ); [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)] HRESULT implementation( [out,retval] IXMLDOMImplementation **impl ); [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)] HRESULT documentElement( [out,retval] IXMLDOMElement **DOMElement ); [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)] HRESULT documentElement( [in] IXMLDOMElement *DOMElement ); [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)] HRESULT createElement( [in] BSTR tagname, [out,retval] IXMLDOMElement **element ); [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)] HRESULT createDocumentFragment( [out,retval] IXMLDOMDocumentFragment **docFrag ); [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)] HRESULT createTextNode( [in] BSTR data, [out,retval] IXMLDOMText **text ); [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)] HRESULT createComment( [in] BSTR data, [out,retval] IXMLDOMComment **comment ); [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)] HRESULT createCDATASection( [in] BSTR data, [out,retval] IXMLDOMCDATASection **cdata ); [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)] HRESULT createProcessingInstruction( [in] BSTR target, [in] BSTR data, [out,retval] IXMLDOMProcessingInstruction **pi ); [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)] HRESULT createAttribute( [in] BSTR name, [out,retval] IXMLDOMAttribute **attribute ); [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)] HRESULT createEntityReference( [in] BSTR name, [out,retval] IXMLDOMEntityReference **entityRef ); [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)] HRESULT getElementsByTagName( [in] BSTR tagName, [out,retval] IXMLDOMNodeList **resultList ); [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)] HRESULT createNode( [in] VARIANT Type, [in] BSTR name, [in] BSTR namespaceURI, [out,retval] IXMLDOMNode **node ); [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)] HRESULT nodeFromID( [in] BSTR idString, [out,retval] IXMLDOMNode **node ); [id(DISPID_XMLDOM_DOCUMENT_LOAD)] HRESULT load( [in] VARIANT xmlSource, [out,retval] VARIANT_BOOL *isSuccessful ); [propget, id(DISPID_READYSTATE)] HRESULT readyState( [out,retval] LONG *value ); [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)] HRESULT parseError( [out,retval] IXMLDOMParseError **errorObj ); [propget, id(DISPID_XMLDOM_DOCUMENT_URL)] HRESULT url( [out,retval] BSTR *urlString ); /* FIXME: these is meant to be async, but widl parses that as a keyword */ [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)] HRESULT async( [out,retval] VARIANT_BOOL *isAsync ); [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)] HRESULT async( [in] VARIANT_BOOL isAsync ); [id(DISPID_XMLDOM_DOCUMENT_ABORT)] HRESULT abort(); [id(DISPID_XMLDOM_DOCUMENT_LOADXML)] HRESULT loadXML( [in] BSTR bstrXML, [out,retval] VARIANT_BOOL *isSuccessful ); [id(DISPID_XMLDOM_DOCUMENT_SAVE)] HRESULT save( [in] VARIANT destination ); [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)] HRESULT validateOnParse( [out,retval] VARIANT_BOOL *isValidating ); [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)] HRESULT validateOnParse( [in] VARIANT_BOOL isValidating ); [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)] HRESULT resolveExternals( [out,retval] VARIANT_BOOL *isResolving ); [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)] HRESULT resolveExternals( [in] VARIANT_BOOL isValidating ); [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)] HRESULT preserveWhiteSpace( [out,retval] VARIANT_BOOL *isPreserving ); [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)] HRESULT preserveWhiteSpace( [in] VARIANT_BOOL isPreserving ); [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)] HRESULT onreadystatechange( [in] VARIANT readystatechangeSink ); [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)] HRESULT ondataavailable( [in] VARIANT ondataavailableSink ); [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)] HRESULT ontransformnode( [in] VARIANT ontransformnodeSink ); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf82-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMNodeList : IDispatch { [propget, id(DISPID_VALUE)] HRESULT item( [in] LONG index, [out,retval] IXMLDOMNode **listItem ); [propget, id(DISPID_DOM_NODELIST_LENGTH)] HRESULT length( [out,retval] LONG *listLength ); [id(DISPID_XMLDOM_NODELIST_NEXTNODE)] HRESULT nextNode( [out,retval] IXMLDOMNode **nextItem ); [id(DISPID_XMLDOM_NODELIST_RESET)] HRESULT reset(); [id(DISPID_NEWENUM)] HRESULT _newEnum( [out,retval] IUnknown **ppUnk ); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf83-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMNamedNodeMap : IDispatch { [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)] HRESULT getNamedItem( [in] BSTR name, [out,retval] IXMLDOMNode **namedItem ); [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)] HRESULT setNamedItem( [in] IXMLDOMNode *newItem, [out,retval] IXMLDOMNode **namedItem ); [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)] HRESULT removeNamedItem( [in] BSTR name, [out,retval] IXMLDOMNode **namedItem ); [propget, id(DISPID_VALUE)] HRESULT item( [in] LONG index, [out,retval] IXMLDOMNode **listItem ); [propget, id(DISPID_DOM_NODELIST_LENGTH)] HRESULT length( [out,retval] LONG *listLength ); [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)] HRESULT getQualifiedItem( [in] BSTR baseName, [in] BSTR namespaceURI, [out,retval] IXMLDOMNode **qualifiedItem ); [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)] HRESULT removeQualifiedItem( [in] BSTR baseName, [in] BSTR namespaceURI, [out,retval] IXMLDOMNode **qualifiedItem ); [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)] HRESULT nextNode( [out,retval] IXMLDOMNode **nextItem ); [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)] HRESULT reset(); [id(DISPID_NEWENUM)] HRESULT _newEnum( [out,retval] IUnknown **ppUnk ); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(3efaa413-272f-11d2-836f-0000f87a7782), pointer_default(unique) ] interface IXMLDOMDocumentFragment : IXMLDOMNode { /* empty */ } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf84-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMCharacterData : IXMLDOMNode { [propget, id(DISPID_DOM_DATA_DATA)] HRESULT data( [out,retval] BSTR *data ); [propput, id(DISPID_DOM_DATA_DATA)] HRESULT data( [in] BSTR data ); [propget, id(DISPID_DOM_DATA_LENGTH)] HRESULT length( [out,retval] LONG *dataLength ); [id(DISPID_DOM_DATA_SUBSTRING)] HRESULT substringData( [in] LONG offset, [in] LONG count, [out,retval] BSTR *data ); [id(DISPID_DOM_DATA_APPEND)] HRESULT appendData( [in] BSTR data ); [id(DISPID_DOM_DATA_INSERT)] HRESULT insertData( [in] LONG offset, [in] BSTR data ); [id(DISPID_DOM_DATA_DELETE)] HRESULT deleteData( [in] LONG offset, [in] LONG count ); [id(DISPID_DOM_DATA_REPLACE)] HRESULT replaceData( [in] LONG offset, [in] LONG count, [in] BSTR data ); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf85-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMAttribute : IXMLDOMNode { [propget,id(DISPID_DOM_ATTRIBUTE_GETNAME)] HRESULT name( [out,retval] BSTR *attributeName ); [propget,id(DISPID_DOM_ATTRIBUTE_VALUE)] HRESULT value( [out,retval] VARIANT *attributeValue ); [propput,id(DISPID_DOM_ATTRIBUTE_VALUE)] HRESULT value( [in] VARIANT attributeValue ); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf86-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMElement : IXMLDOMNode { [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)] HRESULT tagName( [out,retval] BSTR *tagName ); [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)] HRESULT getAttribute( [in] BSTR name, [out,retval] VARIANT * value ); [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)] HRESULT setAttribute( [in] BSTR name, [in] VARIANT value ); [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)] HRESULT removeAttribute( [in] BSTR name ); [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)] HRESULT getAttributeNode( [in] BSTR name, [out, retval] IXMLDOMAttribute ** attributeNode ); [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)] HRESULT setAttributeNode( [in] IXMLDOMAttribute *DOMAttribute, [out, retval] IXMLDOMAttribute ** attributeNode ); [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)] HRESULT removeAttributeNode( [in] IXMLDOMAttribute *DOMAttribute, [out, retval] IXMLDOMAttribute ** attributeNode ); [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)] HRESULT getElementsByTagName( [in] BSTR tagName, [out, retval] IXMLDOMNodeList ** resultList ); [id(DISPID_DOM_ELEMENT_NORMALIZE)] HRESULT normalize(); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf87-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMText : IXMLDOMCharacterData { [id(DISPID_DOM_TEXT_SPLITTEXT)] HRESULT splitText( [in] LONG offset, [out,retval] IXMLDOMText **rightHandTextNode ); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf88-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMComment : IXMLDOMCharacterData { /* empty */ } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf89-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMProcessingInstruction : IXMLDOMNode { [propget, id(DISPID_DOM_PI_TARGET)] HRESULT target( [out, retval] BSTR *name ); [propget, id(DISPID_DOM_PI_DATA)] HRESULT data( [out, retval] BSTR *value ); [propput, id(DISPID_DOM_PI_DATA)] HRESULT data( [in] BSTR value ); } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf8a-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMCDATASection : IXMLDOMText { /* empty */ } [ local, object, odl, dual, /*nonextensible,*/ oleautomation, uuid(2933bf8b-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMDocumentType : IXMLDOMNode { [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)] HRESULT name( [out,retval] BSTR *rootName ); [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)] HRESULT entities( [out,retval] IXMLDOMNamedNodeMap **entityMap ); [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)] HRESULT notations( [out,retval] IXMLDOMNamedNodeMap **notationMap ); } [ local, object, odl, dual, nonextensible, oleautomation, uuid(2933bf8c-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMNotation : IXMLDOMNode { [propget, id(DISPID_DOM_NOTATION_PUBLICID)] HRESULT publicId([out, retval] VARIANT *publicId); [propget, id(DISPID_DOM_NOTATION_SYSTEMID)] HRESULT systemId([out, retval] VARIANT *systemId); } [ local, object, odl, dual, nonextensible, oleautomation, uuid(2933bf8d-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMEntity : IXMLDOMNode { [propget, id(DISPID_DOM_ENTITY_PUBLICID)] HRESULT publicId([out, retval] VARIANT *publicId); [propget, id(DISPID_DOM_ENTITY_SYSTEMID)] HRESULT systemId([out, retval] VARIANT *systemId); [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)] HRESULT notationName([out, retval] BSTR *name); } [ local, object, odl, dual, nonextensible, oleautomation, uuid(2933bf8e-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMEntityReference : IXMLDOMNode { } [ local, object, odl, dual, nonextensible, oleautomation, uuid(2933bf8f-7b36-11d2-b20e-00c04f983e60), pointer_default(unique) ] interface IXMLDOMImplementation : IDispatch { [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)] HRESULT hasFeature([in] BSTR feature, [in] BSTR version, [out, retval] VARIANT_BOOL *pbool); } [ local, object, odl, dual, oleautomation, /*nonextensible,*/ helpstring("structure for reporting parse errors"), pointer_default(unique), uuid (3efaa426-272f-11d2-836f-0000f87a7782) ] interface IXMLDOMParseError : IDispatch { [propget, id(DISPID_VALUE)] HRESULT errorCode([retval, out] LONG *errCode); [propget, id(DISPID_DOM_ERROR_URL)] HRESULT url([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_REASON)] HRESULT reason([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_SRCTEXT)] HRESULT srcText([retval, out] BSTR *p); [propget, id(DISPID_DOM_ERROR_LINE)] HRESULT line([retval, out] LONG *lineNo); [propget, id(DISPID_DOM_ERROR_LINEPOS)] HRESULT linepos([retval, out] LONG * linePos); [propget, id(DISPID_DOM_ERROR_FILEPOS)] HRESULT filepos([retval, out] LONG * filePos); } [ hidden, uuid(3efaa427-272f-11d2-836f-0000f87a7782) ] dispinterface XMLDOMDocumentEvents { properties: methods: [id(DISPID_XMLDOMEVENT_ONDATAAVAILABLE)] HRESULT ondataavailable(); [id(DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)] HRESULT onreadystatechange(); } [ helpstring("XML DOM Document"), progid("Microsoft.XMLDOM.1.0"), vi_progid("Microsoft.XMLDOM"), threading(both), version(1.0), uuid(2933bf90-7b36-11d2-b20e-00c04f983e60) ] coclass DOMDocument { [default] interface IXMLDOMDocument; [default, source] dispinterface XMLDOMDocumentEvents; } [ helpstring("Free Threaded XML DOM Document"), progid("Microsoft.FreeThreadedXMLDOM.1.0"), vi_progid("Microsoft.FreeThreadedXMLDOM"), threading(both), version(1.0), uuid(2933bf91-7b36-11d2-b20e-00c04f983e60) ] coclass DOMFreeThreadedDocument { [default] interface IXMLDOMDocument; [default, source] dispinterface XMLDOMDocumentEvents; } [ object, uuid(ed8c108d-4349-11d2-91a4-00c04f7969e8), odl, dual, oleautomation, pointer_default(unique) ] interface IXMLHttpRequest : IDispatch { [id(1)] HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync, [in, optional] VARIANT varUser, [in, optional] VARIANT varPassword); [id(2)] HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue); [id(3)] HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR *pbstrValue); [id(4)] HRESULT getAllResponseHeaders([out, retval] BSTR *pbstrHeaders); [id(5)] HRESULT send([in, optional] VARIANT varBody); [id(6)] HRESULT abort(); [propget, id(7)] HRESULT status([out, retval] LONG *plStatus); [propget, id(8)] HRESULT statusText([out, retval] BSTR *bstrStatus); [propget, id(9)] HRESULT responseXML([out, retval] IDispatch **ppBody); [propget, id(10)] HRESULT responseText([out, retval] BSTR *pbstrBody); [propget, id(11)] HRESULT responseBody([out, retval] VARIANT *pvarBody); [propget, id(12)] HRESULT responseStream([out, retval] VARIANT *pvarBody); [propget, id(13)] HRESULT readyState([out, retval] LONG *plState); [propput, id(14)] HRESULT onreadystatechange([in] IDispatch *pReadyStateSink); } [ helpstring("XML HTTP Request"), progid("Microsoft.XMLHTTP.1.0"), vi_progid("Microsoft.XMLHTTP"), threading(apartment), version(1.0), uuid(ed8c108e-4349-11d2-91a4-00c04f7969e8) ] coclass XMLHTTPRequest { [default] interface IXMLHttpRequest; } ================================================ FILE: wine/windows/xmldomdid.h ================================================ /* * Copyright (C) 2005 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __XMLDOMDID_H__ #define __XMLDOMDID_H__ #define DISPID_DOM_BASE 0x00000001 #define DISPID_DOM_COLLECTION_BASE 0x000f4240 #define DISPID_DOM_COLLECTION_MAX 0x002dc6bf #define DISPID_DOM_NODE 0x00000001 #define DISPID_DOM_NODE_NODENAME 0x00000002 #define DISPID_DOM_NODE_NODEVALUE 0x00000003 #define DISPID_DOM_NODE_NODETYPE 0x00000004 #define DISPID_DOM_NODE_NODETYPEENUM 0x00000005 #define DISPID_DOM_NODE_PARENTNODE 0x00000006 #define DISPID_DOM_NODE_CHILDNODES 0x00000007 #define DISPID_DOM_NODE_FIRSTCHILD 0x00000008 #define DISPID_DOM_NODE_LASTCHILD 0x00000009 #define DISPID_DOM_NODE_PREVIOUSSIBLING 0x0000000a #define DISPID_DOM_NODE_NEXTSIBLING 0x0000000b #define DISPID_DOM_NODE_ATTRIBUTES 0x0000000c #define DISPID_DOM_NODE_INSERTBEFORE 0x0000000d #define DISPID_DOM_NODE_REPLACECHILD 0x0000000e #define DISPID_DOM_NODE_REMOVECHILD 0x0000000f #define DISPID_DOM_NODE_APPENDCHILD 0x00000010 #define DISPID_DOM_NODE_HASCHILDNODES 0x00000011 #define DISPID_DOM_NODE_OWNERDOC 0x00000012 #define DISPID_DOM_NODE_CLONENODE 0x00000013 #define DISPID_XMLDOM_NODE 0x00000014 #define DISPID_XMLDOM_NODE_STRINGTYPE 0x00000015 #define DISPID_XMLDOM_NODE_SPECIFIED 0x00000016 #define DISPID_XMLDOM_NODE_DEFINITION 0x00000017 #define DISPID_XMLDOM_NODE_TEXT 0x00000018 #define DISPID_XMLDOM_NODE_NODETYPEDVALUE 0x00000019 #define DISPID_XMLDOM_NODE_DATATYPE 0x0000001a #define DISPID_XMLDOM_NODE_XML 0x0000001b #define DISPID_XMLDOM_NODE_TRANSFORMNODE 0x0000001c #define DISPID_XMLDOM_NODE_SELECTNODES 0x0000001d #define DISPID_XMLDOM_NODE_SELECTSINGLENODE 0x0000001e #define DISPID_XMLDOM_NODE_PARSED 0x0000001f #define DISPID_XMLDOM_NODE_NAMESPACE 0x00000020 #define DISPID_XMLDOM_NODE_PREFIX 0x00000021 #define DISPID_XMLDOM_NODE_BASENAME 0x00000022 #define DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT 0x00000023 #define DISPID_XMLDOM_NODE__TOP 0x00000024 #define DISPID_DOM_DOCUMENT 0x00000025 #define DISPID_DOM_DOCUMENT_DOCTYPE 0x00000026 #define DISPID_DOM_DOCUMENT_IMPLEMENTATION 0x00000027 #define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT 0x00000028 #define DISPID_DOM_DOCUMENT_CREATEELEMENT 0x00000029 #define DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT 0x0000002a #define DISPID_DOM_DOCUMENT_CREATETEXTNODE 0x0000002b #define DISPID_DOM_DOCUMENT_CREATECOMMENT 0x0000002c #define DISPID_DOM_DOCUMENT_CREATECDATASECTION 0x0000002d #define DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION 0x0000002e #define DISPID_DOM_DOCUMENT_CREATEATTRIBUTE 0x0000002f #define DISPID_DOM_DOCUMENT_CREATEENTITY 0x00000030 #define DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE 0x00000031 #define DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME 0x00000032 #define DISPID_DOM_DOCUMENT_TOP 0x00000033 #define DISPID_XMLDOM_DOCUMENT 0x00000034 #define DISPID_XMLDOM_DOCUMENT_DOCUMENTNODE 0x00000035 #define DISPID_XMLDOM_DOCUMENT_CREATENODE 0x00000036 #define DISPID_XMLDOM_DOCUMENT_CREATENODEEX 0x00000037 #define DISPID_XMLDOM_DOCUMENT_NODEFROMID 0x00000038 #define DISPID_XMLDOM_DOCUMENT_DOCUMENTNAMESPACES 0x00000039 #define DISPID_XMLDOM_DOCUMENT_LOAD 0x0000003a #define DISPID_XMLDOM_DOCUMENT_PARSEERROR 0x0000003b #define DISPID_XMLDOM_DOCUMENT_URL 0x0000003c #define DISPID_XMLDOM_DOCUMENT_ASYNC 0x0000003d #define DISPID_XMLDOM_DOCUMENT_ABORT 0x0000003e #define DISPID_XMLDOM_DOCUMENT_LOADXML 0x0000003f #define DISPID_XMLDOM_DOCUMENT_SAVE 0x00000040 #define DISPID_XMLDOM_DOCUMENT_VALIDATE 0x00000041 #define DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE 0x00000042 #define DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE 0x00000043 #define DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE 0x00000044 #define DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE 0x00000045 #define DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE 0x00000046 #define DISPID_XMLDOM_DOCUMENT__TOP 0x00000047 #define DISPID_DOM_NODELIST 0x00000048 #define DISPID_DOM_NODELIST_ITEM 0x00000049 #define DISPID_DOM_NODELIST_LENGTH 0x0000004a #define DISPID_XMLDOM_NODELIST 0x0000004b #define DISPID_XMLDOM_NODELIST_NEXTNODE 0x0000004c #define DISPID_XMLDOM_NODELIST_RESET 0x0000004d #define DISPID_XMLDOM_NODELIST_NEWENUM 0x0000004e #define DISPID_XMLDOM_NODELIST__TOP 0x0000004f #define DISPID_DOM_NAMEDNODEMAP 0x00000050 #define DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM 0x00000053 #define DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM 0x00000054 #define DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM 0x00000055 #define DISPID_XMLDOM_NAMEDNODEMAP 0x00000056 #define DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM 0x00000057 #define DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM 0x00000058 #define DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE 0x00000059 #define DISPID_XMLDOM_NAMEDNODEMAP_RESET 0x0000005a #define DISPID_XMLDOM_NAMEDNODEMAP_NEWENUM 0x0000005b #define DISPID_XMLDOM_NAMEDNODEMAP__TOP 0x0000005c #define DISPID_DOM_W3CWRAPPERS 0x0000005d #define DISPID_DOM_DOCUMENTFRAGMENT 0x0000005e #define DISPID_DOM_DOCUMENTFRAGMENT__TOP 0x0000005f #define DISPID_DOM_ELEMENT 0x00000060 #define DISPID_DOM_ELEMENT_GETTAGNAME 0x00000061 #define DISPID_DOM_ELEMENT_GETATTRIBUTES 0x00000062 #define DISPID_DOM_ELEMENT_GETATTRIBUTE 0x00000063 #define DISPID_DOM_ELEMENT_SETATTRIBUTE 0x00000064 #define DISPID_DOM_ELEMENT_REMOVEATTRIBUTE 0x00000065 #define DISPID_DOM_ELEMENT_GETATTRIBUTENODE 0x00000066 #define DISPID_DOM_ELEMENT_SETATTRIBUTENODE 0x00000067 #define DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE 0x00000068 #define DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME 0x00000069 #define DISPID_DOM_ELEMENT_NORMALIZE 0x0000006a #define DISPID_DOM_ELEMENT__TOP 0x0000006b #define DISPID_DOM_DATA 0x0000006c #define DISPID_DOM_DATA_DATA 0x0000006d #define DISPID_DOM_DATA_LENGTH 0x0000006e #define DISPID_DOM_DATA_SUBSTRING 0x0000006f #define DISPID_DOM_DATA_APPEND 0x00000070 #define DISPID_DOM_DATA_INSERT 0x00000071 #define DISPID_DOM_DATA_DELETE 0x00000072 #define DISPID_DOM_DATA_REPLACE 0x00000073 #define DISPID_DOM_DATA__TOP 0x00000074 #define DISPID_DOM_ATTRIBUTE 0x00000075 #define DISPID_DOM_ATTRIBUTE_GETNAME 0x00000076 #define DISPID_DOM_ATTRIBUTE_SPECIFIED 0x00000077 #define DISPID_DOM_ATTRIBUTE_VALUE 0x00000078 #define DISPID_DOM_ATTRIBUTE__TOP 0x00000079 #define DISPID_DOM_TEXT 0x0000007a #define DISPID_DOM_TEXT_SPLITTEXT 0x0000007b #define DISPID_DOM_TEXT_JOINTEXT 0x0000007c #define DISPID_DOM_TEXT__TOP 0x0000007d #define DISPID_DOM_PI 0x0000007e #define DISPID_DOM_PI_TARGET 0x0000007f #define DISPID_DOM_PI_DATA 0x00000080 #define DISPID_DOM_PI__TOP 0x00000081 #define DISPID_DOM_DOCUMENTTYPE 0x00000082 #define DISPID_DOM_DOCUMENTTYPE_NAME 0x00000083 #define DISPID_DOM_DOCUMENTTYPE_ENTITIES 0x00000084 #define DISPID_DOM_DOCUMENTTYPE_NOTATIONS 0x00000085 #define DISPID_DOM_DOCUMENTTYPE__TOP 0x00000086 #define DISPID_DOM_NOTATION 0x00000087 #define DISPID_DOM_NOTATION_PUBLICID 0x00000088 #define DISPID_DOM_NOTATION_SYSTEMID 0x00000089 #define DISPID_DOM_NOTATION__TOP 0x0000008a #define DISPID_DOM_ENTITY 0x0000008b #define DISPID_DOM_ENTITY_PUBLICID 0x0000008c #define DISPID_DOM_ENTITY_SYSTEMID 0x0000008d #define DISPID_DOM_ENTITY_NOTATIONNAME 0x0000008e #define DISPID_DOM_ENTITY__TOP 0x0000008f #define DISPID_DOM_W3CWRAPPERS_TOP 0x0000008f #define DISPID_DOM_IMPLEMENTATION 0x00000090 #define DISPID_DOM_IMPLEMENTATION_HASFEATURE 0x00000091 #define DISPID_DOM_IMPLEMENTATION__TOP 0x00000092 #define DISPID_DOM__TOP 0x000000af #define DISPID_DOM_ERROR 0x000000b0 #define DISPID_DOM_ERROR_ERRORCODE 0x000000b1 #define DISPID_DOM_ERROR_URL 0x000000b2 #define DISPID_DOM_ERROR_REASON 0x000000b3 #define DISPID_DOM_ERROR_SRCTEXT 0x000000b4 #define DISPID_DOM_ERROR_LINE 0x000000b5 #define DISPID_DOM_ERROR_LINEPOS 0x000000b6 #define DISPID_DOM_ERROR_FILEPOS 0x000000b7 #define DISPID_DOM_ERROR__TOP 0x000000b8 #define DISPID_XTLRUNTIME 0x000000b9 #define DISPID_XTLRUNTIME_UNIQUEID 0x000000ba #define DISPID_XTLRUNTIME_DEPTH 0x000000bb #define DISPID_XTLRUNTIME_CHILDNUMBER 0x000000bc #define DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER 0x000000bd #define DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER 0x000000be #define DISPID_XTLRUNTIME_FORMATINDEX 0x000000bf #define DISPID_XTLRUNTIME_FORMATNUMBER 0x000000c0 #define DISPID_XTLRUNTIME_FORMATDATE 0x000000c1 #define DISPID_XTLRUNTIME_FORMATTIME 0x000000c2 #define DISPID_XTLRUNTIME__TOP 0x000000c3 #define DISPID_XMLDOMEVENT 0x000000c4 #define DISPID_XMLDOMEVENT_ONREADYSTATECHANGE DISPID_READYSTATECHANGE #define DISPID_XMLDOMEVENT_ONDATAAVAILABLE 0x000000c5 #define DISPID_XMLDOMEVENT__TOP 0x000000c6 #endif /* __XMLDOMDID_H__ */ ================================================ FILE: wine/windows/xmldso.idl ================================================ /* * Copyright (C) 2005 Vijay Kiran Kamuju * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #if 0 #pragma makedep install #endif #include #include #if !defined(progid) && !defined(__WIDL__) #define threading(model) #define progid(str) #define vi_progid(str) #endif interface IXMLDOMDocument; [ local, object, odl, dual, oleautomation, uuid(310afa62-0575-11d2-9ca9-0060b0ec3d39), pointer_default(unique) ] interface IXMLDSOControl : IDispatch { [propget,id(DISPID_XMLDSO_DOCUMENT)] HRESULT XMLDocument([out, retval] IXMLDOMDocument** ppDoc); [propput,id(DISPID_XMLDSO_DOCUMENT)] HRESULT XMLDocument([in] IXMLDOMDocument* ppDoc); [propget,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)] HRESULT JavaDSOCompatible([out, retval] BOOL* fJavaDSOCompatible); [propput,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)] HRESULT JavaDSOCompatible([in] BOOL fJavaDSOCompatible); [propget, id(DISPID_READYSTATE)] HRESULT readyState([out, retval] long *state); } [ helpstring("XML Data Source Object"), progid("Microsoft.XMLDSO.1.0"), vi_progid("Microsoft.XMLDSO"), threading(apartment), version(1.0), uuid(550dda30-0541-11d2-9ca9-0060b0ec3d39) ] coclass XMLDSOControl { [default] interface IXMLDSOControl; } ================================================ FILE: wine/windows/xmldsodid.h ================================================ /* * Copyright (C) 2005 Vijay Kiran Kamuju * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __XMLDSODID_H__ #define __XMLDSODID_H__ #define DISPID_XOBJ_MIN 0x00010000 #define DISPID_XOBJ_MAX 0x0001FFFF #define DISPID_XOBJ_BASE 0x00010000 #define DISPID_XMLDSO 0x00010000 #define DISPID_XMLDSO_DOCUMENT 0x00010001 #define DISPID_XMLDSO_JAVADSOCOMPATIBLE 0x00010002 #endif /* __XMLDSODID_H__ */ ================================================ FILE: wine/windows/xmllite.idl ================================================ /* * Copyright (C) 2010 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "objidl.idl"; import "oaidl.idl"; typedef enum XmlNodeType { XmlNodeType_None = 0, XmlNodeType_Element = 1, XmlNodeType_Attribute = 2, XmlNodeType_Text = 3, XmlNodeType_CDATA = 4, XmlNodeType_ProcessingInstruction = 7, XmlNodeType_Comment = 8, XmlNodeType_DocumentType = 10, XmlNodeType_Whitespace = 13, XmlNodeType_EndElement = 15, XmlNodeType_XmlDeclaration = 17, _XmlNodeType_Last = 17 } XmlNodeType; /* IXmlReader */ [ local, object, uuid(7279fc81-709d-4095-b63d-69fe4b0d9030), pointer_default(unique) ] interface IXmlReader : IUnknown { HRESULT SetInput( [in] IUnknown *input); HRESULT GetProperty( [in] UINT property, [out] LONG_PTR *value); HRESULT SetProperty( [in] UINT property, [in] LONG_PTR value); HRESULT Read( [out] XmlNodeType *node_type); HRESULT GetNodeType( [out] XmlNodeType *node_type); HRESULT MoveToFirstAttribute(void); HRESULT MoveToNextAttribute(void); HRESULT MoveToAttributeByName( [in] LPCWSTR local_name, [in] LPCWSTR namespaceUri); HRESULT MoveToElement(void); HRESULT GetQualifiedName( [out] LPCWSTR *qualifiedName, [out] UINT *qualifiedName_length); HRESULT GetNamespaceUri( [out] LPCWSTR *namespaceUri, [out] UINT *nnamespaceUri_length); HRESULT GetLocalName( [out] LPCWSTR *local_name, [out] UINT *locale_name_length); HRESULT GetPrefix( [out] LPCWSTR *prefix, [out] UINT *prefix_length); HRESULT GetValue( [out] LPCWSTR *value, [out] UINT *value_length); HRESULT ReadValueChunk( [out] WCHAR *buffer, [in] UINT chunk_size, [in,out] UINT *read); HRESULT GetBaseUri( [out] LPCWSTR *baseUri, [out] UINT *baseUri_length); BOOL IsDefault(void); BOOL IsEmptyElement(void); HRESULT GetLineNumber( [out] UINT *lineNumber); HRESULT GetLinePosition( [out] UINT *linePosition); HRESULT GetAttributeCount( [out] UINT *attributeCount); HRESULT GetDepth( [out] UINT *depth); BOOL IsEOF(void); } /* IXmlResolver */ [ local, object, uuid(7279fc82-709d-4095-b63d-69fe4b0d9030), pointer_default(unique) ] interface IXmlResolver : IUnknown { HRESULT ResolveUri([in] LPCWSTR base_uri, [in] LPCWSTR public_id, [in] LPCWSTR system_id, [out] IUnknown **input); } /* IXmlReader state */ typedef enum XmlReadState { XmlReadState_Initial, XmlReadState_Interactive, XmlReadState_Error, XmlReadState_EndOfFile, XmlReadState_Closed } XmlReadState; /* conformance levels */ typedef enum XmlConformanceLevel { XmlConformanceLevel_Auto, XmlConformanceLevel_Fragment, XmlConformanceLevel_Document, _XmlConformanceLevel_Last = XmlConformanceLevel_Document } XmlConformanceLevel; /* DTD processing mode */ typedef enum DtdProcessing { DtdProcessing_Prohibit, DtdProcessing_Parse, _DtdProcessing_Last = DtdProcessing_Parse } DtdProcessing; /* IXmlReader properties */ typedef enum XmlReaderProperty { XmlReaderProperty_MultiLanguage, XmlReaderProperty_ConformanceLevel, XmlReaderProperty_RandomAccess, XmlReaderProperty_XmlResolver, XmlReaderProperty_DtdProcessing, XmlReaderProperty_ReadState, XmlReaderProperty_MaxElementDepth, XmlReaderProperty_MaxEntityExpansion, _XmlReaderProperty_Last = XmlReaderProperty_MaxEntityExpansion } XmlReaderProperty; /* reader error codes */ typedef enum XmlError { MX_E_MX = 0xc00cee00, MX_E_INPUTEND, MX_E_ENCODING, MX_E_ENCODINGSWITCH, MX_E_ENCODINGSIGNATURE, WC_E_WC = 0xc00cee20, WC_E_WHITESPACE, WC_E_SEMICOLON, WC_E_GREATERTHAN, WC_E_QUOTE, WC_E_EQUAL, WC_E_LESSTHAN, WC_E_HEXDIGIT, WC_E_DIGIT, WC_E_LEFTBRACKET, WC_E_LEFTPAREN, WC_E_XMLCHARACTER, WC_E_NAMECHARACTER, WC_E_SYNTAX, WC_E_CDSECT, WC_E_COMMENT, WC_E_CONDSECT, WC_E_DECLATTLIST, WC_E_DECLDOCTYPE, WC_E_DECLELEMENT, WC_E_DECLENTITY, WC_E_DECLNOTATION, WC_E_NDATA, WC_E_PUBLIC, WC_E_SYSTEM, WC_E_NAME, WC_E_ROOTELEMENT, WC_E_ELEMENTMATCH, WC_E_UNIQUEATTRIBUTE, WC_E_TEXTXMLDECL, WC_E_LEADINGXML, WC_E_TEXTDECL, WC_E_XMLDECL, WC_E_ENCNAME, WC_E_PUBLICID, WC_E_PESINTERNALSUBSET, WC_E_PESBETWEENDECLS, WC_E_NORECURSION, WC_E_ENTITYCONTENT, WC_E_UNDECLAREDENTITY, WC_E_PARSEDENTITY, WC_E_NOEXTERNALENTITYREF, WC_E_PI, WC_E_SYSTEMID, WC_E_QUESTIONMARK, WC_E_CDSECTEND, WC_E_MOREDATA, WC_E_DTDPROHIBITED, WC_E_INVALIDXMLSPACE, NC_E_NC = 0xc00cee60, NC_E_QNAMECHARACTER, NC_E_QNAMECOLON, NC_E_NAMECOLON, NC_E_DECLAREDPREFIX, NC_E_UNDECLAREDPREFIX, NC_E_EMPTYURI, NC_E_XMLPREFIXRESERVED, NC_E_XMLNSPREFIXRESERVED, NC_E_XMLURIRESERVED, NC_E_XMLNSURIRESERVED, SC_E_SC = 0xc00cee80, SC_E_MAXELEMENTDEPTH, SC_E_MAXENTITYEXPANSION, WR_E_WR = 0xc00cef00, WR_E_NONWHITESPACE, WR_E_NSPREFIXDECLARED, WR_E_NSPREFIXWITHEMPTYNSURI, WR_E_DUPLICATEATTRIBUTE, WR_E_XMLNSPREFIXDECLARATION, WR_E_XMLPREFIXDECLARATION, WR_E_XMLURIDECLARATION, WR_E_XMLNSURIDECLARATION, WR_E_NAMESPACEUNDECLARED, WR_E_INVALIDXMLSPACE, WR_E_INVALIDACTION, WR_E_INVALIDSURROGATEPAIR, XML_E_INVALID_DECIMAL = 0xc00ce01d, XML_E_INVALID_HEXIDECIMAL, XML_E_INVALID_UNICODE, XML_E_INVALIDENCODING = 0xc00ce06e } XmlError; /* IXmlReader construction */ cpp_quote("STDAPI CreateXmlReader(REFIID riid, void **ppvObject, IMalloc *pMalloc);") cpp_quote("typedef IUnknown IXmlReaderInput;") cpp_quote("STDAPI CreateXmlReaderInputWithEncodingName(IUnknown *stream, IMalloc *pMalloc,") cpp_quote(" LPCWSTR encoding, BOOL hint,") cpp_quote(" LPCWSTR base_uri, IXmlReaderInput **ppInput);") typedef enum XmlStandalone { XmlStandalone_Omit, XmlStandalone_Yes, XmlStandalone_No, _XmlStandalone_Last = XmlStandalone_No } XmlStandalone; typedef enum XmlWriterProperty { XmlWriterProperty_MultiLanguage, XmlWriterProperty_Indent, XmlWriterProperty_ByteOrderMark, XmlWriterProperty_OmitXmlDeclaration, XmlWriterProperty_ConformanceLevel, _XmlWriterProperty_Last = XmlWriterProperty_OmitXmlDeclaration } XmlWriterProperty; /* IXmlWriter */ [ local, object, uuid(7279FC88-709D-4095-B63D-69FE4B0D9030), pointer_default(unique) ] interface IXmlWriter : IUnknown { HRESULT SetOutput([in] IUnknown *pOutput); HRESULT GetProperty([in] UINT nProperty, [out] LONG_PTR *ppValue); HRESULT SetProperty([in] UINT nProperty, [in] LONG_PTR pValue); HRESULT WriteAttributes([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes); HRESULT WriteAttributeString([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName, [in] LPCWSTR pwszNamespaceUri, [in] LPCWSTR pwszValue); HRESULT WriteCData([in] LPCWSTR pwszText); HRESULT WriteCharEntity([in] WCHAR wch); HRESULT WriteChars([in] const WCHAR *pwch, [in] UINT cwch); HRESULT WriteComment([in] LPCWSTR pwszComment); HRESULT WriteDocType([in] LPCWSTR pwszName, [in] LPCWSTR pwszPublicId, [in] LPCWSTR pwszSystemId, [in] LPCWSTR pwszSubset); HRESULT WriteElementString([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName, [in] LPCWSTR pwszNamespaceUri, [in] LPCWSTR pwszValue); HRESULT WriteEndDocument(); HRESULT WriteEndElement(); HRESULT WriteEntityRef([in] LPCWSTR pwszName); HRESULT WriteFullEndElement(); HRESULT WriteName([in] LPCWSTR pwszName); HRESULT WriteNmToken([in] LPCWSTR pwszNmToken); HRESULT WriteNode([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes); HRESULT WriteNodeShallow([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes); HRESULT WriteProcessingInstruction([in] LPCWSTR pwszName, [in] LPCWSTR pwszText); HRESULT WriteQualifiedName([in] LPCWSTR pwszLocalName, [in] LPCWSTR pwszNamespaceUri); HRESULT WriteRaw([in] LPCWSTR pwszData); HRESULT WriteRawChars([in] const WCHAR *pwch, [in] UINT cwch); HRESULT WriteStartDocument([in] XmlStandalone standalone); HRESULT WriteStartElement([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName, [in] LPCWSTR pwszNamespaceUri); HRESULT WriteString([in] LPCWSTR pwszText); HRESULT WriteSurrogateCharEntity([in] WCHAR wchLow, [in] WCHAR wchHigh); HRESULT WriteWhitespace([in] LPCWSTR pwszWhitespace); HRESULT Flush(); } /* IXmlWriter construction */ cpp_quote("STDAPI CreateXmlWriter(REFIID riid, void **ppvObject, IMalloc *pMalloc);") cpp_quote("typedef IUnknown IXmlWriterOutput;") cpp_quote("STDAPI CreateXmlWriterOutputWithEncodingName(IUnknown *stream, IMalloc *pMalloc,") cpp_quote(" LPCWSTR encoding, IXmlWriterOutput **output);") cpp_quote("STDAPI CreateXmlWriterOutputWithEncodingCodePage(IUnknown *stream, IMalloc *pMalloc,") cpp_quote(" UINT codepage, IXmlWriterOutput **output);") ================================================ FILE: wine/windows/zmouse.h ================================================ /* * Scroll wheel mouse definitions * * Copyright (C) 2000 CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_ZMOUSE_H #define __WINE_ZMOUSE_H #define MSH_MOUSEWHEEL "MSWHEEL_ROLLMSG" #define MOUSEZ_CLASSNAME "MouseZ" #define MOUSEZ_TITLE "Magellan MSWHEEL" #define MSH_WHEELMODULE_CLASS (MOUSEZ_CLASSNAME) #define MSH_WHEELMODULE_TITLE (MOUSEZ_TITLE) #define MSH_WHEELSUPPORT "MSH_WHEELSUPPORT_MSG" #define MSH_SCROLL_LINES "MSH_SCROLL_LINES_MSG" #define WHEEL_DELTA 120 #ifndef WHEEL_PAGESCROLL #define WHEEL_PAGESCROLL (UINT_MAX) #endif #ifndef SPI_SETWHEELSCROLLLINES #define SPI_SETWHEELSCROLLLINES 105 #endif #endif /* __WINE_ZMOUSE_H */ ================================================ FILE: wine/wine/config.h ================================================ /* include/config.h. Generated from config.h.in by configure. */ /* include/config.h.in. Generated from configure.ac by autoheader. */ #ifndef __WINE_CONFIG_H #define __WINE_CONFIG_H #ifndef WINE_CROSSTEST /* Define to a function attribute for Microsoft hotpatch assembly prefix. */ #define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__)) /* Define to the file extension for executables. */ #define EXEEXT ".exe" /* Define to 1 if you have the `acosh' function. */ /* #undef HAVE_ACOSH */ /* Define to 1 if you have the `acoshf' function. */ /* #undef HAVE_ACOSHF */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ALIAS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ALSA_ASOUNDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AL_AL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H */ /* Define to 1 if you have the header file. */ #define HAVE_ARPA_INET_H 1 /* Define to 1 if you have the header file. */ #define HAVE_ARPA_NAMESER_H 1 /* Define to 1 if you have the `asctime_r' function. */ #define HAVE_ASCTIME_R 1 /* Define to 1 if you have the `asinh' function. */ /* #undef HAVE_ASINH */ /* Define to 1 if you have the `asinhf' function. */ /* #undef HAVE_ASINHF */ /* Define to 1 if you have the header file. */ #define HAVE_ASM_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_ASM_USER_H */ /* Define to 1 if you have the `atanh' function. */ /* #undef HAVE_ATANH */ /* Define to 1 if you have the `atanhf' function. */ /* #undef HAVE_ATANHF */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */ /* Define to 1 if you have the `AUGraphAddNode' function. */ /* #undef HAVE_AUGRAPHADDNODE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CAPI20_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CARBON_CARBON_H */ /* Define to 1 if you have the `cbrt' function. */ #define HAVE_CBRT 1 /* Define to 1 if you have the `cbrtf' function. */ #define HAVE_CBRTF 1 /* Define to 1 if you have the `chsize' function. */ /* #undef HAVE_CHSIZE */ /* Define to 1 if you have the `clock_gettime' function. */ #define HAVE_CLOCK_GETTIME 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CL_CL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_COMMONCRYPTO_COMMONCRYPTOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_COREAUDIO_COREAUDIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CORESERVICES_CORESERVICES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CUPS_CUPS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CUPS_PPD_H */ /* Define to 1 if you have the header file. */ #define HAVE_CURSES_H 1 /* Define if you have the daylight variable */ #define HAVE_DAYLIGHT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DIRECT_H */ /* Define to 1 if you have the header file. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */ /* Define to 1 if you have the `dladdr' function. */ /* #undef HAVE_DLADDR */ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `dlopen' function. */ #define HAVE_DLOPEN 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_EGL_EGL_H */ /* Define to 1 if you have the header file. */ #define HAVE_ELF_H 1 /* Define to 1 if you have the `epoll_create' function. */ /* #undef HAVE_EPOLL_CREATE */ /* Define to 1 if you have the `erf' function. */ /* #undef HAVE_ERF */ /* Define to 1 if you have the `erfc' function. */ /* #undef HAVE_ERFC */ /* Define to 1 if you have the `erfcf' function. */ /* #undef HAVE_ERFCF */ /* Define to 1 if you have the `erff' function. */ /* #undef HAVE_ERFF */ /* Define to 1 if you have the `exp2' function. */ #define HAVE_EXP2 1 /* Define to 1 if you have the `exp2f' function. */ #define HAVE_EXP2F 1 /* Define to 1 if you have the `expm1' function. */ /* #undef HAVE_EXPM1 */ /* Define to 1 if you have the `expm1f' function. */ /* #undef HAVE_EXPM1F */ /* Define to 1 if you have the `fallocate' function. */ /* #undef HAVE_FALLOCATE */ /* Define to 1 if you have the `ffs' function. */ #define HAVE_FFS 1 /* Define to 1 if you have the `finitef' function. */ #define HAVE_FINITEF 1 /* Define to 1 if you have the header file. */ #define HAVE_FLOAT_H 1 /* Define to 1 if you have the `fnmatch' function. */ #define HAVE_FNMATCH 1 /* Define to 1 if you have the header file. */ #define HAVE_FNMATCH_H 1 /* Define to 1 if you have the header file. */ #define HAVE_FONTCONFIG_FONTCONFIG_H 1 /* Define to 1 if you have the `fork' function. */ #define HAVE_FORK 1 /* Define to 1 if you have the `fpclass' function. */ /* #undef HAVE_FPCLASS */ /* Define if FreeType 2 is installed */ /* #undef HAVE_FREETYPE */ /* Define to 1 if the system has the type `fsblkcnt_t'. */ #define HAVE_FSBLKCNT_T 1 /* Define to 1 if the system has the type `fsfilcnt_t'. */ #define HAVE_FSFILCNT_T 1 /* Define to 1 if you have the `fstatfs' function. */ #define HAVE_FSTATFS 1 /* Define to 1 if you have the `fstatvfs' function. */ #define HAVE_FSTATVFS 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_FT2BUILD_H */ /* Define to 1 if you have the `ftruncate' function. */ #define HAVE_FTRUNCATE 1 /* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */ /* #undef HAVE_FT_TRUETYPEENGINETYPE */ /* Define to 1 if you have the `futimens' function. */ #define HAVE_FUTIMENS 1 /* Define to 1 if you have the `futimes' function. */ #define HAVE_FUTIMES 1 /* Define to 1 if you have the `futimesat' function. */ #define HAVE_FUTIMESAT 1 /* Define to 1 if you have the `getaddrinfo' function. */ #define HAVE_GETADDRINFO 1 /* Define to 1 if you have the `getattrlist' function. */ /* #undef HAVE_GETATTRLIST */ /* Define to 1 if you have the `getauxval' function. */ /* #undef HAVE_GETAUXVAL */ /* Define to 1 if you have the `getifaddrs' function. */ /* #undef HAVE_GETIFADDRS */ /* Define to 1 if you have the `getnameinfo' function. */ #define HAVE_GETNAMEINFO 1 /* Define to 1 if you have the `getnetbyname' function. */ /* #undef HAVE_GETNETBYNAME */ /* Define to 1 if you have the header file. */ #define HAVE_GETOPT_H 1 /* Define to 1 if you have the `getopt_long_only' function. */ #define HAVE_GETOPT_LONG_ONLY 1 /* Define to 1 if you have the `getprotobyname' function. */ #define HAVE_GETPROTOBYNAME 1 /* Define to 1 if you have the `getprotobynumber' function. */ #define HAVE_GETPROTOBYNUMBER 1 /* Define to 1 if you have the `getpwuid' function. */ #define HAVE_GETPWUID 1 /* Define to 1 if you have the `getservbyport' function. */ #define HAVE_GETSERVBYPORT 1 /* Define to 1 if you have the header file. */ #define HAVE_GETTEXT_PO_H 1 /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Define to 1 if you have the `getuid' function. */ #define HAVE_GETUID 1 /* Define to 1 if you have the `gnutls_cipher_init' function. */ /* #undef HAVE_GNUTLS_CIPHER_INIT */ /* Define if we have the libgphoto2 development environment */ /* #undef HAVE_GPHOTO2 */ /* Define if we have the libgphoto2_port development environment */ /* #undef HAVE_GPHOTO2_PORT */ /* Define to 1 if you have the header file. */ #define HAVE_GRP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_GSM_GSM_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_GSM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_EXT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_H */ /* Define to 1 if you have the header file. */ #define HAVE_IEEEFP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_IFADDRS_H 1 /* Define to 1 if you have the `if_nameindex' function. */ #define HAVE_IF_NAMEINDEX 1 /* Define to 1 if you have the `inet_addr' function. */ #define HAVE_INET_ADDR 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_INET_MIB2_H */ /* Define to 1 if you have the `inet_network' function. */ #define HAVE_INET_NETWORK 1 /* Define to 1 if you have the `inet_ntop' function. */ #define HAVE_INET_NTOP 1 /* Define to 1 if you have the `inet_pton' function. */ #define HAVE_INET_PTON 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `IOHIDManagerCreate' function. */ /* #undef HAVE_IOHIDMANAGERCREATE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IOKIT_HID_IOHIDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IOKIT_IOKITLIB_H */ /* Define to 1 if you have the header file. */ #define HAVE_IO_H 1 /* Define to 1 if you have the `isfinite' function. */ #define HAVE_ISFINITE 1 /* Define to 1 if you have the `isinf' function. */ #define HAVE_ISINF 1 /* Define to 1 if you have the `isnan' function. */ #define HAVE_ISNAN 1 /* Define to 1 if you have the `isnanf' function. */ #define HAVE_ISNANF 1 /* Define to 1 if you have the `j0' function. */ /* #undef HAVE_J0 */ /* Define to 1 if you have the `j1' function. */ /* #undef HAVE_J1 */ /* Define to 1 if you have the `jn' function. */ /* #undef HAVE_JN */ /* Define to 1 if you have the header file. */ #define HAVE_JPEGLIB_H 1 /* Define to 1 if you have the `kqueue' function. */ /* #undef HAVE_KQUEUE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_KRB5_KRB5_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_KSTAT_H */ /* Define to 1 if you have the header file. */ #define HAVE_LBER_H 1 /* Define if you have the LittleCMS development environment */ #define HAVE_LCMS2 1 /* Define to 1 if you have the header file. */ #define HAVE_LCMS2_H 1 /* Define if you have the OpenLDAP development environment */ #define HAVE_LDAP 1 /* Define to 1 if you have the `ldap_count_references' function. */ #define HAVE_LDAP_COUNT_REFERENCES 1 /* Define to 1 if you have the `ldap_first_reference' function. */ #define HAVE_LDAP_FIRST_REFERENCE 1 /* Define to 1 if you have the header file. */ #define HAVE_LDAP_H 1 /* Define to 1 if you have the `ldap_next_reference' function. */ #define HAVE_LDAP_NEXT_REFERENCE 1 /* Define to 1 if you have the `ldap_parse_reference' function. */ #define HAVE_LDAP_PARSE_REFERENCE 1 /* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */ #define HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL 1 /* Define to 1 if you have the `ldap_parse_sort_control' function. */ /* #undef HAVE_LDAP_PARSE_SORT_CONTROL */ /* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */ #define HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL 1 /* Define to 1 if you have the `ldap_parse_vlv_control' function. */ /* #undef HAVE_LDAP_PARSE_VLV_CONTROL */ /* Define to 1 if you have the `lgamma' function. */ /* #undef HAVE_LGAMMA */ /* Define to 1 if you have the `lgammaf' function. */ /* #undef HAVE_LGAMMAF */ /* Define to 1 if you have the `gettextpo' library (-lgettextpo). */ #define HAVE_LIBGETTEXTPO 1 /* Define to 1 if you have the `i386' library (-li386). */ /* #undef HAVE_LIBI386 */ /* Define to 1 if you have the `kstat' library (-lkstat). */ /* #undef HAVE_LIBKSTAT */ /* Define to 1 if you have the `ossaudio' library (-lossaudio). */ /* #undef HAVE_LIBOSSAUDIO */ /* Define to 1 if you have the `procstat' library (-lprocstat). */ /* #undef HAVE_LIBPROCSTAT */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBPROCSTAT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBPROC_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBUDEV_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBUNWIND_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBV4L1_H */ /* Define if you have the libxml2 library */ #define HAVE_LIBXML2 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_PARSER_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_SAX2_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXML_XMLSAVE_H 1 /* Define if you have the X Shape extension */ /* #undef HAVE_LIBXSHAPE */ /* Define to 1 if you have the header file. */ #define HAVE_LIBXSLT_PATTERN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBXSLT_TRANSFORM_H 1 /* Define if you have the X Shm extension */ /* #undef HAVE_LIBXXSHM */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINK_H */ /* Define if defines the Linux 2.2 joystick API */ /* #undef HAVE_LINUX_22_JOYSTICK_API */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_CAPI_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_CDROM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_COMPILER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_FILTER_H */ /* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */ /* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_HDREG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_HIDRAW_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_INPUT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IOCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IPX_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_IRDA_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_JOYSTICK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_MAJOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_PARAM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_RTNETLINK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_SERIAL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_TYPES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_UCDROM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_VIDEODEV2_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_VIDEODEV_H */ /* Define to 1 if you have the `llrint' function. */ #define HAVE_LLRINT 1 /* Define to 1 if you have the `llrintf' function. */ #define HAVE_LLRINTF 1 /* Define to 1 if you have the `llround' function. */ #define HAVE_LLROUND 1 /* Define to 1 if you have the `llroundf' function. */ #define HAVE_LLROUNDF 1 /* Define to 1 if you have the `log1p' function. */ /* #undef HAVE_LOG1P */ /* Define to 1 if you have the `log1pf' function. */ /* #undef HAVE_LOG1PF */ /* Define to 1 if you have the `log2' function. */ #define HAVE_LOG2 1 /* Define to 1 if you have the `log2f' function. */ #define HAVE_LOG2F 1 /* Define to 1 if the system has the type `long long'. */ #define HAVE_LONG_LONG 1 /* Define to 1 if you have the `lrint' function. */ #define HAVE_LRINT 1 /* Define to 1 if you have the `lrintf' function. */ #define HAVE_LRINTF 1 /* Define to 1 if you have the `lround' function. */ #define HAVE_LROUND 1 /* Define to 1 if you have the `lroundf' function. */ #define HAVE_LROUNDF 1 /* Define to 1 if you have the `lstat' function. */ #define HAVE_LSTAT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_LWP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_CPU_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_LIMITS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_SYSARCH_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_MACHINE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_MACH_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_DYLD_IMAGES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_LOADER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_O_NLIST_H */ /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_METAL_METAL_H */ /* Define to 1 if you have the `mmap' function. */ #define HAVE_MMAP 1 /* Define to 1 if you have the header file. */ #define HAVE_MNTENT_H 1 /* Define to 1 if the system has the type `mode_t'. */ #define HAVE_MODE_T 1 /* Define to 1 if you have the `mousemask' function. */ #define HAVE_MOUSEMASK 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_MPG123_H */ /* Define to 1 if you have the header file. */ #define HAVE_NCURSES_H 1 /* Define to 1 if you have the `nearbyint' function. */ /* #undef HAVE_NEARBYINT */ /* Define to 1 if you have the `nearbyintf' function. */ /* #undef HAVE_NEARBYINTF */ /* Define to 1 if you have the header file. */ #define HAVE_NETDB_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_ICMP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IF_ETHER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IF_INARP_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IN_PCB_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_SYSTM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IP_ICMP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_FSM_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_TCP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_TIMER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_TCP_VAR_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETINET_UDP_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_UDP_VAR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETIPX_IPX_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_ARP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_DL_H */ /* Define to 1 if you have the header file. */ #define HAVE_NET_IF_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_IF_TYPES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NET_ROUTE_H */ /* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */ #define HAVE_NS_MSG__MSG_PTR 1 /* Define to 1 if the system has the type `off_t'. */ #define HAVE_OFF_T 1 /* Define if mkdir takes only one argument */ /* #undef HAVE_ONE_ARG_MKDIR */ /* Define to 1 if OpenAL is available */ /* #undef HAVE_OPENAL */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENAL_AL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENCL_OPENCL_H */ /* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */ /* #undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PCAP_PCAP_H */ /* Define to 1 if you have the `pclose' function. */ #define HAVE_PCLOSE 1 /* Define to 1 if the system has the type `pid_t'. */ #define HAVE_PID_T 1 /* Define to 1 if you have the `pipe2' function. */ #define HAVE_PIPE2 1 /* Define to 1 if you have the header file. */ #define HAVE_PNG_H 1 /* Define to 1 if you have the `poll' function. */ #define HAVE_POLL 1 /* Define to 1 if you have the header file. */ #define HAVE_POLL_H 1 /* Define to 1 if you have the `popen' function. */ #define HAVE_POPEN 1 /* Define to 1 if you have the `port_create' function. */ /* #undef HAVE_PORT_CREATE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PORT_H */ /* Define to 1 if you have the `powl' function. */ /* #undef HAVE_POWL */ /* Define if we can use ppdev.h for parallel port access */ /* #undef HAVE_PPDEV */ /* Define to 1 if you have the `prctl' function. */ /* #undef HAVE_PRCTL */ /* Define to 1 if you have the `pread' function. */ #define HAVE_PREAD 1 /* Define to 1 if you have the header file. */ #define HAVE_PROCESS_H 1 /* Define to 1 if you have the `proc_pidinfo' function. */ /* #undef HAVE_PROC_PIDINFO */ /* Define to 1 if you have the `pthread_attr_get_np' function. */ /* #undef HAVE_PTHREAD_ATTR_GET_NP */ /* Define to 1 if you have the `pthread_getattr_np' function. */ #define HAVE_PTHREAD_GETATTR_NP 1 /* Define to 1 if you have the `pthread_getthreadid_np' function. */ /* #undef HAVE_PTHREAD_GETTHREADID_NP */ /* Define to 1 if you have the `pthread_get_stackaddr_np' function. */ /* #undef HAVE_PTHREAD_GET_STACKADDR_NP */ /* Define to 1 if you have the `pthread_get_stacksize_np' function. */ /* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */ /* Define to 1 if you have the header file. */ #define HAVE_PTHREAD_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_PTHREAD_NP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PULSE_PULSEAUDIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_PWD_H 1 /* Define to 1 if you have the `pwrite' function. */ #define HAVE_PWRITE 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_QUICKTIME_IMAGECOMPRESSION_H */ /* Define to 1 if you have the `readdir' function. */ #define HAVE_READDIR 1 /* Define to 1 if you have the `readlink' function. */ #define HAVE_READLINK 1 /* Define to 1 if you have the `remainder' function. */ /* #undef HAVE_REMAINDER */ /* Define to 1 if you have the `remainderf' function. */ /* #undef HAVE_REMAINDERF */ /* Define to 1 if the system has the type `request_sense'. */ /* #undef HAVE_REQUEST_SENSE */ /* Define if you have the resolver library and header */ #define HAVE_RESOLV 1 /* Define to 1 if you have the header file. */ #define HAVE_RESOLV_H 1 /* Define to 1 if you have the `rint' function. */ #define HAVE_RINT 1 /* Define to 1 if you have the `rintf' function. */ #define HAVE_RINTF 1 /* Define to 1 if you have the `round' function. */ #define HAVE_ROUND 1 /* Define to 1 if you have the `roundf' function. */ #define HAVE_ROUNDF 1 /* Define to 1 if you have the header file. */ #define HAVE_SCHED_H 1 /* Define to 1 if you have the `sched_setaffinity' function. */ /* #undef HAVE_SCHED_SETAFFINITY */ /* Define to 1 if you have the `sched_yield' function. */ #define HAVE_SCHED_YIELD 1 /* Define to 1 if `cmd' is a member of `scsireq_t'. */ /* #undef HAVE_SCSIREQ_T_CMD */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SCSI_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SCSI_IOCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SCSI_SG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SDL2_SDL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SECURITY_SECURITY_H */ /* Define to 1 if you have the `select' function. */ #define HAVE_SELECT 1 /* Define to 1 if you have the `sendmsg' function. */ #define HAVE_SENDMSG 1 /* Define to 1 if you have the `setproctitle' function. */ /* #undef HAVE_SETPROCTITLE */ /* Define to 1 if you have the `setprogname' function. */ /* #undef HAVE_SETPROGNAME */ /* Define to 1 if you have the `setrlimit' function. */ #define HAVE_SETRLIMIT 1 /* Define to 1 if you have the `settimeofday' function. */ #define HAVE_SETTIMEOFDAY 1 /* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */ /* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */ /* Define if sigaddset is supported */ #define HAVE_SIGADDSET 1 /* Define to 1 if you have the `sigaltstack' function. */ /* #undef HAVE_SIGALTSTACK */ /* Define to 1 if `si_fd' is a member of `siginfo_t'. */ /* #undef HAVE_SIGINFO_T_SI_FD */ /* Define to 1 if you have the `sigprocmask' function. */ #define HAVE_SIGPROCMASK 1 /* Define to 1 if the system has the type `sigset_t'. */ #define HAVE_SIGSET_T 1 /* Define to 1 if the system has the type `size_t'. */ #define HAVE_SIZE_T 1 /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 /* Define to 1 if you have the `socketpair' function. */ #define HAVE_SOCKETPAIR 1 /* Define to 1 if the system has the type `ssize_t'. */ #define HAVE_SSIZE_T 1 /* Define to 1 if you have the `SSLCopyPeerCertificates' function. */ /* #undef HAVE_SSLCOPYPEERCERTIFICATES */ /* Define to 1 if you have the `statfs' function. */ #define HAVE_STATFS 1 /* Define to 1 if you have the `statvfs' function. */ #define HAVE_STATVFS 1 /* Define to 1 if you have the header file. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #define HAVE_STRERROR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strncasecmp' function. */ #define HAVE_STRNCASECMP 1 /* Define to 1 if you have the `strnlen' function. */ /* #undef HAVE_STRNLEN */ /* Define to 1 if you have the header file. */ /* #undef HAVE_STROPTS_H */ /* Define to 1 if you have the `strtold' function. */ #define HAVE_STRTOLD 1 /* Define to 1 if you have the `strtoll' function. */ #define HAVE_STRTOLL 1 /* Define to 1 if you have the `strtoull' function. */ #define HAVE_STRTOULL 1 /* Define to 1 if `d_reclen' is a member of `struct dirent'. */ /* #undef HAVE_STRUCT_DIRENT_D_RECLEN */ /* Define to 1 if `direction' is a member of `struct ff_effect'. */ /* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */ /* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */ /* #undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST */ /* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */ /* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */ /* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */ #define HAVE_STRUCT_IFREQ_IFR_HWADDR 1 /* Define to 1 if `ips_total' is a member of `struct ipstat'. */ /* #undef HAVE_STRUCT_IPSTAT_IPS_TOTAL */ /* Define to 1 if `ips_total' is a member of `struct ip_stats'. */ /* #undef HAVE_STRUCT_IP_STATS_IPS_TOTAL */ /* Define to 1 if the system has the type `struct link_map'. */ /* #undef HAVE_STRUCT_LINK_MAP */ /* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */ /* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */ /* Define to 1 if `mt_blkno' is a member of `struct mtget'. */ #define HAVE_STRUCT_MTGET_MT_BLKNO 1 /* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */ /* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */ /* Define to 1 if `mt_gstat' is a member of `struct mtget'. */ #define HAVE_STRUCT_MTGET_MT_GSTAT 1 /* Define to 1 if `name' is a member of `struct option'. */ #define HAVE_STRUCT_OPTION_NAME 1 /* Define to 1 if the system has the type `struct r_debug'. */ /* #undef HAVE_STRUCT_R_DEBUG */ /* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */ #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1 /* Define to 1 if `sa_len' is a member of `struct sockaddr'. */ /* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */ /* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */ /* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */ /* Define to 1 if `f_bavail' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_BAVAIL 1 /* Define to 1 if `f_bfree' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_BFREE 1 /* Define to 1 if `f_favail' is a member of `struct statfs'. */ /* #undef HAVE_STRUCT_STATFS_F_FAVAIL */ /* Define to 1 if `f_ffree' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_FFREE 1 /* Define to 1 if `f_frsize' is a member of `struct statfs'. */ /* #undef HAVE_STRUCT_STATFS_F_FRSIZE */ /* Define to 1 if `f_namelen' is a member of `struct statfs'. */ #define HAVE_STRUCT_STATFS_F_NAMELEN 1 /* Define to 1 if `f_blocks' is a member of `struct statvfs'. */ #define HAVE_STRUCT_STATVFS_F_BLOCKS 1 /* Define to 1 if `st_atim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_ATIM 1 /* Define to 1 if `st_atimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC */ /* Define to 1 if `st_birthtim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BIRTHTIM 1 /* Define to 1 if `st_birthtime' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BIRTHTIME 1 /* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC */ /* Define to 1 if `st_blocks' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BLOCKS 1 /* Define to 1 if `st_ctim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_CTIM 1 /* Define to 1 if `st_ctimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_CTIMESPEC */ /* Define to 1 if `st_mtim' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_MTIM 1 /* Define to 1 if `st_mtimespec' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT_ST_MTIMESPEC */ /* Define to 1 if `__st_birthtim' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT___ST_BIRTHTIM */ /* Define to 1 if `__st_birthtime' is a member of `struct stat'. */ /* #undef HAVE_STRUCT_STAT___ST_BIRTHTIME */ /* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */ /* #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT */ /* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */ /* #undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT */ /* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */ /* #undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS */ /* Define to 1 if the system has the type `struct xinpgen'. */ /* #undef HAVE_STRUCT_XINPGEN */ /* Define to 1 if the system has the type `struct __res_state'. */ #define HAVE_STRUCT___RES_STATE 1 /* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */ /* #undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6 */ /* Define to 1 if you have the `symlink' function. */ #define HAVE_SYMLINK 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYSCALL_H */ /* Define to 1 if you have the `sysinfo' function. */ /* #undef HAVE_SYSINFO */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ASOUNDLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ATTR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_AUXV_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_CDIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_ELF32_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EPOLL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EVENT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_EXEC_ELF_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_FILIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_INOTIFY_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_IPC_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LIMITS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LINK_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_MMAN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_MODEM_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_MOUNT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_MSG_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_MTIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_POLL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PRCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PROTOSW_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PTRACE_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_QUEUE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_RESOURCE_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SCSIIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SHM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SIGNAL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SOCKETVAR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SOCKIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATVFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_STRTIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSCALL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSCTL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSINFO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_THR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TIHDR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_TIMEOUT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_UCONTEXT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_UIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_USER_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_UTSNAME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_VFS_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_VM86_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_VNODE_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_WAIT_H 1 /* Define to 1 if you have the `tcdrain' function. */ #define HAVE_TCDRAIN 1 /* Define to 1 if you have the header file. */ #define HAVE_TERMIOS_H 1 /* Define to 1 if you have the `thr_kill2' function. */ /* #undef HAVE_THR_KILL2 */ /* Define to 1 if you have the header file. */ #define HAVE_TIFFIO_H 1 /* Define to 1 if you have the `timegm' function. */ #define HAVE_TIMEGM 1 /* Define if you have the timezone variable */ #define HAVE_TIMEZONE 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the `truncf' function. */ #define HAVE_TRUNCF 1 /* Define to 1 if you have the `udev' library (-ludev). */ /* #undef HAVE_UDEV */ /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the `usleep' function. */ #define HAVE_USLEEP 1 /* Define to 1 if you have the header file. */ #define HAVE_UTIME_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_VALGRIND_MEMCHECK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_VALGRIND_VALGRIND_H */ /* Define to 1 if you have the `vsnprintf' function. */ #define HAVE_VSNPRINTF 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_SHAPE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XFIXES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINPUT2_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XINPUT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XRANDR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XRENDER_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_EXTENSIONS_XSHM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XCURSOR_XCURSOR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XKBLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XLIB_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X11_XUTIL_H */ /* Define to 1 if `xcookie' is a member of `XEvent'. */ /* #undef HAVE_XEVENT_XCOOKIE */ /* Define to 1 if `callback' is a member of `XICCallback'. */ /* #undef HAVE_XICCALLBACK_CALLBACK */ /* Define if you have the XKB extension */ /* #undef HAVE_XKB */ /* Define if libxml2 has the xmlDocProperties enum */ #define HAVE_XMLDOC_PROPERTIES 1 /* Define if libxml2 has the xmlFirstElementChild function */ #define HAVE_XMLFIRSTELEMENTCHILD 1 /* Define if libxml2 has the xmlNewDocPI function */ #define HAVE_XMLNEWDOCPI 1 /* Define if libxml2 has the xmlReadMemory function */ #define HAVE_XMLREADMEMORY 1 /* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */ #define HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS 1 /* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */ #define HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS 1 /* Define if Xrender has the XRenderCreateLinearGradient function */ /* #undef HAVE_XRENDERCREATELINEARGRADIENT */ /* Define if Xrender has the XRenderSetPictureTransform function */ /* #undef HAVE_XRENDERSETPICTURETRANSFORM */ /* Define if Xrandr has the XRRGetScreenResources function */ /* #undef HAVE_XRRGETSCREENRESOURCES */ /* Define to 1 if you have the `y0' function. */ /* #undef HAVE_Y0 */ /* Define to 1 if you have the `y1' function. */ /* #undef HAVE_Y1 */ /* Define to 1 if you have the `yn' function. */ /* #undef HAVE_YN */ /* Define to 1 if you have the `z' library (-lz). */ #define HAVE_ZLIB 1 /* Define to 1 if you have the header file. */ #define HAVE_ZLIB_H 1 /* Define to 1 if you have the `_finite' function. */ /* #undef HAVE__FINITE */ /* Define to 1 if you have the `_isnan' function. */ /* #undef HAVE__ISNAN */ /* Define to 1 if you have the `_pclose' function. */ /* #undef HAVE__PCLOSE */ /* Define to 1 if you have the `_popen' function. */ /* #undef HAVE__POPEN */ /* Define to 1 if you have the `_snprintf' function. */ /* #undef HAVE__SNPRINTF */ /* Define to 1 if you have the `_spawnvp' function. */ /* #undef HAVE__SPAWNVP */ /* Define to 1 if you have the `_strdup' function. */ /* #undef HAVE__STRDUP */ /* Define to 1 if you have the `_stricmp' function. */ /* #undef HAVE__STRICMP */ /* Define to 1 if you have the `_strnicmp' function. */ /* #undef HAVE__STRNICMP */ /* Define to 1 if you have the `_strtoi64' function. */ /* #undef HAVE__STRTOI64 */ /* Define to 1 if you have the `_strtoui64' function. */ /* #undef HAVE__STRTOUI64 */ /* Define to 1 if you have the `_vsnprintf' function. */ /* #undef HAVE__VSNPRINTF */ /* Define to 1 if you have the `__builtin_clz' built-in function. */ #define HAVE___BUILTIN_CLZ 1 /* Define to 1 if you have the `__builtin_popcount' built-in function. */ /* #undef HAVE___BUILTIN_POPCOUNT */ /* Define to 1 if you have the `__clear_cache' (potentially built-in) function. */ /* #undef HAVE___CLEAR_CACHE */ /* Define to 1 if you have the `__res_getservers' function. */ /* #undef HAVE___RES_GETSERVERS */ /* Define to 1 if you have the `__res_get_state' function. */ /* #undef HAVE___RES_GET_STATE */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ /* #undef MAJOR_IN_MKDEV */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ /* #undef MAJOR_IN_SYSMACROS */ /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "wine-devel@winehq.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "Wine" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "Wine 1.7.35" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "wine" /* Define to the home page for this package. */ #define PACKAGE_URL "http://www.winehq.org" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.7.35" /* Define to the soname of the libcapi20 library. */ /* #undef SONAME_LIBCAPI20 */ /* Define to the soname of the libcups library. */ /* #undef SONAME_LIBCUPS */ /* Define to the soname of the libcurses library. */ /* #undef SONAME_LIBCURSES */ /* Define to the soname of the libdbus-1 library. */ #define SONAME_LIBDBUS_1 " cygdbus-1-3.dll" /* Define to the soname of the libEGL library. */ /* #undef SONAME_LIBEGL */ /* Define to the soname of the libfontconfig library. */ #define SONAME_LIBFONTCONFIG " cygfontconfig-1.dll" /* Define to the soname of the libfreetype library. */ /* #undef SONAME_LIBFREETYPE */ /* Define to the soname of the libGL library. */ /* #undef SONAME_LIBGL */ /* Define to the soname of the libGLESv2 library. */ /* #undef SONAME_LIBGLESV2 */ /* Define to the soname of the libGLU library. */ /* #undef SONAME_LIBGLU */ /* Define to the soname of the libgnutls library. */ #define SONAME_LIBGNUTLS " cyggnutls-28.dll" /* Define to the soname of the libgsm library. */ #define SONAME_LIBGSM " cyggsm-1.dll" /* Define to the soname of the libgssapi_krb5 library. */ /* #undef SONAME_LIBGSSAPI_KRB5 */ /* Define to the soname of the libhal library. */ /* #undef SONAME_LIBHAL */ /* Define to the soname of the libjpeg library. */ #define SONAME_LIBJPEG " cygjpeg-8.dll" /* Define to the soname of the libkrb5 library. */ /* #undef SONAME_LIBKRB5 */ /* Define to the soname of the libMoltenVK library. */ /* #undef SONAME_LIBMOLTENVK */ /* Define to the soname of the libncurses library. */ #define SONAME_LIBNCURSES " cygncursesw-10.dll" /* Define to the soname of the libnetapi library. */ #define SONAME_LIBNETAPI "libnetapi.dll" /* Define to the soname of the libodbc library. */ #define SONAME_LIBODBC " cygiodbc-2.dll" /* Define to the soname of the libopenal library. */ /* #undef SONAME_LIBOPENAL */ /* Define to the soname of the libOSMesa library. */ /* #undef SONAME_LIBOSMESA */ /* Define to the soname of the libpng library. */ #define SONAME_LIBPNG " cygpng15-15.dll" /* Define to the soname of the libsane library. */ /* #undef SONAME_LIBSANE */ /* Define to the soname of the libSDL2 library. */ /* #undef SONAME_LIBSDL2 */ /* Define to the soname of the libtiff library. */ #define SONAME_LIBTIFF " cygtiff-5.dll" /* Define to the soname of the libv4l1 library. */ /* #undef SONAME_LIBV4L1 */ /* Define to the soname of the libvkd3d library. */ /* #undef SONAME_LIBVKD3D */ /* Define to the soname of the libvulkan library. */ /* #undef SONAME_LIBVULKAN */ /* Define to the soname of the libX11 library. */ /* #undef SONAME_LIBX11 */ /* Define to the soname of the libXcomposite library. */ /* #undef SONAME_LIBXCOMPOSITE */ /* Define to the soname of the libXcursor library. */ /* #undef SONAME_LIBXCURSOR */ /* Define to the soname of the libXext library. */ /* #undef SONAME_LIBXEXT */ /* Define to the soname of the libXfixes library. */ /* #undef SONAME_LIBXFIXES */ /* Define to the soname of the libXi library. */ /* #undef SONAME_LIBXI */ /* Define to the soname of the libXinerama library. */ /* #undef SONAME_LIBXINERAMA */ /* Define to the soname of the libXrandr library. */ /* #undef SONAME_LIBXRANDR */ /* Define to the soname of the libXrender library. */ /* #undef SONAME_LIBXRENDER */ /* Define to the soname of the libxslt library. */ #define SONAME_LIBXSLT " cygxslt-1.dll" /* Define to the soname of the libXxf86vm library. */ /* #undef SONAME_LIBXXF86VM */ /* Define to 1 if the `S_IS*' macros in do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if the X Window System is missing or not being used. */ #define X_DISPLAY_MISSING 1 /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ /* Define to a macro to output a .cfi assembly pseudo-op */ #define __ASM_CFI(str) str /* Define to a macro to define an assembly function */ #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"); /* Define to a macro to generate an assembly function directive */ #define __ASM_FUNC(name) ".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef" /* Define to a macro to generate an assembly function with C calling convention */ #define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code) /* Define to a macro to generate an assembly name from a C symbol */ #define __ASM_NAME(name) name /* Define to a macro to generate an stdcall suffix */ #define __ASM_STDCALL(args) "" /* Define to a macro to generate an assembly function with stdcall calling convention */ #define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code) /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif #endif /* WINE_CROSSTEST */ #endif /* __WINE_CONFIG_H */ ================================================ FILE: wine/wine/debug.h ================================================ /* * Wine debugging interface * * Copyright 1999 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_DEBUG_H #define __WINE_WINE_DEBUG_H #include #include #ifndef GUID_DEFINED #include #endif #ifdef __WINE_WINE_TEST_H #error This file should not be used in Wine tests #endif #ifdef __cplusplus extern "C" { #endif struct _GUID; /* * Internal definitions (do not use these directly) */ enum __wine_debug_class { __WINE_DBCL_FIXME, __WINE_DBCL_ERR, __WINE_DBCL_WARN, __WINE_DBCL_TRACE, __WINE_DBCL_INIT = 7 /* lazy init flag */ }; struct __wine_debug_channel { unsigned char flags; char name[15]; }; #ifndef WINE_NO_TRACE_MSGS # define __WINE_GET_DEBUGGING_TRACE(dbch) ((dbch)->flags & (1 << __WINE_DBCL_TRACE)) #else # define __WINE_GET_DEBUGGING_TRACE(dbch) 0 #endif #ifndef WINE_NO_DEBUG_MSGS # define __WINE_GET_DEBUGGING_WARN(dbch) ((dbch)->flags & (1 << __WINE_DBCL_WARN)) # define __WINE_GET_DEBUGGING_FIXME(dbch) ((dbch)->flags & (1 << __WINE_DBCL_FIXME)) #else # define __WINE_GET_DEBUGGING_WARN(dbch) 0 # define __WINE_GET_DEBUGGING_FIXME(dbch) 0 #endif /* define error macro regardless of what is configured */ #define __WINE_GET_DEBUGGING_ERR(dbch) ((dbch)->flags & (1 << __WINE_DBCL_ERR)) #define __WINE_GET_DEBUGGING(dbcl,dbch) __WINE_GET_DEBUGGING##dbcl(dbch) #define __WINE_IS_DEBUG_ON(dbcl,dbch) \ (__WINE_GET_DEBUGGING##dbcl(dbch) && (__wine_dbg_get_channel_flags(dbch) & (1 << __WINE_DBCL##dbcl))) #ifdef __GNUC__ #define __WINE_DPRINTF(dbcl,dbch) \ do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \ struct __wine_debug_channel * const __dbch = (dbch); \ const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \ __WINE_DBG_LOG #define __WINE_DBG_LOG(args...) \ wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0) #define __WINE_PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args))) #ifdef WINE_NO_TRACE_MSGS #define WINE_TRACE(args...) do { } while(0) #define WINE_TRACE_(ch) WINE_TRACE #endif #ifdef WINE_NO_DEBUG_MSGS #define WINE_WARN(args...) do { } while(0) #define WINE_WARN_(ch) WINE_WARN #define WINE_FIXME(args...) do { } while(0) #define WINE_FIXME_(ch) WINE_FIXME #endif #elif defined(__SUNPRO_C) #define __WINE_DPRINTF(dbcl,dbch) \ do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \ struct __wine_debug_channel * const __dbch = (dbch); \ const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \ __WINE_DBG_LOG #define __WINE_DBG_LOG(...) \ wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0) #define __WINE_PRINTF_ATTR(fmt,args) #ifdef WINE_NO_TRACE_MSGS #define WINE_TRACE(...) do { } while(0) #define WINE_TRACE_(ch) WINE_TRACE #endif #ifdef WINE_NO_DEBUG_MSGS #define WINE_WARN(...) do { } while(0) #define WINE_WARN_(ch) WINE_WARN #define WINE_FIXME(...) do { } while(0) #define WINE_FIXME_(ch) WINE_FIXME #endif #elif defined(_MSC_VER) #define __WINE_DPRINTF(dbcl,dbch) \ do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \ struct __wine_debug_channel * const __dbch = (dbch); \ const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \ __WINE_DBG_LOG #define __WINE_DBG_LOG(...) \ wine_dbg_log( __dbcl, __dbch, __FUNCTION__, __VA_ARGS__); } } while(0) #define __WINE_PRINTF_ATTR(fmt,args) #ifdef WINE_NO_TRACE_MSGS #define WINE_TRACE(...) do { } while(0) #define WINE_TRACE_(ch) WINE_TRACE #endif #ifdef WINE_NO_DEBUG_MSGS #define WINE_WARN(...) do { } while(0) #define WINE_WARN_(ch) WINE_WARN #define WINE_FIXME(...) do { } while(0) #define WINE_FIXME_(ch) WINE_FIXME #endif #else /* !__GNUC__ && !__SUNPRO_C && !_MSC_VER */ #define __WINE_DPRINTF(dbcl,dbch) \ (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \ (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \ (void)0 : (void)wine_dbg_printf #define __WINE_PRINTF_ATTR(fmt, args) #endif /* !__GNUC__ && !__SUNPRO_C && !_MSC_VER */ struct __wine_debug_functions { char * (*get_temp_buffer)( size_t n ); void (*release_temp_buffer)( char *buffer, size_t n ); const char * (*dbgstr_an)( const char * s, int n ); const char * (*dbgstr_wn)( const WCHAR *s, int n ); int (*dbg_vprintf)( const char *format, va_list args ); int (*dbg_vlog)( enum __wine_debug_class cls, struct __wine_debug_channel *channel, const char *function, const char *format, va_list args ); }; extern unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel ); extern int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel, unsigned char set, unsigned char clear ); extern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs, struct __wine_debug_functions *old_funcs, size_t size ); /* * Exported definitions and macros */ /* These functions return a printable version of a string, including quotes. The string will be valid for some time, but not indefinitely as strings are re-used. */ extern const char *wine_dbgstr_an( const char * s, int n ); extern const char *wine_dbgstr_wn( const WCHAR *s, int n ); extern const char *wine_dbg_sprintf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2); extern int wine_dbg_printf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2); extern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func, const char *format, ... ) __WINE_PRINTF_ATTR(4,5); static inline const char *wine_dbgstr_a( const char *s ) { return wine_dbgstr_an( s, -1 ); } static inline const char *wine_dbgstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); } static inline const char *wine_dbgstr_guid( const GUID *id ) { if (!id) return "(null)"; if (!((ULONG_PTR)id >> 16)) return wine_dbg_sprintf( "", (WORD)(ULONG_PTR)id ); return wine_dbg_sprintf( "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", id->Data1, id->Data2, id->Data3, id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3], id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] ); } static inline const char *wine_dbgstr_point( const POINT *pt ) { if (!pt) return "(null)"; return wine_dbg_sprintf( "(%d,%d)", pt->x, pt->y ); } static inline const char *wine_dbgstr_rect( const RECT *rect ) { if (!rect) return "(null)"; return wine_dbg_sprintf( "(%d,%d)-(%d,%d)", rect->left, rect->top, rect->right, rect->bottom ); } static inline const char *wine_dbgstr_longlong( ULONGLONG ll ) { if (sizeof(ll) > sizeof(unsigned long) && ll >> 32) return wine_dbg_sprintf( "%lx%08lx", (unsigned long)(ll >> 32), (unsigned long)ll ); else return wine_dbg_sprintf( "%lx", (unsigned long)ll ); } #if defined(__oaidl_h__) && defined(V_VT) static inline const char *wine_dbgstr_vt( VARTYPE vt ) { static const char *const variant_types[] = { "VT_EMPTY","VT_NULL","VT_I2","VT_I4","VT_R4","VT_R8","VT_CY","VT_DATE", "VT_BSTR","VT_DISPATCH","VT_ERROR","VT_BOOL","VT_VARIANT","VT_UNKNOWN", "VT_DECIMAL","15","VT_I1","VT_UI1","VT_UI2","VT_UI4","VT_I8","VT_UI8", "VT_INT","VT_UINT","VT_VOID","VT_HRESULT","VT_PTR","VT_SAFEARRAY", "VT_CARRAY","VT_USERDEFINED","VT_LPSTR","VT_LPWSTR","32","33","34","35", "VT_RECORD","VT_INT_PTR","VT_UINT_PTR","39","40","41","42","43","44","45", "46","47","48","49","50","51","52","53","54","55","56","57","58","59","60", "61","62","63","VT_FILETIME","VT_BLOB","VT_STREAM","VT_STORAGE", "VT_STREAMED_OBJECT","VT_STORED_OBJECT","VT_BLOB_OBJECT","VT_CF","VT_CLSID", "VT_VERSIONED_STREAM" }; static const char *const variant_flags[16] = { "", "|VT_VECTOR", "|VT_ARRAY", "|VT_VECTOR|VT_ARRAY", "|VT_BYREF", "|VT_VECTOR|VT_BYREF", "|VT_ARRAY|VT_BYREF", "|VT_VECTOR|VT_ARRAY|VT_BYREF", "|VT_RESERVED", "|VT_VECTOR|VT_RESERVED", "|VT_ARRAY|VT_RESERVED", "|VT_VECTOR|VT_ARRAY|VT_RESERVED", "|VT_BYREF|VT_RESERVED", "|VT_VECTOR|VT_BYREF|VT_RESERVED", "|VT_ARRAY|VT_BYREF|VT_RESERVED", "|VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED", }; if (vt & ~VT_TYPEMASK) return wine_dbg_sprintf( "%s%s", wine_dbgstr_vt(vt&VT_TYPEMASK), variant_flags[vt>>12] ); if (vt < sizeof(variant_types)/sizeof(*variant_types)) return variant_types[vt]; if (vt == VT_BSTR_BLOB) return "VT_BSTR_BLOB"; return wine_dbg_sprintf( "vt(invalid %x)", vt ); } static inline const char *wine_dbgstr_variant( const VARIANT *v ) { if (!v) return "(null)"; if (V_VT(v) & VT_BYREF) { if (V_VT(v) == (VT_VARIANT|VT_BYREF)) return wine_dbg_sprintf( "%p {VT_VARIANT|VT_BYREF: %s}", v, wine_dbgstr_variant(V_VARIANTREF(v)) ); if (V_VT(v) == (VT_BSTR|VT_BYREF)) return wine_dbg_sprintf( "%p {VT_BSTR|VT_BYREF: %s}", v, V_BSTRREF(v) ? wine_dbgstr_w(*V_BSTRREF(v)) : "(none)" ); return wine_dbg_sprintf( "%p {%s %p}", v, wine_dbgstr_vt(V_VT(v)), V_BYREF(v) ); } if (V_ISARRAY(v) || V_ISVECTOR(v)) return wine_dbg_sprintf( "%p {%s %p}", v, wine_dbgstr_vt(V_VT(v)), V_ARRAY(v) ); switch(V_VT(v)) { case VT_EMPTY: return wine_dbg_sprintf( "%p {VT_EMPTY}", v ); case VT_NULL: return wine_dbg_sprintf( "%p {VT_NULL}", v ); case VT_I2: return wine_dbg_sprintf( "%p {VT_I2: %d}", v, V_I2(v) ); case VT_I4: return wine_dbg_sprintf( "%p {VT_I4: %d}", v, V_I4(v) ); case VT_R4: return wine_dbg_sprintf( "%p {VT_R4: %f}", v, V_R4(v) ); case VT_R8: return wine_dbg_sprintf( "%p {VT_R8: %lf}", v, V_R8(v) ); case VT_CY: return wine_dbg_sprintf( "%p {VT_CY: %s}", v, wine_dbgstr_longlong(V_CY(v).int64) ); case VT_DATE: return wine_dbg_sprintf( "%p {VT_DATE: %lf}", v, V_DATE(v) ); case VT_LPSTR: return wine_dbg_sprintf( "%p {VT_LPSTR: %s}", v, wine_dbgstr_a((const char *)V_BSTR(v)) ); case VT_LPWSTR: return wine_dbg_sprintf( "%p {VT_LPWSTR: %s}", v, wine_dbgstr_w(V_BSTR(v)) ); case VT_BSTR: return wine_dbg_sprintf( "%p {VT_BSTR: %s}", v, wine_dbgstr_w(V_BSTR(v)) ); case VT_DISPATCH: return wine_dbg_sprintf( "%p {VT_DISPATCH: %p}", v, V_DISPATCH(v) ); case VT_ERROR: return wine_dbg_sprintf( "%p {VT_ERROR: %08x}", v, V_ERROR(v) ); case VT_BOOL: return wine_dbg_sprintf( "%p {VT_BOOL: %x}", v, V_BOOL(v) ); case VT_UNKNOWN: return wine_dbg_sprintf( "%p {VT_UNKNOWN: %p}", v, V_UNKNOWN(v) ); case VT_I1: return wine_dbg_sprintf( "%p {VT_I1: %d}", v, V_I1(v) ); case VT_UI1: return wine_dbg_sprintf( "%p {VT_UI1: %u}", v, V_UI1(v) ); case VT_UI2: return wine_dbg_sprintf( "%p {VT_UI2: %d}", v, V_UI2(v) ); case VT_UI4: return wine_dbg_sprintf( "%p {VT_UI4: %d}", v, V_UI4(v) ); case VT_I8: return wine_dbg_sprintf( "%p {VT_I8: %s}", v, wine_dbgstr_longlong(V_I8(v)) ); case VT_UI8: return wine_dbg_sprintf( "%p {VT_UI8: %s}", v, wine_dbgstr_longlong(V_UI8(v)) ); case VT_INT: return wine_dbg_sprintf( "%p {VT_INT: %d}", v, V_INT(v) ); case VT_UINT: return wine_dbg_sprintf( "%p {VT_UINT: %u}", v, V_UINT(v) ); case VT_VOID: return wine_dbg_sprintf( "%p {VT_VOID}", v ); case VT_RECORD: return wine_dbg_sprintf( "%p {VT_RECORD: %p %p}", v, V_RECORD(v), V_RECORDINFO(v) ); default: return wine_dbg_sprintf( "%p {vt %s}", v, wine_dbgstr_vt(V_VT(v)) ); } } #endif /* defined(__oaidl_h__) && defined(V_VT) */ #ifndef WINE_TRACE #define WINE_TRACE __WINE_DPRINTF(_TRACE,__wine_dbch___default) #define WINE_TRACE_(ch) __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch) #endif #define WINE_TRACE_ON(ch) __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch) #ifndef WINE_WARN #define WINE_WARN __WINE_DPRINTF(_WARN,__wine_dbch___default) #define WINE_WARN_(ch) __WINE_DPRINTF(_WARN,&__wine_dbch_##ch) #endif #define WINE_WARN_ON(ch) __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch) #ifndef WINE_FIXME #define WINE_FIXME __WINE_DPRINTF(_FIXME,__wine_dbch___default) #define WINE_FIXME_(ch) __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch) #endif #define WINE_FIXME_ON(ch) __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch) #define WINE_ERR __WINE_DPRINTF(_ERR,__wine_dbch___default) #define WINE_ERR_(ch) __WINE_DPRINTF(_ERR,&__wine_dbch_##ch) #define WINE_ERR_ON(ch) __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch) #define WINE_DECLARE_DEBUG_CHANNEL(ch) \ static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch } #define WINE_DEFAULT_DEBUG_CHANNEL(ch) \ static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }; \ static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch #define WINE_DPRINTF wine_dbg_printf #define WINE_MESSAGE wine_dbg_printf #ifdef __WINESRC__ /* Wine uses shorter names that are very likely to conflict with other software */ static inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); } static inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); } static inline const char *debugstr_guid( const struct _GUID *id ) { return wine_dbgstr_guid(id); } static inline const char *debugstr_a( const char *s ) { return wine_dbgstr_an( s, -1 ); } static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); } #if defined(__oaidl_h__) && defined(V_VT) static inline const char *debugstr_vt( VARTYPE vt ) { return wine_dbgstr_vt( vt ); } static inline const char *debugstr_variant( const VARIANT *v ) { return wine_dbgstr_variant( v ); } #endif #define TRACE WINE_TRACE #define TRACE_(ch) WINE_TRACE_(ch) #define TRACE_ON(ch) WINE_TRACE_ON(ch) #define WARN WINE_WARN #define WARN_(ch) WINE_WARN_(ch) #define WARN_ON(ch) WINE_WARN_ON(ch) #define FIXME WINE_FIXME #define FIXME_(ch) WINE_FIXME_(ch) #define FIXME_ON(ch) WINE_FIXME_ON(ch) #undef ERR /* Solaris got an 'ERR' define in */ #define ERR WINE_ERR #define ERR_(ch) WINE_ERR_(ch) #define ERR_ON(ch) WINE_ERR_ON(ch) #define DPRINTF WINE_DPRINTF #define MESSAGE WINE_MESSAGE #endif /* __WINESRC__ */ #ifdef __cplusplus } #endif #endif /* __WINE_WINE_DEBUG_H */ ================================================ FILE: wine/wine/exception.h ================================================ /* * Wine exception handling * * Copyright (c) 1999 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_EXCEPTION_H #define __WINE_WINE_EXCEPTION_H #include typedef jmp_buf sigjmp_buf; #include #include #define DECLSPEC_HIDDEN #ifdef __cplusplus extern "C" { #endif /* The following definitions allow using exceptions in Wine and Winelib code * * They should be used like this: * * __TRY * { * do some stuff that can raise an exception * } * __EXCEPT(filter_func) * { * handle the exception here * } * __ENDTRY * * or * * __TRY * { * do some stuff that can raise an exception * } * __FINALLY(finally_func) * * The filter_func and finally_func functions must be defined like this: * * LONG CALLBACK filter_func( PEXCEPTION_POINTERS __eptr ) { ... } * * void CALLBACK finally_func( BOOL __normal ) { ... } * * The filter function must return one of the EXCEPTION_* code; it can * use GetExceptionInformation() and GetExceptionCode() to retrieve the * exception info. * * Warning: Inside a __TRY or __EXCEPT block, 'break' or 'continue' statements * break out of the current block, but avoid using them because they * won't work when compiling with native exceptions. You cannot use * 'return', 'goto', or 'longjmp' to leave a __TRY block either, as * this will surely crash. You can use 'return', 'goto', or 'longjmp' * to leave an __EXCEPT block though. * * -- AJ */ #ifndef __GNUC__ #define __attribute__(x) /* nothing */ #endif /* Define this if you want to use your compiler built-in __try/__except support. * This is only useful when compiling to a native Windows binary, as the built-in * compiler exceptions will most certainly not work under Winelib. */ #ifdef USE_COMPILER_EXCEPTIONS #define __TRY __try #define __EXCEPT(func) __except((func)(GetExceptionInformation())) #define __EXCEPT_CTX(func, ctx) __except((func)(GetExceptionInformation(), ctx)) #define __FINALLY(func) __finally { (func)(!AbnormalTermination()); } #define __FINALLY_CTX(func, ctx) __finally { (func)(!AbnormalTermination(), ctx); } #define __ENDTRY /*nothing*/ #define __EXCEPT_PAGE_FAULT __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION) #define __EXCEPT_ALL __except(EXCEPTION_EXECUTE_HANDLER) #else /* USE_COMPILER_EXCEPTIONS */ #if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__WINE_SETJMP_H) #define sigjmp_buf jmp_buf #define sigsetjmp(buf,sigs) setjmp(buf) #define siglongjmp(buf,val) longjmp(buf,val) #endif extern void DECLSPEC_NORETURN __wine_rtl_unwind(EXCEPTION_REGISTRATION_RECORD* frame, EXCEPTION_RECORD *record, void (*target)(void) ) DECLSPEC_HIDDEN ; extern DWORD __wine_exception_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN; extern DWORD __wine_exception_ctx_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN; extern DWORD __wine_exception_handler_page_fault( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN; extern DWORD __wine_exception_handler_all( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN; extern DWORD __wine_finally_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN; extern DWORD __wine_finally_ctx_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN; #define __TRY \ do { __WINE_FRAME __f; \ int __first = 1; \ for (;;) if (!__first) \ { \ do { #define __EXCEPT(func) \ } while(0); \ __wine_pop_frame( &__f.frame ); \ break; \ } else { \ __f.frame.Handler = __wine_exception_handler; \ __f.u.filter = (func); \ if (sigsetjmp( __f.jmp, 0 )) { \ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ do { #define __EXCEPT_CTX(func, context) \ } while(0); \ __wine_pop_frame( &__f.frame ); \ break; \ } else { \ __f.frame.Handler = __wine_exception_ctx_handler; \ __f.u.filter_ctx = (func); \ __f.ctx = context; \ if (sigsetjmp( __f.jmp, 0 )) { \ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ do { /* convenience handler for page fault exceptions */ #define __EXCEPT_PAGE_FAULT \ } while(0); \ __wine_pop_frame( &__f.frame ); \ break; \ } else { \ __f.frame.Handler = __wine_exception_handler_page_fault; \ if (sigsetjmp( __f.jmp, 0 )) { \ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ do { /* convenience handler for all exception */ #define __EXCEPT_ALL \ } while(0); \ __wine_pop_frame( &__f.frame ); \ break; \ } else { \ __f.frame.Handler = __wine_exception_handler_all; \ if (sigsetjmp( __f.jmp, 0 )) { \ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ do { #define __ENDTRY \ } while (0); \ break; \ } \ __wine_push_frame( &__f.frame ); \ __first = 0; \ } \ } while (0); #define __FINALLY(func) \ } while(0); \ __wine_pop_frame( &__f.frame ); \ (func)(1); \ break; \ } else { \ __f.frame.Handler = __wine_finally_handler; \ __f.u.finally_func = (func); \ __wine_push_frame( &__f.frame ); \ __first = 0; \ } \ } while (0); #define __FINALLY_CTX(func, context) \ } while(0); \ __wine_pop_frame( &__f.frame ); \ (func)(1, context); \ break; \ } else { \ __f.frame.Handler = __wine_finally_ctx_handler; \ __f.u.finally_func_ctx = (func); \ __f.ctx = context; \ __wine_push_frame( &__f.frame ); \ __first = 0; \ } \ } while (0); typedef LONG (CALLBACK *__WINE_FILTER)(PEXCEPTION_POINTERS); typedef LONG (CALLBACK *__WINE_FILTER_CTX)(PEXCEPTION_POINTERS, void*); typedef void (CALLBACK *__WINE_FINALLY)(BOOL); typedef void (CALLBACK *__WINE_FINALLY_CTX)(BOOL, void*); #define GetExceptionInformation() (__eptr) #define GetExceptionCode() (__eptr->ExceptionRecord->ExceptionCode) #define AbnormalTermination() (!__normal) typedef struct __tagWINE_FRAME { EXCEPTION_REGISTRATION_RECORD frame; union { /* exception data */ __WINE_FILTER filter; __WINE_FILTER_CTX filter_ctx; /* finally data */ __WINE_FINALLY finally_func; __WINE_FINALLY_CTX finally_func_ctx; } u; void *ctx; sigjmp_buf jmp; /* hack to make GetExceptionCode() work in handler */ DWORD ExceptionCode; const struct __tagWINE_FRAME *ExceptionRecord; } __WINE_FRAME; #endif /* USE_COMPILER_EXCEPTIONS */ #define Prev Next static inline EXCEPTION_REGISTRATION_RECORD *__wine_push_frame( EXCEPTION_REGISTRATION_RECORD *frame ) { #if defined(__GNUC__) && defined(__i386__) EXCEPTION_REGISTRATION_RECORD *prev; __asm__ __volatile__(".byte 0x64\n\tmovl (0),%0" "\n\tmovl %0,(%1)" "\n\t.byte 0x64\n\tmovl %1,(0)" : "=&r" (prev) : "r" (frame) : "memory" ); return prev; #else NT_TIB *teb = (NT_TIB *)NtCurrentTeb(); frame->Prev = teb->ExceptionList; teb->ExceptionList = frame; return frame->Prev; #endif } static inline EXCEPTION_REGISTRATION_RECORD *__wine_pop_frame( EXCEPTION_REGISTRATION_RECORD *frame ) { #if defined(__GNUC__) && defined(__i386__) __asm__ __volatile__(".byte 0x64\n\tmovl %0,(0)" : : "r" (frame->Prev) : "memory" ); return frame->Prev; #else NT_TIB *teb = (NT_TIB *)NtCurrentTeb(); teb->ExceptionList = frame->Prev; return frame->Prev; #endif } static inline EXCEPTION_REGISTRATION_RECORD *__wine_get_frame(void) { #if defined(__GNUC__) && defined(__i386__) EXCEPTION_REGISTRATION_RECORD *ret; __asm__ __volatile__(".byte 0x64\n\tmovl (0),%0" : "=r" (ret) ); return ret; #else NT_TIB *teb = (NT_TIB *)NtCurrentTeb(); return teb->ExceptionList; #endif } /* Exception handling flags - from OS/2 2.0 exception handling */ /* Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD */ #define EH_NONCONTINUABLE 0x01 #define EH_UNWINDING 0x02 #define EH_EXIT_UNWIND 0x04 #define EH_STACK_INVALID 0x08 #define EH_NESTED_CALL 0x10 #define EH_TARGET_UNWIND 0x20 #define EH_COLLIDED_UNWIND 0x40 /* Wine-specific exceptions codes */ #define EXCEPTION_WINE_STUB 0x80000100 /* stub entry point called */ #define EXCEPTION_WINE_ASSERTION 0x80000101 /* assertion failed */ /* unhandled return status from vm86 mode */ #define EXCEPTION_VM86_INTx 0x80000110 #define EXCEPTION_VM86_STI 0x80000111 #define EXCEPTION_VM86_PICRETURN 0x80000112 extern void __wine_enter_vm86( CONTEXT *context ); #undef Prev #ifdef __cplusplus } #endif #endif /* __WINE_WINE_EXCEPTION_H */ ================================================ FILE: wine/wine/heap.h ================================================ /* * Wine heap memory allocation wrappers * * Copyright 2006 Jacek Caban for CodeWeavers * Copyright 2013, 2018 Michael Stefaniuc * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_HEAP_H #define __WINE_WINE_HEAP_H #include static inline void * __WINE_ALLOC_SIZE(1) heap_alloc(SIZE_T len) { return HeapAlloc(GetProcessHeap(), 0, len); } static inline void * __WINE_ALLOC_SIZE(1) heap_alloc_zero(SIZE_T len) { return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); } static inline void * __WINE_ALLOC_SIZE(2) heap_realloc(void *mem, SIZE_T len) { if (!mem) return HeapAlloc(GetProcessHeap(), 0, len); return HeapReAlloc(GetProcessHeap(), 0, mem, len); } static inline void heap_free(void *mem) { HeapFree(GetProcessHeap(), 0, mem); } static inline void *heap_calloc(SIZE_T count, SIZE_T size) { SIZE_T len = count * size; if (size && len / size != count) return NULL; return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); } #endif /* __WINE_WINE_HEAP_H */ ================================================ FILE: wine/wine/library.h ================================================ /* * Definitions for the Wine library * * Copyright 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_LIBRARY_H #define __WINE_WINE_LIBRARY_H #include #include #include #include #ifdef __WINE_WINE_TEST_H #error This file should not be used in Wine tests #endif #ifdef __cplusplus extern "C" { #endif /* configuration */ extern const char *wine_get_build_dir(void); extern const char *wine_get_config_dir(void); extern const char *wine_get_data_dir(void); extern const char *wine_get_server_dir(void); extern const char *wine_get_user_name(void); extern const char *wine_get_version(void); extern const char *wine_get_build_id(void); extern void wine_init_argv0_path( const char *argv0 ); extern void wine_exec_wine_binary( const char *name, char **argv, const char *env_var ); /* dll loading */ typedef void (*load_dll_callback_t)( void *, const char * ); extern void *wine_dlopen( const char *filename, int flag, char *error, size_t errorsize ); extern void *wine_dlsym( void *handle, const char *symbol, char *error, size_t errorsize ); extern int wine_dlclose( void *handle, char *error, size_t errorsize ); extern void wine_dll_set_callback( load_dll_callback_t load ); extern void *wine_dll_load( const char *filename, char *error, int errorsize, int *file_exists ); extern void *wine_dll_load_main_exe( const char *name, char *error, int errorsize, int test_only, int *file_exists ); extern void wine_dll_unload( void *handle ); extern const char *wine_dll_enum_load_path( unsigned int index ); extern int wine_dll_get_owner( const char *name, char *buffer, int size, int *file_exists ); extern int __wine_main_argc; extern char **__wine_main_argv; extern WCHAR **__wine_main_wargv; extern void __wine_dll_register( const IMAGE_NT_HEADERS *header, const char *filename ); extern void wine_init( int argc, char *argv[], char *error, int error_size ); /* portability */ extern void DECLSPEC_NORETURN wine_switch_to_stack( void (*func)(void *), void *arg, void *stack ); extern int wine_call_on_stack( int (*func)(void *), void *arg, void *stack ); /* memory mappings */ extern void *wine_anon_mmap( void *start, size_t size, int prot, int flags ); extern void wine_mmap_add_reserved_area( void *addr, size_t size ); extern void wine_mmap_remove_reserved_area( void *addr, size_t size, int unmap ); extern int wine_mmap_is_in_reserved_area( void *addr, size_t size ); extern int wine_mmap_enum_reserved_areas( int (*enum_func)(void *base, size_t size, void *arg), void *arg, int top_down ); #ifdef __i386__ /* LDT management */ extern void wine_ldt_init_locking( void (*lock_func)(void), void (*unlock_func)(void) ); extern void wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry ); extern int wine_ldt_set_entry( unsigned short sel, const LDT_ENTRY *entry ); extern int wine_ldt_is_system( unsigned short sel ); extern void *wine_ldt_get_ptr( unsigned short sel, unsigned long offset ); extern unsigned short wine_ldt_alloc_entries( int count ); extern unsigned short wine_ldt_realloc_entries( unsigned short sel, int oldcount, int newcount ); extern void wine_ldt_free_entries( unsigned short sel, int count ); extern unsigned short wine_ldt_alloc_fs(void); extern void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry ); extern void wine_ldt_free_fs( unsigned short sel ); /* the local copy of the LDT */ __declspec(dllimport) struct __wine_ldt_copy { void *base[8192]; /* base address or 0 if entry is free */ unsigned long limit[8192]; /* limit in bytes or 0 if entry is free */ unsigned char flags[8192]; /* flags (defined below) */ } wine_ldt_copy; #define WINE_LDT_FLAGS_DATA 0x13 /* Data segment */ #define WINE_LDT_FLAGS_STACK 0x17 /* Stack segment */ #define WINE_LDT_FLAGS_CODE 0x1b /* Code segment */ #define WINE_LDT_FLAGS_TYPE_MASK 0x1f /* Mask for segment type */ #define WINE_LDT_FLAGS_32BIT 0x40 /* Segment is 32-bit (code or stack) */ #define WINE_LDT_FLAGS_ALLOCATED 0x80 /* Segment is allocated (no longer free) */ /* helper functions to manipulate the LDT_ENTRY structure */ static inline void wine_ldt_set_base( LDT_ENTRY *ent, const void *base ) { ent->BaseLow = (WORD)(ULONG_PTR)base; ent->HighWord.Bits.BaseMid = (BYTE)((ULONG_PTR)base >> 16); ent->HighWord.Bits.BaseHi = (BYTE)((ULONG_PTR)base >> 24); } static inline void wine_ldt_set_limit( LDT_ENTRY *ent, unsigned int limit ) { if ((ent->HighWord.Bits.Granularity = (limit >= 0x100000))) limit >>= 12; ent->LimitLow = (WORD)limit; ent->HighWord.Bits.LimitHi = (limit >> 16); } static inline void *wine_ldt_get_base( const LDT_ENTRY *ent ) { return (void *)(ent->BaseLow | (ULONG_PTR)ent->HighWord.Bits.BaseMid << 16 | (ULONG_PTR)ent->HighWord.Bits.BaseHi << 24); } static inline unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent ) { unsigned int limit = ent->LimitLow | (ent->HighWord.Bits.LimitHi << 16); if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff; return limit; } static inline void wine_ldt_set_flags( LDT_ENTRY *ent, unsigned char flags ) { ent->HighWord.Bits.Dpl = 3; ent->HighWord.Bits.Pres = 1; ent->HighWord.Bits.Type = flags; ent->HighWord.Bits.Sys = 0; ent->HighWord.Bits.Reserved_0 = 0; ent->HighWord.Bits.Default_Big = (flags & WINE_LDT_FLAGS_32BIT) != 0; } static inline unsigned char wine_ldt_get_flags( const LDT_ENTRY *ent ) { unsigned char ret = (unsigned char)ent->HighWord.Bits.Type; if (ent->HighWord.Bits.Default_Big) ret |= WINE_LDT_FLAGS_32BIT; return ret; } static inline int wine_ldt_is_empty( const LDT_ENTRY *ent ) { const DWORD *dw = (const DWORD *)ent; return (dw[0] | dw[1]) == 0; } /* winnt.h*/ #undef FORCEINLINE #ifndef FORCEINLINE # if defined(_MSC_VER) && (_MSC_VER >= 1200) # define FORCEINLINE __forceinline # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) # define FORCEINLINE inline __attribute__((always_inline)) # else # define FORCEINLINE inline # endif #endif /* segment register access */ #define USE_SREG_WORKAROUND 1 # if !USE_SREG_WORKAROUND && (defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))) # define __DEFINE_GET_SEG(seg) \ static FORCEINLINE unsigned short wine_get_##seg(void) \ { unsigned short res; __asm__ __volatile__("movw %%" #seg ",%w0" : "=r"(res)); return res; } # define __DEFINE_SET_SEG(seg) \ static FORCEINLINE void wine_set_##seg(unsigned int val) \ { __asm__("movw %w0,%%" #seg : : "r" (val)); } # elif !USE_SREG_WORKAROUND && defined(_MSC_VER) # define __DEFINE_GET_SEG(seg) \ static inline unsigned short wine_get_##seg(void) \ { unsigned short res; __asm { mov res, seg } return res; } # define __DEFINE_SET_SEG(seg) \ static inline void wine_set_##seg(unsigned int val) { __asm { mov seg, val } } # else /* __GNUC__ || _MSC_VER */ # define __DEFINE_GET_SEG(seg) extern unsigned short wine_get_##seg(void); # define __DEFINE_SET_SEG(seg) extern void wine_set_##seg(unsigned int); # endif /* __GNUC__ || _MSC_VER */ __DEFINE_GET_SEG(cs) __DEFINE_GET_SEG(ds) __DEFINE_GET_SEG(es) __DEFINE_GET_SEG(fs) __DEFINE_GET_SEG(gs) __DEFINE_GET_SEG(ss) __DEFINE_SET_SEG(fs) __DEFINE_SET_SEG(gs) #undef __DEFINE_GET_SEG #undef __DEFINE_SET_SEG #endif /* __i386__ */ #ifdef __cplusplus } #endif #endif /* __WINE_WINE_LIBRARY_H */ ================================================ FILE: wine/wine/list.h ================================================ /* * Linked lists support * * Copyright (C) 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_SERVER_LIST_H #define __WINE_SERVER_LIST_H #include struct list { struct list *next; struct list *prev; }; /* Define a list like so: * * struct gadget * { * struct list entry; <-- doesn't have to be the first item in the struct * int a, b; * }; * * static struct list global_gadgets = LIST_INIT( global_gadgets ); * * or * * struct some_global_thing * { * struct list gadgets; * }; * * list_init( &some_global_thing->gadgets ); * * Manipulate it like this: * * list_add_head( &global_gadgets, &new_gadget->entry ); * list_remove( &new_gadget->entry ); * list_add_after( &some_random_gadget->entry, &new_gadget->entry ); * * And to iterate over it: * * struct gadget *gadget; * LIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry ) * { * ... * } * */ /* add an element after the specified one */ static inline void list_add_after( struct list *elem, struct list *to_add ) { to_add->next = elem->next; to_add->prev = elem; elem->next->prev = to_add; elem->next = to_add; } /* add an element before the specified one */ static inline void list_add_before( struct list *elem, struct list *to_add ) { to_add->next = elem; to_add->prev = elem->prev; elem->prev->next = to_add; elem->prev = to_add; } /* add element at the head of the list */ static inline void list_add_head( struct list *list, struct list *elem ) { list_add_after( list, elem ); } /* add element at the tail of the list */ static inline void list_add_tail( struct list *list, struct list *elem ) { list_add_before( list, elem ); } /* remove an element from its list */ static inline void list_remove( struct list *elem ) { elem->next->prev = elem->prev; elem->prev->next = elem->next; } /* get the next element */ static inline struct list *list_next( const struct list *list, const struct list *elem ) { struct list *ret = elem->next; if (elem->next == list) ret = NULL; return ret; } /* get the previous element */ static inline struct list *list_prev( const struct list *list, const struct list *elem ) { struct list *ret = elem->prev; if (elem->prev == list) ret = NULL; return ret; } /* get the first element */ static inline struct list *list_head( const struct list *list ) { return list_next( list, list ); } /* get the last element */ static inline struct list *list_tail( const struct list *list ) { return list_prev( list, list ); } /* check if a list is empty */ static inline int list_empty( const struct list *list ) { return list->next == list; } /* initialize a list */ static inline void list_init( struct list *list ) { list->next = list->prev = list; } /* count the elements of a list */ static inline unsigned int list_count( const struct list *list ) { unsigned count = 0; const struct list *ptr; for (ptr = list->next; ptr != list; ptr = ptr->next) count++; return count; } /* move all elements from src to the tail of dst */ static inline void list_move_tail( struct list *dst, struct list *src ) { if (list_empty(src)) return; dst->prev->next = src->next; src->next->prev = dst->prev; dst->prev = src->prev; src->prev->next = dst; list_init(src); } /* move all elements from src to the head of dst */ static inline void list_move_head( struct list *dst, struct list *src ) { if (list_empty(src)) return; dst->next->prev = src->prev; src->prev->next = dst->next; dst->next = src->next; src->next->prev = dst; list_init(src); } /* iterate through the list */ #define LIST_FOR_EACH(cursor,list) \ for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next) /* iterate through the list, with safety against removal */ #define LIST_FOR_EACH_SAFE(cursor, cursor2, list) \ for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \ (cursor) != (list); \ (cursor) = (cursor2), (cursor2) = (cursor)->next) /* iterate through the list using a list entry */ #define LIST_FOR_EACH_ENTRY(elem, list, type, field) \ for ((elem) = LIST_ENTRY((list)->next, type, field); \ &(elem)->field != (list); \ (elem) = LIST_ENTRY((elem)->field.next, type, field)) /* iterate through the list using a list entry, with safety against removal */ #define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \ for ((cursor) = LIST_ENTRY((list)->next, type, field), \ (cursor2) = LIST_ENTRY((cursor)->field.next, type, field); \ &(cursor)->field != (list); \ (cursor) = (cursor2), \ (cursor2) = LIST_ENTRY((cursor)->field.next, type, field)) /* iterate through the list in reverse order */ #define LIST_FOR_EACH_REV(cursor,list) \ for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev) /* iterate through the list in reverse order, with safety against removal */ #define LIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \ for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \ (cursor) != (list); \ (cursor) = (cursor2), (cursor2) = (cursor)->prev) /* iterate through the list in reverse order using a list entry */ #define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \ for ((elem) = LIST_ENTRY((list)->prev, type, field); \ &(elem)->field != (list); \ (elem) = LIST_ENTRY((elem)->field.prev, type, field)) /* iterate through the list in reverse order using a list entry, with safety against removal */ #define LIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \ for ((cursor) = LIST_ENTRY((list)->prev, type, field), \ (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field); \ &(cursor)->field != (list); \ (cursor) = (cursor2), \ (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field)) /* macros for statically initialized lists */ #undef LIST_INIT #define LIST_INIT(list) { &(list), &(list) } /* get pointer to object containing list element */ #undef LIST_ENTRY #define LIST_ENTRY(elem, type, field) \ ((type *)((char *)(elem) - offsetof(type, field))) #endif /* __WINE_SERVER_LIST_H */ ================================================ FILE: wine/wine/mmsystem16.h ================================================ /* * MMSYSTEM - Multimedia Wine Extension ... :-) * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_MMSYSTEM16_H #define __WINE_WINE_MMSYSTEM16_H //#include "winuser.rh" #include "windef.h" #include "wine/windef16.h" #define DECL_WINELIB_TYPE_AW(x) //#include "mmsystem.h" #ifdef _MSC_VER #include #else #endif #include #ifdef _MSC_VER #include #else #include "../windows/mmddk.h" #endif #define DRV_QUERYDRVENTRY (DRV_RESERVED + 1) //undefined #define DRV_SUCCESS 0x0001 #define DRV_FAILURE 0x0000 #define MCI_SOUND 0x0812 #define DRV_EXITAPPLICATION 0x000C typedef struct tagMCI_SOUND_PARMSW { DWORD_PTR dwCallback; LPCWSTR lpstrSoundName; } MCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW; BOOL WINAPI mciExecute(LPCSTR); #include //include/mmsystem.h typedef LPCSTR HPCSTR; /* a huge version of LPCSTR */ #define DECLSPEC_HIDDEN typedef UINT16 MMVERSION16; typedef UINT16 MCIDEVICEID16; typedef UINT16 MMRESULT16; typedef struct { UINT16 wType; /* indicates the contents of the union */ union { DWORD ms; /* milliseconds */ DWORD sample; /* samples */ DWORD cb; /* byte count */ struct { /* SMPTE */ BYTE hour; /* hours */ BYTE min; /* minutes */ BYTE sec; /* seconds */ BYTE frame; /* frames */ BYTE fps; /* frames per second */ BYTE dummy; /* pad */ } smpte; struct { /* MIDI */ DWORD songptrpos; /* song pointer position */ } midi; } u; } MMTIME16, *LPMMTIME16; typedef struct { DWORD dwDCISize; SEGPTR lpszDCISectionName; SEGPTR lpszDCIAliasName; } DRVCONFIGINFO16, *LPDRVCONFIGINFO16; /* GetDriverInfo16 references this structure, so this a struct defined * in the Win16 API. * GetDriverInfo has been deprecated in Win32. */ typedef struct { UINT16 length; HDRVR16 hDriver; HINSTANCE16 hModule; CHAR szAliasName[128]; } DRIVERINFOSTRUCT16, *LPDRIVERINFOSTRUCT16; LRESULT WINAPI DefDriverProc16(DWORD,HDRVR16,UINT16,LPARAM,LPARAM); HDRVR16 WINAPI OpenDriver16(LPCSTR,LPCSTR,LPARAM); LRESULT WINAPI CloseDriver16(HDRVR16,LPARAM,LPARAM); LRESULT WINAPI SendDriverMessage16(HDRVR16,UINT16,LPARAM,LPARAM); HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16); HDRVR16 WINAPI GetNextDriver16(HDRVR16,DWORD); BOOL16 WINAPI GetDriverInfo16(HDRVR16,DRIVERINFOSTRUCT16 *); typedef void (CALLBACK *LPDRVCALLBACK16) (HDRVR16,UINT16,DWORD,DWORD,DWORD); typedef LPDRVCALLBACK16 LPWAVECALLBACK16; UINT16 WINAPI mmsystemGetVersion16(void); BOOL16 WINAPI sndPlaySound16(LPCSTR,UINT16); typedef struct { WORD wMid; /* manufacturer ID */ WORD wPid; /* product ID */ MMVERSION16 vDriverVersion; /* version of the driver */ CHAR szPname[MAXPNAMELEN]; /* product name (0 terminated string) */ DWORD dwFormats; /* formats supported */ WORD wChannels; /* number of sources supported */ DWORD dwSupport; /* functionality supported by driver */ } WAVEOUTCAPS16, *LPWAVEOUTCAPS16; typedef struct { WORD wMid; /* manufacturer ID */ WORD wPid; /* product ID */ MMVERSION16 vDriverVersion; /* version of the driver */ CHAR szPname[MAXPNAMELEN]; /* product name (0 terminated string) */ DWORD dwFormats; /* formats supported */ WORD wChannels; /* number of channels supported */ } WAVEINCAPS16, *LPWAVEINCAPS16; typedef struct { HWAVE16 hWave; LPWAVEFORMATEX lpFormat; DWORD dwCallback; DWORD dwInstance; UINT16 uMappedDeviceID; DWORD dnDevNode; } WAVEOPENDESC16, *LPWAVEOPENDESC16; UINT16 WINAPI waveOutGetNumDevs16(void); UINT16 WINAPI waveOutGetDevCaps16(UINT16,LPWAVEOUTCAPS16,UINT16); UINT16 WINAPI waveOutGetVolume16(UINT16,DWORD*); UINT16 WINAPI waveOutSetVolume16(UINT16,DWORD); UINT16 WINAPI waveOutGetErrorText16(UINT16,LPSTR,UINT16); UINT16 WINAPI waveOutOpen16(HWAVEOUT16*,UINT16,const WAVEFORMATEX *,DWORD,DWORD,DWORD); UINT16 WINAPI waveOutClose16(HWAVEOUT16); UINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16,SEGPTR,UINT16); UINT16 WINAPI waveOutUnprepareHeader16(HWAVEOUT16,SEGPTR,UINT16); UINT16 WINAPI waveOutWrite16(HWAVEOUT16,SEGPTR,UINT16); UINT16 WINAPI waveOutPause16(HWAVEOUT16); UINT16 WINAPI waveOutRestart16(HWAVEOUT16); UINT16 WINAPI waveOutReset16(HWAVEOUT16); UINT16 WINAPI waveOutBreakLoop16(HWAVEOUT16); UINT16 WINAPI waveOutGetPosition16(HWAVEOUT16,LPMMTIME16,UINT16); UINT16 WINAPI waveOutGetPitch16(HWAVEOUT16,DWORD*); UINT16 WINAPI waveOutSetPitch16(HWAVEOUT16,DWORD); UINT16 WINAPI waveOutGetPlaybackRate16(HWAVEOUT16,DWORD*); UINT16 WINAPI waveOutSetPlaybackRate16(HWAVEOUT16,DWORD); UINT16 WINAPI waveOutGetID16(HWAVEOUT16,UINT16*); DWORD WINAPI waveOutMessage16(HWAVEOUT16,UINT16,DWORD,DWORD); UINT16 WINAPI waveInGetNumDevs16(void); UINT16 WINAPI waveInGetDevCaps16(UINT16,LPWAVEINCAPS16,UINT16); UINT16 WINAPI waveInGetErrorText16(UINT16,LPSTR,UINT16); UINT16 WINAPI waveInOpen16(HWAVEIN16*,UINT16,const WAVEFORMATEX *,DWORD,DWORD,DWORD); UINT16 WINAPI waveInClose16(HWAVEIN16); UINT16 WINAPI waveInPrepareHeader16(HWAVEIN16,SEGPTR,UINT16); UINT16 WINAPI waveInUnprepareHeader16(HWAVEIN16,SEGPTR,UINT16); UINT16 WINAPI waveInAddBuffer16(HWAVEIN16,SEGPTR,UINT16); UINT16 WINAPI waveInStart16(HWAVEIN16); UINT16 WINAPI waveInStop16(HWAVEIN16); UINT16 WINAPI waveInReset16(HWAVEIN16); UINT16 WINAPI waveInGetPosition16(HWAVEIN16,LPMMTIME16,UINT16); UINT16 WINAPI waveInGetID16(HWAVEIN16,UINT16*); DWORD WINAPI waveInMessage16(HWAVEIN16,UINT16,DWORD,DWORD); typedef LPDRVCALLBACK16 LPMIDICALLBACK16; typedef struct { WORD wMid; /* manufacturer ID */ WORD wPid; /* product ID */ MMVERSION16 vDriverVersion; /* version of the driver */ CHAR szPname[MAXPNAMELEN];/* product name (NULL terminated string) */ WORD wTechnology; /* type of device */ WORD wVoices; /* # of voices (internal synth only) */ WORD wNotes; /* max # of notes (internal synth only) */ WORD wChannelMask; /* channels used (internal synth only) */ DWORD dwSupport; /* functionality supported by driver */ } MIDIOUTCAPS16, *LPMIDIOUTCAPS16; typedef struct { WORD wMid; /* manufacturer ID */ WORD wPid; /* product ID */ MMVERSION16 vDriverVersion; /* version of the driver */ CHAR szPname[MAXPNAMELEN];/* product name (NULL terminated string) */ DWORD dwSupport; /* included in win95 and higher */ } MIDIINCAPS16, *LPMIDIINCAPS16; typedef struct midihdr16_tag { LPSTR lpData; /* pointer to locked data block */ DWORD dwBufferLength; /* length of data in data block */ DWORD dwBytesRecorded;/* used for input only */ DWORD dwUser; /* for client's use */ DWORD dwFlags; /* assorted flags (see defines) */ struct midihdr16_tag *lpNext; /* reserved for driver */ DWORD reserved; /* reserved for driver */ } MIDIHDR16, *LPMIDIHDR16; typedef struct { HMIDI16 hMidi; DWORD dwCallback; DWORD dwInstance; UINT16 reserved; DWORD dnDevNode; DWORD cIds; MIDIOPENSTRMID rgIds; } MIDIOPENDESC16, *LPMIDIOPENDESC16; UINT16 WINAPI midiOutGetNumDevs16(void); UINT16 WINAPI midiOutGetDevCaps16(UINT16,LPMIDIOUTCAPS16,UINT16); UINT16 WINAPI midiOutGetVolume16(UINT16,DWORD*); UINT16 WINAPI midiOutSetVolume16(UINT16,DWORD); UINT16 WINAPI midiOutGetErrorText16(UINT16,LPSTR,UINT16); UINT16 WINAPI midiOutOpen16(HMIDIOUT16*,UINT16,DWORD,DWORD,DWORD); UINT16 WINAPI midiOutClose16(HMIDIOUT16); UINT16 WINAPI midiOutPrepareHeader16(HMIDIOUT16,SEGPTR,UINT16); UINT16 WINAPI midiOutUnprepareHeader16(HMIDIOUT16,SEGPTR,UINT16); UINT16 WINAPI midiOutShortMsg16(HMIDIOUT16,DWORD); UINT16 WINAPI midiOutLongMsg16(HMIDIOUT16,SEGPTR,UINT16); UINT16 WINAPI midiOutReset16(HMIDIOUT16); UINT16 WINAPI midiOutCachePatches16(HMIDIOUT16,UINT16,WORD*,UINT16); UINT16 WINAPI midiOutCacheDrumPatches16(HMIDIOUT16,UINT16,WORD*,UINT16); UINT16 WINAPI midiOutGetID16(HMIDIOUT16,UINT16*); DWORD WINAPI midiOutMessage16(HMIDIOUT16,UINT16,DWORD,DWORD); UINT16 WINAPI midiInGetNumDevs16(void); UINT16 WINAPI midiInGetDevCaps16(UINT16,LPMIDIINCAPS16,UINT16); UINT16 WINAPI midiInGetErrorText16(UINT16,LPSTR,UINT16); UINT16 WINAPI midiInOpen16(HMIDIIN16*,UINT16,DWORD,DWORD,DWORD); UINT16 WINAPI midiInClose16(HMIDIIN16); UINT16 WINAPI midiInPrepareHeader16(HMIDIIN16,SEGPTR,UINT16); UINT16 WINAPI midiInUnprepareHeader16(HMIDIIN16,SEGPTR,UINT16); UINT16 WINAPI midiInAddBuffer16(HMIDIIN16,SEGPTR,UINT16); UINT16 WINAPI midiInStart16(HMIDIIN16); UINT16 WINAPI midiInStop16(HMIDIIN16); UINT16 WINAPI midiInReset16(HMIDIIN16); UINT16 WINAPI midiInGetID16(HMIDIIN16,UINT16*); DWORD WINAPI midiInMessage16(HMIDIIN16,UINT16,DWORD,DWORD); MMRESULT16 WINAPI midiStreamClose16(HMIDISTRM16 hms); MMRESULT16 WINAPI midiStreamOpen16(HMIDISTRM16*,LPUINT16,DWORD,DWORD,DWORD,DWORD); MMRESULT16 WINAPI midiStreamOut16(HMIDISTRM16,LPMIDIHDR16,UINT16); MMRESULT16 WINAPI midiStreamPause16(HMIDISTRM16); MMRESULT16 WINAPI midiStreamPosition16(HMIDISTRM16,LPMMTIME16,UINT16); MMRESULT16 WINAPI midiStreamProperty16(HMIDISTRM16,LPBYTE,DWORD); MMRESULT16 WINAPI midiStreamRestart16(HMIDISTRM16); MMRESULT16 WINAPI midiStreamStop16(HMIDISTRM16); typedef struct { WORD wMid; /* manufacturer ID */ WORD wPid; /* product ID */ MMVERSION16 vDriverVersion; /* version of the driver */ CHAR szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */ WORD wTechnology; /* type of device */ DWORD dwSupport; /* functionality supported by driver */ } AUXCAPS16, *LPAUXCAPS16; typedef void (CALLBACK *LPTIMECALLBACK16)(UINT16,UINT16,DWORD,DWORD,DWORD); typedef struct { UINT16 wPeriodMin; /* minimum period supported */ UINT16 wPeriodMax; /* maximum period supported */ } TIMECAPS16,*LPTIMECAPS16; typedef struct { WORD wMid; /* manufacturer ID */ WORD wPid; /* product ID */ char szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */ UINT16 wXmin; /* minimum x position value */ UINT16 wXmax; /* maximum x position value */ UINT16 wYmin; /* minimum y position value */ UINT16 wYmax; /* maximum y position value */ UINT16 wZmin; /* minimum z position value */ UINT16 wZmax; /* maximum z position value */ UINT16 wNumButtons; /* number of buttons */ UINT16 wPeriodMin; /* minimum message period when captured */ UINT16 wPeriodMax; /* maximum message period when captured */ /* win95,nt4 additions: */ UINT16 wRmin; /* minimum r position value */ UINT16 wRmax; /* maximum r position value */ UINT16 wUmin; /* minimum u (5th axis) position value */ UINT16 wUmax; /* maximum u (5th axis) position value */ UINT16 wVmin; /* minimum v (6th axis) position value */ UINT16 wVmax; /* maximum v (6th axis) position value */ UINT16 wCaps; /* joystick capabilities */ UINT16 wMaxAxes; /* maximum number of axes supported */ UINT16 wNumAxes; /* number of axes in use */ UINT16 wMaxButtons; /* maximum number of buttons supported */ CHAR szRegKey[MAXPNAMELEN]; /* registry key */ CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */ } JOYCAPS16, *LPJOYCAPS16; typedef struct { UINT16 wXpos; /* x position */ UINT16 wYpos; /* y position */ UINT16 wZpos; /* z position */ UINT16 wButtons; /* button states */ } JOYINFO16, *LPJOYINFO16; typedef struct { WORD wMid; /* manufacturer id */ WORD wPid; /* product id */ MMVERSION16 vDriverVersion; /* version of the driver */ CHAR szPname[MAXPNAMELEN]; /* product name */ DWORD fdwSupport; /* misc. support bits */ DWORD cDestinations; /* count of destinations */ } MIXERCAPS16,*LPMIXERCAPS16; typedef struct tMIXEROPENDESC16 { HMIXEROBJ16 hmx; LPVOID pReserved0; DWORD dwCallback; DWORD dwInstance; } MIXEROPENDESC16, *LPMIXEROPENDESC16; typedef struct { DWORD cbStruct; /* size of MIXERLINE structure */ DWORD dwDestination; /* zero based destination index */ DWORD dwSource; /* zero based source index (if source) */ DWORD dwLineID; /* unique line id for mixer device */ DWORD fdwLine; /* state/information about line */ DWORD dwUser; /* driver specific information */ DWORD dwComponentType; /* component type line connects to */ DWORD cChannels; /* number of channels line supports */ DWORD cConnections; /* number of connections [possible] */ DWORD cControls; /* number of controls at this line */ CHAR szShortName[MIXER_SHORT_NAME_CHARS]; CHAR szName[MIXER_LONG_NAME_CHARS]; struct { DWORD dwType; /* MIXERLINE_TARGETTYPE_xxxx */ DWORD dwDeviceID; /* target device ID of device type */ WORD wMid; /* of target device */ WORD wPid; /* " */ MMVERSION16 vDriverVersion; /* " */ CHAR szPname[MAXPNAMELEN]; /* " */ } Target; } MIXERLINE16, *LPMIXERLINE16; typedef struct { DWORD cbStruct; /* size in bytes of MIXERCONTROL */ DWORD dwControlID; /* unique control id for mixer device */ DWORD dwControlType; /* MIXERCONTROL_CONTROLTYPE_xxx */ DWORD fdwControl; /* MIXERCONTROL_CONTROLF_xxx */ DWORD cMultipleItems; /* if MIXERCONTROL_CONTROLF_MULTIPLE set */ CHAR szShortName[MIXER_SHORT_NAME_CHARS]; CHAR szName[MIXER_LONG_NAME_CHARS]; union { struct { LONG lMinimum; /* signed minimum for this control */ LONG lMaximum; /* signed maximum for this control */ } s; struct { DWORD dwMinimum; /* unsigned minimum for this control */ DWORD dwMaximum; /* unsigned maximum for this control */ } s1; DWORD dwReserved[6]; } Bounds; union { DWORD cSteps; /* # of steps between min & max */ DWORD cbCustomData; /* size in bytes of custom data */ DWORD dwReserved[6]; /* !!! needed? we have cbStruct.... */ } Metrics; } MIXERCONTROL16, *LPMIXERCONTROL16; typedef struct { DWORD cbStruct; /* size in bytes of MIXERLINECONTROLS */ DWORD dwLineID; /* line id (from MIXERLINE.dwLineID) */ union { DWORD dwControlID; /* MIXER_GETLINECONTROLSF_ONEBYID */ DWORD dwControlType; /* MIXER_GETLINECONTROLSF_ONEBYTYPE */ } u; DWORD cControls; /* count of controls pmxctrl points to */ DWORD cbmxctrl; /* size in bytes of _one_ MIXERCONTROL */ SEGPTR pamxctrl; /* pointer to first MIXERCONTROL array */ } MIXERLINECONTROLS16, *LPMIXERLINECONTROLS16; typedef struct { DWORD cbStruct; /* size in bytes of MIXERCONTROLDETAILS */ DWORD dwControlID; /* control id to get/set details on */ DWORD cChannels; /* number of channels in paDetails array */ union { HWND16 hwndOwner; /* for MIXER_SETCONTROLDETAILSF_CUSTOM */ DWORD cMultipleItems; /* if _MULTIPLE, the number of items per channel */ } u; DWORD cbDetails; /* size of _one_ details_XX struct */ LPVOID paDetails; /* pointer to array of details_XX structs */ } MIXERCONTROLDETAILS16,*LPMIXERCONTROLDETAILS16; typedef struct { DWORD dwParam1; DWORD dwParam2; CHAR szName[MIXER_LONG_NAME_CHARS]; } MIXERCONTROLDETAILS_LISTTEXT16,*LPMIXERCONTROLDETAILS_LISTTEXT16; typedef LRESULT (CALLBACK *LPMMIOPROC16)(LPSTR lpmmioinfo,UINT16 uMessage, LPARAM lParam1,LPARAM lParam2); typedef struct { DWORD dwFlags; /* general status flags */ FOURCC fccIOProc; /* pointer to I/O procedure */ LPMMIOPROC16 pIOProc; /* pointer to I/O procedure */ UINT16 wErrorRet; /* place for error to be returned */ HTASK16 hTask; /* alternate local task */ /* fields maintained by MMIO functions during buffered I/O */ LONG cchBuffer; /* size of I/O buffer (or 0L) */ HPSTR pchBuffer; /* start of I/O buffer (or NULL) */ HPSTR pchNext; /* pointer to next byte to read/write */ HPSTR pchEndRead; /* pointer to last valid byte to read */ HPSTR pchEndWrite; /* pointer to last byte to write */ LONG lBufOffset; /* disk offset of start of buffer */ /* fields maintained by I/O procedure */ LONG lDiskOffset; /* disk offset of next read or write */ DWORD adwInfo[3]; /* data specific to type of MMIOPROC */ /* other fields maintained by MMIO */ DWORD dwReserved1; /* reserved for MMIO use */ DWORD dwReserved2; /* reserved for MMIO use */ HMMIO16 hmmio; /* handle to open file */ } MMIOINFO16, *LPMMIOINFO16; typedef UINT16 (CALLBACK *YIELDPROC16)(UINT16,DWORD); UINT16 WINAPI auxGetNumDevs16(void); UINT16 WINAPI auxGetDevCaps16 (UINT16,LPAUXCAPS16,UINT16); UINT16 WINAPI auxSetVolume16(UINT16,DWORD); UINT16 WINAPI auxGetVolume16(UINT16,LPDWORD); DWORD WINAPI auxOutMessage16(UINT16,UINT16,DWORD,DWORD); MMRESULT16 WINAPI timeGetSystemTime16(LPMMTIME16,UINT16); MMRESULT16 WINAPI timeSetEvent16(UINT16,UINT16,LPTIMECALLBACK16,DWORD,UINT16); MMRESULT16 WINAPI timeKillEvent16(UINT16); MMRESULT16 WINAPI timeGetDevCaps16(LPTIMECAPS16,UINT16); MMRESULT16 WINAPI timeBeginPeriod16(UINT16); MMRESULT16 WINAPI timeEndPeriod16(UINT16); MMRESULT16 WINAPI joyGetDevCaps16 (UINT16,LPJOYCAPS16,UINT16); UINT16 WINAPI joyGetNumDevs16(void); MMRESULT16 WINAPI joyGetPos16(UINT16,LPJOYINFO16); MMRESULT16 WINAPI joyGetPosEx16(UINT16,LPJOYINFOEX); MMRESULT16 WINAPI joyGetThreshold16(UINT16,UINT16*); MMRESULT16 WINAPI joyReleaseCapture16(UINT16); MMRESULT16 WINAPI joySetCapture16(HWND16,UINT16,UINT16,BOOL16); MMRESULT16 WINAPI joySetThreshold16(UINT16,UINT16); UINT16 WINAPI mixerGetNumDevs16(void); UINT16 WINAPI mixerOpen16(LPHMIXER16,UINT16,DWORD,DWORD,DWORD); UINT16 WINAPI mixerClose16(HMIXER16); DWORD WINAPI mixerMessage16(HMIXER16,UINT16,DWORD,DWORD); UINT16 WINAPI mixerGetDevCaps16(UINT16,LPMIXERCAPS16,UINT16); UINT16 WINAPI mixerGetLineInfo16(HMIXEROBJ16,LPMIXERLINE16,DWORD); UINT16 WINAPI mixerGetID16(HMIXEROBJ16,LPUINT16,DWORD); UINT16 WINAPI mixerGetLineControls16(HMIXEROBJ16,LPMIXERLINECONTROLS16,DWORD); UINT16 WINAPI mixerGetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD); UINT16 WINAPI mixerSetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD); LPMMIOPROC16 WINAPI mmioInstallIOProc16(FOURCC,LPMMIOPROC16,DWORD); FOURCC WINAPI mmioStringToFOURCC16(LPCSTR,UINT16); HMMIO16 WINAPI mmioOpen16(LPSTR,MMIOINFO16*,DWORD); UINT16 WINAPI mmioRename16(LPCSTR,LPCSTR,MMIOINFO16*,DWORD); MMRESULT16 WINAPI mmioClose16(HMMIO16,UINT16); LONG WINAPI mmioRead16(HMMIO16,HPSTR,LONG); LONG WINAPI mmioWrite16(HMMIO16,HPCSTR,LONG); LONG WINAPI mmioSeek16(HMMIO16,LONG,INT16); MMRESULT16 WINAPI mmioGetInfo16(HMMIO16,MMIOINFO16*,UINT16); MMRESULT16 WINAPI mmioSetInfo16(HMMIO16,const MMIOINFO16*,UINT16); UINT16 WINAPI mmioSetBuffer16(HMMIO16,SEGPTR,LONG,UINT16); UINT16 WINAPI mmioFlush16(HMMIO16,UINT16); UINT16 WINAPI mmioAdvance16(HMMIO16,MMIOINFO16*,UINT16); LRESULT WINAPI mmioSendMessage16(HMMIO16,UINT16,LPARAM,LPARAM); UINT16 WINAPI mmioDescend16(HMMIO16,MMCKINFO*,const MMCKINFO*,UINT16); UINT16 WINAPI mmioAscend16(HMMIO16,MMCKINFO*,UINT16); UINT16 WINAPI mmioCreateChunk16(HMMIO16,MMCKINFO*,UINT16); DWORD WINAPI mciSendCommand16(UINT16,UINT16,DWORD,DWORD); DWORD WINAPI mciSendString16(LPCSTR,LPSTR,UINT16,HWND16); UINT16 WINAPI mciGetDeviceID16(LPCSTR); UINT16 WINAPI mciGetDeviceIDFromElementID16(DWORD,LPCSTR); BOOL16 WINAPI mciGetErrorString16 (DWORD,LPSTR,UINT16); BOOL16 WINAPI mciSetYieldProc16(UINT16,YIELDPROC16,DWORD); HTASK16 WINAPI mciGetCreatorTask16(UINT16); YIELDPROC16 WINAPI mciGetYieldProc16(UINT16,DWORD*); DWORD WINAPI mciGetDriverData16(UINT16 uDeviceID); BOOL16 WINAPI mciSetDriverData16(UINT16 uDeviceID, DWORD dwData); UINT16 WINAPI mciDriverYield16(UINT16 uDeviceID); BOOL16 WINAPI mciDriverNotify16(HWND16 hwndCallback, UINT16 uDeviceID, UINT16 uStatus); UINT16 WINAPI mciLoadCommandResource16(HINSTANCE16 hInstance, LPCSTR lpResName, UINT16 uType); BOOL16 WINAPI mciFreeCommandResource16(UINT16 uTable); HINSTANCE16 WINAPI mmTaskCreate16(SEGPTR spProc, HINSTANCE16 *lphMmTask, DWORD dwPmt); void WINAPI mmTaskBlock16(HINSTANCE16 hInst); LRESULT WINAPI mmTaskSignal16(HTASK16 ht); void WINAPI mmTaskYield16(void); LRESULT WINAPI mmThreadCreate16(FARPROC16 fpThreadAddr, LPHANDLE16 lpHndl, DWORD dwPmt, DWORD dwFlags); void WINAPI mmThreadSignal16(HANDLE16 hndl); void WINAPI mmThreadBlock16(HANDLE16 hndl); HANDLE16 WINAPI mmThreadGetTask16(HANDLE16 hndl); BOOL16 WINAPI mmThreadIsValid16(HANDLE16 hndl); BOOL16 WINAPI mmThreadIsCurrent16(HANDLE16 hndl); BOOL16 WINAPI DriverCallback16(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev, WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2); typedef struct { DWORD dwCallback; WORD wDeviceID; WORD wReserved0; SEGPTR lpstrDeviceType; SEGPTR lpstrElementName; SEGPTR lpstrAlias; } MCI_OPEN_PARMS16, *LPMCI_OPEN_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrReturn; DWORD dwRetSize; } MCI_INFO_PARMS16, *LPMCI_INFO_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrReturn; DWORD dwRetSize; DWORD dwNumber; WORD wDeviceType; WORD wReserved0; } MCI_SYSINFO_PARMS16, *LPMCI_SYSINFO_PARMS16; typedef struct { DWORD dwCallback; UINT16 nVirtKey; WORD wReserved0; HWND16 hwndBreak; WORD wReserved1; } MCI_BREAK_PARMS16, *LPMCI_BREAK_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpfilename; } MCI_LOAD_PARMS16, *LPMCI_LOAD_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrSoundName; } MCI_SOUND_PARMS16, *LPMCI_SOUND_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrCommand; } MCI_VD_ESCAPE_PARMS16, *LPMCI_VD_ESCAPE_PARMS16; typedef struct { UINT16 wDeviceID; /* device ID */ SEGPTR lpstrParams; /* parameter string for entry in SYSTEM.INI */ UINT16 wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */ UINT16 wType; /* driver type (filled in by the driver) */ } MCI_OPEN_DRIVER_PARMS16, *LPMCI_OPEN_DRIVER_PARMS16; typedef struct { DWORD dwCallback; MCIDEVICEID16 wDeviceID; WORD wReserved0; SEGPTR lpstrDeviceType; SEGPTR lpstrElementName; SEGPTR lpstrAlias; DWORD dwBufferSeconds; } MCI_WAVE_OPEN_PARMS16, *LPMCI_WAVE_OPEN_PARMS16; typedef struct { DWORD dwCallback; DWORD dwTimeFormat; DWORD dwAudio; UINT16 wInput; UINT16 wReserved0; UINT16 wOutput; UINT16 wReserved1; UINT16 wFormatTag; UINT16 wReserved2; UINT16 nChannels; UINT16 wReserved3; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; UINT16 nBlockAlign; UINT16 wReserved4; UINT16 wBitsPerSample; UINT16 wReserved5; } MCI_WAVE_SET_PARMS16, * LPMCI_WAVE_SET_PARMS16; typedef struct { DWORD dwCallback; UINT16 wDeviceID; UINT16 wReserved0; SEGPTR lpstrDeviceType; SEGPTR lpstrElementName; SEGPTR lpstrAlias; DWORD dwStyle; HWND16 hWndParent; UINT16 wReserved1; } MCI_ANIM_OPEN_PARMS16, *LPMCI_ANIM_OPEN_PARMS16; typedef struct { DWORD dwCallback; HWND16 hWnd; WORD wReserved1; WORD nCmdShow; WORD wReserved2; SEGPTR lpstrText; } MCI_ANIM_WINDOW_PARMS16, *LPMCI_ANIM_WINDOW_PARMS16; typedef struct { DWORD dwCallback; #ifdef MCI_USE_OFFEXT POINT16 ptOffset; POINT16 ptExtent; #else /* ifdef MCI_USE_OFFEXT */ RECT16 rc; #endif /* ifdef MCI_USE_OFFEXT */ } MCI_ANIM_RECT_PARMS16, *LPMCI_ANIM_RECT_PARMS16; typedef struct { DWORD dwCallback; RECT16 rc; HDC16 hDC; } MCI_ANIM_UPDATE_PARMS16, *LPMCI_ANIM_UPDATE_PARMS16; typedef struct { DWORD dwCallback; MCIDEVICEID16 wDeviceID; WORD wReserved0; SEGPTR lpstrDeviceType; SEGPTR lpstrElementName; SEGPTR lpstrAlias; DWORD dwStyle; HWND16 hWndParent; WORD wReserved1; } MCI_OVLY_OPEN_PARMS16, *LPMCI_OVLY_OPEN_PARMS16; typedef struct { DWORD dwCallback; HWND16 hWnd; WORD wReserved1; UINT16 nCmdShow; WORD wReserved2; SEGPTR lpstrText; } MCI_OVLY_WINDOW_PARMS16, *LPMCI_OVLY_WINDOW_PARMS16; typedef struct { DWORD dwCallback; #ifdef MCI_USE_OFFEXT POINT16 ptOffset; POINT16 ptExtent; #else /* ifdef MCI_USE_OFFEXT */ RECT16 rc; #endif /* ifdef MCI_USE_OFFEXT */ } MCI_OVLY_RECT_PARMS16, *LPMCI_OVLY_RECT_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpfilename; RECT16 rc; } MCI_OVLY_SAVE_PARMS16, *LPMCI_OVLY_SAVE_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpfilename; RECT16 rc; } MCI_OVLY_LOAD_PARMS16, *LPMCI_OVLY_LOAD_PARMS16; /* from digitalv / 16 bit */ typedef struct { DWORD dwCallback; RECT16 rc; } MCI_DGV_RECT_PARMS16, *LPMCI_DGV_RECT_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrFileName; RECT16 rc; } MCI_DGV_CAPTURE_PARMS16, *LPMCI_DGV_CAPTURE_PARMS16; typedef struct { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; RECT16 rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_COPY_PARMS16, *LPMCI_DGV_COPY_PARMS16; typedef struct { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; RECT16 rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_CUT_PARMS16, * LPMCI_DGV_CUT_PARMS16; typedef struct { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; RECT16 rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_DELETE_PARMS16, * LPMCI_DGV_DELETE_PARMS16; typedef MCI_DGV_RECT_PARMS16 MCI_DGV_FREEZE_PARMS16, * LPMCI_DGV_FREEZE_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrReturn; DWORD dwRetSize; DWORD dwItem; } MCI_DGV_INFO_PARMS16, * LPMCI_DGV_INFO_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrReturn; DWORD dwLength; DWORD dwNumber; DWORD dwItem; SEGPTR lpstrAlgorithm; } MCI_DGV_LIST_PARMS16, *LPMCI_DGV_LIST_PARMS16; typedef MCI_LOAD_PARMS16 MCI_DGV_LOAD_PARMS16 , * LPMCI_DGV_LOAD_PARMS16; typedef struct { DWORD dwCallback; UINT16 wDeviceID; UINT16 wReserved0; SEGPTR lpstrDeviceType; SEGPTR lpstrElementName; SEGPTR lpstrAlias; DWORD dwStyle; HWND16 hWndParent; UINT16 wReserved1; } MCI_DGV_OPEN_PARMS16, *LPMCI_DGV_OPEN_PARMS16; typedef struct { DWORD dwCallback; DWORD dwTo; RECT16 rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_PASTE_PARMS16, * LPMCI_DGV_PASTE_PARMS16; typedef MCI_DGV_RECT_PARMS16 MCI_DGV_PUT_PARMS16, * LPMCI_DGV_PUT_PARMS16; typedef struct { DWORD dwCallback; DWORD dwItem; SEGPTR lpstrName; SEGPTR lpstrAlgorithm; DWORD dwHandle; } MCI_DGV_QUALITY_PARMS16, *LPMCI_DGV_QUALITY_PARMS16; typedef struct { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; RECT16 rc; DWORD dwAudioStream; DWORD dwVideoStream; } MCI_DGV_RECORD_PARMS16, * LPMCI_DGV_RECORD_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrPath; DWORD dwSize; } MCI_DGV_RESERVE_PARMS16, *LPMCI_DGV_RESERVE_PARMS16A; typedef struct { DWORD dwCallback; SEGPTR lpstrFileName; RECT16 rc; } MCI_DGV_RESTORE_PARMS16, *LPMCI_DGV_RESTORE_PARMS16; typedef struct { DWORD dwCallback; SEGPTR lpstrFileName; RECT16 rc; } MCI_DGV_SAVE_PARMS16, *LPMCI_DGV_SAVE_PARMS16; typedef struct { DWORD dwCallback; DWORD dwItem; DWORD dwValue; DWORD dwOver; SEGPTR lpstrAlgorithm; SEGPTR lpstrQuality; } MCI_DGV_SETAUDIO_PARMS16, *LPMCI_DGV_SETAUDIO_PARMS16; typedef struct { DWORD dwCallback; DWORD dwItem; DWORD dwValue; DWORD dwOver; SEGPTR lpstrAlgorithm; SEGPTR lpstrQuality; DWORD dwSourceNumber; } MCI_DGV_SETVIDEO_PARMS16, *LPMCI_DGV_SETVIDEO_PARMS16; typedef struct { DWORD dwCallback; DWORD dwReturn; DWORD dwItem; DWORD dwTrack; SEGPTR lpstrDrive; DWORD dwReference; } MCI_DGV_STATUS_PARMS16, *LPMCI_DGV_STATUS_PARMS16; typedef struct { DWORD dwCallback; RECT16 rc; HDC16 hDC; UINT16 wReserved0; } MCI_DGV_UPDATE_PARMS16, * LPMCI_DGV_UPDATE_PARMS16; typedef MCI_DGV_RECT_PARMS16 MCI_DGV_UNFREEZE_PARMS16, * LPMCI_DGV_UNFREEZE_PARMS16; typedef MCI_DGV_RECT_PARMS16 MCI_DGV_WHERE_PARMS16, * LPMCI_DGV_WHERE_PARMS16; typedef struct { DWORD dwCallback; HWND16 hWnd; UINT16 wReserved1; UINT16 nCmdShow; UINT16 wReserved2; SEGPTR lpstrText; } MCI_DGV_WINDOW_PARMS16, *LPMCI_DGV_WINDOW_PARMS16; #include #endif /* __WINE_WINE_MMSYSTEM16_H */ ================================================ FILE: wine/wine/port.h ================================================ /* * Wine porting definitions * * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_PORT_H #define __WINE_WINE_PORT_H #ifndef __WINE_CONFIG_H # error You must include config.h to use this header #endif #ifdef __WINE_BASETSD_H # error You must include port.h before all other headers #endif #ifndef _GNU_SOURCE # define _GNU_SOURCE /* for pread/pwrite, isfinite */ #endif #include #include #include #include #ifdef HAVE_DIRECT_H # include #endif #ifdef HAVE_IO_H # include #endif #ifdef HAVE_PROCESS_H # include #endif #include #include #ifdef HAVE_UNISTD_H # include #endif /**************************************************************** * Type definitions */ #if !defined(_MSC_VER) && !defined(__int64) # if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64) # define __int64 long # else # define __int64 long long # endif #endif #ifndef HAVE_MODE_T typedef int mode_t; #endif #ifndef HAVE_OFF_T typedef long off_t; #endif #ifndef HAVE_PID_T typedef int pid_t; #endif #ifndef HAVE_SIZE_T typedef unsigned int size_t; #endif #ifndef HAVE_SSIZE_T typedef int ssize_t; #endif #ifndef HAVE_FSBLKCNT_T typedef unsigned long fsblkcnt_t; #endif #ifndef HAVE_FSFILCNT_T typedef unsigned long fsfilcnt_t; #endif #ifndef HAVE_STRUCT_STATVFS_F_BLOCKS struct statvfs { unsigned long f_bsize; unsigned long f_frsize; fsblkcnt_t f_blocks; fsblkcnt_t f_bfree; fsblkcnt_t f_bavail; fsfilcnt_t f_files; fsfilcnt_t f_ffree; fsfilcnt_t f_favail; unsigned long f_fsid; unsigned long f_flag; unsigned long f_namemax; }; #endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */ /**************************************************************** * Macro definitions */ #ifdef HAVE_DLFCN_H #include #else #define RTLD_LAZY 0x001 #define RTLD_NOW 0x002 #define RTLD_GLOBAL 0x100 #endif #ifdef HAVE_ONE_ARG_MKDIR #define mkdir(path,mode) mkdir(path) #endif #if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE) #define ftruncate chsize #endif #if !defined(HAVE_POPEN) && defined(HAVE__POPEN) #define popen _popen #endif #if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE) #define pclose _pclose #endif #if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP) #define strdup _strdup #endif #if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF) #define snprintf _snprintf #endif #if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF) #define vsnprintf _vsnprintf #endif #if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64) #define strtoll _strtoi64 #endif #if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64) #define strtoull _strtoui64 #endif #ifndef S_ISLNK # define S_ISLNK(mod) (0) #endif #ifndef S_ISSOCK # define S_ISSOCK(mod) (0) #endif #ifndef S_ISDIR # define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR) #endif #ifndef S_ISCHR # define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR) #endif #ifndef S_ISFIFO # define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO) #endif #ifndef S_ISREG # define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG) #endif /* So we open files in 64 bit access mode on Linux */ #ifndef O_LARGEFILE # define O_LARGEFILE 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK 0 #endif #ifndef O_BINARY # define O_BINARY 0 #endif /**************************************************************** * Constants */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #ifndef M_PI_2 #define M_PI_2 1.570796326794896619 #endif #ifndef INFINITY static inline float __port_infinity(void) { static const unsigned __inf_bytes = 0x7f800000; return *(const float *)&__inf_bytes; } #define INFINITY __port_infinity() #endif #ifndef NAN static inline float __port_nan(void) { static const unsigned __nan_bytes = 0x7fc00000; return *(const float *)&__nan_bytes; } #define NAN __port_nan() #endif /**************************************************************** * Function definitions (only when using libwine_port) */ #ifndef NO_LIBWINE_PORT #ifndef HAVE_FSTATVFS int fstatvfs( int fd, struct statvfs *buf ); #endif #ifndef HAVE_GETOPT_LONG_ONLY extern char *optarg; extern int optind; extern int opterr; extern int optopt; struct option; #ifndef HAVE_STRUCT_OPTION_NAME struct option { const char *name; int has_arg; int *flag; int val; }; #endif extern int getopt_long (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); extern int getopt_long_only (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); #endif /* HAVE_GETOPT_LONG_ONLY */ #ifndef HAVE_FFS int ffs( int x ); #endif #ifndef HAVE_ISFINITE int isfinite(double x); #endif #ifndef HAVE_ISINF int isinf(double x); #endif #ifndef HAVE_ISNAN int isnan(double x); #endif #ifndef HAVE_LLRINT __int64 llrint(double x); #endif #ifndef HAVE_LLRINTF __int64 llrintf(float x); #endif #ifndef HAVE_LRINT long lrint(double x); #endif #ifndef HAVE_LRINTF long lrintf(float x); #endif #ifndef HAVE_LSTAT int lstat(const char *file_name, struct stat *buf); #endif /* HAVE_LSTAT */ #ifndef HAVE_MEMMOVE void *memmove(void *dest, const void *src, size_t len); #endif /* !defined(HAVE_MEMMOVE) */ #ifndef HAVE_POLL struct pollfd { int fd; short events; short revents; }; #define POLLIN 0x01 #define POLLPRI 0x02 #define POLLOUT 0x04 #define POLLERR 0x08 #define POLLHUP 0x10 #define POLLNVAL 0x20 int poll( struct pollfd *fds, unsigned int count, int timeout ); #endif /* HAVE_POLL */ #ifndef HAVE_PREAD ssize_t pread( int fd, void *buf, size_t count, off_t offset ); #endif /* HAVE_PREAD */ #ifndef HAVE_PWRITE ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset ); #endif /* HAVE_PWRITE */ #ifndef HAVE_READLINK int readlink( const char *path, char *buf, size_t size ); #endif /* HAVE_READLINK */ #ifndef HAVE_RINT double rint(double x); #endif #ifndef HAVE_RINTF float rintf(float x); #endif #ifndef HAVE_STATVFS int statvfs( const char *path, struct statvfs *buf ); #endif #ifndef HAVE_STRNCASECMP # ifndef HAVE__STRNICMP int strncasecmp(const char *str1, const char *str2, size_t n); # else # define strncasecmp _strnicmp # endif #endif /* !defined(HAVE_STRNCASECMP) */ #ifndef HAVE_STRNLEN size_t strnlen( const char *str, size_t maxlen ); #endif /* !defined(HAVE_STRNLEN) */ #ifndef HAVE_STRERROR const char *strerror(int err); #endif /* !defined(HAVE_STRERROR) */ #ifndef HAVE_STRCASECMP # ifndef HAVE__STRICMP int strcasecmp(const char *str1, const char *str2); # else # define strcasecmp _stricmp # endif #endif /* !defined(HAVE_STRCASECMP) */ #ifndef HAVE_SYMLINK int symlink(const char *from, const char *to); #endif #ifndef HAVE_USLEEP int usleep (unsigned int useconds); #endif /* !defined(HAVE_USLEEP) */ #ifdef __i386__ static inline void *memcpy_unaligned( void *dst, const void *src, size_t size ) { return memcpy( dst, src, size ); } #else extern void *memcpy_unaligned( void *dst, const void *src, size_t size ); #endif /* __i386__ */ extern int mkstemps(char *template, int suffix_len); /* Process creation flags */ #ifndef _P_WAIT # define _P_WAIT 0 # define _P_NOWAIT 1 # define _P_OVERLAY 2 # define _P_NOWAITO 3 # define _P_DETACH 4 #endif #ifndef HAVE__SPAWNVP //extern int _spawnvp(int mode, const char *cmdname, const char * const argv[]); #endif /* Interlocked functions */ #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) static inline int interlocked_cmpxchg( int *dest, int xchg, int compare ) { int ret; __asm__ __volatile__( "lock; cmpxchgl %2,(%1)" : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); return ret; } static inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ) { void *ret; #ifdef __x86_64__ __asm__ __volatile__( "lock; cmpxchgq %2,(%1)" : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); #else __asm__ __volatile__( "lock; cmpxchgl %2,(%1)" : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); #endif return ret; } static inline int interlocked_xchg( int *dest, int val ) { int ret; __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) : "r" (dest), "0" (val) : "memory" ); return ret; } static inline void *interlocked_xchg_ptr( void **dest, void *val ) { void *ret; #ifdef __x86_64__ __asm__ __volatile__( "lock; xchgq %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" ); #else __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) : "r" (dest), "0" (val) : "memory" ); #endif return ret; } static inline int interlocked_xchg_add( int *dest, int incr ) { int ret; __asm__ __volatile__( "lock; xaddl %0,(%1)" : "=r" (ret) : "r" (dest), "0" (incr) : "memory" ); return ret; } #ifdef __x86_64__ static inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare ) { unsigned char ret; __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2" : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret), "=a" (compare[0]), "=d" (compare[1]) : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]), "c" (xchg_high), "b" (xchg_low) ); return ret; } #endif #else /* __GNUC__ */ #ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 static inline int interlocked_cmpxchg( int *dest, int xchg, int compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } static inline int interlocked_xchg_add( int *dest, int incr ) { return __sync_fetch_and_add( dest, incr ); } static inline int interlocked_xchg( int *dest, int val ) { int ret; do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val )); return ret; } #else extern int interlocked_cmpxchg( int *dest, int xchg, int compare ); extern int interlocked_xchg_add( int *dest, int incr ); extern int interlocked_xchg( int *dest, int val ); #endif #if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) && __SIZEOF_POINTER__ == 4) \ || (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) && __SIZEOF_POINTER__ == 8) static inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } static inline void *interlocked_xchg_ptr( void **dest, void *val ) { void *ret; do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val )); return ret; } #else extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ); extern void *interlocked_xchg_ptr( void **dest, void *val ); #endif #if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64) extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare ); #endif #endif /* __GNUC__ */ #ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 static inline __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ) { return __sync_val_compare_and_swap( dest, compare, xchg ); } #else extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ); #endif #else /* NO_LIBWINE_PORT */ #define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable #define ffs __WINE_NOT_PORTABLE(ffs) #define fstatvfs __WINE_NOT_PORTABLE(fstatvfs) #define getopt_long __WINE_NOT_PORTABLE(getopt_long) #define getopt_long_only __WINE_NOT_PORTABLE(getopt_long_only) #define interlocked_cmpxchg __WINE_NOT_PORTABLE(interlocked_cmpxchg) #define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr) #define interlocked_xchg __WINE_NOT_PORTABLE(interlocked_xchg) #define interlocked_xchg_ptr __WINE_NOT_PORTABLE(interlocked_xchg_ptr) #define interlocked_xchg_add __WINE_NOT_PORTABLE(interlocked_xchg_add) #define lstat __WINE_NOT_PORTABLE(lstat) #define memcpy_unaligned __WINE_NOT_PORTABLE(memcpy_unaligned) #undef memmove #define memmove __WINE_NOT_PORTABLE(memmove) #define pread __WINE_NOT_PORTABLE(pread) #define pwrite __WINE_NOT_PORTABLE(pwrite) #define spawnvp __WINE_NOT_PORTABLE(spawnvp) #define statvfs __WINE_NOT_PORTABLE(statvfs) #define strcasecmp __WINE_NOT_PORTABLE(strcasecmp) #define strerror __WINE_NOT_PORTABLE(strerror) #define strncasecmp __WINE_NOT_PORTABLE(strncasecmp) #define strnlen __WINE_NOT_PORTABLE(strnlen) #define usleep __WINE_NOT_PORTABLE(usleep) #endif /* NO_LIBWINE_PORT */ #endif /* !defined(__WINE_WINE_PORT_H) */ ================================================ FILE: wine/wine/server.h ================================================ /* * Definitions for the client side of the Wine server communication * * Copyright (C) 1998 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_SERVER_H #define __WINE_WINE_SERVER_H #include #include #include #include #include /* client communication functions */ struct __server_iovec { const void *ptr; data_size_t size; }; #define __SERVER_MAX_DATA 5 struct __server_request_info { union { union generic_request req; /* request structure */ union generic_reply reply; /* reply structure */ } u; unsigned int data_count; /* count of request data pointers */ void *reply_data; /* reply data pointer */ struct __server_iovec data[__SERVER_MAX_DATA]; /* request variable size data */ }; extern unsigned int wine_server_call( void *req_ptr ); extern void CDECL wine_server_send_fd( int fd ); extern int CDECL wine_server_fd_to_handle( int fd, unsigned int access, unsigned int attributes, HANDLE *handle ); extern int CDECL wine_server_handle_to_fd( HANDLE handle, unsigned int access, int *unix_fd, unsigned int *options ); extern void CDECL wine_server_release_fd( HANDLE handle, int unix_fd ); /* do a server call and set the last error code */ static inline unsigned int wine_server_call_err( void *req_ptr ) { unsigned int res = wine_server_call( req_ptr ); if (res) SetLastError( RtlNtStatusToDosError(res) ); return res; } /* get the size of the variable part of the returned reply */ static inline data_size_t wine_server_reply_size( const void *reply ) { return ((const struct reply_header *)reply)->reply_size; } /* add some data to be sent along with the request */ static inline void wine_server_add_data( void *req_ptr, const void *ptr, data_size_t size ) { struct __server_request_info * const req = req_ptr; if (size) { req->data[req->data_count].ptr = ptr; req->data[req->data_count++].size = size; req->u.req.request_header.request_size += size; } } /* set the pointer and max size for the reply var data */ static inline void wine_server_set_reply( void *req_ptr, void *ptr, data_size_t max_size ) { struct __server_request_info * const req = req_ptr; req->reply_data = ptr; req->u.req.request_header.reply_size = max_size; } /* convert an object handle to a server handle */ static inline obj_handle_t wine_server_obj_handle( HANDLE handle ) { if ((int)(INT_PTR)handle != (INT_PTR)handle) return 0xfffffff0; /* some invalid handle */ return (INT_PTR)handle; } /* convert a user handle to a server handle */ static inline user_handle_t wine_server_user_handle( HANDLE handle ) { return (UINT_PTR)handle; } /* convert a server handle to a generic handle */ static inline HANDLE wine_server_ptr_handle( obj_handle_t handle ) { return (HANDLE)(INT_PTR)(int)handle; } /* convert a client pointer to a server client_ptr_t */ static inline client_ptr_t wine_server_client_ptr( const void *ptr ) { return (client_ptr_t)(ULONG_PTR)ptr; } /* convert a server client_ptr_t to a real pointer */ static inline void *wine_server_get_ptr( client_ptr_t ptr ) { return (void *)(ULONG_PTR)ptr; } /* macros for server requests */ #define SERVER_START_REQ(type) \ do { \ struct __server_request_info __req; \ struct type##_request * const req = &__req.u.req.type##_request; \ const struct type##_reply * const reply = &__req.u.reply.type##_reply; \ memset( &__req.u.req, 0, sizeof(__req.u.req) ); \ __req.u.req.request_header.req = REQ_##type; \ __req.data_count = 0; \ (void)reply; \ do #define SERVER_END_REQ \ while(0); \ } while(0) #endif /* __WINE_WINE_SERVER_H */ ================================================ FILE: wine/wine/server_protocol.h ================================================ /* * Wine server protocol definitions * * This file is automatically generated; DO NO EDIT! * Edit server/protocol.def instead and re-run tools/make_requests */ #ifndef __WINE_WINE_SERVER_PROTOCOL_H #define __WINE_WINE_SERVER_PROTOCOL_H #include #include #include #include #include typedef unsigned int obj_handle_t; typedef unsigned int user_handle_t; typedef unsigned int atom_t; typedef unsigned int process_id_t; typedef unsigned int thread_id_t; typedef unsigned int data_size_t; typedef unsigned int ioctl_code_t; typedef unsigned __int64 lparam_t; typedef unsigned __int64 apc_param_t; typedef unsigned __int64 mem_size_t; typedef unsigned __int64 file_pos_t; typedef unsigned __int64 client_ptr_t; typedef unsigned __int64 affinity_t; typedef client_ptr_t mod_handle_t; struct request_header { int req; data_size_t request_size; data_size_t reply_size; }; struct reply_header { unsigned int error; data_size_t reply_size; }; struct request_max_size { int pad[16]; }; #define FIRST_USER_HANDLE 0x0020 #define LAST_USER_HANDLE 0xffef typedef union { int code; struct { int code; int first; unsigned int exc_code; unsigned int flags; client_ptr_t record; client_ptr_t address; int nb_params; int __pad; client_ptr_t params[15]; } exception; struct { int code; obj_handle_t handle; client_ptr_t teb; client_ptr_t start; } create_thread; struct { int code; obj_handle_t file; obj_handle_t process; obj_handle_t thread; mod_handle_t base; int dbg_offset; int dbg_size; client_ptr_t teb; client_ptr_t start; client_ptr_t name; int unicode; } create_process; struct { int code; int exit_code; } exit; struct { int code; obj_handle_t handle; mod_handle_t base; int dbg_offset; int dbg_size; client_ptr_t name; int unicode; } load_dll; struct { int code; int __pad; mod_handle_t base; } unload_dll; } debug_event_t; enum cpu_type { CPU_x86, CPU_x86_64, CPU_POWERPC, CPU_ARM, CPU_ARM64 }; typedef int cpu_type_t; typedef struct { cpu_type_t cpu; unsigned int flags; union { struct { unsigned int eip, ebp, esp, eflags, cs, ss; } i386_regs; struct { unsigned __int64 rip, rbp, rsp; unsigned int cs, ss, flags, __pad; } x86_64_regs; struct { unsigned int iar, msr, ctr, lr, dar, dsisr, trap, __pad; } powerpc_regs; struct { unsigned int sp, lr, pc, cpsr; } arm_regs; struct { unsigned __int64 sp, pc, pstate; } arm64_regs; } ctl; union { struct { unsigned int eax, ebx, ecx, edx, esi, edi; } i386_regs; struct { unsigned __int64 rax,rbx, rcx, rdx, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15; } x86_64_regs; struct { unsigned int gpr[32], cr, xer; } powerpc_regs; struct { unsigned int r[13]; } arm_regs; struct { unsigned __int64 x[31]; } arm64_regs; } integer; union { struct { unsigned int ds, es, fs, gs; } i386_regs; struct { unsigned int ds, es, fs, gs; } x86_64_regs; } seg; union { struct { unsigned int ctrl, status, tag, err_off, err_sel, data_off, data_sel, cr0npx; unsigned char regs[80]; } i386_regs; struct { struct { unsigned __int64 low, high; } fpregs[32]; } x86_64_regs; struct { double fpr[32], fpscr; } powerpc_regs; struct { unsigned __int64 d[32]; unsigned int fpscr; } arm_regs; struct { unsigned __int64 d[64]; unsigned int fpcr, fpsr; } arm64_regs; } fp; union { struct { unsigned int dr0, dr1, dr2, dr3, dr6, dr7; } i386_regs; struct { unsigned __int64 dr0, dr1, dr2, dr3, dr6, dr7; } x86_64_regs; struct { unsigned int dr[8]; } powerpc_regs; struct { unsigned int bvr[8], bcr[8], wvr[1], wcr[1]; } arm_regs; struct { unsigned __int64 bvr[8], wvr[2]; unsigned int bcr[8], wcr[2]; } arm64_regs; } debug; union { unsigned char i386_regs[512]; } ext; } context_t; #define SERVER_CTX_CONTROL 0x01 #define SERVER_CTX_INTEGER 0x02 #define SERVER_CTX_SEGMENTS 0x04 #define SERVER_CTX_FLOATING_POINT 0x08 #define SERVER_CTX_DEBUG_REGISTERS 0x10 #define SERVER_CTX_EXTENDED_REGISTERS 0x20 struct send_fd { thread_id_t tid; int fd; }; struct wake_up_reply { client_ptr_t cookie; int signaled; int __pad; }; typedef __int64 timeout_t; #define TIMEOUT_INFINITE (((timeout_t)0x7fffffff) << 32 | 0xffffffff) typedef struct { unsigned int debug_flags; unsigned int console_flags; obj_handle_t console; obj_handle_t hstdin; obj_handle_t hstdout; obj_handle_t hstderr; unsigned int x; unsigned int y; unsigned int xsize; unsigned int ysize; unsigned int xchars; unsigned int ychars; unsigned int attribute; unsigned int flags; unsigned int show; data_size_t curdir_len; data_size_t dllpath_len; data_size_t imagepath_len; data_size_t cmdline_len; data_size_t title_len; data_size_t desktop_len; data_size_t shellinfo_len; data_size_t runtime_len; } startup_info_t; typedef struct { atom_t atom; int string; lparam_t data; } property_data_t; typedef struct { int left; int top; int right; int bottom; } rectangle_t; typedef struct { obj_handle_t handle; obj_handle_t event; client_ptr_t iosb; client_ptr_t user; client_ptr_t apc; apc_param_t apc_context; } async_data_t; struct hardware_msg_data { lparam_t info; unsigned int hw_id; unsigned int flags; union { int type; struct { int type; unsigned int message; unsigned short vkey; unsigned short scan; } kbd; struct { int type; int x; int y; unsigned int data; } mouse; } rawinput; }; struct callback_msg_data { client_ptr_t callback; lparam_t data; lparam_t result; }; struct winevent_msg_data { user_handle_t hook; thread_id_t tid; client_ptr_t hook_proc; }; typedef union { int type; struct { int type; unsigned short vkey; unsigned short scan; unsigned int flags; unsigned int time; lparam_t info; } kbd; struct { int type; int x; int y; unsigned int data; unsigned int flags; unsigned int time; lparam_t info; } mouse; struct { int type; unsigned int msg; lparam_t lparam; } hw; } hw_input_t; typedef union { unsigned char bytes[1]; struct hardware_msg_data hardware; struct callback_msg_data callback; struct winevent_msg_data winevent; } message_data_t; typedef struct { WCHAR ch; unsigned short attr; } char_info_t; struct filesystem_event { int action; data_size_t len; char name[1]; }; typedef struct { unsigned int low_part; int high_part; } luid_t; #define MAX_ACL_LEN 65535 struct security_descriptor { unsigned int control; data_size_t owner_len; data_size_t group_len; data_size_t sacl_len; data_size_t dacl_len; }; struct object_attributes { obj_handle_t rootdir; unsigned int attributes; data_size_t sd_len; data_size_t name_len; }; struct token_groups { unsigned int count; }; enum select_op { SELECT_NONE, SELECT_WAIT, SELECT_WAIT_ALL, SELECT_SIGNAL_AND_WAIT, SELECT_KEYED_EVENT_WAIT, SELECT_KEYED_EVENT_RELEASE }; typedef union { enum select_op op; struct { enum select_op op; obj_handle_t handles[MAXIMUM_WAIT_OBJECTS]; } wait; struct { enum select_op op; obj_handle_t wait; obj_handle_t signal; } signal_and_wait; struct { enum select_op op; obj_handle_t handle; client_ptr_t key; } keyed_event; } select_op_t; enum apc_type { APC_NONE, APC_USER, APC_TIMER, APC_ASYNC_IO, APC_VIRTUAL_ALLOC, APC_VIRTUAL_FREE, APC_VIRTUAL_QUERY, APC_VIRTUAL_PROTECT, APC_VIRTUAL_FLUSH, APC_VIRTUAL_LOCK, APC_VIRTUAL_UNLOCK, APC_MAP_VIEW, APC_UNMAP_VIEW, APC_CREATE_THREAD }; typedef union { enum apc_type type; struct { enum apc_type type; int __pad; client_ptr_t func; apc_param_t args[3]; } user; struct { enum apc_type type; int __pad; client_ptr_t func; timeout_t time; client_ptr_t arg; } timer; struct { enum apc_type type; unsigned int status; client_ptr_t user; client_ptr_t sb; } async_io; struct { enum apc_type type; unsigned int op_type; client_ptr_t addr; mem_size_t size; unsigned int zero_bits; unsigned int prot; } virtual_alloc; struct { enum apc_type type; unsigned int op_type; client_ptr_t addr; mem_size_t size; } virtual_free; struct { enum apc_type type; int __pad; client_ptr_t addr; } virtual_query; struct { enum apc_type type; unsigned int prot; client_ptr_t addr; mem_size_t size; } virtual_protect; struct { enum apc_type type; int __pad; client_ptr_t addr; mem_size_t size; } virtual_flush; struct { enum apc_type type; int __pad; client_ptr_t addr; mem_size_t size; } virtual_lock; struct { enum apc_type type; int __pad; client_ptr_t addr; mem_size_t size; } virtual_unlock; struct { enum apc_type type; obj_handle_t handle; client_ptr_t addr; mem_size_t size; file_pos_t offset; unsigned int alloc_type; unsigned short zero_bits; unsigned short prot; } map_view; struct { enum apc_type type; int __pad; client_ptr_t addr; } unmap_view; struct { enum apc_type type; int suspend; client_ptr_t func; client_ptr_t arg; mem_size_t reserve; mem_size_t commit; } create_thread; } apc_call_t; typedef union { enum apc_type type; struct { enum apc_type type; unsigned int status; unsigned int total; } async_io; struct { enum apc_type type; unsigned int status; client_ptr_t addr; mem_size_t size; } virtual_alloc; struct { enum apc_type type; unsigned int status; client_ptr_t addr; mem_size_t size; } virtual_free; struct { enum apc_type type; unsigned int status; client_ptr_t base; client_ptr_t alloc_base; mem_size_t size; unsigned short state; unsigned short prot; unsigned short alloc_prot; unsigned short alloc_type; } virtual_query; struct { enum apc_type type; unsigned int status; client_ptr_t addr; mem_size_t size; unsigned int prot; } virtual_protect; struct { enum apc_type type; unsigned int status; client_ptr_t addr; mem_size_t size; } virtual_flush; struct { enum apc_type type; unsigned int status; client_ptr_t addr; mem_size_t size; } virtual_lock; struct { enum apc_type type; unsigned int status; client_ptr_t addr; mem_size_t size; } virtual_unlock; struct { enum apc_type type; unsigned int status; client_ptr_t addr; mem_size_t size; } map_view; struct { enum apc_type type; unsigned int status; } unmap_view; struct { enum apc_type type; unsigned int status; thread_id_t tid; obj_handle_t handle; } create_thread; } apc_result_t; typedef union { unsigned int major; struct { unsigned int major; unsigned int access; unsigned int sharing; unsigned int options; client_ptr_t device; } create; struct { unsigned int major; int __pad; client_ptr_t file; } close; struct { unsigned int major; unsigned int key; client_ptr_t file; file_pos_t pos; } read; struct { unsigned int major; unsigned int key; client_ptr_t file; file_pos_t pos; } write; struct { unsigned int major; int __pad; client_ptr_t file; } flush; struct { unsigned int major; ioctl_code_t code; client_ptr_t file; } ioctl; } irp_params_t; typedef struct { client_ptr_t base; client_ptr_t entry_point; mem_size_t map_size; mem_size_t stack_size; mem_size_t stack_commit; unsigned int zerobits; unsigned int subsystem; unsigned short subsystem_low; unsigned short subsystem_high; unsigned int gp; unsigned short image_charact; unsigned short dll_charact; unsigned short machine; unsigned char contains_code; unsigned char image_flags; unsigned int loader_flags; unsigned int header_size; unsigned int file_size; unsigned int checksum; } pe_image_info_t; #define IMAGE_FLAGS_ComPlusNativeReady 0x01 #define IMAGE_FLAGS_ComPlusILOnly 0x02 #define IMAGE_FLAGS_ImageDynamicallyRelocated 0x04 #define IMAGE_FLAGS_ImageMappedFlat 0x08 #define IMAGE_FLAGS_BaseBelow4gb 0x10 struct rawinput_device { unsigned short usage_page; unsigned short usage; unsigned int flags; user_handle_t target; }; struct new_process_request { struct request_header __header; int inherit_all; unsigned int create_flags; int socket_fd; obj_handle_t exe_file; unsigned int process_access; unsigned int process_attr; unsigned int thread_access; unsigned int thread_attr; cpu_type_t cpu; data_size_t info_size; /* VARARG(info,startup_info,info_size); */ /* VARARG(env,unicode_str); */ char __pad_52[4]; }; struct new_process_reply { struct reply_header __header; obj_handle_t info; process_id_t pid; obj_handle_t phandle; thread_id_t tid; obj_handle_t thandle; char __pad_28[4]; }; struct get_new_process_info_request { struct request_header __header; obj_handle_t info; }; struct get_new_process_info_reply { struct reply_header __header; int success; int exit_code; }; struct new_thread_request { struct request_header __header; unsigned int access; unsigned int attributes; int suspend; int request_fd; char __pad_28[4]; }; struct new_thread_reply { struct reply_header __header; thread_id_t tid; obj_handle_t handle; }; struct get_startup_info_request { struct request_header __header; char __pad_12[4]; }; struct get_startup_info_reply { struct reply_header __header; obj_handle_t exe_file; data_size_t info_size; /* VARARG(info,startup_info,info_size); */ /* VARARG(env,unicode_str); */ }; struct init_process_done_request { struct request_header __header; int gui; mod_handle_t module; client_ptr_t ldt_copy; client_ptr_t entry; }; struct init_process_done_reply { struct reply_header __header; int suspend; char __pad_12[4]; }; struct init_thread_request { struct request_header __header; int unix_pid; int unix_tid; int debug_level; client_ptr_t teb; client_ptr_t entry; int reply_fd; int wait_fd; cpu_type_t cpu; char __pad_52[4]; }; struct init_thread_reply { struct reply_header __header; process_id_t pid; thread_id_t tid; timeout_t server_start; data_size_t info_size; int version; unsigned int all_cpus; int suspend; }; struct terminate_process_request { struct request_header __header; obj_handle_t handle; int exit_code; char __pad_20[4]; }; struct terminate_process_reply { struct reply_header __header; int self; char __pad_12[4]; }; struct terminate_thread_request { struct request_header __header; obj_handle_t handle; int exit_code; char __pad_20[4]; }; struct terminate_thread_reply { struct reply_header __header; int self; int last; }; struct get_process_info_request { struct request_header __header; obj_handle_t handle; }; struct get_process_info_reply { struct reply_header __header; process_id_t pid; process_id_t ppid; affinity_t affinity; client_ptr_t peb; timeout_t start_time; timeout_t end_time; int exit_code; int priority; cpu_type_t cpu; short int debugger_present; short int debug_children; }; struct get_process_vm_counters_request { struct request_header __header; obj_handle_t handle; }; struct get_process_vm_counters_reply { struct reply_header __header; mem_size_t peak_virtual_size; mem_size_t virtual_size; mem_size_t peak_working_set_size; mem_size_t working_set_size; mem_size_t pagefile_usage; mem_size_t peak_pagefile_usage; }; struct set_process_info_request { struct request_header __header; obj_handle_t handle; int mask; int priority; affinity_t affinity; }; struct set_process_info_reply { struct reply_header __header; }; #define SET_PROCESS_INFO_PRIORITY 0x01 #define SET_PROCESS_INFO_AFFINITY 0x02 struct get_thread_info_request { struct request_header __header; obj_handle_t handle; thread_id_t tid_in; char __pad_20[4]; }; struct get_thread_info_reply { struct reply_header __header; process_id_t pid; thread_id_t tid; client_ptr_t teb; client_ptr_t entry_point; affinity_t affinity; int exit_code; int priority; int last; char __pad_52[4]; }; struct get_thread_times_request { struct request_header __header; obj_handle_t handle; }; struct get_thread_times_reply { struct reply_header __header; timeout_t creation_time; timeout_t exit_time; }; struct set_thread_info_request { struct request_header __header; obj_handle_t handle; int mask; int priority; affinity_t affinity; client_ptr_t entry_point; obj_handle_t token; char __pad_44[4]; }; struct set_thread_info_reply { struct reply_header __header; }; #define SET_THREAD_INFO_PRIORITY 0x01 #define SET_THREAD_INFO_AFFINITY 0x02 #define SET_THREAD_INFO_TOKEN 0x04 #define SET_THREAD_INFO_ENTRYPOINT 0x08 struct get_dll_info_request { struct request_header __header; obj_handle_t handle; mod_handle_t base_address; }; struct get_dll_info_reply { struct reply_header __header; client_ptr_t entry_point; data_size_t filename_len; /* VARARG(filename,unicode_str); */ char __pad_20[4]; }; struct suspend_thread_request { struct request_header __header; obj_handle_t handle; }; struct suspend_thread_reply { struct reply_header __header; int count; char __pad_12[4]; }; struct resume_thread_request { struct request_header __header; obj_handle_t handle; }; struct resume_thread_reply { struct reply_header __header; int count; char __pad_12[4]; }; struct load_dll_request { struct request_header __header; data_size_t dbg_offset; mod_handle_t base; client_ptr_t name; data_size_t dbg_size; /* VARARG(filename,unicode_str); */ char __pad_36[4]; }; struct load_dll_reply { struct reply_header __header; }; struct unload_dll_request { struct request_header __header; char __pad_12[4]; mod_handle_t base; }; struct unload_dll_reply { struct reply_header __header; }; struct queue_apc_request { struct request_header __header; obj_handle_t handle; apc_call_t call; }; struct queue_apc_reply { struct reply_header __header; obj_handle_t handle; int self; }; struct get_apc_result_request { struct request_header __header; obj_handle_t handle; }; struct get_apc_result_reply { struct reply_header __header; apc_result_t result; }; struct close_handle_request { struct request_header __header; obj_handle_t handle; }; struct close_handle_reply { struct reply_header __header; }; struct set_handle_info_request { struct request_header __header; obj_handle_t handle; int flags; int mask; }; struct set_handle_info_reply { struct reply_header __header; int old_flags; char __pad_12[4]; }; struct dup_handle_request { struct request_header __header; obj_handle_t src_process; obj_handle_t src_handle; obj_handle_t dst_process; unsigned int access; unsigned int attributes; unsigned int options; char __pad_36[4]; }; struct dup_handle_reply { struct reply_header __header; obj_handle_t handle; int self; int closed; char __pad_20[4]; }; #define DUP_HANDLE_CLOSE_SOURCE DUPLICATE_CLOSE_SOURCE #define DUP_HANDLE_SAME_ACCESS DUPLICATE_SAME_ACCESS #define DUP_HANDLE_MAKE_GLOBAL 0x80000000 struct open_process_request { struct request_header __header; process_id_t pid; unsigned int access; unsigned int attributes; }; struct open_process_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_thread_request { struct request_header __header; thread_id_t tid; unsigned int access; unsigned int attributes; }; struct open_thread_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct select_request { struct request_header __header; int flags; client_ptr_t cookie; timeout_t timeout; obj_handle_t prev_apc; /* VARARG(result,apc_result); */ /* VARARG(data,select_op); */ char __pad_36[4]; }; struct select_reply { struct reply_header __header; timeout_t timeout; apc_call_t call; obj_handle_t apc_handle; char __pad_60[4]; }; #define SELECT_ALERTABLE 1 #define SELECT_INTERRUPTIBLE 2 struct create_event_request { struct request_header __header; unsigned int access; int manual_reset; int initial_state; /* VARARG(objattr,object_attributes); */ }; struct create_event_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct event_op_request { struct request_header __header; obj_handle_t handle; int op; char __pad_20[4]; }; struct event_op_reply { struct reply_header __header; }; enum event_op { PULSE_EVENT, SET_EVENT, RESET_EVENT }; struct query_event_request { struct request_header __header; obj_handle_t handle; }; struct query_event_reply { struct reply_header __header; int manual_reset; int state; }; struct open_event_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_event_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct create_keyed_event_request { struct request_header __header; unsigned int access; /* VARARG(objattr,object_attributes); */ }; struct create_keyed_event_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_keyed_event_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_keyed_event_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct create_mutex_request { struct request_header __header; unsigned int access; int owned; /* VARARG(objattr,object_attributes); */ char __pad_20[4]; }; struct create_mutex_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct release_mutex_request { struct request_header __header; obj_handle_t handle; }; struct release_mutex_reply { struct reply_header __header; unsigned int prev_count; char __pad_12[4]; }; struct open_mutex_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_mutex_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct query_mutex_request { struct request_header __header; obj_handle_t handle; }; struct query_mutex_reply { struct reply_header __header; unsigned int count; int owned; int abandoned; char __pad_20[4]; }; struct create_semaphore_request { struct request_header __header; unsigned int access; unsigned int initial; unsigned int max; /* VARARG(objattr,object_attributes); */ }; struct create_semaphore_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct release_semaphore_request { struct request_header __header; obj_handle_t handle; unsigned int count; char __pad_20[4]; }; struct release_semaphore_reply { struct reply_header __header; unsigned int prev_count; char __pad_12[4]; }; struct query_semaphore_request { struct request_header __header; obj_handle_t handle; }; struct query_semaphore_reply { struct reply_header __header; unsigned int current; unsigned int max; }; struct open_semaphore_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_semaphore_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct create_file_request { struct request_header __header; unsigned int access; unsigned int sharing; int create; unsigned int options; unsigned int attrs; /* VARARG(objattr,object_attributes); */ /* VARARG(filename,string); */ }; struct create_file_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_file_object_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; unsigned int sharing; unsigned int options; /* VARARG(filename,unicode_str); */ }; struct open_file_object_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct alloc_file_handle_request { struct request_header __header; unsigned int access; unsigned int attributes; int fd; }; struct alloc_file_handle_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct get_handle_unix_name_request { struct request_header __header; obj_handle_t handle; }; struct get_handle_unix_name_reply { struct reply_header __header; data_size_t name_len; /* VARARG(name,string); */ char __pad_12[4]; }; struct get_handle_fd_request { struct request_header __header; obj_handle_t handle; }; struct get_handle_fd_reply { struct reply_header __header; int type; int cacheable; unsigned int access; unsigned int options; }; enum server_fd_type { FD_TYPE_INVALID, FD_TYPE_FILE, FD_TYPE_DIR, FD_TYPE_SOCKET, FD_TYPE_SERIAL, FD_TYPE_PIPE, FD_TYPE_MAILSLOT, FD_TYPE_CHAR, FD_TYPE_DEVICE, FD_TYPE_NB_TYPES }; struct get_directory_cache_entry_request { struct request_header __header; obj_handle_t handle; }; struct get_directory_cache_entry_reply { struct reply_header __header; int entry; /* VARARG(free,ints); */ char __pad_12[4]; }; struct flush_request { struct request_header __header; char __pad_12[4]; async_data_t async; }; struct flush_reply { struct reply_header __header; obj_handle_t event; char __pad_12[4]; }; struct get_file_info_request { struct request_header __header; obj_handle_t handle; unsigned int info_class; char __pad_20[4]; }; struct get_file_info_reply { struct reply_header __header; /* VARARG(data,bytes); */ }; struct get_volume_info_request { struct request_header __header; obj_handle_t handle; unsigned int info_class; char __pad_20[4]; }; struct get_volume_info_reply { struct reply_header __header; /* VARARG(data,bytes); */ }; struct lock_file_request { struct request_header __header; obj_handle_t handle; file_pos_t offset; file_pos_t count; int shared; int wait; }; struct lock_file_reply { struct reply_header __header; obj_handle_t handle; int overlapped; }; struct unlock_file_request { struct request_header __header; obj_handle_t handle; file_pos_t offset; file_pos_t count; }; struct unlock_file_reply { struct reply_header __header; }; struct create_socket_request { struct request_header __header; unsigned int access; unsigned int attributes; int family; int type; int protocol; unsigned int flags; char __pad_36[4]; }; struct create_socket_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct accept_socket_request { struct request_header __header; obj_handle_t lhandle; unsigned int access; unsigned int attributes; }; struct accept_socket_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct accept_into_socket_request { struct request_header __header; obj_handle_t lhandle; obj_handle_t ahandle; char __pad_20[4]; }; struct accept_into_socket_reply { struct reply_header __header; }; struct set_socket_event_request { struct request_header __header; obj_handle_t handle; unsigned int mask; obj_handle_t event; user_handle_t window; unsigned int msg; }; struct set_socket_event_reply { struct reply_header __header; }; struct get_socket_event_request { struct request_header __header; obj_handle_t handle; int service; obj_handle_t c_event; }; struct get_socket_event_reply { struct reply_header __header; unsigned int mask; unsigned int pmask; unsigned int state; /* VARARG(errors,ints); */ char __pad_20[4]; }; struct get_socket_info_request { struct request_header __header; obj_handle_t handle; }; struct get_socket_info_reply { struct reply_header __header; int family; int type; int protocol; char __pad_20[4]; }; struct enable_socket_event_request { struct request_header __header; obj_handle_t handle; unsigned int mask; unsigned int sstate; unsigned int cstate; char __pad_28[4]; }; struct enable_socket_event_reply { struct reply_header __header; }; struct set_socket_deferred_request { struct request_header __header; obj_handle_t handle; obj_handle_t deferred; char __pad_20[4]; }; struct set_socket_deferred_reply { struct reply_header __header; }; struct alloc_console_request { struct request_header __header; unsigned int access; unsigned int attributes; process_id_t pid; int input_fd; char __pad_28[4]; }; struct alloc_console_reply { struct reply_header __header; obj_handle_t handle_in; obj_handle_t event; }; struct free_console_request { struct request_header __header; char __pad_12[4]; }; struct free_console_reply { struct reply_header __header; }; #define CONSOLE_RENDERER_NONE_EVENT 0x00 #define CONSOLE_RENDERER_TITLE_EVENT 0x01 #define CONSOLE_RENDERER_ACTIVE_SB_EVENT 0x02 #define CONSOLE_RENDERER_SB_RESIZE_EVENT 0x03 #define CONSOLE_RENDERER_UPDATE_EVENT 0x04 #define CONSOLE_RENDERER_CURSOR_POS_EVENT 0x05 #define CONSOLE_RENDERER_CURSOR_GEOM_EVENT 0x06 #define CONSOLE_RENDERER_DISPLAY_EVENT 0x07 #define CONSOLE_RENDERER_EXIT_EVENT 0x08 struct console_renderer_event { short event; union { struct { short top; short bottom; } update; struct { short width; short height; } resize; struct { short x; short y; } cursor_pos; struct { short visible; short size; } cursor_geom; struct { short left; short top; short width; short height; } display; } u; }; struct get_console_renderer_events_request { struct request_header __header; obj_handle_t handle; }; struct get_console_renderer_events_reply { struct reply_header __header; /* VARARG(data,bytes); */ }; struct open_console_request { struct request_header __header; obj_handle_t from; unsigned int access; unsigned int attributes; int share; char __pad_28[4]; }; struct open_console_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct attach_console_request { struct request_header __header; process_id_t pid; }; struct attach_console_reply { struct reply_header __header; obj_handle_t std_in; obj_handle_t std_out; obj_handle_t std_err; char __pad_20[4]; }; struct get_console_wait_event_request { struct request_header __header; char __pad_12[4]; }; struct get_console_wait_event_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct get_console_mode_request { struct request_header __header; obj_handle_t handle; }; struct get_console_mode_reply { struct reply_header __header; int mode; char __pad_12[4]; }; struct set_console_mode_request { struct request_header __header; obj_handle_t handle; int mode; char __pad_20[4]; }; struct set_console_mode_reply { struct reply_header __header; }; struct set_console_input_info_request { struct request_header __header; obj_handle_t handle; int mask; obj_handle_t active_sb; int history_mode; int history_size; int edition_mode; int input_cp; int output_cp; user_handle_t win; /* VARARG(title,unicode_str); */ }; struct set_console_input_info_reply { struct reply_header __header; }; #define SET_CONSOLE_INPUT_INFO_ACTIVE_SB 0x01 #define SET_CONSOLE_INPUT_INFO_TITLE 0x02 #define SET_CONSOLE_INPUT_INFO_HISTORY_MODE 0x04 #define SET_CONSOLE_INPUT_INFO_HISTORY_SIZE 0x08 #define SET_CONSOLE_INPUT_INFO_EDITION_MODE 0x10 #define SET_CONSOLE_INPUT_INFO_INPUT_CODEPAGE 0x20 #define SET_CONSOLE_INPUT_INFO_OUTPUT_CODEPAGE 0x40 #define SET_CONSOLE_INPUT_INFO_WIN 0x80 struct get_console_input_info_request { struct request_header __header; obj_handle_t handle; }; struct get_console_input_info_reply { struct reply_header __header; int history_mode; int history_size; int history_index; int edition_mode; int input_cp; int output_cp; user_handle_t win; /* VARARG(title,unicode_str); */ char __pad_36[4]; }; struct append_console_input_history_request { struct request_header __header; obj_handle_t handle; /* VARARG(line,unicode_str); */ }; struct append_console_input_history_reply { struct reply_header __header; }; struct get_console_input_history_request { struct request_header __header; obj_handle_t handle; int index; char __pad_20[4]; }; struct get_console_input_history_reply { struct reply_header __header; int total; /* VARARG(line,unicode_str); */ char __pad_12[4]; }; struct create_console_output_request { struct request_header __header; obj_handle_t handle_in; unsigned int access; unsigned int attributes; unsigned int share; int fd; }; struct create_console_output_reply { struct reply_header __header; obj_handle_t handle_out; char __pad_12[4]; }; struct set_console_output_info_request { struct request_header __header; obj_handle_t handle; int mask; short int cursor_size; short int cursor_visible; short int cursor_x; short int cursor_y; short int width; short int height; short int attr; short int popup_attr; short int win_left; short int win_top; short int win_right; short int win_bottom; short int max_width; short int max_height; short int font_width; short int font_height; /* VARARG(colors,uints); */ char __pad_52[4]; }; struct set_console_output_info_reply { struct reply_header __header; }; #define SET_CONSOLE_OUTPUT_INFO_CURSOR_GEOM 0x0001 #define SET_CONSOLE_OUTPUT_INFO_CURSOR_POS 0x0002 #define SET_CONSOLE_OUTPUT_INFO_SIZE 0x0004 #define SET_CONSOLE_OUTPUT_INFO_ATTR 0x0008 #define SET_CONSOLE_OUTPUT_INFO_DISPLAY_WINDOW 0x0010 #define SET_CONSOLE_OUTPUT_INFO_MAX_SIZE 0x0020 #define SET_CONSOLE_OUTPUT_INFO_FONT 0x0040 #define SET_CONSOLE_OUTPUT_INFO_COLORTABLE 0x0080 #define SET_CONSOLE_OUTPUT_INFO_POPUP_ATTR 0x0100 struct get_console_output_info_request { struct request_header __header; obj_handle_t handle; }; struct get_console_output_info_reply { struct reply_header __header; short int cursor_size; short int cursor_visible; short int cursor_x; short int cursor_y; short int width; short int height; short int attr; short int popup_attr; short int win_left; short int win_top; short int win_right; short int win_bottom; short int max_width; short int max_height; short int font_width; short int font_height; /* VARARG(colors,uints); */ }; struct write_console_input_request { struct request_header __header; obj_handle_t handle; /* VARARG(rec,input_records); */ }; struct write_console_input_reply { struct reply_header __header; int written; char __pad_12[4]; }; struct read_console_input_request { struct request_header __header; obj_handle_t handle; int flush; char __pad_20[4]; }; struct read_console_input_reply { struct reply_header __header; int read; /* VARARG(rec,input_records); */ char __pad_12[4]; }; struct write_console_output_request { struct request_header __header; obj_handle_t handle; int x; int y; int mode; int wrap; /* VARARG(data,bytes); */ }; struct write_console_output_reply { struct reply_header __header; int written; int width; int height; char __pad_20[4]; }; enum char_info_mode { CHAR_INFO_MODE_TEXT, CHAR_INFO_MODE_ATTR, CHAR_INFO_MODE_TEXTATTR, CHAR_INFO_MODE_TEXTSTDATTR }; struct fill_console_output_request { struct request_header __header; obj_handle_t handle; int x; int y; int mode; int count; int wrap; char_info_t data; }; struct fill_console_output_reply { struct reply_header __header; int written; char __pad_12[4]; }; struct read_console_output_request { struct request_header __header; obj_handle_t handle; int x; int y; int mode; int wrap; }; struct read_console_output_reply { struct reply_header __header; int width; int height; /* VARARG(data,bytes); */ }; struct move_console_output_request { struct request_header __header; obj_handle_t handle; short int x_src; short int y_src; short int x_dst; short int y_dst; short int w; short int h; char __pad_28[4]; }; struct move_console_output_reply { struct reply_header __header; }; struct send_console_signal_request { struct request_header __header; int signal; process_id_t group_id; char __pad_20[4]; }; struct send_console_signal_reply { struct reply_header __header; }; struct read_directory_changes_request { struct request_header __header; unsigned int filter; int subtree; int want_data; async_data_t async; }; struct read_directory_changes_reply { struct reply_header __header; }; struct read_change_request { struct request_header __header; obj_handle_t handle; }; struct read_change_reply { struct reply_header __header; /* VARARG(events,filesystem_event); */ }; struct create_mapping_request { struct request_header __header; unsigned int access; unsigned int flags; unsigned int file_access; mem_size_t size; obj_handle_t file_handle; /* VARARG(objattr,object_attributes); */ char __pad_36[4]; }; struct create_mapping_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_mapping_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_mapping_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct get_mapping_info_request { struct request_header __header; obj_handle_t handle; unsigned int access; char __pad_20[4]; }; struct get_mapping_info_reply { struct reply_header __header; mem_size_t size; unsigned int flags; obj_handle_t shared_file; /* VARARG(image,pe_image_info); */ }; struct map_view_request { struct request_header __header; obj_handle_t mapping; unsigned int access; char __pad_20[4]; client_ptr_t base; mem_size_t size; file_pos_t start; }; struct map_view_reply { struct reply_header __header; }; struct unmap_view_request { struct request_header __header; char __pad_12[4]; client_ptr_t base; }; struct unmap_view_reply { struct reply_header __header; }; struct get_mapping_committed_range_request { struct request_header __header; char __pad_12[4]; client_ptr_t base; file_pos_t offset; }; struct get_mapping_committed_range_reply { struct reply_header __header; mem_size_t size; int committed; char __pad_20[4]; }; struct add_mapping_committed_range_request { struct request_header __header; char __pad_12[4]; client_ptr_t base; file_pos_t offset; mem_size_t size; }; struct add_mapping_committed_range_reply { struct reply_header __header; }; struct is_same_mapping_request { struct request_header __header; char __pad_12[4]; client_ptr_t base1; client_ptr_t base2; }; struct is_same_mapping_reply { struct reply_header __header; }; #define SNAP_PROCESS 0x00000001 #define SNAP_THREAD 0x00000002 struct create_snapshot_request { struct request_header __header; unsigned int attributes; unsigned int flags; char __pad_20[4]; }; struct create_snapshot_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct next_process_request { struct request_header __header; obj_handle_t handle; int reset; char __pad_20[4]; }; struct next_process_reply { struct reply_header __header; int count; process_id_t pid; process_id_t ppid; int threads; int priority; int handles; int unix_pid; /* VARARG(filename,unicode_str); */ char __pad_36[4]; }; struct next_thread_request { struct request_header __header; obj_handle_t handle; int reset; char __pad_20[4]; }; struct next_thread_reply { struct reply_header __header; int count; process_id_t pid; thread_id_t tid; int base_pri; int delta_pri; char __pad_28[4]; }; struct wait_debug_event_request { struct request_header __header; int get_handle; }; struct wait_debug_event_reply { struct reply_header __header; process_id_t pid; thread_id_t tid; obj_handle_t wait; /* VARARG(event,debug_event); */ char __pad_20[4]; }; struct queue_exception_event_request { struct request_header __header; int first; unsigned int code; unsigned int flags; client_ptr_t record; client_ptr_t address; data_size_t len; /* VARARG(params,uints64,len); */ /* VARARG(context,context); */ char __pad_44[4]; }; struct queue_exception_event_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct get_exception_status_request { struct request_header __header; obj_handle_t handle; }; struct get_exception_status_reply { struct reply_header __header; /* VARARG(context,context); */ }; struct continue_debug_event_request { struct request_header __header; process_id_t pid; thread_id_t tid; int status; }; struct continue_debug_event_reply { struct reply_header __header; }; struct debug_process_request { struct request_header __header; process_id_t pid; int attach; char __pad_20[4]; }; struct debug_process_reply { struct reply_header __header; }; struct debug_break_request { struct request_header __header; obj_handle_t handle; }; struct debug_break_reply { struct reply_header __header; int self; char __pad_12[4]; }; struct set_debugger_kill_on_exit_request { struct request_header __header; int kill_on_exit; }; struct set_debugger_kill_on_exit_reply { struct reply_header __header; }; struct read_process_memory_request { struct request_header __header; obj_handle_t handle; client_ptr_t addr; }; struct read_process_memory_reply { struct reply_header __header; /* VARARG(data,bytes); */ }; struct write_process_memory_request { struct request_header __header; obj_handle_t handle; client_ptr_t addr; /* VARARG(data,bytes); */ }; struct write_process_memory_reply { struct reply_header __header; }; struct create_key_request { struct request_header __header; unsigned int access; unsigned int options; /* VARARG(objattr,object_attributes); */ /* VARARG(class,unicode_str); */ char __pad_20[4]; }; struct create_key_reply { struct reply_header __header; obj_handle_t hkey; int created; }; struct open_key_request { struct request_header __header; obj_handle_t parent; unsigned int access; unsigned int attributes; /* VARARG(name,unicode_str); */ }; struct open_key_reply { struct reply_header __header; obj_handle_t hkey; char __pad_12[4]; }; struct delete_key_request { struct request_header __header; obj_handle_t hkey; }; struct delete_key_reply { struct reply_header __header; }; struct flush_key_request { struct request_header __header; obj_handle_t hkey; }; struct flush_key_reply { struct reply_header __header; }; struct enum_key_request { struct request_header __header; obj_handle_t hkey; int index; int info_class; }; struct enum_key_reply { struct reply_header __header; int subkeys; int max_subkey; int max_class; int values; int max_value; int max_data; timeout_t modif; data_size_t total; data_size_t namelen; /* VARARG(name,unicode_str,namelen); */ /* VARARG(class,unicode_str); */ }; struct set_key_value_request { struct request_header __header; obj_handle_t hkey; int type; data_size_t namelen; /* VARARG(name,unicode_str,namelen); */ /* VARARG(data,bytes); */ }; struct set_key_value_reply { struct reply_header __header; }; struct get_key_value_request { struct request_header __header; obj_handle_t hkey; /* VARARG(name,unicode_str); */ }; struct get_key_value_reply { struct reply_header __header; int type; data_size_t total; /* VARARG(data,bytes); */ }; struct enum_key_value_request { struct request_header __header; obj_handle_t hkey; int index; int info_class; }; struct enum_key_value_reply { struct reply_header __header; int type; data_size_t total; data_size_t namelen; /* VARARG(name,unicode_str,namelen); */ /* VARARG(data,bytes); */ char __pad_20[4]; }; struct delete_key_value_request { struct request_header __header; obj_handle_t hkey; /* VARARG(name,unicode_str); */ }; struct delete_key_value_reply { struct reply_header __header; }; struct load_registry_request { struct request_header __header; obj_handle_t file; /* VARARG(objattr,object_attributes); */ }; struct load_registry_reply { struct reply_header __header; }; struct unload_registry_request { struct request_header __header; obj_handle_t hkey; }; struct unload_registry_reply { struct reply_header __header; }; struct save_registry_request { struct request_header __header; obj_handle_t hkey; obj_handle_t file; char __pad_20[4]; }; struct save_registry_reply { struct reply_header __header; }; struct set_registry_notification_request { struct request_header __header; obj_handle_t hkey; obj_handle_t event; int subtree; unsigned int filter; char __pad_28[4]; }; struct set_registry_notification_reply { struct reply_header __header; }; struct create_timer_request { struct request_header __header; unsigned int access; int manual; /* VARARG(objattr,object_attributes); */ char __pad_20[4]; }; struct create_timer_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_timer_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_timer_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct set_timer_request { struct request_header __header; obj_handle_t handle; timeout_t expire; client_ptr_t callback; client_ptr_t arg; int period; char __pad_44[4]; }; struct set_timer_reply { struct reply_header __header; int signaled; char __pad_12[4]; }; struct cancel_timer_request { struct request_header __header; obj_handle_t handle; }; struct cancel_timer_reply { struct reply_header __header; int signaled; char __pad_12[4]; }; struct get_timer_info_request { struct request_header __header; obj_handle_t handle; }; struct get_timer_info_reply { struct reply_header __header; timeout_t when; int signaled; char __pad_20[4]; }; struct get_thread_context_request { struct request_header __header; obj_handle_t handle; unsigned int flags; int suspend; }; struct get_thread_context_reply { struct reply_header __header; int self; /* VARARG(context,context); */ char __pad_12[4]; }; struct set_thread_context_request { struct request_header __header; obj_handle_t handle; int suspend; /* VARARG(context,context); */ char __pad_20[4]; }; struct set_thread_context_reply { struct reply_header __header; int self; char __pad_12[4]; }; struct get_selector_entry_request { struct request_header __header; obj_handle_t handle; int entry; char __pad_20[4]; }; struct get_selector_entry_reply { struct reply_header __header; unsigned int base; unsigned int limit; unsigned char flags; char __pad_17[7]; }; struct add_atom_request { struct request_header __header; obj_handle_t table; /* VARARG(name,unicode_str); */ }; struct add_atom_reply { struct reply_header __header; atom_t atom; char __pad_12[4]; }; struct delete_atom_request { struct request_header __header; obj_handle_t table; atom_t atom; char __pad_20[4]; }; struct delete_atom_reply { struct reply_header __header; }; struct find_atom_request { struct request_header __header; obj_handle_t table; /* VARARG(name,unicode_str); */ }; struct find_atom_reply { struct reply_header __header; atom_t atom; char __pad_12[4]; }; struct get_atom_information_request { struct request_header __header; obj_handle_t table; atom_t atom; char __pad_20[4]; }; struct get_atom_information_reply { struct reply_header __header; int count; int pinned; data_size_t total; /* VARARG(name,unicode_str); */ char __pad_20[4]; }; struct set_atom_information_request { struct request_header __header; obj_handle_t table; atom_t atom; int pinned; }; struct set_atom_information_reply { struct reply_header __header; }; struct empty_atom_table_request { struct request_header __header; obj_handle_t table; int if_pinned; char __pad_20[4]; }; struct empty_atom_table_reply { struct reply_header __header; }; struct init_atom_table_request { struct request_header __header; int entries; }; struct init_atom_table_reply { struct reply_header __header; obj_handle_t table; char __pad_12[4]; }; struct get_msg_queue_request { struct request_header __header; char __pad_12[4]; }; struct get_msg_queue_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct set_queue_fd_request { struct request_header __header; obj_handle_t handle; }; struct set_queue_fd_reply { struct reply_header __header; }; struct set_queue_mask_request { struct request_header __header; unsigned int wake_mask; unsigned int changed_mask; int skip_wait; }; struct set_queue_mask_reply { struct reply_header __header; unsigned int wake_bits; unsigned int changed_bits; }; struct get_queue_status_request { struct request_header __header; unsigned int clear_bits; }; struct get_queue_status_reply { struct reply_header __header; unsigned int wake_bits; unsigned int changed_bits; }; struct get_process_idle_event_request { struct request_header __header; obj_handle_t handle; }; struct get_process_idle_event_reply { struct reply_header __header; obj_handle_t event; char __pad_12[4]; }; struct send_message_request { struct request_header __header; thread_id_t id; int type; int flags; user_handle_t win; unsigned int msg; lparam_t wparam; lparam_t lparam; timeout_t timeout; /* VARARG(data,message_data); */ }; struct send_message_reply { struct reply_header __header; }; struct post_quit_message_request { struct request_header __header; int exit_code; }; struct post_quit_message_reply { struct reply_header __header; }; enum message_type { MSG_ASCII, MSG_UNICODE, MSG_NOTIFY, MSG_CALLBACK, MSG_CALLBACK_RESULT, MSG_OTHER_PROCESS, MSG_POSTED, MSG_HARDWARE, MSG_WINEVENT, MSG_HOOK_LL }; #define SEND_MSG_ABORT_IF_HUNG 0x01 struct send_hardware_message_request { struct request_header __header; user_handle_t win; hw_input_t input; unsigned int flags; char __pad_52[4]; }; struct send_hardware_message_reply { struct reply_header __header; int wait; int prev_x; int prev_y; int new_x; int new_y; /* VARARG(keystate,bytes); */ char __pad_28[4]; }; #define SEND_HWMSG_INJECTED 0x01 struct get_message_request { struct request_header __header; unsigned int flags; user_handle_t get_win; unsigned int get_first; unsigned int get_last; unsigned int hw_id; unsigned int wake_mask; unsigned int changed_mask; }; struct get_message_reply { struct reply_header __header; user_handle_t win; unsigned int msg; lparam_t wparam; lparam_t lparam; int type; int x; int y; unsigned int time; unsigned int active_hooks; data_size_t total; /* VARARG(data,message_data); */ }; struct reply_message_request { struct request_header __header; int remove; lparam_t result; /* VARARG(data,bytes); */ }; struct reply_message_reply { struct reply_header __header; }; struct accept_hardware_message_request { struct request_header __header; unsigned int hw_id; int remove; char __pad_20[4]; }; struct accept_hardware_message_reply { struct reply_header __header; }; struct get_message_reply_request { struct request_header __header; int cancel; }; struct get_message_reply_reply { struct reply_header __header; lparam_t result; /* VARARG(data,bytes); */ }; struct set_win_timer_request { struct request_header __header; user_handle_t win; unsigned int msg; unsigned int rate; lparam_t id; lparam_t lparam; }; struct set_win_timer_reply { struct reply_header __header; lparam_t id; }; struct kill_win_timer_request { struct request_header __header; user_handle_t win; lparam_t id; unsigned int msg; char __pad_28[4]; }; struct kill_win_timer_reply { struct reply_header __header; }; struct is_window_hung_request { struct request_header __header; user_handle_t win; }; struct is_window_hung_reply { struct reply_header __header; int is_hung; char __pad_12[4]; }; struct get_serial_info_request { struct request_header __header; obj_handle_t handle; int flags; char __pad_20[4]; }; struct get_serial_info_reply { struct reply_header __header; unsigned int eventmask; unsigned int cookie; unsigned int pending_write; char __pad_20[4]; }; struct set_serial_info_request { struct request_header __header; obj_handle_t handle; int flags; char __pad_20[4]; }; struct set_serial_info_reply { struct reply_header __header; }; #define SERIALINFO_PENDING_WRITE 0x04 #define SERIALINFO_PENDING_WAIT 0x08 struct register_async_request { struct request_header __header; int type; async_data_t async; int count; char __pad_60[4]; }; struct register_async_reply { struct reply_header __header; }; #define ASYNC_TYPE_READ 0x01 #define ASYNC_TYPE_WRITE 0x02 #define ASYNC_TYPE_WAIT 0x03 struct cancel_async_request { struct request_header __header; obj_handle_t handle; client_ptr_t iosb; int only_thread; char __pad_28[4]; }; struct cancel_async_reply { struct reply_header __header; }; struct get_async_result_request { struct request_header __header; char __pad_12[4]; client_ptr_t user_arg; }; struct get_async_result_reply { struct reply_header __header; data_size_t size; /* VARARG(out_data,bytes); */ char __pad_12[4]; }; struct read_request { struct request_header __header; char __pad_12[4]; async_data_t async; file_pos_t pos; }; struct read_reply { struct reply_header __header; obj_handle_t wait; unsigned int options; /* VARARG(data,bytes); */ }; struct write_request { struct request_header __header; char __pad_12[4]; async_data_t async; file_pos_t pos; /* VARARG(data,bytes); */ }; struct write_reply { struct reply_header __header; obj_handle_t wait; unsigned int options; data_size_t size; char __pad_20[4]; }; struct ioctl_request { struct request_header __header; ioctl_code_t code; async_data_t async; /* VARARG(in_data,bytes); */ }; struct ioctl_reply { struct reply_header __header; obj_handle_t wait; unsigned int options; /* VARARG(out_data,bytes); */ }; struct set_irp_result_request { struct request_header __header; obj_handle_t handle; unsigned int status; data_size_t size; client_ptr_t file_ptr; /* VARARG(data,bytes); */ }; struct set_irp_result_reply { struct reply_header __header; }; struct create_named_pipe_request { struct request_header __header; unsigned int access; unsigned int options; unsigned int sharing; unsigned int maxinstances; unsigned int outsize; unsigned int insize; char __pad_36[4]; timeout_t timeout; unsigned int flags; /* VARARG(objattr,object_attributes); */ char __pad_52[4]; }; struct create_named_pipe_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; #define NAMED_PIPE_MESSAGE_STREAM_WRITE 0x0001 #define NAMED_PIPE_MESSAGE_STREAM_READ 0x0002 #define NAMED_PIPE_NONBLOCKING_MODE 0x0004 #define NAMED_PIPE_SERVER_END 0x8000 struct get_named_pipe_info_request { struct request_header __header; obj_handle_t handle; }; struct get_named_pipe_info_reply { struct reply_header __header; unsigned int flags; unsigned int sharing; unsigned int maxinstances; unsigned int instances; unsigned int outsize; unsigned int insize; }; struct set_named_pipe_info_request { struct request_header __header; obj_handle_t handle; unsigned int flags; char __pad_20[4]; }; struct set_named_pipe_info_reply { struct reply_header __header; }; struct create_window_request { struct request_header __header; user_handle_t parent; user_handle_t owner; atom_t atom; mod_handle_t instance; int dpi; int awareness; /* VARARG(class,unicode_str); */ }; struct create_window_reply { struct reply_header __header; user_handle_t handle; user_handle_t parent; user_handle_t owner; int extra; client_ptr_t class_ptr; int dpi; int awareness; }; struct destroy_window_request { struct request_header __header; user_handle_t handle; }; struct destroy_window_reply { struct reply_header __header; }; struct get_desktop_window_request { struct request_header __header; int force; }; struct get_desktop_window_reply { struct reply_header __header; user_handle_t top_window; user_handle_t msg_window; }; struct set_window_owner_request { struct request_header __header; user_handle_t handle; user_handle_t owner; char __pad_20[4]; }; struct set_window_owner_reply { struct reply_header __header; user_handle_t full_owner; user_handle_t prev_owner; }; struct get_window_info_request { struct request_header __header; user_handle_t handle; }; struct get_window_info_reply { struct reply_header __header; user_handle_t full_handle; user_handle_t last_active; process_id_t pid; thread_id_t tid; atom_t atom; int is_unicode; int dpi; int awareness; }; struct set_window_info_request { struct request_header __header; unsigned short flags; short int is_unicode; user_handle_t handle; unsigned int style; unsigned int ex_style; unsigned int id; mod_handle_t instance; lparam_t user_data; int extra_offset; data_size_t extra_size; lparam_t extra_value; }; struct set_window_info_reply { struct reply_header __header; unsigned int old_style; unsigned int old_ex_style; mod_handle_t old_instance; lparam_t old_user_data; lparam_t old_extra_value; unsigned int old_id; char __pad_44[4]; }; #define SET_WIN_STYLE 0x01 #define SET_WIN_EXSTYLE 0x02 #define SET_WIN_ID 0x04 #define SET_WIN_INSTANCE 0x08 #define SET_WIN_USERDATA 0x10 #define SET_WIN_EXTRA 0x20 #define SET_WIN_UNICODE 0x40 struct set_parent_request { struct request_header __header; user_handle_t handle; user_handle_t parent; char __pad_20[4]; }; struct set_parent_reply { struct reply_header __header; user_handle_t old_parent; user_handle_t full_parent; int dpi; int awareness; }; struct get_window_parents_request { struct request_header __header; user_handle_t handle; }; struct get_window_parents_reply { struct reply_header __header; int count; /* VARARG(parents,user_handles); */ char __pad_12[4]; }; struct get_window_children_request { struct request_header __header; obj_handle_t desktop; user_handle_t parent; atom_t atom; thread_id_t tid; /* VARARG(class,unicode_str); */ char __pad_28[4]; }; struct get_window_children_reply { struct reply_header __header; int count; /* VARARG(children,user_handles); */ char __pad_12[4]; }; struct get_window_children_from_point_request { struct request_header __header; user_handle_t parent; int x; int y; int dpi; char __pad_28[4]; }; struct get_window_children_from_point_reply { struct reply_header __header; int count; /* VARARG(children,user_handles); */ char __pad_12[4]; }; struct get_window_tree_request { struct request_header __header; user_handle_t handle; }; struct get_window_tree_reply { struct reply_header __header; user_handle_t parent; user_handle_t owner; user_handle_t next_sibling; user_handle_t prev_sibling; user_handle_t first_sibling; user_handle_t last_sibling; user_handle_t first_child; user_handle_t last_child; }; struct set_window_pos_request { struct request_header __header; unsigned short swp_flags; unsigned short paint_flags; user_handle_t handle; user_handle_t previous; rectangle_t window; rectangle_t client; /* VARARG(valid,rectangles); */ }; struct set_window_pos_reply { struct reply_header __header; unsigned int new_style; unsigned int new_ex_style; user_handle_t surface_win; int needs_update; }; #define SET_WINPOS_PAINT_SURFACE 0x01 #define SET_WINPOS_PIXEL_FORMAT 0x02 struct get_window_rectangles_request { struct request_header __header; user_handle_t handle; int relative; int dpi; }; struct get_window_rectangles_reply { struct reply_header __header; rectangle_t window; rectangle_t client; }; enum coords_relative { COORDS_CLIENT, COORDS_WINDOW, COORDS_PARENT, COORDS_SCREEN }; struct get_window_text_request { struct request_header __header; user_handle_t handle; }; struct get_window_text_reply { struct reply_header __header; data_size_t length; /* VARARG(text,unicode_str); */ char __pad_12[4]; }; struct set_window_text_request { struct request_header __header; user_handle_t handle; /* VARARG(text,unicode_str); */ }; struct set_window_text_reply { struct reply_header __header; }; struct get_windows_offset_request { struct request_header __header; user_handle_t from; user_handle_t to; int dpi; }; struct get_windows_offset_reply { struct reply_header __header; int x; int y; int mirror; char __pad_20[4]; }; struct get_visible_region_request { struct request_header __header; user_handle_t window; unsigned int flags; char __pad_20[4]; }; struct get_visible_region_reply { struct reply_header __header; user_handle_t top_win; rectangle_t top_rect; rectangle_t win_rect; unsigned int paint_flags; data_size_t total_size; /* VARARG(region,rectangles); */ char __pad_52[4]; }; struct get_surface_region_request { struct request_header __header; user_handle_t window; }; struct get_surface_region_reply { struct reply_header __header; rectangle_t visible_rect; data_size_t total_size; /* VARARG(region,rectangles); */ char __pad_28[4]; }; struct get_window_region_request { struct request_header __header; user_handle_t window; }; struct get_window_region_reply { struct reply_header __header; data_size_t total_size; /* VARARG(region,rectangles); */ char __pad_12[4]; }; struct set_window_region_request { struct request_header __header; user_handle_t window; int redraw; /* VARARG(region,rectangles); */ char __pad_20[4]; }; struct set_window_region_reply { struct reply_header __header; }; struct get_update_region_request { struct request_header __header; user_handle_t window; user_handle_t from_child; unsigned int flags; }; struct get_update_region_reply { struct reply_header __header; user_handle_t child; unsigned int flags; data_size_t total_size; /* VARARG(region,rectangles); */ char __pad_20[4]; }; #define UPDATE_NONCLIENT 0x001 #define UPDATE_ERASE 0x002 #define UPDATE_PAINT 0x004 #define UPDATE_INTERNALPAINT 0x008 #define UPDATE_ALLCHILDREN 0x010 #define UPDATE_NOCHILDREN 0x020 #define UPDATE_NOREGION 0x040 #define UPDATE_DELAYED_ERASE 0x080 #define UPDATE_CLIPCHILDREN 0x100 struct update_window_zorder_request { struct request_header __header; user_handle_t window; rectangle_t rect; }; struct update_window_zorder_reply { struct reply_header __header; }; struct redraw_window_request { struct request_header __header; user_handle_t window; unsigned int flags; /* VARARG(region,rectangles); */ char __pad_20[4]; }; struct redraw_window_reply { struct reply_header __header; }; struct set_window_property_request { struct request_header __header; user_handle_t window; lparam_t data; atom_t atom; /* VARARG(name,unicode_str); */ char __pad_28[4]; }; struct set_window_property_reply { struct reply_header __header; }; struct remove_window_property_request { struct request_header __header; user_handle_t window; atom_t atom; /* VARARG(name,unicode_str); */ char __pad_20[4]; }; struct remove_window_property_reply { struct reply_header __header; lparam_t data; }; struct get_window_property_request { struct request_header __header; user_handle_t window; atom_t atom; /* VARARG(name,unicode_str); */ char __pad_20[4]; }; struct get_window_property_reply { struct reply_header __header; lparam_t data; }; struct get_window_properties_request { struct request_header __header; user_handle_t window; }; struct get_window_properties_reply { struct reply_header __header; int total; /* VARARG(props,properties); */ char __pad_12[4]; }; struct create_winstation_request { struct request_header __header; unsigned int flags; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ char __pad_28[4]; }; struct create_winstation_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_winstation_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_winstation_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct close_winstation_request { struct request_header __header; obj_handle_t handle; }; struct close_winstation_reply { struct reply_header __header; }; struct get_process_winstation_request { struct request_header __header; char __pad_12[4]; }; struct get_process_winstation_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct set_process_winstation_request { struct request_header __header; obj_handle_t handle; }; struct set_process_winstation_reply { struct reply_header __header; }; struct enum_winstation_request { struct request_header __header; unsigned int index; }; struct enum_winstation_reply { struct reply_header __header; unsigned int next; /* VARARG(name,unicode_str); */ char __pad_12[4]; }; struct create_desktop_request { struct request_header __header; unsigned int flags; unsigned int access; unsigned int attributes; /* VARARG(name,unicode_str); */ }; struct create_desktop_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_desktop_request { struct request_header __header; obj_handle_t winsta; unsigned int flags; unsigned int access; unsigned int attributes; /* VARARG(name,unicode_str); */ char __pad_28[4]; }; struct open_desktop_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_input_desktop_request { struct request_header __header; unsigned int flags; unsigned int access; unsigned int attributes; }; struct open_input_desktop_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct close_desktop_request { struct request_header __header; obj_handle_t handle; }; struct close_desktop_reply { struct reply_header __header; }; struct get_thread_desktop_request { struct request_header __header; thread_id_t tid; }; struct get_thread_desktop_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct set_thread_desktop_request { struct request_header __header; obj_handle_t handle; }; struct set_thread_desktop_reply { struct reply_header __header; }; struct enum_desktop_request { struct request_header __header; obj_handle_t winstation; unsigned int index; char __pad_20[4]; }; struct enum_desktop_reply { struct reply_header __header; unsigned int next; /* VARARG(name,unicode_str); */ char __pad_12[4]; }; struct set_user_object_info_request { struct request_header __header; obj_handle_t handle; unsigned int flags; unsigned int obj_flags; }; struct set_user_object_info_reply { struct reply_header __header; int is_desktop; unsigned int old_obj_flags; /* VARARG(name,unicode_str); */ }; #define SET_USER_OBJECT_SET_FLAGS 1 #define SET_USER_OBJECT_GET_FULL_NAME 2 struct register_hotkey_request { struct request_header __header; user_handle_t window; int id; unsigned int flags; unsigned int vkey; char __pad_28[4]; }; struct register_hotkey_reply { struct reply_header __header; int replaced; unsigned int flags; unsigned int vkey; char __pad_20[4]; }; struct unregister_hotkey_request { struct request_header __header; user_handle_t window; int id; char __pad_20[4]; }; struct unregister_hotkey_reply { struct reply_header __header; unsigned int flags; unsigned int vkey; }; struct attach_thread_input_request { struct request_header __header; thread_id_t tid_from; thread_id_t tid_to; int attach; }; struct attach_thread_input_reply { struct reply_header __header; }; struct get_thread_input_request { struct request_header __header; thread_id_t tid; }; struct get_thread_input_reply { struct reply_header __header; user_handle_t focus; user_handle_t capture; user_handle_t active; user_handle_t foreground; user_handle_t menu_owner; user_handle_t move_size; user_handle_t caret; user_handle_t cursor; int show_count; rectangle_t rect; char __pad_60[4]; }; struct get_last_input_time_request { struct request_header __header; char __pad_12[4]; }; struct get_last_input_time_reply { struct reply_header __header; unsigned int time; char __pad_12[4]; }; struct get_key_state_request { struct request_header __header; thread_id_t tid; int key; char __pad_20[4]; }; struct get_key_state_reply { struct reply_header __header; unsigned char state; /* VARARG(keystate,bytes); */ char __pad_9[7]; }; struct set_key_state_request { struct request_header __header; thread_id_t tid; int async; /* VARARG(keystate,bytes); */ char __pad_20[4]; }; struct set_key_state_reply { struct reply_header __header; }; struct set_foreground_window_request { struct request_header __header; user_handle_t handle; }; struct set_foreground_window_reply { struct reply_header __header; user_handle_t previous; int send_msg_old; int send_msg_new; char __pad_20[4]; }; struct set_focus_window_request { struct request_header __header; user_handle_t handle; }; struct set_focus_window_reply { struct reply_header __header; user_handle_t previous; char __pad_12[4]; }; struct set_active_window_request { struct request_header __header; user_handle_t handle; }; struct set_active_window_reply { struct reply_header __header; user_handle_t previous; char __pad_12[4]; }; struct set_capture_window_request { struct request_header __header; user_handle_t handle; unsigned int flags; char __pad_20[4]; }; struct set_capture_window_reply { struct reply_header __header; user_handle_t previous; user_handle_t full_handle; }; #define CAPTURE_MENU 0x01 #define CAPTURE_MOVESIZE 0x02 struct set_caret_window_request { struct request_header __header; user_handle_t handle; int width; int height; }; struct set_caret_window_reply { struct reply_header __header; user_handle_t previous; rectangle_t old_rect; int old_hide; int old_state; char __pad_36[4]; }; struct set_caret_info_request { struct request_header __header; unsigned int flags; user_handle_t handle; int x; int y; int hide; int state; char __pad_36[4]; }; struct set_caret_info_reply { struct reply_header __header; user_handle_t full_handle; rectangle_t old_rect; int old_hide; int old_state; char __pad_36[4]; }; #define SET_CARET_POS 0x01 #define SET_CARET_HIDE 0x02 #define SET_CARET_STATE 0x04 enum caret_state { CARET_STATE_OFF, CARET_STATE_ON, CARET_STATE_TOGGLE, CARET_STATE_ON_IF_MOVED }; struct set_hook_request { struct request_header __header; int id; process_id_t pid; thread_id_t tid; int event_min; int event_max; client_ptr_t proc; int flags; int unicode; /* VARARG(module,unicode_str); */ }; struct set_hook_reply { struct reply_header __header; user_handle_t handle; unsigned int active_hooks; }; struct remove_hook_request { struct request_header __header; user_handle_t handle; client_ptr_t proc; int id; char __pad_28[4]; }; struct remove_hook_reply { struct reply_header __header; unsigned int active_hooks; char __pad_12[4]; }; struct start_hook_chain_request { struct request_header __header; int id; int event; user_handle_t window; int object_id; int child_id; }; struct start_hook_chain_reply { struct reply_header __header; user_handle_t handle; process_id_t pid; thread_id_t tid; int unicode; client_ptr_t proc; unsigned int active_hooks; /* VARARG(module,unicode_str); */ char __pad_36[4]; }; struct finish_hook_chain_request { struct request_header __header; int id; }; struct finish_hook_chain_reply { struct reply_header __header; }; struct get_hook_info_request { struct request_header __header; user_handle_t handle; int get_next; int event; user_handle_t window; int object_id; int child_id; char __pad_36[4]; }; struct get_hook_info_reply { struct reply_header __header; user_handle_t handle; int id; process_id_t pid; thread_id_t tid; client_ptr_t proc; int unicode; /* VARARG(module,unicode_str); */ char __pad_36[4]; }; struct create_class_request { struct request_header __header; int local; atom_t atom; unsigned int style; mod_handle_t instance; int extra; int win_extra; client_ptr_t client_ptr; data_size_t name_offset; /* VARARG(name,unicode_str); */ char __pad_52[4]; }; struct create_class_reply { struct reply_header __header; atom_t atom; char __pad_12[4]; }; struct destroy_class_request { struct request_header __header; atom_t atom; mod_handle_t instance; /* VARARG(name,unicode_str); */ }; struct destroy_class_reply { struct reply_header __header; client_ptr_t client_ptr; }; struct set_class_info_request { struct request_header __header; user_handle_t window; unsigned int flags; atom_t atom; unsigned int style; int win_extra; mod_handle_t instance; int extra_offset; data_size_t extra_size; lparam_t extra_value; }; struct set_class_info_reply { struct reply_header __header; atom_t old_atom; atom_t base_atom; mod_handle_t old_instance; lparam_t old_extra_value; unsigned int old_style; int old_extra; int old_win_extra; char __pad_44[4]; }; #define SET_CLASS_ATOM 0x0001 #define SET_CLASS_STYLE 0x0002 #define SET_CLASS_WINEXTRA 0x0004 #define SET_CLASS_INSTANCE 0x0008 #define SET_CLASS_EXTRA 0x0010 struct open_clipboard_request { struct request_header __header; user_handle_t window; }; struct open_clipboard_reply { struct reply_header __header; user_handle_t owner; char __pad_12[4]; }; struct close_clipboard_request { struct request_header __header; char __pad_12[4]; }; struct close_clipboard_reply { struct reply_header __header; user_handle_t viewer; user_handle_t owner; }; struct empty_clipboard_request { struct request_header __header; char __pad_12[4]; }; struct empty_clipboard_reply { struct reply_header __header; }; struct set_clipboard_data_request { struct request_header __header; unsigned int format; unsigned int lcid; /* VARARG(data,bytes); */ char __pad_20[4]; }; struct set_clipboard_data_reply { struct reply_header __header; unsigned int seqno; char __pad_12[4]; }; struct get_clipboard_data_request { struct request_header __header; unsigned int format; int render; int cached; unsigned int seqno; char __pad_28[4]; }; struct get_clipboard_data_reply { struct reply_header __header; unsigned int from; user_handle_t owner; unsigned int seqno; data_size_t total; /* VARARG(data,bytes); */ }; struct get_clipboard_formats_request { struct request_header __header; unsigned int format; }; struct get_clipboard_formats_reply { struct reply_header __header; unsigned int count; /* VARARG(formats,uints); */ char __pad_12[4]; }; struct enum_clipboard_formats_request { struct request_header __header; unsigned int previous; }; struct enum_clipboard_formats_reply { struct reply_header __header; unsigned int format; char __pad_12[4]; }; struct release_clipboard_request { struct request_header __header; user_handle_t owner; }; struct release_clipboard_reply { struct reply_header __header; user_handle_t viewer; user_handle_t owner; }; struct get_clipboard_info_request { struct request_header __header; char __pad_12[4]; }; struct get_clipboard_info_reply { struct reply_header __header; user_handle_t window; user_handle_t owner; user_handle_t viewer; unsigned int seqno; }; struct set_clipboard_viewer_request { struct request_header __header; user_handle_t viewer; user_handle_t previous; char __pad_20[4]; }; struct set_clipboard_viewer_reply { struct reply_header __header; user_handle_t old_viewer; user_handle_t owner; }; struct add_clipboard_listener_request { struct request_header __header; user_handle_t window; }; struct add_clipboard_listener_reply { struct reply_header __header; }; struct remove_clipboard_listener_request { struct request_header __header; user_handle_t window; }; struct remove_clipboard_listener_reply { struct reply_header __header; }; struct open_token_request { struct request_header __header; obj_handle_t handle; unsigned int access; unsigned int attributes; unsigned int flags; char __pad_28[4]; }; struct open_token_reply { struct reply_header __header; obj_handle_t token; char __pad_12[4]; }; #define OPEN_TOKEN_THREAD 1 #define OPEN_TOKEN_AS_SELF 2 struct set_global_windows_request { struct request_header __header; unsigned int flags; user_handle_t shell_window; user_handle_t shell_listview; user_handle_t progman_window; user_handle_t taskman_window; }; struct set_global_windows_reply { struct reply_header __header; user_handle_t old_shell_window; user_handle_t old_shell_listview; user_handle_t old_progman_window; user_handle_t old_taskman_window; }; #define SET_GLOBAL_SHELL_WINDOWS 0x01 #define SET_GLOBAL_PROGMAN_WINDOW 0x02 #define SET_GLOBAL_TASKMAN_WINDOW 0x04 struct adjust_token_privileges_request { struct request_header __header; obj_handle_t handle; int disable_all; int get_modified_state; /* VARARG(privileges,LUID_AND_ATTRIBUTES); */ }; struct adjust_token_privileges_reply { struct reply_header __header; unsigned int len; /* VARARG(privileges,LUID_AND_ATTRIBUTES); */ char __pad_12[4]; }; struct get_token_privileges_request { struct request_header __header; obj_handle_t handle; }; struct get_token_privileges_reply { struct reply_header __header; unsigned int len; /* VARARG(privileges,LUID_AND_ATTRIBUTES); */ char __pad_12[4]; }; struct check_token_privileges_request { struct request_header __header; obj_handle_t handle; int all_required; /* VARARG(privileges,LUID_AND_ATTRIBUTES); */ char __pad_20[4]; }; struct check_token_privileges_reply { struct reply_header __header; int has_privileges; /* VARARG(privileges,LUID_AND_ATTRIBUTES); */ char __pad_12[4]; }; struct duplicate_token_request { struct request_header __header; obj_handle_t handle; unsigned int access; int primary; int impersonation_level; /* VARARG(objattr,object_attributes); */ char __pad_28[4]; }; struct duplicate_token_reply { struct reply_header __header; obj_handle_t new_handle; char __pad_12[4]; }; struct access_check_request { struct request_header __header; obj_handle_t handle; unsigned int desired_access; unsigned int mapping_read; unsigned int mapping_write; unsigned int mapping_execute; unsigned int mapping_all; /* VARARG(sd,security_descriptor); */ char __pad_36[4]; }; struct access_check_reply { struct reply_header __header; unsigned int access_granted; unsigned int access_status; unsigned int privileges_len; /* VARARG(privileges,LUID_AND_ATTRIBUTES); */ char __pad_20[4]; }; struct get_token_sid_request { struct request_header __header; obj_handle_t handle; unsigned int which_sid; char __pad_20[4]; }; struct get_token_sid_reply { struct reply_header __header; data_size_t sid_len; /* VARARG(sid,SID); */ char __pad_12[4]; }; struct get_token_groups_request { struct request_header __header; obj_handle_t handle; }; struct get_token_groups_reply { struct reply_header __header; data_size_t user_len; /* VARARG(user,token_groups); */ char __pad_12[4]; }; struct get_token_default_dacl_request { struct request_header __header; obj_handle_t handle; }; struct get_token_default_dacl_reply { struct reply_header __header; data_size_t acl_len; /* VARARG(acl,ACL); */ char __pad_12[4]; }; struct set_token_default_dacl_request { struct request_header __header; obj_handle_t handle; /* VARARG(acl,ACL); */ }; struct set_token_default_dacl_reply { struct reply_header __header; }; struct set_security_object_request { struct request_header __header; obj_handle_t handle; unsigned int security_info; /* VARARG(sd,security_descriptor); */ char __pad_20[4]; }; struct set_security_object_reply { struct reply_header __header; }; struct get_security_object_request { struct request_header __header; obj_handle_t handle; unsigned int security_info; char __pad_20[4]; }; struct get_security_object_reply { struct reply_header __header; unsigned int sd_len; /* VARARG(sd,security_descriptor); */ char __pad_12[4]; }; struct handle_info { process_id_t owner; obj_handle_t handle; unsigned int access; }; struct get_system_handles_request { struct request_header __header; char __pad_12[4]; }; struct get_system_handles_reply { struct reply_header __header; unsigned int count; /* VARARG(data,handle_infos); */ char __pad_12[4]; }; struct create_mailslot_request { struct request_header __header; unsigned int access; timeout_t read_timeout; unsigned int max_msgsize; /* VARARG(objattr,object_attributes); */ char __pad_28[4]; }; struct create_mailslot_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct set_mailslot_info_request { struct request_header __header; obj_handle_t handle; timeout_t read_timeout; unsigned int flags; char __pad_28[4]; }; struct set_mailslot_info_reply { struct reply_header __header; timeout_t read_timeout; unsigned int max_msgsize; char __pad_20[4]; }; #define MAILSLOT_SET_READ_TIMEOUT 1 struct create_directory_request { struct request_header __header; unsigned int access; /* VARARG(objattr,object_attributes); */ }; struct create_directory_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_directory_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(directory_name,unicode_str); */ }; struct open_directory_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct get_directory_entry_request { struct request_header __header; obj_handle_t handle; unsigned int index; char __pad_20[4]; }; struct get_directory_entry_reply { struct reply_header __header; data_size_t name_len; /* VARARG(name,unicode_str,name_len); */ /* VARARG(type,unicode_str); */ char __pad_12[4]; }; struct create_symlink_request { struct request_header __header; unsigned int access; /* VARARG(objattr,object_attributes); */ /* VARARG(target_name,unicode_str); */ }; struct create_symlink_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_symlink_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_symlink_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct query_symlink_request { struct request_header __header; obj_handle_t handle; }; struct query_symlink_reply { struct reply_header __header; data_size_t total; /* VARARG(target_name,unicode_str); */ char __pad_12[4]; }; struct get_object_info_request { struct request_header __header; obj_handle_t handle; }; struct get_object_info_reply { struct reply_header __header; unsigned int access; unsigned int ref_count; unsigned int handle_count; data_size_t total; /* VARARG(name,unicode_str); */ }; struct get_object_type_request { struct request_header __header; obj_handle_t handle; }; struct get_object_type_reply { struct reply_header __header; data_size_t total; /* VARARG(type,unicode_str); */ char __pad_12[4]; }; struct unlink_object_request { struct request_header __header; obj_handle_t handle; }; struct unlink_object_reply { struct reply_header __header; }; struct get_token_impersonation_level_request { struct request_header __header; obj_handle_t handle; }; struct get_token_impersonation_level_reply { struct reply_header __header; int impersonation_level; char __pad_12[4]; }; struct allocate_locally_unique_id_request { struct request_header __header; char __pad_12[4]; }; struct allocate_locally_unique_id_reply { struct reply_header __header; luid_t luid; }; struct create_device_manager_request { struct request_header __header; unsigned int access; unsigned int attributes; char __pad_20[4]; }; struct create_device_manager_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct create_device_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; client_ptr_t user_ptr; obj_handle_t manager; /* VARARG(name,unicode_str); */ char __pad_36[4]; }; struct create_device_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct delete_device_request { struct request_header __header; obj_handle_t handle; }; struct delete_device_reply { struct reply_header __header; }; struct get_next_device_request_request { struct request_header __header; obj_handle_t manager; obj_handle_t prev; unsigned int status; }; struct get_next_device_request_reply { struct reply_header __header; irp_params_t params; obj_handle_t next; process_id_t client_pid; thread_id_t client_tid; data_size_t in_size; data_size_t out_size; /* VARARG(next_data,bytes); */ char __pad_52[4]; }; struct make_process_system_request { struct request_header __header; char __pad_12[4]; }; struct make_process_system_reply { struct reply_header __header; obj_handle_t event; char __pad_12[4]; }; struct get_token_statistics_request { struct request_header __header; obj_handle_t handle; }; struct get_token_statistics_reply { struct reply_header __header; luid_t token_id; luid_t modified_id; int primary; int impersonation_level; int group_count; int privilege_count; }; struct create_completion_request { struct request_header __header; unsigned int access; unsigned int concurrent; /* VARARG(objattr,object_attributes); */ char __pad_20[4]; }; struct create_completion_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_completion_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(filename,unicode_str); */ }; struct open_completion_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct add_completion_request { struct request_header __header; obj_handle_t handle; apc_param_t ckey; apc_param_t cvalue; apc_param_t information; unsigned int status; char __pad_44[4]; }; struct add_completion_reply { struct reply_header __header; }; struct remove_completion_request { struct request_header __header; obj_handle_t handle; }; struct remove_completion_reply { struct reply_header __header; apc_param_t ckey; apc_param_t cvalue; apc_param_t information; unsigned int status; char __pad_36[4]; }; struct query_completion_request { struct request_header __header; obj_handle_t handle; }; struct query_completion_reply { struct reply_header __header; unsigned int depth; char __pad_12[4]; }; struct set_completion_info_request { struct request_header __header; obj_handle_t handle; apc_param_t ckey; obj_handle_t chandle; char __pad_28[4]; }; struct set_completion_info_reply { struct reply_header __header; }; struct add_fd_completion_request { struct request_header __header; obj_handle_t handle; apc_param_t cvalue; apc_param_t information; unsigned int status; char __pad_36[4]; }; struct add_fd_completion_reply { struct reply_header __header; }; struct set_fd_disp_info_request { struct request_header __header; obj_handle_t handle; int unlink; char __pad_20[4]; }; struct set_fd_disp_info_reply { struct reply_header __header; }; struct set_fd_name_info_request { struct request_header __header; obj_handle_t handle; obj_handle_t rootdir; int link; /* VARARG(filename,string); */ }; struct set_fd_name_info_reply { struct reply_header __header; }; struct get_window_layered_info_request { struct request_header __header; user_handle_t handle; }; struct get_window_layered_info_reply { struct reply_header __header; unsigned int color_key; unsigned int alpha; unsigned int flags; char __pad_20[4]; }; struct set_window_layered_info_request { struct request_header __header; user_handle_t handle; unsigned int color_key; unsigned int alpha; unsigned int flags; char __pad_28[4]; }; struct set_window_layered_info_reply { struct reply_header __header; }; struct alloc_user_handle_request { struct request_header __header; char __pad_12[4]; }; struct alloc_user_handle_reply { struct reply_header __header; user_handle_t handle; char __pad_12[4]; }; struct free_user_handle_request { struct request_header __header; user_handle_t handle; }; struct free_user_handle_reply { struct reply_header __header; }; struct set_cursor_request { struct request_header __header; unsigned int flags; user_handle_t handle; int show_count; int x; int y; rectangle_t clip; unsigned int clip_msg; char __pad_52[4]; }; struct set_cursor_reply { struct reply_header __header; user_handle_t prev_handle; int prev_count; int prev_x; int prev_y; int new_x; int new_y; rectangle_t new_clip; unsigned int last_change; char __pad_52[4]; }; #define SET_CURSOR_HANDLE 0x01 #define SET_CURSOR_COUNT 0x02 #define SET_CURSOR_POS 0x04 #define SET_CURSOR_CLIP 0x08 #define SET_CURSOR_NOCLIP 0x10 struct update_rawinput_devices_request { struct request_header __header; /* VARARG(devices,rawinput_devices); */ char __pad_12[4]; }; struct update_rawinput_devices_reply { struct reply_header __header; }; struct get_suspend_context_request { struct request_header __header; char __pad_12[4]; }; struct get_suspend_context_reply { struct reply_header __header; /* VARARG(context,context); */ }; struct set_suspend_context_request { struct request_header __header; /* VARARG(context,context); */ char __pad_12[4]; }; struct set_suspend_context_reply { struct reply_header __header; }; struct create_job_request { struct request_header __header; unsigned int access; /* VARARG(objattr,object_attributes); */ }; struct create_job_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct open_job_request { struct request_header __header; unsigned int access; unsigned int attributes; obj_handle_t rootdir; /* VARARG(name,unicode_str); */ }; struct open_job_reply { struct reply_header __header; obj_handle_t handle; char __pad_12[4]; }; struct assign_job_request { struct request_header __header; obj_handle_t job; obj_handle_t process; char __pad_20[4]; }; struct assign_job_reply { struct reply_header __header; }; struct process_in_job_request { struct request_header __header; obj_handle_t job; obj_handle_t process; char __pad_20[4]; }; struct process_in_job_reply { struct reply_header __header; }; struct set_job_limits_request { struct request_header __header; obj_handle_t handle; unsigned int limit_flags; char __pad_20[4]; }; struct set_job_limits_reply { struct reply_header __header; }; struct set_job_completion_port_request { struct request_header __header; obj_handle_t job; obj_handle_t port; char __pad_20[4]; client_ptr_t key; }; struct set_job_completion_port_reply { struct reply_header __header; }; struct terminate_job_request { struct request_header __header; obj_handle_t handle; int status; char __pad_20[4]; }; struct terminate_job_reply { struct reply_header __header; }; enum request { REQ_new_process, REQ_get_new_process_info, REQ_new_thread, REQ_get_startup_info, REQ_init_process_done, REQ_init_thread, REQ_terminate_process, REQ_terminate_thread, REQ_get_process_info, REQ_get_process_vm_counters, REQ_set_process_info, REQ_get_thread_info, REQ_get_thread_times, REQ_set_thread_info, REQ_get_dll_info, REQ_suspend_thread, REQ_resume_thread, REQ_load_dll, REQ_unload_dll, REQ_queue_apc, REQ_get_apc_result, REQ_close_handle, REQ_set_handle_info, REQ_dup_handle, REQ_open_process, REQ_open_thread, REQ_select, REQ_create_event, REQ_event_op, REQ_query_event, REQ_open_event, REQ_create_keyed_event, REQ_open_keyed_event, REQ_create_mutex, REQ_release_mutex, REQ_open_mutex, REQ_query_mutex, REQ_create_semaphore, REQ_release_semaphore, REQ_query_semaphore, REQ_open_semaphore, REQ_create_file, REQ_open_file_object, REQ_alloc_file_handle, REQ_get_handle_unix_name, REQ_get_handle_fd, REQ_get_directory_cache_entry, REQ_flush, REQ_get_file_info, REQ_get_volume_info, REQ_lock_file, REQ_unlock_file, REQ_create_socket, REQ_accept_socket, REQ_accept_into_socket, REQ_set_socket_event, REQ_get_socket_event, REQ_get_socket_info, REQ_enable_socket_event, REQ_set_socket_deferred, REQ_alloc_console, REQ_free_console, REQ_get_console_renderer_events, REQ_open_console, REQ_attach_console, REQ_get_console_wait_event, REQ_get_console_mode, REQ_set_console_mode, REQ_set_console_input_info, REQ_get_console_input_info, REQ_append_console_input_history, REQ_get_console_input_history, REQ_create_console_output, REQ_set_console_output_info, REQ_get_console_output_info, REQ_write_console_input, REQ_read_console_input, REQ_write_console_output, REQ_fill_console_output, REQ_read_console_output, REQ_move_console_output, REQ_send_console_signal, REQ_read_directory_changes, REQ_read_change, REQ_create_mapping, REQ_open_mapping, REQ_get_mapping_info, REQ_map_view, REQ_unmap_view, REQ_get_mapping_committed_range, REQ_add_mapping_committed_range, REQ_is_same_mapping, REQ_create_snapshot, REQ_next_process, REQ_next_thread, REQ_wait_debug_event, REQ_queue_exception_event, REQ_get_exception_status, REQ_continue_debug_event, REQ_debug_process, REQ_debug_break, REQ_set_debugger_kill_on_exit, REQ_read_process_memory, REQ_write_process_memory, REQ_create_key, REQ_open_key, REQ_delete_key, REQ_flush_key, REQ_enum_key, REQ_set_key_value, REQ_get_key_value, REQ_enum_key_value, REQ_delete_key_value, REQ_load_registry, REQ_unload_registry, REQ_save_registry, REQ_set_registry_notification, REQ_create_timer, REQ_open_timer, REQ_set_timer, REQ_cancel_timer, REQ_get_timer_info, REQ_get_thread_context, REQ_set_thread_context, REQ_get_selector_entry, REQ_add_atom, REQ_delete_atom, REQ_find_atom, REQ_get_atom_information, REQ_set_atom_information, REQ_empty_atom_table, REQ_init_atom_table, REQ_get_msg_queue, REQ_set_queue_fd, REQ_set_queue_mask, REQ_get_queue_status, REQ_get_process_idle_event, REQ_send_message, REQ_post_quit_message, REQ_send_hardware_message, REQ_get_message, REQ_reply_message, REQ_accept_hardware_message, REQ_get_message_reply, REQ_set_win_timer, REQ_kill_win_timer, REQ_is_window_hung, REQ_get_serial_info, REQ_set_serial_info, REQ_register_async, REQ_cancel_async, REQ_get_async_result, REQ_read, REQ_write, REQ_ioctl, REQ_set_irp_result, REQ_create_named_pipe, REQ_get_named_pipe_info, REQ_set_named_pipe_info, REQ_create_window, REQ_destroy_window, REQ_get_desktop_window, REQ_set_window_owner, REQ_get_window_info, REQ_set_window_info, REQ_set_parent, REQ_get_window_parents, REQ_get_window_children, REQ_get_window_children_from_point, REQ_get_window_tree, REQ_set_window_pos, REQ_get_window_rectangles, REQ_get_window_text, REQ_set_window_text, REQ_get_windows_offset, REQ_get_visible_region, REQ_get_surface_region, REQ_get_window_region, REQ_set_window_region, REQ_get_update_region, REQ_update_window_zorder, REQ_redraw_window, REQ_set_window_property, REQ_remove_window_property, REQ_get_window_property, REQ_get_window_properties, REQ_create_winstation, REQ_open_winstation, REQ_close_winstation, REQ_get_process_winstation, REQ_set_process_winstation, REQ_enum_winstation, REQ_create_desktop, REQ_open_desktop, REQ_open_input_desktop, REQ_close_desktop, REQ_get_thread_desktop, REQ_set_thread_desktop, REQ_enum_desktop, REQ_set_user_object_info, REQ_register_hotkey, REQ_unregister_hotkey, REQ_attach_thread_input, REQ_get_thread_input, REQ_get_last_input_time, REQ_get_key_state, REQ_set_key_state, REQ_set_foreground_window, REQ_set_focus_window, REQ_set_active_window, REQ_set_capture_window, REQ_set_caret_window, REQ_set_caret_info, REQ_set_hook, REQ_remove_hook, REQ_start_hook_chain, REQ_finish_hook_chain, REQ_get_hook_info, REQ_create_class, REQ_destroy_class, REQ_set_class_info, REQ_open_clipboard, REQ_close_clipboard, REQ_empty_clipboard, REQ_set_clipboard_data, REQ_get_clipboard_data, REQ_get_clipboard_formats, REQ_enum_clipboard_formats, REQ_release_clipboard, REQ_get_clipboard_info, REQ_set_clipboard_viewer, REQ_add_clipboard_listener, REQ_remove_clipboard_listener, REQ_open_token, REQ_set_global_windows, REQ_adjust_token_privileges, REQ_get_token_privileges, REQ_check_token_privileges, REQ_duplicate_token, REQ_access_check, REQ_get_token_sid, REQ_get_token_groups, REQ_get_token_default_dacl, REQ_set_token_default_dacl, REQ_set_security_object, REQ_get_security_object, REQ_get_system_handles, REQ_create_mailslot, REQ_set_mailslot_info, REQ_create_directory, REQ_open_directory, REQ_get_directory_entry, REQ_create_symlink, REQ_open_symlink, REQ_query_symlink, REQ_get_object_info, REQ_get_object_type, REQ_unlink_object, REQ_get_token_impersonation_level, REQ_allocate_locally_unique_id, REQ_create_device_manager, REQ_create_device, REQ_delete_device, REQ_get_next_device_request, REQ_make_process_system, REQ_get_token_statistics, REQ_create_completion, REQ_open_completion, REQ_add_completion, REQ_remove_completion, REQ_query_completion, REQ_set_completion_info, REQ_add_fd_completion, REQ_set_fd_disp_info, REQ_set_fd_name_info, REQ_get_window_layered_info, REQ_set_window_layered_info, REQ_alloc_user_handle, REQ_free_user_handle, REQ_set_cursor, REQ_update_rawinput_devices, REQ_get_suspend_context, REQ_set_suspend_context, REQ_create_job, REQ_open_job, REQ_assign_job, REQ_process_in_job, REQ_set_job_limits, REQ_set_job_completion_port, REQ_terminate_job, REQ_NB_REQUESTS }; union generic_request { struct request_max_size max_size; struct request_header request_header; struct new_process_request new_process_request; struct get_new_process_info_request get_new_process_info_request; struct new_thread_request new_thread_request; struct get_startup_info_request get_startup_info_request; struct init_process_done_request init_process_done_request; struct init_thread_request init_thread_request; struct terminate_process_request terminate_process_request; struct terminate_thread_request terminate_thread_request; struct get_process_info_request get_process_info_request; struct get_process_vm_counters_request get_process_vm_counters_request; struct set_process_info_request set_process_info_request; struct get_thread_info_request get_thread_info_request; struct get_thread_times_request get_thread_times_request; struct set_thread_info_request set_thread_info_request; struct get_dll_info_request get_dll_info_request; struct suspend_thread_request suspend_thread_request; struct resume_thread_request resume_thread_request; struct load_dll_request load_dll_request; struct unload_dll_request unload_dll_request; struct queue_apc_request queue_apc_request; struct get_apc_result_request get_apc_result_request; struct close_handle_request close_handle_request; struct set_handle_info_request set_handle_info_request; struct dup_handle_request dup_handle_request; struct open_process_request open_process_request; struct open_thread_request open_thread_request; struct select_request select_request; struct create_event_request create_event_request; struct event_op_request event_op_request; struct query_event_request query_event_request; struct open_event_request open_event_request; struct create_keyed_event_request create_keyed_event_request; struct open_keyed_event_request open_keyed_event_request; struct create_mutex_request create_mutex_request; struct release_mutex_request release_mutex_request; struct open_mutex_request open_mutex_request; struct query_mutex_request query_mutex_request; struct create_semaphore_request create_semaphore_request; struct release_semaphore_request release_semaphore_request; struct query_semaphore_request query_semaphore_request; struct open_semaphore_request open_semaphore_request; struct create_file_request create_file_request; struct open_file_object_request open_file_object_request; struct alloc_file_handle_request alloc_file_handle_request; struct get_handle_unix_name_request get_handle_unix_name_request; struct get_handle_fd_request get_handle_fd_request; struct get_directory_cache_entry_request get_directory_cache_entry_request; struct flush_request flush_request; struct get_file_info_request get_file_info_request; struct get_volume_info_request get_volume_info_request; struct lock_file_request lock_file_request; struct unlock_file_request unlock_file_request; struct create_socket_request create_socket_request; struct accept_socket_request accept_socket_request; struct accept_into_socket_request accept_into_socket_request; struct set_socket_event_request set_socket_event_request; struct get_socket_event_request get_socket_event_request; struct get_socket_info_request get_socket_info_request; struct enable_socket_event_request enable_socket_event_request; struct set_socket_deferred_request set_socket_deferred_request; struct alloc_console_request alloc_console_request; struct free_console_request free_console_request; struct get_console_renderer_events_request get_console_renderer_events_request; struct open_console_request open_console_request; struct attach_console_request attach_console_request; struct get_console_wait_event_request get_console_wait_event_request; struct get_console_mode_request get_console_mode_request; struct set_console_mode_request set_console_mode_request; struct set_console_input_info_request set_console_input_info_request; struct get_console_input_info_request get_console_input_info_request; struct append_console_input_history_request append_console_input_history_request; struct get_console_input_history_request get_console_input_history_request; struct create_console_output_request create_console_output_request; struct set_console_output_info_request set_console_output_info_request; struct get_console_output_info_request get_console_output_info_request; struct write_console_input_request write_console_input_request; struct read_console_input_request read_console_input_request; struct write_console_output_request write_console_output_request; struct fill_console_output_request fill_console_output_request; struct read_console_output_request read_console_output_request; struct move_console_output_request move_console_output_request; struct send_console_signal_request send_console_signal_request; struct read_directory_changes_request read_directory_changes_request; struct read_change_request read_change_request; struct create_mapping_request create_mapping_request; struct open_mapping_request open_mapping_request; struct get_mapping_info_request get_mapping_info_request; struct map_view_request map_view_request; struct unmap_view_request unmap_view_request; struct get_mapping_committed_range_request get_mapping_committed_range_request; struct add_mapping_committed_range_request add_mapping_committed_range_request; struct is_same_mapping_request is_same_mapping_request; struct create_snapshot_request create_snapshot_request; struct next_process_request next_process_request; struct next_thread_request next_thread_request; struct wait_debug_event_request wait_debug_event_request; struct queue_exception_event_request queue_exception_event_request; struct get_exception_status_request get_exception_status_request; struct continue_debug_event_request continue_debug_event_request; struct debug_process_request debug_process_request; struct debug_break_request debug_break_request; struct set_debugger_kill_on_exit_request set_debugger_kill_on_exit_request; struct read_process_memory_request read_process_memory_request; struct write_process_memory_request write_process_memory_request; struct create_key_request create_key_request; struct open_key_request open_key_request; struct delete_key_request delete_key_request; struct flush_key_request flush_key_request; struct enum_key_request enum_key_request; struct set_key_value_request set_key_value_request; struct get_key_value_request get_key_value_request; struct enum_key_value_request enum_key_value_request; struct delete_key_value_request delete_key_value_request; struct load_registry_request load_registry_request; struct unload_registry_request unload_registry_request; struct save_registry_request save_registry_request; struct set_registry_notification_request set_registry_notification_request; struct create_timer_request create_timer_request; struct open_timer_request open_timer_request; struct set_timer_request set_timer_request; struct cancel_timer_request cancel_timer_request; struct get_timer_info_request get_timer_info_request; struct get_thread_context_request get_thread_context_request; struct set_thread_context_request set_thread_context_request; struct get_selector_entry_request get_selector_entry_request; struct add_atom_request add_atom_request; struct delete_atom_request delete_atom_request; struct find_atom_request find_atom_request; struct get_atom_information_request get_atom_information_request; struct set_atom_information_request set_atom_information_request; struct empty_atom_table_request empty_atom_table_request; struct init_atom_table_request init_atom_table_request; struct get_msg_queue_request get_msg_queue_request; struct set_queue_fd_request set_queue_fd_request; struct set_queue_mask_request set_queue_mask_request; struct get_queue_status_request get_queue_status_request; struct get_process_idle_event_request get_process_idle_event_request; struct send_message_request send_message_request; struct post_quit_message_request post_quit_message_request; struct send_hardware_message_request send_hardware_message_request; struct get_message_request get_message_request; struct reply_message_request reply_message_request; struct accept_hardware_message_request accept_hardware_message_request; struct get_message_reply_request get_message_reply_request; struct set_win_timer_request set_win_timer_request; struct kill_win_timer_request kill_win_timer_request; struct is_window_hung_request is_window_hung_request; struct get_serial_info_request get_serial_info_request; struct set_serial_info_request set_serial_info_request; struct register_async_request register_async_request; struct cancel_async_request cancel_async_request; struct get_async_result_request get_async_result_request; struct read_request read_request; struct write_request write_request; struct ioctl_request ioctl_request; struct set_irp_result_request set_irp_result_request; struct create_named_pipe_request create_named_pipe_request; struct get_named_pipe_info_request get_named_pipe_info_request; struct set_named_pipe_info_request set_named_pipe_info_request; struct create_window_request create_window_request; struct destroy_window_request destroy_window_request; struct get_desktop_window_request get_desktop_window_request; struct set_window_owner_request set_window_owner_request; struct get_window_info_request get_window_info_request; struct set_window_info_request set_window_info_request; struct set_parent_request set_parent_request; struct get_window_parents_request get_window_parents_request; struct get_window_children_request get_window_children_request; struct get_window_children_from_point_request get_window_children_from_point_request; struct get_window_tree_request get_window_tree_request; struct set_window_pos_request set_window_pos_request; struct get_window_rectangles_request get_window_rectangles_request; struct get_window_text_request get_window_text_request; struct set_window_text_request set_window_text_request; struct get_windows_offset_request get_windows_offset_request; struct get_visible_region_request get_visible_region_request; struct get_surface_region_request get_surface_region_request; struct get_window_region_request get_window_region_request; struct set_window_region_request set_window_region_request; struct get_update_region_request get_update_region_request; struct update_window_zorder_request update_window_zorder_request; struct redraw_window_request redraw_window_request; struct set_window_property_request set_window_property_request; struct remove_window_property_request remove_window_property_request; struct get_window_property_request get_window_property_request; struct get_window_properties_request get_window_properties_request; struct create_winstation_request create_winstation_request; struct open_winstation_request open_winstation_request; struct close_winstation_request close_winstation_request; struct get_process_winstation_request get_process_winstation_request; struct set_process_winstation_request set_process_winstation_request; struct enum_winstation_request enum_winstation_request; struct create_desktop_request create_desktop_request; struct open_desktop_request open_desktop_request; struct open_input_desktop_request open_input_desktop_request; struct close_desktop_request close_desktop_request; struct get_thread_desktop_request get_thread_desktop_request; struct set_thread_desktop_request set_thread_desktop_request; struct enum_desktop_request enum_desktop_request; struct set_user_object_info_request set_user_object_info_request; struct register_hotkey_request register_hotkey_request; struct unregister_hotkey_request unregister_hotkey_request; struct attach_thread_input_request attach_thread_input_request; struct get_thread_input_request get_thread_input_request; struct get_last_input_time_request get_last_input_time_request; struct get_key_state_request get_key_state_request; struct set_key_state_request set_key_state_request; struct set_foreground_window_request set_foreground_window_request; struct set_focus_window_request set_focus_window_request; struct set_active_window_request set_active_window_request; struct set_capture_window_request set_capture_window_request; struct set_caret_window_request set_caret_window_request; struct set_caret_info_request set_caret_info_request; struct set_hook_request set_hook_request; struct remove_hook_request remove_hook_request; struct start_hook_chain_request start_hook_chain_request; struct finish_hook_chain_request finish_hook_chain_request; struct get_hook_info_request get_hook_info_request; struct create_class_request create_class_request; struct destroy_class_request destroy_class_request; struct set_class_info_request set_class_info_request; struct open_clipboard_request open_clipboard_request; struct close_clipboard_request close_clipboard_request; struct empty_clipboard_request empty_clipboard_request; struct set_clipboard_data_request set_clipboard_data_request; struct get_clipboard_data_request get_clipboard_data_request; struct get_clipboard_formats_request get_clipboard_formats_request; struct enum_clipboard_formats_request enum_clipboard_formats_request; struct release_clipboard_request release_clipboard_request; struct get_clipboard_info_request get_clipboard_info_request; struct set_clipboard_viewer_request set_clipboard_viewer_request; struct add_clipboard_listener_request add_clipboard_listener_request; struct remove_clipboard_listener_request remove_clipboard_listener_request; struct open_token_request open_token_request; struct set_global_windows_request set_global_windows_request; struct adjust_token_privileges_request adjust_token_privileges_request; struct get_token_privileges_request get_token_privileges_request; struct check_token_privileges_request check_token_privileges_request; struct duplicate_token_request duplicate_token_request; struct access_check_request access_check_request; struct get_token_sid_request get_token_sid_request; struct get_token_groups_request get_token_groups_request; struct get_token_default_dacl_request get_token_default_dacl_request; struct set_token_default_dacl_request set_token_default_dacl_request; struct set_security_object_request set_security_object_request; struct get_security_object_request get_security_object_request; struct get_system_handles_request get_system_handles_request; struct create_mailslot_request create_mailslot_request; struct set_mailslot_info_request set_mailslot_info_request; struct create_directory_request create_directory_request; struct open_directory_request open_directory_request; struct get_directory_entry_request get_directory_entry_request; struct create_symlink_request create_symlink_request; struct open_symlink_request open_symlink_request; struct query_symlink_request query_symlink_request; struct get_object_info_request get_object_info_request; struct get_object_type_request get_object_type_request; struct unlink_object_request unlink_object_request; struct get_token_impersonation_level_request get_token_impersonation_level_request; struct allocate_locally_unique_id_request allocate_locally_unique_id_request; struct create_device_manager_request create_device_manager_request; struct create_device_request create_device_request; struct delete_device_request delete_device_request; struct get_next_device_request_request get_next_device_request_request; struct make_process_system_request make_process_system_request; struct get_token_statistics_request get_token_statistics_request; struct create_completion_request create_completion_request; struct open_completion_request open_completion_request; struct add_completion_request add_completion_request; struct remove_completion_request remove_completion_request; struct query_completion_request query_completion_request; struct set_completion_info_request set_completion_info_request; struct add_fd_completion_request add_fd_completion_request; struct set_fd_disp_info_request set_fd_disp_info_request; struct set_fd_name_info_request set_fd_name_info_request; struct get_window_layered_info_request get_window_layered_info_request; struct set_window_layered_info_request set_window_layered_info_request; struct alloc_user_handle_request alloc_user_handle_request; struct free_user_handle_request free_user_handle_request; struct set_cursor_request set_cursor_request; struct update_rawinput_devices_request update_rawinput_devices_request; struct get_suspend_context_request get_suspend_context_request; struct set_suspend_context_request set_suspend_context_request; struct create_job_request create_job_request; struct open_job_request open_job_request; struct assign_job_request assign_job_request; struct process_in_job_request process_in_job_request; struct set_job_limits_request set_job_limits_request; struct set_job_completion_port_request set_job_completion_port_request; struct terminate_job_request terminate_job_request; }; union generic_reply { struct request_max_size max_size; struct reply_header reply_header; struct new_process_reply new_process_reply; struct get_new_process_info_reply get_new_process_info_reply; struct new_thread_reply new_thread_reply; struct get_startup_info_reply get_startup_info_reply; struct init_process_done_reply init_process_done_reply; struct init_thread_reply init_thread_reply; struct terminate_process_reply terminate_process_reply; struct terminate_thread_reply terminate_thread_reply; struct get_process_info_reply get_process_info_reply; struct get_process_vm_counters_reply get_process_vm_counters_reply; struct set_process_info_reply set_process_info_reply; struct get_thread_info_reply get_thread_info_reply; struct get_thread_times_reply get_thread_times_reply; struct set_thread_info_reply set_thread_info_reply; struct get_dll_info_reply get_dll_info_reply; struct suspend_thread_reply suspend_thread_reply; struct resume_thread_reply resume_thread_reply; struct load_dll_reply load_dll_reply; struct unload_dll_reply unload_dll_reply; struct queue_apc_reply queue_apc_reply; struct get_apc_result_reply get_apc_result_reply; struct close_handle_reply close_handle_reply; struct set_handle_info_reply set_handle_info_reply; struct dup_handle_reply dup_handle_reply; struct open_process_reply open_process_reply; struct open_thread_reply open_thread_reply; struct select_reply select_reply; struct create_event_reply create_event_reply; struct event_op_reply event_op_reply; struct query_event_reply query_event_reply; struct open_event_reply open_event_reply; struct create_keyed_event_reply create_keyed_event_reply; struct open_keyed_event_reply open_keyed_event_reply; struct create_mutex_reply create_mutex_reply; struct release_mutex_reply release_mutex_reply; struct open_mutex_reply open_mutex_reply; struct query_mutex_reply query_mutex_reply; struct create_semaphore_reply create_semaphore_reply; struct release_semaphore_reply release_semaphore_reply; struct query_semaphore_reply query_semaphore_reply; struct open_semaphore_reply open_semaphore_reply; struct create_file_reply create_file_reply; struct open_file_object_reply open_file_object_reply; struct alloc_file_handle_reply alloc_file_handle_reply; struct get_handle_unix_name_reply get_handle_unix_name_reply; struct get_handle_fd_reply get_handle_fd_reply; struct get_directory_cache_entry_reply get_directory_cache_entry_reply; struct flush_reply flush_reply; struct get_file_info_reply get_file_info_reply; struct get_volume_info_reply get_volume_info_reply; struct lock_file_reply lock_file_reply; struct unlock_file_reply unlock_file_reply; struct create_socket_reply create_socket_reply; struct accept_socket_reply accept_socket_reply; struct accept_into_socket_reply accept_into_socket_reply; struct set_socket_event_reply set_socket_event_reply; struct get_socket_event_reply get_socket_event_reply; struct get_socket_info_reply get_socket_info_reply; struct enable_socket_event_reply enable_socket_event_reply; struct set_socket_deferred_reply set_socket_deferred_reply; struct alloc_console_reply alloc_console_reply; struct free_console_reply free_console_reply; struct get_console_renderer_events_reply get_console_renderer_events_reply; struct open_console_reply open_console_reply; struct attach_console_reply attach_console_reply; struct get_console_wait_event_reply get_console_wait_event_reply; struct get_console_mode_reply get_console_mode_reply; struct set_console_mode_reply set_console_mode_reply; struct set_console_input_info_reply set_console_input_info_reply; struct get_console_input_info_reply get_console_input_info_reply; struct append_console_input_history_reply append_console_input_history_reply; struct get_console_input_history_reply get_console_input_history_reply; struct create_console_output_reply create_console_output_reply; struct set_console_output_info_reply set_console_output_info_reply; struct get_console_output_info_reply get_console_output_info_reply; struct write_console_input_reply write_console_input_reply; struct read_console_input_reply read_console_input_reply; struct write_console_output_reply write_console_output_reply; struct fill_console_output_reply fill_console_output_reply; struct read_console_output_reply read_console_output_reply; struct move_console_output_reply move_console_output_reply; struct send_console_signal_reply send_console_signal_reply; struct read_directory_changes_reply read_directory_changes_reply; struct read_change_reply read_change_reply; struct create_mapping_reply create_mapping_reply; struct open_mapping_reply open_mapping_reply; struct get_mapping_info_reply get_mapping_info_reply; struct map_view_reply map_view_reply; struct unmap_view_reply unmap_view_reply; struct get_mapping_committed_range_reply get_mapping_committed_range_reply; struct add_mapping_committed_range_reply add_mapping_committed_range_reply; struct is_same_mapping_reply is_same_mapping_reply; struct create_snapshot_reply create_snapshot_reply; struct next_process_reply next_process_reply; struct next_thread_reply next_thread_reply; struct wait_debug_event_reply wait_debug_event_reply; struct queue_exception_event_reply queue_exception_event_reply; struct get_exception_status_reply get_exception_status_reply; struct continue_debug_event_reply continue_debug_event_reply; struct debug_process_reply debug_process_reply; struct debug_break_reply debug_break_reply; struct set_debugger_kill_on_exit_reply set_debugger_kill_on_exit_reply; struct read_process_memory_reply read_process_memory_reply; struct write_process_memory_reply write_process_memory_reply; struct create_key_reply create_key_reply; struct open_key_reply open_key_reply; struct delete_key_reply delete_key_reply; struct flush_key_reply flush_key_reply; struct enum_key_reply enum_key_reply; struct set_key_value_reply set_key_value_reply; struct get_key_value_reply get_key_value_reply; struct enum_key_value_reply enum_key_value_reply; struct delete_key_value_reply delete_key_value_reply; struct load_registry_reply load_registry_reply; struct unload_registry_reply unload_registry_reply; struct save_registry_reply save_registry_reply; struct set_registry_notification_reply set_registry_notification_reply; struct create_timer_reply create_timer_reply; struct open_timer_reply open_timer_reply; struct set_timer_reply set_timer_reply; struct cancel_timer_reply cancel_timer_reply; struct get_timer_info_reply get_timer_info_reply; struct get_thread_context_reply get_thread_context_reply; struct set_thread_context_reply set_thread_context_reply; struct get_selector_entry_reply get_selector_entry_reply; struct add_atom_reply add_atom_reply; struct delete_atom_reply delete_atom_reply; struct find_atom_reply find_atom_reply; struct get_atom_information_reply get_atom_information_reply; struct set_atom_information_reply set_atom_information_reply; struct empty_atom_table_reply empty_atom_table_reply; struct init_atom_table_reply init_atom_table_reply; struct get_msg_queue_reply get_msg_queue_reply; struct set_queue_fd_reply set_queue_fd_reply; struct set_queue_mask_reply set_queue_mask_reply; struct get_queue_status_reply get_queue_status_reply; struct get_process_idle_event_reply get_process_idle_event_reply; struct send_message_reply send_message_reply; struct post_quit_message_reply post_quit_message_reply; struct send_hardware_message_reply send_hardware_message_reply; struct get_message_reply get_message_reply; struct reply_message_reply reply_message_reply; struct accept_hardware_message_reply accept_hardware_message_reply; struct get_message_reply_reply get_message_reply_reply; struct set_win_timer_reply set_win_timer_reply; struct kill_win_timer_reply kill_win_timer_reply; struct is_window_hung_reply is_window_hung_reply; struct get_serial_info_reply get_serial_info_reply; struct set_serial_info_reply set_serial_info_reply; struct register_async_reply register_async_reply; struct cancel_async_reply cancel_async_reply; struct get_async_result_reply get_async_result_reply; struct read_reply read_reply; struct write_reply write_reply; struct ioctl_reply ioctl_reply; struct set_irp_result_reply set_irp_result_reply; struct create_named_pipe_reply create_named_pipe_reply; struct get_named_pipe_info_reply get_named_pipe_info_reply; struct set_named_pipe_info_reply set_named_pipe_info_reply; struct create_window_reply create_window_reply; struct destroy_window_reply destroy_window_reply; struct get_desktop_window_reply get_desktop_window_reply; struct set_window_owner_reply set_window_owner_reply; struct get_window_info_reply get_window_info_reply; struct set_window_info_reply set_window_info_reply; struct set_parent_reply set_parent_reply; struct get_window_parents_reply get_window_parents_reply; struct get_window_children_reply get_window_children_reply; struct get_window_children_from_point_reply get_window_children_from_point_reply; struct get_window_tree_reply get_window_tree_reply; struct set_window_pos_reply set_window_pos_reply; struct get_window_rectangles_reply get_window_rectangles_reply; struct get_window_text_reply get_window_text_reply; struct set_window_text_reply set_window_text_reply; struct get_windows_offset_reply get_windows_offset_reply; struct get_visible_region_reply get_visible_region_reply; struct get_surface_region_reply get_surface_region_reply; struct get_window_region_reply get_window_region_reply; struct set_window_region_reply set_window_region_reply; struct get_update_region_reply get_update_region_reply; struct update_window_zorder_reply update_window_zorder_reply; struct redraw_window_reply redraw_window_reply; struct set_window_property_reply set_window_property_reply; struct remove_window_property_reply remove_window_property_reply; struct get_window_property_reply get_window_property_reply; struct get_window_properties_reply get_window_properties_reply; struct create_winstation_reply create_winstation_reply; struct open_winstation_reply open_winstation_reply; struct close_winstation_reply close_winstation_reply; struct get_process_winstation_reply get_process_winstation_reply; struct set_process_winstation_reply set_process_winstation_reply; struct enum_winstation_reply enum_winstation_reply; struct create_desktop_reply create_desktop_reply; struct open_desktop_reply open_desktop_reply; struct open_input_desktop_reply open_input_desktop_reply; struct close_desktop_reply close_desktop_reply; struct get_thread_desktop_reply get_thread_desktop_reply; struct set_thread_desktop_reply set_thread_desktop_reply; struct enum_desktop_reply enum_desktop_reply; struct set_user_object_info_reply set_user_object_info_reply; struct register_hotkey_reply register_hotkey_reply; struct unregister_hotkey_reply unregister_hotkey_reply; struct attach_thread_input_reply attach_thread_input_reply; struct get_thread_input_reply get_thread_input_reply; struct get_last_input_time_reply get_last_input_time_reply; struct get_key_state_reply get_key_state_reply; struct set_key_state_reply set_key_state_reply; struct set_foreground_window_reply set_foreground_window_reply; struct set_focus_window_reply set_focus_window_reply; struct set_active_window_reply set_active_window_reply; struct set_capture_window_reply set_capture_window_reply; struct set_caret_window_reply set_caret_window_reply; struct set_caret_info_reply set_caret_info_reply; struct set_hook_reply set_hook_reply; struct remove_hook_reply remove_hook_reply; struct start_hook_chain_reply start_hook_chain_reply; struct finish_hook_chain_reply finish_hook_chain_reply; struct get_hook_info_reply get_hook_info_reply; struct create_class_reply create_class_reply; struct destroy_class_reply destroy_class_reply; struct set_class_info_reply set_class_info_reply; struct open_clipboard_reply open_clipboard_reply; struct close_clipboard_reply close_clipboard_reply; struct empty_clipboard_reply empty_clipboard_reply; struct set_clipboard_data_reply set_clipboard_data_reply; struct get_clipboard_data_reply get_clipboard_data_reply; struct get_clipboard_formats_reply get_clipboard_formats_reply; struct enum_clipboard_formats_reply enum_clipboard_formats_reply; struct release_clipboard_reply release_clipboard_reply; struct get_clipboard_info_reply get_clipboard_info_reply; struct set_clipboard_viewer_reply set_clipboard_viewer_reply; struct add_clipboard_listener_reply add_clipboard_listener_reply; struct remove_clipboard_listener_reply remove_clipboard_listener_reply; struct open_token_reply open_token_reply; struct set_global_windows_reply set_global_windows_reply; struct adjust_token_privileges_reply adjust_token_privileges_reply; struct get_token_privileges_reply get_token_privileges_reply; struct check_token_privileges_reply check_token_privileges_reply; struct duplicate_token_reply duplicate_token_reply; struct access_check_reply access_check_reply; struct get_token_sid_reply get_token_sid_reply; struct get_token_groups_reply get_token_groups_reply; struct get_token_default_dacl_reply get_token_default_dacl_reply; struct set_token_default_dacl_reply set_token_default_dacl_reply; struct set_security_object_reply set_security_object_reply; struct get_security_object_reply get_security_object_reply; struct get_system_handles_reply get_system_handles_reply; struct create_mailslot_reply create_mailslot_reply; struct set_mailslot_info_reply set_mailslot_info_reply; struct create_directory_reply create_directory_reply; struct open_directory_reply open_directory_reply; struct get_directory_entry_reply get_directory_entry_reply; struct create_symlink_reply create_symlink_reply; struct open_symlink_reply open_symlink_reply; struct query_symlink_reply query_symlink_reply; struct get_object_info_reply get_object_info_reply; struct get_object_type_reply get_object_type_reply; struct unlink_object_reply unlink_object_reply; struct get_token_impersonation_level_reply get_token_impersonation_level_reply; struct allocate_locally_unique_id_reply allocate_locally_unique_id_reply; struct create_device_manager_reply create_device_manager_reply; struct create_device_reply create_device_reply; struct delete_device_reply delete_device_reply; struct get_next_device_request_reply get_next_device_request_reply; struct make_process_system_reply make_process_system_reply; struct get_token_statistics_reply get_token_statistics_reply; struct create_completion_reply create_completion_reply; struct open_completion_reply open_completion_reply; struct add_completion_reply add_completion_reply; struct remove_completion_reply remove_completion_reply; struct query_completion_reply query_completion_reply; struct set_completion_info_reply set_completion_info_reply; struct add_fd_completion_reply add_fd_completion_reply; struct set_fd_disp_info_reply set_fd_disp_info_reply; struct set_fd_name_info_reply set_fd_name_info_reply; struct get_window_layered_info_reply get_window_layered_info_reply; struct set_window_layered_info_reply set_window_layered_info_reply; struct alloc_user_handle_reply alloc_user_handle_reply; struct free_user_handle_reply free_user_handle_reply; struct set_cursor_reply set_cursor_reply; struct update_rawinput_devices_reply update_rawinput_devices_reply; struct get_suspend_context_reply get_suspend_context_reply; struct set_suspend_context_reply set_suspend_context_reply; struct create_job_reply create_job_reply; struct open_job_reply open_job_reply; struct assign_job_reply assign_job_reply; struct process_in_job_reply process_in_job_reply; struct set_job_limits_reply set_job_limits_reply; struct set_job_completion_port_reply set_job_completion_port_reply; struct terminate_job_reply terminate_job_reply; }; #define SERVER_PROTOCOL_VERSION 559 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */ ================================================ FILE: wine/wine/unicode.h ================================================ /* * Wine internal Unicode definitions * * Copyright 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_UNICODE_H #define __WINE_WINE_UNICODE_H #include #include #include #include #ifdef __WINE_WINE_TEST_H #error This file should not be used in Wine tests #endif #ifdef __cplusplus extern "C" { #endif #ifndef WINE_UNICODE_API # if defined(_MSC_VER) # define WINE_UNICODE_API DECLSPEC_IMPORT # else # define WINE_UNICODE_API # endif #endif #ifndef WINE_UNICODE_INLINE #define WINE_UNICODE_INLINE static inline #endif /* code page info common to SBCS and DBCS */ struct cp_info { unsigned int codepage; /* codepage id */ unsigned int char_size; /* char size (1 or 2 bytes) */ WCHAR def_char; /* default char value (can be double-byte) */ WCHAR def_unicode_char; /* default Unicode char value */ const char *name; /* code page name */ }; struct sbcs_table { struct cp_info info; const WCHAR *cp2uni; /* code page -> Unicode map */ const WCHAR *cp2uni_glyphs; /* code page -> Unicode map with glyph chars */ const unsigned char *uni2cp_low; /* Unicode -> code page map */ const unsigned short *uni2cp_high; }; struct dbcs_table { struct cp_info info; const WCHAR *cp2uni; /* code page -> Unicode map */ const unsigned char *cp2uni_leadbytes; const unsigned short *uni2cp_low; /* Unicode -> code page map */ const unsigned short *uni2cp_high; unsigned char lead_bytes[12]; /* lead bytes ranges */ }; union cptable { struct cp_info info; struct sbcs_table sbcs; struct dbcs_table dbcs; }; extern const union cptable *wine_cp_get_table( unsigned int codepage ); extern const union cptable *wine_cp_enum_table( unsigned int index ); extern int wine_cp_mbstowcs( const union cptable *table, int flags, const char *src, int srclen, WCHAR *dst, int dstlen ); extern int wine_cp_wcstombs( const union cptable *table, int flags, const WCHAR *src, int srclen, char *dst, int dstlen, const char *defchar, int *used ); extern int wine_cpsymbol_mbstowcs( const char *src, int srclen, WCHAR *dst, int dstlen ); extern int wine_cpsymbol_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen ); extern int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen ); extern int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int dstlen ); extern int wine_compare_string( int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2 ); extern int wine_get_sortkey( int flags, const WCHAR *src, int srclen, char *dst, int dstlen ); extern int wine_fold_string( int flags, const WCHAR *src, int srclen , WCHAR *dst, int dstlen ); extern int strcmpiW( const WCHAR *str1, const WCHAR *str2 ); extern int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n ); extern int memicmpW( const WCHAR *str1, const WCHAR *str2, int n ); extern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub ); extern long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base ); extern unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base ); extern int sprintfW( WCHAR *str, const WCHAR *format, ... ); extern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... ); extern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist ); extern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist ); WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch ) { return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]); } WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch ) { extern WINE_UNICODE_API const WCHAR wine_casemap_lower[]; return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)]; } WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch ) { extern WINE_UNICODE_API const WCHAR wine_casemap_upper[]; return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)]; } /* the character type contains the C1_* flags in the low 12 bits */ /* and the C2_* type in the high 4 bits */ WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch ) { extern WINE_UNICODE_API const unsigned short wine_wctype_table[]; return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)]; } WINE_UNICODE_INLINE int iscntrlW( WCHAR wc ) { return get_char_typeW(wc) & C1_CNTRL; } WINE_UNICODE_INLINE int ispunctW( WCHAR wc ) { return get_char_typeW(wc) & C1_PUNCT; } WINE_UNICODE_INLINE int isspaceW( WCHAR wc ) { return get_char_typeW(wc) & C1_SPACE; } WINE_UNICODE_INLINE int isdigitW( WCHAR wc ) { return get_char_typeW(wc) & C1_DIGIT; } WINE_UNICODE_INLINE int isxdigitW( WCHAR wc ) { return get_char_typeW(wc) & C1_XDIGIT; } WINE_UNICODE_INLINE int islowerW( WCHAR wc ) { return get_char_typeW(wc) & C1_LOWER; } WINE_UNICODE_INLINE int isupperW( WCHAR wc ) { return get_char_typeW(wc) & C1_UPPER; } WINE_UNICODE_INLINE int isalnumW( WCHAR wc ) { return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER); } WINE_UNICODE_INLINE int isalphaW( WCHAR wc ) { return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER); } WINE_UNICODE_INLINE int isgraphW( WCHAR wc ) { return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER); } WINE_UNICODE_INLINE int isprintW( WCHAR wc ) { return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER); } /* some useful string manipulation routines */ WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str ) { const WCHAR *s = str; while (*s) s++; return s - str; } WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src ) { WCHAR *p = dst; while ((*p++ = *src++)); return dst; } /* strncpy doesn't do what you think, don't use it */ #define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 ) { while (*str1 && (*str1 == *str2)) { str1++; str2++; } return *str1 - *str2; } WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n ) { if (n <= 0) return 0; while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; } return *str1 - *str2; } WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src ) { strcpyW( dst + strlenW(dst), src ); return dst; } WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch ) { do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++); return NULL; } WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch ) { WCHAR *ret = NULL; do { if (*str == ch) ret = (WCHAR *)(ULONG_PTR)str; } while (*str++); return ret; } WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept ) { for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str; return NULL; } WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept ) { const WCHAR *ptr; for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break; return ptr - str; } WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject ) { const WCHAR *ptr; for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break; return ptr - str; } WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str ) { WCHAR *ret; for (ret = str; *str; str++) *str = tolowerW(*str); return ret; } WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str ) { WCHAR *ret; for (ret = str; *str; str++) *str = toupperW(*str); return ret; } WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n ) { const WCHAR *end; for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)(ULONG_PTR)ptr; return NULL; } WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n ) { const WCHAR *end; WCHAR *ret = NULL; for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = (WCHAR *)(ULONG_PTR)ptr; return ret; } WINE_UNICODE_INLINE long int atolW( const WCHAR *str ) { return strtolW( str, (WCHAR **)0, 10 ); } WINE_UNICODE_INLINE int atoiW( const WCHAR *str ) { return (int)atolW( str ); } #undef WINE_UNICODE_INLINE #ifdef __cplusplus } #endif #endif /* __WINE_WINE_UNICODE_H */ ================================================ FILE: wine/wine/winaspi.h ================================================ /* * This file should be source compatible with the Adaptec winaspi.h * All DOS ASPI structures are the same as WINASPI * * Copyright (C) 2000 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINASPI_H__ #define __WINASPI_H__ /* Include base aspi defs */ #include #ifdef __cplusplus extern "C" { #endif /* #ifdef __cplusplus */ /* WINE SCSI Stuff */ #define ASPI_DOS 1 #define ASPI_WIN16 2 #include /* SRB HA_INQUIRY */ typedef struct tagSRB16_HaInquiry { BYTE SRB_Cmd; BYTE SRB_Status; BYTE SRB_HaId; BYTE SRB_Flags; WORD SRB_55AASignature; WORD SRB_ExtBufferSize; BYTE HA_Count; BYTE HA_SCSI_ID; BYTE HA_ManagerId[16]; BYTE HA_Identifier[16]; BYTE HA_Unique[16]; BYTE HA_ExtBuffer[4]; } SRB_HaInquiry16, *PSRB_HaInquiry16, *LPSRB_HaInquiry16; typedef struct tagSRB16_GDEVBlock { BYTE SRB_Cmd; /* ASPI command code = SC_GET_DEV_TYPE */ BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_Flags; /* ASPI request flags */ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ BYTE SRB_Target; /* Target's SCSI ID */ BYTE SRB_Lun; /* Target's LUN number */ BYTE SRB_DeviceType; /* Target's peripheral device type */ } SRB_GDEVBlock16, *PSRB_GDEVBlock16, *LPSRB_GDEVBlock16; typedef struct tagSRB16_ExecSCSICmd { BYTE SRB_Cmd; /* ASPI command code (W) */ BYTE SRB_Status; /* ASPI command status byte (R) */ BYTE SRB_HaId; /* ASPI host adapter number (W) */ BYTE SRB_Flags; /* ASPI request flags (W) */ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 (-) */ BYTE SRB_Target; /* Target's SCSI ID (W) */ BYTE SRB_Lun; /* Target's LUN number (W) */ DWORD SRB_BufLen; /* Data Allocation LengthPG (W/R)*/ BYTE SRB_SenseLen; /* Sense Allocation Length (W) */ SEGPTR SRB_BufPointer; /* Data Buffer Pointer (W) */ DWORD SRB_Rsvd1; /* Reserved, MUST = 0 (-/W)*/ BYTE SRB_CDBLen; /* CDB Length = 6 (W) */ BYTE SRB_HaStat; /* Host Adapter Status (R) */ BYTE SRB_TargStat; /* Target Status (R) */ FARPROC16 SRB_PostProc; /* Post routine (W) */ BYTE SRB_Rsvd2[34]; /* Reserved, MUST = 0 */ BYTE CDBByte[1]; /* SCSI CBD - variable length (W) */ /* variable example for 6 byte cbd * BYTE CDBByte[6]; * SCSI CDB (W) * * BYTE SenseArea6[SENSE_LEN]; * Request Sense buffer (R) * */ } SRB_ExecSCSICmd16, *PSRB_ExecSCSICmd16, *LPSRB_ExecSCSICmd16; typedef struct tagSRB16_Abort { BYTE SRB_Cmd; /* ASPI command code = SC_ABORT_SRB */ BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_Flags; /* ASPI request flags */ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ SEGPTR SRB_ToAbort; /* Pointer to SRB to abort */ } SRB_Abort16, *PSRB_Abort16, *LPSRB_Abort16; typedef struct tagSRB16_BusDeviceReset { BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */ BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_Flags; /* ASPI request flags */ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ BYTE SRB_Target; /* Target's SCSI ID */ BYTE SRB_Lun; /* Target's LUN number */ BYTE SRB_ResetRsvd1[14]; /* Reserved, MUST = 0 */ BYTE SRB_HaStat; /* Host Adapter Status */ BYTE SRB_TargStat; /* Target Status */ FARPROC16 SRB_PostProc; /* Post routine */ BYTE SRB_ResetRsvd2[34]; /* Reserved, MUST = 0 */ } SRB_BusDeviceReset16, *PSRB_BusDeviceReset16, *LPSRB_BusDeviceReset16; typedef struct tagSRB16_Common { BYTE SRB_Cmd; /* ASPI command code = SC_ABORT_SRB */ BYTE SRB_Status; /* ASPI command status byte */ BYTE SRB_HaId; /* ASPI host adapter number */ BYTE SRB_Flags; /* ASPI request flags */ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */ } SRB_Common16, *PSRB_Common16, *LPSRB_Common16; typedef union tagSRB16 { SRB_Common16 common; SRB_HaInquiry16 inquiry; SRB_ExecSCSICmd16 cmd; SRB_Abort16 abort; SRB_BusDeviceReset16 reset; SRB_GDEVBlock16 devtype; } SRB16, *LPSRB16; #include extern WORD WINAPI SendASPICommand16(SEGPTR); extern WORD WINAPI GetASPISupportInfo16(void); #ifdef __cplusplus } #endif /* #ifdef __cplusplus */ #endif /* __WINE_WINASPI_H */ ================================================ FILE: wine/wine/winbase16.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_WINBASE16_H #define __WINE_WINE_WINBASE16_H #include #include #include #include #include #include #include /* Process database (i.e. a normal DOS PSP) */ typedef struct { WORD int20; /* 00 int 20h instruction */ WORD nextParagraph; /* 02 Segment of next paragraph */ BYTE reserved1; BYTE dispatcher[5]; /* 05 Long call to DOS */ FARPROC16 savedint22; /* 0a Saved int 22h handler */ FARPROC16 savedint23; /* 0e Saved int 23h handler */ FARPROC16 savedint24; /* 12 Saved int 24h handler */ WORD parentPSP; /* 16 Selector of parent PSP */ BYTE fileHandles[20]; /* 18 Open file handles */ HANDLE16 environment; /* 2c Selector of environment */ DWORD saveStack; /* 2e SS:SP on last int21 call */ WORD nbFiles; /* 32 Number of file handles */ SEGPTR fileHandlesPtr; /* 34 Pointer to file handle table */ HANDLE16 hFileHandles; /* 38 Handle to fileHandlesPtr */ WORD reserved3[17]; BYTE fcb1[16]; /* 5c First FCB */ BYTE fcb2[20]; /* 6c Second FCB */ BYTE cmdLine[128]; /* 80 Command-line (first byte is len)*/ BYTE padding[16]; /* Some apps access beyond the end of the cmd line */ } PDB16; /* Task database. See 'Windows Internals' p. 226. * Note that 16-bit OLE 2 libs like to read it directly * so we have to keep entry offsets as they are. */ typedef struct _TDB { HTASK16 hNext; /* 00 Selector of next TDB */ DWORD ss_sp; /* 02 Stack pointer of task */ WORD nEvents; /* 06 Events for this task */ INT16 priority; /* 08 Task priority, -32..15 */ WORD unused1; /* 0a */ HTASK16 hSelf; /* 0c Selector of this TDB */ HANDLE16 hPrevInstance; /* 0e Previous instance of module */ DWORD unused2; /* 10 */ WORD ctrlword8087; /* 14 80x87 control word */ WORD flags; /* 16 Task flags */ UINT16 error_mode; /* 18 Error mode (see SetErrorMode)*/ WORD version; /* 1a Expected Windows version */ HANDLE16 hInstance; /* 1c Instance handle for task */ HMODULE16 hModule; /* 1e Module handle */ HQUEUE16 hQueue; /* 20 Selector of task queue */ HTASK16 hParent; /* 22 Selector of TDB of parent */ WORD signal_flags; /* 24 Flags for signal handler */ FARPROC16 sighandler; /* 26 Signal handler */ FARPROC16 userhandler; /* 2a USER signal handler */ FARPROC16 discardhandler; /* 2e Handler for GlobalNotify() */ FARPROC16 int0; /* 32 int 0 (divide by 0) handler */ FARPROC16 int2; /* 36 int 2 (NMI) handler */ FARPROC16 int4; /* 3a int 4 (INTO) handler */ FARPROC16 int6; /* 3e int 6 (invalid opc) handler */ FARPROC16 int7; /* 42 int 7 (coprocessor) handler */ FARPROC16 int3e; /* 46 int 3e (80x87 emu) handler */ FARPROC16 int75; /* 4a int 75 (80x87 error) handler */ DWORD compat_flags; /* 4e Compatibility flags */ BYTE unused4[2]; /* 52 */ struct _TEB *teb; /* 54 Pointer to thread database */ BYTE unused5[8]; /* 58 */ HANDLE16 hPDB; /* 60 Selector of PDB (i.e. PSP) */ SEGPTR dta; /* 62 Current DTA */ BYTE curdrive; /* 66 Current drive */ CHAR curdir[65]; /* 67 Current directory */ WORD nCmdShow; /* a8 cmdShow parameter to WinMain */ HTASK16 hYieldTo; /* aa Next task to schedule */ DWORD dlls_to_init; /* ac Ptr to DLLs to initialize */ HANDLE16 hCSAlias; /* b0 Code segment for this TDB */ WORD thunks[8*4]; /* b2 Make proc instance thunks */ CHAR module_name[8]; /* f2 Module name for task */ WORD magic; /* fa TDB signature */ HANDLE hEvent; /* fc scheduler event handle */ PDB16 pdb; /* 100 PDB for this task */ } TDB; /* TDB flags */ #define TDBF_WINOLDAP 0x0001 #define TDBF_OS2APP 0x0008 #define TDBF_WIN32 0x0010 /* Windows 3.1 USER signals */ #define USIG16_TERMINATION 0x0020 #define USIG16_DLL_LOAD 0x0040 #define USIG16_DLL_UNLOAD 0x0080 #define USIG16_GPF 0x0666 typedef struct _SEGINFO { UINT16 offSegment; UINT16 cbSegment; UINT16 flags; UINT16 cbAlloc; HGLOBAL16 h; UINT16 alignShift; UINT16 reserved[2]; } SEGINFO; /* GetWinFlags */ #define WF_PMODE 0x0001 #define WF_CPU286 0x0002 #define WF_CPU386 0x0004 #define WF_CPU486 0x0008 #define WF_STANDARD 0x0010 #define WF_WIN286 0x0010 #define WF_ENHANCED 0x0020 #define WF_WIN386 0x0020 #define WF_CPU086 0x0040 #define WF_CPU186 0x0080 #define WF_LARGEFRAME 0x0100 #define WF_SMALLFRAME 0x0200 #define WF_80x87 0x0400 #define WF_PAGING 0x0800 #define WF_HASCPUID 0x2000 #define WF_WIN32WOW 0x4000 /* undoc */ #define WF_WLO 0x8000 /* Parameters for LoadModule() */ typedef struct { HGLOBAL16 hEnvironment; /* Environment segment */ SEGPTR cmdLine; /* Command-line */ SEGPTR showCmd; /* Code for ShowWindow() */ SEGPTR reserved; } LOADPARAMS16; /* Debugging support (DEBUG SYSTEM ONLY) */ typedef struct { WORD flags; DWORD dwOptions; DWORD dwFilter; CHAR achAllocModule[8]; DWORD dwAllocBreak; DWORD dwAllocCount; } WINDEBUGINFO16, *LPWINDEBUGINFO16; /* definitions specific to Wine 16-bit relaying support */ /* 32-bit stack layout after __wine_call_to_16() */ typedef struct _STACK32FRAME { DWORD restore_addr; /* 00 return address for restoring code selector */ DWORD codeselector; /* 04 code selector to restore */ EXCEPTION_REGISTRATION_RECORD frame; /* 08 Exception frame */ SEGPTR frame16; /* 10 16-bit frame from last CallFrom16() */ DWORD edi; /* 14 saved registers */ DWORD esi; /* 18 */ DWORD ebx; /* 1c */ DWORD ebp; /* 20 saved 32-bit frame pointer */ DWORD retaddr; /* 24 return address */ DWORD target; /* 28 target address / CONTEXT86 pointer */ DWORD nb_args; /* 2c number of 16-bit argument bytes */ } STACK32FRAME; /* 16-bit stack layout after __wine_call_from_16() */ typedef struct _STACK16FRAME { STACK32FRAME *frame32; /* 00 32-bit frame from last CallTo16() */ DWORD edx; /* 04 saved registers */ DWORD ecx; /* 08 */ DWORD ebp; /* 0c */ WORD ds; /* 10 */ WORD es; /* 12 */ WORD fs; /* 14 */ WORD gs; /* 16 */ DWORD callfrom_ip; /* 18 callfrom tail IP */ DWORD module_cs; /* 1c module code segment */ DWORD relay; /* 20 relay function address */ WORD entry_ip; /* 22 entry point IP */ DWORD entry_point; /* 26 API entry point to call, reused as mutex count */ WORD bp; /* 2a 16-bit stack frame chain */ WORD ip; /* 2c return address */ WORD cs; /* 2e */ } STACK16FRAME; /* argument type flags for relay debugging */ enum arg_types { ARG_NONE = 0, /* indicates end of arg list */ ARG_WORD, /* unsigned word */ ARG_SWORD, /* signed word */ ARG_LONG, /* long or segmented pointer */ ARG_PTR, /* linear pointer */ ARG_STR, /* linear pointer to null-terminated string */ ARG_SEGSTR, /* segmented pointer to null-terminated string */ ARG_VARARG /* start of varargs */ }; #define INVALID_HANDLE_VALUE16 ((HANDLE16) -1) #define INFINITE16 0xFFFF typedef struct { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; CHAR szCSDVersion[128]; } OSVERSIONINFO16; /* * NE Header FORMAT FLAGS */ #define NE_FFLAGS_SINGLEDATA 0x0001 #define NE_FFLAGS_MULTIPLEDATA 0x0002 #define NE_FFLAGS_WIN32 0x0010 #define NE_FFLAGS_BUILTIN 0x0020 /* Wine built-in module */ #define NE_FFLAGS_FRAMEBUF 0x0100 /* OS/2 fullscreen app */ #define NE_FFLAGS_CONSOLE 0x0200 /* OS/2 console app */ #define NE_FFLAGS_GUI 0x0300 /* right, (NE_FFLAGS_FRAMEBUF | NE_FFLAGS_CONSOLE) */ #define NE_FFLAGS_SELFLOAD 0x0800 #define NE_FFLAGS_LINKERROR 0x2000 #define NE_FFLAGS_CALLWEP 0x4000 #define NE_FFLAGS_LIBMODULE 0x8000 /* * NE Header OPERATING SYSTEM */ #define NE_OSFLAGS_UNKNOWN 0x00 #define NE_OSFLAGS_OS2 0x01 #define NE_OSFLAGS_WINDOWS 0x02 /* * NE Header ADDITIONAL FLAGS */ #define NE_AFLAGS_WIN2_PROTMODE 0x02 #define NE_AFLAGS_WIN2_PROFONTS 0x04 #define NE_AFLAGS_FASTLOAD 0x08 /* * Segment Flags */ #define NE_SEGFLAGS_DATA 0x0001 #define NE_SEGFLAGS_ALLOCATED 0x0002 #define NE_SEGFLAGS_LOADED 0x0004 #define NE_SEGFLAGS_ITERATED 0x0008 #define NE_SEGFLAGS_MOVEABLE 0x0010 #define NE_SEGFLAGS_SHAREABLE 0x0020 #define NE_SEGFLAGS_PRELOAD 0x0040 #define NE_SEGFLAGS_EXECUTEONLY 0x0080 #define NE_SEGFLAGS_READONLY 0x0080 #define NE_SEGFLAGS_RELOC_DATA 0x0100 #define NE_SEGFLAGS_SELFLOAD 0x0800 #define NE_SEGFLAGS_DISCARDABLE 0x1000 #define NE_SEGFLAGS_32BIT 0x2000 /* * Resource table structures. */ typedef struct { WORD offset; WORD length; WORD flags; WORD id; HANDLE16 handle; WORD usage; } NE_NAMEINFO; typedef struct { WORD type_id; /* Type identifier */ WORD count; /* Number of resources of this type */ FARPROC16 resloader; /* SetResourceHandler() */ /* * Name info array. */ } NE_TYPEINFO; #define NE_RSCTYPE_CURSOR 0x8001 #define NE_RSCTYPE_BITMAP 0x8002 #define NE_RSCTYPE_ICON 0x8003 #define NE_RSCTYPE_MENU 0x8004 #define NE_RSCTYPE_DIALOG 0x8005 #define NE_RSCTYPE_STRING 0x8006 #define NE_RSCTYPE_FONTDIR 0x8007 #define NE_RSCTYPE_FONT 0x8008 #define NE_RSCTYPE_ACCELERATOR 0x8009 #define NE_RSCTYPE_RCDATA 0x800a #define NE_RSCTYPE_GROUP_CURSOR 0x800c #define NE_RSCTYPE_GROUP_ICON 0x800e #define NE_RSCTYPE_SCALABLE_FONTPATH 0x80cc /* Resource found in .fot files */ #include #define __AHSHIFT 3 /* don't change! */ #define __AHINCR (1 << __AHSHIFT) /* undocumented functions */ typedef struct tagSYSLEVEL { CRITICAL_SECTION crst; INT level; } SYSLEVEL; /* [GS]etProcessDword offsets */ #define GPD_APP_COMPAT_FLAGS (-56) #define GPD_LOAD_DONE_EVENT (-52) #define GPD_HINSTANCE16 (-48) #define GPD_WINDOWS_VERSION (-44) #define GPD_THDB (-40) #define GPD_PDB (-36) #define GPD_STARTF_SHELLDATA (-32) #define GPD_STARTF_HOTKEY (-28) #define GPD_STARTF_SHOWWINDOW (-24) #define GPD_STARTF_SIZE (-20) #define GPD_STARTF_POSITION (-16) #define GPD_STARTF_FLAGS (-12) #define GPD_PARENT (- 8) #define GPD_FLAGS (- 4) #define GPD_USERDATA ( 0) WORD WINAPI AllocCStoDSAlias16(WORD); WORD WINAPI AllocDStoCSAlias16(WORD); HGLOBAL16 WINAPI AllocResource16(HINSTANCE16,HRSRC16,DWORD); WORD WINAPI AllocSelector16(WORD); WORD WINAPI AllocSelectorArray16(WORD); VOID WINAPI DirectedYield16(HTASK16); HGLOBAL16 WINAPI DirectResAlloc16(HINSTANCE16,WORD,UINT16); BOOL16 WINAPI DeleteDosFileHandle(HANDLE); HANDLE WINAPI DosFileHandleToWin32Handle(HFILE); HANDLE16 WINAPI FarGetOwner16(HGLOBAL16); VOID WINAPI FarSetOwner16(HGLOBAL16,HANDLE16); FARPROC16 WINAPI FileCDR16(FARPROC16); WORD WINAPI FreeSelector16(WORD); HANDLE16 WINAPI GetAtomHandle16(ATOM); DWORD WINAPI GetCodeHandle16(FARPROC16); BOOL16 WINAPI GetCodeInfo16(FARPROC16,SEGINFO*); DWORD WINAPI GetCurrentPDB16(void); HTASK16 WINAPI GetCurrentTask(void); SEGPTR WINAPI GetDOSEnvironment16(void); HMODULE16 WINAPI GetExePtr(HANDLE16); WORD WINAPI GetExeVersion16(void); WORD WINAPI GetExpWinVer16(HMODULE16); HQUEUE16 WINAPI GetFastQueue16(void); DWORD WINAPI GetHeapSpaces16(HMODULE16); INT16 WINAPI GetInstanceData16(HINSTANCE16,WORD,INT16); BOOL16 WINAPI GetModuleName16(HINSTANCE16,LPSTR,INT16); INT16 WINAPI GetModuleUsage16(HINSTANCE16); UINT16 WINAPI GetNumTasks16(void); VOID WINAPI GetpWin16Lock(SYSLEVEL**); SEGPTR WINAPI GetpWin16Lock16(void); DWORD WINAPI GetProcessDword(DWORD,INT); DWORD WINAPI GetSelectorLimit16(WORD); FARPROC16 WINAPI GetSetKernelDOSProc16(FARPROC16 DosProc); HINSTANCE16 WINAPI GetTaskDS16(void); HQUEUE16 WINAPI GetTaskQueue16(HTASK16); HQUEUE16 WINAPI GetThreadQueue16(DWORD); DWORD WINAPI GetWinFlags16(void); DWORD WINAPI GlobalDOSAlloc16(DWORD); WORD WINAPI GlobalDOSFree16(WORD); void WINAPI GlobalFreeAll16(HGLOBAL16); DWORD WINAPI GlobalHandleNoRIP16(WORD); WORD WINAPI GlobalHandleToSel16(HGLOBAL16); HGLOBAL16 WINAPI GlobalLRUNewest16(HGLOBAL16); HGLOBAL16 WINAPI GlobalLRUOldest16(HGLOBAL16); VOID WINAPI GlobalNotify16(FARPROC16); WORD WINAPI GlobalPageLock16(HGLOBAL16); WORD WINAPI GlobalPageUnlock16(HGLOBAL16); SEGPTR WINAPI HasGPHandler16(SEGPTR); BOOL16 WINAPI IsSharedSelector16(HANDLE16); BOOL16 WINAPI IsTask16(HTASK16); HTASK16 WINAPI IsTaskLocked16(void); VOID WINAPI LogError16(UINT16, LPVOID); VOID WINAPI LogParamError16(UINT16,FARPROC16,LPVOID); WORD WINAPI LocalCountFree16(void); WORD WINAPI LocalHandleDelta16(WORD); WORD WINAPI LocalHeapSize16(void); BOOL16 WINAPI LocalInit16(HANDLE16,WORD,WORD); FARPROC16 WINAPI LocalNotify16(FARPROC16); HTASK16 WINAPI LockCurrentTask16(BOOL16); DWORD WINAPI MapLS(LPCVOID); LPVOID WINAPI MapSL(DWORD); VOID WINAPI OldYield16(void); VOID WINAPI WIN32_OldYield16(void); VOID WINAPI PostEvent16(HTASK16); WORD WINAPI PrestoChangoSelector16(WORD,WORD); VOID WINAPI ReleaseThunkLock(DWORD*); VOID WINAPI RestoreThunkLock(DWORD); WORD WINAPI SelectorAccessRights16(WORD,WORD,WORD); void WINAPI SetFastQueue16(DWORD,HQUEUE16); VOID WINAPI SetPriority16(HTASK16,INT16); FARPROC16 WINAPI SetResourceHandler16(HINSTANCE16,LPCSTR,FARPROC16); WORD WINAPI SetSelectorLimit16(WORD,DWORD); HQUEUE16 WINAPI SetTaskQueue16(HTASK16,HQUEUE16); HQUEUE16 WINAPI SetThreadQueue16(DWORD,HQUEUE16); VOID WINAPI SwitchStackTo16(WORD,WORD,WORD); VOID WINAPI UnMapLS(DWORD); BOOL16 WINAPI WaitEvent16(HTASK16); HFILE WINAPI Win32HandleToDosFileHandle(HANDLE); VOID WINAPI WriteOutProfiles16(void); VOID WINAPI hmemcpy16(LPVOID,LPCVOID,LONG); VOID WINAPI _CheckNotSysLevel(SYSLEVEL *lock); DWORD WINAPI _ConfirmSysLevel(SYSLEVEL*); DWORD WINAPI _ConfirmWin16Lock(void); VOID WINAPI _CreateSysLevel(SYSLEVEL*,INT); VOID WINAPI _EnterSysLevel(SYSLEVEL*); VOID WINAPI _EnterWin16Lock(void); VOID WINAPI _LeaveSysLevel(SYSLEVEL*); VOID WINAPI _LeaveWin16Lock(void); INT16 WINAPI AccessResource16(HINSTANCE16,HRSRC16); ATOM WINAPI AddAtom16(LPCSTR); INT16 WINAPI CompareString16(LCID,DWORD,LPCSTR,INT16,LPCSTR,INT16); BOOL16 WINAPI CreateDirectory16(LPCSTR,LPVOID); BOOL16 WINAPI DefineHandleTable16(WORD); ATOM WINAPI DeleteAtom16(ATOM); BOOL16 WINAPI DeleteFile16(LPCSTR); void WINAPI ExitKernel16(void); void WINAPI FatalAppExit16(UINT16,LPCSTR); ATOM WINAPI FindAtom16(LPCSTR); BOOL16 WINAPI FindClose16(HANDLE16); VOID WINAPI FreeLibrary16(HINSTANCE16); HANDLE16 WINAPI FindFirstFile16(LPCSTR,LPWIN32_FIND_DATAA); BOOL16 WINAPI FindNextFile16(HANDLE16,LPWIN32_FIND_DATAA); HRSRC16 WINAPI FindResource16(HINSTANCE16,LPCSTR,LPCSTR); BOOL16 WINAPI FreeModule16(HMODULE16); void WINAPI FreeProcInstance16(FARPROC16); BOOL16 WINAPI FreeResource16(HGLOBAL16); UINT16 WINAPI GetAtomName16(ATOM,LPSTR,INT16); UINT16 WINAPI GetCurrentDirectory16(UINT16,LPSTR); BOOL16 WINAPI GetDiskFreeSpace16(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD); UINT16 WINAPI GetDriveType16(UINT16); /* yes, the arguments differ */ INT16 WINAPI GetLocaleInfo16(LCID,LCTYPE,LPSTR,INT16); DWORD WINAPI GetFileAttributes16(LPCSTR); DWORD WINAPI GetFreeSpace16(UINT16); INT16 WINAPI GetModuleFileName16(HINSTANCE16,LPSTR,INT16); HMODULE16 WINAPI GetModuleHandle16(LPCSTR); UINT16 WINAPI GetPrivateProfileInt16(LPCSTR,LPCSTR,INT16,LPCSTR); INT16 WINAPI GetPrivateProfileSection16(LPCSTR,LPSTR,UINT16,LPCSTR); WORD WINAPI GetPrivateProfileSectionNames16(LPSTR,UINT16,LPCSTR); INT16 WINAPI GetPrivateProfileString16(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16,LPCSTR); BOOL16 WINAPI GetPrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR); FARPROC16 WINAPI GetProcAddress16(HMODULE16,LPCSTR); UINT16 WINAPI GetProfileInt16(LPCSTR,LPCSTR,INT16); INT16 WINAPI GetProfileSection16(LPCSTR,LPSTR,UINT16); WORD WINAPI GetProfileSectionNames16(LPSTR,WORD); INT16 WINAPI GetProfileString16(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16); DWORD WINAPI GetSelectorBase(WORD); BOOL16 WINAPI GetStringType16(LCID,DWORD,LPCSTR,INT16,LPWORD); UINT16 WINAPI GetSystemDirectory16(LPSTR,UINT16); UINT16 WINAPI GetTempFileName16(BYTE,LPCSTR,UINT16,LPSTR); DWORD WINAPI GetVersion16(void); BOOL16 WINAPI GetVersionEx16(OSVERSIONINFO16*); BOOL16 WINAPI GetWinDebugInfo16(LPWINDEBUGINFO16,UINT16); UINT16 WINAPI GetWindowsDirectory16(LPSTR,UINT16); HGLOBAL16 WINAPI GlobalAlloc16(UINT16,DWORD); DWORD WINAPI GlobalCompact16(DWORD); LPVOID WINAPI GlobalLock16(HGLOBAL16); WORD WINAPI GlobalFix16(HGLOBAL16); UINT16 WINAPI GlobalFlags16(HGLOBAL16); HGLOBAL16 WINAPI GlobalFree16(HGLOBAL16); DWORD WINAPI GlobalHandle16(WORD); HGLOBAL16 WINAPI GlobalReAlloc16(HGLOBAL16,DWORD,UINT16); DWORD WINAPI GlobalSize16(HGLOBAL16); VOID WINAPI GlobalUnfix16(HGLOBAL16); BOOL16 WINAPI GlobalUnlock16(HGLOBAL16); BOOL16 WINAPI GlobalUnWire16(HGLOBAL16); SEGPTR WINAPI GlobalWire16(HGLOBAL16); WORD WINAPI InitAtomTable16(WORD); void WINAPI InitTask16(CONTEXT*); BOOL16 WINAPI IsBadCodePtr16(SEGPTR); BOOL16 WINAPI IsBadHugeReadPtr16(SEGPTR,DWORD); BOOL16 WINAPI IsBadHugeWritePtr16(SEGPTR,DWORD); BOOL16 WINAPI IsBadReadPtr16(SEGPTR,UINT16); BOOL16 WINAPI IsBadStringPtr16(SEGPTR,UINT16); BOOL16 WINAPI IsBadWritePtr16(SEGPTR,UINT16); BOOL16 WINAPI IsDBCSLeadByte16(BYTE); HINSTANCE16 WINAPI LoadLibrary16(LPCSTR); HINSTANCE16 WINAPI LoadModule16(LPCSTR,LPVOID); HGLOBAL16 WINAPI LoadResource16(HINSTANCE16,HRSRC16); HLOCAL16 WINAPI LocalAlloc16(UINT16,WORD); UINT16 WINAPI LocalCompact16(UINT16); UINT16 WINAPI LocalFlags16(HLOCAL16); HLOCAL16 WINAPI LocalFree16(HLOCAL16); HLOCAL16 WINAPI LocalHandle16(WORD); SEGPTR WINAPI LocalLock16(HLOCAL16); HLOCAL16 WINAPI LocalReAlloc16(HLOCAL16,WORD,UINT16); UINT16 WINAPI LocalShrink16(HGLOBAL16,UINT16); UINT16 WINAPI LocalSize16(HLOCAL16); BOOL16 WINAPI LocalUnlock16(HLOCAL16); LPVOID WINAPI LockResource16(HGLOBAL16); HGLOBAL16 WINAPI LockSegment16(HGLOBAL16); FARPROC16 WINAPI MakeProcInstance16(FARPROC16,HANDLE16); HFILE16 WINAPI OpenFile16(LPCSTR,OFSTRUCT*,UINT16); DWORD WINAPI RegCloseKey16(HKEY); DWORD WINAPI RegCreateKey16(HKEY,LPCSTR,PHKEY); DWORD WINAPI RegDeleteKey16(HKEY,LPCSTR); DWORD WINAPI RegDeleteValue16(HKEY,LPSTR); DWORD WINAPI RegEnumKey16(HKEY,DWORD,LPSTR,DWORD); DWORD WINAPI RegEnumValue16(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD); DWORD WINAPI RegOpenKey16(HKEY,LPCSTR,PHKEY); DWORD WINAPI RegQueryValue16(HKEY,LPCSTR,LPSTR,LPDWORD); DWORD WINAPI RegQueryValueEx16(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); DWORD WINAPI RegSetValue16(HKEY,LPCSTR,DWORD,LPCSTR,DWORD); DWORD WINAPI RegSetValueEx16(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD); BOOL16 WINAPI RemoveDirectory16(LPCSTR); BOOL16 WINAPI SetCurrentDirectory16(LPCSTR); UINT16 WINAPI SetErrorMode16(UINT16); BOOL16 WINAPI SetFileAttributes16(LPCSTR,DWORD); UINT16 WINAPI SetHandleCount16(UINT16); WORD WINAPI SetSelectorBase(WORD,DWORD); LONG WINAPI SetSwapAreaSize16(WORD); BOOL16 WINAPI SetWinDebugInfo16(LPWINDEBUGINFO16); DWORD WINAPI SizeofResource16(HMODULE16,HRSRC16); void WINAPI UnlockSegment16(HGLOBAL16); BOOL16 WINAPI WritePrivateProfileString16(LPCSTR,LPCSTR,LPCSTR,LPCSTR); BOOL16 WINAPI WriteProfileString16(LPCSTR,LPCSTR,LPCSTR); /* Yield16 will only be available from kernel module, use WOWYield instead */ VOID WINAPI Yield16(void); SEGPTR WINAPI lstrcat16(SEGPTR,LPCSTR); SEGPTR WINAPI lstrcatn16(SEGPTR,LPCSTR,INT16); SEGPTR WINAPI lstrcpy16(SEGPTR,LPCSTR); SEGPTR WINAPI lstrcpyn16(SEGPTR,LPCSTR,INT16); INT16 WINAPI lstrlen16(LPCSTR); HINSTANCE16 WINAPI WinExec16(LPCSTR,UINT16); LONG WINAPI _hread16(HFILE16,LPVOID,LONG); LONG WINAPI _hwrite16(HFILE16,LPCSTR,LONG); HFILE16 WINAPI _lcreat16(LPCSTR,INT16); HFILE16 WINAPI _lclose16(HFILE16); LONG WINAPI _llseek16(HFILE16,LONG,INT16); HFILE16 WINAPI _lopen16(LPCSTR,INT16); UINT16 WINAPI _lread16(HFILE16,LPVOID,UINT16); UINT16 WINAPI _lwrite16(HFILE16,LPCSTR,UINT16); BOOL16 WINAPI WritePrivateProfileSection16(LPCSTR,LPCSTR,LPCSTR); BOOL16 WINAPI WritePrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR); BOOL16 WINAPI WriteProfileSection16(LPCSTR,LPCSTR); //config DWORD WINAPI krnl386_get_config_string(LPCSTR appname, LPCSTR keyname, LPCSTR def, LPSTR ret, DWORD size); DWORD WINAPI krnl386_get_config_int(LPCSTR appname, LPCSTR keyname, INT def); BOOL WINAPI krnl386_get_compat_mode(const LPCSTR mode); void WINAPI krnl386_set_compat_path(const LPCSTR path); #endif /* __WINE_WINE_WINBASE16_H */ ================================================ FILE: wine/wine/windef16.h ================================================ /* * Basic type definitions for 16 bit variations on Windows types. * These types are provided mostly to insure compatibility with * 16 bit windows code. * * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINDEF16_H #define __WINE_WINDEF16_H #ifndef RC_INVOKED #include #endif #include #include /* Standard data types */ typedef unsigned short BOOL16; typedef DWORD SEGPTR; typedef UINT16 HANDLE16; typedef HANDLE16 *LPHANDLE16; typedef UINT16 WPARAM16; typedef INT16 *LPINT16; typedef UINT16 *LPUINT16; typedef WORD CATCHBUF[9]; typedef WORD *LPCATCHBUF; #define MAKESEGPTR(seg,off) ((SEGPTR)MAKELONG(off,seg)) #define SELECTOROF(ptr) (HIWORD(ptr)) #define OFFSETOF(ptr) (LOWORD(ptr)) typedef WORD *VA_LIST16; #define __VA_ROUNDED16(type) \ ((sizeof(type) + sizeof(WORD) - 1) / sizeof(WORD) * sizeof(WORD)) #define VA_ARG16(list,type) \ (((list) = (VA_LIST16)((char *)(list) + __VA_ROUNDED16(type))), \ *((type *)(void *)((char *)(list) - __VA_ROUNDED16(type)))) #define HFILE_ERROR16 ((HFILE16)-1) #define DECLARE_HANDLE16(a) \ typedef HANDLE16 a##16; \ typedef a##16 *P##a##16; \ typedef a##16 *NP##a##16; \ typedef a##16 *LP##a##16 DECLARE_HANDLE16(HACMDRIVERID); DECLARE_HANDLE16(HACMDRIVER); DECLARE_HANDLE16(HACMOBJ); DECLARE_HANDLE16(HACMSTREAM); DECLARE_HANDLE16(HMETAFILEPICT); DECLARE_HANDLE16(HACCEL); DECLARE_HANDLE16(HBITMAP); DECLARE_HANDLE16(HBRUSH); DECLARE_HANDLE16(HCOLORSPACE); DECLARE_HANDLE16(HCURSOR); DECLARE_HANDLE16(HDC); DECLARE_HANDLE16(HDROP); DECLARE_HANDLE16(HDRVR); DECLARE_HANDLE16(HDWP); DECLARE_HANDLE16(HENHMETAFILE); DECLARE_HANDLE16(HFILE); DECLARE_HANDLE16(HFONT); DECLARE_HANDLE16(HICON); DECLARE_HANDLE16(HINSTANCE); DECLARE_HANDLE16(HKEY); DECLARE_HANDLE16(HMENU); DECLARE_HANDLE16(HMETAFILE); DECLARE_HANDLE16(HMIDI); DECLARE_HANDLE16(HMIDIIN); DECLARE_HANDLE16(HMIDIOUT); DECLARE_HANDLE16(HMIDISTRM); DECLARE_HANDLE16(HMIXER); DECLARE_HANDLE16(HMIXEROBJ); DECLARE_HANDLE16(HMMIO); DECLARE_HANDLE16(HPALETTE); DECLARE_HANDLE16(HPEN); DECLARE_HANDLE16(HQUEUE); DECLARE_HANDLE16(HRGN); DECLARE_HANDLE16(HRSRC); DECLARE_HANDLE16(HTASK); DECLARE_HANDLE16(HWAVE); DECLARE_HANDLE16(HWAVEIN); DECLARE_HANDLE16(HWAVEOUT); DECLARE_HANDLE16(HWINSTA); DECLARE_HANDLE16(HDESK); DECLARE_HANDLE16(HWND); DECLARE_HANDLE16(HKL); DECLARE_HANDLE16(HIC); DECLARE_HANDLE16(HRASCONN); #undef DECLARE_HANDLE16 typedef HINSTANCE16 HMODULE16; typedef HANDLE16 HGDIOBJ16; typedef HANDLE16 HGLOBAL16; typedef HANDLE16 HLOCAL16; #include /* The SIZE structure */ typedef struct { INT16 cx; INT16 cy; } SIZE16, *PSIZE16, *LPSIZE16; /* The POINT structure */ typedef struct { INT16 x; INT16 y; } POINT16, *PPOINT16, *LPPOINT16; /* The RECT structure */ typedef struct { INT16 left; INT16 top; INT16 right; INT16 bottom; } RECT16, *LPRECT16; #include /* Callback function pointers types */ typedef LRESULT (CALLBACK *DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM); typedef BOOL16 (CALLBACK *DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM); typedef INT16 (CALLBACK *EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16); typedef BOOL16 (CALLBACK *GRAYSTRINGPROC16)(HDC16,LPARAM,INT16); typedef LRESULT (CALLBACK *HOOKPROC16)(INT16,WPARAM16,LPARAM); typedef BOOL16 (CALLBACK *PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16); typedef VOID (CALLBACK *TIMERPROC16)(HWND16,UINT16,UINT16,DWORD); typedef LRESULT (CALLBACK *WNDENUMPROC16)(HWND16,LPARAM); typedef LRESULT (CALLBACK *WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM); #ifdef WINE_STRICT_PROTOTYPES typedef LRESULT (CALLBACK *FARPROC16)(void); typedef INT16 (CALLBACK *PROC16)(void); #else typedef LRESULT (CALLBACK *FARPROC16)(); typedef INT16 (CALLBACK *PROC16)(); #endif #endif /* __WINE_WINDEF16_H */ ================================================ FILE: wine/wine/wine_common_ver.rc ================================================ /* * Copyright 2001 Dmitry Timoshkov * Copyright 2004 Ivan Leo Puoti * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "winresrc.h" /* Assign WINE_FILEVERSION and WINE_FILEVERSION_STR high enough number to make sure that programs, relying on the version numbers, will never complain. */ #ifndef WINE_FILEVERSION_MAJOR #define WINE_FILEVERSION_MAJOR 10 #endif #ifndef WINE_FILEVERSION_MINOR #define WINE_FILEVERSION_MINOR 0 #endif #ifndef WINE_FILEVERSION_BUILD #define WINE_FILEVERSION_BUILD 0 #endif #ifndef WINE_FILEVERSION_PLATFORMID #define WINE_FILEVERSION_PLATFORMID 0 #endif #ifndef WINE_FILEVERSION #define WINE_FILEVERSION WINE_FILEVERSION_MAJOR,WINE_FILEVERSION_MINOR,\ WINE_FILEVERSION_BUILD,WINE_FILEVERSION_PLATFORMID #endif #define WINE_VER_STRINGIZE2(x) #x #define WINE_VER_STRINGIZE(x) WINE_VER_STRINGIZE2(x) #define WINE_VER_HEXPREFIX2(x) 0x ## x #define WINE_VER_HEXPREFIX(x) WINE_VER_HEXPREFIX2(x) #ifndef WINE_FILEVERSION_STR #define WINE_FILEVERSION_STR WINE_VER_STRINGIZE(WINE_FILEVERSION_MAJOR.WINE_FILEVERSION_MINOR.WINE_FILEVERSION_BUILD.WINE_FILEVERSION_PLATFORMID) #endif #ifndef WINE_FILEDESCRIPTION_STR #define WINE_FILEDESCRIPTION_STR "Wine core dll" #endif #ifndef WINE_FILENAME #define WINE_FILENAME "" #endif #ifndef WINE_FILENAME_STR #define WINE_FILENAME_STR "" #endif #ifndef WINE_FILETYPE #define WINE_FILETYPE VFT_DLL #endif #ifndef WINE_FILESUBTYPE #define WINE_FILESUBTYPE VFT2_UNKNOWN #endif #ifndef WINE_LEGALCOPYRIGHT #define WINE_LEGALCOPYRIGHT "Copyright (c) 1993-2018 the Wine project authors (see the file AUTHORS for a complete list)" #endif #ifndef WINE_PRODUCTVERSION #define WINE_PRODUCTVERSION 1,0,0,0 #endif #ifndef WINE_PRODUCTVERSION_STR #define WINE_PRODUCTVERSION_STR "1.0" #endif #ifndef WINE_PRODUCTNAME_STR #define WINE_PRODUCTNAME_STR "Wine" #endif #ifndef WINE_EXTRAVALUES #define WINE_EXTRAVALUES #endif #ifndef WINE_CODEPAGE #ifdef _WIN32 #define WINE_CODEPAGE 04B0 /* CP1200 (Unicode) */ #else #define WINE_CODEPAGE 04E4 /* CP1252 for Win16 */ #endif #endif #ifndef WINE_CODEPAGE_STR #define WINE_CODEPAGE_STR WINE_VER_STRINGIZE(WINE_CODEPAGE) #endif #ifndef WINE_CODEPAGE_HEX #define WINE_CODEPAGE_HEX WINE_VER_HEXPREFIX(WINE_CODEPAGE) #endif VS_VERSION_INFO VERSIONINFO FILEVERSION WINE_FILEVERSION PRODUCTVERSION WINE_PRODUCTVERSION FILEFLAGSMASK 63 FILEFLAGS 0 FILEOS VOS_UNKNOWN FILETYPE WINE_FILETYPE FILESUBTYPE WINE_FILESUBTYPE { BLOCK "StringFileInfo" { /* LANG_ENGLISH/SUBLANG_DEFAULT, WINE_CODEPAGE */ BLOCK "0409" WINE_CODEPAGE_STR { VALUE "CompanyName", "Microsoft Corporation" /* GameGuard depends on this */ VALUE "FileDescription", WINE_FILEDESCRIPTION_STR VALUE "FileVersion", WINE_FILEVERSION_STR VALUE "InternalName", WINE_FILENAME VALUE "LegalCopyright", WINE_LEGALCOPYRIGHT VALUE "OriginalFilename", WINE_FILENAME_STR VALUE "ProductName", WINE_PRODUCTNAME_STR VALUE "ProductVersion", WINE_PRODUCTVERSION_STR WINE_EXTRAVALUES } } BLOCK "VarFileInfo" { /* LANG_ENGLISH/SUBLANG_DEFAULT, WINE_CODEPAGE */ VALUE "Translation", 0x0409, WINE_CODEPAGE_HEX } } ================================================ FILE: wine/wine/wingdi16.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_WINGDI16_H #define __WINE_WINE_WINGDI16_H #include #include #include #include #include #include typedef HANDLE16 HPQ16; typedef HANDLE16 HPJOB16; typedef struct { WORD wFirst; WORD wSecond; INT16 iKernAmount; } KERNINGPAIR16, *LPKERNINGPAIR16; typedef struct { INT16 bmType; INT16 bmWidth; INT16 bmHeight; INT16 bmWidthBytes; BYTE bmPlanes; BYTE bmBitsPixel; SEGPTR bmBits; } BITMAP16, *LPBITMAP16; typedef struct { UINT16 lbStyle; COLORREF lbColor; INT16 lbHatch; } LOGBRUSH16, *LPLOGBRUSH16; typedef struct { INT16 lfHeight; INT16 lfWidth; INT16 lfEscapement; INT16 lfOrientation; INT16 lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; CHAR lfFaceName[LF_FACESIZE]; } LOGFONT16, *LPLOGFONT16; typedef struct { LOGFONT16 elfLogFont; BYTE elfFullName[LF_FULLFACESIZE]; BYTE elfStyle[LF_FACESIZE]; } ENUMLOGFONT16, *LPENUMLOGFONT16; typedef struct { LOGFONT16 elfLogFont; BYTE elfFullName[LF_FULLFACESIZE]; BYTE elfStyle[LF_FACESIZE]; BYTE elfScript[LF_FACESIZE]; } ENUMLOGFONTEX16, *LPENUMLOGFONTEX16; typedef struct { INT16 txfHeight; INT16 txfWidth; INT16 txfEscapement; INT16 txfOrientation; INT16 txfWeight; CHAR txfItalic; CHAR txfUnderline; CHAR txfStrikeOut; CHAR txfOutPrecision; CHAR txfClipPrecision; INT16 txfAccelerator; INT16 txfOverhang; } TEXTXFORM16, *LPTEXTXFORM16; typedef struct { INT16 dfType; INT16 dfPoints; INT16 dfVertRes; INT16 dfHorizRes; INT16 dfAscent; INT16 dfInternalLeading; INT16 dfExternalLeading; CHAR dfItalic; CHAR dfUnderline; CHAR dfStrikeOut; INT16 dfWeight; BYTE dfCharSet; INT16 dfPixWidth; INT16 dfPixHeight; CHAR dfPitchAndFamily; INT16 dfAvgWidth; INT16 dfMaxWidth; CHAR dfFirstChar; CHAR dfLastChar; CHAR dfDefaultChar; CHAR dfBreakChar; INT16 dfWidthBytes; LONG dfDevice; LONG dfFace; LONG dfBitsPointer; LONG dfBitsOffset; CHAR dfReserved; /* Fields, introduced for Windows 3.x fonts */ LONG dfFlags; INT16 dfAspace; INT16 dfBspace; INT16 dfCspace; LONG dfColorPointer; LONG dfReserved1[4]; } FONTINFO16, *LPFONTINFO16; typedef struct { WORD dfVersion; DWORD dfSize; CHAR dfCopyright[60]; WORD dfType; WORD dfPoints; WORD dfVertRes; WORD dfHorizRes; WORD dfAscent; WORD dfInternalLeading; WORD dfExternalLeading; BYTE dfItalic; BYTE dfUnderline; BYTE dfStrikeOut; WORD dfWeight; BYTE dfCharSet; WORD dfPixWidth; WORD dfPixHeight; BYTE dfPitchAndFamily; WORD dfAvgWidth; WORD dfMaxWidth; BYTE dfFirstChar; BYTE dfLastChar; BYTE dfDefaultChar; BYTE dfBreakChar; WORD dfWidthBytes; DWORD dfDevice; DWORD dfFace; DWORD dfReserved; CHAR szDeviceName[60]; /* FIXME: length unknown */ CHAR szFaceName[60]; /* ditto */ } FONTDIR16, *LPFONTDIR16; typedef struct { INT16 tmHeight; INT16 tmAscent; INT16 tmDescent; INT16 tmInternalLeading; INT16 tmExternalLeading; INT16 tmAveCharWidth; INT16 tmMaxCharWidth; INT16 tmWeight; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmPitchAndFamily; BYTE tmCharSet; INT16 tmOverhang; INT16 tmDigitizedAspectX; INT16 tmDigitizedAspectY; } TEXTMETRIC16, *LPTEXTMETRIC16; typedef struct _OUTLINETEXTMETRIC16 { UINT16 otmSize; TEXTMETRIC16 otmTextMetrics; BYTE otmFiller; PANOSE otmPanoseNumber; UINT16 otmfsSelection; UINT16 otmfsType; INT16 otmsCharSlopeRise; INT16 otmsCharSlopeRun; INT16 otmItalicAngle; UINT16 otmEMSquare; INT16 otmAscent; INT16 otmDescent; UINT16 otmLineGap; UINT16 otmsCapEmHeight; UINT16 otmsXHeight; RECT16 otmrcFontBox; INT16 otmMacAscent; INT16 otmMacDescent; UINT16 otmMacLineGap; UINT16 otmusMinimumPPEM; POINT16 otmptSubscriptSize; POINT16 otmptSubscriptOffset; POINT16 otmptSuperscriptSize; POINT16 otmptSuperscriptOffset; UINT16 otmsStrikeoutSize; INT16 otmsStrikeoutPosition; INT16 otmsUnderscorePosition; /* sic */ INT16 otmsUnderscoreSize; /* sic */ /* near char pointer */ WORD otmpFamilyName; WORD otmpFaceName; WORD otmpStyleName; WORD otmpFullName; } OUTLINETEXTMETRIC16,*LPOUTLINETEXTMETRIC16; typedef struct { INT16 tmHeight; INT16 tmAscent; INT16 tmDescent; INT16 tmInternalLeading; INT16 tmExternalLeading; INT16 tmAveCharWidth; INT16 tmMaxCharWidth; INT16 tmWeight; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmPitchAndFamily; BYTE tmCharSet; INT16 tmOverhang; INT16 tmDigitizedAspectX; INT16 tmDigitizedAspectY; DWORD ntmFlags; UINT16 ntmSizeEM; UINT16 ntmCellHeight; UINT16 ntmAvgWidth; } NEWTEXTMETRIC16,*LPNEWTEXTMETRIC16; typedef struct { NEWTEXTMETRIC16 ntmTm; FONTSIGNATURE ntmFontSig; } NEWTEXTMETRICEX16,*LPNEWTEXTMETRICEX16; typedef INT16 (CALLBACK *FONTENUMPROC16)(SEGPTR,SEGPTR,UINT16,LPARAM); typedef VOID (CALLBACK *LINEDDAPROC16)(INT16,INT16,LPARAM); typedef INT16 (CALLBACK *GOBJENUMPROC16)(SEGPTR,LPARAM); typedef struct { UINT16 gmBlackBoxX; UINT16 gmBlackBoxY; POINT16 gmptGlyphOrigin; INT16 gmCellIncX; INT16 gmCellIncY; } GLYPHMETRICS16, *LPGLYPHMETRICS16; typedef struct { INT16 abcA; UINT16 abcB; INT16 abcC; } ABC16, *LPABC16; typedef struct { UINT16 lopnStyle; POINT16 lopnWidth; COLORREF lopnColor; } LOGPEN16, *LPLOGPEN16; typedef struct { HGDIOBJ16 objectHandle[1]; } HANDLETABLE16, *LPHANDLETABLE16; typedef struct { INT16 mm; INT16 xExt; INT16 yExt; HMETAFILE16 hMF; } METAFILEPICT16, *LPMETAFILEPICT16; typedef INT16 (CALLBACK *MFENUMPROC16)(HDC16,HANDLETABLE16*,METARECORD*, INT16,LPARAM); typedef struct { INT16 cbSize; SEGPTR lpszDocName; SEGPTR lpszOutput; SEGPTR lpszDatatype; DWORD fwType; } DOCINFO16, *LPDOCINFO16; typedef BOOL16 (CALLBACK *ABORTPROC16)(HDC16, INT16); #define INT_PD_DEFAULT_DEVMODE 1 #define INT_PD_DEFAULT_MODEL 2 /* Escape: CLIP_TO_PATH modes */ #define CLIP_SAVE 0 #define CLIP_RESTORE 1 #define CLIP_INCLUSIVE 2 #define CLIP_EXCLUSIVE 3 /* Escape: END_PATH info */ struct PATH_INFO { short RenderMode; BYTE FillMode; BYTE BkMode; LOGPEN16 Pen; LOGBRUSH16 Brush; DWORD BkColor; }; /* RenderMode */ #define RENDERMODE_NO_DISPLAY 0 #define RENDERMODE_OPEN 1 #define RENDERMODE_CLOSED 2 /* For DRAWPATTERNRECT Escape, 16bit mode */ typedef struct _DRAWPATRECT16 { POINT16 ptPosition; POINT16 ptSize; WORD wStyle; WORD wPattern; } DRAWPATRECT16, *PDRAWPATRECT16; #include INT16 WINAPI AbortDoc16(HDC16); BOOL16 WINAPI AbortPath16(HDC16); INT16 WINAPI AddFontResource16(LPCSTR); void WINAPI AnimatePalette16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*); BOOL16 WINAPI Arc16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16); BOOL16 WINAPI BeginPath16(HDC16); BOOL16 WINAPI BitBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,INT16,DWORD); BOOL16 WINAPI Chord16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16); BOOL16 WINAPI CloseFigure16(HDC16); INT16 WINAPI CloseJob16(HPJOB16); HMETAFILE16 WINAPI CloseMetaFile16(HDC16); INT16 WINAPI CombineRgn16(HRGN16,HRGN16,HRGN16,INT16); HMETAFILE16 WINAPI CopyMetaFile16(HMETAFILE16,LPCSTR); HBITMAP16 WINAPI CreateBitmap16(INT16,INT16,UINT16,UINT16,LPCVOID); HBITMAP16 WINAPI CreateBitmapIndirect16(const BITMAP16*); HBRUSH16 WINAPI CreateBrushIndirect16(const LOGBRUSH16*); HBITMAP16 WINAPI CreateCompatibleBitmap16(HDC16,INT16,INT16); HDC16 WINAPI CreateCompatibleDC16(HDC16); HDC16 WINAPI CreateDC16(LPCSTR,LPCSTR,LPCSTR,SEGPTR); HBITMAP16 WINAPI CreateDIBitmap16(HDC16,const BITMAPINFOHEADER*,DWORD, LPCVOID,const BITMAPINFO*,UINT16); HBRUSH16 WINAPI CreateDIBPatternBrush16(HGLOBAL16,UINT16); HBITMAP16 WINAPI CreateDIBSection16 (HDC16, const BITMAPINFO *, UINT16, SEGPTR *, HANDLE, DWORD offset); HBITMAP16 WINAPI CreateDiscardableBitmap16(HDC16,INT16,INT16); HRGN16 WINAPI CreateEllipticRgn16(INT16,INT16,INT16,INT16); HRGN16 WINAPI CreateEllipticRgnIndirect16(const RECT16 *); HFONT16 WINAPI CreateFont16(INT16,INT16,INT16,INT16,INT16,BYTE,BYTE,BYTE, BYTE,BYTE,BYTE,BYTE,BYTE,LPCSTR); HFONT16 WINAPI CreateFontIndirect16(const LOGFONT16*); HPALETTE16 WINAPI CreateHalftonePalette16(HDC16); HBRUSH16 WINAPI CreateHatchBrush16(INT16,COLORREF); HDC16 WINAPI CreateIC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*); HDC16 WINAPI CreateMetaFile16(LPCSTR); HPALETTE16 WINAPI CreatePalette16(const LOGPALETTE*); HBRUSH16 WINAPI CreatePatternBrush16(HBITMAP16); HPEN16 WINAPI CreatePen16(INT16,INT16,COLORREF); HPEN16 WINAPI CreatePenIndirect16(const LOGPEN16*); HRGN16 WINAPI CreatePolyPolygonRgn16(const POINT16*,const INT16*,INT16,INT16); HRGN16 WINAPI CreatePolygonRgn16(const POINT16*,INT16,INT16); HRGN16 WINAPI CreateRectRgn16(INT16,INT16,INT16,INT16); HRGN16 WINAPI CreateRectRgnIndirect16(const RECT16*); HRGN16 WINAPI CreateRoundRectRgn16(INT16,INT16,INT16,INT16,INT16,INT16); BOOL16 WINAPI CreateScalableFontResource16(UINT16,LPCSTR,LPCSTR,LPCSTR); HBRUSH16 WINAPI CreateSolidBrush16(COLORREF); VOID WINAPI Death16(HDC16); BOOL16 WINAPI DeleteDC16(HDC16); INT16 WINAPI DeleteJob16(HPJOB16,INT16); BOOL16 WINAPI DeleteMetaFile16(HMETAFILE16); BOOL16 WINAPI DeleteObject16(HGDIOBJ16); BOOL16 WINAPI DPtoLP16(HDC16,LPPOINT16,INT16); DWORD WINAPI DrvGetPrinterData16(LPSTR,LPSTR,LPDWORD,LPBYTE,int cbData,LPDWORD); DWORD WINAPI DrvSetPrinterData16(LPSTR,LPSTR,DWORD,LPBYTE,DWORD); BOOL16 WINAPI Ellipse16(HDC16,INT16,INT16,INT16,INT16); INT16 WINAPI EndDoc16(HDC16); INT16 WINAPI EndPage16(HDC16); BOOL16 WINAPI EndPath16(HDC16); INT16 WINAPI EndSpoolPage16(HPJOB16); INT16 WINAPI EnumFontFamilies16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM); INT16 WINAPI EnumFontFamiliesEx16(HDC16,LPLOGFONT16,FONTENUMPROC16,LPARAM,DWORD); INT16 WINAPI EnumFonts16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM); BOOL16 WINAPI EnumMetaFile16(HDC16,HMETAFILE16,MFENUMPROC16,LPARAM); INT16 WINAPI EnumObjects16(HDC16,INT16,GOBJENUMPROC16,LPARAM); BOOL16 WINAPI EqualRgn16(HRGN16,HRGN16); INT16 WINAPI Escape16(HDC16,INT16,INT16,SEGPTR,LPVOID); INT16 WINAPI ExcludeClipRect16(HDC16,INT16,INT16,INT16,INT16); INT16 WINAPI ExcludeVisRect16(HDC16,INT16,INT16,INT16,INT16); HPEN16 WINAPI ExtCreatePen16(DWORD,DWORD,const LOGBRUSH16*,DWORD,const DWORD*); BOOL16 WINAPI ExtFloodFill16(HDC16,INT16,INT16,COLORREF,UINT16); BOOL16 WINAPI ExtTextOut16(HDC16,INT16,INT16,UINT16,const RECT16*, LPCSTR,UINT16,const INT16*); BOOL16 WINAPI FastWindowFrame16(HDC16,const RECT16*,INT16,INT16,DWORD); BOOL16 WINAPI FillPath16(HDC16); BOOL16 WINAPI FillRgn16(HDC16,HRGN16,HBRUSH16); BOOL16 WINAPI FlattenPath16(HDC16); BOOL16 WINAPI FloodFill16(HDC16,INT16,INT16,COLORREF); BOOL16 WINAPI FrameRgn16(HDC16,HRGN16,HBRUSH16,INT16,INT16); UINT16 WINAPI GDIRealizePalette16(HDC16); DWORD WINAPI GdiSeeGdiDo16(WORD,WORD,WORD,WORD); HPALETTE16 WINAPI GDISelectPalette16(HDC16,HPALETTE16,WORD); INT16 WINAPI GetArcDirection16(HDC16); BOOL16 WINAPI GetAspectRatioFilterEx16(HDC16,LPSIZE16); LONG WINAPI GetBitmapBits16(HBITMAP16,LONG,LPVOID); DWORD WINAPI GetBitmapDimension16(HBITMAP16); BOOL16 WINAPI GetBitmapDimensionEx16(HBITMAP16,LPSIZE16); DWORD WINAPI GetBrushOrg16(HDC16); BOOL16 WINAPI GetBrushOrgEx16(HDC16,LPPOINT16); COLORREF WINAPI GetBkColor16(HDC16); INT16 WINAPI GetBkMode16(HDC16); UINT16 WINAPI GetBoundsRect16(HDC16,LPRECT16,UINT16); BOOL16 WINAPI GetCharABCWidths16(HDC16,UINT16,UINT16,LPABC16); BOOL16 WINAPI GetCharWidth16(HDC16,UINT16,UINT16,LPINT16); INT16 WINAPI GetClipBox16(HDC16,LPRECT16); HRGN16 WINAPI GetClipRgn16(HDC16); HFONT16 WINAPI GetCurLogFont16(HDC16); DWORD WINAPI GetCurrentPosition16(HDC16); BOOL16 WINAPI GetCurrentPositionEx16(HDC16,LPPOINT16); DWORD WINAPI GetDCHook16(HDC16,FARPROC16*); DWORD WINAPI GetDCOrg16(HDC16); HDC16 WINAPI GetDCState16(HDC16); INT16 WINAPI GetDeviceCaps16(HDC16,INT16); UINT16 WINAPI GetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*); INT16 WINAPI GetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPVOID,LPBITMAPINFO,UINT16); INT16 WINAPI GetEnvironment16(LPCSTR,LPDEVMODEA,UINT16); DWORD WINAPI GetFontData16(HDC16,DWORD,DWORD,LPVOID,DWORD); DWORD WINAPI GetFontLanguageInfo16(HDC16); DWORD WINAPI GetGlyphOutline16(HDC16,UINT16,UINT16,LPGLYPHMETRICS16,DWORD,LPVOID,const MAT2*); INT16 WINAPI GetKerningPairs16(HDC16,INT16,LPKERNINGPAIR16); INT16 WINAPI GetMapMode16(HDC16); HMETAFILE16 WINAPI GetMetaFile16(LPCSTR); HGLOBAL16 WINAPI GetMetaFileBits16(HMETAFILE16); DWORD WINAPI GetNearestColor16(HDC16,DWORD); UINT16 WINAPI GetNearestPaletteIndex16(HPALETTE16,COLORREF); INT16 WINAPI GetObject16(HANDLE16,INT16,LPVOID); UINT16 WINAPI GetOutlineTextMetrics16(HDC16,UINT16,LPOUTLINETEXTMETRIC16); UINT16 WINAPI GetPaletteEntries16(HPALETTE16,UINT16,UINT16,LPPALETTEENTRY); INT16 WINAPI GetPath16(HDC16,LPPOINT16,LPBYTE,INT16); COLORREF WINAPI GetPixel16(HDC16,INT16,INT16); INT16 WINAPI GetPolyFillMode16(HDC16); BOOL16 WINAPI GetRasterizerCaps16(LPRASTERIZER_STATUS,UINT16); DWORD WINAPI GetRegionData16(HRGN16,DWORD,LPRGNDATA); INT16 WINAPI GetRelAbs16(HDC16); INT16 WINAPI GetRgnBox16(HRGN16,LPRECT16); INT16 WINAPI GetROP216(HDC16); DWORD WINAPI GetSpoolJob16(int,LONG); HGDIOBJ16 WINAPI GetStockObject16(INT16); INT16 WINAPI GetStretchBltMode16(HDC16); UINT16 WINAPI GetSystemPaletteEntries16(HDC16,UINT16,UINT16,LPPALETTEENTRY); UINT16 WINAPI GetSystemPaletteUse16(HDC16); UINT16 WINAPI GetTextAlign16(HDC16); INT16 WINAPI GetTextCharacterExtra16(HDC16); UINT16 WINAPI GetTextCharset16(HDC16); COLORREF WINAPI GetTextColor16(HDC16); DWORD WINAPI GetTextExtent16(HDC16,LPCSTR,INT16); BOOL16 WINAPI GetTextExtentPoint16(HDC16,LPCSTR,INT16,LPSIZE16); INT16 WINAPI GetTextFace16(HDC16,INT16,LPSTR); BOOL16 WINAPI GetTextMetrics16(HDC16,LPTEXTMETRIC16); DWORD WINAPI GetViewportExt16(HDC16); BOOL16 WINAPI GetViewportExtEx16(HDC16,LPSIZE16); BOOL16 WINAPI GetViewportOrgEx16(HDC16,LPPOINT16); DWORD WINAPI GetViewportOrg16(HDC16); DWORD WINAPI GetWindowExt16(HDC16); DWORD WINAPI GetWindowOrg16(HDC16); BOOL16 WINAPI GetWindowExtEx16(HDC16,LPSIZE16); BOOL16 WINAPI GetWindowOrgEx16(HDC16,LPPOINT16); HRGN16 WINAPI InquireVisRgn16(HDC16); INT16 WINAPI IntersectClipRect16(HDC16,INT16,INT16,INT16,INT16); INT16 WINAPI IntersectVisRect16(HDC16,INT16,INT16,INT16,INT16); BOOL16 WINAPI InvertRgn16(HDC16,HRGN16); BOOL16 WINAPI IsDCCurrentPalette16(HDC16); BOOL16 WINAPI IsGDIObject16(HGDIOBJ16); BOOL16 WINAPI IsValidMetaFile16(HMETAFILE16); VOID WINAPI LineDDA16(INT16,INT16,INT16,INT16,LINEDDAPROC16,LPARAM); BOOL16 WINAPI LineTo16(HDC16,INT16,INT16); BOOL16 WINAPI LPtoDP16(HDC16,LPPOINT16,INT16); DWORD WINAPI MoveTo16(HDC16,INT16,INT16); BOOL16 WINAPI MoveToEx16(HDC16,INT16,INT16,LPPOINT16); INT16 WINAPI MulDiv16(INT16,INT16,INT16); INT16 WINAPI OffsetClipRgn16(HDC16,INT16,INT16); INT16 WINAPI OffsetRgn16(HRGN16,INT16,INT16); DWORD WINAPI OffsetViewportOrg16(HDC16,INT16,INT16); BOOL16 WINAPI OffsetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16); INT16 WINAPI OffsetVisRgn16(HDC16,INT16,INT16); DWORD WINAPI OffsetWindowOrg16(HDC16,INT16,INT16); BOOL16 WINAPI OffsetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16); HANDLE16 WINAPI OpenJob16(LPCSTR,LPCSTR,HDC16); BOOL16 WINAPI PaintRgn16(HDC16,HRGN16); BOOL16 WINAPI PatBlt16(HDC16,INT16,INT16,INT16,INT16,DWORD); HRGN16 WINAPI PathToRegion16(HDC16); BOOL16 WINAPI Pie16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16); BOOL16 WINAPI PlayMetaFile16(HDC16,HMETAFILE16); VOID WINAPI PlayMetaFileRecord16(HDC16,LPHANDLETABLE16,LPMETARECORD,UINT16); BOOL16 WINAPI PolyBezier16(HDC16,const POINT16*,INT16); BOOL16 WINAPI PolyBezierTo16(HDC16,const POINT16*,INT16); BOOL16 WINAPI PolyPolygon16(HDC16,const POINT16*,const INT16*,UINT16); BOOL16 WINAPI Polygon16(HDC16,const POINT16*,INT16); BOOL16 WINAPI Polyline16(HDC16,const POINT16*,INT16); BOOL16 WINAPI PtInRegion16(HRGN16,INT16,INT16); BOOL16 WINAPI PtVisible16(HDC16,INT16,INT16); BOOL16 WINAPI QueryAbort16(HDC16,INT16); UINT16 WINAPI RealizeDefaultPalette16(HDC16); BOOL16 WINAPI Rectangle16(HDC16,INT16,INT16,INT16,INT16); BOOL16 WINAPI RectInRegion16(HRGN16,const RECT16 *); BOOL16 WINAPI RectVisible16(HDC16,const RECT16*); BOOL16 WINAPI RemoveFontResource16(LPCSTR); HDC16 WINAPI ResetDC16(HDC16,const DEVMODEA *); BOOL16 WINAPI ResizePalette16(HPALETTE16,UINT16); BOOL16 WINAPI RestoreDC16(HDC16,INT16); INT16 WINAPI RestoreVisRgn16(HDC16); VOID WINAPI Resurrection16(HDC16,WORD,WORD,WORD,WORD,WORD,WORD); BOOL16 WINAPI RoundRect16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16); INT16 WINAPI SaveDC16(HDC16); HRGN16 WINAPI SaveVisRgn16(HDC16); DWORD WINAPI ScaleViewportExt16(HDC16,INT16,INT16,INT16,INT16); BOOL16 WINAPI ScaleViewportExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16); DWORD WINAPI ScaleWindowExt16(HDC16,INT16,INT16,INT16,INT16); BOOL16 WINAPI ScaleWindowExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16); BOOL16 WINAPI SelectClipPath16(HDC16,INT16); INT16 WINAPI SelectClipRgn16(HDC16,HRGN16); HGDIOBJ16 WINAPI SelectObject16(HDC16,HGDIOBJ16); INT16 WINAPI SelectVisRgn16(HDC16,HRGN16); INT16 WINAPI SetAbortProc16(HDC16,ABORTPROC16); INT16 WINAPI SetArcDirection16(HDC16,INT16); LONG WINAPI SetBitmapBits16(HBITMAP16,LONG,LPCVOID); DWORD WINAPI SetBitmapDimension16(HBITMAP16,INT16,INT16); BOOL16 WINAPI SetBitmapDimensionEx16(HBITMAP16,INT16,INT16,LPSIZE16); COLORREF WINAPI SetBkColor16(HDC16,COLORREF); INT16 WINAPI SetBkMode16(HDC16,INT16); UINT16 WINAPI SetBoundsRect16(HDC16,const RECT16*,UINT16); DWORD WINAPI SetBrushOrg16(HDC16,INT16,INT16); BOOL16 WINAPI SetDCHook16(HDC16,FARPROC16,DWORD); DWORD WINAPI SetDCOrg16(HDC16,INT16,INT16); VOID WINAPI SetDCState16(HDC16,HDC16); UINT16 WINAPI SetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*); INT16 WINAPI SetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16); INT16 WINAPI SetDIBitsToDevice16(HDC16,INT16,INT16,INT16,INT16,INT16, INT16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16); INT16 WINAPI SetEnvironment16(LPCSTR,LPDEVMODEA,UINT16); WORD WINAPI SetHookFlags16(HDC16,WORD); INT16 WINAPI SetMapMode16(HDC16,INT16); DWORD WINAPI SetMapperFlags16(HDC16,DWORD); HMETAFILE16 WINAPI SetMetaFileBits16(HGLOBAL16); UINT16 WINAPI SetPaletteEntries16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*); COLORREF WINAPI SetPixel16(HDC16,INT16,INT16,COLORREF); INT16 WINAPI SetPolyFillMode16(HDC16,INT16); VOID WINAPI SetRectRgn16(HRGN16,INT16,INT16,INT16,INT16); INT16 WINAPI SetRelAbs16(HDC16,INT16); INT16 WINAPI SetROP216(HDC16,INT16); INT16 WINAPI SetStretchBltMode16(HDC16,INT16); UINT16 WINAPI SetSystemPaletteUse16(HDC16,UINT16); UINT16 WINAPI SetTextAlign16(HDC16,UINT16); INT16 WINAPI SetTextCharacterExtra16(HDC16,INT16); COLORREF WINAPI SetTextColor16(HDC16,COLORREF); INT16 WINAPI SetTextJustification16(HDC16,INT16,INT16); DWORD WINAPI SetViewportExt16(HDC16,INT16,INT16); BOOL16 WINAPI SetViewportExtEx16(HDC16,INT16,INT16,LPSIZE16); DWORD WINAPI SetViewportOrg16(HDC16,INT16,INT16); BOOL16 WINAPI SetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16); DWORD WINAPI SetWindowExt16(HDC16,INT16,INT16); BOOL16 WINAPI SetWindowExtEx16(HDC16,INT16,INT16,LPSIZE16); DWORD WINAPI SetWindowOrg16(HDC16,INT16,INT16); BOOL16 WINAPI SetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16); INT16 WINAPI StartDoc16(HDC16,const DOCINFO16*); INT16 WINAPI StartPage16(HDC16); INT16 WINAPI StartSpoolPage16(HPJOB16); BOOL16 WINAPI StretchBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16, INT16,INT16,INT16,DWORD); INT16 WINAPI StretchDIBits16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16, INT16,INT16,const VOID*,const BITMAPINFO*,UINT16,DWORD); BOOL16 WINAPI StrokeAndFillPath16(HDC16); BOOL16 WINAPI StrokePath16(HDC16); BOOL16 WINAPI TextOut16(HDC16,INT16,INT16,LPCSTR,INT16); BOOL16 WINAPI UnrealizeObject16(HGDIOBJ16); INT16 WINAPI UpdateColors16(HDC16); BOOL16 WINAPI WidenPath16(HDC16); INT16 WINAPI WriteDialog16(HPJOB16,LPSTR,INT16); INT16 WINAPI WriteSpool16(HPJOB16,LPSTR,INT16); #endif /* __WINE_WINE_WINGDI16_H */ ================================================ FILE: wine/wine/winnet16.h ================================================ /* * Definitions for windows network service * * Copyright 1997 Andreas Mohr * Copyright 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINNET16_H #define __WINE_WINNET16_H #include #include #include /* * Remote printing */ typedef struct { WORD pqName; WORD pqComment; WORD pqStatus; WORD pqJobcount; WORD pqPrinters; } QUEUESTRUCT16, *LPQUEUESTRUCT16; #define WNPRQ_ACTIVE 0x0 #define WNPRQ_PAUSE 0x1 #define WNPRQ_ERROR 0x2 #define WNPRQ_PENDING 0x3 #define WNPRQ_PROBLEM 0x4 typedef struct { WORD pjId; WORD pjUsername; WORD pjParms; WORD pjPosition; WORD pjStatus; DWORD pjSubmitted; DWORD pjSize; WORD pjCopies; WORD pjComment; } JOBSTRUCT16, *LPJOBSTRUCT16; #include #define WNPRJ_QSTATUS 0x0007 #define WNPRJ_DEVSTATUS 0x0FF8 #define WNPRJ_QS_QUEUED 0x0000 #define WNPRJ_QS_PAUSED 0x0001 #define WNPRJ_QS_SPOOLING 0x0002 #define WNPRJ_QS_PRINTING 0x0003 #define WNPRJ_DS_COMPLETE 0x0008 #define WNPRJ_DS_INTERV 0x0010 #define WNPRJ_DS_ERROR 0x0020 #define WNPRJ_DS_DESTOFFLINE 0x0040 #define WNPRJ_DS_DESTPAUSED 0x0080 #define WNPRJ_DS_NOTIFY 0x0100 #define WNPRJ_DS_DESTNOPAPER 0x0200 #define WNPRJ_DS_DESTFORMCHG 0x0400 #define WNPRJ_DS_DESTCRTCHG 0x0800 #define WNPRJ_DS_DESTPENCHG 0x1000 #define SP_QUEUECHANGED 0x0500 #define WNJ_NULL_JOBID 0 WORD WINAPI WNetOpenJob16(LPSTR,LPSTR,WORD,LPINT16); WORD WINAPI WNetCloseJob16(WORD,LPINT16,LPSTR); WORD WINAPI WNetWriteJob16(HANDLE16,LPSTR,LPINT16); WORD WINAPI WNetAbortJob16(LPSTR,WORD); WORD WINAPI WNetHoldJob16(LPSTR,WORD); WORD WINAPI WNetReleaseJob16(LPSTR,WORD); WORD WINAPI WNetCancelJob16(LPSTR,WORD); WORD WINAPI WNetSetJobCopies16(LPSTR,WORD,WORD); WORD WINAPI WNetWatchQueue16(HWND16,LPSTR,LPSTR,WORD); WORD WINAPI WNetUnwatchQueue16(LPSTR); WORD WINAPI WNetLockQueueData16(LPSTR,LPSTR,LPQUEUESTRUCT16 *); WORD WINAPI WNetUnlockQueueData16(LPSTR); /* * Connections */ WORD WINAPI WNetAddConnection16(LPCSTR,LPCSTR,LPCSTR); WORD WINAPI WNetCancelConnection16(LPSTR,BOOL16); WORD WINAPI WNetGetConnection16(LPSTR,LPSTR,UINT16 *); WORD WINAPI WNetRestoreConnection16(HWND16,LPSTR); /* * Capabilities */ WORD WINAPI WNetGetCaps16(WORD); #define WNNC16_SPEC_VERSION 0x01 #define WNNC16_NET_TYPE 0x02 #define WNNC16_DRIVER_VERSION 0x03 #define WNNC16_USER 0x04 #define WNNC16_CONNECTION 0x06 #define WNNC16_PRINTING 0x07 #define WNNC16_DIALOG 0x08 #define WNNC16_ADMIN 0x09 #define WNNC16_ERROR 0x0a #define WNNC16_PRINTMGREXT 0x0b #define WNNC16_NET_NONE 0x0 #define WNNC16_NET_MSNet 0x1 #define WNNC16_NET_LanMan 0x2 #define WNNC16_NET_NetWare 0x3 #define WNNC16_NET_Vines 0x4 #define WNNC16_NET_10NET 0x5 #define WNNC16_NET_Locus 0x6 #define WNNC16_NET_SUN_PC_NFS 0x7 #define WNNC16_NET_LANstep 0x8 #define WNNC16_NET_9TILES 0x9 #define WNNC16_NET_LANtastic 0xa #define WNNC16_NET_AS400 0xb #define WNNC16_NET_FTP_NFS 0xc #define WNNC16_NET_PATHWORKS 0xd #define WNNC16_NET_LifeNet 0xe #define WNNC16_NET_POWERLan 0xf #define WNNC16_NET_MultiNet 0x8000 #define WNNC16_SUBNET_NONE 0x00 #define WNNC16_SUBNET_MSNet 0x01 #define WNNC16_SUBNET_LanMan 0x02 #define WNNC16_SUBNET_WinWorkgroups 0x04 #define WNNC16_SUBNET_NetWare 0x08 #define WNNC16_SUBNET_Vines 0x10 #define WNNC16_SUBNET_Other 0x80 #define WNNC16_CON_AddConnection 0x0001 #define WNNC16_CON_CancelConnection 0x0002 #define WNNC16_CON_GetConnections 0x0004 #define WNNC16_CON_AutoConnect 0x0008 #define WNNC16_CON_BrowseDialog 0x0010 #define WNNC16_CON_RestoreConnection 0x0020 #define WNNC16_PRT_OpenJob 0x0002 #define WNNC16_PRT_CloseJob 0x0004 #define WNNC16_PRT_HoldJob 0x0010 #define WNNC16_PRT_ReleaseJob 0x0020 #define WNNC16_PRT_CancelJob 0x0040 #define WNNC16_PRT_SetJobCopies 0x0080 #define WNNC16_PRT_WatchQueue 0x0100 #define WNNC16_PRT_UnwatchQueue 0x0200 #define WNNC16_PRT_LockQueueData 0x0400 #define WNNC16_PRT_UnlockQueueData 0x0800 #define WNNC16_PRT_ChangeMsg 0x1000 #define WNNC16_PRT_AbortJob 0x2000 #define WNNC16_PRT_NoArbitraryLock 0x4000 #define WNNC16_PRT_WriteJob 0x8000 #define WNNC16_DLG_DeviceMode 0x0001 #define WNNC16_DLG_BrowseDialog 0x0002 #define WNNC16_DLG_ConnectDialog 0x0004 #define WNNC16_DLG_DisconnectDialog 0x0008 #define WNNC16_DLG_ViewQueueDialog 0x0010 #define WNNC16_DLG_PropertyDialog 0x0020 #define WNNC16_DLG_ConnectionDialog 0x0040 #define WNNC16_DLG_PrinterConnectDialog 0x0080 #define WNNC16_DLG_SharesDialog 0x0100 #define WNNC16_DLG_ShareAsDialog 0x0200 #define WNNC16_ADM_GetDirectoryType 0x0001 #define WNNC16_ADM_DirectoryNotify 0x0002 #define WNNC16_ADM_LongNames 0x0004 #define WNNC16_ADM_SetDefaultDrive 0x0008 #define WNNC16_ERR_GetError 0x0001 #define WNNC16_ERR_GetErrorText 0x0002 /* * Get User */ WORD WINAPI WNetGetUser16(LPSTR,LPINT16); /* * Browsing */ #define WNBD_CONN_UNKNOWN 0x0 #define WNBD_CONN_DISKTREE 0x1 #define WNBD_CONN_PRINTQ 0x3 #define WNBD_MAX_LENGTH 0x80 #define WNTYPE_DRIVE 1 #define WNTYPE_FILE 2 #define WNTYPE_PRINTER 3 #define WNTYPE_COMM 4 #define WNPS_FILE 0 #define WNPS_DIR 1 #define WNPS_MULT 2 WORD WINAPI WNetDeviceMode16(HWND16); WORD WINAPI WNetBrowseDialog16(HWND16,WORD,LPSTR); WORD WINAPI WNetConnectDialog16(HWND16,WORD); WORD WINAPI WNetDisconnectDialog16(HWND16,WORD); WORD WINAPI WNetConnectionDialog16(HWND16,WORD); WORD WINAPI WNetViewQueueDialog16(HWND16,LPSTR); WORD WINAPI WNetPropertyDialog16(HWND16,WORD,WORD,LPSTR,WORD); WORD WINAPI WNetGetPropertyText16(WORD,WORD,LPSTR,LPSTR,WORD,WORD); /* * Admin */ #define WNDT_NORMAL 0 #define WNDT_NETWORK 1 #define WNDN_MKDIR 1 #define WNDN_RMDIR 2 #define WNDN_MVDIR 3 WORD WINAPI WNetGetDirectoryType16(LPSTR,LPINT16); WORD WINAPI WNetDirectoryNotify16(HWND16,LPSTR,WORD); /* * Status codes */ WORD WINAPI WNetGetError16(LPINT16); WORD WINAPI WNetGetErrorText16(WORD,LPSTR,LPINT16); WORD WINAPI WNetErrorText16(WORD,LPSTR,WORD); #define WN16_SUCCESS 0x0000 #define WN16_NOT_SUPPORTED 0x0001 #define WN16_NET_ERROR 0x0002 #define WN16_MORE_DATA 0x0003 #define WN16_BAD_POINTER 0x0004 #define WN16_BAD_VALUE 0x0005 #define WN16_BAD_PASSWORD 0x0006 #define WN16_ACCESS_DENIED 0x0007 #define WN16_FUNCTION_BUSY 0x0008 #define WN16_WINDOWS_ERROR 0x0009 #define WN16_BAD_USER 0x000A #define WN16_OUT_OF_MEMORY 0x000B #define WN16_CANCEL 0x000C #define WN16_CONTINUE 0x000D #define WN16_NOT_CONNECTED 0x0030 #define WN16_OPEN_FILES 0x0031 #define WN16_BAD_NETNAME 0x0032 #define WN16_BAD_LOCALNAME 0x0033 #define WN16_ALREADY_CONNECTED 0x0034 #define WN16_DEVICE_ERROR 0x0035 #define WN16_CONNECTION_CLOSED 0x0036 #define WN16_BAD_JOBID 0x0040 #define WN16_JOB_NOT_FOUND 0x0041 #define WN16_JOB_NOT_HELD 0x0042 #define WN16_BAD_QUEUE 0x0043 #define WN16_BAD_FILE_HANDLE 0x0044 #define WN16_CANT_SET_COPIES 0x0045 #define WN16_ALREADY_LOCKED 0x0046 #define WN16_NO_ERROR 0x0050 #endif /* __WINE_WINNET16_H */ ================================================ FILE: wine/wine/winuser16.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_WINUSER16_H #define __WINE_WINE_WINUSER16_H #include /* wingdi.h needed for COLORREF */ #include /* winuser.h needed for MSGBOXCALLBACK */ #include typedef struct tagCOMSTAT16 { BYTE status; UINT16 cbInQue; UINT16 cbOutQue; } COMSTAT16,*LPCOMSTAT16; typedef struct tagDCB16 { BYTE Id; UINT16 BaudRate; BYTE ByteSize; BYTE Parity; BYTE StopBits; UINT16 RlsTimeout; UINT16 CtsTimeout; UINT16 DsrTimeout; unsigned fBinary :1; unsigned fRtsDisable :1; unsigned fParity :1; unsigned fOutxCtsFlow :1; unsigned fOutxDsrFlow :1; unsigned fDummy :2; unsigned fDtrDisable :1; unsigned fOutX :1; unsigned fInX :1; unsigned fPeChar :1; unsigned fNull :1; unsigned fChEvt :1; unsigned fDtrflow :1; unsigned fRtsflow :1; unsigned fDummy2 :1; CHAR XonChar; CHAR XoffChar; UINT16 XonLim; UINT16 XoffLim; CHAR PeChar; CHAR EofChar; CHAR EvtChar; UINT16 TxDelay; } DCB16, *LPDCB16; typedef struct { LPARAM lParam; WPARAM16 wParam; UINT16 message; HWND16 hwnd; } CWPSTRUCT16, *LPCWPSTRUCT16; typedef struct { LRESULT lResult; LPARAM lParam; WPARAM16 wParam; DWORD message; HWND16 hwnd; } CWPRETSTRUCT16, *LPCWPRETSTRUCT16; /* SetWindowPlacement() struct */ typedef struct { UINT16 length; UINT16 flags; UINT16 showCmd; POINT16 ptMinPosition; POINT16 ptMaxPosition; RECT16 rcNormalPosition; } WINDOWPLACEMENT16, *LPWINDOWPLACEMENT16; /****** Window classes ******/ typedef struct { UINT16 style; WNDPROC16 lpfnWndProc; INT16 cbClsExtra; INT16 cbWndExtra; HANDLE16 hInstance; HICON16 hIcon; HCURSOR16 hCursor; HBRUSH16 hbrBackground; SEGPTR lpszMenuName; SEGPTR lpszClassName; } WNDCLASS16, *LPWNDCLASS16; typedef struct { UINT cbSize; UINT style; WNDPROC16 lpfnWndProc; INT16 cbClsExtra; INT16 cbWndExtra; HANDLE16 hInstance; HICON16 hIcon; HCURSOR16 hCursor; HBRUSH16 hbrBackground; SEGPTR lpszMenuName; SEGPTR lpszClassName; HICON16 hIconSm; } WNDCLASSEX16, *LPWNDCLASSEX16; typedef struct { HWND16 hwnd; UINT16 message; WPARAM16 wParam; LPARAM lParam; DWORD time; POINT16 pt; } MSG16, *LPMSG16; typedef struct { MSG16 msg; WORD wParamHigh; } MSG32_16, *LPMSG16_32; /* Cursors / Icons */ typedef struct tagCURSORICONINFO { POINT16 ptHotSpot; WORD nWidth; WORD nHeight; WORD nWidthBytes; BYTE bPlanes; BYTE bBitsPerPixel; } CURSORICONINFO; typedef struct { BOOL16 fIcon; WORD xHotspot; WORD yHotspot; HBITMAP16 hbmMask; HBITMAP16 hbmColor; } ICONINFO16,*LPICONINFO16; typedef struct { BYTE fVirt; WORD key; WORD cmd; } ACCEL16, *LPACCEL16; /* FIXME: not sure this one is correct */ typedef struct { UINT16 cbSize; UINT16 fMask; UINT16 fType; UINT16 fState; UINT16 wID; HMENU16 hSubMenu; HBITMAP16 hbmpChecked; HBITMAP16 hbmpUnchecked; DWORD dwItemData; SEGPTR dwTypeData; UINT16 cch; } MENUITEMINFO16, *LPMENUITEMINFO16; /* DrawState defines ... */ typedef BOOL16 (CALLBACK *DRAWSTATEPROC16)(HDC16,LPARAM,WPARAM16,INT16,INT16); /* Listbox messages */ #define LB_ADDSTRING16 (WM_USER+1) #define LB_INSERTSTRING16 (WM_USER+2) #define LB_DELETESTRING16 (WM_USER+3) #define LB_SELITEMRANGEEX16 (WM_USER+4) #define LB_RESETCONTENT16 (WM_USER+5) #define LB_SETSEL16 (WM_USER+6) #define LB_SETCURSEL16 (WM_USER+7) #define LB_GETSEL16 (WM_USER+8) #define LB_GETCURSEL16 (WM_USER+9) #define LB_GETTEXT16 (WM_USER+10) #define LB_GETTEXTLEN16 (WM_USER+11) #define LB_GETCOUNT16 (WM_USER+12) #define LB_SELECTSTRING16 (WM_USER+13) #define LB_DIR16 (WM_USER+14) #define LB_GETTOPINDEX16 (WM_USER+15) #define LB_FINDSTRING16 (WM_USER+16) #define LB_GETSELCOUNT16 (WM_USER+17) #define LB_GETSELITEMS16 (WM_USER+18) #define LB_SETTABSTOPS16 (WM_USER+19) #define LB_GETHORIZONTALEXTENT16 (WM_USER+20) #define LB_SETHORIZONTALEXTENT16 (WM_USER+21) #define LB_SETCOLUMNWIDTH16 (WM_USER+22) #define LB_ADDFILE16 (WM_USER+23) #define LB_SETTOPINDEX16 (WM_USER+24) #define LB_GETITEMRECT16 (WM_USER+25) #define LB_GETITEMDATA16 (WM_USER+26) #define LB_SETITEMDATA16 (WM_USER+27) #define LB_SELITEMRANGE16 (WM_USER+28) #define LB_SETANCHORINDEX16 (WM_USER+29) #define LB_GETANCHORINDEX16 (WM_USER+30) #define LB_SETCARETINDEX16 (WM_USER+31) #define LB_GETCARETINDEX16 (WM_USER+32) #define LB_SETITEMHEIGHT16 (WM_USER+33) #define LB_GETITEMHEIGHT16 (WM_USER+34) #define LB_FINDSTRINGEXACT16 (WM_USER+35) #define LB_CARETON16 (WM_USER+36) #define LB_CARETOFF16 (WM_USER+37) /* Combo box messages */ #define CB_GETEDITSEL16 (WM_USER+0) #define CB_LIMITTEXT16 (WM_USER+1) #define CB_SETEDITSEL16 (WM_USER+2) #define CB_ADDSTRING16 (WM_USER+3) #define CB_DELETESTRING16 (WM_USER+4) #define CB_DIR16 (WM_USER+5) #define CB_GETCOUNT16 (WM_USER+6) #define CB_GETCURSEL16 (WM_USER+7) #define CB_GETLBTEXT16 (WM_USER+8) #define CB_GETLBTEXTLEN16 (WM_USER+9) #define CB_INSERTSTRING16 (WM_USER+10) #define CB_RESETCONTENT16 (WM_USER+11) #define CB_FINDSTRING16 (WM_USER+12) #define CB_SELECTSTRING16 (WM_USER+13) #define CB_SETCURSEL16 (WM_USER+14) #define CB_SHOWDROPDOWN16 (WM_USER+15) #define CB_GETITEMDATA16 (WM_USER+16) #define CB_SETITEMDATA16 (WM_USER+17) #define CB_GETDROPPEDCONTROLRECT16 (WM_USER+18) #define CB_SETITEMHEIGHT16 (WM_USER+19) #define CB_GETITEMHEIGHT16 (WM_USER+20) #define CB_SETEXTENDEDUI16 (WM_USER+21) #define CB_GETEXTENDEDUI16 (WM_USER+22) #define CB_GETDROPPEDSTATE16 (WM_USER+23) #define CB_FINDSTRINGEXACT16 (WM_USER+24) typedef struct /* not sure if the 16bit version is correct */ { UINT cbSize; HWND16 hwndOwner; HINSTANCE16 hInstance; SEGPTR lpszText; SEGPTR lpszCaption; DWORD dwStyle; SEGPTR lpszIcon; DWORD dwContextHelpId; MSGBOXCALLBACK lpfnMsgBoxCallback; DWORD dwLanguageId; } MSGBOXPARAMS16,*LPMSGBOXPARAMS16; /* Windows */ typedef struct { SEGPTR lpCreateParams; HINSTANCE16 hInstance; HMENU16 hMenu; HWND16 hwndParent; INT16 cy; INT16 cx; INT16 y; INT16 x; LONG style; SEGPTR lpszName; SEGPTR lpszClass; DWORD dwExStyle; } CREATESTRUCT16, *LPCREATESTRUCT16; typedef struct { HDC16 hdc; BOOL16 fErase; RECT16 rcPaint; BOOL16 fRestore; BOOL16 fIncUpdate; BYTE rgbReserved[16]; } PAINTSTRUCT16, *LPPAINTSTRUCT16; typedef struct { HMENU16 hWindowMenu; UINT16 idFirstChild; } CLIENTCREATESTRUCT16, *LPCLIENTCREATESTRUCT16; typedef struct { SEGPTR szClass; SEGPTR szTitle; HINSTANCE16 hOwner; INT16 x; INT16 y; INT16 cx; INT16 cy; DWORD style; LPARAM lParam; } MDICREATESTRUCT16, *LPMDICREATESTRUCT16; /* WM_GETMINMAXINFO struct */ typedef struct { POINT16 ptReserved; POINT16 ptMaxSize; POINT16 ptMaxPosition; POINT16 ptMinTrackSize; POINT16 ptMaxTrackSize; } MINMAXINFO16; /* WM_WINDOWPOSCHANGING/CHANGED struct */ typedef struct tagWINDOWPOS16 { HWND16 hwnd; HWND16 hwndInsertAfter; INT16 x; INT16 y; INT16 cx; INT16 cy; UINT16 flags; } WINDOWPOS16, *LPWINDOWPOS16; /* WM_NCCALCSIZE parameter structure */ typedef struct { RECT16 rgrc[3]; SEGPTR lppos; } NCCALCSIZE_PARAMS16, *LPNCCALCSIZE_PARAMS16; typedef struct { UINT16 cbSize; INT16 iBorderWidth; INT16 iScrollWidth; INT16 iScrollHeight; INT16 iCaptionWidth; INT16 iCaptionHeight; LOGFONT16 lfCaptionFont; INT16 iSmCaptionWidth; INT16 iSmCaptionHeight; LOGFONT16 lfSmCaptionFont; INT16 iMenuWidth; INT16 iMenuHeight; LOGFONT16 lfMenuFont; LOGFONT16 lfStatusFont; LOGFONT16 lfMessageFont; } NONCLIENTMETRICS16,*LPNONCLIENTMETRICS16; /* Journalling hook structure */ typedef struct { UINT16 message; UINT16 paramL; UINT16 paramH; DWORD time; } EVENTMSG16, *LPEVENTMSG16; /* Mouse hook structure */ typedef struct { POINT16 pt; HWND16 hwnd; UINT16 wHitTestCode; DWORD dwExtraInfo; } MOUSEHOOKSTRUCT16, *LPMOUSEHOOKSTRUCT16; /* Hardware hook structure */ typedef struct { HWND16 hWnd; UINT16 wMessage; WPARAM16 wParam; LPARAM lParam; } HARDWAREHOOKSTRUCT16, *LPHARDWAREHOOKSTRUCT16; /* Scrollbar messages */ #define SBM_SETPOS16 (WM_USER+0) #define SBM_GETPOS16 (WM_USER+1) #define SBM_SETRANGE16 (WM_USER+2) #define SBM_GETRANGE16 (WM_USER+3) #define SBM_ENABLE_ARROWS16 (WM_USER+4) /* CBT hook structures */ typedef struct { CREATESTRUCT16 *lpcs; HWND16 hwndInsertAfter; } CBT_CREATEWND16, *LPCBT_CREATEWND16; typedef struct { BOOL16 fMouse; HWND16 hWndActive; } CBTACTIVATESTRUCT16, *LPCBTACTIVATESTRUCT16; /* Debug hook structure */ typedef struct { HMODULE16 hModuleHook; LPARAM reserved; LPARAM lParam; WPARAM16 wParam; INT16 code; } DEBUGHOOKINFO16, *LPDEBUGHOOKINFO16; #define GETMAXLPT 8 #define GETMAXCOM 9 #define GETBASEIRQ 10 /* GetFreeSystemResources() parameters */ #define GFSR_SYSTEMRESOURCES 0x0000 #define GFSR_GDIRESOURCES 0x0001 #define GFSR_USERRESOURCES 0x0002 /* CreateWindow() coordinates */ #define CW_USEDEFAULT16 ((INT16)0x8000) /* Win16 button control messages */ #define BM_GETCHECK16 (WM_USER+0) #define BM_SETCHECK16 (WM_USER+1) #define BM_GETSTATE16 (WM_USER+2) #define BM_SETSTATE16 (WM_USER+3) #define BM_SETSTYLE16 (WM_USER+4) /* Static Control Messages */ #define STM_SETICON16 (WM_USER+0) #define STM_GETICON16 (WM_USER+1) /* Edit control messages */ #define EM_GETSEL16 (WM_USER+0) #define EM_SETSEL16 (WM_USER+1) #define EM_GETRECT16 (WM_USER+2) #define EM_SETRECT16 (WM_USER+3) #define EM_SETRECTNP16 (WM_USER+4) #define EM_SCROLL16 (WM_USER+5) #define EM_LINESCROLL16 (WM_USER+6) #define EM_SCROLLCARET16 (WM_USER+7) #define EM_GETMODIFY16 (WM_USER+8) #define EM_SETMODIFY16 (WM_USER+9) #define EM_GETLINECOUNT16 (WM_USER+10) #define EM_LINEINDEX16 (WM_USER+11) #define EM_SETHANDLE16 (WM_USER+12) #define EM_GETHANDLE16 (WM_USER+13) #define EM_GETTHUMB16 (WM_USER+14) #define EM_LINELENGTH16 (WM_USER+17) #define EM_REPLACESEL16 (WM_USER+18) #define EM_GETLINE16 (WM_USER+20) #define EM_LIMITTEXT16 (WM_USER+21) #define EM_CANUNDO16 (WM_USER+22) #define EM_UNDO16 (WM_USER+23) #define EM_FMTLINES16 (WM_USER+24) #define EM_LINEFROMCHAR16 (WM_USER+25) #define EM_SETTABSTOPS16 (WM_USER+27) #define EM_SETPASSWORDCHAR16 (WM_USER+28) #define EM_EMPTYUNDOBUFFER16 (WM_USER+29) #define EM_GETFIRSTVISIBLELINE16 (WM_USER+30) #define EM_SETREADONLY16 (WM_USER+31) #define EM_SETWORDBREAKPROC16 (WM_USER+32) #define EM_GETWORDBREAKPROC16 (WM_USER+33) #define EM_GETPASSWORDCHAR16 (WM_USER+34) typedef struct { UINT16 CtlType; UINT16 CtlID; UINT16 itemID; UINT16 itemAction; UINT16 itemState; HWND16 hwndItem; HDC16 hDC; RECT16 rcItem; DWORD itemData; } DRAWITEMSTRUCT16, *PDRAWITEMSTRUCT16, *LPDRAWITEMSTRUCT16; typedef struct { UINT16 CtlType; UINT16 CtlID; UINT16 itemID; UINT16 itemWidth; UINT16 itemHeight; DWORD itemData; } MEASUREITEMSTRUCT16, *PMEASUREITEMSTRUCT16, *LPMEASUREITEMSTRUCT16; typedef struct { UINT16 CtlType; UINT16 CtlID; UINT16 itemID; HWND16 hwndItem; DWORD itemData; } DELETEITEMSTRUCT16, *LPDELETEITEMSTRUCT16; typedef struct { UINT16 CtlType; UINT16 CtlID; HWND16 hwndItem; UINT16 itemID1; DWORD itemData1; UINT16 itemID2; DWORD itemData2; } COMPAREITEMSTRUCT16, *LPCOMPAREITEMSTRUCT16; /* DragObject stuff */ typedef struct { HWND16 hWnd; HWND16 hScope; WORD wFlags; HANDLE16 hList; HANDLE16 hOfStruct; POINT16 pt; LONG l; } DRAGINFO16, *LPDRAGINFO16; /* undocumented */ typedef struct tagCOPYDATASTRUCT16 { DWORD dwData; DWORD cbData; SEGPTR lpData; } COPYDATASTRUCT16, *PCOPYDATASTRUCT16; #define DRAGOBJ_PROGRAM 0x0001 #define DRAGOBJ_DATA 0x0002 #define DRAGOBJ_DIRECTORY 0x0004 #define DRAGOBJ_MULTIPLE 0x0008 #define DRAGOBJ_EXTERNAL 0x8000 #define DRAG_PRINT 0x544E5250 #define DRAG_FILE 0x454C4946 /* internal structure */ typedef struct { HQUEUE16 next; /* 00h */ HTASK16 hTask; /* 02h */ WORD cbMessage; /* 04h */ WORD cMessage; /* 06h */ WORD read; /* 08h */ WORD write; /* 0Ah */ WORD cbSize; /* 0Ch */ DWORD time; /* 0Eh */ POINT16 pos; /* 12h */ WORD unknown_16_1; /* 16h */ DWORD extraInfo; /* 18h */ WORD unknown_1C; /* 1Ch */ DWORD lParam; /* 1Eh */ WPARAM16 wParam; /* 22h */ UINT16 message; /* 24h */ HWND16 hWnd; /* 26h */ DWORD lResult; /* 28h */ WORD quitFlag; /* 2Ch */ WORD exitCode; /* 2Eh */ WORD flags; /* 30h */ DWORD unknown_32; /* 32h */ WORD expVer; /* 36h */ HQUEUE16 sendingQueue; /* 38h */ WORD sendMessageInternal[2]; /* 3Ah */ WORD cPaint; /* 3Eh */ WORD cTimer; /* 40h */ WORD changeBits; /* 42h */ WORD wakeBits; /* 44h */ WORD wakeMask; /* 46h */ WORD sendMessagesInternal[3]; /* 48h */ WORD hookCurrent; /* 4Eh USER heap */ WORD hooks[12]; /* 50h USER heap */ WORD unknown[3]; BYTE messages[1]; } QUEUE16; /* LocalSize_DS(LOWORD(hhook), hinst_user) -> 16 */ /* 12 <= size <= 16 */ typedef struct { WORD next; /* 00 USER heap */ SEGPTR proc; /* 02 */ INT16 id; /* 06 */ HQUEUE16 hQueue; /* 08 */ HMODULE16 hModule; /* 0A */ WORD unknown1; /* 0C */ WORD unknown2; /* 0E */ } HOOK16; #include /* WM_COMMNOTIFY flags */ #define CN_RECEIVE 0x0001 #define CN_TRANSMIT 0x0002 #define CN_EVENT 0x0004 BOOL16 WINAPI CheckMenuRadioItem16(HMENU16,UINT16,UINT16,UINT16,UINT16); HICON16 WINAPI CopyImage16(HANDLE16,UINT16,INT16,INT16,UINT16); HICON16 WINAPI CreateIconFromResource16(LPBYTE,UINT16,BOOL16,DWORD); BOOL16 WINAPI EnumChildWindows16(HWND16,WNDENUMPROC16,LPARAM); INT16 WINAPI EnumProps16(HWND16,PROPENUMPROC16); BOOL16 WINAPI EnumWindows16(WNDENUMPROC16,LPARAM); DWORD WINAPI GetAppCompatFlags16(HTASK16); INT16 WINAPI GetKBCodePage16(void); INT16 WINAPI GetKeyboardType16(INT16); INT16 WINAPI GetKeyNameText16(LONG,LPSTR,INT16); INT16 WINAPI GetWindowRgn16(HWND16,HRGN16); BOOL16 WINAPI IsWindow16(HWND16); INT16 WINAPI LookupIconIdFromDirectory16(LPBYTE,BOOL16); UINT16 WINAPI MapVirtualKey16(UINT16,UINT16); FARPROC16 WINAPI SetWindowsHook16(INT16,HOOKPROC16); HHOOK WINAPI SetWindowsHookEx16(INT16,HOOKPROC16,HINSTANCE16,HTASK16); BOOL16 WINAPI UnhookWindowsHook16(INT16,HOOKPROC16); BOOL16 WINAPI UnhookWindowsHookEx16(HHOOK); VOID WINAPI CalcChildScroll16(HWND16,WORD); VOID WINAPI CascadeChildWindows16(HWND16,WORD); INT16 WINAPI CloseComm16(INT16); HGLOBAL16 WINAPI CreateCursorIconIndirect16(HINSTANCE16,CURSORICONINFO*, LPCVOID,LPCVOID); BOOL16 WINAPI DCHook16(HDC16,WORD,DWORD,LPARAM); BOOL16 WINAPI DlgDirSelect16(HWND16,LPSTR,INT16); BOOL16 WINAPI DlgDirSelectComboBox16(HWND16,LPSTR,INT16); DWORD WINAPI DumpIcon16(SEGPTR,WORD*,SEGPTR*,SEGPTR*); BOOL16 WINAPI EnableCommNotification16(INT16,HWND16,INT16,INT16); BOOL16 WINAPI EnableHardwareInput16(BOOL16); VOID WINAPI FillWindow16(HWND16,HWND16,HDC16,HBRUSH16); INT16 WINAPI FlushComm16(INT16,INT16); UINT16 WINAPI GetCommEventMask16(INT16,UINT16); HBRUSH16 WINAPI GetControlBrush16(HWND16,HDC16,UINT16); HWND16 WINAPI GetDesktopHwnd16(void); WORD WINAPI GetIconID16(HGLOBAL16,DWORD); FARPROC16 WINAPI GetMouseEventProc16(void); INT16 WINAPI InitApp16(HINSTANCE16); BOOL16 WINAPI IsUserIdle16(void); HGLOBAL16 WINAPI LoadCursorIconHandler16(HGLOBAL16,HMODULE16,HRSRC16); HGLOBAL16 WINAPI LoadDIBCursorHandler16(HGLOBAL16,HMODULE16,HRSRC16); HGLOBAL16 WINAPI LoadDIBIconHandler16(HGLOBAL16,HMODULE16,HRSRC16); HICON16 WINAPI LoadIconHandler16(HGLOBAL16,BOOL16); HMENU16 WINAPI LookupMenuHandle16(HMENU16,INT16); INT16 WINAPI OpenComm16(LPCSTR,UINT16,UINT16); VOID WINAPI PaintRect16(HWND16,HWND16,HDC16,HBRUSH16,const RECT16*); INT16 WINAPI ReadComm16(INT16,LPSTR,INT16); SEGPTR WINAPI SetCommEventMask16(INT16,UINT16); BOOL16 WINAPI SetDeskPattern(void); VOID WINAPI TileChildWindows16(HWND16,WORD); INT16 WINAPI UngetCommChar16(INT16,CHAR); VOID WINAPI UserYield16(void); INT16 WINAPI WriteComm16(INT16,LPSTR,INT16); BOOL16 WINAPI AdjustWindowRect16(LPRECT16,DWORD,BOOL16); BOOL16 WINAPI AdjustWindowRectEx16(LPRECT16,DWORD,BOOL16,DWORD); SEGPTR WINAPI AnsiLower16(SEGPTR); UINT16 WINAPI AnsiLowerBuff16(LPSTR,UINT16); SEGPTR WINAPI AnsiNext16(SEGPTR); SEGPTR WINAPI AnsiPrev16(SEGPTR,SEGPTR); SEGPTR WINAPI AnsiUpper16(SEGPTR); UINT16 WINAPI AnsiUpperBuff16(LPSTR,UINT16); BOOL16 WINAPI AnyPopup16(void); BOOL16 WINAPI AppendMenu16(HMENU16,UINT16,UINT16,SEGPTR); UINT16 WINAPI ArrangeIconicWindows16(HWND16); HDWP16 WINAPI BeginDeferWindowPos16(INT16); HDC16 WINAPI BeginPaint16(HWND16,LPPAINTSTRUCT16); BOOL16 WINAPI BringWindowToTop16(HWND16); BOOL16 WINAPI CallMsgFilter16(MSG16*,INT16); BOOL16 WINAPI CallMsgFilter32_16(MSG32_16*,INT16,BOOL16); LRESULT WINAPI CallNextHookEx16(HHOOK,INT16,WPARAM16,LPARAM); LRESULT WINAPI CallWindowProc16(WNDPROC16,HWND16,UINT16,WPARAM16,LPARAM); BOOL16 WINAPI ChangeClipboardChain16(HWND16,HWND16); BOOL16 WINAPI ChangeMenu16(HMENU16,UINT16,SEGPTR,UINT16,UINT16); BOOL16 WINAPI CheckDlgButton16(HWND16,INT16,UINT16); BOOL16 WINAPI CheckMenuItem16(HMENU16,UINT16,UINT16); BOOL16 WINAPI CheckRadioButton16(HWND16,UINT16,UINT16,UINT16); HWND16 WINAPI ChildWindowFromPoint16(HWND16,POINT16); HWND16 WINAPI ChildWindowFromPointEx16(HWND16,POINT16,UINT16); INT16 WINAPI ClearCommBreak16(INT16); VOID WINAPI ClientToScreen16(HWND16,LPPOINT16); BOOL16 WINAPI ClipCursor16(const RECT16*); BOOL16 WINAPI CloseClipboard16(void); BOOL16 WINAPI CloseWindow16(HWND16); void WINAPI ControlPanelInfo16(INT16, WORD, LPSTR); HCURSOR16 WINAPI CopyCursor16(HINSTANCE16,HCURSOR16); HICON16 WINAPI CopyIcon16(HINSTANCE16,HICON16); BOOL16 WINAPI CopyRect16(RECT16*,const RECT16*); INT16 WINAPI CountClipboardFormats16(void); VOID WINAPI CreateCaret16(HWND16,HBITMAP16,INT16,INT16); HCURSOR16 WINAPI CreateCursor16(HINSTANCE16,INT16,INT16,INT16,INT16,LPCVOID,LPCVOID); HWND16 WINAPI CreateDialog16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16); HWND16 WINAPI CreateDialogIndirect16(HINSTANCE16,SEGPTR,HWND16,DLGPROC16); HWND16 WINAPI CreateDialogIndirectParam16(HINSTANCE16,SEGPTR,HWND16, DLGPROC16,LPARAM); HWND16 WINAPI CreateDialogParam16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16,LPARAM); HICON16 WINAPI CreateIcon16(HINSTANCE16,INT16,INT16,BYTE,BYTE,LPCVOID,LPCVOID); HICON16 WINAPI CreateIconFromResourceEx16(LPBYTE,UINT16,BOOL16,DWORD,INT16,INT16,UINT16); HMENU16 WINAPI CreateMenu16(void); HMENU16 WINAPI CreatePopupMenu16(void); HWND16 WINAPI CreateWindow16(LPCSTR,LPCSTR,DWORD,INT16,INT16,INT16,INT16, HWND16,HMENU16,HINSTANCE16,LPVOID); HWND16 WINAPI CreateWindowEx16(DWORD,LPCSTR,LPCSTR,DWORD,INT16,INT16, INT16,INT16,HWND16,HMENU16,HINSTANCE16,LPVOID); LRESULT WINAPI DefDlgProc16(HWND16,UINT16,WPARAM16,LPARAM); HDWP16 WINAPI DeferWindowPos16(HDWP16,HWND16,HWND16,INT16,INT16,INT16,INT16,UINT16); LRESULT WINAPI DefFrameProc16(HWND16,HWND16,UINT16,WPARAM16,LPARAM); LRESULT WINAPI DefHookProc16(INT16,WPARAM16,LPARAM,HHOOK*); LRESULT WINAPI DefMDIChildProc16(HWND16,UINT16,WPARAM16,LPARAM); LRESULT WINAPI DefWindowProc16(HWND16,UINT16,WPARAM16,LPARAM); BOOL16 WINAPI DeleteMenu16(HMENU16,UINT16,UINT16); VOID WINAPI DestroyCaret16(void); BOOL16 WINAPI DestroyCursor16(HCURSOR16); BOOL16 WINAPI DestroyIcon16(HICON16); BOOL16 WINAPI DestroyMenu16(HMENU16); BOOL16 WINAPI DestroyWindow16(HWND16); INT16 WINAPI DialogBox16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16); INT16 WINAPI DialogBoxIndirect16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16); INT16 WINAPI DialogBoxIndirectParam16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16,LPARAM); INT16 WINAPI DialogBoxParam16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16,LPARAM); LONG WINAPI DispatchMessage16(const MSG16*); LONG WINAPI DispatchMessage32_16(const MSG32_16*,BOOL16); INT16 WINAPI DlgDirList16(HWND16,LPSTR,INT16,INT16,UINT16); INT16 WINAPI DlgDirListComboBox16(HWND16,LPSTR,INT16,INT16,UINT16); BOOL16 WINAPI DlgDirSelectComboBoxEx16(HWND16,LPSTR,INT16,INT16); BOOL16 WINAPI DlgDirSelectEx16(HWND16,LPSTR,INT16,INT16); BOOL16 WINAPI DragDetect16(HWND16,POINT16); DWORD WINAPI DragObject16(HWND16,HWND16,UINT16,HANDLE16,WORD,HCURSOR16); BOOL16 WINAPI DrawAnimatedRects16(HWND16,INT16,const RECT16*,const RECT16*); BOOL16 WINAPI DrawCaption16(HWND16,HDC16,const RECT16*,UINT16); BOOL16 WINAPI DrawCaptionTemp16(HWND16,HDC16, const RECT16*,HFONT16,HICON16,LPCSTR,UINT16); BOOL16 WINAPI DrawEdge16(HDC16,LPRECT16,UINT16,UINT16); void WINAPI DrawFocusRect16(HDC16,const RECT16*); BOOL16 WINAPI DrawFrameControl16(HDC16,LPRECT16,UINT16,UINT16); BOOL16 WINAPI DrawIcon16(HDC16,INT16,INT16,HICON16); BOOL16 WINAPI DrawIconEx16(HDC16,INT16,INT16,HICON16,INT16,INT16, UINT16,HBRUSH16,UINT16); VOID WINAPI DrawMenuBar16(HWND16); INT16 WINAPI DrawText16(HDC16,LPCSTR,INT16,LPRECT16,UINT16); BOOL16 WINAPI EmptyClipboard16(void); BOOL16 WINAPI EnableMenuItem16(HMENU16,UINT16,UINT16); BOOL16 WINAPI EnableScrollBar16(HWND16,INT16,UINT16); BOOL16 WINAPI EnableWindow16(HWND16,BOOL16); BOOL16 WINAPI EndDeferWindowPos16(HDWP16); BOOL16 WINAPI EndDialog16(HWND16,INT16); BOOL16 WINAPI EndPaint16(HWND16,const PAINTSTRUCT16*); UINT16 WINAPI EnumClipboardFormats16(UINT16); BOOL16 WINAPI EqualRect16(const RECT16*,const RECT16*); LONG WINAPI EscapeCommFunction16(UINT16,UINT16); INT16 WINAPI ExcludeUpdateRgn16(HDC16,HWND16); BOOL16 WINAPI ExitWindows16(DWORD,UINT16); INT16 WINAPI FillRect16(HDC16,const RECT16*,HBRUSH16); HWND16 WINAPI FindWindow16(LPCSTR,LPCSTR); HWND16 WINAPI FindWindowEx16(HWND16,HWND16,LPCSTR,LPCSTR); BOOL16 WINAPI FlashWindow16(HWND16,BOOL16); DWORD WINAPI FormatMessage16(DWORD,SEGPTR,WORD,WORD,LPSTR,WORD,LPDWORD); INT16 WINAPI FrameRect16(HDC16,const RECT16*,HBRUSH16); HWND16 WINAPI GetActiveWindow16(void); INT16 WINAPI GetAsyncKeyState16(INT16); HWND16 WINAPI GetCapture16(void); UINT16 WINAPI GetCaretBlinkTime16(void); VOID WINAPI GetCaretPos16(LPPOINT16); BOOL16 WINAPI GetClassInfo16(HINSTANCE16,SEGPTR,WNDCLASS16 *); BOOL16 WINAPI GetClassInfoEx16(HINSTANCE16,SEGPTR,WNDCLASSEX16 *); LONG WINAPI GetClassLong16(HWND16,INT16); INT16 WINAPI GetClassName16(HWND16,LPSTR,INT16); WORD WINAPI GetClassWord16(HWND16,INT16); void WINAPI GetClientRect16(HWND16,LPRECT16); HANDLE16 WINAPI GetClipboardData16(UINT16); INT16 WINAPI GetClipboardFormatName16(UINT16,LPSTR,INT16); HWND16 WINAPI GetClipboardOwner16(void); HWND16 WINAPI GetClipboardViewer16(void); void WINAPI GetClipCursor16(LPRECT16); DWORD WINAPI GetCurrentTime16(void); HCURSOR16 WINAPI GetCursor16(void); BOOL16 WINAPI GetCursorPos16(LPPOINT16); HDC16 WINAPI GetDC16(HWND16); HDC16 WINAPI GetDCEx16(HWND16,HRGN16,DWORD); HWND16 WINAPI GetDesktopWindow16(void); INT16 WINAPI GetDlgCtrlID16(HWND16); HWND16 WINAPI GetDlgItem16(HWND16,INT16); UINT16 WINAPI GetDlgItemInt16(HWND16,INT16,BOOL16*,BOOL16); INT16 WINAPI GetDlgItemText16(HWND16,INT16,SEGPTR,UINT16); UINT16 WINAPI GetDoubleClickTime16(void); HWND16 WINAPI GetFocus16(void); HWND16 WINAPI GetForegroundWindow16(void); BOOL16 WINAPI GetIconInfo16(HICON16,LPICONINFO16); BOOL16 WINAPI GetInputState16(void); UINT16 WINAPI GetInternalWindowPos16(HWND16,LPRECT16,LPPOINT16); INT16 WINAPI GetKeyboardLayoutName16(LPSTR); INT16 WINAPI GetKeyState16(INT16); HWND16 WINAPI GetLastActivePopup16(HWND16); HMENU16 WINAPI GetMenu16(HWND16); DWORD WINAPI GetMenuContextHelpId16(HMENU16); INT16 WINAPI GetMenuItemCount16(HMENU16); UINT16 WINAPI GetMenuItemID16(HMENU16,INT16); BOOL16 WINAPI GetMenuItemRect16(HWND16,HMENU16,UINT16,LPRECT16); UINT16 WINAPI GetMenuState16(HMENU16,UINT16,UINT16); INT16 WINAPI GetMenuString16(HMENU16,UINT16,LPSTR,INT16,UINT16); BOOL16 WINAPI GetMessage16(MSG16*,HWND16,UINT16,UINT16); BOOL16 WINAPI GetMessage32_16(MSG32_16*,HWND16,UINT16,UINT16,BOOL16); HWND16 WINAPI GetNextDlgGroupItem16(HWND16,HWND16,BOOL16); HWND16 WINAPI GetNextDlgTabItem16(HWND16,HWND16,BOOL16); HWND16 WINAPI GetNextWindow16(HWND16,WORD); HWND16 WINAPI GetOpenClipboardWindow16(void); HWND16 WINAPI GetParent16(HWND16); INT16 WINAPI GetPriorityClipboardFormat16(UINT16*,INT16); HANDLE16 WINAPI GetProp16(HWND16,LPCSTR); DWORD WINAPI GetQueueStatus16(UINT16); BOOL16 WINAPI GetScrollInfo16(HWND16,INT16,LPSCROLLINFO); INT16 WINAPI GetScrollPos16(HWND16,INT16); BOOL16 WINAPI GetScrollRange16(HWND16,INT16,LPINT16,LPINT16); HWND16 WINAPI GetShellWindow16(void); HMENU16 WINAPI GetSubMenu16(HMENU16,INT16); COLORREF WINAPI GetSysColor16(INT16); HBRUSH16 WINAPI GetSysColorBrush16(INT16); HWND16 WINAPI GetSysModalWindow16(void); HMENU16 WINAPI GetSystemMenu16(HWND16,BOOL16); INT16 WINAPI GetSystemMetrics16(INT16); DWORD WINAPI GetTabbedTextExtent16(HDC16,LPCSTR,INT16,INT16,const INT16*); HWND16 WINAPI GetTopWindow16(HWND16); BOOL16 WINAPI GetUpdateRect16(HWND16,LPRECT16,BOOL16); INT16 WINAPI GetUpdateRgn16(HWND16,HRGN16,BOOL16); HWND16 WINAPI GetWindow16(HWND16,WORD); HDC16 WINAPI GetWindowDC16(HWND16); LONG WINAPI GetWindowLong16(HWND16,INT16); BOOL16 WINAPI GetWindowPlacement16(HWND16,LPWINDOWPLACEMENT16); void WINAPI GetWindowRect16(HWND16,LPRECT16); HTASK16 WINAPI GetWindowTask16(HWND16); INT16 WINAPI GetWindowText16(HWND16,SEGPTR,INT16); INT16 WINAPI GetWindowTextLength16(HWND16); WORD WINAPI GetWindowWord16(HWND16,INT16); ATOM WINAPI GlobalAddAtom16(LPCSTR); ATOM WINAPI GlobalDeleteAtom16(ATOM); ATOM WINAPI GlobalFindAtom16(LPCSTR); UINT16 WINAPI GlobalGetAtomName16(ATOM,LPSTR,INT16); VOID WINAPI HideCaret16(HWND16); BOOL16 WINAPI HiliteMenuItem16(HWND16,HMENU16,UINT16,UINT16); DWORD WINAPI IconSize16(void); void WINAPI InflateRect16(LPRECT16,INT16,INT16); HQUEUE16 WINAPI InitThreadInput16(WORD,WORD); BOOL16 WINAPI InSendMessage16(void); BOOL16 WINAPI InsertMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR); BOOL16 WINAPI InsertMenuItem16(HMENU16,UINT16,BOOL16,const MENUITEMINFO16*); BOOL16 WINAPI IntersectRect16(LPRECT16,const RECT16*,const RECT16*); void WINAPI InvalidateRect16(HWND16,const RECT16*,BOOL16); void WINAPI InvalidateRgn16(HWND16,HRGN16,BOOL16); void WINAPI InvertRect16(HDC16,const RECT16*); BOOL16 WINAPI IsCharAlpha16(CHAR); BOOL16 WINAPI IsCharAlphaNumeric16(CHAR); BOOL16 WINAPI IsCharLower16(CHAR); BOOL16 WINAPI IsCharUpper16(CHAR); BOOL16 WINAPI IsChild16(HWND16,HWND16); BOOL16 WINAPI IsClipboardFormatAvailable16(UINT16); UINT16 WINAPI IsDlgButtonChecked16(HWND16,UINT16); BOOL16 WINAPI IsIconic16(HWND16); BOOL16 WINAPI IsMenu16(HMENU16); BOOL16 WINAPI IsRectEmpty16(const RECT16*); BOOL16 WINAPI IsWindowEnabled16(HWND16); BOOL16 WINAPI IsWindowVisible16(HWND16); BOOL16 WINAPI IsZoomed16(HWND16); BOOL16 WINAPI KillSystemTimer16(HWND16,UINT16); BOOL16 WINAPI KillTimer16(HWND16,UINT16); HBITMAP16 WINAPI LoadBitmap16(HANDLE16,LPCSTR); HCURSOR16 WINAPI LoadCursor16(HINSTANCE16,LPCSTR); HICON16 WINAPI LoadIcon16(HINSTANCE16,LPCSTR); HANDLE16 WINAPI LoadImage16(HINSTANCE16,LPCSTR,UINT16,INT16,INT16,UINT16); HMENU16 WINAPI LoadMenu16(HINSTANCE16,LPCSTR); HMENU16 WINAPI LoadMenuIndirect16(SEGPTR); INT16 WINAPI LoadString16(HINSTANCE16,UINT16,LPSTR,INT16); BOOL16 WINAPI LockWindowUpdate16(HWND16); INT16 WINAPI LookupIconIdFromDirectoryEx16(LPBYTE,BOOL16,INT16,INT16,UINT16); void WINAPI MapDialogRect16(HWND16,LPRECT16); void WINAPI MapWindowPoints16(HWND16,HWND16,LPPOINT16,UINT16); VOID WINAPI MessageBeep16(UINT16); INT16 WINAPI MessageBox16(HWND16,LPCSTR,LPCSTR,UINT16); INT16 WINAPI MessageBoxIndirect16(LPMSGBOXPARAMS16); BOOL16 WINAPI ModifyMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR); BOOL16 WINAPI MoveWindow16(HWND16,INT16,INT16,INT16,INT16,BOOL16); void WINAPI OffsetRect16(LPRECT16,INT16,INT16); BOOL16 WINAPI OpenClipboard16(HWND16); BOOL16 WINAPI OpenIcon16(HWND16); BOOL16 WINAPI PeekMessage16(MSG16*,HWND16,UINT16,UINT16,UINT16); BOOL16 WINAPI PeekMessage32_16(MSG32_16*,HWND16,UINT16,UINT16,UINT16,BOOL16); BOOL16 WINAPI PostAppMessage16(HTASK16,UINT16,WPARAM16,LPARAM); BOOL16 WINAPI PostMessage16(HWND16,UINT16,WPARAM16,LPARAM); void WINAPI PostQuitMessage16(INT16); BOOL16 WINAPI PtInRect16(const RECT16*,POINT16); UINT16 WINAPI RealizePalette16(HDC16); BOOL16 WINAPI RedrawWindow16(HWND16,const RECT16*,HRGN16,UINT16); BOOL16 WINAPI RegisterClass16(const WNDCLASS16*); ATOM WINAPI RegisterClassEx16(const WNDCLASSEX16*); UINT16 WINAPI RegisterClipboardFormat16(LPCSTR); BOOL WINAPI RegisterShellHook16(HWND16,UINT16); INT16 WINAPI ReleaseDC16(HWND16,HDC16); BOOL16 WINAPI RemoveMenu16(HMENU16,UINT16,UINT16); HANDLE16 WINAPI RemoveProp16(HWND16,LPCSTR); VOID WINAPI ReplyMessage16(LRESULT); void WINAPI ScreenToClient16(HWND16,LPPOINT16); VOID WINAPI ScrollChildren16(HWND16,UINT16,WPARAM16,LPARAM); BOOL16 WINAPI ScrollDC16(HDC16,INT16,INT16,const RECT16*,const RECT16*, HRGN16,LPRECT16); void WINAPI ScrollWindow16(HWND16,INT16,INT16,const RECT16*,const RECT16*); INT16 WINAPI ScrollWindowEx16(HWND16,INT16,INT16,const RECT16*, const RECT16*,HRGN16,LPRECT16,UINT16); HPALETTE16 WINAPI SelectPalette16(HDC16,HPALETTE16,BOOL16); LRESULT WINAPI SendDlgItemMessage16(HWND16,INT16,UINT16,WPARAM16,LPARAM); LRESULT WINAPI SendMessage16(HWND16,UINT16,WPARAM16,LPARAM); HWND16 WINAPI SetActiveWindow16(HWND16); HWND16 WINAPI SetCapture16(HWND16); VOID WINAPI SetCaretBlinkTime16(UINT16); VOID WINAPI SetCaretPos16(INT16,INT16); LONG WINAPI SetClassLong16(HWND16,INT16,LONG); WORD WINAPI SetClassWord16(HWND16,INT16,WORD); HANDLE16 WINAPI SetClipboardData16(UINT16,HANDLE16); HWND16 WINAPI SetClipboardViewer16(HWND16); INT16 WINAPI SetCommBreak16(INT16); HCURSOR16 WINAPI SetCursor16(HCURSOR16); void WINAPI SetCursorPos16(INT16,INT16); BOOL16 WINAPI SetDeskWallPaper16(LPCSTR); void WINAPI SetDlgItemInt16(HWND16,INT16,UINT16,BOOL16); void WINAPI SetDlgItemText16(HWND16,INT16,SEGPTR); VOID WINAPI SetDoubleClickTime16(UINT16); HWND16 WINAPI SetFocus16(HWND16); BOOL16 WINAPI SetForegroundWindow16(HWND16); void WINAPI SetInternalWindowPos16(HWND16,UINT16,LPRECT16,LPPOINT16); BOOL16 WINAPI SetMenu16(HWND16,HMENU16); BOOL16 WINAPI SetMenuContextHelpId16(HMENU16,DWORD); BOOL16 WINAPI SetMenuItemBitmaps16(HMENU16,UINT16,UINT16,HBITMAP16,HBITMAP16); BOOL16 WINAPI SetMessageQueue16(INT16); HWND16 WINAPI SetParent16(HWND16,HWND16); BOOL16 WINAPI SetProp16(HWND16,LPCSTR,HANDLE16); void WINAPI SetRect16(LPRECT16,INT16,INT16,INT16,INT16); void WINAPI SetRectEmpty16(LPRECT16); INT16 WINAPI SetScrollInfo16(HWND16,INT16,const SCROLLINFO*,BOOL16); INT16 WINAPI SetScrollPos16(HWND16,INT16,INT16,BOOL16); void WINAPI SetScrollRange16(HWND16,INT16,INT16,INT16,BOOL16); VOID WINAPI SetSysColors16(INT16,const INT16*,const COLORREF*); HWND16 WINAPI SetSysModalWindow16(HWND16); BOOL16 WINAPI SetSystemMenu16(HWND16,HMENU16); UINT16 WINAPI SetSystemTimer16(HWND16,UINT16,UINT16,TIMERPROC16); UINT16 WINAPI SetTimer16(HWND16,UINT16,UINT16,TIMERPROC16); LONG WINAPI SetWindowLong16(HWND16,INT16,LONG); BOOL16 WINAPI SetWindowPlacement16(HWND16,const WINDOWPLACEMENT16*); BOOL16 WINAPI SetWindowPos16(HWND16,HWND16,INT16,INT16,INT16,INT16,WORD); INT16 WINAPI SetWindowRgn16(HWND16,HRGN16,BOOL16); BOOL16 WINAPI SetWindowText16(HWND16,SEGPTR); WORD WINAPI SetWindowWord16(HWND16,INT16,WORD); VOID WINAPI ShowCaret16(HWND16); INT16 WINAPI ShowCursor16(BOOL16); void WINAPI ShowScrollBar16(HWND16,INT16,BOOL16); VOID WINAPI ShowOwnedPopups16(HWND16,BOOL16); BOOL16 WINAPI ShowWindow16(HWND16,INT16); BOOL16 WINAPI SubtractRect16(LPRECT16,const RECT16*,const RECT16*); BOOL16 WINAPI SwapMouseButton16(BOOL16); VOID WINAPI SwitchToThisWindow16(HWND16,BOOL16); BOOL16 WINAPI SystemParametersInfo16(UINT16,UINT16,LPVOID,UINT16); LONG WINAPI TabbedTextOut16(HDC16,INT16,INT16,LPCSTR,INT16,INT16,const INT16*,INT16); BOOL16 WINAPI TrackPopupMenu16(HMENU16,UINT16,INT16,INT16,INT16,HWND16,const RECT16*); INT16 WINAPI TranslateAccelerator16(HWND16,HACCEL16,LPMSG16); BOOL16 WINAPI TranslateMDISysAccel16(HWND16,LPMSG16); BOOL16 WINAPI TranslateMessage16(const MSG16*); BOOL16 WINAPI TranslateMessage32_16(const MSG32_16*,BOOL16); INT16 WINAPI TransmitCommChar16(INT16,CHAR); BOOL16 WINAPI UnionRect16(LPRECT16,const RECT16*,const RECT16*); BOOL16 WINAPI UnregisterClass16(LPCSTR,HINSTANCE16); VOID WINAPI UpdateWindow16(HWND16); VOID WINAPI ValidateRect16(HWND16,const RECT16*); VOID WINAPI ValidateRgn16(HWND16,HRGN16); HWND16 WINAPI WindowFromDC16(HDC16); HWND16 WINAPI WindowFromPoint16(POINT16); BOOL16 WINAPI WinHelp16(HWND16,LPCSTR,UINT16,DWORD); WORD WINAPI WNetAddConnection16(LPCSTR,LPCSTR,LPCSTR); INT16 WINAPI wvsprintf16(LPSTR,LPCSTR,VA_LIST16); BOOL16 WINAPI DrawState16A(HDC16,HBRUSH16,DRAWSTATEPROC16,LPARAM,WPARAM16,INT16,INT16,INT16,INT16,UINT16); BOOL16 WINAPI IsDialogMessage16(HWND16,SEGPTR); INT16 WINAPI GetCommError16(INT16,LPCOMSTAT16); INT16 WINAPI BuildCommDCB16(LPCSTR,LPDCB16); INT16 WINAPI GetCommState16(INT16,LPDCB16); INT16 WINAPI SetCommState16(LPDCB16); INT16 WINAPI lstrcmp16(LPCSTR,LPCSTR); INT16 WINAPI lstrcmpi16(LPCSTR,LPCSTR); /* undocumented functions */ void WINAPI ConvertDialog32To16(LPCVOID,DWORD,LPVOID); BOOL16 WINAPI EnumTaskWindows16(HTASK16,WNDENUMPROC16,LPARAM); BOOL16 WINAPI GrayString16(HDC16,HBRUSH16,GRAYSTRINGPROC16,LPARAM, INT16,INT16,INT16,INT16,INT16); DWORD WINAPI GetFileResourceSize16(LPCSTR,LPCSTR,LPCSTR,LPDWORD); DWORD WINAPI GetFileResource16(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD,LPVOID); FARPROC16 WINAPI SetTaskSignalProc(HTASK16,FARPROC16); #endif /* __WINE_WINE_WINUSER16_H */ ================================================ FILE: wine/wine/wpp.h ================================================ /* * Exported functions of the Wine preprocessor * * Copyright 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WPP_H #define __WINE_WPP_H #include #include struct wpp_callbacks { /* I/O callbacks */ /* Looks for a file to include, returning the path where it is found */ /* The type param is true for local (#include "filename.h") includes */ /* parent_name is the directory of the parent source file, includepath * is an array of additional include paths */ char *(*lookup)( const char *filename, int type, const char *parent_name, char **include_path, int include_path_count ); /* Opens an include file */ void *(*open)( const char *filename, int type ); /* Closes a previously opened file */ void (*close)( void *file ); /* Reads buffer from the input */ int (*read)( void *file, char *buffer, unsigned int len ); /* Writes buffer to the output */ void (*write)( const char *buffer, unsigned int len ); /* Error callbacks */ void (*error)( const char *file, int line, int col, const char *near, const char *msg, va_list ap ); void (*warning)( const char *file, int line, int col, const char *near, const char *msg, va_list ap ); }; /* Return value == 0 means successful execution */ extern int wpp_add_define( const char *name, const char *value ); extern void wpp_del_define( const char *name ); extern int wpp_add_cmdline_define( const char *value ); extern void wpp_set_debug( int lex_debug, int parser_debug, int msg_debug ); extern void wpp_set_pedantic( int on ); extern int wpp_add_include_path( const char *path ); extern char *wpp_find_include( const char *name, const char *parent_name ); extern int wpp_parse( const char *input, FILE *output ); extern void wpp_set_callbacks( const struct wpp_callbacks *callbacks ); #endif /* __WINE_WPP_H */ ================================================ FILE: wine/wine.def ================================================ LIBRARY libwine.dll EXPORTS __wine_dbg_get_channel_flags __wine_dbg_set_channel_flags __wine_dbg_set_functions ;__wine_dll_register ;__wine_main_argc ;__wine_main_argv ;__wine_main_environ ;__wine_main_wargv atoiW atolW get_char_typeW isalnumW isalphaW iscntrlW isdigitW isgraphW islowerW isprintW ispunctW isspaceW isupperW isxdigitW memchrW memicmpW memrchrW snprintfW sprintfW strcatW strchrW strcmpW strcmpiW strcpyW strcspnW strlenW strlwrW strncmpW strncmpiW strpbrkW strrchrW strspnW strstrW strtolW strtoulW struprW tolowerW toupperW vsnprintfW vsprintfW ;wine_call_on_stack wine_casemap_lower wine_casemap_upper ;wine_compare_string ;wine_cp_enum_table ;wine_cp_get_table ;wine_cp_mbstowcs ;wine_cp_wcstombs ;wine_cpsymbol_mbstowcs ;wine_cpsymbol_wcstombs wine_dbg_log wine_dbg_printf wine_dbg_sprintf wine_dbgstr_an wine_dbgstr_wn ;wine_dlclose ;wine_dll_enum_load_path ;wine_dll_get_owner ;wine_dll_load ;wine_dll_load_main_exe ;wine_dll_set_callback ;wine_dll_unload ;wine_dlopen ;wine_dlsym ;wine_exec_wine_binary ;wine_fold_string ;wine_get_build_dir ;wine_get_build_id ;wine_get_config_dir ;wine_get_data_dir wine_get_server_dir ;wine_get_sortkey ;wine_get_user_name ;wine_get_version ;wine_init ;wine_init_argv0_path wine_is_dbcs_leadbyte ;wine_pthread_get_functions ;wine_pthread_set_functions ;wine_switch_to_stack ;wine_utf8_mbstowcs ;wine_utf8_wcstombs wine_wctype_table ;add wine_ldt_get_ptr wine_ldt_set_entry wine_ldt_get_entry wine_ldt_alloc_entries wine_ldt_is_system wine_ldt_copy DATA wine_ldt_realloc_entries wine_ldt_free_entries wine_ldt DATA set_intel_vt_x_workaround wine_get_cs wine_get_ds wine_get_es wine_get_fs wine_get_gs wine_get_ss ================================================ FILE: wine/wine.vcxproj ================================================  Debug Win32 Release Win32 {C978A6C2-F788-4F5E-8E14-73C1B6B521CE} Win32Proj wine 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true libwine false libwine Level3 Disabled WIN32;_DEBUG;_CONSOLE;_LIB;_X86_;__i386__;__WINESRC__;inline=__inline;%(PreprocessorDefinitions) Console true wine.def true shlwapi.lib shlwapi.dll;user32.lib; Level3 MaxSpeed true true WIN32;NDEBUG;_CONSOLE;_LIB;_X86_;__i386__;__WINESRC__;inline=__inline;%(PreprocessorDefinitions) Console true true true wine.def shlwapi.lib shlwapi.dll;user32.lib; ================================================ FILE: wine/wine.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: wine/winuser.rh ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */ #ifndef __MSABI_LONG # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) # define __MSABI_LONG(x) x ## l # else # define __MSABI_LONG(x) x # endif #endif #ifdef RC_INVOKED # define MAKEINTRESOURCE(i) i #endif #define RT_MANIFEST MAKEINTRESOURCE(24) #define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1) #define ISOLATIONAWARE_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(2) #define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3) #define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1) #define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(16) /*** ShowWindow() codes ***/ #define SW_HIDE 0 #define SW_SHOWNORMAL 1 #define SW_NORMAL SW_SHOWNORMAL #define SW_SHOWMINIMIZED 2 #define SW_SHOWMAXIMIZED 3 #define SW_MAXIMIZE SW_SHOWMAXIMIZED #define SW_SHOWNOACTIVATE 4 #define SW_SHOW 5 #define SW_MINIMIZE 6 #define SW_SHOWMINNOACTIVE 7 #define SW_SHOWNA 8 #define SW_RESTORE 9 #define SW_SHOWDEFAULT 10 #define SW_FORCEMINIMIZE 11 #define SW_MAX 11 #define SW_NORMALNA 0xCC /* Undocumented. Flag in MinMaximize */ /* Obsolete ShowWindow() codes for compatibility */ #define HIDE_WINDOW SW_HIDE #define SHOW_OPENWINDOW SW_SHOWNORMAL #define SHOW_ICONWINDOW SW_SHOWMINIMIZED #define SHOW_FULLSCREEN SW_SHOWMAXIMIZED #define SHOW_OPENNOACTIVATE SW_SHOWNOACTIVATE /* WM_SHOWWINDOW lParam codes */ #define SW_PARENTCLOSING 1 #define SW_OTHERZOOM 2 #define SW_PARENTOPENING 3 #define SW_OTHERUNZOOM 4 /*** Virtual key codes ***/ #define VK_LBUTTON 0x01 #define VK_RBUTTON 0x02 #define VK_CANCEL 0x03 #define VK_MBUTTON 0x04 #define VK_XBUTTON1 0x05 #define VK_XBUTTON2 0x06 /* 0x07 Undefined */ #define VK_BACK 0x08 #define VK_TAB 0x09 /* 0x0A-0x0B Undefined */ #define VK_CLEAR 0x0C #define VK_RETURN 0x0D /* 0x0E-0x0F Undefined */ #define VK_SHIFT 0x10 #define VK_CONTROL 0x11 #define VK_MENU 0x12 #define VK_PAUSE 0x13 #define VK_CAPITAL 0x14 #define VK_KANA 0x15 #define VK_HANGEUL VK_KANA #define VK_HANGUL VK_KANA #define VK_JUNJA 0x17 #define VK_FINAL 0x18 #define VK_HANJA 0x19 #define VK_KANJI VK_HANJA /* 0x1A Undefined */ #define VK_ESCAPE 0x1B #define VK_CONVERT 0x1C #define VK_NONCONVERT 0x1D #define VK_ACCEPT 0x1E #define VK_MODECHANGE 0x1F #define VK_SPACE 0x20 #define VK_PRIOR 0x21 #define VK_NEXT 0x22 #define VK_END 0x23 #define VK_HOME 0x24 #define VK_LEFT 0x25 #define VK_UP 0x26 #define VK_RIGHT 0x27 #define VK_DOWN 0x28 #define VK_SELECT 0x29 #define VK_PRINT 0x2A /* OEM specific in Windows 3.1 SDK */ #define VK_EXECUTE 0x2B #define VK_SNAPSHOT 0x2C #define VK_INSERT 0x2D #define VK_DELETE 0x2E #define VK_HELP 0x2F /* VK_0 - VK-9 0x30-0x39 Use ASCII instead */ /* 0x3A-0x40 Undefined */ /* VK_A - VK_Z 0x41-0x5A Use ASCII instead */ #define VK_LWIN 0x5B #define VK_RWIN 0x5C #define VK_APPS 0x5D /* 0x5E Unassigned */ #define VK_SLEEP 0x5F #define VK_NUMPAD0 0x60 #define VK_NUMPAD1 0x61 #define VK_NUMPAD2 0x62 #define VK_NUMPAD3 0x63 #define VK_NUMPAD4 0x64 #define VK_NUMPAD5 0x65 #define VK_NUMPAD6 0x66 #define VK_NUMPAD7 0x67 #define VK_NUMPAD8 0x68 #define VK_NUMPAD9 0x69 #define VK_MULTIPLY 0x6A #define VK_ADD 0x6B #define VK_SEPARATOR 0x6C #define VK_SUBTRACT 0x6D #define VK_DECIMAL 0x6E #define VK_DIVIDE 0x6F #define VK_F1 0x70 #define VK_F2 0x71 #define VK_F3 0x72 #define VK_F4 0x73 #define VK_F5 0x74 #define VK_F6 0x75 #define VK_F7 0x76 #define VK_F8 0x77 #define VK_F9 0x78 #define VK_F10 0x79 #define VK_F11 0x7A #define VK_F12 0x7B #define VK_F13 0x7C #define VK_F14 0x7D #define VK_F15 0x7E #define VK_F16 0x7F #define VK_F17 0x80 #define VK_F18 0x81 #define VK_F19 0x82 #define VK_F20 0x83 #define VK_F21 0x84 #define VK_F22 0x85 #define VK_F23 0x86 #define VK_F24 0x87 /* 0x88-0x8F Unassigned */ #define VK_NUMLOCK 0x90 #define VK_SCROLL 0x91 #define VK_OEM_NEC_EQUAL 0x92 #define VK_OEM_FJ_JISHO 0x92 #define VK_OEM_FJ_MASSHOU 0x93 #define VK_OEM_FJ_TOUROKU 0x94 #define VK_OEM_FJ_LOYA 0x95 #define VK_OEM_FJ_ROYA 0x96 /* 0x97-0x9F Unassigned */ /* * differencing between right and left shift/control/alt key. * Used only by GetAsyncKeyState() and GetKeyState(). */ #define VK_LSHIFT 0xA0 #define VK_RSHIFT 0xA1 #define VK_LCONTROL 0xA2 #define VK_RCONTROL 0xA3 #define VK_LMENU 0xA4 #define VK_RMENU 0xA5 #define VK_BROWSER_BACK 0xA6 #define VK_BROWSER_FORWARD 0xA7 #define VK_BROWSER_REFRESH 0xA8 #define VK_BROWSER_STOP 0xA9 #define VK_BROWSER_SEARCH 0xAA #define VK_BROWSER_FAVORITES 0xAB #define VK_BROWSER_HOME 0xAC #define VK_VOLUME_MUTE 0xAD #define VK_VOLUME_DOWN 0xAE #define VK_VOLUME_UP 0xAF #define VK_MEDIA_NEXT_TRACK 0xB0 #define VK_MEDIA_PREV_TRACK 0xB1 #define VK_MEDIA_STOP 0xB2 #define VK_MEDIA_PLAY_PAUSE 0xB3 #define VK_LAUNCH_MAIL 0xB4 #define VK_LAUNCH_MEDIA_SELECT 0xB5 #define VK_LAUNCH_APP1 0xB6 #define VK_LAUNCH_APP2 0xB7 /* 0xB8-0xB9 Unassigned */ #define VK_OEM_1 0xBA #define VK_OEM_PLUS 0xBB #define VK_OEM_COMMA 0xBC #define VK_OEM_MINUS 0xBD #define VK_OEM_PERIOD 0xBE #define VK_OEM_2 0xBF #define VK_OEM_3 0xC0 /* 0xC1-0xDA Unassigned */ #define VK_OEM_4 0xDB #define VK_OEM_5 0xDC #define VK_OEM_6 0xDD #define VK_OEM_7 0xDE #define VK_OEM_8 0xDF /* 0xE0 OEM specific */ #define VK_OEM_AX 0xE1 /* "AX" key on Japanese AX keyboard */ #define VK_OEM_102 0xE2 /* "<>" or "\|" on RT 102-key keyboard */ #define VK_ICO_HELP 0xE3 /* Help key on ICO */ #define VK_ICO_00 0xE4 /* 00 key on ICO */ #define VK_PROCESSKEY 0xE5 #define VK_ICO_CLEAR 0xE6 #define VK_PACKET 0xE7 /* 0xE8 Unassigned */ #define VK_OEM_RESET 0xE9 #define VK_OEM_JUMP 0xEA #define VK_OEM_PA1 0xEB #define VK_OEM_PA2 0xEC #define VK_OEM_PA3 0xED #define VK_OEM_WSCTRL 0xEE #define VK_OEM_CUSEL 0xEF #define VK_OEM_ATTN 0xF0 #define VK_OEM_FINISH 0xF1 #define VK_OEM_COPY 0xF2 #define VK_OEM_AUTO 0xF3 #define VK_OEM_ENLW 0xF4 #define VK_OEM_BACKTAB 0xF5 #define VK_ATTN 0xF6 #define VK_CRSEL 0xF7 #define VK_EXSEL 0xF8 #define VK_EREOF 0xF9 #define VK_PLAY 0xFA #define VK_ZOOM 0xFB #define VK_NONAME 0xFC #define VK_PA1 0xFD #define VK_OEM_CLEAR 0xFE /* 0xFF Unassigned */ /*** Messages ***/ #ifndef NOWINMESSAGES #define WM_NULL 0x0000 #define WM_CREATE 0x0001 #define WM_DESTROY 0x0002 #define WM_MOVE 0x0003 #define WM_SIZEWAIT 0x0004 /* DDK / Win16 */ #define WM_SIZE 0x0005 #define WM_ACTIVATE 0x0006 /* WM_ACTIVATE wParam values */ #define WA_INACTIVE 0 #define WA_ACTIVE 1 #define WA_CLICKACTIVE 2 #define WM_SETFOCUS 0x0007 #define WM_KILLFOCUS 0x0008 #define WM_SETVISIBLE 0x0009 /* DDK / Win16 */ #define WM_ENABLE 0x000a #define WM_SETREDRAW 0x000b #define WM_SETTEXT 0x000c #define WM_GETTEXT 0x000d #define WM_GETTEXTLENGTH 0x000e #define WM_PAINT 0x000f #define WM_CLOSE 0x0010 #define WM_QUERYENDSESSION 0x0011 #define WM_QUIT 0x0012 #define WM_QUERYOPEN 0x0013 #define WM_ERASEBKGND 0x0014 #define WM_SYSCOLORCHANGE 0x0015 #define WM_ENDSESSION 0x0016 #define WM_SYSTEMERROR 0x0017 /* DDK / Win16 */ #define WM_SHOWWINDOW 0x0018 #define WM_CTLCOLOR 0x0019 /* Added from windowsx.h */ #define WM_WININICHANGE 0x001a #define WM_SETTINGCHANGE WM_WININICHANGE #define WM_DEVMODECHANGE 0x001b #define WM_ACTIVATEAPP 0x001c #define WM_FONTCHANGE 0x001d #define WM_TIMECHANGE 0x001e #define WM_CANCELMODE 0x001f #define WM_SETCURSOR 0x0020 #define WM_MOUSEACTIVATE 0x0021 #define WM_CHILDACTIVATE 0x0022 #define WM_QUEUESYNC 0x0023 #define WM_GETMINMAXINFO 0x0024 #define WM_PAINTICON 0x0026 #define WM_ICONERASEBKGND 0x0027 #define WM_NEXTDLGCTL 0x0028 #define WM_ALTTABACTIVE 0x0029 /* DDK / Win16 */ #define WM_SPOOLERSTATUS 0x002a #define WM_DRAWITEM 0x002b #define WM_MEASUREITEM 0x002c #define WM_DELETEITEM 0x002d #define WM_VKEYTOITEM 0x002e #define WM_CHARTOITEM 0x002f #define WM_SETFONT 0x0030 #define WM_GETFONT 0x0031 #define WM_SETHOTKEY 0x0032 #define WM_GETHOTKEY 0x0033 #define WM_FILESYSCHANGE 0x0034 /* DDK / Win16 */ #define WM_ISACTIVEICON 0x0035 /* DDK / Win16 */ #define WM_QUERYPARKICON 0x0036 /* Undocumented */ #define WM_QUERYDRAGICON 0x0037 #define WM_QUERYSAVESTATE 0x0038 /* Undocumented */ #define WM_COMPAREITEM 0x0039 #define WM_TESTING 0x003a /* DDK / Win16 */ #define WM_GETOBJECT 0x003d #define WM_ACTIVATESHELLWINDOW 0x003e /* FIXME: Wine-only */ #define WM_COMPACTING 0x0041 #define WM_COMMNOTIFY 0x0044 #define WM_WINDOWPOSCHANGING 0x0046 #define WM_WINDOWPOSCHANGED 0x0047 #define WM_POWER 0x0048 /* For WM_POWER */ #define PWR_OK 1 #define PWR_FAIL (-1) #define PWR_SUSPENDREQUEST 1 #define PWR_SUSPENDRESUME 2 #define PWR_CRITICALRESUME 3 /* Win32 4.0 messages */ #define WM_COPYDATA 0x004a #define WM_CANCELJOURNAL 0x004b #define WM_KEYF1 0x004d /* DDK / Win16 */ #define WM_NOTIFY 0x004e #define WM_INPUTLANGCHANGEREQUEST 0x0050 #define WM_INPUTLANGCHANGE 0x0051 #define WM_TCARD 0x0052 #define WM_HELP 0x0053 #define WM_USERCHANGED 0x0054 #define WM_NOTIFYFORMAT 0x0055 /* WM_NOTIFYFORMAT commands and return values */ #define NFR_ANSI 1 #define NFR_UNICODE 2 #define NF_QUERY 3 #define NF_REQUERY 4 #define WM_CONTEXTMENU 0x007b #define WM_STYLECHANGING 0x007c #define WM_STYLECHANGED 0x007d #define WM_DISPLAYCHANGE 0x007e #define WM_GETICON 0x007f #define WM_SETICON 0x0080 /* Non-client system messages */ #define WM_NCCREATE 0x0081 #define WM_NCDESTROY 0x0082 #define WM_NCCALCSIZE 0x0083 #define WM_NCHITTEST 0x0084 #define WM_NCPAINT 0x0085 #define WM_NCACTIVATE 0x0086 #define WM_GETDLGCODE 0x0087 #define WM_SYNCPAINT 0x0088 #define WM_SYNCTASK 0x0089 /* DDK / Win16 */ /* Non-client mouse messages */ #define WM_NCMOUSEMOVE 0x00a0 #define WM_NCLBUTTONDOWN 0x00a1 #define WM_NCLBUTTONUP 0x00a2 #define WM_NCLBUTTONDBLCLK 0x00a3 #define WM_NCRBUTTONDOWN 0x00a4 #define WM_NCRBUTTONUP 0x00a5 #define WM_NCRBUTTONDBLCLK 0x00a6 #define WM_NCMBUTTONDOWN 0x00a7 #define WM_NCMBUTTONUP 0x00a8 #define WM_NCMBUTTONDBLCLK 0x00a9 #define WM_NCXBUTTONDOWN 0x00ab #define WM_NCXBUTTONUP 0x00ac #define WM_NCXBUTTONDBLCLK 0x00ad /* Raw input */ #define WM_INPUT_DEVICE_CHANGE 0x00fe #define WM_INPUT 0x00ff /* Keyboard messages */ #define WM_KEYFIRST 0x0100 #define WM_KEYDOWN WM_KEYFIRST #define WM_KEYUP 0x0101 #define WM_CHAR 0x0102 #define WM_DEADCHAR 0x0103 #define WM_SYSKEYDOWN 0x0104 #define WM_SYSKEYUP 0x0105 #define WM_SYSCHAR 0x0106 #define WM_SYSDEADCHAR 0x0107 #define WM_UNICHAR 0x0109 #define WM_KEYLAST WM_UNICHAR #define UNICODE_NOCHAR 0xffff /* Win32 4.0 messages for IME */ #define WM_IME_STARTCOMPOSITION 0x010d #define WM_IME_ENDCOMPOSITION 0x010e #define WM_IME_COMPOSITION 0x010f #define WM_IME_KEYLAST 0x010f #define WM_INITDIALOG 0x0110 #define WM_COMMAND 0x0111 #define WM_SYSCOMMAND 0x0112 #define WM_TIMER 0x0113 /* Scroll messages */ #define WM_HSCROLL 0x0114 #define WM_VSCROLL 0x0115 /* Menu messages */ #define WM_INITMENU 0x0116 #define WM_INITMENUPOPUP 0x0117 #define WM_GESTURE 0x0119 #define WM_GESTURENOTIFY 0x011A #define WM_MENUSELECT 0x011F #define WM_MENUCHAR 0x0120 #define WM_ENTERIDLE 0x0121 #define WM_MENURBUTTONUP 0x0122 #define WM_MENUDRAG 0x0123 #define WM_MENUGETOBJECT 0x0124 #define WM_UNINITMENUPOPUP 0x0125 #define WM_MENUCOMMAND 0x0126 #define WM_CHANGEUISTATE 0x0127 #define WM_UPDATEUISTATE 0x0128 #define WM_QUERYUISTATE 0x0129 /* UI flags for WM_*UISTATE */ /* for low-order word of wparam */ #define UIS_SET 1 #define UIS_CLEAR 2 #define UIS_INITIALIZE 3 /* for hi-order word of wparam */ #define UISF_HIDEFOCUS 0x1 #define UISF_HIDEACCEL 0x2 #define UISF_ACTIVE 0x4 #define WM_LBTRACKPOINT 0x0131 /* DDK / Win16 */ /* Win32 CTLCOLOR messages */ #define WM_CTLCOLORMSGBOX 0x0132 #define WM_CTLCOLOREDIT 0x0133 #define WM_CTLCOLORLISTBOX 0x0134 #define WM_CTLCOLORBTN 0x0135 #define WM_CTLCOLORDLG 0x0136 #define WM_CTLCOLORSCROLLBAR 0x0137 #define WM_CTLCOLORSTATIC 0x0138 #define MN_GETHMENU 0x01E1 /* Mouse messages */ #define WM_MOUSEFIRST 0x0200 #define WM_MOUSEMOVE WM_MOUSEFIRST #define WM_LBUTTONDOWN 0x0201 #define WM_LBUTTONUP 0x0202 #define WM_LBUTTONDBLCLK 0x0203 #define WM_RBUTTONDOWN 0x0204 #define WM_RBUTTONUP 0x0205 #define WM_RBUTTONDBLCLK 0x0206 #define WM_MBUTTONDOWN 0x0207 #define WM_MBUTTONUP 0x0208 #define WM_MBUTTONDBLCLK 0x0209 #define WM_MOUSEWHEEL 0x020A #define WM_XBUTTONDOWN 0x020B #define WM_XBUTTONUP 0x020C #define WM_XBUTTONDBLCLK 0x020D #define WM_MOUSEHWHEEL 0x020E #define WM_MOUSELAST WM_MOUSEHWHEEL /* Macros for the mouse messages */ #define WHEEL_DELTA 120 #define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) #define WHEEL_PAGESCROLL (UINT_MAX) #define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) #define GET_NCHITTEST_WPARAM(wParam) ((short)LOWORD(wParam)) #define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam)) #define XBUTTON1 0x0001 #define XBUTTON2 0x0002 #define WM_PARENTNOTIFY 0x0210 #define WM_ENTERMENULOOP 0x0211 #define WM_EXITMENULOOP 0x0212 #define WM_NEXTMENU 0x0213 /* Win32 4.0 messages */ #define WM_SIZING 0x0214 #define WM_CAPTURECHANGED 0x0215 #define WM_MOVING 0x0216 #define WM_POWERBROADCAST 0x0218 #define WM_DEVICECHANGE 0x0219 /* MDI messages */ #define WM_MDICREATE 0x0220 #define WM_MDIDESTROY 0x0221 #define WM_MDIACTIVATE 0x0222 #define WM_MDIRESTORE 0x0223 #define WM_MDINEXT 0x0224 #define WM_MDIMAXIMIZE 0x0225 #define WM_MDITILE 0x0226 #define WM_MDICASCADE 0x0227 #define WM_MDIICONARRANGE 0x0228 #define WM_MDIGETACTIVE 0x0229 /* D&D messages */ #define WM_DROPOBJECT 0x022A /* DDK / Win16 */ #define WM_QUERYDROPOBJECT 0x022B /* DDK / Win16 */ #define WM_BEGINDRAG 0x022C /* DDK / Win16 */ #define WM_DRAGLOOP 0x022D /* DDK / Win16 */ #define WM_DRAGSELECT 0x022E /* DDK / Win16 */ #define WM_DRAGMOVE 0x022F /* DDK / Win16 */ #define WM_MDISETMENU 0x0230 #define WM_ENTERSIZEMOVE 0x0231 #define WM_EXITSIZEMOVE 0x0232 #define WM_DROPFILES 0x0233 #define WM_MDIREFRESHMENU 0x0234 #define WM_POINTERDEVICECHANGE 0x0238 #define WM_POINTERDEVICEINRANGE 0x0239 #define WM_POINTERDEVICEOUTOFRANGE 0x023a #define WM_TOUCH 0x0240 #define WM_NCPOINTERUPDATE 0x0241 #define WM_NCPOINTERDOWN 0x0242 #define WM_NCPOINTERUP 0x0243 #define WM_POINTERUPDATE 0x0245 #define WM_POINTERDOWN 0x0246 #define WM_POINTERUP 0x0247 #define WM_POINTERENTER 0x0249 #define WM_POINTERLEAVE 0x024a #define WM_POINTERACTIVATE 0x024b #define WM_POINTERCAPTURECHANGED 0x024c #define WM_TOUCHHITTESTING 0x024d #define WM_POINTERWHEEL 0x024e #define WM_POINTERHWHEEL 0x024f #define WM_POINTERROUTEDTO 0x0251 #define WM_POINTERROUTEDAWAY 0x0252 #define WM_POINTERROUTEDRELEASED 0x0253 /* Win32 4.0 messages for IME */ #define WM_IME_SETCONTEXT 0x0281 #define WM_IME_NOTIFY 0x0282 #define WM_IME_CONTROL 0x0283 #define WM_IME_COMPOSITIONFULL 0x0284 #define WM_IME_SELECT 0x0285 #define WM_IME_CHAR 0x0286 /* Win32 5.0 messages for IME */ #define WM_IME_REQUEST 0x0288 /* Win32 4.0 messages for IME */ #define WM_IME_KEYDOWN 0x0290 #define WM_IME_KEYUP 0x0291 #define WM_NCMOUSEHOVER 0x02A0 #define WM_MOUSEHOVER 0x02A1 #define WM_MOUSELEAVE 0x02A3 #define WM_NCMOUSELEAVE 0x02A2 #define WM_WTSSESSION_CHANGE 0x02B1 #define WM_TABLET_FIRST 0x02c0 #define WM_TABLET_LAST 0x02df #define WM_DPICHANGED 0x02e0 #define WM_DPICHANGED_BEFOREPARENT 0x02e2 #define WM_DPICHANGED_AFTERPARENT 0x02e3 #define WM_GETDPISCALEDSIZE 0x02e4 /* Clipboard command messages */ #define WM_CUT 0x0300 #define WM_COPY 0x0301 #define WM_PASTE 0x0302 #define WM_CLEAR 0x0303 #define WM_UNDO 0x0304 /* Clipboard owner messages */ #define WM_RENDERFORMAT 0x0305 #define WM_RENDERALLFORMATS 0x0306 #define WM_DESTROYCLIPBOARD 0x0307 /* Clipboard viewer messages */ #define WM_DRAWCLIPBOARD 0x0308 #define WM_PAINTCLIPBOARD 0x0309 #define WM_VSCROLLCLIPBOARD 0x030A #define WM_SIZECLIPBOARD 0x030B #define WM_ASKCBFORMATNAME 0x030C #define WM_CHANGECBCHAIN 0x030D #define WM_HSCROLLCLIPBOARD 0x030E #define WM_QUERYNEWPALETTE 0x030F #define WM_PALETTEISCHANGING 0x0310 #define WM_PALETTECHANGED 0x0311 #define WM_HOTKEY 0x0312 #define WM_PRINT 0x0317 #define WM_PRINTCLIENT 0x0318 #define WM_APPCOMMAND 0x0319 #define WM_THEMECHANGED 0x031A #define WM_CLIPBOARDUPDATE 0x031D #define WM_DWMCOMPOSITIONCHANGED 0x031E #define WM_DWMNCRENDERINGCHANGED 0x031F #define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320 #define WM_DWMWINDOWMAXIMIZEDCHANGE 0x0321 #define WM_DWMSENDICONICTHUMBNAIL 0x0323 #define WM_DWMSENDICONICLIVEPREVIEWBITMAP 0x0326 #define WM_GETTITLEBARINFOEX 0x033F #define WM_HANDHELDFIRST 0x0358 #define WM_HANDHELDLAST 0x035F #define WM_AFXFIRST 0x0360 #define WM_AFXLAST 0x037F #define WM_PENWINFIRST 0x0380 #define WM_PENWINLAST 0x038F #define WM_USER 0x0400 #define WM_APP 0x8000 /* wParam for WM_SIZING message */ #define WMSZ_LEFT 1 #define WMSZ_RIGHT 2 #define WMSZ_TOP 3 #define WMSZ_TOPLEFT 4 #define WMSZ_TOPRIGHT 5 #define WMSZ_BOTTOM 6 #define WMSZ_BOTTOMLEFT 7 #define WMSZ_BOTTOMRIGHT 8 /* WM_NCHITTEST return codes */ #define HTERROR (-2) #define HTTRANSPARENT (-1) #define HTNOWHERE 0 #define HTCLIENT 1 #define HTCAPTION 2 #define HTSYSMENU 3 #define HTSIZE 4 #define HTGROWBOX HTSIZE #define HTMENU 5 #define HTHSCROLL 6 #define HTVSCROLL 7 #define HTMINBUTTON 8 #define HTREDUCE HTMINBUTTON #define HTMAXBUTTON 9 #define HTZOOM HTMAXBUTTON #define HTLEFT 10 #define HTSIZEFIRST HTLEFT #define HTRIGHT 11 #define HTTOP 12 #define HTTOPLEFT 13 #define HTTOPRIGHT 14 #define HTBOTTOM 15 #define HTBOTTOMLEFT 16 #define HTBOTTOMRIGHT 17 #define HTSIZELAST HTBOTTOMRIGHT #define HTBORDER 18 #define HTOBJECT 19 #define HTCLOSE 20 #define HTHELP 21 /* SendMessageTimeout flags */ #define SMTO_NORMAL 0x0000 #define SMTO_BLOCK 0x0001 #define SMTO_ABORTIFHUNG 0x0002 #define SMTO_NOTIMEOUTIFNOTHUNG 0x0008 #define SMTO_ERRORONEXIT 0x0020 /* WM_MOUSEACTIVATE return values */ #define MA_ACTIVATE 1 #define MA_ACTIVATEANDEAT 2 #define MA_NOACTIVATE 3 #define MA_NOACTIVATEANDEAT 4 /* WM_GETICON/WM_SETICON params values */ #define ICON_SMALL 0 #define ICON_BIG 1 #define ICON_SMALL2 2 /* WM_SIZE message wParam values */ #define SIZE_RESTORED 0 #define SIZE_MINIMIZED 1 #define SIZE_MAXIMIZED 2 #define SIZE_MAXSHOW 3 #define SIZE_MAXHIDE 4 #define SIZENORMAL SIZE_RESTORED #define SIZEICONIC SIZE_MINIMIZED #define SIZEFULLSCREEN SIZE_MAXIMIZED #define SIZEZOOMSHOW SIZE_MAXSHOW #define SIZEZOOMHIDE SIZE_MAXHIDE /* WM_NCCALCSIZE return flags */ #define WVR_ALIGNTOP 0x0010 #define WVR_ALIGNLEFT 0x0020 #define WVR_ALIGNBOTTOM 0x0040 #define WVR_ALIGNRIGHT 0x0080 #define WVR_HREDRAW 0x0100 #define WVR_VREDRAW 0x0200 #define WVR_REDRAW (WVR_HREDRAW | WVR_VREDRAW) #define WVR_VALIDRECTS 0x0400 /* Key status flags for mouse events */ #ifndef NOKEYSTATES #define MK_LBUTTON 0x0001 #define MK_RBUTTON 0x0002 #define MK_SHIFT 0x0004 #define MK_CONTROL 0x0008 #define MK_MBUTTON 0x0010 #define MK_XBUTTON1 0x0020 #define MK_XBUTTON2 0x0040 #endif /* NOKEYSTATES */ #ifndef NOTRACKMOUSEEVENT #define TME_HOVER 0x00000001 #define TME_LEAVE 0x00000002 #define TME_NONCLIENT 0x00000010 #define TME_QUERY 0x40000000 #define TME_CANCEL 0x80000000 #define HOVER_DEFAULT 0xFFFFFFFF #endif /* NOTRACKMOUSEEVENT */ #endif /* NOWINMESSAGES */ /*** Window Styles ***/ #ifndef NOWINSTYLES #define WS_OVERLAPPED __MSABI_LONG(0x00000000) #define WS_POPUP __MSABI_LONG(0x80000000) #define WS_CHILD __MSABI_LONG(0x40000000) #define WS_MINIMIZE __MSABI_LONG(0x20000000) #define WS_VISIBLE __MSABI_LONG(0x10000000) #define WS_DISABLED __MSABI_LONG(0x08000000) #define WS_CLIPSIBLINGS __MSABI_LONG(0x04000000) #define WS_CLIPCHILDREN __MSABI_LONG(0x02000000) #define WS_MAXIMIZE __MSABI_LONG(0x01000000) #define WS_BORDER __MSABI_LONG(0x00800000) #define WS_DLGFRAME __MSABI_LONG(0x00400000) #define WS_VSCROLL __MSABI_LONG(0x00200000) #define WS_HSCROLL __MSABI_LONG(0x00100000) #define WS_SYSMENU __MSABI_LONG(0x00080000) #define WS_THICKFRAME __MSABI_LONG(0x00040000) #define WS_GROUP __MSABI_LONG(0x00020000) #define WS_TABSTOP __MSABI_LONG(0x00010000) #define WS_MINIMIZEBOX __MSABI_LONG(0x00020000) #define WS_MAXIMIZEBOX __MSABI_LONG(0x00010000) #define WS_CAPTION (WS_BORDER | WS_DLGFRAME) #define WS_TILED WS_OVERLAPPED #define WS_ICONIC WS_MINIMIZE #define WS_SIZEBOX WS_THICKFRAME #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME| WS_MINIMIZEBOX | WS_MAXIMIZEBOX) #define WS_POPUPWINDOW (WS_POPUP | WS_BORDER | WS_SYSMENU) #define WS_CHILDWINDOW WS_CHILD #define WS_TILEDWINDOW WS_OVERLAPPEDWINDOW #endif /* NOWINSTYLES */ /*** Window extended styles ***/ #ifndef NOWINSTYLES #define WS_EX_DLGMODALFRAME __MSABI_LONG(0x00000001) #define WS_EX_DRAGDETECT __MSABI_LONG(0x00000002) /* Undocumented */ #define WS_EX_NOPARENTNOTIFY __MSABI_LONG(0x00000004) #define WS_EX_TOPMOST __MSABI_LONG(0x00000008) #define WS_EX_ACCEPTFILES __MSABI_LONG(0x00000010) #define WS_EX_TRANSPARENT __MSABI_LONG(0x00000020) #define WS_EX_MDICHILD __MSABI_LONG(0x00000040) #define WS_EX_TOOLWINDOW __MSABI_LONG(0x00000080) #define WS_EX_WINDOWEDGE __MSABI_LONG(0x00000100) #define WS_EX_CLIENTEDGE __MSABI_LONG(0x00000200) #define WS_EX_CONTEXTHELP __MSABI_LONG(0x00000400) #define WS_EX_RIGHT __MSABI_LONG(0x00001000) #define WS_EX_LEFT __MSABI_LONG(0x00000000) #define WS_EX_RTLREADING __MSABI_LONG(0x00002000) #define WS_EX_LTRREADING __MSABI_LONG(0x00000000) #define WS_EX_LEFTSCROLLBAR __MSABI_LONG(0x00004000) #define WS_EX_RIGHTSCROLLBAR __MSABI_LONG(0x00000000) #define WS_EX_CONTROLPARENT __MSABI_LONG(0x00010000) #define WS_EX_STATICEDGE __MSABI_LONG(0x00020000) #define WS_EX_APPWINDOW __MSABI_LONG(0x00040000) #define WS_EX_LAYERED __MSABI_LONG(0x00080000) #define WS_EX_NOINHERITLAYOUT __MSABI_LONG(0x00100000) #define WS_EX_LAYOUTRTL __MSABI_LONG(0x00400000) #define WS_EX_COMPOSITED __MSABI_LONG(0x02000000) #define WS_EX_NOACTIVATE __MSABI_LONG(0x08000000) #define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE) #define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST) #endif /* NOWINSTYLES */ /*** Class styles ***/ #ifndef NOWINSTYLES #define CS_VREDRAW 0x00000001 #define CS_HREDRAW 0x00000002 #define CS_KEYCVTWINDOW 0x00000004 /* DDK / Win16 */ #define CS_DBLCLKS 0x00000008 #define CS_OWNDC 0x00000020 #define CS_CLASSDC 0x00000040 #define CS_PARENTDC 0x00000080 #define CS_NOKEYCVT 0x00000100 /* DDK / Win16 */ #define CS_NOCLOSE 0x00000200 #define CS_SAVEBITS 0x00000800 #define CS_BYTEALIGNCLIENT 0x00001000 #define CS_BYTEALIGNWINDOW 0x00002000 #define CS_GLOBALCLASS 0x00004000 #define CS_IME 0x00010000 #define CS_DROPSHADOW 0x00020000 #endif /* NOWINSTYLES */ /*** Predefined Clipboard Formats ***/ #ifndef NOCLIPBOARD #define CF_TEXT 1 #define CF_BITMAP 2 #define CF_METAFILEPICT 3 #define CF_SYLK 4 #define CF_DIF 5 #define CF_TIFF 6 #define CF_OEMTEXT 7 #define CF_DIB 8 #define CF_PALETTE 9 #define CF_PENDATA 10 #define CF_RIFF 11 #define CF_WAVE 12 #define CF_UNICODETEXT 13 #define CF_ENHMETAFILE 14 #define CF_HDROP 15 #define CF_LOCALE 16 #define CF_DIBV5 17 #define CF_MAX 18 #define CF_OWNERDISPLAY 0x0080 #define CF_DSPTEXT 0x0081 #define CF_DSPBITMAP 0x0082 #define CF_DSPMETAFILEPICT 0x0083 #define CF_DSPENHMETAFILE 0x008E /* "Private" formats don't get GlobalFree()'d */ #define CF_PRIVATEFIRST 0x0200 #define CF_PRIVATELAST 0x02FF /* "GDIOBJ" formats do get DeleteObject()'d */ #define CF_GDIOBJFIRST 0x0300 #define CF_GDIOBJLAST 0x03FF #endif /* NOCLIPBOARD */ /*** Menu flags ***/ #ifndef NOMENUS #define MF_INSERT __MSABI_LONG(0x00000000) #define MF_CHANGE __MSABI_LONG(0x00000080) #define MF_APPEND __MSABI_LONG(0x00000100) #define MF_DELETE __MSABI_LONG(0x00000200) #define MF_REMOVE __MSABI_LONG(0x00001000) #define MF_END __MSABI_LONG(0x00000080) #define MF_ENABLED __MSABI_LONG(0x00000000) #define MF_GRAYED __MSABI_LONG(0x00000001) #define MF_DISABLED __MSABI_LONG(0x00000002) #define MF_STRING __MSABI_LONG(0x00000000) #define MF_BITMAP __MSABI_LONG(0x00000004) #define MF_UNCHECKED __MSABI_LONG(0x00000000) #define MF_CHECKED __MSABI_LONG(0x00000008) #define MF_POPUP __MSABI_LONG(0x00000010) #define MF_MENUBARBREAK __MSABI_LONG(0x00000020) #define MF_MENUBREAK __MSABI_LONG(0x00000040) #define MF_UNHILITE __MSABI_LONG(0x00000000) #define MF_HILITE __MSABI_LONG(0x00000080) #define MF_OWNERDRAW __MSABI_LONG(0x00000100) #define MF_USECHECKBITMAPS __MSABI_LONG(0x00000200) #define MF_BYCOMMAND __MSABI_LONG(0x00000000) #define MF_BYPOSITION __MSABI_LONG(0x00000400) #define MF_SEPARATOR __MSABI_LONG(0x00000800) #define MF_DEFAULT __MSABI_LONG(0x00001000) #define MF_SYSMENU __MSABI_LONG(0x00002000) #define MF_HELP __MSABI_LONG(0x00004000) #define MF_RIGHTJUSTIFY __MSABI_LONG(0x00004000) #define MF_MOUSESELECT __MSABI_LONG(0x00008000) /* Flags for extended menu item types */ #define MFT_STRING MF_STRING #define MFT_BITMAP MF_BITMAP #define MFT_MENUBARBREAK MF_MENUBARBREAK #define MFT_MENUBREAK MF_MENUBREAK #define MFT_OWNERDRAW MF_OWNERDRAW #define MFT_RADIOCHECK __MSABI_LONG(0x00000200) #define MFT_SEPARATOR MF_SEPARATOR #define MFT_RIGHTORDER __MSABI_LONG(0x00002000) #define MFT_RIGHTJUSTIFY MF_RIGHTJUSTIFY /* Flags for extended menu item states */ #define MFS_GRAYED __MSABI_LONG(0x00000003) #define MFS_DISABLED MFS_GRAYED #define MFS_CHECKED MF_CHECKED #define MFS_HILITE MF_HILITE #define MFS_ENABLED MF_ENABLED #define MFS_UNCHECKED MF_UNCHECKED #define MFS_UNHILITE MF_UNHILITE #define MFS_DEFAULT MF_DEFAULT /* DDK / Win16 defines */ #define MFS_MASK __MSABI_LONG(0x0000108B) #define MFS_HOTTRACKDRAWN __MSABI_LONG(0x10000000) #define MFS_CACHEDBMP __MSABI_LONG(0x20000000) #define MFS_BOTTOMGAPDROP __MSABI_LONG(0x40000000) #define MFS_TOPGAPDROP __MSABI_LONG(0x80000000) #define MFS_GAPDROP (MFS_BOTTOMGAPDROP | MFS_TOPGAPDROP) #endif /* NOMENUS */ /*** WM_SYSCOMMAND parameters ***/ #ifndef NOSYSCOMMANDS /* At least HP-UX defines it in /usr/include/sys/signal.h */ # ifdef SC_SIZE # undef SC_SIZE # endif #define SC_SIZE 0xf000 #define SC_MOVE 0xf010 #define SC_MINIMIZE 0xf020 #define SC_MAXIMIZE 0xf030 #define SC_NEXTWINDOW 0xf040 #define SC_PREVWINDOW 0xf050 #define SC_CLOSE 0xf060 #define SC_VSCROLL 0xf070 #define SC_HSCROLL 0xf080 #define SC_MOUSEMENU 0xf090 #define SC_KEYMENU 0xf100 #define SC_ARRANGE 0xf110 #define SC_RESTORE 0xf120 #define SC_TASKLIST 0xf130 #define SC_SCREENSAVE 0xf140 #define SC_HOTKEY 0xf150 /* Win32 4.0 */ #define SC_DEFAULT 0xf160 #define SC_MONITORPOWER 0xf170 #define SC_CONTEXTHELP 0xf180 #define SC_SEPARATOR 0xf00f #define GET_SC_WPARAM(wParam) ((int)wParam & 0xfff0) #define SCF_ISSECURE 0x0001 /* Obsolete names */ #define SC_ICON SC_MINIMIZE #define SC_ZOOM SC_MAXIMIZE #endif /* NOSYSCOMMANDS */ /*** OEM Resource Ordinal Numbers ***/ #ifdef OEMRESOURCE #define OBM_RDRVERT 32559 #define OBM_RDRHORZ 32660 #define OBM_RDR2DIM 32661 #define OBM_TRTYPE 32732 /* FIXME: Wine-only */ #define OBM_LFARROWI 32734 #define OBM_RGARROWI 32735 #define OBM_DNARROWI 32736 #define OBM_UPARROWI 32737 #define OBM_COMBO 32738 #define OBM_MNARROW 32739 #define OBM_LFARROWD 32740 #define OBM_RGARROWD 32741 #define OBM_DNARROWD 32742 #define OBM_UPARROWD 32743 #define OBM_RESTORED 32744 #define OBM_ZOOMD 32745 #define OBM_REDUCED 32746 #define OBM_RESTORE 32747 #define OBM_ZOOM 32748 #define OBM_REDUCE 32749 #define OBM_LFARROW 32750 #define OBM_RGARROW 32751 #define OBM_DNARROW 32752 #define OBM_UPARROW 32753 #define OBM_CLOSE 32754 #define OBM_OLD_RESTORE 32755 #define OBM_OLD_ZOOM 32756 #define OBM_OLD_REDUCE 32757 #define OBM_BTNCORNERS 32758 #define OBM_CHECKBOXES 32759 #define OBM_CHECK 32760 #define OBM_BTSIZE 32761 #define OBM_OLD_LFARROW 32762 #define OBM_OLD_RGARROW 32763 #define OBM_OLD_DNARROW 32764 #define OBM_OLD_UPARROW 32765 #define OBM_SIZE 32766 #define OBM_OLD_CLOSE 32767 #define OCR_NORMAL 32512 #define OCR_IBEAM 32513 #define OCR_WAIT 32514 #define OCR_CROSS 32515 #define OCR_UP 32516 #define OCR_PEN 32631 #define OCR_SIZE 32640 #define OCR_ICON 32641 #define OCR_SIZENWSE 32642 #define OCR_SIZENESW 32643 #define OCR_SIZEWE 32644 #define OCR_SIZENS 32645 #define OCR_SIZEALL 32646 #define OCR_ICOCUR 32647 #define OCR_NO 32648 #define OCR_HAND 32649 #define OCR_APPSTARTING 32650 #define OCR_HELP 32651 /* DDK / Win16 */ #define OCR_RDRVERT 32652 /* DDK / Win16 */ #define OCR_RDRHORZ 32653 /* DDK / Win16 */ #define OCR_RDR2DIM 32654 /* DDK / Win16 */ #define OCR_RDRNORTH 32655 /* DDK / Win16 */ #define OCR_RDRSOUTH 32656 /* DDK / Win16 */ #define OCR_RDRWEST 32657 /* DDK / Win16 */ #define OCR_RDREAST 32658 /* DDK / Win16 */ #define OCR_RDRNORTHWEST 32659 /* DDK / Win16 */ #define OCR_RDRNORTHEAST 32660 /* DDK / Win16 */ #define OCR_RDRSOUTHWEST 32661 /* DDK / Win16 */ #define OCR_RDRSOUTHEAST 32662 /* DDK / Win16 */ #define OIC_SAMPLE 32512 #define OIC_HAND 32513 #define OIC_ERROR OIC_HAND #define OIC_QUES 32514 #define OIC_BANG 32515 #define OIC_WARNING OIC_BANG #define OIC_NOTE 32516 #define OIC_INFORMATION OIC_NOTE #define OIC_WINLOGO 32517 #define OIC_SHIELD 32518 #endif /* OEMRESOURCE */ /*** Predefined resources ***/ #ifndef NOICONS #define IDI_APPLICATION MAKEINTRESOURCE(32512) #define IDI_HAND MAKEINTRESOURCE(32513) #define IDI_QUESTION MAKEINTRESOURCE(32514) #define IDI_EXCLAMATION MAKEINTRESOURCE(32515) #define IDI_ASTERISK MAKEINTRESOURCE(32516) #define IDI_WINLOGO MAKEINTRESOURCE(32517) #define IDI_SHIELD MAKEINTRESOURCE(32518) #define IDI_WARNING IDI_EXCLAMATION #define IDI_ERROR IDI_HAND #define IDI_INFORMATION IDI_ASTERISK #endif /* NOICONS */ /*** Standard dialog button IDs ***/ #define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7 #define IDCLOSE 8 #define IDHELP 9 #define IDTRYAGAIN 10 #define IDCONTINUE 11 #ifndef IDTIMEOUT #define IDTIMEOUT 32000 #endif /*** Edit control styles ***/ #ifndef NOWINSTYLES #define ES_LEFT __MSABI_LONG(0x00000000) #define ES_CENTER __MSABI_LONG(0x00000001) #define ES_RIGHT __MSABI_LONG(0x00000002) #define ES_MULTILINE __MSABI_LONG(0x00000004) #define ES_UPPERCASE __MSABI_LONG(0x00000008) #define ES_LOWERCASE __MSABI_LONG(0x00000010) #define ES_PASSWORD __MSABI_LONG(0x00000020) #define ES_AUTOVSCROLL __MSABI_LONG(0x00000040) #define ES_AUTOHSCROLL __MSABI_LONG(0x00000080) #define ES_NOHIDESEL __MSABI_LONG(0x00000100) #define ES_COMBO __MSABI_LONG(0x00000200) /* Undocumented. Parent is a combobox */ #define ES_OEMCONVERT __MSABI_LONG(0x00000400) #define ES_READONLY __MSABI_LONG(0x00000800) #define ES_WANTRETURN __MSABI_LONG(0x00001000) #define ES_NUMBER __MSABI_LONG(0x00002000) #endif /* NOWINSTYLES */ /*** Edit control messages ***/ #ifndef NOWINMESSAGES #define EM_GETSEL 0x00b0 #define EM_SETSEL 0x00b1 #define EM_GETRECT 0x00b2 #define EM_SETRECT 0x00b3 #define EM_SETRECTNP 0x00b4 #define EM_SCROLL 0x00b5 #define EM_LINESCROLL 0x00b6 #define EM_SCROLLCARET 0x00b7 #define EM_GETMODIFY 0x00b8 #define EM_SETMODIFY 0x00b9 #define EM_GETLINECOUNT 0x00ba #define EM_LINEINDEX 0x00bb #define EM_SETHANDLE 0x00bc #define EM_GETHANDLE 0x00bd #define EM_GETTHUMB 0x00be /* Unassigned 0x00bf and 0x00c0 */ #define EM_LINELENGTH 0x00c1 #define EM_REPLACESEL 0x00c2 #define EM_SETFONT 0x00c3 /* DDK / Win16 */ #define EM_GETLINE 0x00c4 #define EM_LIMITTEXT 0x00c5 #define EM_SETLIMITTEXT EM_LIMITTEXT #define EM_CANUNDO 0x00c6 #define EM_UNDO 0x00c7 #define EM_FMTLINES 0x00c8 #define EM_LINEFROMCHAR 0x00c9 #define EM_SETWORDBREAK 0x00ca /* DDK / Win16 */ #define EM_SETTABSTOPS 0x00cb #define EM_SETPASSWORDCHAR 0x00cc #define EM_EMPTYUNDOBUFFER 0x00cd #define EM_GETFIRSTVISIBLELINE 0x00ce #define EM_SETREADONLY 0x00cf #define EM_SETWORDBREAKPROC 0x00d0 #define EM_GETWORDBREAKPROC 0x00d1 #define EM_GETPASSWORDCHAR 0x00d2 #define EM_SETMARGINS 0x00d3 #define EM_GETMARGINS 0x00d4 #define EM_GETLIMITTEXT 0x00d5 #define EM_POSFROMCHAR 0x00d6 #define EM_CHARFROMPOS 0x00d7 #define EM_SETIMESTATUS 0x00d8 #define EM_GETIMESTATUS 0x00d9 #endif /* NOWINMESSAGES */ /*** Button control styles ***/ #define BS_PUSHBUTTON __MSABI_LONG(0x00000000) #define BS_DEFPUSHBUTTON __MSABI_LONG(0x00000001) #define BS_CHECKBOX __MSABI_LONG(0x00000002) #define BS_AUTOCHECKBOX __MSABI_LONG(0x00000003) #define BS_RADIOBUTTON __MSABI_LONG(0x00000004) #define BS_3STATE __MSABI_LONG(0x00000005) #define BS_AUTO3STATE __MSABI_LONG(0x00000006) #define BS_GROUPBOX __MSABI_LONG(0x00000007) #define BS_USERBUTTON __MSABI_LONG(0x00000008) #define BS_AUTORADIOBUTTON __MSABI_LONG(0x00000009) #define BS_PUSHBOX __MSABI_LONG(0x0000000A) #define BS_OWNERDRAW __MSABI_LONG(0x0000000B) #define BS_TYPEMASK __MSABI_LONG(0x0000000F) #define BS_LEFTTEXT __MSABI_LONG(0x00000020) #define BS_RIGHTBUTTON BS_LEFTTEXT #define BS_TEXT __MSABI_LONG(0x00000000) #define BS_ICON __MSABI_LONG(0x00000040) #define BS_BITMAP __MSABI_LONG(0x00000080) #define BS_LEFT __MSABI_LONG(0x00000100) #define BS_RIGHT __MSABI_LONG(0x00000200) #define BS_CENTER __MSABI_LONG(0x00000300) #define BS_TOP __MSABI_LONG(0x00000400) #define BS_BOTTOM __MSABI_LONG(0x00000800) #define BS_VCENTER __MSABI_LONG(0x00000C00) #define BS_PUSHLIKE __MSABI_LONG(0x00001000) #define BS_MULTILINE __MSABI_LONG(0x00002000) #define BS_NOTIFY __MSABI_LONG(0x00004000) #define BS_FLAT __MSABI_LONG(0x00008000) /*** Button notification codes ***/ #define BN_CLICKED 0 #define BN_PAINT 1 #define BN_HILITE 2 #define BN_PUSHED BN_HILITE #define BN_UNHILITE 3 #define BN_UNPUSHED BN_UNHILITE #define BN_DISABLE 4 #define BN_DOUBLECLICKED 5 #define BN_DBLCLK BN_DOUBLECLICKED #define BN_SETFOCUS 6 #define BN_KILLFOCUS 7 /*** Win32 button control messages ***/ #define BM_GETCHECK 0x00f0 #define BM_SETCHECK 0x00f1 #define BM_GETSTATE 0x00f2 #define BM_SETSTATE 0x00f3 #define BM_SETSTYLE 0x00f4 #define BM_CLICK 0x00f5 #define BM_GETIMAGE 0x00f6 #define BM_SETIMAGE 0x00f7 #define BM_SETDONTCLICK 0x00f8 /* Button states */ #define BST_UNCHECKED 0x0000 #define BST_CHECKED 0x0001 #define BST_INDETERMINATE 0x0002 #define BST_PUSHED 0x0004 #define BST_FOCUS 0x0008 /*** Static Control Styles ***/ #define SS_LEFT __MSABI_LONG(0x00000000) #define SS_CENTER __MSABI_LONG(0x00000001) #define SS_RIGHT __MSABI_LONG(0x00000002) #define SS_ICON __MSABI_LONG(0x00000003) #define SS_BLACKRECT __MSABI_LONG(0x00000004) #define SS_GRAYRECT __MSABI_LONG(0x00000005) #define SS_WHITERECT __MSABI_LONG(0x00000006) #define SS_BLACKFRAME __MSABI_LONG(0x00000007) #define SS_GRAYFRAME __MSABI_LONG(0x00000008) #define SS_WHITEFRAME __MSABI_LONG(0x00000009) #define SS_USERITEM __MSABI_LONG(0x0000000A) #define SS_SIMPLE __MSABI_LONG(0x0000000B) #define SS_LEFTNOWORDWRAP __MSABI_LONG(0x0000000C) #define SS_OWNERDRAW __MSABI_LONG(0x0000000D) #define SS_BITMAP __MSABI_LONG(0x0000000E) #define SS_ENHMETAFILE __MSABI_LONG(0x0000000F) #define SS_ETCHEDHORZ __MSABI_LONG(0x00000010) #define SS_ETCHEDVERT __MSABI_LONG(0x00000011) #define SS_ETCHEDFRAME __MSABI_LONG(0x00000012) #define SS_TYPEMASK __MSABI_LONG(0x0000001F) #define SS_REALSIZECONTROL __MSABI_LONG(0x00000040) #define SS_NOPREFIX __MSABI_LONG(0x00000080) #define SS_NOTIFY __MSABI_LONG(0x00000100) #define SS_CENTERIMAGE __MSABI_LONG(0x00000200) #define SS_RIGHTJUST __MSABI_LONG(0x00000400) #define SS_REALSIZEIMAGE __MSABI_LONG(0x00000800) #define SS_SUNKEN __MSABI_LONG(0x00001000) #define SS_EDITCONTROL __MSABI_LONG(0x00002000) #define SS_ENDELLIPSIS __MSABI_LONG(0x00004000) #define SS_PATHELLIPSIS __MSABI_LONG(0x00008000) #define SS_WORDELLIPSIS __MSABI_LONG(0x0000C000) #define SS_ELLIPSISMASK SS_WORDELLIPSIS /*** Dialog styles ***/ #define DS_ABSALIGN __MSABI_LONG(0x00000001) #define DS_SYSMODAL __MSABI_LONG(0x00000002) #define DS_3DLOOK __MSABI_LONG(0x00000004) /* win95 */ #define DS_FIXEDSYS __MSABI_LONG(0x00000008) /* win95 */ #define DS_NOFAILCREATE __MSABI_LONG(0x00000010) /* win95 */ #define DS_LOCALEDIT __MSABI_LONG(0x00000020) #define DS_SETFONT __MSABI_LONG(0x00000040) #define DS_MODALFRAME __MSABI_LONG(0x00000080) #define DS_NOIDLEMSG __MSABI_LONG(0x00000100) #define DS_SETFOREGROUND __MSABI_LONG(0x00000200) /* win95 */ #define DS_CONTROL __MSABI_LONG(0x00000400) /* win95 */ #define DS_CENTER __MSABI_LONG(0x00000800) /* win95 */ #define DS_CENTERMOUSE __MSABI_LONG(0x00001000) /* win95 */ #define DS_CONTEXTHELP __MSABI_LONG(0x00002000) /* win95 */ #define DS_USEPIXELS __MSABI_LONG(0x00008000) #define DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS) /*** Listbox styles ***/ #ifndef NOWINSTYLES #define LBS_NOTIFY __MSABI_LONG(0x00000001) #define LBS_SORT __MSABI_LONG(0x00000002) #define LBS_NOREDRAW __MSABI_LONG(0x00000004) #define LBS_MULTIPLESEL __MSABI_LONG(0x00000008) #define LBS_OWNERDRAWFIXED __MSABI_LONG(0x00000010) #define LBS_OWNERDRAWVARIABLE __MSABI_LONG(0x00000020) #define LBS_HASSTRINGS __MSABI_LONG(0x00000040) #define LBS_USETABSTOPS __MSABI_LONG(0x00000080) #define LBS_NOINTEGRALHEIGHT __MSABI_LONG(0x00000100) #define LBS_MULTICOLUMN __MSABI_LONG(0x00000200) #define LBS_WANTKEYBOARDINPUT __MSABI_LONG(0x00000400) #define LBS_EXTENDEDSEL __MSABI_LONG(0x00000800) #define LBS_DISABLENOSCROLL __MSABI_LONG(0x00001000) #define LBS_NODATA __MSABI_LONG(0x00002000) #define LBS_NOSEL __MSABI_LONG(0x00004000) #define LBS_COMBOBOX __MSABI_LONG(0x00008000) #define LBS_STANDARD (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER) #endif /* NOWINSTYLES */ /*** Combo box styles ***/ #ifndef NOWINSTYLES #define CBS_SIMPLE __MSABI_LONG(0x00000001) #define CBS_DROPDOWN __MSABI_LONG(0x00000002) #define CBS_DROPDOWNLIST __MSABI_LONG(0x00000003) #define CBS_OWNERDRAWFIXED __MSABI_LONG(0x00000010) #define CBS_OWNERDRAWVARIABLE __MSABI_LONG(0x00000020) #define CBS_AUTOHSCROLL __MSABI_LONG(0x00000040) #define CBS_OEMCONVERT __MSABI_LONG(0x00000080) #define CBS_SORT __MSABI_LONG(0x00000100) #define CBS_HASSTRINGS __MSABI_LONG(0x00000200) #define CBS_NOINTEGRALHEIGHT __MSABI_LONG(0x00000400) #define CBS_DISABLENOSCROLL __MSABI_LONG(0x00000800) #define CBS_UPPERCASE __MSABI_LONG(0x00002000) #define CBS_LOWERCASE __MSABI_LONG(0x00004000) #endif /* NOWINSTYLES */ /*** Scrollbar styles ***/ #ifndef NOWINSTYLES #define SBS_HORZ __MSABI_LONG(0x00000000) #define SBS_VERT __MSABI_LONG(0x00000001) #define SBS_TOPALIGN __MSABI_LONG(0x00000002) #define SBS_LEFTALIGN __MSABI_LONG(0x00000002) #define SBS_BOTTOMALIGN __MSABI_LONG(0x00000004) #define SBS_RIGHTALIGN __MSABI_LONG(0x00000004) #define SBS_SIZEBOXTOPLEFTALIGN __MSABI_LONG(0x00000002) #define SBS_SIZEBOXBOTTOMRIGHTALIGN __MSABI_LONG(0x00000004) #define SBS_SIZEBOX __MSABI_LONG(0x00000008) #define SBS_SIZEGRIP __MSABI_LONG(0x00000010) #endif /* NOWINSTYLES */ /*** WinHelp commands ***/ #define HELP_CONTEXT __MSABI_LONG(0x00000001) #define HELP_QUIT __MSABI_LONG(0x00000002) #define HELP_INDEX __MSABI_LONG(0x00000003) #define HELP_CONTENTS HELP_INDEX #define HELP_HELPONHELP __MSABI_LONG(0x00000004) #define HELP_SETINDEX __MSABI_LONG(0x00000005) #define HELP_SETCONTENTS HELP_SETINDEX #define HELP_CONTEXTPOPUP __MSABI_LONG(0x00000008) #define HELP_FORCEFILE __MSABI_LONG(0x00000009) #define HELP_KEY __MSABI_LONG(0x00000101) #define HELP_COMMAND __MSABI_LONG(0x00000102) #define HELP_PARTIALKEY __MSABI_LONG(0x00000105) #define HELP_MULTIKEY __MSABI_LONG(0x00000201) #define HELP_SETWINPOS __MSABI_LONG(0x00000203) #define HELP_CONTEXTMENU 0x000a #define HELP_FINDER 0x000b #define HELP_WM_HELP 0x000c #define HELP_SETPOPUP_POS 0x000d #define HELP_TCARD_DATA 0x0010 #define HELP_TCARD_OTHER_CALLER 0x0011 #define HELP_TCARD 0x8000 #define IDH_NO_HELP 28440 #define IDH_MISSING_CONTEXT 28441 #define IDH_GENERIC_HELP_BUTTON 28442 #define IDH_OK 28443 #define IDH_CANCEL 28444 #define IDH_HELP 28445 ================================================ FILE: winecrt0/CMakeLists.txt ================================================ file(GLOB SOURCE *.c) add_library(winecrt0 ${SOURCE}) include_directories(../wine) add_definitions(-D_X86_ -D__i386__ -D__WINESRC__ -DNtCurrentTeb=NtCurrentTeb__) ================================================ FILE: winecrt0/crt0_private.h ================================================ /* * crt0 library private definitions * * Copyright 2005 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_CRT0_PRIVATE_H__ #define __WINE_CRT0_PRIVATE_H__ #if defined(__APPLE__) || defined(__ANDROID__) static inline void _init(int argc, char **argv, char **envp ) { /* nothing */ } static inline void _fini(void) { /* nothing */ } #else #define DECLSPEC_HIDDEN extern void _init(int argc, char **argv, char **envp ) DECLSPEC_HIDDEN; extern void _fini(void) DECLSPEC_HIDDEN; #endif enum init_state { NO_INIT_DONE, /* no initialization done yet */ DLL_REGISTERED, /* the dll has been registered */ CONSTRUCTORS_DONE /* the constructors have been run (implies dll registered too) */ }; extern enum init_state __wine_spec_init_state DECLSPEC_HIDDEN; #endif /* __WINE_CRT0_PRIVATE_H__ */ ================================================ FILE: winecrt0/dll_entry.c ================================================ /* * Default entry point for a dll * * Copyright 2005 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "wine/library.h" #include "crt0_private.h" extern BOOL WINAPI DECLSPEC_HIDDEN DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ); BOOL /*WINAPI*/ DECLSPEC_HIDDEN __wine_spec_dll_entry( HINSTANCE inst, DWORD reason, LPVOID reserved ) { /*static BOOL call_fini; BOOL ret; if (reason == DLL_PROCESS_ATTACH && __wine_spec_init_state != CONSTRUCTORS_DONE) { call_fini = TRUE; _init( __wine_main_argc, __wine_main_argv, NULL ); } ret = DllMain( inst, reason, reserved ); if (reason == DLL_PROCESS_DETACH && call_fini) _fini(); return ret; */ return 0; } ================================================ FILE: winecrt0/exception.c ================================================ /* * Support functions for Wine exception handling * * Copyright (c) 1999, 2010 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _MSC_VER #include "config.h" #include #include "winternl.h" #include "wine/exception.h" #if defined(__x86_64__) && defined(__ASM_GLOBAL_FUNC) extern void __wine_unwind_trampoline(void); /* we need an extra call to make sure the stack is correctly aligned */ __ASM_GLOBAL_FUNC( __wine_unwind_trampoline, "callq *%rax" ); #endif /* wrapper for RtlUnwind since it clobbers registers on Windows */ void __wine_rtl_unwind( EXCEPTION_REGISTRATION_RECORD* frame, EXCEPTION_RECORD *record, void (*target)(void) ) { #if defined(__GNUC__) && defined(__i386__) int dummy1, dummy2, dummy3, dummy4; __asm__ __volatile__("pushl %%ebp\n\t" "pushl %%ebx\n\t" "pushl $0\n\t" "pushl %3\n\t" "pushl %2\n\t" "pushl %1\n\t" "call *%0\n\t" "popl %%ebx\n\t" "popl %%ebp" : "=a" (dummy1), "=S" (dummy2), "=D" (dummy3), "=c" (dummy4) : "0" (RtlUnwind), "1" (frame), "2" (target), "3" (record) : "edx", "memory" ); #elif defined(__x86_64__) && defined(__ASM_GLOBAL_FUNC) RtlUnwind( frame, __wine_unwind_trampoline, record, target ); #else RtlUnwind( frame, target, record, 0 ); #endif for (;;) target(); } static void DECLSPEC_NORETURN unwind_target(void) { __WINE_FRAME *wine_frame = (__WINE_FRAME *)__wine_get_frame(); __wine_pop_frame( &wine_frame->frame ); siglongjmp( wine_frame->jmp, 1 ); } static void DECLSPEC_NORETURN unwind_frame( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame ) { __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame; /* hack to make GetExceptionCode() work in handler */ wine_frame->ExceptionCode = record->ExceptionCode; wine_frame->ExceptionRecord = wine_frame; __wine_rtl_unwind( frame, record, unwind_target ); } DWORD __wine_exception_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) { __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame; EXCEPTION_POINTERS ptrs; if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL)) return ExceptionContinueSearch; ptrs.ExceptionRecord = record; ptrs.ContextRecord = context; switch(wine_frame->u.filter( &ptrs )) { case EXCEPTION_CONTINUE_SEARCH: return ExceptionContinueSearch; case EXCEPTION_CONTINUE_EXECUTION: return ExceptionContinueExecution; case EXCEPTION_EXECUTE_HANDLER: break; } unwind_frame( record, frame ); } DWORD __wine_exception_ctx_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) { __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame; EXCEPTION_POINTERS ptrs; if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL)) return ExceptionContinueSearch; ptrs.ExceptionRecord = record; ptrs.ContextRecord = context; switch(wine_frame->u.filter_ctx( &ptrs, wine_frame->ctx )) { case EXCEPTION_CONTINUE_SEARCH: return ExceptionContinueSearch; case EXCEPTION_CONTINUE_EXECUTION: return ExceptionContinueExecution; case EXCEPTION_EXECUTE_HANDLER: break; } unwind_frame( record, frame ); } DWORD __wine_exception_handler_page_fault( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) { if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL)) return ExceptionContinueSearch; if (record->ExceptionCode != STATUS_ACCESS_VIOLATION) return ExceptionContinueSearch; unwind_frame( record, frame ); } DWORD __wine_exception_handler_all( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) { if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL)) return ExceptionContinueSearch; unwind_frame( record, frame ); } DWORD __wine_finally_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) { if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)) { __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame; wine_frame->u.finally_func( FALSE ); } return ExceptionContinueSearch; } DWORD __wine_finally_ctx_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame, CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher ) { if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)) { __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame; wine_frame->u.finally_func_ctx( FALSE, wine_frame->ctx ); } return ExceptionContinueSearch; } #endif ================================================ FILE: winecrt0/exe16_entry.c ================================================ /* * Default entry point for a 16-bit exe * * Copyright 2009 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "wownt32.h" #include "wine/winbase16.h" #define DECLSPEC_HIDDEN #include "../krnl386/kernel16_private.h" #ifdef __i386__ extern WORD WINAPI WinMain16( HINSTANCE16 inst, HINSTANCE16 prev, LPSTR cmdline, WORD show ); void WINAPI DECLSPEC_HIDDEN __wine_spec_exe16_entry( CONTEXT *context ) { HMODULE krnl386 = LoadLibraryA("krnl386.exe16"); PDB16 *psp; WORD len; LPSTR cmdline; /*InitTask16*/((void(WINAPI*)(CONTEXT*))GetProcAddress(krnl386, "InitTask16"))( context ); psp = /*MapSL*/((LPVOID(WINAPI*)(DWORD))GetProcAddress(krnl386, "MapSL"))( WOWGlobalLock16( context->SegEs )); len = psp->cmdLine[0]; cmdline = HeapAlloc( GetProcessHeap(), 0, len + 1 ); memcpy( cmdline, psp->cmdLine + 1, len ); cmdline[len] = 0; SetEvent(kernel_get_thread_data()->idle_event); ExitThread( WinMain16( context->Edi, context->Esi, cmdline, context->Edx )); } #endif /* __i386__ */ ================================================ FILE: winecrt0/init.c ================================================ /* * Initialization code for spec files * * Copyright 2005 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "wine/library.h" #include "crt0_private.h" enum init_state __wine_spec_init_state = NO_INIT_DONE; extern const IMAGE_NT_HEADERS __wine_spec_nt_header; extern const char __wine_spec_file_name[]; void DECLSPEC_HIDDEN __wine_spec_init(void) { __wine_spec_init_state = DLL_REGISTERED; //__wine_dll_register( &__wine_spec_nt_header, __wine_spec_file_name ); } void DECLSPEC_HIDDEN __wine_spec_init_ctor(void) { if (__wine_spec_init_state == NO_INIT_DONE) __wine_spec_init(); __wine_spec_init_state = CONSTRUCTORS_DONE; } ================================================ FILE: winecrt0/stub.c ================================================ /* * Common handling of stub functions * * Copyright 2005 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include "windef.h" #include "winbase.h" #include "wine/exception.h" void DECLSPEC_HIDDEN __wine_spec_unimplemented_stub( const char *module, const char *function ) { ULONG_PTR args[2]; args[0] = (ULONG_PTR)module; args[1] = (ULONG_PTR)function; for (;;) RaiseException( EXCEPTION_WINE_STUB, EXCEPTION_NONCONTINUABLE, 2, args ); } ================================================ FILE: winecrt0/winecrt0.vcxproj ================================================  Debug Win32 Release Win32 Debug x64 Release x64 {583655C3-2633-4597-BD31-C5AA1EC78AD2} Win32Proj winecrt0 10.0.17134.0 StaticLibrary true v141 Unicode StaticLibrary false v141 true Unicode StaticLibrary true v141 Unicode StaticLibrary false v141 true Unicode Level3 Disabled WIN32;_DEBUG;_LIB;WIN32;_WINDOWS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows $(OutDir)libwine.lib Level3 Disabled _DEBUG;_LIB;%(PreprocessorDefinitions) Windows Level3 MaxSpeed true true WIN32;NDEBUG;_LIB;WIN32;_WINDOWS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true true $(OutDir)libwine.lib Level3 MaxSpeed true true NDEBUG;_LIB;%(PreprocessorDefinitions) Windows true true ================================================ FILE: winecrt0/winecrt0.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ヘッダー ファイル ================================================ FILE: wing/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(wing SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/wing.def wing.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(wing.dll16 wing) target_link_libraries(wing libwine winecrt0 krnl386) set_target_properties(wing PROPERTIES SUFFIX ".dll16") ================================================ FILE: wing/Makefile.in ================================================ MODULE = wing.dll16 IMPORTS = gdi32 EXTRADLLFLAGS = -m16 C_SRCS = wing.c ================================================ FILE: wing/wing.c ================================================ /* * WinG support * * Copyright (C) Robert Pouliot * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "wownt32.h" #include "wine/wingdi16.h" #include "wine/list.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(wing); struct dib_segptr_bits { struct list entry; HBITMAP bmp; WORD sel; WORD count; BOOL topdown; }; static struct list dib_segptr_list = LIST_INIT( dib_segptr_list ); /* remove saved bits for bitmaps that no longer exist */ static void cleanup_segptr_bits(void) { unsigned int i; struct dib_segptr_bits *bits, *next; LIST_FOR_EACH_ENTRY_SAFE( bits, next, &dib_segptr_list, struct dib_segptr_bits, entry ) { if (GetObjectType( bits->bmp ) == OBJ_BITMAP) continue; for (i = 0; i < bits->count; i++) FreeSelector16( bits->sel + (i << __AHSHIFT) ); list_remove( &bits->entry ); HeapFree( GetProcessHeap(), 0, bits ); } } static SEGPTR alloc_segptr_bits( HBITMAP bmp, void *bits32, BOOL topdown ) { DIBSECTION dib; unsigned int i, size; struct dib_segptr_bits *bits; cleanup_segptr_bits(); if (!(bits = HeapAlloc( GetProcessHeap(), 0, sizeof(*bits) ))) return 0; GetObjectW( bmp, sizeof(dib), &dib ); size = dib.dsBm.bmHeight * dib.dsBm.bmWidthBytes; /* calculate number of sel's needed for size with 64K steps */ bits->bmp = bmp; bits->count = (size + 0xffff) / 0x10000; bits->sel = AllocSelectorArray16( bits->count ); bits->topdown = topdown; for (i = 0; i < bits->count; i++) { SetSelectorBase(bits->sel + (i << __AHSHIFT), (DWORD)bits32 + i * 0x10000); SetSelectorLimit16(bits->sel + (i << __AHSHIFT), size - 1); /* yep, limit is correct */ size -= 0x10000; } list_add_head( &dib_segptr_list, &bits->entry ); return MAKESEGPTR( bits->sel, 0 ); } /************************************************************************* * WING {WING} * * The Windows Game dll provides a number of functions designed to allow * programmers to bypass Gdi and write directly to video memory. The intention * was to bolster the use of Windows as a gaming platform and remove the * need for Dos based games using 32 bit Dos extenders. * * This initial approach could not compete with the performance of Dos games * (such as Doom and Warcraft) at the time, and so this dll was eventually * superseded by DirectX. It should not be used by new applications, and is * provided only for compatibility with older Windows programs. */ typedef enum WING_DITHER_TYPE { WING_DISPERSED_4x4, WING_DISPERSED_8x8, WING_CLUSTERED_4x4 } WING_DITHER_TYPE; /*********************************************************************** * WinGCreateDC (WING.1001) * * Create a new WinG device context. * * PARAMS * None. * * RETURNS * Success: A handle to the created device context. * Failure: A NULL handle. */ HDC16 WINAPI WinGCreateDC16(void) { TRACE("(void)\n"); return HDC_16( CreateCompatibleDC( 0 )); } /*********************************************************************** * WinGRecommendDIBFormat (WING.1002) * * Get the recommended format of bitmaps for the current display. * * PARAMS * bmpi [O] Destination for format information * * RETURNS * Success: TRUE. bmpi is filled with the best (fastest) bitmap format * Failure: FALSE, if bmpi is NULL. */ BOOL16 WINAPI WinGRecommendDIBFormat16(BITMAPINFO *bmpi) { TRACE("(%p)\n", bmpi); if (!bmpi) return FALSE; bmpi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmpi->bmiHeader.biWidth = 1; bmpi->bmiHeader.biHeight = 1; bmpi->bmiHeader.biPlanes = 1; bmpi->bmiHeader.biBitCount = 8; bmpi->bmiHeader.biCompression = BI_RGB; bmpi->bmiHeader.biSizeImage = 0; bmpi->bmiHeader.biXPelsPerMeter = 0; bmpi->bmiHeader.biYPelsPerMeter = 0; bmpi->bmiHeader.biClrUsed = 0; bmpi->bmiHeader.biClrImportant = 0; return TRUE; } /*********************************************************************** * WinGCreateBitmap (WING.1003) * * Create a new WinG bitmap. * * PARAMS * hdc [I] WinG device context * bmpi [I] Information about the bitmap * bits [I] Location of the bitmap image data * * RETURNS * Success: A handle to the created bitmap. * Failure: A NULL handle. */ HBITMAP16 WINAPI WinGCreateBitmap16(HDC16 hdc, BITMAPINFO *bmpi, SEGPTR *bits) { LPVOID bits32; HBITMAP hbitmap; LONG oldheight = bmpi->bmiHeader.biHeight; DWORD oldsize = bmpi->bmiHeader.biSizeImage; bmpi->bmiHeader.biSizeImage = 0; if (oldheight >= 32768) bmpi->bmiHeader.biHeight = (INT16)(oldheight & 0xffff); TRACE("(%d,%p,%p): create %dx%dx%d bitmap\n", hdc, bmpi, bits, bmpi->bmiHeader.biWidth, bmpi->bmiHeader.biHeight, bmpi->bmiHeader.biPlanes); hbitmap = CreateDIBSection( HDC_32(hdc), bmpi, DIB_RGB_COLORS, &bits32, 0, 0 ); if (hbitmap) { SEGPTR segptr = alloc_segptr_bits( hbitmap, bits32, (bmpi->bmiHeader.biHeight < 0) ); if (bits) *bits = segptr; } bmpi->bmiHeader.biHeight = oldheight; bmpi->bmiHeader.biSizeImage = oldsize; return HBITMAP_16(hbitmap); } /*********************************************************************** * WinGGetDIBPointer (WING.1004) */ SEGPTR WINAPI WinGGetDIBPointer16(HBITMAP16 hWinGBitmap, BITMAPINFO* bmpi) { struct dib_segptr_bits *bits; LIST_FOR_EACH_ENTRY( bits, &dib_segptr_list, struct dib_segptr_bits, entry ) if (HBITMAP_16(bits->bmp) == hWinGBitmap) { DIBSECTION dib; if (bmpi && (GetObjectA(bits->bmp, sizeof(DIBSECTION), &dib) == sizeof(DIBSECTION))) { memcpy(bmpi, &(dib.dsBmih), sizeof(BITMAPINFOHEADER)); if (bits->topdown) bmpi->bmiHeader.biHeight = -bmpi->bmiHeader.biHeight; } return MAKESEGPTR( bits->sel, 0 ); } return 0; } /*********************************************************************** * WinGSetDIBColorTable (WING.1006) * * Set all or part of the color table for a WinG device context. * * PARAMS * hdc [I] WinG device context * start [I] Start color * num [I] Number of entries to set * colors [I] Array of color data * * RETURNS * The number of entries set. */ UINT16 WINAPI WinGSetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num, RGBQUAD *colors) { TRACE("(%d,%d,%d,%p)\n", hdc, start, num, colors); return SetDIBColorTable( HDC_32(hdc), start, num, colors ); } /*********************************************************************** * WinGGetDIBColorTable (WING.1005) * * Get all or part of the color table for a WinG device context. * * PARAMS * hdc [I] WinG device context * start [I] Start color * num [I] Number of entries to set * colors [O] Destination for the array of color data * * RETURNS * The number of entries retrieved. */ UINT16 WINAPI WinGGetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num, RGBQUAD *colors) { TRACE("(%d,%d,%d,%p)\n", hdc, start, num, colors); return GetDIBColorTable( HDC_32(hdc), start, num, colors ); } typedef struct { WORD palVersion; WORD palNumEntries; PALETTEENTRY palPalEntry[256]; } logpalette_8bpp; static const logpalette_8bpp wing_halftone_pal = {0x300, 0x100, {{0x00,0x00,0x00,0x04}, {0x80,0x00,0x00,0x04}, {0x00,0x80,0x00,0x04}, {0x80,0x80,0x00,0x04}, {0x00,0x00,0x80,0x04}, {0x80,0x00,0x80,0x04}, {0x00,0x80,0x80,0x04}, {0xC0,0xC0,0xC0,0x04}, {0xC0,0xDC,0xC0,0x04}, {0xA6,0xCA,0xF0,0x04}, {0x04,0x04,0x04,0x04}, {0x08,0x08,0x08,0x04}, {0x0C,0x0C,0x0C,0x04}, {0x11,0x11,0x11,0x04}, {0x16,0x16,0x16,0x04}, {0x1C,0x1C,0x1C,0x04}, {0x22,0x22,0x22,0x04}, {0x29,0x29,0x29,0x04}, {0x55,0x55,0x55,0x04}, {0x4D,0x4D,0x4D,0x04}, {0x42,0x42,0x42,0x04}, {0x39,0x39,0x39,0x04}, {0x81,0x81,0x81,0x04}, {0x81,0x00,0x00,0x04}, {0x00,0x81,0x00,0x04}, {0x81,0x81,0x00,0x04}, {0x00,0x00,0x81,0x04}, {0x81,0x00,0x81,0x04}, {0x00,0x81,0x81,0x04}, {0x33,0x00,0x00,0x04}, {0x66,0x00,0x00,0x04}, {0x99,0x00,0x00,0x04}, {0xCC,0x00,0x00,0x04}, {0x00,0x33,0x00,0x04}, {0x33,0x33,0x00,0x04}, {0x66,0x33,0x00,0x04}, {0x99,0x33,0x00,0x04}, {0xCC,0x33,0x00,0x04}, {0xFF,0x33,0x00,0x04}, {0x00,0x66,0x00,0x04}, {0x33,0x66,0x00,0x04}, {0x66,0x66,0x00,0x04}, {0x99,0x66,0x00,0x04}, {0xCC,0x66,0x00,0x04}, {0xFF,0x66,0x00,0x04}, {0x00,0x99,0x00,0x04}, {0x33,0x99,0x00,0x04}, {0x66,0x99,0x00,0x04}, {0x99,0x99,0x00,0x04}, {0xCC,0x99,0x00,0x04}, {0xFF,0x99,0x00,0x04}, {0x00,0xCC,0x00,0x04}, {0x33,0xCC,0x00,0x04}, {0x66,0xCC,0x00,0x04}, {0x99,0xCC,0x00,0x04}, {0xCC,0xCC,0x00,0x04}, {0xFF,0xCC,0x00,0x04}, {0x66,0xFF,0x00,0x04}, {0x99,0xFF,0x00,0x04}, {0xCC,0xFF,0x00,0x04}, {0x00,0x00,0x33,0x04}, {0x33,0x00,0x33,0x04}, {0x66,0x00,0x33,0x04}, {0x99,0x00,0x33,0x04}, {0xCC,0x00,0x33,0x04}, {0xFF,0x00,0x33,0x04}, {0x00,0x33,0x33,0x04}, {0x33,0x33,0x33,0x04}, {0x66,0x33,0x33,0x04}, {0x99,0x33,0x33,0x04}, {0xCC,0x33,0x33,0x04}, {0xFF,0x33,0x33,0x04}, {0x00,0x66,0x33,0x04}, {0x33,0x66,0x33,0x04}, {0x66,0x66,0x33,0x04}, {0x99,0x66,0x33,0x04}, {0xCC,0x66,0x33,0x04}, {0xFF,0x66,0x33,0x04}, {0x00,0x99,0x33,0x04}, {0x33,0x99,0x33,0x04}, {0x66,0x99,0x33,0x04}, {0x99,0x99,0x33,0x04}, {0xCC,0x99,0x33,0x04}, {0xFF,0x99,0x33,0x04}, {0x00,0xCC,0x33,0x04}, {0x33,0xCC,0x33,0x04}, {0x66,0xCC,0x33,0x04}, {0x99,0xCC,0x33,0x04}, {0xCC,0xCC,0x33,0x04}, {0xFF,0xCC,0x33,0x04}, {0x33,0xFF,0x33,0x04}, {0x66,0xFF,0x33,0x04}, {0x99,0xFF,0x33,0x04}, {0xCC,0xFF,0x33,0x04}, {0xFF,0xFF,0x33,0x04}, {0x00,0x00,0x66,0x04}, {0x33,0x00,0x66,0x04}, {0x66,0x00,0x66,0x04}, {0x99,0x00,0x66,0x04}, {0xCC,0x00,0x66,0x04}, {0xFF,0x00,0x66,0x04}, {0x00,0x33,0x66,0x04}, {0x33,0x33,0x66,0x04}, {0x66,0x33,0x66,0x04}, {0x99,0x33,0x66,0x04}, {0xCC,0x33,0x66,0x04}, {0xFF,0x33,0x66,0x04}, {0x00,0x66,0x66,0x04}, {0x33,0x66,0x66,0x04}, {0x66,0x66,0x66,0x04}, {0x99,0x66,0x66,0x04}, {0xCC,0x66,0x66,0x04}, {0x00,0x99,0x66,0x04}, {0x33,0x99,0x66,0x04}, {0x66,0x99,0x66,0x04}, {0x99,0x99,0x66,0x04}, {0xCC,0x99,0x66,0x04}, {0xFF,0x99,0x66,0x04}, {0x00,0xCC,0x66,0x04}, {0x33,0xCC,0x66,0x04}, {0x99,0xCC,0x66,0x04}, {0xCC,0xCC,0x66,0x04}, {0xFF,0xCC,0x66,0x04}, {0x00,0xFF,0x66,0x04}, {0x33,0xFF,0x66,0x04}, {0x99,0xFF,0x66,0x04}, {0xCC,0xFF,0x66,0x04}, {0xFF,0x00,0xCC,0x04}, {0xCC,0x00,0xFF,0x04}, {0x00,0x99,0x99,0x04}, {0x99,0x33,0x99,0x04}, {0x99,0x00,0x99,0x04}, {0xCC,0x00,0x99,0x04}, {0x00,0x00,0x99,0x04}, {0x33,0x33,0x99,0x04}, {0x66,0x00,0x99,0x04}, {0xCC,0x33,0x99,0x04}, {0xFF,0x00,0x99,0x04}, {0x00,0x66,0x99,0x04}, {0x33,0x66,0x99,0x04}, {0x66,0x33,0x99,0x04}, {0x99,0x66,0x99,0x04}, {0xCC,0x66,0x99,0x04}, {0xFF,0x33,0x99,0x04}, {0x33,0x99,0x99,0x04}, {0x66,0x99,0x99,0x04}, {0x99,0x99,0x99,0x04}, {0xCC,0x99,0x99,0x04}, {0xFF,0x99,0x99,0x04}, {0x00,0xCC,0x99,0x04}, {0x33,0xCC,0x99,0x04}, {0x66,0xCC,0x66,0x04}, {0x99,0xCC,0x99,0x04}, {0xCC,0xCC,0x99,0x04}, {0xFF,0xCC,0x99,0x04}, {0x00,0xFF,0x99,0x04}, {0x33,0xFF,0x99,0x04}, {0x66,0xCC,0x99,0x04}, {0x99,0xFF,0x99,0x04}, {0xCC,0xFF,0x99,0x04}, {0xFF,0xFF,0x99,0x04}, {0x00,0x00,0xCC,0x04}, {0x33,0x00,0x99,0x04}, {0x66,0x00,0xCC,0x04}, {0x99,0x00,0xCC,0x04}, {0xCC,0x00,0xCC,0x04}, {0x00,0x33,0x99,0x04}, {0x33,0x33,0xCC,0x04}, {0x66,0x33,0xCC,0x04}, {0x99,0x33,0xCC,0x04}, {0xCC,0x33,0xCC,0x04}, {0xFF,0x33,0xCC,0x04}, {0x00,0x66,0xCC,0x04}, {0x33,0x66,0xCC,0x04}, {0x66,0x66,0x99,0x04}, {0x99,0x66,0xCC,0x04}, {0xCC,0x66,0xCC,0x04}, {0xFF,0x66,0x99,0x04}, {0x00,0x99,0xCC,0x04}, {0x33,0x99,0xCC,0x04}, {0x66,0x99,0xCC,0x04}, {0x99,0x99,0xCC,0x04}, {0xCC,0x99,0xCC,0x04}, {0xFF,0x99,0xCC,0x04}, {0x00,0xCC,0xCC,0x04}, {0x33,0xCC,0xCC,0x04}, {0x66,0xCC,0xCC,0x04}, {0x99,0xCC,0xCC,0x04}, {0xCC,0xCC,0xCC,0x04}, {0xFF,0xCC,0xCC,0x04}, {0x00,0xFF,0xCC,0x04}, {0x33,0xFF,0xCC,0x04}, {0x66,0xFF,0x99,0x04}, {0x99,0xFF,0xCC,0x04}, {0xCC,0xFF,0xCC,0x04}, {0xFF,0xFF,0xCC,0x04}, {0x33,0x00,0xCC,0x04}, {0x66,0x00,0xFF,0x04}, {0x99,0x00,0xFF,0x04}, {0x00,0x33,0xCC,0x04}, {0x33,0x33,0xFF,0x04}, {0x66,0x33,0xFF,0x04}, {0x99,0x33,0xFF,0x04}, {0xCC,0x33,0xFF,0x04}, {0xFF,0x33,0xFF,0x04}, {0x00,0x66,0xFF,0x04}, {0x33,0x66,0xFF,0x04}, {0x66,0x66,0xCC,0x04}, {0x99,0x66,0xFF,0x04}, {0xCC,0x66,0xFF,0x04}, {0xFF,0x66,0xCC,0x04}, {0x00,0x99,0xFF,0x04}, {0x33,0x99,0xFF,0x04}, {0x66,0x99,0xFF,0x04}, {0x99,0x99,0xFF,0x04}, {0xCC,0x99,0xFF,0x04}, {0xFF,0x99,0xFF,0x04}, {0x00,0xCC,0xFF,0x04}, {0x33,0xCC,0xFF,0x04}, {0x66,0xCC,0xFF,0x04}, {0x99,0xCC,0xFF,0x04}, {0xCC,0xCC,0xFF,0x04}, {0xFF,0xCC,0xFF,0x04}, {0x33,0xFF,0xFF,0x04}, {0x66,0xFF,0xCC,0x04}, {0x99,0xFF,0xFF,0x04}, {0xCC,0xFF,0xFF,0x04}, {0xFF,0x66,0x66,0x04}, {0x66,0xFF,0x66,0x04}, {0xFF,0xFF,0x66,0x04}, {0x66,0x66,0xFF,0x04}, {0xFF,0x66,0xFF,0x04}, {0x66,0xFF,0xFF,0x04}, {0xC1,0xC1,0xC1,0x04}, {0x5F,0x5F,0x5F,0x04}, {0x77,0x77,0x77,0x04}, {0x86,0x86,0x86,0x04}, {0x96,0x96,0x96,0x04}, {0xCB,0xCB,0xCB,0x04}, {0xB2,0xB2,0xB2,0x04}, {0xD7,0xD7,0xD7,0x04}, {0xDD,0xDD,0xDD,0x04}, {0xE3,0xE3,0xE3,0x04}, {0xEA,0xEA,0xEA,0x04}, {0xF1,0xF1,0xF1,0x04}, {0xF8,0xF8,0xF8,0x04}, {0xFF,0xFB,0xF0,0x04}, {0xA0,0xA0,0xA4,0x04}, {0x80,0x80,0x80,0x04}, {0xFF,0x00,0x00,0x04}, {0x00,0xFF,0x00,0x04}, {0xFF,0xFF,0x00,0x04}, {0x00,0x00,0xFF,0x04}, {0xFF,0x00,0xFF,0x04}, {0x00,0xFF,0xFF,0x04}, {0xFF,0xFF,0xFF,0x04}}}; /*********************************************************************** * WinGCreateHalfTonePalette (WING.1007) * * Create a half tone palette. * * PARAMS * None. * * RETURNS * Success: A handle to the created palette. * Failure: A NULL handle. */ HPALETTE16 WINAPI WinGCreateHalfTonePalette16(void) { HPALETTE16 ret = HPALETTE_16( CreatePalette( (const LOGPALETTE *)&wing_halftone_pal )); TRACE("(void)\n"); return ret; } /*********************************************************************** * WinGCreateHalfToneBrush (WING.1008) * * Create a half tone brush for a WinG device context. * * PARAMS * winDC [I] WinG device context * col [I] Color * type [I] Desired dithering type. * * RETURNS * Success: A handle to the created brush. * Failure: A NULL handle. */ HBRUSH16 WINAPI WinGCreateHalfToneBrush16(HDC16 winDC, COLORREF col, WING_DITHER_TYPE type) { TRACE("(%d,%d,%d)\n", winDC, col, type); return HBRUSH_16( CreateSolidBrush( col )); } /*********************************************************************** * WinGStretchBlt (WING.1009) * * See StretchBlt16. */ BOOL16 WINAPI WinGStretchBlt16(HDC16 destDC, INT16 xDest, INT16 yDest, INT16 widDest, INT16 heiDest, HDC16 srcDC, INT16 xSrc, INT16 ySrc, INT16 widSrc, INT16 heiSrc) { BOOL retval; TRACE("(%d,%d,...)\n", destDC, srcDC); SetStretchBltMode( HDC_32(destDC), COLORONCOLOR ); retval = StretchBlt( HDC_32(destDC), xDest, yDest, widDest, heiDest, HDC_32(srcDC), xSrc, ySrc, widSrc, heiSrc, SRCCOPY ); SetStretchBltMode( HDC_32(destDC), BLACKONWHITE ); return retval; } /*********************************************************************** * WinGBitBlt (WING.1010) * * See BitBlt16. */ BOOL16 WINAPI WinGBitBlt16(HDC16 destDC, INT16 xDest, INT16 yDest, INT16 widDest, INT16 heiDest, HDC16 srcDC, INT16 xSrc, INT16 ySrc) { TRACE("(%d,%d,...)\n", destDC, srcDC); return BitBlt( HDC_32(destDC), xDest, yDest, widDest, heiDest, HDC_32(srcDC), xSrc, ySrc, SRCCOPY ); } ================================================ FILE: wing/wing.def ================================================ ; File generated automatically from wing.dll16.spec; do not edit! LIBRARY wing.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: wing/wing.dll16.spec ================================================ 1001 pascal -ret16 WinGCreateDC() WinGCreateDC16 1002 pascal -ret16 WinGRecommendDIBFormat(ptr) WinGRecommendDIBFormat16 1003 pascal -ret16 WinGCreateBitmap(word ptr ptr) WinGCreateBitmap16 1004 pascal WinGGetDIBPointer(word ptr) WinGGetDIBPointer16 1005 pascal -ret16 WinGGetDIBColorTable(word word word ptr) WinGGetDIBColorTable16 1006 pascal -ret16 WinGSetDIBColorTable(word word word ptr) WinGSetDIBColorTable16 1007 pascal -ret16 WinGCreateHalfTonePalette() WinGCreateHalfTonePalette16 1008 pascal -ret16 WinGCreateHalfToneBrush(word word word) WinGCreateHalfToneBrush16 1009 pascal -ret16 WinGStretchBlt(word word word word word word word word word word) WinGStretchBlt16 1010 pascal -ret16 WinGBitBlt(word word word word word word word word) WinGBitBlt16 # Seem that 1299 is the limit... weird... #1500 stub WINGINITIALIZETHUNK16 #1501 stub WINGTHUNK16 #2000 stub REGISTERWINGPAL #2001 stub EXCEPTIONHANDLER ================================================ FILE: wing/wing.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj wing {90402A90-8D53-4843-BF11-7AE93361ED13} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; gdi32.lib;%(AdditionalDependencies) true wing.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false wing.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; gdi32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" WING > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj "$(OutDir)convspec" "%(Filename).spec" WING > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: winhlp32/CMakeLists.txt ================================================ include_directories(../wine ./) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -DPSAPI_VERSION=1) flex_target(winhlp_scanner macro.lex.l ${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c COMPILE_FLAGS) add_executable(winhlp32 WIN32 callback.c hlpfile.c macro.c string.c winhelp.c winhlp32.rc ${FLEX_winhlp_scanner_OUTPUTS}) target_link_libraries(winhlp32 libwine comctl32.lib psapi.lib) ================================================ FILE: winhlp32/Makefile.in ================================================ MODULE = winhlp32.exe APPMODE = -mwindows IMPORTS = user32 gdi32 DELAYIMPORTS = shell32 comctl32 comdlg32 C_SRCS = \ callback.c \ hlpfile.c \ macro.c \ string.c \ winhelp.c LEX_SRCS = macro.lex.l RC_SRCS = winhlp32.rc SVG_SRCS = winhelp.svg ================================================ FILE: winhlp32/callback.c ================================================ /* * Help Viewer - DLL callback into WineHelp * * Copyright 2004 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define WIN32_LEAN_AND_MEAN #include #include "windows.h" #include "winhelp.h" #ifdef _DEBUG #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winhelp); #else #define WINE_TRACE(...) #define WINE_WARN(...) #define WINE_FIXME(...) #define WINE_ERR(...) #define debugstr_a(...) #endif static WORD CALLBACK WHD_GetFSError(void) { WINE_FIXME("()\n"); return 0; } static HANDLE CALLBACK WHD_Open(LPSTR name, BYTE flags) { unsigned mode = 0; WINE_FIXME("(%s %x)\n", debugstr_a(name), flags); switch (flags) { case 0: mode = GENERIC_READ | GENERIC_WRITE; break; case 2: mode = GENERIC_READ; break; default: WINE_FIXME("Undocumented flags %x\n", flags); } return CreateFileA(name, mode, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); } static WORD CALLBACK WHD_Close(HANDLE fs) { WINE_FIXME("(%p)\n", fs); CloseHandle(fs); return 0; } static HANDLE CALLBACK WHD_OpenBag(HANDLE fs, LPSTR name, BYTE flags) { WINE_FIXME("(%p %s %x)\n", fs, debugstr_a(name), flags); return NULL; } static HANDLE CALLBACK WHD_CloseBag(HANDLE bag) { WINE_FIXME("()\n"); return NULL; } static LONG CALLBACK WHD_ReadBag(HANDLE bag, BYTE* ptr, LONG len) { WINE_FIXME("()\n"); return 0; } static LONG CALLBACK WHD_TellBag(HANDLE bag) { WINE_FIXME("()\n"); return 0; } static LONG CALLBACK WHD_SeekBag(HANDLE bag, LONG offset, WORD whence) { WINE_FIXME("()\n"); return 0; } static BOOL CALLBACK WHD_IsEofBag(HANDLE bag) { WINE_FIXME("()\n"); return FALSE; } static LONG CALLBACK WHD_SizeBag(HANDLE bag) { WINE_FIXME("()\n"); return 0; } static BOOL CALLBACK WHD_Access(HANDLE fs, LPSTR name, BYTE flags) { WINE_FIXME("()\n"); return FALSE; } static WORD CALLBACK WHD_LLInfoFromBag(HANDLE bag, WORD opt, LPWORD p1, LPLONG p2, LPLONG p3) { WINE_FIXME("()\n"); return 0; } static WORD CALLBACK WHD_LLInfoFromFile(HANDLE fs, LPSTR name, WORD opt, LPWORD p1, LPLONG p2, LPLONG p3) { WINE_FIXME("()\n"); return 0; } static void CALLBACK WHD_Error(int err) { WINE_FIXME("()\n"); } static void CALLBACK WHD_ErrorString(LPSTR err) { WINE_FIXME("()\n"); } static ULONG_PTR CALLBACK WHD_GetInfo(WORD what, HWND hnd) { ULONG_PTR ret = 0; WINE_TRACE("(%x %p)\n", what, hnd); switch (what) { case 0: break; case 1: /* instance */ ret = (ULONG_PTR)Globals.hInstance; break; case 3: /* current window */ ret = (ULONG_PTR)Globals.active_win->hMainWnd; break; case 2: /* main window */ case 4: /* handle to opened file */ case 5: /* foreground color */ case 6: /* background color */ case 7: /* topic number */ case 8: /* current opened file name */ WINE_FIXME("NIY %u\n", what); break; default: WINE_FIXME("Undocumented %u\n", what); break; } return ret; } static LONG CALLBACK WHD_API(LPSTR x, WORD xx, DWORD xxx) { WINE_FIXME("()\n"); return 0; } const struct winhelp_callbacks Callbacks = { WHD_GetFSError, WHD_Open, WHD_Close, WHD_OpenBag, WHD_CloseBag, WHD_ReadBag, WHD_TellBag, WHD_SeekBag, WHD_IsEofBag, WHD_SizeBag, WHD_Access, WHD_LLInfoFromBag, WHD_LLInfoFromFile, WHD_Error, WHD_ErrorString, WHD_GetInfo, WHD_API }; ================================================ FILE: winhlp32/hlpfile.c ================================================ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * 2002, 2008 Eric Pouech * 2007 Kirill K. Smirnov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include "windows.h" #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "winhelp.h" #ifdef _DEBUG #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winhelp); #else #define WINE_TRACE(...) #define WINE_WARN(...) #define WINE_FIXME(...) #define WINE_ERR(...) #define debugstr_a(...) #endif static inline unsigned short GET_USHORT(const BYTE* buffer, unsigned i) { return (BYTE)buffer[i] + 0x100 * (BYTE)buffer[i + 1]; } static inline short GET_SHORT(const BYTE* buffer, unsigned i) { return (BYTE)buffer[i] + 0x100 * (signed char)buffer[i+1]; } static inline unsigned GET_UINT(const BYTE* buffer, unsigned i) { return GET_USHORT(buffer, i) + 0x10000 * GET_USHORT(buffer, i + 2); } static HLPFILE *first_hlpfile = 0; /************************************************************************** * HLPFILE_BPTreeSearch * * Searches for an element in B+ tree * * PARAMS * buf [I] pointer to the embedded file structured as a B+ tree * key [I] pointer to data to find * comp [I] compare function * * RETURNS * Pointer to block identified by key, or NULL if failure. * */ void* HLPFILE_BPTreeSearch(BYTE* buf, const void* key, HLPFILE_BPTreeCompare comp) { unsigned magic; unsigned page_size; unsigned cur_page; unsigned level; BYTE *pages, *ptr, *newptr; int i, entries; int ret; magic = GET_USHORT(buf, 9); if (magic != 0x293B) { WINE_ERR("Invalid magic in B+ tree: 0x%x\n", magic); return NULL; } page_size = GET_USHORT(buf, 9+4); cur_page = GET_USHORT(buf, 9+26); level = GET_USHORT(buf, 9+32); pages = buf + 9 + 38; while (--level > 0) { ptr = pages + cur_page*page_size; entries = GET_SHORT(ptr, 2); ptr += 6; for (i = 0; i < entries; i++) { if (comp(ptr, key, 0, (void **)&newptr) > 0) break; ptr = newptr; } cur_page = GET_USHORT(ptr-2, 0); } ptr = pages + cur_page*page_size; entries = GET_SHORT(ptr, 2); ptr += 8; for (i = 0; i < entries; i++) { ret = comp(ptr, key, 1, (void **)&newptr); if (ret == 0) return ptr; if (ret > 0) return NULL; ptr = newptr; } return NULL; } /************************************************************************** * HLPFILE_BPTreeEnum * * Enumerates elements in B+ tree. * * PARAMS * buf [I] pointer to the embedded file structured as a B+ tree * cb [I] compare function * cookie [IO] cookie for cb function */ void HLPFILE_BPTreeEnum(BYTE* buf, HLPFILE_BPTreeCallback cb, void* cookie) { unsigned magic; unsigned page_size; unsigned cur_page; unsigned level; BYTE *pages, *ptr, *newptr; int i, entries; magic = GET_USHORT(buf, 9); if (magic != 0x293B) { WINE_ERR("Invalid magic in B+ tree: 0x%x\n", magic); return; } page_size = GET_USHORT(buf, 9+4); cur_page = GET_USHORT(buf, 9+26); level = GET_USHORT(buf, 9+32); pages = buf + 9 + 38; while (--level > 0) { ptr = pages + cur_page*page_size; cur_page = GET_USHORT(ptr, 4); } while (cur_page != 0xFFFF) { ptr = pages + cur_page*page_size; entries = GET_SHORT(ptr, 2); ptr += 8; for (i = 0; i < entries; i++) { cb(ptr, (void **)&newptr, cookie); ptr = newptr; } cur_page = GET_USHORT(pages+cur_page*page_size, 6); } } /*********************************************************************** * * HLPFILE_UncompressedLZ77_Size */ static INT HLPFILE_UncompressedLZ77_Size(const BYTE *ptr, const BYTE *end) { int i, newsize = 0; while (ptr < end) { int mask = *ptr++; for (i = 0; i < 8 && ptr < end; i++, mask >>= 1) { if (mask & 1) { int code = GET_USHORT(ptr, 0); int len = 3 + (code >> 12); newsize += len; ptr += 2; } else newsize++, ptr++; } } return newsize; } /*********************************************************************** * * HLPFILE_UncompressLZ77 */ static BYTE *HLPFILE_UncompressLZ77(const BYTE *ptr, const BYTE *end, BYTE *newptr) { int i; while (ptr < end) { int mask = *ptr++; for (i = 0; i < 8 && ptr < end; i++, mask >>= 1) { if (mask & 1) { int code = GET_USHORT(ptr, 0); int len = 3 + (code >> 12); int offset = code & 0xfff; /* * We must copy byte-by-byte here. We cannot use memcpy nor * memmove here. Just example: * a[]={1,2,3,4,5,6,7,8,9,10} * newptr=a+2; * offset=1; * We expect: * {1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 11, 12} */ for (; len>0; len--, newptr++) *newptr = *(newptr-offset-1); ptr += 2; } else *newptr++ = *ptr++; } } return newptr; } /*********************************************************************** * * HLPFILE_Uncompress2 */ static void HLPFILE_Uncompress2(HLPFILE* hlpfile, const BYTE *ptr, const BYTE *end, BYTE *newptr, const BYTE *newend) { BYTE *phptr, *phend; UINT code; UINT index; while (ptr < end && newptr < newend) { if (!*ptr || *ptr >= 0x10) *newptr++ = *ptr++; else { code = 0x100 * ptr[0] + ptr[1]; index = (code - 0x100) / 2; phptr = (BYTE*)hlpfile->phrases_buffer + hlpfile->phrases_offsets[index]; phend = (BYTE*)hlpfile->phrases_buffer + hlpfile->phrases_offsets[index + 1]; if (newptr + (phend - phptr) > newend) { WINE_FIXME("buffer overflow %p > %p for %lu bytes\n", newptr, newend, (SIZE_T)(phend - phptr)); return; } memcpy(newptr, phptr, phend - phptr); newptr += phend - phptr; if (code & 1) *newptr++ = ' '; ptr += 2; } } if (newptr > newend) WINE_FIXME("buffer overflow %p > %p\n", newptr, newend); } /****************************************************************** * HLPFILE_Uncompress3 * * */ static BOOL HLPFILE_Uncompress3(HLPFILE* hlpfile, char* dst, const char* dst_end, const BYTE* src, const BYTE* src_end) { unsigned int idx, len; for (; src < src_end; src++) { if ((*src & 1) == 0) { idx = *src / 2; if (idx > hlpfile->num_phrases) { WINE_ERR("index in phrases %d/%d\n", idx, hlpfile->num_phrases); len = 0; } else { len = hlpfile->phrases_offsets[idx + 1] - hlpfile->phrases_offsets[idx]; if (dst + len <= dst_end) memcpy(dst, &hlpfile->phrases_buffer[hlpfile->phrases_offsets[idx]], len); } } else if ((*src & 0x03) == 0x01) { idx = (*src + 1) * 64; idx += *++src; if (idx > hlpfile->num_phrases) { WINE_ERR("index in phrases %d/%d\n", idx, hlpfile->num_phrases); len = 0; } else { len = hlpfile->phrases_offsets[idx + 1] - hlpfile->phrases_offsets[idx]; if (dst + len <= dst_end) memcpy(dst, &hlpfile->phrases_buffer[hlpfile->phrases_offsets[idx]], len); } } else if ((*src & 0x07) == 0x03) { len = (*src / 8) + 1; if (dst + len <= dst_end) memcpy(dst, src + 1, len); src += len; } else { len = (*src / 16) + 1; if (dst + len <= dst_end) memset(dst, ((*src & 0x0F) == 0x07) ? ' ' : 0, len); } dst += len; } if (dst > dst_end) WINE_ERR("buffer overflow (%p > %p)\n", dst, dst_end); return TRUE; } /****************************************************************** * HLPFILE_UncompressRLE * * */ static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE* dst, unsigned dstsz) { BYTE ch; BYTE* sdst = dst + dstsz; while (src < end) { ch = *src++; if (ch & 0x80) { ch &= 0x7F; if (dst + ch <= sdst) memcpy(dst, src, ch); src += ch; } else { if (dst + ch <= sdst) memset(dst, (char)*src, ch); src++; } dst += ch; } if (dst != sdst) WINE_WARN("Buffer X-flow: d(%lu) instead of d(%u)\n", (SIZE_T)(dst - (sdst - dstsz)), dstsz); } /****************************************************************** * HLPFILE_PageByOffset * * */ HLPFILE_PAGE *HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset, ULONG* relative) { HLPFILE_PAGE* page; HLPFILE_PAGE* found; if (!hlpfile) return 0; WINE_TRACE("<%s>[%x]\n", debugstr_a(hlpfile->lpszPath), offset); if (offset == 0xFFFFFFFF) return NULL; page = NULL; for (found = NULL, page = hlpfile->first_page; page; page = page->next) { if (page->offset <= offset && (!found || found->offset < page->offset)) { *relative = offset; found = page; } } if (!found) WINE_ERR("Page of offset %u not found in file %s\n", offset, debugstr_a(hlpfile->lpszPath)); return found; } /*********************************************************************** * * HLPFILE_Contents */ static HLPFILE_PAGE* HLPFILE_Contents(HLPFILE *hlpfile, ULONG* relative) { HLPFILE_PAGE* page = NULL; *relative = 0; if (!hlpfile) return NULL; if (hlpfile->cnt_page) page = hlpfile->cnt_page; else if (hlpfile->version <= 16) page = HLPFILE_PageByOffset(hlpfile, hlpfile->TOMap[0], relative); else page = HLPFILE_PageByOffset(hlpfile, hlpfile->contents_start, relative); if (!page) page = hlpfile->first_page; return page; } /************************************************************************** * comp_PageByHash * * HLPFILE_BPTreeCompare function for '|CONTEXT' B+ tree file * */ static int comp_PageByHash(void *p, const void *key, int leaf, void** next) { LONG lKey = (LONG_PTR)key; LONG lTest = (INT)GET_UINT(p, 0); *next = (char *)p+(leaf?8:6); WINE_TRACE("Comparing '%d' with '%d'\n", lKey, lTest); if (lTest < lKey) return -1; if (lTest > lKey) return 1; return 0; } /*********************************************************************** * * HLPFILE_PageByHash */ HLPFILE_PAGE *HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash, ULONG* relative) { BYTE *ptr; if (!hlpfile) return NULL; if (!lHash) return HLPFILE_Contents(hlpfile, relative); WINE_TRACE("<%s>[%x]\n", debugstr_a(hlpfile->lpszPath), lHash); /* For win 3.0 files hash values are really page numbers */ if (hlpfile->version <= 16) { if (lHash >= hlpfile->wTOMapLen) return NULL; return HLPFILE_PageByOffset(hlpfile, hlpfile->TOMap[lHash], relative); } ptr = HLPFILE_BPTreeSearch(hlpfile->Context, LongToPtr(lHash), comp_PageByHash); if (!ptr) { WINE_ERR("Page of hash %x not found in file %s\n", lHash, debugstr_a(hlpfile->lpszPath)); return NULL; } return HLPFILE_PageByOffset(hlpfile, GET_UINT(ptr, 4), relative); } /*********************************************************************** * * HLPFILE_PageByMap */ HLPFILE_PAGE *HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap, ULONG* relative) { unsigned int i; if (!hlpfile) return 0; WINE_TRACE("<%s>[%x]\n", debugstr_a(hlpfile->lpszPath), lMap); for (i = 0; i < hlpfile->wMapLen; i++) { if (hlpfile->Map[i].lMap == lMap) return HLPFILE_PageByOffset(hlpfile, hlpfile->Map[i].offset, relative); } WINE_ERR("Page of Map %x not found in file %s\n", lMap, debugstr_a(hlpfile->lpszPath)); return NULL; } /************************************************************************** * comp_FindSubFile * * HLPFILE_BPTreeCompare function for HLPFILE directory. * */ static int comp_FindSubFile(void *p, const void *key, int leaf, void** next) { *next = (char *)p+strlen(p)+(leaf?5:3); WINE_TRACE("Comparing %s with %s\n", debugstr_a((char *)p), debugstr_a((const char *)key)); return strcmp(p, key); } /*********************************************************************** * * HLPFILE_FindSubFile */ static BOOL HLPFILE_FindSubFile(HLPFILE* hlpfile, LPCSTR name, BYTE **subbuf, BYTE **subend) { BYTE *ptr; WINE_TRACE("looking for file %s\n", debugstr_a(name)); ptr = HLPFILE_BPTreeSearch(hlpfile->file_buffer + GET_UINT(hlpfile->file_buffer, 4), name, comp_FindSubFile); if (!ptr) { /* Subfiles with bitmap images are usually prefixed with '|', but sometimes not. Unfortunately, there is no consensus among different pieces of unofficial documentation. So remove leading '|' and try again. */ CHAR c = *name++; if (c == '|') { WINE_TRACE("not found. try %s\n", debugstr_a(name)); ptr = HLPFILE_BPTreeSearch(hlpfile->file_buffer + GET_UINT(hlpfile->file_buffer, 4), name, comp_FindSubFile); } } if (!ptr) return FALSE; *subbuf = hlpfile->file_buffer + GET_UINT(ptr, strlen(name)+1); if (*subbuf >= hlpfile->file_buffer + hlpfile->file_buffer_size) { WINE_ERR("internal file %s does not fit\n", debugstr_a(name)); return FALSE; } *subend = *subbuf + GET_UINT(*subbuf, 0); if (*subend > hlpfile->file_buffer + hlpfile->file_buffer_size) { WINE_ERR("internal file %s does not fit\n", debugstr_a(name)); return FALSE; } if (GET_UINT(*subbuf, 0) < GET_UINT(*subbuf, 4) + 9) { WINE_ERR("invalid size provided for internal file %s\n", debugstr_a(name)); return FALSE; } return TRUE; } /*********************************************************************** * * HLPFILE_Hash */ LONG HLPFILE_Hash(LPCSTR lpszContext) { LONG lHash = 0; CHAR c; static char hashtab[] = { 0x00, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0x0B, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0x0C, 0xFF, 0x0A, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0D, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x0B, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF }; if (!*lpszContext) return 1; while ((c = *lpszContext++)) { lHash = lHash * 43 + hashtab[c]; } return lHash; } static LONG fetch_long(const BYTE** ptr) { LONG ret; if (*(*ptr) & 1) { ret = (*(const ULONG*)(*ptr) - 0x80000000) / 2; (*ptr) += 4; } else { ret = (*(const USHORT*)(*ptr) - 0x8000) / 2; (*ptr) += 2; } return ret; } static ULONG fetch_ulong(const BYTE** ptr) { ULONG ret; if (*(*ptr) & 1) { ret = *(const ULONG*)(*ptr) / 2; (*ptr) += 4; } else { ret = *(const USHORT*)(*ptr) / 2; (*ptr) += 2; } return ret; } static short fetch_short(const BYTE** ptr) { short ret; if (*(*ptr) & 1) { ret = (*(const unsigned short*)(*ptr) - 0x8000) / 2; (*ptr) += 2; } else { ret = (*(const unsigned char*)(*ptr) - 0x80) / 2; (*ptr)++; } return ret; } static unsigned short fetch_ushort(const BYTE** ptr) { unsigned short ret; if (*(*ptr) & 1) { ret = *(const unsigned short*)(*ptr) / 2; (*ptr) += 2; } else { ret = *(const unsigned char*)(*ptr) / 2; (*ptr)++; } return ret; } /****************************************************************** * HLPFILE_DecompressGfx * * Decompress the data part of a bitmap or a metafile */ static const BYTE* HLPFILE_DecompressGfx(const BYTE* src, unsigned csz, unsigned sz, BYTE packing, BYTE** alloc) { const BYTE* dst; BYTE* tmp; unsigned sz77; WINE_TRACE("Unpacking (%d) from %u bytes to %u bytes\n", packing, csz, sz); switch (packing) { case 0: /* uncompressed */ if (sz != csz) WINE_WARN("Bogus gfx sizes (uncompressed): %u / %u\n", sz, csz); dst = src; *alloc = NULL; break; case 1: /* RunLen */ dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz); if (!dst) return NULL; HLPFILE_UncompressRLE(src, src + csz, *alloc, sz); break; case 2: /* LZ77 */ sz77 = HLPFILE_UncompressedLZ77_Size(src, src + csz); dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz77); if (!dst) return NULL; HLPFILE_UncompressLZ77(src, src + csz, *alloc); if (sz77 != sz) WINE_WARN("Bogus gfx sizes (LZ77): %u / %u\n", sz77, sz); break; case 3: /* LZ77 then RLE */ sz77 = HLPFILE_UncompressedLZ77_Size(src, src + csz); tmp = HeapAlloc(GetProcessHeap(), 0, sz77); if (!tmp) return FALSE; HLPFILE_UncompressLZ77(src, src + csz, tmp); dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz); if (!dst) { HeapFree(GetProcessHeap(), 0, tmp); return FALSE; } HLPFILE_UncompressRLE(tmp, tmp + sz77, *alloc, sz); HeapFree(GetProcessHeap(), 0, tmp); break; default: WINE_FIXME("Unsupported packing %u\n", packing); return NULL; } return dst; } static BOOL HLPFILE_RtfAddRawString(struct RtfData* rd, const char* str, size_t sz) { if (rd->ptr + sz >= rd->data + rd->allocated) { char* new = HeapReAlloc(GetProcessHeap(), 0, rd->data, rd->allocated *= 2); if (!new) return FALSE; rd->ptr = new + (rd->ptr - rd->data); rd->data = new; } memcpy(rd->ptr, str, sz); rd->ptr += sz; return TRUE; } static BOOL HLPFILE_RtfAddControl(struct RtfData* rd, const char* str) { WINE_TRACE("%s\n", debugstr_a(str)); if (*str == '\\' || *str == '{') rd->in_text = FALSE; else if (*str == '}') rd->in_text = TRUE; return HLPFILE_RtfAddRawString(rd, str, strlen(str)); } static BOOL HLPFILE_RtfAddText(struct RtfData* rd, const char* str) { const char* p; const char* last; const char* replace; unsigned rlen; if (!rd->in_text) { if (!HLPFILE_RtfAddRawString(rd, " ", 1)) return FALSE; rd->in_text = TRUE; } for (last = p = str; *p; p++) { if (*p & 0x80) /* escape non-ASCII chars */ { static char xx[8]; rlen = sprintf(xx, "\\'%x", *(const BYTE*)p); replace = xx; } else switch (*p) { case '{': rlen = 2; replace = "\\{"; break; case '}': rlen = 2; replace = "\\}"; break; case '\\': rlen = 2; replace = "\\\\"; break; default: continue; } if ((p != last && !HLPFILE_RtfAddRawString(rd, last, p - last)) || !HLPFILE_RtfAddRawString(rd, replace, rlen)) return FALSE; last = p + 1; } return HLPFILE_RtfAddRawString(rd, last, p - last); } /****************************************************************** * RtfAddHexBytes * */ static BOOL HLPFILE_RtfAddHexBytes(struct RtfData* rd, const void* _ptr, unsigned sz) { char tmp[512]; unsigned i, step; const BYTE* ptr = _ptr; static const char* _2hex = "0123456789abcdef"; if (!rd->in_text) { if (!HLPFILE_RtfAddRawString(rd, " ", 1)) return FALSE; rd->in_text = TRUE; } for (; sz; sz -= step) { step = min(256, sz); for (i = 0; i < step; i++) { tmp[2 * i + 0] = _2hex[*ptr >> 4]; tmp[2 * i + 1] = _2hex[*ptr++ & 0xF]; } if (!HLPFILE_RtfAddRawString(rd, tmp, 2 * step)) return FALSE; } return TRUE; } static HLPFILE_LINK* HLPFILE_AllocLink(struct RtfData* rd, int cookie, const char* str, unsigned len, LONG hash, BOOL clrChange, BOOL bHotSpot, unsigned wnd); /****************************************************************** * HLPFILE_AddHotSpotLinks * */ static void HLPFILE_AddHotSpotLinks(struct RtfData* rd, HLPFILE* file, const BYTE* start, ULONG hs_size, ULONG hs_offset, float coorddiv) { unsigned i, hs_num; ULONG hs_macro; const char* str; if (hs_size == 0 || hs_offset == 0) return; start += hs_offset; /* always 1 ?? */ hs_num = GET_USHORT(start, 1); hs_macro = GET_UINT(start, 3); str = (const char*)start + 7 + 15 * hs_num + hs_macro; /* FIXME: should use hs_size to prevent out of bounds reads */ for (i = 0; i < hs_num; i++) { HLPFILE_HOTSPOTLINK* hslink; WINE_TRACE("%02x-%02x%02x {%s,%s}\n", start[7 + 15 * i + 0], start[7 + 15 * i + 1], start[7 + 15 * i + 2], debugstr_a(str), debugstr_a(str + strlen(str) + 1)); /* str points to two null terminated strings: * hotspot name, then link name */ str += strlen(str) + 1; /* skip hotspot name */ hslink = NULL; switch (start[7 + 15 * i + 0]) /* The next two chars always look like 0x04 0x00 ??? * What are they for ? */ { case 0xC8: case 0xCC: hslink = (HLPFILE_HOTSPOTLINK*) HLPFILE_AllocLink(rd, hlp_link_macro, str, -1, 0, FALSE, TRUE, -2); break; case 0xE2: case 0xE3: case 0xE6: case 0xE7: hslink = (HLPFILE_HOTSPOTLINK*) HLPFILE_AllocLink(rd, (start[7 + 15 * i + 0] & 1) ? hlp_link_link : hlp_link_popup, file->lpszPath, -1, HLPFILE_Hash(str), FALSE, TRUE, -2); break; case 0xEE: case 0xEF: { const char* win = strchr(str, '>'); int wnd = -1; char* tgt = NULL; if (win) { for (wnd = file->numWindows - 1; wnd >= 0; wnd--) { if (!stricmp(win + 1, file->windows[wnd].name)) break; } if (wnd == -1) WINE_WARN("Couldn't find window info for %s\n", debugstr_a(win)); if ((tgt = HeapAlloc(GetProcessHeap(), 0, win - str + 1))) { memcpy(tgt, str, win - str); tgt[win - str] = '\0'; } } hslink = (HLPFILE_HOTSPOTLINK*) HLPFILE_AllocLink(rd, (start[7 + 15 * i + 0] & 1) ? hlp_link_link : hlp_link_popup, file->lpszPath, -1, HLPFILE_Hash(tgt ? tgt : str), FALSE, TRUE, wnd); HeapFree(GetProcessHeap(), 0, tgt); break; } default: WINE_FIXME("unknown hotsport target 0x%x\n", start[7 + 15 * i + 0]); } if (hslink) { hslink->x = GET_USHORT(start, 7 + 15 * i + 3) / coorddiv; hslink->y = GET_USHORT(start, 7 + 15 * i + 5) / coorddiv; hslink->width = GET_USHORT(start, 7 + 15 * i + 7) / coorddiv; hslink->height = GET_USHORT(start, 7 + 15 * i + 9) / coorddiv; hslink->imgidx = rd->imgcnt; hslink->next = rd->first_hs; rd->first_hs = hslink; /* target = GET_UINT(start, 7 + 15 * i + 11); */ } str += strlen(str) + 1; } } /****************************************************************** * HLPFILE_RtfAddTransparentBitmap * * We'll transform a transparent bitmap into an metafile that * we then transform into RTF */ static BOOL HLPFILE_RtfAddTransparentBitmap(struct RtfData* rd, const BITMAPINFO* bi, const void* pict, unsigned nc) { HDC hdc, hdcMask, hdcMem, hdcEMF; HBITMAP hbm, hbmMask, hbmOldMask, hbmOldMem; HENHMETAFILE hEMF; BOOL ret = FALSE; void* data; UINT sz; hbm = CreateDIBitmap(hdc = GetDC(0), &bi->bmiHeader, CBM_INIT, pict, bi, DIB_RGB_COLORS); hdcMem = CreateCompatibleDC(hdc); hbmOldMem = SelectObject(hdcMem, hbm); /* create the mask bitmap from the main bitmap */ hdcMask = CreateCompatibleDC(hdc); hbmMask = CreateBitmap(bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, 1, 1, NULL); hbmOldMask = SelectObject(hdcMask, hbmMask); SetBkColor(hdcMem, RGB(bi->bmiColors[nc - 1].rgbRed, bi->bmiColors[nc - 1].rgbGreen, bi->bmiColors[nc - 1].rgbBlue)); BitBlt(hdcMask, 0, 0, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, hdcMem, 0, 0, SRCCOPY); /* sets to RGB(0,0,0) the transparent bits in main bitmap */ SetBkColor(hdcMem, RGB(0,0,0)); SetTextColor(hdcMem, RGB(255,255,255)); BitBlt(hdcMem, 0, 0, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, hdcMask, 0, 0, SRCAND); SelectObject(hdcMask, hbmOldMask); DeleteDC(hdcMask); SelectObject(hdcMem, hbmOldMem); DeleteDC(hdcMem); /* we create the bitmap on the fly */ hdcEMF = CreateEnhMetaFileW(NULL, NULL, NULL, NULL); hdcMem = CreateCompatibleDC(hdcEMF); /* sets to RGB(0,0,0) the transparent bits in final bitmap */ hbmOldMem = SelectObject(hdcMem, hbmMask); SetBkColor(hdcEMF, RGB(255, 255, 255)); SetTextColor(hdcEMF, RGB(0, 0, 0)); BitBlt(hdcEMF, 0, 0, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, hdcMem, 0, 0, SRCAND); /* and copy the remaining bits of main bitmap */ SelectObject(hdcMem, hbm); BitBlt(hdcEMF, 0, 0, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, hdcMem, 0, 0, SRCPAINT); SelectObject(hdcMem, hbmOldMem); DeleteDC(hdcMem); /* do the cleanup */ ReleaseDC(0, hdc); DeleteObject(hbmMask); DeleteObject(hbm); hEMF = CloseEnhMetaFile(hdcEMF); /* generate rtf stream */ sz = GetEnhMetaFileBits(hEMF, 0, NULL); if (sz && (data = HeapAlloc(GetProcessHeap(), 0, sz))) { if (sz == GetEnhMetaFileBits(hEMF, sz, data)) { ret = HLPFILE_RtfAddControl(rd, "{\\pict\\emfblip") && HLPFILE_RtfAddHexBytes(rd, data, sz) && HLPFILE_RtfAddControl(rd, "}"); } HeapFree(GetProcessHeap(), 0, data); } DeleteEnhMetaFile(hEMF); return ret; } /****************************************************************** * HLPFILE_RtfAddBitmap * */ static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, HLPFILE* file, const BYTE* beg, BYTE type, BYTE pack) { const BYTE* ptr; const BYTE* pict_beg; BYTE* alloc = NULL; BITMAPINFO* bi; ULONG off, csz; unsigned nc = 0; BOOL clrImportant = FALSE; BOOL ret = FALSE; char tmp[256]; unsigned hs_size, hs_offset; bi = HeapAlloc(GetProcessHeap(), 0, sizeof(*bi)); if (!bi) return FALSE; ptr = beg + 2; /* for type and pack */ bi->bmiHeader.biSize = sizeof(bi->bmiHeader); bi->bmiHeader.biXPelsPerMeter = fetch_ulong(&ptr); bi->bmiHeader.biYPelsPerMeter = fetch_ulong(&ptr); bi->bmiHeader.biPlanes = fetch_ushort(&ptr); bi->bmiHeader.biBitCount = fetch_ushort(&ptr); bi->bmiHeader.biWidth = fetch_ulong(&ptr); bi->bmiHeader.biHeight = fetch_ulong(&ptr); bi->bmiHeader.biClrUsed = fetch_ulong(&ptr); clrImportant = fetch_ulong(&ptr); bi->bmiHeader.biClrImportant = (clrImportant > 1) ? clrImportant : 0; bi->bmiHeader.biCompression = BI_RGB; if (bi->bmiHeader.biBitCount > 32) WINE_FIXME("Unknown bit count %u\n", bi->bmiHeader.biBitCount); if (bi->bmiHeader.biPlanes != 1) WINE_FIXME("Unsupported planes %u\n", bi->bmiHeader.biPlanes); bi->bmiHeader.biSizeImage = (((bi->bmiHeader.biWidth * bi->bmiHeader.biBitCount + 31) & ~31) / 8) * bi->bmiHeader.biHeight; WINE_TRACE("planes=%d bc=%d size=(%d,%d)\n", bi->bmiHeader.biPlanes, bi->bmiHeader.biBitCount, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight); csz = fetch_ulong(&ptr); hs_size = fetch_ulong(&ptr); off = GET_UINT(ptr, 0); ptr += 4; hs_offset = GET_UINT(ptr, 0); ptr += 4; HLPFILE_AddHotSpotLinks(rd, file, beg, hs_size, hs_offset, 1); /* now read palette info */ if (type == 0x06) { unsigned i; nc = bi->bmiHeader.biClrUsed; /* not quite right, especially for bitfields type of compression */ if (!nc && bi->bmiHeader.biBitCount <= 8) nc = 1 << bi->bmiHeader.biBitCount; bi = HeapReAlloc(GetProcessHeap(), 0, bi, sizeof(*bi) + nc * sizeof(RGBQUAD)); if (!bi) return FALSE; for (i = 0; i < nc; i++) { bi->bmiColors[i].rgbBlue = ptr[0]; bi->bmiColors[i].rgbGreen = ptr[1]; bi->bmiColors[i].rgbRed = ptr[2]; bi->bmiColors[i].rgbReserved = 0; ptr += 4; } } pict_beg = HLPFILE_DecompressGfx(beg + off, csz, bi->bmiHeader.biSizeImage, pack, &alloc); if (clrImportant == 1 && nc > 0) { ret = HLPFILE_RtfAddTransparentBitmap(rd, bi, pict_beg, nc); goto done; } if (!HLPFILE_RtfAddControl(rd, "{\\pict")) goto done; if (type == 0x06) { /* 96dpi: 15twips = 1px */ sprintf(tmp, "\\dibitmap0\\picw%d\\pich%d\\picwgoal%d\\pichgoal%d", bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, bi->bmiHeader.biWidth * 15, bi->bmiHeader.biHeight * 15); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; if (!HLPFILE_RtfAddHexBytes(rd, bi, sizeof(bi->bmiHeader) + nc * sizeof(RGBQUAD))) goto done; } else { /* 96dpi: 15twips = 1px */ sprintf(tmp, "\\wbitmap0\\wbmbitspixel%d\\wbmplanes%d\\picw%d\\pich%d\\picwgoal%d\\pichgoal%d", bi->bmiHeader.biBitCount, bi->bmiHeader.biPlanes, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, bi->bmiHeader.biWidth * 15, bi->bmiHeader.biHeight * 15); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } if (!HLPFILE_RtfAddHexBytes(rd, pict_beg, bi->bmiHeader.biSizeImage)) goto done; if (!HLPFILE_RtfAddControl(rd, "}")) goto done; ret = TRUE; done: HeapFree(GetProcessHeap(), 0, bi); HeapFree(GetProcessHeap(), 0, alloc); return ret; } /****************************************************************** * HLPFILE_RtfAddMetaFile * */ static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, HLPFILE* file, const BYTE* beg, BYTE pack) { ULONG size, csize, off, hs_offset, hs_size; const BYTE* ptr; const BYTE* bits; BYTE* alloc = NULL; char tmp[256]; unsigned mm; BOOL ret; WINE_TRACE("Loading metafile\n"); ptr = beg + 2; /* for type and pack */ mm = fetch_ushort(&ptr); /* mapping mode */ sprintf(tmp, "\\sl0{\\pict\\wmetafile%d\\picw%d\\pich%d", mm, GET_USHORT(ptr, 0), GET_USHORT(ptr, 2)); if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE; ptr += 4; size = fetch_ulong(&ptr); /* decompressed size */ csize = fetch_ulong(&ptr); /* compressed size */ hs_size = fetch_ulong(&ptr); /* hotspot size */ off = GET_UINT(ptr, 0); hs_offset = GET_UINT(ptr, 4); ptr += 8; // WMF type uses MM_HIMETRIC units for size HLPFILE_AddHotSpotLinks(rd, file, beg, hs_size, hs_offset, mm == 8 ? 26.2f : 1); WINE_TRACE("sz=%u csz=%u offs=%u/%u,%u/%u\n", size, csize, off, (ULONG)(ptr - beg), hs_size, hs_offset); bits = HLPFILE_DecompressGfx(beg + off, csize, size, pack, &alloc); if (!bits) return FALSE; ret = HLPFILE_RtfAddHexBytes(rd, bits, size) && HLPFILE_RtfAddControl(rd, "}"); HeapFree(GetProcessHeap(), 0, alloc); return ret; } /****************************************************************** * HLPFILE_RtfAddGfxByAddr * */ static BOOL HLPFILE_RtfAddGfxByAddr(struct RtfData* rd, HLPFILE *hlpfile, const BYTE* ref, ULONG size) { unsigned i, numpict; numpict = GET_USHORT(ref, 2); WINE_TRACE("Got picture magic=%04x #=%d\n", GET_USHORT(ref, 0), numpict); for (i = 0; i < numpict; i++) { const BYTE* beg; const BYTE* ptr; BYTE type, pack; WINE_TRACE("Offset[%d] = %x\n", i, GET_UINT(ref, (1 + i) * 4)); beg = ptr = ref + GET_UINT(ref, (1 + i) * 4); type = *ptr++; pack = *ptr++; switch (type) { case 5: /* device dependent bmp */ case 6: /* device independent bmp */ HLPFILE_RtfAddBitmap(rd, hlpfile, beg, type, pack); break; case 8: HLPFILE_RtfAddMetaFile(rd, hlpfile, beg, pack); break; default: WINE_FIXME("Unknown type %u\n", type); return FALSE; } /* FIXME: hotspots */ /* FIXME: implement support for multiple picture format */ if (numpict != 1) WINE_FIXME("Supporting only one bitmap format per logical bitmap (for now). Using first format\n"); break; } rd->imgcnt++; return TRUE; } /****************************************************************** * HLPFILE_RtfAddGfxByIndex * * */ static BOOL HLPFILE_RtfAddGfxByIndex(struct RtfData* rd, HLPFILE *hlpfile, unsigned index) { char tmp[16]; BYTE *ref, *end; WINE_TRACE("Loading picture #%d\n", index); sprintf(tmp, "|bm%u", index); if (!HLPFILE_FindSubFile(hlpfile, tmp, &ref, &end)) {WINE_WARN("no sub file\n"); return FALSE;} ref += 9; return HLPFILE_RtfAddGfxByAddr(rd, hlpfile, ref, end - ref); } /****************************************************************** * HLPFILE_AllocLink2 * * */ static HLPFILE_LINK* HLPFILE_AllocLink2(struct RtfData* rd, int cookie, const char* str, unsigned len, LONG hash, BOOL clrChange, BOOL bHotSpot, unsigned wnd, const char* windowName) { HLPFILE_LINK* link; char* link_str; unsigned asz = bHotSpot ? sizeof(HLPFILE_HOTSPOTLINK) : sizeof(HLPFILE_LINK); /* FIXME: should build a string table for the attributes.link.lpszPath * they are reallocated for each link */ if (len == -1) len = strlen(str); link = HeapAlloc(GetProcessHeap(), 0, asz + len + 1 + (windowName ? strlen(windowName) + 1 : 0)); if (!link) return NULL; link->cookie = cookie; link->string = link_str = (char*)link + asz; memcpy(link_str, str, len); link_str[len] = '\0'; link->hash = hash; link->bClrChange = clrChange; link->bHotSpot = bHotSpot; link->window = wnd; link->next = rd->first_link; rd->first_link = link; link->cpMin = rd->char_pos; rd->force_color = clrChange; if (rd->current_link) WINE_FIXME("Pending link\n"); if (bHotSpot) link->cpMax = rd->char_pos; else rd->current_link = link; if (windowName) { link->windowName = (const char*)link + asz + len + 1; memcpy(link->windowName, windowName, strlen(windowName) + 1); } else { link->windowName = NULL; } WINE_TRACE("Link[%d] to %s@%08x:%d\n", link->cookie, debugstr_a(link->string), link->hash, link->window); return link; } /****************************************************************** * HLPFILE_AllocLink * * */ static HLPFILE_LINK* HLPFILE_AllocLink(struct RtfData* rd, int cookie, const char* str, unsigned len, LONG hash, BOOL clrChange, BOOL bHotSpot, unsigned wnd) { return HLPFILE_AllocLink2(rd, cookie, str, len, hash, clrChange, bHotSpot, wnd, NULL); } static unsigned HLPFILE_HalfPointsScale(HLPFILE_PAGE* page, unsigned pts) { return pts * page->file->scale - page->file->rounderr; } /*********************************************************************** * * HLPFILE_BrowseParagraph */ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE *buf, BYTE* end, unsigned* parlen) { UINT textsize; const BYTE *format, *format_end; char *text, *text_base, *text_end; LONG size, blocksize, datalen; unsigned short bits; unsigned ncol = 1; short nc, lastcol, table_width, lastfont = 0; char tmp[256]; BOOL ret = FALSE; HLPFILE_ROW *lastrow; if (buf + 0x19 > end) {WINE_WARN("header too small\n"); return FALSE;}; *parlen = 0; blocksize = GET_UINT(buf, 0); size = GET_UINT(buf, 0x4); datalen = GET_UINT(buf, 0x10); text = text_base = HeapAlloc(GetProcessHeap(), 0, size); if (!text) return FALSE; if (size > blocksize - datalen) { /* need to decompress */ if (page->file->hasPhrases) HLPFILE_Uncompress2(page->file, buf + datalen, end, (BYTE*)text, (BYTE*)text + size); else if (page->file->hasPhrases40) HLPFILE_Uncompress3(page->file, text, text + size, buf + datalen, end); else { WINE_FIXME("Text size is too long, splitting\n"); size = blocksize - datalen; memcpy(text, buf + datalen, size); } } else memcpy(text, buf + datalen, size); text_end = text + size; format = buf + 0x15; format_end = buf + GET_UINT(buf, 0x10); WINE_TRACE("Record type (buf[0x14]) = 0x%x\n", buf[0x14]); if (buf[0x14] == HLP_DISPLAY || buf[0x14] == HLP_TABLE) { fetch_long(&format); *parlen = fetch_ushort(&format); } if (buf[0x14] == HLP_TABLE) { unsigned char type; ncol = *format++; type = *format++; if (type == 0 || type == 2) { table_width = GET_SHORT(format, 0); format += 2; HLPFILE_ROW* row = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_ROW) + 2 * ncol); row->cols = ncol; row->prev = NULL; if (page->first_var_row) page->first_var_row->prev = row; row->next = page->first_var_row; page->first_var_row = row; if (!HLPFILE_RtfAddControl(rd, "{\\v\\pard var_wid_row}")) goto done; } else table_width = 32767; if (!HLPFILE_RtfAddControl(rd, "\\trowd")) goto done; WINE_TRACE("New table: cols=%d type=%x width=%d\n", ncol, type, table_width); if (ncol > 1) { int pos, width; sprintf(tmp, "\\trgaph%d\\trleft%d", MulDiv(HLPFILE_HalfPointsScale(page, GET_SHORT(format, 6)), table_width, 32767), MulDiv(HLPFILE_HalfPointsScale(page, GET_SHORT(format, 2) - GET_SHORT(format, 6)), table_width, 32767) - 1); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; pos = GET_SHORT(format, 6) / 2; for (nc = 0; nc < ncol; nc++) { WINE_TRACE("column(%d/%d) gap=%d width=%d\n", nc, ncol, GET_SHORT(format, nc*4), GET_SHORT(format, nc*4+2)); pos += GET_SHORT(format, nc * 4) + GET_SHORT(format, nc * 4 + 2); width = MulDiv(HLPFILE_HalfPointsScale(page, pos), table_width, 32767); sprintf(tmp, "\\clbrdrl\\brdrw1\\brdrcf2\\clbrdrt\\brdrw1\\brdrcf2\\clbrdrr\\brdrw1\\brdrcf2\\clbrdrb\\brdrw1\\brdrcf2\\cellx%d", width); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; if (type == 0 || type == 2) page->first_var_row->width[nc] = width; } } else { int twidth, cwidth; WINE_TRACE("column(0/%d) gap=%d width=%d\n", ncol, GET_SHORT(format, 0), GET_SHORT(format, 2)); twidth = MulDiv(HLPFILE_HalfPointsScale(page, GET_SHORT(format, 2)), table_width, 32767) - 1; cwidth = MulDiv(HLPFILE_HalfPointsScale(page, GET_SHORT(format, 0)), table_width, 32767); sprintf(tmp, "\\trleft%d\\clbrdrl\\brdrw1\\brdrcf2\\clbrdrt\\brdrw1\\brdrcf2\\clbrdrr\\brdrw1\\brdrcf2\\clbrdrb\\brdrw1\\brdrcf2\\cellx%d ", twidth, cwidth); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; if (type == 0 || type == 2) page->first_var_row->width[0] = cwidth; } format += ncol * 4; } lastcol = -1; for (nc = 0; nc < ncol; /**/) { BYTE brdr; WINE_TRACE("looking for format at offset %lu in column %d\n", (SIZE_T)(format - (buf + 0x15)), nc); if (!HLPFILE_RtfAddControl(rd, "\\pard")) goto done; if (buf[0x14] == HLP_TABLE) { nc = lastcol = GET_SHORT(format, 0); if (nc == -1) /* last column */ { if (!HLPFILE_RtfAddControl(rd, "\\row")) goto done; rd->char_pos += 2; break; } format += 5; if (!HLPFILE_RtfAddControl(rd, "\\intbl")) goto done; } else nc++; if (buf[0x14] == HLP_DISPLAY30) format += 6; else format += 4; bits = GET_USHORT(format, 0); format += 2; if (bits & 0x0001) fetch_long(&format); if (bits & 0x0002) { sprintf(tmp, "\\sb%d", HLPFILE_HalfPointsScale(page, fetch_short(&format))); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } if (bits & 0x0004) { sprintf(tmp, "\\sa%d", HLPFILE_HalfPointsScale(page, fetch_short(&format))); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } if (bits & 0x0008) { sprintf(tmp, "\\sl%d", HLPFILE_HalfPointsScale(page, fetch_short(&format))); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } if (bits & 0x0010) { sprintf(tmp, "\\li%d", HLPFILE_HalfPointsScale(page, fetch_short(&format))); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } if (bits & 0x0020) { sprintf(tmp, "\\ri%d", HLPFILE_HalfPointsScale(page, fetch_short(&format))); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } if (bits & 0x0040) { sprintf(tmp, "\\fi%d", HLPFILE_HalfPointsScale(page, fetch_short(&format))); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } /* prevents contents from being cut off */ if (!HLPFILE_RtfAddControl(rd, "\\slmult1")) goto done; if (bits & 0x0100) { short w; brdr = *format++; // richedit won't display any borders except as part of a table 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; /* if ((brdr & 0x01) && !HLPFILE_RtfAddControl(rd, "\\box")) goto done; if ((brdr & 0x02) && !HLPFILE_RtfAddControl(rd, "\\brdrt")) goto done; if ((brdr & 0x04) && !HLPFILE_RtfAddControl(rd, "\\brdrl")) goto done; if ((brdr & 0x08) && !HLPFILE_RtfAddControl(rd, "\\brdrb")) goto done; if ((brdr & 0x10) && !HLPFILE_RtfAddControl(rd, "\\brdrr")) goto done; if ((brdr & 0x20) && !HLPFILE_RtfAddControl(rd, "\\brdrth")) goto done; if (!(brdr & 0x20) && !HLPFILE_RtfAddControl(rd, "\\brdrs")) goto done; if ((brdr & 0x40) && !HLPFILE_RtfAddControl(rd, "\\brdrdb")) goto done; */ /* 0x80: unknown */ w = GET_SHORT(format, 0); format += 2; /* if (w) { sprintf(tmp, "\\brdrw%d", HLPFILE_HalfPointsScale(page, w)); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } */ } if (bits & 0x0200) { int i, ntab = fetch_short(&format); unsigned tab, ts; const char* kind; for (i = 0; i < ntab; i++) { tab = fetch_ushort(&format); ts = (tab & 0x4000) ? fetch_ushort(&format) : 0 /* left */; switch (ts) { default: WINE_FIXME("Unknown tab style %x\n", ts); /* fall through */ case 0: kind = ""; break; case 1: kind = "\\tqr"; break; case 2: kind = "\\tqc"; break; } /* FIXME: do kind */ sprintf(tmp, "%s\\tx%d", kind, HLPFILE_HalfPointsScale(page, tab & 0x3FFF)); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } } switch (bits & 0xc00) { default: WINE_FIXME("Unsupported alignment 0xC00\n"); break; case 0: if (!HLPFILE_RtfAddControl(rd, "\\ql")) goto done; break; case 0x400: if (!HLPFILE_RtfAddControl(rd, "\\qr")) goto done; break; case 0x800: if (!HLPFILE_RtfAddControl(rd, "\\qc")) goto done; break; } /* 0x1000 doesn't need space */ if ((bits & 0x1000) && !HLPFILE_RtfAddControl(rd, "\\keep")) goto done; if ((bits & 0xE080) != 0) WINE_FIXME("Unsupported bits %04x, potential trouble ahead\n", bits); while (text < text_end && format < format_end) { WINE_TRACE("Got text: %s (%p/%p - %p/%p)\n", debugstr_a(text), text, text_end, format, format_end); textsize = strlen(text); if (textsize) { if (rd->force_color) { if ((rd->current_link->cookie == hlp_link_popup) ? !HLPFILE_RtfAddControl(rd, "{\\uld\\cf1") : !HLPFILE_RtfAddControl(rd, "{\\ul\\cf1")) goto done; } if (!HLPFILE_RtfAddText(rd, text)) goto done; if (rd->force_color && !HLPFILE_RtfAddControl(rd, "}")) goto done; rd->char_pos += MultiByteToWideChar(rd->code_page, 0, text, textsize, NULL, 0); } /* else: null text, keep on storing attributes */ text += textsize + 1; WINE_TRACE("format=0x%02x\n", *format); if (*format == 0xff) { format++; break; } switch (*format) { case 0x20: WINE_FIXME("NIY20\n"); format += 5; break; case 0x21: WINE_FIXME("NIY21\n"); format += 3; break; case 0x80: { unsigned font = GET_USHORT(format, 1); unsigned fs; WINE_TRACE("Changing font to %d\n", font); format += 3; /* Font size in hlpfile is given in the same units as rtf control word \fs uses (half-points). */ switch (rd->font_scale) { case 0: fs = page->file->fonts[font].LogFont.lfHeight - 4; break; default: case 1: fs = page->file->fonts[font].LogFont.lfHeight; break; case 2: fs = page->file->fonts[font].LogFont.lfHeight + 4; break; } /* FIXME: colors are missing, at a minimum; also, the bold attribute loses information */ sprintf(tmp, "\\f%d\\cf%d\\fs%d%s%s%s%s", font + 1, font + 3, fs, page->file->fonts[font].LogFont.lfWeight > 400 ? "\\b" : "\\b0", page->file->fonts[font].LogFont.lfItalic ? "\\i" : "\\i0", page->file->fonts[font].LogFont.lfUnderline ? "\\ul" : "\\ul0", page->file->fonts[font].LogFont.lfStrikeOut ? "\\strike" : "\\strike0"); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; lastfont = font; } break; case 0x81: if (!HLPFILE_RtfAddControl(rd, "\\line")) goto done; format += 1; rd->char_pos++; break; case 0x82: if (buf[0x14] == HLP_TABLE) { if (format[1] != 0xFF) { if (!HLPFILE_RtfAddControl(rd, "\\par\\intbl")) goto done; } else if (GET_SHORT(format, 2) == -1) { if (!HLPFILE_RtfAddControl(rd, "\\cell\\intbl\\row")) goto done; rd->char_pos += 2; } else if (GET_SHORT(format, 2) == lastcol) { if (!HLPFILE_RtfAddControl(rd, "\\par\\pard")) goto done; } else { if (!HLPFILE_RtfAddControl(rd, "\\cell\\pard")) goto done; } } else if (!HLPFILE_RtfAddControl(rd, "\\par")) goto done; format += 1; rd->char_pos++; break; case 0x83: if (!HLPFILE_RtfAddControl(rd, "\\tab")) goto done; format += 1; rd->char_pos++; break; #if 0 case 0x84: format += 3; break; #endif case 0x86: case 0x87: case 0x88: { BYTE token = format[0]; BYTE type = format[1]; /* FIXME: we don't use 'BYTE pos = (*format - 0x86);' for the image position */ format += 2; size = fetch_long(&format); switch (type) { case 0x22: fetch_ushort(&format); /* hot spot */ /* fall through */ case 0x03: switch (GET_SHORT(format, 0)) { case 0: HLPFILE_RtfAddGfxByIndex(rd, page->file, GET_SHORT(format, 2)); rd->char_pos++; break; case 1: WINE_FIXME("does it work ??? %x<%u>#%u\n", GET_SHORT(format, 0), size, GET_SHORT(format, 2)); HLPFILE_RtfAddGfxByAddr(rd, page->file, format + 2, size - 4); rd->char_pos++; break; default: WINE_FIXME("??? %u\n", GET_SHORT(format, 0)); break; } break; case 0x05: if (format[6] == '!') { char *curr = (char *)format + 7; char *search = curr; while (*search && (*search != ',')) search++; if (!*search) { WINE_FIXME("Button parse error %s", curr); break; } WINE_TRACE("button => %s\n", debugstr_a(curr)); HLPFILE_AllocLink(rd, hlp_link_macro, search + 1, -1, 0, TRUE, FALSE, -2); sprintf(tmp, "{\\field{\\*\\fldinst{ HYPERLINK \"%p\" }}{\\fldrslt{", rd->current_link); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; if (curr == search) { if (!HLPFILE_RtfAddControl(rd, "\\u9744}}}")) goto done; } else { int len = search - curr; memcpy(tmp, curr, len); tmp[len] = 0; strcat(tmp, "}}}"); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } } else WINE_FIXME("Got an embedded element %s\n", debugstr_a((char *)format + 6)); break; default: WINE_FIXME("Got a type %d picture\n", type); break; } format += size; if (token == 0x88) if (!HLPFILE_RtfAddControl(rd, "\\qr\\par\\pard")) goto done; } break; case 0x89: { unsigned fs; format += 1; if (!rd->current_link) WINE_FIXME("No existing link\n"); if (!HLPFILE_RtfAddControl(rd, "}}}")) goto done; rd->current_link->cpMax = rd->char_pos; rd->current_link = NULL; rd->force_color = FALSE; // fix the font switch (rd->font_scale) { case 0: fs = page->file->fonts[lastfont].LogFont.lfHeight - 4; break; default: case 1: fs = page->file->fonts[lastfont].LogFont.lfHeight; break; case 2: fs = page->file->fonts[lastfont].LogFont.lfHeight + 4; break; } sprintf(tmp, "\\f%d\\cf%d\\fs%d%s%s%s%s", lastfont + 1, lastfont + 3, fs, page->file->fonts[lastfont].LogFont.lfWeight > 400 ? "\\b" : "\\b0", page->file->fonts[lastfont].LogFont.lfItalic ? "\\i" : "\\i0", page->file->fonts[lastfont].LogFont.lfUnderline ? "\\ul" : "\\ul0", page->file->fonts[lastfont].LogFont.lfStrikeOut ? "\\strike" : "\\strike0"); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; break; } case 0x8B: if (!HLPFILE_RtfAddControl(rd, "\\~")) goto done; format += 1; rd->char_pos++; break; case 0x8C: if (!HLPFILE_RtfAddControl(rd, "\\_")) goto done; /* FIXME: it could be that hyphen is also in input stream !! */ format += 1; rd->char_pos++; break; #if 0 case 0xA9: format += 2; break; #endif case 0xC8: case 0xCC: WINE_TRACE("macro => %s\n", debugstr_a((char *)format + 3)); HLPFILE_AllocLink(rd, hlp_link_macro, (const char*)format + 3, GET_USHORT(format, 1), 0, !(*format & 4), FALSE, -2); sprintf(tmp, "{\\field{\\*\\fldinst{ HYPERLINK \"%p\" }}{\\fldrslt{", rd->current_link); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; format += 3 + GET_USHORT(format, 1); break; case 0xE0: case 0xE1: WINE_WARN("jump topic 1 => %u\n", GET_UINT(format, 1)); HLPFILE_AllocLink(rd, (*format & 1) ? hlp_link_link : hlp_link_popup, page->file->lpszPath, -1, GET_UINT(format, 1), TRUE, FALSE, -2); sprintf(tmp, "{\\field{\\*\\fldinst{ HYPERLINK \"%p\" }}{\\fldrslt{", rd->current_link); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; format += 5; break; case 0xE2: case 0xE3: case 0xE6: case 0xE7: WINE_WARN("jump topic 1 => %u\n", GET_UINT(format, 1)); HLPFILE_AllocLink(rd, (*format & 1) ? hlp_link_link : hlp_link_popup, page->file->lpszPath, -1, GET_UINT(format, 1), !(*format & 4), FALSE, -2); sprintf(tmp, "{\\field{\\*\\fldinst{ HYPERLINK \"%p\" }}{\\fldrslt{", rd->current_link); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; format += 5; break; case 0xEA: case 0xEB: case 0xEE: case 0xEF: { const char* ptr = (const char*) format + 8; BYTE type = format[3]; int wnd = -1; switch (type) { case 1: wnd = *ptr; /* fall through */ case 0: ptr = page->file->lpszPath; break; case 6: for (wnd = page->file->numWindows - 1; wnd >= 0; wnd--) { if (!stricmp(ptr, page->file->windows[wnd].name)) break; } if (wnd == -1) WINE_WARN("Couldn't find window info for %s\n", debugstr_a(ptr)); ptr += strlen(ptr) + 1; /* fall through */ case 4: break; default: WINE_WARN("Unknown link type %d\n", type); break; } HLPFILE_AllocLink(rd, (*format & 1) ? hlp_link_link : hlp_link_popup, ptr, -1, GET_UINT(format, 4), !(*format & 4), FALSE, wnd); sprintf(tmp, "{\\field{\\*\\fldinst{ HYPERLINK \"%p\" }}{\\fldrslt{", rd->current_link); if (!HLPFILE_RtfAddControl(rd, tmp)) goto done; } format += 3 + GET_USHORT(format, 1); break; default: WINE_WARN("format %02x\n", *format); format++; } } if (bits & 0x0100) { if (buf[0x14] == HLP_TABLE) { WINE_FIXME("border in table\n"); } else 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; } } ret = TRUE; done: HeapFree(GetProcessHeap(), 0, text_base); return ret; } /****************************************************************** * HLPFILE_BrowsePage * */ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, unsigned font_scale, unsigned relative, HLPFILE_WINDOWINFO* info) { HLPFILE *hlpfile = page->file; BYTE *buf, *end; DWORD ref = page->reference; unsigned index, old_index = hlpfile->version <= 16 ? -1 : page->offset >> 15; unsigned offset, count = 0, offs = page->offset & 0x7fff; unsigned cpg, parlen; char tmp[1024]; const char* ck = NULL; BOOL found = FALSE; if (page == page->file->cnt_page) { memset(rd, 0, sizeof(struct RtfData)); rd->data = HeapAlloc(GetProcessHeap(), 0, page->offset); memcpy(rd->data, page->file->cnt_rtf, page->offset); rd->ptr = rd->data + page->offset; return TRUE; } rd->in_text = TRUE; rd->data = rd->ptr = HeapAlloc(GetProcessHeap(), 0, rd->allocated = 32768); rd->char_pos = 0; rd->first_link = rd->current_link = NULL; rd->first_hs = NULL; rd->force_color = FALSE; rd->font_scale = font_scale; rd->relative = relative; rd->char_pos_rel = 0; rd->imgcnt = 0; switch (hlpfile->charset) { case DEFAULT_CHARSET: case ANSI_CHARSET: cpg = 1252; break; case SHIFTJIS_CHARSET: cpg = 932; break; case HANGEUL_CHARSET: cpg = 949; break; case GB2312_CHARSET: cpg = 936; break; case CHINESEBIG5_CHARSET: cpg = 950; break; case GREEK_CHARSET: cpg = 1253; break; case TURKISH_CHARSET: cpg = 1254; break; case HEBREW_CHARSET: cpg = 1255; break; case ARABIC_CHARSET: cpg = 1256; break; case BALTIC_CHARSET: cpg = 1257; break; case VIETNAMESE_CHARSET: cpg = 1258; break; case RUSSIAN_CHARSET: cpg = 1251; break; case EE_CHARSET: cpg = 1250; break; case THAI_CHARSET: cpg = 874; break; case JOHAB_CHARSET: cpg = 1361; break; case MAC_CHARSET: ck = "mac"; break; default: WINE_FIXME("Unsupported charset %u\n", hlpfile->charset); cpg = 1252; } if (ck) { rd->code_page = CP_MACCP; sprintf(tmp, "{\\rtf1\\%s\\deff1", ck); if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE; } else { if (hlpfile->charset == DEFAULT_CHARSET) { rd->code_page = CP_ACP; } else { rd->code_page = cpg; } sprintf(tmp, "{\\rtf1\\ansi\\ansicpg%d\\deff1", cpg); if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE; } /* generate font table */ if (!HLPFILE_RtfAddControl(rd, "{\\fonttbl")) return FALSE; if (!HLPFILE_RtfAddControl(rd, "{\\f0 Arial;}")) return FALSE; for (index = 0; index < hlpfile->numFonts; index++) { const char* family; const char* face = hlpfile->fonts[index].LogFont.lfFaceName; switch (hlpfile->fonts[index].LogFont.lfPitchAndFamily & 0xF0) { case FF_MODERN: family = "modern"; break; case FF_ROMAN: family = "roman"; break; case FF_SWISS: family = "swiss"; break; case FF_SCRIPT: family = "script"; break; case FF_DECORATIVE: family = "decor"; break; default: family = "nil"; break; } if (!*face) face = "System"; /* winhelp.exe: System, winhlp32.exe: GUI font? */ sprintf(tmp, "{\\f%d\\f%s\\fprq%d\\fcharset%d %s;}", index + 1, family, hlpfile->fonts[index].LogFont.lfPitchAndFamily & 0x0F, hlpfile->fonts[index].LogFont.lfCharSet, face); if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE; } if (!HLPFILE_RtfAddControl(rd, "}")) return FALSE; /* generate color table */ if (!HLPFILE_RtfAddControl(rd, "{\\colortbl ;\\red0\\green128\\blue0;")) return FALSE; sprintf(tmp, "\\red%d\\green%d\\blue%d;", GetRValue(info->sr_color), GetGValue(info->sr_color), GetBValue(info->sr_color)); if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE; for (index = 0; index < hlpfile->numFonts; index++) { sprintf(tmp, "\\red%d\\green%d\\blue%d;", GetRValue(hlpfile->fonts[index].color), GetGValue(hlpfile->fonts[index].color), GetBValue(hlpfile->fonts[index].color)); if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE; } if (!HLPFILE_RtfAddControl(rd, "}")) return FALSE; do { if (hlpfile->version <= 16) { index = (ref - 0x0C) / hlpfile->dsize; offset = (ref - 0x0C) % hlpfile->dsize; } else { index = (ref - 0x0C) >> 14; offset = (ref - 0x0C) & 0x3FFF; } if (hlpfile->version <= 16 && index != old_index && old_index != -1) { /* we jumped to the next block, adjust pointers */ ref -= 12; offset -= 12; } if (index >= hlpfile->topic_maplen) {WINE_WARN("maplen\n"); break;} buf = hlpfile->topic_map[index] + offset; if (buf + 0x15 >= hlpfile->topic_end) {WINE_WARN("extra\n"); break;} end = min(buf + GET_UINT(buf, 0), hlpfile->topic_end); if (index != old_index) {offs = 0; old_index = index;} switch (buf[0x14]) { case HLP_TOPICHDR: if (count++) goto done; break; case HLP_DISPLAY30: case HLP_DISPLAY: case HLP_TABLE: if ((relative <= index * 0x8000 + offs) && !found) { sprintf(tmp, "{\\v\\pard scroll_%x}", relative); if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE; found = TRUE; rd->char_pos_rel = rd->char_pos; } if (!HLPFILE_BrowseParagraph(page, rd, buf, end, &parlen)) return FALSE; offs += parlen; break; default: WINE_ERR("buf[0x14] = %x\n", buf[0x14]); } if (hlpfile->version <= 16) { ref += GET_UINT(buf, 0xc); if (GET_UINT(buf, 0xc) == 0) break; } else ref = GET_UINT(buf, 0xc); } while (ref != 0xffffffff); done: page->first_link = rd->first_link; page->first_hs = rd->first_hs; return HLPFILE_RtfAddControl(rd, "}"); } /****************************************************************** * HLPFILE_ReadFont * * */ static BOOL HLPFILE_ReadFont(HLPFILE* hlpfile) { BYTE *ref, *end; unsigned i, len, idx; unsigned face_num, dscr_num, face_offset, dscr_offset; BYTE flag, family; if (!HLPFILE_FindSubFile(hlpfile, "|FONT", &ref, &end)) { WINE_WARN("no subfile FONT\n"); hlpfile->numFonts = 0; hlpfile->fonts = NULL; return FALSE; } ref += 9; face_num = GET_USHORT(ref, 0); dscr_num = GET_USHORT(ref, 2); face_offset = GET_USHORT(ref, 4); dscr_offset = GET_USHORT(ref, 6); WINE_TRACE("Got NumFacenames=%u@%u NumDesc=%u@%u\n", face_num, face_offset, dscr_num, dscr_offset); hlpfile->numFonts = dscr_num; hlpfile->fonts = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_FONT) * dscr_num); len = (dscr_offset - face_offset) / face_num; /* mvb font */ if (face_offset >= 16) { hlpfile->scale = 1; hlpfile->rounderr = 0; WINE_FIXME("mvb font: not implemented\n"); return FALSE; } /* new font */ if (face_offset >= 12) { hlpfile->scale = 1; hlpfile->rounderr = 0; WINE_FIXME("new font: not implemented\n"); return FALSE; } /* old font */ hlpfile->scale = 10; hlpfile->rounderr = 5; /* EPP for (i = face_offset; i < dscr_offset; i += len) */ /* EPP WINE_FIXME("[%d]: %*s\n", i / len, len, ref + i); */ for (i = 0; i < dscr_num; i++) { flag = ref[dscr_offset + i * 11 + 0]; family = ref[dscr_offset + i * 11 + 2]; hlpfile->fonts[i].LogFont.lfHeight = ref[dscr_offset + i * 11 + 1]; hlpfile->fonts[i].LogFont.lfWidth = 0; hlpfile->fonts[i].LogFont.lfEscapement = 0; hlpfile->fonts[i].LogFont.lfOrientation = 0; hlpfile->fonts[i].LogFont.lfWeight = (flag & 1) ? 700 : 400; hlpfile->fonts[i].LogFont.lfItalic = (flag & 2) != 0; hlpfile->fonts[i].LogFont.lfUnderline = (flag & 4) != 0; hlpfile->fonts[i].LogFont.lfStrikeOut = (flag & 8) != 0; hlpfile->fonts[i].LogFont.lfCharSet = hlpfile->charset; hlpfile->fonts[i].LogFont.lfOutPrecision = OUT_DEFAULT_PRECIS; hlpfile->fonts[i].LogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; hlpfile->fonts[i].LogFont.lfQuality = DEFAULT_QUALITY; hlpfile->fonts[i].LogFont.lfPitchAndFamily = DEFAULT_PITCH; switch (family) { case 0x01: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_MODERN; break; case 0x02: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_ROMAN; break; case 0x03: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_SWISS; break; case 0x04: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_SCRIPT; break; case 0x05: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_DECORATIVE; break; default: WINE_FIXME("Unknown family %u\n", family); } idx = GET_USHORT(ref, dscr_offset + i * 11 + 3); if (idx < face_num) { memcpy(hlpfile->fonts[i].LogFont.lfFaceName, ref + face_offset + idx * len, min(len, LF_FACESIZE - 1)); hlpfile->fonts[i].LogFont.lfFaceName[min(len, LF_FACESIZE - 1)] = '\0'; } else { WINE_FIXME("Too high face ref (%u/%u)\n", idx, face_num); strcpy(hlpfile->fonts[i].LogFont.lfFaceName, "Helv"); } hlpfile->fonts[i].hFont = 0; hlpfile->fonts[i].color = RGB(ref[dscr_offset + i * 11 + 5], ref[dscr_offset + i * 11 + 6], ref[dscr_offset + i * 11 + 7]); if (!hlpfile->fonts[i].LogFont.lfHeight) // uses default createfont height { HFONT font; if (font = CreateFontIndirectA(&hlpfile->fonts[i].LogFont)) { HDC hdc = CreateCompatibleDC(NULL); HFONT oldfont = SelectObject(hdc, font); TEXTMETRICA tm; if (GetTextMetricsA(hdc, &tm)) hlpfile->fonts[i].LogFont.lfHeight = (tm.tmHeight * 72 * 2) / GetDeviceCaps(hdc, LOGPIXELSY); SelectObject(hdc, oldfont); DeleteDC(hdc); DeleteObject(font); } } #define X(b,s) ((flag & (1 << b)) ? "-"s: "") WINE_TRACE("Font[%d]: flags=%02x%s%s%s%s%s%s pSize=%u family=%u face=%s[%u] color=%08x\n", i, flag, X(0, "bold"), X(1, "italic"), X(2, "underline"), X(3, "strikeOut"), X(4, "dblUnderline"), X(5, "smallCaps"), ref[dscr_offset + i * 11 + 1], family, debugstr_a(hlpfile->fonts[i].LogFont.lfFaceName), idx, GET_UINT(ref, dscr_offset + i * 11 + 5) & 0x00FFFFFF); } return TRUE; } /*********************************************************************** * * HLPFILE_ReadFileToBuffer */ static BOOL HLPFILE_ReadFileToBuffer(HLPFILE* hlpfile, HFILE hFile) { BYTE header[16], dummy[1]; if (_hread(hFile, header, 16) != 16) {WINE_WARN("header\n"); return FALSE;}; /* sanity checks */ if (GET_UINT(header, 0) != 0x00035F3F) {WINE_WARN("wrong header\n"); return FALSE;}; hlpfile->file_buffer_size = GET_UINT(header, 12); hlpfile->file_buffer = HeapAlloc(GetProcessHeap(), 0, hlpfile->file_buffer_size + 1); if (!hlpfile->file_buffer) return FALSE; memcpy(hlpfile->file_buffer, header, 16); if (_hread(hFile, hlpfile->file_buffer + 16, hlpfile->file_buffer_size - 16) !=hlpfile->file_buffer_size - 16) {WINE_WARN("filesize1\n"); return FALSE;}; if (_hread(hFile, dummy, 1) != 0) WINE_WARN("filesize2\n"); hlpfile->file_buffer[hlpfile->file_buffer_size] = '\0'; /* FIXME: was '0', sounds backwards to me */ return TRUE; } /*********************************************************************** * * HLPFILE_SystemCommands */ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile) { BYTE *buf, *ptr, *end; HLPFILE_MACRO *macro, **m; LPSTR p; int len; unsigned short magic, minor, major, flags, lcid = 0; hlpfile->lpszTitle = NULL; hlpfile->lpszCntPath = NULL; if (!HLPFILE_FindSubFile(hlpfile, "|SYSTEM", &buf, &end)) return FALSE; magic = GET_USHORT(buf + 9, 0); minor = GET_USHORT(buf + 9, 2); major = GET_USHORT(buf + 9, 4); /* gen date on 4 bytes */ flags = GET_USHORT(buf + 9, 10); WINE_TRACE("Got system header: magic=%04x version=%d.%d flags=%04x\n", magic, major, minor, flags); if (magic != 0x036C || major != 1) {WINE_WARN("Wrong system header\n"); return FALSE;} if (minor <= 16) { hlpfile->tbsize = 0x800; hlpfile->compressed = FALSE; } else if (flags == 0) { hlpfile->tbsize = 0x1000; hlpfile->compressed = FALSE; } else if (flags == 4) { hlpfile->tbsize = 0x1000; hlpfile->compressed = TRUE; } else { hlpfile->tbsize = 0x800; hlpfile->compressed = TRUE; } if (hlpfile->compressed) hlpfile->dsize = 0x4000; else hlpfile->dsize = hlpfile->tbsize - 0x0C; hlpfile->version = minor; hlpfile->flags = flags; hlpfile->charset = DEFAULT_CHARSET; hlpfile->codepage = GetACP(); if (hlpfile->version <= 16) { char *str = (char*)buf + 0x15; if (*str == 0) { str = strrchr(hlpfile->lpszPath, '\\') + 1; if (str == 1) str = hlpfile->lpszPath; } hlpfile->lpszTitle = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1); if (!hlpfile->lpszTitle) return FALSE; strcpy(hlpfile->lpszTitle, str); WINE_TRACE("Title: %s\n", debugstr_a(hlpfile->lpszTitle)); } else { for (ptr = buf + 0x15; ptr + 4 <= end; ptr += GET_USHORT(ptr, 2) + 4) { char *str = (char*) ptr + 4; switch (GET_USHORT(ptr, 0)) { case 1: if (hlpfile->lpszTitle) {WINE_WARN("title\n"); break;} hlpfile->lpszTitle = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1); if (!hlpfile->lpszTitle) return FALSE; strcpy(hlpfile->lpszTitle, str); WINE_TRACE("Title: %s\n", debugstr_a(hlpfile->lpszTitle)); break; case 2: if (hlpfile->lpszCopyright) {WINE_WARN("copyright\n"); break;} hlpfile->lpszCopyright = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1); if (!hlpfile->lpszCopyright) return FALSE; strcpy(hlpfile->lpszCopyright, str); WINE_TRACE("Copyright: %s\n", debugstr_a(hlpfile->lpszCopyright)); break; case 3: if (GET_USHORT(ptr, 2) != 4) {WINE_WARN("system3\n");break;} hlpfile->contents_start = GET_UINT(ptr, 4); WINE_TRACE("Setting contents start at %08lx\n", hlpfile->contents_start); break; case 4: macro = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_MACRO) + strlen(str) + 1); if (!macro) break; p = (char*)macro + sizeof(HLPFILE_MACRO); strcpy(p, str); macro->lpszMacro = p; macro->next = 0; for (m = &hlpfile->first_macro; *m; m = &(*m)->next); *m = macro; break; case 5: if (GET_USHORT(ptr, 4 + 4) != 1) WINE_FIXME("More than one icon, picking up first\n"); /* 0x16 is sizeof(CURSORICONDIR), see user32/user_private.h */ hlpfile->hIcon = CreateIconFromResourceEx(ptr + 4 + 0x16, GET_USHORT(ptr, 2) - 0x16, TRUE, 0x30000, 0, 0, 0); break; case 6: if (GET_USHORT(ptr, 2) != 90) {WINE_WARN("system6\n");break;} if (hlpfile->windows) hlpfile->windows = HeapReAlloc(GetProcessHeap(), 0, hlpfile->windows, sizeof(HLPFILE_WINDOWINFO) * ++hlpfile->numWindows); else hlpfile->windows = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_WINDOWINFO) * ++hlpfile->numWindows); if (hlpfile->windows) { HLPFILE_WINDOWINFO* wi = &hlpfile->windows[hlpfile->numWindows - 1]; flags = GET_USHORT(ptr, 4); if (flags & 0x0001) strcpy(wi->type, &str[2]); else wi->type[0] = '\0'; if (flags & 0x0002) strcpy(wi->name, &str[12]); else wi->name[0] = '\0'; if (flags & 0x0004) strcpy(wi->caption, &str[21]); else lstrcpynA(wi->caption, hlpfile->lpszTitle, sizeof(wi->caption)); wi->origin.x = (flags & 0x0008) ? GET_USHORT(ptr, 76) : CW_USEDEFAULT; wi->origin.y = (flags & 0x0010) ? GET_USHORT(ptr, 78) : CW_USEDEFAULT; wi->size.cx = (flags & 0x0020) ? GET_USHORT(ptr, 80) : CW_USEDEFAULT; wi->size.cy = (flags & 0x0040) ? GET_USHORT(ptr, 82) : CW_USEDEFAULT; wi->style = (flags & 0x0080) ? GET_USHORT(ptr, 84) : SW_SHOW; wi->win_style = WS_OVERLAPPEDWINDOW; wi->sr_color = (flags & 0x0100) ? GET_UINT(ptr, 86) : 0xFFFFFF; wi->nsr_color = (flags & 0x0200) ? GET_UINT(ptr, 90) : 0xFFFFFF; wi->flags = flags; 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", flags & 0x0001 ? 'T' : 't', flags & 0x0002 ? 'N' : 'n', flags & 0x0004 ? 'C' : 'c', flags & 0x0008 ? 'X' : 'x', flags & 0x0010 ? 'Y' : 'y', flags & 0x0020 ? 'W' : 'w', flags & 0x0040 ? 'H' : 'h', flags & 0x0080 ? 'S' : 's', debugstr_a(wi->type), debugstr_a(wi->name), debugstr_a(wi->caption), wi->origin.x, wi->origin.y, wi->size.cx, wi->size.cy); } break; case 8: WINE_WARN("Citation: %s\n", debugstr_a((char *)ptr + 4)); break; case 9: lcid = GET_USHORT(ptr, 12); break; case 10: len = strlen(hlpfile->lpszPath); if (hlpfile->lpszCntPath) {WINE_WARN("cnt\n"); break;} hlpfile->lpszCntPath = HeapAlloc(GetProcessHeap(), 0, len + 1); if (!hlpfile->lpszCntPath) return FALSE; lstrcpyA(hlpfile->lpszCntPath, hlpfile->lpszPath); hlpfile->lpszCntPath[len-3] = 'C'; hlpfile->lpszCntPath[len-2] = 'N'; hlpfile->lpszCntPath[len-1] = 'T'; WINE_TRACE("CNT: '%s'\n", hlpfile->lpszCntPath); break; case 11: hlpfile->charset = ptr[4]; WINE_TRACE("Charset: %d\n", hlpfile->charset); break; default: WINE_WARN("Unsupported SystemRecord[%d]\n", GET_USHORT(ptr, 0)); } } } if (!lcid && (hlpfile->charset == DEFAULT_CHARSET)) { BYTE *cbuf, *cend; if (HLPFILE_FindSubFile(hlpfile, "|CHARSET", &cbuf, &cend) && ((cend - cbuf) >= 11)) hlpfile->charset = *(WORD *)(cbuf + 9); if (((hlpfile->charset == DEFAULT_CHARSET) || (hlpfile->charset == ANSI_CHARSET)) && HLPFILE_FindSubFile(hlpfile, "|FONT", &cbuf, &cend)) { cbuf += 9; unsigned fnum = GET_USHORT(cbuf, 0); unsigned foff = GET_USHORT(cbuf, 4); unsigned len = (GET_USHORT(cbuf, 6) - foff) / fnum; BYTE *pos = cbuf + foff; for (int i = 0; i < fnum; i++, pos += len) { if (strstr(pos, "\xb2\xd3\xa9\xfa\xc5\xe9")) // MingLiU { hlpfile->charset = CHINESEBIG5_CHARSET; break; } if (!strcmp(pos, "CFShouSung")) hlpfile->charset = GB2312_CHARSET; // don't break because big5 files have this font too if (strstr(pos, "\x83\x53\x56\x83\x63\x83\x4e") || // Gothic strstr(pos, "\x96\xbe\x92\xa9")) // Mincho { hlpfile->charset = SHIFTJIS_CHARSET; break; } if (strstr(pos, "\xb8\xed\xc1\xb6") || // Myeongjo strstr(pos, "\xb0\xed\xb5\xf1") || // Gothic strstr(pos, "\xb9\xd9\xc5\xc1")) // Batang { hlpfile->charset = HANGEUL_CHARSET; break; } if (strstr(pos, "Arabic")) { hlpfile->charset = ARABIC_CHARSET; break; } if (!strcmp(pos, "Arial Cyr")) { hlpfile->charset = RUSSIAN_CHARSET; break; } if (strstr(pos, "Thai") || !strcmp(pos, "CordiaUPC")) { hlpfile->charset = THAI_CHARSET; break; } } } } if ((hlpfile->charset != DEFAULT_CHARSET) && (hlpfile->charset != ANSI_CHARSET)) { CHARSETINFO info; TranslateCharsetInfo(hlpfile->charset, &info, TCI_SRCCHARSET); hlpfile->codepage = info.ciACP; } else if (lcid) { CHARSETINFO info; if (TranslateCharsetInfo(lcid, &info, TCI_SRCLOCALE)) { hlpfile->codepage = info.ciACP; hlpfile->charset = info.ciCharset; } } if (!hlpfile->lpszCntPath) { len = strlen(hlpfile->lpszPath); hlpfile->lpszCntPath = HeapAlloc(GetProcessHeap(), 0, len+1); lstrcpyA(hlpfile->lpszCntPath, hlpfile->lpszPath); hlpfile->lpszCntPath[len-3] = 'C'; hlpfile->lpszCntPath[len-2] = 'N'; hlpfile->lpszCntPath[len-1] = 'T'; WINE_TRACE("CNT not found, assuming '%s'\n", hlpfile->lpszCntPath); } if (!hlpfile->lpszTitle) hlpfile->lpszTitle = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 128); return TRUE; } /*********************************************************************** * * HLPFILE_GetContext */ static BOOL HLPFILE_GetContext(HLPFILE *hlpfile) { BYTE *cbuf, *cend; unsigned clen; if (!HLPFILE_FindSubFile(hlpfile, "|CONTEXT", &cbuf, &cend)) {WINE_WARN("context0\n"); return FALSE;} clen = cend - cbuf; hlpfile->Context = HeapAlloc(GetProcessHeap(), 0, clen); if (!hlpfile->Context) return FALSE; memcpy(hlpfile->Context, cbuf, clen); return TRUE; } /*********************************************************************** * * HLPFILE_GetTreeData */ HLPFILE_XW *HLPFILE_GetTreeData(HLPFILE *hlpfile, char keyfile) { BYTE *cbuf, *cend; unsigned clen; char tree[] = "|xWBTREE"; char data[] = "|xWDATA"; HLPFILE_XW *xw = NULL; keyfile = toupper(keyfile); for (int i = 0; i < 5; i++) { if (hlpfile->xw[i].id == keyfile) return &hlpfile->xw[i]; if (!hlpfile->xw[i].id) { xw = &hlpfile->xw[i]; break; } } if (!xw) return NULL; tree[1] = keyfile; data[1] = keyfile; if (!HLPFILE_FindSubFile(hlpfile, tree, &cbuf, &cend)) return FALSE; clen = cend - cbuf; xw->tree = HeapAlloc(GetProcessHeap(), 0, clen); if (!xw->tree) return FALSE; memcpy(xw->tree, cbuf, clen); if (!HLPFILE_FindSubFile(hlpfile, data, &cbuf, &cend)) { WINE_ERR("corrupted help file: %s present but %s absent\n", tree, data); HeapFree(GetProcessHeap(), 0, xw->tree); return NULL; } clen = cend - cbuf; xw->data = HeapAlloc(GetProcessHeap(), 0, clen); if (!xw->data) { HeapFree(GetProcessHeap(), 0, xw->tree); return NULL; } memcpy(xw->data, cbuf, clen); xw->id = keyfile; return xw; } /*********************************************************************** * * HLPFILE_GetKeywords */ static BOOL HLPFILE_GetKeywords(HLPFILE *hlpfile) { return HLPFILE_GetTreeData(hlpfile, 'K') ? TRUE : FALSE; } /*********************************************************************** * * HLPFILE_GetMap */ static BOOL HLPFILE_GetMap(HLPFILE *hlpfile) { BYTE *cbuf, *cend; unsigned entries, i; if (!HLPFILE_FindSubFile(hlpfile, "|CTXOMAP", &cbuf, &cend)) {WINE_WARN("no map section\n"); return FALSE;} entries = GET_USHORT(cbuf, 9); hlpfile->Map = HeapAlloc(GetProcessHeap(), 0, entries * sizeof(HLPFILE_MAP)); if (!hlpfile->Map) return FALSE; hlpfile->wMapLen = entries; for (i = 0; i < entries; i++) { hlpfile->Map[i].lMap = GET_UINT(cbuf+11,i*8); hlpfile->Map[i].offset = GET_UINT(cbuf+11,i*8+4); } return TRUE; } /*********************************************************************** * * HLPFILE_GetTOMap */ static BOOL HLPFILE_GetTOMap(HLPFILE *hlpfile) { BYTE *cbuf, *cend; unsigned clen; if (!HLPFILE_FindSubFile(hlpfile, "|TOMAP", &cbuf, &cend)) {WINE_WARN("no tomap section\n"); return FALSE;} clen = cend - cbuf - 9; hlpfile->TOMap = HeapAlloc(GetProcessHeap(), 0, clen); if (!hlpfile->TOMap) return FALSE; memcpy(hlpfile->TOMap, cbuf+9, clen); hlpfile->wTOMapLen = clen/4; return TRUE; } /*********************************************************************** * * HLPFILE_GetTree */ static BOOL HLPFILE_GetTree(HLPFILE *hlpfile, char *name, BYTE **buf) { BYTE *cbuf, *cend; unsigned clen; if (!HLPFILE_FindSubFile(hlpfile, name, &cbuf, &cend)) {WINE_WARN("no %s section\n", name); return FALSE;} clen = cend - cbuf; *buf = HeapAlloc(GetProcessHeap(), 0, clen); if (!*buf) return FALSE; memcpy(*buf, cbuf, clen); return TRUE; } /*********************************************************************** * * DeleteMacro */ static void HLPFILE_DeleteMacro(HLPFILE_MACRO* macro) { HLPFILE_MACRO* next; while (macro) { next = macro->next; HeapFree(GetProcessHeap(), 0, macro); macro = next; } } static void HLPFILE_DeleteLink(HLPFILE_LINK *link) { HLPFILE_LINK* next; while(link) { next = link->next; HeapFree(GetProcessHeap(), 0, link); link = next; } } static void HLPFILE_DeleteRow(HLPFILE_ROW *row) { HLPFILE_ROW* next; while(row) { next = row->next; HeapFree(GetProcessHeap(), 0, row); row = next; } } /*********************************************************************** * * DeletePage */ static void HLPFILE_DeletePage(HLPFILE_PAGE* page) { HLPFILE_PAGE* next; while (page) { next = page->next; HLPFILE_DeleteMacro(page->first_macro); HLPFILE_DeleteLink(page->first_link); HLPFILE_DeleteRow(page->first_var_row); HeapFree(GetProcessHeap(), 0, page); page = next; } } /*********************************************************************** * * HLPFILE_FreeHlpFile */ void HLPFILE_FreeHlpFile(HLPFILE* hlpfile) { unsigned i; if (!hlpfile || --hlpfile->wRefCount > 0) return; if (hlpfile->next) hlpfile->next->prev = hlpfile->prev; if (hlpfile->prev) hlpfile->prev->next = hlpfile->next; else first_hlpfile = hlpfile->next; if (hlpfile->numFonts) { for (i = 0; i < hlpfile->numFonts; i++) { DeleteObject(hlpfile->fonts[i].hFont); } HeapFree(GetProcessHeap(), 0, hlpfile->fonts); } if (hlpfile->numBmps) { for (i = 0; i < hlpfile->numBmps; i++) { DeleteObject(hlpfile->bmps[i]); } HeapFree(GetProcessHeap(), 0, hlpfile->bmps); } HLPFILE_DeletePage(hlpfile->first_page); HLPFILE_DeleteMacro(hlpfile->first_macro); DestroyIcon(hlpfile->hIcon); if (hlpfile->numWindows) HeapFree(GetProcessHeap(), 0, hlpfile->windows); if (hlpfile->lpszCntPath) HeapFree(GetProcessHeap(), 0, hlpfile->lpszCntPath); HeapFree(GetProcessHeap(), 0, hlpfile->Context); HeapFree(GetProcessHeap(), 0, hlpfile->Map); HeapFree(GetProcessHeap(), 0, hlpfile->lpszTitle); HeapFree(GetProcessHeap(), 0, hlpfile->lpszCopyright); HeapFree(GetProcessHeap(), 0, hlpfile->file_buffer); HeapFree(GetProcessHeap(), 0, hlpfile->phrases_offsets); HeapFree(GetProcessHeap(), 0, hlpfile->phrases_buffer); HeapFree(GetProcessHeap(), 0, hlpfile->topic_map); HeapFree(GetProcessHeap(), 0, hlpfile->help_on_file); for (int i = 0; i < 5; i++) { if (hlpfile->xw[i].id) { HeapFree(GetProcessHeap(), 0, hlpfile->xw[i].tree); HeapFree(GetProcessHeap(), 0, hlpfile->xw[i].data); } } if (hlpfile->TOMap) HeapFree(GetProcessHeap(), 0, hlpfile->TOMap); if (hlpfile->ttlbtree) HeapFree(GetProcessHeap(), 0, hlpfile->ttlbtree); if (hlpfile->viola) HeapFree(GetProcessHeap(), 0, hlpfile->viola); if (hlpfile->rose) HeapFree(GetProcessHeap(), 0, hlpfile->rose); if (hlpfile->cnt_page) { HeapFree(GetProcessHeap(), 0, hlpfile->cnt_rtf); HLPFILE_DeletePage(hlpfile->cnt_page); } HeapFree(GetProcessHeap(), 0, hlpfile); } /*********************************************************************** * * HLPFILE_UncompressLZ77_Phrases */ static BOOL HLPFILE_UncompressLZ77_Phrases(HLPFILE* hlpfile) { UINT i, num, dec_size, head_size; BYTE *buf, *end; if (!HLPFILE_FindSubFile(hlpfile, "|Phrases", &buf, &end)) return FALSE; if (hlpfile->version <= 16) head_size = 13; else head_size = 17; num = hlpfile->num_phrases = GET_USHORT(buf, 9); if (buf + 2 * num + 0x13 >= end) {WINE_WARN("1a\n"); return FALSE;}; if (hlpfile->version <= 16) dec_size = end - buf - 15 - 2 * num; else dec_size = HLPFILE_UncompressedLZ77_Size(buf + 0x13 + 2 * num, end); hlpfile->phrases_offsets = HeapAlloc(GetProcessHeap(), 0, sizeof(unsigned) * (num + 1)); hlpfile->phrases_buffer = HeapAlloc(GetProcessHeap(), 0, dec_size); if (!hlpfile->phrases_offsets || !hlpfile->phrases_buffer) { HeapFree(GetProcessHeap(), 0, hlpfile->phrases_offsets); HeapFree(GetProcessHeap(), 0, hlpfile->phrases_buffer); return FALSE; } for (i = 0; i <= num; i++) hlpfile->phrases_offsets[i] = GET_USHORT(buf, head_size + 2 * i) - 2 * num - 2; if (hlpfile->version <= 16) memcpy(hlpfile->phrases_buffer, buf + 15 + 2*num, dec_size); else HLPFILE_UncompressLZ77(buf + 0x13 + 2 * num, end, (BYTE*)hlpfile->phrases_buffer); hlpfile->hasPhrases = TRUE; return TRUE; } /*********************************************************************** * * HLPFILE_Uncompress_Phrases40 */ static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE* hlpfile) { UINT num; INT dec_size, cpr_size; BYTE *buf_idx, *end_idx; BYTE *buf_phs, *end_phs; ULONG* ptr, mask = 0; unsigned int i; unsigned short bc, n; if (!HLPFILE_FindSubFile(hlpfile, "|PhrIndex", &buf_idx, &end_idx) || !HLPFILE_FindSubFile(hlpfile, "|PhrImage", &buf_phs, &end_phs)) return FALSE; ptr = (ULONG*)(buf_idx + 9 + 28); bc = GET_USHORT(buf_idx, 9 + 24) & 0x0F; num = hlpfile->num_phrases = GET_USHORT(buf_idx, 9 + 4); WINE_TRACE("Index: Magic=%08x #entries=%u CpsdSize=%u PhrImgSize=%u\n" "\tPhrImgCprsdSize=%u 0=%u bc=%x ukn=%x\n", GET_UINT(buf_idx, 9 + 0), GET_UINT(buf_idx, 9 + 4), GET_UINT(buf_idx, 9 + 8), GET_UINT(buf_idx, 9 + 12), GET_UINT(buf_idx, 9 + 16), GET_UINT(buf_idx, 9 + 20), GET_USHORT(buf_idx, 9 + 24), GET_USHORT(buf_idx, 9 + 26)); dec_size = GET_UINT(buf_idx, 9 + 12); cpr_size = GET_UINT(buf_idx, 9 + 16); if (dec_size != cpr_size && dec_size != HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs)) { WINE_WARN("size mismatch %u %u\n", dec_size, HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs)); dec_size = max(dec_size, HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs)); } hlpfile->phrases_offsets = HeapAlloc(GetProcessHeap(), 0, sizeof(unsigned) * (num + 1)); hlpfile->phrases_buffer = HeapAlloc(GetProcessHeap(), 0, dec_size); if (!hlpfile->phrases_offsets || !hlpfile->phrases_buffer) { HeapFree(GetProcessHeap(), 0, hlpfile->phrases_offsets); HeapFree(GetProcessHeap(), 0, hlpfile->phrases_buffer); return FALSE; } #define getbit() ((mask <<= 1) ? (*ptr & mask) != 0: (*++ptr & (mask=1)) != 0) hlpfile->phrases_offsets[0] = 0; ptr--; /* as we'll first increment ptr because mask is 0 on first getbit() call */ for (i = 0; i < num; i++) { for (n = 1; getbit(); n += 1 << bc); if (getbit()) n++; if (bc > 1 && getbit()) n += 2; if (bc > 2 && getbit()) n += 4; if (bc > 3 && getbit()) n += 8; if (bc > 4 && getbit()) n += 16; hlpfile->phrases_offsets[i + 1] = hlpfile->phrases_offsets[i] + n; } #undef getbit if (dec_size == cpr_size) memcpy(hlpfile->phrases_buffer, buf_phs + 9, dec_size); else HLPFILE_UncompressLZ77(buf_phs + 9, end_phs, (BYTE*)hlpfile->phrases_buffer); hlpfile->hasPhrases40 = TRUE; return TRUE; } /*********************************************************************** * * HLPFILE_Uncompress_Topic */ static BOOL HLPFILE_Uncompress_Topic(HLPFILE* hlpfile) { BYTE *buf, *ptr, *end, *newptr; unsigned int i, newsize = 0; unsigned int topic_size; if (!HLPFILE_FindSubFile(hlpfile, "|TOPIC", &buf, &end)) {WINE_WARN("topic0\n"); return FALSE;} buf += 9; /* Skip file header */ topic_size = end - buf; if (hlpfile->compressed) { hlpfile->topic_maplen = (topic_size - 1) / hlpfile->tbsize + 1; for (i = 0; i < hlpfile->topic_maplen; i++) { ptr = buf + i * hlpfile->tbsize; /* I don't know why, it's necessary for printman.hlp */ if (ptr + 0x44 > end) ptr = end - 0x44; newsize += HLPFILE_UncompressedLZ77_Size(ptr + 0xc, min(end, ptr + hlpfile->tbsize)); } hlpfile->topic_map = HeapAlloc(GetProcessHeap(), 0, hlpfile->topic_maplen * sizeof(hlpfile->topic_map[0]) + newsize); if (!hlpfile->topic_map) return FALSE; newptr = (BYTE*)(hlpfile->topic_map + hlpfile->topic_maplen); hlpfile->topic_end = newptr + newsize; for (i = 0; i < hlpfile->topic_maplen; i++) { ptr = buf + i * hlpfile->tbsize; if (ptr + 0x44 > end) ptr = end - 0x44; hlpfile->topic_map[i] = newptr; newptr = HLPFILE_UncompressLZ77(ptr + 0xc, min(end, ptr + hlpfile->tbsize), newptr); } } else { /* basically, we need to copy the TopicBlockSize byte pages * (removing the first 0x0C) in one single area in memory */ hlpfile->topic_maplen = (topic_size - 1) / hlpfile->tbsize + 1; hlpfile->topic_map = HeapAlloc(GetProcessHeap(), 0, hlpfile->topic_maplen * (sizeof(hlpfile->topic_map[0]) + hlpfile->dsize)); if (!hlpfile->topic_map) return FALSE; newptr = (BYTE*)(hlpfile->topic_map + hlpfile->topic_maplen); hlpfile->topic_end = newptr + topic_size; for (i = 0; i < hlpfile->topic_maplen; i++) { hlpfile->topic_map[i] = newptr + i * hlpfile->dsize; memcpy(hlpfile->topic_map[i], buf + i * hlpfile->tbsize + 0x0C, hlpfile->dsize); } } return TRUE; } /*********************************************************************** * * HLPFILE_AddPage */ static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, const BYTE *buf, const BYTE *end, unsigned ref, unsigned offset) { HLPFILE_PAGE* page; const BYTE* title; UINT titlesize, blocksize, datalen; char* ptr; char* temp; HLPFILE_MACRO*macro; blocksize = GET_UINT(buf, 0); datalen = GET_UINT(buf, 0x10); title = buf + datalen; if (title > end) {WINE_WARN("page2\n"); return FALSE;}; titlesize = GET_UINT(buf, 4); page = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_PAGE) + titlesize * 2 + 2); if (!page) return FALSE; page->lpszTitle = (char*)page + sizeof(HLPFILE_PAGE); temp = HeapAlloc(GetProcessHeap(), 0, titlesize + 1); if (titlesize > blocksize - datalen) { /* need to decompress */ if (hlpfile->hasPhrases) HLPFILE_Uncompress2(hlpfile, title, end, (BYTE*)temp, (BYTE*)temp + titlesize); else if (hlpfile->hasPhrases40) HLPFILE_Uncompress3(hlpfile, temp, temp + titlesize, title, end); else { WINE_FIXME("Text size is too long, splitting\n"); titlesize = blocksize - datalen; memcpy(temp, title, titlesize); } } else memcpy(temp, title, titlesize); temp[titlesize] = '\0'; MultiByteToWideChar(hlpfile->codepage, 0, temp, -1, page->lpszTitle, titlesize + 1); if (hlpfile->first_page) { hlpfile->last_page->next = page; page->prev = hlpfile->last_page; hlpfile->last_page = page; } else { hlpfile->first_page = page; hlpfile->last_page = page; page->prev = NULL; } page->file = hlpfile; page->next = NULL; page->first_macro = NULL; page->first_link = NULL; page->first_var_row = NULL; page->wNumber = GET_UINT(buf, 0x21); page->offset = offset; page->reference = ref; page->browse_bwd = GET_UINT(buf, 0x19); page->browse_fwd = GET_UINT(buf, 0x1D); if (hlpfile->version <= 16) { if (page->browse_bwd == 0xFFFF || page->browse_bwd == 0xFFFFFFFF) page->browse_bwd = 0xFFFFFFFF; else page->browse_bwd = hlpfile->TOMap[page->browse_bwd]; if (page->browse_fwd == 0xFFFF || page->browse_fwd == 0xFFFFFFFF) page->browse_fwd = 0xFFFFFFFF; else page->browse_fwd = hlpfile->TOMap[page->browse_fwd]; } WINE_TRACE("Added page[%d]: title=%s %08x << %08x >> %08x\n", page->wNumber, debugstr_a(page->lpszTitle), page->browse_bwd, page->offset, page->browse_fwd); /* now load macros */ ptr = temp + strlen(temp) + 1; while (ptr < temp + titlesize) { unsigned len = strlen(ptr); char* macro_str; WINE_TRACE("macro: %s\n", debugstr_a(ptr)); macro = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_MACRO) + len + 1); macro->lpszMacro = macro_str = (char*)(macro + 1); memcpy(macro_str, ptr, len + 1); /* FIXME: shall we really link macro in reverse order ?? * may produce strange results when played at page opening */ macro->next = page->first_macro; page->first_macro = macro; ptr += len + 1; } HeapFree(GetProcessHeap(), 0, temp); return TRUE; } /*********************************************************************** * * HLPFILE_SkipParagraph */ static BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, const BYTE *buf, const BYTE *end, unsigned* len) { const BYTE *tmp; if (!hlpfile->first_page) {WINE_WARN("no page\n"); return FALSE;}; if (buf + 0x19 > end) {WINE_WARN("header too small\n"); return FALSE;}; tmp = buf + 0x15; if (buf[0x14] == HLP_DISPLAY || buf[0x14] == HLP_TABLE) { fetch_long(&tmp); *len = fetch_ushort(&tmp); } else *len = end-buf-15; return TRUE; } /*********************************************************************** * * HLPFILE_ReadCntFile * */ static void HLPFILE_ReadCntFile(HLPFILE *hlpfile) { char *str, *next_str; char *buf; int l, len, read, curl = 1; struct RtfData rd = {0}; HANDLE h; char tmp[256]; WCHAR tmpW[256]; HLPFILE_PAGE *cnt; BOOL cnt_found = FALSE; rd.in_text = TRUE; h = CreateFileA(hlpfile->lpszCntPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h == INVALID_HANDLE_VALUE) return NULL; len = GetFileSize(h, NULL); if (len == INVALID_FILE_SIZE) { CloseHandle(h); return; } buf = HeapAlloc(GetProcessHeap(), 0, len + 1); buf[len] = 0; if (!buf) { CloseHandle(h); return; } if (!ReadFile(h, buf, len, &read, NULL)) { CloseHandle(h); HeapFree(GetProcessHeap(), 0, buf); return; } CloseHandle(h); rd.ptr = rd.data = HeapAlloc(GetProcessHeap(), 0, 1024); rd.allocated = 1024; cnt = (HLPFILE_PAGE *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(HLPFILE_PAGE)); if (!HLPFILE_RtfAddControl(&rd, "{\\rtf1\\ansi\\urtf0\\deff0{\\fonttbl{\\f0\\fcharset0 Times New Roman;}}")) goto errexit; 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; if (!HLPFILE_RtfAddControl(&rd, "\\viewkind2")) goto errexit; str = buf; while (str) { unsigned char *start, *end; next_str = strchr(str, '\n'); if (next_str) { end = next_str-1; while (end > str && isspace(*end)) *end--=0; next_str++; } start = str; while (isspace(*start)) start++; if (*start == ':' || *start == 0) { // TODO: handle index if (!strncmp(start, ":Title ", 7)) { start += 7; while (isspace(*start)) start++; len = strlen(start); cnt = HeapReAlloc(GetProcessHeap(), 0, cnt, sizeof(HLPFILE_PAGE) + (len + 1) * 2); cnt->lpszTitle = ((BYTE *)cnt) + sizeof(HLPFILE_PAGE); MultiByteToWideChar(hlpfile->codepage, 0, start, -1, cnt->lpszTitle, len); } str = next_str; continue; } l = strtol(start, NULL, 10); if ((l <= 0) || (l > 9)) { str = next_str; continue; } cnt_found = TRUE; while (isdigit(*start)) start++; while (isspace(*start)) start++; end = strchr(start, '='); while (end && (*(end - 1) == '\\')) end = strchr(end + 1, '='); if (!end) { if (l > curl) curl++; else curl = l; } else if (l < curl) curl = l + 1; if (curl == 1) sprintf(tmp, "\\pard\\s%d ", curl); else sprintf(tmp, "\\pard\\collapsed\\s%d ", curl); if (!HLPFILE_RtfAddControl(&rd, tmp)) goto errexit; if (end) { char *index = end + 1; char *file = strchr(index, '@'); char *wnd = strchr(index, '>'); *end = 0; if (file) { *file = 0; file++; } if (wnd) { *wnd = 0; wnd++; } HLPFILE_AllocLink2(&rd, hlp_link_link, file ? file : hlpfile->lpszPath, -1, HLPFILE_Hash(index), FALSE, FALSE, -2, wnd); sprintf(tmp, "{\\field{\\*\\fldinst{ HYPERLINK \"%p\" }}{\\fldrslt{", rd.current_link); if (!HLPFILE_RtfAddControl(&rd, tmp)) goto errexit; rd.current_link = NULL; } else curl++; // outline only works with utf8 codepage MultiByteToWideChar(hlpfile->codepage, 0, start, -1, tmpW, 256); tmpW[255] = 0; WideCharToMultiByte(CP_UTF8, 0, tmpW, -1, tmp, 256, NULL, NULL); tmp[255] = 0; if (!HLPFILE_RtfAddControl(&rd, tmp)) goto errexit; if (end && !HLPFILE_RtfAddControl(&rd, "}}}")) goto errexit; if (!HLPFILE_RtfAddControl(&rd, "\\par")) goto errexit; str = next_str; } if (!cnt_found) goto errexit; // empty cnt file if (!HLPFILE_RtfAddControl(&rd, "}")) goto errexit; hlpfile->cnt_rtf = rd.data; hlpfile->cnt_page = cnt; cnt->file = hlpfile; cnt->first_link = rd.first_link; cnt->offset = rd.ptr - rd.data; if (!cnt->lpszTitle) cnt->lpszTitle = (WCHAR*)L"Contents"; HeapFree(GetProcessHeap(), 0, buf); return; errexit: HeapFree(GetProcessHeap(), 0, buf); HeapFree(GetProcessHeap(), 0, rd.data); HeapFree(GetProcessHeap(), 0, cnt); return; } /*********************************************************************** * * HLPFILE_DoReadHlpFile */ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath) { BOOL ret; HFILE hFile; OFSTRUCT ofs; BYTE* buf; DWORD ref = 0x0C; unsigned index, old_index, offset, len, offs, topicoffset; hFile = OpenFile(lpszPath, &ofs, OF_READ); if (hFile == HFILE_ERROR) return FALSE; ret = HLPFILE_ReadFileToBuffer(hlpfile, hFile); _lclose(hFile); if (!ret) return FALSE; if (!HLPFILE_SystemCommands(hlpfile)) return FALSE; if (hlpfile->version <= 16 && !HLPFILE_GetTOMap(hlpfile)) return FALSE; /* load phrases support */ if (!HLPFILE_UncompressLZ77_Phrases(hlpfile)) HLPFILE_Uncompress_Phrases40(hlpfile); if (!HLPFILE_Uncompress_Topic(hlpfile)) return FALSE; if (!HLPFILE_ReadFont(hlpfile)) return FALSE; old_index = -1; offs = 0; do { BYTE* end; if (hlpfile->version <= 16) { index = (ref - 0x0C) / hlpfile->dsize; offset = (ref - 0x0C) % hlpfile->dsize; } else { index = (ref - 0x0C) >> 14; offset = (ref - 0x0C) & 0x3FFF; } if (hlpfile->version <= 16 && index != old_index && old_index != -1) { /* we jumped to the next block, adjust pointers */ ref -= 12; offset -= 12; } WINE_TRACE("ref=%08x => [%u/%u]\n", ref, index, offset); if (index >= hlpfile->topic_maplen) {WINE_WARN("maplen\n"); break;} buf = hlpfile->topic_map[index] + offset; if (buf + 0x15 >= hlpfile->topic_end) {WINE_WARN("extra\n"); break;} end = min(buf + GET_UINT(buf, 0), hlpfile->topic_end); if (index != old_index) {offs = 0; old_index = index;} switch (buf[0x14]) { case HLP_TOPICHDR: /* Topic Header */ if (hlpfile->version <= 16) topicoffset = ref + index * 12; else topicoffset = index * 0x8000 + offs; if (!HLPFILE_AddPage(hlpfile, buf, end, ref, topicoffset)) return FALSE; break; case HLP_DISPLAY30: case HLP_DISPLAY: case HLP_TABLE: if (!HLPFILE_SkipParagraph(hlpfile, buf, end, &len)) return FALSE; offs += len; break; default: WINE_ERR("buf[0x14] = %x\n", buf[0x14]); } if (hlpfile->version <= 16) { ref += GET_UINT(buf, 0xc); if (GET_UINT(buf, 0xc) == 0) break; } else ref = GET_UINT(buf, 0xc); } while (ref != 0xffffffff); HLPFILE_GetKeywords(hlpfile); HLPFILE_GetMap(hlpfile); HLPFILE_GetTree(hlpfile, "|TTLBTREE", &hlpfile->ttlbtree); HLPFILE_GetTree(hlpfile, "|Viola", &hlpfile->viola); HLPFILE_GetTree(hlpfile, "|Rose", &hlpfile->rose); HLPFILE_ReadCntFile(hlpfile); if (hlpfile->version <= 16) return TRUE; return HLPFILE_GetContext(hlpfile); } /*********************************************************************** * * HLPFILE_ReadHlpFile */ HLPFILE *HLPFILE_ReadHlpFile(LPCSTR lpszPath) { HLPFILE* hlpfile; for (hlpfile = first_hlpfile; hlpfile; hlpfile = hlpfile->next) { if (!strcmp(lpszPath, hlpfile->lpszPath)) { hlpfile->wRefCount++; return hlpfile; } } hlpfile = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(HLPFILE) + strlen(lpszPath) + 1); if (!hlpfile) return 0; hlpfile->lpszPath = (char*)hlpfile + sizeof(HLPFILE); hlpfile->contents_start = 0xFFFFFFFF; hlpfile->next = first_hlpfile; hlpfile->wRefCount = 1; strcpy(hlpfile->lpszPath, lpszPath); first_hlpfile = hlpfile; if (hlpfile->next) hlpfile->next->prev = hlpfile; if (!HLPFILE_DoReadHlpFile(hlpfile, lpszPath)) { HLPFILE_FreeHlpFile(hlpfile); hlpfile = 0; } return hlpfile; } ================================================ FILE: winhlp32/hlpfile.h ================================================ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * 2002, 2008 Eric Pouech * 2007 Kirill K. Smirnov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ struct tagHelpFile; typedef struct { char type[10]; char name[9]; char caption[51]; POINT origin; SIZE size; int style; WORD flags; DWORD win_style; COLORREF sr_color; /* color for scrollable region */ COLORREF nsr_color; /* color for non scrollable region */ } HLPFILE_WINDOWINFO; typedef struct tagHlpFileLink { enum {hlp_link_link, hlp_link_popup, hlp_link_macro} cookie; LPCSTR string; /* name of the file to for the link (NULL if same file) */ LONG hash; /* topic index */ unsigned bClrChange : 1; /* true if the link is green & underlined */ unsigned bHotSpot : 1; /* true if the link is an hotspot (actually HLPFILE_HOTSPOTLINK) */ unsigned window; /* window number for displaying the link (-1 is current) */ DWORD cpMin; DWORD cpMax; struct tagHlpFileLink* next; LPCSTR windowName; } HLPFILE_LINK; typedef struct tagHlpFileHotSpotLink { HLPFILE_LINK link; unsigned x; unsigned y; unsigned width; unsigned height; unsigned imgidx; struct tagHlpFileHotSpotLink *next; /* don't have to walk all the links */ } HLPFILE_HOTSPOTLINK; typedef struct tagHlpFileMacro { LPCSTR lpszMacro; struct tagHlpFileMacro* next; } HLPFILE_MACRO; typedef struct tagHlpFileRow { char cols; long cpos; struct tagHlpFileRow* next; struct tagHlpFileRow* prev; WORD width[1]; } HLPFILE_ROW; typedef struct tagHlpFilePage { WCHAR* lpszTitle; HLPFILE_MACRO* first_macro; HLPFILE_LINK* first_link; HLPFILE_HOTSPOTLINK* first_hs; HLPFILE_ROW* first_var_row; unsigned wNumber; unsigned offset; DWORD reference; struct tagHlpFilePage* next; struct tagHlpFilePage* prev; DWORD browse_bwd; DWORD browse_fwd; struct tagHlpFileFile* file; } HLPFILE_PAGE; typedef struct { LONG lMap; unsigned long offset; } HLPFILE_MAP; typedef struct { LOGFONTA LogFont; HFONT hFont; COLORREF color; } HLPFILE_FONT; typedef struct { char id; BYTE *tree; BYTE *data; } HLPFILE_XW; typedef struct tagHlpFileFile { BYTE* file_buffer; UINT file_buffer_size; LPSTR lpszPath; LPSTR lpszTitle; LPSTR lpszCopyright; LPSTR lpszCntPath; HLPFILE_PAGE* first_page; HLPFILE_PAGE* last_page; HLPFILE_MACRO* first_macro; BYTE* Context; HLPFILE_XW xw[5]; unsigned wMapLen; HLPFILE_MAP* Map; unsigned wTOMapLen; unsigned* TOMap; unsigned long contents_start; BYTE* ttlbtree; BYTE* rose; BYTE* viola; BYTE* cnt_rtf; HLPFILE_PAGE* cnt_page; struct tagHlpFileFile* prev; struct tagHlpFileFile* next; unsigned wRefCount; unsigned short version; unsigned short flags; unsigned short charset; unsigned short codepage; unsigned short tbsize; /* topic block size */ unsigned short dsize; /* decompress size */ BOOL compressed; BOOL hasPhrases; /* file has |Phrases */ BOOL hasPhrases40; /* file has |PhrIndex/|PhrImage */ UINT num_phrases; unsigned* phrases_offsets; char* phrases_buffer; BYTE** topic_map; BYTE* topic_end; UINT topic_maplen; unsigned numBmps; HBITMAP* bmps; unsigned numFonts; HLPFILE_FONT* fonts; unsigned numWindows; HLPFILE_WINDOWINFO* windows; HICON hIcon; BOOL has_popup_color; COLORREF popup_color; LPSTR help_on_file; int scale; int rounderr; } HLPFILE; /* * Compare function type for HLPFILE_BPTreeSearch function. * * PARAMS * p [I] pointer to testing block (key + data) * key [I] pointer to key value to look for * leaf [I] whether this function called for index of leaf page * next [O] pointer to pointer to next block */ typedef int (*HLPFILE_BPTreeCompare)(void *p, const void *key, int leaf, void **next); /* * Callback function type for HLPFILE_BPTreeEnum function. * * PARAMS * p [I] pointer to data block * next [O] pointer to pointer to next block * cookie [IO] cookie data */ typedef void (*HLPFILE_BPTreeCallback)(void *p, void **next, void *cookie); HLPFILE* HLPFILE_ReadHlpFile(LPCSTR lpszPath); HLPFILE_PAGE* HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash, ULONG* relative); HLPFILE_PAGE* HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap, ULONG* relative); HLPFILE_PAGE* HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset, ULONG* relative); LONG HLPFILE_Hash(LPCSTR lpszContext); void HLPFILE_FreeHlpFile(HLPFILE*); HLPFILE_XW *HLPFILE_GetTreeData(HLPFILE *hlpfile, char keyfile); void HLPFILE_BPTreeEnum(BYTE*, HLPFILE_BPTreeCallback cb, void *cookie); struct RtfData { BOOL in_text; char* data; /* RTF stream start */ char* ptr; /* current position in stream */ unsigned allocated; /* overall allocated size */ unsigned char_pos; /* current char position (in richedit) */ char* where; /* pointer to feed back richedit */ unsigned font_scale; /* how to scale fonts */ HLPFILE_LINK*first_link; HLPFILE_LINK*current_link; HLPFILE_HOTSPOTLINK*first_hs; BOOL force_color; unsigned relative; /* offset within page to lookup for */ unsigned char_pos_rel; /* char_pos correspondinf to relative */ unsigned code_page; unsigned imgcnt; }; BOOL HLPFILE_BrowsePage(HLPFILE_PAGE*, struct RtfData* rd, unsigned font_scale, unsigned relative, HLPFILE_WINDOWINFO* info); #define HLP_DISPLAY30 0x01 /* version 3.0 displayable information */ #define HLP_TOPICHDR 0x02 /* topic header information */ #define HLP_DISPLAY 0x20 /* version 3.1 displayable information */ #define HLP_TABLE 0x23 /* version 3.1 table */ ================================================ FILE: winhlp32/macro.c ================================================ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * Copyright 2002, 2008 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define WIN32_LEAN_AND_MEAN #include #include "windows.h" #include "commdlg.h" #include "shellapi.h" #include "winhelp.h" #ifdef _DEBUG #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winhelp); #else #define WINE_TRACE(...) #define WINE_WARN(...) #define WINE_FIXME(...) #define WINE_ERR(...) #define debugstr_a(...) #endif /**************************************************/ /* Macro table */ /**************************************************/ struct MacroDesc { const char* name; const char* alias; BOOL isBool; const char* arguments; void *fn; }; static struct MacroDesc*MACRO_Loaded /* = NULL */; static unsigned MACRO_NumLoaded /* = 0 */; /******* helper functions *******/ static char* StrDup(const char* str) { char* dst; dst=HeapAlloc(GetProcessHeap(),0,strlen(str)+1); strcpy(dst, str); return dst; } static WINHELP_BUTTON** MACRO_LookupButton(WINHELP_WINDOW* win, LPCSTR name) { WINHELP_BUTTON** b; for (b = &win->first_button; *b; b = &(*b)->next) if (!lstrcmpiA(name, (*b)->lpszID)) break; return b; } static BOOL MACRO_Load(struct MacroDesc *macro) { void *fn = NULL; WINHELP_DLL* dll; char * dll_name = macro->alias; BOOL ret = TRUE; if (!dll_name) return FALSE; /* FIXME: are the registered DLLs global or linked to the current file ??? * We assume globals (as we did for macros, but is this really the case ???) */ for (dll = Globals.dlls; dll; dll = dll->next) { if (!strcmp(dll->name, dll_name)) break; } if (!dll) { HANDLE hLib = LoadLibraryA(dll_name); /* FIXME: the library will not be unloaded until exit of program * We don't send the DW_TERM message */ WINE_TRACE("Loading %s\n", debugstr_a(dll_name)); /* FIXME: should look in the directory where current hlpfile * is loaded from */ if (hLib == NULL) { /* FIXME: internationalisation for error messages */ WINE_FIXME("Cannot find dll %s\n", debugstr_a(dll_name)); ret = FALSE; } else if ((dll = HeapAlloc(GetProcessHeap(), 0, sizeof(*dll)))) { dll->hLib = hLib; dll->name = StrDup(dll_name); /* FIXME: never freed */ dll->next = Globals.dlls; Globals.dlls = dll; dll->handler = (WINHELP_LDLLHandler)GetProcAddress(dll->hLib, "LDLLHandler"); dll->class = dll->handler ? (dll->handler)(DW_WHATMSG, 0, 0) : DC_NOMSG; WINE_TRACE("Got class %x for DLL %s\n", dll->class, debugstr_a(dll_name)); if (dll->class & DC_INITTERM) dll->handler(DW_INIT, 0, 0); if (dll->class & DC_CALLBACKS) dll->handler(DW_CALLBACKS, (LONG_PTR)&Callbacks, 0); } else WINE_WARN("OOM\n"); } if (dll && !(fn = GetProcAddress(dll->hLib, macro->name))) { /* FIXME: internationalisation for error messages */ WINE_FIXME("Cannot find proc %s in dll %s\n", debugstr_a(dll_name), debugstr_a(macro->name)); ret = FALSE; } HeapFree(GetProcessHeap(),0,dll_name); macro->alias = NULL; macro->fn = fn; return ret; } static int MACRO_DoLookUp(struct MacroDesc* start, const char* name, struct lexret* lr, unsigned len) { struct MacroDesc* md; for (md = start; md->name && len != 0; md++, len--) { if (strcasecmp(md->name, name) == 0 || (md->alias != NULL && strcasecmp(md->alias, name) == 0)) { if (lr) { lr->proto = md->arguments; lr->function = md->fn; if (!md->fn) MACRO_Load(md); } return md->isBool ? BOOL_FUNCTION : VOID_FUNCTION; } } return EMPTY; } /******* some forward declarations *******/ static void CALLBACK MACRO_JumpID(LPCSTR lpszPathWindow, LPCSTR topic_id); /******* real macro implementation *******/ void CALLBACK MACRO_CreateButton(LPCSTR id, LPCSTR name, LPCSTR macro) { WINHELP_WINDOW *win = MACRO_CurrentWindow(); WINHELP_BUTTON *button, **b; LONG size; LPSTR ptr; WINE_TRACE("(%s, %s, %s)\n", debugstr_a(id), debugstr_a(name), debugstr_a(macro)); size = sizeof(WINHELP_BUTTON) + strlen(id) + strlen(name) + strlen(macro) + 3; button = HeapAlloc(GetProcessHeap(), 0, size); if (!button) return; button->next = 0; button->hWnd = 0; ptr = (char*)button + sizeof(WINHELP_BUTTON); strcpy(ptr, id); button->lpszID = ptr; ptr += strlen(id) + 1; strcpy(ptr, name); button->lpszName = ptr; ptr += strlen(name) + 1; strcpy(ptr, macro); button->lpszMacro = ptr; button->wParam = WH_FIRST_BUTTON; for (b = &win->first_button; *b; b = &(*b)->next) button->wParam = max(button->wParam, (*b)->wParam + 1); *b = button; WINHELP_LayoutMainWindow(win); } static void CALLBACK MACRO_DestroyButton(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } void CALLBACK MACRO_DisableButton(LPCSTR id) { WINHELP_BUTTON** b; WINE_TRACE("(%s)\n", debugstr_a(id)); b = MACRO_LookupButton(MACRO_CurrentWindow(), id); if (!*b) {WINE_FIXME("Couldn't find button %s\n", debugstr_a(id)); return;} EnableWindow((*b)->hWnd, FALSE); } static void CALLBACK MACRO_EnableButton(LPCSTR id) { WINHELP_BUTTON** b; WINE_TRACE("(%s)\n", debugstr_a(id)); b = MACRO_LookupButton(MACRO_CurrentWindow(), id); if (!*b) {WINE_FIXME("Couldn't find button %s\n", debugstr_a(id)); return;} EnableWindow((*b)->hWnd, TRUE); } void CALLBACK MACRO_JumpContents(LPCSTR lpszPath, LPCSTR lpszWindow) { HLPFILE* hlpfile; WINE_TRACE("(%s, %s)\n", debugstr_a(lpszPath), debugstr_a(lpszWindow)); if ((hlpfile = WINHELP_LookupHelpFile(lpszPath))) WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, 0, WINHELP_GetWindowInfo(hlpfile, lpszWindow), SW_NORMAL); } void CALLBACK MACRO_About(void) { WCHAR name[256]; HICON icon = LoadImageW( Globals.hInstance, MAKEINTRESOURCEW(IDI_WINHELP), IMAGE_ICON, 48, 48, LR_SHARED ); LoadStringW( Globals.hInstance, STID_WINE_HELP, name, ARRAY_SIZE( name )); ShellAboutW( MACRO_CurrentWindow()->hMainWnd, name, NULL, icon ); } static void CALLBACK MACRO_AddAccelerator(LONG u1, LONG u2, LPCSTR str) { WINE_FIXME("(%u, %u, %s)\n", u1, u2, debugstr_a(str)); } static void CALLBACK MACRO_ALink(LPCSTR keywords, LONG type, LPCSTR topic, LPCSTR window) { WINE_TRACE("(%s, %u, %s, %s)\n", debugstr_a(keywords), type, debugstr_a(topic), debugstr_a(window)); WINHELP_SearchKey('A', keywords, type, topic, window, MACRO_CurrentWindow(), MACRO_CurrentWindow()->page->file); } void CALLBACK MACRO_Annotate(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_AppendItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4) { WINE_FIXME("(%s, %s, %s, %s)\n", debugstr_a(str1), debugstr_a(str2), debugstr_a(str3), debugstr_a(str4)); } static void CALLBACK MACRO_Back(void) { WINHELP_WINDOW* win = MACRO_CurrentWindow(); WINE_TRACE("()\n"); if (win && win->back.index >= 2) WINHELP_CreateHelpWindow(&win->back.set[--win->back.index - 1], SW_SHOW, FALSE); } static void CALLBACK MACRO_BackFlush(void) { WINHELP_WINDOW* win = MACRO_CurrentWindow(); WINE_TRACE("()\n"); if (win) WINHELP_DeleteBackSet(win); } void CALLBACK MACRO_BookmarkDefine(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_BookmarkMore(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_BrowseButtons(void) { HLPFILE_PAGE* page = MACRO_CurrentWindow()->page; ULONG relative; WINE_TRACE("()\n"); MACRO_CreateButton("BTN_PREV", "&<<", "Prev()"); MACRO_CreateButton("BTN_NEXT", "&>>", "Next()"); if (!HLPFILE_PageByOffset(page->file, page->browse_bwd, &relative)) MACRO_DisableButton("BTN_PREV"); if (!HLPFILE_PageByOffset(page->file, page->browse_fwd, &relative)) MACRO_DisableButton("BTN_NEXT"); } static void CALLBACK MACRO_ChangeButtonBinding(LPCSTR id, LPCSTR macro) { WINHELP_WINDOW* win = MACRO_CurrentWindow(); WINHELP_BUTTON* button; WINHELP_BUTTON** b; LONG size; LPSTR ptr; WINE_TRACE("(%s, %s)\n", debugstr_a(id), debugstr_a(macro)); b = MACRO_LookupButton(win, id); if (!*b) {WINE_FIXME("Couldn't find button %s\n", debugstr_a(id)); return;} size = sizeof(WINHELP_BUTTON) + strlen(id) + strlen((*b)->lpszName) + strlen(macro) + 3; button = HeapAlloc(GetProcessHeap(), 0, size); if (!button) return; button->next = (*b)->next; button->hWnd = (*b)->hWnd; button->wParam = (*b)->wParam; ptr = (char*)button + sizeof(WINHELP_BUTTON); strcpy(ptr, id); button->lpszID = ptr; ptr += strlen(id) + 1; strcpy(ptr, (*b)->lpszName); button->lpszName = ptr; ptr += strlen((*b)->lpszName) + 1; strcpy(ptr, macro); button->lpszMacro = ptr; *b = button; WINHELP_LayoutMainWindow(win); } static void CALLBACK MACRO_ChangeEnable(LPCSTR id, LPCSTR macro) { WINE_TRACE("(%s, %s)\n", debugstr_a(id), debugstr_a(macro)); MACRO_ChangeButtonBinding(id, macro); MACRO_EnableButton(id); } static void CALLBACK MACRO_ChangeItemBinding(LPCSTR str1, LPCSTR str2) { WINE_FIXME("(%s, %s)\n", debugstr_a(str1), debugstr_a(str2)); } static void CALLBACK MACRO_CheckItem(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_CloseSecondarys(void) { WINHELP_WINDOW *win; WINHELP_WINDOW *next; WINE_TRACE("()\n"); for (win = Globals.win_list; win; win = next) { next = win->next; if (lstrcmpiA(win->info->name, "main")) WINHELP_ReleaseWindow(win); } } static void CALLBACK MACRO_CloseWindow(LPCSTR lpszWindow) { WINHELP_WINDOW *win; WINHELP_WINDOW *next; WINE_TRACE("(%s)\n", debugstr_a(lpszWindow)); if (!lpszWindow || !lpszWindow[0]) { WINHELP_ReleaseWindow(MACRO_CurrentWindow()); return; } for (win = Globals.win_list; win; win = next) { next = win->next; if (!lstrcmpiA(win->info->name, lpszWindow)) WINHELP_ReleaseWindow(win); } } static void CALLBACK MACRO_Compare(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_Contents(void) { HLPFILE_PAGE* page = MACRO_CurrentWindow()->page; WINE_TRACE("()\n"); if (page) MACRO_JumpContents(page->file->lpszPath, NULL); } static void CALLBACK MACRO_ControlPanel(LPCSTR str1, LPCSTR str2, LONG u) { WINE_FIXME("(%s, %s, %u)\n", debugstr_a(str1), debugstr_a(str2), u); } void CALLBACK MACRO_CopyDialog(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_CopyTopic(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_DeleteItem(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_DeleteMark(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_DisableItem(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_EnableItem(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_EndMPrint(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_ExecFile(LPCSTR pgm, LPCSTR args, LONG cmd_show, LPCSTR topic) { HINSTANCE ret = 0; char buffer[256]; HWND hwnd = Globals.active_win ? Globals.active_win->hMainWnd : NULL; WINE_TRACE("(%s, %s, %u, %s)\n", debugstr_a(pgm), debugstr_a(args), cmd_show, debugstr_a(topic)); strcpy(buffer, "The help file is asking to run the program below. Say no if you don't recognize it.\n"); strncat(buffer, pgm, 256 - strlen(buffer)); int but = MessageBoxA(hwnd, buffer, "Notice", MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON2); if (but == IDYES) ret = ShellExecuteA(hwnd, "open", pgm, args, ".", cmd_show); if ((DWORD_PTR)ret < 32) { WINE_WARN("Failed with %p\n", ret); if (topic) MACRO_JumpID(NULL, topic); } } static void CALLBACK MACRO_ExecProgram(LPCSTR str, LONG u) { HWND hwnd = Globals.active_win ? Globals.active_win->hMainWnd : NULL; char buffer[256]; WINE_TRACE("(%s, %u)\n", debugstr_a(str), u); strcpy(buffer, "The help file is asking to run the program below. Say no if you don't recognize it.\n"); strncat(buffer, str, 256 - strlen(buffer)); int ret = MessageBoxA(hwnd, buffer, "Notice", MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON2); if (ret == IDYES) { STARTUPINFOA si = {0}; PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFOA); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = u; CreateProcessA(NULL, str, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } } void CALLBACK MACRO_Exit(void) { WINE_TRACE("()\n"); while (Globals.win_list) WINHELP_ReleaseWindow(Globals.win_list); } static void CALLBACK MACRO_ExtAbleItem(LPCSTR str, LONG u) { WINE_FIXME("(%s, %u)\n", debugstr_a(str), u); } static void CALLBACK MACRO_ExtInsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u1, LONG u2) { WINE_FIXME("(%s, %s, %s, %s, %u, %u)\n", debugstr_a(str1), debugstr_a(str2), debugstr_a(str3), debugstr_a(str4), u1, u2); } static void CALLBACK MACRO_ExtInsertMenu(LPCSTR str1, LPCSTR str2, LPCSTR str3, LONG u1, LONG u2) { WINE_FIXME("(%s, %s, %s, %u, %u)\n", debugstr_a(str1), debugstr_a(str2), debugstr_a(str3), u1, u2); } static BOOL CALLBACK MACRO_FileExist(LPCSTR str) { WINE_TRACE("(%s)\n", debugstr_a(str)); return GetFileAttributesA(str) != INVALID_FILE_ATTRIBUTES; } void CALLBACK MACRO_FileOpen(void) { char szFile[MAX_PATH]; if (WINHELP_GetOpenFileName(szFile, MAX_PATH)) { MACRO_JumpContents(szFile, "main"); } } static void CALLBACK MACRO_Find(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_Finder(void) { WINHELP_CreateIndexWindow(FALSE); } static void CALLBACK MACRO_FloatingMenu(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_Flush(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_FocusWindow(LPCSTR lpszWindow) { WINHELP_WINDOW *win; WINE_TRACE("(%s)\n", debugstr_a(lpszWindow)); if (!lpszWindow || !lpszWindow[0]) lpszWindow = "main"; for (win = Globals.win_list; win; win = win->next) if (!lstrcmpiA(win->info->name, lpszWindow)) SetFocus(win->hMainWnd); } static void CALLBACK MACRO_Generate(LPCSTR str, LONG w, LONG l) { WINE_FIXME("(%s, %x, %x)\n", debugstr_a(str), w, l); } static void CALLBACK MACRO_GotoMark(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } void CALLBACK MACRO_HelpOn(void) { WINHELP_WINDOW *win = MACRO_CurrentWindow(); LPCSTR file = NULL; WINE_TRACE("()\n"); if (win && win->page && win->page->file) file = win->page->file->help_on_file; if (!file) file = (Globals.wVersion > 4) ? "winhlp32.hlp" : "winhelp.hlp"; MACRO_JumpContents(file, NULL); } void CALLBACK MACRO_HelpOnTop(void) { static BOOL on_top = FALSE; WINHELP_WINDOW *win; HWND main_wnd = NULL; HMENU menu; for (win = Globals.win_list; win; win = win->next) if (!lstrcmpiA(win->info->name, "main")) main_wnd = win->hMainWnd; if (!main_wnd) { WINE_ERR("could not find the main window!\n"); return; } menu = GetMenu(main_wnd); on_top = !on_top; if (on_top) { CheckMenuItem(menu, MNID_HELP_HELPTOP, MF_BYCOMMAND|MF_CHECKED); SetWindowPos(main_wnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } else { CheckMenuItem(menu, MNID_HELP_HELPTOP, MF_BYCOMMAND|MF_UNCHECKED); SetWindowPos(main_wnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } } void CALLBACK MACRO_History(void) { WINE_TRACE("()\n"); if (Globals.active_win && !Globals.active_win->hHistoryWnd) { const WCHAR name[] = {'H','i','s','t','o','r','y',0}; HWND hWnd = CreateWindowW(HISTORY_WIN_CLASS_NAME, name, WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, 0, 0, Globals.hInstance, Globals.active_win); ShowWindow(hWnd, SW_NORMAL); } } static void CALLBACK MACRO_IfThen(BOOL b, LPCSTR t) { if (b) MACRO_ExecuteMacro(MACRO_CurrentWindow(), t); } static void CALLBACK MACRO_IfThenElse(BOOL b, LPCSTR t, LPCSTR f) { if (b) MACRO_ExecuteMacro(MACRO_CurrentWindow(), t); else MACRO_ExecuteMacro(MACRO_CurrentWindow(), f); } static BOOL CALLBACK MACRO_InitMPrint(void) { WINE_FIXME("()\n"); return FALSE; } static void CALLBACK MACRO_InsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u) { WINE_FIXME("(%s, %s, %s, %s, %u)\n", debugstr_a(str1), debugstr_a(str2), debugstr_a(str3), debugstr_a(str4), u); } static void CALLBACK MACRO_InsertMenu(LPCSTR str1, LPCSTR str2, LONG u) { WINE_FIXME("(%s, %s, %u)\n", debugstr_a(str1), debugstr_a(str2), u); } static BOOL CALLBACK MACRO_IsBook(void) { WINE_TRACE("()\n"); return Globals.isBook; } static BOOL CALLBACK MACRO_IsMark(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); return FALSE; } static BOOL CALLBACK MACRO_IsNotMark(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); return TRUE; } void CALLBACK MACRO_JumpContext(LPCSTR lpszPath, LPCSTR lpszWindow, LONG context) { HLPFILE* hlpfile; WINE_TRACE("(%s, %s, %d)\n", debugstr_a(lpszPath), debugstr_a(lpszWindow), context); if ((hlpfile = WINHELP_LookupHelpFile(lpszPath))) /* Some madness: what user calls 'context', hlpfile calls 'map' */ WINHELP_OpenHelpWindow(HLPFILE_PageByMap, hlpfile, context, WINHELP_GetWindowInfo(hlpfile, lpszWindow), SW_NORMAL); } void CALLBACK MACRO_JumpHash(LPCSTR lpszPath, LPCSTR lpszWindow, LONG lHash) { HLPFILE* hlpfile; WINE_TRACE("(%s, %s, %u)\n", debugstr_a(lpszPath), debugstr_a(lpszWindow), lHash); if (!lpszPath || !lpszPath[0]) hlpfile = MACRO_CurrentWindow()->page->file; else hlpfile = WINHELP_LookupHelpFile(lpszPath); if (hlpfile) WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, lHash, WINHELP_GetWindowInfo(hlpfile, lpszWindow), SW_NORMAL); } static void CALLBACK MACRO_JumpHelpOn(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_JumpID(LPCSTR lpszPathWindow, LPCSTR topic_id) { LPSTR ptr; WINE_TRACE("(%s, %s)\n", debugstr_a(lpszPathWindow), debugstr_a(topic_id)); if (lpszPathWindow && (ptr = strchr(lpszPathWindow, '>')) != NULL) { LPSTR tmp; size_t sz; tmp = HeapAlloc(GetProcessHeap(), 0, strlen(lpszPathWindow) + 1); if (tmp) { strcpy(tmp, lpszPathWindow); tmp[ptr - lpszPathWindow] = '\0'; ptr += tmp - lpszPathWindow; /* ptr now points to '>' in tmp buffer */ /* in some cases, we have a trailing space that we need to get rid of */ /* FIXME: check if it has to be done in lexer rather than here */ for (sz = strlen(ptr + 1); sz >= 1 && ptr[sz] == ' '; sz--) ptr[sz] = '\0'; MACRO_JumpHash(tmp, ptr + 1, HLPFILE_Hash(topic_id)); HeapFree(GetProcessHeap(), 0, tmp); } } else MACRO_JumpHash(lpszPathWindow, NULL, HLPFILE_Hash(topic_id)); } /* FIXME: this macros is wrong * it should only contain 2 strings, path & window are coded as path>window */ static void CALLBACK MACRO_JumpKeyword(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR keyword) { WINE_FIXME("(%s, %s, %s)\n", debugstr_a(lpszPath), debugstr_a(lpszWindow), debugstr_a(keyword)); } static void CALLBACK MACRO_KLink(LPCSTR keywords, LONG type, LPCSTR topic, LPCSTR window) { WINE_TRACE("(%s, %u, %s, %s)\n", debugstr_a(keywords), type, debugstr_a(topic), debugstr_a(window)); WINHELP_SearchKey('K', keywords, type, topic, window, MACRO_CurrentWindow(), MACRO_CurrentWindow()->page->file); } static void CALLBACK MACRO_Menu(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_MPrintHash(LONG u) { WINE_FIXME("(%u)\n", u); } static void CALLBACK MACRO_MPrintID(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_Next(void) { WINHELP_WNDPAGE wp; WINE_TRACE("()\n"); wp.page = MACRO_CurrentWindow()->page; wp.page = HLPFILE_PageByOffset(wp.page->file, wp.page->browse_fwd, &wp.relative); if (wp.page) { wp.page->file->wRefCount++; wp.wininfo = MACRO_CurrentWindow()->info; WINHELP_CreateHelpWindow(&wp, SW_NORMAL, TRUE); } } static void CALLBACK MACRO_NoShow(void) { WINE_FIXME("()\n"); } void CALLBACK MACRO_PopupContext(LPCSTR str, LONG u) { WINE_FIXME("(%s, %u)\n", debugstr_a(str), u); } static void CALLBACK MACRO_PopupHash(LPCSTR str, LONG u) { WINE_FIXME("(%s, %u)\n", debugstr_a(str), u); } static void CALLBACK MACRO_PopupId(LPCSTR str1, LPCSTR str2) { WINE_FIXME("(%s, %s)\n", debugstr_a(str1), debugstr_a(str2)); } static void CALLBACK MACRO_PositionWindow(LONG i1, LONG i2, LONG u1, LONG u2, LONG u3, LPCSTR str) { WINE_FIXME("(%i, %i, %u, %u, %u, %s)\n", i1, i2, u1, u2, u3, debugstr_a(str)); } static void CALLBACK MACRO_Prev(void) { WINHELP_WNDPAGE wp; WINE_TRACE("()\n"); wp.page = MACRO_CurrentWindow()->page; wp.page = HLPFILE_PageByOffset(wp.page->file, wp.page->browse_bwd, &wp.relative); if (wp.page) { wp.page->file->wRefCount++; wp.wininfo = MACRO_CurrentWindow()->info; WINHELP_CreateHelpWindow(&wp, SW_NORMAL, TRUE); } } void CALLBACK MACRO_Print(void) { PRINTDLGW printer; WINE_TRACE("()\n"); printer.lStructSize = sizeof(printer); printer.hwndOwner = MACRO_CurrentWindow()->hMainWnd; printer.hInstance = Globals.hInstance; printer.hDevMode = 0; printer.hDevNames = 0; printer.hDC = 0; printer.Flags = 0; printer.nFromPage = 0; printer.nToPage = 0; printer.nMinPage = 0; printer.nMaxPage = 0; printer.nCopies = 0; printer.lCustData = 0; printer.lpfnPrintHook = 0; printer.lpfnSetupHook = 0; printer.lpPrintTemplateName = 0; printer.lpSetupTemplateName = 0; printer.hPrintTemplate = 0; printer.hSetupTemplate = 0; if (PrintDlgW(&printer)) { WINE_FIXME("Print()\n"); } } void CALLBACK MACRO_PrinterSetup(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_RegisterRoutine(LPCSTR dll_name, LPCSTR proc, LPCSTR args) { int size; WINE_TRACE("(%s, %s, %s)\n", debugstr_a(dll_name), debugstr_a(proc), debugstr_a(args)); if (MACRO_Loaded && MACRO_DoLookUp(MACRO_Loaded, proc, NULL, MACRO_NumLoaded) != EMPTY) return; size = ++MACRO_NumLoaded * sizeof(struct MacroDesc); if (!MACRO_Loaded) MACRO_Loaded = HeapAlloc(GetProcessHeap(), 0, size); else MACRO_Loaded = HeapReAlloc(GetProcessHeap(), 0, MACRO_Loaded, size); MACRO_Loaded[MACRO_NumLoaded - 1].name = StrDup(proc); /* FIXME: never freed */ MACRO_Loaded[MACRO_NumLoaded - 1].alias = StrDup(dll_name); MACRO_Loaded[MACRO_NumLoaded - 1].isBool = FALSE; MACRO_Loaded[MACRO_NumLoaded - 1].arguments = StrDup(args); /* FIXME: never freed */ MACRO_Loaded[MACRO_NumLoaded - 1].fn = NULL; WINE_TRACE("Added %s(%s)\n", debugstr_a(proc), debugstr_a(args)); } static void CALLBACK MACRO_RemoveAccelerator(LONG u1, LONG u2) { WINE_FIXME("(%u, %u)\n", u1, u2); } static void CALLBACK MACRO_ResetMenu(void) { WINE_FIXME("()\n"); } static void CALLBACK MACRO_SaveMark(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_Search(void) { WINHELP_CreateIndexWindow(TRUE); } void CALLBACK MACRO_SetContents(LPCSTR str, LONG u) { WINE_FIXME("(%s, %u)\n", debugstr_a(str), u); } static void CALLBACK MACRO_SetHelpOnFile(LPCSTR str) { HLPFILE_PAGE* page = MACRO_CurrentWindow()->page; WINE_TRACE("(%s)\n", debugstr_a(str)); HeapFree(GetProcessHeap(), 0, page->file->help_on_file); page->file->help_on_file = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1); if (page->file->help_on_file) strcpy(page->file->help_on_file, str); } static void CALLBACK MACRO_SetPopupColor(LONG rgb) { HLPFILE_PAGE* page = MACRO_CurrentWindow()->page; WINE_TRACE("(%d)\n", rgb); page->file->has_popup_color = TRUE; page->file->popup_color = rgb; } static void CALLBACK MACRO_ShellExecute(LPCSTR str1, LPCSTR str2, LONG u1, LONG u2, LPCSTR str3, LPCSTR str4) { WINE_FIXME("(%s, %s, %u, %u, %s, %s)\n", debugstr_a(str1), debugstr_a(str2), u1, u2, debugstr_a(str3), debugstr_a(str4)); } static void CALLBACK MACRO_ShortCut(LPCSTR str1, LPCSTR str2, LONG w, LONG l, LPCSTR str) { WINE_FIXME("(%s, %s, %x, %x, %s)\n", debugstr_a(str1), debugstr_a(str2), w, l, debugstr_a(str)); } static void CALLBACK MACRO_TCard(LONG u) { WINE_FIXME("(%u)\n", u); } static void CALLBACK MACRO_Test(LONG u) { WINE_FIXME("(%u)\n", u); } static BOOL CALLBACK MACRO_TestALink(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); return FALSE; } static BOOL CALLBACK MACRO_TestKLink(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); return FALSE; } static void CALLBACK MACRO_UncheckItem(LPCSTR str) { WINE_FIXME("(%s)\n", debugstr_a(str)); } static void CALLBACK MACRO_UpdateWindow(LPCSTR str1, LPCSTR str2) { WINE_FIXME("(%s, %s)\n", debugstr_a(str1), debugstr_a(str2)); } /**************************************************/ /* Macro table */ /**************************************************/ /* types: * U: 32 bit unsigned int * I: 32 bit signed int * S: string * v: unknown (32 bit entity) */ static struct MacroDesc MACRO_Builtins[] = { {"About", NULL, 0, "", MACRO_About}, {"AddAccelerator", "AA", 0, "UUS", MACRO_AddAccelerator}, {"ALink", "AL", 0, "SUSS", MACRO_ALink}, {"Annotate", NULL, 0, "", MACRO_Annotate}, {"AppendItem", NULL, 0, "SSSS", MACRO_AppendItem}, {"Back", NULL, 0, "", MACRO_Back}, {"BackFlush", "BF", 0, "", MACRO_BackFlush}, {"BookmarkDefine", NULL, 0, "", MACRO_BookmarkDefine}, {"BookmarkMore", NULL, 0, "", MACRO_BookmarkMore}, {"BrowseButtons", NULL, 0, "", MACRO_BrowseButtons}, {"ChangeButtonBinding", "CBB",0, "SS", MACRO_ChangeButtonBinding}, {"ChangeEnable", "CE", 0, "SS", MACRO_ChangeEnable}, {"ChangeItemBinding", "CIB",0, "SS", MACRO_ChangeItemBinding}, {"CheckItem", "CI", 0, "S", MACRO_CheckItem}, {"CloseSecondarys", "CS", 0, "", MACRO_CloseSecondarys}, {"CloseWindow", "CW", 0, "S", MACRO_CloseWindow}, {"Compare", NULL, 0, "S", MACRO_Compare}, {"Contents", NULL, 0, "", MACRO_Contents}, {"ControlPanel", NULL, 0, "SSU", MACRO_ControlPanel}, {"CopyDialog", NULL, 0, "", MACRO_CopyDialog}, {"CopyTopic", "CT", 0, "", MACRO_CopyTopic}, {"CreateButton", "CB", 0, "SSS", MACRO_CreateButton}, {"DeleteItem", NULL, 0, "S", MACRO_DeleteItem}, {"DeleteMark", NULL, 0, "S", MACRO_DeleteMark}, {"DestroyButton", NULL, 0, "S", MACRO_DestroyButton}, {"DisableButton", "DB", 0, "S", MACRO_DisableButton}, {"DisableItem", "DI", 0, "S", MACRO_DisableItem}, {"EnableButton", "EB", 0, "S", MACRO_EnableButton}, {"EnableItem", "EI", 0, "S", MACRO_EnableItem}, {"EndMPrint", NULL, 0, "", MACRO_EndMPrint}, {"ExecFile", "EF", 0, "SSUS", MACRO_ExecFile}, {"ExecProgram", "EP", 0, "SU", MACRO_ExecProgram}, {"Exit", NULL, 0, "", MACRO_Exit}, {"ExtAbleItem", NULL, 0, "SU", MACRO_ExtAbleItem}, {"ExtInsertItem", NULL, 0, "SSSSUU", MACRO_ExtInsertItem}, {"ExtInsertMenu", NULL, 0, "SSSUU", MACRO_ExtInsertMenu}, {"FileExist", "FE", 1, "S", MACRO_FileExist}, {"FileOpen", "FO", 0, "", MACRO_FileOpen}, {"Find", NULL, 0, "", MACRO_Find}, {"Finder", "FD", 0, "", MACRO_Finder}, {"FloatingMenu", NULL, 0, "", MACRO_FloatingMenu}, {"Flush", "FH", 0, "", MACRO_Flush}, {"FocusWindow", NULL, 0, "S", MACRO_FocusWindow}, {"Generate", NULL, 0, "SUU", MACRO_Generate}, {"GotoMark", NULL, 0, "S", MACRO_GotoMark}, {"HelpOn", NULL, 0, "", MACRO_HelpOn}, {"HelpOnTop", NULL, 0, "", MACRO_HelpOnTop}, {"History", NULL, 0, "", MACRO_History}, {"InitMPrint", NULL, 1, "", MACRO_InitMPrint}, {"InsertItem", NULL, 0, "SSSSU", MACRO_InsertItem}, {"InsertMenu", NULL, 0, "SSU", MACRO_InsertMenu}, {"IfThen", "IF", 0, "BS", MACRO_IfThen}, {"IfThenElse", "IE", 0, "BSS", MACRO_IfThenElse}, {"IsBook", NULL, 1, "", MACRO_IsBook}, {"IsMark", NULL, 1, "S", MACRO_IsMark}, {"IsNotMark", "NM", 1, "S", MACRO_IsNotMark}, {"JumpContents", NULL, 0, "SS", MACRO_JumpContents}, {"JumpContext", "JC", 0, "SSU", MACRO_JumpContext}, {"JumpHash", "JH", 0, "SSU", MACRO_JumpHash}, {"JumpHelpOn", NULL, 0, "", MACRO_JumpHelpOn}, {"JumpID", "JI", 0, "SS", MACRO_JumpID}, {"JumpKeyword", "JK", 0, "SSS", MACRO_JumpKeyword}, {"KLink", "KL", 0, "SUSS", MACRO_KLink}, {"Menu", "MU", 0, "", MACRO_Menu}, {"MPrintHash", NULL, 0, "U", MACRO_MPrintHash}, {"MPrintID", NULL, 0, "S", MACRO_MPrintID}, {"Next", NULL, 0, "", MACRO_Next}, {"NoShow", "NS", 0, "", MACRO_NoShow}, {"PopupContext", "PC", 0, "SU", MACRO_PopupContext}, {"PopupHash", NULL, 0, "SU", MACRO_PopupHash}, {"PopupId", "PI", 0, "SS", MACRO_PopupId}, {"PositionWindow", "PW", 0, "IIUUUS", MACRO_PositionWindow}, {"Prev", NULL, 0, "", MACRO_Prev}, {"Print", NULL, 0, "", MACRO_Print}, {"PrinterSetup", NULL, 0, "", MACRO_PrinterSetup}, {"RegisterRoutine", "RR", 0, "SSS", MACRO_RegisterRoutine}, {"RemoveAccelerator", "RA", 0, "UU", MACRO_RemoveAccelerator}, {"ResetMenu", NULL, 0, "", MACRO_ResetMenu}, {"SaveMark", NULL, 0, "S", MACRO_SaveMark}, {"Search", NULL, 0, "", MACRO_Search}, {"SetContents", NULL, 0, "SU", MACRO_SetContents}, {"SetHelpOnFile", NULL, 0, "S", MACRO_SetHelpOnFile}, {"SetPopupColor", "SPC",0, "U", MACRO_SetPopupColor}, {"ShellExecute", "SE", 0, "SSUUSS", MACRO_ShellExecute}, {"ShortCut", "SH", 0, "SSUUS", MACRO_ShortCut}, {"TCard", NULL, 0, "U", MACRO_TCard}, {"Test", NULL, 0, "U", MACRO_Test}, {"TestALink", NULL, 1, "S", MACRO_TestALink}, {"TestKLink", NULL, 1, "S", MACRO_TestKLink}, {"UncheckItem", "UI", 0, "S", MACRO_UncheckItem}, {"UpdateWindow", "UW", 0, "SS", MACRO_UpdateWindow}, {NULL, NULL, 0, NULL, NULL} }; int MACRO_Lookup(const char* name, struct lexret* lr) { int ret; if ((ret = MACRO_DoLookUp(MACRO_Builtins, name, lr, -1)) != EMPTY) return ret; if (MACRO_Loaded && (ret = MACRO_DoLookUp(MACRO_Loaded, name, lr, MACRO_NumLoaded)) != EMPTY) return ret; if (!strcmp(name, "hwndApp")) { WINHELP_WINDOW* win; lr->integer = 0; for (win = Globals.win_list; win; win = win->next) { if (!strcmp(win->info->name, "main")) { lr->integer = (LONG_PTR)win->hMainWnd; break; } } return INTEGER; } if (!strcmp(name, "hwndContext")) { lr->integer = Globals.active_win ? (LONG_PTR)Globals.active_win->hMainWnd : 0; return INTEGER; } if (!strcmp(name, "qchPath")) { if (Globals.active_win && Globals.active_win->page) { lr->string = Globals.active_win->page->file->lpszPath; return STRING; } return EMPTY; } if (!strcmp(name, "qError") || !strcmp(name, "lTopicNo") || !strcmp(name, "hfs") || !strcmp(name, "coForeground") || !strcmp(name, "coBackground")) { WINE_FIXME("keyword %s not substituted in macro parsing\n", debugstr_a(name)); return EMPTY; } lr->string = name; return IDENTIFIER; } ================================================ FILE: winhlp32/macro.h ================================================ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * Copyright 2002 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" struct lexret { LPCSTR proto; BOOL bool; LONG integer; LPCSTR string; FARPROC function; }; extern struct lexret yylval; struct tagWinHelp; BOOL MACRO_ExecuteMacro(struct tagWinHelp*, LPCSTR); int MACRO_Lookup(const char* name, struct lexret* lr); struct tagWinHelp* MACRO_CurrentWindow(void); enum token_types {EMPTY, VOID_FUNCTION, BOOL_FUNCTION, INTEGER, STRING, IDENTIFIER}; void CALLBACK MACRO_About(void); void CALLBACK MACRO_Annotate(void); void CALLBACK MACRO_BookmarkDefine(void); void CALLBACK MACRO_CopyDialog(void); void CALLBACK MACRO_CreateButton(LPCSTR, LPCSTR, LPCSTR); void CALLBACK MACRO_DisableButton(LPCSTR); void CALLBACK MACRO_Exit(void); void CALLBACK MACRO_FileOpen(void); void CALLBACK MACRO_HelpOn(void); void CALLBACK MACRO_HelpOnTop(void); void CALLBACK MACRO_History(void); void CALLBACK MACRO_JumpContents(LPCSTR, LPCSTR); void CALLBACK MACRO_JumpContext(LPCSTR, LPCSTR, LONG); void CALLBACK MACRO_JumpHash(LPCSTR, LPCSTR, LONG); void CALLBACK MACRO_PopupContext(LPCSTR, LONG); void CALLBACK MACRO_Print(void); void CALLBACK MACRO_PrinterSetup(void); void CALLBACK MACRO_SetContents(LPCSTR, LONG); /* Local Variables: */ /* c-file-style: "GNU" */ /* End: */ ================================================ FILE: winhlp32/macro.lex.l ================================================ %{ /* -*-C-*- */ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * Copyright 2002,2008 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ %} %option noinput nounput never-interactive 8bit %x quote %{ #include "config.h" #include #include #define YY_NO_UNISTD_H #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "winhelp.h" #ifdef _DEBUG #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winhelp); #else #define WINE_TRACE(...) #define WINE_WARN(...) #define WINE_FIXME(...) #define WINE_ERR(...) #define debugstr_a(...) #endif struct lex_data { YY_BUFFER_STATE state; LPCSTR macroptr; LPSTR strptr; int quote_stack[32]; unsigned quote_stk_idx; LPSTR cache_string[32]; int cache_used; WINHELP_WINDOW* window; }; static struct lex_data* lex_data = NULL; struct lexret yylval; #define YY_INPUT(buf,result,max_size)\ if ((result = *lex_data->macroptr ? 1 : 0)) buf[0] = *lex_data->macroptr++; %} %% [-+]?[0-9]+ yylval.integer = strtol(yytext, NULL, 10); return INTEGER; [-+]?0[xX][0-9a-f]+ yylval.integer = strtol(yytext, NULL, 16); return INTEGER; [a-zA-Z][_0-9a-zA-Z]* return MACRO_Lookup(yytext, &yylval); \` | \" | \' | \` | \" | \' { if (lex_data->quote_stk_idx == 0 || (yytext[0] == '\"' && lex_data->quote_stack[lex_data->quote_stk_idx - 1] != '\"') || (yytext[0] == '`')) { /* opening a new one */ if (lex_data->quote_stk_idx == 0) { assert(lex_data->cache_used < ARRAY_SIZE(lex_data->cache_string)); lex_data->strptr = lex_data->cache_string[lex_data->cache_used] = HeapAlloc(GetProcessHeap(), 0, strlen(lex_data->macroptr) + 1); yylval.string = lex_data->strptr; lex_data->cache_used++; BEGIN(quote); } else *lex_data->strptr++ = yytext[0]; lex_data->quote_stack[lex_data->quote_stk_idx++] = yytext[0]; assert(lex_data->quote_stk_idx < ARRAY_SIZE(lex_data->quote_stack)); } else { if (yytext[0] == '`') assert(0); /* close the current quote */ if (--lex_data->quote_stk_idx == 0) { BEGIN INITIAL; *lex_data->strptr++ = '\0'; return STRING; } else *lex_data->strptr++ = yytext[0]; } } . *lex_data->strptr++ = yytext[0]; \\. *lex_data->strptr++ = yytext[1]; <> return 0; " " . return yytext[0]; %% #if 0 /* all code for testing macros */ #include "winhelp.h" static CHAR szTestMacro[256]; static LRESULT CALLBACK MACRO_TestDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_COMMAND && wParam == IDOK) { GetDlgItemText(hDlg, 99, szTestMacro, sizeof(szTestMacro)); EndDialog(hDlg, IDOK); return TRUE; } return FALSE; } void macro_test(void) { WNDPROC lpfnDlg = MakeProcInstance(MACRO_TestDialogProc, Globals.hInstance); DialogBox(Globals.hInstance, STRING_DIALOG_TEST, Globals.active_win->hMainWnd, (DLGPROC)lpfnDlg); FreeProcInstance(lpfnDlg); macro = szTestMacro; } #endif /* small helper function for debug messages */ static const char* ts(int t) { static char c[2] = {0,0}; switch (t) { case EMPTY: return "EMPTY"; case VOID_FUNCTION: return "VOID_FUNCTION"; case BOOL_FUNCTION: return "BOOL_FUNCTION"; case INTEGER: return "INTEGER"; case STRING: return "STRING"; case IDENTIFIER: return "IDENTIFIER"; default: c[0] = (char)t; return c; } } static int MACRO_CallBoolFunc(void *fn, const char* args, void** ret); /****************************************************************** * MACRO_CheckArgs * * checks number of arguments against prototype, and stores arguments on * stack pa for later call * returns -1 on error, otherwise the number of pushed parameters */ static int MACRO_CheckArgs(void* pa[], unsigned max, const char* args) { int t; unsigned int len = 0, idx = 0; WINE_TRACE("Checking %s\n", debugstr_a(args)); if (yylex() != '(') {WINE_WARN("missing (\n");return -1;} if (*args) { len = strlen(args); for (;;) { t = yylex(); WINE_TRACE("Got %s <=> %c\n", debugstr_a(ts(t)), *args); switch (*args) { case 'S': if (t != STRING) {WINE_WARN("missing S\n");return -1;} pa[idx] = (void*)yylval.string; break; case 'U': case 'I': if (t != INTEGER) {WINE_WARN("missing U\n");return -1;} pa[idx] = LongToPtr(yylval.integer); break; case 'B': if (t != BOOL_FUNCTION) {WINE_WARN("missing B\n");return -1;} if (MACRO_CallBoolFunc(yylval.function, yylval.proto, &pa[idx]) == 0) return -1; break; default: WINE_WARN("unexpected %s while args is %c\n", debugstr_a(ts(t)), *args); return -1; } idx++; if (*++args == '\0') break; t = yylex(); if (t == ')') goto CheckArgs_end; if (t != ',') {WINE_WARN("missing ,\n");return -1;} if (idx >= max) {WINE_FIXME("stack overflow (%d)\n", max);return -1;} } } if (yylex() != ')') {WINE_WARN("missing )\n");return -1;} CheckArgs_end: while (len > idx) pa[--len] = NULL; return idx; } /****************************************************************** * MACRO_CallBoolFunc * * Invokes boolean function fn, which arguments are defined by args * stores bool result into ret */ static int MACRO_CallBoolFunc(void *fn, const char* args, void** ret) { void* pa[2]; int idx = MACRO_CheckArgs(pa, ARRAY_SIZE(pa), args); if (idx < 0) return 0; if (!fn) return 1; WINE_TRACE("calling with %u pmts\n", idx); switch (strlen(args)) { case 0: { BOOL (WINAPI *func)(void) = fn; *ret = (void *)(ULONG_PTR)func(); break; } case 1: { BOOL (WINAPI *func)(void *) = fn; *ret = (void *)(ULONG_PTR)func( pa[0]); break; } default: WINE_FIXME("NIY\n"); } return 1; } /****************************************************************** * MACRO_CallVoidFunc * * */ static int MACRO_CallVoidFunc(void *fn, const char* args) { void* pa[6]; int idx = MACRO_CheckArgs(pa, ARRAY_SIZE(pa), args); if (idx < 0) return 0; if (!fn) return 1; WINE_TRACE("calling %p with %u pmts\n", fn, idx); switch (strlen(args)) { case 0: { void (WINAPI *func)(void) = fn; func(); break; } case 1: { void (WINAPI *func)(void*) = fn; func( pa[0] ); break; } case 2: { void (WINAPI *func)(void*,void*) = fn; func( pa[0], pa[1] ); break; } case 3: { void (WINAPI *func)(void*,void*,void*) = fn; func( pa[0], pa[1], pa[2] ); break; } case 4: { void (WINAPI *func)(void*,void*,void*,void*) = fn; func( pa[0], pa[1], pa[2], pa[3] ); break; } case 5: { void (WINAPI *func)(void*,void*,void*,void*,void*) = fn; func( pa[0], pa[1], pa[2], pa[3], pa[4] ); break; } case 6: { void (WINAPI *func)(void*,void*,void*,void*,void*,void*) = fn; func( pa[0], pa[1], pa[2], pa[3], pa[4], pa[5] ); break; } default: WINE_FIXME("NIY\n"); } return 1; } BOOL MACRO_ExecuteMacro(WINHELP_WINDOW* window, LPCSTR macro) { struct lex_data curr_lex_data, *prev_lex_data; BOOL ret = TRUE; int t; WINE_TRACE("%s\n", debugstr_a(macro)); prev_lex_data = lex_data; lex_data = &curr_lex_data; memset(lex_data, 0, sizeof(*lex_data)); lex_data->macroptr = macro; lex_data->window = WINHELP_GrabWindow(window); lex_data->state = yy_create_buffer(NULL, YY_BUF_SIZE); yy_switch_to_buffer(lex_data->state); while ((t = yylex()) != EMPTY) { switch (t) { case VOID_FUNCTION: WINE_TRACE("got type void func(%s)\n", debugstr_a(yylval.proto)); MACRO_CallVoidFunc(yylval.function, yylval.proto); yy_switch_to_buffer(lex_data->state); break; case BOOL_FUNCTION: WINE_WARN("got type bool func(%s)\n", debugstr_a(yylval.proto)); break; default: WINE_WARN("got unexpected type %s\n", debugstr_a(ts(t))); YY_FLUSH_BUFFER; ret = FALSE; goto done; } switch (t = yylex()) { case EMPTY: goto done; case ';': break; default: ret = FALSE; YY_FLUSH_BUFFER; goto done; } } done: for (t = 0; t < lex_data->cache_used; t++) HeapFree(GetProcessHeap(), 0, lex_data->cache_string[t]); yy_delete_buffer(lex_data->state); lex_data = prev_lex_data; WINHELP_ReleaseWindow(window); return ret; } WINHELP_WINDOW* MACRO_CurrentWindow(void) { return lex_data ? lex_data->window : Globals.active_win; } #ifndef yywrap int yywrap(void) { return 1; } #endif ================================================ FILE: winhlp32/string.c ================================================ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* Class names */ #include "windef.h" const WCHAR MAIN_WIN_CLASS_NAME[] = {'M','S','_','W','I','N','H','E','L','P',0}; const WCHAR BUTTON_BOX_WIN_CLASS_NAME[] = {'W','H','B','u','t','t','o','n','B','o','x',0}; const WCHAR HISTORY_WIN_CLASS_NAME[] = {'W','H','H','i','s','t','o','r','y',0}; const WCHAR STRING_BUTTON[] = {'B','U','T','T','O','N',0}; /* Resource names */ const char STRING_DIALOG_TEST[] = "DIALOG_TEST"; /* Local Variables: */ /* c-file-style: "GNU" */ /* End: */ ================================================ FILE: winhlp32/tom.h ================================================ /*** Autogenerated by WIDL 1.7.35 from tom.idl - Do not edit ***/ #ifndef __REQUIRED_RPCNDR_H_VERSION__ #define __REQUIRED_RPCNDR_H_VERSION__ 475 #endif #include #include #ifndef COM_NO_WINDOWS_H #include #include #endif #ifndef __tom_h__ #define __tom_h__ /* Forward declarations */ #ifndef __ITextDocument_FWD_DEFINED__ #define __ITextDocument_FWD_DEFINED__ typedef interface ITextDocument ITextDocument; #ifdef __cplusplus interface ITextDocument; #endif /* __cplusplus */ #endif #ifndef __ITextDocument2Old_FWD_DEFINED__ #define __ITextDocument2Old_FWD_DEFINED__ typedef interface ITextDocument2Old ITextDocument2Old; #ifdef __cplusplus interface ITextDocument2Old; #endif /* __cplusplus */ #endif #ifndef __ITextRow_FWD_DEFINED__ #define __ITextRow_FWD_DEFINED__ typedef interface ITextRow ITextRow; #ifdef __cplusplus interface ITextRow; #endif /* __cplusplus */ #endif #ifndef __ITextRange2_FWD_DEFINED__ #define __ITextRange2_FWD_DEFINED__ typedef interface ITextRange2 ITextRange2; #ifdef __cplusplus interface ITextRange2; #endif /* __cplusplus */ #endif #ifndef __ITextSelection2_FWD_DEFINED__ #define __ITextSelection2_FWD_DEFINED__ typedef interface ITextSelection2 ITextSelection2; #ifdef __cplusplus interface ITextSelection2; #endif /* __cplusplus */ #endif #ifndef __ITextDocument2_FWD_DEFINED__ #define __ITextDocument2_FWD_DEFINED__ typedef interface ITextDocument2 ITextDocument2; #ifdef __cplusplus interface ITextDocument2; #endif /* __cplusplus */ #endif #ifndef __ITextRange_FWD_DEFINED__ #define __ITextRange_FWD_DEFINED__ typedef interface ITextRange ITextRange; #ifdef __cplusplus interface ITextRange; #endif /* __cplusplus */ #endif #ifndef __ITextSelection_FWD_DEFINED__ #define __ITextSelection_FWD_DEFINED__ typedef interface ITextSelection ITextSelection; #ifdef __cplusplus interface ITextSelection; #endif /* __cplusplus */ #endif #ifndef __ITextFont_FWD_DEFINED__ #define __ITextFont_FWD_DEFINED__ typedef interface ITextFont ITextFont; #ifdef __cplusplus interface ITextFont; #endif /* __cplusplus */ #endif #ifndef __ITextPara_FWD_DEFINED__ #define __ITextPara_FWD_DEFINED__ typedef interface ITextPara ITextPara; #ifdef __cplusplus interface ITextPara; #endif /* __cplusplus */ #endif #ifndef __ITextStoryRanges_FWD_DEFINED__ #define __ITextStoryRanges_FWD_DEFINED__ typedef interface ITextStoryRanges ITextStoryRanges; #ifdef __cplusplus interface ITextStoryRanges; #endif /* __cplusplus */ #endif /* Headers for imported files */ #include #include #ifdef __cplusplus extern "C" { #endif #ifdef WINE_NO_UNICODE_MACROS #undef FindText #endif typedef enum tagTomConstants { tomFalse = (int)0, tomTrue = (int)-1, tomUndefined = (int)-9999999, tomToggle = (int)-9999998, tomAutoColor = (int)-9999997, tomDefault = (int)-9999996, tomSuspend = (int)-9999995, tomResume = (int)-9999994, tomApplyNow = (int)0, tomApplyLater = (int)1, tomTrackParms = (int)2, tomCacheParms = (int)3, tomApplyTmp = (int)4, tomDisableSmartFont = (int)8, tomEnableSmartFont = (int)9, tomUsePoints = (int)10, tomUseTwips = (int)11, tomBackward = (int)0xc0000001, tomForward = (int)0x3fffffff, tomMove = (int)0, tomExtend = (int)1, tomNoSelection = (int)0, tomSelectionIP = (int)1, tomSelectionNormal = (int)2, tomSelectionFrame = (int)3, tomSelectionColumn = (int)4, tomSelectionRow = (int)5, tomSelectionBlock = (int)6, tomSelectionInlineShape = (int)7, tomSelectionShape = (int)8, tomSelStartActive = (int)1, tomSelAtEOL = (int)2, tomSelOvertype = (int)4, tomSelActive = (int)8, tomSelReplace = (int)16, tomEnd = (int)0, tomStart = (int)32, tomCollapseEnd = (int)0, tomCollapseStart = (int)1, tomClientCoord = (int)256, tomNone = (int)0, tomSingle = (int)1, tomWords = (int)2, tomDouble = (int)3, tomDotted = (int)4, tomDash = (int)5, tomDashDot = (int)6, tomDashDotDot = (int)7, tomWave = (int)8, tomThick = (int)9, tomHair = (int)10, tomLineSpaceSingle = (int)0, tomLineSpace1pt5 = (int)1, tomLineSpaceDouble = (int)2, tomLineSpaceAtLeast = (int)3, tomLineSpaceExactly = (int)4, tomLineSpaceMultiple = (int)5, tomAlignLeft = (int)0, tomAlignCenter = (int)1, tomAlignRight = (int)2, tomAlignJustify = (int)3, tomAlignDecimal = (int)3, tomAlignBar = (int)4, tomAlignInterWord = (int)3, tomAlignInterLetter = (int)4, tomAlignScaled = (int)5, tomAlignGlyphs = (int)6, tomAlignSnapGrid = (int)7, tomSpaces = (int)0, tomDots = (int)1, tomDashes = (int)2, tomLines = (int)3, tomThickLines = (int)4, tomEquals = (int)5, tomTabBack = (int)-3, tomTabNext = (int)-2, tomTabHere = (int)-1, tomListBullet = (int)1, tomListNumberAsArabic = (int)2, tomListNumberAsLCLetter = (int)3, tomListNumberAsUCLetter = (int)4, tomListNumberAsLCRoman = (int)5, tomListNumberAsUCRoman = (int)6, tomListNumberAsSequence = (int)7, tomListParentheses = (int)0x10000, tomListPeriod = (int)0x20000, tomListPlain = (int)0x30000, tomCharacter = (int)1, tomWord = (int)2, tomSentence = (int)3, tomParagraph = (int)4, tomLine = (int)5, tomStory = (int)6, tomScreen = (int)7, tomSection = (int)8, tomColumn = (int)9, tomRow = (int)10, tomWindow = (int)11, tomCell = (int)12, tomCharFormat = (int)13, tomParaFormat = (int)14, tomTable = (int)15, tomObject = (int)16, tomMatchWord = (int)2, tomMatchCase = (int)4, tomMatchPattern = (int)8, tomUnknownStory = (int)0, tomMainTextStory = (int)1, tomFootnotesStory = (int)2, tomEndnotesStory = (int)3, tomCommentsStory = (int)4, tomTextFrameStory = (int)5, tomEvenPagesHeaderStory = (int)6, tomPrimaryHeaderStory = (int)7, tomEvenPagesFooterStory = (int)8, tomPrimaryFooterStory = (int)9, tomFirstPageHeaderStory = (int)10, tomFirstPageFooterStory = (int)11, tomNoAnimation = (int)0, tomLasVegasLights = (int)1, tomBlinkingBackground = (int)2, tomSparkleText = (int)3, tomMarchingBlackAnts = (int)4, tomMarchingRedAnts = (int)5, tomShimmer = (int)6, tomWipeDown = (int)7, tomWipeRight = (int)8, tomAnimationMax = (int)8, tomLowerCase = (int)0, tomUpperCase = (int)1, tomTitleCase = (int)2, tomSentenceCase = (int)4, tomToggleCase = (int)5, tomReadOnly = (int)0x100, tomShareDenyRead = (int)0x200, tomShareDenyWrite = (int)0x400, tomPasteFile = (int)0x1000, tomCreateNew = (int)0x10, tomCreateAlways = (int)0x20, tomOpenExisting = (int)0x30, tomOpenAlways = (int)0x40, tomTruncateExisting = (int)0x50, tomRTF = (int)0x1, tomText = (int)0x2, tomHTML = (int)0x3, tomWordDocument = (int)0x4, tomBold = (int)0x80000001, tomItalic = (int)0x80000002, tomUnderline = (int)0x80000004, tomStrikeout = (int)0x80000008, tomProtected = (int)0x80000010, tomLink = (int)0x80000020, tomSmallCaps = (int)0x80000040, tomAllCaps = (int)0x80000080, tomHidden = (int)0x80000100, tomOutline = (int)0x80000200, tomShadow = (int)0x80000400, tomEmboss = (int)0x80000800, tomImprint = (int)0x80001000, tomDisabled = (int)0x80002000, tomRevised = (int)0x80004000, tomNormalCaret = (int)0, tomKoreanBlockCaret = (int)0x1, tomIncludeInset = (int)0x1, tomIgnoreCurrentFont = (int)0, tomMatchFontCharset = (int)0x1, tomMatchFontSignature = (int)0x2, tomCharset = (int)0x80000000, tomRE10Mode = (int)0x1, tomNoIME = (int)0x80000, tomSelfIME = (int)0x40000, tomRowApplyDefault = (int)0, tomCellStructureChangeOnly = (int)0x1 } tomConstants; #ifndef __ITextRange_FWD_DEFINED__ #define __ITextRange_FWD_DEFINED__ typedef interface ITextRange ITextRange; #ifdef __cplusplus interface ITextRange; #endif /* __cplusplus */ #endif #ifndef __ITextSelection_FWD_DEFINED__ #define __ITextSelection_FWD_DEFINED__ typedef interface ITextSelection ITextSelection; #ifdef __cplusplus interface ITextSelection; #endif /* __cplusplus */ #endif #ifndef __ITextStoryRanges_FWD_DEFINED__ #define __ITextStoryRanges_FWD_DEFINED__ typedef interface ITextStoryRanges ITextStoryRanges; #ifdef __cplusplus interface ITextStoryRanges; #endif /* __cplusplus */ #endif /***************************************************************************** * ITextDocument interface */ #ifndef __ITextDocument_INTERFACE_DEFINED__ #define __ITextDocument_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextDocument, 0x8cc497c0, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("8cc497c0-a1df-11ce-8098-00aa0047be5d") ITextDocument : public IDispatch { virtual HRESULT STDMETHODCALLTYPE GetName( BSTR *pName) = 0; virtual HRESULT STDMETHODCALLTYPE GetSelection( ITextSelection **ppSel) = 0; virtual HRESULT STDMETHODCALLTYPE GetStoryCount( LONG *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetStoryRanges( ITextStoryRanges **ppStories) = 0; virtual HRESULT STDMETHODCALLTYPE GetSaved( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetSaved( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetDefaultTabStop( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetDefaultTabStop( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE New( ) = 0; virtual HRESULT STDMETHODCALLTYPE Open( VARIANT *pVar, LONG Flags, LONG CodePage) = 0; virtual HRESULT STDMETHODCALLTYPE Save( VARIANT *pVar, LONG Flags, LONG CodePage) = 0; virtual HRESULT STDMETHODCALLTYPE Freeze( LONG *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE Unfreeze( LONG *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE BeginEditCollection( ) = 0; virtual HRESULT STDMETHODCALLTYPE EndEditCollection( ) = 0; virtual HRESULT STDMETHODCALLTYPE Undo( LONG Count, LONG *prop) = 0; virtual HRESULT STDMETHODCALLTYPE Redo( LONG Count, LONG *prop) = 0; virtual HRESULT STDMETHODCALLTYPE Range( LONG cp1, LONG cp2, ITextRange **ppRange) = 0; virtual HRESULT STDMETHODCALLTYPE RangeFromPoint( LONG x, LONG y, ITextRange **ppRange) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextDocument, 0x8cc497c0, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d) #endif #else typedef struct ITextDocumentVtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextDocument *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextDocument *This); ULONG (STDMETHODCALLTYPE *Release)( ITextDocument *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextDocument *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextDocument *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextDocument *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextDocument *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextDocument methods ***/ HRESULT (STDMETHODCALLTYPE *GetName)( ITextDocument *This, BSTR *pName); HRESULT (STDMETHODCALLTYPE *GetSelection)( ITextDocument *This, ITextSelection **ppSel); HRESULT (STDMETHODCALLTYPE *GetStoryCount)( ITextDocument *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *GetStoryRanges)( ITextDocument *This, ITextStoryRanges **ppStories); HRESULT (STDMETHODCALLTYPE *GetSaved)( ITextDocument *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetSaved)( ITextDocument *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetDefaultTabStop)( ITextDocument *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetDefaultTabStop)( ITextDocument *This, float Value); HRESULT (STDMETHODCALLTYPE *New)( ITextDocument *This); HRESULT (STDMETHODCALLTYPE *Open)( ITextDocument *This, VARIANT *pVar, LONG Flags, LONG CodePage); HRESULT (STDMETHODCALLTYPE *Save)( ITextDocument *This, VARIANT *pVar, LONG Flags, LONG CodePage); HRESULT (STDMETHODCALLTYPE *Freeze)( ITextDocument *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *Unfreeze)( ITextDocument *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *BeginEditCollection)( ITextDocument *This); HRESULT (STDMETHODCALLTYPE *EndEditCollection)( ITextDocument *This); HRESULT (STDMETHODCALLTYPE *Undo)( ITextDocument *This, LONG Count, LONG *prop); HRESULT (STDMETHODCALLTYPE *Redo)( ITextDocument *This, LONG Count, LONG *prop); HRESULT (STDMETHODCALLTYPE *Range)( ITextDocument *This, LONG cp1, LONG cp2, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *RangeFromPoint)( ITextDocument *This, LONG x, LONG y, ITextRange **ppRange); END_INTERFACE } ITextDocumentVtbl; interface ITextDocument { CONST_VTBL ITextDocumentVtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextDocument_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextDocument_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextDocument_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextDocument methods ***/ #define ITextDocument_GetName(This,pName) (This)->lpVtbl->GetName(This,pName) #define ITextDocument_GetSelection(This,ppSel) (This)->lpVtbl->GetSelection(This,ppSel) #define ITextDocument_GetStoryCount(This,pCount) (This)->lpVtbl->GetStoryCount(This,pCount) #define ITextDocument_GetStoryRanges(This,ppStories) (This)->lpVtbl->GetStoryRanges(This,ppStories) #define ITextDocument_GetSaved(This,pValue) (This)->lpVtbl->GetSaved(This,pValue) #define ITextDocument_SetSaved(This,Value) (This)->lpVtbl->SetSaved(This,Value) #define ITextDocument_GetDefaultTabStop(This,pValue) (This)->lpVtbl->GetDefaultTabStop(This,pValue) #define ITextDocument_SetDefaultTabStop(This,Value) (This)->lpVtbl->SetDefaultTabStop(This,Value) #define ITextDocument_New(This) (This)->lpVtbl->New(This) #define ITextDocument_Open(This,pVar,Flags,CodePage) (This)->lpVtbl->Open(This,pVar,Flags,CodePage) #define ITextDocument_Save(This,pVar,Flags,CodePage) (This)->lpVtbl->Save(This,pVar,Flags,CodePage) #define ITextDocument_Freeze(This,pCount) (This)->lpVtbl->Freeze(This,pCount) #define ITextDocument_Unfreeze(This,pCount) (This)->lpVtbl->Unfreeze(This,pCount) #define ITextDocument_BeginEditCollection(This) (This)->lpVtbl->BeginEditCollection(This) #define ITextDocument_EndEditCollection(This) (This)->lpVtbl->EndEditCollection(This) #define ITextDocument_Undo(This,Count,prop) (This)->lpVtbl->Undo(This,Count,prop) #define ITextDocument_Redo(This,Count,prop) (This)->lpVtbl->Redo(This,Count,prop) #define ITextDocument_Range(This,cp1,cp2,ppRange) (This)->lpVtbl->Range(This,cp1,cp2,ppRange) #define ITextDocument_RangeFromPoint(This,x,y,ppRange) (This)->lpVtbl->RangeFromPoint(This,x,y,ppRange) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextDocument_QueryInterface(ITextDocument* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextDocument_AddRef(ITextDocument* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextDocument_Release(ITextDocument* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextDocument_GetTypeInfoCount(ITextDocument* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextDocument_GetTypeInfo(ITextDocument* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextDocument_GetIDsOfNames(ITextDocument* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextDocument_Invoke(ITextDocument* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextDocument methods ***/ static FORCEINLINE HRESULT ITextDocument_GetName(ITextDocument* This,BSTR *pName) { return This->lpVtbl->GetName(This,pName); } static FORCEINLINE HRESULT ITextDocument_GetSelection(ITextDocument* This,ITextSelection **ppSel) { return This->lpVtbl->GetSelection(This,ppSel); } static FORCEINLINE HRESULT ITextDocument_GetStoryCount(ITextDocument* This,LONG *pCount) { return This->lpVtbl->GetStoryCount(This,pCount); } static FORCEINLINE HRESULT ITextDocument_GetStoryRanges(ITextDocument* This,ITextStoryRanges **ppStories) { return This->lpVtbl->GetStoryRanges(This,ppStories); } static FORCEINLINE HRESULT ITextDocument_GetSaved(ITextDocument* This,LONG *pValue) { return This->lpVtbl->GetSaved(This,pValue); } static FORCEINLINE HRESULT ITextDocument_SetSaved(ITextDocument* This,LONG Value) { return This->lpVtbl->SetSaved(This,Value); } static FORCEINLINE HRESULT ITextDocument_GetDefaultTabStop(ITextDocument* This,float *pValue) { return This->lpVtbl->GetDefaultTabStop(This,pValue); } static FORCEINLINE HRESULT ITextDocument_SetDefaultTabStop(ITextDocument* This,float Value) { return This->lpVtbl->SetDefaultTabStop(This,Value); } static FORCEINLINE HRESULT ITextDocument_New(ITextDocument* This) { return This->lpVtbl->New(This); } static FORCEINLINE HRESULT ITextDocument_Open(ITextDocument* This,VARIANT *pVar,LONG Flags,LONG CodePage) { return This->lpVtbl->Open(This,pVar,Flags,CodePage); } static FORCEINLINE HRESULT ITextDocument_Save(ITextDocument* This,VARIANT *pVar,LONG Flags,LONG CodePage) { return This->lpVtbl->Save(This,pVar,Flags,CodePage); } static FORCEINLINE HRESULT ITextDocument_Freeze(ITextDocument* This,LONG *pCount) { return This->lpVtbl->Freeze(This,pCount); } static FORCEINLINE HRESULT ITextDocument_Unfreeze(ITextDocument* This,LONG *pCount) { return This->lpVtbl->Unfreeze(This,pCount); } static FORCEINLINE HRESULT ITextDocument_BeginEditCollection(ITextDocument* This) { return This->lpVtbl->BeginEditCollection(This); } static FORCEINLINE HRESULT ITextDocument_EndEditCollection(ITextDocument* This) { return This->lpVtbl->EndEditCollection(This); } static FORCEINLINE HRESULT ITextDocument_Undo(ITextDocument* This,LONG Count,LONG *prop) { return This->lpVtbl->Undo(This,Count,prop); } static FORCEINLINE HRESULT ITextDocument_Redo(ITextDocument* This,LONG Count,LONG *prop) { return This->lpVtbl->Redo(This,Count,prop); } static FORCEINLINE HRESULT ITextDocument_Range(ITextDocument* This,LONG cp1,LONG cp2,ITextRange **ppRange) { return This->lpVtbl->Range(This,cp1,cp2,ppRange); } static FORCEINLINE HRESULT ITextDocument_RangeFromPoint(ITextDocument* This,LONG x,LONG y,ITextRange **ppRange) { return This->lpVtbl->RangeFromPoint(This,x,y,ppRange); } #endif #endif #endif #endif /* __ITextDocument_INTERFACE_DEFINED__ */ /***************************************************************************** * ITextDocument2Old interface */ #ifndef __ITextDocument2Old_INTERFACE_DEFINED__ #define __ITextDocument2Old_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextDocument2Old, 0x01c25500, 0x4268, 0x11d1, 0x88,0x3a, 0x3c,0x8b,0x00,0xc1,0x00,0x00); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("01c25500-4268-11d1-883a-3c8b00c10000") ITextDocument2Old : public ITextDocument { virtual HRESULT STDMETHODCALLTYPE AttachMsgFilter( IUnknown *filter) = 0; virtual HRESULT STDMETHODCALLTYPE SetEffectColor( LONG index, COLORREF cr) = 0; virtual HRESULT STDMETHODCALLTYPE GetEffectColor( LONG index, COLORREF *cr) = 0; virtual HRESULT STDMETHODCALLTYPE GetCaretType( LONG *type) = 0; virtual HRESULT STDMETHODCALLTYPE SetCaretType( LONG type) = 0; virtual HRESULT STDMETHODCALLTYPE GetImmContext( LONG *context) = 0; virtual HRESULT STDMETHODCALLTYPE ReleaseImmContext( LONG context) = 0; virtual HRESULT STDMETHODCALLTYPE GetPreferredFont( LONG cp, LONG codepage, LONG option, LONG current_codepage, LONG current_fontsize, BSTR *bstr, LONG *pitch_family, LONG *new_fontsize) = 0; virtual HRESULT STDMETHODCALLTYPE GetNotificationMode( LONG *mode) = 0; virtual HRESULT STDMETHODCALLTYPE SetNotificationMode( LONG mode) = 0; virtual HRESULT STDMETHODCALLTYPE GetClientRect( LONG type, LONG *left, LONG *top, LONG *right, LONG *bottom) = 0; virtual HRESULT STDMETHODCALLTYPE GetSelectionEx( ITextSelection **selection) = 0; virtual HRESULT STDMETHODCALLTYPE GetWindow( LONG *hwnd) = 0; virtual HRESULT STDMETHODCALLTYPE GetFEFlags( LONG *flags) = 0; virtual HRESULT STDMETHODCALLTYPE UpdateWindow( ) = 0; virtual HRESULT STDMETHODCALLTYPE CheckTextLimit( LONG cch, LONG *exceed) = 0; virtual HRESULT STDMETHODCALLTYPE IMEInProgress( LONG mode) = 0; virtual HRESULT STDMETHODCALLTYPE SysBeep( ) = 0; virtual HRESULT STDMETHODCALLTYPE Update( LONG mode) = 0; virtual HRESULT STDMETHODCALLTYPE Notify( LONG notify) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextDocument2Old, 0x01c25500, 0x4268, 0x11d1, 0x88,0x3a, 0x3c,0x8b,0x00,0xc1,0x00,0x00) #endif #else typedef struct ITextDocument2OldVtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextDocument2Old *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextDocument2Old *This); ULONG (STDMETHODCALLTYPE *Release)( ITextDocument2Old *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextDocument2Old *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextDocument2Old *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextDocument2Old *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextDocument2Old *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextDocument methods ***/ HRESULT (STDMETHODCALLTYPE *GetName)( ITextDocument2Old *This, BSTR *pName); HRESULT (STDMETHODCALLTYPE *GetSelection)( ITextDocument2Old *This, ITextSelection **ppSel); HRESULT (STDMETHODCALLTYPE *GetStoryCount)( ITextDocument2Old *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *GetStoryRanges)( ITextDocument2Old *This, ITextStoryRanges **ppStories); HRESULT (STDMETHODCALLTYPE *GetSaved)( ITextDocument2Old *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetSaved)( ITextDocument2Old *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetDefaultTabStop)( ITextDocument2Old *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetDefaultTabStop)( ITextDocument2Old *This, float Value); HRESULT (STDMETHODCALLTYPE *New)( ITextDocument2Old *This); HRESULT (STDMETHODCALLTYPE *Open)( ITextDocument2Old *This, VARIANT *pVar, LONG Flags, LONG CodePage); HRESULT (STDMETHODCALLTYPE *Save)( ITextDocument2Old *This, VARIANT *pVar, LONG Flags, LONG CodePage); HRESULT (STDMETHODCALLTYPE *Freeze)( ITextDocument2Old *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *Unfreeze)( ITextDocument2Old *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *BeginEditCollection)( ITextDocument2Old *This); HRESULT (STDMETHODCALLTYPE *EndEditCollection)( ITextDocument2Old *This); HRESULT (STDMETHODCALLTYPE *Undo)( ITextDocument2Old *This, LONG Count, LONG *prop); HRESULT (STDMETHODCALLTYPE *Redo)( ITextDocument2Old *This, LONG Count, LONG *prop); HRESULT (STDMETHODCALLTYPE *Range)( ITextDocument2Old *This, LONG cp1, LONG cp2, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *RangeFromPoint)( ITextDocument2Old *This, LONG x, LONG y, ITextRange **ppRange); /*** ITextDocument2Old methods ***/ HRESULT (STDMETHODCALLTYPE *AttachMsgFilter)( ITextDocument2Old *This, IUnknown *filter); HRESULT (STDMETHODCALLTYPE *SetEffectColor)( ITextDocument2Old *This, LONG index, COLORREF cr); HRESULT (STDMETHODCALLTYPE *GetEffectColor)( ITextDocument2Old *This, LONG index, COLORREF *cr); HRESULT (STDMETHODCALLTYPE *GetCaretType)( ITextDocument2Old *This, LONG *type); HRESULT (STDMETHODCALLTYPE *SetCaretType)( ITextDocument2Old *This, LONG type); HRESULT (STDMETHODCALLTYPE *GetImmContext)( ITextDocument2Old *This, LONG *context); HRESULT (STDMETHODCALLTYPE *ReleaseImmContext)( ITextDocument2Old *This, LONG context); HRESULT (STDMETHODCALLTYPE *GetPreferredFont)( ITextDocument2Old *This, LONG cp, LONG codepage, LONG option, LONG current_codepage, LONG current_fontsize, BSTR *bstr, LONG *pitch_family, LONG *new_fontsize); HRESULT (STDMETHODCALLTYPE *GetNotificationMode)( ITextDocument2Old *This, LONG *mode); HRESULT (STDMETHODCALLTYPE *SetNotificationMode)( ITextDocument2Old *This, LONG mode); HRESULT (STDMETHODCALLTYPE *GetClientRect)( ITextDocument2Old *This, LONG type, LONG *left, LONG *top, LONG *right, LONG *bottom); HRESULT (STDMETHODCALLTYPE *GetSelectionEx)( ITextDocument2Old *This, ITextSelection **selection); HRESULT (STDMETHODCALLTYPE *GetWindow)( ITextDocument2Old *This, LONG *hwnd); HRESULT (STDMETHODCALLTYPE *GetFEFlags)( ITextDocument2Old *This, LONG *flags); HRESULT (STDMETHODCALLTYPE *UpdateWindow)( ITextDocument2Old *This); HRESULT (STDMETHODCALLTYPE *CheckTextLimit)( ITextDocument2Old *This, LONG cch, LONG *exceed); HRESULT (STDMETHODCALLTYPE *IMEInProgress)( ITextDocument2Old *This, LONG mode); HRESULT (STDMETHODCALLTYPE *SysBeep)( ITextDocument2Old *This); HRESULT (STDMETHODCALLTYPE *Update)( ITextDocument2Old *This, LONG mode); HRESULT (STDMETHODCALLTYPE *Notify)( ITextDocument2Old *This, LONG notify); END_INTERFACE } ITextDocument2OldVtbl; interface ITextDocument2Old { CONST_VTBL ITextDocument2OldVtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextDocument2Old_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextDocument2Old_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextDocument2Old_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextDocument2Old_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextDocument2Old_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextDocument2Old_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextDocument2Old_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextDocument methods ***/ #define ITextDocument2Old_GetName(This,pName) (This)->lpVtbl->GetName(This,pName) #define ITextDocument2Old_GetSelection(This,ppSel) (This)->lpVtbl->GetSelection(This,ppSel) #define ITextDocument2Old_GetStoryCount(This,pCount) (This)->lpVtbl->GetStoryCount(This,pCount) #define ITextDocument2Old_GetStoryRanges(This,ppStories) (This)->lpVtbl->GetStoryRanges(This,ppStories) #define ITextDocument2Old_GetSaved(This,pValue) (This)->lpVtbl->GetSaved(This,pValue) #define ITextDocument2Old_SetSaved(This,Value) (This)->lpVtbl->SetSaved(This,Value) #define ITextDocument2Old_GetDefaultTabStop(This,pValue) (This)->lpVtbl->GetDefaultTabStop(This,pValue) #define ITextDocument2Old_SetDefaultTabStop(This,Value) (This)->lpVtbl->SetDefaultTabStop(This,Value) #define ITextDocument2Old_New(This) (This)->lpVtbl->New(This) #define ITextDocument2Old_Open(This,pVar,Flags,CodePage) (This)->lpVtbl->Open(This,pVar,Flags,CodePage) #define ITextDocument2Old_Save(This,pVar,Flags,CodePage) (This)->lpVtbl->Save(This,pVar,Flags,CodePage) #define ITextDocument2Old_Freeze(This,pCount) (This)->lpVtbl->Freeze(This,pCount) #define ITextDocument2Old_Unfreeze(This,pCount) (This)->lpVtbl->Unfreeze(This,pCount) #define ITextDocument2Old_BeginEditCollection(This) (This)->lpVtbl->BeginEditCollection(This) #define ITextDocument2Old_EndEditCollection(This) (This)->lpVtbl->EndEditCollection(This) #define ITextDocument2Old_Undo(This,Count,prop) (This)->lpVtbl->Undo(This,Count,prop) #define ITextDocument2Old_Redo(This,Count,prop) (This)->lpVtbl->Redo(This,Count,prop) #define ITextDocument2Old_Range(This,cp1,cp2,ppRange) (This)->lpVtbl->Range(This,cp1,cp2,ppRange) #define ITextDocument2Old_RangeFromPoint(This,x,y,ppRange) (This)->lpVtbl->RangeFromPoint(This,x,y,ppRange) /*** ITextDocument2Old methods ***/ #define ITextDocument2Old_AttachMsgFilter(This,filter) (This)->lpVtbl->AttachMsgFilter(This,filter) #define ITextDocument2Old_SetEffectColor(This,index,cr) (This)->lpVtbl->SetEffectColor(This,index,cr) #define ITextDocument2Old_GetEffectColor(This,index,cr) (This)->lpVtbl->GetEffectColor(This,index,cr) #define ITextDocument2Old_GetCaretType(This,type) (This)->lpVtbl->GetCaretType(This,type) #define ITextDocument2Old_SetCaretType(This,type) (This)->lpVtbl->SetCaretType(This,type) #define ITextDocument2Old_GetImmContext(This,context) (This)->lpVtbl->GetImmContext(This,context) #define ITextDocument2Old_ReleaseImmContext(This,context) (This)->lpVtbl->ReleaseImmContext(This,context) #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) #define ITextDocument2Old_GetNotificationMode(This,mode) (This)->lpVtbl->GetNotificationMode(This,mode) #define ITextDocument2Old_SetNotificationMode(This,mode) (This)->lpVtbl->SetNotificationMode(This,mode) #define ITextDocument2Old_GetClientRect(This,type,left,top,right,bottom) (This)->lpVtbl->GetClientRect(This,type,left,top,right,bottom) #define ITextDocument2Old_GetSelectionEx(This,selection) (This)->lpVtbl->GetSelectionEx(This,selection) #define ITextDocument2Old_GetWindow(This,hwnd) (This)->lpVtbl->GetWindow(This,hwnd) #define ITextDocument2Old_GetFEFlags(This,flags) (This)->lpVtbl->GetFEFlags(This,flags) #define ITextDocument2Old_UpdateWindow(This) (This)->lpVtbl->UpdateWindow(This) #define ITextDocument2Old_CheckTextLimit(This,cch,exceed) (This)->lpVtbl->CheckTextLimit(This,cch,exceed) #define ITextDocument2Old_IMEInProgress(This,mode) (This)->lpVtbl->IMEInProgress(This,mode) #define ITextDocument2Old_SysBeep(This) (This)->lpVtbl->SysBeep(This) #define ITextDocument2Old_Update(This,mode) (This)->lpVtbl->Update(This,mode) #define ITextDocument2Old_Notify(This,notify) (This)->lpVtbl->Notify(This,notify) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextDocument2Old_QueryInterface(ITextDocument2Old* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextDocument2Old_AddRef(ITextDocument2Old* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextDocument2Old_Release(ITextDocument2Old* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextDocument2Old_GetTypeInfoCount(ITextDocument2Old* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextDocument2Old_GetTypeInfo(ITextDocument2Old* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextDocument2Old_GetIDsOfNames(ITextDocument2Old* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextDocument2Old_Invoke(ITextDocument2Old* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextDocument methods ***/ static FORCEINLINE HRESULT ITextDocument2Old_GetName(ITextDocument2Old* This,BSTR *pName) { return This->lpVtbl->GetName(This,pName); } static FORCEINLINE HRESULT ITextDocument2Old_GetSelection(ITextDocument2Old* This,ITextSelection **ppSel) { return This->lpVtbl->GetSelection(This,ppSel); } static FORCEINLINE HRESULT ITextDocument2Old_GetStoryCount(ITextDocument2Old* This,LONG *pCount) { return This->lpVtbl->GetStoryCount(This,pCount); } static FORCEINLINE HRESULT ITextDocument2Old_GetStoryRanges(ITextDocument2Old* This,ITextStoryRanges **ppStories) { return This->lpVtbl->GetStoryRanges(This,ppStories); } static FORCEINLINE HRESULT ITextDocument2Old_GetSaved(ITextDocument2Old* This,LONG *pValue) { return This->lpVtbl->GetSaved(This,pValue); } static FORCEINLINE HRESULT ITextDocument2Old_SetSaved(ITextDocument2Old* This,LONG Value) { return This->lpVtbl->SetSaved(This,Value); } static FORCEINLINE HRESULT ITextDocument2Old_GetDefaultTabStop(ITextDocument2Old* This,float *pValue) { return This->lpVtbl->GetDefaultTabStop(This,pValue); } static FORCEINLINE HRESULT ITextDocument2Old_SetDefaultTabStop(ITextDocument2Old* This,float Value) { return This->lpVtbl->SetDefaultTabStop(This,Value); } static FORCEINLINE HRESULT ITextDocument2Old_New(ITextDocument2Old* This) { return This->lpVtbl->New(This); } static FORCEINLINE HRESULT ITextDocument2Old_Open(ITextDocument2Old* This,VARIANT *pVar,LONG Flags,LONG CodePage) { return This->lpVtbl->Open(This,pVar,Flags,CodePage); } static FORCEINLINE HRESULT ITextDocument2Old_Save(ITextDocument2Old* This,VARIANT *pVar,LONG Flags,LONG CodePage) { return This->lpVtbl->Save(This,pVar,Flags,CodePage); } static FORCEINLINE HRESULT ITextDocument2Old_Freeze(ITextDocument2Old* This,LONG *pCount) { return This->lpVtbl->Freeze(This,pCount); } static FORCEINLINE HRESULT ITextDocument2Old_Unfreeze(ITextDocument2Old* This,LONG *pCount) { return This->lpVtbl->Unfreeze(This,pCount); } static FORCEINLINE HRESULT ITextDocument2Old_BeginEditCollection(ITextDocument2Old* This) { return This->lpVtbl->BeginEditCollection(This); } static FORCEINLINE HRESULT ITextDocument2Old_EndEditCollection(ITextDocument2Old* This) { return This->lpVtbl->EndEditCollection(This); } static FORCEINLINE HRESULT ITextDocument2Old_Undo(ITextDocument2Old* This,LONG Count,LONG *prop) { return This->lpVtbl->Undo(This,Count,prop); } static FORCEINLINE HRESULT ITextDocument2Old_Redo(ITextDocument2Old* This,LONG Count,LONG *prop) { return This->lpVtbl->Redo(This,Count,prop); } static FORCEINLINE HRESULT ITextDocument2Old_Range(ITextDocument2Old* This,LONG cp1,LONG cp2,ITextRange **ppRange) { return This->lpVtbl->Range(This,cp1,cp2,ppRange); } static FORCEINLINE HRESULT ITextDocument2Old_RangeFromPoint(ITextDocument2Old* This,LONG x,LONG y,ITextRange **ppRange) { return This->lpVtbl->RangeFromPoint(This,x,y,ppRange); } /*** ITextDocument2Old methods ***/ static FORCEINLINE HRESULT ITextDocument2Old_AttachMsgFilter(ITextDocument2Old* This,IUnknown *filter) { return This->lpVtbl->AttachMsgFilter(This,filter); } static FORCEINLINE HRESULT ITextDocument2Old_SetEffectColor(ITextDocument2Old* This,LONG index,COLORREF cr) { return This->lpVtbl->SetEffectColor(This,index,cr); } static FORCEINLINE HRESULT ITextDocument2Old_GetEffectColor(ITextDocument2Old* This,LONG index,COLORREF *cr) { return This->lpVtbl->GetEffectColor(This,index,cr); } static FORCEINLINE HRESULT ITextDocument2Old_GetCaretType(ITextDocument2Old* This,LONG *type) { return This->lpVtbl->GetCaretType(This,type); } static FORCEINLINE HRESULT ITextDocument2Old_SetCaretType(ITextDocument2Old* This,LONG type) { return This->lpVtbl->SetCaretType(This,type); } static FORCEINLINE HRESULT ITextDocument2Old_GetImmContext(ITextDocument2Old* This,LONG *context) { return This->lpVtbl->GetImmContext(This,context); } static FORCEINLINE HRESULT ITextDocument2Old_ReleaseImmContext(ITextDocument2Old* This,LONG context) { return This->lpVtbl->ReleaseImmContext(This,context); } static 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) { return This->lpVtbl->GetPreferredFont(This,cp,codepage,option,current_codepage,current_fontsize,bstr,pitch_family,new_fontsize); } static FORCEINLINE HRESULT ITextDocument2Old_GetNotificationMode(ITextDocument2Old* This,LONG *mode) { return This->lpVtbl->GetNotificationMode(This,mode); } static FORCEINLINE HRESULT ITextDocument2Old_SetNotificationMode(ITextDocument2Old* This,LONG mode) { return This->lpVtbl->SetNotificationMode(This,mode); } static FORCEINLINE HRESULT ITextDocument2Old_GetClientRect(ITextDocument2Old* This,LONG type,LONG *left,LONG *top,LONG *right,LONG *bottom) { return This->lpVtbl->GetClientRect(This,type,left,top,right,bottom); } static FORCEINLINE HRESULT ITextDocument2Old_GetSelectionEx(ITextDocument2Old* This,ITextSelection **selection) { return This->lpVtbl->GetSelectionEx(This,selection); } static FORCEINLINE HRESULT ITextDocument2Old_GetWindow(ITextDocument2Old* This,LONG *hwnd) { return This->lpVtbl->GetWindow(This,hwnd); } static FORCEINLINE HRESULT ITextDocument2Old_GetFEFlags(ITextDocument2Old* This,LONG *flags) { return This->lpVtbl->GetFEFlags(This,flags); } static FORCEINLINE HRESULT ITextDocument2Old_UpdateWindow(ITextDocument2Old* This) { return This->lpVtbl->UpdateWindow(This); } static FORCEINLINE HRESULT ITextDocument2Old_CheckTextLimit(ITextDocument2Old* This,LONG cch,LONG *exceed) { return This->lpVtbl->CheckTextLimit(This,cch,exceed); } static FORCEINLINE HRESULT ITextDocument2Old_IMEInProgress(ITextDocument2Old* This,LONG mode) { return This->lpVtbl->IMEInProgress(This,mode); } static FORCEINLINE HRESULT ITextDocument2Old_SysBeep(ITextDocument2Old* This) { return This->lpVtbl->SysBeep(This); } static FORCEINLINE HRESULT ITextDocument2Old_Update(ITextDocument2Old* This,LONG mode) { return This->lpVtbl->Update(This,mode); } static FORCEINLINE HRESULT ITextDocument2Old_Notify(ITextDocument2Old* This,LONG notify) { return This->lpVtbl->Notify(This,notify); } #endif #endif #endif #endif /* __ITextDocument2Old_INTERFACE_DEFINED__ */ #ifndef __ITextDisplays_FWD_DEFINED__ #define __ITextDisplays_FWD_DEFINED__ typedef interface ITextDisplays ITextDisplays; #ifdef __cplusplus interface ITextDisplays; #endif /* __cplusplus */ #endif #ifndef __ITextFont2_FWD_DEFINED__ #define __ITextFont2_FWD_DEFINED__ typedef interface ITextFont2 ITextFont2; #ifdef __cplusplus interface ITextFont2; #endif /* __cplusplus */ #endif #ifndef __ITextPara2_FWD_DEFINED__ #define __ITextPara2_FWD_DEFINED__ typedef interface ITextPara2 ITextPara2; #ifdef __cplusplus interface ITextPara2; #endif /* __cplusplus */ #endif #ifndef __ITextStory_FWD_DEFINED__ #define __ITextStory_FWD_DEFINED__ typedef interface ITextStory ITextStory; #ifdef __cplusplus interface ITextStory; #endif /* __cplusplus */ #endif #ifndef __ITextStoryRanges2_FWD_DEFINED__ #define __ITextStoryRanges2_FWD_DEFINED__ typedef interface ITextStoryRanges2 ITextStoryRanges2; #ifdef __cplusplus interface ITextStoryRanges2; #endif /* __cplusplus */ #endif #ifndef __ITextStrings_FWD_DEFINED__ #define __ITextStrings_FWD_DEFINED__ typedef interface ITextStrings ITextStrings; #ifdef __cplusplus interface ITextStrings; #endif /* __cplusplus */ #endif /***************************************************************************** * ITextRow interface */ #ifndef __ITextRow_INTERFACE_DEFINED__ #define __ITextRow_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextRow, 0xc241f5ef, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("c241f5ef-7206-11d8-a2c7-00a0d1d6c6b3") ITextRow : public IDispatch { virtual HRESULT STDMETHODCALLTYPE GetAlignment( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetAlignment( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellCount( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellCount( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellCountCache( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellCountCache( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellIndex( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellIndex( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellMargin( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellMargin( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetHeight( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetHeight( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetIndent( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetIndent( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetKeepTogether( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetKeepTogether( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetKeepWithNext( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetKeepWithNext( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetNestLevel( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE GetRTL( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetRTL( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellAlignment( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellAlignment( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellColorBack( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellColorBack( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellColorFore( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellColorFore( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellMergeFlags( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellMergeFlags( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellShading( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellShading( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellVerticalText( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellVerticalText( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellWidth( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellWidth( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellBorderColors( LONG *left, LONG *top, LONG *right, LONG *bottom) = 0; virtual HRESULT STDMETHODCALLTYPE GetCellBorderWidths( LONG *left, LONG *top, LONG *right, LONG *bottom) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellBorderColors( LONG left, LONG top, LONG right, LONG bottom) = 0; virtual HRESULT STDMETHODCALLTYPE SetCellBorderWidths( LONG left, LONG top, LONG right, LONG bottom) = 0; virtual HRESULT STDMETHODCALLTYPE Apply( LONG row, LONG flags) = 0; virtual HRESULT STDMETHODCALLTYPE CanChange( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE GetProperty( LONG type, LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE Insert( LONG row) = 0; virtual HRESULT STDMETHODCALLTYPE IsEqual( ITextRow *row, LONG *r) = 0; virtual HRESULT STDMETHODCALLTYPE Reset( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE SetProperty( LONG type, LONG value) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextRow, 0xc241f5ef, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3) #endif #else typedef struct ITextRowVtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextRow *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextRow *This); ULONG (STDMETHODCALLTYPE *Release)( ITextRow *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextRow *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextRow *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextRow *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextRow *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextRow methods ***/ HRESULT (STDMETHODCALLTYPE *GetAlignment)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetAlignment)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellCount)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellCount)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellCountCache)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellCountCache)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellIndex)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellIndex)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellMargin)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellMargin)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetHeight)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetHeight)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetIndent)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetIndent)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetKeepTogether)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetKeepTogether)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetKeepWithNext)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetKeepWithNext)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetNestLevel)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *GetRTL)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetRTL)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellAlignment)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellAlignment)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellColorBack)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellColorBack)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellColorFore)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellColorFore)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellMergeFlags)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellMergeFlags)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellShading)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellShading)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellVerticalText)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellVerticalText)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellWidth)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCellWidth)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetCellBorderColors)( ITextRow *This, LONG *left, LONG *top, LONG *right, LONG *bottom); HRESULT (STDMETHODCALLTYPE *GetCellBorderWidths)( ITextRow *This, LONG *left, LONG *top, LONG *right, LONG *bottom); HRESULT (STDMETHODCALLTYPE *SetCellBorderColors)( ITextRow *This, LONG left, LONG top, LONG right, LONG bottom); HRESULT (STDMETHODCALLTYPE *SetCellBorderWidths)( ITextRow *This, LONG left, LONG top, LONG right, LONG bottom); HRESULT (STDMETHODCALLTYPE *Apply)( ITextRow *This, LONG row, LONG flags); HRESULT (STDMETHODCALLTYPE *CanChange)( ITextRow *This, LONG *value); HRESULT (STDMETHODCALLTYPE *GetProperty)( ITextRow *This, LONG type, LONG *value); HRESULT (STDMETHODCALLTYPE *Insert)( ITextRow *This, LONG row); HRESULT (STDMETHODCALLTYPE *IsEqual)( ITextRow *This, ITextRow *row, LONG *r); HRESULT (STDMETHODCALLTYPE *Reset)( ITextRow *This, LONG value); HRESULT (STDMETHODCALLTYPE *SetProperty)( ITextRow *This, LONG type, LONG value); END_INTERFACE } ITextRowVtbl; interface ITextRow { CONST_VTBL ITextRowVtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextRow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextRow_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextRow_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextRow_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextRow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextRow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextRow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextRow methods ***/ #define ITextRow_GetAlignment(This,value) (This)->lpVtbl->GetAlignment(This,value) #define ITextRow_SetAlignment(This,value) (This)->lpVtbl->SetAlignment(This,value) #define ITextRow_GetCellCount(This,value) (This)->lpVtbl->GetCellCount(This,value) #define ITextRow_SetCellCount(This,value) (This)->lpVtbl->SetCellCount(This,value) #define ITextRow_GetCellCountCache(This,value) (This)->lpVtbl->GetCellCountCache(This,value) #define ITextRow_SetCellCountCache(This,value) (This)->lpVtbl->SetCellCountCache(This,value) #define ITextRow_GetCellIndex(This,value) (This)->lpVtbl->GetCellIndex(This,value) #define ITextRow_SetCellIndex(This,value) (This)->lpVtbl->SetCellIndex(This,value) #define ITextRow_GetCellMargin(This,value) (This)->lpVtbl->GetCellMargin(This,value) #define ITextRow_SetCellMargin(This,value) (This)->lpVtbl->SetCellMargin(This,value) #define ITextRow_GetHeight(This,value) (This)->lpVtbl->GetHeight(This,value) #define ITextRow_SetHeight(This,value) (This)->lpVtbl->SetHeight(This,value) #define ITextRow_GetIndent(This,value) (This)->lpVtbl->GetIndent(This,value) #define ITextRow_SetIndent(This,value) (This)->lpVtbl->SetIndent(This,value) #define ITextRow_GetKeepTogether(This,value) (This)->lpVtbl->GetKeepTogether(This,value) #define ITextRow_SetKeepTogether(This,value) (This)->lpVtbl->SetKeepTogether(This,value) #define ITextRow_GetKeepWithNext(This,value) (This)->lpVtbl->GetKeepWithNext(This,value) #define ITextRow_SetKeepWithNext(This,value) (This)->lpVtbl->SetKeepWithNext(This,value) #define ITextRow_GetNestLevel(This,value) (This)->lpVtbl->GetNestLevel(This,value) #define ITextRow_GetRTL(This,value) (This)->lpVtbl->GetRTL(This,value) #define ITextRow_SetRTL(This,value) (This)->lpVtbl->SetRTL(This,value) #define ITextRow_GetCellAlignment(This,value) (This)->lpVtbl->GetCellAlignment(This,value) #define ITextRow_SetCellAlignment(This,value) (This)->lpVtbl->SetCellAlignment(This,value) #define ITextRow_GetCellColorBack(This,value) (This)->lpVtbl->GetCellColorBack(This,value) #define ITextRow_SetCellColorBack(This,value) (This)->lpVtbl->SetCellColorBack(This,value) #define ITextRow_GetCellColorFore(This,value) (This)->lpVtbl->GetCellColorFore(This,value) #define ITextRow_SetCellColorFore(This,value) (This)->lpVtbl->SetCellColorFore(This,value) #define ITextRow_GetCellMergeFlags(This,value) (This)->lpVtbl->GetCellMergeFlags(This,value) #define ITextRow_SetCellMergeFlags(This,value) (This)->lpVtbl->SetCellMergeFlags(This,value) #define ITextRow_GetCellShading(This,value) (This)->lpVtbl->GetCellShading(This,value) #define ITextRow_SetCellShading(This,value) (This)->lpVtbl->SetCellShading(This,value) #define ITextRow_GetCellVerticalText(This,value) (This)->lpVtbl->GetCellVerticalText(This,value) #define ITextRow_SetCellVerticalText(This,value) (This)->lpVtbl->SetCellVerticalText(This,value) #define ITextRow_GetCellWidth(This,value) (This)->lpVtbl->GetCellWidth(This,value) #define ITextRow_SetCellWidth(This,value) (This)->lpVtbl->SetCellWidth(This,value) #define ITextRow_GetCellBorderColors(This,left,top,right,bottom) (This)->lpVtbl->GetCellBorderColors(This,left,top,right,bottom) #define ITextRow_GetCellBorderWidths(This,left,top,right,bottom) (This)->lpVtbl->GetCellBorderWidths(This,left,top,right,bottom) #define ITextRow_SetCellBorderColors(This,left,top,right,bottom) (This)->lpVtbl->SetCellBorderColors(This,left,top,right,bottom) #define ITextRow_SetCellBorderWidths(This,left,top,right,bottom) (This)->lpVtbl->SetCellBorderWidths(This,left,top,right,bottom) #define ITextRow_Apply(This,row,flags) (This)->lpVtbl->Apply(This,row,flags) #define ITextRow_CanChange(This,value) (This)->lpVtbl->CanChange(This,value) #define ITextRow_GetProperty(This,type,value) (This)->lpVtbl->GetProperty(This,type,value) #define ITextRow_Insert(This,row) (This)->lpVtbl->Insert(This,row) #define ITextRow_IsEqual(This,row,r) (This)->lpVtbl->IsEqual(This,row,r) #define ITextRow_Reset(This,value) (This)->lpVtbl->Reset(This,value) #define ITextRow_SetProperty(This,type,value) (This)->lpVtbl->SetProperty(This,type,value) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextRow_QueryInterface(ITextRow* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextRow_AddRef(ITextRow* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextRow_Release(ITextRow* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextRow_GetTypeInfoCount(ITextRow* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextRow_GetTypeInfo(ITextRow* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextRow_GetIDsOfNames(ITextRow* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextRow_Invoke(ITextRow* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextRow methods ***/ static FORCEINLINE HRESULT ITextRow_GetAlignment(ITextRow* This,LONG *value) { return This->lpVtbl->GetAlignment(This,value); } static FORCEINLINE HRESULT ITextRow_SetAlignment(ITextRow* This,LONG value) { return This->lpVtbl->SetAlignment(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellCount(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellCount(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellCount(ITextRow* This,LONG value) { return This->lpVtbl->SetCellCount(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellCountCache(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellCountCache(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellCountCache(ITextRow* This,LONG value) { return This->lpVtbl->SetCellCountCache(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellIndex(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellIndex(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellIndex(ITextRow* This,LONG value) { return This->lpVtbl->SetCellIndex(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellMargin(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellMargin(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellMargin(ITextRow* This,LONG value) { return This->lpVtbl->SetCellMargin(This,value); } static FORCEINLINE HRESULT ITextRow_GetHeight(ITextRow* This,LONG *value) { return This->lpVtbl->GetHeight(This,value); } static FORCEINLINE HRESULT ITextRow_SetHeight(ITextRow* This,LONG value) { return This->lpVtbl->SetHeight(This,value); } static FORCEINLINE HRESULT ITextRow_GetIndent(ITextRow* This,LONG *value) { return This->lpVtbl->GetIndent(This,value); } static FORCEINLINE HRESULT ITextRow_SetIndent(ITextRow* This,LONG value) { return This->lpVtbl->SetIndent(This,value); } static FORCEINLINE HRESULT ITextRow_GetKeepTogether(ITextRow* This,LONG *value) { return This->lpVtbl->GetKeepTogether(This,value); } static FORCEINLINE HRESULT ITextRow_SetKeepTogether(ITextRow* This,LONG value) { return This->lpVtbl->SetKeepTogether(This,value); } static FORCEINLINE HRESULT ITextRow_GetKeepWithNext(ITextRow* This,LONG *value) { return This->lpVtbl->GetKeepWithNext(This,value); } static FORCEINLINE HRESULT ITextRow_SetKeepWithNext(ITextRow* This,LONG value) { return This->lpVtbl->SetKeepWithNext(This,value); } static FORCEINLINE HRESULT ITextRow_GetNestLevel(ITextRow* This,LONG *value) { return This->lpVtbl->GetNestLevel(This,value); } static FORCEINLINE HRESULT ITextRow_GetRTL(ITextRow* This,LONG *value) { return This->lpVtbl->GetRTL(This,value); } static FORCEINLINE HRESULT ITextRow_SetRTL(ITextRow* This,LONG value) { return This->lpVtbl->SetRTL(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellAlignment(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellAlignment(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellAlignment(ITextRow* This,LONG value) { return This->lpVtbl->SetCellAlignment(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellColorBack(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellColorBack(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellColorBack(ITextRow* This,LONG value) { return This->lpVtbl->SetCellColorBack(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellColorFore(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellColorFore(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellColorFore(ITextRow* This,LONG value) { return This->lpVtbl->SetCellColorFore(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellMergeFlags(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellMergeFlags(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellMergeFlags(ITextRow* This,LONG value) { return This->lpVtbl->SetCellMergeFlags(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellShading(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellShading(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellShading(ITextRow* This,LONG value) { return This->lpVtbl->SetCellShading(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellVerticalText(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellVerticalText(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellVerticalText(ITextRow* This,LONG value) { return This->lpVtbl->SetCellVerticalText(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellWidth(ITextRow* This,LONG *value) { return This->lpVtbl->GetCellWidth(This,value); } static FORCEINLINE HRESULT ITextRow_SetCellWidth(ITextRow* This,LONG value) { return This->lpVtbl->SetCellWidth(This,value); } static FORCEINLINE HRESULT ITextRow_GetCellBorderColors(ITextRow* This,LONG *left,LONG *top,LONG *right,LONG *bottom) { return This->lpVtbl->GetCellBorderColors(This,left,top,right,bottom); } static FORCEINLINE HRESULT ITextRow_GetCellBorderWidths(ITextRow* This,LONG *left,LONG *top,LONG *right,LONG *bottom) { return This->lpVtbl->GetCellBorderWidths(This,left,top,right,bottom); } static FORCEINLINE HRESULT ITextRow_SetCellBorderColors(ITextRow* This,LONG left,LONG top,LONG right,LONG bottom) { return This->lpVtbl->SetCellBorderColors(This,left,top,right,bottom); } static FORCEINLINE HRESULT ITextRow_SetCellBorderWidths(ITextRow* This,LONG left,LONG top,LONG right,LONG bottom) { return This->lpVtbl->SetCellBorderWidths(This,left,top,right,bottom); } static FORCEINLINE HRESULT ITextRow_Apply(ITextRow* This,LONG row,LONG flags) { return This->lpVtbl->Apply(This,row,flags); } static FORCEINLINE HRESULT ITextRow_CanChange(ITextRow* This,LONG *value) { return This->lpVtbl->CanChange(This,value); } static FORCEINLINE HRESULT ITextRow_GetProperty(ITextRow* This,LONG type,LONG *value) { return This->lpVtbl->GetProperty(This,type,value); } static FORCEINLINE HRESULT ITextRow_Insert(ITextRow* This,LONG row) { return This->lpVtbl->Insert(This,row); } static FORCEINLINE HRESULT ITextRow_IsEqual(ITextRow* This,ITextRow *row,LONG *r) { return This->lpVtbl->IsEqual(This,row,r); } static FORCEINLINE HRESULT ITextRow_Reset(ITextRow* This,LONG value) { return This->lpVtbl->Reset(This,value); } static FORCEINLINE HRESULT ITextRow_SetProperty(ITextRow* This,LONG type,LONG value) { return This->lpVtbl->SetProperty(This,type,value); } #endif #endif #endif #endif /* __ITextRow_INTERFACE_DEFINED__ */ /***************************************************************************** * ITextRange2 interface */ #ifndef __ITextRange2_INTERFACE_DEFINED__ #define __ITextRange2_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextRange2, 0xc241f5e2, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("c241f5e2-7206-11d8-a2c7-00a0d1d6c6b3") ITextRange2 : public ITextSelection { virtual HRESULT STDMETHODCALLTYPE GetCch( LONG *count) = 0; virtual HRESULT STDMETHODCALLTYPE GetCells( IUnknown **cells) = 0; virtual HRESULT STDMETHODCALLTYPE GetColumn( IUnknown **column) = 0; virtual HRESULT STDMETHODCALLTYPE GetCount( LONG *count) = 0; virtual HRESULT STDMETHODCALLTYPE GetDuplicate2( ITextRange2 **range) = 0; virtual HRESULT STDMETHODCALLTYPE GetFont2( ITextFont2 **font) = 0; virtual HRESULT STDMETHODCALLTYPE SetFont2( ITextFont2 *font) = 0; virtual HRESULT STDMETHODCALLTYPE GetFormattedText2( ITextRange2 **range) = 0; virtual HRESULT STDMETHODCALLTYPE SetFormattedText2( ITextRange2 *range) = 0; virtual HRESULT STDMETHODCALLTYPE GetGravity( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetGravity( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetPara2( ITextPara2 **para) = 0; virtual HRESULT STDMETHODCALLTYPE SetPara2( ITextPara2 *para) = 0; virtual HRESULT STDMETHODCALLTYPE GetRow( ITextRow **row) = 0; virtual HRESULT STDMETHODCALLTYPE GetStartPara( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE GetTable( IUnknown **table) = 0; virtual HRESULT STDMETHODCALLTYPE GetURL( BSTR *url) = 0; virtual HRESULT STDMETHODCALLTYPE SetURL( BSTR url) = 0; virtual HRESULT STDMETHODCALLTYPE AddSubrange( LONG cp1, LONG cp2, LONG activate) = 0; virtual HRESULT STDMETHODCALLTYPE BuildUpMath( LONG flags) = 0; virtual HRESULT STDMETHODCALLTYPE DeleteSubrange( LONG first, LONG lim) = 0; virtual HRESULT STDMETHODCALLTYPE Find( ITextRange2 *range, LONG count, LONG flags, LONG *delta) = 0; virtual HRESULT STDMETHODCALLTYPE GetChar2( LONG *ch, LONG offset) = 0; virtual HRESULT STDMETHODCALLTYPE GetDropCap( LONG *line, LONG *pos) = 0; virtual HRESULT STDMETHODCALLTYPE GetInlineObject( LONG *type, LONG *align, LONG *ch, LONG *ch1, LONG *ch2, LONG *count, LONG *texstyle, LONG *ccol, LONG *level) = 0; virtual HRESULT STDMETHODCALLTYPE GetProperty( LONG type, LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE GetRect( LONG type, LONG *left, LONG *top, LONG *right, LONG *bottom, LONG *hit) = 0; virtual HRESULT STDMETHODCALLTYPE GetSubrange( LONG subrange, LONG *first, LONG *limit) = 0; virtual HRESULT STDMETHODCALLTYPE GetText2( LONG flags, BSTR *str) = 0; virtual HRESULT STDMETHODCALLTYPE HexToUnicode( ) = 0; virtual HRESULT STDMETHODCALLTYPE InsertTable( LONG col, LONG row, LONG autofit) = 0; virtual HRESULT STDMETHODCALLTYPE Linearize( LONG flags) = 0; virtual HRESULT STDMETHODCALLTYPE SetActiveSubrange( LONG anchor, LONG active) = 0; virtual HRESULT STDMETHODCALLTYPE SetDropCap( LONG line, LONG pos) = 0; virtual HRESULT STDMETHODCALLTYPE SetProperty( LONG type, LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE SetText2( LONG flags, BSTR str) = 0; virtual HRESULT STDMETHODCALLTYPE UnicodeToHex( ) = 0; virtual HRESULT STDMETHODCALLTYPE SetInlineObject( LONG type, LONG align, LONG ch, LONG ch1, LONG ch2, LONG count, LONG texstyle, LONG ccol) = 0; virtual HRESULT STDMETHODCALLTYPE GetMathFunctionType( BSTR str, LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE InsertImage( LONG width, LONG height, LONG ascent, LONG type, BSTR alttext, IStream *stream) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextRange2, 0xc241f5e2, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3) #endif #else typedef struct ITextRange2Vtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextRange2 *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextRange2 *This); ULONG (STDMETHODCALLTYPE *Release)( ITextRange2 *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextRange2 *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextRange2 *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextRange2 *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextRange2 *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextRange methods ***/ HRESULT (STDMETHODCALLTYPE *GetText)( ITextRange2 *This, BSTR *pbstr); HRESULT (STDMETHODCALLTYPE *SetText)( ITextRange2 *This, BSTR bstr); HRESULT (STDMETHODCALLTYPE *GetChar)( ITextRange2 *This, LONG *pch); HRESULT (STDMETHODCALLTYPE *SetChar)( ITextRange2 *This, LONG ch); HRESULT (STDMETHODCALLTYPE *GetDuplicate)( ITextRange2 *This, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *GetFormattedText)( ITextRange2 *This, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *SetFormattedText)( ITextRange2 *This, ITextRange *pRange); HRESULT (STDMETHODCALLTYPE *GetStart)( ITextRange2 *This, LONG *pcpFirst); HRESULT (STDMETHODCALLTYPE *SetStart)( ITextRange2 *This, LONG cpFirst); HRESULT (STDMETHODCALLTYPE *GetEnd)( ITextRange2 *This, LONG *pcpLim); HRESULT (STDMETHODCALLTYPE *SetEnd)( ITextRange2 *This, LONG cpLim); HRESULT (STDMETHODCALLTYPE *GetFont)( ITextRange2 *This, ITextFont **pFont); HRESULT (STDMETHODCALLTYPE *SetFont)( ITextRange2 *This, ITextFont *pFont); HRESULT (STDMETHODCALLTYPE *GetPara)( ITextRange2 *This, ITextPara **ppPara); HRESULT (STDMETHODCALLTYPE *SetPara)( ITextRange2 *This, ITextPara *pPara); HRESULT (STDMETHODCALLTYPE *GetStoryLength)( ITextRange2 *This, LONG *pcch); HRESULT (STDMETHODCALLTYPE *GetStoryType)( ITextRange2 *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *Collapse)( ITextRange2 *This, LONG bStart); HRESULT (STDMETHODCALLTYPE *Expand)( ITextRange2 *This, LONG Unit, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *GetIndex)( ITextRange2 *This, LONG Unit, LONG *pIndex); HRESULT (STDMETHODCALLTYPE *SetIndex)( ITextRange2 *This, LONG Unit, LONG Index, LONG Extend); HRESULT (STDMETHODCALLTYPE *SetRange)( ITextRange2 *This, LONG anchor, LONG active); HRESULT (STDMETHODCALLTYPE *InRange)( ITextRange2 *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *InStory)( ITextRange2 *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *IsEqual)( ITextRange2 *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *Select)( ITextRange2 *This); HRESULT (STDMETHODCALLTYPE *StartOf)( ITextRange2 *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *EndOf)( ITextRange2 *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *Move)( ITextRange2 *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStart)( ITextRange2 *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEnd)( ITextRange2 *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveWhile)( ITextRange2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStartWhile)( ITextRange2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEndWhile)( ITextRange2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveUntil)( ITextRange2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStartUntil)( ITextRange2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEndUntil)( ITextRange2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *FindText)( ITextRange2 *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *FindTextStart)( ITextRange2 *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *FindTextEnd)( ITextRange2 *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *Delete)( ITextRange2 *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *Cut)( ITextRange2 *This, VARIANT *pVar); HRESULT (STDMETHODCALLTYPE *Copy)( ITextRange2 *This, VARIANT *pVar); HRESULT (STDMETHODCALLTYPE *Paste)( ITextRange2 *This, VARIANT *pVar, LONG Format); HRESULT (STDMETHODCALLTYPE *CanPaste)( ITextRange2 *This, VARIANT *pVar, LONG Format, LONG *pb); HRESULT (STDMETHODCALLTYPE *CanEdit)( ITextRange2 *This, LONG *pb); HRESULT (STDMETHODCALLTYPE *ChangeCase)( ITextRange2 *This, LONG Type); HRESULT (STDMETHODCALLTYPE *GetPoint)( ITextRange2 *This, LONG Type, LONG *cx, LONG *cy); HRESULT (STDMETHODCALLTYPE *SetPoint)( ITextRange2 *This, LONG x, LONG y, LONG Type, LONG Extend); HRESULT (STDMETHODCALLTYPE *ScrollIntoView)( ITextRange2 *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetEmbeddedObject)( ITextRange2 *This, IUnknown **ppv); /*** ITextSelection methods ***/ HRESULT (STDMETHODCALLTYPE *GetFlags)( ITextRange2 *This, LONG *pFlags); HRESULT (STDMETHODCALLTYPE *SetFlags)( ITextRange2 *This, LONG Flags); HRESULT (STDMETHODCALLTYPE *GetType)( ITextRange2 *This, LONG *pType); HRESULT (STDMETHODCALLTYPE *MoveLeft)( ITextRange2 *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveRight)( ITextRange2 *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveUp)( ITextRange2 *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveDown)( ITextRange2 *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *HomeKey)( ITextRange2 *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *EndKey)( ITextRange2 *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *TypeText)( ITextRange2 *This, BSTR bstr); /*** ITextRange2 methods ***/ HRESULT (STDMETHODCALLTYPE *GetCch)( ITextRange2 *This, LONG *count); HRESULT (STDMETHODCALLTYPE *GetCells)( ITextRange2 *This, IUnknown **cells); HRESULT (STDMETHODCALLTYPE *GetColumn)( ITextRange2 *This, IUnknown **column); HRESULT (STDMETHODCALLTYPE *GetCount)( ITextRange2 *This, LONG *count); HRESULT (STDMETHODCALLTYPE *GetDuplicate2)( ITextRange2 *This, ITextRange2 **range); HRESULT (STDMETHODCALLTYPE *GetFont2)( ITextRange2 *This, ITextFont2 **font); HRESULT (STDMETHODCALLTYPE *SetFont2)( ITextRange2 *This, ITextFont2 *font); HRESULT (STDMETHODCALLTYPE *GetFormattedText2)( ITextRange2 *This, ITextRange2 **range); HRESULT (STDMETHODCALLTYPE *SetFormattedText2)( ITextRange2 *This, ITextRange2 *range); HRESULT (STDMETHODCALLTYPE *GetGravity)( ITextRange2 *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetGravity)( ITextRange2 *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetPara2)( ITextRange2 *This, ITextPara2 **para); HRESULT (STDMETHODCALLTYPE *SetPara2)( ITextRange2 *This, ITextPara2 *para); HRESULT (STDMETHODCALLTYPE *GetRow)( ITextRange2 *This, ITextRow **row); HRESULT (STDMETHODCALLTYPE *GetStartPara)( ITextRange2 *This, LONG *value); HRESULT (STDMETHODCALLTYPE *GetTable)( ITextRange2 *This, IUnknown **table); HRESULT (STDMETHODCALLTYPE *GetURL)( ITextRange2 *This, BSTR *url); HRESULT (STDMETHODCALLTYPE *SetURL)( ITextRange2 *This, BSTR url); HRESULT (STDMETHODCALLTYPE *AddSubrange)( ITextRange2 *This, LONG cp1, LONG cp2, LONG activate); HRESULT (STDMETHODCALLTYPE *BuildUpMath)( ITextRange2 *This, LONG flags); HRESULT (STDMETHODCALLTYPE *DeleteSubrange)( ITextRange2 *This, LONG first, LONG lim); HRESULT (STDMETHODCALLTYPE *Find)( ITextRange2 *This, ITextRange2 *range, LONG count, LONG flags, LONG *delta); HRESULT (STDMETHODCALLTYPE *GetChar2)( ITextRange2 *This, LONG *ch, LONG offset); HRESULT (STDMETHODCALLTYPE *GetDropCap)( ITextRange2 *This, LONG *line, LONG *pos); HRESULT (STDMETHODCALLTYPE *GetInlineObject)( ITextRange2 *This, LONG *type, LONG *align, LONG *ch, LONG *ch1, LONG *ch2, LONG *count, LONG *texstyle, LONG *ccol, LONG *level); HRESULT (STDMETHODCALLTYPE *GetProperty)( ITextRange2 *This, LONG type, LONG *value); HRESULT (STDMETHODCALLTYPE *GetRect)( ITextRange2 *This, LONG type, LONG *left, LONG *top, LONG *right, LONG *bottom, LONG *hit); HRESULT (STDMETHODCALLTYPE *GetSubrange)( ITextRange2 *This, LONG subrange, LONG *first, LONG *limit); HRESULT (STDMETHODCALLTYPE *GetText2)( ITextRange2 *This, LONG flags, BSTR *str); HRESULT (STDMETHODCALLTYPE *HexToUnicode)( ITextRange2 *This); HRESULT (STDMETHODCALLTYPE *InsertTable)( ITextRange2 *This, LONG col, LONG row, LONG autofit); HRESULT (STDMETHODCALLTYPE *Linearize)( ITextRange2 *This, LONG flags); HRESULT (STDMETHODCALLTYPE *SetActiveSubrange)( ITextRange2 *This, LONG anchor, LONG active); HRESULT (STDMETHODCALLTYPE *SetDropCap)( ITextRange2 *This, LONG line, LONG pos); HRESULT (STDMETHODCALLTYPE *SetProperty)( ITextRange2 *This, LONG type, LONG value); HRESULT (STDMETHODCALLTYPE *SetText2)( ITextRange2 *This, LONG flags, BSTR str); HRESULT (STDMETHODCALLTYPE *UnicodeToHex)( ITextRange2 *This); HRESULT (STDMETHODCALLTYPE *SetInlineObject)( ITextRange2 *This, LONG type, LONG align, LONG ch, LONG ch1, LONG ch2, LONG count, LONG texstyle, LONG ccol); HRESULT (STDMETHODCALLTYPE *GetMathFunctionType)( ITextRange2 *This, BSTR str, LONG *value); HRESULT (STDMETHODCALLTYPE *InsertImage)( ITextRange2 *This, LONG width, LONG height, LONG ascent, LONG type, BSTR alttext, IStream *stream); END_INTERFACE } ITextRange2Vtbl; interface ITextRange2 { CONST_VTBL ITextRange2Vtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextRange2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextRange2_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextRange2_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextRange2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextRange2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextRange2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextRange2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextRange methods ***/ #define ITextRange2_GetText(This,pbstr) (This)->lpVtbl->GetText(This,pbstr) #define ITextRange2_SetText(This,bstr) (This)->lpVtbl->SetText(This,bstr) #define ITextRange2_GetChar(This,pch) (This)->lpVtbl->GetChar(This,pch) #define ITextRange2_SetChar(This,ch) (This)->lpVtbl->SetChar(This,ch) #define ITextRange2_GetDuplicate(This,ppRange) (This)->lpVtbl->GetDuplicate(This,ppRange) #define ITextRange2_GetFormattedText(This,ppRange) (This)->lpVtbl->GetFormattedText(This,ppRange) #define ITextRange2_SetFormattedText(This,pRange) (This)->lpVtbl->SetFormattedText(This,pRange) #define ITextRange2_GetStart(This,pcpFirst) (This)->lpVtbl->GetStart(This,pcpFirst) #define ITextRange2_SetStart(This,cpFirst) (This)->lpVtbl->SetStart(This,cpFirst) #define ITextRange2_GetEnd(This,pcpLim) (This)->lpVtbl->GetEnd(This,pcpLim) #define ITextRange2_SetEnd(This,cpLim) (This)->lpVtbl->SetEnd(This,cpLim) #define ITextRange2_GetFont(This,pFont) (This)->lpVtbl->GetFont(This,pFont) #define ITextRange2_SetFont(This,pFont) (This)->lpVtbl->SetFont(This,pFont) #define ITextRange2_GetPara(This,ppPara) (This)->lpVtbl->GetPara(This,ppPara) #define ITextRange2_SetPara(This,pPara) (This)->lpVtbl->SetPara(This,pPara) #define ITextRange2_GetStoryLength(This,pcch) (This)->lpVtbl->GetStoryLength(This,pcch) #define ITextRange2_GetStoryType(This,pValue) (This)->lpVtbl->GetStoryType(This,pValue) #define ITextRange2_Collapse(This,bStart) (This)->lpVtbl->Collapse(This,bStart) #define ITextRange2_Expand(This,Unit,pDelta) (This)->lpVtbl->Expand(This,Unit,pDelta) #define ITextRange2_GetIndex(This,Unit,pIndex) (This)->lpVtbl->GetIndex(This,Unit,pIndex) #define ITextRange2_SetIndex(This,Unit,Index,Extend) (This)->lpVtbl->SetIndex(This,Unit,Index,Extend) #define ITextRange2_SetRange(This,anchor,active) (This)->lpVtbl->SetRange(This,anchor,active) #define ITextRange2_InRange(This,pRange,pb) (This)->lpVtbl->InRange(This,pRange,pb) #define ITextRange2_InStory(This,pRange,pb) (This)->lpVtbl->InStory(This,pRange,pb) #define ITextRange2_IsEqual(This,pRange,pb) (This)->lpVtbl->IsEqual(This,pRange,pb) #define ITextRange2_Select(This) (This)->lpVtbl->Select(This) #define ITextRange2_StartOf(This,Unit,Extend,pDelta) (This)->lpVtbl->StartOf(This,Unit,Extend,pDelta) #define ITextRange2_EndOf(This,Unit,Extend,pDelta) (This)->lpVtbl->EndOf(This,Unit,Extend,pDelta) #define ITextRange2_Move(This,Unit,Count,pDelta) (This)->lpVtbl->Move(This,Unit,Count,pDelta) #define ITextRange2_MoveStart(This,Unit,Count,pDelta) (This)->lpVtbl->MoveStart(This,Unit,Count,pDelta) #define ITextRange2_MoveEnd(This,Unit,Count,pDelta) (This)->lpVtbl->MoveEnd(This,Unit,Count,pDelta) #define ITextRange2_MoveWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveWhile(This,Cset,Count,pDelta) #define ITextRange2_MoveStartWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta) #define ITextRange2_MoveEndWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta) #define ITextRange2_MoveUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveUntil(This,Cset,Count,pDelta) #define ITextRange2_MoveStartUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta) #define ITextRange2_MoveEndUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta) #define ITextRange2_FindText(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindText(This,bstr,cch,Flags,pLength) #define ITextRange2_FindTextStart(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength) #define ITextRange2_FindTextEnd(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength) #define ITextRange2_Delete(This,Unit,Count,pDelta) (This)->lpVtbl->Delete(This,Unit,Count,pDelta) #define ITextRange2_Cut(This,pVar) (This)->lpVtbl->Cut(This,pVar) #define ITextRange2_Copy(This,pVar) (This)->lpVtbl->Copy(This,pVar) #define ITextRange2_Paste(This,pVar,Format) (This)->lpVtbl->Paste(This,pVar,Format) #define ITextRange2_CanPaste(This,pVar,Format,pb) (This)->lpVtbl->CanPaste(This,pVar,Format,pb) #define ITextRange2_CanEdit(This,pb) (This)->lpVtbl->CanEdit(This,pb) #define ITextRange2_ChangeCase(This,Type) (This)->lpVtbl->ChangeCase(This,Type) #define ITextRange2_GetPoint(This,Type,cx,cy) (This)->lpVtbl->GetPoint(This,Type,cx,cy) #define ITextRange2_SetPoint(This,x,y,Type,Extend) (This)->lpVtbl->SetPoint(This,x,y,Type,Extend) #define ITextRange2_ScrollIntoView(This,Value) (This)->lpVtbl->ScrollIntoView(This,Value) #define ITextRange2_GetEmbeddedObject(This,ppv) (This)->lpVtbl->GetEmbeddedObject(This,ppv) /*** ITextSelection methods ***/ #define ITextRange2_GetFlags(This,pFlags) (This)->lpVtbl->GetFlags(This,pFlags) #define ITextRange2_SetFlags(This,Flags) (This)->lpVtbl->SetFlags(This,Flags) #define ITextRange2_GetType(This,pType) (This)->lpVtbl->GetType(This,pType) #define ITextRange2_MoveLeft(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta) #define ITextRange2_MoveRight(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta) #define ITextRange2_MoveUp(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta) #define ITextRange2_MoveDown(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta) #define ITextRange2_HomeKey(This,Unit,Extend,pDelta) (This)->lpVtbl->HomeKey(This,Unit,Extend,pDelta) #define ITextRange2_EndKey(This,Unit,Extend,pDelta) (This)->lpVtbl->EndKey(This,Unit,Extend,pDelta) #define ITextRange2_TypeText(This,bstr) (This)->lpVtbl->TypeText(This,bstr) /*** ITextRange2 methods ***/ #define ITextRange2_GetCch(This,count) (This)->lpVtbl->GetCch(This,count) #define ITextRange2_GetCells(This,cells) (This)->lpVtbl->GetCells(This,cells) #define ITextRange2_GetColumn(This,column) (This)->lpVtbl->GetColumn(This,column) #define ITextRange2_GetCount(This,count) (This)->lpVtbl->GetCount(This,count) #define ITextRange2_GetDuplicate2(This,range) (This)->lpVtbl->GetDuplicate2(This,range) #define ITextRange2_GetFont2(This,font) (This)->lpVtbl->GetFont2(This,font) #define ITextRange2_SetFont2(This,font) (This)->lpVtbl->SetFont2(This,font) #define ITextRange2_GetFormattedText2(This,range) (This)->lpVtbl->GetFormattedText2(This,range) #define ITextRange2_SetFormattedText2(This,range) (This)->lpVtbl->SetFormattedText2(This,range) #define ITextRange2_GetGravity(This,value) (This)->lpVtbl->GetGravity(This,value) #define ITextRange2_SetGravity(This,value) (This)->lpVtbl->SetGravity(This,value) #define ITextRange2_GetPara2(This,para) (This)->lpVtbl->GetPara2(This,para) #define ITextRange2_SetPara2(This,para) (This)->lpVtbl->SetPara2(This,para) #define ITextRange2_GetRow(This,row) (This)->lpVtbl->GetRow(This,row) #define ITextRange2_GetStartPara(This,value) (This)->lpVtbl->GetStartPara(This,value) #define ITextRange2_GetTable(This,table) (This)->lpVtbl->GetTable(This,table) #define ITextRange2_GetURL(This,url) (This)->lpVtbl->GetURL(This,url) #define ITextRange2_SetURL(This,url) (This)->lpVtbl->SetURL(This,url) #define ITextRange2_AddSubrange(This,cp1,cp2,activate) (This)->lpVtbl->AddSubrange(This,cp1,cp2,activate) #define ITextRange2_BuildUpMath(This,flags) (This)->lpVtbl->BuildUpMath(This,flags) #define ITextRange2_DeleteSubrange(This,first,lim) (This)->lpVtbl->DeleteSubrange(This,first,lim) #define ITextRange2_Find(This,range,count,flags,delta) (This)->lpVtbl->Find(This,range,count,flags,delta) #define ITextRange2_GetChar2(This,ch,offset) (This)->lpVtbl->GetChar2(This,ch,offset) #define ITextRange2_GetDropCap(This,line,pos) (This)->lpVtbl->GetDropCap(This,line,pos) #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) #define ITextRange2_GetProperty(This,type,value) (This)->lpVtbl->GetProperty(This,type,value) #define ITextRange2_GetRect(This,type,left,top,right,bottom,hit) (This)->lpVtbl->GetRect(This,type,left,top,right,bottom,hit) #define ITextRange2_GetSubrange(This,subrange,first,limit) (This)->lpVtbl->GetSubrange(This,subrange,first,limit) #define ITextRange2_GetText2(This,flags,str) (This)->lpVtbl->GetText2(This,flags,str) #define ITextRange2_HexToUnicode(This) (This)->lpVtbl->HexToUnicode(This) #define ITextRange2_InsertTable(This,col,row,autofit) (This)->lpVtbl->InsertTable(This,col,row,autofit) #define ITextRange2_Linearize(This,flags) (This)->lpVtbl->Linearize(This,flags) #define ITextRange2_SetActiveSubrange(This,anchor,active) (This)->lpVtbl->SetActiveSubrange(This,anchor,active) #define ITextRange2_SetDropCap(This,line,pos) (This)->lpVtbl->SetDropCap(This,line,pos) #define ITextRange2_SetProperty(This,type,value) (This)->lpVtbl->SetProperty(This,type,value) #define ITextRange2_SetText2(This,flags,str) (This)->lpVtbl->SetText2(This,flags,str) #define ITextRange2_UnicodeToHex(This) (This)->lpVtbl->UnicodeToHex(This) #define ITextRange2_SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol) (This)->lpVtbl->SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol) #define ITextRange2_GetMathFunctionType(This,str,value) (This)->lpVtbl->GetMathFunctionType(This,str,value) #define ITextRange2_InsertImage(This,width,height,ascent,type,alttext,stream) (This)->lpVtbl->InsertImage(This,width,height,ascent,type,alttext,stream) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextRange2_QueryInterface(ITextRange2* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextRange2_AddRef(ITextRange2* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextRange2_Release(ITextRange2* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextRange2_GetTypeInfoCount(ITextRange2* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextRange2_GetTypeInfo(ITextRange2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextRange2_GetIDsOfNames(ITextRange2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextRange2_Invoke(ITextRange2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextRange methods ***/ static FORCEINLINE HRESULT ITextRange2_GetText(ITextRange2* This,BSTR *pbstr) { return This->lpVtbl->GetText(This,pbstr); } static FORCEINLINE HRESULT ITextRange2_SetText(ITextRange2* This,BSTR bstr) { return This->lpVtbl->SetText(This,bstr); } static FORCEINLINE HRESULT ITextRange2_GetChar(ITextRange2* This,LONG *pch) { return This->lpVtbl->GetChar(This,pch); } static FORCEINLINE HRESULT ITextRange2_SetChar(ITextRange2* This,LONG ch) { return This->lpVtbl->SetChar(This,ch); } static FORCEINLINE HRESULT ITextRange2_GetDuplicate(ITextRange2* This,ITextRange **ppRange) { return This->lpVtbl->GetDuplicate(This,ppRange); } static FORCEINLINE HRESULT ITextRange2_GetFormattedText(ITextRange2* This,ITextRange **ppRange) { return This->lpVtbl->GetFormattedText(This,ppRange); } static FORCEINLINE HRESULT ITextRange2_SetFormattedText(ITextRange2* This,ITextRange *pRange) { return This->lpVtbl->SetFormattedText(This,pRange); } static FORCEINLINE HRESULT ITextRange2_GetStart(ITextRange2* This,LONG *pcpFirst) { return This->lpVtbl->GetStart(This,pcpFirst); } static FORCEINLINE HRESULT ITextRange2_SetStart(ITextRange2* This,LONG cpFirst) { return This->lpVtbl->SetStart(This,cpFirst); } static FORCEINLINE HRESULT ITextRange2_GetEnd(ITextRange2* This,LONG *pcpLim) { return This->lpVtbl->GetEnd(This,pcpLim); } static FORCEINLINE HRESULT ITextRange2_SetEnd(ITextRange2* This,LONG cpLim) { return This->lpVtbl->SetEnd(This,cpLim); } static FORCEINLINE HRESULT ITextRange2_GetFont(ITextRange2* This,ITextFont **pFont) { return This->lpVtbl->GetFont(This,pFont); } static FORCEINLINE HRESULT ITextRange2_SetFont(ITextRange2* This,ITextFont *pFont) { return This->lpVtbl->SetFont(This,pFont); } static FORCEINLINE HRESULT ITextRange2_GetPara(ITextRange2* This,ITextPara **ppPara) { return This->lpVtbl->GetPara(This,ppPara); } static FORCEINLINE HRESULT ITextRange2_SetPara(ITextRange2* This,ITextPara *pPara) { return This->lpVtbl->SetPara(This,pPara); } static FORCEINLINE HRESULT ITextRange2_GetStoryLength(ITextRange2* This,LONG *pcch) { return This->lpVtbl->GetStoryLength(This,pcch); } static FORCEINLINE HRESULT ITextRange2_GetStoryType(ITextRange2* This,LONG *pValue) { return This->lpVtbl->GetStoryType(This,pValue); } static FORCEINLINE HRESULT ITextRange2_Collapse(ITextRange2* This,LONG bStart) { return This->lpVtbl->Collapse(This,bStart); } static FORCEINLINE HRESULT ITextRange2_Expand(ITextRange2* This,LONG Unit,LONG *pDelta) { return This->lpVtbl->Expand(This,Unit,pDelta); } static FORCEINLINE HRESULT ITextRange2_GetIndex(ITextRange2* This,LONG Unit,LONG *pIndex) { return This->lpVtbl->GetIndex(This,Unit,pIndex); } static FORCEINLINE HRESULT ITextRange2_SetIndex(ITextRange2* This,LONG Unit,LONG Index,LONG Extend) { return This->lpVtbl->SetIndex(This,Unit,Index,Extend); } static FORCEINLINE HRESULT ITextRange2_SetRange(ITextRange2* This,LONG anchor,LONG active) { return This->lpVtbl->SetRange(This,anchor,active); } static FORCEINLINE HRESULT ITextRange2_InRange(ITextRange2* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->InRange(This,pRange,pb); } static FORCEINLINE HRESULT ITextRange2_InStory(ITextRange2* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->InStory(This,pRange,pb); } static FORCEINLINE HRESULT ITextRange2_IsEqual(ITextRange2* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->IsEqual(This,pRange,pb); } static FORCEINLINE HRESULT ITextRange2_Select(ITextRange2* This) { return This->lpVtbl->Select(This); } static FORCEINLINE HRESULT ITextRange2_StartOf(ITextRange2* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->StartOf(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange2_EndOf(ITextRange2* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->EndOf(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange2_Move(ITextRange2* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->Move(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveStart(ITextRange2* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStart(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveEnd(ITextRange2* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEnd(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveWhile(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveStartWhile(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveEndWhile(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveUntil(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveStartUntil(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveEndUntil(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_FindText(ITextRange2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindText(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextRange2_FindTextStart(ITextRange2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextRange2_FindTextEnd(ITextRange2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextRange2_Delete(ITextRange2* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->Delete(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextRange2_Cut(ITextRange2* This,VARIANT *pVar) { return This->lpVtbl->Cut(This,pVar); } static FORCEINLINE HRESULT ITextRange2_Copy(ITextRange2* This,VARIANT *pVar) { return This->lpVtbl->Copy(This,pVar); } static FORCEINLINE HRESULT ITextRange2_Paste(ITextRange2* This,VARIANT *pVar,LONG Format) { return This->lpVtbl->Paste(This,pVar,Format); } static FORCEINLINE HRESULT ITextRange2_CanPaste(ITextRange2* This,VARIANT *pVar,LONG Format,LONG *pb) { return This->lpVtbl->CanPaste(This,pVar,Format,pb); } static FORCEINLINE HRESULT ITextRange2_CanEdit(ITextRange2* This,LONG *pb) { return This->lpVtbl->CanEdit(This,pb); } static FORCEINLINE HRESULT ITextRange2_ChangeCase(ITextRange2* This,LONG Type) { return This->lpVtbl->ChangeCase(This,Type); } static FORCEINLINE HRESULT ITextRange2_GetPoint(ITextRange2* This,LONG Type,LONG *cx,LONG *cy) { return This->lpVtbl->GetPoint(This,Type,cx,cy); } static FORCEINLINE HRESULT ITextRange2_SetPoint(ITextRange2* This,LONG x,LONG y,LONG Type,LONG Extend) { return This->lpVtbl->SetPoint(This,x,y,Type,Extend); } static FORCEINLINE HRESULT ITextRange2_ScrollIntoView(ITextRange2* This,LONG Value) { return This->lpVtbl->ScrollIntoView(This,Value); } static FORCEINLINE HRESULT ITextRange2_GetEmbeddedObject(ITextRange2* This,IUnknown **ppv) { return This->lpVtbl->GetEmbeddedObject(This,ppv); } /*** ITextSelection methods ***/ static FORCEINLINE HRESULT ITextRange2_GetFlags(ITextRange2* This,LONG *pFlags) { return This->lpVtbl->GetFlags(This,pFlags); } static FORCEINLINE HRESULT ITextRange2_SetFlags(ITextRange2* This,LONG Flags) { return This->lpVtbl->SetFlags(This,Flags); } static FORCEINLINE HRESULT ITextRange2_GetType(ITextRange2* This,LONG *pType) { return This->lpVtbl->GetType(This,pType); } static FORCEINLINE HRESULT ITextRange2_MoveLeft(ITextRange2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveRight(ITextRange2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveUp(ITextRange2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange2_MoveDown(ITextRange2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange2_HomeKey(ITextRange2* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->HomeKey(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange2_EndKey(ITextRange2* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->EndKey(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange2_TypeText(ITextRange2* This,BSTR bstr) { return This->lpVtbl->TypeText(This,bstr); } /*** ITextRange2 methods ***/ static FORCEINLINE HRESULT ITextRange2_GetCch(ITextRange2* This,LONG *count) { return This->lpVtbl->GetCch(This,count); } static FORCEINLINE HRESULT ITextRange2_GetCells(ITextRange2* This,IUnknown **cells) { return This->lpVtbl->GetCells(This,cells); } static FORCEINLINE HRESULT ITextRange2_GetColumn(ITextRange2* This,IUnknown **column) { return This->lpVtbl->GetColumn(This,column); } static FORCEINLINE HRESULT ITextRange2_GetCount(ITextRange2* This,LONG *count) { return This->lpVtbl->GetCount(This,count); } static FORCEINLINE HRESULT ITextRange2_GetDuplicate2(ITextRange2* This,ITextRange2 **range) { return This->lpVtbl->GetDuplicate2(This,range); } static FORCEINLINE HRESULT ITextRange2_GetFont2(ITextRange2* This,ITextFont2 **font) { return This->lpVtbl->GetFont2(This,font); } static FORCEINLINE HRESULT ITextRange2_SetFont2(ITextRange2* This,ITextFont2 *font) { return This->lpVtbl->SetFont2(This,font); } static FORCEINLINE HRESULT ITextRange2_GetFormattedText2(ITextRange2* This,ITextRange2 **range) { return This->lpVtbl->GetFormattedText2(This,range); } static FORCEINLINE HRESULT ITextRange2_SetFormattedText2(ITextRange2* This,ITextRange2 *range) { return This->lpVtbl->SetFormattedText2(This,range); } static FORCEINLINE HRESULT ITextRange2_GetGravity(ITextRange2* This,LONG *value) { return This->lpVtbl->GetGravity(This,value); } static FORCEINLINE HRESULT ITextRange2_SetGravity(ITextRange2* This,LONG value) { return This->lpVtbl->SetGravity(This,value); } static FORCEINLINE HRESULT ITextRange2_GetPara2(ITextRange2* This,ITextPara2 **para) { return This->lpVtbl->GetPara2(This,para); } static FORCEINLINE HRESULT ITextRange2_SetPara2(ITextRange2* This,ITextPara2 *para) { return This->lpVtbl->SetPara2(This,para); } static FORCEINLINE HRESULT ITextRange2_GetRow(ITextRange2* This,ITextRow **row) { return This->lpVtbl->GetRow(This,row); } static FORCEINLINE HRESULT ITextRange2_GetStartPara(ITextRange2* This,LONG *value) { return This->lpVtbl->GetStartPara(This,value); } static FORCEINLINE HRESULT ITextRange2_GetTable(ITextRange2* This,IUnknown **table) { return This->lpVtbl->GetTable(This,table); } static FORCEINLINE HRESULT ITextRange2_GetURL(ITextRange2* This,BSTR *url) { return This->lpVtbl->GetURL(This,url); } static FORCEINLINE HRESULT ITextRange2_SetURL(ITextRange2* This,BSTR url) { return This->lpVtbl->SetURL(This,url); } static FORCEINLINE HRESULT ITextRange2_AddSubrange(ITextRange2* This,LONG cp1,LONG cp2,LONG activate) { return This->lpVtbl->AddSubrange(This,cp1,cp2,activate); } static FORCEINLINE HRESULT ITextRange2_BuildUpMath(ITextRange2* This,LONG flags) { return This->lpVtbl->BuildUpMath(This,flags); } static FORCEINLINE HRESULT ITextRange2_DeleteSubrange(ITextRange2* This,LONG first,LONG lim) { return This->lpVtbl->DeleteSubrange(This,first,lim); } static FORCEINLINE HRESULT ITextRange2_Find(ITextRange2* This,ITextRange2 *range,LONG count,LONG flags,LONG *delta) { return This->lpVtbl->Find(This,range,count,flags,delta); } static FORCEINLINE HRESULT ITextRange2_GetChar2(ITextRange2* This,LONG *ch,LONG offset) { return This->lpVtbl->GetChar2(This,ch,offset); } static FORCEINLINE HRESULT ITextRange2_GetDropCap(ITextRange2* This,LONG *line,LONG *pos) { return This->lpVtbl->GetDropCap(This,line,pos); } static FORCEINLINE HRESULT ITextRange2_GetInlineObject(ITextRange2* This,LONG *type,LONG *align,LONG *ch,LONG *ch1,LONG *ch2,LONG *count,LONG *texstyle,LONG *ccol,LONG *level) { return This->lpVtbl->GetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol,level); } static FORCEINLINE HRESULT ITextRange2_GetProperty(ITextRange2* This,LONG type,LONG *value) { return This->lpVtbl->GetProperty(This,type,value); } static FORCEINLINE HRESULT ITextRange2_GetRect(ITextRange2* This,LONG type,LONG *left,LONG *top,LONG *right,LONG *bottom,LONG *hit) { return This->lpVtbl->GetRect(This,type,left,top,right,bottom,hit); } static FORCEINLINE HRESULT ITextRange2_GetSubrange(ITextRange2* This,LONG subrange,LONG *first,LONG *limit) { return This->lpVtbl->GetSubrange(This,subrange,first,limit); } static FORCEINLINE HRESULT ITextRange2_GetText2(ITextRange2* This,LONG flags,BSTR *str) { return This->lpVtbl->GetText2(This,flags,str); } static FORCEINLINE HRESULT ITextRange2_HexToUnicode(ITextRange2* This) { return This->lpVtbl->HexToUnicode(This); } static FORCEINLINE HRESULT ITextRange2_InsertTable(ITextRange2* This,LONG col,LONG row,LONG autofit) { return This->lpVtbl->InsertTable(This,col,row,autofit); } static FORCEINLINE HRESULT ITextRange2_Linearize(ITextRange2* This,LONG flags) { return This->lpVtbl->Linearize(This,flags); } static FORCEINLINE HRESULT ITextRange2_SetActiveSubrange(ITextRange2* This,LONG anchor,LONG active) { return This->lpVtbl->SetActiveSubrange(This,anchor,active); } static FORCEINLINE HRESULT ITextRange2_SetDropCap(ITextRange2* This,LONG line,LONG pos) { return This->lpVtbl->SetDropCap(This,line,pos); } static FORCEINLINE HRESULT ITextRange2_SetProperty(ITextRange2* This,LONG type,LONG value) { return This->lpVtbl->SetProperty(This,type,value); } static FORCEINLINE HRESULT ITextRange2_SetText2(ITextRange2* This,LONG flags,BSTR str) { return This->lpVtbl->SetText2(This,flags,str); } static FORCEINLINE HRESULT ITextRange2_UnicodeToHex(ITextRange2* This) { return This->lpVtbl->UnicodeToHex(This); } static FORCEINLINE HRESULT ITextRange2_SetInlineObject(ITextRange2* This,LONG type,LONG align,LONG ch,LONG ch1,LONG ch2,LONG count,LONG texstyle,LONG ccol) { return This->lpVtbl->SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol); } static FORCEINLINE HRESULT ITextRange2_GetMathFunctionType(ITextRange2* This,BSTR str,LONG *value) { return This->lpVtbl->GetMathFunctionType(This,str,value); } static FORCEINLINE HRESULT ITextRange2_InsertImage(ITextRange2* This,LONG width,LONG height,LONG ascent,LONG type,BSTR alttext,IStream *stream) { return This->lpVtbl->InsertImage(This,width,height,ascent,type,alttext,stream); } #endif #endif #endif #endif /* __ITextRange2_INTERFACE_DEFINED__ */ /***************************************************************************** * ITextSelection2 interface */ #ifndef __ITextSelection2_INTERFACE_DEFINED__ #define __ITextSelection2_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextSelection2, 0xc241f5e1, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("c241f5e1-7206-11d8-a2c7-00a0d1d6c6b3") ITextSelection2 : public ITextRange2 { }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextSelection2, 0xc241f5e1, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3) #endif #else typedef struct ITextSelection2Vtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextSelection2 *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextSelection2 *This); ULONG (STDMETHODCALLTYPE *Release)( ITextSelection2 *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextSelection2 *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextSelection2 *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextSelection2 *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextSelection2 *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextRange methods ***/ HRESULT (STDMETHODCALLTYPE *GetText)( ITextSelection2 *This, BSTR *pbstr); HRESULT (STDMETHODCALLTYPE *SetText)( ITextSelection2 *This, BSTR bstr); HRESULT (STDMETHODCALLTYPE *GetChar)( ITextSelection2 *This, LONG *pch); HRESULT (STDMETHODCALLTYPE *SetChar)( ITextSelection2 *This, LONG ch); HRESULT (STDMETHODCALLTYPE *GetDuplicate)( ITextSelection2 *This, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *GetFormattedText)( ITextSelection2 *This, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *SetFormattedText)( ITextSelection2 *This, ITextRange *pRange); HRESULT (STDMETHODCALLTYPE *GetStart)( ITextSelection2 *This, LONG *pcpFirst); HRESULT (STDMETHODCALLTYPE *SetStart)( ITextSelection2 *This, LONG cpFirst); HRESULT (STDMETHODCALLTYPE *GetEnd)( ITextSelection2 *This, LONG *pcpLim); HRESULT (STDMETHODCALLTYPE *SetEnd)( ITextSelection2 *This, LONG cpLim); HRESULT (STDMETHODCALLTYPE *GetFont)( ITextSelection2 *This, ITextFont **pFont); HRESULT (STDMETHODCALLTYPE *SetFont)( ITextSelection2 *This, ITextFont *pFont); HRESULT (STDMETHODCALLTYPE *GetPara)( ITextSelection2 *This, ITextPara **ppPara); HRESULT (STDMETHODCALLTYPE *SetPara)( ITextSelection2 *This, ITextPara *pPara); HRESULT (STDMETHODCALLTYPE *GetStoryLength)( ITextSelection2 *This, LONG *pcch); HRESULT (STDMETHODCALLTYPE *GetStoryType)( ITextSelection2 *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *Collapse)( ITextSelection2 *This, LONG bStart); HRESULT (STDMETHODCALLTYPE *Expand)( ITextSelection2 *This, LONG Unit, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *GetIndex)( ITextSelection2 *This, LONG Unit, LONG *pIndex); HRESULT (STDMETHODCALLTYPE *SetIndex)( ITextSelection2 *This, LONG Unit, LONG Index, LONG Extend); HRESULT (STDMETHODCALLTYPE *SetRange)( ITextSelection2 *This, LONG anchor, LONG active); HRESULT (STDMETHODCALLTYPE *InRange)( ITextSelection2 *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *InStory)( ITextSelection2 *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *IsEqual)( ITextSelection2 *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *Select)( ITextSelection2 *This); HRESULT (STDMETHODCALLTYPE *StartOf)( ITextSelection2 *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *EndOf)( ITextSelection2 *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *Move)( ITextSelection2 *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStart)( ITextSelection2 *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEnd)( ITextSelection2 *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveWhile)( ITextSelection2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStartWhile)( ITextSelection2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEndWhile)( ITextSelection2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveUntil)( ITextSelection2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStartUntil)( ITextSelection2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEndUntil)( ITextSelection2 *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *FindText)( ITextSelection2 *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *FindTextStart)( ITextSelection2 *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *FindTextEnd)( ITextSelection2 *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *Delete)( ITextSelection2 *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *Cut)( ITextSelection2 *This, VARIANT *pVar); HRESULT (STDMETHODCALLTYPE *Copy)( ITextSelection2 *This, VARIANT *pVar); HRESULT (STDMETHODCALLTYPE *Paste)( ITextSelection2 *This, VARIANT *pVar, LONG Format); HRESULT (STDMETHODCALLTYPE *CanPaste)( ITextSelection2 *This, VARIANT *pVar, LONG Format, LONG *pb); HRESULT (STDMETHODCALLTYPE *CanEdit)( ITextSelection2 *This, LONG *pb); HRESULT (STDMETHODCALLTYPE *ChangeCase)( ITextSelection2 *This, LONG Type); HRESULT (STDMETHODCALLTYPE *GetPoint)( ITextSelection2 *This, LONG Type, LONG *cx, LONG *cy); HRESULT (STDMETHODCALLTYPE *SetPoint)( ITextSelection2 *This, LONG x, LONG y, LONG Type, LONG Extend); HRESULT (STDMETHODCALLTYPE *ScrollIntoView)( ITextSelection2 *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetEmbeddedObject)( ITextSelection2 *This, IUnknown **ppv); /*** ITextSelection methods ***/ HRESULT (STDMETHODCALLTYPE *GetFlags)( ITextSelection2 *This, LONG *pFlags); HRESULT (STDMETHODCALLTYPE *SetFlags)( ITextSelection2 *This, LONG Flags); HRESULT (STDMETHODCALLTYPE *GetType)( ITextSelection2 *This, LONG *pType); HRESULT (STDMETHODCALLTYPE *MoveLeft)( ITextSelection2 *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveRight)( ITextSelection2 *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveUp)( ITextSelection2 *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveDown)( ITextSelection2 *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *HomeKey)( ITextSelection2 *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *EndKey)( ITextSelection2 *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *TypeText)( ITextSelection2 *This, BSTR bstr); /*** ITextRange2 methods ***/ HRESULT (STDMETHODCALLTYPE *GetCch)( ITextSelection2 *This, LONG *count); HRESULT (STDMETHODCALLTYPE *GetCells)( ITextSelection2 *This, IUnknown **cells); HRESULT (STDMETHODCALLTYPE *GetColumn)( ITextSelection2 *This, IUnknown **column); HRESULT (STDMETHODCALLTYPE *GetCount)( ITextSelection2 *This, LONG *count); HRESULT (STDMETHODCALLTYPE *GetDuplicate2)( ITextSelection2 *This, ITextRange2 **range); HRESULT (STDMETHODCALLTYPE *GetFont2)( ITextSelection2 *This, ITextFont2 **font); HRESULT (STDMETHODCALLTYPE *SetFont2)( ITextSelection2 *This, ITextFont2 *font); HRESULT (STDMETHODCALLTYPE *GetFormattedText2)( ITextSelection2 *This, ITextRange2 **range); HRESULT (STDMETHODCALLTYPE *SetFormattedText2)( ITextSelection2 *This, ITextRange2 *range); HRESULT (STDMETHODCALLTYPE *GetGravity)( ITextSelection2 *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetGravity)( ITextSelection2 *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetPara2)( ITextSelection2 *This, ITextPara2 **para); HRESULT (STDMETHODCALLTYPE *SetPara2)( ITextSelection2 *This, ITextPara2 *para); HRESULT (STDMETHODCALLTYPE *GetRow)( ITextSelection2 *This, ITextRow **row); HRESULT (STDMETHODCALLTYPE *GetStartPara)( ITextSelection2 *This, LONG *value); HRESULT (STDMETHODCALLTYPE *GetTable)( ITextSelection2 *This, IUnknown **table); HRESULT (STDMETHODCALLTYPE *GetURL)( ITextSelection2 *This, BSTR *url); HRESULT (STDMETHODCALLTYPE *SetURL)( ITextSelection2 *This, BSTR url); HRESULT (STDMETHODCALLTYPE *AddSubrange)( ITextSelection2 *This, LONG cp1, LONG cp2, LONG activate); HRESULT (STDMETHODCALLTYPE *BuildUpMath)( ITextSelection2 *This, LONG flags); HRESULT (STDMETHODCALLTYPE *DeleteSubrange)( ITextSelection2 *This, LONG first, LONG lim); HRESULT (STDMETHODCALLTYPE *Find)( ITextSelection2 *This, ITextRange2 *range, LONG count, LONG flags, LONG *delta); HRESULT (STDMETHODCALLTYPE *GetChar2)( ITextSelection2 *This, LONG *ch, LONG offset); HRESULT (STDMETHODCALLTYPE *GetDropCap)( ITextSelection2 *This, LONG *line, LONG *pos); HRESULT (STDMETHODCALLTYPE *GetInlineObject)( ITextSelection2 *This, LONG *type, LONG *align, LONG *ch, LONG *ch1, LONG *ch2, LONG *count, LONG *texstyle, LONG *ccol, LONG *level); HRESULT (STDMETHODCALLTYPE *GetProperty)( ITextSelection2 *This, LONG type, LONG *value); HRESULT (STDMETHODCALLTYPE *GetRect)( ITextSelection2 *This, LONG type, LONG *left, LONG *top, LONG *right, LONG *bottom, LONG *hit); HRESULT (STDMETHODCALLTYPE *GetSubrange)( ITextSelection2 *This, LONG subrange, LONG *first, LONG *limit); HRESULT (STDMETHODCALLTYPE *GetText2)( ITextSelection2 *This, LONG flags, BSTR *str); HRESULT (STDMETHODCALLTYPE *HexToUnicode)( ITextSelection2 *This); HRESULT (STDMETHODCALLTYPE *InsertTable)( ITextSelection2 *This, LONG col, LONG row, LONG autofit); HRESULT (STDMETHODCALLTYPE *Linearize)( ITextSelection2 *This, LONG flags); HRESULT (STDMETHODCALLTYPE *SetActiveSubrange)( ITextSelection2 *This, LONG anchor, LONG active); HRESULT (STDMETHODCALLTYPE *SetDropCap)( ITextSelection2 *This, LONG line, LONG pos); HRESULT (STDMETHODCALLTYPE *SetProperty)( ITextSelection2 *This, LONG type, LONG value); HRESULT (STDMETHODCALLTYPE *SetText2)( ITextSelection2 *This, LONG flags, BSTR str); HRESULT (STDMETHODCALLTYPE *UnicodeToHex)( ITextSelection2 *This); HRESULT (STDMETHODCALLTYPE *SetInlineObject)( ITextSelection2 *This, LONG type, LONG align, LONG ch, LONG ch1, LONG ch2, LONG count, LONG texstyle, LONG ccol); HRESULT (STDMETHODCALLTYPE *GetMathFunctionType)( ITextSelection2 *This, BSTR str, LONG *value); HRESULT (STDMETHODCALLTYPE *InsertImage)( ITextSelection2 *This, LONG width, LONG height, LONG ascent, LONG type, BSTR alttext, IStream *stream); END_INTERFACE } ITextSelection2Vtbl; interface ITextSelection2 { CONST_VTBL ITextSelection2Vtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextSelection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextSelection2_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextSelection2_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextSelection2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextSelection2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextSelection2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextSelection2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextRange methods ***/ #define ITextSelection2_GetText(This,pbstr) (This)->lpVtbl->GetText(This,pbstr) #define ITextSelection2_SetText(This,bstr) (This)->lpVtbl->SetText(This,bstr) #define ITextSelection2_GetChar(This,pch) (This)->lpVtbl->GetChar(This,pch) #define ITextSelection2_SetChar(This,ch) (This)->lpVtbl->SetChar(This,ch) #define ITextSelection2_GetDuplicate(This,ppRange) (This)->lpVtbl->GetDuplicate(This,ppRange) #define ITextSelection2_GetFormattedText(This,ppRange) (This)->lpVtbl->GetFormattedText(This,ppRange) #define ITextSelection2_SetFormattedText(This,pRange) (This)->lpVtbl->SetFormattedText(This,pRange) #define ITextSelection2_GetStart(This,pcpFirst) (This)->lpVtbl->GetStart(This,pcpFirst) #define ITextSelection2_SetStart(This,cpFirst) (This)->lpVtbl->SetStart(This,cpFirst) #define ITextSelection2_GetEnd(This,pcpLim) (This)->lpVtbl->GetEnd(This,pcpLim) #define ITextSelection2_SetEnd(This,cpLim) (This)->lpVtbl->SetEnd(This,cpLim) #define ITextSelection2_GetFont(This,pFont) (This)->lpVtbl->GetFont(This,pFont) #define ITextSelection2_SetFont(This,pFont) (This)->lpVtbl->SetFont(This,pFont) #define ITextSelection2_GetPara(This,ppPara) (This)->lpVtbl->GetPara(This,ppPara) #define ITextSelection2_SetPara(This,pPara) (This)->lpVtbl->SetPara(This,pPara) #define ITextSelection2_GetStoryLength(This,pcch) (This)->lpVtbl->GetStoryLength(This,pcch) #define ITextSelection2_GetStoryType(This,pValue) (This)->lpVtbl->GetStoryType(This,pValue) #define ITextSelection2_Collapse(This,bStart) (This)->lpVtbl->Collapse(This,bStart) #define ITextSelection2_Expand(This,Unit,pDelta) (This)->lpVtbl->Expand(This,Unit,pDelta) #define ITextSelection2_GetIndex(This,Unit,pIndex) (This)->lpVtbl->GetIndex(This,Unit,pIndex) #define ITextSelection2_SetIndex(This,Unit,Index,Extend) (This)->lpVtbl->SetIndex(This,Unit,Index,Extend) #define ITextSelection2_SetRange(This,anchor,active) (This)->lpVtbl->SetRange(This,anchor,active) #define ITextSelection2_InRange(This,pRange,pb) (This)->lpVtbl->InRange(This,pRange,pb) #define ITextSelection2_InStory(This,pRange,pb) (This)->lpVtbl->InStory(This,pRange,pb) #define ITextSelection2_IsEqual(This,pRange,pb) (This)->lpVtbl->IsEqual(This,pRange,pb) #define ITextSelection2_Select(This) (This)->lpVtbl->Select(This) #define ITextSelection2_StartOf(This,Unit,Extend,pDelta) (This)->lpVtbl->StartOf(This,Unit,Extend,pDelta) #define ITextSelection2_EndOf(This,Unit,Extend,pDelta) (This)->lpVtbl->EndOf(This,Unit,Extend,pDelta) #define ITextSelection2_Move(This,Unit,Count,pDelta) (This)->lpVtbl->Move(This,Unit,Count,pDelta) #define ITextSelection2_MoveStart(This,Unit,Count,pDelta) (This)->lpVtbl->MoveStart(This,Unit,Count,pDelta) #define ITextSelection2_MoveEnd(This,Unit,Count,pDelta) (This)->lpVtbl->MoveEnd(This,Unit,Count,pDelta) #define ITextSelection2_MoveWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveWhile(This,Cset,Count,pDelta) #define ITextSelection2_MoveStartWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta) #define ITextSelection2_MoveEndWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta) #define ITextSelection2_MoveUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveUntil(This,Cset,Count,pDelta) #define ITextSelection2_MoveStartUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta) #define ITextSelection2_MoveEndUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta) #define ITextSelection2_FindText(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindText(This,bstr,cch,Flags,pLength) #define ITextSelection2_FindTextStart(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength) #define ITextSelection2_FindTextEnd(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength) #define ITextSelection2_Delete(This,Unit,Count,pDelta) (This)->lpVtbl->Delete(This,Unit,Count,pDelta) #define ITextSelection2_Cut(This,pVar) (This)->lpVtbl->Cut(This,pVar) #define ITextSelection2_Copy(This,pVar) (This)->lpVtbl->Copy(This,pVar) #define ITextSelection2_Paste(This,pVar,Format) (This)->lpVtbl->Paste(This,pVar,Format) #define ITextSelection2_CanPaste(This,pVar,Format,pb) (This)->lpVtbl->CanPaste(This,pVar,Format,pb) #define ITextSelection2_CanEdit(This,pb) (This)->lpVtbl->CanEdit(This,pb) #define ITextSelection2_ChangeCase(This,Type) (This)->lpVtbl->ChangeCase(This,Type) #define ITextSelection2_GetPoint(This,Type,cx,cy) (This)->lpVtbl->GetPoint(This,Type,cx,cy) #define ITextSelection2_SetPoint(This,x,y,Type,Extend) (This)->lpVtbl->SetPoint(This,x,y,Type,Extend) #define ITextSelection2_ScrollIntoView(This,Value) (This)->lpVtbl->ScrollIntoView(This,Value) #define ITextSelection2_GetEmbeddedObject(This,ppv) (This)->lpVtbl->GetEmbeddedObject(This,ppv) /*** ITextSelection methods ***/ #define ITextSelection2_GetFlags(This,pFlags) (This)->lpVtbl->GetFlags(This,pFlags) #define ITextSelection2_SetFlags(This,Flags) (This)->lpVtbl->SetFlags(This,Flags) #define ITextSelection2_GetType(This,pType) (This)->lpVtbl->GetType(This,pType) #define ITextSelection2_MoveLeft(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta) #define ITextSelection2_MoveRight(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta) #define ITextSelection2_MoveUp(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta) #define ITextSelection2_MoveDown(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta) #define ITextSelection2_HomeKey(This,Unit,Extend,pDelta) (This)->lpVtbl->HomeKey(This,Unit,Extend,pDelta) #define ITextSelection2_EndKey(This,Unit,Extend,pDelta) (This)->lpVtbl->EndKey(This,Unit,Extend,pDelta) #define ITextSelection2_TypeText(This,bstr) (This)->lpVtbl->TypeText(This,bstr) /*** ITextRange2 methods ***/ #define ITextSelection2_GetCch(This,count) (This)->lpVtbl->GetCch(This,count) #define ITextSelection2_GetCells(This,cells) (This)->lpVtbl->GetCells(This,cells) #define ITextSelection2_GetColumn(This,column) (This)->lpVtbl->GetColumn(This,column) #define ITextSelection2_GetCount(This,count) (This)->lpVtbl->GetCount(This,count) #define ITextSelection2_GetDuplicate2(This,range) (This)->lpVtbl->GetDuplicate2(This,range) #define ITextSelection2_GetFont2(This,font) (This)->lpVtbl->GetFont2(This,font) #define ITextSelection2_SetFont2(This,font) (This)->lpVtbl->SetFont2(This,font) #define ITextSelection2_GetFormattedText2(This,range) (This)->lpVtbl->GetFormattedText2(This,range) #define ITextSelection2_SetFormattedText2(This,range) (This)->lpVtbl->SetFormattedText2(This,range) #define ITextSelection2_GetGravity(This,value) (This)->lpVtbl->GetGravity(This,value) #define ITextSelection2_SetGravity(This,value) (This)->lpVtbl->SetGravity(This,value) #define ITextSelection2_GetPara2(This,para) (This)->lpVtbl->GetPara2(This,para) #define ITextSelection2_SetPara2(This,para) (This)->lpVtbl->SetPara2(This,para) #define ITextSelection2_GetRow(This,row) (This)->lpVtbl->GetRow(This,row) #define ITextSelection2_GetStartPara(This,value) (This)->lpVtbl->GetStartPara(This,value) #define ITextSelection2_GetTable(This,table) (This)->lpVtbl->GetTable(This,table) #define ITextSelection2_GetURL(This,url) (This)->lpVtbl->GetURL(This,url) #define ITextSelection2_SetURL(This,url) (This)->lpVtbl->SetURL(This,url) #define ITextSelection2_AddSubrange(This,cp1,cp2,activate) (This)->lpVtbl->AddSubrange(This,cp1,cp2,activate) #define ITextSelection2_BuildUpMath(This,flags) (This)->lpVtbl->BuildUpMath(This,flags) #define ITextSelection2_DeleteSubrange(This,first,lim) (This)->lpVtbl->DeleteSubrange(This,first,lim) #define ITextSelection2_Find(This,range,count,flags,delta) (This)->lpVtbl->Find(This,range,count,flags,delta) #define ITextSelection2_GetChar2(This,ch,offset) (This)->lpVtbl->GetChar2(This,ch,offset) #define ITextSelection2_GetDropCap(This,line,pos) (This)->lpVtbl->GetDropCap(This,line,pos) #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) #define ITextSelection2_GetProperty(This,type,value) (This)->lpVtbl->GetProperty(This,type,value) #define ITextSelection2_GetRect(This,type,left,top,right,bottom,hit) (This)->lpVtbl->GetRect(This,type,left,top,right,bottom,hit) #define ITextSelection2_GetSubrange(This,subrange,first,limit) (This)->lpVtbl->GetSubrange(This,subrange,first,limit) #define ITextSelection2_GetText2(This,flags,str) (This)->lpVtbl->GetText2(This,flags,str) #define ITextSelection2_HexToUnicode(This) (This)->lpVtbl->HexToUnicode(This) #define ITextSelection2_InsertTable(This,col,row,autofit) (This)->lpVtbl->InsertTable(This,col,row,autofit) #define ITextSelection2_Linearize(This,flags) (This)->lpVtbl->Linearize(This,flags) #define ITextSelection2_SetActiveSubrange(This,anchor,active) (This)->lpVtbl->SetActiveSubrange(This,anchor,active) #define ITextSelection2_SetDropCap(This,line,pos) (This)->lpVtbl->SetDropCap(This,line,pos) #define ITextSelection2_SetProperty(This,type,value) (This)->lpVtbl->SetProperty(This,type,value) #define ITextSelection2_SetText2(This,flags,str) (This)->lpVtbl->SetText2(This,flags,str) #define ITextSelection2_UnicodeToHex(This) (This)->lpVtbl->UnicodeToHex(This) #define ITextSelection2_SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol) (This)->lpVtbl->SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol) #define ITextSelection2_GetMathFunctionType(This,str,value) (This)->lpVtbl->GetMathFunctionType(This,str,value) #define ITextSelection2_InsertImage(This,width,height,ascent,type,alttext,stream) (This)->lpVtbl->InsertImage(This,width,height,ascent,type,alttext,stream) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextSelection2_QueryInterface(ITextSelection2* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextSelection2_AddRef(ITextSelection2* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextSelection2_Release(ITextSelection2* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextSelection2_GetTypeInfoCount(ITextSelection2* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextSelection2_GetTypeInfo(ITextSelection2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextSelection2_GetIDsOfNames(ITextSelection2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextSelection2_Invoke(ITextSelection2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextRange methods ***/ static FORCEINLINE HRESULT ITextSelection2_GetText(ITextSelection2* This,BSTR *pbstr) { return This->lpVtbl->GetText(This,pbstr); } static FORCEINLINE HRESULT ITextSelection2_SetText(ITextSelection2* This,BSTR bstr) { return This->lpVtbl->SetText(This,bstr); } static FORCEINLINE HRESULT ITextSelection2_GetChar(ITextSelection2* This,LONG *pch) { return This->lpVtbl->GetChar(This,pch); } static FORCEINLINE HRESULT ITextSelection2_SetChar(ITextSelection2* This,LONG ch) { return This->lpVtbl->SetChar(This,ch); } static FORCEINLINE HRESULT ITextSelection2_GetDuplicate(ITextSelection2* This,ITextRange **ppRange) { return This->lpVtbl->GetDuplicate(This,ppRange); } static FORCEINLINE HRESULT ITextSelection2_GetFormattedText(ITextSelection2* This,ITextRange **ppRange) { return This->lpVtbl->GetFormattedText(This,ppRange); } static FORCEINLINE HRESULT ITextSelection2_SetFormattedText(ITextSelection2* This,ITextRange *pRange) { return This->lpVtbl->SetFormattedText(This,pRange); } static FORCEINLINE HRESULT ITextSelection2_GetStart(ITextSelection2* This,LONG *pcpFirst) { return This->lpVtbl->GetStart(This,pcpFirst); } static FORCEINLINE HRESULT ITextSelection2_SetStart(ITextSelection2* This,LONG cpFirst) { return This->lpVtbl->SetStart(This,cpFirst); } static FORCEINLINE HRESULT ITextSelection2_GetEnd(ITextSelection2* This,LONG *pcpLim) { return This->lpVtbl->GetEnd(This,pcpLim); } static FORCEINLINE HRESULT ITextSelection2_SetEnd(ITextSelection2* This,LONG cpLim) { return This->lpVtbl->SetEnd(This,cpLim); } static FORCEINLINE HRESULT ITextSelection2_GetFont(ITextSelection2* This,ITextFont **pFont) { return This->lpVtbl->GetFont(This,pFont); } static FORCEINLINE HRESULT ITextSelection2_SetFont(ITextSelection2* This,ITextFont *pFont) { return This->lpVtbl->SetFont(This,pFont); } static FORCEINLINE HRESULT ITextSelection2_GetPara(ITextSelection2* This,ITextPara **ppPara) { return This->lpVtbl->GetPara(This,ppPara); } static FORCEINLINE HRESULT ITextSelection2_SetPara(ITextSelection2* This,ITextPara *pPara) { return This->lpVtbl->SetPara(This,pPara); } static FORCEINLINE HRESULT ITextSelection2_GetStoryLength(ITextSelection2* This,LONG *pcch) { return This->lpVtbl->GetStoryLength(This,pcch); } static FORCEINLINE HRESULT ITextSelection2_GetStoryType(ITextSelection2* This,LONG *pValue) { return This->lpVtbl->GetStoryType(This,pValue); } static FORCEINLINE HRESULT ITextSelection2_Collapse(ITextSelection2* This,LONG bStart) { return This->lpVtbl->Collapse(This,bStart); } static FORCEINLINE HRESULT ITextSelection2_Expand(ITextSelection2* This,LONG Unit,LONG *pDelta) { return This->lpVtbl->Expand(This,Unit,pDelta); } static FORCEINLINE HRESULT ITextSelection2_GetIndex(ITextSelection2* This,LONG Unit,LONG *pIndex) { return This->lpVtbl->GetIndex(This,Unit,pIndex); } static FORCEINLINE HRESULT ITextSelection2_SetIndex(ITextSelection2* This,LONG Unit,LONG Index,LONG Extend) { return This->lpVtbl->SetIndex(This,Unit,Index,Extend); } static FORCEINLINE HRESULT ITextSelection2_SetRange(ITextSelection2* This,LONG anchor,LONG active) { return This->lpVtbl->SetRange(This,anchor,active); } static FORCEINLINE HRESULT ITextSelection2_InRange(ITextSelection2* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->InRange(This,pRange,pb); } static FORCEINLINE HRESULT ITextSelection2_InStory(ITextSelection2* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->InStory(This,pRange,pb); } static FORCEINLINE HRESULT ITextSelection2_IsEqual(ITextSelection2* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->IsEqual(This,pRange,pb); } static FORCEINLINE HRESULT ITextSelection2_Select(ITextSelection2* This) { return This->lpVtbl->Select(This); } static FORCEINLINE HRESULT ITextSelection2_StartOf(ITextSelection2* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->StartOf(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection2_EndOf(ITextSelection2* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->EndOf(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection2_Move(ITextSelection2* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->Move(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveStart(ITextSelection2* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStart(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveEnd(ITextSelection2* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEnd(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveWhile(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveStartWhile(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveEndWhile(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveUntil(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveStartUntil(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveEndUntil(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_FindText(ITextSelection2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindText(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextSelection2_FindTextStart(ITextSelection2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextSelection2_FindTextEnd(ITextSelection2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextSelection2_Delete(ITextSelection2* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->Delete(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection2_Cut(ITextSelection2* This,VARIANT *pVar) { return This->lpVtbl->Cut(This,pVar); } static FORCEINLINE HRESULT ITextSelection2_Copy(ITextSelection2* This,VARIANT *pVar) { return This->lpVtbl->Copy(This,pVar); } static FORCEINLINE HRESULT ITextSelection2_Paste(ITextSelection2* This,VARIANT *pVar,LONG Format) { return This->lpVtbl->Paste(This,pVar,Format); } static FORCEINLINE HRESULT ITextSelection2_CanPaste(ITextSelection2* This,VARIANT *pVar,LONG Format,LONG *pb) { return This->lpVtbl->CanPaste(This,pVar,Format,pb); } static FORCEINLINE HRESULT ITextSelection2_CanEdit(ITextSelection2* This,LONG *pb) { return This->lpVtbl->CanEdit(This,pb); } static FORCEINLINE HRESULT ITextSelection2_ChangeCase(ITextSelection2* This,LONG Type) { return This->lpVtbl->ChangeCase(This,Type); } static FORCEINLINE HRESULT ITextSelection2_GetPoint(ITextSelection2* This,LONG Type,LONG *cx,LONG *cy) { return This->lpVtbl->GetPoint(This,Type,cx,cy); } static FORCEINLINE HRESULT ITextSelection2_SetPoint(ITextSelection2* This,LONG x,LONG y,LONG Type,LONG Extend) { return This->lpVtbl->SetPoint(This,x,y,Type,Extend); } static FORCEINLINE HRESULT ITextSelection2_ScrollIntoView(ITextSelection2* This,LONG Value) { return This->lpVtbl->ScrollIntoView(This,Value); } static FORCEINLINE HRESULT ITextSelection2_GetEmbeddedObject(ITextSelection2* This,IUnknown **ppv) { return This->lpVtbl->GetEmbeddedObject(This,ppv); } /*** ITextSelection methods ***/ static FORCEINLINE HRESULT ITextSelection2_GetFlags(ITextSelection2* This,LONG *pFlags) { return This->lpVtbl->GetFlags(This,pFlags); } static FORCEINLINE HRESULT ITextSelection2_SetFlags(ITextSelection2* This,LONG Flags) { return This->lpVtbl->SetFlags(This,Flags); } static FORCEINLINE HRESULT ITextSelection2_GetType(ITextSelection2* This,LONG *pType) { return This->lpVtbl->GetType(This,pType); } static FORCEINLINE HRESULT ITextSelection2_MoveLeft(ITextSelection2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveRight(ITextSelection2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveUp(ITextSelection2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection2_MoveDown(ITextSelection2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection2_HomeKey(ITextSelection2* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->HomeKey(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection2_EndKey(ITextSelection2* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->EndKey(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection2_TypeText(ITextSelection2* This,BSTR bstr) { return This->lpVtbl->TypeText(This,bstr); } /*** ITextRange2 methods ***/ static FORCEINLINE HRESULT ITextSelection2_GetCch(ITextSelection2* This,LONG *count) { return This->lpVtbl->GetCch(This,count); } static FORCEINLINE HRESULT ITextSelection2_GetCells(ITextSelection2* This,IUnknown **cells) { return This->lpVtbl->GetCells(This,cells); } static FORCEINLINE HRESULT ITextSelection2_GetColumn(ITextSelection2* This,IUnknown **column) { return This->lpVtbl->GetColumn(This,column); } static FORCEINLINE HRESULT ITextSelection2_GetCount(ITextSelection2* This,LONG *count) { return This->lpVtbl->GetCount(This,count); } static FORCEINLINE HRESULT ITextSelection2_GetDuplicate2(ITextSelection2* This,ITextRange2 **range) { return This->lpVtbl->GetDuplicate2(This,range); } static FORCEINLINE HRESULT ITextSelection2_GetFont2(ITextSelection2* This,ITextFont2 **font) { return This->lpVtbl->GetFont2(This,font); } static FORCEINLINE HRESULT ITextSelection2_SetFont2(ITextSelection2* This,ITextFont2 *font) { return This->lpVtbl->SetFont2(This,font); } static FORCEINLINE HRESULT ITextSelection2_GetFormattedText2(ITextSelection2* This,ITextRange2 **range) { return This->lpVtbl->GetFormattedText2(This,range); } static FORCEINLINE HRESULT ITextSelection2_SetFormattedText2(ITextSelection2* This,ITextRange2 *range) { return This->lpVtbl->SetFormattedText2(This,range); } static FORCEINLINE HRESULT ITextSelection2_GetGravity(ITextSelection2* This,LONG *value) { return This->lpVtbl->GetGravity(This,value); } static FORCEINLINE HRESULT ITextSelection2_SetGravity(ITextSelection2* This,LONG value) { return This->lpVtbl->SetGravity(This,value); } static FORCEINLINE HRESULT ITextSelection2_GetPara2(ITextSelection2* This,ITextPara2 **para) { return This->lpVtbl->GetPara2(This,para); } static FORCEINLINE HRESULT ITextSelection2_SetPara2(ITextSelection2* This,ITextPara2 *para) { return This->lpVtbl->SetPara2(This,para); } static FORCEINLINE HRESULT ITextSelection2_GetRow(ITextSelection2* This,ITextRow **row) { return This->lpVtbl->GetRow(This,row); } static FORCEINLINE HRESULT ITextSelection2_GetStartPara(ITextSelection2* This,LONG *value) { return This->lpVtbl->GetStartPara(This,value); } static FORCEINLINE HRESULT ITextSelection2_GetTable(ITextSelection2* This,IUnknown **table) { return This->lpVtbl->GetTable(This,table); } static FORCEINLINE HRESULT ITextSelection2_GetURL(ITextSelection2* This,BSTR *url) { return This->lpVtbl->GetURL(This,url); } static FORCEINLINE HRESULT ITextSelection2_SetURL(ITextSelection2* This,BSTR url) { return This->lpVtbl->SetURL(This,url); } static FORCEINLINE HRESULT ITextSelection2_AddSubrange(ITextSelection2* This,LONG cp1,LONG cp2,LONG activate) { return This->lpVtbl->AddSubrange(This,cp1,cp2,activate); } static FORCEINLINE HRESULT ITextSelection2_BuildUpMath(ITextSelection2* This,LONG flags) { return This->lpVtbl->BuildUpMath(This,flags); } static FORCEINLINE HRESULT ITextSelection2_DeleteSubrange(ITextSelection2* This,LONG first,LONG lim) { return This->lpVtbl->DeleteSubrange(This,first,lim); } static FORCEINLINE HRESULT ITextSelection2_Find(ITextSelection2* This,ITextRange2 *range,LONG count,LONG flags,LONG *delta) { return This->lpVtbl->Find(This,range,count,flags,delta); } static FORCEINLINE HRESULT ITextSelection2_GetChar2(ITextSelection2* This,LONG *ch,LONG offset) { return This->lpVtbl->GetChar2(This,ch,offset); } static FORCEINLINE HRESULT ITextSelection2_GetDropCap(ITextSelection2* This,LONG *line,LONG *pos) { return This->lpVtbl->GetDropCap(This,line,pos); } static FORCEINLINE HRESULT ITextSelection2_GetInlineObject(ITextSelection2* This,LONG *type,LONG *align,LONG *ch,LONG *ch1,LONG *ch2,LONG *count,LONG *texstyle,LONG *ccol,LONG *level) { return This->lpVtbl->GetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol,level); } static FORCEINLINE HRESULT ITextSelection2_GetProperty(ITextSelection2* This,LONG type,LONG *value) { return This->lpVtbl->GetProperty(This,type,value); } static FORCEINLINE HRESULT ITextSelection2_GetRect(ITextSelection2* This,LONG type,LONG *left,LONG *top,LONG *right,LONG *bottom,LONG *hit) { return This->lpVtbl->GetRect(This,type,left,top,right,bottom,hit); } static FORCEINLINE HRESULT ITextSelection2_GetSubrange(ITextSelection2* This,LONG subrange,LONG *first,LONG *limit) { return This->lpVtbl->GetSubrange(This,subrange,first,limit); } static FORCEINLINE HRESULT ITextSelection2_GetText2(ITextSelection2* This,LONG flags,BSTR *str) { return This->lpVtbl->GetText2(This,flags,str); } static FORCEINLINE HRESULT ITextSelection2_HexToUnicode(ITextSelection2* This) { return This->lpVtbl->HexToUnicode(This); } static FORCEINLINE HRESULT ITextSelection2_InsertTable(ITextSelection2* This,LONG col,LONG row,LONG autofit) { return This->lpVtbl->InsertTable(This,col,row,autofit); } static FORCEINLINE HRESULT ITextSelection2_Linearize(ITextSelection2* This,LONG flags) { return This->lpVtbl->Linearize(This,flags); } static FORCEINLINE HRESULT ITextSelection2_SetActiveSubrange(ITextSelection2* This,LONG anchor,LONG active) { return This->lpVtbl->SetActiveSubrange(This,anchor,active); } static FORCEINLINE HRESULT ITextSelection2_SetDropCap(ITextSelection2* This,LONG line,LONG pos) { return This->lpVtbl->SetDropCap(This,line,pos); } static FORCEINLINE HRESULT ITextSelection2_SetProperty(ITextSelection2* This,LONG type,LONG value) { return This->lpVtbl->SetProperty(This,type,value); } static FORCEINLINE HRESULT ITextSelection2_SetText2(ITextSelection2* This,LONG flags,BSTR str) { return This->lpVtbl->SetText2(This,flags,str); } static FORCEINLINE HRESULT ITextSelection2_UnicodeToHex(ITextSelection2* This) { return This->lpVtbl->UnicodeToHex(This); } static FORCEINLINE HRESULT ITextSelection2_SetInlineObject(ITextSelection2* This,LONG type,LONG align,LONG ch,LONG ch1,LONG ch2,LONG count,LONG texstyle,LONG ccol) { return This->lpVtbl->SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol); } static FORCEINLINE HRESULT ITextSelection2_GetMathFunctionType(ITextSelection2* This,BSTR str,LONG *value) { return This->lpVtbl->GetMathFunctionType(This,str,value); } static FORCEINLINE HRESULT ITextSelection2_InsertImage(ITextSelection2* This,LONG width,LONG height,LONG ascent,LONG type,BSTR alttext,IStream *stream) { return This->lpVtbl->InsertImage(This,width,height,ascent,type,alttext,stream); } #endif #endif #endif #endif /* __ITextSelection2_INTERFACE_DEFINED__ */ /***************************************************************************** * ITextDocument2 interface */ #ifndef __ITextDocument2_INTERFACE_DEFINED__ #define __ITextDocument2_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextDocument2, 0xc241f5e0, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("c241f5e0-7206-11d8-a2c7-00a0d1d6c6b3") ITextDocument2 : public ITextDocument { virtual HRESULT STDMETHODCALLTYPE GetCaretType( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE SetCaretType( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetDisplays( ITextDisplays **displays) = 0; virtual HRESULT STDMETHODCALLTYPE GetDocumentFont( ITextFont2 **font) = 0; virtual HRESULT STDMETHODCALLTYPE SetDocumentFont( ITextFont2 *font) = 0; virtual HRESULT STDMETHODCALLTYPE GetDocumentPara( ITextPara2 **para) = 0; virtual HRESULT STDMETHODCALLTYPE SetDocumentPara( ITextPara2 *para) = 0; virtual HRESULT STDMETHODCALLTYPE GetEastAsianFlags( LONG *flags) = 0; virtual HRESULT STDMETHODCALLTYPE GetGenerator( BSTR *bstr) = 0; virtual HRESULT STDMETHODCALLTYPE SetIMEInProgress( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE GetNotificationMode( LONG *mode) = 0; virtual HRESULT STDMETHODCALLTYPE SetNotificationMode( LONG mode) = 0; virtual HRESULT STDMETHODCALLTYPE GetSelection2( ITextSelection2 **selection) = 0; virtual HRESULT STDMETHODCALLTYPE GetStoryRanges2( ITextStoryRanges2 **stories) = 0; virtual HRESULT STDMETHODCALLTYPE GetTypographyOptions( LONG *options) = 0; virtual HRESULT STDMETHODCALLTYPE GetVersion( LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE GetWindow( LONG *hwnd) = 0; virtual HRESULT STDMETHODCALLTYPE AttachMsgFilter( IUnknown *filter) = 0; virtual HRESULT STDMETHODCALLTYPE CheckTextLimit( LONG cch, LONG *exceed) = 0; virtual HRESULT STDMETHODCALLTYPE GetCallManager( IUnknown **manager) = 0; virtual HRESULT STDMETHODCALLTYPE GetClientRect( LONG type, LONG *left, LONG *top, LONG *right, LONG *bottom) = 0; virtual HRESULT STDMETHODCALLTYPE GetEffectColor( LONG index, COLORREF *cr) = 0; virtual HRESULT STDMETHODCALLTYPE GetImmContext( LONG *context) = 0; virtual HRESULT STDMETHODCALLTYPE GetPreferredFont( LONG cp, LONG codepage, LONG option, LONG current_codepage, LONG current_fontsize, BSTR *bstr, LONG *pitch_family, LONG *new_fontsize) = 0; virtual HRESULT STDMETHODCALLTYPE GetProperty( LONG type, LONG *value) = 0; virtual HRESULT STDMETHODCALLTYPE GetStrings( ITextStrings **strings) = 0; virtual HRESULT STDMETHODCALLTYPE Notify( LONG notify) = 0; virtual HRESULT STDMETHODCALLTYPE Range2( LONG cp_active, LONG cp_anchor, ITextRange2 **range) = 0; virtual HRESULT STDMETHODCALLTYPE RangeFromPoint2( LONG x, LONG y, LONG type, ITextRange2 **range) = 0; virtual HRESULT STDMETHODCALLTYPE ReleaseCallManager( IUnknown *manager) = 0; virtual HRESULT STDMETHODCALLTYPE ReleaseImmContext( LONG context) = 0; virtual HRESULT STDMETHODCALLTYPE SetEffectColor( LONG index, LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE SetProperty( LONG type, LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE SetTypographyOptions( LONG options, LONG mask) = 0; virtual HRESULT STDMETHODCALLTYPE SysBeep( ) = 0; virtual HRESULT STDMETHODCALLTYPE Update( LONG value) = 0; virtual HRESULT STDMETHODCALLTYPE UpdateWindow( ) = 0; virtual HRESULT STDMETHODCALLTYPE GetMathProperties( LONG *options) = 0; virtual HRESULT STDMETHODCALLTYPE SetMathProperties( LONG options, LONG mask) = 0; virtual HRESULT STDMETHODCALLTYPE GetActiveStory( ITextStory **story) = 0; virtual HRESULT STDMETHODCALLTYPE SetActiveStory( ITextStory *story) = 0; virtual HRESULT STDMETHODCALLTYPE GetMainStory( ITextStory **story) = 0; virtual HRESULT STDMETHODCALLTYPE GetNewStory( ITextStory **story) = 0; virtual HRESULT STDMETHODCALLTYPE GetStory( LONG index, ITextStory **story) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextDocument2, 0xc241f5e0, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3) #endif #else typedef struct ITextDocument2Vtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextDocument2 *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextDocument2 *This); ULONG (STDMETHODCALLTYPE *Release)( ITextDocument2 *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextDocument2 *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextDocument2 *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextDocument2 *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextDocument2 *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextDocument methods ***/ HRESULT (STDMETHODCALLTYPE *GetName)( ITextDocument2 *This, BSTR *pName); HRESULT (STDMETHODCALLTYPE *GetSelection)( ITextDocument2 *This, ITextSelection **ppSel); HRESULT (STDMETHODCALLTYPE *GetStoryCount)( ITextDocument2 *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *GetStoryRanges)( ITextDocument2 *This, ITextStoryRanges **ppStories); HRESULT (STDMETHODCALLTYPE *GetSaved)( ITextDocument2 *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetSaved)( ITextDocument2 *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetDefaultTabStop)( ITextDocument2 *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetDefaultTabStop)( ITextDocument2 *This, float Value); HRESULT (STDMETHODCALLTYPE *New)( ITextDocument2 *This); HRESULT (STDMETHODCALLTYPE *Open)( ITextDocument2 *This, VARIANT *pVar, LONG Flags, LONG CodePage); HRESULT (STDMETHODCALLTYPE *Save)( ITextDocument2 *This, VARIANT *pVar, LONG Flags, LONG CodePage); HRESULT (STDMETHODCALLTYPE *Freeze)( ITextDocument2 *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *Unfreeze)( ITextDocument2 *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *BeginEditCollection)( ITextDocument2 *This); HRESULT (STDMETHODCALLTYPE *EndEditCollection)( ITextDocument2 *This); HRESULT (STDMETHODCALLTYPE *Undo)( ITextDocument2 *This, LONG Count, LONG *prop); HRESULT (STDMETHODCALLTYPE *Redo)( ITextDocument2 *This, LONG Count, LONG *prop); HRESULT (STDMETHODCALLTYPE *Range)( ITextDocument2 *This, LONG cp1, LONG cp2, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *RangeFromPoint)( ITextDocument2 *This, LONG x, LONG y, ITextRange **ppRange); /*** ITextDocument2 methods ***/ HRESULT (STDMETHODCALLTYPE *GetCaretType)( ITextDocument2 *This, LONG *value); HRESULT (STDMETHODCALLTYPE *SetCaretType)( ITextDocument2 *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetDisplays)( ITextDocument2 *This, ITextDisplays **displays); HRESULT (STDMETHODCALLTYPE *GetDocumentFont)( ITextDocument2 *This, ITextFont2 **font); HRESULT (STDMETHODCALLTYPE *SetDocumentFont)( ITextDocument2 *This, ITextFont2 *font); HRESULT (STDMETHODCALLTYPE *GetDocumentPara)( ITextDocument2 *This, ITextPara2 **para); HRESULT (STDMETHODCALLTYPE *SetDocumentPara)( ITextDocument2 *This, ITextPara2 *para); HRESULT (STDMETHODCALLTYPE *GetEastAsianFlags)( ITextDocument2 *This, LONG *flags); HRESULT (STDMETHODCALLTYPE *GetGenerator)( ITextDocument2 *This, BSTR *bstr); HRESULT (STDMETHODCALLTYPE *SetIMEInProgress)( ITextDocument2 *This, LONG value); HRESULT (STDMETHODCALLTYPE *GetNotificationMode)( ITextDocument2 *This, LONG *mode); HRESULT (STDMETHODCALLTYPE *SetNotificationMode)( ITextDocument2 *This, LONG mode); HRESULT (STDMETHODCALLTYPE *GetSelection2)( ITextDocument2 *This, ITextSelection2 **selection); HRESULT (STDMETHODCALLTYPE *GetStoryRanges2)( ITextDocument2 *This, ITextStoryRanges2 **stories); HRESULT (STDMETHODCALLTYPE *GetTypographyOptions)( ITextDocument2 *This, LONG *options); HRESULT (STDMETHODCALLTYPE *GetVersion)( ITextDocument2 *This, LONG *value); HRESULT (STDMETHODCALLTYPE *GetWindow)( ITextDocument2 *This, LONG *hwnd); HRESULT (STDMETHODCALLTYPE *AttachMsgFilter)( ITextDocument2 *This, IUnknown *filter); HRESULT (STDMETHODCALLTYPE *CheckTextLimit)( ITextDocument2 *This, LONG cch, LONG *exceed); HRESULT (STDMETHODCALLTYPE *GetCallManager)( ITextDocument2 *This, IUnknown **manager); HRESULT (STDMETHODCALLTYPE *GetClientRect)( ITextDocument2 *This, LONG type, LONG *left, LONG *top, LONG *right, LONG *bottom); HRESULT (STDMETHODCALLTYPE *GetEffectColor)( ITextDocument2 *This, LONG index, COLORREF *cr); HRESULT (STDMETHODCALLTYPE *GetImmContext)( ITextDocument2 *This, LONG *context); HRESULT (STDMETHODCALLTYPE *GetPreferredFont)( ITextDocument2 *This, LONG cp, LONG codepage, LONG option, LONG current_codepage, LONG current_fontsize, BSTR *bstr, LONG *pitch_family, LONG *new_fontsize); HRESULT (STDMETHODCALLTYPE *GetProperty)( ITextDocument2 *This, LONG type, LONG *value); HRESULT (STDMETHODCALLTYPE *GetStrings)( ITextDocument2 *This, ITextStrings **strings); HRESULT (STDMETHODCALLTYPE *Notify)( ITextDocument2 *This, LONG notify); HRESULT (STDMETHODCALLTYPE *Range2)( ITextDocument2 *This, LONG cp_active, LONG cp_anchor, ITextRange2 **range); HRESULT (STDMETHODCALLTYPE *RangeFromPoint2)( ITextDocument2 *This, LONG x, LONG y, LONG type, ITextRange2 **range); HRESULT (STDMETHODCALLTYPE *ReleaseCallManager)( ITextDocument2 *This, IUnknown *manager); HRESULT (STDMETHODCALLTYPE *ReleaseImmContext)( ITextDocument2 *This, LONG context); HRESULT (STDMETHODCALLTYPE *SetEffectColor)( ITextDocument2 *This, LONG index, LONG value); HRESULT (STDMETHODCALLTYPE *SetProperty)( ITextDocument2 *This, LONG type, LONG value); HRESULT (STDMETHODCALLTYPE *SetTypographyOptions)( ITextDocument2 *This, LONG options, LONG mask); HRESULT (STDMETHODCALLTYPE *SysBeep)( ITextDocument2 *This); HRESULT (STDMETHODCALLTYPE *Update)( ITextDocument2 *This, LONG value); HRESULT (STDMETHODCALLTYPE *UpdateWindow)( ITextDocument2 *This); HRESULT (STDMETHODCALLTYPE *GetMathProperties)( ITextDocument2 *This, LONG *options); HRESULT (STDMETHODCALLTYPE *SetMathProperties)( ITextDocument2 *This, LONG options, LONG mask); HRESULT (STDMETHODCALLTYPE *GetActiveStory)( ITextDocument2 *This, ITextStory **story); HRESULT (STDMETHODCALLTYPE *SetActiveStory)( ITextDocument2 *This, ITextStory *story); HRESULT (STDMETHODCALLTYPE *GetMainStory)( ITextDocument2 *This, ITextStory **story); HRESULT (STDMETHODCALLTYPE *GetNewStory)( ITextDocument2 *This, ITextStory **story); HRESULT (STDMETHODCALLTYPE *GetStory)( ITextDocument2 *This, LONG index, ITextStory **story); END_INTERFACE } ITextDocument2Vtbl; interface ITextDocument2 { CONST_VTBL ITextDocument2Vtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextDocument2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextDocument2_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextDocument2_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextDocument2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextDocument2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextDocument2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextDocument2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextDocument methods ***/ #define ITextDocument2_GetName(This,pName) (This)->lpVtbl->GetName(This,pName) #define ITextDocument2_GetSelection(This,ppSel) (This)->lpVtbl->GetSelection(This,ppSel) #define ITextDocument2_GetStoryCount(This,pCount) (This)->lpVtbl->GetStoryCount(This,pCount) #define ITextDocument2_GetStoryRanges(This,ppStories) (This)->lpVtbl->GetStoryRanges(This,ppStories) #define ITextDocument2_GetSaved(This,pValue) (This)->lpVtbl->GetSaved(This,pValue) #define ITextDocument2_SetSaved(This,Value) (This)->lpVtbl->SetSaved(This,Value) #define ITextDocument2_GetDefaultTabStop(This,pValue) (This)->lpVtbl->GetDefaultTabStop(This,pValue) #define ITextDocument2_SetDefaultTabStop(This,Value) (This)->lpVtbl->SetDefaultTabStop(This,Value) #define ITextDocument2_New(This) (This)->lpVtbl->New(This) #define ITextDocument2_Open(This,pVar,Flags,CodePage) (This)->lpVtbl->Open(This,pVar,Flags,CodePage) #define ITextDocument2_Save(This,pVar,Flags,CodePage) (This)->lpVtbl->Save(This,pVar,Flags,CodePage) #define ITextDocument2_Freeze(This,pCount) (This)->lpVtbl->Freeze(This,pCount) #define ITextDocument2_Unfreeze(This,pCount) (This)->lpVtbl->Unfreeze(This,pCount) #define ITextDocument2_BeginEditCollection(This) (This)->lpVtbl->BeginEditCollection(This) #define ITextDocument2_EndEditCollection(This) (This)->lpVtbl->EndEditCollection(This) #define ITextDocument2_Undo(This,Count,prop) (This)->lpVtbl->Undo(This,Count,prop) #define ITextDocument2_Redo(This,Count,prop) (This)->lpVtbl->Redo(This,Count,prop) #define ITextDocument2_Range(This,cp1,cp2,ppRange) (This)->lpVtbl->Range(This,cp1,cp2,ppRange) #define ITextDocument2_RangeFromPoint(This,x,y,ppRange) (This)->lpVtbl->RangeFromPoint(This,x,y,ppRange) /*** ITextDocument2 methods ***/ #define ITextDocument2_GetCaretType(This,value) (This)->lpVtbl->GetCaretType(This,value) #define ITextDocument2_SetCaretType(This,value) (This)->lpVtbl->SetCaretType(This,value) #define ITextDocument2_GetDisplays(This,displays) (This)->lpVtbl->GetDisplays(This,displays) #define ITextDocument2_GetDocumentFont(This,font) (This)->lpVtbl->GetDocumentFont(This,font) #define ITextDocument2_SetDocumentFont(This,font) (This)->lpVtbl->SetDocumentFont(This,font) #define ITextDocument2_GetDocumentPara(This,para) (This)->lpVtbl->GetDocumentPara(This,para) #define ITextDocument2_SetDocumentPara(This,para) (This)->lpVtbl->SetDocumentPara(This,para) #define ITextDocument2_GetEastAsianFlags(This,flags) (This)->lpVtbl->GetEastAsianFlags(This,flags) #define ITextDocument2_GetGenerator(This,bstr) (This)->lpVtbl->GetGenerator(This,bstr) #define ITextDocument2_SetIMEInProgress(This,value) (This)->lpVtbl->SetIMEInProgress(This,value) #define ITextDocument2_GetNotificationMode(This,mode) (This)->lpVtbl->GetNotificationMode(This,mode) #define ITextDocument2_SetNotificationMode(This,mode) (This)->lpVtbl->SetNotificationMode(This,mode) #define ITextDocument2_GetSelection2(This,selection) (This)->lpVtbl->GetSelection2(This,selection) #define ITextDocument2_GetStoryRanges2(This,stories) (This)->lpVtbl->GetStoryRanges2(This,stories) #define ITextDocument2_GetTypographyOptions(This,options) (This)->lpVtbl->GetTypographyOptions(This,options) #define ITextDocument2_GetVersion(This,value) (This)->lpVtbl->GetVersion(This,value) #define ITextDocument2_GetWindow(This,hwnd) (This)->lpVtbl->GetWindow(This,hwnd) #define ITextDocument2_AttachMsgFilter(This,filter) (This)->lpVtbl->AttachMsgFilter(This,filter) #define ITextDocument2_CheckTextLimit(This,cch,exceed) (This)->lpVtbl->CheckTextLimit(This,cch,exceed) #define ITextDocument2_GetCallManager(This,manager) (This)->lpVtbl->GetCallManager(This,manager) #define ITextDocument2_GetClientRect(This,type,left,top,right,bottom) (This)->lpVtbl->GetClientRect(This,type,left,top,right,bottom) #define ITextDocument2_GetEffectColor(This,index,cr) (This)->lpVtbl->GetEffectColor(This,index,cr) #define ITextDocument2_GetImmContext(This,context) (This)->lpVtbl->GetImmContext(This,context) #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) #define ITextDocument2_GetProperty(This,type,value) (This)->lpVtbl->GetProperty(This,type,value) #define ITextDocument2_GetStrings(This,strings) (This)->lpVtbl->GetStrings(This,strings) #define ITextDocument2_Notify(This,notify) (This)->lpVtbl->Notify(This,notify) #define ITextDocument2_Range2(This,cp_active,cp_anchor,range) (This)->lpVtbl->Range2(This,cp_active,cp_anchor,range) #define ITextDocument2_RangeFromPoint2(This,x,y,type,range) (This)->lpVtbl->RangeFromPoint2(This,x,y,type,range) #define ITextDocument2_ReleaseCallManager(This,manager) (This)->lpVtbl->ReleaseCallManager(This,manager) #define ITextDocument2_ReleaseImmContext(This,context) (This)->lpVtbl->ReleaseImmContext(This,context) #define ITextDocument2_SetEffectColor(This,index,value) (This)->lpVtbl->SetEffectColor(This,index,value) #define ITextDocument2_SetProperty(This,type,value) (This)->lpVtbl->SetProperty(This,type,value) #define ITextDocument2_SetTypographyOptions(This,options,mask) (This)->lpVtbl->SetTypographyOptions(This,options,mask) #define ITextDocument2_SysBeep(This) (This)->lpVtbl->SysBeep(This) #define ITextDocument2_Update(This,value) (This)->lpVtbl->Update(This,value) #define ITextDocument2_UpdateWindow(This) (This)->lpVtbl->UpdateWindow(This) #define ITextDocument2_GetMathProperties(This,options) (This)->lpVtbl->GetMathProperties(This,options) #define ITextDocument2_SetMathProperties(This,options,mask) (This)->lpVtbl->SetMathProperties(This,options,mask) #define ITextDocument2_GetActiveStory(This,story) (This)->lpVtbl->GetActiveStory(This,story) #define ITextDocument2_SetActiveStory(This,story) (This)->lpVtbl->SetActiveStory(This,story) #define ITextDocument2_GetMainStory(This,story) (This)->lpVtbl->GetMainStory(This,story) #define ITextDocument2_GetNewStory(This,story) (This)->lpVtbl->GetNewStory(This,story) #define ITextDocument2_GetStory(This,index,story) (This)->lpVtbl->GetStory(This,index,story) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextDocument2_QueryInterface(ITextDocument2* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextDocument2_AddRef(ITextDocument2* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextDocument2_Release(ITextDocument2* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextDocument2_GetTypeInfoCount(ITextDocument2* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextDocument2_GetTypeInfo(ITextDocument2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextDocument2_GetIDsOfNames(ITextDocument2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextDocument2_Invoke(ITextDocument2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextDocument methods ***/ static FORCEINLINE HRESULT ITextDocument2_GetName(ITextDocument2* This,BSTR *pName) { return This->lpVtbl->GetName(This,pName); } static FORCEINLINE HRESULT ITextDocument2_GetSelection(ITextDocument2* This,ITextSelection **ppSel) { return This->lpVtbl->GetSelection(This,ppSel); } static FORCEINLINE HRESULT ITextDocument2_GetStoryCount(ITextDocument2* This,LONG *pCount) { return This->lpVtbl->GetStoryCount(This,pCount); } static FORCEINLINE HRESULT ITextDocument2_GetStoryRanges(ITextDocument2* This,ITextStoryRanges **ppStories) { return This->lpVtbl->GetStoryRanges(This,ppStories); } static FORCEINLINE HRESULT ITextDocument2_GetSaved(ITextDocument2* This,LONG *pValue) { return This->lpVtbl->GetSaved(This,pValue); } static FORCEINLINE HRESULT ITextDocument2_SetSaved(ITextDocument2* This,LONG Value) { return This->lpVtbl->SetSaved(This,Value); } static FORCEINLINE HRESULT ITextDocument2_GetDefaultTabStop(ITextDocument2* This,float *pValue) { return This->lpVtbl->GetDefaultTabStop(This,pValue); } static FORCEINLINE HRESULT ITextDocument2_SetDefaultTabStop(ITextDocument2* This,float Value) { return This->lpVtbl->SetDefaultTabStop(This,Value); } static FORCEINLINE HRESULT ITextDocument2_New(ITextDocument2* This) { return This->lpVtbl->New(This); } static FORCEINLINE HRESULT ITextDocument2_Open(ITextDocument2* This,VARIANT *pVar,LONG Flags,LONG CodePage) { return This->lpVtbl->Open(This,pVar,Flags,CodePage); } static FORCEINLINE HRESULT ITextDocument2_Save(ITextDocument2* This,VARIANT *pVar,LONG Flags,LONG CodePage) { return This->lpVtbl->Save(This,pVar,Flags,CodePage); } static FORCEINLINE HRESULT ITextDocument2_Freeze(ITextDocument2* This,LONG *pCount) { return This->lpVtbl->Freeze(This,pCount); } static FORCEINLINE HRESULT ITextDocument2_Unfreeze(ITextDocument2* This,LONG *pCount) { return This->lpVtbl->Unfreeze(This,pCount); } static FORCEINLINE HRESULT ITextDocument2_BeginEditCollection(ITextDocument2* This) { return This->lpVtbl->BeginEditCollection(This); } static FORCEINLINE HRESULT ITextDocument2_EndEditCollection(ITextDocument2* This) { return This->lpVtbl->EndEditCollection(This); } static FORCEINLINE HRESULT ITextDocument2_Undo(ITextDocument2* This,LONG Count,LONG *prop) { return This->lpVtbl->Undo(This,Count,prop); } static FORCEINLINE HRESULT ITextDocument2_Redo(ITextDocument2* This,LONG Count,LONG *prop) { return This->lpVtbl->Redo(This,Count,prop); } static FORCEINLINE HRESULT ITextDocument2_Range(ITextDocument2* This,LONG cp1,LONG cp2,ITextRange **ppRange) { return This->lpVtbl->Range(This,cp1,cp2,ppRange); } static FORCEINLINE HRESULT ITextDocument2_RangeFromPoint(ITextDocument2* This,LONG x,LONG y,ITextRange **ppRange) { return This->lpVtbl->RangeFromPoint(This,x,y,ppRange); } /*** ITextDocument2 methods ***/ static FORCEINLINE HRESULT ITextDocument2_GetCaretType(ITextDocument2* This,LONG *value) { return This->lpVtbl->GetCaretType(This,value); } static FORCEINLINE HRESULT ITextDocument2_SetCaretType(ITextDocument2* This,LONG value) { return This->lpVtbl->SetCaretType(This,value); } static FORCEINLINE HRESULT ITextDocument2_GetDisplays(ITextDocument2* This,ITextDisplays **displays) { return This->lpVtbl->GetDisplays(This,displays); } static FORCEINLINE HRESULT ITextDocument2_GetDocumentFont(ITextDocument2* This,ITextFont2 **font) { return This->lpVtbl->GetDocumentFont(This,font); } static FORCEINLINE HRESULT ITextDocument2_SetDocumentFont(ITextDocument2* This,ITextFont2 *font) { return This->lpVtbl->SetDocumentFont(This,font); } static FORCEINLINE HRESULT ITextDocument2_GetDocumentPara(ITextDocument2* This,ITextPara2 **para) { return This->lpVtbl->GetDocumentPara(This,para); } static FORCEINLINE HRESULT ITextDocument2_SetDocumentPara(ITextDocument2* This,ITextPara2 *para) { return This->lpVtbl->SetDocumentPara(This,para); } static FORCEINLINE HRESULT ITextDocument2_GetEastAsianFlags(ITextDocument2* This,LONG *flags) { return This->lpVtbl->GetEastAsianFlags(This,flags); } static FORCEINLINE HRESULT ITextDocument2_GetGenerator(ITextDocument2* This,BSTR *bstr) { return This->lpVtbl->GetGenerator(This,bstr); } static FORCEINLINE HRESULT ITextDocument2_SetIMEInProgress(ITextDocument2* This,LONG value) { return This->lpVtbl->SetIMEInProgress(This,value); } static FORCEINLINE HRESULT ITextDocument2_GetNotificationMode(ITextDocument2* This,LONG *mode) { return This->lpVtbl->GetNotificationMode(This,mode); } static FORCEINLINE HRESULT ITextDocument2_SetNotificationMode(ITextDocument2* This,LONG mode) { return This->lpVtbl->SetNotificationMode(This,mode); } static FORCEINLINE HRESULT ITextDocument2_GetSelection2(ITextDocument2* This,ITextSelection2 **selection) { return This->lpVtbl->GetSelection2(This,selection); } static FORCEINLINE HRESULT ITextDocument2_GetStoryRanges2(ITextDocument2* This,ITextStoryRanges2 **stories) { return This->lpVtbl->GetStoryRanges2(This,stories); } static FORCEINLINE HRESULT ITextDocument2_GetTypographyOptions(ITextDocument2* This,LONG *options) { return This->lpVtbl->GetTypographyOptions(This,options); } static FORCEINLINE HRESULT ITextDocument2_GetVersion(ITextDocument2* This,LONG *value) { return This->lpVtbl->GetVersion(This,value); } static FORCEINLINE HRESULT ITextDocument2_GetWindow(ITextDocument2* This,LONG *hwnd) { return This->lpVtbl->GetWindow(This,hwnd); } static FORCEINLINE HRESULT ITextDocument2_AttachMsgFilter(ITextDocument2* This,IUnknown *filter) { return This->lpVtbl->AttachMsgFilter(This,filter); } static FORCEINLINE HRESULT ITextDocument2_CheckTextLimit(ITextDocument2* This,LONG cch,LONG *exceed) { return This->lpVtbl->CheckTextLimit(This,cch,exceed); } static FORCEINLINE HRESULT ITextDocument2_GetCallManager(ITextDocument2* This,IUnknown **manager) { return This->lpVtbl->GetCallManager(This,manager); } static FORCEINLINE HRESULT ITextDocument2_GetClientRect(ITextDocument2* This,LONG type,LONG *left,LONG *top,LONG *right,LONG *bottom) { return This->lpVtbl->GetClientRect(This,type,left,top,right,bottom); } static FORCEINLINE HRESULT ITextDocument2_GetEffectColor(ITextDocument2* This,LONG index,COLORREF *cr) { return This->lpVtbl->GetEffectColor(This,index,cr); } static FORCEINLINE HRESULT ITextDocument2_GetImmContext(ITextDocument2* This,LONG *context) { return This->lpVtbl->GetImmContext(This,context); } static 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) { return This->lpVtbl->GetPreferredFont(This,cp,codepage,option,current_codepage,current_fontsize,bstr,pitch_family,new_fontsize); } static FORCEINLINE HRESULT ITextDocument2_GetProperty(ITextDocument2* This,LONG type,LONG *value) { return This->lpVtbl->GetProperty(This,type,value); } static FORCEINLINE HRESULT ITextDocument2_GetStrings(ITextDocument2* This,ITextStrings **strings) { return This->lpVtbl->GetStrings(This,strings); } static FORCEINLINE HRESULT ITextDocument2_Notify(ITextDocument2* This,LONG notify) { return This->lpVtbl->Notify(This,notify); } static FORCEINLINE HRESULT ITextDocument2_Range2(ITextDocument2* This,LONG cp_active,LONG cp_anchor,ITextRange2 **range) { return This->lpVtbl->Range2(This,cp_active,cp_anchor,range); } static FORCEINLINE HRESULT ITextDocument2_RangeFromPoint2(ITextDocument2* This,LONG x,LONG y,LONG type,ITextRange2 **range) { return This->lpVtbl->RangeFromPoint2(This,x,y,type,range); } static FORCEINLINE HRESULT ITextDocument2_ReleaseCallManager(ITextDocument2* This,IUnknown *manager) { return This->lpVtbl->ReleaseCallManager(This,manager); } static FORCEINLINE HRESULT ITextDocument2_ReleaseImmContext(ITextDocument2* This,LONG context) { return This->lpVtbl->ReleaseImmContext(This,context); } static FORCEINLINE HRESULT ITextDocument2_SetEffectColor(ITextDocument2* This,LONG index,LONG value) { return This->lpVtbl->SetEffectColor(This,index,value); } static FORCEINLINE HRESULT ITextDocument2_SetProperty(ITextDocument2* This,LONG type,LONG value) { return This->lpVtbl->SetProperty(This,type,value); } static FORCEINLINE HRESULT ITextDocument2_SetTypographyOptions(ITextDocument2* This,LONG options,LONG mask) { return This->lpVtbl->SetTypographyOptions(This,options,mask); } static FORCEINLINE HRESULT ITextDocument2_SysBeep(ITextDocument2* This) { return This->lpVtbl->SysBeep(This); } static FORCEINLINE HRESULT ITextDocument2_Update(ITextDocument2* This,LONG value) { return This->lpVtbl->Update(This,value); } static FORCEINLINE HRESULT ITextDocument2_UpdateWindow(ITextDocument2* This) { return This->lpVtbl->UpdateWindow(This); } static FORCEINLINE HRESULT ITextDocument2_GetMathProperties(ITextDocument2* This,LONG *options) { return This->lpVtbl->GetMathProperties(This,options); } static FORCEINLINE HRESULT ITextDocument2_SetMathProperties(ITextDocument2* This,LONG options,LONG mask) { return This->lpVtbl->SetMathProperties(This,options,mask); } static FORCEINLINE HRESULT ITextDocument2_GetActiveStory(ITextDocument2* This,ITextStory **story) { return This->lpVtbl->GetActiveStory(This,story); } static FORCEINLINE HRESULT ITextDocument2_SetActiveStory(ITextDocument2* This,ITextStory *story) { return This->lpVtbl->SetActiveStory(This,story); } static FORCEINLINE HRESULT ITextDocument2_GetMainStory(ITextDocument2* This,ITextStory **story) { return This->lpVtbl->GetMainStory(This,story); } static FORCEINLINE HRESULT ITextDocument2_GetNewStory(ITextDocument2* This,ITextStory **story) { return This->lpVtbl->GetNewStory(This,story); } static FORCEINLINE HRESULT ITextDocument2_GetStory(ITextDocument2* This,LONG index,ITextStory **story) { return This->lpVtbl->GetStory(This,index,story); } #endif #endif #endif #endif /* __ITextDocument2_INTERFACE_DEFINED__ */ #ifndef __ITextFont_FWD_DEFINED__ #define __ITextFont_FWD_DEFINED__ typedef interface ITextFont ITextFont; #ifdef __cplusplus interface ITextFont; #endif /* __cplusplus */ #endif #ifndef __ITextPara_FWD_DEFINED__ #define __ITextPara_FWD_DEFINED__ typedef interface ITextPara ITextPara; #ifdef __cplusplus interface ITextPara; #endif /* __cplusplus */ #endif /***************************************************************************** * ITextRange interface */ #ifndef __ITextRange_INTERFACE_DEFINED__ #define __ITextRange_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextRange, 0x8cc497c2, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("8cc497c2-a1df-11ce-8098-00aa0047be5d") ITextRange : public IDispatch { virtual HRESULT STDMETHODCALLTYPE GetText( BSTR *pbstr) = 0; virtual HRESULT STDMETHODCALLTYPE SetText( BSTR bstr) = 0; virtual HRESULT STDMETHODCALLTYPE GetChar( LONG *pch) = 0; virtual HRESULT STDMETHODCALLTYPE SetChar( LONG ch) = 0; virtual HRESULT STDMETHODCALLTYPE GetDuplicate( ITextRange **ppRange) = 0; virtual HRESULT STDMETHODCALLTYPE GetFormattedText( ITextRange **ppRange) = 0; virtual HRESULT STDMETHODCALLTYPE SetFormattedText( ITextRange *pRange) = 0; virtual HRESULT STDMETHODCALLTYPE GetStart( LONG *pcpFirst) = 0; virtual HRESULT STDMETHODCALLTYPE SetStart( LONG cpFirst) = 0; virtual HRESULT STDMETHODCALLTYPE GetEnd( LONG *pcpLim) = 0; virtual HRESULT STDMETHODCALLTYPE SetEnd( LONG cpLim) = 0; virtual HRESULT STDMETHODCALLTYPE GetFont( ITextFont **pFont) = 0; virtual HRESULT STDMETHODCALLTYPE SetFont( ITextFont *pFont) = 0; virtual HRESULT STDMETHODCALLTYPE GetPara( ITextPara **ppPara) = 0; virtual HRESULT STDMETHODCALLTYPE SetPara( ITextPara *pPara) = 0; virtual HRESULT STDMETHODCALLTYPE GetStoryLength( LONG *pcch) = 0; virtual HRESULT STDMETHODCALLTYPE GetStoryType( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE Collapse( LONG bStart) = 0; virtual HRESULT STDMETHODCALLTYPE Expand( LONG Unit, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE GetIndex( LONG Unit, LONG *pIndex) = 0; virtual HRESULT STDMETHODCALLTYPE SetIndex( LONG Unit, LONG Index, LONG Extend) = 0; virtual HRESULT STDMETHODCALLTYPE SetRange( LONG anchor, LONG active) = 0; virtual HRESULT STDMETHODCALLTYPE InRange( ITextRange *pRange, LONG *pb) = 0; virtual HRESULT STDMETHODCALLTYPE InStory( ITextRange *pRange, LONG *pb) = 0; virtual HRESULT STDMETHODCALLTYPE IsEqual( ITextRange *pRange, LONG *pb) = 0; virtual HRESULT STDMETHODCALLTYPE Select( ) = 0; virtual HRESULT STDMETHODCALLTYPE StartOf( LONG Unit, LONG Extend, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE EndOf( LONG Unit, LONG Extend, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE Move( LONG Unit, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveStart( LONG Unit, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveEnd( LONG Unit, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveWhile( VARIANT *Cset, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveStartWhile( VARIANT *Cset, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveEndWhile( VARIANT *Cset, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveUntil( VARIANT *Cset, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveStartUntil( VARIANT *Cset, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveEndUntil( VARIANT *Cset, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE FindText( BSTR bstr, LONG cch, LONG Flags, LONG *pLength) = 0; virtual HRESULT STDMETHODCALLTYPE FindTextStart( BSTR bstr, LONG cch, LONG Flags, LONG *pLength) = 0; virtual HRESULT STDMETHODCALLTYPE FindTextEnd( BSTR bstr, LONG cch, LONG Flags, LONG *pLength) = 0; virtual HRESULT STDMETHODCALLTYPE Delete( LONG Unit, LONG Count, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE Cut( VARIANT *pVar) = 0; virtual HRESULT STDMETHODCALLTYPE Copy( VARIANT *pVar) = 0; virtual HRESULT STDMETHODCALLTYPE Paste( VARIANT *pVar, LONG Format) = 0; virtual HRESULT STDMETHODCALLTYPE CanPaste( VARIANT *pVar, LONG Format, LONG *pb) = 0; virtual HRESULT STDMETHODCALLTYPE CanEdit( LONG *pb) = 0; virtual HRESULT STDMETHODCALLTYPE ChangeCase( LONG Type) = 0; virtual HRESULT STDMETHODCALLTYPE GetPoint( LONG Type, LONG *cx, LONG *cy) = 0; virtual HRESULT STDMETHODCALLTYPE SetPoint( LONG x, LONG y, LONG Type, LONG Extend) = 0; virtual HRESULT STDMETHODCALLTYPE ScrollIntoView( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetEmbeddedObject( IUnknown **ppv) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextRange, 0x8cc497c2, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d) #endif #else typedef struct ITextRangeVtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextRange *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextRange *This); ULONG (STDMETHODCALLTYPE *Release)( ITextRange *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextRange *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextRange *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextRange *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextRange *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextRange methods ***/ HRESULT (STDMETHODCALLTYPE *GetText)( ITextRange *This, BSTR *pbstr); HRESULT (STDMETHODCALLTYPE *SetText)( ITextRange *This, BSTR bstr); HRESULT (STDMETHODCALLTYPE *GetChar)( ITextRange *This, LONG *pch); HRESULT (STDMETHODCALLTYPE *SetChar)( ITextRange *This, LONG ch); HRESULT (STDMETHODCALLTYPE *GetDuplicate)( ITextRange *This, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *GetFormattedText)( ITextRange *This, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *SetFormattedText)( ITextRange *This, ITextRange *pRange); HRESULT (STDMETHODCALLTYPE *GetStart)( ITextRange *This, LONG *pcpFirst); HRESULT (STDMETHODCALLTYPE *SetStart)( ITextRange *This, LONG cpFirst); HRESULT (STDMETHODCALLTYPE *GetEnd)( ITextRange *This, LONG *pcpLim); HRESULT (STDMETHODCALLTYPE *SetEnd)( ITextRange *This, LONG cpLim); HRESULT (STDMETHODCALLTYPE *GetFont)( ITextRange *This, ITextFont **pFont); HRESULT (STDMETHODCALLTYPE *SetFont)( ITextRange *This, ITextFont *pFont); HRESULT (STDMETHODCALLTYPE *GetPara)( ITextRange *This, ITextPara **ppPara); HRESULT (STDMETHODCALLTYPE *SetPara)( ITextRange *This, ITextPara *pPara); HRESULT (STDMETHODCALLTYPE *GetStoryLength)( ITextRange *This, LONG *pcch); HRESULT (STDMETHODCALLTYPE *GetStoryType)( ITextRange *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *Collapse)( ITextRange *This, LONG bStart); HRESULT (STDMETHODCALLTYPE *Expand)( ITextRange *This, LONG Unit, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *GetIndex)( ITextRange *This, LONG Unit, LONG *pIndex); HRESULT (STDMETHODCALLTYPE *SetIndex)( ITextRange *This, LONG Unit, LONG Index, LONG Extend); HRESULT (STDMETHODCALLTYPE *SetRange)( ITextRange *This, LONG anchor, LONG active); HRESULT (STDMETHODCALLTYPE *InRange)( ITextRange *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *InStory)( ITextRange *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *IsEqual)( ITextRange *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *Select)( ITextRange *This); HRESULT (STDMETHODCALLTYPE *StartOf)( ITextRange *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *EndOf)( ITextRange *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *Move)( ITextRange *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStart)( ITextRange *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEnd)( ITextRange *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveWhile)( ITextRange *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStartWhile)( ITextRange *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEndWhile)( ITextRange *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveUntil)( ITextRange *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStartUntil)( ITextRange *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEndUntil)( ITextRange *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *FindText)( ITextRange *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *FindTextStart)( ITextRange *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *FindTextEnd)( ITextRange *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *Delete)( ITextRange *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *Cut)( ITextRange *This, VARIANT *pVar); HRESULT (STDMETHODCALLTYPE *Copy)( ITextRange *This, VARIANT *pVar); HRESULT (STDMETHODCALLTYPE *Paste)( ITextRange *This, VARIANT *pVar, LONG Format); HRESULT (STDMETHODCALLTYPE *CanPaste)( ITextRange *This, VARIANT *pVar, LONG Format, LONG *pb); HRESULT (STDMETHODCALLTYPE *CanEdit)( ITextRange *This, LONG *pb); HRESULT (STDMETHODCALLTYPE *ChangeCase)( ITextRange *This, LONG Type); HRESULT (STDMETHODCALLTYPE *GetPoint)( ITextRange *This, LONG Type, LONG *cx, LONG *cy); HRESULT (STDMETHODCALLTYPE *SetPoint)( ITextRange *This, LONG x, LONG y, LONG Type, LONG Extend); HRESULT (STDMETHODCALLTYPE *ScrollIntoView)( ITextRange *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetEmbeddedObject)( ITextRange *This, IUnknown **ppv); END_INTERFACE } ITextRangeVtbl; interface ITextRange { CONST_VTBL ITextRangeVtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextRange_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextRange_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextRange_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextRange_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextRange_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextRange_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextRange_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextRange methods ***/ #define ITextRange_GetText(This,pbstr) (This)->lpVtbl->GetText(This,pbstr) #define ITextRange_SetText(This,bstr) (This)->lpVtbl->SetText(This,bstr) #define ITextRange_GetChar(This,pch) (This)->lpVtbl->GetChar(This,pch) #define ITextRange_SetChar(This,ch) (This)->lpVtbl->SetChar(This,ch) #define ITextRange_GetDuplicate(This,ppRange) (This)->lpVtbl->GetDuplicate(This,ppRange) #define ITextRange_GetFormattedText(This,ppRange) (This)->lpVtbl->GetFormattedText(This,ppRange) #define ITextRange_SetFormattedText(This,pRange) (This)->lpVtbl->SetFormattedText(This,pRange) #define ITextRange_GetStart(This,pcpFirst) (This)->lpVtbl->GetStart(This,pcpFirst) #define ITextRange_SetStart(This,cpFirst) (This)->lpVtbl->SetStart(This,cpFirst) #define ITextRange_GetEnd(This,pcpLim) (This)->lpVtbl->GetEnd(This,pcpLim) #define ITextRange_SetEnd(This,cpLim) (This)->lpVtbl->SetEnd(This,cpLim) #define ITextRange_GetFont(This,pFont) (This)->lpVtbl->GetFont(This,pFont) #define ITextRange_SetFont(This,pFont) (This)->lpVtbl->SetFont(This,pFont) #define ITextRange_GetPara(This,ppPara) (This)->lpVtbl->GetPara(This,ppPara) #define ITextRange_SetPara(This,pPara) (This)->lpVtbl->SetPara(This,pPara) #define ITextRange_GetStoryLength(This,pcch) (This)->lpVtbl->GetStoryLength(This,pcch) #define ITextRange_GetStoryType(This,pValue) (This)->lpVtbl->GetStoryType(This,pValue) #define ITextRange_Collapse(This,bStart) (This)->lpVtbl->Collapse(This,bStart) #define ITextRange_Expand(This,Unit,pDelta) (This)->lpVtbl->Expand(This,Unit,pDelta) #define ITextRange_GetIndex(This,Unit,pIndex) (This)->lpVtbl->GetIndex(This,Unit,pIndex) #define ITextRange_SetIndex(This,Unit,Index,Extend) (This)->lpVtbl->SetIndex(This,Unit,Index,Extend) #define ITextRange_SetRange(This,anchor,active) (This)->lpVtbl->SetRange(This,anchor,active) #define ITextRange_InRange(This,pRange,pb) (This)->lpVtbl->InRange(This,pRange,pb) #define ITextRange_InStory(This,pRange,pb) (This)->lpVtbl->InStory(This,pRange,pb) #define ITextRange_IsEqual(This,pRange,pb) (This)->lpVtbl->IsEqual(This,pRange,pb) #define ITextRange_Select(This) (This)->lpVtbl->Select(This) #define ITextRange_StartOf(This,Unit,Extend,pDelta) (This)->lpVtbl->StartOf(This,Unit,Extend,pDelta) #define ITextRange_EndOf(This,Unit,Extend,pDelta) (This)->lpVtbl->EndOf(This,Unit,Extend,pDelta) #define ITextRange_Move(This,Unit,Count,pDelta) (This)->lpVtbl->Move(This,Unit,Count,pDelta) #define ITextRange_MoveStart(This,Unit,Count,pDelta) (This)->lpVtbl->MoveStart(This,Unit,Count,pDelta) #define ITextRange_MoveEnd(This,Unit,Count,pDelta) (This)->lpVtbl->MoveEnd(This,Unit,Count,pDelta) #define ITextRange_MoveWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveWhile(This,Cset,Count,pDelta) #define ITextRange_MoveStartWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta) #define ITextRange_MoveEndWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta) #define ITextRange_MoveUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveUntil(This,Cset,Count,pDelta) #define ITextRange_MoveStartUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta) #define ITextRange_MoveEndUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta) #define ITextRange_FindText(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindText(This,bstr,cch,Flags,pLength) #define ITextRange_FindTextStart(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength) #define ITextRange_FindTextEnd(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength) #define ITextRange_Delete(This,Unit,Count,pDelta) (This)->lpVtbl->Delete(This,Unit,Count,pDelta) #define ITextRange_Cut(This,pVar) (This)->lpVtbl->Cut(This,pVar) #define ITextRange_Copy(This,pVar) (This)->lpVtbl->Copy(This,pVar) #define ITextRange_Paste(This,pVar,Format) (This)->lpVtbl->Paste(This,pVar,Format) #define ITextRange_CanPaste(This,pVar,Format,pb) (This)->lpVtbl->CanPaste(This,pVar,Format,pb) #define ITextRange_CanEdit(This,pb) (This)->lpVtbl->CanEdit(This,pb) #define ITextRange_ChangeCase(This,Type) (This)->lpVtbl->ChangeCase(This,Type) #define ITextRange_GetPoint(This,Type,cx,cy) (This)->lpVtbl->GetPoint(This,Type,cx,cy) #define ITextRange_SetPoint(This,x,y,Type,Extend) (This)->lpVtbl->SetPoint(This,x,y,Type,Extend) #define ITextRange_ScrollIntoView(This,Value) (This)->lpVtbl->ScrollIntoView(This,Value) #define ITextRange_GetEmbeddedObject(This,ppv) (This)->lpVtbl->GetEmbeddedObject(This,ppv) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextRange_QueryInterface(ITextRange* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextRange_AddRef(ITextRange* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextRange_Release(ITextRange* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextRange_GetTypeInfoCount(ITextRange* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextRange_GetTypeInfo(ITextRange* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextRange_GetIDsOfNames(ITextRange* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextRange_Invoke(ITextRange* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextRange methods ***/ static FORCEINLINE HRESULT ITextRange_GetText(ITextRange* This,BSTR *pbstr) { return This->lpVtbl->GetText(This,pbstr); } static FORCEINLINE HRESULT ITextRange_SetText(ITextRange* This,BSTR bstr) { return This->lpVtbl->SetText(This,bstr); } static FORCEINLINE HRESULT ITextRange_GetChar(ITextRange* This,LONG *pch) { return This->lpVtbl->GetChar(This,pch); } static FORCEINLINE HRESULT ITextRange_SetChar(ITextRange* This,LONG ch) { return This->lpVtbl->SetChar(This,ch); } static FORCEINLINE HRESULT ITextRange_GetDuplicate(ITextRange* This,ITextRange **ppRange) { return This->lpVtbl->GetDuplicate(This,ppRange); } static FORCEINLINE HRESULT ITextRange_GetFormattedText(ITextRange* This,ITextRange **ppRange) { return This->lpVtbl->GetFormattedText(This,ppRange); } static FORCEINLINE HRESULT ITextRange_SetFormattedText(ITextRange* This,ITextRange *pRange) { return This->lpVtbl->SetFormattedText(This,pRange); } static FORCEINLINE HRESULT ITextRange_GetStart(ITextRange* This,LONG *pcpFirst) { return This->lpVtbl->GetStart(This,pcpFirst); } static FORCEINLINE HRESULT ITextRange_SetStart(ITextRange* This,LONG cpFirst) { return This->lpVtbl->SetStart(This,cpFirst); } static FORCEINLINE HRESULT ITextRange_GetEnd(ITextRange* This,LONG *pcpLim) { return This->lpVtbl->GetEnd(This,pcpLim); } static FORCEINLINE HRESULT ITextRange_SetEnd(ITextRange* This,LONG cpLim) { return This->lpVtbl->SetEnd(This,cpLim); } static FORCEINLINE HRESULT ITextRange_GetFont(ITextRange* This,ITextFont **pFont) { return This->lpVtbl->GetFont(This,pFont); } static FORCEINLINE HRESULT ITextRange_SetFont(ITextRange* This,ITextFont *pFont) { return This->lpVtbl->SetFont(This,pFont); } static FORCEINLINE HRESULT ITextRange_GetPara(ITextRange* This,ITextPara **ppPara) { return This->lpVtbl->GetPara(This,ppPara); } static FORCEINLINE HRESULT ITextRange_SetPara(ITextRange* This,ITextPara *pPara) { return This->lpVtbl->SetPara(This,pPara); } static FORCEINLINE HRESULT ITextRange_GetStoryLength(ITextRange* This,LONG *pcch) { return This->lpVtbl->GetStoryLength(This,pcch); } static FORCEINLINE HRESULT ITextRange_GetStoryType(ITextRange* This,LONG *pValue) { return This->lpVtbl->GetStoryType(This,pValue); } static FORCEINLINE HRESULT ITextRange_Collapse(ITextRange* This,LONG bStart) { return This->lpVtbl->Collapse(This,bStart); } static FORCEINLINE HRESULT ITextRange_Expand(ITextRange* This,LONG Unit,LONG *pDelta) { return This->lpVtbl->Expand(This,Unit,pDelta); } static FORCEINLINE HRESULT ITextRange_GetIndex(ITextRange* This,LONG Unit,LONG *pIndex) { return This->lpVtbl->GetIndex(This,Unit,pIndex); } static FORCEINLINE HRESULT ITextRange_SetIndex(ITextRange* This,LONG Unit,LONG Index,LONG Extend) { return This->lpVtbl->SetIndex(This,Unit,Index,Extend); } static FORCEINLINE HRESULT ITextRange_SetRange(ITextRange* This,LONG anchor,LONG active) { return This->lpVtbl->SetRange(This,anchor,active); } static FORCEINLINE HRESULT ITextRange_InRange(ITextRange* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->InRange(This,pRange,pb); } static FORCEINLINE HRESULT ITextRange_InStory(ITextRange* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->InStory(This,pRange,pb); } static FORCEINLINE HRESULT ITextRange_IsEqual(ITextRange* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->IsEqual(This,pRange,pb); } static FORCEINLINE HRESULT ITextRange_Select(ITextRange* This) { return This->lpVtbl->Select(This); } static FORCEINLINE HRESULT ITextRange_StartOf(ITextRange* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->StartOf(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange_EndOf(ITextRange* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->EndOf(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextRange_Move(ITextRange* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->Move(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_MoveStart(ITextRange* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStart(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_MoveEnd(ITextRange* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEnd(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_MoveWhile(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_MoveStartWhile(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_MoveEndWhile(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_MoveUntil(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_MoveStartUntil(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_MoveEndUntil(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_FindText(ITextRange* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindText(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextRange_FindTextStart(ITextRange* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextRange_FindTextEnd(ITextRange* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextRange_Delete(ITextRange* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->Delete(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextRange_Cut(ITextRange* This,VARIANT *pVar) { return This->lpVtbl->Cut(This,pVar); } static FORCEINLINE HRESULT ITextRange_Copy(ITextRange* This,VARIANT *pVar) { return This->lpVtbl->Copy(This,pVar); } static FORCEINLINE HRESULT ITextRange_Paste(ITextRange* This,VARIANT *pVar,LONG Format) { return This->lpVtbl->Paste(This,pVar,Format); } static FORCEINLINE HRESULT ITextRange_CanPaste(ITextRange* This,VARIANT *pVar,LONG Format,LONG *pb) { return This->lpVtbl->CanPaste(This,pVar,Format,pb); } static FORCEINLINE HRESULT ITextRange_CanEdit(ITextRange* This,LONG *pb) { return This->lpVtbl->CanEdit(This,pb); } static FORCEINLINE HRESULT ITextRange_ChangeCase(ITextRange* This,LONG Type) { return This->lpVtbl->ChangeCase(This,Type); } static FORCEINLINE HRESULT ITextRange_GetPoint(ITextRange* This,LONG Type,LONG *cx,LONG *cy) { return This->lpVtbl->GetPoint(This,Type,cx,cy); } static FORCEINLINE HRESULT ITextRange_SetPoint(ITextRange* This,LONG x,LONG y,LONG Type,LONG Extend) { return This->lpVtbl->SetPoint(This,x,y,Type,Extend); } static FORCEINLINE HRESULT ITextRange_ScrollIntoView(ITextRange* This,LONG Value) { return This->lpVtbl->ScrollIntoView(This,Value); } static FORCEINLINE HRESULT ITextRange_GetEmbeddedObject(ITextRange* This,IUnknown **ppv) { return This->lpVtbl->GetEmbeddedObject(This,ppv); } #endif #endif #endif #endif /* __ITextRange_INTERFACE_DEFINED__ */ /***************************************************************************** * ITextSelection interface */ #ifndef __ITextSelection_INTERFACE_DEFINED__ #define __ITextSelection_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextSelection, 0x8cc497c1, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("8cc497c1-a1df-11ce-8098-00aa0047be5d") ITextSelection : public ITextRange { virtual HRESULT STDMETHODCALLTYPE GetFlags( LONG *pFlags) = 0; virtual HRESULT STDMETHODCALLTYPE SetFlags( LONG Flags) = 0; virtual HRESULT STDMETHODCALLTYPE GetType( LONG *pType) = 0; virtual HRESULT STDMETHODCALLTYPE MoveLeft( LONG Unit, LONG Count, LONG Extend, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveRight( LONG Unit, LONG Count, LONG Extend, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveUp( LONG Unit, LONG Count, LONG Extend, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE MoveDown( LONG Unit, LONG Count, LONG Extend, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE HomeKey( LONG Unit, LONG Extend, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE EndKey( LONG Unit, LONG Extend, LONG *pDelta) = 0; virtual HRESULT STDMETHODCALLTYPE TypeText( BSTR bstr) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextSelection, 0x8cc497c1, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d) #endif #else typedef struct ITextSelectionVtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextSelection *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextSelection *This); ULONG (STDMETHODCALLTYPE *Release)( ITextSelection *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextSelection *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextSelection *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextSelection *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextSelection *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextRange methods ***/ HRESULT (STDMETHODCALLTYPE *GetText)( ITextSelection *This, BSTR *pbstr); HRESULT (STDMETHODCALLTYPE *SetText)( ITextSelection *This, BSTR bstr); HRESULT (STDMETHODCALLTYPE *GetChar)( ITextSelection *This, LONG *pch); HRESULT (STDMETHODCALLTYPE *SetChar)( ITextSelection *This, LONG ch); HRESULT (STDMETHODCALLTYPE *GetDuplicate)( ITextSelection *This, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *GetFormattedText)( ITextSelection *This, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *SetFormattedText)( ITextSelection *This, ITextRange *pRange); HRESULT (STDMETHODCALLTYPE *GetStart)( ITextSelection *This, LONG *pcpFirst); HRESULT (STDMETHODCALLTYPE *SetStart)( ITextSelection *This, LONG cpFirst); HRESULT (STDMETHODCALLTYPE *GetEnd)( ITextSelection *This, LONG *pcpLim); HRESULT (STDMETHODCALLTYPE *SetEnd)( ITextSelection *This, LONG cpLim); HRESULT (STDMETHODCALLTYPE *GetFont)( ITextSelection *This, ITextFont **pFont); HRESULT (STDMETHODCALLTYPE *SetFont)( ITextSelection *This, ITextFont *pFont); HRESULT (STDMETHODCALLTYPE *GetPara)( ITextSelection *This, ITextPara **ppPara); HRESULT (STDMETHODCALLTYPE *SetPara)( ITextSelection *This, ITextPara *pPara); HRESULT (STDMETHODCALLTYPE *GetStoryLength)( ITextSelection *This, LONG *pcch); HRESULT (STDMETHODCALLTYPE *GetStoryType)( ITextSelection *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *Collapse)( ITextSelection *This, LONG bStart); HRESULT (STDMETHODCALLTYPE *Expand)( ITextSelection *This, LONG Unit, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *GetIndex)( ITextSelection *This, LONG Unit, LONG *pIndex); HRESULT (STDMETHODCALLTYPE *SetIndex)( ITextSelection *This, LONG Unit, LONG Index, LONG Extend); HRESULT (STDMETHODCALLTYPE *SetRange)( ITextSelection *This, LONG anchor, LONG active); HRESULT (STDMETHODCALLTYPE *InRange)( ITextSelection *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *InStory)( ITextSelection *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *IsEqual)( ITextSelection *This, ITextRange *pRange, LONG *pb); HRESULT (STDMETHODCALLTYPE *Select)( ITextSelection *This); HRESULT (STDMETHODCALLTYPE *StartOf)( ITextSelection *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *EndOf)( ITextSelection *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *Move)( ITextSelection *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStart)( ITextSelection *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEnd)( ITextSelection *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveWhile)( ITextSelection *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStartWhile)( ITextSelection *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEndWhile)( ITextSelection *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveUntil)( ITextSelection *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveStartUntil)( ITextSelection *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveEndUntil)( ITextSelection *This, VARIANT *Cset, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *FindText)( ITextSelection *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *FindTextStart)( ITextSelection *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *FindTextEnd)( ITextSelection *This, BSTR bstr, LONG cch, LONG Flags, LONG *pLength); HRESULT (STDMETHODCALLTYPE *Delete)( ITextSelection *This, LONG Unit, LONG Count, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *Cut)( ITextSelection *This, VARIANT *pVar); HRESULT (STDMETHODCALLTYPE *Copy)( ITextSelection *This, VARIANT *pVar); HRESULT (STDMETHODCALLTYPE *Paste)( ITextSelection *This, VARIANT *pVar, LONG Format); HRESULT (STDMETHODCALLTYPE *CanPaste)( ITextSelection *This, VARIANT *pVar, LONG Format, LONG *pb); HRESULT (STDMETHODCALLTYPE *CanEdit)( ITextSelection *This, LONG *pb); HRESULT (STDMETHODCALLTYPE *ChangeCase)( ITextSelection *This, LONG Type); HRESULT (STDMETHODCALLTYPE *GetPoint)( ITextSelection *This, LONG Type, LONG *cx, LONG *cy); HRESULT (STDMETHODCALLTYPE *SetPoint)( ITextSelection *This, LONG x, LONG y, LONG Type, LONG Extend); HRESULT (STDMETHODCALLTYPE *ScrollIntoView)( ITextSelection *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetEmbeddedObject)( ITextSelection *This, IUnknown **ppv); /*** ITextSelection methods ***/ HRESULT (STDMETHODCALLTYPE *GetFlags)( ITextSelection *This, LONG *pFlags); HRESULT (STDMETHODCALLTYPE *SetFlags)( ITextSelection *This, LONG Flags); HRESULT (STDMETHODCALLTYPE *GetType)( ITextSelection *This, LONG *pType); HRESULT (STDMETHODCALLTYPE *MoveLeft)( ITextSelection *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveRight)( ITextSelection *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveUp)( ITextSelection *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *MoveDown)( ITextSelection *This, LONG Unit, LONG Count, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *HomeKey)( ITextSelection *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *EndKey)( ITextSelection *This, LONG Unit, LONG Extend, LONG *pDelta); HRESULT (STDMETHODCALLTYPE *TypeText)( ITextSelection *This, BSTR bstr); END_INTERFACE } ITextSelectionVtbl; interface ITextSelection { CONST_VTBL ITextSelectionVtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextSelection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextSelection_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextSelection_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextSelection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextSelection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextSelection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextSelection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextRange methods ***/ #define ITextSelection_GetText(This,pbstr) (This)->lpVtbl->GetText(This,pbstr) #define ITextSelection_SetText(This,bstr) (This)->lpVtbl->SetText(This,bstr) #define ITextSelection_GetChar(This,pch) (This)->lpVtbl->GetChar(This,pch) #define ITextSelection_SetChar(This,ch) (This)->lpVtbl->SetChar(This,ch) #define ITextSelection_GetDuplicate(This,ppRange) (This)->lpVtbl->GetDuplicate(This,ppRange) #define ITextSelection_GetFormattedText(This,ppRange) (This)->lpVtbl->GetFormattedText(This,ppRange) #define ITextSelection_SetFormattedText(This,pRange) (This)->lpVtbl->SetFormattedText(This,pRange) #define ITextSelection_GetStart(This,pcpFirst) (This)->lpVtbl->GetStart(This,pcpFirst) #define ITextSelection_SetStart(This,cpFirst) (This)->lpVtbl->SetStart(This,cpFirst) #define ITextSelection_GetEnd(This,pcpLim) (This)->lpVtbl->GetEnd(This,pcpLim) #define ITextSelection_SetEnd(This,cpLim) (This)->lpVtbl->SetEnd(This,cpLim) #define ITextSelection_GetFont(This,pFont) (This)->lpVtbl->GetFont(This,pFont) #define ITextSelection_SetFont(This,pFont) (This)->lpVtbl->SetFont(This,pFont) #define ITextSelection_GetPara(This,ppPara) (This)->lpVtbl->GetPara(This,ppPara) #define ITextSelection_SetPara(This,pPara) (This)->lpVtbl->SetPara(This,pPara) #define ITextSelection_GetStoryLength(This,pcch) (This)->lpVtbl->GetStoryLength(This,pcch) #define ITextSelection_GetStoryType(This,pValue) (This)->lpVtbl->GetStoryType(This,pValue) #define ITextSelection_Collapse(This,bStart) (This)->lpVtbl->Collapse(This,bStart) #define ITextSelection_Expand(This,Unit,pDelta) (This)->lpVtbl->Expand(This,Unit,pDelta) #define ITextSelection_GetIndex(This,Unit,pIndex) (This)->lpVtbl->GetIndex(This,Unit,pIndex) #define ITextSelection_SetIndex(This,Unit,Index,Extend) (This)->lpVtbl->SetIndex(This,Unit,Index,Extend) #define ITextSelection_SetRange(This,anchor,active) (This)->lpVtbl->SetRange(This,anchor,active) #define ITextSelection_InRange(This,pRange,pb) (This)->lpVtbl->InRange(This,pRange,pb) #define ITextSelection_InStory(This,pRange,pb) (This)->lpVtbl->InStory(This,pRange,pb) #define ITextSelection_IsEqual(This,pRange,pb) (This)->lpVtbl->IsEqual(This,pRange,pb) #define ITextSelection_Select(This) (This)->lpVtbl->Select(This) #define ITextSelection_StartOf(This,Unit,Extend,pDelta) (This)->lpVtbl->StartOf(This,Unit,Extend,pDelta) #define ITextSelection_EndOf(This,Unit,Extend,pDelta) (This)->lpVtbl->EndOf(This,Unit,Extend,pDelta) #define ITextSelection_Move(This,Unit,Count,pDelta) (This)->lpVtbl->Move(This,Unit,Count,pDelta) #define ITextSelection_MoveStart(This,Unit,Count,pDelta) (This)->lpVtbl->MoveStart(This,Unit,Count,pDelta) #define ITextSelection_MoveEnd(This,Unit,Count,pDelta) (This)->lpVtbl->MoveEnd(This,Unit,Count,pDelta) #define ITextSelection_MoveWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveWhile(This,Cset,Count,pDelta) #define ITextSelection_MoveStartWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta) #define ITextSelection_MoveEndWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta) #define ITextSelection_MoveUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveUntil(This,Cset,Count,pDelta) #define ITextSelection_MoveStartUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta) #define ITextSelection_MoveEndUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta) #define ITextSelection_FindText(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindText(This,bstr,cch,Flags,pLength) #define ITextSelection_FindTextStart(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength) #define ITextSelection_FindTextEnd(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength) #define ITextSelection_Delete(This,Unit,Count,pDelta) (This)->lpVtbl->Delete(This,Unit,Count,pDelta) #define ITextSelection_Cut(This,pVar) (This)->lpVtbl->Cut(This,pVar) #define ITextSelection_Copy(This,pVar) (This)->lpVtbl->Copy(This,pVar) #define ITextSelection_Paste(This,pVar,Format) (This)->lpVtbl->Paste(This,pVar,Format) #define ITextSelection_CanPaste(This,pVar,Format,pb) (This)->lpVtbl->CanPaste(This,pVar,Format,pb) #define ITextSelection_CanEdit(This,pb) (This)->lpVtbl->CanEdit(This,pb) #define ITextSelection_ChangeCase(This,Type) (This)->lpVtbl->ChangeCase(This,Type) #define ITextSelection_GetPoint(This,Type,cx,cy) (This)->lpVtbl->GetPoint(This,Type,cx,cy) #define ITextSelection_SetPoint(This,x,y,Type,Extend) (This)->lpVtbl->SetPoint(This,x,y,Type,Extend) #define ITextSelection_ScrollIntoView(This,Value) (This)->lpVtbl->ScrollIntoView(This,Value) #define ITextSelection_GetEmbeddedObject(This,ppv) (This)->lpVtbl->GetEmbeddedObject(This,ppv) /*** ITextSelection methods ***/ #define ITextSelection_GetFlags(This,pFlags) (This)->lpVtbl->GetFlags(This,pFlags) #define ITextSelection_SetFlags(This,Flags) (This)->lpVtbl->SetFlags(This,Flags) #define ITextSelection_GetType(This,pType) (This)->lpVtbl->GetType(This,pType) #define ITextSelection_MoveLeft(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta) #define ITextSelection_MoveRight(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta) #define ITextSelection_MoveUp(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta) #define ITextSelection_MoveDown(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta) #define ITextSelection_HomeKey(This,Unit,Extend,pDelta) (This)->lpVtbl->HomeKey(This,Unit,Extend,pDelta) #define ITextSelection_EndKey(This,Unit,Extend,pDelta) (This)->lpVtbl->EndKey(This,Unit,Extend,pDelta) #define ITextSelection_TypeText(This,bstr) (This)->lpVtbl->TypeText(This,bstr) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextSelection_QueryInterface(ITextSelection* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextSelection_AddRef(ITextSelection* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextSelection_Release(ITextSelection* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextSelection_GetTypeInfoCount(ITextSelection* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextSelection_GetTypeInfo(ITextSelection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextSelection_GetIDsOfNames(ITextSelection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextSelection_Invoke(ITextSelection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextRange methods ***/ static FORCEINLINE HRESULT ITextSelection_GetText(ITextSelection* This,BSTR *pbstr) { return This->lpVtbl->GetText(This,pbstr); } static FORCEINLINE HRESULT ITextSelection_SetText(ITextSelection* This,BSTR bstr) { return This->lpVtbl->SetText(This,bstr); } static FORCEINLINE HRESULT ITextSelection_GetChar(ITextSelection* This,LONG *pch) { return This->lpVtbl->GetChar(This,pch); } static FORCEINLINE HRESULT ITextSelection_SetChar(ITextSelection* This,LONG ch) { return This->lpVtbl->SetChar(This,ch); } static FORCEINLINE HRESULT ITextSelection_GetDuplicate(ITextSelection* This,ITextRange **ppRange) { return This->lpVtbl->GetDuplicate(This,ppRange); } static FORCEINLINE HRESULT ITextSelection_GetFormattedText(ITextSelection* This,ITextRange **ppRange) { return This->lpVtbl->GetFormattedText(This,ppRange); } static FORCEINLINE HRESULT ITextSelection_SetFormattedText(ITextSelection* This,ITextRange *pRange) { return This->lpVtbl->SetFormattedText(This,pRange); } static FORCEINLINE HRESULT ITextSelection_GetStart(ITextSelection* This,LONG *pcpFirst) { return This->lpVtbl->GetStart(This,pcpFirst); } static FORCEINLINE HRESULT ITextSelection_SetStart(ITextSelection* This,LONG cpFirst) { return This->lpVtbl->SetStart(This,cpFirst); } static FORCEINLINE HRESULT ITextSelection_GetEnd(ITextSelection* This,LONG *pcpLim) { return This->lpVtbl->GetEnd(This,pcpLim); } static FORCEINLINE HRESULT ITextSelection_SetEnd(ITextSelection* This,LONG cpLim) { return This->lpVtbl->SetEnd(This,cpLim); } static FORCEINLINE HRESULT ITextSelection_GetFont(ITextSelection* This,ITextFont **pFont) { return This->lpVtbl->GetFont(This,pFont); } static FORCEINLINE HRESULT ITextSelection_SetFont(ITextSelection* This,ITextFont *pFont) { return This->lpVtbl->SetFont(This,pFont); } static FORCEINLINE HRESULT ITextSelection_GetPara(ITextSelection* This,ITextPara **ppPara) { return This->lpVtbl->GetPara(This,ppPara); } static FORCEINLINE HRESULT ITextSelection_SetPara(ITextSelection* This,ITextPara *pPara) { return This->lpVtbl->SetPara(This,pPara); } static FORCEINLINE HRESULT ITextSelection_GetStoryLength(ITextSelection* This,LONG *pcch) { return This->lpVtbl->GetStoryLength(This,pcch); } static FORCEINLINE HRESULT ITextSelection_GetStoryType(ITextSelection* This,LONG *pValue) { return This->lpVtbl->GetStoryType(This,pValue); } static FORCEINLINE HRESULT ITextSelection_Collapse(ITextSelection* This,LONG bStart) { return This->lpVtbl->Collapse(This,bStart); } static FORCEINLINE HRESULT ITextSelection_Expand(ITextSelection* This,LONG Unit,LONG *pDelta) { return This->lpVtbl->Expand(This,Unit,pDelta); } static FORCEINLINE HRESULT ITextSelection_GetIndex(ITextSelection* This,LONG Unit,LONG *pIndex) { return This->lpVtbl->GetIndex(This,Unit,pIndex); } static FORCEINLINE HRESULT ITextSelection_SetIndex(ITextSelection* This,LONG Unit,LONG Index,LONG Extend) { return This->lpVtbl->SetIndex(This,Unit,Index,Extend); } static FORCEINLINE HRESULT ITextSelection_SetRange(ITextSelection* This,LONG anchor,LONG active) { return This->lpVtbl->SetRange(This,anchor,active); } static FORCEINLINE HRESULT ITextSelection_InRange(ITextSelection* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->InRange(This,pRange,pb); } static FORCEINLINE HRESULT ITextSelection_InStory(ITextSelection* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->InStory(This,pRange,pb); } static FORCEINLINE HRESULT ITextSelection_IsEqual(ITextSelection* This,ITextRange *pRange,LONG *pb) { return This->lpVtbl->IsEqual(This,pRange,pb); } static FORCEINLINE HRESULT ITextSelection_Select(ITextSelection* This) { return This->lpVtbl->Select(This); } static FORCEINLINE HRESULT ITextSelection_StartOf(ITextSelection* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->StartOf(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection_EndOf(ITextSelection* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->EndOf(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection_Move(ITextSelection* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->Move(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveStart(ITextSelection* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStart(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveEnd(ITextSelection* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEnd(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveWhile(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveStartWhile(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveEndWhile(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveUntil(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveStartUntil(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveEndUntil(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) { return This->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_FindText(ITextSelection* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindText(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextSelection_FindTextStart(ITextSelection* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextSelection_FindTextEnd(ITextSelection* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) { return This->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength); } static FORCEINLINE HRESULT ITextSelection_Delete(ITextSelection* This,LONG Unit,LONG Count,LONG *pDelta) { return This->lpVtbl->Delete(This,Unit,Count,pDelta); } static FORCEINLINE HRESULT ITextSelection_Cut(ITextSelection* This,VARIANT *pVar) { return This->lpVtbl->Cut(This,pVar); } static FORCEINLINE HRESULT ITextSelection_Copy(ITextSelection* This,VARIANT *pVar) { return This->lpVtbl->Copy(This,pVar); } static FORCEINLINE HRESULT ITextSelection_Paste(ITextSelection* This,VARIANT *pVar,LONG Format) { return This->lpVtbl->Paste(This,pVar,Format); } static FORCEINLINE HRESULT ITextSelection_CanPaste(ITextSelection* This,VARIANT *pVar,LONG Format,LONG *pb) { return This->lpVtbl->CanPaste(This,pVar,Format,pb); } static FORCEINLINE HRESULT ITextSelection_CanEdit(ITextSelection* This,LONG *pb) { return This->lpVtbl->CanEdit(This,pb); } static FORCEINLINE HRESULT ITextSelection_ChangeCase(ITextSelection* This,LONG Type) { return This->lpVtbl->ChangeCase(This,Type); } static FORCEINLINE HRESULT ITextSelection_GetPoint(ITextSelection* This,LONG Type,LONG *cx,LONG *cy) { return This->lpVtbl->GetPoint(This,Type,cx,cy); } static FORCEINLINE HRESULT ITextSelection_SetPoint(ITextSelection* This,LONG x,LONG y,LONG Type,LONG Extend) { return This->lpVtbl->SetPoint(This,x,y,Type,Extend); } static FORCEINLINE HRESULT ITextSelection_ScrollIntoView(ITextSelection* This,LONG Value) { return This->lpVtbl->ScrollIntoView(This,Value); } static FORCEINLINE HRESULT ITextSelection_GetEmbeddedObject(ITextSelection* This,IUnknown **ppv) { return This->lpVtbl->GetEmbeddedObject(This,ppv); } /*** ITextSelection methods ***/ static FORCEINLINE HRESULT ITextSelection_GetFlags(ITextSelection* This,LONG *pFlags) { return This->lpVtbl->GetFlags(This,pFlags); } static FORCEINLINE HRESULT ITextSelection_SetFlags(ITextSelection* This,LONG Flags) { return This->lpVtbl->SetFlags(This,Flags); } static FORCEINLINE HRESULT ITextSelection_GetType(ITextSelection* This,LONG *pType) { return This->lpVtbl->GetType(This,pType); } static FORCEINLINE HRESULT ITextSelection_MoveLeft(ITextSelection* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveRight(ITextSelection* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveUp(ITextSelection* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection_MoveDown(ITextSelection* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) { return This->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection_HomeKey(ITextSelection* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->HomeKey(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection_EndKey(ITextSelection* This,LONG Unit,LONG Extend,LONG *pDelta) { return This->lpVtbl->EndKey(This,Unit,Extend,pDelta); } static FORCEINLINE HRESULT ITextSelection_TypeText(ITextSelection* This,BSTR bstr) { return This->lpVtbl->TypeText(This,bstr); } #endif #endif #endif #endif /* __ITextSelection_INTERFACE_DEFINED__ */ /***************************************************************************** * ITextFont interface */ #ifndef __ITextFont_INTERFACE_DEFINED__ #define __ITextFont_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextFont, 0x8cc497c3, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("8cc497c3-a1df-11ce-8098-00aa0047be5d") ITextFont : public IDispatch { virtual HRESULT STDMETHODCALLTYPE GetDuplicate( ITextFont **ppFont) = 0; virtual HRESULT STDMETHODCALLTYPE SetDuplicate( ITextFont *pFont) = 0; virtual HRESULT STDMETHODCALLTYPE CanChange( LONG *pB) = 0; virtual HRESULT STDMETHODCALLTYPE IsEqual( ITextFont *pFont, LONG *pB) = 0; virtual HRESULT STDMETHODCALLTYPE Reset( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetStyle( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetStyle( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetAllCaps( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetAllCaps( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetAnimation( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetAnimation( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetBackColor( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetBackColor( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetBold( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetBold( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetEmboss( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetEmboss( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetForeColor( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetForeColor( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetHidden( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetHidden( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetEngrave( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetEngrave( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetItalic( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetItalic( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetKerning( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetKerning( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetLanguageID( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetLanguageID( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetName( BSTR *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetName( BSTR Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetOutline( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetOutline( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetPosition( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetPosition( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetProtected( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetProtected( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetShadow( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetShadow( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetSize( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetSize( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetSmallCaps( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetSmallCaps( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetSpacing( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetSpacing( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetStrikeThrough( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetStrikeThrough( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetSubscript( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetSubscript( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetSuperscript( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetSuperscript( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetUnderline( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetUnderline( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetWeight( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetWeight( LONG Value) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextFont, 0x8cc497c3, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d) #endif #else typedef struct ITextFontVtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextFont *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextFont *This); ULONG (STDMETHODCALLTYPE *Release)( ITextFont *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextFont *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextFont *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextFont *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextFont *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextFont methods ***/ HRESULT (STDMETHODCALLTYPE *GetDuplicate)( ITextFont *This, ITextFont **ppFont); HRESULT (STDMETHODCALLTYPE *SetDuplicate)( ITextFont *This, ITextFont *pFont); HRESULT (STDMETHODCALLTYPE *CanChange)( ITextFont *This, LONG *pB); HRESULT (STDMETHODCALLTYPE *IsEqual)( ITextFont *This, ITextFont *pFont, LONG *pB); HRESULT (STDMETHODCALLTYPE *Reset)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetStyle)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetStyle)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetAllCaps)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetAllCaps)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetAnimation)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetAnimation)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetBackColor)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetBackColor)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetBold)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetBold)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetEmboss)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetEmboss)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetForeColor)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetForeColor)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetHidden)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetHidden)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetEngrave)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetEngrave)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetItalic)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetItalic)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetKerning)( ITextFont *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetKerning)( ITextFont *This, float Value); HRESULT (STDMETHODCALLTYPE *GetLanguageID)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetLanguageID)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetName)( ITextFont *This, BSTR *pValue); HRESULT (STDMETHODCALLTYPE *SetName)( ITextFont *This, BSTR Value); HRESULT (STDMETHODCALLTYPE *GetOutline)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetOutline)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetPosition)( ITextFont *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetPosition)( ITextFont *This, float Value); HRESULT (STDMETHODCALLTYPE *GetProtected)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetProtected)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetShadow)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetShadow)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetSize)( ITextFont *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetSize)( ITextFont *This, float Value); HRESULT (STDMETHODCALLTYPE *GetSmallCaps)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetSmallCaps)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetSpacing)( ITextFont *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetSpacing)( ITextFont *This, float Value); HRESULT (STDMETHODCALLTYPE *GetStrikeThrough)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetStrikeThrough)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetSubscript)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetSubscript)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetSuperscript)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetSuperscript)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetUnderline)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetUnderline)( ITextFont *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetWeight)( ITextFont *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetWeight)( ITextFont *This, LONG Value); END_INTERFACE } ITextFontVtbl; interface ITextFont { CONST_VTBL ITextFontVtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextFont_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextFont_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextFont_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextFont_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextFont_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextFont_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextFont_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextFont methods ***/ #define ITextFont_GetDuplicate(This,ppFont) (This)->lpVtbl->GetDuplicate(This,ppFont) #define ITextFont_SetDuplicate(This,pFont) (This)->lpVtbl->SetDuplicate(This,pFont) #define ITextFont_CanChange(This,pB) (This)->lpVtbl->CanChange(This,pB) #define ITextFont_IsEqual(This,pFont,pB) (This)->lpVtbl->IsEqual(This,pFont,pB) #define ITextFont_Reset(This,Value) (This)->lpVtbl->Reset(This,Value) #define ITextFont_GetStyle(This,pValue) (This)->lpVtbl->GetStyle(This,pValue) #define ITextFont_SetStyle(This,Value) (This)->lpVtbl->SetStyle(This,Value) #define ITextFont_GetAllCaps(This,pValue) (This)->lpVtbl->GetAllCaps(This,pValue) #define ITextFont_SetAllCaps(This,Value) (This)->lpVtbl->SetAllCaps(This,Value) #define ITextFont_GetAnimation(This,pValue) (This)->lpVtbl->GetAnimation(This,pValue) #define ITextFont_SetAnimation(This,Value) (This)->lpVtbl->SetAnimation(This,Value) #define ITextFont_GetBackColor(This,pValue) (This)->lpVtbl->GetBackColor(This,pValue) #define ITextFont_SetBackColor(This,Value) (This)->lpVtbl->SetBackColor(This,Value) #define ITextFont_GetBold(This,pValue) (This)->lpVtbl->GetBold(This,pValue) #define ITextFont_SetBold(This,Value) (This)->lpVtbl->SetBold(This,Value) #define ITextFont_GetEmboss(This,pValue) (This)->lpVtbl->GetEmboss(This,pValue) #define ITextFont_SetEmboss(This,Value) (This)->lpVtbl->SetEmboss(This,Value) #define ITextFont_GetForeColor(This,pValue) (This)->lpVtbl->GetForeColor(This,pValue) #define ITextFont_SetForeColor(This,Value) (This)->lpVtbl->SetForeColor(This,Value) #define ITextFont_GetHidden(This,pValue) (This)->lpVtbl->GetHidden(This,pValue) #define ITextFont_SetHidden(This,Value) (This)->lpVtbl->SetHidden(This,Value) #define ITextFont_GetEngrave(This,pValue) (This)->lpVtbl->GetEngrave(This,pValue) #define ITextFont_SetEngrave(This,Value) (This)->lpVtbl->SetEngrave(This,Value) #define ITextFont_GetItalic(This,pValue) (This)->lpVtbl->GetItalic(This,pValue) #define ITextFont_SetItalic(This,Value) (This)->lpVtbl->SetItalic(This,Value) #define ITextFont_GetKerning(This,pValue) (This)->lpVtbl->GetKerning(This,pValue) #define ITextFont_SetKerning(This,Value) (This)->lpVtbl->SetKerning(This,Value) #define ITextFont_GetLanguageID(This,pValue) (This)->lpVtbl->GetLanguageID(This,pValue) #define ITextFont_SetLanguageID(This,Value) (This)->lpVtbl->SetLanguageID(This,Value) #define ITextFont_GetName(This,pValue) (This)->lpVtbl->GetName(This,pValue) #define ITextFont_SetName(This,Value) (This)->lpVtbl->SetName(This,Value) #define ITextFont_GetOutline(This,pValue) (This)->lpVtbl->GetOutline(This,pValue) #define ITextFont_SetOutline(This,Value) (This)->lpVtbl->SetOutline(This,Value) #define ITextFont_GetPosition(This,pValue) (This)->lpVtbl->GetPosition(This,pValue) #define ITextFont_SetPosition(This,Value) (This)->lpVtbl->SetPosition(This,Value) #define ITextFont_GetProtected(This,pValue) (This)->lpVtbl->GetProtected(This,pValue) #define ITextFont_SetProtected(This,Value) (This)->lpVtbl->SetProtected(This,Value) #define ITextFont_GetShadow(This,pValue) (This)->lpVtbl->GetShadow(This,pValue) #define ITextFont_SetShadow(This,Value) (This)->lpVtbl->SetShadow(This,Value) #define ITextFont_GetSize(This,pValue) (This)->lpVtbl->GetSize(This,pValue) #define ITextFont_SetSize(This,Value) (This)->lpVtbl->SetSize(This,Value) #define ITextFont_GetSmallCaps(This,pValue) (This)->lpVtbl->GetSmallCaps(This,pValue) #define ITextFont_SetSmallCaps(This,Value) (This)->lpVtbl->SetSmallCaps(This,Value) #define ITextFont_GetSpacing(This,pValue) (This)->lpVtbl->GetSpacing(This,pValue) #define ITextFont_SetSpacing(This,Value) (This)->lpVtbl->SetSpacing(This,Value) #define ITextFont_GetStrikeThrough(This,pValue) (This)->lpVtbl->GetStrikeThrough(This,pValue) #define ITextFont_SetStrikeThrough(This,Value) (This)->lpVtbl->SetStrikeThrough(This,Value) #define ITextFont_GetSubscript(This,pValue) (This)->lpVtbl->GetSubscript(This,pValue) #define ITextFont_SetSubscript(This,Value) (This)->lpVtbl->SetSubscript(This,Value) #define ITextFont_GetSuperscript(This,pValue) (This)->lpVtbl->GetSuperscript(This,pValue) #define ITextFont_SetSuperscript(This,Value) (This)->lpVtbl->SetSuperscript(This,Value) #define ITextFont_GetUnderline(This,pValue) (This)->lpVtbl->GetUnderline(This,pValue) #define ITextFont_SetUnderline(This,Value) (This)->lpVtbl->SetUnderline(This,Value) #define ITextFont_GetWeight(This,pValue) (This)->lpVtbl->GetWeight(This,pValue) #define ITextFont_SetWeight(This,Value) (This)->lpVtbl->SetWeight(This,Value) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextFont_QueryInterface(ITextFont* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextFont_AddRef(ITextFont* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextFont_Release(ITextFont* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextFont_GetTypeInfoCount(ITextFont* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextFont_GetTypeInfo(ITextFont* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextFont_GetIDsOfNames(ITextFont* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextFont_Invoke(ITextFont* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextFont methods ***/ static FORCEINLINE HRESULT ITextFont_GetDuplicate(ITextFont* This,ITextFont **ppFont) { return This->lpVtbl->GetDuplicate(This,ppFont); } static FORCEINLINE HRESULT ITextFont_SetDuplicate(ITextFont* This,ITextFont *pFont) { return This->lpVtbl->SetDuplicate(This,pFont); } static FORCEINLINE HRESULT ITextFont_CanChange(ITextFont* This,LONG *pB) { return This->lpVtbl->CanChange(This,pB); } static FORCEINLINE HRESULT ITextFont_IsEqual(ITextFont* This,ITextFont *pFont,LONG *pB) { return This->lpVtbl->IsEqual(This,pFont,pB); } static FORCEINLINE HRESULT ITextFont_Reset(ITextFont* This,LONG Value) { return This->lpVtbl->Reset(This,Value); } static FORCEINLINE HRESULT ITextFont_GetStyle(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetStyle(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetStyle(ITextFont* This,LONG Value) { return This->lpVtbl->SetStyle(This,Value); } static FORCEINLINE HRESULT ITextFont_GetAllCaps(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetAllCaps(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetAllCaps(ITextFont* This,LONG Value) { return This->lpVtbl->SetAllCaps(This,Value); } static FORCEINLINE HRESULT ITextFont_GetAnimation(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetAnimation(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetAnimation(ITextFont* This,LONG Value) { return This->lpVtbl->SetAnimation(This,Value); } static FORCEINLINE HRESULT ITextFont_GetBackColor(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetBackColor(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetBackColor(ITextFont* This,LONG Value) { return This->lpVtbl->SetBackColor(This,Value); } static FORCEINLINE HRESULT ITextFont_GetBold(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetBold(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetBold(ITextFont* This,LONG Value) { return This->lpVtbl->SetBold(This,Value); } static FORCEINLINE HRESULT ITextFont_GetEmboss(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetEmboss(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetEmboss(ITextFont* This,LONG Value) { return This->lpVtbl->SetEmboss(This,Value); } static FORCEINLINE HRESULT ITextFont_GetForeColor(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetForeColor(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetForeColor(ITextFont* This,LONG Value) { return This->lpVtbl->SetForeColor(This,Value); } static FORCEINLINE HRESULT ITextFont_GetHidden(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetHidden(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetHidden(ITextFont* This,LONG Value) { return This->lpVtbl->SetHidden(This,Value); } static FORCEINLINE HRESULT ITextFont_GetEngrave(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetEngrave(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetEngrave(ITextFont* This,LONG Value) { return This->lpVtbl->SetEngrave(This,Value); } static FORCEINLINE HRESULT ITextFont_GetItalic(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetItalic(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetItalic(ITextFont* This,LONG Value) { return This->lpVtbl->SetItalic(This,Value); } static FORCEINLINE HRESULT ITextFont_GetKerning(ITextFont* This,float *pValue) { return This->lpVtbl->GetKerning(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetKerning(ITextFont* This,float Value) { return This->lpVtbl->SetKerning(This,Value); } static FORCEINLINE HRESULT ITextFont_GetLanguageID(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetLanguageID(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetLanguageID(ITextFont* This,LONG Value) { return This->lpVtbl->SetLanguageID(This,Value); } static FORCEINLINE HRESULT ITextFont_GetName(ITextFont* This,BSTR *pValue) { return This->lpVtbl->GetName(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetName(ITextFont* This,BSTR Value) { return This->lpVtbl->SetName(This,Value); } static FORCEINLINE HRESULT ITextFont_GetOutline(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetOutline(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetOutline(ITextFont* This,LONG Value) { return This->lpVtbl->SetOutline(This,Value); } static FORCEINLINE HRESULT ITextFont_GetPosition(ITextFont* This,float *pValue) { return This->lpVtbl->GetPosition(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetPosition(ITextFont* This,float Value) { return This->lpVtbl->SetPosition(This,Value); } static FORCEINLINE HRESULT ITextFont_GetProtected(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetProtected(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetProtected(ITextFont* This,LONG Value) { return This->lpVtbl->SetProtected(This,Value); } static FORCEINLINE HRESULT ITextFont_GetShadow(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetShadow(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetShadow(ITextFont* This,LONG Value) { return This->lpVtbl->SetShadow(This,Value); } static FORCEINLINE HRESULT ITextFont_GetSize(ITextFont* This,float *pValue) { return This->lpVtbl->GetSize(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetSize(ITextFont* This,float Value) { return This->lpVtbl->SetSize(This,Value); } static FORCEINLINE HRESULT ITextFont_GetSmallCaps(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetSmallCaps(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetSmallCaps(ITextFont* This,LONG Value) { return This->lpVtbl->SetSmallCaps(This,Value); } static FORCEINLINE HRESULT ITextFont_GetSpacing(ITextFont* This,float *pValue) { return This->lpVtbl->GetSpacing(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetSpacing(ITextFont* This,float Value) { return This->lpVtbl->SetSpacing(This,Value); } static FORCEINLINE HRESULT ITextFont_GetStrikeThrough(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetStrikeThrough(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetStrikeThrough(ITextFont* This,LONG Value) { return This->lpVtbl->SetStrikeThrough(This,Value); } static FORCEINLINE HRESULT ITextFont_GetSubscript(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetSubscript(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetSubscript(ITextFont* This,LONG Value) { return This->lpVtbl->SetSubscript(This,Value); } static FORCEINLINE HRESULT ITextFont_GetSuperscript(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetSuperscript(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetSuperscript(ITextFont* This,LONG Value) { return This->lpVtbl->SetSuperscript(This,Value); } static FORCEINLINE HRESULT ITextFont_GetUnderline(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetUnderline(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetUnderline(ITextFont* This,LONG Value) { return This->lpVtbl->SetUnderline(This,Value); } static FORCEINLINE HRESULT ITextFont_GetWeight(ITextFont* This,LONG *pValue) { return This->lpVtbl->GetWeight(This,pValue); } static FORCEINLINE HRESULT ITextFont_SetWeight(ITextFont* This,LONG Value) { return This->lpVtbl->SetWeight(This,Value); } #endif #endif #endif #endif /* __ITextFont_INTERFACE_DEFINED__ */ /***************************************************************************** * ITextPara interface */ #ifndef __ITextPara_INTERFACE_DEFINED__ #define __ITextPara_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextPara, 0x8cc497c4, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("8cc497c4-a1df-11ce-8098-00aa0047be5d") ITextPara : public IDispatch { virtual HRESULT STDMETHODCALLTYPE GetDuplicate( ITextPara **ppPara) = 0; virtual HRESULT STDMETHODCALLTYPE SetDuplicate( ITextPara *pPara) = 0; virtual HRESULT STDMETHODCALLTYPE CanChange( LONG *pB) = 0; virtual HRESULT STDMETHODCALLTYPE IsEqual( ITextPara *pPara, LONG *pB) = 0; virtual HRESULT STDMETHODCALLTYPE Reset( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetStyle( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetStyle( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetAlignment( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetAlignment( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetHyphenation( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetHyphenation( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetFirstLineIndent( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE GetKeepTogether( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetKeepTogether( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetKeepWithNext( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetKeepWithNext( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetLeftIndent( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE GetLineSpacing( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE GetLineSpacingRule( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE GetListAlignment( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetListAlignment( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetListLevelIndex( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetListLevelIndex( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetListStart( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetListStart( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetListTab( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetListTab( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetListType( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetListType( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetNoLineNumber( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetNoLineNumber( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetPageBreakBefore( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetPageBreakBefore( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetRightIndent( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetRightIndent( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE SetIndents( float StartIndent, float LeftIndent, float RightIndent) = 0; virtual HRESULT STDMETHODCALLTYPE SetLineSpacing( LONG LineSpacingRule, float LineSpacing) = 0; virtual HRESULT STDMETHODCALLTYPE GetSpaceAfter( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetSpaceAfter( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetSpaceBefore( float *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetSpaceBefore( float Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetWidowControl( LONG *pValue) = 0; virtual HRESULT STDMETHODCALLTYPE SetWidowControl( LONG Value) = 0; virtual HRESULT STDMETHODCALLTYPE GetTabCount( LONG *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE AddTab( float tbPos, LONG tbAlign, LONG tbLeader) = 0; virtual HRESULT STDMETHODCALLTYPE ClearAllTabs( ) = 0; virtual HRESULT STDMETHODCALLTYPE DeleteTab( float tbPos) = 0; virtual HRESULT STDMETHODCALLTYPE GetTab( LONG iTab, float *ptbPos, LONG *ptbAlign, LONG *ptbLeader) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextPara, 0x8cc497c4, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d) #endif #else typedef struct ITextParaVtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextPara *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextPara *This); ULONG (STDMETHODCALLTYPE *Release)( ITextPara *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextPara *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextPara *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextPara *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextPara *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextPara methods ***/ HRESULT (STDMETHODCALLTYPE *GetDuplicate)( ITextPara *This, ITextPara **ppPara); HRESULT (STDMETHODCALLTYPE *SetDuplicate)( ITextPara *This, ITextPara *pPara); HRESULT (STDMETHODCALLTYPE *CanChange)( ITextPara *This, LONG *pB); HRESULT (STDMETHODCALLTYPE *IsEqual)( ITextPara *This, ITextPara *pPara, LONG *pB); HRESULT (STDMETHODCALLTYPE *Reset)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetStyle)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetStyle)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetAlignment)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetAlignment)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetHyphenation)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetHyphenation)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetFirstLineIndent)( ITextPara *This, float *pValue); HRESULT (STDMETHODCALLTYPE *GetKeepTogether)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetKeepTogether)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetKeepWithNext)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetKeepWithNext)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetLeftIndent)( ITextPara *This, float *pValue); HRESULT (STDMETHODCALLTYPE *GetLineSpacing)( ITextPara *This, float *pValue); HRESULT (STDMETHODCALLTYPE *GetLineSpacingRule)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *GetListAlignment)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetListAlignment)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetListLevelIndex)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetListLevelIndex)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetListStart)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetListStart)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetListTab)( ITextPara *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetListTab)( ITextPara *This, float Value); HRESULT (STDMETHODCALLTYPE *GetListType)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetListType)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetNoLineNumber)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetNoLineNumber)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetPageBreakBefore)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetPageBreakBefore)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetRightIndent)( ITextPara *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetRightIndent)( ITextPara *This, float Value); HRESULT (STDMETHODCALLTYPE *SetIndents)( ITextPara *This, float StartIndent, float LeftIndent, float RightIndent); HRESULT (STDMETHODCALLTYPE *SetLineSpacing)( ITextPara *This, LONG LineSpacingRule, float LineSpacing); HRESULT (STDMETHODCALLTYPE *GetSpaceAfter)( ITextPara *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetSpaceAfter)( ITextPara *This, float Value); HRESULT (STDMETHODCALLTYPE *GetSpaceBefore)( ITextPara *This, float *pValue); HRESULT (STDMETHODCALLTYPE *SetSpaceBefore)( ITextPara *This, float Value); HRESULT (STDMETHODCALLTYPE *GetWidowControl)( ITextPara *This, LONG *pValue); HRESULT (STDMETHODCALLTYPE *SetWidowControl)( ITextPara *This, LONG Value); HRESULT (STDMETHODCALLTYPE *GetTabCount)( ITextPara *This, LONG *pCount); HRESULT (STDMETHODCALLTYPE *AddTab)( ITextPara *This, float tbPos, LONG tbAlign, LONG tbLeader); HRESULT (STDMETHODCALLTYPE *ClearAllTabs)( ITextPara *This); HRESULT (STDMETHODCALLTYPE *DeleteTab)( ITextPara *This, float tbPos); HRESULT (STDMETHODCALLTYPE *GetTab)( ITextPara *This, LONG iTab, float *ptbPos, LONG *ptbAlign, LONG *ptbLeader); END_INTERFACE } ITextParaVtbl; interface ITextPara { CONST_VTBL ITextParaVtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextPara_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextPara_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextPara_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextPara_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextPara_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextPara_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextPara_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextPara methods ***/ #define ITextPara_GetDuplicate(This,ppPara) (This)->lpVtbl->GetDuplicate(This,ppPara) #define ITextPara_SetDuplicate(This,pPara) (This)->lpVtbl->SetDuplicate(This,pPara) #define ITextPara_CanChange(This,pB) (This)->lpVtbl->CanChange(This,pB) #define ITextPara_IsEqual(This,pPara,pB) (This)->lpVtbl->IsEqual(This,pPara,pB) #define ITextPara_Reset(This,Value) (This)->lpVtbl->Reset(This,Value) #define ITextPara_GetStyle(This,pValue) (This)->lpVtbl->GetStyle(This,pValue) #define ITextPara_SetStyle(This,Value) (This)->lpVtbl->SetStyle(This,Value) #define ITextPara_GetAlignment(This,pValue) (This)->lpVtbl->GetAlignment(This,pValue) #define ITextPara_SetAlignment(This,Value) (This)->lpVtbl->SetAlignment(This,Value) #define ITextPara_GetHyphenation(This,pValue) (This)->lpVtbl->GetHyphenation(This,pValue) #define ITextPara_SetHyphenation(This,Value) (This)->lpVtbl->SetHyphenation(This,Value) #define ITextPara_GetFirstLineIndent(This,pValue) (This)->lpVtbl->GetFirstLineIndent(This,pValue) #define ITextPara_GetKeepTogether(This,pValue) (This)->lpVtbl->GetKeepTogether(This,pValue) #define ITextPara_SetKeepTogether(This,Value) (This)->lpVtbl->SetKeepTogether(This,Value) #define ITextPara_GetKeepWithNext(This,pValue) (This)->lpVtbl->GetKeepWithNext(This,pValue) #define ITextPara_SetKeepWithNext(This,Value) (This)->lpVtbl->SetKeepWithNext(This,Value) #define ITextPara_GetLeftIndent(This,pValue) (This)->lpVtbl->GetLeftIndent(This,pValue) #define ITextPara_GetLineSpacing(This,pValue) (This)->lpVtbl->GetLineSpacing(This,pValue) #define ITextPara_GetLineSpacingRule(This,pValue) (This)->lpVtbl->GetLineSpacingRule(This,pValue) #define ITextPara_GetListAlignment(This,pValue) (This)->lpVtbl->GetListAlignment(This,pValue) #define ITextPara_SetListAlignment(This,Value) (This)->lpVtbl->SetListAlignment(This,Value) #define ITextPara_GetListLevelIndex(This,pValue) (This)->lpVtbl->GetListLevelIndex(This,pValue) #define ITextPara_SetListLevelIndex(This,Value) (This)->lpVtbl->SetListLevelIndex(This,Value) #define ITextPara_GetListStart(This,pValue) (This)->lpVtbl->GetListStart(This,pValue) #define ITextPara_SetListStart(This,Value) (This)->lpVtbl->SetListStart(This,Value) #define ITextPara_GetListTab(This,pValue) (This)->lpVtbl->GetListTab(This,pValue) #define ITextPara_SetListTab(This,Value) (This)->lpVtbl->SetListTab(This,Value) #define ITextPara_GetListType(This,pValue) (This)->lpVtbl->GetListType(This,pValue) #define ITextPara_SetListType(This,Value) (This)->lpVtbl->SetListType(This,Value) #define ITextPara_GetNoLineNumber(This,pValue) (This)->lpVtbl->GetNoLineNumber(This,pValue) #define ITextPara_SetNoLineNumber(This,Value) (This)->lpVtbl->SetNoLineNumber(This,Value) #define ITextPara_GetPageBreakBefore(This,pValue) (This)->lpVtbl->GetPageBreakBefore(This,pValue) #define ITextPara_SetPageBreakBefore(This,Value) (This)->lpVtbl->SetPageBreakBefore(This,Value) #define ITextPara_GetRightIndent(This,pValue) (This)->lpVtbl->GetRightIndent(This,pValue) #define ITextPara_SetRightIndent(This,Value) (This)->lpVtbl->SetRightIndent(This,Value) #define ITextPara_SetIndents(This,StartIndent,LeftIndent,RightIndent) (This)->lpVtbl->SetIndents(This,StartIndent,LeftIndent,RightIndent) #define ITextPara_SetLineSpacing(This,LineSpacingRule,LineSpacing) (This)->lpVtbl->SetLineSpacing(This,LineSpacingRule,LineSpacing) #define ITextPara_GetSpaceAfter(This,pValue) (This)->lpVtbl->GetSpaceAfter(This,pValue) #define ITextPara_SetSpaceAfter(This,Value) (This)->lpVtbl->SetSpaceAfter(This,Value) #define ITextPara_GetSpaceBefore(This,pValue) (This)->lpVtbl->GetSpaceBefore(This,pValue) #define ITextPara_SetSpaceBefore(This,Value) (This)->lpVtbl->SetSpaceBefore(This,Value) #define ITextPara_GetWidowControl(This,pValue) (This)->lpVtbl->GetWidowControl(This,pValue) #define ITextPara_SetWidowControl(This,Value) (This)->lpVtbl->SetWidowControl(This,Value) #define ITextPara_GetTabCount(This,pCount) (This)->lpVtbl->GetTabCount(This,pCount) #define ITextPara_AddTab(This,tbPos,tbAlign,tbLeader) (This)->lpVtbl->AddTab(This,tbPos,tbAlign,tbLeader) #define ITextPara_ClearAllTabs(This) (This)->lpVtbl->ClearAllTabs(This) #define ITextPara_DeleteTab(This,tbPos) (This)->lpVtbl->DeleteTab(This,tbPos) #define ITextPara_GetTab(This,iTab,ptbPos,ptbAlign,ptbLeader) (This)->lpVtbl->GetTab(This,iTab,ptbPos,ptbAlign,ptbLeader) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextPara_QueryInterface(ITextPara* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextPara_AddRef(ITextPara* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextPara_Release(ITextPara* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextPara_GetTypeInfoCount(ITextPara* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextPara_GetTypeInfo(ITextPara* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextPara_GetIDsOfNames(ITextPara* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextPara_Invoke(ITextPara* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextPara methods ***/ static FORCEINLINE HRESULT ITextPara_GetDuplicate(ITextPara* This,ITextPara **ppPara) { return This->lpVtbl->GetDuplicate(This,ppPara); } static FORCEINLINE HRESULT ITextPara_SetDuplicate(ITextPara* This,ITextPara *pPara) { return This->lpVtbl->SetDuplicate(This,pPara); } static FORCEINLINE HRESULT ITextPara_CanChange(ITextPara* This,LONG *pB) { return This->lpVtbl->CanChange(This,pB); } static FORCEINLINE HRESULT ITextPara_IsEqual(ITextPara* This,ITextPara *pPara,LONG *pB) { return This->lpVtbl->IsEqual(This,pPara,pB); } static FORCEINLINE HRESULT ITextPara_Reset(ITextPara* This,LONG Value) { return This->lpVtbl->Reset(This,Value); } static FORCEINLINE HRESULT ITextPara_GetStyle(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetStyle(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetStyle(ITextPara* This,LONG Value) { return This->lpVtbl->SetStyle(This,Value); } static FORCEINLINE HRESULT ITextPara_GetAlignment(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetAlignment(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetAlignment(ITextPara* This,LONG Value) { return This->lpVtbl->SetAlignment(This,Value); } static FORCEINLINE HRESULT ITextPara_GetHyphenation(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetHyphenation(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetHyphenation(ITextPara* This,LONG Value) { return This->lpVtbl->SetHyphenation(This,Value); } static FORCEINLINE HRESULT ITextPara_GetFirstLineIndent(ITextPara* This,float *pValue) { return This->lpVtbl->GetFirstLineIndent(This,pValue); } static FORCEINLINE HRESULT ITextPara_GetKeepTogether(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetKeepTogether(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetKeepTogether(ITextPara* This,LONG Value) { return This->lpVtbl->SetKeepTogether(This,Value); } static FORCEINLINE HRESULT ITextPara_GetKeepWithNext(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetKeepWithNext(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetKeepWithNext(ITextPara* This,LONG Value) { return This->lpVtbl->SetKeepWithNext(This,Value); } static FORCEINLINE HRESULT ITextPara_GetLeftIndent(ITextPara* This,float *pValue) { return This->lpVtbl->GetLeftIndent(This,pValue); } static FORCEINLINE HRESULT ITextPara_GetLineSpacing(ITextPara* This,float *pValue) { return This->lpVtbl->GetLineSpacing(This,pValue); } static FORCEINLINE HRESULT ITextPara_GetLineSpacingRule(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetLineSpacingRule(This,pValue); } static FORCEINLINE HRESULT ITextPara_GetListAlignment(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetListAlignment(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetListAlignment(ITextPara* This,LONG Value) { return This->lpVtbl->SetListAlignment(This,Value); } static FORCEINLINE HRESULT ITextPara_GetListLevelIndex(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetListLevelIndex(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetListLevelIndex(ITextPara* This,LONG Value) { return This->lpVtbl->SetListLevelIndex(This,Value); } static FORCEINLINE HRESULT ITextPara_GetListStart(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetListStart(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetListStart(ITextPara* This,LONG Value) { return This->lpVtbl->SetListStart(This,Value); } static FORCEINLINE HRESULT ITextPara_GetListTab(ITextPara* This,float *pValue) { return This->lpVtbl->GetListTab(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetListTab(ITextPara* This,float Value) { return This->lpVtbl->SetListTab(This,Value); } static FORCEINLINE HRESULT ITextPara_GetListType(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetListType(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetListType(ITextPara* This,LONG Value) { return This->lpVtbl->SetListType(This,Value); } static FORCEINLINE HRESULT ITextPara_GetNoLineNumber(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetNoLineNumber(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetNoLineNumber(ITextPara* This,LONG Value) { return This->lpVtbl->SetNoLineNumber(This,Value); } static FORCEINLINE HRESULT ITextPara_GetPageBreakBefore(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetPageBreakBefore(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetPageBreakBefore(ITextPara* This,LONG Value) { return This->lpVtbl->SetPageBreakBefore(This,Value); } static FORCEINLINE HRESULT ITextPara_GetRightIndent(ITextPara* This,float *pValue) { return This->lpVtbl->GetRightIndent(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetRightIndent(ITextPara* This,float Value) { return This->lpVtbl->SetRightIndent(This,Value); } static FORCEINLINE HRESULT ITextPara_SetIndents(ITextPara* This,float StartIndent,float LeftIndent,float RightIndent) { return This->lpVtbl->SetIndents(This,StartIndent,LeftIndent,RightIndent); } static FORCEINLINE HRESULT ITextPara_SetLineSpacing(ITextPara* This,LONG LineSpacingRule,float LineSpacing) { return This->lpVtbl->SetLineSpacing(This,LineSpacingRule,LineSpacing); } static FORCEINLINE HRESULT ITextPara_GetSpaceAfter(ITextPara* This,float *pValue) { return This->lpVtbl->GetSpaceAfter(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetSpaceAfter(ITextPara* This,float Value) { return This->lpVtbl->SetSpaceAfter(This,Value); } static FORCEINLINE HRESULT ITextPara_GetSpaceBefore(ITextPara* This,float *pValue) { return This->lpVtbl->GetSpaceBefore(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetSpaceBefore(ITextPara* This,float Value) { return This->lpVtbl->SetSpaceBefore(This,Value); } static FORCEINLINE HRESULT ITextPara_GetWidowControl(ITextPara* This,LONG *pValue) { return This->lpVtbl->GetWidowControl(This,pValue); } static FORCEINLINE HRESULT ITextPara_SetWidowControl(ITextPara* This,LONG Value) { return This->lpVtbl->SetWidowControl(This,Value); } static FORCEINLINE HRESULT ITextPara_GetTabCount(ITextPara* This,LONG *pCount) { return This->lpVtbl->GetTabCount(This,pCount); } static FORCEINLINE HRESULT ITextPara_AddTab(ITextPara* This,float tbPos,LONG tbAlign,LONG tbLeader) { return This->lpVtbl->AddTab(This,tbPos,tbAlign,tbLeader); } static FORCEINLINE HRESULT ITextPara_ClearAllTabs(ITextPara* This) { return This->lpVtbl->ClearAllTabs(This); } static FORCEINLINE HRESULT ITextPara_DeleteTab(ITextPara* This,float tbPos) { return This->lpVtbl->DeleteTab(This,tbPos); } static FORCEINLINE HRESULT ITextPara_GetTab(ITextPara* This,LONG iTab,float *ptbPos,LONG *ptbAlign,LONG *ptbLeader) { return This->lpVtbl->GetTab(This,iTab,ptbPos,ptbAlign,ptbLeader); } #endif #endif #endif #endif /* __ITextPara_INTERFACE_DEFINED__ */ /***************************************************************************** * ITextStoryRanges interface */ #ifndef __ITextStoryRanges_INTERFACE_DEFINED__ #define __ITextStoryRanges_INTERFACE_DEFINED__ DEFINE_GUID(IID_ITextStoryRanges, 0x8cc497c5, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d); #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("8cc497c5-a1df-11ce-8098-00aa0047be5d") ITextStoryRanges : public IDispatch { virtual HRESULT STDMETHODCALLTYPE _NewEnum( IUnknown **ppUnkEnum) = 0; virtual HRESULT STDMETHODCALLTYPE Item( LONG Index, ITextRange **ppRange) = 0; virtual HRESULT STDMETHODCALLTYPE GetCount( LONG *pCount) = 0; }; #ifdef __CRT_UUID_DECL __CRT_UUID_DECL(ITextStoryRanges, 0x8cc497c5, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d) #endif #else typedef struct ITextStoryRangesVtbl { BEGIN_INTERFACE /*** IUnknown methods ***/ HRESULT (STDMETHODCALLTYPE *QueryInterface)( ITextStoryRanges *This, REFIID riid, void **ppvObject); ULONG (STDMETHODCALLTYPE *AddRef)( ITextStoryRanges *This); ULONG (STDMETHODCALLTYPE *Release)( ITextStoryRanges *This); /*** IDispatch methods ***/ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)( ITextStoryRanges *This, UINT *pctinfo); HRESULT (STDMETHODCALLTYPE *GetTypeInfo)( ITextStoryRanges *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)( ITextStoryRanges *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); HRESULT (STDMETHODCALLTYPE *Invoke)( ITextStoryRanges *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); /*** ITextStoryRanges methods ***/ HRESULT (STDMETHODCALLTYPE *_NewEnum)( ITextStoryRanges *This, IUnknown **ppUnkEnum); HRESULT (STDMETHODCALLTYPE *Item)( ITextStoryRanges *This, LONG Index, ITextRange **ppRange); HRESULT (STDMETHODCALLTYPE *GetCount)( ITextStoryRanges *This, LONG *pCount); END_INTERFACE } ITextStoryRangesVtbl; interface ITextStoryRanges { CONST_VTBL ITextStoryRangesVtbl* lpVtbl; }; #ifdef COBJMACROS #ifndef WIDL_C_INLINE_WRAPPERS /*** IUnknown methods ***/ #define ITextStoryRanges_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) #define ITextStoryRanges_AddRef(This) (This)->lpVtbl->AddRef(This) #define ITextStoryRanges_Release(This) (This)->lpVtbl->Release(This) /*** IDispatch methods ***/ #define ITextStoryRanges_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) #define ITextStoryRanges_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define ITextStoryRanges_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define ITextStoryRanges_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) /*** ITextStoryRanges methods ***/ #define ITextStoryRanges__NewEnum(This,ppUnkEnum) (This)->lpVtbl->_NewEnum(This,ppUnkEnum) #define ITextStoryRanges_Item(This,Index,ppRange) (This)->lpVtbl->Item(This,Index,ppRange) #define ITextStoryRanges_GetCount(This,pCount) (This)->lpVtbl->GetCount(This,pCount) #else /*** IUnknown methods ***/ static FORCEINLINE HRESULT ITextStoryRanges_QueryInterface(ITextStoryRanges* This,REFIID riid,void **ppvObject) { return This->lpVtbl->QueryInterface(This,riid,ppvObject); } static FORCEINLINE ULONG ITextStoryRanges_AddRef(ITextStoryRanges* This) { return This->lpVtbl->AddRef(This); } static FORCEINLINE ULONG ITextStoryRanges_Release(ITextStoryRanges* This) { return This->lpVtbl->Release(This); } /*** IDispatch methods ***/ static FORCEINLINE HRESULT ITextStoryRanges_GetTypeInfoCount(ITextStoryRanges* This,UINT *pctinfo) { return This->lpVtbl->GetTypeInfoCount(This,pctinfo); } static FORCEINLINE HRESULT ITextStoryRanges_GetTypeInfo(ITextStoryRanges* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) { return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo); } static FORCEINLINE HRESULT ITextStoryRanges_GetIDsOfNames(ITextStoryRanges* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) { return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId); } static FORCEINLINE HRESULT ITextStoryRanges_Invoke(ITextStoryRanges* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) { return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr); } /*** ITextStoryRanges methods ***/ static FORCEINLINE HRESULT ITextStoryRanges__NewEnum(ITextStoryRanges* This,IUnknown **ppUnkEnum) { return This->lpVtbl->_NewEnum(This,ppUnkEnum); } static FORCEINLINE HRESULT ITextStoryRanges_Item(ITextStoryRanges* This,LONG Index,ITextRange **ppRange) { return This->lpVtbl->Item(This,Index,ppRange); } static FORCEINLINE HRESULT ITextStoryRanges_GetCount(ITextStoryRanges* This,LONG *pCount) { return This->lpVtbl->GetCount(This,pCount); } #endif #endif #endif #endif /* __ITextStoryRanges_INTERFACE_DEFINED__ */ /* Begin additional prototypes for all interfaces */ ULONG __RPC_USER BSTR_UserSize (ULONG *, ULONG, BSTR *); unsigned char * __RPC_USER BSTR_UserMarshal (ULONG *, unsigned char *, BSTR *); unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *); void __RPC_USER BSTR_UserFree (ULONG *, BSTR *); ULONG __RPC_USER VARIANT_UserSize (ULONG *, ULONG, VARIANT *); unsigned char * __RPC_USER VARIANT_UserMarshal (ULONG *, unsigned char *, VARIANT *); unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *); void __RPC_USER VARIANT_UserFree (ULONG *, VARIANT *); /* End additional prototypes */ #ifdef __cplusplus } #endif #endif /* __tom_h__ */ ================================================ FILE: winhlp32/winhelp.c ================================================ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * 2002 Sylvain Petreolle * 2002, 2008 Eric Pouech * 2004 Ken Belleau * 2008 Kirill K. Smirnov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define NONAMELESSUNION #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "commdlg.h" #include "winhelp.h" #include "winhelp_res.h" #include "shellapi.h" #include "richedit.h" #include "richole.h" #include "commctrl.h" #include "psapi.h" #include "tom.h" #ifdef _DEBUG #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winhelp); #else #define WINE_TRACE(...) #define WINE_WARN(...) #define WINE_FIXME(...) #define WINE_ERR(...) #define debugstr_a(...) #endif WINHELP_GLOBALS Globals = {3, NULL, TRUE, NULL, NULL, NULL, NULL, NULL, {{{NULL,NULL}},0}, NULL}; #define CTL_ID_BUTTON 0x700 #define CTL_ID_TEXT 0x701 #include "initguid.h" DEFINE_GUID(IID_ITextDocument2, 0xc241f5e0, 0x7206, 0x11d8, 0xa2, 0xc7, 0x00, 0xa0, 0xd1, 0xd6, 0xc6, 0xb3); static void comp_xWBTreeKey(void *p, const void *key, int leaf, void **next); static INT_PTR CALLBACK WINHELP_TopicDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); /*********************************************************************** * * WINHELP_InitFonts */ static void WINHELP_InitFonts(HWND hWnd) { WINHELP_WINDOW *win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); LOGFONTW logfontlist[] = { {-10, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}}, {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}}, {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}}, {-12, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}}, {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}}, {-10, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}}, { -8, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}}}; static HFONT fonts[ARRAY_SIZE(logfontlist)]; static BOOL init = FALSE; win->fonts_len = ARRAY_SIZE(logfontlist); win->fonts = fonts; if (!init) { UINT i; for (i = 0; i < ARRAY_SIZE(logfontlist); i++) { fonts[i] = CreateFontIndirectW(&logfontlist[i]); } init = TRUE; } } static DWORD CALLBACK WINHELP_RtfStreamIn(DWORD_PTR cookie, BYTE* buff, LONG cb, LONG* pcb) { struct RtfData* rd = (struct RtfData*)cookie; if (rd->where >= rd->ptr) return 1; if (rd->where + cb > rd->ptr) cb = rd->ptr - rd->where; memcpy(buff, rd->where, cb); rd->where += cb; *pcb = cb; return 0; } BOOL WINHELP_SearchKey(char keyfile, LPCSTR keywords, LONG type, LPCSTR topic, LPCSTR window, WINHELP_WINDOW *currwin, HLPFILE* hlpfile) { DWORD ids[20], t; int idn = 0; char *key; HLPFILE_PAGE *page = currwin->page; HLPFILE_XW *tree; if (type > 1) return FALSE; if (!(tree = HLPFILE_GetTreeData(hlpfile, keyfile))) return FALSE; key = strtok(keywords, ";"); while (key) { key = HLPFILE_BPTreeSearch(tree->tree, key, comp_xWBTreeKey); if (key) { int count = *(SHORT *)(key + strlen(key) + 1); int offset = *(ULONG *)(key + strlen(key) + 3); for (int i = 0; i < count; i++) { DWORD ref = *(DWORD *)(tree->data + offset + 9 + (4 * i)); if (page && (ref == page->offset)) continue; ids[idn++] = ref; if (idn == 20) break; } if (idn == 20) break; } key = strtok(NULL, ";"); } if (!idn) return FALSE; if (type && ((type != 1) || (idn > 1))) { struct index_data idx; idx.hlpfile = page->file; idx.jump = FALSE; idx.offset = (ULONG)ids; idx.count = idn; t = DialogBoxParamA(NULL, MAKEINTRESOURCE(IDD_TOPIC), currwin->hMainWnd, WINHELP_TopicDlgProc, &idx); if (t == 0xFFFFFFFF) return FALSE; } else t = ids[0]; HLPFILE_WINDOWINFO* win = window ? WINHELP_GetWindowInfo(hlpfile, window) : currwin->info; WINHELP_OpenHelpWindow(HLPFILE_PageByOffset, hlpfile, t, win, SW_NORMAL); return TRUE; } static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative) { static const WCHAR emptyW[1]; /* At first clear area - needed by EM_POSFROMCHAR/EM_SETSCROLLPOS */ SendMessageW(hTextWnd, WM_SETTEXT, 0, (LPARAM)emptyW); SendMessageW(hTextWnd, WM_SETREDRAW, FALSE, 0); SendMessageW(hTextWnd, EM_SETBKGNDCOLOR, 0, (LPARAM)win->info->sr_color); /* set word-wrap to window size (undocumented) */ SendMessageW(hTextWnd, EM_SETTARGETDEVICE, 0, 0); SendMessageW(hTextWnd, EM_EXLIMITTEXT, 0, -1); if (win->page) { struct RtfData rd; EDITSTREAM es; unsigned cp = 0; POINTL ptl; POINT pt; if (HLPFILE_BrowsePage(win->page, &rd, win->font_scale, relative, win->info)) { rd.where = rd.data; es.dwCookie = (DWORD_PTR)&rd; es.dwError = 0; es.pfnCallback = WINHELP_RtfStreamIn; SendMessageW(hTextWnd, EM_STREAMIN, SF_RTF, (LPARAM)&es); } /* FIXME: else leaking potentially the rd.first_link chain */ HeapFree(GetProcessHeap(), 0, rd.data); if (rd.char_pos_rel) { WCHAR tmp[32]; FINDTEXTW find; const WCHAR search[] = {'s','c','r','o','l','l','_','%','x',0}; find.chrg.cpMin = 0; find.chrg.cpMax = -1; find.lpstrText = &tmp; swprintf(tmp, 32, search, relative); cp = SendMessageW(hTextWnd, EM_FINDTEXTW, FR_DOWN, &find); } SendMessageW(hTextWnd, EM_POSFROMCHAR, (WPARAM)&ptl, cp || (cp != -1) ? cp - 1 : 0); pt.x = 0; pt.y = ptl.y; SendMessageW(hTextWnd, EM_SETSCROLLPOS, 0, (LPARAM)&pt); IRichEditOle *reole; SendMessageW(hTextWnd, EM_GETOLEINTERFACE, 0, &reole); if (rd.first_hs) { REOBJECT obj = {sizeof(REOBJECT)}; for(int i = 0; i < rd.imgcnt; i++) { HLPFILE_HOTSPOTLINK* hs = rd.first_hs; reole->lpVtbl->GetObject(reole, i, &obj, REO_GETOBJ_NO_INTERFACES); while(hs) { if (hs->link.bHotSpot && (i == hs->imgidx)) hs->link.cpMin = hs->link.cpMax = obj.cp; hs = hs->next; } } } if (win->page->first_var_row) { ITextDocument2 *doc; HRESULT result = reole->lpVtbl->QueryInterface(reole, &IID_ITextDocument2, &doc); if (SUCCEEDED(result)) { SendMessageW(hTextWnd, EM_SETOPTIONS, ECOOP_AND, ~ECO_READONLY); ITextRange2 *range; result = doc->lpVtbl->Range(doc, 0, 0, &range); if (SUCCEEDED(result)) { HLPFILE_ROW *next = win->page->first_var_row; BSTR rowtag = SysAllocString(L"var_wid_row"); RECT rect; GetClientRect(hTextWnd, &rect); rect.right -= GetSystemMetrics(SM_CXVSCROLL); while (next->next) next = next->next; while (next) { ITextRow *row; long len = 0; long start; range->lpVtbl->FindText(range, rowtag, tomForward, tomMatchCase, &len); if (!len) break; range->lpVtbl->Move(range, tomRow, 1, &len); if (!len) break; range->lpVtbl->GetStart(range, &start); range->lpVtbl->SetStart(range, ++start); result = range->lpVtbl->GetRow(range, &row); if (FAILED(result)) break; next->cpos = start; WORD last = 0, tot = next->width[next->cols - 1]; for (int i = 0; i < next->cols; i++) { WORD curr = ((long)(next->width[i] - last) * 100) / tot; last = next->width[i]; next->width[i] = curr; row->lpVtbl->SetCellIndex(row, i); row->lpVtbl->SetCellWidth(row, (rect.right * 15 * next->width[i]) / 100); } row->lpVtbl->Apply(row, 1, tomCellStructureChangeOnly); row->lpVtbl->Release(row); next = next->prev; } range->lpVtbl->Release(range); SysFreeString(rowtag); } doc->lpVtbl->Release(doc); SendMessageW(hTextWnd, EM_SETOPTIONS, ECOOP_OR, ECO_READONLY); } } reole->lpVtbl->Release(reole); } SendMessageW(hTextWnd, WM_SETREDRAW, TRUE, 0); RedrawWindow(hTextWnd, NULL, NULL, RDW_FRAME|RDW_INVALIDATE); } /*********************************************************************** * * WINHELP_GetOpenFileName */ BOOL WINHELP_GetOpenFileName(LPSTR lpszFile, int len) { OPENFILENAMEA openfilename; CHAR szDir[MAX_PATH]; CHAR szzFilter[2 * MAX_STRING_LEN + 100]; LPSTR p = szzFilter; memset(&openfilename, 0, sizeof(OPENFILENAMEA)); WINE_TRACE("()\n"); LoadStringA(Globals.hInstance, STID_HELP_FILES_HLP, p, MAX_STRING_LEN); p += strlen(p) + 1; strcpy(p, "*.hlp"); p += strlen(p) + 1; LoadStringA(Globals.hInstance, STID_ALL_FILES, p, MAX_STRING_LEN); p += strlen(p) + 1; strcpy(p, "*.*"); p += strlen(p) + 1; *p = '\0'; GetCurrentDirectoryA(sizeof(szDir), szDir); lpszFile[0]='\0'; openfilename.lStructSize = sizeof(openfilename); openfilename.hwndOwner = (Globals.active_win ? Globals.active_win->hMainWnd : 0); openfilename.hInstance = Globals.hInstance; openfilename.lpstrFilter = szzFilter; openfilename.lpstrCustomFilter = 0; openfilename.nMaxCustFilter = 0; openfilename.nFilterIndex = 1; openfilename.lpstrFile = lpszFile; openfilename.nMaxFile = len; openfilename.lpstrFileTitle = 0; openfilename.nMaxFileTitle = 0; openfilename.lpstrInitialDir = szDir; openfilename.lpstrTitle = 0; openfilename.Flags = OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_READONLY; openfilename.nFileOffset = 0; openfilename.nFileExtension = 0; openfilename.lpstrDefExt = 0; openfilename.lCustData = 0; openfilename.lpfnHook = 0; openfilename.lpTemplateName = 0; return GetOpenFileNameA(&openfilename); } /*********************************************************************** * * WINHELP_MessageBoxIDS_s */ static INT WINHELP_MessageBoxIDS_s(UINT ids_text, LPCSTR str, UINT ids_title, WORD type) { CHAR text[MAX_STRING_LEN]; CHAR caption[MAX_STRING_LEN]; CHAR newtext[MAX_STRING_LEN + MAX_PATH]; LoadStringA(Globals.hInstance, ids_text, text, sizeof(text)); wsprintfA(newtext, text, str); LoadStringA(Globals.hInstance, ids_title, caption, sizeof(caption)); return MessageBoxA(0, newtext, caption, type); } /*********************************************************************** * * WINHELP_LookupHelpFile */ HLPFILE* WINHELP_LookupHelpFile(LPCSTR lpszFile) { HLPFILE* hlpfile; char szFullName[MAX_PATH]; char szAddPath[MAX_PATH]; char *p; /* * NOTE: This is needed by popup windows only. * In other cases it's not needed but does not hurt though. */ if (Globals.active_win && Globals.active_win->page && Globals.active_win->page->file) { strcpy(szAddPath, Globals.active_win->page->file->lpszPath); p = strrchr(szAddPath, '\\'); if (p) *p = 0; } /* * FIXME: Should we swap conditions? */ if (!SearchPathA(NULL, lpszFile, ".hlp", MAX_PATH, szFullName, NULL) && !SearchPathA(szAddPath, lpszFile, ".hlp", MAX_PATH, szFullName, NULL)) { if (WINHELP_MessageBoxIDS_s(STID_FILE_NOT_FOUND_s, lpszFile, STID_WHERROR, MB_YESNO|MB_ICONQUESTION) != IDYES) return NULL; if (!WINHELP_GetOpenFileName(szFullName, MAX_PATH)) return NULL; } hlpfile = HLPFILE_ReadHlpFile(szFullName); if (!hlpfile) WINHELP_MessageBoxIDS_s(STID_HLPFILE_ERROR_s, lpszFile, STID_WHERROR, MB_OK|MB_ICONSTOP); return hlpfile; } /****************************************************************** * WINHELP_GetWindowInfo * * */ HLPFILE_WINDOWINFO* WINHELP_GetWindowInfo(HLPFILE* hlpfile, LPCSTR name) { static HLPFILE_WINDOWINFO mwi; unsigned int i; if (!name || !name[0]) name = Globals.active_win->info->name; if (hlpfile) for (i = 0; i < hlpfile->numWindows; i++) if (!lstrcmpiA(hlpfile->windows[i].name, name)) return &hlpfile->windows[i]; if (lstrcmpiA(name, "main") != 0) { WINE_FIXME("Couldn't find window info for %s\n", debugstr_a(name)); assert(0); return NULL; } if (hlpfile && !hlpfile->lpszTitle[0]) LoadStringA(Globals.hInstance, STID_WINE_HELP, hlpfile->lpszTitle, 128); if (!mwi.name[0]) { strcpy(mwi.type, "primary"); strcpy(mwi.name, "main"); if (hlpfile) { char tmp[128]; LoadStringA(Globals.hInstance, STID_WINE_HELP, tmp, sizeof(tmp)); snprintf(mwi.caption, sizeof(mwi.caption), "%s %s - %s", hlpfile->lpszTitle, tmp, hlpfile->lpszPath); } else LoadStringA(Globals.hInstance, STID_WINE_HELP, mwi.caption, sizeof(mwi.caption)); mwi.origin.x = mwi.origin.y = mwi.size.cx = mwi.size.cy = CW_USEDEFAULT; mwi.style = SW_SHOW; mwi.win_style = WS_OVERLAPPEDWINDOW; mwi.sr_color = mwi.nsr_color = 0xFFFFFF; } return &mwi; } /****************************************************************** * HLPFILE_GetPopupWindowInfo * * */ static HLPFILE_WINDOWINFO* WINHELP_GetPopupWindowInfo(HLPFILE* hlpfile, WINHELP_WINDOW* parent, LPARAM mouse) { static HLPFILE_WINDOWINFO wi; RECT parent_rect; wi.type[0] = wi.name[0] = wi.caption[0] = '\0'; /* Calculate horizontal size and position of a popup window */ GetWindowRect(parent->hMainWnd, &parent_rect); wi.size.cx = (parent_rect.right - parent_rect.left) / 2; wi.size.cy = 10; /* need a non null value, so that borders are taken into account while computing */ wi.origin.x = (short)LOWORD(mouse); wi.origin.y = (short)HIWORD(mouse); ClientToScreen(parent->hMainWnd, &wi.origin); wi.origin.x -= wi.size.cx / 2; wi.origin.x = min(wi.origin.x, GetSystemMetrics(SM_CXSCREEN) - wi.size.cx); wi.origin.x = max(wi.origin.x, 0); wi.style = SW_SHOW; wi.win_style = WS_POPUP | WS_BORDER; if (parent->page->file->has_popup_color) wi.sr_color = parent->page->file->popup_color; else wi.sr_color = parent->info->sr_color; wi.nsr_color = 0xFFFFFF; return &wi; } typedef struct { WORD size; WORD command; LONG data; LONG reserved; WORD ofsFilename; WORD ofsData; WORD ofsPath; } WINEHELP,*LPWINEHELP; static BOOL WINHELP_HasWorkingWindow(void) { if (!Globals.active_win) return FALSE; if (Globals.active_win->next || Globals.win_list != Globals.active_win) return TRUE; return Globals.active_win->page != NULL && Globals.active_win->page->file != NULL; } static void comp_xWBTreeKey(void *p, const void *key, int leaf, void **next) { *next = (char*)p + strlen((char*)p) + (leaf?7:3); return stricmp(p, key); } /****************************************************************** * WINHELP_HandleCommand * * */ static LRESULT WINHELP_HandleCommand(HWND hSrcWnd, WINEHELP *wh, BOOL w32) { if (wh) { char* ptr = (wh->ofsFilename) ? (LPSTR)wh + wh->ofsFilename : NULL; if (!w32 && wh->ofsPath) SetCurrentDirectoryA((LPSTR)wh + wh->ofsPath); else if (w32) { DWORD pid; HANDLE proc; GetWindowThreadProcessId(hSrcWnd, &pid); proc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); if (proc) { WCHAR path[MAX_PATH]; WCHAR *sep; path[0] = 0; GetModuleFileNameExW(proc, NULL, path, MAX_PATH); sep = wcsrchr(path, '\\'); if (sep) { sep[0] = 0; SetCurrentDirectoryW(path); } CloseHandle(proc); } } WINE_TRACE("Got[%u]: cmd=%u data=%08x fn=%s\n", wh->size, wh->command, wh->data, debugstr_a(ptr)); switch (wh->command) { case HELP_CONTEXT: if (ptr) { MACRO_JumpContext(ptr, "main", wh->data); } if (!WINHELP_HasWorkingWindow()) MACRO_Exit(); break; case HELP_QUIT: MACRO_Exit(); break; case HELP_CONTENTS: if (ptr) { MACRO_JumpContents(ptr, "main"); } if (!WINHELP_HasWorkingWindow()) MACRO_Exit(); break; case HELP_HELPONHELP: MACRO_HelpOn(); if (!WINHELP_HasWorkingWindow()) MACRO_Exit(); break; /* case HELP_SETINDEX: */ case HELP_SETCONTENTS: if (ptr) { MACRO_SetContents(ptr, wh->data); } break; case HELP_CONTEXTPOPUP: if (ptr) { MACRO_PopupContext(ptr, wh->data); } break; /* case HELP_FORCEFILE:*/ /* case HELP_CONTEXTMENU: */ case HELP_FINDER: /* in fact, should be the topic dialog box */ WINE_FIXME("HELP_FINDER: stub\n"); if (ptr) { MACRO_JumpHash(ptr, "main", 0); } break; case HELP_PARTIALKEY: case HELP_KEY: { HLPFILE *hlpfile = WINHELP_LookupHelpFile(ptr); if (!hlpfile) { if (!WINHELP_HasWorkingWindow()) MACRO_Exit(); break; } char *keywords = ((char *)wh + wh->ofsData); if (!WINHELP_SearchKey('K', keywords, 0, NULL, NULL, Globals.active_win, hlpfile)) { HLPFILE_FreeHlpFile(hlpfile); if (!WINHELP_HasWorkingWindow()) MACRO_Exit(); break; } break; } case HELP_COMMAND: { // TODO: filename might be different than the open file if (ptr) { MACRO_ExecuteMacro(Globals.active_win, (LPSTR)wh + wh->ofsData); } break; } case HELP_MULTIKEY: { HLPFILE *hlpfile = WINHELP_LookupHelpFile(ptr); if (!hlpfile) { if (!WINHELP_HasWorkingWindow()) MACRO_Exit(); break; } MULTIKEYHELPA *mkhelp = (MULTIKEYHELPA *)((char *)wh + wh->ofsData); if (!WINHELP_SearchKey(mkhelp->mkKeylist, mkhelp->szKeyphrase, 0, NULL, NULL, Globals.active_win, hlpfile)) { HLPFILE_FreeHlpFile(hlpfile); if (!WINHELP_HasWorkingWindow()) MACRO_Exit(); break; } break; } /* case HELP_WM_HELP: */ /* case HELP_SETPOPUP_POS: */ /* case HELP_SETWINPOS: */ default: WINE_FIXME("Unhandled command (%x) for remote winhelp control\n", wh->command); break; } } /* Always return success for now */ return 1; } void WINHELP_LayoutMainWindow(WINHELP_WINDOW* win) { RECT rect, button_box_rect; INT text_top = 0; HWND hButtonBoxWnd = GetDlgItem(win->hMainWnd, CTL_ID_BUTTON); HWND hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT); GetClientRect(win->hMainWnd, &rect); /* Update button box and text Window */ SetWindowPos(hButtonBoxWnd, HWND_TOP, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, 0); if (GetWindowRect(hButtonBoxWnd, &button_box_rect)) text_top = rect.top + button_box_rect.bottom - button_box_rect.top; SetWindowPos(hTextWnd, HWND_TOP, rect.left, text_top, rect.right - rect.left, rect.bottom - text_top, 0); } /****************************************************************** * WINHELP_DeleteButtons * */ static void WINHELP_DeleteButtons(WINHELP_WINDOW* win) { WINHELP_BUTTON* b; WINHELP_BUTTON* bp; for (b = win->first_button; b; b = bp) { DestroyWindow(b->hWnd); bp = b->next; HeapFree(GetProcessHeap(), 0, b); } win->first_button = NULL; } /****************************************************************** * WINHELP_DeleteBackSet * */ void WINHELP_DeleteBackSet(WINHELP_WINDOW* win) { unsigned int i; for (i = 0; i < win->back.index; i++) { HLPFILE_FreeHlpFile(win->back.set[i].page->file); win->back.set[i].page = NULL; } win->back.index = 0; } /****************************************************************** * WINHELP_DeletePageLinks * */ static void WINHELP_DeletePageLinks(HLPFILE_PAGE* page) { HLPFILE_LINK* curr; HLPFILE_LINK* next; for (curr = page->first_link; curr; curr = next) { next = curr->next; HeapFree(GetProcessHeap(), 0, curr); } } /*********************************************************************** * * WINHELP_GrabWindow */ WINHELP_WINDOW* WINHELP_GrabWindow(WINHELP_WINDOW* win) { WINE_TRACE("Grab %p#%d++\n", win, win->ref_count); win->ref_count++; return win; } /*********************************************************************** * * WINHELP_ReleaseWindow */ BOOL WINHELP_ReleaseWindow(WINHELP_WINDOW* win) { WINE_TRACE("Release %p#%d--\n", win, win->ref_count); if (!--win->ref_count) { WINHELP_WINDOW** w; for (w = &Globals.win_list; *w; w = &(*w)->next) { if (*w == win) { *w = win->next; break; } } if (Globals.active_win == win) { Globals.active_win = Globals.win_list; if (Globals.win_list) SetActiveWindow(Globals.win_list->hMainWnd); } if (win == Globals.active_popup) Globals.active_popup = NULL; PostMessageW(win->hMainWnd, WM_CLOSE, 0, 0); return FALSE; } return TRUE; } /*********************************************************************** * * WINHELP_DeleteWindow */ static void WINHELP_DeleteWindow(WINHELP_WINDOW* win) { WINHELP_WINDOW** w; BOOL bExit; HWND hTextWnd; for (w = &Globals.win_list; *w; w = &(*w)->next) { if (*w == win) { *w = win->next; break; } } bExit = (Globals.wVersion >= 4 && !lstrcmpiA(win->info->name, "main")); if (Globals.active_win == win) { Globals.active_win = Globals.win_list; if (Globals.win_list) SetActiveWindow(Globals.win_list->hMainWnd); } if (win == Globals.active_popup) Globals.active_popup = NULL; hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT); SetWindowLongPtrA(hTextWnd, GWLP_WNDPROC, (LONG_PTR)win->origRicheditWndProc); WINHELP_DeleteButtons(win); if (win->page) WINHELP_DeletePageLinks(win->page); if (win->hHistoryWnd) DestroyWindow(win->hHistoryWnd); DeleteObject(win->hBrush); WINHELP_DeleteBackSet(win); if (win->page) HLPFILE_FreeHlpFile(win->page->file); HeapFree(GetProcessHeap(), 0, win); if (bExit) MACRO_Exit(); if (!Globals.win_list) PostQuitMessage(0); } static char* WINHELP_GetCaption(WINHELP_WNDPAGE* wpage) { if (((wpage->wininfo->flags & 4) && (wpage->wininfo->caption[0])) || !wpage->page) return wpage->wininfo->caption; return wpage->page->file->lpszTitle; } static void WINHELP_RememberPage(WINHELP_WINDOW* win, WINHELP_WNDPAGE* wpage) { unsigned num; if (!Globals.history.index || Globals.history.set[0].page != wpage->page) { num = ARRAY_SIZE(Globals.history.set); /* we're full, remove latest entry */ if (Globals.history.index == num) { HLPFILE_FreeHlpFile(Globals.history.set[num - 1].page->file); Globals.history.index--; } memmove(&Globals.history.set[1], &Globals.history.set[0], Globals.history.index * sizeof(Globals.history.set[0])); Globals.history.set[0] = *wpage; Globals.history.index++; wpage->page->file->wRefCount++; } if (win->hHistoryWnd) InvalidateRect(win->hHistoryWnd, NULL, TRUE); num = ARRAY_SIZE(win->back.set); if (win->back.index == num) { /* we're full, remove latest entry */ HLPFILE_FreeHlpFile(win->back.set[0].page->file); memmove(&win->back.set[0], &win->back.set[1], (num - 1) * sizeof(win->back.set[0])); win->back.index--; } win->back.set[win->back.index++] = *wpage; wpage->page->file->wRefCount++; } static HLPFILE_HOTSPOTLINK* WINHELP_FindHotSpot(WINHELP_WINDOW* win, LPARAM pos) { int x = LOWORD(pos), y = HIWORD(pos); POINTL pntl = {x, y}; HWND hwndtext = GetDlgItem(win->hMainWnd, CTL_ID_TEXT); LRESULT cp = SendMessageW(hwndtext, EM_CHARFROMPOS, 0, &pntl); HLPFILE_HOTSPOTLINK* hs = win->page->first_hs; while (hs) { if ((cp == hs->link.cpMin) || (cp == (hs->link.cpMin + 1))) { SendMessageW(hwndtext, EM_POSFROMCHAR, &pntl, hs->link.cpMin); if ((x > pntl.x + hs->x) && (x <= pntl.x + hs->x + hs->width) && (y > pntl.y + hs->y) && (y <= pntl.y + hs->y + hs->height)) return hs; } hs = hs->next; } return NULL; } static LRESULT CALLBACK WINHELP_RicheditWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { WINHELP_WINDOW *win = (WINHELP_WINDOW*) GetWindowLongPtrW(GetParent(hWnd), 0); LRESULT result; switch(msg) { case WM_SHOWWINDOW: if (!wParam) { DestroyWindow(hWnd); return 0; } default: return CallWindowProcA(win->origRicheditWndProc, hWnd, msg, wParam, lParam); case WM_SIZE: result = CallWindowProcA(win->origRicheditWndProc, hWnd, msg, wParam, lParam); if (win->page && win->page->first_var_row) { IRichEditOle *reole; ITextDocument2 *doc; SendMessageW(hWnd, EM_GETOLEINTERFACE, 0, &reole); HRESULT res = reole->lpVtbl->QueryInterface(reole, &IID_ITextDocument2, &doc); if (SUCCEEDED(res)) { ITextRange2 *range; SendMessageW(hWnd, EM_SETOPTIONS, ECOOP_AND, ~ECO_READONLY); res = doc->lpVtbl->Range(doc, 0, 0, &range); if (SUCCEEDED(res)) { long width = LOWORD(lParam) - GetSystemMetrics(SM_CXVSCROLL); HLPFILE_ROW *next = win->page->first_var_row; while (next->next) next = next->next; while (next) { ITextRow *row; range->lpVtbl->SetStart(range, next->cpos); res = range->lpVtbl->GetRow(range, &row); if (FAILED(res)) break; for (int i = 0; i < next->cols; i++) { row->lpVtbl->SetCellIndex(row, i); row->lpVtbl->SetCellWidth(row, (width * 15 * next->width[i]) / 100); } row->lpVtbl->Apply(row, 1, tomCellStructureChangeOnly); row->lpVtbl->Release(row); next = next->prev; } range->lpVtbl->Release(range); } doc->lpVtbl->Release(doc); SendMessageW(hWnd, EM_SETOPTIONS, ECOOP_OR, ECO_READONLY); } reole->lpVtbl->Release(reole); } return result; case WM_KEYDOWN: case WM_KEYUP: case WM_LBUTTONDOWN: case WM_MOUSEMOVE: case WM_SETFOCUS: result = CallWindowProcA(win->origRicheditWndProc, hWnd, msg, wParam, lParam); HideCaret(hWnd); return result; case WM_SETCURSOR: { DWORD messagePos = GetMessagePos(); POINT pt = {LOWORD(messagePos), HIWORD(messagePos)}; ScreenToClient(hWnd, &pt); if (win->page && WINHELP_FindHotSpot(win, MAKELPARAM(pt.x, pt.y))) { SetCursor(win->hHandCur); return 0; } return CallWindowProcA(win->origRicheditWndProc, hWnd, msg, wParam, lParam); } } } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_QueryInterface(IRichEditOleCallback *This, REFIID riid, LPVOID FAR * lplpObj) { return S_OK; } ULONG STDMETHODCALLTYPE WINHELP_OLE_Callback_AddRef(IRichEditOleCallback *This) { return 0; } ULONG STDMETHODCALLTYPE WINHELP_OLE_Callback_Release (IRichEditOleCallback *This) { return 0; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetNewStorage (IRichEditOleCallback *This, LPSTORAGE *lplpstg) { LPLOCKBYTES lpLockBytes = NULL; HRESULT result = CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes); if (result != S_OK) return result; result = StgCreateDocfileOnILockBytes(lpLockBytes, STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, lplpstg); if (result != S_OK) lpLockBytes->lpVtbl->Release(lpLockBytes); return result; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetInPlaceContext (IRichEditOleCallback *This, LPOLEINPLACEFRAME FAR * lplpFrame, LPOLEINPLACEUIWINDOW FAR * lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo) { return S_OK; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_ShowContainerUI (IRichEditOleCallback *This, BOOL fShow) { return S_OK; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_QueryInsertObject (IRichEditOleCallback *This, LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp) { return S_OK; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_DeleteObject (IRichEditOleCallback *This, LPOLEOBJECT lpoleobj) { return S_OK; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_QueryAcceptData (IRichEditOleCallback *This, LPDATAOBJECT lpdataobj, CLIPFORMAT FAR * lpcfFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict) { return S_OK; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_ContextSensitiveHelp (IRichEditOleCallback *This, BOOL fEnterMode) { return S_OK; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetClipboardData (IRichEditOleCallback *This, CHARRANGE FAR * lpchrg, DWORD reco, LPDATAOBJECT FAR * lplpdataobj) { return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetDragDropEffect (IRichEditOleCallback *This, BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect) { return S_OK; } HRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetContextMenu (IRichEditOleCallback *This, WORD seltype, LPOLEOBJECT lpoleobj, CHARRANGE FAR * lpchrg, HMENU FAR * lphmenu) { return S_OK; } IRichEditOleCallbackVtbl callbackv = { WINHELP_OLE_Callback_QueryInterface, WINHELP_OLE_Callback_AddRef, WINHELP_OLE_Callback_Release, WINHELP_OLE_Callback_GetNewStorage, WINHELP_OLE_Callback_GetInPlaceContext, WINHELP_OLE_Callback_ShowContainerUI, WINHELP_OLE_Callback_QueryInsertObject, WINHELP_OLE_Callback_DeleteObject, WINHELP_OLE_Callback_QueryAcceptData, WINHELP_OLE_Callback_ContextSensitiveHelp, WINHELP_OLE_Callback_GetClipboardData, WINHELP_OLE_Callback_GetDragDropEffect, WINHELP_OLE_Callback_GetContextMenu }; IRichEditOleCallback callback = { &callbackv }; /*********************************************************************** * * WINHELP_CreateHelpWindow */ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remember) { WINHELP_WINDOW* win = NULL; BOOL bPrimary, bPopup, bReUsed = FALSE; HICON hIcon; HWND hTextWnd = NULL; WCHAR caption[60]; bPrimary = !lstrcmpiA(wpage->wininfo->name, "main"); bPopup = !bPrimary && (wpage->wininfo->win_style & WS_POPUP); if (!bPopup) { for (win = Globals.win_list; win; win = win->next) { if (!lstrcmpiA(win->info->name, wpage->wininfo->name)) { if (win->page == wpage->page && win->info == wpage->wininfo && win->offset == wpage->relative) { /* see #22979, some hlp files have a macro (run at page opening), which * jumps to the very same page * Exit gracefully in that case */ return TRUE; } WINHELP_DeleteButtons(win); bReUsed = TRUE; int codepage = wpage->page ? wpage->page->file->codepage : CP_ACP; MultiByteToWideChar(codepage, 0, WINHELP_GetCaption(wpage), -1, caption, 60); SetWindowTextW(win->hMainWnd, caption); if (win->info != wpage->wininfo) { POINT pt = {0, 0}; SIZE sz = {0, 0}; DWORD flags = SWP_NOSIZE | SWP_NOMOVE; if (wpage->wininfo->origin.x != CW_USEDEFAULT && wpage->wininfo->origin.y != CW_USEDEFAULT) { pt = wpage->wininfo->origin; flags &= ~SWP_NOSIZE; } if (wpage->wininfo->size.cx != CW_USEDEFAULT && wpage->wininfo->size.cy != CW_USEDEFAULT) { sz = wpage->wininfo->size; flags &= ~SWP_NOMOVE; } SetWindowPos(win->hMainWnd, HWND_TOP, pt.x, pt.y, sz.cx, sz.cy, flags); } if (wpage->page && win->page && wpage->page->file != win->page->file) WINHELP_DeleteBackSet(win); WINHELP_InitFonts(win->hMainWnd); win->page = wpage->page; win->info = wpage->wininfo; win->offset = wpage->relative; hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT); // hide the window then destroy it in the message loop ShowWindow(hTextWnd, 0); break; } } } if (!win) { /* Initialize WINHELP_WINDOW struct */ win = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINHELP_WINDOW)); if (!win) return FALSE; win->next = Globals.win_list; Globals.win_list = win; win->hHandCur = LoadCursorW(0, (LPWSTR)IDC_HAND); win->back.index = 0; win->font_scale = 1; WINHELP_GrabWindow(win); } win->page = wpage->page; win->info = wpage->wininfo; WINHELP_GrabWindow(win); if (!bPopup && wpage->page && remember) { WINHELP_RememberPage(win, wpage); } if (bPopup) Globals.active_popup = win; else Globals.active_win = win; /* Initialize default pushbuttons */ if (bPrimary && wpage->page) { CHAR buffer[MAX_STRING_LEN]; LoadStringA(Globals.hInstance, STID_CONTENTS, buffer, sizeof(buffer)); MACRO_CreateButton("BTN_CONTENTS", buffer, "Contents()"); LoadStringA(Globals.hInstance, STID_INDEX, buffer, sizeof(buffer)); MACRO_CreateButton("BTN_INDEX", buffer, "Finder()"); LoadStringA(Globals.hInstance, STID_BACK, buffer, sizeof(buffer)); MACRO_CreateButton("BTN_BACK", buffer, "Back()"); if (win->back.index <= 1) MACRO_DisableButton("BTN_BACK"); } if (!bReUsed) { int codepage = wpage->page ? wpage->page->file->codepage : CP_ACP; MultiByteToWideChar(codepage, 0, WINHELP_GetCaption(wpage), -1, caption, 60); win->hMainWnd = CreateWindowExW((bPopup) ? WS_EX_TOOLWINDOW : WS_EX_CLIENTEDGE, MAIN_WIN_CLASS_NAME, caption, bPrimary ? WS_OVERLAPPEDWINDOW : wpage->wininfo->win_style, wpage->wininfo->origin.x, wpage->wininfo->origin.y, wpage->wininfo->size.cx, wpage->wininfo->size.cy, bPopup ? Globals.active_win->hMainWnd : NULL, bPrimary ? LoadMenuW(Globals.hInstance, MAKEINTRESOURCEW(MAIN_MENU)) : 0, Globals.hInstance, win); if (!bPopup) /* Create button box and text Window */ CreateWindowW(BUTTON_BOX_WIN_CLASS_NAME, "", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, win->hMainWnd, (HMENU)CTL_ID_BUTTON, Globals.hInstance, NULL); } hTextWnd = CreateWindowW(MSFTEDIT_CLASS, NULL, ES_MULTILINE | ES_READONLY | WS_CHILD | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE, 0, 0, 0, 0, win->hMainWnd, (HMENU)CTL_ID_TEXT, Globals.hInstance, NULL); /* set ole callback for showing bitmaps */ SendMessageW(hTextWnd, EM_SETOLECALLBACK, NULL, &callback); SendMessageW(hTextWnd, EM_SHOWSCROLLBAR, SB_HORZ, FALSE); SendMessageW(hTextWnd, EM_SETEVENTMASK, 0, SendMessageW(hTextWnd, EM_GETEVENTMASK, 0, 0) | ENM_MOUSEEVENTS | ENM_LINK); win->origRicheditWndProc = (WNDPROC)SetWindowLongPtrA(hTextWnd, GWLP_WNDPROC, (LONG_PTR)WINHELP_RicheditWndProc); hIcon = (wpage->page) ? wpage->page->file->hIcon : NULL; if (!hIcon) hIcon = LoadImageW(Globals.hInstance, MAKEINTRESOURCEW(IDI_WINHELP), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED); SendMessageW(win->hMainWnd, WM_SETICON, ICON_SMALL, (DWORD_PTR)hIcon); /* Initialize file specific pushbuttons */ if (!(wpage->wininfo->win_style & WS_POPUP) && wpage->page) { HLPFILE_MACRO *macro; for (macro = wpage->page->file->first_macro; macro; macro = macro->next) { // don't jump to contents on every page load if (!strcmp(macro->lpszMacro, "Contents()")) continue; MACRO_ExecuteMacro(win, macro->lpszMacro); } for (macro = wpage->page->first_macro; macro; macro = macro->next) MACRO_ExecuteMacro(win, macro->lpszMacro); } /* See #17681, in some cases, the newly created window is closed by the macros it contains * (braindead), so deal with this case */ for (win = Globals.win_list; win; win = win->next) { if (!lstrcmpiA(win->info->name, wpage->wininfo->name)) break; } if (!win || !WINHELP_ReleaseWindow(win)) return TRUE; if (bPopup) { DWORD mask = SendMessageW(hTextWnd, EM_GETEVENTMASK, 0, 0); win->font_scale = Globals.active_win->font_scale; WINHELP_SetupText(hTextWnd, win, wpage->relative); /* we need the window to be shown for richedit to compute the size */ ShowWindow(win->hMainWnd, nCmdShow); SendMessageW(hTextWnd, EM_SETEVENTMASK, 0, mask | ENM_REQUESTRESIZE); SendMessageW(hTextWnd, EM_REQUESTRESIZE, 0, 0); SendMessageW(hTextWnd, EM_SETEVENTMASK, 0, mask); } else { WINHELP_SetupText(hTextWnd, win, wpage->relative); WINHELP_LayoutMainWindow(win); ShowWindow(win->hMainWnd, nCmdShow); } return TRUE; } /****************************************************************** * WINHELP_OpenHelpWindow * Main function to search for a page and display it in a window */ BOOL WINHELP_OpenHelpWindow(HLPFILE_PAGE* (*lookup)(HLPFILE*, LONG, ULONG*), HLPFILE* hlpfile, LONG val, HLPFILE_WINDOWINFO* wi, int nCmdShow) { WINHELP_WNDPAGE wpage; wpage.page = lookup(hlpfile, val, &wpage.relative); if (wpage.page) wpage.page->file->wRefCount++; wpage.wininfo = wi; return WINHELP_CreateHelpWindow(&wpage, nCmdShow, TRUE); } static void WINHELP_DoLink(WINHELP_WINDOW* win, HLPFILE_LINK* link, DWORD pos) { HLPFILE* hlpfile; HLPFILE_WINDOWINFO* wi; switch (link->cookie) { case hlp_link_link: if ((hlpfile = WINHELP_LookupHelpFile(link->string))) { if (link->window == -1 || link->windowName) wi = WINHELP_GetWindowInfo(hlpfile, link->windowName ? link->windowName : "main"); else if (link->window == -2) { wi = win->info; if (wi->win_style & WS_POPUP) wi = Globals.active_win->info; } else if (link->window < hlpfile->numWindows) wi = &hlpfile->windows[link->window]; else { WINE_WARN("link to window %d/%d\n", link->window, hlpfile->numWindows); break; } WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, link->hash, wi, SW_NORMAL); } break; case hlp_link_popup: if ((hlpfile = WINHELP_LookupHelpFile(link->string))) WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, link->hash, WINHELP_GetPopupWindowInfo(hlpfile, win, pos), SW_NORMAL); break; case hlp_link_macro: MACRO_ExecuteMacro(win, link->string); break; default: WINE_FIXME("Unknown link cookie %d\n", link->cookie); } } /****************************************************************** * WINHELP_HandleLink * */ static BOOL WINHELP_HandleLink(ENLINK* enlink, WINHELP_WINDOW* win) { HLPFILE_LINK* link; BOOL ret = FALSE; WCHAR tmp[32]; TEXTRANGEW chars; const WCHAR format[] = {'%', 'p', 0}; chars.chrg.cpMin = enlink->chrg.cpMin; chars.chrg.cpMax = enlink->chrg.cpMax; chars.lpstrText = &tmp; SendMessageW(enlink->nmhdr.hwndFrom, EM_GETTEXTRANGE, 0, &chars); swscanf(tmp, format, &link); switch (enlink->msg) { case WM_LBUTTONDOWN: WINHELP_DoLink(win, link, enlink->lParam); case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: case WM_NCLBUTTONDOWN: case WM_NCMBUTTONDOWN: case WM_NCRBUTTONDOWN: ret = TRUE; break; } return ret; } /*********************************************************************** * * WINHELP_CheckPopup */ static BOOL WINHELP_CheckPopup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT* lret) { WINHELP_WINDOW* popup = Globals.active_popup; BOOL ret = TRUE; if (!Globals.active_popup) return FALSE; switch (msg) { case WM_NOTIFY: { MSGFILTER* msgf = (MSGFILTER*)lParam; switch (msgf->nmhdr.code) { case EN_MSGFILTER: if (!WINHELP_CheckPopup(hWnd, msgf->msg, msgf->wParam, msgf->lParam, NULL)) return FALSE; if (lret) *lret = 1; return TRUE; case EN_LINK: if (!WINHELP_HandleLink((ENLINK *)lParam, Globals.active_popup)) return FALSE; break; default: return FALSE; } break; } case WM_ACTIVATE: if (LOWORD(wParam) != WA_INACTIVE || (HWND)lParam == Globals.active_win->hMainWnd || (HWND)lParam == Globals.active_popup->hMainWnd || GetWindow((HWND)lParam, GW_OWNER) == Globals.active_win->hMainWnd) return FALSE; break; case WM_LBUTTONDOWN: if (hWnd == popup->hMainWnd) { static inloop = FALSE; if (inloop) return FALSE; inloop = TRUE; CallWindowProcA(popup->origRicheditWndProc, GetDlgItem(popup->hMainWnd, CTL_ID_TEXT), msg, wParam, lParam); inloop = FALSE; break; } case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: case WM_NCLBUTTONDOWN: case WM_NCMBUTTONDOWN: case WM_NCRBUTTONDOWN: if (hWnd != popup->hMainWnd) ret = FALSE; break; default: return FALSE; } WINHELP_ReleaseWindow(popup); if (lret) *lret = 1; return ret; } /*********************************************************************** * * WINHELP_ButtonWndProc */ static LRESULT CALLBACK WINHELP_ButtonWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (WINHELP_CheckPopup(hWnd, msg, wParam, lParam, NULL)) return 0; if (msg == WM_KEYDOWN) { switch (wParam) { case VK_UP: case VK_DOWN: case VK_PRIOR: case VK_NEXT: case VK_ESCAPE: return SendMessageA(GetParent(hWnd), msg, wParam, lParam); } } return CallWindowProcA(Globals.button_proc, hWnd, msg, wParam, lParam); } /*********************************************************************** * * WINHELP_ButtonBoxWndProc */ static LRESULT CALLBACK WINHELP_ButtonBoxWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { WINDOWPOS *winpos; WINHELP_WINDOW *win; WINHELP_BUTTON *button; SIZE button_size; INT x, y; if (WINHELP_CheckPopup(hWnd, msg, wParam, lParam, NULL)) return 0L; switch (msg) { case WM_WINDOWPOSCHANGING: winpos = (WINDOWPOS*) lParam; win = (WINHELP_WINDOW*) GetWindowLongPtrW(GetParent(hWnd), 0); /* Update buttons */ button_size.cx = 0; button_size.cy = 0; for (button = win->first_button; button; button = button->next) { HDC hDc; SIZE textsize; WCHAR u16str[21]; u16str[20] = 0; MultiByteToWideChar(win->page->file->codepage, 0, button->lpszName, -1, u16str, 20); if (!button->hWnd) { button->hWnd = CreateWindowW(STRING_BUTTON, u16str, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hWnd, (HMENU) button->wParam, Globals.hInstance, 0); if (button->hWnd) { if (Globals.button_proc == NULL) { NONCLIENTMETRICSW ncm; Globals.button_proc = (WNDPROC) GetWindowLongPtrW(button->hWnd, GWLP_WNDPROC); ncm.cbSize = sizeof(NONCLIENTMETRICSW); SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncm, 0); Globals.hButtonFont = CreateFontIndirectW(&ncm.lfMenuFont); } SetWindowLongPtrW(button->hWnd, GWLP_WNDPROC, (LONG_PTR) WINHELP_ButtonWndProc); if (Globals.hButtonFont) SendMessageW(button->hWnd, WM_SETFONT, (WPARAM)Globals.hButtonFont, TRUE); } } hDc = GetDC(button->hWnd); GetTextExtentPointW(hDc, u16str, wcslen(u16str), &textsize); ReleaseDC(button->hWnd, hDc); button_size.cx = max(button_size.cx, textsize.cx + BUTTON_CX); button_size.cy = max(button_size.cy, textsize.cy + BUTTON_CY); } x = 0; y = 0; for (button = win->first_button; button; button = button->next) { SetWindowPos(button->hWnd, HWND_TOP, x, y, button_size.cx, button_size.cy, 0); if (x + 2 * button_size.cx <= winpos->cx) x += button_size.cx; else x = 0, y += button_size.cy; } winpos->cy = y + (x ? button_size.cy : 0); break; case WM_COMMAND: SendMessageW(GetParent(hWnd), msg, wParam, lParam); break; case WM_KEYDOWN: switch (wParam) { case VK_UP: case VK_DOWN: case VK_PRIOR: case VK_NEXT: case VK_ESCAPE: return SendMessageA(GetParent(hWnd), msg, wParam, lParam); } break; } return DefWindowProcW(hWnd, msg, wParam, lParam); } /****************************************************************** * WINHELP_HistoryWndProc * * */ static LRESULT CALLBACK WINHELP_HistoryWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { WINHELP_WINDOW* win; PAINTSTRUCT ps; HDC hDc; TEXTMETRICW tm; unsigned int i; RECT r; switch (msg) { case WM_NCCREATE: win = (WINHELP_WINDOW*)((LPCREATESTRUCTW)lParam)->lpCreateParams; SetWindowLongPtrW(hWnd, 0, (ULONG_PTR)win); win->hHistoryWnd = hWnd; break; case WM_CREATE: hDc = GetDC(hWnd); SelectObject(hDc, GetStockObject(DEFAULT_GUI_FONT)); GetTextMetricsW(hDc, &tm); GetWindowRect(hWnd, &r); r.right = r.left + 30 * tm.tmAveCharWidth; r.bottom = r.top + ARRAY_SIZE(Globals.history.set) * tm.tmHeight; AdjustWindowRect(&r, GetWindowLongW(hWnd, GWL_STYLE), FALSE); if (r.left < 0) {r.right -= r.left; r.left = 0;} if (r.top < 0) {r.bottom -= r.top; r.top = 0;} MoveWindow(hWnd, r.left, r.top, r.right, r.bottom, TRUE); ReleaseDC(hWnd, hDc); break; case WM_LBUTTONDOWN: hDc = GetDC(hWnd); SelectObject(hDc, GetStockObject(DEFAULT_GUI_FONT)); GetTextMetricsW(hDc, &tm); i = HIWORD(lParam) / tm.tmHeight; if (i < Globals.history.index) WINHELP_CreateHelpWindow(&Globals.history.set[i], SW_SHOW, TRUE); ReleaseDC(hWnd, hDc); break; case WM_PAINT: hDc = BeginPaint(hWnd, &ps); SelectObject(hDc, GetStockObject(DEFAULT_GUI_FONT)); GetTextMetricsW(hDc, &tm); for (i = 0; i < Globals.history.index; i++) { if (Globals.history.set[i].page->file == Globals.active_win->page->file) { TextOutW(hDc, 0, i * tm.tmHeight, Globals.history.set[i].page->lpszTitle, wcslen(Globals.history.set[i].page->lpszTitle)); } else { char buffer[50]; WCHAR title[101]; const char* ptr1; const char* ptr2; unsigned len; ptr1 = strrchr(Globals.history.set[i].page->file->lpszPath, '\\'); if (!ptr1) ptr1 = Globals.history.set[i].page->file->lpszPath; else ptr1++; ptr2 = strrchr(ptr1, '.'); len = ptr2 ? ptr2 - ptr1 : strlen(ptr1); if (len > sizeof(buffer)) len = sizeof(buffer); memcpy(buffer, ptr1, len); if (len < sizeof(buffer)) buffer[len++] = ':'; buffer[len] = '\0'; MultiByteToWideChar(CP_ACP, 0, buffer, -1, title, 100); wcsncat(title, Globals.history.set[i].page->lpszTitle, 100); title[100] = 0; TextOutW(hDc, 0, i * tm.tmHeight, title, wcslen(title)); } } EndPaint(hWnd, &ps); break; case WM_DESTROY: win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); if (hWnd == win->hHistoryWnd) win->hHistoryWnd = 0; break; } return DefWindowProcW(hWnd, msg, wParam, lParam); } static void comp_TTLBTree(void *p, const void *key, int leaf, void **next) { *next = (char *)p + 5 + (leaf?strlen((char *)p + 4):1); if (leaf && (*(DWORD *)*next > key)) return 0; return *(DWORD *)p - (DWORD)key; } static INT_PTR CALLBACK WINHELP_TopicDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { static struct index_data* id; HWND hListWnd = GetDlgItem(hWnd, IDC_TOPICS); switch (msg) { case WM_INITDIALOG: { WCHAR u16str[100]; id = (struct index_data*)lParam; for (int i = 0; i < id->count; i++) { DWORD toffset = ((DWORD *)id->offset)[i]; BYTE* ptr = HLPFILE_BPTreeSearch(id->hlpfile->ttlbtree, toffset, comp_TTLBTree) + 4; MultiByteToWideChar(id->hlpfile->codepage, 0, ptr, -1, u16str, 100); int idx = SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)u16str); SendMessageW(hListWnd, LB_SETITEMDATA, idx, (LPARAM)toffset); } SendMessageW(hListWnd, LB_SETCURSEL, 0, 0); } case WM_COMMAND: { int sel = SendMessageW(hListWnd, LB_GETCURSEL, 0, 0); switch (LOWORD(wParam)) { case IDC_TOPICS: if (HIWORD(wParam) == LBN_DBLCLK) EndDialog(hWnd, SendMessageW(hListWnd, LB_GETITEMDATA, sel, 0)); break; case 1: EndDialog(hWnd, SendMessageW(hListWnd, LB_GETITEMDATA, sel, 0)); break; case 2: EndDialog(hWnd, -1); break; } break; } } return 0; } /************************************************************************** * cb_KWBTree * * HLPFILE_BPTreeCallback enumeration function for '|KWBTREE' internal file. * */ static void cb_KWBTree(void *p, void **next, void *cookie) { HWND hListWnd = ((DWORD *)cookie)[0]; WORD cp = ((DWORD *)cookie)[1]; int count; WCHAR u16str[100]; WINE_TRACE("Adding %s to search list\n", debugstr_a((char *)p)); MultiByteToWideChar(cp, 0, p, -1, u16str, 100); SendMessageW(hListWnd, LB_INSERTSTRING, -1, (LPARAM)u16str); count = SendMessageW(hListWnd, LB_GETCOUNT, 0, 0); SendMessageW(hListWnd, LB_SETITEMDATA, count-1, (LPARAM)p); *next = (char*)p + strlen((char*)p) + 7; } /************************************************************************** * WINHELP_IndexDlgProc * */ static INT_PTR CALLBACK WINHELP_IndexDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { static struct index_data* id; int sel; switch (msg) { case WM_INITDIALOG: { DWORD data[2]; id = (struct index_data*)((PROPSHEETPAGEA*)lParam)->lParam; data[0] = GetDlgItem(hWnd, IDC_INDEXLIST); data[1] = id->hlpfile->codepage; HLPFILE_BPTreeEnum(id->hlpfile->xw[0].tree, cb_KWBTree, data); id->jump = FALSE; id->offset = 1; SendDlgItemMessageW(hWnd, IDC_INDEXLIST, LB_SETCURSEL, 0, 0); return TRUE; } case WM_COMMAND: switch (HIWORD(wParam)) { case LBN_DBLCLK: if (LOWORD(wParam) == IDC_INDEXLIST) SendMessageW(GetParent(hWnd), PSM_PRESSBUTTON, PSBTN_OK, 0); break; } break; case WM_NOTIFY: switch (((NMHDR*)lParam)->code) { case PSN_APPLY: sel = SendDlgItemMessageW(hWnd, IDC_INDEXLIST, LB_GETCURSEL, 0, 0); if (sel != LB_ERR) { BYTE *p; p = (BYTE*)SendDlgItemMessageW(hWnd, IDC_INDEXLIST, LB_GETITEMDATA, sel, 0); p += strlen((char *)p); id->count = *(short*)((char *)p + 1); id->offset = *(ULONG*)((char *)p + 3); id->offset = (DWORD)(id->hlpfile->xw[0].data + id->offset + 9); if (id->count > 1) { if (id->hlpfile->ttlbtree) { id->offset = DialogBoxParamW(NULL, MAKEINTRESOURCE(IDD_TOPIC), hWnd, WINHELP_TopicDlgProc, id); if (id->offset == 0xFFFFFFFF) return TRUE; } else { MessageBoxA(hWnd, "topic not found", "Error", MB_OK | MB_ICONSTOP); SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, PSNRET_INVALID); return TRUE; } } else id->offset = *((ULONG*)id->offset); if (id->offset == 0xFFFFFFFF) { MessageBoxA(hWnd, "macro keywords not supported yet", "Error", MB_OK | MB_ICONSTOP); SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, PSNRET_INVALID); return TRUE; } id->jump = TRUE; SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, PSNRET_NOERROR); } return TRUE; default: return FALSE; } break; default: break; } return FALSE; } /************************************************************************** * WINHELP_SearchDlgProc * */ static INT_PTR CALLBACK WINHELP_SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: return TRUE; case WM_NOTIFY: switch (((NMHDR*)lParam)->code) { case PSN_APPLY: SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, PSNRET_NOERROR); return TRUE; default: return FALSE; } break; default: break; } return FALSE; } /*********************************************************************** * * WINHELP_MainWndProc */ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { WINHELP_WINDOW *win; WINHELP_BUTTON *button; HWND hTextWnd; LRESULT ret; if (WINHELP_CheckPopup(hWnd, msg, wParam, lParam, &ret)) return ret; switch (msg) { case WM_NCCREATE: win = (WINHELP_WINDOW*) ((LPCREATESTRUCTW) lParam)->lpCreateParams; SetWindowLongPtrW(hWnd, 0, (ULONG_PTR) win); if (!win->page && Globals.isBook) PostMessageW(hWnd, WM_COMMAND, MNID_FILE_OPEN, 0); win->hMainWnd = hWnd; break; case WM_WINDOWPOSCHANGED: WINHELP_LayoutMainWindow((WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0)); break; case WM_COMMAND: win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); switch (LOWORD(wParam)) { /* Menu FILE */ case MNID_FILE_OPEN: MACRO_FileOpen(); break; case MNID_FILE_PRINT: MACRO_Print(); break; case MNID_FILE_SETUP: MACRO_PrinterSetup(); break; case MNID_FILE_EXIT: MACRO_Exit(); break; /* Menu EDIT */ case MNID_EDIT_COPYDLG: SendDlgItemMessageW(hWnd, CTL_ID_TEXT, WM_COPY, 0, 0); break; case MNID_EDIT_ANNOTATE:MACRO_Annotate(); break; /* Menu Bookmark */ case MNID_BKMK_DEFINE: MACRO_BookmarkDefine(); break; /* Menu Help */ case MNID_HELP_HELPON: MACRO_HelpOn(); break; case MNID_HELP_HELPTOP: MACRO_HelpOnTop(); break; case MNID_HELP_ABOUT: MACRO_About(); break; /* Context help */ case MNID_CTXT_ANNOTATE:MACRO_Annotate(); break; case MNID_CTXT_COPY: SendDlgItemMessageW(hWnd, CTL_ID_TEXT, WM_COPY, 0, 0); break; case MNID_CTXT_PRINT: MACRO_Print(); break; case MNID_OPTS_HISTORY: MACRO_History(); break; case MNID_OPTS_FONTS_SMALL: case MNID_CTXT_FONTS_SMALL: win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); if (win->font_scale != 0) { win->font_scale = 0; WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */); } break; case MNID_OPTS_FONTS_NORMAL: case MNID_CTXT_FONTS_NORMAL: win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); if (win->font_scale != 1) { win->font_scale = 1; WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */); } break; case MNID_OPTS_FONTS_LARGE: case MNID_CTXT_FONTS_LARGE: win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); if (win->font_scale != 2) { win->font_scale = 2; WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */); } break; default: /* Buttons */ for (button = win->first_button; button; button = button->next) if (wParam == button->wParam) break; if (button) MACRO_ExecuteMacro(win, button->lpszMacro); else if (!HIWORD(wParam)) MessageBoxW(0, MAKEINTRESOURCEW(STID_NOT_IMPLEMENTED), MAKEINTRESOURCEW(STID_WHERROR), MB_OK); break; } break; /* EPP case WM_DESTROY: */ /* EPP if (Globals.hPopupWnd) DestroyWindow(Globals.hPopupWnd); */ /* EPP break; */ case WM_COPYDATA: { COPYDATASTRUCT* cds = (COPYDATASTRUCT*)lParam; WINEHELP* wh; if (cds->dwData != 0xA1DE505) { WINE_FIXME("Wrong magic number (%08lx)\n", cds->dwData); return 0; } return WINHELP_HandleCommand((HWND)wParam, cds->lpData, FALSE); } case 0x38: //WH_WINHELP return WINHELP_HandleCommand((HWND)wParam, (WINEHELP *)lParam, TRUE); case WM_CHAR: if (wParam == 3) { SendDlgItemMessageW(hWnd, CTL_ID_TEXT, WM_COPY, 0, 0); return 0; } break; case WM_KEYDOWN: win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT); switch (wParam) { case VK_UP: SendMessageW(hTextWnd, EM_SCROLL, SB_LINEUP, 0); return 0; case VK_DOWN: SendMessageW(hTextWnd, EM_SCROLL, SB_LINEDOWN, 0); return 0; case VK_PRIOR: SendMessageW(hTextWnd, EM_SCROLL, SB_PAGEUP, 0); return 0; case VK_NEXT: SendMessageW(hTextWnd, EM_SCROLL, SB_PAGEDOWN, 0); return 0; case VK_ESCAPE: MACRO_Exit(); return 0; } break; case WM_NOTIFY: if (wParam == CTL_ID_TEXT) { RECT rc; RECT orc; switch (((NMHDR*)lParam)->code) { case EN_MSGFILTER: { const MSGFILTER* msgf = (const MSGFILTER*)lParam; switch (msgf->msg) { case WM_LBUTTONDOWN: { win = (WINHELP_WINDOW*)GetWindowLongPtrW(hWnd, 0); HLPFILE_HOTSPOTLINK* hs = WINHELP_FindHotSpot(win, msgf->lParam); if (hs) { WINHELP_DoLink(win, &hs->link, msgf->lParam); return TRUE; } break; } case WM_KEYUP: if (msgf->wParam == VK_ESCAPE) WINHELP_ReleaseWindow((WINHELP_WINDOW*)GetWindowLongPtrW(hWnd, 0)); break; case WM_RBUTTONDOWN: { HMENU hMenu; POINT pt; win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); hMenu = LoadMenuW(Globals.hInstance, MAKEINTRESOURCEW(CONTEXT_MENU)); switch (win->font_scale) { case 0: CheckMenuItem(hMenu, MNID_CTXT_FONTS_SMALL, MF_BYCOMMAND|MF_CHECKED); break; default: WINE_FIXME("Unsupported %d\n", win->font_scale); /* fall through */ case 1: CheckMenuItem(hMenu, MNID_CTXT_FONTS_NORMAL, MF_BYCOMMAND|MF_CHECKED); break; case 2: CheckMenuItem(hMenu, MNID_CTXT_FONTS_LARGE, MF_BYCOMMAND|MF_CHECKED); break; } pt.x = (int)(short)LOWORD(msgf->lParam); pt.y = (int)(short)HIWORD(msgf->lParam); ClientToScreen(msgf->nmhdr.hwndFrom, &pt); TrackPopupMenu(GetSubMenu(hMenu, 0), TPM_LEFTALIGN|TPM_TOPALIGN, pt.x, pt.y, 0, hWnd, NULL); DestroyMenu(hMenu); } break; default: break; } } break; case EN_REQUESTRESIZE: rc = ((REQRESIZE*)lParam)->rc; win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); GetClientRect(win->hMainWnd, &orc); /* permit the popup to get wider but not narrower */ if ((rc.right - rc.left) < orc.right) { rc.left = orc.left; rc.right = orc.right; } AdjustWindowRect(&rc, GetWindowLongW(win->hMainWnd, GWL_STYLE), FALSE); SetWindowPos(win->hMainWnd, HWND_TOP, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER); WINHELP_LayoutMainWindow(win); break; case EN_LINK: WINHELP_HandleLink((ENLINK *)lParam, (WINHELP_WINDOW*)GetWindowLongPtrW(hWnd, 0)); break; } } break; case WM_INITMENUPOPUP: win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); CheckMenuItem((HMENU)wParam, MNID_OPTS_FONTS_SMALL, (win->font_scale == 0) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem((HMENU)wParam, MNID_OPTS_FONTS_NORMAL, (win->font_scale == 1) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem((HMENU)wParam, MNID_OPTS_FONTS_LARGE, (win->font_scale == 2) ? MF_CHECKED : MF_UNCHECKED); break; case WM_DESTROY: win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0); WINHELP_DeleteWindow(win); break; } return DefWindowProcW(hWnd, msg, wParam, lParam); } /************************************************************************** * WINHELP_CreateIndexWindow * * Displays a dialog with keywords of current help file. * */ BOOL WINHELP_CreateIndexWindow(BOOL is_search) { HPROPSHEETPAGE psPage[3]; PROPSHEETPAGEA psp; PROPSHEETHEADERA psHead; struct index_data id; char buf[256]; WCHAR u16buf[256]; if (Globals.active_win && Globals.active_win->page && Globals.active_win->page->file) id.hlpfile = Globals.active_win->page->file; else return FALSE; if (id.hlpfile->xw[0].id != 'K') { WINE_TRACE("Missing Keyword File\n"); return FALSE; } InitCommonControls(); id.jump = FALSE; memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = Globals.hInstance; psp.u.pszTemplate = MAKEINTRESOURCEA(IDD_INDEX); psp.lParam = (LPARAM)&id; psp.pfnDlgProc = WINHELP_IndexDlgProc; psPage[0] = CreatePropertySheetPageW(&psp); psp.u.pszTemplate = MAKEINTRESOURCEA(IDD_SEARCH); psp.lParam = (LPARAM)&id; psp.pfnDlgProc = WINHELP_SearchDlgProc; psPage[1] = CreatePropertySheetPageW(&psp); memset(&psHead, 0, sizeof(psHead)); psHead.dwSize = sizeof(psHead); LoadStringA(Globals.hInstance, STID_PSH_INDEX, buf, sizeof(buf)); strcat(buf, Globals.active_win->info->caption); MultiByteToWideChar(id.hlpfile->codepage, 0, buf, -1, u16buf, 256); psHead.pszCaption = u16buf; psHead.nPages = 2; psHead.u2.nStartPage = is_search ? 1 : 0; psHead.hwndParent = Globals.active_win->hMainWnd; psHead.u3.phpage = psPage; psHead.dwFlags = PSH_NOAPPLYNOW; PropertySheetW(&psHead); if (id.jump) { WINE_TRACE("got %d as an offset\n", id.offset); WINHELP_OpenHelpWindow(HLPFILE_PageByOffset, id.hlpfile, id.offset, Globals.active_win->info, SW_NORMAL); } return TRUE; } /*********************************************************************** * * RegisterWinClasses */ static BOOL WINHELP_RegisterWinClasses(void) { WNDCLASSEXA class_main, class_button_box, class_history; class_main.cbSize = sizeof(class_main); class_main.style = CS_HREDRAW | CS_VREDRAW; class_main.lpfnWndProc = WINHELP_MainWndProc; class_main.cbClsExtra = 0; class_main.cbWndExtra = sizeof(WINHELP_WINDOW *); class_main.hInstance = Globals.hInstance; class_main.hIcon = LoadIconW(Globals.hInstance, MAKEINTRESOURCEW(IDI_WINHELP)); class_main.hCursor = LoadCursorW(0, (LPWSTR)IDC_ARROW); class_main.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); class_main.lpszMenuName = 0; class_main.lpszClassName = MAIN_WIN_CLASS_NAME; class_main.hIconSm = LoadImageW(Globals.hInstance, MAKEINTRESOURCEW(IDI_WINHELP), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED); class_button_box = class_main; class_button_box.lpfnWndProc = WINHELP_ButtonBoxWndProc; class_button_box.cbWndExtra = 0; class_button_box.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); class_button_box.lpszClassName = BUTTON_BOX_WIN_CLASS_NAME; class_history = class_main; class_history.lpfnWndProc = WINHELP_HistoryWndProc; class_history.lpszClassName = HISTORY_WIN_CLASS_NAME; return (RegisterClassExW(&class_main) && RegisterClassExW(&class_button_box) && RegisterClassExW(&class_history)); } /*********************************************************************** * * WinMain */ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show) { MSG msg; LONG lHash = 0; HLPFILE* hlpfile; static CHAR default_wndname[] = "main"; LPSTR wndname = default_wndname; WINHELP_DLL* dll; HACCEL hAccel; Globals.hInstance = hInstance; if (LoadLibraryA("msftedit.dll") == NULL) return MessageBoxW(0, MAKEINTRESOURCEW(STID_NO_RICHEDIT), MAKEINTRESOURCEW(STID_WHERROR), MB_OK); /* Get options */ while (*cmdline && (*cmdline == ' ' || *cmdline == '-')) { CHAR option; LPCSTR topic_id; if (*cmdline++ == ' ') continue; option = *cmdline; if (option) cmdline++; while (*cmdline == ' ') cmdline++; switch (option) { case 'i': case 'I': topic_id = cmdline; while (*cmdline && *cmdline != ' ') cmdline++; if (*cmdline) *cmdline++ = '\0'; lHash = HLPFILE_Hash(topic_id); break; case '3': case '4': Globals.wVersion = option - '0'; break; case 'x': show = SW_HIDE; Globals.isBook = FALSE; break; default: WINE_FIXME("Unsupported cmd line: %s\n", debugstr_a(cmdline)); break; } } /* Create primary window */ if (!WINHELP_RegisterWinClasses()) { WINE_FIXME("Couldn't register classes\n"); return 0; } if (*cmdline) { char* ptr; if ((*cmdline == '"') && (ptr = strchr(cmdline+1, '"'))) { cmdline++; *ptr = '\0'; } if ((ptr = strchr(cmdline, '>'))) { *ptr = '\0'; wndname = ptr + 1; } hlpfile = WINHELP_LookupHelpFile(cmdline); if (!hlpfile) return 0; } else hlpfile = NULL; WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, lHash, WINHELP_GetWindowInfo(hlpfile, wndname), show); /* Message loop */ hAccel = LoadAcceleratorsW(hInstance, MAKEINTRESOURCEW(MAIN_ACCEL)); while ((Globals.win_list || Globals.active_popup) && GetMessageW(&msg, 0, 0, 0)) { HWND hWnd = Globals.active_win ? Globals.active_win->hMainWnd : NULL; if (!TranslateAcceleratorW(hWnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessageW(&msg); } } for (dll = Globals.dlls; dll; dll = dll->next) { if (dll->class & DC_INITTERM) dll->handler(DW_TERM, 0, 0); } return 0; } ================================================ FILE: winhlp32/winhelp.h ================================================ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * Copyright 2002 Sylvain Petreolle * 2002 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define MAX_LANGUAGE_NUMBER 255 #define MAX_STRING_LEN 255 #define INTERNAL_BORDER_WIDTH 5 #define POPUP_YDISTANCE 20 #define SHADOW_DX 10 #define SHADOW_DY 10 #define BUTTON_CX 6 #define BUTTON_CY 6 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define RICHEDIT_CLASS20A "RichEdit20A" # define strncasecmp _strnicmp # define strcasecmp _stricmp #define EE_CHARSET 0xEE #ifndef RC_INVOKED #include #include "hlpfile.h" #include "windef.h" #include "winbase.h" #include "macro.h" #include "winhelp_res.h" typedef struct tagHelpButton { HWND hWnd; LPCSTR lpszID; LPCSTR lpszName; LPCSTR lpszMacro; WPARAM wParam; RECT rect; struct tagHelpButton*next; } WINHELP_BUTTON; typedef struct { HLPFILE_PAGE* page; HLPFILE_WINDOWINFO* wininfo; ULONG relative; } WINHELP_WNDPAGE; typedef struct tagPageSet { /* FIXME: for now it's a fixed size */ WINHELP_WNDPAGE set[40]; unsigned index; } WINHELP_PAGESET; typedef struct tagWinHelp { unsigned ref_count; WINHELP_BUTTON* first_button; HLPFILE_PAGE* page; HWND hMainWnd; HWND hHistoryWnd; WNDPROC origRicheditWndProc; HFONT* fonts; UINT fonts_len; HCURSOR hHandCur; HBRUSH hBrush; HLPFILE_WINDOWINFO* info; WINHELP_PAGESET back; unsigned font_scale; /* 0 = small, 1 = normal, 2 = large */ ULONG offset; struct tagWinHelp* next; } WINHELP_WINDOW; #define DC_NOMSG 0x00000000 #define DC_MINMAX 0x00000001 #define DC_INITTERM 0x00000002 #define DC_JUMP 0x00000004 #define DC_ACTIVATE 0x00000008 #define DC_CALLBACKS 0x00000010 #define DW_NOTUSED 0 #define DW_WHATMSG 1 #define DW_MINMAX 2 #define DW_SIZE 3 #define DW_INIT 4 #define DW_TERM 5 #define DW_STARTJUMP 6 #define DW_ENDJUMP 7 #define DW_CHGFILE 8 #define DW_ACTIVATE 9 #define DW_CALLBACKS 10 typedef LONG (CALLBACK *WINHELP_LDLLHandler)(WORD, LONG_PTR, LONG_PTR); typedef struct tagDll { HANDLE hLib; const char* name; WINHELP_LDLLHandler handler; DWORD class; struct tagDll* next; } WINHELP_DLL; typedef struct { UINT wVersion; HANDLE hInstance; BOOL isBook; WINHELP_WINDOW* active_win; WINHELP_WINDOW* active_popup; WINHELP_WINDOW* win_list; WNDPROC button_proc; WINHELP_DLL* dlls; WINHELP_PAGESET history; HFONT hButtonFont; } WINHELP_GLOBALS; extern const struct winhelp_callbacks { WORD (WINAPI *GetFSError)(void); HANDLE (WINAPI *HfsOpenSz)(LPSTR,BYTE); WORD (WINAPI *RcCloseHfs)(HANDLE); HANDLE (WINAPI *HfOpenHfs)(HANDLE,LPSTR,BYTE); HANDLE (WINAPI *RcCloseHf)(HANDLE); LONG (WINAPI *LcbReadHf)(HANDLE,BYTE*,LONG); LONG (WINAPI *LTellHf)(HANDLE); LONG (WINAPI *LSeekHf)(HANDLE,LONG,WORD); BOOL (WINAPI *FEofHf)(HANDLE); LONG (WINAPI *LcbSizeHf)(HANDLE); BOOL (WINAPI *FAccessHfs)(HANDLE,LPSTR,BYTE); WORD (WINAPI *RcLLInfoFromHf)(HANDLE,WORD,LPWORD,LPLONG,LPLONG); WORD (WINAPI *RcLLInfoFromHfs)(HANDLE,LPSTR,WORD,LPWORD,LPLONG,LPLONG); void (WINAPI *ErrorW)(int); void (WINAPI *ErrorSz)(LPSTR); ULONG_PTR (WINAPI *GetInfo)(WORD,HWND); LONG (WINAPI *API)(LPSTR,WORD,DWORD); } Callbacks; struct index_data { HLPFILE* hlpfile; BOOL jump; ULONG offset; WORD count; }; extern WINHELP_GLOBALS Globals; BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE*, int, BOOL); BOOL WINHELP_OpenHelpWindow(HLPFILE_PAGE* (*)(HLPFILE*, LONG, ULONG*), HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int); BOOL WINHELP_GetOpenFileName(LPSTR, int); BOOL WINHELP_CreateIndexWindow(BOOL); void WINHELP_DeleteBackSet(WINHELP_WINDOW*); HLPFILE* WINHELP_LookupHelpFile(LPCSTR lpszFile); HLPFILE_WINDOWINFO* WINHELP_GetWindowInfo(HLPFILE* hlpfile, LPCSTR name); void WINHELP_LayoutMainWindow(WINHELP_WINDOW* win); WINHELP_WINDOW* WINHELP_GrabWindow(WINHELP_WINDOW*); BOOL WINHELP_ReleaseWindow(WINHELP_WINDOW*); BOOL WINHELP_SearchKey(char keyfile, LPCSTR keywords, LONG type, LPCSTR topic, LPCSTR window, WINHELP_WINDOW *currwin, HLPFILE* hlpfile); extern const WCHAR MAIN_WIN_CLASS_NAME[]; extern const WCHAR BUTTON_BOX_WIN_CLASS_NAME[]; extern const char TEXT_WIN_CLASS_NAME[]; extern const char SHADOW_WIN_CLASS_NAME[]; extern const WCHAR HISTORY_WIN_CLASS_NAME[]; extern const WCHAR STRING_BUTTON[]; extern const char STRING_MENU_Xx[]; extern const char STRING_DIALOG_TEST[]; #endif /* Buttons */ #define WH_FIRST_BUTTON 500 ================================================ FILE: winhlp32/winhelp_res.h ================================================ #include #include #define MNID_FILE_OPEN 0x101 #define MNID_FILE_PRINT 0x104 #define MNID_FILE_SETUP 0x106 #define MNID_FILE_EXIT 0x108 #define MNID_EDIT_COPYDLG 0x111 #define MNID_EDIT_ANNOTATE 0x112 #define MNID_BKMK_DEFINE 0x121 #define MNID_OPTS_HISTORY 0x134 #define MNID_OPTS_FONTS_SMALL 0x135 #define MNID_OPTS_FONTS_NORMAL 0x136 #define MNID_OPTS_FONTS_LARGE 0x137 #define MNID_HELP_HELPON 0x141 #define MNID_HELP_HELPTOP 0x142 #define MNID_HELP_ABOUT 0x143 #define MNID_CTXT_ANNOTATE 0x200 #define MNID_CTXT_COPY 0x201 #define MNID_CTXT_PRINT 0x202 #define MNID_CTXT_FONTS_SMALL 0x210 #define MNID_CTXT_FONTS_NORMAL 0x211 #define MNID_CTXT_FONTS_LARGE 0x212 #define MAIN_MENU 0xF000 #define CONTEXT_MENU 0xF001 #define MAIN_ACCEL 0xF002 #define STID_WINE_HELP 0x120 #define STID_WHERROR 0x121 #define STID_WARNING 0x122 #define STID_INFO 0x123 #define STID_NOT_IMPLEMENTED 0x124 #define STID_HLPFILE_ERROR_s 0x125 #define STID_CONTENTS 0x126 #define STID_INDEX 0x127 #define STID_BACK 0x128 #define STID_ALL_FILES 0x12B #define STID_HELP_FILES_HLP 0x12C #define STID_DIALOG_TEST 0x12D #define STID_FILE_NOT_FOUND_s 0x12E #define STID_NO_RICHEDIT 0x12F #define STID_PSH_INDEX 0x130 #define IDD_INDEX 0x150 #define IDC_INDEXLIST 0x151 #define IDD_SEARCH 0x152 #define IDD_TOPIC 0x153 #define IDC_TOPICS 0x154 #define IDI_WINHELP 0xF00 ================================================ FILE: winhlp32/winhlp32.rc ================================================ /* * Help Viewer * * Copyright 1996 Ulrich Schmid * Copyright 2002 Sylvain Petreolle * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "winhelp_res.h" #pragma makedep po LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT MAIN_MENU MENU { POPUP "&File" { MENUITEM "&Open...", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "&Print...", MNID_FILE_PRINT MENUITEM "Printer &setup...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "E&xit", MNID_FILE_EXIT } POPUP "&Edit" { MENUITEM "&Copy", MNID_EDIT_COPYDLG MENUITEM SEPARATOR MENUITEM "&Annotate...", MNID_EDIT_ANNOTATE } POPUP "&Bookmark" { MENUITEM "&Define...", MNID_BKMK_DEFINE } POPUP "&Options" { MENUITEM "Always on &top", MNID_HELP_HELPTOP MENUITEM "History", MNID_OPTS_HISTORY POPUP "Fonts" BEGIN MENUITEM "Small", MNID_OPTS_FONTS_SMALL MENUITEM "Normal", MNID_OPTS_FONTS_NORMAL MENUITEM "Large", MNID_OPTS_FONTS_LARGE END } POPUP "&Help" { MENUITEM "&Help on help\tF1", MNID_HELP_HELPON MENUITEM "&About Wine Help", MNID_HELP_ABOUT } } CONTEXT_MENU MENU BEGIN POPUP "" BEGIN MENUITEM "Annotation...", MNID_CTXT_ANNOTATE MENUITEM "Copy", MNID_CTXT_COPY MENUITEM "Print...", MNID_CTXT_PRINT POPUP "Fonts" BEGIN MENUITEM "Small", MNID_CTXT_FONTS_SMALL MENUITEM "Normal", MNID_CTXT_FONTS_NORMAL MENUITEM "Large", MNID_CTXT_FONTS_LARGE END END END STRINGTABLE { STID_WINE_HELP, "Wine Help" STID_WHERROR, "ERROR" STID_WARNING, "WARNING" STID_INFO, "Information" STID_NOT_IMPLEMENTED, "Not yet implemented" STID_HLPFILE_ERROR_s, "Error while reading the help file `%s'" STID_INDEX, "&Index" STID_CONTENTS, "Summary" STID_BACK, "&Back" STID_ALL_FILES, "All files (*.*)" STID_HELP_FILES_HLP, "Help files (*.hlp)" STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yourself?" STID_NO_RICHEDIT "Cannot find a richedit implementation... Aborting" STID_PSH_INDEX, "Help topics: " } IDD_INDEX DIALOG 0, 0, 200, 190 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | LBS_STANDARD | WS_VSCROLL | WS_BORDER | WS_TABSTOP } IDD_SEARCH DIALOG 0, 0, 200, 190 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" CAPTION "Search" { LTEXT "Not yet implemented", -1, 10, 10, 180, 150 } IDD_TOPIC DIALOG 0, 0, 160, 130 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" CAPTION "Topics Found" { LISTBOX IDC_TOPICS, 5, 5, 150, 100, LBS_NOINTEGRALHEIGHT | LBS_STANDARD | WS_TABSTOP DEFPUSHBUTTON "OK", 1, 50, 110, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancel", 2, 100, 110, 50, 15, WS_GROUP | WS_TABSTOP } LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL MAIN_ACCEL ACCELERATORS { VK_F1, MNID_HELP_HELPON, VIRTKEY } /* @makedep: winhelp.ico */ IDI_WINHELP ICON winhelp.ico ================================================ FILE: winhlp32/winhlp32.vcxproj ================================================ Debug Win32 Release Win32 Document "$(FlexPath)flex" -d "%(FileName)%(Extension)" lex.yy.c ClCompile "$(FlexPath)flex" -d "%(FileName)%(Extension)" lex.yy.c ClCompile 15.0 {37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2} Win32Proj winhlp32 10.0.17134.0 Application true v141 Unicode Application false v141 true Unicode false true NotUsing Level3 MaxSpeed true true false WIN32;NDEBUG;_CONSOLE;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Windows true true true $(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) NotUsing Level3 Disabled false WIN32;_DEBUG;_CONSOLE;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) true ../wine Windows true $(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) ================================================ FILE: winhlp32/winhlp32.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;ipp;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ソース ファイル ヘッダー ファイル ヘッダー ファイル ヘッダー ファイル リソース ファイル ================================================ FILE: winnls/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(winnls SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/winnls.def winnls.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(winnls.dll16 winnls) target_link_libraries(winnls libwine winecrt0 krnl386 imm32.lib) set_target_properties(winnls PROPERTIES SUFFIX ".dll16") ================================================ FILE: winnls/winnls.c ================================================ /* * Copyright 2001 Andreas Mohr * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "winnls32.h" #include #include #include "wownt32.h" #include "wine/winuser16.h" WINE_DEFAULT_DEBUG_CHANNEL(winnls); WINE_DECLARE_DEBUG_CHANNEL(winnls); //BOOL WINAPI WINNLS32EnableIME(HWND hWnd, BOOL fEnable); //BOOL WINAPI WINNLS32GetEnableStatus(HWND hWnd); /*********************************************************************** * WINNLSEnableIME (WINNLS.16) */ BOOL WINAPI WINNLSEnableIME16( HWND16 hwnd, BOOL enable ) { return WINNLSEnableIME( HWND_32(hwnd), enable ); } /*********************************************************************** * WINNLSGetEnableStatus (WINNLS.18) */ BOOL WINAPI WINNLSGetEnableStatus16( HWND16 hwnd ) { return WINNLSGetEnableStatus( HWND_32(hwnd) ); } #include "ime.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(nls); #include typedef struct _tagIMEPRO16 { HWND16 hWnd; DATETIME InstDate; UINT16 wVersion; BYTE szDescription[50]; BYTE szName[80]; BYTE szOptions[30]; } IMEPRO16, *PIMEPRO16, NEAR *NPIMEPRO16, FAR *LPIMEPRO16; #include void IMEPRO16ToIMEPRO(IMEPRO16 *imepro, IMEPROA *imepro32) { imepro32->hWnd = HWND_32(imepro->hWnd); imepro32->InstDate = imepro->InstDate; imepro32->wVersion = imepro->wVersion; memcpy(imepro32->szDescription, imepro->szDescription, sizeof(imepro32->szDescription)); memcpy(imepro32->szName, imepro->szName, sizeof(imepro32->szName)); memcpy(imepro32->szOptions, imepro->szOptions, sizeof(imepro32->szOptions)); } void IMEPROToIMEPRO16(IMEPROA *imepro32, IMEPRO16 *imepro) { imepro->hWnd = HWND_16(imepro32->hWnd); imepro->InstDate = imepro32->InstDate; //lost data imepro->wVersion = (UINT16)imepro32->wVersion; memcpy(imepro->szDescription, imepro32->szDescription, sizeof(imepro32->szDescription)); memcpy(imepro->szName, imepro32->szName, sizeof(imepro32->szName)); memcpy(imepro->szOptions, imepro32->szOptions, sizeof(imepro32->szOptions)); } BOOL16 WINAPI IMPQueryIME16(IN OUT LPIMEPRO16 lpIMEPro) { IMEPROA imepro32; //WHY??? if (!strcmp(lpIMEPro->szName, "msctf.dll")) return FALSE; IMEPRO16ToIMEPRO(lpIMEPro, &imepro32); BOOL ret = IMPQueryIMEA(&imepro32); ERR("IMPQueryIME16(0x%p) ret{0x%p, \"%s\", \"%s\", \"%s\", %d}\n", lpIMEPro, imepro32.hWnd, imepro32.szDescription, imepro32.szName, imepro32.szOptions, imepro32.wVersion); IMEPROToIMEPRO16(&imepro32, lpIMEPro); return ret; } BOOL WINAPI IMPGetIME16(IN HWND16 hWnd, OUT LPIMEPRO16 lpIMEPro) { IMEPROA imepro32; BOOL ret = IMPGetIMEA(HWND_32(hWnd), &imepro32); ERR("\n"); IMEPROToIMEPRO16(&imepro32, lpIMEPro); return ret; } BOOL WINAPI IMPSetIME16(IN HWND16 hWnd, IN LPIMEPRO16 lpIMEPro) { IMEPROA imepro32; IMEPRO16ToIMEPRO(lpIMEPro, &imepro32); ERR("\n"); return IMPSetIMEA(HWND_32(hWnd), &imepro32); } BOOL WINAPI IMPModifyIME16(LPSTR lpStr, IN LPIMEPRO lpIMEPro) { ERR("NOTIMPL:IMPModifyIME16(\"%s\", 0x%p)\n", lpStr, lpIMEPro); return FALSE; } WORD WINAPI IMPGetDefaultIME16(LPIMEPRO lpIMEPro) { ERR("NOTIMPL:IMPGetDefaultIME16(0x%p)\n", lpIMEPro); return 0; } WORD WINAPI IMPSetDefaultIME16(LPIMEPRO lpIMEPro) { ERR("NOTIMPL:IMPSetDefaultIME16(0x%p)\n", lpIMEPro); return 0; } BOOL WINAPI WINNLSSendString16(HWND16 hWnd, WORD word, LPVOID lpVoid) { ERR("NOTIMPL:WINNLSSendString16(0x%p, %d, %p)\n", HWND_32(hWnd), word, lpVoid); return 0; } BOOL WINAPI WINNLSPostAppMessage16(HWND16 hWnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam) { ERR("NOTIMPL:WINNLSPostAppMessage16(0x%p, %d, %d, %d)\n", HWND_32(hWnd), msg, wParam, lParam); return 0; } LRESULT WINAPI WINNLSSendAppMessage16(HWND16 hWnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam) { ERR("NOTIMPL:WINNLSSendAppMessage16(0x%p, %d, %d, %d)\n", HWND_32(hWnd), msg, wParam, lParam); return 0; } BOOL WINAPI WINNLSSendControl16(WORD arg1, WORD arg2) { ERR("NOTIMPL:WINNLSSendControl16(%d, %d)\n", arg1, arg2); return 0; } #include typedef struct tagIMESTRUCT16 { UINT16 fnc; // function code WPARAM16 wParam; // word parameter UINT16 wCount; // word counter UINT16 dchSource; // offset to Source from top of memory object UINT16 dchDest; // offset to Desrination from top of memory object LPARAM lParam1; LPARAM lParam2; LPARAM lParam3; } IMESTRUCT16, *PIMESTRUCT16, NEAR *NPIMESTRUCT16, FAR *LPIMESTRUCT16; C_ASSERT(sizeof(IMESTRUCT16) == 0x16); typedef struct tagIMEMESSAGE16 { WORD unknown1; WORD unknown2; WORD unknown3; WORD unknown4; WORD unknown5; WORD unknown6; WORD unknown7; WORD unknown8; } IMEMESSAGE16, FAR *LPIMEMESSAGE16; #include /* convert a LOGFONT16 to a LOGFONTA */ static void logfont_16_to_A(const LOGFONT16 *font16, LPLOGFONTA font32) { font32->lfHeight = font16->lfHeight; font32->lfWidth = font16->lfWidth; font32->lfEscapement = font16->lfEscapement; font32->lfOrientation = font16->lfOrientation; font32->lfWeight = font16->lfWeight; font32->lfItalic = font16->lfItalic; font32->lfUnderline = font16->lfUnderline; font32->lfStrikeOut = font16->lfStrikeOut; font32->lfCharSet = font16->lfCharSet; font32->lfOutPrecision = font16->lfOutPrecision; font32->lfClipPrecision = font16->lfClipPrecision; font32->lfQuality = font16; font32->lfPitchAndFamily = font16->lfPitchAndFamily; memcpy(font32->lfFaceName, font16->lfFaceName, LF_FACESIZE); font32->lfFaceName[LF_FACESIZE - 1] = 0; } LRESULT WINAPI SendIMEMessageEx16( _In_ HWND16 hwnd, _In_ LPARAM lParam ) { HWND hwnd32 = HWND_32(hwnd); HGLOBAL16 hglobal = lParam; LPIMESTRUCT16 lpime = (LPIMESTRUCT16)(GlobalLock16(hglobal)); HGLOBAL hglobal32 = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, sizeof(IMESTRUCT)); LPIMESTRUCT lpime32 = (LPIMESTRUCT)(GlobalLock(hglobal32)); LRESULT ret = 0; LOGFONTA lfont; lpime32->fnc = lpime->fnc; lpime32->wParam = lpime->wParam; lpime32->wCount = lpime->wCount; lpime32->dchSource = lpime->dchSource; lpime32->dchDest = lpime->dchDest; lpime32->lParam1 = lpime->lParam1; lpime32->lParam2 = lpime->lParam2; lpime32->lParam3 = lpime->lParam3; switch (lpime32->fnc) { case IME_SETCONVERSIONWINDOW: { switch (lpime->wParam) { case MCW_WINDOW: TRACE("MCW_WINDOW(%p, %p, %p)\n", lpime->lParam1, lpime->lParam2, lpime->lParam3); break; case MCW_DEFAULT: TRACE("MCW_DEFAULT(%p, %p, %p)\n", lpime->lParam1, lpime->lParam2, lpime->lParam3); break; case MCW_RECT: TRACE("MCW_RECT(%p, %p, %p)\n", lpime->lParam1, lpime->lParam2, lpime->lParam3); break; case MCW_SCREEN: TRACE("MCW_SCREEN(%p, %p, %p)\n", lpime->lParam1, lpime->lParam2, lpime->lParam3); break; case MCW_VERTICAL: TRACE("MCW_VERTICAL(%p, %p, %p)\n", lpime->lParam1, lpime->lParam2, lpime->lParam3); break; case MCW_HIDDEN: TRACE("MCW_HIDDEN(%p, %p, %p)\n", lpime->lParam1, lpime->lParam2, lpime->lParam3); break; case MCW_WINDOW | MCW_RECT: TRACE("MCW_WINDOW | MCW_RECT(%p, %p, %p)\n", lpime->lParam1, lpime->lParam2, lpime->lParam3); break; case MCW_SCREEN | MCW_RECT: TRACE("MCW_SCREEN | MCW_RECT(%p, %p, %p)\n", lpime->lParam1, lpime->lParam2, lpime->lParam3); break; default: TRACE("IME_SETCONVERSIONWINDOW unknwon %04x (%p, %p, %p)\n", lpime->wParam, lpime->lParam1, lpime->lParam2, lpime->lParam3); break; } } break; case IME_ENTERWORDREGISTERMODE: TRACE("IME_ENTERWORDREGISTERMODE\n"); break; case IME_GETCONVERSIONMODE: TRACE("IME_GETCONVERSIONMODE\n"); break; case 0x12: case IME_SETCONVERSIONFONTEX: { LPLOGFONTA lplogfont = &lfont; TRACE("IME_SETCONVERSIONFONTEX %d\n", lpime32->fnc); if (lpime32->fnc == 0x12) { HFONT hFont32 = HFONT_32(lpime->wParam); if (!hFont32 || !GetObjectA(hFont32, sizeof(LOGFONTA), lplogfont)) { ret = 0; goto done; } } else if (lpime32->fnc == IME_SETCONVERSIONFONTEX) { if (lpime32->lParam1) { LPLOGFONT16 l16 = (LPLOGFONT16)GlobalLock16(lpime32->lParam1); logfont_16_to_A(l16, &lfont); } else { HFONT hFont32 = GetStockObject(SYSTEM_FONT); if (!hFont32 || !GetObjectA(hFont32, sizeof(LOGFONTA), lplogfont)) { ret = 0; goto done; } } } lpime32->lParam1 = lplogfont; HIMC himc = ImmGetContext(hwnd32); //IME_SETCONVERSIONFONTEX doesnt work well ImmSetCompositionFontA(himc, lplogfont); if (lpime32->fnc == IME_SETCONVERSIONFONTEX) { GlobalUnlock16(lpime32->lParam1); } } break; case IME_SETCONVERSIONMODE: TRACE("IME_SETCONVERSIONMODE\n"); break; //case IME_SETLEVEL: // ERR("IME_SETLEVEL\n"); // break; case IME_GETOPEN: TRACE("IME_GETOPEN\n"); break; case IME_SETOPEN: TRACE("IME_SETOPEN\n"); break; case IME_GETVERSION: TRACE("IME_GETVERSION\n"); break; /* case IME_SET_MODE: TRACE("IME_SET_MODE\n"); break; */ case IME_GETIMECAPS: TRACE("IME_GETIMECAPS\n"); break; case IME_SENDVKEY: TRACE("IME_SENDVKEY\n"); break; //case IME_SET_MODEK: // ERR("IME_SET_MODEK\n"); // break; default: TRACE("unknown %04x\n", lpime->fnc); break; } 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); ret = SendIMEMessageExA(hwnd32, (LPARAM)hglobal32); lpime->fnc = lpime32->fnc; lpime->wParam = lpime32->wParam; lpime->wCount = lpime32->wCount; lpime->dchSource = lpime32->dchSource; lpime->dchDest = lpime32->dchDest; lpime->lParam1 = lpime32->lParam1; lpime->lParam2 = lpime32->lParam2; lpime->lParam3 = lpime32->lParam3; 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); lpime->wParam = 0; done: GlobalUnlock(hglobal32); GlobalUnlock16(hglobal); GlobalFree(hglobal32); return ret; } BOOL WINAPI WINNLSSetIMEHandle16(SEGPTR a1, HWND16 a2) { LPCSTR str = MapSL(a1); /* MSIME */ HWND hwnd = HWND_32(a2);/* window class: MSIME window caption: MSIMEServer */ FIXME("(%s,%p)\n", debugstr_a(str), hwnd); return TRUE; } BOOL WINAPI WINNLSSetIMEHotkey16(HWND16 a1, WORD a2) { HWND hwnd = HWND_32(a1); FIXME("(%p,%02x)\n", hwnd, a2); return TRUE; } BOOL WINAPI WINNLSSetIMEStatus16(HWND16 a1, WORD a2) { HWND hwnd = HWND_32(a1); FIXME("(%p,%02x)\n", hwnd, a2); return TRUE; } BOOL WINAPI WINNLSSetKeyState16(WORD a1) { FIXME("(%02x)\n", a1); return TRUE; } ================================================ FILE: winnls/winnls.def ================================================ ; File generated automatically from winnls.dll16.spec; do not edit! LIBRARY winnls.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: winnls/winnls.dll16.spec ================================================ 1 stub WINNLSINQUIRE 2 stub HOOKKEYBOARDMESSAGE #3 stub ___EXPORTEDSTUB 4 stub ENUMGETFONTTYPE 5 stub ENUMFACENOTTT 6 pascal SendIMEMessage(word long) SendIMEMessageEx16 7 pascal SendIMEMessageEx(word long) SendIMEMessageEx16 9 stub SENDIMEMESSAGEINTERNAL 10 stub WINNLSSETKEYBOARDHOOK 11 pascal -ret16 WINNLSSetIMEHandle(segptr word) WINNLSSetIMEHandle16 12 pascal -ret16 WINNLSSetIMEStatus(word word) WINNLSSetIMEStatus16 14 pascal -ret16 WINNLSSetIMEHotkey(word word) WINNLSSetIMEHotkey16 15 stub WINNLSGETIMEHOTKEY 16 pascal -ret16 WINNLSEnableIME(word word) WINNLSEnableIME16 17 stub WINNLSGETKEYSTATE 18 pascal -ret16 WINNLSGetEnableStatus(word) WINNLSGetEnableStatus16 19 pascal -ret16 WINNLSSetKeyState(word) WINNLSSetKeyState16 20 stub IMPADDIME 21 stub IMPDELETEIME 22 pascal -ret16 IMPQueryIME(ptr) IMPQueryIME16 23 pascal -ret16 IMPGetIME(word ptr) IMPGetIME16 24 pascal -ret16 IMPSetIME(word ptr) IMPSetIME16 25 pascal -ret16 IMPModifyIME(str ptr) IMPModifyIME16 26 pascal -ret16 IMPGetDefaultIME(ptr) IMPGetDefaultIME16 27 pascal -ret16 IMPSetDefaultIME(ptr) IMPSetDefaultIME16 30 pascal -ret16 WINNLSSendString(word word ptr) WINNLSSendString16 31 pascal -ret16 WINNLSPostAppMessage(word word word long) WINNLSPostAppMessage16 32 pascal -ret16 WINNLSSendAppMessage(word word word long) WINNLSSendAppMessage16 33 pascal -ret16 WINNLSSendControl(word word) WINNLSSendControl16 #160 stub FT_WNLSFTHKTHKCONNECTIONDATA ================================================ FILE: winnls/winnls.vcxproj ================================================  Debug Win32 Release Win32 {F234FA09-76BC-4154-8420-737CD7FA4EF7} Win32Proj winnls 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false .dll16 NotUsing Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;WINNLS_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true imm32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;user32.lib;gdi32.lib winnls.def Level3 NotUsing MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;WINNLS_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false imm32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;user32.lib;gdi32.lib winnls.def Document "$(OutDir)convspec" "%(Filename).spec" WINNLS > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" "$(OutDir)convspec" "%(Filename).spec" WINNLS > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj %(Filename).obj ================================================ FILE: winnls/winnls.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ソース ファイル ソース ファイル ================================================ FILE: winoldap/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(winoldap SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/winoldap.def winoldap.mod16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(winoldap.mod16 winoldap) target_link_libraries(winoldap libwine winecrt0 krnl386 shlwapi) set_target_properties(winoldap PROPERTIES SUFFIX ".mod16") ================================================ FILE: winoldap/Makefile.in ================================================ MODULE = winoldap.mod16 EXTRADLLFLAGS = -m16 ================================================ FILE: winoldap/winoldap.c ================================================ #include "config.h" #include "windef.h" #include "wine/windef16.h" #include "wine/winbase16.h" #include "winuser.h" #include "winbase.h" #include "wownt32.h" #include "wine/list.h" #include "wine/debug.h" #include "shellapi.h" #include "stdio.h" #include "stdlib.h" #include "shlwapi.h" WINE_DEFAULT_DEBUG_CHANNEL(winoldap); //LRESULT WINAPI WndProc(HWND16 h, &) LRESULT WINAPI WndProc(HWND16 hwnd16, UINT16 msg, WPARAM16 wParam, LPARAM lParam) { ERR("wndproc"); } LRESULT WINAPI DialogProc(HWND16 hwnd16, UINT16 msg, WPARAM16 wParam, LPARAM lParam) { ERR("dialogproc"); } /*** PIF file structures ***/ #include "pshpack1.h" /* header of a PIF file */ typedef struct { BYTE unk1[2]; /* 0x00 */ CHAR windowtitle[ 30 ]; /* 0x02 seems to be padded with blanks*/ WORD memmax; /* 0x20 */ WORD memmin; /* 0x22 */ CHAR program[63]; /* 0x24 seems to be zero terminated */ BYTE hdrflags1; /* 0x63 various flags: * 02 286: text mode selected * 10 close window at exit */ BYTE startdrive; /* 0x64 */ char startdir[64]; /* 0x65 */ char optparams[64]; /* 0xa5 seems to be zero terminated */ BYTE videomode; /* 0xe5 */ BYTE unkn2; /* 0xe6 ?*/ BYTE irqlow; /* 0xe7 */ BYTE irqhigh; /* 0xe8 */ BYTE rows; /* 0xe9 */ BYTE cols; /* 0xea */ BYTE winY; /* 0xeb */ BYTE winX; /* 0xec */ WORD unkn3; /* 0xed 7??? */ CHAR unkn4[64]; /* 0xef */ CHAR unkn5[64]; /* 0x12f */ BYTE hdrflags2; /* 0x16f */ BYTE hdrflags3; /* 0x170 */ } pifhead_t; /* record header: present on every record */ typedef struct { CHAR recordname[16]; /* zero terminated */ WORD posofnextrecord; /* file offset, 0xffff if last */ WORD startofdata; /* file offset */ WORD sizeofdata; /* data is expected to follow directly */ } recordhead_t; /* 386 -enhanced mode- record */ typedef struct { WORD memmax; /* memory desired, overrides the pif header*/ WORD memmin; /* memory required, overrides the pif header*/ WORD prifg; /* foreground priority */ WORD pribg; /* background priority */ WORD emsmax; /* EMS memory limit */ WORD emsmin; /* EMS memory required */ WORD xmsmax; /* XMS memory limit */ WORD xmsmin; /* XMS memory required */ WORD optflags; /* option flags: * 0008 full screen * 0004 exclusive * 0002 background * 0001 close when active */ WORD memflags; /* various memory flags*/ WORD videoflags; /* video flags: * 0010 text * 0020 med. res. graphics * 0040 hi. res. graphics */ WORD hotkey[9]; /* Hot key info */ CHAR optparams[64]; /* optional params, replaces those in the pif header */ } pif386rec_t; #include "poppack.h" /*********************************************************************** * start_dos_exe */ static VOID start_dos_exe( LPCSTR filename, LPCSTR cmdline ) { char fullcmdline[MAX_PATH*2]; PROCESS_INFORMATION pi; STARTUPINFOA si = {0}; DWORD count; si.cb = sizeof(STARTUPINFOA); char exename[MAX_PATH]; GetModuleFileNameA(GetModuleHandleA(NULL), exename, sizeof(exename)); krnl386_get_config_string("otvdm", "dosemu", exename, exename, sizeof(exename)); snprintf(fullcmdline, 512, "\"%s\" %s %s", exename, filename, cmdline); BOOL ret = CreateProcessA(NULL, fullcmdline, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); if (!ret) { char *msg; FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, &msg, 256, NULL); WINE_MESSAGE( "winevdm: Cannot start DOS application %s err: %s\n", filename, msg ); LocalFree(msg); ReleaseThunkLock(&count); Sleep(100); // wait for other tasks to finish, hopefully preventing deadlock RestoreThunkLock(count); ExitThread(1); } /* Give 10 seconds to the app to come up */ if (WaitForInputIdle(pi.hProcess, 10000) == WAIT_FAILED) WINE_WARN("WaitForInputIdle failed: Error %d\n", GetLastError()); ReleaseThunkLock(&count); WaitForSingleObject(pi.hProcess, INFINITE); RestoreThunkLock(count); DWORD exit_code; GetExitCodeProcess(pi.hProcess, &exit_code); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); ExitThread(exit_code); } static VOID start_bat(LPCSTR filename, LPCSTR cmdline) { char fullcmdline[MAX_PATH*2]; PROCESS_INFORMATION pi; STARTUPINFOA si = {0}; DWORD count; si.cb = sizeof(STARTUPINFOA); char exename[MAX_PATH]; if (!GetEnvironmentVariableA("COMSPEC", exename, MAX_PATH)) strcpy(exename, "CMD.EXE"); snprintf(fullcmdline, 512, "\"%s\" /c %s %s", exename, filename, cmdline); BOOL ret = CreateProcessA(NULL, fullcmdline, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); if (!ret) { char *msg; FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, &msg, 256, NULL); WINE_MESSAGE( "winevdm: Cannot start batch file %s err: %s\n", filename, msg ); LocalFree(msg); ReleaseThunkLock(&count); Sleep(100); // wait for other tasks to finish, hopefully preventing deadlock RestoreThunkLock(count); ExitThread(1); } CloseHandle(pi.hThread); CloseHandle(pi.hProcess); ExitThread(1); } /*********************************************************************** * read_pif_file *pif386rec_tu * Read a pif file and return the header and possibly the 286 (real mode) * record or 386 (enhanced mode) record. Returns FALSE if the file is * invalid otherwise TRUE. */ static BOOL read_pif_file( HANDLE hFile, char *progname, char *title, char *optparams, char *startdir, int *closeonexit, int *textmode) { DWORD nread; LARGE_INTEGER filesize; recordhead_t rhead; BOOL found386rec = FALSE; pif386rec_t pif386rec; pifhead_t pifheader; if( !GetFileSizeEx( hFile, &filesize) || filesize.QuadPart < (sizeof(pifhead_t) + sizeof(recordhead_t))) { WINE_ERR("Invalid pif file: size error %d\n", (int)filesize.QuadPart); return FALSE; } SetFilePointer( hFile, 0, NULL, FILE_BEGIN); if( !ReadFile( hFile, &pifheader, sizeof(pifhead_t), &nread, NULL)) return FALSE; WINE_TRACE("header: program %s title %s startdir %s params %s\n", wine_dbgstr_a(pifheader.program), wine_dbgstr_an(pifheader.windowtitle, sizeof(pifheader.windowtitle)), wine_dbgstr_a(pifheader.startdir), wine_dbgstr_a(pifheader.optparams)); WINE_TRACE("header: memory req'd %d desr'd %d drive %d videomode %d\n", pifheader.memmin, pifheader.memmax, pifheader.startdrive, pifheader.videomode); WINE_TRACE("header: flags 0x%x 0x%x 0x%x\n", pifheader.hdrflags1, pifheader.hdrflags2, pifheader.hdrflags3); ReadFile( hFile, &rhead, sizeof(recordhead_t), &nread, NULL); if( strncmp( rhead.recordname, "MICROSOFT PIFEX", 15)) { WINE_ERR("Invalid pif file: magic string not found\n"); return FALSE; } /* now process the following records */ while( 1) { WORD nextrecord = rhead.posofnextrecord; if( (nextrecord & 0x8000) || filesize.QuadPart <( nextrecord + sizeof(recordhead_t))) break; if( !SetFilePointer( hFile, nextrecord, NULL, FILE_BEGIN) || !ReadFile( hFile, &rhead, sizeof(recordhead_t), &nread, NULL)) return FALSE; if( !rhead.recordname[0]) continue; /* deleted record */ WINE_TRACE("reading record %s size %d next 0x%x\n", wine_dbgstr_a(rhead.recordname), rhead.sizeofdata, rhead.posofnextrecord ); if( !strncmp( rhead.recordname, "WINDOWS 386", 11)) { found386rec = TRUE; ReadFile( hFile, &pif386rec, sizeof(pif386rec_t), &nread, NULL); 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", pif386rec.memmin, pif386rec.memmax, pif386rec.emsmin, pif386rec.emsmax, pif386rec.xmsmin, pif386rec.xmsmax); WINE_TRACE("386rec: option 0x%x memory 0x%x video 0x%x\n", pif386rec.optflags, pif386rec.memflags, pif386rec.videoflags); WINE_TRACE("386rec: optional parameters %s\n", wine_dbgstr_a(pif386rec.optparams)); } } /* prepare the return data */ lstrcpynA( progname, pifheader.program, sizeof(pifheader.program)+1); lstrcpynA( title, pifheader.windowtitle, sizeof(pifheader.windowtitle)+1); if( found386rec) lstrcpynA( optparams, pif386rec.optparams, sizeof( pif386rec.optparams)+1); else lstrcpynA( optparams, pifheader.optparams, sizeof(pifheader.optparams)+1); lstrcpynA( startdir, pifheader.startdir, sizeof(pifheader.startdir)+1); *closeonexit = pifheader.hdrflags1 & 0x10; *textmode = found386rec ? pif386rec.videoflags & 0x0010 : pifheader.hdrflags1 & 0x0002; return TRUE; } /*********************************************************************** * pif_cmd * * execute a pif file. */ static VOID pif_cmd( char *filename, char *cmdline) { HANDLE hFile; char progpath[MAX_PATH]; char buf[128]; char progname[64]; char title[31]; char optparams[65]; char startdir[65]; char *p; int closeonexit; int textmode; if( (hFile = CreateFileA( filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0 )) == INVALID_HANDLE_VALUE) { WINE_ERR("open file %s failed\n", wine_dbgstr_a(filename)); return; } if( !read_pif_file( hFile, progname, title, optparams, startdir, &closeonexit, &textmode)) { WINE_ERR( "failed to read %s\n", wine_dbgstr_a(filename)); CloseHandle( hFile); sprintf( buf, "%s\nInvalid file format. Check your pif file.", filename); MessageBoxA( NULL, buf, "16 bit DOS subsystem", MB_OK|MB_ICONWARNING); SetLastError( ERROR_BAD_FORMAT); return; } CloseHandle( hFile); if( (p = strrchr( progname, '.')) && !_stricmp( p, ".bat")) WINE_FIXME(".bat programs in pif files are not supported.\n"); /* first change dir, so the search below can start from there */ if( startdir[0] && !SetCurrentDirectoryA( startdir)) { WINE_ERR("Cannot change directory %s\n", wine_dbgstr_a( startdir)); sprintf( buf, "%s\nInvalid startup directory. Check your pif file.", filename); MessageBoxA( NULL, buf, "16 bit DOS subsystem", MB_OK|MB_ICONWARNING); } /* search for the program */ if( !SearchPathA( NULL, progname, NULL, MAX_PATH, progpath, NULL )) { sprintf( buf, "%s\nInvalid program file name. Check your pif file.", filename); MessageBoxA( NULL, buf, "16 bit DOS subsystem", MB_OK|MB_ICONERROR); SetLastError( ERROR_FILE_NOT_FOUND); return; } /* if no arguments on the commandline, use them from the pif file */ if( !cmdline[0] && optparams[0]) cmdline = optparams; /* FIXME: do something with: * - close on exit * - graphic modes * - hot key's * - etc. */ start_dos_exe( progpath, cmdline ); } /************************************************************************** * WINOLDAP entry point */ WORD WINAPI WinMain16(HINSTANCE16 inst, HINSTANCE16 prev, LPSTR cmdline, WORD show) { DWORD count, exit_code = 1; WINE_TRACE("%x %x %s %u\n", inst, prev, wine_dbgstr_a(cmdline), show); if (!memcmp("-WoAWoW32", cmdline, sizeof("-WoAWoW32") / sizeof(char) - sizeof(char))) { HANDLE handle; handle = (HANDLE)strtoull(cmdline + sizeof("-WoAWoW32") / sizeof(char) - sizeof(char), NULL, 16); DWORD count; ReleaseThunkLock(&count); WaitForSingleObject(handle, INFINITE); RestoreThunkLock(count); GetExitCodeProcess(handle, &exit_code); ExitThread(exit_code); } char path[MAX_PATH]; LPCSTR filename = path; LPCSTR name_beg, name_end, p, args = NULL; if (cmdline == '"') /* has to be only one and only at beginning ! */ { name_beg = cmdline + 1; p = strchr(cmdline + 1, '"'); if (p) { name_end = p; args = strchr(p, ' '); } else /* yes, even valid with trailing '"' missing */ name_end = cmdline + strlen(cmdline); } else { name_beg = cmdline; args = strchr(cmdline, ' '); name_end = args ? args : cmdline + strlen(cmdline); } if ((name_beg == cmdline) && (!args)) { /* just use the original cmdline string as file name */ filename = cmdline; args = ""; } else { memcpy(path, name_beg, name_end - name_beg); path[name_end - name_beg] = '\0'; } if (StrStrIA(filename, ".pif")) pif_cmd(filename, args); else if (StrStrIA(filename, ".bat")) start_bat(filename, args); else start_dos_exe(filename, args); ExitThread(1); } ================================================ FILE: winoldap/winoldap.def ================================================ ; File generated automatically from ../winoldap\winoldap.mod16.spec; do not edit! LIBRARY winoldap.mod16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: winoldap/winoldap.mod16.spec ================================================ 1 pascal WndProc(word word word long) 2 pascal DialogProc(word word word long) ================================================ FILE: winoldap/winoldap.vcxproj ================================================  Debug Win32 Release Win32 Win32Proj winoldap {F10EEF26-6451-4988-84D4-D193A4D2BF8C} 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .mod16 false Release .mod16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; $(OutDir)winecrt0.lib;shlwapi.lib;%(AdditionalDependencies) true winoldap.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false winoldap.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; $(OutDir)winecrt0.lib;shlwapi.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" WINOLDAP -EXE > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" "$(OutDir)convspec" "%(Filename).spec" WINOLDAP -EXE > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj %(Filename).obj ================================================ FILE: winsock/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(winsock SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/winsock.def winsock.dll16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(winsock.dll16 winsock) target_link_libraries(winsock libwine winecrt0 krnl386 ws2_32.lib) set_target_properties(winsock PROPERTIES SUFFIX ".dll16") ================================================ FILE: winsock/Makefile.in ================================================ MODULE = winsock.dll16 IMPORTS = ws2_32 DELAYIMPORTS = user32 EXTRADLLFLAGS = -m16 -Wb,--main-module,ws2_32.dll C_SRCS = socket.c ================================================ FILE: winsock/socket.c ================================================ /* * 16-bit socket functions * * Copyright (C) 1993,1994,1996,1997 John Brezak, Erik Bos, Alex Korobka * Copyright (C) 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "winsock2.h" #include "wine/winbase16.h" #include "winsock16.h" #include "wownt32.h" #include "winuser.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winsock); struct async_query_header { HWND hWnd; UINT uMsg; SEGPTR sbuf; INT sbuflen; HANDLE16 handle; }; struct async_query_gethostbyname { struct async_query_header query; char *host_name; }; struct async_query_gethostbyaddr { struct async_query_header query; char *host_addr; int host_len; int host_type; }; struct async_query_getprotobyname { struct async_query_header query; char *proto_name; }; struct async_query_getprotobynumber { struct async_query_header query; int proto_number; }; struct async_query_getservbyname { struct async_query_header query; char *serv_name; char *serv_proto; }; struct async_query_getservbyport { struct async_query_header query; char *serv_proto; int serv_port; }; static INT num_startup; /* reference counter */ static void *he_buffer; static SEGPTR he_buffer_seg; static void *se_buffer; static SEGPTR se_buffer_seg; static void *pe_buffer; static SEGPTR pe_buffer_seg; static SEGPTR dbuffer_seg; extern int WINAPI WS_gethostname(char *name, int namelen); static fd_set *ws_fdset_16_to_32( const ws_fd_set16 *set16, fd_set *set32 ) { UINT i; set32->fd_count = set16->fd_count; for (i = 0; i < set32->fd_count; i++) set32->fd_array[i] = set16->fd_array[i]; return set32; } static ws_fd_set16 *ws_fdset_32_to_16( const fd_set *set32, ws_fd_set16 *set16 ) { UINT i; set16->fd_count = set32->fd_count; for (i = 0; i < set16->fd_count; i++) set16->fd_array[i] = set32->fd_array[i]; return set16; } static DWORD finish_query( struct async_query_header *query, LPARAM lparam ) { PostMessageW( query->hWnd, query->uMsg, (WPARAM)query->handle, lparam ); HeapFree( GetProcessHeap(), 0, query ); return 0; } static int list_size(char** l, int item_size) { int i,j = 0; if(l) { for(i=0;l[i];i++) j += (item_size) ? item_size : strlen(l[i]) + 1; j += (i + 1) * sizeof(char*); } return j; } static int list_dup(char** l_src, SEGPTR base, int item_size) { int i, offset; char *ref = MapSL(base); SEGPTR *l_to = (SEGPTR *)ref; for (i = 0; l_src[i]; i++) ; offset = (i + 1) * sizeof(char*); for (i = 0; l_src[i]; i++) { int count = item_size ? item_size : strlen(l_src[i]) + 1; memcpy( ref + offset, l_src[i], count ); l_to[i] = base + offset; offset += count; } l_to[i] = 0; return offset; } static SEGPTR get_buffer_he(int size) { static int he_len; if (he_buffer) { if (he_len >= size ) return he_buffer_seg; UnMapLS( he_buffer_seg ); HeapFree( GetProcessHeap(), 0, he_buffer ); } he_buffer = HeapAlloc( GetProcessHeap(), 0, (he_len = size) ); he_buffer_seg = MapLS( he_buffer ); return he_buffer_seg; } static SEGPTR get_buffer_se(int size) { static int se_len; if (se_buffer) { if (se_len >= size ) return se_buffer_seg; UnMapLS( se_buffer_seg ); HeapFree( GetProcessHeap(), 0, se_buffer ); } se_buffer = HeapAlloc( GetProcessHeap(), 0, (se_len = size) ); se_buffer_seg = MapLS( se_buffer ); return se_buffer_seg; } static SEGPTR get_buffer_pe(int size) { static int pe_len; if (pe_buffer) { if (pe_len >= size ) return pe_buffer_seg; UnMapLS( pe_buffer_seg ); HeapFree( GetProcessHeap(), 0, pe_buffer ); } pe_buffer = HeapAlloc( GetProcessHeap(), 0, (pe_len = size) ); pe_buffer_seg = MapLS( pe_buffer ); return pe_buffer_seg; } /* duplicate hostent entry * and handle all Win16/Win32 dependent things (struct size, ...) *correctly*. * Ditto for protoent and servent. */ static SEGPTR ws_hostent_32_to_16( const struct hostent* he, SEGPTR base, int *buff_size ) { char *p; struct ws_hostent16 *p_to; int size = (sizeof(*p_to) + strlen(he->h_name) + 1 + list_size(he->h_aliases, 0) + list_size(he->h_addr_list, he->h_length)); if (buff_size) { if (*buff_size < size) { *buff_size = size; return 0; } *buff_size = size; } else base = get_buffer_he(size); p_to = MapSL(base); p_to->h_addrtype = he->h_addrtype; p_to->h_length = he->h_length; p = (char *)(p_to + 1); p_to->h_name = base + (p - (char *)p_to); strcpy(p, he->h_name); p += strlen(p) + 1; p_to->h_aliases = base + (p - (char *)p_to); p += list_dup(he->h_aliases, p_to->h_aliases, 0); p_to->h_addr_list = base + (p - (char *)p_to); list_dup(he->h_addr_list, p_to->h_addr_list, he->h_length); return base; } static SEGPTR ws_protoent_32_to_16( const struct protoent *pe, SEGPTR base, int *buff_size ) { char *p; struct ws_protoent16 *p_to; int size = (sizeof(*p_to) + strlen(pe->p_name) + 1 + list_size(pe->p_aliases, 0)); if (buff_size) { if (*buff_size < size) { *buff_size = size; return 0; } *buff_size = size; } else base = get_buffer_pe(size); p_to = MapSL(base); p_to->p_proto = pe->p_proto; p = (char *)(p_to + 1); p_to->p_name = base + (p - (char *)p_to); strcpy(p, pe->p_name); p += strlen(p) + 1; p_to->p_aliases = base + (p - (char *)p_to); list_dup(pe->p_aliases, p_to->p_aliases, 0); return base; } static SEGPTR ws_servent_32_to_16( const struct servent *se, SEGPTR base, int *buff_size ) { char *p; struct ws_servent16 *p_to; int size = (sizeof(*p_to) + strlen(se->s_proto) + 1 + strlen(se->s_name) + 1 + list_size(se->s_aliases, 0)); if (buff_size) { if (*buff_size < size) { *buff_size = size; return 0; } *buff_size = size; } else base = get_buffer_se(size); p_to = MapSL(base); p_to->s_port = se->s_port; p = (char *)(p_to + 1); p_to->s_name = base + (p - (char *)p_to); strcpy(p, se->s_name); p += strlen(p) + 1; p_to->s_proto = base + (p - (char *)p_to); strcpy(p, se->s_proto); p += strlen(p) + 1; p_to->s_aliases = base + (p - (char *)p_to); list_dup(se->s_aliases, p_to->s_aliases, 0); return base; } static DWORD WINAPI async_gethostbyname(LPVOID arg) { struct async_query_gethostbyname *aq = arg; int size = 0; WORD fail = 0; struct hostent *he; if ((he = gethostbyname( aq->host_name ))) { size = aq->query.sbuflen; if (!ws_hostent_32_to_16( he, aq->query.sbuf, &size )) fail = WSAENOBUFS; } else fail = GetLastError(); return finish_query( &aq->query, MAKELPARAM( size, fail )); } static DWORD WINAPI async_gethostbyaddr(LPVOID arg) { struct async_query_gethostbyaddr *aq = arg; int size = 0; WORD fail = 0; struct hostent *he; if ((he = gethostbyaddr(aq->host_addr,aq->host_len,aq->host_type))) { size = aq->query.sbuflen; if (!ws_hostent_32_to_16( he, aq->query.sbuf, &size )) fail = WSAENOBUFS; } else fail = GetLastError(); return finish_query( &aq->query, MAKELPARAM( size, fail )); } static DWORD WINAPI async_getprotobyname(LPVOID arg) { struct async_query_getprotobyname *aq = arg; int size = 0; WORD fail = 0; struct protoent *pe; if ((pe = getprotobyname(aq->proto_name))) { size = aq->query.sbuflen; if (!ws_protoent_32_to_16( pe, aq->query.sbuf, &size )) fail = WSAENOBUFS; } else fail = GetLastError(); return finish_query( &aq->query, MAKELPARAM( size, fail )); } static DWORD WINAPI async_getprotobynumber(LPVOID arg) { struct async_query_getprotobynumber *aq = arg; int size = 0; WORD fail = 0; struct protoent *pe; if ((pe = getprotobynumber(aq->proto_number))) { size = aq->query.sbuflen; if (!ws_protoent_32_to_16( pe, aq->query.sbuf, &size )) fail = WSAENOBUFS; } else fail = GetLastError(); return finish_query( &aq->query, MAKELPARAM( size, fail )); } static DWORD WINAPI async_getservbyname(LPVOID arg) { struct async_query_getservbyname *aq = arg; int size = 0; WORD fail = 0; struct servent *se; if ((se = getservbyname(aq->serv_name,aq->serv_proto))) { size = aq->query.sbuflen; if (!ws_servent_32_to_16( se, aq->query.sbuf, &size )) fail = WSAENOBUFS; } else fail = GetLastError(); return finish_query( &aq->query, MAKELPARAM( size, fail )); } static DWORD WINAPI async_getservbyport(LPVOID arg) { struct async_query_getservbyport *aq = arg; int size = 0; WORD fail = 0; struct servent *se; if ((se = getservbyport(aq->serv_port,aq->serv_proto))) { size = aq->query.sbuflen; if (!ws_servent_32_to_16( se, aq->query.sbuf, &size )) fail = WSAENOBUFS; } else fail = GetLastError(); return finish_query( &aq->query, MAKELPARAM( size, fail )); } /**************************************************************************** * The main async help function. * * It either starts a thread or just calls the function directly for platforms * with no thread support. This relies on the fact that PostMessage() does * not actually call the windowproc before the function returns. */ static HANDLE16 run_query( HWND16 hWnd, UINT uMsg, LPTHREAD_START_ROUTINE func, struct async_query_header *query, SEGPTR sbuf, INT sbuflen ) { static LONG next_handle = 0xdead; HANDLE thread; ULONG handle = LOWORD( InterlockedIncrement( &next_handle )); /* avoid handle 0 */ while (!handle) handle = LOWORD( InterlockedIncrement( &next_handle )); query->hWnd = HWND_32(hWnd); query->uMsg = uMsg; query->handle = handle; query->sbuf = sbuf; query->sbuflen = sbuflen; thread = CreateThread( NULL, 0, func, query, 0, NULL ); if (!thread) { SetLastError( WSAEWOULDBLOCK ); return 0; } CloseHandle( thread ); return handle; } /*********************************************************************** * accept (WINSOCK.1) */ SOCKET16 WINAPI accept16(SOCKET16 s, struct sockaddr* addr, INT16* addrlen16 ) { struct sockaddr addr32; INT addrlen32 = addrlen16 ? *addrlen16 : sizeof(addr32); // Both addr and addrlen are optional // If you pass an addrlen parameter, the win32 accept api call assumes the length should be greater or equal to sockaddr struct. // Passing in a value of zero in addrlen32 will cause error WSAEFAULT // As a fix, set addrlen32 to size of a local sockaddr structure and pass this too. Copy the returned contents to addr if necessary. SOCKET retSocket = accept( s, &addr32, &addrlen32 ); if( addrlen16 ) *addrlen16 = addrlen32; if (retSocket != INVALID_SOCKET && addr) memcpy(addr, &addr32, addrlen32); return retSocket; } /*********************************************************************** * bind (WINSOCK.2) */ INT16 WINAPI bind16(SOCKET16 s, struct sockaddr *name, INT16 namelen) { return bind( s, name, namelen ); } /*********************************************************************** * closesocket (WINSOCK.3) */ INT16 WINAPI closesocket16(SOCKET16 s) { return closesocket(s); } /*********************************************************************** * connect (WINSOCK.4) */ INT16 WINAPI connect16(SOCKET16 s, struct sockaddr *name, INT16 namelen) { return connect( s, name, namelen ); } /*********************************************************************** * getpeername (WINSOCK.5) */ INT16 WINAPI getpeername16(SOCKET16 s, struct sockaddr *name, INT16 *namelen16) { INT namelen32 = *namelen16; INT retVal = getpeername( s, name, &namelen32 ); *namelen16 = namelen32; return retVal; } /*********************************************************************** * getsockname (WINSOCK.6) */ INT16 WINAPI getsockname16(SOCKET16 s, struct sockaddr *name, INT16 *namelen16) { INT retVal; if( namelen16 ) { INT namelen32 = *namelen16; retVal = getsockname( s, name, &namelen32 ); *namelen16 = namelen32; } else retVal = SOCKET_ERROR; return retVal; } /*********************************************************************** * getsockopt (WINSOCK.7) */ INT16 WINAPI getsockopt16(SOCKET16 s, INT16 level, INT16 optname, char *optval, INT16 *optlen) { INT optlen32; INT *p = &optlen32; INT retVal; if( optlen ) optlen32 = *optlen; else p = NULL; retVal = getsockopt( s, (WORD)level, optname, optval, p ); if( optlen ) *optlen = optlen32; return retVal; } /*********************************************************************** * htonl (WINSOCK.8) */ u_long WINAPI htonl16(u_long hostlong) { return htonl(hostlong); } /*********************************************************************** * htons (WINSOCK.9) */ u_short WINAPI htons16(u_short hostshort) { return htons(hostshort); } /*********************************************************************** * inet_addr (WINSOCK.10) */ u_long WINAPI inet_addr16(const char *cp) { if (!cp) return INADDR_NONE; return inet_addr(cp); } /*********************************************************************** * inet_ntoa (WINSOCK.11) */ SEGPTR WINAPI inet_ntoa16(struct in_addr in) { char* retVal; if (!(retVal = inet_ntoa( in ))) return 0; if (!dbuffer_seg) dbuffer_seg = MapLS( retVal ); return dbuffer_seg; } /*********************************************************************** * ioctlsocket (WINSOCK.12) */ INT16 WINAPI ioctlsocket16(SOCKET16 s, LONG cmd, u_long *argp) { return ioctlsocket( s, cmd, argp ); } /*********************************************************************** * listen (WINSOCK.13) */ INT16 WINAPI listen16(SOCKET16 s, INT16 backlog) { return listen( s, backlog ); } /*********************************************************************** * ntohl (WINSOCK.14) */ u_long WINAPI ntohl16(u_long netlong) { return ntohl(netlong); } /*********************************************************************** * ntohs (WINSOCK.15) */ u_short WINAPI ntohs16(u_short netshort) { return ntohs(netshort); } /*********************************************************************** * recv (WINSOCK.16) */ INT16 WINAPI recv16(SOCKET16 s, char *buf, INT16 len, INT16 flags) { return recv( s, buf, len, flags ); } /*********************************************************************** * recvfrom (WINSOCK.17) */ INT16 WINAPI recvfrom16(SOCKET16 s, char *buf, INT16 len, INT16 flags, struct sockaddr *from, INT16 *fromlen16) { if (fromlen16) { INT fromlen32 = *fromlen16; INT retVal = recvfrom( s, buf, len, flags, from, &fromlen32 ); *fromlen16 = fromlen32; return retVal; } else return recvfrom( s, buf, len, flags, from, NULL ); } /*********************************************************************** * select (WINSOCK.18) */ INT16 WINAPI select16(INT16 nfds, ws_fd_set16 *ws_readfds, ws_fd_set16 *ws_writefds, ws_fd_set16 *ws_exceptfds, struct timeval* timeout) { fd_set read_set, write_set, except_set; fd_set *pread_set = NULL, *pwrite_set = NULL, *pexcept_set = NULL; int ret; if (ws_readfds) pread_set = ws_fdset_16_to_32( ws_readfds, &read_set ); if (ws_writefds) pwrite_set = ws_fdset_16_to_32( ws_writefds, &write_set ); if (ws_exceptfds) pexcept_set = ws_fdset_16_to_32( ws_exceptfds, &except_set ); /* struct timeval is the same for both 32- and 16-bit code */ ret = select( nfds, pread_set, pwrite_set, pexcept_set, timeout ); if (ws_readfds) ws_fdset_32_to_16( &read_set, ws_readfds ); if (ws_writefds) ws_fdset_32_to_16( &write_set, ws_writefds ); if (ws_exceptfds) ws_fdset_32_to_16( &except_set, ws_exceptfds ); return ret; } /*********************************************************************** * send (WINSOCK.19) */ INT16 WINAPI send16(SOCKET16 s, char *buf, INT16 len, INT16 flags) { return send( s, buf, len, flags ); } /*********************************************************************** * sendto (WINSOCK.20) */ INT16 WINAPI sendto16(SOCKET16 s, char *buf, INT16 len, INT16 flags, struct sockaddr *to, INT16 tolen) { return sendto( s, buf, len, flags, to, tolen ); } /*********************************************************************** * setsockopt (WINSOCK.21) */ INT16 WINAPI setsockopt16(SOCKET16 s, INT16 level, INT16 optname, char *optval, INT16 optlen) { if( !optval ) return SOCKET_ERROR; return setsockopt( s, (WORD)level, optname, optval, optlen ); } /*********************************************************************** * shutdown (WINSOCK.22) */ INT16 WINAPI shutdown16(SOCKET16 s, INT16 how) { return shutdown( s, how ); } /*********************************************************************** * socket (WINSOCK.23) */ SOCKET16 WINAPI socket16(INT16 af, INT16 type, INT16 protocol) { return socket( af, type, protocol ); } /*********************************************************************** * gethostbyaddr (WINSOCK.51) */ SEGPTR WINAPI gethostbyaddr16(const char *addr, INT16 len, INT16 type) { struct hostent *he; if (!(he = gethostbyaddr( addr, len, type ))) return 0; return ws_hostent_32_to_16( he, 0, NULL ); } /*********************************************************************** * gethostbyname (WINSOCK.52) */ SEGPTR WINAPI gethostbyname16(const char *name) { struct hostent *he; if (!(he = gethostbyname( name ))) return 0; return ws_hostent_32_to_16( he, 0, NULL ); } /*********************************************************************** * getprotobyname (WINSOCK.53) */ SEGPTR WINAPI getprotobyname16(const char *name) { struct protoent *pe; if (!(pe = getprotobyname( name ))) return 0; return ws_protoent_32_to_16( pe, 0, NULL ); } /*********************************************************************** * getprotobynumber (WINSOCK.54) */ SEGPTR WINAPI getprotobynumber16(INT16 number) { struct protoent *pe; if (!(pe = getprotobynumber( number ))) return 0; return ws_protoent_32_to_16( pe, 0, NULL ); } /*********************************************************************** * getservbyname (WINSOCK.55) */ SEGPTR WINAPI getservbyname16(const char *name, const char *proto) { struct servent *se; if (!(se = getservbyname( name, proto ))) return 0; return ws_servent_32_to_16( se, 0, NULL ); } /*********************************************************************** * getservbyport (WINSOCK.56) */ SEGPTR WINAPI getservbyport16(INT16 port, const char *proto) { struct servent *se; if (!(se = getservbyport( port, proto ))) return 0; return ws_servent_32_to_16( se, 0, NULL ); } /*********************************************************************** * gethostname (WINSOCK.57) */ INT16 WINAPI gethostname16(char *name, INT16 namelen) { extern int WINAPI gethostname(char *name, INT namelen); return gethostname(name, namelen); } /*********************************************************************** * WSAAsyncSelect (WINSOCK.101) */ INT16 WINAPI WSAAsyncSelect16(SOCKET16 s, HWND16 hWnd, UINT16 wMsg, LONG lEvent) { return WSAAsyncSelect( s, HWND_32(hWnd), wMsg, lEvent ); } /*********************************************************************** * WSAAsyncGetHostByAddr (WINSOCK.102) */ HANDLE16 WINAPI WSAAsyncGetHostByAddr16(HWND16 hWnd, UINT16 uMsg, LPCSTR addr, INT16 len, INT16 type, SEGPTR sbuf, INT16 buflen) { struct async_query_gethostbyaddr *aq; TRACE("hwnd %04x, msg %04x, addr %p[%i]\n", hWnd, uMsg, addr, len ); if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len ))) { SetLastError( WSAEWOULDBLOCK ); return 0; } aq->host_addr = (char *)(aq + 1); aq->host_len = len; aq->host_type = type; memcpy( aq->host_addr, addr, len ); return run_query( hWnd, uMsg, async_gethostbyaddr, &aq->query, sbuf, buflen ); } /*********************************************************************** * WSAAsyncGetHostByName (WINSOCK.103) */ HANDLE16 WINAPI WSAAsyncGetHostByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name, SEGPTR sbuf, INT16 buflen) { struct async_query_gethostbyname *aq; unsigned int len = strlen(name) + 1; TRACE("hwnd %04x, msg %04x, host %s, buffer %i\n", hWnd, uMsg, debugstr_a(name), buflen ); if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len ))) { SetLastError( WSAEWOULDBLOCK ); return 0; } aq->host_name = (char *)(aq + 1); strcpy( aq->host_name, name ); return run_query( hWnd, uMsg, async_gethostbyname, &aq->query, sbuf, buflen ); } /*********************************************************************** * WSAAsyncGetProtoByNumber (WINSOCK.104) */ HANDLE16 WINAPI WSAAsyncGetProtoByNumber16(HWND16 hWnd,UINT16 uMsg,INT16 number, SEGPTR sbuf, INT16 buflen) { struct async_query_getprotobynumber *aq; TRACE("hwnd %04x, msg %04x, num %i\n", hWnd, uMsg, number ); if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) ))) { SetLastError( WSAEWOULDBLOCK ); return 0; } aq->proto_number = number; return run_query( hWnd, uMsg, async_getprotobynumber, &aq->query, sbuf, buflen ); } /*********************************************************************** * WSAAsyncGetProtoByName (WINSOCK.105) */ HANDLE16 WINAPI WSAAsyncGetProtoByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name, SEGPTR sbuf, INT16 buflen) { struct async_query_getprotobyname *aq; unsigned int len = strlen(name) + 1; TRACE("hwnd %04x, msg %04x, proto %s, buffer %i\n", hWnd, uMsg, debugstr_a(name), buflen ); if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len ))) { SetLastError( WSAEWOULDBLOCK ); return 0; } aq->proto_name = (char *)(aq + 1); strcpy( aq->proto_name, name ); return run_query( hWnd, uMsg, async_getprotobyname, &aq->query, sbuf, buflen ); } /*********************************************************************** * WSAAsyncGetServByPort (WINSOCK.106) */ HANDLE16 WINAPI WSAAsyncGetServByPort16(HWND16 hWnd, UINT16 uMsg, INT16 port, LPCSTR proto, SEGPTR sbuf, INT16 buflen) { struct async_query_getservbyport *aq; unsigned int len = strlen(proto) + 1; TRACE("hwnd %04x, msg %04x, port %i, proto %s\n", hWnd, uMsg, port, debugstr_a(proto)); if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len ))) { SetLastError( WSAEWOULDBLOCK ); return 0; } aq->serv_proto = (char *)(aq + 1); aq->serv_port = port; strcpy( aq->serv_proto, proto ); return run_query( hWnd, uMsg, async_getservbyport, &aq->query, sbuf, buflen ); } /*********************************************************************** * WSAAsyncGetServByName (WINSOCK.107) */ HANDLE16 WINAPI WSAAsyncGetServByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name, LPCSTR proto, SEGPTR sbuf, INT16 buflen) { struct async_query_getservbyname *aq; unsigned int len1 = strlen(name) + 1; unsigned int len2 = strlen(proto) + 1; TRACE("hwnd %04x, msg %04x, name %s, proto %s\n", hWnd, uMsg, debugstr_a(name), debugstr_a(proto)); if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len1 + len2 ))) { SetLastError( WSAEWOULDBLOCK ); return 0; } aq->serv_name = (char *)(aq + 1); aq->serv_proto = aq->serv_name + len1; strcpy( aq->serv_name, name ); strcpy( aq->serv_proto, proto ); return run_query( hWnd, uMsg, async_getservbyname, &aq->query, sbuf, buflen ); } /*********************************************************************** * WSACancelAsyncRequest (WINSOCK.108) */ INT16 WINAPI WSACancelAsyncRequest16(HANDLE16 hAsyncTaskHandle) { FIXME("(%04x),stub\n", hAsyncTaskHandle); return 0; } __declspec(thread) static FARPROC16 first_hook; __declspec(thread) static DWORD (WINAPI *win32_hook)() = NULL; INT16 WINAPI default_hook() { return win32_hook(); } DWORD WINAPI thunk_hook() { PVOID sssp = getWOW32Reserved(); DWORD ret; WOWCallback16Ex(first_hook, WCB16_PASCAL, 0, NULL, &ret); setWOW32Reserved(sssp); return LOWORD(ret); } /*********************************************************************** * WSASetBlockingHook (WINSOCK.109) */ FARPROC16 WINAPI WSASetBlockingHook16(FARPROC16 lpBlockFunc) { static FARPROC16 default_hook = NULL; if (!default_hook) default_hook = GetProcAddress16(GetModuleHandle16("WINSOCK"), "DEFAULT_HOOK"); if (!win32_hook) { win32_hook = WSASetBlockingHook(thunk_hook); first_hook = default_hook; } if (lpBlockFunc == default_hook) { WSASetBlockingHook(win32_hook); win32_hook = NULL; return 0; } FARPROC16 old_hook = first_hook; first_hook = lpBlockFunc; return old_hook; } /*********************************************************************** * WSAUnhookBlockingHook (WINSOCK.110) */ INT16 WINAPI WSAUnhookBlockingHook16(void) { win32_hook = NULL; return WSAUnhookBlockingHook(); } /*********************************************************************** * WSAGetLastError (WINSOCK.111) */ INT WINAPI WSAGetLastError16(void) { return WSAGetLastError(); } /*********************************************************************** * WSASetLastError (WINSOCK.112) */ void WINAPI WSASetLastError16(INT16 iError) { WSASetLastError(iError); } /*********************************************************************** * WSACancelBlockingCall (WINSOCK.113) */ INT WINAPI WSACancelBlockingCall16(void) { return WSACancelBlockingCall(); } /*********************************************************************** * WSAIsBlocking (WINSOCK.114) */ BOOL WINAPI WSAIsBlocking16(void) { return WSAIsBlocking(); } /*********************************************************************** * WSAStartup (WINSOCK.115) * * Create socket control struct, attach it to the global list and * update a pointer in the task struct. */ INT16 WINAPI WSAStartup16(UINT16 wVersionRequested, LPWSADATA16 lpWSAData) { WSADATA data; INT ret = WSAStartup( wVersionRequested, &data ); if (!ret) { lpWSAData->wVersion = 0x0101; lpWSAData->wHighVersion = 0x0101; strcpy( lpWSAData->szDescription, data.szDescription ); strcpy( lpWSAData->szSystemStatus, data.szSystemStatus ); lpWSAData->iMaxSockets = data.iMaxSockets; lpWSAData->iMaxUdpDg = data.iMaxUdpDg; lpWSAData->lpVendorInfo = 0; num_startup++; } return ret; } /*********************************************************************** * WSACleanup (WINSOCK.116) */ INT WINAPI WSACleanup16(void) { if (num_startup) { if (!--num_startup) { /* delete scratch buffers */ UnMapLS( he_buffer_seg ); UnMapLS( se_buffer_seg ); UnMapLS( pe_buffer_seg ); UnMapLS( dbuffer_seg ); he_buffer_seg = 0; se_buffer_seg = 0; pe_buffer_seg = 0; dbuffer_seg = 0; HeapFree( GetProcessHeap(), 0, he_buffer ); HeapFree( GetProcessHeap(), 0, se_buffer ); HeapFree( GetProcessHeap(), 0, pe_buffer ); he_buffer = NULL; se_buffer = NULL; pe_buffer = NULL; } } return WSACleanup(); } /*********************************************************************** * __WSAFDIsSet (WINSOCK.151) */ INT16 WINAPI __WSAFDIsSet16(SOCKET16 s, ws_fd_set16 *set) { int i = set->fd_count; TRACE("(%d,%p(%i))\n", s, set, i); while (i--) if (set->fd_array[i] == s) return 1; return 0; } /*********************************************************************** * WSARecvEx (WINSOCK.1107) * * See description for WSARecvEx() */ INT16 WINAPI WSARecvEx16(SOCKET16 s, char *buf, INT16 len, INT16 *flags) { FIXME("(WSARecvEx16) partial packet return value not set\n"); return recv16(s, buf, len, *flags); } ================================================ FILE: winsock/winsock.def ================================================ ; File generated automatically from winsock\winsock.dll16.spec; do not edit! LIBRARY winsock.dll16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: winsock/winsock.dll16.spec ================================================ 1 pascal -ret16 accept(word ptr ptr) accept16 2 pascal -ret16 bind(word ptr word) bind16 3 pascal -ret16 closesocket(word) closesocket16 4 pascal -ret16 connect(word ptr word) connect16 5 pascal -ret16 getpeername(word ptr ptr) getpeername16 6 pascal -ret16 getsockname(word ptr ptr) getsockname16 7 pascal -ret16 getsockopt(word word word ptr ptr) getsockopt16 8 pascal htonl(long) htonl16 9 pascal -ret16 htons(word) htons16 10 pascal inet_addr(ptr) inet_addr16 11 pascal inet_ntoa(long) inet_ntoa16 12 pascal -ret16 ioctlsocket(word long ptr) ioctlsocket16 13 pascal -ret16 listen(word word) listen16 14 pascal ntohl(long) ntohl16 15 pascal -ret16 ntohs(word) ntohs16 16 pascal -ret16 recv(word ptr word word) recv16 17 pascal -ret16 recvfrom(word ptr word word ptr ptr) recvfrom16 18 pascal -ret16 select(word ptr ptr ptr ptr) select16 19 pascal -ret16 send(word ptr word word) send16 20 pascal -ret16 sendto(word ptr word word ptr word) sendto16 21 pascal -ret16 setsockopt(word word word ptr word) setsockopt16 22 pascal -ret16 shutdown(word word) shutdown16 23 pascal -ret16 socket(word word word) socket16 51 pascal gethostbyaddr(ptr word word) gethostbyaddr16 52 pascal gethostbyname(ptr) gethostbyname16 53 pascal getprotobyname(ptr) getprotobyname16 54 pascal getprotobynumber(word) getprotobynumber16 55 pascal getservbyname(ptr ptr) getservbyname16 56 pascal getservbyport(word ptr) getservbyport16 57 pascal gethostname(ptr word) gethostname16 101 pascal -ret16 WSAAsyncSelect(word word word long) WSAAsyncSelect16 102 pascal -ret16 WSAAsyncGetHostByAddr(word word ptr word word segptr word) WSAAsyncGetHostByAddr16 103 pascal -ret16 WSAAsyncGetHostByName(word word str segptr word) WSAAsyncGetHostByName16 104 pascal -ret16 WSAAsyncGetProtoByNumber(word word word segptr word) WSAAsyncGetProtoByNumber16 105 pascal -ret16 WSAAsyncGetProtoByName(word word str segptr word) WSAAsyncGetProtoByName16 106 pascal -ret16 WSAAsyncGetServByPort(word word word str segptr word) WSAAsyncGetServByPort16 107 pascal -ret16 WSAAsyncGetServByName(word word str str segptr word) WSAAsyncGetServByName16 108 pascal -ret16 WSACancelAsyncRequest(word) WSACancelAsyncRequest16 109 pascal -ret16 WSASetBlockingHook(segptr) WSASetBlockingHook16 110 pascal -ret16 WSAUnhookBlockingHook() WSAUnhookBlockingHook16 111 pascal -ret16 WSAGetLastError() WSAGetLastError16 112 pascal WSASetLastError(word) WSASetLastError16 113 pascal -ret16 WSACancelBlockingCall() WSACancelBlockingCall16 114 pascal -ret16 WSAIsBlocking() WSAIsBlocking16 115 pascal WSAStartup(word ptr) WSAStartup16 116 pascal WSACleanup() WSACleanup16 151 pascal -ret16 __WSAFDIsSet(word ptr) __WSAFDIsSet16 1107 pascal -ret16 WSARecvEx(word ptr word ptr) WSARecvEx16 2000 pascal -ret16 default_hook() default_hook ================================================ FILE: winsock/winsock.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 winsock {ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .dll16 false Release .dll16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; ws2_32.lib;%(AdditionalDependencies) true winsock.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false winsock.def $(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; ws2_32.lib;%(AdditionalDependencies) Document "$(OutDir)convspec" "%(Filename).spec" WINSOCK > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: winsock/winsock16.h ================================================ /* * Copyright (C) the Wine project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WINE_WINSOCK16_H #define __WINE_WINE_WINSOCK16_H #include typedef UINT16 SOCKET16; typedef struct { UINT16 fd_count; /* how many are SET? */ SOCKET16 fd_array[FD_SETSIZE]; /* an array of SOCKETs */ } ws_fd_set16; /* ws_hostent16, ws_protoent16, ws_servent16, ws_netent16 * are 1-byte aligned here ! */ typedef struct ws_hostent16 { SEGPTR h_name; /* official name of host */ SEGPTR h_aliases; /* alias list */ INT16 h_addrtype; /* host address type */ INT16 h_length; /* length of address */ SEGPTR h_addr_list; /* list of addresses from name server */ } _ws_hostent16; typedef struct ws_protoent16 { SEGPTR p_name; /* official protocol name */ SEGPTR p_aliases; /* alias list */ INT16 p_proto; /* protocol # */ } _ws_protoent16; typedef struct ws_servent16 { SEGPTR s_name; /* official service name */ SEGPTR s_aliases; /* alias list */ INT16 s_port; /* port # */ SEGPTR s_proto; /* protocol to use */ } _ws_servent16; typedef struct ws_netent16 { SEGPTR n_name; /* official name of net */ SEGPTR n_aliases; /* alias list */ INT16 n_addrtype; /* net address type */ INT n_net; /* network # */ } _ws_netent16; typedef struct WSAData16 { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; WORD iMaxSockets; WORD iMaxUdpDg; SEGPTR lpVendorInfo; } WSADATA16, *LPWSADATA16; #include #define WS_FD_CLR16(fd, set) __WS_FD_CLR((fd),(set), ws_fd_set16) #define WS_FD_SET16(fd, set) __WS_FD_SET1((fd),(set), ws_fd_set16) #define WS_FD_ZERO16(set) (((ws_fd_set16*)(set))->fd_count=0) #define WS_FD_ISSET16(fd, set) __WSAFDIsSet16((SOCKET16)(fd), (ws_fd_set16*)(set)) #define INVALID_SOCKET16 ((SOCKET16)(~0)) INT16 WINAPI __WSAFDIsSet16( SOCKET16, ws_fd_set16 * ); INT16 WINAPI WSAStartup16(UINT16 wVersionRequired, LPWSADATA16 lpWSAData); void WINAPI WSASetLastError16(INT16 iError); INT16 WINAPI WSAUnhookBlockingHook16(void); FARPROC16 WINAPI WSASetBlockingHook16(FARPROC16 lpBlockFunc); HANDLE16 WINAPI WSAAsyncGetServByName16(HWND16 hWnd, UINT16 wMsg, LPCSTR name, LPCSTR proto, SEGPTR buf, INT16 buflen); HANDLE16 WINAPI WSAAsyncGetServByPort16(HWND16 hWnd, UINT16 wMsg, INT16 port, LPCSTR proto, SEGPTR buf, INT16 buflen); HANDLE16 WINAPI WSAAsyncGetProtoByName16(HWND16 hWnd, UINT16 wMsg, LPCSTR name, SEGPTR buf, INT16 buflen); HANDLE16 WINAPI WSAAsyncGetProtoByNumber16(HWND16 hWnd, UINT16 wMsg, INT16 number, SEGPTR buf, INT16 buflen); HANDLE16 WINAPI WSAAsyncGetHostByName16(HWND16 hWnd, UINT16 wMsg, LPCSTR name, SEGPTR buf, INT16 buflen); HANDLE16 WINAPI WSAAsyncGetHostByAddr16(HWND16 hWnd, UINT16 wMsg, LPCSTR addr, INT16 len, INT16 type, SEGPTR buf, INT16 buflen); INT16 WINAPI WSACancelAsyncRequest16(HANDLE16 hAsyncTaskHandle); INT16 WINAPI WSAAsyncSelect16(SOCKET16 s, HWND16 hWnd, UINT16 wMsg, LONG lEvent); INT16 WINAPI WSARecvEx16(SOCKET16 s, char *buf, INT16 len, INT16 *flags); #endif /* __WINE_WINE_WINSOCK16_H */ ================================================ FILE: winspool/CMakeLists.txt ================================================ file(GLOB SOURCE *.c *.cpp *.rc) add_library(winspool SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/winspool.def winspool.drv16.obj) include_directories(../wine) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp) spec_build(winspool.drv16 winspool) target_link_libraries(winspool libwine winecrt0 krnl386 winspool.lib) set_target_properties(winspool PROPERTIES SUFFIX ".drv16") ================================================ FILE: winspool/winspool.c ================================================ #include "config.h" #include #include #include #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" //wrong definition? #define ExtDeviceMode WINAPI ExtDeviceMode #include "winspool.h" #undef ExtDeviceMode #include "winuser.h" #include "wownt32.h" #include "wine/unicode.h" #include "wine/winbase16.h" #include "wine/debug.h" /* Maximum length of a device name */ #define CCHDEVICENAME16 32 /* Maximum length of a paper name */ #define CCHPAPERNAME16 64 #pragma pack(push, 1) WINE_DEFAULT_DEBUG_CHANNEL(winspool); typedef struct { char dmDeviceName[CCHDEVICENAME16]; UINT16 dmSpecVersion; UINT16 dmDriverVersion; UINT16 dmSize; UINT16 dmDriverExtra; DWORD dmFields; INT16 dmOrientation; INT16 dmPaperSize; INT16 dmPaperLength; INT16 dmPaperWidth; INT16 dmScale; INT16 dmCopies; INT16 dmDefaultSource; INT16 dmPrintQuality; INT16 dmColor; INT16 dmDuplex; INT16 dmYResolution; INT16 dmTTOption; } DEVMODE16, *LPDEVMODE16; #pragma pack(pop) //sizeof(DEVMODE16) != sizeof(DEVMODEA) void DEVMODE16To32(CONST DEVMODE16 *src, LPDEVMODEA dst, LONG extra) { memcpy(dst->dmDeviceName, src->dmDeviceName, min(CCHDEVICENAME16, CCHDEVICENAME)); dst->dmDeviceName[CCHDEVICENAME - 1] = 0; dst->dmSpecVersion = 0x30a; dst->dmDriverVersion = src->dmDriverVersion; dst->dmSize = sizeof(DEVMODEA); dst->dmDriverExtra = 0; dst->dmFields = src->dmFields & 0x7fbf; dst->dmOrientation = src->dmOrientation; dst->dmPaperSize = src->dmPaperSize; dst->dmPaperLength = src->dmPaperLength; dst->dmPaperWidth = src->dmPaperWidth; dst->dmScale = src->dmScale; dst->dmCopies = src->dmCopies; dst->dmDefaultSource = src->dmDefaultSource; dst->dmPrintQuality = src->dmPrintQuality; dst->dmColor = src->dmColor; dst->dmDuplex = src->dmDuplex; dst->dmYResolution = src->dmYResolution; dst->dmTTOption = src->dmTTOption; } void DEVMODE32To16(LPDEVMODE16 dst, const LPDEVMODEA src, LONG extra) { memcpy(dst->dmDeviceName, src->dmDeviceName, min(CCHDEVICENAME16, CCHDEVICENAME)); dst->dmDeviceName[CCHDEVICENAME16 - 1] = 0; dst->dmSpecVersion = 0x30a; dst->dmDriverVersion = src->dmDriverVersion; dst->dmSize = sizeof(DEVMODE16); dst->dmDriverExtra = 0; dst->dmFields = src->dmFields & 0x7fbf; dst->dmOrientation = src->dmOrientation; dst->dmPaperSize = src->dmPaperSize; dst->dmPaperLength = src->dmPaperLength; dst->dmPaperWidth = src->dmPaperWidth; dst->dmScale = src->dmScale; dst->dmCopies = src->dmCopies; dst->dmDefaultSource = src->dmDefaultSource; dst->dmPrintQuality = src->dmPrintQuality; dst->dmColor = src->dmColor; dst->dmDuplex = src->dmDuplex; dst->dmYResolution = src->dmYResolution; dst->dmTTOption = src->dmTTOption; } int WINAPI ExtDeviceMode16(HWND16 hwnd16, HANDLE16 hDriver16, LPDEVMODE16 pDevModeOutput, LPSTR pDeviceName, LPSTR pPort, LPDEVMODE16 pDevModeInput, LPSTR pProfile, WORD fMode) { char tmp[256]; if (pDeviceName && !strcmp(pDeviceName, "DefaultPrinter")) { int len = 256; if (GetDefaultPrinterA(tmp, &len)) pDeviceName = tmp; } LONG size = ExtDeviceMode(HWND_32(hwnd16), (HANDLE)hDriver16, NULL, pDeviceName, pPort, NULL, pProfile, 0); if (size < 0) return size; if (!fMode) return sizeof(DEVMODE16); char *devmode32 = alloca(size); char *input32 = alloca(size); if (pDevModeInput) DEVMODE16To32(pDevModeInput, (LPDEVMODEA)&input32[0], size); LONG result = ExtDeviceMode(HWND_32(hwnd16), (HANDLE)hDriver16, pDevModeOutput ? (LPDEVMODEA)&devmode32[0] : NULL, pDeviceName, pPort, pDevModeInput ? (LPDEVMODEA)&input32[0] : NULL, pProfile, fMode); size = result; if (pDevModeOutput) DEVMODE32To16(pDevModeOutput, (LPDEVMODEA)&devmode32[0], size); return fMode == DM_UPDATE ? result : sizeof(DEVMODE16); } void WINAPI DeviceMode16(HWND16 hwnd, HMODULE16 hModule16, LPSTR lpszDevice, LPSTR lpszOutput) { ExtDeviceMode16(hwnd, hModule16, NULL, lpszDevice, lpszOutput, NULL, NULL, DM_PROMPT|DM_UPDATE); return; } DWORD WINAPI DeviceCapabilities16(LPCSTR pDevice, LPCSTR pPort, WORD fwCapability, LPSTR pOutput, CONST DEVMODE16 *pDevMode) { char devmode32[65536] = { 0 }; char tmp[256]; if (pDevice && !strcmp(pDevice, "DefaultPrinter")) { int len = 256; if (GetDefaultPrinterA(tmp, &len)) pDevice = tmp; } if (pDevMode) DEVMODE16To32(pDevMode, (LPDEVMODEA)&devmode32[0], 0); DWORD result = 0; switch (fwCapability) { case DC_FIELDS: case DC_MINEXTENT: case DC_MAXEXTENT: case DC_BINS: case DC_DUPLEX: case DC_SIZE: case DC_VERSION: case DC_DRIVER: case DC_BINNAMES: case DC_ENUMRESOLUTIONS: case DC_FILEDEPENDENCIES: case DC_TRUETYPE: case DC_ORIENTATION: case DC_COPIES: result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, pOutput, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); break; case DC_PAPERS: { LPWORD papers; result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, NULL, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); if (result && (result != -1)) { LPWORD output = (LPWORD)pOutput; DWORD i, j = 0; papers = (LPWORD)HeapAlloc(GetProcessHeap(), 0, result * sizeof(WORD)); result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, (LPSTR)papers, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); for (i = 0; i < result; i++) { /* WINVER < 0x0500 */ if (papers[i] <= DMPAPER_A3_EXTRA_TRANSVERSE) { if (output) { output[j] = papers[i]; } j++; } } HeapFree(GetProcessHeap(), 0, papers); return j; } } case DC_PAPERNAMES: { DWORD papers_count = DeviceCapabilitiesA(pDevice, pPort, DC_PAPERS, NULL, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); if (papers_count == -1) return -1; LPWORD papers = (LPDWORD)HeapAlloc(GetProcessHeap(), 0, papers_count * sizeof(WORD)); DWORD i, j = 0; char (*names)[CCHPAPERNAME16] = !pOutput ? NULL : (char(*)[CCHPAPERNAME16])HeapAlloc(GetProcessHeap(), 0, papers_count * CCHPAPERNAME16 * sizeof(char)); char (*names16)[CCHPAPERNAME16] = (char(*)[CCHPAPERNAME16])pOutput; DeviceCapabilitiesA(pDevice, pPort, DC_PAPERS, (LPSTR)papers, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, (LPSTR)names, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); for (i = 0; i < result; i++) { /* WINVER < 0x0500 */ if (papers[i] <= DMPAPER_A3_EXTRA_TRANSVERSE) { if (pOutput) { lstrcpynA(names16 + j, names + i, sizeof(names16[j])); } j++; } } HeapFree(GetProcessHeap(), 0, names); HeapFree(GetProcessHeap(), 0, papers); return j; } case DC_PAPERSIZE: { DWORD papers_count = DeviceCapabilitiesA(pDevice, pPort, DC_PAPERS, NULL, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); LPWORD papers = (LPDWORD)HeapAlloc(GetProcessHeap(), 0, papers_count * sizeof(WORD)); DWORD i, j = 0; LPPOINT points32 = !pOutput ? NULL : (LPPOINT)HeapAlloc(GetProcessHeap(), 0, papers_count * sizeof(POINT)); LPPOINT16 points16 = (LPPOINT16)pOutput; DeviceCapabilitiesA(pDevice, pPort, DC_PAPERS, (LPSTR)papers, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, (LPSTR)points32, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); for (i = 0; i < result; i++) { /* WINVER < 0x0500 */ if (papers[i] <= DMPAPER_A3_EXTRA_TRANSVERSE) { if (pOutput) { points16[j].x = (INT16)points32[i].x; points16[j].y = (INT16)points32[i].y; } j++; } } HeapFree(GetProcessHeap(), 0, points32); HeapFree(GetProcessHeap(), 0, papers); return j; } case DC_EXTRA: result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, pOutput, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); if (result > 65535) { ERR("DC_EXTRA(%d) > 65535\n", result); } break; default: { ERR("unknown DeviceCapabilities %d\n", fwCapability); result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, pOutput, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL); break; } } return result; } ================================================ FILE: winspool/winspool.def ================================================ ; File generated automatically from winspool.drv16; do not edit! LIBRARY winspool.drv16 EXPORTS _wine_spec_dos_header @1 DATA ================================================ FILE: winspool/winspool.drv16.spec ================================================ 4 stub DISABLE 13 pascal DeviceMode(word word str str) DeviceMode16 15 stub DEVGETCHARWIDTH 20 stub CREATEDIBITMAP 28 stub STRETCHDIB 10 stub REALIZEOBJECT 90 pascal ExtDeviceMode(word word ptr str str ptr str word) ExtDeviceMode16 21 stub SETDIBITSTODEVICE 91 pascal DeviceCapabilities(str str word str ptr) DeviceCapabilities16 7 stub ENUMOBJ 11 stub STRBLT 5 stub ENABLE 3 stub CONTROL 1 stub DEVBITBLT 8 stub OUTPUT 92 stub QUERYDEVICENAMES 9 stub PIXEL 12 stub SCANLR 2 stub COLORINFO 6 stub ENUMDFONTS 94 stub DEVINSTALL 14 stub DEVEXTTEXTOUT #93 stub ADVANCEDSETUPDIALOG 1000 stub ADVANCEDSETUPDIALOG 19 stub DEVICEBITMAPBITS ================================================ FILE: winspool/winspool.vcxproj ================================================ Debug Win32 Release Win32 Win32Proj 10.0.17134.0 winspool {C8F4997D-B814-43BB-A71B-507B2E956F55} DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true .drv16 false Release .drv16 Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true winspool.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; true winspool.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions) ../wine Windows true true true false winspool.def winspool.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib; Document "$(OutDir)convspec" "%(Filename).spec" WINSPOOL > "%(Filename).asm" && "$(AsmPath)as" --32 -o "%(Filename).obj" "%(Filename).asm" %(Filename).obj ================================================ FILE: wow32/CMakeLists.txt ================================================ include_directories(../wine) file(GLOB SOURCE *.c *.cpp) def_file_build32(wow32) add_library(wow32 SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/wow32.def) add_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__) add_dependencies(wow32 generate_def_wow32 krnl386) target_link_libraries(wow32 krnl386) set_target_properties(wow32 PROPERTIES PREFIX "") ================================================ FILE: wow32/wow32.def ================================================ ; File generated automatically from wow32.spec; do not edit! LIBRARY wow32.dll EXPORTS WOWGetDescriptor @1 WOWCallback16 @2 WOWCallback16Ex @3 WOWDirectedYield16 @4 WOWGetVDMPointer @5 WOWGetVDMPointerFix @6 WOWGetVDMPointerUnfix @7 WOWGlobalAlloc16 @8 WOWGlobalAllocLock16 @9 WOWGlobalFree16 @10 WOWGlobalLock16 @11 WOWGlobalLockSize16 @12 WOWGlobalUnlock16 @13 WOWGlobalUnlockFree16 @14 WOWHandle16 @15 WOWHandle32 @16 WOWYield16 @17 ================================================ FILE: wow32/wow32.spec ================================================ # ordinal exports 1 stdcall WOWGetDescriptor(long ptr) @ stdcall WOWCallback16(long long) @ stdcall WOWCallback16Ex(long long long ptr ptr) @ stdcall WOWDirectedYield16(long) @ stdcall WOWGetVDMPointer(long long long) @ stdcall WOWGetVDMPointerFix(long long long) @ stdcall WOWGetVDMPointerUnfix(long) @ stdcall WOWGlobalAlloc16(long long) @ stdcall WOWGlobalAllocLock16(long long ptr) @ stdcall WOWGlobalFree16(long) @ stdcall WOWGlobalLock16(long) @ stdcall WOWGlobalLockSize16(long ptr) @ stdcall WOWGlobalUnlock16(long) @ stdcall WOWGlobalUnlockFree16(long) @ stdcall WOWHandle16(long long) @ stdcall WOWHandle32(long long) @ stdcall WOWYield16() ================================================ FILE: wow32/wow32.vcxproj ================================================  Debug Win32 Release Win32 {E4950E01-C995-49A5-9FED-5EF03155FD65} Win32Proj wow32 10.0.17134.0 DynamicLibrary true v141 Unicode DynamicLibrary false v141 true Unicode true false Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;WOW32_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true $(OutDir)krnl386.lib wow32.def Level3 MaxSpeed true true WIN32;NDEBUG;_WINDOWS;_USRDLL;WOW32_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions) ../wine Windows true true true wow32.def $(OutDir)krnl386.lib ================================================ FILE: wow32/wow32.vcxproj.filters ================================================  {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms ソース ファイル ソース ファイル ================================================ FILE: wow32/wow_main.c ================================================ /* * Win32 Windows-on-Windows support * * Copyright 2005 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "windows/wownt32.h" #undef WOWCallback16 #undef WOWCallback16Ex #undef WOWDirectedYield16 #undef WOWGetVDMPointer #undef WOWGetVDMPointerFix #undef WOWGetVDMPointerUnfix #undef WOWGlobalAlloc16 #undef WOWGlobalAllocLock16 #undef WOWGlobalFree16 #undef WOWGlobalLock16 #undef WOWGlobalLockSize16 #undef WOWGlobalUnlock16 #undef WOWGlobalUnlockFree16 #undef WOWHandle16 #undef WOWHandle32 #undef WOWYield16 BOOL WINAPI K32WOWGetDescriptor(DWORD,LPLDT_ENTRY); /********************************************************************** * WOWGetDescriptor (WOW32.1) */ BOOL WINAPI WOWGetDescriptor( DWORD segptr, LPLDT_ENTRY ldtent ) { return K32WOWGetDescriptor( segptr, ldtent ); } /********************************************************************** * WOWGetVDMPointer (WOW32.@) */ LPVOID WINAPI WOWGetVDMPointer( DWORD vp, DWORD dwBytes, BOOL fProtectedMode ) { return K32WOWGetVDMPointer( vp, dwBytes, fProtectedMode ); } /********************************************************************** * WOWGetVDMPointerFix (WOW32.@) */ LPVOID WINAPI WOWGetVDMPointerFix( DWORD vp, DWORD dwBytes, BOOL fProtectedMode ) { return K32WOWGetVDMPointerFix( vp, dwBytes, fProtectedMode ); } /********************************************************************** * WOWGetVDMPointerUnfix (WOW32.@) */ void WINAPI WOWGetVDMPointerUnfix( DWORD vp ) { K32WOWGetVDMPointerUnfix( vp ); } /********************************************************************** * WOWGlobalAlloc16 (WOW32.@) */ WORD WINAPI WOWGlobalAlloc16( WORD wFlags, DWORD cb ) { return K32WOWGlobalAlloc16( wFlags, cb ); } /********************************************************************** * WOWGlobalFree16 (WOW32.@) */ WORD WINAPI WOWGlobalFree16( WORD hMem ) { return K32WOWGlobalFree16( hMem ); } /********************************************************************** * WOWGlobalLock16 (WOW32.@) */ DWORD WINAPI WOWGlobalLock16( WORD hMem ) { return K32WOWGlobalLock16( hMem ); } /********************************************************************** * WOWGlobalUnlock16 (WOW32.@) */ BOOL WINAPI WOWGlobalUnlock16( WORD hMem ) { return K32WOWGlobalUnlock16( hMem ); } /********************************************************************** * WOWGlobalAllocLock16 (WOW32.@) */ DWORD WINAPI WOWGlobalAllocLock16( WORD wFlags, DWORD cb, WORD *phMem ) { return K32WOWGlobalAllocLock16( wFlags, cb, phMem ); } /********************************************************************** * WOWGlobalLockSize16 (WOW32.@) */ DWORD WINAPI WOWGlobalLockSize16( WORD hMem, PDWORD pcb ) { return K32WOWGlobalLockSize16( hMem, pcb ); } /********************************************************************** * WOWGlobalUnlockFree16 (WOW32.@) */ WORD WINAPI WOWGlobalUnlockFree16( DWORD vpMem ) { return K32WOWGlobalUnlockFree16( vpMem ); } /********************************************************************** * WOWYield16 (WOW32.@) */ void WINAPI WOWYield16(void) { K32WOWYield16(); } /********************************************************************** * WOWDirectedYield16 (WOW32.@) */ void WINAPI WOWDirectedYield16( WORD htask16 ) { K32WOWDirectedYield16( htask16 ); } /*********************************************************************** * WOWHandle32 (WOW32.@) */ HANDLE WINAPI WOWHandle32( WORD handle, WOW_HANDLE_TYPE type ) { return K32WOWHandle32( handle, type ); } /*********************************************************************** * WOWHandle16 (WOW32.@) */ WORD WINAPI WOWHandle16( HANDLE handle, WOW_HANDLE_TYPE type ) { return K32WOWHandle16( handle, type ); } /********************************************************************** * WOWCallback16Ex (WOW32.@) */ BOOL WINAPI WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags, DWORD cbArgs, PVOID pArgs, PDWORD pdwRetCode ) { return K32WOWCallback16Ex( vpfn16, dwFlags, cbArgs, pArgs, pdwRetCode ); } /********************************************************************** * WOWCallback16 (WOW32.@) */ DWORD WINAPI WOWCallback16( DWORD vpfn16, DWORD dwParam ) { return K32WOWCallback16( vpfn16, dwParam ); } ================================================ FILE: wow32/wownt32.h ================================================ /* * WOW Generic Thunk API * * Copyright (C) 1999 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _WOWNT32_H_ #define _WOWNT32_H_ #ifdef __WINESRC__ /* under Wine use the kernel functions directly so we don't have to import wow32 */ #define WOWCallback16 K32WOWCallback16 #define WOWCallback16Ex K32WOWCallback16Ex #define WOWDirectedYield16 K32WOWDirectedYield16 #define WOWGetVDMPointer K32WOWGetVDMPointer #define WOWGetVDMPointerFix K32WOWGetVDMPointerFix #define WOWGetVDMPointerUnfix K32WOWGetVDMPointerUnfix #define WOWGlobalAlloc16 K32WOWGlobalAlloc16 #define WOWGlobalAllocLock16 K32WOWGlobalAllocLock16 #define WOWGlobalFree16 K32WOWGlobalFree16 #define WOWGlobalLock16 K32WOWGlobalLock16 #define WOWGlobalLockSize16 K32WOWGlobalLockSize16 #define WOWGlobalUnlock16 K32WOWGlobalUnlock16 #define WOWGlobalUnlockFree16 K32WOWGlobalUnlockFree16 #define WOWHandle16 K32WOWHandle16 #define WOWHandle32 K32WOWHandle32 #define WOWYield16 K32WOWYield16 #endif LPVOID WINAPI WOWGetVDMPointer(DWORD,DWORD,BOOL); LPVOID WINAPI WOWGetVDMPointerFix(DWORD,DWORD,BOOL); VOID WINAPI WOWGetVDMPointerUnfix(DWORD); WORD WINAPI WOWGlobalAlloc16(WORD,DWORD); WORD WINAPI WOWGlobalFree16(WORD); DWORD WINAPI WOWGlobalLock16(WORD); BOOL WINAPI WOWGlobalUnlock16(WORD); DWORD WINAPI WOWGlobalAllocLock16(WORD,DWORD,WORD *); WORD WINAPI WOWGlobalUnlockFree16(DWORD); DWORD WINAPI WOWGlobalLockSize16(WORD,PDWORD); VOID WINAPI WOWYield16(VOID); VOID WINAPI WOWDirectedYield16(WORD); typedef enum { WOW_TYPE_HWND, WOW_TYPE_HMENU, WOW_TYPE_HDWP, WOW_TYPE_HDROP, WOW_TYPE_HDC, WOW_TYPE_HFONT, WOW_TYPE_HMETAFILE, WOW_TYPE_HRGN, WOW_TYPE_HBITMAP, WOW_TYPE_HBRUSH, WOW_TYPE_HPALETTE, WOW_TYPE_HPEN, WOW_TYPE_HACCEL, WOW_TYPE_HTASK, WOW_TYPE_FULLHWND } WOW_HANDLE_TYPE; HANDLE WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE); WORD WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE); #if 0 && defined(__WINESRC__) /* under Wine we use optimized versions where we can */ #define HWND_32(h16) ((HWND) (ULONG_PTR)(h16)) #define HMENU_32(h16) ((HMENU) (ULONG_PTR)(h16)) #define HDWP_32(h16) ((HDWP) (ULONG_PTR)(h16)) #define HDROP_32(h16) ((HDROP) (ULONG_PTR)(h16)) #define HDC_32(h16) ((HDC) (ULONG_PTR)(h16)) #define HFONT_32(h16) ((HFONT) (ULONG_PTR)(h16)) #define HRGN_32(h16) ((HRGN) (ULONG_PTR)(h16)) #define HBITMAP_32(h16) ((HBITMAP) (ULONG_PTR)(h16)) #define HBRUSH_32(h16) ((HBRUSH) (ULONG_PTR)(h16)) #define HPALETTE_32(h16) ((HPALETTE) (ULONG_PTR)(h16)) #define HPEN_32(h16) ((HPEN) (ULONG_PTR)(h16)) #define HACCEL_32(h16) ((HACCEL) (ULONG_PTR)(h16)) #define HWND_16(h32) (LOWORD(h32)) #define HMENU_16(h32) (LOWORD(h32)) #define HDWP_16(h32) (LOWORD(h32)) #define HDROP_16(h32) (LOWORD(h32)) #define HDC_16(h32) (LOWORD(h32)) #define HFONT_16(h32) (LOWORD(h32)) #define HRGN_16(h32) (LOWORD(h32)) #define HBITMAP_16(h32) (LOWORD(h32)) #define HBRUSH_16(h32) (LOWORD(h32)) #define HPALETTE_16(h32) (LOWORD(h32)) #define HPEN_16(h32) (LOWORD(h32)) #define HACCEL_16(h32) (LOWORD(h32)) #else /* __WINESRC__ */ #define HWND_32(h16) ((HWND) (WOWHandle32(h16, WOW_TYPE_HWND))) #define HMENU_32(h16) ((HMENU) (WOWHandle32(h16, WOW_TYPE_HMENU))) #define HDWP_32(h16) ((HDWP) (WOWHandle32(h16, WOW_TYPE_HDWP))) #define HDROP_32(h16) ((HDROP) (WOWHandle32(h16, WOW_TYPE_HDROP))) #define HDC_32(h16) ((HDC) (WOWHandle32(h16, WOW_TYPE_HDC))) #define HFONT_32(h16) ((HFONT) (WOWHandle32(h16, WOW_TYPE_HFONT))) #define HRGN_32(h16) ((HRGN) (WOWHandle32(h16, WOW_TYPE_HRGN))) #define HBITMAP_32(h16) ((HBITMAP) (WOWHandle32(h16, WOW_TYPE_HBITMAP))) #define HBRUSH_32(h16) ((HBRUSH) (WOWHandle32(h16, WOW_TYPE_HBRUSH))) #define HPALETTE_32(h16) ((HPALETTE) (WOWHandle32(h16, WOW_TYPE_HPALETTE))) #define HPEN_32(h16) ((HPEN) (WOWHandle32(h16, WOW_TYPE_HPEN))) #define HACCEL_32(h16) ((HACCEL) (WOWHandle32(h16, WOW_TYPE_HACCEL))) #define HWND_16(h32) (WOWHandle16(h32, WOW_TYPE_HWND)) #define HMENU_16(h32) (WOWHandle16(h32, WOW_TYPE_HMENU)) #define HDWP_16(h32) (WOWHandle16(h32, WOW_TYPE_HDWP)) #define HDROP_16(h32) (WOWHandle16(h32, WOW_TYPE_HDROP)) #define HDC_16(h32) (WOWHandle16(h32, WOW_TYPE_HDC)) #define HFONT_16(h32) (WOWHandle16(h32, WOW_TYPE_HFONT)) #define HRGN_16(h32) (WOWHandle16(h32, WOW_TYPE_HRGN)) #define HBITMAP_16(h32) (WOWHandle16(h32, WOW_TYPE_HBITMAP)) #define HBRUSH_16(h32) (WOWHandle16(h32, WOW_TYPE_HBRUSH)) #define HPALETTE_16(h32) (WOWHandle16(h32, WOW_TYPE_HPALETTE)) #define HPEN_16(h32) (WOWHandle16(h32, WOW_TYPE_HPEN)) #define HACCEL_16(h32) (WOWHandle16(h32, WOW_TYPE_HACCEL)) #endif /* __WINESRC__ */ #define HMETAFILE_32(h16) ((HMETAFILE)(WOWHandle32(h16, WOW_TYPE_HMETAFILE))) #define HTASK_32(h16) ((DWORD)(WOWHandle32(h16, WOW_TYPE_HTASK))) #define FULLHWND_32(h16) ((HWND)(WOWHandle32(h16, WOW_TYPE_FULLHWND))) #define HMETAFILE_16(h32) (WOWHandle16(h32, WOW_TYPE_HMETAFILE)) #define HTASK_16(h32) (WOWHandle16((HANDLE)(h32), WOW_TYPE_HTASK)) #define WCB16_PASCAL 0 #define WCB16_CDECL 1 #define WCB16_MAX_CBARGS 16 /* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */ #define WCB16_REGS 2 #define WCB16_REGS_LONG 4 /* function uses 32-bit lret */ DWORD WINAPI WOWCallback16(DWORD,DWORD); BOOL WINAPI WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD); #endif /* _WOWNT32_H_ */ ================================================ FILE: wpp/CMakeLists.txt ================================================ set(SOURCE wpp.c preproc.c) include_directories(../wine .) bison_target(wpp_parser ppy.y ${CMAKE_CURRENT_BINARY_DIR}/ppy.tab.c COMPILE_FLAGS "-p ppy_") flex_target(wpp_scanner ppl.l ${CMAKE_CURRENT_BINARY_DIR}/ppl.c) add_flex_bison_dependency(wpp_scanner wpp_parser) add_library(wpp ${SOURCE} ${BISON_wpp_parser_OUTPUTS} ${FLEX_wpp_scanner_OUTPUTS}) add_definitions(-D_X86_ -D__i386__ -Dpopen=_popen -Dpclose=_pclose -Dstrncasecmp=_strnicmp -Dstrcasecmp=_stricmp) target_link_libraries(wpp libwine) ================================================ FILE: wpp/ppl.l ================================================ /* -*-C-*- * Wrc preprocessor lexical analysis * * Copyright 1999-2000 Bertho A. Stultiens (BS) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * History: * 24-Apr-2000 BS - Started from scratch to restructure everything * and reintegrate the source into the wine-tree. * 04-Jan-2000 BS - Added comments about the lexicographical * grammar to give some insight in the complexity. * 28-Dec-1999 BS - Eliminated backing-up of the flexer by running * `flex -b' on the source. This results in some * weirdo extra rules, but a much faster scanner. * 23-Dec-1999 BS - Started this file * *------------------------------------------------------------------------- * The preprocessor's lexographical grammar (approximately): * * pp := {ws} # {ws} if {ws} {expr} {ws} \n * | {ws} # {ws} ifdef {ws} {id} {ws} \n * | {ws} # {ws} ifndef {ws} {id} {ws} \n * | {ws} # {ws} elif {ws} {expr} {ws} \n * | {ws} # {ws} else {ws} \n * | {ws} # {ws} endif {ws} \n * | {ws} # {ws} include {ws} < {anytext} > \n * | {ws} # {ws} include {ws} " {anytext} " \n * | {ws} # {ws} define {ws} {anytext} \n * | {ws} # {ws} define( {arglist} ) {ws} {expansion} \n * | {ws} # {ws} pragma {ws} {anytext} \n * | {ws} # {ws} ident {ws} {anytext} \n * | {ws} # {ws} error {ws} {anytext} \n * | {ws} # {ws} warning {ws} {anytext} \n * | {ws} # {ws} line {ws} " {anytext} " {number} \n * | {ws} # {ws} {number} " {anytext} " {number} [ {number} [{number}] ] \n * | {ws} # {ws} \n * * ws := [ \t\r\f\v]* * * expr := {expr} [+-*%^/|&] {expr} * | {expr} {logor|logand} {expr} * | [!~+-] {expr} * | {expr} ? {expr} : {expr} * * logor := || * * logand := && * * id := [a-zA-Z_][a-zA-Z0-9_]* * * anytext := [^\n]* (see note) * * arglist := * | {id} * | {arglist} , {id} * | {arglist} , {id} ... * * expansion := {id} * | # {id} * | {anytext} * | {anytext} ## {anytext} * * number := [0-9]+ * * Note: "anytext" is not always "[^\n]*". This is because the * trailing context must be considered as well. * * The only certain assumption for the preprocessor to make is that * directives start at the beginning of the line, followed by a '#' * and end with a newline. * Any directive may be suffixed with a line-continuation. Also * classical comment / *...* / (note: no comments within comments, * therefore spaces) is considered to be a line-continuation * (according to gcc and egcs AFAIK, ANSI is a bit vague). * Comments have not been added to the above grammar for simplicity * reasons. However, it is allowed to enter comment anywhere within * the directives as long as they do not interfere with the context. * All comments are considered to be deletable whitespace (both * classical form "/ *...* /" and C++ form "//...\n"). * * All recursive scans, except for macro-expansion, are done by the * parser, whereas the simple state transitions of non-recursive * directives are done in the scanner. This results in the many * exclusive start-conditions of the scanner. * * Macro expansions are slightly more difficult because they have to * prescan the arguments. Parameter substitution is literal if the * substitution is # or ## (either side). This enables new identifiers * to be created (see 'info cpp' node Macro|Pitfalls|Prescan for more * information). * * FIXME: Variable macro parameters is recognized, but not yet * expanded. I have to reread the ANSI standard on the subject (yes, * ANSI defines it). * * The following special defines are supported: * __FILE__ -> "thissource.c" * __LINE__ -> 123 * __DATE__ -> "May 1 2000" * __TIME__ -> "23:59:59" * These macros expand, as expected, into their ANSI defined values. * * The same include prevention is implemented as gcc and egcs does. * This results in faster processing because we do not read the text * at all. Some wine-sources attempt to include the same file 4 or 5 * times. This strategy also saves a lot blank output-lines, which in * its turn improves the real resource scanner/parser. * */ %top{ #include "config.h" #include "wine/port.h" } /* * Special flex options and exclusive scanner start-conditions */ %option stack %option 8bit never-interactive %option noinput nounput %option prefix="ppy_" %x pp_pp %x pp_eol %x pp_inc %x pp_dqs %x pp_sqs %x pp_iqs %x pp_comment %x pp_def %x pp_define %x pp_macro %x pp_mbody %x pp_macign %x pp_macscan %x pp_macexp %x pp_if %x pp_ifd %x pp_endif %x pp_line %x pp_defined %x pp_ignore %x RCINCL ws [ \v\f\t\r] cident [a-zA-Z_][0-9a-zA-Z_]* ul [uUlL]|[uUlL][lL]|[lL][uU]|[lL][lL][uU]|[uU][lL][lL]|[lL][uU][lL] %{ #include #include #include #include #include #include #include #ifndef LLONG_MAX # define LLONG_MAX ((long long)0x7fffffff << 32 | 0xffffffff) # define LLONG_MIN (-LLONG_MAX - 1) #endif #ifndef ULLONG_MAX # define ULLONG_MAX ((long long)0xffffffff << 32 | 0xffffffff) #endif #ifndef HAVE_UNISTD_H #define YY_NO_UNISTD_H #endif #include "wine/wpp.h" #include "wpp_private.h" #include "ppy.tab.h" /* * Make sure that we are running an appropriate version of flex. */ #if !defined(YY_FLEX_MAJOR_VERSION) || (1000 * YY_FLEX_MAJOR_VERSION + YY_FLEX_MINOR_VERSION < 2005) #error Must use flex version 2.5.1 or higher (yy_scan_* routines are required). #endif #define YY_READ_BUF_SIZE 65536 /* So we read most of a file at once */ #define yy_current_state() YY_START #define yy_pp_state(x) yy_pop_state(); yy_push_state(x) /* * Always update the current character position within a line */ #define YY_USER_ACTION pp_status.char_number+=ppy_leng; /* * Buffer management for includes and expansions */ #define MAXBUFFERSTACK 128 /* Nesting more than 128 includes or macro expansion textss is insane */ typedef struct bufferstackentry { YY_BUFFER_STATE bufferstate; /* Buffer to switch back to */ void *filehandle; /* Handle to be used with wpp_callbacks->read */ pp_entry_t *define; /* Points to expanding define or NULL if handling includes */ int line_number; /* Line that we were handling */ int char_number; /* The current position on that line */ char *filename; /* Filename that we were handling */ int if_depth; /* How many #if:s deep to check matching #endif:s */ int ncontinuations; /* Remember the continuation state */ int should_pop; /* Set if we must pop the start-state on EOF */ /* Include management */ include_state_t incl; char *include_filename; } bufferstackentry_t; #define ALLOCBLOCKSIZE (1 << 10) /* Allocate these chunks at a time for string-buffers */ /* * Macro expansion nesting * We need the stack to handle expansions while scanning * a macro's arguments. The TOS must always be the macro * that receives the current expansion from the scanner. */ #define MAXMACEXPSTACK 128 /* Nesting more than 128 macro expansions is insane */ typedef struct macexpstackentry { pp_entry_t *ppp; /* This macro we are scanning */ char **args; /* With these arguments */ char **ppargs; /* Resulting in these preprocessed arguments */ int *nnls; /* Number of newlines per argument */ int nargs; /* And this many arguments scanned */ int parentheses; /* Nesting level of () */ int curargsize; /* Current scanning argument's size */ int curargalloc; /* Current scanning argument's block allocated */ char *curarg; /* Current scanning argument's content */ } macexpstackentry_t; #define MACROPARENTHESES() (top_macro()->parentheses) /* * Prototypes */ static void newline(int); static int make_number(int radix, YYSTYPE *val, const char *str, int len); static void put_buffer(const char *s, int len); /* Buffer management */ static void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop); static bufferstackentry_t *pop_buffer(void); /* String functions */ static void new_string(void); static void add_string(const char *str, int len); static char *get_string(void); static void put_string(void); static int string_start(void); /* Macro functions */ static void push_macro(pp_entry_t *ppp); static macexpstackentry_t *top_macro(void); static macexpstackentry_t *pop_macro(void); static void free_macro(macexpstackentry_t *mep); static void add_text_to_macro(const char *text, int len); static void macro_add_arg(int last); static void macro_add_expansion(void); /* Expansion */ static void expand_special(pp_entry_t *ppp); static void expand_define(pp_entry_t *ppp); static void expand_macro(macexpstackentry_t *mep); /* * Local variables */ static int ncontinuations; static int strbuf_idx = 0; static int strbuf_alloc = 0; static char *strbuffer = NULL; static int str_startline; static macexpstackentry_t *macexpstack[MAXMACEXPSTACK]; static int macexpstackidx = 0; static bufferstackentry_t bufferstack[MAXBUFFERSTACK]; static int bufferstackidx = 0; /* * Global variables */ include_state_t pp_incl_state = { -1, /* state */ NULL, /* ppp */ 0, /* ifdepth */ 0 /* seen_junk */ }; includelogicentry_t *pp_includelogiclist = NULL; #define YY_INPUT(buf,result,max_size) \ { \ result = wpp_callbacks->read(pp_status.file, buf, max_size); \ } #define BUFFERINITIALCAPACITY 256 void pp_writestring(const char *format, ...) { va_list valist; int len; static char *buffer; static int buffercapacity; char *new_buffer; if(buffercapacity == 0) { buffer = pp_xmalloc(BUFFERINITIALCAPACITY); if(buffer == NULL) return; buffercapacity = BUFFERINITIALCAPACITY; } va_start(valist, format); len = vsnprintf(buffer, buffercapacity, format, valist); va_end(valist); /* If the string is longer than buffersize, vsnprintf returns * the string length with glibc >= 2.1, -1 with glibc < 2.1 */ while(len > buffercapacity || len < 0) { do { buffercapacity *= 2; } while(len > buffercapacity); new_buffer = pp_xrealloc(buffer, buffercapacity); if(new_buffer == NULL) { va_end(valist); return; } buffer = new_buffer; va_start(valist, format); len = vsnprintf(buffer, buffercapacity, format, valist); va_end(valist); } wpp_callbacks->write(buffer, len); } %} /* ************************************************************************** * The scanner starts here ************************************************************************** */ %% /* * Catch line-continuations. * Note: Gcc keeps the line-continuations in, for example, strings * intact. However, I prefer to remove them all so that the next * scanner will not need to reduce the continuation state. * * <*>\\\n newline(0); */ /* * Detect the leading # of a preprocessor directive. */ ^{ws}*# pp_incl_state.seen_junk++; yy_push_state(pp_pp); /* * Scan for the preprocessor directives */ {ws}*include{ws}* if(yy_top_state() != pp_ignore) {yy_pp_state(pp_inc); return tINCLUDE;} else {yy_pp_state(pp_eol);} {ws}*define{ws}* yy_pp_state(yy_current_state() != pp_ignore ? pp_def : pp_eol); {ws}*error{ws}* yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tERROR; {ws}*warning{ws}* yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tWARNING; {ws}*pragma{ws}* yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tPRAGMA; {ws}*ident{ws}* yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tPPIDENT; {ws}*undef{ws}* if(yy_top_state() != pp_ignore) {yy_pp_state(pp_ifd); return tUNDEF;} else {yy_pp_state(pp_eol);} {ws}*ifdef{ws}* yy_pp_state(pp_ifd); return tIFDEF; {ws}*ifndef{ws}* pp_incl_state.seen_junk--; yy_pp_state(pp_ifd); return tIFNDEF; {ws}*if{ws}* yy_pp_state(pp_if); return tIF; {ws}*elif{ws}* yy_pp_state(pp_if); return tELIF; {ws}*else{ws}* yy_pp_state(pp_endif); return tELSE; {ws}*endif{ws}* yy_pp_state(pp_endif); return tENDIF; {ws}*line{ws}* if(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tLINE;} else {yy_pp_state(pp_eol);} {ws}+ if(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tGCCLINE;} else {yy_pp_state(pp_eol);} {ws}*[a-z]+ ppy_error("Invalid preprocessor token '%s'", ppy_text); \r?\n newline(1); yy_pop_state(); return tNL; /* This could be the null-token */ \\\r?\n newline(0); \\\r? ppy_error("Preprocessor junk '%s'", ppy_text); . return *ppy_text; /* * Handle #include and #line */ [0-9]+ return make_number(10, &ppy_lval, ppy_text, ppy_leng); \< new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_iqs); \" new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); {ws}+ ; \n newline(1); yy_pop_state(); return tNL; \\\r?\n newline(0); (\\\r?)|(.) ppy_error(yy_current_state() == pp_inc ? "Trailing junk in #include" : "Trailing junk in #line"); /* * Ignore all input when a false clause is parsed */ [^#/\\\n]+ ; \n newline(1); \\\r?\n newline(0); (\\\r?)|(.) ; /* * Handle #if and #elif. * These require conditionals to be evaluated, but we do not * want to jam the scanner normally when we see these tokens. * Note: tIDENT is handled below. */ 0[0-7]*{ul}? return make_number(8, &ppy_lval, ppy_text, ppy_leng); 0[0-7]*[8-9]+{ul}? ppy_error("Invalid octal digit"); [1-9][0-9]*{ul}? return make_number(10, &ppy_lval, ppy_text, ppy_leng); 0[xX][0-9a-fA-F]+{ul}? return make_number(16, &ppy_lval, ppy_text, ppy_leng); 0[xX] ppy_error("Invalid hex number"); defined yy_push_state(pp_defined); return tDEFINED; "<<" return tLSHIFT; ">>" return tRSHIFT; "&&" return tLOGAND; "||" return tLOGOR; "==" return tEQ; "!=" return tNE; "<=" return tLTE; ">=" return tGTE; \n newline(1); yy_pop_state(); return tNL; \\\r?\n newline(0); \\\r? ppy_error("Junk in conditional expression"); {ws}+ ; \' new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); \" ppy_error("String constants not allowed in conditionals"); . return *ppy_text; /* * Handle #ifdef, #ifndef and #undef * to get only an untranslated/unexpanded identifier */ {cident} ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; {ws}+ ; \n newline(1); yy_pop_state(); return tNL; \\\r?\n newline(0); (\\\r?)|(.) ppy_error("Identifier expected"); /* * Handle #else and #endif. */ {ws}+ ; \n newline(1); yy_pop_state(); return tNL; \\\r?\n newline(0); . ppy_error("Garbage after #else or #endif."); /* * Handle the special 'defined' keyword. * This is necessary to get the identifier prior to any * substitutions. */ {cident} yy_pop_state(); ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; {ws}+ ; (\()|(\)) return *ppy_text; \\\r?\n newline(0); (\\.)|(\n)|(.) ppy_error("Identifier expected"); /* * Handle #error, #warning, #pragma and #ident. * Pass everything literally to the parser, which * will act appropriately. * Comments are stripped from the literal text. */ [^/\\\n]+ if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; } \/[^/\\\n*]* if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; } (\\\r?)|(\/[^/*]) if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; } \n newline(1); yy_pop_state(); if(yy_current_state() != pp_ignore) { return tNL; } \\\r?\n newline(0); /* * Handle left side of #define */ {cident}\( ppy_lval.cptr = pp_xstrdup(ppy_text); if(ppy_lval.cptr) ppy_lval.cptr[ppy_leng-1] = '\0'; yy_pp_state(pp_macro); return tMACRO; {cident} ppy_lval.cptr = pp_xstrdup(ppy_text); yy_pp_state(pp_define); return tDEFINE; {ws}+ ; \\\r?\n newline(0); (\\\r?)|(\n)|(.) perror("Identifier expected"); /* * Scan the substitution of a define */ [^'"/\\\n]+ ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; (\\\r?)|(\/[^/*]) ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; \\\r?\n{ws}+ newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL; \\\r?\n newline(0); \n newline(1); yy_pop_state(); return tNL; \' new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); \" new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); /* * Scan the definition macro arguments */ \){ws}* yy_pp_state(pp_mbody); return tMACROEND; {ws}+ ; {cident} ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; , return ','; "..." return tELIPSIS; (\\\r?)|(\n)|(.)|(\.\.?) ppy_error("Argument identifier expected"); \\\r?\n newline(0); /* * Scan the substitution of a macro */ [^a-zA-Z0-9'"#/\\\n]+ ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; {cident} ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; \#\# return tCONCAT; \# return tSTRINGIZE; [0-9][a-zA-Z0-9]*[^a-zA-Z0-9'"#/\\\n]* ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; (\\\r?)|(\/[^/*'"#\\\n]*) ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; \\\r?\n{ws}+ newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL; \\\r?\n newline(0); \n newline(1); yy_pop_state(); return tNL; \' new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); \" new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); /* * Macro expansion text scanning. * This state is active just after the identifier is scanned * that triggers an expansion. We *must* delete the leading * whitespace before we can start scanning for arguments. * * If we do not see a '(' as next trailing token, then we have * a false alarm. We just continue with a nose-bleed... */ {ws}*/\( yy_pp_state(pp_macscan); {ws}*\n { if(yy_top_state() != pp_macscan) newline(0); } {ws}*\\\r?\n newline(0); {ws}+|{ws}*\\\r?|. { macexpstackentry_t *mac = pop_macro(); yy_pop_state(); put_buffer(mac->ppp->ident, strlen(mac->ppp->ident)); put_buffer(ppy_text, ppy_leng); free_macro(mac); } /* * Macro expansion argument text scanning. * This state is active when a macro's arguments are being read for expansion. */ \( { if(++MACROPARENTHESES() > 1) add_text_to_macro(ppy_text, ppy_leng); } \) { if(--MACROPARENTHESES() == 0) { yy_pop_state(); macro_add_arg(1); } else add_text_to_macro(ppy_text, ppy_leng); } , { if(MACROPARENTHESES() > 1) add_text_to_macro(ppy_text, ppy_leng); else macro_add_arg(0); } \" new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); \' new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); "/*" yy_push_state(pp_comment); add_text_to_macro(" ", 1); \n pp_status.line_number++; pp_status.char_number = 1; add_text_to_macro(ppy_text, ppy_leng); ([^/(),\\\n"']+)|(\/[^/*(),\\\n'"]*)|(\\\r?)|(.) add_text_to_macro(ppy_text, ppy_leng); \\\r?\n newline(0); /* * Comment handling (almost all start-conditions) */ "/*" yy_push_state(pp_comment); [^*\n]*|"*"+[^*/\n]* ; \n newline(0); "*"+"/" yy_pop_state(); /* * Remove C++ style comment (almost all start-conditions) */ "//"[^\n]* { if(ppy_text[ppy_leng-1] == '\\') ppy_warning("C++ style comment ends with an escaped newline (escape ignored)"); } /* * Single, double and <> quoted constants */ \" pp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); \' pp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); [^"\\\n]+ add_string(ppy_text, ppy_leng); \" { add_string(ppy_text, ppy_leng); yy_pop_state(); switch(yy_current_state()) { case pp_pp: case pp_define: case pp_mbody: case pp_inc: case RCINCL: if (yy_current_state()==RCINCL) yy_pop_state(); ppy_lval.cptr = get_string(); return tDQSTRING; case pp_line: ppy_lval.cptr = get_string(); return tDQSTRING; default: put_string(); } } [^'\\\n]+ add_string(ppy_text, ppy_leng); \' { add_string(ppy_text, ppy_leng); yy_pop_state(); switch(yy_current_state()) { case pp_if: case pp_define: case pp_mbody: ppy_lval.cptr = get_string(); return tSQSTRING; default: put_string(); } } [^\>\\\n]+ add_string(ppy_text, ppy_leng); \> { add_string(ppy_text, ppy_leng); yy_pop_state(); ppy_lval.cptr = get_string(); return tIQSTRING; } \\\r?\n { /* * This is tricky; we need to remove the line-continuation * from preprocessor strings, but OTOH retain them in all * other strings. This is because the resource grammar is * even more braindead than initially analysed and line- * continuations in strings introduce, sigh, newlines in * the output. There goes the concept of non-breaking, non- * spacing whitespace. */ switch(yy_top_state()) { case pp_pp: case pp_define: case pp_mbody: case pp_inc: case pp_line: newline(0); break; default: add_string(ppy_text, ppy_leng); newline(-1); } } \\. add_string(ppy_text, ppy_leng); \n { newline(1); add_string(ppy_text, ppy_leng); ppy_warning("Newline in string constant encountered (started line %d)", string_start()); } /* * Identifier scanning */ {cident} { pp_entry_t *ppp; pp_incl_state.seen_junk++; if(!(ppp = pplookup(ppy_text))) { if(yy_current_state() == pp_inc) ppy_error("Expected include filename"); else if(yy_current_state() == pp_if) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; } else { if((yy_current_state()==INITIAL) && (strcasecmp(ppy_text,"RCINCLUDE")==0)){ yy_push_state(RCINCL); return tRCINCLUDE; } else put_buffer(ppy_text, ppy_leng); } } else if(!ppp->expanding) { switch(ppp->type) { case def_special: expand_special(ppp); break; case def_define: expand_define(ppp); break; case def_macro: yy_push_state(pp_macign); push_macro(ppp); break; default: pp_internal_error(__FILE__, __LINE__, "Invalid define type %d\n", ppp->type); } } else put_buffer(ppy_text, ppy_leng); } /* * Everything else that needs to be passed and * newline and continuation handling */ [^a-zA-Z_#'"/\\\n \r\t\f\v]+|(\/|\\)[^a-zA-Z_/*'"\\\n \r\t\v\f]* pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng); {ws}+ put_buffer(ppy_text, ppy_leng); \n newline(1); \\\r?\n newline(0); \\\r? pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng); /* * Special catcher for macro argmument expansion to prevent * newlines to propagate to the output or admin. */ (\n)|(.)|(\\\r?(\n|.)) put_buffer(ppy_text, ppy_leng); [A-Za-z0-9_\.\\/]+ { ppy_lval.cptr=pp_xstrdup(ppy_text); yy_pop_state(); return tRCINCLUDEPATH; } {ws}+ ; \" { new_string(); add_string(ppy_text,ppy_leng);yy_push_state(pp_dqs); } /* * This is a 'catch-all' rule to discover errors in the scanner * in an orderly manner. */ <*>. pp_incl_state.seen_junk++; ppy_warning("Unmatched text '%c' (0x%02x); please report\n", isprint(*ppy_text & 0xff) ? *ppy_text : ' ', *ppy_text); <> { YY_BUFFER_STATE b = YY_CURRENT_BUFFER; bufferstackentry_t *bep = pop_buffer(); if((!bep && pp_get_if_depth()) || (bep && pp_get_if_depth() != bep->if_depth)) ppy_warning("Unmatched #if/#endif at end of file"); if(!bep) { if(YY_START != INITIAL) { ppy_error("Unexpected end of file during preprocessing"); BEGIN(INITIAL); } yyterminate(); } else if(bep->should_pop == 2) { macexpstackentry_t *mac; mac = pop_macro(); expand_macro(mac); } ppy__delete_buffer(b); } %% /* ************************************************************************** * Support functions ************************************************************************** */ #ifndef ppy_wrap int ppy_wrap(void) { return 1; } #endif /* *------------------------------------------------------------------------- * Output newlines or set them as continuations * * Input: -1 - Don't count this one, but update local position (see pp_dqs) * 0 - Line-continuation seen and cache output * 1 - Newline seen and flush output *------------------------------------------------------------------------- */ static void newline(int dowrite) { pp_status.line_number++; pp_status.char_number = 1; if(dowrite == -1) return; ncontinuations++; if(dowrite) { for(;ncontinuations; ncontinuations--) put_buffer("\n", 1); } } /* *------------------------------------------------------------------------- * Make a number out of an any-base and suffixed string * * Possible number extensions: * - "" int * - "L" long int * - "LL" long long int * - "U" unsigned int * - "UL" unsigned long int * - "ULL" unsigned long long int * - "LU" unsigned long int * - "LLU" unsigned long long int * - "LUL" invalid * * FIXME: * The sizes of resulting 'int' and 'long' are compiler specific. * I depend on sizeof(int) > 2 here (although a relatively safe * assumption). * Long longs are not yet implemented because this is very compiler * specific and I don't want to think too much about the problems. * *------------------------------------------------------------------------- */ static int make_number(int radix, YYSTYPE *val, const char *str, int len) { int is_l = 0; int is_ll = 0; int is_u = 0; char ext[4]; long l; ext[3] = '\0'; ext[2] = toupper(str[len-1]); ext[1] = len > 1 ? toupper(str[len-2]) : ' '; ext[0] = len > 2 ? toupper(str[len-3]) : ' '; if(!strcmp(ext, "LUL")) { ppy_error("Invalid constant suffix"); return 0; } else if(!strcmp(ext, "LLU") || !strcmp(ext, "ULL")) { is_ll++; is_u++; } else if(!strcmp(ext+1, "LU") || !strcmp(ext+1, "UL")) { is_l++; is_u++; } else if(!strcmp(ext+1, "LL")) { is_ll++; } else if(!strcmp(ext+2, "L")) { is_l++; } else if(!strcmp(ext+2, "U")) { is_u++; } if(is_ll) { /* Assume as in the declaration of wrc_ull_t and wrc_sll_t */ #ifdef HAVE_LONG_LONG if (is_u) { errno = 0; val->ull = strtoull(str, NULL, radix); if (val->ull == ULLONG_MAX && errno == ERANGE) ppy_error("integer constant %s is too large\n", str); return tULONGLONG; } else { errno = 0; val->sll = strtoll(str, NULL, radix); if ((val->sll == LLONG_MIN || val->sll == LLONG_MAX) && errno == ERANGE) ppy_error("integer constant %s is too large\n", str); return tSLONGLONG; } #else pp_internal_error(__FILE__, __LINE__, "long long constants not supported on this platform"); #endif } else if(is_u && is_l) { errno = 0; val->ulong = strtoul(str, NULL, radix); if (val->ulong == ULONG_MAX && errno == ERANGE) ppy_error("integer constant %s is too large\n", str); return tULONG; } else if(!is_u && is_l) { errno = 0; val->slong = strtol(str, NULL, radix); if ((val->slong == LONG_MIN || val->slong == LONG_MAX) && errno == ERANGE) ppy_error("integer constant %s is too large\n", str); return tSLONG; } else if(is_u && !is_l) { unsigned long ul; errno = 0; ul = strtoul(str, NULL, radix); if ((ul == ULONG_MAX && errno == ERANGE) || (ul > UINT_MAX)) ppy_error("integer constant %s is too large\n", str); val->uint = (unsigned int)ul; return tUINT; } /* Else it must be an int... */ errno = 0; l = strtol(str, NULL, radix); if (((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE) || (l > INT_MAX) || (l < INT_MIN)) ppy_error("integer constant %s is too large\n", str); val->sint = (int)l; return tSINT; } /* *------------------------------------------------------------------------- * Macro and define expansion support * * FIXME: Variable macro arguments. *------------------------------------------------------------------------- */ static void expand_special(pp_entry_t *ppp) { static char *buf = NULL; char *new_buf; assert(ppp->type == def_special); if(!strcmp(ppp->ident, "__LINE__")) { new_buf = pp_xrealloc(buf, 32); if(!new_buf) return; buf = new_buf; sprintf(buf, "%d", pp_status.line_number); } else if(!strcmp(ppp->ident, "__FILE__")) { new_buf = pp_xrealloc(buf, strlen(pp_status.input) + 3); if(!new_buf) return; buf = new_buf; sprintf(buf, "\"%s\"", pp_status.input); } else pp_internal_error(__FILE__, __LINE__, "Special macro '%s' not found...\n", ppp->ident); if(pp_flex_debug) fprintf(stderr, "expand_special(%d): %s:%d: '%s' -> '%s'\n", macexpstackidx, pp_status.input, pp_status.line_number, ppp->ident, buf ? buf : ""); if(buf && buf[0]) { push_buffer(ppp, NULL, NULL, 0); yy_scan_string(buf); } } static void expand_define(pp_entry_t *ppp) { assert(ppp->type == def_define); if(pp_flex_debug) fprintf(stderr, "expand_define(%d): %s:%d: '%s' -> '%s'\n", macexpstackidx, pp_status.input, pp_status.line_number, ppp->ident, ppp->subst.text); if(ppp->subst.text && ppp->subst.text[0]) { push_buffer(ppp, NULL, NULL, 0); yy_scan_string(ppp->subst.text); } } static int curdef_idx = 0; static int curdef_alloc = 0; static char *curdef_text = NULL; static void add_text(const char *str, int len) { int new_alloc; char *new_text; if(len == 0) return; if(curdef_idx >= curdef_alloc || curdef_alloc - curdef_idx < len) { new_alloc = curdef_alloc + ((len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1)); new_text = pp_xrealloc(curdef_text, new_alloc * sizeof(curdef_text[0])); if(!new_text) return; curdef_text = new_text; curdef_alloc = new_alloc; if(curdef_alloc > 65536) ppy_warning("Reallocating macro-expansion buffer larger than 64kB"); } memcpy(&curdef_text[curdef_idx], str, len); curdef_idx += len; } static mtext_t *add_expand_text(mtext_t *mtp, macexpstackentry_t *mep, int *nnl) { char *cptr; char *exp; int tag; int n; if(mtp == NULL) return NULL; switch(mtp->type) { case exp_text: if(pp_flex_debug) fprintf(stderr, "add_expand_text: exp_text: '%s'\n", mtp->subst.text); add_text(mtp->subst.text, strlen(mtp->subst.text)); break; case exp_stringize: if(pp_flex_debug) fprintf(stderr, "add_expand_text: exp_stringize(%d): '%s'\n", mtp->subst.argidx, mep->args[mtp->subst.argidx]); cptr = mep->args[mtp->subst.argidx]; add_text("\"", 1); while(*cptr) { if(*cptr == '"' || *cptr == '\\') add_text("\\", 1); add_text(cptr, 1); cptr++; } add_text("\"", 1); break; case exp_concat: if(pp_flex_debug) fprintf(stderr, "add_expand_text: exp_concat\n"); /* Remove trailing whitespace from current expansion text */ while(curdef_idx) { if(isspace(curdef_text[curdef_idx-1] & 0xff)) curdef_idx--; else break; } /* tag current position and recursively expand the next part */ tag = curdef_idx; mtp = add_expand_text(mtp->next, mep, nnl); /* Now get rid of the leading space of the expansion */ cptr = &curdef_text[tag]; n = curdef_idx - tag; while(n) { if(isspace(*cptr & 0xff)) { cptr++; n--; } else break; } if(cptr != &curdef_text[tag]) { memmove(&curdef_text[tag], cptr, n); curdef_idx -= (curdef_idx - tag) - n; } break; case exp_subst: if((mtp->next && mtp->next->type == exp_concat) || (mtp->prev && mtp->prev->type == exp_concat)) exp = mep->args[mtp->subst.argidx]; else exp = mep->ppargs[mtp->subst.argidx]; if(exp) { add_text(exp, strlen(exp)); *nnl -= mep->nnls[mtp->subst.argidx]; cptr = strchr(exp, '\n'); while(cptr) { *cptr = ' '; cptr = strchr(cptr+1, '\n'); } mep->nnls[mtp->subst.argidx] = 0; } if(pp_flex_debug) fprintf(stderr, "add_expand_text: exp_subst(%d): '%s'\n", mtp->subst.argidx, exp); break; default: pp_internal_error(__FILE__, __LINE__, "Invalid expansion type (%d) in macro expansion\n", mtp->type); } return mtp; } static void expand_macro(macexpstackentry_t *mep) { mtext_t *mtp; int n, k; char *cptr; int nnl = 0; pp_entry_t *ppp = mep->ppp; int nargs = mep->nargs; assert(ppp->type == def_macro); assert(ppp->expanding == 0); if((ppp->nargs >= 0 && nargs != ppp->nargs) || (ppp->nargs < 0 && nargs < -ppp->nargs)) { ppy_error("Too %s macro arguments (%d)", nargs < abs(ppp->nargs) ? "few" : "many", nargs); return; } for(n = 0; n < nargs; n++) nnl += mep->nnls[n]; if(pp_flex_debug) fprintf(stderr, "expand_macro(%d): %s:%d: '%s'(%d,%d) -> ...\n", macexpstackidx, pp_status.input, pp_status.line_number, ppp->ident, mep->nargs, nnl); curdef_idx = 0; for(mtp = ppp->subst.mtext; mtp; mtp = mtp->next) { if(!(mtp = add_expand_text(mtp, mep, &nnl))) break; } for(n = 0; n < nnl; n++) add_text("\n", 1); /* To make sure there is room and termination (see below) */ add_text(" \0", 2); /* Strip trailing whitespace from expansion */ for(k = curdef_idx, cptr = &curdef_text[curdef_idx-1]; k > 0; k--, cptr--) { if(!isspace(*cptr & 0xff)) break; } /* * We must add *one* whitespace to make sure that there * is a token-separation after the expansion. */ *(++cptr) = ' '; *(++cptr) = '\0'; k++; /* Strip leading whitespace from expansion */ for(n = 0, cptr = curdef_text; n < k; n++, cptr++) { if(!isspace(*cptr & 0xff)) break; } if(k - n > 0) { if(pp_flex_debug) fprintf(stderr, "expand_text: '%s'\n", curdef_text + n); push_buffer(ppp, NULL, NULL, 0); /*yy_scan_bytes(curdef_text + n, k - n);*/ yy_scan_string(curdef_text + n); } } /* *------------------------------------------------------------------------- * String collection routines *------------------------------------------------------------------------- */ static void new_string(void) { #ifdef DEBUG if(strbuf_idx) ppy_warning("new_string: strbuf_idx != 0"); #endif strbuf_idx = 0; str_startline = pp_status.line_number; } static void add_string(const char *str, int len) { int new_alloc; char *new_buffer; if(len == 0) return; if(strbuf_idx >= strbuf_alloc || strbuf_alloc - strbuf_idx < len) { new_alloc = strbuf_alloc + ((len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1)); new_buffer = pp_xrealloc(strbuffer, new_alloc * sizeof(strbuffer[0])); if(!new_buffer) return; strbuffer = new_buffer; strbuf_alloc = new_alloc; if(strbuf_alloc > 65536) ppy_warning("Reallocating string buffer larger than 64kB"); } memcpy(&strbuffer[strbuf_idx], str, len); strbuf_idx += len; } static char *get_string(void) { char *str = pp_xmalloc(strbuf_idx + 1); if(!str) return NULL; memcpy(str, strbuffer, strbuf_idx); str[strbuf_idx] = '\0'; #ifdef DEBUG strbuf_idx = 0; #endif return str; } static void put_string(void) { put_buffer(strbuffer, strbuf_idx); #ifdef DEBUG strbuf_idx = 0; #endif } static int string_start(void) { return str_startline; } /* *------------------------------------------------------------------------- * Buffer management *------------------------------------------------------------------------- */ static void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop) { if(ppy_debug) printf("push_buffer(%d): %p %p %p %d\n", bufferstackidx, ppp, filename, incname, pop); if(bufferstackidx >= MAXBUFFERSTACK) pp_internal_error(__FILE__, __LINE__, "Buffer stack overflow"); memset(&bufferstack[bufferstackidx], 0, sizeof(bufferstack[0])); bufferstack[bufferstackidx].bufferstate = YY_CURRENT_BUFFER; bufferstack[bufferstackidx].filehandle = pp_status.file; bufferstack[bufferstackidx].define = ppp; bufferstack[bufferstackidx].line_number = pp_status.line_number; bufferstack[bufferstackidx].char_number = pp_status.char_number; bufferstack[bufferstackidx].if_depth = pp_get_if_depth(); bufferstack[bufferstackidx].should_pop = pop; bufferstack[bufferstackidx].filename = pp_status.input; bufferstack[bufferstackidx].ncontinuations = ncontinuations; bufferstack[bufferstackidx].incl = pp_incl_state; bufferstack[bufferstackidx].include_filename = incname; if(ppp) ppp->expanding = 1; else if(filename) { /* These will track the ppy_error to the correct file and line */ pp_status.line_number = 1; pp_status.char_number = 1; pp_status.input = filename; ncontinuations = 0; } else if(!pop) pp_internal_error(__FILE__, __LINE__, "Pushing buffer without knowing where to go to"); bufferstackidx++; } static bufferstackentry_t *pop_buffer(void) { if(bufferstackidx < 0) pp_internal_error(__FILE__, __LINE__, "Bufferstack underflow?"); if(bufferstackidx == 0) return NULL; bufferstackidx--; if(bufferstack[bufferstackidx].define) bufferstack[bufferstackidx].define->expanding = 0; else { includelogicentry_t *iep = NULL; if(!bufferstack[bufferstackidx].should_pop) { wpp_callbacks->close(pp_status.file); pp_writestring("# %d \"%s\" 2\n", bufferstack[bufferstackidx].line_number, bufferstack[bufferstackidx].filename); /* We have EOF, check the include logic */ if(pp_incl_state.state == 2 && !pp_incl_state.seen_junk && pp_incl_state.ppp) { pp_entry_t *ppp = pplookup(pp_incl_state.ppp); if(ppp) { iep = pp_xmalloc(sizeof(includelogicentry_t)); if (iep) { iep->ppp = ppp; ppp->iep = iep; iep->filename = bufferstack[bufferstackidx].include_filename; iep->prev = NULL; iep->next = pp_includelogiclist; if(iep->next) iep->next->prev = iep; pp_includelogiclist = iep; if(pp_status.debug) fprintf(stderr, "pop_buffer: %s:%d: includelogic added, include_ppp='%s', file='%s'\n", bufferstack[bufferstackidx].filename, bufferstack[bufferstackidx].line_number, pp_incl_state.ppp, iep->filename); } } } free(pp_incl_state.ppp); pp_incl_state = bufferstack[bufferstackidx].incl; } if (bufferstack[bufferstackidx].include_filename) { free(pp_status.input); pp_status.input = bufferstack[bufferstackidx].filename; } pp_status.line_number = bufferstack[bufferstackidx].line_number; pp_status.char_number = bufferstack[bufferstackidx].char_number; ncontinuations = bufferstack[bufferstackidx].ncontinuations; if (!iep) free(bufferstack[bufferstackidx].include_filename); } if(ppy_debug) printf("pop_buffer(%d): %p %p (%d, %d, %d) %p %d\n", bufferstackidx, bufferstack[bufferstackidx].bufferstate, bufferstack[bufferstackidx].define, bufferstack[bufferstackidx].line_number, bufferstack[bufferstackidx].char_number, bufferstack[bufferstackidx].if_depth, bufferstack[bufferstackidx].filename, bufferstack[bufferstackidx].should_pop); pp_status.file = bufferstack[bufferstackidx].filehandle; ppy__switch_to_buffer(bufferstack[bufferstackidx].bufferstate); if(bufferstack[bufferstackidx].should_pop) { if(yy_current_state() == pp_macexp) macro_add_expansion(); else pp_internal_error(__FILE__, __LINE__, "Pop buffer and state without macro expansion state"); yy_pop_state(); } return &bufferstack[bufferstackidx]; } /* *------------------------------------------------------------------------- * Macro nestng support *------------------------------------------------------------------------- */ static void push_macro(pp_entry_t *ppp) { if(macexpstackidx >= MAXMACEXPSTACK) { ppy_error("Too many nested macros"); return; } macexpstack[macexpstackidx] = pp_xmalloc(sizeof(macexpstack[0][0])); if(!macexpstack[macexpstackidx]) return; memset( macexpstack[macexpstackidx], 0, sizeof(macexpstack[0][0])); macexpstack[macexpstackidx]->ppp = ppp; macexpstackidx++; } static macexpstackentry_t *top_macro(void) { return macexpstackidx > 0 ? macexpstack[macexpstackidx-1] : NULL; } static macexpstackentry_t *pop_macro(void) { if(macexpstackidx <= 0) pp_internal_error(__FILE__, __LINE__, "Macro expansion stack underflow\n"); return macexpstack[--macexpstackidx]; } static void free_macro(macexpstackentry_t *mep) { int i; for(i = 0; i < mep->nargs; i++) free(mep->args[i]); free(mep->args); free(mep->nnls); free(mep->curarg); free(mep); } static void add_text_to_macro(const char *text, int len) { macexpstackentry_t *mep = top_macro(); assert(mep->ppp->expanding == 0); if(mep->curargalloc - mep->curargsize <= len+1) /* +1 for '\0' */ { char *new_curarg; int new_alloc = mep->curargalloc + ((ALLOCBLOCKSIZE > len+1) ? ALLOCBLOCKSIZE : len+1); new_curarg = pp_xrealloc(mep->curarg, new_alloc * sizeof(mep->curarg[0])); if(!new_curarg) return; mep->curarg = new_curarg; mep->curargalloc = new_alloc; } memcpy(mep->curarg + mep->curargsize, text, len); mep->curargsize += len; mep->curarg[mep->curargsize] = '\0'; } static void macro_add_arg(int last) { int nnl = 0; char *cptr; char **new_args, **new_ppargs; int *new_nnls; macexpstackentry_t *mep = top_macro(); assert(mep->ppp->expanding == 0); new_args = pp_xrealloc(mep->args, (mep->nargs+1) * sizeof(mep->args[0])); if(!new_args) return; mep->args = new_args; new_ppargs = pp_xrealloc(mep->ppargs, (mep->nargs+1) * sizeof(mep->ppargs[0])); if(!new_ppargs) return; mep->ppargs = new_ppargs; new_nnls = pp_xrealloc(mep->nnls, (mep->nargs+1) * sizeof(mep->nnls[0])); if(!new_nnls) return; mep->nnls = new_nnls; mep->args[mep->nargs] = pp_xstrdup(mep->curarg ? mep->curarg : ""); if(!mep->args[mep->nargs]) return; cptr = mep->args[mep->nargs]-1; while((cptr = strchr(cptr+1, '\n'))) { nnl++; } mep->nnls[mep->nargs] = nnl; mep->nargs++; free(mep->curarg); mep->curargalloc = mep->curargsize = 0; mep->curarg = NULL; if(pp_flex_debug) fprintf(stderr, "macro_add_arg: %s:%d: %d -> '%s'\n", pp_status.input, pp_status.line_number, mep->nargs-1, mep->args[mep->nargs-1]); /* Each macro argument must be expanded to cope with stingize */ if(last || mep->args[mep->nargs-1][0]) { yy_push_state(pp_macexp); push_buffer(NULL, NULL, NULL, last ? 2 : 1); yy_scan_string(mep->args[mep->nargs-1]); /*mep->bufferstackidx = bufferstackidx; But not nested! */ } } static void macro_add_expansion(void) { macexpstackentry_t *mep = top_macro(); assert(mep->ppp->expanding == 0); mep->ppargs[mep->nargs-1] = pp_xstrdup(mep->curarg ? mep->curarg : ""); free(mep->curarg); mep->curargalloc = mep->curargsize = 0; mep->curarg = NULL; if(pp_flex_debug) fprintf(stderr, "macro_add_expansion: %s:%d: %d -> '%s'\n", pp_status.input, pp_status.line_number, mep->nargs-1, mep->ppargs[mep->nargs-1] ? mep->ppargs[mep->nargs-1] : ""); } /* *------------------------------------------------------------------------- * Output management *------------------------------------------------------------------------- */ static void put_buffer(const char *s, int len) { if(top_macro()) add_text_to_macro(s, len); else wpp_callbacks->write(s, len); } /* *------------------------------------------------------------------------- * Include management *------------------------------------------------------------------------- */ void pp_do_include(char *fname, int type) { char *newpath; int n; includelogicentry_t *iep; void *fp; if(!fname) return; for(iep = pp_includelogiclist; iep; iep = iep->next) { if(!strcmp(iep->filename, fname)) { /* * We are done. The file was included before. * If the define was deleted, then this entry would have * been deleted too. */ free(fname); return; } } n = strlen(fname); if(n <= 2) { ppy_error("Empty include filename"); free(fname); return; } /* Undo the effect of the quotation */ fname[n-1] = '\0'; if((fp = pp_open_include(fname+1, type, pp_status.input, &newpath)) == NULL) { ppy_error("Unable to open include file %s", fname+1); free(fname); return; } fname[n-1] = *fname; /* Redo the quotes */ push_buffer(NULL, newpath, fname, 0); pp_incl_state.seen_junk = 0; pp_incl_state.state = 0; pp_incl_state.ppp = NULL; if(pp_status.debug) fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n", pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth); pp_status.file = fp; ppy__switch_to_buffer(ppy__create_buffer(NULL, YY_BUF_SIZE)); pp_writestring("# 1 \"%s\" 1%s\n", newpath, type ? "" : " 3"); } /* *------------------------------------------------------------------------- * Push/pop preprocessor ignore state when processing conditionals * which are false. *------------------------------------------------------------------------- */ void pp_push_ignore_state(void) { yy_push_state(pp_ignore); } void pp_pop_ignore_state(void) { yy_pop_state(); } ================================================ FILE: wpp/ppy.y ================================================ /* * Wrc preprocessor syntax analysis * * Copyright 1999-2000 Bertho A. Stultiens (BS) * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * History: * 24-Apr-2000 BS Restructured the lot to fit the new scanner * and reintegrate into the wine-tree. * 01-Jan-2000 BS FIXME: win16 preprocessor calculates with * 16 bit ints and overflows...? * 26-Dec-1999 BS Started this file * */ %{ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include "wpp_private.h" #define UNARY_OP(r, v, OP) \ switch(v.type) \ { \ case cv_sint: r.val.si = OP v.val.si; break; \ case cv_uint: r.val.ui = OP v.val.ui; break; \ case cv_slong: r.val.sl = OP v.val.sl; break; \ case cv_ulong: r.val.ul = OP v.val.ul; break; \ case cv_sll: r.val.sll = OP v.val.sll; break; \ case cv_ull: r.val.ull = OP v.val.ull; break; \ } #define cv_signed(v) ((v.type & FLAG_SIGNED) != 0) #define BIN_OP_INT(r, v1, v2, OP) \ r.type = v1.type; \ if(cv_signed(v1) && cv_signed(v2)) \ r.val.si = v1.val.si OP v2.val.si; \ else if(cv_signed(v1) && !cv_signed(v2)) \ r.val.si = v1.val.si OP (signed) v2.val.ui; \ else if(!cv_signed(v1) && cv_signed(v2)) \ r.val.si = (signed) v1.val.ui OP v2.val.si; \ else \ r.val.ui = v1.val.ui OP v2.val.ui; #define BIN_OP_LONG(r, v1, v2, OP) \ r.type = v1.type; \ if(cv_signed(v1) && cv_signed(v2)) \ r.val.sl = v1.val.sl OP v2.val.sl; \ else if(cv_signed(v1) && !cv_signed(v2)) \ r.val.sl = v1.val.sl OP (signed long) v2.val.ul; \ else if(!cv_signed(v1) && cv_signed(v2)) \ r.val.sl = (signed long) v1.val.ul OP v2.val.sl; \ else \ r.val.ul = v1.val.ul OP v2.val.ul; #define BIN_OP_LONGLONG(r, v1, v2, OP) \ r.type = v1.type; \ if(cv_signed(v1) && cv_signed(v2)) \ r.val.sll = v1.val.sll OP v2.val.sll; \ else if(cv_signed(v1) && !cv_signed(v2)) \ r.val.sll = v1.val.sll OP (wrc_sll_t) v2.val.ull; \ else if(!cv_signed(v1) && cv_signed(v2)) \ r.val.sll = (wrc_sll_t) v1.val.ull OP v2.val.sll; \ else \ r.val.ull = v1.val.ull OP v2.val.ull; #define BIN_OP(r, v1, v2, OP) \ switch(v1.type & SIZE_MASK) \ { \ case SIZE_INT: BIN_OP_INT(r, v1, v2, OP); break; \ case SIZE_LONG: BIN_OP_LONG(r, v1, v2, OP); break; \ case SIZE_LONGLONG: BIN_OP_LONGLONG(r, v1, v2, OP); break; \ default: pp_internal_error(__FILE__, __LINE__, "Invalid type indicator (0x%04x)", v1.type); \ } /* * Prototypes */ static int boolean(cval_t *v); static void promote_equal_size(cval_t *v1, cval_t *v2); static void cast_to_sint(cval_t *v); static void cast_to_uint(cval_t *v); static void cast_to_slong(cval_t *v); static void cast_to_ulong(cval_t *v); static void cast_to_sll(cval_t *v); static void cast_to_ull(cval_t *v); static marg_t *new_marg(char *str, def_arg_t type); static marg_t *add_new_marg(char *str, def_arg_t type); static int marg_index(char *id); static mtext_t *new_mtext(char *str, int idx, def_exp_t type); static mtext_t *combine_mtext(mtext_t *tail, mtext_t *mtp); static char *merge_text(char *s1, char *s2); /* * Local variables */ static marg_t **macro_args; /* Macro parameters array while parsing */ static int nmacro_args; %} %union{ int sint; unsigned int uint; long slong; unsigned long ulong; wrc_sll_t sll; wrc_ull_t ull; int *iptr; char *cptr; cval_t cval; marg_t *marg; mtext_t *mtext; } %token tRCINCLUDE %token tIF tIFDEF tIFNDEF tELSE tELIF tENDIF tDEFINED tNL %token tINCLUDE tLINE tGCCLINE tERROR tWARNING tPRAGMA tPPIDENT %token tUNDEF tMACROEND tCONCAT tELIPSIS tSTRINGIZE %token tIDENT tLITERAL tMACRO tDEFINE %token tDQSTRING tSQSTRING tIQSTRING %token tUINT %token tSINT %token tULONG %token tSLONG %token tULONGLONG %token tSLONGLONG %token tRCINCLUDEPATH %right '?' ':' %left tLOGOR %left tLOGAND %left '|' %left '^' %left '&' %left tEQ tNE %left '<' tLTE '>' tGTE %left tLSHIFT tRSHIFT %left '+' '-' %left '*' '/' %right '~' '!' %type pp_expr %type emargs margs %type opt_mtexts mtexts mtext %type allmargs %type opt_text text /* ************************************************************************** * The parser starts here ************************************************************************** */ %% pp_file : /* Empty */ | pp_file preprocessor ; preprocessor : tINCLUDE tDQSTRING tNL { pp_do_include($2, 1); } | tINCLUDE tIQSTRING tNL { pp_do_include($2, 0); } | tIF pp_expr tNL { pp_next_if_state(boolean(&$2)); } | tIFDEF tIDENT tNL { pp_next_if_state(pplookup($2) != NULL); free($2); } | tIFNDEF tIDENT tNL { int t = pplookup($2) == NULL; if(pp_incl_state.state == 0 && t && !pp_incl_state.seen_junk) { pp_incl_state.state = 1; pp_incl_state.ppp = $2; pp_incl_state.ifdepth = pp_get_if_depth(); } else if(pp_incl_state.state != 1) { pp_incl_state.state = -1; free($2); } else free($2); pp_next_if_state(t); if(pp_status.debug) fprintf(stderr, "tIFNDEF: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n", pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth); } | tELIF pp_expr tNL { pp_if_state_t s = pp_pop_if(); switch(s) { case if_true: case if_elif: pp_push_if(if_elif); break; case if_false: pp_push_if(boolean(&$2) ? if_true : if_false); break; case if_ignore: pp_push_if(if_ignore); break; case if_elsetrue: case if_elsefalse: ppy_error("#elif cannot follow #else"); break; case if_error: break; default: pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #elif directive", s); } } | tELSE tNL { pp_if_state_t s = pp_pop_if(); switch(s) { case if_true: pp_push_if(if_elsefalse); break; case if_elif: pp_push_if(if_elif); break; case if_false: pp_push_if(if_elsetrue); break; case if_ignore: pp_push_if(if_ignore); break; case if_elsetrue: case if_elsefalse: ppy_error("#else clause already defined"); break; case if_error: break; default: pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #else directive", s); } } | tENDIF tNL { if(pp_pop_if() != if_error) { if(pp_incl_state.ifdepth == pp_get_if_depth() && pp_incl_state.state == 1) { pp_incl_state.state = 2; pp_incl_state.seen_junk = 0; } else if(pp_incl_state.state != 1) { pp_incl_state.state = -1; } if(pp_status.debug) fprintf(stderr, "tENDIF: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n", pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth); } } | tUNDEF tIDENT tNL { pp_del_define($2); free($2); } | tDEFINE opt_text tNL { pp_add_define($1, $2); free($1); free($2); } | tMACRO res_arg allmargs tMACROEND opt_mtexts tNL { pp_add_macro($1, macro_args, nmacro_args, $5); } | tLINE tSINT tDQSTRING tNL { if($3) pp_writestring("# %d %s\n", $2 , $3); free($3); } | tGCCLINE tSINT tDQSTRING tNL { if($3) pp_writestring("# %d %s\n", $2 , $3); free($3); } | tGCCLINE tSINT tDQSTRING tSINT tNL { if($3) pp_writestring("# %d %s %d\n", $2, $3, $4); free($3); } | tGCCLINE tSINT tDQSTRING tSINT tSINT tNL { if($3) pp_writestring("# %d %s %d %d\n", $2 ,$3, $4, $5); free($3); } | tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tNL { if($3) pp_writestring("# %d %s %d %d %d\n", $2 ,$3 ,$4 ,$5, $6); free($3); } | tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tSINT tNL { if($3) pp_writestring("# %d %s %d %d %d %d\n", $2 ,$3 ,$4 ,$5, $6, $7); free($3); } | tGCCLINE tNL /* The null-token */ | tERROR opt_text tNL { ppy_error("#error directive: '%s'", $2); free($2); } | tWARNING opt_text tNL { ppy_warning("#warning directive: '%s'", $2); free($2); } | tPRAGMA opt_text tNL { pp_writestring("#pragma %s\n", $2 ? $2 : ""); free($2); } | tPPIDENT opt_text tNL { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", $2); free($2); } | tRCINCLUDE tRCINCLUDEPATH { if($2) { int nl=strlen($2) +3; char *fn=pp_xmalloc(nl); if(fn) { sprintf(fn,"\"%s\"",$2); pp_do_include(fn,1); } free($2); } } | tRCINCLUDE tDQSTRING { pp_do_include($2,1); } /*| tNL*/ ; opt_text: /* Empty */ { $$ = NULL; } | text { $$ = $1; } ; text : tLITERAL { $$ = $1; } | tDQSTRING { $$ = $1; } | tSQSTRING { $$ = $1; } | text tLITERAL { $$ = merge_text($1, $2); } | text tDQSTRING { $$ = merge_text($1, $2); } | text tSQSTRING { $$ = merge_text($1, $2); } ; res_arg : /* Empty */ { macro_args = NULL; nmacro_args = 0; } ; allmargs: /* Empty */ { $$ = 0; macro_args = NULL; nmacro_args = 0; } | emargs { $$ = nmacro_args; } ; emargs : margs { $$ = $1; } | margs ',' tELIPSIS { $$ = add_new_marg(NULL, arg_list); nmacro_args *= -1; } ; margs : margs ',' tIDENT { $$ = add_new_marg($3, arg_single); } | tIDENT { $$ = add_new_marg($1, arg_single); } ; opt_mtexts : /* Empty */ { $$ = NULL; } | mtexts { for($$ = $1; $$ && $$->prev; $$ = $$->prev) ; } ; mtexts : mtext { $$ = $1; } | mtexts mtext { $$ = combine_mtext($1, $2); } ; mtext : tLITERAL { $$ = new_mtext($1, 0, exp_text); } | tDQSTRING { $$ = new_mtext($1, 0, exp_text); } | tSQSTRING { $$ = new_mtext($1, 0, exp_text); } | tCONCAT { $$ = new_mtext(NULL, 0, exp_concat); } | tSTRINGIZE tIDENT { int mat = marg_index($2); if(mat < 0) ppy_error("Stringification identifier must be an argument parameter"); else $$ = new_mtext(NULL, mat, exp_stringize); } | tIDENT { int mat = marg_index($1); if(mat >= 0) $$ = new_mtext(NULL, mat, exp_subst); else if($1) $$ = new_mtext($1, 0, exp_text); } ; pp_expr : tSINT { $$.type = cv_sint; $$.val.si = $1; } | tUINT { $$.type = cv_uint; $$.val.ui = $1; } | tSLONG { $$.type = cv_slong; $$.val.sl = $1; } | tULONG { $$.type = cv_ulong; $$.val.ul = $1; } | tSLONGLONG { $$.type = cv_sll; $$.val.sll = $1; } | tULONGLONG { $$.type = cv_ull; $$.val.ull = $1; } | tDEFINED tIDENT { $$.type = cv_sint; $$.val.si = pplookup($2) != NULL; } | tDEFINED '(' tIDENT ')' { $$.type = cv_sint; $$.val.si = pplookup($3) != NULL; } | tIDENT { $$.type = cv_sint; $$.val.si = 0; } | pp_expr tLOGOR pp_expr { $$.type = cv_sint; $$.val.si = boolean(&$1) || boolean(&$3); } | pp_expr tLOGAND pp_expr { $$.type = cv_sint; $$.val.si = boolean(&$1) && boolean(&$3); } | pp_expr tEQ pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, ==); } | pp_expr tNE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, !=); } | pp_expr '<' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <); } | pp_expr '>' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >); } | pp_expr tLTE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <=); } | pp_expr tGTE pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >=); } | pp_expr '+' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, +); } | pp_expr '-' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, -); } | pp_expr '^' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, ^); } | pp_expr '&' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, &); } | pp_expr '|' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, |); } | pp_expr '*' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, *); } | pp_expr '/' pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, /); } | pp_expr tLSHIFT pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <<); } | pp_expr tRSHIFT pp_expr { promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >>); } | '+' pp_expr { $$ = $2; } | '-' pp_expr { UNARY_OP($$, $2, -); } | '~' pp_expr { UNARY_OP($$, $2, ~); } | '!' pp_expr { $$.type = cv_sint; $$.val.si = !boolean(&$2); } | '(' pp_expr ')' { $$ = $2; } | pp_expr '?' pp_expr ':' pp_expr { $$ = boolean(&$1) ? $3 : $5; } ; %% /* ************************************************************************** * Support functions ************************************************************************** */ static void cast_to_sint(cval_t *v) { switch(v->type) { case cv_sint: break; case cv_uint: break; case cv_slong: v->val.si = v->val.sl; break; case cv_ulong: v->val.si = v->val.ul; break; case cv_sll: v->val.si = v->val.sll; break; case cv_ull: v->val.si = v->val.ull; break; } v->type = cv_sint; } static void cast_to_uint(cval_t *v) { switch(v->type) { case cv_sint: break; case cv_uint: break; case cv_slong: v->val.ui = v->val.sl; break; case cv_ulong: v->val.ui = v->val.ul; break; case cv_sll: v->val.ui = v->val.sll; break; case cv_ull: v->val.ui = v->val.ull; break; } v->type = cv_uint; } static void cast_to_slong(cval_t *v) { switch(v->type) { case cv_sint: v->val.sl = v->val.si; break; case cv_uint: v->val.sl = v->val.ui; break; case cv_slong: break; case cv_ulong: break; case cv_sll: v->val.sl = v->val.sll; break; case cv_ull: v->val.sl = v->val.ull; break; } v->type = cv_slong; } static void cast_to_ulong(cval_t *v) { switch(v->type) { case cv_sint: v->val.ul = v->val.si; break; case cv_uint: v->val.ul = v->val.ui; break; case cv_slong: break; case cv_ulong: break; case cv_sll: v->val.ul = v->val.sll; break; case cv_ull: v->val.ul = v->val.ull; break; } v->type = cv_ulong; } static void cast_to_sll(cval_t *v) { switch(v->type) { case cv_sint: v->val.sll = v->val.si; break; case cv_uint: v->val.sll = v->val.ui; break; case cv_slong: v->val.sll = v->val.sl; break; case cv_ulong: v->val.sll = v->val.ul; break; case cv_sll: break; case cv_ull: break; } v->type = cv_sll; } static void cast_to_ull(cval_t *v) { switch(v->type) { case cv_sint: v->val.ull = v->val.si; break; case cv_uint: v->val.ull = v->val.ui; break; case cv_slong: v->val.ull = v->val.sl; break; case cv_ulong: v->val.ull = v->val.ul; break; case cv_sll: break; case cv_ull: break; } v->type = cv_ull; } static void promote_equal_size(cval_t *v1, cval_t *v2) { #define cv_sizeof(v) ((int)(v->type & SIZE_MASK)) int s1 = cv_sizeof(v1); int s2 = cv_sizeof(v2); #undef cv_sizeof if(s1 == s2) return; else if(s1 > s2) { switch(v1->type) { case cv_sint: cast_to_sint(v2); break; case cv_uint: cast_to_uint(v2); break; case cv_slong: cast_to_slong(v2); break; case cv_ulong: cast_to_ulong(v2); break; case cv_sll: cast_to_sll(v2); break; case cv_ull: cast_to_ull(v2); break; } } else { switch(v2->type) { case cv_sint: cast_to_sint(v1); break; case cv_uint: cast_to_uint(v1); break; case cv_slong: cast_to_slong(v1); break; case cv_ulong: cast_to_ulong(v1); break; case cv_sll: cast_to_sll(v1); break; case cv_ull: cast_to_ull(v1); break; } } } static int boolean(cval_t *v) { switch(v->type) { case cv_sint: return v->val.si != (int)0; case cv_uint: return v->val.ui != (unsigned int)0; case cv_slong: return v->val.sl != (long)0; case cv_ulong: return v->val.ul != (unsigned long)0; case cv_sll: return v->val.sll != (wrc_sll_t)0; case cv_ull: return v->val.ull != (wrc_ull_t)0; } return 0; } static marg_t *new_marg(char *str, def_arg_t type) { marg_t *ma = pp_xmalloc(sizeof(marg_t)); if(!ma) return NULL; ma->arg = str; ma->type = type; ma->nnl = 0; return ma; } static marg_t *add_new_marg(char *str, def_arg_t type) { marg_t **new_macro_args; marg_t *ma; if(!str) return NULL; new_macro_args = pp_xrealloc(macro_args, (nmacro_args+1) * sizeof(macro_args[0])); if(!new_macro_args) return NULL; macro_args = new_macro_args; ma = new_marg(str, type); if(!ma) return NULL; macro_args[nmacro_args] = ma; nmacro_args++; return ma; } static int marg_index(char *id) { int t; if(!id) return -1; for(t = 0; t < nmacro_args; t++) { if(!strcmp(id, macro_args[t]->arg)) break; } return t < nmacro_args ? t : -1; } static mtext_t *new_mtext(char *str, int idx, def_exp_t type) { mtext_t *mt = pp_xmalloc(sizeof(mtext_t)); if(!mt) return NULL; if(str == NULL) mt->subst.argidx = idx; else mt->subst.text = str; mt->type = type; mt->next = mt->prev = NULL; return mt; } static mtext_t *combine_mtext(mtext_t *tail, mtext_t *mtp) { if(!tail) return mtp; if(!mtp) return tail; if(tail->type == exp_text && mtp->type == exp_text) { char *new_text; new_text = pp_xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1); if(!new_text) return mtp; tail->subst.text = new_text; strcat(tail->subst.text, mtp->subst.text); free(mtp->subst.text); free(mtp); return tail; } if(tail->type == exp_concat && mtp->type == exp_concat) { free(mtp); return tail; } if(tail->type == exp_concat && mtp->type == exp_text) { int len = strlen(mtp->subst.text); while(len) { /* FIXME: should delete space from head of string */ if(isspace(mtp->subst.text[len-1] & 0xff)) mtp->subst.text[--len] = '\0'; else break; } if(!len) { free(mtp->subst.text); free(mtp); return tail; } } if(tail->type == exp_text && mtp->type == exp_concat) { int len = strlen(tail->subst.text); while(len) { if(isspace(tail->subst.text[len-1] & 0xff)) tail->subst.text[--len] = '\0'; else break; } if(!len) { mtp->prev = tail->prev; mtp->next = tail->next; if(tail->prev) tail->prev->next = mtp; free(tail->subst.text); free(tail); return mtp; } } tail->next = mtp; mtp->prev = tail; return mtp; } static char *merge_text(char *s1, char *s2) { int l1; int l2; char *snew; if(!s1) return s2; if(!s2) return s1; l1 = strlen(s1); l2 = strlen(s2); snew = pp_xrealloc(s1, l1+l2+1); if(!snew) { free(s2); return s1; } s1 = snew; memcpy(s1+l1, s2, l2+1); free(s2); return s1; } ================================================ FILE: wpp/preproc.c ================================================ /* * Copyright 1998 Bertho A. Stultiens (BS) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_IO_H # include #endif #include "wine/wpp.h" #include "wpp_private.h" struct pp_status pp_status; #define HASHKEY 2039 typedef struct pp_def_state { struct pp_def_state *next; pp_entry_t *defines[HASHKEY]; } pp_def_state_t; static pp_def_state_t *pp_def_state; #define MAXIFSTACK 64 static pp_if_state_t if_stack[MAXIFSTACK]; static int if_stack_idx = 0; #if 0 void pp_print_status(void) __attribute__((destructor)); void pp_print_status(void) { int i; int sum; int total = 0; pp_entry_t *ppp; fprintf(stderr, "Defines statistics:\n"); for(i = 0; i < HASHKEY; i++) { sum = 0; for(ppp = pp_def_state->defines[i]; ppp; ppp = ppp->next) sum++; total += sum; if (sum) fprintf(stderr, "%4d, %3d\n", i, sum); } fprintf(stderr, "Total defines: %d\n", total); } #endif void *pp_xmalloc(size_t size) { void *res; assert(size > 0); res = malloc(size); if(res == NULL) { /* Set the error flag */ pp_status.state = 1; } return res; } void *pp_xrealloc(void *p, size_t size) { void *res; assert(size > 0); res = realloc(p, size); if(res == NULL) { /* Set the error flag */ pp_status.state = 1; } return res; } char *pp_xstrdup(const char *str) { char *s; int len; assert(str != NULL); len = strlen(str)+1; s = pp_xmalloc(len); if(!s) return NULL; return memcpy(s, str, len); } static char *wpp_default_lookup(const char *name, int type, const char *parent_name, char **include_path, int include_path_count) { char *cpy; char *cptr; char *path; const char *ccptr; int i, fd; cpy = pp_xmalloc(strlen(name)+1); if(!cpy) return NULL; cptr = cpy; for(ccptr = name; *ccptr; ccptr++) { /* Convert to forward slash */ if(*ccptr == '\\') { /* kill double backslash */ if(ccptr[1] == '\\') ccptr++; *cptr = '/'; }else { *cptr = *ccptr; } cptr++; } *cptr = '\0'; if(type && parent_name) { /* Search directory of parent include and then -I path */ const char *p; if ((p = strrchr( parent_name, '/' ))) p++; else p = parent_name; path = pp_xmalloc( (p - parent_name) + strlen(cpy) + 1 ); if(!path) { free(cpy); return NULL; } memcpy( path, parent_name, p - parent_name ); strcpy( path + (p - parent_name), cpy ); fd = open( path, O_RDONLY ); if (fd != -1) { close( fd ); free( cpy ); return path; } free( path ); } /* Search -I path */ for(i = 0; i < include_path_count; i++) { path = pp_xmalloc(strlen(include_path[i]) + strlen(cpy) + 2); if(!path) { free(cpy); return NULL; } strcpy(path, include_path[i]); strcat(path, "/"); strcat(path, cpy); fd = open( path, O_RDONLY ); if (fd != -1) { close( fd ); free( cpy ); return path; } free( path ); } free( cpy ); return NULL; } static void *wpp_default_open(const char *filename, int type) { return fopen(filename,"rt"); } static void wpp_default_close(void *file) { fclose(file); } static int wpp_default_read(void *file, char *buffer, unsigned int len){ return fread(buffer, 1, len, file); } static void wpp_default_write( const char *buffer, unsigned int len ) { fwrite(buffer, 1, len, ppy_out); } /* Don't comment on the hash, it's primitive but functional... */ static int pphash(const char *str) { int sum = 0; while(*str) sum += *str++; return sum % HASHKEY; } pp_entry_t *pplookup(const char *ident) { int idx; pp_entry_t *ppp; if(!ident) return NULL; idx = pphash(ident); for(ppp = pp_def_state->defines[idx]; ppp; ppp = ppp->next) { if(!strcmp(ident, ppp->ident)) return ppp; } return NULL; } static void free_pp_entry( pp_entry_t *ppp, int idx ) { if(ppp->iep) { if(ppp->iep == pp_includelogiclist) { pp_includelogiclist = ppp->iep->next; if(pp_includelogiclist) pp_includelogiclist->prev = NULL; } else { ppp->iep->prev->next = ppp->iep->next; if(ppp->iep->next) ppp->iep->next->prev = ppp->iep->prev; } free(ppp->iep->filename); free(ppp->iep); } if(pp_def_state->defines[idx] == ppp) { pp_def_state->defines[idx] = ppp->next; if(pp_def_state->defines[idx]) pp_def_state->defines[idx]->prev = NULL; } else { ppp->prev->next = ppp->next; if(ppp->next) ppp->next->prev = ppp->prev; } free(ppp); } /* push a new (empty) define state */ int pp_push_define_state(void) { pp_def_state_t *state = pp_xmalloc( sizeof(*state) ); if(!state) return 1; memset( state->defines, 0, sizeof(state->defines) ); state->next = pp_def_state; pp_def_state = state; return 0; } /* pop the current define state */ void pp_pop_define_state(void) { int i; pp_entry_t *ppp; pp_def_state_t *state; for (i = 0; i < HASHKEY; i++) { while ((ppp = pp_def_state->defines[i]) != NULL) pp_del_define( ppp->ident ); } state = pp_def_state; pp_def_state = state->next; free( state ); } void pp_del_define(const char *name) { pp_entry_t *ppp; int idx = pphash(name); if((ppp = pplookup(name)) == NULL) { if(pp_status.pedantic) ppy_warning("%s was not defined", name); return; } if(pp_status.debug) printf("Deleting (%s, %d) <%s>\n", pp_status.input, pp_status.line_number, name); free( ppp->ident ); free( ppp->subst.text ); free( ppp->filename ); free_pp_entry( ppp, idx ); } pp_entry_t *pp_add_define(const char *def, const char *text) { int len; char *cptr; int idx; pp_entry_t *ppp; if(!def) return NULL; idx = pphash(def); if((ppp = pplookup(def)) != NULL) { if(pp_status.pedantic) ppy_warning("Redefinition of %s\n\tPrevious definition: %s:%d", def, ppp->filename, ppp->linenumber); pp_del_define(def); } ppp = pp_xmalloc(sizeof(pp_entry_t)); if(!ppp) return NULL; memset( ppp, 0, sizeof(*ppp) ); ppp->ident = pp_xstrdup(def); if(!ppp->ident) goto error; ppp->type = def_define; ppp->subst.text = text ? pp_xstrdup(text) : NULL; if(text && !ppp->subst.text) goto error; ppp->filename = pp_xstrdup(pp_status.input ? pp_status.input : ""); if(!ppp->filename) goto error; ppp->linenumber = pp_status.input ? pp_status.line_number : 0; ppp->next = pp_def_state->defines[idx]; pp_def_state->defines[idx] = ppp; if(ppp->next) ppp->next->prev = ppp; if(ppp->subst.text) { /* Strip trailing white space from subst text */ len = strlen(ppp->subst.text); while(len && strchr(" \t\r\n", ppp->subst.text[len-1])) { ppp->subst.text[--len] = '\0'; } /* Strip leading white space from subst text */ for(cptr = ppp->subst.text; *cptr && strchr(" \t\r", *cptr); cptr++) ; if(ppp->subst.text != cptr) memmove(ppp->subst.text, cptr, strlen(cptr)+1); } if(pp_status.debug) printf("Added define (%s, %d) <%s> to <%s>\n", pp_status.input, pp_status.line_number, ppp->ident, ppp->subst.text ? ppp->subst.text : "(null)"); return ppp; error: free(ppp->ident); free(ppp->subst.text); free(ppp); return NULL; } pp_entry_t *pp_add_macro(char *id, marg_t *args[], int nargs, mtext_t *exp) { int idx; pp_entry_t *ppp; if(!id) return NULL; idx = pphash(id); if((ppp = pplookup(id)) != NULL) { if(pp_status.pedantic) ppy_warning("Redefinition of %s\n\tPrevious definition: %s:%d", id, ppp->filename, ppp->linenumber); pp_del_define(id); } ppp = pp_xmalloc(sizeof(pp_entry_t)); if(!ppp) return NULL; memset( ppp, 0, sizeof(*ppp) ); ppp->ident = id; ppp->type = def_macro; ppp->margs = args; ppp->nargs = nargs; ppp->subst.mtext= exp; ppp->filename = pp_xstrdup(pp_status.input ? pp_status.input : ""); if(!ppp->filename) { free(ppp); return NULL; } ppp->linenumber = pp_status.input ? pp_status.line_number : 0; ppp->next = pp_def_state->defines[idx]; pp_def_state->defines[idx] = ppp; if(ppp->next) ppp->next->prev = ppp; if(pp_status.debug) { fprintf(stderr, "Added macro (%s, %d) <%s(%d)> to <", pp_status.input, pp_status.line_number, ppp->ident, nargs); for(; exp; exp = exp->next) { switch(exp->type) { case exp_text: fprintf(stderr, " \"%s\" ", exp->subst.text); break; case exp_stringize: fprintf(stderr, " #(%d) ", exp->subst.argidx); break; case exp_concat: fprintf(stderr, "##"); break; case exp_subst: fprintf(stderr, " <%d> ", exp->subst.argidx); break; } } fprintf(stderr, ">\n"); } return ppp; } /* *------------------------------------------------------------------------- * Include management *------------------------------------------------------------------------- */ #if defined(_WIN32) || defined(__MSDOS__) #define INCLUDESEPARATOR ";" #else #define INCLUDESEPARATOR ":" #endif static char **includepath; static int nincludepath = 0; int wpp_add_include_path(const char *path) { char *tok; char *cpy = pp_xstrdup(path); if(!cpy) return 1; tok = strtok(cpy, INCLUDESEPARATOR); while(tok) { if(*tok) { char *dir; char *cptr; char **new_path; dir = pp_xstrdup(tok); if(!dir) { free(cpy); return 1; } for(cptr = dir; *cptr; cptr++) { /* Convert to forward slash */ if(*cptr == '\\') *cptr = '/'; } /* Kill eventual trailing '/' */ if(*(cptr = dir + strlen(dir)-1) == '/') *cptr = '\0'; /* Add to list */ new_path = pp_xrealloc(includepath, (nincludepath+1) * sizeof(*includepath)); if(!new_path) { free(dir); free(cpy); return 1; } includepath = new_path; includepath[nincludepath] = dir; nincludepath++; } tok = strtok(NULL, INCLUDESEPARATOR); } free(cpy); return 0; } char *wpp_find_include(const char *name, const char *parent_name) { return wpp_default_lookup(name, !!parent_name, parent_name, includepath, nincludepath); } void *pp_open_include(const char *name, int type, const char *parent_name, char **newpath) { char *path; void *fp; if (!(path = wpp_callbacks->lookup(name, type, parent_name, includepath, nincludepath))) return NULL; fp = wpp_callbacks->open(path, type); if (fp) { if (pp_status.debug) printf("Going to include <%s>\n", path); if (newpath) *newpath = path; else free( path ); return fp; } free( path ); return NULL; } /* *------------------------------------------------------------------------- * #if, #ifdef, #ifndef, #else, #elif and #endif state management * * #if state transitions are made on basis of the current TOS and the next * required state. The state transitions are required to housekeep because * #if:s can be nested. The ignore case is activated to prevent output from * within a false clause. * Some special cases come from the fact that the #elif cases are not * binary, but three-state. The problem is that all other elif-cases must * be false when one true one has been found. A second problem is that the * #else clause is a final clause. No extra #else:s may follow. * * The states mean: * if_true Process input to output * if_false Process input but no output * if_ignore Process input but no output * if_elif Process input but no output * if_elsefalse Process input but no output * if_elsettrue Process input to output * * The possible state-sequences are [state(stack depth)] (rest can be deduced): * TOS #if 1 #else #endif * if_true(n) if_true(n+1) if_elsefalse(n+1) * if_false(n) if_ignore(n+1) if_ignore(n+1) * if_elsetrue(n) if_true(n+1) if_elsefalse(n+1) * if_elsefalse(n) if_ignore(n+1) if_ignore(n+1) * if_elif(n) if_ignore(n+1) if_ignore(n+1) * if_ignore(n) if_ignore(n+1) if_ignore(n+1) * * TOS #if 1 #elif 0 #else #endif * if_true(n) if_true(n+1) if_elif(n+1) if_elif(n+1) * if_false(n) if_ignore(n+1) if_ignore(n+1) if_ignore(n+1) * if_elsetrue(n) if_true(n+1) if_elif(n+1) if_elif(n+1) * if_elsefalse(n) if_ignore(n+1) if_ignore(n+1) if_ignore(n+1) * if_elif(n) if_ignore(n+1) if_ignore(n+1) if_ignore(n+1) * if_ignore(n) if_ignore(n+1) if_ignore(n+1) if_ignore(n+1) * * TOS #if 0 #elif 1 #else #endif * if_true(n) if_false(n+1) if_true(n+1) if_elsefalse(n+1) * if_false(n) if_ignore(n+1) if_ignore(n+1) if_ignore(n+1) * if_elsetrue(n) if_false(n+1) if_true(n+1) if_elsefalse(n+1) * if_elsefalse(n) if_ignore(n+1) if_ignore(n+1) if_ignore(n+1) * if_elif(n) if_ignore(n+1) if_ignore(n+1) if_ignore(n+1) * if_ignore(n) if_ignore(n+1) if_ignore(n+1) if_ignore(n+1) * *------------------------------------------------------------------------- */ static const char * const pp_if_state_str[] = { "if_false", "if_true", "if_elif", "if_elsefalse", "if_elsetrue", "if_ignore" }; void pp_push_if(pp_if_state_t s) { if(if_stack_idx >= MAXIFSTACK) pp_internal_error(__FILE__, __LINE__, "#if-stack overflow; #{if,ifdef,ifndef} nested too deeply (> %d)", MAXIFSTACK); if(pp_flex_debug) fprintf(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); if_stack[if_stack_idx++] = s; switch(s) { case if_true: case if_elsetrue: break; case if_false: case if_elsefalse: case if_elif: case if_ignore: pp_push_ignore_state(); break; default: pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d)", (int)pp_if_state()); } } pp_if_state_t pp_pop_if(void) { if(if_stack_idx <= 0) { ppy_error("#{endif,else,elif} without #{if,ifdef,ifndef} (#if-stack underflow)"); return if_error; } switch(pp_if_state()) { case if_true: case if_elsetrue: break; case if_false: case if_elsefalse: case if_elif: case if_ignore: pp_pop_ignore_state(); break; default: pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d)", (int)pp_if_state()); } if(pp_flex_debug) fprintf(stderr, "Pop 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[if_stack[if_stack_idx <= 1 ? if_true : if_stack_idx-2]], if_stack_idx-1); return if_stack[--if_stack_idx]; } pp_if_state_t pp_if_state(void) { if(!if_stack_idx) return if_true; else return if_stack[if_stack_idx-1]; } void pp_next_if_state(int i) { switch(pp_if_state()) { case if_true: case if_elsetrue: pp_push_if(i ? if_true : if_false); break; case if_false: case if_elsefalse: case if_elif: case if_ignore: pp_push_if(if_ignore); break; default: pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #{if,ifdef,ifndef} directive", (int)pp_if_state()); } } int pp_get_if_depth(void) { return if_stack_idx; } /* #define WANT_NEAR_INDICATION */ static void generic_msg(const char *s, const char *t, const char *n, va_list ap) { fprintf(stderr, "%s:%d:%d: %s: ", pp_status.input ? pp_status.input : "stdin", pp_status.line_number, pp_status.char_number, t); vfprintf(stderr, s, ap); #ifdef WANT_NEAR_INDICATION { char *cpy, *p; if(n) { cpy = pp_xstrdup(n); if(!cpy) goto end; for (p = cpy; *p; p++) if(!isprint(*p)) *p = ' '; fprintf(stderr, " near '%s'", cpy); free(cpy); } } end: #endif fprintf(stderr, "\n"); } static void wpp_default_error(const char *file, int line, int col, const char *near, const char *msg, va_list ap) { generic_msg(msg, "Error", near, ap); exit(1); } static void wpp_default_warning(const char *file, int line, int col, const char *near, const char *msg, va_list ap) { generic_msg(msg, "Warning", near, ap); } static const struct wpp_callbacks default_callbacks = { wpp_default_lookup, wpp_default_open, wpp_default_close, wpp_default_read, wpp_default_write, wpp_default_error, wpp_default_warning, }; const struct wpp_callbacks *wpp_callbacks = &default_callbacks; int ppy_error(const char *s, ...) { va_list ap; va_start(ap, s); wpp_callbacks->error(pp_status.input, pp_status.line_number, pp_status.char_number, ppy_text, s, ap); va_end(ap); pp_status.state = 1; return 1; } int ppy_warning(const char *s, ...) { va_list ap; va_start(ap, s); wpp_callbacks->warning(pp_status.input, pp_status.line_number, pp_status.char_number, ppy_text, s, ap); va_end(ap); return 0; } void pp_internal_error(const char *file, int line, const char *s, ...) { va_list ap; va_start(ap, s); fprintf(stderr, "Internal error (please report) %s %d: ", file, line); vfprintf(stderr, s, ap); fprintf(stderr, "\n"); va_end(ap); exit(3); } ================================================ FILE: wpp/wpp.c ================================================ /* * Exported functions of the Wine preprocessor * * Copyright 1998 Bertho A. Stultiens * Copyright 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include "wpp_private.h" #include "wine/wpp.h" int ppy_debug, pp_flex_debug; struct define { struct define *next; char *name; char *value; }; static struct define *cmdline_defines; static void add_cmdline_defines(void) { struct define *def; for (def = cmdline_defines; def; def = def->next) { if (def->value) pp_add_define( def->name, def->value ); } } static void del_cmdline_defines(void) { struct define *def; for (def = cmdline_defines; def; def = def->next) { if (def->value) pp_del_define( def->name ); } } static void add_special_defines(void) { time_t now = time(NULL); pp_entry_t *ppp; char buf[32]; strftime(buf, sizeof(buf), "\"%b %d %Y\"", localtime(&now)); pp_add_define( "__DATE__", buf ); strftime(buf, sizeof(buf), "\"%H:%M:%S\"", localtime(&now)); pp_add_define( "__TIME__", buf ); ppp = pp_add_define( "__FILE__", "" ); if(ppp) ppp->type = def_special; ppp = pp_add_define( "__LINE__", "" ); if(ppp) ppp->type = def_special; } static void del_special_defines(void) { pp_del_define( "__DATE__" ); pp_del_define( "__TIME__" ); pp_del_define( "__FILE__" ); pp_del_define( "__LINE__" ); } /* add a define to the preprocessor list */ int wpp_add_define( const char *name, const char *value ) { struct define *def; if (!value) value = ""; for (def = cmdline_defines; def; def = def->next) { if (!strcmp( def->name, name )) { char *new_value = pp_xstrdup(value); if(!new_value) return 1; free( def->value ); def->value = new_value; return 0; } } def = pp_xmalloc( sizeof(*def) ); if(!def) return 1; def->next = cmdline_defines; def->name = pp_xstrdup(name); if(!def->name) { free(def); return 1; } def->value = pp_xstrdup(value); if(!def->value) { free(def->name); free(def); return 1; } cmdline_defines = def; return 0; } /* undefine a previously added definition */ void wpp_del_define( const char *name ) { struct define *def; for (def = cmdline_defines; def; def = def->next) { if (!strcmp( def->name, name )) { free( def->value ); def->value = NULL; return; } } } /* add a command-line define of the form NAME=VALUE */ int wpp_add_cmdline_define( const char *value ) { char *p; char *str = pp_xstrdup(value); if(!str) return 1; p = strchr( str, '=' ); if (p) *p++ = 0; wpp_add_define( str, p ); free( str ); return 0; } /* set the various debug flags */ void wpp_set_debug( int lex_debug, int parser_debug, int msg_debug ) { pp_flex_debug = lex_debug; ppy_debug = parser_debug; pp_status.debug = msg_debug; } /* set the pedantic mode */ void wpp_set_pedantic( int on ) { pp_status.pedantic = on; } /* the main preprocessor parsing loop */ int wpp_parse( const char *input, FILE *output ) { int ret; pp_status.input = NULL; pp_status.line_number = 1; pp_status.char_number = 1; pp_status.state = 0; ret = pp_push_define_state(); if(ret) return ret; add_cmdline_defines(); add_special_defines(); if (!input) pp_status.file = stdin; else if (!(pp_status.file = wpp_callbacks->open(input, 1))) { ppy_error("Could not open %s\n", input); del_special_defines(); del_cmdline_defines(); pp_pop_define_state(); return 2; } pp_status.input = input ? pp_xstrdup(input) : NULL; ppy_out = output; pp_writestring("# 1 \"%s\" 1\n", input ? input : ""); ret = ppy_parse(); /* If there were errors during processing, return an error code */ if (!ret && pp_status.state) ret = pp_status.state; if (input) { wpp_callbacks->close(pp_status.file); free(pp_status.input); } /* Clean if_stack, it could remain dirty on errors */ while (pp_get_if_depth()) pp_pop_if(); del_special_defines(); del_cmdline_defines(); pp_pop_define_state(); return ret; } void wpp_set_callbacks( const struct wpp_callbacks *callbacks ) { wpp_callbacks = callbacks; } ================================================ FILE: wpp/wpp.vcxproj ================================================  Debug Win32 Release Win32 {433BAA32-23BE-4B63-B24B-B89938F4FF35} Win32Proj wpp 10.0.17134.0 StaticLibrary true v141 Unicode StaticLibrary false v141 true Unicode true false Level3 Disabled _X86_;WIN32;_DEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose ;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions) ../wine Console true $(OutDir)libwine.lib;%(AdditionalDependencies) Level3 MaxSpeed true true _X86_;WIN32;NDEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose ;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions) ../wine Console true true true $(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) Document "$(FlexPath)flex" "%(FileName)%(Extension)" "$(FlexPath)flex" "%(FileName)%(Extension)" lex.ppy_.c lex.ppy_.c ClCompile ClCompile Document "$(BisonPath)bison" -p ppy_ -d "%(FileName)%(Extension)" ppy.tab.c "$(BisonPath)bison" -p ppy_ -d "%(FileName)%(Extension)" ppy.tab.c ClCompile ClCompile ================================================ FILE: wpp/wpp_private.h ================================================ /* * Copyright 1998 Bertho A. Stultiens (BS) * Copyright 2002 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_WPP_PRIVATE_H #define __WINE_WPP_PRIVATE_H #ifndef __WINE_CONFIG_H # error You must include config.h to use this header #endif #include #include struct pp_entry; /* forward */ /* * Include logic * A stack of files which are already included and * are protected in the #ifndef/#endif way. */ typedef struct includelogicentry { struct includelogicentry *next; struct includelogicentry *prev; struct pp_entry *ppp; /* The define which protects the file */ char *filename; /* The filename of the include */ } includelogicentry_t; /* * The arguments of a macrodefinition */ typedef enum { arg_single, arg_list } def_arg_t; typedef struct marg { def_arg_t type; /* Normal or ... argument */ char *arg; /* The textual argument */ int nnl; /* Number of newlines in the text to subst */ } marg_t; /* * The expansiontext of a macro */ typedef enum { exp_text, /* Simple text substitution */ exp_concat, /* Concat (##) operator requested */ exp_stringize, /* Stringize (#) operator requested */ exp_subst /* Substitute argument */ } def_exp_t; typedef struct mtext { struct mtext *next; struct mtext *prev; def_exp_t type; union { char *text; int argidx; /* For exp_subst and exp_stringize reference */ } subst; } mtext_t; /* * The define descriptor */ typedef enum { def_none, /* Not-a-define; used as return value */ def_define, /* Simple defines */ def_macro, /* Macro defines */ def_special /* Special expansions like __LINE__ and __FILE__ */ } def_type_t; typedef struct pp_entry { struct pp_entry *next; struct pp_entry *prev; def_type_t type; /* Define or macro */ char *ident; /* The key */ marg_t **margs; /* Macro arguments array or NULL if none */ int nargs; union { mtext_t *mtext; /* The substitution sequence or NULL if none */ char *text; } subst; int expanding; /* Set when feeding substitution into the input */ char *filename; /* Filename where it was defined */ int linenumber; /* Linenumber where it was defined */ includelogicentry_t *iep; /* Points to the include it protects */ } pp_entry_t; /* * If logic */ #define MAXIFSTACK 64 /* If this isn't enough you should alter the source... */ typedef enum { if_false, if_true, if_elif, if_elsefalse, if_elsetrue, if_ignore, if_error } pp_if_state_t; /* * Trace the include files to prevent double reading. * This save 20..30% of processing time for most stuff * that uses complex includes. * States: * -1 Don't track or seen junk * 0 New include, waiting for "#ifndef __xxx_h" * 1 Seen #ifndef, waiting for "#define __xxx_h ..." * 2 Seen #endif, waiting for EOF */ typedef struct { int state; char *ppp; /* The define to be set from the #ifndef */ int ifdepth; /* The level of ifs at the #ifdef */ int seen_junk; /* Set when junk is seen */ } include_state_t; /* * If the configure says we have long long then we can use it. Presumably * if we have long long then we have strtoull and strtoll too. If that is * not the case we will need to add to the configure tests. * If we do not have long long , then we revert to a simple 'long' for now. * This should prevent most unexpected things with other compilers than * gcc and egcs for now. * In the future it should be possible to use another way, like a * structure, so that we can emulate the MS compiler. */ #ifdef HAVE_LONG_LONG typedef long long wrc_sll_t; typedef unsigned long long wrc_ull_t; #else typedef long wrc_sll_t; typedef unsigned long wrc_ull_t; #endif #define SIZE_CHAR 1 #define SIZE_SHORT 2 #define SIZE_INT 3 #define SIZE_LONG 4 #define SIZE_LONGLONG 5 #define SIZE_MASK 0x00ff #define FLAG_SIGNED 0x0100 typedef enum { #if 0 cv_schar = SIZE_CHAR + FLAG_SIGNED, cv_uchar = SIZE_CHAR, cv_sshort = SIZE_SHORT + FLAG_SIGNED, cv_ushort = SIZE_SHORT, #endif cv_sint = SIZE_INT + FLAG_SIGNED, cv_uint = SIZE_INT, cv_slong = SIZE_LONG + FLAG_SIGNED, cv_ulong = SIZE_LONG, cv_sll = SIZE_LONGLONG + FLAG_SIGNED, cv_ull = SIZE_LONGLONG } ctype_t; typedef struct cval { ctype_t type; union { #if 0 signed char sc; /* Explicitly signed because compilers are stupid */ unsigned char uc; short ss; unsigned short us; #endif int si; unsigned int ui; long sl; unsigned long ul; wrc_sll_t sll; wrc_ull_t ull; } val; } cval_t; void *pp_xmalloc(size_t); void *pp_xrealloc(void *, size_t); char *pp_xstrdup(const char *str); pp_entry_t *pplookup(const char *ident); int pp_push_define_state(void); void pp_pop_define_state(void); pp_entry_t *pp_add_define(const char *def, const char *text); pp_entry_t *pp_add_macro(char *ident, marg_t *args[], int nargs, mtext_t *exp); void pp_del_define(const char *name); void *pp_open_include(const char *name, int type, const char *parent_name, char **newpath); void pp_push_if(pp_if_state_t s); void pp_next_if_state(int); pp_if_state_t pp_pop_if(void); pp_if_state_t pp_if_state(void); int pp_get_if_depth(void); #ifndef __GNUC__ #define __attribute__(x) /*nothing*/ #endif extern const struct wpp_callbacks *wpp_callbacks; int ppy_error(const char *s, ...) __attribute__((format (printf, 1, 2))); int ppy_warning(const char *s, ...) __attribute__((format (printf, 1, 2))); void pp_internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4))); /* current preprocessor state */ /* everything is in this structure to avoid polluting the global symbol space */ struct pp_status { char *input; /* current input file name */ void *file; /* current input file descriptor */ int line_number; /* current line number */ int char_number; /* current char number in line */ int state; /* current error state */ int pedantic; /* pedantic option */ int debug; /* debug messages flag */ }; extern struct pp_status pp_status; extern include_state_t pp_incl_state; extern includelogicentry_t *pp_includelogiclist; /* * From ppl.l */ extern FILE *ppy_in; extern FILE *ppy_out; extern char *ppy_text; extern int pp_flex_debug; int ppy_lex(void); void pp_do_include(char *fname, int type); void pp_push_ignore_state(void); void pp_pop_ignore_state(void); void pp_writestring(const char *format, ...) __attribute__((format (printf, 1, 2))); /* * From ppy.y */ int ppy_parse(void); extern int ppy_debug; #endif /* __WINE_WPP_PRIVATE_H */